diff --git a/CMakeLists.txt b/CMakeLists.txt index 69981dd..fd130fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,7 +72,7 @@ add_subdirectory(bayesnet) # ------- if (ENABLE_TESTING) MESSAGE("Testing enabled") - add_subdirectory("tests/lib/catch2") + add_subdirectory(tests/lib/catch2) add_subdirectory(tests/lib/Files) include(CTest) add_subdirectory(tests) diff --git a/Makefile b/Makefile index e694663..e4611b1 100644 --- a/Makefile +++ b/Makefile @@ -122,13 +122,13 @@ coverage: ## Run tests and generate coverage report (build/index.html) @$(gcovr) $(f_debug)/tests @echo ">>> Building report..." @cd $(f_debug)/tests; \ - $(lcov) --directory . --capture --output-file coverage.info >/dev/null 2>&1; \ + $(lcov) --directory CMakeFiles --capture --ignore-errors source,source --output-file coverage.info >/dev/null 2>&1; \ $(lcov) --remove coverage.info '/usr/*' --output-file coverage.info >/dev/null 2>&1; \ $(lcov) --remove coverage.info 'lib/*' --output-file coverage.info >/dev/null 2>&1; \ $(lcov) --remove coverage.info 'libtorch/*' --output-file coverage.info >/dev/null 2>&1; \ $(lcov) --remove coverage.info 'tests/*' --output-file coverage.info >/dev/null 2>&1; \ $(lcov) --remove coverage.info 'bayesnet/utils/loguru.*' --ignore-errors unused --output-file coverage.info >/dev/null 2>&1 - @$(genhtml) $(f_debug)/tests/coverage.info --output-directory html >/dev/null 2>&1; + @$(genhtml) $(f_debug)/tests/coverage.info --demangle-cpp --output-directory html >/dev/null 2>&1; @$(MAKE) updatebadge @echo ">>> Done"; diff --git a/README.md b/README.md index 45e84cd..dcb5707 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=rmontanana_BayesNet&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=rmontanana_BayesNet) [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=rmontanana_BayesNet&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=rmontanana_BayesNet) ![Gitea Last Commit](https://img.shields.io/gitea/last-commit/rmontanana/bayesnet?gitea_url=https://gitea.rmontanana.es:3000&logo=gitea) -[![Coverage Badge](https://img.shields.io/badge/Coverage-97,1%25-green)](html/index.html) +[![Coverage Badge](https://img.shields.io/badge/Coverage-97,8%25-green)](html/index.html) Bayesian Network Classifiers using libtorch from scratch diff --git a/bayesnet/network/Network.cc b/bayesnet/network/Network.cc index 04fa71b..e0e2e38 100644 --- a/bayesnet/network/Network.cc +++ b/bayesnet/network/Network.cc @@ -410,11 +410,7 @@ namespace bayesnet { result.insert(it2, fatherName); ending = false; } - } else { - throw std::logic_error("Error in topological sort because of node " + feature + " is not in result"); } - } else { - throw std::logic_error("Error in topological sort because of node father " + fatherName + " is not in result"); } } } diff --git a/docs/coverage.pdf b/docs/coverage.pdf index 582c2b9..649a52c 100644 Binary files a/docs/coverage.pdf and b/docs/coverage.pdf differ diff --git a/html/BayesNet/bayesnet/BaseClassifier.h.func-c.html b/html/BayesNet/bayesnet/BaseClassifier.h.func-c.html new file mode 100644 index 0000000..9c56fa2 --- /dev/null +++ b/html/BayesNet/bayesnet/BaseClassifier.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/BaseClassifier.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet - BaseClassifier.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:50.0 %21
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet14BaseClassifierD0Ev606
_ZN8bayesnet14BaseClassifierD0Ev0
_ZN8bayesnet14BaseClassifierD2Ev606
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/BaseClassifier.h.func.html b/html/BayesNet/bayesnet/BaseClassifier.h.func.html new file mode 100644 index 0000000..fef9b55 --- /dev/null +++ b/html/BayesNet/bayesnet/BaseClassifier.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/BaseClassifier.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet - BaseClassifier.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:50.0 %21
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet14BaseClassifierD0Ev606
_ZN8bayesnet14BaseClassifierD0Ev0
_ZN8bayesnet14BaseClassifierD2Ev606
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/BaseClassifier.h.gcov.html b/html/BayesNet/bayesnet/BaseClassifier.h.gcov.html new file mode 100644 index 0000000..7707697 --- /dev/null +++ b/html/BayesNet/bayesnet/BaseClassifier.h.gcov.html @@ -0,0 +1,121 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/BaseClassifier.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet - BaseClassifier.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:50.0 %21
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #pragma once
+       8              : #include <vector>
+       9              : #include <torch/torch.h>
+      10              : #include <nlohmann/json.hpp>
+      11              : namespace bayesnet {
+      12              :     enum status_t { NORMAL, WARNING, ERROR };
+      13              :     class BaseClassifier {
+      14              :     public:
+      15              :         // X is nxm std::vector, y is nx1 std::vector
+      16              :         virtual BaseClassifier& fit(std::vector<std::vector<int>>& X, std::vector<int>& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states) = 0;
+      17              :         // X is nxm tensor, y is nx1 tensor
+      18              :         virtual BaseClassifier& fit(torch::Tensor& X, torch::Tensor& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states) = 0;
+      19              :         virtual BaseClassifier& fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states) = 0;
+      20              :         virtual BaseClassifier& fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights) = 0;
+      21          606 :         virtual ~BaseClassifier() = default;
+      22              :         torch::Tensor virtual predict(torch::Tensor& X) = 0;
+      23              :         std::vector<int> virtual predict(std::vector<std::vector<int >>& X) = 0;
+      24              :         torch::Tensor virtual predict_proba(torch::Tensor& X) = 0;
+      25              :         std::vector<std::vector<double>> virtual predict_proba(std::vector<std::vector<int >>& X) = 0;
+      26              :         status_t virtual getStatus() const = 0;
+      27              :         float virtual score(std::vector<std::vector<int>>& X, std::vector<int>& y) = 0;
+      28              :         float virtual score(torch::Tensor& X, torch::Tensor& y) = 0;
+      29              :         int virtual getNumberOfNodes()const = 0;
+      30              :         int virtual getNumberOfEdges()const = 0;
+      31              :         int virtual getNumberOfStates() const = 0;
+      32              :         int virtual getClassNumStates() const = 0;
+      33              :         std::vector<std::string> virtual show() const = 0;
+      34              :         std::vector<std::string> virtual graph(const std::string& title = "") const = 0;
+      35              :         virtual std::string getVersion() = 0;
+      36              :         std::vector<std::string> virtual topological_order() = 0;
+      37              :         std::vector<std::string> virtual getNotes() const = 0;
+      38              :         std::string virtual dump_cpt()const = 0;
+      39              :         virtual void setHyperparameters(const nlohmann::json& hyperparameters) = 0;
+      40              :         std::vector<std::string>& getValidHyperparameters() { return validHyperparameters; }
+      41              :     protected:
+      42              :         virtual void trainModel(const torch::Tensor& weights) = 0;
+      43              :         std::vector<std::string> validHyperparameters;
+      44              :     };
+      45              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/Classifier.cc.func-c.html b/html/BayesNet/bayesnet/classifiers/Classifier.cc.func-c.html new file mode 100644 index 0000000..5fa096f --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/Classifier.cc.func-c.html @@ -0,0 +1,243 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/Classifier.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - Classifier.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %126126
Test Date:2024-04-30 13:17:26Functions:100.0 %2424
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet10Classifier17topological_orderB5cxx11Ev2
_ZNK8bayesnet10Classifier8dump_cptB5cxx11Ev2
_ZN8bayesnet10Classifier5scoreERSt6vectorIS1_IiSaIiEESaIS3_EERS3_8
_ZN8bayesnet10Classifier7predictERSt6vectorIS1_IiSaIiEESaIS3_EE8
_ZNK8bayesnet10Classifier17getNumberOfStatesEv12
_ZNK8bayesnet10Classifier4showB5cxx11Ev12
_ZN8bayesnet10Classifier18setHyperparametersERKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEE42
_ZN8bayesnet10Classifier5scoreERN2at6TensorES3_56
_ZN8bayesnet10Classifier3fitERSt6vectorIS1_IiSaIiEESaIS3_EERS3_RKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISD_EERKSD_RSt3mapISD_S3_St4lessISD_ESaISt4pairISI_S3_EEE60
_ZN8bayesnet10Classifier3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE64
_ZNK8bayesnet10Classifier16getNumberOfEdgesEv94
_ZNK8bayesnet10Classifier16getNumberOfNodesEv94
_ZN8bayesnet10Classifier13predict_probaERSt6vectorIS1_IiSaIiEESaIS3_EE130
_ZN8bayesnet10Classifier12buildDatasetERN2at6TensorE162
_ZNK8bayesnet10Classifier17getClassNumStatesEv170
_ZN8bayesnet10Classifier3fitERN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE198
_ZN8bayesnet10Classifier3fitERN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEERKS2_330
_ZN8bayesnet10Classifier10trainModelERKN2at6TensorE560
_ZN8bayesnet10Classifier8addNodesEv560
_ZN8bayesnet10Classifier18checkFitParametersEv644
_ZN8bayesnet10Classifier5buildERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKS7_RSt3mapIS7_S1_IiSaIiEESt4lessIS7_ESaISt4pairISC_SG_EEERKN2at6TensorE644
_ZN8bayesnet10Classifier13predict_probaERN2at6TensorE742
_ZN8bayesnet10Classifier7predictERN2at6TensorE850
_ZN8bayesnet10ClassifierC2ENS_7NetworkE886
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/Classifier.cc.func.html b/html/BayesNet/bayesnet/classifiers/Classifier.cc.func.html new file mode 100644 index 0000000..fccc773 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/Classifier.cc.func.html @@ -0,0 +1,243 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/Classifier.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - Classifier.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %126126
Test Date:2024-04-30 13:17:26Functions:100.0 %2424
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet10Classifier10trainModelERKN2at6TensorE560
_ZN8bayesnet10Classifier12buildDatasetERN2at6TensorE162
_ZN8bayesnet10Classifier13predict_probaERN2at6TensorE742
_ZN8bayesnet10Classifier13predict_probaERSt6vectorIS1_IiSaIiEESaIS3_EE130
_ZN8bayesnet10Classifier17topological_orderB5cxx11Ev2
_ZN8bayesnet10Classifier18checkFitParametersEv644
_ZN8bayesnet10Classifier18setHyperparametersERKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEE42
_ZN8bayesnet10Classifier3fitERN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE198
_ZN8bayesnet10Classifier3fitERN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEERKS2_330
_ZN8bayesnet10Classifier3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE64
_ZN8bayesnet10Classifier3fitERSt6vectorIS1_IiSaIiEESaIS3_EERS3_RKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISD_EERKSD_RSt3mapISD_S3_St4lessISD_ESaISt4pairISI_S3_EEE60
_ZN8bayesnet10Classifier5buildERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKS7_RSt3mapIS7_S1_IiSaIiEESt4lessIS7_ESaISt4pairISC_SG_EEERKN2at6TensorE644
_ZN8bayesnet10Classifier5scoreERN2at6TensorES3_56
_ZN8bayesnet10Classifier5scoreERSt6vectorIS1_IiSaIiEESaIS3_EERS3_8
_ZN8bayesnet10Classifier7predictERN2at6TensorE850
_ZN8bayesnet10Classifier7predictERSt6vectorIS1_IiSaIiEESaIS3_EE8
_ZN8bayesnet10Classifier8addNodesEv560
_ZN8bayesnet10ClassifierC2ENS_7NetworkE886
_ZNK8bayesnet10Classifier16getNumberOfEdgesEv94
_ZNK8bayesnet10Classifier16getNumberOfNodesEv94
_ZNK8bayesnet10Classifier17getClassNumStatesEv170
_ZNK8bayesnet10Classifier17getNumberOfStatesEv12
_ZNK8bayesnet10Classifier4showB5cxx11Ev12
_ZNK8bayesnet10Classifier8dump_cptB5cxx11Ev2
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/Classifier.cc.gcov.html b/html/BayesNet/bayesnet/classifiers/Classifier.cc.gcov.html new file mode 100644 index 0000000..19bbfc1 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/Classifier.cc.gcov.html @@ -0,0 +1,270 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/Classifier.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - Classifier.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %126126
Test Date:2024-04-30 13:17:26Functions:100.0 %2424
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include <sstream>
+       8              : #include "bayesnet/utils/bayesnetUtils.h"
+       9              : #include "Classifier.h"
+      10              : 
+      11              : namespace bayesnet {
+      12          886 :     Classifier::Classifier(Network model) : model(model), m(0), n(0), metrics(Metrics()), fitted(false) {}
+      13              :     const std::string CLASSIFIER_NOT_FITTED = "Classifier has not been fitted";
+      14          644 :     Classifier& Classifier::build(const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights)
+      15              :     {
+      16          644 :         this->features = features;
+      17          644 :         this->className = className;
+      18          644 :         this->states = states;
+      19          644 :         m = dataset.size(1);
+      20          644 :         n = features.size();
+      21          644 :         checkFitParameters();
+      22          628 :         auto n_classes = states.at(className).size();
+      23          628 :         metrics = Metrics(dataset, features, className, n_classes);
+      24          628 :         model.initialize();
+      25          628 :         buildModel(weights);
+      26          628 :         trainModel(weights);
+      27          620 :         fitted = true;
+      28          620 :         return *this;
+      29              :     }
+      30          162 :     void Classifier::buildDataset(torch::Tensor& ytmp)
+      31              :     {
+      32              :         try {
+      33          162 :             auto yresized = torch::transpose(ytmp.view({ ytmp.size(0), 1 }), 0, 1);
+      34          502 :             dataset = torch::cat({ dataset, yresized }, 0);
+      35          162 :         }
+      36            8 :         catch (const std::exception& e) {
+      37            8 :             std::stringstream oss;
+      38            8 :             oss << "* Error in X and y dimensions *\n";
+      39            8 :             oss << "X dimensions: " << dataset.sizes() << "\n";
+      40            8 :             oss << "y dimensions: " << ytmp.sizes();
+      41            8 :             throw std::runtime_error(oss.str());
+      42           16 :         }
+      43          324 :     }
+      44          560 :     void Classifier::trainModel(const torch::Tensor& weights)
+      45              :     {
+      46          560 :         model.fit(dataset, weights, features, className, states);
+      47          560 :     }
+      48              :     // X is nxm where n is the number of features and m the number of samples
+      49           64 :     Classifier& Classifier::fit(torch::Tensor& X, torch::Tensor& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states)
+      50              :     {
+      51           64 :         dataset = X;
+      52           64 :         buildDataset(y);
+      53           60 :         const torch::Tensor weights = torch::full({ dataset.size(1) }, 1.0 / dataset.size(1), torch::kDouble);
+      54          104 :         return build(features, className, states, weights);
+      55           60 :     }
+      56              :     // X is nxm where n is the number of features and m the number of samples
+      57           60 :     Classifier& Classifier::fit(std::vector<std::vector<int>>& X, std::vector<int>& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states)
+      58              :     {
+      59           60 :         dataset = torch::zeros({ static_cast<int>(X.size()), static_cast<int>(X[0].size()) }, torch::kInt32);
+      60          418 :         for (int i = 0; i < X.size(); ++i) {
+      61         1432 :             dataset.index_put_({ i, "..." }, torch::tensor(X[i], torch::kInt32));
+      62              :         }
+      63           60 :         auto ytmp = torch::tensor(y, torch::kInt32);
+      64           60 :         buildDataset(ytmp);
+      65           56 :         const torch::Tensor weights = torch::full({ dataset.size(1) }, 1.0 / dataset.size(1), torch::kDouble);
+      66          104 :         return build(features, className, states, weights);
+      67          426 :     }
+      68          198 :     Classifier& Classifier::fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states)
+      69              :     {
+      70          198 :         this->dataset = dataset;
+      71          198 :         const torch::Tensor weights = torch::full({ dataset.size(1) }, 1.0 / dataset.size(1), torch::kDouble);
+      72          396 :         return build(features, className, states, weights);
+      73          198 :     }
+      74          330 :     Classifier& Classifier::fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights)
+      75              :     {
+      76          330 :         this->dataset = dataset;
+      77          330 :         return build(features, className, states, weights);
+      78              :     }
+      79          644 :     void Classifier::checkFitParameters()
+      80              :     {
+      81          644 :         if (torch::is_floating_point(dataset)) {
+      82            4 :             throw std::invalid_argument("dataset (X, y) must be of type Integer");
+      83              :         }
+      84          640 :         if (dataset.size(0) - 1 != features.size()) {
+      85            4 :             throw std::invalid_argument("Classifier: X " + std::to_string(dataset.size(0) - 1) + " and features " + std::to_string(features.size()) + " must have the same number of features");
+      86              :         }
+      87          636 :         if (states.find(className) == states.end()) {
+      88            4 :             throw std::invalid_argument("class name not found in states");
+      89              :         }
+      90        14208 :         for (auto feature : features) {
+      91        13580 :             if (states.find(feature) == states.end()) {
+      92            4 :                 throw std::invalid_argument("feature [" + feature + "] not found in states");
+      93              :             }
+      94        13580 :         }
+      95          628 :     }
+      96          850 :     torch::Tensor Classifier::predict(torch::Tensor& X)
+      97              :     {
+      98          850 :         if (!fitted) {
+      99            8 :             throw std::logic_error(CLASSIFIER_NOT_FITTED);
+     100              :         }
+     101          842 :         return model.predict(X);
+     102              :     }
+     103            8 :     std::vector<int> Classifier::predict(std::vector<std::vector<int>>& X)
+     104              :     {
+     105            8 :         if (!fitted) {
+     106            4 :             throw std::logic_error(CLASSIFIER_NOT_FITTED);
+     107              :         }
+     108            4 :         auto m_ = X[0].size();
+     109            4 :         auto n_ = X.size();
+     110            4 :         std::vector<std::vector<int>> Xd(n_, std::vector<int>(m_, 0));
+     111           20 :         for (auto i = 0; i < n_; i++) {
+     112           32 :             Xd[i] = std::vector<int>(X[i].begin(), X[i].end());
+     113              :         }
+     114            4 :         auto yp = model.predict(Xd);
+     115            8 :         return yp;
+     116            4 :     }
+     117          742 :     torch::Tensor Classifier::predict_proba(torch::Tensor& X)
+     118              :     {
+     119          742 :         if (!fitted) {
+     120            4 :             throw std::logic_error(CLASSIFIER_NOT_FITTED);
+     121              :         }
+     122          738 :         return model.predict_proba(X);
+     123              :     }
+     124          130 :     std::vector<std::vector<double>> Classifier::predict_proba(std::vector<std::vector<int>>& X)
+     125              :     {
+     126          130 :         if (!fitted) {
+     127            4 :             throw std::logic_error(CLASSIFIER_NOT_FITTED);
+     128              :         }
+     129          126 :         auto m_ = X[0].size();
+     130          126 :         auto n_ = X.size();
+     131          126 :         std::vector<std::vector<int>> Xd(n_, std::vector<int>(m_, 0));
+     132              :         // Convert to nxm vector
+     133         1080 :         for (auto i = 0; i < n_; i++) {
+     134         1908 :             Xd[i] = std::vector<int>(X[i].begin(), X[i].end());
+     135              :         }
+     136          126 :         auto yp = model.predict_proba(Xd);
+     137          252 :         return yp;
+     138          126 :     }
+     139           56 :     float Classifier::score(torch::Tensor& X, torch::Tensor& y)
+     140              :     {
+     141           56 :         torch::Tensor y_pred = predict(X);
+     142          104 :         return (y_pred == y).sum().item<float>() / y.size(0);
+     143           52 :     }
+     144            8 :     float Classifier::score(std::vector<std::vector<int>>& X, std::vector<int>& y)
+     145              :     {
+     146            8 :         if (!fitted) {
+     147            4 :             throw std::logic_error(CLASSIFIER_NOT_FITTED);
+     148              :         }
+     149            4 :         return model.score(X, y);
+     150              :     }
+     151           12 :     std::vector<std::string> Classifier::show() const
+     152              :     {
+     153           12 :         return model.show();
+     154              :     }
+     155          560 :     void Classifier::addNodes()
+     156              :     {
+     157              :         // Add all nodes to the network
+     158        13216 :         for (const auto& feature : features) {
+     159        12656 :             model.addNode(feature);
+     160              :         }
+     161          560 :         model.addNode(className);
+     162          560 :     }
+     163           94 :     int Classifier::getNumberOfNodes() const
+     164              :     {
+     165              :         // Features does not include class
+     166           94 :         return fitted ? model.getFeatures().size() : 0;
+     167              :     }
+     168           94 :     int Classifier::getNumberOfEdges() const
+     169              :     {
+     170           94 :         return fitted ? model.getNumEdges() : 0;
+     171              :     }
+     172           12 :     int Classifier::getNumberOfStates() const
+     173              :     {
+     174           12 :         return fitted ? model.getStates() : 0;
+     175              :     }
+     176          170 :     int Classifier::getClassNumStates() const
+     177              :     {
+     178          170 :         return fitted ? model.getClassNumStates() : 0;
+     179              :     }
+     180            2 :     std::vector<std::string> Classifier::topological_order()
+     181              :     {
+     182            2 :         return model.topological_sort();
+     183              :     }
+     184            2 :     std::string Classifier::dump_cpt() const
+     185              :     {
+     186            2 :         return model.dump_cpt();
+     187              :     }
+     188           42 :     void Classifier::setHyperparameters(const nlohmann::json& hyperparameters)
+     189              :     {
+     190           42 :         if (!hyperparameters.empty()) {
+     191            4 :             throw std::invalid_argument("Invalid hyperparameters" + hyperparameters.dump());
+     192              :         }
+     193           38 :     }
+     194              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/Classifier.h.func-c.html b/html/BayesNet/bayesnet/classifiers/Classifier.h.func-c.html new file mode 100644 index 0000000..2491d64 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/Classifier.h.func-c.html @@ -0,0 +1,117 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/Classifier.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - Classifier.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %44
Test Date:2024-04-30 13:17:26Functions:80.0 %54
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet10Classifier10getVersionB5cxx11Ev16
_ZNK8bayesnet10Classifier8getNotesB5cxx11Ev38
_ZNK8bayesnet10Classifier9getStatusEv64
_ZN8bayesnet10ClassifierD0Ev606
_ZN8bayesnet10ClassifierD0Ev0
_ZN8bayesnet10ClassifierD2Ev606
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/Classifier.h.func.html b/html/BayesNet/bayesnet/classifiers/Classifier.h.func.html new file mode 100644 index 0000000..920785f --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/Classifier.h.func.html @@ -0,0 +1,117 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/Classifier.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - Classifier.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %44
Test Date:2024-04-30 13:17:26Functions:80.0 %54
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet10Classifier10getVersionB5cxx11Ev16
_ZN8bayesnet10ClassifierD0Ev606
_ZN8bayesnet10ClassifierD0Ev0
_ZN8bayesnet10ClassifierD2Ev606
_ZNK8bayesnet10Classifier8getNotesB5cxx11Ev38
_ZNK8bayesnet10Classifier9getStatusEv64
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/Classifier.h.gcov.html b/html/BayesNet/bayesnet/classifiers/Classifier.h.gcov.html new file mode 100644 index 0000000..5bc106a --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/Classifier.h.gcov.html @@ -0,0 +1,141 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/Classifier.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - Classifier.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %44
Test Date:2024-04-30 13:17:26Functions:80.0 %54
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef CLASSIFIER_H
+       8              : #define CLASSIFIER_H
+       9              : #include <torch/torch.h>
+      10              : #include "bayesnet/utils/BayesMetrics.h"
+      11              : #include "bayesnet/network/Network.h"
+      12              : #include "bayesnet/BaseClassifier.h"
+      13              : 
+      14              : namespace bayesnet {
+      15              :     class Classifier : public BaseClassifier {
+      16              :     public:
+      17              :         Classifier(Network model);
+      18          606 :         virtual ~Classifier() = default;
+      19              :         Classifier& fit(std::vector<std::vector<int>>& X, std::vector<int>& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states) override;
+      20              :         Classifier& fit(torch::Tensor& X, torch::Tensor& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states) override;
+      21              :         Classifier& fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states) override;
+      22              :         Classifier& fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights) override;
+      23              :         void addNodes();
+      24              :         int getNumberOfNodes() const override;
+      25              :         int getNumberOfEdges() const override;
+      26              :         int getNumberOfStates() const override;
+      27              :         int getClassNumStates() const override;
+      28              :         torch::Tensor predict(torch::Tensor& X) override;
+      29              :         std::vector<int> predict(std::vector<std::vector<int>>& X) override;
+      30              :         torch::Tensor predict_proba(torch::Tensor& X) override;
+      31              :         std::vector<std::vector<double>> predict_proba(std::vector<std::vector<int>>& X) override;
+      32           64 :         status_t getStatus() const override { return status; }
+      33           48 :         std::string getVersion() override { return { project_version.begin(), project_version.end() }; };
+      34              :         float score(torch::Tensor& X, torch::Tensor& y) override;
+      35              :         float score(std::vector<std::vector<int>>& X, std::vector<int>& y) override;
+      36              :         std::vector<std::string> show() const override;
+      37              :         std::vector<std::string> topological_order()  override;
+      38           38 :         std::vector<std::string> getNotes() const override { return notes; }
+      39              :         std::string dump_cpt() const override;
+      40              :         void setHyperparameters(const nlohmann::json& hyperparameters) override; //For classifiers that don't have hyperparameters
+      41              :     protected:
+      42              :         bool fitted;
+      43              :         unsigned int m, n; // m: number of samples, n: number of features
+      44              :         Network model;
+      45              :         Metrics metrics;
+      46              :         std::vector<std::string> features;
+      47              :         std::string className;
+      48              :         std::map<std::string, std::vector<int>> states;
+      49              :         torch::Tensor dataset; // (n+1)xm tensor
+      50              :         status_t status = NORMAL;
+      51              :         std::vector<std::string> notes; // Used to store messages occurred during the fit process
+      52              :         void checkFitParameters();
+      53              :         virtual void buildModel(const torch::Tensor& weights) = 0;
+      54              :         void trainModel(const torch::Tensor& weights) override;
+      55              :         void buildDataset(torch::Tensor& y);
+      56              :     private:
+      57              :         Classifier& build(const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights);
+      58              :     };
+      59              : }
+      60              : #endif
+      61              : 
+      62              : 
+      63              : 
+      64              : 
+      65              : 
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/KDB.cc.func-c.html b/html/BayesNet/bayesnet/classifiers/KDB.cc.func-c.html new file mode 100644 index 0000000..6792632 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/KDB.cc.func-c.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/KDB.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - KDB.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:96.3 %5452
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK8bayesnet3KDB5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE4
_ZN8bayesnet3KDB18setHyperparametersERKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEE6
_ZN8bayesnet3KDB10buildModelERKN2at6TensorE26
_ZN8bayesnet3KDBC2Eif74
_ZN8bayesnet3KDB11add_m_edgesEiRSt6vectorIiSaIiEERN2at6TensorE172
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/KDB.cc.func.html b/html/BayesNet/bayesnet/classifiers/KDB.cc.func.html new file mode 100644 index 0000000..6d14cb1 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/KDB.cc.func.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/KDB.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - KDB.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:96.3 %5452
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet3KDB10buildModelERKN2at6TensorE26
_ZN8bayesnet3KDB11add_m_edgesEiRSt6vectorIiSaIiEERN2at6TensorE172
_ZN8bayesnet3KDB18setHyperparametersERKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEE6
_ZN8bayesnet3KDBC2Eif74
_ZNK8bayesnet3KDB5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE4
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/KDB.cc.gcov.html b/html/BayesNet/bayesnet/classifiers/KDB.cc.gcov.html new file mode 100644 index 0000000..0dd7471 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/KDB.cc.gcov.html @@ -0,0 +1,187 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/KDB.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - KDB.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:96.3 %5452
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include "KDB.h"
+       8              : 
+       9              : namespace bayesnet {
+      10           74 :     KDB::KDB(int k, float theta) : Classifier(Network()), k(k), theta(theta)
+      11              :     {
+      12          222 :         validHyperparameters = { "k", "theta" };
+      13              : 
+      14          222 :     }
+      15            6 :     void KDB::setHyperparameters(const nlohmann::json& hyperparameters_)
+      16              :     {
+      17            6 :         auto hyperparameters = hyperparameters_;
+      18            6 :         if (hyperparameters.contains("k")) {
+      19            2 :             k = hyperparameters["k"];
+      20            2 :             hyperparameters.erase("k");
+      21              :         }
+      22            6 :         if (hyperparameters.contains("theta")) {
+      23            2 :             theta = hyperparameters["theta"];
+      24            2 :             hyperparameters.erase("theta");
+      25              :         }
+      26            6 :         Classifier::setHyperparameters(hyperparameters);
+      27            6 :     }
+      28           26 :     void KDB::buildModel(const torch::Tensor& weights)
+      29              :     {
+      30              :         /*
+      31              :         1. For each feature Xi, compute mutual information, I(X;C),
+      32              :         where C is the class.
+      33              :         2. Compute class conditional mutual information I(Xi;XjIC), f or each
+      34              :         pair of features Xi and Xj, where i#j.
+      35              :         3. Let the used variable list, S, be empty.
+      36              :         4. Let the DAG network being constructed, BN, begin with a single
+      37              :         class node, C.
+      38              :         5. Repeat until S includes all domain features
+      39              :         5.1. Select feature Xmax which is not in S and has the largest value
+      40              :         I(Xmax;C).
+      41              :         5.2. Add a node to BN representing Xmax.
+      42              :         5.3. Add an arc from C to Xmax in BN.
+      43              :         5.4. Add m = min(lSl,/c) arcs from m distinct features Xj in S with
+      44              :         the highest value for I(Xmax;X,jC).
+      45              :         5.5. Add Xmax to S.
+      46              :         Compute the conditional probabilility infered by the structure of BN by
+      47              :         using counts from DB, and output BN.
+      48              :         */
+      49              :         // 1. For each feature Xi, compute mutual information, I(X;C),
+      50              :         // where C is the class.
+      51           26 :         addNodes();
+      52           78 :         const torch::Tensor& y = dataset.index({ -1, "..." });
+      53           26 :         std::vector<double> mi;
+      54          198 :         for (auto i = 0; i < features.size(); i++) {
+      55          516 :             torch::Tensor firstFeature = dataset.index({ i, "..." });
+      56          172 :             mi.push_back(metrics.mutualInformation(firstFeature, y, weights));
+      57          172 :         }
+      58              :         // 2. Compute class conditional mutual information I(Xi;XjIC), f or each
+      59           26 :         auto conditionalEdgeWeights = metrics.conditionalEdge(weights);
+      60              :         // 3. Let the used variable list, S, be empty.
+      61           26 :         std::vector<int> S;
+      62              :         // 4. Let the DAG network being constructed, BN, begin with a single
+      63              :         // class node, C.
+      64              :         // 5. Repeat until S includes all domain features
+      65              :         // 5.1. Select feature Xmax which is not in S and has the largest value
+      66              :         // I(Xmax;C).
+      67           26 :         auto order = argsort(mi);
+      68          198 :         for (auto idx : order) {
+      69              :             // 5.2. Add a node to BN representing Xmax.
+      70              :             // 5.3. Add an arc from C to Xmax in BN.
+      71          172 :             model.addEdge(className, features[idx]);
+      72              :             // 5.4. Add m = min(lSl,/c) arcs from m distinct features Xj in S with
+      73              :             // the highest value for I(Xmax;X,jC).
+      74          172 :             add_m_edges(idx, S, conditionalEdgeWeights);
+      75              :             // 5.5. Add Xmax to S.
+      76          172 :             S.push_back(idx);
+      77              :         }
+      78          224 :     }
+      79          172 :     void KDB::add_m_edges(int idx, std::vector<int>& S, torch::Tensor& weights)
+      80              :     {
+      81          172 :         auto n_edges = std::min(k, static_cast<int>(S.size()));
+      82          172 :         auto cond_w = clone(weights);
+      83          172 :         bool exit_cond = k == 0;
+      84          172 :         int num = 0;
+      85          502 :         while (!exit_cond) {
+      86         1320 :             auto max_minfo = argmax(cond_w.index({ idx, "..." })).item<int>();
+      87          330 :             auto belongs = find(S.begin(), S.end(), max_minfo) != S.end();
+      88          882 :             if (belongs && cond_w.index({ idx, max_minfo }).item<float>() > theta) {
+      89              :                 try {
+      90          160 :                     model.addEdge(features[max_minfo], features[idx]);
+      91          160 :                     num++;
+      92              :                 }
+      93            0 :                 catch (const std::invalid_argument& e) {
+      94              :                     // Loops are not allowed
+      95            0 :                 }
+      96              :             }
+      97         1320 :             cond_w.index_put_({ idx, max_minfo }, -1);
+      98          990 :             auto candidates_mask = cond_w.index({ idx, "..." }).gt(theta);
+      99          330 :             auto candidates = candidates_mask.nonzero();
+     100          330 :             exit_cond = num == n_edges || candidates.size(0) == 0;
+     101          330 :         }
+     102         1346 :     }
+     103            4 :     std::vector<std::string> KDB::graph(const std::string& title) const
+     104              :     {
+     105            4 :         std::string header{ title };
+     106            4 :         if (title == "KDB") {
+     107            4 :             header += " (k=" + std::to_string(k) + ", theta=" + std::to_string(theta) + ")";
+     108              :         }
+     109            8 :         return model.graph(header);
+     110            4 :     }
+     111              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/KDB.h.func-c.html b/html/BayesNet/bayesnet/classifiers/KDB.h.func-c.html new file mode 100644 index 0000000..831be9e --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/KDB.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/KDB.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - KDB.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet3KDBD0Ev22
_ZN8bayesnet3KDBD0Ev4
_ZN8bayesnet3KDBD2Ev18
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/KDB.h.func.html b/html/BayesNet/bayesnet/classifiers/KDB.h.func.html new file mode 100644 index 0000000..dd17544 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/KDB.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/KDB.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - KDB.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet3KDBD0Ev22
_ZN8bayesnet3KDBD0Ev4
_ZN8bayesnet3KDBD2Ev18
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/KDB.h.gcov.html b/html/BayesNet/bayesnet/classifiers/KDB.h.gcov.html new file mode 100644 index 0000000..34f6879 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/KDB.h.gcov.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/KDB.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - KDB.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef KDB_H
+       8              : #define KDB_H
+       9              : #include <torch/torch.h>
+      10              : #include "bayesnet/utils/bayesnetUtils.h"
+      11              : #include "Classifier.h"
+      12              : namespace bayesnet {
+      13              :     class KDB : public Classifier {
+      14              :     private:
+      15              :         int k;
+      16              :         float theta;
+      17              :         void add_m_edges(int idx, std::vector<int>& S, torch::Tensor& weights);
+      18              :     protected:
+      19              :         void buildModel(const torch::Tensor& weights) override;
+      20              :     public:
+      21              :         explicit KDB(int k, float theta = 0.03);
+      22           22 :         virtual ~KDB() = default;
+      23              :         void setHyperparameters(const nlohmann::json& hyperparameters_) override;
+      24              :         std::vector<std::string> graph(const std::string& name = "KDB") const override;
+      25              :     };
+      26              : }
+      27              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/KDBLd.cc.func-c.html b/html/BayesNet/bayesnet/classifiers/KDBLd.cc.func-c.html new file mode 100644 index 0000000..2edd0fe --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/KDBLd.cc.func-c.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/KDBLd.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - KDBLd.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1717
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK8bayesnet5KDBLd5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE2
_ZN8bayesnet5KDBLd7predictERN2at6TensorE8
_ZN8bayesnet5KDBLd3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE10
_ZN8bayesnet5KDBLdC2Ei34
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/KDBLd.cc.func.html b/html/BayesNet/bayesnet/classifiers/KDBLd.cc.func.html new file mode 100644 index 0000000..3d72d1e --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/KDBLd.cc.func.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/KDBLd.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - KDBLd.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1717
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet5KDBLd3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE10
_ZN8bayesnet5KDBLd7predictERN2at6TensorE8
_ZN8bayesnet5KDBLdC2Ei34
_ZNK8bayesnet5KDBLd5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE2
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/KDBLd.cc.gcov.html b/html/BayesNet/bayesnet/classifiers/KDBLd.cc.gcov.html new file mode 100644 index 0000000..4345426 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/KDBLd.cc.gcov.html @@ -0,0 +1,111 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/KDBLd.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - KDBLd.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1717
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include "KDBLd.h"
+       8              : 
+       9              : namespace bayesnet {
+      10           34 :     KDBLd::KDBLd(int k) : KDB(k), Proposal(dataset, features, className) {}
+      11           10 :     KDBLd& KDBLd::fit(torch::Tensor& X_, torch::Tensor& y_, const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_)
+      12              :     {
+      13           10 :         checkInput(X_, y_);
+      14           10 :         features = features_;
+      15           10 :         className = className_;
+      16           10 :         Xf = X_;
+      17           10 :         y = y_;
+      18              :         // Fills std::vectors Xv & yv with the data from tensors X_ (discretized) & y
+      19           10 :         states = fit_local_discretization(y);
+      20              :         // We have discretized the input data
+      21              :         // 1st we need to fit the model to build the normal KDB structure, KDB::fit initializes the base Bayesian network
+      22           10 :         KDB::fit(dataset, features, className, states);
+      23           10 :         states = localDiscretizationProposal(states, model);
+      24           10 :         return *this;
+      25              :     }
+      26            8 :     torch::Tensor KDBLd::predict(torch::Tensor& X)
+      27              :     {
+      28            8 :         auto Xt = prepareX(X);
+      29           16 :         return KDB::predict(Xt);
+      30            8 :     }
+      31            2 :     std::vector<std::string> KDBLd::graph(const std::string& name) const
+      32              :     {
+      33            2 :         return KDB::graph(name);
+      34              :     }
+      35              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/KDBLd.h.func-c.html b/html/BayesNet/bayesnet/classifiers/KDBLd.h.func-c.html new file mode 100644 index 0000000..c1b2155 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/KDBLd.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/KDBLd.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - KDBLd.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet5KDBLdD0Ev10
_ZN8bayesnet5KDBLdD0Ev4
_ZN8bayesnet5KDBLdD2Ev6
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/KDBLd.h.func.html b/html/BayesNet/bayesnet/classifiers/KDBLd.h.func.html new file mode 100644 index 0000000..f9303cf --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/KDBLd.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/KDBLd.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - KDBLd.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet5KDBLdD0Ev10
_ZN8bayesnet5KDBLdD0Ev4
_ZN8bayesnet5KDBLdD2Ev6
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/KDBLd.h.gcov.html b/html/BayesNet/bayesnet/classifiers/KDBLd.h.gcov.html new file mode 100644 index 0000000..977f5ab --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/KDBLd.h.gcov.html @@ -0,0 +1,100 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/KDBLd.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - KDBLd.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef KDBLD_H
+       8              : #define KDBLD_H
+       9              : #include "Proposal.h"
+      10              : #include "KDB.h"
+      11              : 
+      12              : namespace bayesnet {
+      13              :     class KDBLd : public KDB, public Proposal {
+      14              :     private:
+      15              :     public:
+      16              :         explicit KDBLd(int k);
+      17           10 :         virtual ~KDBLd() = default;
+      18              :         KDBLd& fit(torch::Tensor& X, torch::Tensor& y, const std::vector<std::string>& features, const std::string& className, map<std::string, std::vector<int>>& states) override;
+      19              :         std::vector<std::string> graph(const std::string& name = "KDB") const override;
+      20              :         torch::Tensor predict(torch::Tensor& X) override;
+      21              :         static inline std::string version() { return "0.0.1"; };
+      22              :     };
+      23              : }
+      24              : #endif // !KDBLD_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/Proposal.cc.func-c.html b/html/BayesNet/bayesnet/classifiers/Proposal.cc.func-c.html new file mode 100644 index 0000000..8ea80e1 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/Proposal.cc.func-c.html @@ -0,0 +1,145 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/Proposal.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - Proposal.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:97.7 %8684
Test Date:2024-04-30 13:17:26Functions:88.9 %98
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet8Proposal8prepareXERN2at6TensorE84
_ZN8bayesnet8ProposalD0Ev100
_ZN8bayesnet8ProposalD0Ev0
_ZN8bayesnet8ProposalD2Ev100
_ZN8bayesnet8Proposal27localDiscretizationProposalERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERNS_7NetworkE106
_ZN8bayesnet8Proposal10checkInputERKN2at6TensorES4_114
_ZN8bayesnet8Proposal24fit_local_discretizationB5cxx11ERKN2at6TensorE116
_ZN8bayesnet8ProposalC2ERN2at6TensorERSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERSA_212
_ZZN8bayesnet8Proposal27localDiscretizationProposalERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERNS_7NetworkEENKUlRKT_E0_clIS7_EEDaSO_686
_ZZN8bayesnet8Proposal27localDiscretizationProposalERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERNS_7NetworkEENKUlRKT_E_clIPNS_4NodeEEEDaSO_1348
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/Proposal.cc.func.html b/html/BayesNet/bayesnet/classifiers/Proposal.cc.func.html new file mode 100644 index 0000000..0c552a1 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/Proposal.cc.func.html @@ -0,0 +1,145 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/Proposal.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - Proposal.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:97.7 %8684
Test Date:2024-04-30 13:17:26Functions:88.9 %98
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet8Proposal10checkInputERKN2at6TensorES4_114
_ZN8bayesnet8Proposal24fit_local_discretizationB5cxx11ERKN2at6TensorE116
_ZN8bayesnet8Proposal27localDiscretizationProposalERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERNS_7NetworkE106
_ZN8bayesnet8Proposal8prepareXERN2at6TensorE84
_ZN8bayesnet8ProposalC2ERN2at6TensorERSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERSA_212
_ZN8bayesnet8ProposalD0Ev100
_ZN8bayesnet8ProposalD0Ev0
_ZN8bayesnet8ProposalD2Ev100
_ZZN8bayesnet8Proposal27localDiscretizationProposalERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERNS_7NetworkEENKUlRKT_E0_clIS7_EEDaSO_686
_ZZN8bayesnet8Proposal27localDiscretizationProposalERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERNS_7NetworkEENKUlRKT_E_clIPNS_4NodeEEEDaSO_1348
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/Proposal.cc.gcov.html b/html/BayesNet/bayesnet/classifiers/Proposal.cc.gcov.html new file mode 100644 index 0000000..106d0b6 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/Proposal.cc.gcov.html @@ -0,0 +1,192 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/Proposal.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - Proposal.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:97.7 %8684
Test Date:2024-04-30 13:17:26Functions:88.9 %98
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include <ArffFiles.h>
+       8              : #include "Proposal.h"
+       9              : 
+      10              : namespace bayesnet {
+      11          212 :     Proposal::Proposal(torch::Tensor& dataset_, std::vector<std::string>& features_, std::string& className_) : pDataset(dataset_), pFeatures(features_), pClassName(className_) {}
+      12          100 :     Proposal::~Proposal()
+      13              :     {
+      14          948 :         for (auto& [key, value] : discretizers) {
+      15          848 :             delete value;
+      16              :         }
+      17          100 :     }
+      18          114 :     void Proposal::checkInput(const torch::Tensor& X, const torch::Tensor& y)
+      19              :     {
+      20          114 :         if (!torch::is_floating_point(X)) {
+      21            0 :             throw std::invalid_argument("X must be a floating point tensor");
+      22              :         }
+      23          114 :         if (torch::is_floating_point(y)) {
+      24            0 :             throw std::invalid_argument("y must be an integer tensor");
+      25              :         }
+      26          114 :     }
+      27          106 :     map<std::string, std::vector<int>> Proposal::localDiscretizationProposal(const map<std::string, std::vector<int>>& oldStates, Network& model)
+      28              :     {
+      29              :         // order of local discretization is important. no good 0, 1, 2...
+      30              :         // although we rediscretize features after the local discretization of every feature
+      31          106 :         auto order = model.topological_sort();
+      32          106 :         auto& nodes = model.getNodes();
+      33          106 :         map<std::string, std::vector<int>> states = oldStates;
+      34          106 :         std::vector<int> indicesToReDiscretize;
+      35          106 :         bool upgrade = false; // Flag to check if we need to upgrade the model
+      36          888 :         for (auto feature : order) {
+      37          782 :             auto nodeParents = nodes[feature]->getParents();
+      38          782 :             if (nodeParents.size() < 2) continue; // Only has class as parent
+      39          662 :             upgrade = true;
+      40          662 :             int index = find(pFeatures.begin(), pFeatures.end(), feature) - pFeatures.begin();
+      41          662 :             indicesToReDiscretize.push_back(index); // We need to re-discretize this feature
+      42          662 :             std::vector<std::string> parents;
+      43         2010 :             transform(nodeParents.begin(), nodeParents.end(), back_inserter(parents), [](const auto& p) { return p->getName(); });
+      44              :             // Remove class as parent as it will be added later
+      45          662 :             parents.erase(remove(parents.begin(), parents.end(), pClassName), parents.end());
+      46              :             // Get the indices of the parents
+      47          662 :             std::vector<int> indices;
+      48          662 :             indices.push_back(-1); // Add class index
+      49         1348 :             transform(parents.begin(), parents.end(), back_inserter(indices), [&](const auto& p) {return find(pFeatures.begin(), pFeatures.end(), p) - pFeatures.begin(); });
+      50              :             // Now we fit the discretizer of the feature, conditioned on its parents and the class i.e. discretizer.fit(X[index], X[indices] + y)
+      51          662 :             std::vector<std::string> yJoinParents(Xf.size(1));
+      52         2010 :             for (auto idx : indices) {
+      53       479320 :                 for (int i = 0; i < Xf.size(1); ++i) {
+      54      1433916 :                     yJoinParents[i] += to_string(pDataset.index({ idx, i }).item<int>());
+      55              :                 }
+      56              :             }
+      57          662 :             auto arff = ArffFiles();
+      58          662 :             auto yxv = arff.factorize(yJoinParents);
+      59         1324 :             auto xvf_ptr = Xf.index({ index }).data_ptr<float>();
+      60          662 :             auto xvf = std::vector<mdlp::precision_t>(xvf_ptr, xvf_ptr + Xf.size(1));
+      61          662 :             discretizers[feature]->fit(xvf, yxv);
+      62          902 :         }
+      63          106 :         if (upgrade) {
+      64              :             // Discretize again X (only the affected indices) with the new fitted discretizers
+      65          768 :             for (auto index : indicesToReDiscretize) {
+      66         1324 :                 auto Xt_ptr = Xf.index({ index }).data_ptr<float>();
+      67          662 :                 auto Xt = std::vector<float>(Xt_ptr, Xt_ptr + Xf.size(1));
+      68         2648 :                 pDataset.index_put_({ index, "..." }, torch::tensor(discretizers[pFeatures[index]]->transform(Xt)));
+      69          662 :                 auto xStates = std::vector<int>(discretizers[pFeatures[index]]->getCutPoints().size() + 1);
+      70          662 :                 iota(xStates.begin(), xStates.end(), 0);
+      71              :                 //Update new states of the feature/node
+      72          662 :                 states[pFeatures[index]] = xStates;
+      73          662 :             }
+      74          106 :             const torch::Tensor weights = torch::full({ pDataset.size(1) }, 1.0 / pDataset.size(1), torch::kDouble);
+      75          106 :             model.fit(pDataset, weights, pFeatures, pClassName, states);
+      76          106 :         }
+      77          212 :         return states;
+      78       480064 :     }
+      79          116 :     map<std::string, std::vector<int>> Proposal::fit_local_discretization(const torch::Tensor& y)
+      80              :     {
+      81              :         // Discretize the continuous input data and build pDataset (Classifier::dataset)
+      82          116 :         int m = Xf.size(1);
+      83          116 :         int n = Xf.size(0);
+      84          116 :         map<std::string, std::vector<int>> states;
+      85          116 :         pDataset = torch::zeros({ n + 1, m }, torch::kInt32);
+      86          116 :         auto yv = std::vector<int>(y.data_ptr<int>(), y.data_ptr<int>() + y.size(0));
+      87              :         // discretize input data by feature(row)
+      88          972 :         for (auto i = 0; i < pFeatures.size(); ++i) {
+      89          856 :             auto* discretizer = new mdlp::CPPFImdlp();
+      90         1712 :             auto Xt_ptr = Xf.index({ i }).data_ptr<float>();
+      91          856 :             auto Xt = std::vector<float>(Xt_ptr, Xt_ptr + Xf.size(1));
+      92          856 :             discretizer->fit(Xt, yv);
+      93         3424 :             pDataset.index_put_({ i, "..." }, torch::tensor(discretizer->transform(Xt)));
+      94          856 :             auto xStates = std::vector<int>(discretizer->getCutPoints().size() + 1);
+      95          856 :             iota(xStates.begin(), xStates.end(), 0);
+      96          856 :             states[pFeatures[i]] = xStates;
+      97          856 :             discretizers[pFeatures[i]] = discretizer;
+      98          856 :         }
+      99          116 :         int n_classes = torch::max(y).item<int>() + 1;
+     100          116 :         auto yStates = std::vector<int>(n_classes);
+     101          116 :         iota(yStates.begin(), yStates.end(), 0);
+     102          116 :         states[pClassName] = yStates;
+     103          348 :         pDataset.index_put_({ n, "..." }, y);
+     104          232 :         return states;
+     105         1944 :     }
+     106           84 :     torch::Tensor Proposal::prepareX(torch::Tensor& X)
+     107              :     {
+     108           84 :         auto Xtd = torch::zeros_like(X, torch::kInt32);
+     109          688 :         for (int i = 0; i < X.size(0); ++i) {
+     110          604 :             auto Xt = std::vector<float>(X[i].data_ptr<float>(), X[i].data_ptr<float>() + X.size(1));
+     111          604 :             auto Xd = discretizers[pFeatures[i]]->transform(Xt);
+     112         1812 :             Xtd.index_put_({ i }, torch::tensor(Xd, torch::kInt32));
+     113          604 :         }
+     114           84 :         return Xtd;
+     115          604 :     }
+     116              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/SPODE.cc.func-c.html b/html/BayesNet/bayesnet/classifiers/SPODE.cc.func-c.html new file mode 100644 index 0000000..25650f3 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/SPODE.cc.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/SPODE.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - SPODE.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1010
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK8bayesnet5SPODE5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE34
_ZN8bayesnet5SPODE10buildModelERKN2at6TensorE508
_ZN8bayesnet5SPODEC2Ei562
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/SPODE.cc.func.html b/html/BayesNet/bayesnet/classifiers/SPODE.cc.func.html new file mode 100644 index 0000000..1d0519e --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/SPODE.cc.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/SPODE.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - SPODE.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1010
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet5SPODE10buildModelERKN2at6TensorE508
_ZN8bayesnet5SPODEC2Ei562
_ZNK8bayesnet5SPODE5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE34
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/SPODE.cc.gcov.html b/html/BayesNet/bayesnet/classifiers/SPODE.cc.gcov.html new file mode 100644 index 0000000..7294ab4 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/SPODE.cc.gcov.html @@ -0,0 +1,107 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/SPODE.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - SPODE.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1010
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include "SPODE.h"
+       8              : 
+       9              : namespace bayesnet {
+      10              : 
+      11          562 :     SPODE::SPODE(int root) : Classifier(Network()), root(root) {}
+      12              : 
+      13          508 :     void SPODE::buildModel(const torch::Tensor& weights)
+      14              :     {
+      15              :         // 0. Add all nodes to the model
+      16          508 :         addNodes();
+      17              :         // 1. Add edges from the class node to all other nodes
+      18              :         // 2. Add edges from the root node to all other nodes
+      19        12840 :         for (int i = 0; i < static_cast<int>(features.size()); ++i) {
+      20        12332 :             model.addEdge(className, features[i]);
+      21        12332 :             if (i != root) {
+      22        11824 :                 model.addEdge(features[root], features[i]);
+      23              :             }
+      24              :         }
+      25          508 :     }
+      26           34 :     std::vector<std::string> SPODE::graph(const std::string& name) const
+      27              :     {
+      28           34 :         return model.graph(name);
+      29              :     }
+      30              : 
+      31              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/SPODE.h.func-c.html b/html/BayesNet/bayesnet/classifiers/SPODE.h.func-c.html new file mode 100644 index 0000000..5a932ba --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/SPODE.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/SPODE.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - SPODE.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet5SPODED0Ev918
_ZN8bayesnet5SPODED0Ev418
_ZN8bayesnet5SPODED2Ev500
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/SPODE.h.func.html b/html/BayesNet/bayesnet/classifiers/SPODE.h.func.html new file mode 100644 index 0000000..49ca8cf --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/SPODE.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/SPODE.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - SPODE.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet5SPODED0Ev918
_ZN8bayesnet5SPODED0Ev418
_ZN8bayesnet5SPODED2Ev500
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/SPODE.h.gcov.html b/html/BayesNet/bayesnet/classifiers/SPODE.h.gcov.html new file mode 100644 index 0000000..8700919 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/SPODE.h.gcov.html @@ -0,0 +1,99 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/SPODE.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - SPODE.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef SPODE_H
+       8              : #define SPODE_H
+       9              : #include "Classifier.h"
+      10              : 
+      11              : namespace bayesnet {
+      12              :     class SPODE : public Classifier {
+      13              :     private:
+      14              :         int root;
+      15              :     protected:
+      16              :         void buildModel(const torch::Tensor& weights) override;
+      17              :     public:
+      18              :         explicit SPODE(int root);
+      19          918 :         virtual ~SPODE() = default;
+      20              :         std::vector<std::string> graph(const std::string& name = "SPODE") const override;
+      21              :     };
+      22              : }
+      23              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/SPODELd.cc.func-c.html b/html/BayesNet/bayesnet/classifiers/SPODELd.cc.func-c.html new file mode 100644 index 0000000..55d5825 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/SPODELd.cc.func-c.html @@ -0,0 +1,117 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/SPODELd.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - SPODELd.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2626
Test Date:2024-04-30 13:17:26Functions:100.0 %66
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet7SPODELd3fitERN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE4
_ZNK8bayesnet7SPODELd5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE18
_ZN8bayesnet7SPODELd7predictERN2at6TensorE68
_ZN8bayesnet7SPODELd3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE84
_ZN8bayesnet7SPODELd9commonFitERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKS7_RSt3mapIS7_S1_IiSaIiEESt4lessIS7_ESaISt4pairISC_SG_EEE86
_ZN8bayesnet7SPODELdC2Ei110
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/SPODELd.cc.func.html b/html/BayesNet/bayesnet/classifiers/SPODELd.cc.func.html new file mode 100644 index 0000000..ce81b4c --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/SPODELd.cc.func.html @@ -0,0 +1,117 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/SPODELd.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - SPODELd.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2626
Test Date:2024-04-30 13:17:26Functions:100.0 %66
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet7SPODELd3fitERN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE4
_ZN8bayesnet7SPODELd3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE84
_ZN8bayesnet7SPODELd7predictERN2at6TensorE68
_ZN8bayesnet7SPODELd9commonFitERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKS7_RSt3mapIS7_S1_IiSaIiEESt4lessIS7_ESaISt4pairISC_SG_EEE86
_ZN8bayesnet7SPODELdC2Ei110
_ZNK8bayesnet7SPODELd5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE18
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/SPODELd.cc.gcov.html b/html/BayesNet/bayesnet/classifiers/SPODELd.cc.gcov.html new file mode 100644 index 0000000..10f39cd --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/SPODELd.cc.gcov.html @@ -0,0 +1,126 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/SPODELd.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - SPODELd.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2626
Test Date:2024-04-30 13:17:26Functions:100.0 %66
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include "SPODELd.h"
+       8              : 
+       9              : namespace bayesnet {
+      10          110 :     SPODELd::SPODELd(int root) : SPODE(root), Proposal(dataset, features, className) {}
+      11           84 :     SPODELd& SPODELd::fit(torch::Tensor& X_, torch::Tensor& y_, const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_)
+      12              :     {
+      13           84 :         checkInput(X_, y_);
+      14           84 :         Xf = X_;
+      15           84 :         y = y_;
+      16           84 :         return commonFit(features_, className_, states_);
+      17              :     }
+      18              : 
+      19            4 :     SPODELd& SPODELd::fit(torch::Tensor& dataset, const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_)
+      20              :     {
+      21            4 :         if (!torch::is_floating_point(dataset)) {
+      22            2 :             throw std::runtime_error("Dataset must be a floating point tensor");
+      23              :         }
+      24            8 :         Xf = dataset.index({ torch::indexing::Slice(0, dataset.size(0) - 1), "..." }).clone();
+      25            6 :         y = dataset.index({ -1, "..." }).clone().to(torch::kInt32);
+      26            2 :         return commonFit(features_, className_, states_);
+      27            6 :     }
+      28              : 
+      29           86 :     SPODELd& SPODELd::commonFit(const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_)
+      30              :     {
+      31           86 :         features = features_;
+      32           86 :         className = className_;
+      33              :         // Fills std::vectors Xv & yv with the data from tensors X_ (discretized) & y
+      34           86 :         states = fit_local_discretization(y);
+      35              :         // We have discretized the input data
+      36              :         // 1st we need to fit the model to build the normal SPODE structure, SPODE::fit initializes the base Bayesian network
+      37           86 :         SPODE::fit(dataset, features, className, states);
+      38           86 :         states = localDiscretizationProposal(states, model);
+      39           86 :         return *this;
+      40              :     }
+      41           68 :     torch::Tensor SPODELd::predict(torch::Tensor& X)
+      42              :     {
+      43           68 :         auto Xt = prepareX(X);
+      44          136 :         return SPODE::predict(Xt);
+      45           68 :     }
+      46           18 :     std::vector<std::string> SPODELd::graph(const std::string& name) const
+      47              :     {
+      48           18 :         return SPODE::graph(name);
+      49              :     }
+      50              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/SPODELd.h.func-c.html b/html/BayesNet/bayesnet/classifiers/SPODELd.h.func-c.html new file mode 100644 index 0000000..6a1d713 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/SPODELd.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/SPODELd.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - SPODELd.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet7SPODELdD0Ev160
_ZN8bayesnet7SPODELdD0Ev78
_ZN8bayesnet7SPODELdD2Ev82
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/SPODELd.h.func.html b/html/BayesNet/bayesnet/classifiers/SPODELd.h.func.html new file mode 100644 index 0000000..42ce0f1 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/SPODELd.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/SPODELd.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - SPODELd.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet7SPODELdD0Ev160
_ZN8bayesnet7SPODELdD0Ev78
_ZN8bayesnet7SPODELdD2Ev82
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/SPODELd.h.gcov.html b/html/BayesNet/bayesnet/classifiers/SPODELd.h.gcov.html new file mode 100644 index 0000000..32f740c --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/SPODELd.h.gcov.html @@ -0,0 +1,101 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/SPODELd.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - SPODELd.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef SPODELD_H
+       8              : #define SPODELD_H
+       9              : #include "SPODE.h"
+      10              : #include "Proposal.h"
+      11              : 
+      12              : namespace bayesnet {
+      13              :     class SPODELd : public SPODE, public Proposal {
+      14              :     public:
+      15              :         explicit SPODELd(int root);
+      16          160 :         virtual ~SPODELd() = default;
+      17              :         SPODELd& fit(torch::Tensor& X, torch::Tensor& y, const std::vector<std::string>& features, const std::string& className, map<std::string, std::vector<int>>& states) override;
+      18              :         SPODELd& fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, map<std::string, std::vector<int>>& states) override;
+      19              :         SPODELd& commonFit(const std::vector<std::string>& features, const std::string& className, map<std::string, std::vector<int>>& states);
+      20              :         std::vector<std::string> graph(const std::string& name = "SPODE") const override;
+      21              :         torch::Tensor predict(torch::Tensor& X) override;
+      22              :         static inline std::string version() { return "0.0.1"; };
+      23              :     };
+      24              : }
+      25              : #endif // !SPODELD_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/TAN.cc.func-c.html b/html/BayesNet/bayesnet/classifiers/TAN.cc.func-c.html new file mode 100644 index 0000000..5f88433 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/TAN.cc.func-c.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/TAN.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - TAN.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2323
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK8bayesnet3TAN5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE4
_ZN8bayesnet3TAN10buildModelERKN2at6TensorE26
_ZN8bayesnet3TANC2Ev94
_ZZN8bayesnet3TAN10buildModelERKN2at6TensorEENKUlRKT_RKT0_E_clISt4pairIifESE_EEDaS7_SA_324
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/TAN.cc.func.html b/html/BayesNet/bayesnet/classifiers/TAN.cc.func.html new file mode 100644 index 0000000..5c45eb3 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/TAN.cc.func.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/TAN.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - TAN.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2323
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet3TAN10buildModelERKN2at6TensorE26
_ZN8bayesnet3TANC2Ev94
_ZNK8bayesnet3TAN5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE4
_ZZN8bayesnet3TAN10buildModelERKN2at6TensorEENKUlRKT_RKT0_E_clISt4pairIifESE_EEDaS7_SA_324
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/TAN.cc.gcov.html b/html/BayesNet/bayesnet/classifiers/TAN.cc.gcov.html new file mode 100644 index 0000000..dcb17a7 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/TAN.cc.gcov.html @@ -0,0 +1,121 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/TAN.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - TAN.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2323
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include "TAN.h"
+       8              : 
+       9              : namespace bayesnet {
+      10           94 :     TAN::TAN() : Classifier(Network()) {}
+      11              : 
+      12           26 :     void TAN::buildModel(const torch::Tensor& weights)
+      13              :     {
+      14              :         // 0. Add all nodes to the model
+      15           26 :         addNodes();
+      16              :         // 1. Compute mutual information between each feature and the class and set the root node
+      17              :         // as the highest mutual information with the class
+      18           26 :         auto mi = std::vector <std::pair<int, float >>();
+      19           78 :         torch::Tensor class_dataset = dataset.index({ -1, "..." });
+      20          178 :         for (int i = 0; i < static_cast<int>(features.size()); ++i) {
+      21          456 :             torch::Tensor feature_dataset = dataset.index({ i, "..." });
+      22          152 :             auto mi_value = metrics.mutualInformation(class_dataset, feature_dataset, weights);
+      23          152 :             mi.push_back({ i, mi_value });
+      24          152 :         }
+      25          350 :         sort(mi.begin(), mi.end(), [](const auto& left, const auto& right) {return left.second < right.second;});
+      26           26 :         auto root = mi[mi.size() - 1].first;
+      27              :         // 2. Compute mutual information between each feature and the class
+      28           26 :         auto weights_matrix = metrics.conditionalEdge(weights);
+      29              :         // 3. Compute the maximum spanning tree
+      30           26 :         auto mst = metrics.maximumSpanningTree(features, weights_matrix, root);
+      31              :         // 4. Add edges from the maximum spanning tree to the model
+      32          152 :         for (auto i = 0; i < mst.size(); ++i) {
+      33          126 :             auto [from, to] = mst[i];
+      34          126 :             model.addEdge(features[from], features[to]);
+      35              :         }
+      36              :         // 5. Add edges from the class to all features
+      37          178 :         for (auto feature : features) {
+      38          152 :             model.addEdge(className, feature);
+      39          152 :         }
+      40          204 :     }
+      41            4 :     std::vector<std::string> TAN::graph(const std::string& title) const
+      42              :     {
+      43            4 :         return model.graph(title);
+      44              :     }
+      45              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/TAN.h.func-c.html b/html/BayesNet/bayesnet/classifiers/TAN.h.func-c.html new file mode 100644 index 0000000..d334e50 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/TAN.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/TAN.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - TAN.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet3TAND0Ev38
_ZN8bayesnet3TAND0Ev6
_ZN8bayesnet3TAND2Ev32
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/TAN.h.func.html b/html/BayesNet/bayesnet/classifiers/TAN.h.func.html new file mode 100644 index 0000000..417f7d5 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/TAN.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/TAN.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - TAN.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet3TAND0Ev38
_ZN8bayesnet3TAND0Ev6
_ZN8bayesnet3TAND2Ev32
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/TAN.h.gcov.html b/html/BayesNet/bayesnet/classifiers/TAN.h.gcov.html new file mode 100644 index 0000000..696e19a --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/TAN.h.gcov.html @@ -0,0 +1,97 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/TAN.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - TAN.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef TAN_H
+       8              : #define TAN_H
+       9              : #include "Classifier.h"
+      10              : namespace bayesnet {
+      11              :     class TAN : public Classifier {
+      12              :     private:
+      13              :     protected:
+      14              :         void buildModel(const torch::Tensor& weights) override;
+      15              :     public:
+      16              :         TAN();
+      17           38 :         virtual ~TAN() = default;
+      18              :         std::vector<std::string> graph(const std::string& name = "TAN") const override;
+      19              :     };
+      20              : }
+      21              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/TANLd.cc.func-c.html b/html/BayesNet/bayesnet/classifiers/TANLd.cc.func-c.html new file mode 100644 index 0000000..061e676 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/TANLd.cc.func-c.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/TANLd.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - TANLd.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1717
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK8bayesnet5TANLd5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE2
_ZN8bayesnet5TANLd7predictERN2at6TensorE8
_ZN8bayesnet5TANLd3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE10
_ZN8bayesnet5TANLdC2Ev34
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/TANLd.cc.func.html b/html/BayesNet/bayesnet/classifiers/TANLd.cc.func.html new file mode 100644 index 0000000..2587c8e --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/TANLd.cc.func.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/TANLd.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - TANLd.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1717
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet5TANLd3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE10
_ZN8bayesnet5TANLd7predictERN2at6TensorE8
_ZN8bayesnet5TANLdC2Ev34
_ZNK8bayesnet5TANLd5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE2
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/TANLd.cc.gcov.html b/html/BayesNet/bayesnet/classifiers/TANLd.cc.gcov.html new file mode 100644 index 0000000..52f3382 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/TANLd.cc.gcov.html @@ -0,0 +1,112 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/TANLd.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - TANLd.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1717
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include "TANLd.h"
+       8              : 
+       9              : namespace bayesnet {
+      10           34 :     TANLd::TANLd() : TAN(), Proposal(dataset, features, className) {}
+      11           10 :     TANLd& TANLd::fit(torch::Tensor& X_, torch::Tensor& y_, const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_)
+      12              :     {
+      13           10 :         checkInput(X_, y_);
+      14           10 :         features = features_;
+      15           10 :         className = className_;
+      16           10 :         Xf = X_;
+      17           10 :         y = y_;
+      18              :         // Fills std::vectors Xv & yv with the data from tensors X_ (discretized) & y
+      19           10 :         states = fit_local_discretization(y);
+      20              :         // We have discretized the input data
+      21              :         // 1st we need to fit the model to build the normal TAN structure, TAN::fit initializes the base Bayesian network
+      22           10 :         TAN::fit(dataset, features, className, states);
+      23           10 :         states = localDiscretizationProposal(states, model);
+      24           10 :         return *this;
+      25              : 
+      26              :     }
+      27            8 :     torch::Tensor TANLd::predict(torch::Tensor& X)
+      28              :     {
+      29            8 :         auto Xt = prepareX(X);
+      30           16 :         return TAN::predict(Xt);
+      31            8 :     }
+      32            2 :     std::vector<std::string> TANLd::graph(const std::string& name) const
+      33              :     {
+      34            2 :         return TAN::graph(name);
+      35              :     }
+      36              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/TANLd.h.func-c.html b/html/BayesNet/bayesnet/classifiers/TANLd.h.func-c.html new file mode 100644 index 0000000..f2cab81 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/TANLd.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/TANLd.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - TANLd.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet5TANLdD0Ev10
_ZN8bayesnet5TANLdD0Ev4
_ZN8bayesnet5TANLdD2Ev6
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/TANLd.h.func.html b/html/BayesNet/bayesnet/classifiers/TANLd.h.func.html new file mode 100644 index 0000000..40c279c --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/TANLd.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/TANLd.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - TANLd.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet5TANLdD0Ev10
_ZN8bayesnet5TANLdD0Ev4
_ZN8bayesnet5TANLdD2Ev6
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/TANLd.h.gcov.html b/html/BayesNet/bayesnet/classifiers/TANLd.h.gcov.html new file mode 100644 index 0000000..7bad243 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/TANLd.h.gcov.html @@ -0,0 +1,100 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers/TANLd.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiers - TANLd.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef TANLD_H
+       8              : #define TANLD_H
+       9              : #include "TAN.h"
+      10              : #include "Proposal.h"
+      11              : 
+      12              : namespace bayesnet {
+      13              :     class TANLd : public TAN, public Proposal {
+      14              :     private:
+      15              :     public:
+      16              :         TANLd();
+      17           10 :         virtual ~TANLd() = default;
+      18              :         TANLd& fit(torch::Tensor& X, torch::Tensor& y, const std::vector<std::string>& features, const std::string& className, map<std::string, std::vector<int>>& states) override;
+      19              :         std::vector<std::string> graph(const std::string& name = "TAN") const override;
+      20              :         torch::Tensor predict(torch::Tensor& X) override;
+      21              :         static inline std::string version() { return "0.0.1"; };
+      22              :     };
+      23              : }
+      24              : #endif // !TANLD_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/index-sort-f.html b/html/BayesNet/bayesnet/classifiers/index-sort-f.html new file mode 100644 index 0000000..c0fbab1 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/index-sort-f.html @@ -0,0 +1,273 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiersCoverageTotalHit
Test:coverage.infoLines:98.9 %369365
Test Date:2024-04-30 13:17:26Functions:97.4 %7674
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
Classifier.h +
100.0%
+
100.0 %4480.0 %54
Proposal.cc +
97.7%97.7%
+
97.7 %868488.9 %98
KDB.h +
100.0%
+
100.0 %11100.0 %22
KDBLd.h +
100.0%
+
100.0 %11100.0 %22
SPODE.h +
100.0%
+
100.0 %11100.0 %22
SPODELd.h +
100.0%
+
100.0 %11100.0 %22
TAN.h +
100.0%
+
100.0 %11100.0 %22
TANLd.h +
100.0%
+
100.0 %11100.0 %22
SPODE.cc +
100.0%
+
100.0 %1010100.0 %33
KDBLd.cc +
100.0%
+
100.0 %1717100.0 %44
TAN.cc +
100.0%
+
100.0 %2323100.0 %44
TANLd.cc +
100.0%
+
100.0 %1717100.0 %44
KDB.cc +
96.3%96.3%
+
96.3 %5452100.0 %55
SPODELd.cc +
100.0%
+
100.0 %2626100.0 %66
Classifier.cc +
100.0%
+
100.0 %126126100.0 %2424
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/index-sort-l.html b/html/BayesNet/bayesnet/classifiers/index-sort-l.html new file mode 100644 index 0000000..fe21b86 --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/index-sort-l.html @@ -0,0 +1,273 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiersCoverageTotalHit
Test:coverage.infoLines:98.9 %369365
Test Date:2024-04-30 13:17:26Functions:97.4 %7674
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
KDB.cc +
96.3%96.3%
+
96.3 %5452100.0 %55
Proposal.cc +
97.7%97.7%
+
97.7 %868488.9 %98
KDB.h +
100.0%
+
100.0 %11100.0 %22
KDBLd.h +
100.0%
+
100.0 %11100.0 %22
SPODE.h +
100.0%
+
100.0 %11100.0 %22
SPODELd.h +
100.0%
+
100.0 %11100.0 %22
TAN.h +
100.0%
+
100.0 %11100.0 %22
TANLd.h +
100.0%
+
100.0 %11100.0 %22
Classifier.h +
100.0%
+
100.0 %4480.0 %54
SPODE.cc +
100.0%
+
100.0 %1010100.0 %33
KDBLd.cc +
100.0%
+
100.0 %1717100.0 %44
TANLd.cc +
100.0%
+
100.0 %1717100.0 %44
TAN.cc +
100.0%
+
100.0 %2323100.0 %44
SPODELd.cc +
100.0%
+
100.0 %2626100.0 %66
Classifier.cc +
100.0%
+
100.0 %126126100.0 %2424
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/classifiers/index.html b/html/BayesNet/bayesnet/classifiers/index.html new file mode 100644 index 0000000..31ed2ae --- /dev/null +++ b/html/BayesNet/bayesnet/classifiers/index.html @@ -0,0 +1,273 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/classifiers + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/classifiersCoverageTotalHit
Test:coverage.infoLines:98.9 %369365
Test Date:2024-04-30 13:17:26Functions:97.4 %7674
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
Classifier.cc +
100.0%
+
100.0 %126126100.0 %2424
Classifier.h +
100.0%
+
100.0 %4480.0 %54
KDB.cc +
96.3%96.3%
+
96.3 %5452100.0 %55
KDB.h +
100.0%
+
100.0 %11100.0 %22
KDBLd.cc +
100.0%
+
100.0 %1717100.0 %44
KDBLd.h +
100.0%
+
100.0 %11100.0 %22
Proposal.cc +
97.7%97.7%
+
97.7 %868488.9 %98
SPODE.cc +
100.0%
+
100.0 %1010100.0 %33
SPODE.h +
100.0%
+
100.0 %11100.0 %22
SPODELd.cc +
100.0%
+
100.0 %2626100.0 %66
SPODELd.h +
100.0%
+
100.0 %11100.0 %22
TAN.cc +
100.0%
+
100.0 %2323100.0 %44
TAN.h +
100.0%
+
100.0 %11100.0 %22
TANLd.cc +
100.0%
+
100.0 %1717100.0 %44
TANLd.h +
100.0%
+
100.0 %11100.0 %22
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/AODE.cc.func-c.html b/html/BayesNet/bayesnet/ensembles/AODE.cc.func-c.html new file mode 100644 index 0000000..de2b067 --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/AODE.cc.func-c.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/AODE.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - AODE.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2020
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet4AODE18setHyperparametersERKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEE2
_ZNK8bayesnet4AODE5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE2
_ZN8bayesnet4AODE10buildModelERKN2at6TensorE12
_ZN8bayesnet4AODEC2Eb38
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/AODE.cc.func.html b/html/BayesNet/bayesnet/ensembles/AODE.cc.func.html new file mode 100644 index 0000000..8063294 --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/AODE.cc.func.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/AODE.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - AODE.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2020
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet4AODE10buildModelERKN2at6TensorE12
_ZN8bayesnet4AODE18setHyperparametersERKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEE2
_ZN8bayesnet4AODEC2Eb38
_ZNK8bayesnet4AODE5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE2
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/AODE.cc.gcov.html b/html/BayesNet/bayesnet/ensembles/AODE.cc.gcov.html new file mode 100644 index 0000000..a848e28 --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/AODE.cc.gcov.html @@ -0,0 +1,114 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/AODE.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - AODE.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2020
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include "AODE.h"
+       8              : 
+       9              : namespace bayesnet {
+      10           38 :     AODE::AODE(bool predict_voting) : Ensemble(predict_voting)
+      11              :     {
+      12           76 :         validHyperparameters = { "predict_voting" };
+      13              : 
+      14          114 :     }
+      15            2 :     void AODE::setHyperparameters(const nlohmann::json& hyperparameters_)
+      16              :     {
+      17            2 :         auto hyperparameters = hyperparameters_;
+      18            2 :         if (hyperparameters.contains("predict_voting")) {
+      19            2 :             predict_voting = hyperparameters["predict_voting"];
+      20            2 :             hyperparameters.erase("predict_voting");
+      21              :         }
+      22            2 :         Classifier::setHyperparameters(hyperparameters);
+      23            2 :     }
+      24           12 :     void AODE::buildModel(const torch::Tensor& weights)
+      25              :     {
+      26           12 :         models.clear();
+      27           12 :         significanceModels.clear();
+      28           94 :         for (int i = 0; i < features.size(); ++i) {
+      29           82 :             models.push_back(std::make_unique<SPODE>(i));
+      30              :         }
+      31           12 :         n_models = models.size();
+      32           12 :         significanceModels = std::vector<double>(n_models, 1.0);
+      33           12 :     }
+      34            2 :     std::vector<std::string> AODE::graph(const std::string& title) const
+      35              :     {
+      36            2 :         return Ensemble::graph(title);
+      37              :     }
+      38              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/AODE.h.func-c.html b/html/BayesNet/bayesnet/ensembles/AODE.h.func-c.html new file mode 100644 index 0000000..5baeada --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/AODE.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/AODE.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - AODE.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet4AODED0Ev14
_ZN8bayesnet4AODED0Ev4
_ZN8bayesnet4AODED2Ev10
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/AODE.h.func.html b/html/BayesNet/bayesnet/ensembles/AODE.h.func.html new file mode 100644 index 0000000..86164d0 --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/AODE.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/AODE.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - AODE.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet4AODED0Ev14
_ZN8bayesnet4AODED0Ev4
_ZN8bayesnet4AODED2Ev10
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/AODE.h.gcov.html b/html/BayesNet/bayesnet/ensembles/AODE.h.gcov.html new file mode 100644 index 0000000..16f02a2 --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/AODE.h.gcov.html @@ -0,0 +1,98 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/AODE.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - AODE.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef AODE_H
+       8              : #define AODE_H
+       9              : #include "bayesnet/classifiers/SPODE.h"
+      10              : #include "Ensemble.h"
+      11              : namespace bayesnet {
+      12              :     class AODE : public Ensemble {
+      13              :     public:
+      14              :         AODE(bool predict_voting = false);
+      15           14 :         virtual ~AODE() {};
+      16              :         void setHyperparameters(const nlohmann::json& hyperparameters) override;
+      17              :         std::vector<std::string> graph(const std::string& title = "AODE") const override;
+      18              :     protected:
+      19              :         void buildModel(const torch::Tensor& weights) override;
+      20              :     };
+      21              : }
+      22              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/AODELd.cc.func-c.html b/html/BayesNet/bayesnet/ensembles/AODELd.cc.func-c.html new file mode 100644 index 0000000..14da413 --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/AODELd.cc.func-c.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/AODELd.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - AODELd.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2424
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK8bayesnet6AODELd5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE2
_ZN8bayesnet6AODELd10buildModelERKN2at6TensorE10
_ZN8bayesnet6AODELd10trainModelERKN2at6TensorE10
_ZN8bayesnet6AODELd3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE10
_ZN8bayesnet6AODELdC2Eb34
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/AODELd.cc.func.html b/html/BayesNet/bayesnet/ensembles/AODELd.cc.func.html new file mode 100644 index 0000000..617a55b --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/AODELd.cc.func.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/AODELd.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - AODELd.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2424
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet6AODELd10buildModelERKN2at6TensorE10
_ZN8bayesnet6AODELd10trainModelERKN2at6TensorE10
_ZN8bayesnet6AODELd3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE10
_ZN8bayesnet6AODELdC2Eb34
_ZNK8bayesnet6AODELd5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE2
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/AODELd.cc.gcov.html b/html/BayesNet/bayesnet/ensembles/AODELd.cc.gcov.html new file mode 100644 index 0000000..9bc1c25 --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/AODELd.cc.gcov.html @@ -0,0 +1,123 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/AODELd.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - AODELd.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2424
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include "AODELd.h"
+       8              : 
+       9              : namespace bayesnet {
+      10           34 :     AODELd::AODELd(bool predict_voting) : Ensemble(predict_voting), Proposal(dataset, features, className)
+      11              :     {
+      12           34 :     }
+      13           10 :     AODELd& AODELd::fit(torch::Tensor& X_, torch::Tensor& y_, const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_)
+      14              :     {
+      15           10 :         checkInput(X_, y_);
+      16           10 :         features = features_;
+      17           10 :         className = className_;
+      18           10 :         Xf = X_;
+      19           10 :         y = y_;
+      20              :         // Fills std::vectors Xv & yv with the data from tensors X_ (discretized) & y
+      21           10 :         states = fit_local_discretization(y);
+      22              :         // We have discretized the input data
+      23              :         // 1st we need to fit the model to build the normal TAN structure, TAN::fit initializes the base Bayesian network
+      24           10 :         Ensemble::fit(dataset, features, className, states);
+      25           10 :         return *this;
+      26              : 
+      27              :     }
+      28           10 :     void AODELd::buildModel(const torch::Tensor& weights)
+      29              :     {
+      30           10 :         models.clear();
+      31           84 :         for (int i = 0; i < features.size(); ++i) {
+      32           74 :             models.push_back(std::make_unique<SPODELd>(i));
+      33              :         }
+      34           10 :         n_models = models.size();
+      35           10 :         significanceModels = std::vector<double>(n_models, 1.0);
+      36           10 :     }
+      37           10 :     void AODELd::trainModel(const torch::Tensor& weights)
+      38              :     {
+      39           84 :         for (const auto& model : models) {
+      40           74 :             model->fit(Xf, y, features, className, states);
+      41              :         }
+      42           10 :     }
+      43            2 :     std::vector<std::string> AODELd::graph(const std::string& name) const
+      44              :     {
+      45            2 :         return Ensemble::graph(name);
+      46              :     }
+      47              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/AODELd.h.func-c.html b/html/BayesNet/bayesnet/ensembles/AODELd.h.func-c.html new file mode 100644 index 0000000..0d5f10a --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/AODELd.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/AODELd.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - AODELd.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet6AODELdD0Ev10
_ZN8bayesnet6AODELdD0Ev4
_ZN8bayesnet6AODELdD2Ev6
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/AODELd.h.func.html b/html/BayesNet/bayesnet/ensembles/AODELd.h.func.html new file mode 100644 index 0000000..ba6f0c1 --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/AODELd.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/AODELd.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - AODELd.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet6AODELdD0Ev10
_ZN8bayesnet6AODELdD0Ev4
_ZN8bayesnet6AODELdD2Ev6
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/AODELd.h.gcov.html b/html/BayesNet/bayesnet/ensembles/AODELd.h.gcov.html new file mode 100644 index 0000000..156a993 --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/AODELd.h.gcov.html @@ -0,0 +1,101 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/AODELd.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - AODELd.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef AODELD_H
+       8              : #define AODELD_H
+       9              : #include "bayesnet/classifiers/Proposal.h"
+      10              : #include "bayesnet/classifiers/SPODELd.h"
+      11              : #include "Ensemble.h"
+      12              : 
+      13              : namespace bayesnet {
+      14              :     class AODELd : public Ensemble, public Proposal {
+      15              :     public:
+      16              :         AODELd(bool predict_voting = true);
+      17           10 :         virtual ~AODELd() = default;
+      18              :         AODELd& fit(torch::Tensor& X_, torch::Tensor& y_, const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_) override;
+      19              :         std::vector<std::string> graph(const std::string& name = "AODELd") const override;
+      20              :     protected:
+      21              :         void trainModel(const torch::Tensor& weights) override;
+      22              :         void buildModel(const torch::Tensor& weights) override;
+      23              :     };
+      24              : }
+      25              : #endif // !AODELD_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/BoostAODE.cc.func-c.html b/html/BayesNet/bayesnet/ensembles/BoostAODE.cc.func-c.html new file mode 100644 index 0000000..e95178c --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/BoostAODE.cc.func-c.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/BoostAODE.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - BoostAODE.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:98.3 %237233
Test Date:2024-04-30 13:17:26Functions:100.0 %99
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK8bayesnet9BoostAODE5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE2
_ZN8bayesnet9BoostAODE20update_weights_blockEiRN2at6TensorES3_14
_ZN8bayesnet9BoostAODE16initializeModelsEv16
_ZN8bayesnet9BoostAODE18setHyperparametersERKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEE44
_ZN8bayesnet9BoostAODE10buildModelERKN2at6TensorE46
_ZN8bayesnet9BoostAODE10trainModelERKN2at6TensorE46
_ZN8bayesnet9BoostAODEC2Eb84
_ZN8bayesnet14update_weightsERN2at6TensorES2_S2_272
_ZZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEENKUlT_E_clIiEEDaS5_4850
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/BoostAODE.cc.func.html b/html/BayesNet/bayesnet/ensembles/BoostAODE.cc.func.html new file mode 100644 index 0000000..381200b --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/BoostAODE.cc.func.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/BoostAODE.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - BoostAODE.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:98.3 %237233
Test Date:2024-04-30 13:17:26Functions:100.0 %99
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet14update_weightsERN2at6TensorES2_S2_272
_ZN8bayesnet9BoostAODE10buildModelERKN2at6TensorE46
_ZN8bayesnet9BoostAODE10trainModelERKN2at6TensorE46
_ZN8bayesnet9BoostAODE16initializeModelsEv16
_ZN8bayesnet9BoostAODE18setHyperparametersERKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEE44
_ZN8bayesnet9BoostAODE20update_weights_blockEiRN2at6TensorES3_14
_ZN8bayesnet9BoostAODEC2Eb84
_ZNK8bayesnet9BoostAODE5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE2
_ZZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEENKUlT_E_clIiEEDaS5_4850
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/BoostAODE.cc.gcov.html b/html/BayesNet/bayesnet/ensembles/BoostAODE.cc.gcov.html new file mode 100644 index 0000000..60b5680 --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/BoostAODE.cc.gcov.html @@ -0,0 +1,472 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/BoostAODE.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - BoostAODE.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:98.3 %237233
Test Date:2024-04-30 13:17:26Functions:100.0 %99
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include <set>
+       8              : #include <functional>
+       9              : #include <limits.h>
+      10              : #include <tuple>
+      11              : #include <folding.hpp>
+      12              : #include "bayesnet/feature_selection/CFS.h"
+      13              : #include "bayesnet/feature_selection/FCBF.h"
+      14              : #include "bayesnet/feature_selection/IWSS.h"
+      15              : #include "BoostAODE.h"
+      16              : #include "lib/log/loguru.cpp"
+      17              : 
+      18              : namespace bayesnet {
+      19              : 
+      20           84 :     BoostAODE::BoostAODE(bool predict_voting) : Ensemble(predict_voting)
+      21              :     {
+      22          924 :         validHyperparameters = {
+      23              :             "maxModels", "bisection", "order", "convergence", "convergence_best", "threshold",
+      24              :             "select_features", "maxTolerance", "predict_voting", "block_update"
+      25          924 :         };
+      26              : 
+      27          252 :     }
+      28           46 :     void BoostAODE::buildModel(const torch::Tensor& weights)
+      29              :     {
+      30              :         // Models shall be built in trainModel
+      31           46 :         models.clear();
+      32           46 :         significanceModels.clear();
+      33           46 :         n_models = 0;
+      34              :         // Prepare the validation dataset
+      35          138 :         auto y_ = dataset.index({ -1, "..." });
+      36           46 :         if (convergence) {
+      37              :             // Prepare train & validation sets from train data
+      38           38 :             auto fold = folding::StratifiedKFold(5, y_, 271);
+      39           38 :             auto [train, test] = fold.getFold(0);
+      40           38 :             auto train_t = torch::tensor(train);
+      41           38 :             auto test_t = torch::tensor(test);
+      42              :             // Get train and validation sets
+      43          190 :             X_train = dataset.index({ torch::indexing::Slice(0, dataset.size(0) - 1), train_t });
+      44          114 :             y_train = dataset.index({ -1, train_t });
+      45          190 :             X_test = dataset.index({ torch::indexing::Slice(0, dataset.size(0) - 1), test_t });
+      46          114 :             y_test = dataset.index({ -1, test_t });
+      47           38 :             dataset = X_train;
+      48           38 :             m = X_train.size(1);
+      49           38 :             auto n_classes = states.at(className).size();
+      50              :             // Build dataset with train data
+      51           38 :             buildDataset(y_train);
+      52           38 :             metrics = Metrics(dataset, features, className, n_classes);
+      53           38 :         } else {
+      54              :             // Use all data to train
+      55           32 :             X_train = dataset.index({ torch::indexing::Slice(0, dataset.size(0) - 1), "..." });
+      56            8 :             y_train = y_;
+      57              :         }
+      58          450 :     }
+      59           44 :     void BoostAODE::setHyperparameters(const nlohmann::json& hyperparameters_)
+      60              :     {
+      61           44 :         auto hyperparameters = hyperparameters_;
+      62           44 :         if (hyperparameters.contains("order")) {
+      63           50 :             std::vector<std::string> algos = { Orders.ASC, Orders.DESC, Orders.RAND };
+      64           10 :             order_algorithm = hyperparameters["order"];
+      65           10 :             if (std::find(algos.begin(), algos.end(), order_algorithm) == algos.end()) {
+      66            2 :                 throw std::invalid_argument("Invalid order algorithm, valid values [" + Orders.ASC + ", " + Orders.DESC + ", " + Orders.RAND + "]");
+      67              :             }
+      68            8 :             hyperparameters.erase("order");
+      69           10 :         }
+      70           42 :         if (hyperparameters.contains("convergence")) {
+      71           18 :             convergence = hyperparameters["convergence"];
+      72           18 :             hyperparameters.erase("convergence");
+      73              :         }
+      74           42 :         if (hyperparameters.contains("convergence_best")) {
+      75            6 :             convergence_best = hyperparameters["convergence_best"];
+      76            6 :             hyperparameters.erase("convergence_best");
+      77              :         }
+      78           42 :         if (hyperparameters.contains("bisection")) {
+      79           16 :             bisection = hyperparameters["bisection"];
+      80           16 :             hyperparameters.erase("bisection");
+      81              :         }
+      82           42 :         if (hyperparameters.contains("threshold")) {
+      83           12 :             threshold = hyperparameters["threshold"];
+      84           12 :             hyperparameters.erase("threshold");
+      85              :         }
+      86           42 :         if (hyperparameters.contains("maxTolerance")) {
+      87           22 :             maxTolerance = hyperparameters["maxTolerance"];
+      88           22 :             if (maxTolerance < 1 || maxTolerance > 4)
+      89            6 :                 throw std::invalid_argument("Invalid maxTolerance value, must be greater in [1, 4]");
+      90           16 :             hyperparameters.erase("maxTolerance");
+      91              :         }
+      92           36 :         if (hyperparameters.contains("predict_voting")) {
+      93            2 :             predict_voting = hyperparameters["predict_voting"];
+      94            2 :             hyperparameters.erase("predict_voting");
+      95              :         }
+      96           36 :         if (hyperparameters.contains("select_features")) {
+      97           18 :             auto selectedAlgorithm = hyperparameters["select_features"];
+      98           90 :             std::vector<std::string> algos = { SelectFeatures.IWSS, SelectFeatures.CFS, SelectFeatures.FCBF };
+      99           18 :             selectFeatures = true;
+     100           18 :             select_features_algorithm = selectedAlgorithm;
+     101           18 :             if (std::find(algos.begin(), algos.end(), selectedAlgorithm) == algos.end()) {
+     102            2 :                 throw std::invalid_argument("Invalid selectFeatures value, valid values [" + SelectFeatures.IWSS + ", " + SelectFeatures.CFS + ", " + SelectFeatures.FCBF + "]");
+     103              :             }
+     104           16 :             hyperparameters.erase("select_features");
+     105           20 :         }
+     106           34 :         if (hyperparameters.contains("block_update")) {
+     107            4 :             block_update = hyperparameters["block_update"];
+     108            4 :             hyperparameters.erase("block_update");
+     109              :         }
+     110           34 :         Classifier::setHyperparameters(hyperparameters);
+     111           72 :     }
+     112          272 :     std::tuple<torch::Tensor&, double, bool> update_weights(torch::Tensor& ytrain, torch::Tensor& ypred, torch::Tensor& weights)
+     113              :     {
+     114          272 :         bool terminate = false;
+     115          272 :         double alpha_t = 0;
+     116          272 :         auto mask_wrong = ypred != ytrain;
+     117          272 :         auto mask_right = ypred == ytrain;
+     118          272 :         auto masked_weights = weights * mask_wrong.to(weights.dtype());
+     119          272 :         double epsilon_t = masked_weights.sum().item<double>();
+     120          272 :         if (epsilon_t > 0.5) {
+     121              :             // Inverse the weights policy (plot ln(wt))
+     122              :             // "In each round of AdaBoost, there is a sanity check to ensure that the current base 
+     123              :             // learner is better than random guess" (Zhi-Hua Zhou, 2012)
+     124            8 :             terminate = true;
+     125              :         } else {
+     126          264 :             double wt = (1 - epsilon_t) / epsilon_t;
+     127          264 :             alpha_t = epsilon_t == 0 ? 1 : 0.5 * log(wt);
+     128              :             // Step 3.2: Update weights for next classifier
+     129              :             // Step 3.2.1: Update weights of wrong samples
+     130          264 :             weights += mask_wrong.to(weights.dtype()) * exp(alpha_t) * weights;
+     131              :             // Step 3.2.2: Update weights of right samples
+     132          264 :             weights += mask_right.to(weights.dtype()) * exp(-alpha_t) * weights;
+     133              :             // Step 3.3: Normalise the weights
+     134          264 :             double totalWeights = torch::sum(weights).item<double>();
+     135          264 :             weights = weights / totalWeights;
+     136              :         }
+     137          544 :         return { weights, alpha_t, terminate };
+     138          272 :     }
+     139           14 :     std::tuple<torch::Tensor&, double, bool> BoostAODE::update_weights_block(int k, torch::Tensor& ytrain, torch::Tensor& weights)
+     140              :     {
+     141              :         /* Update Block algorithm
+     142              :             k = # of models in block
+     143              :             n_models = # of models in ensemble to make predictions
+     144              :             n_models_bak = # models saved
+     145              :             models = vector of models to make predictions
+     146              :             models_bak = models not used to make predictions
+     147              :             significances_bak = backup of significances vector
+     148              : 
+     149              :             Case list
+     150              :             A) k = 1, n_models = 1              => n = 0 , n_models = n + k
+     151              :             B) k = 1, n_models = n + 1  => n_models = n + k
+     152              :             C) k > 1, n_models = k + 1       => n= 1, n_models = n + k
+     153              :             D) k > 1, n_models = k           => n = 0, n_models = n + k
+     154              :             E) k > 1, n_models = k + n       => n_models = n + k
+     155              : 
+     156              :             A, D) n=0, k > 0, n_models == k
+     157              :             1. n_models_bak <- n_models
+     158              :             2. significances_bak <- significances
+     159              :             3. significances = vector(k, 1)
+     160              :             4. Don’t move any classifiers out of models
+     161              :             5. n_models <- k
+     162              :             6. Make prediction, compute alpha, update weights
+     163              :             7. Don’t restore any classifiers to models
+     164              :             8. significances <- significances_bak
+     165              :             9. Update last k significances
+     166              :             10. n_models <- n_models_bak
+     167              : 
+     168              :             B, C, E) n > 0, k > 0, n_models == n + k
+     169              :             1. n_models_bak <- n_models
+     170              :             2. significances_bak <- significances
+     171              :             3. significances = vector(k, 1)
+     172              :             4. Move first n classifiers to models_bak
+     173              :             5. n_models <- k
+     174              :             6. Make prediction, compute alpha, update weights
+     175              :             7. Insert classifiers in models_bak to be the first n models
+     176              :             8. significances <- significances_bak
+     177              :             9. Update last k significances
+     178              :             10. n_models <- n_models_bak
+     179              :         */
+     180              :         //
+     181              :         // Make predict with only the last k models
+     182              :         //
+     183           14 :         std::unique_ptr<Classifier> model;
+     184           14 :         std::vector<std::unique_ptr<Classifier>> models_bak;
+     185              :         // 1. n_models_bak <- n_models 2. significances_bak <- significances
+     186           14 :         auto significance_bak = significanceModels;
+     187           14 :         auto n_models_bak = n_models;
+     188              :         // 3. significances = vector(k, 1)
+     189           14 :         significanceModels = std::vector<double>(k, 1.0);
+     190              :         // 4. Move first n classifiers to models_bak
+     191              :         // backup the first n_models - k models (if n_models == k, don't backup any)
+     192           74 :         for (int i = 0; i < n_models - k; ++i) {
+     193           60 :             model = std::move(models[0]);
+     194           60 :             models.erase(models.begin());
+     195           60 :             models_bak.push_back(std::move(model));
+     196              :         }
+     197           14 :         assert(models.size() == k);
+     198              :         // 5. n_models <- k
+     199           14 :         n_models = k;
+     200              :         // 6. Make prediction, compute alpha, update weights
+     201           14 :         auto ypred = predict(X_train);
+     202              :         //
+     203              :         // Update weights
+     204              :         //
+     205              :         double alpha_t;
+     206              :         bool terminate;
+     207           14 :         std::tie(weights, alpha_t, terminate) = update_weights(y_train, ypred, weights);
+     208              :         //
+     209              :         // Restore the models if needed
+     210              :         //
+     211              :         // 7. Insert classifiers in models_bak to be the first n models
+     212              :         // if n_models_bak == k, don't restore any, because none of them were moved
+     213           14 :         if (k != n_models_bak) {
+     214              :             // Insert in the same order as they were extracted
+     215           12 :             int bak_size = models_bak.size();
+     216           72 :             for (int i = 0; i < bak_size; ++i) {
+     217           60 :                 model = std::move(models_bak[bak_size - 1 - i]);
+     218           60 :                 models_bak.erase(models_bak.end() - 1);
+     219           60 :                 models.insert(models.begin(), std::move(model));
+     220              :             }
+     221              :         }
+     222              :         // 8. significances <- significances_bak
+     223           14 :         significanceModels = significance_bak;
+     224              :         //
+     225              :         // Update the significance of the last k models
+     226              :         //
+     227              :         // 9. Update last k significances
+     228           52 :         for (int i = 0; i < k; ++i) {
+     229           38 :             significanceModels[n_models_bak - k + i] = alpha_t;
+     230              :         }
+     231              :         // 10. n_models <- n_models_bak
+     232           14 :         n_models = n_models_bak;
+     233           28 :         return { weights, alpha_t, terminate };
+     234           14 :     }
+     235           16 :     std::vector<int> BoostAODE::initializeModels()
+     236              :     {
+     237           16 :         std::vector<int> featuresUsed;
+     238           16 :         torch::Tensor weights_ = torch::full({ m }, 1.0 / m, torch::kFloat64);
+     239           16 :         int maxFeatures = 0;
+     240           16 :         if (select_features_algorithm == SelectFeatures.CFS) {
+     241            4 :             featureSelector = new CFS(dataset, features, className, maxFeatures, states.at(className).size(), weights_);
+     242           12 :         } else if (select_features_algorithm == SelectFeatures.IWSS) {
+     243            6 :             if (threshold < 0 || threshold >0.5) {
+     244            4 :                 throw std::invalid_argument("Invalid threshold value for " + SelectFeatures.IWSS + " [0, 0.5]");
+     245              :             }
+     246            2 :             featureSelector = new IWSS(dataset, features, className, maxFeatures, states.at(className).size(), weights_, threshold);
+     247            6 :         } else if (select_features_algorithm == SelectFeatures.FCBF) {
+     248            6 :             if (threshold < 1e-7 || threshold > 1) {
+     249            4 :                 throw std::invalid_argument("Invalid threshold value for " + SelectFeatures.FCBF + " [1e-7, 1]");
+     250              :             }
+     251            2 :             featureSelector = new FCBF(dataset, features, className, maxFeatures, states.at(className).size(), weights_, threshold);
+     252              :         }
+     253            8 :         featureSelector->fit();
+     254            8 :         auto cfsFeatures = featureSelector->getFeatures();
+     255            8 :         auto scores = featureSelector->getScores();
+     256           50 :         for (const int& feature : cfsFeatures) {
+     257           42 :             featuresUsed.push_back(feature);
+     258           42 :             std::unique_ptr<Classifier> model = std::make_unique<SPODE>(feature);
+     259           42 :             model->fit(dataset, features, className, states, weights_);
+     260           42 :             models.push_back(std::move(model));
+     261           42 :             significanceModels.push_back(1.0); // They will be updated later in trainModel
+     262           42 :             n_models++;
+     263           42 :         }
+     264            8 :         notes.push_back("Used features in initialization: " + std::to_string(featuresUsed.size()) + " of " + std::to_string(features.size()) + " with " + select_features_algorithm);
+     265            8 :         delete featureSelector;
+     266           16 :         return featuresUsed;
+     267           24 :     }
+     268           46 :     void BoostAODE::trainModel(const torch::Tensor& weights)
+     269              :     {
+     270              :         //
+     271              :         // Logging setup
+     272              :         //
+     273           46 :         loguru::set_thread_name("BoostAODE");
+     274           46 :         loguru::g_stderr_verbosity = loguru::Verbosity_OFF;
+     275           46 :         loguru::add_file("boostAODE.log", loguru::Truncate, loguru::Verbosity_MAX);
+     276              : 
+     277              :         // Algorithm based on the adaboost algorithm for classification
+     278              :         // as explained in Ensemble methods (Zhi-Hua Zhou, 2012)
+     279           46 :         fitted = true;
+     280           46 :         double alpha_t = 0;
+     281           46 :         torch::Tensor weights_ = torch::full({ m }, 1.0 / m, torch::kFloat64);
+     282           46 :         bool finished = false;
+     283           46 :         std::vector<int> featuresUsed;
+     284           46 :         if (selectFeatures) {
+     285           16 :             featuresUsed = initializeModels();
+     286            8 :             auto ypred = predict(X_train);
+     287            8 :             std::tie(weights_, alpha_t, finished) = update_weights(y_train, ypred, weights_);
+     288              :             // Update significance of the models
+     289           50 :             for (int i = 0; i < n_models; ++i) {
+     290           42 :                 significanceModels[i] = alpha_t;
+     291              :             }
+     292            8 :             if (finished) {
+     293            0 :                 return;
+     294              :             }
+     295            8 :         }
+     296           38 :         int numItemsPack = 0; // The counter of the models inserted in the current pack
+     297              :         // Variables to control the accuracy finish condition
+     298           38 :         double priorAccuracy = 0.0;
+     299           38 :         double improvement = 1.0;
+     300           38 :         double convergence_threshold = 1e-4;
+     301           38 :         int tolerance = 0; // number of times the accuracy is lower than the convergence_threshold
+     302              :         // Step 0: Set the finish condition
+     303              :         // epsilon sub t > 0.5 => inverse the weights policy
+     304              :         // validation error is not decreasing
+     305              :         // run out of features
+     306           38 :         bool ascending = order_algorithm == Orders.ASC;
+     307           38 :         std::mt19937 g{ 173 };
+     308          252 :         while (!finished) {
+     309              :             // Step 1: Build ranking with mutual information
+     310          214 :             auto featureSelection = metrics.SelectKBestWeighted(weights_, ascending, n); // Get all the features sorted
+     311          214 :             if (order_algorithm == Orders.RAND) {
+     312           18 :                 std::shuffle(featureSelection.begin(), featureSelection.end(), g);
+     313              :             }
+     314              :             // Remove used features
+     315          428 :             featureSelection.erase(remove_if(begin(featureSelection), end(featureSelection), [&](auto x)
+     316        19400 :                 { return std::find(begin(featuresUsed), end(featuresUsed), x) != end(featuresUsed);}),
+     317          214 :                 end(featureSelection)
+     318              :             );
+     319          214 :             int k = bisection ? pow(2, tolerance) : 1;
+     320          214 :             int counter = 0; // The model counter of the current pack
+     321          214 :             VLOG_SCOPE_F(1, "counter=%d k=%d featureSelection.size: %zu", counter, k, featureSelection.size());
+     322          502 :             while (counter++ < k && featureSelection.size() > 0) {
+     323          288 :                 auto feature = featureSelection[0];
+     324          288 :                 featureSelection.erase(featureSelection.begin());
+     325          288 :                 std::unique_ptr<Classifier> model;
+     326          288 :                 model = std::make_unique<SPODE>(feature);
+     327          288 :                 model->fit(dataset, features, className, states, weights_);
+     328          288 :                 alpha_t = 0.0;
+     329          288 :                 if (!block_update) {
+     330          250 :                     auto ypred = model->predict(X_train);
+     331              :                     // Step 3.1: Compute the classifier amout of say
+     332          250 :                     std::tie(weights_, alpha_t, finished) = update_weights(y_train, ypred, weights_);
+     333          250 :                 }
+     334              :                 // Step 3.4: Store classifier and its accuracy to weigh its future vote
+     335          288 :                 numItemsPack++;
+     336          288 :                 featuresUsed.push_back(feature);
+     337          288 :                 models.push_back(std::move(model));
+     338          288 :                 significanceModels.push_back(alpha_t);
+     339          288 :                 n_models++;
+     340          288 :                 VLOG_SCOPE_F(2, "numItemsPack: %d n_models: %d featuresUsed: %zu", numItemsPack, n_models, featuresUsed.size());
+     341          288 :             }
+     342          214 :             if (block_update) {
+     343           14 :                 std::tie(weights_, alpha_t, finished) = update_weights_block(k, y_train, weights_);
+     344              :             }
+     345          214 :             if (convergence && !finished) {
+     346          148 :                 auto y_val_predict = predict(X_test);
+     347          148 :                 double accuracy = (y_val_predict == y_test).sum().item<double>() / (double)y_test.size(0);
+     348          148 :                 if (priorAccuracy == 0) {
+     349           30 :                     priorAccuracy = accuracy;
+     350              :                 } else {
+     351          118 :                     improvement = accuracy - priorAccuracy;
+     352              :                 }
+     353          148 :                 if (improvement < convergence_threshold) {
+     354           88 :                     VLOG_SCOPE_F(3, "  (improvement<threshold) tolerance: %d numItemsPack: %d improvement: %f prior: %f current: %f", tolerance, numItemsPack, improvement, priorAccuracy, accuracy);
+     355           88 :                     tolerance++;
+     356           88 :                 } else {
+     357           60 :                     VLOG_SCOPE_F(3, "* (improvement>=threshold) Reset. tolerance: %d numItemsPack: %d improvement: %f prior: %f current: %f", tolerance, numItemsPack, improvement, priorAccuracy, accuracy);
+     358           60 :                     tolerance = 0; // Reset the counter if the model performs better
+     359           60 :                     numItemsPack = 0;
+     360           60 :                 }
+     361          148 :                 if (convergence_best) {
+     362              :                     // Keep the best accuracy until now as the prior accuracy
+     363           16 :                     priorAccuracy = std::max(accuracy, priorAccuracy);
+     364              :                 } else {
+     365              :                     // Keep the last accuray obtained as the prior accuracy
+     366          132 :                     priorAccuracy = accuracy;
+     367              :                 }
+     368          148 :             }
+     369          214 :             VLOG_SCOPE_F(1, "tolerance: %d featuresUsed.size: %zu features.size: %zu", tolerance, featuresUsed.size(), features.size());
+     370          214 :             finished = finished || tolerance > maxTolerance || featuresUsed.size() == features.size();
+     371          214 :         }
+     372           38 :         if (tolerance > maxTolerance) {
+     373            4 :             if (numItemsPack < n_models) {
+     374            4 :                 notes.push_back("Convergence threshold reached & " + std::to_string(numItemsPack) + " models eliminated");
+     375            4 :                 VLOG_SCOPE_F(4, "Convergence threshold reached & %d models eliminated of %d", numItemsPack, n_models);
+     376           52 :                 for (int i = 0; i < numItemsPack; ++i) {
+     377           48 :                     significanceModels.pop_back();
+     378           48 :                     models.pop_back();
+     379           48 :                     n_models--;
+     380              :                 }
+     381            4 :             } else {
+     382            0 :                 notes.push_back("Convergence threshold reached & 0 models eliminated");
+     383            0 :                 VLOG_SCOPE_F(4, "Convergence threshold reached & 0 models eliminated n_models=%d numItemsPack=%d", n_models, numItemsPack);
+     384            0 :             }
+     385              :         }
+     386           38 :         if (featuresUsed.size() != features.size()) {
+     387            2 :             notes.push_back("Used features in train: " + std::to_string(featuresUsed.size()) + " of " + std::to_string(features.size()));
+     388            2 :             status = WARNING;
+     389              :         }
+     390           38 :         notes.push_back("Number of models: " + std::to_string(n_models));
+     391           54 :     }
+     392            2 :     std::vector<std::string> BoostAODE::graph(const std::string& title) const
+     393              :     {
+     394            2 :         return Ensemble::graph(title);
+     395              :     }
+     396              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/BoostAODE.h.func-c.html b/html/BayesNet/bayesnet/ensembles/BoostAODE.h.func-c.html new file mode 100644 index 0000000..5797b52 --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/BoostAODE.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/BoostAODE.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - BoostAODE.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet9BoostAODED0Ev44
_ZN8bayesnet9BoostAODED0Ev4
_ZN8bayesnet9BoostAODED2Ev40
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/BoostAODE.h.func.html b/html/BayesNet/bayesnet/ensembles/BoostAODE.h.func.html new file mode 100644 index 0000000..550c640 --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/BoostAODE.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/BoostAODE.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - BoostAODE.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet9BoostAODED0Ev44
_ZN8bayesnet9BoostAODED0Ev4
_ZN8bayesnet9BoostAODED2Ev40
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/BoostAODE.h.gcov.html b/html/BayesNet/bayesnet/ensembles/BoostAODE.h.gcov.html new file mode 100644 index 0000000..96c5242 --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/BoostAODE.h.gcov.html @@ -0,0 +1,126 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/BoostAODE.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - BoostAODE.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef BOOSTAODE_H
+       8              : #define BOOSTAODE_H
+       9              : #include <map>
+      10              : #include "bayesnet/classifiers/SPODE.h"
+      11              : #include "bayesnet/feature_selection/FeatureSelect.h"
+      12              : #include "Ensemble.h"
+      13              : namespace bayesnet {
+      14              :     const struct {
+      15              :         std::string CFS = "CFS";
+      16              :         std::string FCBF = "FCBF";
+      17              :         std::string IWSS = "IWSS";
+      18              :     }SelectFeatures;
+      19              :     const struct {
+      20              :         std::string ASC = "asc";
+      21              :         std::string DESC = "desc";
+      22              :         std::string RAND = "rand";
+      23              :     }Orders;
+      24              :     class BoostAODE : public Ensemble {
+      25              :     public:
+      26              :         explicit BoostAODE(bool predict_voting = false);
+      27           44 :         virtual ~BoostAODE() = default;
+      28              :         std::vector<std::string> graph(const std::string& title = "BoostAODE") const override;
+      29              :         void setHyperparameters(const nlohmann::json& hyperparameters_) override;
+      30              :     protected:
+      31              :         void buildModel(const torch::Tensor& weights) override;
+      32              :         void trainModel(const torch::Tensor& weights) override;
+      33              :     private:
+      34              :         std::tuple<torch::Tensor&, double, bool> update_weights_block(int k, torch::Tensor& ytrain, torch::Tensor& weights);
+      35              :         std::vector<int> initializeModels();
+      36              :         torch::Tensor X_train, y_train, X_test, y_test;
+      37              :         // Hyperparameters
+      38              :         bool bisection = true; // if true, use bisection stratety to add k models at once to the ensemble
+      39              :         int maxTolerance = 3;
+      40              :         std::string order_algorithm; // order to process the KBest features asc, desc, rand
+      41              :         bool convergence = true; //if true, stop when the model does not improve
+      42              :         bool convergence_best = false; // wether to keep the best accuracy to the moment or the last accuracy as prior accuracy
+      43              :         bool selectFeatures = false; // if true, use feature selection
+      44              :         std::string select_features_algorithm = Orders.DESC; // Selected feature selection algorithm
+      45              :         FeatureSelect* featureSelector = nullptr;
+      46              :         double threshold = -1;
+      47              :         bool block_update = false;
+      48              :     };
+      49              : }
+      50              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/Ensemble.cc.func-c.html b/html/BayesNet/bayesnet/ensembles/Ensemble.cc.func-c.html new file mode 100644 index 0000000..581ffcb --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/Ensemble.cc.func-c.html @@ -0,0 +1,250 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/Ensemble.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - Ensemble.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:98.1 %154151
Test Date:2024-04-30 13:17:26Functions:100.0 %2525
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK8bayesnet8Ensemble17getNumberOfStatesEv2
_ZNK8bayesnet8Ensemble4showB5cxx11Ev2
_ZNK8bayesnet8Ensemble5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE6
_ZN8bayesnet8Ensemble10trainModelERKN2at6TensorE12
_ZNK8bayesnet8Ensemble16getNumberOfEdgesEv12
_ZNK8bayesnet8Ensemble16getNumberOfNodesEv12
_ZN8bayesnet8Ensemble22predict_average_votingERSt6vectorIS1_IiSaIiEESaIS3_EE14
_ZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS1_IiSaIiEESaIS3_EE18
_ZN8bayesnet8Ensemble5scoreERSt6vectorIS1_IiSaIiEESaIS3_EERS3_20
_ZN8bayesnet8Ensemble15compute_arg_maxERSt6vectorIS1_IdSaIdEESaIS3_EE22
_ZN8bayesnet8Ensemble7predictERSt6vectorIS1_IiSaIiEESaIS3_EE28
_ZN8bayesnet8Ensemble5scoreERN2at6TensorES3_40
_ZN8bayesnet8Ensemble13predict_probaERSt6vectorIS1_IiSaIiEESaIS3_EE44
_ZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorE80
_ZN8bayesnet8Ensemble6votingERN2at6TensorE80
_ZZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS1_IiSaIiEESaIS3_EEENKUlvE_clEv122
_ZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorE148
_ZN8bayesnet8EnsembleC2Eb156
_ZN8bayesnet8Ensemble15compute_arg_maxERN2at6TensorE212
_ZN8bayesnet8Ensemble7predictERN2at6TensorE218
_ZN8bayesnet8Ensemble13predict_probaERN2at6TensorE226
_ZZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEENKUlvE_clEv536
_ZZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEENKUlvE_clEv734
_ZZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS1_IiSaIiEESaIS3_EEENKUldE_clEd16440
_ZZZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS1_IiSaIiEESaIS3_EEENKUlvE_clEvENKUlddE_clEdd129960
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/Ensemble.cc.func.html b/html/BayesNet/bayesnet/ensembles/Ensemble.cc.func.html new file mode 100644 index 0000000..6c9feef --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/Ensemble.cc.func.html @@ -0,0 +1,250 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/Ensemble.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - Ensemble.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:98.1 %154151
Test Date:2024-04-30 13:17:26Functions:100.0 %2525
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet8Ensemble10trainModelERKN2at6TensorE12
_ZN8bayesnet8Ensemble13predict_probaERN2at6TensorE226
_ZN8bayesnet8Ensemble13predict_probaERSt6vectorIS1_IiSaIiEESaIS3_EE44
_ZN8bayesnet8Ensemble15compute_arg_maxERN2at6TensorE212
_ZN8bayesnet8Ensemble15compute_arg_maxERSt6vectorIS1_IdSaIdEESaIS3_EE22
_ZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorE148
_ZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS1_IiSaIiEESaIS3_EE18
_ZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorE80
_ZN8bayesnet8Ensemble22predict_average_votingERSt6vectorIS1_IiSaIiEESaIS3_EE14
_ZN8bayesnet8Ensemble5scoreERN2at6TensorES3_40
_ZN8bayesnet8Ensemble5scoreERSt6vectorIS1_IiSaIiEESaIS3_EERS3_20
_ZN8bayesnet8Ensemble6votingERN2at6TensorE80
_ZN8bayesnet8Ensemble7predictERN2at6TensorE218
_ZN8bayesnet8Ensemble7predictERSt6vectorIS1_IiSaIiEESaIS3_EE28
_ZN8bayesnet8EnsembleC2Eb156
_ZNK8bayesnet8Ensemble16getNumberOfEdgesEv12
_ZNK8bayesnet8Ensemble16getNumberOfNodesEv12
_ZNK8bayesnet8Ensemble17getNumberOfStatesEv2
_ZNK8bayesnet8Ensemble4showB5cxx11Ev2
_ZNK8bayesnet8Ensemble5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE6
_ZZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEENKUlvE_clEv734
_ZZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS1_IiSaIiEESaIS3_EEENKUldE_clEd16440
_ZZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS1_IiSaIiEESaIS3_EEENKUlvE_clEv122
_ZZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEENKUlvE_clEv536
_ZZZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS1_IiSaIiEESaIS3_EEENKUlvE_clEvENKUlddE_clEdd129960
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/Ensemble.cc.gcov.html b/html/BayesNet/bayesnet/ensembles/Ensemble.cc.gcov.html new file mode 100644 index 0000000..fb6dae1 --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/Ensemble.cc.gcov.html @@ -0,0 +1,298 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/Ensemble.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - Ensemble.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:98.1 %154151
Test Date:2024-04-30 13:17:26Functions:100.0 %2525
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include "Ensemble.h"
+       8              : 
+       9              : namespace bayesnet {
+      10              : 
+      11          156 :     Ensemble::Ensemble(bool predict_voting) : Classifier(Network()), n_models(0), predict_voting(predict_voting)
+      12              :     {
+      13              : 
+      14          156 :     };
+      15              :     const std::string ENSEMBLE_NOT_FITTED = "Ensemble has not been fitted";
+      16           12 :     void Ensemble::trainModel(const torch::Tensor& weights)
+      17              :     {
+      18           12 :         n_models = models.size();
+      19           94 :         for (auto i = 0; i < n_models; ++i) {
+      20              :             // fit with std::vectors
+      21           82 :             models[i]->fit(dataset, features, className, states);
+      22              :         }
+      23           12 :     }
+      24           22 :     std::vector<int> Ensemble::compute_arg_max(std::vector<std::vector<double>>& X)
+      25              :     {
+      26           22 :         std::vector<int> y_pred;
+      27         4910 :         for (auto i = 0; i < X.size(); ++i) {
+      28         4888 :             auto max = std::max_element(X[i].begin(), X[i].end());
+      29         9776 :             y_pred.push_back(std::distance(X[i].begin(), max));
+      30              :         }
+      31           22 :         return y_pred;
+      32            0 :     }
+      33          212 :     torch::Tensor Ensemble::compute_arg_max(torch::Tensor& X)
+      34              :     {
+      35          212 :         auto y_pred = torch::argmax(X, 1);
+      36          212 :         return y_pred;
+      37              :     }
+      38           80 :     torch::Tensor Ensemble::voting(torch::Tensor& votes)
+      39              :     {
+      40              :         // Convert m x n_models tensor to a m x n_class_states with voting probabilities
+      41           80 :         auto y_pred_ = votes.accessor<int, 2>();
+      42           80 :         std::vector<int> y_pred_final;
+      43           80 :         int numClasses = states.at(className).size();
+      44              :         // votes is m x n_models with the prediction of every model for each sample
+      45           80 :         auto result = torch::zeros({ votes.size(0), numClasses }, torch::kFloat32);
+      46           80 :         auto sum = std::reduce(significanceModels.begin(), significanceModels.end());
+      47        20612 :         for (int i = 0; i < votes.size(0); ++i) {
+      48              :             // n_votes store in each index (value of class) the significance added by each model
+      49              :             // i.e. n_votes[0] contains how much value has the value 0 of class. That value is generated by the models predictions
+      50        20532 :             std::vector<double> n_votes(numClasses, 0.0);
+      51       171800 :             for (int j = 0; j < n_models; ++j) {
+      52       151268 :                 n_votes[y_pred_[i][j]] += significanceModels.at(j);
+      53              :             }
+      54        20532 :             result[i] = torch::tensor(n_votes);
+      55        20532 :         }
+      56              :         // To only do one division and gain precision
+      57           80 :         result /= sum;
+      58          160 :         return result;
+      59           80 :     }
+      60           44 :     std::vector<std::vector<double>> Ensemble::predict_proba(std::vector<std::vector<int>>& X)
+      61              :     {
+      62           44 :         if (!fitted) {
+      63           12 :             throw std::logic_error(ENSEMBLE_NOT_FITTED);
+      64              :         }
+      65           32 :         return predict_voting ? predict_average_voting(X) : predict_average_proba(X);
+      66              :     }
+      67          226 :     torch::Tensor Ensemble::predict_proba(torch::Tensor& X)
+      68              :     {
+      69          226 :         if (!fitted) {
+      70           12 :             throw std::logic_error(ENSEMBLE_NOT_FITTED);
+      71              :         }
+      72          214 :         return predict_voting ? predict_average_voting(X) : predict_average_proba(X);
+      73              :     }
+      74           28 :     std::vector<int> Ensemble::predict(std::vector<std::vector<int>>& X)
+      75              :     {
+      76           28 :         auto res = predict_proba(X);
+      77           40 :         return compute_arg_max(res);
+      78           20 :     }
+      79          218 :     torch::Tensor Ensemble::predict(torch::Tensor& X)
+      80              :     {
+      81          218 :         auto res = predict_proba(X);
+      82          420 :         return compute_arg_max(res);
+      83          210 :     }
+      84          148 :     torch::Tensor Ensemble::predict_average_proba(torch::Tensor& X)
+      85              :     {
+      86          148 :         auto n_states = models[0]->getClassNumStates();
+      87          148 :         torch::Tensor y_pred = torch::zeros({ X.size(1), n_states }, torch::kFloat32);
+      88          148 :         auto threads{ std::vector<std::thread>() };
+      89          148 :         std::mutex mtx;
+      90          882 :         for (auto i = 0; i < n_models; ++i) {
+      91          734 :             threads.push_back(std::thread([&, i]() {
+      92          734 :                 auto ypredict = models[i]->predict_proba(X);
+      93          734 :                 std::lock_guard<std::mutex> lock(mtx);
+      94          734 :                 y_pred += ypredict * significanceModels[i];
+      95          734 :                 }));
+      96              :         }
+      97          882 :         for (auto& thread : threads) {
+      98          734 :             thread.join();
+      99              :         }
+     100          148 :         auto sum = std::reduce(significanceModels.begin(), significanceModels.end());
+     101          148 :         y_pred /= sum;
+     102          296 :         return y_pred;
+     103          148 :     }
+     104           18 :     std::vector<std::vector<double>> Ensemble::predict_average_proba(std::vector<std::vector<int>>& X)
+     105              :     {
+     106           18 :         auto n_states = models[0]->getClassNumStates();
+     107           18 :         std::vector<std::vector<double>> y_pred(X[0].size(), std::vector<double>(n_states, 0.0));
+     108           18 :         auto threads{ std::vector<std::thread>() };
+     109           18 :         std::mutex mtx;
+     110          140 :         for (auto i = 0; i < n_models; ++i) {
+     111          122 :             threads.push_back(std::thread([&, i]() {
+     112          122 :                 auto ypredict = models[i]->predict_proba(X);
+     113          122 :                 assert(ypredict.size() == y_pred.size());
+     114          122 :                 assert(ypredict[0].size() == y_pred[0].size());
+     115          122 :                 std::lock_guard<std::mutex> lock(mtx);
+     116              :                 // Multiply each prediction by the significance of the model and then add it to the final prediction
+     117        24182 :                 for (auto j = 0; j < ypredict.size(); ++j) {
+     118        24060 :                     std::transform(y_pred[j].begin(), y_pred[j].end(), ypredict[j].begin(), y_pred[j].begin(),
+     119       154020 :                         [significanceModels = significanceModels[i]](double x, double y) { return x + y * significanceModels; });
+     120              :                 }
+     121          122 :                 }));
+     122              :         }
+     123          140 :         for (auto& thread : threads) {
+     124          122 :             thread.join();
+     125              :         }
+     126           18 :         auto sum = std::reduce(significanceModels.begin(), significanceModels.end());
+     127              :         //Divide each element of the prediction by the sum of the significances
+     128         3358 :         for (auto j = 0; j < y_pred.size(); ++j) {
+     129        19780 :             std::transform(y_pred[j].begin(), y_pred[j].end(), y_pred[j].begin(), [sum](double x) { return x / sum; });
+     130              :         }
+     131           36 :         return y_pred;
+     132           18 :     }
+     133           14 :     std::vector<std::vector<double>> Ensemble::predict_average_voting(std::vector<std::vector<int>>& X)
+     134              :     {
+     135           14 :         torch::Tensor Xt = bayesnet::vectorToTensor(X, false);
+     136           14 :         auto y_pred = predict_average_voting(Xt);
+     137           14 :         std::vector<std::vector<double>> result = tensorToVectorDouble(y_pred);
+     138           28 :         return result;
+     139           14 :     }
+     140           80 :     torch::Tensor Ensemble::predict_average_voting(torch::Tensor& X)
+     141              :     {
+     142              :         // Build a m x n_models tensor with the predictions of each model
+     143           80 :         torch::Tensor y_pred = torch::zeros({ X.size(1), n_models }, torch::kInt32);
+     144           80 :         auto threads{ std::vector<std::thread>() };
+     145           80 :         std::mutex mtx;
+     146          616 :         for (auto i = 0; i < n_models; ++i) {
+     147          536 :             threads.push_back(std::thread([&, i]() {
+     148          536 :                 auto ypredict = models[i]->predict(X);
+     149          536 :                 std::lock_guard<std::mutex> lock(mtx);
+     150         1608 :                 y_pred.index_put_({ "...", i }, ypredict);
+     151         1072 :                 }));
+     152              :         }
+     153          616 :         for (auto& thread : threads) {
+     154          536 :             thread.join();
+     155              :         }
+     156          160 :         return voting(y_pred);
+     157           80 :     }
+     158           40 :     float Ensemble::score(torch::Tensor& X, torch::Tensor& y)
+     159              :     {
+     160           40 :         auto y_pred = predict(X);
+     161           36 :         int correct = 0;
+     162        11292 :         for (int i = 0; i < y_pred.size(0); ++i) {
+     163        11256 :             if (y_pred[i].item<int>() == y[i].item<int>()) {
+     164         9834 :                 correct++;
+     165              :             }
+     166              :         }
+     167           72 :         return (double)correct / y_pred.size(0);
+     168           36 :     }
+     169           20 :     float Ensemble::score(std::vector<std::vector<int>>& X, std::vector<int>& y)
+     170              :     {
+     171           20 :         auto y_pred = predict(X);
+     172           16 :         int correct = 0;
+     173         4292 :         for (int i = 0; i < y_pred.size(); ++i) {
+     174         4276 :             if (y_pred[i] == y[i]) {
+     175         3574 :                 correct++;
+     176              :             }
+     177              :         }
+     178           32 :         return (double)correct / y_pred.size();
+     179           16 :     }
+     180            2 :     std::vector<std::string> Ensemble::show() const
+     181              :     {
+     182            2 :         auto result = std::vector<std::string>();
+     183           10 :         for (auto i = 0; i < n_models; ++i) {
+     184            8 :             auto res = models[i]->show();
+     185            8 :             result.insert(result.end(), res.begin(), res.end());
+     186            8 :         }
+     187            2 :         return result;
+     188            0 :     }
+     189            6 :     std::vector<std::string> Ensemble::graph(const std::string& title) const
+     190              :     {
+     191            6 :         auto result = std::vector<std::string>();
+     192           40 :         for (auto i = 0; i < n_models; ++i) {
+     193           34 :             auto res = models[i]->graph(title + "_" + std::to_string(i));
+     194           34 :             result.insert(result.end(), res.begin(), res.end());
+     195           34 :         }
+     196            6 :         return result;
+     197            0 :     }
+     198           12 :     int Ensemble::getNumberOfNodes() const
+     199              :     {
+     200           12 :         int nodes = 0;
+     201          100 :         for (auto i = 0; i < n_models; ++i) {
+     202           88 :             nodes += models[i]->getNumberOfNodes();
+     203              :         }
+     204           12 :         return nodes;
+     205              :     }
+     206           12 :     int Ensemble::getNumberOfEdges() const
+     207              :     {
+     208           12 :         int edges = 0;
+     209          100 :         for (auto i = 0; i < n_models; ++i) {
+     210           88 :             edges += models[i]->getNumberOfEdges();
+     211              :         }
+     212           12 :         return edges;
+     213              :     }
+     214            2 :     int Ensemble::getNumberOfStates() const
+     215              :     {
+     216            2 :         int nstates = 0;
+     217           10 :         for (auto i = 0; i < n_models; ++i) {
+     218            8 :             nstates += models[i]->getNumberOfStates();
+     219              :         }
+     220            2 :         return nstates;
+     221              :     }
+     222              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/Ensemble.h.func-c.html b/html/BayesNet/bayesnet/ensembles/Ensemble.h.func-c.html new file mode 100644 index 0000000..137bef6 --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/Ensemble.h.func-c.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/Ensemble.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - Ensemble.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %55
Test Date:2024-04-30 13:17:26Functions:75.0 %43
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK8bayesnet8Ensemble8dump_cptB5cxx11Ev4
_ZN8bayesnet8Ensemble17topological_orderB5cxx11Ev6
_ZN8bayesnet8EnsembleD0Ev56
_ZN8bayesnet8EnsembleD0Ev0
_ZN8bayesnet8EnsembleD2Ev56
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/Ensemble.h.func.html b/html/BayesNet/bayesnet/ensembles/Ensemble.h.func.html new file mode 100644 index 0000000..80fbe7d --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/Ensemble.h.func.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/Ensemble.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - Ensemble.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %55
Test Date:2024-04-30 13:17:26Functions:75.0 %43
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet8Ensemble17topological_orderB5cxx11Ev6
_ZN8bayesnet8EnsembleD0Ev56
_ZN8bayesnet8EnsembleD0Ev0
_ZN8bayesnet8EnsembleD2Ev56
_ZNK8bayesnet8Ensemble8dump_cptB5cxx11Ev4
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/Ensemble.h.gcov.html b/html/BayesNet/bayesnet/ensembles/Ensemble.h.gcov.html new file mode 100644 index 0000000..a6120c0 --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/Ensemble.h.gcov.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles/Ensemble.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensembles - Ensemble.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %55
Test Date:2024-04-30 13:17:26Functions:75.0 %43
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef ENSEMBLE_H
+       8              : #define ENSEMBLE_H
+       9              : #include <torch/torch.h>
+      10              : #include "bayesnet/utils/BayesMetrics.h"
+      11              : #include "bayesnet/utils/bayesnetUtils.h"
+      12              : #include "bayesnet/classifiers/Classifier.h"
+      13              : 
+      14              : namespace bayesnet {
+      15              :     class Ensemble : public Classifier {
+      16              :     public:
+      17              :         Ensemble(bool predict_voting = true);
+      18           56 :         virtual ~Ensemble() = default;
+      19              :         torch::Tensor predict(torch::Tensor& X) override;
+      20              :         std::vector<int> predict(std::vector<std::vector<int>>& X) override;
+      21              :         torch::Tensor predict_proba(torch::Tensor& X) override;
+      22              :         std::vector<std::vector<double>> predict_proba(std::vector<std::vector<int>>& X) override;
+      23              :         float score(torch::Tensor& X, torch::Tensor& y) override;
+      24              :         float score(std::vector<std::vector<int>>& X, std::vector<int>& y) override;
+      25              :         int getNumberOfNodes() const override;
+      26              :         int getNumberOfEdges() const override;
+      27              :         int getNumberOfStates() const override;
+      28              :         std::vector<std::string> show() const override;
+      29              :         std::vector<std::string> graph(const std::string& title) const override;
+      30            6 :         std::vector<std::string> topological_order()  override
+      31              :         {
+      32            6 :             return std::vector<std::string>();
+      33              :         }
+      34            4 :         std::string dump_cpt() const override
+      35              :         {
+      36            8 :             return "";
+      37              :         }
+      38              :     protected:
+      39              :         torch::Tensor predict_average_voting(torch::Tensor& X);
+      40              :         std::vector<std::vector<double>> predict_average_voting(std::vector<std::vector<int>>& X);
+      41              :         torch::Tensor predict_average_proba(torch::Tensor& X);
+      42              :         std::vector<std::vector<double>> predict_average_proba(std::vector<std::vector<int>>& X);
+      43              :         torch::Tensor compute_arg_max(torch::Tensor& X);
+      44              :         std::vector<int> compute_arg_max(std::vector<std::vector<double>>& X);
+      45              :         torch::Tensor voting(torch::Tensor& votes);
+      46              :         unsigned n_models;
+      47              :         std::vector<std::unique_ptr<Classifier>> models;
+      48              :         std::vector<double> significanceModels;
+      49              :         void trainModel(const torch::Tensor& weights) override;
+      50              :         bool predict_voting;
+      51              :     };
+      52              : }
+      53              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/index-sort-f.html b/html/BayesNet/bayesnet/ensembles/index-sort-f.html new file mode 100644 index 0000000..f57eb5b --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/index-sort-f.html @@ -0,0 +1,189 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensemblesCoverageTotalHit
Test:coverage.infoLines:98.4 %443436
Test Date:2024-04-30 13:17:26Functions:98.1 %5352
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
Ensemble.h +
100.0%
+
100.0 %5575.0 %43
AODE.h +
100.0%
+
100.0 %11100.0 %22
AODELd.h +
100.0%
+
100.0 %11100.0 %22
BoostAODE.h +
100.0%
+
100.0 %11100.0 %22
AODE.cc +
100.0%
+
100.0 %2020100.0 %44
AODELd.cc +
100.0%
+
100.0 %2424100.0 %55
BoostAODE.cc +
98.3%98.3%
+
98.3 %237233100.0 %99
Ensemble.cc +
98.1%98.1%
+
98.1 %154151100.0 %2525
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/index-sort-l.html b/html/BayesNet/bayesnet/ensembles/index-sort-l.html new file mode 100644 index 0000000..e6dd554 --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/index-sort-l.html @@ -0,0 +1,189 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensemblesCoverageTotalHit
Test:coverage.infoLines:98.4 %443436
Test Date:2024-04-30 13:17:26Functions:98.1 %5352
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
Ensemble.cc +
98.1%98.1%
+
98.1 %154151100.0 %2525
BoostAODE.cc +
98.3%98.3%
+
98.3 %237233100.0 %99
AODE.h +
100.0%
+
100.0 %11100.0 %22
AODELd.h +
100.0%
+
100.0 %11100.0 %22
BoostAODE.h +
100.0%
+
100.0 %11100.0 %22
Ensemble.h +
100.0%
+
100.0 %5575.0 %43
AODE.cc +
100.0%
+
100.0 %2020100.0 %44
AODELd.cc +
100.0%
+
100.0 %2424100.0 %55
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/ensembles/index.html b/html/BayesNet/bayesnet/ensembles/index.html new file mode 100644 index 0000000..c0cb667 --- /dev/null +++ b/html/BayesNet/bayesnet/ensembles/index.html @@ -0,0 +1,189 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/ensembles + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/ensemblesCoverageTotalHit
Test:coverage.infoLines:98.4 %443436
Test Date:2024-04-30 13:17:26Functions:98.1 %5352
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
AODE.cc +
100.0%
+
100.0 %2020100.0 %44
AODE.h +
100.0%
+
100.0 %11100.0 %22
AODELd.cc +
100.0%
+
100.0 %2424100.0 %55
AODELd.h +
100.0%
+
100.0 %11100.0 %22
BoostAODE.cc +
98.3%98.3%
+
98.3 %237233100.0 %99
BoostAODE.h +
100.0%
+
100.0 %11100.0 %22
Ensemble.cc +
98.1%98.1%
+
98.1 %154151100.0 %2525
Ensemble.h +
100.0%
+
100.0 %5575.0 %43
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/CFS.cc.func-c.html b/html/BayesNet/bayesnet/feature_selection/CFS.cc.func-c.html new file mode 100644 index 0000000..63361ba --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/CFS.cc.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/CFS.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - CFS.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:97.8 %4544
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet3CFS3fitEv12
_ZN8bayesnet3CFS24computeContinueConditionERKSt6vectorIiSaIiEE56
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/CFS.cc.func.html b/html/BayesNet/bayesnet/feature_selection/CFS.cc.func.html new file mode 100644 index 0000000..a87b90b --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/CFS.cc.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/CFS.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - CFS.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:97.8 %4544
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet3CFS24computeContinueConditionERKSt6vectorIiSaIiEE56
_ZN8bayesnet3CFS3fitEv12
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/CFS.cc.gcov.html b/html/BayesNet/bayesnet/feature_selection/CFS.cc.gcov.html new file mode 100644 index 0000000..7c44e4c --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/CFS.cc.gcov.html @@ -0,0 +1,154 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/CFS.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - CFS.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:97.8 %4544
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include <limits>
+       8              : #include "bayesnet/utils/bayesnetUtils.h"
+       9              : #include "CFS.h"
+      10              : namespace bayesnet {
+      11           12 :     void CFS::fit()
+      12              :     {
+      13           12 :         initialize();
+      14           12 :         computeSuLabels();
+      15           12 :         auto featureOrder = argsort(suLabels); // sort descending order
+      16           12 :         auto continueCondition = true;
+      17           12 :         auto feature = featureOrder[0];
+      18           12 :         selectedFeatures.push_back(feature);
+      19           12 :         selectedScores.push_back(suLabels[feature]);
+      20           12 :         featureOrder.erase(featureOrder.begin());
+      21           68 :         while (continueCondition) {
+      22           56 :             double merit = std::numeric_limits<double>::lowest();
+      23           56 :             int bestFeature = -1;
+      24          328 :             for (auto feature : featureOrder) {
+      25          272 :                 selectedFeatures.push_back(feature);
+      26              :                 // Compute merit with selectedFeatures
+      27          272 :                 auto meritNew = computeMeritCFS();
+      28          272 :                 if (meritNew > merit) {
+      29          114 :                     merit = meritNew;
+      30          114 :                     bestFeature = feature;
+      31              :                 }
+      32          272 :                 selectedFeatures.pop_back();
+      33              :             }
+      34           56 :             if (bestFeature == -1) {
+      35              :                 // meritNew has to be nan due to constant features
+      36            0 :                 break;
+      37              :             }
+      38           56 :             selectedFeatures.push_back(bestFeature);
+      39           56 :             selectedScores.push_back(merit);
+      40           56 :             featureOrder.erase(remove(featureOrder.begin(), featureOrder.end(), bestFeature), featureOrder.end());
+      41           56 :             continueCondition = computeContinueCondition(featureOrder);
+      42              :         }
+      43           12 :         fitted = true;
+      44           12 :     }
+      45           56 :     bool CFS::computeContinueCondition(const std::vector<int>& featureOrder)
+      46              :     {
+      47           56 :         if (selectedFeatures.size() == maxFeatures || featureOrder.size() == 0) {
+      48            2 :             return false;
+      49              :         }
+      50           54 :         if (selectedScores.size() >= 5) {
+      51              :             /*
+      52              :             "To prevent the best first search from exploring the entire
+      53              :             feature subset search space, a stopping criterion is imposed.
+      54              :             The search will terminate if five consecutive fully expanded
+      55              :             subsets show no improvement over the current best subset."
+      56              :             as stated in Mark A.Hall Thesis
+      57              :             */
+      58           20 :             double item_ant = std::numeric_limits<double>::lowest();
+      59           20 :             int num = 0;
+      60           20 :             std::vector<double> lastFive(selectedScores.end() - 5, selectedScores.end());
+      61           80 :             for (auto item : lastFive) {
+      62           70 :                 if (item_ant == std::numeric_limits<double>::lowest()) {
+      63           20 :                     item_ant = item;
+      64              :                 }
+      65           70 :                 if (item > item_ant) {
+      66           10 :                     break;
+      67              :                 } else {
+      68           60 :                     num++;
+      69           60 :                     item_ant = item;
+      70              :                 }
+      71              :             }
+      72           20 :             if (num == 5) {
+      73           10 :                 return false;
+      74              :             }
+      75           20 :         }
+      76           44 :         return true;
+      77              :     }
+      78              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/CFS.h.func-c.html b/html/BayesNet/bayesnet/feature_selection/CFS.h.func-c.html new file mode 100644 index 0000000..1d3d0fa --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/CFS.h.func-c.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/CFS.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - CFS.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %44
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet3CFSC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_iiS4_12
_ZN8bayesnet3CFSD0Ev24
_ZN8bayesnet3CFSD0Ev12
_ZN8bayesnet3CFSD2Ev12
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/CFS.h.func.html b/html/BayesNet/bayesnet/feature_selection/CFS.h.func.html new file mode 100644 index 0000000..14bc6ef --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/CFS.h.func.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/CFS.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - CFS.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %44
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet3CFSC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_iiS4_12
_ZN8bayesnet3CFSD0Ev24
_ZN8bayesnet3CFSD0Ev12
_ZN8bayesnet3CFSD2Ev12
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/CFS.h.gcov.html b/html/BayesNet/bayesnet/feature_selection/CFS.h.gcov.html new file mode 100644 index 0000000..1e69a2d --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/CFS.h.gcov.html @@ -0,0 +1,102 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/CFS.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - CFS.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %44
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef CFS_H
+       8              : #define CFS_H
+       9              : #include <torch/torch.h>
+      10              : #include <vector>
+      11              : #include "bayesnet/feature_selection/FeatureSelect.h"
+      12              : namespace bayesnet {
+      13              :     class CFS : public FeatureSelect {
+      14              :     public:
+      15              :         // dataset is a n+1xm tensor of integers where dataset[-1] is the y std::vector
+      16           12 :         CFS(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int maxFeatures, const int classNumStates, const torch::Tensor& weights) :
+      17           12 :             FeatureSelect(samples, features, className, maxFeatures, classNumStates, weights)
+      18              :         {
+      19           12 :         }
+      20           24 :         virtual ~CFS() {};
+      21              :         void fit() override;
+      22              :     private:
+      23              :         bool computeContinueCondition(const std::vector<int>& featureOrder);
+      24              :     };
+      25              : }
+      26              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/FCBF.cc.func-c.html b/html/BayesNet/bayesnet/feature_selection/FCBF.cc.func-c.html new file mode 100644 index 0000000..595f8b2 --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/FCBF.cc.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/FCBF.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - FCBF.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.3 %2624
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet4FCBF3fitEv10
_ZN8bayesnet4FCBFC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_iiS4_d14
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/FCBF.cc.func.html b/html/BayesNet/bayesnet/feature_selection/FCBF.cc.func.html new file mode 100644 index 0000000..74556de --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/FCBF.cc.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/FCBF.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - FCBF.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.3 %2624
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet4FCBF3fitEv10
_ZN8bayesnet4FCBFC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_iiS4_d14
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/FCBF.cc.gcov.html b/html/BayesNet/bayesnet/feature_selection/FCBF.cc.gcov.html new file mode 100644 index 0000000..4c98368 --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/FCBF.cc.gcov.html @@ -0,0 +1,126 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/FCBF.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - FCBF.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.3 %2624
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include "bayesnet/utils/bayesnetUtils.h"
+       8              : #include "FCBF.h"
+       9              : namespace bayesnet {
+      10              : 
+      11           14 :     FCBF::FCBF(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int maxFeatures, const int classNumStates, const torch::Tensor& weights, const double threshold) :
+      12           14 :         FeatureSelect(samples, features, className, maxFeatures, classNumStates, weights), threshold(threshold)
+      13              :     {
+      14           14 :         if (threshold < 1e-7) {
+      15            4 :             throw std::invalid_argument("Threshold cannot be less than 1e-7");
+      16              :         }
+      17           14 :     }
+      18           10 :     void FCBF::fit()
+      19              :     {
+      20           10 :         initialize();
+      21           10 :         computeSuLabels();
+      22           10 :         auto featureOrder = argsort(suLabels); // sort descending order
+      23           10 :         auto featureOrderCopy = featureOrder;
+      24           84 :         for (const auto& feature : featureOrder) {
+      25              :             // Don't self compare
+      26           74 :             featureOrderCopy.erase(featureOrderCopy.begin());
+      27           74 :             if (suLabels.at(feature) == 0.0) {
+      28              :                 // The feature has been removed from the list
+      29           32 :                 continue;
+      30              :             }
+      31           42 :             if (suLabels.at(feature) < threshold) {
+      32            0 :                 break;
+      33              :             }
+      34              :             // Remove redundant features
+      35          232 :             for (const auto& featureCopy : featureOrderCopy) {
+      36          190 :                 double value = computeSuFeatures(feature, featureCopy);
+      37          190 :                 if (value >= suLabels.at(featureCopy)) {
+      38              :                     // Remove feature from list
+      39           66 :                     suLabels[featureCopy] = 0.0;
+      40              :                 }
+      41              :             }
+      42           42 :             selectedFeatures.push_back(feature);
+      43           42 :             selectedScores.push_back(suLabels[feature]);
+      44           42 :             if (selectedFeatures.size() == maxFeatures) {
+      45            0 :                 break;
+      46              :             }
+      47              :         }
+      48           10 :         fitted = true;
+      49           10 :     }
+      50              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/FCBF.h.func-c.html b/html/BayesNet/bayesnet/feature_selection/FCBF.h.func-c.html new file mode 100644 index 0000000..4699abe --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/FCBF.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/FCBF.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - FCBF.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet4FCBFD0Ev20
_ZN8bayesnet4FCBFD0Ev10
_ZN8bayesnet4FCBFD2Ev10
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/FCBF.h.func.html b/html/BayesNet/bayesnet/feature_selection/FCBF.h.func.html new file mode 100644 index 0000000..8a1961a --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/FCBF.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/FCBF.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - FCBF.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet4FCBFD0Ev20
_ZN8bayesnet4FCBFD0Ev10
_ZN8bayesnet4FCBFD2Ev10
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/FCBF.h.gcov.html b/html/BayesNet/bayesnet/feature_selection/FCBF.h.gcov.html new file mode 100644 index 0000000..b77127e --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/FCBF.h.gcov.html @@ -0,0 +1,99 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/FCBF.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - FCBF.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef FCBF_H
+       8              : #define FCBF_H
+       9              : #include <torch/torch.h>
+      10              : #include <vector>
+      11              : #include "bayesnet/feature_selection/FeatureSelect.h"
+      12              : namespace bayesnet {
+      13              :     class FCBF : public FeatureSelect {
+      14              :     public:
+      15              :         // dataset is a n+1xm tensor of integers where dataset[-1] is the y std::vector
+      16              :         FCBF(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int maxFeatures, const int classNumStates, const torch::Tensor& weights, const double threshold);
+      17           20 :         virtual ~FCBF() {};
+      18              :         void fit() override;
+      19              :     private:
+      20              :         double threshold = -1;
+      21              :     };
+      22              : }
+      23              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/FeatureSelect.cc.func-c.html b/html/BayesNet/bayesnet/feature_selection/FeatureSelect.cc.func-c.html new file mode 100644 index 0000000..86357ad --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/FeatureSelect.cc.func-c.html @@ -0,0 +1,131 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/FeatureSelect.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - FeatureSelect.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:95.5 %4442
Test Date:2024-04-30 13:17:26Functions:100.0 %88
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet13FeatureSelect10initializeEv32
_ZN8bayesnet13FeatureSelect15computeSuLabelsEv32
_ZNK8bayesnet13FeatureSelect11getFeaturesEv32
_ZNK8bayesnet13FeatureSelect9getScoresEv32
_ZN8bayesnet13FeatureSelectC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_iiS4_44
_ZN8bayesnet13FeatureSelect15computeMeritCFSEv316
_ZN8bayesnet13FeatureSelect22symmetricalUncertaintyEii822
_ZN8bayesnet13FeatureSelect17computeSuFeaturesEii1960
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/FeatureSelect.cc.func.html b/html/BayesNet/bayesnet/feature_selection/FeatureSelect.cc.func.html new file mode 100644 index 0000000..8dfaca4 --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/FeatureSelect.cc.func.html @@ -0,0 +1,131 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/FeatureSelect.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - FeatureSelect.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:95.5 %4442
Test Date:2024-04-30 13:17:26Functions:100.0 %88
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet13FeatureSelect10initializeEv32
_ZN8bayesnet13FeatureSelect15computeMeritCFSEv316
_ZN8bayesnet13FeatureSelect15computeSuLabelsEv32
_ZN8bayesnet13FeatureSelect17computeSuFeaturesEii1960
_ZN8bayesnet13FeatureSelect22symmetricalUncertaintyEii822
_ZN8bayesnet13FeatureSelectC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_iiS4_44
_ZNK8bayesnet13FeatureSelect11getFeaturesEv32
_ZNK8bayesnet13FeatureSelect9getScoresEv32
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/FeatureSelect.cc.gcov.html b/html/BayesNet/bayesnet/feature_selection/FeatureSelect.cc.gcov.html new file mode 100644 index 0000000..c7b1ff6 --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/FeatureSelect.cc.gcov.html @@ -0,0 +1,160 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/FeatureSelect.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - FeatureSelect.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:95.5 %4442
Test Date:2024-04-30 13:17:26Functions:100.0 %88
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include <limits>
+       8              : #include "bayesnet/utils/bayesnetUtils.h"
+       9              : #include "FeatureSelect.h"
+      10              : namespace bayesnet {
+      11           44 :     FeatureSelect::FeatureSelect(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int maxFeatures, const int classNumStates, const torch::Tensor& weights) :
+      12           44 :         Metrics(samples, features, className, classNumStates), maxFeatures(maxFeatures == 0 ? samples.size(0) - 1 : maxFeatures), weights(weights)
+      13              : 
+      14              :     {
+      15           44 :     }
+      16           32 :     void FeatureSelect::initialize()
+      17              :     {
+      18           32 :         selectedFeatures.clear();
+      19           32 :         selectedScores.clear();
+      20           32 :     }
+      21          822 :     double FeatureSelect::symmetricalUncertainty(int a, int b)
+      22              :     {
+      23              :         /*
+      24              :         Compute symmetrical uncertainty. Normalize* information gain (mutual
+      25              :         information) with the entropies of the features in order to compensate
+      26              :         the bias due to high cardinality features. *Range [0, 1]
+      27              :         (https://www.sciencedirect.com/science/article/pii/S0020025519303603)
+      28              :         */
+      29         2466 :         auto x = samples.index({ a, "..." });
+      30         2466 :         auto y = samples.index({ b, "..." });
+      31          822 :         auto mu = mutualInformation(x, y, weights);
+      32          822 :         auto hx = entropy(x, weights);
+      33          822 :         auto hy = entropy(y, weights);
+      34          822 :         return 2.0 * mu / (hx + hy);
+      35         2466 :     }
+      36           32 :     void FeatureSelect::computeSuLabels()
+      37              :     {
+      38              :         // Compute Simmetrical Uncertainty between features and labels
+      39              :         // https://en.wikipedia.org/wiki/Symmetric_uncertainty
+      40          270 :         for (int i = 0; i < features.size(); ++i) {
+      41          238 :             suLabels.push_back(symmetricalUncertainty(i, -1));
+      42              :         }
+      43           32 :     }
+      44         1960 :     double FeatureSelect::computeSuFeatures(const int firstFeature, const int secondFeature)
+      45              :     {
+      46              :         // Compute Simmetrical Uncertainty between features
+      47              :         // https://en.wikipedia.org/wiki/Symmetric_uncertainty
+      48              :         try {
+      49         1960 :             return suFeatures.at({ firstFeature, secondFeature });
+      50              :         }
+      51          584 :         catch (const std::out_of_range& e) {
+      52          584 :             double result = symmetricalUncertainty(firstFeature, secondFeature);
+      53          584 :             suFeatures[{firstFeature, secondFeature}] = result;
+      54          584 :             return result;
+      55          584 :         }
+      56              :     }
+      57          316 :     double FeatureSelect::computeMeritCFS()
+      58              :     {
+      59          316 :         double rcf = 0;
+      60         1454 :         for (auto feature : selectedFeatures) {
+      61         1138 :             rcf += suLabels[feature];
+      62              :         }
+      63          316 :         double rff = 0;
+      64          316 :         int n = selectedFeatures.size();
+      65         2086 :         for (const auto& item : doCombinations(selectedFeatures)) {
+      66         1770 :             rff += computeSuFeatures(item.first, item.second);
+      67          316 :         }
+      68          316 :         return rcf / sqrt(n + (n * n - n) * rff);
+      69              :     }
+      70           32 :     std::vector<int> FeatureSelect::getFeatures() const
+      71              :     {
+      72           32 :         if (!fitted) {
+      73            0 :             throw std::runtime_error("FeatureSelect not fitted");
+      74              :         }
+      75           32 :         return selectedFeatures;
+      76              :     }
+      77           32 :     std::vector<double> FeatureSelect::getScores() const
+      78              :     {
+      79           32 :         if (!fitted) {
+      80            0 :             throw std::runtime_error("FeatureSelect not fitted");
+      81              :         }
+      82           32 :         return selectedScores;
+      83              :     }
+      84              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/FeatureSelect.h.func-c.html b/html/BayesNet/bayesnet/feature_selection/FeatureSelect.h.func-c.html new file mode 100644 index 0000000..7209875 --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/FeatureSelect.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/FeatureSelect.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - FeatureSelect.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:50.0 %21
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet13FeatureSelectD0Ev44
_ZN8bayesnet13FeatureSelectD0Ev0
_ZN8bayesnet13FeatureSelectD2Ev44
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/FeatureSelect.h.func.html b/html/BayesNet/bayesnet/feature_selection/FeatureSelect.h.func.html new file mode 100644 index 0000000..d2bc466 --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/FeatureSelect.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/FeatureSelect.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - FeatureSelect.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:50.0 %21
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet13FeatureSelectD0Ev44
_ZN8bayesnet13FeatureSelectD0Ev0
_ZN8bayesnet13FeatureSelectD2Ev44
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/FeatureSelect.h.gcov.html b/html/BayesNet/bayesnet/feature_selection/FeatureSelect.h.gcov.html new file mode 100644 index 0000000..97cc588 --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/FeatureSelect.h.gcov.html @@ -0,0 +1,112 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/FeatureSelect.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - FeatureSelect.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:50.0 %21
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef FEATURE_SELECT_H
+       8              : #define FEATURE_SELECT_H
+       9              : #include <torch/torch.h>
+      10              : #include <vector>
+      11              : #include "bayesnet/utils/BayesMetrics.h"
+      12              : namespace bayesnet {
+      13              :     class FeatureSelect : public Metrics {
+      14              :     public:
+      15              :         // dataset is a n+1xm tensor of integers where dataset[-1] is the y std::vector
+      16              :         FeatureSelect(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int maxFeatures, const int classNumStates, const torch::Tensor& weights);
+      17           44 :         virtual ~FeatureSelect() {};
+      18              :         virtual void fit() = 0;
+      19              :         std::vector<int> getFeatures() const;
+      20              :         std::vector<double> getScores() const;
+      21              :     protected:
+      22              :         void initialize();
+      23              :         void computeSuLabels();
+      24              :         double computeSuFeatures(const int a, const int b);
+      25              :         double symmetricalUncertainty(int a, int b);
+      26              :         double computeMeritCFS();
+      27              :         const torch::Tensor& weights;
+      28              :         int maxFeatures;
+      29              :         std::vector<int> selectedFeatures;
+      30              :         std::vector<double> selectedScores;
+      31              :         std::vector<double> suLabels;
+      32              :         std::map<std::pair<int, int>, double> suFeatures;
+      33              :         bool fitted = false;
+      34              :     };
+      35              : }
+      36              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/IWSS.cc.func-c.html b/html/BayesNet/bayesnet/feature_selection/IWSS.cc.func-c.html new file mode 100644 index 0000000..b8a037b --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/IWSS.cc.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/IWSS.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - IWSS.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:93.3 %3028
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet4IWSS3fitEv10
_ZN8bayesnet4IWSSC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_iiS4_d18
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/IWSS.cc.func.html b/html/BayesNet/bayesnet/feature_selection/IWSS.cc.func.html new file mode 100644 index 0000000..41a6457 --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/IWSS.cc.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/IWSS.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - IWSS.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:93.3 %3028
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet4IWSS3fitEv10
_ZN8bayesnet4IWSSC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_iiS4_d18
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/IWSS.cc.gcov.html b/html/BayesNet/bayesnet/feature_selection/IWSS.cc.gcov.html new file mode 100644 index 0000000..7c3e8ce --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/IWSS.cc.gcov.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/IWSS.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - IWSS.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:93.3 %3028
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include <limits>
+       8              : #include "bayesnet/utils/bayesnetUtils.h"
+       9              : #include "IWSS.h"
+      10              : namespace bayesnet {
+      11           18 :     IWSS::IWSS(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int maxFeatures, const int classNumStates, const torch::Tensor& weights, const double threshold) :
+      12           18 :         FeatureSelect(samples, features, className, maxFeatures, classNumStates, weights), threshold(threshold)
+      13              :     {
+      14           18 :         if (threshold < 0 || threshold > .5) {
+      15            8 :             throw std::invalid_argument("Threshold has to be in [0, 0.5]");
+      16              :         }
+      17           18 :     }
+      18           10 :     void IWSS::fit()
+      19              :     {
+      20           10 :         initialize();
+      21           10 :         computeSuLabels();
+      22           10 :         auto featureOrder = argsort(suLabels); // sort descending order
+      23           10 :         auto featureOrderCopy = featureOrder;
+      24              :         // Add first and second features to result
+      25              :         //     First with its own score
+      26           10 :         auto first_feature = pop_first(featureOrderCopy);
+      27           10 :         selectedFeatures.push_back(first_feature);
+      28           10 :         selectedScores.push_back(suLabels.at(first_feature));
+      29              :         //     Second with the score of the candidates
+      30           10 :         selectedFeatures.push_back(pop_first(featureOrderCopy));
+      31           10 :         auto merit = computeMeritCFS();
+      32           10 :         selectedScores.push_back(merit);
+      33           34 :         for (const auto feature : featureOrderCopy) {
+      34           34 :             selectedFeatures.push_back(feature);
+      35              :             // Compute merit with selectedFeatures
+      36           34 :             auto meritNew = computeMeritCFS();
+      37           34 :             double delta = merit != 0.0 ? std::abs(merit - meritNew) / merit : 0.0;
+      38           34 :             if (meritNew > merit || delta < threshold) {
+      39           24 :                 if (meritNew > merit) {
+      40            0 :                     merit = meritNew;
+      41              :                 }
+      42           24 :                 selectedScores.push_back(meritNew);
+      43              :             } else {
+      44           10 :                 selectedFeatures.pop_back();
+      45           10 :                 break;
+      46              :             }
+      47           24 :             if (selectedFeatures.size() == maxFeatures) {
+      48            0 :                 break;
+      49              :             }
+      50              :         }
+      51           10 :         fitted = true;
+      52           10 :     }
+      53              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/IWSS.h.func-c.html b/html/BayesNet/bayesnet/feature_selection/IWSS.h.func-c.html new file mode 100644 index 0000000..1dbc863 --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/IWSS.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/IWSS.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - IWSS.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet4IWSSD0Ev20
_ZN8bayesnet4IWSSD0Ev10
_ZN8bayesnet4IWSSD2Ev10
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/IWSS.h.func.html b/html/BayesNet/bayesnet/feature_selection/IWSS.h.func.html new file mode 100644 index 0000000..b777f1f --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/IWSS.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/IWSS.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - IWSS.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet4IWSSD0Ev20
_ZN8bayesnet4IWSSD0Ev10
_ZN8bayesnet4IWSSD2Ev10
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/IWSS.h.gcov.html b/html/BayesNet/bayesnet/feature_selection/IWSS.h.gcov.html new file mode 100644 index 0000000..06a9ead --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/IWSS.h.gcov.html @@ -0,0 +1,99 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection/IWSS.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selection - IWSS.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef IWSS_H
+       8              : #define IWSS_H
+       9              : #include <vector>
+      10              : #include <torch/torch.h>
+      11              : #include "FeatureSelect.h"
+      12              : namespace bayesnet {
+      13              :     class IWSS : public FeatureSelect {
+      14              :     public:
+      15              :         // dataset is a n+1xm tensor of integers where dataset[-1] is the y std::vector
+      16              :         IWSS(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int maxFeatures, const int classNumStates, const torch::Tensor& weights, const double threshold);
+      17           20 :         virtual ~IWSS() {};
+      18              :         void fit() override;
+      19              :     private:
+      20              :         double threshold = -1;
+      21              :     };
+      22              : }
+      23              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/index-sort-f.html b/html/BayesNet/bayesnet/feature_selection/index-sort-f.html new file mode 100644 index 0000000..1e5ab20 --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/index-sort-f.html @@ -0,0 +1,189 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selectionCoverageTotalHit
Test:coverage.infoLines:95.4 %152145
Test Date:2024-04-30 13:17:26Functions:95.7 %2322
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
FeatureSelect.h +
100.0%
+
100.0 %1150.0 %21
CFS.cc +
97.8%97.8%
+
97.8 %4544100.0 %22
FCBF.cc +
92.3%92.3%
+
92.3 %2624100.0 %22
FCBF.h +
100.0%
+
100.0 %11100.0 %22
IWSS.cc +
93.3%93.3%
+
93.3 %3028100.0 %22
IWSS.h +
100.0%
+
100.0 %11100.0 %22
CFS.h +
100.0%
+
100.0 %44100.0 %33
FeatureSelect.cc +
95.5%95.5%
+
95.5 %4442100.0 %88
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/index-sort-l.html b/html/BayesNet/bayesnet/feature_selection/index-sort-l.html new file mode 100644 index 0000000..6eedcde --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/index-sort-l.html @@ -0,0 +1,189 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selectionCoverageTotalHit
Test:coverage.infoLines:95.4 %152145
Test Date:2024-04-30 13:17:26Functions:95.7 %2322
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
FCBF.cc +
92.3%92.3%
+
92.3 %2624100.0 %22
IWSS.cc +
93.3%93.3%
+
93.3 %3028100.0 %22
FeatureSelect.cc +
95.5%95.5%
+
95.5 %4442100.0 %88
CFS.cc +
97.8%97.8%
+
97.8 %4544100.0 %22
FCBF.h +
100.0%
+
100.0 %11100.0 %22
FeatureSelect.h +
100.0%
+
100.0 %1150.0 %21
IWSS.h +
100.0%
+
100.0 %11100.0 %22
CFS.h +
100.0%
+
100.0 %44100.0 %33
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/feature_selection/index.html b/html/BayesNet/bayesnet/feature_selection/index.html new file mode 100644 index 0000000..6757830 --- /dev/null +++ b/html/BayesNet/bayesnet/feature_selection/index.html @@ -0,0 +1,189 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/feature_selection + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/feature_selectionCoverageTotalHit
Test:coverage.infoLines:95.4 %152145
Test Date:2024-04-30 13:17:26Functions:95.7 %2322
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
CFS.cc +
97.8%97.8%
+
97.8 %4544100.0 %22
CFS.h +
100.0%
+
100.0 %44100.0 %33
FCBF.cc +
92.3%92.3%
+
92.3 %2624100.0 %22
FCBF.h +
100.0%
+
100.0 %11100.0 %22
FeatureSelect.cc +
95.5%95.5%
+
95.5 %4442100.0 %88
FeatureSelect.h +
100.0%
+
100.0 %1150.0 %21
IWSS.cc +
93.3%93.3%
+
93.3 %3028100.0 %22
IWSS.h +
100.0%
+
100.0 %11100.0 %22
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/index-sort-f.html b/html/BayesNet/bayesnet/index-sort-f.html new file mode 100644 index 0000000..5cb7d26 --- /dev/null +++ b/html/BayesNet/bayesnet/index-sort-f.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnetCoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:50.0 %21
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
BaseClassifier.h +
100.0%
+
100.0 %1150.0 %21
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/index-sort-l.html b/html/BayesNet/bayesnet/index-sort-l.html new file mode 100644 index 0000000..8b3db8c --- /dev/null +++ b/html/BayesNet/bayesnet/index-sort-l.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnetCoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:50.0 %21
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
BaseClassifier.h +
100.0%
+
100.0 %1150.0 %21
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/index.html b/html/BayesNet/bayesnet/index.html new file mode 100644 index 0000000..b013be3 --- /dev/null +++ b/html/BayesNet/bayesnet/index.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnetCoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:50.0 %21
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
BaseClassifier.h +
100.0%
+
100.0 %1150.0 %21
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/network/Network.cc.func-c.html b/html/BayesNet/bayesnet/network/Network.cc.func-c.html new file mode 100644 index 0000000..bb1e726 --- /dev/null +++ b/html/BayesNet/bayesnet/network/Network.cc.func-c.html @@ -0,0 +1,355 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/network/Network.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/network - Network.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:97.6 %297290
Test Date:2024-04-30 13:17:26Functions:100.0 %4040
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet7Network3fitERKN2at6TensorES4_S4_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_RKSt3mapISB_S5_IiSaIiEESt4lessISB_ESaISt4pairISG_SK_EEE2
_ZN8bayesnet7NetworkC2Ef4
_ZNK8bayesnet7Network8dump_cptB5cxx11Ev4
_ZN8bayesnet7Network5scoreERKSt6vectorIS1_IiSaIiEESaIS3_EERKS3_10
_ZNK8bayesnet7Network4showB5cxx11Ev14
_ZN8bayesnet7Network10getSamplesEv24
_ZN8bayesnet7Network7predictERKSt6vectorIS1_IiSaIiEESaIS3_EE24
_ZNK8bayesnet7Network9getStatesEv24
_ZN8bayesnet7Network3fitERKSt6vectorIS1_IiSaIiEESaIS3_EERKS3_RKS1_IdSaIdEERKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISJ_EERKSJ_RKSt3mapISJ_S3_St4lessISJ_ESaISt4pairISO_S3_EEE42
_ZNK8bayesnet7Network5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE44
_ZN8bayesnet7Network16topological_sortB5cxx11Ev110
_ZNK8bayesnet7Network11getNumEdgesEv110
_ZNK8bayesnet7Network11getFeaturesB5cxx11Ev118
_ZN8bayesnet7Network13predict_probaERKSt6vectorIS1_IiSaIiEESaIS3_EE132
_ZNK8bayesnet7Network8getEdgesB5cxx11Ev132
_ZN8bayesnet7Network10initializeEv634
_ZN8bayesnet7Network3fitERKN2at6TensorES4_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_RKSt3mapISB_S5_IiSaIiEESt4lessISB_ESaISt4pairISG_SK_EEE668
_ZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERKN2at6TensorE684
_ZN8bayesnet7Network9setStatesERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEE684
_ZN8bayesnet7Network12checkFitDataEiiiRKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKS7_RKSt3mapIS7_S1_IiSaIiEESt4lessIS7_ESaISt4pairISC_SG_EEERKN2at6TensorE712
_ZN8bayesnet7Network13predict_probaERKN2at6TensorE738
_ZN8bayesnet7Network7predictERKN2at6TensorE850
_ZN8bayesnet7NetworkC2ERKS0_888
_ZNK8bayesnet7Network13getMaxThreadsEv894
_ZN8bayesnet7NetworkC2Ev930
_ZNK8bayesnet7Network17getClassNumStatesEv1070
_ZN8bayesnet7Network14predict_tensorERKN2at6TensorEb1588
_ZN8bayesnet7Network7addNodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE13374
_ZZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERKN2at6TensorEENKUlvE_clEv14194
_ZZN8bayesnet7Network9setStatesERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEEENKUlRSE_E_clESK_14194
_ZN8bayesnet7Network7addEdgeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_24954
_ZN8bayesnet7Network14predict_sampleERKSt6vectorIiSaIiEE26440
_ZN8bayesnet7Network8isCyclicERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERSt13unordered_setIS6_St4hashIS6_ESt8equal_toIS6_ESaIS6_EESG_30532
_ZN8bayesnet7Network14predict_sampleERKN2at6TensorE375448
_ZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEE401880
_ZN8bayesnet7Network13computeFactorERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEE1590148
_ZZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEEENKUlRKdE_clESH_1590148
_ZZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEEENKUlvE_clEv1590148
_ZNK8bayesnet7Network12getClassNameB5cxx11Ev1590160
_ZN8bayesnet7Network8getNodesB5cxx11Ev1590294
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/network/Network.cc.func.html b/html/BayesNet/bayesnet/network/Network.cc.func.html new file mode 100644 index 0000000..d600524 --- /dev/null +++ b/html/BayesNet/bayesnet/network/Network.cc.func.html @@ -0,0 +1,355 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/network/Network.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/network - Network.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:97.6 %297290
Test Date:2024-04-30 13:17:26Functions:100.0 %4040
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet7Network10getSamplesEv24
_ZN8bayesnet7Network10initializeEv634
_ZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERKN2at6TensorE684
_ZN8bayesnet7Network12checkFitDataEiiiRKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKS7_RKSt3mapIS7_S1_IiSaIiEESt4lessIS7_ESaISt4pairISC_SG_EEERKN2at6TensorE712
_ZN8bayesnet7Network13computeFactorERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEE1590148
_ZN8bayesnet7Network13predict_probaERKN2at6TensorE738
_ZN8bayesnet7Network13predict_probaERKSt6vectorIS1_IiSaIiEESaIS3_EE132
_ZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEE401880
_ZN8bayesnet7Network14predict_sampleERKN2at6TensorE375448
_ZN8bayesnet7Network14predict_sampleERKSt6vectorIiSaIiEE26440
_ZN8bayesnet7Network14predict_tensorERKN2at6TensorEb1588
_ZN8bayesnet7Network16topological_sortB5cxx11Ev110
_ZN8bayesnet7Network3fitERKN2at6TensorES4_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_RKSt3mapISB_S5_IiSaIiEESt4lessISB_ESaISt4pairISG_SK_EEE668
_ZN8bayesnet7Network3fitERKN2at6TensorES4_S4_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_RKSt3mapISB_S5_IiSaIiEESt4lessISB_ESaISt4pairISG_SK_EEE2
_ZN8bayesnet7Network3fitERKSt6vectorIS1_IiSaIiEESaIS3_EERKS3_RKS1_IdSaIdEERKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISJ_EERKSJ_RKSt3mapISJ_S3_St4lessISJ_ESaISt4pairISO_S3_EEE42
_ZN8bayesnet7Network5scoreERKSt6vectorIS1_IiSaIiEESaIS3_EERKS3_10
_ZN8bayesnet7Network7addEdgeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_24954
_ZN8bayesnet7Network7addNodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE13374
_ZN8bayesnet7Network7predictERKN2at6TensorE850
_ZN8bayesnet7Network7predictERKSt6vectorIS1_IiSaIiEESaIS3_EE24
_ZN8bayesnet7Network8getNodesB5cxx11Ev1590294
_ZN8bayesnet7Network8isCyclicERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERSt13unordered_setIS6_St4hashIS6_ESt8equal_toIS6_ESaIS6_EESG_30532
_ZN8bayesnet7Network9setStatesERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEE684
_ZN8bayesnet7NetworkC2ERKS0_888
_ZN8bayesnet7NetworkC2Ef4
_ZN8bayesnet7NetworkC2Ev930
_ZNK8bayesnet7Network11getFeaturesB5cxx11Ev118
_ZNK8bayesnet7Network11getNumEdgesEv110
_ZNK8bayesnet7Network12getClassNameB5cxx11Ev1590160
_ZNK8bayesnet7Network13getMaxThreadsEv894
_ZNK8bayesnet7Network17getClassNumStatesEv1070
_ZNK8bayesnet7Network4showB5cxx11Ev14
_ZNK8bayesnet7Network5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE44
_ZNK8bayesnet7Network8dump_cptB5cxx11Ev4
_ZNK8bayesnet7Network8getEdgesB5cxx11Ev132
_ZNK8bayesnet7Network9getStatesEv24
_ZZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERKN2at6TensorEENKUlvE_clEv14194
_ZZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEEENKUlRKdE_clESH_1590148
_ZZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEEENKUlvE_clEv1590148
_ZZN8bayesnet7Network9setStatesERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEEENKUlRSE_E_clESK_14194
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/network/Network.cc.gcov.html b/html/BayesNet/bayesnet/network/Network.cc.gcov.html new file mode 100644 index 0000000..7f521af --- /dev/null +++ b/html/BayesNet/bayesnet/network/Network.cc.gcov.html @@ -0,0 +1,509 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/network/Network.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/network - Network.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:97.6 %297290
Test Date:2024-04-30 13:17:26Functions:100.0 %4040
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include <thread>
+       8              : #include <mutex>
+       9              : #include <sstream>
+      10              : #include "Network.h"
+      11              : #include "bayesnet/utils/bayesnetUtils.h"
+      12              : namespace bayesnet {
+      13          930 :     Network::Network() : fitted{ false }, maxThreads{ 0.95 }, classNumStates{ 0 }, laplaceSmoothing{ 0 }
+      14              :     {
+      15          930 :     }
+      16            4 :     Network::Network(float maxT) : fitted{ false }, maxThreads{ maxT }, classNumStates{ 0 }, laplaceSmoothing{ 0 }
+      17              :     {
+      18              : 
+      19            4 :     }
+      20          888 :     Network::Network(const Network& other) : laplaceSmoothing(other.laplaceSmoothing), features(other.features), className(other.className), classNumStates(other.getClassNumStates()),
+      21         1776 :         maxThreads(other.getMaxThreads()), fitted(other.fitted), samples(other.samples)
+      22              :     {
+      23          888 :         if (samples.defined())
+      24            2 :             samples = samples.clone();
+      25          898 :         for (const auto& node : other.nodes) {
+      26           10 :             nodes[node.first] = std::make_unique<Node>(*node.second);
+      27              :         }
+      28          888 :     }
+      29          634 :     void Network::initialize()
+      30              :     {
+      31          634 :         features.clear();
+      32          634 :         className = "";
+      33          634 :         classNumStates = 0;
+      34          634 :         fitted = false;
+      35          634 :         nodes.clear();
+      36          634 :         samples = torch::Tensor();
+      37          634 :     }
+      38          894 :     float Network::getMaxThreads() const
+      39              :     {
+      40          894 :         return maxThreads;
+      41              :     }
+      42           24 :     torch::Tensor& Network::getSamples()
+      43              :     {
+      44           24 :         return samples;
+      45              :     }
+      46        13374 :     void Network::addNode(const std::string& name)
+      47              :     {
+      48        13374 :         if (name == "") {
+      49            4 :             throw std::invalid_argument("Node name cannot be empty");
+      50              :         }
+      51        13370 :         if (nodes.find(name) != nodes.end()) {
+      52            0 :             return;
+      53              :         }
+      54        13370 :         if (find(features.begin(), features.end(), name) == features.end()) {
+      55        13370 :             features.push_back(name);
+      56              :         }
+      57        13370 :         nodes[name] = std::make_unique<Node>(name);
+      58              :     }
+      59          118 :     std::vector<std::string> Network::getFeatures() const
+      60              :     {
+      61          118 :         return features;
+      62              :     }
+      63         1070 :     int Network::getClassNumStates() const
+      64              :     {
+      65         1070 :         return classNumStates;
+      66              :     }
+      67           24 :     int Network::getStates() const
+      68              :     {
+      69           24 :         int result = 0;
+      70          144 :         for (auto& node : nodes) {
+      71          120 :             result += node.second->getNumStates();
+      72              :         }
+      73           24 :         return result;
+      74              :     }
+      75      1590160 :     std::string Network::getClassName() const
+      76              :     {
+      77      1590160 :         return className;
+      78              :     }
+      79        30532 :     bool Network::isCyclic(const std::string& nodeId, std::unordered_set<std::string>& visited, std::unordered_set<std::string>& recStack)
+      80              :     {
+      81        30532 :         if (visited.find(nodeId) == visited.end()) // if node hasn't been visited yet
+      82              :         {
+      83        30532 :             visited.insert(nodeId);
+      84        30532 :             recStack.insert(nodeId);
+      85        36110 :             for (Node* child : nodes[nodeId]->getChildren()) {
+      86         5590 :                 if (visited.find(child->getName()) == visited.end() && isCyclic(child->getName(), visited, recStack))
+      87           12 :                     return true;
+      88         5582 :                 if (recStack.find(child->getName()) != recStack.end())
+      89            4 :                     return true;
+      90              :             }
+      91              :         }
+      92        30520 :         recStack.erase(nodeId); // remove node from recursion stack before function ends
+      93        30520 :         return false;
+      94              :     }
+      95        24954 :     void Network::addEdge(const std::string& parent, const std::string& child)
+      96              :     {
+      97        24954 :         if (nodes.find(parent) == nodes.end()) {
+      98            4 :             throw std::invalid_argument("Parent node " + parent + " does not exist");
+      99              :         }
+     100        24950 :         if (nodes.find(child) == nodes.end()) {
+     101            4 :             throw std::invalid_argument("Child node " + child + " does not exist");
+     102              :         }
+     103              :         // Temporarily add edge to check for cycles
+     104        24946 :         nodes[parent]->addChild(nodes[child].get());
+     105        24946 :         nodes[child]->addParent(nodes[parent].get());
+     106        24946 :         std::unordered_set<std::string> visited;
+     107        24946 :         std::unordered_set<std::string> recStack;
+     108        24946 :         if (isCyclic(nodes[child]->getName(), visited, recStack)) // if adding this edge forms a cycle
+     109              :         {
+     110              :             // remove problematic edge
+     111            4 :             nodes[parent]->removeChild(nodes[child].get());
+     112            4 :             nodes[child]->removeParent(nodes[parent].get());
+     113            4 :             throw std::invalid_argument("Adding this edge forms a cycle in the graph.");
+     114              :         }
+     115        24950 :     }
+     116      1590294 :     std::map<std::string, std::unique_ptr<Node>>& Network::getNodes()
+     117              :     {
+     118      1590294 :         return nodes;
+     119              :     }
+     120          712 :     void Network::checkFitData(int n_samples, int n_features, int n_samples_y, const std::vector<std::string>& featureNames, const std::string& className, const std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights)
+     121              :     {
+     122          712 :         if (weights.size(0) != n_samples) {
+     123            4 :             throw std::invalid_argument("Weights (" + std::to_string(weights.size(0)) + ") must have the same number of elements as samples (" + std::to_string(n_samples) + ") in Network::fit");
+     124              :         }
+     125          708 :         if (n_samples != n_samples_y) {
+     126            4 :             throw std::invalid_argument("X and y must have the same number of samples in Network::fit (" + std::to_string(n_samples) + " != " + std::to_string(n_samples_y) + ")");
+     127              :         }
+     128          704 :         if (n_features != featureNames.size()) {
+     129            4 :             throw std::invalid_argument("X and features must have the same number of features in Network::fit (" + std::to_string(n_features) + " != " + std::to_string(featureNames.size()) + ")");
+     130              :         }
+     131          700 :         if (features.size() == 0) {
+     132            4 :             throw std::invalid_argument("The network has not been initialized. You must call addNode() before calling fit()");
+     133              :         }
+     134          696 :         if (n_features != features.size() - 1) {
+     135            4 :             throw std::invalid_argument("X and local features must have the same number of features in Network::fit (" + std::to_string(n_features) + " != " + std::to_string(features.size() - 1) + ")");
+     136              :         }
+     137          692 :         if (find(features.begin(), features.end(), className) == features.end()) {
+     138            4 :             throw std::invalid_argument("Class Name not found in Network::features");
+     139              :         }
+     140        14210 :         for (auto& feature : featureNames) {
+     141        13526 :             if (find(features.begin(), features.end(), feature) == features.end()) {
+     142            4 :                 throw std::invalid_argument("Feature " + feature + " not found in Network::features");
+     143              :             }
+     144        13522 :             if (states.find(feature) == states.end()) {
+     145            0 :                 throw std::invalid_argument("Feature " + feature + " not found in states");
+     146              :             }
+     147              :         }
+     148          684 :     }
+     149          684 :     void Network::setStates(const std::map<std::string, std::vector<int>>& states)
+     150              :     {
+     151              :         // Set states to every Node in the network
+     152          684 :         for_each(features.begin(), features.end(), [this, &states](const std::string& feature) {
+     153        14194 :             nodes.at(feature)->setNumStates(states.at(feature).size());
+     154        14194 :             });
+     155          684 :         classNumStates = nodes.at(className)->getNumStates();
+     156          684 :     }
+     157              :     // X comes in nxm, where n is the number of features and m the number of samples
+     158            2 :     void Network::fit(const torch::Tensor& X, const torch::Tensor& y, const torch::Tensor& weights, const std::vector<std::string>& featureNames, const std::string& className, const std::map<std::string, std::vector<int>>& states)
+     159              :     {
+     160            2 :         checkFitData(X.size(1), X.size(0), y.size(0), featureNames, className, states, weights);
+     161            2 :         this->className = className;
+     162            2 :         torch::Tensor ytmp = torch::transpose(y.view({ y.size(0), 1 }), 0, 1);
+     163            6 :         samples = torch::cat({ X , ytmp }, 0);
+     164           10 :         for (int i = 0; i < featureNames.size(); ++i) {
+     165           24 :             auto row_feature = X.index({ i, "..." });
+     166            8 :         }
+     167            2 :         completeFit(states, weights);
+     168           12 :     }
+     169          668 :     void Network::fit(const torch::Tensor& samples, const torch::Tensor& weights, const std::vector<std::string>& featureNames, const std::string& className, const std::map<std::string, std::vector<int>>& states)
+     170              :     {
+     171          668 :         checkFitData(samples.size(1), samples.size(0) - 1, samples.size(1), featureNames, className, states, weights);
+     172          668 :         this->className = className;
+     173          668 :         this->samples = samples;
+     174          668 :         completeFit(states, weights);
+     175          668 :     }
+     176              :     // input_data comes in nxm, where n is the number of features and m the number of samples
+     177           42 :     void Network::fit(const std::vector<std::vector<int>>& input_data, const std::vector<int>& labels, const std::vector<double>& weights_, const std::vector<std::string>& featureNames, const std::string& className, const std::map<std::string, std::vector<int>>& states)
+     178              :     {
+     179           42 :         const torch::Tensor weights = torch::tensor(weights_, torch::kFloat64);
+     180           42 :         checkFitData(input_data[0].size(), input_data.size(), labels.size(), featureNames, className, states, weights);
+     181           14 :         this->className = className;
+     182              :         // Build tensor of samples (nxm) (n+1 because of the class)
+     183           14 :         samples = torch::zeros({ static_cast<int>(input_data.size() + 1), static_cast<int>(input_data[0].size()) }, torch::kInt32);
+     184           70 :         for (int i = 0; i < featureNames.size(); ++i) {
+     185          224 :             samples.index_put_({ i, "..." }, torch::tensor(input_data[i], torch::kInt32));
+     186              :         }
+     187           56 :         samples.index_put_({ -1, "..." }, torch::tensor(labels, torch::kInt32));
+     188           14 :         completeFit(states, weights);
+     189          112 :     }
+     190          684 :     void Network::completeFit(const std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights)
+     191              :     {
+     192          684 :         setStates(states);
+     193          684 :         laplaceSmoothing = 1.0 / samples.size(1); // To use in CPT computation
+     194          684 :         std::vector<std::thread> threads;
+     195        14878 :         for (auto& node : nodes) {
+     196        14194 :             threads.emplace_back([this, &node, &weights]() {
+     197        14194 :                 node.second->computeCPT(samples, features, laplaceSmoothing, weights);
+     198        14194 :                 });
+     199              :         }
+     200        14878 :         for (auto& thread : threads) {
+     201        14194 :             thread.join();
+     202              :         }
+     203          684 :         fitted = true;
+     204          684 :     }
+     205         1588 :     torch::Tensor Network::predict_tensor(const torch::Tensor& samples, const bool proba)
+     206              :     {
+     207         1588 :         if (!fitted) {
+     208            4 :             throw std::logic_error("You must call fit() before calling predict()");
+     209              :         }
+     210         1584 :         torch::Tensor result;
+     211         1584 :         result = torch::zeros({ samples.size(1), classNumStates }, torch::kFloat64);
+     212       377028 :         for (int i = 0; i < samples.size(1); ++i) {
+     213      1126344 :             const torch::Tensor sample = samples.index({ "...", i });
+     214       375448 :             auto psample = predict_sample(sample);
+     215       375444 :             auto temp = torch::tensor(psample, torch::kFloat64);
+     216              :             //            result.index_put_({ i, "..." }, torch::tensor(predict_sample(sample), torch::kFloat64));
+     217      1126332 :             result.index_put_({ i, "..." }, temp);
+     218       375448 :         }
+     219         1580 :         if (proba)
+     220          738 :             return result;
+     221         1684 :         return result.argmax(1);
+     222       752476 :     }
+     223              :     // Return mxn tensor of probabilities
+     224          738 :     torch::Tensor Network::predict_proba(const torch::Tensor& samples)
+     225              :     {
+     226          738 :         return predict_tensor(samples, true);
+     227              :     }
+     228              : 
+     229              :     // Return mxn tensor of probabilities
+     230          850 :     torch::Tensor Network::predict(const torch::Tensor& samples)
+     231              :     {
+     232          850 :         return predict_tensor(samples, false);
+     233              :     }
+     234              : 
+     235              :     // Return mx1 std::vector of predictions
+     236              :     // tsamples is nxm std::vector of samples
+     237           24 :     std::vector<int> Network::predict(const std::vector<std::vector<int>>& tsamples)
+     238              :     {
+     239           24 :         if (!fitted) {
+     240            8 :             throw std::logic_error("You must call fit() before calling predict()");
+     241              :         }
+     242           16 :         std::vector<int> predictions;
+     243           16 :         std::vector<int> sample;
+     244         1782 :         for (int row = 0; row < tsamples[0].size(); ++row) {
+     245         1770 :             sample.clear();
+     246        13126 :             for (int col = 0; col < tsamples.size(); ++col) {
+     247        11356 :                 sample.push_back(tsamples[col][row]);
+     248              :             }
+     249         1770 :             std::vector<double> classProbabilities = predict_sample(sample);
+     250              :             // Find the class with the maximum posterior probability
+     251         1766 :             auto maxElem = max_element(classProbabilities.begin(), classProbabilities.end());
+     252         1766 :             int predictedClass = distance(classProbabilities.begin(), maxElem);
+     253         1766 :             predictions.push_back(predictedClass);
+     254         1766 :         }
+     255           24 :         return predictions;
+     256           20 :     }
+     257              :     // Return mxn std::vector of probabilities
+     258              :     // tsamples is nxm std::vector of samples
+     259          132 :     std::vector<std::vector<double>> Network::predict_proba(const std::vector<std::vector<int>>& tsamples)
+     260              :     {
+     261          132 :         if (!fitted) {
+     262            4 :             throw std::logic_error("You must call fit() before calling predict_proba()");
+     263              :         }
+     264          128 :         std::vector<std::vector<double>> predictions;
+     265          128 :         std::vector<int> sample;
+     266        24798 :         for (int row = 0; row < tsamples[0].size(); ++row) {
+     267        24670 :             sample.clear();
+     268       219650 :             for (int col = 0; col < tsamples.size(); ++col) {
+     269       194980 :                 sample.push_back(tsamples[col][row]);
+     270              :             }
+     271        24670 :             predictions.push_back(predict_sample(sample));
+     272              :         }
+     273          256 :         return predictions;
+     274          128 :     }
+     275           10 :     double Network::score(const std::vector<std::vector<int>>& tsamples, const std::vector<int>& labels)
+     276              :     {
+     277           10 :         std::vector<int> y_pred = predict(tsamples);
+     278            6 :         int correct = 0;
+     279         1162 :         for (int i = 0; i < y_pred.size(); ++i) {
+     280         1156 :             if (y_pred[i] == labels[i]) {
+     281          972 :                 correct++;
+     282              :             }
+     283              :         }
+     284           12 :         return (double)correct / y_pred.size();
+     285            6 :     }
+     286              :     // Return 1xn std::vector of probabilities
+     287        26440 :     std::vector<double> Network::predict_sample(const std::vector<int>& sample)
+     288              :     {
+     289              :         // Ensure the sample size is equal to the number of features
+     290        26440 :         if (sample.size() != features.size() - 1) {
+     291            8 :             throw std::invalid_argument("Sample size (" + std::to_string(sample.size()) +
+     292           12 :                 ") does not match the number of features (" + std::to_string(features.size() - 1) + ")");
+     293              :         }
+     294        26436 :         std::map<std::string, int> evidence;
+     295       232760 :         for (int i = 0; i < sample.size(); ++i) {
+     296       206324 :             evidence[features[i]] = sample[i];
+     297              :         }
+     298        52872 :         return exactInference(evidence);
+     299        26436 :     }
+     300              :     // Return 1xn std::vector of probabilities
+     301       375448 :     std::vector<double> Network::predict_sample(const torch::Tensor& sample)
+     302              :     {
+     303              :         // Ensure the sample size is equal to the number of features
+     304       375448 :         if (sample.size(0) != features.size() - 1) {
+     305            8 :             throw std::invalid_argument("Sample size (" + std::to_string(sample.size(0)) +
+     306           12 :                 ") does not match the number of features (" + std::to_string(features.size() - 1) + ")");
+     307              :         }
+     308       375444 :         std::map<std::string, int> evidence;
+     309      8888488 :         for (int i = 0; i < sample.size(0); ++i) {
+     310      8513044 :             evidence[features[i]] = sample[i].item<int>();
+     311              :         }
+     312       750888 :         return exactInference(evidence);
+     313       375444 :     }
+     314      1590148 :     double Network::computeFactor(std::map<std::string, int>& completeEvidence)
+     315              :     {
+     316      1590148 :         double result = 1.0;
+     317     33392584 :         for (auto& node : getNodes()) {
+     318     31802436 :             result *= node.second->getFactorValue(completeEvidence);
+     319              :         }
+     320      1590148 :         return result;
+     321              :     }
+     322       401880 :     std::vector<double> Network::exactInference(std::map<std::string, int>& evidence)
+     323              :     {
+     324       401880 :         std::vector<double> result(classNumStates, 0.0);
+     325       401880 :         std::vector<std::thread> threads;
+     326       401880 :         std::mutex mtx;
+     327      1992028 :         for (int i = 0; i < classNumStates; ++i) {
+     328      1590148 :             threads.emplace_back([this, &result, &evidence, i, &mtx]() {
+     329      1590148 :                 auto completeEvidence = std::map<std::string, int>(evidence);
+     330      1590148 :                 completeEvidence[getClassName()] = i;
+     331      1590148 :                 double factor = computeFactor(completeEvidence);
+     332      1590148 :                 std::lock_guard<std::mutex> lock(mtx);
+     333      1590148 :                 result[i] = factor;
+     334      1590148 :                 });
+     335              :         }
+     336      1992028 :         for (auto& thread : threads) {
+     337      1590148 :             thread.join();
+     338              :         }
+     339              :         // Normalize result
+     340       401880 :         double sum = accumulate(result.begin(), result.end(), 0.0);
+     341      1992028 :         transform(result.begin(), result.end(), result.begin(), [sum](const double& value) { return value / sum; });
+     342       803760 :         return result;
+     343       401880 :     }
+     344           14 :     std::vector<std::string> Network::show() const
+     345              :     {
+     346           14 :         std::vector<std::string> result;
+     347              :         // Draw the network
+     348           80 :         for (auto& node : nodes) {
+     349           66 :             std::string line = node.first + " -> ";
+     350          154 :             for (auto child : node.second->getChildren()) {
+     351           88 :                 line += child->getName() + ", ";
+     352              :             }
+     353           66 :             result.push_back(line);
+     354           66 :         }
+     355           14 :         return result;
+     356            0 :     }
+     357           44 :     std::vector<std::string> Network::graph(const std::string& title) const
+     358              :     {
+     359           44 :         auto output = std::vector<std::string>();
+     360           44 :         auto prefix = "digraph BayesNet {\nlabel=<BayesNet ";
+     361           44 :         auto suffix = ">\nfontsize=30\nfontcolor=blue\nlabelloc=t\nlayout=circo\n";
+     362           44 :         std::string header = prefix + title + suffix;
+     363           44 :         output.push_back(header);
+     364          350 :         for (auto& node : nodes) {
+     365          306 :             auto result = node.second->graph(className);
+     366          306 :             output.insert(output.end(), result.begin(), result.end());
+     367          306 :         }
+     368           44 :         output.push_back("}\n");
+     369           88 :         return output;
+     370           44 :     }
+     371          132 :     std::vector<std::pair<std::string, std::string>> Network::getEdges() const
+     372              :     {
+     373          132 :         auto edges = std::vector<std::pair<std::string, std::string>>();
+     374         2906 :         for (const auto& node : nodes) {
+     375         2774 :             auto head = node.first;
+     376         7924 :             for (const auto& child : node.second->getChildren()) {
+     377         5150 :                 auto tail = child->getName();
+     378         5150 :                 edges.push_back({ head, tail });
+     379         5150 :             }
+     380         2774 :         }
+     381          132 :         return edges;
+     382            0 :     }
+     383          110 :     int Network::getNumEdges() const
+     384              :     {
+     385          110 :         return getEdges().size();
+     386              :     }
+     387          110 :     std::vector<std::string> Network::topological_sort()
+     388              :     {
+     389              :         /* Check if al the fathers of every node are before the node */
+     390          110 :         auto result = features;
+     391          110 :         result.erase(remove(result.begin(), result.end(), className), result.end());
+     392          110 :         bool ending{ false };
+     393          314 :         while (!ending) {
+     394          204 :             ending = true;
+     395         1902 :             for (auto feature : features) {
+     396         1698 :                 auto fathers = nodes[feature]->getParents();
+     397         4500 :                 for (const auto& father : fathers) {
+     398         2802 :                     auto fatherName = father->getName();
+     399         2802 :                     if (fatherName == className) {
+     400         1490 :                         continue;
+     401              :                     }
+     402              :                     // Check if father is placed before the actual feature
+     403         1312 :                     auto it = find(result.begin(), result.end(), fatherName);
+     404         1312 :                     if (it != result.end()) {
+     405         1312 :                         auto it2 = find(result.begin(), result.end(), feature);
+     406         1312 :                         if (it2 != result.end()) {
+     407         1312 :                             if (distance(it, it2) < 0) {
+     408              :                                 // if it is not, insert it before the feature
+     409          122 :                                 result.erase(remove(result.begin(), result.end(), fatherName), result.end());
+     410          122 :                                 result.insert(it2, fatherName);
+     411          122 :                                 ending = false;
+     412              :                             }
+     413              :                         } else {
+     414            0 :                             throw std::logic_error("Error in topological sort because of node " + feature + " is not in result");
+     415              :                         }
+     416              :                     } else {
+     417            0 :                         throw std::logic_error("Error in topological sort because of node father " + fatherName + " is not in result");
+     418              :                     }
+     419         2802 :                 }
+     420         1698 :             }
+     421              :         }
+     422          110 :         return result;
+     423            0 :     }
+     424            4 :     std::string Network::dump_cpt() const
+     425              :     {
+     426            4 :         std::stringstream oss;
+     427           24 :         for (auto& node : nodes) {
+     428           20 :             oss << "* " << node.first << ": (" << node.second->getNumStates() << ") : " << node.second->getCPT().sizes() << std::endl;
+     429           20 :             oss << node.second->getCPT() << std::endl;
+     430              :         }
+     431            8 :         return oss.str();
+     432            4 :     }
+     433              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/network/Network.h.func-c.html b/html/BayesNet/bayesnet/network/Network.h.func-c.html new file mode 100644 index 0000000..2e0e85a --- /dev/null +++ b/html/BayesNet/bayesnet/network/Network.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/network/Network.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/network - Network.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet7NetworkD2Ev1542
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/network/Network.h.func.html b/html/BayesNet/bayesnet/network/Network.h.func.html new file mode 100644 index 0000000..40d953c --- /dev/null +++ b/html/BayesNet/bayesnet/network/Network.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/network/Network.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/network - Network.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet7NetworkD2Ev1542
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/network/Network.h.gcov.html b/html/BayesNet/bayesnet/network/Network.h.gcov.html new file mode 100644 index 0000000..0ad7ad5 --- /dev/null +++ b/html/BayesNet/bayesnet/network/Network.h.gcov.html @@ -0,0 +1,145 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/network/Network.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/network - Network.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef NETWORK_H
+       8              : #define NETWORK_H
+       9              : #include <map>
+      10              : #include <vector>
+      11              : #include "bayesnet/config.h"
+      12              : #include "Node.h"
+      13              : 
+      14              : namespace bayesnet {
+      15              :     class Network {
+      16              :     public:
+      17              :         Network();
+      18              :         explicit Network(float);
+      19              :         explicit Network(const Network&);
+      20         1542 :         ~Network() = default;
+      21              :         torch::Tensor& getSamples();
+      22              :         float getMaxThreads() const;
+      23              :         void addNode(const std::string&);
+      24              :         void addEdge(const std::string&, const std::string&);
+      25              :         std::map<std::string, std::unique_ptr<Node>>& getNodes();
+      26              :         std::vector<std::string> getFeatures() const;
+      27              :         int getStates() const;
+      28              :         std::vector<std::pair<std::string, std::string>> getEdges() const;
+      29              :         int getNumEdges() const;
+      30              :         int getClassNumStates() const;
+      31              :         std::string getClassName() const;
+      32              :         /*
+      33              :         Notice: Nodes have to be inserted in the same order as they are in the dataset, i.e., first node is first column and so on.
+      34              :         */
+      35              :         void fit(const std::vector<std::vector<int>>& input_data, const std::vector<int>& labels, const std::vector<double>& weights, const std::vector<std::string>& featureNames, const std::string& className, const std::map<std::string, std::vector<int>>& states);
+      36              :         void fit(const torch::Tensor& X, const torch::Tensor& y, const torch::Tensor& weights, const std::vector<std::string>& featureNames, const std::string& className, const std::map<std::string, std::vector<int>>& states);
+      37              :         void fit(const torch::Tensor& samples, const torch::Tensor& weights, const std::vector<std::string>& featureNames, const std::string& className, const std::map<std::string, std::vector<int>>& states);
+      38              :         std::vector<int> predict(const std::vector<std::vector<int>>&); // Return mx1 std::vector of predictions
+      39              :         torch::Tensor predict(const torch::Tensor&); // Return mx1 tensor of predictions
+      40              :         torch::Tensor predict_tensor(const torch::Tensor& samples, const bool proba);
+      41              :         std::vector<std::vector<double>> predict_proba(const std::vector<std::vector<int>>&); // Return mxn std::vector of probabilities
+      42              :         torch::Tensor predict_proba(const torch::Tensor&); // Return mxn tensor of probabilities
+      43              :         double score(const std::vector<std::vector<int>>&, const std::vector<int>&);
+      44              :         std::vector<std::string> topological_sort();
+      45              :         std::vector<std::string> show() const;
+      46              :         std::vector<std::string> graph(const std::string& title) const; // Returns a std::vector of std::strings representing the graph in graphviz format
+      47              :         void initialize();
+      48              :         std::string dump_cpt() const;
+      49              :         inline std::string version() { return  { project_version.begin(), project_version.end() }; }
+      50              :     private:
+      51              :         std::map<std::string, std::unique_ptr<Node>> nodes;
+      52              :         bool fitted;
+      53              :         float maxThreads = 0.95;
+      54              :         int classNumStates;
+      55              :         std::vector<std::string> features; // Including classname
+      56              :         std::string className;
+      57              :         double laplaceSmoothing;
+      58              :         torch::Tensor samples; // n+1xm tensor used to fit the model
+      59              :         bool isCyclic(const std::string&, std::unordered_set<std::string>&, std::unordered_set<std::string>&);
+      60              :         std::vector<double> predict_sample(const std::vector<int>&);
+      61              :         std::vector<double> predict_sample(const torch::Tensor&);
+      62              :         std::vector<double> exactInference(std::map<std::string, int>&);
+      63              :         double computeFactor(std::map<std::string, int>&);
+      64              :         void completeFit(const std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights);
+      65              :         void checkFitData(int n_features, int n_samples, int n_samples_y, const std::vector<std::string>& featureNames, const std::string& className, const std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights);
+      66              :         void setStates(const std::map<std::string, std::vector<int>>&);
+      67              :     };
+      68              : }
+      69              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/network/Node.cc.func-c.html b/html/BayesNet/bayesnet/network/Node.cc.func-c.html new file mode 100644 index 0000000..b9dde1b --- /dev/null +++ b/html/BayesNet/bayesnet/network/Node.cc.func-c.html @@ -0,0 +1,215 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/network/Node.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/network - Node.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:95.5 %8884
Test Date:2024-04-30 13:17:26Functions:100.0 %2020
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet4Node5clearEv2
_ZN8bayesnet4Node11removeChildEPS0_6
_ZN8bayesnet4Node12removeParentEPS0_6
_ZN8bayesnet4Node12combinationsERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EE10
_ZN8bayesnet4Node7minFillEv10
_ZN8bayesnet4Node6getCPTEv210
_ZN8bayesnet4Node5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE306
_ZZN8bayesnet4Node5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEENKUlRKT_E_clIPS0_EEDaSB_482
_ZN8bayesnet4Node10getParentsEv2536
_ZN8bayesnet4NodeC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE13392
_ZN8bayesnet4Node10computeCPTERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EEdS4_14194
_ZN8bayesnet4Node12setNumStatesEi14194
_ZN8bayesnet4Node9addParentEPS0_24964
_ZN8bayesnet4Node8addChildEPS0_24968
_ZZN8bayesnet4Node10computeCPTERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EEdS4_ENKUlRKT_E_clIPS0_EEDaSI_26360
_ZNK8bayesnet4Node12getNumStatesEv27184
_ZN8bayesnet4Node11getChildrenEv33428
_ZN8bayesnet4Node14getFactorValueERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEE31802436
_ZZN8bayesnet4Node14getFactorValueERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEEENKUlRKT_E_clIPS0_EEDaSI_58826532
_ZNK8bayesnet4Node7getNameB5cxx11Ev68402672
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/network/Node.cc.func.html b/html/BayesNet/bayesnet/network/Node.cc.func.html new file mode 100644 index 0000000..2d6fd6d --- /dev/null +++ b/html/BayesNet/bayesnet/network/Node.cc.func.html @@ -0,0 +1,215 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/network/Node.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/network - Node.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:95.5 %8884
Test Date:2024-04-30 13:17:26Functions:100.0 %2020
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet4Node10computeCPTERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EEdS4_14194
_ZN8bayesnet4Node10getParentsEv2536
_ZN8bayesnet4Node11getChildrenEv33428
_ZN8bayesnet4Node11removeChildEPS0_6
_ZN8bayesnet4Node12combinationsERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EE10
_ZN8bayesnet4Node12removeParentEPS0_6
_ZN8bayesnet4Node12setNumStatesEi14194
_ZN8bayesnet4Node14getFactorValueERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEE31802436
_ZN8bayesnet4Node5clearEv2
_ZN8bayesnet4Node5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE306
_ZN8bayesnet4Node6getCPTEv210
_ZN8bayesnet4Node7minFillEv10
_ZN8bayesnet4Node8addChildEPS0_24968
_ZN8bayesnet4Node9addParentEPS0_24964
_ZN8bayesnet4NodeC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE13392
_ZNK8bayesnet4Node12getNumStatesEv27184
_ZNK8bayesnet4Node7getNameB5cxx11Ev68402672
_ZZN8bayesnet4Node10computeCPTERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EEdS4_ENKUlRKT_E_clIPS0_EEDaSI_26360
_ZZN8bayesnet4Node14getFactorValueERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEEENKUlRKT_E_clIPS0_EEDaSI_58826532
_ZZN8bayesnet4Node5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEENKUlRKT_E_clIPS0_EEDaSB_482
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/network/Node.cc.gcov.html b/html/BayesNet/bayesnet/network/Node.cc.gcov.html new file mode 100644 index 0000000..f72cb92 --- /dev/null +++ b/html/BayesNet/bayesnet/network/Node.cc.gcov.html @@ -0,0 +1,217 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/network/Node.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/network - Node.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:95.5 %8884
Test Date:2024-04-30 13:17:26Functions:100.0 %2020
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include "Node.h"
+       8              : 
+       9              : namespace bayesnet {
+      10              : 
+      11        13392 :     Node::Node(const std::string& name)
+      12        13392 :         : name(name), numStates(0), cpTable(torch::Tensor()), parents(std::vector<Node*>()), children(std::vector<Node*>())
+      13              :     {
+      14        13392 :     }
+      15            2 :     void Node::clear()
+      16              :     {
+      17            2 :         parents.clear();
+      18            2 :         children.clear();
+      19            2 :         cpTable = torch::Tensor();
+      20            2 :         dimensions.clear();
+      21            2 :         numStates = 0;
+      22            2 :     }
+      23     68402672 :     std::string Node::getName() const
+      24              :     {
+      25     68402672 :         return name;
+      26              :     }
+      27        24964 :     void Node::addParent(Node* parent)
+      28              :     {
+      29        24964 :         parents.push_back(parent);
+      30        24964 :     }
+      31            6 :     void Node::removeParent(Node* parent)
+      32              :     {
+      33            6 :         parents.erase(std::remove(parents.begin(), parents.end(), parent), parents.end());
+      34            6 :     }
+      35            6 :     void Node::removeChild(Node* child)
+      36              :     {
+      37            6 :         children.erase(std::remove(children.begin(), children.end(), child), children.end());
+      38            6 :     }
+      39        24968 :     void Node::addChild(Node* child)
+      40              :     {
+      41        24968 :         children.push_back(child);
+      42        24968 :     }
+      43         2536 :     std::vector<Node*>& Node::getParents()
+      44              :     {
+      45         2536 :         return parents;
+      46              :     }
+      47        33428 :     std::vector<Node*>& Node::getChildren()
+      48              :     {
+      49        33428 :         return children;
+      50              :     }
+      51        27184 :     int Node::getNumStates() const
+      52              :     {
+      53        27184 :         return numStates;
+      54              :     }
+      55        14194 :     void Node::setNumStates(int numStates)
+      56              :     {
+      57        14194 :         this->numStates = numStates;
+      58        14194 :     }
+      59          210 :     torch::Tensor& Node::getCPT()
+      60              :     {
+      61          210 :         return cpTable;
+      62              :     }
+      63              :     /*
+      64              :      The MinFill criterion is a heuristic for variable elimination.
+      65              :      The variable that minimizes the number of edges that need to be added to the graph to make it triangulated.
+      66              :      This is done by counting the number of edges that need to be added to the graph if the variable is eliminated.
+      67              :      The variable with the minimum number of edges is chosen.
+      68              :      Here this is done computing the length of the combinations of the node neighbors taken 2 by 2.
+      69              :     */
+      70           10 :     unsigned Node::minFill()
+      71              :     {
+      72           10 :         std::unordered_set<std::string> neighbors;
+      73           26 :         for (auto child : children) {
+      74           16 :             neighbors.emplace(child->getName());
+      75              :         }
+      76           24 :         for (auto parent : parents) {
+      77           14 :             neighbors.emplace(parent->getName());
+      78              :         }
+      79           10 :         auto source = std::vector<std::string>(neighbors.begin(), neighbors.end());
+      80           20 :         return combinations(source).size();
+      81           10 :     }
+      82           10 :     std::vector<std::pair<std::string, std::string>> Node::combinations(const std::vector<std::string>& source)
+      83              :     {
+      84           10 :         std::vector<std::pair<std::string, std::string>> result;
+      85           40 :         for (int i = 0; i < source.size(); ++i) {
+      86           30 :             std::string temp = source[i];
+      87           62 :             for (int j = i + 1; j < source.size(); ++j) {
+      88           32 :                 result.push_back({ temp, source[j] });
+      89              :             }
+      90           30 :         }
+      91           10 :         return result;
+      92            0 :     }
+      93        14194 :     void Node::computeCPT(const torch::Tensor& dataset, const std::vector<std::string>& features, const double laplaceSmoothing, const torch::Tensor& weights)
+      94              :     {
+      95        14194 :         dimensions.clear();
+      96              :         // Get dimensions of the CPT
+      97        14194 :         dimensions.push_back(numStates);
+      98        40554 :         transform(parents.begin(), parents.end(), back_inserter(dimensions), [](const auto& parent) { return parent->getNumStates(); });
+      99              : 
+     100              :         // Create a tensor of zeros with the dimensions of the CPT
+     101        14194 :         cpTable = torch::zeros(dimensions, torch::kFloat) + laplaceSmoothing;
+     102              :         // Fill table with counts
+     103        14194 :         auto pos = find(features.begin(), features.end(), name);
+     104        14194 :         if (pos == features.end()) {
+     105            0 :             throw std::logic_error("Feature " + name + " not found in dataset");
+     106              :         }
+     107        14194 :         int name_index = pos - features.begin();
+     108      5137182 :         for (int n_sample = 0; n_sample < dataset.size(1); ++n_sample) {
+     109      5122988 :             c10::List<c10::optional<at::Tensor>> coordinates;
+     110     15368964 :             coordinates.push_back(dataset.index({ name_index, n_sample }));
+     111     14647408 :             for (auto parent : parents) {
+     112      9524420 :                 pos = find(features.begin(), features.end(), parent->getName());
+     113      9524420 :                 if (pos == features.end()) {
+     114            0 :                     throw std::logic_error("Feature parent " + parent->getName() + " not found in dataset");
+     115              :                 }
+     116      9524420 :                 int parent_index = pos - features.begin();
+     117     28573260 :                 coordinates.push_back(dataset.index({ parent_index, n_sample }));
+     118              :             }
+     119              :             // Increment the count of the corresponding coordinate
+     120     10245976 :             cpTable.index_put_({ coordinates }, cpTable.index({ coordinates }) + weights.index({ n_sample }).item<double>());
+     121      5122988 :         }
+     122              :         // Normalize the counts
+     123        14194 :         cpTable = cpTable / cpTable.sum(0);
+     124     19784590 :     }
+     125     31802436 :     float Node::getFactorValue(std::map<std::string, int>& evidence)
+     126              :     {
+     127     31802436 :         c10::List<c10::optional<at::Tensor>> coordinates;
+     128              :         // following predetermined order of indices in the cpTable (see Node.h)
+     129     31802436 :         coordinates.push_back(at::tensor(evidence[name]));
+     130     90628968 :         transform(parents.begin(), parents.end(), std::back_inserter(coordinates), [&evidence](const auto& parent) { return at::tensor(evidence[parent->getName()]); });
+     131     63604872 :         return cpTable.index({ coordinates }).item<float>();
+     132     31802436 :     }
+     133          306 :     std::vector<std::string> Node::graph(const std::string& className)
+     134              :     {
+     135          306 :         auto output = std::vector<std::string>();
+     136          306 :         auto suffix = name == className ? ", fontcolor=red, fillcolor=lightblue, style=filled " : "";
+     137          306 :         output.push_back(name + " [shape=circle" + suffix + "] \n");
+     138          788 :         transform(children.begin(), children.end(), back_inserter(output), [this](const auto& child) { return name + " -> " + child->getName(); });
+     139          306 :         return output;
+     140            0 :     }
+     141              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/network/index-sort-f.html b/html/BayesNet/bayesnet/network/index-sort-f.html new file mode 100644 index 0000000..b7603e1 --- /dev/null +++ b/html/BayesNet/bayesnet/network/index-sort-f.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/network + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/networkCoverageTotalHit
Test:coverage.infoLines:97.2 %386375
Test Date:2024-04-30 13:17:26Functions:100.0 %6161
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
Network.h +
100.0%
+
100.0 %11100.0 %11
Node.cc +
95.5%95.5%
+
95.5 %8884100.0 %2020
Network.cc +
97.6%97.6%
+
97.6 %297290100.0 %4040
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/network/index-sort-l.html b/html/BayesNet/bayesnet/network/index-sort-l.html new file mode 100644 index 0000000..3757416 --- /dev/null +++ b/html/BayesNet/bayesnet/network/index-sort-l.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/network + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/networkCoverageTotalHit
Test:coverage.infoLines:97.2 %386375
Test Date:2024-04-30 13:17:26Functions:100.0 %6161
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
Node.cc +
95.5%95.5%
+
95.5 %8884100.0 %2020
Network.cc +
97.6%97.6%
+
97.6 %297290100.0 %4040
Network.h +
100.0%
+
100.0 %11100.0 %11
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/network/index.html b/html/BayesNet/bayesnet/network/index.html new file mode 100644 index 0000000..4300e29 --- /dev/null +++ b/html/BayesNet/bayesnet/network/index.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/network + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/networkCoverageTotalHit
Test:coverage.infoLines:97.2 %386375
Test Date:2024-04-30 13:17:26Functions:100.0 %6161
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
Network.cc +
97.6%97.6%
+
97.6 %297290100.0 %4040
Network.h +
100.0%
+
100.0 %11100.0 %11
Node.cc +
95.5%95.5%
+
95.5 %8884100.0 %2020
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/utils/BayesMetrics.cc.func-c.html b/html/BayesNet/bayesnet/utils/BayesMetrics.cc.func-c.html new file mode 100644 index 0000000..0de84a3 --- /dev/null +++ b/html/BayesNet/bayesnet/utils/BayesMetrics.cc.func-c.html @@ -0,0 +1,152 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/utils/BayesMetrics.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/utils - BayesMetrics.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:97.4 %114111
Test Date:2024-04-30 13:17:26Functions:100.0 %1111
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK8bayesnet7Metrics14getScoresKBestEv16
_ZN8bayesnet7MetricsC2ERKSt6vectorIS1_IiSaIiEESaIS3_EERKS3_RKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISF_EERKSF_i32
_ZN8bayesnet7Metrics19maximumSpanningTreeERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKN2at6TensorEi58
_ZN8bayesnet7Metrics15conditionalEdgeERKN2at6TensorE68
_ZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbj230
_ZN8bayesnet7MetricsC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_i742
_ZZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjENKUliiE_clEii906
_ZN8bayesnet7Metrics17mutualInformationERKN2at6TensorES4_S4_14836
_ZN8bayesnet7Metrics18conditionalEntropyERKN2at6TensorES4_S4_14836
_ZN8bayesnet7Metrics7entropyERKN2at6TensorES4_16480
_ZZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjENKUliiE0_clEii32404
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/utils/BayesMetrics.cc.func.html b/html/BayesNet/bayesnet/utils/BayesMetrics.cc.func.html new file mode 100644 index 0000000..4558665 --- /dev/null +++ b/html/BayesNet/bayesnet/utils/BayesMetrics.cc.func.html @@ -0,0 +1,152 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/utils/BayesMetrics.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/utils - BayesMetrics.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:97.4 %114111
Test Date:2024-04-30 13:17:26Functions:100.0 %1111
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet7Metrics15conditionalEdgeERKN2at6TensorE68
_ZN8bayesnet7Metrics17mutualInformationERKN2at6TensorES4_S4_14836
_ZN8bayesnet7Metrics18conditionalEntropyERKN2at6TensorES4_S4_14836
_ZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbj230
_ZN8bayesnet7Metrics19maximumSpanningTreeERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKN2at6TensorEi58
_ZN8bayesnet7Metrics7entropyERKN2at6TensorES4_16480
_ZN8bayesnet7MetricsC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_i742
_ZN8bayesnet7MetricsC2ERKSt6vectorIS1_IiSaIiEESaIS3_EERKS3_RKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISF_EERKSF_i32
_ZNK8bayesnet7Metrics14getScoresKBestEv16
_ZZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjENKUliiE0_clEii32404
_ZZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjENKUliiE_clEii906
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/utils/BayesMetrics.cc.gcov.html b/html/BayesNet/bayesnet/utils/BayesMetrics.cc.gcov.html new file mode 100644 index 0000000..0532c93 --- /dev/null +++ b/html/BayesNet/bayesnet/utils/BayesMetrics.cc.gcov.html @@ -0,0 +1,237 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/utils/BayesMetrics.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/utils - BayesMetrics.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:97.4 %114111
Test Date:2024-04-30 13:17:26Functions:100.0 %1111
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include "Mst.h"
+       8              : #include "BayesMetrics.h"
+       9              : namespace bayesnet {
+      10              :     //samples is n+1xm tensor used to fit the model
+      11          742 :     Metrics::Metrics(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int classNumStates)
+      12          742 :         : samples(samples)
+      13          742 :         , className(className)
+      14          742 :         , features(features)
+      15          742 :         , classNumStates(classNumStates)
+      16              :     {
+      17          742 :     }
+      18              :     //samples is n+1xm std::vector used to fit the model
+      19           32 :     Metrics::Metrics(const std::vector<std::vector<int>>& vsamples, const std::vector<int>& labels, const std::vector<std::string>& features, const std::string& className, const int classNumStates)
+      20           32 :         : samples(torch::zeros({ static_cast<int>(vsamples.size() + 1), static_cast<int>(vsamples[0].size()) }, torch::kInt32))
+      21           32 :         , className(className)
+      22           32 :         , features(features)
+      23           32 :         , classNumStates(classNumStates)
+      24              :     {
+      25          256 :         for (int i = 0; i < vsamples.size(); ++i) {
+      26          896 :             samples.index_put_({ i,  "..." }, torch::tensor(vsamples[i], torch::kInt32));
+      27              :         }
+      28          128 :         samples.index_put_({ -1, "..." }, torch::tensor(labels, torch::kInt32));
+      29          288 :     }
+      30          230 :     std::vector<int> Metrics::SelectKBestWeighted(const torch::Tensor& weights, bool ascending, unsigned k)
+      31              :     {
+      32              :         // Return the K Best features 
+      33          230 :         auto n = features.size();
+      34          230 :         if (k == 0) {
+      35            0 :             k = n;
+      36              :         }
+      37              :         // compute scores
+      38          230 :         scoresKBest.clear();
+      39          230 :         featuresKBest.clear();
+      40          690 :         auto label = samples.index({ -1, "..." });
+      41         5192 :         for (int i = 0; i < n; ++i) {
+      42        14886 :             scoresKBest.push_back(mutualInformation(label, samples.index({ i, "..." }), weights));
+      43         4962 :             featuresKBest.push_back(i);
+      44              :         }
+      45              :         // sort & reduce scores and features
+      46          230 :         if (ascending) {
+      47           38 :             sort(featuresKBest.begin(), featuresKBest.end(), [&](int i, int j)
+      48          906 :                 { return scoresKBest[i] < scoresKBest[j]; });
+      49           38 :             sort(scoresKBest.begin(), scoresKBest.end(), std::less<double>());
+      50           38 :             if (k < n) {
+      51           56 :                 for (int i = 0; i < n - k; ++i) {
+      52           40 :                     featuresKBest.erase(featuresKBest.begin());
+      53           40 :                     scoresKBest.erase(scoresKBest.begin());
+      54              :                 }
+      55              :             }
+      56              :         } else {
+      57          192 :             sort(featuresKBest.begin(), featuresKBest.end(), [&](int i, int j)
+      58        32404 :                 { return scoresKBest[i] > scoresKBest[j]; });
+      59          192 :             sort(scoresKBest.begin(), scoresKBest.end(), std::greater<double>());
+      60          192 :             featuresKBest.resize(k);
+      61          192 :             scoresKBest.resize(k);
+      62              :         }
+      63          460 :         return featuresKBest;
+      64         5422 :     }
+      65           16 :     std::vector<double> Metrics::getScoresKBest() const
+      66              :     {
+      67           16 :         return scoresKBest;
+      68              :     }
+      69              : 
+      70           68 :     torch::Tensor Metrics::conditionalEdge(const torch::Tensor& weights)
+      71              :     {
+      72           68 :         auto result = std::vector<double>();
+      73           68 :         auto source = std::vector<std::string>(features);
+      74           68 :         source.push_back(className);
+      75           68 :         auto combinations = doCombinations(source);
+      76              :         // Compute class prior
+      77           68 :         auto margin = torch::zeros({ classNumStates }, torch::kFloat);
+      78          368 :         for (int value = 0; value < classNumStates; ++value) {
+      79         1200 :             auto mask = samples.index({ -1,  "..." }) == value;
+      80          300 :             margin[value] = mask.sum().item<double>() / samples.size(1);
+      81          300 :         }
+      82         1836 :         for (auto [first, second] : combinations) {
+      83         1768 :             int index_first = find(features.begin(), features.end(), first) - features.begin();
+      84         1768 :             int index_second = find(features.begin(), features.end(), second) - features.begin();
+      85         1768 :             double accumulated = 0;
+      86        10480 :             for (int value = 0; value < classNumStates; ++value) {
+      87        34848 :                 auto mask = samples.index({ -1, "..." }) == value;
+      88        26136 :                 auto first_dataset = samples.index({ index_first, mask });
+      89        26136 :                 auto second_dataset = samples.index({ index_second, mask });
+      90        17424 :                 auto weights_dataset = weights.index({ mask });
+      91        17424 :                 auto mi = mutualInformation(first_dataset, second_dataset, weights_dataset);
+      92         8712 :                 auto pb = margin[value].item<double>();
+      93         8712 :                 accumulated += pb * mi;
+      94         8712 :             }
+      95         1768 :             result.push_back(accumulated);
+      96         1768 :         }
+      97           68 :         long n_vars = source.size();
+      98           68 :         auto matrix = torch::zeros({ n_vars, n_vars });
+      99           68 :         auto indices = torch::triu_indices(n_vars, n_vars, 1);
+     100         1836 :         for (auto i = 0; i < result.size(); ++i) {
+     101         1768 :             auto x = indices[0][i];
+     102         1768 :             auto y = indices[1][i];
+     103         1768 :             matrix[x][y] = result[i];
+     104         1768 :             matrix[y][x] = result[i];
+     105         1768 :         }
+     106          136 :         return matrix;
+     107        43928 :     }
+     108        16480 :     double Metrics::entropy(const torch::Tensor& feature, const torch::Tensor& weights)
+     109              :     {
+     110        16480 :         torch::Tensor counts = feature.bincount(weights);
+     111        16480 :         double totalWeight = counts.sum().item<double>();
+     112        16480 :         torch::Tensor probs = counts.to(torch::kFloat) / totalWeight;
+     113        16480 :         torch::Tensor logProbs = torch::log(probs);
+     114        16480 :         torch::Tensor entropy = -probs * logProbs;
+     115        32960 :         return entropy.nansum().item<double>();
+     116        16480 :     }
+     117              :     // H(Y|X) = sum_{x in X} p(x) H(Y|X=x)
+     118        14836 :     double Metrics::conditionalEntropy(const torch::Tensor& firstFeature, const torch::Tensor& secondFeature, const torch::Tensor& weights)
+     119              :     {
+     120        14836 :         int numSamples = firstFeature.sizes()[0];
+     121        14836 :         torch::Tensor featureCounts = secondFeature.bincount(weights);
+     122        14836 :         std::unordered_map<int, std::unordered_map<int, double>> jointCounts;
+     123        14836 :         double totalWeight = 0;
+     124      2946924 :         for (auto i = 0; i < numSamples; i++) {
+     125      2932088 :             jointCounts[secondFeature[i].item<int>()][firstFeature[i].item<int>()] += weights[i].item<double>();
+     126      2932088 :             totalWeight += weights[i].item<float>();
+     127              :         }
+     128        14836 :         if (totalWeight == 0)
+     129            0 :             return 0;
+     130        14836 :         double entropyValue = 0;
+     131        73754 :         for (int value = 0; value < featureCounts.sizes()[0]; ++value) {
+     132        58918 :             double p_f = featureCounts[value].item<double>() / totalWeight;
+     133        58918 :             double entropy_f = 0;
+     134       198966 :             for (auto& [label, jointCount] : jointCounts[value]) {
+     135       140048 :                 double p_l_f = jointCount / featureCounts[value].item<double>();
+     136       140048 :                 if (p_l_f > 0) {
+     137       140048 :                     entropy_f -= p_l_f * log(p_l_f);
+     138              :                 } else {
+     139            0 :                     entropy_f = 0;
+     140              :                 }
+     141              :             }
+     142        58918 :             entropyValue += p_f * entropy_f;
+     143              :         }
+     144        14836 :         return entropyValue;
+     145        14836 :     }
+     146              :     // I(X;Y) = H(Y) - H(Y|X)
+     147        14836 :     double Metrics::mutualInformation(const torch::Tensor& firstFeature, const torch::Tensor& secondFeature, const torch::Tensor& weights)
+     148              :     {
+     149        14836 :         return entropy(firstFeature, weights) - conditionalEntropy(firstFeature, secondFeature, weights);
+     150              :     }
+     151              :     /*
+     152              :     Compute the maximum spanning tree considering the weights as distances
+     153              :     and the indices of the weights as nodes of this square matrix using
+     154              :     Kruskal algorithm
+     155              :     */
+     156           58 :     std::vector<std::pair<int, int>> Metrics::maximumSpanningTree(const std::vector<std::string>& features, const torch::Tensor& weights, const int root)
+     157              :     {
+     158           58 :         auto mst = MST(features, weights, root);
+     159          116 :         return mst.maximumSpanningTree();
+     160           58 :     }
+     161              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/utils/BayesMetrics.h.func-c.html b/html/BayesNet/bayesnet/utils/BayesMetrics.h.func-c.html new file mode 100644 index 0000000..6e280a8 --- /dev/null +++ b/html/BayesNet/bayesnet/utils/BayesMetrics.h.func-c.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/utils/BayesMetrics.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/utils - BayesMetrics.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.3 %1312
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet7Metrics9pop_firstIiEET_RSt6vectorIS2_SaIS2_EE20
_ZN8bayesnet7Metrics14doCombinationsIiEESt6vectorISt4pairIT_S4_ESaIS5_EERKS2_IS4_SaIS4_EE384
_ZN8bayesnet7Metrics14doCombinationsINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESt6vectorISt4pairIT_SA_ESaISB_EERKS8_ISA_SaISA_EE68
_ZN8bayesnet7Metrics14doCombinationsIiEESt6vectorISt4pairIT_S4_ESaIS5_EERKS2_IS4_SaIS4_EE316
_ZN8bayesnet7MetricsC2Ev886
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/utils/BayesMetrics.h.func.html b/html/BayesNet/bayesnet/utils/BayesMetrics.h.func.html new file mode 100644 index 0000000..41d1d5c --- /dev/null +++ b/html/BayesNet/bayesnet/utils/BayesMetrics.h.func.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/utils/BayesMetrics.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/utils - BayesMetrics.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.3 %1312
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet7Metrics14doCombinationsIiEESt6vectorISt4pairIT_S4_ESaIS5_EERKS2_IS4_SaIS4_EE384
_ZN8bayesnet7Metrics14doCombinationsINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESt6vectorISt4pairIT_SA_ESaISB_EERKS8_ISA_SaISA_EE68
_ZN8bayesnet7Metrics14doCombinationsIiEESt6vectorISt4pairIT_S4_ESaIS5_EERKS2_IS4_SaIS4_EE316
_ZN8bayesnet7Metrics9pop_firstIiEET_RSt6vectorIS2_SaIS2_EE20
_ZN8bayesnet7MetricsC2Ev886
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/utils/BayesMetrics.h.gcov.html b/html/BayesNet/bayesnet/utils/BayesMetrics.h.gcov.html new file mode 100644 index 0000000..40722e6 --- /dev/null +++ b/html/BayesNet/bayesnet/utils/BayesMetrics.h.gcov.html @@ -0,0 +1,130 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/utils/BayesMetrics.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/utils - BayesMetrics.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.3 %1312
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef BAYESNET_METRICS_H
+       8              : #define BAYESNET_METRICS_H
+       9              : #include <vector>
+      10              : #include <string>
+      11              : #include <torch/torch.h>
+      12              : namespace bayesnet {
+      13              :     class Metrics {
+      14              :     public:
+      15          886 :         Metrics() = default;
+      16              :         Metrics(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int classNumStates);
+      17              :         Metrics(const std::vector<std::vector<int>>& vsamples, const std::vector<int>& labels, const std::vector<std::string>& features, const std::string& className, const int classNumStates);
+      18              :         std::vector<int> SelectKBestWeighted(const torch::Tensor& weights, bool ascending = false, unsigned k = 0);
+      19              :         std::vector<double> getScoresKBest() const;
+      20              :         double mutualInformation(const torch::Tensor& firstFeature, const torch::Tensor& secondFeature, const torch::Tensor& weights);
+      21              :         torch::Tensor conditionalEdge(const torch::Tensor& weights);
+      22              :         std::vector<std::pair<int, int>> maximumSpanningTree(const std::vector<std::string>& features, const torch::Tensor& weights, const int root);
+      23              :     protected:
+      24              :         torch::Tensor samples; // n+1xm torch::Tensor used to fit the model where samples[-1] is the y std::vector
+      25              :         std::string className;
+      26              :         double entropy(const torch::Tensor& feature, const torch::Tensor& weights);
+      27              :         std::vector<std::string> features;
+      28              :         template <class T>
+      29          384 :         std::vector<std::pair<T, T>> doCombinations(const std::vector<T>& source)
+      30              :         {
+      31          384 :             std::vector<std::pair<T, T>> result;
+      32         2026 :             for (int i = 0; i < source.size(); ++i) {
+      33         1642 :                 T temp = source[i];
+      34         5180 :                 for (int j = i + 1; j < source.size(); ++j) {
+      35         3538 :                     result.push_back({ temp, source[j] });
+      36              :                 }
+      37              :             }
+      38          384 :             return result;
+      39            0 :         }
+      40              :         template <class T>
+      41           20 :         T pop_first(std::vector<T>& v)
+      42              :         {
+      43           20 :             T temp = v[0];
+      44           20 :             v.erase(v.begin());
+      45           20 :             return temp;
+      46              :         }
+      47              :     private:
+      48              :         int classNumStates = 0;
+      49              :         std::vector<double> scoresKBest;
+      50              :         std::vector<int> featuresKBest; // sorted indices of the features
+      51              :         double conditionalEntropy(const torch::Tensor& firstFeature, const torch::Tensor& secondFeature, const torch::Tensor& weights);
+      52              :     };
+      53              : }
+      54              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/utils/Mst.cc.func-c.html b/html/BayesNet/bayesnet/utils/Mst.cc.func-c.html new file mode 100644 index 0000000..343e930 --- /dev/null +++ b/html/BayesNet/bayesnet/utils/Mst.cc.func-c.html @@ -0,0 +1,145 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/utils/Mst.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/utils - Mst.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:94.1 %6864
Test Date:2024-04-30 13:17:26Functions:100.0 %1010
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet3MST19maximumSpanningTreeEv58
_ZN8bayesnet3MSTC2ERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKN2at6TensorEi58
_ZN8bayesnet5Graph17kruskal_algorithmEv58
_ZN8bayesnet5GraphC2Ei58
_ZN8bayesnet7reorderESt6vectorISt4pairIfS1_IiiEESaIS3_EEi58
_ZN8bayesnet13insertElementERNSt7__cxx114listIiSaIiEEEi318
_ZN8bayesnet5Graph9union_setEii318
_ZN8bayesnet5Graph7addEdgeEiif1152
_ZZN8bayesnet5Graph17kruskal_algorithmEvENKUlRKT_RKT0_E_clISt4pairIfS9_IiiEESB_EEDaS3_S6_4426
_ZN8bayesnet5Graph8find_setEi5326
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/utils/Mst.cc.func.html b/html/BayesNet/bayesnet/utils/Mst.cc.func.html new file mode 100644 index 0000000..94fb74c --- /dev/null +++ b/html/BayesNet/bayesnet/utils/Mst.cc.func.html @@ -0,0 +1,145 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/utils/Mst.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/utils - Mst.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:94.1 %6864
Test Date:2024-04-30 13:17:26Functions:100.0 %1010
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet13insertElementERNSt7__cxx114listIiSaIiEEEi318
_ZN8bayesnet3MST19maximumSpanningTreeEv58
_ZN8bayesnet3MSTC2ERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKN2at6TensorEi58
_ZN8bayesnet5Graph17kruskal_algorithmEv58
_ZN8bayesnet5Graph7addEdgeEiif1152
_ZN8bayesnet5Graph8find_setEi5326
_ZN8bayesnet5Graph9union_setEii318
_ZN8bayesnet5GraphC2Ei58
_ZN8bayesnet7reorderESt6vectorISt4pairIfS1_IiiEESaIS3_EEi58
_ZZN8bayesnet5Graph17kruskal_algorithmEvENKUlRKT_RKT0_E_clISt4pairIfS9_IiiEESB_EEDaS3_S6_4426
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/utils/Mst.cc.gcov.html b/html/BayesNet/bayesnet/utils/Mst.cc.gcov.html new file mode 100644 index 0000000..5e991df --- /dev/null +++ b/html/BayesNet/bayesnet/utils/Mst.cc.gcov.html @@ -0,0 +1,196 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/utils/Mst.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/utils - Mst.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:94.1 %6864
Test Date:2024-04-30 13:17:26Functions:100.0 %1010
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include <sstream>
+       8              : #include <vector>
+       9              : #include <list>
+      10              : #include "Mst.h"
+      11              : /*
+      12              :     Based on the code from https://www.softwaretestinghelp.com/minimum-spanning-tree-tutorial/
+      13              : 
+      14              : */
+      15              : 
+      16              : namespace bayesnet {
+      17          116 :     Graph::Graph(int V) : V(V), parent(std::vector<int>(V))
+      18              :     {
+      19          434 :         for (int i = 0; i < V; i++)
+      20          376 :             parent[i] = i;
+      21           58 :         G.clear();
+      22           58 :         T.clear();
+      23           58 :     }
+      24         1152 :     void Graph::addEdge(int u, int v, float wt)
+      25              :     {
+      26         1152 :         G.push_back({ wt, { u, v } });
+      27         1152 :     }
+      28         5326 :     int Graph::find_set(int i)
+      29              :     {
+      30              :         // If i is the parent of itself
+      31         5326 :         if (i == parent[i])
+      32         2304 :             return i;
+      33              :         else
+      34              :             //else recursively find the parent of i
+      35         3022 :             return find_set(parent[i]);
+      36              :     }
+      37          318 :     void Graph::union_set(int u, int v)
+      38              :     {
+      39          318 :         parent[u] = parent[v];
+      40          318 :     }
+      41           58 :     void Graph::kruskal_algorithm()
+      42              :     {
+      43              :         // sort the edges ordered on decreasing weight
+      44         4484 :         stable_sort(G.begin(), G.end(), [](const auto& left, const auto& right) {return left.first > right.first;});
+      45         1210 :         for (int i = 0; i < G.size(); i++) {
+      46              :             int uSt, vEd;
+      47         1152 :             uSt = find_set(G[i].second.first);
+      48         1152 :             vEd = find_set(G[i].second.second);
+      49         1152 :             if (uSt != vEd) {
+      50          318 :                 T.push_back(G[i]); // add to mst std::vector
+      51          318 :                 union_set(uSt, vEd);
+      52              :             }
+      53              :         }
+      54           58 :     }
+      55              : 
+      56          318 :     void insertElement(std::list<int>& variables, int variable)
+      57              :     {
+      58          318 :         if (std::find(variables.begin(), variables.end(), variable) == variables.end()) {
+      59          318 :             variables.push_front(variable);
+      60              :         }
+      61          318 :     }
+      62              : 
+      63           58 :     std::vector<std::pair<int, int>> reorder(std::vector<std::pair<float, std::pair<int, int>>> T, int root_original)
+      64              :     {
+      65              :         // Create the edges of a DAG from the MST
+      66              :         // replacing unordered_set with list because unordered_set cannot guarantee the order of the elements inserted
+      67           58 :         auto result = std::vector<std::pair<int, int>>();
+      68           58 :         auto visited = std::vector<int>();
+      69           58 :         auto nextVariables = std::list<int>();
+      70           58 :         nextVariables.push_front(root_original);
+      71          434 :         while (nextVariables.size() > 0) {
+      72          376 :             int root = nextVariables.front();
+      73          376 :             nextVariables.pop_front();
+      74         1328 :             for (int i = 0; i < T.size(); ++i) {
+      75          952 :                 auto [weight, edge] = T[i];
+      76          952 :                 auto [from, to] = edge;
+      77          952 :                 if (from == root || to == root) {
+      78          318 :                     visited.insert(visited.begin(), i);
+      79          318 :                     if (from == root) {
+      80          212 :                         result.push_back({ from, to });
+      81          212 :                         insertElement(nextVariables, to);
+      82              :                     } else {
+      83          106 :                         result.push_back({ to, from });
+      84          106 :                         insertElement(nextVariables, from);
+      85              :                     }
+      86              :                 }
+      87              :             }
+      88              :             // Remove visited
+      89          694 :             for (int i = 0; i < visited.size(); ++i) {
+      90          318 :                 T.erase(T.begin() + visited[i]);
+      91              :             }
+      92          376 :             visited.clear();
+      93              :         }
+      94           58 :         if (T.size() > 0) {
+      95            0 :             for (int i = 0; i < T.size(); ++i) {
+      96            0 :                 auto [weight, edge] = T[i];
+      97            0 :                 auto [from, to] = edge;
+      98            0 :                 result.push_back({ from, to });
+      99              :             }
+     100              :         }
+     101          116 :         return result;
+     102           58 :     }
+     103              : 
+     104           58 :     MST::MST(const std::vector<std::string>& features, const torch::Tensor& weights, const int root) : features(features), weights(weights), root(root) {}
+     105           58 :     std::vector<std::pair<int, int>> MST::maximumSpanningTree()
+     106              :     {
+     107           58 :         auto num_features = features.size();
+     108           58 :         Graph g(num_features);
+     109              :         // Make a complete graph
+     110          376 :         for (int i = 0; i < num_features - 1; ++i) {
+     111         1470 :             for (int j = i + 1; j < num_features; ++j) {
+     112         1152 :                 g.addEdge(i, j, weights[i][j].item<float>());
+     113              :             }
+     114              :         }
+     115           58 :         g.kruskal_algorithm();
+     116           58 :         auto mst = g.get_mst();
+     117          116 :         return reorder(mst, root);
+     118           58 :     }
+     119              : 
+     120              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/utils/Mst.h.func-c.html b/html/BayesNet/bayesnet/utils/Mst.h.func-c.html new file mode 100644 index 0000000..35cd773 --- /dev/null +++ b/html/BayesNet/bayesnet/utils/Mst.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/utils/Mst.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/utils - Mst.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet5Graph7get_mstEv58
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/utils/Mst.h.func.html b/html/BayesNet/bayesnet/utils/Mst.h.func.html new file mode 100644 index 0000000..0e7b3da --- /dev/null +++ b/html/BayesNet/bayesnet/utils/Mst.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/utils/Mst.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/utils - Mst.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet5Graph7get_mstEv58
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/utils/Mst.h.gcov.html b/html/BayesNet/bayesnet/utils/Mst.h.gcov.html new file mode 100644 index 0000000..9015428 --- /dev/null +++ b/html/BayesNet/bayesnet/utils/Mst.h.gcov.html @@ -0,0 +1,114 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/utils/Mst.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/utils - Mst.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef MST_H
+       8              : #define MST_H
+       9              : #include <vector>
+      10              : #include <string>
+      11              : #include <torch/torch.h>
+      12              : namespace bayesnet {
+      13              :     class MST {
+      14              :     public:
+      15              :         MST() = default;
+      16              :         MST(const std::vector<std::string>& features, const torch::Tensor& weights, const int root);
+      17              :         std::vector<std::pair<int, int>> maximumSpanningTree();
+      18              :     private:
+      19              :         torch::Tensor weights;
+      20              :         std::vector<std::string> features;
+      21              :         int root = 0;
+      22              :     };
+      23              :     class Graph {
+      24              :     public:
+      25              :         explicit Graph(int V);
+      26              :         void addEdge(int u, int v, float wt);
+      27              :         int find_set(int i);
+      28              :         void union_set(int u, int v);
+      29              :         void kruskal_algorithm();
+      30           58 :         std::vector <std::pair<float, std::pair<int, int>>> get_mst() { return T; }
+      31              :     private:
+      32              :         int V;      // number of nodes in graph
+      33              :         std::vector <std::pair<float, std::pair<int, int>>> G; // std::vector for graph
+      34              :         std::vector <std::pair<float, std::pair<int, int>>> T; // std::vector for mst
+      35              :         std::vector<int> parent;
+      36              :     };
+      37              : }
+      38              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/utils/bayesnetUtils.cc.func-c.html b/html/BayesNet/bayesnet/utils/bayesnetUtils.cc.func-c.html new file mode 100644 index 0000000..a358120 --- /dev/null +++ b/html/BayesNet/bayesnet/utils/bayesnetUtils.cc.func-c.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/utils/bayesnetUtils.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/utils - bayesnetUtils.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.0 %2523
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet20tensorToVectorDoubleERN2at6TensorE14
_ZN8bayesnet14vectorToTensorERSt6vectorIS0_IiSaIiEESaIS2_EEb18
_ZN8bayesnet7argsortERSt6vectorIdSaIdEE58
_ZZN8bayesnet7argsortERSt6vectorIdSaIdEEENKUliiE_clEii1134
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/utils/bayesnetUtils.cc.func.html b/html/BayesNet/bayesnet/utils/bayesnetUtils.cc.func.html new file mode 100644 index 0000000..735a2e4 --- /dev/null +++ b/html/BayesNet/bayesnet/utils/bayesnetUtils.cc.func.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/utils/bayesnetUtils.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/utils - bayesnetUtils.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.0 %2523
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8bayesnet14vectorToTensorERSt6vectorIS0_IiSaIiEESaIS2_EEb18
_ZN8bayesnet20tensorToVectorDoubleERN2at6TensorE14
_ZN8bayesnet7argsortERSt6vectorIdSaIdEE58
_ZZN8bayesnet7argsortERSt6vectorIdSaIdEEENKUliiE_clEii1134
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/utils/bayesnetUtils.cc.gcov.html b/html/BayesNet/bayesnet/utils/bayesnetUtils.cc.gcov.html new file mode 100644 index 0000000..a9e2170 --- /dev/null +++ b/html/BayesNet/bayesnet/utils/bayesnetUtils.cc.gcov.html @@ -0,0 +1,120 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/utils/bayesnetUtils.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/utils - bayesnetUtils.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.0 %2523
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : 
+       8              : #include "bayesnetUtils.h"
+       9              : namespace bayesnet {
+      10              :     // Return the indices in descending order
+      11           58 :     std::vector<int> argsort(std::vector<double>& nums)
+      12              :     {
+      13           58 :         int n = nums.size();
+      14           58 :         std::vector<int> indices(n);
+      15           58 :         iota(indices.begin(), indices.end(), 0);
+      16         1192 :         sort(indices.begin(), indices.end(), [&nums](int i, int j) {return nums[i] > nums[j];});
+      17           58 :         return indices;
+      18            0 :     }
+      19           14 :     std::vector<std::vector<double>> tensorToVectorDouble(torch::Tensor& dtensor)
+      20              :     {
+      21              :         // convert mxn tensor to mxn std::vector
+      22           14 :         std::vector<std::vector<double>> result;
+      23              :         // Iterate over cols
+      24         3606 :         for (int i = 0; i < dtensor.size(0); ++i) {
+      25        10776 :             auto col_tensor = dtensor.index({ i, "..." });
+      26         3592 :             auto col = std::vector<double>(col_tensor.data_ptr<float>(), col_tensor.data_ptr<float>() + dtensor.size(1));
+      27         3592 :             result.push_back(col);
+      28         3592 :         }
+      29           14 :         return result;
+      30         3592 :     }
+      31           18 :     torch::Tensor vectorToTensor(std::vector<std::vector<int>>& vector, bool transpose)
+      32              :     {
+      33              :         // convert nxm std::vector to mxn tensor if transpose
+      34           18 :         long int m = transpose ? vector[0].size() : vector.size();
+      35           18 :         long int n = transpose ? vector.size() : vector[0].size();
+      36           18 :         auto tensor = torch::zeros({ m, n }, torch::kInt32);
+      37          118 :         for (int i = 0; i < m; ++i) {
+      38        24962 :             for (int j = 0; j < n; ++j) {
+      39        24862 :                 tensor[i][j] = transpose ? vector[j][i] : vector[i][j];
+      40              :             }
+      41              :         }
+      42           18 :         return tensor;
+      43            0 :     }
+      44              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/utils/index-sort-f.html b/html/BayesNet/bayesnet/utils/index-sort-f.html new file mode 100644 index 0000000..2b3de47 --- /dev/null +++ b/html/BayesNet/bayesnet/utils/index-sort-f.html @@ -0,0 +1,153 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/utils + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/utilsCoverageTotalHit
Test:coverage.infoLines:95.5 %221211
Test Date:2024-04-30 13:17:26Functions:100.0 %3030
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
Mst.h +
100.0%
+
100.0 %11100.0 %11
BayesMetrics.h +
92.3%92.3%
+
92.3 %1312100.0 %44
bayesnetUtils.cc +
92.0%92.0%
+
92.0 %2523100.0 %44
Mst.cc +
94.1%94.1%
+
94.1 %6864100.0 %1010
BayesMetrics.cc +
97.4%97.4%
+
97.4 %114111100.0 %1111
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/utils/index-sort-l.html b/html/BayesNet/bayesnet/utils/index-sort-l.html new file mode 100644 index 0000000..20d1f54 --- /dev/null +++ b/html/BayesNet/bayesnet/utils/index-sort-l.html @@ -0,0 +1,153 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/utils + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/utilsCoverageTotalHit
Test:coverage.infoLines:95.5 %221211
Test Date:2024-04-30 13:17:26Functions:100.0 %3030
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
bayesnetUtils.cc +
92.0%92.0%
+
92.0 %2523100.0 %44
BayesMetrics.h +
92.3%92.3%
+
92.3 %1312100.0 %44
Mst.cc +
94.1%94.1%
+
94.1 %6864100.0 %1010
BayesMetrics.cc +
97.4%97.4%
+
97.4 %114111100.0 %1111
Mst.h +
100.0%
+
100.0 %11100.0 %11
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/bayesnet/utils/index.html b/html/BayesNet/bayesnet/utils/index.html new file mode 100644 index 0000000..d278fc0 --- /dev/null +++ b/html/BayesNet/bayesnet/utils/index.html @@ -0,0 +1,153 @@ + + + + + + + LCOV - coverage.info - BayesNet/bayesnet/utils + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/bayesnet/utilsCoverageTotalHit
Test:coverage.infoLines:95.5 %221211
Test Date:2024-04-30 13:17:26Functions:100.0 %3030
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
BayesMetrics.cc +
97.4%97.4%
+
97.4 %114111100.0 %1111
BayesMetrics.h +
92.3%92.3%
+
92.3 %1312100.0 %44
Mst.cc +
94.1%94.1%
+
94.1 %6864100.0 %1010
Mst.h +
100.0%
+
100.0 %11100.0 %11
bayesnetUtils.cc +
92.0%92.0%
+
92.0 %2523100.0 %44
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/folding/folding.hpp.func-c.html b/html/BayesNet/lib/folding/folding.hpp.func-c.html new file mode 100644 index 0000000..b788040 --- /dev/null +++ b/html/BayesNet/lib/folding/folding.hpp.func-c.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/folding/folding.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/folding - folding.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:98.2 %5554
Test Date:2024-04-30 13:17:26Functions:83.3 %65
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN7folding15StratifiedKFold5buildEv250
_ZN7folding15StratifiedKFold7getFoldEi250
_ZN7folding15StratifiedKFoldC2EiRN2at6TensorEi250
_ZN7folding4FoldC2Eiii250
_ZN7folding4FoldD0Ev250
_ZN7folding4FoldD0Ev0
_ZN7folding4FoldD2Ev250
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/folding/folding.hpp.func.html b/html/BayesNet/lib/folding/folding.hpp.func.html new file mode 100644 index 0000000..a1fcc3b --- /dev/null +++ b/html/BayesNet/lib/folding/folding.hpp.func.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/folding/folding.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/folding - folding.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:98.2 %5554
Test Date:2024-04-30 13:17:26Functions:83.3 %65
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN7folding15StratifiedKFold5buildEv250
_ZN7folding15StratifiedKFold7getFoldEi250
_ZN7folding15StratifiedKFoldC2EiRN2at6TensorEi250
_ZN7folding4FoldC2Eiii250
_ZN7folding4FoldD0Ev250
_ZN7folding4FoldD0Ev0
_ZN7folding4FoldD2Ev250
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/folding/folding.hpp.gcov.html b/html/BayesNet/lib/folding/folding.hpp.gcov.html new file mode 100644 index 0000000..84f15b7 --- /dev/null +++ b/html/BayesNet/lib/folding/folding.hpp.gcov.html @@ -0,0 +1,209 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/folding/folding.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/folding - folding.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:98.2 %5554
Test Date:2024-04-30 13:17:26Functions:83.3 %65
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : #include <torch/torch.h>
+       3              : #include <algorithm>
+       4              : #include <map>
+       5              : #include <random> 
+       6              : #include <vector>
+       7              : namespace folding {
+       8              :     const std::string FOLDING_VERSION = "1.0.1";
+       9              :     class Fold {
+      10              :     protected:
+      11              :         int k;
+      12              :         int n;
+      13              :         int seed;
+      14              :         std::mt19937 random_seed;
+      15              :     public:
+      16          250 :         inline Fold(int k, int n, int seed = -1) : k(k), n(n), seed(seed)
+      17              :         {
+      18          250 :             std::random_device rd;
+      19          250 :             random_seed = std::mt19937(seed == -1 ? rd() : seed);
+      20          250 :             std::srand(seed == -1 ? time(0) : seed);
+      21          250 :         }
+      22              :         virtual std::pair<std::vector<int>, std::vector<int>> getFold(int nFold) = 0;
+      23          250 :         virtual ~Fold() = default;
+      24              :         std::string version() { return FOLDING_VERSION; }
+      25              :         int getNumberOfFolds() { return k; }
+      26              :     };
+      27              :     class KFold : public Fold {
+      28              :     private:
+      29              :         std::vector<int> indices;
+      30              :     public:
+      31              :         inline KFold(int k, int n, int seed = -1) : Fold(k, n, seed), indices(std::vector<int>(n))
+      32              :         {
+      33              :             std::iota(begin(indices), end(indices), 0); // fill with 0, 1, ..., n - 1
+      34              :             shuffle(indices.begin(), indices.end(), random_seed);
+      35              :         }
+      36              :         inline std::pair<std::vector<int>, std::vector<int>> getFold(int nFold) override
+      37              :         {
+      38              :             if (nFold >= k || nFold < 0) {
+      39              :                 throw std::out_of_range("nFold (" + std::to_string(nFold) + ") must be less than k (" + std::to_string(k) + ")");
+      40              :             }
+      41              :             int nTest = n / k;
+      42              :             auto train = std::vector<int>();
+      43              :             auto test = std::vector<int>();
+      44              :             for (int i = 0; i < n; i++) {
+      45              :                 if (i >= nTest * nFold && i < nTest * (nFold + 1)) {
+      46              :                     test.push_back(indices[i]);
+      47              :                 } else {
+      48              :                     train.push_back(indices[i]);
+      49              :                 }
+      50              :             }
+      51              :             return { train, test };
+      52              :         }
+      53              :     };
+      54              :     class StratifiedKFold : public Fold {
+      55              :     private:
+      56              :         std::vector<int> y;
+      57              :         std::vector<std::vector<int>> stratified_indices;
+      58          250 :         void build()
+      59              :         {
+      60          250 :             stratified_indices = std::vector<std::vector<int>>(k);
+      61          250 :             int fold_size = n / k;
+      62              : 
+      63              :             // Compute class counts and indices
+      64          250 :             auto class_indices = std::map<int, std::vector<int>>();
+      65          250 :             std::vector<int> class_counts(*max_element(y.begin(), y.end()) + 1, 0);
+      66        76398 :             for (auto i = 0; i < n; ++i) {
+      67        76148 :                 class_counts[y[i]]++;
+      68        76148 :                 class_indices[y[i]].push_back(i);
+      69              :             }
+      70              :             // Shuffle class indices
+      71         1268 :             for (auto& [cls, indices] : class_indices) {
+      72         1018 :                 shuffle(indices.begin(), indices.end(), random_seed);
+      73              :             }
+      74              :             // Assign indices to folds
+      75         1268 :             for (auto label = 0; label < class_counts.size(); ++label) {
+      76         1018 :                 auto num_samples_to_take = class_counts.at(label) / k;
+      77         1018 :                 if (num_samples_to_take == 0) {
+      78           52 :                     std::cerr << "Warning! The number of samples in class " << label << " (" << class_counts.at(label)
+      79           52 :                         << ") is less than the number of folds (" << k << ")." << std::endl;
+      80           52 :                     faulty = true;
+      81           52 :                     continue;
+      82              :                 }
+      83          966 :                 auto remainder_samples_to_take = class_counts[label] % k;
+      84         5796 :                 for (auto fold = 0; fold < k; ++fold) {
+      85         4830 :                     auto it = next(class_indices[label].begin(), num_samples_to_take);
+      86         4830 :                     move(class_indices[label].begin(), it, back_inserter(stratified_indices[fold]));  // ##
+      87         4830 :                     class_indices[label].erase(class_indices[label].begin(), it);
+      88              :                 }
+      89          966 :                 auto chosen = std::vector<bool>(k, false);
+      90         2420 :                 while (remainder_samples_to_take > 0) {
+      91         1454 :                     int fold = (rand() % static_cast<int>(k));
+      92         1454 :                     if (chosen.at(fold)) {
+      93          350 :                         continue;
+      94              :                     }
+      95         1104 :                     chosen[fold] = true;
+      96         1104 :                     auto it = next(class_indices[label].begin(), 1);
+      97         1104 :                     stratified_indices[fold].push_back(*class_indices[label].begin());
+      98         1104 :                     class_indices[label].erase(class_indices[label].begin(), it);
+      99         1104 :                     remainder_samples_to_take--;
+     100              :                 }
+     101          966 :             }
+     102          250 :         }
+     103              :         bool faulty = false; // Only true if the number of samples of any class is less than the number of folds.
+     104              :     public:
+     105              :         inline StratifiedKFold(int k, const std::vector<int>& y, int seed = -1) : Fold(k, y.size(), seed)
+     106              :         {
+     107              :             this->y = y;
+     108              :             n = y.size();
+     109              :             build();
+     110              :         }
+     111          250 :         inline StratifiedKFold(int k, torch::Tensor& y, int seed = -1) : Fold(k, y.numel(), seed)
+     112              :         {
+     113          250 :             n = y.numel();
+     114          250 :             this->y = std::vector<int>(y.data_ptr<int>(), y.data_ptr<int>() + n);
+     115          250 :             build();
+     116          250 :         }
+     117              : 
+     118          250 :         inline std::pair<std::vector<int>, std::vector<int>> getFold(int nFold) override
+     119              :         {
+     120          250 :             if (nFold >= k || nFold < 0) {
+     121            0 :                 throw std::out_of_range("nFold (" + std::to_string(nFold) + ") must be less than k (" + std::to_string(k) + ")");
+     122              :             }
+     123          250 :             std::vector<int> test_indices = stratified_indices[nFold];
+     124          250 :             std::vector<int> train_indices;
+     125         1500 :             for (int i = 0; i < k; ++i) {
+     126         1250 :                 if (i == nFold) continue;
+     127         1000 :                 train_indices.insert(train_indices.end(), stratified_indices[i].begin(), stratified_indices[i].end());
+     128              :             }
+     129          500 :             return { train_indices, test_indices };
+     130          250 :         }
+     131              :         inline bool isFaulty() { return faulty; }
+     132              :     };
+     133              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/folding/index-sort-f.html b/html/BayesNet/lib/folding/index-sort-f.html new file mode 100644 index 0000000..7a59af0 --- /dev/null +++ b/html/BayesNet/lib/folding/index-sort-f.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/folding + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/foldingCoverageTotalHit
Test:coverage.infoLines:98.2 %5554
Test Date:2024-04-30 13:17:26Functions:83.3 %65
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
folding.hpp +
98.2%98.2%
+
98.2 %555483.3 %65
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/folding/index-sort-l.html b/html/BayesNet/lib/folding/index-sort-l.html new file mode 100644 index 0000000..76540cc --- /dev/null +++ b/html/BayesNet/lib/folding/index-sort-l.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/folding + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/foldingCoverageTotalHit
Test:coverage.infoLines:98.2 %5554
Test Date:2024-04-30 13:17:26Functions:83.3 %65
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
folding.hpp +
98.2%98.2%
+
98.2 %555483.3 %65
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/folding/index.html b/html/BayesNet/lib/folding/index.html new file mode 100644 index 0000000..d3509f2 --- /dev/null +++ b/html/BayesNet/lib/folding/index.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/folding + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/foldingCoverageTotalHit
Test:coverage.infoLines:98.2 %5554
Test Date:2024-04-30 13:17:26Functions:83.3 %65
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
folding.hpp +
98.2%98.2%
+
98.2 %555483.3 %65
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/adl_serializer.hpp.func-c.html b/html/BayesNet/lib/json/include/nlohmann/adl_serializer.hpp.func-c.html new file mode 100644 index 0000000..b313f87 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/adl_serializer.hpp.func-c.html @@ -0,0 +1,229 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/adl_serializer.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann - adl_serializer.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %66
Test Date:2024-04-30 13:17:26Functions:100.0 %2020
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIbvE9from_jsonIRKNS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S6_IhSaIhEEvEEbEEDTcmclL_ZNS0_9from_jsonEEcl7forwardIT_Efp_Efp0_Ecvv_EEOSI_RT0_114
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIfvE9from_jsonIRKNS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S6_IhSaIhEEvEEfEEDTcmclL_ZNS0_9from_jsonEEcl7forwardIT_Efp_Efp0_Ecvv_EEOSI_RT0_2
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIdvE9from_jsonIRKNS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S6_IhSaIhEEvEEdEEDTcmclL_ZNS0_9from_jsonEEcl7forwardIT_Efp_Efp0_Ecvv_EEOSI_RT0_12
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIivE9from_jsonIRKNS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S6_IhSaIhEEvEEiEEDTcmclL_ZNS0_9from_jsonEEcl7forwardIT_Efp_Efp0_Ecvv_EEOSI_RT0_24
_ZN8nlohmann16json_abi_v3_11_314adl_serializerINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEvE9from_jsonIRKNS0_10basic_jsonISt3mapSt6vectorS7_blmdSaS1_SC_IhSaIhEEvEES7_EEDTcmclL_ZNS0_9from_jsonEEcl7forwardIT_Efp_Efp0_Ecvv_EEOSI_RT0_28
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIbvE9from_jsonIRKNS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S6_IhSaIhEEvEEbEEDTcmclL_ZNS0_9from_jsonEEcl7forwardIT_Efp_Efp0_Ecvv_EEOSI_RT0_48
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIbvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S6_IhSaIhEEvEEbEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSG_260
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA2_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA2_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_2
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA15_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA15_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_4
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA17_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA17_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_4
_ZN8nlohmann16json_abi_v3_11_314adl_serializerINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorS7_blmdSaS1_SC_IhSaIhEEvEERKS7_EEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSI_6
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA4_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA4_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_10
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIdvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S6_IhSaIhEEvEEdEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSG_14
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA12_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA12_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_16
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA5_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA5_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_16
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA6_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA6_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_16
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA16_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA16_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_18
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIivE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S6_IhSaIhEEvEEiEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSG_22
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA13_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA13_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_24
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA10_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA10_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_26
_ZN8nlohmann16json_abi_v3_11_314adl_serializerINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorS7_blmdSaS1_SC_IhSaIhEEvEERS7_EEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSH_38
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIbvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S6_IhSaIhEEvEEbEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSG_44
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/adl_serializer.hpp.func.html b/html/BayesNet/lib/json/include/nlohmann/adl_serializer.hpp.func.html new file mode 100644 index 0000000..ff877b4 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/adl_serializer.hpp.func.html @@ -0,0 +1,229 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/adl_serializer.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann - adl_serializer.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %66
Test Date:2024-04-30 13:17:26Functions:100.0 %2020
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIbvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S6_IhSaIhEEvEEbEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSG_260
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA10_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA10_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_26
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA12_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA12_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_16
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA13_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA13_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_24
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA15_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA15_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_4
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA16_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA16_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_18
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA17_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA17_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_4
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA2_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA2_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_2
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA4_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA4_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_10
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA5_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA5_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_16
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIA6_cvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S7_IhSaIhEEvEERA6_KcEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_16
_ZN8nlohmann16json_abi_v3_11_314adl_serializerINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorS7_blmdSaS1_SC_IhSaIhEEvEERKS7_EEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSI_6
_ZN8nlohmann16json_abi_v3_11_314adl_serializerINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorS7_blmdSaS1_SC_IhSaIhEEvEERS7_EEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSH_38
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIbvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S6_IhSaIhEEvEEbEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSG_44
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIdvE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S6_IhSaIhEEvEEdEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSG_14
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIivE7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S6_IhSaIhEEvEEiEEDTcmclL_ZNS0_7to_jsonEEfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSG_22
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIbvE9from_jsonIRKNS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S6_IhSaIhEEvEEbEEDTcmclL_ZNS0_9from_jsonEEcl7forwardIT_Efp_Efp0_Ecvv_EEOSI_RT0_114
_ZN8nlohmann16json_abi_v3_11_314adl_serializerINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEvE9from_jsonIRKNS0_10basic_jsonISt3mapSt6vectorS7_blmdSaS1_SC_IhSaIhEEvEES7_EEDTcmclL_ZNS0_9from_jsonEEcl7forwardIT_Efp_Efp0_Ecvv_EEOSI_RT0_28
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIbvE9from_jsonIRKNS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S6_IhSaIhEEvEEbEEDTcmclL_ZNS0_9from_jsonEEcl7forwardIT_Efp_Efp0_Ecvv_EEOSI_RT0_48
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIdvE9from_jsonIRKNS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S6_IhSaIhEEvEEdEEDTcmclL_ZNS0_9from_jsonEEcl7forwardIT_Efp_Efp0_Ecvv_EEOSI_RT0_12
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIfvE9from_jsonIRKNS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S6_IhSaIhEEvEEfEEDTcmclL_ZNS0_9from_jsonEEcl7forwardIT_Efp_Efp0_Ecvv_EEOSI_RT0_2
_ZN8nlohmann16json_abi_v3_11_314adl_serializerIivE9from_jsonIRKNS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaS1_S6_IhSaIhEEvEEiEEDTcmclL_ZNS0_9from_jsonEEcl7forwardIT_Efp_Efp0_Ecvv_EEOSI_RT0_24
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/adl_serializer.hpp.gcov.html b/html/BayesNet/lib/json/include/nlohmann/adl_serializer.hpp.gcov.html new file mode 100644 index 0000000..7f32a1b --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/adl_serializer.hpp.gcov.html @@ -0,0 +1,131 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/adl_serializer.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann - adl_serializer.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %66
Test Date:2024-04-30 13:17:26Functions:100.0 %2020
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : //     __ _____ _____ _____
+       2              : //  __|  |   __|     |   | |  JSON for Modern C++
+       3              : // |  |  |__   |  |  | | | |  version 3.11.3
+       4              : // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
+       5              : //
+       6              : // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
+       7              : // SPDX-License-Identifier: MIT
+       8              : 
+       9              : #pragma once
+      10              : 
+      11              : #include <utility>
+      12              : 
+      13              : #include <nlohmann/detail/abi_macros.hpp>
+      14              : #include <nlohmann/detail/conversions/from_json.hpp>
+      15              : #include <nlohmann/detail/conversions/to_json.hpp>
+      16              : #include <nlohmann/detail/meta/identity_tag.hpp>
+      17              : 
+      18              : NLOHMANN_JSON_NAMESPACE_BEGIN
+      19              : 
+      20              : /// @sa https://json.nlohmann.me/api/adl_serializer/
+      21              : template<typename ValueType, typename>
+      22              : struct adl_serializer
+      23              : {
+      24              :     /// @brief convert a JSON value to any value type
+      25              :     /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/
+      26              :     template<typename BasicJsonType, typename TargetType = ValueType>
+      27          114 :     static auto from_json(BasicJsonType && j, TargetType& val) noexcept(
+      28              :         noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val)))
+      29              :     -> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), val), void())
+      30              :     {
+      31          114 :         ::nlohmann::from_json(std::forward<BasicJsonType>(j), val);
+      32          114 :     }
+      33              : 
+      34              :     /// @brief convert a JSON value to any value type
+      35              :     /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/
+      36              :     template<typename BasicJsonType, typename TargetType = ValueType>
+      37              :     static auto from_json(BasicJsonType && j) noexcept(
+      38              :     noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {})))
+      39              :     -> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {}))
+      40              :     {
+      41              :         return ::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {});
+      42              :     }
+      43              : 
+      44              :     /// @brief convert any value type to a JSON value
+      45              :     /// @sa https://json.nlohmann.me/api/adl_serializer/to_json/
+      46              :     template<typename BasicJsonType, typename TargetType = ValueType>
+      47          260 :     static auto to_json(BasicJsonType& j, TargetType && val) noexcept(
+      48              :         noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val))))
+      49              :     -> decltype(::nlohmann::to_json(j, std::forward<TargetType>(val)), void())
+      50              :     {
+      51          260 :         ::nlohmann::to_json(j, std::forward<TargetType>(val));
+      52          260 :     }
+      53              : };
+      54              : 
+      55              : NLOHMANN_JSON_NAMESPACE_END
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/byte_container_with_subtype.hpp.func-c.html b/html/BayesNet/lib/json/include/nlohmann/byte_container_with_subtype.hpp.func-c.html new file mode 100644 index 0000000..58e63f2 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/byte_container_with_subtype.hpp.func-c.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/byte_container_with_subtype.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann - byte_container_with_subtype.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %100
Test Date:2024-04-30 13:17:26Functions:0.0 %40
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEC2Ev0
_ZNK8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEE11has_subtypeEv0
_ZNK8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEE7subtypeEv0
_ZNK8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEeqERKS5_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/byte_container_with_subtype.hpp.func.html b/html/BayesNet/lib/json/include/nlohmann/byte_container_with_subtype.hpp.func.html new file mode 100644 index 0000000..011aaec --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/byte_container_with_subtype.hpp.func.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/byte_container_with_subtype.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann - byte_container_with_subtype.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %100
Test Date:2024-04-30 13:17:26Functions:0.0 %40
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEC2Ev0
_ZNK8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEE11has_subtypeEv0
_ZNK8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEE7subtypeEv0
_ZNK8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEeqERKS5_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/byte_container_with_subtype.hpp.gcov.html b/html/BayesNet/lib/json/include/nlohmann/byte_container_with_subtype.hpp.gcov.html new file mode 100644 index 0000000..e2f2596 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/byte_container_with_subtype.hpp.gcov.html @@ -0,0 +1,179 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/byte_container_with_subtype.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann - byte_container_with_subtype.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %100
Test Date:2024-04-30 13:17:26Functions:0.0 %40
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : //     __ _____ _____ _____
+       2              : //  __|  |   __|     |   | |  JSON for Modern C++
+       3              : // |  |  |__   |  |  | | | |  version 3.11.3
+       4              : // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
+       5              : //
+       6              : // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
+       7              : // SPDX-License-Identifier: MIT
+       8              : 
+       9              : #pragma once
+      10              : 
+      11              : #include <cstdint> // uint8_t, uint64_t
+      12              : #include <tuple> // tie
+      13              : #include <utility> // move
+      14              : 
+      15              : #include <nlohmann/detail/abi_macros.hpp>
+      16              : 
+      17              : NLOHMANN_JSON_NAMESPACE_BEGIN
+      18              : 
+      19              : /// @brief an internal type for a backed binary type
+      20              : /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/
+      21              : template<typename BinaryType>
+      22              : class byte_container_with_subtype : public BinaryType
+      23              : {
+      24              :   public:
+      25              :     using container_type = BinaryType;
+      26              :     using subtype_type = std::uint64_t;
+      27              : 
+      28              :     /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
+      29            0 :     byte_container_with_subtype() noexcept(noexcept(container_type()))
+      30            0 :         : container_type()
+      31            0 :     {}
+      32              : 
+      33              :     /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
+      34              :     byte_container_with_subtype(const container_type& b) noexcept(noexcept(container_type(b)))
+      35              :         : container_type(b)
+      36              :     {}
+      37              : 
+      38              :     /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
+      39              :     byte_container_with_subtype(container_type&& b) noexcept(noexcept(container_type(std::move(b))))
+      40              :         : container_type(std::move(b))
+      41              :     {}
+      42              : 
+      43              :     /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
+      44              :     byte_container_with_subtype(const container_type& b, subtype_type subtype_) noexcept(noexcept(container_type(b)))
+      45              :         : container_type(b)
+      46              :         , m_subtype(subtype_)
+      47              :         , m_has_subtype(true)
+      48              :     {}
+      49              : 
+      50              :     /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
+      51              :     byte_container_with_subtype(container_type&& b, subtype_type subtype_) noexcept(noexcept(container_type(std::move(b))))
+      52              :         : container_type(std::move(b))
+      53              :         , m_subtype(subtype_)
+      54              :         , m_has_subtype(true)
+      55              :     {}
+      56              : 
+      57            0 :     bool operator==(const byte_container_with_subtype& rhs) const
+      58              :     {
+      59            0 :         return std::tie(static_cast<const BinaryType&>(*this), m_subtype, m_has_subtype) ==
+      60            0 :                std::tie(static_cast<const BinaryType&>(rhs), rhs.m_subtype, rhs.m_has_subtype);
+      61              :     }
+      62              : 
+      63              :     bool operator!=(const byte_container_with_subtype& rhs) const
+      64              :     {
+      65              :         return !(rhs == *this);
+      66              :     }
+      67              : 
+      68              :     /// @brief sets the binary subtype
+      69              :     /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/set_subtype/
+      70              :     void set_subtype(subtype_type subtype_) noexcept
+      71              :     {
+      72              :         m_subtype = subtype_;
+      73              :         m_has_subtype = true;
+      74              :     }
+      75              : 
+      76              :     /// @brief return the binary subtype
+      77              :     /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/subtype/
+      78            0 :     constexpr subtype_type subtype() const noexcept
+      79              :     {
+      80            0 :         return m_has_subtype ? m_subtype : static_cast<subtype_type>(-1);
+      81              :     }
+      82              : 
+      83              :     /// @brief return whether the value has a subtype
+      84              :     /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/has_subtype/
+      85            0 :     constexpr bool has_subtype() const noexcept
+      86              :     {
+      87            0 :         return m_has_subtype;
+      88              :     }
+      89              : 
+      90              :     /// @brief clears the binary subtype
+      91              :     /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/clear_subtype/
+      92              :     void clear_subtype() noexcept
+      93              :     {
+      94              :         m_subtype = 0;
+      95              :         m_has_subtype = false;
+      96              :     }
+      97              : 
+      98              :   private:
+      99              :     subtype_type m_subtype = 0;
+     100              :     bool m_has_subtype = false;
+     101              : };
+     102              : 
+     103              : NLOHMANN_JSON_NAMESPACE_END
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/conversions/from_json.hpp.func-c.html b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/from_json.hpp.func-c.html new file mode 100644 index 0000000..ae205c5 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/from_json.hpp.func-c.html @@ -0,0 +1,166 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/conversions/from_json.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/conversions - from_json.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:60.9 %4628
Test Date:2024-04-30 13:17:26Functions:100.0 %1111
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail20get_arithmetic_valueINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEdLi0EEEvRKT_RT0_12
_ZN8nlohmann16json_abi_v3_11_36detail9from_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEEvRKT_RNSG_14number_float_tE12
_ZN8nlohmann16json_abi_v3_11_36detail9from_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEfLi0EEEvRKT_RT0_26
_ZN8nlohmann16json_abi_v3_11_36detail9from_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEfLi0EEEvRKT_RT0_2
_ZN8nlohmann16json_abi_v3_11_36detail9from_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEiLi0EEEvRKT_RT0_24
_ZN8nlohmann16json_abi_v3_11_36detail9from_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEEvRKT_RNSG_8string_tE28
_ZN8nlohmann16json_abi_v3_11_36detail9from_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEEvRKT_RNSG_9boolean_tE48
_ZNK8nlohmann16json_abi_v3_11_36detail12from_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERbEEDTcl9from_jsonfp_cl7forwardIT0_Efp0_EEERKT_OSI_114
_ZNK8nlohmann16json_abi_v3_11_36detail12from_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERfEEDTcl9from_jsonfp_cl7forwardIT0_Efp0_EEERKT_OSI_2
_ZNK8nlohmann16json_abi_v3_11_36detail12from_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERdEEDTcl9from_jsonfp_cl7forwardIT0_Efp0_EEERKT_OSI_12
_ZNK8nlohmann16json_abi_v3_11_36detail12from_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERiEEDTcl9from_jsonfp_cl7forwardIT0_Efp0_EEERKT_OSI_24
_ZNK8nlohmann16json_abi_v3_11_36detail12from_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERSC_EEDTcl9from_jsonfp_cl7forwardIT0_Efp0_EEERKT_OSI_28
_ZNK8nlohmann16json_abi_v3_11_36detail12from_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERbEEDTcl9from_jsonfp_cl7forwardIT0_Efp0_EEERKT_OSI_48
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/conversions/from_json.hpp.func.html b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/from_json.hpp.func.html new file mode 100644 index 0000000..295be04 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/from_json.hpp.func.html @@ -0,0 +1,166 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/conversions/from_json.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/conversions - from_json.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:60.9 %4628
Test Date:2024-04-30 13:17:26Functions:100.0 %1111
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail20get_arithmetic_valueINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEdLi0EEEvRKT_RT0_12
_ZN8nlohmann16json_abi_v3_11_36detail9from_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEEvRKT_RNSG_14number_float_tE12
_ZN8nlohmann16json_abi_v3_11_36detail9from_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEEvRKT_RNSG_8string_tE28
_ZN8nlohmann16json_abi_v3_11_36detail9from_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEEvRKT_RNSG_9boolean_tE48
_ZN8nlohmann16json_abi_v3_11_36detail9from_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEfLi0EEEvRKT_RT0_26
_ZN8nlohmann16json_abi_v3_11_36detail9from_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEfLi0EEEvRKT_RT0_2
_ZN8nlohmann16json_abi_v3_11_36detail9from_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEiLi0EEEvRKT_RT0_24
_ZNK8nlohmann16json_abi_v3_11_36detail12from_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERbEEDTcl9from_jsonfp_cl7forwardIT0_Efp0_EEERKT_OSI_114
_ZNK8nlohmann16json_abi_v3_11_36detail12from_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERSC_EEDTcl9from_jsonfp_cl7forwardIT0_Efp0_EEERKT_OSI_28
_ZNK8nlohmann16json_abi_v3_11_36detail12from_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERbEEDTcl9from_jsonfp_cl7forwardIT0_Efp0_EEERKT_OSI_48
_ZNK8nlohmann16json_abi_v3_11_36detail12from_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERdEEDTcl9from_jsonfp_cl7forwardIT0_Efp0_EEERKT_OSI_12
_ZNK8nlohmann16json_abi_v3_11_36detail12from_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERfEEDTcl9from_jsonfp_cl7forwardIT0_Efp0_EEERKT_OSI_2
_ZNK8nlohmann16json_abi_v3_11_36detail12from_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERiEEDTcl9from_jsonfp_cl7forwardIT0_Efp0_EEERKT_OSI_24
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/conversions/from_json.hpp.gcov.html b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/from_json.hpp.gcov.html new file mode 100644 index 0000000..61dbef5 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/from_json.hpp.gcov.html @@ -0,0 +1,573 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/conversions/from_json.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/conversions - from_json.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:60.9 %4628
Test Date:2024-04-30 13:17:26Functions:100.0 %1111
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : //     __ _____ _____ _____
+       2              : //  __|  |   __|     |   | |  JSON for Modern C++
+       3              : // |  |  |__   |  |  | | | |  version 3.11.3
+       4              : // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
+       5              : //
+       6              : // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
+       7              : // SPDX-License-Identifier: MIT
+       8              : 
+       9              : #pragma once
+      10              : 
+      11              : #include <algorithm> // transform
+      12              : #include <array> // array
+      13              : #include <forward_list> // forward_list
+      14              : #include <iterator> // inserter, front_inserter, end
+      15              : #include <map> // map
+      16              : #include <string> // string
+      17              : #include <tuple> // tuple, make_tuple
+      18              : #include <type_traits> // is_arithmetic, is_same, is_enum, underlying_type, is_convertible
+      19              : #include <unordered_map> // unordered_map
+      20              : #include <utility> // pair, declval
+      21              : #include <valarray> // valarray
+      22              : 
+      23              : #include <nlohmann/detail/exceptions.hpp>
+      24              : #include <nlohmann/detail/macro_scope.hpp>
+      25              : #include <nlohmann/detail/meta/cpp_future.hpp>
+      26              : #include <nlohmann/detail/meta/identity_tag.hpp>
+      27              : #include <nlohmann/detail/meta/std_fs.hpp>
+      28              : #include <nlohmann/detail/meta/type_traits.hpp>
+      29              : #include <nlohmann/detail/string_concat.hpp>
+      30              : #include <nlohmann/detail/value_t.hpp>
+      31              : 
+      32              : NLOHMANN_JSON_NAMESPACE_BEGIN
+      33              : namespace detail
+      34              : {
+      35              : 
+      36              : template<typename BasicJsonType>
+      37              : inline void from_json(const BasicJsonType& j, typename std::nullptr_t& n)
+      38              : {
+      39              :     if (JSON_HEDLEY_UNLIKELY(!j.is_null()))
+      40              :     {
+      41              :         JSON_THROW(type_error::create(302, concat("type must be null, but is ", j.type_name()), &j));
+      42              :     }
+      43              :     n = nullptr;
+      44              : }
+      45              : 
+      46              : // overloads for basic_json template parameters
+      47              : template < typename BasicJsonType, typename ArithmeticType,
+      48              :            enable_if_t < std::is_arithmetic<ArithmeticType>::value&&
+      49              :                          !std::is_same<ArithmeticType, typename BasicJsonType::boolean_t>::value,
+      50              :                          int > = 0 >
+      51           12 : void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val)
+      52              : {
+      53           12 :     switch (static_cast<value_t>(j))
+      54              :     {
+      55            0 :         case value_t::number_unsigned:
+      56              :         {
+      57            0 :             val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_unsigned_t*>());
+      58            0 :             break;
+      59              :         }
+      60            0 :         case value_t::number_integer:
+      61              :         {
+      62            0 :             val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_integer_t*>());
+      63            0 :             break;
+      64              :         }
+      65           12 :         case value_t::number_float:
+      66              :         {
+      67           12 :             val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_float_t*>());
+      68           12 :             break;
+      69              :         }
+      70              : 
+      71            0 :         case value_t::null:
+      72              :         case value_t::object:
+      73              :         case value_t::array:
+      74              :         case value_t::string:
+      75              :         case value_t::boolean:
+      76              :         case value_t::binary:
+      77              :         case value_t::discarded:
+      78              :         default:
+      79            0 :             JSON_THROW(type_error::create(302, concat("type must be number, but is ", j.type_name()), &j));
+      80              :     }
+      81           12 : }
+      82              : 
+      83              : template<typename BasicJsonType>
+      84           48 : inline void from_json(const BasicJsonType& j, typename BasicJsonType::boolean_t& b)
+      85              : {
+      86           48 :     if (JSON_HEDLEY_UNLIKELY(!j.is_boolean()))
+      87              :     {
+      88            0 :         JSON_THROW(type_error::create(302, concat("type must be boolean, but is ", j.type_name()), &j));
+      89              :     }
+      90           48 :     b = *j.template get_ptr<const typename BasicJsonType::boolean_t*>();
+      91           48 : }
+      92              : 
+      93              : template<typename BasicJsonType>
+      94           28 : inline void from_json(const BasicJsonType& j, typename BasicJsonType::string_t& s)
+      95              : {
+      96           28 :     if (JSON_HEDLEY_UNLIKELY(!j.is_string()))
+      97              :     {
+      98            0 :         JSON_THROW(type_error::create(302, concat("type must be string, but is ", j.type_name()), &j));
+      99              :     }
+     100           28 :     s = *j.template get_ptr<const typename BasicJsonType::string_t*>();
+     101           28 : }
+     102              : 
+     103              : template <
+     104              :     typename BasicJsonType, typename StringType,
+     105              :     enable_if_t <
+     106              :         std::is_assignable<StringType&, const typename BasicJsonType::string_t>::value
+     107              :         && is_detected_exact<typename BasicJsonType::string_t::value_type, value_type_t, StringType>::value
+     108              :         && !std::is_same<typename BasicJsonType::string_t, StringType>::value
+     109              :         && !is_json_ref<StringType>::value, int > = 0 >
+     110              : inline void from_json(const BasicJsonType& j, StringType& s)
+     111              : {
+     112              :     if (JSON_HEDLEY_UNLIKELY(!j.is_string()))
+     113              :     {
+     114              :         JSON_THROW(type_error::create(302, concat("type must be string, but is ", j.type_name()), &j));
+     115              :     }
+     116              : 
+     117              :     s = *j.template get_ptr<const typename BasicJsonType::string_t*>();
+     118              : }
+     119              : 
+     120              : template<typename BasicJsonType>
+     121           12 : inline void from_json(const BasicJsonType& j, typename BasicJsonType::number_float_t& val)
+     122              : {
+     123           12 :     get_arithmetic_value(j, val);
+     124           12 : }
+     125              : 
+     126              : template<typename BasicJsonType>
+     127              : inline void from_json(const BasicJsonType& j, typename BasicJsonType::number_unsigned_t& val)
+     128              : {
+     129              :     get_arithmetic_value(j, val);
+     130              : }
+     131              : 
+     132              : template<typename BasicJsonType>
+     133              : inline void from_json(const BasicJsonType& j, typename BasicJsonType::number_integer_t& val)
+     134              : {
+     135              :     get_arithmetic_value(j, val);
+     136              : }
+     137              : 
+     138              : #if !JSON_DISABLE_ENUM_SERIALIZATION
+     139              : template<typename BasicJsonType, typename EnumType,
+     140              :          enable_if_t<std::is_enum<EnumType>::value, int> = 0>
+     141              : inline void from_json(const BasicJsonType& j, EnumType& e)
+     142              : {
+     143              :     typename std::underlying_type<EnumType>::type val;
+     144              :     get_arithmetic_value(j, val);
+     145              :     e = static_cast<EnumType>(val);
+     146              : }
+     147              : #endif  // JSON_DISABLE_ENUM_SERIALIZATION
+     148              : 
+     149              : // forward_list doesn't have an insert method
+     150              : template<typename BasicJsonType, typename T, typename Allocator,
+     151              :          enable_if_t<is_getable<BasicJsonType, T>::value, int> = 0>
+     152              : inline void from_json(const BasicJsonType& j, std::forward_list<T, Allocator>& l)
+     153              : {
+     154              :     if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
+     155              :     {
+     156              :         JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j));
+     157              :     }
+     158              :     l.clear();
+     159              :     std::transform(j.rbegin(), j.rend(),
+     160              :                    std::front_inserter(l), [](const BasicJsonType & i)
+     161              :     {
+     162              :         return i.template get<T>();
+     163              :     });
+     164              : }
+     165              : 
+     166              : // valarray doesn't have an insert method
+     167              : template<typename BasicJsonType, typename T,
+     168              :          enable_if_t<is_getable<BasicJsonType, T>::value, int> = 0>
+     169              : inline void from_json(const BasicJsonType& j, std::valarray<T>& l)
+     170              : {
+     171              :     if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
+     172              :     {
+     173              :         JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j));
+     174              :     }
+     175              :     l.resize(j.size());
+     176              :     std::transform(j.begin(), j.end(), std::begin(l),
+     177              :                    [](const BasicJsonType & elem)
+     178              :     {
+     179              :         return elem.template get<T>();
+     180              :     });
+     181              : }
+     182              : 
+     183              : template<typename BasicJsonType, typename T, std::size_t N>
+     184              : auto from_json(const BasicJsonType& j, T (&arr)[N])  // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
+     185              : -> decltype(j.template get<T>(), void())
+     186              : {
+     187              :     for (std::size_t i = 0; i < N; ++i)
+     188              :     {
+     189              :         arr[i] = j.at(i).template get<T>();
+     190              :     }
+     191              : }
+     192              : 
+     193              : template<typename BasicJsonType>
+     194              : inline void from_json_array_impl(const BasicJsonType& j, typename BasicJsonType::array_t& arr, priority_tag<3> /*unused*/)
+     195              : {
+     196              :     arr = *j.template get_ptr<const typename BasicJsonType::array_t*>();
+     197              : }
+     198              : 
+     199              : template<typename BasicJsonType, typename T, std::size_t N>
+     200              : auto from_json_array_impl(const BasicJsonType& j, std::array<T, N>& arr,
+     201              :                           priority_tag<2> /*unused*/)
+     202              : -> decltype(j.template get<T>(), void())
+     203              : {
+     204              :     for (std::size_t i = 0; i < N; ++i)
+     205              :     {
+     206              :         arr[i] = j.at(i).template get<T>();
+     207              :     }
+     208              : }
+     209              : 
+     210              : template<typename BasicJsonType, typename ConstructibleArrayType,
+     211              :          enable_if_t<
+     212              :              std::is_assignable<ConstructibleArrayType&, ConstructibleArrayType>::value,
+     213              :              int> = 0>
+     214              : auto from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<1> /*unused*/)
+     215              : -> decltype(
+     216              :     arr.reserve(std::declval<typename ConstructibleArrayType::size_type>()),
+     217              :     j.template get<typename ConstructibleArrayType::value_type>(),
+     218              :     void())
+     219              : {
+     220              :     using std::end;
+     221              : 
+     222              :     ConstructibleArrayType ret;
+     223              :     ret.reserve(j.size());
+     224              :     std::transform(j.begin(), j.end(),
+     225              :                    std::inserter(ret, end(ret)), [](const BasicJsonType & i)
+     226              :     {
+     227              :         // get<BasicJsonType>() returns *this, this won't call a from_json
+     228              :         // method when value_type is BasicJsonType
+     229              :         return i.template get<typename ConstructibleArrayType::value_type>();
+     230              :     });
+     231              :     arr = std::move(ret);
+     232              : }
+     233              : 
+     234              : template<typename BasicJsonType, typename ConstructibleArrayType,
+     235              :          enable_if_t<
+     236              :              std::is_assignable<ConstructibleArrayType&, ConstructibleArrayType>::value,
+     237              :              int> = 0>
+     238              : inline void from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr,
+     239              :                                  priority_tag<0> /*unused*/)
+     240              : {
+     241              :     using std::end;
+     242              : 
+     243              :     ConstructibleArrayType ret;
+     244              :     std::transform(
+     245              :         j.begin(), j.end(), std::inserter(ret, end(ret)),
+     246              :         [](const BasicJsonType & i)
+     247              :     {
+     248              :         // get<BasicJsonType>() returns *this, this won't call a from_json
+     249              :         // method when value_type is BasicJsonType
+     250              :         return i.template get<typename ConstructibleArrayType::value_type>();
+     251              :     });
+     252              :     arr = std::move(ret);
+     253              : }
+     254              : 
+     255              : template < typename BasicJsonType, typename ConstructibleArrayType,
+     256              :            enable_if_t <
+     257              :                is_constructible_array_type<BasicJsonType, ConstructibleArrayType>::value&&
+     258              :                !is_constructible_object_type<BasicJsonType, ConstructibleArrayType>::value&&
+     259              :                !is_constructible_string_type<BasicJsonType, ConstructibleArrayType>::value&&
+     260              :                !std::is_same<ConstructibleArrayType, typename BasicJsonType::binary_t>::value&&
+     261              :                !is_basic_json<ConstructibleArrayType>::value,
+     262              :                int > = 0 >
+     263              : auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr)
+     264              : -> decltype(from_json_array_impl(j, arr, priority_tag<3> {}),
+     265              : j.template get<typename ConstructibleArrayType::value_type>(),
+     266              : void())
+     267              : {
+     268              :     if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
+     269              :     {
+     270              :         JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j));
+     271              :     }
+     272              : 
+     273              :     from_json_array_impl(j, arr, priority_tag<3> {});
+     274              : }
+     275              : 
+     276              : template < typename BasicJsonType, typename T, std::size_t... Idx >
+     277              : std::array<T, sizeof...(Idx)> from_json_inplace_array_impl(BasicJsonType&& j,
+     278              :         identity_tag<std::array<T, sizeof...(Idx)>> /*unused*/, index_sequence<Idx...> /*unused*/)
+     279              : {
+     280              :     return { { std::forward<BasicJsonType>(j).at(Idx).template get<T>()... } };
+     281              : }
+     282              : 
+     283              : template < typename BasicJsonType, typename T, std::size_t N >
+     284              : auto from_json(BasicJsonType&& j, identity_tag<std::array<T, N>> tag)
+     285              : -> decltype(from_json_inplace_array_impl(std::forward<BasicJsonType>(j), tag, make_index_sequence<N> {}))
+     286              : {
+     287              :     if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
+     288              :     {
+     289              :         JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j));
+     290              :     }
+     291              : 
+     292              :     return from_json_inplace_array_impl(std::forward<BasicJsonType>(j), tag, make_index_sequence<N> {});
+     293              : }
+     294              : 
+     295              : template<typename BasicJsonType>
+     296              : inline void from_json(const BasicJsonType& j, typename BasicJsonType::binary_t& bin)
+     297              : {
+     298              :     if (JSON_HEDLEY_UNLIKELY(!j.is_binary()))
+     299              :     {
+     300              :         JSON_THROW(type_error::create(302, concat("type must be binary, but is ", j.type_name()), &j));
+     301              :     }
+     302              : 
+     303              :     bin = *j.template get_ptr<const typename BasicJsonType::binary_t*>();
+     304              : }
+     305              : 
+     306              : template<typename BasicJsonType, typename ConstructibleObjectType,
+     307              :          enable_if_t<is_constructible_object_type<BasicJsonType, ConstructibleObjectType>::value, int> = 0>
+     308              : inline void from_json(const BasicJsonType& j, ConstructibleObjectType& obj)
+     309              : {
+     310              :     if (JSON_HEDLEY_UNLIKELY(!j.is_object()))
+     311              :     {
+     312              :         JSON_THROW(type_error::create(302, concat("type must be object, but is ", j.type_name()), &j));
+     313              :     }
+     314              : 
+     315              :     ConstructibleObjectType ret;
+     316              :     const auto* inner_object = j.template get_ptr<const typename BasicJsonType::object_t*>();
+     317              :     using value_type = typename ConstructibleObjectType::value_type;
+     318              :     std::transform(
+     319              :         inner_object->begin(), inner_object->end(),
+     320              :         std::inserter(ret, ret.begin()),
+     321              :         [](typename BasicJsonType::object_t::value_type const & p)
+     322              :     {
+     323              :         return value_type(p.first, p.second.template get<typename ConstructibleObjectType::mapped_type>());
+     324              :     });
+     325              :     obj = std::move(ret);
+     326              : }
+     327              : 
+     328              : // overload for arithmetic types, not chosen for basic_json template arguments
+     329              : // (BooleanType, etc..); note: Is it really necessary to provide explicit
+     330              : // overloads for boolean_t etc. in case of a custom BooleanType which is not
+     331              : // an arithmetic type?
+     332              : template < typename BasicJsonType, typename ArithmeticType,
+     333              :            enable_if_t <
+     334              :                std::is_arithmetic<ArithmeticType>::value&&
+     335              :                !std::is_same<ArithmeticType, typename BasicJsonType::number_unsigned_t>::value&&
+     336              :                !std::is_same<ArithmeticType, typename BasicJsonType::number_integer_t>::value&&
+     337              :                !std::is_same<ArithmeticType, typename BasicJsonType::number_float_t>::value&&
+     338              :                !std::is_same<ArithmeticType, typename BasicJsonType::boolean_t>::value,
+     339              :                int > = 0 >
+     340           26 : inline void from_json(const BasicJsonType& j, ArithmeticType& val)
+     341              : {
+     342           26 :     switch (static_cast<value_t>(j))
+     343              :     {
+     344            0 :         case value_t::number_unsigned:
+     345              :         {
+     346            0 :             val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_unsigned_t*>());
+     347            0 :             break;
+     348              :         }
+     349           24 :         case value_t::number_integer:
+     350              :         {
+     351           24 :             val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_integer_t*>());
+     352           24 :             break;
+     353              :         }
+     354            2 :         case value_t::number_float:
+     355              :         {
+     356            2 :             val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_float_t*>());
+     357            2 :             break;
+     358              :         }
+     359            0 :         case value_t::boolean:
+     360              :         {
+     361            0 :             val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::boolean_t*>());
+     362            0 :             break;
+     363              :         }
+     364              : 
+     365            0 :         case value_t::null:
+     366              :         case value_t::object:
+     367              :         case value_t::array:
+     368              :         case value_t::string:
+     369              :         case value_t::binary:
+     370              :         case value_t::discarded:
+     371              :         default:
+     372            0 :             JSON_THROW(type_error::create(302, concat("type must be number, but is ", j.type_name()), &j));
+     373              :     }
+     374           26 : }
+     375              : 
+     376              : template<typename BasicJsonType, typename... Args, std::size_t... Idx>
+     377              : std::tuple<Args...> from_json_tuple_impl_base(BasicJsonType&& j, index_sequence<Idx...> /*unused*/)
+     378              : {
+     379              :     return std::make_tuple(std::forward<BasicJsonType>(j).at(Idx).template get<Args>()...);
+     380              : }
+     381              : 
+     382              : template < typename BasicJsonType, class A1, class A2 >
+     383              : std::pair<A1, A2> from_json_tuple_impl(BasicJsonType&& j, identity_tag<std::pair<A1, A2>> /*unused*/, priority_tag<0> /*unused*/)
+     384              : {
+     385              :     return {std::forward<BasicJsonType>(j).at(0).template get<A1>(),
+     386              :             std::forward<BasicJsonType>(j).at(1).template get<A2>()};
+     387              : }
+     388              : 
+     389              : template<typename BasicJsonType, typename A1, typename A2>
+     390              : inline void from_json_tuple_impl(BasicJsonType&& j, std::pair<A1, A2>& p, priority_tag<1> /*unused*/)
+     391              : {
+     392              :     p = from_json_tuple_impl(std::forward<BasicJsonType>(j), identity_tag<std::pair<A1, A2>> {}, priority_tag<0> {});
+     393              : }
+     394              : 
+     395              : template<typename BasicJsonType, typename... Args>
+     396              : std::tuple<Args...> from_json_tuple_impl(BasicJsonType&& j, identity_tag<std::tuple<Args...>> /*unused*/, priority_tag<2> /*unused*/)
+     397              : {
+     398              :     return from_json_tuple_impl_base<BasicJsonType, Args...>(std::forward<BasicJsonType>(j), index_sequence_for<Args...> {});
+     399              : }
+     400              : 
+     401              : template<typename BasicJsonType, typename... Args>
+     402              : inline void from_json_tuple_impl(BasicJsonType&& j, std::tuple<Args...>& t, priority_tag<3> /*unused*/)
+     403              : {
+     404              :     t = from_json_tuple_impl_base<BasicJsonType, Args...>(std::forward<BasicJsonType>(j), index_sequence_for<Args...> {});
+     405              : }
+     406              : 
+     407              : template<typename BasicJsonType, typename TupleRelated>
+     408              : auto from_json(BasicJsonType&& j, TupleRelated&& t)
+     409              : -> decltype(from_json_tuple_impl(std::forward<BasicJsonType>(j), std::forward<TupleRelated>(t), priority_tag<3> {}))
+     410              : {
+     411              :     if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
+     412              :     {
+     413              :         JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j));
+     414              :     }
+     415              : 
+     416              :     return from_json_tuple_impl(std::forward<BasicJsonType>(j), std::forward<TupleRelated>(t), priority_tag<3> {});
+     417              : }
+     418              : 
+     419              : template < typename BasicJsonType, typename Key, typename Value, typename Compare, typename Allocator,
+     420              :            typename = enable_if_t < !std::is_constructible <
+     421              :                                         typename BasicJsonType::string_t, Key >::value >>
+     422              : inline void from_json(const BasicJsonType& j, std::map<Key, Value, Compare, Allocator>& m)
+     423              : {
+     424              :     if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
+     425              :     {
+     426              :         JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j));
+     427              :     }
+     428              :     m.clear();
+     429              :     for (const auto& p : j)
+     430              :     {
+     431              :         if (JSON_HEDLEY_UNLIKELY(!p.is_array()))
+     432              :         {
+     433              :             JSON_THROW(type_error::create(302, concat("type must be array, but is ", p.type_name()), &j));
+     434              :         }
+     435              :         m.emplace(p.at(0).template get<Key>(), p.at(1).template get<Value>());
+     436              :     }
+     437              : }
+     438              : 
+     439              : template < typename BasicJsonType, typename Key, typename Value, typename Hash, typename KeyEqual, typename Allocator,
+     440              :            typename = enable_if_t < !std::is_constructible <
+     441              :                                         typename BasicJsonType::string_t, Key >::value >>
+     442              : inline void from_json(const BasicJsonType& j, std::unordered_map<Key, Value, Hash, KeyEqual, Allocator>& m)
+     443              : {
+     444              :     if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
+     445              :     {
+     446              :         JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j));
+     447              :     }
+     448              :     m.clear();
+     449              :     for (const auto& p : j)
+     450              :     {
+     451              :         if (JSON_HEDLEY_UNLIKELY(!p.is_array()))
+     452              :         {
+     453              :             JSON_THROW(type_error::create(302, concat("type must be array, but is ", p.type_name()), &j));
+     454              :         }
+     455              :         m.emplace(p.at(0).template get<Key>(), p.at(1).template get<Value>());
+     456              :     }
+     457              : }
+     458              : 
+     459              : #if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM
+     460              : template<typename BasicJsonType>
+     461              : inline void from_json(const BasicJsonType& j, std_fs::path& p)
+     462              : {
+     463              :     if (JSON_HEDLEY_UNLIKELY(!j.is_string()))
+     464              :     {
+     465              :         JSON_THROW(type_error::create(302, concat("type must be string, but is ", j.type_name()), &j));
+     466              :     }
+     467              :     p = *j.template get_ptr<const typename BasicJsonType::string_t*>();
+     468              : }
+     469              : #endif
+     470              : 
+     471              : struct from_json_fn
+     472              : {
+     473              :     template<typename BasicJsonType, typename T>
+     474          114 :     auto operator()(const BasicJsonType& j, T&& val) const
+     475              :     noexcept(noexcept(from_json(j, std::forward<T>(val))))
+     476              :     -> decltype(from_json(j, std::forward<T>(val)))
+     477              :     {
+     478          114 :         return from_json(j, std::forward<T>(val));
+     479              :     }
+     480              : };
+     481              : 
+     482              : }  // namespace detail
+     483              : 
+     484              : #ifndef JSON_HAS_CPP_17
+     485              : /// namespace to hold default `from_json` function
+     486              : /// to see why this is required:
+     487              : /// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html
+     488              : namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces)
+     489              : {
+     490              : #endif
+     491              : JSON_INLINE_VARIABLE constexpr const auto& from_json = // NOLINT(misc-definitions-in-headers)
+     492              :     detail::static_const<detail::from_json_fn>::value;
+     493              : #ifndef JSON_HAS_CPP_17
+     494              : }  // namespace
+     495              : #endif
+     496              : 
+     497              : NLOHMANN_JSON_NAMESPACE_END
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/conversions/index-sort-f.html b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/index-sort-f.html new file mode 100644 index 0000000..edf5467 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/index-sort-f.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/conversions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/conversionsCoverageTotalHit
Test:coverage.infoLines:77.8 %334260
Test Date:2024-04-30 13:17:26Functions:100.0 %7070
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
from_json.hpp +
60.9%60.9%
+
60.9 %4628100.0 %1111
to_chars.hpp +
77.0%77.0%
+
77.0 %244188100.0 %1616
to_json.hpp +
100.0%
+
100.0 %4444100.0 %4343
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/conversions/index-sort-l.html b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/index-sort-l.html new file mode 100644 index 0000000..1f0ec9a --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/index-sort-l.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/conversions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/conversionsCoverageTotalHit
Test:coverage.infoLines:77.8 %334260
Test Date:2024-04-30 13:17:26Functions:100.0 %7070
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
from_json.hpp +
60.9%60.9%
+
60.9 %4628100.0 %1111
to_chars.hpp +
77.0%77.0%
+
77.0 %244188100.0 %1616
to_json.hpp +
100.0%
+
100.0 %4444100.0 %4343
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/conversions/index.html b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/index.html new file mode 100644 index 0000000..69924e9 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/index.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/conversions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/conversionsCoverageTotalHit
Test:coverage.infoLines:77.8 %334260
Test Date:2024-04-30 13:17:26Functions:100.0 %7070
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
from_json.hpp +
60.9%60.9%
+
60.9 %4628100.0 %1111
to_chars.hpp +
77.0%77.0%
+
77.0 %244188100.0 %1616
to_json.hpp +
100.0%
+
100.0 %4444100.0 %4343
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/conversions/to_chars.hpp.func-c.html b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/to_chars.hpp.func-c.html new file mode 100644 index 0000000..3ec26cc --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/to_chars.hpp.func-c.html @@ -0,0 +1,187 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/conversions/to_chars.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/conversions - to_chars.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:77.0 %244188
Test Date:2024-04-30 13:17:26Functions:100.0 %1616
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl15append_exponentEPci2
_ZN8nlohmann16json_abi_v3_11_36detail8to_charsIdEEPcS3_PKcT_8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl12grisu2_roundEPcimmmm8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl13format_bufferEPciiii8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl16grisu2_digit_genEPcRiS4_NS2_5diyfpES5_S5_8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl16reinterpret_bitsImdEET_T0_8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl18compute_boundariesIdEENS2_10boundariesET_8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl18find_largest_pow10EjRj8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl36get_cached_power_for_binary_exponentEi8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl5diyfp12normalize_toERKS3_i8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl6grisu2EPcRiS4_NS2_5diyfpES5_S5_8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl6grisu2IdEEvPcRiS5_T_8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl5diyfp3subERKS3_S5_16
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl5diyfp9normalizeES3_16
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl5diyfp3mulERKS3_S5_24
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl5diyfpC2Emi104
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/conversions/to_chars.hpp.func.html b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/to_chars.hpp.func.html new file mode 100644 index 0000000..239e589 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/to_chars.hpp.func.html @@ -0,0 +1,187 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/conversions/to_chars.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/conversions - to_chars.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:77.0 %244188
Test Date:2024-04-30 13:17:26Functions:100.0 %1616
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail8to_charsIdEEPcS3_PKcT_8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl12grisu2_roundEPcimmmm8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl13format_bufferEPciiii8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl15append_exponentEPci2
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl16grisu2_digit_genEPcRiS4_NS2_5diyfpES5_S5_8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl16reinterpret_bitsImdEET_T0_8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl18compute_boundariesIdEENS2_10boundariesET_8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl18find_largest_pow10EjRj8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl36get_cached_power_for_binary_exponentEi8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl5diyfp12normalize_toERKS3_i8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl5diyfp3mulERKS3_S5_24
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl5diyfp3subERKS3_S5_16
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl5diyfp9normalizeES3_16
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl5diyfpC2Emi104
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl6grisu2EPcRiS4_NS2_5diyfpES5_S5_8
_ZN8nlohmann16json_abi_v3_11_36detail9dtoa_impl6grisu2IdEEvPcRiS5_T_8
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/conversions/to_chars.hpp.gcov.html b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/to_chars.hpp.gcov.html new file mode 100644 index 0000000..d1cb92a --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/to_chars.hpp.gcov.html @@ -0,0 +1,1194 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/conversions/to_chars.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/conversions - to_chars.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:77.0 %244188
Test Date:2024-04-30 13:17:26Functions:100.0 %1616
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : //     __ _____ _____ _____
+       2              : //  __|  |   __|     |   | |  JSON for Modern C++
+       3              : // |  |  |__   |  |  | | | |  version 3.11.3
+       4              : // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
+       5              : //
+       6              : // SPDX-FileCopyrightText: 2009 Florian Loitsch <https://florian.loitsch.com/>
+       7              : // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
+       8              : // SPDX-License-Identifier: MIT
+       9              : 
+      10              : #pragma once
+      11              : 
+      12              : #include <array> // array
+      13              : #include <cmath>   // signbit, isfinite
+      14              : #include <cstdint> // intN_t, uintN_t
+      15              : #include <cstring> // memcpy, memmove
+      16              : #include <limits> // numeric_limits
+      17              : #include <type_traits> // conditional
+      18              : 
+      19              : #include <nlohmann/detail/macro_scope.hpp>
+      20              : 
+      21              : NLOHMANN_JSON_NAMESPACE_BEGIN
+      22              : namespace detail
+      23              : {
+      24              : 
+      25              : /*!
+      26              : @brief implements the Grisu2 algorithm for binary to decimal floating-point
+      27              : conversion.
+      28              : 
+      29              : This implementation is a slightly modified version of the reference
+      30              : implementation which may be obtained from
+      31              : http://florian.loitsch.com/publications (bench.tar.gz).
+      32              : 
+      33              : The code is distributed under the MIT license, Copyright (c) 2009 Florian Loitsch.
+      34              : 
+      35              : For a detailed description of the algorithm see:
+      36              : 
+      37              : [1] Loitsch, "Printing Floating-Point Numbers Quickly and Accurately with
+      38              :     Integers", Proceedings of the ACM SIGPLAN 2010 Conference on Programming
+      39              :     Language Design and Implementation, PLDI 2010
+      40              : [2] Burger, Dybvig, "Printing Floating-Point Numbers Quickly and Accurately",
+      41              :     Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language
+      42              :     Design and Implementation, PLDI 1996
+      43              : */
+      44              : namespace dtoa_impl
+      45              : {
+      46              : 
+      47              : template<typename Target, typename Source>
+      48            8 : Target reinterpret_bits(const Source source)
+      49              : {
+      50              :     static_assert(sizeof(Target) == sizeof(Source), "size mismatch");
+      51              : 
+      52              :     Target target;
+      53            8 :     std::memcpy(&target, &source, sizeof(Source));
+      54            8 :     return target;
+      55              : }
+      56              : 
+      57              : struct diyfp // f * 2^e
+      58              : {
+      59              :     static constexpr int kPrecision = 64; // = q
+      60              : 
+      61              :     std::uint64_t f = 0;
+      62              :     int e = 0;
+      63              : 
+      64          104 :     constexpr diyfp(std::uint64_t f_, int e_) noexcept : f(f_), e(e_) {}
+      65              : 
+      66              :     /*!
+      67              :     @brief returns x - y
+      68              :     @pre x.e == y.e and x.f >= y.f
+      69              :     */
+      70           16 :     static diyfp sub(const diyfp& x, const diyfp& y) noexcept
+      71              :     {
+      72           16 :         JSON_ASSERT(x.e == y.e);
+      73           16 :         JSON_ASSERT(x.f >= y.f);
+      74              : 
+      75           16 :         return {x.f - y.f, x.e};
+      76              :     }
+      77              : 
+      78              :     /*!
+      79              :     @brief returns x * y
+      80              :     @note The result is rounded. (Only the upper q bits are returned.)
+      81              :     */
+      82           24 :     static diyfp mul(const diyfp& x, const diyfp& y) noexcept
+      83              :     {
+      84              :         static_assert(kPrecision == 64, "internal error");
+      85              : 
+      86              :         // Computes:
+      87              :         //  f = round((x.f * y.f) / 2^q)
+      88              :         //  e = x.e + y.e + q
+      89              : 
+      90              :         // Emulate the 64-bit * 64-bit multiplication:
+      91              :         //
+      92              :         // p = u * v
+      93              :         //   = (u_lo + 2^32 u_hi) (v_lo + 2^32 v_hi)
+      94              :         //   = (u_lo v_lo         ) + 2^32 ((u_lo v_hi         ) + (u_hi v_lo         )) + 2^64 (u_hi v_hi         )
+      95              :         //   = (p0                ) + 2^32 ((p1                ) + (p2                )) + 2^64 (p3                )
+      96              :         //   = (p0_lo + 2^32 p0_hi) + 2^32 ((p1_lo + 2^32 p1_hi) + (p2_lo + 2^32 p2_hi)) + 2^64 (p3                )
+      97              :         //   = (p0_lo             ) + 2^32 (p0_hi + p1_lo + p2_lo                      ) + 2^64 (p1_hi + p2_hi + p3)
+      98              :         //   = (p0_lo             ) + 2^32 (Q                                          ) + 2^64 (H                 )
+      99              :         //   = (p0_lo             ) + 2^32 (Q_lo + 2^32 Q_hi                           ) + 2^64 (H                 )
+     100              :         //
+     101              :         // (Since Q might be larger than 2^32 - 1)
+     102              :         //
+     103              :         //   = (p0_lo + 2^32 Q_lo) + 2^64 (Q_hi + H)
+     104              :         //
+     105              :         // (Q_hi + H does not overflow a 64-bit int)
+     106              :         //
+     107              :         //   = p_lo + 2^64 p_hi
+     108              : 
+     109           24 :         const std::uint64_t u_lo = x.f & 0xFFFFFFFFu;
+     110           24 :         const std::uint64_t u_hi = x.f >> 32u;
+     111           24 :         const std::uint64_t v_lo = y.f & 0xFFFFFFFFu;
+     112           24 :         const std::uint64_t v_hi = y.f >> 32u;
+     113              : 
+     114           24 :         const std::uint64_t p0 = u_lo * v_lo;
+     115           24 :         const std::uint64_t p1 = u_lo * v_hi;
+     116           24 :         const std::uint64_t p2 = u_hi * v_lo;
+     117           24 :         const std::uint64_t p3 = u_hi * v_hi;
+     118              : 
+     119           24 :         const std::uint64_t p0_hi = p0 >> 32u;
+     120           24 :         const std::uint64_t p1_lo = p1 & 0xFFFFFFFFu;
+     121           24 :         const std::uint64_t p1_hi = p1 >> 32u;
+     122           24 :         const std::uint64_t p2_lo = p2 & 0xFFFFFFFFu;
+     123           24 :         const std::uint64_t p2_hi = p2 >> 32u;
+     124              : 
+     125           24 :         std::uint64_t Q = p0_hi + p1_lo + p2_lo;
+     126              : 
+     127              :         // The full product might now be computed as
+     128              :         //
+     129              :         // p_hi = p3 + p2_hi + p1_hi + (Q >> 32)
+     130              :         // p_lo = p0_lo + (Q << 32)
+     131              :         //
+     132              :         // But in this particular case here, the full p_lo is not required.
+     133              :         // Effectively we only need to add the highest bit in p_lo to p_hi (and
+     134              :         // Q_hi + 1 does not overflow).
+     135              : 
+     136           24 :         Q += std::uint64_t{1} << (64u - 32u - 1u); // round, ties up
+     137              : 
+     138           24 :         const std::uint64_t h = p3 + p2_hi + p1_hi + (Q >> 32u);
+     139              : 
+     140           24 :         return {h, x.e + y.e + 64};
+     141              :     }
+     142              : 
+     143              :     /*!
+     144              :     @brief normalize x such that the significand is >= 2^(q-1)
+     145              :     @pre x.f != 0
+     146              :     */
+     147           16 :     static diyfp normalize(diyfp x) noexcept
+     148              :     {
+     149           16 :         JSON_ASSERT(x.f != 0);
+     150              : 
+     151          184 :         while ((x.f >> 63u) == 0)
+     152              :         {
+     153          168 :             x.f <<= 1u;
+     154          168 :             x.e--;
+     155              :         }
+     156              : 
+     157           16 :         return x;
+     158              :     }
+     159              : 
+     160              :     /*!
+     161              :     @brief normalize x such that the result has the exponent E
+     162              :     @pre e >= x.e and the upper e - x.e bits of x.f must be zero.
+     163              :     */
+     164            8 :     static diyfp normalize_to(const diyfp& x, const int target_exponent) noexcept
+     165              :     {
+     166            8 :         const int delta = x.e - target_exponent;
+     167              : 
+     168            8 :         JSON_ASSERT(delta >= 0);
+     169            8 :         JSON_ASSERT(((x.f << delta) >> delta) == x.f);
+     170              : 
+     171            8 :         return {x.f << delta, target_exponent};
+     172              :     }
+     173              : };
+     174              : 
+     175              : struct boundaries
+     176              : {
+     177              :     diyfp w;
+     178              :     diyfp minus;
+     179              :     diyfp plus;
+     180              : };
+     181              : 
+     182              : /*!
+     183              : Compute the (normalized) diyfp representing the input number 'value' and its
+     184              : boundaries.
+     185              : 
+     186              : @pre value must be finite and positive
+     187              : */
+     188              : template<typename FloatType>
+     189            8 : boundaries compute_boundaries(FloatType value)
+     190              : {
+     191            8 :     JSON_ASSERT(std::isfinite(value));
+     192            8 :     JSON_ASSERT(value > 0);
+     193              : 
+     194              :     // Convert the IEEE representation into a diyfp.
+     195              :     //
+     196              :     // If v is denormal:
+     197              :     //      value = 0.F * 2^(1 - bias) = (          F) * 2^(1 - bias - (p-1))
+     198              :     // If v is normalized:
+     199              :     //      value = 1.F * 2^(E - bias) = (2^(p-1) + F) * 2^(E - bias - (p-1))
+     200              : 
+     201              :     static_assert(std::numeric_limits<FloatType>::is_iec559,
+     202              :                   "internal error: dtoa_short requires an IEEE-754 floating-point implementation");
+     203              : 
+     204            8 :     constexpr int      kPrecision = std::numeric_limits<FloatType>::digits; // = p (includes the hidden bit)
+     205            8 :     constexpr int      kBias      = std::numeric_limits<FloatType>::max_exponent - 1 + (kPrecision - 1);
+     206            8 :     constexpr int      kMinExp    = 1 - kBias;
+     207            8 :     constexpr std::uint64_t kHiddenBit = std::uint64_t{1} << (kPrecision - 1); // = 2^(p-1)
+     208              : 
+     209              :     using bits_type = typename std::conditional<kPrecision == 24, std::uint32_t, std::uint64_t >::type;
+     210              : 
+     211            8 :     const auto bits = static_cast<std::uint64_t>(reinterpret_bits<bits_type>(value));
+     212            8 :     const std::uint64_t E = bits >> (kPrecision - 1);
+     213            8 :     const std::uint64_t F = bits & (kHiddenBit - 1);
+     214              : 
+     215            8 :     const bool is_denormal = E == 0;
+     216            8 :     const diyfp v = is_denormal
+     217            8 :                     ? diyfp(F, kMinExp)
+     218              :                     : diyfp(F + kHiddenBit, static_cast<int>(E) - kBias);
+     219              : 
+     220              :     // Compute the boundaries m- and m+ of the floating-point value
+     221              :     // v = f * 2^e.
+     222              :     //
+     223              :     // Determine v- and v+, the floating-point predecessor and successor if v,
+     224              :     // respectively.
+     225              :     //
+     226              :     //      v- = v - 2^e        if f != 2^(p-1) or e == e_min                (A)
+     227              :     //         = v - 2^(e-1)    if f == 2^(p-1) and e > e_min                (B)
+     228              :     //
+     229              :     //      v+ = v + 2^e
+     230              :     //
+     231              :     // Let m- = (v- + v) / 2 and m+ = (v + v+) / 2. All real numbers _strictly_
+     232              :     // between m- and m+ round to v, regardless of how the input rounding
+     233              :     // algorithm breaks ties.
+     234              :     //
+     235              :     //      ---+-------------+-------------+-------------+-------------+---  (A)
+     236              :     //         v-            m-            v             m+            v+
+     237              :     //
+     238              :     //      -----------------+------+------+-------------+-------------+---  (B)
+     239              :     //                       v-     m-     v             m+            v+
+     240              : 
+     241            8 :     const bool lower_boundary_is_closer = F == 0 && E > 1;
+     242            8 :     const diyfp m_plus = diyfp(2 * v.f + 1, v.e - 1);
+     243            8 :     const diyfp m_minus = lower_boundary_is_closer
+     244            8 :                           ? diyfp(4 * v.f - 1, v.e - 2)  // (B)
+     245            8 :                           : diyfp(2 * v.f - 1, v.e - 1); // (A)
+     246              : 
+     247              :     // Determine the normalized w+ = m+.
+     248            8 :     const diyfp w_plus = diyfp::normalize(m_plus);
+     249              : 
+     250              :     // Determine w- = m- such that e_(w-) = e_(w+).
+     251            8 :     const diyfp w_minus = diyfp::normalize_to(m_minus, w_plus.e);
+     252              : 
+     253            8 :     return {diyfp::normalize(v), w_minus, w_plus};
+     254              : }
+     255              : 
+     256              : // Given normalized diyfp w, Grisu needs to find a (normalized) cached
+     257              : // power-of-ten c, such that the exponent of the product c * w = f * 2^e lies
+     258              : // within a certain range [alpha, gamma] (Definition 3.2 from [1])
+     259              : //
+     260              : //      alpha <= e = e_c + e_w + q <= gamma
+     261              : //
+     262              : // or
+     263              : //
+     264              : //      f_c * f_w * 2^alpha <= f_c 2^(e_c) * f_w 2^(e_w) * 2^q
+     265              : //                          <= f_c * f_w * 2^gamma
+     266              : //
+     267              : // Since c and w are normalized, i.e. 2^(q-1) <= f < 2^q, this implies
+     268              : //
+     269              : //      2^(q-1) * 2^(q-1) * 2^alpha <= c * w * 2^q < 2^q * 2^q * 2^gamma
+     270              : //
+     271              : // or
+     272              : //
+     273              : //      2^(q - 2 + alpha) <= c * w < 2^(q + gamma)
+     274              : //
+     275              : // The choice of (alpha,gamma) determines the size of the table and the form of
+     276              : // the digit generation procedure. Using (alpha,gamma)=(-60,-32) works out well
+     277              : // in practice:
+     278              : //
+     279              : // The idea is to cut the number c * w = f * 2^e into two parts, which can be
+     280              : // processed independently: An integral part p1, and a fractional part p2:
+     281              : //
+     282              : //      f * 2^e = ( (f div 2^-e) * 2^-e + (f mod 2^-e) ) * 2^e
+     283              : //              = (f div 2^-e) + (f mod 2^-e) * 2^e
+     284              : //              = p1 + p2 * 2^e
+     285              : //
+     286              : // The conversion of p1 into decimal form requires a series of divisions and
+     287              : // modulos by (a power of) 10. These operations are faster for 32-bit than for
+     288              : // 64-bit integers, so p1 should ideally fit into a 32-bit integer. This can be
+     289              : // achieved by choosing
+     290              : //
+     291              : //      -e >= 32   or   e <= -32 := gamma
+     292              : //
+     293              : // In order to convert the fractional part
+     294              : //
+     295              : //      p2 * 2^e = p2 / 2^-e = d[-1] / 10^1 + d[-2] / 10^2 + ...
+     296              : //
+     297              : // into decimal form, the fraction is repeatedly multiplied by 10 and the digits
+     298              : // d[-i] are extracted in order:
+     299              : //
+     300              : //      (10 * p2) div 2^-e = d[-1]
+     301              : //      (10 * p2) mod 2^-e = d[-2] / 10^1 + ...
+     302              : //
+     303              : // The multiplication by 10 must not overflow. It is sufficient to choose
+     304              : //
+     305              : //      10 * p2 < 16 * p2 = 2^4 * p2 <= 2^64.
+     306              : //
+     307              : // Since p2 = f mod 2^-e < 2^-e,
+     308              : //
+     309              : //      -e <= 60   or   e >= -60 := alpha
+     310              : 
+     311              : constexpr int kAlpha = -60;
+     312              : constexpr int kGamma = -32;
+     313              : 
+     314              : struct cached_power // c = f * 2^e ~= 10^k
+     315              : {
+     316              :     std::uint64_t f;
+     317              :     int e;
+     318              :     int k;
+     319              : };
+     320              : 
+     321              : /*!
+     322              : For a normalized diyfp w = f * 2^e, this function returns a (normalized) cached
+     323              : power-of-ten c = f_c * 2^e_c, such that the exponent of the product w * c
+     324              : satisfies (Definition 3.2 from [1])
+     325              : 
+     326              :      alpha <= e_c + e + q <= gamma.
+     327              : */
+     328            8 : inline cached_power get_cached_power_for_binary_exponent(int e)
+     329              : {
+     330              :     // Now
+     331              :     //
+     332              :     //      alpha <= e_c + e + q <= gamma                                    (1)
+     333              :     //      ==> f_c * 2^alpha <= c * 2^e * 2^q
+     334              :     //
+     335              :     // and since the c's are normalized, 2^(q-1) <= f_c,
+     336              :     //
+     337              :     //      ==> 2^(q - 1 + alpha) <= c * 2^(e + q)
+     338              :     //      ==> 2^(alpha - e - 1) <= c
+     339              :     //
+     340              :     // If c were an exact power of ten, i.e. c = 10^k, one may determine k as
+     341              :     //
+     342              :     //      k = ceil( log_10( 2^(alpha - e - 1) ) )
+     343              :     //        = ceil( (alpha - e - 1) * log_10(2) )
+     344              :     //
+     345              :     // From the paper:
+     346              :     // "In theory the result of the procedure could be wrong since c is rounded,
+     347              :     //  and the computation itself is approximated [...]. In practice, however,
+     348              :     //  this simple function is sufficient."
+     349              :     //
+     350              :     // For IEEE double precision floating-point numbers converted into
+     351              :     // normalized diyfp's w = f * 2^e, with q = 64,
+     352              :     //
+     353              :     //      e >= -1022      (min IEEE exponent)
+     354              :     //           -52        (p - 1)
+     355              :     //           -52        (p - 1, possibly normalize denormal IEEE numbers)
+     356              :     //           -11        (normalize the diyfp)
+     357              :     //         = -1137
+     358              :     //
+     359              :     // and
+     360              :     //
+     361              :     //      e <= +1023      (max IEEE exponent)
+     362              :     //           -52        (p - 1)
+     363              :     //           -11        (normalize the diyfp)
+     364              :     //         = 960
+     365              :     //
+     366              :     // This binary exponent range [-1137,960] results in a decimal exponent
+     367              :     // range [-307,324]. One does not need to store a cached power for each
+     368              :     // k in this range. For each such k it suffices to find a cached power
+     369              :     // such that the exponent of the product lies in [alpha,gamma].
+     370              :     // This implies that the difference of the decimal exponents of adjacent
+     371              :     // table entries must be less than or equal to
+     372              :     //
+     373              :     //      floor( (gamma - alpha) * log_10(2) ) = 8.
+     374              :     //
+     375              :     // (A smaller distance gamma-alpha would require a larger table.)
+     376              : 
+     377              :     // NB:
+     378              :     // Actually this function returns c, such that -60 <= e_c + e + 64 <= -34.
+     379              : 
+     380            8 :     constexpr int kCachedPowersMinDecExp = -300;
+     381            8 :     constexpr int kCachedPowersDecStep = 8;
+     382              : 
+     383              :     static constexpr std::array<cached_power, 79> kCachedPowers =
+     384              :     {
+     385              :         {
+     386              :             { 0xAB70FE17C79AC6CA, -1060, -300 },
+     387              :             { 0xFF77B1FCBEBCDC4F, -1034, -292 },
+     388              :             { 0xBE5691EF416BD60C, -1007, -284 },
+     389              :             { 0x8DD01FAD907FFC3C,  -980, -276 },
+     390              :             { 0xD3515C2831559A83,  -954, -268 },
+     391              :             { 0x9D71AC8FADA6C9B5,  -927, -260 },
+     392              :             { 0xEA9C227723EE8BCB,  -901, -252 },
+     393              :             { 0xAECC49914078536D,  -874, -244 },
+     394              :             { 0x823C12795DB6CE57,  -847, -236 },
+     395              :             { 0xC21094364DFB5637,  -821, -228 },
+     396              :             { 0x9096EA6F3848984F,  -794, -220 },
+     397              :             { 0xD77485CB25823AC7,  -768, -212 },
+     398              :             { 0xA086CFCD97BF97F4,  -741, -204 },
+     399              :             { 0xEF340A98172AACE5,  -715, -196 },
+     400              :             { 0xB23867FB2A35B28E,  -688, -188 },
+     401              :             { 0x84C8D4DFD2C63F3B,  -661, -180 },
+     402              :             { 0xC5DD44271AD3CDBA,  -635, -172 },
+     403              :             { 0x936B9FCEBB25C996,  -608, -164 },
+     404              :             { 0xDBAC6C247D62A584,  -582, -156 },
+     405              :             { 0xA3AB66580D5FDAF6,  -555, -148 },
+     406              :             { 0xF3E2F893DEC3F126,  -529, -140 },
+     407              :             { 0xB5B5ADA8AAFF80B8,  -502, -132 },
+     408              :             { 0x87625F056C7C4A8B,  -475, -124 },
+     409              :             { 0xC9BCFF6034C13053,  -449, -116 },
+     410              :             { 0x964E858C91BA2655,  -422, -108 },
+     411              :             { 0xDFF9772470297EBD,  -396, -100 },
+     412              :             { 0xA6DFBD9FB8E5B88F,  -369,  -92 },
+     413              :             { 0xF8A95FCF88747D94,  -343,  -84 },
+     414              :             { 0xB94470938FA89BCF,  -316,  -76 },
+     415              :             { 0x8A08F0F8BF0F156B,  -289,  -68 },
+     416              :             { 0xCDB02555653131B6,  -263,  -60 },
+     417              :             { 0x993FE2C6D07B7FAC,  -236,  -52 },
+     418              :             { 0xE45C10C42A2B3B06,  -210,  -44 },
+     419              :             { 0xAA242499697392D3,  -183,  -36 },
+     420              :             { 0xFD87B5F28300CA0E,  -157,  -28 },
+     421              :             { 0xBCE5086492111AEB,  -130,  -20 },
+     422              :             { 0x8CBCCC096F5088CC,  -103,  -12 },
+     423              :             { 0xD1B71758E219652C,   -77,   -4 },
+     424              :             { 0x9C40000000000000,   -50,    4 },
+     425              :             { 0xE8D4A51000000000,   -24,   12 },
+     426              :             { 0xAD78EBC5AC620000,     3,   20 },
+     427              :             { 0x813F3978F8940984,    30,   28 },
+     428              :             { 0xC097CE7BC90715B3,    56,   36 },
+     429              :             { 0x8F7E32CE7BEA5C70,    83,   44 },
+     430              :             { 0xD5D238A4ABE98068,   109,   52 },
+     431              :             { 0x9F4F2726179A2245,   136,   60 },
+     432              :             { 0xED63A231D4C4FB27,   162,   68 },
+     433              :             { 0xB0DE65388CC8ADA8,   189,   76 },
+     434              :             { 0x83C7088E1AAB65DB,   216,   84 },
+     435              :             { 0xC45D1DF942711D9A,   242,   92 },
+     436              :             { 0x924D692CA61BE758,   269,  100 },
+     437              :             { 0xDA01EE641A708DEA,   295,  108 },
+     438              :             { 0xA26DA3999AEF774A,   322,  116 },
+     439              :             { 0xF209787BB47D6B85,   348,  124 },
+     440              :             { 0xB454E4A179DD1877,   375,  132 },
+     441              :             { 0x865B86925B9BC5C2,   402,  140 },
+     442              :             { 0xC83553C5C8965D3D,   428,  148 },
+     443              :             { 0x952AB45CFA97A0B3,   455,  156 },
+     444              :             { 0xDE469FBD99A05FE3,   481,  164 },
+     445              :             { 0xA59BC234DB398C25,   508,  172 },
+     446              :             { 0xF6C69A72A3989F5C,   534,  180 },
+     447              :             { 0xB7DCBF5354E9BECE,   561,  188 },
+     448              :             { 0x88FCF317F22241E2,   588,  196 },
+     449              :             { 0xCC20CE9BD35C78A5,   614,  204 },
+     450              :             { 0x98165AF37B2153DF,   641,  212 },
+     451              :             { 0xE2A0B5DC971F303A,   667,  220 },
+     452              :             { 0xA8D9D1535CE3B396,   694,  228 },
+     453              :             { 0xFB9B7CD9A4A7443C,   720,  236 },
+     454              :             { 0xBB764C4CA7A44410,   747,  244 },
+     455              :             { 0x8BAB8EEFB6409C1A,   774,  252 },
+     456              :             { 0xD01FEF10A657842C,   800,  260 },
+     457              :             { 0x9B10A4E5E9913129,   827,  268 },
+     458              :             { 0xE7109BFBA19C0C9D,   853,  276 },
+     459              :             { 0xAC2820D9623BF429,   880,  284 },
+     460              :             { 0x80444B5E7AA7CF85,   907,  292 },
+     461              :             { 0xBF21E44003ACDD2D,   933,  300 },
+     462              :             { 0x8E679C2F5E44FF8F,   960,  308 },
+     463              :             { 0xD433179D9C8CB841,   986,  316 },
+     464              :             { 0x9E19DB92B4E31BA9,  1013,  324 },
+     465              :         }
+     466              :     };
+     467              : 
+     468              :     // This computation gives exactly the same results for k as
+     469              :     //      k = ceil((kAlpha - e - 1) * 0.30102999566398114)
+     470              :     // for |e| <= 1500, but doesn't require floating-point operations.
+     471              :     // NB: log_10(2) ~= 78913 / 2^18
+     472            8 :     JSON_ASSERT(e >= -1500);
+     473            8 :     JSON_ASSERT(e <=  1500);
+     474            8 :     const int f = kAlpha - e - 1;
+     475            8 :     const int k = (f * 78913) / (1 << 18) + static_cast<int>(f > 0);
+     476              : 
+     477            8 :     const int index = (-kCachedPowersMinDecExp + k + (kCachedPowersDecStep - 1)) / kCachedPowersDecStep;
+     478            8 :     JSON_ASSERT(index >= 0);
+     479           16 :     JSON_ASSERT(static_cast<std::size_t>(index) < kCachedPowers.size());
+     480              : 
+     481            8 :     const cached_power cached = kCachedPowers[static_cast<std::size_t>(index)];
+     482            8 :     JSON_ASSERT(kAlpha <= cached.e + e + 64);
+     483            8 :     JSON_ASSERT(kGamma >= cached.e + e + 64);
+     484              : 
+     485            8 :     return cached;
+     486              : }
+     487              : 
+     488              : /*!
+     489              : For n != 0, returns k, such that pow10 := 10^(k-1) <= n < 10^k.
+     490              : For n == 0, returns 1 and sets pow10 := 1.
+     491              : */
+     492            8 : inline int find_largest_pow10(const std::uint32_t n, std::uint32_t& pow10)
+     493              : {
+     494              :     // LCOV_EXCL_START
+     495              :     if (n >= 1000000000)
+     496              :     {
+     497              :         pow10 = 1000000000;
+     498              :         return 10;
+     499              :     }
+     500              :     // LCOV_EXCL_STOP
+     501            8 :     if (n >= 100000000)
+     502              :     {
+     503            0 :         pow10 = 100000000;
+     504            0 :         return  9;
+     505              :     }
+     506            8 :     if (n >= 10000000)
+     507              :     {
+     508            0 :         pow10 = 10000000;
+     509            0 :         return  8;
+     510              :     }
+     511            8 :     if (n >= 1000000)
+     512              :     {
+     513            0 :         pow10 = 1000000;
+     514            0 :         return  7;
+     515              :     }
+     516            8 :     if (n >= 100000)
+     517              :     {
+     518            0 :         pow10 = 100000;
+     519            0 :         return  6;
+     520              :     }
+     521            8 :     if (n >= 10000)
+     522              :     {
+     523            4 :         pow10 = 10000;
+     524            4 :         return  5;
+     525              :     }
+     526            4 :     if (n >= 1000)
+     527              :     {
+     528            2 :         pow10 = 1000;
+     529            2 :         return  4;
+     530              :     }
+     531            2 :     if (n >= 100)
+     532              :     {
+     533            2 :         pow10 = 100;
+     534            2 :         return  3;
+     535              :     }
+     536            0 :     if (n >= 10)
+     537              :     {
+     538            0 :         pow10 = 10;
+     539            0 :         return  2;
+     540              :     }
+     541              : 
+     542            0 :     pow10 = 1;
+     543            0 :     return 1;
+     544              : }
+     545              : 
+     546            8 : inline void grisu2_round(char* buf, int len, std::uint64_t dist, std::uint64_t delta,
+     547              :                          std::uint64_t rest, std::uint64_t ten_k)
+     548              : {
+     549            8 :     JSON_ASSERT(len >= 1);
+     550            8 :     JSON_ASSERT(dist <= delta);
+     551            8 :     JSON_ASSERT(rest <= delta);
+     552            8 :     JSON_ASSERT(ten_k > 0);
+     553              : 
+     554              :     //               <--------------------------- delta ---->
+     555              :     //                                  <---- dist --------->
+     556              :     // --------------[------------------+-------------------]--------------
+     557              :     //               M-                 w                   M+
+     558              :     //
+     559              :     //                                  ten_k
+     560              :     //                                <------>
+     561              :     //                                       <---- rest ---->
+     562              :     // --------------[------------------+----+--------------]--------------
+     563              :     //                                  w    V
+     564              :     //                                       = buf * 10^k
+     565              :     //
+     566              :     // ten_k represents a unit-in-the-last-place in the decimal representation
+     567              :     // stored in buf.
+     568              :     // Decrement buf by ten_k while this takes buf closer to w.
+     569              : 
+     570              :     // The tests are written in this order to avoid overflow in unsigned
+     571              :     // integer arithmetic.
+     572              : 
+     573            8 :     while (rest < dist
+     574            0 :             && delta - rest >= ten_k
+     575            8 :             && (rest + ten_k < dist || dist - rest > rest + ten_k - dist))
+     576              :     {
+     577            0 :         JSON_ASSERT(buf[len - 1] != '0');
+     578            0 :         buf[len - 1]--;
+     579            0 :         rest += ten_k;
+     580              :     }
+     581            8 : }
+     582              : 
+     583              : /*!
+     584              : Generates V = buffer * 10^decimal_exponent, such that M- <= V <= M+.
+     585              : M- and M+ must be normalized and share the same exponent -60 <= e <= -32.
+     586              : */
+     587            8 : inline void grisu2_digit_gen(char* buffer, int& length, int& decimal_exponent,
+     588              :                              diyfp M_minus, diyfp w, diyfp M_plus)
+     589              : {
+     590              :     static_assert(kAlpha >= -60, "internal error");
+     591              :     static_assert(kGamma <= -32, "internal error");
+     592              : 
+     593              :     // Generates the digits (and the exponent) of a decimal floating-point
+     594              :     // number V = buffer * 10^decimal_exponent in the range [M-, M+]. The diyfp's
+     595              :     // w, M- and M+ share the same exponent e, which satisfies alpha <= e <= gamma.
+     596              :     //
+     597              :     //               <--------------------------- delta ---->
+     598              :     //                                  <---- dist --------->
+     599              :     // --------------[------------------+-------------------]--------------
+     600              :     //               M-                 w                   M+
+     601              :     //
+     602              :     // Grisu2 generates the digits of M+ from left to right and stops as soon as
+     603              :     // V is in [M-,M+].
+     604              : 
+     605            8 :     JSON_ASSERT(M_plus.e >= kAlpha);
+     606            8 :     JSON_ASSERT(M_plus.e <= kGamma);
+     607              : 
+     608            8 :     std::uint64_t delta = diyfp::sub(M_plus, M_minus).f; // (significand of (M+ - M-), implicit exponent is e)
+     609            8 :     std::uint64_t dist  = diyfp::sub(M_plus, w      ).f; // (significand of (M+ - w ), implicit exponent is e)
+     610              : 
+     611              :     // Split M+ = f * 2^e into two parts p1 and p2 (note: e < 0):
+     612              :     //
+     613              :     //      M+ = f * 2^e
+     614              :     //         = ((f div 2^-e) * 2^-e + (f mod 2^-e)) * 2^e
+     615              :     //         = ((p1        ) * 2^-e + (p2        )) * 2^e
+     616              :     //         = p1 + p2 * 2^e
+     617              : 
+     618            8 :     const diyfp one(std::uint64_t{1} << -M_plus.e, M_plus.e);
+     619              : 
+     620            8 :     auto p1 = static_cast<std::uint32_t>(M_plus.f >> -one.e); // p1 = f div 2^-e (Since -e >= 32, p1 fits into a 32-bit int.)
+     621            8 :     std::uint64_t p2 = M_plus.f & (one.f - 1);                    // p2 = f mod 2^-e
+     622              : 
+     623              :     // 1)
+     624              :     //
+     625              :     // Generate the digits of the integral part p1 = d[n-1]...d[1]d[0]
+     626              : 
+     627            8 :     JSON_ASSERT(p1 > 0);
+     628              : 
+     629            8 :     std::uint32_t pow10{};
+     630            8 :     const int k = find_largest_pow10(p1, pow10);
+     631              : 
+     632              :     //      10^(k-1) <= p1 < 10^k, pow10 = 10^(k-1)
+     633              :     //
+     634              :     //      p1 = (p1 div 10^(k-1)) * 10^(k-1) + (p1 mod 10^(k-1))
+     635              :     //         = (d[k-1]         ) * 10^(k-1) + (p1 mod 10^(k-1))
+     636              :     //
+     637              :     //      M+ = p1                                             + p2 * 2^e
+     638              :     //         = d[k-1] * 10^(k-1) + (p1 mod 10^(k-1))          + p2 * 2^e
+     639              :     //         = d[k-1] * 10^(k-1) + ((p1 mod 10^(k-1)) * 2^-e + p2) * 2^e
+     640              :     //         = d[k-1] * 10^(k-1) + (                         rest) * 2^e
+     641              :     //
+     642              :     // Now generate the digits d[n] of p1 from left to right (n = k-1,...,0)
+     643              :     //
+     644              :     //      p1 = d[k-1]...d[n] * 10^n + d[n-1]...d[0]
+     645              :     //
+     646              :     // but stop as soon as
+     647              :     //
+     648              :     //      rest * 2^e = (d[n-1]...d[0] * 2^-e + p2) * 2^e <= delta * 2^e
+     649              : 
+     650            8 :     int n = k;
+     651           14 :     while (n > 0)
+     652              :     {
+     653              :         // Invariants:
+     654              :         //      M+ = buffer * 10^n + (p1 + p2 * 2^e)    (buffer = 0 for n = k)
+     655              :         //      pow10 = 10^(n-1) <= p1 < 10^n
+     656              :         //
+     657           14 :         const std::uint32_t d = p1 / pow10;  // d = p1 div 10^(n-1)
+     658           14 :         const std::uint32_t r = p1 % pow10;  // r = p1 mod 10^(n-1)
+     659              :         //
+     660              :         //      M+ = buffer * 10^n + (d * 10^(n-1) + r) + p2 * 2^e
+     661              :         //         = (buffer * 10 + d) * 10^(n-1) + (r + p2 * 2^e)
+     662              :         //
+     663           14 :         JSON_ASSERT(d <= 9);
+     664           14 :         buffer[length++] = static_cast<char>('0' + d); // buffer := buffer * 10 + d
+     665              :         //
+     666              :         //      M+ = buffer * 10^(n-1) + (r + p2 * 2^e)
+     667              :         //
+     668           14 :         p1 = r;
+     669           14 :         n--;
+     670              :         //
+     671              :         //      M+ = buffer * 10^n + (p1 + p2 * 2^e)
+     672              :         //      pow10 = 10^n
+     673              :         //
+     674              : 
+     675              :         // Now check if enough digits have been generated.
+     676              :         // Compute
+     677              :         //
+     678              :         //      p1 + p2 * 2^e = (p1 * 2^-e + p2) * 2^e = rest * 2^e
+     679              :         //
+     680              :         // Note:
+     681              :         // Since rest and delta share the same exponent e, it suffices to
+     682              :         // compare the significands.
+     683           14 :         const std::uint64_t rest = (std::uint64_t{p1} << -one.e) + p2;
+     684           14 :         if (rest <= delta)
+     685              :         {
+     686              :             // V = buffer * 10^n, with M- <= V <= M+.
+     687              : 
+     688            8 :             decimal_exponent += n;
+     689              : 
+     690              :             // We may now just stop. But instead look if the buffer could be
+     691              :             // decremented to bring V closer to w.
+     692              :             //
+     693              :             // pow10 = 10^n is now 1 ulp in the decimal representation V.
+     694              :             // The rounding procedure works with diyfp's with an implicit
+     695              :             // exponent of e.
+     696              :             //
+     697              :             //      10^n = (10^n * 2^-e) * 2^e = ulp * 2^e
+     698              :             //
+     699            8 :             const std::uint64_t ten_n = std::uint64_t{pow10} << -one.e;
+     700            8 :             grisu2_round(buffer, length, dist, delta, rest, ten_n);
+     701              : 
+     702            8 :             return;
+     703              :         }
+     704              : 
+     705            6 :         pow10 /= 10;
+     706              :         //
+     707              :         //      pow10 = 10^(n-1) <= p1 < 10^n
+     708              :         // Invariants restored.
+     709              :     }
+     710              : 
+     711              :     // 2)
+     712              :     //
+     713              :     // The digits of the integral part have been generated:
+     714              :     //
+     715              :     //      M+ = d[k-1]...d[1]d[0] + p2 * 2^e
+     716              :     //         = buffer            + p2 * 2^e
+     717              :     //
+     718              :     // Now generate the digits of the fractional part p2 * 2^e.
+     719              :     //
+     720              :     // Note:
+     721              :     // No decimal point is generated: the exponent is adjusted instead.
+     722              :     //
+     723              :     // p2 actually represents the fraction
+     724              :     //
+     725              :     //      p2 * 2^e
+     726              :     //          = p2 / 2^-e
+     727              :     //          = d[-1] / 10^1 + d[-2] / 10^2 + ...
+     728              :     //
+     729              :     // Now generate the digits d[-m] of p1 from left to right (m = 1,2,...)
+     730              :     //
+     731              :     //      p2 * 2^e = d[-1]d[-2]...d[-m] * 10^-m
+     732              :     //                      + 10^-m * (d[-m-1] / 10^1 + d[-m-2] / 10^2 + ...)
+     733              :     //
+     734              :     // using
+     735              :     //
+     736              :     //      10^m * p2 = ((10^m * p2) div 2^-e) * 2^-e + ((10^m * p2) mod 2^-e)
+     737              :     //                = (                   d) * 2^-e + (                   r)
+     738              :     //
+     739              :     // or
+     740              :     //      10^m * p2 * 2^e = d + r * 2^e
+     741              :     //
+     742              :     // i.e.
+     743              :     //
+     744              :     //      M+ = buffer + p2 * 2^e
+     745              :     //         = buffer + 10^-m * (d + r * 2^e)
+     746              :     //         = (buffer * 10^m + d) * 10^-m + 10^-m * r * 2^e
+     747              :     //
+     748              :     // and stop as soon as 10^-m * r * 2^e <= delta * 2^e
+     749              : 
+     750            0 :     JSON_ASSERT(p2 > delta);
+     751              : 
+     752            0 :     int m = 0;
+     753              :     for (;;)
+     754              :     {
+     755              :         // Invariant:
+     756              :         //      M+ = buffer * 10^-m + 10^-m * (d[-m-1] / 10 + d[-m-2] / 10^2 + ...) * 2^e
+     757              :         //         = buffer * 10^-m + 10^-m * (p2                                 ) * 2^e
+     758              :         //         = buffer * 10^-m + 10^-m * (1/10 * (10 * p2)                   ) * 2^e
+     759              :         //         = buffer * 10^-m + 10^-m * (1/10 * ((10*p2 div 2^-e) * 2^-e + (10*p2 mod 2^-e)) * 2^e
+     760              :         //
+     761            0 :         JSON_ASSERT(p2 <= (std::numeric_limits<std::uint64_t>::max)() / 10);
+     762            0 :         p2 *= 10;
+     763            0 :         const std::uint64_t d = p2 >> -one.e;     // d = (10 * p2) div 2^-e
+     764            0 :         const std::uint64_t r = p2 & (one.f - 1); // r = (10 * p2) mod 2^-e
+     765              :         //
+     766              :         //      M+ = buffer * 10^-m + 10^-m * (1/10 * (d * 2^-e + r) * 2^e
+     767              :         //         = buffer * 10^-m + 10^-m * (1/10 * (d + r * 2^e))
+     768              :         //         = (buffer * 10 + d) * 10^(-m-1) + 10^(-m-1) * r * 2^e
+     769              :         //
+     770            0 :         JSON_ASSERT(d <= 9);
+     771            0 :         buffer[length++] = static_cast<char>('0' + d); // buffer := buffer * 10 + d
+     772              :         //
+     773              :         //      M+ = buffer * 10^(-m-1) + 10^(-m-1) * r * 2^e
+     774              :         //
+     775            0 :         p2 = r;
+     776            0 :         m++;
+     777              :         //
+     778              :         //      M+ = buffer * 10^-m + 10^-m * p2 * 2^e
+     779              :         // Invariant restored.
+     780              : 
+     781              :         // Check if enough digits have been generated.
+     782              :         //
+     783              :         //      10^-m * p2 * 2^e <= delta * 2^e
+     784              :         //              p2 * 2^e <= 10^m * delta * 2^e
+     785              :         //                    p2 <= 10^m * delta
+     786            0 :         delta *= 10;
+     787            0 :         dist  *= 10;
+     788            0 :         if (p2 <= delta)
+     789              :         {
+     790            0 :             break;
+     791              :         }
+     792            0 :     }
+     793              : 
+     794              :     // V = buffer * 10^-m, with M- <= V <= M+.
+     795              : 
+     796            0 :     decimal_exponent -= m;
+     797              : 
+     798              :     // 1 ulp in the decimal representation is now 10^-m.
+     799              :     // Since delta and dist are now scaled by 10^m, we need to do the
+     800              :     // same with ulp in order to keep the units in sync.
+     801              :     //
+     802              :     //      10^m * 10^-m = 1 = 2^-e * 2^e = ten_m * 2^e
+     803              :     //
+     804            0 :     const std::uint64_t ten_m = one.f;
+     805            0 :     grisu2_round(buffer, length, dist, delta, p2, ten_m);
+     806              : 
+     807              :     // By construction this algorithm generates the shortest possible decimal
+     808              :     // number (Loitsch, Theorem 6.2) which rounds back to w.
+     809              :     // For an input number of precision p, at least
+     810              :     //
+     811              :     //      N = 1 + ceil(p * log_10(2))
+     812              :     //
+     813              :     // decimal digits are sufficient to identify all binary floating-point
+     814              :     // numbers (Matula, "In-and-Out conversions").
+     815              :     // This implies that the algorithm does not produce more than N decimal
+     816              :     // digits.
+     817              :     //
+     818              :     //      N = 17 for p = 53 (IEEE double precision)
+     819              :     //      N = 9  for p = 24 (IEEE single precision)
+     820              : }
+     821              : 
+     822              : /*!
+     823              : v = buf * 10^decimal_exponent
+     824              : len is the length of the buffer (number of decimal digits)
+     825              : The buffer must be large enough, i.e. >= max_digits10.
+     826              : */
+     827              : JSON_HEDLEY_NON_NULL(1)
+     828            8 : inline void grisu2(char* buf, int& len, int& decimal_exponent,
+     829              :                    diyfp m_minus, diyfp v, diyfp m_plus)
+     830              : {
+     831            8 :     JSON_ASSERT(m_plus.e == m_minus.e);
+     832            8 :     JSON_ASSERT(m_plus.e == v.e);
+     833              : 
+     834              :     //  --------(-----------------------+-----------------------)--------    (A)
+     835              :     //          m-                      v                       m+
+     836              :     //
+     837              :     //  --------------------(-----------+-----------------------)--------    (B)
+     838              :     //                      m-          v                       m+
+     839              :     //
+     840              :     // First scale v (and m- and m+) such that the exponent is in the range
+     841              :     // [alpha, gamma].
+     842              : 
+     843            8 :     const cached_power cached = get_cached_power_for_binary_exponent(m_plus.e);
+     844              : 
+     845            8 :     const diyfp c_minus_k(cached.f, cached.e); // = c ~= 10^-k
+     846              : 
+     847              :     // The exponent of the products is = v.e + c_minus_k.e + q and is in the range [alpha,gamma]
+     848            8 :     const diyfp w       = diyfp::mul(v,       c_minus_k);
+     849            8 :     const diyfp w_minus = diyfp::mul(m_minus, c_minus_k);
+     850            8 :     const diyfp w_plus  = diyfp::mul(m_plus,  c_minus_k);
+     851              : 
+     852              :     //  ----(---+---)---------------(---+---)---------------(---+---)----
+     853              :     //          w-                      w                       w+
+     854              :     //          = c*m-                  = c*v                   = c*m+
+     855              :     //
+     856              :     // diyfp::mul rounds its result and c_minus_k is approximated too. w, w- and
+     857              :     // w+ are now off by a small amount.
+     858              :     // In fact:
+     859              :     //
+     860              :     //      w - v * 10^k < 1 ulp
+     861              :     //
+     862              :     // To account for this inaccuracy, add resp. subtract 1 ulp.
+     863              :     //
+     864              :     //  --------+---[---------------(---+---)---------------]---+--------
+     865              :     //          w-  M-                  w                   M+  w+
+     866              :     //
+     867              :     // Now any number in [M-, M+] (bounds included) will round to w when input,
+     868              :     // regardless of how the input rounding algorithm breaks ties.
+     869              :     //
+     870              :     // And digit_gen generates the shortest possible such number in [M-, M+].
+     871              :     // Note that this does not mean that Grisu2 always generates the shortest
+     872              :     // possible number in the interval (m-, m+).
+     873            8 :     const diyfp M_minus(w_minus.f + 1, w_minus.e);
+     874            8 :     const diyfp M_plus (w_plus.f  - 1, w_plus.e );
+     875              : 
+     876            8 :     decimal_exponent = -cached.k; // = -(-k) = k
+     877              : 
+     878            8 :     grisu2_digit_gen(buf, len, decimal_exponent, M_minus, w, M_plus);
+     879            8 : }
+     880              : 
+     881              : /*!
+     882              : v = buf * 10^decimal_exponent
+     883              : len is the length of the buffer (number of decimal digits)
+     884              : The buffer must be large enough, i.e. >= max_digits10.
+     885              : */
+     886              : template<typename FloatType>
+     887              : JSON_HEDLEY_NON_NULL(1)
+     888            8 : void grisu2(char* buf, int& len, int& decimal_exponent, FloatType value)
+     889              : {
+     890              :     static_assert(diyfp::kPrecision >= std::numeric_limits<FloatType>::digits + 3,
+     891              :                   "internal error: not enough precision");
+     892              : 
+     893            8 :     JSON_ASSERT(std::isfinite(value));
+     894            8 :     JSON_ASSERT(value > 0);
+     895              : 
+     896              :     // If the neighbors (and boundaries) of 'value' are always computed for double-precision
+     897              :     // numbers, all float's can be recovered using strtod (and strtof). However, the resulting
+     898              :     // decimal representations are not exactly "short".
+     899              :     //
+     900              :     // The documentation for 'std::to_chars' (https://en.cppreference.com/w/cpp/utility/to_chars)
+     901              :     // says "value is converted to a string as if by std::sprintf in the default ("C") locale"
+     902              :     // and since sprintf promotes floats to doubles, I think this is exactly what 'std::to_chars'
+     903              :     // does.
+     904              :     // On the other hand, the documentation for 'std::to_chars' requires that "parsing the
+     905              :     // representation using the corresponding std::from_chars function recovers value exactly". That
+     906              :     // indicates that single precision floating-point numbers should be recovered using
+     907              :     // 'std::strtof'.
+     908              :     //
+     909              :     // NB: If the neighbors are computed for single-precision numbers, there is a single float
+     910              :     //     (7.0385307e-26f) which can't be recovered using strtod. The resulting double precision
+     911              :     //     value is off by 1 ulp.
+     912              : #if 0 // NOLINT(readability-avoid-unconditional-preprocessor-if)
+     913              :     const boundaries w = compute_boundaries(static_cast<double>(value));
+     914              : #else
+     915            8 :     const boundaries w = compute_boundaries(value);
+     916              : #endif
+     917              : 
+     918            8 :     grisu2(buf, len, decimal_exponent, w.minus, w.w, w.plus);
+     919            8 : }
+     920              : 
+     921              : /*!
+     922              : @brief appends a decimal representation of e to buf
+     923              : @return a pointer to the element following the exponent.
+     924              : @pre -1000 < e < 1000
+     925              : */
+     926              : JSON_HEDLEY_NON_NULL(1)
+     927              : JSON_HEDLEY_RETURNS_NON_NULL
+     928            2 : inline char* append_exponent(char* buf, int e)
+     929              : {
+     930            2 :     JSON_ASSERT(e > -1000);
+     931            2 :     JSON_ASSERT(e <  1000);
+     932              : 
+     933            2 :     if (e < 0)
+     934              :     {
+     935            2 :         e = -e;
+     936            2 :         *buf++ = '-';
+     937              :     }
+     938              :     else
+     939              :     {
+     940            0 :         *buf++ = '+';
+     941              :     }
+     942              : 
+     943            2 :     auto k = static_cast<std::uint32_t>(e);
+     944            2 :     if (k < 10)
+     945              :     {
+     946              :         // Always print at least two digits in the exponent.
+     947              :         // This is for compatibility with printf("%g").
+     948            2 :         *buf++ = '0';
+     949            2 :         *buf++ = static_cast<char>('0' + k);
+     950              :     }
+     951            0 :     else if (k < 100)
+     952              :     {
+     953            0 :         *buf++ = static_cast<char>('0' + k / 10);
+     954            0 :         k %= 10;
+     955            0 :         *buf++ = static_cast<char>('0' + k);
+     956              :     }
+     957              :     else
+     958              :     {
+     959            0 :         *buf++ = static_cast<char>('0' + k / 100);
+     960            0 :         k %= 100;
+     961            0 :         *buf++ = static_cast<char>('0' + k / 10);
+     962            0 :         k %= 10;
+     963            0 :         *buf++ = static_cast<char>('0' + k);
+     964              :     }
+     965              : 
+     966            2 :     return buf;
+     967              : }
+     968              : 
+     969              : /*!
+     970              : @brief prettify v = buf * 10^decimal_exponent
+     971              : 
+     972              : If v is in the range [10^min_exp, 10^max_exp) it will be printed in fixed-point
+     973              : notation. Otherwise it will be printed in exponential notation.
+     974              : 
+     975              : @pre min_exp < 0
+     976              : @pre max_exp > 0
+     977              : */
+     978              : JSON_HEDLEY_NON_NULL(1)
+     979              : JSON_HEDLEY_RETURNS_NON_NULL
+     980            8 : inline char* format_buffer(char* buf, int len, int decimal_exponent,
+     981              :                            int min_exp, int max_exp)
+     982              : {
+     983            8 :     JSON_ASSERT(min_exp < 0);
+     984            8 :     JSON_ASSERT(max_exp > 0);
+     985              : 
+     986            8 :     const int k = len;
+     987            8 :     const int n = len + decimal_exponent;
+     988              : 
+     989              :     // v = buf * 10^(n-k)
+     990              :     // k is the length of the buffer (number of decimal digits)
+     991              :     // n is the position of the decimal point relative to the start of the buffer.
+     992              : 
+     993            8 :     if (k <= n && n <= max_exp)
+     994              :     {
+     995              :         // digits[000]
+     996              :         // len <= max_exp + 2
+     997              : 
+     998            0 :         std::memset(buf + k, '0', static_cast<size_t>(n) - static_cast<size_t>(k));
+     999              :         // Make it look like a floating-point number (#362, #378)
+    1000            0 :         buf[n + 0] = '.';
+    1001            0 :         buf[n + 1] = '0';
+    1002            0 :         return buf + (static_cast<size_t>(n) + 2);
+    1003              :     }
+    1004              : 
+    1005            8 :     if (0 < n && n <= max_exp)
+    1006              :     {
+    1007              :         // dig.its
+    1008              :         // len <= max_digits10 + 1
+    1009              : 
+    1010            2 :         JSON_ASSERT(k > n);
+    1011              : 
+    1012            2 :         std::memmove(buf + (static_cast<size_t>(n) + 1), buf + n, static_cast<size_t>(k) - static_cast<size_t>(n));
+    1013            2 :         buf[n] = '.';
+    1014            2 :         return buf + (static_cast<size_t>(k) + 1U);
+    1015              :     }
+    1016              : 
+    1017            6 :     if (min_exp < n && n <= 0)
+    1018              :     {
+    1019              :         // 0.[000]digits
+    1020              :         // len <= 2 + (-min_exp - 1) + max_digits10
+    1021              : 
+    1022            4 :         std::memmove(buf + (2 + static_cast<size_t>(-n)), buf, static_cast<size_t>(k));
+    1023            4 :         buf[0] = '0';
+    1024            4 :         buf[1] = '.';
+    1025            4 :         std::memset(buf + 2, '0', static_cast<size_t>(-n));
+    1026            4 :         return buf + (2U + static_cast<size_t>(-n) + static_cast<size_t>(k));
+    1027              :     }
+    1028              : 
+    1029            2 :     if (k == 1)
+    1030              :     {
+    1031              :         // dE+123
+    1032              :         // len <= 1 + 5
+    1033              : 
+    1034            2 :         buf += 1;
+    1035              :     }
+    1036              :     else
+    1037              :     {
+    1038              :         // d.igitsE+123
+    1039              :         // len <= max_digits10 + 1 + 5
+    1040              : 
+    1041            0 :         std::memmove(buf + 2, buf + 1, static_cast<size_t>(k) - 1);
+    1042            0 :         buf[1] = '.';
+    1043            0 :         buf += 1 + static_cast<size_t>(k);
+    1044              :     }
+    1045              : 
+    1046            2 :     *buf++ = 'e';
+    1047            2 :     return append_exponent(buf, n - 1);
+    1048              : }
+    1049              : 
+    1050              : }  // namespace dtoa_impl
+    1051              : 
+    1052              : /*!
+    1053              : @brief generates a decimal representation of the floating-point number value in [first, last).
+    1054              : 
+    1055              : The format of the resulting decimal representation is similar to printf's %g
+    1056              : format. Returns an iterator pointing past-the-end of the decimal representation.
+    1057              : 
+    1058              : @note The input number must be finite, i.e. NaN's and Inf's are not supported.
+    1059              : @note The buffer must be large enough.
+    1060              : @note The result is NOT null-terminated.
+    1061              : */
+    1062              : template<typename FloatType>
+    1063              : JSON_HEDLEY_NON_NULL(1, 2)
+    1064              : JSON_HEDLEY_RETURNS_NON_NULL
+    1065            8 : char* to_chars(char* first, const char* last, FloatType value)
+    1066              : {
+    1067              :     static_cast<void>(last); // maybe unused - fix warning
+    1068            8 :     JSON_ASSERT(std::isfinite(value));
+    1069              : 
+    1070              :     // Use signbit(value) instead of (value < 0) since signbit works for -0.
+    1071            8 :     if (std::signbit(value))
+    1072              :     {
+    1073            2 :         value = -value;
+    1074            2 :         *first++ = '-';
+    1075              :     }
+    1076              : 
+    1077              : #ifdef __GNUC__
+    1078              : #pragma GCC diagnostic push
+    1079              : #pragma GCC diagnostic ignored "-Wfloat-equal"
+    1080              : #endif
+    1081            8 :     if (value == 0) // +-0
+    1082              :     {
+    1083            0 :         *first++ = '0';
+    1084              :         // Make it look like a floating-point number (#362, #378)
+    1085            0 :         *first++ = '.';
+    1086            0 :         *first++ = '0';
+    1087            0 :         return first;
+    1088              :     }
+    1089              : #ifdef __GNUC__
+    1090              : #pragma GCC diagnostic pop
+    1091              : #endif
+    1092              : 
+    1093            8 :     JSON_ASSERT(last - first >= std::numeric_limits<FloatType>::max_digits10);
+    1094              : 
+    1095              :     // Compute v = buffer * 10^decimal_exponent.
+    1096              :     // The decimal digits are stored in the buffer, which needs to be interpreted
+    1097              :     // as an unsigned decimal integer.
+    1098              :     // len is the length of the buffer, i.e. the number of decimal digits.
+    1099            8 :     int len = 0;
+    1100            8 :     int decimal_exponent = 0;
+    1101            8 :     dtoa_impl::grisu2(first, len, decimal_exponent, value);
+    1102              : 
+    1103            8 :     JSON_ASSERT(len <= std::numeric_limits<FloatType>::max_digits10);
+    1104              : 
+    1105              :     // Format the buffer like printf("%.*g", prec, value)
+    1106            8 :     constexpr int kMinExp = -4;
+    1107              :     // Use digits10 here to increase compatibility with version 2.
+    1108            8 :     constexpr int kMaxExp = std::numeric_limits<FloatType>::digits10;
+    1109              : 
+    1110            8 :     JSON_ASSERT(last - first >= kMaxExp + 2);
+    1111            8 :     JSON_ASSERT(last - first >= 2 + (-kMinExp - 1) + std::numeric_limits<FloatType>::max_digits10);
+    1112            8 :     JSON_ASSERT(last - first >= std::numeric_limits<FloatType>::max_digits10 + 6);
+    1113              : 
+    1114            8 :     return dtoa_impl::format_buffer(first, len, decimal_exponent, kMinExp, kMaxExp);
+    1115              : }
+    1116              : 
+    1117              : }  // namespace detail
+    1118              : NLOHMANN_JSON_NAMESPACE_END
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/conversions/to_json.hpp.func-c.html b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/to_json.hpp.func-c.html new file mode 100644 index 0000000..69f2ca2 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/to_json.hpp.func-c.html @@ -0,0 +1,397 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/conversions/to_json.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/conversions - to_json.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %4444
Test Date:2024-04-30 13:17:26Functions:100.0 %4343
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE7EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEEEvRT_NSJ_14number_float_tE14
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEdLi0EEEvRT_T0_14
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE5EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEEEvRT_NSJ_16number_integer_tE22
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEiLi0EEEvRT_T0_22
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEEEvRT_RKNSJ_8string_tE44
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE4EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEEEvRT_NSJ_9boolean_tE44
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEbLi0EEEvRT_T0_44
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA2_cLi0EEEvRT_RKT0_136
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA2_cLi0EEEvRT_RKT0_2
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA15_cLi0EEEvRT_RKT0_4
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA17_cLi0EEEvRT_RKT0_4
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA4_cLi0EEEvRT_RKT0_10
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA12_cLi0EEEvRT_RKT0_16
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA5_cLi0EEEvRT_RKT0_16
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA6_cLi0EEEvRT_RKT0_16
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA16_cLi0EEEvRT_RKT0_18
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA13_cLi0EEEvRT_RKT0_24
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA10_cLi0EEEvRT_RKT0_26
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEESB_Li0EEEvRT_RKT0_180
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA2_cLi0EEEvRT_RKT0_2
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA15_cLi0EEEvRT_RKT0_4
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA17_cLi0EEEvRT_RKT0_4
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA4_cLi0EEEvRT_RKT0_10
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA12_cLi0EEEvRT_RKT0_16
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA5_cLi0EEEvRT_RKT0_16
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA6_cLi0EEEvRT_RKT0_16
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA16_cLi0EEEvRT_RKT0_18
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA13_cLi0EEEvRT_RKT0_24
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA10_cLi0EEEvRT_RKT0_26
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEESB_Li0EEEvRT_RKT0_44
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEbEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSH_260
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA2_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_2
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA15_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_4
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA17_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_4
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERKSC_EEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSJ_6
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA4_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_10
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEdEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSH_14
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA12_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_16
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA5_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_16
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA6_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_16
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA16_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_18
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEiEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSH_22
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA13_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_24
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA10_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_26
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERSC_EEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSI_38
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEbEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSH_44
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/conversions/to_json.hpp.func.html b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/to_json.hpp.func.html new file mode 100644 index 0000000..2c03f3c --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/to_json.hpp.func.html @@ -0,0 +1,397 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/conversions/to_json.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/conversions - to_json.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %4444
Test Date:2024-04-30 13:17:26Functions:100.0 %4343
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA2_cLi0EEEvRT_RKT0_136
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA10_cLi0EEEvRT_RKT0_26
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA12_cLi0EEEvRT_RKT0_16
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA13_cLi0EEEvRT_RKT0_24
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA15_cLi0EEEvRT_RKT0_4
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA16_cLi0EEEvRT_RKT0_18
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA17_cLi0EEEvRT_RKT0_4
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA2_cLi0EEEvRT_RKT0_2
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA4_cLi0EEEvRT_RKT0_10
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA5_cLi0EEEvRT_RKT0_16
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEA6_cLi0EEEvRT_RKT0_16
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEEEvRT_RKNSJ_8string_tE44
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE4EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEEEvRT_NSJ_9boolean_tE44
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE5EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEEEvRT_NSJ_16number_integer_tE22
_ZN8nlohmann16json_abi_v3_11_36detail20external_constructorILNS1_7value_tE7EE9constructINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES8_IhSaIhEEvEEEEvRT_NSJ_14number_float_tE14
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEESB_Li0EEEvRT_RKT0_180
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA10_cLi0EEEvRT_RKT0_26
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA12_cLi0EEEvRT_RKT0_16
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA13_cLi0EEEvRT_RKT0_24
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA15_cLi0EEEvRT_RKT0_4
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA16_cLi0EEEvRT_RKT0_18
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA17_cLi0EEEvRT_RKT0_4
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA2_cLi0EEEvRT_RKT0_2
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA4_cLi0EEEvRT_RKT0_10
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA5_cLi0EEEvRT_RKT0_16
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEA6_cLi0EEEvRT_RKT0_16
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEESB_Li0EEEvRT_RKT0_44
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEbLi0EEEvRT_T0_44
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEdLi0EEEvRT_T0_14
_ZN8nlohmann16json_abi_v3_11_36detail7to_jsonINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEiLi0EEEvRT_T0_22
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEbEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSH_260
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA10_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_26
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA12_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_16
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA13_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_24
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA15_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_4
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA16_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_18
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA17_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_4
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA2_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_2
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA4_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_10
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA5_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_16
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERA6_KcEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSK_16
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERKSC_EEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSJ_6
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEERSC_EEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSI_38
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEbEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSH_44
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEdEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSH_14
_ZNK8nlohmann16json_abi_v3_11_36detail10to_json_fnclINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEiEEDTcmcl7to_jsonfp_cl7forwardIT0_Efp0_EEcvv_EERT_OSH_22
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/conversions/to_json.hpp.gcov.html b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/to_json.hpp.gcov.html new file mode 100644 index 0000000..2ccead8 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/conversions/to_json.hpp.gcov.html @@ -0,0 +1,523 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/conversions/to_json.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/conversions - to_json.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %4444
Test Date:2024-04-30 13:17:26Functions:100.0 %4343
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : //     __ _____ _____ _____
+       2              : //  __|  |   __|     |   | |  JSON for Modern C++
+       3              : // |  |  |__   |  |  | | | |  version 3.11.3
+       4              : // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
+       5              : //
+       6              : // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
+       7              : // SPDX-License-Identifier: MIT
+       8              : 
+       9              : #pragma once
+      10              : 
+      11              : #include <algorithm> // copy
+      12              : #include <iterator> // begin, end
+      13              : #include <string> // string
+      14              : #include <tuple> // tuple, get
+      15              : #include <type_traits> // is_same, is_constructible, is_floating_point, is_enum, underlying_type
+      16              : #include <utility> // move, forward, declval, pair
+      17              : #include <valarray> // valarray
+      18              : #include <vector> // vector
+      19              : 
+      20              : #include <nlohmann/detail/iterators/iteration_proxy.hpp>
+      21              : #include <nlohmann/detail/macro_scope.hpp>
+      22              : #include <nlohmann/detail/meta/cpp_future.hpp>
+      23              : #include <nlohmann/detail/meta/std_fs.hpp>
+      24              : #include <nlohmann/detail/meta/type_traits.hpp>
+      25              : #include <nlohmann/detail/value_t.hpp>
+      26              : 
+      27              : NLOHMANN_JSON_NAMESPACE_BEGIN
+      28              : namespace detail
+      29              : {
+      30              : 
+      31              : //////////////////
+      32              : // constructors //
+      33              : //////////////////
+      34              : 
+      35              : /*
+      36              :  * Note all external_constructor<>::construct functions need to call
+      37              :  * j.m_data.m_value.destroy(j.m_data.m_type) to avoid a memory leak in case j contains an
+      38              :  * allocated value (e.g., a string). See bug issue
+      39              :  * https://github.com/nlohmann/json/issues/2865 for more information.
+      40              :  */
+      41              : 
+      42              : template<value_t> struct external_constructor;
+      43              : 
+      44              : template<>
+      45              : struct external_constructor<value_t::boolean>
+      46              : {
+      47              :     template<typename BasicJsonType>
+      48           44 :     static void construct(BasicJsonType& j, typename BasicJsonType::boolean_t b) noexcept
+      49              :     {
+      50           44 :         j.m_data.m_value.destroy(j.m_data.m_type);
+      51           44 :         j.m_data.m_type = value_t::boolean;
+      52           44 :         j.m_data.m_value = b;
+      53           44 :         j.assert_invariant();
+      54           44 :     }
+      55              : };
+      56              : 
+      57              : template<>
+      58              : struct external_constructor<value_t::string>
+      59              : {
+      60              :     template<typename BasicJsonType>
+      61           44 :     static void construct(BasicJsonType& j, const typename BasicJsonType::string_t& s)
+      62              :     {
+      63           44 :         j.m_data.m_value.destroy(j.m_data.m_type);
+      64           44 :         j.m_data.m_type = value_t::string;
+      65           44 :         j.m_data.m_value = s;
+      66           44 :         j.assert_invariant();
+      67           44 :     }
+      68              : 
+      69              :     template<typename BasicJsonType>
+      70              :     static void construct(BasicJsonType& j, typename BasicJsonType::string_t&& s)
+      71              :     {
+      72              :         j.m_data.m_value.destroy(j.m_data.m_type);
+      73              :         j.m_data.m_type = value_t::string;
+      74              :         j.m_data.m_value = std::move(s);
+      75              :         j.assert_invariant();
+      76              :     }
+      77              : 
+      78              :     template < typename BasicJsonType, typename CompatibleStringType,
+      79              :                enable_if_t < !std::is_same<CompatibleStringType, typename BasicJsonType::string_t>::value,
+      80              :                              int > = 0 >
+      81          136 :     static void construct(BasicJsonType& j, const CompatibleStringType& str)
+      82              :     {
+      83          136 :         j.m_data.m_value.destroy(j.m_data.m_type);
+      84          136 :         j.m_data.m_type = value_t::string;
+      85          136 :         j.m_data.m_value.string = j.template create<typename BasicJsonType::string_t>(str);
+      86          136 :         j.assert_invariant();
+      87          136 :     }
+      88              : };
+      89              : 
+      90              : template<>
+      91              : struct external_constructor<value_t::binary>
+      92              : {
+      93              :     template<typename BasicJsonType>
+      94              :     static void construct(BasicJsonType& j, const typename BasicJsonType::binary_t& b)
+      95              :     {
+      96              :         j.m_data.m_value.destroy(j.m_data.m_type);
+      97              :         j.m_data.m_type = value_t::binary;
+      98              :         j.m_data.m_value = typename BasicJsonType::binary_t(b);
+      99              :         j.assert_invariant();
+     100              :     }
+     101              : 
+     102              :     template<typename BasicJsonType>
+     103              :     static void construct(BasicJsonType& j, typename BasicJsonType::binary_t&& b)
+     104              :     {
+     105              :         j.m_data.m_value.destroy(j.m_data.m_type);
+     106              :         j.m_data.m_type = value_t::binary;
+     107              :         j.m_data.m_value = typename BasicJsonType::binary_t(std::move(b));
+     108              :         j.assert_invariant();
+     109              :     }
+     110              : };
+     111              : 
+     112              : template<>
+     113              : struct external_constructor<value_t::number_float>
+     114              : {
+     115              :     template<typename BasicJsonType>
+     116           14 :     static void construct(BasicJsonType& j, typename BasicJsonType::number_float_t val) noexcept
+     117              :     {
+     118           14 :         j.m_data.m_value.destroy(j.m_data.m_type);
+     119           14 :         j.m_data.m_type = value_t::number_float;
+     120           14 :         j.m_data.m_value = val;
+     121           14 :         j.assert_invariant();
+     122           14 :     }
+     123              : };
+     124              : 
+     125              : template<>
+     126              : struct external_constructor<value_t::number_unsigned>
+     127              : {
+     128              :     template<typename BasicJsonType>
+     129              :     static void construct(BasicJsonType& j, typename BasicJsonType::number_unsigned_t val) noexcept
+     130              :     {
+     131              :         j.m_data.m_value.destroy(j.m_data.m_type);
+     132              :         j.m_data.m_type = value_t::number_unsigned;
+     133              :         j.m_data.m_value = val;
+     134              :         j.assert_invariant();
+     135              :     }
+     136              : };
+     137              : 
+     138              : template<>
+     139              : struct external_constructor<value_t::number_integer>
+     140              : {
+     141              :     template<typename BasicJsonType>
+     142           22 :     static void construct(BasicJsonType& j, typename BasicJsonType::number_integer_t val) noexcept
+     143              :     {
+     144           22 :         j.m_data.m_value.destroy(j.m_data.m_type);
+     145           22 :         j.m_data.m_type = value_t::number_integer;
+     146           22 :         j.m_data.m_value = val;
+     147           22 :         j.assert_invariant();
+     148           22 :     }
+     149              : };
+     150              : 
+     151              : template<>
+     152              : struct external_constructor<value_t::array>
+     153              : {
+     154              :     template<typename BasicJsonType>
+     155              :     static void construct(BasicJsonType& j, const typename BasicJsonType::array_t& arr)
+     156              :     {
+     157              :         j.m_data.m_value.destroy(j.m_data.m_type);
+     158              :         j.m_data.m_type = value_t::array;
+     159              :         j.m_data.m_value = arr;
+     160              :         j.set_parents();
+     161              :         j.assert_invariant();
+     162              :     }
+     163              : 
+     164              :     template<typename BasicJsonType>
+     165              :     static void construct(BasicJsonType& j, typename BasicJsonType::array_t&& arr)
+     166              :     {
+     167              :         j.m_data.m_value.destroy(j.m_data.m_type);
+     168              :         j.m_data.m_type = value_t::array;
+     169              :         j.m_data.m_value = std::move(arr);
+     170              :         j.set_parents();
+     171              :         j.assert_invariant();
+     172              :     }
+     173              : 
+     174              :     template < typename BasicJsonType, typename CompatibleArrayType,
+     175              :                enable_if_t < !std::is_same<CompatibleArrayType, typename BasicJsonType::array_t>::value,
+     176              :                              int > = 0 >
+     177              :     static void construct(BasicJsonType& j, const CompatibleArrayType& arr)
+     178              :     {
+     179              :         using std::begin;
+     180              :         using std::end;
+     181              : 
+     182              :         j.m_data.m_value.destroy(j.m_data.m_type);
+     183              :         j.m_data.m_type = value_t::array;
+     184              :         j.m_data.m_value.array = j.template create<typename BasicJsonType::array_t>(begin(arr), end(arr));
+     185              :         j.set_parents();
+     186              :         j.assert_invariant();
+     187              :     }
+     188              : 
+     189              :     template<typename BasicJsonType>
+     190              :     static void construct(BasicJsonType& j, const std::vector<bool>& arr)
+     191              :     {
+     192              :         j.m_data.m_value.destroy(j.m_data.m_type);
+     193              :         j.m_data.m_type = value_t::array;
+     194              :         j.m_data.m_value = value_t::array;
+     195              :         j.m_data.m_value.array->reserve(arr.size());
+     196              :         for (const bool x : arr)
+     197              :         {
+     198              :             j.m_data.m_value.array->push_back(x);
+     199              :             j.set_parent(j.m_data.m_value.array->back());
+     200              :         }
+     201              :         j.assert_invariant();
+     202              :     }
+     203              : 
+     204              :     template<typename BasicJsonType, typename T,
+     205              :              enable_if_t<std::is_convertible<T, BasicJsonType>::value, int> = 0>
+     206              :     static void construct(BasicJsonType& j, const std::valarray<T>& arr)
+     207              :     {
+     208              :         j.m_data.m_value.destroy(j.m_data.m_type);
+     209              :         j.m_data.m_type = value_t::array;
+     210              :         j.m_data.m_value = value_t::array;
+     211              :         j.m_data.m_value.array->resize(arr.size());
+     212              :         if (arr.size() > 0)
+     213              :         {
+     214              :             std::copy(std::begin(arr), std::end(arr), j.m_data.m_value.array->begin());
+     215              :         }
+     216              :         j.set_parents();
+     217              :         j.assert_invariant();
+     218              :     }
+     219              : };
+     220              : 
+     221              : template<>
+     222              : struct external_constructor<value_t::object>
+     223              : {
+     224              :     template<typename BasicJsonType>
+     225              :     static void construct(BasicJsonType& j, const typename BasicJsonType::object_t& obj)
+     226              :     {
+     227              :         j.m_data.m_value.destroy(j.m_data.m_type);
+     228              :         j.m_data.m_type = value_t::object;
+     229              :         j.m_data.m_value = obj;
+     230              :         j.set_parents();
+     231              :         j.assert_invariant();
+     232              :     }
+     233              : 
+     234              :     template<typename BasicJsonType>
+     235              :     static void construct(BasicJsonType& j, typename BasicJsonType::object_t&& obj)
+     236              :     {
+     237              :         j.m_data.m_value.destroy(j.m_data.m_type);
+     238              :         j.m_data.m_type = value_t::object;
+     239              :         j.m_data.m_value = std::move(obj);
+     240              :         j.set_parents();
+     241              :         j.assert_invariant();
+     242              :     }
+     243              : 
+     244              :     template < typename BasicJsonType, typename CompatibleObjectType,
+     245              :                enable_if_t < !std::is_same<CompatibleObjectType, typename BasicJsonType::object_t>::value, int > = 0 >
+     246              :     static void construct(BasicJsonType& j, const CompatibleObjectType& obj)
+     247              :     {
+     248              :         using std::begin;
+     249              :         using std::end;
+     250              : 
+     251              :         j.m_data.m_value.destroy(j.m_data.m_type);
+     252              :         j.m_data.m_type = value_t::object;
+     253              :         j.m_data.m_value.object = j.template create<typename BasicJsonType::object_t>(begin(obj), end(obj));
+     254              :         j.set_parents();
+     255              :         j.assert_invariant();
+     256              :     }
+     257              : };
+     258              : 
+     259              : /////////////
+     260              : // to_json //
+     261              : /////////////
+     262              : 
+     263              : template<typename BasicJsonType, typename T,
+     264              :          enable_if_t<std::is_same<T, typename BasicJsonType::boolean_t>::value, int> = 0>
+     265           44 : inline void to_json(BasicJsonType& j, T b) noexcept
+     266              : {
+     267           44 :     external_constructor<value_t::boolean>::construct(j, b);
+     268           44 : }
+     269              : 
+     270              : template < typename BasicJsonType, typename BoolRef,
+     271              :            enable_if_t <
+     272              :                ((std::is_same<std::vector<bool>::reference, BoolRef>::value
+     273              :                  && !std::is_same <std::vector<bool>::reference, typename BasicJsonType::boolean_t&>::value)
+     274              :                 || (std::is_same<std::vector<bool>::const_reference, BoolRef>::value
+     275              :                     && !std::is_same <detail::uncvref_t<std::vector<bool>::const_reference>,
+     276              :                                       typename BasicJsonType::boolean_t >::value))
+     277              :                && std::is_convertible<const BoolRef&, typename BasicJsonType::boolean_t>::value, int > = 0 >
+     278              : inline void to_json(BasicJsonType& j, const BoolRef& b) noexcept
+     279              : {
+     280              :     external_constructor<value_t::boolean>::construct(j, static_cast<typename BasicJsonType::boolean_t>(b));
+     281              : }
+     282              : 
+     283              : template<typename BasicJsonType, typename CompatibleString,
+     284              :          enable_if_t<std::is_constructible<typename BasicJsonType::string_t, CompatibleString>::value, int> = 0>
+     285          180 : inline void to_json(BasicJsonType& j, const CompatibleString& s)
+     286              : {
+     287          180 :     external_constructor<value_t::string>::construct(j, s);
+     288          180 : }
+     289              : 
+     290              : template<typename BasicJsonType>
+     291              : inline void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s)
+     292              : {
+     293              :     external_constructor<value_t::string>::construct(j, std::move(s));
+     294              : }
+     295              : 
+     296              : template<typename BasicJsonType, typename FloatType,
+     297              :          enable_if_t<std::is_floating_point<FloatType>::value, int> = 0>
+     298           14 : inline void to_json(BasicJsonType& j, FloatType val) noexcept
+     299              : {
+     300           14 :     external_constructor<value_t::number_float>::construct(j, static_cast<typename BasicJsonType::number_float_t>(val));
+     301           14 : }
+     302              : 
+     303              : template<typename BasicJsonType, typename CompatibleNumberUnsignedType,
+     304              :          enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_unsigned_t, CompatibleNumberUnsignedType>::value, int> = 0>
+     305              : inline void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noexcept
+     306              : {
+     307              :     external_constructor<value_t::number_unsigned>::construct(j, static_cast<typename BasicJsonType::number_unsigned_t>(val));
+     308              : }
+     309              : 
+     310              : template<typename BasicJsonType, typename CompatibleNumberIntegerType,
+     311              :          enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_integer_t, CompatibleNumberIntegerType>::value, int> = 0>
+     312           22 : inline void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noexcept
+     313              : {
+     314           22 :     external_constructor<value_t::number_integer>::construct(j, static_cast<typename BasicJsonType::number_integer_t>(val));
+     315           22 : }
+     316              : 
+     317              : #if !JSON_DISABLE_ENUM_SERIALIZATION
+     318              : template<typename BasicJsonType, typename EnumType,
+     319              :          enable_if_t<std::is_enum<EnumType>::value, int> = 0>
+     320              : inline void to_json(BasicJsonType& j, EnumType e) noexcept
+     321              : {
+     322              :     using underlying_type = typename std::underlying_type<EnumType>::type;
+     323              :     static constexpr value_t integral_value_t = std::is_unsigned<underlying_type>::value ? value_t::number_unsigned : value_t::number_integer;
+     324              :     external_constructor<integral_value_t>::construct(j, static_cast<underlying_type>(e));
+     325              : }
+     326              : #endif  // JSON_DISABLE_ENUM_SERIALIZATION
+     327              : 
+     328              : template<typename BasicJsonType>
+     329              : inline void to_json(BasicJsonType& j, const std::vector<bool>& e)
+     330              : {
+     331              :     external_constructor<value_t::array>::construct(j, e);
+     332              : }
+     333              : 
+     334              : template < typename BasicJsonType, typename CompatibleArrayType,
+     335              :            enable_if_t < is_compatible_array_type<BasicJsonType,
+     336              :                          CompatibleArrayType>::value&&
+     337              :                          !is_compatible_object_type<BasicJsonType, CompatibleArrayType>::value&&
+     338              :                          !is_compatible_string_type<BasicJsonType, CompatibleArrayType>::value&&
+     339              :                          !std::is_same<typename BasicJsonType::binary_t, CompatibleArrayType>::value&&
+     340              :                          !is_basic_json<CompatibleArrayType>::value,
+     341              :                          int > = 0 >
+     342              : inline void to_json(BasicJsonType& j, const CompatibleArrayType& arr)
+     343              : {
+     344              :     external_constructor<value_t::array>::construct(j, arr);
+     345              : }
+     346              : 
+     347              : template<typename BasicJsonType>
+     348              : inline void to_json(BasicJsonType& j, const typename BasicJsonType::binary_t& bin)
+     349              : {
+     350              :     external_constructor<value_t::binary>::construct(j, bin);
+     351              : }
+     352              : 
+     353              : template<typename BasicJsonType, typename T,
+     354              :          enable_if_t<std::is_convertible<T, BasicJsonType>::value, int> = 0>
+     355              : inline void to_json(BasicJsonType& j, const std::valarray<T>& arr)
+     356              : {
+     357              :     external_constructor<value_t::array>::construct(j, std::move(arr));
+     358              : }
+     359              : 
+     360              : template<typename BasicJsonType>
+     361              : inline void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr)
+     362              : {
+     363              :     external_constructor<value_t::array>::construct(j, std::move(arr));
+     364              : }
+     365              : 
+     366              : template < typename BasicJsonType, typename CompatibleObjectType,
+     367              :            enable_if_t < is_compatible_object_type<BasicJsonType, CompatibleObjectType>::value&& !is_basic_json<CompatibleObjectType>::value, int > = 0 >
+     368              : inline void to_json(BasicJsonType& j, const CompatibleObjectType& obj)
+     369              : {
+     370              :     external_constructor<value_t::object>::construct(j, obj);
+     371              : }
+     372              : 
+     373              : template<typename BasicJsonType>
+     374              : inline void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj)
+     375              : {
+     376              :     external_constructor<value_t::object>::construct(j, std::move(obj));
+     377              : }
+     378              : 
+     379              : template <
+     380              :     typename BasicJsonType, typename T, std::size_t N,
+     381              :     enable_if_t < !std::is_constructible<typename BasicJsonType::string_t,
+     382              :                   const T(&)[N]>::value, // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
+     383              :                   int > = 0 >
+     384              : inline void to_json(BasicJsonType& j, const T(&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
+     385              : {
+     386              :     external_constructor<value_t::array>::construct(j, arr);
+     387              : }
+     388              : 
+     389              : template < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible<BasicJsonType, T1>::value&& std::is_constructible<BasicJsonType, T2>::value, int > = 0 >
+     390              : inline void to_json(BasicJsonType& j, const std::pair<T1, T2>& p)
+     391              : {
+     392              :     j = { p.first, p.second };
+     393              : }
+     394              : 
+     395              : // for https://github.com/nlohmann/json/pull/1134
+     396              : template<typename BasicJsonType, typename T,
+     397              :          enable_if_t<std::is_same<T, iteration_proxy_value<typename BasicJsonType::iterator>>::value, int> = 0>
+     398              : inline void to_json(BasicJsonType& j, const T& b)
+     399              : {
+     400              :     j = { {b.key(), b.value()} };
+     401              : }
+     402              : 
+     403              : template<typename BasicJsonType, typename Tuple, std::size_t... Idx>
+     404              : inline void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequence<Idx...> /*unused*/)
+     405              : {
+     406              :     j = { std::get<Idx>(t)... };
+     407              : }
+     408              : 
+     409              : template<typename BasicJsonType, typename T, enable_if_t<is_constructible_tuple<BasicJsonType, T>::value, int > = 0>
+     410              : inline void to_json(BasicJsonType& j, const T& t)
+     411              : {
+     412              :     to_json_tuple_impl(j, t, make_index_sequence<std::tuple_size<T>::value> {});
+     413              : }
+     414              : 
+     415              : #if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM
+     416              : template<typename BasicJsonType>
+     417              : inline void to_json(BasicJsonType& j, const std_fs::path& p)
+     418              : {
+     419              :     j = p.string();
+     420              : }
+     421              : #endif
+     422              : 
+     423              : struct to_json_fn
+     424              : {
+     425              :     template<typename BasicJsonType, typename T>
+     426          260 :     auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward<T>(val))))
+     427              :     -> decltype(to_json(j, std::forward<T>(val)), void())
+     428              :     {
+     429          260 :         return to_json(j, std::forward<T>(val));
+     430              :     }
+     431              : };
+     432              : }  // namespace detail
+     433              : 
+     434              : #ifndef JSON_HAS_CPP_17
+     435              : /// namespace to hold default `to_json` function
+     436              : /// to see why this is required:
+     437              : /// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html
+     438              : namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces)
+     439              : {
+     440              : #endif
+     441              : JSON_INLINE_VARIABLE constexpr const auto& to_json = // NOLINT(misc-definitions-in-headers)
+     442              :     detail::static_const<detail::to_json_fn>::value;
+     443              : #ifndef JSON_HAS_CPP_17
+     444              : }  // namespace
+     445              : #endif
+     446              : 
+     447              : NLOHMANN_JSON_NAMESPACE_END
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/exceptions.hpp.func-c.html b/html/BayesNet/lib/json/include/nlohmann/detail/exceptions.hpp.func-c.html new file mode 100644 index 0000000..6f85217 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/exceptions.hpp.func-c.html @@ -0,0 +1,173 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/exceptions.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail - exceptions.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %250
Test Date:2024-04-30 13:17:26Functions:0.0 %130
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail10type_error6createIDnLi0EEES2_iRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_0
_ZN8nlohmann16json_abi_v3_11_36detail10type_error6createIDnLi0EEES2_iRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_0
_ZN8nlohmann16json_abi_v3_11_36detail10type_error6createIPKNS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEELi0EEES2_iRKSC_T_0
_ZN8nlohmann16json_abi_v3_11_36detail10type_error6createIPNS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEELi0EEES2_iRKSC_T_0
_ZN8nlohmann16json_abi_v3_11_36detail10type_errorC2EiPKc0
_ZN8nlohmann16json_abi_v3_11_36detail11other_error6createIDnLi0EEES2_iRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_0
_ZN8nlohmann16json_abi_v3_11_36detail11other_errorC2EiPKc0
_ZN8nlohmann16json_abi_v3_11_36detail16invalid_iterator6createIPNS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEELi0EEES2_iRKSC_T_0
_ZN8nlohmann16json_abi_v3_11_36detail16invalid_iteratorC2EiPKc0
_ZN8nlohmann16json_abi_v3_11_36detail9exception11diagnosticsB5cxx11EDn0
_ZN8nlohmann16json_abi_v3_11_36detail9exception11diagnosticsINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEESC_PKT_0
_ZN8nlohmann16json_abi_v3_11_36detail9exception4nameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi0
_ZN8nlohmann16json_abi_v3_11_36detail9exceptionC2EiPKc0
_ZNK8nlohmann16json_abi_v3_11_36detail9exception4whatEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/exceptions.hpp.func.html b/html/BayesNet/lib/json/include/nlohmann/detail/exceptions.hpp.func.html new file mode 100644 index 0000000..5e60b43 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/exceptions.hpp.func.html @@ -0,0 +1,173 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/exceptions.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail - exceptions.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %250
Test Date:2024-04-30 13:17:26Functions:0.0 %130
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail10type_error6createIDnLi0EEES2_iRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_0
_ZN8nlohmann16json_abi_v3_11_36detail10type_error6createIDnLi0EEES2_iRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_0
_ZN8nlohmann16json_abi_v3_11_36detail10type_error6createIPKNS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEELi0EEES2_iRKSC_T_0
_ZN8nlohmann16json_abi_v3_11_36detail10type_error6createIPNS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEELi0EEES2_iRKSC_T_0
_ZN8nlohmann16json_abi_v3_11_36detail10type_errorC2EiPKc0
_ZN8nlohmann16json_abi_v3_11_36detail11other_error6createIDnLi0EEES2_iRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_0
_ZN8nlohmann16json_abi_v3_11_36detail11other_errorC2EiPKc0
_ZN8nlohmann16json_abi_v3_11_36detail16invalid_iterator6createIPNS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEELi0EEES2_iRKSC_T_0
_ZN8nlohmann16json_abi_v3_11_36detail16invalid_iteratorC2EiPKc0
_ZN8nlohmann16json_abi_v3_11_36detail9exception11diagnosticsB5cxx11EDn0
_ZN8nlohmann16json_abi_v3_11_36detail9exception11diagnosticsINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEESC_PKT_0
_ZN8nlohmann16json_abi_v3_11_36detail9exception4nameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi0
_ZN8nlohmann16json_abi_v3_11_36detail9exceptionC2EiPKc0
_ZNK8nlohmann16json_abi_v3_11_36detail9exception4whatEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/exceptions.hpp.gcov.html b/html/BayesNet/lib/json/include/nlohmann/detail/exceptions.hpp.gcov.html new file mode 100644 index 0000000..2e323b7 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/exceptions.hpp.gcov.html @@ -0,0 +1,333 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/exceptions.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail - exceptions.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %250
Test Date:2024-04-30 13:17:26Functions:0.0 %130
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : //     __ _____ _____ _____
+       2              : //  __|  |   __|     |   | |  JSON for Modern C++
+       3              : // |  |  |__   |  |  | | | |  version 3.11.3
+       4              : // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
+       5              : //
+       6              : // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
+       7              : // SPDX-License-Identifier: MIT
+       8              : 
+       9              : #pragma once
+      10              : 
+      11              : #include <cstddef> // nullptr_t
+      12              : #include <exception> // exception
+      13              : #if JSON_DIAGNOSTICS
+      14              :     #include <numeric> // accumulate
+      15              : #endif
+      16              : #include <stdexcept> // runtime_error
+      17              : #include <string> // to_string
+      18              : #include <vector> // vector
+      19              : 
+      20              : #include <nlohmann/detail/value_t.hpp>
+      21              : #include <nlohmann/detail/string_escape.hpp>
+      22              : #include <nlohmann/detail/input/position_t.hpp>
+      23              : #include <nlohmann/detail/macro_scope.hpp>
+      24              : #include <nlohmann/detail/meta/cpp_future.hpp>
+      25              : #include <nlohmann/detail/meta/type_traits.hpp>
+      26              : #include <nlohmann/detail/string_concat.hpp>
+      27              : 
+      28              : NLOHMANN_JSON_NAMESPACE_BEGIN
+      29              : namespace detail
+      30              : {
+      31              : 
+      32              : ////////////////
+      33              : // exceptions //
+      34              : ////////////////
+      35              : 
+      36              : /// @brief general exception of the @ref basic_json class
+      37              : /// @sa https://json.nlohmann.me/api/basic_json/exception/
+      38              : class exception : public std::exception
+      39              : {
+      40              :   public:
+      41              :     /// returns the explanatory string
+      42            0 :     const char* what() const noexcept override
+      43              :     {
+      44            0 :         return m.what();
+      45              :     }
+      46              : 
+      47              :     /// the id of the exception
+      48              :     const int id; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
+      49              : 
+      50              :   protected:
+      51              :     JSON_HEDLEY_NON_NULL(3)
+      52            0 :     exception(int id_, const char* what_arg) : id(id_), m(what_arg) {} // NOLINT(bugprone-throw-keyword-missing)
+      53              : 
+      54            0 :     static std::string name(const std::string& ename, int id_)
+      55              :     {
+      56            0 :         return concat("[json.exception.", ename, '.', std::to_string(id_), "] ");
+      57              :     }
+      58              : 
+      59            0 :     static std::string diagnostics(std::nullptr_t /*leaf_element*/)
+      60              :     {
+      61            0 :         return "";
+      62              :     }
+      63              : 
+      64              :     template<typename BasicJsonType>
+      65            0 :     static std::string diagnostics(const BasicJsonType* leaf_element)
+      66              :     {
+      67              : #if JSON_DIAGNOSTICS
+      68              :         std::vector<std::string> tokens;
+      69              :         for (const auto* current = leaf_element; current != nullptr && current->m_parent != nullptr; current = current->m_parent)
+      70              :         {
+      71              :             switch (current->m_parent->type())
+      72              :             {
+      73              :                 case value_t::array:
+      74              :                 {
+      75              :                     for (std::size_t i = 0; i < current->m_parent->m_data.m_value.array->size(); ++i)
+      76              :                     {
+      77              :                         if (&current->m_parent->m_data.m_value.array->operator[](i) == current)
+      78              :                         {
+      79              :                             tokens.emplace_back(std::to_string(i));
+      80              :                             break;
+      81              :                         }
+      82              :                     }
+      83              :                     break;
+      84              :                 }
+      85              : 
+      86              :                 case value_t::object:
+      87              :                 {
+      88              :                     for (const auto& element : *current->m_parent->m_data.m_value.object)
+      89              :                     {
+      90              :                         if (&element.second == current)
+      91              :                         {
+      92              :                             tokens.emplace_back(element.first.c_str());
+      93              :                             break;
+      94              :                         }
+      95              :                     }
+      96              :                     break;
+      97              :                 }
+      98              : 
+      99              :                 case value_t::null: // LCOV_EXCL_LINE
+     100              :                 case value_t::string: // LCOV_EXCL_LINE
+     101              :                 case value_t::boolean: // LCOV_EXCL_LINE
+     102              :                 case value_t::number_integer: // LCOV_EXCL_LINE
+     103              :                 case value_t::number_unsigned: // LCOV_EXCL_LINE
+     104              :                 case value_t::number_float: // LCOV_EXCL_LINE
+     105              :                 case value_t::binary: // LCOV_EXCL_LINE
+     106              :                 case value_t::discarded: // LCOV_EXCL_LINE
+     107              :                 default:   // LCOV_EXCL_LINE
+     108              :                     break; // LCOV_EXCL_LINE
+     109              :             }
+     110              :         }
+     111              : 
+     112              :         if (tokens.empty())
+     113              :         {
+     114              :             return "";
+     115              :         }
+     116              : 
+     117              :         auto str = std::accumulate(tokens.rbegin(), tokens.rend(), std::string{},
+     118              :                                    [](const std::string & a, const std::string & b)
+     119              :         {
+     120              :             return concat(a, '/', detail::escape(b));
+     121              :         });
+     122              :         return concat('(', str, ") ");
+     123              : #else
+     124              :         static_cast<void>(leaf_element);
+     125            0 :         return "";
+     126              : #endif
+     127              :     }
+     128              : 
+     129              :   private:
+     130              :     /// an exception object as storage for error messages
+     131              :     std::runtime_error m;
+     132              : };
+     133              : 
+     134              : /// @brief exception indicating a parse error
+     135              : /// @sa https://json.nlohmann.me/api/basic_json/parse_error/
+     136              : class parse_error : public exception
+     137              : {
+     138              :   public:
+     139              :     /*!
+     140              :     @brief create a parse error exception
+     141              :     @param[in] id_       the id of the exception
+     142              :     @param[in] pos       the position where the error occurred (or with
+     143              :                          chars_read_total=0 if the position cannot be
+     144              :                          determined)
+     145              :     @param[in] what_arg  the explanatory string
+     146              :     @return parse_error object
+     147              :     */
+     148              :     template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
+     149              :     static parse_error create(int id_, const position_t& pos, const std::string& what_arg, BasicJsonContext context)
+     150              :     {
+     151              :         const std::string w = concat(exception::name("parse_error", id_), "parse error",
+     152              :                                      position_string(pos), ": ", exception::diagnostics(context), what_arg);
+     153              :         return {id_, pos.chars_read_total, w.c_str()};
+     154              :     }
+     155              : 
+     156              :     template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
+     157              :     static parse_error create(int id_, std::size_t byte_, const std::string& what_arg, BasicJsonContext context)
+     158              :     {
+     159              :         const std::string w = concat(exception::name("parse_error", id_), "parse error",
+     160              :                                      (byte_ != 0 ? (concat(" at byte ", std::to_string(byte_))) : ""),
+     161              :                                      ": ", exception::diagnostics(context), what_arg);
+     162              :         return {id_, byte_, w.c_str()};
+     163              :     }
+     164              : 
+     165              :     /*!
+     166              :     @brief byte index of the parse error
+     167              : 
+     168              :     The byte index of the last read character in the input file.
+     169              : 
+     170              :     @note For an input with n bytes, 1 is the index of the first character and
+     171              :           n+1 is the index of the terminating null byte or the end of file.
+     172              :           This also holds true when reading a byte vector (CBOR or MessagePack).
+     173              :     */
+     174              :     const std::size_t byte;
+     175              : 
+     176              :   private:
+     177              :     parse_error(int id_, std::size_t byte_, const char* what_arg)
+     178              :         : exception(id_, what_arg), byte(byte_) {}
+     179              : 
+     180              :     static std::string position_string(const position_t& pos)
+     181              :     {
+     182              :         return concat(" at line ", std::to_string(pos.lines_read + 1),
+     183              :                       ", column ", std::to_string(pos.chars_read_current_line));
+     184              :     }
+     185              : };
+     186              : 
+     187              : /// @brief exception indicating errors with iterators
+     188              : /// @sa https://json.nlohmann.me/api/basic_json/invalid_iterator/
+     189              : class invalid_iterator : public exception
+     190              : {
+     191              :   public:
+     192              :     template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
+     193            0 :     static invalid_iterator create(int id_, const std::string& what_arg, BasicJsonContext context)
+     194              :     {
+     195            0 :         const std::string w = concat(exception::name("invalid_iterator", id_), exception::diagnostics(context), what_arg);
+     196            0 :         return {id_, w.c_str()};
+     197            0 :     }
+     198              : 
+     199              :   private:
+     200              :     JSON_HEDLEY_NON_NULL(3)
+     201            0 :     invalid_iterator(int id_, const char* what_arg)
+     202            0 :         : exception(id_, what_arg) {}
+     203              : };
+     204              : 
+     205              : /// @brief exception indicating executing a member function with a wrong type
+     206              : /// @sa https://json.nlohmann.me/api/basic_json/type_error/
+     207              : class type_error : public exception
+     208              : {
+     209              :   public:
+     210              :     template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
+     211            0 :     static type_error create(int id_, const std::string& what_arg, BasicJsonContext context)
+     212              :     {
+     213            0 :         const std::string w = concat(exception::name("type_error", id_), exception::diagnostics(context), what_arg);
+     214            0 :         return {id_, w.c_str()};
+     215            0 :     }
+     216              : 
+     217              :   private:
+     218              :     JSON_HEDLEY_NON_NULL(3)
+     219            0 :     type_error(int id_, const char* what_arg) : exception(id_, what_arg) {}
+     220              : };
+     221              : 
+     222              : /// @brief exception indicating access out of the defined range
+     223              : /// @sa https://json.nlohmann.me/api/basic_json/out_of_range/
+     224              : class out_of_range : public exception
+     225              : {
+     226              :   public:
+     227              :     template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
+     228              :     static out_of_range create(int id_, const std::string& what_arg, BasicJsonContext context)
+     229              :     {
+     230              :         const std::string w = concat(exception::name("out_of_range", id_), exception::diagnostics(context), what_arg);
+     231              :         return {id_, w.c_str()};
+     232              :     }
+     233              : 
+     234              :   private:
+     235              :     JSON_HEDLEY_NON_NULL(3)
+     236              :     out_of_range(int id_, const char* what_arg) : exception(id_, what_arg) {}
+     237              : };
+     238              : 
+     239              : /// @brief exception indicating other library errors
+     240              : /// @sa https://json.nlohmann.me/api/basic_json/other_error/
+     241              : class other_error : public exception
+     242              : {
+     243              :   public:
+     244              :     template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
+     245            0 :     static other_error create(int id_, const std::string& what_arg, BasicJsonContext context)
+     246              :     {
+     247            0 :         const std::string w = concat(exception::name("other_error", id_), exception::diagnostics(context), what_arg);
+     248            0 :         return {id_, w.c_str()};
+     249            0 :     }
+     250              : 
+     251              :   private:
+     252              :     JSON_HEDLEY_NON_NULL(3)
+     253            0 :     other_error(int id_, const char* what_arg) : exception(id_, what_arg) {}
+     254              : };
+     255              : 
+     256              : }  // namespace detail
+     257              : NLOHMANN_JSON_NAMESPACE_END
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/index-sort-f.html b/html/BayesNet/lib/json/include/nlohmann/detail/index-sort-f.html new file mode 100644 index 0000000..3b84f39 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/index-sort-f.html @@ -0,0 +1,141 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detailCoverageTotalHit
Test:coverage.infoLines:18.7 %7514
Test Date:2024-04-30 13:17:26Functions:25.0 %7619
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
string_escape.hpp +
0.0%
+
0.0 %110.0 %2
exceptions.hpp +
0.0%
+
0.0 %250.0 %13
string_concat.hpp +
0.0%
+
0.0 %240.0 %42
json_ref.hpp +
93.3%93.3%
+
93.3 %1514100.0 %1919
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/index-sort-l.html b/html/BayesNet/lib/json/include/nlohmann/detail/index-sort-l.html new file mode 100644 index 0000000..ae09852 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/index-sort-l.html @@ -0,0 +1,141 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detailCoverageTotalHit
Test:coverage.infoLines:18.7 %7514
Test Date:2024-04-30 13:17:26Functions:25.0 %7619
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
string_escape.hpp +
0.0%
+
0.0 %110.0 %2
string_concat.hpp +
0.0%
+
0.0 %240.0 %42
exceptions.hpp +
0.0%
+
0.0 %250.0 %13
json_ref.hpp +
93.3%93.3%
+
93.3 %1514100.0 %1919
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/index.html b/html/BayesNet/lib/json/include/nlohmann/detail/index.html new file mode 100644 index 0000000..588cc9f --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/index.html @@ -0,0 +1,141 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detailCoverageTotalHit
Test:coverage.infoLines:18.7 %7514
Test Date:2024-04-30 13:17:26Functions:25.0 %7619
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
exceptions.hpp +
0.0%
+
0.0 %250.0 %13
json_ref.hpp +
93.3%93.3%
+
93.3 %1514100.0 %1919
string_concat.hpp +
0.0%
+
0.0 %240.0 %42
string_escape.hpp +
0.0%
+
0.0 %110.0 %2
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/iterators/index-sort-f.html b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/index-sort-f.html new file mode 100644 index 0000000..9981fc8 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/index-sort-f.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/iterators + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/iteratorsCoverageTotalHit
Test:coverage.infoLines:54.6 %11965
Test Date:2024-04-30 13:17:26Functions:77.3 %2217
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
primitive_iterator.hpp +
0.0%
+
0.0 %130.0 %5
iter_impl.hpp +
51.8%51.8%
+
51.8 %8544100.0 %88
iteration_proxy.hpp +
100.0%
+
100.0 %2121100.0 %99
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/iterators/index-sort-l.html b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/index-sort-l.html new file mode 100644 index 0000000..a8f8602 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/index-sort-l.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/iterators + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/iteratorsCoverageTotalHit
Test:coverage.infoLines:54.6 %11965
Test Date:2024-04-30 13:17:26Functions:77.3 %2217
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
primitive_iterator.hpp +
0.0%
+
0.0 %130.0 %5
iter_impl.hpp +
51.8%51.8%
+
51.8 %8544100.0 %88
iteration_proxy.hpp +
100.0%
+
100.0 %2121100.0 %99
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/iterators/index.html b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/index.html new file mode 100644 index 0000000..55cd5f3 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/index.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/iterators + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/iteratorsCoverageTotalHit
Test:coverage.infoLines:54.6 %11965
Test Date:2024-04-30 13:17:26Functions:77.3 %2217
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
iter_impl.hpp +
51.8%51.8%
+
51.8 %8544100.0 %88
iteration_proxy.hpp +
100.0%
+
100.0 %2121100.0 %99
primitive_iterator.hpp +
0.0%
+
0.0 %130.0 %5
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/iterators/iter_impl.hpp.func-c.html b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/iter_impl.hpp.func-c.html new file mode 100644 index 0000000..015bdc0 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/iter_impl.hpp.func-c.html @@ -0,0 +1,131 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/iterators/iter_impl.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/iterators - iter_impl.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:51.8 %8544
Test Date:2024-04-30 13:17:26Functions:100.0 %88
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE7set_endEv4
_ZN8nlohmann16json_abi_v3_11_36detail9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE9set_beginEv4
_ZN8nlohmann16json_abi_v3_11_36detail9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2EPSF_8
_ZN8nlohmann16json_abi_v3_11_36detail9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEppEv16
_ZNK8nlohmann16json_abi_v3_11_36detail9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEeqISG_LDnEEEbRKT_20
_ZNK8nlohmann16json_abi_v3_11_36detail9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEneISG_LDnEEEbRKT_20
_ZNK8nlohmann16json_abi_v3_11_36detail9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE5valueEv32
_ZNK8nlohmann16json_abi_v3_11_36detail9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEdeEv32
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/iterators/iter_impl.hpp.func.html b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/iter_impl.hpp.func.html new file mode 100644 index 0000000..f25308d --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/iter_impl.hpp.func.html @@ -0,0 +1,131 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/iterators/iter_impl.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/iterators - iter_impl.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:51.8 %8544
Test Date:2024-04-30 13:17:26Functions:100.0 %88
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE7set_endEv4
_ZN8nlohmann16json_abi_v3_11_36detail9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE9set_beginEv4
_ZN8nlohmann16json_abi_v3_11_36detail9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2EPSF_8
_ZN8nlohmann16json_abi_v3_11_36detail9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEppEv16
_ZNK8nlohmann16json_abi_v3_11_36detail9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE5valueEv32
_ZNK8nlohmann16json_abi_v3_11_36detail9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEdeEv32
_ZNK8nlohmann16json_abi_v3_11_36detail9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEeqISG_LDnEEEbRKT_20
_ZNK8nlohmann16json_abi_v3_11_36detail9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEneISG_LDnEEEbRKT_20
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/iterators/iter_impl.hpp.gcov.html b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/iter_impl.hpp.gcov.html new file mode 100644 index 0000000..a01f487 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/iter_impl.hpp.gcov.html @@ -0,0 +1,827 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/iterators/iter_impl.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/iterators - iter_impl.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:51.8 %8544
Test Date:2024-04-30 13:17:26Functions:100.0 %88
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : //     __ _____ _____ _____
+       2              : //  __|  |   __|     |   | |  JSON for Modern C++
+       3              : // |  |  |__   |  |  | | | |  version 3.11.3
+       4              : // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
+       5              : //
+       6              : // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
+       7              : // SPDX-License-Identifier: MIT
+       8              : 
+       9              : #pragma once
+      10              : 
+      11              : #include <iterator> // iterator, random_access_iterator_tag, bidirectional_iterator_tag, advance, next
+      12              : #include <type_traits> // conditional, is_const, remove_const
+      13              : 
+      14              : #include <nlohmann/detail/exceptions.hpp>
+      15              : #include <nlohmann/detail/iterators/internal_iterator.hpp>
+      16              : #include <nlohmann/detail/iterators/primitive_iterator.hpp>
+      17              : #include <nlohmann/detail/macro_scope.hpp>
+      18              : #include <nlohmann/detail/meta/cpp_future.hpp>
+      19              : #include <nlohmann/detail/meta/type_traits.hpp>
+      20              : #include <nlohmann/detail/value_t.hpp>
+      21              : 
+      22              : NLOHMANN_JSON_NAMESPACE_BEGIN
+      23              : namespace detail
+      24              : {
+      25              : 
+      26              : // forward declare, to be able to friend it later on
+      27              : template<typename IteratorType> class iteration_proxy;
+      28              : template<typename IteratorType> class iteration_proxy_value;
+      29              : 
+      30              : /*!
+      31              : @brief a template for a bidirectional iterator for the @ref basic_json class
+      32              : This class implements a both iterators (iterator and const_iterator) for the
+      33              : @ref basic_json class.
+      34              : @note An iterator is called *initialized* when a pointer to a JSON value has
+      35              :       been set (e.g., by a constructor or a copy assignment). If the iterator is
+      36              :       default-constructed, it is *uninitialized* and most methods are undefined.
+      37              :       **The library uses assertions to detect calls on uninitialized iterators.**
+      38              : @requirement The class satisfies the following concept requirements:
+      39              : -
+      40              : [BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator):
+      41              :   The iterator that can be moved can be moved in both directions (i.e.
+      42              :   incremented and decremented).
+      43              : @since version 1.0.0, simplified in version 2.0.9, change to bidirectional
+      44              :        iterators in version 3.0.0 (see https://github.com/nlohmann/json/issues/593)
+      45              : */
+      46              : template<typename BasicJsonType>
+      47              : class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-special-member-functions)
+      48              : {
+      49              :     /// the iterator with BasicJsonType of different const-ness
+      50              :     using other_iter_impl = iter_impl<typename std::conditional<std::is_const<BasicJsonType>::value, typename std::remove_const<BasicJsonType>::type, const BasicJsonType>::type>;
+      51              :     /// allow basic_json to access private members
+      52              :     friend other_iter_impl;
+      53              :     friend BasicJsonType;
+      54              :     friend iteration_proxy<iter_impl>;
+      55              :     friend iteration_proxy_value<iter_impl>;
+      56              : 
+      57              :     using object_t = typename BasicJsonType::object_t;
+      58              :     using array_t = typename BasicJsonType::array_t;
+      59              :     // make sure BasicJsonType is basic_json or const basic_json
+      60              :     static_assert(is_basic_json<typename std::remove_const<BasicJsonType>::type>::value,
+      61              :                   "iter_impl only accepts (const) basic_json");
+      62              :     // superficial check for the LegacyBidirectionalIterator named requirement
+      63              :     static_assert(std::is_base_of<std::bidirectional_iterator_tag, std::bidirectional_iterator_tag>::value
+      64              :                   &&  std::is_base_of<std::bidirectional_iterator_tag, typename std::iterator_traits<typename array_t::iterator>::iterator_category>::value,
+      65              :                   "basic_json iterator assumes array and object type iterators satisfy the LegacyBidirectionalIterator named requirement.");
+      66              : 
+      67              :   public:
+      68              :     /// The std::iterator class template (used as a base class to provide typedefs) is deprecated in C++17.
+      69              :     /// The C++ Standard has never required user-defined iterators to derive from std::iterator.
+      70              :     /// A user-defined iterator should provide publicly accessible typedefs named
+      71              :     /// iterator_category, value_type, difference_type, pointer, and reference.
+      72              :     /// Note that value_type is required to be non-const, even for constant iterators.
+      73              :     using iterator_category = std::bidirectional_iterator_tag;
+      74              : 
+      75              :     /// the type of the values when the iterator is dereferenced
+      76              :     using value_type = typename BasicJsonType::value_type;
+      77              :     /// a type to represent differences between iterators
+      78              :     using difference_type = typename BasicJsonType::difference_type;
+      79              :     /// defines a pointer to the type iterated over (value_type)
+      80              :     using pointer = typename std::conditional<std::is_const<BasicJsonType>::value,
+      81              :           typename BasicJsonType::const_pointer,
+      82              :           typename BasicJsonType::pointer>::type;
+      83              :     /// defines a reference to the type iterated over (value_type)
+      84              :     using reference =
+      85              :         typename std::conditional<std::is_const<BasicJsonType>::value,
+      86              :         typename BasicJsonType::const_reference,
+      87              :         typename BasicJsonType::reference>::type;
+      88              : 
+      89              :     iter_impl() = default;
+      90              :     ~iter_impl() = default;
+      91              :     iter_impl(iter_impl&&) noexcept = default;
+      92              :     iter_impl& operator=(iter_impl&&) noexcept = default;
+      93              : 
+      94              :     /*!
+      95              :     @brief constructor for a given JSON instance
+      96              :     @param[in] object  pointer to a JSON object for this iterator
+      97              :     @pre object != nullptr
+      98              :     @post The iterator is initialized; i.e. `m_object != nullptr`.
+      99              :     */
+     100            8 :     explicit iter_impl(pointer object) noexcept : m_object(object)
+     101              :     {
+     102            8 :         JSON_ASSERT(m_object != nullptr);
+     103              : 
+     104            8 :         switch (m_object->m_data.m_type)
+     105              :         {
+     106            0 :             case value_t::object:
+     107              :             {
+     108            0 :                 m_it.object_iterator = typename object_t::iterator();
+     109            0 :                 break;
+     110              :             }
+     111              : 
+     112            8 :             case value_t::array:
+     113              :             {
+     114            8 :                 m_it.array_iterator = typename array_t::iterator();
+     115            8 :                 break;
+     116              :             }
+     117              : 
+     118            0 :             case value_t::null:
+     119              :             case value_t::string:
+     120              :             case value_t::boolean:
+     121              :             case value_t::number_integer:
+     122              :             case value_t::number_unsigned:
+     123              :             case value_t::number_float:
+     124              :             case value_t::binary:
+     125              :             case value_t::discarded:
+     126              :             default:
+     127              :             {
+     128            0 :                 m_it.primitive_iterator = primitive_iterator_t();
+     129            0 :                 break;
+     130              :             }
+     131              :         }
+     132            8 :     }
+     133              : 
+     134              :     /*!
+     135              :     @note The conventional copy constructor and copy assignment are implicitly
+     136              :           defined. Combined with the following converting constructor and
+     137              :           assignment, they support: (1) copy from iterator to iterator, (2)
+     138              :           copy from const iterator to const iterator, and (3) conversion from
+     139              :           iterator to const iterator. However conversion from const iterator
+     140              :           to iterator is not defined.
+     141              :     */
+     142              : 
+     143              :     /*!
+     144              :     @brief const copy constructor
+     145              :     @param[in] other const iterator to copy from
+     146              :     @note This copy constructor had to be defined explicitly to circumvent a bug
+     147              :           occurring on msvc v19.0 compiler (VS 2015) debug build. For more
+     148              :           information refer to: https://github.com/nlohmann/json/issues/1608
+     149              :     */
+     150              :     iter_impl(const iter_impl<const BasicJsonType>& other) noexcept
+     151              :         : m_object(other.m_object), m_it(other.m_it)
+     152              :     {}
+     153              : 
+     154              :     /*!
+     155              :     @brief converting assignment
+     156              :     @param[in] other const iterator to copy from
+     157              :     @return const/non-const iterator
+     158              :     @note It is not checked whether @a other is initialized.
+     159              :     */
+     160              :     iter_impl& operator=(const iter_impl<const BasicJsonType>& other) noexcept
+     161              :     {
+     162              :         if (&other != this)
+     163              :         {
+     164              :             m_object = other.m_object;
+     165              :             m_it = other.m_it;
+     166              :         }
+     167              :         return *this;
+     168              :     }
+     169              : 
+     170              :     /*!
+     171              :     @brief converting constructor
+     172              :     @param[in] other  non-const iterator to copy from
+     173              :     @note It is not checked whether @a other is initialized.
+     174              :     */
+     175              :     iter_impl(const iter_impl<typename std::remove_const<BasicJsonType>::type>& other) noexcept
+     176              :         : m_object(other.m_object), m_it(other.m_it)
+     177              :     {}
+     178              : 
+     179              :     /*!
+     180              :     @brief converting assignment
+     181              :     @param[in] other  non-const iterator to copy from
+     182              :     @return const/non-const iterator
+     183              :     @note It is not checked whether @a other is initialized.
+     184              :     */
+     185              :     iter_impl& operator=(const iter_impl<typename std::remove_const<BasicJsonType>::type>& other) noexcept // NOLINT(cert-oop54-cpp)
+     186              :     {
+     187              :         m_object = other.m_object;
+     188              :         m_it = other.m_it;
+     189              :         return *this;
+     190              :     }
+     191              : 
+     192              :   JSON_PRIVATE_UNLESS_TESTED:
+     193              :     /*!
+     194              :     @brief set the iterator to the first value
+     195              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     196              :     */
+     197            4 :     void set_begin() noexcept
+     198              :     {
+     199            4 :         JSON_ASSERT(m_object != nullptr);
+     200              : 
+     201            4 :         switch (m_object->m_data.m_type)
+     202              :         {
+     203            0 :             case value_t::object:
+     204              :             {
+     205            0 :                 m_it.object_iterator = m_object->m_data.m_value.object->begin();
+     206            0 :                 break;
+     207              :             }
+     208              : 
+     209            4 :             case value_t::array:
+     210              :             {
+     211            4 :                 m_it.array_iterator = m_object->m_data.m_value.array->begin();
+     212            4 :                 break;
+     213              :             }
+     214              : 
+     215            0 :             case value_t::null:
+     216              :             {
+     217              :                 // set to end so begin()==end() is true: null is empty
+     218            0 :                 m_it.primitive_iterator.set_end();
+     219            0 :                 break;
+     220              :             }
+     221              : 
+     222            0 :             case value_t::string:
+     223              :             case value_t::boolean:
+     224              :             case value_t::number_integer:
+     225              :             case value_t::number_unsigned:
+     226              :             case value_t::number_float:
+     227              :             case value_t::binary:
+     228              :             case value_t::discarded:
+     229              :             default:
+     230              :             {
+     231            0 :                 m_it.primitive_iterator.set_begin();
+     232            0 :                 break;
+     233              :             }
+     234              :         }
+     235            4 :     }
+     236              : 
+     237              :     /*!
+     238              :     @brief set the iterator past the last value
+     239              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     240              :     */
+     241            4 :     void set_end() noexcept
+     242              :     {
+     243            4 :         JSON_ASSERT(m_object != nullptr);
+     244              : 
+     245            4 :         switch (m_object->m_data.m_type)
+     246              :         {
+     247            0 :             case value_t::object:
+     248              :             {
+     249            0 :                 m_it.object_iterator = m_object->m_data.m_value.object->end();
+     250            0 :                 break;
+     251              :             }
+     252              : 
+     253            4 :             case value_t::array:
+     254              :             {
+     255            4 :                 m_it.array_iterator = m_object->m_data.m_value.array->end();
+     256            4 :                 break;
+     257              :             }
+     258              : 
+     259            0 :             case value_t::null:
+     260              :             case value_t::string:
+     261              :             case value_t::boolean:
+     262              :             case value_t::number_integer:
+     263              :             case value_t::number_unsigned:
+     264              :             case value_t::number_float:
+     265              :             case value_t::binary:
+     266              :             case value_t::discarded:
+     267              :             default:
+     268              :             {
+     269            0 :                 m_it.primitive_iterator.set_end();
+     270            0 :                 break;
+     271              :             }
+     272              :         }
+     273            4 :     }
+     274              : 
+     275              :   public:
+     276              :     /*!
+     277              :     @brief return a reference to the value pointed to by the iterator
+     278              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     279              :     */
+     280           32 :     reference operator*() const
+     281              :     {
+     282           32 :         JSON_ASSERT(m_object != nullptr);
+     283              : 
+     284           32 :         switch (m_object->m_data.m_type)
+     285              :         {
+     286            0 :             case value_t::object:
+     287              :             {
+     288            0 :                 JSON_ASSERT(m_it.object_iterator != m_object->m_data.m_value.object->end());
+     289            0 :                 return m_it.object_iterator->second;
+     290              :             }
+     291              : 
+     292           32 :             case value_t::array:
+     293              :             {
+     294           32 :                 JSON_ASSERT(m_it.array_iterator != m_object->m_data.m_value.array->end());
+     295           32 :                 return *m_it.array_iterator;
+     296              :             }
+     297              : 
+     298            0 :             case value_t::null:
+     299            0 :                 JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object));
+     300              : 
+     301            0 :             case value_t::string:
+     302              :             case value_t::boolean:
+     303              :             case value_t::number_integer:
+     304              :             case value_t::number_unsigned:
+     305              :             case value_t::number_float:
+     306              :             case value_t::binary:
+     307              :             case value_t::discarded:
+     308              :             default:
+     309              :             {
+     310            0 :                 if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin()))
+     311              :                 {
+     312            0 :                     return *m_object;
+     313              :                 }
+     314              : 
+     315            0 :                 JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object));
+     316              :             }
+     317              :         }
+     318              :     }
+     319              : 
+     320              :     /*!
+     321              :     @brief dereference the iterator
+     322              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     323              :     */
+     324              :     pointer operator->() const
+     325              :     {
+     326              :         JSON_ASSERT(m_object != nullptr);
+     327              : 
+     328              :         switch (m_object->m_data.m_type)
+     329              :         {
+     330              :             case value_t::object:
+     331              :             {
+     332              :                 JSON_ASSERT(m_it.object_iterator != m_object->m_data.m_value.object->end());
+     333              :                 return &(m_it.object_iterator->second);
+     334              :             }
+     335              : 
+     336              :             case value_t::array:
+     337              :             {
+     338              :                 JSON_ASSERT(m_it.array_iterator != m_object->m_data.m_value.array->end());
+     339              :                 return &*m_it.array_iterator;
+     340              :             }
+     341              : 
+     342              :             case value_t::null:
+     343              :             case value_t::string:
+     344              :             case value_t::boolean:
+     345              :             case value_t::number_integer:
+     346              :             case value_t::number_unsigned:
+     347              :             case value_t::number_float:
+     348              :             case value_t::binary:
+     349              :             case value_t::discarded:
+     350              :             default:
+     351              :             {
+     352              :                 if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin()))
+     353              :                 {
+     354              :                     return m_object;
+     355              :                 }
+     356              : 
+     357              :                 JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object));
+     358              :             }
+     359              :         }
+     360              :     }
+     361              : 
+     362              :     /*!
+     363              :     @brief post-increment (it++)
+     364              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     365              :     */
+     366              :     iter_impl operator++(int)& // NOLINT(cert-dcl21-cpp)
+     367              :     {
+     368              :         auto result = *this;
+     369              :         ++(*this);
+     370              :         return result;
+     371              :     }
+     372              : 
+     373              :     /*!
+     374              :     @brief pre-increment (++it)
+     375              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     376              :     */
+     377           16 :     iter_impl& operator++()
+     378              :     {
+     379           16 :         JSON_ASSERT(m_object != nullptr);
+     380              : 
+     381           16 :         switch (m_object->m_data.m_type)
+     382              :         {
+     383            0 :             case value_t::object:
+     384              :             {
+     385            0 :                 std::advance(m_it.object_iterator, 1);
+     386            0 :                 break;
+     387              :             }
+     388              : 
+     389           16 :             case value_t::array:
+     390              :             {
+     391           16 :                 std::advance(m_it.array_iterator, 1);
+     392           16 :                 break;
+     393              :             }
+     394              : 
+     395            0 :             case value_t::null:
+     396              :             case value_t::string:
+     397              :             case value_t::boolean:
+     398              :             case value_t::number_integer:
+     399              :             case value_t::number_unsigned:
+     400              :             case value_t::number_float:
+     401              :             case value_t::binary:
+     402              :             case value_t::discarded:
+     403              :             default:
+     404              :             {
+     405            0 :                 ++m_it.primitive_iterator;
+     406            0 :                 break;
+     407              :             }
+     408              :         }
+     409              : 
+     410           16 :         return *this;
+     411              :     }
+     412              : 
+     413              :     /*!
+     414              :     @brief post-decrement (it--)
+     415              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     416              :     */
+     417              :     iter_impl operator--(int)& // NOLINT(cert-dcl21-cpp)
+     418              :     {
+     419              :         auto result = *this;
+     420              :         --(*this);
+     421              :         return result;
+     422              :     }
+     423              : 
+     424              :     /*!
+     425              :     @brief pre-decrement (--it)
+     426              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     427              :     */
+     428              :     iter_impl& operator--()
+     429              :     {
+     430              :         JSON_ASSERT(m_object != nullptr);
+     431              : 
+     432              :         switch (m_object->m_data.m_type)
+     433              :         {
+     434              :             case value_t::object:
+     435              :             {
+     436              :                 std::advance(m_it.object_iterator, -1);
+     437              :                 break;
+     438              :             }
+     439              : 
+     440              :             case value_t::array:
+     441              :             {
+     442              :                 std::advance(m_it.array_iterator, -1);
+     443              :                 break;
+     444              :             }
+     445              : 
+     446              :             case value_t::null:
+     447              :             case value_t::string:
+     448              :             case value_t::boolean:
+     449              :             case value_t::number_integer:
+     450              :             case value_t::number_unsigned:
+     451              :             case value_t::number_float:
+     452              :             case value_t::binary:
+     453              :             case value_t::discarded:
+     454              :             default:
+     455              :             {
+     456              :                 --m_it.primitive_iterator;
+     457              :                 break;
+     458              :             }
+     459              :         }
+     460              : 
+     461              :         return *this;
+     462              :     }
+     463              : 
+     464              :     /*!
+     465              :     @brief comparison: equal
+     466              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     467              :     */
+     468              :     template < typename IterImpl, detail::enable_if_t < (std::is_same<IterImpl, iter_impl>::value || std::is_same<IterImpl, other_iter_impl>::value), std::nullptr_t > = nullptr >
+     469           20 :     bool operator==(const IterImpl& other) const
+     470              :     {
+     471              :         // if objects are not the same, the comparison is undefined
+     472           20 :         if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object))
+     473              :         {
+     474            0 :             JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers", m_object));
+     475              :         }
+     476              : 
+     477           20 :         JSON_ASSERT(m_object != nullptr);
+     478              : 
+     479           20 :         switch (m_object->m_data.m_type)
+     480              :         {
+     481            0 :             case value_t::object:
+     482            0 :                 return (m_it.object_iterator == other.m_it.object_iterator);
+     483              : 
+     484           20 :             case value_t::array:
+     485           20 :                 return (m_it.array_iterator == other.m_it.array_iterator);
+     486              : 
+     487            0 :             case value_t::null:
+     488              :             case value_t::string:
+     489              :             case value_t::boolean:
+     490              :             case value_t::number_integer:
+     491              :             case value_t::number_unsigned:
+     492              :             case value_t::number_float:
+     493              :             case value_t::binary:
+     494              :             case value_t::discarded:
+     495              :             default:
+     496            0 :                 return (m_it.primitive_iterator == other.m_it.primitive_iterator);
+     497              :         }
+     498              :     }
+     499              : 
+     500              :     /*!
+     501              :     @brief comparison: not equal
+     502              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     503              :     */
+     504              :     template < typename IterImpl, detail::enable_if_t < (std::is_same<IterImpl, iter_impl>::value || std::is_same<IterImpl, other_iter_impl>::value), std::nullptr_t > = nullptr >
+     505           20 :     bool operator!=(const IterImpl& other) const
+     506              :     {
+     507           20 :         return !operator==(other);
+     508              :     }
+     509              : 
+     510              :     /*!
+     511              :     @brief comparison: smaller
+     512              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     513              :     */
+     514              :     bool operator<(const iter_impl& other) const
+     515              :     {
+     516              :         // if objects are not the same, the comparison is undefined
+     517              :         if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object))
+     518              :         {
+     519              :             JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers", m_object));
+     520              :         }
+     521              : 
+     522              :         JSON_ASSERT(m_object != nullptr);
+     523              : 
+     524              :         switch (m_object->m_data.m_type)
+     525              :         {
+     526              :             case value_t::object:
+     527              :                 JSON_THROW(invalid_iterator::create(213, "cannot compare order of object iterators", m_object));
+     528              : 
+     529              :             case value_t::array:
+     530              :                 return (m_it.array_iterator < other.m_it.array_iterator);
+     531              : 
+     532              :             case value_t::null:
+     533              :             case value_t::string:
+     534              :             case value_t::boolean:
+     535              :             case value_t::number_integer:
+     536              :             case value_t::number_unsigned:
+     537              :             case value_t::number_float:
+     538              :             case value_t::binary:
+     539              :             case value_t::discarded:
+     540              :             default:
+     541              :                 return (m_it.primitive_iterator < other.m_it.primitive_iterator);
+     542              :         }
+     543              :     }
+     544              : 
+     545              :     /*!
+     546              :     @brief comparison: less than or equal
+     547              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     548              :     */
+     549              :     bool operator<=(const iter_impl& other) const
+     550              :     {
+     551              :         return !other.operator < (*this);
+     552              :     }
+     553              : 
+     554              :     /*!
+     555              :     @brief comparison: greater than
+     556              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     557              :     */
+     558              :     bool operator>(const iter_impl& other) const
+     559              :     {
+     560              :         return !operator<=(other);
+     561              :     }
+     562              : 
+     563              :     /*!
+     564              :     @brief comparison: greater than or equal
+     565              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     566              :     */
+     567              :     bool operator>=(const iter_impl& other) const
+     568              :     {
+     569              :         return !operator<(other);
+     570              :     }
+     571              : 
+     572              :     /*!
+     573              :     @brief add to iterator
+     574              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     575              :     */
+     576              :     iter_impl& operator+=(difference_type i)
+     577              :     {
+     578              :         JSON_ASSERT(m_object != nullptr);
+     579              : 
+     580              :         switch (m_object->m_data.m_type)
+     581              :         {
+     582              :             case value_t::object:
+     583              :                 JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators", m_object));
+     584              : 
+     585              :             case value_t::array:
+     586              :             {
+     587              :                 std::advance(m_it.array_iterator, i);
+     588              :                 break;
+     589              :             }
+     590              : 
+     591              :             case value_t::null:
+     592              :             case value_t::string:
+     593              :             case value_t::boolean:
+     594              :             case value_t::number_integer:
+     595              :             case value_t::number_unsigned:
+     596              :             case value_t::number_float:
+     597              :             case value_t::binary:
+     598              :             case value_t::discarded:
+     599              :             default:
+     600              :             {
+     601              :                 m_it.primitive_iterator += i;
+     602              :                 break;
+     603              :             }
+     604              :         }
+     605              : 
+     606              :         return *this;
+     607              :     }
+     608              : 
+     609              :     /*!
+     610              :     @brief subtract from iterator
+     611              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     612              :     */
+     613              :     iter_impl& operator-=(difference_type i)
+     614              :     {
+     615              :         return operator+=(-i);
+     616              :     }
+     617              : 
+     618              :     /*!
+     619              :     @brief add to iterator
+     620              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     621              :     */
+     622              :     iter_impl operator+(difference_type i) const
+     623              :     {
+     624              :         auto result = *this;
+     625              :         result += i;
+     626              :         return result;
+     627              :     }
+     628              : 
+     629              :     /*!
+     630              :     @brief addition of distance and iterator
+     631              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     632              :     */
+     633              :     friend iter_impl operator+(difference_type i, const iter_impl& it)
+     634              :     {
+     635              :         auto result = it;
+     636              :         result += i;
+     637              :         return result;
+     638              :     }
+     639              : 
+     640              :     /*!
+     641              :     @brief subtract from iterator
+     642              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     643              :     */
+     644              :     iter_impl operator-(difference_type i) const
+     645              :     {
+     646              :         auto result = *this;
+     647              :         result -= i;
+     648              :         return result;
+     649              :     }
+     650              : 
+     651              :     /*!
+     652              :     @brief return difference
+     653              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     654              :     */
+     655              :     difference_type operator-(const iter_impl& other) const
+     656              :     {
+     657              :         JSON_ASSERT(m_object != nullptr);
+     658              : 
+     659              :         switch (m_object->m_data.m_type)
+     660              :         {
+     661              :             case value_t::object:
+     662              :                 JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators", m_object));
+     663              : 
+     664              :             case value_t::array:
+     665              :                 return m_it.array_iterator - other.m_it.array_iterator;
+     666              : 
+     667              :             case value_t::null:
+     668              :             case value_t::string:
+     669              :             case value_t::boolean:
+     670              :             case value_t::number_integer:
+     671              :             case value_t::number_unsigned:
+     672              :             case value_t::number_float:
+     673              :             case value_t::binary:
+     674              :             case value_t::discarded:
+     675              :             default:
+     676              :                 return m_it.primitive_iterator - other.m_it.primitive_iterator;
+     677              :         }
+     678              :     }
+     679              : 
+     680              :     /*!
+     681              :     @brief access to successor
+     682              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     683              :     */
+     684              :     reference operator[](difference_type n) const
+     685              :     {
+     686              :         JSON_ASSERT(m_object != nullptr);
+     687              : 
+     688              :         switch (m_object->m_data.m_type)
+     689              :         {
+     690              :             case value_t::object:
+     691              :                 JSON_THROW(invalid_iterator::create(208, "cannot use operator[] for object iterators", m_object));
+     692              : 
+     693              :             case value_t::array:
+     694              :                 return *std::next(m_it.array_iterator, n);
+     695              : 
+     696              :             case value_t::null:
+     697              :                 JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object));
+     698              : 
+     699              :             case value_t::string:
+     700              :             case value_t::boolean:
+     701              :             case value_t::number_integer:
+     702              :             case value_t::number_unsigned:
+     703              :             case value_t::number_float:
+     704              :             case value_t::binary:
+     705              :             case value_t::discarded:
+     706              :             default:
+     707              :             {
+     708              :                 if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.get_value() == -n))
+     709              :                 {
+     710              :                     return *m_object;
+     711              :                 }
+     712              : 
+     713              :                 JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object));
+     714              :             }
+     715              :         }
+     716              :     }
+     717              : 
+     718              :     /*!
+     719              :     @brief return the key of an object iterator
+     720              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     721              :     */
+     722              :     const typename object_t::key_type& key() const
+     723              :     {
+     724              :         JSON_ASSERT(m_object != nullptr);
+     725              : 
+     726              :         if (JSON_HEDLEY_LIKELY(m_object->is_object()))
+     727              :         {
+     728              :             return m_it.object_iterator->first;
+     729              :         }
+     730              : 
+     731              :         JSON_THROW(invalid_iterator::create(207, "cannot use key() for non-object iterators", m_object));
+     732              :     }
+     733              : 
+     734              :     /*!
+     735              :     @brief return the value of an iterator
+     736              :     @pre The iterator is initialized; i.e. `m_object != nullptr`.
+     737              :     */
+     738           32 :     reference value() const
+     739              :     {
+     740           32 :         return operator*();
+     741              :     }
+     742              : 
+     743              :   JSON_PRIVATE_UNLESS_TESTED:
+     744              :     /// associated JSON instance
+     745              :     pointer m_object = nullptr;
+     746              :     /// the actual iterator of the associated instance
+     747              :     internal_iterator<typename std::remove_const<BasicJsonType>::type> m_it {};
+     748              : };
+     749              : 
+     750              : }  // namespace detail
+     751              : NLOHMANN_JSON_NAMESPACE_END
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/iterators/iteration_proxy.hpp.func-c.html b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/iteration_proxy.hpp.func-c.html new file mode 100644 index 0000000..63ee259 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/iteration_proxy.hpp.func-c.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/iterators/iteration_proxy.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/iterators - iteration_proxy.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2121
Test Date:2024-04-30 13:17:26Functions:100.0 %99
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail15iteration_proxyINS1_9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEEEC2ERSG_4
_ZNK8nlohmann16json_abi_v3_11_36detail15iteration_proxyINS1_9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEEE3endEv4
_ZNK8nlohmann16json_abi_v3_11_36detail15iteration_proxyINS1_9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEEE5beginEv4
_ZN8nlohmann16json_abi_v3_11_36detail21iteration_proxy_valueINS1_9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEEEC2ESH_m8
_ZN8nlohmann16json_abi_v3_11_36detail21iteration_proxy_valueINS1_9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEEED2Ev8
_ZN8nlohmann16json_abi_v3_11_36detail21iteration_proxy_valueINS1_9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEEEppEv16
_ZNK8nlohmann16json_abi_v3_11_36detail21iteration_proxy_valueINS1_9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEEEdeEv16
_ZNK8nlohmann16json_abi_v3_11_36detail21iteration_proxy_valueINS1_9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEEEneERKSI_20
_ZNK8nlohmann16json_abi_v3_11_36detail21iteration_proxy_valueINS1_9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEEE5valueEv32
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/iterators/iteration_proxy.hpp.func.html b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/iteration_proxy.hpp.func.html new file mode 100644 index 0000000..d0e8e2e --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/iteration_proxy.hpp.func.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/iterators/iteration_proxy.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/iterators - iteration_proxy.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2121
Test Date:2024-04-30 13:17:26Functions:100.0 %99
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail15iteration_proxyINS1_9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEEEC2ERSG_4
_ZN8nlohmann16json_abi_v3_11_36detail21iteration_proxy_valueINS1_9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEEEC2ESH_m8
_ZN8nlohmann16json_abi_v3_11_36detail21iteration_proxy_valueINS1_9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEEED2Ev8
_ZN8nlohmann16json_abi_v3_11_36detail21iteration_proxy_valueINS1_9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEEEppEv16
_ZNK8nlohmann16json_abi_v3_11_36detail15iteration_proxyINS1_9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEEE3endEv4
_ZNK8nlohmann16json_abi_v3_11_36detail15iteration_proxyINS1_9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEEE5beginEv4
_ZNK8nlohmann16json_abi_v3_11_36detail21iteration_proxy_valueINS1_9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEEE5valueEv32
_ZNK8nlohmann16json_abi_v3_11_36detail21iteration_proxy_valueINS1_9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEEEdeEv16
_ZNK8nlohmann16json_abi_v3_11_36detail21iteration_proxy_valueINS1_9iter_implINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES6_IhSaIhEEvEEEEEneERKSI_20
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/iterators/iteration_proxy.hpp.gcov.html b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/iteration_proxy.hpp.gcov.html new file mode 100644 index 0000000..494da78 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/iteration_proxy.hpp.gcov.html @@ -0,0 +1,318 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/iterators/iteration_proxy.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/iterators - iteration_proxy.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2121
Test Date:2024-04-30 13:17:26Functions:100.0 %99
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : //     __ _____ _____ _____
+       2              : //  __|  |   __|     |   | |  JSON for Modern C++
+       3              : // |  |  |__   |  |  | | | |  version 3.11.3
+       4              : // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
+       5              : //
+       6              : // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
+       7              : // SPDX-License-Identifier: MIT
+       8              : 
+       9              : #pragma once
+      10              : 
+      11              : #include <cstddef> // size_t
+      12              : #include <iterator> // input_iterator_tag
+      13              : #include <string> // string, to_string
+      14              : #include <tuple> // tuple_size, get, tuple_element
+      15              : #include <utility> // move
+      16              : 
+      17              : #if JSON_HAS_RANGES
+      18              :     #include <ranges> // enable_borrowed_range
+      19              : #endif
+      20              : 
+      21              : #include <nlohmann/detail/abi_macros.hpp>
+      22              : #include <nlohmann/detail/meta/type_traits.hpp>
+      23              : #include <nlohmann/detail/value_t.hpp>
+      24              : 
+      25              : NLOHMANN_JSON_NAMESPACE_BEGIN
+      26              : namespace detail
+      27              : {
+      28              : 
+      29              : template<typename string_type>
+      30              : void int_to_string( string_type& target, std::size_t value )
+      31              : {
+      32              :     // For ADL
+      33              :     using std::to_string;
+      34              :     target = to_string(value);
+      35              : }
+      36              : template<typename IteratorType> class iteration_proxy_value
+      37              : {
+      38              :   public:
+      39              :     using difference_type = std::ptrdiff_t;
+      40              :     using value_type = iteration_proxy_value;
+      41              :     using pointer = value_type *;
+      42              :     using reference = value_type &;
+      43              :     using iterator_category = std::input_iterator_tag;
+      44              :     using string_type = typename std::remove_cv< typename std::remove_reference<decltype( std::declval<IteratorType>().key() ) >::type >::type;
+      45              : 
+      46              :   private:
+      47              :     /// the iterator
+      48              :     IteratorType anchor{};
+      49              :     /// an index for arrays (used to create key names)
+      50              :     std::size_t array_index = 0;
+      51              :     /// last stringified array index
+      52              :     mutable std::size_t array_index_last = 0;
+      53              :     /// a string representation of the array index
+      54              :     mutable string_type array_index_str = "0";
+      55              :     /// an empty string (to return a reference for primitive values)
+      56              :     string_type empty_str{};
+      57              : 
+      58              :   public:
+      59              :     explicit iteration_proxy_value() = default;
+      60            8 :     explicit iteration_proxy_value(IteratorType it, std::size_t array_index_ = 0)
+      61              :     noexcept(std::is_nothrow_move_constructible<IteratorType>::value
+      62              :              && std::is_nothrow_default_constructible<string_type>::value)
+      63            8 :         : anchor(std::move(it))
+      64           24 :         , array_index(array_index_)
+      65            8 :     {}
+      66              : 
+      67              :     iteration_proxy_value(iteration_proxy_value const&) = default;
+      68              :     iteration_proxy_value& operator=(iteration_proxy_value const&) = default;
+      69              :     // older GCCs are a bit fussy and require explicit noexcept specifiers on defaulted functions
+      70              :     iteration_proxy_value(iteration_proxy_value&&)
+      71              :     noexcept(std::is_nothrow_move_constructible<IteratorType>::value
+      72              :              && std::is_nothrow_move_constructible<string_type>::value) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations)
+      73              :     iteration_proxy_value& operator=(iteration_proxy_value&&)
+      74              :     noexcept(std::is_nothrow_move_assignable<IteratorType>::value
+      75              :              && std::is_nothrow_move_assignable<string_type>::value) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations)
+      76            8 :     ~iteration_proxy_value() = default;
+      77              : 
+      78              :     /// dereference operator (needed for range-based for)
+      79           16 :     const iteration_proxy_value& operator*() const
+      80              :     {
+      81           16 :         return *this;
+      82              :     }
+      83              : 
+      84              :     /// increment operator (needed for range-based for)
+      85           16 :     iteration_proxy_value& operator++()
+      86              :     {
+      87           16 :         ++anchor;
+      88           16 :         ++array_index;
+      89              : 
+      90           16 :         return *this;
+      91              :     }
+      92              : 
+      93              :     iteration_proxy_value operator++(int)& // NOLINT(cert-dcl21-cpp)
+      94              :     {
+      95              :         auto tmp = iteration_proxy_value(anchor, array_index);
+      96              :         ++anchor;
+      97              :         ++array_index;
+      98              :         return tmp;
+      99              :     }
+     100              : 
+     101              :     /// equality operator (needed for InputIterator)
+     102              :     bool operator==(const iteration_proxy_value& o) const
+     103              :     {
+     104              :         return anchor == o.anchor;
+     105              :     }
+     106              : 
+     107              :     /// inequality operator (needed for range-based for)
+     108           20 :     bool operator!=(const iteration_proxy_value& o) const
+     109              :     {
+     110           20 :         return anchor != o.anchor;
+     111              :     }
+     112              : 
+     113              :     /// return key of the iterator
+     114              :     const string_type& key() const
+     115              :     {
+     116              :         JSON_ASSERT(anchor.m_object != nullptr);
+     117              : 
+     118              :         switch (anchor.m_object->type())
+     119              :         {
+     120              :             // use integer array index as key
+     121              :             case value_t::array:
+     122              :             {
+     123              :                 if (array_index != array_index_last)
+     124              :                 {
+     125              :                     int_to_string( array_index_str, array_index );
+     126              :                     array_index_last = array_index;
+     127              :                 }
+     128              :                 return array_index_str;
+     129              :             }
+     130              : 
+     131              :             // use key from the object
+     132              :             case value_t::object:
+     133              :                 return anchor.key();
+     134              : 
+     135              :             // use an empty key for all primitive types
+     136              :             case value_t::null:
+     137              :             case value_t::string:
+     138              :             case value_t::boolean:
+     139              :             case value_t::number_integer:
+     140              :             case value_t::number_unsigned:
+     141              :             case value_t::number_float:
+     142              :             case value_t::binary:
+     143              :             case value_t::discarded:
+     144              :             default:
+     145              :                 return empty_str;
+     146              :         }
+     147              :     }
+     148              : 
+     149              :     /// return value of the iterator
+     150           32 :     typename IteratorType::reference value() const
+     151              :     {
+     152           32 :         return anchor.value();
+     153              :     }
+     154              : };
+     155              : 
+     156              : /// proxy class for the items() function
+     157              : template<typename IteratorType> class iteration_proxy
+     158              : {
+     159              :   private:
+     160              :     /// the container to iterate
+     161              :     typename IteratorType::pointer container = nullptr;
+     162              : 
+     163              :   public:
+     164              :     explicit iteration_proxy() = default;
+     165              : 
+     166              :     /// construct iteration proxy from a container
+     167            4 :     explicit iteration_proxy(typename IteratorType::reference cont) noexcept
+     168            4 :         : container(&cont) {}
+     169              : 
+     170              :     iteration_proxy(iteration_proxy const&) = default;
+     171              :     iteration_proxy& operator=(iteration_proxy const&) = default;
+     172              :     iteration_proxy(iteration_proxy&&) noexcept = default;
+     173              :     iteration_proxy& operator=(iteration_proxy&&) noexcept = default;
+     174              :     ~iteration_proxy() = default;
+     175              : 
+     176              :     /// return iterator begin (needed for range-based for)
+     177            4 :     iteration_proxy_value<IteratorType> begin() const noexcept
+     178              :     {
+     179            4 :         return iteration_proxy_value<IteratorType>(container->begin());
+     180              :     }
+     181              : 
+     182              :     /// return iterator end (needed for range-based for)
+     183            4 :     iteration_proxy_value<IteratorType> end() const noexcept
+     184              :     {
+     185            4 :         return iteration_proxy_value<IteratorType>(container->end());
+     186              :     }
+     187              : };
+     188              : 
+     189              : // Structured Bindings Support
+     190              : // For further reference see https://blog.tartanllama.xyz/structured-bindings/
+     191              : // And see https://github.com/nlohmann/json/pull/1391
+     192              : template<std::size_t N, typename IteratorType, enable_if_t<N == 0, int> = 0>
+     193              : auto get(const nlohmann::detail::iteration_proxy_value<IteratorType>& i) -> decltype(i.key())
+     194              : {
+     195              :     return i.key();
+     196              : }
+     197              : // Structured Bindings Support
+     198              : // For further reference see https://blog.tartanllama.xyz/structured-bindings/
+     199              : // And see https://github.com/nlohmann/json/pull/1391
+     200              : template<std::size_t N, typename IteratorType, enable_if_t<N == 1, int> = 0>
+     201              : auto get(const nlohmann::detail::iteration_proxy_value<IteratorType>& i) -> decltype(i.value())
+     202              : {
+     203              :     return i.value();
+     204              : }
+     205              : 
+     206              : }  // namespace detail
+     207              : NLOHMANN_JSON_NAMESPACE_END
+     208              : 
+     209              : // The Addition to the STD Namespace is required to add
+     210              : // Structured Bindings Support to the iteration_proxy_value class
+     211              : // For further reference see https://blog.tartanllama.xyz/structured-bindings/
+     212              : // And see https://github.com/nlohmann/json/pull/1391
+     213              : namespace std
+     214              : {
+     215              : 
+     216              : #if defined(__clang__)
+     217              :     // Fix: https://github.com/nlohmann/json/issues/1401
+     218              :     #pragma clang diagnostic push
+     219              :     #pragma clang diagnostic ignored "-Wmismatched-tags"
+     220              : #endif
+     221              : template<typename IteratorType>
+     222              : class tuple_size<::nlohmann::detail::iteration_proxy_value<IteratorType>> // NOLINT(cert-dcl58-cpp)
+     223              :             : public std::integral_constant<std::size_t, 2> {};
+     224              : 
+     225              : template<std::size_t N, typename IteratorType>
+     226              : class tuple_element<N, ::nlohmann::detail::iteration_proxy_value<IteratorType >> // NOLINT(cert-dcl58-cpp)
+     227              : {
+     228              :   public:
+     229              :     using type = decltype(
+     230              :                      get<N>(std::declval <
+     231              :                             ::nlohmann::detail::iteration_proxy_value<IteratorType >> ()));
+     232              : };
+     233              : #if defined(__clang__)
+     234              :     #pragma clang diagnostic pop
+     235              : #endif
+     236              : 
+     237              : }  // namespace std
+     238              : 
+     239              : #if JSON_HAS_RANGES
+     240              :     template <typename IteratorType>
+     241              :     inline constexpr bool ::std::ranges::enable_borrowed_range<::nlohmann::detail::iteration_proxy<IteratorType>> = true;
+     242              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/iterators/primitive_iterator.hpp.func-c.html b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/primitive_iterator.hpp.func-c.html new file mode 100644 index 0000000..14300fa --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/primitive_iterator.hpp.func-c.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/iterators/primitive_iterator.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/iterators - primitive_iterator.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %130
Test Date:2024-04-30 13:17:26Functions:0.0 %50
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail20primitive_iterator_t7set_endEv0
_ZN8nlohmann16json_abi_v3_11_36detail20primitive_iterator_t9set_beginEv0
_ZN8nlohmann16json_abi_v3_11_36detail20primitive_iterator_tppEv0
_ZN8nlohmann16json_abi_v3_11_36detaileqENS1_20primitive_iterator_tES2_0
_ZNK8nlohmann16json_abi_v3_11_36detail20primitive_iterator_t8is_beginEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/iterators/primitive_iterator.hpp.func.html b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/primitive_iterator.hpp.func.html new file mode 100644 index 0000000..16e1c36 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/primitive_iterator.hpp.func.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/iterators/primitive_iterator.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/iterators - primitive_iterator.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %130
Test Date:2024-04-30 13:17:26Functions:0.0 %50
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail20primitive_iterator_t7set_endEv0
_ZN8nlohmann16json_abi_v3_11_36detail20primitive_iterator_t9set_beginEv0
_ZN8nlohmann16json_abi_v3_11_36detail20primitive_iterator_tppEv0
_ZN8nlohmann16json_abi_v3_11_36detaileqENS1_20primitive_iterator_tES2_0
_ZNK8nlohmann16json_abi_v3_11_36detail20primitive_iterator_t8is_beginEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/iterators/primitive_iterator.hpp.gcov.html b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/primitive_iterator.hpp.gcov.html new file mode 100644 index 0000000..0f588fc --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/iterators/primitive_iterator.hpp.gcov.html @@ -0,0 +1,208 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/iterators/primitive_iterator.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/iterators - primitive_iterator.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %130
Test Date:2024-04-30 13:17:26Functions:0.0 %50
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : //     __ _____ _____ _____
+       2              : //  __|  |   __|     |   | |  JSON for Modern C++
+       3              : // |  |  |__   |  |  | | | |  version 3.11.3
+       4              : // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
+       5              : //
+       6              : // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
+       7              : // SPDX-License-Identifier: MIT
+       8              : 
+       9              : #pragma once
+      10              : 
+      11              : #include <cstddef> // ptrdiff_t
+      12              : #include <limits>  // numeric_limits
+      13              : 
+      14              : #include <nlohmann/detail/macro_scope.hpp>
+      15              : 
+      16              : NLOHMANN_JSON_NAMESPACE_BEGIN
+      17              : namespace detail
+      18              : {
+      19              : 
+      20              : /*
+      21              : @brief an iterator for primitive JSON types
+      22              : 
+      23              : This class models an iterator for primitive JSON types (boolean, number,
+      24              : string). It's only purpose is to allow the iterator/const_iterator classes
+      25              : to "iterate" over primitive values. Internally, the iterator is modeled by
+      26              : a `difference_type` variable. Value begin_value (`0`) models the begin,
+      27              : end_value (`1`) models past the end.
+      28              : */
+      29              : class primitive_iterator_t
+      30              : {
+      31              :   private:
+      32              :     using difference_type = std::ptrdiff_t;
+      33              :     static constexpr difference_type begin_value = 0;
+      34              :     static constexpr difference_type end_value = begin_value + 1;
+      35              : 
+      36              :   JSON_PRIVATE_UNLESS_TESTED:
+      37              :     /// iterator as signed integer type
+      38              :     difference_type m_it = (std::numeric_limits<std::ptrdiff_t>::min)();
+      39              : 
+      40              :   public:
+      41              :     constexpr difference_type get_value() const noexcept
+      42              :     {
+      43              :         return m_it;
+      44              :     }
+      45              : 
+      46              :     /// set iterator to a defined beginning
+      47            0 :     void set_begin() noexcept
+      48              :     {
+      49            0 :         m_it = begin_value;
+      50            0 :     }
+      51              : 
+      52              :     /// set iterator to a defined past the end
+      53            0 :     void set_end() noexcept
+      54              :     {
+      55            0 :         m_it = end_value;
+      56            0 :     }
+      57              : 
+      58              :     /// return whether the iterator can be dereferenced
+      59            0 :     constexpr bool is_begin() const noexcept
+      60              :     {
+      61            0 :         return m_it == begin_value;
+      62              :     }
+      63              : 
+      64              :     /// return whether the iterator is at end
+      65              :     constexpr bool is_end() const noexcept
+      66              :     {
+      67              :         return m_it == end_value;
+      68              :     }
+      69              : 
+      70            0 :     friend constexpr bool operator==(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept
+      71              :     {
+      72            0 :         return lhs.m_it == rhs.m_it;
+      73              :     }
+      74              : 
+      75              :     friend constexpr bool operator<(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept
+      76              :     {
+      77              :         return lhs.m_it < rhs.m_it;
+      78              :     }
+      79              : 
+      80              :     primitive_iterator_t operator+(difference_type n) noexcept
+      81              :     {
+      82              :         auto result = *this;
+      83              :         result += n;
+      84              :         return result;
+      85              :     }
+      86              : 
+      87              :     friend constexpr difference_type operator-(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept
+      88              :     {
+      89              :         return lhs.m_it - rhs.m_it;
+      90              :     }
+      91              : 
+      92            0 :     primitive_iterator_t& operator++() noexcept
+      93              :     {
+      94            0 :         ++m_it;
+      95            0 :         return *this;
+      96              :     }
+      97              : 
+      98              :     primitive_iterator_t operator++(int)& noexcept // NOLINT(cert-dcl21-cpp)
+      99              :     {
+     100              :         auto result = *this;
+     101              :         ++m_it;
+     102              :         return result;
+     103              :     }
+     104              : 
+     105              :     primitive_iterator_t& operator--() noexcept
+     106              :     {
+     107              :         --m_it;
+     108              :         return *this;
+     109              :     }
+     110              : 
+     111              :     primitive_iterator_t operator--(int)& noexcept // NOLINT(cert-dcl21-cpp)
+     112              :     {
+     113              :         auto result = *this;
+     114              :         --m_it;
+     115              :         return result;
+     116              :     }
+     117              : 
+     118              :     primitive_iterator_t& operator+=(difference_type n) noexcept
+     119              :     {
+     120              :         m_it += n;
+     121              :         return *this;
+     122              :     }
+     123              : 
+     124              :     primitive_iterator_t& operator-=(difference_type n) noexcept
+     125              :     {
+     126              :         m_it -= n;
+     127              :         return *this;
+     128              :     }
+     129              : };
+     130              : 
+     131              : }  // namespace detail
+     132              : NLOHMANN_JSON_NAMESPACE_END
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/json_ref.hpp.func-c.html b/html/BayesNet/lib/json/include/nlohmann/detail/json_ref.hpp.func-c.html new file mode 100644 index 0000000..9f01923 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/json_ref.hpp.func-c.html @@ -0,0 +1,215 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/json_ref.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail - json_ref.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:93.3 %1514
Test Date:2024-04-30 13:17:26Functions:100.0 %1919
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2ESt16initializer_listISG_E126
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJbELi0EEEDpOT_220
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA2_KcELi0EEEDpOT_2
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA15_KcELi0EEEDpOT_4
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA17_KcELi0EEEDpOT_4
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRKSB_ELi0EEEDpOT_6
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA4_KcELi0EEEDpOT_10
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJdELi0EEEDpOT_14
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA12_KcELi0EEEDpOT_16
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA5_KcELi0EEEDpOT_16
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA6_KcELi0EEEDpOT_16
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA16_KcELi0EEEDpOT_18
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJiELi0EEEDpOT_22
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA13_KcELi0EEEDpOT_24
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA10_KcELi0EEEDpOT_26
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJbELi0EEEDpOT_42
_ZNK8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEptEv334
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEED2Ev346
_ZNK8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE15moved_or_copiedEv346
_ZNK8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEdeEv444
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/json_ref.hpp.func.html b/html/BayesNet/lib/json/include/nlohmann/detail/json_ref.hpp.func.html new file mode 100644 index 0000000..526ebe2 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/json_ref.hpp.func.html @@ -0,0 +1,215 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/json_ref.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail - json_ref.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:93.3 %1514
Test Date:2024-04-30 13:17:26Functions:100.0 %1919
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2ESt16initializer_listISG_E126
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJbELi0EEEDpOT_220
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA10_KcELi0EEEDpOT_26
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA12_KcELi0EEEDpOT_16
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA13_KcELi0EEEDpOT_24
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA15_KcELi0EEEDpOT_4
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA16_KcELi0EEEDpOT_18
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA17_KcELi0EEEDpOT_4
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA2_KcELi0EEEDpOT_2
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA4_KcELi0EEEDpOT_10
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA5_KcELi0EEEDpOT_16
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRA6_KcELi0EEEDpOT_16
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJRKSB_ELi0EEEDpOT_6
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJbELi0EEEDpOT_42
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJdELi0EEEDpOT_14
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2IJiELi0EEEDpOT_22
_ZN8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEED2Ev346
_ZNK8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE15moved_or_copiedEv346
_ZNK8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEdeEv444
_ZNK8nlohmann16json_abi_v3_11_36detail8json_refINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEptEv334
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/json_ref.hpp.gcov.html b/html/BayesNet/lib/json/include/nlohmann/detail/json_ref.hpp.gcov.html new file mode 100644 index 0000000..322fffd --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/json_ref.hpp.gcov.html @@ -0,0 +1,154 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/json_ref.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail - json_ref.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:93.3 %1514
Test Date:2024-04-30 13:17:26Functions:100.0 %1919
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : //     __ _____ _____ _____
+       2              : //  __|  |   __|     |   | |  JSON for Modern C++
+       3              : // |  |  |__   |  |  | | | |  version 3.11.3
+       4              : // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
+       5              : //
+       6              : // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
+       7              : // SPDX-License-Identifier: MIT
+       8              : 
+       9              : #pragma once
+      10              : 
+      11              : #include <initializer_list>
+      12              : #include <utility>
+      13              : 
+      14              : #include <nlohmann/detail/abi_macros.hpp>
+      15              : #include <nlohmann/detail/meta/type_traits.hpp>
+      16              : 
+      17              : NLOHMANN_JSON_NAMESPACE_BEGIN
+      18              : namespace detail
+      19              : {
+      20              : 
+      21              : template<typename BasicJsonType>
+      22              : class json_ref
+      23              : {
+      24              :   public:
+      25              :     using value_type = BasicJsonType;
+      26              : 
+      27              :     json_ref(value_type&& value)
+      28              :         : owned_value(std::move(value))
+      29              :     {}
+      30              : 
+      31              :     json_ref(const value_type& value)
+      32              :         : value_ref(&value)
+      33              :     {}
+      34              : 
+      35          126 :     json_ref(std::initializer_list<json_ref> init)
+      36          126 :         : owned_value(init)
+      37          126 :     {}
+      38              : 
+      39              :     template <
+      40              :         class... Args,
+      41              :         enable_if_t<std::is_constructible<value_type, Args...>::value, int> = 0 >
+      42          220 :     json_ref(Args && ... args)
+      43          220 :         : owned_value(std::forward<Args>(args)...)
+      44          220 :     {}
+      45              : 
+      46              :     // class should be movable only
+      47              :     json_ref(json_ref&&) noexcept = default;
+      48              :     json_ref(const json_ref&) = delete;
+      49              :     json_ref& operator=(const json_ref&) = delete;
+      50              :     json_ref& operator=(json_ref&&) = delete;
+      51          346 :     ~json_ref() = default;
+      52              : 
+      53          346 :     value_type moved_or_copied() const
+      54              :     {
+      55          346 :         if (value_ref == nullptr)
+      56              :         {
+      57          346 :             return std::move(owned_value);
+      58              :         }
+      59            0 :         return *value_ref;
+      60              :     }
+      61              : 
+      62          444 :     value_type const& operator*() const
+      63              :     {
+      64          444 :         return value_ref ? *value_ref : owned_value;
+      65              :     }
+      66              : 
+      67          334 :     value_type const* operator->() const
+      68              :     {
+      69          334 :         return &** this;
+      70              :     }
+      71              : 
+      72              :   private:
+      73              :     mutable value_type owned_value = nullptr;
+      74              :     value_type const* value_ref = nullptr;
+      75              : };
+      76              : 
+      77              : }  // namespace detail
+      78              : NLOHMANN_JSON_NAMESPACE_END
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/output/binary_writer.hpp.func-c.html b/html/BayesNet/lib/json/include/nlohmann/detail/output/binary_writer.hpp.func-c.html new file mode 100644 index 0000000..ee844a7 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/output/binary_writer.hpp.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/output/binary_writer.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/output - binary_writer.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %20
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail13binary_writerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEcE12to_char_typeIccLPv0EEEcT_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/output/binary_writer.hpp.func.html b/html/BayesNet/lib/json/include/nlohmann/detail/output/binary_writer.hpp.func.html new file mode 100644 index 0000000..c71b999 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/output/binary_writer.hpp.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/output/binary_writer.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/output - binary_writer.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %20
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail13binary_writerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEcE12to_char_typeIccLPv0EEEcT_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/output/binary_writer.hpp.gcov.html b/html/BayesNet/lib/json/include/nlohmann/detail/output/binary_writer.hpp.gcov.html new file mode 100644 index 0000000..7eaa535 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/output/binary_writer.hpp.gcov.html @@ -0,0 +1,1914 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/output/binary_writer.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/output - binary_writer.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %20
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : //     __ _____ _____ _____
+       2              : //  __|  |   __|     |   | |  JSON for Modern C++
+       3              : // |  |  |__   |  |  | | | |  version 3.11.3
+       4              : // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
+       5              : //
+       6              : // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
+       7              : // SPDX-License-Identifier: MIT
+       8              : 
+       9              : #pragma once
+      10              : 
+      11              : #include <algorithm> // reverse
+      12              : #include <array> // array
+      13              : #include <map> // map
+      14              : #include <cmath> // isnan, isinf
+      15              : #include <cstdint> // uint8_t, uint16_t, uint32_t, uint64_t
+      16              : #include <cstring> // memcpy
+      17              : #include <limits> // numeric_limits
+      18              : #include <string> // string
+      19              : #include <utility> // move
+      20              : #include <vector> // vector
+      21              : 
+      22              : #include <nlohmann/detail/input/binary_reader.hpp>
+      23              : #include <nlohmann/detail/macro_scope.hpp>
+      24              : #include <nlohmann/detail/output/output_adapters.hpp>
+      25              : #include <nlohmann/detail/string_concat.hpp>
+      26              : 
+      27              : NLOHMANN_JSON_NAMESPACE_BEGIN
+      28              : namespace detail
+      29              : {
+      30              : 
+      31              : ///////////////////
+      32              : // binary writer //
+      33              : ///////////////////
+      34              : 
+      35              : /*!
+      36              : @brief serialization to CBOR and MessagePack values
+      37              : */
+      38              : template<typename BasicJsonType, typename CharType>
+      39              : class binary_writer
+      40              : {
+      41              :     using string_t = typename BasicJsonType::string_t;
+      42              :     using binary_t = typename BasicJsonType::binary_t;
+      43              :     using number_float_t = typename BasicJsonType::number_float_t;
+      44              : 
+      45              :   public:
+      46              :     /*!
+      47              :     @brief create a binary writer
+      48              : 
+      49              :     @param[in] adapter  output adapter to write to
+      50              :     */
+      51              :     explicit binary_writer(output_adapter_t<CharType> adapter) : oa(std::move(adapter))
+      52              :     {
+      53              :         JSON_ASSERT(oa);
+      54              :     }
+      55              : 
+      56              :     /*!
+      57              :     @param[in] j  JSON value to serialize
+      58              :     @pre       j.type() == value_t::object
+      59              :     */
+      60              :     void write_bson(const BasicJsonType& j)
+      61              :     {
+      62              :         switch (j.type())
+      63              :         {
+      64              :             case value_t::object:
+      65              :             {
+      66              :                 write_bson_object(*j.m_data.m_value.object);
+      67              :                 break;
+      68              :             }
+      69              : 
+      70              :             case value_t::null:
+      71              :             case value_t::array:
+      72              :             case value_t::string:
+      73              :             case value_t::boolean:
+      74              :             case value_t::number_integer:
+      75              :             case value_t::number_unsigned:
+      76              :             case value_t::number_float:
+      77              :             case value_t::binary:
+      78              :             case value_t::discarded:
+      79              :             default:
+      80              :             {
+      81              :                 JSON_THROW(type_error::create(317, concat("to serialize to BSON, top-level type must be object, but is ", j.type_name()), &j));
+      82              :             }
+      83              :         }
+      84              :     }
+      85              : 
+      86              :     /*!
+      87              :     @param[in] j  JSON value to serialize
+      88              :     */
+      89              :     void write_cbor(const BasicJsonType& j)
+      90              :     {
+      91              :         switch (j.type())
+      92              :         {
+      93              :             case value_t::null:
+      94              :             {
+      95              :                 oa->write_character(to_char_type(0xF6));
+      96              :                 break;
+      97              :             }
+      98              : 
+      99              :             case value_t::boolean:
+     100              :             {
+     101              :                 oa->write_character(j.m_data.m_value.boolean
+     102              :                                     ? to_char_type(0xF5)
+     103              :                                     : to_char_type(0xF4));
+     104              :                 break;
+     105              :             }
+     106              : 
+     107              :             case value_t::number_integer:
+     108              :             {
+     109              :                 if (j.m_data.m_value.number_integer >= 0)
+     110              :                 {
+     111              :                     // CBOR does not differentiate between positive signed
+     112              :                     // integers and unsigned integers. Therefore, we used the
+     113              :                     // code from the value_t::number_unsigned case here.
+     114              :                     if (j.m_data.m_value.number_integer <= 0x17)
+     115              :                     {
+     116              :                         write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));
+     117              :                     }
+     118              :                     else if (j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)())
+     119              :                     {
+     120              :                         oa->write_character(to_char_type(0x18));
+     121              :                         write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));
+     122              :                     }
+     123              :                     else if (j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)())
+     124              :                     {
+     125              :                         oa->write_character(to_char_type(0x19));
+     126              :                         write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_integer));
+     127              :                     }
+     128              :                     else if (j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)())
+     129              :                     {
+     130              :                         oa->write_character(to_char_type(0x1A));
+     131              :                         write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_integer));
+     132              :                     }
+     133              :                     else
+     134              :                     {
+     135              :                         oa->write_character(to_char_type(0x1B));
+     136              :                         write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_integer));
+     137              :                     }
+     138              :                 }
+     139              :                 else
+     140              :                 {
+     141              :                     // The conversions below encode the sign in the first
+     142              :                     // byte, and the value is converted to a positive number.
+     143              :                     const auto positive_number = -1 - j.m_data.m_value.number_integer;
+     144              :                     if (j.m_data.m_value.number_integer >= -24)
+     145              :                     {
+     146              :                         write_number(static_cast<std::uint8_t>(0x20 + positive_number));
+     147              :                     }
+     148              :                     else if (positive_number <= (std::numeric_limits<std::uint8_t>::max)())
+     149              :                     {
+     150              :                         oa->write_character(to_char_type(0x38));
+     151              :                         write_number(static_cast<std::uint8_t>(positive_number));
+     152              :                     }
+     153              :                     else if (positive_number <= (std::numeric_limits<std::uint16_t>::max)())
+     154              :                     {
+     155              :                         oa->write_character(to_char_type(0x39));
+     156              :                         write_number(static_cast<std::uint16_t>(positive_number));
+     157              :                     }
+     158              :                     else if (positive_number <= (std::numeric_limits<std::uint32_t>::max)())
+     159              :                     {
+     160              :                         oa->write_character(to_char_type(0x3A));
+     161              :                         write_number(static_cast<std::uint32_t>(positive_number));
+     162              :                     }
+     163              :                     else
+     164              :                     {
+     165              :                         oa->write_character(to_char_type(0x3B));
+     166              :                         write_number(static_cast<std::uint64_t>(positive_number));
+     167              :                     }
+     168              :                 }
+     169              :                 break;
+     170              :             }
+     171              : 
+     172              :             case value_t::number_unsigned:
+     173              :             {
+     174              :                 if (j.m_data.m_value.number_unsigned <= 0x17)
+     175              :                 {
+     176              :                     write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_unsigned));
+     177              :                 }
+     178              :                 else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)())
+     179              :                 {
+     180              :                     oa->write_character(to_char_type(0x18));
+     181              :                     write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_unsigned));
+     182              :                 }
+     183              :                 else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)())
+     184              :                 {
+     185              :                     oa->write_character(to_char_type(0x19));
+     186              :                     write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_unsigned));
+     187              :                 }
+     188              :                 else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)())
+     189              :                 {
+     190              :                     oa->write_character(to_char_type(0x1A));
+     191              :                     write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_unsigned));
+     192              :                 }
+     193              :                 else
+     194              :                 {
+     195              :                     oa->write_character(to_char_type(0x1B));
+     196              :                     write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_unsigned));
+     197              :                 }
+     198              :                 break;
+     199              :             }
+     200              : 
+     201              :             case value_t::number_float:
+     202              :             {
+     203              :                 if (std::isnan(j.m_data.m_value.number_float))
+     204              :                 {
+     205              :                     // NaN is 0xf97e00 in CBOR
+     206              :                     oa->write_character(to_char_type(0xF9));
+     207              :                     oa->write_character(to_char_type(0x7E));
+     208              :                     oa->write_character(to_char_type(0x00));
+     209              :                 }
+     210              :                 else if (std::isinf(j.m_data.m_value.number_float))
+     211              :                 {
+     212              :                     // Infinity is 0xf97c00, -Infinity is 0xf9fc00
+     213              :                     oa->write_character(to_char_type(0xf9));
+     214              :                     oa->write_character(j.m_data.m_value.number_float > 0 ? to_char_type(0x7C) : to_char_type(0xFC));
+     215              :                     oa->write_character(to_char_type(0x00));
+     216              :                 }
+     217              :                 else
+     218              :                 {
+     219              :                     write_compact_float(j.m_data.m_value.number_float, detail::input_format_t::cbor);
+     220              :                 }
+     221              :                 break;
+     222              :             }
+     223              : 
+     224              :             case value_t::string:
+     225              :             {
+     226              :                 // step 1: write control byte and the string length
+     227              :                 const auto N = j.m_data.m_value.string->size();
+     228              :                 if (N <= 0x17)
+     229              :                 {
+     230              :                     write_number(static_cast<std::uint8_t>(0x60 + N));
+     231              :                 }
+     232              :                 else if (N <= (std::numeric_limits<std::uint8_t>::max)())
+     233              :                 {
+     234              :                     oa->write_character(to_char_type(0x78));
+     235              :                     write_number(static_cast<std::uint8_t>(N));
+     236              :                 }
+     237              :                 else if (N <= (std::numeric_limits<std::uint16_t>::max)())
+     238              :                 {
+     239              :                     oa->write_character(to_char_type(0x79));
+     240              :                     write_number(static_cast<std::uint16_t>(N));
+     241              :                 }
+     242              :                 else if (N <= (std::numeric_limits<std::uint32_t>::max)())
+     243              :                 {
+     244              :                     oa->write_character(to_char_type(0x7A));
+     245              :                     write_number(static_cast<std::uint32_t>(N));
+     246              :                 }
+     247              :                 // LCOV_EXCL_START
+     248              :                 else if (N <= (std::numeric_limits<std::uint64_t>::max)())
+     249              :                 {
+     250              :                     oa->write_character(to_char_type(0x7B));
+     251              :                     write_number(static_cast<std::uint64_t>(N));
+     252              :                 }
+     253              :                 // LCOV_EXCL_STOP
+     254              : 
+     255              :                 // step 2: write the string
+     256              :                 oa->write_characters(
+     257              :                     reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()),
+     258              :                     j.m_data.m_value.string->size());
+     259              :                 break;
+     260              :             }
+     261              : 
+     262              :             case value_t::array:
+     263              :             {
+     264              :                 // step 1: write control byte and the array size
+     265              :                 const auto N = j.m_data.m_value.array->size();
+     266              :                 if (N <= 0x17)
+     267              :                 {
+     268              :                     write_number(static_cast<std::uint8_t>(0x80 + N));
+     269              :                 }
+     270              :                 else if (N <= (std::numeric_limits<std::uint8_t>::max)())
+     271              :                 {
+     272              :                     oa->write_character(to_char_type(0x98));
+     273              :                     write_number(static_cast<std::uint8_t>(N));
+     274              :                 }
+     275              :                 else if (N <= (std::numeric_limits<std::uint16_t>::max)())
+     276              :                 {
+     277              :                     oa->write_character(to_char_type(0x99));
+     278              :                     write_number(static_cast<std::uint16_t>(N));
+     279              :                 }
+     280              :                 else if (N <= (std::numeric_limits<std::uint32_t>::max)())
+     281              :                 {
+     282              :                     oa->write_character(to_char_type(0x9A));
+     283              :                     write_number(static_cast<std::uint32_t>(N));
+     284              :                 }
+     285              :                 // LCOV_EXCL_START
+     286              :                 else if (N <= (std::numeric_limits<std::uint64_t>::max)())
+     287              :                 {
+     288              :                     oa->write_character(to_char_type(0x9B));
+     289              :                     write_number(static_cast<std::uint64_t>(N));
+     290              :                 }
+     291              :                 // LCOV_EXCL_STOP
+     292              : 
+     293              :                 // step 2: write each element
+     294              :                 for (const auto& el : *j.m_data.m_value.array)
+     295              :                 {
+     296              :                     write_cbor(el);
+     297              :                 }
+     298              :                 break;
+     299              :             }
+     300              : 
+     301              :             case value_t::binary:
+     302              :             {
+     303              :                 if (j.m_data.m_value.binary->has_subtype())
+     304              :                 {
+     305              :                     if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint8_t>::max)())
+     306              :                     {
+     307              :                         write_number(static_cast<std::uint8_t>(0xd8));
+     308              :                         write_number(static_cast<std::uint8_t>(j.m_data.m_value.binary->subtype()));
+     309              :                     }
+     310              :                     else if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint16_t>::max)())
+     311              :                     {
+     312              :                         write_number(static_cast<std::uint8_t>(0xd9));
+     313              :                         write_number(static_cast<std::uint16_t>(j.m_data.m_value.binary->subtype()));
+     314              :                     }
+     315              :                     else if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint32_t>::max)())
+     316              :                     {
+     317              :                         write_number(static_cast<std::uint8_t>(0xda));
+     318              :                         write_number(static_cast<std::uint32_t>(j.m_data.m_value.binary->subtype()));
+     319              :                     }
+     320              :                     else if (j.m_data.m_value.binary->subtype() <= (std::numeric_limits<std::uint64_t>::max)())
+     321              :                     {
+     322              :                         write_number(static_cast<std::uint8_t>(0xdb));
+     323              :                         write_number(static_cast<std::uint64_t>(j.m_data.m_value.binary->subtype()));
+     324              :                     }
+     325              :                 }
+     326              : 
+     327              :                 // step 1: write control byte and the binary array size
+     328              :                 const auto N = j.m_data.m_value.binary->size();
+     329              :                 if (N <= 0x17)
+     330              :                 {
+     331              :                     write_number(static_cast<std::uint8_t>(0x40 + N));
+     332              :                 }
+     333              :                 else if (N <= (std::numeric_limits<std::uint8_t>::max)())
+     334              :                 {
+     335              :                     oa->write_character(to_char_type(0x58));
+     336              :                     write_number(static_cast<std::uint8_t>(N));
+     337              :                 }
+     338              :                 else if (N <= (std::numeric_limits<std::uint16_t>::max)())
+     339              :                 {
+     340              :                     oa->write_character(to_char_type(0x59));
+     341              :                     write_number(static_cast<std::uint16_t>(N));
+     342              :                 }
+     343              :                 else if (N <= (std::numeric_limits<std::uint32_t>::max)())
+     344              :                 {
+     345              :                     oa->write_character(to_char_type(0x5A));
+     346              :                     write_number(static_cast<std::uint32_t>(N));
+     347              :                 }
+     348              :                 // LCOV_EXCL_START
+     349              :                 else if (N <= (std::numeric_limits<std::uint64_t>::max)())
+     350              :                 {
+     351              :                     oa->write_character(to_char_type(0x5B));
+     352              :                     write_number(static_cast<std::uint64_t>(N));
+     353              :                 }
+     354              :                 // LCOV_EXCL_STOP
+     355              : 
+     356              :                 // step 2: write each element
+     357              :                 oa->write_characters(
+     358              :                     reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),
+     359              :                     N);
+     360              : 
+     361              :                 break;
+     362              :             }
+     363              : 
+     364              :             case value_t::object:
+     365              :             {
+     366              :                 // step 1: write control byte and the object size
+     367              :                 const auto N = j.m_data.m_value.object->size();
+     368              :                 if (N <= 0x17)
+     369              :                 {
+     370              :                     write_number(static_cast<std::uint8_t>(0xA0 + N));
+     371              :                 }
+     372              :                 else if (N <= (std::numeric_limits<std::uint8_t>::max)())
+     373              :                 {
+     374              :                     oa->write_character(to_char_type(0xB8));
+     375              :                     write_number(static_cast<std::uint8_t>(N));
+     376              :                 }
+     377              :                 else if (N <= (std::numeric_limits<std::uint16_t>::max)())
+     378              :                 {
+     379              :                     oa->write_character(to_char_type(0xB9));
+     380              :                     write_number(static_cast<std::uint16_t>(N));
+     381              :                 }
+     382              :                 else if (N <= (std::numeric_limits<std::uint32_t>::max)())
+     383              :                 {
+     384              :                     oa->write_character(to_char_type(0xBA));
+     385              :                     write_number(static_cast<std::uint32_t>(N));
+     386              :                 }
+     387              :                 // LCOV_EXCL_START
+     388              :                 else if (N <= (std::numeric_limits<std::uint64_t>::max)())
+     389              :                 {
+     390              :                     oa->write_character(to_char_type(0xBB));
+     391              :                     write_number(static_cast<std::uint64_t>(N));
+     392              :                 }
+     393              :                 // LCOV_EXCL_STOP
+     394              : 
+     395              :                 // step 2: write each element
+     396              :                 for (const auto& el : *j.m_data.m_value.object)
+     397              :                 {
+     398              :                     write_cbor(el.first);
+     399              :                     write_cbor(el.second);
+     400              :                 }
+     401              :                 break;
+     402              :             }
+     403              : 
+     404              :             case value_t::discarded:
+     405              :             default:
+     406              :                 break;
+     407              :         }
+     408              :     }
+     409              : 
+     410              :     /*!
+     411              :     @param[in] j  JSON value to serialize
+     412              :     */
+     413              :     void write_msgpack(const BasicJsonType& j)
+     414              :     {
+     415              :         switch (j.type())
+     416              :         {
+     417              :             case value_t::null: // nil
+     418              :             {
+     419              :                 oa->write_character(to_char_type(0xC0));
+     420              :                 break;
+     421              :             }
+     422              : 
+     423              :             case value_t::boolean: // true and false
+     424              :             {
+     425              :                 oa->write_character(j.m_data.m_value.boolean
+     426              :                                     ? to_char_type(0xC3)
+     427              :                                     : to_char_type(0xC2));
+     428              :                 break;
+     429              :             }
+     430              : 
+     431              :             case value_t::number_integer:
+     432              :             {
+     433              :                 if (j.m_data.m_value.number_integer >= 0)
+     434              :                 {
+     435              :                     // MessagePack does not differentiate between positive
+     436              :                     // signed integers and unsigned integers. Therefore, we used
+     437              :                     // the code from the value_t::number_unsigned case here.
+     438              :                     if (j.m_data.m_value.number_unsigned < 128)
+     439              :                     {
+     440              :                         // positive fixnum
+     441              :                         write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));
+     442              :                     }
+     443              :                     else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)())
+     444              :                     {
+     445              :                         // uint 8
+     446              :                         oa->write_character(to_char_type(0xCC));
+     447              :                         write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));
+     448              :                     }
+     449              :                     else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)())
+     450              :                     {
+     451              :                         // uint 16
+     452              :                         oa->write_character(to_char_type(0xCD));
+     453              :                         write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_integer));
+     454              :                     }
+     455              :                     else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)())
+     456              :                     {
+     457              :                         // uint 32
+     458              :                         oa->write_character(to_char_type(0xCE));
+     459              :                         write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_integer));
+     460              :                     }
+     461              :                     else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)())
+     462              :                     {
+     463              :                         // uint 64
+     464              :                         oa->write_character(to_char_type(0xCF));
+     465              :                         write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_integer));
+     466              :                     }
+     467              :                 }
+     468              :                 else
+     469              :                 {
+     470              :                     if (j.m_data.m_value.number_integer >= -32)
+     471              :                     {
+     472              :                         // negative fixnum
+     473              :                         write_number(static_cast<std::int8_t>(j.m_data.m_value.number_integer));
+     474              :                     }
+     475              :                     else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int8_t>::min)() &&
+     476              :                              j.m_data.m_value.number_integer <= (std::numeric_limits<std::int8_t>::max)())
+     477              :                     {
+     478              :                         // int 8
+     479              :                         oa->write_character(to_char_type(0xD0));
+     480              :                         write_number(static_cast<std::int8_t>(j.m_data.m_value.number_integer));
+     481              :                     }
+     482              :                     else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int16_t>::min)() &&
+     483              :                              j.m_data.m_value.number_integer <= (std::numeric_limits<std::int16_t>::max)())
+     484              :                     {
+     485              :                         // int 16
+     486              :                         oa->write_character(to_char_type(0xD1));
+     487              :                         write_number(static_cast<std::int16_t>(j.m_data.m_value.number_integer));
+     488              :                     }
+     489              :                     else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int32_t>::min)() &&
+     490              :                              j.m_data.m_value.number_integer <= (std::numeric_limits<std::int32_t>::max)())
+     491              :                     {
+     492              :                         // int 32
+     493              :                         oa->write_character(to_char_type(0xD2));
+     494              :                         write_number(static_cast<std::int32_t>(j.m_data.m_value.number_integer));
+     495              :                     }
+     496              :                     else if (j.m_data.m_value.number_integer >= (std::numeric_limits<std::int64_t>::min)() &&
+     497              :                              j.m_data.m_value.number_integer <= (std::numeric_limits<std::int64_t>::max)())
+     498              :                     {
+     499              :                         // int 64
+     500              :                         oa->write_character(to_char_type(0xD3));
+     501              :                         write_number(static_cast<std::int64_t>(j.m_data.m_value.number_integer));
+     502              :                     }
+     503              :                 }
+     504              :                 break;
+     505              :             }
+     506              : 
+     507              :             case value_t::number_unsigned:
+     508              :             {
+     509              :                 if (j.m_data.m_value.number_unsigned < 128)
+     510              :                 {
+     511              :                     // positive fixnum
+     512              :                     write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));
+     513              :                 }
+     514              :                 else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint8_t>::max)())
+     515              :                 {
+     516              :                     // uint 8
+     517              :                     oa->write_character(to_char_type(0xCC));
+     518              :                     write_number(static_cast<std::uint8_t>(j.m_data.m_value.number_integer));
+     519              :                 }
+     520              :                 else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint16_t>::max)())
+     521              :                 {
+     522              :                     // uint 16
+     523              :                     oa->write_character(to_char_type(0xCD));
+     524              :                     write_number(static_cast<std::uint16_t>(j.m_data.m_value.number_integer));
+     525              :                 }
+     526              :                 else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint32_t>::max)())
+     527              :                 {
+     528              :                     // uint 32
+     529              :                     oa->write_character(to_char_type(0xCE));
+     530              :                     write_number(static_cast<std::uint32_t>(j.m_data.m_value.number_integer));
+     531              :                 }
+     532              :                 else if (j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)())
+     533              :                 {
+     534              :                     // uint 64
+     535              :                     oa->write_character(to_char_type(0xCF));
+     536              :                     write_number(static_cast<std::uint64_t>(j.m_data.m_value.number_integer));
+     537              :                 }
+     538              :                 break;
+     539              :             }
+     540              : 
+     541              :             case value_t::number_float:
+     542              :             {
+     543              :                 write_compact_float(j.m_data.m_value.number_float, detail::input_format_t::msgpack);
+     544              :                 break;
+     545              :             }
+     546              : 
+     547              :             case value_t::string:
+     548              :             {
+     549              :                 // step 1: write control byte and the string length
+     550              :                 const auto N = j.m_data.m_value.string->size();
+     551              :                 if (N <= 31)
+     552              :                 {
+     553              :                     // fixstr
+     554              :                     write_number(static_cast<std::uint8_t>(0xA0 | N));
+     555              :                 }
+     556              :                 else if (N <= (std::numeric_limits<std::uint8_t>::max)())
+     557              :                 {
+     558              :                     // str 8
+     559              :                     oa->write_character(to_char_type(0xD9));
+     560              :                     write_number(static_cast<std::uint8_t>(N));
+     561              :                 }
+     562              :                 else if (N <= (std::numeric_limits<std::uint16_t>::max)())
+     563              :                 {
+     564              :                     // str 16
+     565              :                     oa->write_character(to_char_type(0xDA));
+     566              :                     write_number(static_cast<std::uint16_t>(N));
+     567              :                 }
+     568              :                 else if (N <= (std::numeric_limits<std::uint32_t>::max)())
+     569              :                 {
+     570              :                     // str 32
+     571              :                     oa->write_character(to_char_type(0xDB));
+     572              :                     write_number(static_cast<std::uint32_t>(N));
+     573              :                 }
+     574              : 
+     575              :                 // step 2: write the string
+     576              :                 oa->write_characters(
+     577              :                     reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()),
+     578              :                     j.m_data.m_value.string->size());
+     579              :                 break;
+     580              :             }
+     581              : 
+     582              :             case value_t::array:
+     583              :             {
+     584              :                 // step 1: write control byte and the array size
+     585              :                 const auto N = j.m_data.m_value.array->size();
+     586              :                 if (N <= 15)
+     587              :                 {
+     588              :                     // fixarray
+     589              :                     write_number(static_cast<std::uint8_t>(0x90 | N));
+     590              :                 }
+     591              :                 else if (N <= (std::numeric_limits<std::uint16_t>::max)())
+     592              :                 {
+     593              :                     // array 16
+     594              :                     oa->write_character(to_char_type(0xDC));
+     595              :                     write_number(static_cast<std::uint16_t>(N));
+     596              :                 }
+     597              :                 else if (N <= (std::numeric_limits<std::uint32_t>::max)())
+     598              :                 {
+     599              :                     // array 32
+     600              :                     oa->write_character(to_char_type(0xDD));
+     601              :                     write_number(static_cast<std::uint32_t>(N));
+     602              :                 }
+     603              : 
+     604              :                 // step 2: write each element
+     605              :                 for (const auto& el : *j.m_data.m_value.array)
+     606              :                 {
+     607              :                     write_msgpack(el);
+     608              :                 }
+     609              :                 break;
+     610              :             }
+     611              : 
+     612              :             case value_t::binary:
+     613              :             {
+     614              :                 // step 0: determine if the binary type has a set subtype to
+     615              :                 // determine whether or not to use the ext or fixext types
+     616              :                 const bool use_ext = j.m_data.m_value.binary->has_subtype();
+     617              : 
+     618              :                 // step 1: write control byte and the byte string length
+     619              :                 const auto N = j.m_data.m_value.binary->size();
+     620              :                 if (N <= (std::numeric_limits<std::uint8_t>::max)())
+     621              :                 {
+     622              :                     std::uint8_t output_type{};
+     623              :                     bool fixed = true;
+     624              :                     if (use_ext)
+     625              :                     {
+     626              :                         switch (N)
+     627              :                         {
+     628              :                             case 1:
+     629              :                                 output_type = 0xD4; // fixext 1
+     630              :                                 break;
+     631              :                             case 2:
+     632              :                                 output_type = 0xD5; // fixext 2
+     633              :                                 break;
+     634              :                             case 4:
+     635              :                                 output_type = 0xD6; // fixext 4
+     636              :                                 break;
+     637              :                             case 8:
+     638              :                                 output_type = 0xD7; // fixext 8
+     639              :                                 break;
+     640              :                             case 16:
+     641              :                                 output_type = 0xD8; // fixext 16
+     642              :                                 break;
+     643              :                             default:
+     644              :                                 output_type = 0xC7; // ext 8
+     645              :                                 fixed = false;
+     646              :                                 break;
+     647              :                         }
+     648              : 
+     649              :                     }
+     650              :                     else
+     651              :                     {
+     652              :                         output_type = 0xC4; // bin 8
+     653              :                         fixed = false;
+     654              :                     }
+     655              : 
+     656              :                     oa->write_character(to_char_type(output_type));
+     657              :                     if (!fixed)
+     658              :                     {
+     659              :                         write_number(static_cast<std::uint8_t>(N));
+     660              :                     }
+     661              :                 }
+     662              :                 else if (N <= (std::numeric_limits<std::uint16_t>::max)())
+     663              :                 {
+     664              :                     const std::uint8_t output_type = use_ext
+     665              :                                                      ? 0xC8 // ext 16
+     666              :                                                      : 0xC5; // bin 16
+     667              : 
+     668              :                     oa->write_character(to_char_type(output_type));
+     669              :                     write_number(static_cast<std::uint16_t>(N));
+     670              :                 }
+     671              :                 else if (N <= (std::numeric_limits<std::uint32_t>::max)())
+     672              :                 {
+     673              :                     const std::uint8_t output_type = use_ext
+     674              :                                                      ? 0xC9 // ext 32
+     675              :                                                      : 0xC6; // bin 32
+     676              : 
+     677              :                     oa->write_character(to_char_type(output_type));
+     678              :                     write_number(static_cast<std::uint32_t>(N));
+     679              :                 }
+     680              : 
+     681              :                 // step 1.5: if this is an ext type, write the subtype
+     682              :                 if (use_ext)
+     683              :                 {
+     684              :                     write_number(static_cast<std::int8_t>(j.m_data.m_value.binary->subtype()));
+     685              :                 }
+     686              : 
+     687              :                 // step 2: write the byte string
+     688              :                 oa->write_characters(
+     689              :                     reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),
+     690              :                     N);
+     691              : 
+     692              :                 break;
+     693              :             }
+     694              : 
+     695              :             case value_t::object:
+     696              :             {
+     697              :                 // step 1: write control byte and the object size
+     698              :                 const auto N = j.m_data.m_value.object->size();
+     699              :                 if (N <= 15)
+     700              :                 {
+     701              :                     // fixmap
+     702              :                     write_number(static_cast<std::uint8_t>(0x80 | (N & 0xF)));
+     703              :                 }
+     704              :                 else if (N <= (std::numeric_limits<std::uint16_t>::max)())
+     705              :                 {
+     706              :                     // map 16
+     707              :                     oa->write_character(to_char_type(0xDE));
+     708              :                     write_number(static_cast<std::uint16_t>(N));
+     709              :                 }
+     710              :                 else if (N <= (std::numeric_limits<std::uint32_t>::max)())
+     711              :                 {
+     712              :                     // map 32
+     713              :                     oa->write_character(to_char_type(0xDF));
+     714              :                     write_number(static_cast<std::uint32_t>(N));
+     715              :                 }
+     716              : 
+     717              :                 // step 2: write each element
+     718              :                 for (const auto& el : *j.m_data.m_value.object)
+     719              :                 {
+     720              :                     write_msgpack(el.first);
+     721              :                     write_msgpack(el.second);
+     722              :                 }
+     723              :                 break;
+     724              :             }
+     725              : 
+     726              :             case value_t::discarded:
+     727              :             default:
+     728              :                 break;
+     729              :         }
+     730              :     }
+     731              : 
+     732              :     /*!
+     733              :     @param[in] j  JSON value to serialize
+     734              :     @param[in] use_count   whether to use '#' prefixes (optimized format)
+     735              :     @param[in] use_type    whether to use '$' prefixes (optimized format)
+     736              :     @param[in] add_prefix  whether prefixes need to be used for this value
+     737              :     @param[in] use_bjdata  whether write in BJData format, default is false
+     738              :     */
+     739              :     void write_ubjson(const BasicJsonType& j, const bool use_count,
+     740              :                       const bool use_type, const bool add_prefix = true,
+     741              :                       const bool use_bjdata = false)
+     742              :     {
+     743              :         switch (j.type())
+     744              :         {
+     745              :             case value_t::null:
+     746              :             {
+     747              :                 if (add_prefix)
+     748              :                 {
+     749              :                     oa->write_character(to_char_type('Z'));
+     750              :                 }
+     751              :                 break;
+     752              :             }
+     753              : 
+     754              :             case value_t::boolean:
+     755              :             {
+     756              :                 if (add_prefix)
+     757              :                 {
+     758              :                     oa->write_character(j.m_data.m_value.boolean
+     759              :                                         ? to_char_type('T')
+     760              :                                         : to_char_type('F'));
+     761              :                 }
+     762              :                 break;
+     763              :             }
+     764              : 
+     765              :             case value_t::number_integer:
+     766              :             {
+     767              :                 write_number_with_ubjson_prefix(j.m_data.m_value.number_integer, add_prefix, use_bjdata);
+     768              :                 break;
+     769              :             }
+     770              : 
+     771              :             case value_t::number_unsigned:
+     772              :             {
+     773              :                 write_number_with_ubjson_prefix(j.m_data.m_value.number_unsigned, add_prefix, use_bjdata);
+     774              :                 break;
+     775              :             }
+     776              : 
+     777              :             case value_t::number_float:
+     778              :             {
+     779              :                 write_number_with_ubjson_prefix(j.m_data.m_value.number_float, add_prefix, use_bjdata);
+     780              :                 break;
+     781              :             }
+     782              : 
+     783              :             case value_t::string:
+     784              :             {
+     785              :                 if (add_prefix)
+     786              :                 {
+     787              :                     oa->write_character(to_char_type('S'));
+     788              :                 }
+     789              :                 write_number_with_ubjson_prefix(j.m_data.m_value.string->size(), true, use_bjdata);
+     790              :                 oa->write_characters(
+     791              :                     reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()),
+     792              :                     j.m_data.m_value.string->size());
+     793              :                 break;
+     794              :             }
+     795              : 
+     796              :             case value_t::array:
+     797              :             {
+     798              :                 if (add_prefix)
+     799              :                 {
+     800              :                     oa->write_character(to_char_type('['));
+     801              :                 }
+     802              : 
+     803              :                 bool prefix_required = true;
+     804              :                 if (use_type && !j.m_data.m_value.array->empty())
+     805              :                 {
+     806              :                     JSON_ASSERT(use_count);
+     807              :                     const CharType first_prefix = ubjson_prefix(j.front(), use_bjdata);
+     808              :                     const bool same_prefix = std::all_of(j.begin() + 1, j.end(),
+     809              :                                                          [this, first_prefix, use_bjdata](const BasicJsonType & v)
+     810              :                     {
+     811              :                         return ubjson_prefix(v, use_bjdata) == first_prefix;
+     812              :                     });
+     813              : 
+     814              :                     std::vector<CharType> bjdx = {'[', '{', 'S', 'H', 'T', 'F', 'N', 'Z'}; // excluded markers in bjdata optimized type
+     815              : 
+     816              :                     if (same_prefix && !(use_bjdata && std::find(bjdx.begin(), bjdx.end(), first_prefix) != bjdx.end()))
+     817              :                     {
+     818              :                         prefix_required = false;
+     819              :                         oa->write_character(to_char_type('$'));
+     820              :                         oa->write_character(first_prefix);
+     821              :                     }
+     822              :                 }
+     823              : 
+     824              :                 if (use_count)
+     825              :                 {
+     826              :                     oa->write_character(to_char_type('#'));
+     827              :                     write_number_with_ubjson_prefix(j.m_data.m_value.array->size(), true, use_bjdata);
+     828              :                 }
+     829              : 
+     830              :                 for (const auto& el : *j.m_data.m_value.array)
+     831              :                 {
+     832              :                     write_ubjson(el, use_count, use_type, prefix_required, use_bjdata);
+     833              :                 }
+     834              : 
+     835              :                 if (!use_count)
+     836              :                 {
+     837              :                     oa->write_character(to_char_type(']'));
+     838              :                 }
+     839              : 
+     840              :                 break;
+     841              :             }
+     842              : 
+     843              :             case value_t::binary:
+     844              :             {
+     845              :                 if (add_prefix)
+     846              :                 {
+     847              :                     oa->write_character(to_char_type('['));
+     848              :                 }
+     849              : 
+     850              :                 if (use_type && !j.m_data.m_value.binary->empty())
+     851              :                 {
+     852              :                     JSON_ASSERT(use_count);
+     853              :                     oa->write_character(to_char_type('$'));
+     854              :                     oa->write_character('U');
+     855              :                 }
+     856              : 
+     857              :                 if (use_count)
+     858              :                 {
+     859              :                     oa->write_character(to_char_type('#'));
+     860              :                     write_number_with_ubjson_prefix(j.m_data.m_value.binary->size(), true, use_bjdata);
+     861              :                 }
+     862              : 
+     863              :                 if (use_type)
+     864              :                 {
+     865              :                     oa->write_characters(
+     866              :                         reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),
+     867              :                         j.m_data.m_value.binary->size());
+     868              :                 }
+     869              :                 else
+     870              :                 {
+     871              :                     for (size_t i = 0; i < j.m_data.m_value.binary->size(); ++i)
+     872              :                     {
+     873              :                         oa->write_character(to_char_type('U'));
+     874              :                         oa->write_character(j.m_data.m_value.binary->data()[i]);
+     875              :                     }
+     876              :                 }
+     877              : 
+     878              :                 if (!use_count)
+     879              :                 {
+     880              :                     oa->write_character(to_char_type(']'));
+     881              :                 }
+     882              : 
+     883              :                 break;
+     884              :             }
+     885              : 
+     886              :             case value_t::object:
+     887              :             {
+     888              :                 if (use_bjdata && j.m_data.m_value.object->size() == 3 && j.m_data.m_value.object->find("_ArrayType_") != j.m_data.m_value.object->end() && j.m_data.m_value.object->find("_ArraySize_") != j.m_data.m_value.object->end() && j.m_data.m_value.object->find("_ArrayData_") != j.m_data.m_value.object->end())
+     889              :                 {
+     890              :                     if (!write_bjdata_ndarray(*j.m_data.m_value.object, use_count, use_type))  // decode bjdata ndarray in the JData format (https://github.com/NeuroJSON/jdata)
+     891              :                     {
+     892              :                         break;
+     893              :                     }
+     894              :                 }
+     895              : 
+     896              :                 if (add_prefix)
+     897              :                 {
+     898              :                     oa->write_character(to_char_type('{'));
+     899              :                 }
+     900              : 
+     901              :                 bool prefix_required = true;
+     902              :                 if (use_type && !j.m_data.m_value.object->empty())
+     903              :                 {
+     904              :                     JSON_ASSERT(use_count);
+     905              :                     const CharType first_prefix = ubjson_prefix(j.front(), use_bjdata);
+     906              :                     const bool same_prefix = std::all_of(j.begin(), j.end(),
+     907              :                                                          [this, first_prefix, use_bjdata](const BasicJsonType & v)
+     908              :                     {
+     909              :                         return ubjson_prefix(v, use_bjdata) == first_prefix;
+     910              :                     });
+     911              : 
+     912              :                     std::vector<CharType> bjdx = {'[', '{', 'S', 'H', 'T', 'F', 'N', 'Z'}; // excluded markers in bjdata optimized type
+     913              : 
+     914              :                     if (same_prefix && !(use_bjdata && std::find(bjdx.begin(), bjdx.end(), first_prefix) != bjdx.end()))
+     915              :                     {
+     916              :                         prefix_required = false;
+     917              :                         oa->write_character(to_char_type('$'));
+     918              :                         oa->write_character(first_prefix);
+     919              :                     }
+     920              :                 }
+     921              : 
+     922              :                 if (use_count)
+     923              :                 {
+     924              :                     oa->write_character(to_char_type('#'));
+     925              :                     write_number_with_ubjson_prefix(j.m_data.m_value.object->size(), true, use_bjdata);
+     926              :                 }
+     927              : 
+     928              :                 for (const auto& el : *j.m_data.m_value.object)
+     929              :                 {
+     930              :                     write_number_with_ubjson_prefix(el.first.size(), true, use_bjdata);
+     931              :                     oa->write_characters(
+     932              :                         reinterpret_cast<const CharType*>(el.first.c_str()),
+     933              :                         el.first.size());
+     934              :                     write_ubjson(el.second, use_count, use_type, prefix_required, use_bjdata);
+     935              :                 }
+     936              : 
+     937              :                 if (!use_count)
+     938              :                 {
+     939              :                     oa->write_character(to_char_type('}'));
+     940              :                 }
+     941              : 
+     942              :                 break;
+     943              :             }
+     944              : 
+     945              :             case value_t::discarded:
+     946              :             default:
+     947              :                 break;
+     948              :         }
+     949              :     }
+     950              : 
+     951              :   private:
+     952              :     //////////
+     953              :     // BSON //
+     954              :     //////////
+     955              : 
+     956              :     /*!
+     957              :     @return The size of a BSON document entry header, including the id marker
+     958              :             and the entry name size (and its null-terminator).
+     959              :     */
+     960              :     static std::size_t calc_bson_entry_header_size(const string_t& name, const BasicJsonType& j)
+     961              :     {
+     962              :         const auto it = name.find(static_cast<typename string_t::value_type>(0));
+     963              :         if (JSON_HEDLEY_UNLIKELY(it != BasicJsonType::string_t::npos))
+     964              :         {
+     965              :             JSON_THROW(out_of_range::create(409, concat("BSON key cannot contain code point U+0000 (at byte ", std::to_string(it), ")"), &j));
+     966              :             static_cast<void>(j);
+     967              :         }
+     968              : 
+     969              :         return /*id*/ 1ul + name.size() + /*zero-terminator*/1u;
+     970              :     }
+     971              : 
+     972              :     /*!
+     973              :     @brief Writes the given @a element_type and @a name to the output adapter
+     974              :     */
+     975              :     void write_bson_entry_header(const string_t& name,
+     976              :                                  const std::uint8_t element_type)
+     977              :     {
+     978              :         oa->write_character(to_char_type(element_type)); // boolean
+     979              :         oa->write_characters(
+     980              :             reinterpret_cast<const CharType*>(name.c_str()),
+     981              :             name.size() + 1u);
+     982              :     }
+     983              : 
+     984              :     /*!
+     985              :     @brief Writes a BSON element with key @a name and boolean value @a value
+     986              :     */
+     987              :     void write_bson_boolean(const string_t& name,
+     988              :                             const bool value)
+     989              :     {
+     990              :         write_bson_entry_header(name, 0x08);
+     991              :         oa->write_character(value ? to_char_type(0x01) : to_char_type(0x00));
+     992              :     }
+     993              : 
+     994              :     /*!
+     995              :     @brief Writes a BSON element with key @a name and double value @a value
+     996              :     */
+     997              :     void write_bson_double(const string_t& name,
+     998              :                            const double value)
+     999              :     {
+    1000              :         write_bson_entry_header(name, 0x01);
+    1001              :         write_number<double>(value, true);
+    1002              :     }
+    1003              : 
+    1004              :     /*!
+    1005              :     @return The size of the BSON-encoded string in @a value
+    1006              :     */
+    1007              :     static std::size_t calc_bson_string_size(const string_t& value)
+    1008              :     {
+    1009              :         return sizeof(std::int32_t) + value.size() + 1ul;
+    1010              :     }
+    1011              : 
+    1012              :     /*!
+    1013              :     @brief Writes a BSON element with key @a name and string value @a value
+    1014              :     */
+    1015              :     void write_bson_string(const string_t& name,
+    1016              :                            const string_t& value)
+    1017              :     {
+    1018              :         write_bson_entry_header(name, 0x02);
+    1019              : 
+    1020              :         write_number<std::int32_t>(static_cast<std::int32_t>(value.size() + 1ul), true);
+    1021              :         oa->write_characters(
+    1022              :             reinterpret_cast<const CharType*>(value.c_str()),
+    1023              :             value.size() + 1);
+    1024              :     }
+    1025              : 
+    1026              :     /*!
+    1027              :     @brief Writes a BSON element with key @a name and null value
+    1028              :     */
+    1029              :     void write_bson_null(const string_t& name)
+    1030              :     {
+    1031              :         write_bson_entry_header(name, 0x0A);
+    1032              :     }
+    1033              : 
+    1034              :     /*!
+    1035              :     @return The size of the BSON-encoded integer @a value
+    1036              :     */
+    1037              :     static std::size_t calc_bson_integer_size(const std::int64_t value)
+    1038              :     {
+    1039              :         return (std::numeric_limits<std::int32_t>::min)() <= value && value <= (std::numeric_limits<std::int32_t>::max)()
+    1040              :                ? sizeof(std::int32_t)
+    1041              :                : sizeof(std::int64_t);
+    1042              :     }
+    1043              : 
+    1044              :     /*!
+    1045              :     @brief Writes a BSON element with key @a name and integer @a value
+    1046              :     */
+    1047              :     void write_bson_integer(const string_t& name,
+    1048              :                             const std::int64_t value)
+    1049              :     {
+    1050              :         if ((std::numeric_limits<std::int32_t>::min)() <= value && value <= (std::numeric_limits<std::int32_t>::max)())
+    1051              :         {
+    1052              :             write_bson_entry_header(name, 0x10); // int32
+    1053              :             write_number<std::int32_t>(static_cast<std::int32_t>(value), true);
+    1054              :         }
+    1055              :         else
+    1056              :         {
+    1057              :             write_bson_entry_header(name, 0x12); // int64
+    1058              :             write_number<std::int64_t>(static_cast<std::int64_t>(value), true);
+    1059              :         }
+    1060              :     }
+    1061              : 
+    1062              :     /*!
+    1063              :     @return The size of the BSON-encoded unsigned integer in @a j
+    1064              :     */
+    1065              :     static constexpr std::size_t calc_bson_unsigned_size(const std::uint64_t value) noexcept
+    1066              :     {
+    1067              :         return (value <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))
+    1068              :                ? sizeof(std::int32_t)
+    1069              :                : sizeof(std::int64_t);
+    1070              :     }
+    1071              : 
+    1072              :     /*!
+    1073              :     @brief Writes a BSON element with key @a name and unsigned @a value
+    1074              :     */
+    1075              :     void write_bson_unsigned(const string_t& name,
+    1076              :                              const BasicJsonType& j)
+    1077              :     {
+    1078              :         if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))
+    1079              :         {
+    1080              :             write_bson_entry_header(name, 0x10 /* int32 */);
+    1081              :             write_number<std::int32_t>(static_cast<std::int32_t>(j.m_data.m_value.number_unsigned), true);
+    1082              :         }
+    1083              :         else if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int64_t>::max)()))
+    1084              :         {
+    1085              :             write_bson_entry_header(name, 0x12 /* int64 */);
+    1086              :             write_number<std::int64_t>(static_cast<std::int64_t>(j.m_data.m_value.number_unsigned), true);
+    1087              :         }
+    1088              :         else
+    1089              :         {
+    1090              :             JSON_THROW(out_of_range::create(407, concat("integer number ", std::to_string(j.m_data.m_value.number_unsigned), " cannot be represented by BSON as it does not fit int64"), &j));
+    1091              :         }
+    1092              :     }
+    1093              : 
+    1094              :     /*!
+    1095              :     @brief Writes a BSON element with key @a name and object @a value
+    1096              :     */
+    1097              :     void write_bson_object_entry(const string_t& name,
+    1098              :                                  const typename BasicJsonType::object_t& value)
+    1099              :     {
+    1100              :         write_bson_entry_header(name, 0x03); // object
+    1101              :         write_bson_object(value);
+    1102              :     }
+    1103              : 
+    1104              :     /*!
+    1105              :     @return The size of the BSON-encoded array @a value
+    1106              :     */
+    1107              :     static std::size_t calc_bson_array_size(const typename BasicJsonType::array_t& value)
+    1108              :     {
+    1109              :         std::size_t array_index = 0ul;
+    1110              : 
+    1111              :         const std::size_t embedded_document_size = std::accumulate(std::begin(value), std::end(value), static_cast<std::size_t>(0), [&array_index](std::size_t result, const typename BasicJsonType::array_t::value_type & el)
+    1112              :         {
+    1113              :             return result + calc_bson_element_size(std::to_string(array_index++), el);
+    1114              :         });
+    1115              : 
+    1116              :         return sizeof(std::int32_t) + embedded_document_size + 1ul;
+    1117              :     }
+    1118              : 
+    1119              :     /*!
+    1120              :     @return The size of the BSON-encoded binary array @a value
+    1121              :     */
+    1122              :     static std::size_t calc_bson_binary_size(const typename BasicJsonType::binary_t& value)
+    1123              :     {
+    1124              :         return sizeof(std::int32_t) + value.size() + 1ul;
+    1125              :     }
+    1126              : 
+    1127              :     /*!
+    1128              :     @brief Writes a BSON element with key @a name and array @a value
+    1129              :     */
+    1130              :     void write_bson_array(const string_t& name,
+    1131              :                           const typename BasicJsonType::array_t& value)
+    1132              :     {
+    1133              :         write_bson_entry_header(name, 0x04); // array
+    1134              :         write_number<std::int32_t>(static_cast<std::int32_t>(calc_bson_array_size(value)), true);
+    1135              : 
+    1136              :         std::size_t array_index = 0ul;
+    1137              : 
+    1138              :         for (const auto& el : value)
+    1139              :         {
+    1140              :             write_bson_element(std::to_string(array_index++), el);
+    1141              :         }
+    1142              : 
+    1143              :         oa->write_character(to_char_type(0x00));
+    1144              :     }
+    1145              : 
+    1146              :     /*!
+    1147              :     @brief Writes a BSON element with key @a name and binary value @a value
+    1148              :     */
+    1149              :     void write_bson_binary(const string_t& name,
+    1150              :                            const binary_t& value)
+    1151              :     {
+    1152              :         write_bson_entry_header(name, 0x05);
+    1153              : 
+    1154              :         write_number<std::int32_t>(static_cast<std::int32_t>(value.size()), true);
+    1155              :         write_number(value.has_subtype() ? static_cast<std::uint8_t>(value.subtype()) : static_cast<std::uint8_t>(0x00));
+    1156              : 
+    1157              :         oa->write_characters(reinterpret_cast<const CharType*>(value.data()), value.size());
+    1158              :     }
+    1159              : 
+    1160              :     /*!
+    1161              :     @brief Calculates the size necessary to serialize the JSON value @a j with its @a name
+    1162              :     @return The calculated size for the BSON document entry for @a j with the given @a name.
+    1163              :     */
+    1164              :     static std::size_t calc_bson_element_size(const string_t& name,
+    1165              :             const BasicJsonType& j)
+    1166              :     {
+    1167              :         const auto header_size = calc_bson_entry_header_size(name, j);
+    1168              :         switch (j.type())
+    1169              :         {
+    1170              :             case value_t::object:
+    1171              :                 return header_size + calc_bson_object_size(*j.m_data.m_value.object);
+    1172              : 
+    1173              :             case value_t::array:
+    1174              :                 return header_size + calc_bson_array_size(*j.m_data.m_value.array);
+    1175              : 
+    1176              :             case value_t::binary:
+    1177              :                 return header_size + calc_bson_binary_size(*j.m_data.m_value.binary);
+    1178              : 
+    1179              :             case value_t::boolean:
+    1180              :                 return header_size + 1ul;
+    1181              : 
+    1182              :             case value_t::number_float:
+    1183              :                 return header_size + 8ul;
+    1184              : 
+    1185              :             case value_t::number_integer:
+    1186              :                 return header_size + calc_bson_integer_size(j.m_data.m_value.number_integer);
+    1187              : 
+    1188              :             case value_t::number_unsigned:
+    1189              :                 return header_size + calc_bson_unsigned_size(j.m_data.m_value.number_unsigned);
+    1190              : 
+    1191              :             case value_t::string:
+    1192              :                 return header_size + calc_bson_string_size(*j.m_data.m_value.string);
+    1193              : 
+    1194              :             case value_t::null:
+    1195              :                 return header_size + 0ul;
+    1196              : 
+    1197              :             // LCOV_EXCL_START
+    1198              :             case value_t::discarded:
+    1199              :             default:
+    1200              :                 JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert)
+    1201              :                 return 0ul;
+    1202              :                 // LCOV_EXCL_STOP
+    1203              :         }
+    1204              :     }
+    1205              : 
+    1206              :     /*!
+    1207              :     @brief Serializes the JSON value @a j to BSON and associates it with the
+    1208              :            key @a name.
+    1209              :     @param name The name to associate with the JSON entity @a j within the
+    1210              :                 current BSON document
+    1211              :     */
+    1212              :     void write_bson_element(const string_t& name,
+    1213              :                             const BasicJsonType& j)
+    1214              :     {
+    1215              :         switch (j.type())
+    1216              :         {
+    1217              :             case value_t::object:
+    1218              :                 return write_bson_object_entry(name, *j.m_data.m_value.object);
+    1219              : 
+    1220              :             case value_t::array:
+    1221              :                 return write_bson_array(name, *j.m_data.m_value.array);
+    1222              : 
+    1223              :             case value_t::binary:
+    1224              :                 return write_bson_binary(name, *j.m_data.m_value.binary);
+    1225              : 
+    1226              :             case value_t::boolean:
+    1227              :                 return write_bson_boolean(name, j.m_data.m_value.boolean);
+    1228              : 
+    1229              :             case value_t::number_float:
+    1230              :                 return write_bson_double(name, j.m_data.m_value.number_float);
+    1231              : 
+    1232              :             case value_t::number_integer:
+    1233              :                 return write_bson_integer(name, j.m_data.m_value.number_integer);
+    1234              : 
+    1235              :             case value_t::number_unsigned:
+    1236              :                 return write_bson_unsigned(name, j);
+    1237              : 
+    1238              :             case value_t::string:
+    1239              :                 return write_bson_string(name, *j.m_data.m_value.string);
+    1240              : 
+    1241              :             case value_t::null:
+    1242              :                 return write_bson_null(name);
+    1243              : 
+    1244              :             // LCOV_EXCL_START
+    1245              :             case value_t::discarded:
+    1246              :             default:
+    1247              :                 JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert)
+    1248              :                 return;
+    1249              :                 // LCOV_EXCL_STOP
+    1250              :         }
+    1251              :     }
+    1252              : 
+    1253              :     /*!
+    1254              :     @brief Calculates the size of the BSON serialization of the given
+    1255              :            JSON-object @a j.
+    1256              :     @param[in] value  JSON value to serialize
+    1257              :     @pre       value.type() == value_t::object
+    1258              :     */
+    1259              :     static std::size_t calc_bson_object_size(const typename BasicJsonType::object_t& value)
+    1260              :     {
+    1261              :         const std::size_t document_size = std::accumulate(value.begin(), value.end(), static_cast<std::size_t>(0),
+    1262              :                                           [](size_t result, const typename BasicJsonType::object_t::value_type & el)
+    1263              :         {
+    1264              :             return result += calc_bson_element_size(el.first, el.second);
+    1265              :         });
+    1266              : 
+    1267              :         return sizeof(std::int32_t) + document_size + 1ul;
+    1268              :     }
+    1269              : 
+    1270              :     /*!
+    1271              :     @param[in] value  JSON value to serialize
+    1272              :     @pre       value.type() == value_t::object
+    1273              :     */
+    1274              :     void write_bson_object(const typename BasicJsonType::object_t& value)
+    1275              :     {
+    1276              :         write_number<std::int32_t>(static_cast<std::int32_t>(calc_bson_object_size(value)), true);
+    1277              : 
+    1278              :         for (const auto& el : value)
+    1279              :         {
+    1280              :             write_bson_element(el.first, el.second);
+    1281              :         }
+    1282              : 
+    1283              :         oa->write_character(to_char_type(0x00));
+    1284              :     }
+    1285              : 
+    1286              :     //////////
+    1287              :     // CBOR //
+    1288              :     //////////
+    1289              : 
+    1290              :     static constexpr CharType get_cbor_float_prefix(float /*unused*/)
+    1291              :     {
+    1292              :         return to_char_type(0xFA);  // Single-Precision Float
+    1293              :     }
+    1294              : 
+    1295              :     static constexpr CharType get_cbor_float_prefix(double /*unused*/)
+    1296              :     {
+    1297              :         return to_char_type(0xFB);  // Double-Precision Float
+    1298              :     }
+    1299              : 
+    1300              :     /////////////
+    1301              :     // MsgPack //
+    1302              :     /////////////
+    1303              : 
+    1304              :     static constexpr CharType get_msgpack_float_prefix(float /*unused*/)
+    1305              :     {
+    1306              :         return to_char_type(0xCA);  // float 32
+    1307              :     }
+    1308              : 
+    1309              :     static constexpr CharType get_msgpack_float_prefix(double /*unused*/)
+    1310              :     {
+    1311              :         return to_char_type(0xCB);  // float 64
+    1312              :     }
+    1313              : 
+    1314              :     ////////////
+    1315              :     // UBJSON //
+    1316              :     ////////////
+    1317              : 
+    1318              :     // UBJSON: write number (floating point)
+    1319              :     template<typename NumberType, typename std::enable_if<
+    1320              :                  std::is_floating_point<NumberType>::value, int>::type = 0>
+    1321              :     void write_number_with_ubjson_prefix(const NumberType n,
+    1322              :                                          const bool add_prefix,
+    1323              :                                          const bool use_bjdata)
+    1324              :     {
+    1325              :         if (add_prefix)
+    1326              :         {
+    1327              :             oa->write_character(get_ubjson_float_prefix(n));
+    1328              :         }
+    1329              :         write_number(n, use_bjdata);
+    1330              :     }
+    1331              : 
+    1332              :     // UBJSON: write number (unsigned integer)
+    1333              :     template<typename NumberType, typename std::enable_if<
+    1334              :                  std::is_unsigned<NumberType>::value, int>::type = 0>
+    1335              :     void write_number_with_ubjson_prefix(const NumberType n,
+    1336              :                                          const bool add_prefix,
+    1337              :                                          const bool use_bjdata)
+    1338              :     {
+    1339              :         if (n <= static_cast<std::uint64_t>((std::numeric_limits<std::int8_t>::max)()))
+    1340              :         {
+    1341              :             if (add_prefix)
+    1342              :             {
+    1343              :                 oa->write_character(to_char_type('i'));  // int8
+    1344              :             }
+    1345              :             write_number(static_cast<std::uint8_t>(n), use_bjdata);
+    1346              :         }
+    1347              :         else if (n <= (std::numeric_limits<std::uint8_t>::max)())
+    1348              :         {
+    1349              :             if (add_prefix)
+    1350              :             {
+    1351              :                 oa->write_character(to_char_type('U'));  // uint8
+    1352              :             }
+    1353              :             write_number(static_cast<std::uint8_t>(n), use_bjdata);
+    1354              :         }
+    1355              :         else if (n <= static_cast<std::uint64_t>((std::numeric_limits<std::int16_t>::max)()))
+    1356              :         {
+    1357              :             if (add_prefix)
+    1358              :             {
+    1359              :                 oa->write_character(to_char_type('I'));  // int16
+    1360              :             }
+    1361              :             write_number(static_cast<std::int16_t>(n), use_bjdata);
+    1362              :         }
+    1363              :         else if (use_bjdata && n <= static_cast<uint64_t>((std::numeric_limits<uint16_t>::max)()))
+    1364              :         {
+    1365              :             if (add_prefix)
+    1366              :             {
+    1367              :                 oa->write_character(to_char_type('u'));  // uint16 - bjdata only
+    1368              :             }
+    1369              :             write_number(static_cast<std::uint16_t>(n), use_bjdata);
+    1370              :         }
+    1371              :         else if (n <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))
+    1372              :         {
+    1373              :             if (add_prefix)
+    1374              :             {
+    1375              :                 oa->write_character(to_char_type('l'));  // int32
+    1376              :             }
+    1377              :             write_number(static_cast<std::int32_t>(n), use_bjdata);
+    1378              :         }
+    1379              :         else if (use_bjdata && n <= static_cast<uint64_t>((std::numeric_limits<uint32_t>::max)()))
+    1380              :         {
+    1381              :             if (add_prefix)
+    1382              :             {
+    1383              :                 oa->write_character(to_char_type('m'));  // uint32 - bjdata only
+    1384              :             }
+    1385              :             write_number(static_cast<std::uint32_t>(n), use_bjdata);
+    1386              :         }
+    1387              :         else if (n <= static_cast<std::uint64_t>((std::numeric_limits<std::int64_t>::max)()))
+    1388              :         {
+    1389              :             if (add_prefix)
+    1390              :             {
+    1391              :                 oa->write_character(to_char_type('L'));  // int64
+    1392              :             }
+    1393              :             write_number(static_cast<std::int64_t>(n), use_bjdata);
+    1394              :         }
+    1395              :         else if (use_bjdata && n <= (std::numeric_limits<uint64_t>::max)())
+    1396              :         {
+    1397              :             if (add_prefix)
+    1398              :             {
+    1399              :                 oa->write_character(to_char_type('M'));  // uint64 - bjdata only
+    1400              :             }
+    1401              :             write_number(static_cast<std::uint64_t>(n), use_bjdata);
+    1402              :         }
+    1403              :         else
+    1404              :         {
+    1405              :             if (add_prefix)
+    1406              :             {
+    1407              :                 oa->write_character(to_char_type('H'));  // high-precision number
+    1408              :             }
+    1409              : 
+    1410              :             const auto number = BasicJsonType(n).dump();
+    1411              :             write_number_with_ubjson_prefix(number.size(), true, use_bjdata);
+    1412              :             for (std::size_t i = 0; i < number.size(); ++i)
+    1413              :             {
+    1414              :                 oa->write_character(to_char_type(static_cast<std::uint8_t>(number[i])));
+    1415              :             }
+    1416              :         }
+    1417              :     }
+    1418              : 
+    1419              :     // UBJSON: write number (signed integer)
+    1420              :     template < typename NumberType, typename std::enable_if <
+    1421              :                    std::is_signed<NumberType>::value&&
+    1422              :                    !std::is_floating_point<NumberType>::value, int >::type = 0 >
+    1423              :     void write_number_with_ubjson_prefix(const NumberType n,
+    1424              :                                          const bool add_prefix,
+    1425              :                                          const bool use_bjdata)
+    1426              :     {
+    1427              :         if ((std::numeric_limits<std::int8_t>::min)() <= n && n <= (std::numeric_limits<std::int8_t>::max)())
+    1428              :         {
+    1429              :             if (add_prefix)
+    1430              :             {
+    1431              :                 oa->write_character(to_char_type('i'));  // int8
+    1432              :             }
+    1433              :             write_number(static_cast<std::int8_t>(n), use_bjdata);
+    1434              :         }
+    1435              :         else if (static_cast<std::int64_t>((std::numeric_limits<std::uint8_t>::min)()) <= n && n <= static_cast<std::int64_t>((std::numeric_limits<std::uint8_t>::max)()))
+    1436              :         {
+    1437              :             if (add_prefix)
+    1438              :             {
+    1439              :                 oa->write_character(to_char_type('U'));  // uint8
+    1440              :             }
+    1441              :             write_number(static_cast<std::uint8_t>(n), use_bjdata);
+    1442              :         }
+    1443              :         else if ((std::numeric_limits<std::int16_t>::min)() <= n && n <= (std::numeric_limits<std::int16_t>::max)())
+    1444              :         {
+    1445              :             if (add_prefix)
+    1446              :             {
+    1447              :                 oa->write_character(to_char_type('I'));  // int16
+    1448              :             }
+    1449              :             write_number(static_cast<std::int16_t>(n), use_bjdata);
+    1450              :         }
+    1451              :         else if (use_bjdata && (static_cast<std::int64_t>((std::numeric_limits<std::uint16_t>::min)()) <= n && n <= static_cast<std::int64_t>((std::numeric_limits<std::uint16_t>::max)())))
+    1452              :         {
+    1453              :             if (add_prefix)
+    1454              :             {
+    1455              :                 oa->write_character(to_char_type('u'));  // uint16 - bjdata only
+    1456              :             }
+    1457              :             write_number(static_cast<uint16_t>(n), use_bjdata);
+    1458              :         }
+    1459              :         else if ((std::numeric_limits<std::int32_t>::min)() <= n && n <= (std::numeric_limits<std::int32_t>::max)())
+    1460              :         {
+    1461              :             if (add_prefix)
+    1462              :             {
+    1463              :                 oa->write_character(to_char_type('l'));  // int32
+    1464              :             }
+    1465              :             write_number(static_cast<std::int32_t>(n), use_bjdata);
+    1466              :         }
+    1467              :         else if (use_bjdata && (static_cast<std::int64_t>((std::numeric_limits<std::uint32_t>::min)()) <= n && n <= static_cast<std::int64_t>((std::numeric_limits<std::uint32_t>::max)())))
+    1468              :         {
+    1469              :             if (add_prefix)
+    1470              :             {
+    1471              :                 oa->write_character(to_char_type('m'));  // uint32 - bjdata only
+    1472              :             }
+    1473              :             write_number(static_cast<uint32_t>(n), use_bjdata);
+    1474              :         }
+    1475              :         else if ((std::numeric_limits<std::int64_t>::min)() <= n && n <= (std::numeric_limits<std::int64_t>::max)())
+    1476              :         {
+    1477              :             if (add_prefix)
+    1478              :             {
+    1479              :                 oa->write_character(to_char_type('L'));  // int64
+    1480              :             }
+    1481              :             write_number(static_cast<std::int64_t>(n), use_bjdata);
+    1482              :         }
+    1483              :         // LCOV_EXCL_START
+    1484              :         else
+    1485              :         {
+    1486              :             if (add_prefix)
+    1487              :             {
+    1488              :                 oa->write_character(to_char_type('H'));  // high-precision number
+    1489              :             }
+    1490              : 
+    1491              :             const auto number = BasicJsonType(n).dump();
+    1492              :             write_number_with_ubjson_prefix(number.size(), true, use_bjdata);
+    1493              :             for (std::size_t i = 0; i < number.size(); ++i)
+    1494              :             {
+    1495              :                 oa->write_character(to_char_type(static_cast<std::uint8_t>(number[i])));
+    1496              :             }
+    1497              :         }
+    1498              :         // LCOV_EXCL_STOP
+    1499              :     }
+    1500              : 
+    1501              :     /*!
+    1502              :     @brief determine the type prefix of container values
+    1503              :     */
+    1504              :     CharType ubjson_prefix(const BasicJsonType& j, const bool use_bjdata) const noexcept
+    1505              :     {
+    1506              :         switch (j.type())
+    1507              :         {
+    1508              :             case value_t::null:
+    1509              :                 return 'Z';
+    1510              : 
+    1511              :             case value_t::boolean:
+    1512              :                 return j.m_data.m_value.boolean ? 'T' : 'F';
+    1513              : 
+    1514              :             case value_t::number_integer:
+    1515              :             {
+    1516              :                 if ((std::numeric_limits<std::int8_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int8_t>::max)())
+    1517              :                 {
+    1518              :                     return 'i';
+    1519              :                 }
+    1520              :                 if ((std::numeric_limits<std::uint8_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)())
+    1521              :                 {
+    1522              :                     return 'U';
+    1523              :                 }
+    1524              :                 if ((std::numeric_limits<std::int16_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int16_t>::max)())
+    1525              :                 {
+    1526              :                     return 'I';
+    1527              :                 }
+    1528              :                 if (use_bjdata && ((std::numeric_limits<std::uint16_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)()))
+    1529              :                 {
+    1530              :                     return 'u';
+    1531              :                 }
+    1532              :                 if ((std::numeric_limits<std::int32_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int32_t>::max)())
+    1533              :                 {
+    1534              :                     return 'l';
+    1535              :                 }
+    1536              :                 if (use_bjdata && ((std::numeric_limits<std::uint32_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)()))
+    1537              :                 {
+    1538              :                     return 'm';
+    1539              :                 }
+    1540              :                 if ((std::numeric_limits<std::int64_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int64_t>::max)())
+    1541              :                 {
+    1542              :                     return 'L';
+    1543              :                 }
+    1544              :                 // anything else is treated as high-precision number
+    1545              :                 return 'H'; // LCOV_EXCL_LINE
+    1546              :             }
+    1547              : 
+    1548              :             case value_t::number_unsigned:
+    1549              :             {
+    1550              :                 if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int8_t>::max)()))
+    1551              :                 {
+    1552              :                     return 'i';
+    1553              :                 }
+    1554              :                 if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::uint8_t>::max)()))
+    1555              :                 {
+    1556              :                     return 'U';
+    1557              :                 }
+    1558              :                 if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int16_t>::max)()))
+    1559              :                 {
+    1560              :                     return 'I';
+    1561              :                 }
+    1562              :                 if (use_bjdata && j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::uint16_t>::max)()))
+    1563              :                 {
+    1564              :                     return 'u';
+    1565              :                 }
+    1566              :                 if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))
+    1567              :                 {
+    1568              :                     return 'l';
+    1569              :                 }
+    1570              :                 if (use_bjdata && j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::uint32_t>::max)()))
+    1571              :                 {
+    1572              :                     return 'm';
+    1573              :                 }
+    1574              :                 if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int64_t>::max)()))
+    1575              :                 {
+    1576              :                     return 'L';
+    1577              :                 }
+    1578              :                 if (use_bjdata && j.m_data.m_value.number_unsigned <= (std::numeric_limits<std::uint64_t>::max)())
+    1579              :                 {
+    1580              :                     return 'M';
+    1581              :                 }
+    1582              :                 // anything else is treated as high-precision number
+    1583              :                 return 'H'; // LCOV_EXCL_LINE
+    1584              :             }
+    1585              : 
+    1586              :             case value_t::number_float:
+    1587              :                 return get_ubjson_float_prefix(j.m_data.m_value.number_float);
+    1588              : 
+    1589              :             case value_t::string:
+    1590              :                 return 'S';
+    1591              : 
+    1592              :             case value_t::array: // fallthrough
+    1593              :             case value_t::binary:
+    1594              :                 return '[';
+    1595              : 
+    1596              :             case value_t::object:
+    1597              :                 return '{';
+    1598              : 
+    1599              :             case value_t::discarded:
+    1600              :             default:  // discarded values
+    1601              :                 return 'N';
+    1602              :         }
+    1603              :     }
+    1604              : 
+    1605              :     static constexpr CharType get_ubjson_float_prefix(float /*unused*/)
+    1606              :     {
+    1607              :         return 'd';  // float 32
+    1608              :     }
+    1609              : 
+    1610              :     static constexpr CharType get_ubjson_float_prefix(double /*unused*/)
+    1611              :     {
+    1612              :         return 'D';  // float 64
+    1613              :     }
+    1614              : 
+    1615              :     /*!
+    1616              :     @return false if the object is successfully converted to a bjdata ndarray, true if the type or size is invalid
+    1617              :     */
+    1618              :     bool write_bjdata_ndarray(const typename BasicJsonType::object_t& value, const bool use_count, const bool use_type)
+    1619              :     {
+    1620              :         std::map<string_t, CharType> bjdtype = {{"uint8", 'U'},  {"int8", 'i'},  {"uint16", 'u'}, {"int16", 'I'},
+    1621              :             {"uint32", 'm'}, {"int32", 'l'}, {"uint64", 'M'}, {"int64", 'L'}, {"single", 'd'}, {"double", 'D'}, {"char", 'C'}
+    1622              :         };
+    1623              : 
+    1624              :         string_t key = "_ArrayType_";
+    1625              :         auto it = bjdtype.find(static_cast<string_t>(value.at(key)));
+    1626              :         if (it == bjdtype.end())
+    1627              :         {
+    1628              :             return true;
+    1629              :         }
+    1630              :         CharType dtype = it->second;
+    1631              : 
+    1632              :         key = "_ArraySize_";
+    1633              :         std::size_t len = (value.at(key).empty() ? 0 : 1);
+    1634              :         for (const auto& el : value.at(key))
+    1635              :         {
+    1636              :             len *= static_cast<std::size_t>(el.m_data.m_value.number_unsigned);
+    1637              :         }
+    1638              : 
+    1639              :         key = "_ArrayData_";
+    1640              :         if (value.at(key).size() != len)
+    1641              :         {
+    1642              :             return true;
+    1643              :         }
+    1644              : 
+    1645              :         oa->write_character('[');
+    1646              :         oa->write_character('$');
+    1647              :         oa->write_character(dtype);
+    1648              :         oa->write_character('#');
+    1649              : 
+    1650              :         key = "_ArraySize_";
+    1651              :         write_ubjson(value.at(key), use_count, use_type, true,  true);
+    1652              : 
+    1653              :         key = "_ArrayData_";
+    1654              :         if (dtype == 'U' || dtype == 'C')
+    1655              :         {
+    1656              :             for (const auto& el : value.at(key))
+    1657              :             {
+    1658              :                 write_number(static_cast<std::uint8_t>(el.m_data.m_value.number_unsigned), true);
+    1659              :             }
+    1660              :         }
+    1661              :         else if (dtype == 'i')
+    1662              :         {
+    1663              :             for (const auto& el : value.at(key))
+    1664              :             {
+    1665              :                 write_number(static_cast<std::int8_t>(el.m_data.m_value.number_integer), true);
+    1666              :             }
+    1667              :         }
+    1668              :         else if (dtype == 'u')
+    1669              :         {
+    1670              :             for (const auto& el : value.at(key))
+    1671              :             {
+    1672              :                 write_number(static_cast<std::uint16_t>(el.m_data.m_value.number_unsigned), true);
+    1673              :             }
+    1674              :         }
+    1675              :         else if (dtype == 'I')
+    1676              :         {
+    1677              :             for (const auto& el : value.at(key))
+    1678              :             {
+    1679              :                 write_number(static_cast<std::int16_t>(el.m_data.m_value.number_integer), true);
+    1680              :             }
+    1681              :         }
+    1682              :         else if (dtype == 'm')
+    1683              :         {
+    1684              :             for (const auto& el : value.at(key))
+    1685              :             {
+    1686              :                 write_number(static_cast<std::uint32_t>(el.m_data.m_value.number_unsigned), true);
+    1687              :             }
+    1688              :         }
+    1689              :         else if (dtype == 'l')
+    1690              :         {
+    1691              :             for (const auto& el : value.at(key))
+    1692              :             {
+    1693              :                 write_number(static_cast<std::int32_t>(el.m_data.m_value.number_integer), true);
+    1694              :             }
+    1695              :         }
+    1696              :         else if (dtype == 'M')
+    1697              :         {
+    1698              :             for (const auto& el : value.at(key))
+    1699              :             {
+    1700              :                 write_number(static_cast<std::uint64_t>(el.m_data.m_value.number_unsigned), true);
+    1701              :             }
+    1702              :         }
+    1703              :         else if (dtype == 'L')
+    1704              :         {
+    1705              :             for (const auto& el : value.at(key))
+    1706              :             {
+    1707              :                 write_number(static_cast<std::int64_t>(el.m_data.m_value.number_integer), true);
+    1708              :             }
+    1709              :         }
+    1710              :         else if (dtype == 'd')
+    1711              :         {
+    1712              :             for (const auto& el : value.at(key))
+    1713              :             {
+    1714              :                 write_number(static_cast<float>(el.m_data.m_value.number_float), true);
+    1715              :             }
+    1716              :         }
+    1717              :         else if (dtype == 'D')
+    1718              :         {
+    1719              :             for (const auto& el : value.at(key))
+    1720              :             {
+    1721              :                 write_number(static_cast<double>(el.m_data.m_value.number_float), true);
+    1722              :             }
+    1723              :         }
+    1724              :         return false;
+    1725              :     }
+    1726              : 
+    1727              :     ///////////////////////
+    1728              :     // Utility functions //
+    1729              :     ///////////////////////
+    1730              : 
+    1731              :     /*
+    1732              :     @brief write a number to output input
+    1733              :     @param[in] n number of type @a NumberType
+    1734              :     @param[in] OutputIsLittleEndian Set to true if output data is
+    1735              :                                  required to be little endian
+    1736              :     @tparam NumberType the type of the number
+    1737              : 
+    1738              :     @note This function needs to respect the system's endianness, because bytes
+    1739              :           in CBOR, MessagePack, and UBJSON are stored in network order (big
+    1740              :           endian) and therefore need reordering on little endian systems.
+    1741              :           On the other hand, BSON and BJData use little endian and should reorder
+    1742              :           on big endian systems.
+    1743              :     */
+    1744              :     template<typename NumberType>
+    1745              :     void write_number(const NumberType n, const bool OutputIsLittleEndian = false)
+    1746              :     {
+    1747              :         // step 1: write number to array of length NumberType
+    1748              :         std::array<CharType, sizeof(NumberType)> vec{};
+    1749              :         std::memcpy(vec.data(), &n, sizeof(NumberType));
+    1750              : 
+    1751              :         // step 2: write array to output (with possible reordering)
+    1752              :         if (is_little_endian != OutputIsLittleEndian)
+    1753              :         {
+    1754              :             // reverse byte order prior to conversion if necessary
+    1755              :             std::reverse(vec.begin(), vec.end());
+    1756              :         }
+    1757              : 
+    1758              :         oa->write_characters(vec.data(), sizeof(NumberType));
+    1759              :     }
+    1760              : 
+    1761              :     void write_compact_float(const number_float_t n, detail::input_format_t format)
+    1762              :     {
+    1763              : #ifdef __GNUC__
+    1764              : #pragma GCC diagnostic push
+    1765              : #pragma GCC diagnostic ignored "-Wfloat-equal"
+    1766              : #endif
+    1767              :         if (static_cast<double>(n) >= static_cast<double>(std::numeric_limits<float>::lowest()) &&
+    1768              :                 static_cast<double>(n) <= static_cast<double>((std::numeric_limits<float>::max)()) &&
+    1769              :                 static_cast<double>(static_cast<float>(n)) == static_cast<double>(n))
+    1770              :         {
+    1771              :             oa->write_character(format == detail::input_format_t::cbor
+    1772              :                                 ? get_cbor_float_prefix(static_cast<float>(n))
+    1773              :                                 : get_msgpack_float_prefix(static_cast<float>(n)));
+    1774              :             write_number(static_cast<float>(n));
+    1775              :         }
+    1776              :         else
+    1777              :         {
+    1778              :             oa->write_character(format == detail::input_format_t::cbor
+    1779              :                                 ? get_cbor_float_prefix(n)
+    1780              :                                 : get_msgpack_float_prefix(n));
+    1781              :             write_number(n);
+    1782              :         }
+    1783              : #ifdef __GNUC__
+    1784              : #pragma GCC diagnostic pop
+    1785              : #endif
+    1786              :     }
+    1787              : 
+    1788              :   public:
+    1789              :     // The following to_char_type functions are implement the conversion
+    1790              :     // between uint8_t and CharType. In case CharType is not unsigned,
+    1791              :     // such a conversion is required to allow values greater than 128.
+    1792              :     // See <https://github.com/nlohmann/json/issues/1286> for a discussion.
+    1793              :     template < typename C = CharType,
+    1794              :                enable_if_t < std::is_signed<C>::value && std::is_signed<char>::value > * = nullptr >
+    1795              :     static constexpr CharType to_char_type(std::uint8_t x) noexcept
+    1796              :     {
+    1797              :         return *reinterpret_cast<char*>(&x);
+    1798              :     }
+    1799              : 
+    1800              :     template < typename C = CharType,
+    1801              :                enable_if_t < std::is_signed<C>::value && std::is_unsigned<char>::value > * = nullptr >
+    1802              :     static CharType to_char_type(std::uint8_t x) noexcept
+    1803              :     {
+    1804              :         static_assert(sizeof(std::uint8_t) == sizeof(CharType), "size of CharType must be equal to std::uint8_t");
+    1805              :         static_assert(std::is_trivial<CharType>::value, "CharType must be trivial");
+    1806              :         CharType result;
+    1807              :         std::memcpy(&result, &x, sizeof(x));
+    1808              :         return result;
+    1809              :     }
+    1810              : 
+    1811              :     template<typename C = CharType,
+    1812              :              enable_if_t<std::is_unsigned<C>::value>* = nullptr>
+    1813              :     static constexpr CharType to_char_type(std::uint8_t x) noexcept
+    1814              :     {
+    1815              :         return x;
+    1816              :     }
+    1817              : 
+    1818              :     template < typename InputCharType, typename C = CharType,
+    1819              :                enable_if_t <
+    1820              :                    std::is_signed<C>::value &&
+    1821              :                    std::is_signed<char>::value &&
+    1822              :                    std::is_same<char, typename std::remove_cv<InputCharType>::type>::value
+    1823              :                    > * = nullptr >
+    1824            0 :     static constexpr CharType to_char_type(InputCharType x) noexcept
+    1825              :     {
+    1826            0 :         return x;
+    1827              :     }
+    1828              : 
+    1829              :   private:
+    1830              :     /// whether we can assume little endianness
+    1831              :     const bool is_little_endian = little_endianness();
+    1832              : 
+    1833              :     /// the output
+    1834              :     output_adapter_t<CharType> oa = nullptr;
+    1835              : };
+    1836              : 
+    1837              : }  // namespace detail
+    1838              : NLOHMANN_JSON_NAMESPACE_END
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/output/index-sort-f.html b/html/BayesNet/lib/json/include/nlohmann/detail/output/index-sort-f.html new file mode 100644 index 0000000..748faee --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/output/index-sort-f.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/output + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/outputCoverageTotalHit
Test:coverage.infoLines:35.3 %337119
Test Date:2024-04-30 13:17:26Functions:68.0 %2517
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
binary_writer.hpp +
0.0%
+
0.0 %20.0 %1
serializer.hpp +
32.5%32.5%
+
32.5 %32010462.5 %1610
output_adapters.hpp +
100.0%
+
100.0 %151587.5 %87
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/output/index-sort-l.html b/html/BayesNet/lib/json/include/nlohmann/detail/output/index-sort-l.html new file mode 100644 index 0000000..0c45971 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/output/index-sort-l.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/output + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/outputCoverageTotalHit
Test:coverage.infoLines:35.3 %337119
Test Date:2024-04-30 13:17:26Functions:68.0 %2517
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
binary_writer.hpp +
0.0%
+
0.0 %20.0 %1
serializer.hpp +
32.5%32.5%
+
32.5 %32010462.5 %1610
output_adapters.hpp +
100.0%
+
100.0 %151587.5 %87
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/output/index.html b/html/BayesNet/lib/json/include/nlohmann/detail/output/index.html new file mode 100644 index 0000000..4b789c5 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/output/index.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/output + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/outputCoverageTotalHit
Test:coverage.infoLines:35.3 %337119
Test Date:2024-04-30 13:17:26Functions:68.0 %2517
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
binary_writer.hpp +
0.0%
+
0.0 %20.0 %1
output_adapters.hpp +
100.0%
+
100.0 %151587.5 %87
serializer.hpp +
32.5%32.5%
+
32.5 %32010462.5 %1610
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/output/output_adapters.hpp.func-c.html b/html/BayesNet/lib/json/include/nlohmann/detail/output/output_adapters.hpp.func-c.html new file mode 100644 index 0000000..94e675b --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/output/output_adapters.hpp.func-c.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/output/output_adapters.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/output - output_adapters.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1515
Test Date:2024-04-30 13:17:26Functions:87.5 %87
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail14output_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ERS8_20
_ZN8nlohmann16json_abi_v3_11_36detail14output_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEcvSt10shared_ptrINS1_23output_adapter_protocolIcEEEEv20
_ZN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ERS8_20
_ZN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEC2Ev20
_ZN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcED0Ev20
_ZN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcED0Ev0
_ZN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcED2Ev20
_ZN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE16write_charactersEPKcm82
_ZN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE15write_characterEc110
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/output/output_adapters.hpp.func.html b/html/BayesNet/lib/json/include/nlohmann/detail/output/output_adapters.hpp.func.html new file mode 100644 index 0000000..f43debb --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/output/output_adapters.hpp.func.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/output/output_adapters.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/output - output_adapters.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1515
Test Date:2024-04-30 13:17:26Functions:87.5 %87
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail14output_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ERS8_20
_ZN8nlohmann16json_abi_v3_11_36detail14output_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEcvSt10shared_ptrINS1_23output_adapter_protocolIcEEEEv20
_ZN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE15write_characterEc110
_ZN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE16write_charactersEPKcm82
_ZN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ERS8_20
_ZN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEC2Ev20
_ZN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcED0Ev20
_ZN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcED0Ev0
_ZN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcED2Ev20
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/output/output_adapters.hpp.gcov.html b/html/BayesNet/lib/json/include/nlohmann/detail/output/output_adapters.hpp.gcov.html new file mode 100644 index 0000000..178d0cf --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/output/output_adapters.hpp.gcov.html @@ -0,0 +1,223 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/output/output_adapters.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/output - output_adapters.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1515
Test Date:2024-04-30 13:17:26Functions:87.5 %87
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : //     __ _____ _____ _____
+       2              : //  __|  |   __|     |   | |  JSON for Modern C++
+       3              : // |  |  |__   |  |  | | | |  version 3.11.3
+       4              : // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
+       5              : //
+       6              : // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
+       7              : // SPDX-License-Identifier: MIT
+       8              : 
+       9              : #pragma once
+      10              : 
+      11              : #include <algorithm> // copy
+      12              : #include <cstddef> // size_t
+      13              : #include <iterator> // back_inserter
+      14              : #include <memory> // shared_ptr, make_shared
+      15              : #include <string> // basic_string
+      16              : #include <vector> // vector
+      17              : 
+      18              : #ifndef JSON_NO_IO
+      19              :     #include <ios>      // streamsize
+      20              :     #include <ostream>  // basic_ostream
+      21              : #endif  // JSON_NO_IO
+      22              : 
+      23              : #include <nlohmann/detail/macro_scope.hpp>
+      24              : 
+      25              : NLOHMANN_JSON_NAMESPACE_BEGIN
+      26              : namespace detail
+      27              : {
+      28              : 
+      29              : /// abstract output adapter interface
+      30              : template<typename CharType> struct output_adapter_protocol
+      31              : {
+      32              :     virtual void write_character(CharType c) = 0;
+      33              :     virtual void write_characters(const CharType* s, std::size_t length) = 0;
+      34           20 :     virtual ~output_adapter_protocol() = default;
+      35              : 
+      36           20 :     output_adapter_protocol() = default;
+      37              :     output_adapter_protocol(const output_adapter_protocol&) = default;
+      38              :     output_adapter_protocol(output_adapter_protocol&&) noexcept = default;
+      39              :     output_adapter_protocol& operator=(const output_adapter_protocol&) = default;
+      40              :     output_adapter_protocol& operator=(output_adapter_protocol&&) noexcept = default;
+      41              : };
+      42              : 
+      43              : /// a type to simplify interfaces
+      44              : template<typename CharType>
+      45              : using output_adapter_t = std::shared_ptr<output_adapter_protocol<CharType>>;
+      46              : 
+      47              : /// output adapter for byte vectors
+      48              : template<typename CharType, typename AllocatorType = std::allocator<CharType>>
+      49              : class output_vector_adapter : public output_adapter_protocol<CharType>
+      50              : {
+      51              :   public:
+      52              :     explicit output_vector_adapter(std::vector<CharType, AllocatorType>& vec) noexcept
+      53              :         : v(vec)
+      54              :     {}
+      55              : 
+      56              :     void write_character(CharType c) override
+      57              :     {
+      58              :         v.push_back(c);
+      59              :     }
+      60              : 
+      61              :     JSON_HEDLEY_NON_NULL(2)
+      62              :     void write_characters(const CharType* s, std::size_t length) override
+      63              :     {
+      64              :         v.insert(v.end(), s, s + length);
+      65              :     }
+      66              : 
+      67              :   private:
+      68              :     std::vector<CharType, AllocatorType>& v;
+      69              : };
+      70              : 
+      71              : #ifndef JSON_NO_IO
+      72              : /// output adapter for output streams
+      73              : template<typename CharType>
+      74              : class output_stream_adapter : public output_adapter_protocol<CharType>
+      75              : {
+      76              :   public:
+      77              :     explicit output_stream_adapter(std::basic_ostream<CharType>& s) noexcept
+      78              :         : stream(s)
+      79              :     {}
+      80              : 
+      81              :     void write_character(CharType c) override
+      82              :     {
+      83              :         stream.put(c);
+      84              :     }
+      85              : 
+      86              :     JSON_HEDLEY_NON_NULL(2)
+      87              :     void write_characters(const CharType* s, std::size_t length) override
+      88              :     {
+      89              :         stream.write(s, static_cast<std::streamsize>(length));
+      90              :     }
+      91              : 
+      92              :   private:
+      93              :     std::basic_ostream<CharType>& stream;
+      94              : };
+      95              : #endif  // JSON_NO_IO
+      96              : 
+      97              : /// output adapter for basic_string
+      98              : template<typename CharType, typename StringType = std::basic_string<CharType>>
+      99              : class output_string_adapter : public output_adapter_protocol<CharType>
+     100              : {
+     101              :   public:
+     102           20 :     explicit output_string_adapter(StringType& s) noexcept
+     103           20 :         : str(s)
+     104           20 :     {}
+     105              : 
+     106          110 :     void write_character(CharType c) override
+     107              :     {
+     108          110 :         str.push_back(c);
+     109          110 :     }
+     110              : 
+     111              :     JSON_HEDLEY_NON_NULL(2)
+     112           82 :     void write_characters(const CharType* s, std::size_t length) override
+     113              :     {
+     114           82 :         str.append(s, length);
+     115           82 :     }
+     116              : 
+     117              :   private:
+     118              :     StringType& str;
+     119              : };
+     120              : 
+     121              : template<typename CharType, typename StringType = std::basic_string<CharType>>
+     122              : class output_adapter
+     123              : {
+     124              :   public:
+     125              :     template<typename AllocatorType = std::allocator<CharType>>
+     126              :     output_adapter(std::vector<CharType, AllocatorType>& vec)
+     127              :         : oa(std::make_shared<output_vector_adapter<CharType, AllocatorType>>(vec)) {}
+     128              : 
+     129              : #ifndef JSON_NO_IO
+     130              :     output_adapter(std::basic_ostream<CharType>& s)
+     131              :         : oa(std::make_shared<output_stream_adapter<CharType>>(s)) {}
+     132              : #endif  // JSON_NO_IO
+     133              : 
+     134           20 :     output_adapter(StringType& s)
+     135           20 :         : oa(std::make_shared<output_string_adapter<CharType, StringType>>(s)) {}
+     136              : 
+     137           20 :     operator output_adapter_t<CharType>()
+     138              :     {
+     139           20 :         return oa;
+     140              :     }
+     141              : 
+     142              :   private:
+     143              :     output_adapter_t<CharType> oa = nullptr;
+     144              : };
+     145              : 
+     146              : }  // namespace detail
+     147              : NLOHMANN_JSON_NAMESPACE_END
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/output/serializer.hpp.func-c.html b/html/BayesNet/lib/json/include/nlohmann/detail/output/serializer.hpp.func-c.html new file mode 100644 index 0000000..56d5ca3 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/output/serializer.hpp.func-c.html @@ -0,0 +1,201 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/output/serializer.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/output - serializer.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:32.5 %320104
Test Date:2024-04-30 13:17:26Functions:62.5 %1610
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE11remove_signEl0
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE18is_negative_numberIhLi0EEEbT_0
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE18is_negative_numberIhLi0EEEbT_0
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE18is_negative_numberImLi0EEEbT_0
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE9hex_bytesEh0
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE12count_digitsEm2
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE18is_negative_numberIlLi0EEEbT_2
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE12dump_integerIhLi0EEEvT_4
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE12dump_integerIhLi0EEEvT_0
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE12dump_integerImLi0EEEvT_0
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE12dump_integerIlLi0EEEvT_4
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE10dump_floatEd8
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE10dump_floatEdSt17integral_constantIbLb1EE8
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2ESt10shared_ptrINS1_23output_adapter_protocolIcEEEcNS1_15error_handler_tE20
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEED2Ev20
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE12dump_escapedERKSB_b44
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE4dumpERKSF_bbjj48
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE6decodeERhRjh360
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/output/serializer.hpp.func.html b/html/BayesNet/lib/json/include/nlohmann/detail/output/serializer.hpp.func.html new file mode 100644 index 0000000..8ea16a1 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/output/serializer.hpp.func.html @@ -0,0 +1,201 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/output/serializer.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/output - serializer.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:32.5 %320104
Test Date:2024-04-30 13:17:26Functions:62.5 %1610
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE10dump_floatEd8
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE10dump_floatEdSt17integral_constantIbLb1EE8
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE11remove_signEl0
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE12count_digitsEm2
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE12dump_escapedERKSB_b44
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE12dump_integerIhLi0EEEvT_4
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE12dump_integerIhLi0EEEvT_0
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE12dump_integerIlLi0EEEvT_4
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE12dump_integerImLi0EEEvT_0
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE18is_negative_numberIhLi0EEEbT_0
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE18is_negative_numberIhLi0EEEbT_0
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE18is_negative_numberImLi0EEEbT_0
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE18is_negative_numberIlLi0EEEbT_2
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE4dumpERKSF_bbjj48
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE6decodeERhRjh360
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEE9hex_bytesEh0
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEEC2ESt10shared_ptrINS1_23output_adapter_protocolIcEEEcNS1_15error_handler_tE20
_ZN8nlohmann16json_abi_v3_11_36detail10serializerINS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES5_IhSaIhEEvEEED2Ev20
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/output/serializer.hpp.gcov.html b/html/BayesNet/lib/json/include/nlohmann/detail/output/serializer.hpp.gcov.html new file mode 100644 index 0000000..6f4357a --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/output/serializer.hpp.gcov.html @@ -0,0 +1,1064 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/output/serializer.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail/output - serializer.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:32.5 %320104
Test Date:2024-04-30 13:17:26Functions:62.5 %1610
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : //     __ _____ _____ _____
+       2              : //  __|  |   __|     |   | |  JSON for Modern C++
+       3              : // |  |  |__   |  |  | | | |  version 3.11.3
+       4              : // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
+       5              : //
+       6              : // SPDX-FileCopyrightText: 2008-2009 Björn Hoehrmann <bjoern@hoehrmann.de>
+       7              : // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
+       8              : // SPDX-License-Identifier: MIT
+       9              : 
+      10              : #pragma once
+      11              : 
+      12              : #include <algorithm> // reverse, remove, fill, find, none_of
+      13              : #include <array> // array
+      14              : #include <clocale> // localeconv, lconv
+      15              : #include <cmath> // labs, isfinite, isnan, signbit
+      16              : #include <cstddef> // size_t, ptrdiff_t
+      17              : #include <cstdint> // uint8_t
+      18              : #include <cstdio> // snprintf
+      19              : #include <limits> // numeric_limits
+      20              : #include <string> // string, char_traits
+      21              : #include <iomanip> // setfill, setw
+      22              : #include <type_traits> // is_same
+      23              : #include <utility> // move
+      24              : 
+      25              : #include <nlohmann/detail/conversions/to_chars.hpp>
+      26              : #include <nlohmann/detail/exceptions.hpp>
+      27              : #include <nlohmann/detail/macro_scope.hpp>
+      28              : #include <nlohmann/detail/meta/cpp_future.hpp>
+      29              : #include <nlohmann/detail/output/binary_writer.hpp>
+      30              : #include <nlohmann/detail/output/output_adapters.hpp>
+      31              : #include <nlohmann/detail/string_concat.hpp>
+      32              : #include <nlohmann/detail/value_t.hpp>
+      33              : 
+      34              : NLOHMANN_JSON_NAMESPACE_BEGIN
+      35              : namespace detail
+      36              : {
+      37              : 
+      38              : ///////////////////
+      39              : // serialization //
+      40              : ///////////////////
+      41              : 
+      42              : /// how to treat decoding errors
+      43              : enum class error_handler_t
+      44              : {
+      45              :     strict,  ///< throw a type_error exception in case of invalid UTF-8
+      46              :     replace, ///< replace invalid UTF-8 sequences with U+FFFD
+      47              :     ignore   ///< ignore invalid UTF-8 sequences
+      48              : };
+      49              : 
+      50              : template<typename BasicJsonType>
+      51              : class serializer
+      52              : {
+      53              :     using string_t = typename BasicJsonType::string_t;
+      54              :     using number_float_t = typename BasicJsonType::number_float_t;
+      55              :     using number_integer_t = typename BasicJsonType::number_integer_t;
+      56              :     using number_unsigned_t = typename BasicJsonType::number_unsigned_t;
+      57              :     using binary_char_t = typename BasicJsonType::binary_t::value_type;
+      58              :     static constexpr std::uint8_t UTF8_ACCEPT = 0;
+      59              :     static constexpr std::uint8_t UTF8_REJECT = 1;
+      60              : 
+      61              :   public:
+      62              :     /*!
+      63              :     @param[in] s  output stream to serialize to
+      64              :     @param[in] ichar  indentation character to use
+      65              :     @param[in] error_handler_  how to react on decoding errors
+      66              :     */
+      67           20 :     serializer(output_adapter_t<char> s, const char ichar,
+      68              :                error_handler_t error_handler_ = error_handler_t::strict)
+      69           20 :         : o(std::move(s))
+      70           40 :         , loc(std::localeconv())
+      71           20 :         , thousands_sep(loc->thousands_sep == nullptr ? '\0' : std::char_traits<char>::to_char_type(* (loc->thousands_sep)))
+      72           20 :         , decimal_point(loc->decimal_point == nullptr ? '\0' : std::char_traits<char>::to_char_type(* (loc->decimal_point)))
+      73           20 :         , indent_char(ichar)
+      74           20 :         , indent_string(512, indent_char)
+      75           40 :         , error_handler(error_handler_)
+      76           20 :     {}
+      77              : 
+      78              :     // delete because of pointer members
+      79              :     serializer(const serializer&) = delete;
+      80              :     serializer& operator=(const serializer&) = delete;
+      81              :     serializer(serializer&&) = delete;
+      82              :     serializer& operator=(serializer&&) = delete;
+      83           20 :     ~serializer() = default;
+      84              : 
+      85              :     /*!
+      86              :     @brief internal implementation of the serialization function
+      87              : 
+      88              :     This function is called by the public member function dump and organizes
+      89              :     the serialization internally. The indentation level is propagated as
+      90              :     additional parameter. In case of arrays and objects, the function is
+      91              :     called recursively.
+      92              : 
+      93              :     - strings and object keys are escaped using `escape_string()`
+      94              :     - integer numbers are converted implicitly via `operator<<`
+      95              :     - floating-point numbers are converted to a string using `"%g"` format
+      96              :     - binary values are serialized as objects containing the subtype and the
+      97              :       byte array
+      98              : 
+      99              :     @param[in] val               value to serialize
+     100              :     @param[in] pretty_print      whether the output shall be pretty-printed
+     101              :     @param[in] ensure_ascii If @a ensure_ascii is true, all non-ASCII characters
+     102              :     in the output are escaped with `\uXXXX` sequences, and the result consists
+     103              :     of ASCII characters only.
+     104              :     @param[in] indent_step       the indent level
+     105              :     @param[in] current_indent    the current indent level (only used internally)
+     106              :     */
+     107           48 :     void dump(const BasicJsonType& val,
+     108              :               const bool pretty_print,
+     109              :               const bool ensure_ascii,
+     110              :               const unsigned int indent_step,
+     111              :               const unsigned int current_indent = 0)
+     112              :     {
+     113           48 :         switch (val.m_data.m_type)
+     114              :         {
+     115           20 :             case value_t::object:
+     116              :             {
+     117           20 :                 if (val.m_data.m_value.object->empty())
+     118              :                 {
+     119            0 :                     o->write_characters("{}", 2);
+     120            0 :                     return;
+     121              :                 }
+     122              : 
+     123           20 :                 if (pretty_print)
+     124              :                 {
+     125            0 :                     o->write_characters("{\n", 2);
+     126              : 
+     127              :                     // variable to hold indentation for recursive calls
+     128            0 :                     const auto new_indent = current_indent + indent_step;
+     129            0 :                     if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent))
+     130              :                     {
+     131            0 :                         indent_string.resize(indent_string.size() * 2, ' ');
+     132              :                     }
+     133              : 
+     134              :                     // first n-1 elements
+     135            0 :                     auto i = val.m_data.m_value.object->cbegin();
+     136            0 :                     for (std::size_t cnt = 0; cnt < val.m_data.m_value.object->size() - 1; ++cnt, ++i)
+     137              :                     {
+     138            0 :                         o->write_characters(indent_string.c_str(), new_indent);
+     139            0 :                         o->write_character('\"');
+     140            0 :                         dump_escaped(i->first, ensure_ascii);
+     141            0 :                         o->write_characters("\": ", 3);
+     142            0 :                         dump(i->second, true, ensure_ascii, indent_step, new_indent);
+     143            0 :                         o->write_characters(",\n", 2);
+     144              :                     }
+     145              : 
+     146              :                     // last element
+     147            0 :                     JSON_ASSERT(i != val.m_data.m_value.object->cend());
+     148            0 :                     JSON_ASSERT(std::next(i) == val.m_data.m_value.object->cend());
+     149            0 :                     o->write_characters(indent_string.c_str(), new_indent);
+     150            0 :                     o->write_character('\"');
+     151            0 :                     dump_escaped(i->first, ensure_ascii);
+     152            0 :                     o->write_characters("\": ", 3);
+     153            0 :                     dump(i->second, true, ensure_ascii, indent_step, new_indent);
+     154              : 
+     155            0 :                     o->write_character('\n');
+     156            0 :                     o->write_characters(indent_string.c_str(), current_indent);
+     157            0 :                     o->write_character('}');
+     158              :                 }
+     159              :                 else
+     160              :                 {
+     161           20 :                     o->write_character('{');
+     162              : 
+     163              :                     // first n-1 elements
+     164           20 :                     auto i = val.m_data.m_value.object->cbegin();
+     165           28 :                     for (std::size_t cnt = 0; cnt < val.m_data.m_value.object->size() - 1; ++cnt, ++i)
+     166              :                     {
+     167            8 :                         o->write_character('\"');
+     168            8 :                         dump_escaped(i->first, ensure_ascii);
+     169            8 :                         o->write_characters("\":", 2);
+     170            8 :                         dump(i->second, false, ensure_ascii, indent_step, current_indent);
+     171            8 :                         o->write_character(',');
+     172              :                     }
+     173              : 
+     174              :                     // last element
+     175           20 :                     JSON_ASSERT(i != val.m_data.m_value.object->cend());
+     176           40 :                     JSON_ASSERT(std::next(i) == val.m_data.m_value.object->cend());
+     177           20 :                     o->write_character('\"');
+     178           20 :                     dump_escaped(i->first, ensure_ascii);
+     179           20 :                     o->write_characters("\":", 2);
+     180           20 :                     dump(i->second, false, ensure_ascii, indent_step, current_indent);
+     181              : 
+     182           20 :                     o->write_character('}');
+     183              :                 }
+     184              : 
+     185           20 :                 return;
+     186              :             }
+     187              : 
+     188            0 :             case value_t::array:
+     189              :             {
+     190            0 :                 if (val.m_data.m_value.array->empty())
+     191              :                 {
+     192            0 :                     o->write_characters("[]", 2);
+     193            0 :                     return;
+     194              :                 }
+     195              : 
+     196            0 :                 if (pretty_print)
+     197              :                 {
+     198            0 :                     o->write_characters("[\n", 2);
+     199              : 
+     200              :                     // variable to hold indentation for recursive calls
+     201            0 :                     const auto new_indent = current_indent + indent_step;
+     202            0 :                     if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent))
+     203              :                     {
+     204            0 :                         indent_string.resize(indent_string.size() * 2, ' ');
+     205              :                     }
+     206              : 
+     207              :                     // first n-1 elements
+     208            0 :                     for (auto i = val.m_data.m_value.array->cbegin();
+     209            0 :                             i != val.m_data.m_value.array->cend() - 1; ++i)
+     210              :                     {
+     211            0 :                         o->write_characters(indent_string.c_str(), new_indent);
+     212            0 :                         dump(*i, true, ensure_ascii, indent_step, new_indent);
+     213            0 :                         o->write_characters(",\n", 2);
+     214              :                     }
+     215              : 
+     216              :                     // last element
+     217            0 :                     JSON_ASSERT(!val.m_data.m_value.array->empty());
+     218            0 :                     o->write_characters(indent_string.c_str(), new_indent);
+     219            0 :                     dump(val.m_data.m_value.array->back(), true, ensure_ascii, indent_step, new_indent);
+     220              : 
+     221            0 :                     o->write_character('\n');
+     222            0 :                     o->write_characters(indent_string.c_str(), current_indent);
+     223            0 :                     o->write_character(']');
+     224              :                 }
+     225              :                 else
+     226              :                 {
+     227            0 :                     o->write_character('[');
+     228              : 
+     229              :                     // first n-1 elements
+     230            0 :                     for (auto i = val.m_data.m_value.array->cbegin();
+     231            0 :                             i != val.m_data.m_value.array->cend() - 1; ++i)
+     232              :                     {
+     233            0 :                         dump(*i, false, ensure_ascii, indent_step, current_indent);
+     234            0 :                         o->write_character(',');
+     235              :                     }
+     236              : 
+     237              :                     // last element
+     238            0 :                     JSON_ASSERT(!val.m_data.m_value.array->empty());
+     239            0 :                     dump(val.m_data.m_value.array->back(), false, ensure_ascii, indent_step, current_indent);
+     240              : 
+     241            0 :                     o->write_character(']');
+     242              :                 }
+     243              : 
+     244            0 :                 return;
+     245              :             }
+     246              : 
+     247           16 :             case value_t::string:
+     248              :             {
+     249           16 :                 o->write_character('\"');
+     250           16 :                 dump_escaped(*val.m_data.m_value.string, ensure_ascii);
+     251           16 :                 o->write_character('\"');
+     252           16 :                 return;
+     253              :             }
+     254              : 
+     255            0 :             case value_t::binary:
+     256              :             {
+     257            0 :                 if (pretty_print)
+     258              :                 {
+     259            0 :                     o->write_characters("{\n", 2);
+     260              : 
+     261              :                     // variable to hold indentation for recursive calls
+     262            0 :                     const auto new_indent = current_indent + indent_step;
+     263            0 :                     if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent))
+     264              :                     {
+     265            0 :                         indent_string.resize(indent_string.size() * 2, ' ');
+     266              :                     }
+     267              : 
+     268            0 :                     o->write_characters(indent_string.c_str(), new_indent);
+     269              : 
+     270            0 :                     o->write_characters("\"bytes\": [", 10);
+     271              : 
+     272            0 :                     if (!val.m_data.m_value.binary->empty())
+     273              :                     {
+     274            0 :                         for (auto i = val.m_data.m_value.binary->cbegin();
+     275            0 :                                 i != val.m_data.m_value.binary->cend() - 1; ++i)
+     276              :                         {
+     277            0 :                             dump_integer(*i);
+     278            0 :                             o->write_characters(", ", 2);
+     279              :                         }
+     280            0 :                         dump_integer(val.m_data.m_value.binary->back());
+     281              :                     }
+     282              : 
+     283            0 :                     o->write_characters("],\n", 3);
+     284            0 :                     o->write_characters(indent_string.c_str(), new_indent);
+     285              : 
+     286            0 :                     o->write_characters("\"subtype\": ", 11);
+     287            0 :                     if (val.m_data.m_value.binary->has_subtype())
+     288              :                     {
+     289            0 :                         dump_integer(val.m_data.m_value.binary->subtype());
+     290              :                     }
+     291              :                     else
+     292              :                     {
+     293            0 :                         o->write_characters("null", 4);
+     294              :                     }
+     295            0 :                     o->write_character('\n');
+     296            0 :                     o->write_characters(indent_string.c_str(), current_indent);
+     297            0 :                     o->write_character('}');
+     298              :                 }
+     299              :                 else
+     300              :                 {
+     301            0 :                     o->write_characters("{\"bytes\":[", 10);
+     302              : 
+     303            0 :                     if (!val.m_data.m_value.binary->empty())
+     304              :                     {
+     305            0 :                         for (auto i = val.m_data.m_value.binary->cbegin();
+     306            0 :                                 i != val.m_data.m_value.binary->cend() - 1; ++i)
+     307              :                         {
+     308            0 :                             dump_integer(*i);
+     309            0 :                             o->write_character(',');
+     310              :                         }
+     311            0 :                         dump_integer(val.m_data.m_value.binary->back());
+     312              :                     }
+     313              : 
+     314            0 :                     o->write_characters("],\"subtype\":", 12);
+     315            0 :                     if (val.m_data.m_value.binary->has_subtype())
+     316              :                     {
+     317            0 :                         dump_integer(val.m_data.m_value.binary->subtype());
+     318            0 :                         o->write_character('}');
+     319              :                     }
+     320              :                     else
+     321              :                     {
+     322            0 :                         o->write_characters("null}", 5);
+     323              :                     }
+     324              :                 }
+     325            0 :                 return;
+     326              :             }
+     327              : 
+     328            0 :             case value_t::boolean:
+     329              :             {
+     330            0 :                 if (val.m_data.m_value.boolean)
+     331              :                 {
+     332            0 :                     o->write_characters("true", 4);
+     333              :                 }
+     334              :                 else
+     335              :                 {
+     336            0 :                     o->write_characters("false", 5);
+     337              :                 }
+     338            0 :                 return;
+     339              :             }
+     340              : 
+     341            4 :             case value_t::number_integer:
+     342              :             {
+     343            4 :                 dump_integer(val.m_data.m_value.number_integer);
+     344            4 :                 return;
+     345              :             }
+     346              : 
+     347            0 :             case value_t::number_unsigned:
+     348              :             {
+     349            0 :                 dump_integer(val.m_data.m_value.number_unsigned);
+     350            0 :                 return;
+     351              :             }
+     352              : 
+     353            8 :             case value_t::number_float:
+     354              :             {
+     355            8 :                 dump_float(val.m_data.m_value.number_float);
+     356            8 :                 return;
+     357              :             }
+     358              : 
+     359            0 :             case value_t::discarded:
+     360              :             {
+     361            0 :                 o->write_characters("<discarded>", 11);
+     362            0 :                 return;
+     363              :             }
+     364              : 
+     365            0 :             case value_t::null:
+     366              :             {
+     367            0 :                 o->write_characters("null", 4);
+     368            0 :                 return;
+     369              :             }
+     370              : 
+     371              :             default:            // LCOV_EXCL_LINE
+     372              :                 JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
+     373              :         }
+     374              :     }
+     375              : 
+     376              :   JSON_PRIVATE_UNLESS_TESTED:
+     377              :     /*!
+     378              :     @brief dump escaped string
+     379              : 
+     380              :     Escape a string by replacing certain special characters by a sequence of an
+     381              :     escape character (backslash) and another character and other control
+     382              :     characters by a sequence of "\u" followed by a four-digit hex
+     383              :     representation. The escaped string is written to output stream @a o.
+     384              : 
+     385              :     @param[in] s  the string to escape
+     386              :     @param[in] ensure_ascii  whether to escape non-ASCII characters with
+     387              :                              \uXXXX sequences
+     388              : 
+     389              :     @complexity Linear in the length of string @a s.
+     390              :     */
+     391           44 :     void dump_escaped(const string_t& s, const bool ensure_ascii)
+     392              :     {
+     393           44 :         std::uint32_t codepoint{};
+     394           44 :         std::uint8_t state = UTF8_ACCEPT;
+     395           44 :         std::size_t bytes = 0;  // number of bytes written to string_buffer
+     396              : 
+     397              :         // number of bytes written at the point of the last valid byte
+     398           44 :         std::size_t bytes_after_last_accept = 0;
+     399           44 :         std::size_t undumped_chars = 0;
+     400              : 
+     401          404 :         for (std::size_t i = 0; i < s.size(); ++i)
+     402              :         {
+     403          360 :             const auto byte = static_cast<std::uint8_t>(s[i]);
+     404              : 
+     405          360 :             switch (decode(state, codepoint, byte))
+     406              :             {
+     407          360 :                 case UTF8_ACCEPT:  // decode found a new code point
+     408              :                 {
+     409          360 :                     switch (codepoint)
+     410              :                     {
+     411            0 :                         case 0x08: // backspace
+     412              :                         {
+     413            0 :                             string_buffer[bytes++] = '\\';
+     414            0 :                             string_buffer[bytes++] = 'b';
+     415            0 :                             break;
+     416              :                         }
+     417              : 
+     418            0 :                         case 0x09: // horizontal tab
+     419              :                         {
+     420            0 :                             string_buffer[bytes++] = '\\';
+     421            0 :                             string_buffer[bytes++] = 't';
+     422            0 :                             break;
+     423              :                         }
+     424              : 
+     425            0 :                         case 0x0A: // newline
+     426              :                         {
+     427            0 :                             string_buffer[bytes++] = '\\';
+     428            0 :                             string_buffer[bytes++] = 'n';
+     429            0 :                             break;
+     430              :                         }
+     431              : 
+     432            0 :                         case 0x0C: // formfeed
+     433              :                         {
+     434            0 :                             string_buffer[bytes++] = '\\';
+     435            0 :                             string_buffer[bytes++] = 'f';
+     436            0 :                             break;
+     437              :                         }
+     438              : 
+     439            0 :                         case 0x0D: // carriage return
+     440              :                         {
+     441            0 :                             string_buffer[bytes++] = '\\';
+     442            0 :                             string_buffer[bytes++] = 'r';
+     443            0 :                             break;
+     444              :                         }
+     445              : 
+     446            0 :                         case 0x22: // quotation mark
+     447              :                         {
+     448            0 :                             string_buffer[bytes++] = '\\';
+     449            0 :                             string_buffer[bytes++] = '\"';
+     450            0 :                             break;
+     451              :                         }
+     452              : 
+     453            0 :                         case 0x5C: // reverse solidus
+     454              :                         {
+     455            0 :                             string_buffer[bytes++] = '\\';
+     456            0 :                             string_buffer[bytes++] = '\\';
+     457            0 :                             break;
+     458              :                         }
+     459              : 
+     460          360 :                         default:
+     461              :                         {
+     462              :                             // escape control characters (0x00..0x1F) or, if
+     463              :                             // ensure_ascii parameter is used, non-ASCII characters
+     464          360 :                             if ((codepoint <= 0x1F) || (ensure_ascii && (codepoint >= 0x7F)))
+     465              :                             {
+     466            0 :                                 if (codepoint <= 0xFFFF)
+     467              :                                 {
+     468              :                                     // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
+     469            0 :                                     static_cast<void>((std::snprintf)(string_buffer.data() + bytes, 7, "\\u%04x",
+     470              :                                                                       static_cast<std::uint16_t>(codepoint)));
+     471            0 :                                     bytes += 6;
+     472              :                                 }
+     473              :                                 else
+     474              :                                 {
+     475              :                                     // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
+     476            0 :                                     static_cast<void>((std::snprintf)(string_buffer.data() + bytes, 13, "\\u%04x\\u%04x",
+     477            0 :                                                                       static_cast<std::uint16_t>(0xD7C0u + (codepoint >> 10u)),
+     478            0 :                                                                       static_cast<std::uint16_t>(0xDC00u + (codepoint & 0x3FFu))));
+     479            0 :                                     bytes += 12;
+     480              :                                 }
+     481              :                             }
+     482              :                             else
+     483              :                             {
+     484              :                                 // copy byte to buffer (all previous bytes
+     485              :                                 // been copied have in default case above)
+     486          360 :                                 string_buffer[bytes++] = s[i];
+     487              :                             }
+     488          360 :                             break;
+     489              :                         }
+     490              :                     }
+     491              : 
+     492              :                     // write buffer and reset index; there must be 13 bytes
+     493              :                     // left, as this is the maximal number of bytes to be
+     494              :                     // written ("\uxxxx\uxxxx\0") for one code point
+     495          720 :                     if (string_buffer.size() - bytes < 13)
+     496              :                     {
+     497            0 :                         o->write_characters(string_buffer.data(), bytes);
+     498            0 :                         bytes = 0;
+     499              :                     }
+     500              : 
+     501              :                     // remember the byte position of this accept
+     502          360 :                     bytes_after_last_accept = bytes;
+     503          360 :                     undumped_chars = 0;
+     504          360 :                     break;
+     505              :                 }
+     506              : 
+     507            0 :                 case UTF8_REJECT:  // decode found invalid UTF-8 byte
+     508              :                 {
+     509            0 :                     switch (error_handler)
+     510              :                     {
+     511            0 :                         case error_handler_t::strict:
+     512              :                         {
+     513            0 :                             JSON_THROW(type_error::create(316, concat("invalid UTF-8 byte at index ", std::to_string(i), ": 0x", hex_bytes(byte | 0)), nullptr));
+     514              :                         }
+     515              : 
+     516            0 :                         case error_handler_t::ignore:
+     517              :                         case error_handler_t::replace:
+     518              :                         {
+     519              :                             // in case we saw this character the first time, we
+     520              :                             // would like to read it again, because the byte
+     521              :                             // may be OK for itself, but just not OK for the
+     522              :                             // previous sequence
+     523            0 :                             if (undumped_chars > 0)
+     524              :                             {
+     525            0 :                                 --i;
+     526              :                             }
+     527              : 
+     528              :                             // reset length buffer to the last accepted index;
+     529              :                             // thus removing/ignoring the invalid characters
+     530            0 :                             bytes = bytes_after_last_accept;
+     531              : 
+     532            0 :                             if (error_handler == error_handler_t::replace)
+     533              :                             {
+     534              :                                 // add a replacement character
+     535            0 :                                 if (ensure_ascii)
+     536              :                                 {
+     537            0 :                                     string_buffer[bytes++] = '\\';
+     538            0 :                                     string_buffer[bytes++] = 'u';
+     539            0 :                                     string_buffer[bytes++] = 'f';
+     540            0 :                                     string_buffer[bytes++] = 'f';
+     541            0 :                                     string_buffer[bytes++] = 'f';
+     542            0 :                                     string_buffer[bytes++] = 'd';
+     543              :                                 }
+     544              :                                 else
+     545              :                                 {
+     546            0 :                                     string_buffer[bytes++] = detail::binary_writer<BasicJsonType, char>::to_char_type('\xEF');
+     547            0 :                                     string_buffer[bytes++] = detail::binary_writer<BasicJsonType, char>::to_char_type('\xBF');
+     548            0 :                                     string_buffer[bytes++] = detail::binary_writer<BasicJsonType, char>::to_char_type('\xBD');
+     549              :                                 }
+     550              : 
+     551              :                                 // write buffer and reset index; there must be 13 bytes
+     552              :                                 // left, as this is the maximal number of bytes to be
+     553              :                                 // written ("\uxxxx\uxxxx\0") for one code point
+     554            0 :                                 if (string_buffer.size() - bytes < 13)
+     555              :                                 {
+     556            0 :                                     o->write_characters(string_buffer.data(), bytes);
+     557            0 :                                     bytes = 0;
+     558              :                                 }
+     559              : 
+     560            0 :                                 bytes_after_last_accept = bytes;
+     561              :                             }
+     562              : 
+     563            0 :                             undumped_chars = 0;
+     564              : 
+     565              :                             // continue processing the string
+     566            0 :                             state = UTF8_ACCEPT;
+     567            0 :                             break;
+     568              :                         }
+     569              : 
+     570              :                         default:            // LCOV_EXCL_LINE
+     571              :                             JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
+     572              :                     }
+     573            0 :                     break;
+     574              :                 }
+     575              : 
+     576            0 :                 default:  // decode found yet incomplete multi-byte code point
+     577              :                 {
+     578            0 :                     if (!ensure_ascii)
+     579              :                     {
+     580              :                         // code point will not be escaped - copy byte to buffer
+     581            0 :                         string_buffer[bytes++] = s[i];
+     582              :                     }
+     583            0 :                     ++undumped_chars;
+     584            0 :                     break;
+     585              :                 }
+     586              :             }
+     587              :         }
+     588              : 
+     589              :         // we finished processing the string
+     590           44 :         if (JSON_HEDLEY_LIKELY(state == UTF8_ACCEPT))
+     591              :         {
+     592              :             // write buffer
+     593           44 :             if (bytes > 0)
+     594              :             {
+     595           88 :                 o->write_characters(string_buffer.data(), bytes);
+     596              :             }
+     597              :         }
+     598              :         else
+     599              :         {
+     600              :             // we finish reading, but do not accept: string was incomplete
+     601            0 :             switch (error_handler)
+     602              :             {
+     603            0 :                 case error_handler_t::strict:
+     604              :                 {
+     605            0 :                     JSON_THROW(type_error::create(316, concat("incomplete UTF-8 string; last byte: 0x", hex_bytes(static_cast<std::uint8_t>(s.back() | 0))), nullptr));
+     606              :                 }
+     607              : 
+     608            0 :                 case error_handler_t::ignore:
+     609              :                 {
+     610              :                     // write all accepted bytes
+     611            0 :                     o->write_characters(string_buffer.data(), bytes_after_last_accept);
+     612            0 :                     break;
+     613              :                 }
+     614              : 
+     615            0 :                 case error_handler_t::replace:
+     616              :                 {
+     617              :                     // write all accepted bytes
+     618            0 :                     o->write_characters(string_buffer.data(), bytes_after_last_accept);
+     619              :                     // add a replacement character
+     620            0 :                     if (ensure_ascii)
+     621              :                     {
+     622            0 :                         o->write_characters("\\ufffd", 6);
+     623              :                     }
+     624              :                     else
+     625              :                     {
+     626            0 :                         o->write_characters("\xEF\xBF\xBD", 3);
+     627              :                     }
+     628            0 :                     break;
+     629              :                 }
+     630              : 
+     631              :                 default:            // LCOV_EXCL_LINE
+     632              :                     JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
+     633              :             }
+     634              :         }
+     635           44 :     }
+     636              : 
+     637              :   private:
+     638              :     /*!
+     639              :     @brief count digits
+     640              : 
+     641              :     Count the number of decimal (base 10) digits for an input unsigned integer.
+     642              : 
+     643              :     @param[in] x  unsigned integer number to count its digits
+     644              :     @return    number of decimal digits
+     645              :     */
+     646            2 :     inline unsigned int count_digits(number_unsigned_t x) noexcept
+     647              :     {
+     648            2 :         unsigned int n_digits = 1;
+     649              :         for (;;)
+     650              :         {
+     651            2 :             if (x < 10)
+     652              :             {
+     653            2 :                 return n_digits;
+     654              :             }
+     655            0 :             if (x < 100)
+     656              :             {
+     657            0 :                 return n_digits + 1;
+     658              :             }
+     659            0 :             if (x < 1000)
+     660              :             {
+     661            0 :                 return n_digits + 2;
+     662              :             }
+     663            0 :             if (x < 10000)
+     664              :             {
+     665            0 :                 return n_digits + 3;
+     666              :             }
+     667            0 :             x = x / 10000u;
+     668            0 :             n_digits += 4;
+     669              :         }
+     670              :     }
+     671              : 
+     672              :     /*!
+     673              :      * @brief convert a byte to a uppercase hex representation
+     674              :      * @param[in] byte byte to represent
+     675              :      * @return representation ("00".."FF")
+     676              :      */
+     677            0 :     static std::string hex_bytes(std::uint8_t byte)
+     678              :     {
+     679            0 :         std::string result = "FF";
+     680            0 :         constexpr const char* nibble_to_hex = "0123456789ABCDEF";
+     681            0 :         result[0] = nibble_to_hex[byte / 16];
+     682            0 :         result[1] = nibble_to_hex[byte % 16];
+     683            0 :         return result;
+     684            0 :     }
+     685              : 
+     686              :     // templates to avoid warnings about useless casts
+     687              :     template <typename NumberType, enable_if_t<std::is_signed<NumberType>::value, int> = 0>
+     688            2 :     bool is_negative_number(NumberType x)
+     689              :     {
+     690            2 :         return x < 0;
+     691              :     }
+     692              : 
+     693              :     template < typename NumberType, enable_if_t <std::is_unsigned<NumberType>::value, int > = 0 >
+     694            0 :     bool is_negative_number(NumberType /*unused*/)
+     695              :     {
+     696            0 :         return false;
+     697              :     }
+     698              : 
+     699              :     /*!
+     700              :     @brief dump an integer
+     701              : 
+     702              :     Dump a given integer to output stream @a o. Works internally with
+     703              :     @a number_buffer.
+     704              : 
+     705              :     @param[in] x  integer number (signed or unsigned) to dump
+     706              :     @tparam NumberType either @a number_integer_t or @a number_unsigned_t
+     707              :     */
+     708              :     template < typename NumberType, detail::enable_if_t <
+     709              :                    std::is_integral<NumberType>::value ||
+     710              :                    std::is_same<NumberType, number_unsigned_t>::value ||
+     711              :                    std::is_same<NumberType, number_integer_t>::value ||
+     712              :                    std::is_same<NumberType, binary_char_t>::value,
+     713              :                    int > = 0 >
+     714            4 :     void dump_integer(NumberType x)
+     715              :     {
+     716              :         static constexpr std::array<std::array<char, 2>, 100> digits_to_99
+     717              :         {
+     718              :             {
+     719              :                 {{'0', '0'}}, {{'0', '1'}}, {{'0', '2'}}, {{'0', '3'}}, {{'0', '4'}}, {{'0', '5'}}, {{'0', '6'}}, {{'0', '7'}}, {{'0', '8'}}, {{'0', '9'}},
+     720              :                 {{'1', '0'}}, {{'1', '1'}}, {{'1', '2'}}, {{'1', '3'}}, {{'1', '4'}}, {{'1', '5'}}, {{'1', '6'}}, {{'1', '7'}}, {{'1', '8'}}, {{'1', '9'}},
+     721              :                 {{'2', '0'}}, {{'2', '1'}}, {{'2', '2'}}, {{'2', '3'}}, {{'2', '4'}}, {{'2', '5'}}, {{'2', '6'}}, {{'2', '7'}}, {{'2', '8'}}, {{'2', '9'}},
+     722              :                 {{'3', '0'}}, {{'3', '1'}}, {{'3', '2'}}, {{'3', '3'}}, {{'3', '4'}}, {{'3', '5'}}, {{'3', '6'}}, {{'3', '7'}}, {{'3', '8'}}, {{'3', '9'}},
+     723              :                 {{'4', '0'}}, {{'4', '1'}}, {{'4', '2'}}, {{'4', '3'}}, {{'4', '4'}}, {{'4', '5'}}, {{'4', '6'}}, {{'4', '7'}}, {{'4', '8'}}, {{'4', '9'}},
+     724              :                 {{'5', '0'}}, {{'5', '1'}}, {{'5', '2'}}, {{'5', '3'}}, {{'5', '4'}}, {{'5', '5'}}, {{'5', '6'}}, {{'5', '7'}}, {{'5', '8'}}, {{'5', '9'}},
+     725              :                 {{'6', '0'}}, {{'6', '1'}}, {{'6', '2'}}, {{'6', '3'}}, {{'6', '4'}}, {{'6', '5'}}, {{'6', '6'}}, {{'6', '7'}}, {{'6', '8'}}, {{'6', '9'}},
+     726              :                 {{'7', '0'}}, {{'7', '1'}}, {{'7', '2'}}, {{'7', '3'}}, {{'7', '4'}}, {{'7', '5'}}, {{'7', '6'}}, {{'7', '7'}}, {{'7', '8'}}, {{'7', '9'}},
+     727              :                 {{'8', '0'}}, {{'8', '1'}}, {{'8', '2'}}, {{'8', '3'}}, {{'8', '4'}}, {{'8', '5'}}, {{'8', '6'}}, {{'8', '7'}}, {{'8', '8'}}, {{'8', '9'}},
+     728              :                 {{'9', '0'}}, {{'9', '1'}}, {{'9', '2'}}, {{'9', '3'}}, {{'9', '4'}}, {{'9', '5'}}, {{'9', '6'}}, {{'9', '7'}}, {{'9', '8'}}, {{'9', '9'}},
+     729              :             }
+     730              :         };
+     731              : 
+     732              :         // special case for "0"
+     733            4 :         if (x == 0)
+     734              :         {
+     735            2 :             o->write_character('0');
+     736            2 :             return;
+     737              :         }
+     738              : 
+     739              :         // use a pointer to fill the buffer
+     740            2 :         auto buffer_ptr = number_buffer.begin(); // NOLINT(llvm-qualified-auto,readability-qualified-auto,cppcoreguidelines-pro-type-vararg,hicpp-vararg)
+     741              : 
+     742              :         number_unsigned_t abs_value;
+     743              : 
+     744            2 :         unsigned int n_chars{};
+     745              : 
+     746            2 :         if (is_negative_number(x))
+     747              :         {
+     748            0 :             *buffer_ptr = '-';
+     749            0 :             abs_value = remove_sign(static_cast<number_integer_t>(x));
+     750              : 
+     751              :             // account one more byte for the minus sign
+     752            0 :             n_chars = 1 + count_digits(abs_value);
+     753              :         }
+     754              :         else
+     755              :         {
+     756            2 :             abs_value = static_cast<number_unsigned_t>(x);
+     757            2 :             n_chars = count_digits(abs_value);
+     758              :         }
+     759              : 
+     760              :         // spare 1 byte for '\0'
+     761            4 :         JSON_ASSERT(n_chars < number_buffer.size() - 1);
+     762              : 
+     763              :         // jump to the end to generate the string from backward,
+     764              :         // so we later avoid reversing the result
+     765            2 :         buffer_ptr += n_chars;
+     766              : 
+     767              :         // Fast int2ascii implementation inspired by "Fastware" talk by Andrei Alexandrescu
+     768              :         // See: https://www.youtube.com/watch?v=o4-CwDo2zpg
+     769            2 :         while (abs_value >= 100)
+     770              :         {
+     771            0 :             const auto digits_index = static_cast<unsigned>((abs_value % 100));
+     772            0 :             abs_value /= 100;
+     773            0 :             *(--buffer_ptr) = digits_to_99[digits_index][1];
+     774            0 :             *(--buffer_ptr) = digits_to_99[digits_index][0];
+     775              :         }
+     776              : 
+     777            2 :         if (abs_value >= 10)
+     778              :         {
+     779            0 :             const auto digits_index = static_cast<unsigned>(abs_value);
+     780            0 :             *(--buffer_ptr) = digits_to_99[digits_index][1];
+     781            0 :             *(--buffer_ptr) = digits_to_99[digits_index][0];
+     782              :         }
+     783              :         else
+     784              :         {
+     785            2 :             *(--buffer_ptr) = static_cast<char>('0' + abs_value);
+     786              :         }
+     787              : 
+     788            4 :         o->write_characters(number_buffer.data(), n_chars);
+     789              :     }
+     790              : 
+     791              :     /*!
+     792              :     @brief dump a floating-point number
+     793              : 
+     794              :     Dump a given floating-point number to output stream @a o. Works internally
+     795              :     with @a number_buffer.
+     796              : 
+     797              :     @param[in] x  floating-point number to dump
+     798              :     */
+     799            8 :     void dump_float(number_float_t x)
+     800              :     {
+     801              :         // NaN / inf
+     802            8 :         if (!std::isfinite(x))
+     803              :         {
+     804            0 :             o->write_characters("null", 4);
+     805            0 :             return;
+     806              :         }
+     807              : 
+     808              :         // If number_float_t is an IEEE-754 single or double precision number,
+     809              :         // use the Grisu2 algorithm to produce short numbers which are
+     810              :         // guaranteed to round-trip, using strtof and strtod, resp.
+     811              :         //
+     812              :         // NB: The test below works if <long double> == <double>.
+     813              :         static constexpr bool is_ieee_single_or_double
+     814              :             = (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 24 && std::numeric_limits<number_float_t>::max_exponent == 128) ||
+     815              :               (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 53 && std::numeric_limits<number_float_t>::max_exponent == 1024);
+     816              : 
+     817            8 :         dump_float(x, std::integral_constant<bool, is_ieee_single_or_double>());
+     818              :     }
+     819              : 
+     820            8 :     void dump_float(number_float_t x, std::true_type /*is_ieee_single_or_double*/)
+     821              :     {
+     822            8 :         auto* begin = number_buffer.data();
+     823           16 :         auto* end = ::nlohmann::detail::to_chars(begin, begin + number_buffer.size(), x);
+     824              : 
+     825            8 :         o->write_characters(begin, static_cast<size_t>(end - begin));
+     826            8 :     }
+     827              : 
+     828              :     void dump_float(number_float_t x, std::false_type /*is_ieee_single_or_double*/)
+     829              :     {
+     830              :         // get number of digits for a float -> text -> float round-trip
+     831              :         static constexpr auto d = std::numeric_limits<number_float_t>::max_digits10;
+     832              : 
+     833              :         // the actual conversion
+     834              :         // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
+     835              :         std::ptrdiff_t len = (std::snprintf)(number_buffer.data(), number_buffer.size(), "%.*g", d, x);
+     836              : 
+     837              :         // negative value indicates an error
+     838              :         JSON_ASSERT(len > 0);
+     839              :         // check if buffer was large enough
+     840              :         JSON_ASSERT(static_cast<std::size_t>(len) < number_buffer.size());
+     841              : 
+     842              :         // erase thousands separator
+     843              :         if (thousands_sep != '\0')
+     844              :         {
+     845              :             // NOLINTNEXTLINE(readability-qualified-auto,llvm-qualified-auto): std::remove returns an iterator, see https://github.com/nlohmann/json/issues/3081
+     846              :             const auto end = std::remove(number_buffer.begin(), number_buffer.begin() + len, thousands_sep);
+     847              :             std::fill(end, number_buffer.end(), '\0');
+     848              :             JSON_ASSERT((end - number_buffer.begin()) <= len);
+     849              :             len = (end - number_buffer.begin());
+     850              :         }
+     851              : 
+     852              :         // convert decimal point to '.'
+     853              :         if (decimal_point != '\0' && decimal_point != '.')
+     854              :         {
+     855              :             // NOLINTNEXTLINE(readability-qualified-auto,llvm-qualified-auto): std::find returns an iterator, see https://github.com/nlohmann/json/issues/3081
+     856              :             const auto dec_pos = std::find(number_buffer.begin(), number_buffer.end(), decimal_point);
+     857              :             if (dec_pos != number_buffer.end())
+     858              :             {
+     859              :                 *dec_pos = '.';
+     860              :             }
+     861              :         }
+     862              : 
+     863              :         o->write_characters(number_buffer.data(), static_cast<std::size_t>(len));
+     864              : 
+     865              :         // determine if we need to append ".0"
+     866              :         const bool value_is_int_like =
+     867              :             std::none_of(number_buffer.begin(), number_buffer.begin() + len + 1,
+     868              :                          [](char c)
+     869              :         {
+     870              :             return c == '.' || c == 'e';
+     871              :         });
+     872              : 
+     873              :         if (value_is_int_like)
+     874              :         {
+     875              :             o->write_characters(".0", 2);
+     876              :         }
+     877              :     }
+     878              : 
+     879              :     /*!
+     880              :     @brief check whether a string is UTF-8 encoded
+     881              : 
+     882              :     The function checks each byte of a string whether it is UTF-8 encoded. The
+     883              :     result of the check is stored in the @a state parameter. The function must
+     884              :     be called initially with state 0 (accept). State 1 means the string must
+     885              :     be rejected, because the current byte is not allowed. If the string is
+     886              :     completely processed, but the state is non-zero, the string ended
+     887              :     prematurely; that is, the last byte indicated more bytes should have
+     888              :     followed.
+     889              : 
+     890              :     @param[in,out] state  the state of the decoding
+     891              :     @param[in,out] codep  codepoint (valid only if resulting state is UTF8_ACCEPT)
+     892              :     @param[in] byte       next byte to decode
+     893              :     @return               new state
+     894              : 
+     895              :     @note The function has been edited: a std::array is used.
+     896              : 
+     897              :     @copyright Copyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de>
+     898              :     @sa http://bjoern.hoehrmann.de/utf-8/decoder/dfa/
+     899              :     */
+     900          360 :     static std::uint8_t decode(std::uint8_t& state, std::uint32_t& codep, const std::uint8_t byte) noexcept
+     901              :     {
+     902              :         static const std::array<std::uint8_t, 400> utf8d =
+     903              :         {
+     904              :             {
+     905              :                 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 00..1F
+     906              :                 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20..3F
+     907              :                 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 40..5F
+     908              :                 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 60..7F
+     909              :                 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, // 80..9F
+     910              :                 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // A0..BF
+     911              :                 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // C0..DF
+     912              :                 0xA, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x3, // E0..EF
+     913              :                 0xB, 0x6, 0x6, 0x6, 0x5, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, // F0..FF
+     914              :                 0x0, 0x1, 0x2, 0x3, 0x5, 0x8, 0x7, 0x1, 0x1, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1, 0x1, // s0..s0
+     915              :                 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, // s1..s2
+     916              :                 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, // s3..s4
+     917              :                 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, // s5..s6
+     918              :                 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // s7..s8
+     919              :             }
+     920              :         };
+     921              : 
+     922          720 :         JSON_ASSERT(byte < utf8d.size());
+     923          360 :         const std::uint8_t type = utf8d[byte];
+     924              : 
+     925          720 :         codep = (state != UTF8_ACCEPT)
+     926          360 :                 ? (byte & 0x3fu) | (codep << 6u)
+     927          360 :                 : (0xFFu >> type) & (byte);
+     928              : 
+     929          360 :         const std::size_t index = 256u + static_cast<size_t>(state) * 16u + static_cast<size_t>(type);
+     930          360 :         JSON_ASSERT(index < utf8d.size());
+     931          360 :         state = utf8d[index];
+     932          360 :         return state;
+     933              :     }
+     934              : 
+     935              :     /*
+     936              :      * Overload to make the compiler happy while it is instantiating
+     937              :      * dump_integer for number_unsigned_t.
+     938              :      * Must never be called.
+     939              :      */
+     940              :     number_unsigned_t remove_sign(number_unsigned_t x)
+     941              :     {
+     942              :         JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
+     943              :         return x; // LCOV_EXCL_LINE
+     944              :     }
+     945              : 
+     946              :     /*
+     947              :      * Helper function for dump_integer
+     948              :      *
+     949              :      * This function takes a negative signed integer and returns its absolute
+     950              :      * value as unsigned integer. The plus/minus shuffling is necessary as we can
+     951              :      * not directly remove the sign of an arbitrary signed integer as the
+     952              :      * absolute values of INT_MIN and INT_MAX are usually not the same. See
+     953              :      * #1708 for details.
+     954              :      */
+     955            0 :     inline number_unsigned_t remove_sign(number_integer_t x) noexcept
+     956              :     {
+     957            0 :         JSON_ASSERT(x < 0 && x < (std::numeric_limits<number_integer_t>::max)()); // NOLINT(misc-redundant-expression)
+     958            0 :         return static_cast<number_unsigned_t>(-(x + 1)) + 1;
+     959              :     }
+     960              : 
+     961              :   private:
+     962              :     /// the output of the serializer
+     963              :     output_adapter_t<char> o = nullptr;
+     964              : 
+     965              :     /// a (hopefully) large enough character buffer
+     966              :     std::array<char, 64> number_buffer{{}};
+     967              : 
+     968              :     /// the locale
+     969              :     const std::lconv* loc = nullptr;
+     970              :     /// the locale's thousand separator character
+     971              :     const char thousands_sep = '\0';
+     972              :     /// the locale's decimal point character
+     973              :     const char decimal_point = '\0';
+     974              : 
+     975              :     /// string buffer
+     976              :     std::array<char, 512> string_buffer{{}};
+     977              : 
+     978              :     /// the indentation character
+     979              :     const char indent_char;
+     980              :     /// the indentation string
+     981              :     string_t indent_string;
+     982              : 
+     983              :     /// error_handler how to react on decoding errors
+     984              :     const error_handler_t error_handler;
+     985              : };
+     986              : 
+     987              : }  // namespace detail
+     988              : NLOHMANN_JSON_NAMESPACE_END
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/string_concat.hpp.func-c.html b/html/BayesNet/lib/json/include/nlohmann/detail/string_concat.hpp.func-c.html new file mode 100644 index 0000000..fc3ccc4 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/string_concat.hpp.func-c.html @@ -0,0 +1,397 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/string_concat.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail - string_concat.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %240
Test Date:2024-04-30 13:17:26Functions:0.0 %420
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvRT_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKcJELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKcJELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA17_KcJRKS8_cS8_RA3_S9_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA25_KcJPS9_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA29_KcJPS9_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA29_KcJS8_RA5_S9_S8_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA30_KcJPS9_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA39_KcJS8_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcJELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA51_KcJPS9_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA52_KcJPS9_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_KcJS8_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS8_JELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS8_JcS8_RA3_KcELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_JELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_JRA3_KcELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_JRA5_KcS8_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_JRKS8_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_JS8_RKS8_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcJS8_RA3_KcELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthEv0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthIJEEEmPKcDpRKT_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthIJEEEmPKcDpRKT_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEA5_cS8_EEEmPKcDpRKT_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEmPKcDpRKT_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcS8_A3_cEEEmPKcDpRKT_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthIJPKcEEEmS4_DpRKT_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEA3_cEEEmcDpRKT_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJEEEmRKT_DpRKT0_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJA3_cEEEmRKT_DpRKT0_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJA5_cS8_EEEmRKT_DpRKT0_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJEEEmRKT_DpRKT0_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJS8_EEEmRKT_DpRKT0_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJS8_S8_EEEmRKT_DpRKT0_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJcS8_A3_cEEEmRKT_DpRKT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRA39_KcS8_EEET_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRA17_KcRKS8_cS8_RA3_S9_EEET_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRA25_KcPS9_EEET_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRA29_KcPS9_EEET_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRA29_KcS8_RA5_S9_S8_EEET_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRA30_KcPS9_EEET_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRA39_KcS8_EEET_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRA51_KcPS9_EEET_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRA52_KcPS9_EEET_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJS8_S8_RKS8_EEET_DpOT0_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/string_concat.hpp.func.html b/html/BayesNet/lib/json/include/nlohmann/detail/string_concat.hpp.func.html new file mode 100644 index 0000000..7e98dd2 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/string_concat.hpp.func.html @@ -0,0 +1,397 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/string_concat.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail - string_concat.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %240
Test Date:2024-04-30 13:17:26Functions:0.0 %420
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvRT_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKcJELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKcJELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA17_KcJRKS8_cS8_RA3_S9_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA25_KcJPS9_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA29_KcJPS9_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA29_KcJS8_RA5_S9_S8_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA30_KcJPS9_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA39_KcJS8_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcJELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA51_KcJPS9_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA52_KcJPS9_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_KcJS8_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS8_JELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS8_JcS8_RA3_KcELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_JELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_JRA3_KcELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_JRA5_KcS8_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_JRKS8_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_JS8_RKS8_ELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail11concat_intoINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcJS8_RA3_KcELi0EEEvRT_OT0_DpOT1_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthEv0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthIJEEEmPKcDpRKT_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthIJEEEmPKcDpRKT_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEA5_cS8_EEEmPKcDpRKT_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEmPKcDpRKT_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcS8_A3_cEEEmPKcDpRKT_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthIJPKcEEEmS4_DpRKT_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEA3_cEEEmcDpRKT_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJEEEmRKT_DpRKT0_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJA3_cEEEmRKT_DpRKT0_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJA5_cS8_EEEmRKT_DpRKT0_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJEEEmRKT_DpRKT0_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJS8_EEEmRKT_DpRKT0_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJS8_S8_EEEmRKT_DpRKT0_0
_ZN8nlohmann16json_abi_v3_11_36detail13concat_lengthINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJcS8_A3_cEEEmRKT_DpRKT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRA39_KcS8_EEET_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRA17_KcRKS8_cS8_RA3_S9_EEET_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRA25_KcPS9_EEET_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRA29_KcPS9_EEET_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRA29_KcS8_RA5_S9_S8_EEET_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRA30_KcPS9_EEET_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRA39_KcS8_EEET_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRA51_KcPS9_EEET_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRA52_KcPS9_EEET_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_36detail6concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJS8_S8_RKS8_EEET_DpOT0_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/string_concat.hpp.gcov.html b/html/BayesNet/lib/json/include/nlohmann/detail/string_concat.hpp.gcov.html new file mode 100644 index 0000000..80ebc5d --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/string_concat.hpp.gcov.html @@ -0,0 +1,222 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/string_concat.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail - string_concat.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %240
Test Date:2024-04-30 13:17:26Functions:0.0 %420
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : //     __ _____ _____ _____
+       2              : //  __|  |   __|     |   | |  JSON for Modern C++
+       3              : // |  |  |__   |  |  | | | |  version 3.11.3
+       4              : // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
+       5              : //
+       6              : // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
+       7              : // SPDX-License-Identifier: MIT
+       8              : 
+       9              : #pragma once
+      10              : 
+      11              : #include <cstring> // strlen
+      12              : #include <string> // string
+      13              : #include <utility> // forward
+      14              : 
+      15              : #include <nlohmann/detail/meta/cpp_future.hpp>
+      16              : #include <nlohmann/detail/meta/detected.hpp>
+      17              : 
+      18              : NLOHMANN_JSON_NAMESPACE_BEGIN
+      19              : namespace detail
+      20              : {
+      21              : 
+      22            0 : inline std::size_t concat_length()
+      23              : {
+      24            0 :     return 0;
+      25              : }
+      26              : 
+      27              : template<typename... Args>
+      28              : inline std::size_t concat_length(const char* cstr, const Args& ... rest);
+      29              : 
+      30              : template<typename StringType, typename... Args>
+      31              : inline std::size_t concat_length(const StringType& str, const Args& ... rest);
+      32              : 
+      33              : template<typename... Args>
+      34            0 : inline std::size_t concat_length(const char /*c*/, const Args& ... rest)
+      35              : {
+      36            0 :     return 1 + concat_length(rest...);
+      37              : }
+      38              : 
+      39              : template<typename... Args>
+      40            0 : inline std::size_t concat_length(const char* cstr, const Args& ... rest)
+      41              : {
+      42              :     // cppcheck-suppress ignoredReturnValue
+      43            0 :     return ::strlen(cstr) + concat_length(rest...);
+      44              : }
+      45              : 
+      46              : template<typename StringType, typename... Args>
+      47            0 : inline std::size_t concat_length(const StringType& str, const Args& ... rest)
+      48              : {
+      49            0 :     return str.size() + concat_length(rest...);
+      50              : }
+      51              : 
+      52              : template<typename OutStringType>
+      53            0 : inline void concat_into(OutStringType& /*out*/)
+      54            0 : {}
+      55              : 
+      56              : template<typename StringType, typename Arg>
+      57              : using string_can_append = decltype(std::declval<StringType&>().append(std::declval < Arg && > ()));
+      58              : 
+      59              : template<typename StringType, typename Arg>
+      60              : using detect_string_can_append = is_detected<string_can_append, StringType, Arg>;
+      61              : 
+      62              : template<typename StringType, typename Arg>
+      63              : using string_can_append_op = decltype(std::declval<StringType&>() += std::declval < Arg && > ());
+      64              : 
+      65              : template<typename StringType, typename Arg>
+      66              : using detect_string_can_append_op = is_detected<string_can_append_op, StringType, Arg>;
+      67              : 
+      68              : template<typename StringType, typename Arg>
+      69              : using string_can_append_iter = decltype(std::declval<StringType&>().append(std::declval<const Arg&>().begin(), std::declval<const Arg&>().end()));
+      70              : 
+      71              : template<typename StringType, typename Arg>
+      72              : using detect_string_can_append_iter = is_detected<string_can_append_iter, StringType, Arg>;
+      73              : 
+      74              : template<typename StringType, typename Arg>
+      75              : using string_can_append_data = decltype(std::declval<StringType&>().append(std::declval<const Arg&>().data(), std::declval<const Arg&>().size()));
+      76              : 
+      77              : template<typename StringType, typename Arg>
+      78              : using detect_string_can_append_data = is_detected<string_can_append_data, StringType, Arg>;
+      79              : 
+      80              : template < typename OutStringType, typename Arg, typename... Args,
+      81              :            enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
+      82              :                          && detect_string_can_append_op<OutStringType, Arg>::value, int > = 0 >
+      83              : inline void concat_into(OutStringType& out, Arg && arg, Args && ... rest);
+      84              : 
+      85              : template < typename OutStringType, typename Arg, typename... Args,
+      86              :            enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
+      87              :                          && !detect_string_can_append_op<OutStringType, Arg>::value
+      88              :                          && detect_string_can_append_iter<OutStringType, Arg>::value, int > = 0 >
+      89              : inline void concat_into(OutStringType& out, const Arg& arg, Args && ... rest);
+      90              : 
+      91              : template < typename OutStringType, typename Arg, typename... Args,
+      92              :            enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
+      93              :                          && !detect_string_can_append_op<OutStringType, Arg>::value
+      94              :                          && !detect_string_can_append_iter<OutStringType, Arg>::value
+      95              :                          && detect_string_can_append_data<OutStringType, Arg>::value, int > = 0 >
+      96              : inline void concat_into(OutStringType& out, const Arg& arg, Args && ... rest);
+      97              : 
+      98              : template<typename OutStringType, typename Arg, typename... Args,
+      99              :          enable_if_t<detect_string_can_append<OutStringType, Arg>::value, int> = 0>
+     100            0 : inline void concat_into(OutStringType& out, Arg && arg, Args && ... rest)
+     101              : {
+     102            0 :     out.append(std::forward<Arg>(arg));
+     103            0 :     concat_into(out, std::forward<Args>(rest)...);
+     104            0 : }
+     105              : 
+     106              : template < typename OutStringType, typename Arg, typename... Args,
+     107              :            enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
+     108              :                          && detect_string_can_append_op<OutStringType, Arg>::value, int > >
+     109            0 : inline void concat_into(OutStringType& out, Arg&& arg, Args&& ... rest)
+     110              : {
+     111            0 :     out += std::forward<Arg>(arg);
+     112            0 :     concat_into(out, std::forward<Args>(rest)...);
+     113            0 : }
+     114              : 
+     115              : template < typename OutStringType, typename Arg, typename... Args,
+     116              :            enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
+     117              :                          && !detect_string_can_append_op<OutStringType, Arg>::value
+     118              :                          && detect_string_can_append_iter<OutStringType, Arg>::value, int > >
+     119              : inline void concat_into(OutStringType& out, const Arg& arg, Args&& ... rest)
+     120              : {
+     121              :     out.append(arg.begin(), arg.end());
+     122              :     concat_into(out, std::forward<Args>(rest)...);
+     123              : }
+     124              : 
+     125              : template < typename OutStringType, typename Arg, typename... Args,
+     126              :            enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
+     127              :                          && !detect_string_can_append_op<OutStringType, Arg>::value
+     128              :                          && !detect_string_can_append_iter<OutStringType, Arg>::value
+     129              :                          && detect_string_can_append_data<OutStringType, Arg>::value, int > >
+     130              : inline void concat_into(OutStringType& out, const Arg& arg, Args&& ... rest)
+     131              : {
+     132              :     out.append(arg.data(), arg.size());
+     133              :     concat_into(out, std::forward<Args>(rest)...);
+     134              : }
+     135              : 
+     136              : template<typename OutStringType = std::string, typename... Args>
+     137            0 : inline OutStringType concat(Args && ... args)
+     138              : {
+     139            0 :     OutStringType str;
+     140            0 :     str.reserve(concat_length(args...));
+     141            0 :     concat_into(str, std::forward<Args>(args)...);
+     142            0 :     return str;
+     143            0 : }
+     144              : 
+     145              : }  // namespace detail
+     146              : NLOHMANN_JSON_NAMESPACE_END
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/string_escape.hpp.func-c.html b/html/BayesNet/lib/json/include/nlohmann/detail/string_escape.hpp.func-c.html new file mode 100644 index 0000000..87240ef --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/string_escape.hpp.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/string_escape.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail - string_escape.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %110
Test Date:2024-04-30 13:17:26Functions:0.0 %20
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail17replace_substringINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvRT_RKS9_SC_0
_ZN8nlohmann16json_abi_v3_11_36detailL8unescapeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvRT_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/string_escape.hpp.func.html b/html/BayesNet/lib/json/include/nlohmann/detail/string_escape.hpp.func.html new file mode 100644 index 0000000..6b3fead --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/string_escape.hpp.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/string_escape.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail - string_escape.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %110
Test Date:2024-04-30 13:17:26Functions:0.0 %20
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_36detail17replace_substringINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvRT_RKS9_SC_0
_ZN8nlohmann16json_abi_v3_11_36detailL8unescapeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvRT_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/detail/string_escape.hpp.gcov.html b/html/BayesNet/lib/json/include/nlohmann/detail/string_escape.hpp.gcov.html new file mode 100644 index 0000000..7f20466 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/detail/string_escape.hpp.gcov.html @@ -0,0 +1,148 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/detail/string_escape.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann/detail - string_escape.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %110
Test Date:2024-04-30 13:17:26Functions:0.0 %20
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : //     __ _____ _____ _____
+       2              : //  __|  |   __|     |   | |  JSON for Modern C++
+       3              : // |  |  |__   |  |  | | | |  version 3.11.3
+       4              : // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
+       5              : //
+       6              : // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
+       7              : // SPDX-License-Identifier: MIT
+       8              : 
+       9              : #pragma once
+      10              : 
+      11              : #include <nlohmann/detail/abi_macros.hpp>
+      12              : 
+      13              : NLOHMANN_JSON_NAMESPACE_BEGIN
+      14              : namespace detail
+      15              : {
+      16              : 
+      17              : /*!
+      18              : @brief replace all occurrences of a substring by another string
+      19              : 
+      20              : @param[in,out] s  the string to manipulate; changed so that all
+      21              :                occurrences of @a f are replaced with @a t
+      22              : @param[in]     f  the substring to replace with @a t
+      23              : @param[in]     t  the string to replace @a f
+      24              : 
+      25              : @pre The search string @a f must not be empty. **This precondition is
+      26              : enforced with an assertion.**
+      27              : 
+      28              : @since version 2.0.0
+      29              : */
+      30              : template<typename StringType>
+      31            0 : inline void replace_substring(StringType& s, const StringType& f,
+      32              :                               const StringType& t)
+      33              : {
+      34            0 :     JSON_ASSERT(!f.empty());
+      35            0 :     for (auto pos = s.find(f);                // find first occurrence of f
+      36            0 :             pos != StringType::npos;          // make sure f was found
+      37            0 :             s.replace(pos, f.size(), t),      // replace with t, and
+      38            0 :             pos = s.find(f, pos + t.size()))  // find next occurrence of f
+      39              :     {}
+      40            0 : }
+      41              : 
+      42              : /*!
+      43              :  * @brief string escaping as described in RFC 6901 (Sect. 4)
+      44              :  * @param[in] s string to escape
+      45              :  * @return    escaped string
+      46              :  *
+      47              :  * Note the order of escaping "~" to "~0" and "/" to "~1" is important.
+      48              :  */
+      49              : template<typename StringType>
+      50              : inline StringType escape(StringType s)
+      51              : {
+      52              :     replace_substring(s, StringType{"~"}, StringType{"~0"});
+      53              :     replace_substring(s, StringType{"/"}, StringType{"~1"});
+      54              :     return s;
+      55              : }
+      56              : 
+      57              : /*!
+      58              :  * @brief string unescaping as described in RFC 6901 (Sect. 4)
+      59              :  * @param[in] s string to unescape
+      60              :  * @return    unescaped string
+      61              :  *
+      62              :  * Note the order of escaping "~1" to "/" and "~0" to "~" is important.
+      63              :  */
+      64              : template<typename StringType>
+      65            0 : static void unescape(StringType& s)
+      66              : {
+      67            0 :     replace_substring(s, StringType{"~1"}, StringType{"/"});
+      68            0 :     replace_substring(s, StringType{"~0"}, StringType{"~"});
+      69            0 : }
+      70              : 
+      71              : }  // namespace detail
+      72              : NLOHMANN_JSON_NAMESPACE_END
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/index-sort-f.html b/html/BayesNet/lib/json/include/nlohmann/index-sort-f.html new file mode 100644 index 0000000..107d9bf --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/index-sort-f.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmannCoverageTotalHit
Test:coverage.infoLines:63.8 %351224
Test Date:2024-04-30 13:17:26Functions:76.6 %175134
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
byte_container_with_subtype.hpp +
0.0%
+
0.0 %100.0 %4
json.hpp +
65.1%65.1%
+
65.1 %33521875.5 %151114
adl_serializer.hpp +
100.0%
+
100.0 %66100.0 %2020
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/index-sort-l.html b/html/BayesNet/lib/json/include/nlohmann/index-sort-l.html new file mode 100644 index 0000000..29fbfc6 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/index-sort-l.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmannCoverageTotalHit
Test:coverage.infoLines:63.8 %351224
Test Date:2024-04-30 13:17:26Functions:76.6 %175134
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
byte_container_with_subtype.hpp +
0.0%
+
0.0 %100.0 %4
json.hpp +
65.1%65.1%
+
65.1 %33521875.5 %151114
adl_serializer.hpp +
100.0%
+
100.0 %66100.0 %2020
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/index.html b/html/BayesNet/lib/json/include/nlohmann/index.html new file mode 100644 index 0000000..dc3e699 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/index.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmannCoverageTotalHit
Test:coverage.infoLines:63.8 %351224
Test Date:2024-04-30 13:17:26Functions:76.6 %175134
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
adl_serializer.hpp +
100.0%
+
100.0 %66100.0 %2020
byte_container_with_subtype.hpp +
0.0%
+
0.0 %100.0 %4
json.hpp +
65.1%65.1%
+
65.1 %33521875.5 %151114
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/json.hpp.func-c.html b/html/BayesNet/lib/json/include/nlohmann/json.hpp.func-c.html new file mode 100644 index 0000000..2af2c67 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/json.hpp.func-c.html @@ -0,0 +1,1202 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/json.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann - json.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:65.1 %335218
Test Date:2024-04-30 13:17:26Functions:75.5 %151114
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_valueC2ERKNS0_27byte_container_with_subtypeISC_EE0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_valueC2ERKS3_ISD_SaISD_EE0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_valueC2Em0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE18compares_unorderedERKSD_SF_b0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE4dataC2ENS0_6detail7value_tE0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2EDn0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2ENS0_6detail7value_tE0
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE12get_impl_ptrEPKm0
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE12is_discardedEv0
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE18is_number_unsignedEv0
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE9is_numberEv0
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE9type_nameEv0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRKS9_EEEPT_DpOT0_ENKUlPS9_E_clESM_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createINS0_27byte_container_with_subtypeISC_EEJEEEPT_DpOT0_ENKUlPSG_E_clESM_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createINS0_27byte_container_with_subtypeISC_EEJRKSG_EEEPT_DpOT0_ENKUlPSG_E_clESO_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS2_IS9_SD_St4lessIvESaISt4pairIKS9_SD_EEEJEEEPT_DpOT0_ENKUlPSL_E_clESR_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS2_IS9_SD_St4lessIvESaISt4pairIKS9_SD_EEEJRKSL_EEEPT_DpOT0_ENKUlPSL_E_clEST_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS3_ISD_SaISD_EEJEEEPT_DpOT0_ENKUlPSG_E_clESM_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS3_ISD_SaISD_EEJPKNS0_6detail8json_refISD_EESL_EEEPT_DpOT0_ENKUlPSG_E_clESR_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS3_ISD_SaISD_EEJRKSG_EEEPT_DpOT0_ENKUlPSG_E_clESO_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA10_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA12_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA13_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA15_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA16_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA17_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA1_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA2_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA4_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA5_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA6_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRKS9_EEEPT_DpOT0_ENKUlPS9_E_clESM_0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEaSESD_2
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE3endEv4
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5beginEv4
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5itemsEv4
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE12get_impl_ptrEPKd14
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE15is_number_floatEv14
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE4dumpEicbNS0_6detail15error_handler_tE20
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE12get_impl_ptrEPKl24
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE17is_number_integerEv24
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_valueC2Ed28
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE12get_impl_ptrEPKS9_28
_ZN8nlohmann16json_abi_v3_11_3eqERKNS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEESF_38
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEcvNS0_6detail7value_tEEv38
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5emptyEv42
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_valueC2El46
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE12get_impl_ptrEPKb48
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_valueC2ENS0_6detail7value_tE50
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_valueC2ERKS2_IS9_SD_St4lessIvESaISt4pairIKS9_SD_EEE52
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE4typeEv76
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_valueC2Eb92
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_valueC2ERKS9_94
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10is_booleanEv96
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE14erase_internalIRA2_KcLi0EEEmOT_104
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE14erase_internalIRA2_KcLi0EEEmOT_2
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE14erase_internalIRA15_KcLi0EEEmOT_4
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE14erase_internalIRA17_KcLi0EEEmOT_6
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE14erase_internalIRA6_KcLi0EEEmOT_10
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE14erase_internalIRA16_KcLi0EEEmOT_16
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE14erase_internalIRA12_KcLi0EEEmOT_18
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE14erase_internalIRA13_KcLi0EEEmOT_20
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE14erase_internalIRA10_KcLi0EEEmOT_28
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5eraseIRA2_KcLi0EEEmOT_104
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5eraseIRA2_KcLi0EEEmOT_2
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5eraseIRA15_KcLi0EEEmOT_4
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5eraseIRA17_KcLi0EEEmOT_6
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5eraseIRA6_KcLi0EEEmOT_10
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5eraseIRA16_KcLi0EEEmOT_16
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5eraseIRA12_KcLi0EEEmOT_18
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5eraseIRA13_KcLi0EEEmOT_20
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5eraseIRA10_KcLi0EEEmOT_28
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE4sizeEv110
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEixEm110
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE3getIbbEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv114
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE3getIffEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv2
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE3getIddEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv12
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE3getIiiEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv24
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE3getIS9_S9_EEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv28
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE3getIbbEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv48
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE7get_ptrIPKbLi0EEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE12get_impl_ptrcl7declvalISK_EEEEv114
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE7get_ptrIPKmLi0EEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE12get_impl_ptrcl7declvalISK_EEEEv0
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE7get_ptrIPKdLi0EEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE12get_impl_ptrcl7declvalISK_EEEEv14
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE7get_ptrIPKlLi0EEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE12get_impl_ptrcl7declvalISK_EEEEv24
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE7get_ptrIPKS9_Li0EEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE12get_impl_ptrcl7declvalISK_EEEEv28
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE7get_ptrIPKbLi0EEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE12get_impl_ptrcl7declvalISK_EEEEv48
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8get_implIbLi0EEET_NS0_6detail12priority_tagILj0EEE114
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8get_implIfLi0EEET_NS0_6detail12priority_tagILj0EEE2
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8get_implIdLi0EEET_NS0_6detail12priority_tagILj0EEE12
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8get_implIiLi0EEET_NS0_6detail12priority_tagILj0EEE24
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8get_implIS9_Li0EEET_NS0_6detail12priority_tagILj0EEE28
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8get_implIbLi0EEET_NS0_6detail12priority_tagILj0EEE48
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEcvT_IbLi0EEEv114
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEcvT_IfLi0EEEv2
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEcvT_IdLi0EEEv12
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEcvT_IiLi0EEEv24
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEcvT_IS9_Li0EEEv28
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEcvT_IbLi0EEEv48
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10set_parentERSD_m116
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEixES9_116
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEixIKcEERSD_PT_116
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE7is_nullEv116
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2ESt16initializer_listINS0_6detail8json_refISD_EEEbNSF_7value_tE164
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE9is_stringEv166
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2ERKSD_188
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC4ESt16initializer_listINS0_6detail8json_refISD_EEEbNSF_7value_tEENKUlRKSH_E_clESL_224
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2INS0_6detail8json_refISD_EELi0EEERKT_236
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IbbLi0EEEOT_260
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA2_KcA2_cLi0EEEOT_2
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA15_KcA15_cLi0EEEOT_4
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA17_KcA17_cLi0EEEOT_4
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRKS9_S9_Li0EEEOT_6
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA4_KcA4_cLi0EEEOT_10
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IddLi0EEEOT_14
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA12_KcA12_cLi0EEEOT_16
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA5_KcA5_cLi0EEEOT_16
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA6_KcA6_cLi0EEEOT_16
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA16_KcA16_cLi0EEEOT_18
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IiiLi0EEEOT_22
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA13_KcA13_cLi0EEEOT_24
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA10_KcA10_cLi0EEEOT_26
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRS9_S9_Li0EEEOT_38
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IbbLi0EEEOT_44
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8containsIRA2_KcLi0EEEbOT_374
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8containsIRA2_KcLi0EEEbOT_6
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8containsIRA16_KcLi0EEEbOT_36
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8containsIRA15_KcLi0EEEbOT_38
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8containsIRA12_KcLi0EEEbOT_42
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8containsIRA17_KcLi0EEEbOT_42
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8containsIRA6_KcLi0EEEbOT_50
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8containsIRA13_KcLi0EEEbOT_76
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8containsIRA10_KcLi0EEEbOT_84
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRKS9_EEEPT_DpOT0_446
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createINS0_27byte_container_with_subtypeISC_EEJEEEPT_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createINS0_27byte_container_with_subtypeISC_EEJRKSG_EEEPT_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS3_ISD_SaISD_EEJEEEPT_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS3_ISD_SaISD_EEJRKSG_EEEPT_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA1_KcEEEPT_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA2_KcEEEPT_DpOT0_2
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA15_KcEEEPT_DpOT0_4
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA17_KcEEEPT_DpOT0_4
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA4_KcEEEPT_DpOT0_10
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA12_KcEEEPT_DpOT0_16
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA5_KcEEEPT_DpOT0_16
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA6_KcEEEPT_DpOT0_16
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA16_KcEEEPT_DpOT0_18
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA13_KcEEEPT_DpOT0_24
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA10_KcEEEPT_DpOT0_26
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS2_IS9_SD_St4lessIvESaISt4pairIKS9_SD_EEEJEEEPT_DpOT0_50
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS2_IS9_SD_St4lessIvESaISt4pairIKS9_SD_EEEJRKSL_EEEPT_DpOT0_52
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRKS9_EEEPT_DpOT0_94
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS3_ISD_SaISD_EEJPKNS0_6detail8json_refISD_EESL_EEEPT_DpOT0_114
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE4dataC2Ev612
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8is_arrayEv694
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE9is_objectEv954
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2EOSD_1184
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE4dataD2Ev1796
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvED2Ev1796
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE11set_parentsEv1798
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_value7destroyENS0_6detail7value_tE2056
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE16assert_invariantEb5228
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/json.hpp.func.html b/html/BayesNet/lib/json/include/nlohmann/json.hpp.func.html new file mode 100644 index 0000000..1c8769f --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/json.hpp.func.html @@ -0,0 +1,1202 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/json.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann - json.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:65.1 %335218
Test Date:2024-04-30 13:17:26Functions:75.5 %151114
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_value7destroyENS0_6detail7value_tE2056
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_valueC2ENS0_6detail7value_tE50
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_valueC2ERKNS0_27byte_container_with_subtypeISC_EE0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_valueC2ERKS2_IS9_SD_St4lessIvESaISt4pairIKS9_SD_EEE52
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_valueC2ERKS3_ISD_SaISD_EE0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_valueC2ERKS9_94
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_valueC2Eb92
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_valueC2Ed28
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_valueC2El46
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10json_valueC2Em0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10set_parentERSD_m116
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE11set_parentsEv1798
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE14erase_internalIRA2_KcLi0EEEmOT_104
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE14erase_internalIRA10_KcLi0EEEmOT_28
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE14erase_internalIRA12_KcLi0EEEmOT_18
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE14erase_internalIRA13_KcLi0EEEmOT_20
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE14erase_internalIRA15_KcLi0EEEmOT_4
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE14erase_internalIRA16_KcLi0EEEmOT_16
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE14erase_internalIRA17_KcLi0EEEmOT_6
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE14erase_internalIRA2_KcLi0EEEmOT_2
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE14erase_internalIRA6_KcLi0EEEmOT_10
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE18compares_unorderedERKSD_SF_b0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE3endEv4
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE4dataC2ENS0_6detail7value_tE0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE4dataC2Ev612
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE4dataD2Ev1796
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5beginEv4
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5eraseIRA2_KcLi0EEEmOT_104
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5eraseIRA10_KcLi0EEEmOT_28
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5eraseIRA12_KcLi0EEEmOT_18
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5eraseIRA13_KcLi0EEEmOT_20
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5eraseIRA15_KcLi0EEEmOT_4
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5eraseIRA16_KcLi0EEEmOT_16
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5eraseIRA17_KcLi0EEEmOT_6
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5eraseIRA2_KcLi0EEEmOT_2
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5eraseIRA6_KcLi0EEEmOT_10
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5itemsEv4
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRKS9_EEEPT_DpOT0_446
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createINS0_27byte_container_with_subtypeISC_EEJEEEPT_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createINS0_27byte_container_with_subtypeISC_EEJRKSG_EEEPT_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS2_IS9_SD_St4lessIvESaISt4pairIKS9_SD_EEEJEEEPT_DpOT0_50
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS2_IS9_SD_St4lessIvESaISt4pairIKS9_SD_EEEJRKSL_EEEPT_DpOT0_52
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS3_ISD_SaISD_EEJEEEPT_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS3_ISD_SaISD_EEJPKNS0_6detail8json_refISD_EESL_EEEPT_DpOT0_114
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS3_ISD_SaISD_EEJRKSG_EEEPT_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA10_KcEEEPT_DpOT0_26
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA12_KcEEEPT_DpOT0_16
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA13_KcEEEPT_DpOT0_24
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA15_KcEEEPT_DpOT0_4
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA16_KcEEEPT_DpOT0_18
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA17_KcEEEPT_DpOT0_4
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA1_KcEEEPT_DpOT0_0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA2_KcEEEPT_DpOT0_2
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA4_KcEEEPT_DpOT0_10
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA5_KcEEEPT_DpOT0_16
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA6_KcEEEPT_DpOT0_16
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRKS9_EEEPT_DpOT0_94
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2EDn0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2ENS0_6detail7value_tE0
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2EOSD_1184
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2ERKSD_188
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2ESt16initializer_listINS0_6detail8json_refISD_EEEbNSF_7value_tE164
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2INS0_6detail8json_refISD_EELi0EEERKT_236
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IbbLi0EEEOT_260
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA10_KcA10_cLi0EEEOT_26
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA12_KcA12_cLi0EEEOT_16
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA13_KcA13_cLi0EEEOT_24
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA15_KcA15_cLi0EEEOT_4
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA16_KcA16_cLi0EEEOT_18
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA17_KcA17_cLi0EEEOT_4
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA2_KcA2_cLi0EEEOT_2
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA4_KcA4_cLi0EEEOT_10
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA5_KcA5_cLi0EEEOT_16
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRA6_KcA6_cLi0EEEOT_16
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRKS9_S9_Li0EEEOT_6
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IRS9_S9_Li0EEEOT_38
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IbbLi0EEEOT_44
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IddLi0EEEOT_14
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC2IiiLi0EEEOT_22
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvED2Ev1796
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEaSESD_2
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEixES9_116
_ZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEixIKcEERSD_PT_116
_ZN8nlohmann16json_abi_v3_11_3eqERKNS0_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEESF_38
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE10is_booleanEv96
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE12get_impl_ptrEPKS9_28
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE12get_impl_ptrEPKb48
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE12get_impl_ptrEPKd14
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE12get_impl_ptrEPKl24
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE12get_impl_ptrEPKm0
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE12is_discardedEv0
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE15is_number_floatEv14
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE16assert_invariantEb5228
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE17is_number_integerEv24
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE18is_number_unsignedEv0
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE3getIbbEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv114
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE3getIS9_S9_EEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv28
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE3getIbbEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv48
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE3getIddEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv12
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE3getIffEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv2
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE3getIiiEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv24
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE4dumpEicbNS0_6detail15error_handler_tE20
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE4sizeEv110
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE4typeEv76
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE5emptyEv42
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE7get_ptrIPKbLi0EEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE12get_impl_ptrcl7declvalISK_EEEEv114
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE7get_ptrIPKS9_Li0EEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE12get_impl_ptrcl7declvalISK_EEEEv28
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE7get_ptrIPKbLi0EEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE12get_impl_ptrcl7declvalISK_EEEEv48
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE7get_ptrIPKdLi0EEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE12get_impl_ptrcl7declvalISK_EEEEv14
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE7get_ptrIPKlLi0EEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE12get_impl_ptrcl7declvalISK_EEEEv24
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE7get_ptrIPKmLi0EEEDTcldtclL_ZSt7declvalIRKSD_EDTcl9__declvalIT_ELi0EEEvEE12get_impl_ptrcl7declvalISK_EEEEv0
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE7is_nullEv116
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8containsIRA2_KcLi0EEEbOT_374
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8containsIRA10_KcLi0EEEbOT_84
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8containsIRA12_KcLi0EEEbOT_42
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8containsIRA13_KcLi0EEEbOT_76
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8containsIRA15_KcLi0EEEbOT_38
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8containsIRA16_KcLi0EEEbOT_36
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8containsIRA17_KcLi0EEEbOT_42
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8containsIRA2_KcLi0EEEbOT_6
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8containsIRA6_KcLi0EEEbOT_50
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8get_implIbLi0EEET_NS0_6detail12priority_tagILj0EEE114
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8get_implIS9_Li0EEET_NS0_6detail12priority_tagILj0EEE28
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8get_implIbLi0EEET_NS0_6detail12priority_tagILj0EEE48
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8get_implIdLi0EEET_NS0_6detail12priority_tagILj0EEE12
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8get_implIfLi0EEET_NS0_6detail12priority_tagILj0EEE2
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8get_implIiLi0EEET_NS0_6detail12priority_tagILj0EEE24
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE8is_arrayEv694
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE9is_numberEv0
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE9is_objectEv954
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE9is_stringEv166
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE9type_nameEv0
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEcvNS0_6detail7value_tEEv38
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEcvT_IbLi0EEEv114
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEcvT_IS9_Li0EEEv28
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEcvT_IbLi0EEEv48
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEcvT_IdLi0EEEv12
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEcvT_IfLi0EEEv2
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEcvT_IiLi0EEEv24
_ZNK8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEixEm110
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRKS9_EEEPT_DpOT0_ENKUlPS9_E_clESM_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createINS0_27byte_container_with_subtypeISC_EEJEEEPT_DpOT0_ENKUlPSG_E_clESM_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createINS0_27byte_container_with_subtypeISC_EEJRKSG_EEEPT_DpOT0_ENKUlPSG_E_clESO_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS2_IS9_SD_St4lessIvESaISt4pairIKS9_SD_EEEJEEEPT_DpOT0_ENKUlPSL_E_clESR_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS2_IS9_SD_St4lessIvESaISt4pairIKS9_SD_EEEJRKSL_EEEPT_DpOT0_ENKUlPSL_E_clEST_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS3_ISD_SaISD_EEJEEEPT_DpOT0_ENKUlPSG_E_clESM_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS3_ISD_SaISD_EEJPKNS0_6detail8json_refISD_EESL_EEEPT_DpOT0_ENKUlPSG_E_clESR_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS3_ISD_SaISD_EEJRKSG_EEEPT_DpOT0_ENKUlPSG_E_clESO_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA10_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA12_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA13_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA15_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA16_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA17_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA1_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA2_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA4_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA5_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRA6_KcEEEPT_DpOT0_ENKUlPS9_E_clESN_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvE6createIS9_JRKS9_EEEPT_DpOT0_ENKUlPS9_E_clESM_0
_ZZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEvEC4ESt16initializer_listINS0_6detail8json_refISD_EEEbNSF_7value_tEENKUlRKSH_E_clESL_224
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/json/include/nlohmann/json.hpp.gcov.html b/html/BayesNet/lib/json/include/nlohmann/json.hpp.gcov.html new file mode 100644 index 0000000..156d2d5 --- /dev/null +++ b/html/BayesNet/lib/json/include/nlohmann/json.hpp.gcov.html @@ -0,0 +1,5334 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/json/include/nlohmann/json.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/json/include/nlohmann - json.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:65.1 %335218
Test Date:2024-04-30 13:17:26Functions:75.5 %151114
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : //     __ _____ _____ _____
+       2              : //  __|  |   __|     |   | |  JSON for Modern C++
+       3              : // |  |  |__   |  |  | | | |  version 3.11.3
+       4              : // |_____|_____|_____|_|___|  https://github.com/nlohmann/json
+       5              : //
+       6              : // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
+       7              : // SPDX-License-Identifier: MIT
+       8              : 
+       9              : /****************************************************************************\
+      10              :  * Note on documentation: The source files contain links to the online      *
+      11              :  * documentation of the public API at https://json.nlohmann.me. This URL    *
+      12              :  * contains the most recent documentation and should also be applicable to  *
+      13              :  * previous versions; documentation for deprecated functions is not         *
+      14              :  * removed, but marked deprecated. See "Generate documentation" section in  *
+      15              :  * file docs/README.md.                                                     *
+      16              : \****************************************************************************/
+      17              : 
+      18              : #ifndef INCLUDE_NLOHMANN_JSON_HPP_
+      19              : #define INCLUDE_NLOHMANN_JSON_HPP_
+      20              : 
+      21              : #include <algorithm> // all_of, find, for_each
+      22              : #include <cstddef> // nullptr_t, ptrdiff_t, size_t
+      23              : #include <functional> // hash, less
+      24              : #include <initializer_list> // initializer_list
+      25              : #ifndef JSON_NO_IO
+      26              :     #include <iosfwd> // istream, ostream
+      27              : #endif  // JSON_NO_IO
+      28              : #include <iterator> // random_access_iterator_tag
+      29              : #include <memory> // unique_ptr
+      30              : #include <string> // string, stoi, to_string
+      31              : #include <utility> // declval, forward, move, pair, swap
+      32              : #include <vector> // vector
+      33              : 
+      34              : #include <nlohmann/adl_serializer.hpp>
+      35              : #include <nlohmann/byte_container_with_subtype.hpp>
+      36              : #include <nlohmann/detail/conversions/from_json.hpp>
+      37              : #include <nlohmann/detail/conversions/to_json.hpp>
+      38              : #include <nlohmann/detail/exceptions.hpp>
+      39              : #include <nlohmann/detail/hash.hpp>
+      40              : #include <nlohmann/detail/input/binary_reader.hpp>
+      41              : #include <nlohmann/detail/input/input_adapters.hpp>
+      42              : #include <nlohmann/detail/input/lexer.hpp>
+      43              : #include <nlohmann/detail/input/parser.hpp>
+      44              : #include <nlohmann/detail/iterators/internal_iterator.hpp>
+      45              : #include <nlohmann/detail/iterators/iter_impl.hpp>
+      46              : #include <nlohmann/detail/iterators/iteration_proxy.hpp>
+      47              : #include <nlohmann/detail/iterators/json_reverse_iterator.hpp>
+      48              : #include <nlohmann/detail/iterators/primitive_iterator.hpp>
+      49              : #include <nlohmann/detail/json_custom_base_class.hpp>
+      50              : #include <nlohmann/detail/json_pointer.hpp>
+      51              : #include <nlohmann/detail/json_ref.hpp>
+      52              : #include <nlohmann/detail/macro_scope.hpp>
+      53              : #include <nlohmann/detail/string_concat.hpp>
+      54              : #include <nlohmann/detail/string_escape.hpp>
+      55              : #include <nlohmann/detail/meta/cpp_future.hpp>
+      56              : #include <nlohmann/detail/meta/type_traits.hpp>
+      57              : #include <nlohmann/detail/output/binary_writer.hpp>
+      58              : #include <nlohmann/detail/output/output_adapters.hpp>
+      59              : #include <nlohmann/detail/output/serializer.hpp>
+      60              : #include <nlohmann/detail/value_t.hpp>
+      61              : #include <nlohmann/json_fwd.hpp>
+      62              : #include <nlohmann/ordered_map.hpp>
+      63              : 
+      64              : #if defined(JSON_HAS_CPP_17)
+      65              :     #if JSON_HAS_STATIC_RTTI
+      66              :         #include <any>
+      67              :     #endif
+      68              :     #include <string_view>
+      69              : #endif
+      70              : 
+      71              : /*!
+      72              : @brief namespace for Niels Lohmann
+      73              : @see https://github.com/nlohmann
+      74              : @since version 1.0.0
+      75              : */
+      76              : NLOHMANN_JSON_NAMESPACE_BEGIN
+      77              : 
+      78              : /*!
+      79              : @brief a class to store JSON values
+      80              : 
+      81              : @internal
+      82              : @invariant The member variables @a m_value and @a m_type have the following
+      83              : relationship:
+      84              : - If `m_type == value_t::object`, then `m_value.object != nullptr`.
+      85              : - If `m_type == value_t::array`, then `m_value.array != nullptr`.
+      86              : - If `m_type == value_t::string`, then `m_value.string != nullptr`.
+      87              : The invariants are checked by member function assert_invariant().
+      88              : 
+      89              : @note ObjectType trick from https://stackoverflow.com/a/9860911
+      90              : @endinternal
+      91              : 
+      92              : @since version 1.0.0
+      93              : 
+      94              : @nosubgrouping
+      95              : */
+      96              : NLOHMANN_BASIC_JSON_TPL_DECLARATION
+      97              : class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-special-member-functions)
+      98              :     : public ::nlohmann::detail::json_base_class<CustomBaseClass>
+      99              : {
+     100              :   private:
+     101              :     template<detail::value_t> friend struct detail::external_constructor;
+     102              : 
+     103              :     template<typename>
+     104              :     friend class ::nlohmann::json_pointer;
+     105              :     // can be restored when json_pointer backwards compatibility is removed
+     106              :     // friend ::nlohmann::json_pointer<StringType>;
+     107              : 
+     108              :     template<typename BasicJsonType, typename InputType>
+     109              :     friend class ::nlohmann::detail::parser;
+     110              :     friend ::nlohmann::detail::serializer<basic_json>;
+     111              :     template<typename BasicJsonType>
+     112              :     friend class ::nlohmann::detail::iter_impl;
+     113              :     template<typename BasicJsonType, typename CharType>
+     114              :     friend class ::nlohmann::detail::binary_writer;
+     115              :     template<typename BasicJsonType, typename InputType, typename SAX>
+     116              :     friend class ::nlohmann::detail::binary_reader;
+     117              :     template<typename BasicJsonType>
+     118              :     friend class ::nlohmann::detail::json_sax_dom_parser;
+     119              :     template<typename BasicJsonType>
+     120              :     friend class ::nlohmann::detail::json_sax_dom_callback_parser;
+     121              :     friend class ::nlohmann::detail::exception;
+     122              : 
+     123              :     /// workaround type for MSVC
+     124              :     using basic_json_t = NLOHMANN_BASIC_JSON_TPL;
+     125              :     using json_base_class_t = ::nlohmann::detail::json_base_class<CustomBaseClass>;
+     126              : 
+     127              :   JSON_PRIVATE_UNLESS_TESTED:
+     128              :     // convenience aliases for types residing in namespace detail;
+     129              :     using lexer = ::nlohmann::detail::lexer_base<basic_json>;
+     130              : 
+     131              :     template<typename InputAdapterType>
+     132              :     static ::nlohmann::detail::parser<basic_json, InputAdapterType> parser(
+     133              :         InputAdapterType adapter,
+     134              :         detail::parser_callback_t<basic_json>cb = nullptr,
+     135              :         const bool allow_exceptions = true,
+     136              :         const bool ignore_comments = false
+     137              :     )
+     138              :     {
+     139              :         return ::nlohmann::detail::parser<basic_json, InputAdapterType>(std::move(adapter),
+     140              :                 std::move(cb), allow_exceptions, ignore_comments);
+     141              :     }
+     142              : 
+     143              :   private:
+     144              :     using primitive_iterator_t = ::nlohmann::detail::primitive_iterator_t;
+     145              :     template<typename BasicJsonType>
+     146              :     using internal_iterator = ::nlohmann::detail::internal_iterator<BasicJsonType>;
+     147              :     template<typename BasicJsonType>
+     148              :     using iter_impl = ::nlohmann::detail::iter_impl<BasicJsonType>;
+     149              :     template<typename Iterator>
+     150              :     using iteration_proxy = ::nlohmann::detail::iteration_proxy<Iterator>;
+     151              :     template<typename Base> using json_reverse_iterator = ::nlohmann::detail::json_reverse_iterator<Base>;
+     152              : 
+     153              :     template<typename CharType>
+     154              :     using output_adapter_t = ::nlohmann::detail::output_adapter_t<CharType>;
+     155              : 
+     156              :     template<typename InputType>
+     157              :     using binary_reader = ::nlohmann::detail::binary_reader<basic_json, InputType>;
+     158              :     template<typename CharType> using binary_writer = ::nlohmann::detail::binary_writer<basic_json, CharType>;
+     159              : 
+     160              :   JSON_PRIVATE_UNLESS_TESTED:
+     161              :     using serializer = ::nlohmann::detail::serializer<basic_json>;
+     162              : 
+     163              :   public:
+     164              :     using value_t = detail::value_t;
+     165              :     /// JSON Pointer, see @ref nlohmann::json_pointer
+     166              :     using json_pointer = ::nlohmann::json_pointer<StringType>;
+     167              :     template<typename T, typename SFINAE>
+     168              :     using json_serializer = JSONSerializer<T, SFINAE>;
+     169              :     /// how to treat decoding errors
+     170              :     using error_handler_t = detail::error_handler_t;
+     171              :     /// how to treat CBOR tags
+     172              :     using cbor_tag_handler_t = detail::cbor_tag_handler_t;
+     173              :     /// helper type for initializer lists of basic_json values
+     174              :     using initializer_list_t = std::initializer_list<detail::json_ref<basic_json>>;
+     175              : 
+     176              :     using input_format_t = detail::input_format_t;
+     177              :     /// SAX interface type, see @ref nlohmann::json_sax
+     178              :     using json_sax_t = json_sax<basic_json>;
+     179              : 
+     180              :     ////////////////
+     181              :     // exceptions //
+     182              :     ////////////////
+     183              : 
+     184              :     /// @name exceptions
+     185              :     /// Classes to implement user-defined exceptions.
+     186              :     /// @{
+     187              : 
+     188              :     using exception = detail::exception;
+     189              :     using parse_error = detail::parse_error;
+     190              :     using invalid_iterator = detail::invalid_iterator;
+     191              :     using type_error = detail::type_error;
+     192              :     using out_of_range = detail::out_of_range;
+     193              :     using other_error = detail::other_error;
+     194              : 
+     195              :     /// @}
+     196              : 
+     197              :     /////////////////////
+     198              :     // container types //
+     199              :     /////////////////////
+     200              : 
+     201              :     /// @name container types
+     202              :     /// The canonic container types to use @ref basic_json like any other STL
+     203              :     /// container.
+     204              :     /// @{
+     205              : 
+     206              :     /// the type of elements in a basic_json container
+     207              :     using value_type = basic_json;
+     208              : 
+     209              :     /// the type of an element reference
+     210              :     using reference = value_type&;
+     211              :     /// the type of an element const reference
+     212              :     using const_reference = const value_type&;
+     213              : 
+     214              :     /// a type to represent differences between iterators
+     215              :     using difference_type = std::ptrdiff_t;
+     216              :     /// a type to represent container sizes
+     217              :     using size_type = std::size_t;
+     218              : 
+     219              :     /// the allocator type
+     220              :     using allocator_type = AllocatorType<basic_json>;
+     221              : 
+     222              :     /// the type of an element pointer
+     223              :     using pointer = typename std::allocator_traits<allocator_type>::pointer;
+     224              :     /// the type of an element const pointer
+     225              :     using const_pointer = typename std::allocator_traits<allocator_type>::const_pointer;
+     226              : 
+     227              :     /// an iterator for a basic_json container
+     228              :     using iterator = iter_impl<basic_json>;
+     229              :     /// a const iterator for a basic_json container
+     230              :     using const_iterator = iter_impl<const basic_json>;
+     231              :     /// a reverse iterator for a basic_json container
+     232              :     using reverse_iterator = json_reverse_iterator<typename basic_json::iterator>;
+     233              :     /// a const reverse iterator for a basic_json container
+     234              :     using const_reverse_iterator = json_reverse_iterator<typename basic_json::const_iterator>;
+     235              : 
+     236              :     /// @}
+     237              : 
+     238              :     /// @brief returns the allocator associated with the container
+     239              :     /// @sa https://json.nlohmann.me/api/basic_json/get_allocator/
+     240              :     static allocator_type get_allocator()
+     241              :     {
+     242              :         return allocator_type();
+     243              :     }
+     244              : 
+     245              :     /// @brief returns version information on the library
+     246              :     /// @sa https://json.nlohmann.me/api/basic_json/meta/
+     247              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+     248              :     static basic_json meta()
+     249              :     {
+     250              :         basic_json result;
+     251              : 
+     252              :         result["copyright"] = "(C) 2013-2023 Niels Lohmann";
+     253              :         result["name"] = "JSON for Modern C++";
+     254              :         result["url"] = "https://github.com/nlohmann/json";
+     255              :         result["version"]["string"] =
+     256              :             detail::concat(std::to_string(NLOHMANN_JSON_VERSION_MAJOR), '.',
+     257              :                            std::to_string(NLOHMANN_JSON_VERSION_MINOR), '.',
+     258              :                            std::to_string(NLOHMANN_JSON_VERSION_PATCH));
+     259              :         result["version"]["major"] = NLOHMANN_JSON_VERSION_MAJOR;
+     260              :         result["version"]["minor"] = NLOHMANN_JSON_VERSION_MINOR;
+     261              :         result["version"]["patch"] = NLOHMANN_JSON_VERSION_PATCH;
+     262              : 
+     263              : #ifdef _WIN32
+     264              :         result["platform"] = "win32";
+     265              : #elif defined __linux__
+     266              :         result["platform"] = "linux";
+     267              : #elif defined __APPLE__
+     268              :         result["platform"] = "apple";
+     269              : #elif defined __unix__
+     270              :         result["platform"] = "unix";
+     271              : #else
+     272              :         result["platform"] = "unknown";
+     273              : #endif
+     274              : 
+     275              : #if defined(__ICC) || defined(__INTEL_COMPILER)
+     276              :         result["compiler"] = {{"family", "icc"}, {"version", __INTEL_COMPILER}};
+     277              : #elif defined(__clang__)
+     278              :         result["compiler"] = {{"family", "clang"}, {"version", __clang_version__}};
+     279              : #elif defined(__GNUC__) || defined(__GNUG__)
+     280              :         result["compiler"] = {{"family", "gcc"}, {"version", detail::concat(
+     281              :                     std::to_string(__GNUC__), '.',
+     282              :                     std::to_string(__GNUC_MINOR__), '.',
+     283              :                     std::to_string(__GNUC_PATCHLEVEL__))
+     284              :             }
+     285              :         };
+     286              : #elif defined(__HP_cc) || defined(__HP_aCC)
+     287              :         result["compiler"] = "hp"
+     288              : #elif defined(__IBMCPP__)
+     289              :         result["compiler"] = {{"family", "ilecpp"}, {"version", __IBMCPP__}};
+     290              : #elif defined(_MSC_VER)
+     291              :         result["compiler"] = {{"family", "msvc"}, {"version", _MSC_VER}};
+     292              : #elif defined(__PGI)
+     293              :         result["compiler"] = {{"family", "pgcpp"}, {"version", __PGI}};
+     294              : #elif defined(__SUNPRO_CC)
+     295              :         result["compiler"] = {{"family", "sunpro"}, {"version", __SUNPRO_CC}};
+     296              : #else
+     297              :         result["compiler"] = {{"family", "unknown"}, {"version", "unknown"}};
+     298              : #endif
+     299              : 
+     300              : #if defined(_MSVC_LANG)
+     301              :         result["compiler"]["c++"] = std::to_string(_MSVC_LANG);
+     302              : #elif defined(__cplusplus)
+     303              :         result["compiler"]["c++"] = std::to_string(__cplusplus);
+     304              : #else
+     305              :         result["compiler"]["c++"] = "unknown";
+     306              : #endif
+     307              :         return result;
+     308              :     }
+     309              : 
+     310              :     ///////////////////////////
+     311              :     // JSON value data types //
+     312              :     ///////////////////////////
+     313              : 
+     314              :     /// @name JSON value data types
+     315              :     /// The data types to store a JSON value. These types are derived from
+     316              :     /// the template arguments passed to class @ref basic_json.
+     317              :     /// @{
+     318              : 
+     319              :     /// @brief default object key comparator type
+     320              :     /// The actual object key comparator type (@ref object_comparator_t) may be
+     321              :     /// different.
+     322              :     /// @sa https://json.nlohmann.me/api/basic_json/default_object_comparator_t/
+     323              : #if defined(JSON_HAS_CPP_14)
+     324              :     // use of transparent comparator avoids unnecessary repeated construction of temporaries
+     325              :     // in functions involving lookup by key with types other than object_t::key_type (aka. StringType)
+     326              :     using default_object_comparator_t = std::less<>;
+     327              : #else
+     328              :     using default_object_comparator_t = std::less<StringType>;
+     329              : #endif
+     330              : 
+     331              :     /// @brief a type for an object
+     332              :     /// @sa https://json.nlohmann.me/api/basic_json/object_t/
+     333              :     using object_t = ObjectType<StringType,
+     334              :           basic_json,
+     335              :           default_object_comparator_t,
+     336              :           AllocatorType<std::pair<const StringType,
+     337              :           basic_json>>>;
+     338              : 
+     339              :     /// @brief a type for an array
+     340              :     /// @sa https://json.nlohmann.me/api/basic_json/array_t/
+     341              :     using array_t = ArrayType<basic_json, AllocatorType<basic_json>>;
+     342              : 
+     343              :     /// @brief a type for a string
+     344              :     /// @sa https://json.nlohmann.me/api/basic_json/string_t/
+     345              :     using string_t = StringType;
+     346              : 
+     347              :     /// @brief a type for a boolean
+     348              :     /// @sa https://json.nlohmann.me/api/basic_json/boolean_t/
+     349              :     using boolean_t = BooleanType;
+     350              : 
+     351              :     /// @brief a type for a number (integer)
+     352              :     /// @sa https://json.nlohmann.me/api/basic_json/number_integer_t/
+     353              :     using number_integer_t = NumberIntegerType;
+     354              : 
+     355              :     /// @brief a type for a number (unsigned)
+     356              :     /// @sa https://json.nlohmann.me/api/basic_json/number_unsigned_t/
+     357              :     using number_unsigned_t = NumberUnsignedType;
+     358              : 
+     359              :     /// @brief a type for a number (floating-point)
+     360              :     /// @sa https://json.nlohmann.me/api/basic_json/number_float_t/
+     361              :     using number_float_t = NumberFloatType;
+     362              : 
+     363              :     /// @brief a type for a packed binary type
+     364              :     /// @sa https://json.nlohmann.me/api/basic_json/binary_t/
+     365              :     using binary_t = nlohmann::byte_container_with_subtype<BinaryType>;
+     366              : 
+     367              :     /// @brief object key comparator type
+     368              :     /// @sa https://json.nlohmann.me/api/basic_json/object_comparator_t/
+     369              :     using object_comparator_t = detail::actual_object_comparator_t<basic_json>;
+     370              : 
+     371              :     /// @}
+     372              : 
+     373              :   private:
+     374              : 
+     375              :     /// helper for exception-safe object creation
+     376              :     template<typename T, typename... Args>
+     377              :     JSON_HEDLEY_RETURNS_NON_NULL
+     378          446 :     static T* create(Args&& ... args)
+     379              :     {
+     380              :         AllocatorType<T> alloc;
+     381              :         using AllocatorTraits = std::allocator_traits<AllocatorType<T>>;
+     382              : 
+     383          446 :         auto deleter = [&](T * obj)
+     384              :         {
+     385            0 :             AllocatorTraits::deallocate(alloc, obj, 1);
+     386              :         };
+     387          446 :         std::unique_ptr<T, decltype(deleter)> obj(AllocatorTraits::allocate(alloc, 1), deleter);
+     388          446 :         AllocatorTraits::construct(alloc, obj.get(), std::forward<Args>(args)...);
+     389          446 :         JSON_ASSERT(obj != nullptr);
+     390          892 :         return obj.release();
+     391          446 :     }
+     392              : 
+     393              :     ////////////////////////
+     394              :     // JSON value storage //
+     395              :     ////////////////////////
+     396              : 
+     397              :   JSON_PRIVATE_UNLESS_TESTED:
+     398              :     /*!
+     399              :     @brief a JSON value
+     400              : 
+     401              :     The actual storage for a JSON value of the @ref basic_json class. This
+     402              :     union combines the different storage types for the JSON value types
+     403              :     defined in @ref value_t.
+     404              : 
+     405              :     JSON type | value_t type    | used type
+     406              :     --------- | --------------- | ------------------------
+     407              :     object    | object          | pointer to @ref object_t
+     408              :     array     | array           | pointer to @ref array_t
+     409              :     string    | string          | pointer to @ref string_t
+     410              :     boolean   | boolean         | @ref boolean_t
+     411              :     number    | number_integer  | @ref number_integer_t
+     412              :     number    | number_unsigned | @ref number_unsigned_t
+     413              :     number    | number_float    | @ref number_float_t
+     414              :     binary    | binary          | pointer to @ref binary_t
+     415              :     null      | null            | *no value is stored*
+     416              : 
+     417              :     @note Variable-length types (objects, arrays, and strings) are stored as
+     418              :     pointers. The size of the union should not exceed 64 bits if the default
+     419              :     value types are used.
+     420              : 
+     421              :     @since version 1.0.0
+     422              :     */
+     423              :     union json_value
+     424              :     {
+     425              :         /// object (stored with pointer to save storage)
+     426              :         object_t* object;
+     427              :         /// array (stored with pointer to save storage)
+     428              :         array_t* array;
+     429              :         /// string (stored with pointer to save storage)
+     430              :         string_t* string;
+     431              :         /// binary (stored with pointer to save storage)
+     432              :         binary_t* binary;
+     433              :         /// boolean
+     434              :         boolean_t boolean;
+     435              :         /// number (integer)
+     436              :         number_integer_t number_integer;
+     437              :         /// number (unsigned integer)
+     438              :         number_unsigned_t number_unsigned;
+     439              :         /// number (floating-point)
+     440              :         number_float_t number_float;
+     441              : 
+     442              :         /// default constructor (for null values)
+     443              :         json_value() = default;
+     444              :         /// constructor for booleans
+     445           92 :         json_value(boolean_t v) noexcept : boolean(v) {}
+     446              :         /// constructor for numbers (integer)
+     447           46 :         json_value(number_integer_t v) noexcept : number_integer(v) {}
+     448              :         /// constructor for numbers (unsigned)
+     449            0 :         json_value(number_unsigned_t v) noexcept : number_unsigned(v) {}
+     450              :         /// constructor for numbers (floating-point)
+     451           28 :         json_value(number_float_t v) noexcept : number_float(v) {}
+     452              :         /// constructor for empty values of a given type
+     453           50 :         json_value(value_t t)
+     454              :         {
+     455           50 :             switch (t)
+     456              :             {
+     457           50 :                 case value_t::object:
+     458              :                 {
+     459           50 :                     object = create<object_t>();
+     460           50 :                     break;
+     461              :                 }
+     462              : 
+     463            0 :                 case value_t::array:
+     464              :                 {
+     465            0 :                     array = create<array_t>();
+     466            0 :                     break;
+     467              :                 }
+     468              : 
+     469            0 :                 case value_t::string:
+     470              :                 {
+     471            0 :                     string = create<string_t>("");
+     472            0 :                     break;
+     473              :                 }
+     474              : 
+     475            0 :                 case value_t::binary:
+     476              :                 {
+     477            0 :                     binary = create<binary_t>();
+     478            0 :                     break;
+     479              :                 }
+     480              : 
+     481            0 :                 case value_t::boolean:
+     482              :                 {
+     483            0 :                     boolean = static_cast<boolean_t>(false);
+     484            0 :                     break;
+     485              :                 }
+     486              : 
+     487            0 :                 case value_t::number_integer:
+     488              :                 {
+     489            0 :                     number_integer = static_cast<number_integer_t>(0);
+     490            0 :                     break;
+     491              :                 }
+     492              : 
+     493            0 :                 case value_t::number_unsigned:
+     494              :                 {
+     495            0 :                     number_unsigned = static_cast<number_unsigned_t>(0);
+     496            0 :                     break;
+     497              :                 }
+     498              : 
+     499            0 :                 case value_t::number_float:
+     500              :                 {
+     501            0 :                     number_float = static_cast<number_float_t>(0.0);
+     502            0 :                     break;
+     503              :                 }
+     504              : 
+     505            0 :                 case value_t::null:
+     506              :                 {
+     507            0 :                     object = nullptr;  // silence warning, see #821
+     508            0 :                     break;
+     509              :                 }
+     510              : 
+     511            0 :                 case value_t::discarded:
+     512              :                 default:
+     513              :                 {
+     514            0 :                     object = nullptr;  // silence warning, see #821
+     515            0 :                     if (JSON_HEDLEY_UNLIKELY(t == value_t::null))
+     516              :                     {
+     517              :                         JSON_THROW(other_error::create(500, "961c151d2e87f2686a955a9be24d316f1362bf21 3.11.3", nullptr)); // LCOV_EXCL_LINE
+     518              :                     }
+     519            0 :                     break;
+     520              :                 }
+     521              :             }
+     522           50 :         }
+     523              : 
+     524              :         /// constructor for strings
+     525           94 :         json_value(const string_t& value) : string(create<string_t>(value)) {}
+     526              : 
+     527              :         /// constructor for rvalue strings
+     528              :         json_value(string_t&& value) : string(create<string_t>(std::move(value))) {}
+     529              : 
+     530              :         /// constructor for objects
+     531           52 :         json_value(const object_t& value) : object(create<object_t>(value)) {}
+     532              : 
+     533              :         /// constructor for rvalue objects
+     534              :         json_value(object_t&& value) : object(create<object_t>(std::move(value))) {}
+     535              : 
+     536              :         /// constructor for arrays
+     537            0 :         json_value(const array_t& value) : array(create<array_t>(value)) {}
+     538              : 
+     539              :         /// constructor for rvalue arrays
+     540              :         json_value(array_t&& value) : array(create<array_t>(std::move(value))) {}
+     541              : 
+     542              :         /// constructor for binary arrays
+     543              :         json_value(const typename binary_t::container_type& value) : binary(create<binary_t>(value)) {}
+     544              : 
+     545              :         /// constructor for rvalue binary arrays
+     546              :         json_value(typename binary_t::container_type&& value) : binary(create<binary_t>(std::move(value))) {}
+     547              : 
+     548              :         /// constructor for binary arrays (internal type)
+     549            0 :         json_value(const binary_t& value) : binary(create<binary_t>(value)) {}
+     550              : 
+     551              :         /// constructor for rvalue binary arrays (internal type)
+     552              :         json_value(binary_t&& value) : binary(create<binary_t>(std::move(value))) {}
+     553              : 
+     554         2056 :         void destroy(value_t t)
+     555              :         {
+     556         2056 :             if (
+     557         2056 :                 (t == value_t::object && object == nullptr) ||
+     558         2056 :                 (t == value_t::array && array == nullptr) ||
+     559         2056 :                 (t == value_t::string && string == nullptr) ||
+     560            0 :                 (t == value_t::binary && binary == nullptr)
+     561              :             )
+     562              :             {
+     563              :                 //not initialized (e.g. due to exception in the ctor)
+     564            0 :                 return;
+     565              :             }
+     566         2056 :             if (t == value_t::array || t == value_t::object)
+     567              :             {
+     568              :                 // flatten the current json_value to a heap-allocated stack
+     569          216 :                 std::vector<basic_json> stack;
+     570              : 
+     571              :                 // move the top-level items to stack
+     572          216 :                 if (t == value_t::array)
+     573              :                 {
+     574          114 :                     stack.reserve(array->size());
+     575          114 :                     std::move(array->begin(), array->end(), std::back_inserter(stack));
+     576              :                 }
+     577              :                 else
+     578              :                 {
+     579          102 :                     stack.reserve(object->size());
+     580          202 :                     for (auto&& it : *object)
+     581              :                     {
+     582          100 :                         stack.push_back(std::move(it.second));
+     583              :                     }
+     584              :                 }
+     585              : 
+     586          936 :                 while (!stack.empty())
+     587              :                 {
+     588              :                     // move the last item to local variable to be processed
+     589          360 :                     basic_json current_item(std::move(stack.back()));
+     590          360 :                     stack.pop_back();
+     591              : 
+     592              :                     // if current_item is array/object, move
+     593              :                     // its children to the stack to be processed later
+     594          360 :                     if (current_item.is_array())
+     595              :                     {
+     596            0 :                         std::move(current_item.m_data.m_value.array->begin(), current_item.m_data.m_value.array->end(), std::back_inserter(stack));
+     597              : 
+     598            0 :                         current_item.m_data.m_value.array->clear();
+     599              :                     }
+     600          360 :                     else if (current_item.is_object())
+     601              :                     {
+     602           40 :                         for (auto&& it : *current_item.m_data.m_value.object)
+     603              :                         {
+     604           24 :                             stack.push_back(std::move(it.second));
+     605              :                         }
+     606              : 
+     607           16 :                         current_item.m_data.m_value.object->clear();
+     608              :                     }
+     609              : 
+     610              :                     // it's now safe that current_item get destructed
+     611              :                     // since it doesn't have any children
+     612              :                 }
+     613          216 :             }
+     614              : 
+     615         2056 :             switch (t)
+     616              :             {
+     617          102 :                 case value_t::object:
+     618              :                 {
+     619              :                     AllocatorType<object_t> alloc;
+     620          102 :                     std::allocator_traits<decltype(alloc)>::destroy(alloc, object);
+     621          102 :                     std::allocator_traits<decltype(alloc)>::deallocate(alloc, object, 1);
+     622          102 :                     break;
+     623              :                 }
+     624              : 
+     625          114 :                 case value_t::array:
+     626              :                 {
+     627              :                     AllocatorType<array_t> alloc;
+     628          114 :                     std::allocator_traits<decltype(alloc)>::destroy(alloc, array);
+     629          114 :                     std::allocator_traits<decltype(alloc)>::deallocate(alloc, array, 1);
+     630          114 :                     break;
+     631              :                 }
+     632              : 
+     633          230 :                 case value_t::string:
+     634              :                 {
+     635              :                     AllocatorType<string_t> alloc;
+     636          230 :                     std::allocator_traits<decltype(alloc)>::destroy(alloc, string);
+     637          230 :                     std::allocator_traits<decltype(alloc)>::deallocate(alloc, string, 1);
+     638          230 :                     break;
+     639              :                 }
+     640              : 
+     641            0 :                 case value_t::binary:
+     642              :                 {
+     643              :                     AllocatorType<binary_t> alloc;
+     644            0 :                     std::allocator_traits<decltype(alloc)>::destroy(alloc, binary);
+     645            0 :                     std::allocator_traits<decltype(alloc)>::deallocate(alloc, binary, 1);
+     646            0 :                     break;
+     647              :                 }
+     648              : 
+     649         1610 :                 case value_t::null:
+     650              :                 case value_t::boolean:
+     651              :                 case value_t::number_integer:
+     652              :                 case value_t::number_unsigned:
+     653              :                 case value_t::number_float:
+     654              :                 case value_t::discarded:
+     655              :                 default:
+     656              :                 {
+     657         1610 :                     break;
+     658              :                 }
+     659              :             }
+     660              :         }
+     661              :     };
+     662              : 
+     663              :   private:
+     664              :     /*!
+     665              :     @brief checks the class invariants
+     666              : 
+     667              :     This function asserts the class invariants. It needs to be called at the
+     668              :     end of every constructor to make sure that created objects respect the
+     669              :     invariant. Furthermore, it has to be called each time the type of a JSON
+     670              :     value is changed, because the invariant expresses a relationship between
+     671              :     @a m_type and @a m_value.
+     672              : 
+     673              :     Furthermore, the parent relation is checked for arrays and objects: If
+     674              :     @a check_parents true and the value is an array or object, then the
+     675              :     container's elements must have the current value as parent.
+     676              : 
+     677              :     @param[in] check_parents  whether the parent relation should be checked.
+     678              :                The value is true by default and should only be set to false
+     679              :                during destruction of objects when the invariant does not
+     680              :                need to hold.
+     681              :     */
+     682         5228 :     void assert_invariant(bool check_parents = true) const noexcept
+     683              :     {
+     684         5228 :         JSON_ASSERT(m_data.m_type != value_t::object || m_data.m_value.object != nullptr);
+     685         5228 :         JSON_ASSERT(m_data.m_type != value_t::array || m_data.m_value.array != nullptr);
+     686         5228 :         JSON_ASSERT(m_data.m_type != value_t::string || m_data.m_value.string != nullptr);
+     687         5228 :         JSON_ASSERT(m_data.m_type != value_t::binary || m_data.m_value.binary != nullptr);
+     688              : 
+     689              : #if JSON_DIAGNOSTICS
+     690              :         JSON_TRY
+     691              :         {
+     692              :             // cppcheck-suppress assertWithSideEffect
+     693              :             JSON_ASSERT(!check_parents || !is_structured() || std::all_of(begin(), end(), [this](const basic_json & j)
+     694              :             {
+     695              :                 return j.m_parent == this;
+     696              :             }));
+     697              :         }
+     698              :         JSON_CATCH(...) {} // LCOV_EXCL_LINE
+     699              : #endif
+     700              :         static_cast<void>(check_parents);
+     701         5228 :     }
+     702              : 
+     703         1798 :     void set_parents()
+     704              :     {
+     705              : #if JSON_DIAGNOSTICS
+     706              :         switch (m_data.m_type)
+     707              :         {
+     708              :             case value_t::array:
+     709              :             {
+     710              :                 for (auto& element : *m_data.m_value.array)
+     711              :                 {
+     712              :                     element.m_parent = this;
+     713              :                 }
+     714              :                 break;
+     715              :             }
+     716              : 
+     717              :             case value_t::object:
+     718              :             {
+     719              :                 for (auto& element : *m_data.m_value.object)
+     720              :                 {
+     721              :                     element.second.m_parent = this;
+     722              :                 }
+     723              :                 break;
+     724              :             }
+     725              : 
+     726              :             case value_t::null:
+     727              :             case value_t::string:
+     728              :             case value_t::boolean:
+     729              :             case value_t::number_integer:
+     730              :             case value_t::number_unsigned:
+     731              :             case value_t::number_float:
+     732              :             case value_t::binary:
+     733              :             case value_t::discarded:
+     734              :             default:
+     735              :                 break;
+     736              :         }
+     737              : #endif
+     738         1798 :     }
+     739              : 
+     740              :     iterator set_parents(iterator it, typename iterator::difference_type count_set_parents)
+     741              :     {
+     742              : #if JSON_DIAGNOSTICS
+     743              :         for (typename iterator::difference_type i = 0; i < count_set_parents; ++i)
+     744              :         {
+     745              :             (it + i)->m_parent = this;
+     746              :         }
+     747              : #else
+     748              :         static_cast<void>(count_set_parents);
+     749              : #endif
+     750              :         return it;
+     751              :     }
+     752              : 
+     753          116 :     reference set_parent(reference j, std::size_t old_capacity = static_cast<std::size_t>(-1))
+     754              :     {
+     755              : #if JSON_DIAGNOSTICS
+     756              :         if (old_capacity != static_cast<std::size_t>(-1))
+     757              :         {
+     758              :             // see https://github.com/nlohmann/json/issues/2838
+     759              :             JSON_ASSERT(type() == value_t::array);
+     760              :             if (JSON_HEDLEY_UNLIKELY(m_data.m_value.array->capacity() != old_capacity))
+     761              :             {
+     762              :                 // capacity has changed: update all parents
+     763              :                 set_parents();
+     764              :                 return j;
+     765              :             }
+     766              :         }
+     767              : 
+     768              :         // ordered_json uses a vector internally, so pointers could have
+     769              :         // been invalidated; see https://github.com/nlohmann/json/issues/2962
+     770              : #ifdef JSON_HEDLEY_MSVC_VERSION
+     771              : #pragma warning(push )
+     772              : #pragma warning(disable : 4127) // ignore warning to replace if with if constexpr
+     773              : #endif
+     774              :         if (detail::is_ordered_map<object_t>::value)
+     775              :         {
+     776              :             set_parents();
+     777              :             return j;
+     778              :         }
+     779              : #ifdef JSON_HEDLEY_MSVC_VERSION
+     780              : #pragma warning( pop )
+     781              : #endif
+     782              : 
+     783              :         j.m_parent = this;
+     784              : #else
+     785              :         static_cast<void>(j);
+     786              :         static_cast<void>(old_capacity);
+     787              : #endif
+     788          116 :         return j;
+     789              :     }
+     790              : 
+     791              :   public:
+     792              :     //////////////////////////
+     793              :     // JSON parser callback //
+     794              :     //////////////////////////
+     795              : 
+     796              :     /// @brief parser event types
+     797              :     /// @sa https://json.nlohmann.me/api/basic_json/parse_event_t/
+     798              :     using parse_event_t = detail::parse_event_t;
+     799              : 
+     800              :     /// @brief per-element parser callback type
+     801              :     /// @sa https://json.nlohmann.me/api/basic_json/parser_callback_t/
+     802              :     using parser_callback_t = detail::parser_callback_t<basic_json>;
+     803              : 
+     804              :     //////////////////
+     805              :     // constructors //
+     806              :     //////////////////
+     807              : 
+     808              :     /// @name constructors and destructors
+     809              :     /// Constructors of class @ref basic_json, copy/move constructor, copy
+     810              :     /// assignment, static functions creating objects, and the destructor.
+     811              :     /// @{
+     812              : 
+     813              :     /// @brief create an empty value with a given type
+     814              :     /// @sa https://json.nlohmann.me/api/basic_json/basic_json/
+     815            0 :     basic_json(const value_t v)
+     816            0 :         : m_data(v)
+     817              :     {
+     818            0 :         assert_invariant();
+     819            0 :     }
+     820              : 
+     821              :     /// @brief create a null object
+     822              :     /// @sa https://json.nlohmann.me/api/basic_json/basic_json/
+     823            0 :     basic_json(std::nullptr_t = nullptr) noexcept // NOLINT(bugprone-exception-escape)
+     824            0 :         : basic_json(value_t::null)
+     825              :     {
+     826            0 :         assert_invariant();
+     827            0 :     }
+     828              : 
+     829              :     /// @brief create a JSON value from compatible types
+     830              :     /// @sa https://json.nlohmann.me/api/basic_json/basic_json/
+     831              :     template < typename CompatibleType,
+     832              :                typename U = detail::uncvref_t<CompatibleType>,
+     833              :                detail::enable_if_t <
+     834              :                    !detail::is_basic_json<U>::value && detail::is_compatible_type<basic_json_t, U>::value, int > = 0 >
+     835          260 :     basic_json(CompatibleType && val) noexcept(noexcept( // NOLINT(bugprone-forwarding-reference-overload,bugprone-exception-escape)
+     836              :                 JSONSerializer<U>::to_json(std::declval<basic_json_t&>(),
+     837              :                                            std::forward<CompatibleType>(val))))
+     838          260 :     {
+     839          260 :         JSONSerializer<U>::to_json(*this, std::forward<CompatibleType>(val));
+     840          260 :         set_parents();
+     841          260 :         assert_invariant();
+     842          260 :     }
+     843              : 
+     844              :     /// @brief create a JSON value from an existing one
+     845              :     /// @sa https://json.nlohmann.me/api/basic_json/basic_json/
+     846              :     template < typename BasicJsonType,
+     847              :                detail::enable_if_t <
+     848              :                    detail::is_basic_json<BasicJsonType>::value&& !std::is_same<basic_json, BasicJsonType>::value, int > = 0 >
+     849              :     basic_json(const BasicJsonType& val)
+     850              :     {
+     851              :         using other_boolean_t = typename BasicJsonType::boolean_t;
+     852              :         using other_number_float_t = typename BasicJsonType::number_float_t;
+     853              :         using other_number_integer_t = typename BasicJsonType::number_integer_t;
+     854              :         using other_number_unsigned_t = typename BasicJsonType::number_unsigned_t;
+     855              :         using other_string_t = typename BasicJsonType::string_t;
+     856              :         using other_object_t = typename BasicJsonType::object_t;
+     857              :         using other_array_t = typename BasicJsonType::array_t;
+     858              :         using other_binary_t = typename BasicJsonType::binary_t;
+     859              : 
+     860              :         switch (val.type())
+     861              :         {
+     862              :             case value_t::boolean:
+     863              :                 JSONSerializer<other_boolean_t>::to_json(*this, val.template get<other_boolean_t>());
+     864              :                 break;
+     865              :             case value_t::number_float:
+     866              :                 JSONSerializer<other_number_float_t>::to_json(*this, val.template get<other_number_float_t>());
+     867              :                 break;
+     868              :             case value_t::number_integer:
+     869              :                 JSONSerializer<other_number_integer_t>::to_json(*this, val.template get<other_number_integer_t>());
+     870              :                 break;
+     871              :             case value_t::number_unsigned:
+     872              :                 JSONSerializer<other_number_unsigned_t>::to_json(*this, val.template get<other_number_unsigned_t>());
+     873              :                 break;
+     874              :             case value_t::string:
+     875              :                 JSONSerializer<other_string_t>::to_json(*this, val.template get_ref<const other_string_t&>());
+     876              :                 break;
+     877              :             case value_t::object:
+     878              :                 JSONSerializer<other_object_t>::to_json(*this, val.template get_ref<const other_object_t&>());
+     879              :                 break;
+     880              :             case value_t::array:
+     881              :                 JSONSerializer<other_array_t>::to_json(*this, val.template get_ref<const other_array_t&>());
+     882              :                 break;
+     883              :             case value_t::binary:
+     884              :                 JSONSerializer<other_binary_t>::to_json(*this, val.template get_ref<const other_binary_t&>());
+     885              :                 break;
+     886              :             case value_t::null:
+     887              :                 *this = nullptr;
+     888              :                 break;
+     889              :             case value_t::discarded:
+     890              :                 m_data.m_type = value_t::discarded;
+     891              :                 break;
+     892              :             default:            // LCOV_EXCL_LINE
+     893              :                 JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
+     894              :         }
+     895              :         JSON_ASSERT(m_data.m_type == val.type());
+     896              :         set_parents();
+     897              :         assert_invariant();
+     898              :     }
+     899              : 
+     900              :     /// @brief create a container (array or object) from an initializer list
+     901              :     /// @sa https://json.nlohmann.me/api/basic_json/basic_json/
+     902          164 :     basic_json(initializer_list_t init,
+     903              :                bool type_deduction = true,
+     904              :                value_t manual_type = value_t::array)
+     905          164 :     {
+     906              :         // check if each element is an array with two elements whose first
+     907              :         // element is a string
+     908          164 :         bool is_an_object = std::all_of(init.begin(), init.end(),
+     909          224 :                                         [](const detail::json_ref<basic_json>& element_ref)
+     910              :         {
+     911              :             // The cast is to ensure op[size_type] is called, bearing in mind size_type may not be int;
+     912              :             // (many string types can be constructed from 0 via its null-pointer guise, so we get a
+     913              :             // broken call to op[key_type], the wrong semantics and a 4804 warning on Windows)
+     914          224 :             return element_ref->is_array() && element_ref->size() == 2 && (*element_ref)[static_cast<size_type>(0)].is_string();
+     915              :         });
+     916              : 
+     917              :         // adjust type if type deduction is not wanted
+     918          164 :         if (!type_deduction)
+     919              :         {
+     920              :             // if array is wanted, do not create an object though possible
+     921            0 :             if (manual_type == value_t::array)
+     922              :             {
+     923            0 :                 is_an_object = false;
+     924              :             }
+     925              : 
+     926              :             // if object is wanted but impossible, throw an exception
+     927            0 :             if (JSON_HEDLEY_UNLIKELY(manual_type == value_t::object && !is_an_object))
+     928              :             {
+     929            0 :                 JSON_THROW(type_error::create(301, "cannot create object from initializer list", nullptr));
+     930              :             }
+     931              :         }
+     932              : 
+     933          164 :         if (is_an_object)
+     934              :         {
+     935              :             // the initializer list is a list of pairs -> create object
+     936           50 :             m_data.m_type = value_t::object;
+     937           50 :             m_data.m_value = value_t::object;
+     938              : 
+     939          160 :             for (auto& element_ref : init)
+     940              :             {
+     941          110 :                 auto element = element_ref.moved_or_copied();
+     942          110 :                 m_data.m_value.object->emplace(
+     943          110 :                     std::move(*((*element.m_data.m_value.array)[0].m_data.m_value.string)),
+     944          110 :                     std::move((*element.m_data.m_value.array)[1]));
+     945              :             }
+     946              :         }
+     947              :         else
+     948              :         {
+     949              :             // the initializer list describes an array -> create array
+     950          114 :             m_data.m_type = value_t::array;
+     951          114 :             m_data.m_value.array = create<array_t>(init.begin(), init.end());
+     952              :         }
+     953              : 
+     954          164 :         set_parents();
+     955          164 :         assert_invariant();
+     956          164 :     }
+     957              : 
+     958              :     /// @brief explicitly create a binary array (without subtype)
+     959              :     /// @sa https://json.nlohmann.me/api/basic_json/binary/
+     960              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+     961              :     static basic_json binary(const typename binary_t::container_type& init)
+     962              :     {
+     963              :         auto res = basic_json();
+     964              :         res.m_data.m_type = value_t::binary;
+     965              :         res.m_data.m_value = init;
+     966              :         return res;
+     967              :     }
+     968              : 
+     969              :     /// @brief explicitly create a binary array (with subtype)
+     970              :     /// @sa https://json.nlohmann.me/api/basic_json/binary/
+     971              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+     972              :     static basic_json binary(const typename binary_t::container_type& init, typename binary_t::subtype_type subtype)
+     973              :     {
+     974              :         auto res = basic_json();
+     975              :         res.m_data.m_type = value_t::binary;
+     976              :         res.m_data.m_value = binary_t(init, subtype);
+     977              :         return res;
+     978              :     }
+     979              : 
+     980              :     /// @brief explicitly create a binary array
+     981              :     /// @sa https://json.nlohmann.me/api/basic_json/binary/
+     982              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+     983              :     static basic_json binary(typename binary_t::container_type&& init)
+     984              :     {
+     985              :         auto res = basic_json();
+     986              :         res.m_data.m_type = value_t::binary;
+     987              :         res.m_data.m_value = std::move(init);
+     988              :         return res;
+     989              :     }
+     990              : 
+     991              :     /// @brief explicitly create a binary array (with subtype)
+     992              :     /// @sa https://json.nlohmann.me/api/basic_json/binary/
+     993              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+     994              :     static basic_json binary(typename binary_t::container_type&& init, typename binary_t::subtype_type subtype)
+     995              :     {
+     996              :         auto res = basic_json();
+     997              :         res.m_data.m_type = value_t::binary;
+     998              :         res.m_data.m_value = binary_t(std::move(init), subtype);
+     999              :         return res;
+    1000              :     }
+    1001              : 
+    1002              :     /// @brief explicitly create an array from an initializer list
+    1003              :     /// @sa https://json.nlohmann.me/api/basic_json/array/
+    1004              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    1005              :     static basic_json array(initializer_list_t init = {})
+    1006              :     {
+    1007              :         return basic_json(init, false, value_t::array);
+    1008              :     }
+    1009              : 
+    1010              :     /// @brief explicitly create an object from an initializer list
+    1011              :     /// @sa https://json.nlohmann.me/api/basic_json/object/
+    1012              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    1013              :     static basic_json object(initializer_list_t init = {})
+    1014              :     {
+    1015              :         return basic_json(init, false, value_t::object);
+    1016              :     }
+    1017              : 
+    1018              :     /// @brief construct an array with count copies of given value
+    1019              :     /// @sa https://json.nlohmann.me/api/basic_json/basic_json/
+    1020              :     basic_json(size_type cnt, const basic_json& val):
+    1021              :         m_data{cnt, val}
+    1022              :     {
+    1023              :         set_parents();
+    1024              :         assert_invariant();
+    1025              :     }
+    1026              : 
+    1027              :     /// @brief construct a JSON container given an iterator range
+    1028              :     /// @sa https://json.nlohmann.me/api/basic_json/basic_json/
+    1029              :     template < class InputIT, typename std::enable_if <
+    1030              :                    std::is_same<InputIT, typename basic_json_t::iterator>::value ||
+    1031              :                    std::is_same<InputIT, typename basic_json_t::const_iterator>::value, int >::type = 0 >
+    1032              :     basic_json(InputIT first, InputIT last)
+    1033              :     {
+    1034              :         JSON_ASSERT(first.m_object != nullptr);
+    1035              :         JSON_ASSERT(last.m_object != nullptr);
+    1036              : 
+    1037              :         // make sure iterator fits the current value
+    1038              :         if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object))
+    1039              :         {
+    1040              :             JSON_THROW(invalid_iterator::create(201, "iterators are not compatible", nullptr));
+    1041              :         }
+    1042              : 
+    1043              :         // copy type from first iterator
+    1044              :         m_data.m_type = first.m_object->m_data.m_type;
+    1045              : 
+    1046              :         // check if iterator range is complete for primitive values
+    1047              :         switch (m_data.m_type)
+    1048              :         {
+    1049              :             case value_t::boolean:
+    1050              :             case value_t::number_float:
+    1051              :             case value_t::number_integer:
+    1052              :             case value_t::number_unsigned:
+    1053              :             case value_t::string:
+    1054              :             {
+    1055              :                 if (JSON_HEDLEY_UNLIKELY(!first.m_it.primitive_iterator.is_begin()
+    1056              :                                          || !last.m_it.primitive_iterator.is_end()))
+    1057              :                 {
+    1058              :                     JSON_THROW(invalid_iterator::create(204, "iterators out of range", first.m_object));
+    1059              :                 }
+    1060              :                 break;
+    1061              :             }
+    1062              : 
+    1063              :             case value_t::null:
+    1064              :             case value_t::object:
+    1065              :             case value_t::array:
+    1066              :             case value_t::binary:
+    1067              :             case value_t::discarded:
+    1068              :             default:
+    1069              :                 break;
+    1070              :         }
+    1071              : 
+    1072              :         switch (m_data.m_type)
+    1073              :         {
+    1074              :             case value_t::number_integer:
+    1075              :             {
+    1076              :                 m_data.m_value.number_integer = first.m_object->m_data.m_value.number_integer;
+    1077              :                 break;
+    1078              :             }
+    1079              : 
+    1080              :             case value_t::number_unsigned:
+    1081              :             {
+    1082              :                 m_data.m_value.number_unsigned = first.m_object->m_data.m_value.number_unsigned;
+    1083              :                 break;
+    1084              :             }
+    1085              : 
+    1086              :             case value_t::number_float:
+    1087              :             {
+    1088              :                 m_data.m_value.number_float = first.m_object->m_data.m_value.number_float;
+    1089              :                 break;
+    1090              :             }
+    1091              : 
+    1092              :             case value_t::boolean:
+    1093              :             {
+    1094              :                 m_data.m_value.boolean = first.m_object->m_data.m_value.boolean;
+    1095              :                 break;
+    1096              :             }
+    1097              : 
+    1098              :             case value_t::string:
+    1099              :             {
+    1100              :                 m_data.m_value = *first.m_object->m_data.m_value.string;
+    1101              :                 break;
+    1102              :             }
+    1103              : 
+    1104              :             case value_t::object:
+    1105              :             {
+    1106              :                 m_data.m_value.object = create<object_t>(first.m_it.object_iterator,
+    1107              :                                         last.m_it.object_iterator);
+    1108              :                 break;
+    1109              :             }
+    1110              : 
+    1111              :             case value_t::array:
+    1112              :             {
+    1113              :                 m_data.m_value.array = create<array_t>(first.m_it.array_iterator,
+    1114              :                                                        last.m_it.array_iterator);
+    1115              :                 break;
+    1116              :             }
+    1117              : 
+    1118              :             case value_t::binary:
+    1119              :             {
+    1120              :                 m_data.m_value = *first.m_object->m_data.m_value.binary;
+    1121              :                 break;
+    1122              :             }
+    1123              : 
+    1124              :             case value_t::null:
+    1125              :             case value_t::discarded:
+    1126              :             default:
+    1127              :                 JSON_THROW(invalid_iterator::create(206, detail::concat("cannot construct with iterators from ", first.m_object->type_name()), first.m_object));
+    1128              :         }
+    1129              : 
+    1130              :         set_parents();
+    1131              :         assert_invariant();
+    1132              :     }
+    1133              : 
+    1134              :     ///////////////////////////////////////
+    1135              :     // other constructors and destructor //
+    1136              :     ///////////////////////////////////////
+    1137              : 
+    1138              :     template<typename JsonRef,
+    1139              :              detail::enable_if_t<detail::conjunction<detail::is_json_ref<JsonRef>,
+    1140              :                                  std::is_same<typename JsonRef::value_type, basic_json>>::value, int> = 0 >
+    1141          236 :     basic_json(const JsonRef& ref) : basic_json(ref.moved_or_copied()) {}
+    1142              : 
+    1143              :     /// @brief copy constructor
+    1144              :     /// @sa https://json.nlohmann.me/api/basic_json/basic_json/
+    1145          188 :     basic_json(const basic_json& other)
+    1146          188 :         : json_base_class_t(other)
+    1147              :     {
+    1148          188 :         m_data.m_type = other.m_data.m_type;
+    1149              :         // check of passed value is valid
+    1150          188 :         other.assert_invariant();
+    1151              : 
+    1152          188 :         switch (m_data.m_type)
+    1153              :         {
+    1154           52 :             case value_t::object:
+    1155              :             {
+    1156           52 :                 m_data.m_value = *other.m_data.m_value.object;
+    1157           52 :                 break;
+    1158              :             }
+    1159              : 
+    1160            0 :             case value_t::array:
+    1161              :             {
+    1162            0 :                 m_data.m_value = *other.m_data.m_value.array;
+    1163            0 :                 break;
+    1164              :             }
+    1165              : 
+    1166           50 :             case value_t::string:
+    1167              :             {
+    1168           50 :                 m_data.m_value = *other.m_data.m_value.string;
+    1169           50 :                 break;
+    1170              :             }
+    1171              : 
+    1172           48 :             case value_t::boolean:
+    1173              :             {
+    1174           48 :                 m_data.m_value = other.m_data.m_value.boolean;
+    1175           48 :                 break;
+    1176              :             }
+    1177              : 
+    1178           24 :             case value_t::number_integer:
+    1179              :             {
+    1180           24 :                 m_data.m_value = other.m_data.m_value.number_integer;
+    1181           24 :                 break;
+    1182              :             }
+    1183              : 
+    1184            0 :             case value_t::number_unsigned:
+    1185              :             {
+    1186            0 :                 m_data.m_value = other.m_data.m_value.number_unsigned;
+    1187            0 :                 break;
+    1188              :             }
+    1189              : 
+    1190           14 :             case value_t::number_float:
+    1191              :             {
+    1192           14 :                 m_data.m_value = other.m_data.m_value.number_float;
+    1193           14 :                 break;
+    1194              :             }
+    1195              : 
+    1196            0 :             case value_t::binary:
+    1197              :             {
+    1198            0 :                 m_data.m_value = *other.m_data.m_value.binary;
+    1199            0 :                 break;
+    1200              :             }
+    1201              : 
+    1202            0 :             case value_t::null:
+    1203              :             case value_t::discarded:
+    1204              :             default:
+    1205            0 :                 break;
+    1206              :         }
+    1207              : 
+    1208          188 :         set_parents();
+    1209          188 :         assert_invariant();
+    1210          188 :     }
+    1211              : 
+    1212              :     /// @brief move constructor
+    1213              :     /// @sa https://json.nlohmann.me/api/basic_json/basic_json/
+    1214         1184 :     basic_json(basic_json&& other) noexcept
+    1215         1184 :         : json_base_class_t(std::forward<json_base_class_t>(other)),
+    1216         1184 :           m_data(std::move(other.m_data))
+    1217              :     {
+    1218              :         // check that passed value is valid
+    1219         1184 :         other.assert_invariant(false);
+    1220              : 
+    1221              :         // invalidate payload
+    1222         1184 :         other.m_data.m_type = value_t::null;
+    1223         1184 :         other.m_data.m_value = {};
+    1224              : 
+    1225         1184 :         set_parents();
+    1226         1184 :         assert_invariant();
+    1227         1184 :     }
+    1228              : 
+    1229              :     /// @brief copy assignment
+    1230              :     /// @sa https://json.nlohmann.me/api/basic_json/operator=/
+    1231            2 :     basic_json& operator=(basic_json other) noexcept (
+    1232              :         std::is_nothrow_move_constructible<value_t>::value&&
+    1233              :         std::is_nothrow_move_assignable<value_t>::value&&
+    1234              :         std::is_nothrow_move_constructible<json_value>::value&&
+    1235              :         std::is_nothrow_move_assignable<json_value>::value&&
+    1236              :         std::is_nothrow_move_assignable<json_base_class_t>::value
+    1237              :     )
+    1238              :     {
+    1239              :         // check that passed value is valid
+    1240            2 :         other.assert_invariant();
+    1241              : 
+    1242              :         using std::swap;
+    1243            2 :         swap(m_data.m_type, other.m_data.m_type);
+    1244            2 :         swap(m_data.m_value, other.m_data.m_value);
+    1245            2 :         json_base_class_t::operator=(std::move(other));
+    1246              : 
+    1247            2 :         set_parents();
+    1248            2 :         assert_invariant();
+    1249            2 :         return *this;
+    1250              :     }
+    1251              : 
+    1252              :     /// @brief destructor
+    1253              :     /// @sa https://json.nlohmann.me/api/basic_json/~basic_json/
+    1254         1796 :     ~basic_json() noexcept
+    1255              :     {
+    1256         1796 :         assert_invariant(false);
+    1257         1796 :     }
+    1258              : 
+    1259              :     /// @}
+    1260              : 
+    1261              :   public:
+    1262              :     ///////////////////////
+    1263              :     // object inspection //
+    1264              :     ///////////////////////
+    1265              : 
+    1266              :     /// @name object inspection
+    1267              :     /// Functions to inspect the type of a JSON value.
+    1268              :     /// @{
+    1269              : 
+    1270              :     /// @brief serialization
+    1271              :     /// @sa https://json.nlohmann.me/api/basic_json/dump/
+    1272           20 :     string_t dump(const int indent = -1,
+    1273              :                   const char indent_char = ' ',
+    1274              :                   const bool ensure_ascii = false,
+    1275              :                   const error_handler_t error_handler = error_handler_t::strict) const
+    1276              :     {
+    1277           20 :         string_t result;
+    1278           20 :         serializer s(detail::output_adapter<char, string_t>(result), indent_char, error_handler);
+    1279              : 
+    1280           20 :         if (indent >= 0)
+    1281              :         {
+    1282            0 :             s.dump(*this, true, ensure_ascii, static_cast<unsigned int>(indent));
+    1283              :         }
+    1284              :         else
+    1285              :         {
+    1286           20 :             s.dump(*this, false, ensure_ascii, 0);
+    1287              :         }
+    1288              : 
+    1289           40 :         return result;
+    1290           20 :     }
+    1291              : 
+    1292              :     /// @brief return the type of the JSON value (explicit)
+    1293              :     /// @sa https://json.nlohmann.me/api/basic_json/type/
+    1294           76 :     constexpr value_t type() const noexcept
+    1295              :     {
+    1296           76 :         return m_data.m_type;
+    1297              :     }
+    1298              : 
+    1299              :     /// @brief return whether type is primitive
+    1300              :     /// @sa https://json.nlohmann.me/api/basic_json/is_primitive/
+    1301              :     constexpr bool is_primitive() const noexcept
+    1302              :     {
+    1303              :         return is_null() || is_string() || is_boolean() || is_number() || is_binary();
+    1304              :     }
+    1305              : 
+    1306              :     /// @brief return whether type is structured
+    1307              :     /// @sa https://json.nlohmann.me/api/basic_json/is_structured/
+    1308              :     constexpr bool is_structured() const noexcept
+    1309              :     {
+    1310              :         return is_array() || is_object();
+    1311              :     }
+    1312              : 
+    1313              :     /// @brief return whether value is null
+    1314              :     /// @sa https://json.nlohmann.me/api/basic_json/is_null/
+    1315          116 :     constexpr bool is_null() const noexcept
+    1316              :     {
+    1317          116 :         return m_data.m_type == value_t::null;
+    1318              :     }
+    1319              : 
+    1320              :     /// @brief return whether value is a boolean
+    1321              :     /// @sa https://json.nlohmann.me/api/basic_json/is_boolean/
+    1322           96 :     constexpr bool is_boolean() const noexcept
+    1323              :     {
+    1324           96 :         return m_data.m_type == value_t::boolean;
+    1325              :     }
+    1326              : 
+    1327              :     /// @brief return whether value is a number
+    1328              :     /// @sa https://json.nlohmann.me/api/basic_json/is_number/
+    1329            0 :     constexpr bool is_number() const noexcept
+    1330              :     {
+    1331            0 :         return is_number_integer() || is_number_float();
+    1332              :     }
+    1333              : 
+    1334              :     /// @brief return whether value is an integer number
+    1335              :     /// @sa https://json.nlohmann.me/api/basic_json/is_number_integer/
+    1336           24 :     constexpr bool is_number_integer() const noexcept
+    1337              :     {
+    1338           24 :         return m_data.m_type == value_t::number_integer || m_data.m_type == value_t::number_unsigned;
+    1339              :     }
+    1340              : 
+    1341              :     /// @brief return whether value is an unsigned integer number
+    1342              :     /// @sa https://json.nlohmann.me/api/basic_json/is_number_unsigned/
+    1343            0 :     constexpr bool is_number_unsigned() const noexcept
+    1344              :     {
+    1345            0 :         return m_data.m_type == value_t::number_unsigned;
+    1346              :     }
+    1347              : 
+    1348              :     /// @brief return whether value is a floating-point number
+    1349              :     /// @sa https://json.nlohmann.me/api/basic_json/is_number_float/
+    1350           14 :     constexpr bool is_number_float() const noexcept
+    1351              :     {
+    1352           14 :         return m_data.m_type == value_t::number_float;
+    1353              :     }
+    1354              : 
+    1355              :     /// @brief return whether value is an object
+    1356              :     /// @sa https://json.nlohmann.me/api/basic_json/is_object/
+    1357          954 :     constexpr bool is_object() const noexcept
+    1358              :     {
+    1359          954 :         return m_data.m_type == value_t::object;
+    1360              :     }
+    1361              : 
+    1362              :     /// @brief return whether value is an array
+    1363              :     /// @sa https://json.nlohmann.me/api/basic_json/is_array/
+    1364          694 :     constexpr bool is_array() const noexcept
+    1365              :     {
+    1366          694 :         return m_data.m_type == value_t::array;
+    1367              :     }
+    1368              : 
+    1369              :     /// @brief return whether value is a string
+    1370              :     /// @sa https://json.nlohmann.me/api/basic_json/is_string/
+    1371          166 :     constexpr bool is_string() const noexcept
+    1372              :     {
+    1373          166 :         return m_data.m_type == value_t::string;
+    1374              :     }
+    1375              : 
+    1376              :     /// @brief return whether value is a binary array
+    1377              :     /// @sa https://json.nlohmann.me/api/basic_json/is_binary/
+    1378              :     constexpr bool is_binary() const noexcept
+    1379              :     {
+    1380              :         return m_data.m_type == value_t::binary;
+    1381              :     }
+    1382              : 
+    1383              :     /// @brief return whether value is discarded
+    1384              :     /// @sa https://json.nlohmann.me/api/basic_json/is_discarded/
+    1385            0 :     constexpr bool is_discarded() const noexcept
+    1386              :     {
+    1387            0 :         return m_data.m_type == value_t::discarded;
+    1388              :     }
+    1389              : 
+    1390              :     /// @brief return the type of the JSON value (implicit)
+    1391              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_value_t/
+    1392           38 :     constexpr operator value_t() const noexcept
+    1393              :     {
+    1394           38 :         return m_data.m_type;
+    1395              :     }
+    1396              : 
+    1397              :     /// @}
+    1398              : 
+    1399              :   private:
+    1400              :     //////////////////
+    1401              :     // value access //
+    1402              :     //////////////////
+    1403              : 
+    1404              :     /// get a boolean (explicit)
+    1405              :     boolean_t get_impl(boolean_t* /*unused*/) const
+    1406              :     {
+    1407              :         if (JSON_HEDLEY_LIKELY(is_boolean()))
+    1408              :         {
+    1409              :             return m_data.m_value.boolean;
+    1410              :         }
+    1411              : 
+    1412              :         JSON_THROW(type_error::create(302, detail::concat("type must be boolean, but is ", type_name()), this));
+    1413              :     }
+    1414              : 
+    1415              :     /// get a pointer to the value (object)
+    1416              :     object_t* get_impl_ptr(object_t* /*unused*/) noexcept
+    1417              :     {
+    1418              :         return is_object() ? m_data.m_value.object : nullptr;
+    1419              :     }
+    1420              : 
+    1421              :     /// get a pointer to the value (object)
+    1422              :     constexpr const object_t* get_impl_ptr(const object_t* /*unused*/) const noexcept
+    1423              :     {
+    1424              :         return is_object() ? m_data.m_value.object : nullptr;
+    1425              :     }
+    1426              : 
+    1427              :     /// get a pointer to the value (array)
+    1428              :     array_t* get_impl_ptr(array_t* /*unused*/) noexcept
+    1429              :     {
+    1430              :         return is_array() ? m_data.m_value.array : nullptr;
+    1431              :     }
+    1432              : 
+    1433              :     /// get a pointer to the value (array)
+    1434              :     constexpr const array_t* get_impl_ptr(const array_t* /*unused*/) const noexcept
+    1435              :     {
+    1436              :         return is_array() ? m_data.m_value.array : nullptr;
+    1437              :     }
+    1438              : 
+    1439              :     /// get a pointer to the value (string)
+    1440              :     string_t* get_impl_ptr(string_t* /*unused*/) noexcept
+    1441              :     {
+    1442              :         return is_string() ? m_data.m_value.string : nullptr;
+    1443              :     }
+    1444              : 
+    1445              :     /// get a pointer to the value (string)
+    1446           28 :     constexpr const string_t* get_impl_ptr(const string_t* /*unused*/) const noexcept
+    1447              :     {
+    1448           28 :         return is_string() ? m_data.m_value.string : nullptr;
+    1449              :     }
+    1450              : 
+    1451              :     /// get a pointer to the value (boolean)
+    1452              :     boolean_t* get_impl_ptr(boolean_t* /*unused*/) noexcept
+    1453              :     {
+    1454              :         return is_boolean() ? &m_data.m_value.boolean : nullptr;
+    1455              :     }
+    1456              : 
+    1457              :     /// get a pointer to the value (boolean)
+    1458           48 :     constexpr const boolean_t* get_impl_ptr(const boolean_t* /*unused*/) const noexcept
+    1459              :     {
+    1460           48 :         return is_boolean() ? &m_data.m_value.boolean : nullptr;
+    1461              :     }
+    1462              : 
+    1463              :     /// get a pointer to the value (integer number)
+    1464              :     number_integer_t* get_impl_ptr(number_integer_t* /*unused*/) noexcept
+    1465              :     {
+    1466              :         return is_number_integer() ? &m_data.m_value.number_integer : nullptr;
+    1467              :     }
+    1468              : 
+    1469              :     /// get a pointer to the value (integer number)
+    1470           24 :     constexpr const number_integer_t* get_impl_ptr(const number_integer_t* /*unused*/) const noexcept
+    1471              :     {
+    1472           24 :         return is_number_integer() ? &m_data.m_value.number_integer : nullptr;
+    1473              :     }
+    1474              : 
+    1475              :     /// get a pointer to the value (unsigned number)
+    1476              :     number_unsigned_t* get_impl_ptr(number_unsigned_t* /*unused*/) noexcept
+    1477              :     {
+    1478              :         return is_number_unsigned() ? &m_data.m_value.number_unsigned : nullptr;
+    1479              :     }
+    1480              : 
+    1481              :     /// get a pointer to the value (unsigned number)
+    1482            0 :     constexpr const number_unsigned_t* get_impl_ptr(const number_unsigned_t* /*unused*/) const noexcept
+    1483              :     {
+    1484            0 :         return is_number_unsigned() ? &m_data.m_value.number_unsigned : nullptr;
+    1485              :     }
+    1486              : 
+    1487              :     /// get a pointer to the value (floating-point number)
+    1488              :     number_float_t* get_impl_ptr(number_float_t* /*unused*/) noexcept
+    1489              :     {
+    1490              :         return is_number_float() ? &m_data.m_value.number_float : nullptr;
+    1491              :     }
+    1492              : 
+    1493              :     /// get a pointer to the value (floating-point number)
+    1494           14 :     constexpr const number_float_t* get_impl_ptr(const number_float_t* /*unused*/) const noexcept
+    1495              :     {
+    1496           14 :         return is_number_float() ? &m_data.m_value.number_float : nullptr;
+    1497              :     }
+    1498              : 
+    1499              :     /// get a pointer to the value (binary)
+    1500              :     binary_t* get_impl_ptr(binary_t* /*unused*/) noexcept
+    1501              :     {
+    1502              :         return is_binary() ? m_data.m_value.binary : nullptr;
+    1503              :     }
+    1504              : 
+    1505              :     /// get a pointer to the value (binary)
+    1506              :     constexpr const binary_t* get_impl_ptr(const binary_t* /*unused*/) const noexcept
+    1507              :     {
+    1508              :         return is_binary() ? m_data.m_value.binary : nullptr;
+    1509              :     }
+    1510              : 
+    1511              :     /*!
+    1512              :     @brief helper function to implement get_ref()
+    1513              : 
+    1514              :     This function helps to implement get_ref() without code duplication for
+    1515              :     const and non-const overloads
+    1516              : 
+    1517              :     @tparam ThisType will be deduced as `basic_json` or `const basic_json`
+    1518              : 
+    1519              :     @throw type_error.303 if ReferenceType does not match underlying value
+    1520              :     type of the current JSON
+    1521              :     */
+    1522              :     template<typename ReferenceType, typename ThisType>
+    1523              :     static ReferenceType get_ref_impl(ThisType& obj)
+    1524              :     {
+    1525              :         // delegate the call to get_ptr<>()
+    1526              :         auto* ptr = obj.template get_ptr<typename std::add_pointer<ReferenceType>::type>();
+    1527              : 
+    1528              :         if (JSON_HEDLEY_LIKELY(ptr != nullptr))
+    1529              :         {
+    1530              :             return *ptr;
+    1531              :         }
+    1532              : 
+    1533              :         JSON_THROW(type_error::create(303, detail::concat("incompatible ReferenceType for get_ref, actual type is ", obj.type_name()), &obj));
+    1534              :     }
+    1535              : 
+    1536              :   public:
+    1537              :     /// @name value access
+    1538              :     /// Direct access to the stored value of a JSON value.
+    1539              :     /// @{
+    1540              : 
+    1541              :     /// @brief get a pointer value (implicit)
+    1542              :     /// @sa https://json.nlohmann.me/api/basic_json/get_ptr/
+    1543              :     template<typename PointerType, typename std::enable_if<
+    1544              :                  std::is_pointer<PointerType>::value, int>::type = 0>
+    1545              :     auto get_ptr() noexcept -> decltype(std::declval<basic_json_t&>().get_impl_ptr(std::declval<PointerType>()))
+    1546              :     {
+    1547              :         // delegate the call to get_impl_ptr<>()
+    1548              :         return get_impl_ptr(static_cast<PointerType>(nullptr));
+    1549              :     }
+    1550              : 
+    1551              :     /// @brief get a pointer value (implicit)
+    1552              :     /// @sa https://json.nlohmann.me/api/basic_json/get_ptr/
+    1553              :     template < typename PointerType, typename std::enable_if <
+    1554              :                    std::is_pointer<PointerType>::value&&
+    1555              :                    std::is_const<typename std::remove_pointer<PointerType>::type>::value, int >::type = 0 >
+    1556          114 :     constexpr auto get_ptr() const noexcept -> decltype(std::declval<const basic_json_t&>().get_impl_ptr(std::declval<PointerType>()))
+    1557              :     {
+    1558              :         // delegate the call to get_impl_ptr<>() const
+    1559          114 :         return get_impl_ptr(static_cast<PointerType>(nullptr));
+    1560              :     }
+    1561              : 
+    1562              :   private:
+    1563              :     /*!
+    1564              :     @brief get a value (explicit)
+    1565              : 
+    1566              :     Explicit type conversion between the JSON value and a compatible value
+    1567              :     which is [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible)
+    1568              :     and [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible).
+    1569              :     The value is converted by calling the @ref json_serializer<ValueType>
+    1570              :     `from_json()` method.
+    1571              : 
+    1572              :     The function is equivalent to executing
+    1573              :     @code {.cpp}
+    1574              :     ValueType ret;
+    1575              :     JSONSerializer<ValueType>::from_json(*this, ret);
+    1576              :     return ret;
+    1577              :     @endcode
+    1578              : 
+    1579              :     This overloads is chosen if:
+    1580              :     - @a ValueType is not @ref basic_json,
+    1581              :     - @ref json_serializer<ValueType> has a `from_json()` method of the form
+    1582              :       `void from_json(const basic_json&, ValueType&)`, and
+    1583              :     - @ref json_serializer<ValueType> does not have a `from_json()` method of
+    1584              :       the form `ValueType from_json(const basic_json&)`
+    1585              : 
+    1586              :     @tparam ValueType the returned value type
+    1587              : 
+    1588              :     @return copy of the JSON value, converted to @a ValueType
+    1589              : 
+    1590              :     @throw what @ref json_serializer<ValueType> `from_json()` method throws
+    1591              : 
+    1592              :     @liveexample{The example below shows several conversions from JSON values
+    1593              :     to other types. There a few things to note: (1) Floating-point numbers can
+    1594              :     be converted to integers\, (2) A JSON array can be converted to a standard
+    1595              :     `std::vector<short>`\, (3) A JSON object can be converted to C++
+    1596              :     associative containers such as `std::unordered_map<std::string\,
+    1597              :     json>`.,get__ValueType_const}
+    1598              : 
+    1599              :     @since version 2.1.0
+    1600              :     */
+    1601              :     template < typename ValueType,
+    1602              :                detail::enable_if_t <
+    1603              :                    detail::is_default_constructible<ValueType>::value&&
+    1604              :                    detail::has_from_json<basic_json_t, ValueType>::value,
+    1605              :                    int > = 0 >
+    1606          114 :     ValueType get_impl(detail::priority_tag<0> /*unused*/) const noexcept(noexcept(
+    1607              :                 JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>(), std::declval<ValueType&>())))
+    1608              :     {
+    1609          114 :         auto ret = ValueType();
+    1610          114 :         JSONSerializer<ValueType>::from_json(*this, ret);
+    1611          114 :         return ret;
+    1612            0 :     }
+    1613              : 
+    1614              :     /*!
+    1615              :     @brief get a value (explicit); special case
+    1616              : 
+    1617              :     Explicit type conversion between the JSON value and a compatible value
+    1618              :     which is **not** [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible)
+    1619              :     and **not** [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible).
+    1620              :     The value is converted by calling the @ref json_serializer<ValueType>
+    1621              :     `from_json()` method.
+    1622              : 
+    1623              :     The function is equivalent to executing
+    1624              :     @code {.cpp}
+    1625              :     return JSONSerializer<ValueType>::from_json(*this);
+    1626              :     @endcode
+    1627              : 
+    1628              :     This overloads is chosen if:
+    1629              :     - @a ValueType is not @ref basic_json and
+    1630              :     - @ref json_serializer<ValueType> has a `from_json()` method of the form
+    1631              :       `ValueType from_json(const basic_json&)`
+    1632              : 
+    1633              :     @note If @ref json_serializer<ValueType> has both overloads of
+    1634              :     `from_json()`, this one is chosen.
+    1635              : 
+    1636              :     @tparam ValueType the returned value type
+    1637              : 
+    1638              :     @return copy of the JSON value, converted to @a ValueType
+    1639              : 
+    1640              :     @throw what @ref json_serializer<ValueType> `from_json()` method throws
+    1641              : 
+    1642              :     @since version 2.1.0
+    1643              :     */
+    1644              :     template < typename ValueType,
+    1645              :                detail::enable_if_t <
+    1646              :                    detail::has_non_default_from_json<basic_json_t, ValueType>::value,
+    1647              :                    int > = 0 >
+    1648              :     ValueType get_impl(detail::priority_tag<1> /*unused*/) const noexcept(noexcept(
+    1649              :                 JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>())))
+    1650              :     {
+    1651              :         return JSONSerializer<ValueType>::from_json(*this);
+    1652              :     }
+    1653              : 
+    1654              :     /*!
+    1655              :     @brief get special-case overload
+    1656              : 
+    1657              :     This overloads converts the current @ref basic_json in a different
+    1658              :     @ref basic_json type
+    1659              : 
+    1660              :     @tparam BasicJsonType == @ref basic_json
+    1661              : 
+    1662              :     @return a copy of *this, converted into @a BasicJsonType
+    1663              : 
+    1664              :     @complexity Depending on the implementation of the called `from_json()`
+    1665              :                 method.
+    1666              : 
+    1667              :     @since version 3.2.0
+    1668              :     */
+    1669              :     template < typename BasicJsonType,
+    1670              :                detail::enable_if_t <
+    1671              :                    detail::is_basic_json<BasicJsonType>::value,
+    1672              :                    int > = 0 >
+    1673              :     BasicJsonType get_impl(detail::priority_tag<2> /*unused*/) const
+    1674              :     {
+    1675              :         return *this;
+    1676              :     }
+    1677              : 
+    1678              :     /*!
+    1679              :     @brief get special-case overload
+    1680              : 
+    1681              :     This overloads avoids a lot of template boilerplate, it can be seen as the
+    1682              :     identity method
+    1683              : 
+    1684              :     @tparam BasicJsonType == @ref basic_json
+    1685              : 
+    1686              :     @return a copy of *this
+    1687              : 
+    1688              :     @complexity Constant.
+    1689              : 
+    1690              :     @since version 2.1.0
+    1691              :     */
+    1692              :     template<typename BasicJsonType,
+    1693              :              detail::enable_if_t<
+    1694              :                  std::is_same<BasicJsonType, basic_json_t>::value,
+    1695              :                  int> = 0>
+    1696              :     basic_json get_impl(detail::priority_tag<3> /*unused*/) const
+    1697              :     {
+    1698              :         return *this;
+    1699              :     }
+    1700              : 
+    1701              :     /*!
+    1702              :     @brief get a pointer value (explicit)
+    1703              :     @copydoc get()
+    1704              :     */
+    1705              :     template<typename PointerType,
+    1706              :              detail::enable_if_t<
+    1707              :                  std::is_pointer<PointerType>::value,
+    1708              :                  int> = 0>
+    1709              :     constexpr auto get_impl(detail::priority_tag<4> /*unused*/) const noexcept
+    1710              :     -> decltype(std::declval<const basic_json_t&>().template get_ptr<PointerType>())
+    1711              :     {
+    1712              :         // delegate the call to get_ptr
+    1713              :         return get_ptr<PointerType>();
+    1714              :     }
+    1715              : 
+    1716              :   public:
+    1717              :     /*!
+    1718              :     @brief get a (pointer) value (explicit)
+    1719              : 
+    1720              :     Performs explicit type conversion between the JSON value and a compatible value if required.
+    1721              : 
+    1722              :     - If the requested type is a pointer to the internally stored JSON value that pointer is returned.
+    1723              :     No copies are made.
+    1724              : 
+    1725              :     - If the requested type is the current @ref basic_json, or a different @ref basic_json convertible
+    1726              :     from the current @ref basic_json.
+    1727              : 
+    1728              :     - Otherwise the value is converted by calling the @ref json_serializer<ValueType> `from_json()`
+    1729              :     method.
+    1730              : 
+    1731              :     @tparam ValueTypeCV the provided value type
+    1732              :     @tparam ValueType the returned value type
+    1733              : 
+    1734              :     @return copy of the JSON value, converted to @tparam ValueType if necessary
+    1735              : 
+    1736              :     @throw what @ref json_serializer<ValueType> `from_json()` method throws if conversion is required
+    1737              : 
+    1738              :     @since version 2.1.0
+    1739              :     */
+    1740              :     template < typename ValueTypeCV, typename ValueType = detail::uncvref_t<ValueTypeCV>>
+    1741              : #if defined(JSON_HAS_CPP_14)
+    1742              :     constexpr
+    1743              : #endif
+    1744          114 :     auto get() const noexcept(
+    1745              :     noexcept(std::declval<const basic_json_t&>().template get_impl<ValueType>(detail::priority_tag<4> {})))
+    1746              :     -> decltype(std::declval<const basic_json_t&>().template get_impl<ValueType>(detail::priority_tag<4> {}))
+    1747              :     {
+    1748              :         // we cannot static_assert on ValueTypeCV being non-const, because
+    1749              :         // there is support for get<const basic_json_t>(), which is why we
+    1750              :         // still need the uncvref
+    1751              :         static_assert(!std::is_reference<ValueTypeCV>::value,
+    1752              :                       "get() cannot be used with reference types, you might want to use get_ref()");
+    1753          114 :         return get_impl<ValueType>(detail::priority_tag<4> {});
+    1754              :     }
+    1755              : 
+    1756              :     /*!
+    1757              :     @brief get a pointer value (explicit)
+    1758              : 
+    1759              :     Explicit pointer access to the internally stored JSON value. No copies are
+    1760              :     made.
+    1761              : 
+    1762              :     @warning The pointer becomes invalid if the underlying JSON object
+    1763              :     changes.
+    1764              : 
+    1765              :     @tparam PointerType pointer type; must be a pointer to @ref array_t, @ref
+    1766              :     object_t, @ref string_t, @ref boolean_t, @ref number_integer_t,
+    1767              :     @ref number_unsigned_t, or @ref number_float_t.
+    1768              : 
+    1769              :     @return pointer to the internally stored JSON value if the requested
+    1770              :     pointer type @a PointerType fits to the JSON value; `nullptr` otherwise
+    1771              : 
+    1772              :     @complexity Constant.
+    1773              : 
+    1774              :     @liveexample{The example below shows how pointers to internal values of a
+    1775              :     JSON value can be requested. Note that no type conversions are made and a
+    1776              :     `nullptr` is returned if the value and the requested pointer type does not
+    1777              :     match.,get__PointerType}
+    1778              : 
+    1779              :     @sa see @ref get_ptr() for explicit pointer-member access
+    1780              : 
+    1781              :     @since version 1.0.0
+    1782              :     */
+    1783              :     template<typename PointerType, typename std::enable_if<
+    1784              :                  std::is_pointer<PointerType>::value, int>::type = 0>
+    1785              :     auto get() noexcept -> decltype(std::declval<basic_json_t&>().template get_ptr<PointerType>())
+    1786              :     {
+    1787              :         // delegate the call to get_ptr
+    1788              :         return get_ptr<PointerType>();
+    1789              :     }
+    1790              : 
+    1791              :     /// @brief get a value (explicit)
+    1792              :     /// @sa https://json.nlohmann.me/api/basic_json/get_to/
+    1793              :     template < typename ValueType,
+    1794              :                detail::enable_if_t <
+    1795              :                    !detail::is_basic_json<ValueType>::value&&
+    1796              :                    detail::has_from_json<basic_json_t, ValueType>::value,
+    1797              :                    int > = 0 >
+    1798              :     ValueType & get_to(ValueType& v) const noexcept(noexcept(
+    1799              :                 JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>(), v)))
+    1800              :     {
+    1801              :         JSONSerializer<ValueType>::from_json(*this, v);
+    1802              :         return v;
+    1803              :     }
+    1804              : 
+    1805              :     // specialization to allow calling get_to with a basic_json value
+    1806              :     // see https://github.com/nlohmann/json/issues/2175
+    1807              :     template<typename ValueType,
+    1808              :              detail::enable_if_t <
+    1809              :                  detail::is_basic_json<ValueType>::value,
+    1810              :                  int> = 0>
+    1811              :     ValueType & get_to(ValueType& v) const
+    1812              :     {
+    1813              :         v = *this;
+    1814              :         return v;
+    1815              :     }
+    1816              : 
+    1817              :     template <
+    1818              :         typename T, std::size_t N,
+    1819              :         typename Array = T (&)[N], // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
+    1820              :         detail::enable_if_t <
+    1821              :             detail::has_from_json<basic_json_t, Array>::value, int > = 0 >
+    1822              :     Array get_to(T (&v)[N]) const // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
+    1823              :     noexcept(noexcept(JSONSerializer<Array>::from_json(
+    1824              :                           std::declval<const basic_json_t&>(), v)))
+    1825              :     {
+    1826              :         JSONSerializer<Array>::from_json(*this, v);
+    1827              :         return v;
+    1828              :     }
+    1829              : 
+    1830              :     /// @brief get a reference value (implicit)
+    1831              :     /// @sa https://json.nlohmann.me/api/basic_json/get_ref/
+    1832              :     template<typename ReferenceType, typename std::enable_if<
+    1833              :                  std::is_reference<ReferenceType>::value, int>::type = 0>
+    1834              :     ReferenceType get_ref()
+    1835              :     {
+    1836              :         // delegate call to get_ref_impl
+    1837              :         return get_ref_impl<ReferenceType>(*this);
+    1838              :     }
+    1839              : 
+    1840              :     /// @brief get a reference value (implicit)
+    1841              :     /// @sa https://json.nlohmann.me/api/basic_json/get_ref/
+    1842              :     template < typename ReferenceType, typename std::enable_if <
+    1843              :                    std::is_reference<ReferenceType>::value&&
+    1844              :                    std::is_const<typename std::remove_reference<ReferenceType>::type>::value, int >::type = 0 >
+    1845              :     ReferenceType get_ref() const
+    1846              :     {
+    1847              :         // delegate call to get_ref_impl
+    1848              :         return get_ref_impl<ReferenceType>(*this);
+    1849              :     }
+    1850              : 
+    1851              :     /*!
+    1852              :     @brief get a value (implicit)
+    1853              : 
+    1854              :     Implicit type conversion between the JSON value and a compatible value.
+    1855              :     The call is realized by calling @ref get() const.
+    1856              : 
+    1857              :     @tparam ValueType non-pointer type compatible to the JSON value, for
+    1858              :     instance `int` for JSON integer numbers, `bool` for JSON booleans, or
+    1859              :     `std::vector` types for JSON arrays. The character type of @ref string_t
+    1860              :     as well as an initializer list of this type is excluded to avoid
+    1861              :     ambiguities as these types implicitly convert to `std::string`.
+    1862              : 
+    1863              :     @return copy of the JSON value, converted to type @a ValueType
+    1864              : 
+    1865              :     @throw type_error.302 in case passed type @a ValueType is incompatible
+    1866              :     to the JSON value type (e.g., the JSON value is of type boolean, but a
+    1867              :     string is requested); see example below
+    1868              : 
+    1869              :     @complexity Linear in the size of the JSON value.
+    1870              : 
+    1871              :     @liveexample{The example below shows several conversions from JSON values
+    1872              :     to other types. There a few things to note: (1) Floating-point numbers can
+    1873              :     be converted to integers\, (2) A JSON array can be converted to a standard
+    1874              :     `std::vector<short>`\, (3) A JSON object can be converted to C++
+    1875              :     associative containers such as `std::unordered_map<std::string\,
+    1876              :     json>`.,operator__ValueType}
+    1877              : 
+    1878              :     @since version 1.0.0
+    1879              :     */
+    1880              :     template < typename ValueType, typename std::enable_if <
+    1881              :                    detail::conjunction <
+    1882              :                        detail::negation<std::is_pointer<ValueType>>,
+    1883              :                        detail::negation<std::is_same<ValueType, std::nullptr_t>>,
+    1884              :                        detail::negation<std::is_same<ValueType, detail::json_ref<basic_json>>>,
+    1885              :                                         detail::negation<std::is_same<ValueType, typename string_t::value_type>>,
+    1886              :                                         detail::negation<detail::is_basic_json<ValueType>>,
+    1887              :                                         detail::negation<std::is_same<ValueType, std::initializer_list<typename string_t::value_type>>>,
+    1888              : #if defined(JSON_HAS_CPP_17) && (defined(__GNUC__) || (defined(_MSC_VER) && _MSC_VER >= 1910 && _MSC_VER <= 1914))
+    1889              :                                                 detail::negation<std::is_same<ValueType, std::string_view>>,
+    1890              : #endif
+    1891              : #if defined(JSON_HAS_CPP_17) && JSON_HAS_STATIC_RTTI
+    1892              :                                                 detail::negation<std::is_same<ValueType, std::any>>,
+    1893              : #endif
+    1894              :                                                 detail::is_detected_lazy<detail::get_template_function, const basic_json_t&, ValueType>
+    1895              :                                                 >::value, int >::type = 0 >
+    1896          114 :                                         JSON_EXPLICIT operator ValueType() const
+    1897              :     {
+    1898              :         // delegate the call to get<>() const
+    1899          114 :         return get<ValueType>();
+    1900              :     }
+    1901              : 
+    1902              :     /// @brief get a binary value
+    1903              :     /// @sa https://json.nlohmann.me/api/basic_json/get_binary/
+    1904              :     binary_t& get_binary()
+    1905              :     {
+    1906              :         if (!is_binary())
+    1907              :         {
+    1908              :             JSON_THROW(type_error::create(302, detail::concat("type must be binary, but is ", type_name()), this));
+    1909              :         }
+    1910              : 
+    1911              :         return *get_ptr<binary_t*>();
+    1912              :     }
+    1913              : 
+    1914              :     /// @brief get a binary value
+    1915              :     /// @sa https://json.nlohmann.me/api/basic_json/get_binary/
+    1916              :     const binary_t& get_binary() const
+    1917              :     {
+    1918              :         if (!is_binary())
+    1919              :         {
+    1920              :             JSON_THROW(type_error::create(302, detail::concat("type must be binary, but is ", type_name()), this));
+    1921              :         }
+    1922              : 
+    1923              :         return *get_ptr<const binary_t*>();
+    1924              :     }
+    1925              : 
+    1926              :     /// @}
+    1927              : 
+    1928              :     ////////////////////
+    1929              :     // element access //
+    1930              :     ////////////////////
+    1931              : 
+    1932              :     /// @name element access
+    1933              :     /// Access to the JSON value.
+    1934              :     /// @{
+    1935              : 
+    1936              :     /// @brief access specified array element with bounds checking
+    1937              :     /// @sa https://json.nlohmann.me/api/basic_json/at/
+    1938              :     reference at(size_type idx)
+    1939              :     {
+    1940              :         // at only works for arrays
+    1941              :         if (JSON_HEDLEY_LIKELY(is_array()))
+    1942              :         {
+    1943              :             JSON_TRY
+    1944              :             {
+    1945              :                 return set_parent(m_data.m_value.array->at(idx));
+    1946              :             }
+    1947              :             JSON_CATCH (std::out_of_range&)
+    1948              :             {
+    1949              :                 // create better exception explanation
+    1950              :                 JSON_THROW(out_of_range::create(401, detail::concat("array index ", std::to_string(idx), " is out of range"), this));
+    1951              :             }
+    1952              :         }
+    1953              :         else
+    1954              :         {
+    1955              :             JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this));
+    1956              :         }
+    1957              :     }
+    1958              : 
+    1959              :     /// @brief access specified array element with bounds checking
+    1960              :     /// @sa https://json.nlohmann.me/api/basic_json/at/
+    1961              :     const_reference at(size_type idx) const
+    1962              :     {
+    1963              :         // at only works for arrays
+    1964              :         if (JSON_HEDLEY_LIKELY(is_array()))
+    1965              :         {
+    1966              :             JSON_TRY
+    1967              :             {
+    1968              :                 return m_data.m_value.array->at(idx);
+    1969              :             }
+    1970              :             JSON_CATCH (std::out_of_range&)
+    1971              :             {
+    1972              :                 // create better exception explanation
+    1973              :                 JSON_THROW(out_of_range::create(401, detail::concat("array index ", std::to_string(idx), " is out of range"), this));
+    1974              :             }
+    1975              :         }
+    1976              :         else
+    1977              :         {
+    1978              :             JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this));
+    1979              :         }
+    1980              :     }
+    1981              : 
+    1982              :     /// @brief access specified object element with bounds checking
+    1983              :     /// @sa https://json.nlohmann.me/api/basic_json/at/
+    1984              :     reference at(const typename object_t::key_type& key)
+    1985              :     {
+    1986              :         // at only works for objects
+    1987              :         if (JSON_HEDLEY_UNLIKELY(!is_object()))
+    1988              :         {
+    1989              :             JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this));
+    1990              :         }
+    1991              : 
+    1992              :         auto it = m_data.m_value.object->find(key);
+    1993              :         if (it == m_data.m_value.object->end())
+    1994              :         {
+    1995              :             JSON_THROW(out_of_range::create(403, detail::concat("key '", key, "' not found"), this));
+    1996              :         }
+    1997              :         return set_parent(it->second);
+    1998              :     }
+    1999              : 
+    2000              :     /// @brief access specified object element with bounds checking
+    2001              :     /// @sa https://json.nlohmann.me/api/basic_json/at/
+    2002              :     template<class KeyType, detail::enable_if_t<
+    2003              :                  detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>
+    2004              :     reference at(KeyType && key)
+    2005              :     {
+    2006              :         // at only works for objects
+    2007              :         if (JSON_HEDLEY_UNLIKELY(!is_object()))
+    2008              :         {
+    2009              :             JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this));
+    2010              :         }
+    2011              : 
+    2012              :         auto it = m_data.m_value.object->find(std::forward<KeyType>(key));
+    2013              :         if (it == m_data.m_value.object->end())
+    2014              :         {
+    2015              :             JSON_THROW(out_of_range::create(403, detail::concat("key '", string_t(std::forward<KeyType>(key)), "' not found"), this));
+    2016              :         }
+    2017              :         return set_parent(it->second);
+    2018              :     }
+    2019              : 
+    2020              :     /// @brief access specified object element with bounds checking
+    2021              :     /// @sa https://json.nlohmann.me/api/basic_json/at/
+    2022              :     const_reference at(const typename object_t::key_type& key) const
+    2023              :     {
+    2024              :         // at only works for objects
+    2025              :         if (JSON_HEDLEY_UNLIKELY(!is_object()))
+    2026              :         {
+    2027              :             JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this));
+    2028              :         }
+    2029              : 
+    2030              :         auto it = m_data.m_value.object->find(key);
+    2031              :         if (it == m_data.m_value.object->end())
+    2032              :         {
+    2033              :             JSON_THROW(out_of_range::create(403, detail::concat("key '", key, "' not found"), this));
+    2034              :         }
+    2035              :         return it->second;
+    2036              :     }
+    2037              : 
+    2038              :     /// @brief access specified object element with bounds checking
+    2039              :     /// @sa https://json.nlohmann.me/api/basic_json/at/
+    2040              :     template<class KeyType, detail::enable_if_t<
+    2041              :                  detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>
+    2042              :     const_reference at(KeyType && key) const
+    2043              :     {
+    2044              :         // at only works for objects
+    2045              :         if (JSON_HEDLEY_UNLIKELY(!is_object()))
+    2046              :         {
+    2047              :             JSON_THROW(type_error::create(304, detail::concat("cannot use at() with ", type_name()), this));
+    2048              :         }
+    2049              : 
+    2050              :         auto it = m_data.m_value.object->find(std::forward<KeyType>(key));
+    2051              :         if (it == m_data.m_value.object->end())
+    2052              :         {
+    2053              :             JSON_THROW(out_of_range::create(403, detail::concat("key '", string_t(std::forward<KeyType>(key)), "' not found"), this));
+    2054              :         }
+    2055              :         return it->second;
+    2056              :     }
+    2057              : 
+    2058              :     /// @brief access specified array element
+    2059              :     /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
+    2060              :     reference operator[](size_type idx)
+    2061              :     {
+    2062              :         // implicitly convert null value to an empty array
+    2063              :         if (is_null())
+    2064              :         {
+    2065              :             m_data.m_type = value_t::array;
+    2066              :             m_data.m_value.array = create<array_t>();
+    2067              :             assert_invariant();
+    2068              :         }
+    2069              : 
+    2070              :         // operator[] only works for arrays
+    2071              :         if (JSON_HEDLEY_LIKELY(is_array()))
+    2072              :         {
+    2073              :             // fill up array with null values if given idx is outside range
+    2074              :             if (idx >= m_data.m_value.array->size())
+    2075              :             {
+    2076              : #if JSON_DIAGNOSTICS
+    2077              :                 // remember array size & capacity before resizing
+    2078              :                 const auto old_size = m_data.m_value.array->size();
+    2079              :                 const auto old_capacity = m_data.m_value.array->capacity();
+    2080              : #endif
+    2081              :                 m_data.m_value.array->resize(idx + 1);
+    2082              : 
+    2083              : #if JSON_DIAGNOSTICS
+    2084              :                 if (JSON_HEDLEY_UNLIKELY(m_data.m_value.array->capacity() != old_capacity))
+    2085              :                 {
+    2086              :                     // capacity has changed: update all parents
+    2087              :                     set_parents();
+    2088              :                 }
+    2089              :                 else
+    2090              :                 {
+    2091              :                     // set parent for values added above
+    2092              :                     set_parents(begin() + static_cast<typename iterator::difference_type>(old_size), static_cast<typename iterator::difference_type>(idx + 1 - old_size));
+    2093              :                 }
+    2094              : #endif
+    2095              :                 assert_invariant();
+    2096              :             }
+    2097              : 
+    2098              :             return m_data.m_value.array->operator[](idx);
+    2099              :         }
+    2100              : 
+    2101              :         JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a numeric argument with ", type_name()), this));
+    2102              :     }
+    2103              : 
+    2104              :     /// @brief access specified array element
+    2105              :     /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
+    2106          110 :     const_reference operator[](size_type idx) const
+    2107              :     {
+    2108              :         // const operator[] only works for arrays
+    2109          110 :         if (JSON_HEDLEY_LIKELY(is_array()))
+    2110              :         {
+    2111          110 :             return m_data.m_value.array->operator[](idx);
+    2112              :         }
+    2113              : 
+    2114            0 :         JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a numeric argument with ", type_name()), this));
+    2115              :     }
+    2116              : 
+    2117              :     /// @brief access specified object element
+    2118              :     /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
+    2119          116 :     reference operator[](typename object_t::key_type key)
+    2120              :     {
+    2121              :         // implicitly convert null value to an empty object
+    2122          116 :         if (is_null())
+    2123              :         {
+    2124            0 :             m_data.m_type = value_t::object;
+    2125            0 :             m_data.m_value.object = create<object_t>();
+    2126            0 :             assert_invariant();
+    2127              :         }
+    2128              : 
+    2129              :         // operator[] only works for objects
+    2130          116 :         if (JSON_HEDLEY_LIKELY(is_object()))
+    2131              :         {
+    2132          116 :             auto result = m_data.m_value.object->emplace(std::move(key), nullptr);
+    2133          232 :             return set_parent(result.first->second);
+    2134              :         }
+    2135              : 
+    2136            0 :         JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a string argument with ", type_name()), this));
+    2137              :     }
+    2138              : 
+    2139              :     /// @brief access specified object element
+    2140              :     /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
+    2141              :     const_reference operator[](const typename object_t::key_type& key) const
+    2142              :     {
+    2143              :         // const operator[] only works for objects
+    2144              :         if (JSON_HEDLEY_LIKELY(is_object()))
+    2145              :         {
+    2146              :             auto it = m_data.m_value.object->find(key);
+    2147              :             JSON_ASSERT(it != m_data.m_value.object->end());
+    2148              :             return it->second;
+    2149              :         }
+    2150              : 
+    2151              :         JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a string argument with ", type_name()), this));
+    2152              :     }
+    2153              : 
+    2154              :     // these two functions resolve a (const) char * ambiguity affecting Clang and MSVC
+    2155              :     // (they seemingly cannot be constrained to resolve the ambiguity)
+    2156              :     template<typename T>
+    2157          116 :     reference operator[](T* key)
+    2158              :     {
+    2159          232 :         return operator[](typename object_t::key_type(key));
+    2160              :     }
+    2161              : 
+    2162              :     template<typename T>
+    2163              :     const_reference operator[](T* key) const
+    2164              :     {
+    2165              :         return operator[](typename object_t::key_type(key));
+    2166              :     }
+    2167              : 
+    2168              :     /// @brief access specified object element
+    2169              :     /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
+    2170              :     template<class KeyType, detail::enable_if_t<
+    2171              :                  detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int > = 0 >
+    2172              :     reference operator[](KeyType && key)
+    2173              :     {
+    2174              :         // implicitly convert null value to an empty object
+    2175              :         if (is_null())
+    2176              :         {
+    2177              :             m_data.m_type = value_t::object;
+    2178              :             m_data.m_value.object = create<object_t>();
+    2179              :             assert_invariant();
+    2180              :         }
+    2181              : 
+    2182              :         // operator[] only works for objects
+    2183              :         if (JSON_HEDLEY_LIKELY(is_object()))
+    2184              :         {
+    2185              :             auto result = m_data.m_value.object->emplace(std::forward<KeyType>(key), nullptr);
+    2186              :             return set_parent(result.first->second);
+    2187              :         }
+    2188              : 
+    2189              :         JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a string argument with ", type_name()), this));
+    2190              :     }
+    2191              : 
+    2192              :     /// @brief access specified object element
+    2193              :     /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
+    2194              :     template<class KeyType, detail::enable_if_t<
+    2195              :                  detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int > = 0 >
+    2196              :     const_reference operator[](KeyType && key) const
+    2197              :     {
+    2198              :         // const operator[] only works for objects
+    2199              :         if (JSON_HEDLEY_LIKELY(is_object()))
+    2200              :         {
+    2201              :             auto it = m_data.m_value.object->find(std::forward<KeyType>(key));
+    2202              :             JSON_ASSERT(it != m_data.m_value.object->end());
+    2203              :             return it->second;
+    2204              :         }
+    2205              : 
+    2206              :         JSON_THROW(type_error::create(305, detail::concat("cannot use operator[] with a string argument with ", type_name()), this));
+    2207              :     }
+    2208              : 
+    2209              :   private:
+    2210              :     template<typename KeyType>
+    2211              :     using is_comparable_with_object_key = detail::is_comparable <
+    2212              :         object_comparator_t, const typename object_t::key_type&, KeyType >;
+    2213              : 
+    2214              :     template<typename ValueType>
+    2215              :     using value_return_type = std::conditional <
+    2216              :         detail::is_c_string_uncvref<ValueType>::value,
+    2217              :         string_t, typename std::decay<ValueType>::type >;
+    2218              : 
+    2219              :   public:
+    2220              :     /// @brief access specified object element with default value
+    2221              :     /// @sa https://json.nlohmann.me/api/basic_json/value/
+    2222              :     template < class ValueType, detail::enable_if_t <
+    2223              :                    !detail::is_transparent<object_comparator_t>::value
+    2224              :                    && detail::is_getable<basic_json_t, ValueType>::value
+    2225              :                    && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >
+    2226              :     ValueType value(const typename object_t::key_type& key, const ValueType& default_value) const
+    2227              :     {
+    2228              :         // value only works for objects
+    2229              :         if (JSON_HEDLEY_LIKELY(is_object()))
+    2230              :         {
+    2231              :             // if key is found, return value and given default value otherwise
+    2232              :             const auto it = find(key);
+    2233              :             if (it != end())
+    2234              :             {
+    2235              :                 return it->template get<ValueType>();
+    2236              :             }
+    2237              : 
+    2238              :             return default_value;
+    2239              :         }
+    2240              : 
+    2241              :         JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this));
+    2242              :     }
+    2243              : 
+    2244              :     /// @brief access specified object element with default value
+    2245              :     /// @sa https://json.nlohmann.me/api/basic_json/value/
+    2246              :     template < class ValueType, class ReturnType = typename value_return_type<ValueType>::type,
+    2247              :                detail::enable_if_t <
+    2248              :                    !detail::is_transparent<object_comparator_t>::value
+    2249              :                    && detail::is_getable<basic_json_t, ReturnType>::value
+    2250              :                    && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >
+    2251              :     ReturnType value(const typename object_t::key_type& key, ValueType && default_value) const
+    2252              :     {
+    2253              :         // value only works for objects
+    2254              :         if (JSON_HEDLEY_LIKELY(is_object()))
+    2255              :         {
+    2256              :             // if key is found, return value and given default value otherwise
+    2257              :             const auto it = find(key);
+    2258              :             if (it != end())
+    2259              :             {
+    2260              :                 return it->template get<ReturnType>();
+    2261              :             }
+    2262              : 
+    2263              :             return std::forward<ValueType>(default_value);
+    2264              :         }
+    2265              : 
+    2266              :         JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this));
+    2267              :     }
+    2268              : 
+    2269              :     /// @brief access specified object element with default value
+    2270              :     /// @sa https://json.nlohmann.me/api/basic_json/value/
+    2271              :     template < class ValueType, class KeyType, detail::enable_if_t <
+    2272              :                    detail::is_transparent<object_comparator_t>::value
+    2273              :                    && !detail::is_json_pointer<KeyType>::value
+    2274              :                    && is_comparable_with_object_key<KeyType>::value
+    2275              :                    && detail::is_getable<basic_json_t, ValueType>::value
+    2276              :                    && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >
+    2277              :     ValueType value(KeyType && key, const ValueType& default_value) const
+    2278              :     {
+    2279              :         // value only works for objects
+    2280              :         if (JSON_HEDLEY_LIKELY(is_object()))
+    2281              :         {
+    2282              :             // if key is found, return value and given default value otherwise
+    2283              :             const auto it = find(std::forward<KeyType>(key));
+    2284              :             if (it != end())
+    2285              :             {
+    2286              :                 return it->template get<ValueType>();
+    2287              :             }
+    2288              : 
+    2289              :             return default_value;
+    2290              :         }
+    2291              : 
+    2292              :         JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this));
+    2293              :     }
+    2294              : 
+    2295              :     /// @brief access specified object element via JSON Pointer with default value
+    2296              :     /// @sa https://json.nlohmann.me/api/basic_json/value/
+    2297              :     template < class ValueType, class KeyType, class ReturnType = typename value_return_type<ValueType>::type,
+    2298              :                detail::enable_if_t <
+    2299              :                    detail::is_transparent<object_comparator_t>::value
+    2300              :                    && !detail::is_json_pointer<KeyType>::value
+    2301              :                    && is_comparable_with_object_key<KeyType>::value
+    2302              :                    && detail::is_getable<basic_json_t, ReturnType>::value
+    2303              :                    && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >
+    2304              :     ReturnType value(KeyType && key, ValueType && default_value) const
+    2305              :     {
+    2306              :         // value only works for objects
+    2307              :         if (JSON_HEDLEY_LIKELY(is_object()))
+    2308              :         {
+    2309              :             // if key is found, return value and given default value otherwise
+    2310              :             const auto it = find(std::forward<KeyType>(key));
+    2311              :             if (it != end())
+    2312              :             {
+    2313              :                 return it->template get<ReturnType>();
+    2314              :             }
+    2315              : 
+    2316              :             return std::forward<ValueType>(default_value);
+    2317              :         }
+    2318              : 
+    2319              :         JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this));
+    2320              :     }
+    2321              : 
+    2322              :     /// @brief access specified object element via JSON Pointer with default value
+    2323              :     /// @sa https://json.nlohmann.me/api/basic_json/value/
+    2324              :     template < class ValueType, detail::enable_if_t <
+    2325              :                    detail::is_getable<basic_json_t, ValueType>::value
+    2326              :                    && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >
+    2327              :     ValueType value(const json_pointer& ptr, const ValueType& default_value) const
+    2328              :     {
+    2329              :         // value only works for objects
+    2330              :         if (JSON_HEDLEY_LIKELY(is_object()))
+    2331              :         {
+    2332              :             // if pointer resolves a value, return it or use default value
+    2333              :             JSON_TRY
+    2334              :             {
+    2335              :                 return ptr.get_checked(this).template get<ValueType>();
+    2336              :             }
+    2337              :             JSON_INTERNAL_CATCH (out_of_range&)
+    2338              :             {
+    2339              :                 return default_value;
+    2340              :             }
+    2341              :         }
+    2342              : 
+    2343              :         JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this));
+    2344              :     }
+    2345              : 
+    2346              :     /// @brief access specified object element via JSON Pointer with default value
+    2347              :     /// @sa https://json.nlohmann.me/api/basic_json/value/
+    2348              :     template < class ValueType, class ReturnType = typename value_return_type<ValueType>::type,
+    2349              :                detail::enable_if_t <
+    2350              :                    detail::is_getable<basic_json_t, ReturnType>::value
+    2351              :                    && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >
+    2352              :     ReturnType value(const json_pointer& ptr, ValueType && default_value) const
+    2353              :     {
+    2354              :         // value only works for objects
+    2355              :         if (JSON_HEDLEY_LIKELY(is_object()))
+    2356              :         {
+    2357              :             // if pointer resolves a value, return it or use default value
+    2358              :             JSON_TRY
+    2359              :             {
+    2360              :                 return ptr.get_checked(this).template get<ReturnType>();
+    2361              :             }
+    2362              :             JSON_INTERNAL_CATCH (out_of_range&)
+    2363              :             {
+    2364              :                 return std::forward<ValueType>(default_value);
+    2365              :             }
+    2366              :         }
+    2367              : 
+    2368              :         JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this));
+    2369              :     }
+    2370              : 
+    2371              :     template < class ValueType, class BasicJsonType, detail::enable_if_t <
+    2372              :                    detail::is_basic_json<BasicJsonType>::value
+    2373              :                    && detail::is_getable<basic_json_t, ValueType>::value
+    2374              :                    && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >
+    2375              :     JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)
+    2376              :     ValueType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, const ValueType& default_value) const
+    2377              :     {
+    2378              :         return value(ptr.convert(), default_value);
+    2379              :     }
+    2380              : 
+    2381              :     template < class ValueType, class BasicJsonType, class ReturnType = typename value_return_type<ValueType>::type,
+    2382              :                detail::enable_if_t <
+    2383              :                    detail::is_basic_json<BasicJsonType>::value
+    2384              :                    && detail::is_getable<basic_json_t, ReturnType>::value
+    2385              :                    && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int > = 0 >
+    2386              :     JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)
+    2387              :     ReturnType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, ValueType && default_value) const
+    2388              :     {
+    2389              :         return value(ptr.convert(), std::forward<ValueType>(default_value));
+    2390              :     }
+    2391              : 
+    2392              :     /// @brief access the first element
+    2393              :     /// @sa https://json.nlohmann.me/api/basic_json/front/
+    2394              :     reference front()
+    2395              :     {
+    2396              :         return *begin();
+    2397              :     }
+    2398              : 
+    2399              :     /// @brief access the first element
+    2400              :     /// @sa https://json.nlohmann.me/api/basic_json/front/
+    2401              :     const_reference front() const
+    2402              :     {
+    2403              :         return *cbegin();
+    2404              :     }
+    2405              : 
+    2406              :     /// @brief access the last element
+    2407              :     /// @sa https://json.nlohmann.me/api/basic_json/back/
+    2408              :     reference back()
+    2409              :     {
+    2410              :         auto tmp = end();
+    2411              :         --tmp;
+    2412              :         return *tmp;
+    2413              :     }
+    2414              : 
+    2415              :     /// @brief access the last element
+    2416              :     /// @sa https://json.nlohmann.me/api/basic_json/back/
+    2417              :     const_reference back() const
+    2418              :     {
+    2419              :         auto tmp = cend();
+    2420              :         --tmp;
+    2421              :         return *tmp;
+    2422              :     }
+    2423              : 
+    2424              :     /// @brief remove element given an iterator
+    2425              :     /// @sa https://json.nlohmann.me/api/basic_json/erase/
+    2426              :     template < class IteratorType, detail::enable_if_t <
+    2427              :                    std::is_same<IteratorType, typename basic_json_t::iterator>::value ||
+    2428              :                    std::is_same<IteratorType, typename basic_json_t::const_iterator>::value, int > = 0 >
+    2429              :     IteratorType erase(IteratorType pos)
+    2430              :     {
+    2431              :         // make sure iterator fits the current value
+    2432              :         if (JSON_HEDLEY_UNLIKELY(this != pos.m_object))
+    2433              :         {
+    2434              :             JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", this));
+    2435              :         }
+    2436              : 
+    2437              :         IteratorType result = end();
+    2438              : 
+    2439              :         switch (m_data.m_type)
+    2440              :         {
+    2441              :             case value_t::boolean:
+    2442              :             case value_t::number_float:
+    2443              :             case value_t::number_integer:
+    2444              :             case value_t::number_unsigned:
+    2445              :             case value_t::string:
+    2446              :             case value_t::binary:
+    2447              :             {
+    2448              :                 if (JSON_HEDLEY_UNLIKELY(!pos.m_it.primitive_iterator.is_begin()))
+    2449              :                 {
+    2450              :                     JSON_THROW(invalid_iterator::create(205, "iterator out of range", this));
+    2451              :                 }
+    2452              : 
+    2453              :                 if (is_string())
+    2454              :                 {
+    2455              :                     AllocatorType<string_t> alloc;
+    2456              :                     std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.string);
+    2457              :                     std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.string, 1);
+    2458              :                     m_data.m_value.string = nullptr;
+    2459              :                 }
+    2460              :                 else if (is_binary())
+    2461              :                 {
+    2462              :                     AllocatorType<binary_t> alloc;
+    2463              :                     std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.binary);
+    2464              :                     std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.binary, 1);
+    2465              :                     m_data.m_value.binary = nullptr;
+    2466              :                 }
+    2467              : 
+    2468              :                 m_data.m_type = value_t::null;
+    2469              :                 assert_invariant();
+    2470              :                 break;
+    2471              :             }
+    2472              : 
+    2473              :             case value_t::object:
+    2474              :             {
+    2475              :                 result.m_it.object_iterator = m_data.m_value.object->erase(pos.m_it.object_iterator);
+    2476              :                 break;
+    2477              :             }
+    2478              : 
+    2479              :             case value_t::array:
+    2480              :             {
+    2481              :                 result.m_it.array_iterator = m_data.m_value.array->erase(pos.m_it.array_iterator);
+    2482              :                 break;
+    2483              :             }
+    2484              : 
+    2485              :             case value_t::null:
+    2486              :             case value_t::discarded:
+    2487              :             default:
+    2488              :                 JSON_THROW(type_error::create(307, detail::concat("cannot use erase() with ", type_name()), this));
+    2489              :         }
+    2490              : 
+    2491              :         return result;
+    2492              :     }
+    2493              : 
+    2494              :     /// @brief remove elements given an iterator range
+    2495              :     /// @sa https://json.nlohmann.me/api/basic_json/erase/
+    2496              :     template < class IteratorType, detail::enable_if_t <
+    2497              :                    std::is_same<IteratorType, typename basic_json_t::iterator>::value ||
+    2498              :                    std::is_same<IteratorType, typename basic_json_t::const_iterator>::value, int > = 0 >
+    2499              :     IteratorType erase(IteratorType first, IteratorType last)
+    2500              :     {
+    2501              :         // make sure iterator fits the current value
+    2502              :         if (JSON_HEDLEY_UNLIKELY(this != first.m_object || this != last.m_object))
+    2503              :         {
+    2504              :             JSON_THROW(invalid_iterator::create(203, "iterators do not fit current value", this));
+    2505              :         }
+    2506              : 
+    2507              :         IteratorType result = end();
+    2508              : 
+    2509              :         switch (m_data.m_type)
+    2510              :         {
+    2511              :             case value_t::boolean:
+    2512              :             case value_t::number_float:
+    2513              :             case value_t::number_integer:
+    2514              :             case value_t::number_unsigned:
+    2515              :             case value_t::string:
+    2516              :             case value_t::binary:
+    2517              :             {
+    2518              :                 if (JSON_HEDLEY_LIKELY(!first.m_it.primitive_iterator.is_begin()
+    2519              :                                        || !last.m_it.primitive_iterator.is_end()))
+    2520              :                 {
+    2521              :                     JSON_THROW(invalid_iterator::create(204, "iterators out of range", this));
+    2522              :                 }
+    2523              : 
+    2524              :                 if (is_string())
+    2525              :                 {
+    2526              :                     AllocatorType<string_t> alloc;
+    2527              :                     std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.string);
+    2528              :                     std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.string, 1);
+    2529              :                     m_data.m_value.string = nullptr;
+    2530              :                 }
+    2531              :                 else if (is_binary())
+    2532              :                 {
+    2533              :                     AllocatorType<binary_t> alloc;
+    2534              :                     std::allocator_traits<decltype(alloc)>::destroy(alloc, m_data.m_value.binary);
+    2535              :                     std::allocator_traits<decltype(alloc)>::deallocate(alloc, m_data.m_value.binary, 1);
+    2536              :                     m_data.m_value.binary = nullptr;
+    2537              :                 }
+    2538              : 
+    2539              :                 m_data.m_type = value_t::null;
+    2540              :                 assert_invariant();
+    2541              :                 break;
+    2542              :             }
+    2543              : 
+    2544              :             case value_t::object:
+    2545              :             {
+    2546              :                 result.m_it.object_iterator = m_data.m_value.object->erase(first.m_it.object_iterator,
+    2547              :                                               last.m_it.object_iterator);
+    2548              :                 break;
+    2549              :             }
+    2550              : 
+    2551              :             case value_t::array:
+    2552              :             {
+    2553              :                 result.m_it.array_iterator = m_data.m_value.array->erase(first.m_it.array_iterator,
+    2554              :                                              last.m_it.array_iterator);
+    2555              :                 break;
+    2556              :             }
+    2557              : 
+    2558              :             case value_t::null:
+    2559              :             case value_t::discarded:
+    2560              :             default:
+    2561              :                 JSON_THROW(type_error::create(307, detail::concat("cannot use erase() with ", type_name()), this));
+    2562              :         }
+    2563              : 
+    2564              :         return result;
+    2565              :     }
+    2566              : 
+    2567              :   private:
+    2568              :     template < typename KeyType, detail::enable_if_t <
+    2569              :                    detail::has_erase_with_key_type<basic_json_t, KeyType>::value, int > = 0 >
+    2570          104 :     size_type erase_internal(KeyType && key)
+    2571              :     {
+    2572              :         // this erase only works for objects
+    2573          104 :         if (JSON_HEDLEY_UNLIKELY(!is_object()))
+    2574              :         {
+    2575            0 :             JSON_THROW(type_error::create(307, detail::concat("cannot use erase() with ", type_name()), this));
+    2576              :         }
+    2577              : 
+    2578          312 :         return m_data.m_value.object->erase(std::forward<KeyType>(key));
+    2579              :     }
+    2580              : 
+    2581              :     template < typename KeyType, detail::enable_if_t <
+    2582              :                    !detail::has_erase_with_key_type<basic_json_t, KeyType>::value, int > = 0 >
+    2583              :     size_type erase_internal(KeyType && key)
+    2584              :     {
+    2585              :         // this erase only works for objects
+    2586              :         if (JSON_HEDLEY_UNLIKELY(!is_object()))
+    2587              :         {
+    2588              :             JSON_THROW(type_error::create(307, detail::concat("cannot use erase() with ", type_name()), this));
+    2589              :         }
+    2590              : 
+    2591              :         const auto it = m_data.m_value.object->find(std::forward<KeyType>(key));
+    2592              :         if (it != m_data.m_value.object->end())
+    2593              :         {
+    2594              :             m_data.m_value.object->erase(it);
+    2595              :             return 1;
+    2596              :         }
+    2597              :         return 0;
+    2598              :     }
+    2599              : 
+    2600              :   public:
+    2601              : 
+    2602              :     /// @brief remove element from a JSON object given a key
+    2603              :     /// @sa https://json.nlohmann.me/api/basic_json/erase/
+    2604              :     size_type erase(const typename object_t::key_type& key)
+    2605              :     {
+    2606              :         // the indirection via erase_internal() is added to avoid making this
+    2607              :         // function a template and thus de-rank it during overload resolution
+    2608              :         return erase_internal(key);
+    2609              :     }
+    2610              : 
+    2611              :     /// @brief remove element from a JSON object given a key
+    2612              :     /// @sa https://json.nlohmann.me/api/basic_json/erase/
+    2613              :     template<class KeyType, detail::enable_if_t<
+    2614              :                  detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>
+    2615          104 :     size_type erase(KeyType && key)
+    2616              :     {
+    2617          104 :         return erase_internal(std::forward<KeyType>(key));
+    2618              :     }
+    2619              : 
+    2620              :     /// @brief remove element from a JSON array given an index
+    2621              :     /// @sa https://json.nlohmann.me/api/basic_json/erase/
+    2622              :     void erase(const size_type idx)
+    2623              :     {
+    2624              :         // this erase only works for arrays
+    2625              :         if (JSON_HEDLEY_LIKELY(is_array()))
+    2626              :         {
+    2627              :             if (JSON_HEDLEY_UNLIKELY(idx >= size()))
+    2628              :             {
+    2629              :                 JSON_THROW(out_of_range::create(401, detail::concat("array index ", std::to_string(idx), " is out of range"), this));
+    2630              :             }
+    2631              : 
+    2632              :             m_data.m_value.array->erase(m_data.m_value.array->begin() + static_cast<difference_type>(idx));
+    2633              :         }
+    2634              :         else
+    2635              :         {
+    2636              :             JSON_THROW(type_error::create(307, detail::concat("cannot use erase() with ", type_name()), this));
+    2637              :         }
+    2638              :     }
+    2639              : 
+    2640              :     /// @}
+    2641              : 
+    2642              :     ////////////
+    2643              :     // lookup //
+    2644              :     ////////////
+    2645              : 
+    2646              :     /// @name lookup
+    2647              :     /// @{
+    2648              : 
+    2649              :     /// @brief find an element in a JSON object
+    2650              :     /// @sa https://json.nlohmann.me/api/basic_json/find/
+    2651              :     iterator find(const typename object_t::key_type& key)
+    2652              :     {
+    2653              :         auto result = end();
+    2654              : 
+    2655              :         if (is_object())
+    2656              :         {
+    2657              :             result.m_it.object_iterator = m_data.m_value.object->find(key);
+    2658              :         }
+    2659              : 
+    2660              :         return result;
+    2661              :     }
+    2662              : 
+    2663              :     /// @brief find an element in a JSON object
+    2664              :     /// @sa https://json.nlohmann.me/api/basic_json/find/
+    2665              :     const_iterator find(const typename object_t::key_type& key) const
+    2666              :     {
+    2667              :         auto result = cend();
+    2668              : 
+    2669              :         if (is_object())
+    2670              :         {
+    2671              :             result.m_it.object_iterator = m_data.m_value.object->find(key);
+    2672              :         }
+    2673              : 
+    2674              :         return result;
+    2675              :     }
+    2676              : 
+    2677              :     /// @brief find an element in a JSON object
+    2678              :     /// @sa https://json.nlohmann.me/api/basic_json/find/
+    2679              :     template<class KeyType, detail::enable_if_t<
+    2680              :                  detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>
+    2681              :     iterator find(KeyType && key)
+    2682              :     {
+    2683              :         auto result = end();
+    2684              : 
+    2685              :         if (is_object())
+    2686              :         {
+    2687              :             result.m_it.object_iterator = m_data.m_value.object->find(std::forward<KeyType>(key));
+    2688              :         }
+    2689              : 
+    2690              :         return result;
+    2691              :     }
+    2692              : 
+    2693              :     /// @brief find an element in a JSON object
+    2694              :     /// @sa https://json.nlohmann.me/api/basic_json/find/
+    2695              :     template<class KeyType, detail::enable_if_t<
+    2696              :                  detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>
+    2697              :     const_iterator find(KeyType && key) const
+    2698              :     {
+    2699              :         auto result = cend();
+    2700              : 
+    2701              :         if (is_object())
+    2702              :         {
+    2703              :             result.m_it.object_iterator = m_data.m_value.object->find(std::forward<KeyType>(key));
+    2704              :         }
+    2705              : 
+    2706              :         return result;
+    2707              :     }
+    2708              : 
+    2709              :     /// @brief returns the number of occurrences of a key in a JSON object
+    2710              :     /// @sa https://json.nlohmann.me/api/basic_json/count/
+    2711              :     size_type count(const typename object_t::key_type& key) const
+    2712              :     {
+    2713              :         // return 0 for all nonobject types
+    2714              :         return is_object() ? m_data.m_value.object->count(key) : 0;
+    2715              :     }
+    2716              : 
+    2717              :     /// @brief returns the number of occurrences of a key in a JSON object
+    2718              :     /// @sa https://json.nlohmann.me/api/basic_json/count/
+    2719              :     template<class KeyType, detail::enable_if_t<
+    2720              :                  detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>
+    2721              :     size_type count(KeyType && key) const
+    2722              :     {
+    2723              :         // return 0 for all nonobject types
+    2724              :         return is_object() ? m_data.m_value.object->count(std::forward<KeyType>(key)) : 0;
+    2725              :     }
+    2726              : 
+    2727              :     /// @brief check the existence of an element in a JSON object
+    2728              :     /// @sa https://json.nlohmann.me/api/basic_json/contains/
+    2729              :     bool contains(const typename object_t::key_type& key) const
+    2730              :     {
+    2731              :         return is_object() && m_data.m_value.object->find(key) != m_data.m_value.object->end();
+    2732              :     }
+    2733              : 
+    2734              :     /// @brief check the existence of an element in a JSON object
+    2735              :     /// @sa https://json.nlohmann.me/api/basic_json/contains/
+    2736              :     template<class KeyType, detail::enable_if_t<
+    2737              :                  detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>
+    2738          374 :     bool contains(KeyType && key) const
+    2739              :     {
+    2740          374 :         return is_object() && m_data.m_value.object->find(std::forward<KeyType>(key)) != m_data.m_value.object->end();
+    2741              :     }
+    2742              : 
+    2743              :     /// @brief check the existence of an element in a JSON object given a JSON pointer
+    2744              :     /// @sa https://json.nlohmann.me/api/basic_json/contains/
+    2745              :     bool contains(const json_pointer& ptr) const
+    2746              :     {
+    2747              :         return ptr.contains(this);
+    2748              :     }
+    2749              : 
+    2750              :     template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>
+    2751              :     JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)
+    2752              :     bool contains(const typename ::nlohmann::json_pointer<BasicJsonType>& ptr) const
+    2753              :     {
+    2754              :         return ptr.contains(this);
+    2755              :     }
+    2756              : 
+    2757              :     /// @}
+    2758              : 
+    2759              :     ///////////////
+    2760              :     // iterators //
+    2761              :     ///////////////
+    2762              : 
+    2763              :     /// @name iterators
+    2764              :     /// @{
+    2765              : 
+    2766              :     /// @brief returns an iterator to the first element
+    2767              :     /// @sa https://json.nlohmann.me/api/basic_json/begin/
+    2768            4 :     iterator begin() noexcept
+    2769              :     {
+    2770            4 :         iterator result(this);
+    2771            4 :         result.set_begin();
+    2772            4 :         return result;
+    2773              :     }
+    2774              : 
+    2775              :     /// @brief returns an iterator to the first element
+    2776              :     /// @sa https://json.nlohmann.me/api/basic_json/begin/
+    2777              :     const_iterator begin() const noexcept
+    2778              :     {
+    2779              :         return cbegin();
+    2780              :     }
+    2781              : 
+    2782              :     /// @brief returns a const iterator to the first element
+    2783              :     /// @sa https://json.nlohmann.me/api/basic_json/cbegin/
+    2784              :     const_iterator cbegin() const noexcept
+    2785              :     {
+    2786              :         const_iterator result(this);
+    2787              :         result.set_begin();
+    2788              :         return result;
+    2789              :     }
+    2790              : 
+    2791              :     /// @brief returns an iterator to one past the last element
+    2792              :     /// @sa https://json.nlohmann.me/api/basic_json/end/
+    2793            4 :     iterator end() noexcept
+    2794              :     {
+    2795            4 :         iterator result(this);
+    2796            4 :         result.set_end();
+    2797            4 :         return result;
+    2798              :     }
+    2799              : 
+    2800              :     /// @brief returns an iterator to one past the last element
+    2801              :     /// @sa https://json.nlohmann.me/api/basic_json/end/
+    2802              :     const_iterator end() const noexcept
+    2803              :     {
+    2804              :         return cend();
+    2805              :     }
+    2806              : 
+    2807              :     /// @brief returns an iterator to one past the last element
+    2808              :     /// @sa https://json.nlohmann.me/api/basic_json/cend/
+    2809              :     const_iterator cend() const noexcept
+    2810              :     {
+    2811              :         const_iterator result(this);
+    2812              :         result.set_end();
+    2813              :         return result;
+    2814              :     }
+    2815              : 
+    2816              :     /// @brief returns an iterator to the reverse-beginning
+    2817              :     /// @sa https://json.nlohmann.me/api/basic_json/rbegin/
+    2818              :     reverse_iterator rbegin() noexcept
+    2819              :     {
+    2820              :         return reverse_iterator(end());
+    2821              :     }
+    2822              : 
+    2823              :     /// @brief returns an iterator to the reverse-beginning
+    2824              :     /// @sa https://json.nlohmann.me/api/basic_json/rbegin/
+    2825              :     const_reverse_iterator rbegin() const noexcept
+    2826              :     {
+    2827              :         return crbegin();
+    2828              :     }
+    2829              : 
+    2830              :     /// @brief returns an iterator to the reverse-end
+    2831              :     /// @sa https://json.nlohmann.me/api/basic_json/rend/
+    2832              :     reverse_iterator rend() noexcept
+    2833              :     {
+    2834              :         return reverse_iterator(begin());
+    2835              :     }
+    2836              : 
+    2837              :     /// @brief returns an iterator to the reverse-end
+    2838              :     /// @sa https://json.nlohmann.me/api/basic_json/rend/
+    2839              :     const_reverse_iterator rend() const noexcept
+    2840              :     {
+    2841              :         return crend();
+    2842              :     }
+    2843              : 
+    2844              :     /// @brief returns a const reverse iterator to the last element
+    2845              :     /// @sa https://json.nlohmann.me/api/basic_json/crbegin/
+    2846              :     const_reverse_iterator crbegin() const noexcept
+    2847              :     {
+    2848              :         return const_reverse_iterator(cend());
+    2849              :     }
+    2850              : 
+    2851              :     /// @brief returns a const reverse iterator to one before the first
+    2852              :     /// @sa https://json.nlohmann.me/api/basic_json/crend/
+    2853              :     const_reverse_iterator crend() const noexcept
+    2854              :     {
+    2855              :         return const_reverse_iterator(cbegin());
+    2856              :     }
+    2857              : 
+    2858              :   public:
+    2859              :     /// @brief wrapper to access iterator member functions in range-based for
+    2860              :     /// @sa https://json.nlohmann.me/api/basic_json/items/
+    2861              :     /// @deprecated This function is deprecated since 3.1.0 and will be removed in
+    2862              :     ///             version 4.0.0 of the library. Please use @ref items() instead;
+    2863              :     ///             that is, replace `json::iterator_wrapper(j)` with `j.items()`.
+    2864              :     JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items())
+    2865              :     static iteration_proxy<iterator> iterator_wrapper(reference ref) noexcept
+    2866              :     {
+    2867              :         return ref.items();
+    2868              :     }
+    2869              : 
+    2870              :     /// @brief wrapper to access iterator member functions in range-based for
+    2871              :     /// @sa https://json.nlohmann.me/api/basic_json/items/
+    2872              :     /// @deprecated This function is deprecated since 3.1.0 and will be removed in
+    2873              :     ///         version 4.0.0 of the library. Please use @ref items() instead;
+    2874              :     ///         that is, replace `json::iterator_wrapper(j)` with `j.items()`.
+    2875              :     JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items())
+    2876              :     static iteration_proxy<const_iterator> iterator_wrapper(const_reference ref) noexcept
+    2877              :     {
+    2878              :         return ref.items();
+    2879              :     }
+    2880              : 
+    2881              :     /// @brief helper to access iterator member functions in range-based for
+    2882              :     /// @sa https://json.nlohmann.me/api/basic_json/items/
+    2883            4 :     iteration_proxy<iterator> items() noexcept
+    2884              :     {
+    2885            4 :         return iteration_proxy<iterator>(*this);
+    2886              :     }
+    2887              : 
+    2888              :     /// @brief helper to access iterator member functions in range-based for
+    2889              :     /// @sa https://json.nlohmann.me/api/basic_json/items/
+    2890              :     iteration_proxy<const_iterator> items() const noexcept
+    2891              :     {
+    2892              :         return iteration_proxy<const_iterator>(*this);
+    2893              :     }
+    2894              : 
+    2895              :     /// @}
+    2896              : 
+    2897              :     //////////////
+    2898              :     // capacity //
+    2899              :     //////////////
+    2900              : 
+    2901              :     /// @name capacity
+    2902              :     /// @{
+    2903              : 
+    2904              :     /// @brief checks whether the container is empty.
+    2905              :     /// @sa https://json.nlohmann.me/api/basic_json/empty/
+    2906           42 :     bool empty() const noexcept
+    2907              :     {
+    2908           42 :         switch (m_data.m_type)
+    2909              :         {
+    2910            0 :             case value_t::null:
+    2911              :             {
+    2912              :                 // null values are empty
+    2913            0 :                 return true;
+    2914              :             }
+    2915              : 
+    2916            0 :             case value_t::array:
+    2917              :             {
+    2918              :                 // delegate call to array_t::empty()
+    2919            0 :                 return m_data.m_value.array->empty();
+    2920              :             }
+    2921              : 
+    2922           42 :             case value_t::object:
+    2923              :             {
+    2924              :                 // delegate call to object_t::empty()
+    2925           42 :                 return m_data.m_value.object->empty();
+    2926              :             }
+    2927              : 
+    2928            0 :             case value_t::string:
+    2929              :             case value_t::boolean:
+    2930              :             case value_t::number_integer:
+    2931              :             case value_t::number_unsigned:
+    2932              :             case value_t::number_float:
+    2933              :             case value_t::binary:
+    2934              :             case value_t::discarded:
+    2935              :             default:
+    2936              :             {
+    2937              :                 // all other types are nonempty
+    2938            0 :                 return false;
+    2939              :             }
+    2940              :         }
+    2941              :     }
+    2942              : 
+    2943              :     /// @brief returns the number of elements
+    2944              :     /// @sa https://json.nlohmann.me/api/basic_json/size/
+    2945          110 :     size_type size() const noexcept
+    2946              :     {
+    2947          110 :         switch (m_data.m_type)
+    2948              :         {
+    2949            0 :             case value_t::null:
+    2950              :             {
+    2951              :                 // null values are empty
+    2952            0 :                 return 0;
+    2953              :             }
+    2954              : 
+    2955          110 :             case value_t::array:
+    2956              :             {
+    2957              :                 // delegate call to array_t::size()
+    2958          110 :                 return m_data.m_value.array->size();
+    2959              :             }
+    2960              : 
+    2961            0 :             case value_t::object:
+    2962              :             {
+    2963              :                 // delegate call to object_t::size()
+    2964            0 :                 return m_data.m_value.object->size();
+    2965              :             }
+    2966              : 
+    2967            0 :             case value_t::string:
+    2968              :             case value_t::boolean:
+    2969              :             case value_t::number_integer:
+    2970              :             case value_t::number_unsigned:
+    2971              :             case value_t::number_float:
+    2972              :             case value_t::binary:
+    2973              :             case value_t::discarded:
+    2974              :             default:
+    2975              :             {
+    2976              :                 // all other types have size 1
+    2977            0 :                 return 1;
+    2978              :             }
+    2979              :         }
+    2980              :     }
+    2981              : 
+    2982              :     /// @brief returns the maximum possible number of elements
+    2983              :     /// @sa https://json.nlohmann.me/api/basic_json/max_size/
+    2984              :     size_type max_size() const noexcept
+    2985              :     {
+    2986              :         switch (m_data.m_type)
+    2987              :         {
+    2988              :             case value_t::array:
+    2989              :             {
+    2990              :                 // delegate call to array_t::max_size()
+    2991              :                 return m_data.m_value.array->max_size();
+    2992              :             }
+    2993              : 
+    2994              :             case value_t::object:
+    2995              :             {
+    2996              :                 // delegate call to object_t::max_size()
+    2997              :                 return m_data.m_value.object->max_size();
+    2998              :             }
+    2999              : 
+    3000              :             case value_t::null:
+    3001              :             case value_t::string:
+    3002              :             case value_t::boolean:
+    3003              :             case value_t::number_integer:
+    3004              :             case value_t::number_unsigned:
+    3005              :             case value_t::number_float:
+    3006              :             case value_t::binary:
+    3007              :             case value_t::discarded:
+    3008              :             default:
+    3009              :             {
+    3010              :                 // all other types have max_size() == size()
+    3011              :                 return size();
+    3012              :             }
+    3013              :         }
+    3014              :     }
+    3015              : 
+    3016              :     /// @}
+    3017              : 
+    3018              :     ///////////////
+    3019              :     // modifiers //
+    3020              :     ///////////////
+    3021              : 
+    3022              :     /// @name modifiers
+    3023              :     /// @{
+    3024              : 
+    3025              :     /// @brief clears the contents
+    3026              :     /// @sa https://json.nlohmann.me/api/basic_json/clear/
+    3027              :     void clear() noexcept
+    3028              :     {
+    3029              :         switch (m_data.m_type)
+    3030              :         {
+    3031              :             case value_t::number_integer:
+    3032              :             {
+    3033              :                 m_data.m_value.number_integer = 0;
+    3034              :                 break;
+    3035              :             }
+    3036              : 
+    3037              :             case value_t::number_unsigned:
+    3038              :             {
+    3039              :                 m_data.m_value.number_unsigned = 0;
+    3040              :                 break;
+    3041              :             }
+    3042              : 
+    3043              :             case value_t::number_float:
+    3044              :             {
+    3045              :                 m_data.m_value.number_float = 0.0;
+    3046              :                 break;
+    3047              :             }
+    3048              : 
+    3049              :             case value_t::boolean:
+    3050              :             {
+    3051              :                 m_data.m_value.boolean = false;
+    3052              :                 break;
+    3053              :             }
+    3054              : 
+    3055              :             case value_t::string:
+    3056              :             {
+    3057              :                 m_data.m_value.string->clear();
+    3058              :                 break;
+    3059              :             }
+    3060              : 
+    3061              :             case value_t::binary:
+    3062              :             {
+    3063              :                 m_data.m_value.binary->clear();
+    3064              :                 break;
+    3065              :             }
+    3066              : 
+    3067              :             case value_t::array:
+    3068              :             {
+    3069              :                 m_data.m_value.array->clear();
+    3070              :                 break;
+    3071              :             }
+    3072              : 
+    3073              :             case value_t::object:
+    3074              :             {
+    3075              :                 m_data.m_value.object->clear();
+    3076              :                 break;
+    3077              :             }
+    3078              : 
+    3079              :             case value_t::null:
+    3080              :             case value_t::discarded:
+    3081              :             default:
+    3082              :                 break;
+    3083              :         }
+    3084              :     }
+    3085              : 
+    3086              :     /// @brief add an object to an array
+    3087              :     /// @sa https://json.nlohmann.me/api/basic_json/push_back/
+    3088              :     void push_back(basic_json&& val)
+    3089              :     {
+    3090              :         // push_back only works for null objects or arrays
+    3091              :         if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array())))
+    3092              :         {
+    3093              :             JSON_THROW(type_error::create(308, detail::concat("cannot use push_back() with ", type_name()), this));
+    3094              :         }
+    3095              : 
+    3096              :         // transform null object into an array
+    3097              :         if (is_null())
+    3098              :         {
+    3099              :             m_data.m_type = value_t::array;
+    3100              :             m_data.m_value = value_t::array;
+    3101              :             assert_invariant();
+    3102              :         }
+    3103              : 
+    3104              :         // add element to array (move semantics)
+    3105              :         const auto old_capacity = m_data.m_value.array->capacity();
+    3106              :         m_data.m_value.array->push_back(std::move(val));
+    3107              :         set_parent(m_data.m_value.array->back(), old_capacity);
+    3108              :         // if val is moved from, basic_json move constructor marks it null, so we do not call the destructor
+    3109              :     }
+    3110              : 
+    3111              :     /// @brief add an object to an array
+    3112              :     /// @sa https://json.nlohmann.me/api/basic_json/operator+=/
+    3113              :     reference operator+=(basic_json&& val)
+    3114              :     {
+    3115              :         push_back(std::move(val));
+    3116              :         return *this;
+    3117              :     }
+    3118              : 
+    3119              :     /// @brief add an object to an array
+    3120              :     /// @sa https://json.nlohmann.me/api/basic_json/push_back/
+    3121              :     void push_back(const basic_json& val)
+    3122              :     {
+    3123              :         // push_back only works for null objects or arrays
+    3124              :         if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array())))
+    3125              :         {
+    3126              :             JSON_THROW(type_error::create(308, detail::concat("cannot use push_back() with ", type_name()), this));
+    3127              :         }
+    3128              : 
+    3129              :         // transform null object into an array
+    3130              :         if (is_null())
+    3131              :         {
+    3132              :             m_data.m_type = value_t::array;
+    3133              :             m_data.m_value = value_t::array;
+    3134              :             assert_invariant();
+    3135              :         }
+    3136              : 
+    3137              :         // add element to array
+    3138              :         const auto old_capacity = m_data.m_value.array->capacity();
+    3139              :         m_data.m_value.array->push_back(val);
+    3140              :         set_parent(m_data.m_value.array->back(), old_capacity);
+    3141              :     }
+    3142              : 
+    3143              :     /// @brief add an object to an array
+    3144              :     /// @sa https://json.nlohmann.me/api/basic_json/operator+=/
+    3145              :     reference operator+=(const basic_json& val)
+    3146              :     {
+    3147              :         push_back(val);
+    3148              :         return *this;
+    3149              :     }
+    3150              : 
+    3151              :     /// @brief add an object to an object
+    3152              :     /// @sa https://json.nlohmann.me/api/basic_json/push_back/
+    3153              :     void push_back(const typename object_t::value_type& val)
+    3154              :     {
+    3155              :         // push_back only works for null objects or objects
+    3156              :         if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_object())))
+    3157              :         {
+    3158              :             JSON_THROW(type_error::create(308, detail::concat("cannot use push_back() with ", type_name()), this));
+    3159              :         }
+    3160              : 
+    3161              :         // transform null object into an object
+    3162              :         if (is_null())
+    3163              :         {
+    3164              :             m_data.m_type = value_t::object;
+    3165              :             m_data.m_value = value_t::object;
+    3166              :             assert_invariant();
+    3167              :         }
+    3168              : 
+    3169              :         // add element to object
+    3170              :         auto res = m_data.m_value.object->insert(val);
+    3171              :         set_parent(res.first->second);
+    3172              :     }
+    3173              : 
+    3174              :     /// @brief add an object to an object
+    3175              :     /// @sa https://json.nlohmann.me/api/basic_json/operator+=/
+    3176              :     reference operator+=(const typename object_t::value_type& val)
+    3177              :     {
+    3178              :         push_back(val);
+    3179              :         return *this;
+    3180              :     }
+    3181              : 
+    3182              :     /// @brief add an object to an object
+    3183              :     /// @sa https://json.nlohmann.me/api/basic_json/push_back/
+    3184              :     void push_back(initializer_list_t init)
+    3185              :     {
+    3186              :         if (is_object() && init.size() == 2 && (*init.begin())->is_string())
+    3187              :         {
+    3188              :             basic_json&& key = init.begin()->moved_or_copied();
+    3189              :             push_back(typename object_t::value_type(
+    3190              :                           std::move(key.get_ref<string_t&>()), (init.begin() + 1)->moved_or_copied()));
+    3191              :         }
+    3192              :         else
+    3193              :         {
+    3194              :             push_back(basic_json(init));
+    3195              :         }
+    3196              :     }
+    3197              : 
+    3198              :     /// @brief add an object to an object
+    3199              :     /// @sa https://json.nlohmann.me/api/basic_json/operator+=/
+    3200              :     reference operator+=(initializer_list_t init)
+    3201              :     {
+    3202              :         push_back(init);
+    3203              :         return *this;
+    3204              :     }
+    3205              : 
+    3206              :     /// @brief add an object to an array
+    3207              :     /// @sa https://json.nlohmann.me/api/basic_json/emplace_back/
+    3208              :     template<class... Args>
+    3209              :     reference emplace_back(Args&& ... args)
+    3210              :     {
+    3211              :         // emplace_back only works for null objects or arrays
+    3212              :         if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array())))
+    3213              :         {
+    3214              :             JSON_THROW(type_error::create(311, detail::concat("cannot use emplace_back() with ", type_name()), this));
+    3215              :         }
+    3216              : 
+    3217              :         // transform null object into an array
+    3218              :         if (is_null())
+    3219              :         {
+    3220              :             m_data.m_type = value_t::array;
+    3221              :             m_data.m_value = value_t::array;
+    3222              :             assert_invariant();
+    3223              :         }
+    3224              : 
+    3225              :         // add element to array (perfect forwarding)
+    3226              :         const auto old_capacity = m_data.m_value.array->capacity();
+    3227              :         m_data.m_value.array->emplace_back(std::forward<Args>(args)...);
+    3228              :         return set_parent(m_data.m_value.array->back(), old_capacity);
+    3229              :     }
+    3230              : 
+    3231              :     /// @brief add an object to an object if key does not exist
+    3232              :     /// @sa https://json.nlohmann.me/api/basic_json/emplace/
+    3233              :     template<class... Args>
+    3234              :     std::pair<iterator, bool> emplace(Args&& ... args)
+    3235              :     {
+    3236              :         // emplace only works for null objects or arrays
+    3237              :         if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_object())))
+    3238              :         {
+    3239              :             JSON_THROW(type_error::create(311, detail::concat("cannot use emplace() with ", type_name()), this));
+    3240              :         }
+    3241              : 
+    3242              :         // transform null object into an object
+    3243              :         if (is_null())
+    3244              :         {
+    3245              :             m_data.m_type = value_t::object;
+    3246              :             m_data.m_value = value_t::object;
+    3247              :             assert_invariant();
+    3248              :         }
+    3249              : 
+    3250              :         // add element to array (perfect forwarding)
+    3251              :         auto res = m_data.m_value.object->emplace(std::forward<Args>(args)...);
+    3252              :         set_parent(res.first->second);
+    3253              : 
+    3254              :         // create result iterator and set iterator to the result of emplace
+    3255              :         auto it = begin();
+    3256              :         it.m_it.object_iterator = res.first;
+    3257              : 
+    3258              :         // return pair of iterator and boolean
+    3259              :         return {it, res.second};
+    3260              :     }
+    3261              : 
+    3262              :     /// Helper for insertion of an iterator
+    3263              :     /// @note: This uses std::distance to support GCC 4.8,
+    3264              :     ///        see https://github.com/nlohmann/json/pull/1257
+    3265              :     template<typename... Args>
+    3266              :     iterator insert_iterator(const_iterator pos, Args&& ... args)
+    3267              :     {
+    3268              :         iterator result(this);
+    3269              :         JSON_ASSERT(m_data.m_value.array != nullptr);
+    3270              : 
+    3271              :         auto insert_pos = std::distance(m_data.m_value.array->begin(), pos.m_it.array_iterator);
+    3272              :         m_data.m_value.array->insert(pos.m_it.array_iterator, std::forward<Args>(args)...);
+    3273              :         result.m_it.array_iterator = m_data.m_value.array->begin() + insert_pos;
+    3274              : 
+    3275              :         // This could have been written as:
+    3276              :         // result.m_it.array_iterator = m_data.m_value.array->insert(pos.m_it.array_iterator, cnt, val);
+    3277              :         // but the return value of insert is missing in GCC 4.8, so it is written this way instead.
+    3278              : 
+    3279              :         set_parents();
+    3280              :         return result;
+    3281              :     }
+    3282              : 
+    3283              :     /// @brief inserts element into array
+    3284              :     /// @sa https://json.nlohmann.me/api/basic_json/insert/
+    3285              :     iterator insert(const_iterator pos, const basic_json& val)
+    3286              :     {
+    3287              :         // insert only works for arrays
+    3288              :         if (JSON_HEDLEY_LIKELY(is_array()))
+    3289              :         {
+    3290              :             // check if iterator pos fits to this JSON value
+    3291              :             if (JSON_HEDLEY_UNLIKELY(pos.m_object != this))
+    3292              :             {
+    3293              :                 JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", this));
+    3294              :             }
+    3295              : 
+    3296              :             // insert to array and return iterator
+    3297              :             return insert_iterator(pos, val);
+    3298              :         }
+    3299              : 
+    3300              :         JSON_THROW(type_error::create(309, detail::concat("cannot use insert() with ", type_name()), this));
+    3301              :     }
+    3302              : 
+    3303              :     /// @brief inserts element into array
+    3304              :     /// @sa https://json.nlohmann.me/api/basic_json/insert/
+    3305              :     iterator insert(const_iterator pos, basic_json&& val)
+    3306              :     {
+    3307              :         return insert(pos, val);
+    3308              :     }
+    3309              : 
+    3310              :     /// @brief inserts copies of element into array
+    3311              :     /// @sa https://json.nlohmann.me/api/basic_json/insert/
+    3312              :     iterator insert(const_iterator pos, size_type cnt, const basic_json& val)
+    3313              :     {
+    3314              :         // insert only works for arrays
+    3315              :         if (JSON_HEDLEY_LIKELY(is_array()))
+    3316              :         {
+    3317              :             // check if iterator pos fits to this JSON value
+    3318              :             if (JSON_HEDLEY_UNLIKELY(pos.m_object != this))
+    3319              :             {
+    3320              :                 JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", this));
+    3321              :             }
+    3322              : 
+    3323              :             // insert to array and return iterator
+    3324              :             return insert_iterator(pos, cnt, val);
+    3325              :         }
+    3326              : 
+    3327              :         JSON_THROW(type_error::create(309, detail::concat("cannot use insert() with ", type_name()), this));
+    3328              :     }
+    3329              : 
+    3330              :     /// @brief inserts range of elements into array
+    3331              :     /// @sa https://json.nlohmann.me/api/basic_json/insert/
+    3332              :     iterator insert(const_iterator pos, const_iterator first, const_iterator last)
+    3333              :     {
+    3334              :         // insert only works for arrays
+    3335              :         if (JSON_HEDLEY_UNLIKELY(!is_array()))
+    3336              :         {
+    3337              :             JSON_THROW(type_error::create(309, detail::concat("cannot use insert() with ", type_name()), this));
+    3338              :         }
+    3339              : 
+    3340              :         // check if iterator pos fits to this JSON value
+    3341              :         if (JSON_HEDLEY_UNLIKELY(pos.m_object != this))
+    3342              :         {
+    3343              :             JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", this));
+    3344              :         }
+    3345              : 
+    3346              :         // check if range iterators belong to the same JSON object
+    3347              :         if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object))
+    3348              :         {
+    3349              :             JSON_THROW(invalid_iterator::create(210, "iterators do not fit", this));
+    3350              :         }
+    3351              : 
+    3352              :         if (JSON_HEDLEY_UNLIKELY(first.m_object == this))
+    3353              :         {
+    3354              :             JSON_THROW(invalid_iterator::create(211, "passed iterators may not belong to container", this));
+    3355              :         }
+    3356              : 
+    3357              :         // insert to array and return iterator
+    3358              :         return insert_iterator(pos, first.m_it.array_iterator, last.m_it.array_iterator);
+    3359              :     }
+    3360              : 
+    3361              :     /// @brief inserts elements from initializer list into array
+    3362              :     /// @sa https://json.nlohmann.me/api/basic_json/insert/
+    3363              :     iterator insert(const_iterator pos, initializer_list_t ilist)
+    3364              :     {
+    3365              :         // insert only works for arrays
+    3366              :         if (JSON_HEDLEY_UNLIKELY(!is_array()))
+    3367              :         {
+    3368              :             JSON_THROW(type_error::create(309, detail::concat("cannot use insert() with ", type_name()), this));
+    3369              :         }
+    3370              : 
+    3371              :         // check if iterator pos fits to this JSON value
+    3372              :         if (JSON_HEDLEY_UNLIKELY(pos.m_object != this))
+    3373              :         {
+    3374              :             JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", this));
+    3375              :         }
+    3376              : 
+    3377              :         // insert to array and return iterator
+    3378              :         return insert_iterator(pos, ilist.begin(), ilist.end());
+    3379              :     }
+    3380              : 
+    3381              :     /// @brief inserts range of elements into object
+    3382              :     /// @sa https://json.nlohmann.me/api/basic_json/insert/
+    3383              :     void insert(const_iterator first, const_iterator last)
+    3384              :     {
+    3385              :         // insert only works for objects
+    3386              :         if (JSON_HEDLEY_UNLIKELY(!is_object()))
+    3387              :         {
+    3388              :             JSON_THROW(type_error::create(309, detail::concat("cannot use insert() with ", type_name()), this));
+    3389              :         }
+    3390              : 
+    3391              :         // check if range iterators belong to the same JSON object
+    3392              :         if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object))
+    3393              :         {
+    3394              :             JSON_THROW(invalid_iterator::create(210, "iterators do not fit", this));
+    3395              :         }
+    3396              : 
+    3397              :         // passed iterators must belong to objects
+    3398              :         if (JSON_HEDLEY_UNLIKELY(!first.m_object->is_object()))
+    3399              :         {
+    3400              :             JSON_THROW(invalid_iterator::create(202, "iterators first and last must point to objects", this));
+    3401              :         }
+    3402              : 
+    3403              :         m_data.m_value.object->insert(first.m_it.object_iterator, last.m_it.object_iterator);
+    3404              :     }
+    3405              : 
+    3406              :     /// @brief updates a JSON object from another object, overwriting existing keys
+    3407              :     /// @sa https://json.nlohmann.me/api/basic_json/update/
+    3408              :     void update(const_reference j, bool merge_objects = false)
+    3409              :     {
+    3410              :         update(j.begin(), j.end(), merge_objects);
+    3411              :     }
+    3412              : 
+    3413              :     /// @brief updates a JSON object from another object, overwriting existing keys
+    3414              :     /// @sa https://json.nlohmann.me/api/basic_json/update/
+    3415              :     void update(const_iterator first, const_iterator last, bool merge_objects = false)
+    3416              :     {
+    3417              :         // implicitly convert null value to an empty object
+    3418              :         if (is_null())
+    3419              :         {
+    3420              :             m_data.m_type = value_t::object;
+    3421              :             m_data.m_value.object = create<object_t>();
+    3422              :             assert_invariant();
+    3423              :         }
+    3424              : 
+    3425              :         if (JSON_HEDLEY_UNLIKELY(!is_object()))
+    3426              :         {
+    3427              :             JSON_THROW(type_error::create(312, detail::concat("cannot use update() with ", type_name()), this));
+    3428              :         }
+    3429              : 
+    3430              :         // check if range iterators belong to the same JSON object
+    3431              :         if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object))
+    3432              :         {
+    3433              :             JSON_THROW(invalid_iterator::create(210, "iterators do not fit", this));
+    3434              :         }
+    3435              : 
+    3436              :         // passed iterators must belong to objects
+    3437              :         if (JSON_HEDLEY_UNLIKELY(!first.m_object->is_object()))
+    3438              :         {
+    3439              :             JSON_THROW(type_error::create(312, detail::concat("cannot use update() with ", first.m_object->type_name()), first.m_object));
+    3440              :         }
+    3441              : 
+    3442              :         for (auto it = first; it != last; ++it)
+    3443              :         {
+    3444              :             if (merge_objects && it.value().is_object())
+    3445              :             {
+    3446              :                 auto it2 = m_data.m_value.object->find(it.key());
+    3447              :                 if (it2 != m_data.m_value.object->end())
+    3448              :                 {
+    3449              :                     it2->second.update(it.value(), true);
+    3450              :                     continue;
+    3451              :                 }
+    3452              :             }
+    3453              :             m_data.m_value.object->operator[](it.key()) = it.value();
+    3454              : #if JSON_DIAGNOSTICS
+    3455              :             m_data.m_value.object->operator[](it.key()).m_parent = this;
+    3456              : #endif
+    3457              :         }
+    3458              :     }
+    3459              : 
+    3460              :     /// @brief exchanges the values
+    3461              :     /// @sa https://json.nlohmann.me/api/basic_json/swap/
+    3462              :     void swap(reference other) noexcept (
+    3463              :         std::is_nothrow_move_constructible<value_t>::value&&
+    3464              :         std::is_nothrow_move_assignable<value_t>::value&&
+    3465              :         std::is_nothrow_move_constructible<json_value>::value&& // NOLINT(cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
+    3466              :         std::is_nothrow_move_assignable<json_value>::value
+    3467              :     )
+    3468              :     {
+    3469              :         std::swap(m_data.m_type, other.m_data.m_type);
+    3470              :         std::swap(m_data.m_value, other.m_data.m_value);
+    3471              : 
+    3472              :         set_parents();
+    3473              :         other.set_parents();
+    3474              :         assert_invariant();
+    3475              :     }
+    3476              : 
+    3477              :     /// @brief exchanges the values
+    3478              :     /// @sa https://json.nlohmann.me/api/basic_json/swap/
+    3479              :     friend void swap(reference left, reference right) noexcept (
+    3480              :         std::is_nothrow_move_constructible<value_t>::value&&
+    3481              :         std::is_nothrow_move_assignable<value_t>::value&&
+    3482              :         std::is_nothrow_move_constructible<json_value>::value&& // NOLINT(cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
+    3483              :         std::is_nothrow_move_assignable<json_value>::value
+    3484              :     )
+    3485              :     {
+    3486              :         left.swap(right);
+    3487              :     }
+    3488              : 
+    3489              :     /// @brief exchanges the values
+    3490              :     /// @sa https://json.nlohmann.me/api/basic_json/swap/
+    3491              :     void swap(array_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
+    3492              :     {
+    3493              :         // swap only works for arrays
+    3494              :         if (JSON_HEDLEY_LIKELY(is_array()))
+    3495              :         {
+    3496              :             using std::swap;
+    3497              :             swap(*(m_data.m_value.array), other);
+    3498              :         }
+    3499              :         else
+    3500              :         {
+    3501              :             JSON_THROW(type_error::create(310, detail::concat("cannot use swap(array_t&) with ", type_name()), this));
+    3502              :         }
+    3503              :     }
+    3504              : 
+    3505              :     /// @brief exchanges the values
+    3506              :     /// @sa https://json.nlohmann.me/api/basic_json/swap/
+    3507              :     void swap(object_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
+    3508              :     {
+    3509              :         // swap only works for objects
+    3510              :         if (JSON_HEDLEY_LIKELY(is_object()))
+    3511              :         {
+    3512              :             using std::swap;
+    3513              :             swap(*(m_data.m_value.object), other);
+    3514              :         }
+    3515              :         else
+    3516              :         {
+    3517              :             JSON_THROW(type_error::create(310, detail::concat("cannot use swap(object_t&) with ", type_name()), this));
+    3518              :         }
+    3519              :     }
+    3520              : 
+    3521              :     /// @brief exchanges the values
+    3522              :     /// @sa https://json.nlohmann.me/api/basic_json/swap/
+    3523              :     void swap(string_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
+    3524              :     {
+    3525              :         // swap only works for strings
+    3526              :         if (JSON_HEDLEY_LIKELY(is_string()))
+    3527              :         {
+    3528              :             using std::swap;
+    3529              :             swap(*(m_data.m_value.string), other);
+    3530              :         }
+    3531              :         else
+    3532              :         {
+    3533              :             JSON_THROW(type_error::create(310, detail::concat("cannot use swap(string_t&) with ", type_name()), this));
+    3534              :         }
+    3535              :     }
+    3536              : 
+    3537              :     /// @brief exchanges the values
+    3538              :     /// @sa https://json.nlohmann.me/api/basic_json/swap/
+    3539              :     void swap(binary_t& other) // NOLINT(bugprone-exception-escape,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
+    3540              :     {
+    3541              :         // swap only works for strings
+    3542              :         if (JSON_HEDLEY_LIKELY(is_binary()))
+    3543              :         {
+    3544              :             using std::swap;
+    3545              :             swap(*(m_data.m_value.binary), other);
+    3546              :         }
+    3547              :         else
+    3548              :         {
+    3549              :             JSON_THROW(type_error::create(310, detail::concat("cannot use swap(binary_t&) with ", type_name()), this));
+    3550              :         }
+    3551              :     }
+    3552              : 
+    3553              :     /// @brief exchanges the values
+    3554              :     /// @sa https://json.nlohmann.me/api/basic_json/swap/
+    3555              :     void swap(typename binary_t::container_type& other) // NOLINT(bugprone-exception-escape)
+    3556              :     {
+    3557              :         // swap only works for strings
+    3558              :         if (JSON_HEDLEY_LIKELY(is_binary()))
+    3559              :         {
+    3560              :             using std::swap;
+    3561              :             swap(*(m_data.m_value.binary), other);
+    3562              :         }
+    3563              :         else
+    3564              :         {
+    3565              :             JSON_THROW(type_error::create(310, detail::concat("cannot use swap(binary_t::container_type&) with ", type_name()), this));
+    3566              :         }
+    3567              :     }
+    3568              : 
+    3569              :     /// @}
+    3570              : 
+    3571              :     //////////////////////////////////////////
+    3572              :     // lexicographical comparison operators //
+    3573              :     //////////////////////////////////////////
+    3574              : 
+    3575              :     /// @name lexicographical comparison operators
+    3576              :     /// @{
+    3577              : 
+    3578              :     // note parentheses around operands are necessary; see
+    3579              :     // https://github.com/nlohmann/json/issues/1530
+    3580              : #define JSON_IMPLEMENT_OPERATOR(op, null_result, unordered_result, default_result)                       \
+    3581              :     const auto lhs_type = lhs.type();                                                                    \
+    3582              :     const auto rhs_type = rhs.type();                                                                    \
+    3583              :     \
+    3584              :     if (lhs_type == rhs_type) /* NOLINT(readability/braces) */                                           \
+    3585              :     {                                                                                                    \
+    3586              :         switch (lhs_type)                                                                                \
+    3587              :         {                                                                                                \
+    3588              :             case value_t::array:                                                                         \
+    3589              :                 return (*lhs.m_data.m_value.array) op (*rhs.m_data.m_value.array);                                     \
+    3590              :                 \
+    3591              :             case value_t::object:                                                                        \
+    3592              :                 return (*lhs.m_data.m_value.object) op (*rhs.m_data.m_value.object);                                   \
+    3593              :                 \
+    3594              :             case value_t::null:                                                                          \
+    3595              :                 return (null_result);                                                                    \
+    3596              :                 \
+    3597              :             case value_t::string:                                                                        \
+    3598              :                 return (*lhs.m_data.m_value.string) op (*rhs.m_data.m_value.string);                                   \
+    3599              :                 \
+    3600              :             case value_t::boolean:                                                                       \
+    3601              :                 return (lhs.m_data.m_value.boolean) op (rhs.m_data.m_value.boolean);                                   \
+    3602              :                 \
+    3603              :             case value_t::number_integer:                                                                \
+    3604              :                 return (lhs.m_data.m_value.number_integer) op (rhs.m_data.m_value.number_integer);                     \
+    3605              :                 \
+    3606              :             case value_t::number_unsigned:                                                               \
+    3607              :                 return (lhs.m_data.m_value.number_unsigned) op (rhs.m_data.m_value.number_unsigned);                   \
+    3608              :                 \
+    3609              :             case value_t::number_float:                                                                  \
+    3610              :                 return (lhs.m_data.m_value.number_float) op (rhs.m_data.m_value.number_float);                         \
+    3611              :                 \
+    3612              :             case value_t::binary:                                                                        \
+    3613              :                 return (*lhs.m_data.m_value.binary) op (*rhs.m_data.m_value.binary);                                   \
+    3614              :                 \
+    3615              :             case value_t::discarded:                                                                     \
+    3616              :             default:                                                                                     \
+    3617              :                 return (unordered_result);                                                               \
+    3618              :         }                                                                                                \
+    3619              :     }                                                                                                    \
+    3620              :     else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float)                   \
+    3621              :     {                                                                                                    \
+    3622              :         return static_cast<number_float_t>(lhs.m_data.m_value.number_integer) op rhs.m_data.m_value.number_float;      \
+    3623              :     }                                                                                                    \
+    3624              :     else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer)                   \
+    3625              :     {                                                                                                    \
+    3626              :         return lhs.m_data.m_value.number_float op static_cast<number_float_t>(rhs.m_data.m_value.number_integer);      \
+    3627              :     }                                                                                                    \
+    3628              :     else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float)                  \
+    3629              :     {                                                                                                    \
+    3630              :         return static_cast<number_float_t>(lhs.m_data.m_value.number_unsigned) op rhs.m_data.m_value.number_float;     \
+    3631              :     }                                                                                                    \
+    3632              :     else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned)                  \
+    3633              :     {                                                                                                    \
+    3634              :         return lhs.m_data.m_value.number_float op static_cast<number_float_t>(rhs.m_data.m_value.number_unsigned);     \
+    3635              :     }                                                                                                    \
+    3636              :     else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer)                \
+    3637              :     {                                                                                                    \
+    3638              :         return static_cast<number_integer_t>(lhs.m_data.m_value.number_unsigned) op rhs.m_data.m_value.number_integer; \
+    3639              :     }                                                                                                    \
+    3640              :     else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned)                \
+    3641              :     {                                                                                                    \
+    3642              :         return lhs.m_data.m_value.number_integer op static_cast<number_integer_t>(rhs.m_data.m_value.number_unsigned); \
+    3643              :     }                                                                                                    \
+    3644              :     else if(compares_unordered(lhs, rhs))\
+    3645              :     {\
+    3646              :         return (unordered_result);\
+    3647              :     }\
+    3648              :     \
+    3649              :     return (default_result);
+    3650              : 
+    3651              :   JSON_PRIVATE_UNLESS_TESTED:
+    3652              :     // returns true if:
+    3653              :     // - any operand is NaN and the other operand is of number type
+    3654              :     // - any operand is discarded
+    3655              :     // in legacy mode, discarded values are considered ordered if
+    3656              :     // an operation is computed as an odd number of inverses of others
+    3657            0 :     static bool compares_unordered(const_reference lhs, const_reference rhs, bool inverse = false) noexcept
+    3658              :     {
+    3659            0 :         if ((lhs.is_number_float() && std::isnan(lhs.m_data.m_value.number_float) && rhs.is_number())
+    3660            0 :                 || (rhs.is_number_float() && std::isnan(rhs.m_data.m_value.number_float) && lhs.is_number()))
+    3661              :         {
+    3662            0 :             return true;
+    3663              :         }
+    3664              : #if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
+    3665              :         return (lhs.is_discarded() || rhs.is_discarded()) && !inverse;
+    3666              : #else
+    3667              :         static_cast<void>(inverse);
+    3668            0 :         return lhs.is_discarded() || rhs.is_discarded();
+    3669              : #endif
+    3670              :     }
+    3671              : 
+    3672              :   private:
+    3673              :     bool compares_unordered(const_reference rhs, bool inverse = false) const noexcept
+    3674              :     {
+    3675              :         return compares_unordered(*this, rhs, inverse);
+    3676              :     }
+    3677              : 
+    3678              :   public:
+    3679              : #if JSON_HAS_THREE_WAY_COMPARISON
+    3680              :     /// @brief comparison: equal
+    3681              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/
+    3682              :     bool operator==(const_reference rhs) const noexcept
+    3683              :     {
+    3684              : #ifdef __GNUC__
+    3685              : #pragma GCC diagnostic push
+    3686              : #pragma GCC diagnostic ignored "-Wfloat-equal"
+    3687              : #endif
+    3688              :         const_reference lhs = *this;
+    3689              :         JSON_IMPLEMENT_OPERATOR( ==, true, false, false)
+    3690              : #ifdef __GNUC__
+    3691              : #pragma GCC diagnostic pop
+    3692              : #endif
+    3693              :     }
+    3694              : 
+    3695              :     /// @brief comparison: equal
+    3696              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/
+    3697              :     template<typename ScalarType>
+    3698              :     requires std::is_scalar_v<ScalarType>
+    3699              :     bool operator==(ScalarType rhs) const noexcept
+    3700              :     {
+    3701              :         return *this == basic_json(rhs);
+    3702              :     }
+    3703              : 
+    3704              :     /// @brief comparison: not equal
+    3705              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/
+    3706              :     bool operator!=(const_reference rhs) const noexcept
+    3707              :     {
+    3708              :         if (compares_unordered(rhs, true))
+    3709              :         {
+    3710              :             return false;
+    3711              :         }
+    3712              :         return !operator==(rhs);
+    3713              :     }
+    3714              : 
+    3715              :     /// @brief comparison: 3-way
+    3716              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_spaceship/
+    3717              :     std::partial_ordering operator<=>(const_reference rhs) const noexcept // *NOPAD*
+    3718              :     {
+    3719              :         const_reference lhs = *this;
+    3720              :         // default_result is used if we cannot compare values. In that case,
+    3721              :         // we compare types.
+    3722              :         JSON_IMPLEMENT_OPERATOR(<=>, // *NOPAD*
+    3723              :                                 std::partial_ordering::equivalent,
+    3724              :                                 std::partial_ordering::unordered,
+    3725              :                                 lhs_type <=> rhs_type) // *NOPAD*
+    3726              :     }
+    3727              : 
+    3728              :     /// @brief comparison: 3-way
+    3729              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_spaceship/
+    3730              :     template<typename ScalarType>
+    3731              :     requires std::is_scalar_v<ScalarType>
+    3732              :     std::partial_ordering operator<=>(ScalarType rhs) const noexcept // *NOPAD*
+    3733              :     {
+    3734              :         return *this <=> basic_json(rhs); // *NOPAD*
+    3735              :     }
+    3736              : 
+    3737              : #if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
+    3738              :     // all operators that are computed as an odd number of inverses of others
+    3739              :     // need to be overloaded to emulate the legacy comparison behavior
+    3740              : 
+    3741              :     /// @brief comparison: less than or equal
+    3742              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_le/
+    3743              :     JSON_HEDLEY_DEPRECATED_FOR(3.11.0, undef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON)
+    3744              :     bool operator<=(const_reference rhs) const noexcept
+    3745              :     {
+    3746              :         if (compares_unordered(rhs, true))
+    3747              :         {
+    3748              :             return false;
+    3749              :         }
+    3750              :         return !(rhs < *this);
+    3751              :     }
+    3752              : 
+    3753              :     /// @brief comparison: less than or equal
+    3754              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_le/
+    3755              :     template<typename ScalarType>
+    3756              :     requires std::is_scalar_v<ScalarType>
+    3757              :     bool operator<=(ScalarType rhs) const noexcept
+    3758              :     {
+    3759              :         return *this <= basic_json(rhs);
+    3760              :     }
+    3761              : 
+    3762              :     /// @brief comparison: greater than or equal
+    3763              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/
+    3764              :     JSON_HEDLEY_DEPRECATED_FOR(3.11.0, undef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON)
+    3765              :     bool operator>=(const_reference rhs) const noexcept
+    3766              :     {
+    3767              :         if (compares_unordered(rhs, true))
+    3768              :         {
+    3769              :             return false;
+    3770              :         }
+    3771              :         return !(*this < rhs);
+    3772              :     }
+    3773              : 
+    3774              :     /// @brief comparison: greater than or equal
+    3775              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/
+    3776              :     template<typename ScalarType>
+    3777              :     requires std::is_scalar_v<ScalarType>
+    3778              :     bool operator>=(ScalarType rhs) const noexcept
+    3779              :     {
+    3780              :         return *this >= basic_json(rhs);
+    3781              :     }
+    3782              : #endif
+    3783              : #else
+    3784              :     /// @brief comparison: equal
+    3785              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/
+    3786           38 :     friend bool operator==(const_reference lhs, const_reference rhs) noexcept
+    3787              :     {
+    3788              : #ifdef __GNUC__
+    3789              : #pragma GCC diagnostic push
+    3790              : #pragma GCC diagnostic ignored "-Wfloat-equal"
+    3791              : #endif
+    3792           38 :         JSON_IMPLEMENT_OPERATOR( ==, true, false, false)
+    3793              : #ifdef __GNUC__
+    3794              : #pragma GCC diagnostic pop
+    3795              : #endif
+    3796              :     }
+    3797              : 
+    3798              :     /// @brief comparison: equal
+    3799              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/
+    3800              :     template<typename ScalarType, typename std::enable_if<
+    3801              :                  std::is_scalar<ScalarType>::value, int>::type = 0>
+    3802              :     friend bool operator==(const_reference lhs, ScalarType rhs) noexcept
+    3803              :     {
+    3804              :         return lhs == basic_json(rhs);
+    3805              :     }
+    3806              : 
+    3807              :     /// @brief comparison: equal
+    3808              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_eq/
+    3809              :     template<typename ScalarType, typename std::enable_if<
+    3810              :                  std::is_scalar<ScalarType>::value, int>::type = 0>
+    3811              :     friend bool operator==(ScalarType lhs, const_reference rhs) noexcept
+    3812              :     {
+    3813              :         return basic_json(lhs) == rhs;
+    3814              :     }
+    3815              : 
+    3816              :     /// @brief comparison: not equal
+    3817              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/
+    3818              :     friend bool operator!=(const_reference lhs, const_reference rhs) noexcept
+    3819              :     {
+    3820              :         if (compares_unordered(lhs, rhs, true))
+    3821              :         {
+    3822              :             return false;
+    3823              :         }
+    3824              :         return !(lhs == rhs);
+    3825              :     }
+    3826              : 
+    3827              :     /// @brief comparison: not equal
+    3828              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/
+    3829              :     template<typename ScalarType, typename std::enable_if<
+    3830              :                  std::is_scalar<ScalarType>::value, int>::type = 0>
+    3831              :     friend bool operator!=(const_reference lhs, ScalarType rhs) noexcept
+    3832              :     {
+    3833              :         return lhs != basic_json(rhs);
+    3834              :     }
+    3835              : 
+    3836              :     /// @brief comparison: not equal
+    3837              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_ne/
+    3838              :     template<typename ScalarType, typename std::enable_if<
+    3839              :                  std::is_scalar<ScalarType>::value, int>::type = 0>
+    3840              :     friend bool operator!=(ScalarType lhs, const_reference rhs) noexcept
+    3841              :     {
+    3842              :         return basic_json(lhs) != rhs;
+    3843              :     }
+    3844              : 
+    3845              :     /// @brief comparison: less than
+    3846              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_lt/
+    3847              :     friend bool operator<(const_reference lhs, const_reference rhs) noexcept
+    3848              :     {
+    3849              :         // default_result is used if we cannot compare values. In that case,
+    3850              :         // we compare types. Note we have to call the operator explicitly,
+    3851              :         // because MSVC has problems otherwise.
+    3852              :         JSON_IMPLEMENT_OPERATOR( <, false, false, operator<(lhs_type, rhs_type))
+    3853              :     }
+    3854              : 
+    3855              :     /// @brief comparison: less than
+    3856              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_lt/
+    3857              :     template<typename ScalarType, typename std::enable_if<
+    3858              :                  std::is_scalar<ScalarType>::value, int>::type = 0>
+    3859              :     friend bool operator<(const_reference lhs, ScalarType rhs) noexcept
+    3860              :     {
+    3861              :         return lhs < basic_json(rhs);
+    3862              :     }
+    3863              : 
+    3864              :     /// @brief comparison: less than
+    3865              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_lt/
+    3866              :     template<typename ScalarType, typename std::enable_if<
+    3867              :                  std::is_scalar<ScalarType>::value, int>::type = 0>
+    3868              :     friend bool operator<(ScalarType lhs, const_reference rhs) noexcept
+    3869              :     {
+    3870              :         return basic_json(lhs) < rhs;
+    3871              :     }
+    3872              : 
+    3873              :     /// @brief comparison: less than or equal
+    3874              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_le/
+    3875              :     friend bool operator<=(const_reference lhs, const_reference rhs) noexcept
+    3876              :     {
+    3877              :         if (compares_unordered(lhs, rhs, true))
+    3878              :         {
+    3879              :             return false;
+    3880              :         }
+    3881              :         return !(rhs < lhs);
+    3882              :     }
+    3883              : 
+    3884              :     /// @brief comparison: less than or equal
+    3885              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_le/
+    3886              :     template<typename ScalarType, typename std::enable_if<
+    3887              :                  std::is_scalar<ScalarType>::value, int>::type = 0>
+    3888              :     friend bool operator<=(const_reference lhs, ScalarType rhs) noexcept
+    3889              :     {
+    3890              :         return lhs <= basic_json(rhs);
+    3891              :     }
+    3892              : 
+    3893              :     /// @brief comparison: less than or equal
+    3894              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_le/
+    3895              :     template<typename ScalarType, typename std::enable_if<
+    3896              :                  std::is_scalar<ScalarType>::value, int>::type = 0>
+    3897              :     friend bool operator<=(ScalarType lhs, const_reference rhs) noexcept
+    3898              :     {
+    3899              :         return basic_json(lhs) <= rhs;
+    3900              :     }
+    3901              : 
+    3902              :     /// @brief comparison: greater than
+    3903              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_gt/
+    3904              :     friend bool operator>(const_reference lhs, const_reference rhs) noexcept
+    3905              :     {
+    3906              :         // double inverse
+    3907              :         if (compares_unordered(lhs, rhs))
+    3908              :         {
+    3909              :             return false;
+    3910              :         }
+    3911              :         return !(lhs <= rhs);
+    3912              :     }
+    3913              : 
+    3914              :     /// @brief comparison: greater than
+    3915              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_gt/
+    3916              :     template<typename ScalarType, typename std::enable_if<
+    3917              :                  std::is_scalar<ScalarType>::value, int>::type = 0>
+    3918              :     friend bool operator>(const_reference lhs, ScalarType rhs) noexcept
+    3919              :     {
+    3920              :         return lhs > basic_json(rhs);
+    3921              :     }
+    3922              : 
+    3923              :     /// @brief comparison: greater than
+    3924              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_gt/
+    3925              :     template<typename ScalarType, typename std::enable_if<
+    3926              :                  std::is_scalar<ScalarType>::value, int>::type = 0>
+    3927              :     friend bool operator>(ScalarType lhs, const_reference rhs) noexcept
+    3928              :     {
+    3929              :         return basic_json(lhs) > rhs;
+    3930              :     }
+    3931              : 
+    3932              :     /// @brief comparison: greater than or equal
+    3933              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/
+    3934              :     friend bool operator>=(const_reference lhs, const_reference rhs) noexcept
+    3935              :     {
+    3936              :         if (compares_unordered(lhs, rhs, true))
+    3937              :         {
+    3938              :             return false;
+    3939              :         }
+    3940              :         return !(lhs < rhs);
+    3941              :     }
+    3942              : 
+    3943              :     /// @brief comparison: greater than or equal
+    3944              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/
+    3945              :     template<typename ScalarType, typename std::enable_if<
+    3946              :                  std::is_scalar<ScalarType>::value, int>::type = 0>
+    3947              :     friend bool operator>=(const_reference lhs, ScalarType rhs) noexcept
+    3948              :     {
+    3949              :         return lhs >= basic_json(rhs);
+    3950              :     }
+    3951              : 
+    3952              :     /// @brief comparison: greater than or equal
+    3953              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_ge/
+    3954              :     template<typename ScalarType, typename std::enable_if<
+    3955              :                  std::is_scalar<ScalarType>::value, int>::type = 0>
+    3956              :     friend bool operator>=(ScalarType lhs, const_reference rhs) noexcept
+    3957              :     {
+    3958              :         return basic_json(lhs) >= rhs;
+    3959              :     }
+    3960              : #endif
+    3961              : 
+    3962              : #undef JSON_IMPLEMENT_OPERATOR
+    3963              : 
+    3964              :     /// @}
+    3965              : 
+    3966              :     ///////////////////
+    3967              :     // serialization //
+    3968              :     ///////////////////
+    3969              : 
+    3970              :     /// @name serialization
+    3971              :     /// @{
+    3972              : #ifndef JSON_NO_IO
+    3973              :     /// @brief serialize to stream
+    3974              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_ltlt/
+    3975              :     friend std::ostream& operator<<(std::ostream& o, const basic_json& j)
+    3976              :     {
+    3977              :         // read width member and use it as indentation parameter if nonzero
+    3978              :         const bool pretty_print = o.width() > 0;
+    3979              :         const auto indentation = pretty_print ? o.width() : 0;
+    3980              : 
+    3981              :         // reset width to 0 for subsequent calls to this stream
+    3982              :         o.width(0);
+    3983              : 
+    3984              :         // do the actual serialization
+    3985              :         serializer s(detail::output_adapter<char>(o), o.fill());
+    3986              :         s.dump(j, pretty_print, false, static_cast<unsigned int>(indentation));
+    3987              :         return o;
+    3988              :     }
+    3989              : 
+    3990              :     /// @brief serialize to stream
+    3991              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_ltlt/
+    3992              :     /// @deprecated This function is deprecated since 3.0.0 and will be removed in
+    3993              :     ///             version 4.0.0 of the library. Please use
+    3994              :     ///             operator<<(std::ostream&, const basic_json&) instead; that is,
+    3995              :     ///             replace calls like `j >> o;` with `o << j;`.
+    3996              :     JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator<<(std::ostream&, const basic_json&))
+    3997              :     friend std::ostream& operator>>(const basic_json& j, std::ostream& o)
+    3998              :     {
+    3999              :         return o << j;
+    4000              :     }
+    4001              : #endif  // JSON_NO_IO
+    4002              :     /// @}
+    4003              : 
+    4004              :     /////////////////////
+    4005              :     // deserialization //
+    4006              :     /////////////////////
+    4007              : 
+    4008              :     /// @name deserialization
+    4009              :     /// @{
+    4010              : 
+    4011              :     /// @brief deserialize from a compatible input
+    4012              :     /// @sa https://json.nlohmann.me/api/basic_json/parse/
+    4013              :     template<typename InputType>
+    4014              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4015              :     static basic_json parse(InputType&& i,
+    4016              :                             const parser_callback_t cb = nullptr,
+    4017              :                             const bool allow_exceptions = true,
+    4018              :                             const bool ignore_comments = false)
+    4019              :     {
+    4020              :         basic_json result;
+    4021              :         parser(detail::input_adapter(std::forward<InputType>(i)), cb, allow_exceptions, ignore_comments).parse(true, result);
+    4022              :         return result;
+    4023              :     }
+    4024              : 
+    4025              :     /// @brief deserialize from a pair of character iterators
+    4026              :     /// @sa https://json.nlohmann.me/api/basic_json/parse/
+    4027              :     template<typename IteratorType>
+    4028              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4029              :     static basic_json parse(IteratorType first,
+    4030              :                             IteratorType last,
+    4031              :                             const parser_callback_t cb = nullptr,
+    4032              :                             const bool allow_exceptions = true,
+    4033              :                             const bool ignore_comments = false)
+    4034              :     {
+    4035              :         basic_json result;
+    4036              :         parser(detail::input_adapter(std::move(first), std::move(last)), cb, allow_exceptions, ignore_comments).parse(true, result);
+    4037              :         return result;
+    4038              :     }
+    4039              : 
+    4040              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4041              :     JSON_HEDLEY_DEPRECATED_FOR(3.8.0, parse(ptr, ptr + len))
+    4042              :     static basic_json parse(detail::span_input_adapter&& i,
+    4043              :                             const parser_callback_t cb = nullptr,
+    4044              :                             const bool allow_exceptions = true,
+    4045              :                             const bool ignore_comments = false)
+    4046              :     {
+    4047              :         basic_json result;
+    4048              :         parser(i.get(), cb, allow_exceptions, ignore_comments).parse(true, result);
+    4049              :         return result;
+    4050              :     }
+    4051              : 
+    4052              :     /// @brief check if the input is valid JSON
+    4053              :     /// @sa https://json.nlohmann.me/api/basic_json/accept/
+    4054              :     template<typename InputType>
+    4055              :     static bool accept(InputType&& i,
+    4056              :                        const bool ignore_comments = false)
+    4057              :     {
+    4058              :         return parser(detail::input_adapter(std::forward<InputType>(i)), nullptr, false, ignore_comments).accept(true);
+    4059              :     }
+    4060              : 
+    4061              :     /// @brief check if the input is valid JSON
+    4062              :     /// @sa https://json.nlohmann.me/api/basic_json/accept/
+    4063              :     template<typename IteratorType>
+    4064              :     static bool accept(IteratorType first, IteratorType last,
+    4065              :                        const bool ignore_comments = false)
+    4066              :     {
+    4067              :         return parser(detail::input_adapter(std::move(first), std::move(last)), nullptr, false, ignore_comments).accept(true);
+    4068              :     }
+    4069              : 
+    4070              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4071              :     JSON_HEDLEY_DEPRECATED_FOR(3.8.0, accept(ptr, ptr + len))
+    4072              :     static bool accept(detail::span_input_adapter&& i,
+    4073              :                        const bool ignore_comments = false)
+    4074              :     {
+    4075              :         return parser(i.get(), nullptr, false, ignore_comments).accept(true);
+    4076              :     }
+    4077              : 
+    4078              :     /// @brief generate SAX events
+    4079              :     /// @sa https://json.nlohmann.me/api/basic_json/sax_parse/
+    4080              :     template <typename InputType, typename SAX>
+    4081              :     JSON_HEDLEY_NON_NULL(2)
+    4082              :     static bool sax_parse(InputType&& i, SAX* sax,
+    4083              :                           input_format_t format = input_format_t::json,
+    4084              :                           const bool strict = true,
+    4085              :                           const bool ignore_comments = false)
+    4086              :     {
+    4087              :         auto ia = detail::input_adapter(std::forward<InputType>(i));
+    4088              :         return format == input_format_t::json
+    4089              :                ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict)
+    4090              :                : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict);
+    4091              :     }
+    4092              : 
+    4093              :     /// @brief generate SAX events
+    4094              :     /// @sa https://json.nlohmann.me/api/basic_json/sax_parse/
+    4095              :     template<class IteratorType, class SAX>
+    4096              :     JSON_HEDLEY_NON_NULL(3)
+    4097              :     static bool sax_parse(IteratorType first, IteratorType last, SAX* sax,
+    4098              :                           input_format_t format = input_format_t::json,
+    4099              :                           const bool strict = true,
+    4100              :                           const bool ignore_comments = false)
+    4101              :     {
+    4102              :         auto ia = detail::input_adapter(std::move(first), std::move(last));
+    4103              :         return format == input_format_t::json
+    4104              :                ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict)
+    4105              :                : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict);
+    4106              :     }
+    4107              : 
+    4108              :     /// @brief generate SAX events
+    4109              :     /// @sa https://json.nlohmann.me/api/basic_json/sax_parse/
+    4110              :     /// @deprecated This function is deprecated since 3.8.0 and will be removed in
+    4111              :     ///             version 4.0.0 of the library. Please use
+    4112              :     ///             sax_parse(ptr, ptr + len) instead.
+    4113              :     template <typename SAX>
+    4114              :     JSON_HEDLEY_DEPRECATED_FOR(3.8.0, sax_parse(ptr, ptr + len, ...))
+    4115              :     JSON_HEDLEY_NON_NULL(2)
+    4116              :     static bool sax_parse(detail::span_input_adapter&& i, SAX* sax,
+    4117              :                           input_format_t format = input_format_t::json,
+    4118              :                           const bool strict = true,
+    4119              :                           const bool ignore_comments = false)
+    4120              :     {
+    4121              :         auto ia = i.get();
+    4122              :         return format == input_format_t::json
+    4123              :                // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg)
+    4124              :                ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict)
+    4125              :                // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg)
+    4126              :                : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict);
+    4127              :     }
+    4128              : #ifndef JSON_NO_IO
+    4129              :     /// @brief deserialize from stream
+    4130              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_gtgt/
+    4131              :     /// @deprecated This stream operator is deprecated since 3.0.0 and will be removed in
+    4132              :     ///             version 4.0.0 of the library. Please use
+    4133              :     ///             operator>>(std::istream&, basic_json&) instead; that is,
+    4134              :     ///             replace calls like `j << i;` with `i >> j;`.
+    4135              :     JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator>>(std::istream&, basic_json&))
+    4136              :     friend std::istream& operator<<(basic_json& j, std::istream& i)
+    4137              :     {
+    4138              :         return operator>>(i, j);
+    4139              :     }
+    4140              : 
+    4141              :     /// @brief deserialize from stream
+    4142              :     /// @sa https://json.nlohmann.me/api/basic_json/operator_gtgt/
+    4143              :     friend std::istream& operator>>(std::istream& i, basic_json& j)
+    4144              :     {
+    4145              :         parser(detail::input_adapter(i)).parse(false, j);
+    4146              :         return i;
+    4147              :     }
+    4148              : #endif  // JSON_NO_IO
+    4149              :     /// @}
+    4150              : 
+    4151              :     ///////////////////////////
+    4152              :     // convenience functions //
+    4153              :     ///////////////////////////
+    4154              : 
+    4155              :     /// @brief return the type as string
+    4156              :     /// @sa https://json.nlohmann.me/api/basic_json/type_name/
+    4157              :     JSON_HEDLEY_RETURNS_NON_NULL
+    4158            0 :     const char* type_name() const noexcept
+    4159              :     {
+    4160            0 :         switch (m_data.m_type)
+    4161              :         {
+    4162            0 :             case value_t::null:
+    4163            0 :                 return "null";
+    4164            0 :             case value_t::object:
+    4165            0 :                 return "object";
+    4166            0 :             case value_t::array:
+    4167            0 :                 return "array";
+    4168            0 :             case value_t::string:
+    4169            0 :                 return "string";
+    4170            0 :             case value_t::boolean:
+    4171            0 :                 return "boolean";
+    4172            0 :             case value_t::binary:
+    4173            0 :                 return "binary";
+    4174            0 :             case value_t::discarded:
+    4175            0 :                 return "discarded";
+    4176            0 :             case value_t::number_integer:
+    4177              :             case value_t::number_unsigned:
+    4178              :             case value_t::number_float:
+    4179              :             default:
+    4180            0 :                 return "number";
+    4181              :         }
+    4182              :     }
+    4183              : 
+    4184              :   JSON_PRIVATE_UNLESS_TESTED:
+    4185              :     //////////////////////
+    4186              :     // member variables //
+    4187              :     //////////////////////
+    4188              : 
+    4189              :     struct data
+    4190              :     {
+    4191              :         /// the type of the current element
+    4192              :         value_t m_type = value_t::null;
+    4193              : 
+    4194              :         /// the value of the current element
+    4195              :         json_value m_value = {};
+    4196              : 
+    4197            0 :         data(const value_t v)
+    4198            0 :             : m_type(v), m_value(v)
+    4199              :         {
+    4200            0 :         }
+    4201              : 
+    4202              :         data(size_type cnt, const basic_json& val)
+    4203              :             : m_type(value_t::array)
+    4204              :         {
+    4205              :             m_value.array = create<array_t>(cnt, val);
+    4206              :         }
+    4207              : 
+    4208          612 :         data() noexcept = default;
+    4209              :         data(data&&) noexcept = default;
+    4210              :         data(const data&) noexcept = delete;
+    4211              :         data& operator=(data&&) noexcept = delete;
+    4212              :         data& operator=(const data&) noexcept = delete;
+    4213              : 
+    4214         1796 :         ~data() noexcept
+    4215              :         {
+    4216         1796 :             m_value.destroy(m_type);
+    4217         1796 :         }
+    4218              :     };
+    4219              : 
+    4220              :     data m_data = {};
+    4221              : 
+    4222              : #if JSON_DIAGNOSTICS
+    4223              :     /// a pointer to a parent value (for debugging purposes)
+    4224              :     basic_json* m_parent = nullptr;
+    4225              : #endif
+    4226              : 
+    4227              :     //////////////////////////////////////////
+    4228              :     // binary serialization/deserialization //
+    4229              :     //////////////////////////////////////////
+    4230              : 
+    4231              :     /// @name binary serialization/deserialization support
+    4232              :     /// @{
+    4233              : 
+    4234              :   public:
+    4235              :     /// @brief create a CBOR serialization of a given JSON value
+    4236              :     /// @sa https://json.nlohmann.me/api/basic_json/to_cbor/
+    4237              :     static std::vector<std::uint8_t> to_cbor(const basic_json& j)
+    4238              :     {
+    4239              :         std::vector<std::uint8_t> result;
+    4240              :         to_cbor(j, result);
+    4241              :         return result;
+    4242              :     }
+    4243              : 
+    4244              :     /// @brief create a CBOR serialization of a given JSON value
+    4245              :     /// @sa https://json.nlohmann.me/api/basic_json/to_cbor/
+    4246              :     static void to_cbor(const basic_json& j, detail::output_adapter<std::uint8_t> o)
+    4247              :     {
+    4248              :         binary_writer<std::uint8_t>(o).write_cbor(j);
+    4249              :     }
+    4250              : 
+    4251              :     /// @brief create a CBOR serialization of a given JSON value
+    4252              :     /// @sa https://json.nlohmann.me/api/basic_json/to_cbor/
+    4253              :     static void to_cbor(const basic_json& j, detail::output_adapter<char> o)
+    4254              :     {
+    4255              :         binary_writer<char>(o).write_cbor(j);
+    4256              :     }
+    4257              : 
+    4258              :     /// @brief create a MessagePack serialization of a given JSON value
+    4259              :     /// @sa https://json.nlohmann.me/api/basic_json/to_msgpack/
+    4260              :     static std::vector<std::uint8_t> to_msgpack(const basic_json& j)
+    4261              :     {
+    4262              :         std::vector<std::uint8_t> result;
+    4263              :         to_msgpack(j, result);
+    4264              :         return result;
+    4265              :     }
+    4266              : 
+    4267              :     /// @brief create a MessagePack serialization of a given JSON value
+    4268              :     /// @sa https://json.nlohmann.me/api/basic_json/to_msgpack/
+    4269              :     static void to_msgpack(const basic_json& j, detail::output_adapter<std::uint8_t> o)
+    4270              :     {
+    4271              :         binary_writer<std::uint8_t>(o).write_msgpack(j);
+    4272              :     }
+    4273              : 
+    4274              :     /// @brief create a MessagePack serialization of a given JSON value
+    4275              :     /// @sa https://json.nlohmann.me/api/basic_json/to_msgpack/
+    4276              :     static void to_msgpack(const basic_json& j, detail::output_adapter<char> o)
+    4277              :     {
+    4278              :         binary_writer<char>(o).write_msgpack(j);
+    4279              :     }
+    4280              : 
+    4281              :     /// @brief create a UBJSON serialization of a given JSON value
+    4282              :     /// @sa https://json.nlohmann.me/api/basic_json/to_ubjson/
+    4283              :     static std::vector<std::uint8_t> to_ubjson(const basic_json& j,
+    4284              :             const bool use_size = false,
+    4285              :             const bool use_type = false)
+    4286              :     {
+    4287              :         std::vector<std::uint8_t> result;
+    4288              :         to_ubjson(j, result, use_size, use_type);
+    4289              :         return result;
+    4290              :     }
+    4291              : 
+    4292              :     /// @brief create a UBJSON serialization of a given JSON value
+    4293              :     /// @sa https://json.nlohmann.me/api/basic_json/to_ubjson/
+    4294              :     static void to_ubjson(const basic_json& j, detail::output_adapter<std::uint8_t> o,
+    4295              :                           const bool use_size = false, const bool use_type = false)
+    4296              :     {
+    4297              :         binary_writer<std::uint8_t>(o).write_ubjson(j, use_size, use_type);
+    4298              :     }
+    4299              : 
+    4300              :     /// @brief create a UBJSON serialization of a given JSON value
+    4301              :     /// @sa https://json.nlohmann.me/api/basic_json/to_ubjson/
+    4302              :     static void to_ubjson(const basic_json& j, detail::output_adapter<char> o,
+    4303              :                           const bool use_size = false, const bool use_type = false)
+    4304              :     {
+    4305              :         binary_writer<char>(o).write_ubjson(j, use_size, use_type);
+    4306              :     }
+    4307              : 
+    4308              :     /// @brief create a BJData serialization of a given JSON value
+    4309              :     /// @sa https://json.nlohmann.me/api/basic_json/to_bjdata/
+    4310              :     static std::vector<std::uint8_t> to_bjdata(const basic_json& j,
+    4311              :             const bool use_size = false,
+    4312              :             const bool use_type = false)
+    4313              :     {
+    4314              :         std::vector<std::uint8_t> result;
+    4315              :         to_bjdata(j, result, use_size, use_type);
+    4316              :         return result;
+    4317              :     }
+    4318              : 
+    4319              :     /// @brief create a BJData serialization of a given JSON value
+    4320              :     /// @sa https://json.nlohmann.me/api/basic_json/to_bjdata/
+    4321              :     static void to_bjdata(const basic_json& j, detail::output_adapter<std::uint8_t> o,
+    4322              :                           const bool use_size = false, const bool use_type = false)
+    4323              :     {
+    4324              :         binary_writer<std::uint8_t>(o).write_ubjson(j, use_size, use_type, true, true);
+    4325              :     }
+    4326              : 
+    4327              :     /// @brief create a BJData serialization of a given JSON value
+    4328              :     /// @sa https://json.nlohmann.me/api/basic_json/to_bjdata/
+    4329              :     static void to_bjdata(const basic_json& j, detail::output_adapter<char> o,
+    4330              :                           const bool use_size = false, const bool use_type = false)
+    4331              :     {
+    4332              :         binary_writer<char>(o).write_ubjson(j, use_size, use_type, true, true);
+    4333              :     }
+    4334              : 
+    4335              :     /// @brief create a BSON serialization of a given JSON value
+    4336              :     /// @sa https://json.nlohmann.me/api/basic_json/to_bson/
+    4337              :     static std::vector<std::uint8_t> to_bson(const basic_json& j)
+    4338              :     {
+    4339              :         std::vector<std::uint8_t> result;
+    4340              :         to_bson(j, result);
+    4341              :         return result;
+    4342              :     }
+    4343              : 
+    4344              :     /// @brief create a BSON serialization of a given JSON value
+    4345              :     /// @sa https://json.nlohmann.me/api/basic_json/to_bson/
+    4346              :     static void to_bson(const basic_json& j, detail::output_adapter<std::uint8_t> o)
+    4347              :     {
+    4348              :         binary_writer<std::uint8_t>(o).write_bson(j);
+    4349              :     }
+    4350              : 
+    4351              :     /// @brief create a BSON serialization of a given JSON value
+    4352              :     /// @sa https://json.nlohmann.me/api/basic_json/to_bson/
+    4353              :     static void to_bson(const basic_json& j, detail::output_adapter<char> o)
+    4354              :     {
+    4355              :         binary_writer<char>(o).write_bson(j);
+    4356              :     }
+    4357              : 
+    4358              :     /// @brief create a JSON value from an input in CBOR format
+    4359              :     /// @sa https://json.nlohmann.me/api/basic_json/from_cbor/
+    4360              :     template<typename InputType>
+    4361              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4362              :     static basic_json from_cbor(InputType&& i,
+    4363              :                                 const bool strict = true,
+    4364              :                                 const bool allow_exceptions = true,
+    4365              :                                 const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
+    4366              :     {
+    4367              :         basic_json result;
+    4368              :         detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
+    4369              :         auto ia = detail::input_adapter(std::forward<InputType>(i));
+    4370              :         const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::cbor).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler);
+    4371              :         return res ? result : basic_json(value_t::discarded);
+    4372              :     }
+    4373              : 
+    4374              :     /// @brief create a JSON value from an input in CBOR format
+    4375              :     /// @sa https://json.nlohmann.me/api/basic_json/from_cbor/
+    4376              :     template<typename IteratorType>
+    4377              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4378              :     static basic_json from_cbor(IteratorType first, IteratorType last,
+    4379              :                                 const bool strict = true,
+    4380              :                                 const bool allow_exceptions = true,
+    4381              :                                 const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
+    4382              :     {
+    4383              :         basic_json result;
+    4384              :         detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
+    4385              :         auto ia = detail::input_adapter(std::move(first), std::move(last));
+    4386              :         const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::cbor).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler);
+    4387              :         return res ? result : basic_json(value_t::discarded);
+    4388              :     }
+    4389              : 
+    4390              :     template<typename T>
+    4391              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4392              :     JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len))
+    4393              :     static basic_json from_cbor(const T* ptr, std::size_t len,
+    4394              :                                 const bool strict = true,
+    4395              :                                 const bool allow_exceptions = true,
+    4396              :                                 const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
+    4397              :     {
+    4398              :         return from_cbor(ptr, ptr + len, strict, allow_exceptions, tag_handler);
+    4399              :     }
+    4400              : 
+    4401              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4402              :     JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len))
+    4403              :     static basic_json from_cbor(detail::span_input_adapter&& i,
+    4404              :                                 const bool strict = true,
+    4405              :                                 const bool allow_exceptions = true,
+    4406              :                                 const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
+    4407              :     {
+    4408              :         basic_json result;
+    4409              :         detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
+    4410              :         auto ia = i.get();
+    4411              :         // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg)
+    4412              :         const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::cbor).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler);
+    4413              :         return res ? result : basic_json(value_t::discarded);
+    4414              :     }
+    4415              : 
+    4416              :     /// @brief create a JSON value from an input in MessagePack format
+    4417              :     /// @sa https://json.nlohmann.me/api/basic_json/from_msgpack/
+    4418              :     template<typename InputType>
+    4419              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4420              :     static basic_json from_msgpack(InputType&& i,
+    4421              :                                    const bool strict = true,
+    4422              :                                    const bool allow_exceptions = true)
+    4423              :     {
+    4424              :         basic_json result;
+    4425              :         detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
+    4426              :         auto ia = detail::input_adapter(std::forward<InputType>(i));
+    4427              :         const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::msgpack).sax_parse(input_format_t::msgpack, &sdp, strict);
+    4428              :         return res ? result : basic_json(value_t::discarded);
+    4429              :     }
+    4430              : 
+    4431              :     /// @brief create a JSON value from an input in MessagePack format
+    4432              :     /// @sa https://json.nlohmann.me/api/basic_json/from_msgpack/
+    4433              :     template<typename IteratorType>
+    4434              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4435              :     static basic_json from_msgpack(IteratorType first, IteratorType last,
+    4436              :                                    const bool strict = true,
+    4437              :                                    const bool allow_exceptions = true)
+    4438              :     {
+    4439              :         basic_json result;
+    4440              :         detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
+    4441              :         auto ia = detail::input_adapter(std::move(first), std::move(last));
+    4442              :         const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::msgpack).sax_parse(input_format_t::msgpack, &sdp, strict);
+    4443              :         return res ? result : basic_json(value_t::discarded);
+    4444              :     }
+    4445              : 
+    4446              :     template<typename T>
+    4447              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4448              :     JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len))
+    4449              :     static basic_json from_msgpack(const T* ptr, std::size_t len,
+    4450              :                                    const bool strict = true,
+    4451              :                                    const bool allow_exceptions = true)
+    4452              :     {
+    4453              :         return from_msgpack(ptr, ptr + len, strict, allow_exceptions);
+    4454              :     }
+    4455              : 
+    4456              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4457              :     JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len))
+    4458              :     static basic_json from_msgpack(detail::span_input_adapter&& i,
+    4459              :                                    const bool strict = true,
+    4460              :                                    const bool allow_exceptions = true)
+    4461              :     {
+    4462              :         basic_json result;
+    4463              :         detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
+    4464              :         auto ia = i.get();
+    4465              :         // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg)
+    4466              :         const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::msgpack).sax_parse(input_format_t::msgpack, &sdp, strict);
+    4467              :         return res ? result : basic_json(value_t::discarded);
+    4468              :     }
+    4469              : 
+    4470              :     /// @brief create a JSON value from an input in UBJSON format
+    4471              :     /// @sa https://json.nlohmann.me/api/basic_json/from_ubjson/
+    4472              :     template<typename InputType>
+    4473              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4474              :     static basic_json from_ubjson(InputType&& i,
+    4475              :                                   const bool strict = true,
+    4476              :                                   const bool allow_exceptions = true)
+    4477              :     {
+    4478              :         basic_json result;
+    4479              :         detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
+    4480              :         auto ia = detail::input_adapter(std::forward<InputType>(i));
+    4481              :         const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::ubjson).sax_parse(input_format_t::ubjson, &sdp, strict);
+    4482              :         return res ? result : basic_json(value_t::discarded);
+    4483              :     }
+    4484              : 
+    4485              :     /// @brief create a JSON value from an input in UBJSON format
+    4486              :     /// @sa https://json.nlohmann.me/api/basic_json/from_ubjson/
+    4487              :     template<typename IteratorType>
+    4488              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4489              :     static basic_json from_ubjson(IteratorType first, IteratorType last,
+    4490              :                                   const bool strict = true,
+    4491              :                                   const bool allow_exceptions = true)
+    4492              :     {
+    4493              :         basic_json result;
+    4494              :         detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
+    4495              :         auto ia = detail::input_adapter(std::move(first), std::move(last));
+    4496              :         const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::ubjson).sax_parse(input_format_t::ubjson, &sdp, strict);
+    4497              :         return res ? result : basic_json(value_t::discarded);
+    4498              :     }
+    4499              : 
+    4500              :     template<typename T>
+    4501              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4502              :     JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len))
+    4503              :     static basic_json from_ubjson(const T* ptr, std::size_t len,
+    4504              :                                   const bool strict = true,
+    4505              :                                   const bool allow_exceptions = true)
+    4506              :     {
+    4507              :         return from_ubjson(ptr, ptr + len, strict, allow_exceptions);
+    4508              :     }
+    4509              : 
+    4510              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4511              :     JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len))
+    4512              :     static basic_json from_ubjson(detail::span_input_adapter&& i,
+    4513              :                                   const bool strict = true,
+    4514              :                                   const bool allow_exceptions = true)
+    4515              :     {
+    4516              :         basic_json result;
+    4517              :         detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
+    4518              :         auto ia = i.get();
+    4519              :         // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg)
+    4520              :         const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::ubjson).sax_parse(input_format_t::ubjson, &sdp, strict);
+    4521              :         return res ? result : basic_json(value_t::discarded);
+    4522              :     }
+    4523              : 
+    4524              :     /// @brief create a JSON value from an input in BJData format
+    4525              :     /// @sa https://json.nlohmann.me/api/basic_json/from_bjdata/
+    4526              :     template<typename InputType>
+    4527              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4528              :     static basic_json from_bjdata(InputType&& i,
+    4529              :                                   const bool strict = true,
+    4530              :                                   const bool allow_exceptions = true)
+    4531              :     {
+    4532              :         basic_json result;
+    4533              :         detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
+    4534              :         auto ia = detail::input_adapter(std::forward<InputType>(i));
+    4535              :         const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bjdata).sax_parse(input_format_t::bjdata, &sdp, strict);
+    4536              :         return res ? result : basic_json(value_t::discarded);
+    4537              :     }
+    4538              : 
+    4539              :     /// @brief create a JSON value from an input in BJData format
+    4540              :     /// @sa https://json.nlohmann.me/api/basic_json/from_bjdata/
+    4541              :     template<typename IteratorType>
+    4542              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4543              :     static basic_json from_bjdata(IteratorType first, IteratorType last,
+    4544              :                                   const bool strict = true,
+    4545              :                                   const bool allow_exceptions = true)
+    4546              :     {
+    4547              :         basic_json result;
+    4548              :         detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
+    4549              :         auto ia = detail::input_adapter(std::move(first), std::move(last));
+    4550              :         const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bjdata).sax_parse(input_format_t::bjdata, &sdp, strict);
+    4551              :         return res ? result : basic_json(value_t::discarded);
+    4552              :     }
+    4553              : 
+    4554              :     /// @brief create a JSON value from an input in BSON format
+    4555              :     /// @sa https://json.nlohmann.me/api/basic_json/from_bson/
+    4556              :     template<typename InputType>
+    4557              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4558              :     static basic_json from_bson(InputType&& i,
+    4559              :                                 const bool strict = true,
+    4560              :                                 const bool allow_exceptions = true)
+    4561              :     {
+    4562              :         basic_json result;
+    4563              :         detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
+    4564              :         auto ia = detail::input_adapter(std::forward<InputType>(i));
+    4565              :         const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bson).sax_parse(input_format_t::bson, &sdp, strict);
+    4566              :         return res ? result : basic_json(value_t::discarded);
+    4567              :     }
+    4568              : 
+    4569              :     /// @brief create a JSON value from an input in BSON format
+    4570              :     /// @sa https://json.nlohmann.me/api/basic_json/from_bson/
+    4571              :     template<typename IteratorType>
+    4572              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4573              :     static basic_json from_bson(IteratorType first, IteratorType last,
+    4574              :                                 const bool strict = true,
+    4575              :                                 const bool allow_exceptions = true)
+    4576              :     {
+    4577              :         basic_json result;
+    4578              :         detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
+    4579              :         auto ia = detail::input_adapter(std::move(first), std::move(last));
+    4580              :         const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bson).sax_parse(input_format_t::bson, &sdp, strict);
+    4581              :         return res ? result : basic_json(value_t::discarded);
+    4582              :     }
+    4583              : 
+    4584              :     template<typename T>
+    4585              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4586              :     JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len))
+    4587              :     static basic_json from_bson(const T* ptr, std::size_t len,
+    4588              :                                 const bool strict = true,
+    4589              :                                 const bool allow_exceptions = true)
+    4590              :     {
+    4591              :         return from_bson(ptr, ptr + len, strict, allow_exceptions);
+    4592              :     }
+    4593              : 
+    4594              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4595              :     JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len))
+    4596              :     static basic_json from_bson(detail::span_input_adapter&& i,
+    4597              :                                 const bool strict = true,
+    4598              :                                 const bool allow_exceptions = true)
+    4599              :     {
+    4600              :         basic_json result;
+    4601              :         detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
+    4602              :         auto ia = i.get();
+    4603              :         // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg)
+    4604              :         const bool res = binary_reader<decltype(ia)>(std::move(ia), input_format_t::bson).sax_parse(input_format_t::bson, &sdp, strict);
+    4605              :         return res ? result : basic_json(value_t::discarded);
+    4606              :     }
+    4607              :     /// @}
+    4608              : 
+    4609              :     //////////////////////////
+    4610              :     // JSON Pointer support //
+    4611              :     //////////////////////////
+    4612              : 
+    4613              :     /// @name JSON Pointer functions
+    4614              :     /// @{
+    4615              : 
+    4616              :     /// @brief access specified element via JSON Pointer
+    4617              :     /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
+    4618              :     reference operator[](const json_pointer& ptr)
+    4619              :     {
+    4620              :         return ptr.get_unchecked(this);
+    4621              :     }
+    4622              : 
+    4623              :     template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>
+    4624              :     JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)
+    4625              :     reference operator[](const ::nlohmann::json_pointer<BasicJsonType>& ptr)
+    4626              :     {
+    4627              :         return ptr.get_unchecked(this);
+    4628              :     }
+    4629              : 
+    4630              :     /// @brief access specified element via JSON Pointer
+    4631              :     /// @sa https://json.nlohmann.me/api/basic_json/operator%5B%5D/
+    4632              :     const_reference operator[](const json_pointer& ptr) const
+    4633              :     {
+    4634              :         return ptr.get_unchecked(this);
+    4635              :     }
+    4636              : 
+    4637              :     template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>
+    4638              :     JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)
+    4639              :     const_reference operator[](const ::nlohmann::json_pointer<BasicJsonType>& ptr) const
+    4640              :     {
+    4641              :         return ptr.get_unchecked(this);
+    4642              :     }
+    4643              : 
+    4644              :     /// @brief access specified element via JSON Pointer
+    4645              :     /// @sa https://json.nlohmann.me/api/basic_json/at/
+    4646              :     reference at(const json_pointer& ptr)
+    4647              :     {
+    4648              :         return ptr.get_checked(this);
+    4649              :     }
+    4650              : 
+    4651              :     template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>
+    4652              :     JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)
+    4653              :     reference at(const ::nlohmann::json_pointer<BasicJsonType>& ptr)
+    4654              :     {
+    4655              :         return ptr.get_checked(this);
+    4656              :     }
+    4657              : 
+    4658              :     /// @brief access specified element via JSON Pointer
+    4659              :     /// @sa https://json.nlohmann.me/api/basic_json/at/
+    4660              :     const_reference at(const json_pointer& ptr) const
+    4661              :     {
+    4662              :         return ptr.get_checked(this);
+    4663              :     }
+    4664              : 
+    4665              :     template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>
+    4666              :     JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)
+    4667              :     const_reference at(const ::nlohmann::json_pointer<BasicJsonType>& ptr) const
+    4668              :     {
+    4669              :         return ptr.get_checked(this);
+    4670              :     }
+    4671              : 
+    4672              :     /// @brief return flattened JSON value
+    4673              :     /// @sa https://json.nlohmann.me/api/basic_json/flatten/
+    4674              :     basic_json flatten() const
+    4675              :     {
+    4676              :         basic_json result(value_t::object);
+    4677              :         json_pointer::flatten("", *this, result);
+    4678              :         return result;
+    4679              :     }
+    4680              : 
+    4681              :     /// @brief unflatten a previously flattened JSON value
+    4682              :     /// @sa https://json.nlohmann.me/api/basic_json/unflatten/
+    4683              :     basic_json unflatten() const
+    4684              :     {
+    4685              :         return json_pointer::unflatten(*this);
+    4686              :     }
+    4687              : 
+    4688              :     /// @}
+    4689              : 
+    4690              :     //////////////////////////
+    4691              :     // JSON Patch functions //
+    4692              :     //////////////////////////
+    4693              : 
+    4694              :     /// @name JSON Patch functions
+    4695              :     /// @{
+    4696              : 
+    4697              :     /// @brief applies a JSON patch in-place without copying the object
+    4698              :     /// @sa https://json.nlohmann.me/api/basic_json/patch/
+    4699              :     void patch_inplace(const basic_json& json_patch)
+    4700              :     {
+    4701              :         basic_json& result = *this;
+    4702              :         // the valid JSON Patch operations
+    4703              :         enum class patch_operations {add, remove, replace, move, copy, test, invalid};
+    4704              : 
+    4705              :         const auto get_op = [](const std::string & op)
+    4706              :         {
+    4707              :             if (op == "add")
+    4708              :             {
+    4709              :                 return patch_operations::add;
+    4710              :             }
+    4711              :             if (op == "remove")
+    4712              :             {
+    4713              :                 return patch_operations::remove;
+    4714              :             }
+    4715              :             if (op == "replace")
+    4716              :             {
+    4717              :                 return patch_operations::replace;
+    4718              :             }
+    4719              :             if (op == "move")
+    4720              :             {
+    4721              :                 return patch_operations::move;
+    4722              :             }
+    4723              :             if (op == "copy")
+    4724              :             {
+    4725              :                 return patch_operations::copy;
+    4726              :             }
+    4727              :             if (op == "test")
+    4728              :             {
+    4729              :                 return patch_operations::test;
+    4730              :             }
+    4731              : 
+    4732              :             return patch_operations::invalid;
+    4733              :         };
+    4734              : 
+    4735              :         // wrapper for "add" operation; add value at ptr
+    4736              :         const auto operation_add = [&result](json_pointer & ptr, basic_json val)
+    4737              :         {
+    4738              :             // adding to the root of the target document means replacing it
+    4739              :             if (ptr.empty())
+    4740              :             {
+    4741              :                 result = val;
+    4742              :                 return;
+    4743              :             }
+    4744              : 
+    4745              :             // make sure the top element of the pointer exists
+    4746              :             json_pointer const top_pointer = ptr.top();
+    4747              :             if (top_pointer != ptr)
+    4748              :             {
+    4749              :                 result.at(top_pointer);
+    4750              :             }
+    4751              : 
+    4752              :             // get reference to parent of JSON pointer ptr
+    4753              :             const auto last_path = ptr.back();
+    4754              :             ptr.pop_back();
+    4755              :             // parent must exist when performing patch add per RFC6902 specs
+    4756              :             basic_json& parent = result.at(ptr);
+    4757              : 
+    4758              :             switch (parent.m_data.m_type)
+    4759              :             {
+    4760              :                 case value_t::null:
+    4761              :                 case value_t::object:
+    4762              :                 {
+    4763              :                     // use operator[] to add value
+    4764              :                     parent[last_path] = val;
+    4765              :                     break;
+    4766              :                 }
+    4767              : 
+    4768              :                 case value_t::array:
+    4769              :                 {
+    4770              :                     if (last_path == "-")
+    4771              :                     {
+    4772              :                         // special case: append to back
+    4773              :                         parent.push_back(val);
+    4774              :                     }
+    4775              :                     else
+    4776              :                     {
+    4777              :                         const auto idx = json_pointer::template array_index<basic_json_t>(last_path);
+    4778              :                         if (JSON_HEDLEY_UNLIKELY(idx > parent.size()))
+    4779              :                         {
+    4780              :                             // avoid undefined behavior
+    4781              :                             JSON_THROW(out_of_range::create(401, detail::concat("array index ", std::to_string(idx), " is out of range"), &parent));
+    4782              :                         }
+    4783              : 
+    4784              :                         // default case: insert add offset
+    4785              :                         parent.insert(parent.begin() + static_cast<difference_type>(idx), val);
+    4786              :                     }
+    4787              :                     break;
+    4788              :                 }
+    4789              : 
+    4790              :                 // if there exists a parent it cannot be primitive
+    4791              :                 case value_t::string: // LCOV_EXCL_LINE
+    4792              :                 case value_t::boolean: // LCOV_EXCL_LINE
+    4793              :                 case value_t::number_integer: // LCOV_EXCL_LINE
+    4794              :                 case value_t::number_unsigned: // LCOV_EXCL_LINE
+    4795              :                 case value_t::number_float: // LCOV_EXCL_LINE
+    4796              :                 case value_t::binary: // LCOV_EXCL_LINE
+    4797              :                 case value_t::discarded: // LCOV_EXCL_LINE
+    4798              :                 default:            // LCOV_EXCL_LINE
+    4799              :                     JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
+    4800              :             }
+    4801              :         };
+    4802              : 
+    4803              :         // wrapper for "remove" operation; remove value at ptr
+    4804              :         const auto operation_remove = [this, & result](json_pointer & ptr)
+    4805              :         {
+    4806              :             // get reference to parent of JSON pointer ptr
+    4807              :             const auto last_path = ptr.back();
+    4808              :             ptr.pop_back();
+    4809              :             basic_json& parent = result.at(ptr);
+    4810              : 
+    4811              :             // remove child
+    4812              :             if (parent.is_object())
+    4813              :             {
+    4814              :                 // perform range check
+    4815              :                 auto it = parent.find(last_path);
+    4816              :                 if (JSON_HEDLEY_LIKELY(it != parent.end()))
+    4817              :                 {
+    4818              :                     parent.erase(it);
+    4819              :                 }
+    4820              :                 else
+    4821              :                 {
+    4822              :                     JSON_THROW(out_of_range::create(403, detail::concat("key '", last_path, "' not found"), this));
+    4823              :                 }
+    4824              :             }
+    4825              :             else if (parent.is_array())
+    4826              :             {
+    4827              :                 // note erase performs range check
+    4828              :                 parent.erase(json_pointer::template array_index<basic_json_t>(last_path));
+    4829              :             }
+    4830              :         };
+    4831              : 
+    4832              :         // type check: top level value must be an array
+    4833              :         if (JSON_HEDLEY_UNLIKELY(!json_patch.is_array()))
+    4834              :         {
+    4835              :             JSON_THROW(parse_error::create(104, 0, "JSON patch must be an array of objects", &json_patch));
+    4836              :         }
+    4837              : 
+    4838              :         // iterate and apply the operations
+    4839              :         for (const auto& val : json_patch)
+    4840              :         {
+    4841              :             // wrapper to get a value for an operation
+    4842              :             const auto get_value = [&val](const std::string & op,
+    4843              :                                           const std::string & member,
+    4844              :                                           bool string_type) -> basic_json &
+    4845              :             {
+    4846              :                 // find value
+    4847              :                 auto it = val.m_data.m_value.object->find(member);
+    4848              : 
+    4849              :                 // context-sensitive error message
+    4850              :                 const auto error_msg = (op == "op") ? "operation" : detail::concat("operation '", op, '\''); // NOLINT(bugprone-unused-local-non-trivial-variable)
+    4851              : 
+    4852              :                 // check if desired value is present
+    4853              :                 if (JSON_HEDLEY_UNLIKELY(it == val.m_data.m_value.object->end()))
+    4854              :                 {
+    4855              :                     // NOLINTNEXTLINE(performance-inefficient-string-concatenation)
+    4856              :                     JSON_THROW(parse_error::create(105, 0, detail::concat(error_msg, " must have member '", member, "'"), &val));
+    4857              :                 }
+    4858              : 
+    4859              :                 // check if result is of type string
+    4860              :                 if (JSON_HEDLEY_UNLIKELY(string_type && !it->second.is_string()))
+    4861              :                 {
+    4862              :                     // NOLINTNEXTLINE(performance-inefficient-string-concatenation)
+    4863              :                     JSON_THROW(parse_error::create(105, 0, detail::concat(error_msg, " must have string member '", member, "'"), &val));
+    4864              :                 }
+    4865              : 
+    4866              :                 // no error: return value
+    4867              :                 return it->second;
+    4868              :             };
+    4869              : 
+    4870              :             // type check: every element of the array must be an object
+    4871              :             if (JSON_HEDLEY_UNLIKELY(!val.is_object()))
+    4872              :             {
+    4873              :                 JSON_THROW(parse_error::create(104, 0, "JSON patch must be an array of objects", &val));
+    4874              :             }
+    4875              : 
+    4876              :             // collect mandatory members
+    4877              :             const auto op = get_value("op", "op", true).template get<std::string>();
+    4878              :             const auto path = get_value(op, "path", true).template get<std::string>();
+    4879              :             json_pointer ptr(path);
+    4880              : 
+    4881              :             switch (get_op(op))
+    4882              :             {
+    4883              :                 case patch_operations::add:
+    4884              :                 {
+    4885              :                     operation_add(ptr, get_value("add", "value", false));
+    4886              :                     break;
+    4887              :                 }
+    4888              : 
+    4889              :                 case patch_operations::remove:
+    4890              :                 {
+    4891              :                     operation_remove(ptr);
+    4892              :                     break;
+    4893              :                 }
+    4894              : 
+    4895              :                 case patch_operations::replace:
+    4896              :                 {
+    4897              :                     // the "path" location must exist - use at()
+    4898              :                     result.at(ptr) = get_value("replace", "value", false);
+    4899              :                     break;
+    4900              :                 }
+    4901              : 
+    4902              :                 case patch_operations::move:
+    4903              :                 {
+    4904              :                     const auto from_path = get_value("move", "from", true).template get<std::string>();
+    4905              :                     json_pointer from_ptr(from_path);
+    4906              : 
+    4907              :                     // the "from" location must exist - use at()
+    4908              :                     basic_json const v = result.at(from_ptr);
+    4909              : 
+    4910              :                     // The move operation is functionally identical to a
+    4911              :                     // "remove" operation on the "from" location, followed
+    4912              :                     // immediately by an "add" operation at the target
+    4913              :                     // location with the value that was just removed.
+    4914              :                     operation_remove(from_ptr);
+    4915              :                     operation_add(ptr, v);
+    4916              :                     break;
+    4917              :                 }
+    4918              : 
+    4919              :                 case patch_operations::copy:
+    4920              :                 {
+    4921              :                     const auto from_path = get_value("copy", "from", true).template get<std::string>();
+    4922              :                     const json_pointer from_ptr(from_path);
+    4923              : 
+    4924              :                     // the "from" location must exist - use at()
+    4925              :                     basic_json const v = result.at(from_ptr);
+    4926              : 
+    4927              :                     // The copy is functionally identical to an "add"
+    4928              :                     // operation at the target location using the value
+    4929              :                     // specified in the "from" member.
+    4930              :                     operation_add(ptr, v);
+    4931              :                     break;
+    4932              :                 }
+    4933              : 
+    4934              :                 case patch_operations::test:
+    4935              :                 {
+    4936              :                     bool success = false;
+    4937              :                     JSON_TRY
+    4938              :                     {
+    4939              :                         // check if "value" matches the one at "path"
+    4940              :                         // the "path" location must exist - use at()
+    4941              :                         success = (result.at(ptr) == get_value("test", "value", false));
+    4942              :                     }
+    4943              :                     JSON_INTERNAL_CATCH (out_of_range&)
+    4944              :                     {
+    4945              :                         // ignore out of range errors: success remains false
+    4946              :                     }
+    4947              : 
+    4948              :                     // throw an exception if test fails
+    4949              :                     if (JSON_HEDLEY_UNLIKELY(!success))
+    4950              :                     {
+    4951              :                         JSON_THROW(other_error::create(501, detail::concat("unsuccessful: ", val.dump()), &val));
+    4952              :                     }
+    4953              : 
+    4954              :                     break;
+    4955              :                 }
+    4956              : 
+    4957              :                 case patch_operations::invalid:
+    4958              :                 default:
+    4959              :                 {
+    4960              :                     // op must be "add", "remove", "replace", "move", "copy", or
+    4961              :                     // "test"
+    4962              :                     JSON_THROW(parse_error::create(105, 0, detail::concat("operation value '", op, "' is invalid"), &val));
+    4963              :                 }
+    4964              :             }
+    4965              :         }
+    4966              :     }
+    4967              : 
+    4968              :     /// @brief applies a JSON patch to a copy of the current object
+    4969              :     /// @sa https://json.nlohmann.me/api/basic_json/patch/
+    4970              :     basic_json patch(const basic_json& json_patch) const
+    4971              :     {
+    4972              :         basic_json result = *this;
+    4973              :         result.patch_inplace(json_patch);
+    4974              :         return result;
+    4975              :     }
+    4976              : 
+    4977              :     /// @brief creates a diff as a JSON patch
+    4978              :     /// @sa https://json.nlohmann.me/api/basic_json/diff/
+    4979              :     JSON_HEDLEY_WARN_UNUSED_RESULT
+    4980              :     static basic_json diff(const basic_json& source, const basic_json& target,
+    4981              :                            const std::string& path = "")
+    4982              :     {
+    4983              :         // the patch
+    4984              :         basic_json result(value_t::array);
+    4985              : 
+    4986              :         // if the values are the same, return empty patch
+    4987              :         if (source == target)
+    4988              :         {
+    4989              :             return result;
+    4990              :         }
+    4991              : 
+    4992              :         if (source.type() != target.type())
+    4993              :         {
+    4994              :             // different types: replace value
+    4995              :             result.push_back(
+    4996              :             {
+    4997              :                 {"op", "replace"}, {"path", path}, {"value", target}
+    4998              :             });
+    4999              :             return result;
+    5000              :         }
+    5001              : 
+    5002              :         switch (source.type())
+    5003              :         {
+    5004              :             case value_t::array:
+    5005              :             {
+    5006              :                 // first pass: traverse common elements
+    5007              :                 std::size_t i = 0;
+    5008              :                 while (i < source.size() && i < target.size())
+    5009              :                 {
+    5010              :                     // recursive call to compare array values at index i
+    5011              :                     auto temp_diff = diff(source[i], target[i], detail::concat(path, '/', std::to_string(i)));
+    5012              :                     result.insert(result.end(), temp_diff.begin(), temp_diff.end());
+    5013              :                     ++i;
+    5014              :                 }
+    5015              : 
+    5016              :                 // We now reached the end of at least one array
+    5017              :                 // in a second pass, traverse the remaining elements
+    5018              : 
+    5019              :                 // remove my remaining elements
+    5020              :                 const auto end_index = static_cast<difference_type>(result.size());
+    5021              :                 while (i < source.size())
+    5022              :                 {
+    5023              :                     // add operations in reverse order to avoid invalid
+    5024              :                     // indices
+    5025              :                     result.insert(result.begin() + end_index, object(
+    5026              :                     {
+    5027              :                         {"op", "remove"},
+    5028              :                         {"path", detail::concat(path, '/', std::to_string(i))}
+    5029              :                     }));
+    5030              :                     ++i;
+    5031              :                 }
+    5032              : 
+    5033              :                 // add other remaining elements
+    5034              :                 while (i < target.size())
+    5035              :                 {
+    5036              :                     result.push_back(
+    5037              :                     {
+    5038              :                         {"op", "add"},
+    5039              :                         {"path", detail::concat(path, "/-")},
+    5040              :                         {"value", target[i]}
+    5041              :                     });
+    5042              :                     ++i;
+    5043              :                 }
+    5044              : 
+    5045              :                 break;
+    5046              :             }
+    5047              : 
+    5048              :             case value_t::object:
+    5049              :             {
+    5050              :                 // first pass: traverse this object's elements
+    5051              :                 for (auto it = source.cbegin(); it != source.cend(); ++it)
+    5052              :                 {
+    5053              :                     // escape the key name to be used in a JSON patch
+    5054              :                     const auto path_key = detail::concat(path, '/', detail::escape(it.key()));
+    5055              : 
+    5056              :                     if (target.find(it.key()) != target.end())
+    5057              :                     {
+    5058              :                         // recursive call to compare object values at key it
+    5059              :                         auto temp_diff = diff(it.value(), target[it.key()], path_key);
+    5060              :                         result.insert(result.end(), temp_diff.begin(), temp_diff.end());
+    5061              :                     }
+    5062              :                     else
+    5063              :                     {
+    5064              :                         // found a key that is not in o -> remove it
+    5065              :                         result.push_back(object(
+    5066              :                         {
+    5067              :                             {"op", "remove"}, {"path", path_key}
+    5068              :                         }));
+    5069              :                     }
+    5070              :                 }
+    5071              : 
+    5072              :                 // second pass: traverse other object's elements
+    5073              :                 for (auto it = target.cbegin(); it != target.cend(); ++it)
+    5074              :                 {
+    5075              :                     if (source.find(it.key()) == source.end())
+    5076              :                     {
+    5077              :                         // found a key that is not in this -> add it
+    5078              :                         const auto path_key = detail::concat(path, '/', detail::escape(it.key()));
+    5079              :                         result.push_back(
+    5080              :                         {
+    5081              :                             {"op", "add"}, {"path", path_key},
+    5082              :                             {"value", it.value()}
+    5083              :                         });
+    5084              :                     }
+    5085              :                 }
+    5086              : 
+    5087              :                 break;
+    5088              :             }
+    5089              : 
+    5090              :             case value_t::null:
+    5091              :             case value_t::string:
+    5092              :             case value_t::boolean:
+    5093              :             case value_t::number_integer:
+    5094              :             case value_t::number_unsigned:
+    5095              :             case value_t::number_float:
+    5096              :             case value_t::binary:
+    5097              :             case value_t::discarded:
+    5098              :             default:
+    5099              :             {
+    5100              :                 // both primitive type: replace value
+    5101              :                 result.push_back(
+    5102              :                 {
+    5103              :                     {"op", "replace"}, {"path", path}, {"value", target}
+    5104              :                 });
+    5105              :                 break;
+    5106              :             }
+    5107              :         }
+    5108              : 
+    5109              :         return result;
+    5110              :     }
+    5111              :     /// @}
+    5112              : 
+    5113              :     ////////////////////////////////
+    5114              :     // JSON Merge Patch functions //
+    5115              :     ////////////////////////////////
+    5116              : 
+    5117              :     /// @name JSON Merge Patch functions
+    5118              :     /// @{
+    5119              : 
+    5120              :     /// @brief applies a JSON Merge Patch
+    5121              :     /// @sa https://json.nlohmann.me/api/basic_json/merge_patch/
+    5122              :     void merge_patch(const basic_json& apply_patch)
+    5123              :     {
+    5124              :         if (apply_patch.is_object())
+    5125              :         {
+    5126              :             if (!is_object())
+    5127              :             {
+    5128              :                 *this = object();
+    5129              :             }
+    5130              :             for (auto it = apply_patch.begin(); it != apply_patch.end(); ++it)
+    5131              :             {
+    5132              :                 if (it.value().is_null())
+    5133              :                 {
+    5134              :                     erase(it.key());
+    5135              :                 }
+    5136              :                 else
+    5137              :                 {
+    5138              :                     operator[](it.key()).merge_patch(it.value());
+    5139              :                 }
+    5140              :             }
+    5141              :         }
+    5142              :         else
+    5143              :         {
+    5144              :             *this = apply_patch;
+    5145              :         }
+    5146              :     }
+    5147              : 
+    5148              :     /// @}
+    5149              : };
+    5150              : 
+    5151              : /// @brief user-defined to_string function for JSON values
+    5152              : /// @sa https://json.nlohmann.me/api/basic_json/to_string/
+    5153              : NLOHMANN_BASIC_JSON_TPL_DECLARATION
+    5154              : std::string to_string(const NLOHMANN_BASIC_JSON_TPL& j)
+    5155              : {
+    5156              :     return j.dump();
+    5157              : }
+    5158              : 
+    5159              : inline namespace literals
+    5160              : {
+    5161              : inline namespace json_literals
+    5162              : {
+    5163              : 
+    5164              : /// @brief user-defined string literal for JSON values
+    5165              : /// @sa https://json.nlohmann.me/api/basic_json/operator_literal_json/
+    5166              : JSON_HEDLEY_NON_NULL(1)
+    5167              : #if !defined(JSON_HEDLEY_GCC_VERSION) || JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0)
+    5168              :     inline nlohmann::json operator ""_json(const char* s, std::size_t n)
+    5169              : #else
+    5170              :     inline nlohmann::json operator "" _json(const char* s, std::size_t n)
+    5171              : #endif
+    5172              : {
+    5173              :     return nlohmann::json::parse(s, s + n);
+    5174              : }
+    5175              : 
+    5176              : /// @brief user-defined string literal for JSON pointer
+    5177              : /// @sa https://json.nlohmann.me/api/basic_json/operator_literal_json_pointer/
+    5178              : JSON_HEDLEY_NON_NULL(1)
+    5179              : #if !defined(JSON_HEDLEY_GCC_VERSION) || JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0)
+    5180              :     inline nlohmann::json::json_pointer operator ""_json_pointer(const char* s, std::size_t n)
+    5181              : #else
+    5182              :     inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t n)
+    5183              : #endif
+    5184              : {
+    5185              :     return nlohmann::json::json_pointer(std::string(s, n));
+    5186              : }
+    5187              : 
+    5188              : }  // namespace json_literals
+    5189              : }  // namespace literals
+    5190              : NLOHMANN_JSON_NAMESPACE_END
+    5191              : 
+    5192              : ///////////////////////
+    5193              : // nonmember support //
+    5194              : ///////////////////////
+    5195              : 
+    5196              : namespace std // NOLINT(cert-dcl58-cpp)
+    5197              : {
+    5198              : 
+    5199              : /// @brief hash value for JSON objects
+    5200              : /// @sa https://json.nlohmann.me/api/basic_json/std_hash/
+    5201              : NLOHMANN_BASIC_JSON_TPL_DECLARATION
+    5202              : struct hash<nlohmann::NLOHMANN_BASIC_JSON_TPL> // NOLINT(cert-dcl58-cpp)
+    5203              : {
+    5204              :     std::size_t operator()(const nlohmann::NLOHMANN_BASIC_JSON_TPL& j) const
+    5205              :     {
+    5206              :         return nlohmann::detail::hash(j);
+    5207              :     }
+    5208              : };
+    5209              : 
+    5210              : // specialization for std::less<value_t>
+    5211              : template<>
+    5212              : struct less< ::nlohmann::detail::value_t> // do not remove the space after '<', see https://github.com/nlohmann/json/pull/679
+    5213              : {
+    5214              :     /*!
+    5215              :     @brief compare two value_t enum values
+    5216              :     @since version 3.0.0
+    5217              :     */
+    5218              :     bool operator()(::nlohmann::detail::value_t lhs,
+    5219              :                     ::nlohmann::detail::value_t rhs) const noexcept
+    5220              :     {
+    5221              : #if JSON_HAS_THREE_WAY_COMPARISON
+    5222              :         return std::is_lt(lhs <=> rhs); // *NOPAD*
+    5223              : #else
+    5224              :         return ::nlohmann::detail::operator<(lhs, rhs);
+    5225              : #endif
+    5226              :     }
+    5227              : };
+    5228              : 
+    5229              : // C++20 prohibit function specialization in the std namespace.
+    5230              : #ifndef JSON_HAS_CPP_20
+    5231              : 
+    5232              : /// @brief exchanges the values of two JSON objects
+    5233              : /// @sa https://json.nlohmann.me/api/basic_json/std_swap/
+    5234              : NLOHMANN_BASIC_JSON_TPL_DECLARATION
+    5235              : inline void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL& j1, nlohmann::NLOHMANN_BASIC_JSON_TPL& j2) noexcept(  // NOLINT(readability-inconsistent-declaration-parameter-name, cert-dcl58-cpp)
+    5236              :     is_nothrow_move_constructible<nlohmann::NLOHMANN_BASIC_JSON_TPL>::value&&                          // NOLINT(misc-redundant-expression,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
+    5237              :     is_nothrow_move_assignable<nlohmann::NLOHMANN_BASIC_JSON_TPL>::value)
+    5238              : {
+    5239              :     j1.swap(j2);
+    5240              : }
+    5241              : 
+    5242              : #endif
+    5243              : 
+    5244              : }  // namespace std
+    5245              : 
+    5246              : #if JSON_USE_GLOBAL_UDLS
+    5247              :     #if !defined(JSON_HEDLEY_GCC_VERSION) || JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0)
+    5248              :         using nlohmann::literals::json_literals::operator ""_json; // NOLINT(misc-unused-using-decls,google-global-names-in-headers)
+    5249              :         using nlohmann::literals::json_literals::operator ""_json_pointer; //NOLINT(misc-unused-using-decls,google-global-names-in-headers)
+    5250              :     #else
+    5251              :         using nlohmann::literals::json_literals::operator "" _json; // NOLINT(misc-unused-using-decls,google-global-names-in-headers)
+    5252              :         using nlohmann::literals::json_literals::operator "" _json_pointer; //NOLINT(misc-unused-using-decls,google-global-names-in-headers)
+    5253              :     #endif
+    5254              : #endif
+    5255              : 
+    5256              : #include <nlohmann/detail/macro_unscope.hpp>
+    5257              : 
+    5258              : #endif  // INCLUDE_NLOHMANN_JSON_HPP_
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/log/index-sort-f.html b/html/BayesNet/lib/log/index-sort-f.html new file mode 100644 index 0000000..abb6938 --- /dev/null +++ b/html/BayesNet/lib/log/index-sort-f.html @@ -0,0 +1,117 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/log + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/logCoverageTotalHit
Test:coverage.infoLines:34.1 %804274
Test Date:2024-04-30 13:17:26Functions:28.1 %12836
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
loguru.cpp +
33.2%33.2%
+
33.2 %78526128.0 %11833
loguru.hpp +
68.4%68.4%
+
68.4 %191330.0 %103
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/log/index-sort-l.html b/html/BayesNet/lib/log/index-sort-l.html new file mode 100644 index 0000000..ab65945 --- /dev/null +++ b/html/BayesNet/lib/log/index-sort-l.html @@ -0,0 +1,117 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/log + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/logCoverageTotalHit
Test:coverage.infoLines:34.1 %804274
Test Date:2024-04-30 13:17:26Functions:28.1 %12836
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
loguru.cpp +
33.2%33.2%
+
33.2 %78526128.0 %11833
loguru.hpp +
68.4%68.4%
+
68.4 %191330.0 %103
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/log/index.html b/html/BayesNet/lib/log/index.html new file mode 100644 index 0000000..be4fa64 --- /dev/null +++ b/html/BayesNet/lib/log/index.html @@ -0,0 +1,117 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/log + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/logCoverageTotalHit
Test:coverage.infoLines:34.1 %804274
Test Date:2024-04-30 13:17:26Functions:28.1 %12836
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
loguru.cpp +
33.2%33.2%
+
33.2 %78526128.0 %11833
loguru.hpp +
68.4%68.4%
+
68.4 %191330.0 %103
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/log/loguru.cpp.func-c.html b/html/BayesNet/lib/log/loguru.cpp.func-c.html new file mode 100644 index 0000000..6b9bfe4 --- /dev/null +++ b/html/BayesNet/lib/log/loguru.cpp.func-c.html @@ -0,0 +1,908 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/log/loguru.cpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/log - loguru.cpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:33.2 %785261
Test Date:2024-04-30 13:17:26Functions:28.0 %11833
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN6loguru10add_syslogEPKci0
_ZN6loguru10add_syslogEPKcii0
_ZN6loguru10ec_to_textEPKNS_11EcEntryBaseE0
_ZN6loguru10ec_to_textEPKc0
_ZN6loguru10ec_to_textEc0
_ZN6loguru10ec_to_textEd0
_ZN6loguru10ec_to_textEe0
_ZN6loguru10ec_to_textEf0
_ZN6loguru10ec_to_textEi0
_ZN6loguru10ec_to_textEj0
_ZN6loguru10ec_to_textEl0
_ZN6loguru10ec_to_textEm0
_ZN6loguru10ec_to_textEx0
_ZN6loguru10ec_to_textEy0
_ZN6loguru10file_closeEPv0
_ZN6loguru10stacktraceEi0
_ZN6loguru10syslog_logEPvRKNS_7MessageE0
_ZN6loguru10textprintfEv0
_ZN6loguru10vstrprintfB5cxx11EPKcP13__va_list_tag0
_ZN6loguru11EcEntryBaseC2EPKcjS2_0
_ZN6loguru11EcEntryBaseD2Ev0
_ZN6loguru11current_dirEv0
_ZN6loguru12LogScopeRAIIC2EiPKcjS2_P13__va_list_tag0
_ZN6loguru12stream_printERNS_12StringStreamEPKc0
_ZN6loguru12syslog_closeEPv0
_ZN6loguru12syslog_flushEPv0
_ZN6loguru12terminal_dimEv0
_ZN6loguru12terminal_redEv0
_ZN6loguru13errno_as_textEv0
_ZN6loguru13log_and_abortEiPKcS1_j0
_ZN6loguru13log_and_abortEiPKcS1_jS1_z0
_ZN6loguru13terminal_blueEv0
_ZN6loguru13terminal_boldEv0
_ZN6loguru13terminal_cyanEv0
_ZN6loguru14argv0_filenameEv0
_ZN6loguru14signal_handlerEiP9siginfo_tPv0
_ZN6loguru14terminal_blackEv0
_ZN6loguru14terminal_greenEv0
_ZN6loguru14terminal_resetEv0
_ZN6loguru14terminal_whiteEv0
_ZN6loguru15do_replacementsERKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESaIS8_EERS7_0
_ZN6loguru15remove_callbackEPKc0
_ZN6loguru15terminal_purpleEv0
_ZN6loguru15terminal_yellowEv0
_ZN6loguru15write_date_timeEPcy0
_ZN6loguru15write_to_stderrEPKc0
_ZN6loguru15write_to_stderrEPKcm0
_ZN6loguru16free_ec_head_refEPv0
_ZN6loguru16suggest_log_pathEPKcPcy0
_ZN6loguru17add_stack_cleanupEPKcS1_0
_ZN6loguru17get_error_contextEv0
_ZN6loguru17get_fatal_handlerEv0
_ZN6loguru17set_fatal_handlerEPFvRKNS_7MessageEE0
_ZN6loguru18terminal_has_colorEv0
_ZN6loguru18terminal_light_redEv0
_ZN6loguru18terminal_underlineEv0
_ZN6loguru19ec_make_pthread_keyEv0
_ZN6loguru19prettify_stacktraceERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE0
_ZN6loguru19terminal_light_grayEv0
_ZN6loguru20get_thread_ec_handleEv0
_ZN6loguru20remove_all_callbacksEv0
_ZN6loguru21get_error_context_forEPKNS_11EcEntryBaseE0
_ZN6loguru22get_thread_ec_head_refEv0
_ZN6loguru23get_verbosity_from_nameEPKc0
_ZN6loguru23stacktrace_as_stdstringB5cxx11Ei0
_ZN6loguru27call_default_signal_handlerEi0
_ZN6loguru30set_name_to_verbosity_callbackEPFiPKcE0
_ZN6loguru30set_verbosity_to_name_callbackEPFPKciE0
_ZN6loguru4initERiPPcRKNS_7OptionsE0
_ZN6loguru5flushEv0
_ZN6loguru7raw_logEiPKcjS1_z0
_ZN6loguru8home_dirEv0
_ZN6loguru8shutdownEv0
_ZN6loguru9argumentsEv0
_ZN6loguru9strprintfB5cxx11EPKcz0
_ZN6loguruL10parse_argsERiPPcPKc0
_ZN6loguruL14write_hex_byteERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEh0
_ZN6loguruL15write_hex_digitERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj0
_ZN6loguruL23install_signal_handlersERKNS_13SignalOptionsE0
_ZN6loguruL6escapeERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS5_0
_ZN6loguruL9on_atexitEv0
_ZZN6loguru10ec_to_textEcENKUljE_clEj0
_ZZN6loguru10ec_to_textEcENKUltE_clEt0
_ZZN6loguru15remove_callbackEPKcENKUlRKNS_8CallbackEE_clES4_0
_ZZN6loguruL11log_messageEiRNS_7MessageEbbENKUlvE_clEv0
_ZN6loguru21make_pthread_key_nameEv2
_ZNK6loguruL20s_terminal_has_colorMUlvE_clEv2
_ZN6loguru8demangleEPKc8
_ZN6loguru9type_nameINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEES6_v8
_ZN6loguru9type_nameINSt7__cxx1112basic_stringIDiSt11char_traitsIDiESaIDiEEEEENS2_IcS3_IcESaIcEEEv2
_ZN6loguru9type_nameINSt7__cxx1112basic_stringIDsSt11char_traitsIDsESaIDsEEEEENS2_IcS3_IcESaIcEEEv2
_ZN6loguru9type_nameINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEES6_v2
_ZN6loguru9type_nameINSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEEEENS2_IcS3_IcESaIcEEEv2
_ZN6loguru12add_callbackEPKcPFvPvRKNS_7MessageEES2_iPFvS2_ES9_46
_ZN6loguru15set_thread_nameEPKc46
_ZN6loguru18create_directoriesEPKc46
_ZN6loguru3logEiPKcjS1_z46
_ZN6loguru4vlogEiPKcjS1_P13__va_list_tag46
_ZN6loguru8add_fileEPKcNS_8FileModeEi46
_ZN6loguruL18on_callback_changeEv46
_ZN6loguruL21print_preamble_headerEPcm46
_ZN6loguru10textprintfEPKcz868
_ZN6loguru12LogScopeRAII4InitEPKcP13__va_list_tag868
_ZN6loguru12LogScopeRAIIC2EiPKcjS2_z868
_ZN6loguru12LogScopeRAIID2Ev868
_ZN6loguruL11vtextprintfEPKcP13__va_list_tag914
_ZN6loguru4TextD2Ev922
_ZN6loguruL6now_nsEv1736
_ZN6loguru15get_thread_nameEPcyb1782
_ZN6loguru17log_to_everywhereEiiPKcjS1_S1_1782
_ZN6loguru18get_verbosity_nameEi1782
_ZN6loguru24current_verbosity_cutoffEv1782
_ZN6loguru8filenameEPKc1782
_ZN6loguruL11log_messageEiRNS_7MessageEbb1782
_ZN6loguruL14print_preambleEPcmiPKcj1782
_ZN6loguru10file_flushEPv23596
_ZN6loguru8file_logEPvRKNS_7MessageE23596
_ZN6loguruL11indentationEj25378
_ZN6loguru7to_fileEPv47192
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/log/loguru.cpp.func.html b/html/BayesNet/lib/log/loguru.cpp.func.html new file mode 100644 index 0000000..02db996 --- /dev/null +++ b/html/BayesNet/lib/log/loguru.cpp.func.html @@ -0,0 +1,908 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/log/loguru.cpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/log - loguru.cpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:33.2 %785261
Test Date:2024-04-30 13:17:26Functions:28.0 %11833
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN6loguru10add_syslogEPKci0
_ZN6loguru10add_syslogEPKcii0
_ZN6loguru10ec_to_textEPKNS_11EcEntryBaseE0
_ZN6loguru10ec_to_textEPKc0
_ZN6loguru10ec_to_textEc0
_ZN6loguru10ec_to_textEd0
_ZN6loguru10ec_to_textEe0
_ZN6loguru10ec_to_textEf0
_ZN6loguru10ec_to_textEi0
_ZN6loguru10ec_to_textEj0
_ZN6loguru10ec_to_textEl0
_ZN6loguru10ec_to_textEm0
_ZN6loguru10ec_to_textEx0
_ZN6loguru10ec_to_textEy0
_ZN6loguru10file_closeEPv0
_ZN6loguru10file_flushEPv23596
_ZN6loguru10stacktraceEi0
_ZN6loguru10syslog_logEPvRKNS_7MessageE0
_ZN6loguru10textprintfEPKcz868
_ZN6loguru10textprintfEv0
_ZN6loguru10vstrprintfB5cxx11EPKcP13__va_list_tag0
_ZN6loguru11EcEntryBaseC2EPKcjS2_0
_ZN6loguru11EcEntryBaseD2Ev0
_ZN6loguru11current_dirEv0
_ZN6loguru12LogScopeRAII4InitEPKcP13__va_list_tag868
_ZN6loguru12LogScopeRAIIC2EiPKcjS2_P13__va_list_tag0
_ZN6loguru12LogScopeRAIIC2EiPKcjS2_z868
_ZN6loguru12LogScopeRAIID2Ev868
_ZN6loguru12add_callbackEPKcPFvPvRKNS_7MessageEES2_iPFvS2_ES9_46
_ZN6loguru12stream_printERNS_12StringStreamEPKc0
_ZN6loguru12syslog_closeEPv0
_ZN6loguru12syslog_flushEPv0
_ZN6loguru12terminal_dimEv0
_ZN6loguru12terminal_redEv0
_ZN6loguru13errno_as_textEv0
_ZN6loguru13log_and_abortEiPKcS1_j0
_ZN6loguru13log_and_abortEiPKcS1_jS1_z0
_ZN6loguru13terminal_blueEv0
_ZN6loguru13terminal_boldEv0
_ZN6loguru13terminal_cyanEv0
_ZN6loguru14argv0_filenameEv0
_ZN6loguru14signal_handlerEiP9siginfo_tPv0
_ZN6loguru14terminal_blackEv0
_ZN6loguru14terminal_greenEv0
_ZN6loguru14terminal_resetEv0
_ZN6loguru14terminal_whiteEv0
_ZN6loguru15do_replacementsERKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESaIS8_EERS7_0
_ZN6loguru15get_thread_nameEPcyb1782
_ZN6loguru15remove_callbackEPKc0
_ZN6loguru15set_thread_nameEPKc46
_ZN6loguru15terminal_purpleEv0
_ZN6loguru15terminal_yellowEv0
_ZN6loguru15write_date_timeEPcy0
_ZN6loguru15write_to_stderrEPKc0
_ZN6loguru15write_to_stderrEPKcm0
_ZN6loguru16free_ec_head_refEPv0
_ZN6loguru16suggest_log_pathEPKcPcy0
_ZN6loguru17add_stack_cleanupEPKcS1_0
_ZN6loguru17get_error_contextEv0
_ZN6loguru17get_fatal_handlerEv0
_ZN6loguru17log_to_everywhereEiiPKcjS1_S1_1782
_ZN6loguru17set_fatal_handlerEPFvRKNS_7MessageEE0
_ZN6loguru18create_directoriesEPKc46
_ZN6loguru18get_verbosity_nameEi1782
_ZN6loguru18terminal_has_colorEv0
_ZN6loguru18terminal_light_redEv0
_ZN6loguru18terminal_underlineEv0
_ZN6loguru19ec_make_pthread_keyEv0
_ZN6loguru19prettify_stacktraceERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE0
_ZN6loguru19terminal_light_grayEv0
_ZN6loguru20get_thread_ec_handleEv0
_ZN6loguru20remove_all_callbacksEv0
_ZN6loguru21get_error_context_forEPKNS_11EcEntryBaseE0
_ZN6loguru21make_pthread_key_nameEv2
_ZN6loguru22get_thread_ec_head_refEv0
_ZN6loguru23get_verbosity_from_nameEPKc0
_ZN6loguru23stacktrace_as_stdstringB5cxx11Ei0
_ZN6loguru24current_verbosity_cutoffEv1782
_ZN6loguru27call_default_signal_handlerEi0
_ZN6loguru30set_name_to_verbosity_callbackEPFiPKcE0
_ZN6loguru30set_verbosity_to_name_callbackEPFPKciE0
_ZN6loguru3logEiPKcjS1_z46
_ZN6loguru4TextD2Ev922
_ZN6loguru4initERiPPcRKNS_7OptionsE0
_ZN6loguru4vlogEiPKcjS1_P13__va_list_tag46
_ZN6loguru5flushEv0
_ZN6loguru7raw_logEiPKcjS1_z0
_ZN6loguru7to_fileEPv47192
_ZN6loguru8add_fileEPKcNS_8FileModeEi46
_ZN6loguru8demangleEPKc8
_ZN6loguru8file_logEPvRKNS_7MessageE23596
_ZN6loguru8filenameEPKc1782
_ZN6loguru8home_dirEv0
_ZN6loguru8shutdownEv0
_ZN6loguru9argumentsEv0
_ZN6loguru9strprintfB5cxx11EPKcz0
_ZN6loguru9type_nameINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEES6_v8
_ZN6loguru9type_nameINSt7__cxx1112basic_stringIDiSt11char_traitsIDiESaIDiEEEEENS2_IcS3_IcESaIcEEEv2
_ZN6loguru9type_nameINSt7__cxx1112basic_stringIDsSt11char_traitsIDsESaIDsEEEEENS2_IcS3_IcESaIcEEEv2
_ZN6loguru9type_nameINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEES6_v2
_ZN6loguru9type_nameINSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEEEENS2_IcS3_IcESaIcEEEv2
_ZN6loguruL10parse_argsERiPPcPKc0
_ZN6loguruL11indentationEj25378
_ZN6loguruL11log_messageEiRNS_7MessageEbb1782
_ZN6loguruL11vtextprintfEPKcP13__va_list_tag914
_ZN6loguruL14print_preambleEPcmiPKcj1782
_ZN6loguruL14write_hex_byteERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEh0
_ZN6loguruL15write_hex_digitERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj0
_ZN6loguruL18on_callback_changeEv46
_ZN6loguruL21print_preamble_headerEPcm46
_ZN6loguruL23install_signal_handlersERKNS_13SignalOptionsE0
_ZN6loguruL6escapeERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS5_0
_ZN6loguruL6now_nsEv1736
_ZN6loguruL9on_atexitEv0
_ZNK6loguruL20s_terminal_has_colorMUlvE_clEv2
_ZZN6loguru10ec_to_textEcENKUljE_clEj0
_ZZN6loguru10ec_to_textEcENKUltE_clEt0
_ZZN6loguru15remove_callbackEPKcENKUlRKNS_8CallbackEE_clES4_0
_ZZN6loguruL11log_messageEiRNS_7MessageEbbENKUlvE_clEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/log/loguru.cpp.gcov.html b/html/BayesNet/lib/log/loguru.cpp.gcov.html new file mode 100644 index 0000000..0fa4bc1 --- /dev/null +++ b/html/BayesNet/lib/log/loguru.cpp.gcov.html @@ -0,0 +1,2085 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/log/loguru.cpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/log - loguru.cpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:33.2 %785261
Test Date:2024-04-30 13:17:26Functions:28.0 %11833
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #if defined(__GNUC__) || defined(__clang__)
+       2              : // Disable all warnings from gcc/clang:
+       3              : #pragma GCC diagnostic push
+       4              : #pragma GCC diagnostic ignored "-Wpragmas"
+       5              : 
+       6              : #pragma GCC diagnostic ignored "-Wc++98-compat"
+       7              : #pragma GCC diagnostic ignored "-Wc++98-compat-pedantic"
+       8              : #pragma GCC diagnostic ignored "-Wexit-time-destructors"
+       9              : #pragma GCC diagnostic ignored "-Wformat-nonliteral"
+      10              : #pragma GCC diagnostic ignored "-Wglobal-constructors"
+      11              : #pragma GCC diagnostic ignored "-Wgnu-zero-variadic-macro-arguments"
+      12              : #pragma GCC diagnostic ignored "-Wmissing-prototypes"
+      13              : #pragma GCC diagnostic ignored "-Wpadded"
+      14              : #pragma GCC diagnostic ignored "-Wsign-conversion"
+      15              : #pragma GCC diagnostic ignored "-Wunknown-pragmas"
+      16              : #pragma GCC diagnostic ignored "-Wunused-macros"
+      17              : #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
+      18              : #elif defined(_MSC_VER)
+      19              : #pragma warning(push)
+      20              : #pragma warning(disable:4365) // conversion from 'X' to 'Y', signed/unsigned mismatch
+      21              : #endif
+      22              : 
+      23              : #include "loguru.hpp"
+      24              : 
+      25              : #ifndef LOGURU_HAS_BEEN_IMPLEMENTED
+      26              : #define LOGURU_HAS_BEEN_IMPLEMENTED
+      27              : 
+      28              : #define LOGURU_PREAMBLE_WIDTH (53 + LOGURU_THREADNAME_WIDTH + LOGURU_FILENAME_WIDTH)
+      29              : 
+      30              : #undef min
+      31              : #undef max
+      32              : 
+      33              : #include <algorithm>
+      34              : #include <atomic>
+      35              : #include <cctype>
+      36              : #include <chrono>
+      37              : #include <cstdarg>
+      38              : #include <cstdio>
+      39              : #include <cstdlib>
+      40              : #include <cstring>
+      41              : #include <mutex>
+      42              : #include <regex>
+      43              : #include <string>
+      44              : #include <thread>
+      45              : #include <vector>
+      46              : 
+      47              : #if LOGURU_SYSLOG
+      48              : #include <syslog.h>
+      49              : #else
+      50              : #define LOG_USER 0
+      51              : #endif
+      52              : 
+      53              : #ifdef _WIN32
+      54              : #include <direct.h>
+      55              : 
+      56              : #define localtime_r(a, b) localtime_s(b, a) // No localtime_r with MSVC, but arguments are swapped for localtime_s
+      57              : #else
+      58              : #include <signal.h>
+      59              : #include <sys/stat.h> // mkdir
+      60              : #include <unistd.h>   // STDERR_FILENO
+      61              : #endif
+      62              : 
+      63              : #ifdef __linux__
+      64              : #include <linux/limits.h> // PATH_MAX
+      65              : #elif !defined(_WIN32)
+      66              : #include <limits.h> // PATH_MAX
+      67              : #endif
+      68              : 
+      69              : #ifndef PATH_MAX
+      70              : #define PATH_MAX 1024
+      71              : #endif
+      72              : 
+      73              : #ifdef __APPLE__
+      74              : #include "TargetConditionals.h"
+      75              : #endif
+      76              : 
+      77              : // TODO: use defined(_POSIX_VERSION) for some of these things?
+      78              : 
+      79              : #if defined(_WIN32) || defined(__CYGWIN__)
+      80              : #define LOGURU_PTHREADS    0
+      81              : #define LOGURU_WINTHREADS  1
+      82              : #ifndef LOGURU_STACKTRACES
+      83              : #define LOGURU_STACKTRACES 0
+      84              : #endif
+      85              : #else
+      86              : #define LOGURU_PTHREADS    1
+      87              : #define LOGURU_WINTHREADS  0
+      88              : #ifdef __GLIBC__
+      89              : #ifndef LOGURU_STACKTRACES
+      90              : #define LOGURU_STACKTRACES 1
+      91              : #endif
+      92              : #else
+      93              : #ifndef LOGURU_STACKTRACES
+      94              : #define LOGURU_STACKTRACES 0
+      95              : #endif
+      96              : #endif
+      97              : #endif
+      98              : 
+      99              : #if LOGURU_STACKTRACES
+     100              : #include <cxxabi.h>    // for __cxa_demangle
+     101              : #include <dlfcn.h>     // for dladdr
+     102              : #include <execinfo.h>  // for backtrace
+     103              : #endif // LOGURU_STACKTRACES
+     104              : 
+     105              : #if LOGURU_PTHREADS
+     106              : #include <pthread.h>
+     107              : #if defined(__FreeBSD__)
+     108              : #include <pthread_np.h>
+     109              : #include <sys/thr.h>
+     110              : #elif defined(__OpenBSD__)
+     111              : #include <pthread_np.h>
+     112              : #endif
+     113              : 
+     114              : #ifdef __linux__
+     115              :     /* On Linux, the default thread name is the same as the name of the binary.
+     116              :        Additionally, all new threads inherit the name of the thread it got forked from.
+     117              :        For this reason, Loguru use the pthread Thread Local Storage
+     118              :        for storing thread names on Linux. */
+     119              : #ifndef LOGURU_PTLS_NAMES
+     120              : #define LOGURU_PTLS_NAMES 1
+     121              : #endif
+     122              : #endif
+     123              : #endif
+     124              : 
+     125              : #if LOGURU_WINTHREADS
+     126              : #ifndef _WIN32_WINNT
+     127              : #define _WIN32_WINNT 0x0502
+     128              : #endif
+     129              : #define WIN32_LEAN_AND_MEAN
+     130              : #define NOMINMAX
+     131              : #include <windows.h>
+     132              : #endif
+     133              : 
+     134              : #ifndef LOGURU_PTLS_NAMES
+     135              : #define LOGURU_PTLS_NAMES 0
+     136              : #endif
+     137              : 
+     138              : LOGURU_ANONYMOUS_NAMESPACE_BEGIN
+     139              : 
+     140              : namespace loguru {
+     141              :     using namespace std::chrono;
+     142              : 
+     143              : #if LOGURU_WITH_FILEABS
+     144              :     struct FileAbs {
+     145              :         char path[PATH_MAX];
+     146              :         char mode_str[4];
+     147              :         Verbosity verbosity;
+     148              :         struct stat st;
+     149              :         FILE* fp;
+     150              :         bool is_reopening = false; // to prevent recursive call in file_reopen.
+     151              :         decltype(steady_clock::now()) last_check_time = steady_clock::now();
+     152              :     };
+     153              : #else
+     154              :     typedef FILE* FileAbs;
+     155              : #endif
+     156              : 
+     157              :     struct Callback {
+     158              :         std::string     id;
+     159              :         log_handler_t   callback;
+     160              :         void* user_data;
+     161              :         Verbosity       verbosity; // Does not change!
+     162              :         close_handler_t close;
+     163              :         flush_handler_t flush;
+     164              :         unsigned        indentation;
+     165              :     };
+     166              : 
+     167              :     using CallbackVec = std::vector<Callback>;
+     168              : 
+     169              :     using StringPair = std::pair<std::string, std::string>;
+     170              :     using StringPairList = std::vector<StringPair>;
+     171              : 
+     172              :     const auto s_start_time = steady_clock::now();
+     173              : 
+     174              :     Verbosity g_stderr_verbosity = Verbosity_0;
+     175              :     bool      g_colorlogtostderr = true;
+     176              :     unsigned  g_flush_interval_ms = 0;
+     177              :     bool      g_preamble_header = true;
+     178              :     bool      g_preamble = true;
+     179              : 
+     180              :     Verbosity g_internal_verbosity = Verbosity_0;
+     181              : 
+     182              :     // Preamble details
+     183              :     bool      g_preamble_date = true;
+     184              :     bool      g_preamble_time = true;
+     185              :     bool      g_preamble_uptime = true;
+     186              :     bool      g_preamble_thread = true;
+     187              :     bool      g_preamble_file = true;
+     188              :     bool      g_preamble_verbose = true;
+     189              :     bool      g_preamble_pipe = true;
+     190              : 
+     191              :     static std::recursive_mutex  s_mutex;
+     192              :     static Verbosity             s_max_out_verbosity = Verbosity_OFF;
+     193              :     static std::string           s_argv0_filename;
+     194              :     static std::string           s_arguments;
+     195              :     static char                  s_current_dir[PATH_MAX];
+     196              :     static CallbackVec           s_callbacks;
+     197              :     static fatal_handler_t       s_fatal_handler = nullptr;
+     198              :     static verbosity_to_name_t   s_verbosity_to_name_callback = nullptr;
+     199              :     static name_to_verbosity_t   s_name_to_verbosity_callback = nullptr;
+     200              :     static StringPairList        s_user_stack_cleanups;
+     201              :     static bool                  s_strip_file_path = true;
+     202              :     static std::atomic<unsigned> s_stderr_indentation{ 0 };
+     203              : 
+     204              :     // For periodic flushing:
+     205              :     static std::thread* s_flush_thread = nullptr;
+     206              :     static bool         s_needs_flushing = false;
+     207              : 
+     208              :     static SignalOptions s_signal_options = SignalOptions::none();
+     209              : 
+     210            2 :     static const bool s_terminal_has_color = []() {
+     211              : #ifdef _WIN32
+     212              : #ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
+     213              : #define ENABLE_VIRTUAL_TERMINAL_PROCESSING  0x0004
+     214              : #endif
+     215              : 
+     216              :         HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
+     217              :         if (hOut != INVALID_HANDLE_VALUE) {
+     218              :             DWORD dwMode = 0;
+     219              :             GetConsoleMode(hOut, &dwMode);
+     220              :             dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
+     221              :             return SetConsoleMode(hOut, dwMode) != 0;
+     222              :         }
+     223              :         return false;
+     224              : #else
+     225            2 :         if (!isatty(STDERR_FILENO)) {
+     226            0 :             return false;
+     227              :         }
+     228            2 :         if (const char* term = getenv("TERM")) {
+     229            2 :             return 0 == strcmp(term, "cygwin")
+     230            2 :                 || 0 == strcmp(term, "linux")
+     231            2 :                 || 0 == strcmp(term, "rxvt-unicode-256color")
+     232            2 :                 || 0 == strcmp(term, "screen")
+     233            2 :                 || 0 == strcmp(term, "screen-256color")
+     234            2 :                 || 0 == strcmp(term, "screen.xterm-256color")
+     235            2 :                 || 0 == strcmp(term, "tmux-256color")
+     236            2 :                 || 0 == strcmp(term, "xterm")
+     237            2 :                 || 0 == strcmp(term, "xterm-256color")
+     238            0 :                 || 0 == strcmp(term, "xterm-termite")
+     239            4 :                 || 0 == strcmp(term, "xterm-color");
+     240              :         } else {
+     241            0 :             return false;
+     242              :         }
+     243              : #endif
+     244              :         }();
+     245              : 
+     246              :     static void print_preamble_header(char* out_buff, size_t out_buff_size);
+     247              : 
+     248              :     // ------------------------------------------------------------------------------
+     249              :     // Colors
+     250              : 
+     251            0 :     bool terminal_has_color() { return s_terminal_has_color; }
+     252              : 
+     253              :     // Colors
+     254              : 
+     255              : #ifdef _WIN32
+     256              : #define VTSEQ(ID) ("\x1b[1;" #ID "m")
+     257              : #else
+     258              : #define VTSEQ(ID) ("\x1b[" #ID "m")
+     259              : #endif
+     260              : 
+     261            0 :     const char* terminal_black() { return s_terminal_has_color ? VTSEQ(30) : ""; }
+     262            0 :     const char* terminal_red() { return s_terminal_has_color ? VTSEQ(31) : ""; }
+     263            0 :     const char* terminal_green() { return s_terminal_has_color ? VTSEQ(32) : ""; }
+     264            0 :     const char* terminal_yellow() { return s_terminal_has_color ? VTSEQ(33) : ""; }
+     265            0 :     const char* terminal_blue() { return s_terminal_has_color ? VTSEQ(34) : ""; }
+     266            0 :     const char* terminal_purple() { return s_terminal_has_color ? VTSEQ(35) : ""; }
+     267            0 :     const char* terminal_cyan() { return s_terminal_has_color ? VTSEQ(36) : ""; }
+     268            0 :     const char* terminal_light_gray() { return s_terminal_has_color ? VTSEQ(37) : ""; }
+     269            0 :     const char* terminal_white() { return s_terminal_has_color ? VTSEQ(37) : ""; }
+     270            0 :     const char* terminal_light_red() { return s_terminal_has_color ? VTSEQ(91) : ""; }
+     271            0 :     const char* terminal_dim() { return s_terminal_has_color ? VTSEQ(2) : ""; }
+     272              : 
+     273              :     // Formating
+     274            0 :     const char* terminal_bold() { return s_terminal_has_color ? VTSEQ(1) : ""; }
+     275            0 :     const char* terminal_underline() { return s_terminal_has_color ? VTSEQ(4) : ""; }
+     276              : 
+     277              :     // You should end each line with this!
+     278            0 :     const char* terminal_reset() { return s_terminal_has_color ? VTSEQ(0) : ""; }
+     279              : 
+     280              :     // ------------------------------------------------------------------------------
+     281              : #if LOGURU_WITH_FILEABS
+     282              :     void file_reopen(void* user_data);
+     283              :     inline FILE* to_file(void* user_data) { return reinterpret_cast<FileAbs*>(user_data)->fp; }
+     284              : #else
+     285        47192 :     inline FILE* to_file(void* user_data) { return reinterpret_cast<FILE*>(user_data); }
+     286              : #endif
+     287              : 
+     288        23596 :     void file_log(void* user_data, const Message& message)
+     289              :     {
+     290              : #if LOGURU_WITH_FILEABS
+     291              :         FileAbs* file_abs = reinterpret_cast<FileAbs*>(user_data);
+     292              :         if (file_abs->is_reopening) {
+     293              :             return;
+     294              :         }
+     295              :         // It is better checking file change every minute/hour/day,
+     296              :         // instead of doing this every time we log.
+     297              :         // Here check_interval is set to zero to enable checking every time;
+     298              :         const auto check_interval = seconds(0);
+     299              :         if (duration_cast<seconds>(steady_clock::now() - file_abs->last_check_time) > check_interval) {
+     300              :             file_abs->last_check_time = steady_clock::now();
+     301              :             file_reopen(user_data);
+     302              :         }
+     303              :         FILE* file = to_file(user_data);
+     304              :         if (!file) {
+     305              :             return;
+     306              :         }
+     307              : #else
+     308        23596 :         FILE* file = to_file(user_data);
+     309              : #endif
+     310        23596 :         fprintf(file, "%s%s%s%s\n",
+     311        23596 :             message.preamble, message.indentation, message.prefix, message.message);
+     312        23596 :         if (g_flush_interval_ms == 0) {
+     313        23596 :             fflush(file);
+     314              :         }
+     315        23596 :     }
+     316              : 
+     317            0 :     void file_close(void* user_data)
+     318              :     {
+     319            0 :         FILE* file = to_file(user_data);
+     320            0 :         if (file) {
+     321            0 :             fclose(file);
+     322              :         }
+     323              : #if LOGURU_WITH_FILEABS
+     324              :         delete reinterpret_cast<FileAbs*>(user_data);
+     325              : #endif
+     326            0 :     }
+     327              : 
+     328        23596 :     void file_flush(void* user_data)
+     329              :     {
+     330        23596 :         FILE* file = to_file(user_data);
+     331        23596 :         fflush(file);
+     332        23596 :     }
+     333              : 
+     334              : #if LOGURU_WITH_FILEABS
+     335              :     void file_reopen(void* user_data)
+     336              :     {
+     337              :         FileAbs* file_abs = reinterpret_cast<FileAbs*>(user_data);
+     338              :         struct stat st;
+     339              :         int ret;
+     340              :         if (!file_abs->fp || (ret = stat(file_abs->path, &st)) == -1 || (st.st_ino != file_abs->st.st_ino)) {
+     341              :             file_abs->is_reopening = true;
+     342              :             if (file_abs->fp) {
+     343              :                 fclose(file_abs->fp);
+     344              :             }
+     345              :             if (!file_abs->fp) {
+     346              :                 VLOG_F(g_internal_verbosity, "Reopening file '" LOGURU_FMT(s) "' due to previous error", file_abs->path);
+     347              :             } else if (ret < 0) {
+     348              :                 const auto why = errno_as_text();
+     349              :                 VLOG_F(g_internal_verbosity, "Reopening file '" LOGURU_FMT(s) "' due to '" LOGURU_FMT(s) "'", file_abs->path, why.c_str());
+     350              :             } else {
+     351              :                 VLOG_F(g_internal_verbosity, "Reopening file '" LOGURU_FMT(s) "' due to file changed", file_abs->path);
+     352              :             }
+     353              :             // try reopen current file.
+     354              :             if (!create_directories(file_abs->path)) {
+     355              :                 LOG_F(ERROR, "Failed to create directories to '" LOGURU_FMT(s) "'", file_abs->path);
+     356              :             }
+     357              :             file_abs->fp = fopen(file_abs->path, file_abs->mode_str);
+     358              :             if (!file_abs->fp) {
+     359              :                 LOG_F(ERROR, "Failed to open '" LOGURU_FMT(s) "'", file_abs->path);
+     360              :             } else {
+     361              :                 stat(file_abs->path, &file_abs->st);
+     362              :             }
+     363              :             file_abs->is_reopening = false;
+     364              :         }
+     365              :     }
+     366              : #endif
+     367              :     // ------------------------------------------------------------------------------
+     368              :     // ------------------------------------------------------------------------------
+     369              : #if LOGURU_SYSLOG
+     370            0 :     void syslog_log(void* /*user_data*/, const Message& message)
+     371              :     {
+     372              :         /*
+     373              :             Level 0: Is reserved for kernel panic type situations.
+     374              :             Level 1: Is for Major resource failure.
+     375              :             Level 2->7 Application level failures
+     376              :         */
+     377              :         int level;
+     378            0 :         if (message.verbosity < Verbosity_FATAL) {
+     379            0 :             level = 1; // System Alert
+     380              :         } else {
+     381            0 :             switch (message.verbosity) {
+     382            0 :                 case Verbosity_FATAL:   level = 2; break;       // System Critical
+     383            0 :                 case Verbosity_ERROR:   level = 3; break;       // System Error
+     384            0 :                 case Verbosity_WARNING: level = 4; break;       // System Warning
+     385            0 :                 case Verbosity_INFO:    level = 5; break;       // System Notice
+     386            0 :                 case Verbosity_1:       level = 6; break;       // System Info
+     387            0 :                 default:                level = 7; break;       // System Debug
+     388              :             }
+     389              :         }
+     390              : 
+     391              :         // Note: We don't add the time info.
+     392              :         // This is done automatically by the syslog deamon.
+     393              :         // Otherwise log all information that the file log does.
+     394            0 :         syslog(level, "%s%s%s", message.indentation, message.prefix, message.message);
+     395            0 :     }
+     396              : 
+     397            0 :     void syslog_close(void* /*user_data*/)
+     398              :     {
+     399            0 :         closelog();
+     400            0 :     }
+     401              : 
+     402            0 :     void syslog_flush(void* /*user_data*/)
+     403              :     {
+     404            0 :     }
+     405              : #endif
+     406              :     // ------------------------------------------------------------------------------
+     407              :         // Helpers:
+     408              : 
+     409          922 :     Text::~Text() { free(_str); }
+     410              : 
+     411              : #if LOGURU_USE_FMTLIB
+     412              :     Text vtextprintf(const char* format, fmt::format_args args)
+     413              :     {
+     414              :         return Text(STRDUP(fmt::vformat(format, args).c_str()));
+     415              :     }
+     416              : #else
+     417              :     LOGURU_PRINTF_LIKE(1, 0)
+     418          914 :         static Text vtextprintf(const char* format, va_list vlist)
+     419              :     {
+     420              : #ifdef _WIN32
+     421              :         int bytes_needed = _vscprintf(format, vlist);
+     422              :         CHECK_F(bytes_needed >= 0, "Bad string format: '%s'", format);
+     423              :         char* buff = (char*)malloc(bytes_needed + 1);
+     424              :         vsnprintf(buff, bytes_needed + 1, format, vlist);
+     425              :         return Text(buff);
+     426              : #else
+     427          914 :         char* buff = nullptr;
+     428          914 :         int result = vasprintf(&buff, format, vlist);
+     429          914 :         CHECK_F(result >= 0, "Bad string format: '" LOGURU_FMT(s) "'", format);
+     430         1828 :         return Text(buff);
+     431              : #endif
+     432              :     }
+     433              : 
+     434          868 :     Text textprintf(const char* format, ...)
+     435              :     {
+     436              :         va_list vlist;
+     437          868 :         va_start(vlist, format);
+     438          868 :         auto result = vtextprintf(format, vlist);
+     439          868 :         va_end(vlist);
+     440         1736 :         return result;
+     441              :     }
+     442              : #endif
+     443              : 
+     444              :     // Overloaded for variadic template matching.
+     445            0 :     Text textprintf()
+     446              :     {
+     447            0 :         return Text(static_cast<char*>(calloc(1, 1)));
+     448              :     }
+     449              : 
+     450        25378 :     static const char* indentation(unsigned depth)
+     451              :     {
+     452              :         static const char buff[] =
+     453              :             ".   .   .   .   .   .   .   .   .   .   " ".   .   .   .   .   .   .   .   .   .   "
+     454              :             ".   .   .   .   .   .   .   .   .   .   " ".   .   .   .   .   .   .   .   .   .   "
+     455              :             ".   .   .   .   .   .   .   .   .   .   " ".   .   .   .   .   .   .   .   .   .   "
+     456              :             ".   .   .   .   .   .   .   .   .   .   " ".   .   .   .   .   .   .   .   .   .   "
+     457              :             ".   .   .   .   .   .   .   .   .   .   " ".   .   .   .   .   .   .   .   .   .   ";
+     458              :         static const size_t INDENTATION_WIDTH = 4;
+     459              :         static const size_t NUM_INDENTATIONS = (sizeof(buff) - 1) / INDENTATION_WIDTH;
+     460        25378 :         depth = std::min<unsigned>(depth, NUM_INDENTATIONS);
+     461        25378 :         return buff + INDENTATION_WIDTH * (NUM_INDENTATIONS - depth);
+     462              :     }
+     463              : 
+     464            0 :     static void parse_args(int& argc, char* argv[], const char* verbosity_flag)
+     465              :     {
+     466            0 :         int arg_dest = 1;
+     467            0 :         int out_argc = argc;
+     468              : 
+     469            0 :         for (int arg_it = 1; arg_it < argc; ++arg_it) {
+     470            0 :             auto cmd = argv[arg_it];
+     471            0 :             auto arg_len = strlen(verbosity_flag);
+     472              : 
+     473            0 :             bool last_is_alpha = false;
+     474              : #if LOGURU_USE_LOCALE
+     475              :             try {  // locale variant of isalpha will throw on error
+     476              :                 last_is_alpha = std::isalpha(cmd[arg_len], std::locale(""));
+     477              :             }
+     478              :             catch (...) {
+     479              :                 last_is_alpha = std::isalpha(static_cast<int>(cmd[arg_len]));
+     480              :             }
+     481              : #else
+     482            0 :             last_is_alpha = std::isalpha(static_cast<int>(cmd[arg_len]));
+     483              : #endif
+     484              : 
+     485            0 :             if (strncmp(cmd, verbosity_flag, arg_len) == 0 && !last_is_alpha) {
+     486            0 :                 out_argc -= 1;
+     487            0 :                 auto value_str = cmd + arg_len;
+     488            0 :                 if (value_str[0] == '\0') {
+     489              :                     // Value in separate argument
+     490            0 :                     arg_it += 1;
+     491            0 :                     CHECK_LT_F(arg_it, argc, "Missing verbosiy level after " LOGURU_FMT(s) "", verbosity_flag);
+     492            0 :                     value_str = argv[arg_it];
+     493            0 :                     out_argc -= 1;
+     494              :                 }
+     495            0 :                 if (*value_str == '=') { value_str += 1; }
+     496              : 
+     497            0 :                 auto req_verbosity = get_verbosity_from_name(value_str);
+     498            0 :                 if (req_verbosity != Verbosity_INVALID) {
+     499            0 :                     g_stderr_verbosity = req_verbosity;
+     500              :                 } else {
+     501            0 :                     char* end = 0;
+     502            0 :                     g_stderr_verbosity = static_cast<int>(strtol(value_str, &end, 10));
+     503            0 :                     CHECK_F(end && *end == '\0',
+     504              :                         "Invalid verbosity. Expected integer, INFO, WARNING, ERROR or OFF, got '" LOGURU_FMT(s) "'", value_str);
+     505              :                 }
+     506            0 :             } else {
+     507            0 :                 argv[arg_dest++] = argv[arg_it];
+     508              :             }
+     509              :         }
+     510              : 
+     511            0 :         argc = out_argc;
+     512            0 :         argv[argc] = nullptr;
+     513            0 :     }
+     514              : 
+     515         1736 :     static long long now_ns()
+     516              :     {
+     517         1736 :         return duration_cast<nanoseconds>(high_resolution_clock::now().time_since_epoch()).count();
+     518              :     }
+     519              : 
+     520              :     // Returns the part of the path after the last / or \ (if any).
+     521         1782 :     const char* filename(const char* path)
+     522              :     {
+     523       111668 :         for (auto ptr = path; *ptr; ++ptr) {
+     524       109886 :             if (*ptr == '/' || *ptr == '\\') {
+     525        12474 :                 path = ptr + 1;
+     526              :             }
+     527              :         }
+     528         1782 :         return path;
+     529              :     }
+     530              : 
+     531              :     // ------------------------------------------------------------------------------
+     532              : 
+     533            0 :     static void on_atexit()
+     534              :     {
+     535            0 :         VLOG_F(g_internal_verbosity, "atexit");
+     536            0 :         flush();
+     537            0 :     }
+     538              : 
+     539              :     static void install_signal_handlers(const SignalOptions& signal_options);
+     540              : 
+     541            0 :     static void write_hex_digit(std::string& out, unsigned num)
+     542              :     {
+     543            0 :         DCHECK_LT_F(num, 16u);
+     544            0 :         if (num < 10u) { out.push_back(char('0' + num)); } else { out.push_back(char('A' + num - 10)); }
+     545            0 :     }
+     546              : 
+     547            0 :     static void write_hex_byte(std::string& out, uint8_t n)
+     548              :     {
+     549            0 :         write_hex_digit(out, n >> 4u);
+     550            0 :         write_hex_digit(out, n & 0x0f);
+     551            0 :     }
+     552              : 
+     553            0 :     static void escape(std::string& out, const std::string& str)
+     554              :     {
+     555            0 :         for (char c : str) {
+     556            0 :             /**/ if (c == '\a') { out += "\\a"; } else if (c == '\b') { out += "\\b"; } else if (c == '\f') { out += "\\f"; } else if (c == '\n') { out += "\\n"; } else if (c == '\r') { out += "\\r"; } else if (c == '\t') { out += "\\t"; } else if (c == '\v') { out += "\\v"; } else if (c == '\\') { out += "\\\\"; } else if (c == '\'') { out += "\\\'"; } else if (c == '\"') { out += "\\\""; } else if (c == ' ') { out += "\\ "; } else if (0 <= c && c < 0x20) { // ASCI control character:
+     557              :                 // else if (c < 0x20 || c != (c & 127)) { // ASCII control character or UTF-8:
+     558            0 :                 out += "\\x";
+     559            0 :                 write_hex_byte(out, static_cast<uint8_t>(c));
+     560            0 :             } else { out += c; }
+     561              :         }
+     562            0 :     }
+     563              : 
+     564            0 :     Text errno_as_text()
+     565              :     {
+     566              :         char buff[256];
+     567              : #if defined(__GLIBC__) && defined(_GNU_SOURCE)
+     568              :         // GNU Version
+     569            0 :         return Text(STRDUP(strerror_r(errno, buff, sizeof(buff))));
+     570              : #elif defined(__APPLE__) || _POSIX_C_SOURCE >= 200112L
+     571              :         // XSI Version
+     572              :         strerror_r(errno, buff, sizeof(buff));
+     573              :         return Text(strdup(buff));
+     574              : #elif defined(_WIN32)
+     575              :         strerror_s(buff, sizeof(buff), errno);
+     576              :         return Text(STRDUP(buff));
+     577              : #else
+     578              :         // Not thread-safe.
+     579              :         return Text(STRDUP(strerror(errno)));
+     580              : #endif
+     581              :     }
+     582              : 
+     583            0 :     void init(int& argc, char* argv[], const Options& options)
+     584              :     {
+     585            0 :         CHECK_GT_F(argc, 0, "Expected proper argc/argv");
+     586            0 :         CHECK_EQ_F(argv[argc], nullptr, "Expected proper argc/argv");
+     587              : 
+     588            0 :         s_argv0_filename = filename(argv[0]);
+     589              : 
+     590              : #ifdef _WIN32
+     591              : #define getcwd _getcwd
+     592              : #endif
+     593              : 
+     594            0 :         if (!getcwd(s_current_dir, sizeof(s_current_dir))) {
+     595            0 :             const auto error_text = errno_as_text();
+     596            0 :             LOG_F(WARNING, "Failed to get current working directory: " LOGURU_FMT(s) "", error_text.c_str());
+     597            0 :         }
+     598              : 
+     599            0 :         s_arguments = "";
+     600            0 :         for (int i = 0; i < argc; ++i) {
+     601            0 :             escape(s_arguments, argv[i]);
+     602            0 :             if (i + 1 < argc) {
+     603            0 :                 s_arguments += " ";
+     604              :             }
+     605              :         }
+     606              : 
+     607            0 :         if (options.verbosity_flag) {
+     608            0 :             parse_args(argc, argv, options.verbosity_flag);
+     609              :         }
+     610              : 
+     611            0 :         if (const auto main_thread_name = options.main_thread_name) {
+     612              : #if LOGURU_PTLS_NAMES || LOGURU_WINTHREADS
+     613            0 :             set_thread_name(main_thread_name);
+     614              : #elif LOGURU_PTHREADS
+     615              :             char old_thread_name[16] = { 0 };
+     616              :             auto this_thread = pthread_self();
+     617              : #if defined(__APPLE__) || defined(__linux__) || defined(__sun)
+     618              :             pthread_getname_np(this_thread, old_thread_name, sizeof(old_thread_name));
+     619              : #endif
+     620              :             if (old_thread_name[0] == 0) {
+     621              : #ifdef __APPLE__
+     622              :                 pthread_setname_np(main_thread_name);
+     623              : #elif defined(__FreeBSD__) || defined(__OpenBSD__)
+     624              :                 pthread_set_name_np(this_thread, main_thread_name);
+     625              : #elif defined(__linux__) || defined(__sun)
+     626              :                 pthread_setname_np(this_thread, main_thread_name);
+     627              : #endif
+     628              :             }
+     629              : #endif // LOGURU_PTHREADS
+     630              :         }
+     631              : 
+     632            0 :         if (g_stderr_verbosity >= Verbosity_INFO) {
+     633            0 :             if (g_preamble_header) {
+     634              :                 char preamble_explain[LOGURU_PREAMBLE_WIDTH];
+     635            0 :                 print_preamble_header(preamble_explain, sizeof(preamble_explain));
+     636            0 :                 if (g_colorlogtostderr && s_terminal_has_color) {
+     637            0 :                     fprintf(stderr, "%s%s%s\n", terminal_reset(), terminal_dim(), preamble_explain);
+     638              :                 } else {
+     639            0 :                     fprintf(stderr, "%s\n", preamble_explain);
+     640              :                 }
+     641              :             }
+     642            0 :             fflush(stderr);
+     643              :         }
+     644            0 :         VLOG_F(g_internal_verbosity, "arguments: " LOGURU_FMT(s) "", s_arguments.c_str());
+     645            0 :         if (strlen(s_current_dir) != 0) {
+     646            0 :             VLOG_F(g_internal_verbosity, "Current dir: " LOGURU_FMT(s) "", s_current_dir);
+     647              :         }
+     648            0 :         VLOG_F(g_internal_verbosity, "stderr verbosity: " LOGURU_FMT(d) "", g_stderr_verbosity);
+     649            0 :         VLOG_F(g_internal_verbosity, "-----------------------------------");
+     650              : 
+     651            0 :         install_signal_handlers(options.signal_options);
+     652              : 
+     653            0 :         atexit(on_atexit);
+     654            0 :     }
+     655              : 
+     656            0 :     void shutdown()
+     657              :     {
+     658            0 :         VLOG_F(g_internal_verbosity, "loguru::shutdown()");
+     659            0 :         remove_all_callbacks();
+     660            0 :         set_fatal_handler(nullptr);
+     661            0 :         set_verbosity_to_name_callback(nullptr);
+     662            0 :         set_name_to_verbosity_callback(nullptr);
+     663            0 :     }
+     664              : 
+     665            0 :     void write_date_time(char* buff, unsigned long long buff_size)
+     666              :     {
+     667            0 :         auto now = system_clock::now();
+     668            0 :         long long ms_since_epoch = duration_cast<milliseconds>(now.time_since_epoch()).count();
+     669            0 :         time_t sec_since_epoch = time_t(ms_since_epoch / 1000);
+     670              :         tm time_info;
+     671            0 :         localtime_r(&sec_since_epoch, &time_info);
+     672            0 :         snprintf(buff, buff_size, "%04d%02d%02d_%02d%02d%02d.%03lld",
+     673            0 :             1900 + time_info.tm_year, 1 + time_info.tm_mon, time_info.tm_mday,
+     674              :             time_info.tm_hour, time_info.tm_min, time_info.tm_sec, ms_since_epoch % 1000);
+     675            0 :     }
+     676              : 
+     677            0 :     const char* argv0_filename()
+     678              :     {
+     679            0 :         return s_argv0_filename.c_str();
+     680              :     }
+     681              : 
+     682            0 :     const char* arguments()
+     683              :     {
+     684            0 :         return s_arguments.c_str();
+     685              :     }
+     686              : 
+     687            0 :     const char* current_dir()
+     688              :     {
+     689            0 :         return s_current_dir;
+     690              :     }
+     691              : 
+     692            0 :     const char* home_dir()
+     693              :     {
+     694              : #ifdef __MINGW32__
+     695              :         auto home = getenv("USERPROFILE");
+     696              :         CHECK_F(home != nullptr, "Missing USERPROFILE");
+     697              :         return home;
+     698              : #elif defined(_WIN32)
+     699              :         char* user_profile;
+     700              :         size_t len;
+     701              :         errno_t err = _dupenv_s(&user_profile, &len, "USERPROFILE");
+     702              :         CHECK_F(err == 0, "Missing USERPROFILE");
+     703              :         return user_profile;
+     704              : #else // _WIN32
+     705            0 :         auto home = getenv("HOME");
+     706            0 :         CHECK_F(home != nullptr, "Missing HOME");
+     707            0 :         return home;
+     708              : #endif // _WIN32
+     709              :     }
+     710              : 
+     711            0 :     void suggest_log_path(const char* prefix, char* buff, unsigned long long buff_size)
+     712              :     {
+     713            0 :         if (prefix[0] == '~') {
+     714            0 :             snprintf(buff, buff_size - 1, "%s%s", home_dir(), prefix + 1);
+     715              :         } else {
+     716            0 :             snprintf(buff, buff_size - 1, "%s", prefix);
+     717              :         }
+     718              : 
+     719              :         // Check for terminating /
+     720            0 :         size_t n = strlen(buff);
+     721            0 :         if (n != 0) {
+     722            0 :             if (buff[n - 1] != '/') {
+     723            0 :                 CHECK_F(n + 2 < buff_size, "Filename buffer too small");
+     724            0 :                 buff[n] = '/';
+     725            0 :                 buff[n + 1] = '\0';
+     726              :             }
+     727              :         }
+     728              : 
+     729              : #ifdef _WIN32
+     730              :         strncat_s(buff, buff_size - strlen(buff) - 1, s_argv0_filename.c_str(), buff_size - strlen(buff) - 1);
+     731              :         strncat_s(buff, buff_size - strlen(buff) - 1, "/", buff_size - strlen(buff) - 1);
+     732              :         write_date_time(buff + strlen(buff), buff_size - strlen(buff));
+     733              :         strncat_s(buff, buff_size - strlen(buff) - 1, ".log", buff_size - strlen(buff) - 1);
+     734              : #else
+     735            0 :         strncat(buff, s_argv0_filename.c_str(), buff_size - strlen(buff) - 1);
+     736            0 :         strncat(buff, "/", buff_size - strlen(buff) - 1);
+     737            0 :         write_date_time(buff + strlen(buff), buff_size - strlen(buff));
+     738            0 :         strncat(buff, ".log", buff_size - strlen(buff) - 1);
+     739              : #endif
+     740            0 :     }
+     741              : 
+     742           46 :     bool create_directories(const char* file_path_const)
+     743              :     {
+     744           46 :         CHECK_F(file_path_const && *file_path_const);
+     745           46 :         char* file_path = STRDUP(file_path_const);
+     746           46 :         for (char* p = strchr(file_path + 1, '/'); p; p = strchr(p + 1, '/')) {
+     747            0 :             *p = '\0';
+     748              : 
+     749              : #ifdef _WIN32
+     750              :             if (_mkdir(file_path) == -1) {
+     751              : #else
+     752            0 :             if (mkdir(file_path, 0755) == -1) {
+     753              : #endif
+     754            0 :                 if (errno != EEXIST) {
+     755            0 :                     LOG_F(ERROR, "Failed to create directory '" LOGURU_FMT(s) "'", file_path);
+     756            0 :                     LOG_IF_F(ERROR, errno == EACCES, "EACCES");
+     757            0 :                     LOG_IF_F(ERROR, errno == ENAMETOOLONG, "ENAMETOOLONG");
+     758            0 :                     LOG_IF_F(ERROR, errno == ENOENT, "ENOENT");
+     759            0 :                     LOG_IF_F(ERROR, errno == ENOTDIR, "ENOTDIR");
+     760            0 :                     LOG_IF_F(ERROR, errno == ELOOP, "ELOOP");
+     761              : 
+     762            0 :                     *p = '/';
+     763            0 :                     free(file_path);
+     764            0 :                     return false;
+     765              :                 }
+     766              :             }
+     767            0 :             *p = '/';
+     768              :         }
+     769           46 :         free(file_path);
+     770           46 :         return true;
+     771              :     }
+     772           46 :     bool add_file(const char* path_in, FileMode mode, Verbosity verbosity)
+     773              :     {
+     774              :         char path[PATH_MAX];
+     775           46 :         if (path_in[0] == '~') {
+     776            0 :             snprintf(path, sizeof(path) - 1, "%s%s", home_dir(), path_in + 1);
+     777              :         } else {
+     778           46 :             snprintf(path, sizeof(path) - 1, "%s", path_in);
+     779              :         }
+     780              : 
+     781           46 :         if (!create_directories(path)) {
+     782            0 :             LOG_F(ERROR, "Failed to create directories to '" LOGURU_FMT(s) "'", path);
+     783              :         }
+     784              : 
+     785           46 :         const char* mode_str = (mode == FileMode::Truncate ? "w" : "a");
+     786              :         FILE* file;
+     787              : #ifdef _WIN32
+     788              :         file = _fsopen(path, mode_str, _SH_DENYNO);
+     789              : #else
+     790           46 :         file = fopen(path, mode_str);
+     791              : #endif
+     792           46 :         if (!file) {
+     793            0 :             LOG_F(ERROR, "Failed to open '" LOGURU_FMT(s) "'", path);
+     794            0 :             return false;
+     795              :         }
+     796              : #if LOGURU_WITH_FILEABS
+     797              :         FileAbs* file_abs = new FileAbs(); // this is deleted in file_close;
+     798              :         snprintf(file_abs->path, sizeof(file_abs->path) - 1, "%s", path);
+     799              :         snprintf(file_abs->mode_str, sizeof(file_abs->mode_str) - 1, "%s", mode_str);
+     800              :         stat(file_abs->path, &file_abs->st);
+     801              :         file_abs->fp = file;
+     802              :         file_abs->verbosity = verbosity;
+     803              :         add_callback(path_in, file_log, file_abs, verbosity, file_close, file_flush);
+     804              : #else
+     805           46 :         add_callback(path_in, file_log, file, verbosity, file_close, file_flush);
+     806              : #endif
+     807              : 
+     808           46 :         if (mode == FileMode::Append) {
+     809            0 :             fprintf(file, "\n\n\n\n\n");
+     810              :         }
+     811           46 :         if (!s_arguments.empty()) {
+     812            0 :             fprintf(file, "arguments: %s\n", s_arguments.c_str());
+     813              :         }
+     814           46 :         if (strlen(s_current_dir) != 0) {
+     815            0 :             fprintf(file, "Current dir: %s\n", s_current_dir);
+     816              :         }
+     817           46 :         fprintf(file, "File verbosity level: %d\n", verbosity);
+     818           46 :         if (g_preamble_header) {
+     819              :             char preamble_explain[LOGURU_PREAMBLE_WIDTH];
+     820           46 :             print_preamble_header(preamble_explain, sizeof(preamble_explain));
+     821           46 :             fprintf(file, "%s\n", preamble_explain);
+     822              :         }
+     823           46 :         fflush(file);
+     824              : 
+     825           46 :         VLOG_F(g_internal_verbosity, "Logging to '" LOGURU_FMT(s) "', mode: '" LOGURU_FMT(s) "', verbosity: " LOGURU_FMT(d) "", path, mode_str, verbosity);
+     826           46 :         return true;
+     827              :     }
+     828              : 
+     829              :     /*
+     830              :         Will add syslog as a standard sink for log messages
+     831              :         Any logging message with a verbosity lower or equal to
+     832              :         the given verbosity will be included.
+     833              : 
+     834              :         This works for Unix like systems (i.e. Linux/Mac)
+     835              :         There is no current implementation for Windows (as I don't know the
+     836              :         equivalent calls or have a way to test them). If you know please
+     837              :         add and send a pull request.
+     838              : 
+     839              :         The code should still compile under windows but will only generate
+     840              :         a warning message that syslog is unavailable.
+     841              : 
+     842              :         Search for LOGURU_SYSLOG to find and fix.
+     843              :     */
+     844            0 :     bool add_syslog(const char* app_name, Verbosity verbosity)
+     845              :     {
+     846            0 :         return add_syslog(app_name, verbosity, LOG_USER);
+     847              :     }
+     848            0 :     bool add_syslog(const char* app_name, Verbosity verbosity, int facility)
+     849              :     {
+     850              : #if LOGURU_SYSLOG
+     851            0 :         if (app_name == nullptr) {
+     852            0 :             app_name = argv0_filename();
+     853              :         }
+     854            0 :         openlog(app_name, 0, facility);
+     855            0 :         add_callback("'syslog'", syslog_log, nullptr, verbosity, syslog_close, syslog_flush);
+     856              : 
+     857            0 :         VLOG_F(g_internal_verbosity, "Logging to 'syslog' , verbosity: " LOGURU_FMT(d) "", verbosity);
+     858            0 :         return true;
+     859              : #else
+     860              :         (void)app_name;
+     861              :         (void)verbosity;
+     862              :         (void)facility;
+     863              :         VLOG_F(g_internal_verbosity, "syslog not implemented on this system. Request to install syslog logging ignored.");
+     864              :         return false;
+     865              : #endif
+     866              :     }
+     867              :     // Will be called right before abort().
+     868            0 :     void set_fatal_handler(fatal_handler_t handler)
+     869              :     {
+     870            0 :         s_fatal_handler = handler;
+     871            0 :     }
+     872              : 
+     873            0 :     fatal_handler_t get_fatal_handler()
+     874              :     {
+     875            0 :         return s_fatal_handler;
+     876              :     }
+     877              : 
+     878            0 :     void set_verbosity_to_name_callback(verbosity_to_name_t callback)
+     879              :     {
+     880            0 :         s_verbosity_to_name_callback = callback;
+     881            0 :     }
+     882              : 
+     883            0 :     void set_name_to_verbosity_callback(name_to_verbosity_t callback)
+     884              :     {
+     885            0 :         s_name_to_verbosity_callback = callback;
+     886            0 :     }
+     887              : 
+     888            0 :     void add_stack_cleanup(const char* find_this, const char* replace_with_this)
+     889              :     {
+     890            0 :         if (strlen(find_this) <= strlen(replace_with_this)) {
+     891            0 :             LOG_F(WARNING, "add_stack_cleanup: the replacement should be shorter than the pattern!");
+     892            0 :             return;
+     893              :         }
+     894              : 
+     895            0 :         s_user_stack_cleanups.push_back(StringPair(find_this, replace_with_this));
+     896              :     }
+     897              : 
+     898           46 :     static void on_callback_change()
+     899              :     {
+     900           46 :         s_max_out_verbosity = Verbosity_OFF;
+     901          598 :         for (const auto& callback : s_callbacks) {
+     902          552 :             s_max_out_verbosity = std::max(s_max_out_verbosity, callback.verbosity);
+     903              :         }
+     904           46 :     }
+     905              : 
+     906           46 :     void add_callback(
+     907              :         const char* id,
+     908              :         log_handler_t   callback,
+     909              :         void* user_data,
+     910              :         Verbosity       verbosity,
+     911              :         close_handler_t on_close,
+     912              :         flush_handler_t on_flush)
+     913              :     {
+     914           46 :         std::lock_guard<std::recursive_mutex> lock(s_mutex);
+     915           92 :         s_callbacks.push_back(Callback{ id, callback, user_data, verbosity, on_close, on_flush, 0 });
+     916           46 :         on_callback_change();
+     917           46 :     }
+     918              : 
+     919              :     // Returns a custom verbosity name if one is available, or nullptr.
+     920              :     // See also set_verbosity_to_name_callback.
+     921         1782 :     const char* get_verbosity_name(Verbosity verbosity)
+     922              :     {
+     923         1782 :         auto name = s_verbosity_to_name_callback
+     924         1782 :             ? (*s_verbosity_to_name_callback)(verbosity)
+     925         1782 :             : nullptr;
+     926              : 
+     927              :         // Use standard replacements if callback fails:
+     928         1782 :         if (!name) {
+     929         1782 :             if (verbosity <= Verbosity_FATAL) {
+     930            0 :                 name = "FATL";
+     931         1782 :             } else if (verbosity == Verbosity_ERROR) {
+     932            0 :                 name = "ERR";
+     933         1782 :             } else if (verbosity == Verbosity_WARNING) {
+     934            0 :                 name = "WARN";
+     935         1782 :             } else if (verbosity == Verbosity_INFO) {
+     936           46 :                 name = "INFO";
+     937              :             }
+     938              :         }
+     939              : 
+     940         1782 :         return name;
+     941              :     }
+     942              : 
+     943              :     // Returns Verbosity_INVALID if the name is not found.
+     944              :     // See also set_name_to_verbosity_callback.
+     945            0 :     Verbosity get_verbosity_from_name(const char* name)
+     946              :     {
+     947            0 :         auto verbosity = s_name_to_verbosity_callback
+     948            0 :             ? (*s_name_to_verbosity_callback)(name)
+     949            0 :             : Verbosity_INVALID;
+     950              : 
+     951              :         // Use standard replacements if callback fails:
+     952            0 :         if (verbosity == Verbosity_INVALID) {
+     953            0 :             if (strcmp(name, "OFF") == 0) {
+     954            0 :                 verbosity = Verbosity_OFF;
+     955            0 :             } else if (strcmp(name, "INFO") == 0) {
+     956            0 :                 verbosity = Verbosity_INFO;
+     957            0 :             } else if (strcmp(name, "WARNING") == 0) {
+     958            0 :                 verbosity = Verbosity_WARNING;
+     959            0 :             } else if (strcmp(name, "ERROR") == 0) {
+     960            0 :                 verbosity = Verbosity_ERROR;
+     961            0 :             } else if (strcmp(name, "FATAL") == 0) {
+     962            0 :                 verbosity = Verbosity_FATAL;
+     963              :             }
+     964              :         }
+     965              : 
+     966            0 :         return verbosity;
+     967              :     }
+     968              : 
+     969            0 :     bool remove_callback(const char* id)
+     970              :     {
+     971            0 :         std::lock_guard<std::recursive_mutex> lock(s_mutex);
+     972            0 :         auto it = std::find_if(begin(s_callbacks), end(s_callbacks), [&](const Callback& c) { return c.id == id; });
+     973            0 :         if (it != s_callbacks.end()) {
+     974            0 :             if (it->close) { it->close(it->user_data); }
+     975            0 :             s_callbacks.erase(it);
+     976            0 :             on_callback_change();
+     977            0 :             return true;
+     978              :         } else {
+     979            0 :             LOG_F(ERROR, "Failed to locate callback with id '" LOGURU_FMT(s) "'", id);
+     980            0 :             return false;
+     981              :         }
+     982            0 :     }
+     983              : 
+     984            0 :     void remove_all_callbacks()
+     985              :     {
+     986            0 :         std::lock_guard<std::recursive_mutex> lock(s_mutex);
+     987            0 :         for (auto& callback : s_callbacks) {
+     988            0 :             if (callback.close) {
+     989            0 :                 callback.close(callback.user_data);
+     990              :             }
+     991              :         }
+     992            0 :         s_callbacks.clear();
+     993            0 :         on_callback_change();
+     994            0 :     }
+     995              : 
+     996              :     // Returns the maximum of g_stderr_verbosity and all file/custom outputs.
+     997         1782 :     Verbosity current_verbosity_cutoff()
+     998              :     {
+     999         1782 :         return g_stderr_verbosity > s_max_out_verbosity ?
+    1000         1782 :             g_stderr_verbosity : s_max_out_verbosity;
+    1001              :     }
+    1002              : 
+    1003              :     // ------------------------------------------------------------------------
+    1004              :     // Threads names
+    1005              : 
+    1006              : #if LOGURU_PTLS_NAMES
+    1007              :     static pthread_once_t s_pthread_key_once = PTHREAD_ONCE_INIT;
+    1008              :     static pthread_key_t  s_pthread_key_name;
+    1009              : 
+    1010            2 :     void make_pthread_key_name()
+    1011              :     {
+    1012            2 :         (void)pthread_key_create(&s_pthread_key_name, free);
+    1013            2 :     }
+    1014              : #endif
+    1015              : 
+    1016              : #if LOGURU_WINTHREADS
+    1017              :     // Where we store the custom thread name set by `set_thread_name`
+    1018              :     char* thread_name_buffer()
+    1019              :     {
+    1020              :         __declspec(thread) static char thread_name[LOGURU_THREADNAME_WIDTH + 1] = { 0 };
+    1021              :         return &thread_name[0];
+    1022              :     }
+    1023              : #endif // LOGURU_WINTHREADS
+    1024              : 
+    1025           46 :     void set_thread_name(const char* name)
+    1026              :     {
+    1027              : #if LOGURU_PTLS_NAMES
+    1028              :         // Store thread name in thread-local storage at `s_pthread_key_name`
+    1029           46 :         (void)pthread_once(&s_pthread_key_once, make_pthread_key_name);
+    1030           46 :         (void)pthread_setspecific(s_pthread_key_name, STRDUP(name));
+    1031              : #elif LOGURU_PTHREADS
+    1032              :         // Tell the OS the thread name
+    1033              : #ifdef __APPLE__
+    1034              :         pthread_setname_np(name);
+    1035              : #elif defined(__FreeBSD__) || defined(__OpenBSD__)
+    1036              :         pthread_set_name_np(pthread_self(), name);
+    1037              : #elif defined(__linux__) || defined(__sun)
+    1038              :         pthread_setname_np(pthread_self(), name);
+    1039              : #endif
+    1040              : #elif LOGURU_WINTHREADS
+    1041              :         // Store thread name in a thread-local storage:
+    1042              :         strncpy_s(thread_name_buffer(), LOGURU_THREADNAME_WIDTH + 1, name, _TRUNCATE);
+    1043              : #else // LOGURU_PTHREADS
+    1044              :         // TODO: on these weird platforms we should also store the thread name
+    1045              :         // in a generic thread-local storage.
+    1046              :         (void)name;
+    1047              : #endif // LOGURU_PTHREADS
+    1048           46 :     }
+    1049              : 
+    1050         1782 :     void get_thread_name(char* buffer, unsigned long long length, bool right_align_hex_id)
+    1051              :     {
+    1052         1782 :         CHECK_NE_F(length, 0u, "Zero length buffer in get_thread_name");
+    1053         1782 :         CHECK_NOTNULL_F(buffer, "nullptr in get_thread_name");
+    1054              : 
+    1055              : #if LOGURU_PTLS_NAMES
+    1056         1782 :         (void)pthread_once(&s_pthread_key_once, make_pthread_key_name);
+    1057         1782 :         if (const char* name = static_cast<const char*>(pthread_getspecific(s_pthread_key_name))) {
+    1058         1782 :             snprintf(buffer, static_cast<size_t>(length), "%s", name);
+    1059              :         } else {
+    1060            0 :             buffer[0] = 0;
+    1061              :         }
+    1062              : #elif LOGURU_PTHREADS
+    1063              :         // Ask the OS about the thread name.
+    1064              :         // This is what we *want* to do on all platforms, but
+    1065              :         // only some platforms support it (currently).
+    1066              :         pthread_getname_np(pthread_self(), buffer, length);
+    1067              : #elif LOGURU_WINTHREADS
+    1068              :         snprintf(buffer, static_cast<size_t>(length), "%s", thread_name_buffer());
+    1069              : #else
+    1070              :         // Thread names unsupported
+    1071              :         buffer[0] = 0;
+    1072              : #endif
+    1073              : 
+    1074         1782 :         if (buffer[0] == 0) {
+    1075              :             // We failed to get a readable thread name.
+    1076              :             // Write a HEX thread ID instead.
+    1077              :             // We try to get an ID that is the same as the ID you could
+    1078              :             // read in your debugger, system monitor etc.
+    1079              : 
+    1080              : #ifdef __APPLE__
+    1081              :             uint64_t thread_id;
+    1082              :             pthread_threadid_np(pthread_self(), &thread_id);
+    1083              : #elif defined(__FreeBSD__)
+    1084              :             long thread_id;
+    1085              :             (void)thr_self(&thread_id);
+    1086              : #elif LOGURU_PTHREADS
+    1087            0 :             uint64_t thread_id = pthread_self();
+    1088              : #else
+    1089              :     // This ID does not correllate to anything we can get from the OS,
+    1090              :     // so this is the worst way to get the ID.
+    1091              :             const auto thread_id = std::hash<std::thread::id>{}(std::this_thread::get_id());
+    1092              : #endif
+    1093              : 
+    1094            0 :             if (right_align_hex_id) {
+    1095            0 :                 snprintf(buffer, static_cast<size_t>(length), "%*X", static_cast<int>(length - 1), static_cast<unsigned>(thread_id));
+    1096              :             } else {
+    1097            0 :                 snprintf(buffer, static_cast<size_t>(length), "%X", static_cast<unsigned>(thread_id));
+    1098              :             }
+    1099              :         }
+    1100         1782 :     }
+    1101              : 
+    1102              :     // ------------------------------------------------------------------------
+    1103              :     // Stack traces
+    1104              : 
+    1105              : #if LOGURU_STACKTRACES
+    1106            8 :     Text demangle(const char* name)
+    1107              :     {
+    1108            8 :         int status = -1;
+    1109            8 :         char* demangled = abi::__cxa_demangle(name, 0, 0, &status);
+    1110            8 :         Text result{ status == 0 ? demangled : STRDUP(name) };
+    1111           16 :         return result;
+    1112              :     }
+    1113              : 
+    1114              : #if LOGURU_RTTI
+    1115              :     template <class T>
+    1116            8 :     std::string type_name()
+    1117              :     {
+    1118            8 :         auto demangled = demangle(typeid(T).name());
+    1119           16 :         return demangled.c_str();
+    1120            8 :     }
+    1121              : #endif // LOGURU_RTTI
+    1122              : 
+    1123              :     static const StringPairList REPLACE_LIST = {
+    1124              :         #if LOGURU_RTTI
+    1125              :             { type_name<std::string>(),    "std::string"    },
+    1126              :             { type_name<std::wstring>(),   "std::wstring"   },
+    1127              :             { type_name<std::u16string>(), "std::u16string" },
+    1128              :             { type_name<std::u32string>(), "std::u32string" },
+    1129              :         #endif // LOGURU_RTTI
+    1130              :         { "std::__1::",                "std::"          },
+    1131              :         { "__thiscall ",               ""               },
+    1132              :         { "__cdecl ",                  ""               },
+    1133              :     };
+    1134              : 
+    1135            0 :     void do_replacements(const StringPairList & replacements, std::string & str)
+    1136              :     {
+    1137            0 :         for (auto&& p : replacements) {
+    1138            0 :             if (p.first.size() <= p.second.size()) {
+    1139              :                 // On gcc, "type_name<std::string>()" is "std::string"
+    1140            0 :                 continue;
+    1141              :             }
+    1142              : 
+    1143              :             size_t it;
+    1144            0 :             while ((it = str.find(p.first)) != std::string::npos) {
+    1145            0 :                 str.replace(it, p.first.size(), p.second);
+    1146              :             }
+    1147              :         }
+    1148            0 :     }
+    1149              : 
+    1150            0 :     std::string prettify_stacktrace(const std::string & input)
+    1151              :     {
+    1152            0 :         std::string output = input;
+    1153              : 
+    1154            0 :         do_replacements(s_user_stack_cleanups, output);
+    1155            0 :         do_replacements(REPLACE_LIST, output);
+    1156              : 
+    1157              :         try {
+    1158            0 :             std::regex std_allocator_re(R"(,\s*std::allocator<[^<>]+>)");
+    1159            0 :             output = std::regex_replace(output, std_allocator_re, std::string(""));
+    1160              : 
+    1161            0 :             std::regex template_spaces_re(R"(<\s*([^<> ]+)\s*>)");
+    1162            0 :             output = std::regex_replace(output, template_spaces_re, std::string("<$1>"));
+    1163            0 :         }
+    1164            0 :         catch (std::regex_error&) {
+    1165              :             // Probably old GCC.
+    1166            0 :         }
+    1167              : 
+    1168            0 :         return output;
+    1169            0 :     }
+    1170              : 
+    1171            0 :     std::string stacktrace_as_stdstring(int skip)
+    1172              :     {
+    1173              :         // From https://gist.github.com/fmela/591333
+    1174              :         void* callstack[128];
+    1175            0 :         const auto max_frames = sizeof(callstack) / sizeof(callstack[0]);
+    1176            0 :         int num_frames = backtrace(callstack, max_frames);
+    1177            0 :         char** symbols = backtrace_symbols(callstack, num_frames);
+    1178              : 
+    1179            0 :         std::string result;
+    1180              :         // Print stack traces so the most relevant ones are written last
+    1181              :         // Rationale: http://yellerapp.com/posts/2015-01-22-upside-down-stacktraces.html
+    1182            0 :         for (int i = num_frames - 1; i >= skip; --i) {
+    1183              :             char buf[1024];
+    1184              :             Dl_info info;
+    1185            0 :             if (dladdr(callstack[i], &info) && info.dli_sname) {
+    1186            0 :                 char* demangled = NULL;
+    1187            0 :                 int status = -1;
+    1188            0 :                 if (info.dli_sname[0] == '_') {
+    1189            0 :                     demangled = abi::__cxa_demangle(info.dli_sname, 0, 0, &status);
+    1190              :                 }
+    1191            0 :                 snprintf(buf, sizeof(buf), "%-3d %*p %s + %zd\n",
+    1192              :                     i - skip, int(2 + sizeof(void*) * 2), callstack[i],
+    1193            0 :                     status == 0 ? demangled :
+    1194            0 :                     info.dli_sname == 0 ? symbols[i] : info.dli_sname,
+    1195            0 :                     static_cast<char*>(callstack[i]) - static_cast<char*>(info.dli_saddr));
+    1196            0 :                 free(demangled);
+    1197              :             } else {
+    1198            0 :                 snprintf(buf, sizeof(buf), "%-3d %*p %s\n",
+    1199            0 :                     i - skip, int(2 + sizeof(void*) * 2), callstack[i], symbols[i]);
+    1200              :             }
+    1201            0 :             result += buf;
+    1202              :         }
+    1203            0 :         free(symbols);
+    1204              : 
+    1205            0 :         if (num_frames == max_frames) {
+    1206            0 :             result = "[truncated]\n" + result;
+    1207              :         }
+    1208              : 
+    1209            0 :         if (!result.empty() && result[result.size() - 1] == '\n') {
+    1210            0 :             result.resize(result.size() - 1);
+    1211              :         }
+    1212              : 
+    1213            0 :         return prettify_stacktrace(result);
+    1214            0 :     }
+    1215              : 
+    1216              : #else // LOGURU_STACKTRACES
+    1217              :     Text demangle(const char* name)
+    1218              :     {
+    1219              :         return Text(STRDUP(name));
+    1220              :     }
+    1221              : 
+    1222              :     std::string stacktrace_as_stdstring(int)
+    1223              :     {
+    1224              :         // No stacktraces available on this platform"
+    1225              :         return "";
+    1226              :     }
+    1227              : 
+    1228              : #endif // LOGURU_STACKTRACES
+    1229              : 
+    1230            0 :     Text stacktrace(int skip)
+    1231              :     {
+    1232            0 :         auto str = stacktrace_as_stdstring(skip + 1);
+    1233            0 :         return Text(STRDUP(str.c_str()));
+    1234            0 :     }
+    1235              : 
+    1236              :     // ------------------------------------------------------------------------
+    1237              : 
+    1238           46 :     static void print_preamble_header(char* out_buff, size_t out_buff_size)
+    1239              :     {
+    1240           46 :         if (out_buff_size == 0) { return; }
+    1241           46 :         out_buff[0] = '\0';
+    1242           46 :         size_t pos = 0;
+    1243           46 :         if (g_preamble_date && pos < out_buff_size) {
+    1244           46 :             int bytes = snprintf(out_buff + pos, out_buff_size - pos, "date       ");
+    1245           46 :             if (bytes > 0) {
+    1246           46 :                 pos += bytes;
+    1247              :             }
+    1248              :         }
+    1249           46 :         if (g_preamble_time && pos < out_buff_size) {
+    1250           46 :             int bytes = snprintf(out_buff + pos, out_buff_size - pos, "time         ");
+    1251           46 :             if (bytes > 0) {
+    1252           46 :                 pos += bytes;
+    1253              :             }
+    1254              :         }
+    1255           46 :         if (g_preamble_uptime && pos < out_buff_size) {
+    1256           46 :             int bytes = snprintf(out_buff + pos, out_buff_size - pos, "( uptime  ) ");
+    1257           46 :             if (bytes > 0) {
+    1258           46 :                 pos += bytes;
+    1259              :             }
+    1260              :         }
+    1261           46 :         if (g_preamble_thread && pos < out_buff_size) {
+    1262           46 :             int bytes = snprintf(out_buff + pos, out_buff_size - pos, "[%-*s]", LOGURU_THREADNAME_WIDTH, " thread name/id");
+    1263           46 :             if (bytes > 0) {
+    1264           46 :                 pos += bytes;
+    1265              :             }
+    1266              :         }
+    1267           46 :         if (g_preamble_file && pos < out_buff_size) {
+    1268           46 :             int bytes = snprintf(out_buff + pos, out_buff_size - pos, "%*s:line  ", LOGURU_FILENAME_WIDTH, "file");
+    1269           46 :             if (bytes > 0) {
+    1270           46 :                 pos += bytes;
+    1271              :             }
+    1272              :         }
+    1273           46 :         if (g_preamble_verbose && pos < out_buff_size) {
+    1274           46 :             int bytes = snprintf(out_buff + pos, out_buff_size - pos, "   v");
+    1275           46 :             if (bytes > 0) {
+    1276           46 :                 pos += bytes;
+    1277              :             }
+    1278              :         }
+    1279           46 :         if (g_preamble_pipe && pos < out_buff_size) {
+    1280           46 :             int bytes = snprintf(out_buff + pos, out_buff_size - pos, "| ");
+    1281           46 :             if (bytes > 0) {
+    1282           46 :                 pos += bytes;
+    1283              :             }
+    1284              :         }
+    1285              :     }
+    1286              : 
+    1287         1782 :     static void print_preamble(char* out_buff, size_t out_buff_size, Verbosity verbosity, const char* file, unsigned line)
+    1288              :     {
+    1289         1782 :         if (out_buff_size == 0) { return; }
+    1290         1782 :         out_buff[0] = '\0';
+    1291         1782 :         if (!g_preamble) { return; }
+    1292         1782 :         long long ms_since_epoch = duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count();
+    1293         1782 :         time_t sec_since_epoch = time_t(ms_since_epoch / 1000);
+    1294              :         tm time_info;
+    1295         1782 :         localtime_r(&sec_since_epoch, &time_info);
+    1296              : 
+    1297         1782 :         auto uptime_ms = duration_cast<milliseconds>(steady_clock::now() - s_start_time).count();
+    1298         1782 :         auto uptime_sec = static_cast<double> (uptime_ms) / 1000.0;
+    1299              : 
+    1300         1782 :         char thread_name[LOGURU_THREADNAME_WIDTH + 1] = { 0 };
+    1301         1782 :         get_thread_name(thread_name, LOGURU_THREADNAME_WIDTH + 1, true);
+    1302              : 
+    1303         1782 :         if (s_strip_file_path) {
+    1304         1782 :             file = filename(file);
+    1305              :         }
+    1306              : 
+    1307              :         char level_buff[6];
+    1308         1782 :         const char* custom_level_name = get_verbosity_name(verbosity);
+    1309         1782 :         if (custom_level_name) {
+    1310           46 :             snprintf(level_buff, sizeof(level_buff) - 1, "%s", custom_level_name);
+    1311              :         } else {
+    1312         1736 :             snprintf(level_buff, sizeof(level_buff) - 1, "% 4d", static_cast<int8_t>(verbosity));
+    1313              :         }
+    1314              : 
+    1315         1782 :         size_t pos = 0;
+    1316              : 
+    1317         1782 :         if (g_preamble_date && pos < out_buff_size) {
+    1318         1782 :             int bytes = snprintf(out_buff + pos, out_buff_size - pos, "%04d-%02d-%02d ",
+    1319         1782 :                 1900 + time_info.tm_year, 1 + time_info.tm_mon, time_info.tm_mday);
+    1320         1782 :             if (bytes > 0) {
+    1321         1782 :                 pos += bytes;
+    1322              :             }
+    1323              :         }
+    1324         1782 :         if (g_preamble_time && pos < out_buff_size) {
+    1325         1782 :             int bytes = snprintf(out_buff + pos, out_buff_size - pos, "%02d:%02d:%02d.%03lld ",
+    1326              :                 time_info.tm_hour, time_info.tm_min, time_info.tm_sec, ms_since_epoch % 1000);
+    1327         1782 :             if (bytes > 0) {
+    1328         1782 :                 pos += bytes;
+    1329              :             }
+    1330              :         }
+    1331         1782 :         if (g_preamble_uptime && pos < out_buff_size) {
+    1332         1782 :             int bytes = snprintf(out_buff + pos, out_buff_size - pos, "(%8.3fs) ",
+    1333              :                 uptime_sec);
+    1334         1782 :             if (bytes > 0) {
+    1335         1782 :                 pos += bytes;
+    1336              :             }
+    1337              :         }
+    1338         1782 :         if (g_preamble_thread && pos < out_buff_size) {
+    1339         1782 :             int bytes = snprintf(out_buff + pos, out_buff_size - pos, "[%-*s]",
+    1340              :                 LOGURU_THREADNAME_WIDTH, thread_name);
+    1341         1782 :             if (bytes > 0) {
+    1342         1782 :                 pos += bytes;
+    1343              :             }
+    1344              :         }
+    1345         1782 :         if (g_preamble_file && pos < out_buff_size) {
+    1346              :             char shortened_filename[LOGURU_FILENAME_WIDTH + 1];
+    1347         1782 :             snprintf(shortened_filename, LOGURU_FILENAME_WIDTH + 1, "%s", file);
+    1348         1782 :             int bytes = snprintf(out_buff + pos, out_buff_size - pos, "%*s:%-5u ",
+    1349              :                 LOGURU_FILENAME_WIDTH, shortened_filename, line);
+    1350         1782 :             if (bytes > 0) {
+    1351         1782 :                 pos += bytes;
+    1352              :             }
+    1353              :         }
+    1354         1782 :         if (g_preamble_verbose && pos < out_buff_size) {
+    1355         1782 :             int bytes = snprintf(out_buff + pos, out_buff_size - pos, "%4s",
+    1356              :                 level_buff);
+    1357         1782 :             if (bytes > 0) {
+    1358         1782 :                 pos += bytes;
+    1359              :             }
+    1360              :         }
+    1361         1782 :         if (g_preamble_pipe && pos < out_buff_size) {
+    1362         1782 :             int bytes = snprintf(out_buff + pos, out_buff_size - pos, "| ");
+    1363         1782 :             if (bytes > 0) {
+    1364         1782 :                 pos += bytes;
+    1365              :             }
+    1366              :         }
+    1367              :     }
+    1368              : 
+    1369              :     // stack_trace_skip is just if verbosity == FATAL.
+    1370         1782 :     static void log_message(int stack_trace_skip, Message & message, bool with_indentation, bool abort_if_fatal)
+    1371              :     {
+    1372         1782 :         const auto verbosity = message.verbosity;
+    1373         1782 :         std::lock_guard<std::recursive_mutex> lock(s_mutex);
+    1374              : 
+    1375         1782 :         if (message.verbosity == Verbosity_FATAL) {
+    1376            0 :             auto st = loguru::stacktrace(stack_trace_skip + 2);
+    1377            0 :             if (!st.empty()) {
+    1378            0 :                 RAW_LOG_F(ERROR, "Stack trace:\n" LOGURU_FMT(s) "", st.c_str());
+    1379              :             }
+    1380              : 
+    1381            0 :             auto ec = loguru::get_error_context();
+    1382            0 :             if (!ec.empty()) {
+    1383            0 :                 RAW_LOG_F(ERROR, "" LOGURU_FMT(s) "", ec.c_str());
+    1384              :             }
+    1385            0 :         }
+    1386              : 
+    1387         1782 :         if (with_indentation) {
+    1388         1782 :             message.indentation = indentation(s_stderr_indentation);
+    1389              :         }
+    1390              : 
+    1391         1782 :         if (verbosity <= g_stderr_verbosity) {
+    1392            0 :             if (g_colorlogtostderr && s_terminal_has_color) {
+    1393            0 :                 if (verbosity > Verbosity_WARNING) {
+    1394            0 :                     fprintf(stderr, "%s%s%s%s%s%s%s%s\n",
+    1395              :                         terminal_reset(),
+    1396              :                         terminal_dim(),
+    1397              :                         message.preamble,
+    1398              :                         message.indentation,
+    1399            0 :                         verbosity == Verbosity_INFO ? terminal_reset() : "", // un-dim for info
+    1400              :                         message.prefix,
+    1401              :                         message.message,
+    1402              :                         terminal_reset());
+    1403              :                 } else {
+    1404            0 :                     fprintf(stderr, "%s%s%s%s%s%s%s\n",
+    1405              :                         terminal_reset(),
+    1406            0 :                         verbosity == Verbosity_WARNING ? terminal_yellow() : terminal_red(),
+    1407              :                         message.preamble,
+    1408              :                         message.indentation,
+    1409              :                         message.prefix,
+    1410              :                         message.message,
+    1411              :                         terminal_reset());
+    1412              :                 }
+    1413              :             } else {
+    1414            0 :                 fprintf(stderr, "%s%s%s%s\n",
+    1415              :                     message.preamble, message.indentation, message.prefix, message.message);
+    1416              :             }
+    1417              : 
+    1418            0 :             if (g_flush_interval_ms == 0) {
+    1419            0 :                 fflush(stderr);
+    1420              :             } else {
+    1421            0 :                 s_needs_flushing = true;
+    1422              :             }
+    1423              :         }
+    1424              : 
+    1425        25378 :         for (auto& p : s_callbacks) {
+    1426        23596 :             if (verbosity <= p.verbosity) {
+    1427        23596 :                 if (with_indentation) {
+    1428        23596 :                     message.indentation = indentation(p.indentation);
+    1429              :                 }
+    1430        23596 :                 p.callback(p.user_data, message);
+    1431        23596 :                 if (g_flush_interval_ms == 0) {
+    1432        23596 :                     if (p.flush) { p.flush(p.user_data); }
+    1433              :                 } else {
+    1434            0 :                     s_needs_flushing = true;
+    1435              :                 }
+    1436              :             }
+    1437              :         }
+    1438              : 
+    1439         1782 :         if (g_flush_interval_ms > 0 && !s_flush_thread) {
+    1440            0 :             s_flush_thread = new std::thread([]() {
+    1441              :                 for (;;) {
+    1442            0 :                     if (s_needs_flushing) {
+    1443            0 :                         flush();
+    1444              :                     }
+    1445            0 :                     std::this_thread::sleep_for(std::chrono::milliseconds(g_flush_interval_ms));
+    1446              :                 }
+    1447            0 :                 });
+    1448              :         }
+    1449              : 
+    1450         1782 :         if (message.verbosity == Verbosity_FATAL) {
+    1451            0 :             flush();
+    1452              : 
+    1453            0 :             if (s_fatal_handler) {
+    1454            0 :                 s_fatal_handler(message);
+    1455            0 :                 flush();
+    1456              :             }
+    1457              : 
+    1458            0 :             if (abort_if_fatal) {
+    1459              : #if !defined(_WIN32)
+    1460            0 :                 if (s_signal_options.sigabrt) {
+    1461              :                     // Make sure we don't catch our own abort:
+    1462            0 :                     signal(SIGABRT, SIG_DFL);
+    1463              :                 }
+    1464              : #endif
+    1465            0 :                 abort();
+    1466              :             }
+    1467              :         }
+    1468         1782 :     }
+    1469              : 
+    1470              :     // stack_trace_skip is just if verbosity == FATAL.
+    1471         1782 :     void log_to_everywhere(int stack_trace_skip, Verbosity verbosity,
+    1472              :         const char* file, unsigned line,
+    1473              :         const char* prefix, const char* buff)
+    1474              :     {
+    1475              :         char preamble_buff[LOGURU_PREAMBLE_WIDTH];
+    1476         1782 :         print_preamble(preamble_buff, sizeof(preamble_buff), verbosity, file, line);
+    1477         1782 :         auto message = Message{ verbosity, file, line, preamble_buff, "", prefix, buff };
+    1478         1782 :         log_message(stack_trace_skip + 1, message, true, true);
+    1479         1782 :     }
+    1480              : 
+    1481              : #if LOGURU_USE_FMTLIB
+    1482              :     void vlog(Verbosity verbosity, const char* file, unsigned line, const char* format, fmt::format_args args)
+    1483              :     {
+    1484              :         auto formatted = fmt::vformat(format, args);
+    1485              :         log_to_everywhere(1, verbosity, file, line, "", formatted.c_str());
+    1486              :     }
+    1487              : 
+    1488              :     void raw_vlog(Verbosity verbosity, const char* file, unsigned line, const char* format, fmt::format_args args)
+    1489              :     {
+    1490              :         auto formatted = fmt::vformat(format, args);
+    1491              :         auto message = Message{ verbosity, file, line, "", "", "", formatted.c_str() };
+    1492              :         log_message(1, message, false, true);
+    1493              :     }
+    1494              : #else
+    1495           46 :     void log(Verbosity verbosity, const char* file, unsigned line, const char* format, ...)
+    1496              :     {
+    1497              :         va_list vlist;
+    1498           46 :         va_start(vlist, format);
+    1499           46 :         vlog(verbosity, file, line, format, vlist);
+    1500           46 :         va_end(vlist);
+    1501           46 :     }
+    1502              : 
+    1503           46 :     void vlog(Verbosity verbosity, const char* file, unsigned line, const char* format, va_list vlist)
+    1504              :     {
+    1505           46 :         auto buff = vtextprintf(format, vlist);
+    1506           46 :         log_to_everywhere(1, verbosity, file, line, "", buff.c_str());
+    1507           46 :     }
+    1508              : 
+    1509            0 :     void raw_log(Verbosity verbosity, const char* file, unsigned line, const char* format, ...)
+    1510              :     {
+    1511              :         va_list vlist;
+    1512            0 :         va_start(vlist, format);
+    1513            0 :         auto buff = vtextprintf(format, vlist);
+    1514            0 :         auto message = Message{ verbosity, file, line, "", "", "", buff.c_str() };
+    1515            0 :         log_message(1, message, false, true);
+    1516            0 :         va_end(vlist);
+    1517            0 :     }
+    1518              : #endif
+    1519              : 
+    1520            0 :     void flush()
+    1521              :     {
+    1522            0 :         std::lock_guard<std::recursive_mutex> lock(s_mutex);
+    1523            0 :         fflush(stderr);
+    1524            0 :         for (const auto& callback : s_callbacks) {
+    1525            0 :             if (callback.flush) {
+    1526            0 :                 callback.flush(callback.user_data);
+    1527              :             }
+    1528              :         }
+    1529            0 :         s_needs_flushing = false;
+    1530            0 :     }
+    1531              : 
+    1532            0 :     LogScopeRAII::LogScopeRAII(Verbosity verbosity, const char* file, unsigned line, const char* format, va_list vlist) :
+    1533            0 :         _verbosity(verbosity), _file(file), _line(line)
+    1534              :     {
+    1535            0 :         this->Init(format, vlist);
+    1536            0 :     }
+    1537              : 
+    1538          868 :     LogScopeRAII::LogScopeRAII(Verbosity verbosity, const char* file, unsigned line, const char* format, ...) :
+    1539          868 :         _verbosity(verbosity), _file(file), _line(line)
+    1540              :     {
+    1541              :         va_list vlist;
+    1542          868 :         va_start(vlist, format);
+    1543          868 :         this->Init(format, vlist);
+    1544          868 :         va_end(vlist);
+    1545          868 :     }
+    1546              : 
+    1547          868 :     LogScopeRAII::~LogScopeRAII()
+    1548              :     {
+    1549          868 :         if (_file) {
+    1550          868 :             std::lock_guard<std::recursive_mutex> lock(s_mutex);
+    1551          868 :             if (_indent_stderr && s_stderr_indentation > 0) {
+    1552            0 :                 --s_stderr_indentation;
+    1553              :             }
+    1554        12390 :             for (auto& p : s_callbacks) {
+    1555              :                 // Note: Callback indentation cannot change!
+    1556        11522 :                 if (_verbosity <= p.verbosity) {
+    1557              :                     // in unlikely case this callback is new
+    1558        11522 :                     if (p.indentation > 0) {
+    1559        11522 :                         --p.indentation;
+    1560              :                     }
+    1561              :                 }
+    1562              :             }
+    1563              : #if LOGURU_VERBOSE_SCOPE_ENDINGS
+    1564          868 :             auto duration_sec = static_cast<double>(now_ns() - _start_time_ns) / 1e9;
+    1565              : #if LOGURU_USE_FMTLIB
+    1566              :             auto buff = textprintf("{:.{}f} s: {:s}", duration_sec, LOGURU_SCOPE_TIME_PRECISION, _name);
+    1567              : #else
+    1568          868 :             auto buff = textprintf("%.*f s: %s", LOGURU_SCOPE_TIME_PRECISION, duration_sec, _name);
+    1569              : #endif
+    1570          868 :             log_to_everywhere(1, _verbosity, _file, _line, "} ", buff.c_str());
+    1571              : #else
+    1572              :             log_to_everywhere(1, _verbosity, _file, _line, "}", "");
+    1573              : #endif
+    1574          868 :         }
+    1575          868 :     }
+    1576              : 
+    1577          868 :     void LogScopeRAII::Init(const char* format, va_list vlist)
+    1578              :     {
+    1579          868 :         if (_verbosity <= current_verbosity_cutoff()) {
+    1580          868 :             std::lock_guard<std::recursive_mutex> lock(s_mutex);
+    1581          868 :             _indent_stderr = (_verbosity <= g_stderr_verbosity);
+    1582          868 :             _start_time_ns = now_ns();
+    1583          868 :             vsnprintf(_name, sizeof(_name), format, vlist);
+    1584          868 :             log_to_everywhere(1, _verbosity, _file, _line, "{ ", _name);
+    1585              : 
+    1586          868 :             if (_indent_stderr) {
+    1587            0 :                 ++s_stderr_indentation;
+    1588              :             }
+    1589              : 
+    1590        12390 :             for (auto& p : s_callbacks) {
+    1591        11522 :                 if (_verbosity <= p.verbosity) {
+    1592        11522 :                     ++p.indentation;
+    1593              :                 }
+    1594              :             }
+    1595          868 :         } else {
+    1596            0 :             _file = nullptr;
+    1597              :         }
+    1598          868 :     }
+    1599              : 
+    1600              : #if LOGURU_USE_FMTLIB
+    1601              :     void vlog_and_abort(int stack_trace_skip, const char* expr, const char* file, unsigned line, const char* format, fmt::format_args args)
+    1602              :     {
+    1603              :         auto formatted = fmt::vformat(format, args);
+    1604              :         log_to_everywhere(stack_trace_skip + 1, Verbosity_FATAL, file, line, expr, formatted.c_str());
+    1605              :         abort(); // log_to_everywhere already does this, but this makes the analyzer happy.
+    1606              :     }
+    1607              : #else
+    1608            0 :     void log_and_abort(int stack_trace_skip, const char* expr, const char* file, unsigned line, const char* format, ...)
+    1609              :     {
+    1610              :         va_list vlist;
+    1611            0 :         va_start(vlist, format);
+    1612            0 :         auto buff = vtextprintf(format, vlist);
+    1613            0 :         log_to_everywhere(stack_trace_skip + 1, Verbosity_FATAL, file, line, expr, buff.c_str());
+    1614            0 :         va_end(vlist);
+    1615            0 :         abort(); // log_to_everywhere already does this, but this makes the analyzer happy.
+    1616            0 :     }
+    1617              : #endif
+    1618              : 
+    1619            0 :     void log_and_abort(int stack_trace_skip, const char* expr, const char* file, unsigned line)
+    1620              :     {
+    1621            0 :         log_and_abort(stack_trace_skip + 1, expr, file, line, " ");
+    1622              :     }
+    1623              : 
+    1624              :     // ----------------------------------------------------------------------------
+    1625              :     // Streams:
+    1626              : 
+    1627              : #if LOGURU_USE_FMTLIB
+    1628              :     template<typename... Args>
+    1629              :     std::string vstrprintf(const char* format, const Args&... args)
+    1630              :     {
+    1631              :         auto text = textprintf(format, args...);
+    1632              :         std::string result = text.c_str();
+    1633              :         return result;
+    1634              :     }
+    1635              : 
+    1636              :     template<typename... Args>
+    1637              :     std::string strprintf(const char* format, const Args&... args)
+    1638              :     {
+    1639              :         return vstrprintf(format, args...);
+    1640              :     }
+    1641              : #else
+    1642            0 :     std::string vstrprintf(const char* format, va_list vlist)
+    1643              :     {
+    1644            0 :         auto text = vtextprintf(format, vlist);
+    1645            0 :         std::string result = text.c_str();
+    1646            0 :         return result;
+    1647            0 :     }
+    1648              : 
+    1649            0 :     std::string strprintf(const char* format, ...)
+    1650              :     {
+    1651              :         va_list vlist;
+    1652            0 :         va_start(vlist, format);
+    1653            0 :         auto result = vstrprintf(format, vlist);
+    1654            0 :         va_end(vlist);
+    1655            0 :         return result;
+    1656              :     }
+    1657              : #endif
+    1658              : 
+    1659              : #if LOGURU_WITH_STREAMS
+    1660              : 
+    1661              :     StreamLogger::~StreamLogger() noexcept(false)
+    1662              :     {
+    1663              :         auto message = _ss.str();
+    1664              :         log(_verbosity, _file, _line, LOGURU_FMT(s), message.c_str());
+    1665              :     }
+    1666              : 
+    1667              :     AbortLogger::~AbortLogger() noexcept(false)
+    1668              :     {
+    1669              :         auto message = _ss.str();
+    1670              :         loguru::log_and_abort(1, _expr, _file, _line, LOGURU_FMT(s), message.c_str());
+    1671              :     }
+    1672              : 
+    1673              : #endif // LOGURU_WITH_STREAMS
+    1674              : 
+    1675              :     // ----------------------------------------------------------------------------
+    1676              :     // 888888 88""Yb 88""Yb  dP"Yb  88""Yb      dP""b8  dP"Yb  88b 88 888888 888888 Yb  dP 888888
+    1677              :     // 88__   88__dP 88__dP dP   Yb 88__dP     dP   `" dP   Yb 88Yb88   88   88__    YbdP    88
+    1678              :     // 88""   88"Yb  88"Yb  Yb   dP 88"Yb      Yb      Yb   dP 88 Y88   88   88""    dPYb    88
+    1679              :     // 888888 88  Yb 88  Yb  YbodP  88  Yb      YboodP  YbodP  88  Y8   88   888888 dP  Yb   88
+    1680              :     // ----------------------------------------------------------------------------
+    1681              : 
+    1682              :     struct StringStream {
+    1683              :         std::string str;
+    1684              :     };
+    1685              : 
+    1686              :     // Use this in your EcPrinter implementations.
+    1687            0 :     void stream_print(StringStream & out_string_stream, const char* text)
+    1688              :     {
+    1689            0 :         out_string_stream.str += text;
+    1690            0 :     }
+    1691              : 
+    1692              :     // ----------------------------------------------------------------------------
+    1693              : 
+    1694              :     using ECPtr = EcEntryBase*;
+    1695              : 
+    1696              : #if defined(_WIN32) || (defined(__APPLE__) && !TARGET_OS_IPHONE)
+    1697              : #ifdef __APPLE__
+    1698              : #define LOGURU_THREAD_LOCAL __thread
+    1699              : #else
+    1700              : #define LOGURU_THREAD_LOCAL thread_local
+    1701              : #endif
+    1702              :     static LOGURU_THREAD_LOCAL ECPtr thread_ec_ptr = nullptr;
+    1703              : 
+    1704              :     ECPtr& get_thread_ec_head_ref()
+    1705              :     {
+    1706              :         return thread_ec_ptr;
+    1707              :     }
+    1708              : #else // !thread_local
+    1709              :     static pthread_once_t s_ec_pthread_once = PTHREAD_ONCE_INIT;
+    1710              :     static pthread_key_t  s_ec_pthread_key;
+    1711              : 
+    1712            0 :     void free_ec_head_ref(void* io_error_context)
+    1713              :     {
+    1714            0 :         delete reinterpret_cast<ECPtr*>(io_error_context);
+    1715            0 :     }
+    1716              : 
+    1717            0 :     void ec_make_pthread_key()
+    1718              :     {
+    1719            0 :         (void)pthread_key_create(&s_ec_pthread_key, free_ec_head_ref);
+    1720            0 :     }
+    1721              : 
+    1722            0 :     ECPtr& get_thread_ec_head_ref()
+    1723              :     {
+    1724            0 :         (void)pthread_once(&s_ec_pthread_once, ec_make_pthread_key);
+    1725            0 :         auto ec = reinterpret_cast<ECPtr*>(pthread_getspecific(s_ec_pthread_key));
+    1726            0 :         if (ec == nullptr) {
+    1727            0 :             ec = new ECPtr(nullptr);
+    1728            0 :             (void)pthread_setspecific(s_ec_pthread_key, ec);
+    1729              :         }
+    1730            0 :         return *ec;
+    1731              :     }
+    1732              : #endif // !thread_local
+    1733              : 
+    1734              :     // ----------------------------------------------------------------------------
+    1735              : 
+    1736            0 :     EcHandle get_thread_ec_handle()
+    1737              :     {
+    1738            0 :         return get_thread_ec_head_ref();
+    1739              :     }
+    1740              : 
+    1741            0 :     Text get_error_context()
+    1742              :     {
+    1743            0 :         return get_error_context_for(get_thread_ec_head_ref());
+    1744              :     }
+    1745              : 
+    1746            0 :     Text get_error_context_for(const EcEntryBase * ec_head)
+    1747              :     {
+    1748            0 :         std::vector<const EcEntryBase*> stack;
+    1749            0 :         while (ec_head) {
+    1750            0 :             stack.push_back(ec_head);
+    1751            0 :             ec_head = ec_head->_previous;
+    1752              :         }
+    1753            0 :         std::reverse(stack.begin(), stack.end());
+    1754              : 
+    1755            0 :         StringStream result;
+    1756            0 :         if (!stack.empty()) {
+    1757            0 :             result.str += "------------------------------------------------\n";
+    1758            0 :             for (auto entry : stack) {
+    1759            0 :                 const auto description = std::string(entry->_descr) + ":";
+    1760              : #if LOGURU_USE_FMTLIB
+    1761              :                 auto prefix = textprintf("[ErrorContext] {.{}s}:{:-5u} {:-20s} ",
+    1762              :                     filename(entry->_file), LOGURU_FILENAME_WIDTH, entry->_line, description.c_str());
+    1763              : #else
+    1764              :                 auto prefix = textprintf("[ErrorContext] %*s:%-5u %-20s ",
+    1765            0 :                     LOGURU_FILENAME_WIDTH, filename(entry->_file), entry->_line, description.c_str());
+    1766              : #endif
+    1767            0 :                 result.str += prefix.c_str();
+    1768            0 :                 entry->print_value(result);
+    1769            0 :                 result.str += "\n";
+    1770            0 :             }
+    1771            0 :             result.str += "------------------------------------------------";
+    1772              :         }
+    1773            0 :         return Text(STRDUP(result.str.c_str()));
+    1774            0 :     }
+    1775              : 
+    1776            0 :     EcEntryBase::EcEntryBase(const char* file, unsigned line, const char* descr)
+    1777            0 :         : _file(file), _line(line), _descr(descr)
+    1778              :     {
+    1779            0 :         EcEntryBase*& ec_head = get_thread_ec_head_ref();
+    1780            0 :         _previous = ec_head;
+    1781            0 :         ec_head = this;
+    1782            0 :     }
+    1783              : 
+    1784            0 :     EcEntryBase::~EcEntryBase()
+    1785              :     {
+    1786            0 :         get_thread_ec_head_ref() = _previous;
+    1787            0 :     }
+    1788              : 
+    1789              :     // ------------------------------------------------------------------------
+    1790              : 
+    1791            0 :     Text ec_to_text(const char* value)
+    1792              :     {
+    1793              :         // Add quotes around the string to make it obvious where it begin and ends.
+    1794              :         // This is great for detecting erroneous leading or trailing spaces in e.g. an identifier.
+    1795            0 :         auto str = "\"" + std::string(value) + "\"";
+    1796            0 :         return Text{ STRDUP(str.c_str()) };
+    1797            0 :     }
+    1798              : 
+    1799            0 :     Text ec_to_text(char c)
+    1800              :     {
+    1801              :         // Add quotes around the character to make it obvious where it begin and ends.
+    1802            0 :         std::string str = "'";
+    1803              : 
+    1804            0 :         auto write_hex_digit = [&](unsigned num)
+    1805              :             {
+    1806            0 :                 if (num < 10u) { str += char('0' + num); } else { str += char('a' + num - 10); }
+    1807            0 :             };
+    1808              : 
+    1809            0 :         auto write_hex_16 = [&](uint16_t n)
+    1810              :             {
+    1811            0 :                 write_hex_digit((n >> 12u) & 0x0f);
+    1812            0 :                 write_hex_digit((n >> 8u) & 0x0f);
+    1813            0 :                 write_hex_digit((n >> 4u) & 0x0f);
+    1814            0 :                 write_hex_digit((n >> 0u) & 0x0f);
+    1815            0 :             };
+    1816              : 
+    1817            0 :         if (c == '\\') { str += "\\\\"; } else if (c == '\"') { str += "\\\""; } else if (c == '\'') { str += "\\\'"; } else if (c == '\0') { str += "\\0"; } else if (c == '\b') { str += "\\b"; } else if (c == '\f') { str += "\\f"; } else if (c == '\n') { str += "\\n"; } else if (c == '\r') { str += "\\r"; } else if (c == '\t') { str += "\\t"; } else if (0 <= c && c < 0x20) {
+    1818            0 :             str += "\\u";
+    1819            0 :             write_hex_16(static_cast<uint16_t>(c));
+    1820            0 :         } else { str += c; }
+    1821              : 
+    1822            0 :         str += "'";
+    1823              : 
+    1824            0 :         return Text{ STRDUP(str.c_str()) };
+    1825            0 :     }
+    1826              : 
+    1827              : #define DEFINE_EC(Type)                        \
+    1828              :                 Text ec_to_text(Type value)                \
+    1829              :                 {                                          \
+    1830              :                         auto str = std::to_string(value);      \
+    1831              :                         return Text{STRDUP(str.c_str())};      \
+    1832              :                 }
+    1833              : 
+    1834            0 :     DEFINE_EC(int)
+    1835            0 :         DEFINE_EC(unsigned int)
+    1836            0 :         DEFINE_EC(long)
+    1837            0 :         DEFINE_EC(unsigned long)
+    1838            0 :         DEFINE_EC(long long)
+    1839            0 :         DEFINE_EC(unsigned long long)
+    1840            0 :         DEFINE_EC(float)
+    1841            0 :         DEFINE_EC(double)
+    1842            0 :         DEFINE_EC(long double)
+    1843              : 
+    1844              : #undef DEFINE_EC
+    1845              : 
+    1846            0 :         Text ec_to_text(EcHandle ec_handle)
+    1847              :     {
+    1848            0 :         Text parent_ec = get_error_context_for(ec_handle);
+    1849            0 :         size_t buffer_size = strlen(parent_ec.c_str()) + 2;
+    1850            0 :         char* with_newline = reinterpret_cast<char*>(malloc(buffer_size));
+    1851            0 :         with_newline[0] = '\n';
+    1852              : #ifdef _WIN32
+    1853              :         strncpy_s(with_newline + 1, buffer_size, parent_ec.c_str(), buffer_size - 2);
+    1854              : #else
+    1855            0 :         strcpy(with_newline + 1, parent_ec.c_str());
+    1856              : #endif
+    1857            0 :         return Text(with_newline);
+    1858            0 :     }
+    1859              : 
+    1860              :     // ----------------------------------------------------------------------------
+    1861              : 
+    1862              : } // namespace loguru
+    1863              : 
+    1864              : // ----------------------------------------------------------------------------
+    1865              : // .dP"Y8 88  dP""b8 88b 88    db    88     .dP"Y8
+    1866              : // `Ybo." 88 dP   `" 88Yb88   dPYb   88     `Ybo."
+    1867              : // o.`Y8b 88 Yb  "88 88 Y88  dP__Yb  88  .o o.`Y8b
+    1868              : // 8bodP' 88  YboodP 88  Y8 dP""""Yb 88ood8 8bodP'
+    1869              : // ----------------------------------------------------------------------------
+    1870              : 
+    1871              : #ifdef _WIN32
+    1872              : namespace loguru {
+    1873              :     void install_signal_handlers(const SignalOptions& signal_options)
+    1874              :     {
+    1875              :         (void)signal_options;
+    1876              :         // TODO: implement signal handlers on windows
+    1877              :     }
+    1878              : } // namespace loguru
+    1879              : 
+    1880              : #else // _WIN32
+    1881              : 
+    1882              : namespace loguru {
+    1883            0 :     void write_to_stderr(const char* data, size_t size)
+    1884              :     {
+    1885            0 :         auto result = write(STDERR_FILENO, data, size);
+    1886              :         (void)result; // Ignore errors.
+    1887            0 :     }
+    1888              : 
+    1889            0 :     void write_to_stderr(const char* data)
+    1890              :     {
+    1891            0 :         write_to_stderr(data, strlen(data));
+    1892            0 :     }
+    1893              : 
+    1894            0 :     void call_default_signal_handler(int signal_number)
+    1895              :     {
+    1896              :         struct sigaction sig_action;
+    1897            0 :         memset(&sig_action, 0, sizeof(sig_action));
+    1898            0 :         sigemptyset(&sig_action.sa_mask);
+    1899            0 :         sig_action.sa_handler = SIG_DFL;
+    1900            0 :         sigaction(signal_number, &sig_action, NULL);
+    1901            0 :         kill(getpid(), signal_number);
+    1902            0 :     }
+    1903              : 
+    1904            0 :     void signal_handler(int signal_number, siginfo_t*, void*)
+    1905              :     {
+    1906            0 :         const char* signal_name = "UNKNOWN SIGNAL";
+    1907              : 
+    1908            0 :         if (signal_number == SIGABRT) { signal_name = "SIGABRT"; }
+    1909            0 :         if (signal_number == SIGBUS) { signal_name = "SIGBUS"; }
+    1910            0 :         if (signal_number == SIGFPE) { signal_name = "SIGFPE"; }
+    1911            0 :         if (signal_number == SIGILL) { signal_name = "SIGILL"; }
+    1912            0 :         if (signal_number == SIGINT) { signal_name = "SIGINT"; }
+    1913            0 :         if (signal_number == SIGSEGV) { signal_name = "SIGSEGV"; }
+    1914            0 :         if (signal_number == SIGTERM) { signal_name = "SIGTERM"; }
+    1915              : 
+    1916              :         // --------------------------------------------------------------------
+    1917              :         /* There are few things that are safe to do in a signal handler,
+    1918              :            but writing to stderr is one of them.
+    1919              :            So we first print out what happened to stderr so we're sure that gets out,
+    1920              :            then we do the unsafe things, like logging the stack trace.
+    1921              :         */
+    1922              : 
+    1923            0 :         if (g_colorlogtostderr && s_terminal_has_color) {
+    1924            0 :             write_to_stderr(terminal_reset());
+    1925            0 :             write_to_stderr(terminal_bold());
+    1926            0 :             write_to_stderr(terminal_light_red());
+    1927              :         }
+    1928            0 :         write_to_stderr("\n");
+    1929            0 :         write_to_stderr("Loguru caught a signal: ");
+    1930            0 :         write_to_stderr(signal_name);
+    1931            0 :         write_to_stderr("\n");
+    1932            0 :         if (g_colorlogtostderr && s_terminal_has_color) {
+    1933            0 :             write_to_stderr(terminal_reset());
+    1934              :         }
+    1935              : 
+    1936              :         // --------------------------------------------------------------------
+    1937              : 
+    1938            0 :         if (s_signal_options.unsafe_signal_handler) {
+    1939              :             // --------------------------------------------------------------------
+    1940              :             /* Now we do unsafe things. This can for example lead to deadlocks if
+    1941              :                the signal was triggered from the system's memory management functions
+    1942              :                and the code below tries to do allocations.
+    1943              :             */
+    1944              : 
+    1945            0 :             flush();
+    1946              :             char preamble_buff[LOGURU_PREAMBLE_WIDTH];
+    1947            0 :             print_preamble(preamble_buff, sizeof(preamble_buff), Verbosity_FATAL, "", 0);
+    1948            0 :             auto message = Message{ Verbosity_FATAL, "", 0, preamble_buff, "", "Signal: ", signal_name };
+    1949              :             try {
+    1950            0 :                 log_message(1, message, false, false);
+    1951              :             }
+    1952            0 :             catch (...) {
+    1953              :                 // This can happed due to s_fatal_handler.
+    1954            0 :                 write_to_stderr("Exception caught and ignored by Loguru signal handler.\n");
+    1955            0 :             }
+    1956            0 :             flush();
+    1957              : 
+    1958              :             // --------------------------------------------------------------------
+    1959              :         }
+    1960              : 
+    1961            0 :         call_default_signal_handler(signal_number);
+    1962            0 :     }
+    1963              : 
+    1964            0 :     void install_signal_handlers(const SignalOptions& signal_options)
+    1965              :     {
+    1966            0 :         s_signal_options = signal_options;
+    1967              : 
+    1968              :         struct sigaction sig_action;
+    1969            0 :         memset(&sig_action, 0, sizeof(sig_action));
+    1970            0 :         sigemptyset(&sig_action.sa_mask);
+    1971            0 :         sig_action.sa_flags |= SA_SIGINFO;
+    1972            0 :         sig_action.sa_sigaction = &signal_handler;
+    1973              : 
+    1974            0 :         if (signal_options.sigabrt) {
+    1975            0 :             CHECK_F(sigaction(SIGABRT, &sig_action, NULL) != -1, "Failed to install handler for SIGABRT");
+    1976              :         }
+    1977            0 :         if (signal_options.sigbus) {
+    1978            0 :             CHECK_F(sigaction(SIGBUS, &sig_action, NULL) != -1, "Failed to install handler for SIGBUS");
+    1979              :         }
+    1980            0 :         if (signal_options.sigfpe) {
+    1981            0 :             CHECK_F(sigaction(SIGFPE, &sig_action, NULL) != -1, "Failed to install handler for SIGFPE");
+    1982              :         }
+    1983            0 :         if (signal_options.sigill) {
+    1984            0 :             CHECK_F(sigaction(SIGILL, &sig_action, NULL) != -1, "Failed to install handler for SIGILL");
+    1985              :         }
+    1986            0 :         if (signal_options.sigint) {
+    1987            0 :             CHECK_F(sigaction(SIGINT, &sig_action, NULL) != -1, "Failed to install handler for SIGINT");
+    1988              :         }
+    1989            0 :         if (signal_options.sigsegv) {
+    1990            0 :             CHECK_F(sigaction(SIGSEGV, &sig_action, NULL) != -1, "Failed to install handler for SIGSEGV");
+    1991              :         }
+    1992            0 :         if (signal_options.sigterm) {
+    1993            0 :             CHECK_F(sigaction(SIGTERM, &sig_action, NULL) != -1, "Failed to install handler for SIGTERM");
+    1994              :         }
+    1995            0 :     }
+    1996              : } // namespace loguru
+    1997              : 
+    1998              : #endif // _WIN32
+    1999              : 
+    2000              : 
+    2001              : #if defined(__GNUC__) || defined(__clang__)
+    2002              : #pragma GCC diagnostic pop
+    2003              : #elif defined(_MSC_VER)
+    2004              : #pragma warning(pop)
+    2005              : #endif
+    2006              : 
+    2007              : LOGURU_ANONYMOUS_NAMESPACE_END
+    2008              : 
+    2009              : #endif // LOGURU_IMPLEMENTATION
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/log/loguru.hpp.func-c.html b/html/BayesNet/lib/log/loguru.hpp.func-c.html new file mode 100644 index 0000000..bf930b7 --- /dev/null +++ b/html/BayesNet/lib/log/loguru.hpp.func-c.html @@ -0,0 +1,152 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/log/loguru.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/log - loguru.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:68.4 %1913
Test Date:2024-04-30 13:17:26Functions:30.0 %103
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN6loguru12LogScopeRAIIC2Ev0
_ZN6loguru12format_valueIDnEENS_4TextERKT_0
_ZN6loguru12format_valueIDnEENS_4TextERKT_0
_ZN6loguru12format_valueIPcEENS_4TextERKT_0
_ZN6loguru12format_valueIiEENS_4TextERKT_0
_ZN6loguru12format_valueIjEENS_4TextERKT_0
_ZN6loguru12format_valueIyEENS_4TextERKT_0
_ZNK6loguru4Text5emptyEv0
_ZN6loguru13SignalOptions4noneEv2
_ZN6loguru4TextC2EPc922
_ZNK6loguru4Text5c_strEv922
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/log/loguru.hpp.func.html b/html/BayesNet/lib/log/loguru.hpp.func.html new file mode 100644 index 0000000..c047ad6 --- /dev/null +++ b/html/BayesNet/lib/log/loguru.hpp.func.html @@ -0,0 +1,152 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/log/loguru.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/log - loguru.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:68.4 %1913
Test Date:2024-04-30 13:17:26Functions:30.0 %103
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN6loguru12LogScopeRAIIC2Ev0
_ZN6loguru12format_valueIDnEENS_4TextERKT_0
_ZN6loguru12format_valueIDnEENS_4TextERKT_0
_ZN6loguru12format_valueIPcEENS_4TextERKT_0
_ZN6loguru12format_valueIiEENS_4TextERKT_0
_ZN6loguru12format_valueIjEENS_4TextERKT_0
_ZN6loguru12format_valueIyEENS_4TextERKT_0
_ZN6loguru13SignalOptions4noneEv2
_ZN6loguru4TextC2EPc922
_ZNK6loguru4Text5c_strEv922
_ZNK6loguru4Text5emptyEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/log/loguru.hpp.gcov.html b/html/BayesNet/lib/log/loguru.hpp.gcov.html new file mode 100644 index 0000000..a8c7471 --- /dev/null +++ b/html/BayesNet/lib/log/loguru.hpp.gcov.html @@ -0,0 +1,1551 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/log/loguru.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/log - loguru.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:68.4 %1913
Test Date:2024-04-30 13:17:26Functions:30.0 %103
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : /*
+       2              : Loguru logging library for C++, by Emil Ernerfeldt.
+       3              : www.github.com/emilk/loguru
+       4              : If you find Loguru useful, please let me know on twitter or in a mail!
+       5              : Twitter: @ernerfeldt
+       6              : Mail:    emil.ernerfeldt@gmail.com
+       7              : Website: www.ilikebigbits.com
+       8              : 
+       9              : # License
+      10              :     This software is in the public domain. Where that dedication is not
+      11              :     recognized, you are granted a perpetual, irrevocable license to
+      12              :     copy, modify and distribute it as you see fit.
+      13              : 
+      14              : # Inspiration
+      15              :     Much of Loguru was inspired by GLOG, https://code.google.com/p/google-glog/.
+      16              :     The choice of public domain is fully due Sean T. Barrett
+      17              :     and his wonderful stb libraries at https://github.com/nothings/stb.
+      18              : 
+      19              : # Version history
+      20              :     * Version 0.1.0 - 2015-03-22 - Works great on Mac.
+      21              :     * Version 0.2.0 - 2015-09-17 - Removed the only dependency.
+      22              :     * Version 0.3.0 - 2015-10-02 - Drop-in replacement for most of GLOG
+      23              :     * Version 0.4.0 - 2015-10-07 - Single-file!
+      24              :     * Version 0.5.0 - 2015-10-17 - Improved file logging
+      25              :     * Version 0.6.0 - 2015-10-24 - Add stack traces
+      26              :     * Version 0.7.0 - 2015-10-27 - Signals
+      27              :     * Version 0.8.0 - 2015-10-30 - Color logging.
+      28              :     * Version 0.9.0 - 2015-11-26 - ABORT_S and proper handling of FATAL
+      29              :     * Version 1.0.0 - 2016-02-14 - ERROR_CONTEXT
+      30              :     * Version 1.1.0 - 2016-02-19 - -v OFF, -v INFO etc
+      31              :     * Version 1.1.1 - 2016-02-20 - textprintf vs strprintf
+      32              :     * Version 1.1.2 - 2016-02-22 - Remove g_alsologtostderr
+      33              :     * Version 1.1.3 - 2016-02-29 - ERROR_CONTEXT as linked list
+      34              :     * Version 1.2.0 - 2016-03-19 - Add get_thread_name()
+      35              :     * Version 1.2.1 - 2016-03-20 - Minor fixes
+      36              :     * Version 1.2.2 - 2016-03-29 - Fix issues with set_fatal_handler throwing an exception
+      37              :     * Version 1.2.3 - 2016-05-16 - Log current working directory in loguru::init().
+      38              :     * Version 1.2.4 - 2016-05-18 - Custom replacement for -v in loguru::init() by bjoernpollex
+      39              :     * Version 1.2.5 - 2016-05-18 - Add ability to print ERROR_CONTEXT of parent thread.
+      40              :     * Version 1.2.6 - 2016-05-19 - Bug fix regarding VLOG verbosity argument lacking ().
+      41              :     * Version 1.2.7 - 2016-05-23 - Fix PATH_MAX problem.
+      42              :     * Version 1.2.8 - 2016-05-26 - Add shutdown() and remove_all_callbacks()
+      43              :     * Version 1.2.9 - 2016-06-09 - Use a monotonic clock for uptime.
+      44              :     * Version 1.3.0 - 2016-07-20 - Fix issues with callback flush/close not being called.
+      45              :     * Version 1.3.1 - 2016-07-20 - Add LOGURU_UNSAFE_SIGNAL_HANDLER to toggle stacktrace on signals.
+      46              :     * Version 1.3.2 - 2016-07-20 - Add loguru::arguments()
+      47              :     * Version 1.4.0 - 2016-09-15 - Semantic versioning + add loguru::create_directories
+      48              :     * Version 1.4.1 - 2016-09-29 - Customize formating with LOGURU_FILENAME_WIDTH
+      49              :     * Version 1.5.0 - 2016-12-22 - LOGURU_USE_FMTLIB by kolis and LOGURU_WITH_FILEABS by scinart
+      50              :     * Version 1.5.1 - 2017-08-08 - Terminal colors on Windows 10 thanks to looki
+      51              :     * Version 1.6.0 - 2018-01-03 - Add LOGURU_RTTI and LOGURU_STACKTRACES settings
+      52              :     * Version 1.7.0 - 2018-01-03 - Add ability to turn off the preamble with loguru::g_preamble
+      53              :     * Version 1.7.1 - 2018-04-05 - Add function get_fatal_handler
+      54              :     * Version 1.7.2 - 2018-04-22 - Fix a bug where large file names could cause stack corruption (thanks @ccamporesi)
+      55              :     * Version 1.8.0 - 2018-04-23 - Shorten long file names to keep preamble fixed width
+      56              :     * Version 1.9.0 - 2018-09-22 - Adjust terminal colors, add LOGURU_VERBOSE_SCOPE_ENDINGS, add LOGURU_SCOPE_TIME_PRECISION, add named log levels
+      57              :     * Version 2.0.0 - 2018-09-22 - Split loguru.hpp into loguru.hpp and loguru.cpp
+      58              :     * Version 2.1.0 - 2019-09-23 - Update fmtlib + add option to loguru::init to NOT set main thread name.
+      59              :     * Version 2.2.0 - 2020-07-31 - Replace LOGURU_CATCH_SIGABRT with struct SignalOptions
+      60              : 
+      61              : # Compiling
+      62              :     Just include <loguru.hpp> where you want to use Loguru.
+      63              :     Then, in one .cpp file #include <loguru.cpp>
+      64              :     Make sure you compile with -std=c++11 -lstdc++ -lpthread -ldl
+      65              : 
+      66              : # Usage
+      67              :     For details, please see the official documentation at emilk.github.io/loguru
+      68              : 
+      69              :     #include <loguru.hpp>
+      70              : 
+      71              :     int main(int argc, char* argv[]) {
+      72              :         loguru::init(argc, argv);
+      73              : 
+      74              :         // Put every log message in "everything.log":
+      75              :         loguru::add_file("everything.log", loguru::Append, loguru::Verbosity_MAX);
+      76              : 
+      77              :         LOG_F(INFO, "The magic number is %d", 42);
+      78              :     }
+      79              : 
+      80              : */
+      81              : 
+      82              : #if defined(LOGURU_IMPLEMENTATION)
+      83              : #error "You are defining LOGURU_IMPLEMENTATION. This is for older versions of Loguru. You should now instead include loguru.cpp (or build it and link with it)"
+      84              : #endif
+      85              : 
+      86              : // Disable all warnings from gcc/clang:
+      87              : #if defined(__clang__)
+      88              : #pragma clang system_header
+      89              : #elif defined(__GNUC__)
+      90              : #pragma GCC system_header
+      91              : #endif
+      92              : 
+      93              : #ifndef LOGURU_HAS_DECLARED_FORMAT_HEADER
+      94              : #define LOGURU_HAS_DECLARED_FORMAT_HEADER
+      95              : 
+      96              : // Semantic versioning. Loguru version can be printed with printf("%d.%d.%d", LOGURU_VERSION_MAJOR, LOGURU_VERSION_MINOR, LOGURU_VERSION_PATCH);
+      97              : #define LOGURU_VERSION_MAJOR 2
+      98              : #define LOGURU_VERSION_MINOR 1
+      99              : #define LOGURU_VERSION_PATCH 0
+     100              : 
+     101              : #if defined(_MSC_VER)
+     102              : #include <sal.h>  // Needed for _In_z_ etc annotations
+     103              : #endif
+     104              : 
+     105              : #if defined(__linux__) || defined(__APPLE__)
+     106              : #define LOGURU_SYSLOG 1
+     107              : #else
+     108              : #define LOGURU_SYSLOG 0
+     109              : #endif
+     110              : 
+     111              : // ----------------------------------------------------------------------------
+     112              : 
+     113              : #ifndef LOGURU_EXPORT
+     114              :     // Define to your project's export declaration if needed for use in a shared library.
+     115              : #define LOGURU_EXPORT
+     116              : #endif
+     117              : 
+     118              : #ifndef LOGURU_SCOPE_TEXT_SIZE
+     119              :     // Maximum length of text that can be printed by a LOG_SCOPE.
+     120              :     // This should be long enough to get most things, but short enough not to clutter the stack.
+     121              : #define LOGURU_SCOPE_TEXT_SIZE 196
+     122              : #endif
+     123              : 
+     124              : #ifndef LOGURU_FILENAME_WIDTH
+     125              :     // Width of the column containing the file name
+     126              : #define LOGURU_FILENAME_WIDTH 23
+     127              : #endif
+     128              : 
+     129              : #ifndef LOGURU_THREADNAME_WIDTH
+     130              :     // Width of the column containing the thread name
+     131              : #define LOGURU_THREADNAME_WIDTH 16
+     132              : #endif
+     133              : 
+     134              : #ifndef LOGURU_SCOPE_TIME_PRECISION
+     135              :     // Resolution of scope timers. 3=ms, 6=us, 9=ns
+     136              : #define LOGURU_SCOPE_TIME_PRECISION 3
+     137              : #endif
+     138              : 
+     139              : #ifdef LOGURU_CATCH_SIGABRT
+     140              : #error "You are defining LOGURU_CATCH_SIGABRT. This is for older versions of Loguru. You should now instead set the options passed to loguru::init"
+     141              : #endif
+     142              : 
+     143              : #ifndef LOGURU_VERBOSE_SCOPE_ENDINGS
+     144              :     // Show milliseconds and scope name at end of scope.
+     145              : #define LOGURU_VERBOSE_SCOPE_ENDINGS 1
+     146              : #endif
+     147              : 
+     148              : #ifndef LOGURU_REDEFINE_ASSERT
+     149              : #define LOGURU_REDEFINE_ASSERT 0
+     150              : #endif
+     151              : 
+     152              : #ifndef LOGURU_WITH_STREAMS
+     153              : #define LOGURU_WITH_STREAMS 0
+     154              : #endif
+     155              : 
+     156              : #ifndef LOGURU_REPLACE_GLOG
+     157              : #define LOGURU_REPLACE_GLOG 0
+     158              : #endif
+     159              : 
+     160              : #if LOGURU_REPLACE_GLOG
+     161              : #undef LOGURU_WITH_STREAMS
+     162              : #define LOGURU_WITH_STREAMS 1
+     163              : #endif
+     164              : 
+     165              : #if defined(LOGURU_UNSAFE_SIGNAL_HANDLER)
+     166              : #error "You are defining LOGURU_UNSAFE_SIGNAL_HANDLER. This is for older versions of Loguru. You should now instead set the unsafe_signal_handler option when you call loguru::init."
+     167              : #endif
+     168              : 
+     169              : #if LOGURU_IMPLEMENTATION
+     170              : #undef LOGURU_WITH_STREAMS
+     171              : #define LOGURU_WITH_STREAMS 1
+     172              : #endif
+     173              : 
+     174              : #ifndef LOGURU_USE_FMTLIB
+     175              : #define LOGURU_USE_FMTLIB 0
+     176              : #endif
+     177              : 
+     178              : #ifndef LOGURU_USE_LOCALE
+     179              : #define LOGURU_USE_LOCALE 0
+     180              : #endif
+     181              : 
+     182              : #ifndef LOGURU_WITH_FILEABS
+     183              : #define LOGURU_WITH_FILEABS 0
+     184              : #endif
+     185              : 
+     186              : #ifndef LOGURU_RTTI
+     187              : #if defined(__clang__)
+     188              : #if __has_feature(cxx_rtti)
+     189              : #define LOGURU_RTTI 1
+     190              : #endif
+     191              : #elif defined(__GNUG__)
+     192              : #if defined(__GXX_RTTI)
+     193              : #define LOGURU_RTTI 1
+     194              : #endif
+     195              : #elif defined(_MSC_VER)
+     196              : #if defined(_CPPRTTI)
+     197              : #define LOGURU_RTTI 1
+     198              : #endif
+     199              : #endif
+     200              : #endif
+     201              : 
+     202              : #ifdef LOGURU_USE_ANONYMOUS_NAMESPACE
+     203              : #define LOGURU_ANONYMOUS_NAMESPACE_BEGIN namespace {
+     204              : #define LOGURU_ANONYMOUS_NAMESPACE_END }
+     205              : #else
+     206              : #define LOGURU_ANONYMOUS_NAMESPACE_BEGIN
+     207              : #define LOGURU_ANONYMOUS_NAMESPACE_END
+     208              : #endif
+     209              : 
+     210              : // --------------------------------------------------------------------
+     211              : // Utility macros
+     212              : 
+     213              : #define LOGURU_CONCATENATE_IMPL(s1, s2) s1 ## s2
+     214              : #define LOGURU_CONCATENATE(s1, s2) LOGURU_CONCATENATE_IMPL(s1, s2)
+     215              : 
+     216              : #ifdef __COUNTER__
+     217              : #   define LOGURU_ANONYMOUS_VARIABLE(str) LOGURU_CONCATENATE(str, __COUNTER__)
+     218              : #else
+     219              : #   define LOGURU_ANONYMOUS_VARIABLE(str) LOGURU_CONCATENATE(str, __LINE__)
+     220              : #endif
+     221              : 
+     222              : #if defined(__clang__) || defined(__GNUC__)
+     223              :     // Helper macro for declaring functions as having similar signature to printf.
+     224              :     // This allows the compiler to catch format errors at compile-time.
+     225              : #define LOGURU_PRINTF_LIKE(fmtarg, firstvararg) __attribute__((__format__ (__printf__, fmtarg, firstvararg)))
+     226              : #define LOGURU_FORMAT_STRING_TYPE const char*
+     227              : #elif defined(_MSC_VER)
+     228              : #define LOGURU_PRINTF_LIKE(fmtarg, firstvararg)
+     229              : #define LOGURU_FORMAT_STRING_TYPE _In_z_ _Printf_format_string_ const char*
+     230              : #else
+     231              : #define LOGURU_PRINTF_LIKE(fmtarg, firstvararg)
+     232              : #define LOGURU_FORMAT_STRING_TYPE const char*
+     233              : #endif
+     234              : 
+     235              : // Used to mark log_and_abort for the benefit of the static analyzer and optimizer.
+     236              : #if defined(_MSC_VER)
+     237              : #define LOGURU_NORETURN __declspec(noreturn)
+     238              : #else
+     239              : #define LOGURU_NORETURN __attribute__((noreturn))
+     240              : #endif
+     241              : 
+     242              : #if defined(_MSC_VER)
+     243              : #define LOGURU_PREDICT_FALSE(x) (x)
+     244              : #define LOGURU_PREDICT_TRUE(x)  (x)
+     245              : #else
+     246              : #define LOGURU_PREDICT_FALSE(x) (__builtin_expect(x,     0))
+     247              : #define LOGURU_PREDICT_TRUE(x)  (__builtin_expect(!!(x), 1))
+     248              : #endif
+     249              : 
+     250              : #if LOGURU_USE_FMTLIB
+     251              : #include <fmt/format.h>
+     252              : #define LOGURU_FMT(x) "{:" #x "}"
+     253              : #else
+     254              : #define LOGURU_FMT(x) "%" #x
+     255              : #endif
+     256              : 
+     257              : #ifdef _WIN32
+     258              : #define STRDUP(str) _strdup(str)
+     259              : #else
+     260              : #define STRDUP(str) strdup(str)
+     261              : #endif
+     262              : 
+     263              : #include <stdarg.h>
+     264              : 
+     265              : // --------------------------------------------------------------------
+     266              : LOGURU_ANONYMOUS_NAMESPACE_BEGIN
+     267              : 
+     268              : namespace loguru {
+     269              :     // Simple RAII ownership of a char*.
+     270              :     class LOGURU_EXPORT Text {
+     271              :     public:
+     272          922 :         explicit Text(char* owned_str) : _str(owned_str) {}
+     273              :         ~Text();
+     274              :         Text(Text&& t)
+     275              :         {
+     276              :             _str = t._str;
+     277              :             t._str = nullptr;
+     278              :         }
+     279              :         Text(Text& t) = delete;
+     280              :         Text& operator=(Text& t) = delete;
+     281              :         void operator=(Text&& t) = delete;
+     282              : 
+     283          922 :         const char* c_str() const { return _str; }
+     284            0 :         bool empty() const { return _str == nullptr || *_str == '\0'; }
+     285              : 
+     286              :         char* release()
+     287              :         {
+     288              :             auto result = _str;
+     289              :             _str = nullptr;
+     290              :             return result;
+     291              :         }
+     292              : 
+     293              :     private:
+     294              :         char* _str;
+     295              :     };
+     296              : 
+     297              :     // Like printf, but returns the formated text.
+     298              : #if LOGURU_USE_FMTLIB
+     299              :     LOGURU_EXPORT
+     300              :         Text vtextprintf(const char* format, fmt::format_args args);
+     301              : 
+     302              :     template<typename... Args>
+     303              :     LOGURU_EXPORT
+     304              :         Text textprintf(LOGURU_FORMAT_STRING_TYPE format, const Args&... args)
+     305              :     {
+     306              :         return vtextprintf(format, fmt::make_format_args(args...));
+     307              :     }
+     308              : #else
+     309              :     LOGURU_EXPORT
+     310              :         Text textprintf(LOGURU_FORMAT_STRING_TYPE format, ...) LOGURU_PRINTF_LIKE(1, 2);
+     311              : #endif
+     312              : 
+     313              :     // Overloaded for variadic template matching.
+     314              :     LOGURU_EXPORT
+     315              :         Text textprintf();
+     316              : 
+     317              :     using Verbosity = int;
+     318              : 
+     319              : #undef FATAL
+     320              : #undef ERROR
+     321              : #undef WARNING
+     322              : #undef INFO
+     323              : #undef MAX
+     324              : 
+     325              :     enum NamedVerbosity : Verbosity {
+     326              :         // Used to mark an invalid verbosity. Do not log to this level.
+     327              :         Verbosity_INVALID = -10, // Never do LOG_F(INVALID)
+     328              : 
+     329              :         // You may use Verbosity_OFF on g_stderr_verbosity, but for nothing else!
+     330              :         Verbosity_OFF = -9, // Never do LOG_F(OFF)
+     331              : 
+     332              :         // Prefer to use ABORT_F or ABORT_S over LOG_F(FATAL) or LOG_S(FATAL).
+     333              :         Verbosity_FATAL = -3,
+     334              :         Verbosity_ERROR = -2,
+     335              :         Verbosity_WARNING = -1,
+     336              : 
+     337              :         // Normal messages. By default written to stderr.
+     338              :         Verbosity_INFO = 0,
+     339              : 
+     340              :         // Same as Verbosity_INFO in every way.
+     341              :         Verbosity_0 = 0,
+     342              : 
+     343              :         // Verbosity levels 1-9 are generally not written to stderr, but are written to file.
+     344              :         Verbosity_1 = +1,
+     345              :         Verbosity_2 = +2,
+     346              :         Verbosity_3 = +3,
+     347              :         Verbosity_4 = +4,
+     348              :         Verbosity_5 = +5,
+     349              :         Verbosity_6 = +6,
+     350              :         Verbosity_7 = +7,
+     351              :         Verbosity_8 = +8,
+     352              :         Verbosity_9 = +9,
+     353              : 
+     354              :         // Do not use higher verbosity levels, as that will make grepping log files harder.
+     355              :         Verbosity_MAX = +9,
+     356              :     };
+     357              : 
+     358              :     struct Message {
+     359              :         // You would generally print a Message by just concatenating the buffers without spacing.
+     360              :         // Optionally, ignore preamble and indentation.
+     361              :         Verbosity   verbosity;   // Already part of preamble
+     362              :         const char* filename;    // Already part of preamble
+     363              :         unsigned    line;        // Already part of preamble
+     364              :         const char* preamble;    // Date, time, uptime, thread, file:line, verbosity.
+     365              :         const char* indentation; // Just a bunch of spacing.
+     366              :         const char* prefix;      // Assertion failure info goes here (or "").
+     367              :         const char* message;     // User message goes here.
+     368              :     };
+     369              : 
+     370              :     /* Everything with a verbosity equal or greater than g_stderr_verbosity will be
+     371              :     written to stderr. You can set this in code or via the -v argument.
+     372              :     Set to loguru::Verbosity_OFF to write nothing to stderr.
+     373              :     Default is 0, i.e. only log ERROR, WARNING and INFO are written to stderr.
+     374              :     */
+     375              :     LOGURU_EXPORT extern Verbosity g_stderr_verbosity;
+     376              :     LOGURU_EXPORT extern bool      g_colorlogtostderr; // True by default.
+     377              :     LOGURU_EXPORT extern unsigned  g_flush_interval_ms; // 0 (unbuffered) by default.
+     378              :     LOGURU_EXPORT extern bool      g_preamble_header; // Prepend each log start by a descriptions line with all columns name? True by default.
+     379              :     LOGURU_EXPORT extern bool      g_preamble; // Prefix each log line with date, time etc? True by default.
+     380              : 
+     381              :     /* Specify the verbosity used by loguru to log its info messages including the header
+     382              :     logged when logged::init() is called or on exit. Default is 0 (INFO).
+     383              :     */
+     384              :     LOGURU_EXPORT extern Verbosity g_internal_verbosity;
+     385              : 
+     386              :     // Turn off individual parts of the preamble
+     387              :     LOGURU_EXPORT extern bool      g_preamble_date; // The date field
+     388              :     LOGURU_EXPORT extern bool      g_preamble_time; // The time of the current day
+     389              :     LOGURU_EXPORT extern bool      g_preamble_uptime; // The time since init call
+     390              :     LOGURU_EXPORT extern bool      g_preamble_thread; // The logging thread
+     391              :     LOGURU_EXPORT extern bool      g_preamble_file; // The file from which the log originates from
+     392              :     LOGURU_EXPORT extern bool      g_preamble_verbose; // The verbosity field
+     393              :     LOGURU_EXPORT extern bool      g_preamble_pipe; // The pipe symbol right before the message
+     394              : 
+     395              :     // May not throw!
+     396              :     typedef void (*log_handler_t)(void* user_data, const Message& message);
+     397              :     typedef void (*close_handler_t)(void* user_data);
+     398              :     typedef void (*flush_handler_t)(void* user_data);
+     399              : 
+     400              :     // May throw if that's how you'd like to handle your errors.
+     401              :     typedef void (*fatal_handler_t)(const Message& message);
+     402              : 
+     403              :     // Given a verbosity level, return the level's name or nullptr.
+     404              :     typedef const char* (*verbosity_to_name_t)(Verbosity verbosity);
+     405              : 
+     406              :     // Given a verbosity level name, return the verbosity level or
+     407              :     // Verbosity_INVALID if name is not recognized.
+     408              :     typedef Verbosity(*name_to_verbosity_t)(const char* name);
+     409              : 
+     410              :     struct SignalOptions {
+     411              :         /// Make Loguru try to do unsafe but useful things,
+     412              :         /// like printing a stack trace, when catching signals.
+     413              :         /// This may lead to bad things like deadlocks in certain situations.
+     414              :         bool unsafe_signal_handler = true;
+     415              : 
+     416              :         /// Should Loguru catch SIGABRT ?
+     417              :         bool sigabrt = true;
+     418              : 
+     419              :         /// Should Loguru catch SIGBUS ?
+     420              :         bool sigbus = true;
+     421              : 
+     422              :         /// Should Loguru catch SIGFPE ?
+     423              :         bool sigfpe = true;
+     424              : 
+     425              :         /// Should Loguru catch SIGILL ?
+     426              :         bool sigill = true;
+     427              : 
+     428              :         /// Should Loguru catch SIGINT ?
+     429              :         bool sigint = true;
+     430              : 
+     431              :         /// Should Loguru catch SIGSEGV ?
+     432              :         bool sigsegv = true;
+     433              : 
+     434              :         /// Should Loguru catch SIGTERM ?
+     435              :         bool sigterm = true;
+     436              : 
+     437            2 :         static SignalOptions none()
+     438              :         {
+     439            2 :             SignalOptions options;
+     440            2 :             options.unsafe_signal_handler = false;
+     441            2 :             options.sigabrt = false;
+     442            2 :             options.sigbus = false;
+     443            2 :             options.sigfpe = false;
+     444            2 :             options.sigill = false;
+     445            2 :             options.sigint = false;
+     446            2 :             options.sigsegv = false;
+     447            2 :             options.sigterm = false;
+     448            2 :             return options;
+     449              :         }
+     450              :     };
+     451              : 
+     452              :     // Runtime options passed to loguru::init
+     453              :     struct Options {
+     454              :         // This allows you to use something else instead of "-v" via verbosity_flag.
+     455              :         // Set to nullptr if you don't want Loguru to parse verbosity from the args.
+     456              :         const char* verbosity_flag = "-v";
+     457              : 
+     458              :         // loguru::init will set the name of the calling thread to this.
+     459              :         // If you don't want Loguru to set the name of the main thread,
+     460              :         // set this to nullptr.
+     461              :         // NOTE: on SOME platforms loguru::init will only overwrite the thread name
+     462              :         // if a thread name has not already been set.
+     463              :         // To always set a thread name, use loguru::set_thread_name instead.
+     464              :         const char* main_thread_name = "main thread";
+     465              : 
+     466              :         SignalOptions signal_options;
+     467              :     };
+     468              : 
+     469              :     /*  Should be called from the main thread.
+     470              :         You don't *need* to call this, but if you do you get:
+     471              :             * Signal handlers installed
+     472              :             * Program arguments logged
+     473              :             * Working dir logged
+     474              :             * Optional -v verbosity flag parsed
+     475              :             * Main thread name set to "main thread"
+     476              :             * Explanation of the preamble (date, thread name, etc) logged
+     477              : 
+     478              :         loguru::init() will look for arguments meant for loguru and remove them.
+     479              :         Arguments meant for loguru are:
+     480              :             -v n   Set loguru::g_stderr_verbosity level. Examples:
+     481              :                 -v 3        Show verbosity level 3 and lower.
+     482              :                 -v 0        Only show INFO, WARNING, ERROR, FATAL (default).
+     483              :                 -v INFO     Only show INFO, WARNING, ERROR, FATAL (default).
+     484              :                 -v WARNING  Only show WARNING, ERROR, FATAL.
+     485              :                 -v ERROR    Only show ERROR, FATAL.
+     486              :                 -v FATAL    Only show FATAL.
+     487              :                 -v OFF      Turn off logging to stderr.
+     488              : 
+     489              :         Tip: You can set g_stderr_verbosity before calling loguru::init.
+     490              :         That way you can set the default but have the user override it with the -v flag.
+     491              :         Note that -v does not affect file logging (see loguru::add_file).
+     492              : 
+     493              :         You can you something other than the -v flag by setting the verbosity_flag option.
+     494              :     */
+     495              :     LOGURU_EXPORT
+     496              :         void init(int& argc, char* argv[], const Options& options = {});
+     497              : 
+     498              :     // Will call remove_all_callbacks(). After calling this, logging will still go to stderr.
+     499              :     // You generally don't need to call this.
+     500              :     LOGURU_EXPORT
+     501              :         void shutdown();
+     502              : 
+     503              :     // What ~ will be replaced with, e.g. "/home/your_user_name/"
+     504              :     LOGURU_EXPORT
+     505              :         const char* home_dir();
+     506              : 
+     507              :     /* Returns the name of the app as given in argv[0] but without leading path.
+     508              :        That is, if argv[0] is "../foo/app" this will return "app".
+     509              :     */
+     510              :     LOGURU_EXPORT
+     511              :         const char* argv0_filename();
+     512              : 
+     513              :     // Returns all arguments given to loguru::init(), but escaped with a single space as separator.
+     514              :     LOGURU_EXPORT
+     515              :         const char* arguments();
+     516              : 
+     517              :     // Returns the path to the current working dir when loguru::init() was called.
+     518              :     LOGURU_EXPORT
+     519              :         const char* current_dir();
+     520              : 
+     521              :     // Returns the part of the path after the last / or \ (if any).
+     522              :     LOGURU_EXPORT
+     523              :         const char* filename(const char* path);
+     524              : 
+     525              :     // e.g. "foo/bar/baz.ext" will create the directories "foo/" and "foo/bar/"
+     526              :     LOGURU_EXPORT
+     527              :         bool create_directories(const char* file_path_const);
+     528              : 
+     529              :     // Writes date and time with millisecond precision, e.g. "20151017_161503.123"
+     530              :     LOGURU_EXPORT
+     531              :         void write_date_time(char* buff, unsigned long long buff_size);
+     532              : 
+     533              :     // Helper: thread-safe version strerror
+     534              :     LOGURU_EXPORT
+     535              :         Text errno_as_text();
+     536              : 
+     537              :     /* Given a prefix of e.g. "~/loguru/" this might return
+     538              :        "/home/your_username/loguru/app_name/20151017_161503.123.log"
+     539              : 
+     540              :        where "app_name" is a sanitized version of argv[0].
+     541              :     */
+     542              :     LOGURU_EXPORT
+     543              :         void suggest_log_path(const char* prefix, char* buff, unsigned long long buff_size);
+     544              : 
+     545              :     enum FileMode { Truncate, Append };
+     546              : 
+     547              :     /*  Will log to a file at the given path.
+     548              :         Any logging message with a verbosity lower or equal to
+     549              :         the given verbosity will be included.
+     550              :         The function will create all directories in 'path' if needed.
+     551              :         If path starts with a ~, it will be replaced with loguru::home_dir()
+     552              :         To stop the file logging, just call loguru::remove_callback(path) with the same path.
+     553              :     */
+     554              :     LOGURU_EXPORT
+     555              :         bool add_file(const char* path, FileMode mode, Verbosity verbosity);
+     556              : 
+     557              :     LOGURU_EXPORT
+     558              :         // Send logs to syslog with LOG_USER facility (see next call)
+     559              :         bool add_syslog(const char* app_name, Verbosity verbosity);
+     560              :     LOGURU_EXPORT
+     561              :         // Send logs to syslog with your own choice of facility (LOG_USER, LOG_AUTH, ...)
+     562              :         // see loguru.cpp: syslog_log() for more details.
+     563              :         bool add_syslog(const char* app_name, Verbosity verbosity, int facility);
+     564              : 
+     565              :     /*  Will be called right before abort().
+     566              :         You can for instance use this to print custom error messages, or throw an exception.
+     567              :         Feel free to call LOG:ing function from this, but not FATAL ones! */
+     568              :     LOGURU_EXPORT
+     569              :         void set_fatal_handler(fatal_handler_t handler);
+     570              : 
+     571              :     // Get the current fatal handler, if any. Default value is nullptr.
+     572              :     LOGURU_EXPORT
+     573              :         fatal_handler_t get_fatal_handler();
+     574              : 
+     575              :     /*  Will be called on each log messages with a verbosity less or equal to the given one.
+     576              :         Useful for displaying messages on-screen in a game, for example.
+     577              :         The given on_close is also expected to flush (if desired).
+     578              :     */
+     579              :     LOGURU_EXPORT
+     580              :         void add_callback(
+     581              :             const char* id,
+     582              :             log_handler_t   callback,
+     583              :             void* user_data,
+     584              :             Verbosity       verbosity,
+     585              :             close_handler_t on_close = nullptr,
+     586              :             flush_handler_t on_flush = nullptr);
+     587              : 
+     588              :     /*  Set a callback that returns custom verbosity level names. If callback
+     589              :         is nullptr or returns nullptr, default log names will be used.
+     590              :     */
+     591              :     LOGURU_EXPORT
+     592              :         void set_verbosity_to_name_callback(verbosity_to_name_t callback);
+     593              : 
+     594              :     /*  Set a callback that returns the verbosity level matching a name. The
+     595              :         callback should return Verbosity_INVALID if the name is not
+     596              :         recognized.
+     597              :     */
+     598              :     LOGURU_EXPORT
+     599              :         void set_name_to_verbosity_callback(name_to_verbosity_t callback);
+     600              : 
+     601              :     /*  Get a custom name for a specific verbosity, if one exists, or nullptr. */
+     602              :     LOGURU_EXPORT
+     603              :         const char* get_verbosity_name(Verbosity verbosity);
+     604              : 
+     605              :     /*  Get the verbosity enum value from a custom 4-character level name, if one exists.
+     606              :         If the name does not match a custom level name, Verbosity_INVALID is returned.
+     607              :     */
+     608              :     LOGURU_EXPORT
+     609              :         Verbosity get_verbosity_from_name(const char* name);
+     610              : 
+     611              :     // Returns true iff the callback was found (and removed).
+     612              :     LOGURU_EXPORT
+     613              :         bool remove_callback(const char* id);
+     614              : 
+     615              :     // Shut down all file logging and any other callback hooks installed.
+     616              :     LOGURU_EXPORT
+     617              :         void remove_all_callbacks();
+     618              : 
+     619              :     // Returns the maximum of g_stderr_verbosity and all file/custom outputs.
+     620              :     LOGURU_EXPORT
+     621              :         Verbosity current_verbosity_cutoff();
+     622              : 
+     623              : #if LOGURU_USE_FMTLIB
+     624              :     // Internal functions
+     625              :     LOGURU_EXPORT
+     626              :         void vlog(Verbosity verbosity, const char* file, unsigned line, LOGURU_FORMAT_STRING_TYPE format, fmt::format_args args);
+     627              :     LOGURU_EXPORT
+     628              :         void raw_vlog(Verbosity verbosity, const char* file, unsigned line, LOGURU_FORMAT_STRING_TYPE format, fmt::format_args args);
+     629              : 
+     630              :     // Actual logging function. Use the LOG macro instead of calling this directly.
+     631              :     template <typename... Args>
+     632              :     LOGURU_EXPORT
+     633              :         void log(Verbosity verbosity, const char* file, unsigned line, LOGURU_FORMAT_STRING_TYPE format, const Args &... args)
+     634              :     {
+     635              :         vlog(verbosity, file, line, format, fmt::make_format_args(args...));
+     636              :     }
+     637              : 
+     638              :     // Log without any preamble or indentation.
+     639              :     template <typename... Args>
+     640              :     LOGURU_EXPORT
+     641              :         void raw_log(Verbosity verbosity, const char* file, unsigned line, LOGURU_FORMAT_STRING_TYPE format, const Args &... args)
+     642              :     {
+     643              :         raw_vlog(verbosity, file, line, format, fmt::make_format_args(args...));
+     644              :     }
+     645              : #else // LOGURU_USE_FMTLIB?
+     646              :     // Actual logging function. Use the LOG macro instead of calling this directly.
+     647              :     LOGURU_EXPORT
+     648              :         void log(Verbosity verbosity, const char* file, unsigned line, LOGURU_FORMAT_STRING_TYPE format, ...) LOGURU_PRINTF_LIKE(4, 5);
+     649              : 
+     650              :     // Actual logging function.
+     651              :     LOGURU_EXPORT
+     652              :         void vlog(Verbosity verbosity, const char* file, unsigned line, LOGURU_FORMAT_STRING_TYPE format, va_list) LOGURU_PRINTF_LIKE(4, 0);
+     653              : 
+     654              :     // Log without any preamble or indentation.
+     655              :     LOGURU_EXPORT
+     656              :         void raw_log(Verbosity verbosity, const char* file, unsigned line, LOGURU_FORMAT_STRING_TYPE format, ...) LOGURU_PRINTF_LIKE(4, 5);
+     657              : #endif // !LOGURU_USE_FMTLIB
+     658              : 
+     659              :     // Helper class for LOG_SCOPE_F
+     660              :     class LOGURU_EXPORT LogScopeRAII {
+     661              :     public:
+     662            0 :         LogScopeRAII() : _file(nullptr) {} // No logging
+     663              :         LogScopeRAII(Verbosity verbosity, const char* file, unsigned line, LOGURU_FORMAT_STRING_TYPE format, va_list vlist) LOGURU_PRINTF_LIKE(5, 0);
+     664              :         LogScopeRAII(Verbosity verbosity, const char* file, unsigned line, LOGURU_FORMAT_STRING_TYPE format, ...) LOGURU_PRINTF_LIKE(5, 6);
+     665              :         ~LogScopeRAII();
+     666              : 
+     667              :         void Init(LOGURU_FORMAT_STRING_TYPE format, va_list vlist) LOGURU_PRINTF_LIKE(2, 0);
+     668              : 
+     669              : #if defined(_MSC_VER) && _MSC_VER > 1800
+     670              :         // older MSVC default move ctors close the scope on move. See
+     671              :         // issue #43
+     672              :         LogScopeRAII(LogScopeRAII&& other)
+     673              :             : _verbosity(other._verbosity)
+     674              :             , _file(other._file)
+     675              :             , _line(other._line)
+     676              :             , _indent_stderr(other._indent_stderr)
+     677              :             , _start_time_ns(other._start_time_ns)
+     678              :         {
+     679              :             // Make sure the tmp object's destruction doesn't close the scope:
+     680              :             other._file = nullptr;
+     681              : 
+     682              :             for (unsigned int i = 0; i < LOGURU_SCOPE_TEXT_SIZE; ++i) {
+     683              :                 _name[i] = other._name[i];
+     684              :             }
+     685              :         }
+     686              : #else
+     687              :         LogScopeRAII(LogScopeRAII&&) = default;
+     688              : #endif
+     689              : 
+     690              :     private:
+     691              :         LogScopeRAII(const LogScopeRAII&) = delete;
+     692              :         LogScopeRAII& operator=(const LogScopeRAII&) = delete;
+     693              :         void operator=(LogScopeRAII&&) = delete;
+     694              : 
+     695              :         Verbosity   _verbosity;
+     696              :         const char* _file; // Set to null if we are disabled due to verbosity
+     697              :         unsigned    _line;
+     698              :         bool        _indent_stderr; // Did we?
+     699              :         long long   _start_time_ns;
+     700              :         char        _name[LOGURU_SCOPE_TEXT_SIZE];
+     701              :     };
+     702              : 
+     703              :     // Marked as 'noreturn' for the benefit of the static analyzer and optimizer.
+     704              :     // stack_trace_skip is the number of extrace stack frames to skip above log_and_abort.
+     705              : #if LOGURU_USE_FMTLIB
+     706              :     LOGURU_EXPORT
+     707              :         LOGURU_NORETURN void vlog_and_abort(int stack_trace_skip, const char* expr, const char* file, unsigned line, LOGURU_FORMAT_STRING_TYPE format, fmt::format_args);
+     708              :     template <typename... Args>
+     709              :     LOGURU_EXPORT
+     710              :         LOGURU_NORETURN void log_and_abort(int stack_trace_skip, const char* expr, const char* file, unsigned line, LOGURU_FORMAT_STRING_TYPE format, const Args&... args)
+     711              :     {
+     712              :         vlog_and_abort(stack_trace_skip, expr, file, line, format, fmt::make_format_args(args...));
+     713              :     }
+     714              : #else
+     715              :     LOGURU_EXPORT
+     716              :         LOGURU_NORETURN void log_and_abort(int stack_trace_skip, const char* expr, const char* file, unsigned line, LOGURU_FORMAT_STRING_TYPE format, ...) LOGURU_PRINTF_LIKE(5, 6);
+     717              : #endif
+     718              :     LOGURU_EXPORT
+     719              :         LOGURU_NORETURN void log_and_abort(int stack_trace_skip, const char* expr, const char* file, unsigned line);
+     720              : 
+     721              :     // Flush output to stderr and files.
+     722              :     // If g_flush_interval_ms is set to non-zero, this will be called automatically this often.
+     723              :     // If not set, you do not need to call this at all.
+     724              :     LOGURU_EXPORT
+     725              :         void flush();
+     726              : 
+     727            0 :     template<class T> inline Text format_value(const T&) { return textprintf("N/A"); }
+     728              :     template<>        inline Text format_value(const char& v) { return textprintf(LOGURU_FMT(c), v); }
+     729            0 :     template<>        inline Text format_value(const int& v) { return textprintf(LOGURU_FMT(d), v); }
+     730              :     template<>        inline Text format_value(const float& v) { return textprintf(LOGURU_FMT(f), v); }
+     731              :     template<>        inline Text format_value(const double& v) { return textprintf(LOGURU_FMT(f), v); }
+     732              : 
+     733              : #if LOGURU_USE_FMTLIB
+     734              :     template<>        inline Text format_value(const unsigned int& v) { return textprintf(LOGURU_FMT(d), v); }
+     735              :     template<>        inline Text format_value(const long& v) { return textprintf(LOGURU_FMT(d), v); }
+     736              :     template<>        inline Text format_value(const unsigned long& v) { return textprintf(LOGURU_FMT(d), v); }
+     737              :     template<>        inline Text format_value(const long long& v) { return textprintf(LOGURU_FMT(d), v); }
+     738              :     template<>        inline Text format_value(const unsigned long long& v) { return textprintf(LOGURU_FMT(d), v); }
+     739              : #else
+     740            0 :     template<>        inline Text format_value(const unsigned int& v) { return textprintf(LOGURU_FMT(u), v); }
+     741              :     template<>        inline Text format_value(const long& v) { return textprintf(LOGURU_FMT(lu), v); }
+     742              :     template<>        inline Text format_value(const unsigned long& v) { return textprintf(LOGURU_FMT(ld), v); }
+     743              :     template<>        inline Text format_value(const long long& v) { return textprintf(LOGURU_FMT(llu), v); }
+     744            0 :     template<>        inline Text format_value(const unsigned long long& v) { return textprintf(LOGURU_FMT(lld), v); }
+     745              : #endif
+     746              : 
+     747              :     /* Thread names can be set for the benefit of readable logs.
+     748              :        If you do not set the thread name, a hex id will be shown instead.
+     749              :        These thread names may or may not be the same as the system thread names,
+     750              :        depending on the system.
+     751              :        Try to limit the thread name to 15 characters or less. */
+     752              :     LOGURU_EXPORT
+     753              :         void set_thread_name(const char* name);
+     754              : 
+     755              :     /* Returns the thread name for this thread.
+     756              :        On most *nix systems this will return the system thread name (settable from both within and without Loguru).
+     757              :        On other systems it will return whatever you set in `set_thread_name()`;
+     758              :        If no thread name is set, this will return a hexadecimal thread id.
+     759              :        `length` should be the number of bytes available in the buffer.
+     760              :        17 is a good number for length.
+     761              :        `right_align_hex_id` means any hexadecimal thread id will be written to the end of buffer.
+     762              :     */
+     763              :     LOGURU_EXPORT
+     764              :         void get_thread_name(char* buffer, unsigned long long length, bool right_align_hex_id);
+     765              : 
+     766              :     /* Generates a readable stacktrace as a string.
+     767              :        'skip' specifies how many stack frames to skip.
+     768              :        For instance, the default skip (1) means:
+     769              :        don't include the call to loguru::stacktrace in the stack trace. */
+     770              :     LOGURU_EXPORT
+     771              :         Text stacktrace(int skip = 1);
+     772              : 
+     773              :     /*  Add a string to be replaced with something else in the stack output.
+     774              : 
+     775              :         For instance, instead of having a stack trace look like this:
+     776              :             0x41f541 some_function(std::basic_ofstream<char, std::char_traits<char> >&)
+     777              :         You can clean it up with:
+     778              :             auto verbose_type_name = loguru::demangle(typeid(std::ofstream).name());
+     779              :             loguru::add_stack_cleanup(verbose_type_name.c_str(); "std::ofstream");
+     780              :         So the next time you will instead see:
+     781              :             0x41f541 some_function(std::ofstream&)
+     782              : 
+     783              :         `replace_with_this` must be shorter than `find_this`.
+     784              :     */
+     785              :     LOGURU_EXPORT
+     786              :         void add_stack_cleanup(const char* find_this, const char* replace_with_this);
+     787              : 
+     788              :     // Example: demangle(typeid(std::ofstream).name()) -> "std::basic_ofstream<char, std::char_traits<char> >"
+     789              :     LOGURU_EXPORT
+     790              :         Text demangle(const char* name);
+     791              : 
+     792              :     // ------------------------------------------------------------------------
+     793              :     /*
+     794              :     Not all terminals support colors, but if they do, and g_colorlogtostderr
+     795              :     is set, Loguru will write them to stderr to make errors in red, etc.
+     796              : 
+     797              :     You also have the option to manually use them, via the function below.
+     798              : 
+     799              :     Note, however, that if you do, the color codes could end up in your logfile!
+     800              : 
+     801              :     This means if you intend to use them functions you should either:
+     802              :         * Use them on the stderr/stdout directly (bypass Loguru).
+     803              :         * Don't add file outputs to Loguru.
+     804              :         * Expect some \e[1m things in your logfile.
+     805              : 
+     806              :     Usage:
+     807              :         printf("%sRed%sGreen%sBold green%sClear again\n",
+     808              :                loguru::terminal_red(), loguru::terminal_green(),
+     809              :                loguru::terminal_bold(), loguru::terminal_reset());
+     810              : 
+     811              :     If the terminal at hand does not support colors the above output
+     812              :     will just not have funky \e[1m things showing.
+     813              :     */
+     814              : 
+     815              :     // Do the output terminal support colors?
+     816              :     LOGURU_EXPORT
+     817              :         bool terminal_has_color();
+     818              : 
+     819              :     // Colors
+     820              :     LOGURU_EXPORT const char* terminal_black();
+     821              :     LOGURU_EXPORT const char* terminal_red();
+     822              :     LOGURU_EXPORT const char* terminal_green();
+     823              :     LOGURU_EXPORT const char* terminal_yellow();
+     824              :     LOGURU_EXPORT const char* terminal_blue();
+     825              :     LOGURU_EXPORT const char* terminal_purple();
+     826              :     LOGURU_EXPORT const char* terminal_cyan();
+     827              :     LOGURU_EXPORT const char* terminal_light_gray();
+     828              :     LOGURU_EXPORT const char* terminal_light_red();
+     829              :     LOGURU_EXPORT const char* terminal_white();
+     830              : 
+     831              :     // Formating
+     832              :     LOGURU_EXPORT const char* terminal_bold();
+     833              :     LOGURU_EXPORT const char* terminal_underline();
+     834              : 
+     835              :     // You should end each line with this!
+     836              :     LOGURU_EXPORT const char* terminal_reset();
+     837              : 
+     838              :     // --------------------------------------------------------------------
+     839              :     // Error context related:
+     840              : 
+     841              :     struct StringStream;
+     842              : 
+     843              :     // Use this in your EcEntryBase::print_value overload.
+     844              :     LOGURU_EXPORT
+     845              :         void stream_print(StringStream& out_string_stream, const char* text);
+     846              : 
+     847              :     class LOGURU_EXPORT EcEntryBase {
+     848              :     public:
+     849              :         EcEntryBase(const char* file, unsigned line, const char* descr);
+     850              :         ~EcEntryBase();
+     851              :         EcEntryBase(const EcEntryBase&) = delete;
+     852              :         EcEntryBase(EcEntryBase&&) = delete;
+     853              :         EcEntryBase& operator=(const EcEntryBase&) = delete;
+     854              :         EcEntryBase& operator=(EcEntryBase&&) = delete;
+     855              : 
+     856              :         virtual void print_value(StringStream& out_string_stream) const = 0;
+     857              : 
+     858              :         EcEntryBase* previous() const { return _previous; }
+     859              : 
+     860              :         // private:
+     861              :         const char* _file;
+     862              :         unsigned     _line;
+     863              :         const char* _descr;
+     864              :         EcEntryBase* _previous;
+     865              :     };
+     866              : 
+     867              :     template<typename T>
+     868              :     class EcEntryData : public EcEntryBase {
+     869              :     public:
+     870              :         using Printer = Text(*)(T data);
+     871              : 
+     872              :         EcEntryData(const char* file, unsigned line, const char* descr, T data, Printer&& printer)
+     873              :             : EcEntryBase(file, line, descr), _data(data), _printer(printer)
+     874              :         {
+     875              :         }
+     876              : 
+     877              :         virtual void print_value(StringStream& out_string_stream) const override
+     878              :         {
+     879              :             const auto str = _printer(_data);
+     880              :             stream_print(out_string_stream, str.c_str());
+     881              :         }
+     882              : 
+     883              :     private:
+     884              :         T       _data;
+     885              :         Printer _printer;
+     886              :     };
+     887              : 
+     888              :     // template<typename Printer>
+     889              :     // class EcEntryLambda : public EcEntryBase
+     890              :     // {
+     891              :     // public:
+     892              :     //  EcEntryLambda(const char* file, unsigned line, const char* descr, Printer&& printer)
+     893              :     //          : EcEntryBase(file, line, descr), _printer(std::move(printer)) {}
+     894              : 
+     895              :     //  virtual void print_value(StringStream& out_string_stream) const override
+     896              :     //  {
+     897              :     //          const auto str = _printer();
+     898              :     //          stream_print(out_string_stream, str.c_str());
+     899              :     //  }
+     900              : 
+     901              :     // private:
+     902              :     //  Printer _printer;
+     903              :     // };
+     904              : 
+     905              :     // template<typename Printer>
+     906              :     // EcEntryLambda<Printer> make_ec_entry_lambda(const char* file, unsigned line, const char* descr, Printer&& printer)
+     907              :     // {
+     908              :     //  return {file, line, descr, std::move(printer)};
+     909              :     // }
+     910              : 
+     911              :     template <class T>
+     912              :     struct decay_char_array { using type = T; };
+     913              : 
+     914              :     template <unsigned long long  N>
+     915              :     struct decay_char_array<const char(&)[N]> { using type = const char*; };
+     916              : 
+     917              :     template <class T>
+     918              :     struct make_const_ptr { using type = T; };
+     919              : 
+     920              :     template <class T>
+     921              :     struct make_const_ptr<T*> { using type = const T*; };
+     922              : 
+     923              :     template <class T>
+     924              :     struct make_ec_type { using type = typename make_const_ptr<typename decay_char_array<T>::type>::type; };
+     925              : 
+     926              :     /*  A stack trace gives you the names of the function at the point of a crash.
+     927              :         With ERROR_CONTEXT, you can also get the values of select local variables.
+     928              :         Usage:
+     929              : 
+     930              :         void process_customers(const std::string& filename)
+     931              :         {
+     932              :             ERROR_CONTEXT("Processing file", filename.c_str());
+     933              :             for (int customer_index : ...)
+     934              :             {
+     935              :                 ERROR_CONTEXT("Customer index", customer_index);
+     936              :                 ...
+     937              :             }
+     938              :         }
+     939              : 
+     940              :         The context is in effect during the scope of the ERROR_CONTEXT.
+     941              :         Use loguru::get_error_context() to get the contents of the active error contexts.
+     942              : 
+     943              :         Example result:
+     944              : 
+     945              :         ------------------------------------------------
+     946              :         [ErrorContext]                main.cpp:416   Processing file:    "customers.json"
+     947              :         [ErrorContext]                main.cpp:417   Customer index:     42
+     948              :         ------------------------------------------------
+     949              : 
+     950              :         Error contexts are printed automatically on crashes, and only on crashes.
+     951              :         This makes them much faster than logging the value of a variable.
+     952              :     */
+     953              : #define ERROR_CONTEXT(descr, data)                                             \
+     954              :                 const loguru::EcEntryData<loguru::make_ec_type<decltype(data)>::type>      \
+     955              :                         LOGURU_ANONYMOUS_VARIABLE(error_context_scope_)(                       \
+     956              :                                 __FILE__, __LINE__, descr, data,                                   \
+     957              :                                 static_cast<loguru::EcEntryData<loguru::make_ec_type<decltype(data)>::type>::Printer>(loguru::ec_to_text) ) // For better error messages
+     958              : 
+     959              :     /*
+     960              :         #define ERROR_CONTEXT(descr, data)                                 \
+     961              :             const auto LOGURU_ANONYMOUS_VARIABLE(error_context_scope_)(    \
+     962              :                 loguru::make_ec_entry_lambda(__FILE__, __LINE__, descr,    \
+     963              :                     [=](){ return loguru::ec_to_text(data); }))
+     964              :     */
+     965              : 
+     966              :     using EcHandle = const EcEntryBase*;
+     967              : 
+     968              :     /*
+     969              :         Get a light-weight handle to the error context stack on this thread.
+     970              :         The handle is valid as long as the current thread has no changes to its error context stack.
+     971              :         You can pass the handle to loguru::get_error_context on another thread.
+     972              :         This can be very useful for when you have a parent thread spawning several working threads,
+     973              :         and you want the error context of the parent thread to get printed (too) when there is an
+     974              :         error on the child thread. You can accomplish this thusly:
+     975              : 
+     976              :         void foo(const char* parameter)
+     977              :         {
+     978              :             ERROR_CONTEXT("parameter", parameter)
+     979              :             const auto parent_ec_handle = loguru::get_thread_ec_handle();
+     980              : 
+     981              :             std::thread([=]{
+     982              :                 loguru::set_thread_name("child thread");
+     983              :                 ERROR_CONTEXT("parent context", parent_ec_handle);
+     984              :                 dangerous_code();
+     985              :             }.join();
+     986              :         }
+     987              : 
+     988              :     */
+     989              :     LOGURU_EXPORT
+     990              :         EcHandle get_thread_ec_handle();
+     991              : 
+     992              :     // Get a string describing the current stack of error context. Empty string if there is none.
+     993              :     LOGURU_EXPORT
+     994              :         Text get_error_context();
+     995              : 
+     996              :     // Get a string describing the error context of the given thread handle.
+     997              :     LOGURU_EXPORT
+     998              :         Text get_error_context_for(EcHandle ec_handle);
+     999              : 
+    1000              :     // ------------------------------------------------------------------------
+    1001              : 
+    1002              :     LOGURU_EXPORT Text ec_to_text(const char* data);
+    1003              :     LOGURU_EXPORT Text ec_to_text(char data);
+    1004              :     LOGURU_EXPORT Text ec_to_text(int data);
+    1005              :     LOGURU_EXPORT Text ec_to_text(unsigned int data);
+    1006              :     LOGURU_EXPORT Text ec_to_text(long data);
+    1007              :     LOGURU_EXPORT Text ec_to_text(unsigned long data);
+    1008              :     LOGURU_EXPORT Text ec_to_text(long long data);
+    1009              :     LOGURU_EXPORT Text ec_to_text(unsigned long long data);
+    1010              :     LOGURU_EXPORT Text ec_to_text(float data);
+    1011              :     LOGURU_EXPORT Text ec_to_text(double data);
+    1012              :     LOGURU_EXPORT Text ec_to_text(long double data);
+    1013              :     LOGURU_EXPORT Text ec_to_text(EcHandle);
+    1014              : 
+    1015              :     /*
+    1016              :     You can add ERROR_CONTEXT support for your own types by overloading ec_to_text. Here's how:
+    1017              : 
+    1018              :     some.hpp:
+    1019              :         namespace loguru {
+    1020              :             Text ec_to_text(MySmallType data)
+    1021              :             Text ec_to_text(const MyBigType* data)
+    1022              :         } // namespace loguru
+    1023              : 
+    1024              :     some.cpp:
+    1025              :         namespace loguru {
+    1026              :             Text ec_to_text(MySmallType small_value)
+    1027              :             {
+    1028              :                 // Called only when needed, i.e. on a crash.
+    1029              :                 std::string str = small_value.as_string(); // Format 'small_value' here somehow.
+    1030              :                 return Text{STRDUP(str.c_str())};
+    1031              :             }
+    1032              : 
+    1033              :             Text ec_to_text(const MyBigType* big_value)
+    1034              :             {
+    1035              :                 // Called only when needed, i.e. on a crash.
+    1036              :                 std::string str = big_value->as_string(); // Format 'big_value' here somehow.
+    1037              :                 return Text{STRDUP(str.c_str())};
+    1038              :             }
+    1039              :         } // namespace loguru
+    1040              : 
+    1041              :     Any file that include some.hpp:
+    1042              :         void foo(MySmallType small, const MyBigType& big)
+    1043              :         {
+    1044              :             ERROR_CONTEXT("Small", small); // Copy ´small` by value.
+    1045              :             ERROR_CONTEXT("Big",   &big);  // `big` should not change during this scope!
+    1046              :             ....
+    1047              :         }
+    1048              :     */
+    1049              : } // namespace loguru
+    1050              : 
+    1051              : LOGURU_ANONYMOUS_NAMESPACE_END
+    1052              : 
+    1053              : // --------------------------------------------------------------------
+    1054              : // Logging macros
+    1055              : 
+    1056              : // LOG_F(2, "Only logged if verbosity is 2 or higher: %d", some_number);
+    1057              : #define VLOG_F(verbosity, ...)                                                                     \
+    1058              :         ((verbosity) > loguru::current_verbosity_cutoff()) ? (void)0                                   \
+    1059              :                                                                           : loguru::log(verbosity, __FILE__, __LINE__, __VA_ARGS__)
+    1060              : 
+    1061              : // LOG_F(INFO, "Foo: %d", some_number);
+    1062              : #define LOG_F(verbosity_name, ...) VLOG_F(loguru::Verbosity_ ## verbosity_name, __VA_ARGS__)
+    1063              : 
+    1064              : #define VLOG_IF_F(verbosity, cond, ...)                                                            \
+    1065              :         ((verbosity) > loguru::current_verbosity_cutoff() || (cond) == false)                          \
+    1066              :                 ? (void)0                                                                                  \
+    1067              :                 : loguru::log(verbosity, __FILE__, __LINE__, __VA_ARGS__)
+    1068              : 
+    1069              : #define LOG_IF_F(verbosity_name, cond, ...)                                                        \
+    1070              :         VLOG_IF_F(loguru::Verbosity_ ## verbosity_name, cond, __VA_ARGS__)
+    1071              : 
+    1072              : #define VLOG_SCOPE_F(verbosity, ...)                                                               \
+    1073              :         loguru::LogScopeRAII LOGURU_ANONYMOUS_VARIABLE(error_context_RAII_) =                          \
+    1074              :         ((verbosity) > loguru::current_verbosity_cutoff()) ? loguru::LogScopeRAII() :                  \
+    1075              :         loguru::LogScopeRAII(verbosity, __FILE__, __LINE__, __VA_ARGS__)
+    1076              : 
+    1077              : // Raw logging - no preamble, no indentation. Slightly faster than full logging.
+    1078              : #define RAW_VLOG_F(verbosity, ...)                                                                 \
+    1079              :         ((verbosity) > loguru::current_verbosity_cutoff()) ? (void)0                                   \
+    1080              :                                                                           : loguru::raw_log(verbosity, __FILE__, __LINE__, __VA_ARGS__)
+    1081              : 
+    1082              : #define RAW_LOG_F(verbosity_name, ...) RAW_VLOG_F(loguru::Verbosity_ ## verbosity_name, __VA_ARGS__)
+    1083              : 
+    1084              : // Use to book-end a scope. Affects logging on all threads.
+    1085              : #define LOG_SCOPE_F(verbosity_name, ...)                                                           \
+    1086              :         VLOG_SCOPE_F(loguru::Verbosity_ ## verbosity_name, __VA_ARGS__)
+    1087              : 
+    1088              : #define LOG_SCOPE_FUNCTION(verbosity_name) LOG_SCOPE_F(verbosity_name, __func__)
+    1089              : 
+    1090              : // -----------------------------------------------
+    1091              : // ABORT_F macro. Usage:  ABORT_F("Cause of error: %s", error_str);
+    1092              : 
+    1093              : // Message is optional
+    1094              : #define ABORT_F(...) loguru::log_and_abort(0, "ABORT: ", __FILE__, __LINE__, __VA_ARGS__)
+    1095              : 
+    1096              : // --------------------------------------------------------------------
+    1097              : // CHECK_F macros:
+    1098              : 
+    1099              : #define CHECK_WITH_INFO_F(test, info, ...)                                                         \
+    1100              :         LOGURU_PREDICT_TRUE((test) == true) ? (void)0 : loguru::log_and_abort(0, "CHECK FAILED:  " info "  ", __FILE__,      \
+    1101              :                                                                                                            __LINE__, ##__VA_ARGS__)
+    1102              : 
+    1103              : /* Checked at runtime too. Will print error, then call fatal_handler (if any), then 'abort'.
+    1104              :    Note that the test must be boolean.
+    1105              :    CHECK_F(ptr); will not compile, but CHECK_F(ptr != nullptr); will. */
+    1106              : #define CHECK_F(test, ...) CHECK_WITH_INFO_F(test, #test, ##__VA_ARGS__)
+    1107              : 
+    1108              : #define CHECK_NOTNULL_F(x, ...) CHECK_WITH_INFO_F((x) != nullptr, #x " != nullptr", ##__VA_ARGS__)
+    1109              : 
+    1110              : #define CHECK_OP_F(expr_left, expr_right, op, ...)                                                 \
+    1111              :         do                                                                                             \
+    1112              :         {                                                                                              \
+    1113              :                 auto val_left = expr_left;                                                                 \
+    1114              :                 auto val_right = expr_right;                                                               \
+    1115              :                 if (! LOGURU_PREDICT_TRUE(val_left op val_right))                                          \
+    1116              :                 {                                                                                          \
+    1117              :                         auto str_left = loguru::format_value(val_left);                                        \
+    1118              :                         auto str_right = loguru::format_value(val_right);                                      \
+    1119              :                         auto fail_info = loguru::textprintf("CHECK FAILED:  " LOGURU_FMT(s) " " LOGURU_FMT(s) " " LOGURU_FMT(s) "  (" LOGURU_FMT(s) " " LOGURU_FMT(s) " " LOGURU_FMT(s) ")  ",           \
+    1120              :                                 #expr_left, #op, #expr_right, str_left.c_str(), #op, str_right.c_str());           \
+    1121              :                         auto user_msg = loguru::textprintf(__VA_ARGS__);                                       \
+    1122              :                         loguru::log_and_abort(0, fail_info.c_str(), __FILE__, __LINE__,                        \
+    1123              :                                               LOGURU_FMT(s), user_msg.c_str());                                         \
+    1124              :                 }                                                                                          \
+    1125              :         } while (false)
+    1126              : 
+    1127              : #ifndef LOGURU_DEBUG_LOGGING
+    1128              : #ifndef NDEBUG
+    1129              : #define LOGURU_DEBUG_LOGGING 1
+    1130              : #else
+    1131              : #define LOGURU_DEBUG_LOGGING 0
+    1132              : #endif
+    1133              : #endif
+    1134              : 
+    1135              : #if LOGURU_DEBUG_LOGGING
+    1136              :    // Debug logging enabled:
+    1137              : #define DLOG_F(verbosity_name, ...)     LOG_F(verbosity_name, __VA_ARGS__)
+    1138              : #define DVLOG_F(verbosity, ...)         VLOG_F(verbosity, __VA_ARGS__)
+    1139              : #define DLOG_IF_F(verbosity_name, ...)  LOG_IF_F(verbosity_name, __VA_ARGS__)
+    1140              : #define DVLOG_IF_F(verbosity, ...)      VLOG_IF_F(verbosity, __VA_ARGS__)
+    1141              : #define DRAW_LOG_F(verbosity_name, ...) RAW_LOG_F(verbosity_name, __VA_ARGS__)
+    1142              : #define DRAW_VLOG_F(verbosity, ...)     RAW_VLOG_F(verbosity, __VA_ARGS__)
+    1143              : #else
+    1144              :    // Debug logging disabled:
+    1145              : #define DLOG_F(verbosity_name, ...)
+    1146              : #define DVLOG_F(verbosity, ...)
+    1147              : #define DLOG_IF_F(verbosity_name, ...)
+    1148              : #define DVLOG_IF_F(verbosity, ...)
+    1149              : #define DRAW_LOG_F(verbosity_name, ...)
+    1150              : #define DRAW_VLOG_F(verbosity, ...)
+    1151              : #endif
+    1152              : 
+    1153              : #define CHECK_EQ_F(a, b, ...) CHECK_OP_F(a, b, ==, ##__VA_ARGS__)
+    1154              : #define CHECK_NE_F(a, b, ...) CHECK_OP_F(a, b, !=, ##__VA_ARGS__)
+    1155              : #define CHECK_LT_F(a, b, ...) CHECK_OP_F(a, b, < , ##__VA_ARGS__)
+    1156              : #define CHECK_GT_F(a, b, ...) CHECK_OP_F(a, b, > , ##__VA_ARGS__)
+    1157              : #define CHECK_LE_F(a, b, ...) CHECK_OP_F(a, b, <=, ##__VA_ARGS__)
+    1158              : #define CHECK_GE_F(a, b, ...) CHECK_OP_F(a, b, >=, ##__VA_ARGS__)
+    1159              : 
+    1160              : #ifndef LOGURU_DEBUG_CHECKS
+    1161              : #ifndef NDEBUG
+    1162              : #define LOGURU_DEBUG_CHECKS 1
+    1163              : #else
+    1164              : #define LOGURU_DEBUG_CHECKS 0
+    1165              : #endif
+    1166              : #endif
+    1167              : 
+    1168              : #if LOGURU_DEBUG_CHECKS
+    1169              :     // Debug checks enabled:
+    1170              : #define DCHECK_F(test, ...)             CHECK_F(test, ##__VA_ARGS__)
+    1171              : #define DCHECK_NOTNULL_F(x, ...)        CHECK_NOTNULL_F(x, ##__VA_ARGS__)
+    1172              : #define DCHECK_EQ_F(a, b, ...)          CHECK_EQ_F(a, b, ##__VA_ARGS__)
+    1173              : #define DCHECK_NE_F(a, b, ...)          CHECK_NE_F(a, b, ##__VA_ARGS__)
+    1174              : #define DCHECK_LT_F(a, b, ...)          CHECK_LT_F(a, b, ##__VA_ARGS__)
+    1175              : #define DCHECK_LE_F(a, b, ...)          CHECK_LE_F(a, b, ##__VA_ARGS__)
+    1176              : #define DCHECK_GT_F(a, b, ...)          CHECK_GT_F(a, b, ##__VA_ARGS__)
+    1177              : #define DCHECK_GE_F(a, b, ...)          CHECK_GE_F(a, b, ##__VA_ARGS__)
+    1178              : #else
+    1179              :     // Debug checks disabled:
+    1180              : #define DCHECK_F(test, ...)
+    1181              : #define DCHECK_NOTNULL_F(x, ...)
+    1182              : #define DCHECK_EQ_F(a, b, ...)
+    1183              : #define DCHECK_NE_F(a, b, ...)
+    1184              : #define DCHECK_LT_F(a, b, ...)
+    1185              : #define DCHECK_LE_F(a, b, ...)
+    1186              : #define DCHECK_GT_F(a, b, ...)
+    1187              : #define DCHECK_GE_F(a, b, ...)
+    1188              : #endif // NDEBUG
+    1189              : 
+    1190              : 
+    1191              : #if LOGURU_REDEFINE_ASSERT
+    1192              : #undef assert
+    1193              : #ifndef NDEBUG
+    1194              :     // Debug:
+    1195              : #define assert(test) CHECK_WITH_INFO_F(!!(test), #test) // HACK
+    1196              : #else
+    1197              : #define assert(test)
+    1198              : #endif
+    1199              : #endif // LOGURU_REDEFINE_ASSERT
+    1200              : 
+    1201              : #endif // LOGURU_HAS_DECLARED_FORMAT_HEADER
+    1202              : 
+    1203              : // ----------------------------------------------------------------------------
+    1204              : // .dP"Y8 888888 88""Yb 888888    db    8b    d8 .dP"Y8
+    1205              : // `Ybo."   88   88__dP 88__     dPYb   88b  d88 `Ybo."
+    1206              : // o.`Y8b   88   88"Yb  88""    dP__Yb  88YbdP88 o.`Y8b
+    1207              : // 8bodP'   88   88  Yb 888888 dP""""Yb 88 YY 88 8bodP'
+    1208              : 
+    1209              : #if LOGURU_WITH_STREAMS
+    1210              : #ifndef LOGURU_HAS_DECLARED_STREAMS_HEADER
+    1211              : #define LOGURU_HAS_DECLARED_STREAMS_HEADER
+    1212              : 
+    1213              : /* This file extends loguru to enable std::stream-style logging, a la Glog.
+    1214              :    It's an optional feature behind the LOGURU_WITH_STREAMS settings
+    1215              :    because including it everywhere will slow down compilation times.
+    1216              : */
+    1217              : 
+    1218              : #include <cstdarg>
+    1219              : #include <sstream> // Adds about 38 kLoC on clang.
+    1220              : #include <string>
+    1221              : 
+    1222              : LOGURU_ANONYMOUS_NAMESPACE_BEGIN
+    1223              : 
+    1224              : namespace loguru {
+    1225              :     // Like sprintf, but returns the formated text.
+    1226              :     LOGURU_EXPORT
+    1227              :         std::string strprintf(LOGURU_FORMAT_STRING_TYPE format, ...) LOGURU_PRINTF_LIKE(1, 2);
+    1228              : 
+    1229              :     // Like vsprintf, but returns the formated text.
+    1230              :     LOGURU_EXPORT
+    1231              :         std::string vstrprintf(LOGURU_FORMAT_STRING_TYPE format, va_list) LOGURU_PRINTF_LIKE(1, 0);
+    1232              : 
+    1233              :     class LOGURU_EXPORT StreamLogger {
+    1234              :     public:
+    1235              :         StreamLogger(Verbosity verbosity, const char* file, unsigned line) : _verbosity(verbosity), _file(file), _line(line) {}
+    1236              :         ~StreamLogger() noexcept(false);
+    1237              : 
+    1238              :         template<typename T>
+    1239              :         StreamLogger& operator<<(const T& t)
+    1240              :         {
+    1241              :             _ss << t;
+    1242              :             return *this;
+    1243              :         }
+    1244              : 
+    1245              :         // std::endl and other iomanip:s.
+    1246              :         StreamLogger& operator<<(std::ostream& (*f)(std::ostream&))
+    1247              :         {
+    1248              :             f(_ss);
+    1249              :             return *this;
+    1250              :         }
+    1251              : 
+    1252              :     private:
+    1253              :         Verbosity   _verbosity;
+    1254              :         const char* _file;
+    1255              :         unsigned    _line;
+    1256              :         std::ostringstream _ss;
+    1257              :     };
+    1258              : 
+    1259              :     class LOGURU_EXPORT AbortLogger {
+    1260              :     public:
+    1261              :         AbortLogger(const char* expr, const char* file, unsigned line) : _expr(expr), _file(file), _line(line) {}
+    1262              :         LOGURU_NORETURN ~AbortLogger() noexcept(false);
+    1263              : 
+    1264              :         template<typename T>
+    1265              :         AbortLogger& operator<<(const T& t)
+    1266              :         {
+    1267              :             _ss << t;
+    1268              :             return *this;
+    1269              :         }
+    1270              : 
+    1271              :         // std::endl and other iomanip:s.
+    1272              :         AbortLogger& operator<<(std::ostream& (*f)(std::ostream&))
+    1273              :         {
+    1274              :             f(_ss);
+    1275              :             return *this;
+    1276              :         }
+    1277              : 
+    1278              :     private:
+    1279              :         const char* _expr;
+    1280              :         const char* _file;
+    1281              :         unsigned           _line;
+    1282              :         std::ostringstream _ss;
+    1283              :     };
+    1284              : 
+    1285              :     class LOGURU_EXPORT Voidify {
+    1286              :     public:
+    1287              :         Voidify() {}
+    1288              :         // This has to be an operator with a precedence lower than << but higher than ?:
+    1289              :         void operator&(const StreamLogger&) {}
+    1290              :         void operator&(const AbortLogger&) {}
+    1291              :     };
+    1292              : 
+    1293              :     /*  Helper functions for CHECK_OP_S macro.
+    1294              :         GLOG trick: The (int, int) specialization works around the issue that the compiler
+    1295              :         will not instantiate the template version of the function on values of unnamed enum type. */
+    1296              : #define DEFINE_CHECK_OP_IMPL(name, op)                                                             \
+    1297              :                 template <typename T1, typename T2>                                                            \
+    1298              :                 inline std::string* name(const char* expr, const T1& v1, const char* op_str, const T2& v2)     \
+    1299              :                 {                                                                                              \
+    1300              :                         if (LOGURU_PREDICT_TRUE(v1 op v2)) { return NULL; }                                        \
+    1301              :                         std::ostringstream ss;                                                                     \
+    1302              :                         ss << "CHECK FAILED:  " << expr << "  (" << v1 << " " << op_str << " " << v2 << ")  ";     \
+    1303              :                         return new std::string(ss.str());                                                          \
+    1304              :                 }                                                                                              \
+    1305              :                 inline std::string* name(const char* expr, int v1, const char* op_str, int v2)                 \
+    1306              :                 {                                                                                              \
+    1307              :                         return name<int, int>(expr, v1, op_str, v2);                                               \
+    1308              :                 }
+    1309              : 
+    1310              :     DEFINE_CHECK_OP_IMPL(check_EQ_impl, == )
+    1311              :         DEFINE_CHECK_OP_IMPL(check_NE_impl, != )
+    1312              :         DEFINE_CHECK_OP_IMPL(check_LE_impl, <= )
+    1313              :         DEFINE_CHECK_OP_IMPL(check_LT_impl, < )
+    1314              :         DEFINE_CHECK_OP_IMPL(check_GE_impl, >= )
+    1315              :         DEFINE_CHECK_OP_IMPL(check_GT_impl, > )
+    1316              : #undef DEFINE_CHECK_OP_IMPL
+    1317              : 
+    1318              :         /*  GLOG trick: Function is overloaded for integral types to allow static const integrals
+    1319              :             declared in classes and not defined to be used as arguments to CHECK* macros. */
+    1320              :         template <class T>
+    1321              :     inline const T& referenceable_value(const T& t) { return t; }
+    1322              :     inline char               referenceable_value(char               t) { return t; }
+    1323              :     inline unsigned char      referenceable_value(unsigned char      t) { return t; }
+    1324              :     inline signed char        referenceable_value(signed char        t) { return t; }
+    1325              :     inline short              referenceable_value(short              t) { return t; }
+    1326              :     inline unsigned short     referenceable_value(unsigned short     t) { return t; }
+    1327              :     inline int                referenceable_value(int                t) { return t; }
+    1328              :     inline unsigned int       referenceable_value(unsigned int       t) { return t; }
+    1329              :     inline long               referenceable_value(long               t) { return t; }
+    1330              :     inline unsigned long      referenceable_value(unsigned long      t) { return t; }
+    1331              :     inline long long          referenceable_value(long long          t) { return t; }
+    1332              :     inline unsigned long long referenceable_value(unsigned long long t) { return t; }
+    1333              : } // namespace loguru
+    1334              : 
+    1335              : LOGURU_ANONYMOUS_NAMESPACE_END
+    1336              : 
+    1337              : // -----------------------------------------------
+    1338              : // Logging macros:
+    1339              : 
+    1340              : // usage:  LOG_STREAM(INFO) << "Foo " << std::setprecision(10) << some_value;
+    1341              : #define VLOG_IF_S(verbosity, cond)                                                                 \
+    1342              :         ((verbosity) > loguru::current_verbosity_cutoff() || (cond) == false)                          \
+    1343              :                 ? (void)0                                                                                  \
+    1344              :                 : loguru::Voidify() & loguru::StreamLogger(verbosity, __FILE__, __LINE__)
+    1345              : #define LOG_IF_S(verbosity_name, cond) VLOG_IF_S(loguru::Verbosity_ ## verbosity_name, cond)
+    1346              : #define VLOG_S(verbosity)              VLOG_IF_S(verbosity, true)
+    1347              : #define LOG_S(verbosity_name)          VLOG_S(loguru::Verbosity_ ## verbosity_name)
+    1348              : 
+    1349              : // -----------------------------------------------
+    1350              : // ABORT_S macro. Usage:  ABORT_S() << "Causo of error: " << details;
+    1351              : 
+    1352              : #define ABORT_S() loguru::Voidify() & loguru::AbortLogger("ABORT: ", __FILE__, __LINE__)
+    1353              : 
+    1354              : // -----------------------------------------------
+    1355              : // CHECK_S macros:
+    1356              : 
+    1357              : #define CHECK_WITH_INFO_S(cond, info)                                                              \
+    1358              :         LOGURU_PREDICT_TRUE((cond) == true)                                                            \
+    1359              :                 ? (void)0                                                                                  \
+    1360              :                 : loguru::Voidify() & loguru::AbortLogger("CHECK FAILED:  " info "  ", __FILE__, __LINE__)
+    1361              : 
+    1362              : #define CHECK_S(cond) CHECK_WITH_INFO_S(cond, #cond)
+    1363              : #define CHECK_NOTNULL_S(x) CHECK_WITH_INFO_S((x) != nullptr, #x " != nullptr")
+    1364              : 
+    1365              : #define CHECK_OP_S(function_name, expr1, op, expr2)                                                \
+    1366              :         while (auto error_string = loguru::function_name(#expr1 " " #op " " #expr2,                    \
+    1367              :                                                                                                          loguru::referenceable_value(expr1), #op,      \
+    1368              :                                                                                                          loguru::referenceable_value(expr2)))          \
+    1369              :                 loguru::AbortLogger(error_string->c_str(), __FILE__, __LINE__)
+    1370              : 
+    1371              : #define CHECK_EQ_S(expr1, expr2) CHECK_OP_S(check_EQ_impl, expr1, ==, expr2)
+    1372              : #define CHECK_NE_S(expr1, expr2) CHECK_OP_S(check_NE_impl, expr1, !=, expr2)
+    1373              : #define CHECK_LE_S(expr1, expr2) CHECK_OP_S(check_LE_impl, expr1, <=, expr2)
+    1374              : #define CHECK_LT_S(expr1, expr2) CHECK_OP_S(check_LT_impl, expr1, < , expr2)
+    1375              : #define CHECK_GE_S(expr1, expr2) CHECK_OP_S(check_GE_impl, expr1, >=, expr2)
+    1376              : #define CHECK_GT_S(expr1, expr2) CHECK_OP_S(check_GT_impl, expr1, > , expr2)
+    1377              : 
+    1378              : #if LOGURU_DEBUG_LOGGING
+    1379              :     // Debug logging enabled:
+    1380              : #define DVLOG_IF_S(verbosity, cond)     VLOG_IF_S(verbosity, cond)
+    1381              : #define DLOG_IF_S(verbosity_name, cond) LOG_IF_S(verbosity_name, cond)
+    1382              : #define DVLOG_S(verbosity)              VLOG_S(verbosity)
+    1383              : #define DLOG_S(verbosity_name)          LOG_S(verbosity_name)
+    1384              : #else
+    1385              :     // Debug logging disabled:
+    1386              : #define DVLOG_IF_S(verbosity, cond)                                                     \
+    1387              :                 (true || (verbosity) > loguru::current_verbosity_cutoff() || (cond) == false)       \
+    1388              :                         ? (void)0                                                                       \
+    1389              :                         : loguru::Voidify() & loguru::StreamLogger(verbosity, __FILE__, __LINE__)
+    1390              : 
+    1391              : #define DLOG_IF_S(verbosity_name, cond) DVLOG_IF_S(loguru::Verbosity_ ## verbosity_name, cond)
+    1392              : #define DVLOG_S(verbosity)              DVLOG_IF_S(verbosity, true)
+    1393              : #define DLOG_S(verbosity_name)          DVLOG_S(loguru::Verbosity_ ## verbosity_name)
+    1394              : #endif
+    1395              : 
+    1396              : #if LOGURU_DEBUG_CHECKS
+    1397              :     // Debug checks enabled:
+    1398              : #define DCHECK_S(cond)                  CHECK_S(cond)
+    1399              : #define DCHECK_NOTNULL_S(x)             CHECK_NOTNULL_S(x)
+    1400              : #define DCHECK_EQ_S(a, b)               CHECK_EQ_S(a, b)
+    1401              : #define DCHECK_NE_S(a, b)               CHECK_NE_S(a, b)
+    1402              : #define DCHECK_LT_S(a, b)               CHECK_LT_S(a, b)
+    1403              : #define DCHECK_LE_S(a, b)               CHECK_LE_S(a, b)
+    1404              : #define DCHECK_GT_S(a, b)               CHECK_GT_S(a, b)
+    1405              : #define DCHECK_GE_S(a, b)               CHECK_GE_S(a, b)
+    1406              : #else
+    1407              : // Debug checks disabled:
+    1408              : #define DCHECK_S(cond)                  CHECK_S(true || (cond))
+    1409              : #define DCHECK_NOTNULL_S(x)             CHECK_S(true || (x) != nullptr)
+    1410              : #define DCHECK_EQ_S(a, b)               CHECK_S(true || (a) == (b))
+    1411              : #define DCHECK_NE_S(a, b)               CHECK_S(true || (a) != (b))
+    1412              : #define DCHECK_LT_S(a, b)               CHECK_S(true || (a) <  (b))
+    1413              : #define DCHECK_LE_S(a, b)               CHECK_S(true || (a) <= (b))
+    1414              : #define DCHECK_GT_S(a, b)               CHECK_S(true || (a) >  (b))
+    1415              : #define DCHECK_GE_S(a, b)               CHECK_S(true || (a) >= (b))
+    1416              : #endif
+    1417              : 
+    1418              : #if LOGURU_REPLACE_GLOG
+    1419              : #undef LOG
+    1420              : #undef VLOG
+    1421              : #undef LOG_IF
+    1422              : #undef VLOG_IF
+    1423              : #undef CHECK
+    1424              : #undef CHECK_NOTNULL
+    1425              : #undef CHECK_EQ
+    1426              : #undef CHECK_NE
+    1427              : #undef CHECK_LT
+    1428              : #undef CHECK_LE
+    1429              : #undef CHECK_GT
+    1430              : #undef CHECK_GE
+    1431              : #undef DLOG
+    1432              : #undef DVLOG
+    1433              : #undef DLOG_IF
+    1434              : #undef DVLOG_IF
+    1435              : #undef DCHECK
+    1436              : #undef DCHECK_NOTNULL
+    1437              : #undef DCHECK_EQ
+    1438              : #undef DCHECK_NE
+    1439              : #undef DCHECK_LT
+    1440              : #undef DCHECK_LE
+    1441              : #undef DCHECK_GT
+    1442              : #undef DCHECK_GE
+    1443              : #undef VLOG_IS_ON
+    1444              : 
+    1445              : #define LOG            LOG_S
+    1446              : #define VLOG           VLOG_S
+    1447              : #define LOG_IF         LOG_IF_S
+    1448              : #define VLOG_IF        VLOG_IF_S
+    1449              : #define CHECK(cond)    CHECK_S(!!(cond))
+    1450              : #define CHECK_NOTNULL  CHECK_NOTNULL_S
+    1451              : #define CHECK_EQ       CHECK_EQ_S
+    1452              : #define CHECK_NE       CHECK_NE_S
+    1453              : #define CHECK_LT       CHECK_LT_S
+    1454              : #define CHECK_LE       CHECK_LE_S
+    1455              : #define CHECK_GT       CHECK_GT_S
+    1456              : #define CHECK_GE       CHECK_GE_S
+    1457              : #define DLOG           DLOG_S
+    1458              : #define DVLOG          DVLOG_S
+    1459              : #define DLOG_IF        DLOG_IF_S
+    1460              : #define DVLOG_IF       DVLOG_IF_S
+    1461              : #define DCHECK         DCHECK_S
+    1462              : #define DCHECK_NOTNULL DCHECK_NOTNULL_S
+    1463              : #define DCHECK_EQ      DCHECK_EQ_S
+    1464              : #define DCHECK_NE      DCHECK_NE_S
+    1465              : #define DCHECK_LT      DCHECK_LT_S
+    1466              : #define DCHECK_LE      DCHECK_LE_S
+    1467              : #define DCHECK_GT      DCHECK_GT_S
+    1468              : #define DCHECK_GE      DCHECK_GE_S
+    1469              : #define VLOG_IS_ON(verbosity) ((verbosity) <= loguru::current_verbosity_cutoff())
+    1470              : 
+    1471              : #endif // LOGURU_REPLACE_GLOG
+    1472              : 
+    1473              : #endif // LOGURU_WITH_STREAMS
+    1474              : 
+    1475              : #endif // LOGURU_HAS_DECLARED_STREAMS_HEADER
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/mdlp/CPPFImdlp.h.func-c.html b/html/BayesNet/lib/mdlp/CPPFImdlp.h.func-c.html new file mode 100644 index 0000000..2e87eb6 --- /dev/null +++ b/html/BayesNet/lib/mdlp/CPPFImdlp.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/mdlp/CPPFImdlp.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/mdlp - CPPFImdlp.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK4mdlp9CPPFImdlp12getCutPointsEv1518
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/mdlp/CPPFImdlp.h.func.html b/html/BayesNet/lib/mdlp/CPPFImdlp.h.func.html new file mode 100644 index 0000000..5e3e373 --- /dev/null +++ b/html/BayesNet/lib/mdlp/CPPFImdlp.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/mdlp/CPPFImdlp.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/mdlp - CPPFImdlp.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK4mdlp9CPPFImdlp12getCutPointsEv1518
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/mdlp/CPPFImdlp.h.gcov.html b/html/BayesNet/lib/mdlp/CPPFImdlp.h.gcov.html new file mode 100644 index 0000000..9268aef --- /dev/null +++ b/html/BayesNet/lib/mdlp/CPPFImdlp.h.gcov.html @@ -0,0 +1,121 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/mdlp/CPPFImdlp.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/mdlp - CPPFImdlp.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #ifndef CPPFIMDLP_H
+       2              : #define CPPFIMDLP_H
+       3              : 
+       4              : #include "typesFImdlp.h"
+       5              : #include "Metrics.h"
+       6              : #include <limits>
+       7              : #include <utility>
+       8              : #include <string>
+       9              : 
+      10              : namespace mdlp {
+      11              :     class CPPFImdlp {
+      12              :     protected:
+      13              :         size_t min_length = 3;
+      14              :         int depth = 0;
+      15              :         int max_depth = numeric_limits<int>::max();
+      16              :         float proposed_cuts = 0;
+      17              :         indices_t indices = indices_t();
+      18              :         samples_t X = samples_t();
+      19              :         labels_t y = labels_t();
+      20              :         Metrics metrics = Metrics(y, indices);
+      21              :         cutPoints_t cutPoints;
+      22              :         size_t num_cut_points = numeric_limits<size_t>::max();
+      23              :         labels_t discretizedData = labels_t();
+      24              : 
+      25              :         static indices_t sortIndices(samples_t&, labels_t&);
+      26              : 
+      27              :         void computeCutPoints(size_t, size_t, int);
+      28              :         void resizeCutPoints();
+      29              :         bool mdlp(size_t, size_t, size_t);
+      30              :         size_t getCandidate(size_t, size_t);
+      31              :         size_t compute_max_num_cut_points() const;
+      32              :         pair<precision_t, size_t> valueCutPoint(size_t, size_t, size_t);
+      33              : 
+      34              :     public:
+      35              :         CPPFImdlp();
+      36              :         CPPFImdlp(size_t, int, float);
+      37              :         ~CPPFImdlp();
+      38              :         void fit(samples_t&, labels_t&);
+      39         1518 :         inline cutPoints_t getCutPoints() const { return cutPoints; };
+      40              :         labels_t& transform(const samples_t&);
+      41              :         inline int get_depth() const { return depth; };
+      42              :         static inline string version() { return "1.1.2"; };
+      43              :     };
+      44              : }
+      45              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/mdlp/index-sort-f.html b/html/BayesNet/lib/mdlp/index-sort-f.html new file mode 100644 index 0000000..9274adb --- /dev/null +++ b/html/BayesNet/lib/mdlp/index-sort-f.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/mdlp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/mdlpCoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
CPPFImdlp.h +
100.0%
+
100.0 %11100.0 %11
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/mdlp/index-sort-l.html b/html/BayesNet/lib/mdlp/index-sort-l.html new file mode 100644 index 0000000..da04173 --- /dev/null +++ b/html/BayesNet/lib/mdlp/index-sort-l.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/mdlp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/mdlpCoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
CPPFImdlp.h +
100.0%
+
100.0 %11100.0 %11
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/lib/mdlp/index.html b/html/BayesNet/lib/mdlp/index.html new file mode 100644 index 0000000..b2c6ca5 --- /dev/null +++ b/html/BayesNet/lib/mdlp/index.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - BayesNet/lib/mdlp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/lib/mdlpCoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
CPPFImdlp.h +
100.0%
+
100.0 %11100.0 %11
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBayesClassifier.cc.func-c.html b/html/BayesNet/tests/TestBayesClassifier.cc.func-c.html new file mode 100644 index 0000000..dcdaedd --- /dev/null +++ b/html/BayesNet/tests/TestBayesClassifier.cc.func-c.html @@ -0,0 +1,159 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBayesClassifier.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBayesClassifier.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %9696
Test Date:2024-04-30 13:17:26Functions:100.0 %1212
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZL22CATCH2_INTERNAL_TEST_2v2
_ZL22CATCH2_INTERNAL_TEST_4v2
_ZL22CATCH2_INTERNAL_TEST_6v2
_ZL22CATCH2_INTERNAL_TEST_8v2
_ZL23CATCH2_INTERNAL_TEST_10v2
_ZL23CATCH2_INTERNAL_TEST_12v2
_ZL23CATCH2_INTERNAL_TEST_14v2
_ZL23CATCH2_INTERNAL_TEST_16v2
_ZL23CATCH2_INTERNAL_TEST_18v2
_ZL23CATCH2_INTERNAL_TEST_20v2
_ZL23CATCH2_INTERNAL_TEST_22v2
_ZL23CATCH2_INTERNAL_TEST_24v2
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBayesClassifier.cc.func.html b/html/BayesNet/tests/TestBayesClassifier.cc.func.html new file mode 100644 index 0000000..f0eb971 --- /dev/null +++ b/html/BayesNet/tests/TestBayesClassifier.cc.func.html @@ -0,0 +1,159 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBayesClassifier.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBayesClassifier.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %9696
Test Date:2024-04-30 13:17:26Functions:100.0 %1212
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZL22CATCH2_INTERNAL_TEST_2v2
_ZL22CATCH2_INTERNAL_TEST_4v2
_ZL22CATCH2_INTERNAL_TEST_6v2
_ZL22CATCH2_INTERNAL_TEST_8v2
_ZL23CATCH2_INTERNAL_TEST_10v2
_ZL23CATCH2_INTERNAL_TEST_12v2
_ZL23CATCH2_INTERNAL_TEST_14v2
_ZL23CATCH2_INTERNAL_TEST_16v2
_ZL23CATCH2_INTERNAL_TEST_18v2
_ZL23CATCH2_INTERNAL_TEST_20v2
_ZL23CATCH2_INTERNAL_TEST_22v2
_ZL23CATCH2_INTERNAL_TEST_24v2
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBayesClassifier.cc.gcov.html b/html/BayesNet/tests/TestBayesClassifier.cc.gcov.html new file mode 100644 index 0000000..4296f1c --- /dev/null +++ b/html/BayesNet/tests/TestBayesClassifier.cc.gcov.html @@ -0,0 +1,201 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBayesClassifier.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBayesClassifier.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %9696
Test Date:2024-04-30 13:17:26Functions:100.0 %1212
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include <catch2/catch_test_macros.hpp>
+       8              : #include <catch2/matchers/catch_matchers.hpp>
+       9              : #include <string>
+      10              : #include "TestUtils.h"
+      11              : #include "bayesnet/classifiers/TAN.h"
+      12              : #include "bayesnet/classifiers/KDB.h"
+      13              : #include "bayesnet/classifiers/KDBLd.h"
+      14              : 
+      15              : 
+      16            2 : TEST_CASE("Test Cannot build dataset with wrong data vector", "[Classifier]")
+      17              : {
+      18            2 :     auto model = bayesnet::TAN();
+      19            2 :     auto raw = RawDatasets("iris", true);
+      20            2 :     raw.yv.pop_back();
+      21            2 :     REQUIRE_THROWS_AS(model.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states), std::runtime_error);
+      22            6 :     REQUIRE_THROWS_WITH(model.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states), "* Error in X and y dimensions *\nX dimensions: [4, 150]\ny dimensions: [149]");
+      23            2 : }
+      24            2 : TEST_CASE("Test Cannot build dataset with wrong data tensor", "[Classifier]")
+      25              : {
+      26            2 :     auto model = bayesnet::TAN();
+      27            2 :     auto raw = RawDatasets("iris", true);
+      28            2 :     auto yshort = torch::zeros({ 149 }, torch::kInt32);
+      29            2 :     REQUIRE_THROWS_AS(model.fit(raw.Xt, yshort, raw.features, raw.className, raw.states), std::runtime_error);
+      30            6 :     REQUIRE_THROWS_WITH(model.fit(raw.Xt, yshort, raw.features, raw.className, raw.states), "* Error in X and y dimensions *\nX dimensions: [4, 150]\ny dimensions: [149]");
+      31            2 : }
+      32            2 : TEST_CASE("Invalid data type", "[Classifier]")
+      33              : {
+      34            2 :     auto model = bayesnet::TAN();
+      35            2 :     auto raw = RawDatasets("iris", false);
+      36            2 :     REQUIRE_THROWS_AS(model.fit(raw.Xt, raw.yt, raw.features, raw.className, raw.states), std::invalid_argument);
+      37            6 :     REQUIRE_THROWS_WITH(model.fit(raw.Xt, raw.yt, raw.features, raw.className, raw.states), "dataset (X, y) must be of type Integer");
+      38            2 : }
+      39            2 : TEST_CASE("Invalid number of features", "[Classifier]")
+      40              : {
+      41            2 :     auto model = bayesnet::TAN();
+      42            2 :     auto raw = RawDatasets("iris", true);
+      43            6 :     auto Xt = torch::cat({ raw.Xt, torch::zeros({ 1, 150 }, torch::kInt32) }, 0);
+      44            2 :     REQUIRE_THROWS_AS(model.fit(Xt, raw.yt, raw.features, raw.className, raw.states), std::invalid_argument);
+      45            6 :     REQUIRE_THROWS_WITH(model.fit(Xt, raw.yt, raw.features, raw.className, raw.states), "Classifier: X 5 and features 4 must have the same number of features");
+      46            6 : }
+      47            2 : TEST_CASE("Invalid class name", "[Classifier]")
+      48              : {
+      49            2 :     auto model = bayesnet::TAN();
+      50            2 :     auto raw = RawDatasets("iris", true);
+      51            6 :     REQUIRE_THROWS_AS(model.fit(raw.Xt, raw.yt, raw.features, "duck", raw.states), std::invalid_argument);
+      52           10 :     REQUIRE_THROWS_WITH(model.fit(raw.Xt, raw.yt, raw.features, "duck", raw.states), "class name not found in states");
+      53            2 : }
+      54            2 : TEST_CASE("Invalid feature name", "[Classifier]")
+      55              : {
+      56            2 :     auto model = bayesnet::TAN();
+      57            2 :     auto raw = RawDatasets("iris", true);
+      58            2 :     auto statest = raw.states;
+      59            2 :     statest.erase("petallength");
+      60            2 :     REQUIRE_THROWS_AS(model.fit(raw.Xt, raw.yt, raw.features, raw.className, statest), std::invalid_argument);
+      61            6 :     REQUIRE_THROWS_WITH(model.fit(raw.Xt, raw.yt, raw.features, raw.className, statest), "feature [petallength] not found in states");
+      62            2 : }
+      63            2 : TEST_CASE("Invalid hyperparameter", "[Classifier]")
+      64              : {
+      65            2 :     auto model = bayesnet::KDB(2);
+      66            2 :     auto raw = RawDatasets("iris", true);
+      67           16 :     REQUIRE_THROWS_AS(model.setHyperparameters({ { "alpha", "0.0" } }), std::invalid_argument);
+      68           20 :     REQUIRE_THROWS_WITH(model.setHyperparameters({ { "alpha", "0.0" } }), "Invalid hyperparameters{\"alpha\":\"0.0\"}");
+      69           26 : }
+      70            2 : TEST_CASE("Topological order", "[Classifier]")
+      71              : {
+      72            2 :     auto model = bayesnet::TAN();
+      73            2 :     auto raw = RawDatasets("iris", true);
+      74            2 :     model.fit(raw.Xt, raw.yt, raw.features, raw.className, raw.states);
+      75            2 :     auto order = model.topological_order();
+      76            2 :     REQUIRE(order.size() == 4);
+      77            2 :     REQUIRE(order[0] == "petallength");
+      78            2 :     REQUIRE(order[1] == "sepallength");
+      79            2 :     REQUIRE(order[2] == "sepalwidth");
+      80            2 :     REQUIRE(order[3] == "petalwidth");
+      81            2 : }
+      82            2 : TEST_CASE("Dump_cpt", "[Classifier]")
+      83              : {
+      84            2 :     auto model = bayesnet::TAN();
+      85            2 :     auto raw = RawDatasets("iris", true);
+      86            2 :     model.fit(raw.Xt, raw.yt, raw.features, raw.className, raw.states);
+      87            2 :     auto cpt = model.dump_cpt();
+      88            2 :     REQUIRE(cpt.size() == 1713);
+      89            2 : }
+      90            2 : TEST_CASE("Not fitted model", "[Classifier]")
+      91              : {
+      92            2 :     auto model = bayesnet::TAN();
+      93            2 :     auto raw = RawDatasets("iris", true);
+      94            2 :     auto message = "Classifier has not been fitted";
+      95              :     // tensors
+      96            2 :     REQUIRE_THROWS_AS(model.predict(raw.Xt), std::logic_error);
+      97            6 :     REQUIRE_THROWS_WITH(model.predict(raw.Xt), message);
+      98            2 :     REQUIRE_THROWS_AS(model.predict_proba(raw.Xt), std::logic_error);
+      99            6 :     REQUIRE_THROWS_WITH(model.predict_proba(raw.Xt), message);
+     100            2 :     REQUIRE_THROWS_AS(model.score(raw.Xt, raw.yt), std::logic_error);
+     101            6 :     REQUIRE_THROWS_WITH(model.score(raw.Xt, raw.yt), message);
+     102              :     // vectors
+     103            2 :     REQUIRE_THROWS_AS(model.predict(raw.Xv), std::logic_error);
+     104            6 :     REQUIRE_THROWS_WITH(model.predict(raw.Xv), message);
+     105            2 :     REQUIRE_THROWS_AS(model.predict_proba(raw.Xv), std::logic_error);
+     106            6 :     REQUIRE_THROWS_WITH(model.predict_proba(raw.Xv), message);
+     107            2 :     REQUIRE_THROWS_AS(model.score(raw.Xv, raw.yv), std::logic_error);
+     108            6 :     REQUIRE_THROWS_WITH(model.score(raw.Xv, raw.yv), message);
+     109            2 : }
+     110            2 : TEST_CASE("KDB Graph", "[Classifier]")
+     111              : {
+     112            2 :     auto model = bayesnet::KDB(2);
+     113            2 :     auto raw = RawDatasets("iris", true);
+     114            2 :     model.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+     115            2 :     auto graph = model.graph();
+     116            2 :     REQUIRE(graph.size() == 15);
+     117            2 : }
+     118            2 : TEST_CASE("KDBLd Graph", "[Classifier]")
+     119              : {
+     120            2 :     auto model = bayesnet::KDBLd(2);
+     121            2 :     auto raw = RawDatasets("iris", false);
+     122            2 :     model.fit(raw.Xt, raw.yt, raw.features, raw.className, raw.states);
+     123            2 :     auto graph = model.graph();
+     124            2 :     REQUIRE(graph.size() == 15);
+     125            2 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBayesEnsemble.cc.func-c.html b/html/BayesNet/tests/TestBayesEnsemble.cc.func-c.html new file mode 100644 index 0000000..75c623c --- /dev/null +++ b/html/BayesNet/tests/TestBayesEnsemble.cc.func-c.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBayesEnsemble.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBayesEnsemble.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:98.6 %7069
Test Date:2024-04-30 13:17:26Functions:100.0 %99
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZL22CATCH2_INTERNAL_TEST_2v2
_ZL22CATCH2_INTERNAL_TEST_4v2
_ZL22CATCH2_INTERNAL_TEST_6v2
_ZL22CATCH2_INTERNAL_TEST_8v2
_ZL23CATCH2_INTERNAL_TEST_10v2
_ZL23CATCH2_INTERNAL_TEST_12v2
_ZZL23CATCH2_INTERNAL_TEST_12vEN12TestEnsemble15compute_arg_maxERN2at6TensorE2
_ZZL23CATCH2_INTERNAL_TEST_12vEN12TestEnsemble15compute_arg_maxERSt6vectorIS0_IdSaIdEESaIS2_EE2
_ZZL23CATCH2_INTERNAL_TEST_12vEN12TestEnsembleC2Ev2
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBayesEnsemble.cc.func.html b/html/BayesNet/tests/TestBayesEnsemble.cc.func.html new file mode 100644 index 0000000..ac3b9a3 --- /dev/null +++ b/html/BayesNet/tests/TestBayesEnsemble.cc.func.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBayesEnsemble.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBayesEnsemble.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:98.6 %7069
Test Date:2024-04-30 13:17:26Functions:100.0 %99
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZL22CATCH2_INTERNAL_TEST_2v2
_ZL22CATCH2_INTERNAL_TEST_4v2
_ZL22CATCH2_INTERNAL_TEST_6v2
_ZL22CATCH2_INTERNAL_TEST_8v2
_ZL23CATCH2_INTERNAL_TEST_10v2
_ZL23CATCH2_INTERNAL_TEST_12v2
_ZZL23CATCH2_INTERNAL_TEST_12vEN12TestEnsemble15compute_arg_maxERN2at6TensorE2
_ZZL23CATCH2_INTERNAL_TEST_12vEN12TestEnsemble15compute_arg_maxERSt6vectorIS0_IdSaIdEESaIS2_EE2
_ZZL23CATCH2_INTERNAL_TEST_12vEN12TestEnsembleC2Ev2
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBayesEnsemble.cc.gcov.html b/html/BayesNet/tests/TestBayesEnsemble.cc.gcov.html new file mode 100644 index 0000000..eb1ad7a --- /dev/null +++ b/html/BayesNet/tests/TestBayesEnsemble.cc.gcov.html @@ -0,0 +1,202 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBayesEnsemble.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBayesEnsemble.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:98.6 %7069
Test Date:2024-04-30 13:17:26Functions:100.0 %99
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include <type_traits>
+       8              : #include <catch2/catch_test_macros.hpp>
+       9              : #include <catch2/catch_approx.hpp>
+      10              : #include <catch2/generators/catch_generators.hpp>
+      11              : #include "bayesnet/ensembles/BoostAODE.h"
+      12              : #include "bayesnet/ensembles/AODE.h"
+      13              : #include "bayesnet/ensembles/AODELd.h"
+      14              : #include "TestUtils.h"
+      15              : 
+      16              : 
+      17            2 : TEST_CASE("Topological Order", "[Ensemble]")
+      18              : {
+      19            2 :     auto raw = RawDatasets("glass", true);
+      20            2 :     auto clf = bayesnet::BoostAODE();
+      21            2 :     clf.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+      22            2 :     auto order = clf.topological_order();
+      23            2 :     REQUIRE(order.size() == 0);
+      24            2 : }
+      25            2 : TEST_CASE("Dump CPT", "[Ensemble]")
+      26              : {
+      27            2 :     auto raw = RawDatasets("glass", true);
+      28            2 :     auto clf = bayesnet::BoostAODE();
+      29            2 :     clf.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+      30            2 :     auto dump = clf.dump_cpt();
+      31            2 :     REQUIRE(dump == "");
+      32            2 : }
+      33            2 : TEST_CASE("Number of States", "[Ensemble]")
+      34              : {
+      35            2 :     auto clf = bayesnet::BoostAODE();
+      36            2 :     auto raw = RawDatasets("iris", true);
+      37            2 :     clf.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+      38            2 :     REQUIRE(clf.getNumberOfStates() == 76);
+      39            2 : }
+      40            2 : TEST_CASE("Show", "[Ensemble]")
+      41              : {
+      42            2 :     auto clf = bayesnet::BoostAODE();
+      43            2 :     auto raw = RawDatasets("iris", true);
+      44           20 :     clf.setHyperparameters({
+      45              :             {"bisection", false},
+      46            0 :             {"maxTolerance", 1},
+      47              :             {"convergence", false},
+      48              :         });
+      49            2 :     clf.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+      50              :     std::vector<std::string> expected = {
+      51              :         "class -> sepallength, sepalwidth, petallength, petalwidth, ",
+      52              :         "petallength -> sepallength, sepalwidth, petalwidth, ",
+      53              :         "petalwidth -> ",
+      54              :         "sepallength -> ",
+      55              :         "sepalwidth -> ",
+      56              :         "class -> sepallength, sepalwidth, petallength, petalwidth, ",
+      57              :         "petallength -> ",
+      58              :         "petalwidth -> sepallength, sepalwidth, petallength, ",
+      59              :         "sepallength -> ",
+      60              :         "sepalwidth -> ",
+      61              :         "class -> sepallength, sepalwidth, petallength, petalwidth, ",
+      62              :         "petallength -> ",
+      63              :         "petalwidth -> ",
+      64              :         "sepallength -> sepalwidth, petallength, petalwidth, ",
+      65              :         "sepalwidth -> ",
+      66              :         "class -> sepallength, sepalwidth, petallength, petalwidth, ",
+      67              :         "petallength -> ",
+      68              :         "petalwidth -> ",
+      69              :         "sepallength -> ",
+      70              :         "sepalwidth -> sepallength, petallength, petalwidth, ",
+      71            4 :     };
+      72            2 :     auto show = clf.show();
+      73            2 :     REQUIRE(show.size() == expected.size());
+      74           42 :     for (size_t i = 0; i < show.size(); i++)
+      75           40 :         REQUIRE(show[i] == expected[i]);
+      76           18 : }
+      77            2 : TEST_CASE("Graph", "[Ensemble]")
+      78              : {
+      79            2 :     auto clf = bayesnet::BoostAODE();
+      80            2 :     auto raw = RawDatasets("iris", true);
+      81            2 :     clf.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+      82            2 :     auto graph = clf.graph();
+      83            2 :     REQUIRE(graph.size() == 56);
+      84            2 :     auto clf2 = bayesnet::AODE();
+      85            2 :     clf2.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+      86            2 :     graph = clf2.graph();
+      87            2 :     REQUIRE(graph.size() == 56);
+      88            2 :     raw = RawDatasets("glass", false);
+      89            2 :     auto clf3 = bayesnet::AODELd();
+      90            2 :     clf3.fit(raw.Xt, raw.yt, raw.features, raw.className, raw.states);
+      91            2 :     graph = clf3.graph();
+      92            2 :     REQUIRE(graph.size() == 261);
+      93            2 : }
+      94            2 : TEST_CASE("Compute ArgMax", "[Ensemble]")
+      95              : {
+      96              :     class TestEnsemble : public bayesnet::BoostAODE {
+      97              :     public:
+      98            2 :         TestEnsemble() : bayesnet::BoostAODE() {}
+      99            2 :         torch::Tensor compute_arg_max(torch::Tensor& X) { return Ensemble::compute_arg_max(X); }
+     100            2 :         std::vector<int> compute_arg_max(std::vector<std::vector<double>>& X) { return Ensemble::compute_arg_max(X); }
+     101              :     };
+     102            2 :     TestEnsemble clf;
+     103              :     std::vector<std::vector<double>> X = {
+     104              :         {0.1f, 0.2f, 0.3f},
+     105              :         {0.4f, 0.9f, 0.6f},
+     106              :         {0.7f, 0.8f, 0.9f},
+     107              :         {0.5f, 0.2f, 0.1f},
+     108              :         {0.3f, 0.7f, 0.2f},
+     109              :         {0.5f, 0.5f, 0.2f}
+     110           16 :     };
+     111            2 :     std::vector<int> expected = { 2, 1, 2, 0, 1, 0 };
+     112            2 :     auto argmax = clf.compute_arg_max(X);
+     113            2 :     REQUIRE(argmax.size() == expected.size());
+     114            2 :     REQUIRE(argmax == expected);
+     115            2 :     auto Xt = torch::zeros({ 6, 3 }, torch::kFloat32);
+     116            2 :     Xt[0][0] = 0.1f; Xt[0][1] = 0.2f; Xt[0][2] = 0.3f;
+     117            2 :     Xt[1][0] = 0.4f; Xt[1][1] = 0.9f; Xt[1][2] = 0.6f;
+     118            2 :     Xt[2][0] = 0.7f; Xt[2][1] = 0.8f; Xt[2][2] = 0.9f;
+     119            2 :     Xt[3][0] = 0.5f; Xt[3][1] = 0.2f; Xt[3][2] = 0.1f;
+     120            2 :     Xt[4][0] = 0.3f; Xt[4][1] = 0.7f; Xt[4][2] = 0.2f;
+     121            2 :     Xt[5][0] = 0.5f; Xt[5][1] = 0.5f; Xt[5][2] = 0.2f;
+     122            2 :     auto argmaxt = clf.compute_arg_max(Xt);
+     123            2 :     REQUIRE(argmaxt.size(0) == expected.size());
+     124           14 :     for (int i = 0; i < argmaxt.size(0); i++)
+     125           12 :         REQUIRE(argmaxt[i].item<int>() == expected[i]);
+     126            8 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBayesMetrics.cc.func-c.html b/html/BayesNet/tests/TestBayesMetrics.cc.func-c.html new file mode 100644 index 0000000..a4dd9a9 --- /dev/null +++ b/html/BayesNet/tests/TestBayesMetrics.cc.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBayesMetrics.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBayesMetrics.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:69.8 %5337
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZZL22CATCH2_INTERNAL_TEST_2vENKUlvE_clEv2
_ZL22CATCH2_INTERNAL_TEST_2v32
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBayesMetrics.cc.func.html b/html/BayesNet/tests/TestBayesMetrics.cc.func.html new file mode 100644 index 0000000..d0b149c --- /dev/null +++ b/html/BayesNet/tests/TestBayesMetrics.cc.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBayesMetrics.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBayesMetrics.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:69.8 %5337
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZL22CATCH2_INTERNAL_TEST_2v32
_ZZL22CATCH2_INTERNAL_TEST_2vENKUlvE_clEv2
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBayesMetrics.cc.gcov.html b/html/BayesNet/tests/TestBayesMetrics.cc.gcov.html new file mode 100644 index 0000000..c8d00c9 --- /dev/null +++ b/html/BayesNet/tests/TestBayesMetrics.cc.gcov.html @@ -0,0 +1,154 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBayesMetrics.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBayesMetrics.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:69.8 %5337
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include <catch2/catch_test_macros.hpp>
+       8              : #include <catch2/catch_approx.hpp>
+       9              : #include <catch2/generators/catch_generators.hpp>
+      10              : #include "bayesnet/utils/BayesMetrics.h"
+      11              : #include "TestUtils.h"
+      12              : 
+      13              : 
+      14           32 : TEST_CASE("Metrics Test", "[Metrics]")
+      15              : {
+      16           34 :     std::string file_name = GENERATE("glass", "iris", "ecoli", "diabetes");
+      17              :     map<std::string, pair<int, std::vector<int>>> resultsKBest = {
+      18            0 :         {"glass", {7, { 0, 1, 7, 6, 3, 5, 2 }}},
+      19            0 :         {"iris", {3, { 0, 3, 2 }} },
+      20            0 :         {"ecoli", {6, { 2, 4, 1, 0, 6, 5 }}},
+      21            0 :         {"diabetes", {2, { 7, 1 }}}
+      22          192 :     };
+      23              :     map<std::string, double> resultsMI = {
+      24            0 :         {"glass", 0.12805398},
+      25            0 :         {"iris", 0.3158139948},
+      26            0 :         {"ecoli", 0.0089431099},
+      27            0 :         {"diabetes", 0.0345470614}
+      28          192 :     };
+      29              :     map<pair<std::string, int>, std::vector<pair<int, int>>> resultsMST = {
+      30            0 :         { {"glass", 0}, { {0, 6}, {0, 5}, {0, 3}, {5, 1}, {5, 8}, {5, 4}, {6, 2}, {6, 7} } },
+      31            0 :         { {"glass", 1}, { {1, 5}, {5, 0}, {5, 8}, {5, 4}, {0, 6}, {0, 3}, {6, 2}, {6, 7} } },
+      32            0 :         { {"iris", 0}, { {0, 1}, {0, 2}, {1, 3} } },
+      33            0 :         { {"iris", 1}, { {1, 0}, {1, 3}, {0, 2} } },
+      34            0 :         { {"ecoli", 0}, { {0, 1}, {0, 2}, {1, 5}, {1, 3}, {5, 6}, {5, 4} } },
+      35            0 :         { {"ecoli", 1}, { {1, 0}, {1, 5}, {1, 3}, {5, 6}, {5, 4}, {0, 2} } },
+      36            0 :         { {"diabetes", 0}, { {0, 7}, {0, 2}, {0, 6}, {2, 3}, {3, 4}, {3, 5}, {4, 1} } },
+      37            0 :         { {"diabetes", 1}, { {1, 4}, {4, 3}, {3, 2}, {3, 5}, {2, 0}, {0, 7}, {0, 6} } }
+      38          320 :     };
+      39           32 :     auto raw = RawDatasets(file_name, true);
+      40           32 :     bayesnet::Metrics metrics(raw.dataset, raw.features, raw.className, raw.classNumStates);
+      41           32 :     bayesnet::Metrics metricsv(raw.Xv, raw.yv, raw.features, raw.className, raw.classNumStates);
+      42              : 
+      43           32 :     SECTION("Test Constructor")
+      44              :     {
+      45            8 :         REQUIRE(metrics.getScoresKBest().size() == 0);
+      46            8 :         REQUIRE(metricsv.getScoresKBest().size() == 0);
+      47           32 :     }
+      48              : 
+      49           32 :     SECTION("Test SelectKBestWeighted")
+      50              :     {
+      51            8 :         std::vector<int> kBest = metrics.SelectKBestWeighted(raw.weights, true, resultsKBest.at(file_name).first);
+      52            8 :         std::vector<int> kBestv = metricsv.SelectKBestWeighted(raw.weights, true, resultsKBest.at(file_name).first);
+      53            8 :         REQUIRE(kBest.size() == resultsKBest.at(file_name).first);
+      54            8 :         REQUIRE(kBestv.size() == resultsKBest.at(file_name).first);
+      55            8 :         REQUIRE(kBest == resultsKBest.at(file_name).second);
+      56            8 :         REQUIRE(kBestv == resultsKBest.at(file_name).second);
+      57           40 :     }
+      58              : 
+      59           32 :     SECTION("Test Mutual Information")
+      60              :     {
+      61           40 :         auto result = metrics.mutualInformation(raw.dataset.index({ 1, "..." }), raw.dataset.index({ 2, "..." }), raw.weights);
+      62           40 :         auto resultv = metricsv.mutualInformation(raw.dataset.index({ 1, "..." }), raw.dataset.index({ 2, "..." }), raw.weights);
+      63            8 :         REQUIRE(result == Catch::Approx(resultsMI.at(file_name)).epsilon(raw.epsilon));
+      64            8 :         REQUIRE(resultv == Catch::Approx(resultsMI.at(file_name)).epsilon(raw.epsilon));
+      65           32 :     }
+      66              : 
+      67           32 :     SECTION("Test Maximum Spanning Tree")
+      68              :     {
+      69            8 :         auto weights_matrix = metrics.conditionalEdge(raw.weights);
+      70            8 :         auto weights_matrixv = metricsv.conditionalEdge(raw.weights);
+      71           24 :         for (int i = 0; i < 2; ++i) {
+      72           16 :             auto result = metrics.maximumSpanningTree(raw.features, weights_matrix, i);
+      73           16 :             auto resultv = metricsv.maximumSpanningTree(raw.features, weights_matrixv, i);
+      74           16 :             REQUIRE(result == resultsMST.at({ file_name, i }));
+      75           16 :             REQUIRE(resultv == resultsMST.at({ file_name, i }));
+      76           16 :         }
+      77           40 :     }
+      78          304 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBayesModels.cc.func-c.html b/html/BayesNet/tests/TestBayesModels.cc.func-c.html new file mode 100644 index 0000000..5ac6cd6 --- /dev/null +++ b/html/BayesNet/tests/TestBayesModels.cc.func-c.html @@ -0,0 +1,152 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBayesModels.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBayesModels.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:94.0 %166156
Test Date:2024-04-30 13:17:26Functions:100.0 %1111
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZL23CATCH2_INTERNAL_TEST_13v2
_ZL23CATCH2_INTERNAL_TEST_19v2
_ZL23CATCH2_INTERNAL_TEST_21v2
_ZL23CATCH2_INTERNAL_TEST_23v2
_ZL23CATCH2_INTERNAL_TEST_25v2
_ZL23CATCH2_INTERNAL_TEST_27v2
_ZZL22CATCH2_INTERNAL_TEST_2vENKUlvE_clEv2
_ZZL23CATCH2_INTERNAL_TEST_15vENKUlvE_clEv2
_ZL22CATCH2_INTERNAL_TEST_9v4
_ZL23CATCH2_INTERNAL_TEST_15v8
_ZL22CATCH2_INTERNAL_TEST_2v32
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBayesModels.cc.func.html b/html/BayesNet/tests/TestBayesModels.cc.func.html new file mode 100644 index 0000000..f66f9bf --- /dev/null +++ b/html/BayesNet/tests/TestBayesModels.cc.func.html @@ -0,0 +1,152 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBayesModels.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBayesModels.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:94.0 %166156
Test Date:2024-04-30 13:17:26Functions:100.0 %1111
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZL22CATCH2_INTERNAL_TEST_2v32
_ZL22CATCH2_INTERNAL_TEST_9v4
_ZL23CATCH2_INTERNAL_TEST_13v2
_ZL23CATCH2_INTERNAL_TEST_15v8
_ZL23CATCH2_INTERNAL_TEST_19v2
_ZL23CATCH2_INTERNAL_TEST_21v2
_ZL23CATCH2_INTERNAL_TEST_23v2
_ZL23CATCH2_INTERNAL_TEST_25v2
_ZL23CATCH2_INTERNAL_TEST_27v2
_ZZL22CATCH2_INTERNAL_TEST_2vENKUlvE_clEv2
_ZZL23CATCH2_INTERNAL_TEST_15vENKUlvE_clEv2
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBayesModels.cc.gcov.html b/html/BayesNet/tests/TestBayesModels.cc.gcov.html new file mode 100644 index 0000000..322b87d --- /dev/null +++ b/html/BayesNet/tests/TestBayesModels.cc.gcov.html @@ -0,0 +1,346 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBayesModels.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBayesModels.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:94.0 %166156
Test Date:2024-04-30 13:17:26Functions:100.0 %1111
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include <type_traits>
+       8              : #include <catch2/catch_test_macros.hpp>
+       9              : #include <catch2/catch_approx.hpp>
+      10              : #include <catch2/generators/catch_generators.hpp>
+      11              : #include <catch2/matchers/catch_matchers.hpp>
+      12              : #include "bayesnet/classifiers/KDB.h"
+      13              : #include "bayesnet/classifiers/TAN.h"
+      14              : #include "bayesnet/classifiers/SPODE.h"
+      15              : #include "bayesnet/classifiers/TANLd.h"
+      16              : #include "bayesnet/classifiers/KDBLd.h"
+      17              : #include "bayesnet/classifiers/SPODELd.h"
+      18              : #include "bayesnet/ensembles/AODE.h"
+      19              : #include "bayesnet/ensembles/AODELd.h"
+      20              : #include "bayesnet/ensembles/BoostAODE.h"
+      21              : #include "TestUtils.h"
+      22              : 
+      23              : const std::string ACTUAL_VERSION = "1.0.5";
+      24              : 
+      25           32 : TEST_CASE("Test Bayesian Classifiers score & version", "[Models]")
+      26              : {
+      27              :     map <pair<std::string, std::string>, float> scores{
+      28              :         // Diabetes
+      29            0 :         {{"diabetes", "AODE"}, 0.82161}, {{"diabetes", "KDB"}, 0.852865}, {{"diabetes", "SPODE"}, 0.802083}, {{"diabetes", "TAN"}, 0.821615},
+      30            0 :         {{"diabetes", "AODELd"}, 0.8138f}, {{"diabetes", "KDBLd"}, 0.80208f}, {{"diabetes", "SPODELd"}, 0.78646f}, {{"diabetes", "TANLd"}, 0.8099f},  {{"diabetes", "BoostAODE"}, 0.83984f},
+      31              :         // Ecoli
+      32            0 :         {{"ecoli", "AODE"}, 0.889881}, {{"ecoli", "KDB"}, 0.889881}, {{"ecoli", "SPODE"}, 0.880952}, {{"ecoli", "TAN"}, 0.892857},
+      33            0 :         {{"ecoli", "AODELd"}, 0.8869f}, {{"ecoli", "KDBLd"}, 0.875f}, {{"ecoli", "SPODELd"}, 0.84226f}, {{"ecoli", "TANLd"}, 0.86905f}, {{"ecoli", "BoostAODE"}, 0.89583f},
+      34              :         // Glass
+      35            0 :         {{"glass", "AODE"}, 0.79439}, {{"glass", "KDB"}, 0.827103}, {{"glass", "SPODE"}, 0.775701}, {{"glass", "TAN"}, 0.827103},
+      36            0 :         {{"glass", "AODELd"}, 0.79439f}, {{"glass", "KDBLd"}, 0.85047f}, {{"glass", "SPODELd"}, 0.79439f}, {{"glass", "TANLd"}, 0.86449f}, {{"glass", "BoostAODE"}, 0.84579f},
+      37              :         // Iris
+      38            0 :         {{"iris", "AODE"}, 0.973333}, {{"iris", "KDB"}, 0.973333}, {{"iris", "SPODE"}, 0.973333}, {{"iris", "TAN"}, 0.973333},
+      39            0 :         {{"iris", "AODELd"}, 0.973333}, {{"iris", "KDBLd"}, 0.973333}, {{"iris", "SPODELd"}, 0.96f}, {{"iris", "TANLd"}, 0.97333f}, {{"iris", "BoostAODE"}, 0.98f}
+      40         1216 :     };
+      41              :     std::map<std::string, bayesnet::BaseClassifier*> models{
+      42           64 :         {"AODE", new bayesnet::AODE()}, {"AODELd", new bayesnet::AODELd()},
+      43           32 :         {"BoostAODE", new bayesnet::BoostAODE()},
+      44           64 :         {"KDB", new bayesnet::KDB(2)}, {"KDBLd", new bayesnet::KDBLd(2)},
+      45           64 :         {"SPODE", new bayesnet::SPODE(1)}, {"SPODELd", new bayesnet::SPODELd(1)},
+      46           64 :         {"TAN", new bayesnet::TAN()}, {"TANLd", new bayesnet::TANLd()}
+      47          352 :     };
+      48           34 :     std::string name = GENERATE("AODE", "AODELd", "KDB", "KDBLd", "SPODE", "SPODELd", "TAN", "TANLd");
+      49           32 :     auto clf = models[name];
+      50              : 
+      51           32 :     SECTION("Test " + name + " classifier")
+      52              :     {
+      53          144 :         for (const std::string& file_name : { "glass", "iris", "ecoli", "diabetes" }) {
+      54           64 :             auto clf = models[name];
+      55           64 :             auto discretize = name.substr(name.length() - 2) != "Ld";
+      56           64 :             auto raw = RawDatasets(file_name, discretize);
+      57           64 :             clf->fit(raw.Xt, raw.yt, raw.features, raw.className, raw.states);
+      58           64 :             auto score = clf->score(raw.Xt, raw.yt);
+      59           64 :             INFO("Classifier: " + name + " File: " + file_name);
+      60           64 :             REQUIRE(score == Catch::Approx(scores[{file_name, name}]).epsilon(raw.epsilon));
+      61           64 :             REQUIRE(clf->getStatus() == bayesnet::NORMAL);
+      62           64 :         }
+      63           32 :     }
+      64           32 :     SECTION("Library check version")
+      65              :     {
+      66           16 :         INFO("Checking version of " + name + " classifier");
+      67           16 :         REQUIRE(clf->getVersion() == ACTUAL_VERSION);
+      68           48 :     }
+      69           32 :     delete clf;
+      70          384 : }
+      71            4 : TEST_CASE("Models features & Graph", "[Models]")
+      72              : {
+      73              :     auto graph = std::vector<std::string>({ "digraph BayesNet {\nlabel=<BayesNet Test>\nfontsize=30\nfontcolor=blue\nlabelloc=t\nlayout=circo\n",
+      74              :         "class [shape=circle, fontcolor=red, fillcolor=lightblue, style=filled ] \n",
+      75              :         "class -> sepallength", "class -> sepalwidth", "class -> petallength", "class -> petalwidth", "petallength [shape=circle] \n",
+      76              :         "petallength -> sepallength", "petalwidth [shape=circle] \n", "sepallength [shape=circle] \n",
+      77              :         "sepallength -> sepalwidth", "sepalwidth [shape=circle] \n", "sepalwidth -> petalwidth", "}\n"
+      78              :         }
+      79           60 :     );
+      80            4 :     SECTION("Test TAN")
+      81              :     {
+      82            2 :         auto raw = RawDatasets("iris", true);
+      83            2 :         auto clf = bayesnet::TAN();
+      84            2 :         clf.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+      85            2 :         REQUIRE(clf.getNumberOfNodes() == 5);
+      86            2 :         REQUIRE(clf.getNumberOfEdges() == 7);
+      87            2 :         REQUIRE(clf.getNumberOfStates() == 19);
+      88            2 :         REQUIRE(clf.getClassNumStates() == 3);
+      89           18 :         REQUIRE(clf.show() == std::vector<std::string>{"class -> sepallength, sepalwidth, petallength, petalwidth, ", "petallength -> sepallength, ", "petalwidth -> ", "sepallength -> sepalwidth, ", "sepalwidth -> petalwidth, "});
+      90            6 :         REQUIRE(clf.graph("Test") == graph);
+      91            6 :     }
+      92            4 :     SECTION("Test TANLd")
+      93              :     {
+      94            2 :         auto clf = bayesnet::TANLd();
+      95            2 :         auto raw = RawDatasets("iris", false);
+      96            2 :         clf.fit(raw.Xt, raw.yt, raw.features, raw.className, raw.states);
+      97            2 :         REQUIRE(clf.getNumberOfNodes() == 5);
+      98            2 :         REQUIRE(clf.getNumberOfEdges() == 7);
+      99            2 :         REQUIRE(clf.getNumberOfStates() == 19);
+     100            2 :         REQUIRE(clf.getClassNumStates() == 3);
+     101           18 :         REQUIRE(clf.show() == std::vector<std::string>{"class -> sepallength, sepalwidth, petallength, petalwidth, ", "petallength -> sepallength, ", "petalwidth -> ", "sepallength -> sepalwidth, ", "sepalwidth -> petalwidth, "});
+     102            6 :         REQUIRE(clf.graph("Test") == graph);
+     103            6 :     }
+     104           28 : }
+     105            2 : TEST_CASE("Get num features & num edges", "[Models]")
+     106              : {
+     107            2 :     auto raw = RawDatasets("iris", true);
+     108            2 :     auto clf = bayesnet::KDB(2);
+     109            2 :     clf.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+     110            2 :     REQUIRE(clf.getNumberOfNodes() == 5);
+     111            2 :     REQUIRE(clf.getNumberOfEdges() == 8);
+     112            2 : }
+     113              : 
+     114            8 : TEST_CASE("Model predict_proba", "[Models]")
+     115              : {
+     116           10 :     std::string model = GENERATE("TAN", "SPODE", "BoostAODEproba", "BoostAODEvoting");
+     117              :     auto res_prob_tan = std::vector<std::vector<double>>({
+     118              :     { 0.00375671, 0.994457, 0.00178621 },
+     119              :     { 0.00137462, 0.992734, 0.00589123 },
+     120              :     { 0.00137462, 0.992734, 0.00589123 },
+     121              :     { 0.00137462, 0.992734, 0.00589123 },
+     122              :     { 0.00218225, 0.992877, 0.00494094 },
+     123              :     { 0.00494209, 0.0978534, 0.897205 },
+     124              :     { 0.0054192, 0.974275, 0.0203054 },
+     125              :     { 0.00433012, 0.985054, 0.0106159 },
+     126              :     { 0.000860806, 0.996922, 0.00221698 }
+     127           88 :         });
+     128              :     auto res_prob_spode = std::vector<std::vector<double>>({
+     129              :      {0.00419032, 0.994247, 0.00156265},
+     130              :      {0.00172808, 0.993433, 0.00483862},
+     131              :      {0.00172808, 0.993433, 0.00483862},
+     132              :      {0.00172808, 0.993433, 0.00483862},
+     133              :      {0.00279211, 0.993737, 0.00347077},
+     134              :      {0.0120674, 0.357909, 0.630024},
+     135              :      {0.00386239, 0.913919, 0.0822185},
+     136              :      {0.0244389, 0.966447, 0.00911374},
+     137              :      {0.003135, 0.991799, 0.0050661}
+     138           88 :         });
+     139              :     auto res_prob_baode = std::vector<std::vector<double>>({
+     140              :         {0.0112349, 0.962274, 0.0264907},
+     141              :         {0.00371025, 0.950592, 0.0456973},
+     142              :         {0.00371025, 0.950592, 0.0456973},
+     143              :         {0.00371025, 0.950592, 0.0456973},
+     144              :         {0.00369275, 0.84967, 0.146637},
+     145              :         {0.0252205, 0.113564, 0.861215},
+     146              :         {0.0284828, 0.770524, 0.200993},
+     147              :         {0.0213182, 0.857189, 0.121493},
+     148              :         {0.00868436, 0.949494, 0.0418215}
+     149           88 :         });
+     150              :     auto res_prob_voting = std::vector<std::vector<double>>({
+     151              :         {0, 1, 0},
+     152              :         {0, 1, 0},
+     153              :         {0, 1, 0},
+     154              :         {0, 1, 0},
+     155              :         {0, 1, 0},
+     156              :         {0, 0, 1},
+     157              :         {0, 1, 0},
+     158              :         {0, 1, 0},
+     159              :         {0, 1, 0}
+     160           80 :         });
+     161           48 :     std::map<std::string, std::vector<std::vector<double>>> res_prob{ {"TAN", res_prob_tan}, {"SPODE", res_prob_spode} , {"BoostAODEproba", res_prob_baode }, {"BoostAODEvoting", res_prob_voting } };
+     162           80 :     std::map<std::string, bayesnet::BaseClassifier*> models{ {"TAN", new bayesnet::TAN()}, {"SPODE", new bayesnet::SPODE(0)}, {"BoostAODEproba", new bayesnet::BoostAODE(false)}, {"BoostAODEvoting", new bayesnet::BoostAODE(true)} };
+     163            8 :     int init_index = 78;
+     164            8 :     auto raw = RawDatasets("iris", true);
+     165              : 
+     166            8 :     SECTION("Test " + model + " predict_proba")
+     167              :     {
+     168            8 :         auto clf = models[model];
+     169            8 :         clf->fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+     170            8 :         auto y_pred_proba = clf->predict_proba(raw.Xv);
+     171            8 :         auto yt_pred_proba = clf->predict_proba(raw.Xt);
+     172            8 :         auto y_pred = clf->predict(raw.Xv);
+     173            8 :         auto yt_pred = clf->predict(raw.Xt);
+     174            8 :         REQUIRE(y_pred.size() == yt_pred.size(0));
+     175            8 :         REQUIRE(y_pred.size() == y_pred_proba.size());
+     176            8 :         REQUIRE(y_pred.size() == yt_pred_proba.size(0));
+     177            8 :         REQUIRE(y_pred.size() == raw.yv.size());
+     178            8 :         REQUIRE(y_pred_proba[0].size() == 3);
+     179            8 :         REQUIRE(yt_pred_proba.size(1) == y_pred_proba[0].size());
+     180           80 :         for (int i = 0; i < 9; ++i) {
+     181           72 :             auto maxElem = max_element(y_pred_proba[i].begin(), y_pred_proba[i].end());
+     182           72 :             int predictedClass = distance(y_pred_proba[i].begin(), maxElem);
+     183           72 :             REQUIRE(predictedClass == y_pred[i]);
+     184              :             // Check predict is coherent with predict_proba
+     185           72 :             REQUIRE(yt_pred_proba[i].argmax().item<int>() == y_pred[i]);
+     186          288 :             for (int j = 0; j < yt_pred_proba.size(1); j++) {
+     187          216 :                 REQUIRE(yt_pred_proba[i][j].item<double>() == Catch::Approx(y_pred_proba[i][j]).epsilon(raw.epsilon));
+     188              :             }
+     189              :         }
+     190              :         // Check predict_proba values for vectors and tensors
+     191           80 :         for (int i = 0; i < 9; i++) {
+     192           72 :             REQUIRE(y_pred[i] == yt_pred[i].item<int>());
+     193          288 :             for (int j = 0; j < 3; j++) {
+     194          216 :                 REQUIRE(res_prob[model][i][j] == Catch::Approx(y_pred_proba[i + init_index][j]).epsilon(raw.epsilon));
+     195          216 :                 REQUIRE(res_prob[model][i][j] == Catch::Approx(yt_pred_proba[i + init_index][j].item<double>()).epsilon(raw.epsilon));
+     196              :             }
+     197              :         }
+     198            8 :         delete clf;
+     199           16 :     }
+     200          144 : }
+     201              : 
+     202            2 : TEST_CASE("AODE voting-proba", "[Models]")
+     203              : {
+     204            2 :     auto raw = RawDatasets("glass", true);
+     205            2 :     auto clf = bayesnet::AODE(false);
+     206            2 :     clf.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+     207            2 :     auto score_proba = clf.score(raw.Xv, raw.yv);
+     208            2 :     auto pred_proba = clf.predict_proba(raw.Xv);
+     209            8 :     clf.setHyperparameters({
+     210              :         {"predict_voting",true},
+     211              :         });
+     212            4 :     auto score_voting = clf.score(raw.Xv, raw.yv);
+     213            2 :     auto pred_voting = clf.predict_proba(raw.Xv);
+     214            2 :     REQUIRE(score_proba == Catch::Approx(0.79439f).epsilon(raw.epsilon));
+     215            2 :     REQUIRE(score_voting == Catch::Approx(0.78972f).epsilon(raw.epsilon));
+     216            2 :     REQUIRE(pred_voting[67][0] == Catch::Approx(0.888889).epsilon(raw.epsilon));
+     217            2 :     REQUIRE(pred_proba[67][0] == Catch::Approx(0.702184).epsilon(raw.epsilon));
+     218            2 :     REQUIRE(clf.topological_order() == std::vector<std::string>());
+     219           10 : }
+     220            2 : TEST_CASE("SPODELd dataset", "[Models]")
+     221              : {
+     222            2 :     auto raw = RawDatasets("iris", false);
+     223            2 :     auto clf = bayesnet::SPODELd(0);
+     224              :     // raw.dataset.to(torch::kFloat32);
+     225            2 :     clf.fit(raw.dataset, raw.features, raw.className, raw.states);
+     226            2 :     auto score = clf.score(raw.Xt, raw.yt);
+     227            2 :     clf.fit(raw.Xt, raw.yt, raw.features, raw.className, raw.states);
+     228            2 :     auto scoret = clf.score(raw.Xt, raw.yt);
+     229            2 :     REQUIRE(score == Catch::Approx(0.97333f).epsilon(raw.epsilon));
+     230            2 :     REQUIRE(scoret == Catch::Approx(0.97333f).epsilon(raw.epsilon));
+     231            2 : }
+     232            2 : TEST_CASE("KDB with hyperparameters", "[Models]")
+     233              : {
+     234            2 :     auto raw = RawDatasets("glass", true);
+     235            2 :     auto clf = bayesnet::KDB(2);
+     236            2 :     clf.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+     237            2 :     auto score = clf.score(raw.Xv, raw.yv);
+     238           14 :     clf.setHyperparameters({
+     239            0 :         {"k", 3},
+     240            0 :         {"theta", 0.7},
+     241              :         });
+     242            2 :     clf.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+     243            2 :     auto scoret = clf.score(raw.Xv, raw.yv);
+     244            2 :     REQUIRE(score == Catch::Approx(0.827103).epsilon(raw.epsilon));
+     245            2 :     REQUIRE(scoret == Catch::Approx(0.761682).epsilon(raw.epsilon));
+     246           14 : }
+     247            2 : TEST_CASE("Incorrect type of data for SPODELd", "[Models]")
+     248              : {
+     249            2 :     auto raw = RawDatasets("iris", true);
+     250            2 :     auto clf = bayesnet::SPODELd(0);
+     251            2 :     REQUIRE_THROWS_AS(clf.fit(raw.dataset, raw.features, raw.className, raw.states), std::runtime_error);
+     252            2 : }
+     253            2 : TEST_CASE("Predict, predict_proba & score without fitting", "[Models]")
+     254              : {
+     255            2 :     auto clf = bayesnet::AODE();
+     256            4 :     auto raw = RawDatasets("iris", true);
+     257            2 :     std::string message = "Ensemble has not been fitted";
+     258            2 :     REQUIRE_THROWS_AS(clf.predict(raw.Xv), std::logic_error);
+     259            2 :     REQUIRE_THROWS_AS(clf.predict_proba(raw.Xv), std::logic_error);
+     260            2 :     REQUIRE_THROWS_AS(clf.predict(raw.Xt), std::logic_error);
+     261            2 :     REQUIRE_THROWS_AS(clf.predict_proba(raw.Xt), std::logic_error);
+     262            2 :     REQUIRE_THROWS_AS(clf.score(raw.Xv, raw.yv), std::logic_error);
+     263            2 :     REQUIRE_THROWS_AS(clf.score(raw.Xt, raw.yt), std::logic_error);
+     264            2 :     REQUIRE_THROWS_WITH(clf.predict(raw.Xv), message);
+     265            2 :     REQUIRE_THROWS_WITH(clf.predict_proba(raw.Xv), message);
+     266            2 :     REQUIRE_THROWS_WITH(clf.predict(raw.Xt), message);
+     267            2 :     REQUIRE_THROWS_WITH(clf.predict_proba(raw.Xt), message);
+     268            2 :     REQUIRE_THROWS_WITH(clf.score(raw.Xv, raw.yv), message);
+     269            2 :     REQUIRE_THROWS_WITH(clf.score(raw.Xt, raw.yt), message);
+     270            2 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBayesNetwork.cc.func-c.html b/html/BayesNet/tests/TestBayesNetwork.cc.func-c.html new file mode 100644 index 0000000..9c7521c --- /dev/null +++ b/html/BayesNet/tests/TestBayesNetwork.cc.func-c.html @@ -0,0 +1,166 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBayesNetwork.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBayesNetwork.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %293293
Test Date:2024-04-30 13:17:26Functions:100.0 %1313
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZL23CATCH2_INTERNAL_TEST_16v2
_ZL23CATCH2_INTERNAL_TEST_18v2
_ZL23CATCH2_INTERNAL_TEST_20v2
_ZL23CATCH2_INTERNAL_TEST_22v2
_ZL23CATCH2_INTERNAL_TEST_24v2
_ZZL22CATCH2_INTERNAL_TEST_2vENKUlRKT_E0_clIPN8bayesnet4NodeEEEDaS1_14
_ZZL22CATCH2_INTERNAL_TEST_2vENKUlRKT_E1_clIPN8bayesnet4NodeEEEDaS1_14
_ZZL22CATCH2_INTERNAL_TEST_2vENKUlRKT_E2_clIPN8bayesnet4NodeEEEDaS1_14
_ZZL22CATCH2_INTERNAL_TEST_2vENKUlRKT_E3_clIPN8bayesnet4NodeEEEDaS1_14
_ZZL22CATCH2_INTERNAL_TEST_2vENKUlRKT_E4_clIPN8bayesnet4NodeEEEDaS1_14
_ZZL22CATCH2_INTERNAL_TEST_2vENKUlRKT_E_clIPN8bayesnet4NodeEEEDaS1_14
_Z10buildModelRN8bayesnet7NetworkERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EERKS8_22
_ZL22CATCH2_INTERNAL_TEST_2v24
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBayesNetwork.cc.func.html b/html/BayesNet/tests/TestBayesNetwork.cc.func.html new file mode 100644 index 0000000..eca699a --- /dev/null +++ b/html/BayesNet/tests/TestBayesNetwork.cc.func.html @@ -0,0 +1,166 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBayesNetwork.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBayesNetwork.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %293293
Test Date:2024-04-30 13:17:26Functions:100.0 %1313
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_Z10buildModelRN8bayesnet7NetworkERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EERKS8_22
_ZL22CATCH2_INTERNAL_TEST_2v24
_ZL23CATCH2_INTERNAL_TEST_16v2
_ZL23CATCH2_INTERNAL_TEST_18v2
_ZL23CATCH2_INTERNAL_TEST_20v2
_ZL23CATCH2_INTERNAL_TEST_22v2
_ZL23CATCH2_INTERNAL_TEST_24v2
_ZZL22CATCH2_INTERNAL_TEST_2vENKUlRKT_E0_clIPN8bayesnet4NodeEEEDaS1_14
_ZZL22CATCH2_INTERNAL_TEST_2vENKUlRKT_E1_clIPN8bayesnet4NodeEEEDaS1_14
_ZZL22CATCH2_INTERNAL_TEST_2vENKUlRKT_E2_clIPN8bayesnet4NodeEEEDaS1_14
_ZZL22CATCH2_INTERNAL_TEST_2vENKUlRKT_E3_clIPN8bayesnet4NodeEEEDaS1_14
_ZZL22CATCH2_INTERNAL_TEST_2vENKUlRKT_E4_clIPN8bayesnet4NodeEEEDaS1_14
_ZZL22CATCH2_INTERNAL_TEST_2vENKUlRKT_E_clIPN8bayesnet4NodeEEEDaS1_14
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBayesNetwork.cc.gcov.html b/html/BayesNet/tests/TestBayesNetwork.cc.gcov.html new file mode 100644 index 0000000..081232f --- /dev/null +++ b/html/BayesNet/tests/TestBayesNetwork.cc.gcov.html @@ -0,0 +1,527 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBayesNetwork.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBayesNetwork.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %293293
Test Date:2024-04-30 13:17:26Functions:100.0 %1313
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do
+       8              : #include <catch2/catch_test_macros.hpp>
+       9              : #include <catch2/catch_approx.hpp>
+      10              : #include <catch2/generators/catch_generators.hpp>
+      11              : #include <catch2/matchers/catch_matchers.hpp>
+      12              : #include <string>
+      13              : #include "TestUtils.h"
+      14              : #include "bayesnet/network/Network.h"
+      15              : #include "bayesnet/utils/bayesnetUtils.h"
+      16              : 
+      17           22 : void buildModel(bayesnet::Network& net, const std::vector<std::string>& features, const std::string& className)
+      18              : {
+      19           44 :     std::vector<pair<int, int>> network = { {0, 1}, {0, 2}, {1, 3} };
+      20          110 :     for (const auto& feature : features) {
+      21           88 :         net.addNode(feature);
+      22              :     }
+      23           22 :     net.addNode(className);
+      24           88 :     for (const auto& edge : network) {
+      25           66 :         net.addEdge(features.at(edge.first), features.at(edge.second));
+      26              :     }
+      27          110 :     for (const auto& feature : features) {
+      28           88 :         net.addEdge(className, feature);
+      29              :     }
+      30           22 : }
+      31              : 
+      32           24 : TEST_CASE("Test Bayesian Network", "[Network]")
+      33              : {
+      34              : 
+      35           24 :     auto raw = RawDatasets("iris", true);
+      36           24 :     auto net = bayesnet::Network();
+      37           24 :     double threshold = 1e-4;
+      38              : 
+      39           24 :     SECTION("Test get features")
+      40              :     {
+      41            4 :         net.addNode("A");
+      42            2 :         net.addNode("B");
+      43           12 :         REQUIRE(net.getFeatures() == std::vector<std::string>{"A", "B"});
+      44            2 :         net.addNode("C");
+      45           14 :         REQUIRE(net.getFeatures() == std::vector<std::string>{"A", "B", "C"});
+      46           24 :     }
+      47           24 :     SECTION("Test get edges")
+      48              :     {
+      49            4 :         net.addNode("A");
+      50            4 :         net.addNode("B");
+      51            4 :         net.addNode("C");
+      52            8 :         net.addEdge("A", "B");
+      53            6 :         net.addEdge("B", "C");
+      54           10 :         REQUIRE(net.getEdges() == std::vector<pair<std::string, std::string>>{ {"A", "B"}, { "B", "C" } });
+      55            2 :         REQUIRE(net.getNumEdges() == 2);
+      56            6 :         net.addEdge("A", "C");
+      57           12 :         REQUIRE(net.getEdges() == std::vector<pair<std::string, std::string>>{ {"A", "B"}, { "A", "C" }, { "B", "C" } });
+      58            2 :         REQUIRE(net.getNumEdges() == 3);
+      59           24 :     }
+      60           24 :     SECTION("Test getNodes")
+      61              :     {
+      62            4 :         net.addNode("A");
+      63            2 :         net.addNode("B");
+      64            2 :         auto& nodes = net.getNodes();
+      65            6 :         REQUIRE(nodes.count("A") == 1);
+      66            6 :         REQUIRE(nodes.count("B") == 1);
+      67           24 :     }
+      68              : 
+      69           24 :     SECTION("Test fit Network")
+      70              :     {
+      71            2 :         auto net2 = bayesnet::Network();
+      72            2 :         auto net3 = bayesnet::Network();
+      73            2 :         net3.initialize();
+      74            2 :         net2.initialize();
+      75            2 :         net.initialize();
+      76            2 :         buildModel(net, raw.features, raw.className);
+      77            2 :         buildModel(net2, raw.features, raw.className);
+      78            2 :         buildModel(net3, raw.features, raw.className);
+      79              :         std::vector<pair<std::string, std::string>> edges = {
+      80              :             {"class", "sepallength"}, {"class", "sepalwidth"}, {"class", "petallength"},
+      81              :             {"class", "petalwidth" }, {"sepallength", "sepalwidth"}, {"sepallength", "petallength"},
+      82              :             {"sepalwidth", "petalwidth"}
+      83           18 :         };
+      84            2 :         REQUIRE(net.getEdges() == edges);
+      85            2 :         REQUIRE(net2.getEdges() == edges);
+      86            2 :         REQUIRE(net3.getEdges() == edges);
+      87            4 :         std::vector<std::string> features = { "sepallength", "sepalwidth", "petallength", "petalwidth", "class" };
+      88            2 :         REQUIRE(net.getFeatures() == features);
+      89            2 :         REQUIRE(net2.getFeatures() == features);
+      90            2 :         REQUIRE(net3.getFeatures() == features);
+      91            2 :         auto& nodes = net.getNodes();
+      92            2 :         auto& nodes2 = net2.getNodes();
+      93            2 :         auto& nodes3 = net3.getNodes();
+      94              :         // Check Nodes parents & children
+      95           12 :         for (const auto& feature : features) {
+      96              :             // Parents
+      97           10 :             std::vector<std::string> parents, parents2, parents3, children, children2, children3;
+      98           10 :             auto nodeParents = nodes[feature]->getParents();
+      99           10 :             auto nodeParents2 = nodes2[feature]->getParents();
+     100           10 :             auto nodeParents3 = nodes3[feature]->getParents();
+     101           24 :             transform(nodeParents.begin(), nodeParents.end(), back_inserter(parents), [](const auto& p) { return p->getName(); });
+     102           24 :             transform(nodeParents2.begin(), nodeParents2.end(), back_inserter(parents2), [](const auto& p) { return p->getName(); });
+     103           24 :             transform(nodeParents3.begin(), nodeParents3.end(), back_inserter(parents3), [](const auto& p) { return p->getName(); });
+     104           10 :             REQUIRE(parents == parents2);
+     105           10 :             REQUIRE(parents == parents3);
+     106              :             // Children
+     107           10 :             auto nodeChildren = nodes[feature]->getChildren();
+     108           10 :             auto nodeChildren2 = nodes2[feature]->getChildren();
+     109           10 :             auto nodeChildren3 = nodes2[feature]->getChildren();
+     110           24 :             transform(nodeChildren.begin(), nodeChildren.end(), back_inserter(children), [](const auto& p) { return p->getName(); });
+     111           24 :             transform(nodeChildren2.begin(), nodeChildren2.end(), back_inserter(children2), [](const auto& p) { return p->getName(); });
+     112           24 :             transform(nodeChildren3.begin(), nodeChildren3.end(), back_inserter(children3), [](const auto& p) { return p->getName(); });
+     113           10 :             REQUIRE(children == children2);
+     114           10 :             REQUIRE(children == children3);
+     115           10 :         }
+     116              :         // Fit networks
+     117            2 :         net.fit(raw.Xv, raw.yv, raw.weightsv, raw.features, raw.className, raw.states);
+     118            2 :         net2.fit(raw.dataset, raw.weights, raw.features, raw.className, raw.states);
+     119            2 :         net3.fit(raw.Xt, raw.yt, raw.weights, raw.features, raw.className, raw.states);
+     120            2 :         REQUIRE(net.getStates() == net2.getStates());
+     121            2 :         REQUIRE(net.getStates() == net3.getStates());
+     122            2 :         REQUIRE(net.getFeatures() == net2.getFeatures());
+     123            2 :         REQUIRE(net.getFeatures() == net3.getFeatures());
+     124            2 :         REQUIRE(net.getClassName() == net2.getClassName());
+     125            2 :         REQUIRE(net.getClassName() == net3.getClassName());
+     126            2 :         REQUIRE(net.getNodes().size() == net2.getNodes().size());
+     127            2 :         REQUIRE(net.getNodes().size() == net3.getNodes().size());
+     128            2 :         REQUIRE(net.getEdges() == net2.getEdges());
+     129            2 :         REQUIRE(net.getEdges() == net3.getEdges());
+     130            2 :         REQUIRE(net.getNumEdges() == net2.getNumEdges());
+     131            2 :         REQUIRE(net.getNumEdges() == net3.getNumEdges());
+     132            2 :         REQUIRE(net.getClassNumStates() == net2.getClassNumStates());
+     133            2 :         REQUIRE(net.getClassNumStates() == net3.getClassNumStates());
+     134            2 :         REQUIRE(net.getSamples().size(0) == net2.getSamples().size(0));
+     135            2 :         REQUIRE(net.getSamples().size(0) == net3.getSamples().size(0));
+     136            2 :         REQUIRE(net.getSamples().size(1) == net2.getSamples().size(1));
+     137            2 :         REQUIRE(net.getSamples().size(1) == net3.getSamples().size(1));
+     138              :         // Check Conditional Probabilities tables
+     139           12 :         for (int i = 0; i < features.size(); ++i) {
+     140           10 :             auto feature = features.at(i);
+     141           60 :             for (const auto& feature : features) {
+     142           50 :                 auto cpt = nodes[feature]->getCPT();
+     143           50 :                 auto cpt2 = nodes2[feature]->getCPT();
+     144           50 :                 auto cpt3 = nodes3[feature]->getCPT();
+     145           50 :                 REQUIRE(cpt.equal(cpt2));
+     146           50 :                 REQUIRE(cpt.equal(cpt3));
+     147           50 :             }
+     148           10 :         }
+     149           26 :     }
+     150           24 :     SECTION("Test show")
+     151              :     {
+     152            4 :         net.addNode("A");
+     153            4 :         net.addNode("B");
+     154            4 :         net.addNode("C");
+     155            8 :         net.addEdge("A", "B");
+     156            6 :         net.addEdge("A", "C");
+     157            2 :         auto str = net.show();
+     158            2 :         REQUIRE(str.size() == 3);
+     159            2 :         REQUIRE(str[0] == "A -> B, C, ");
+     160            2 :         REQUIRE(str[1] == "B -> ");
+     161            2 :         REQUIRE(str[2] == "C -> ");
+     162           26 :     }
+     163           24 :     SECTION("Test topological_sort")
+     164              :     {
+     165            4 :         net.addNode("A");
+     166            4 :         net.addNode("B");
+     167            4 :         net.addNode("C");
+     168            8 :         net.addEdge("A", "B");
+     169            6 :         net.addEdge("A", "C");
+     170            2 :         auto sorted = net.topological_sort();
+     171            2 :         REQUIRE(sorted.size() == 3);
+     172            2 :         REQUIRE(sorted[0] == "A");
+     173            2 :         bool result = sorted[1] == "B" && sorted[2] == "C";
+     174            2 :         REQUIRE(result);
+     175           26 :     }
+     176           24 :     SECTION("Test graph")
+     177              :     {
+     178            4 :         net.addNode("A");
+     179            4 :         net.addNode("B");
+     180            4 :         net.addNode("C");
+     181            8 :         net.addEdge("A", "B");
+     182            8 :         net.addEdge("A", "C");
+     183            2 :         auto str = net.graph("Test Graph");
+     184            2 :         REQUIRE(str.size() == 7);
+     185            2 :         REQUIRE(str[0] == "digraph BayesNet {\nlabel=<BayesNet Test Graph>\nfontsize=30\nfontcolor=blue\nlabelloc=t\nlayout=circo\n");
+     186            2 :         REQUIRE(str[1] == "A [shape=circle] \n");
+     187            2 :         REQUIRE(str[2] == "A -> B");
+     188            2 :         REQUIRE(str[3] == "A -> C");
+     189            2 :         REQUIRE(str[4] == "B [shape=circle] \n");
+     190            2 :         REQUIRE(str[5] == "C [shape=circle] \n");
+     191            2 :         REQUIRE(str[6] == "}\n");
+     192           26 :     }
+     193           24 :     SECTION("Test predict")
+     194              :     {
+     195            2 :         buildModel(net, raw.features, raw.className);
+     196            2 :         net.fit(raw.Xv, raw.yv, raw.weightsv, raw.features, raw.className, raw.states);
+     197           12 :         std::vector<std::vector<int>> test = { {1, 2, 0, 1, 1}, {0, 1, 2, 0, 1}, {0, 0, 0, 0, 1}, {2, 2, 2, 2, 1} };
+     198            2 :         std::vector<int> y_test = { 2, 2, 0, 2, 1 };
+     199            2 :         auto y_pred = net.predict(test);
+     200            2 :         REQUIRE(y_pred == y_test);
+     201           26 :     }
+     202           24 :     SECTION("Test predict_proba")
+     203              :     {
+     204            2 :         buildModel(net, raw.features, raw.className);
+     205            2 :         net.fit(raw.Xv, raw.yv, raw.weightsv, raw.features, raw.className, raw.states);
+     206           12 :         std::vector<std::vector<int>> test = { {1, 2, 0, 1, 1}, {0, 1, 2, 0, 1}, {0, 0, 0, 0, 1}, {2, 2, 2, 2, 1} };
+     207              :         std::vector<std::vector<double>> y_test = {
+     208              :             {0.450237, 0.0866621, 0.463101},
+     209              :             {0.244443, 0.0925922, 0.662964},
+     210              :             {0.913441, 0.0125857, 0.0739732},
+     211              :             {0.450237, 0.0866621, 0.463101},
+     212              :             {0.0135226, 0.971726, 0.0147519}
+     213           14 :         };
+     214            2 :         auto y_pred = net.predict_proba(test);
+     215            2 :         REQUIRE(y_pred.size() == 5);
+     216            2 :         REQUIRE(y_pred[0].size() == 3);
+     217           12 :         for (int i = 0; i < y_pred.size(); ++i) {
+     218           40 :             for (int j = 0; j < y_pred[i].size(); ++j) {
+     219           30 :                 REQUIRE(y_pred[i][j] == Catch::Approx(y_test[i][j]).margin(threshold));
+     220              :             }
+     221              :         }
+     222           26 :     }
+     223           24 :     SECTION("Test score")
+     224              :     {
+     225            2 :         buildModel(net, raw.features, raw.className);
+     226            2 :         net.fit(raw.Xv, raw.yv, raw.weightsv, raw.features, raw.className, raw.states);
+     227            2 :         auto score = net.score(raw.Xv, raw.yv);
+     228            2 :         REQUIRE(score == Catch::Approx(0.97333333).margin(threshold));
+     229           24 :     }
+     230           24 :     SECTION("Copy constructor")
+     231              :     {
+     232            2 :         buildModel(net, raw.features, raw.className);
+     233            2 :         net.fit(raw.Xv, raw.yv, raw.weightsv, raw.features, raw.className, raw.states);
+     234            2 :         auto net2 = bayesnet::Network(net);
+     235            2 :         REQUIRE(net.getFeatures() == net2.getFeatures());
+     236            2 :         REQUIRE(net.getEdges() == net2.getEdges());
+     237            2 :         REQUIRE(net.getNumEdges() == net2.getNumEdges());
+     238            2 :         REQUIRE(net.getStates() == net2.getStates());
+     239            2 :         REQUIRE(net.getClassName() == net2.getClassName());
+     240            2 :         REQUIRE(net.getClassNumStates() == net2.getClassNumStates());
+     241            2 :         REQUIRE(net.getSamples().size(0) == net2.getSamples().size(0));
+     242            2 :         REQUIRE(net.getSamples().size(1) == net2.getSamples().size(1));
+     243            2 :         REQUIRE(net.getNodes().size() == net2.getNodes().size());
+     244           12 :         for (const auto& feature : net.getFeatures()) {
+     245           10 :             auto& node = net.getNodes().at(feature);
+     246           10 :             auto& node2 = net2.getNodes().at(feature);
+     247           10 :             REQUIRE(node->getName() == node2->getName());
+     248           10 :             REQUIRE(node->getChildren().size() == node2->getChildren().size());
+     249           10 :             REQUIRE(node->getParents().size() == node2->getParents().size());
+     250           10 :             REQUIRE(node->getCPT().equal(node2->getCPT()));
+     251            2 :         }
+     252           26 :     }
+     253           24 :     SECTION("Test oddities")
+     254              :     {
+     255            2 :         buildModel(net, raw.features, raw.className);
+     256              :         // predict without fitting
+     257           12 :         std::vector<std::vector<int>> test = { {1, 2, 0, 1, 1}, {0, 1, 2, 0, 1}, {0, 0, 0, 0, 1}, {2, 2, 2, 2, 1} };
+     258            2 :         auto test_tensor = bayesnet::vectorToTensor(test);
+     259            2 :         REQUIRE_THROWS_AS(net.predict(test), std::logic_error);
+     260            6 :         REQUIRE_THROWS_WITH(net.predict(test), "You must call fit() before calling predict()");
+     261            2 :         REQUIRE_THROWS_AS(net.predict(test_tensor), std::logic_error);
+     262            6 :         REQUIRE_THROWS_WITH(net.predict(test_tensor), "You must call fit() before calling predict()");
+     263            2 :         REQUIRE_THROWS_AS(net.predict_proba(test), std::logic_error);
+     264            6 :         REQUIRE_THROWS_WITH(net.predict_proba(test), "You must call fit() before calling predict_proba()");
+     265            2 :         REQUIRE_THROWS_AS(net.score(raw.Xv, raw.yv), std::logic_error);
+     266            6 :         REQUIRE_THROWS_WITH(net.score(raw.Xv, raw.yv), "You must call fit() before calling predict()");
+     267              :         // predict with wrong data
+     268            2 :         auto netx = bayesnet::Network();
+     269            2 :         buildModel(netx, raw.features, raw.className);
+     270            2 :         netx.fit(raw.Xv, raw.yv, raw.weightsv, raw.features, raw.className, raw.states);
+     271           10 :         std::vector<std::vector<int>> test2 = { {1, 2, 0, 1, 1}, {0, 1, 2, 0, 1}, {0, 0, 0, 0, 1} };
+     272            2 :         auto test_tensor2 = bayesnet::vectorToTensor(test2, false);
+     273            2 :         REQUIRE_THROWS_AS(netx.predict(test2), std::logic_error);
+     274            6 :         REQUIRE_THROWS_WITH(netx.predict(test2), "Sample size (3) does not match the number of features (4)");
+     275            2 :         REQUIRE_THROWS_AS(netx.predict(test_tensor2), std::logic_error);
+     276            6 :         REQUIRE_THROWS_WITH(netx.predict(test_tensor2), "Sample size (3) does not match the number of features (4)");
+     277              :         // fit with wrong data
+     278              :         // Weights
+     279            2 :         auto net2 = bayesnet::Network();
+     280            4 :         REQUIRE_THROWS_AS(net2.fit(raw.Xv, raw.yv, std::vector<double>(), raw.features, raw.className, raw.states), std::invalid_argument);
+     281            2 :         std::string invalid_weights = "Weights (0) must have the same number of elements as samples (150) in Network::fit";
+     282            4 :         REQUIRE_THROWS_WITH(net2.fit(raw.Xv, raw.yv, std::vector<double>(), raw.features, raw.className, raw.states), invalid_weights);
+     283              :         // X & y
+     284            2 :         std::string invalid_labels = "X and y must have the same number of samples in Network::fit (150 != 0)";
+     285            4 :         REQUIRE_THROWS_AS(net2.fit(raw.Xv, std::vector<int>(), raw.weightsv, raw.features, raw.className, raw.states), std::invalid_argument);
+     286            4 :         REQUIRE_THROWS_WITH(net2.fit(raw.Xv, std::vector<int>(), raw.weightsv, raw.features, raw.className, raw.states), invalid_labels);
+     287              :         // Features
+     288            2 :         std::string invalid_features = "X and features must have the same number of features in Network::fit (4 != 0)";
+     289            4 :         REQUIRE_THROWS_AS(net2.fit(raw.Xv, raw.yv, raw.weightsv, std::vector<std::string>(), raw.className, raw.states), std::invalid_argument);
+     290            4 :         REQUIRE_THROWS_WITH(net2.fit(raw.Xv, raw.yv, raw.weightsv, std::vector<std::string>(), raw.className, raw.states), invalid_features);
+     291              :         // Different number of features
+     292            2 :         auto net3 = bayesnet::Network();
+     293            2 :         auto test2y = { 1, 2, 3, 4, 5 };
+     294            2 :         buildModel(net3, raw.features, raw.className);
+     295            2 :         auto features3 = raw.features;
+     296            2 :         features3.pop_back();
+     297            2 :         std::string invalid_features2 = "X and local features must have the same number of features in Network::fit (3 != 4)";
+     298           12 :         REQUIRE_THROWS_AS(net3.fit(test2, test2y, std::vector<double>(5, 0), features3, raw.className, raw.states), std::invalid_argument);
+     299           12 :         REQUIRE_THROWS_WITH(net3.fit(test2, test2y, std::vector<double>(5, 0), features3, raw.className, raw.states), invalid_features2);
+     300              :         // Uninitialized network
+     301            2 :         std::string network_invalid = "The network has not been initialized. You must call addNode() before calling fit()";
+     302            6 :         REQUIRE_THROWS_AS(net2.fit(raw.Xv, raw.yv, raw.weightsv, raw.features, "duck", raw.states), std::invalid_argument);
+     303            6 :         REQUIRE_THROWS_WITH(net2.fit(raw.Xv, raw.yv, raw.weightsv, raw.features, "duck", raw.states), network_invalid);
+     304              :         // Classname
+     305            2 :         std::string invalid_classname = "Class Name not found in Network::features";
+     306            6 :         REQUIRE_THROWS_AS(net.fit(raw.Xv, raw.yv, raw.weightsv, raw.features, "duck", raw.states), std::invalid_argument);
+     307            6 :         REQUIRE_THROWS_WITH(net.fit(raw.Xv, raw.yv, raw.weightsv, raw.features, "duck", raw.states), invalid_classname);
+     308              :         // Invalid feature
+     309            2 :         auto features2 = raw.features;
+     310            2 :         features2.pop_back();
+     311            4 :         features2.push_back("duck");
+     312            2 :         std::string invalid_feature = "Feature duck not found in Network::features";
+     313            2 :         REQUIRE_THROWS_AS(net.fit(raw.Xv, raw.yv, raw.weightsv, features2, raw.className, raw.states), std::invalid_argument);
+     314            2 :         REQUIRE_THROWS_WITH(net.fit(raw.Xv, raw.yv, raw.weightsv, features2, raw.className, raw.states), invalid_feature);
+     315           26 :     }
+     316              : 
+     317           70 : }
+     318            2 : TEST_CASE("Test and empty Node", "[Network]")
+     319              : {
+     320            2 :     auto net = bayesnet::Network();
+     321            6 :     REQUIRE_THROWS_AS(net.addNode(""), std::invalid_argument);
+     322           10 :     REQUIRE_THROWS_WITH(net.addNode(""), "Node name cannot be empty");
+     323            2 : }
+     324            2 : TEST_CASE("Cicle in Network", "[Network]")
+     325              : {
+     326            2 :     auto net = bayesnet::Network();
+     327            4 :     net.addNode("A");
+     328            4 :     net.addNode("B");
+     329            4 :     net.addNode("C");
+     330            8 :     net.addEdge("A", "B");
+     331            6 :     net.addEdge("B", "C");
+     332           10 :     REQUIRE_THROWS_AS(net.addEdge("C", "A"), std::invalid_argument);
+     333           14 :     REQUIRE_THROWS_WITH(net.addEdge("C", "A"), "Adding this edge forms a cycle in the graph.");
+     334            2 : }
+     335            2 : TEST_CASE("Test max threads constructor", "[Network]")
+     336              : {
+     337            2 :     auto net = bayesnet::Network();
+     338            2 :     REQUIRE(net.getMaxThreads() == 0.95f);
+     339            2 :     auto net2 = bayesnet::Network(4);
+     340            2 :     REQUIRE(net2.getMaxThreads() == 4);
+     341            2 :     auto net3 = bayesnet::Network(1.75);
+     342            2 :     REQUIRE(net3.getMaxThreads() == 1.75);
+     343            2 : }
+     344            2 : TEST_CASE("Edges troubles", "[Network]")
+     345              : {
+     346            2 :     auto net = bayesnet::Network();
+     347            4 :     net.addNode("A");
+     348            2 :     net.addNode("B");
+     349           10 :     REQUIRE_THROWS_AS(net.addEdge("A", "C"), std::invalid_argument);
+     350           14 :     REQUIRE_THROWS_WITH(net.addEdge("A", "C"), "Child node C does not exist");
+     351           10 :     REQUIRE_THROWS_AS(net.addEdge("C", "A"), std::invalid_argument);
+     352           14 :     REQUIRE_THROWS_WITH(net.addEdge("C", "A"), "Parent node C does not exist");
+     353            2 : }
+     354            2 : TEST_CASE("Dump CPT", "[Network]")
+     355              : {
+     356            2 :     auto net = bayesnet::Network();
+     357            2 :     auto raw = RawDatasets("iris", true);
+     358            2 :     buildModel(net, raw.features, raw.className);
+     359            2 :     net.fit(raw.Xv, raw.yv, raw.weightsv, raw.features, raw.className, raw.states);
+     360            2 :     auto res = net.dump_cpt();
+     361            2 :     std::string expected = R"(* class: (3) : [3]
+     362              :  0.3333
+     363              :  0.3333
+     364              :  0.3333
+     365              : [ CPUFloatType{3} ]
+     366              : * petallength: (4) : [4, 3, 3]
+     367              : (1,.,.) = 
+     368              :   0.9388  0.1000  0.2000
+     369              :   0.6250  0.0526  0.1667
+     370              :   0.4000  0.0303  0.0196
+     371              : 
+     372              : (2,.,.) = 
+     373              :   0.0204  0.7000  0.4000
+     374              :   0.1250  0.8421  0.1667
+     375              :   0.2000  0.7273  0.0196
+     376              : 
+     377              : (3,.,.) = 
+     378              :   0.0204  0.1000  0.2000
+     379              :   0.1250  0.0526  0.5000
+     380              :   0.2000  0.1818  0.1373
+     381              : 
+     382              : (4,.,.) = 
+     383              :   0.0204  0.1000  0.2000
+     384              :   0.1250  0.0526  0.1667
+     385              :   0.2000  0.0606  0.8235
+     386              : [ CPUFloatType{4,3,3} ]
+     387              : * petalwidth: (3) : [3, 6, 3]
+     388              : (1,.,.) = 
+     389              :   0.5000  0.0417  0.0714
+     390              :   0.3333  0.1111  0.0909
+     391              :   0.5000  0.1000  0.2000
+     392              :   0.7778  0.0909  0.0667
+     393              :   0.8667  0.1000  0.0667
+     394              :   0.9394  0.2500  0.1250
+     395              : 
+     396              : (2,.,.) = 
+     397              :   0.2500  0.9167  0.2857
+     398              :   0.3333  0.7778  0.1818
+     399              :   0.2500  0.8000  0.2000
+     400              :   0.1111  0.8182  0.1333
+     401              :   0.0667  0.7000  0.0667
+     402              :   0.0303  0.5000  0.1250
+     403              : 
+     404              : (3,.,.) = 
+     405              :   0.2500  0.0417  0.6429
+     406              :   0.3333  0.1111  0.7273
+     407              :   0.2500  0.1000  0.6000
+     408              :   0.1111  0.0909  0.8000
+     409              :   0.0667  0.2000  0.8667
+     410              :   0.0303  0.2500  0.7500
+     411              : [ CPUFloatType{3,6,3} ]
+     412              : * sepallength: (3) : [3, 3]
+     413              :  0.8679  0.1321  0.0377
+     414              :  0.0943  0.3019  0.0566
+     415              :  0.0377  0.5660  0.9057
+     416              : [ CPUFloatType{3,3} ]
+     417              : * sepalwidth: (6) : [6, 3, 3]
+     418              : (1,.,.) = 
+     419              :   0.0392  0.5000  0.2857
+     420              :   0.1000  0.4286  0.2500
+     421              :   0.1429  0.2571  0.1887
+     422              : 
+     423              : (2,.,.) = 
+     424              :   0.0196  0.0833  0.1429
+     425              :   0.1000  0.1429  0.2500
+     426              :   0.1429  0.1429  0.1509
+     427              : 
+     428              : (3,.,.) = 
+     429              :   0.0392  0.0833  0.1429
+     430              :   0.1000  0.1429  0.1250
+     431              :   0.1429  0.1714  0.0566
+     432              : 
+     433              : (4,.,.) = 
+     434              :   0.1373  0.1667  0.1429
+     435              :   0.1000  0.1905  0.1250
+     436              :   0.1429  0.1429  0.2453
+     437              : 
+     438              : (5,.,.) = 
+     439              :   0.2549  0.0833  0.1429
+     440              :   0.1000  0.0476  0.1250
+     441              :   0.1429  0.2286  0.2453
+     442              : 
+     443              : (6,.,.) = 
+     444              :   0.5098  0.0833  0.1429
+     445              :   0.5000  0.0476  0.1250
+     446              :   0.2857  0.0571  0.1132
+     447              : [ CPUFloatType{6,3,3} ]
+     448              : )";
+     449            2 :     REQUIRE(res == expected);
+     450            2 : }
+     451              : 
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBayesNode.cc.func-c.html b/html/BayesNet/tests/TestBayesNode.cc.func-c.html new file mode 100644 index 0000000..01de2bd --- /dev/null +++ b/html/BayesNet/tests/TestBayesNode.cc.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBayesNode.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBayesNode.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %6161
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZL22CATCH2_INTERNAL_TEST_2v2
_ZL22CATCH2_INTERNAL_TEST_4v2
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBayesNode.cc.func.html b/html/BayesNet/tests/TestBayesNode.cc.func.html new file mode 100644 index 0000000..a310432 --- /dev/null +++ b/html/BayesNet/tests/TestBayesNode.cc.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBayesNode.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBayesNode.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %6161
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZL22CATCH2_INTERNAL_TEST_2v2
_ZL22CATCH2_INTERNAL_TEST_4v2
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBayesNode.cc.gcov.html b/html/BayesNet/tests/TestBayesNode.cc.gcov.html new file mode 100644 index 0000000..5e9e650 --- /dev/null +++ b/html/BayesNet/tests/TestBayesNode.cc.gcov.html @@ -0,0 +1,166 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBayesNode.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBayesNode.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %6161
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include <catch2/catch_test_macros.hpp>
+       8              : #include <catch2/catch_approx.hpp>
+       9              : #include <catch2/generators/catch_generators.hpp>
+      10              : #include <string>
+      11              : #include "TestUtils.h"
+      12              : #include "bayesnet/network/Network.h"
+      13              : 
+      14              : 
+      15              : 
+      16            2 : TEST_CASE("Test Node children and parents", "[Node]")
+      17              : {
+      18            2 :     auto node = bayesnet::Node("Node");
+      19            2 :     REQUIRE(node.getName() == "Node");
+      20            4 :     auto parent_1 = bayesnet::Node("P1");
+      21            4 :     auto parent_2 = bayesnet::Node("P2");
+      22            4 :     auto child_1 = bayesnet::Node("H1");
+      23            4 :     auto child_2 = bayesnet::Node("H2");
+      24            2 :     auto child_3 = bayesnet::Node("H3");
+      25            2 :     node.addParent(&parent_1);
+      26            2 :     node.addParent(&parent_2);
+      27            2 :     node.addChild(&child_1);
+      28            2 :     node.addChild(&child_2);
+      29            2 :     node.addChild(&child_3);
+      30            2 :     auto parents = node.getParents();
+      31            2 :     auto children = node.getChildren();
+      32            2 :     REQUIRE(parents.size() == 2);
+      33            2 :     REQUIRE(children.size() == 3);
+      34            2 :     REQUIRE(parents[0]->getName() == "P1");
+      35            2 :     REQUIRE(parents[1]->getName() == "P2");
+      36            2 :     REQUIRE(children[0]->getName() == "H1");
+      37            2 :     REQUIRE(children[1]->getName() == "H2");
+      38            2 :     REQUIRE(children[2]->getName() == "H3");
+      39            2 :     node.removeParent(&parent_1);
+      40            2 :     node.removeChild(&child_1);
+      41            2 :     parents = node.getParents();
+      42            2 :     children = node.getChildren();
+      43            2 :     REQUIRE(parents.size() == 1);
+      44            2 :     REQUIRE(children.size() == 2);
+      45            2 :     node.clear();
+      46            2 :     parents = node.getParents();
+      47            2 :     children = node.getChildren();
+      48            2 :     REQUIRE(parents.size() == 0);
+      49            2 :     REQUIRE(children.size() == 0);
+      50            2 : }
+      51            2 : TEST_CASE("TEST MinFill method", "[Node]")
+      52              : {
+      53              :     // Generate a test to test the minFill method of the Node class
+      54              :     // Create a graph with 5 nodes
+      55              :     // The graph is a chain with some additional edges
+      56              :     // 0 -> 1,2,3
+      57              :     // 1 -> 2,4
+      58              :     // 2 -> 3
+      59              :     // 3 -> 4
+      60            4 :     auto node_0 = bayesnet::Node("0");
+      61            4 :     auto node_1 = bayesnet::Node("1");
+      62            4 :     auto node_2 = bayesnet::Node("2");
+      63            4 :     auto node_3 = bayesnet::Node("3");
+      64            2 :     auto node_4 = bayesnet::Node("4");
+      65              :     // node 0
+      66            2 :     node_0.addChild(&node_1);
+      67            2 :     node_0.addChild(&node_2);
+      68            2 :     node_0.addChild(&node_3);
+      69              :     // node 1
+      70            2 :     node_1.addChild(&node_2);
+      71            2 :     node_1.addChild(&node_4);
+      72            2 :     node_1.addParent(&node_0);
+      73              :     // node 2
+      74            2 :     node_2.addChild(&node_3);
+      75            2 :     node_2.addChild(&node_4);
+      76            2 :     node_2.addParent(&node_0);
+      77            2 :     node_2.addParent(&node_1);
+      78              :     // node 3
+      79            2 :     node_3.addChild(&node_4);
+      80            2 :     node_3.addParent(&node_0);
+      81            2 :     node_3.addParent(&node_2);
+      82              :     // node 4
+      83            2 :     node_4.addParent(&node_1);
+      84            2 :     node_4.addParent(&node_3);
+      85            2 :     REQUIRE(node_0.minFill() == 3);
+      86            2 :     REQUIRE(node_1.minFill() == 3);
+      87            2 :     REQUIRE(node_2.minFill() == 6);
+      88            2 :     REQUIRE(node_3.minFill() == 3);
+      89            2 :     REQUIRE(node_4.minFill() == 1);
+      90            2 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBoostAODE.cc.func-c.html b/html/BayesNet/tests/TestBoostAODE.cc.func-c.html new file mode 100644 index 0000000..fc648a1 --- /dev/null +++ b/html/BayesNet/tests/TestBoostAODE.cc.func-c.html @@ -0,0 +1,145 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBoostAODE.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBoostAODE.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.7 %150139
Test Date:2024-04-30 13:17:26Functions:100.0 %1010
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZL22CATCH2_INTERNAL_TEST_2v2
_ZL22CATCH2_INTERNAL_TEST_4v2
_ZL22CATCH2_INTERNAL_TEST_6v2
_ZL22CATCH2_INTERNAL_TEST_8v2
_ZL23CATCH2_INTERNAL_TEST_10v2
_ZL23CATCH2_INTERNAL_TEST_12v2
_ZL23CATCH2_INTERNAL_TEST_15v2
_ZL23CATCH2_INTERNAL_TEST_19v2
_ZL23CATCH2_INTERNAL_TEST_21v2
_ZL23CATCH2_INTERNAL_TEST_23v2
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBoostAODE.cc.func.html b/html/BayesNet/tests/TestBoostAODE.cc.func.html new file mode 100644 index 0000000..85bae0a --- /dev/null +++ b/html/BayesNet/tests/TestBoostAODE.cc.func.html @@ -0,0 +1,145 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBoostAODE.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBoostAODE.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.7 %150139
Test Date:2024-04-30 13:17:26Functions:100.0 %1010
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZL22CATCH2_INTERNAL_TEST_2v2
_ZL22CATCH2_INTERNAL_TEST_4v2
_ZL22CATCH2_INTERNAL_TEST_6v2
_ZL22CATCH2_INTERNAL_TEST_8v2
_ZL23CATCH2_INTERNAL_TEST_10v2
_ZL23CATCH2_INTERNAL_TEST_12v2
_ZL23CATCH2_INTERNAL_TEST_15v2
_ZL23CATCH2_INTERNAL_TEST_19v2
_ZL23CATCH2_INTERNAL_TEST_21v2
_ZL23CATCH2_INTERNAL_TEST_23v2
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestBoostAODE.cc.gcov.html b/html/BayesNet/tests/TestBoostAODE.cc.gcov.html new file mode 100644 index 0000000..457774e --- /dev/null +++ b/html/BayesNet/tests/TestBoostAODE.cc.gcov.html @@ -0,0 +1,289 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestBoostAODE.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestBoostAODE.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.7 %150139
Test Date:2024-04-30 13:17:26Functions:100.0 %1010
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include <type_traits>
+       8              : #include <catch2/catch_test_macros.hpp>
+       9              : #include <catch2/catch_approx.hpp>
+      10              : #include <catch2/generators/catch_generators.hpp>
+      11              : #include "bayesnet/ensembles/BoostAODE.h"
+      12              : #include "TestUtils.h"
+      13              : 
+      14              : 
+      15            2 : TEST_CASE("Feature_select CFS", "[BoostAODE]")
+      16              : {
+      17            2 :     auto raw = RawDatasets("glass", true);
+      18            2 :     auto clf = bayesnet::BoostAODE();
+      19            8 :     clf.setHyperparameters({ {"select_features", "CFS"} });
+      20            2 :     clf.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+      21            2 :     REQUIRE(clf.getNumberOfNodes() == 90);
+      22            2 :     REQUIRE(clf.getNumberOfEdges() == 153);
+      23            2 :     REQUIRE(clf.getNotes().size() == 2);
+      24            2 :     REQUIRE(clf.getNotes()[0] == "Used features in initialization: 6 of 9 with CFS");
+      25            2 :     REQUIRE(clf.getNotes()[1] == "Number of models: 9");
+      26           10 : }
+      27            2 : TEST_CASE("Feature_select IWSS", "[BoostAODE]")
+      28              : {
+      29            2 :     auto raw = RawDatasets("glass", true);
+      30            2 :     auto clf = bayesnet::BoostAODE();
+      31           14 :     clf.setHyperparameters({ {"select_features", "IWSS"}, {"threshold", 0.5 } });
+      32            2 :     clf.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+      33            2 :     REQUIRE(clf.getNumberOfNodes() == 90);
+      34            2 :     REQUIRE(clf.getNumberOfEdges() == 153);
+      35            2 :     REQUIRE(clf.getNotes().size() == 2);
+      36            2 :     REQUIRE(clf.getNotes()[0] == "Used features in initialization: 4 of 9 with IWSS");
+      37            2 :     REQUIRE(clf.getNotes()[1] == "Number of models: 9");
+      38           14 : }
+      39            2 : TEST_CASE("Feature_select FCBF", "[BoostAODE]")
+      40              : {
+      41            2 :     auto raw = RawDatasets("glass", true);
+      42            2 :     auto clf = bayesnet::BoostAODE();
+      43           14 :     clf.setHyperparameters({ {"select_features", "FCBF"}, {"threshold", 1e-7 } });
+      44            2 :     clf.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+      45            2 :     REQUIRE(clf.getNumberOfNodes() == 90);
+      46            2 :     REQUIRE(clf.getNumberOfEdges() == 153);
+      47            2 :     REQUIRE(clf.getNotes().size() == 2);
+      48            2 :     REQUIRE(clf.getNotes()[0] == "Used features in initialization: 5 of 9 with FCBF");
+      49            2 :     REQUIRE(clf.getNotes()[1] == "Number of models: 9");
+      50           14 : }
+      51            2 : TEST_CASE("Test used features in train note and score", "[BoostAODE]")
+      52              : {
+      53            2 :     auto raw = RawDatasets("diabetes", true);
+      54            2 :     auto clf = bayesnet::BoostAODE(true);
+      55           20 :     clf.setHyperparameters({
+      56              :         {"order", "asc"},
+      57              :         {"convergence", true},
+      58              :         {"select_features","CFS"},
+      59              :         });
+      60            2 :     clf.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+      61            2 :     REQUIRE(clf.getNumberOfNodes() == 72);
+      62            2 :     REQUIRE(clf.getNumberOfEdges() == 120);
+      63            2 :     REQUIRE(clf.getNotes().size() == 2);
+      64            2 :     REQUIRE(clf.getNotes()[0] == "Used features in initialization: 6 of 8 with CFS");
+      65            2 :     REQUIRE(clf.getNotes()[1] == "Number of models: 8");
+      66            2 :     auto score = clf.score(raw.Xv, raw.yv);
+      67            2 :     auto scoret = clf.score(raw.Xt, raw.yt);
+      68            2 :     REQUIRE(score == Catch::Approx(0.80078).epsilon(raw.epsilon));
+      69            2 :     REQUIRE(scoret == Catch::Approx(0.80078).epsilon(raw.epsilon));
+      70           18 : }
+      71            2 : TEST_CASE("Voting vs proba", "[BoostAODE]")
+      72              : {
+      73            2 :     auto raw = RawDatasets("iris", true);
+      74            2 :     auto clf = bayesnet::BoostAODE(false);
+      75            2 :     clf.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+      76            2 :     auto score_proba = clf.score(raw.Xv, raw.yv);
+      77            2 :     auto pred_proba = clf.predict_proba(raw.Xv);
+      78            8 :     clf.setHyperparameters({
+      79              :         {"predict_voting",true},
+      80              :         });
+      81            4 :     auto score_voting = clf.score(raw.Xv, raw.yv);
+      82            2 :     auto pred_voting = clf.predict_proba(raw.Xv);
+      83            2 :     REQUIRE(score_proba == Catch::Approx(0.97333).epsilon(raw.epsilon));
+      84            2 :     REQUIRE(score_voting == Catch::Approx(0.98).epsilon(raw.epsilon));
+      85            2 :     REQUIRE(pred_voting[83][2] == Catch::Approx(1.0).epsilon(raw.epsilon));
+      86            2 :     REQUIRE(pred_proba[83][2] == Catch::Approx(0.86121525).epsilon(raw.epsilon));
+      87            2 :     REQUIRE(clf.dump_cpt() == "");
+      88            2 :     REQUIRE(clf.topological_order() == std::vector<std::string>());
+      89           10 : }
+      90            2 : TEST_CASE("Order asc, desc & random", "[BoostAODE]")
+      91              : {
+      92            2 :     auto raw = RawDatasets("glass", true);
+      93              :     std::map<std::string, double> scores{
+      94            0 :         {"asc", 0.83645f }, { "desc", 0.84579f }, { "rand", 0.84112 }
+      95           10 :     };
+      96           14 :     for (const std::string& order : { "asc", "desc", "rand" }) {
+      97            6 :         auto clf = bayesnet::BoostAODE();
+      98           78 :         clf.setHyperparameters({
+      99              :             {"order", order},
+     100              :             {"bisection", false},
+     101            0 :             {"maxTolerance", 1},
+     102              :             {"convergence", false},
+     103              :             });
+     104            6 :         clf.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states);
+     105            6 :         auto score = clf.score(raw.Xv, raw.yv);
+     106            6 :         auto scoret = clf.score(raw.Xt, raw.yt);
+     107            6 :         INFO("BoostAODE order: " + order);
+     108            6 :         REQUIRE(score == Catch::Approx(scores[order]).epsilon(raw.epsilon));
+     109            6 :         REQUIRE(scoret == Catch::Approx(scores[order]).epsilon(raw.epsilon));
+     110            6 :     }
+     111           64 : }
+     112            2 : TEST_CASE("Oddities", "[BoostAODE]")
+     113              : {
+     114            2 :     auto clf = bayesnet::BoostAODE();
+     115            2 :     auto raw = RawDatasets("iris", true);
+     116              :     auto bad_hyper = nlohmann::json{
+     117              :         { { "order", "duck" } },
+     118              :         { { "select_features", "duck" } },
+     119            0 :         { { "maxTolerance", 0 } },
+     120            0 :         { { "maxTolerance", 5 } },
+     121           42 :     };
+     122           10 :     for (const auto& hyper : bad_hyper.items()) {
+     123            8 :         INFO("BoostAODE hyper: " + hyper.value().dump());
+     124            8 :         REQUIRE_THROWS_AS(clf.setHyperparameters(hyper.value()), std::invalid_argument);
+     125           10 :     }
+     126           18 :     REQUIRE_THROWS_AS(clf.setHyperparameters({ {"maxTolerance", 0 } }), std::invalid_argument);
+     127              :     auto bad_hyper_fit = nlohmann::json{
+     128            0 :         { { "select_features","IWSS" }, { "threshold", -0.01 } },
+     129            0 :         { { "select_features","IWSS" }, { "threshold", 0.51 } },
+     130            0 :         { { "select_features","FCBF" }, { "threshold", 1e-8 } },
+     131            0 :         { { "select_features","FCBF" }, { "threshold", 1.01 } },
+     132           66 :     };
+     133           10 :     for (const auto& hyper : bad_hyper_fit.items()) {
+     134            8 :         INFO("BoostAODE hyper: " + hyper.value().dump());
+     135            8 :         clf.setHyperparameters(hyper.value());
+     136            8 :         REQUIRE_THROWS_AS(clf.fit(raw.Xv, raw.yv, raw.features, raw.className, raw.states), std::invalid_argument);
+     137           10 :     }
+     138          110 : }
+     139              : 
+     140            2 : TEST_CASE("Bisection Best", "[BoostAODE]")
+     141              : {
+     142            2 :     auto clf = bayesnet::BoostAODE();
+     143            2 :     auto raw = RawDatasets("kdd_JapaneseVowels", true, 1200, true, false);
+     144           32 :     clf.setHyperparameters({
+     145              :         {"bisection", true},
+     146            0 :         {"maxTolerance", 3},
+     147              :         {"convergence", true},
+     148              :         {"block_update", false},
+     149              :         {"convergence_best", false},
+     150              :         });
+     151            2 :     clf.fit(raw.X_train, raw.y_train, raw.features, raw.className, raw.states);
+     152            2 :     REQUIRE(clf.getNumberOfNodes() == 75);
+     153            2 :     REQUIRE(clf.getNumberOfEdges() == 135);
+     154            2 :     REQUIRE(clf.getNotes().size() == 2);
+     155            2 :     REQUIRE(clf.getNotes().at(0) == "Convergence threshold reached & 9 models eliminated");
+     156            2 :     REQUIRE(clf.getNotes().at(1) == "Number of models: 5");
+     157            2 :     auto score = clf.score(raw.X_test, raw.y_test);
+     158            2 :     auto scoret = clf.score(raw.X_test, raw.y_test);
+     159            2 :     REQUIRE(score == Catch::Approx(1.0f).epsilon(raw.epsilon));
+     160            2 :     REQUIRE(scoret == Catch::Approx(1.0f).epsilon(raw.epsilon));
+     161           26 : }
+     162            2 : TEST_CASE("Bisection Best vs Last", "[BoostAODE]")
+     163              : {
+     164            2 :     auto raw = RawDatasets("kdd_JapaneseVowels", true, 1500, true, false);
+     165            2 :     auto clf = bayesnet::BoostAODE(true);
+     166              :     auto hyperparameters = nlohmann::json{
+     167              :         {"bisection", true},
+     168            0 :         {"maxTolerance", 3},
+     169              :         {"convergence", true},
+     170              :         {"convergence_best", true},
+     171           26 :     };
+     172            2 :     clf.setHyperparameters(hyperparameters);
+     173            2 :     clf.fit(raw.X_train, raw.y_train, raw.features, raw.className, raw.states);
+     174            2 :     auto score_best = clf.score(raw.X_test, raw.y_test);
+     175            2 :     REQUIRE(score_best == Catch::Approx(0.993355f).epsilon(raw.epsilon));
+     176              :     // Now we will set the hyperparameter to use the last accuracy
+     177            2 :     hyperparameters["convergence_best"] = false;
+     178            2 :     clf.setHyperparameters(hyperparameters);
+     179            2 :     clf.fit(raw.X_train, raw.y_train, raw.features, raw.className, raw.states);
+     180            2 :     auto score_last = clf.score(raw.X_test, raw.y_test);
+     181            2 :     REQUIRE(score_last == Catch::Approx(0.996678f).epsilon(raw.epsilon));
+     182           22 : }
+     183              : 
+     184            2 : TEST_CASE("Block Update", "[BoostAODE]")
+     185              : {
+     186            2 :     auto clf = bayesnet::BoostAODE();
+     187            2 :     auto raw = RawDatasets("mfeat-factors", true, 500);
+     188           26 :     clf.setHyperparameters({
+     189              :         {"bisection", true},
+     190              :         {"block_update", true},
+     191            0 :         {"maxTolerance", 3},
+     192              :         {"convergence", true},
+     193              :         });
+     194            2 :     clf.fit(raw.X_train, raw.y_train, raw.features, raw.className, raw.states);
+     195            2 :     REQUIRE(clf.getNumberOfNodes() == 868);
+     196            2 :     REQUIRE(clf.getNumberOfEdges() == 1724);
+     197            2 :     REQUIRE(clf.getNotes().size() == 3);
+     198            2 :     REQUIRE(clf.getNotes()[0] == "Convergence threshold reached & 15 models eliminated");
+     199            2 :     REQUIRE(clf.getNotes()[1] == "Used features in train: 19 of 216");
+     200            2 :     REQUIRE(clf.getNotes()[2] == "Number of models: 4");
+     201            2 :     auto score = clf.score(raw.X_test, raw.y_test);
+     202            2 :     auto scoret = clf.score(raw.X_test, raw.y_test);
+     203            2 :     REQUIRE(score == Catch::Approx(0.99f).epsilon(raw.epsilon));
+     204            2 :     REQUIRE(scoret == Catch::Approx(0.99f).epsilon(raw.epsilon));
+     205              :     //
+     206              :     // std::cout << "Number of nodes " << clf.getNumberOfNodes() << std::endl;
+     207              :     // std::cout << "Number of edges " << clf.getNumberOfEdges() << std::endl;
+     208              :     // std::cout << "Notes size " << clf.getNotes().size() << std::endl;
+     209              :     // for (auto note : clf.getNotes()) {
+     210              :     //     std::cout << note << std::endl;
+     211              :     // }
+     212              :     // std::cout << "Score " << score << std::endl;
+     213           22 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestFeatureSelection.cc.func-c.html b/html/BayesNet/tests/TestFeatureSelection.cc.func-c.html new file mode 100644 index 0000000..3aa12ec --- /dev/null +++ b/html/BayesNet/tests/TestFeatureSelection.cc.func-c.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestFeatureSelection.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestFeatureSelection.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:91.1 %4541
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZL22CATCH2_INTERNAL_TEST_7v2
_ZZL22CATCH2_INTERNAL_TEST_2vENKUlvE_clEv2
_ZL22CATCH2_INTERNAL_TEST_2v8
_Z14build_selectorR11RawDatasetsNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd24
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestFeatureSelection.cc.func.html b/html/BayesNet/tests/TestFeatureSelection.cc.func.html new file mode 100644 index 0000000..018c18c --- /dev/null +++ b/html/BayesNet/tests/TestFeatureSelection.cc.func.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestFeatureSelection.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestFeatureSelection.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:91.1 %4541
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_Z14build_selectorR11RawDatasetsNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd24
_ZL22CATCH2_INTERNAL_TEST_2v8
_ZL22CATCH2_INTERNAL_TEST_7v2
_ZZL22CATCH2_INTERNAL_TEST_2vENKUlvE_clEv2
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestFeatureSelection.cc.gcov.html b/html/BayesNet/tests/TestFeatureSelection.cc.gcov.html new file mode 100644 index 0000000..477e60b --- /dev/null +++ b/html/BayesNet/tests/TestFeatureSelection.cc.gcov.html @@ -0,0 +1,165 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestFeatureSelection.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestFeatureSelection.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:91.1 %4541
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include <catch2/catch_test_macros.hpp>
+       8              : #include <catch2/catch_approx.hpp>
+       9              : #include <catch2/generators/catch_generators.hpp>
+      10              : #include <catch2/matchers/catch_matchers.hpp>
+      11              : #include "bayesnet/utils/BayesMetrics.h"
+      12              : #include "bayesnet/feature_selection/CFS.h"
+      13              : #include "bayesnet/feature_selection/FCBF.h"
+      14              : #include "bayesnet/feature_selection/IWSS.h"
+      15              : #include "TestUtils.h"
+      16              : 
+      17           24 : bayesnet::FeatureSelect* build_selector(RawDatasets& raw, std::string selector, double threshold)
+      18              : {
+      19           24 :     if (selector == "CFS") {
+      20            8 :         return new bayesnet::CFS(raw.dataset, raw.features, raw.className, raw.features.size(), raw.classNumStates, raw.weights);
+      21           16 :     } else if (selector == "FCBF") {
+      22            8 :         return new bayesnet::FCBF(raw.dataset, raw.features, raw.className, raw.features.size(), raw.classNumStates, raw.weights, threshold);
+      23            8 :     } else if (selector == "IWSS") {
+      24            8 :         return new bayesnet::IWSS(raw.dataset, raw.features, raw.className, raw.features.size(), raw.classNumStates, raw.weights, threshold);
+      25              :     }
+      26            0 :     return nullptr;
+      27              : }
+      28              : 
+      29            8 : TEST_CASE("Features Selected", "[FeatureSelection]")
+      30              : {
+      31           10 :     std::string file_name = GENERATE("glass", "iris", "ecoli", "diabetes");
+      32              : 
+      33            8 :     auto raw = RawDatasets(file_name, true);
+      34              : 
+      35            8 :     SECTION("Test features selected, scores and sizes")
+      36              :     {
+      37              :         map<pair<std::string, std::string>, pair<std::vector<int>, std::vector<double>>> results = {
+      38              :             { {"glass", "CFS"}, { { 2, 3, 6, 1, 8, 4 }, {0.365513, 0.42895, 0.369809, 0.298294, 0.240952, 0.200915} } },
+      39              :             { {"iris", "CFS"}, { { 3, 2, 1, 0 }, {0.870521, 0.890375, 0.588155, 0.41843} } },
+      40              :             { {"ecoli", "CFS"}, { { 5, 0, 4, 2, 1, 6 }, {0.512319, 0.565381, 0.486025, 0.41087, 0.331423, 0.266251} } },
+      41              :             { {"diabetes", "CFS"}, { { 1, 5, 7, 6, 4, 2 }, {0.132858, 0.151209, 0.14244, 0.126591, 0.106028, 0.0825904} } },
+      42              :             { {"glass", "IWSS" }, { { 2, 3, 5, 7, 6 }, {0.365513, 0.42895, 0.359907, 0.273784, 0.223346} } },
+      43              :             { {"iris", "IWSS"}, { { 3, 2, 0 }, {0.870521, 0.890375, 0.585426} }},
+      44              :             { {"ecoli", "IWSS"}, { { 5, 6, 0, 1, 4 }, {0.512319, 0.550978, 0.475025, 0.382607, 0.308203} } },
+      45              :             { {"diabetes", "IWSS"}, { { 1, 5, 4, 7, 3 }, {0.132858, 0.151209, 0.136576, 0.122097, 0.0802232} } },
+      46              :             { {"glass", "FCBF" }, { { 2, 3, 5, 7, 6 }, {0.365513, 0.304911, 0.302109, 0.281621, 0.253297} } },
+      47              :             { {"iris", "FCBF"}, {{ 3, 2 }, {0.870521, 0.816401} }},
+      48              :             { {"ecoli", "FCBF"}, {{ 5, 0, 1, 4, 2 }, {0.512319, 0.350406, 0.260905, 0.203132, 0.11229} }},
+      49              :             { {"diabetes", "FCBF"}, {{ 1, 5, 7, 6 }, {0.132858, 0.083191, 0.0480135, 0.0224186} }}
+      50          112 :         };
+      51              :         double threshold;
+      52            8 :         std::string selector;
+      53              :         std::vector<std::pair<std::string, double>> selectors = {
+      54            0 :             { "CFS", 0.0 },
+      55            0 :             { "IWSS", 0.5 },
+      56            0 :             { "FCBF", 1e-7 }
+      57           40 :         };
+      58           32 :         for (const auto item : selectors) {
+      59           24 :             selector = item.first; threshold = item.second;
+      60           24 :             bayesnet::FeatureSelect* featureSelector = build_selector(raw, selector, threshold);
+      61           24 :             featureSelector->fit();
+      62           24 :             INFO("file_name: " << file_name << ", selector: " << selector);
+      63              :             // Features
+      64           24 :             auto expected_features = results.at({ file_name, selector }).first;
+      65           24 :             std::vector<int> selected_features = featureSelector->getFeatures();
+      66           24 :             REQUIRE(selected_features.size() == expected_features.size());
+      67           24 :             REQUIRE(selected_features == expected_features);
+      68              :             // Scores
+      69           24 :             auto expected_scores = results.at({ file_name, selector }).second;
+      70           24 :             std::vector<double> selected_scores = featureSelector->getScores();
+      71           24 :             REQUIRE(selected_scores.size() == selected_features.size());
+      72          136 :             for (int i = 0; i < selected_scores.size(); i++) {
+      73          112 :                 REQUIRE(selected_scores[i] == Catch::Approx(expected_scores[i]).epsilon(raw.epsilon));
+      74              :             }
+      75           24 :             delete featureSelector;
+      76           24 :         }
+      77           16 :     }
+      78           40 : }
+      79            2 : TEST_CASE("Oddities", "[FeatureSelection]")
+      80              : {
+      81            2 :     auto raw = RawDatasets("iris", true);
+      82              :     // FCBF Limits
+      83            2 :     REQUIRE_THROWS_AS(bayesnet::FCBF(raw.dataset, raw.features, raw.className, raw.features.size(), raw.classNumStates, raw.weights, 1e-8), std::invalid_argument);
+      84            6 :     REQUIRE_THROWS_WITH(bayesnet::FCBF(raw.dataset, raw.features, raw.className, raw.features.size(), raw.classNumStates, raw.weights, 1e-8), "Threshold cannot be less than 1e-7");
+      85            2 :     REQUIRE_THROWS_AS(bayesnet::IWSS(raw.dataset, raw.features, raw.className, raw.features.size(), raw.classNumStates, raw.weights, -1e4), std::invalid_argument);
+      86            6 :     REQUIRE_THROWS_WITH(bayesnet::IWSS(raw.dataset, raw.features, raw.className, raw.features.size(), raw.classNumStates, raw.weights, -1e4), "Threshold has to be in [0, 0.5]");
+      87            2 :     REQUIRE_THROWS_AS(bayesnet::IWSS(raw.dataset, raw.features, raw.className, raw.features.size(), raw.classNumStates, raw.weights, 0.501), std::invalid_argument);
+      88            6 :     REQUIRE_THROWS_WITH(bayesnet::IWSS(raw.dataset, raw.features, raw.className, raw.features.size(), raw.classNumStates, raw.weights, 0.501), "Threshold has to be in [0, 0.5]");
+      89            2 : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestUtils.cc.func-c.html b/html/BayesNet/tests/TestUtils.cc.func-c.html new file mode 100644 index 0000000..733296c --- /dev/null +++ b/html/BayesNet/tests/TestUtils.cc.func-c.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestUtils.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestUtils.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:97.4 %7876
Test Date:2024-04-30 13:17:26Functions:100.0 %77
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN11RawDatasets11loadDatasetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb212
_ZN11RawDatasets17discretizeDatasetB5cxx11ERSt6vectorIS0_IfSaIfEESaIS2_EE212
_ZN11RawDatasetsC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbibbb212
_ZN16ShuffleArffFiles4loadERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb212
_ZN16ShuffleArffFilesC2Eib212
_ZN5Paths8datasetsB5cxx11Ev212
_ZZN11RawDatasets11loadDatasetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbENKUlRKT_E_clISt4pairIS5_S5_EEEDaSA_1722
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestUtils.cc.func.html b/html/BayesNet/tests/TestUtils.cc.func.html new file mode 100644 index 0000000..996ffbc --- /dev/null +++ b/html/BayesNet/tests/TestUtils.cc.func.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestUtils.cc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestUtils.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:97.4 %7876
Test Date:2024-04-30 13:17:26Functions:100.0 %77
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN11RawDatasets11loadDatasetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb212
_ZN11RawDatasets17discretizeDatasetB5cxx11ERSt6vectorIS0_IfSaIfEESaIS2_EE212
_ZN11RawDatasetsC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbibbb212
_ZN16ShuffleArffFiles4loadERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb212
_ZN16ShuffleArffFilesC2Eib212
_ZN5Paths8datasetsB5cxx11Ev212
_ZZN11RawDatasets11loadDatasetERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbENKUlRKT_E_clISt4pairIS5_S5_EEEDaSA_1722
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestUtils.cc.gcov.html b/html/BayesNet/tests/TestUtils.cc.gcov.html new file mode 100644 index 0000000..c1458ad --- /dev/null +++ b/html/BayesNet/tests/TestUtils.cc.gcov.html @@ -0,0 +1,201 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestUtils.cc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestUtils.cc (source / functions)CoverageTotalHit
Test:coverage.infoLines:97.4 %7876
Test Date:2024-04-30 13:17:26Functions:100.0 %77
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #include <random>
+       8              : #include "TestUtils.h"
+       9              : #include "bayesnet/config.h"
+      10              : 
+      11              : class Paths {
+      12              : public:
+      13          212 :     static std::string datasets()
+      14              :     {
+      15          636 :         return { data_path.begin(), data_path.end() };
+      16              :     }
+      17              : };
+      18              : 
+      19              : class ShuffleArffFiles : public ArffFiles {
+      20              : public:
+      21          212 :     ShuffleArffFiles(int num_samples = 0, bool shuffle = false) : ArffFiles(), num_samples(num_samples), shuffle(shuffle) {}
+      22          212 :     void load(const std::string& file_name, bool class_last = true)
+      23              :     {
+      24          212 :         ArffFiles::load(file_name, class_last);
+      25          212 :         if (num_samples > 0) {
+      26            6 :             if (num_samples > getY().size()) {
+      27            0 :                 throw std::invalid_argument("num_lines must be less than the number of lines in the file");
+      28              :             }
+      29            6 :             auto indices = std::vector<int>(num_samples);
+      30            6 :             std::iota(indices.begin(), indices.end(), 0);
+      31            6 :             if (shuffle) {
+      32            4 :                 std::mt19937 g{ 173 };
+      33            4 :                 std::shuffle(indices.begin(), indices.end(), g);
+      34              :             }
+      35           12 :             auto XX = std::vector<std::vector<float>>(attributes.size(), std::vector<float>(num_samples));
+      36            6 :             auto yy = std::vector<int>(num_samples);
+      37         6406 :             for (int i = 0; i < num_samples; i++) {
+      38         6400 :                 yy[i] = getY()[indices[i]];
+      39       298000 :                 for (int j = 0; j < attributes.size(); j++) {
+      40       291600 :                     XX[j][i] = X[j][indices[i]];
+      41              :                 }
+      42              :             }
+      43            6 :             X = XX;
+      44            6 :             y = yy;
+      45            6 :         }
+      46          212 :     }
+      47              : private:
+      48              :     int num_samples;
+      49              :     bool shuffle;
+      50              : };
+      51              : 
+      52          212 : RawDatasets::RawDatasets(const std::string& file_name, bool discretize_, int num_samples_, bool shuffle_, bool class_last, bool debug)
+      53              : {
+      54          212 :     num_samples = num_samples_;
+      55          212 :     shuffle = shuffle_;
+      56          212 :     discretize = discretize_;
+      57              :     // Xt can be either discretized or not
+      58              :     // Xv is always discretized
+      59          212 :     loadDataset(file_name, class_last);
+      60          212 :     auto yresized = torch::transpose(yt.view({ yt.size(0), 1 }), 0, 1);
+      61          636 :     dataset = torch::cat({ Xt, yresized }, 0);
+      62          212 :     nSamples = dataset.size(1);
+      63          212 :     weights = torch::full({ nSamples }, 1.0 / nSamples, torch::kDouble);
+      64          212 :     weightsv = std::vector<double>(nSamples, 1.0 / nSamples);
+      65          212 :     classNumStates = discretize ? states.at(className).size() : 0;
+      66          212 :     auto fold = folding::StratifiedKFold(5, yt, 271);
+      67          212 :     auto [train, test] = fold.getFold(0);
+      68          212 :     auto train_t = torch::tensor(train);
+      69          212 :     auto test_t = torch::tensor(test);
+      70              :     // Get train and validation sets
+      71         1060 :     X_train = dataset.index({ torch::indexing::Slice(0, dataset.size(0) - 1), train_t });
+      72          636 :     y_train = dataset.index({ -1, train_t });
+      73         1060 :     X_test = dataset.index({ torch::indexing::Slice(0, dataset.size(0) - 1), test_t });
+      74          636 :     y_test = dataset.index({ -1, test_t });
+      75          212 :     if (debug)
+      76            0 :         std::cout << to_string();
+      77         2120 : }
+      78              : 
+      79          212 : map<std::string, int> RawDatasets::discretizeDataset(std::vector<mdlp::samples_t>& X)
+      80              : {
+      81              : 
+      82          212 :     map<std::string, int> maxes;
+      83          212 :     auto fimdlp = mdlp::CPPFImdlp();
+      84         1934 :     for (int i = 0; i < X.size(); i++) {
+      85         1722 :         fimdlp.fit(X[i], yv);
+      86         1722 :         mdlp::labels_t& xd = fimdlp.transform(X[i]);
+      87         1722 :         maxes[features[i]] = *max_element(xd.begin(), xd.end()) + 1;
+      88         1722 :         Xv.push_back(xd);
+      89              :     }
+      90          424 :     return maxes;
+      91          212 : }
+      92              : 
+      93          212 : void RawDatasets::loadDataset(const std::string& name, bool class_last)
+      94              : {
+      95          212 :     auto handler = ShuffleArffFiles(num_samples, shuffle);
+      96          212 :     handler.load(Paths::datasets() + static_cast<std::string>(name) + ".arff", class_last);
+      97              :     // Get Dataset X, y
+      98          212 :     std::vector<mdlp::samples_t>& X = handler.getX();
+      99          212 :     yv = handler.getY();
+     100              :     // Get className & Features
+     101          212 :     className = handler.getClassName();
+     102          212 :     auto attributes = handler.getAttributes();
+     103         1934 :     transform(attributes.begin(), attributes.end(), back_inserter(features), [](const auto& pair) { return pair.first; });
+     104              :     // Discretize Dataset
+     105          212 :     auto maxValues = discretizeDataset(X);
+     106          212 :     maxValues[className] = *max_element(yv.begin(), yv.end()) + 1;
+     107          212 :     if (discretize) {
+     108              :         // discretize the tensor as well
+     109          170 :         Xt = torch::zeros({ static_cast<int>(Xv.size()), static_cast<int>(Xv[0].size()) }, torch::kInt32);
+     110         1618 :         for (int i = 0; i < features.size(); ++i) {
+     111         1448 :             states[features[i]] = std::vector<int>(maxValues[features[i]]);
+     112         4344 :             iota(begin(states.at(features[i])), end(states.at(features[i])), 0);
+     113         5792 :             Xt.index_put_({ i, "..." }, torch::tensor(Xv[i], torch::kInt32));
+     114              :         }
+     115          170 :         states[className] = std::vector<int>(maxValues[className]);
+     116          510 :         iota(begin(states.at(className)), end(states.at(className)), 0);
+     117              :     } else {
+     118           42 :         Xt = torch::zeros({ static_cast<int>(X.size()), static_cast<int>(X[0].size()) }, torch::kFloat32);
+     119          316 :         for (int i = 0; i < features.size(); ++i) {
+     120         1096 :             Xt.index_put_({ i, "..." }, torch::tensor(X[i]));
+     121              :         }
+     122              :     }
+     123          212 :     yt = torch::tensor(yv, torch::kInt32);
+     124         1934 : }
+     125              : 
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestUtils.h.func-c.html b/html/BayesNet/tests/TestUtils.h.func-c.html new file mode 100644 index 0000000..27c0518 --- /dev/null +++ b/html/BayesNet/tests/TestUtils.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestUtils.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestUtils.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %260
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN11RawDatasets9to_stringB5cxx11Ev0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestUtils.h.func.html b/html/BayesNet/tests/TestUtils.h.func.html new file mode 100644 index 0000000..0c90826 --- /dev/null +++ b/html/BayesNet/tests/TestUtils.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestUtils.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestUtils.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %260
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN11RawDatasets9to_stringB5cxx11Ev0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/TestUtils.h.gcov.html b/html/BayesNet/tests/TestUtils.h.gcov.html new file mode 100644 index 0000000..491585f --- /dev/null +++ b/html/BayesNet/tests/TestUtils.h.gcov.html @@ -0,0 +1,146 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/TestUtils.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests - TestUtils.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %260
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // ***************************************************************
+       2              : // SPDX-FileCopyrightText: Copyright 2024 Ricardo Montañana Gómez
+       3              : // SPDX-FileType: SOURCE
+       4              : // SPDX-License-Identifier: MIT
+       5              : // ***************************************************************
+       6              : 
+       7              : #ifndef TEST_UTILS_H
+       8              : #define TEST_UTILS_H
+       9              : #include <torch/torch.h>
+      10              : #include <string>
+      11              : #include <vector>
+      12              : #include <map>
+      13              : #include <tuple>
+      14              : #include <ArffFiles.h>
+      15              : #include <CPPFImdlp.h>
+      16              : #include <folding.hpp>
+      17              : 
+      18              : 
+      19              : class RawDatasets {
+      20              : public:
+      21              :     RawDatasets(const std::string& file_name, bool discretize_, int num_samples_ = 0, bool shuffle_ = false, bool class_last = true, bool debug = false);
+      22              :     torch::Tensor Xt, yt, dataset, weights;
+      23              :     torch::Tensor X_train, y_train, X_test, y_test;
+      24              :     std::vector<vector<int>> Xv;
+      25              :     std::vector<int> yv;
+      26              :     std::vector<double> weightsv;
+      27              :     std::vector<string> features;
+      28              :     std::string className;
+      29              :     map<std::string, std::vector<int>> states;
+      30              :     int nSamples, classNumStates;
+      31              :     double epsilon = 1e-5;
+      32              :     bool discretize;
+      33              :     int num_samples = 0;
+      34              :     bool shuffle = false;
+      35              : private:
+      36            0 :     std::string to_string()
+      37              :     {
+      38            0 :         std::string features_ = "";
+      39            0 :         for (auto& f : features) {
+      40            0 :             features_ += f + " ";
+      41              :         }
+      42            0 :         std::string states_ = "";
+      43            0 :         for (auto& s : states) {
+      44            0 :             states_ += s.first + " ";
+      45            0 :             for (auto& v : s.second) {
+      46            0 :                 states_ += std::to_string(v) + " ";
+      47              :             }
+      48            0 :             states_ += "\n";
+      49              :         }
+      50            0 :         return "Xt dimensions: " + std::to_string(Xt.size(0)) + " " + std::to_string(Xt.size(1)) + "\n"
+      51            0 :             "Xv dimensions: " + std::to_string(Xv.size()) + " " + std::to_string(Xv[0].size()) + "\n"
+      52            0 :             + "yt dimensions: " + std::to_string(yt.size(0)) + "\n"
+      53            0 :             + "yv dimensions: " + std::to_string(yv.size()) + "\n"
+      54            0 :             + "X_train dimensions: " + std::to_string(X_train.size(0)) + " " + std::to_string(X_train.size(1)) + "\n"
+      55            0 :             + "X_test dimensions: " + std::to_string(X_test.size(0)) + " " + std::to_string(X_test.size(1)) + "\n"
+      56            0 :             + "y_train dimensions: " + std::to_string(y_train.size(0)) + "\n"
+      57            0 :             + "y_test dimensions: " + std::to_string(y_test.size(0)) + "\n"
+      58            0 :             + "features: " + std::to_string(features.size()) + "\n"
+      59            0 :             + features_ + "\n"
+      60            0 :             + "className: " + className + "\n"
+      61            0 :             + "states: " + std::to_string(states.size()) + "\n"
+      62            0 :             + "nSamples: " + std::to_string(nSamples) + "\n"
+      63            0 :             + "classNumStates: " + std::to_string(classNumStates) + "\n"
+      64            0 :             + "states: " + states_ + "\n";
+      65            0 :     }
+      66              :     map<std::string, int> discretizeDataset(std::vector<mdlp::samples_t>& X);
+      67              :     void loadDataset(const std::string& name, bool class_last);
+      68              : };
+      69              : 
+      70              : #endif //TEST_UTILS_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/index-sort-f.html b/html/BayesNet/tests/index-sort-f.html new file mode 100644 index 0000000..6b5fb41 --- /dev/null +++ b/html/BayesNet/tests/index-sort-f.html @@ -0,0 +1,213 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/testsCoverageTotalHit
Test:coverage.infoLines:93.3 %1038968
Test Date:2024-04-30 13:17:26Functions:98.6 %7170
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
TestUtils.h +
0.0%
+
0.0 %260.0 %1
TestBayesMetrics.cc +
69.8%69.8%
+
69.8 %5337100.0 %22
TestBayesNode.cc +
100.0%
+
100.0 %6161100.0 %22
TestFeatureSelection.cc +
91.1%91.1%
+
91.1 %4541100.0 %44
TestUtils.cc +
97.4%97.4%
+
97.4 %7876100.0 %77
TestBayesEnsemble.cc +
98.6%98.6%
+
98.6 %7069100.0 %99
TestBoostAODE.cc +
92.7%92.7%
+
92.7 %150139100.0 %1010
TestBayesModels.cc +
94.0%94.0%
+
94.0 %166156100.0 %1111
TestBayesClassifier.cc +
100.0%
+
100.0 %9696100.0 %1212
TestBayesNetwork.cc +
100.0%
+
100.0 %293293100.0 %1313
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/index-sort-l.html b/html/BayesNet/tests/index-sort-l.html new file mode 100644 index 0000000..e25facb --- /dev/null +++ b/html/BayesNet/tests/index-sort-l.html @@ -0,0 +1,213 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/testsCoverageTotalHit
Test:coverage.infoLines:93.3 %1038968
Test Date:2024-04-30 13:17:26Functions:98.6 %7170
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
TestUtils.h +
0.0%
+
0.0 %260.0 %1
TestBayesMetrics.cc +
69.8%69.8%
+
69.8 %5337100.0 %22
TestFeatureSelection.cc +
91.1%91.1%
+
91.1 %4541100.0 %44
TestBoostAODE.cc +
92.7%92.7%
+
92.7 %150139100.0 %1010
TestBayesModels.cc +
94.0%94.0%
+
94.0 %166156100.0 %1111
TestUtils.cc +
97.4%97.4%
+
97.4 %7876100.0 %77
TestBayesEnsemble.cc +
98.6%98.6%
+
98.6 %7069100.0 %99
TestBayesNode.cc +
100.0%
+
100.0 %6161100.0 %22
TestBayesClassifier.cc +
100.0%
+
100.0 %9696100.0 %1212
TestBayesNetwork.cc +
100.0%
+
100.0 %293293100.0 %1313
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/index.html b/html/BayesNet/tests/index.html new file mode 100644 index 0000000..8981549 --- /dev/null +++ b/html/BayesNet/tests/index.html @@ -0,0 +1,213 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/testsCoverageTotalHit
Test:coverage.infoLines:93.3 %1038968
Test Date:2024-04-30 13:17:26Functions:98.6 %7170
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
TestBayesClassifier.cc +
100.0%
+
100.0 %9696100.0 %1212
TestBayesEnsemble.cc +
98.6%98.6%
+
98.6 %7069100.0 %99
TestBayesMetrics.cc +
69.8%69.8%
+
69.8 %5337100.0 %22
TestBayesModels.cc +
94.0%94.0%
+
94.0 %166156100.0 %1111
TestBayesNetwork.cc +
100.0%
+
100.0 %293293100.0 %1313
TestBayesNode.cc +
100.0%
+
100.0 %6161100.0 %22
TestBoostAODE.cc +
92.7%92.7%
+
92.7 %150139100.0 %1010
TestFeatureSelection.cc +
91.1%91.1%
+
91.1 %4541100.0 %44
TestUtils.cc +
97.4%97.4%
+
97.4 %7876100.0 %77
TestUtils.h +
0.0%
+
0.0 %260.0 %1
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/Files/ArffFiles.h.func-c.html b/html/BayesNet/tests/lib/Files/ArffFiles.h.func-c.html new file mode 100644 index 0000000..5220cc8 --- /dev/null +++ b/html/BayesNet/tests/lib/Files/ArffFiles.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/Files/ArffFiles.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/Files - ArffFiles.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN9ArffFilesC2Ev874
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/Files/ArffFiles.h.func.html b/html/BayesNet/tests/lib/Files/ArffFiles.h.func.html new file mode 100644 index 0000000..542d715 --- /dev/null +++ b/html/BayesNet/tests/lib/Files/ArffFiles.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/Files/ArffFiles.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/Files - ArffFiles.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN9ArffFilesC2Ev874
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/Files/ArffFiles.h.gcov.html b/html/BayesNet/tests/lib/Files/ArffFiles.h.gcov.html new file mode 100644 index 0000000..f7c4534 --- /dev/null +++ b/html/BayesNet/tests/lib/Files/ArffFiles.h.gcov.html @@ -0,0 +1,109 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/Files/ArffFiles.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/Files - ArffFiles.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #ifndef ARFFFILES_H
+       2              : #define ARFFFILES_H
+       3              : 
+       4              : #include <string>
+       5              : #include <vector>
+       6              : 
+       7              : class ArffFiles {
+       8              : public:
+       9          874 :     ArffFiles() = default;
+      10              :     void load(const std::string&, bool = true);
+      11              :     void load(const std::string&, const std::string&);
+      12              :     std::vector<std::string> getLines() const;
+      13              :     unsigned long int getSize() const;
+      14              :     std::string getClassName() const;
+      15              :     std::string getClassType() const;
+      16              :     static std::string trim(const std::string&);
+      17              :     std::vector<std::vector<float>>& getX();
+      18              :     std::vector<int>& getY();
+      19              :     std::vector<std::pair<std::string, std::string>> getAttributes() const;
+      20              :     static std::vector<int> factorize(const std::vector<std::string>& labels_t);
+      21              : protected:
+      22              :     std::vector<std::string> lines;
+      23              :     std::vector<std::pair<std::string, std::string>> attributes;
+      24              :     std::string className;
+      25              :     std::string classType;
+      26              :     std::vector<std::vector<float>> X;
+      27              :     std::vector<int> y;
+      28              :     int maxLines = 0;
+      29              :     void generateDataset(int);
+      30              :     void loadCommon(const std::string&);
+      31              : };
+      32              : 
+      33              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/Files/index-sort-f.html b/html/BayesNet/tests/lib/Files/index-sort-f.html new file mode 100644 index 0000000..4bdb05d --- /dev/null +++ b/html/BayesNet/tests/lib/Files/index-sort-f.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/Files + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/FilesCoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
ArffFiles.h +
100.0%
+
100.0 %11100.0 %11
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/Files/index-sort-l.html b/html/BayesNet/tests/lib/Files/index-sort-l.html new file mode 100644 index 0000000..c7d2301 --- /dev/null +++ b/html/BayesNet/tests/lib/Files/index-sort-l.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/Files + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/FilesCoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
ArffFiles.h +
100.0%
+
100.0 %11100.0 %11
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/Files/index.html b/html/BayesNet/tests/lib/Files/index.html new file mode 100644 index 0000000..5e78865 --- /dev/null +++ b/html/BayesNet/tests/lib/Files/index.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/Files + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/FilesCoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
ArffFiles.h +
100.0%
+
100.0 %11100.0 %11
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/catch_approx.hpp.func-c.html b/html/BayesNet/tests/lib/catch2/src/catch2/catch_approx.hpp.func-c.html new file mode 100644 index 0000000..b2073a1 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/catch_approx.hpp.func-c.html @@ -0,0 +1,117 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/catch_approx.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2 - catch_approx.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1313
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch6Approx6marginIdvEERS0_RKT_32
_ZN5Catch6ApproxC2IfvEERKT_84
_ZN5Catch6Approx7epsilonIdvEERS0_RKT_892
_ZN5CatcheqIdvEEbRKT_RKNS_6ApproxE924
_ZN5CatcheqIfvEEbRKT_RKNS_6ApproxE108
_ZN5CatcheqIdvEEbRKT_RKNS_6ApproxE816
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/catch_approx.hpp.func.html b/html/BayesNet/tests/lib/catch2/src/catch2/catch_approx.hpp.func.html new file mode 100644 index 0000000..61a731c --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/catch_approx.hpp.func.html @@ -0,0 +1,117 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/catch_approx.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2 - catch_approx.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1313
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch6Approx6marginIdvEERS0_RKT_32
_ZN5Catch6Approx7epsilonIdvEERS0_RKT_892
_ZN5Catch6ApproxC2IfvEERKT_84
_ZN5CatcheqIdvEEbRKT_RKNS_6ApproxE924
_ZN5CatcheqIdvEEbRKT_RKNS_6ApproxE816
_ZN5CatcheqIfvEEbRKT_RKNS_6ApproxE108
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/catch_approx.hpp.gcov.html b/html/BayesNet/tests/lib/catch2/src/catch2/catch_approx.hpp.gcov.html new file mode 100644 index 0000000..8391bce --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/catch_approx.hpp.gcov.html @@ -0,0 +1,204 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/catch_approx.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2 - catch_approx.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1313
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : 
+       2              : //              Copyright Catch2 Authors
+       3              : // Distributed under the Boost Software License, Version 1.0.
+       4              : //   (See accompanying file LICENSE.txt or copy at
+       5              : //        https://www.boost.org/LICENSE_1_0.txt)
+       6              : 
+       7              : // SPDX-License-Identifier: BSL-1.0
+       8              : #ifndef CATCH_APPROX_HPP_INCLUDED
+       9              : #define CATCH_APPROX_HPP_INCLUDED
+      10              : 
+      11              : #include <catch2/catch_tostring.hpp>
+      12              : 
+      13              : #include <type_traits>
+      14              : 
+      15              : namespace Catch {
+      16              : 
+      17              :     class Approx {
+      18              :     private:
+      19              :         bool equalityComparisonImpl(double other) const;
+      20              :         // Sets and validates the new margin (margin >= 0)
+      21              :         void setMargin(double margin);
+      22              :         // Sets and validates the new epsilon (0 < epsilon < 1)
+      23              :         void setEpsilon(double epsilon);
+      24              : 
+      25              :     public:
+      26              :         explicit Approx ( double value );
+      27              : 
+      28              :         static Approx custom();
+      29              : 
+      30              :         Approx operator-() const;
+      31              : 
+      32              :         template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
+      33              :         Approx operator()( T const& value ) const {
+      34              :             Approx approx( static_cast<double>(value) );
+      35              :             approx.m_epsilon = m_epsilon;
+      36              :             approx.m_margin = m_margin;
+      37              :             approx.m_scale = m_scale;
+      38              :             return approx;
+      39              :         }
+      40              : 
+      41              :         template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
+      42           84 :         explicit Approx( T const& value ): Approx(static_cast<double>(value))
+      43           84 :         {}
+      44              : 
+      45              : 
+      46              :         template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
+      47          924 :         friend bool operator == ( const T& lhs, Approx const& rhs ) {
+      48          924 :             auto lhs_v = static_cast<double>(lhs);
+      49          924 :             return rhs.equalityComparisonImpl(lhs_v);
+      50              :         }
+      51              : 
+      52              :         template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
+      53              :         friend bool operator == ( Approx const& lhs, const T& rhs ) {
+      54              :             return operator==( rhs, lhs );
+      55              :         }
+      56              : 
+      57              :         template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
+      58              :         friend bool operator != ( T const& lhs, Approx const& rhs ) {
+      59              :             return !operator==( lhs, rhs );
+      60              :         }
+      61              : 
+      62              :         template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
+      63              :         friend bool operator != ( Approx const& lhs, T const& rhs ) {
+      64              :             return !operator==( rhs, lhs );
+      65              :         }
+      66              : 
+      67              :         template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
+      68              :         friend bool operator <= ( T const& lhs, Approx const& rhs ) {
+      69              :             return static_cast<double>(lhs) < rhs.m_value || lhs == rhs;
+      70              :         }
+      71              : 
+      72              :         template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
+      73              :         friend bool operator <= ( Approx const& lhs, T const& rhs ) {
+      74              :             return lhs.m_value < static_cast<double>(rhs) || lhs == rhs;
+      75              :         }
+      76              : 
+      77              :         template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
+      78              :         friend bool operator >= ( T const& lhs, Approx const& rhs ) {
+      79              :             return static_cast<double>(lhs) > rhs.m_value || lhs == rhs;
+      80              :         }
+      81              : 
+      82              :         template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
+      83              :         friend bool operator >= ( Approx const& lhs, T const& rhs ) {
+      84              :             return lhs.m_value > static_cast<double>(rhs) || lhs == rhs;
+      85              :         }
+      86              : 
+      87              :         template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
+      88          892 :         Approx& epsilon( T const& newEpsilon ) {
+      89          892 :             const auto epsilonAsDouble = static_cast<double>(newEpsilon);
+      90          892 :             setEpsilon(epsilonAsDouble);
+      91          892 :             return *this;
+      92              :         }
+      93              : 
+      94              :         template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
+      95           32 :         Approx& margin( T const& newMargin ) {
+      96           32 :             const auto marginAsDouble = static_cast<double>(newMargin);
+      97           32 :             setMargin(marginAsDouble);
+      98           32 :             return *this;
+      99              :         }
+     100              : 
+     101              :         template <typename T, typename = std::enable_if_t<std::is_constructible<double, T>::value>>
+     102              :         Approx& scale( T const& newScale ) {
+     103              :             m_scale = static_cast<double>(newScale);
+     104              :             return *this;
+     105              :         }
+     106              : 
+     107              :         std::string toString() const;
+     108              : 
+     109              :     private:
+     110              :         double m_epsilon;
+     111              :         double m_margin;
+     112              :         double m_scale;
+     113              :         double m_value;
+     114              :     };
+     115              : 
+     116              : namespace literals {
+     117              :     Approx operator ""_a(long double val);
+     118              :     Approx operator ""_a(unsigned long long val);
+     119              : } // end namespace literals
+     120              : 
+     121              : template<>
+     122              : struct StringMaker<Catch::Approx> {
+     123              :     static std::string convert(Catch::Approx const& value);
+     124              : };
+     125              : 
+     126              : } // end namespace Catch
+     127              : 
+     128              : #endif // CATCH_APPROX_HPP_INCLUDED
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/catch_message.hpp.func-c.html b/html/BayesNet/tests/lib/catch2/src/catch2/catch_message.hpp.func-c.html new file mode 100644 index 0000000..cab06ac --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/catch_message.hpp.func-c.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/catch_message.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2 - catch_message.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %66
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch14MessageBuilderC2ENS_9StringRefERKNS_14SourceLineInfoENS_9ResultWas6OfTypeE126
_ZNO5Catch14MessageBuilderlsIA12_cEEOS0_RKT_198
_ZNO5Catch14MessageBuilderlsIA12_cEEOS0_RKT_24
_ZNO5Catch14MessageBuilderlsIA13_cEEOS0_RKT_24
_ZNO5Catch14MessageBuilderlsINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEOS0_RKT_150
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/catch_message.hpp.func.html b/html/BayesNet/tests/lib/catch2/src/catch2/catch_message.hpp.func.html new file mode 100644 index 0000000..bd1f876 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/catch_message.hpp.func.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/catch_message.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2 - catch_message.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %66
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch14MessageBuilderC2ENS_9StringRefERKNS_14SourceLineInfoENS_9ResultWas6OfTypeE126
_ZNO5Catch14MessageBuilderlsIA12_cEEOS0_RKT_198
_ZNO5Catch14MessageBuilderlsIA12_cEEOS0_RKT_24
_ZNO5Catch14MessageBuilderlsIA13_cEEOS0_RKT_24
_ZNO5Catch14MessageBuilderlsINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEOS0_RKT_150
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/catch_message.hpp.gcov.html b/html/BayesNet/tests/lib/catch2/src/catch2/catch_message.hpp.gcov.html new file mode 100644 index 0000000..eb68368 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/catch_message.hpp.gcov.html @@ -0,0 +1,226 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/catch_message.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2 - catch_message.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %66
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : 
+       2              : //              Copyright Catch2 Authors
+       3              : // Distributed under the Boost Software License, Version 1.0.
+       4              : //   (See accompanying file LICENSE.txt or copy at
+       5              : //        https://www.boost.org/LICENSE_1_0.txt)
+       6              : 
+       7              : // SPDX-License-Identifier: BSL-1.0
+       8              : #ifndef CATCH_MESSAGE_HPP_INCLUDED
+       9              : #define CATCH_MESSAGE_HPP_INCLUDED
+      10              : 
+      11              : #include <catch2/internal/catch_config_prefix_messages.hpp>
+      12              : #include <catch2/internal/catch_result_type.hpp>
+      13              : #include <catch2/internal/catch_reusable_string_stream.hpp>
+      14              : #include <catch2/internal/catch_stream_end_stop.hpp>
+      15              : #include <catch2/internal/catch_message_info.hpp>
+      16              : #include <catch2/catch_tostring.hpp>
+      17              : #include <catch2/interfaces/catch_interfaces_capture.hpp>
+      18              : 
+      19              : #include <string>
+      20              : #include <vector>
+      21              : 
+      22              : namespace Catch {
+      23              : 
+      24              :     struct SourceLineInfo;
+      25              :     class IResultCapture;
+      26              : 
+      27              :     struct MessageStream {
+      28              : 
+      29              :         template<typename T>
+      30              :         MessageStream& operator << ( T const& value ) {
+      31              :             m_stream << value;
+      32              :             return *this;
+      33              :         }
+      34              : 
+      35              :         ReusableStringStream m_stream;
+      36              :     };
+      37              : 
+      38              :     struct MessageBuilder : MessageStream {
+      39          126 :         MessageBuilder( StringRef macroName,
+      40              :                         SourceLineInfo const& lineInfo,
+      41          126 :                         ResultWas::OfType type ):
+      42          126 :             m_info(macroName, lineInfo, type) {}
+      43              : 
+      44              :         template<typename T>
+      45          198 :         MessageBuilder&& operator << ( T const& value ) && {
+      46          198 :             m_stream << value;
+      47          198 :             return CATCH_MOVE(*this);
+      48              :         }
+      49              : 
+      50              :         MessageInfo m_info;
+      51              :     };
+      52              : 
+      53              :     class ScopedMessage {
+      54              :     public:
+      55              :         explicit ScopedMessage( MessageBuilder&& builder );
+      56              :         ScopedMessage( ScopedMessage& duplicate ) = delete;
+      57              :         ScopedMessage( ScopedMessage&& old ) noexcept;
+      58              :         ~ScopedMessage();
+      59              : 
+      60              :         MessageInfo m_info;
+      61              :         bool m_moved = false;
+      62              :     };
+      63              : 
+      64              :     class Capturer {
+      65              :         std::vector<MessageInfo> m_messages;
+      66              :         IResultCapture& m_resultCapture;
+      67              :         size_t m_captured = 0;
+      68              :     public:
+      69              :         Capturer( StringRef macroName, SourceLineInfo const& lineInfo, ResultWas::OfType resultType, StringRef names );
+      70              : 
+      71              :         Capturer(Capturer const&) = delete;
+      72              :         Capturer& operator=(Capturer const&) = delete;
+      73              : 
+      74              :         ~Capturer();
+      75              : 
+      76              :         void captureValue( size_t index, std::string const& value );
+      77              : 
+      78              :         template<typename T>
+      79              :         void captureValues( size_t index, T const& value ) {
+      80              :             captureValue( index, Catch::Detail::stringify( value ) );
+      81              :         }
+      82              : 
+      83              :         template<typename T, typename... Ts>
+      84              :         void captureValues( size_t index, T const& value, Ts const&... values ) {
+      85              :             captureValue( index, Catch::Detail::stringify(value) );
+      86              :             captureValues( index+1, values... );
+      87              :         }
+      88              :     };
+      89              : 
+      90              : } // end namespace Catch
+      91              : 
+      92              : ///////////////////////////////////////////////////////////////////////////////
+      93              : #define INTERNAL_CATCH_MSG( macroName, messageType, resultDisposition, ... ) \
+      94              :     do { \
+      95              :         Catch::AssertionHandler catchAssertionHandler( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::StringRef(), resultDisposition ); \
+      96              :         catchAssertionHandler.handleMessage( messageType, ( Catch::MessageStream() << __VA_ARGS__ + ::Catch::StreamEndStop() ).m_stream.str() ); \
+      97              :         INTERNAL_CATCH_REACT( catchAssertionHandler ) \
+      98              :     } while( false )
+      99              : 
+     100              : ///////////////////////////////////////////////////////////////////////////////
+     101              : #define INTERNAL_CATCH_CAPTURE( varName, macroName, ... ) \
+     102              :     Catch::Capturer varName( macroName##_catch_sr,        \
+     103              :                              CATCH_INTERNAL_LINEINFO,     \
+     104              :                              Catch::ResultWas::Info,      \
+     105              :                              #__VA_ARGS__##_catch_sr );   \
+     106              :     varName.captureValues( 0, __VA_ARGS__ )
+     107              : 
+     108              : ///////////////////////////////////////////////////////////////////////////////
+     109              : #define INTERNAL_CATCH_INFO( macroName, log ) \
+     110              :     const Catch::ScopedMessage INTERNAL_CATCH_UNIQUE_NAME( scopedMessage )( Catch::MessageBuilder( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log )
+     111              : 
+     112              : ///////////////////////////////////////////////////////////////////////////////
+     113              : #define INTERNAL_CATCH_UNSCOPED_INFO( macroName, log ) \
+     114              :     Catch::getResultCapture().emplaceUnscopedMessage( Catch::MessageBuilder( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log )
+     115              : 
+     116              : 
+     117              : #if defined(CATCH_CONFIG_PREFIX_MESSAGES) && !defined(CATCH_CONFIG_DISABLE)
+     118              : 
+     119              :   #define CATCH_INFO( msg ) INTERNAL_CATCH_INFO( "CATCH_INFO", msg )
+     120              :   #define CATCH_UNSCOPED_INFO( msg ) INTERNAL_CATCH_UNSCOPED_INFO( "CATCH_UNSCOPED_INFO", msg )
+     121              :   #define CATCH_WARN( msg ) INTERNAL_CATCH_MSG( "CATCH_WARN", Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, msg )
+     122              :   #define CATCH_CAPTURE( ... ) INTERNAL_CATCH_CAPTURE( INTERNAL_CATCH_UNIQUE_NAME(capturer), "CATCH_CAPTURE", __VA_ARGS__ )
+     123              : 
+     124              : #elif defined(CATCH_CONFIG_PREFIX_MESSAGES) && defined(CATCH_CONFIG_DISABLE)
+     125              : 
+     126              :   #define CATCH_INFO( msg )          (void)(0)
+     127              :   #define CATCH_UNSCOPED_INFO( msg ) (void)(0)
+     128              :   #define CATCH_WARN( msg )          (void)(0)
+     129              :   #define CATCH_CAPTURE( ... )       (void)(0)
+     130              : 
+     131              : #elif !defined(CATCH_CONFIG_PREFIX_MESSAGES) && !defined(CATCH_CONFIG_DISABLE)
+     132              : 
+     133              :   #define INFO( msg ) INTERNAL_CATCH_INFO( "INFO", msg )
+     134              :   #define UNSCOPED_INFO( msg ) INTERNAL_CATCH_UNSCOPED_INFO( "UNSCOPED_INFO", msg )
+     135              :   #define WARN( msg ) INTERNAL_CATCH_MSG( "WARN", Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, msg )
+     136              :   #define CAPTURE( ... ) INTERNAL_CATCH_CAPTURE( INTERNAL_CATCH_UNIQUE_NAME(capturer), "CAPTURE", __VA_ARGS__ )
+     137              : 
+     138              : #elif !defined(CATCH_CONFIG_PREFIX_MESSAGES) && defined(CATCH_CONFIG_DISABLE)
+     139              : 
+     140              :   #define INFO( msg )          (void)(0)
+     141              :   #define UNSCOPED_INFO( msg ) (void)(0)
+     142              :   #define WARN( msg )          (void)(0)
+     143              :   #define CAPTURE( ... )       (void)(0)
+     144              : 
+     145              : #endif // end of user facing macro declarations
+     146              : 
+     147              : 
+     148              : 
+     149              : 
+     150              : #endif // CATCH_MESSAGE_HPP_INCLUDED
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/catch_tostring.hpp.func-c.html b/html/BayesNet/tests/lib/catch2/src/catch2/catch_tostring.hpp.func-c.html new file mode 100644 index 0000000..c399c98 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/catch_tostring.hpp.func-c.html @@ -0,0 +1,474 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/catch_tostring.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2 - catch_tostring.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %160
Test Date:2024-04-30 13:17:26Functions:0.0 %540
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch11StringMakerIA1_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA11_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA12_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA19_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA1_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA20_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA2_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA34_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA3_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA49_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA50_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA52_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA53_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA5_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA6_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA7_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA99_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerISt6vectorIiSaIiEEvE7convertIS3_EENSt9enable_ifIXsrNS_6Detail18IsStreamInsertableIT_EE5valueENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE4typeERKS9_0
_ZN5Catch11StringMakerIN8bayesnet8status_tEvE7convertIS2_EENSt9enable_ifIXsrNS_6Detail18IsStreamInsertableIT_EE5valueENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE4typeERKS8_0
_ZN5Catch11StringMakerISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EEvE7convertIS9_EENSt9enable_ifIXsrNS_6Detail18IsStreamInsertableIT_EE5valueES7_E4typeERKSF_0
_ZN5Catch11StringMakerISt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESaIS9_EEvE7convertISB_EENSt9enable_ifIXsrNS_6Detail18IsStreamInsertableIT_EE5valueES8_E4typeERKSH_0
_ZN5Catch11StringMakerISt6vectorISt4pairIiiESaIS3_EEvE7convertIS5_EENSt9enable_ifIXsrNS_6Detail18IsStreamInsertableIT_EE5valueENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE4typeERKSB_0
_ZN5Catch11StringMakerISt6vectorIiSaIiEEvE7convertIS3_EENSt9enable_ifIXsrNS_6Detail18IsStreamInsertableIT_EE5valueENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE4typeERKS9_0
_ZN5Catch11StringMakerIbvE7convertB5cxx11Eb0
_ZN5Catch6Detail13catch_strnlenEPKcm0
_ZN5Catch6Detail9stringifyIbEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA11_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA12_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA19_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA1_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA20_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA2_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA34_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA3_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA49_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA50_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA52_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA53_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA5_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA6_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA7_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA99_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIN8bayesnet8status_tEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyINS_6ApproxEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEES7_RKT_0
_ZN5Catch6Detail9stringifyIPKcEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EEEES8_RKT_0
_ZN5Catch6Detail9stringifyISt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_ESaISA_EEEES9_RKT_0
_ZN5Catch6Detail9stringifyISt6vectorISt4pairIiiESaIS4_EEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyISt6vectorIiSaIiEEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIbEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIdEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIfEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIiEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIjEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIlEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyImEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/catch_tostring.hpp.func.html b/html/BayesNet/tests/lib/catch2/src/catch2/catch_tostring.hpp.func.html new file mode 100644 index 0000000..a9cea0a --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/catch_tostring.hpp.func.html @@ -0,0 +1,474 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/catch_tostring.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2 - catch_tostring.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %160
Test Date:2024-04-30 13:17:26Functions:0.0 %540
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch11StringMakerIA1_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA11_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA12_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA19_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA1_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA20_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA2_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA34_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA3_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA49_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA50_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA52_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA53_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA5_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA6_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA7_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerIA99_cvE7convertB5cxx11EPKc0
_ZN5Catch11StringMakerISt6vectorIiSaIiEEvE7convertIS3_EENSt9enable_ifIXsrNS_6Detail18IsStreamInsertableIT_EE5valueENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE4typeERKS9_0
_ZN5Catch11StringMakerIN8bayesnet8status_tEvE7convertIS2_EENSt9enable_ifIXsrNS_6Detail18IsStreamInsertableIT_EE5valueENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE4typeERKS8_0
_ZN5Catch11StringMakerISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EEvE7convertIS9_EENSt9enable_ifIXsrNS_6Detail18IsStreamInsertableIT_EE5valueES7_E4typeERKSF_0
_ZN5Catch11StringMakerISt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESaIS9_EEvE7convertISB_EENSt9enable_ifIXsrNS_6Detail18IsStreamInsertableIT_EE5valueES8_E4typeERKSH_0
_ZN5Catch11StringMakerISt6vectorISt4pairIiiESaIS3_EEvE7convertIS5_EENSt9enable_ifIXsrNS_6Detail18IsStreamInsertableIT_EE5valueENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE4typeERKSB_0
_ZN5Catch11StringMakerISt6vectorIiSaIiEEvE7convertIS3_EENSt9enable_ifIXsrNS_6Detail18IsStreamInsertableIT_EE5valueENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE4typeERKS9_0
_ZN5Catch11StringMakerIbvE7convertB5cxx11Eb0
_ZN5Catch6Detail13catch_strnlenEPKcm0
_ZN5Catch6Detail9stringifyIbEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA11_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA12_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA19_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA1_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA20_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA2_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA34_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA3_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA49_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA50_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA52_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA53_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA5_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA6_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA7_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIA99_cEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIN8bayesnet8status_tEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyINS_6ApproxEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEES7_RKT_0
_ZN5Catch6Detail9stringifyIPKcEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EEEES8_RKT_0
_ZN5Catch6Detail9stringifyISt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_ESaISA_EEEES9_RKT_0
_ZN5Catch6Detail9stringifyISt6vectorISt4pairIiiESaIS4_EEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyISt6vectorIiSaIiEEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIbEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIdEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIfEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIiEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIjEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyIlEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
_ZN5Catch6Detail9stringifyImEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/catch_tostring.hpp.gcov.html b/html/BayesNet/tests/lib/catch2/src/catch2/catch_tostring.hpp.gcov.html new file mode 100644 index 0000000..463687b --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/catch_tostring.hpp.gcov.html @@ -0,0 +1,750 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/catch_tostring.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2 - catch_tostring.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %160
Test Date:2024-04-30 13:17:26Functions:0.0 %540
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : 
+       2              : //              Copyright Catch2 Authors
+       3              : // Distributed under the Boost Software License, Version 1.0.
+       4              : //   (See accompanying file LICENSE.txt or copy at
+       5              : //        https://www.boost.org/LICENSE_1_0.txt)
+       6              : 
+       7              : // SPDX-License-Identifier: BSL-1.0
+       8              : #ifndef CATCH_TOSTRING_HPP_INCLUDED
+       9              : #define CATCH_TOSTRING_HPP_INCLUDED
+      10              : 
+      11              : 
+      12              : #include <vector>
+      13              : #include <cstddef>
+      14              : #include <type_traits>
+      15              : #include <string>
+      16              : 
+      17              : #include <catch2/internal/catch_compiler_capabilities.hpp>
+      18              : #include <catch2/internal/catch_config_wchar.hpp>
+      19              : #include <catch2/internal/catch_reusable_string_stream.hpp>
+      20              : #include <catch2/internal/catch_void_type.hpp>
+      21              : #include <catch2/interfaces/catch_interfaces_enum_values_registry.hpp>
+      22              : 
+      23              : #ifdef CATCH_CONFIG_CPP17_STRING_VIEW
+      24              : #include <string_view>
+      25              : #endif
+      26              : 
+      27              : #ifdef _MSC_VER
+      28              : #pragma warning(push)
+      29              : #pragma warning(disable:4180) // We attempt to stream a function (address) by const&, which MSVC complains about but is harmless
+      30              : #endif
+      31              : 
+      32              : // We need a dummy global operator<< so we can bring it into Catch namespace later
+      33              : struct Catch_global_namespace_dummy{};
+      34              : std::ostream& operator<<(std::ostream&, Catch_global_namespace_dummy);
+      35              : 
+      36              : namespace Catch {
+      37              :     // Bring in global namespace operator<< for ADL lookup in
+      38              :     // `IsStreamInsertable` below.
+      39              :     using ::operator<<;
+      40              : 
+      41              :     namespace Detail {
+      42              : 
+      43            0 :         inline std::size_t catch_strnlen(const char *str, std::size_t n) {
+      44            0 :             auto ret = std::char_traits<char>::find(str, n, '\0');
+      45            0 :             if (ret != nullptr) {
+      46            0 :                 return static_cast<std::size_t>(ret - str);
+      47              :             }
+      48            0 :             return n;
+      49              :         }
+      50              : 
+      51              :         constexpr StringRef unprintableString = "{?}"_sr;
+      52              : 
+      53              :         //! Encases `string in quotes, and optionally escapes invisibles
+      54              :         std::string convertIntoString( StringRef string, bool escapeInvisibles );
+      55              : 
+      56              :         //! Encases `string` in quotes, and escapes invisibles if user requested
+      57              :         //! it via CLI
+      58              :         std::string convertIntoString( StringRef string );
+      59              : 
+      60              :         std::string rawMemoryToString( const void *object, std::size_t size );
+      61              : 
+      62              :         template<typename T>
+      63              :         std::string rawMemoryToString( const T& object ) {
+      64              :           return rawMemoryToString( &object, sizeof(object) );
+      65              :         }
+      66              : 
+      67              :         template<typename T>
+      68              :         class IsStreamInsertable {
+      69              :             template<typename Stream, typename U>
+      70              :             static auto test(int)
+      71              :                 -> decltype(std::declval<Stream&>() << std::declval<U>(), std::true_type());
+      72              : 
+      73              :             template<typename, typename>
+      74              :             static auto test(...)->std::false_type;
+      75              : 
+      76              :         public:
+      77              :             static const bool value = decltype(test<std::ostream, const T&>(0))::value;
+      78              :         };
+      79              : 
+      80              :         template<typename E>
+      81              :         std::string convertUnknownEnumToString( E e );
+      82              : 
+      83              :         template<typename T>
+      84              :         std::enable_if_t<
+      85              :             !std::is_enum<T>::value && !std::is_base_of<std::exception, T>::value,
+      86              :         std::string> convertUnstreamable( T const& ) {
+      87              :             return std::string(Detail::unprintableString);
+      88              :         }
+      89              :         template<typename T>
+      90              :         std::enable_if_t<
+      91              :             !std::is_enum<T>::value && std::is_base_of<std::exception, T>::value,
+      92              :          std::string> convertUnstreamable(T const& ex) {
+      93              :             return ex.what();
+      94              :         }
+      95              : 
+      96              : 
+      97              :         template<typename T>
+      98              :         std::enable_if_t<
+      99              :             std::is_enum<T>::value,
+     100              :         std::string> convertUnstreamable( T const& value ) {
+     101              :             return convertUnknownEnumToString( value );
+     102              :         }
+     103              : 
+     104              : #if defined(_MANAGED)
+     105              :         //! Convert a CLR string to a utf8 std::string
+     106              :         template<typename T>
+     107              :         std::string clrReferenceToString( T^ ref ) {
+     108              :             if (ref == nullptr)
+     109              :                 return std::string("null");
+     110              :             auto bytes = System::Text::Encoding::UTF8->GetBytes(ref->ToString());
+     111              :             cli::pin_ptr<System::Byte> p = &bytes[0];
+     112              :             return std::string(reinterpret_cast<char const *>(p), bytes->Length);
+     113              :         }
+     114              : #endif
+     115              : 
+     116              :     } // namespace Detail
+     117              : 
+     118              : 
+     119              :     template <typename T, typename = void>
+     120              :     struct StringMaker {
+     121              :         template <typename Fake = T>
+     122              :         static
+     123              :         std::enable_if_t<::Catch::Detail::IsStreamInsertable<Fake>::value, std::string>
+     124            0 :             convert(const Fake& value) {
+     125            0 :                 ReusableStringStream rss;
+     126              :                 // NB: call using the function-like syntax to avoid ambiguity with
+     127              :                 // user-defined templated operator<< under clang.
+     128            0 :                 rss.operator<<(value);
+     129            0 :                 return rss.str();
+     130            0 :         }
+     131              : 
+     132              :         template <typename Fake = T>
+     133              :         static
+     134              :         std::enable_if_t<!::Catch::Detail::IsStreamInsertable<Fake>::value, std::string>
+     135              :             convert( const Fake& value ) {
+     136              : #if !defined(CATCH_CONFIG_FALLBACK_STRINGIFIER)
+     137              :             return Detail::convertUnstreamable(value);
+     138              : #else
+     139              :             return CATCH_CONFIG_FALLBACK_STRINGIFIER(value);
+     140              : #endif
+     141              :         }
+     142              :     };
+     143              : 
+     144              :     namespace Detail {
+     145              : 
+     146              :         // This function dispatches all stringification requests inside of Catch.
+     147              :         // Should be preferably called fully qualified, like ::Catch::Detail::stringify
+     148              :         template <typename T>
+     149            0 :         std::string stringify(const T& e) {
+     150            0 :             return ::Catch::StringMaker<std::remove_cv_t<std::remove_reference_t<T>>>::convert(e);
+     151              :         }
+     152              : 
+     153              :         template<typename E>
+     154              :         std::string convertUnknownEnumToString( E e ) {
+     155              :             return ::Catch::Detail::stringify(static_cast<std::underlying_type_t<E>>(e));
+     156              :         }
+     157              : 
+     158              : #if defined(_MANAGED)
+     159              :         template <typename T>
+     160              :         std::string stringify( T^ e ) {
+     161              :             return ::Catch::StringMaker<T^>::convert(e);
+     162              :         }
+     163              : #endif
+     164              : 
+     165              :     } // namespace Detail
+     166              : 
+     167              :     // Some predefined specializations
+     168              : 
+     169              :     template<>
+     170              :     struct StringMaker<std::string> {
+     171              :         static std::string convert(const std::string& str);
+     172              :     };
+     173              : 
+     174              : #ifdef CATCH_CONFIG_CPP17_STRING_VIEW
+     175              :     template<>
+     176              :     struct StringMaker<std::string_view> {
+     177              :         static std::string convert(std::string_view str);
+     178              :     };
+     179              : #endif
+     180              : 
+     181              :     template<>
+     182              :     struct StringMaker<char const *> {
+     183              :         static std::string convert(char const * str);
+     184              :     };
+     185              :     template<>
+     186              :     struct StringMaker<char *> {
+     187              :         static std::string convert(char * str);
+     188              :     };
+     189              : 
+     190              : #if defined(CATCH_CONFIG_WCHAR)
+     191              :     template<>
+     192              :     struct StringMaker<std::wstring> {
+     193              :         static std::string convert(const std::wstring& wstr);
+     194              :     };
+     195              : 
+     196              : # ifdef CATCH_CONFIG_CPP17_STRING_VIEW
+     197              :     template<>
+     198              :     struct StringMaker<std::wstring_view> {
+     199              :         static std::string convert(std::wstring_view str);
+     200              :     };
+     201              : # endif
+     202              : 
+     203              :     template<>
+     204              :     struct StringMaker<wchar_t const *> {
+     205              :         static std::string convert(wchar_t const * str);
+     206              :     };
+     207              :     template<>
+     208              :     struct StringMaker<wchar_t *> {
+     209              :         static std::string convert(wchar_t * str);
+     210              :     };
+     211              : #endif // CATCH_CONFIG_WCHAR
+     212              : 
+     213              :     template<size_t SZ>
+     214              :     struct StringMaker<char[SZ]> {
+     215            0 :         static std::string convert(char const* str) {
+     216              :             return Detail::convertIntoString(
+     217            0 :                 StringRef( str, Detail::catch_strnlen( str, SZ ) ) );
+     218              :         }
+     219              :     };
+     220              :     template<size_t SZ>
+     221              :     struct StringMaker<signed char[SZ]> {
+     222              :         static std::string convert(signed char const* str) {
+     223              :             auto reinterpreted = reinterpret_cast<char const*>(str);
+     224              :             return Detail::convertIntoString(
+     225              :                 StringRef(reinterpreted, Detail::catch_strnlen(reinterpreted, SZ)));
+     226              :         }
+     227              :     };
+     228              :     template<size_t SZ>
+     229              :     struct StringMaker<unsigned char[SZ]> {
+     230              :         static std::string convert(unsigned char const* str) {
+     231              :             auto reinterpreted = reinterpret_cast<char const*>(str);
+     232              :             return Detail::convertIntoString(
+     233              :                 StringRef(reinterpreted, Detail::catch_strnlen(reinterpreted, SZ)));
+     234              :         }
+     235              :     };
+     236              : 
+     237              : #if defined(CATCH_CONFIG_CPP17_BYTE)
+     238              :     template<>
+     239              :     struct StringMaker<std::byte> {
+     240              :         static std::string convert(std::byte value);
+     241              :     };
+     242              : #endif // defined(CATCH_CONFIG_CPP17_BYTE)
+     243              :     template<>
+     244              :     struct StringMaker<int> {
+     245              :         static std::string convert(int value);
+     246              :     };
+     247              :     template<>
+     248              :     struct StringMaker<long> {
+     249              :         static std::string convert(long value);
+     250              :     };
+     251              :     template<>
+     252              :     struct StringMaker<long long> {
+     253              :         static std::string convert(long long value);
+     254              :     };
+     255              :     template<>
+     256              :     struct StringMaker<unsigned int> {
+     257              :         static std::string convert(unsigned int value);
+     258              :     };
+     259              :     template<>
+     260              :     struct StringMaker<unsigned long> {
+     261              :         static std::string convert(unsigned long value);
+     262              :     };
+     263              :     template<>
+     264              :     struct StringMaker<unsigned long long> {
+     265              :         static std::string convert(unsigned long long value);
+     266              :     };
+     267              : 
+     268              :     template<>
+     269              :     struct StringMaker<bool> {
+     270            0 :         static std::string convert(bool b) {
+     271              :             using namespace std::string_literals;
+     272            0 :             return b ? "true"s : "false"s;
+     273              :         }
+     274              :     };
+     275              : 
+     276              :     template<>
+     277              :     struct StringMaker<char> {
+     278              :         static std::string convert(char c);
+     279              :     };
+     280              :     template<>
+     281              :     struct StringMaker<signed char> {
+     282              :         static std::string convert(signed char value);
+     283              :     };
+     284              :     template<>
+     285              :     struct StringMaker<unsigned char> {
+     286              :         static std::string convert(unsigned char value);
+     287              :     };
+     288              : 
+     289              :     template<>
+     290              :     struct StringMaker<std::nullptr_t> {
+     291              :         static std::string convert(std::nullptr_t) {
+     292              :             using namespace std::string_literals;
+     293              :             return "nullptr"s;
+     294              :         }
+     295              :     };
+     296              : 
+     297              :     template<>
+     298              :     struct StringMaker<float> {
+     299              :         static std::string convert(float value);
+     300              :         CATCH_EXPORT static int precision;
+     301              :     };
+     302              : 
+     303              :     template<>
+     304              :     struct StringMaker<double> {
+     305              :         static std::string convert(double value);
+     306              :         CATCH_EXPORT static int precision;
+     307              :     };
+     308              : 
+     309              :     template <typename T>
+     310              :     struct StringMaker<T*> {
+     311              :         template <typename U>
+     312              :         static std::string convert(U* p) {
+     313              :             if (p) {
+     314              :                 return ::Catch::Detail::rawMemoryToString(p);
+     315              :             } else {
+     316              :                 return "nullptr";
+     317              :             }
+     318              :         }
+     319              :     };
+     320              : 
+     321              :     template <typename R, typename C>
+     322              :     struct StringMaker<R C::*> {
+     323              :         static std::string convert(R C::* p) {
+     324              :             if (p) {
+     325              :                 return ::Catch::Detail::rawMemoryToString(p);
+     326              :             } else {
+     327              :                 return "nullptr";
+     328              :             }
+     329              :         }
+     330              :     };
+     331              : 
+     332              : #if defined(_MANAGED)
+     333              :     template <typename T>
+     334              :     struct StringMaker<T^> {
+     335              :         static std::string convert( T^ ref ) {
+     336              :             return ::Catch::Detail::clrReferenceToString(ref);
+     337              :         }
+     338              :     };
+     339              : #endif
+     340              : 
+     341              :     namespace Detail {
+     342              :         template<typename InputIterator, typename Sentinel = InputIterator>
+     343              :         std::string rangeToString(InputIterator first, Sentinel last) {
+     344              :             ReusableStringStream rss;
+     345              :             rss << "{ ";
+     346              :             if (first != last) {
+     347              :                 rss << ::Catch::Detail::stringify(*first);
+     348              :                 for (++first; first != last; ++first)
+     349              :                     rss << ", " << ::Catch::Detail::stringify(*first);
+     350              :             }
+     351              :             rss << " }";
+     352              :             return rss.str();
+     353              :         }
+     354              :     }
+     355              : 
+     356              : } // namespace Catch
+     357              : 
+     358              : //////////////////////////////////////////////////////
+     359              : // Separate std-lib types stringification, so it can be selectively enabled
+     360              : // This means that we do not bring in their headers
+     361              : 
+     362              : #if defined(CATCH_CONFIG_ENABLE_ALL_STRINGMAKERS)
+     363              : #  define CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER
+     364              : #  define CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER
+     365              : #  define CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER
+     366              : #  define CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER
+     367              : #endif
+     368              : 
+     369              : // Separate std::pair specialization
+     370              : #if defined(CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER)
+     371              : #include <utility>
+     372              : namespace Catch {
+     373              :     template<typename T1, typename T2>
+     374              :     struct StringMaker<std::pair<T1, T2> > {
+     375              :         static std::string convert(const std::pair<T1, T2>& pair) {
+     376              :             ReusableStringStream rss;
+     377              :             rss << "{ "
+     378              :                 << ::Catch::Detail::stringify(pair.first)
+     379              :                 << ", "
+     380              :                 << ::Catch::Detail::stringify(pair.second)
+     381              :                 << " }";
+     382              :             return rss.str();
+     383              :         }
+     384              :     };
+     385              : }
+     386              : #endif // CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER
+     387              : 
+     388              : #if defined(CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER) && defined(CATCH_CONFIG_CPP17_OPTIONAL)
+     389              : #include <optional>
+     390              : namespace Catch {
+     391              :     template<typename T>
+     392              :     struct StringMaker<std::optional<T> > {
+     393              :         static std::string convert(const std::optional<T>& optional) {
+     394              :             if (optional.has_value()) {
+     395              :                 return ::Catch::Detail::stringify(*optional);
+     396              :             } else {
+     397              :                 return "{ }";
+     398              :             }
+     399              :         }
+     400              :     };
+     401              :     template <>
+     402              :     struct StringMaker<std::nullopt_t> {
+     403              :         static std::string convert(const std::nullopt_t&) {
+     404              :             return "{ }";
+     405              :         }
+     406              :     };
+     407              : }
+     408              : #endif // CATCH_CONFIG_ENABLE_OPTIONAL_STRINGMAKER
+     409              : 
+     410              : // Separate std::tuple specialization
+     411              : #if defined(CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER)
+     412              : #include <tuple>
+     413              : namespace Catch {
+     414              :     namespace Detail {
+     415              :         template<
+     416              :             typename Tuple,
+     417              :             std::size_t N = 0,
+     418              :             bool = (N < std::tuple_size<Tuple>::value)
+     419              :             >
+     420              :             struct TupleElementPrinter {
+     421              :             static void print(const Tuple& tuple, std::ostream& os) {
+     422              :                 os << (N ? ", " : " ")
+     423              :                     << ::Catch::Detail::stringify(std::get<N>(tuple));
+     424              :                 TupleElementPrinter<Tuple, N + 1>::print(tuple, os);
+     425              :             }
+     426              :         };
+     427              : 
+     428              :         template<
+     429              :             typename Tuple,
+     430              :             std::size_t N
+     431              :         >
+     432              :             struct TupleElementPrinter<Tuple, N, false> {
+     433              :             static void print(const Tuple&, std::ostream&) {}
+     434              :         };
+     435              : 
+     436              :     }
+     437              : 
+     438              : 
+     439              :     template<typename ...Types>
+     440              :     struct StringMaker<std::tuple<Types...>> {
+     441              :         static std::string convert(const std::tuple<Types...>& tuple) {
+     442              :             ReusableStringStream rss;
+     443              :             rss << '{';
+     444              :             Detail::TupleElementPrinter<std::tuple<Types...>>::print(tuple, rss.get());
+     445              :             rss << " }";
+     446              :             return rss.str();
+     447              :         }
+     448              :     };
+     449              : }
+     450              : #endif // CATCH_CONFIG_ENABLE_TUPLE_STRINGMAKER
+     451              : 
+     452              : #if defined(CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER) && defined(CATCH_CONFIG_CPP17_VARIANT)
+     453              : #include <variant>
+     454              : namespace Catch {
+     455              :     template<>
+     456              :     struct StringMaker<std::monostate> {
+     457              :         static std::string convert(const std::monostate&) {
+     458              :             return "{ }";
+     459              :         }
+     460              :     };
+     461              : 
+     462              :     template<typename... Elements>
+     463              :     struct StringMaker<std::variant<Elements...>> {
+     464              :         static std::string convert(const std::variant<Elements...>& variant) {
+     465              :             if (variant.valueless_by_exception()) {
+     466              :                 return "{valueless variant}";
+     467              :             } else {
+     468              :                 return std::visit(
+     469              :                     [](const auto& value) {
+     470              :                         return ::Catch::Detail::stringify(value);
+     471              :                     },
+     472              :                     variant
+     473              :                 );
+     474              :             }
+     475              :         }
+     476              :     };
+     477              : }
+     478              : #endif // CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER
+     479              : 
+     480              : namespace Catch {
+     481              :     // Import begin/ end from std here
+     482              :     using std::begin;
+     483              :     using std::end;
+     484              : 
+     485              :     namespace Detail {
+     486              :         template <typename T, typename = void>
+     487              :         struct is_range_impl : std::false_type {};
+     488              : 
+     489              :         template <typename T>
+     490              :         struct is_range_impl<T, void_t<decltype(begin(std::declval<T>()))>> : std::true_type {};
+     491              :     } // namespace Detail
+     492              : 
+     493              :     template <typename T>
+     494              :     struct is_range : Detail::is_range_impl<T> {};
+     495              : 
+     496              : #if defined(_MANAGED) // Managed types are never ranges
+     497              :     template <typename T>
+     498              :     struct is_range<T^> {
+     499              :         static const bool value = false;
+     500              :     };
+     501              : #endif
+     502              : 
+     503              :     template<typename Range>
+     504              :     std::string rangeToString( Range const& range ) {
+     505              :         return ::Catch::Detail::rangeToString( begin( range ), end( range ) );
+     506              :     }
+     507              : 
+     508              :     // Handle vector<bool> specially
+     509              :     template<typename Allocator>
+     510              :     std::string rangeToString( std::vector<bool, Allocator> const& v ) {
+     511              :         ReusableStringStream rss;
+     512              :         rss << "{ ";
+     513              :         bool first = true;
+     514              :         for( bool b : v ) {
+     515              :             if( first )
+     516              :                 first = false;
+     517              :             else
+     518              :                 rss << ", ";
+     519              :             rss << ::Catch::Detail::stringify( b );
+     520              :         }
+     521              :         rss << " }";
+     522              :         return rss.str();
+     523              :     }
+     524              : 
+     525              :     template<typename R>
+     526              :     struct StringMaker<R, std::enable_if_t<is_range<R>::value && !::Catch::Detail::IsStreamInsertable<R>::value>> {
+     527              :         static std::string convert( R const& range ) {
+     528              :             return rangeToString( range );
+     529              :         }
+     530              :     };
+     531              : 
+     532              :     template <typename T, size_t SZ>
+     533              :     struct StringMaker<T[SZ]> {
+     534              :         static std::string convert(T const(&arr)[SZ]) {
+     535              :             return rangeToString(arr);
+     536              :         }
+     537              :     };
+     538              : 
+     539              : 
+     540              : } // namespace Catch
+     541              : 
+     542              : // Separate std::chrono::duration specialization
+     543              : #include <ctime>
+     544              : #include <ratio>
+     545              : #include <chrono>
+     546              : 
+     547              : 
+     548              : namespace Catch {
+     549              : 
+     550              : template <class Ratio>
+     551              : struct ratio_string {
+     552              :     static std::string symbol() {
+     553              :         Catch::ReusableStringStream rss;
+     554              :         rss << '[' << Ratio::num << '/'
+     555              :             << Ratio::den << ']';
+     556              :         return rss.str();
+     557              :     }
+     558              : };
+     559              : 
+     560              : template <>
+     561              : struct ratio_string<std::atto> {
+     562              :     static char symbol() { return 'a'; }
+     563              : };
+     564              : template <>
+     565              : struct ratio_string<std::femto> {
+     566              :     static char symbol() { return 'f'; }
+     567              : };
+     568              : template <>
+     569              : struct ratio_string<std::pico> {
+     570              :     static char symbol() { return 'p'; }
+     571              : };
+     572              : template <>
+     573              : struct ratio_string<std::nano> {
+     574              :     static char symbol() { return 'n'; }
+     575              : };
+     576              : template <>
+     577              : struct ratio_string<std::micro> {
+     578              :     static char symbol() { return 'u'; }
+     579              : };
+     580              : template <>
+     581              : struct ratio_string<std::milli> {
+     582              :     static char symbol() { return 'm'; }
+     583              : };
+     584              : 
+     585              :     ////////////
+     586              :     // std::chrono::duration specializations
+     587              :     template<typename Value, typename Ratio>
+     588              :     struct StringMaker<std::chrono::duration<Value, Ratio>> {
+     589              :         static std::string convert(std::chrono::duration<Value, Ratio> const& duration) {
+     590              :             ReusableStringStream rss;
+     591              :             rss << duration.count() << ' ' << ratio_string<Ratio>::symbol() << 's';
+     592              :             return rss.str();
+     593              :         }
+     594              :     };
+     595              :     template<typename Value>
+     596              :     struct StringMaker<std::chrono::duration<Value, std::ratio<1>>> {
+     597              :         static std::string convert(std::chrono::duration<Value, std::ratio<1>> const& duration) {
+     598              :             ReusableStringStream rss;
+     599              :             rss << duration.count() << " s";
+     600              :             return rss.str();
+     601              :         }
+     602              :     };
+     603              :     template<typename Value>
+     604              :     struct StringMaker<std::chrono::duration<Value, std::ratio<60>>> {
+     605              :         static std::string convert(std::chrono::duration<Value, std::ratio<60>> const& duration) {
+     606              :             ReusableStringStream rss;
+     607              :             rss << duration.count() << " m";
+     608              :             return rss.str();
+     609              :         }
+     610              :     };
+     611              :     template<typename Value>
+     612              :     struct StringMaker<std::chrono::duration<Value, std::ratio<3600>>> {
+     613              :         static std::string convert(std::chrono::duration<Value, std::ratio<3600>> const& duration) {
+     614              :             ReusableStringStream rss;
+     615              :             rss << duration.count() << " h";
+     616              :             return rss.str();
+     617              :         }
+     618              :     };
+     619              : 
+     620              :     ////////////
+     621              :     // std::chrono::time_point specialization
+     622              :     // Generic time_point cannot be specialized, only std::chrono::time_point<system_clock>
+     623              :     template<typename Clock, typename Duration>
+     624              :     struct StringMaker<std::chrono::time_point<Clock, Duration>> {
+     625              :         static std::string convert(std::chrono::time_point<Clock, Duration> const& time_point) {
+     626              :             return ::Catch::Detail::stringify(time_point.time_since_epoch()) + " since epoch";
+     627              :         }
+     628              :     };
+     629              :     // std::chrono::time_point<system_clock> specialization
+     630              :     template<typename Duration>
+     631              :     struct StringMaker<std::chrono::time_point<std::chrono::system_clock, Duration>> {
+     632              :         static std::string convert(std::chrono::time_point<std::chrono::system_clock, Duration> const& time_point) {
+     633              :             auto converted = std::chrono::system_clock::to_time_t(time_point);
+     634              : 
+     635              : #ifdef _MSC_VER
+     636              :             std::tm timeInfo = {};
+     637              :             gmtime_s(&timeInfo, &converted);
+     638              : #else
+     639              :             std::tm* timeInfo = std::gmtime(&converted);
+     640              : #endif
+     641              : 
+     642              :             auto const timeStampSize = sizeof("2017-01-16T17:06:45Z");
+     643              :             char timeStamp[timeStampSize];
+     644              :             const char * const fmt = "%Y-%m-%dT%H:%M:%SZ";
+     645              : 
+     646              : #ifdef _MSC_VER
+     647              :             std::strftime(timeStamp, timeStampSize, fmt, &timeInfo);
+     648              : #else
+     649              :             std::strftime(timeStamp, timeStampSize, fmt, timeInfo);
+     650              : #endif
+     651              :             return std::string(timeStamp, timeStampSize - 1);
+     652              :         }
+     653              :     };
+     654              : }
+     655              : 
+     656              : #include <catch2/interfaces/catch_interfaces_registry_hub.hpp>
+     657              : 
+     658              : #define INTERNAL_CATCH_REGISTER_ENUM( enumName, ... ) \
+     659              : namespace Catch { \
+     660              :     template<> struct StringMaker<enumName> { \
+     661              :         static std::string convert( enumName value ) { \
+     662              :             static const auto& enumInfo = ::Catch::getMutableRegistryHub().getMutableEnumValuesRegistry().registerEnum( #enumName, #__VA_ARGS__, { __VA_ARGS__ } ); \
+     663              :             return static_cast<std::string>(enumInfo.lookup( static_cast<int>( value ) )); \
+     664              :         } \
+     665              :     }; \
+     666              : }
+     667              : 
+     668              : #define CATCH_REGISTER_ENUM( enumName, ... ) INTERNAL_CATCH_REGISTER_ENUM( enumName, __VA_ARGS__ )
+     669              : 
+     670              : #ifdef _MSC_VER
+     671              : #pragma warning(pop)
+     672              : #endif
+     673              : 
+     674              : #endif // CATCH_TOSTRING_HPP_INCLUDED
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/generators/catch_generators.hpp.func-c.html b/html/BayesNet/tests/lib/catch2/src/catch2/generators/catch_generators.hpp.func-c.html new file mode 100644 index 0000000..7c7a14a --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/generators/catch_generators.hpp.func-c.html @@ -0,0 +1,418 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/generators/catch_generators.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/generators - catch_generators.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:94.3 %5350
Test Date:2024-04-30 13:17:26Functions:97.6 %4241
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK5Catch10Generators10IGeneratorIPKcE13stringifyImplB5cxx11Ev0
_ZN5Catch10Generators10GeneratorsIPKcE13add_generatorEONS0_16GeneratorWrapperIS3_EE8
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA6_S2_EEvOT_8
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA16_S2_EEvOT_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA6_S2_EEvOT_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA9_S2_EEvOT_4
_ZN5Catch10Generators10GeneratorsIPKcEC2IJNS0_16GeneratorWrapperIS3_EERA5_S2_RA6_S2_RA9_S2_EEEDpOT_8
_ZN5Catch10Generators10GeneratorsIPKcEC2IJNS0_16GeneratorWrapperIS3_EERA6_S2_RA15_S2_RA16_S2_EEEDpOT_2
_ZN5Catch10Generators10GeneratorsIPKcEC2IJNS0_16GeneratorWrapperIS3_EERA7_S2_RA4_S2_RA6_S2_SD_RA8_S2_SB_SD_EEEDpOT_2
_ZN5Catch10Generators10GeneratorsIPKcEC2IJNS0_16GeneratorWrapperIS3_EERA5_S2_RA6_S2_RA9_S2_EEEDpOT_4
_ZN5Catch10Generators14makeGeneratorsIPKcJRA5_S2_RA6_S2_RA9_S2_EEENS0_10GeneratorsIT_EEONS0_16GeneratorWrapperISB_EEDpOT0_8
_ZN5Catch10Generators14makeGeneratorsIPKcJRA6_S2_RA15_S2_RA16_S2_EEENS0_10GeneratorsIT_EEONS0_16GeneratorWrapperISB_EEDpOT0_2
_ZN5Catch10Generators14makeGeneratorsIPKcJRA7_S2_RA4_S2_RA6_S2_S9_RA8_S2_S7_S9_EEENS0_10GeneratorsIT_EEONS0_16GeneratorWrapperISD_EEDpOT0_2
_ZN5Catch10Generators14makeGeneratorsIPKcJRA5_S2_RA6_S2_RA9_S2_EEENS0_10GeneratorsIT_EEONS0_16GeneratorWrapperISB_EEDpOT0_4
_ZN5Catch10Generators14makeGeneratorsIRA6_KcJRA5_S2_S4_RA9_S2_EEENS0_10GeneratorsINSt5decayIT_E4typeEEEOSB_DpOT0_8
_ZN5Catch10Generators14makeGeneratorsIRA4_KcJRA6_S2_RA15_S2_RA16_S2_EEENS0_10GeneratorsINSt5decayIT_E4typeEEEOSD_DpOT0_2
_ZN5Catch10Generators14makeGeneratorsIRA5_KcJRA7_S2_RA4_S2_RA6_S2_SA_RA8_S2_S8_SA_EEENS0_10GeneratorsINSt5decayIT_E4typeEEEOSF_DpOT0_2
_ZN5Catch10Generators14makeGeneratorsIRA6_KcJRA5_S2_S4_RA9_S2_EEENS0_10GeneratorsINSt5decayIT_E4typeEEEOSB_DpOT0_4
_ZN5Catch10Generators10GeneratorsIPKcE13add_generatorEOS3_32
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA4_S2_JRA6_S2_EEEvOT_DpOT0_32
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsINS0_16GeneratorWrapperIS3_EEJRA6_S2_RA15_S2_RA16_S2_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsINS0_16GeneratorWrapperIS3_EEJRA7_S2_RA4_S2_RA6_S2_SD_RA8_S2_SB_SD_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA15_S2_JRA16_S2_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA4_S2_JRA6_S2_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA4_S2_JRA6_S2_S9_RA8_S2_S7_S9_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA6_S2_JRA15_S2_RA16_S2_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA6_S2_JRA8_S2_RA4_S2_S7_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA6_S2_JS7_RA8_S2_RA4_S2_S7_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA7_S2_JRA4_S2_RA6_S2_SB_RA8_S2_S9_SB_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA8_S2_JRA4_S2_RA6_S2_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsINS0_16GeneratorWrapperIS3_EEJRA5_S2_RA6_S2_RA9_S2_EEEvOT_DpOT0_4
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA5_S2_JRA6_S2_RA9_S2_EEEvOT_DpOT0_4
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA6_S2_JRA9_S2_EEEvOT_DpOT0_4
_ZN5Catch10Generators10GeneratorsIPKcE4nextEv40
_ZN5Catch10Generators16GeneratorWrapperIPKcE4nextEv40
_ZN5Catch10Generators16GeneratorWrapperIPKcEC2ENS_6Detail10unique_ptrINS0_10IGeneratorIS3_EEEE40
_ZN5Catch10Generators20SingleValueGeneratorIPKcE4nextEv40
_ZN5Catch10Generators20SingleValueGeneratorIPKcEC2EOS3_40
_ZN5Catch10Generators5valueIPKcS3_EENS0_16GeneratorWrapperIT0_EEOT_40
_ZN5Catch10Generators5valueIRA4_KcPS2_EENS0_16GeneratorWrapperIT0_EEOT_2
_ZN5Catch10Generators5valueIRA5_KcPS2_EENS0_16GeneratorWrapperIT0_EEOT_2
_ZN5Catch10Generators5valueIRA6_KcPS2_EENS0_16GeneratorWrapperIT0_EEOT_4
_ZN5Catch10Generators5valueIPKcS3_EENS0_16GeneratorWrapperIT0_EEOT_32
_ZN5Catch10Generators8generateIZL22CATCH2_INTERNAL_TEST_2vEUlvE_EENDTclfp1_EE4typeENS_9StringRefERKNS_14SourceLineInfoERKT_80
_ZN5Catch10Generators8generateIZL23CATCH2_INTERNAL_TEST_15vEUlvE_EENDTclfp1_EE4typeENS_9StringRefERKNS_14SourceLineInfoERKT_8
_ZN5Catch10Generators8generateIZL22CATCH2_INTERNAL_TEST_2vEUlvE_EENDTclfp1_EE4typeENS_9StringRefERKNS_14SourceLineInfoERKT_72
_ZNK5Catch10Generators10GeneratorsIPKcE3getEv80
_ZNK5Catch10Generators16GeneratorWrapperIPKcE3getEv80
_ZNK5Catch10Generators20SingleValueGeneratorIPKcE3getEv80
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/generators/catch_generators.hpp.func.html b/html/BayesNet/tests/lib/catch2/src/catch2/generators/catch_generators.hpp.func.html new file mode 100644 index 0000000..c50d971 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/generators/catch_generators.hpp.func.html @@ -0,0 +1,418 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/generators/catch_generators.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/generators - catch_generators.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:94.3 %5350
Test Date:2024-04-30 13:17:26Functions:97.6 %4241
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch10Generators10GeneratorsIPKcE13add_generatorEONS0_16GeneratorWrapperIS3_EE8
_ZN5Catch10Generators10GeneratorsIPKcE13add_generatorEOS3_32
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA4_S2_JRA6_S2_EEEvOT_DpOT0_32
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsINS0_16GeneratorWrapperIS3_EEJRA5_S2_RA6_S2_RA9_S2_EEEvOT_DpOT0_4
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsINS0_16GeneratorWrapperIS3_EEJRA6_S2_RA15_S2_RA16_S2_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsINS0_16GeneratorWrapperIS3_EEJRA7_S2_RA4_S2_RA6_S2_SD_RA8_S2_SB_SD_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA15_S2_JRA16_S2_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA4_S2_JRA6_S2_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA4_S2_JRA6_S2_S9_RA8_S2_S7_S9_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA5_S2_JRA6_S2_RA9_S2_EEEvOT_DpOT0_4
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA6_S2_JRA15_S2_RA16_S2_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA6_S2_JRA8_S2_RA4_S2_S7_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA6_S2_JRA9_S2_EEEvOT_DpOT0_4
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA6_S2_JS7_RA8_S2_RA4_S2_S7_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA7_S2_JRA4_S2_RA6_S2_SB_RA8_S2_S9_SB_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA8_S2_JRA4_S2_RA6_S2_EEEvOT_DpOT0_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA6_S2_EEvOT_8
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA16_S2_EEvOT_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA6_S2_EEvOT_2
_ZN5Catch10Generators10GeneratorsIPKcE14add_generatorsIRA9_S2_EEvOT_4
_ZN5Catch10Generators10GeneratorsIPKcE4nextEv40
_ZN5Catch10Generators10GeneratorsIPKcEC2IJNS0_16GeneratorWrapperIS3_EERA5_S2_RA6_S2_RA9_S2_EEEDpOT_8
_ZN5Catch10Generators10GeneratorsIPKcEC2IJNS0_16GeneratorWrapperIS3_EERA5_S2_RA6_S2_RA9_S2_EEEDpOT_4
_ZN5Catch10Generators10GeneratorsIPKcEC2IJNS0_16GeneratorWrapperIS3_EERA6_S2_RA15_S2_RA16_S2_EEEDpOT_2
_ZN5Catch10Generators10GeneratorsIPKcEC2IJNS0_16GeneratorWrapperIS3_EERA7_S2_RA4_S2_RA6_S2_SD_RA8_S2_SB_SD_EEEDpOT_2
_ZN5Catch10Generators14makeGeneratorsIPKcJRA5_S2_RA6_S2_RA9_S2_EEENS0_10GeneratorsIT_EEONS0_16GeneratorWrapperISB_EEDpOT0_8
_ZN5Catch10Generators14makeGeneratorsIPKcJRA5_S2_RA6_S2_RA9_S2_EEENS0_10GeneratorsIT_EEONS0_16GeneratorWrapperISB_EEDpOT0_4
_ZN5Catch10Generators14makeGeneratorsIPKcJRA6_S2_RA15_S2_RA16_S2_EEENS0_10GeneratorsIT_EEONS0_16GeneratorWrapperISB_EEDpOT0_2
_ZN5Catch10Generators14makeGeneratorsIPKcJRA7_S2_RA4_S2_RA6_S2_S9_RA8_S2_S7_S9_EEENS0_10GeneratorsIT_EEONS0_16GeneratorWrapperISD_EEDpOT0_2
_ZN5Catch10Generators14makeGeneratorsIRA6_KcJRA5_S2_S4_RA9_S2_EEENS0_10GeneratorsINSt5decayIT_E4typeEEEOSB_DpOT0_8
_ZN5Catch10Generators14makeGeneratorsIRA4_KcJRA6_S2_RA15_S2_RA16_S2_EEENS0_10GeneratorsINSt5decayIT_E4typeEEEOSD_DpOT0_2
_ZN5Catch10Generators14makeGeneratorsIRA5_KcJRA7_S2_RA4_S2_RA6_S2_SA_RA8_S2_S8_SA_EEENS0_10GeneratorsINSt5decayIT_E4typeEEEOSF_DpOT0_2
_ZN5Catch10Generators14makeGeneratorsIRA6_KcJRA5_S2_S4_RA9_S2_EEENS0_10GeneratorsINSt5decayIT_E4typeEEEOSB_DpOT0_4
_ZN5Catch10Generators16GeneratorWrapperIPKcE4nextEv40
_ZN5Catch10Generators16GeneratorWrapperIPKcEC2ENS_6Detail10unique_ptrINS0_10IGeneratorIS3_EEEE40
_ZN5Catch10Generators20SingleValueGeneratorIPKcE4nextEv40
_ZN5Catch10Generators20SingleValueGeneratorIPKcEC2EOS3_40
_ZN5Catch10Generators5valueIPKcS3_EENS0_16GeneratorWrapperIT0_EEOT_40
_ZN5Catch10Generators5valueIPKcS3_EENS0_16GeneratorWrapperIT0_EEOT_32
_ZN5Catch10Generators5valueIRA4_KcPS2_EENS0_16GeneratorWrapperIT0_EEOT_2
_ZN5Catch10Generators5valueIRA5_KcPS2_EENS0_16GeneratorWrapperIT0_EEOT_2
_ZN5Catch10Generators5valueIRA6_KcPS2_EENS0_16GeneratorWrapperIT0_EEOT_4
_ZN5Catch10Generators8generateIZL22CATCH2_INTERNAL_TEST_2vEUlvE_EENDTclfp1_EE4typeENS_9StringRefERKNS_14SourceLineInfoERKT_80
_ZN5Catch10Generators8generateIZL22CATCH2_INTERNAL_TEST_2vEUlvE_EENDTclfp1_EE4typeENS_9StringRefERKNS_14SourceLineInfoERKT_72
_ZN5Catch10Generators8generateIZL23CATCH2_INTERNAL_TEST_15vEUlvE_EENDTclfp1_EE4typeENS_9StringRefERKNS_14SourceLineInfoERKT_8
_ZNK5Catch10Generators10GeneratorsIPKcE3getEv80
_ZNK5Catch10Generators10IGeneratorIPKcE13stringifyImplB5cxx11Ev0
_ZNK5Catch10Generators16GeneratorWrapperIPKcE3getEv80
_ZNK5Catch10Generators20SingleValueGeneratorIPKcE3getEv80
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/generators/catch_generators.hpp.gcov.html b/html/BayesNet/tests/lib/catch2/src/catch2/generators/catch_generators.hpp.gcov.html new file mode 100644 index 0000000..d60c712 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/generators/catch_generators.hpp.gcov.html @@ -0,0 +1,320 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/generators/catch_generators.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/generators - catch_generators.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:94.3 %5350
Test Date:2024-04-30 13:17:26Functions:97.6 %4241
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : 
+       2              : //              Copyright Catch2 Authors
+       3              : // Distributed under the Boost Software License, Version 1.0.
+       4              : //   (See accompanying file LICENSE.txt or copy at
+       5              : //        https://www.boost.org/LICENSE_1_0.txt)
+       6              : 
+       7              : // SPDX-License-Identifier: BSL-1.0
+       8              : #ifndef CATCH_GENERATORS_HPP_INCLUDED
+       9              : #define CATCH_GENERATORS_HPP_INCLUDED
+      10              : 
+      11              : #include <catch2/catch_tostring.hpp>
+      12              : #include <catch2/interfaces/catch_interfaces_generatortracker.hpp>
+      13              : #include <catch2/internal/catch_source_line_info.hpp>
+      14              : #include <catch2/internal/catch_stringref.hpp>
+      15              : #include <catch2/internal/catch_move_and_forward.hpp>
+      16              : #include <catch2/internal/catch_unique_name.hpp>
+      17              : 
+      18              : #include <vector>
+      19              : #include <tuple>
+      20              : 
+      21              : namespace Catch {
+      22              : 
+      23              : namespace Generators {
+      24              : 
+      25              : namespace Detail {
+      26              : 
+      27              :     //! Throws GeneratorException with the provided message
+      28              :     [[noreturn]]
+      29              :     void throw_generator_exception(char const * msg);
+      30              : 
+      31              : } // end namespace detail
+      32              : 
+      33              :     template<typename T>
+      34              :     class IGenerator : public GeneratorUntypedBase {
+      35            0 :         std::string stringifyImpl() const override {
+      36            0 :             return ::Catch::Detail::stringify( get() );
+      37              :         }
+      38              : 
+      39              :     public:
+      40              :         // Returns the current element of the generator
+      41              :         //
+      42              :         // \Precondition The generator is either freshly constructed,
+      43              :         // or the last call to `next()` returned true
+      44              :         virtual T const& get() const = 0;
+      45              :         using type = T;
+      46              :     };
+      47              : 
+      48              :     template <typename T>
+      49              :     using GeneratorPtr = Catch::Detail::unique_ptr<IGenerator<T>>;
+      50              : 
+      51              :     template <typename T>
+      52              :     class GeneratorWrapper final {
+      53              :         GeneratorPtr<T> m_generator;
+      54              :     public:
+      55              :         //! Takes ownership of the passed pointer.
+      56              :         GeneratorWrapper(IGenerator<T>* generator):
+      57              :             m_generator(generator) {}
+      58           40 :         GeneratorWrapper(GeneratorPtr<T> generator):
+      59           40 :             m_generator(CATCH_MOVE(generator)) {}
+      60              : 
+      61           80 :         T const& get() const {
+      62           80 :             return m_generator->get();
+      63              :         }
+      64           40 :         bool next() {
+      65           40 :             return m_generator->countedNext();
+      66              :         }
+      67              :     };
+      68              : 
+      69              : 
+      70              :     template<typename T>
+      71              :     class SingleValueGenerator final : public IGenerator<T> {
+      72              :         T m_value;
+      73              :     public:
+      74              :         SingleValueGenerator(T const& value) :
+      75              :             m_value(value)
+      76              :         {}
+      77           40 :         SingleValueGenerator(T&& value):
+      78           40 :             m_value(CATCH_MOVE(value))
+      79           40 :         {}
+      80              : 
+      81           80 :         T const& get() const override {
+      82           80 :             return m_value;
+      83              :         }
+      84           40 :         bool next() override {
+      85           40 :             return false;
+      86              :         }
+      87              :     };
+      88              : 
+      89              :     template<typename T>
+      90              :     class FixedValuesGenerator final : public IGenerator<T> {
+      91              :         static_assert(!std::is_same<T, bool>::value,
+      92              :             "FixedValuesGenerator does not support bools because of std::vector<bool>"
+      93              :             "specialization, use SingleValue Generator instead.");
+      94              :         std::vector<T> m_values;
+      95              :         size_t m_idx = 0;
+      96              :     public:
+      97              :         FixedValuesGenerator( std::initializer_list<T> values ) : m_values( values ) {}
+      98              : 
+      99              :         T const& get() const override {
+     100              :             return m_values[m_idx];
+     101              :         }
+     102              :         bool next() override {
+     103              :             ++m_idx;
+     104              :             return m_idx < m_values.size();
+     105              :         }
+     106              :     };
+     107              : 
+     108              :     template <typename T, typename DecayedT = std::decay_t<T>>
+     109           40 :     GeneratorWrapper<DecayedT> value( T&& value ) {
+     110              :         return GeneratorWrapper<DecayedT>(
+     111              :             Catch::Detail::make_unique<SingleValueGenerator<DecayedT>>(
+     112           40 :                 CATCH_FORWARD( value ) ) );
+     113              :     }
+     114              :     template <typename T>
+     115              :     GeneratorWrapper<T> values(std::initializer_list<T> values) {
+     116              :         return GeneratorWrapper<T>(Catch::Detail::make_unique<FixedValuesGenerator<T>>(values));
+     117              :     }
+     118              : 
+     119              :     template<typename T>
+     120              :     class Generators : public IGenerator<T> {
+     121              :         std::vector<GeneratorWrapper<T>> m_generators;
+     122              :         size_t m_current = 0;
+     123              : 
+     124            8 :         void add_generator( GeneratorWrapper<T>&& generator ) {
+     125            8 :             m_generators.emplace_back( CATCH_MOVE( generator ) );
+     126            8 :         }
+     127              :         void add_generator( T const& val ) {
+     128              :             m_generators.emplace_back( value( val ) );
+     129              :         }
+     130           32 :         void add_generator( T&& val ) {
+     131           32 :             m_generators.emplace_back( value( CATCH_MOVE( val ) ) );
+     132           32 :         }
+     133              :         template <typename U>
+     134              :         std::enable_if_t<!std::is_same<std::decay_t<U>, T>::value>
+     135              :         add_generator( U&& val ) {
+     136              :             add_generator( T( CATCH_FORWARD( val ) ) );
+     137              :         }
+     138              : 
+     139            8 :         template <typename U> void add_generators( U&& valueOrGenerator ) {
+     140            8 :             add_generator( CATCH_FORWARD( valueOrGenerator ) );
+     141            8 :         }
+     142              : 
+     143              :         template <typename U, typename... Gs>
+     144           32 :         void add_generators( U&& valueOrGenerator, Gs&&... moreGenerators ) {
+     145           32 :             add_generator( CATCH_FORWARD( valueOrGenerator ) );
+     146           32 :             add_generators( CATCH_FORWARD( moreGenerators )... );
+     147           32 :         }
+     148              : 
+     149              :     public:
+     150              :         template <typename... Gs>
+     151            8 :         Generators(Gs &&... moreGenerators) {
+     152            8 :             m_generators.reserve(sizeof...(Gs));
+     153            8 :             add_generators(CATCH_FORWARD(moreGenerators)...);
+     154            8 :         }
+     155              : 
+     156           80 :         T const& get() const override {
+     157           80 :             return m_generators[m_current].get();
+     158              :         }
+     159              : 
+     160           40 :         bool next() override {
+     161           40 :             if (m_current >= m_generators.size()) {
+     162            0 :                 return false;
+     163              :             }
+     164           40 :             const bool current_status = m_generators[m_current].next();
+     165           40 :             if (!current_status) {
+     166           40 :                 ++m_current;
+     167              :             }
+     168           40 :             return m_current < m_generators.size();
+     169              :         }
+     170              :     };
+     171              : 
+     172              : 
+     173              :     template <typename... Ts>
+     174              :     GeneratorWrapper<std::tuple<std::decay_t<Ts>...>>
+     175              :     table( std::initializer_list<std::tuple<std::decay_t<Ts>...>> tuples ) {
+     176              :         return values<std::tuple<Ts...>>( tuples );
+     177              :     }
+     178              : 
+     179              :     // Tag type to signal that a generator sequence should convert arguments to a specific type
+     180              :     template <typename T>
+     181              :     struct as {};
+     182              : 
+     183              :     template<typename T, typename... Gs>
+     184            8 :     auto makeGenerators( GeneratorWrapper<T>&& generator, Gs &&... moreGenerators ) -> Generators<T> {
+     185            8 :         return Generators<T>(CATCH_MOVE(generator), CATCH_FORWARD(moreGenerators)...);
+     186              :     }
+     187              :     template<typename T>
+     188              :     auto makeGenerators( GeneratorWrapper<T>&& generator ) -> Generators<T> {
+     189              :         return Generators<T>(CATCH_MOVE(generator));
+     190              :     }
+     191              :     template<typename T, typename... Gs>
+     192            8 :     auto makeGenerators( T&& val, Gs &&... moreGenerators ) -> Generators<std::decay_t<T>> {
+     193            8 :         return makeGenerators( value( CATCH_FORWARD( val ) ), CATCH_FORWARD( moreGenerators )... );
+     194              :     }
+     195              :     template<typename T, typename U, typename... Gs>
+     196              :     auto makeGenerators( as<T>, U&& val, Gs &&... moreGenerators ) -> Generators<T> {
+     197              :         return makeGenerators( value( T( CATCH_FORWARD( val ) ) ), CATCH_FORWARD( moreGenerators )... );
+     198              :     }
+     199              : 
+     200              :     IGeneratorTracker* acquireGeneratorTracker( StringRef generatorName,
+     201              :                                                 SourceLineInfo const& lineInfo );
+     202              :     IGeneratorTracker* createGeneratorTracker( StringRef generatorName,
+     203              :                                                SourceLineInfo lineInfo,
+     204              :                                                GeneratorBasePtr&& generator );
+     205              : 
+     206              :     template<typename L>
+     207           80 :     auto generate( StringRef generatorName, SourceLineInfo const& lineInfo, L const& generatorExpression ) -> typename decltype(generatorExpression())::type {
+     208              :         using UnderlyingType = typename decltype(generatorExpression())::type;
+     209              : 
+     210           80 :         IGeneratorTracker* tracker = acquireGeneratorTracker( generatorName, lineInfo );
+     211              :         // Creation of tracker is delayed after generator creation, so
+     212              :         // that constructing generator can fail without breaking everything.
+     213           80 :         if (!tracker) {
+     214            8 :             tracker = createGeneratorTracker(
+     215              :                 generatorName,
+     216              :                 lineInfo,
+     217              :                 Catch::Detail::make_unique<Generators<UnderlyingType>>(
+     218              :                     generatorExpression() ) );
+     219              :         }
+     220              : 
+     221           80 :         auto const& generator = static_cast<IGenerator<UnderlyingType> const&>( *tracker->getGenerator() );
+     222           80 :         return generator.get();
+     223              :     }
+     224              : 
+     225              : } // namespace Generators
+     226              : } // namespace Catch
+     227              : 
+     228              : #define CATCH_INTERNAL_GENERATOR_STRINGIZE_IMPL( ... ) #__VA_ARGS__##_catch_sr
+     229              : #define CATCH_INTERNAL_GENERATOR_STRINGIZE(...) CATCH_INTERNAL_GENERATOR_STRINGIZE_IMPL(__VA_ARGS__)
+     230              : 
+     231              : #define GENERATE( ... ) \
+     232              :     Catch::Generators::generate( CATCH_INTERNAL_GENERATOR_STRINGIZE(INTERNAL_CATCH_UNIQUE_NAME(generator)), \
+     233              :                                  CATCH_INTERNAL_LINEINFO, \
+     234              :                                  [ ]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) //NOLINT(google-build-using-namespace)
+     235              : #define GENERATE_COPY( ... ) \
+     236              :     Catch::Generators::generate( CATCH_INTERNAL_GENERATOR_STRINGIZE(INTERNAL_CATCH_UNIQUE_NAME(generator)), \
+     237              :                                  CATCH_INTERNAL_LINEINFO, \
+     238              :                                  [=]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) //NOLINT(google-build-using-namespace)
+     239              : #define GENERATE_REF( ... ) \
+     240              :     Catch::Generators::generate( CATCH_INTERNAL_GENERATOR_STRINGIZE(INTERNAL_CATCH_UNIQUE_NAME(generator)), \
+     241              :                                  CATCH_INTERNAL_LINEINFO, \
+     242              :                                  [&]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) //NOLINT(google-build-using-namespace)
+     243              : 
+     244              : #endif // CATCH_GENERATORS_HPP_INCLUDED
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/generators/index-sort-f.html b/html/BayesNet/tests/lib/catch2/src/catch2/generators/index-sort-f.html new file mode 100644 index 0000000..5452c7c --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/generators/index-sort-f.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/generators + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/generatorsCoverageTotalHit
Test:coverage.infoLines:94.3 %5350
Test Date:2024-04-30 13:17:26Functions:97.6 %4241
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
catch_generators.hpp +
94.3%94.3%
+
94.3 %535097.6 %4241
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/generators/index-sort-l.html b/html/BayesNet/tests/lib/catch2/src/catch2/generators/index-sort-l.html new file mode 100644 index 0000000..46f282d --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/generators/index-sort-l.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/generators + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/generatorsCoverageTotalHit
Test:coverage.infoLines:94.3 %5350
Test Date:2024-04-30 13:17:26Functions:97.6 %4241
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
catch_generators.hpp +
94.3%94.3%
+
94.3 %535097.6 %4241
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/generators/index.html b/html/BayesNet/tests/lib/catch2/src/catch2/generators/index.html new file mode 100644 index 0000000..40e699e --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/generators/index.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/generators + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/generatorsCoverageTotalHit
Test:coverage.infoLines:94.3 %5350
Test Date:2024-04-30 13:17:26Functions:97.6 %4241
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
catch_generators.hpp +
94.3%94.3%
+
94.3 %535097.6 %4241
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/index-sort-f.html b/html/BayesNet/tests/lib/catch2/src/catch2/index-sort-f.html new file mode 100644 index 0000000..d5bf3e7 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/index-sort-f.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2 + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2CoverageTotalHit
Test:coverage.infoLines:54.3 %3519
Test Date:2024-04-30 13:17:26Functions:14.3 %639
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
catch_tostring.hpp +
0.0%
+
0.0 %160.0 %54
catch_message.hpp +
100.0%
+
100.0 %66100.0 %44
catch_approx.hpp +
100.0%
+
100.0 %1313100.0 %55
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/index-sort-l.html b/html/BayesNet/tests/lib/catch2/src/catch2/index-sort-l.html new file mode 100644 index 0000000..2010c12 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/index-sort-l.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2 + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2CoverageTotalHit
Test:coverage.infoLines:54.3 %3519
Test Date:2024-04-30 13:17:26Functions:14.3 %639
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
catch_tostring.hpp +
0.0%
+
0.0 %160.0 %54
catch_message.hpp +
100.0%
+
100.0 %66100.0 %44
catch_approx.hpp +
100.0%
+
100.0 %1313100.0 %55
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/index.html b/html/BayesNet/tests/lib/catch2/src/catch2/index.html new file mode 100644 index 0000000..8b847f9 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/index.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2 + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2CoverageTotalHit
Test:coverage.infoLines:54.3 %3519
Test Date:2024-04-30 13:17:26Functions:14.3 %639
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
catch_approx.hpp +
100.0%
+
100.0 %1313100.0 %55
catch_message.hpp +
100.0%
+
100.0 %66100.0 %44
catch_tostring.hpp +
0.0%
+
0.0 %160.0 %54
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/interfaces/catch_interfaces_generatortracker.hpp.func-c.html b/html/BayesNet/tests/lib/catch2/src/catch2/interfaces/catch_interfaces_generatortracker.hpp.func-c.html new file mode 100644 index 0000000..8c4d513 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/interfaces/catch_interfaces_generatortracker.hpp.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/interfaces/catch_interfaces_generatortracker.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/interfaces - catch_interfaces_generatortracker.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch10Generators20GeneratorUntypedBaseC2ERKS1_8
_ZN5Catch10Generators20GeneratorUntypedBaseC2Ev48
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/interfaces/catch_interfaces_generatortracker.hpp.func.html b/html/BayesNet/tests/lib/catch2/src/catch2/interfaces/catch_interfaces_generatortracker.hpp.func.html new file mode 100644 index 0000000..494420d --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/interfaces/catch_interfaces_generatortracker.hpp.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/interfaces/catch_interfaces_generatortracker.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/interfaces - catch_interfaces_generatortracker.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch10Generators20GeneratorUntypedBaseC2ERKS1_8
_ZN5Catch10Generators20GeneratorUntypedBaseC2Ev48
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/interfaces/catch_interfaces_generatortracker.hpp.gcov.html b/html/BayesNet/tests/lib/catch2/src/catch2/interfaces/catch_interfaces_generatortracker.hpp.gcov.html new file mode 100644 index 0000000..b0f2103 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/interfaces/catch_interfaces_generatortracker.hpp.gcov.html @@ -0,0 +1,166 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/interfaces/catch_interfaces_generatortracker.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/interfaces - catch_interfaces_generatortracker.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : 
+       2              : //              Copyright Catch2 Authors
+       3              : // Distributed under the Boost Software License, Version 1.0.
+       4              : //   (See accompanying file LICENSE.txt or copy at
+       5              : //        https://www.boost.org/LICENSE_1_0.txt)
+       6              : 
+       7              : // SPDX-License-Identifier: BSL-1.0
+       8              : #ifndef CATCH_INTERFACES_GENERATORTRACKER_HPP_INCLUDED
+       9              : #define CATCH_INTERFACES_GENERATORTRACKER_HPP_INCLUDED
+      10              : 
+      11              : #include <catch2/internal/catch_unique_ptr.hpp>
+      12              : #include <catch2/internal/catch_stringref.hpp>
+      13              : 
+      14              : #include <string>
+      15              : 
+      16              : namespace Catch {
+      17              : 
+      18              :     namespace Generators {
+      19              :         class GeneratorUntypedBase {
+      20              :             // Caches result from `toStringImpl`, assume that when it is an
+      21              :             // empty string, the cache is invalidated.
+      22              :             mutable std::string m_stringReprCache;
+      23              : 
+      24              :             // Counts based on `next` returning true
+      25              :             std::size_t m_currentElementIndex = 0;
+      26              : 
+      27              :             /**
+      28              :              * Attempts to move the generator to the next element
+      29              :              *
+      30              :              * Returns true iff the move succeeded (and a valid element
+      31              :              * can be retrieved).
+      32              :              */
+      33              :             virtual bool next() = 0;
+      34              : 
+      35              :             //! Customization point for `currentElementAsString`
+      36              :             virtual std::string stringifyImpl() const = 0;
+      37              : 
+      38              :         public:
+      39           48 :             GeneratorUntypedBase() = default;
+      40              :             // Generation of copy ops is deprecated (and Clang will complain)
+      41              :             // if there is a user destructor defined
+      42            8 :             GeneratorUntypedBase(GeneratorUntypedBase const&) = default;
+      43              :             GeneratorUntypedBase& operator=(GeneratorUntypedBase const&) = default;
+      44              : 
+      45              :             virtual ~GeneratorUntypedBase(); // = default;
+      46              : 
+      47              :             /**
+      48              :              * Attempts to move the generator to the next element
+      49              :              *
+      50              :              * Serves as a non-virtual interface to `next`, so that the
+      51              :              * top level interface can provide sanity checking and shared
+      52              :              * features.
+      53              :              *
+      54              :              * As with `next`, returns true iff the move succeeded and
+      55              :              * the generator has new valid element to provide.
+      56              :              */
+      57              :             bool countedNext();
+      58              : 
+      59              :             std::size_t currentElementIndex() const { return m_currentElementIndex; }
+      60              : 
+      61              :             /**
+      62              :              * Returns generator's current element as user-friendly string.
+      63              :              *
+      64              :              * By default returns string equivalent to calling
+      65              :              * `Catch::Detail::stringify` on the current element, but generators
+      66              :              * can customize their implementation as needed.
+      67              :              *
+      68              :              * Not thread-safe due to internal caching.
+      69              :              *
+      70              :              * The returned ref is valid only until the generator instance
+      71              :              * is destructed, or it moves onto the next element, whichever
+      72              :              * comes first.
+      73              :              */
+      74              :             StringRef currentElementAsString() const;
+      75              :         };
+      76              :         using GeneratorBasePtr = Catch::Detail::unique_ptr<GeneratorUntypedBase>;
+      77              : 
+      78              :     } // namespace Generators
+      79              : 
+      80              :     class IGeneratorTracker {
+      81              :     public:
+      82              :         virtual ~IGeneratorTracker(); // = default;
+      83              :         virtual auto hasGenerator() const -> bool = 0;
+      84              :         virtual auto getGenerator() const -> Generators::GeneratorBasePtr const& = 0;
+      85              :         virtual void setGenerator( Generators::GeneratorBasePtr&& generator ) = 0;
+      86              :     };
+      87              : 
+      88              : } // namespace Catch
+      89              : 
+      90              : #endif // CATCH_INTERFACES_GENERATORTRACKER_HPP_INCLUDED
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/interfaces/index-sort-f.html b/html/BayesNet/tests/lib/catch2/src/catch2/interfaces/index-sort-f.html new file mode 100644 index 0000000..ea80127 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/interfaces/index-sort-f.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/interfaces + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/interfacesCoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
catch_interfaces_generatortracker.hpp +
100.0%
+
100.0 %22100.0 %22
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/interfaces/index-sort-l.html b/html/BayesNet/tests/lib/catch2/src/catch2/interfaces/index-sort-l.html new file mode 100644 index 0000000..036cc73 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/interfaces/index-sort-l.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/interfaces + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/interfacesCoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
catch_interfaces_generatortracker.hpp +
100.0%
+
100.0 %22100.0 %22
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/interfaces/index.html b/html/BayesNet/tests/lib/catch2/src/catch2/interfaces/index.html new file mode 100644 index 0000000..f373f6c --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/interfaces/index.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/interfaces + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/interfacesCoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
catch_interfaces_generatortracker.hpp +
100.0%
+
100.0 %22100.0 %22
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_assertion_handler.hpp.func-c.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_assertion_handler.hpp.func-c.html new file mode 100644 index 0000000..e14724e --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_assertion_handler.hpp.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_assertion_handler.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_assertion_handler.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:85.7 %76
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch16AssertionHandler10handleExprIbEEvRKNS_7ExprLhsIT_EE112
_ZN5Catch16AssertionHandlerD2Ev2120
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_assertion_handler.hpp.func.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_assertion_handler.hpp.func.html new file mode 100644 index 0000000..8b8d869 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_assertion_handler.hpp.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_assertion_handler.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_assertion_handler.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:85.7 %76
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch16AssertionHandler10handleExprIbEEvRKNS_7ExprLhsIT_EE112
_ZN5Catch16AssertionHandlerD2Ev2120
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_assertion_handler.hpp.gcov.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_assertion_handler.hpp.gcov.html new file mode 100644 index 0000000..2053dbb --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_assertion_handler.hpp.gcov.html @@ -0,0 +1,144 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_assertion_handler.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_assertion_handler.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:85.7 %76
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : 
+       2              : //              Copyright Catch2 Authors
+       3              : // Distributed under the Boost Software License, Version 1.0.
+       4              : //   (See accompanying file LICENSE.txt or copy at
+       5              : //        https://www.boost.org/LICENSE_1_0.txt)
+       6              : 
+       7              : // SPDX-License-Identifier: BSL-1.0
+       8              : #ifndef CATCH_ASSERTION_HANDLER_HPP_INCLUDED
+       9              : #define CATCH_ASSERTION_HANDLER_HPP_INCLUDED
+      10              : 
+      11              : #include <catch2/catch_assertion_info.hpp>
+      12              : #include <catch2/internal/catch_decomposer.hpp>
+      13              : #include <catch2/interfaces/catch_interfaces_capture.hpp>
+      14              : 
+      15              : #include <string>
+      16              : 
+      17              : namespace Catch {
+      18              : 
+      19              :     struct AssertionReaction {
+      20              :         bool shouldDebugBreak = false;
+      21              :         bool shouldThrow = false;
+      22              :         bool shouldSkip = false;
+      23              :     };
+      24              : 
+      25              :     class AssertionHandler {
+      26              :         AssertionInfo m_assertionInfo;
+      27              :         AssertionReaction m_reaction;
+      28              :         bool m_completed = false;
+      29              :         IResultCapture& m_resultCapture;
+      30              : 
+      31              :     public:
+      32              :         AssertionHandler
+      33              :             (   StringRef macroName,
+      34              :                 SourceLineInfo const& lineInfo,
+      35              :                 StringRef capturedExpression,
+      36              :                 ResultDisposition::Flags resultDisposition );
+      37         2120 :         ~AssertionHandler() {
+      38         2120 :             if ( !m_completed ) {
+      39            0 :                 m_resultCapture.handleIncomplete( m_assertionInfo );
+      40              :             }
+      41         2120 :         }
+      42              : 
+      43              : 
+      44              :         template<typename T>
+      45          112 :         void handleExpr( ExprLhs<T> const& expr ) {
+      46          112 :             handleExpr( expr.makeUnaryExpr() );
+      47          112 :         }
+      48              :         void handleExpr( ITransientExpression const& expr );
+      49              : 
+      50              :         void handleMessage(ResultWas::OfType resultType, StringRef message);
+      51              : 
+      52              :         void handleExceptionThrownAsExpected();
+      53              :         void handleUnexpectedExceptionNotThrown();
+      54              :         void handleExceptionNotThrownAsExpected();
+      55              :         void handleThrowingCallSkipped();
+      56              :         void handleUnexpectedInflightException();
+      57              : 
+      58              :         void complete();
+      59              : 
+      60              :         // query
+      61              :         auto allowThrows() const -> bool;
+      62              :     };
+      63              : 
+      64              :     void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str );
+      65              : 
+      66              : } // namespace Catch
+      67              : 
+      68              : #endif // CATCH_ASSERTION_HANDLER_HPP_INCLUDED
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_decomposer.hpp.func-c.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_decomposer.hpp.func-c.html new file mode 100644 index 0000000..2a3327f --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_decomposer.hpp.func-c.html @@ -0,0 +1,1202 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_decomposer.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_decomposer.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:76.9 %2620
Test Date:2024-04-30 13:17:26Functions:73.5 %155114
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK5Catch10BinaryExprIfdE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRKN8bayesnet8status_tES4_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA1_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERS9_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EESB_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESaIS9_EERSB_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESaIS9_EESD_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA11_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA12_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA19_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA1_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA20_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA34_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA49_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA50_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA52_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA53_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA99_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EESA_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRSt6vectorISt4pairIiiESaIS3_EES6_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRSt6vectorIiSaIiEES4_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIdRNS_6ApproxEE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIfRNS_6ApproxEE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIfdE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIffE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIfiE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIiiE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIjiE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIllE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIlmE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprImiE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprImlE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprImmE29streamReconstructedExpressionERSo0
_ZNK5Catch9UnaryExprIbE29streamReconstructedExpressionERSo0
_ZN5Catch9UnaryExprIbEC2Eb112
_ZNK5Catch7ExprLhsIbE13makeUnaryExprEv112
_ZN5CatchleIRSt6vectorIiSaIiEELi0EEENS_7ExprLhsIRKT_EEONS_10DecomposerEOS6_370
_ZN5CatchleISt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESaIS9_EELi0EEENS_7ExprLhsIRKT_EEONS_10DecomposerEOSD_16
_ZN5CatchleISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EELi0EEENS_7ExprLhsIRKT_EEONS_10DecomposerEOSB_28
_ZN5CatchleIRSt6vectorISt4pairIiiESaIS3_EELi0EEENS_7ExprLhsIRKT_EEONS_10DecomposerEOS8_32
_ZN5CatchleIRSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EELi0EEENS_7ExprLhsIRKT_EEONS_10DecomposerEOSC_40
_ZN5CatchleIRSt6vectorIiSaIiEELi0EEENS_7ExprLhsIRKT_EEONS_10DecomposerEOS6_44
_ZN5CatchleINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELi0EEENS_7ExprLhsIRKT_EEONS_10DecomposerEOS8_46
_ZN5CatchleIN8bayesnet8status_tELi0EEENS_7ExprLhsIRKT_EEONS_10DecomposerEOS4_64
_ZN5CatchleIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELi0EEENS_7ExprLhsIRKT_EEONS_10DecomposerEOS9_100
_ZN5CatchleIbLi0EEENS_7ExprLhsIT_EEONS_10DecomposerES2_1574
_ZN5CatchleIjLi0EEENS_7ExprLhsIT_EEONS_10DecomposerES2_10
_ZN5CatchleIlLi0EEENS_7ExprLhsIT_EEONS_10DecomposerES2_22
_ZN5CatchleIbLi0EEENS_7ExprLhsIT_EEONS_10DecomposerES2_112
_ZN5CatchleIfLi0EEENS_7ExprLhsIT_EEONS_10DecomposerES2_114
_ZN5CatchleImLi0EEENS_7ExprLhsIT_EEONS_10DecomposerES2_204
_ZN5CatchleIiLi0EEENS_7ExprLhsIT_EEONS_10DecomposerES2_296
_ZN5CatchleIdLi0EEENS_7ExprLhsIT_EEONS_10DecomposerES2_816
_ZN5Catch10BinaryExprIfdEC2EbfNS_9StringRefEd1832
_ZN5Catch10BinaryExprIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA1_KcEC2EbS8_NS_9StringRefESB_2
_ZN5Catch10BinaryExprIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_KcEC2EbS8_NS_9StringRefESB_2
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA1_KcEC2EbS7_NS_9StringRefESA_2
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEC2EbS7_NS_9StringRefESA_2
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA34_KcEC2EbS7_NS_9StringRefESA_2
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcEC2EbS7_NS_9StringRefESA_2
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA52_KcEC2EbS7_NS_9StringRefESA_2
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA53_KcEC2EbS7_NS_9StringRefESA_2
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA99_KcEC2EbS7_NS_9StringRefESA_2
_ZN5Catch10BinaryExprIfdEC2EbfNS_9StringRefEd2
_ZN5Catch10BinaryExprIffEC2EbfNS_9StringRefEf2
_ZN5Catch10BinaryExprIfiEC2EbfNS_9StringRefEi2
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA11_KcEC2EbS7_NS_9StringRefESA_4
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA49_KcEC2EbS7_NS_9StringRefESA_4
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA50_KcEC2EbS7_NS_9StringRefESA_4
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_KcEC2EbS7_NS_9StringRefESA_4
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_KcEC2EbS7_NS_9StringRefESA_4
_ZN5Catch10BinaryExprIRKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESaIS9_EERSB_EC2EbSD_NS_9StringRefESE_6
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA12_KcEC2EbS7_NS_9StringRefESA_6
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA19_KcEC2EbS7_NS_9StringRefESA_6
_ZN5Catch10BinaryExprIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcEC2EbS8_NS_9StringRefESB_10
_ZN5Catch10BinaryExprIRKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERS9_EC2EbSB_NS_9StringRefESC_10
_ZN5Catch10BinaryExprIRKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESaIS9_EESD_EC2EbSD_NS_9StringRefESD_10
_ZN5Catch10BinaryExprIjiEC2EbjNS_9StringRefEi10
_ZN5Catch10BinaryExprIlmEC2EblNS_9StringRefEm10
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA20_KcEC2EbS7_NS_9StringRefESA_12
_ZN5Catch10BinaryExprIllEC2EblNS_9StringRefEl12
_ZN5Catch10BinaryExprImlEC2EbmNS_9StringRefEl16
_ZN5Catch10BinaryExprIRKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EESB_EC2EbSB_NS_9StringRefESB_18
_ZN5Catch10BinaryExprIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_EC2EbS8_NS_9StringRefES8_32
_ZN5Catch10BinaryExprIRSt6vectorISt4pairIiiESaIS3_EES6_EC2EbS6_NS_9StringRefES6_32
_ZN5Catch10BinaryExprIRSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EESA_EC2EbSA_NS_9StringRefESA_40
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EC2EbS7_NS_9StringRefES7_42
_ZN5Catch10BinaryExprIRSt6vectorIiSaIiEES4_EC2EbS4_NS_9StringRefES4_44
_ZN5Catch10BinaryExprIRKN8bayesnet8status_tES4_EC2EbS4_NS_9StringRefES4_64
_ZN5Catch10BinaryExprImiEC2EbmNS_9StringRefEi94
_ZN5Catch10BinaryExprImmEC2EbmNS_9StringRefEm94
_ZN5Catch10BinaryExprIfRNS_6ApproxEEC2EbfNS_9StringRefES2_108
_ZN5Catch10BinaryExprIiiEC2EbiNS_9StringRefEi296
_ZN5Catch10BinaryExprIdRNS_6ApproxEEC2EbdNS_9StringRefES2_816
_ZN5CatcheqIdEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIfT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprIfS5_EEE4typeEONS_7ExprLhsIfEES5_1832
_ZN5CatcheqIRA1_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISG_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISF_RKSG_EEE4typeEONS_7ExprLhsISF_EEOSG_2
_ZN5CatcheqIRA1_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_2
_ZN5CatcheqIRA2_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_2
_ZN5CatcheqIRA34_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_2
_ZN5CatcheqIRA3_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_2
_ZN5CatcheqIRA52_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_2
_ZN5CatcheqIRA53_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_2
_ZN5CatcheqIRA5_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISG_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISF_RKSG_EEE4typeEONS_7ExprLhsISF_EEOSG_2
_ZN5CatcheqIRA99_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_2
_ZN5CatcheqIdEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIfT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprIfS5_EEE4typeEONS_7ExprLhsIfEES5_2
_ZN5CatcheqIfEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIfT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprIfS5_EEE4typeEONS_7ExprLhsIfEES5_2
_ZN5CatcheqIiEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIfT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprIfS5_EEE4typeEONS_7ExprLhsIfEES5_2
_ZN5CatcheqIRA11_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_4
_ZN5CatcheqIRA49_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_4
_ZN5CatcheqIRA50_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_4
_ZN5CatcheqIRA6_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_4
_ZN5CatcheqIRA7_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_4
_ZN5CatcheqIRA12_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_6
_ZN5CatcheqIRA19_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_6
_ZN5CatcheqIRSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESaIS9_EEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRKSB_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISJ_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISI_RKSJ_EEE4typeEONS_7ExprLhsISI_EEOSJ_6
_ZN5CatcheqIRA3_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISG_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISF_RKSG_EEE4typeEONS_7ExprLhsISF_EEOSG_10
_ZN5CatcheqIRSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRKS9_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISH_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISG_RKSH_EEE4typeEONS_7ExprLhsISG_EEOSH_10
_ZN5CatcheqISt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESaIS9_EEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRKSB_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISI_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISH_RKSI_EEE4typeEONS_7ExprLhsISH_EEOSI_10
_ZN5CatcheqIiEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIjT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprIjS5_EEE4typeEONS_7ExprLhsIjEES5_10
_ZN5CatcheqImEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIlT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprIlS5_EEE4typeEONS_7ExprLhsIlEES5_10
_ZN5CatcheqIRA20_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_12
_ZN5CatcheqIlEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIlT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprIlS5_EEE4typeEONS_7ExprLhsIlEES5_12
_ZN5CatcheqINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRKS6_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISD_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISC_RKSD_EEE4typeEONS_7ExprLhsISC_EEOSD_16
_ZN5CatcheqIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIS8_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISD_E4typeEE4typeEEEEEE5valueENS_10BinaryExprIS8_RKSD_EEE4typeEONS_7ExprLhsIS8_EEOSD_16
_ZN5CatcheqIlEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableImT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprImS5_EEE4typeEONS_7ExprLhsImEES5_16
_ZN5CatcheqISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRKS9_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISG_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISF_RKSG_EEE4typeEONS_7ExprLhsISF_EEOSG_18
_ZN5CatcheqIRSt6vectorISt4pairIiiESaIS3_EEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIS6_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISB_E4typeEE4typeEEEEEE5valueENS_10BinaryExprIS6_RKSB_EEE4typeEONS_7ExprLhsIS6_EEOSB_32
_ZN5CatcheqIRSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableISA_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISA_RKSF_EEE4typeEONS_7ExprLhsISA_EEOSF_40
_ZN5CatcheqIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIS7_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISC_E4typeEE4typeEEEEEE5valueENS_10BinaryExprIS7_RKSC_EEE4typeEONS_7ExprLhsIS7_EEOSC_42
_ZN5CatcheqIRSt6vectorIiSaIiEEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIS4_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceIS9_E4typeEE4typeEEEEEE5valueENS_10BinaryExprIS4_RKS9_EEE4typeEONS_7ExprLhsIS4_EEOS9_44
_ZN5CatcheqIN8bayesnet8status_tEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRKS2_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceIS9_E4typeEE4typeEEEEEE5valueENS_10BinaryExprIS8_RKS9_EEE4typeEONS_7ExprLhsIS8_EEOS9_64
_ZN5CatcheqIiEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableImT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprImS5_EEE4typeEONS_7ExprLhsImEES5_94
_ZN5CatcheqImEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableImT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprImS5_EEE4typeEONS_7ExprLhsImEES5_94
_ZN5CatcheqIRNS_6ApproxEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIfT_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceIS7_E4typeEE4typeEEEEEE5valueENS_10BinaryExprIfRKS7_EEE4typeEONS_7ExprLhsIfEEOS7_108
_ZN5CatcheqIiEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIiT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprIiS5_EEE4typeEONS_7ExprLhsIiEES5_296
_ZN5CatcheqIRNS_6ApproxEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIdT_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceIS7_E4typeEE4typeEEEEEE5valueENS_10BinaryExprIdRKS7_EEE4typeEONS_7ExprLhsIdEEOS7_816
_ZN5Catch7ExprLhsIbEC2Eb1944
_ZN5Catch7ExprLhsIjEC2Ej10
_ZN5Catch7ExprLhsIRKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESaIS9_EEEC2ESD_16
_ZN5Catch7ExprLhsIlEC2El22
_ZN5Catch7ExprLhsIRKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EEEC2ESB_28
_ZN5Catch7ExprLhsIRSt6vectorISt4pairIiiESaIS3_EEEC2ES6_32
_ZN5Catch7ExprLhsIRSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EEEC2ESA_40
_ZN5Catch7ExprLhsIRSt6vectorIiSaIiEEEC2ES4_44
_ZN5Catch7ExprLhsIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ES8_46
_ZN5Catch7ExprLhsIRKN8bayesnet8status_tEEC2ES4_64
_ZN5Catch7ExprLhsIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ES7_100
_ZN5Catch7ExprLhsIbEC2Eb112
_ZN5Catch7ExprLhsIfEC2Ef114
_ZN5Catch7ExprLhsImEC2Em204
_ZN5Catch7ExprLhsIiEC2Ei296
_ZN5Catch7ExprLhsIdEC2Ed816
_ZN5Catch20ITransientExpressionC2Ebb2022
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_decomposer.hpp.func.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_decomposer.hpp.func.html new file mode 100644 index 0000000..0bf6818 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_decomposer.hpp.func.html @@ -0,0 +1,1202 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_decomposer.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_decomposer.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:76.9 %2620
Test Date:2024-04-30 13:17:26Functions:73.5 %155114
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch10BinaryExprIfdEC2EbfNS_9StringRefEd1832
_ZN5Catch10BinaryExprIRKN8bayesnet8status_tES4_EC2EbS4_NS_9StringRefES4_64
_ZN5Catch10BinaryExprIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA1_KcEC2EbS8_NS_9StringRefESB_2
_ZN5Catch10BinaryExprIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcEC2EbS8_NS_9StringRefESB_10
_ZN5Catch10BinaryExprIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_KcEC2EbS8_NS_9StringRefESB_2
_ZN5Catch10BinaryExprIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_EC2EbS8_NS_9StringRefES8_32
_ZN5Catch10BinaryExprIRKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERS9_EC2EbSB_NS_9StringRefESC_10
_ZN5Catch10BinaryExprIRKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EESB_EC2EbSB_NS_9StringRefESB_18
_ZN5Catch10BinaryExprIRKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESaIS9_EERSB_EC2EbSD_NS_9StringRefESE_6
_ZN5Catch10BinaryExprIRKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESaIS9_EESD_EC2EbSD_NS_9StringRefESD_10
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA11_KcEC2EbS7_NS_9StringRefESA_4
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA12_KcEC2EbS7_NS_9StringRefESA_6
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA19_KcEC2EbS7_NS_9StringRefESA_6
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA1_KcEC2EbS7_NS_9StringRefESA_2
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA20_KcEC2EbS7_NS_9StringRefESA_12
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEC2EbS7_NS_9StringRefESA_2
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA34_KcEC2EbS7_NS_9StringRefESA_2
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcEC2EbS7_NS_9StringRefESA_2
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA49_KcEC2EbS7_NS_9StringRefESA_4
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA50_KcEC2EbS7_NS_9StringRefESA_4
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA52_KcEC2EbS7_NS_9StringRefESA_2
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA53_KcEC2EbS7_NS_9StringRefESA_2
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_KcEC2EbS7_NS_9StringRefESA_4
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_KcEC2EbS7_NS_9StringRefESA_4
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA99_KcEC2EbS7_NS_9StringRefESA_2
_ZN5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EC2EbS7_NS_9StringRefES7_42
_ZN5Catch10BinaryExprIRSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EESA_EC2EbSA_NS_9StringRefESA_40
_ZN5Catch10BinaryExprIRSt6vectorISt4pairIiiESaIS3_EES6_EC2EbS6_NS_9StringRefES6_32
_ZN5Catch10BinaryExprIRSt6vectorIiSaIiEES4_EC2EbS4_NS_9StringRefES4_44
_ZN5Catch10BinaryExprIdRNS_6ApproxEEC2EbdNS_9StringRefES2_816
_ZN5Catch10BinaryExprIfRNS_6ApproxEEC2EbfNS_9StringRefES2_108
_ZN5Catch10BinaryExprIfdEC2EbfNS_9StringRefEd2
_ZN5Catch10BinaryExprIffEC2EbfNS_9StringRefEf2
_ZN5Catch10BinaryExprIfiEC2EbfNS_9StringRefEi2
_ZN5Catch10BinaryExprIiiEC2EbiNS_9StringRefEi296
_ZN5Catch10BinaryExprIjiEC2EbjNS_9StringRefEi10
_ZN5Catch10BinaryExprIllEC2EblNS_9StringRefEl12
_ZN5Catch10BinaryExprIlmEC2EblNS_9StringRefEm10
_ZN5Catch10BinaryExprImiEC2EbmNS_9StringRefEi94
_ZN5Catch10BinaryExprImlEC2EbmNS_9StringRefEl16
_ZN5Catch10BinaryExprImmEC2EbmNS_9StringRefEm94
_ZN5Catch20ITransientExpressionC2Ebb2022
_ZN5Catch7ExprLhsIbEC2Eb1944
_ZN5Catch7ExprLhsIRKN8bayesnet8status_tEEC2ES4_64
_ZN5Catch7ExprLhsIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ES8_46
_ZN5Catch7ExprLhsIRKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EEEC2ESB_28
_ZN5Catch7ExprLhsIRKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESaIS9_EEEC2ESD_16
_ZN5Catch7ExprLhsIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ES7_100
_ZN5Catch7ExprLhsIRSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EEEC2ESA_40
_ZN5Catch7ExprLhsIRSt6vectorISt4pairIiiESaIS3_EEEC2ES6_32
_ZN5Catch7ExprLhsIRSt6vectorIiSaIiEEEC2ES4_44
_ZN5Catch7ExprLhsIbEC2Eb112
_ZN5Catch7ExprLhsIdEC2Ed816
_ZN5Catch7ExprLhsIfEC2Ef114
_ZN5Catch7ExprLhsIiEC2Ei296
_ZN5Catch7ExprLhsIjEC2Ej10
_ZN5Catch7ExprLhsIlEC2El22
_ZN5Catch7ExprLhsImEC2Em204
_ZN5Catch9UnaryExprIbEC2Eb112
_ZN5CatcheqIdEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIfT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprIfS5_EEE4typeEONS_7ExprLhsIfEES5_1832
_ZN5CatcheqIN8bayesnet8status_tEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRKS2_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceIS9_E4typeEE4typeEEEEEE5valueENS_10BinaryExprIS8_RKS9_EEE4typeEONS_7ExprLhsIS8_EEOS9_64
_ZN5CatcheqINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRKS6_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISD_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISC_RKSD_EEE4typeEONS_7ExprLhsISC_EEOSD_16
_ZN5CatcheqIRA11_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_4
_ZN5CatcheqIRA12_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_6
_ZN5CatcheqIRA19_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_6
_ZN5CatcheqIRA1_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISG_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISF_RKSG_EEE4typeEONS_7ExprLhsISF_EEOSG_2
_ZN5CatcheqIRA1_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_2
_ZN5CatcheqIRA20_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_12
_ZN5CatcheqIRA2_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_2
_ZN5CatcheqIRA34_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_2
_ZN5CatcheqIRA3_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISG_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISF_RKSG_EEE4typeEONS_7ExprLhsISF_EEOSG_10
_ZN5CatcheqIRA3_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_2
_ZN5CatcheqIRA49_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_4
_ZN5CatcheqIRA50_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_4
_ZN5CatcheqIRA52_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_2
_ZN5CatcheqIRA53_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_2
_ZN5CatcheqIRA5_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISG_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISF_RKSG_EEE4typeEONS_7ExprLhsISF_EEOSG_2
_ZN5CatcheqIRA6_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_4
_ZN5CatcheqIRA7_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_4
_ZN5CatcheqIRA99_KcEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISE_RKSF_EEE4typeEONS_7ExprLhsISE_EEOSF_2
_ZN5CatcheqIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIS8_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISD_E4typeEE4typeEEEEEE5valueENS_10BinaryExprIS8_RKSD_EEE4typeEONS_7ExprLhsIS8_EEOSD_16
_ZN5CatcheqIRNS_6ApproxEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIdT_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceIS7_E4typeEE4typeEEEEEE5valueENS_10BinaryExprIdRKS7_EEE4typeEONS_7ExprLhsIdEEOS7_816
_ZN5CatcheqIRNS_6ApproxEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIfT_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceIS7_E4typeEE4typeEEEEEE5valueENS_10BinaryExprIfRKS7_EEE4typeEONS_7ExprLhsIfEEOS7_108
_ZN5CatcheqIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIS7_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISC_E4typeEE4typeEEEEEE5valueENS_10BinaryExprIS7_RKSC_EEE4typeEONS_7ExprLhsIS7_EEOSC_42
_ZN5CatcheqIRSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRKS9_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISH_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISG_RKSH_EEE4typeEONS_7ExprLhsISG_EEOSH_10
_ZN5CatcheqIRSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableISA_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISF_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISA_RKSF_EEE4typeEONS_7ExprLhsISA_EEOSF_40
_ZN5CatcheqIRSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESaIS9_EEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRKSB_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISJ_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISI_RKSJ_EEE4typeEONS_7ExprLhsISI_EEOSJ_6
_ZN5CatcheqIRSt6vectorISt4pairIiiESaIS3_EEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIS6_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISB_E4typeEE4typeEEEEEE5valueENS_10BinaryExprIS6_RKSB_EEE4typeEONS_7ExprLhsIS6_EEOSB_32
_ZN5CatcheqIRSt6vectorIiSaIiEEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIS4_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceIS9_E4typeEE4typeEEEEEE5valueENS_10BinaryExprIS4_RKS9_EEE4typeEONS_7ExprLhsIS4_EEOS9_44
_ZN5CatcheqISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRKS9_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISG_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISF_RKSG_EEE4typeEONS_7ExprLhsISF_EEOSG_18
_ZN5CatcheqISt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESaIS9_EEEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIRKSB_T_vEESt8negationINS_16capture_by_valueINSt9remove_cvINSt16remove_referenceISI_E4typeEE4typeEEEEEE5valueENS_10BinaryExprISH_RKSI_EEE4typeEONS_7ExprLhsISH_EEOSI_10
_ZN5CatcheqIdEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIfT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprIfS5_EEE4typeEONS_7ExprLhsIfEES5_2
_ZN5CatcheqIfEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIfT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprIfS5_EEE4typeEONS_7ExprLhsIfEES5_2
_ZN5CatcheqIiEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIfT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprIfS5_EEE4typeEONS_7ExprLhsIfEES5_2
_ZN5CatcheqIiEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIiT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprIiS5_EEE4typeEONS_7ExprLhsIiEES5_296
_ZN5CatcheqIiEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIjT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprIjS5_EEE4typeEONS_7ExprLhsIjEES5_10
_ZN5CatcheqIiEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableImT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprImS5_EEE4typeEONS_7ExprLhsImEES5_94
_ZN5CatcheqIlEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIlT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprIlS5_EEE4typeEONS_7ExprLhsIlEES5_12
_ZN5CatcheqIlEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableImT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprImS5_EEE4typeEONS_7ExprLhsImEES5_16
_ZN5CatcheqImEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableIlT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprIlS5_EEE4typeEONS_7ExprLhsIlEES5_10
_ZN5CatcheqImEENSt9enable_ifIXsrSt11conjunctionIJNS_6Detail16is_eq_comparableImT_vEENS_16capture_by_valueIS5_EEEE5valueENS_10BinaryExprImS5_EEE4typeEONS_7ExprLhsImEES5_94
_ZN5CatchleIRSt6vectorIiSaIiEELi0EEENS_7ExprLhsIRKT_EEONS_10DecomposerEOS6_370
_ZN5CatchleIN8bayesnet8status_tELi0EEENS_7ExprLhsIRKT_EEONS_10DecomposerEOS4_64
_ZN5CatchleINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELi0EEENS_7ExprLhsIRKT_EEONS_10DecomposerEOS8_46
_ZN5CatchleIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELi0EEENS_7ExprLhsIRKT_EEONS_10DecomposerEOS9_100
_ZN5CatchleIRSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EELi0EEENS_7ExprLhsIRKT_EEONS_10DecomposerEOSC_40
_ZN5CatchleIRSt6vectorISt4pairIiiESaIS3_EELi0EEENS_7ExprLhsIRKT_EEONS_10DecomposerEOS8_32
_ZN5CatchleIRSt6vectorIiSaIiEELi0EEENS_7ExprLhsIRKT_EEONS_10DecomposerEOS6_44
_ZN5CatchleISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EELi0EEENS_7ExprLhsIRKT_EEONS_10DecomposerEOSB_28
_ZN5CatchleISt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESaIS9_EELi0EEENS_7ExprLhsIRKT_EEONS_10DecomposerEOSD_16
_ZN5CatchleIbLi0EEENS_7ExprLhsIT_EEONS_10DecomposerES2_1574
_ZN5CatchleIbLi0EEENS_7ExprLhsIT_EEONS_10DecomposerES2_112
_ZN5CatchleIdLi0EEENS_7ExprLhsIT_EEONS_10DecomposerES2_816
_ZN5CatchleIfLi0EEENS_7ExprLhsIT_EEONS_10DecomposerES2_114
_ZN5CatchleIiLi0EEENS_7ExprLhsIT_EEONS_10DecomposerES2_296
_ZN5CatchleIjLi0EEENS_7ExprLhsIT_EEONS_10DecomposerES2_10
_ZN5CatchleIlLi0EEENS_7ExprLhsIT_EEONS_10DecomposerES2_22
_ZN5CatchleImLi0EEENS_7ExprLhsIT_EEONS_10DecomposerES2_204
_ZNK5Catch10BinaryExprIfdE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRKN8bayesnet8status_tES4_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA1_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERS9_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EESB_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESaIS9_EERSB_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESaIS9_EESD_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA11_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA12_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA19_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA1_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA20_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA34_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA49_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA50_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA52_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA53_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA7_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA99_KcE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EESA_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRSt6vectorISt4pairIiiESaIS3_EES6_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIRSt6vectorIiSaIiEES4_E29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIdRNS_6ApproxEE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIfRNS_6ApproxEE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIfdE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIffE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIfiE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIiiE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIjiE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIllE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprIlmE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprImiE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprImlE29streamReconstructedExpressionERSo0
_ZNK5Catch10BinaryExprImmE29streamReconstructedExpressionERSo0
_ZNK5Catch7ExprLhsIbE13makeUnaryExprEv112
_ZNK5Catch9UnaryExprIbE29streamReconstructedExpressionERSo0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_decomposer.hpp.gcov.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_decomposer.hpp.gcov.html new file mode 100644 index 0000000..afc5383 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_decomposer.hpp.gcov.html @@ -0,0 +1,532 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_decomposer.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_decomposer.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:76.9 %2620
Test Date:2024-04-30 13:17:26Functions:73.5 %155114
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : 
+       2              : //              Copyright Catch2 Authors
+       3              : // Distributed under the Boost Software License, Version 1.0.
+       4              : //   (See accompanying file LICENSE.txt or copy at
+       5              : //        https://www.boost.org/LICENSE_1_0.txt)
+       6              : 
+       7              : // SPDX-License-Identifier: BSL-1.0
+       8              : #ifndef CATCH_DECOMPOSER_HPP_INCLUDED
+       9              : #define CATCH_DECOMPOSER_HPP_INCLUDED
+      10              : 
+      11              : #include <catch2/catch_tostring.hpp>
+      12              : #include <catch2/internal/catch_stringref.hpp>
+      13              : #include <catch2/internal/catch_compare_traits.hpp>
+      14              : #include <catch2/internal/catch_test_failure_exception.hpp>
+      15              : #include <catch2/internal/catch_logical_traits.hpp>
+      16              : #include <catch2/internal/catch_compiler_capabilities.hpp>
+      17              : 
+      18              : #include <type_traits>
+      19              : #include <iosfwd>
+      20              : 
+      21              : /** \file
+      22              :  * Why does decomposing look the way it does:
+      23              :  *
+      24              :  * Conceptually, decomposing is simple. We change `REQUIRE( a == b )` into
+      25              :  * `Decomposer{} <= a == b`, so that `Decomposer{} <= a` is evaluated first,
+      26              :  * and our custom operator is used for `a == b`, because `a` is transformed
+      27              :  * into `ExprLhs<T&>` and then into `BinaryExpr<T&, U&>`.
+      28              :  *
+      29              :  * In practice, decomposing ends up a mess, because we have to support
+      30              :  * various fun things.
+      31              :  *
+      32              :  * 1) Types that are only comparable with literal 0, and they do this by
+      33              :  *    comparing against a magic type with pointer constructor and deleted
+      34              :  *    other constructors. Example: `REQUIRE((a <=> b) == 0)` in libstdc++
+      35              :  *
+      36              :  * 2) Types that are only comparable with literal 0, and they do this by
+      37              :  *    comparing against a magic type with consteval integer constructor.
+      38              :  *    Example: `REQUIRE((a <=> b) == 0)` in current MSVC STL.
+      39              :  *
+      40              :  * 3) Types that have no linkage, and so we cannot form a reference to
+      41              :  *    them. Example: some implementations of traits.
+      42              :  *
+      43              :  * 4) Starting with C++20, when the compiler sees `a == b`, it also uses
+      44              :  *    `b == a` when constructing the overload set. For us this means that
+      45              :  *    when the compiler handles `ExprLhs<T> == b`, it also tries to resolve
+      46              :  *    the overload set for `b == ExprLhs<T>`.
+      47              :  *
+      48              :  * To accomodate these use cases, decomposer ended up rather complex.
+      49              :  *
+      50              :  * 1) These types are handled by adding SFINAE overloads to our comparison
+      51              :  *    operators, checking whether `T == U` are comparable with the given
+      52              :  *    operator, and if not, whether T (or U) are comparable with literal 0.
+      53              :  *    If yes, the overload compares T (or U) with 0 literal inline in the
+      54              :  *    definition.
+      55              :  *
+      56              :  *    Note that for extra correctness, we check  that the other type is
+      57              :  *    either an `int` (literal 0 is captured as `int` by templates), or
+      58              :  *    a `long` (some platforms use 0L for `NULL` and we want to support
+      59              :  *    that for pointer comparisons).
+      60              :  *
+      61              :  * 2) For these types, `is_foo_comparable<T, int>` is true, but letting
+      62              :  *    them fall into the overload that actually does `T == int` causes
+      63              :  *    compilation error. Handling them requires that the decomposition
+      64              :  *    is `constexpr`, so that P2564R3 applies and the `consteval` from
+      65              :  *    their accompanying magic type is propagated through the `constexpr`
+      66              :  *    call stack.
+      67              :  *
+      68              :  *    However this is not enough to handle these types automatically,
+      69              :  *    because our default is to capture types by reference, to avoid
+      70              :  *    runtime copies. While these references cannot become dangling,
+      71              :  *    they outlive the constexpr context and thus the default capture
+      72              :  *    path cannot be actually constexpr.
+      73              :  *
+      74              :  *    The solution is to capture these types by value, by explicitly
+      75              :  *    specializing `Catch::capture_by_value` for them. Catch2 provides
+      76              :  *    specialization for `std::foo_ordering`s, but users can specialize
+      77              :  *    the trait for their own types as well.
+      78              :  *
+      79              :  * 3) If a type has no linkage, we also cannot capture it by reference.
+      80              :  *    The solution is once again to capture them by value. We handle
+      81              :  *    the common cases by using `std::is_arithmetic` as the default
+      82              :  *    for `Catch::capture_by_value`, but that is only a some-effort
+      83              :  *    heuristic. But as with 2), users can specialize `capture_by_value`
+      84              :  *    for their own types as needed.
+      85              :  *
+      86              :  * 4) To support C++20 and make the SFINAE on our decomposing operators
+      87              :  *    work, the SFINAE has to happen in return type, rather than in
+      88              :  *    a template type. This is due to our use of logical type traits
+      89              :  *    (`conjunction`/`disjunction`/`negation`), that we use to workaround
+      90              :  *    an issue in older (9-) versions of GCC. I still blame C++20 for
+      91              :  *    this, because without the comparison order switching, the logical
+      92              :  *    traits could still be used in template type.
+      93              :  *
+      94              :  * There are also other side concerns, e.g. supporting both `REQUIRE(a)`
+      95              :  * and `REQUIRE(a == b)`, or making `REQUIRE_THAT(a, IsEqual(b))` slot
+      96              :  * nicely into the same expression handling logic, but these are rather
+      97              :  * straightforward and add only a bit of complexity (e.g. common base
+      98              :  * class for decomposed expressions).
+      99              :  */
+     100              : 
+     101              : #ifdef _MSC_VER
+     102              : #pragma warning(push)
+     103              : #pragma warning(disable:4389) // '==' : signed/unsigned mismatch
+     104              : #pragma warning(disable:4018) // more "signed/unsigned mismatch"
+     105              : #pragma warning(disable:4312) // Converting int to T* using reinterpret_cast (issue on x64 platform)
+     106              : #pragma warning(disable:4180) // qualifier applied to function type has no meaning
+     107              : #pragma warning(disable:4800) // Forcing result to true or false
+     108              : #endif
+     109              : 
+     110              : #ifdef __clang__
+     111              : #  pragma clang diagnostic push
+     112              : #  pragma clang diagnostic ignored "-Wsign-compare"
+     113              : #elif defined __GNUC__
+     114              : #  pragma GCC diagnostic push
+     115              : #  pragma GCC diagnostic ignored "-Wsign-compare"
+     116              : #endif
+     117              : 
+     118              : #if defined(CATCH_CPP20_OR_GREATER) && __has_include(<compare>)
+     119              : #  include <compare>
+     120              : #    if defined( __cpp_lib_three_way_comparison ) && \
+     121              :             __cpp_lib_three_way_comparison >= 201907L
+     122              : #      define CATCH_CONFIG_CPP20_COMPARE_OVERLOADS
+     123              : #    endif
+     124              : #endif
+     125              : 
+     126              : namespace Catch {
+     127              : 
+     128              :     namespace Detail {
+     129              :         // This was added in C++20, but we require only C++14 for now.
+     130              :         template <typename T>
+     131              :         using RemoveCVRef_t = std::remove_cv_t<std::remove_reference_t<T>>;
+     132              :     }
+     133              : 
+     134              :     // Note: There is nothing that stops us from extending this,
+     135              :     //       e.g. to `std::is_scalar`, but the more encompassing
+     136              :     //       traits are usually also more expensive. For now we
+     137              :     //       keep this as it used to be and it can be changed later.
+     138              :     template <typename T>
+     139              :     struct capture_by_value
+     140              :         : std::integral_constant<bool, std::is_arithmetic<T>{}> {};
+     141              : 
+     142              : #if defined( CATCH_CONFIG_CPP20_COMPARE_OVERLOADS )
+     143              :     template <>
+     144              :     struct capture_by_value<std::strong_ordering> : std::true_type {};
+     145              :     template <>
+     146              :     struct capture_by_value<std::weak_ordering> : std::true_type {};
+     147              :     template <>
+     148              :     struct capture_by_value<std::partial_ordering> : std::true_type {};
+     149              : #endif
+     150              : 
+     151              :     template <typename T>
+     152              :     struct always_false : std::false_type {};
+     153              : 
+     154              :     class ITransientExpression {
+     155              :         bool m_isBinaryExpression;
+     156              :         bool m_result;
+     157              : 
+     158              :     public:
+     159              :         constexpr auto isBinaryExpression() const -> bool { return m_isBinaryExpression; }
+     160              :         constexpr auto getResult() const -> bool { return m_result; }
+     161              :         //! This function **has** to be overriden by the derived class.
+     162              :         virtual void streamReconstructedExpression( std::ostream& os ) const;
+     163              : 
+     164         2022 :         constexpr ITransientExpression( bool isBinaryExpression, bool result )
+     165         2022 :         :   m_isBinaryExpression( isBinaryExpression ),
+     166         2022 :             m_result( result )
+     167         2022 :         {}
+     168              : 
+     169              :         ITransientExpression() = default;
+     170              :         ITransientExpression(ITransientExpression const&) = default;
+     171              :         ITransientExpression& operator=(ITransientExpression const&) = default;
+     172              : 
+     173              :         friend std::ostream& operator<<(std::ostream& out, ITransientExpression const& expr) {
+     174              :             expr.streamReconstructedExpression(out);
+     175              :             return out;
+     176              :         }
+     177              : 
+     178              :     protected:
+     179              :         ~ITransientExpression() = default;
+     180              :     };
+     181              : 
+     182              :     void formatReconstructedExpression( std::ostream &os, std::string const& lhs, StringRef op, std::string const& rhs );
+     183              : 
+     184              :     template<typename LhsT, typename RhsT>
+     185              :     class BinaryExpr  : public ITransientExpression {
+     186              :         LhsT m_lhs;
+     187              :         StringRef m_op;
+     188              :         RhsT m_rhs;
+     189              : 
+     190            0 :         void streamReconstructedExpression( std::ostream &os ) const override {
+     191              :             formatReconstructedExpression
+     192            0 :                     ( os, Catch::Detail::stringify( m_lhs ), m_op, Catch::Detail::stringify( m_rhs ) );
+     193            0 :         }
+     194              : 
+     195              :     public:
+     196         1832 :         constexpr BinaryExpr( bool comparisonResult, LhsT lhs, StringRef op, RhsT rhs )
+     197              :         :   ITransientExpression{ true, comparisonResult },
+     198         1832 :             m_lhs( lhs ),
+     199         1832 :             m_op( op ),
+     200         1832 :             m_rhs( rhs )
+     201         1832 :         {}
+     202              : 
+     203              :         template<typename T>
+     204              :         auto operator && ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+     205              :             static_assert(always_false<T>::value,
+     206              :             "chained comparisons are not supported inside assertions, "
+     207              :             "wrap the expression inside parentheses, or decompose it");
+     208              :         }
+     209              : 
+     210              :         template<typename T>
+     211              :         auto operator || ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+     212              :             static_assert(always_false<T>::value,
+     213              :             "chained comparisons are not supported inside assertions, "
+     214              :             "wrap the expression inside parentheses, or decompose it");
+     215              :         }
+     216              : 
+     217              :         template<typename T>
+     218              :         auto operator == ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+     219              :             static_assert(always_false<T>::value,
+     220              :             "chained comparisons are not supported inside assertions, "
+     221              :             "wrap the expression inside parentheses, or decompose it");
+     222              :         }
+     223              : 
+     224              :         template<typename T>
+     225              :         auto operator != ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+     226              :             static_assert(always_false<T>::value,
+     227              :             "chained comparisons are not supported inside assertions, "
+     228              :             "wrap the expression inside parentheses, or decompose it");
+     229              :         }
+     230              : 
+     231              :         template<typename T>
+     232              :         auto operator > ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+     233              :             static_assert(always_false<T>::value,
+     234              :             "chained comparisons are not supported inside assertions, "
+     235              :             "wrap the expression inside parentheses, or decompose it");
+     236              :         }
+     237              : 
+     238              :         template<typename T>
+     239              :         auto operator < ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+     240              :             static_assert(always_false<T>::value,
+     241              :             "chained comparisons are not supported inside assertions, "
+     242              :             "wrap the expression inside parentheses, or decompose it");
+     243              :         }
+     244              : 
+     245              :         template<typename T>
+     246              :         auto operator >= ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+     247              :             static_assert(always_false<T>::value,
+     248              :             "chained comparisons are not supported inside assertions, "
+     249              :             "wrap the expression inside parentheses, or decompose it");
+     250              :         }
+     251              : 
+     252              :         template<typename T>
+     253              :         auto operator <= ( T ) const -> BinaryExpr<LhsT, RhsT const&> const {
+     254              :             static_assert(always_false<T>::value,
+     255              :             "chained comparisons are not supported inside assertions, "
+     256              :             "wrap the expression inside parentheses, or decompose it");
+     257              :         }
+     258              :     };
+     259              : 
+     260              :     template<typename LhsT>
+     261              :     class UnaryExpr : public ITransientExpression {
+     262              :         LhsT m_lhs;
+     263              : 
+     264            0 :         void streamReconstructedExpression( std::ostream &os ) const override {
+     265            0 :             os << Catch::Detail::stringify( m_lhs );
+     266            0 :         }
+     267              : 
+     268              :     public:
+     269          112 :         explicit constexpr UnaryExpr( LhsT lhs )
+     270              :         :   ITransientExpression{ false, static_cast<bool>(lhs) },
+     271          112 :             m_lhs( lhs )
+     272          112 :         {}
+     273              :     };
+     274              : 
+     275              : 
+     276              :     template<typename LhsT>
+     277              :     class ExprLhs {
+     278              :         LhsT m_lhs;
+     279              :     public:
+     280         1944 :         explicit constexpr ExprLhs( LhsT lhs ) : m_lhs( lhs ) {}
+     281              : 
+     282              : #define CATCH_INTERNAL_DEFINE_EXPRESSION_EQUALITY_OPERATOR( id, op )           \
+     283              :     template <typename RhsT>                                                   \
+     284              :     constexpr friend auto operator op( ExprLhs&& lhs, RhsT&& rhs )             \
+     285              :         -> std::enable_if_t<                                                   \
+     286              :             Detail::conjunction<Detail::is_##id##_comparable<LhsT, RhsT>,      \
+     287              :                                 Detail::negation<capture_by_value<             \
+     288              :                                     Detail::RemoveCVRef_t<RhsT>>>>::value,     \
+     289              :             BinaryExpr<LhsT, RhsT const&>> {                                   \
+     290              :         return {                                                               \
+     291              :             static_cast<bool>( lhs.m_lhs op rhs ), lhs.m_lhs, #op##_sr, rhs }; \
+     292              :     }                                                                          \
+     293              :     template <typename RhsT>                                                   \
+     294              :     constexpr friend auto operator op( ExprLhs&& lhs, RhsT rhs )               \
+     295              :         -> std::enable_if_t<                                                   \
+     296              :             Detail::conjunction<Detail::is_##id##_comparable<LhsT, RhsT>,      \
+     297              :                                 capture_by_value<RhsT>>::value,                \
+     298              :             BinaryExpr<LhsT, RhsT>> {                                          \
+     299              :         return {                                                               \
+     300              :             static_cast<bool>( lhs.m_lhs op rhs ), lhs.m_lhs, #op##_sr, rhs }; \
+     301              :     }                                                                          \
+     302              :     template <typename RhsT>                                                   \
+     303              :     constexpr friend auto operator op( ExprLhs&& lhs, RhsT rhs )               \
+     304              :         -> std::enable_if_t<                                                   \
+     305              :             Detail::conjunction<                                               \
+     306              :                 Detail::negation<Detail::is_##id##_comparable<LhsT, RhsT>>,    \
+     307              :                 Detail::is_eq_0_comparable<LhsT>,                              \
+     308              :               /* We allow long because we want `ptr op NULL` to be accepted */ \
+     309              :                 Detail::disjunction<std::is_same<RhsT, int>,                   \
+     310              :                                     std::is_same<RhsT, long>>>::value,         \
+     311              :             BinaryExpr<LhsT, RhsT>> {                                          \
+     312              :         if ( rhs != 0 ) { throw_test_failure_exception(); }                    \
+     313              :         return {                                                               \
+     314              :             static_cast<bool>( lhs.m_lhs op 0 ), lhs.m_lhs, #op##_sr, rhs };   \
+     315              :     }                                                                          \
+     316              :     template <typename RhsT>                                                   \
+     317              :     constexpr friend auto operator op( ExprLhs&& lhs, RhsT rhs )               \
+     318              :         -> std::enable_if_t<                                                   \
+     319              :             Detail::conjunction<                                               \
+     320              :                 Detail::negation<Detail::is_##id##_comparable<LhsT, RhsT>>,    \
+     321              :                 Detail::is_eq_0_comparable<RhsT>,                              \
+     322              :               /* We allow long because we want `ptr op NULL` to be accepted */ \
+     323              :                 Detail::disjunction<std::is_same<LhsT, int>,                   \
+     324              :                                     std::is_same<LhsT, long>>>::value,         \
+     325              :             BinaryExpr<LhsT, RhsT>> {                                          \
+     326              :         if ( lhs.m_lhs != 0 ) { throw_test_failure_exception(); }              \
+     327              :         return { static_cast<bool>( 0 op rhs ), lhs.m_lhs, #op##_sr, rhs };    \
+     328              :     }
+     329              : 
+     330         1832 :         CATCH_INTERNAL_DEFINE_EXPRESSION_EQUALITY_OPERATOR( eq, == )
+     331              :         CATCH_INTERNAL_DEFINE_EXPRESSION_EQUALITY_OPERATOR( ne, != )
+     332              : 
+     333              :     #undef CATCH_INTERNAL_DEFINE_EXPRESSION_EQUALITY_OPERATOR
+     334              : 
+     335              : 
+     336              : #define CATCH_INTERNAL_DEFINE_EXPRESSION_COMPARISON_OPERATOR( id, op )         \
+     337              :     template <typename RhsT>                                                   \
+     338              :     constexpr friend auto operator op( ExprLhs&& lhs, RhsT&& rhs )             \
+     339              :         -> std::enable_if_t<                                                   \
+     340              :             Detail::conjunction<Detail::is_##id##_comparable<LhsT, RhsT>,      \
+     341              :                                 Detail::negation<capture_by_value<             \
+     342              :                                     Detail::RemoveCVRef_t<RhsT>>>>::value,     \
+     343              :             BinaryExpr<LhsT, RhsT const&>> {                                   \
+     344              :         return {                                                               \
+     345              :             static_cast<bool>( lhs.m_lhs op rhs ), lhs.m_lhs, #op##_sr, rhs }; \
+     346              :     }                                                                          \
+     347              :     template <typename RhsT>                                                   \
+     348              :     constexpr friend auto operator op( ExprLhs&& lhs, RhsT rhs )               \
+     349              :         -> std::enable_if_t<                                                   \
+     350              :             Detail::conjunction<Detail::is_##id##_comparable<LhsT, RhsT>,      \
+     351              :                                 capture_by_value<RhsT>>::value,                \
+     352              :             BinaryExpr<LhsT, RhsT>> {                                          \
+     353              :         return {                                                               \
+     354              :             static_cast<bool>( lhs.m_lhs op rhs ), lhs.m_lhs, #op##_sr, rhs }; \
+     355              :     }                                                                          \
+     356              :     template <typename RhsT>                                                   \
+     357              :     constexpr friend auto operator op( ExprLhs&& lhs, RhsT rhs )               \
+     358              :         -> std::enable_if_t<                                                   \
+     359              :             Detail::conjunction<                                               \
+     360              :                 Detail::negation<Detail::is_##id##_comparable<LhsT, RhsT>>,    \
+     361              :                 Detail::is_##id##_0_comparable<LhsT>,                          \
+     362              :                 std::is_same<RhsT, int>>::value,                               \
+     363              :             BinaryExpr<LhsT, RhsT>> {                                          \
+     364              :         if ( rhs != 0 ) { throw_test_failure_exception(); }                    \
+     365              :         return {                                                               \
+     366              :             static_cast<bool>( lhs.m_lhs op 0 ), lhs.m_lhs, #op##_sr, rhs };   \
+     367              :     }                                                                          \
+     368              :     template <typename RhsT>                                                   \
+     369              :     constexpr friend auto operator op( ExprLhs&& lhs, RhsT rhs )               \
+     370              :         -> std::enable_if_t<                                                   \
+     371              :             Detail::conjunction<                                               \
+     372              :                 Detail::negation<Detail::is_##id##_comparable<LhsT, RhsT>>,    \
+     373              :                 Detail::is_##id##_0_comparable<RhsT>,                          \
+     374              :                 std::is_same<LhsT, int>>::value,                               \
+     375              :             BinaryExpr<LhsT, RhsT>> {                                          \
+     376              :         if ( lhs.m_lhs != 0 ) { throw_test_failure_exception(); }              \
+     377              :         return { static_cast<bool>( 0 op rhs ), lhs.m_lhs, #op##_sr, rhs };    \
+     378              :     }
+     379              : 
+     380              :         CATCH_INTERNAL_DEFINE_EXPRESSION_COMPARISON_OPERATOR( lt, < )
+     381              :         CATCH_INTERNAL_DEFINE_EXPRESSION_COMPARISON_OPERATOR( le, <= )
+     382              :         CATCH_INTERNAL_DEFINE_EXPRESSION_COMPARISON_OPERATOR( gt, > )
+     383              :         CATCH_INTERNAL_DEFINE_EXPRESSION_COMPARISON_OPERATOR( ge, >= )
+     384              : 
+     385              :     #undef CATCH_INTERNAL_DEFINE_EXPRESSION_COMPARISON_OPERATOR
+     386              : 
+     387              : 
+     388              : #define CATCH_INTERNAL_DEFINE_EXPRESSION_OPERATOR( op )                        \
+     389              :     template <typename RhsT>                                                   \
+     390              :     constexpr friend auto operator op( ExprLhs&& lhs, RhsT&& rhs )             \
+     391              :         -> std::enable_if_t<                                                   \
+     392              :             !capture_by_value<Detail::RemoveCVRef_t<RhsT>>::value,             \
+     393              :             BinaryExpr<LhsT, RhsT const&>> {                                   \
+     394              :         return {                                                               \
+     395              :             static_cast<bool>( lhs.m_lhs op rhs ), lhs.m_lhs, #op##_sr, rhs }; \
+     396              :     }                                                                          \
+     397              :     template <typename RhsT>                                                   \
+     398              :     constexpr friend auto operator op( ExprLhs&& lhs, RhsT rhs )               \
+     399              :         -> std::enable_if_t<capture_by_value<RhsT>::value,                     \
+     400              :                             BinaryExpr<LhsT, RhsT>> {                          \
+     401              :         return {                                                               \
+     402              :             static_cast<bool>( lhs.m_lhs op rhs ), lhs.m_lhs, #op##_sr, rhs }; \
+     403              :     }
+     404              : 
+     405              :         CATCH_INTERNAL_DEFINE_EXPRESSION_OPERATOR(|)
+     406              :         CATCH_INTERNAL_DEFINE_EXPRESSION_OPERATOR(&)
+     407              :         CATCH_INTERNAL_DEFINE_EXPRESSION_OPERATOR(^)
+     408              : 
+     409              :     #undef CATCH_INTERNAL_DEFINE_EXPRESSION_OPERATOR
+     410              : 
+     411              :         template<typename RhsT>
+     412              :         friend auto operator && ( ExprLhs &&, RhsT && ) -> BinaryExpr<LhsT, RhsT const&> {
+     413              :             static_assert(always_false<RhsT>::value,
+     414              :             "operator&& is not supported inside assertions, "
+     415              :             "wrap the expression inside parentheses, or decompose it");
+     416              :         }
+     417              : 
+     418              :         template<typename RhsT>
+     419              :         friend auto operator || ( ExprLhs &&, RhsT && ) -> BinaryExpr<LhsT, RhsT const&> {
+     420              :             static_assert(always_false<RhsT>::value,
+     421              :             "operator|| is not supported inside assertions, "
+     422              :             "wrap the expression inside parentheses, or decompose it");
+     423              :         }
+     424              : 
+     425          112 :         constexpr auto makeUnaryExpr() const -> UnaryExpr<LhsT> {
+     426          112 :             return UnaryExpr<LhsT>{ m_lhs };
+     427              :         }
+     428              :     };
+     429              : 
+     430              :     struct Decomposer {
+     431              :         template <typename T,
+     432              :                   std::enable_if_t<!capture_by_value<Detail::RemoveCVRef_t<T>>::value,
+     433              :                       int> = 0>
+     434          370 :         constexpr friend auto operator <= ( Decomposer &&, T && lhs ) -> ExprLhs<T const&> {
+     435          370 :             return ExprLhs<const T&>{ lhs };
+     436              :         }
+     437              : 
+     438              :         template <typename T,
+     439              :                   std::enable_if_t<capture_by_value<T>::value, int> = 0>
+     440         1574 :         constexpr friend auto operator <= ( Decomposer &&, T value ) -> ExprLhs<T> {
+     441         1574 :             return ExprLhs<T>{ value };
+     442              :         }
+     443              :     };
+     444              : 
+     445              : } // end namespace Catch
+     446              : 
+     447              : #ifdef _MSC_VER
+     448              : #pragma warning(pop)
+     449              : #endif
+     450              : #ifdef __clang__
+     451              : #  pragma clang diagnostic pop
+     452              : #elif defined __GNUC__
+     453              : #  pragma GCC diagnostic pop
+     454              : #endif
+     455              : 
+     456              : #endif // CATCH_DECOMPOSER_HPP_INCLUDED
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_reusable_string_stream.hpp.func-c.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_reusable_string_stream.hpp.func-c.html new file mode 100644 index 0000000..2582a07 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_reusable_string_stream.hpp.func-c.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_reusable_string_stream.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_reusable_string_stream.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %33
Test Date:2024-04-30 13:17:26Functions:37.5 %83
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch20ReusableStringStreamlsIA12_cEERS0_RKT_198
_ZN5Catch20ReusableStringStreamlsIN8bayesnet8status_tEEERS0_RKT_0
_ZN5Catch20ReusableStringStreamlsISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EEEERS0_RKT_0
_ZN5Catch20ReusableStringStreamlsISt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_ESaISA_EEEERS0_RKT_0
_ZN5Catch20ReusableStringStreamlsISt6vectorISt4pairIiiESaIS4_EEEERS0_RKT_0
_ZN5Catch20ReusableStringStreamlsISt6vectorIiSaIiEEEERS0_RKT_0
_ZN5Catch20ReusableStringStreamlsIA12_cEERS0_RKT_24
_ZN5Catch20ReusableStringStreamlsIA13_cEERS0_RKT_24
_ZN5Catch20ReusableStringStreamlsINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEERS0_RKT_150
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_reusable_string_stream.hpp.func.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_reusable_string_stream.hpp.func.html new file mode 100644 index 0000000..54f4ece --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_reusable_string_stream.hpp.func.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_reusable_string_stream.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_reusable_string_stream.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %33
Test Date:2024-04-30 13:17:26Functions:37.5 %83
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch20ReusableStringStreamlsIA12_cEERS0_RKT_198
_ZN5Catch20ReusableStringStreamlsIA12_cEERS0_RKT_24
_ZN5Catch20ReusableStringStreamlsIA13_cEERS0_RKT_24
_ZN5Catch20ReusableStringStreamlsIN8bayesnet8status_tEEERS0_RKT_0
_ZN5Catch20ReusableStringStreamlsINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEERS0_RKT_150
_ZN5Catch20ReusableStringStreamlsISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EEEERS0_RKT_0
_ZN5Catch20ReusableStringStreamlsISt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_ESaISA_EEEERS0_RKT_0
_ZN5Catch20ReusableStringStreamlsISt6vectorISt4pairIiiESaIS4_EEEERS0_RKT_0
_ZN5Catch20ReusableStringStreamlsISt6vectorIiSaIiEEEERS0_RKT_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_reusable_string_stream.hpp.gcov.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_reusable_string_stream.hpp.gcov.html new file mode 100644 index 0000000..56bf6c6 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_reusable_string_stream.hpp.gcov.html @@ -0,0 +1,133 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_reusable_string_stream.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_reusable_string_stream.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %33
Test Date:2024-04-30 13:17:26Functions:37.5 %83
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : 
+       2              : //              Copyright Catch2 Authors
+       3              : // Distributed under the Boost Software License, Version 1.0.
+       4              : //   (See accompanying file LICENSE.txt or copy at
+       5              : //        https://www.boost.org/LICENSE_1_0.txt)
+       6              : 
+       7              : // SPDX-License-Identifier: BSL-1.0
+       8              : #ifndef CATCH_REUSABLE_STRING_STREAM_HPP_INCLUDED
+       9              : #define CATCH_REUSABLE_STRING_STREAM_HPP_INCLUDED
+      10              : 
+      11              : #include <catch2/internal/catch_noncopyable.hpp>
+      12              : 
+      13              : #include <iosfwd>
+      14              : #include <cstddef>
+      15              : #include <ostream>
+      16              : #include <string>
+      17              : 
+      18              : namespace Catch {
+      19              : 
+      20              :     class ReusableStringStream : Detail::NonCopyable {
+      21              :         std::size_t m_index;
+      22              :         std::ostream* m_oss;
+      23              :     public:
+      24              :         ReusableStringStream();
+      25              :         ~ReusableStringStream();
+      26              : 
+      27              :         //! Returns the serialized state
+      28              :         std::string str() const;
+      29              :         //! Sets internal state to `str`
+      30              :         void str(std::string const& str);
+      31              : 
+      32              : #if defined(__GNUC__) && !defined(__clang__)
+      33              : #pragma GCC diagnostic push
+      34              : // Old versions of GCC do not understand -Wnonnull-compare
+      35              : #pragma GCC diagnostic ignored "-Wpragmas"
+      36              : // Streaming a function pointer triggers Waddress and Wnonnull-compare
+      37              : // on GCC, because it implicitly converts it to bool and then decides
+      38              : // that the check it uses (a? true : false) is tautological and cannot
+      39              : // be null...
+      40              : #pragma GCC diagnostic ignored "-Waddress"
+      41              : #pragma GCC diagnostic ignored "-Wnonnull-compare"
+      42              : #endif
+      43              : 
+      44              :         template<typename T>
+      45          198 :         auto operator << ( T const& value ) -> ReusableStringStream& {
+      46          198 :             *m_oss << value;
+      47          198 :             return *this;
+      48              :         }
+      49              : 
+      50              : #if defined(__GNUC__) && !defined(__clang__)
+      51              : #pragma GCC diagnostic pop
+      52              : #endif
+      53              :         auto get() -> std::ostream& { return *m_oss; }
+      54              :     };
+      55              : }
+      56              : 
+      57              : #endif // CATCH_REUSABLE_STRING_STREAM_HPP_INCLUDED
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_source_line_info.hpp.func-c.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_source_line_info.hpp.func-c.html new file mode 100644 index 0000000..482727e --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_source_line_info.hpp.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_source_line_info.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_source_line_info.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %44
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch14SourceLineInfoC2EPKcm3526
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_source_line_info.hpp.func.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_source_line_info.hpp.func.html new file mode 100644 index 0000000..566e04e --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_source_line_info.hpp.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_source_line_info.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_source_line_info.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %44
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch14SourceLineInfoC2EPKcm3526
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_source_line_info.hpp.gcov.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_source_line_info.hpp.gcov.html new file mode 100644 index 0000000..a87c0f8 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_source_line_info.hpp.gcov.html @@ -0,0 +1,113 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_source_line_info.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_source_line_info.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %44
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : 
+       2              : //              Copyright Catch2 Authors
+       3              : // Distributed under the Boost Software License, Version 1.0.
+       4              : //   (See accompanying file LICENSE.txt or copy at
+       5              : //        https://www.boost.org/LICENSE_1_0.txt)
+       6              : 
+       7              : // SPDX-License-Identifier: BSL-1.0
+       8              : #ifndef CATCH_SOURCE_LINE_INFO_HPP_INCLUDED
+       9              : #define CATCH_SOURCE_LINE_INFO_HPP_INCLUDED
+      10              : 
+      11              : #include <cstddef>
+      12              : #include <iosfwd>
+      13              : 
+      14              : namespace Catch {
+      15              : 
+      16              :     struct SourceLineInfo {
+      17              : 
+      18              :         SourceLineInfo() = delete;
+      19         3526 :         constexpr SourceLineInfo( char const* _file, std::size_t _line ) noexcept:
+      20         3526 :             file( _file ),
+      21         3526 :             line( _line )
+      22         3526 :         {}
+      23              : 
+      24              :         bool operator == ( SourceLineInfo const& other ) const noexcept;
+      25              :         bool operator < ( SourceLineInfo const& other ) const noexcept;
+      26              : 
+      27              :         char const* file;
+      28              :         std::size_t line;
+      29              : 
+      30              :         friend std::ostream& operator << (std::ostream& os, SourceLineInfo const& info);
+      31              :     };
+      32              : }
+      33              : 
+      34              : #define CATCH_INTERNAL_LINEINFO \
+      35              :     ::Catch::SourceLineInfo( __FILE__, static_cast<std::size_t>( __LINE__ ) )
+      36              : 
+      37              : #endif // CATCH_SOURCE_LINE_INFO_HPP_INCLUDED
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_stringref.hpp.func-c.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_stringref.hpp.func-c.html new file mode 100644 index 0000000..d7ef61d --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_stringref.hpp.func-c.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_stringref.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_stringref.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1313
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch9StringRefC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE1274
_ZN5Catch9StringRefC2Ev4340
_Zli9_catch_srPKcm4446
_ZN5Catchli3_srEPKcm7018
_ZN5Catch9StringRefC2EPKcm13032
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_stringref.hpp.func.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_stringref.hpp.func.html new file mode 100644 index 0000000..95748ec --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_stringref.hpp.func.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_stringref.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_stringref.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1313
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch9StringRefC2EPKcm13032
_ZN5Catch9StringRefC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE1274
_ZN5Catch9StringRefC2Ev4340
_ZN5Catchli3_srEPKcm7018
_Zli9_catch_srPKcm4446
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_stringref.hpp.gcov.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_stringref.hpp.gcov.html new file mode 100644 index 0000000..4733abc --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_stringref.hpp.gcov.html @@ -0,0 +1,199 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_stringref.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_stringref.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1313
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : 
+       2              : //              Copyright Catch2 Authors
+       3              : // Distributed under the Boost Software License, Version 1.0.
+       4              : //   (See accompanying file LICENSE.txt or copy at
+       5              : //        https://www.boost.org/LICENSE_1_0.txt)
+       6              : 
+       7              : // SPDX-License-Identifier: BSL-1.0
+       8              : #ifndef CATCH_STRINGREF_HPP_INCLUDED
+       9              : #define CATCH_STRINGREF_HPP_INCLUDED
+      10              : 
+      11              : #include <cstddef>
+      12              : #include <string>
+      13              : #include <iosfwd>
+      14              : #include <cassert>
+      15              : 
+      16              : #include <cstring>
+      17              : 
+      18              : namespace Catch {
+      19              : 
+      20              :     /// A non-owning string class (similar to the forthcoming std::string_view)
+      21              :     /// Note that, because a StringRef may be a substring of another string,
+      22              :     /// it may not be null terminated.
+      23              :     class StringRef {
+      24              :     public:
+      25              :         using size_type = std::size_t;
+      26              :         using const_iterator = const char*;
+      27              : 
+      28              :         static constexpr size_type npos{ static_cast<size_type>( -1 ) };
+      29              : 
+      30              :     private:
+      31              :         static constexpr char const* const s_empty = "";
+      32              : 
+      33              :         char const* m_start = s_empty;
+      34              :         size_type m_size = 0;
+      35              : 
+      36              :     public: // construction
+      37         4340 :         constexpr StringRef() noexcept = default;
+      38              : 
+      39              :         StringRef( char const* rawChars ) noexcept;
+      40              : 
+      41        13032 :         constexpr StringRef( char const* rawChars, size_type size ) noexcept
+      42        13032 :         :   m_start( rawChars ),
+      43        13032 :             m_size( size )
+      44        13032 :         {}
+      45              : 
+      46         1274 :         StringRef( std::string const& stdString ) noexcept
+      47         1274 :         :   m_start( stdString.c_str() ),
+      48         1274 :             m_size( stdString.size() )
+      49         1274 :         {}
+      50              : 
+      51              :         explicit operator std::string() const {
+      52              :             return std::string(m_start, m_size);
+      53              :         }
+      54              : 
+      55              :     public: // operators
+      56              :         auto operator == ( StringRef other ) const noexcept -> bool {
+      57              :             return m_size == other.m_size
+      58              :                 && (std::memcmp( m_start, other.m_start, m_size ) == 0);
+      59              :         }
+      60              :         auto operator != (StringRef other) const noexcept -> bool {
+      61              :             return !(*this == other);
+      62              :         }
+      63              : 
+      64              :         constexpr auto operator[] ( size_type index ) const noexcept -> char {
+      65              :             assert(index < m_size);
+      66              :             return m_start[index];
+      67              :         }
+      68              : 
+      69              :         bool operator<(StringRef rhs) const noexcept;
+      70              : 
+      71              :     public: // named queries
+      72              :         constexpr auto empty() const noexcept -> bool {
+      73              :             return m_size == 0;
+      74              :         }
+      75              :         constexpr auto size() const noexcept -> size_type {
+      76              :             return m_size;
+      77              :         }
+      78              : 
+      79              :         // Returns a substring of [start, start + length).
+      80              :         // If start + length > size(), then the substring is [start, size()).
+      81              :         // If start > size(), then the substring is empty.
+      82              :         constexpr StringRef substr(size_type start, size_type length) const noexcept {
+      83              :             if (start < m_size) {
+      84              :                 const auto shortened_size = m_size - start;
+      85              :                 return StringRef(m_start + start, (shortened_size < length) ? shortened_size : length);
+      86              :             } else {
+      87              :                 return StringRef();
+      88              :             }
+      89              :         }
+      90              : 
+      91              :         // Returns the current start pointer. May not be null-terminated.
+      92              :         constexpr char const* data() const noexcept {
+      93              :             return m_start;
+      94              :         }
+      95              : 
+      96              :         constexpr const_iterator begin() const { return m_start; }
+      97              :         constexpr const_iterator end() const { return m_start + m_size; }
+      98              : 
+      99              : 
+     100              :         friend std::string& operator += (std::string& lhs, StringRef rhs);
+     101              :         friend std::ostream& operator << (std::ostream& os, StringRef str);
+     102              :         friend std::string operator+(StringRef lhs, StringRef rhs);
+     103              : 
+     104              :         /**
+     105              :          * Provides a three-way comparison with rhs
+     106              :          *
+     107              :          * Returns negative number if lhs < rhs, 0 if lhs == rhs, and a positive
+     108              :          * number if lhs > rhs
+     109              :          */
+     110              :         int compare( StringRef rhs ) const;
+     111              :     };
+     112              : 
+     113              : 
+     114         7018 :     constexpr auto operator ""_sr( char const* rawChars, std::size_t size ) noexcept -> StringRef {
+     115         7018 :         return StringRef( rawChars, size );
+     116              :     }
+     117              : } // namespace Catch
+     118              : 
+     119         4446 : constexpr auto operator ""_catch_sr( char const* rawChars, std::size_t size ) noexcept -> Catch::StringRef {
+     120         4446 :     return Catch::StringRef( rawChars, size );
+     121              : }
+     122              : 
+     123              : #endif // CATCH_STRINGREF_HPP_INCLUDED
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_test_registry.hpp.func-c.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_test_registry.hpp.func-c.html new file mode 100644 index 0000000..a294b7b --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_test_registry.hpp.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_test_registry.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_test_registry.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %33
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch11NameAndTagsC2ENS_9StringRefES1_96
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_test_registry.hpp.func.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_test_registry.hpp.func.html new file mode 100644 index 0000000..e9a0a12 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_test_registry.hpp.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_test_registry.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_test_registry.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %33
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch11NameAndTagsC2ENS_9StringRefES1_96
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_test_registry.hpp.gcov.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_test_registry.hpp.gcov.html new file mode 100644 index 0000000..8f10b46 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_test_registry.hpp.gcov.html @@ -0,0 +1,249 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_test_registry.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_test_registry.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %33
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : 
+       2              : //              Copyright Catch2 Authors
+       3              : // Distributed under the Boost Software License, Version 1.0.
+       4              : //   (See accompanying file LICENSE.txt or copy at
+       5              : //        https://www.boost.org/LICENSE_1_0.txt)
+       6              : 
+       7              : // SPDX-License-Identifier: BSL-1.0
+       8              : #ifndef CATCH_TEST_REGISTRY_HPP_INCLUDED
+       9              : #define CATCH_TEST_REGISTRY_HPP_INCLUDED
+      10              : 
+      11              : #include <catch2/internal/catch_config_static_analysis_support.hpp>
+      12              : #include <catch2/internal/catch_source_line_info.hpp>
+      13              : #include <catch2/internal/catch_noncopyable.hpp>
+      14              : #include <catch2/interfaces/catch_interfaces_test_invoker.hpp>
+      15              : #include <catch2/internal/catch_stringref.hpp>
+      16              : #include <catch2/internal/catch_unique_ptr.hpp>
+      17              : #include <catch2/internal/catch_unique_name.hpp>
+      18              : #include <catch2/internal/catch_preprocessor_remove_parens.hpp>
+      19              : 
+      20              : // GCC 5 and older do not properly handle disabling unused-variable warning
+      21              : // with a _Pragma. This means that we have to leak the suppression to the
+      22              : // user code as well :-(
+      23              : #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ <= 5
+      24              : #pragma GCC diagnostic ignored "-Wunused-variable"
+      25              : #endif
+      26              : 
+      27              : 
+      28              : 
+      29              : namespace Catch {
+      30              : 
+      31              : template<typename C>
+      32              : class TestInvokerAsMethod : public ITestInvoker {
+      33              :     void (C::*m_testAsMethod)();
+      34              : public:
+      35              :     TestInvokerAsMethod( void (C::*testAsMethod)() ) noexcept : m_testAsMethod( testAsMethod ) {}
+      36              : 
+      37              :     void invoke() const override {
+      38              :         C obj;
+      39              :         (obj.*m_testAsMethod)();
+      40              :     }
+      41              : };
+      42              : 
+      43              : Detail::unique_ptr<ITestInvoker> makeTestInvoker( void(*testAsFunction)() );
+      44              : 
+      45              : template<typename C>
+      46              : Detail::unique_ptr<ITestInvoker> makeTestInvoker( void (C::*testAsMethod)() ) {
+      47              :     return Detail::make_unique<TestInvokerAsMethod<C>>( testAsMethod );
+      48              : }
+      49              : 
+      50              : struct NameAndTags {
+      51           96 :     constexpr NameAndTags( StringRef name_ = StringRef(),
+      52           96 :                            StringRef tags_ = StringRef() ) noexcept:
+      53           96 :         name( name_ ), tags( tags_ ) {}
+      54              :     StringRef name;
+      55              :     StringRef tags;
+      56              : };
+      57              : 
+      58              : struct AutoReg : Detail::NonCopyable {
+      59              :     AutoReg( Detail::unique_ptr<ITestInvoker> invoker, SourceLineInfo const& lineInfo, StringRef classOrMethod, NameAndTags const& nameAndTags ) noexcept;
+      60              : };
+      61              : 
+      62              : } // end namespace Catch
+      63              : 
+      64              : #if defined(CATCH_CONFIG_DISABLE)
+      65              :     #define INTERNAL_CATCH_TESTCASE_NO_REGISTRATION( TestName, ... ) \
+      66              :         static inline void TestName()
+      67              :     #define INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION( TestName, ClassName, ... ) \
+      68              :         namespace{                        \
+      69              :             struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName) { \
+      70              :                 void test();              \
+      71              :             };                            \
+      72              :         }                                 \
+      73              :         void TestName::test()
+      74              : #endif
+      75              : 
+      76              : 
+      77              : #if !defined(CATCH_CONFIG_EXPERIMENTAL_STATIC_ANALYSIS_SUPPORT)
+      78              : 
+      79              :     ///////////////////////////////////////////////////////////////////////////////
+      80              :     #define INTERNAL_CATCH_TESTCASE2( TestName, ... ) \
+      81              :         static void TestName(); \
+      82              :         CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+      83              :         CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+      84              :         CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \
+      85              :         namespace{ const Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( Catch::makeTestInvoker( &TestName ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), Catch::NameAndTags{ __VA_ARGS__ } ); } /* NOLINT */ \
+      86              :         CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+      87              :         static void TestName()
+      88              :     #define INTERNAL_CATCH_TESTCASE( ... ) \
+      89              :         INTERNAL_CATCH_TESTCASE2( INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEST_ ), __VA_ARGS__ )
+      90              : 
+      91              : #else  // ^^ !CATCH_CONFIG_EXPERIMENTAL_STATIC_ANALYSIS_SUPPORT | vv CATCH_CONFIG_EXPERIMENTAL_STATIC_ANALYSIS_SUPPORT
+      92              : 
+      93              : 
+      94              : // Dummy registrator for the dumy test case macros
+      95              : namespace Catch {
+      96              :     namespace Detail {
+      97              :         struct DummyUse {
+      98              :             DummyUse( void ( * )( int ), Catch::NameAndTags const& );
+      99              :         };
+     100              :     } // namespace Detail
+     101              : } // namespace Catch
+     102              : 
+     103              : // Note that both the presence of the argument and its exact name are
+     104              : // necessary for the section support.
+     105              : 
+     106              : // We provide a shadowed variable so that a `SECTION` inside non-`TEST_CASE`
+     107              : // tests can compile. The redefined `TEST_CASE` shadows this with param.
+     108              : static int catchInternalSectionHint = 0;
+     109              : 
+     110              : #    define INTERNAL_CATCH_TESTCASE2( fname, ... )                         \
+     111              :         static void fname( int );                                          \
+     112              :         CATCH_INTERNAL_START_WARNINGS_SUPPRESSION                          \
+     113              :         CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS                           \
+     114              :         CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS                   \
+     115              :         static const Catch::Detail::DummyUse INTERNAL_CATCH_UNIQUE_NAME(   \
+     116              :             dummyUser )( &(fname), Catch::NameAndTags{ __VA_ARGS__ } );    \
+     117              :         CATCH_INTERNAL_SUPPRESS_SHADOW_WARNINGS                            \
+     118              :         static void fname( [[maybe_unused]] int catchInternalSectionHint ) \
+     119              :             CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+     120              : #    define INTERNAL_CATCH_TESTCASE( ... ) \
+     121              :         INTERNAL_CATCH_TESTCASE2( INTERNAL_CATCH_UNIQUE_NAME( dummyFunction ), __VA_ARGS__ )
+     122              : 
+     123              : 
+     124              : #endif // CATCH_CONFIG_EXPERIMENTAL_STATIC_ANALYSIS_SUPPORT
+     125              : 
+     126              :     ///////////////////////////////////////////////////////////////////////////////
+     127              :     #define INTERNAL_CATCH_TEST_CASE_METHOD2( TestName, ClassName, ... )\
+     128              :         CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+     129              :         CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+     130              :         CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \
+     131              :         namespace{ \
+     132              :             struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName) { \
+     133              :                 void test(); \
+     134              :             }; \
+     135              :             const Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( \
+     136              :             Catch::makeTestInvoker( &TestName::test ),                    \
+     137              :             CATCH_INTERNAL_LINEINFO,                                      \
+     138              :             #ClassName##_catch_sr,                                        \
+     139              :             Catch::NameAndTags{ __VA_ARGS__ } ); /* NOLINT */ \
+     140              :         } \
+     141              :         CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+     142              :         void TestName::test()
+     143              :     #define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, ... ) \
+     144              :         INTERNAL_CATCH_TEST_CASE_METHOD2( INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEST_ ), ClassName, __VA_ARGS__ )
+     145              : 
+     146              : 
+     147              :     ///////////////////////////////////////////////////////////////////////////////
+     148              :     #define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, ... ) \
+     149              :         CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+     150              :         CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+     151              :         CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \
+     152              :         namespace {                                                           \
+     153              :         const Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( \
+     154              :             Catch::makeTestInvoker( &QualifiedMethod ),                   \
+     155              :             CATCH_INTERNAL_LINEINFO,                                      \
+     156              :             "&" #QualifiedMethod##_catch_sr,                              \
+     157              :             Catch::NameAndTags{ __VA_ARGS__ } );                          \
+     158              :     } /* NOLINT */ \
+     159              :         CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
+     160              : 
+     161              : 
+     162              :     ///////////////////////////////////////////////////////////////////////////////
+     163              :     #define INTERNAL_CATCH_REGISTER_TESTCASE( Function, ... ) \
+     164              :         do { \
+     165              :             CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
+     166              :             CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
+     167              :             CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \
+     168              :             Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( Catch::makeTestInvoker( Function ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), Catch::NameAndTags{ __VA_ARGS__ } ); /* NOLINT */ \
+     169              :             CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
+     170              :         } while(false)
+     171              : 
+     172              : 
+     173              : #endif // CATCH_TEST_REGISTRY_HPP_INCLUDED
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_unique_ptr.hpp.func-c.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_unique_ptr.hpp.func-c.html new file mode 100644 index 0000000..ae148ae --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_unique_ptr.hpp.func-c.html @@ -0,0 +1,250 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_unique_ptr.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_unique_ptr.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2828
Test Date:2024-04-30 13:17:26Functions:100.0 %2020
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch6Detail10unique_ptrINS_10Generators10IGeneratorIPKcEEEptEv40
_ZN5Catch6Detail10unique_ptrINS_10Generators10GeneratorsIPKcEEE7releaseEv48
_ZN5Catch6Detail10unique_ptrINS_10Generators10GeneratorsIPKcEEE7releaseEv8
_ZN5Catch6Detail10unique_ptrINS_10Generators20SingleValueGeneratorIPKcEEE7releaseEv40
_ZN5Catch6Detail10unique_ptrINS_10Generators10GeneratorsIPKcEEEC2EPS6_48
_ZN5Catch6Detail10unique_ptrINS_10Generators10GeneratorsIPKcEEEC2EPS6_8
_ZN5Catch6Detail10unique_ptrINS_10Generators20SingleValueGeneratorIPKcEEEC2EPS6_40
_ZN5Catch6Detail10unique_ptrINS_10Generators20GeneratorUntypedBaseEEC2INS2_10GeneratorsIPKcEEvEEONS1_IT_EE48
_ZN5Catch6Detail10unique_ptrINS_10Generators20GeneratorUntypedBaseEEC2INS2_10GeneratorsIPKcEEvEEONS1_IT_EE8
_ZN5Catch6Detail10unique_ptrINS_10Generators10IGeneratorIPKcEEEC2INS2_20SingleValueGeneratorIS5_EEvEEONS1_IT_EE40
_ZN5Catch6Detail11make_uniqueINS_10Generators10GeneratorsIPKcEEJS6_EEENS0_10unique_ptrIT_EEDpOT0_48
_ZN5Catch6Detail11make_uniqueINS_10Generators20SingleValueGeneratorIPKcEEJRA4_S4_EEENS0_10unique_ptrIT_EEDpOT0_2
_ZN5Catch6Detail11make_uniqueINS_10Generators20SingleValueGeneratorIPKcEEJRA5_S4_EEENS0_10unique_ptrIT_EEDpOT0_2
_ZN5Catch6Detail11make_uniqueINS_10Generators20SingleValueGeneratorIPKcEEJRA6_S4_EEENS0_10unique_ptrIT_EEDpOT0_4
_ZN5Catch6Detail11make_uniqueINS_10Generators10GeneratorsIPKcEEJS6_EEENS0_10unique_ptrIT_EEDpOT0_8
_ZN5Catch6Detail11make_uniqueINS_10Generators20SingleValueGeneratorIPKcEEJS5_EEENS0_10unique_ptrIT_EEDpOT0_32
_ZN5Catch6Detail10unique_ptrINS_10Generators10IGeneratorIPKcEEEC2EOS7_80
_ZNK5Catch6Detail10unique_ptrINS_10Generators10IGeneratorIPKcEEEptEv80
_ZNK5Catch6Detail10unique_ptrINS_10Generators20GeneratorUntypedBaseEEdeEv80
_ZN5Catch6Detail10unique_ptrINS_12ITestInvokerEED2Ev598
_ZN5Catch6Detail10unique_ptrINS_10Generators10GeneratorsIPKcEEED2Ev8
_ZN5Catch6Detail10unique_ptrINS_10Generators20GeneratorUntypedBaseEED2Ev16
_ZN5Catch6Detail10unique_ptrINS_10Generators20SingleValueGeneratorIPKcEEED2Ev40
_ZN5Catch6Detail10unique_ptrINS_10Generators10IGeneratorIPKcEEED2Ev120
_ZN5Catch6Detail10unique_ptrINS_12ITestInvokerEED2Ev414
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_unique_ptr.hpp.func.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_unique_ptr.hpp.func.html new file mode 100644 index 0000000..56677b4 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_unique_ptr.hpp.func.html @@ -0,0 +1,250 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_unique_ptr.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_unique_ptr.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2828
Test Date:2024-04-30 13:17:26Functions:100.0 %2020
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5Catch6Detail10unique_ptrINS_10Generators10GeneratorsIPKcEEE7releaseEv48
_ZN5Catch6Detail10unique_ptrINS_10Generators10GeneratorsIPKcEEE7releaseEv8
_ZN5Catch6Detail10unique_ptrINS_10Generators20SingleValueGeneratorIPKcEEE7releaseEv40
_ZN5Catch6Detail10unique_ptrINS_10Generators10GeneratorsIPKcEEEC2EPS6_48
_ZN5Catch6Detail10unique_ptrINS_10Generators10GeneratorsIPKcEEEC2EPS6_8
_ZN5Catch6Detail10unique_ptrINS_10Generators20SingleValueGeneratorIPKcEEEC2EPS6_40
_ZN5Catch6Detail10unique_ptrINS_10Generators10IGeneratorIPKcEEEC2EOS7_80
_ZN5Catch6Detail10unique_ptrINS_10Generators10IGeneratorIPKcEEEptEv40
_ZN5Catch6Detail10unique_ptrINS_10Generators20GeneratorUntypedBaseEEC2INS2_10GeneratorsIPKcEEvEEONS1_IT_EE48
_ZN5Catch6Detail10unique_ptrINS_10Generators10IGeneratorIPKcEEEC2INS2_20SingleValueGeneratorIS5_EEvEEONS1_IT_EE40
_ZN5Catch6Detail10unique_ptrINS_10Generators20GeneratorUntypedBaseEEC2INS2_10GeneratorsIPKcEEvEEONS1_IT_EE8
_ZN5Catch6Detail10unique_ptrINS_12ITestInvokerEED2Ev598
_ZN5Catch6Detail10unique_ptrINS_10Generators10GeneratorsIPKcEEED2Ev8
_ZN5Catch6Detail10unique_ptrINS_10Generators10IGeneratorIPKcEEED2Ev120
_ZN5Catch6Detail10unique_ptrINS_10Generators20GeneratorUntypedBaseEED2Ev16
_ZN5Catch6Detail10unique_ptrINS_10Generators20SingleValueGeneratorIPKcEEED2Ev40
_ZN5Catch6Detail10unique_ptrINS_12ITestInvokerEED2Ev414
_ZN5Catch6Detail11make_uniqueINS_10Generators10GeneratorsIPKcEEJS6_EEENS0_10unique_ptrIT_EEDpOT0_48
_ZN5Catch6Detail11make_uniqueINS_10Generators10GeneratorsIPKcEEJS6_EEENS0_10unique_ptrIT_EEDpOT0_8
_ZN5Catch6Detail11make_uniqueINS_10Generators20SingleValueGeneratorIPKcEEJRA4_S4_EEENS0_10unique_ptrIT_EEDpOT0_2
_ZN5Catch6Detail11make_uniqueINS_10Generators20SingleValueGeneratorIPKcEEJRA5_S4_EEENS0_10unique_ptrIT_EEDpOT0_2
_ZN5Catch6Detail11make_uniqueINS_10Generators20SingleValueGeneratorIPKcEEJRA6_S4_EEENS0_10unique_ptrIT_EEDpOT0_4
_ZN5Catch6Detail11make_uniqueINS_10Generators20SingleValueGeneratorIPKcEEJS5_EEENS0_10unique_ptrIT_EEDpOT0_32
_ZNK5Catch6Detail10unique_ptrINS_10Generators10IGeneratorIPKcEEEptEv80
_ZNK5Catch6Detail10unique_ptrINS_10Generators20GeneratorUntypedBaseEEdeEv80
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_unique_ptr.hpp.gcov.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_unique_ptr.hpp.gcov.html new file mode 100644 index 0000000..730cda2 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/catch_unique_ptr.hpp.gcov.html @@ -0,0 +1,194 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal/catch_unique_ptr.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internal - catch_unique_ptr.hpp (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %2828
Test Date:2024-04-30 13:17:26Functions:100.0 %2020
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : 
+       2              : //              Copyright Catch2 Authors
+       3              : // Distributed under the Boost Software License, Version 1.0.
+       4              : //   (See accompanying file LICENSE.txt or copy at
+       5              : //        https://www.boost.org/LICENSE_1_0.txt)
+       6              : 
+       7              : // SPDX-License-Identifier: BSL-1.0
+       8              : #ifndef CATCH_UNIQUE_PTR_HPP_INCLUDED
+       9              : #define CATCH_UNIQUE_PTR_HPP_INCLUDED
+      10              : 
+      11              : #include <cassert>
+      12              : #include <type_traits>
+      13              : 
+      14              : #include <catch2/internal/catch_move_and_forward.hpp>
+      15              : 
+      16              : namespace Catch {
+      17              : namespace Detail {
+      18              :     /**
+      19              :      * A reimplementation of `std::unique_ptr` for improved compilation performance
+      20              :      *
+      21              :      * Does not support arrays nor custom deleters.
+      22              :      */
+      23              :     template <typename T>
+      24              :     class unique_ptr {
+      25              :         T* m_ptr;
+      26              :     public:
+      27              :         constexpr unique_ptr(std::nullptr_t = nullptr):
+      28              :             m_ptr{}
+      29              :         {}
+      30           48 :         explicit constexpr unique_ptr(T* ptr):
+      31           48 :             m_ptr(ptr)
+      32           48 :         {}
+      33              : 
+      34              :         template <typename U, typename = std::enable_if_t<std::is_base_of<T, U>::value>>
+      35           48 :         unique_ptr(unique_ptr<U>&& from):
+      36           48 :             m_ptr(from.release())
+      37           48 :         {}
+      38              : 
+      39              :         template <typename U, typename = std::enable_if_t<std::is_base_of<T, U>::value>>
+      40              :         unique_ptr& operator=(unique_ptr<U>&& from) {
+      41              :             reset(from.release());
+      42              : 
+      43              :             return *this;
+      44              :         }
+      45              : 
+      46              :         unique_ptr(unique_ptr const&) = delete;
+      47              :         unique_ptr& operator=(unique_ptr const&) = delete;
+      48              : 
+      49           80 :         unique_ptr(unique_ptr&& rhs) noexcept:
+      50           80 :             m_ptr(rhs.m_ptr) {
+      51           80 :             rhs.m_ptr = nullptr;
+      52           80 :         }
+      53              :         unique_ptr& operator=(unique_ptr&& rhs) noexcept {
+      54              :             reset(rhs.release());
+      55              : 
+      56              :             return *this;
+      57              :         }
+      58              : 
+      59          598 :         ~unique_ptr() {
+      60          598 :             delete m_ptr;
+      61          598 :         }
+      62              : 
+      63              :         T& operator*() {
+      64              :             assert(m_ptr);
+      65              :             return *m_ptr;
+      66              :         }
+      67           80 :         T const& operator*() const {
+      68           80 :             assert(m_ptr);
+      69           80 :             return *m_ptr;
+      70              :         }
+      71           40 :         T* operator->() noexcept {
+      72           40 :             assert(m_ptr);
+      73           40 :             return m_ptr;
+      74              :         }
+      75           80 :         T const* operator->() const noexcept {
+      76           80 :             assert(m_ptr);
+      77           80 :             return m_ptr;
+      78              :         }
+      79              : 
+      80              :         T* get() { return m_ptr; }
+      81              :         T const* get() const { return m_ptr; }
+      82              : 
+      83              :         void reset(T* ptr = nullptr) {
+      84              :             delete m_ptr;
+      85              :             m_ptr = ptr;
+      86              :         }
+      87              : 
+      88           48 :         T* release() {
+      89           48 :             auto temp = m_ptr;
+      90           48 :             m_ptr = nullptr;
+      91           48 :             return temp;
+      92              :         }
+      93              : 
+      94              :         explicit operator bool() const {
+      95              :             return m_ptr;
+      96              :         }
+      97              : 
+      98              :         friend void swap(unique_ptr& lhs, unique_ptr& rhs) {
+      99              :             auto temp = lhs.m_ptr;
+     100              :             lhs.m_ptr = rhs.m_ptr;
+     101              :             rhs.m_ptr = temp;
+     102              :         }
+     103              :     };
+     104              : 
+     105              :     //! Specialization to cause compile-time error for arrays
+     106              :     template <typename T>
+     107              :     class unique_ptr<T[]>;
+     108              : 
+     109              :     template <typename T, typename... Args>
+     110           48 :     unique_ptr<T> make_unique(Args&&... args) {
+     111           48 :         return unique_ptr<T>(new T(CATCH_FORWARD(args)...));
+     112              :     }
+     113              : 
+     114              : 
+     115              : } // end namespace Detail
+     116              : } // end namespace Catch
+     117              : 
+     118              : #endif // CATCH_UNIQUE_PTR_HPP_INCLUDED
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/index-sort-f.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/index-sort-f.html new file mode 100644 index 0000000..579e410 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/index-sort-f.html @@ -0,0 +1,177 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internalCoverageTotalHit
Test:coverage.infoLines:91.7 %8477
Test Date:2024-04-30 13:17:26Functions:76.0 %192146
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
catch_reusable_string_stream.hpp +
100.0%
+
100.0 %3337.5 %83
catch_decomposer.hpp +
76.9%76.9%
+
76.9 %262073.5 %155114
catch_source_line_info.hpp +
100.0%
+
100.0 %44100.0 %11
catch_test_registry.hpp +
100.0%
+
100.0 %33100.0 %11
catch_assertion_handler.hpp +
85.7%85.7%
+
85.7 %76100.0 %22
catch_stringref.hpp +
100.0%
+
100.0 %1313100.0 %55
catch_unique_ptr.hpp +
100.0%
+
100.0 %2828100.0 %2020
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/index-sort-l.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/index-sort-l.html new file mode 100644 index 0000000..f34162b --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/index-sort-l.html @@ -0,0 +1,177 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internalCoverageTotalHit
Test:coverage.infoLines:91.7 %8477
Test Date:2024-04-30 13:17:26Functions:76.0 %192146
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
catch_decomposer.hpp +
76.9%76.9%
+
76.9 %262073.5 %155114
catch_assertion_handler.hpp +
85.7%85.7%
+
85.7 %76100.0 %22
catch_reusable_string_stream.hpp +
100.0%
+
100.0 %3337.5 %83
catch_test_registry.hpp +
100.0%
+
100.0 %33100.0 %11
catch_source_line_info.hpp +
100.0%
+
100.0 %44100.0 %11
catch_stringref.hpp +
100.0%
+
100.0 %1313100.0 %55
catch_unique_ptr.hpp +
100.0%
+
100.0 %2828100.0 %2020
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/BayesNet/tests/lib/catch2/src/catch2/internal/index.html b/html/BayesNet/tests/lib/catch2/src/catch2/internal/index.html new file mode 100644 index 0000000..2721fe3 --- /dev/null +++ b/html/BayesNet/tests/lib/catch2/src/catch2/internal/index.html @@ -0,0 +1,177 @@ + + + + + + + LCOV - coverage.info - BayesNet/tests/lib/catch2/src/catch2/internal + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - BayesNet/tests/lib/catch2/src/catch2/internalCoverageTotalHit
Test:coverage.infoLines:91.7 %8477
Test Date:2024-04-30 13:17:26Functions:76.0 %192146
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
catch_assertion_handler.hpp +
85.7%85.7%
+
85.7 %76100.0 %22
catch_decomposer.hpp +
76.9%76.9%
+
76.9 %262073.5 %155114
catch_reusable_string_stream.hpp +
100.0%
+
100.0 %3337.5 %83
catch_source_line_info.hpp +
100.0%
+
100.0 %44100.0 %11
catch_stringref.hpp +
100.0%
+
100.0 %1313100.0 %55
catch_test_registry.hpp +
100.0%
+
100.0 %33100.0 %11
catch_unique_ptr.hpp +
100.0%
+
100.0 %2828100.0 %2020
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/bayesnet/BaseClassifier.h.func-c.html b/html/bayesnet/BaseClassifier.h.func-c.html index b06cf33..767f143 100644 --- a/html/bayesnet/BaseClassifier.h.func-c.html +++ b/html/bayesnet/BaseClassifier.h.func-c.html @@ -37,11 +37,11 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 50.0 % - 2 + 100.0 % + 1 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet14BaseClassifierD0Ev + bayesnet::BaseClassifier::~BaseClassifier() - 241 - - - - - _ZN8bayesnet14BaseClassifierD0Ev - - 0 - - - - - _ZN8bayesnet14BaseClassifierD2Ev - - 241 + 1818 diff --git a/html/bayesnet/BaseClassifier.h.func.html b/html/bayesnet/BaseClassifier.h.func.html index 9d0a938..7422513 100644 --- a/html/bayesnet/BaseClassifier.h.func.html +++ b/html/bayesnet/BaseClassifier.h.func.html @@ -37,11 +37,11 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 50.0 % - 2 + 100.0 % + 1 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet14BaseClassifierD0Ev + bayesnet::BaseClassifier::~BaseClassifier() - 241 - - - - - _ZN8bayesnet14BaseClassifierD0Ev - - 0 - - - - - _ZN8bayesnet14BaseClassifierD2Ev - - 241 + 1818 diff --git a/html/bayesnet/BaseClassifier.h.gcov.html b/html/bayesnet/BaseClassifier.h.gcov.html index a79420f..9e358fd 100644 --- a/html/bayesnet/BaseClassifier.h.gcov.html +++ b/html/bayesnet/BaseClassifier.h.gcov.html @@ -37,11 +37,11 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 50.0 % - 2 + 100.0 % + 1 1 @@ -80,7 +80,7 @@ 18 : virtual BaseClassifier& fit(torch::Tensor& X, torch::Tensor& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states) = 0; 19 : virtual BaseClassifier& fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states) = 0; 20 : virtual BaseClassifier& fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights) = 0; - 21 241 : virtual ~BaseClassifier() = default; + 21 1818 : virtual ~BaseClassifier() = default; 22 : torch::Tensor virtual predict(torch::Tensor& X) = 0; 23 : std::vector<int> virtual predict(std::vector<std::vector<int >>& X) = 0; 24 : torch::Tensor virtual predict_proba(torch::Tensor& X) = 0; diff --git a/html/bayesnet/classifiers/Classifier.cc.func-c.html b/html/bayesnet/classifiers/Classifier.cc.func-c.html index 93c25c1..24f404d 100644 --- a/html/bayesnet/classifiers/Classifier.cc.func-c.html +++ b/html/bayesnet/classifiers/Classifier.cc.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,170 +63,170 @@ - _ZN8bayesnet10Classifier17topological_orderB5cxx11Ev + bayesnet::Classifier::dump_cpt[abi:cxx11]() const - 11 + 6 - _ZNK8bayesnet10Classifier8dump_cptB5cxx11Ev + bayesnet::Classifier::topological_order[abi:cxx11]() - 11 + 6 - _ZN8bayesnet10Classifier5scoreERSt6vectorIS1_IiSaIiEESaIS3_EERS3_ + bayesnet::Classifier::predict(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&) - 44 + 24 - _ZN8bayesnet10Classifier7predictERSt6vectorIS1_IiSaIiEESaIS3_EE + bayesnet::Classifier::score(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&, std::vector<int, std::allocator<int> >&) - 44 + 24 - _ZNK8bayesnet10Classifier17getNumberOfStatesEv + bayesnet::Classifier::getNumberOfStates() const - 66 + 36 - _ZNK8bayesnet10Classifier4showB5cxx11Ev + bayesnet::Classifier::show[abi:cxx11]() const - 66 + 36 - _ZN8bayesnet10Classifier18setHyperparametersERKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEE + bayesnet::Classifier::setHyperparameters(nlohmann::json_abi_v3_11_3::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::json_abi_v3_11_3::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char> >, void> const&) - 231 + 126 - _ZN8bayesnet10Classifier5scoreERN2at6TensorES3_ + bayesnet::Classifier::score(at::Tensor&, at::Tensor&) - 308 + 168 - _ZN8bayesnet10Classifier3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE + bayesnet::Classifier::fit(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&, std::vector<int, std::allocator<int> >&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&) - 322 + 180 - _ZN8bayesnet10Classifier3fitERSt6vectorIS1_IiSaIiEESaIS3_EERS3_RKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISD_EERKSD_RSt3mapISD_S3_St4lessISD_ESaISt4pairISI_S3_EEE + bayesnet::Classifier::fit(at::Tensor&, at::Tensor&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&) - 360 + 192 - _ZNK8bayesnet10Classifier16getNumberOfEdgesEv + bayesnet::Classifier::getNumberOfEdges() const - 475 + 282 - _ZNK8bayesnet10Classifier16getNumberOfNodesEv + bayesnet::Classifier::getNumberOfNodes() const - 475 + 282 - _ZN8bayesnet10Classifier13predict_probaERSt6vectorIS1_IiSaIiEESaIS3_EE + bayesnet::Classifier::predict_proba(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&) - 766 + 390 - _ZNK8bayesnet10Classifier17getClassNumStatesEv + bayesnet::Classifier::buildDataset(at::Tensor&) - 877 + 486 - _ZN8bayesnet10Classifier12buildDatasetERN2at6TensorE + bayesnet::Classifier::getClassNumStates() const - 888 + 510 - _ZN8bayesnet10Classifier3fitERN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE + bayesnet::Classifier::fit(at::Tensor&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&) - 1089 + 594 - _ZN8bayesnet10Classifier3fitERN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEERKS2_ + bayesnet::Classifier::fit(at::Tensor&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&, at::Tensor const&) - 1686 + 990 - _ZN8bayesnet10Classifier10trainModelERKN2at6TensorE + bayesnet::Classifier::addNodes() - 2951 + 1680 - _ZN8bayesnet10Classifier8addNodesEv + bayesnet::Classifier::trainModel(at::Tensor const&) - 2951 + 1680 - _ZN8bayesnet10Classifier7predictERN2at6TensorE + bayesnet::Classifier::build(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&, at::Tensor const&) - 3262 + 1932 - _ZN8bayesnet10Classifier18checkFitParametersEv + bayesnet::Classifier::checkFitParameters() - 3413 + 1932 - _ZN8bayesnet10Classifier5buildERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKS7_RSt3mapIS7_S1_IiSaIiEESt4lessIS7_ESaISt4pairISC_SG_EEERKN2at6TensorE + bayesnet::Classifier::predict_proba(at::Tensor&) - 3413 + 2226 - _ZN8bayesnet10Classifier13predict_probaERN2at6TensorE + bayesnet::Classifier::predict(at::Tensor&) - 3562 + 2550 - _ZN8bayesnet10ClassifierC2ENS_7NetworkE + bayesnet::Classifier::Classifier(bayesnet::Network) - 4750 + 2658 diff --git a/html/bayesnet/classifiers/Classifier.cc.func.html b/html/bayesnet/classifiers/Classifier.cc.func.html index f884e13..566f3df 100644 --- a/html/bayesnet/classifiers/Classifier.cc.func.html +++ b/html/bayesnet/classifiers/Classifier.cc.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,170 +63,170 @@ - _ZN8bayesnet10Classifier10trainModelERKN2at6TensorE + bayesnet::Classifier::Classifier(bayesnet::Network) - 2951 + 2658 - _ZN8bayesnet10Classifier12buildDatasetERN2at6TensorE + bayesnet::Classifier::addNodes() - 888 + 1680 - _ZN8bayesnet10Classifier13predict_probaERN2at6TensorE + bayesnet::Classifier::build(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&, at::Tensor const&) - 3562 + 1932 - _ZN8bayesnet10Classifier13predict_probaERSt6vectorIS1_IiSaIiEESaIS3_EE + bayesnet::Classifier::buildDataset(at::Tensor&) - 766 + 486 - _ZN8bayesnet10Classifier17topological_orderB5cxx11Ev + bayesnet::Classifier::checkFitParameters() - 11 + 1932 - _ZN8bayesnet10Classifier18checkFitParametersEv + bayesnet::Classifier::dump_cpt[abi:cxx11]() const - 3413 + 6 - _ZN8bayesnet10Classifier18setHyperparametersERKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEE + bayesnet::Classifier::fit(at::Tensor&, at::Tensor&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&) - 231 + 192 - _ZN8bayesnet10Classifier3fitERN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE + bayesnet::Classifier::fit(at::Tensor&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&) - 1089 + 594 - _ZN8bayesnet10Classifier3fitERN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEERKS2_ + bayesnet::Classifier::fit(at::Tensor&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&, at::Tensor const&) - 1686 + 990 - _ZN8bayesnet10Classifier3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE + bayesnet::Classifier::fit(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&, std::vector<int, std::allocator<int> >&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&) - 322 + 180 - _ZN8bayesnet10Classifier3fitERSt6vectorIS1_IiSaIiEESaIS3_EERS3_RKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISD_EERKSD_RSt3mapISD_S3_St4lessISD_ESaISt4pairISI_S3_EEE + bayesnet::Classifier::getClassNumStates() const - 360 + 510 - _ZN8bayesnet10Classifier5buildERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKS7_RSt3mapIS7_S1_IiSaIiEESt4lessIS7_ESaISt4pairISC_SG_EEERKN2at6TensorE + bayesnet::Classifier::getNumberOfEdges() const - 3413 + 282 - _ZN8bayesnet10Classifier5scoreERN2at6TensorES3_ + bayesnet::Classifier::getNumberOfNodes() const - 308 + 282 - _ZN8bayesnet10Classifier5scoreERSt6vectorIS1_IiSaIiEESaIS3_EERS3_ + bayesnet::Classifier::getNumberOfStates() const - 44 + 36 - _ZN8bayesnet10Classifier7predictERN2at6TensorE + bayesnet::Classifier::predict(at::Tensor&) - 3262 + 2550 - _ZN8bayesnet10Classifier7predictERSt6vectorIS1_IiSaIiEESaIS3_EE + bayesnet::Classifier::predict(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&) - 44 + 24 - _ZN8bayesnet10Classifier8addNodesEv + bayesnet::Classifier::predict_proba(at::Tensor&) - 2951 + 2226 - _ZN8bayesnet10ClassifierC2ENS_7NetworkE + bayesnet::Classifier::predict_proba(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&) - 4750 + 390 - _ZNK8bayesnet10Classifier16getNumberOfEdgesEv + bayesnet::Classifier::score(at::Tensor&, at::Tensor&) - 475 + 168 - _ZNK8bayesnet10Classifier16getNumberOfNodesEv + bayesnet::Classifier::score(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&, std::vector<int, std::allocator<int> >&) - 475 + 24 - _ZNK8bayesnet10Classifier17getClassNumStatesEv + bayesnet::Classifier::setHyperparameters(nlohmann::json_abi_v3_11_3::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::json_abi_v3_11_3::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char> >, void> const&) - 877 + 126 - _ZNK8bayesnet10Classifier17getNumberOfStatesEv + bayesnet::Classifier::show[abi:cxx11]() const - 66 + 36 - _ZNK8bayesnet10Classifier4showB5cxx11Ev + bayesnet::Classifier::topological_order[abi:cxx11]() - 66 + 6 - _ZNK8bayesnet10Classifier8dump_cptB5cxx11Ev + bayesnet::Classifier::trainModel(at::Tensor const&) - 11 + 1680 diff --git a/html/bayesnet/classifiers/Classifier.cc.gcov.html b/html/bayesnet/classifiers/Classifier.cc.gcov.html index 16f5243..d95e638 100644 --- a/html/bayesnet/classifiers/Classifier.cc.gcov.html +++ b/html/bayesnet/classifiers/Classifier.cc.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -71,188 +71,188 @@ 9 : #include "Classifier.h" 10 : 11 : namespace bayesnet { - 12 4750 : Classifier::Classifier(Network model) : model(model), m(0), n(0), metrics(Metrics()), fitted(false) {} + 12 2658 : Classifier::Classifier(Network model) : model(model), m(0), n(0), metrics(Metrics()), fitted(false) {} 13 : const std::string CLASSIFIER_NOT_FITTED = "Classifier has not been fitted"; - 14 3413 : Classifier& Classifier::build(const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights) + 14 1932 : Classifier& Classifier::build(const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights) 15 : { - 16 3413 : this->features = features; - 17 3413 : this->className = className; - 18 3413 : this->states = states; - 19 3413 : m = dataset.size(1); - 20 3413 : n = features.size(); - 21 3413 : checkFitParameters(); - 22 3325 : auto n_classes = states.at(className).size(); - 23 3325 : metrics = Metrics(dataset, features, className, n_classes); - 24 3325 : model.initialize(); - 25 3325 : buildModel(weights); - 26 3325 : trainModel(weights); - 27 3277 : fitted = true; - 28 3277 : return *this; + 16 1932 : this->features = features; + 17 1932 : this->className = className; + 18 1932 : this->states = states; + 19 1932 : m = dataset.size(1); + 20 1932 : n = features.size(); + 21 1932 : checkFitParameters(); + 22 1884 : auto n_classes = states.at(className).size(); + 23 1884 : metrics = Metrics(dataset, features, className, n_classes); + 24 1884 : model.initialize(); + 25 1884 : buildModel(weights); + 26 1884 : trainModel(weights); + 27 1860 : fitted = true; + 28 1860 : return *this; 29 : } - 30 888 : void Classifier::buildDataset(torch::Tensor& ytmp) + 30 486 : void Classifier::buildDataset(torch::Tensor& ytmp) 31 : { 32 : try { - 33 888 : auto yresized = torch::transpose(ytmp.view({ ytmp.size(0), 1 }), 0, 1); - 34 2752 : dataset = torch::cat({ dataset, yresized }, 0); - 35 888 : } - 36 44 : catch (const std::exception& e) { - 37 44 : std::stringstream oss; - 38 44 : oss << "* Error in X and y dimensions *\n"; - 39 44 : oss << "X dimensions: " << dataset.sizes() << "\n"; - 40 44 : oss << "y dimensions: " << ytmp.sizes(); - 41 44 : throw std::runtime_error(oss.str()); - 42 88 : } - 43 1776 : } - 44 2951 : void Classifier::trainModel(const torch::Tensor& weights) + 33 486 : auto yresized = torch::transpose(ytmp.view({ ytmp.size(0), 1 }), 0, 1); + 34 1506 : dataset = torch::cat({ dataset, yresized }, 0); + 35 486 : } + 36 24 : catch (const std::exception& e) { + 37 24 : std::stringstream oss; + 38 24 : oss << "* Error in X and y dimensions *\n"; + 39 24 : oss << "X dimensions: " << dataset.sizes() << "\n"; + 40 24 : oss << "y dimensions: " << ytmp.sizes(); + 41 24 : throw std::runtime_error(oss.str()); + 42 48 : } + 43 972 : } + 44 1680 : void Classifier::trainModel(const torch::Tensor& weights) 45 : { - 46 2951 : model.fit(dataset, weights, features, className, states); - 47 2951 : } + 46 1680 : model.fit(dataset, weights, features, className, states); + 47 1680 : } 48 : // X is nxm where n is the number of features and m the number of samples - 49 322 : Classifier& Classifier::fit(torch::Tensor& X, torch::Tensor& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states) + 49 192 : Classifier& Classifier::fit(torch::Tensor& X, torch::Tensor& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states) 50 : { - 51 322 : dataset = X; - 52 322 : buildDataset(y); - 53 300 : const torch::Tensor weights = torch::full({ dataset.size(1) }, 1.0 / dataset.size(1), torch::kDouble); - 54 512 : return build(features, className, states, weights); - 55 300 : } + 51 192 : dataset = X; + 52 192 : buildDataset(y); + 53 180 : const torch::Tensor weights = torch::full({ dataset.size(1) }, 1.0 / dataset.size(1), torch::kDouble); + 54 312 : return build(features, className, states, weights); + 55 180 : } 56 : // X is nxm where n is the number of features and m the number of samples - 57 360 : Classifier& Classifier::fit(std::vector<std::vector<int>>& X, std::vector<int>& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states) + 57 180 : Classifier& Classifier::fit(std::vector<std::vector<int>>& X, std::vector<int>& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states) 58 : { - 59 360 : dataset = torch::zeros({ static_cast<int>(X.size()), static_cast<int>(X[0].size()) }, torch::kInt32); - 60 5883 : for (int i = 0; i < X.size(); ++i) { - 61 22092 : dataset.index_put_({ i, "..." }, torch::tensor(X[i], torch::kInt32)); + 59 180 : dataset = torch::zeros({ static_cast<int>(X.size()), static_cast<int>(X[0].size()) }, torch::kInt32); + 60 1254 : for (int i = 0; i < X.size(); ++i) { + 61 4296 : dataset.index_put_({ i, "..." }, torch::tensor(X[i], torch::kInt32)); 62 : } - 63 360 : auto ytmp = torch::tensor(y, torch::kInt32); - 64 360 : buildDataset(ytmp); - 65 338 : const torch::Tensor weights = torch::full({ dataset.size(1) }, 1.0 / dataset.size(1), torch::kDouble); - 66 628 : return build(features, className, states, weights); - 67 5931 : } - 68 1089 : Classifier& Classifier::fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states) + 63 180 : auto ytmp = torch::tensor(y, torch::kInt32); + 64 180 : buildDataset(ytmp); + 65 168 : const torch::Tensor weights = torch::full({ dataset.size(1) }, 1.0 / dataset.size(1), torch::kDouble); + 66 312 : return build(features, className, states, weights); + 67 1278 : } + 68 594 : Classifier& Classifier::fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states) 69 : { - 70 1089 : this->dataset = dataset; - 71 1089 : const torch::Tensor weights = torch::full({ dataset.size(1) }, 1.0 / dataset.size(1), torch::kDouble); - 72 2178 : return build(features, className, states, weights); - 73 1089 : } - 74 1686 : Classifier& Classifier::fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights) + 70 594 : this->dataset = dataset; + 71 594 : const torch::Tensor weights = torch::full({ dataset.size(1) }, 1.0 / dataset.size(1), torch::kDouble); + 72 1188 : return build(features, className, states, weights); + 73 594 : } + 74 990 : Classifier& Classifier::fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights) 75 : { - 76 1686 : this->dataset = dataset; - 77 1686 : return build(features, className, states, weights); + 76 990 : this->dataset = dataset; + 77 990 : return build(features, className, states, weights); 78 : } - 79 3413 : void Classifier::checkFitParameters() + 79 1932 : void Classifier::checkFitParameters() 80 : { - 81 3413 : if (torch::is_floating_point(dataset)) { - 82 22 : throw std::invalid_argument("dataset (X, y) must be of type Integer"); + 81 1932 : if (torch::is_floating_point(dataset)) { + 82 12 : throw std::invalid_argument("dataset (X, y) must be of type Integer"); 83 : } - 84 3391 : if (dataset.size(0) - 1 != features.size()) { - 85 22 : throw std::invalid_argument("Classifier: X " + std::to_string(dataset.size(0) - 1) + " and features " + std::to_string(features.size()) + " must have the same number of features"); + 84 1920 : if (dataset.size(0) - 1 != features.size()) { + 85 12 : throw std::invalid_argument("Classifier: X " + std::to_string(dataset.size(0) - 1) + " and features " + std::to_string(features.size()) + " must have the same number of features"); 86 : } - 87 3369 : if (states.find(className) == states.end()) { - 88 22 : throw std::invalid_argument("class name not found in states"); + 87 1908 : if (states.find(className) == states.end()) { + 88 12 : throw std::invalid_argument("class name not found in states"); 89 : } - 90 124581 : for (auto feature : features) { - 91 121256 : if (states.find(feature) == states.end()) { - 92 22 : throw std::invalid_argument("feature [" + feature + "] not found in states"); + 90 42624 : for (auto feature : features) { + 91 40740 : if (states.find(feature) == states.end()) { + 92 12 : throw std::invalid_argument("feature [" + feature + "] not found in states"); 93 : } - 94 121256 : } - 95 3325 : } - 96 3262 : torch::Tensor Classifier::predict(torch::Tensor& X) + 94 40740 : } + 95 1884 : } + 96 2550 : torch::Tensor Classifier::predict(torch::Tensor& X) 97 : { - 98 3262 : if (!fitted) { - 99 44 : throw std::logic_error(CLASSIFIER_NOT_FITTED); + 98 2550 : if (!fitted) { + 99 24 : throw std::logic_error(CLASSIFIER_NOT_FITTED); 100 : } - 101 3218 : return model.predict(X); + 101 2526 : return model.predict(X); 102 : } - 103 44 : std::vector<int> Classifier::predict(std::vector<std::vector<int>>& X) + 103 24 : std::vector<int> Classifier::predict(std::vector<std::vector<int>>& X) 104 : { - 105 44 : if (!fitted) { - 106 22 : throw std::logic_error(CLASSIFIER_NOT_FITTED); + 105 24 : if (!fitted) { + 106 12 : throw std::logic_error(CLASSIFIER_NOT_FITTED); 107 : } - 108 22 : auto m_ = X[0].size(); - 109 22 : auto n_ = X.size(); - 110 22 : std::vector<std::vector<int>> Xd(n_, std::vector<int>(m_, 0)); - 111 110 : for (auto i = 0; i < n_; i++) { - 112 176 : Xd[i] = std::vector<int>(X[i].begin(), X[i].end()); + 108 12 : auto m_ = X[0].size(); + 109 12 : auto n_ = X.size(); + 110 12 : std::vector<std::vector<int>> Xd(n_, std::vector<int>(m_, 0)); + 111 60 : for (auto i = 0; i < n_; i++) { + 112 96 : Xd[i] = std::vector<int>(X[i].begin(), X[i].end()); 113 : } - 114 22 : auto yp = model.predict(Xd); - 115 44 : return yp; - 116 22 : } - 117 3562 : torch::Tensor Classifier::predict_proba(torch::Tensor& X) + 114 12 : auto yp = model.predict(Xd); + 115 24 : return yp; + 116 12 : } + 117 2226 : torch::Tensor Classifier::predict_proba(torch::Tensor& X) 118 : { - 119 3562 : if (!fitted) { - 120 22 : throw std::logic_error(CLASSIFIER_NOT_FITTED); + 119 2226 : if (!fitted) { + 120 12 : throw std::logic_error(CLASSIFIER_NOT_FITTED); 121 : } - 122 3540 : return model.predict_proba(X); + 122 2214 : return model.predict_proba(X); 123 : } - 124 766 : std::vector<std::vector<double>> Classifier::predict_proba(std::vector<std::vector<int>>& X) + 124 390 : std::vector<std::vector<double>> Classifier::predict_proba(std::vector<std::vector<int>>& X) 125 : { - 126 766 : if (!fitted) { - 127 22 : throw std::logic_error(CLASSIFIER_NOT_FITTED); + 126 390 : if (!fitted) { + 127 12 : throw std::logic_error(CLASSIFIER_NOT_FITTED); 128 : } - 129 744 : auto m_ = X[0].size(); - 130 744 : auto n_ = X.size(); - 131 744 : std::vector<std::vector<int>> Xd(n_, std::vector<int>(m_, 0)); + 129 378 : auto m_ = X[0].size(); + 130 378 : auto n_ = X.size(); + 131 378 : std::vector<std::vector<int>> Xd(n_, std::vector<int>(m_, 0)); 132 : // Convert to nxm vector - 133 9722 : for (auto i = 0; i < n_; i++) { - 134 17956 : Xd[i] = std::vector<int>(X[i].begin(), X[i].end()); + 133 3240 : for (auto i = 0; i < n_; i++) { + 134 5724 : Xd[i] = std::vector<int>(X[i].begin(), X[i].end()); 135 : } - 136 744 : auto yp = model.predict_proba(Xd); - 137 1488 : return yp; - 138 744 : } - 139 308 : float Classifier::score(torch::Tensor& X, torch::Tensor& y) + 136 378 : auto yp = model.predict_proba(Xd); + 137 756 : return yp; + 138 378 : } + 139 168 : float Classifier::score(torch::Tensor& X, torch::Tensor& y) 140 : { - 141 308 : torch::Tensor y_pred = predict(X); - 142 572 : return (y_pred == y).sum().item<float>() / y.size(0); - 143 286 : } - 144 44 : float Classifier::score(std::vector<std::vector<int>>& X, std::vector<int>& y) + 141 168 : torch::Tensor y_pred = predict(X); + 142 312 : return (y_pred == y).sum().item<float>() / y.size(0); + 143 156 : } + 144 24 : float Classifier::score(std::vector<std::vector<int>>& X, std::vector<int>& y) 145 : { - 146 44 : if (!fitted) { - 147 22 : throw std::logic_error(CLASSIFIER_NOT_FITTED); + 146 24 : if (!fitted) { + 147 12 : throw std::logic_error(CLASSIFIER_NOT_FITTED); 148 : } - 149 22 : return model.score(X, y); + 149 12 : return model.score(X, y); 150 : } - 151 66 : std::vector<std::string> Classifier::show() const + 151 36 : std::vector<std::string> Classifier::show() const 152 : { - 153 66 : return model.show(); + 153 36 : return model.show(); 154 : } - 155 2951 : void Classifier::addNodes() + 155 1680 : void Classifier::addNodes() 156 : { 157 : // Add all nodes to the network - 158 116009 : for (const auto& feature : features) { - 159 113058 : model.addNode(feature); + 158 39648 : for (const auto& feature : features) { + 159 37968 : model.addNode(feature); 160 : } - 161 2951 : model.addNode(className); - 162 2951 : } - 163 475 : int Classifier::getNumberOfNodes() const + 161 1680 : model.addNode(className); + 162 1680 : } + 163 282 : int Classifier::getNumberOfNodes() const 164 : { 165 : // Features does not include class - 166 475 : return fitted ? model.getFeatures().size() : 0; + 166 282 : return fitted ? model.getFeatures().size() : 0; 167 : } - 168 475 : int Classifier::getNumberOfEdges() const + 168 282 : int Classifier::getNumberOfEdges() const 169 : { - 170 475 : return fitted ? model.getNumEdges() : 0; + 170 282 : return fitted ? model.getNumEdges() : 0; 171 : } - 172 66 : int Classifier::getNumberOfStates() const + 172 36 : int Classifier::getNumberOfStates() const 173 : { - 174 66 : return fitted ? model.getStates() : 0; + 174 36 : return fitted ? model.getStates() : 0; 175 : } - 176 877 : int Classifier::getClassNumStates() const + 176 510 : int Classifier::getClassNumStates() const 177 : { - 178 877 : return fitted ? model.getClassNumStates() : 0; + 178 510 : return fitted ? model.getClassNumStates() : 0; 179 : } - 180 11 : std::vector<std::string> Classifier::topological_order() + 180 6 : std::vector<std::string> Classifier::topological_order() 181 : { - 182 11 : return model.topological_sort(); + 182 6 : return model.topological_sort(); 183 : } - 184 11 : std::string Classifier::dump_cpt() const + 184 6 : std::string Classifier::dump_cpt() const 185 : { - 186 11 : return model.dump_cpt(); + 186 6 : return model.dump_cpt(); 187 : } - 188 231 : void Classifier::setHyperparameters(const nlohmann::json& hyperparameters) + 188 126 : void Classifier::setHyperparameters(const nlohmann::json& hyperparameters) 189 : { - 190 231 : if (!hyperparameters.empty()) { - 191 22 : throw std::invalid_argument("Invalid hyperparameters" + hyperparameters.dump()); + 190 126 : if (!hyperparameters.empty()) { + 191 12 : throw std::invalid_argument("Invalid hyperparameters" + hyperparameters.dump()); 192 : } - 193 209 : } + 193 114 : } 194 : } diff --git a/html/bayesnet/classifiers/Classifier.h.func-c.html b/html/bayesnet/classifiers/Classifier.h.func-c.html index db6388f..4d88ce0 100644 --- a/html/bayesnet/classifiers/Classifier.h.func-c.html +++ b/html/bayesnet/classifiers/Classifier.h.func-c.html @@ -37,11 +37,11 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 80.0 % - 5 + 100.0 % + 4 4 @@ -63,44 +63,30 @@ - _ZN8bayesnet10Classifier10getVersionB5cxx11Ev + bayesnet::Classifier::getVersion[abi:cxx11]() - 8 + 48 - _ZNK8bayesnet10Classifier8getNotesB5cxx11Ev + bayesnet::Classifier::getNotes[abi:cxx11]() const - 12 + 114 - _ZNK8bayesnet10Classifier9getStatusEv + bayesnet::Classifier::getStatus() const - 32 + 192 - _ZN8bayesnet10ClassifierD0Ev + bayesnet::Classifier::~Classifier() - 241 - - - - - _ZN8bayesnet10ClassifierD0Ev - - 0 - - - - - _ZN8bayesnet10ClassifierD2Ev - - 241 + 1818 diff --git a/html/bayesnet/classifiers/Classifier.h.func.html b/html/bayesnet/classifiers/Classifier.h.func.html index e5ad3a3..3578e8a 100644 --- a/html/bayesnet/classifiers/Classifier.h.func.html +++ b/html/bayesnet/classifiers/Classifier.h.func.html @@ -37,11 +37,11 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 80.0 % - 5 + 100.0 % + 4 4 @@ -63,44 +63,30 @@ - _ZN8bayesnet10Classifier10getVersionB5cxx11Ev + bayesnet::Classifier::getNotes[abi:cxx11]() const - 8 + 114 - _ZN8bayesnet10ClassifierD0Ev + bayesnet::Classifier::getStatus() const - 241 + 192 - _ZN8bayesnet10ClassifierD0Ev + bayesnet::Classifier::getVersion[abi:cxx11]() - 0 + 48 - _ZN8bayesnet10ClassifierD2Ev + bayesnet::Classifier::~Classifier() - 241 - - - - - _ZNK8bayesnet10Classifier8getNotesB5cxx11Ev - - 12 - - - - - _ZNK8bayesnet10Classifier9getStatusEv - - 32 + 1818 diff --git a/html/bayesnet/classifiers/Classifier.h.gcov.html b/html/bayesnet/classifiers/Classifier.h.gcov.html index ed97fcb..9aa27a0 100644 --- a/html/bayesnet/classifiers/Classifier.h.gcov.html +++ b/html/bayesnet/classifiers/Classifier.h.gcov.html @@ -37,11 +37,11 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 80.0 % - 5 + 100.0 % + 4 4 @@ -77,7 +77,7 @@ 15 : class Classifier : public BaseClassifier { 16 : public: 17 : Classifier(Network model); - 18 241 : virtual ~Classifier() = default; + 18 1818 : virtual ~Classifier() = default; 19 : Classifier& fit(std::vector<std::vector<int>>& X, std::vector<int>& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states) override; 20 : Classifier& fit(torch::Tensor& X, torch::Tensor& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states) override; 21 : Classifier& fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states) override; @@ -91,13 +91,13 @@ 29 : std::vector<int> predict(std::vector<std::vector<int>>& X) override; 30 : torch::Tensor predict_proba(torch::Tensor& X) override; 31 : std::vector<std::vector<double>> predict_proba(std::vector<std::vector<int>>& X) override; - 32 32 : status_t getStatus() const override { return status; } - 33 24 : std::string getVersion() override { return { project_version.begin(), project_version.end() }; }; + 32 192 : status_t getStatus() const override { return status; } + 33 144 : std::string getVersion() override { return { project_version.begin(), project_version.end() }; }; 34 : float score(torch::Tensor& X, torch::Tensor& y) override; 35 : float score(std::vector<std::vector<int>>& X, std::vector<int>& y) override; 36 : std::vector<std::string> show() const override; 37 : std::vector<std::string> topological_order() override; - 38 12 : std::vector<std::string> getNotes() const override { return notes; } + 38 114 : std::vector<std::string> getNotes() const override { return notes; } 39 : std::string dump_cpt() const override; 40 : void setHyperparameters(const nlohmann::json& hyperparameters) override; //For classifiers that don't have hyperparameters 41 : protected: diff --git a/html/bayesnet/classifiers/KDB.cc.func-c.html b/html/bayesnet/classifiers/KDB.cc.func-c.html index 50882fc..a4db5e1 100644 --- a/html/bayesnet/classifiers/KDB.cc.func-c.html +++ b/html/bayesnet/classifiers/KDB.cc.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,37 +63,37 @@ - _ZNK8bayesnet3KDB5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::KDB::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 22 + 12 - _ZN8bayesnet3KDB18setHyperparametersERKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEE + bayesnet::KDB::setHyperparameters(nlohmann::json_abi_v3_11_3::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::json_abi_v3_11_3::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char> >, void> const&) - 33 + 18 - _ZN8bayesnet3KDB10buildModelERKN2at6TensorE + bayesnet::KDB::buildModel(at::Tensor const&) - 143 + 78 - _ZN8bayesnet3KDBC2Eif + bayesnet::KDB::KDB(int, float) - 407 + 222 - _ZN8bayesnet3KDB11add_m_edgesEiRSt6vectorIiSaIiEERN2at6TensorE + bayesnet::KDB::add_m_edges(int, std::vector<int, std::allocator<int> >&, at::Tensor&) - 946 + 516 diff --git a/html/bayesnet/classifiers/KDB.cc.func.html b/html/bayesnet/classifiers/KDB.cc.func.html index 5bcbdde..31261b4 100644 --- a/html/bayesnet/classifiers/KDB.cc.func.html +++ b/html/bayesnet/classifiers/KDB.cc.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,37 +63,37 @@ - _ZN8bayesnet3KDB10buildModelERKN2at6TensorE + bayesnet::KDB::KDB(int, float) - 143 + 222 - _ZN8bayesnet3KDB11add_m_edgesEiRSt6vectorIiSaIiEERN2at6TensorE + bayesnet::KDB::add_m_edges(int, std::vector<int, std::allocator<int> >&, at::Tensor&) - 946 + 516 - _ZN8bayesnet3KDB18setHyperparametersERKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEE + bayesnet::KDB::buildModel(at::Tensor const&) - 33 + 78 - _ZN8bayesnet3KDBC2Eif + bayesnet::KDB::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 407 + 12 - _ZNK8bayesnet3KDB5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::KDB::setHyperparameters(nlohmann::json_abi_v3_11_3::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::json_abi_v3_11_3::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char> >, void> const&) - 22 + 18 diff --git a/html/bayesnet/classifiers/KDB.cc.gcov.html b/html/bayesnet/classifiers/KDB.cc.gcov.html index 75ec210..b618d38 100644 --- a/html/bayesnet/classifiers/KDB.cc.gcov.html +++ b/html/bayesnet/classifiers/KDB.cc.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -69,25 +69,25 @@ 7 : #include "KDB.h" 8 : 9 : namespace bayesnet { - 10 407 : KDB::KDB(int k, float theta) : Classifier(Network()), k(k), theta(theta) + 10 222 : KDB::KDB(int k, float theta) : Classifier(Network()), k(k), theta(theta) 11 : { - 12 1221 : validHyperparameters = { "k", "theta" }; + 12 666 : validHyperparameters = { "k", "theta" }; 13 : - 14 1221 : } - 15 33 : void KDB::setHyperparameters(const nlohmann::json& hyperparameters_) + 14 666 : } + 15 18 : void KDB::setHyperparameters(const nlohmann::json& hyperparameters_) 16 : { - 17 33 : auto hyperparameters = hyperparameters_; - 18 33 : if (hyperparameters.contains("k")) { - 19 11 : k = hyperparameters["k"]; - 20 11 : hyperparameters.erase("k"); + 17 18 : auto hyperparameters = hyperparameters_; + 18 18 : if (hyperparameters.contains("k")) { + 19 6 : k = hyperparameters["k"]; + 20 6 : hyperparameters.erase("k"); 21 : } - 22 33 : if (hyperparameters.contains("theta")) { - 23 11 : theta = hyperparameters["theta"]; - 24 11 : hyperparameters.erase("theta"); + 22 18 : if (hyperparameters.contains("theta")) { + 23 6 : theta = hyperparameters["theta"]; + 24 6 : hyperparameters.erase("theta"); 25 : } - 26 33 : Classifier::setHyperparameters(hyperparameters); - 27 33 : } - 28 143 : void KDB::buildModel(const torch::Tensor& weights) + 26 18 : Classifier::setHyperparameters(hyperparameters); + 27 18 : } + 28 78 : void KDB::buildModel(const torch::Tensor& weights) 29 : { 30 : /* 31 : 1. For each feature Xi, compute mutual information, I(X;C), @@ -110,66 +110,66 @@ 48 : */ 49 : // 1. For each feature Xi, compute mutual information, I(X;C), 50 : // where C is the class. - 51 143 : addNodes(); - 52 429 : const torch::Tensor& y = dataset.index({ -1, "..." }); - 53 143 : std::vector<double> mi; - 54 1089 : for (auto i = 0; i < features.size(); i++) { - 55 2838 : torch::Tensor firstFeature = dataset.index({ i, "..." }); - 56 946 : mi.push_back(metrics.mutualInformation(firstFeature, y, weights)); - 57 946 : } + 51 78 : addNodes(); + 52 234 : const torch::Tensor& y = dataset.index({ -1, "..." }); + 53 78 : std::vector<double> mi; + 54 594 : for (auto i = 0; i < features.size(); i++) { + 55 1548 : torch::Tensor firstFeature = dataset.index({ i, "..." }); + 56 516 : mi.push_back(metrics.mutualInformation(firstFeature, y, weights)); + 57 516 : } 58 : // 2. Compute class conditional mutual information I(Xi;XjIC), f or each - 59 143 : auto conditionalEdgeWeights = metrics.conditionalEdge(weights); + 59 78 : auto conditionalEdgeWeights = metrics.conditionalEdge(weights); 60 : // 3. Let the used variable list, S, be empty. - 61 143 : std::vector<int> S; + 61 78 : std::vector<int> S; 62 : // 4. Let the DAG network being constructed, BN, begin with a single 63 : // class node, C. 64 : // 5. Repeat until S includes all domain features 65 : // 5.1. Select feature Xmax which is not in S and has the largest value 66 : // I(Xmax;C). - 67 143 : auto order = argsort(mi); - 68 1089 : for (auto idx : order) { + 67 78 : auto order = argsort(mi); + 68 594 : for (auto idx : order) { 69 : // 5.2. Add a node to BN representing Xmax. 70 : // 5.3. Add an arc from C to Xmax in BN. - 71 946 : model.addEdge(className, features[idx]); + 71 516 : model.addEdge(className, features[idx]); 72 : // 5.4. Add m = min(lSl,/c) arcs from m distinct features Xj in S with 73 : // the highest value for I(Xmax;X,jC). - 74 946 : add_m_edges(idx, S, conditionalEdgeWeights); + 74 516 : add_m_edges(idx, S, conditionalEdgeWeights); 75 : // 5.5. Add Xmax to S. - 76 946 : S.push_back(idx); + 76 516 : S.push_back(idx); 77 : } - 78 1232 : } - 79 946 : void KDB::add_m_edges(int idx, std::vector<int>& S, torch::Tensor& weights) + 78 672 : } + 79 516 : void KDB::add_m_edges(int idx, std::vector<int>& S, torch::Tensor& weights) 80 : { - 81 946 : auto n_edges = std::min(k, static_cast<int>(S.size())); - 82 946 : auto cond_w = clone(weights); - 83 946 : bool exit_cond = k == 0; - 84 946 : int num = 0; - 85 2761 : while (!exit_cond) { - 86 7260 : auto max_minfo = argmax(cond_w.index({ idx, "..." })).item<int>(); - 87 1815 : auto belongs = find(S.begin(), S.end(), max_minfo) != S.end(); - 88 4851 : if (belongs && cond_w.index({ idx, max_minfo }).item<float>() > theta) { + 81 516 : auto n_edges = std::min(k, static_cast<int>(S.size())); + 82 516 : auto cond_w = clone(weights); + 83 516 : bool exit_cond = k == 0; + 84 516 : int num = 0; + 85 1506 : while (!exit_cond) { + 86 3960 : auto max_minfo = argmax(cond_w.index({ idx, "..." })).item<int>(); + 87 990 : auto belongs = find(S.begin(), S.end(), max_minfo) != S.end(); + 88 2646 : if (belongs && cond_w.index({ idx, max_minfo }).item<float>() > theta) { 89 : try { - 90 880 : model.addEdge(features[max_minfo], features[idx]); - 91 880 : num++; + 90 480 : model.addEdge(features[max_minfo], features[idx]); + 91 480 : num++; 92 : } 93 0 : catch (const std::invalid_argument& e) { 94 : // Loops are not allowed 95 0 : } 96 : } - 97 7260 : cond_w.index_put_({ idx, max_minfo }, -1); - 98 5445 : auto candidates_mask = cond_w.index({ idx, "..." }).gt(theta); - 99 1815 : auto candidates = candidates_mask.nonzero(); - 100 1815 : exit_cond = num == n_edges || candidates.size(0) == 0; - 101 1815 : } - 102 7403 : } - 103 22 : std::vector<std::string> KDB::graph(const std::string& title) const + 97 3960 : cond_w.index_put_({ idx, max_minfo }, -1); + 98 2970 : auto candidates_mask = cond_w.index({ idx, "..." }).gt(theta); + 99 990 : auto candidates = candidates_mask.nonzero(); + 100 990 : exit_cond = num == n_edges || candidates.size(0) == 0; + 101 990 : } + 102 4038 : } + 103 12 : std::vector<std::string> KDB::graph(const std::string& title) const 104 : { - 105 22 : std::string header{ title }; - 106 22 : if (title == "KDB") { - 107 22 : header += " (k=" + std::to_string(k) + ", theta=" + std::to_string(theta) + ")"; + 105 12 : std::string header{ title }; + 106 12 : if (title == "KDB") { + 107 12 : header += " (k=" + std::to_string(k) + ", theta=" + std::to_string(theta) + ")"; 108 : } - 109 44 : return model.graph(header); - 110 22 : } + 109 24 : return model.graph(header); + 110 12 : } 111 : } diff --git a/html/bayesnet/classifiers/KDB.h.func-c.html b/html/bayesnet/classifiers/KDB.h.func-c.html index ec98e76..8cf47d3 100644 --- a/html/bayesnet/classifiers/KDB.h.func-c.html +++ b/html/bayesnet/classifiers/KDB.h.func-c.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet3KDBD0Ev + bayesnet::KDB::~KDB() - 11 - - - - - _ZN8bayesnet3KDBD0Ev - - 2 - - - - - _ZN8bayesnet3KDBD2Ev - - 9 + 66 diff --git a/html/bayesnet/classifiers/KDB.h.func.html b/html/bayesnet/classifiers/KDB.h.func.html index b859f2f..d85d7ff 100644 --- a/html/bayesnet/classifiers/KDB.h.func.html +++ b/html/bayesnet/classifiers/KDB.h.func.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet3KDBD0Ev + bayesnet::KDB::~KDB() - 11 - - - - - _ZN8bayesnet3KDBD0Ev - - 2 - - - - - _ZN8bayesnet3KDBD2Ev - - 9 + 66 diff --git a/html/bayesnet/classifiers/KDB.h.gcov.html b/html/bayesnet/classifiers/KDB.h.gcov.html index 0be2ab7..b915154 100644 --- a/html/bayesnet/classifiers/KDB.h.gcov.html +++ b/html/bayesnet/classifiers/KDB.h.gcov.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -81,7 +81,7 @@ 19 : void buildModel(const torch::Tensor& weights) override; 20 : public: 21 : explicit KDB(int k, float theta = 0.03); - 22 11 : virtual ~KDB() = default; + 22 66 : virtual ~KDB() = default; 23 : void setHyperparameters(const nlohmann::json& hyperparameters_) override; 24 : std::vector<std::string> graph(const std::string& name = "KDB") const override; 25 : }; diff --git a/html/bayesnet/classifiers/KDBLd.cc.func-c.html b/html/bayesnet/classifiers/KDBLd.cc.func-c.html index d71a389..f7c7fd8 100644 --- a/html/bayesnet/classifiers/KDBLd.cc.func-c.html +++ b/html/bayesnet/classifiers/KDBLd.cc.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,30 +63,30 @@ - _ZNK8bayesnet5KDBLd5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::KDBLd::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 11 + 6 - _ZN8bayesnet5KDBLd7predictERN2at6TensorE + bayesnet::KDBLd::predict(at::Tensor&) - 44 + 24 - _ZN8bayesnet5KDBLd3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE + bayesnet::KDBLd::fit(at::Tensor&, at::Tensor&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&) - 55 + 30 - _ZN8bayesnet5KDBLdC2Ei + bayesnet::KDBLd::KDBLd(int) - 187 + 102 diff --git a/html/bayesnet/classifiers/KDBLd.cc.func.html b/html/bayesnet/classifiers/KDBLd.cc.func.html index f1d9576..7009cb5 100644 --- a/html/bayesnet/classifiers/KDBLd.cc.func.html +++ b/html/bayesnet/classifiers/KDBLd.cc.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,30 +63,30 @@ - _ZN8bayesnet5KDBLd3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE + bayesnet::KDBLd::KDBLd(int) - 55 + 102 - _ZN8bayesnet5KDBLd7predictERN2at6TensorE + bayesnet::KDBLd::fit(at::Tensor&, at::Tensor&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&) - 44 + 30 - _ZN8bayesnet5KDBLdC2Ei + bayesnet::KDBLd::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 187 + 6 - _ZNK8bayesnet5KDBLd5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::KDBLd::predict(at::Tensor&) - 11 + 24 diff --git a/html/bayesnet/classifiers/KDBLd.cc.gcov.html b/html/bayesnet/classifiers/KDBLd.cc.gcov.html index 8884865..e234a92 100644 --- a/html/bayesnet/classifiers/KDBLd.cc.gcov.html +++ b/html/bayesnet/classifiers/KDBLd.cc.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -69,30 +69,30 @@ 7 : #include "KDBLd.h" 8 : 9 : namespace bayesnet { - 10 187 : KDBLd::KDBLd(int k) : KDB(k), Proposal(dataset, features, className) {} - 11 55 : KDBLd& KDBLd::fit(torch::Tensor& X_, torch::Tensor& y_, const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_) + 10 102 : KDBLd::KDBLd(int k) : KDB(k), Proposal(dataset, features, className) {} + 11 30 : KDBLd& KDBLd::fit(torch::Tensor& X_, torch::Tensor& y_, const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_) 12 : { - 13 55 : checkInput(X_, y_); - 14 55 : features = features_; - 15 55 : className = className_; - 16 55 : Xf = X_; - 17 55 : y = y_; + 13 30 : checkInput(X_, y_); + 14 30 : features = features_; + 15 30 : className = className_; + 16 30 : Xf = X_; + 17 30 : y = y_; 18 : // Fills std::vectors Xv & yv with the data from tensors X_ (discretized) & y - 19 55 : states = fit_local_discretization(y); + 19 30 : states = fit_local_discretization(y); 20 : // We have discretized the input data 21 : // 1st we need to fit the model to build the normal KDB structure, KDB::fit initializes the base Bayesian network - 22 55 : KDB::fit(dataset, features, className, states); - 23 55 : states = localDiscretizationProposal(states, model); - 24 55 : return *this; + 22 30 : KDB::fit(dataset, features, className, states); + 23 30 : states = localDiscretizationProposal(states, model); + 24 30 : return *this; 25 : } - 26 44 : torch::Tensor KDBLd::predict(torch::Tensor& X) + 26 24 : torch::Tensor KDBLd::predict(torch::Tensor& X) 27 : { - 28 44 : auto Xt = prepareX(X); - 29 88 : return KDB::predict(Xt); - 30 44 : } - 31 11 : std::vector<std::string> KDBLd::graph(const std::string& name) const + 28 24 : auto Xt = prepareX(X); + 29 48 : return KDB::predict(Xt); + 30 24 : } + 31 6 : std::vector<std::string> KDBLd::graph(const std::string& name) const 32 : { - 33 11 : return KDB::graph(name); + 33 6 : return KDB::graph(name); 34 : } 35 : } diff --git a/html/bayesnet/classifiers/KDBLd.h.func-c.html b/html/bayesnet/classifiers/KDBLd.h.func-c.html index ffe7266..c2ba0fd 100644 --- a/html/bayesnet/classifiers/KDBLd.h.func-c.html +++ b/html/bayesnet/classifiers/KDBLd.h.func-c.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet5KDBLdD0Ev + bayesnet::KDBLd::~KDBLd() - 5 - - - - - _ZN8bayesnet5KDBLdD0Ev - - 2 - - - - - _ZN8bayesnet5KDBLdD2Ev - - 3 + 30 diff --git a/html/bayesnet/classifiers/KDBLd.h.func.html b/html/bayesnet/classifiers/KDBLd.h.func.html index e7a86d9..a26434f 100644 --- a/html/bayesnet/classifiers/KDBLd.h.func.html +++ b/html/bayesnet/classifiers/KDBLd.h.func.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet5KDBLdD0Ev + bayesnet::KDBLd::~KDBLd() - 5 - - - - - _ZN8bayesnet5KDBLdD0Ev - - 2 - - - - - _ZN8bayesnet5KDBLdD2Ev - - 3 + 30 diff --git a/html/bayesnet/classifiers/KDBLd.h.gcov.html b/html/bayesnet/classifiers/KDBLd.h.gcov.html index 995a036..2a701ea 100644 --- a/html/bayesnet/classifiers/KDBLd.h.gcov.html +++ b/html/bayesnet/classifiers/KDBLd.h.gcov.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -76,7 +76,7 @@ 14 : private: 15 : public: 16 : explicit KDBLd(int k); - 17 5 : virtual ~KDBLd() = default; + 17 30 : virtual ~KDBLd() = default; 18 : KDBLd& fit(torch::Tensor& X, torch::Tensor& y, const std::vector<std::string>& features, const std::string& className, map<std::string, std::vector<int>>& states) override; 19 : std::vector<std::string> graph(const std::string& name = "KDB") const override; 20 : torch::Tensor predict(torch::Tensor& X) override; diff --git a/html/bayesnet/classifiers/Proposal.cc.func-c.html b/html/bayesnet/classifiers/Proposal.cc.func-c.html index 4b28b11..cb28703 100644 --- a/html/bayesnet/classifiers/Proposal.cc.func-c.html +++ b/html/bayesnet/classifiers/Proposal.cc.func-c.html @@ -37,11 +37,11 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 88.9 % - 9 + 100.0 % + 8 8 @@ -63,72 +63,58 @@ - _ZN8bayesnet8Proposal8prepareXERN2at6TensorE + bayesnet::Proposal::prepareX(at::Tensor&) - 462 + 252 - _ZN8bayesnet8ProposalD0Ev + bayesnet::Proposal::~Proposal() - 550 + 300 - _ZN8bayesnet8ProposalD0Ev + bayesnet::Proposal::localDiscretizationProposal(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&, bayesnet::Network&) - 0 + 318 - _ZN8bayesnet8ProposalD2Ev + bayesnet::Proposal::checkInput(at::Tensor const&, at::Tensor const&) - 550 + 342 - _ZN8bayesnet8Proposal27localDiscretizationProposalERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERNS_7NetworkE + bayesnet::Proposal::fit_local_discretization[abi:cxx11](at::Tensor const&) - 583 + 348 - _ZN8bayesnet8Proposal10checkInputERKN2at6TensorES4_ + bayesnet::Proposal::Proposal(at::Tensor&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) - 627 + 636 - _ZN8bayesnet8Proposal24fit_local_discretizationB5cxx11ERKN2at6TensorE + auto bayesnet::Proposal::localDiscretizationProposal(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&, bayesnet::Network&)::{lambda(auto:1 const&)#2}::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 638 + 2058 - _ZN8bayesnet8ProposalC2ERN2at6TensorERSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERSA_ + auto bayesnet::Proposal::localDiscretizationProposal(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&, bayesnet::Network&)::{lambda(auto:1 const&)#1}::operator()<bayesnet::Node*>(bayesnet::Node* const&) const - 1166 - - - - - _ZZN8bayesnet8Proposal27localDiscretizationProposalERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERNS_7NetworkEENKUlRKT_E0_clIS7_EEDaSO_ - - 3773 - - - - - _ZZN8bayesnet8Proposal27localDiscretizationProposalERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERNS_7NetworkEENKUlRKT_E_clIPNS_4NodeEEEDaSO_ - - 7414 + 4044 diff --git a/html/bayesnet/classifiers/Proposal.cc.func.html b/html/bayesnet/classifiers/Proposal.cc.func.html index 746b4c0..7238199 100644 --- a/html/bayesnet/classifiers/Proposal.cc.func.html +++ b/html/bayesnet/classifiers/Proposal.cc.func.html @@ -37,11 +37,11 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 88.9 % - 9 + 100.0 % + 8 8 @@ -63,72 +63,58 @@ - _ZN8bayesnet8Proposal10checkInputERKN2at6TensorES4_ + auto bayesnet::Proposal::localDiscretizationProposal(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&, bayesnet::Network&)::{lambda(auto:1 const&)#1}::operator()<bayesnet::Node*>(bayesnet::Node* const&) const - 627 + 4044 - _ZN8bayesnet8Proposal24fit_local_discretizationB5cxx11ERKN2at6TensorE + auto bayesnet::Proposal::localDiscretizationProposal(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&, bayesnet::Network&)::{lambda(auto:1 const&)#2}::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 638 + 2058 - _ZN8bayesnet8Proposal27localDiscretizationProposalERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERNS_7NetworkE + bayesnet::Proposal::Proposal(at::Tensor&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) - 583 + 636 - _ZN8bayesnet8Proposal8prepareXERN2at6TensorE + bayesnet::Proposal::checkInput(at::Tensor const&, at::Tensor const&) - 462 + 342 - _ZN8bayesnet8ProposalC2ERN2at6TensorERSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERSA_ + bayesnet::Proposal::fit_local_discretization[abi:cxx11](at::Tensor const&) - 1166 + 348 - _ZN8bayesnet8ProposalD0Ev + bayesnet::Proposal::localDiscretizationProposal(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&, bayesnet::Network&) - 550 + 318 - _ZN8bayesnet8ProposalD0Ev + bayesnet::Proposal::prepareX(at::Tensor&) - 0 + 252 - _ZN8bayesnet8ProposalD2Ev + bayesnet::Proposal::~Proposal() - 550 - - - - - _ZZN8bayesnet8Proposal27localDiscretizationProposalERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERNS_7NetworkEENKUlRKT_E0_clIS7_EEDaSO_ - - 3773 - - - - - _ZZN8bayesnet8Proposal27localDiscretizationProposalERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERNS_7NetworkEENKUlRKT_E_clIPNS_4NodeEEEDaSO_ - - 7414 + 300 diff --git a/html/bayesnet/classifiers/Proposal.cc.gcov.html b/html/bayesnet/classifiers/Proposal.cc.gcov.html index 7fb96d0..df175ac 100644 --- a/html/bayesnet/classifiers/Proposal.cc.gcov.html +++ b/html/bayesnet/classifiers/Proposal.cc.gcov.html @@ -37,11 +37,11 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 88.9 % - 9 + 100.0 % + 8 8 @@ -70,111 +70,111 @@ 8 : #include "Proposal.h" 9 : 10 : namespace bayesnet { - 11 1166 : Proposal::Proposal(torch::Tensor& dataset_, std::vector<std::string>& features_, std::string& className_) : pDataset(dataset_), pFeatures(features_), pClassName(className_) {} - 12 550 : Proposal::~Proposal() + 11 636 : Proposal::Proposal(torch::Tensor& dataset_, std::vector<std::string>& features_, std::string& className_) : pDataset(dataset_), pFeatures(features_), pClassName(className_) {} + 12 300 : Proposal::~Proposal() 13 : { - 14 5214 : for (auto& [key, value] : discretizers) { - 15 4664 : delete value; + 14 2844 : for (auto& [key, value] : discretizers) { + 15 2544 : delete value; 16 : } - 17 550 : } - 18 627 : void Proposal::checkInput(const torch::Tensor& X, const torch::Tensor& y) + 17 300 : } + 18 342 : void Proposal::checkInput(const torch::Tensor& X, const torch::Tensor& y) 19 : { - 20 627 : if (!torch::is_floating_point(X)) { + 20 342 : if (!torch::is_floating_point(X)) { 21 0 : throw std::invalid_argument("X must be a floating point tensor"); 22 : } - 23 627 : if (torch::is_floating_point(y)) { + 23 342 : if (torch::is_floating_point(y)) { 24 0 : throw std::invalid_argument("y must be an integer tensor"); 25 : } - 26 627 : } - 27 583 : map<std::string, std::vector<int>> Proposal::localDiscretizationProposal(const map<std::string, std::vector<int>>& oldStates, Network& model) + 26 342 : } + 27 318 : map<std::string, std::vector<int>> Proposal::localDiscretizationProposal(const map<std::string, std::vector<int>>& oldStates, Network& model) 28 : { 29 : // order of local discretization is important. no good 0, 1, 2... 30 : // although we rediscretize features after the local discretization of every feature - 31 583 : auto order = model.topological_sort(); - 32 583 : auto& nodes = model.getNodes(); - 33 583 : map<std::string, std::vector<int>> states = oldStates; - 34 583 : std::vector<int> indicesToReDiscretize; - 35 583 : bool upgrade = false; // Flag to check if we need to upgrade the model - 36 4884 : for (auto feature : order) { - 37 4301 : auto nodeParents = nodes[feature]->getParents(); - 38 4301 : if (nodeParents.size() < 2) continue; // Only has class as parent - 39 3641 : upgrade = true; - 40 3641 : int index = find(pFeatures.begin(), pFeatures.end(), feature) - pFeatures.begin(); - 41 3641 : indicesToReDiscretize.push_back(index); // We need to re-discretize this feature - 42 3641 : std::vector<std::string> parents; - 43 11055 : transform(nodeParents.begin(), nodeParents.end(), back_inserter(parents), [](const auto& p) { return p->getName(); }); + 31 318 : auto order = model.topological_sort(); + 32 318 : auto& nodes = model.getNodes(); + 33 318 : map<std::string, std::vector<int>> states = oldStates; + 34 318 : std::vector<int> indicesToReDiscretize; + 35 318 : bool upgrade = false; // Flag to check if we need to upgrade the model + 36 2664 : for (auto feature : order) { + 37 2346 : auto nodeParents = nodes[feature]->getParents(); + 38 2346 : if (nodeParents.size() < 2) continue; // Only has class as parent + 39 1986 : upgrade = true; + 40 1986 : int index = find(pFeatures.begin(), pFeatures.end(), feature) - pFeatures.begin(); + 41 1986 : indicesToReDiscretize.push_back(index); // We need to re-discretize this feature + 42 1986 : std::vector<std::string> parents; + 43 6030 : transform(nodeParents.begin(), nodeParents.end(), back_inserter(parents), [](const auto& p) { return p->getName(); }); 44 : // Remove class as parent as it will be added later - 45 3641 : parents.erase(remove(parents.begin(), parents.end(), pClassName), parents.end()); + 45 1986 : parents.erase(remove(parents.begin(), parents.end(), pClassName), parents.end()); 46 : // Get the indices of the parents - 47 3641 : std::vector<int> indices; - 48 3641 : indices.push_back(-1); // Add class index - 49 7414 : transform(parents.begin(), parents.end(), back_inserter(indices), [&](const auto& p) {return find(pFeatures.begin(), pFeatures.end(), p) - pFeatures.begin(); }); + 47 1986 : std::vector<int> indices; + 48 1986 : indices.push_back(-1); // Add class index + 49 4044 : transform(parents.begin(), parents.end(), back_inserter(indices), [&](const auto& p) {return find(pFeatures.begin(), pFeatures.end(), p) - pFeatures.begin(); }); 50 : // Now we fit the discretizer of the feature, conditioned on its parents and the class i.e. discretizer.fit(X[index], X[indices] + y) - 51 3641 : std::vector<std::string> yJoinParents(Xf.size(1)); - 52 11055 : for (auto idx : indices) { - 53 2636260 : for (int i = 0; i < Xf.size(1); ++i) { - 54 7886538 : yJoinParents[i] += to_string(pDataset.index({ idx, i }).item<int>()); + 51 1986 : std::vector<std::string> yJoinParents(Xf.size(1)); + 52 6030 : for (auto idx : indices) { + 53 1437960 : for (int i = 0; i < Xf.size(1); ++i) { + 54 4301748 : yJoinParents[i] += to_string(pDataset.index({ idx, i }).item<int>()); 55 : } 56 : } - 57 3641 : auto arff = ArffFiles(); - 58 3641 : auto yxv = arff.factorize(yJoinParents); - 59 7282 : auto xvf_ptr = Xf.index({ index }).data_ptr<float>(); - 60 3641 : auto xvf = std::vector<mdlp::precision_t>(xvf_ptr, xvf_ptr + Xf.size(1)); - 61 3641 : discretizers[feature]->fit(xvf, yxv); - 62 4961 : } - 63 583 : if (upgrade) { + 57 1986 : auto arff = ArffFiles(); + 58 1986 : auto yxv = arff.factorize(yJoinParents); + 59 3972 : auto xvf_ptr = Xf.index({ index }).data_ptr<float>(); + 60 1986 : auto xvf = std::vector<mdlp::precision_t>(xvf_ptr, xvf_ptr + Xf.size(1)); + 61 1986 : discretizers[feature]->fit(xvf, yxv); + 62 2706 : } + 63 318 : if (upgrade) { 64 : // Discretize again X (only the affected indices) with the new fitted discretizers - 65 4224 : for (auto index : indicesToReDiscretize) { - 66 7282 : auto Xt_ptr = Xf.index({ index }).data_ptr<float>(); - 67 3641 : auto Xt = std::vector<float>(Xt_ptr, Xt_ptr + Xf.size(1)); - 68 14564 : pDataset.index_put_({ index, "..." }, torch::tensor(discretizers[pFeatures[index]]->transform(Xt))); - 69 3641 : auto xStates = std::vector<int>(discretizers[pFeatures[index]]->getCutPoints().size() + 1); - 70 3641 : iota(xStates.begin(), xStates.end(), 0); + 65 2304 : for (auto index : indicesToReDiscretize) { + 66 3972 : auto Xt_ptr = Xf.index({ index }).data_ptr<float>(); + 67 1986 : auto Xt = std::vector<float>(Xt_ptr, Xt_ptr + Xf.size(1)); + 68 7944 : pDataset.index_put_({ index, "..." }, torch::tensor(discretizers[pFeatures[index]]->transform(Xt))); + 69 1986 : auto xStates = std::vector<int>(discretizers[pFeatures[index]]->getCutPoints().size() + 1); + 70 1986 : iota(xStates.begin(), xStates.end(), 0); 71 : //Update new states of the feature/node - 72 3641 : states[pFeatures[index]] = xStates; - 73 3641 : } - 74 583 : const torch::Tensor weights = torch::full({ pDataset.size(1) }, 1.0 / pDataset.size(1), torch::kDouble); - 75 583 : model.fit(pDataset, weights, pFeatures, pClassName, states); - 76 583 : } - 77 1166 : return states; - 78 2640352 : } - 79 638 : map<std::string, std::vector<int>> Proposal::fit_local_discretization(const torch::Tensor& y) + 72 1986 : states[pFeatures[index]] = xStates; + 73 1986 : } + 74 318 : const torch::Tensor weights = torch::full({ pDataset.size(1) }, 1.0 / pDataset.size(1), torch::kDouble); + 75 318 : model.fit(pDataset, weights, pFeatures, pClassName, states); + 76 318 : } + 77 636 : return states; + 78 1440192 : } + 79 348 : map<std::string, std::vector<int>> Proposal::fit_local_discretization(const torch::Tensor& y) 80 : { 81 : // Discretize the continuous input data and build pDataset (Classifier::dataset) - 82 638 : int m = Xf.size(1); - 83 638 : int n = Xf.size(0); - 84 638 : map<std::string, std::vector<int>> states; - 85 638 : pDataset = torch::zeros({ n + 1, m }, torch::kInt32); - 86 638 : auto yv = std::vector<int>(y.data_ptr<int>(), y.data_ptr<int>() + y.size(0)); + 82 348 : int m = Xf.size(1); + 83 348 : int n = Xf.size(0); + 84 348 : map<std::string, std::vector<int>> states; + 85 348 : pDataset = torch::zeros({ n + 1, m }, torch::kInt32); + 86 348 : auto yv = std::vector<int>(y.data_ptr<int>(), y.data_ptr<int>() + y.size(0)); 87 : // discretize input data by feature(row) - 88 5346 : for (auto i = 0; i < pFeatures.size(); ++i) { - 89 4708 : auto* discretizer = new mdlp::CPPFImdlp(); - 90 9416 : auto Xt_ptr = Xf.index({ i }).data_ptr<float>(); - 91 4708 : auto Xt = std::vector<float>(Xt_ptr, Xt_ptr + Xf.size(1)); - 92 4708 : discretizer->fit(Xt, yv); - 93 18832 : pDataset.index_put_({ i, "..." }, torch::tensor(discretizer->transform(Xt))); - 94 4708 : auto xStates = std::vector<int>(discretizer->getCutPoints().size() + 1); - 95 4708 : iota(xStates.begin(), xStates.end(), 0); - 96 4708 : states[pFeatures[i]] = xStates; - 97 4708 : discretizers[pFeatures[i]] = discretizer; - 98 4708 : } - 99 638 : int n_classes = torch::max(y).item<int>() + 1; - 100 638 : auto yStates = std::vector<int>(n_classes); - 101 638 : iota(yStates.begin(), yStates.end(), 0); - 102 638 : states[pClassName] = yStates; - 103 1914 : pDataset.index_put_({ n, "..." }, y); - 104 1276 : return states; - 105 10692 : } - 106 462 : torch::Tensor Proposal::prepareX(torch::Tensor& X) + 88 2916 : for (auto i = 0; i < pFeatures.size(); ++i) { + 89 2568 : auto* discretizer = new mdlp::CPPFImdlp(); + 90 5136 : auto Xt_ptr = Xf.index({ i }).data_ptr<float>(); + 91 2568 : auto Xt = std::vector<float>(Xt_ptr, Xt_ptr + Xf.size(1)); + 92 2568 : discretizer->fit(Xt, yv); + 93 10272 : pDataset.index_put_({ i, "..." }, torch::tensor(discretizer->transform(Xt))); + 94 2568 : auto xStates = std::vector<int>(discretizer->getCutPoints().size() + 1); + 95 2568 : iota(xStates.begin(), xStates.end(), 0); + 96 2568 : states[pFeatures[i]] = xStates; + 97 2568 : discretizers[pFeatures[i]] = discretizer; + 98 2568 : } + 99 348 : int n_classes = torch::max(y).item<int>() + 1; + 100 348 : auto yStates = std::vector<int>(n_classes); + 101 348 : iota(yStates.begin(), yStates.end(), 0); + 102 348 : states[pClassName] = yStates; + 103 1044 : pDataset.index_put_({ n, "..." }, y); + 104 696 : return states; + 105 5832 : } + 106 252 : torch::Tensor Proposal::prepareX(torch::Tensor& X) 107 : { - 108 462 : auto Xtd = torch::zeros_like(X, torch::kInt32); - 109 3784 : for (int i = 0; i < X.size(0); ++i) { - 110 3322 : auto Xt = std::vector<float>(X[i].data_ptr<float>(), X[i].data_ptr<float>() + X.size(1)); - 111 3322 : auto Xd = discretizers[pFeatures[i]]->transform(Xt); - 112 9966 : Xtd.index_put_({ i }, torch::tensor(Xd, torch::kInt32)); - 113 3322 : } - 114 462 : return Xtd; - 115 3322 : } + 108 252 : auto Xtd = torch::zeros_like(X, torch::kInt32); + 109 2064 : for (int i = 0; i < X.size(0); ++i) { + 110 1812 : auto Xt = std::vector<float>(X[i].data_ptr<float>(), X[i].data_ptr<float>() + X.size(1)); + 111 1812 : auto Xd = discretizers[pFeatures[i]]->transform(Xt); + 112 5436 : Xtd.index_put_({ i }, torch::tensor(Xd, torch::kInt32)); + 113 1812 : } + 114 252 : return Xtd; + 115 1812 : } 116 : } diff --git a/html/bayesnet/classifiers/SPODE.cc.func-c.html b/html/bayesnet/classifiers/SPODE.cc.func-c.html index 34837ca..4cbce73 100644 --- a/html/bayesnet/classifiers/SPODE.cc.func-c.html +++ b/html/bayesnet/classifiers/SPODE.cc.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,23 +63,23 @@ - _ZNK8bayesnet5SPODE5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::SPODE::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 187 + 102 - _ZN8bayesnet5SPODE10buildModelERKN2at6TensorE + bayesnet::SPODE::buildModel(at::Tensor const&) - 2665 + 1524 - _ZN8bayesnet5SPODEC2Ei + bayesnet::SPODE::SPODE(int) - 2962 + 1686 diff --git a/html/bayesnet/classifiers/SPODE.cc.func.html b/html/bayesnet/classifiers/SPODE.cc.func.html index 422717d..c5a40dd 100644 --- a/html/bayesnet/classifiers/SPODE.cc.func.html +++ b/html/bayesnet/classifiers/SPODE.cc.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,23 +63,23 @@ - _ZN8bayesnet5SPODE10buildModelERKN2at6TensorE + bayesnet::SPODE::SPODE(int) - 2665 + 1686 - _ZN8bayesnet5SPODEC2Ei + bayesnet::SPODE::buildModel(at::Tensor const&) - 2962 + 1524 - _ZNK8bayesnet5SPODE5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::SPODE::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 187 + 102 diff --git a/html/bayesnet/classifiers/SPODE.cc.gcov.html b/html/bayesnet/classifiers/SPODE.cc.gcov.html index 8032885..9d66059 100644 --- a/html/bayesnet/classifiers/SPODE.cc.gcov.html +++ b/html/bayesnet/classifiers/SPODE.cc.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -70,24 +70,24 @@ 8 : 9 : namespace bayesnet { 10 : - 11 2962 : SPODE::SPODE(int root) : Classifier(Network()), root(root) {} + 11 1686 : SPODE::SPODE(int root) : Classifier(Network()), root(root) {} 12 : - 13 2665 : void SPODE::buildModel(const torch::Tensor& weights) + 13 1524 : void SPODE::buildModel(const torch::Tensor& weights) 14 : { 15 : // 0. Add all nodes to the model - 16 2665 : addNodes(); + 16 1524 : addNodes(); 17 : // 1. Add edges from the class node to all other nodes 18 : // 2. Add edges from the root node to all other nodes - 19 113941 : for (int i = 0; i < static_cast<int>(features.size()); ++i) { - 20 111276 : model.addEdge(className, features[i]); - 21 111276 : if (i != root) { - 22 108611 : model.addEdge(features[root], features[i]); + 19 38520 : for (int i = 0; i < static_cast<int>(features.size()); ++i) { + 20 36996 : model.addEdge(className, features[i]); + 21 36996 : if (i != root) { + 22 35472 : model.addEdge(features[root], features[i]); 23 : } 24 : } - 25 2665 : } - 26 187 : std::vector<std::string> SPODE::graph(const std::string& name) const + 25 1524 : } + 26 102 : std::vector<std::string> SPODE::graph(const std::string& name) const 27 : { - 28 187 : return model.graph(name); + 28 102 : return model.graph(name); 29 : } 30 : 31 : } diff --git a/html/bayesnet/classifiers/SPODE.h.func-c.html b/html/bayesnet/classifiers/SPODE.h.func-c.html index 2d16a0b..4b12504 100644 --- a/html/bayesnet/classifiers/SPODE.h.func-c.html +++ b/html/bayesnet/classifiers/SPODE.h.func-c.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet5SPODED0Ev + bayesnet::SPODE::~SPODE() - 337 - - - - - _ZN8bayesnet5SPODED0Ev - - 148 - - - - - _ZN8bayesnet5SPODED2Ev - - 189 + 2754 diff --git a/html/bayesnet/classifiers/SPODE.h.func.html b/html/bayesnet/classifiers/SPODE.h.func.html index 74f9e37..938cc3f 100644 --- a/html/bayesnet/classifiers/SPODE.h.func.html +++ b/html/bayesnet/classifiers/SPODE.h.func.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet5SPODED0Ev + bayesnet::SPODE::~SPODE() - 337 - - - - - _ZN8bayesnet5SPODED0Ev - - 148 - - - - - _ZN8bayesnet5SPODED2Ev - - 189 + 2754 diff --git a/html/bayesnet/classifiers/SPODE.h.gcov.html b/html/bayesnet/classifiers/SPODE.h.gcov.html index 699f8ce..8197394 100644 --- a/html/bayesnet/classifiers/SPODE.h.gcov.html +++ b/html/bayesnet/classifiers/SPODE.h.gcov.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -78,7 +78,7 @@ 16 : void buildModel(const torch::Tensor& weights) override; 17 : public: 18 : explicit SPODE(int root); - 19 337 : virtual ~SPODE() = default; + 19 2754 : virtual ~SPODE() = default; 20 : std::vector<std::string> graph(const std::string& name = "SPODE") const override; 21 : }; 22 : } diff --git a/html/bayesnet/classifiers/SPODELd.cc.func-c.html b/html/bayesnet/classifiers/SPODELd.cc.func-c.html index 7d144a2..a8d929a 100644 --- a/html/bayesnet/classifiers/SPODELd.cc.func-c.html +++ b/html/bayesnet/classifiers/SPODELd.cc.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,44 +63,44 @@ - _ZN8bayesnet7SPODELd3fitERN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE + bayesnet::SPODELd::fit(at::Tensor&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&) - 22 + 12 - _ZNK8bayesnet7SPODELd5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::SPODELd::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 99 + 54 - _ZN8bayesnet7SPODELd7predictERN2at6TensorE + bayesnet::SPODELd::predict(at::Tensor&) - 374 + 204 - _ZN8bayesnet7SPODELd3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE + bayesnet::SPODELd::fit(at::Tensor&, at::Tensor&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&) - 462 + 252 - _ZN8bayesnet7SPODELd9commonFitERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKS7_RSt3mapIS7_S1_IiSaIiEESt4lessIS7_ESaISt4pairISC_SG_EEE + bayesnet::SPODELd::commonFit(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&) - 473 + 258 - _ZN8bayesnet7SPODELdC2Ei + bayesnet::SPODELd::SPODELd(int) - 605 + 330 diff --git a/html/bayesnet/classifiers/SPODELd.cc.func.html b/html/bayesnet/classifiers/SPODELd.cc.func.html index c11e080..f9c1bbe 100644 --- a/html/bayesnet/classifiers/SPODELd.cc.func.html +++ b/html/bayesnet/classifiers/SPODELd.cc.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,44 +63,44 @@ - _ZN8bayesnet7SPODELd3fitERN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE + bayesnet::SPODELd::SPODELd(int) - 22 + 330 - _ZN8bayesnet7SPODELd3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE + bayesnet::SPODELd::commonFit(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&) - 462 + 258 - _ZN8bayesnet7SPODELd7predictERN2at6TensorE + bayesnet::SPODELd::fit(at::Tensor&, at::Tensor&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&) - 374 + 252 - _ZN8bayesnet7SPODELd9commonFitERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKS7_RSt3mapIS7_S1_IiSaIiEESt4lessIS7_ESaISt4pairISC_SG_EEE + bayesnet::SPODELd::fit(at::Tensor&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&) - 473 + 12 - _ZN8bayesnet7SPODELdC2Ei + bayesnet::SPODELd::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 605 + 54 - _ZNK8bayesnet7SPODELd5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::SPODELd::predict(at::Tensor&) - 99 + 204 diff --git a/html/bayesnet/classifiers/SPODELd.cc.gcov.html b/html/bayesnet/classifiers/SPODELd.cc.gcov.html index 15dab9c..3e6880a 100644 --- a/html/bayesnet/classifiers/SPODELd.cc.gcov.html +++ b/html/bayesnet/classifiers/SPODELd.cc.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -69,45 +69,45 @@ 7 : #include "SPODELd.h" 8 : 9 : namespace bayesnet { - 10 605 : SPODELd::SPODELd(int root) : SPODE(root), Proposal(dataset, features, className) {} - 11 462 : SPODELd& SPODELd::fit(torch::Tensor& X_, torch::Tensor& y_, const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_) + 10 330 : SPODELd::SPODELd(int root) : SPODE(root), Proposal(dataset, features, className) {} + 11 252 : SPODELd& SPODELd::fit(torch::Tensor& X_, torch::Tensor& y_, const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_) 12 : { - 13 462 : checkInput(X_, y_); - 14 462 : Xf = X_; - 15 462 : y = y_; - 16 462 : return commonFit(features_, className_, states_); + 13 252 : checkInput(X_, y_); + 14 252 : Xf = X_; + 15 252 : y = y_; + 16 252 : return commonFit(features_, className_, states_); 17 : } 18 : - 19 22 : SPODELd& SPODELd::fit(torch::Tensor& dataset, const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_) + 19 12 : SPODELd& SPODELd::fit(torch::Tensor& dataset, const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_) 20 : { - 21 22 : if (!torch::is_floating_point(dataset)) { - 22 11 : throw std::runtime_error("Dataset must be a floating point tensor"); + 21 12 : if (!torch::is_floating_point(dataset)) { + 22 6 : throw std::runtime_error("Dataset must be a floating point tensor"); 23 : } - 24 44 : Xf = dataset.index({ torch::indexing::Slice(0, dataset.size(0) - 1), "..." }).clone(); - 25 33 : y = dataset.index({ -1, "..." }).clone().to(torch::kInt32); - 26 11 : return commonFit(features_, className_, states_); - 27 33 : } + 24 24 : Xf = dataset.index({ torch::indexing::Slice(0, dataset.size(0) - 1), "..." }).clone(); + 25 18 : y = dataset.index({ -1, "..." }).clone().to(torch::kInt32); + 26 6 : return commonFit(features_, className_, states_); + 27 18 : } 28 : - 29 473 : SPODELd& SPODELd::commonFit(const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_) + 29 258 : SPODELd& SPODELd::commonFit(const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_) 30 : { - 31 473 : features = features_; - 32 473 : className = className_; + 31 258 : features = features_; + 32 258 : className = className_; 33 : // Fills std::vectors Xv & yv with the data from tensors X_ (discretized) & y - 34 473 : states = fit_local_discretization(y); + 34 258 : states = fit_local_discretization(y); 35 : // We have discretized the input data 36 : // 1st we need to fit the model to build the normal SPODE structure, SPODE::fit initializes the base Bayesian network - 37 473 : SPODE::fit(dataset, features, className, states); - 38 473 : states = localDiscretizationProposal(states, model); - 39 473 : return *this; + 37 258 : SPODE::fit(dataset, features, className, states); + 38 258 : states = localDiscretizationProposal(states, model); + 39 258 : return *this; 40 : } - 41 374 : torch::Tensor SPODELd::predict(torch::Tensor& X) + 41 204 : torch::Tensor SPODELd::predict(torch::Tensor& X) 42 : { - 43 374 : auto Xt = prepareX(X); - 44 748 : return SPODE::predict(Xt); - 45 374 : } - 46 99 : std::vector<std::string> SPODELd::graph(const std::string& name) const + 43 204 : auto Xt = prepareX(X); + 44 408 : return SPODE::predict(Xt); + 45 204 : } + 46 54 : std::vector<std::string> SPODELd::graph(const std::string& name) const 47 : { - 48 99 : return SPODE::graph(name); + 48 54 : return SPODE::graph(name); 49 : } 50 : } diff --git a/html/bayesnet/classifiers/SPODELd.h.func-c.html b/html/bayesnet/classifiers/SPODELd.h.func-c.html index 2261f26..c53596c 100644 --- a/html/bayesnet/classifiers/SPODELd.h.func-c.html +++ b/html/bayesnet/classifiers/SPODELd.h.func-c.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet7SPODELdD0Ev + bayesnet::SPODELd::~SPODELd() - 80 - - - - - _ZN8bayesnet7SPODELdD0Ev - - 39 - - - - - _ZN8bayesnet7SPODELdD2Ev - - 41 + 480 diff --git a/html/bayesnet/classifiers/SPODELd.h.func.html b/html/bayesnet/classifiers/SPODELd.h.func.html index 951a8d4..56e1380 100644 --- a/html/bayesnet/classifiers/SPODELd.h.func.html +++ b/html/bayesnet/classifiers/SPODELd.h.func.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet7SPODELdD0Ev + bayesnet::SPODELd::~SPODELd() - 80 - - - - - _ZN8bayesnet7SPODELdD0Ev - - 39 - - - - - _ZN8bayesnet7SPODELdD2Ev - - 41 + 480 diff --git a/html/bayesnet/classifiers/SPODELd.h.gcov.html b/html/bayesnet/classifiers/SPODELd.h.gcov.html index 37210c0..374d8f2 100644 --- a/html/bayesnet/classifiers/SPODELd.h.gcov.html +++ b/html/bayesnet/classifiers/SPODELd.h.gcov.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -75,7 +75,7 @@ 13 : class SPODELd : public SPODE, public Proposal { 14 : public: 15 : explicit SPODELd(int root); - 16 80 : virtual ~SPODELd() = default; + 16 480 : virtual ~SPODELd() = default; 17 : SPODELd& fit(torch::Tensor& X, torch::Tensor& y, const std::vector<std::string>& features, const std::string& className, map<std::string, std::vector<int>>& states) override; 18 : SPODELd& fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, map<std::string, std::vector<int>>& states) override; 19 : SPODELd& commonFit(const std::vector<std::string>& features, const std::string& className, map<std::string, std::vector<int>>& states); diff --git a/html/bayesnet/classifiers/TAN.cc.func-c.html b/html/bayesnet/classifiers/TAN.cc.func-c.html index 6850650..d5f40ff 100644 --- a/html/bayesnet/classifiers/TAN.cc.func-c.html +++ b/html/bayesnet/classifiers/TAN.cc.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,30 +63,30 @@ - _ZNK8bayesnet3TAN5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::TAN::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 22 + 12 - _ZN8bayesnet3TAN10buildModelERKN2at6TensorE + bayesnet::TAN::buildModel(at::Tensor const&) - 143 + 78 - _ZN8bayesnet3TANC2Ev + bayesnet::TAN::TAN() - 517 + 282 - _ZZN8bayesnet3TAN10buildModelERKN2at6TensorEENKUlRKT_RKT0_E_clISt4pairIifESE_EEDaS7_SA_ + auto bayesnet::TAN::buildModel(at::Tensor const&)::{lambda(auto:1 const&, auto:2 const&)#1}::operator()<std::pair<int, float>, std::pair<int, float> >(std::pair<int, float> const&, std::pair<int, float> const&) const - 1782 + 972 diff --git a/html/bayesnet/classifiers/TAN.cc.func.html b/html/bayesnet/classifiers/TAN.cc.func.html index 52d9fc9..6be64fd 100644 --- a/html/bayesnet/classifiers/TAN.cc.func.html +++ b/html/bayesnet/classifiers/TAN.cc.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,30 +63,30 @@ - _ZN8bayesnet3TAN10buildModelERKN2at6TensorE + auto bayesnet::TAN::buildModel(at::Tensor const&)::{lambda(auto:1 const&, auto:2 const&)#1}::operator()<std::pair<int, float>, std::pair<int, float> >(std::pair<int, float> const&, std::pair<int, float> const&) const - 143 + 972 - _ZN8bayesnet3TANC2Ev + bayesnet::TAN::TAN() - 517 + 282 - _ZNK8bayesnet3TAN5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::TAN::buildModel(at::Tensor const&) - 22 + 78 - _ZZN8bayesnet3TAN10buildModelERKN2at6TensorEENKUlRKT_RKT0_E_clISt4pairIifESE_EEDaS7_SA_ + bayesnet::TAN::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 1782 + 12 diff --git a/html/bayesnet/classifiers/TAN.cc.gcov.html b/html/bayesnet/classifiers/TAN.cc.gcov.html index 41b147a..db66a1f 100644 --- a/html/bayesnet/classifiers/TAN.cc.gcov.html +++ b/html/bayesnet/classifiers/TAN.cc.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -69,40 +69,40 @@ 7 : #include "TAN.h" 8 : 9 : namespace bayesnet { - 10 517 : TAN::TAN() : Classifier(Network()) {} + 10 282 : TAN::TAN() : Classifier(Network()) {} 11 : - 12 143 : void TAN::buildModel(const torch::Tensor& weights) + 12 78 : void TAN::buildModel(const torch::Tensor& weights) 13 : { 14 : // 0. Add all nodes to the model - 15 143 : addNodes(); + 15 78 : addNodes(); 16 : // 1. Compute mutual information between each feature and the class and set the root node 17 : // as the highest mutual information with the class - 18 143 : auto mi = std::vector <std::pair<int, float >>(); - 19 429 : torch::Tensor class_dataset = dataset.index({ -1, "..." }); - 20 979 : for (int i = 0; i < static_cast<int>(features.size()); ++i) { - 21 2508 : torch::Tensor feature_dataset = dataset.index({ i, "..." }); - 22 836 : auto mi_value = metrics.mutualInformation(class_dataset, feature_dataset, weights); - 23 836 : mi.push_back({ i, mi_value }); - 24 836 : } - 25 1925 : sort(mi.begin(), mi.end(), [](const auto& left, const auto& right) {return left.second < right.second;}); - 26 143 : auto root = mi[mi.size() - 1].first; + 18 78 : auto mi = std::vector <std::pair<int, float >>(); + 19 234 : torch::Tensor class_dataset = dataset.index({ -1, "..." }); + 20 534 : for (int i = 0; i < static_cast<int>(features.size()); ++i) { + 21 1368 : torch::Tensor feature_dataset = dataset.index({ i, "..." }); + 22 456 : auto mi_value = metrics.mutualInformation(class_dataset, feature_dataset, weights); + 23 456 : mi.push_back({ i, mi_value }); + 24 456 : } + 25 1050 : sort(mi.begin(), mi.end(), [](const auto& left, const auto& right) {return left.second < right.second;}); + 26 78 : auto root = mi[mi.size() - 1].first; 27 : // 2. Compute mutual information between each feature and the class - 28 143 : auto weights_matrix = metrics.conditionalEdge(weights); + 28 78 : auto weights_matrix = metrics.conditionalEdge(weights); 29 : // 3. Compute the maximum spanning tree - 30 143 : auto mst = metrics.maximumSpanningTree(features, weights_matrix, root); + 30 78 : auto mst = metrics.maximumSpanningTree(features, weights_matrix, root); 31 : // 4. Add edges from the maximum spanning tree to the model - 32 836 : for (auto i = 0; i < mst.size(); ++i) { - 33 693 : auto [from, to] = mst[i]; - 34 693 : model.addEdge(features[from], features[to]); + 32 456 : for (auto i = 0; i < mst.size(); ++i) { + 33 378 : auto [from, to] = mst[i]; + 34 378 : model.addEdge(features[from], features[to]); 35 : } 36 : // 5. Add edges from the class to all features - 37 979 : for (auto feature : features) { - 38 836 : model.addEdge(className, feature); - 39 836 : } - 40 1122 : } - 41 22 : std::vector<std::string> TAN::graph(const std::string& title) const + 37 534 : for (auto feature : features) { + 38 456 : model.addEdge(className, feature); + 39 456 : } + 40 612 : } + 41 12 : std::vector<std::string> TAN::graph(const std::string& title) const 42 : { - 43 22 : return model.graph(title); + 43 12 : return model.graph(title); 44 : } 45 : } diff --git a/html/bayesnet/classifiers/TAN.h.func-c.html b/html/bayesnet/classifiers/TAN.h.func-c.html index 00b7f9c..ce4e4d3 100644 --- a/html/bayesnet/classifiers/TAN.h.func-c.html +++ b/html/bayesnet/classifiers/TAN.h.func-c.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet3TAND0Ev + bayesnet::TAN::~TAN() - 19 - - - - - _ZN8bayesnet3TAND0Ev - - 3 - - - - - _ZN8bayesnet3TAND2Ev - - 16 + 114 diff --git a/html/bayesnet/classifiers/TAN.h.func.html b/html/bayesnet/classifiers/TAN.h.func.html index 2a1ee6c..9fe8d8e 100644 --- a/html/bayesnet/classifiers/TAN.h.func.html +++ b/html/bayesnet/classifiers/TAN.h.func.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet3TAND0Ev + bayesnet::TAN::~TAN() - 19 - - - - - _ZN8bayesnet3TAND0Ev - - 3 - - - - - _ZN8bayesnet3TAND2Ev - - 16 + 114 diff --git a/html/bayesnet/classifiers/TAN.h.gcov.html b/html/bayesnet/classifiers/TAN.h.gcov.html index 561772c..44c18f2 100644 --- a/html/bayesnet/classifiers/TAN.h.gcov.html +++ b/html/bayesnet/classifiers/TAN.h.gcov.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -76,7 +76,7 @@ 14 : void buildModel(const torch::Tensor& weights) override; 15 : public: 16 : TAN(); - 17 19 : virtual ~TAN() = default; + 17 114 : virtual ~TAN() = default; 18 : std::vector<std::string> graph(const std::string& name = "TAN") const override; 19 : }; 20 : } diff --git a/html/bayesnet/classifiers/TANLd.cc.func-c.html b/html/bayesnet/classifiers/TANLd.cc.func-c.html index fba6e70..7b582d2 100644 --- a/html/bayesnet/classifiers/TANLd.cc.func-c.html +++ b/html/bayesnet/classifiers/TANLd.cc.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,30 +63,30 @@ - _ZNK8bayesnet5TANLd5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::TANLd::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 11 + 6 - _ZN8bayesnet5TANLd7predictERN2at6TensorE + bayesnet::TANLd::predict(at::Tensor&) - 44 + 24 - _ZN8bayesnet5TANLd3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE + bayesnet::TANLd::fit(at::Tensor&, at::Tensor&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&) - 55 + 30 - _ZN8bayesnet5TANLdC2Ev + bayesnet::TANLd::TANLd() - 187 + 102 diff --git a/html/bayesnet/classifiers/TANLd.cc.func.html b/html/bayesnet/classifiers/TANLd.cc.func.html index 3c4dd2a..8802055 100644 --- a/html/bayesnet/classifiers/TANLd.cc.func.html +++ b/html/bayesnet/classifiers/TANLd.cc.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,30 +63,30 @@ - _ZN8bayesnet5TANLd3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE + bayesnet::TANLd::TANLd() - 55 + 102 - _ZN8bayesnet5TANLd7predictERN2at6TensorE + bayesnet::TANLd::fit(at::Tensor&, at::Tensor&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&) - 44 + 30 - _ZN8bayesnet5TANLdC2Ev + bayesnet::TANLd::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 187 + 6 - _ZNK8bayesnet5TANLd5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::TANLd::predict(at::Tensor&) - 11 + 24 diff --git a/html/bayesnet/classifiers/TANLd.cc.gcov.html b/html/bayesnet/classifiers/TANLd.cc.gcov.html index dd84f5d..38e17cd 100644 --- a/html/bayesnet/classifiers/TANLd.cc.gcov.html +++ b/html/bayesnet/classifiers/TANLd.cc.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -69,31 +69,31 @@ 7 : #include "TANLd.h" 8 : 9 : namespace bayesnet { - 10 187 : TANLd::TANLd() : TAN(), Proposal(dataset, features, className) {} - 11 55 : TANLd& TANLd::fit(torch::Tensor& X_, torch::Tensor& y_, const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_) + 10 102 : TANLd::TANLd() : TAN(), Proposal(dataset, features, className) {} + 11 30 : TANLd& TANLd::fit(torch::Tensor& X_, torch::Tensor& y_, const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_) 12 : { - 13 55 : checkInput(X_, y_); - 14 55 : features = features_; - 15 55 : className = className_; - 16 55 : Xf = X_; - 17 55 : y = y_; + 13 30 : checkInput(X_, y_); + 14 30 : features = features_; + 15 30 : className = className_; + 16 30 : Xf = X_; + 17 30 : y = y_; 18 : // Fills std::vectors Xv & yv with the data from tensors X_ (discretized) & y - 19 55 : states = fit_local_discretization(y); + 19 30 : states = fit_local_discretization(y); 20 : // We have discretized the input data 21 : // 1st we need to fit the model to build the normal TAN structure, TAN::fit initializes the base Bayesian network - 22 55 : TAN::fit(dataset, features, className, states); - 23 55 : states = localDiscretizationProposal(states, model); - 24 55 : return *this; + 22 30 : TAN::fit(dataset, features, className, states); + 23 30 : states = localDiscretizationProposal(states, model); + 24 30 : return *this; 25 : 26 : } - 27 44 : torch::Tensor TANLd::predict(torch::Tensor& X) + 27 24 : torch::Tensor TANLd::predict(torch::Tensor& X) 28 : { - 29 44 : auto Xt = prepareX(X); - 30 88 : return TAN::predict(Xt); - 31 44 : } - 32 11 : std::vector<std::string> TANLd::graph(const std::string& name) const + 29 24 : auto Xt = prepareX(X); + 30 48 : return TAN::predict(Xt); + 31 24 : } + 32 6 : std::vector<std::string> TANLd::graph(const std::string& name) const 33 : { - 34 11 : return TAN::graph(name); + 34 6 : return TAN::graph(name); 35 : } 36 : } diff --git a/html/bayesnet/classifiers/TANLd.h.func-c.html b/html/bayesnet/classifiers/TANLd.h.func-c.html index 3465c24..758edec 100644 --- a/html/bayesnet/classifiers/TANLd.h.func-c.html +++ b/html/bayesnet/classifiers/TANLd.h.func-c.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet5TANLdD0Ev + bayesnet::TANLd::~TANLd() - 5 - - - - - _ZN8bayesnet5TANLdD0Ev - - 2 - - - - - _ZN8bayesnet5TANLdD2Ev - - 3 + 30 diff --git a/html/bayesnet/classifiers/TANLd.h.func.html b/html/bayesnet/classifiers/TANLd.h.func.html index 268a55d..9b25a6b 100644 --- a/html/bayesnet/classifiers/TANLd.h.func.html +++ b/html/bayesnet/classifiers/TANLd.h.func.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet5TANLdD0Ev + bayesnet::TANLd::~TANLd() - 5 - - - - - _ZN8bayesnet5TANLdD0Ev - - 2 - - - - - _ZN8bayesnet5TANLdD2Ev - - 3 + 30 diff --git a/html/bayesnet/classifiers/TANLd.h.gcov.html b/html/bayesnet/classifiers/TANLd.h.gcov.html index d466127..3df6d33 100644 --- a/html/bayesnet/classifiers/TANLd.h.gcov.html +++ b/html/bayesnet/classifiers/TANLd.h.gcov.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -76,7 +76,7 @@ 14 : private: 15 : public: 16 : TANLd(); - 17 5 : virtual ~TANLd() = default; + 17 30 : virtual ~TANLd() = default; 18 : TANLd& fit(torch::Tensor& X, torch::Tensor& y, const std::vector<std::string>& features, const std::string& className, map<std::string, std::vector<int>>& states) override; 19 : std::vector<std::string> graph(const std::string& name = "TAN") const override; 20 : torch::Tensor predict(torch::Tensor& X) override; diff --git a/html/bayesnet/classifiers/index-sort-f.html b/html/bayesnet/classifiers/index-sort-f.html index a4fd90e..7e89943 100644 --- a/html/bayesnet/classifiers/index-sort-f.html +++ b/html/bayesnet/classifiers/index-sort-f.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 97.4 % - 76 - 74 + 100.0 % + 68 + 68 @@ -79,30 +79,6 @@ Total Hit - - Classifier.h - -
100.0%
- - 100.0 % - 4 - 4 - 80.0 % - 5 - 4 - - - Proposal.cc - -
97.7%97.7%
- - 97.7 % - 86 - 84 - 88.9 % - 9 - 8 - KDB.h @@ -112,8 +88,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 KDBLd.h @@ -124,8 +100,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 SPODE.h @@ -136,8 +112,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 SPODELd.h @@ -148,8 +124,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 TAN.h @@ -160,8 +136,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 TANLd.h @@ -172,8 +148,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 SPODE.cc @@ -187,6 +163,18 @@ 3 3 + + Classifier.h + +
100.0%
+ + 100.0 % + 4 + 4 + 100.0 % + 4 + 4 + KDBLd.cc @@ -247,6 +235,18 @@ 6 6 + + Proposal.cc + +
97.7%97.7%
+ + 97.7 % + 86 + 84 + 100.0 % + 8 + 8 + Classifier.cc diff --git a/html/bayesnet/classifiers/index-sort-l.html b/html/bayesnet/classifiers/index-sort-l.html index e788707..8bd35a4 100644 --- a/html/bayesnet/classifiers/index-sort-l.html +++ b/html/bayesnet/classifiers/index-sort-l.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 97.4 % - 76 - 74 + 100.0 % + 68 + 68 @@ -99,8 +99,8 @@ 97.7 % 86 84 - 88.9 % - 9 + 100.0 % + 8 8 @@ -112,8 +112,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 KDBLd.h @@ -124,8 +124,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 SPODE.h @@ -136,8 +136,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 SPODELd.h @@ -148,8 +148,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 TAN.h @@ -160,8 +160,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 TANLd.h @@ -172,8 +172,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 Classifier.h @@ -183,8 +183,8 @@ 100.0 % 4 4 - 80.0 % - 5 + 100.0 % + 4 4 diff --git a/html/bayesnet/classifiers/index.html b/html/bayesnet/classifiers/index.html index ae92c6b..df7e8bd 100644 --- a/html/bayesnet/classifiers/index.html +++ b/html/bayesnet/classifiers/index.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 97.4 % - 76 - 74 + 100.0 % + 68 + 68 @@ -99,8 +99,8 @@ 100.0 % 4 4 - 80.0 % - 5 + 100.0 % + 4 4 @@ -124,8 +124,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 KDBLd.cc @@ -148,8 +148,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 Proposal.cc @@ -159,8 +159,8 @@ 97.7 % 86 84 - 88.9 % - 9 + 100.0 % + 8 8 @@ -184,8 +184,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 SPODELd.cc @@ -208,8 +208,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 TAN.cc @@ -232,8 +232,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 TANLd.cc @@ -256,8 +256,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 diff --git a/html/bayesnet/ensembles/AODE.cc.func-c.html b/html/bayesnet/ensembles/AODE.cc.func-c.html index 7b3e5d9..331299c 100644 --- a/html/bayesnet/ensembles/AODE.cc.func-c.html +++ b/html/bayesnet/ensembles/AODE.cc.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,30 +63,30 @@ - _ZN8bayesnet4AODE18setHyperparametersERKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEE + bayesnet::AODE::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 11 + 6 - _ZNK8bayesnet4AODE5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::AODE::setHyperparameters(nlohmann::json_abi_v3_11_3::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::json_abi_v3_11_3::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char> >, void> const&) - 11 + 6 - _ZN8bayesnet4AODE10buildModelERKN2at6TensorE + bayesnet::AODE::buildModel(at::Tensor const&) - 66 + 36 - _ZN8bayesnet4AODEC2Eb + bayesnet::AODE::AODE(bool) - 209 + 114 diff --git a/html/bayesnet/ensembles/AODE.cc.func.html b/html/bayesnet/ensembles/AODE.cc.func.html index 219adf1..d8abd06 100644 --- a/html/bayesnet/ensembles/AODE.cc.func.html +++ b/html/bayesnet/ensembles/AODE.cc.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,30 +63,30 @@ - _ZN8bayesnet4AODE10buildModelERKN2at6TensorE + bayesnet::AODE::AODE(bool) - 66 + 114 - _ZN8bayesnet4AODE18setHyperparametersERKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEE + bayesnet::AODE::buildModel(at::Tensor const&) - 11 + 36 - _ZN8bayesnet4AODEC2Eb + bayesnet::AODE::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 209 + 6 - _ZNK8bayesnet4AODE5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::AODE::setHyperparameters(nlohmann::json_abi_v3_11_3::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::json_abi_v3_11_3::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char> >, void> const&) - 11 + 6 diff --git a/html/bayesnet/ensembles/AODE.cc.gcov.html b/html/bayesnet/ensembles/AODE.cc.gcov.html index cac3b51..4c88a0b 100644 --- a/html/bayesnet/ensembles/AODE.cc.gcov.html +++ b/html/bayesnet/ensembles/AODE.cc.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -69,33 +69,33 @@ 7 : #include "AODE.h" 8 : 9 : namespace bayesnet { - 10 209 : AODE::AODE(bool predict_voting) : Ensemble(predict_voting) + 10 114 : AODE::AODE(bool predict_voting) : Ensemble(predict_voting) 11 : { - 12 418 : validHyperparameters = { "predict_voting" }; + 12 228 : validHyperparameters = { "predict_voting" }; 13 : - 14 627 : } - 15 11 : void AODE::setHyperparameters(const nlohmann::json& hyperparameters_) + 14 342 : } + 15 6 : void AODE::setHyperparameters(const nlohmann::json& hyperparameters_) 16 : { - 17 11 : auto hyperparameters = hyperparameters_; - 18 11 : if (hyperparameters.contains("predict_voting")) { - 19 11 : predict_voting = hyperparameters["predict_voting"]; - 20 11 : hyperparameters.erase("predict_voting"); + 17 6 : auto hyperparameters = hyperparameters_; + 18 6 : if (hyperparameters.contains("predict_voting")) { + 19 6 : predict_voting = hyperparameters["predict_voting"]; + 20 6 : hyperparameters.erase("predict_voting"); 21 : } - 22 11 : Classifier::setHyperparameters(hyperparameters); - 23 11 : } - 24 66 : void AODE::buildModel(const torch::Tensor& weights) + 22 6 : Classifier::setHyperparameters(hyperparameters); + 23 6 : } + 24 36 : void AODE::buildModel(const torch::Tensor& weights) 25 : { - 26 66 : models.clear(); - 27 66 : significanceModels.clear(); - 28 517 : for (int i = 0; i < features.size(); ++i) { - 29 451 : models.push_back(std::make_unique<SPODE>(i)); + 26 36 : models.clear(); + 27 36 : significanceModels.clear(); + 28 282 : for (int i = 0; i < features.size(); ++i) { + 29 246 : models.push_back(std::make_unique<SPODE>(i)); 30 : } - 31 66 : n_models = models.size(); - 32 66 : significanceModels = std::vector<double>(n_models, 1.0); - 33 66 : } - 34 11 : std::vector<std::string> AODE::graph(const std::string& title) const + 31 36 : n_models = models.size(); + 32 36 : significanceModels = std::vector<double>(n_models, 1.0); + 33 36 : } + 34 6 : std::vector<std::string> AODE::graph(const std::string& title) const 35 : { - 36 11 : return Ensemble::graph(title); + 36 6 : return Ensemble::graph(title); 37 : } 38 : } diff --git a/html/bayesnet/ensembles/AODE.h.func-c.html b/html/bayesnet/ensembles/AODE.h.func-c.html index 771cd92..7c7ad97 100644 --- a/html/bayesnet/ensembles/AODE.h.func-c.html +++ b/html/bayesnet/ensembles/AODE.h.func-c.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet4AODED0Ev + bayesnet::AODE::~AODE() - 7 - - - - - _ZN8bayesnet4AODED0Ev - - 2 - - - - - _ZN8bayesnet4AODED2Ev - - 5 + 42 diff --git a/html/bayesnet/ensembles/AODE.h.func.html b/html/bayesnet/ensembles/AODE.h.func.html index 94b5da8..67f9a5d 100644 --- a/html/bayesnet/ensembles/AODE.h.func.html +++ b/html/bayesnet/ensembles/AODE.h.func.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet4AODED0Ev + bayesnet::AODE::~AODE() - 7 - - - - - _ZN8bayesnet4AODED0Ev - - 2 - - - - - _ZN8bayesnet4AODED2Ev - - 5 + 42 diff --git a/html/bayesnet/ensembles/AODE.h.gcov.html b/html/bayesnet/ensembles/AODE.h.gcov.html index a19daf2..85fdb70 100644 --- a/html/bayesnet/ensembles/AODE.h.gcov.html +++ b/html/bayesnet/ensembles/AODE.h.gcov.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -74,7 +74,7 @@ 12 : class AODE : public Ensemble { 13 : public: 14 : AODE(bool predict_voting = false); - 15 7 : virtual ~AODE() {}; + 15 42 : virtual ~AODE() {}; 16 : void setHyperparameters(const nlohmann::json& hyperparameters) override; 17 : std::vector<std::string> graph(const std::string& title = "AODE") const override; 18 : protected: diff --git a/html/bayesnet/ensembles/AODELd.cc.func-c.html b/html/bayesnet/ensembles/AODELd.cc.func-c.html index 611811d..7d662a5 100644 --- a/html/bayesnet/ensembles/AODELd.cc.func-c.html +++ b/html/bayesnet/ensembles/AODELd.cc.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,37 +63,37 @@ - _ZNK8bayesnet6AODELd5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::AODELd::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 11 + 6 - _ZN8bayesnet6AODELd10buildModelERKN2at6TensorE + bayesnet::AODELd::buildModel(at::Tensor const&) - 55 + 30 - _ZN8bayesnet6AODELd10trainModelERKN2at6TensorE + bayesnet::AODELd::fit(at::Tensor&, at::Tensor&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&) - 55 + 30 - _ZN8bayesnet6AODELd3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE + bayesnet::AODELd::trainModel(at::Tensor const&) - 55 + 30 - _ZN8bayesnet6AODELdC2Eb + bayesnet::AODELd::AODELd(bool) - 187 + 102 diff --git a/html/bayesnet/ensembles/AODELd.cc.func.html b/html/bayesnet/ensembles/AODELd.cc.func.html index 2a31c86..edc64f1 100644 --- a/html/bayesnet/ensembles/AODELd.cc.func.html +++ b/html/bayesnet/ensembles/AODELd.cc.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,37 +63,37 @@ - _ZN8bayesnet6AODELd10buildModelERKN2at6TensorE + bayesnet::AODELd::AODELd(bool) - 55 + 102 - _ZN8bayesnet6AODELd10trainModelERKN2at6TensorE + bayesnet::AODELd::buildModel(at::Tensor const&) - 55 + 30 - _ZN8bayesnet6AODELd3fitERN2at6TensorES3_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EERKSA_RSt3mapISA_S4_IiSaIiEESt4lessISA_ESaISt4pairISF_SJ_EEE + bayesnet::AODELd::fit(at::Tensor&, at::Tensor&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&) - 55 + 30 - _ZN8bayesnet6AODELdC2Eb + bayesnet::AODELd::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 187 + 6 - _ZNK8bayesnet6AODELd5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::AODELd::trainModel(at::Tensor const&) - 11 + 30 diff --git a/html/bayesnet/ensembles/AODELd.cc.gcov.html b/html/bayesnet/ensembles/AODELd.cc.gcov.html index 5d54c5f..086f2d9 100644 --- a/html/bayesnet/ensembles/AODELd.cc.gcov.html +++ b/html/bayesnet/ensembles/AODELd.cc.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -69,42 +69,42 @@ 7 : #include "AODELd.h" 8 : 9 : namespace bayesnet { - 10 187 : AODELd::AODELd(bool predict_voting) : Ensemble(predict_voting), Proposal(dataset, features, className) + 10 102 : AODELd::AODELd(bool predict_voting) : Ensemble(predict_voting), Proposal(dataset, features, className) 11 : { - 12 187 : } - 13 55 : AODELd& AODELd::fit(torch::Tensor& X_, torch::Tensor& y_, const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_) + 12 102 : } + 13 30 : AODELd& AODELd::fit(torch::Tensor& X_, torch::Tensor& y_, const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_) 14 : { - 15 55 : checkInput(X_, y_); - 16 55 : features = features_; - 17 55 : className = className_; - 18 55 : Xf = X_; - 19 55 : y = y_; + 15 30 : checkInput(X_, y_); + 16 30 : features = features_; + 17 30 : className = className_; + 18 30 : Xf = X_; + 19 30 : y = y_; 20 : // Fills std::vectors Xv & yv with the data from tensors X_ (discretized) & y - 21 55 : states = fit_local_discretization(y); + 21 30 : states = fit_local_discretization(y); 22 : // We have discretized the input data 23 : // 1st we need to fit the model to build the normal TAN structure, TAN::fit initializes the base Bayesian network - 24 55 : Ensemble::fit(dataset, features, className, states); - 25 55 : return *this; + 24 30 : Ensemble::fit(dataset, features, className, states); + 25 30 : return *this; 26 : 27 : } - 28 55 : void AODELd::buildModel(const torch::Tensor& weights) + 28 30 : void AODELd::buildModel(const torch::Tensor& weights) 29 : { - 30 55 : models.clear(); - 31 462 : for (int i = 0; i < features.size(); ++i) { - 32 407 : models.push_back(std::make_unique<SPODELd>(i)); + 30 30 : models.clear(); + 31 252 : for (int i = 0; i < features.size(); ++i) { + 32 222 : models.push_back(std::make_unique<SPODELd>(i)); 33 : } - 34 55 : n_models = models.size(); - 35 55 : significanceModels = std::vector<double>(n_models, 1.0); - 36 55 : } - 37 55 : void AODELd::trainModel(const torch::Tensor& weights) + 34 30 : n_models = models.size(); + 35 30 : significanceModels = std::vector<double>(n_models, 1.0); + 36 30 : } + 37 30 : void AODELd::trainModel(const torch::Tensor& weights) 38 : { - 39 462 : for (const auto& model : models) { - 40 407 : model->fit(Xf, y, features, className, states); + 39 252 : for (const auto& model : models) { + 40 222 : model->fit(Xf, y, features, className, states); 41 : } - 42 55 : } - 43 11 : std::vector<std::string> AODELd::graph(const std::string& name) const + 42 30 : } + 43 6 : std::vector<std::string> AODELd::graph(const std::string& name) const 44 : { - 45 11 : return Ensemble::graph(name); + 45 6 : return Ensemble::graph(name); 46 : } 47 : } diff --git a/html/bayesnet/ensembles/AODELd.h.func-c.html b/html/bayesnet/ensembles/AODELd.h.func-c.html index 9838de0..1a18cb1 100644 --- a/html/bayesnet/ensembles/AODELd.h.func-c.html +++ b/html/bayesnet/ensembles/AODELd.h.func-c.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet6AODELdD0Ev + bayesnet::AODELd::~AODELd() - 5 - - - - - _ZN8bayesnet6AODELdD0Ev - - 2 - - - - - _ZN8bayesnet6AODELdD2Ev - - 3 + 30 diff --git a/html/bayesnet/ensembles/AODELd.h.func.html b/html/bayesnet/ensembles/AODELd.h.func.html index e7ca1eb..0e16adf 100644 --- a/html/bayesnet/ensembles/AODELd.h.func.html +++ b/html/bayesnet/ensembles/AODELd.h.func.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet6AODELdD0Ev + bayesnet::AODELd::~AODELd() - 5 - - - - - _ZN8bayesnet6AODELdD0Ev - - 2 - - - - - _ZN8bayesnet6AODELdD2Ev - - 3 + 30 diff --git a/html/bayesnet/ensembles/AODELd.h.gcov.html b/html/bayesnet/ensembles/AODELd.h.gcov.html index 3dc2694..ac086cf 100644 --- a/html/bayesnet/ensembles/AODELd.h.gcov.html +++ b/html/bayesnet/ensembles/AODELd.h.gcov.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -76,7 +76,7 @@ 14 : class AODELd : public Ensemble, public Proposal { 15 : public: 16 : AODELd(bool predict_voting = true); - 17 5 : virtual ~AODELd() = default; + 17 30 : virtual ~AODELd() = default; 18 : AODELd& fit(torch::Tensor& X_, torch::Tensor& y_, const std::vector<std::string>& features_, const std::string& className_, map<std::string, std::vector<int>>& states_) override; 19 : std::vector<std::string> graph(const std::string& name = "AODELd") const override; 20 : protected: diff --git a/html/bayesnet/ensembles/BoostAODE.cc.func-c.html b/html/bayesnet/ensembles/BoostAODE.cc.func-c.html index 729c321..842a417 100644 --- a/html/bayesnet/ensembles/BoostAODE.cc.func-c.html +++ b/html/bayesnet/ensembles/BoostAODE.cc.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,65 +63,65 @@ - _ZNK8bayesnet9BoostAODE5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::BoostAODE::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 8 + 6 - _ZN8bayesnet9BoostAODE20update_weights_blockEiRN2at6TensorES3_ + bayesnet::BoostAODE::update_weights_block(int, at::Tensor&, at::Tensor&) - 40 + 42 - _ZN8bayesnet9BoostAODE16initializeModelsEv + bayesnet::BoostAODE::initializeModels() - 76 + 48 - _ZN8bayesnet9BoostAODE18setHyperparametersERKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEE + bayesnet::BoostAODE::setHyperparameters(nlohmann::json_abi_v3_11_3::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::json_abi_v3_11_3::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char> >, void> const&) - 187 + 132 - _ZN8bayesnet9BoostAODE10buildModelERKN2at6TensorE + bayesnet::BoostAODE::buildModel(at::Tensor const&) - 190 + 138 - _ZN8bayesnet9BoostAODE10trainModelERKN2at6TensorE + bayesnet::BoostAODE::trainModel(at::Tensor const&) - 190 + 138 - _ZN8bayesnet9BoostAODEC2Eb + bayesnet::BoostAODE::BoostAODE(bool) - 345 + 252 - _ZN8bayesnet14update_weightsERN2at6TensorES2_S2_ + bayesnet::update_weights(at::Tensor&, at::Tensor&, at::Tensor&) - 1025 + 816 - _ZZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEENKUlT_E_clIiEEDaS5_ + auto bayesnet::BoostAODE::trainModel(at::Tensor const&)::{lambda(auto:1)#1}::operator()<int>(int) const - 27637 + 14550 diff --git a/html/bayesnet/ensembles/BoostAODE.cc.func.html b/html/bayesnet/ensembles/BoostAODE.cc.func.html index 4b3cdae..dc86eba 100644 --- a/html/bayesnet/ensembles/BoostAODE.cc.func.html +++ b/html/bayesnet/ensembles/BoostAODE.cc.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,65 +63,65 @@ - _ZN8bayesnet14update_weightsERN2at6TensorES2_S2_ + auto bayesnet::BoostAODE::trainModel(at::Tensor const&)::{lambda(auto:1)#1}::operator()<int>(int) const - 1025 + 14550 - _ZN8bayesnet9BoostAODE10buildModelERKN2at6TensorE + bayesnet::BoostAODE::BoostAODE(bool) - 190 + 252 - _ZN8bayesnet9BoostAODE10trainModelERKN2at6TensorE + bayesnet::BoostAODE::buildModel(at::Tensor const&) - 190 + 138 - _ZN8bayesnet9BoostAODE16initializeModelsEv + bayesnet::BoostAODE::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 76 + 6 - _ZN8bayesnet9BoostAODE18setHyperparametersERKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEE + bayesnet::BoostAODE::initializeModels() - 187 + 48 - _ZN8bayesnet9BoostAODE20update_weights_blockEiRN2at6TensorES3_ + bayesnet::BoostAODE::setHyperparameters(nlohmann::json_abi_v3_11_3::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::json_abi_v3_11_3::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char> >, void> const&) - 40 + 132 - _ZN8bayesnet9BoostAODEC2Eb + bayesnet::BoostAODE::trainModel(at::Tensor const&) - 345 + 138 - _ZNK8bayesnet9BoostAODE5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::BoostAODE::update_weights_block(int, at::Tensor&, at::Tensor&) - 8 + 42 - _ZZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEENKUlT_E_clIiEEDaS5_ + bayesnet::update_weights(at::Tensor&, at::Tensor&, at::Tensor&) - 27637 + 816 diff --git a/html/bayesnet/ensembles/BoostAODE.cc.gcov.html b/html/bayesnet/ensembles/BoostAODE.cc.gcov.html index 92f4443..92f401e 100644 --- a/html/bayesnet/ensembles/BoostAODE.cc.gcov.html +++ b/html/bayesnet/ensembles/BoostAODE.cc.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -79,126 +79,126 @@ 17 : 18 : namespace bayesnet { 19 : - 20 345 : BoostAODE::BoostAODE(bool predict_voting) : Ensemble(predict_voting) + 20 252 : BoostAODE::BoostAODE(bool predict_voting) : Ensemble(predict_voting) 21 : { - 22 3795 : validHyperparameters = { + 22 2772 : validHyperparameters = { 23 : "maxModels", "bisection", "order", "convergence", "convergence_best", "threshold", 24 : "select_features", "maxTolerance", "predict_voting", "block_update" - 25 3795 : }; + 25 2772 : }; 26 : - 27 1035 : } - 28 190 : void BoostAODE::buildModel(const torch::Tensor& weights) + 27 756 : } + 28 138 : void BoostAODE::buildModel(const torch::Tensor& weights) 29 : { 30 : // Models shall be built in trainModel - 31 190 : models.clear(); - 32 190 : significanceModels.clear(); - 33 190 : n_models = 0; + 31 138 : models.clear(); + 32 138 : significanceModels.clear(); + 33 138 : n_models = 0; 34 : // Prepare the validation dataset - 35 570 : auto y_ = dataset.index({ -1, "..." }); - 36 190 : if (convergence) { + 35 414 : auto y_ = dataset.index({ -1, "..." }); + 36 138 : if (convergence) { 37 : // Prepare train & validation sets from train data - 38 155 : auto fold = folding::StratifiedKFold(5, y_, 271); - 39 155 : auto [train, test] = fold.getFold(0); - 40 155 : auto train_t = torch::tensor(train); - 41 155 : auto test_t = torch::tensor(test); + 38 114 : auto fold = folding::StratifiedKFold(5, y_, 271); + 39 114 : auto [train, test] = fold.getFold(0); + 40 114 : auto train_t = torch::tensor(train); + 41 114 : auto test_t = torch::tensor(test); 42 : // Get train and validation sets - 43 775 : X_train = dataset.index({ torch::indexing::Slice(0, dataset.size(0) - 1), train_t }); - 44 465 : y_train = dataset.index({ -1, train_t }); - 45 775 : X_test = dataset.index({ torch::indexing::Slice(0, dataset.size(0) - 1), test_t }); - 46 465 : y_test = dataset.index({ -1, test_t }); - 47 155 : dataset = X_train; - 48 155 : m = X_train.size(1); - 49 155 : auto n_classes = states.at(className).size(); + 43 570 : X_train = dataset.index({ torch::indexing::Slice(0, dataset.size(0) - 1), train_t }); + 44 342 : y_train = dataset.index({ -1, train_t }); + 45 570 : X_test = dataset.index({ torch::indexing::Slice(0, dataset.size(0) - 1), test_t }); + 46 342 : y_test = dataset.index({ -1, test_t }); + 47 114 : dataset = X_train; + 48 114 : m = X_train.size(1); + 49 114 : auto n_classes = states.at(className).size(); 50 : // Build dataset with train data - 51 155 : buildDataset(y_train); - 52 155 : metrics = Metrics(dataset, features, className, n_classes); - 53 155 : } else { + 51 114 : buildDataset(y_train); + 52 114 : metrics = Metrics(dataset, features, className, n_classes); + 53 114 : } else { 54 : // Use all data to train - 55 140 : X_train = dataset.index({ torch::indexing::Slice(0, dataset.size(0) - 1), "..." }); - 56 35 : y_train = y_; + 55 96 : X_train = dataset.index({ torch::indexing::Slice(0, dataset.size(0) - 1), "..." }); + 56 24 : y_train = y_; 57 : } - 58 1845 : } - 59 187 : void BoostAODE::setHyperparameters(const nlohmann::json& hyperparameters_) + 58 1350 : } + 59 132 : void BoostAODE::setHyperparameters(const nlohmann::json& hyperparameters_) 60 : { - 61 187 : auto hyperparameters = hyperparameters_; - 62 187 : if (hyperparameters.contains("order")) { - 63 250 : std::vector<std::string> algos = { Orders.ASC, Orders.DESC, Orders.RAND }; - 64 50 : order_algorithm = hyperparameters["order"]; - 65 50 : if (std::find(algos.begin(), algos.end(), order_algorithm) == algos.end()) { - 66 9 : throw std::invalid_argument("Invalid order algorithm, valid values [" + Orders.ASC + ", " + Orders.DESC + ", " + Orders.RAND + "]"); + 61 132 : auto hyperparameters = hyperparameters_; + 62 132 : if (hyperparameters.contains("order")) { + 63 150 : std::vector<std::string> algos = { Orders.ASC, Orders.DESC, Orders.RAND }; + 64 30 : order_algorithm = hyperparameters["order"]; + 65 30 : if (std::find(algos.begin(), algos.end(), order_algorithm) == algos.end()) { + 66 6 : throw std::invalid_argument("Invalid order algorithm, valid values [" + Orders.ASC + ", " + Orders.DESC + ", " + Orders.RAND + "]"); 67 : } - 68 41 : hyperparameters.erase("order"); - 69 50 : } - 70 178 : if (hyperparameters.contains("convergence")) { - 71 70 : convergence = hyperparameters["convergence"]; - 72 70 : hyperparameters.erase("convergence"); + 68 24 : hyperparameters.erase("order"); + 69 30 : } + 70 126 : if (hyperparameters.contains("convergence")) { + 71 54 : convergence = hyperparameters["convergence"]; + 72 54 : hyperparameters.erase("convergence"); 73 : } - 74 178 : if (hyperparameters.contains("convergence_best")) { + 74 126 : if (hyperparameters.contains("convergence_best")) { 75 18 : convergence_best = hyperparameters["convergence_best"]; 76 18 : hyperparameters.erase("convergence_best"); 77 : } - 78 178 : if (hyperparameters.contains("bisection")) { - 79 56 : bisection = hyperparameters["bisection"]; - 80 56 : hyperparameters.erase("bisection"); + 78 126 : if (hyperparameters.contains("bisection")) { + 79 48 : bisection = hyperparameters["bisection"]; + 80 48 : hyperparameters.erase("bisection"); 81 : } - 82 178 : if (hyperparameters.contains("threshold")) { - 83 56 : threshold = hyperparameters["threshold"]; - 84 56 : hyperparameters.erase("threshold"); + 82 126 : if (hyperparameters.contains("threshold")) { + 83 36 : threshold = hyperparameters["threshold"]; + 84 36 : hyperparameters.erase("threshold"); 85 : } - 86 178 : if (hyperparameters.contains("maxTolerance")) { - 87 83 : maxTolerance = hyperparameters["maxTolerance"]; - 88 83 : if (maxTolerance < 1 || maxTolerance > 4) - 89 27 : throw std::invalid_argument("Invalid maxTolerance value, must be greater in [1, 4]"); - 90 56 : hyperparameters.erase("maxTolerance"); + 86 126 : if (hyperparameters.contains("maxTolerance")) { + 87 66 : maxTolerance = hyperparameters["maxTolerance"]; + 88 66 : if (maxTolerance < 1 || maxTolerance > 4) + 89 18 : throw std::invalid_argument("Invalid maxTolerance value, must be greater in [1, 4]"); + 90 48 : hyperparameters.erase("maxTolerance"); 91 : } - 92 151 : if (hyperparameters.contains("predict_voting")) { - 93 9 : predict_voting = hyperparameters["predict_voting"]; - 94 9 : hyperparameters.erase("predict_voting"); + 92 108 : if (hyperparameters.contains("predict_voting")) { + 93 6 : predict_voting = hyperparameters["predict_voting"]; + 94 6 : hyperparameters.erase("predict_voting"); 95 : } - 96 151 : if (hyperparameters.contains("select_features")) { - 97 85 : auto selectedAlgorithm = hyperparameters["select_features"]; - 98 425 : std::vector<std::string> algos = { SelectFeatures.IWSS, SelectFeatures.CFS, SelectFeatures.FCBF }; - 99 85 : selectFeatures = true; - 100 85 : select_features_algorithm = selectedAlgorithm; - 101 85 : if (std::find(algos.begin(), algos.end(), selectedAlgorithm) == algos.end()) { - 102 9 : throw std::invalid_argument("Invalid selectFeatures value, valid values [" + SelectFeatures.IWSS + ", " + SelectFeatures.CFS + ", " + SelectFeatures.FCBF + "]"); + 96 108 : if (hyperparameters.contains("select_features")) { + 97 54 : auto selectedAlgorithm = hyperparameters["select_features"]; + 98 270 : std::vector<std::string> algos = { SelectFeatures.IWSS, SelectFeatures.CFS, SelectFeatures.FCBF }; + 99 54 : selectFeatures = true; + 100 54 : select_features_algorithm = selectedAlgorithm; + 101 54 : if (std::find(algos.begin(), algos.end(), selectedAlgorithm) == algos.end()) { + 102 6 : throw std::invalid_argument("Invalid selectFeatures value, valid values [" + SelectFeatures.IWSS + ", " + SelectFeatures.CFS + ", " + SelectFeatures.FCBF + "]"); 103 : } - 104 76 : hyperparameters.erase("select_features"); - 105 94 : } - 106 142 : if (hyperparameters.contains("block_update")) { - 107 16 : block_update = hyperparameters["block_update"]; - 108 16 : hyperparameters.erase("block_update"); + 104 48 : hyperparameters.erase("select_features"); + 105 60 : } + 106 102 : if (hyperparameters.contains("block_update")) { + 107 12 : block_update = hyperparameters["block_update"]; + 108 12 : hyperparameters.erase("block_update"); 109 : } - 110 142 : Classifier::setHyperparameters(hyperparameters); - 111 322 : } - 112 1025 : std::tuple<torch::Tensor&, double, bool> update_weights(torch::Tensor& ytrain, torch::Tensor& ypred, torch::Tensor& weights) + 110 102 : Classifier::setHyperparameters(hyperparameters); + 111 216 : } + 112 816 : std::tuple<torch::Tensor&, double, bool> update_weights(torch::Tensor& ytrain, torch::Tensor& ypred, torch::Tensor& weights) 113 : { - 114 1025 : bool terminate = false; - 115 1025 : double alpha_t = 0; - 116 1025 : auto mask_wrong = ypred != ytrain; - 117 1025 : auto mask_right = ypred == ytrain; - 118 1025 : auto masked_weights = weights * mask_wrong.to(weights.dtype()); - 119 1025 : double epsilon_t = masked_weights.sum().item<double>(); - 120 1025 : if (epsilon_t > 0.5) { + 114 816 : bool terminate = false; + 115 816 : double alpha_t = 0; + 116 816 : auto mask_wrong = ypred != ytrain; + 117 816 : auto mask_right = ypred == ytrain; + 118 816 : auto masked_weights = weights * mask_wrong.to(weights.dtype()); + 119 816 : double epsilon_t = masked_weights.sum().item<double>(); + 120 816 : if (epsilon_t > 0.5) { 121 : // Inverse the weights policy (plot ln(wt)) 122 : // "In each round of AdaBoost, there is a sanity check to ensure that the current base 123 : // learner is better than random guess" (Zhi-Hua Zhou, 2012) - 124 34 : terminate = true; + 124 24 : terminate = true; 125 : } else { - 126 991 : double wt = (1 - epsilon_t) / epsilon_t; - 127 991 : alpha_t = epsilon_t == 0 ? 1 : 0.5 * log(wt); + 126 792 : double wt = (1 - epsilon_t) / epsilon_t; + 127 792 : alpha_t = epsilon_t == 0 ? 1 : 0.5 * log(wt); 128 : // Step 3.2: Update weights for next classifier 129 : // Step 3.2.1: Update weights of wrong samples - 130 991 : weights += mask_wrong.to(weights.dtype()) * exp(alpha_t) * weights; + 130 792 : weights += mask_wrong.to(weights.dtype()) * exp(alpha_t) * weights; 131 : // Step 3.2.2: Update weights of right samples - 132 991 : weights += mask_right.to(weights.dtype()) * exp(-alpha_t) * weights; + 132 792 : weights += mask_right.to(weights.dtype()) * exp(-alpha_t) * weights; 133 : // Step 3.3: Normalise the weights - 134 991 : double totalWeights = torch::sum(weights).item<double>(); - 135 991 : weights = weights / totalWeights; + 134 792 : double totalWeights = torch::sum(weights).item<double>(); + 135 792 : weights = weights / totalWeights; 136 : } - 137 2050 : return { weights, alpha_t, terminate }; - 138 1025 : } - 139 40 : std::tuple<torch::Tensor&, double, bool> BoostAODE::update_weights_block(int k, torch::Tensor& ytrain, torch::Tensor& weights) + 137 1632 : return { weights, alpha_t, terminate }; + 138 816 : } + 139 42 : std::tuple<torch::Tensor&, double, bool> BoostAODE::update_weights_block(int k, torch::Tensor& ytrain, torch::Tensor& weights) 140 : { 141 : /* Update Block algorithm 142 : k = # of models in block @@ -242,218 +242,218 @@ 180 : // 181 : // Make predict with only the last k models 182 : // - 183 40 : std::unique_ptr<Classifier> model; - 184 40 : std::vector<std::unique_ptr<Classifier>> models_bak; + 183 42 : std::unique_ptr<Classifier> model; + 184 42 : std::vector<std::unique_ptr<Classifier>> models_bak; 185 : // 1. n_models_bak <- n_models 2. significances_bak <- significances - 186 40 : auto significance_bak = significanceModels; - 187 40 : auto n_models_bak = n_models; + 186 42 : auto significance_bak = significanceModels; + 187 42 : auto n_models_bak = n_models; 188 : // 3. significances = vector(k, 1) - 189 40 : significanceModels = std::vector<double>(k, 1.0); + 189 42 : significanceModels = std::vector<double>(k, 1.0); 190 : // 4. Move first n classifiers to models_bak 191 : // backup the first n_models - k models (if n_models == k, don't backup any) - 192 160 : for (int i = 0; i < n_models - k; ++i) { - 193 120 : model = std::move(models[0]); - 194 120 : models.erase(models.begin()); - 195 120 : models_bak.push_back(std::move(model)); + 192 222 : for (int i = 0; i < n_models - k; ++i) { + 193 180 : model = std::move(models[0]); + 194 180 : models.erase(models.begin()); + 195 180 : models_bak.push_back(std::move(model)); 196 : } - 197 40 : assert(models.size() == k); + 197 42 : assert(models.size() == k); 198 : // 5. n_models <- k - 199 40 : n_models = k; + 199 42 : n_models = k; 200 : // 6. Make prediction, compute alpha, update weights - 201 40 : auto ypred = predict(X_train); + 201 42 : auto ypred = predict(X_train); 202 : // 203 : // Update weights 204 : // 205 : double alpha_t; 206 : bool terminate; - 207 40 : std::tie(weights, alpha_t, terminate) = update_weights(y_train, ypred, weights); + 207 42 : std::tie(weights, alpha_t, terminate) = update_weights(y_train, ypred, weights); 208 : // 209 : // Restore the models if needed 210 : // 211 : // 7. Insert classifiers in models_bak to be the first n models 212 : // if n_models_bak == k, don't restore any, because none of them were moved - 213 40 : if (k != n_models_bak) { + 213 42 : if (k != n_models_bak) { 214 : // Insert in the same order as they were extracted - 215 32 : int bak_size = models_bak.size(); - 216 152 : for (int i = 0; i < bak_size; ++i) { - 217 120 : model = std::move(models_bak[bak_size - 1 - i]); - 218 120 : models_bak.erase(models_bak.end() - 1); - 219 120 : models.insert(models.begin(), std::move(model)); + 215 36 : int bak_size = models_bak.size(); + 216 216 : for (int i = 0; i < bak_size; ++i) { + 217 180 : model = std::move(models_bak[bak_size - 1 - i]); + 218 180 : models_bak.erase(models_bak.end() - 1); + 219 180 : models.insert(models.begin(), std::move(model)); 220 : } 221 : } 222 : // 8. significances <- significances_bak - 223 40 : significanceModels = significance_bak; + 223 42 : significanceModels = significance_bak; 224 : // 225 : // Update the significance of the last k models 226 : // 227 : // 9. Update last k significances - 228 168 : for (int i = 0; i < k; ++i) { - 229 128 : significanceModels[n_models_bak - k + i] = alpha_t; + 228 156 : for (int i = 0; i < k; ++i) { + 229 114 : significanceModels[n_models_bak - k + i] = alpha_t; 230 : } 231 : // 10. n_models <- n_models_bak - 232 40 : n_models = n_models_bak; - 233 80 : return { weights, alpha_t, terminate }; - 234 40 : } - 235 76 : std::vector<int> BoostAODE::initializeModels() + 232 42 : n_models = n_models_bak; + 233 84 : return { weights, alpha_t, terminate }; + 234 42 : } + 235 48 : std::vector<int> BoostAODE::initializeModels() 236 : { - 237 76 : std::vector<int> featuresUsed; - 238 76 : torch::Tensor weights_ = torch::full({ m }, 1.0 / m, torch::kFloat64); - 239 76 : int maxFeatures = 0; - 240 76 : if (select_features_algorithm == SelectFeatures.CFS) { - 241 20 : featureSelector = new CFS(dataset, features, className, maxFeatures, states.at(className).size(), weights_); - 242 56 : } else if (select_features_algorithm == SelectFeatures.IWSS) { - 243 29 : if (threshold < 0 || threshold >0.5) { - 244 18 : throw std::invalid_argument("Invalid threshold value for " + SelectFeatures.IWSS + " [0, 0.5]"); + 237 48 : std::vector<int> featuresUsed; + 238 48 : torch::Tensor weights_ = torch::full({ m }, 1.0 / m, torch::kFloat64); + 239 48 : int maxFeatures = 0; + 240 48 : if (select_features_algorithm == SelectFeatures.CFS) { + 241 12 : featureSelector = new CFS(dataset, features, className, maxFeatures, states.at(className).size(), weights_); + 242 36 : } else if (select_features_algorithm == SelectFeatures.IWSS) { + 243 18 : if (threshold < 0 || threshold >0.5) { + 244 12 : throw std::invalid_argument("Invalid threshold value for " + SelectFeatures.IWSS + " [0, 0.5]"); 245 : } - 246 11 : featureSelector = new IWSS(dataset, features, className, maxFeatures, states.at(className).size(), weights_, threshold); - 247 27 : } else if (select_features_algorithm == SelectFeatures.FCBF) { - 248 27 : if (threshold < 1e-7 || threshold > 1) { - 249 18 : throw std::invalid_argument("Invalid threshold value for " + SelectFeatures.FCBF + " [1e-7, 1]"); + 246 6 : featureSelector = new IWSS(dataset, features, className, maxFeatures, states.at(className).size(), weights_, threshold); + 247 18 : } else if (select_features_algorithm == SelectFeatures.FCBF) { + 248 18 : if (threshold < 1e-7 || threshold > 1) { + 249 12 : throw std::invalid_argument("Invalid threshold value for " + SelectFeatures.FCBF + " [1e-7, 1]"); 250 : } - 251 9 : featureSelector = new FCBF(dataset, features, className, maxFeatures, states.at(className).size(), weights_, threshold); + 251 6 : featureSelector = new FCBF(dataset, features, className, maxFeatures, states.at(className).size(), weights_, threshold); 252 : } - 253 40 : featureSelector->fit(); - 254 40 : auto cfsFeatures = featureSelector->getFeatures(); - 255 40 : auto scores = featureSelector->getScores(); - 256 245 : for (const int& feature : cfsFeatures) { - 257 205 : featuresUsed.push_back(feature); - 258 205 : std::unique_ptr<Classifier> model = std::make_unique<SPODE>(feature); - 259 205 : model->fit(dataset, features, className, states, weights_); - 260 205 : models.push_back(std::move(model)); - 261 205 : significanceModels.push_back(1.0); // They will be updated later in trainModel - 262 205 : n_models++; - 263 205 : } - 264 40 : notes.push_back("Used features in initialization: " + std::to_string(featuresUsed.size()) + " of " + std::to_string(features.size()) + " with " + select_features_algorithm); - 265 40 : delete featureSelector; - 266 80 : return featuresUsed; - 267 112 : } - 268 190 : void BoostAODE::trainModel(const torch::Tensor& weights) + 253 24 : featureSelector->fit(); + 254 24 : auto cfsFeatures = featureSelector->getFeatures(); + 255 24 : auto scores = featureSelector->getScores(); + 256 150 : for (const int& feature : cfsFeatures) { + 257 126 : featuresUsed.push_back(feature); + 258 126 : std::unique_ptr<Classifier> model = std::make_unique<SPODE>(feature); + 259 126 : model->fit(dataset, features, className, states, weights_); + 260 126 : models.push_back(std::move(model)); + 261 126 : significanceModels.push_back(1.0); // They will be updated later in trainModel + 262 126 : n_models++; + 263 126 : } + 264 24 : notes.push_back("Used features in initialization: " + std::to_string(featuresUsed.size()) + " of " + std::to_string(features.size()) + " with " + select_features_algorithm); + 265 24 : delete featureSelector; + 266 48 : return featuresUsed; + 267 72 : } + 268 138 : void BoostAODE::trainModel(const torch::Tensor& weights) 269 : { 270 : // 271 : // Logging setup 272 : // - 273 190 : loguru::set_thread_name("BoostAODE"); - 274 190 : loguru::g_stderr_verbosity = loguru::Verbosity_OFF; - 275 190 : loguru::add_file("boostAODE.log", loguru::Truncate, loguru::Verbosity_MAX); + 273 138 : loguru::set_thread_name("BoostAODE"); + 274 138 : loguru::g_stderr_verbosity = loguru::Verbosity_OFF; + 275 138 : loguru::add_file("boostAODE.log", loguru::Truncate, loguru::Verbosity_MAX); 276 : 277 : // Algorithm based on the adaboost algorithm for classification 278 : // as explained in Ensemble methods (Zhi-Hua Zhou, 2012) - 279 190 : fitted = true; - 280 190 : double alpha_t = 0; - 281 190 : torch::Tensor weights_ = torch::full({ m }, 1.0 / m, torch::kFloat64); - 282 190 : bool finished = false; - 283 190 : std::vector<int> featuresUsed; - 284 190 : if (selectFeatures) { - 285 76 : featuresUsed = initializeModels(); - 286 40 : auto ypred = predict(X_train); - 287 40 : std::tie(weights_, alpha_t, finished) = update_weights(y_train, ypred, weights_); + 279 138 : fitted = true; + 280 138 : double alpha_t = 0; + 281 138 : torch::Tensor weights_ = torch::full({ m }, 1.0 / m, torch::kFloat64); + 282 138 : bool finished = false; + 283 138 : std::vector<int> featuresUsed; + 284 138 : if (selectFeatures) { + 285 48 : featuresUsed = initializeModels(); + 286 24 : auto ypred = predict(X_train); + 287 24 : std::tie(weights_, alpha_t, finished) = update_weights(y_train, ypred, weights_); 288 : // Update significance of the models - 289 245 : for (int i = 0; i < n_models; ++i) { - 290 205 : significanceModels[i] = alpha_t; + 289 150 : for (int i = 0; i < n_models; ++i) { + 290 126 : significanceModels[i] = alpha_t; 291 : } - 292 40 : if (finished) { + 292 24 : if (finished) { 293 0 : return; 294 : } - 295 40 : } - 296 154 : int numItemsPack = 0; // The counter of the models inserted in the current pack + 295 24 : } + 296 114 : int numItemsPack = 0; // The counter of the models inserted in the current pack 297 : // Variables to control the accuracy finish condition - 298 154 : double priorAccuracy = 0.0; - 299 154 : double improvement = 1.0; - 300 154 : double convergence_threshold = 1e-4; - 301 154 : int tolerance = 0; // number of times the accuracy is lower than the convergence_threshold + 298 114 : double priorAccuracy = 0.0; + 299 114 : double improvement = 1.0; + 300 114 : double convergence_threshold = 1e-4; + 301 114 : int tolerance = 0; // number of times the accuracy is lower than the convergence_threshold 302 : // Step 0: Set the finish condition 303 : // epsilon sub t > 0.5 => inverse the weights policy 304 : // validation error is not decreasing 305 : // run out of features - 306 154 : bool ascending = order_algorithm == Orders.ASC; - 307 154 : std::mt19937 g{ 173 }; - 308 919 : while (!finished) { + 306 114 : bool ascending = order_algorithm == Orders.ASC; + 307 114 : std::mt19937 g{ 173 }; + 308 756 : while (!finished) { 309 : // Step 1: Build ranking with mutual information - 310 765 : auto featureSelection = metrics.SelectKBestWeighted(weights_, ascending, n); // Get all the features sorted - 311 765 : if (order_algorithm == Orders.RAND) { - 312 81 : std::shuffle(featureSelection.begin(), featureSelection.end(), g); + 310 642 : auto featureSelection = metrics.SelectKBestWeighted(weights_, ascending, n); // Get all the features sorted + 311 642 : if (order_algorithm == Orders.RAND) { + 312 54 : std::shuffle(featureSelection.begin(), featureSelection.end(), g); 313 : } 314 : // Remove used features - 315 1530 : featureSelection.erase(remove_if(begin(featureSelection), end(featureSelection), [&](auto x) - 316 110548 : { return std::find(begin(featuresUsed), end(featuresUsed), x) != end(featuresUsed);}), - 317 765 : end(featureSelection) + 315 1284 : featureSelection.erase(remove_if(begin(featureSelection), end(featureSelection), [&](auto x) + 316 58200 : { return std::find(begin(featuresUsed), end(featuresUsed), x) != end(featuresUsed);}), + 317 642 : end(featureSelection) 318 : ); - 319 765 : int k = bisection ? pow(2, tolerance) : 1; - 320 765 : int counter = 0; // The model counter of the current pack - 321 765 : VLOG_SCOPE_F(1, "counter=%d k=%d featureSelection.size: %zu", counter, k, featureSelection.size()); - 322 1838 : while (counter++ < k && featureSelection.size() > 0) { - 323 1073 : auto feature = featureSelection[0]; - 324 1073 : featureSelection.erase(featureSelection.begin()); - 325 1073 : std::unique_ptr<Classifier> model; - 326 1073 : model = std::make_unique<SPODE>(feature); - 327 1073 : model->fit(dataset, features, className, states, weights_); - 328 1073 : alpha_t = 0.0; - 329 1073 : if (!block_update) { - 330 945 : auto ypred = model->predict(X_train); + 319 642 : int k = bisection ? pow(2, tolerance) : 1; + 320 642 : int counter = 0; // The model counter of the current pack + 321 642 : VLOG_SCOPE_F(1, "counter=%d k=%d featureSelection.size: %zu", counter, k, featureSelection.size()); + 322 1506 : while (counter++ < k && featureSelection.size() > 0) { + 323 864 : auto feature = featureSelection[0]; + 324 864 : featureSelection.erase(featureSelection.begin()); + 325 864 : std::unique_ptr<Classifier> model; + 326 864 : model = std::make_unique<SPODE>(feature); + 327 864 : model->fit(dataset, features, className, states, weights_); + 328 864 : alpha_t = 0.0; + 329 864 : if (!block_update) { + 330 750 : auto ypred = model->predict(X_train); 331 : // Step 3.1: Compute the classifier amout of say - 332 945 : std::tie(weights_, alpha_t, finished) = update_weights(y_train, ypred, weights_); - 333 945 : } + 332 750 : std::tie(weights_, alpha_t, finished) = update_weights(y_train, ypred, weights_); + 333 750 : } 334 : // Step 3.4: Store classifier and its accuracy to weigh its future vote - 335 1073 : numItemsPack++; - 336 1073 : featuresUsed.push_back(feature); - 337 1073 : models.push_back(std::move(model)); - 338 1073 : significanceModels.push_back(alpha_t); - 339 1073 : n_models++; - 340 1073 : VLOG_SCOPE_F(2, "numItemsPack: %d n_models: %d featuresUsed: %zu", numItemsPack, n_models, featuresUsed.size()); - 341 1073 : } - 342 765 : if (block_update) { - 343 40 : std::tie(weights_, alpha_t, finished) = update_weights_block(k, y_train, weights_); + 335 864 : numItemsPack++; + 336 864 : featuresUsed.push_back(feature); + 337 864 : models.push_back(std::move(model)); + 338 864 : significanceModels.push_back(alpha_t); + 339 864 : n_models++; + 340 864 : VLOG_SCOPE_F(2, "numItemsPack: %d n_models: %d featuresUsed: %zu", numItemsPack, n_models, featuresUsed.size()); + 341 864 : } + 342 642 : if (block_update) { + 343 42 : std::tie(weights_, alpha_t, finished) = update_weights_block(k, y_train, weights_); 344 : } - 345 765 : if (convergence && !finished) { - 346 474 : auto y_val_predict = predict(X_test); - 347 474 : double accuracy = (y_val_predict == y_test).sum().item<double>() / (double)y_test.size(0); - 348 474 : if (priorAccuracy == 0) { - 349 119 : priorAccuracy = accuracy; + 345 642 : if (convergence && !finished) { + 346 444 : auto y_val_predict = predict(X_test); + 347 444 : double accuracy = (y_val_predict == y_test).sum().item<double>() / (double)y_test.size(0); + 348 444 : if (priorAccuracy == 0) { + 349 90 : priorAccuracy = accuracy; 350 : } else { - 351 355 : improvement = accuracy - priorAccuracy; + 351 354 : improvement = accuracy - priorAccuracy; 352 : } - 353 474 : if (improvement < convergence_threshold) { - 354 296 : VLOG_SCOPE_F(3, " (improvement<threshold) tolerance: %d numItemsPack: %d improvement: %f prior: %f current: %f", tolerance, numItemsPack, improvement, priorAccuracy, accuracy); - 355 296 : tolerance++; - 356 296 : } else { - 357 178 : VLOG_SCOPE_F(3, "* (improvement>=threshold) Reset. tolerance: %d numItemsPack: %d improvement: %f prior: %f current: %f", tolerance, numItemsPack, improvement, priorAccuracy, accuracy); - 358 178 : tolerance = 0; // Reset the counter if the model performs better - 359 178 : numItemsPack = 0; - 360 178 : } - 361 474 : if (convergence_best) { + 353 444 : if (improvement < convergence_threshold) { + 354 264 : VLOG_SCOPE_F(3, " (improvement<threshold) tolerance: %d numItemsPack: %d improvement: %f prior: %f current: %f", tolerance, numItemsPack, improvement, priorAccuracy, accuracy); + 355 264 : tolerance++; + 356 264 : } else { + 357 180 : VLOG_SCOPE_F(3, "* (improvement>=threshold) Reset. tolerance: %d numItemsPack: %d improvement: %f prior: %f current: %f", tolerance, numItemsPack, improvement, priorAccuracy, accuracy); + 358 180 : tolerance = 0; // Reset the counter if the model performs better + 359 180 : numItemsPack = 0; + 360 180 : } + 361 444 : if (convergence_best) { 362 : // Keep the best accuracy until now as the prior accuracy - 363 71 : priorAccuracy = std::max(accuracy, priorAccuracy); + 363 48 : priorAccuracy = std::max(accuracy, priorAccuracy); 364 : } else { 365 : // Keep the last accuray obtained as the prior accuracy - 366 403 : priorAccuracy = accuracy; + 366 396 : priorAccuracy = accuracy; 367 : } - 368 474 : } - 369 765 : VLOG_SCOPE_F(1, "tolerance: %d featuresUsed.size: %zu features.size: %zu", tolerance, featuresUsed.size(), features.size()); - 370 765 : finished = finished || tolerance > maxTolerance || featuresUsed.size() == features.size(); - 371 765 : } - 372 154 : if (tolerance > maxTolerance) { - 373 21 : if (numItemsPack < n_models) { - 374 21 : notes.push_back("Convergence threshold reached & " + std::to_string(numItemsPack) + " models eliminated"); - 375 21 : VLOG_SCOPE_F(4, "Convergence threshold reached & %d models eliminated of %d", numItemsPack, n_models); - 376 336 : for (int i = 0; i < numItemsPack; ++i) { - 377 315 : significanceModels.pop_back(); - 378 315 : models.pop_back(); - 379 315 : n_models--; + 368 444 : } + 369 642 : VLOG_SCOPE_F(1, "tolerance: %d featuresUsed.size: %zu features.size: %zu", tolerance, featuresUsed.size(), features.size()); + 370 642 : finished = finished || tolerance > maxTolerance || featuresUsed.size() == features.size(); + 371 642 : } + 372 114 : if (tolerance > maxTolerance) { + 373 12 : if (numItemsPack < n_models) { + 374 12 : notes.push_back("Convergence threshold reached & " + std::to_string(numItemsPack) + " models eliminated"); + 375 12 : VLOG_SCOPE_F(4, "Convergence threshold reached & %d models eliminated of %d", numItemsPack, n_models); + 376 156 : for (int i = 0; i < numItemsPack; ++i) { + 377 144 : significanceModels.pop_back(); + 378 144 : models.pop_back(); + 379 144 : n_models--; 380 : } - 381 21 : } else { + 381 12 : } else { 382 0 : notes.push_back("Convergence threshold reached & 0 models eliminated"); 383 0 : VLOG_SCOPE_F(4, "Convergence threshold reached & 0 models eliminated n_models=%d numItemsPack=%d", n_models, numItemsPack); 384 0 : } 385 : } - 386 154 : if (featuresUsed.size() != features.size()) { - 387 21 : notes.push_back("Used features in train: " + std::to_string(featuresUsed.size()) + " of " + std::to_string(features.size())); - 388 21 : status = WARNING; + 386 114 : if (featuresUsed.size() != features.size()) { + 387 6 : notes.push_back("Used features in train: " + std::to_string(featuresUsed.size()) + " of " + std::to_string(features.size())); + 388 6 : status = WARNING; 389 : } - 390 154 : notes.push_back("Number of models: " + std::to_string(n_models)); - 391 226 : } - 392 8 : std::vector<std::string> BoostAODE::graph(const std::string& title) const + 390 114 : notes.push_back("Number of models: " + std::to_string(n_models)); + 391 162 : } + 392 6 : std::vector<std::string> BoostAODE::graph(const std::string& title) const 393 : { - 394 8 : return Ensemble::graph(title); + 394 6 : return Ensemble::graph(title); 395 : } 396 : } diff --git a/html/bayesnet/ensembles/BoostAODE.h.func-c.html b/html/bayesnet/ensembles/BoostAODE.h.func-c.html index 9a1563c..6e01432 100644 --- a/html/bayesnet/ensembles/BoostAODE.h.func-c.html +++ b/html/bayesnet/ensembles/BoostAODE.h.func-c.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet9BoostAODED0Ev + bayesnet::BoostAODE::~BoostAODE() - 21 - - - - - _ZN8bayesnet9BoostAODED0Ev - - 2 - - - - - _ZN8bayesnet9BoostAODED2Ev - - 19 + 132 diff --git a/html/bayesnet/ensembles/BoostAODE.h.func.html b/html/bayesnet/ensembles/BoostAODE.h.func.html index a37ce5d..0d68fd8 100644 --- a/html/bayesnet/ensembles/BoostAODE.h.func.html +++ b/html/bayesnet/ensembles/BoostAODE.h.func.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet9BoostAODED0Ev + bayesnet::BoostAODE::~BoostAODE() - 21 - - - - - _ZN8bayesnet9BoostAODED0Ev - - 2 - - - - - _ZN8bayesnet9BoostAODED2Ev - - 19 + 132 diff --git a/html/bayesnet/ensembles/BoostAODE.h.gcov.html b/html/bayesnet/ensembles/BoostAODE.h.gcov.html index 6ba95f1..d3076ce 100644 --- a/html/bayesnet/ensembles/BoostAODE.h.gcov.html +++ b/html/bayesnet/ensembles/BoostAODE.h.gcov.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -73,20 +73,20 @@ 11 : #include "bayesnet/feature_selection/FeatureSelect.h" 12 : #include "Ensemble.h" 13 : namespace bayesnet { - 14 : struct { + 14 : const struct { 15 : std::string CFS = "CFS"; 16 : std::string FCBF = "FCBF"; 17 : std::string IWSS = "IWSS"; 18 : }SelectFeatures; - 19 : struct { + 19 : const struct { 20 : std::string ASC = "asc"; 21 : std::string DESC = "desc"; 22 : std::string RAND = "rand"; 23 : }Orders; 24 : class BoostAODE : public Ensemble { 25 : public: - 26 : BoostAODE(bool predict_voting = false); - 27 21 : virtual ~BoostAODE() = default; + 26 : explicit BoostAODE(bool predict_voting = false); + 27 132 : virtual ~BoostAODE() = default; 28 : std::vector<std::string> graph(const std::string& title = "BoostAODE") const override; 29 : void setHyperparameters(const nlohmann::json& hyperparameters_) override; 30 : protected: diff --git a/html/bayesnet/ensembles/Ensemble.cc.func-c.html b/html/bayesnet/ensembles/Ensemble.cc.func-c.html index ae649d5..1601831 100644 --- a/html/bayesnet/ensembles/Ensemble.cc.func-c.html +++ b/html/bayesnet/ensembles/Ensemble.cc.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,177 +63,177 @@ - _ZNK8bayesnet8Ensemble17getNumberOfStatesEv + bayesnet::Ensemble::getNumberOfStates() const - 11 + 6 - _ZNK8bayesnet8Ensemble4showB5cxx11Ev + bayesnet::Ensemble::show[abi:cxx11]() const - 11 + 6 - _ZNK8bayesnet8Ensemble5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::Ensemble::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 33 + 18 - _ZN8bayesnet8Ensemble10trainModelERKN2at6TensorE + bayesnet::Ensemble::getNumberOfEdges() const + + 36 + + + + + bayesnet::Ensemble::getNumberOfNodes() const + + 36 + + + + + bayesnet::Ensemble::trainModel(at::Tensor const&) + + 36 + + + + + bayesnet::Ensemble::predict_average_voting(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&) + + 42 + + + + + bayesnet::Ensemble::predict_average_proba(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&) + + 54 + + + + + bayesnet::Ensemble::score(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&, std::vector<int, std::allocator<int> >&) + + 60 + + + + + bayesnet::Ensemble::compute_arg_max(std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&) 66 - _ZNK8bayesnet8Ensemble16getNumberOfEdgesEv + bayesnet::Ensemble::predict(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&) - 70 + 84 - _ZNK8bayesnet8Ensemble16getNumberOfNodesEv - - 70 - - - - - _ZN8bayesnet8Ensemble22predict_average_votingERSt6vectorIS1_IiSaIiEESaIS3_EE - - 82 - - - - - _ZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS1_IiSaIiEESaIS3_EE + bayesnet::Ensemble::score(at::Tensor&, at::Tensor&) 120 - _ZN8bayesnet8Ensemble5scoreERSt6vectorIS1_IiSaIiEESaIS3_EERS3_ + bayesnet::Ensemble::predict_proba(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&) - 134 + 132 - _ZN8bayesnet8Ensemble15compute_arg_maxERSt6vectorIS1_IdSaIdEESaIS3_EE + bayesnet::Ensemble::predict_average_voting(at::Tensor&) - 145 + 240 - _ZN8bayesnet8Ensemble7predictERSt6vectorIS1_IiSaIiEESaIS3_EE + bayesnet::Ensemble::voting(at::Tensor&) - 178 + 240 - _ZN8bayesnet8Ensemble5scoreERN2at6TensorES3_ + bayesnet::Ensemble::predict_average_proba(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&)::{lambda()#1}::operator()() const - 194 + 366 - _ZN8bayesnet8Ensemble13predict_probaERSt6vectorIS1_IiSaIiEESaIS3_EE + bayesnet::Ensemble::predict_average_proba(at::Tensor&) - 268 + 444 - _ZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorE + bayesnet::Ensemble::Ensemble(bool) - 291 + 468 - _ZN8bayesnet8Ensemble6votingERN2at6TensorE + bayesnet::Ensemble::compute_arg_max(at::Tensor&) - 291 + 636 - _ZZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS1_IiSaIiEESaIS3_EEENKUlvE_clEv + bayesnet::Ensemble::predict(at::Tensor&) - 722 + 654 - _ZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorE + bayesnet::Ensemble::predict_proba(at::Tensor&) - 735 + 678 - _ZN8bayesnet8EnsembleC2Eb + bayesnet::Ensemble::predict_average_voting(at::Tensor&)::{lambda()#1}::operator()() const - 864 + 1608 - _ZN8bayesnet8Ensemble15compute_arg_maxERN2at6TensorE + bayesnet::Ensemble::predict_average_proba(at::Tensor&)::{lambda()#1}::operator()() const - 933 + 2202 - _ZN8bayesnet8Ensemble7predictERN2at6TensorE + bayesnet::Ensemble::predict_average_proba(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&)::{lambda(double)#1}::operator()(double) const - 966 + 49320 - _ZN8bayesnet8Ensemble13predict_probaERN2at6TensorE + bayesnet::Ensemble::predict_average_proba(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&)::{lambda()#1}::operator()() const::{lambda(double, double)#1}::operator()(double, double) const - 1010 - - - - - _ZZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEENKUlvE_clEv - - 1668 - - - - - _ZZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEENKUlvE_clEv - - 3518 - - - - - _ZZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS1_IiSaIiEESaIS3_EEENKUldE_clEd - - 98260 - - - - - _ZZZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS1_IiSaIiEESaIS3_EEENKUlvE_clEvENKUlddE_clEdd - - 756136 + 389880 diff --git a/html/bayesnet/ensembles/Ensemble.cc.func.html b/html/bayesnet/ensembles/Ensemble.cc.func.html index 7efcb6d..2aaba50 100644 --- a/html/bayesnet/ensembles/Ensemble.cc.func.html +++ b/html/bayesnet/ensembles/Ensemble.cc.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,177 +63,177 @@ - _ZN8bayesnet8Ensemble10trainModelERKN2at6TensorE + bayesnet::Ensemble::Ensemble(bool) + + 468 + + + + + bayesnet::Ensemble::compute_arg_max(at::Tensor&) + + 636 + + + + + bayesnet::Ensemble::compute_arg_max(std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&) 66 - _ZN8bayesnet8Ensemble13predict_probaERN2at6TensorE + bayesnet::Ensemble::getNumberOfEdges() const - 1010 + 36 - _ZN8bayesnet8Ensemble13predict_probaERSt6vectorIS1_IiSaIiEESaIS3_EE + bayesnet::Ensemble::getNumberOfNodes() const - 268 + 36 - _ZN8bayesnet8Ensemble15compute_arg_maxERN2at6TensorE + bayesnet::Ensemble::getNumberOfStates() const - 933 + 6 - _ZN8bayesnet8Ensemble15compute_arg_maxERSt6vectorIS1_IdSaIdEESaIS3_EE + bayesnet::Ensemble::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 145 + 18 - _ZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorE + bayesnet::Ensemble::predict(at::Tensor&) - 735 + 654 - _ZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS1_IiSaIiEESaIS3_EE + bayesnet::Ensemble::predict(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&) + + 84 + + + + + bayesnet::Ensemble::predict_average_proba(at::Tensor&) + + 444 + + + + + bayesnet::Ensemble::predict_average_proba(at::Tensor&)::{lambda()#1}::operator()() const + + 2202 + + + + + bayesnet::Ensemble::predict_average_proba(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&) + + 54 + + + + + bayesnet::Ensemble::predict_average_proba(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&)::{lambda()#1}::operator()() const + + 366 + + + + + bayesnet::Ensemble::predict_average_proba(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&)::{lambda()#1}::operator()() const::{lambda(double, double)#1}::operator()(double, double) const + + 389880 + + + + + bayesnet::Ensemble::predict_average_proba(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&)::{lambda(double)#1}::operator()(double) const + + 49320 + + + + + bayesnet::Ensemble::predict_average_voting(at::Tensor&) + + 240 + + + + + bayesnet::Ensemble::predict_average_voting(at::Tensor&)::{lambda()#1}::operator()() const + + 1608 + + + + + bayesnet::Ensemble::predict_average_voting(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&) + + 42 + + + + + bayesnet::Ensemble::predict_proba(at::Tensor&) + + 678 + + + + + bayesnet::Ensemble::predict_proba(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&) + + 132 + + + + + bayesnet::Ensemble::score(at::Tensor&, at::Tensor&) 120 - _ZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorE + bayesnet::Ensemble::score(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&, std::vector<int, std::allocator<int> >&) - 291 + 60 - _ZN8bayesnet8Ensemble22predict_average_votingERSt6vectorIS1_IiSaIiEESaIS3_EE + bayesnet::Ensemble::show[abi:cxx11]() const - 82 + 6 - _ZN8bayesnet8Ensemble5scoreERN2at6TensorES3_ + bayesnet::Ensemble::trainModel(at::Tensor const&) - 194 + 36 - _ZN8bayesnet8Ensemble5scoreERSt6vectorIS1_IiSaIiEESaIS3_EERS3_ + bayesnet::Ensemble::voting(at::Tensor&) - 134 - - - - - _ZN8bayesnet8Ensemble6votingERN2at6TensorE - - 291 - - - - - _ZN8bayesnet8Ensemble7predictERN2at6TensorE - - 966 - - - - - _ZN8bayesnet8Ensemble7predictERSt6vectorIS1_IiSaIiEESaIS3_EE - - 178 - - - - - _ZN8bayesnet8EnsembleC2Eb - - 864 - - - - - _ZNK8bayesnet8Ensemble16getNumberOfEdgesEv - - 70 - - - - - _ZNK8bayesnet8Ensemble16getNumberOfNodesEv - - 70 - - - - - _ZNK8bayesnet8Ensemble17getNumberOfStatesEv - - 11 - - - - - _ZNK8bayesnet8Ensemble4showB5cxx11Ev - - 11 - - - - - _ZNK8bayesnet8Ensemble5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE - - 33 - - - - - _ZZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEENKUlvE_clEv - - 3518 - - - - - _ZZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS1_IiSaIiEESaIS3_EEENKUldE_clEd - - 98260 - - - - - _ZZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS1_IiSaIiEESaIS3_EEENKUlvE_clEv - - 722 - - - - - _ZZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEENKUlvE_clEv - - 1668 - - - - - _ZZZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS1_IiSaIiEESaIS3_EEENKUlvE_clEvENKUlddE_clEdd - - 756136 + 240 diff --git a/html/bayesnet/ensembles/Ensemble.cc.gcov.html b/html/bayesnet/ensembles/Ensemble.cc.gcov.html index a499ade..43af0ae 100644 --- a/html/bayesnet/ensembles/Ensemble.cc.gcov.html +++ b/html/bayesnet/ensembles/Ensemble.cc.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -70,216 +70,216 @@ 8 : 9 : namespace bayesnet { 10 : - 11 864 : Ensemble::Ensemble(bool predict_voting) : Classifier(Network()), n_models(0), predict_voting(predict_voting) + 11 468 : Ensemble::Ensemble(bool predict_voting) : Classifier(Network()), n_models(0), predict_voting(predict_voting) 12 : { 13 : - 14 864 : }; + 14 468 : }; 15 : const std::string ENSEMBLE_NOT_FITTED = "Ensemble has not been fitted"; - 16 66 : void Ensemble::trainModel(const torch::Tensor& weights) + 16 36 : void Ensemble::trainModel(const torch::Tensor& weights) 17 : { - 18 66 : n_models = models.size(); - 19 517 : for (auto i = 0; i < n_models; ++i) { + 18 36 : n_models = models.size(); + 19 282 : for (auto i = 0; i < n_models; ++i) { 20 : // fit with std::vectors - 21 451 : models[i]->fit(dataset, features, className, states); + 21 246 : models[i]->fit(dataset, features, className, states); 22 : } - 23 66 : } - 24 145 : std::vector<int> Ensemble::compute_arg_max(std::vector<std::vector<double>>& X) + 23 36 : } + 24 66 : std::vector<int> Ensemble::compute_arg_max(std::vector<std::vector<double>>& X) 25 : { - 26 145 : std::vector<int> y_pred; - 27 33363 : for (auto i = 0; i < X.size(); ++i) { - 28 33218 : auto max = std::max_element(X[i].begin(), X[i].end()); - 29 66436 : y_pred.push_back(std::distance(X[i].begin(), max)); + 26 66 : std::vector<int> y_pred; + 27 14730 : for (auto i = 0; i < X.size(); ++i) { + 28 14664 : auto max = std::max_element(X[i].begin(), X[i].end()); + 29 29328 : y_pred.push_back(std::distance(X[i].begin(), max)); 30 : } - 31 145 : return y_pred; + 31 66 : return y_pred; 32 0 : } - 33 933 : torch::Tensor Ensemble::compute_arg_max(torch::Tensor& X) + 33 636 : torch::Tensor Ensemble::compute_arg_max(torch::Tensor& X) 34 : { - 35 933 : auto y_pred = torch::argmax(X, 1); - 36 933 : return y_pred; + 35 636 : auto y_pred = torch::argmax(X, 1); + 36 636 : return y_pred; 37 : } - 38 291 : torch::Tensor Ensemble::voting(torch::Tensor& votes) + 38 240 : torch::Tensor Ensemble::voting(torch::Tensor& votes) 39 : { 40 : // Convert m x n_models tensor to a m x n_class_states with voting probabilities - 41 291 : auto y_pred_ = votes.accessor<int, 2>(); - 42 291 : std::vector<int> y_pred_final; - 43 291 : int numClasses = states.at(className).size(); + 41 240 : auto y_pred_ = votes.accessor<int, 2>(); + 42 240 : std::vector<int> y_pred_final; + 43 240 : int numClasses = states.at(className).size(); 44 : // votes is m x n_models with the prediction of every model for each sample - 45 291 : auto result = torch::zeros({ votes.size(0), numClasses }, torch::kFloat32); - 46 291 : auto sum = std::reduce(significanceModels.begin(), significanceModels.end()); - 47 69474 : for (int i = 0; i < votes.size(0); ++i) { + 45 240 : auto result = torch::zeros({ votes.size(0), numClasses }, torch::kFloat32); + 46 240 : auto sum = std::reduce(significanceModels.begin(), significanceModels.end()); + 47 61836 : for (int i = 0; i < votes.size(0); ++i) { 48 : // n_votes store in each index (value of class) the significance added by each model 49 : // i.e. n_votes[0] contains how much value has the value 0 of class. That value is generated by the models predictions - 50 69183 : std::vector<double> n_votes(numClasses, 0.0); - 51 541708 : for (int j = 0; j < n_models; ++j) { - 52 472525 : n_votes[y_pred_[i][j]] += significanceModels.at(j); + 50 61596 : std::vector<double> n_votes(numClasses, 0.0); + 51 515400 : for (int j = 0; j < n_models; ++j) { + 52 453804 : n_votes[y_pred_[i][j]] += significanceModels.at(j); 53 : } - 54 69183 : result[i] = torch::tensor(n_votes); - 55 69183 : } + 54 61596 : result[i] = torch::tensor(n_votes); + 55 61596 : } 56 : // To only do one division and gain precision - 57 291 : result /= sum; - 58 582 : return result; - 59 291 : } - 60 268 : std::vector<std::vector<double>> Ensemble::predict_proba(std::vector<std::vector<int>>& X) + 57 240 : result /= sum; + 58 480 : return result; + 59 240 : } + 60 132 : std::vector<std::vector<double>> Ensemble::predict_proba(std::vector<std::vector<int>>& X) 61 : { - 62 268 : if (!fitted) { - 63 66 : throw std::logic_error(ENSEMBLE_NOT_FITTED); + 62 132 : if (!fitted) { + 63 36 : throw std::logic_error(ENSEMBLE_NOT_FITTED); 64 : } - 65 202 : return predict_voting ? predict_average_voting(X) : predict_average_proba(X); + 65 96 : return predict_voting ? predict_average_voting(X) : predict_average_proba(X); 66 : } - 67 1010 : torch::Tensor Ensemble::predict_proba(torch::Tensor& X) + 67 678 : torch::Tensor Ensemble::predict_proba(torch::Tensor& X) 68 : { - 69 1010 : if (!fitted) { - 70 66 : throw std::logic_error(ENSEMBLE_NOT_FITTED); + 69 678 : if (!fitted) { + 70 36 : throw std::logic_error(ENSEMBLE_NOT_FITTED); 71 : } - 72 944 : return predict_voting ? predict_average_voting(X) : predict_average_proba(X); + 72 642 : return predict_voting ? predict_average_voting(X) : predict_average_proba(X); 73 : } - 74 178 : std::vector<int> Ensemble::predict(std::vector<std::vector<int>>& X) + 74 84 : std::vector<int> Ensemble::predict(std::vector<std::vector<int>>& X) 75 : { - 76 178 : auto res = predict_proba(X); - 77 268 : return compute_arg_max(res); - 78 134 : } - 79 966 : torch::Tensor Ensemble::predict(torch::Tensor& X) + 76 84 : auto res = predict_proba(X); + 77 120 : return compute_arg_max(res); + 78 60 : } + 79 654 : torch::Tensor Ensemble::predict(torch::Tensor& X) 80 : { - 81 966 : auto res = predict_proba(X); - 82 1844 : return compute_arg_max(res); - 83 922 : } - 84 735 : torch::Tensor Ensemble::predict_average_proba(torch::Tensor& X) + 81 654 : auto res = predict_proba(X); + 82 1260 : return compute_arg_max(res); + 83 630 : } + 84 444 : torch::Tensor Ensemble::predict_average_proba(torch::Tensor& X) 85 : { - 86 735 : auto n_states = models[0]->getClassNumStates(); - 87 735 : torch::Tensor y_pred = torch::zeros({ X.size(1), n_states }, torch::kFloat32); - 88 735 : auto threads{ std::vector<std::thread>() }; - 89 735 : std::mutex mtx; - 90 4253 : for (auto i = 0; i < n_models; ++i) { - 91 3518 : threads.push_back(std::thread([&, i]() { - 92 3518 : auto ypredict = models[i]->predict_proba(X); - 93 3518 : std::lock_guard<std::mutex> lock(mtx); - 94 3518 : y_pred += ypredict * significanceModels[i]; - 95 3518 : })); + 86 444 : auto n_states = models[0]->getClassNumStates(); + 87 444 : torch::Tensor y_pred = torch::zeros({ X.size(1), n_states }, torch::kFloat32); + 88 444 : auto threads{ std::vector<std::thread>() }; + 89 444 : std::mutex mtx; + 90 2646 : for (auto i = 0; i < n_models; ++i) { + 91 2202 : threads.push_back(std::thread([&, i]() { + 92 2202 : auto ypredict = models[i]->predict_proba(X); + 93 2202 : std::lock_guard<std::mutex> lock(mtx); + 94 2202 : y_pred += ypredict * significanceModels[i]; + 95 2202 : })); 96 : } - 97 4253 : for (auto& thread : threads) { - 98 3518 : thread.join(); + 97 2646 : for (auto& thread : threads) { + 98 2202 : thread.join(); 99 : } - 100 735 : auto sum = std::reduce(significanceModels.begin(), significanceModels.end()); - 101 735 : y_pred /= sum; - 102 1470 : return y_pred; - 103 735 : } - 104 120 : std::vector<std::vector<double>> Ensemble::predict_average_proba(std::vector<std::vector<int>>& X) + 100 444 : auto sum = std::reduce(significanceModels.begin(), significanceModels.end()); + 101 444 : y_pred /= sum; + 102 888 : return y_pred; + 103 444 : } + 104 54 : std::vector<std::vector<double>> Ensemble::predict_average_proba(std::vector<std::vector<int>>& X) 105 : { - 106 120 : auto n_states = models[0]->getClassNumStates(); - 107 120 : std::vector<std::vector<double>> y_pred(X[0].size(), std::vector<double>(n_states, 0.0)); - 108 120 : auto threads{ std::vector<std::thread>() }; - 109 120 : std::mutex mtx; - 110 842 : for (auto i = 0; i < n_models; ++i) { - 111 722 : threads.push_back(std::thread([&, i]() { - 112 722 : auto ypredict = models[i]->predict_proba(X); - 113 722 : assert(ypredict.size() == y_pred.size()); - 114 722 : assert(ypredict[0].size() == y_pred[0].size()); - 115 722 : std::lock_guard<std::mutex> lock(mtx); + 106 54 : auto n_states = models[0]->getClassNumStates(); + 107 54 : std::vector<std::vector<double>> y_pred(X[0].size(), std::vector<double>(n_states, 0.0)); + 108 54 : auto threads{ std::vector<std::thread>() }; + 109 54 : std::mutex mtx; + 110 420 : for (auto i = 0; i < n_models; ++i) { + 111 366 : threads.push_back(std::thread([&, i]() { + 112 366 : auto ypredict = models[i]->predict_proba(X); + 113 366 : assert(ypredict.size() == y_pred.size()); + 114 366 : assert(ypredict[0].size() == y_pred[0].size()); + 115 366 : std::lock_guard<std::mutex> lock(mtx); 116 : // Multiply each prediction by the significance of the model and then add it to the final prediction - 117 143118 : for (auto j = 0; j < ypredict.size(); ++j) { - 118 142396 : std::transform(y_pred[j].begin(), y_pred[j].end(), ypredict[j].begin(), y_pred[j].begin(), - 119 898532 : [significanceModels = significanceModels[i]](double x, double y) { return x + y * significanceModels; }); + 117 72546 : for (auto j = 0; j < ypredict.size(); ++j) { + 118 72180 : std::transform(y_pred[j].begin(), y_pred[j].end(), ypredict[j].begin(), y_pred[j].begin(), + 119 462060 : [significanceModels = significanceModels[i]](double x, double y) { return x + y * significanceModels; }); 120 : } - 121 722 : })); + 121 366 : })); 122 : } - 123 842 : for (auto& thread : threads) { - 124 722 : thread.join(); + 123 420 : for (auto& thread : threads) { + 124 366 : thread.join(); 125 : } - 126 120 : auto sum = std::reduce(significanceModels.begin(), significanceModels.end()); + 126 54 : auto sum = std::reduce(significanceModels.begin(), significanceModels.end()); 127 : //Divide each element of the prediction by the sum of the significances - 128 22520 : for (auto j = 0; j < y_pred.size(); ++j) { - 129 120660 : std::transform(y_pred[j].begin(), y_pred[j].end(), y_pred[j].begin(), [sum](double x) { return x / sum; }); + 128 10074 : for (auto j = 0; j < y_pred.size(); ++j) { + 129 59340 : std::transform(y_pred[j].begin(), y_pred[j].end(), y_pred[j].begin(), [sum](double x) { return x / sum; }); 130 : } - 131 240 : return y_pred; - 132 120 : } - 133 82 : std::vector<std::vector<double>> Ensemble::predict_average_voting(std::vector<std::vector<int>>& X) + 131 108 : return y_pred; + 132 54 : } + 133 42 : std::vector<std::vector<double>> Ensemble::predict_average_voting(std::vector<std::vector<int>>& X) 134 : { - 135 82 : torch::Tensor Xt = bayesnet::vectorToTensor(X, false); - 136 82 : auto y_pred = predict_average_voting(Xt); - 137 82 : std::vector<std::vector<double>> result = tensorToVectorDouble(y_pred); - 138 164 : return result; - 139 82 : } - 140 291 : torch::Tensor Ensemble::predict_average_voting(torch::Tensor& X) + 135 42 : torch::Tensor Xt = bayesnet::vectorToTensor(X, false); + 136 42 : auto y_pred = predict_average_voting(Xt); + 137 42 : std::vector<std::vector<double>> result = tensorToVectorDouble(y_pred); + 138 84 : return result; + 139 42 : } + 140 240 : torch::Tensor Ensemble::predict_average_voting(torch::Tensor& X) 141 : { 142 : // Build a m x n_models tensor with the predictions of each model - 143 291 : torch::Tensor y_pred = torch::zeros({ X.size(1), n_models }, torch::kInt32); - 144 291 : auto threads{ std::vector<std::thread>() }; - 145 291 : std::mutex mtx; - 146 1959 : for (auto i = 0; i < n_models; ++i) { - 147 1668 : threads.push_back(std::thread([&, i]() { - 148 1668 : auto ypredict = models[i]->predict(X); - 149 1668 : std::lock_guard<std::mutex> lock(mtx); - 150 5004 : y_pred.index_put_({ "...", i }, ypredict); - 151 3336 : })); + 143 240 : torch::Tensor y_pred = torch::zeros({ X.size(1), n_models }, torch::kInt32); + 144 240 : auto threads{ std::vector<std::thread>() }; + 145 240 : std::mutex mtx; + 146 1848 : for (auto i = 0; i < n_models; ++i) { + 147 1608 : threads.push_back(std::thread([&, i]() { + 148 1608 : auto ypredict = models[i]->predict(X); + 149 1608 : std::lock_guard<std::mutex> lock(mtx); + 150 4824 : y_pred.index_put_({ "...", i }, ypredict); + 151 3216 : })); 152 : } - 153 1959 : for (auto& thread : threads) { - 154 1668 : thread.join(); + 153 1848 : for (auto& thread : threads) { + 154 1608 : thread.join(); 155 : } - 156 582 : return voting(y_pred); - 157 291 : } - 158 194 : float Ensemble::score(torch::Tensor& X, torch::Tensor& y) + 156 480 : return voting(y_pred); + 157 240 : } + 158 120 : float Ensemble::score(torch::Tensor& X, torch::Tensor& y) 159 : { - 160 194 : auto y_pred = predict(X); - 161 172 : int correct = 0; - 162 53601 : for (int i = 0; i < y_pred.size(0); ++i) { - 163 53429 : if (y_pred[i].item<int>() == y[i].item<int>()) { - 164 45279 : correct++; + 160 120 : auto y_pred = predict(X); + 161 108 : int correct = 0; + 162 33876 : for (int i = 0; i < y_pred.size(0); ++i) { + 163 33768 : if (y_pred[i].item<int>() == y[i].item<int>()) { + 164 29502 : correct++; 165 : } 166 : } - 167 344 : return (double)correct / y_pred.size(0); - 168 172 : } - 169 134 : float Ensemble::score(std::vector<std::vector<int>>& X, std::vector<int>& y) + 167 216 : return (double)correct / y_pred.size(0); + 168 108 : } + 169 60 : float Ensemble::score(std::vector<std::vector<int>>& X, std::vector<int>& y) 170 : { - 171 134 : auto y_pred = predict(X); - 172 112 : int correct = 0; - 173 29964 : for (int i = 0; i < y_pred.size(); ++i) { - 174 29852 : if (y_pred[i] == y[i]) { - 175 25423 : correct++; + 171 60 : auto y_pred = predict(X); + 172 48 : int correct = 0; + 173 12876 : for (int i = 0; i < y_pred.size(); ++i) { + 174 12828 : if (y_pred[i] == y[i]) { + 175 10722 : correct++; 176 : } 177 : } - 178 224 : return (double)correct / y_pred.size(); - 179 112 : } - 180 11 : std::vector<std::string> Ensemble::show() const + 178 96 : return (double)correct / y_pred.size(); + 179 48 : } + 180 6 : std::vector<std::string> Ensemble::show() const 181 : { - 182 11 : auto result = std::vector<std::string>(); - 183 55 : for (auto i = 0; i < n_models; ++i) { - 184 44 : auto res = models[i]->show(); - 185 44 : result.insert(result.end(), res.begin(), res.end()); - 186 44 : } - 187 11 : return result; + 182 6 : auto result = std::vector<std::string>(); + 183 30 : for (auto i = 0; i < n_models; ++i) { + 184 24 : auto res = models[i]->show(); + 185 24 : result.insert(result.end(), res.begin(), res.end()); + 186 24 : } + 187 6 : return result; 188 0 : } - 189 33 : std::vector<std::string> Ensemble::graph(const std::string& title) const + 189 18 : std::vector<std::string> Ensemble::graph(const std::string& title) const 190 : { - 191 33 : auto result = std::vector<std::string>(); - 192 220 : for (auto i = 0; i < n_models; ++i) { - 193 187 : auto res = models[i]->graph(title + "_" + std::to_string(i)); - 194 187 : result.insert(result.end(), res.begin(), res.end()); - 195 187 : } - 196 33 : return result; + 191 18 : auto result = std::vector<std::string>(); + 192 120 : for (auto i = 0; i < n_models; ++i) { + 193 102 : auto res = models[i]->graph(title + "_" + std::to_string(i)); + 194 102 : result.insert(result.end(), res.begin(), res.end()); + 195 102 : } + 196 18 : return result; 197 0 : } - 198 70 : int Ensemble::getNumberOfNodes() const + 198 36 : int Ensemble::getNumberOfNodes() const 199 : { - 200 70 : int nodes = 0; - 201 512 : for (auto i = 0; i < n_models; ++i) { - 202 442 : nodes += models[i]->getNumberOfNodes(); + 200 36 : int nodes = 0; + 201 300 : for (auto i = 0; i < n_models; ++i) { + 202 264 : nodes += models[i]->getNumberOfNodes(); 203 : } - 204 70 : return nodes; + 204 36 : return nodes; 205 : } - 206 70 : int Ensemble::getNumberOfEdges() const + 206 36 : int Ensemble::getNumberOfEdges() const 207 : { - 208 70 : int edges = 0; - 209 512 : for (auto i = 0; i < n_models; ++i) { - 210 442 : edges += models[i]->getNumberOfEdges(); + 208 36 : int edges = 0; + 209 300 : for (auto i = 0; i < n_models; ++i) { + 210 264 : edges += models[i]->getNumberOfEdges(); 211 : } - 212 70 : return edges; + 212 36 : return edges; 213 : } - 214 11 : int Ensemble::getNumberOfStates() const + 214 6 : int Ensemble::getNumberOfStates() const 215 : { - 216 11 : int nstates = 0; - 217 55 : for (auto i = 0; i < n_models; ++i) { - 218 44 : nstates += models[i]->getNumberOfStates(); + 216 6 : int nstates = 0; + 217 30 : for (auto i = 0; i < n_models; ++i) { + 218 24 : nstates += models[i]->getNumberOfStates(); 219 : } - 220 11 : return nstates; + 220 6 : return nstates; 221 : } 222 : } diff --git a/html/bayesnet/ensembles/Ensemble.h.func-c.html b/html/bayesnet/ensembles/Ensemble.h.func-c.html index 49ed65c..130e61a 100644 --- a/html/bayesnet/ensembles/Ensemble.h.func-c.html +++ b/html/bayesnet/ensembles/Ensemble.h.func-c.html @@ -37,11 +37,11 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 75.0 % - 4 + 100.0 % + 3 3 @@ -63,37 +63,23 @@ - _ZNK8bayesnet8Ensemble8dump_cptB5cxx11Ev + bayesnet::Ensemble::dump_cpt[abi:cxx11]() const - 2 + 12 - _ZN8bayesnet8Ensemble17topological_orderB5cxx11Ev + bayesnet::Ensemble::topological_order[abi:cxx11]() - 3 + 18 - _ZN8bayesnet8EnsembleD0Ev + bayesnet::Ensemble::~Ensemble() - 27 - - - - - _ZN8bayesnet8EnsembleD0Ev - - 0 - - - - - _ZN8bayesnet8EnsembleD2Ev - - 27 + 168 diff --git a/html/bayesnet/ensembles/Ensemble.h.func.html b/html/bayesnet/ensembles/Ensemble.h.func.html index d1392ea..8caed4b 100644 --- a/html/bayesnet/ensembles/Ensemble.h.func.html +++ b/html/bayesnet/ensembles/Ensemble.h.func.html @@ -37,11 +37,11 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 75.0 % - 4 + 100.0 % + 3 3 @@ -63,37 +63,23 @@ - _ZN8bayesnet8Ensemble17topological_orderB5cxx11Ev + bayesnet::Ensemble::dump_cpt[abi:cxx11]() const - 3 + 12 - _ZN8bayesnet8EnsembleD0Ev + bayesnet::Ensemble::topological_order[abi:cxx11]() - 27 + 18 - _ZN8bayesnet8EnsembleD0Ev + bayesnet::Ensemble::~Ensemble() - 0 - - - - - _ZN8bayesnet8EnsembleD2Ev - - 27 - - - - - _ZNK8bayesnet8Ensemble8dump_cptB5cxx11Ev - - 2 + 168 diff --git a/html/bayesnet/ensembles/Ensemble.h.gcov.html b/html/bayesnet/ensembles/Ensemble.h.gcov.html index 53cbba4..6fc30f8 100644 --- a/html/bayesnet/ensembles/Ensemble.h.gcov.html +++ b/html/bayesnet/ensembles/Ensemble.h.gcov.html @@ -37,11 +37,11 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 75.0 % - 4 + 100.0 % + 3 3 @@ -77,7 +77,7 @@ 15 : class Ensemble : public Classifier { 16 : public: 17 : Ensemble(bool predict_voting = true); - 18 27 : virtual ~Ensemble() = default; + 18 168 : virtual ~Ensemble() = default; 19 : torch::Tensor predict(torch::Tensor& X) override; 20 : std::vector<int> predict(std::vector<std::vector<int>>& X) override; 21 : torch::Tensor predict_proba(torch::Tensor& X) override; @@ -89,13 +89,13 @@ 27 : int getNumberOfStates() const override; 28 : std::vector<std::string> show() const override; 29 : std::vector<std::string> graph(const std::string& title) const override; - 30 3 : std::vector<std::string> topological_order() override + 30 18 : std::vector<std::string> topological_order() override 31 : { - 32 3 : return std::vector<std::string>(); + 32 18 : return std::vector<std::string>(); 33 : } - 34 2 : std::string dump_cpt() const override + 34 12 : std::string dump_cpt() const override 35 : { - 36 4 : return ""; + 36 24 : return ""; 37 : } 38 : protected: 39 : torch::Tensor predict_average_voting(torch::Tensor& X); diff --git a/html/bayesnet/ensembles/index-sort-f.html b/html/bayesnet/ensembles/index-sort-f.html index aa9bc1d..2485de4 100644 --- a/html/bayesnet/ensembles/index-sort-f.html +++ b/html/bayesnet/ensembles/index-sort-f.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 98.1 % - 53 - 52 + 100.0 % + 49 + 49 @@ -79,18 +79,6 @@ Total Hit - - Ensemble.h - -
100.0%
- - 100.0 % - 5 - 5 - 75.0 % - 4 - 3 - AODE.h @@ -100,8 +88,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 AODELd.h @@ -112,8 +100,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 BoostAODE.h @@ -124,8 +112,20 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 + + + Ensemble.h + +
100.0%
+ + 100.0 % + 5 + 5 + 100.0 % + 3 + 3 AODE.cc diff --git a/html/bayesnet/ensembles/index-sort-l.html b/html/bayesnet/ensembles/index-sort-l.html index 7686195..f29eb65 100644 --- a/html/bayesnet/ensembles/index-sort-l.html +++ b/html/bayesnet/ensembles/index-sort-l.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 98.1 % - 53 - 52 + 100.0 % + 49 + 49 @@ -112,8 +112,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 AODELd.h @@ -124,8 +124,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 BoostAODE.h @@ -136,8 +136,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 Ensemble.h @@ -147,8 +147,8 @@ 100.0 % 5 5 - 75.0 % - 4 + 100.0 % + 3 3 diff --git a/html/bayesnet/ensembles/index.html b/html/bayesnet/ensembles/index.html index a1696e3..3781825 100644 --- a/html/bayesnet/ensembles/index.html +++ b/html/bayesnet/ensembles/index.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 98.1 % - 53 - 52 + 100.0 % + 49 + 49 @@ -100,8 +100,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 AODELd.cc @@ -124,8 +124,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 BoostAODE.cc @@ -148,8 +148,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 Ensemble.cc @@ -171,8 +171,8 @@ 100.0 % 5 5 - 75.0 % - 4 + 100.0 % + 3 3 diff --git a/html/bayesnet/feature_selection/CFS.cc.func-c.html b/html/bayesnet/feature_selection/CFS.cc.func-c.html index f7bc825..11f733c 100644 --- a/html/bayesnet/feature_selection/CFS.cc.func-c.html +++ b/html/bayesnet/feature_selection/CFS.cc.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,16 +63,16 @@ - _ZN8bayesnet3CFS3fitEv + bayesnet::CFS::fit() - 70 + 40 - _ZN8bayesnet3CFS24computeContinueConditionERKSt6vectorIiSaIiEE + bayesnet::CFS::computeContinueCondition(std::vector<int, std::allocator<int> > const&) - 328 + 186 diff --git a/html/bayesnet/feature_selection/CFS.cc.func.html b/html/bayesnet/feature_selection/CFS.cc.func.html index 55ddef8..aef3596 100644 --- a/html/bayesnet/feature_selection/CFS.cc.func.html +++ b/html/bayesnet/feature_selection/CFS.cc.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,16 +63,16 @@ - _ZN8bayesnet3CFS24computeContinueConditionERKSt6vectorIiSaIiEE + bayesnet::CFS::computeContinueCondition(std::vector<int, std::allocator<int> > const&) - 328 + 186 - _ZN8bayesnet3CFS3fitEv + bayesnet::CFS::fit() - 70 + 40 diff --git a/html/bayesnet/feature_selection/CFS.cc.gcov.html b/html/bayesnet/feature_selection/CFS.cc.gcov.html index 315fb85..e0749b7 100644 --- a/html/bayesnet/feature_selection/CFS.cc.gcov.html +++ b/html/bayesnet/feature_selection/CFS.cc.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -70,46 +70,46 @@ 8 : #include "bayesnet/utils/bayesnetUtils.h" 9 : #include "CFS.h" 10 : namespace bayesnet { - 11 70 : void CFS::fit() + 11 40 : void CFS::fit() 12 : { - 13 70 : initialize(); - 14 70 : computeSuLabels(); - 15 70 : auto featureOrder = argsort(suLabels); // sort descending order - 16 70 : auto continueCondition = true; - 17 70 : auto feature = featureOrder[0]; - 18 70 : selectedFeatures.push_back(feature); - 19 70 : selectedScores.push_back(suLabels[feature]); - 20 70 : featureOrder.erase(featureOrder.begin()); - 21 398 : while (continueCondition) { - 22 328 : double merit = std::numeric_limits<double>::lowest(); - 23 328 : int bestFeature = -1; - 24 1929 : for (auto feature : featureOrder) { - 25 1601 : selectedFeatures.push_back(feature); + 13 40 : initialize(); + 14 40 : computeSuLabels(); + 15 40 : auto featureOrder = argsort(suLabels); // sort descending order + 16 40 : auto continueCondition = true; + 17 40 : auto feature = featureOrder[0]; + 18 40 : selectedFeatures.push_back(feature); + 19 40 : selectedScores.push_back(suLabels[feature]); + 20 40 : featureOrder.erase(featureOrder.begin()); + 21 226 : while (continueCondition) { + 22 186 : double merit = std::numeric_limits<double>::lowest(); + 23 186 : int bestFeature = -1; + 24 1083 : for (auto feature : featureOrder) { + 25 897 : selectedFeatures.push_back(feature); 26 : // Compute merit with selectedFeatures - 27 1601 : auto meritNew = computeMeritCFS(); - 28 1601 : if (meritNew > merit) { - 29 663 : merit = meritNew; - 30 663 : bestFeature = feature; + 27 897 : auto meritNew = computeMeritCFS(); + 28 897 : if (meritNew > merit) { + 29 379 : merit = meritNew; + 30 379 : bestFeature = feature; 31 : } - 32 1601 : selectedFeatures.pop_back(); + 32 897 : selectedFeatures.pop_back(); 33 : } - 34 328 : if (bestFeature == -1) { + 34 186 : if (bestFeature == -1) { 35 : // meritNew has to be nan due to constant features 36 0 : break; 37 : } - 38 328 : selectedFeatures.push_back(bestFeature); - 39 328 : selectedScores.push_back(merit); - 40 328 : featureOrder.erase(remove(featureOrder.begin(), featureOrder.end(), bestFeature), featureOrder.end()); - 41 328 : continueCondition = computeContinueCondition(featureOrder); + 38 186 : selectedFeatures.push_back(bestFeature); + 39 186 : selectedScores.push_back(merit); + 40 186 : featureOrder.erase(remove(featureOrder.begin(), featureOrder.end(), bestFeature), featureOrder.end()); + 41 186 : continueCondition = computeContinueCondition(featureOrder); 42 : } - 43 70 : fitted = true; - 44 70 : } - 45 328 : bool CFS::computeContinueCondition(const std::vector<int>& featureOrder) + 43 40 : fitted = true; + 44 40 : } + 45 186 : bool CFS::computeContinueCondition(const std::vector<int>& featureOrder) 46 : { - 47 328 : if (selectedFeatures.size() == maxFeatures || featureOrder.size() == 0) { - 48 11 : return false; + 47 186 : if (selectedFeatures.size() == maxFeatures || featureOrder.size() == 0) { + 48 7 : return false; 49 : } - 50 317 : if (selectedScores.size() >= 5) { + 50 179 : if (selectedScores.size() >= 5) { 51 : /* 52 : "To prevent the best first search from exploring the entire 53 : feature subset search space, a stopping criterion is imposed. @@ -117,25 +117,25 @@ 55 : subsets show no improvement over the current best subset." 56 : as stated in Mark A.Hall Thesis 57 : */ - 58 118 : double item_ant = std::numeric_limits<double>::lowest(); - 59 118 : int num = 0; - 60 118 : std::vector<double> lastFive(selectedScores.end() - 5, selectedScores.end()); - 61 472 : for (auto item : lastFive) { - 62 413 : if (item_ant == std::numeric_limits<double>::lowest()) { - 63 118 : item_ant = item; + 58 66 : double item_ant = std::numeric_limits<double>::lowest(); + 59 66 : int num = 0; + 60 66 : std::vector<double> lastFive(selectedScores.end() - 5, selectedScores.end()); + 61 264 : for (auto item : lastFive) { + 62 231 : if (item_ant == std::numeric_limits<double>::lowest()) { + 63 66 : item_ant = item; 64 : } - 65 413 : if (item > item_ant) { - 66 59 : break; + 65 231 : if (item > item_ant) { + 66 33 : break; 67 : } else { - 68 354 : num++; - 69 354 : item_ant = item; + 68 198 : num++; + 69 198 : item_ant = item; 70 : } 71 : } - 72 118 : if (num == 5) { - 73 59 : return false; + 72 66 : if (num == 5) { + 73 33 : return false; 74 : } - 75 118 : } - 76 258 : return true; + 75 66 : } + 76 146 : return true; 77 : } 78 : } diff --git a/html/bayesnet/feature_selection/CFS.h.func-c.html b/html/bayesnet/feature_selection/CFS.h.func-c.html index 4ba9f1b..c2472d4 100644 --- a/html/bayesnet/feature_selection/CFS.h.func-c.html +++ b/html/bayesnet/feature_selection/CFS.h.func-c.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 3 - 3 + 2 + 2 @@ -63,30 +63,16 @@ - _ZN8bayesnet3CFSC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_iiS4_ + bayesnet::CFS::CFS(at::Tensor const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, int, at::Tensor const&) - 6 + 26 - _ZN8bayesnet3CFSD0Ev + bayesnet::CFS::~CFS() - 140 - - - - - _ZN8bayesnet3CFSD0Ev - - 70 - - - - - _ZN8bayesnet3CFSD2Ev - - 70 + 88 diff --git a/html/bayesnet/feature_selection/CFS.h.func.html b/html/bayesnet/feature_selection/CFS.h.func.html index 4c069fc..8b0df43 100644 --- a/html/bayesnet/feature_selection/CFS.h.func.html +++ b/html/bayesnet/feature_selection/CFS.h.func.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 3 - 3 + 2 + 2 @@ -63,30 +63,16 @@ - _ZN8bayesnet3CFSC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_iiS4_ + bayesnet::CFS::CFS(at::Tensor const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, int, at::Tensor const&) - 6 + 26 - _ZN8bayesnet3CFSD0Ev + bayesnet::CFS::~CFS() - 140 - - - - - _ZN8bayesnet3CFSD0Ev - - 70 - - - - - _ZN8bayesnet3CFSD2Ev - - 70 + 88 diff --git a/html/bayesnet/feature_selection/CFS.h.gcov.html b/html/bayesnet/feature_selection/CFS.h.gcov.html index 2f770e8..f8b8801 100644 --- a/html/bayesnet/feature_selection/CFS.h.gcov.html +++ b/html/bayesnet/feature_selection/CFS.h.gcov.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 3 - 3 + 2 + 2 @@ -75,11 +75,11 @@ 13 : class CFS : public FeatureSelect { 14 : public: 15 : // dataset is a n+1xm tensor of integers where dataset[-1] is the y std::vector - 16 6 : CFS(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int maxFeatures, const int classNumStates, const torch::Tensor& weights) : - 17 6 : FeatureSelect(samples, features, className, maxFeatures, classNumStates, weights) + 16 26 : CFS(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int maxFeatures, const int classNumStates, const torch::Tensor& weights) : + 17 26 : FeatureSelect(samples, features, className, maxFeatures, classNumStates, weights) 18 : { - 19 6 : } - 20 140 : virtual ~CFS() {}; + 19 26 : } + 20 88 : virtual ~CFS() {}; 21 : void fit() override; 22 : private: 23 : bool computeContinueCondition(const std::vector<int>& featureOrder); diff --git a/html/bayesnet/feature_selection/FCBF.cc.func-c.html b/html/bayesnet/feature_selection/FCBF.cc.func-c.html index e2df0b3..a33fef7 100644 --- a/html/bayesnet/feature_selection/FCBF.cc.func-c.html +++ b/html/bayesnet/feature_selection/FCBF.cc.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,16 +63,16 @@ - _ZN8bayesnet4FCBF3fitEv + bayesnet::FCBF::fit() - 56 + 34 - _ZN8bayesnet4FCBFC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_iiS4_d + bayesnet::FCBF::FCBF(at::Tensor const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, int, at::Tensor const&, double) - 78 + 48 diff --git a/html/bayesnet/feature_selection/FCBF.cc.func.html b/html/bayesnet/feature_selection/FCBF.cc.func.html index 9a3c63d..fb4d82d 100644 --- a/html/bayesnet/feature_selection/FCBF.cc.func.html +++ b/html/bayesnet/feature_selection/FCBF.cc.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,16 +63,16 @@ - _ZN8bayesnet4FCBF3fitEv + bayesnet::FCBF::FCBF(at::Tensor const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, int, at::Tensor const&, double) - 56 + 48 - _ZN8bayesnet4FCBFC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_iiS4_d + bayesnet::FCBF::fit() - 78 + 34 diff --git a/html/bayesnet/feature_selection/FCBF.cc.gcov.html b/html/bayesnet/feature_selection/FCBF.cc.gcov.html index 8afb556..4fed4df 100644 --- a/html/bayesnet/feature_selection/FCBF.cc.gcov.html +++ b/html/bayesnet/feature_selection/FCBF.cc.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -70,45 +70,45 @@ 8 : #include "FCBF.h" 9 : namespace bayesnet { 10 : - 11 78 : FCBF::FCBF(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int maxFeatures, const int classNumStates, const torch::Tensor& weights, const double threshold) : - 12 78 : FeatureSelect(samples, features, className, maxFeatures, classNumStates, weights), threshold(threshold) + 11 48 : FCBF::FCBF(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int maxFeatures, const int classNumStates, const torch::Tensor& weights, const double threshold) : + 12 48 : FeatureSelect(samples, features, className, maxFeatures, classNumStates, weights), threshold(threshold) 13 : { - 14 78 : if (threshold < 1e-7) { - 15 22 : throw std::invalid_argument("Threshold cannot be less than 1e-7"); + 14 48 : if (threshold < 1e-7) { + 15 14 : throw std::invalid_argument("Threshold cannot be less than 1e-7"); 16 : } - 17 78 : } - 18 56 : void FCBF::fit() + 17 48 : } + 18 34 : void FCBF::fit() 19 : { - 20 56 : initialize(); - 21 56 : computeSuLabels(); - 22 56 : auto featureOrder = argsort(suLabels); // sort descending order - 23 56 : auto featureOrderCopy = featureOrder; - 24 472 : for (const auto& feature : featureOrder) { + 20 34 : initialize(); + 21 34 : computeSuLabels(); + 22 34 : auto featureOrder = argsort(suLabels); // sort descending order + 23 34 : auto featureOrderCopy = featureOrder; + 24 284 : for (const auto& feature : featureOrder) { 25 : // Don't self compare - 26 416 : featureOrderCopy.erase(featureOrderCopy.begin()); - 27 416 : if (suLabels.at(feature) == 0.0) { + 26 250 : featureOrderCopy.erase(featureOrderCopy.begin()); + 27 250 : if (suLabels.at(feature) == 0.0) { 28 : // The feature has been removed from the list - 29 180 : continue; + 29 108 : continue; 30 : } - 31 236 : if (suLabels.at(feature) < threshold) { + 31 142 : if (suLabels.at(feature) < threshold) { 32 0 : break; 33 : } 34 : // Remove redundant features - 35 1307 : for (const auto& featureCopy : featureOrderCopy) { - 36 1071 : double value = computeSuFeatures(feature, featureCopy); - 37 1071 : if (value >= suLabels.at(featureCopy)) { + 35 781 : for (const auto& featureCopy : featureOrderCopy) { + 36 639 : double value = computeSuFeatures(feature, featureCopy); + 37 639 : if (value >= suLabels.at(featureCopy)) { 38 : // Remove feature from list - 39 373 : suLabels[featureCopy] = 0.0; + 39 221 : suLabels[featureCopy] = 0.0; 40 : } 41 : } - 42 236 : selectedFeatures.push_back(feature); - 43 236 : selectedScores.push_back(suLabels[feature]); - 44 236 : if (selectedFeatures.size() == maxFeatures) { + 42 142 : selectedFeatures.push_back(feature); + 43 142 : selectedScores.push_back(suLabels[feature]); + 44 142 : if (selectedFeatures.size() == maxFeatures) { 45 0 : break; 46 : } 47 : } - 48 56 : fitted = true; - 49 56 : } + 48 34 : fitted = true; + 49 34 : } 50 : } diff --git a/html/bayesnet/feature_selection/FCBF.h.func-c.html b/html/bayesnet/feature_selection/FCBF.h.func-c.html index faf32d1..3ed4f71 100644 --- a/html/bayesnet/feature_selection/FCBF.h.func-c.html +++ b/html/bayesnet/feature_selection/FCBF.h.func-c.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet4FCBFD0Ev + bayesnet::FCBF::~FCBF() - 10 - - - - - _ZN8bayesnet4FCBFD0Ev - - 5 - - - - - _ZN8bayesnet4FCBFD2Ev - - 5 + 38 diff --git a/html/bayesnet/feature_selection/FCBF.h.func.html b/html/bayesnet/feature_selection/FCBF.h.func.html index bcd6055..d83d331 100644 --- a/html/bayesnet/feature_selection/FCBF.h.func.html +++ b/html/bayesnet/feature_selection/FCBF.h.func.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet4FCBFD0Ev + bayesnet::FCBF::~FCBF() - 10 - - - - - _ZN8bayesnet4FCBFD0Ev - - 5 - - - - - _ZN8bayesnet4FCBFD2Ev - - 5 + 38 diff --git a/html/bayesnet/feature_selection/FCBF.h.gcov.html b/html/bayesnet/feature_selection/FCBF.h.gcov.html index 402d5b3..cec7514 100644 --- a/html/bayesnet/feature_selection/FCBF.h.gcov.html +++ b/html/bayesnet/feature_selection/FCBF.h.gcov.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -76,7 +76,7 @@ 14 : public: 15 : // dataset is a n+1xm tensor of integers where dataset[-1] is the y std::vector 16 : FCBF(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int maxFeatures, const int classNumStates, const torch::Tensor& weights, const double threshold); - 17 10 : virtual ~FCBF() {}; + 17 38 : virtual ~FCBF() {}; 18 : void fit() override; 19 : private: 20 : double threshold = -1; diff --git a/html/bayesnet/feature_selection/FeatureSelect.cc.func-c.html b/html/bayesnet/feature_selection/FeatureSelect.cc.func-c.html index 0487944..c36db66 100644 --- a/html/bayesnet/feature_selection/FeatureSelect.cc.func-c.html +++ b/html/bayesnet/feature_selection/FeatureSelect.cc.func-c.html @@ -31,13 +31,13 @@ coverage.info Lines: - 95.5 % + 100.0 % + 44 44 - 42 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,58 +63,58 @@ - _ZN8bayesnet13FeatureSelect10initializeEv + bayesnet::FeatureSelect::computeSuLabels() - 184 + 108 - _ZN8bayesnet13FeatureSelect15computeSuLabelsEv + bayesnet::FeatureSelect::initialize() - 184 + 108 - _ZNK8bayesnet13FeatureSelect11getFeaturesEv + bayesnet::FeatureSelect::getFeatures() const - 184 + 116 - _ZNK8bayesnet13FeatureSelect9getScoresEv + bayesnet::FeatureSelect::getScores() const - 184 + 116 - _ZN8bayesnet13FeatureSelectC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_iiS4_ + bayesnet::FeatureSelect::FeatureSelect(at::Tensor const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, int, at::Tensor const&) - 250 + 154 - _ZN8bayesnet13FeatureSelect15computeMeritCFSEv + bayesnet::FeatureSelect::computeMeritCFS() - 1851 + 1047 - _ZN8bayesnet13FeatureSelect22symmetricalUncertaintyEii + bayesnet::FeatureSelect::symmetricalUncertainty(int, int) - 5151 + 2751 - _ZN8bayesnet13FeatureSelect17computeSuFeaturesEii + bayesnet::FeatureSelect::computeSuFeatures(int, int) - 11429 + 6499 diff --git a/html/bayesnet/feature_selection/FeatureSelect.cc.func.html b/html/bayesnet/feature_selection/FeatureSelect.cc.func.html index 25a2c63..2bdd1de 100644 --- a/html/bayesnet/feature_selection/FeatureSelect.cc.func.html +++ b/html/bayesnet/feature_selection/FeatureSelect.cc.func.html @@ -31,13 +31,13 @@ coverage.info Lines: - 95.5 % + 100.0 % + 44 44 - 42 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,58 +63,58 @@ - _ZN8bayesnet13FeatureSelect10initializeEv + bayesnet::FeatureSelect::FeatureSelect(at::Tensor const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, int, at::Tensor const&) - 184 + 154 - _ZN8bayesnet13FeatureSelect15computeMeritCFSEv + bayesnet::FeatureSelect::computeMeritCFS() - 1851 + 1047 - _ZN8bayesnet13FeatureSelect15computeSuLabelsEv + bayesnet::FeatureSelect::computeSuFeatures(int, int) - 184 + 6499 - _ZN8bayesnet13FeatureSelect17computeSuFeaturesEii + bayesnet::FeatureSelect::computeSuLabels() - 11429 + 108 - _ZN8bayesnet13FeatureSelect22symmetricalUncertaintyEii + bayesnet::FeatureSelect::getFeatures() const - 5151 + 116 - _ZN8bayesnet13FeatureSelectC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_iiS4_ + bayesnet::FeatureSelect::getScores() const - 250 + 116 - _ZNK8bayesnet13FeatureSelect11getFeaturesEv + bayesnet::FeatureSelect::initialize() - 184 + 108 - _ZNK8bayesnet13FeatureSelect9getScoresEv + bayesnet::FeatureSelect::symmetricalUncertainty(int, int) - 184 + 2751 diff --git a/html/bayesnet/feature_selection/FeatureSelect.cc.gcov.html b/html/bayesnet/feature_selection/FeatureSelect.cc.gcov.html index 0bc9883..b448081 100644 --- a/html/bayesnet/feature_selection/FeatureSelect.cc.gcov.html +++ b/html/bayesnet/feature_selection/FeatureSelect.cc.gcov.html @@ -31,13 +31,13 @@ coverage.info Lines: - 95.5 % + 100.0 % + 44 44 - 42 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -70,17 +70,17 @@ 8 : #include "bayesnet/utils/bayesnetUtils.h" 9 : #include "FeatureSelect.h" 10 : namespace bayesnet { - 11 250 : FeatureSelect::FeatureSelect(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int maxFeatures, const int classNumStates, const torch::Tensor& weights) : - 12 250 : Metrics(samples, features, className, classNumStates), maxFeatures(maxFeatures == 0 ? samples.size(0) - 1 : maxFeatures), weights(weights) + 11 154 : FeatureSelect::FeatureSelect(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int maxFeatures, const int classNumStates, const torch::Tensor& weights) : + 12 154 : Metrics(samples, features, className, classNumStates), maxFeatures(maxFeatures == 0 ? samples.size(0) - 1 : maxFeatures), weights(weights) 13 : 14 : { - 15 250 : } - 16 184 : void FeatureSelect::initialize() + 15 154 : } + 16 108 : void FeatureSelect::initialize() 17 : { - 18 184 : selectedFeatures.clear(); - 19 184 : selectedScores.clear(); - 20 184 : } - 21 5151 : double FeatureSelect::symmetricalUncertainty(int a, int b) + 18 108 : selectedFeatures.clear(); + 19 108 : selectedScores.clear(); + 20 108 : } + 21 2751 : double FeatureSelect::symmetricalUncertainty(int a, int b) 22 : { 23 : /* 24 : Compute symmetrical uncertainty. Normalize* information gain (mutual @@ -88,60 +88,60 @@ 26 : the bias due to high cardinality features. *Range [0, 1] 27 : (https://www.sciencedirect.com/science/article/pii/S0020025519303603) 28 : */ - 29 15453 : auto x = samples.index({ a, "..." }); - 30 15453 : auto y = samples.index({ b, "..." }); - 31 5151 : auto mu = mutualInformation(x, y, weights); - 32 5151 : auto hx = entropy(x, weights); - 33 5151 : auto hy = entropy(y, weights); - 34 5151 : return 2.0 * mu / (hx + hy); - 35 15453 : } - 36 184 : void FeatureSelect::computeSuLabels() + 29 8253 : auto x = samples.index({ a, "..." }); + 30 8253 : auto y = samples.index({ b, "..." }); + 31 2751 : auto mu = mutualInformation(x, y, weights); + 32 2751 : auto hx = entropy(x, weights); + 33 2751 : auto hy = entropy(y, weights); + 34 2751 : return 2.0 * mu / (hx + hy); + 35 8253 : } + 36 108 : void FeatureSelect::computeSuLabels() 37 : { 38 : // Compute Simmetrical Uncertainty between features and labels 39 : // https://en.wikipedia.org/wiki/Symmetric_uncertainty - 40 1976 : for (int i = 0; i < features.size(); ++i) { - 41 1792 : suLabels.push_back(symmetricalUncertainty(i, -1)); + 40 906 : for (int i = 0; i < features.size(); ++i) { + 41 798 : suLabels.push_back(symmetricalUncertainty(i, -1)); 42 : } - 43 184 : } - 44 11429 : double FeatureSelect::computeSuFeatures(const int firstFeature, const int secondFeature) + 43 108 : } + 44 6499 : double FeatureSelect::computeSuFeatures(const int firstFeature, const int secondFeature) 45 : { 46 : // Compute Simmetrical Uncertainty between features 47 : // https://en.wikipedia.org/wiki/Symmetric_uncertainty 48 : try { - 49 11429 : return suFeatures.at({ firstFeature, secondFeature }); + 49 6499 : return suFeatures.at({ firstFeature, secondFeature }); 50 : } - 51 3359 : catch (const std::out_of_range& e) { - 52 3359 : double result = symmetricalUncertainty(firstFeature, secondFeature); - 53 3359 : suFeatures[{firstFeature, secondFeature}] = result; - 54 3359 : return result; - 55 3359 : } + 51 1953 : catch (const std::out_of_range& e) { + 52 1953 : double result = symmetricalUncertainty(firstFeature, secondFeature); + 53 1953 : suFeatures[{firstFeature, secondFeature}] = result; + 54 1953 : return result; + 55 1953 : } 56 : } - 57 1851 : double FeatureSelect::computeMeritCFS() + 57 1047 : double FeatureSelect::computeMeritCFS() 58 : { - 59 1851 : double rcf = 0; - 60 8514 : for (auto feature : selectedFeatures) { - 61 6663 : rcf += suLabels[feature]; + 59 1047 : double rcf = 0; + 60 4816 : for (auto feature : selectedFeatures) { + 61 3769 : rcf += suLabels[feature]; 62 : } - 63 1851 : double rff = 0; - 64 1851 : int n = selectedFeatures.size(); - 65 12209 : for (const auto& item : doCombinations(selectedFeatures)) { - 66 10358 : rff += computeSuFeatures(item.first, item.second); - 67 1851 : } - 68 1851 : return rcf / sqrt(n + (n * n - n) * rff); + 63 1047 : double rff = 0; + 64 1047 : int n = selectedFeatures.size(); + 65 6907 : for (const auto& item : doCombinations(selectedFeatures)) { + 66 5860 : rff += computeSuFeatures(item.first, item.second); + 67 1047 : } + 68 1047 : return rcf / sqrt(n + (n * n - n) * rff); 69 : } - 70 184 : std::vector<int> FeatureSelect::getFeatures() const + 70 116 : std::vector<int> FeatureSelect::getFeatures() const 71 : { - 72 184 : if (!fitted) { - 73 0 : throw std::runtime_error("FeatureSelect not fitted"); + 72 116 : if (!fitted) { + 73 8 : throw std::runtime_error("FeatureSelect not fitted"); 74 : } - 75 184 : return selectedFeatures; + 75 108 : return selectedFeatures; 76 : } - 77 184 : std::vector<double> FeatureSelect::getScores() const + 77 116 : std::vector<double> FeatureSelect::getScores() const 78 : { - 79 184 : if (!fitted) { - 80 0 : throw std::runtime_error("FeatureSelect not fitted"); + 79 116 : if (!fitted) { + 80 8 : throw std::runtime_error("FeatureSelect not fitted"); 81 : } - 82 184 : return selectedScores; + 82 108 : return selectedScores; 83 : } 84 : } diff --git a/html/bayesnet/feature_selection/FeatureSelect.h.func-c.html b/html/bayesnet/feature_selection/FeatureSelect.h.func-c.html index d50f2cc..fa062e7 100644 --- a/html/bayesnet/feature_selection/FeatureSelect.h.func-c.html +++ b/html/bayesnet/feature_selection/FeatureSelect.h.func-c.html @@ -37,11 +37,11 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 50.0 % - 2 + 100.0 % + 1 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet13FeatureSelectD0Ev + bayesnet::FeatureSelect::~FeatureSelect() - 22 - - - - - _ZN8bayesnet13FeatureSelectD0Ev - - 0 - - - - - _ZN8bayesnet13FeatureSelectD2Ev - - 22 + 88 diff --git a/html/bayesnet/feature_selection/FeatureSelect.h.func.html b/html/bayesnet/feature_selection/FeatureSelect.h.func.html index ff9bc83..010ffc0 100644 --- a/html/bayesnet/feature_selection/FeatureSelect.h.func.html +++ b/html/bayesnet/feature_selection/FeatureSelect.h.func.html @@ -37,11 +37,11 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 50.0 % - 2 + 100.0 % + 1 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet13FeatureSelectD0Ev + bayesnet::FeatureSelect::~FeatureSelect() - 22 - - - - - _ZN8bayesnet13FeatureSelectD0Ev - - 0 - - - - - _ZN8bayesnet13FeatureSelectD2Ev - - 22 + 88 diff --git a/html/bayesnet/feature_selection/FeatureSelect.h.gcov.html b/html/bayesnet/feature_selection/FeatureSelect.h.gcov.html index 4d0d11f..dbdfa78 100644 --- a/html/bayesnet/feature_selection/FeatureSelect.h.gcov.html +++ b/html/bayesnet/feature_selection/FeatureSelect.h.gcov.html @@ -37,11 +37,11 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 50.0 % - 2 + 100.0 % + 1 1 @@ -76,7 +76,7 @@ 14 : public: 15 : // dataset is a n+1xm tensor of integers where dataset[-1] is the y std::vector 16 : FeatureSelect(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int maxFeatures, const int classNumStates, const torch::Tensor& weights); - 17 22 : virtual ~FeatureSelect() {}; + 17 88 : virtual ~FeatureSelect() {}; 18 : virtual void fit() = 0; 19 : std::vector<int> getFeatures() const; 20 : std::vector<double> getScores() const; diff --git a/html/bayesnet/feature_selection/IWSS.cc.func-c.html b/html/bayesnet/feature_selection/IWSS.cc.func-c.html index 13940a9..9e774cd 100644 --- a/html/bayesnet/feature_selection/IWSS.cc.func-c.html +++ b/html/bayesnet/feature_selection/IWSS.cc.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,16 +63,16 @@ - _ZN8bayesnet4IWSS3fitEv + bayesnet::IWSS::fit() - 58 + 34 - _ZN8bayesnet4IWSSC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_iiS4_d + bayesnet::IWSS::IWSS(at::Tensor const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, int, at::Tensor const&, double) - 102 + 62 diff --git a/html/bayesnet/feature_selection/IWSS.cc.func.html b/html/bayesnet/feature_selection/IWSS.cc.func.html index fcf94fd..38a58bc 100644 --- a/html/bayesnet/feature_selection/IWSS.cc.func.html +++ b/html/bayesnet/feature_selection/IWSS.cc.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,16 +63,16 @@ - _ZN8bayesnet4IWSS3fitEv + bayesnet::IWSS::IWSS(at::Tensor const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, int, at::Tensor const&, double) - 58 + 62 - _ZN8bayesnet4IWSSC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_iiS4_d + bayesnet::IWSS::fit() - 102 + 34 diff --git a/html/bayesnet/feature_selection/IWSS.cc.gcov.html b/html/bayesnet/feature_selection/IWSS.cc.gcov.html index 5720b93..a5cee91 100644 --- a/html/bayesnet/feature_selection/IWSS.cc.gcov.html +++ b/html/bayesnet/feature_selection/IWSS.cc.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -70,48 +70,48 @@ 8 : #include "bayesnet/utils/bayesnetUtils.h" 9 : #include "IWSS.h" 10 : namespace bayesnet { - 11 102 : IWSS::IWSS(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int maxFeatures, const int classNumStates, const torch::Tensor& weights, const double threshold) : - 12 102 : FeatureSelect(samples, features, className, maxFeatures, classNumStates, weights), threshold(threshold) + 11 62 : IWSS::IWSS(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int maxFeatures, const int classNumStates, const torch::Tensor& weights, const double threshold) : + 12 62 : FeatureSelect(samples, features, className, maxFeatures, classNumStates, weights), threshold(threshold) 13 : { - 14 102 : if (threshold < 0 || threshold > .5) { - 15 44 : throw std::invalid_argument("Threshold has to be in [0, 0.5]"); + 14 62 : if (threshold < 0 || threshold > .5) { + 15 28 : throw std::invalid_argument("Threshold has to be in [0, 0.5]"); 16 : } - 17 102 : } - 18 58 : void IWSS::fit() + 17 62 : } + 18 34 : void IWSS::fit() 19 : { - 20 58 : initialize(); - 21 58 : computeSuLabels(); - 22 58 : auto featureOrder = argsort(suLabels); // sort descending order - 23 58 : auto featureOrderCopy = featureOrder; + 20 34 : initialize(); + 21 34 : computeSuLabels(); + 22 34 : auto featureOrder = argsort(suLabels); // sort descending order + 23 34 : auto featureOrderCopy = featureOrder; 24 : // Add first and second features to result 25 : // First with its own score - 26 58 : auto first_feature = pop_first(featureOrderCopy); - 27 58 : selectedFeatures.push_back(first_feature); - 28 58 : selectedScores.push_back(suLabels.at(first_feature)); + 26 34 : auto first_feature = pop_first(featureOrderCopy); + 27 34 : selectedFeatures.push_back(first_feature); + 28 34 : selectedScores.push_back(suLabels.at(first_feature)); 29 : // Second with the score of the candidates - 30 58 : selectedFeatures.push_back(pop_first(featureOrderCopy)); - 31 58 : auto merit = computeMeritCFS(); - 32 58 : selectedScores.push_back(merit); - 33 192 : for (const auto feature : featureOrderCopy) { - 34 192 : selectedFeatures.push_back(feature); + 30 34 : selectedFeatures.push_back(pop_first(featureOrderCopy)); + 31 34 : auto merit = computeMeritCFS(); + 32 34 : selectedScores.push_back(merit); + 33 116 : for (const auto feature : featureOrderCopy) { + 34 116 : selectedFeatures.push_back(feature); 35 : // Compute merit with selectedFeatures - 36 192 : auto meritNew = computeMeritCFS(); - 37 192 : double delta = merit != 0.0 ? std::abs(merit - meritNew) / merit : 0.0; - 38 192 : if (meritNew > merit || delta < threshold) { - 39 134 : if (meritNew > merit) { + 36 116 : auto meritNew = computeMeritCFS(); + 37 116 : double delta = merit != 0.0 ? std::abs(merit - meritNew) / merit : 0.0; + 38 116 : if (meritNew > merit || delta < threshold) { + 39 82 : if (meritNew > merit) { 40 0 : merit = meritNew; 41 : } - 42 134 : selectedScores.push_back(meritNew); + 42 82 : selectedScores.push_back(meritNew); 43 : } else { - 44 58 : selectedFeatures.pop_back(); - 45 58 : break; + 44 34 : selectedFeatures.pop_back(); + 45 34 : break; 46 : } - 47 134 : if (selectedFeatures.size() == maxFeatures) { + 47 82 : if (selectedFeatures.size() == maxFeatures) { 48 0 : break; 49 : } 50 : } - 51 58 : fitted = true; - 52 58 : } + 51 34 : fitted = true; + 52 34 : } 53 : } diff --git a/html/bayesnet/feature_selection/IWSS.h.func-c.html b/html/bayesnet/feature_selection/IWSS.h.func-c.html index 0a3e46b..a1ad55c 100644 --- a/html/bayesnet/feature_selection/IWSS.h.func-c.html +++ b/html/bayesnet/feature_selection/IWSS.h.func-c.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet4IWSSD0Ev + bayesnet::IWSS::~IWSS() - 10 - - - - - _ZN8bayesnet4IWSSD0Ev - - 5 - - - - - _ZN8bayesnet4IWSSD2Ev - - 5 + 38 diff --git a/html/bayesnet/feature_selection/IWSS.h.func.html b/html/bayesnet/feature_selection/IWSS.h.func.html index e63cb1e..e57ad86 100644 --- a/html/bayesnet/feature_selection/IWSS.h.func.html +++ b/html/bayesnet/feature_selection/IWSS.h.func.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -63,23 +63,9 @@ - _ZN8bayesnet4IWSSD0Ev + bayesnet::IWSS::~IWSS() - 10 - - - - - _ZN8bayesnet4IWSSD0Ev - - 5 - - - - - _ZN8bayesnet4IWSSD2Ev - - 5 + 38 diff --git a/html/bayesnet/feature_selection/IWSS.h.gcov.html b/html/bayesnet/feature_selection/IWSS.h.gcov.html index ad1914a..8aa79b8 100644 --- a/html/bayesnet/feature_selection/IWSS.h.gcov.html +++ b/html/bayesnet/feature_selection/IWSS.h.gcov.html @@ -37,12 +37,12 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % - 2 - 2 + 1 + 1 @@ -76,7 +76,7 @@ 14 : public: 15 : // dataset is a n+1xm tensor of integers where dataset[-1] is the y std::vector 16 : IWSS(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int maxFeatures, const int classNumStates, const torch::Tensor& weights, const double threshold); - 17 10 : virtual ~IWSS() {}; + 17 38 : virtual ~IWSS() {}; 18 : void fit() override; 19 : private: 20 : double threshold = -1; diff --git a/html/bayesnet/feature_selection/index-sort-f.html b/html/bayesnet/feature_selection/index-sort-f.html index 1b08606..c6af075 100644 --- a/html/bayesnet/feature_selection/index-sort-f.html +++ b/html/bayesnet/feature_selection/index-sort-f.html @@ -31,18 +31,18 @@ coverage.info Lines: - 95.4 % + 96.7 % 152 - 145 + 147 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 95.7 % - 23 - 22 + 100.0 % + 19 + 19 @@ -79,6 +79,18 @@ Total Hit + + FCBF.h + +
100.0%
+ + 100.0 % + 1 + 1 + 100.0 % + 1 + 1 + FeatureSelect.h @@ -87,8 +99,20 @@ 100.0 % 1 1 - 50.0 % - 2 + 100.0 % + 1 + 1 + + + IWSS.h + +
100.0%
+ + 100.0 % + 1 + 1 + 100.0 % + 1 1 @@ -103,6 +127,18 @@ 2 2 + + CFS.h + +
100.0%
+ + 100.0 % + 4 + 4 + 100.0 % + 2 + 2 + FCBF.cc @@ -115,18 +151,6 @@ 2 2 - - FCBF.h - -
100.0%
- - 100.0 % - 1 - 1 - 100.0 % - 2 - 2 - IWSS.cc @@ -139,38 +163,14 @@ 2 2 - - IWSS.h - -
100.0%
- - 100.0 % - 1 - 1 - 100.0 % - 2 - 2 - - - CFS.h - -
100.0%
- - 100.0 % - 4 - 4 - 100.0 % - 3 - 3 - FeatureSelect.cc -
95.5%95.5%
+
100.0%
- 95.5 % + 100.0 % + 44 44 - 42 100.0 % 8 8 diff --git a/html/bayesnet/feature_selection/index-sort-l.html b/html/bayesnet/feature_selection/index-sort-l.html index 80170e6..11c73ff 100644 --- a/html/bayesnet/feature_selection/index-sort-l.html +++ b/html/bayesnet/feature_selection/index-sort-l.html @@ -31,18 +31,18 @@ coverage.info Lines: - 95.4 % + 96.7 % 152 - 145 + 147 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 95.7 % - 23 - 22 + 100.0 % + 19 + 19 @@ -103,18 +103,6 @@ 2 2 - - FeatureSelect.cc - -
95.5%95.5%
- - 95.5 % - 44 - 42 - 100.0 % - 8 - 8 - CFS.cc @@ -136,8 +124,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 FeatureSelect.h @@ -147,8 +135,8 @@ 100.0 % 1 1 - 50.0 % - 2 + 100.0 % + 1 1 @@ -160,8 +148,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 CFS.h @@ -172,8 +160,20 @@ 4 4 100.0 % - 3 - 3 + 2 + 2 + + + FeatureSelect.cc + +
100.0%
+ + 100.0 % + 44 + 44 + 100.0 % + 8 + 8 diff --git a/html/bayesnet/feature_selection/index.html b/html/bayesnet/feature_selection/index.html index b96e9c6..6b8ae39 100644 --- a/html/bayesnet/feature_selection/index.html +++ b/html/bayesnet/feature_selection/index.html @@ -31,18 +31,18 @@ coverage.info Lines: - 95.4 % + 96.7 % 152 - 145 + 147 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 95.7 % - 23 - 22 + 100.0 % + 19 + 19 @@ -100,8 +100,8 @@ 4 4 100.0 % - 3 - 3 + 2 + 2 FCBF.cc @@ -124,17 +124,17 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 FeatureSelect.cc -
95.5%95.5%
+
100.0%
- 95.5 % + 100.0 % + 44 44 - 42 100.0 % 8 8 @@ -147,8 +147,8 @@ 100.0 % 1 1 - 50.0 % - 2 + 100.0 % + 1 1 @@ -172,8 +172,8 @@ 1 1 100.0 % - 2 - 2 + 1 + 1 diff --git a/html/bayesnet/index-sort-f.html b/html/bayesnet/index-sort-f.html index d47749c..63514f4 100644 --- a/html/bayesnet/index-sort-f.html +++ b/html/bayesnet/index-sort-f.html @@ -37,11 +37,11 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 50.0 % - 2 + 100.0 % + 1 1 @@ -87,8 +87,8 @@ 100.0 % 1 1 - 50.0 % - 2 + 100.0 % + 1 1 diff --git a/html/bayesnet/index-sort-l.html b/html/bayesnet/index-sort-l.html index 41fd217..d3a3981 100644 --- a/html/bayesnet/index-sort-l.html +++ b/html/bayesnet/index-sort-l.html @@ -37,11 +37,11 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 50.0 % - 2 + 100.0 % + 1 1 @@ -87,8 +87,8 @@ 100.0 % 1 1 - 50.0 % - 2 + 100.0 % + 1 1 diff --git a/html/bayesnet/index.html b/html/bayesnet/index.html index 62fd9de..b0a17ad 100644 --- a/html/bayesnet/index.html +++ b/html/bayesnet/index.html @@ -37,11 +37,11 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 50.0 % - 2 + 100.0 % + 1 1 @@ -87,8 +87,8 @@ 100.0 % 1 1 - 50.0 % - 2 + 100.0 % + 1 1 diff --git a/html/bayesnet/network/Network.cc.func-c.html b/html/bayesnet/network/Network.cc.func-c.html index bb0c95a..4f2dabd 100644 --- a/html/bayesnet/network/Network.cc.func-c.html +++ b/html/bayesnet/network/Network.cc.func-c.html @@ -31,13 +31,13 @@ coverage.info Lines: - 97.6 % - 297 + 98.3 % + 295 290 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,282 +63,282 @@ - _ZN8bayesnet7Network3fitERKN2at6TensorES4_S4_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_RKSt3mapISB_S5_IiSaIiEESt4lessISB_ESaISt4pairISG_SK_EEE + bayesnet::Network::fit(at::Tensor const&, at::Tensor const&, at::Tensor const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&) - 11 + 2 - _ZN8bayesnet7NetworkC2Ef + bayesnet::Network::Network(float) - 22 + 4 - _ZNK8bayesnet7Network8dump_cptB5cxx11Ev + bayesnet::Network::dump_cpt[abi:cxx11]() const - 22 + 4 - _ZN8bayesnet7Network5scoreERKSt6vectorIS1_IiSaIiEESaIS3_EERKS3_ + bayesnet::Network::score(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > > const&, std::vector<int, std::allocator<int> > const&) - 55 + 10 - _ZNK8bayesnet7Network4showB5cxx11Ev + bayesnet::Network::show[abi:cxx11]() const - 77 + 14 - _ZN8bayesnet7Network10getSamplesEv + bayesnet::Network::getSamples() + + 24 + + + + + bayesnet::Network::getStates() const + + 24 + + + + + bayesnet::Network::predict(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > > const&) + + 24 + + + + + bayesnet::Network::fit(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > > const&, std::vector<int, std::allocator<int> > const&, std::vector<double, std::allocator<double> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&) + + 42 + + + + + bayesnet::Network::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const + + 44 + + + + + bayesnet::Network::getNumEdges() const + + 110 + + + + + bayesnet::Network::topological_sort[abi:cxx11]() + + 110 + + + + + bayesnet::Network::getFeatures[abi:cxx11]() const + + 118 + + + + + bayesnet::Network::getEdges[abi:cxx11]() const 132 - _ZN8bayesnet7Network7predictERKSt6vectorIS1_IiSaIiEESaIS3_EE + bayesnet::Network::predict_proba(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > > const&) 132 - _ZNK8bayesnet7Network9getStatesEv + bayesnet::Network::initialize() - 132 + 634 - _ZN8bayesnet7Network3fitERKSt6vectorIS1_IiSaIiEESaIS3_EERKS3_RKS1_IdSaIdEERKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISJ_EERKSJ_RKSt3mapISJ_S3_St4lessISJ_ESaISt4pairISO_S3_EEE + bayesnet::Network::fit(at::Tensor const&, at::Tensor const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&) - 231 + 668 - _ZNK8bayesnet7Network5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE - - 242 - - - - - _ZNK8bayesnet7Network11getNumEdgesEv - - 563 - - - - - _ZN8bayesnet7Network16topological_sortB5cxx11Ev - - 605 - - - - - _ZNK8bayesnet7Network11getFeaturesB5cxx11Ev - - 607 - - - - - _ZNK8bayesnet7Network8getEdgesB5cxx11Ev + bayesnet::Network::completeFit(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&, at::Tensor const&) 684 - _ZN8bayesnet7Network13predict_probaERKSt6vectorIS1_IiSaIiEESaIS3_EE + bayesnet::Network::setStates(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&) - 777 + 684 - _ZN8bayesnet7Network7predictERKN2at6TensorE + bayesnet::Network::checkFitData(int, int, int, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&, at::Tensor const&) - 3262 + 712 - _ZN8bayesnet7Network10initializeEv + bayesnet::Network::predict_proba(at::Tensor const&) - 3358 + 738 - _ZN8bayesnet7Network13predict_probaERKN2at6TensorE + bayesnet::Network::predict(at::Tensor const&) - 3540 + 850 - _ZN8bayesnet7Network3fitERKN2at6TensorES4_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_RKSt3mapISB_S5_IiSaIiEESt4lessISB_ESaISt4pairISG_SK_EEE + bayesnet::Network::Network(bayesnet::Network const&) - 3545 + 888 - _ZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERKN2at6TensorE + bayesnet::Network::getMaxThreads() const - 3633 + 894 - _ZN8bayesnet7Network9setStatesERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEE + bayesnet::Network::Network() - 3633 + 930 - _ZN8bayesnet7Network12checkFitDataEiiiRKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKS7_RKSt3mapIS7_S1_IiSaIiEESt4lessIS7_ESaISt4pairISC_SG_EEERKN2at6TensorE + bayesnet::Network::getClassNumStates() const - 3787 + 1070 - _ZN8bayesnet7NetworkC2ERKS0_ + bayesnet::Network::predict_tensor(at::Tensor const&, bool) - 4761 + 1588 - _ZNK8bayesnet7Network13getMaxThreadsEv + bayesnet::Network::addNode(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) - 4794 + 13374 - _ZN8bayesnet7NetworkC2Ev + bayesnet::Network::completeFit(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&, at::Tensor const&)::{lambda()#1}::operator()() const - 4992 + 14194 - _ZNK8bayesnet7Network17getClassNumStatesEv + bayesnet::Network::setStates(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&)::{lambda(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)#1}::operator()(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const - 5704 + 14194 - _ZN8bayesnet7Network14predict_tensorERKN2at6TensorEb + bayesnet::Network::addEdge(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) - 6802 + 24954 - _ZN8bayesnet7Network7addNodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::Network::predict_sample(std::vector<int, std::allocator<int> > const&) - 116878 + 26440 - _ZZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERKN2at6TensorEENKUlvE_clEv + bayesnet::Network::isCyclic(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::unordered_set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::unordered_set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&) - 121388 + 30532 - _ZZN8bayesnet7Network9setStatesERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEEENKUlRSE_E_clESK_ + bayesnet::Network::predict_sample(at::Tensor const&) - 121388 + 375448 - _ZN8bayesnet7Network14predict_sampleERKSt6vectorIiSaIiEE + bayesnet::Network::exactInference(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > >&) - 155486 + 401880 - _ZN8bayesnet7Network7addEdgeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ + bayesnet::Network::computeFactor(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > >&) - 224276 + 1590148 - _ZN8bayesnet7Network8isCyclicERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERSt13unordered_setIS6_St4hashIS6_ESt8equal_toIS6_ESaIS6_EESG_ + bayesnet::Network::exactInference(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > >&)::{lambda()#1}::operator()() const - 295830 + 1590148 - _ZN8bayesnet7Network14predict_sampleERKN2at6TensorE + bayesnet::Network::exactInference(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > >&)::{lambda(double const&)#1}::operator()(double const&) const - 1163291 + 1590148 - _ZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEE + bayesnet::Network::getClassName[abi:cxx11]() const - 1318733 + 1590160 - _ZN8bayesnet7Network13computeFactorERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEE + bayesnet::Network::getNodes[abi:cxx11]() - 5150558 - - - - - _ZZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEEENKUlRKdE_clESH_ - - 5150558 - - - - - _ZZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEEENKUlvE_clEv - - 5150558 - - - - - _ZNK8bayesnet7Network12getClassNameB5cxx11Ev - - 5150624 - - - - - _ZN8bayesnet7Network8getNodesB5cxx11Ev - - 5151361 + 1590294 diff --git a/html/bayesnet/network/Network.cc.func.html b/html/bayesnet/network/Network.cc.func.html index 9d633be..620fd85 100644 --- a/html/bayesnet/network/Network.cc.func.html +++ b/html/bayesnet/network/Network.cc.func.html @@ -31,13 +31,13 @@ coverage.info Lines: - 97.6 % - 297 + 98.3 % + 295 290 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,282 +63,282 @@ - _ZN8bayesnet7Network10getSamplesEv + bayesnet::Network::Network() - 132 + 930 - _ZN8bayesnet7Network10initializeEv + bayesnet::Network::Network(bayesnet::Network const&) - 3358 + 888 - _ZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERKN2at6TensorE + bayesnet::Network::Network(float) - 3633 + 4 - _ZN8bayesnet7Network12checkFitDataEiiiRKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKS7_RKSt3mapIS7_S1_IiSaIiEESt4lessIS7_ESaISt4pairISC_SG_EEERKN2at6TensorE + bayesnet::Network::addEdge(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) - 3787 + 24954 - _ZN8bayesnet7Network13computeFactorERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEE + bayesnet::Network::addNode(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) - 5150558 + 13374 - _ZN8bayesnet7Network13predict_probaERKN2at6TensorE + bayesnet::Network::checkFitData(int, int, int, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&, at::Tensor const&) - 3540 + 712 - _ZN8bayesnet7Network13predict_probaERKSt6vectorIS1_IiSaIiEESaIS3_EE - - 777 - - - - - _ZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEE - - 1318733 - - - - - _ZN8bayesnet7Network14predict_sampleERKN2at6TensorE - - 1163291 - - - - - _ZN8bayesnet7Network14predict_sampleERKSt6vectorIiSaIiEE - - 155486 - - - - - _ZN8bayesnet7Network14predict_tensorERKN2at6TensorEb - - 6802 - - - - - _ZN8bayesnet7Network16topological_sortB5cxx11Ev - - 605 - - - - - _ZN8bayesnet7Network3fitERKN2at6TensorES4_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_RKSt3mapISB_S5_IiSaIiEESt4lessISB_ESaISt4pairISG_SK_EEE - - 3545 - - - - - _ZN8bayesnet7Network3fitERKN2at6TensorES4_S4_RKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_RKSt3mapISB_S5_IiSaIiEESt4lessISB_ESaISt4pairISG_SK_EEE - - 11 - - - - - _ZN8bayesnet7Network3fitERKSt6vectorIS1_IiSaIiEESaIS3_EERKS3_RKS1_IdSaIdEERKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISJ_EERKSJ_RKSt3mapISJ_S3_St4lessISJ_ESaISt4pairISO_S3_EEE - - 231 - - - - - _ZN8bayesnet7Network5scoreERKSt6vectorIS1_IiSaIiEESaIS3_EERKS3_ - - 55 - - - - - _ZN8bayesnet7Network7addEdgeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ - - 224276 - - - - - _ZN8bayesnet7Network7addNodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE - - 116878 - - - - - _ZN8bayesnet7Network7predictERKN2at6TensorE - - 3262 - - - - - _ZN8bayesnet7Network7predictERKSt6vectorIS1_IiSaIiEESaIS3_EE - - 132 - - - - - _ZN8bayesnet7Network8getNodesB5cxx11Ev - - 5151361 - - - - - _ZN8bayesnet7Network8isCyclicERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERSt13unordered_setIS6_St4hashIS6_ESt8equal_toIS6_ESaIS6_EESG_ - - 295830 - - - - - _ZN8bayesnet7Network9setStatesERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEE - - 3633 - - - - - _ZN8bayesnet7NetworkC2ERKS0_ - - 4761 - - - - - _ZN8bayesnet7NetworkC2Ef - - 22 - - - - - _ZN8bayesnet7NetworkC2Ev - - 4992 - - - - - _ZNK8bayesnet7Network11getFeaturesB5cxx11Ev - - 607 - - - - - _ZNK8bayesnet7Network11getNumEdgesEv - - 563 - - - - - _ZNK8bayesnet7Network12getClassNameB5cxx11Ev - - 5150624 - - - - - _ZNK8bayesnet7Network13getMaxThreadsEv - - 4794 - - - - - _ZNK8bayesnet7Network17getClassNumStatesEv - - 5704 - - - - - _ZNK8bayesnet7Network4showB5cxx11Ev - - 77 - - - - - _ZNK8bayesnet7Network5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE - - 242 - - - - - _ZNK8bayesnet7Network8dump_cptB5cxx11Ev - - 22 - - - - - _ZNK8bayesnet7Network8getEdgesB5cxx11Ev + bayesnet::Network::completeFit(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&, at::Tensor const&) 684 - _ZNK8bayesnet7Network9getStatesEv + bayesnet::Network::completeFit(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&, at::Tensor const&)::{lambda()#1}::operator()() const + + 14194 + + + + + bayesnet::Network::computeFactor(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > >&) + + 1590148 + + + + + bayesnet::Network::dump_cpt[abi:cxx11]() const + + 4 + + + + + bayesnet::Network::exactInference(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > >&) + + 401880 + + + + + bayesnet::Network::exactInference(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > >&)::{lambda()#1}::operator()() const + + 1590148 + + + + + bayesnet::Network::exactInference(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > >&)::{lambda(double const&)#1}::operator()(double const&) const + + 1590148 + + + + + bayesnet::Network::fit(at::Tensor const&, at::Tensor const&, at::Tensor const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&) + + 2 + + + + + bayesnet::Network::fit(at::Tensor const&, at::Tensor const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&) + + 668 + + + + + bayesnet::Network::fit(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > > const&, std::vector<int, std::allocator<int> > const&, std::vector<double, std::allocator<double> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&) + + 42 + + + + + bayesnet::Network::getClassName[abi:cxx11]() const + + 1590160 + + + + + bayesnet::Network::getClassNumStates() const + + 1070 + + + + + bayesnet::Network::getEdges[abi:cxx11]() const 132 - _ZZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEERKN2at6TensorEENKUlvE_clEv + bayesnet::Network::getFeatures[abi:cxx11]() const - 121388 + 118 - _ZZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEEENKUlRKdE_clESH_ + bayesnet::Network::getMaxThreads() const - 5150558 + 894 - _ZZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEEENKUlvE_clEv + bayesnet::Network::getNodes[abi:cxx11]() - 5150558 + 1590294 - _ZZN8bayesnet7Network9setStatesERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS7_ESaISt4pairIKS7_SA_EEEENKUlRSE_E_clESK_ + bayesnet::Network::getNumEdges() const - 121388 + 110 + + + + + bayesnet::Network::getSamples() + + 24 + + + + + bayesnet::Network::getStates() const + + 24 + + + + + bayesnet::Network::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const + + 44 + + + + + bayesnet::Network::initialize() + + 634 + + + + + bayesnet::Network::isCyclic(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::unordered_set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::unordered_set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&) + + 30532 + + + + + bayesnet::Network::predict(at::Tensor const&) + + 850 + + + + + bayesnet::Network::predict(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > > const&) + + 24 + + + + + bayesnet::Network::predict_proba(at::Tensor const&) + + 738 + + + + + bayesnet::Network::predict_proba(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > > const&) + + 132 + + + + + bayesnet::Network::predict_sample(at::Tensor const&) + + 375448 + + + + + bayesnet::Network::predict_sample(std::vector<int, std::allocator<int> > const&) + + 26440 + + + + + bayesnet::Network::predict_tensor(at::Tensor const&, bool) + + 1588 + + + + + bayesnet::Network::score(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > > const&, std::vector<int, std::allocator<int> > const&) + + 10 + + + + + bayesnet::Network::setStates(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&) + + 684 + + + + + bayesnet::Network::setStates(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > > const&)::{lambda(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)#1}::operator()(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const + + 14194 + + + + + bayesnet::Network::show[abi:cxx11]() const + + 14 + + + + + bayesnet::Network::topological_sort[abi:cxx11]() + + 110 diff --git a/html/bayesnet/network/Network.cc.gcov.html b/html/bayesnet/network/Network.cc.gcov.html index a17fe2c..b8fdb0a 100644 --- a/html/bayesnet/network/Network.cc.gcov.html +++ b/html/bayesnet/network/Network.cc.gcov.html @@ -31,13 +31,13 @@ coverage.info Lines: - 97.6 % - 297 + 98.3 % + 295 290 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -72,427 +72,423 @@ 10 : #include "Network.h" 11 : #include "bayesnet/utils/bayesnetUtils.h" 12 : namespace bayesnet { - 13 4992 : Network::Network() : fitted{ false }, maxThreads{ 0.95 }, classNumStates{ 0 }, laplaceSmoothing{ 0 } + 13 930 : Network::Network() : fitted{ false }, maxThreads{ 0.95 }, classNumStates{ 0 }, laplaceSmoothing{ 0 } 14 : { - 15 4992 : } - 16 22 : Network::Network(float maxT) : fitted{ false }, maxThreads{ maxT }, classNumStates{ 0 }, laplaceSmoothing{ 0 } + 15 930 : } + 16 4 : Network::Network(float maxT) : fitted{ false }, maxThreads{ maxT }, classNumStates{ 0 }, laplaceSmoothing{ 0 } 17 : { 18 : - 19 22 : } - 20 4761 : Network::Network(const Network& other) : laplaceSmoothing(other.laplaceSmoothing), features(other.features), className(other.className), classNumStates(other.getClassNumStates()), - 21 9522 : maxThreads(other.getMaxThreads()), fitted(other.fitted), samples(other.samples) + 19 4 : } + 20 888 : Network::Network(const Network& other) : laplaceSmoothing(other.laplaceSmoothing), features(other.features), className(other.className), classNumStates(other.getClassNumStates()), + 21 1776 : maxThreads(other.getMaxThreads()), fitted(other.fitted), samples(other.samples) 22 : { - 23 4761 : if (samples.defined()) - 24 11 : samples = samples.clone(); - 25 4816 : for (const auto& node : other.nodes) { - 26 55 : nodes[node.first] = std::make_unique<Node>(*node.second); + 23 888 : if (samples.defined()) + 24 2 : samples = samples.clone(); + 25 898 : for (const auto& node : other.nodes) { + 26 10 : nodes[node.first] = std::make_unique<Node>(*node.second); 27 : } - 28 4761 : } - 29 3358 : void Network::initialize() + 28 888 : } + 29 634 : void Network::initialize() 30 : { - 31 3358 : features.clear(); - 32 3358 : className = ""; - 33 3358 : classNumStates = 0; - 34 3358 : fitted = false; - 35 3358 : nodes.clear(); - 36 3358 : samples = torch::Tensor(); - 37 3358 : } - 38 4794 : float Network::getMaxThreads() const + 31 634 : features.clear(); + 32 634 : className = ""; + 33 634 : classNumStates = 0; + 34 634 : fitted = false; + 35 634 : nodes.clear(); + 36 634 : samples = torch::Tensor(); + 37 634 : } + 38 894 : float Network::getMaxThreads() const 39 : { - 40 4794 : return maxThreads; + 40 894 : return maxThreads; 41 : } - 42 132 : torch::Tensor& Network::getSamples() + 42 24 : torch::Tensor& Network::getSamples() 43 : { - 44 132 : return samples; + 44 24 : return samples; 45 : } - 46 116878 : void Network::addNode(const std::string& name) + 46 13374 : void Network::addNode(const std::string& name) 47 : { - 48 116878 : if (name == "") { - 49 22 : throw std::invalid_argument("Node name cannot be empty"); + 48 13374 : if (name == "") { + 49 4 : throw std::invalid_argument("Node name cannot be empty"); 50 : } - 51 116856 : if (nodes.find(name) != nodes.end()) { + 51 13370 : if (nodes.find(name) != nodes.end()) { 52 0 : return; 53 : } - 54 116856 : if (find(features.begin(), features.end(), name) == features.end()) { - 55 116856 : features.push_back(name); + 54 13370 : if (find(features.begin(), features.end(), name) == features.end()) { + 55 13370 : features.push_back(name); 56 : } - 57 116856 : nodes[name] = std::make_unique<Node>(name); + 57 13370 : nodes[name] = std::make_unique<Node>(name); 58 : } - 59 607 : std::vector<std::string> Network::getFeatures() const + 59 118 : std::vector<std::string> Network::getFeatures() const 60 : { - 61 607 : return features; + 61 118 : return features; 62 : } - 63 5704 : int Network::getClassNumStates() const + 63 1070 : int Network::getClassNumStates() const 64 : { - 65 5704 : return classNumStates; + 65 1070 : return classNumStates; 66 : } - 67 132 : int Network::getStates() const + 67 24 : int Network::getStates() const 68 : { - 69 132 : int result = 0; - 70 792 : for (auto& node : nodes) { - 71 660 : result += node.second->getNumStates(); + 69 24 : int result = 0; + 70 144 : for (auto& node : nodes) { + 71 120 : result += node.second->getNumStates(); 72 : } - 73 132 : return result; + 73 24 : return result; 74 : } - 75 5150624 : std::string Network::getClassName() const + 75 1590160 : std::string Network::getClassName() const 76 : { - 77 5150624 : return className; + 77 1590160 : return className; 78 : } - 79 295830 : bool Network::isCyclic(const std::string& nodeId, std::unordered_set<std::string>& visited, std::unordered_set<std::string>& recStack) + 79 30532 : bool Network::isCyclic(const std::string& nodeId, std::unordered_set<std::string>& visited, std::unordered_set<std::string>& recStack) 80 : { - 81 295830 : if (visited.find(nodeId) == visited.end()) // if node hasn't been visited yet + 81 30532 : if (visited.find(nodeId) == visited.end()) // if node hasn't been visited yet 82 : { - 83 295830 : visited.insert(nodeId); - 84 295830 : recStack.insert(nodeId); - 85 367384 : for (Node* child : nodes[nodeId]->getChildren()) { - 86 71620 : if (visited.find(child->getName()) == visited.end() && isCyclic(child->getName(), visited, recStack)) - 87 66 : return true; - 88 71576 : if (recStack.find(child->getName()) != recStack.end()) - 89 22 : return true; + 83 30532 : visited.insert(nodeId); + 84 30532 : recStack.insert(nodeId); + 85 36110 : for (Node* child : nodes[nodeId]->getChildren()) { + 86 5590 : if (visited.find(child->getName()) == visited.end() && isCyclic(child->getName(), visited, recStack)) + 87 12 : return true; + 88 5582 : if (recStack.find(child->getName()) != recStack.end()) + 89 4 : return true; 90 : } 91 : } - 92 295764 : recStack.erase(nodeId); // remove node from recursion stack before function ends - 93 295764 : return false; + 92 30520 : recStack.erase(nodeId); // remove node from recursion stack before function ends + 93 30520 : return false; 94 : } - 95 224276 : void Network::addEdge(const std::string& parent, const std::string& child) + 95 24954 : void Network::addEdge(const std::string& parent, const std::string& child) 96 : { - 97 224276 : if (nodes.find(parent) == nodes.end()) { - 98 22 : throw std::invalid_argument("Parent node " + parent + " does not exist"); + 97 24954 : if (nodes.find(parent) == nodes.end()) { + 98 4 : throw std::invalid_argument("Parent node " + parent + " does not exist"); 99 : } - 100 224254 : if (nodes.find(child) == nodes.end()) { - 101 22 : throw std::invalid_argument("Child node " + child + " does not exist"); + 100 24950 : if (nodes.find(child) == nodes.end()) { + 101 4 : throw std::invalid_argument("Child node " + child + " does not exist"); 102 : } 103 : // Temporarily add edge to check for cycles - 104 224232 : nodes[parent]->addChild(nodes[child].get()); - 105 224232 : nodes[child]->addParent(nodes[parent].get()); - 106 224232 : std::unordered_set<std::string> visited; - 107 224232 : std::unordered_set<std::string> recStack; - 108 224232 : if (isCyclic(nodes[child]->getName(), visited, recStack)) // if adding this edge forms a cycle + 104 24946 : nodes[parent]->addChild(nodes[child].get()); + 105 24946 : nodes[child]->addParent(nodes[parent].get()); + 106 24946 : std::unordered_set<std::string> visited; + 107 24946 : std::unordered_set<std::string> recStack; + 108 24946 : if (isCyclic(nodes[child]->getName(), visited, recStack)) // if adding this edge forms a cycle 109 : { 110 : // remove problematic edge - 111 22 : nodes[parent]->removeChild(nodes[child].get()); - 112 22 : nodes[child]->removeParent(nodes[parent].get()); - 113 22 : throw std::invalid_argument("Adding this edge forms a cycle in the graph."); + 111 4 : nodes[parent]->removeChild(nodes[child].get()); + 112 4 : nodes[child]->removeParent(nodes[parent].get()); + 113 4 : throw std::invalid_argument("Adding this edge forms a cycle in the graph."); 114 : } - 115 224254 : } - 116 5151361 : std::map<std::string, std::unique_ptr<Node>>& Network::getNodes() + 115 24950 : } + 116 1590294 : std::map<std::string, std::unique_ptr<Node>>& Network::getNodes() 117 : { - 118 5151361 : return nodes; + 118 1590294 : return nodes; 119 : } - 120 3787 : void Network::checkFitData(int n_samples, int n_features, int n_samples_y, const std::vector<std::string>& featureNames, const std::string& className, const std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights) + 120 712 : void Network::checkFitData(int n_samples, int n_features, int n_samples_y, const std::vector<std::string>& featureNames, const std::string& className, const std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights) 121 : { - 122 3787 : if (weights.size(0) != n_samples) { - 123 22 : throw std::invalid_argument("Weights (" + std::to_string(weights.size(0)) + ") must have the same number of elements as samples (" + std::to_string(n_samples) + ") in Network::fit"); + 122 712 : if (weights.size(0) != n_samples) { + 123 4 : throw std::invalid_argument("Weights (" + std::to_string(weights.size(0)) + ") must have the same number of elements as samples (" + std::to_string(n_samples) + ") in Network::fit"); 124 : } - 125 3765 : if (n_samples != n_samples_y) { - 126 22 : throw std::invalid_argument("X and y must have the same number of samples in Network::fit (" + std::to_string(n_samples) + " != " + std::to_string(n_samples_y) + ")"); + 125 708 : if (n_samples != n_samples_y) { + 126 4 : throw std::invalid_argument("X and y must have the same number of samples in Network::fit (" + std::to_string(n_samples) + " != " + std::to_string(n_samples_y) + ")"); 127 : } - 128 3743 : if (n_features != featureNames.size()) { - 129 22 : throw std::invalid_argument("X and features must have the same number of features in Network::fit (" + std::to_string(n_features) + " != " + std::to_string(featureNames.size()) + ")"); + 128 704 : if (n_features != featureNames.size()) { + 129 4 : throw std::invalid_argument("X and features must have the same number of features in Network::fit (" + std::to_string(n_features) + " != " + std::to_string(featureNames.size()) + ")"); 130 : } - 131 3721 : if (features.size() == 0) { - 132 22 : throw std::invalid_argument("The network has not been initialized. You must call addNode() before calling fit()"); + 131 700 : if (features.size() == 0) { + 132 4 : throw std::invalid_argument("The network has not been initialized. You must call addNode() before calling fit()"); 133 : } - 134 3699 : if (n_features != features.size() - 1) { - 135 22 : throw std::invalid_argument("X and local features must have the same number of features in Network::fit (" + std::to_string(n_features) + " != " + std::to_string(features.size() - 1) + ")"); + 134 696 : if (n_features != features.size() - 1) { + 135 4 : throw std::invalid_argument("X and local features must have the same number of features in Network::fit (" + std::to_string(n_features) + " != " + std::to_string(features.size() - 1) + ")"); 136 : } - 137 3677 : if (find(features.begin(), features.end(), className) == features.end()) { - 138 22 : throw std::invalid_argument("Class Name not found in Network::features"); + 137 692 : if (find(features.begin(), features.end(), className) == features.end()) { + 138 4 : throw std::invalid_argument("Class Name not found in Network::features"); 139 : } - 140 121476 : for (auto& feature : featureNames) { - 141 117843 : if (find(features.begin(), features.end(), feature) == features.end()) { - 142 22 : throw std::invalid_argument("Feature " + feature + " not found in Network::features"); + 140 14210 : for (auto& feature : featureNames) { + 141 13526 : if (find(features.begin(), features.end(), feature) == features.end()) { + 142 4 : throw std::invalid_argument("Feature " + feature + " not found in Network::features"); 143 : } - 144 117821 : if (states.find(feature) == states.end()) { + 144 13522 : if (states.find(feature) == states.end()) { 145 0 : throw std::invalid_argument("Feature " + feature + " not found in states"); 146 : } 147 : } - 148 3633 : } - 149 3633 : void Network::setStates(const std::map<std::string, std::vector<int>>& states) + 148 684 : } + 149 684 : void Network::setStates(const std::map<std::string, std::vector<int>>& states) 150 : { 151 : // Set states to every Node in the network - 152 3633 : for_each(features.begin(), features.end(), [this, &states](const std::string& feature) { - 153 121388 : nodes.at(feature)->setNumStates(states.at(feature).size()); - 154 121388 : }); - 155 3633 : classNumStates = nodes.at(className)->getNumStates(); - 156 3633 : } + 152 684 : for_each(features.begin(), features.end(), [this, &states](const std::string& feature) { + 153 14194 : nodes.at(feature)->setNumStates(states.at(feature).size()); + 154 14194 : }); + 155 684 : classNumStates = nodes.at(className)->getNumStates(); + 156 684 : } 157 : // X comes in nxm, where n is the number of features and m the number of samples - 158 11 : void Network::fit(const torch::Tensor& X, const torch::Tensor& y, const torch::Tensor& weights, const std::vector<std::string>& featureNames, const std::string& className, const std::map<std::string, std::vector<int>>& states) + 158 2 : void Network::fit(const torch::Tensor& X, const torch::Tensor& y, const torch::Tensor& weights, const std::vector<std::string>& featureNames, const std::string& className, const std::map<std::string, std::vector<int>>& states) 159 : { - 160 11 : checkFitData(X.size(1), X.size(0), y.size(0), featureNames, className, states, weights); - 161 11 : this->className = className; - 162 11 : torch::Tensor ytmp = torch::transpose(y.view({ y.size(0), 1 }), 0, 1); - 163 33 : samples = torch::cat({ X , ytmp }, 0); - 164 55 : for (int i = 0; i < featureNames.size(); ++i) { - 165 132 : auto row_feature = X.index({ i, "..." }); - 166 44 : } - 167 11 : completeFit(states, weights); - 168 66 : } - 169 3545 : void Network::fit(const torch::Tensor& samples, const torch::Tensor& weights, const std::vector<std::string>& featureNames, const std::string& className, const std::map<std::string, std::vector<int>>& states) + 160 2 : checkFitData(X.size(1), X.size(0), y.size(0), featureNames, className, states, weights); + 161 2 : this->className = className; + 162 2 : torch::Tensor ytmp = torch::transpose(y.view({ y.size(0), 1 }), 0, 1); + 163 6 : samples = torch::cat({ X , ytmp }, 0); + 164 10 : for (int i = 0; i < featureNames.size(); ++i) { + 165 24 : auto row_feature = X.index({ i, "..." }); + 166 8 : } + 167 2 : completeFit(states, weights); + 168 12 : } + 169 668 : void Network::fit(const torch::Tensor& samples, const torch::Tensor& weights, const std::vector<std::string>& featureNames, const std::string& className, const std::map<std::string, std::vector<int>>& states) 170 : { - 171 3545 : checkFitData(samples.size(1), samples.size(0) - 1, samples.size(1), featureNames, className, states, weights); - 172 3545 : this->className = className; - 173 3545 : this->samples = samples; - 174 3545 : completeFit(states, weights); - 175 3545 : } + 171 668 : checkFitData(samples.size(1), samples.size(0) - 1, samples.size(1), featureNames, className, states, weights); + 172 668 : this->className = className; + 173 668 : this->samples = samples; + 174 668 : completeFit(states, weights); + 175 668 : } 176 : // input_data comes in nxm, where n is the number of features and m the number of samples - 177 231 : void Network::fit(const std::vector<std::vector<int>>& input_data, const std::vector<int>& labels, const std::vector<double>& weights_, const std::vector<std::string>& featureNames, const std::string& className, const std::map<std::string, std::vector<int>>& states) + 177 42 : void Network::fit(const std::vector<std::vector<int>>& input_data, const std::vector<int>& labels, const std::vector<double>& weights_, const std::vector<std::string>& featureNames, const std::string& className, const std::map<std::string, std::vector<int>>& states) 178 : { - 179 231 : const torch::Tensor weights = torch::tensor(weights_, torch::kFloat64); - 180 231 : checkFitData(input_data[0].size(), input_data.size(), labels.size(), featureNames, className, states, weights); - 181 77 : this->className = className; + 179 42 : const torch::Tensor weights = torch::tensor(weights_, torch::kFloat64); + 180 42 : checkFitData(input_data[0].size(), input_data.size(), labels.size(), featureNames, className, states, weights); + 181 14 : this->className = className; 182 : // Build tensor of samples (nxm) (n+1 because of the class) - 183 77 : samples = torch::zeros({ static_cast<int>(input_data.size() + 1), static_cast<int>(input_data[0].size()) }, torch::kInt32); - 184 385 : for (int i = 0; i < featureNames.size(); ++i) { - 185 1232 : samples.index_put_({ i, "..." }, torch::tensor(input_data[i], torch::kInt32)); + 183 14 : samples = torch::zeros({ static_cast<int>(input_data.size() + 1), static_cast<int>(input_data[0].size()) }, torch::kInt32); + 184 70 : for (int i = 0; i < featureNames.size(); ++i) { + 185 224 : samples.index_put_({ i, "..." }, torch::tensor(input_data[i], torch::kInt32)); 186 : } - 187 308 : samples.index_put_({ -1, "..." }, torch::tensor(labels, torch::kInt32)); - 188 77 : completeFit(states, weights); - 189 616 : } - 190 3633 : void Network::completeFit(const std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights) + 187 56 : samples.index_put_({ -1, "..." }, torch::tensor(labels, torch::kInt32)); + 188 14 : completeFit(states, weights); + 189 112 : } + 190 684 : void Network::completeFit(const std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights) 191 : { - 192 3633 : setStates(states); - 193 3633 : laplaceSmoothing = 1.0 / samples.size(1); // To use in CPT computation - 194 3633 : std::vector<std::thread> threads; - 195 125021 : for (auto& node : nodes) { - 196 121388 : threads.emplace_back([this, &node, &weights]() { - 197 121388 : node.second->computeCPT(samples, features, laplaceSmoothing, weights); - 198 121388 : }); + 192 684 : setStates(states); + 193 684 : laplaceSmoothing = 1.0 / samples.size(1); // To use in CPT computation + 194 684 : std::vector<std::thread> threads; + 195 14878 : for (auto& node : nodes) { + 196 14194 : threads.emplace_back([this, &node, &weights]() { + 197 14194 : node.second->computeCPT(samples, features, laplaceSmoothing, weights); + 198 14194 : }); 199 : } - 200 125021 : for (auto& thread : threads) { - 201 121388 : thread.join(); + 200 14878 : for (auto& thread : threads) { + 201 14194 : thread.join(); 202 : } - 203 3633 : fitted = true; - 204 3633 : } - 205 6802 : torch::Tensor Network::predict_tensor(const torch::Tensor& samples, const bool proba) + 203 684 : fitted = true; + 204 684 : } + 205 1588 : torch::Tensor Network::predict_tensor(const torch::Tensor& samples, const bool proba) 206 : { - 207 6802 : if (!fitted) { - 208 22 : throw std::logic_error("You must call fit() before calling predict()"); + 207 1588 : if (!fitted) { + 208 4 : throw std::logic_error("You must call fit() before calling predict()"); 209 : } - 210 6780 : torch::Tensor result; - 211 6780 : result = torch::zeros({ samples.size(1), classNumStates }, torch::kFloat64); - 212 1170049 : for (int i = 0; i < samples.size(1); ++i) { - 213 3489873 : const torch::Tensor sample = samples.index({ "...", i }); - 214 1163291 : auto psample = predict_sample(sample); - 215 1163269 : auto temp = torch::tensor(psample, torch::kFloat64); + 210 1584 : torch::Tensor result; + 211 1584 : result = torch::zeros({ samples.size(1), classNumStates }, torch::kFloat64); + 212 377028 : for (int i = 0; i < samples.size(1); ++i) { + 213 1126344 : const torch::Tensor sample = samples.index({ "...", i }); + 214 375448 : auto psample = predict_sample(sample); + 215 375444 : auto temp = torch::tensor(psample, torch::kFloat64); 216 : // result.index_put_({ i, "..." }, torch::tensor(predict_sample(sample), torch::kFloat64)); - 217 3489807 : result.index_put_({ i, "..." }, temp); - 218 1163291 : } - 219 6758 : if (proba) - 220 3540 : return result; - 221 6436 : return result.argmax(1); - 222 2333340 : } + 217 1126332 : result.index_put_({ i, "..." }, temp); + 218 375448 : } + 219 1580 : if (proba) + 220 738 : return result; + 221 1684 : return result.argmax(1); + 222 752476 : } 223 : // Return mxn tensor of probabilities - 224 3540 : torch::Tensor Network::predict_proba(const torch::Tensor& samples) + 224 738 : torch::Tensor Network::predict_proba(const torch::Tensor& samples) 225 : { - 226 3540 : return predict_tensor(samples, true); + 226 738 : return predict_tensor(samples, true); 227 : } 228 : 229 : // Return mxn tensor of probabilities - 230 3262 : torch::Tensor Network::predict(const torch::Tensor& samples) + 230 850 : torch::Tensor Network::predict(const torch::Tensor& samples) 231 : { - 232 3262 : return predict_tensor(samples, false); + 232 850 : return predict_tensor(samples, false); 233 : } 234 : 235 : // Return mx1 std::vector of predictions 236 : // tsamples is nxm std::vector of samples - 237 132 : std::vector<int> Network::predict(const std::vector<std::vector<int>>& tsamples) + 237 24 : std::vector<int> Network::predict(const std::vector<std::vector<int>>& tsamples) 238 : { - 239 132 : if (!fitted) { - 240 44 : throw std::logic_error("You must call fit() before calling predict()"); + 239 24 : if (!fitted) { + 240 8 : throw std::logic_error("You must call fit() before calling predict()"); 241 : } - 242 88 : std::vector<int> predictions; - 243 88 : std::vector<int> sample; - 244 9801 : for (int row = 0; row < tsamples[0].size(); ++row) { - 245 9735 : sample.clear(); - 246 72193 : for (int col = 0; col < tsamples.size(); ++col) { - 247 62458 : sample.push_back(tsamples[col][row]); + 242 16 : std::vector<int> predictions; + 243 16 : std::vector<int> sample; + 244 1782 : for (int row = 0; row < tsamples[0].size(); ++row) { + 245 1770 : sample.clear(); + 246 13126 : for (int col = 0; col < tsamples.size(); ++col) { + 247 11356 : sample.push_back(tsamples[col][row]); 248 : } - 249 9735 : std::vector<double> classProbabilities = predict_sample(sample); + 249 1770 : std::vector<double> classProbabilities = predict_sample(sample); 250 : // Find the class with the maximum posterior probability - 251 9713 : auto maxElem = max_element(classProbabilities.begin(), classProbabilities.end()); - 252 9713 : int predictedClass = distance(classProbabilities.begin(), maxElem); - 253 9713 : predictions.push_back(predictedClass); - 254 9713 : } - 255 132 : return predictions; - 256 110 : } + 251 1766 : auto maxElem = max_element(classProbabilities.begin(), classProbabilities.end()); + 252 1766 : int predictedClass = distance(classProbabilities.begin(), maxElem); + 253 1766 : predictions.push_back(predictedClass); + 254 1766 : } + 255 24 : return predictions; + 256 20 : } 257 : // Return mxn std::vector of probabilities 258 : // tsamples is nxm std::vector of samples - 259 777 : std::vector<std::vector<double>> Network::predict_proba(const std::vector<std::vector<int>>& tsamples) + 259 132 : std::vector<std::vector<double>> Network::predict_proba(const std::vector<std::vector<int>>& tsamples) 260 : { - 261 777 : if (!fitted) { - 262 22 : throw std::logic_error("You must call fit() before calling predict_proba()"); + 261 132 : if (!fitted) { + 262 4 : throw std::logic_error("You must call fit() before calling predict_proba()"); 263 : } - 264 755 : std::vector<std::vector<double>> predictions; - 265 755 : std::vector<int> sample; - 266 146506 : for (int row = 0; row < tsamples[0].size(); ++row) { - 267 145751 : sample.clear(); - 268 1941951 : for (int col = 0; col < tsamples.size(); ++col) { - 269 1796200 : sample.push_back(tsamples[col][row]); + 264 128 : std::vector<std::vector<double>> predictions; + 265 128 : std::vector<int> sample; + 266 24798 : for (int row = 0; row < tsamples[0].size(); ++row) { + 267 24670 : sample.clear(); + 268 219650 : for (int col = 0; col < tsamples.size(); ++col) { + 269 194980 : sample.push_back(tsamples[col][row]); 270 : } - 271 145751 : predictions.push_back(predict_sample(sample)); + 271 24670 : predictions.push_back(predict_sample(sample)); 272 : } - 273 1510 : return predictions; - 274 755 : } - 275 55 : double Network::score(const std::vector<std::vector<int>>& tsamples, const std::vector<int>& labels) + 273 256 : return predictions; + 274 128 : } + 275 10 : double Network::score(const std::vector<std::vector<int>>& tsamples, const std::vector<int>& labels) 276 : { - 277 55 : std::vector<int> y_pred = predict(tsamples); - 278 33 : int correct = 0; - 279 6391 : for (int i = 0; i < y_pred.size(); ++i) { - 280 6358 : if (y_pred[i] == labels[i]) { - 281 5346 : correct++; + 277 10 : std::vector<int> y_pred = predict(tsamples); + 278 6 : int correct = 0; + 279 1162 : for (int i = 0; i < y_pred.size(); ++i) { + 280 1156 : if (y_pred[i] == labels[i]) { + 281 972 : correct++; 282 : } 283 : } - 284 66 : return (double)correct / y_pred.size(); - 285 33 : } + 284 12 : return (double)correct / y_pred.size(); + 285 6 : } 286 : // Return 1xn std::vector of probabilities - 287 155486 : std::vector<double> Network::predict_sample(const std::vector<int>& sample) + 287 26440 : std::vector<double> Network::predict_sample(const std::vector<int>& sample) 288 : { 289 : // Ensure the sample size is equal to the number of features - 290 155486 : if (sample.size() != features.size() - 1) { - 291 44 : throw std::invalid_argument("Sample size (" + std::to_string(sample.size()) + - 292 66 : ") does not match the number of features (" + std::to_string(features.size() - 1) + ")"); + 290 26440 : if (sample.size() != features.size() - 1) { + 291 8 : throw std::invalid_argument("Sample size (" + std::to_string(sample.size()) + + 292 12 : ") does not match the number of features (" + std::to_string(features.size() - 1) + ")"); 293 : } - 294 155464 : std::map<std::string, int> evidence; - 295 2014056 : for (int i = 0; i < sample.size(); ++i) { - 296 1858592 : evidence[features[i]] = sample[i]; + 294 26436 : std::map<std::string, int> evidence; + 295 232760 : for (int i = 0; i < sample.size(); ++i) { + 296 206324 : evidence[features[i]] = sample[i]; 297 : } - 298 310928 : return exactInference(evidence); - 299 155464 : } + 298 52872 : return exactInference(evidence); + 299 26436 : } 300 : // Return 1xn std::vector of probabilities - 301 1163291 : std::vector<double> Network::predict_sample(const torch::Tensor& sample) + 301 375448 : std::vector<double> Network::predict_sample(const torch::Tensor& sample) 302 : { 303 : // Ensure the sample size is equal to the number of features - 304 1163291 : if (sample.size(0) != features.size() - 1) { - 305 44 : throw std::invalid_argument("Sample size (" + std::to_string(sample.size(0)) + - 306 66 : ") does not match the number of features (" + std::to_string(features.size() - 1) + ")"); + 304 375448 : if (sample.size(0) != features.size() - 1) { + 305 8 : throw std::invalid_argument("Sample size (" + std::to_string(sample.size(0)) + + 306 12 : ") does not match the number of features (" + std::to_string(features.size() - 1) + ")"); 307 : } - 308 1163269 : std::map<std::string, int> evidence; - 309 30202277 : for (int i = 0; i < sample.size(0); ++i) { - 310 29039008 : evidence[features[i]] = sample[i].item<int>(); + 308 375444 : std::map<std::string, int> evidence; + 309 8888488 : for (int i = 0; i < sample.size(0); ++i) { + 310 8513044 : evidence[features[i]] = sample[i].item<int>(); 311 : } - 312 2326538 : return exactInference(evidence); - 313 1163269 : } - 314 5150558 : double Network::computeFactor(std::map<std::string, int>& completeEvidence) + 312 750888 : return exactInference(evidence); + 313 375444 : } + 314 1590148 : double Network::computeFactor(std::map<std::string, int>& completeEvidence) 315 : { - 316 5150558 : double result = 1.0; - 317 72453396 : for (auto& node : getNodes()) { - 318 67302838 : result *= node.second->getFactorValue(completeEvidence); + 316 1590148 : double result = 1.0; + 317 33392584 : for (auto& node : getNodes()) { + 318 31802436 : result *= node.second->getFactorValue(completeEvidence); 319 : } - 320 5150558 : return result; + 320 1590148 : return result; 321 : } - 322 1318733 : std::vector<double> Network::exactInference(std::map<std::string, int>& evidence) + 322 401880 : std::vector<double> Network::exactInference(std::map<std::string, int>& evidence) 323 : { - 324 1318733 : std::vector<double> result(classNumStates, 0.0); - 325 1318733 : std::vector<std::thread> threads; - 326 1318733 : std::mutex mtx; - 327 6469291 : for (int i = 0; i < classNumStates; ++i) { - 328 5150558 : threads.emplace_back([this, &result, &evidence, i, &mtx]() { - 329 5150558 : auto completeEvidence = std::map<std::string, int>(evidence); - 330 5150558 : completeEvidence[getClassName()] = i; - 331 5150558 : double factor = computeFactor(completeEvidence); - 332 5150558 : std::lock_guard<std::mutex> lock(mtx); - 333 5150558 : result[i] = factor; - 334 5150558 : }); + 324 401880 : std::vector<double> result(classNumStates, 0.0); + 325 401880 : std::vector<std::thread> threads; + 326 401880 : std::mutex mtx; + 327 1992028 : for (int i = 0; i < classNumStates; ++i) { + 328 1590148 : threads.emplace_back([this, &result, &evidence, i, &mtx]() { + 329 1590148 : auto completeEvidence = std::map<std::string, int>(evidence); + 330 1590148 : completeEvidence[getClassName()] = i; + 331 1590148 : double factor = computeFactor(completeEvidence); + 332 1590148 : std::lock_guard<std::mutex> lock(mtx); + 333 1590148 : result[i] = factor; + 334 1590148 : }); 335 : } - 336 6469291 : for (auto& thread : threads) { - 337 5150558 : thread.join(); + 336 1992028 : for (auto& thread : threads) { + 337 1590148 : thread.join(); 338 : } 339 : // Normalize result - 340 1318733 : double sum = accumulate(result.begin(), result.end(), 0.0); - 341 6469291 : transform(result.begin(), result.end(), result.begin(), [sum](const double& value) { return value / sum; }); - 342 2637466 : return result; - 343 1318733 : } - 344 77 : std::vector<std::string> Network::show() const + 340 401880 : double sum = accumulate(result.begin(), result.end(), 0.0); + 341 1992028 : transform(result.begin(), result.end(), result.begin(), [sum](const double& value) { return value / sum; }); + 342 803760 : return result; + 343 401880 : } + 344 14 : std::vector<std::string> Network::show() const 345 : { - 346 77 : std::vector<std::string> result; + 346 14 : std::vector<std::string> result; 347 : // Draw the network - 348 440 : for (auto& node : nodes) { - 349 363 : std::string line = node.first + " -> "; - 350 847 : for (auto child : node.second->getChildren()) { - 351 484 : line += child->getName() + ", "; + 348 80 : for (auto& node : nodes) { + 349 66 : std::string line = node.first + " -> "; + 350 154 : for (auto child : node.second->getChildren()) { + 351 88 : line += child->getName() + ", "; 352 : } - 353 363 : result.push_back(line); - 354 363 : } - 355 77 : return result; + 353 66 : result.push_back(line); + 354 66 : } + 355 14 : return result; 356 0 : } - 357 242 : std::vector<std::string> Network::graph(const std::string& title) const + 357 44 : std::vector<std::string> Network::graph(const std::string& title) const 358 : { - 359 242 : auto output = std::vector<std::string>(); - 360 242 : auto prefix = "digraph BayesNet {\nlabel=<BayesNet "; - 361 242 : auto suffix = ">\nfontsize=30\nfontcolor=blue\nlabelloc=t\nlayout=circo\n"; - 362 242 : std::string header = prefix + title + suffix; - 363 242 : output.push_back(header); - 364 1925 : for (auto& node : nodes) { - 365 1683 : auto result = node.second->graph(className); - 366 1683 : output.insert(output.end(), result.begin(), result.end()); - 367 1683 : } - 368 242 : output.push_back("}\n"); - 369 484 : return output; - 370 242 : } - 371 684 : std::vector<std::pair<std::string, std::string>> Network::getEdges() const + 359 44 : auto output = std::vector<std::string>(); + 360 44 : auto prefix = "digraph BayesNet {\nlabel=<BayesNet "; + 361 44 : auto suffix = ">\nfontsize=30\nfontcolor=blue\nlabelloc=t\nlayout=circo\n"; + 362 44 : std::string header = prefix + title + suffix; + 363 44 : output.push_back(header); + 364 350 : for (auto& node : nodes) { + 365 306 : auto result = node.second->graph(className); + 366 306 : output.insert(output.end(), result.begin(), result.end()); + 367 306 : } + 368 44 : output.push_back("}\n"); + 369 88 : return output; + 370 44 : } + 371 132 : std::vector<std::pair<std::string, std::string>> Network::getEdges() const 372 : { - 373 684 : auto edges = std::vector<std::pair<std::string, std::string>>(); - 374 10684 : for (const auto& node : nodes) { - 375 10000 : auto head = node.first; - 376 27937 : for (const auto& child : node.second->getChildren()) { - 377 17937 : auto tail = child->getName(); - 378 17937 : edges.push_back({ head, tail }); - 379 17937 : } - 380 10000 : } - 381 684 : return edges; + 373 132 : auto edges = std::vector<std::pair<std::string, std::string>>(); + 374 2906 : for (const auto& node : nodes) { + 375 2774 : auto head = node.first; + 376 7924 : for (const auto& child : node.second->getChildren()) { + 377 5150 : auto tail = child->getName(); + 378 5150 : edges.push_back({ head, tail }); + 379 5150 : } + 380 2774 : } + 381 132 : return edges; 382 0 : } - 383 563 : int Network::getNumEdges() const + 383 110 : int Network::getNumEdges() const 384 : { - 385 563 : return getEdges().size(); + 385 110 : return getEdges().size(); 386 : } - 387 605 : std::vector<std::string> Network::topological_sort() + 387 110 : std::vector<std::string> Network::topological_sort() 388 : { 389 : /* Check if al the fathers of every node are before the node */ - 390 605 : auto result = features; - 391 605 : result.erase(remove(result.begin(), result.end(), className), result.end()); - 392 605 : bool ending{ false }; - 393 1727 : while (!ending) { - 394 1122 : ending = true; - 395 10461 : for (auto feature : features) { - 396 9339 : auto fathers = nodes[feature]->getParents(); - 397 24750 : for (const auto& father : fathers) { - 398 15411 : auto fatherName = father->getName(); - 399 15411 : if (fatherName == className) { - 400 8195 : continue; + 390 110 : auto result = features; + 391 110 : result.erase(remove(result.begin(), result.end(), className), result.end()); + 392 110 : bool ending{ false }; + 393 314 : while (!ending) { + 394 204 : ending = true; + 395 1902 : for (auto feature : features) { + 396 1698 : auto fathers = nodes[feature]->getParents(); + 397 4500 : for (const auto& father : fathers) { + 398 2802 : auto fatherName = father->getName(); + 399 2802 : if (fatherName == className) { + 400 1490 : continue; 401 : } 402 : // Check if father is placed before the actual feature - 403 7216 : auto it = find(result.begin(), result.end(), fatherName); - 404 7216 : if (it != result.end()) { - 405 7216 : auto it2 = find(result.begin(), result.end(), feature); - 406 7216 : if (it2 != result.end()) { - 407 7216 : if (distance(it, it2) < 0) { + 403 1312 : auto it = find(result.begin(), result.end(), fatherName); + 404 1312 : if (it != result.end()) { + 405 1312 : auto it2 = find(result.begin(), result.end(), feature); + 406 1312 : if (it2 != result.end()) { + 407 1312 : if (distance(it, it2) < 0) { 408 : // if it is not, insert it before the feature - 409 671 : result.erase(remove(result.begin(), result.end(), fatherName), result.end()); - 410 671 : result.insert(it2, fatherName); - 411 671 : ending = false; + 409 122 : result.erase(remove(result.begin(), result.end(), fatherName), result.end()); + 410 122 : result.insert(it2, fatherName); + 411 122 : ending = false; 412 : } - 413 : } else { - 414 0 : throw std::logic_error("Error in topological sort because of node " + feature + " is not in result"); - 415 : } - 416 : } else { - 417 0 : throw std::logic_error("Error in topological sort because of node father " + fatherName + " is not in result"); - 418 : } - 419 15411 : } - 420 9339 : } - 421 : } - 422 605 : return result; - 423 0 : } - 424 22 : std::string Network::dump_cpt() const - 425 : { - 426 22 : std::stringstream oss; - 427 132 : for (auto& node : nodes) { - 428 110 : oss << "* " << node.first << ": (" << node.second->getNumStates() << ") : " << node.second->getCPT().sizes() << std::endl; - 429 110 : oss << node.second->getCPT() << std::endl; - 430 : } - 431 44 : return oss.str(); - 432 22 : } - 433 : } + 413 : } + 414 : } + 415 2802 : } + 416 1698 : } + 417 : } + 418 110 : return result; + 419 0 : } + 420 4 : std::string Network::dump_cpt() const + 421 : { + 422 4 : std::stringstream oss; + 423 24 : for (auto& node : nodes) { + 424 20 : oss << "* " << node.first << ": (" << node.second->getNumStates() << ") : " << node.second->getCPT().sizes() << std::endl; + 425 20 : oss << node.second->getCPT() << std::endl; + 426 : } + 427 8 : return oss.str(); + 428 4 : } + 429 : } diff --git a/html/bayesnet/network/Network.h.func-c.html b/html/bayesnet/network/Network.h.func-c.html index a57e74c..c53e47a 100644 --- a/html/bayesnet/network/Network.h.func-c.html +++ b/html/bayesnet/network/Network.h.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,9 +63,9 @@ - _ZN8bayesnet7NetworkD2Ev + bayesnet::Network::~Network() - 647 + 4626 diff --git a/html/bayesnet/network/Network.h.func.html b/html/bayesnet/network/Network.h.func.html index e3c03dc..9cba0b3 100644 --- a/html/bayesnet/network/Network.h.func.html +++ b/html/bayesnet/network/Network.h.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,9 +63,9 @@ - _ZN8bayesnet7NetworkD2Ev + bayesnet::Network::~Network() - 647 + 4626 diff --git a/html/bayesnet/network/Network.h.gcov.html b/html/bayesnet/network/Network.h.gcov.html index b86b4d1..ab93199 100644 --- a/html/bayesnet/network/Network.h.gcov.html +++ b/html/bayesnet/network/Network.h.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -79,7 +79,7 @@ 17 : Network(); 18 : explicit Network(float); 19 : explicit Network(const Network&); - 20 647 : ~Network() = default; + 20 4626 : ~Network() = default; 21 : torch::Tensor& getSamples(); 22 : float getMaxThreads() const; 23 : void addNode(const std::string&); diff --git a/html/bayesnet/network/Node.cc.func-c.html b/html/bayesnet/network/Node.cc.func-c.html index 19dfb00..6082b8c 100644 --- a/html/bayesnet/network/Node.cc.func-c.html +++ b/html/bayesnet/network/Node.cc.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,142 +63,142 @@ - _ZN8bayesnet4Node5clearEv + bayesnet::Node::clear() - 11 + 6 - _ZN8bayesnet4Node11removeChildEPS0_ + bayesnet::Node::removeChild(bayesnet::Node*) - 33 + 18 - _ZN8bayesnet4Node12removeParentEPS0_ + bayesnet::Node::removeParent(bayesnet::Node*) - 33 + 18 - _ZN8bayesnet4Node12combinationsERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EE + bayesnet::Node::combinations(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) - 55 + 30 - _ZN8bayesnet4Node7minFillEv + bayesnet::Node::minFill() - 55 + 30 - _ZN8bayesnet4Node6getCPTEv + bayesnet::Node::getCPT() - 1155 + 630 - _ZN8bayesnet4Node5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::Node::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) - 1683 + 918 - _ZZN8bayesnet4Node5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEENKUlRKT_E_clIPS0_EEDaSB_ + auto bayesnet::Node::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(auto:1 const&)#1}::operator()<bayesnet::Node*>(bayesnet::Node* const&) const - 2651 + 1446 - _ZN8bayesnet4Node10getParentsEv + bayesnet::Node::getParents() - 13948 + 7608 - _ZN8bayesnet4NodeC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::Node::Node(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) - 116977 + 40176 - _ZN8bayesnet4Node10computeCPTERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EEdS4_ + bayesnet::Node::computeCPT(at::Tensor const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, double, at::Tensor const&) - 121388 + 42582 - _ZN8bayesnet4Node12setNumStatesEi + bayesnet::Node::setNumStates(int) - 121388 + 42582 - _ZN8bayesnet4Node9addParentEPS0_ + bayesnet::Node::addParent(bayesnet::Node*) - 224331 + 74892 - _ZN8bayesnet4Node8addChildEPS0_ + bayesnet::Node::addChild(bayesnet::Node*) - 224353 + 74904 - _ZZN8bayesnet4Node10computeCPTERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EEdS4_ENKUlRKT_E_clIPS0_EEDaSI_ + auto bayesnet::Node::computeCPT(at::Tensor const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, double, at::Tensor const&)::{lambda(auto:1 const&)#1}::operator()<bayesnet::Node*>(bayesnet::Node* const&) const - 232009 + 79080 - _ZNK8bayesnet4Node12getNumStatesEv + bayesnet::Node::getNumStates() const - 236412 + 81552 - _ZN8bayesnet4Node11getChildrenEv + bayesnet::Node::getChildren() - 306501 + 100284 - _ZN8bayesnet4Node14getFactorValueERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEE + bayesnet::Node::getFactorValue(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > >&) - 67302838 + 95407308 - _ZZN8bayesnet4Node14getFactorValueERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEEENKUlRKT_E_clIPS0_EEDaSI_ + auto bayesnet::Node::getFactorValue(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > >&)::{lambda(auto:1 const&)#1}::operator()<bayesnet::Node*>(bayesnet::Node* const&) const - 119110574 + 176479596 - _ZNK8bayesnet4Node7getNameB5cxx11Ev + bayesnet::Node::getName[abi:cxx11]() const - 159096442 + 205208016 diff --git a/html/bayesnet/network/Node.cc.func.html b/html/bayesnet/network/Node.cc.func.html index 3e8081b..6ca5a12 100644 --- a/html/bayesnet/network/Node.cc.func.html +++ b/html/bayesnet/network/Node.cc.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,142 +63,142 @@ - _ZN8bayesnet4Node10computeCPTERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EEdS4_ + auto bayesnet::Node::computeCPT(at::Tensor const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, double, at::Tensor const&)::{lambda(auto:1 const&)#1}::operator()<bayesnet::Node*>(bayesnet::Node* const&) const - 121388 + 79080 - _ZN8bayesnet4Node10getParentsEv + auto bayesnet::Node::getFactorValue(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > >&)::{lambda(auto:1 const&)#1}::operator()<bayesnet::Node*>(bayesnet::Node* const&) const - 13948 + 176479596 - _ZN8bayesnet4Node11getChildrenEv + auto bayesnet::Node::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::{lambda(auto:1 const&)#1}::operator()<bayesnet::Node*>(bayesnet::Node* const&) const - 306501 + 1446 - _ZN8bayesnet4Node11removeChildEPS0_ + bayesnet::Node::Node(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) - 33 + 40176 - _ZN8bayesnet4Node12combinationsERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EE + bayesnet::Node::addChild(bayesnet::Node*) - 55 + 74904 - _ZN8bayesnet4Node12removeParentEPS0_ + bayesnet::Node::addParent(bayesnet::Node*) - 33 + 74892 - _ZN8bayesnet4Node12setNumStatesEi + bayesnet::Node::clear() - 121388 + 6 - _ZN8bayesnet4Node14getFactorValueERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEE + bayesnet::Node::combinations(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) - 67302838 + 30 - _ZN8bayesnet4Node5clearEv + bayesnet::Node::computeCPT(at::Tensor const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, double, at::Tensor const&) - 11 + 42582 - _ZN8bayesnet4Node5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::Node::getCPT() - 1683 + 630 - _ZN8bayesnet4Node6getCPTEv + bayesnet::Node::getChildren() - 1155 + 100284 - _ZN8bayesnet4Node7minFillEv + bayesnet::Node::getFactorValue(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, int> > >&) - 55 + 95407308 - _ZN8bayesnet4Node8addChildEPS0_ + bayesnet::Node::getName[abi:cxx11]() const - 224353 + 205208016 - _ZN8bayesnet4Node9addParentEPS0_ + bayesnet::Node::getNumStates() const - 224331 + 81552 - _ZN8bayesnet4NodeC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE + bayesnet::Node::getParents() - 116977 + 7608 - _ZNK8bayesnet4Node12getNumStatesEv + bayesnet::Node::graph(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) - 236412 + 918 - _ZNK8bayesnet4Node7getNameB5cxx11Ev + bayesnet::Node::minFill() - 159096442 + 30 - _ZZN8bayesnet4Node10computeCPTERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EEdS4_ENKUlRKT_E_clIPS0_EEDaSI_ + bayesnet::Node::removeChild(bayesnet::Node*) - 232009 + 18 - _ZZN8bayesnet4Node14getFactorValueERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS7_ESaISt4pairIKS7_iEEEENKUlRKT_E_clIPS0_EEDaSI_ + bayesnet::Node::removeParent(bayesnet::Node*) - 119110574 + 18 - _ZZN8bayesnet4Node5graphERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEENKUlRKT_E_clIPS0_EEDaSB_ + bayesnet::Node::setNumStates(int) - 2651 + 42582 diff --git a/html/bayesnet/network/Node.cc.gcov.html b/html/bayesnet/network/Node.cc.gcov.html index 6374f33..c02805a 100644 --- a/html/bayesnet/network/Node.cc.gcov.html +++ b/html/bayesnet/network/Node.cc.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -70,57 +70,57 @@ 8 : 9 : namespace bayesnet { 10 : - 11 116977 : Node::Node(const std::string& name) - 12 116977 : : name(name), numStates(0), cpTable(torch::Tensor()), parents(std::vector<Node*>()), children(std::vector<Node*>()) + 11 40176 : Node::Node(const std::string& name) + 12 40176 : : name(name), numStates(0), cpTable(torch::Tensor()), parents(std::vector<Node*>()), children(std::vector<Node*>()) 13 : { - 14 116977 : } - 15 11 : void Node::clear() + 14 40176 : } + 15 6 : void Node::clear() 16 : { - 17 11 : parents.clear(); - 18 11 : children.clear(); - 19 11 : cpTable = torch::Tensor(); - 20 11 : dimensions.clear(); - 21 11 : numStates = 0; - 22 11 : } - 23 159096442 : std::string Node::getName() const + 17 6 : parents.clear(); + 18 6 : children.clear(); + 19 6 : cpTable = torch::Tensor(); + 20 6 : dimensions.clear(); + 21 6 : numStates = 0; + 22 6 : } + 23 205208016 : std::string Node::getName() const 24 : { - 25 159096442 : return name; + 25 205208016 : return name; 26 : } - 27 224331 : void Node::addParent(Node* parent) + 27 74892 : void Node::addParent(Node* parent) 28 : { - 29 224331 : parents.push_back(parent); - 30 224331 : } - 31 33 : void Node::removeParent(Node* parent) + 29 74892 : parents.push_back(parent); + 30 74892 : } + 31 18 : void Node::removeParent(Node* parent) 32 : { - 33 33 : parents.erase(std::remove(parents.begin(), parents.end(), parent), parents.end()); - 34 33 : } - 35 33 : void Node::removeChild(Node* child) + 33 18 : parents.erase(std::remove(parents.begin(), parents.end(), parent), parents.end()); + 34 18 : } + 35 18 : void Node::removeChild(Node* child) 36 : { - 37 33 : children.erase(std::remove(children.begin(), children.end(), child), children.end()); - 38 33 : } - 39 224353 : void Node::addChild(Node* child) + 37 18 : children.erase(std::remove(children.begin(), children.end(), child), children.end()); + 38 18 : } + 39 74904 : void Node::addChild(Node* child) 40 : { - 41 224353 : children.push_back(child); - 42 224353 : } - 43 13948 : std::vector<Node*>& Node::getParents() + 41 74904 : children.push_back(child); + 42 74904 : } + 43 7608 : std::vector<Node*>& Node::getParents() 44 : { - 45 13948 : return parents; + 45 7608 : return parents; 46 : } - 47 306501 : std::vector<Node*>& Node::getChildren() + 47 100284 : std::vector<Node*>& Node::getChildren() 48 : { - 49 306501 : return children; + 49 100284 : return children; 50 : } - 51 236412 : int Node::getNumStates() const + 51 81552 : int Node::getNumStates() const 52 : { - 53 236412 : return numStates; + 53 81552 : return numStates; 54 : } - 55 121388 : void Node::setNumStates(int numStates) + 55 42582 : void Node::setNumStates(int numStates) 56 : { - 57 121388 : this->numStates = numStates; - 58 121388 : } - 59 1155 : torch::Tensor& Node::getCPT() + 57 42582 : this->numStates = numStates; + 58 42582 : } + 59 630 : torch::Tensor& Node::getCPT() 60 : { - 61 1155 : return cpTable; + 61 630 : return cpTable; 62 : } 63 : /* 64 : The MinFill criterion is a heuristic for variable elimination. @@ -129,76 +129,76 @@ 67 : The variable with the minimum number of edges is chosen. 68 : Here this is done computing the length of the combinations of the node neighbors taken 2 by 2. 69 : */ - 70 55 : unsigned Node::minFill() + 70 30 : unsigned Node::minFill() 71 : { - 72 55 : std::unordered_set<std::string> neighbors; - 73 143 : for (auto child : children) { - 74 88 : neighbors.emplace(child->getName()); + 72 30 : std::unordered_set<std::string> neighbors; + 73 78 : for (auto child : children) { + 74 48 : neighbors.emplace(child->getName()); 75 : } - 76 132 : for (auto parent : parents) { - 77 77 : neighbors.emplace(parent->getName()); + 76 72 : for (auto parent : parents) { + 77 42 : neighbors.emplace(parent->getName()); 78 : } - 79 55 : auto source = std::vector<std::string>(neighbors.begin(), neighbors.end()); - 80 110 : return combinations(source).size(); - 81 55 : } - 82 55 : std::vector<std::pair<std::string, std::string>> Node::combinations(const std::vector<std::string>& source) + 79 30 : auto source = std::vector<std::string>(neighbors.begin(), neighbors.end()); + 80 60 : return combinations(source).size(); + 81 30 : } + 82 30 : std::vector<std::pair<std::string, std::string>> Node::combinations(const std::vector<std::string>& source) 83 : { - 84 55 : std::vector<std::pair<std::string, std::string>> result; - 85 220 : for (int i = 0; i < source.size(); ++i) { - 86 165 : std::string temp = source[i]; - 87 341 : for (int j = i + 1; j < source.size(); ++j) { - 88 176 : result.push_back({ temp, source[j] }); + 84 30 : std::vector<std::pair<std::string, std::string>> result; + 85 120 : for (int i = 0; i < source.size(); ++i) { + 86 90 : std::string temp = source[i]; + 87 186 : for (int j = i + 1; j < source.size(); ++j) { + 88 96 : result.push_back({ temp, source[j] }); 89 : } - 90 165 : } - 91 55 : return result; + 90 90 : } + 91 30 : return result; 92 0 : } - 93 121388 : void Node::computeCPT(const torch::Tensor& dataset, const std::vector<std::string>& features, const double laplaceSmoothing, const torch::Tensor& weights) + 93 42582 : void Node::computeCPT(const torch::Tensor& dataset, const std::vector<std::string>& features, const double laplaceSmoothing, const torch::Tensor& weights) 94 : { - 95 121388 : dimensions.clear(); + 95 42582 : dimensions.clear(); 96 : // Get dimensions of the CPT - 97 121388 : dimensions.push_back(numStates); - 98 353397 : transform(parents.begin(), parents.end(), back_inserter(dimensions), [](const auto& parent) { return parent->getNumStates(); }); + 97 42582 : dimensions.push_back(numStates); + 98 121662 : transform(parents.begin(), parents.end(), back_inserter(dimensions), [](const auto& parent) { return parent->getNumStates(); }); 99 : 100 : // Create a tensor of zeros with the dimensions of the CPT - 101 121388 : cpTable = torch::zeros(dimensions, torch::kFloat) + laplaceSmoothing; + 101 42582 : cpTable = torch::zeros(dimensions, torch::kFloat) + laplaceSmoothing; 102 : // Fill table with counts - 103 121388 : auto pos = find(features.begin(), features.end(), name); - 104 121388 : if (pos == features.end()) { + 103 42582 : auto pos = find(features.begin(), features.end(), name); + 104 42582 : if (pos == features.end()) { 105 0 : throw std::logic_error("Feature " + name + " not found in dataset"); 106 : } - 107 121388 : int name_index = pos - features.begin(); - 108 21284350 : for (int n_sample = 0; n_sample < dataset.size(1); ++n_sample) { - 109 21162962 : c10::List<c10::optional<at::Tensor>> coordinates; - 110 63488886 : coordinates.push_back(dataset.index({ name_index, n_sample })); - 111 60665104 : for (auto parent : parents) { - 112 39502142 : pos = find(features.begin(), features.end(), parent->getName()); - 113 39502142 : if (pos == features.end()) { + 107 42582 : int name_index = pos - features.begin(); + 108 15411546 : for (int n_sample = 0; n_sample < dataset.size(1); ++n_sample) { + 109 15368964 : c10::List<c10::optional<at::Tensor>> coordinates; + 110 46106892 : coordinates.push_back(dataset.index({ name_index, n_sample })); + 111 43942224 : for (auto parent : parents) { + 112 28573260 : pos = find(features.begin(), features.end(), parent->getName()); + 113 28573260 : if (pos == features.end()) { 114 0 : throw std::logic_error("Feature parent " + parent->getName() + " not found in dataset"); 115 : } - 116 39502142 : int parent_index = pos - features.begin(); - 117 118506426 : coordinates.push_back(dataset.index({ parent_index, n_sample })); + 116 28573260 : int parent_index = pos - features.begin(); + 117 85719780 : coordinates.push_back(dataset.index({ parent_index, n_sample })); 118 : } 119 : // Increment the count of the corresponding coordinate - 120 42325924 : cpTable.index_put_({ coordinates }, cpTable.index({ coordinates }) + weights.index({ n_sample }).item<double>()); - 121 21162962 : } + 120 30737928 : cpTable.index_put_({ coordinates }, cpTable.index({ coordinates }) + weights.index({ n_sample }).item<double>()); + 121 15368964 : } 122 : // Normalize the counts - 123 121388 : cpTable = cpTable / cpTable.sum(0); - 124 81949454 : } - 125 67302838 : float Node::getFactorValue(std::map<std::string, int>& evidence) + 123 42582 : cpTable = cpTable / cpTable.sum(0); + 124 59353770 : } + 125 95407308 : float Node::getFactorValue(std::map<std::string, int>& evidence) 126 : { - 127 67302838 : c10::List<c10::optional<at::Tensor>> coordinates; + 127 95407308 : c10::List<c10::optional<at::Tensor>> coordinates; 128 : // following predetermined order of indices in the cpTable (see Node.h) - 129 67302838 : coordinates.push_back(at::tensor(evidence[name])); - 130 186413412 : transform(parents.begin(), parents.end(), std::back_inserter(coordinates), [&evidence](const auto& parent) { return at::tensor(evidence[parent->getName()]); }); - 131 134605676 : return cpTable.index({ coordinates }).item<float>(); - 132 67302838 : } - 133 1683 : std::vector<std::string> Node::graph(const std::string& className) + 129 95407308 : coordinates.push_back(at::tensor(evidence[name])); + 130 271886904 : transform(parents.begin(), parents.end(), std::back_inserter(coordinates), [&evidence](const auto& parent) { return at::tensor(evidence[parent->getName()]); }); + 131 190814616 : return cpTable.index({ coordinates }).item<float>(); + 132 95407308 : } + 133 918 : std::vector<std::string> Node::graph(const std::string& className) 134 : { - 135 1683 : auto output = std::vector<std::string>(); - 136 1683 : auto suffix = name == className ? ", fontcolor=red, fillcolor=lightblue, style=filled " : ""; - 137 1683 : output.push_back(name + " [shape=circle" + suffix + "] \n"); - 138 4334 : transform(children.begin(), children.end(), back_inserter(output), [this](const auto& child) { return name + " -> " + child->getName(); }); - 139 1683 : return output; + 135 918 : auto output = std::vector<std::string>(); + 136 918 : auto suffix = name == className ? ", fontcolor=red, fillcolor=lightblue, style=filled " : ""; + 137 918 : output.push_back(name + " [shape=circle" + suffix + "] \n"); + 138 2364 : transform(children.begin(), children.end(), back_inserter(output), [this](const auto& child) { return name + " -> " + child->getName(); }); + 139 918 : return output; 140 0 : } 141 : } diff --git a/html/bayesnet/network/index-sort-f.html b/html/bayesnet/network/index-sort-f.html index 1868e33..c0d9583 100644 --- a/html/bayesnet/network/index-sort-f.html +++ b/html/bayesnet/network/index-sort-f.html @@ -31,13 +31,13 @@ coverage.info Lines: - 97.2 % - 386 + 97.7 % + 384 375 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -106,10 +106,10 @@ Network.cc -
97.6%97.6%
+
98.3%98.3%
- 97.6 % - 297 + 98.3 % + 295 290 100.0 % 40 diff --git a/html/bayesnet/network/index-sort-l.html b/html/bayesnet/network/index-sort-l.html index a3532df..a318281 100644 --- a/html/bayesnet/network/index-sort-l.html +++ b/html/bayesnet/network/index-sort-l.html @@ -31,13 +31,13 @@ coverage.info Lines: - 97.2 % - 386 + 97.7 % + 384 375 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -94,10 +94,10 @@ Network.cc -
97.6%97.6%
+
98.3%98.3%
- 97.6 % - 297 + 98.3 % + 295 290 100.0 % 40 diff --git a/html/bayesnet/network/index.html b/html/bayesnet/network/index.html index 55e9199..f3e0dd6 100644 --- a/html/bayesnet/network/index.html +++ b/html/bayesnet/network/index.html @@ -31,13 +31,13 @@ coverage.info Lines: - 97.2 % - 386 + 97.7 % + 384 375 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -82,10 +82,10 @@ Network.cc -
97.6%97.6%
+
98.3%98.3%
- 97.6 % - 297 + 98.3 % + 295 290 100.0 % 40 diff --git a/html/bayesnet/utils/BayesMetrics.cc.func-c.html b/html/bayesnet/utils/BayesMetrics.cc.func-c.html index e02589e..31cb90c 100644 --- a/html/bayesnet/utils/BayesMetrics.cc.func-c.html +++ b/html/bayesnet/utils/BayesMetrics.cc.func-c.html @@ -31,17 +31,17 @@ coverage.info Lines: - 92.5 % - 120 + 97.4 % + 114 111 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 91.7 % - 12 + 100.0 % + 11 11 @@ -63,86 +63,79 @@ - _ZN8bayesnet7Metrics22conditionalEdgeWeightsERSt6vectorIfSaIfEE + bayesnet::Metrics::getScoresKBest() const - 0 + 48 - _ZNK8bayesnet7Metrics14getScoresKBestEv + bayesnet::Metrics::Metrics(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > > const&, std::vector<int, std::allocator<int> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int) - 88 + 96 - _ZN8bayesnet7MetricsC2ERKSt6vectorIS1_IiSaIiEESaIS3_EERKS3_RKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISF_EERKSF_i + bayesnet::Metrics::maximumSpanningTree(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, at::Tensor const&, int) - 176 + 174 - _ZN8bayesnet7Metrics19maximumSpanningTreeERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKN2at6TensorEi + bayesnet::Metrics::conditionalEdge(at::Tensor const&) - 319 + 204 - _ZN8bayesnet7Metrics15conditionalEdgeERKN2at6TensorE + bayesnet::Metrics::SelectKBestWeighted(at::Tensor const&, bool, unsigned int) - 374 + 690 - _ZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbj + bayesnet::Metrics::Metrics(at::Tensor const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int) - 1099 + 2248 - _ZN8bayesnet7MetricsC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_i + bayesnet::Metrics::SelectKBestWeighted(at::Tensor const&, bool, unsigned int)::{lambda(int, int)#1}::operator()(int, int) const - 3957 + 2718 - _ZZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjENKUliiE_clEii + bayesnet::Metrics::conditionalEntropy(at::Tensor const&, at::Tensor const&, at::Tensor const&) - 5931 + 44793 - _ZN8bayesnet7Metrics17mutualInformationERKN2at6TensorES4_S4_ + bayesnet::Metrics::mutualInformation(at::Tensor const&, at::Tensor const&, at::Tensor const&) - 91263 + 44793 - _ZN8bayesnet7Metrics18conditionalEntropyERKN2at6TensorES4_S4_ + bayesnet::Metrics::entropy(at::Tensor const&, at::Tensor const&) - 91263 + 50295 - _ZN8bayesnet7Metrics7entropyERKN2at6TensorES4_ + bayesnet::Metrics::SelectKBestWeighted(at::Tensor const&, bool, unsigned int)::{lambda(int, int)#2}::operator()(int, int) const - 101565 - - - - - _ZZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjENKUliiE0_clEii - - 168709 + 97212 diff --git a/html/bayesnet/utils/BayesMetrics.cc.func.html b/html/bayesnet/utils/BayesMetrics.cc.func.html index 2883106..c818eec 100644 --- a/html/bayesnet/utils/BayesMetrics.cc.func.html +++ b/html/bayesnet/utils/BayesMetrics.cc.func.html @@ -31,17 +31,17 @@ coverage.info Lines: - 92.5 % - 120 + 97.4 % + 114 111 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 91.7 % - 12 + 100.0 % + 11 11 @@ -63,86 +63,79 @@ - _ZN8bayesnet7Metrics15conditionalEdgeERKN2at6TensorE + bayesnet::Metrics::Metrics(at::Tensor const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int) - 374 + 2248 - _ZN8bayesnet7Metrics17mutualInformationERKN2at6TensorES4_S4_ + bayesnet::Metrics::Metrics(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > > const&, std::vector<int, std::allocator<int> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int) - 91263 + 96 - _ZN8bayesnet7Metrics18conditionalEntropyERKN2at6TensorES4_S4_ + bayesnet::Metrics::SelectKBestWeighted(at::Tensor const&, bool, unsigned int) - 91263 + 690 - _ZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbj + bayesnet::Metrics::SelectKBestWeighted(at::Tensor const&, bool, unsigned int)::{lambda(int, int)#1}::operator()(int, int) const - 1099 + 2718 - _ZN8bayesnet7Metrics19maximumSpanningTreeERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKN2at6TensorEi + bayesnet::Metrics::SelectKBestWeighted(at::Tensor const&, bool, unsigned int)::{lambda(int, int)#2}::operator()(int, int) const - 319 + 97212 - _ZN8bayesnet7Metrics22conditionalEdgeWeightsERSt6vectorIfSaIfEE + bayesnet::Metrics::conditionalEdge(at::Tensor const&) - 0 + 204 - _ZN8bayesnet7Metrics7entropyERKN2at6TensorES4_ + bayesnet::Metrics::conditionalEntropy(at::Tensor const&, at::Tensor const&, at::Tensor const&) - 101565 + 44793 - _ZN8bayesnet7MetricsC2ERKN2at6TensorERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EERKSB_i + bayesnet::Metrics::entropy(at::Tensor const&, at::Tensor const&) - 3957 + 50295 - _ZN8bayesnet7MetricsC2ERKSt6vectorIS1_IiSaIiEESaIS3_EERKS3_RKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISF_EERKSF_i + bayesnet::Metrics::getScoresKBest() const - 176 + 48 - _ZNK8bayesnet7Metrics14getScoresKBestEv + bayesnet::Metrics::maximumSpanningTree(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, at::Tensor const&, int) - 88 + 174 - _ZZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjENKUliiE0_clEii + bayesnet::Metrics::mutualInformation(at::Tensor const&, at::Tensor const&, at::Tensor const&) - 168709 - - - - - _ZZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjENKUliiE_clEii - - 5931 + 44793 diff --git a/html/bayesnet/utils/BayesMetrics.cc.gcov.html b/html/bayesnet/utils/BayesMetrics.cc.gcov.html index d6b2ebe..b2453fb 100644 --- a/html/bayesnet/utils/BayesMetrics.cc.gcov.html +++ b/html/bayesnet/utils/BayesMetrics.cc.gcov.html @@ -31,17 +31,17 @@ coverage.info Lines: - 92.5 % - 120 + 97.4 % + 114 111 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 91.7 % - 12 + 100.0 % + 11 11 @@ -70,165 +70,157 @@ 8 : #include "BayesMetrics.h" 9 : namespace bayesnet { 10 : //samples is n+1xm tensor used to fit the model - 11 3957 : Metrics::Metrics(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int classNumStates) - 12 3957 : : samples(samples) - 13 3957 : , features(features) - 14 3957 : , className(className) - 15 3957 : , classNumStates(classNumStates) + 11 2248 : Metrics::Metrics(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int classNumStates) + 12 2248 : : samples(samples) + 13 2248 : , className(className) + 14 2248 : , features(features) + 15 2248 : , classNumStates(classNumStates) 16 : { - 17 3957 : } + 17 2248 : } 18 : //samples is n+1xm std::vector used to fit the model - 19 176 : Metrics::Metrics(const std::vector<std::vector<int>>& vsamples, const std::vector<int>& labels, const std::vector<std::string>& features, const std::string& className, const int classNumStates) - 20 176 : : features(features) - 21 176 : , className(className) - 22 176 : , classNumStates(classNumStates) - 23 352 : , samples(torch::zeros({ static_cast<int>(vsamples.size() + 1), static_cast<int>(vsamples[0].size()) }, torch::kInt32)) + 19 96 : Metrics::Metrics(const std::vector<std::vector<int>>& vsamples, const std::vector<int>& labels, const std::vector<std::string>& features, const std::string& className, const int classNumStates) + 20 96 : : samples(torch::zeros({ static_cast<int>(vsamples.size() + 1), static_cast<int>(vsamples[0].size()) }, torch::kInt32)) + 21 96 : , className(className) + 22 96 : , features(features) + 23 96 : , classNumStates(classNumStates) 24 : { - 25 1408 : for (int i = 0; i < vsamples.size(); ++i) { - 26 4928 : samples.index_put_({ i, "..." }, torch::tensor(vsamples[i], torch::kInt32)); + 25 768 : for (int i = 0; i < vsamples.size(); ++i) { + 26 2688 : samples.index_put_({ i, "..." }, torch::tensor(vsamples[i], torch::kInt32)); 27 : } - 28 704 : samples.index_put_({ -1, "..." }, torch::tensor(labels, torch::kInt32)); - 29 1584 : } - 30 1099 : std::vector<int> Metrics::SelectKBestWeighted(const torch::Tensor& weights, bool ascending, unsigned k) + 28 384 : samples.index_put_({ -1, "..." }, torch::tensor(labels, torch::kInt32)); + 29 864 : } + 30 690 : std::vector<int> Metrics::SelectKBestWeighted(const torch::Tensor& weights, bool ascending, unsigned k) 31 : { 32 : // Return the K Best features - 33 1099 : auto n = features.size(); - 34 1099 : if (k == 0) { + 33 690 : auto n = features.size(); + 34 690 : if (k == 0) { 35 0 : k = n; 36 : } 37 : // compute scores - 38 1099 : scoresKBest.clear(); - 39 1099 : featuresKBest.clear(); - 40 3297 : auto label = samples.index({ -1, "..." }); - 41 37425 : for (int i = 0; i < n; ++i) { - 42 108978 : scoresKBest.push_back(mutualInformation(label, samples.index({ i, "..." }), weights)); - 43 36326 : featuresKBest.push_back(i); + 38 690 : scoresKBest.clear(); + 39 690 : featuresKBest.clear(); + 40 2070 : auto label = samples.index({ -1, "..." }); + 41 15576 : for (int i = 0; i < n; ++i) { + 42 44658 : scoresKBest.push_back(mutualInformation(label, samples.index({ i, "..." }), weights)); + 43 14886 : featuresKBest.push_back(i); 44 : } 45 : // sort & reduce scores and features - 46 1099 : if (ascending) { - 47 245 : sort(featuresKBest.begin(), featuresKBest.end(), [&](int i, int j) - 48 5931 : { return scoresKBest[i] < scoresKBest[j]; }); - 49 245 : sort(scoresKBest.begin(), scoresKBest.end(), std::less<double>()); - 50 245 : if (k < n) { - 51 308 : for (int i = 0; i < n - k; ++i) { - 52 220 : featuresKBest.erase(featuresKBest.begin()); - 53 220 : scoresKBest.erase(scoresKBest.begin()); + 46 690 : if (ascending) { + 47 114 : sort(featuresKBest.begin(), featuresKBest.end(), [&](int i, int j) + 48 2718 : { return scoresKBest[i] < scoresKBest[j]; }); + 49 114 : sort(scoresKBest.begin(), scoresKBest.end(), std::less<double>()); + 50 114 : if (k < n) { + 51 168 : for (int i = 0; i < n - k; ++i) { + 52 120 : featuresKBest.erase(featuresKBest.begin()); + 53 120 : scoresKBest.erase(scoresKBest.begin()); 54 : } 55 : } 56 : } else { - 57 854 : sort(featuresKBest.begin(), featuresKBest.end(), [&](int i, int j) - 58 168709 : { return scoresKBest[i] > scoresKBest[j]; }); - 59 854 : sort(scoresKBest.begin(), scoresKBest.end(), std::greater<double>()); - 60 854 : featuresKBest.resize(k); - 61 854 : scoresKBest.resize(k); + 57 576 : sort(featuresKBest.begin(), featuresKBest.end(), [&](int i, int j) + 58 97212 : { return scoresKBest[i] > scoresKBest[j]; }); + 59 576 : sort(scoresKBest.begin(), scoresKBest.end(), std::greater<double>()); + 60 576 : featuresKBest.resize(k); + 61 576 : scoresKBest.resize(k); 62 : } - 63 2198 : return featuresKBest; - 64 38524 : } - 65 88 : std::vector<double> Metrics::getScoresKBest() const + 63 1380 : return featuresKBest; + 64 16266 : } + 65 48 : std::vector<double> Metrics::getScoresKBest() const 66 : { - 67 88 : return scoresKBest; + 67 48 : return scoresKBest; 68 : } 69 : - 70 374 : torch::Tensor Metrics::conditionalEdge(const torch::Tensor& weights) + 70 204 : torch::Tensor Metrics::conditionalEdge(const torch::Tensor& weights) 71 : { - 72 374 : auto result = std::vector<double>(); - 73 374 : auto source = std::vector<std::string>(features); - 74 374 : source.push_back(className); - 75 374 : auto combinations = doCombinations(source); + 72 204 : auto result = std::vector<double>(); + 73 204 : auto source = std::vector<std::string>(features); + 74 204 : source.push_back(className); + 75 204 : auto combinations = doCombinations(source); 76 : // Compute class prior - 77 374 : auto margin = torch::zeros({ classNumStates }, torch::kFloat); - 78 2024 : for (int value = 0; value < classNumStates; ++value) { - 79 6600 : auto mask = samples.index({ -1, "..." }) == value; - 80 1650 : margin[value] = mask.sum().item<double>() / samples.size(1); - 81 1650 : } - 82 10098 : for (auto [first, second] : combinations) { - 83 9724 : int index_first = find(features.begin(), features.end(), first) - features.begin(); - 84 9724 : int index_second = find(features.begin(), features.end(), second) - features.begin(); - 85 9724 : double accumulated = 0; - 86 57640 : for (int value = 0; value < classNumStates; ++value) { - 87 191664 : auto mask = samples.index({ -1, "..." }) == value; - 88 143748 : auto first_dataset = samples.index({ index_first, mask }); - 89 143748 : auto second_dataset = samples.index({ index_second, mask }); - 90 95832 : auto weights_dataset = weights.index({ mask }); - 91 95832 : auto mi = mutualInformation(first_dataset, second_dataset, weights_dataset); - 92 47916 : auto pb = margin[value].item<double>(); - 93 47916 : accumulated += pb * mi; - 94 47916 : } - 95 9724 : result.push_back(accumulated); - 96 9724 : } - 97 374 : long n_vars = source.size(); - 98 374 : auto matrix = torch::zeros({ n_vars, n_vars }); - 99 374 : auto indices = torch::triu_indices(n_vars, n_vars, 1); - 100 10098 : for (auto i = 0; i < result.size(); ++i) { - 101 9724 : auto x = indices[0][i]; - 102 9724 : auto y = indices[1][i]; - 103 9724 : matrix[x][y] = result[i]; - 104 9724 : matrix[y][x] = result[i]; - 105 9724 : } - 106 748 : return matrix; - 107 241604 : } - 108 : // To use in Python - 109 0 : std::vector<float> Metrics::conditionalEdgeWeights(std::vector<float>& weights_) - 110 : { - 111 0 : const torch::Tensor weights = torch::tensor(weights_); - 112 0 : auto matrix = conditionalEdge(weights); - 113 0 : std::vector<float> v(matrix.data_ptr<float>(), matrix.data_ptr<float>() + matrix.numel()); - 114 0 : return v; - 115 0 : } - 116 101565 : double Metrics::entropy(const torch::Tensor& feature, const torch::Tensor& weights) - 117 : { - 118 101565 : torch::Tensor counts = feature.bincount(weights); - 119 101565 : double totalWeight = counts.sum().item<double>(); - 120 101565 : torch::Tensor probs = counts.to(torch::kFloat) / totalWeight; - 121 101565 : torch::Tensor logProbs = torch::log(probs); - 122 101565 : torch::Tensor entropy = -probs * logProbs; - 123 203130 : return entropy.nansum().item<double>(); - 124 101565 : } - 125 : // H(Y|X) = sum_{x in X} p(x) H(Y|X=x) - 126 91263 : double Metrics::conditionalEntropy(const torch::Tensor& firstFeature, const torch::Tensor& secondFeature, const torch::Tensor& weights) - 127 : { - 128 91263 : int numSamples = firstFeature.sizes()[0]; - 129 91263 : torch::Tensor featureCounts = secondFeature.bincount(weights); - 130 91263 : std::unordered_map<int, std::unordered_map<int, double>> jointCounts; - 131 91263 : double totalWeight = 0; - 132 11715815 : for (auto i = 0; i < numSamples; i++) { - 133 11624552 : jointCounts[secondFeature[i].item<int>()][firstFeature[i].item<int>()] += weights[i].item<double>(); - 134 11624552 : totalWeight += weights[i].item<float>(); - 135 : } - 136 91263 : if (totalWeight == 0) - 137 0 : return 0; - 138 91263 : double entropyValue = 0; - 139 311456 : for (int value = 0; value < featureCounts.sizes()[0]; ++value) { - 140 220193 : double p_f = featureCounts[value].item<double>() / totalWeight; - 141 220193 : double entropy_f = 0; - 142 655015 : for (auto& [label, jointCount] : jointCounts[value]) { - 143 434822 : double p_l_f = jointCount / featureCounts[value].item<double>(); - 144 434822 : if (p_l_f > 0) { - 145 434822 : entropy_f -= p_l_f * log(p_l_f); - 146 : } else { - 147 0 : entropy_f = 0; - 148 : } - 149 : } - 150 220193 : entropyValue += p_f * entropy_f; - 151 : } - 152 91263 : return entropyValue; - 153 91263 : } - 154 : // I(X;Y) = H(Y) - H(Y|X) - 155 91263 : double Metrics::mutualInformation(const torch::Tensor& firstFeature, const torch::Tensor& secondFeature, const torch::Tensor& weights) - 156 : { - 157 91263 : return entropy(firstFeature, weights) - conditionalEntropy(firstFeature, secondFeature, weights); - 158 : } - 159 : /* - 160 : Compute the maximum spanning tree considering the weights as distances - 161 : and the indices of the weights as nodes of this square matrix using - 162 : Kruskal algorithm - 163 : */ - 164 319 : std::vector<std::pair<int, int>> Metrics::maximumSpanningTree(const std::vector<std::string>& features, const torch::Tensor& weights, const int root) - 165 : { - 166 319 : auto mst = MST(features, weights, root); - 167 638 : return mst.maximumSpanningTree(); - 168 319 : } - 169 : } + 77 204 : auto margin = torch::zeros({ classNumStates }, torch::kFloat); + 78 1104 : for (int value = 0; value < classNumStates; ++value) { + 79 3600 : auto mask = samples.index({ -1, "..." }) == value; + 80 900 : margin[value] = mask.sum().item<double>() / samples.size(1); + 81 900 : } + 82 5508 : for (auto [first, second] : combinations) { + 83 5304 : int index_first = find(features.begin(), features.end(), first) - features.begin(); + 84 5304 : int index_second = find(features.begin(), features.end(), second) - features.begin(); + 85 5304 : double accumulated = 0; + 86 31440 : for (int value = 0; value < classNumStates; ++value) { + 87 104544 : auto mask = samples.index({ -1, "..." }) == value; + 88 78408 : auto first_dataset = samples.index({ index_first, mask }); + 89 78408 : auto second_dataset = samples.index({ index_second, mask }); + 90 52272 : auto weights_dataset = weights.index({ mask }); + 91 52272 : auto mi = mutualInformation(first_dataset, second_dataset, weights_dataset); + 92 26136 : auto pb = margin[value].item<double>(); + 93 26136 : accumulated += pb * mi; + 94 26136 : } + 95 5304 : result.push_back(accumulated); + 96 5304 : } + 97 204 : long n_vars = source.size(); + 98 204 : auto matrix = torch::zeros({ n_vars, n_vars }); + 99 204 : auto indices = torch::triu_indices(n_vars, n_vars, 1); + 100 5508 : for (auto i = 0; i < result.size(); ++i) { + 101 5304 : auto x = indices[0][i]; + 102 5304 : auto y = indices[1][i]; + 103 5304 : matrix[x][y] = result[i]; + 104 5304 : matrix[y][x] = result[i]; + 105 5304 : } + 106 408 : return matrix; + 107 131784 : } + 108 50295 : double Metrics::entropy(const torch::Tensor& feature, const torch::Tensor& weights) + 109 : { + 110 50295 : torch::Tensor counts = feature.bincount(weights); + 111 50295 : double totalWeight = counts.sum().item<double>(); + 112 50295 : torch::Tensor probs = counts.to(torch::kFloat) / totalWeight; + 113 50295 : torch::Tensor logProbs = torch::log(probs); + 114 50295 : torch::Tensor entropy = -probs * logProbs; + 115 100590 : return entropy.nansum().item<double>(); + 116 50295 : } + 117 : // H(Y|X) = sum_{x in X} p(x) H(Y|X=x) + 118 44793 : double Metrics::conditionalEntropy(const torch::Tensor& firstFeature, const torch::Tensor& secondFeature, const torch::Tensor& weights) + 119 : { + 120 44793 : int numSamples = firstFeature.sizes()[0]; + 121 44793 : torch::Tensor featureCounts = secondFeature.bincount(weights); + 122 44793 : std::unordered_map<int, std::unordered_map<int, double>> jointCounts; + 123 44793 : double totalWeight = 0; + 124 8954403 : for (auto i = 0; i < numSamples; i++) { + 125 8909610 : jointCounts[secondFeature[i].item<int>()][firstFeature[i].item<int>()] += weights[i].item<double>(); + 126 8909610 : totalWeight += weights[i].item<float>(); + 127 : } + 128 44793 : if (totalWeight == 0) + 129 0 : return 0; + 130 44793 : double entropyValue = 0; + 131 222747 : for (int value = 0; value < featureCounts.sizes()[0]; ++value) { + 132 177954 : double p_f = featureCounts[value].item<double>() / totalWeight; + 133 177954 : double entropy_f = 0; + 134 601680 : for (auto& [label, jointCount] : jointCounts[value]) { + 135 423726 : double p_l_f = jointCount / featureCounts[value].item<double>(); + 136 423726 : if (p_l_f > 0) { + 137 423726 : entropy_f -= p_l_f * log(p_l_f); + 138 : } else { + 139 0 : entropy_f = 0; + 140 : } + 141 : } + 142 177954 : entropyValue += p_f * entropy_f; + 143 : } + 144 44793 : return entropyValue; + 145 44793 : } + 146 : // I(X;Y) = H(Y) - H(Y|X) + 147 44793 : double Metrics::mutualInformation(const torch::Tensor& firstFeature, const torch::Tensor& secondFeature, const torch::Tensor& weights) + 148 : { + 149 44793 : return entropy(firstFeature, weights) - conditionalEntropy(firstFeature, secondFeature, weights); + 150 : } + 151 : /* + 152 : Compute the maximum spanning tree considering the weights as distances + 153 : and the indices of the weights as nodes of this square matrix using + 154 : Kruskal algorithm + 155 : */ + 156 174 : std::vector<std::pair<int, int>> Metrics::maximumSpanningTree(const std::vector<std::string>& features, const torch::Tensor& weights, const int root) + 157 : { + 158 174 : auto mst = MST(features, weights, root); + 159 348 : return mst.maximumSpanningTree(); + 160 174 : } + 161 : } diff --git a/html/bayesnet/utils/BayesMetrics.h.func-c.html b/html/bayesnet/utils/BayesMetrics.h.func-c.html index c0f5cc6..e6c7ed6 100644 --- a/html/bayesnet/utils/BayesMetrics.h.func-c.html +++ b/html/bayesnet/utils/BayesMetrics.h.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,37 +63,37 @@ - _ZN8bayesnet7Metrics9pop_firstIiEET_RSt6vectorIS2_SaIS2_EE + int bayesnet::Metrics::pop_first<int>(std::vector<int, std::allocator<int> >&) - 116 + 68 - _ZN8bayesnet7Metrics14doCombinationsIiEESt6vectorISt4pairIT_S4_ESaIS5_EERKS2_IS4_SaIS4_EE + std::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > > bayesnet::Metrics::doCombinations<int>(std::vector<int, std::allocator<int> > const&) - 2225 + 1251 - _ZN8bayesnet7Metrics14doCombinationsINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESt6vectorISt4pairIT_SA_ESaISB_EERKS8_ISA_SaISA_EE + std::vector, std::allocator >, std::__cxx11::basic_string, std::allocator > >, std::allocator, std::allocator >, std::__cxx11::basic_string, std::allocator > > > > bayesnet::Metrics::doCombinations, std::allocator > >(std::vector, std::allocator >, std::allocator, std::allocator > > > const&) - 374 + 204 - _ZN8bayesnet7Metrics14doCombinationsIiEESt6vectorISt4pairIT_S4_ESaIS5_EERKS2_IS4_SaIS4_EE + std::vector, std::allocator > > bayesnet::Metrics::doCombinations(std::vector > const&) - 1851 + 1047 - _ZN8bayesnet7MetricsC2Ev + bayesnet::Metrics::Metrics() - 4750 + 2658 diff --git a/html/bayesnet/utils/BayesMetrics.h.func.html b/html/bayesnet/utils/BayesMetrics.h.func.html index bd35a65..3f215b7 100644 --- a/html/bayesnet/utils/BayesMetrics.h.func.html +++ b/html/bayesnet/utils/BayesMetrics.h.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,37 +63,37 @@ - _ZN8bayesnet7Metrics14doCombinationsIiEESt6vectorISt4pairIT_S4_ESaIS5_EERKS2_IS4_SaIS4_EE + bayesnet::Metrics::Metrics() - 2225 + 2658 - _ZN8bayesnet7Metrics14doCombinationsINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESt6vectorISt4pairIT_SA_ESaISB_EERKS8_ISA_SaISA_EE + int bayesnet::Metrics::pop_first<int>(std::vector<int, std::allocator<int> >&) - 374 + 68 - _ZN8bayesnet7Metrics14doCombinationsIiEESt6vectorISt4pairIT_S4_ESaIS5_EERKS2_IS4_SaIS4_EE + std::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > > bayesnet::Metrics::doCombinations<int>(std::vector<int, std::allocator<int> > const&) - 1851 + 1251 - _ZN8bayesnet7Metrics9pop_firstIiEET_RSt6vectorIS2_SaIS2_EE + std::vector, std::allocator > > bayesnet::Metrics::doCombinations(std::vector > const&) - 116 + 1047 - _ZN8bayesnet7MetricsC2Ev + std::vector, std::allocator >, std::__cxx11::basic_string, std::allocator > >, std::allocator, std::allocator >, std::__cxx11::basic_string, std::allocator > > > > bayesnet::Metrics::doCombinations, std::allocator > >(std::vector, std::allocator >, std::allocator, std::allocator > > > const&) - 4750 + 204 diff --git a/html/bayesnet/utils/BayesMetrics.h.gcov.html b/html/bayesnet/utils/BayesMetrics.h.gcov.html index f048cce..2c56556 100644 --- a/html/bayesnet/utils/BayesMetrics.h.gcov.html +++ b/html/bayesnet/utils/BayesMetrics.h.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -74,47 +74,46 @@ 12 : namespace bayesnet { 13 : class Metrics { 14 : public: - 15 4750 : Metrics() = default; + 15 2658 : Metrics() = default; 16 : Metrics(const torch::Tensor& samples, const std::vector<std::string>& features, const std::string& className, const int classNumStates); 17 : Metrics(const std::vector<std::vector<int>>& vsamples, const std::vector<int>& labels, const std::vector<std::string>& features, const std::string& className, const int classNumStates); 18 : std::vector<int> SelectKBestWeighted(const torch::Tensor& weights, bool ascending = false, unsigned k = 0); 19 : std::vector<double> getScoresKBest() const; 20 : double mutualInformation(const torch::Tensor& firstFeature, const torch::Tensor& secondFeature, const torch::Tensor& weights); - 21 : std::vector<float> conditionalEdgeWeights(std::vector<float>& weights); // To use in Python - 22 : torch::Tensor conditionalEdge(const torch::Tensor& weights); - 23 : std::vector<std::pair<int, int>> maximumSpanningTree(const std::vector<std::string>& features, const torch::Tensor& weights, const int root); - 24 : protected: - 25 : torch::Tensor samples; // n+1xm torch::Tensor used to fit the model where samples[-1] is the y std::vector - 26 : std::string className; - 27 : double entropy(const torch::Tensor& feature, const torch::Tensor& weights); - 28 : std::vector<std::string> features; - 29 : template <class T> - 30 2225 : std::vector<std::pair<T, T>> doCombinations(const std::vector<T>& source) - 31 : { - 32 2225 : std::vector<std::pair<T, T>> result; - 33 11660 : for (int i = 0; i < source.size(); ++i) { - 34 9435 : T temp = source[i]; - 35 29517 : for (int j = i + 1; j < source.size(); ++j) { - 36 20082 : result.push_back({ temp, source[j] }); - 37 : } - 38 : } - 39 2225 : return result; - 40 0 : } - 41 : template <class T> - 42 116 : T pop_first(std::vector<T>& v) - 43 : { - 44 116 : T temp = v[0]; - 45 116 : v.erase(v.begin()); - 46 116 : return temp; - 47 : } - 48 : private: - 49 : int classNumStates = 0; - 50 : std::vector<double> scoresKBest; - 51 : std::vector<int> featuresKBest; // sorted indices of the features - 52 : double conditionalEntropy(const torch::Tensor& firstFeature, const torch::Tensor& secondFeature, const torch::Tensor& weights); - 53 : }; - 54 : } - 55 : #endif + 21 : torch::Tensor conditionalEdge(const torch::Tensor& weights); + 22 : std::vector<std::pair<int, int>> maximumSpanningTree(const std::vector<std::string>& features, const torch::Tensor& weights, const int root); + 23 : protected: + 24 : torch::Tensor samples; // n+1xm torch::Tensor used to fit the model where samples[-1] is the y std::vector + 25 : std::string className; + 26 : double entropy(const torch::Tensor& feature, const torch::Tensor& weights); + 27 : std::vector<std::string> features; + 28 : template <class T> + 29 1251 : std::vector<std::pair<T, T>> doCombinations(const std::vector<T>& source) + 30 : { + 31 1251 : std::vector<std::pair<T, T>> result; + 32 6532 : for (int i = 0; i < source.size(); ++i) { + 33 5281 : T temp = source[i]; + 34 16445 : for (int j = i + 1; j < source.size(); ++j) { + 35 11164 : result.push_back({ temp, source[j] }); + 36 : } + 37 : } + 38 1251 : return result; + 39 0 : } + 40 : template <class T> + 41 68 : T pop_first(std::vector<T>& v) + 42 : { + 43 68 : T temp = v[0]; + 44 68 : v.erase(v.begin()); + 45 68 : return temp; + 46 : } + 47 : private: + 48 : int classNumStates = 0; + 49 : std::vector<double> scoresKBest; + 50 : std::vector<int> featuresKBest; // sorted indices of the features + 51 : double conditionalEntropy(const torch::Tensor& firstFeature, const torch::Tensor& secondFeature, const torch::Tensor& weights); + 52 : }; + 53 : } + 54 : #endif diff --git a/html/bayesnet/utils/Mst.cc.func-c.html b/html/bayesnet/utils/Mst.cc.func-c.html index 00e6fd7..c6d2865 100644 --- a/html/bayesnet/utils/Mst.cc.func-c.html +++ b/html/bayesnet/utils/Mst.cc.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,72 +63,72 @@ - _ZN8bayesnet3MST19maximumSpanningTreeEv + bayesnet::Graph::Graph(int) - 319 + 174 - _ZN8bayesnet3MSTC2ERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKN2at6TensorEi + bayesnet::Graph::kruskal_algorithm() - 319 + 174 - _ZN8bayesnet5Graph17kruskal_algorithmEv + bayesnet::MST::MST(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, at::Tensor const&, int) - 319 + 174 - _ZN8bayesnet5GraphC2Ei + bayesnet::MST::maximumSpanningTree() - 319 + 174 - _ZN8bayesnet7reorderESt6vectorISt4pairIfS1_IiiEESaIS3_EEi + bayesnet::reorder(std::vector<std::pair<float, std::pair<int, int> >, std::allocator<std::pair<float, std::pair<int, int> > > >, int) - 319 + 174 - _ZN8bayesnet13insertElementERNSt7__cxx114listIiSaIiEEEi + bayesnet::Graph::union_set(int, int) - 1749 + 954 - _ZN8bayesnet5Graph9union_setEii + bayesnet::insertElement(std::__cxx11::list<int, std::allocator<int> >&, int) - 1749 + 954 - _ZN8bayesnet5Graph7addEdgeEiif + bayesnet::Graph::addEdge(int, int, float) - 6336 + 3456 - _ZZN8bayesnet5Graph17kruskal_algorithmEvENKUlRKT_RKT0_E_clISt4pairIfS9_IiiEESB_EEDaS3_S6_ + auto bayesnet::Graph::kruskal_algorithm()::{lambda(auto:1 const&, auto:2 const&)#1}::operator()<std::pair<float, std::pair<int, int> >, std::pair<float, std::pair<int, int> > >(std::pair<float, std::pair<int, int> > const&, std::pair<float, std::pair<int, int> > const&) const - 24343 + 13278 - _ZN8bayesnet5Graph8find_setEi + bayesnet::Graph::find_set(int) - 29293 + 15978 diff --git a/html/bayesnet/utils/Mst.cc.func.html b/html/bayesnet/utils/Mst.cc.func.html index 50e602e..e5770b6 100644 --- a/html/bayesnet/utils/Mst.cc.func.html +++ b/html/bayesnet/utils/Mst.cc.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,72 +63,72 @@ - _ZN8bayesnet13insertElementERNSt7__cxx114listIiSaIiEEEi + auto bayesnet::Graph::kruskal_algorithm()::{lambda(auto:1 const&, auto:2 const&)#1}::operator()<std::pair<float, std::pair<int, int> >, std::pair<float, std::pair<int, int> > >(std::pair<float, std::pair<int, int> > const&, std::pair<float, std::pair<int, int> > const&) const - 1749 + 13278 - _ZN8bayesnet3MST19maximumSpanningTreeEv + bayesnet::Graph::Graph(int) - 319 + 174 - _ZN8bayesnet3MSTC2ERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS7_EERKN2at6TensorEi + bayesnet::Graph::addEdge(int, int, float) - 319 + 3456 - _ZN8bayesnet5Graph17kruskal_algorithmEv + bayesnet::Graph::find_set(int) - 319 + 15978 - _ZN8bayesnet5Graph7addEdgeEiif + bayesnet::Graph::kruskal_algorithm() - 6336 + 174 - _ZN8bayesnet5Graph8find_setEi + bayesnet::Graph::union_set(int, int) - 29293 + 954 - _ZN8bayesnet5Graph9union_setEii + bayesnet::MST::MST(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, at::Tensor const&, int) - 1749 + 174 - _ZN8bayesnet5GraphC2Ei + bayesnet::MST::maximumSpanningTree() - 319 + 174 - _ZN8bayesnet7reorderESt6vectorISt4pairIfS1_IiiEESaIS3_EEi + bayesnet::insertElement(std::__cxx11::list<int, std::allocator<int> >&, int) - 319 + 954 - _ZZN8bayesnet5Graph17kruskal_algorithmEvENKUlRKT_RKT0_E_clISt4pairIfS9_IiiEESB_EEDaS3_S6_ + bayesnet::reorder(std::vector<std::pair<float, std::pair<int, int> >, std::allocator<std::pair<float, std::pair<int, int> > > >, int) - 24343 + 174 diff --git a/html/bayesnet/utils/Mst.cc.gcov.html b/html/bayesnet/utils/Mst.cc.gcov.html index ddfb305..fb11c90 100644 --- a/html/bayesnet/utils/Mst.cc.gcov.html +++ b/html/bayesnet/utils/Mst.cc.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -76,108 +76,108 @@ 14 : */ 15 : 16 : namespace bayesnet { - 17 638 : Graph::Graph(int V) : V(V), parent(std::vector<int>(V)) + 17 348 : Graph::Graph(int V) : V(V), parent(std::vector<int>(V)) 18 : { - 19 2387 : for (int i = 0; i < V; i++) - 20 2068 : parent[i] = i; - 21 319 : G.clear(); - 22 319 : T.clear(); - 23 319 : } - 24 6336 : void Graph::addEdge(int u, int v, float wt) + 19 1302 : for (int i = 0; i < V; i++) + 20 1128 : parent[i] = i; + 21 174 : G.clear(); + 22 174 : T.clear(); + 23 174 : } + 24 3456 : void Graph::addEdge(int u, int v, float wt) 25 : { - 26 6336 : G.push_back({ wt, { u, v } }); - 27 6336 : } - 28 29293 : int Graph::find_set(int i) + 26 3456 : G.push_back({ wt, { u, v } }); + 27 3456 : } + 28 15978 : int Graph::find_set(int i) 29 : { 30 : // If i is the parent of itself - 31 29293 : if (i == parent[i]) - 32 12672 : return i; + 31 15978 : if (i == parent[i]) + 32 6912 : return i; 33 : else 34 : //else recursively find the parent of i - 35 16621 : return find_set(parent[i]); + 35 9066 : return find_set(parent[i]); 36 : } - 37 1749 : void Graph::union_set(int u, int v) + 37 954 : void Graph::union_set(int u, int v) 38 : { - 39 1749 : parent[u] = parent[v]; - 40 1749 : } - 41 319 : void Graph::kruskal_algorithm() + 39 954 : parent[u] = parent[v]; + 40 954 : } + 41 174 : void Graph::kruskal_algorithm() 42 : { 43 : // sort the edges ordered on decreasing weight - 44 24662 : stable_sort(G.begin(), G.end(), [](const auto& left, const auto& right) {return left.first > right.first;}); - 45 6655 : for (int i = 0; i < G.size(); i++) { + 44 13452 : stable_sort(G.begin(), G.end(), [](const auto& left, const auto& right) {return left.first > right.first;}); + 45 3630 : for (int i = 0; i < G.size(); i++) { 46 : int uSt, vEd; - 47 6336 : uSt = find_set(G[i].second.first); - 48 6336 : vEd = find_set(G[i].second.second); - 49 6336 : if (uSt != vEd) { - 50 1749 : T.push_back(G[i]); // add to mst std::vector - 51 1749 : union_set(uSt, vEd); + 47 3456 : uSt = find_set(G[i].second.first); + 48 3456 : vEd = find_set(G[i].second.second); + 49 3456 : if (uSt != vEd) { + 50 954 : T.push_back(G[i]); // add to mst std::vector + 51 954 : union_set(uSt, vEd); 52 : } 53 : } - 54 319 : } + 54 174 : } 55 : - 56 1749 : void insertElement(std::list<int>& variables, int variable) + 56 954 : void insertElement(std::list<int>& variables, int variable) 57 : { - 58 1749 : if (std::find(variables.begin(), variables.end(), variable) == variables.end()) { - 59 1749 : variables.push_front(variable); + 58 954 : if (std::find(variables.begin(), variables.end(), variable) == variables.end()) { + 59 954 : variables.push_front(variable); 60 : } - 61 1749 : } + 61 954 : } 62 : - 63 319 : std::vector<std::pair<int, int>> reorder(std::vector<std::pair<float, std::pair<int, int>>> T, int root_original) + 63 174 : std::vector<std::pair<int, int>> reorder(std::vector<std::pair<float, std::pair<int, int>>> T, int root_original) 64 : { 65 : // Create the edges of a DAG from the MST 66 : // replacing unordered_set with list because unordered_set cannot guarantee the order of the elements inserted - 67 319 : auto result = std::vector<std::pair<int, int>>(); - 68 319 : auto visited = std::vector<int>(); - 69 319 : auto nextVariables = std::list<int>(); - 70 319 : nextVariables.push_front(root_original); - 71 2387 : while (nextVariables.size() > 0) { - 72 2068 : int root = nextVariables.front(); - 73 2068 : nextVariables.pop_front(); - 74 7304 : for (int i = 0; i < T.size(); ++i) { - 75 5236 : auto [weight, edge] = T[i]; - 76 5236 : auto [from, to] = edge; - 77 5236 : if (from == root || to == root) { - 78 1749 : visited.insert(visited.begin(), i); - 79 1749 : if (from == root) { - 80 1166 : result.push_back({ from, to }); - 81 1166 : insertElement(nextVariables, to); + 67 174 : auto result = std::vector<std::pair<int, int>>(); + 68 174 : auto visited = std::vector<int>(); + 69 174 : auto nextVariables = std::list<int>(); + 70 174 : nextVariables.push_front(root_original); + 71 1302 : while (nextVariables.size() > 0) { + 72 1128 : int root = nextVariables.front(); + 73 1128 : nextVariables.pop_front(); + 74 3984 : for (int i = 0; i < T.size(); ++i) { + 75 2856 : auto [weight, edge] = T[i]; + 76 2856 : auto [from, to] = edge; + 77 2856 : if (from == root || to == root) { + 78 954 : visited.insert(visited.begin(), i); + 79 954 : if (from == root) { + 80 636 : result.push_back({ from, to }); + 81 636 : insertElement(nextVariables, to); 82 : } else { - 83 583 : result.push_back({ to, from }); - 84 583 : insertElement(nextVariables, from); + 83 318 : result.push_back({ to, from }); + 84 318 : insertElement(nextVariables, from); 85 : } 86 : } 87 : } 88 : // Remove visited - 89 3817 : for (int i = 0; i < visited.size(); ++i) { - 90 1749 : T.erase(T.begin() + visited[i]); + 89 2082 : for (int i = 0; i < visited.size(); ++i) { + 90 954 : T.erase(T.begin() + visited[i]); 91 : } - 92 2068 : visited.clear(); + 92 1128 : visited.clear(); 93 : } - 94 319 : if (T.size() > 0) { + 94 174 : if (T.size() > 0) { 95 0 : for (int i = 0; i < T.size(); ++i) { 96 0 : auto [weight, edge] = T[i]; 97 0 : auto [from, to] = edge; 98 0 : result.push_back({ from, to }); 99 : } 100 : } - 101 638 : return result; - 102 319 : } + 101 348 : return result; + 102 174 : } 103 : - 104 319 : MST::MST(const std::vector<std::string>& features, const torch::Tensor& weights, const int root) : features(features), weights(weights), root(root) {} - 105 319 : std::vector<std::pair<int, int>> MST::maximumSpanningTree() + 104 174 : MST::MST(const std::vector<std::string>& features, const torch::Tensor& weights, const int root) : features(features), weights(weights), root(root) {} + 105 174 : std::vector<std::pair<int, int>> MST::maximumSpanningTree() 106 : { - 107 319 : auto num_features = features.size(); - 108 319 : Graph g(num_features); + 107 174 : auto num_features = features.size(); + 108 174 : Graph g(num_features); 109 : // Make a complete graph - 110 2068 : for (int i = 0; i < num_features - 1; ++i) { - 111 8085 : for (int j = i + 1; j < num_features; ++j) { - 112 6336 : g.addEdge(i, j, weights[i][j].item<float>()); + 110 1128 : for (int i = 0; i < num_features - 1; ++i) { + 111 4410 : for (int j = i + 1; j < num_features; ++j) { + 112 3456 : g.addEdge(i, j, weights[i][j].item<float>()); 113 : } 114 : } - 115 319 : g.kruskal_algorithm(); - 116 319 : auto mst = g.get_mst(); - 117 638 : return reorder(mst, root); - 118 319 : } + 115 174 : g.kruskal_algorithm(); + 116 174 : auto mst = g.get_mst(); + 117 348 : return reorder(mst, root); + 118 174 : } 119 : 120 : } diff --git a/html/bayesnet/utils/Mst.h.func-c.html b/html/bayesnet/utils/Mst.h.func-c.html index 4a7e6ef..9706ec4 100644 --- a/html/bayesnet/utils/Mst.h.func-c.html +++ b/html/bayesnet/utils/Mst.h.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,9 +63,9 @@ - _ZN8bayesnet5Graph7get_mstEv + bayesnet::Graph::get_mst() - 319 + 174 diff --git a/html/bayesnet/utils/Mst.h.func.html b/html/bayesnet/utils/Mst.h.func.html index 03390c5..cde5717 100644 --- a/html/bayesnet/utils/Mst.h.func.html +++ b/html/bayesnet/utils/Mst.h.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,9 +63,9 @@ - _ZN8bayesnet5Graph7get_mstEv + bayesnet::Graph::get_mst() - 319 + 174 diff --git a/html/bayesnet/utils/Mst.h.gcov.html b/html/bayesnet/utils/Mst.h.gcov.html index 229f4bf..e253982 100644 --- a/html/bayesnet/utils/Mst.h.gcov.html +++ b/html/bayesnet/utils/Mst.h.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -89,7 +89,7 @@ 27 : int find_set(int i); 28 : void union_set(int u, int v); 29 : void kruskal_algorithm(); - 30 319 : std::vector <std::pair<float, std::pair<int, int>>> get_mst() { return T; } + 30 174 : std::vector <std::pair<float, std::pair<int, int>>> get_mst() { return T; } 31 : private: 32 : int V; // number of nodes in graph 33 : std::vector <std::pair<float, std::pair<int, int>>> G; // std::vector for graph diff --git a/html/bayesnet/utils/bayesnetUtils.cc.func-c.html b/html/bayesnet/utils/bayesnetUtils.cc.func-c.html index 3970a27..5042e0e 100644 --- a/html/bayesnet/utils/bayesnetUtils.cc.func-c.html +++ b/html/bayesnet/utils/bayesnetUtils.cc.func-c.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,30 +63,30 @@ - _ZN8bayesnet20tensorToVectorDoubleERN2at6TensorE + bayesnet::tensorToVectorDouble(at::Tensor&) - 82 + 42 - _ZN8bayesnet14vectorToTensorERSt6vectorIS0_IiSaIiEESaIS2_EEb + bayesnet::vectorToTensor(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&, bool) - 104 + 54 - _ZN8bayesnet7argsortERSt6vectorIdSaIdEE + bayesnet::argsort(std::vector<double, std::allocator<double> >&) - 327 + 186 - _ZZN8bayesnet7argsortERSt6vectorIdSaIdEEENKUliiE_clEii + bayesnet::argsort(std::vector<double, std::allocator<double> >&)::{lambda(int, int)#1}::operator()(int, int) const - 8693 + 3630 diff --git a/html/bayesnet/utils/bayesnetUtils.cc.func.html b/html/bayesnet/utils/bayesnetUtils.cc.func.html index c289429..ac17db7 100644 --- a/html/bayesnet/utils/bayesnetUtils.cc.func.html +++ b/html/bayesnet/utils/bayesnetUtils.cc.func.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -63,30 +63,30 @@ - _ZN8bayesnet14vectorToTensorERSt6vectorIS0_IiSaIiEESaIS2_EEb + bayesnet::argsort(std::vector<double, std::allocator<double> >&) - 104 + 186 - _ZN8bayesnet20tensorToVectorDoubleERN2at6TensorE + bayesnet::argsort(std::vector<double, std::allocator<double> >&)::{lambda(int, int)#1}::operator()(int, int) const - 82 + 3630 - _ZN8bayesnet7argsortERSt6vectorIdSaIdEE + bayesnet::tensorToVectorDouble(at::Tensor&) - 327 + 42 - _ZZN8bayesnet7argsortERSt6vectorIdSaIdEEENKUliiE_clEii + bayesnet::vectorToTensor(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >&, bool) - 8693 + 54 diff --git a/html/bayesnet/utils/bayesnetUtils.cc.gcov.html b/html/bayesnet/utils/bayesnetUtils.cc.gcov.html index c35817d..eab60f2 100644 --- a/html/bayesnet/utils/bayesnetUtils.cc.gcov.html +++ b/html/bayesnet/utils/bayesnetUtils.cc.gcov.html @@ -37,7 +37,7 @@ Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: 100.0 % @@ -70,38 +70,38 @@ 8 : #include "bayesnetUtils.h" 9 : namespace bayesnet { 10 : // Return the indices in descending order - 11 327 : std::vector<int> argsort(std::vector<double>& nums) + 11 186 : std::vector<int> argsort(std::vector<double>& nums) 12 : { - 13 327 : int n = nums.size(); - 14 327 : std::vector<int> indices(n); - 15 327 : iota(indices.begin(), indices.end(), 0); - 16 9020 : sort(indices.begin(), indices.end(), [&nums](int i, int j) {return nums[i] > nums[j];}); - 17 327 : return indices; + 13 186 : int n = nums.size(); + 14 186 : std::vector<int> indices(n); + 15 186 : iota(indices.begin(), indices.end(), 0); + 16 3816 : sort(indices.begin(), indices.end(), [&nums](int i, int j) {return nums[i] > nums[j];}); + 17 186 : return indices; 18 0 : } - 19 82 : std::vector<std::vector<double>> tensorToVectorDouble(torch::Tensor& dtensor) + 19 42 : std::vector<std::vector<double>> tensorToVectorDouble(torch::Tensor& dtensor) 20 : { 21 : // convert mxn tensor to mxn std::vector - 22 82 : std::vector<std::vector<double>> result; + 22 42 : std::vector<std::vector<double>> result; 23 : // Iterate over cols - 24 22442 : for (int i = 0; i < dtensor.size(0); ++i) { - 25 67080 : auto col_tensor = dtensor.index({ i, "..." }); - 26 22360 : auto col = std::vector<double>(col_tensor.data_ptr<float>(), col_tensor.data_ptr<float>() + dtensor.size(1)); - 27 22360 : result.push_back(col); - 28 22360 : } - 29 82 : return result; - 30 22360 : } - 31 104 : torch::Tensor vectorToTensor(std::vector<std::vector<int>>& vector, bool transpose) + 24 10818 : for (int i = 0; i < dtensor.size(0); ++i) { + 25 32328 : auto col_tensor = dtensor.index({ i, "..." }); + 26 10776 : auto col = std::vector<double>(col_tensor.data_ptr<float>(), col_tensor.data_ptr<float>() + dtensor.size(1)); + 27 10776 : result.push_back(col); + 28 10776 : } + 29 42 : return result; + 30 10776 : } + 31 54 : torch::Tensor vectorToTensor(std::vector<std::vector<int>>& vector, bool transpose) 32 : { 33 : // convert nxm std::vector to mxn tensor if transpose - 34 104 : long int m = transpose ? vector[0].size() : vector.size(); - 35 104 : long int n = transpose ? vector.size() : vector[0].size(); - 36 104 : auto tensor = torch::zeros({ m, n }, torch::kInt32); - 37 686 : for (int i = 0; i < m; ++i) { - 38 156955 : for (int j = 0; j < n; ++j) { - 39 156373 : tensor[i][j] = transpose ? vector[j][i] : vector[i][j]; + 34 54 : long int m = transpose ? vector[0].size() : vector.size(); + 35 54 : long int n = transpose ? vector.size() : vector[0].size(); + 36 54 : auto tensor = torch::zeros({ m, n }, torch::kInt32); + 37 354 : for (int i = 0; i < m; ++i) { + 38 74886 : for (int j = 0; j < n; ++j) { + 39 74586 : tensor[i][j] = transpose ? vector[j][i] : vector[i][j]; 40 : } 41 : } - 42 104 : return tensor; + 42 54 : return tensor; 43 0 : } 44 : } diff --git a/html/bayesnet/utils/index-sort-f.html b/html/bayesnet/utils/index-sort-f.html index 7087601..31ce615 100644 --- a/html/bayesnet/utils/index-sort-f.html +++ b/html/bayesnet/utils/index-sort-f.html @@ -31,17 +31,17 @@ coverage.info Lines: - 93.0 % - 227 + 95.5 % + 221 211 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 96.8 % - 31 + 100.0 % + 30 30 @@ -79,18 +79,6 @@ Total Hit - - BayesMetrics.cc - -
92.5%92.5%
- - 92.5 % - 120 - 111 - 91.7 % - 12 - 11 - Mst.h @@ -139,6 +127,18 @@ 10 10 + + BayesMetrics.cc + +
97.4%97.4%
+ + 97.4 % + 114 + 111 + 100.0 % + 11 + 11 +
diff --git a/html/bayesnet/utils/index-sort-l.html b/html/bayesnet/utils/index-sort-l.html index fa1f381..d333f50 100644 --- a/html/bayesnet/utils/index-sort-l.html +++ b/html/bayesnet/utils/index-sort-l.html @@ -31,17 +31,17 @@ coverage.info Lines: - 93.0 % - 227 + 95.5 % + 221 211 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 96.8 % - 31 + 100.0 % + 30 30 @@ -103,18 +103,6 @@ 4 4 - - BayesMetrics.cc - -
92.5%92.5%
- - 92.5 % - 120 - 111 - 91.7 % - 12 - 11 - Mst.cc @@ -127,6 +115,18 @@ 10 10 + + BayesMetrics.cc + +
97.4%97.4%
+ + 97.4 % + 114 + 111 + 100.0 % + 11 + 11 + Mst.h diff --git a/html/bayesnet/utils/index.html b/html/bayesnet/utils/index.html index 47c47d8..ec69b1f 100644 --- a/html/bayesnet/utils/index.html +++ b/html/bayesnet/utils/index.html @@ -31,17 +31,17 @@ coverage.info Lines: - 93.0 % - 227 + 95.5 % + 221 211 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 96.8 % - 31 + 100.0 % + 30 30 @@ -82,13 +82,13 @@ BayesMetrics.cc -
92.5%92.5%
+
97.4%97.4%
- 92.5 % - 120 + 97.4 % + 114 111 - 91.7 % - 12 + 100.0 % + 11 11 diff --git a/html/cmd_line b/html/cmd_line index 80b2ab2..42014e9 100644 --- a/html/cmd_line +++ b/html/cmd_line @@ -1 +1 @@ -genhtml build_debug/tests/coverage.info --output-directory html +genhtml build_debug/tests/coverage.info --demangle-cpp --output-directory html diff --git a/html/index-sort-f.html b/html/index-sort-f.html index 08d7602..3aff0e5 100644 --- a/html/index-sort-f.html +++ b/html/index-sort-f.html @@ -31,18 +31,18 @@ coverage.info Lines: - 97.1 % - 1578 - 1533 + 97.8 % + 1570 + 1535 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 97.6 % - 246 - 240 + 100.0 % + 228 + 228 @@ -87,45 +87,33 @@ 100.0 % 1 1 - 50.0 % - 2 + 100.0 % + 1 1 bayesnet/feature_selection -
95.4%95.4%
+
96.7%96.7%
- 95.4 % + 96.7 % 152 - 145 - 95.7 % - 23 - 22 + 147 + 100.0 % + 19 + 19 bayesnet/utils -
93.0%93.0%
+
95.5%95.5%
- 93.0 % - 227 + 95.5 % + 221 211 - 96.8 % - 31 + 100.0 % + 30 30 - - - bayesnet/classifiers - -
98.9%98.9%
- - 98.9 % - 369 - 365 - 97.4 % - 76 - 74 bayesnet/ensembles @@ -135,22 +123,34 @@ 98.4 % 443 436 - 98.1 % - 53 - 52 + 100.0 % + 49 + 49 bayesnet/network -
97.2%97.2%
+
97.7%97.7%
- 97.2 % - 386 + 97.7 % + 384 375 100.0 % 61 61 + + bayesnet/classifiers + +
98.9%98.9%
+ + 98.9 % + 369 + 365 + 100.0 % + 68 + 68 +
diff --git a/html/index-sort-l.html b/html/index-sort-l.html index 99c22f6..4fc8a21 100644 --- a/html/index-sort-l.html +++ b/html/index-sort-l.html @@ -31,18 +31,18 @@ coverage.info Lines: - 97.1 % - 1578 - 1533 + 97.8 % + 1570 + 1535 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 97.6 % - 246 - 240 + 100.0 % + 228 + 228 @@ -82,34 +82,34 @@ bayesnet/utils -
93.0%93.0%
+
95.5%95.5%
- 93.0 % - 227 + 95.5 % + 221 211 - 96.8 % - 31 + 100.0 % + 30 30 bayesnet/feature_selection -
95.4%95.4%
+
96.7%96.7%
- 95.4 % + 96.7 % 152 - 145 - 95.7 % - 23 - 22 + 147 + 100.0 % + 19 + 19 bayesnet/network -
97.2%97.2%
+
97.7%97.7%
- 97.2 % - 386 + 97.7 % + 384 375 100.0 % 61 @@ -123,9 +123,9 @@ 98.4 % 443 436 - 98.1 % - 53 - 52 + 100.0 % + 49 + 49 bayesnet/classifiers @@ -135,9 +135,9 @@ 98.9 % 369 365 - 97.4 % - 76 - 74 + 100.0 % + 68 + 68 bayesnet @@ -147,8 +147,8 @@ 100.0 % 1 1 - 50.0 % - 2 + 100.0 % + 1 1 diff --git a/html/index.html b/html/index.html index 67f38cb..e10f486 100644 --- a/html/index.html +++ b/html/index.html @@ -31,18 +31,18 @@ coverage.info Lines: - 97.1 % - 1578 - 1533 + 97.8 % + 1570 + 1535 Test Date: - 2024-04-29 20:48:03 + 2024-04-30 13:59:18 Functions: - 97.6 % - 246 - 240 + 100.0 % + 228 + 228 @@ -87,8 +87,8 @@ 100.0 % 1 1 - 50.0 % - 2 + 100.0 % + 1 1 @@ -99,9 +99,9 @@ 98.9 % 369 365 - 97.4 % - 76 - 74 + 100.0 % + 68 + 68 bayesnet/ensembles @@ -111,29 +111,29 @@ 98.4 % 443 436 - 98.1 % - 53 - 52 + 100.0 % + 49 + 49 bayesnet/feature_selection -
95.4%95.4%
+
96.7%96.7%
- 95.4 % + 96.7 % 152 - 145 - 95.7 % - 23 - 22 + 147 + 100.0 % + 19 + 19 bayesnet/network -
97.2%97.2%
+
97.7%97.7%
- 97.2 % - 386 + 97.7 % + 384 375 100.0 % 61 @@ -142,13 +142,13 @@ bayesnet/utils -
93.0%93.0%
+
95.5%95.5%
- 93.0 % - 227 + 95.5 % + 221 211 - 96.8 % - 31 + 100.0 % + 30 30 diff --git a/html/libtorch/include/ATen/Functions.h.func-c.html b/html/libtorch/include/ATen/Functions.h.func-c.html new file mode 100644 index 0000000..2106459 --- /dev/null +++ b/html/libtorch/include/ATen/Functions.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/Functions.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen - Functions.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at17is_floating_pointERKNS_6TensorE876
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/Functions.h.func.html b/html/libtorch/include/ATen/Functions.h.func.html new file mode 100644 index 0000000..f2b9ab7 --- /dev/null +++ b/html/libtorch/include/ATen/Functions.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/Functions.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen - Functions.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at17is_floating_pointERKNS_6TensorE876
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/Functions.h.gcov.html b/html/libtorch/include/ATen/Functions.h.gcov.html new file mode 100644 index 0000000..2806e57 --- /dev/null +++ b/html/libtorch/include/ATen/Functions.h.gcov.html @@ -0,0 +1,1477 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/Functions.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen - Functions.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : // @generated by torchgen/gen.py from Functions.h
+       4              : 
+       5              : #ifdef TORCH_ASSERT_NO_OPERATORS
+       6              : #error This change adds a dependency on native_functions.yaml,            \
+       7              :   meaning the file will need to be re-compiled every time an operator     \
+       8              :   is changed or added. Consider if your change would be better placed in  \
+       9              :   another file, or if a more specific header might achieve the same goal. \
+      10              :   See NOTE: [Tensor vs. TensorBase]
+      11              : #endif
+      12              : 
+      13              : #if defined(AT_PER_OPERATOR_HEADERS) && defined(TORCH_ASSERT_ONLY_METHOD_OPERATORS)
+      14              : #error This change adds a dependency on all pytorch operators, meaning the     \
+      15              :   file will need to be re-compiled every time an operator is changed or added. \
+      16              :   Consider including a specific operator from <ATen/ops/{my_operator}.h> and   \
+      17              :   see NOTE [TORCH_ASSERT_ONLY_METHOD_OPERATORS].
+      18              : #endif
+      19              : 
+      20              : // NOTE: [TORCH_ASSERT_ONLY_METHOD_OPERATORS]
+      21              : //
+      22              : // In ATen, certain generated headers files include the definitions of
+      23              : // every single operator in PyTorch. Unfortunately this means every
+      24              : // time an operator signature is updated or changed in
+      25              : // native_functions.yaml, you (and every other PyTorch developer) need
+      26              : // to recompile every source file that includes any of these headers.
+      27              : //
+      28              : // To break up these header dependencies, and improve incremental
+      29              : // build times for all PyTorch developers. These headers are split
+      30              : // into per-operator headers in the `ATen/ops` folder. This limits
+      31              : // incremental builds to only changes to methods of `Tensor`, or files
+      32              : // that use the specific operator being changed. With `at::sum` as an
+      33              : // example, you should include
+      34              : //
+      35              : //   <ATen/ops/sum.h>               // instead of ATen/Functions.h
+      36              : //   <ATen/ops/sum_native.h>        // instead of ATen/NativeFunctions.h
+      37              : //   <ATen/ops/sum_ops.h>           // instead of ATen/Operators.h
+      38              : //   <ATen/ops/sum_cpu_dispatch.h>  // instead of ATen/CPUFunctions.h
+      39              : //
+      40              : // However, even if you're careful to use this in your own code.
+      41              : // `Functions.h` might be included indirectly through another header
+      42              : // without you realising. To avoid this, you can add
+      43              : //
+      44              : //   #define TORCH_ASSERT_ONLY_METHOD_OPERATORS
+      45              : //
+      46              : // to the top of your source file. This way any time the non-specific
+      47              : // headers are included, the compiler will error out.
+      48              : //
+      49              : // Also, be aware that `ops` are not available in all build
+      50              : // configurations (namely fb-internal) so you must guard these
+      51              : // includes with `#ifdef AT_PER_OPERATOR_HEADERS`. e.g.
+      52              : //
+      53              : //   #ifndef AT_PER_OPERATOR_HEADERS
+      54              : //   #include <ATen/Functions.h>
+      55              : //   #else
+      56              : //   #include <ATen/ops/sum.h>
+      57              : //   #endif
+      58              : 
+      59              : #include <ATen/Context.h>
+      60              : #include <ATen/DeviceGuard.h>
+      61              : #include <ATen/TensorUtils.h>
+      62              : #include <ATen/TracerMode.h>
+      63              : #include <ATen/core/Generator.h>
+      64              : #include <ATen/core/Reduction.h>
+      65              : #include <c10/core/SymInt.h>
+      66              : #include <ATen/core/Tensor.h>
+      67              : #include <c10/core/Scalar.h>
+      68              : #include <c10/core/Storage.h>
+      69              : #include <c10/core/TensorOptions.h>
+      70              : #include <c10/util/Deprecated.h>
+      71              : #include <c10/util/Optional.h>
+      72              : #include <c10/util/OptionalArrayRef.h>
+      73              : 
+      74              : #include <ATen/ops/from_blob.h>
+      75              : #include <ATen/ops/tensor.h>
+      76              : 
+      77              : #include <ATen/ops/_adaptive_avg_pool2d.h>
+      78              : #include <ATen/ops/_adaptive_avg_pool2d_backward.h>
+      79              : #include <ATen/ops/_adaptive_avg_pool3d.h>
+      80              : #include <ATen/ops/_adaptive_avg_pool3d_backward.h>
+      81              : #include <ATen/ops/_add_batch_dim.h>
+      82              : #include <ATen/ops/_add_relu.h>
+      83              : #include <ATen/ops/_addmm_activation.h>
+      84              : #include <ATen/ops/_aminmax.h>
+      85              : #include <ATen/ops/_amp_foreach_non_finite_check_and_unscale.h>
+      86              : #include <ATen/ops/_amp_update_scale.h>
+      87              : #include <ATen/ops/_assert_async.h>
+      88              : #include <ATen/ops/_assert_tensor_metadata.h>
+      89              : #include <ATen/ops/_autocast_to_full_precision.h>
+      90              : #include <ATen/ops/_autocast_to_reduced_precision.h>
+      91              : #include <ATen/ops/_backward.h>
+      92              : #include <ATen/ops/_batch_norm_impl_index.h>
+      93              : #include <ATen/ops/_batch_norm_impl_index_backward.h>
+      94              : #include <ATen/ops/_cast_Byte.h>
+      95              : #include <ATen/ops/_cast_Char.h>
+      96              : #include <ATen/ops/_cast_Double.h>
+      97              : #include <ATen/ops/_cast_Float.h>
+      98              : #include <ATen/ops/_cast_Half.h>
+      99              : #include <ATen/ops/_cast_Int.h>
+     100              : #include <ATen/ops/_cast_Long.h>
+     101              : #include <ATen/ops/_cast_Short.h>
+     102              : #include <ATen/ops/_cdist_backward.h>
+     103              : #include <ATen/ops/_cdist_forward.h>
+     104              : #include <ATen/ops/_cholesky_solve_helper.h>
+     105              : #include <ATen/ops/_choose_qparams_per_tensor.h>
+     106              : #include <ATen/ops/_coalesce.h>
+     107              : #include <ATen/ops/_coalesced.h>
+     108              : #include <ATen/ops/_compute_linear_combination.h>
+     109              : #include <ATen/ops/_conj.h>
+     110              : #include <ATen/ops/_conj_copy.h>
+     111              : #include <ATen/ops/_conj_physical.h>
+     112              : #include <ATen/ops/_conv_depthwise2d.h>
+     113              : #include <ATen/ops/_convert_indices_from_coo_to_csr.h>
+     114              : #include <ATen/ops/_convert_indices_from_csr_to_coo.h>
+     115              : #include <ATen/ops/_convolution.h>
+     116              : #include <ATen/ops/_convolution_double_backward.h>
+     117              : #include <ATen/ops/_convolution_mode.h>
+     118              : #include <ATen/ops/_copy_from.h>
+     119              : #include <ATen/ops/_copy_from_and_resize.h>
+     120              : #include <ATen/ops/_cslt_compress.h>
+     121              : #include <ATen/ops/_cslt_sparse_mm.h>
+     122              : #include <ATen/ops/_ctc_loss.h>
+     123              : #include <ATen/ops/_ctc_loss_backward.h>
+     124              : #include <ATen/ops/_cudnn_ctc_loss.h>
+     125              : #include <ATen/ops/_cudnn_init_dropout_state.h>
+     126              : #include <ATen/ops/_cudnn_rnn.h>
+     127              : #include <ATen/ops/_cudnn_rnn_backward.h>
+     128              : #include <ATen/ops/_cudnn_rnn_flatten_weight.h>
+     129              : #include <ATen/ops/_cufft_clear_plan_cache.h>
+     130              : #include <ATen/ops/_cufft_get_plan_cache_max_size.h>
+     131              : #include <ATen/ops/_cufft_get_plan_cache_size.h>
+     132              : #include <ATen/ops/_cufft_set_plan_cache_max_size.h>
+     133              : #include <ATen/ops/_cummax_helper.h>
+     134              : #include <ATen/ops/_cummin_helper.h>
+     135              : #include <ATen/ops/_debug_has_internal_overlap.h>
+     136              : #include <ATen/ops/_dimI.h>
+     137              : #include <ATen/ops/_dimV.h>
+     138              : #include <ATen/ops/_dim_arange.h>
+     139              : #include <ATen/ops/_dirichlet_grad.h>
+     140              : #include <ATen/ops/_efficient_attention_backward.h>
+     141              : #include <ATen/ops/_efficient_attention_forward.h>
+     142              : #include <ATen/ops/_efficientzerotensor.h>
+     143              : #include <ATen/ops/_embedding_bag.h>
+     144              : #include <ATen/ops/_embedding_bag_backward.h>
+     145              : #include <ATen/ops/_embedding_bag_dense_backward.h>
+     146              : #include <ATen/ops/_embedding_bag_forward_only.h>
+     147              : #include <ATen/ops/_embedding_bag_per_sample_weights_backward.h>
+     148              : #include <ATen/ops/_embedding_bag_sparse_backward.h>
+     149              : #include <ATen/ops/_empty_affine_quantized.h>
+     150              : #include <ATen/ops/_empty_per_channel_affine_quantized.h>
+     151              : #include <ATen/ops/_euclidean_dist.h>
+     152              : #include <ATen/ops/_fake_quantize_learnable_per_channel_affine.h>
+     153              : #include <ATen/ops/_fake_quantize_learnable_per_channel_affine_backward.h>
+     154              : #include <ATen/ops/_fake_quantize_learnable_per_tensor_affine.h>
+     155              : #include <ATen/ops/_fake_quantize_learnable_per_tensor_affine_backward.h>
+     156              : #include <ATen/ops/_fake_quantize_per_tensor_affine_cachemask_tensor_qparams.h>
+     157              : #include <ATen/ops/_fft_c2c.h>
+     158              : #include <ATen/ops/_fft_c2r.h>
+     159              : #include <ATen/ops/_fft_r2c.h>
+     160              : #include <ATen/ops/_fill_mem_eff_dropout_mask.h>
+     161              : #include <ATen/ops/_flash_attention_backward.h>
+     162              : #include <ATen/ops/_flash_attention_forward.h>
+     163              : #include <ATen/ops/_foobar.h>
+     164              : #include <ATen/ops/_foreach_abs.h>
+     165              : #include <ATen/ops/_foreach_acos.h>
+     166              : #include <ATen/ops/_foreach_add.h>
+     167              : #include <ATen/ops/_foreach_addcdiv.h>
+     168              : #include <ATen/ops/_foreach_addcmul.h>
+     169              : #include <ATen/ops/_foreach_asin.h>
+     170              : #include <ATen/ops/_foreach_atan.h>
+     171              : #include <ATen/ops/_foreach_ceil.h>
+     172              : #include <ATen/ops/_foreach_clamp_max.h>
+     173              : #include <ATen/ops/_foreach_clamp_min.h>
+     174              : #include <ATen/ops/_foreach_copy.h>
+     175              : #include <ATen/ops/_foreach_cos.h>
+     176              : #include <ATen/ops/_foreach_cosh.h>
+     177              : #include <ATen/ops/_foreach_div.h>
+     178              : #include <ATen/ops/_foreach_erf.h>
+     179              : #include <ATen/ops/_foreach_erfc.h>
+     180              : #include <ATen/ops/_foreach_exp.h>
+     181              : #include <ATen/ops/_foreach_expm1.h>
+     182              : #include <ATen/ops/_foreach_floor.h>
+     183              : #include <ATen/ops/_foreach_frac.h>
+     184              : #include <ATen/ops/_foreach_lerp.h>
+     185              : #include <ATen/ops/_foreach_lgamma.h>
+     186              : #include <ATen/ops/_foreach_log.h>
+     187              : #include <ATen/ops/_foreach_log10.h>
+     188              : #include <ATen/ops/_foreach_log1p.h>
+     189              : #include <ATen/ops/_foreach_log2.h>
+     190              : #include <ATen/ops/_foreach_maximum.h>
+     191              : #include <ATen/ops/_foreach_minimum.h>
+     192              : #include <ATen/ops/_foreach_mul.h>
+     193              : #include <ATen/ops/_foreach_neg.h>
+     194              : #include <ATen/ops/_foreach_norm.h>
+     195              : #include <ATen/ops/_foreach_pow.h>
+     196              : #include <ATen/ops/_foreach_reciprocal.h>
+     197              : #include <ATen/ops/_foreach_round.h>
+     198              : #include <ATen/ops/_foreach_sigmoid.h>
+     199              : #include <ATen/ops/_foreach_sign.h>
+     200              : #include <ATen/ops/_foreach_sin.h>
+     201              : #include <ATen/ops/_foreach_sinh.h>
+     202              : #include <ATen/ops/_foreach_sqrt.h>
+     203              : #include <ATen/ops/_foreach_sub.h>
+     204              : #include <ATen/ops/_foreach_tan.h>
+     205              : #include <ATen/ops/_foreach_tanh.h>
+     206              : #include <ATen/ops/_foreach_trunc.h>
+     207              : #include <ATen/ops/_foreach_zero.h>
+     208              : #include <ATen/ops/_functional_assert_async.h>
+     209              : #include <ATen/ops/_functional_sym_constrain_range.h>
+     210              : #include <ATen/ops/_functional_sym_constrain_range_for_size.h>
+     211              : #include <ATen/ops/_fused_adam.h>
+     212              : #include <ATen/ops/_fused_adamw.h>
+     213              : #include <ATen/ops/_fused_dropout.h>
+     214              : #include <ATen/ops/_fused_moving_avg_obs_fq_helper.h>
+     215              : #include <ATen/ops/_fused_sdp_choice.h>
+     216              : #include <ATen/ops/_fw_primal.h>
+     217              : #include <ATen/ops/_fw_primal_copy.h>
+     218              : #include <ATen/ops/_gather_sparse_backward.h>
+     219              : #include <ATen/ops/_grid_sampler_2d_cpu_fallback.h>
+     220              : #include <ATen/ops/_grid_sampler_2d_cpu_fallback_backward.h>
+     221              : #include <ATen/ops/_has_compatible_shallow_copy_type.h>
+     222              : #include <ATen/ops/_has_same_storage_numel.h>
+     223              : #include <ATen/ops/_histogramdd_bin_edges.h>
+     224              : #include <ATen/ops/_histogramdd_from_bin_cts.h>
+     225              : #include <ATen/ops/_histogramdd_from_bin_tensors.h>
+     226              : #include <ATen/ops/_index_put_impl.h>
+     227              : #include <ATen/ops/_indices.h>
+     228              : #include <ATen/ops/_indices_copy.h>
+     229              : #include <ATen/ops/_int_mm.h>
+     230              : #include <ATen/ops/_is_all_true.h>
+     231              : #include <ATen/ops/_is_any_true.h>
+     232              : #include <ATen/ops/_is_zerotensor.h>
+     233              : #include <ATen/ops/_linalg_check_errors.h>
+     234              : #include <ATen/ops/_linalg_det.h>
+     235              : #include <ATen/ops/_linalg_eigh.h>
+     236              : #include <ATen/ops/_linalg_slogdet.h>
+     237              : #include <ATen/ops/_linalg_solve_ex.h>
+     238              : #include <ATen/ops/_linalg_svd.h>
+     239              : #include <ATen/ops/_local_scalar_dense.h>
+     240              : #include <ATen/ops/_log_softmax.h>
+     241              : #include <ATen/ops/_log_softmax_backward_data.h>
+     242              : #include <ATen/ops/_logcumsumexp.h>
+     243              : #include <ATen/ops/_lstm_mps.h>
+     244              : #include <ATen/ops/_lu_with_info.h>
+     245              : #include <ATen/ops/_make_dep_token.h>
+     246              : #include <ATen/ops/_make_dual.h>
+     247              : #include <ATen/ops/_make_dual_copy.h>
+     248              : #include <ATen/ops/_make_per_channel_quantized_tensor.h>
+     249              : #include <ATen/ops/_make_per_tensor_quantized_tensor.h>
+     250              : #include <ATen/ops/_masked_scale.h>
+     251              : #include <ATen/ops/_masked_softmax.h>
+     252              : #include <ATen/ops/_masked_softmax_backward.h>
+     253              : #include <ATen/ops/_mkldnn_reshape.h>
+     254              : #include <ATen/ops/_mkldnn_transpose.h>
+     255              : #include <ATen/ops/_mps_convolution.h>
+     256              : #include <ATen/ops/_mps_convolution_transpose.h>
+     257              : #include <ATen/ops/_native_batch_norm_legit.h>
+     258              : #include <ATen/ops/_native_batch_norm_legit_no_training.h>
+     259              : #include <ATen/ops/_native_multi_head_attention.h>
+     260              : #include <ATen/ops/_neg_view.h>
+     261              : #include <ATen/ops/_neg_view_copy.h>
+     262              : #include <ATen/ops/_nested_from_padded.h>
+     263              : #include <ATen/ops/_nested_from_padded_and_nested_example.h>
+     264              : #include <ATen/ops/_nested_select_backward.h>
+     265              : #include <ATen/ops/_nested_sum_backward.h>
+     266              : #include <ATen/ops/_nested_tensor_from_mask.h>
+     267              : #include <ATen/ops/_nested_tensor_from_mask_left_aligned.h>
+     268              : #include <ATen/ops/_nested_tensor_from_tensor_list.h>
+     269              : #include <ATen/ops/_nested_tensor_size.h>
+     270              : #include <ATen/ops/_nested_tensor_softmax_with_shape.h>
+     271              : #include <ATen/ops/_nested_tensor_storage_offsets.h>
+     272              : #include <ATen/ops/_nested_tensor_strides.h>
+     273              : #include <ATen/ops/_nested_view_from_buffer.h>
+     274              : #include <ATen/ops/_nested_view_from_buffer_copy.h>
+     275              : #include <ATen/ops/_new_zeros_with_same_feature_meta.h>
+     276              : #include <ATen/ops/_nnpack_available.h>
+     277              : #include <ATen/ops/_nnpack_spatial_convolution.h>
+     278              : #include <ATen/ops/_nnz.h>
+     279              : #include <ATen/ops/_pack_padded_sequence.h>
+     280              : #include <ATen/ops/_pack_padded_sequence_backward.h>
+     281              : #include <ATen/ops/_pad_circular.h>
+     282              : #include <ATen/ops/_pad_enum.h>
+     283              : #include <ATen/ops/_pad_packed_sequence.h>
+     284              : #include <ATen/ops/_pdist_backward.h>
+     285              : #include <ATen/ops/_pdist_forward.h>
+     286              : #include <ATen/ops/_pin_memory.h>
+     287              : #include <ATen/ops/_prelu_kernel.h>
+     288              : #include <ATen/ops/_prelu_kernel_backward.h>
+     289              : #include <ATen/ops/_propagate_xla_data.h>
+     290              : #include <ATen/ops/_remove_batch_dim.h>
+     291              : #include <ATen/ops/_reshape_alias.h>
+     292              : #include <ATen/ops/_reshape_alias_copy.h>
+     293              : #include <ATen/ops/_reshape_copy.h>
+     294              : #include <ATen/ops/_reshape_from_tensor.h>
+     295              : #include <ATen/ops/_resize_output.h>
+     296              : #include <ATen/ops/_rowwise_prune.h>
+     297              : #include <ATen/ops/_sample_dirichlet.h>
+     298              : #include <ATen/ops/_saturate_weight_to_fp16.h>
+     299              : #include <ATen/ops/_scaled_dot_product_attention_math.h>
+     300              : #include <ATen/ops/_scaled_dot_product_efficient_attention.h>
+     301              : #include <ATen/ops/_scaled_dot_product_efficient_attention_backward.h>
+     302              : #include <ATen/ops/_scaled_dot_product_flash_attention.h>
+     303              : #include <ATen/ops/_scaled_dot_product_flash_attention_backward.h>
+     304              : #include <ATen/ops/_scaled_mm.h>
+     305              : #include <ATen/ops/_segment_reduce_backward.h>
+     306              : #include <ATen/ops/_shape_as_tensor.h>
+     307              : #include <ATen/ops/_slow_conv2d_backward.h>
+     308              : #include <ATen/ops/_slow_conv2d_forward.h>
+     309              : #include <ATen/ops/_sobol_engine_draw.h>
+     310              : #include <ATen/ops/_sobol_engine_ff.h>
+     311              : #include <ATen/ops/_sobol_engine_initialize_state.h>
+     312              : #include <ATen/ops/_sobol_engine_scramble.h>
+     313              : #include <ATen/ops/_softmax.h>
+     314              : #include <ATen/ops/_softmax_backward_data.h>
+     315              : #include <ATen/ops/_sparse_addmm.h>
+     316              : #include <ATen/ops/_sparse_broadcast_to.h>
+     317              : #include <ATen/ops/_sparse_broadcast_to_copy.h>
+     318              : #include <ATen/ops/_sparse_bsc_tensor_unsafe.h>
+     319              : #include <ATen/ops/_sparse_bsr_tensor_unsafe.h>
+     320              : #include <ATen/ops/_sparse_compressed_tensor_unsafe.h>
+     321              : #include <ATen/ops/_sparse_coo_tensor_unsafe.h>
+     322              : #include <ATen/ops/_sparse_coo_tensor_with_dims.h>
+     323              : #include <ATen/ops/_sparse_coo_tensor_with_dims_and_tensors.h>
+     324              : #include <ATen/ops/_sparse_csc_tensor_unsafe.h>
+     325              : #include <ATen/ops/_sparse_csr_prod.h>
+     326              : #include <ATen/ops/_sparse_csr_sum.h>
+     327              : #include <ATen/ops/_sparse_csr_tensor_unsafe.h>
+     328              : #include <ATen/ops/_sparse_log_softmax.h>
+     329              : #include <ATen/ops/_sparse_log_softmax_backward_data.h>
+     330              : #include <ATen/ops/_sparse_mask_projection.h>
+     331              : #include <ATen/ops/_sparse_mm.h>
+     332              : #include <ATen/ops/_sparse_mm_reduce_impl.h>
+     333              : #include <ATen/ops/_sparse_mm_reduce_impl_backward.h>
+     334              : #include <ATen/ops/_sparse_semi_structured_linear.h>
+     335              : #include <ATen/ops/_sparse_softmax.h>
+     336              : #include <ATen/ops/_sparse_softmax_backward_data.h>
+     337              : #include <ATen/ops/_sparse_sparse_matmul.h>
+     338              : #include <ATen/ops/_sparse_sum.h>
+     339              : #include <ATen/ops/_sparse_sum_backward.h>
+     340              : #include <ATen/ops/_spdiags.h>
+     341              : #include <ATen/ops/_stack.h>
+     342              : #include <ATen/ops/_standard_gamma.h>
+     343              : #include <ATen/ops/_standard_gamma_grad.h>
+     344              : #include <ATen/ops/_test_ambiguous_defaults.h>
+     345              : #include <ATen/ops/_test_autograd_multiple_dispatch.h>
+     346              : #include <ATen/ops/_test_autograd_multiple_dispatch_view.h>
+     347              : #include <ATen/ops/_test_autograd_multiple_dispatch_view_copy.h>
+     348              : #include <ATen/ops/_test_check_tensor.h>
+     349              : #include <ATen/ops/_test_functorch_fallback.h>
+     350              : #include <ATen/ops/_test_optional_filled_intlist.h>
+     351              : #include <ATen/ops/_test_optional_floatlist.h>
+     352              : #include <ATen/ops/_test_optional_intlist.h>
+     353              : #include <ATen/ops/_test_serialization_subcmul.h>
+     354              : #include <ATen/ops/_test_string_default.h>
+     355              : #include <ATen/ops/_test_warn_in_autograd.h>
+     356              : #include <ATen/ops/_thnn_differentiable_gru_cell_backward.h>
+     357              : #include <ATen/ops/_thnn_differentiable_lstm_cell_backward.h>
+     358              : #include <ATen/ops/_thnn_fused_gru_cell.h>
+     359              : #include <ATen/ops/_thnn_fused_gru_cell_backward.h>
+     360              : #include <ATen/ops/_thnn_fused_lstm_cell.h>
+     361              : #include <ATen/ops/_thnn_fused_lstm_cell_backward.h>
+     362              : #include <ATen/ops/_thnn_fused_lstm_cell_backward_impl.h>
+     363              : #include <ATen/ops/_to_copy.h>
+     364              : #include <ATen/ops/_to_cpu.h>
+     365              : #include <ATen/ops/_to_dense.h>
+     366              : #include <ATen/ops/_to_sparse.h>
+     367              : #include <ATen/ops/_to_sparse_bsc.h>
+     368              : #include <ATen/ops/_to_sparse_bsr.h>
+     369              : #include <ATen/ops/_to_sparse_csc.h>
+     370              : #include <ATen/ops/_to_sparse_csr.h>
+     371              : #include <ATen/ops/_to_sparse_semi_structured.h>
+     372              : #include <ATen/ops/_transform_bias_rescale_qkv.h>
+     373              : #include <ATen/ops/_transformer_encoder_layer_fwd.h>
+     374              : #include <ATen/ops/_trilinear.h>
+     375              : #include <ATen/ops/_triton_multi_head_attention.h>
+     376              : #include <ATen/ops/_triton_scaled_dot_attention.h>
+     377              : #include <ATen/ops/_unique.h>
+     378              : #include <ATen/ops/_unique2.h>
+     379              : #include <ATen/ops/_unpack_dual.h>
+     380              : #include <ATen/ops/_unsafe_index.h>
+     381              : #include <ATen/ops/_unsafe_index_put.h>
+     382              : #include <ATen/ops/_unsafe_view.h>
+     383              : #include <ATen/ops/_upsample_bicubic2d_aa.h>
+     384              : #include <ATen/ops/_upsample_bicubic2d_aa_backward.h>
+     385              : #include <ATen/ops/_upsample_bilinear2d_aa.h>
+     386              : #include <ATen/ops/_upsample_bilinear2d_aa_backward.h>
+     387              : #include <ATen/ops/_upsample_nearest_exact1d.h>
+     388              : #include <ATen/ops/_upsample_nearest_exact1d_backward.h>
+     389              : #include <ATen/ops/_upsample_nearest_exact2d.h>
+     390              : #include <ATen/ops/_upsample_nearest_exact2d_backward.h>
+     391              : #include <ATen/ops/_upsample_nearest_exact3d.h>
+     392              : #include <ATen/ops/_upsample_nearest_exact3d_backward.h>
+     393              : #include <ATen/ops/_use_cudnn_ctc_loss.h>
+     394              : #include <ATen/ops/_use_cudnn_rnn_flatten_weight.h>
+     395              : #include <ATen/ops/_validate_compressed_sparse_indices.h>
+     396              : #include <ATen/ops/_validate_sparse_bsc_tensor_args.h>
+     397              : #include <ATen/ops/_validate_sparse_bsr_tensor_args.h>
+     398              : #include <ATen/ops/_validate_sparse_compressed_tensor_args.h>
+     399              : #include <ATen/ops/_validate_sparse_coo_tensor_args.h>
+     400              : #include <ATen/ops/_validate_sparse_csc_tensor_args.h>
+     401              : #include <ATen/ops/_validate_sparse_csr_tensor_args.h>
+     402              : #include <ATen/ops/_values.h>
+     403              : #include <ATen/ops/_values_copy.h>
+     404              : #include <ATen/ops/_version.h>
+     405              : #include <ATen/ops/_weight_norm.h>
+     406              : #include <ATen/ops/_weight_norm_differentiable_backward.h>
+     407              : #include <ATen/ops/_weight_norm_interface.h>
+     408              : #include <ATen/ops/_weight_norm_interface_backward.h>
+     409              : #include <ATen/ops/abs.h>
+     410              : #include <ATen/ops/absolute.h>
+     411              : #include <ATen/ops/acos.h>
+     412              : #include <ATen/ops/acosh.h>
+     413              : #include <ATen/ops/adaptive_avg_pool1d.h>
+     414              : #include <ATen/ops/adaptive_avg_pool2d.h>
+     415              : #include <ATen/ops/adaptive_avg_pool3d.h>
+     416              : #include <ATen/ops/adaptive_avg_pool3d_backward.h>
+     417              : #include <ATen/ops/adaptive_max_pool1d.h>
+     418              : #include <ATen/ops/adaptive_max_pool2d.h>
+     419              : #include <ATen/ops/adaptive_max_pool2d_backward.h>
+     420              : #include <ATen/ops/adaptive_max_pool3d.h>
+     421              : #include <ATen/ops/adaptive_max_pool3d_backward.h>
+     422              : #include <ATen/ops/add.h>
+     423              : #include <ATen/ops/addbmm.h>
+     424              : #include <ATen/ops/addcdiv.h>
+     425              : #include <ATen/ops/addcmul.h>
+     426              : #include <ATen/ops/addmm.h>
+     427              : #include <ATen/ops/addmv.h>
+     428              : #include <ATen/ops/addr.h>
+     429              : #include <ATen/ops/adjoint.h>
+     430              : #include <ATen/ops/affine_grid_generator.h>
+     431              : #include <ATen/ops/affine_grid_generator_backward.h>
+     432              : #include <ATen/ops/alias.h>
+     433              : #include <ATen/ops/alias_copy.h>
+     434              : #include <ATen/ops/align_as.h>
+     435              : #include <ATen/ops/align_tensors.h>
+     436              : #include <ATen/ops/align_to.h>
+     437              : #include <ATen/ops/all.h>
+     438              : #include <ATen/ops/allclose.h>
+     439              : #include <ATen/ops/alpha_dropout.h>
+     440              : #include <ATen/ops/amax.h>
+     441              : #include <ATen/ops/amin.h>
+     442              : #include <ATen/ops/aminmax.h>
+     443              : #include <ATen/ops/and.h>
+     444              : #include <ATen/ops/angle.h>
+     445              : #include <ATen/ops/any.h>
+     446              : #include <ATen/ops/arange.h>
+     447              : #include <ATen/ops/arccos.h>
+     448              : #include <ATen/ops/arccosh.h>
+     449              : #include <ATen/ops/arcsin.h>
+     450              : #include <ATen/ops/arcsinh.h>
+     451              : #include <ATen/ops/arctan.h>
+     452              : #include <ATen/ops/arctan2.h>
+     453              : #include <ATen/ops/arctanh.h>
+     454              : #include <ATen/ops/argmax.h>
+     455              : #include <ATen/ops/argmin.h>
+     456              : #include <ATen/ops/argsort.h>
+     457              : #include <ATen/ops/argwhere.h>
+     458              : #include <ATen/ops/as_strided.h>
+     459              : #include <ATen/ops/as_strided_copy.h>
+     460              : #include <ATen/ops/as_strided_scatter.h>
+     461              : #include <ATen/ops/asin.h>
+     462              : #include <ATen/ops/asinh.h>
+     463              : #include <ATen/ops/atan.h>
+     464              : #include <ATen/ops/atan2.h>
+     465              : #include <ATen/ops/atanh.h>
+     466              : #include <ATen/ops/atleast_1d.h>
+     467              : #include <ATen/ops/atleast_2d.h>
+     468              : #include <ATen/ops/atleast_3d.h>
+     469              : #include <ATen/ops/avg_pool1d.h>
+     470              : #include <ATen/ops/avg_pool2d.h>
+     471              : #include <ATen/ops/avg_pool2d_backward.h>
+     472              : #include <ATen/ops/avg_pool3d.h>
+     473              : #include <ATen/ops/avg_pool3d_backward.h>
+     474              : #include <ATen/ops/baddbmm.h>
+     475              : #include <ATen/ops/bartlett_window.h>
+     476              : #include <ATen/ops/batch_norm.h>
+     477              : #include <ATen/ops/batch_norm_backward_elemt.h>
+     478              : #include <ATen/ops/batch_norm_backward_reduce.h>
+     479              : #include <ATen/ops/batch_norm_elemt.h>
+     480              : #include <ATen/ops/batch_norm_gather_stats.h>
+     481              : #include <ATen/ops/batch_norm_gather_stats_with_counts.h>
+     482              : #include <ATen/ops/batch_norm_stats.h>
+     483              : #include <ATen/ops/batch_norm_update_stats.h>
+     484              : #include <ATen/ops/bernoulli.h>
+     485              : #include <ATen/ops/bilinear.h>
+     486              : #include <ATen/ops/binary_cross_entropy.h>
+     487              : #include <ATen/ops/binary_cross_entropy_backward.h>
+     488              : #include <ATen/ops/binary_cross_entropy_with_logits.h>
+     489              : #include <ATen/ops/bincount.h>
+     490              : #include <ATen/ops/binomial.h>
+     491              : #include <ATen/ops/bitwise_and.h>
+     492              : #include <ATen/ops/bitwise_left_shift.h>
+     493              : #include <ATen/ops/bitwise_not.h>
+     494              : #include <ATen/ops/bitwise_or.h>
+     495              : #include <ATen/ops/bitwise_right_shift.h>
+     496              : #include <ATen/ops/bitwise_xor.h>
+     497              : #include <ATen/ops/blackman_window.h>
+     498              : #include <ATen/ops/block_diag.h>
+     499              : #include <ATen/ops/bmm.h>
+     500              : #include <ATen/ops/broadcast_tensors.h>
+     501              : #include <ATen/ops/broadcast_to.h>
+     502              : #include <ATen/ops/bucketize.h>
+     503              : #include <ATen/ops/can_cast.h>
+     504              : #include <ATen/ops/cartesian_prod.h>
+     505              : #include <ATen/ops/cat.h>
+     506              : #include <ATen/ops/cauchy.h>
+     507              : #include <ATen/ops/ccol_indices.h>
+     508              : #include <ATen/ops/ccol_indices_copy.h>
+     509              : #include <ATen/ops/cdist.h>
+     510              : #include <ATen/ops/ceil.h>
+     511              : #include <ATen/ops/celu.h>
+     512              : #include <ATen/ops/chain_matmul.h>
+     513              : #include <ATen/ops/chalf.h>
+     514              : #include <ATen/ops/channel_shuffle.h>
+     515              : #include <ATen/ops/cholesky.h>
+     516              : #include <ATen/ops/cholesky_inverse.h>
+     517              : #include <ATen/ops/cholesky_solve.h>
+     518              : #include <ATen/ops/choose_qparams_optimized.h>
+     519              : #include <ATen/ops/chunk.h>
+     520              : #include <ATen/ops/clamp.h>
+     521              : #include <ATen/ops/clamp_max.h>
+     522              : #include <ATen/ops/clamp_min.h>
+     523              : #include <ATen/ops/clip.h>
+     524              : #include <ATen/ops/clone.h>
+     525              : #include <ATen/ops/coalesce.h>
+     526              : #include <ATen/ops/col2im.h>
+     527              : #include <ATen/ops/col_indices.h>
+     528              : #include <ATen/ops/col_indices_copy.h>
+     529              : #include <ATen/ops/column_stack.h>
+     530              : #include <ATen/ops/combinations.h>
+     531              : #include <ATen/ops/complex.h>
+     532              : #include <ATen/ops/concat.h>
+     533              : #include <ATen/ops/concatenate.h>
+     534              : #include <ATen/ops/conj.h>
+     535              : #include <ATen/ops/conj_physical.h>
+     536              : #include <ATen/ops/constant_pad_nd.h>
+     537              : #include <ATen/ops/contiguous.h>
+     538              : #include <ATen/ops/conv1d.h>
+     539              : #include <ATen/ops/conv2d.h>
+     540              : #include <ATen/ops/conv3d.h>
+     541              : #include <ATen/ops/conv_depthwise3d.h>
+     542              : #include <ATen/ops/conv_tbc.h>
+     543              : #include <ATen/ops/conv_tbc_backward.h>
+     544              : #include <ATen/ops/conv_transpose1d.h>
+     545              : #include <ATen/ops/conv_transpose2d.h>
+     546              : #include <ATen/ops/conv_transpose3d.h>
+     547              : #include <ATen/ops/convolution.h>
+     548              : #include <ATen/ops/convolution_backward.h>
+     549              : #include <ATen/ops/convolution_backward_overrideable.h>
+     550              : #include <ATen/ops/convolution_overrideable.h>
+     551              : #include <ATen/ops/copy.h>
+     552              : #include <ATen/ops/copy_sparse_to_sparse.h>
+     553              : #include <ATen/ops/copysign.h>
+     554              : #include <ATen/ops/corrcoef.h>
+     555              : #include <ATen/ops/cos.h>
+     556              : #include <ATen/ops/cosh.h>
+     557              : #include <ATen/ops/cosine_embedding_loss.h>
+     558              : #include <ATen/ops/cosine_similarity.h>
+     559              : #include <ATen/ops/count_nonzero.h>
+     560              : #include <ATen/ops/cov.h>
+     561              : #include <ATen/ops/cross.h>
+     562              : #include <ATen/ops/cross_entropy_loss.h>
+     563              : #include <ATen/ops/crow_indices.h>
+     564              : #include <ATen/ops/crow_indices_copy.h>
+     565              : #include <ATen/ops/ctc_loss.h>
+     566              : #include <ATen/ops/cudnn_affine_grid_generator.h>
+     567              : #include <ATen/ops/cudnn_affine_grid_generator_backward.h>
+     568              : #include <ATen/ops/cudnn_batch_norm.h>
+     569              : #include <ATen/ops/cudnn_batch_norm_backward.h>
+     570              : #include <ATen/ops/cudnn_convolution.h>
+     571              : #include <ATen/ops/cudnn_convolution_add_relu.h>
+     572              : #include <ATen/ops/cudnn_convolution_relu.h>
+     573              : #include <ATen/ops/cudnn_convolution_transpose.h>
+     574              : #include <ATen/ops/cudnn_grid_sampler.h>
+     575              : #include <ATen/ops/cudnn_grid_sampler_backward.h>
+     576              : #include <ATen/ops/cudnn_is_acceptable.h>
+     577              : #include <ATen/ops/cummax.h>
+     578              : #include <ATen/ops/cummaxmin_backward.h>
+     579              : #include <ATen/ops/cummin.h>
+     580              : #include <ATen/ops/cumprod.h>
+     581              : #include <ATen/ops/cumprod_backward.h>
+     582              : #include <ATen/ops/cumsum.h>
+     583              : #include <ATen/ops/cumulative_trapezoid.h>
+     584              : #include <ATen/ops/data.h>
+     585              : #include <ATen/ops/deg2rad.h>
+     586              : #include <ATen/ops/dense_dim.h>
+     587              : #include <ATen/ops/dequantize.h>
+     588              : #include <ATen/ops/det.h>
+     589              : #include <ATen/ops/detach.h>
+     590              : #include <ATen/ops/detach_copy.h>
+     591              : #include <ATen/ops/diag.h>
+     592              : #include <ATen/ops/diag_embed.h>
+     593              : #include <ATen/ops/diagflat.h>
+     594              : #include <ATen/ops/diagonal.h>
+     595              : #include <ATen/ops/diagonal_backward.h>
+     596              : #include <ATen/ops/diagonal_copy.h>
+     597              : #include <ATen/ops/diagonal_scatter.h>
+     598              : #include <ATen/ops/diff.h>
+     599              : #include <ATen/ops/digamma.h>
+     600              : #include <ATen/ops/dist.h>
+     601              : #include <ATen/ops/div.h>
+     602              : #include <ATen/ops/divide.h>
+     603              : #include <ATen/ops/dot.h>
+     604              : #include <ATen/ops/dropout.h>
+     605              : #include <ATen/ops/dsplit.h>
+     606              : #include <ATen/ops/dstack.h>
+     607              : #include <ATen/ops/einsum.h>
+     608              : #include <ATen/ops/elu.h>
+     609              : #include <ATen/ops/elu_backward.h>
+     610              : #include <ATen/ops/embedding.h>
+     611              : #include <ATen/ops/embedding_backward.h>
+     612              : #include <ATen/ops/embedding_bag.h>
+     613              : #include <ATen/ops/embedding_dense_backward.h>
+     614              : #include <ATen/ops/embedding_renorm.h>
+     615              : #include <ATen/ops/embedding_sparse_backward.h>
+     616              : #include <ATen/ops/empty.h>
+     617              : #include <ATen/ops/empty_like.h>
+     618              : #include <ATen/ops/empty_permuted.h>
+     619              : #include <ATen/ops/empty_quantized.h>
+     620              : #include <ATen/ops/empty_strided.h>
+     621              : #include <ATen/ops/eq.h>
+     622              : #include <ATen/ops/equal.h>
+     623              : #include <ATen/ops/erf.h>
+     624              : #include <ATen/ops/erfc.h>
+     625              : #include <ATen/ops/erfinv.h>
+     626              : #include <ATen/ops/exp.h>
+     627              : #include <ATen/ops/exp2.h>
+     628              : #include <ATen/ops/expand.h>
+     629              : #include <ATen/ops/expand_as.h>
+     630              : #include <ATen/ops/expand_copy.h>
+     631              : #include <ATen/ops/expm1.h>
+     632              : #include <ATen/ops/exponential.h>
+     633              : #include <ATen/ops/eye.h>
+     634              : #include <ATen/ops/fake_quantize_per_channel_affine.h>
+     635              : #include <ATen/ops/fake_quantize_per_channel_affine_cachemask.h>
+     636              : #include <ATen/ops/fake_quantize_per_channel_affine_cachemask_backward.h>
+     637              : #include <ATen/ops/fake_quantize_per_tensor_affine.h>
+     638              : #include <ATen/ops/fake_quantize_per_tensor_affine_cachemask.h>
+     639              : #include <ATen/ops/fake_quantize_per_tensor_affine_cachemask_backward.h>
+     640              : #include <ATen/ops/fbgemm_linear_fp16_weight.h>
+     641              : #include <ATen/ops/fbgemm_linear_fp16_weight_fp32_activation.h>
+     642              : #include <ATen/ops/fbgemm_linear_int8_weight.h>
+     643              : #include <ATen/ops/fbgemm_linear_int8_weight_fp32_activation.h>
+     644              : #include <ATen/ops/fbgemm_linear_quantize_weight.h>
+     645              : #include <ATen/ops/fbgemm_pack_gemm_matrix_fp16.h>
+     646              : #include <ATen/ops/fbgemm_pack_quantized_matrix.h>
+     647              : #include <ATen/ops/feature_alpha_dropout.h>
+     648              : #include <ATen/ops/feature_dropout.h>
+     649              : #include <ATen/ops/fft_fft.h>
+     650              : #include <ATen/ops/fft_fft2.h>
+     651              : #include <ATen/ops/fft_fftfreq.h>
+     652              : #include <ATen/ops/fft_fftn.h>
+     653              : #include <ATen/ops/fft_fftshift.h>
+     654              : #include <ATen/ops/fft_hfft.h>
+     655              : #include <ATen/ops/fft_hfft2.h>
+     656              : #include <ATen/ops/fft_hfftn.h>
+     657              : #include <ATen/ops/fft_ifft.h>
+     658              : #include <ATen/ops/fft_ifft2.h>
+     659              : #include <ATen/ops/fft_ifftn.h>
+     660              : #include <ATen/ops/fft_ifftshift.h>
+     661              : #include <ATen/ops/fft_ihfft.h>
+     662              : #include <ATen/ops/fft_ihfft2.h>
+     663              : #include <ATen/ops/fft_ihfftn.h>
+     664              : #include <ATen/ops/fft_irfft.h>
+     665              : #include <ATen/ops/fft_irfft2.h>
+     666              : #include <ATen/ops/fft_irfftn.h>
+     667              : #include <ATen/ops/fft_rfft.h>
+     668              : #include <ATen/ops/fft_rfft2.h>
+     669              : #include <ATen/ops/fft_rfftfreq.h>
+     670              : #include <ATen/ops/fft_rfftn.h>
+     671              : #include <ATen/ops/fill.h>
+     672              : #include <ATen/ops/fill_diagonal.h>
+     673              : #include <ATen/ops/fix.h>
+     674              : #include <ATen/ops/flatten.h>
+     675              : #include <ATen/ops/flatten_dense_tensors.h>
+     676              : #include <ATen/ops/flip.h>
+     677              : #include <ATen/ops/fliplr.h>
+     678              : #include <ATen/ops/flipud.h>
+     679              : #include <ATen/ops/float_power.h>
+     680              : #include <ATen/ops/floor.h>
+     681              : #include <ATen/ops/floor_divide.h>
+     682              : #include <ATen/ops/fmax.h>
+     683              : #include <ATen/ops/fmin.h>
+     684              : #include <ATen/ops/fmod.h>
+     685              : #include <ATen/ops/frac.h>
+     686              : #include <ATen/ops/fractional_max_pool2d.h>
+     687              : #include <ATen/ops/fractional_max_pool2d_backward.h>
+     688              : #include <ATen/ops/fractional_max_pool3d.h>
+     689              : #include <ATen/ops/fractional_max_pool3d_backward.h>
+     690              : #include <ATen/ops/frexp.h>
+     691              : #include <ATen/ops/frobenius_norm.h>
+     692              : #include <ATen/ops/from_file.h>
+     693              : #include <ATen/ops/full.h>
+     694              : #include <ATen/ops/full_like.h>
+     695              : #include <ATen/ops/fused_moving_avg_obs_fake_quant.h>
+     696              : #include <ATen/ops/gather.h>
+     697              : #include <ATen/ops/gather_backward.h>
+     698              : #include <ATen/ops/gcd.h>
+     699              : #include <ATen/ops/ge.h>
+     700              : #include <ATen/ops/gelu.h>
+     701              : #include <ATen/ops/gelu_backward.h>
+     702              : #include <ATen/ops/geometric.h>
+     703              : #include <ATen/ops/geqrf.h>
+     704              : #include <ATen/ops/ger.h>
+     705              : #include <ATen/ops/glu.h>
+     706              : #include <ATen/ops/glu_backward.h>
+     707              : #include <ATen/ops/glu_backward_jvp.h>
+     708              : #include <ATen/ops/glu_jvp.h>
+     709              : #include <ATen/ops/gradient.h>
+     710              : #include <ATen/ops/greater.h>
+     711              : #include <ATen/ops/greater_equal.h>
+     712              : #include <ATen/ops/grid_sampler.h>
+     713              : #include <ATen/ops/grid_sampler_2d.h>
+     714              : #include <ATen/ops/grid_sampler_2d_backward.h>
+     715              : #include <ATen/ops/grid_sampler_3d.h>
+     716              : #include <ATen/ops/grid_sampler_3d_backward.h>
+     717              : #include <ATen/ops/group_norm.h>
+     718              : #include <ATen/ops/gru.h>
+     719              : #include <ATen/ops/gru_cell.h>
+     720              : #include <ATen/ops/gt.h>
+     721              : #include <ATen/ops/hamming_window.h>
+     722              : #include <ATen/ops/hann_window.h>
+     723              : #include <ATen/ops/hardshrink.h>
+     724              : #include <ATen/ops/hardshrink_backward.h>
+     725              : #include <ATen/ops/hardsigmoid.h>
+     726              : #include <ATen/ops/hardsigmoid_backward.h>
+     727              : #include <ATen/ops/hardswish.h>
+     728              : #include <ATen/ops/hardswish_backward.h>
+     729              : #include <ATen/ops/hardtanh.h>
+     730              : #include <ATen/ops/hardtanh_backward.h>
+     731              : #include <ATen/ops/heaviside.h>
+     732              : #include <ATen/ops/hinge_embedding_loss.h>
+     733              : #include <ATen/ops/histc.h>
+     734              : #include <ATen/ops/histogram.h>
+     735              : #include <ATen/ops/histogramdd.h>
+     736              : #include <ATen/ops/hsplit.h>
+     737              : #include <ATen/ops/hspmm.h>
+     738              : #include <ATen/ops/hstack.h>
+     739              : #include <ATen/ops/huber_loss.h>
+     740              : #include <ATen/ops/huber_loss_backward.h>
+     741              : #include <ATen/ops/hypot.h>
+     742              : #include <ATen/ops/i0.h>
+     743              : #include <ATen/ops/igamma.h>
+     744              : #include <ATen/ops/igammac.h>
+     745              : #include <ATen/ops/im2col.h>
+     746              : #include <ATen/ops/imag.h>
+     747              : #include <ATen/ops/index.h>
+     748              : #include <ATen/ops/index_add.h>
+     749              : #include <ATen/ops/index_copy.h>
+     750              : #include <ATen/ops/index_fill.h>
+     751              : #include <ATen/ops/index_put.h>
+     752              : #include <ATen/ops/index_reduce.h>
+     753              : #include <ATen/ops/index_select.h>
+     754              : #include <ATen/ops/index_select_backward.h>
+     755              : #include <ATen/ops/indices.h>
+     756              : #include <ATen/ops/indices_copy.h>
+     757              : #include <ATen/ops/infinitely_differentiable_gelu_backward.h>
+     758              : #include <ATen/ops/inner.h>
+     759              : #include <ATen/ops/instance_norm.h>
+     760              : #include <ATen/ops/int_repr.h>
+     761              : #include <ATen/ops/inverse.h>
+     762              : #include <ATen/ops/is_coalesced.h>
+     763              : #include <ATen/ops/is_complex.h>
+     764              : #include <ATen/ops/is_conj.h>
+     765              : #include <ATen/ops/is_distributed.h>
+     766              : #include <ATen/ops/is_floating_point.h>
+     767              : #include <ATen/ops/is_inference.h>
+     768              : #include <ATen/ops/is_leaf.h>
+     769              : #include <ATen/ops/is_neg.h>
+     770              : #include <ATen/ops/is_nonzero.h>
+     771              : #include <ATen/ops/is_pinned.h>
+     772              : #include <ATen/ops/is_same_size.h>
+     773              : #include <ATen/ops/is_set_to.h>
+     774              : #include <ATen/ops/is_signed.h>
+     775              : #include <ATen/ops/is_vulkan_available.h>
+     776              : #include <ATen/ops/isclose.h>
+     777              : #include <ATen/ops/isfinite.h>
+     778              : #include <ATen/ops/isin.h>
+     779              : #include <ATen/ops/isinf.h>
+     780              : #include <ATen/ops/isnan.h>
+     781              : #include <ATen/ops/isneginf.h>
+     782              : #include <ATen/ops/isposinf.h>
+     783              : #include <ATen/ops/isreal.h>
+     784              : #include <ATen/ops/istft.h>
+     785              : #include <ATen/ops/item.h>
+     786              : #include <ATen/ops/kaiser_window.h>
+     787              : #include <ATen/ops/kl_div.h>
+     788              : #include <ATen/ops/kron.h>
+     789              : #include <ATen/ops/kthvalue.h>
+     790              : #include <ATen/ops/l1_loss.h>
+     791              : #include <ATen/ops/layer_norm.h>
+     792              : #include <ATen/ops/lcm.h>
+     793              : #include <ATen/ops/ldexp.h>
+     794              : #include <ATen/ops/le.h>
+     795              : #include <ATen/ops/leaky_relu.h>
+     796              : #include <ATen/ops/leaky_relu_backward.h>
+     797              : #include <ATen/ops/lerp.h>
+     798              : #include <ATen/ops/less.h>
+     799              : #include <ATen/ops/less_equal.h>
+     800              : #include <ATen/ops/lgamma.h>
+     801              : #include <ATen/ops/lift.h>
+     802              : #include <ATen/ops/lift_fresh.h>
+     803              : #include <ATen/ops/lift_fresh_copy.h>
+     804              : #include <ATen/ops/linalg_cholesky.h>
+     805              : #include <ATen/ops/linalg_cholesky_ex.h>
+     806              : #include <ATen/ops/linalg_cond.h>
+     807              : #include <ATen/ops/linalg_cross.h>
+     808              : #include <ATen/ops/linalg_det.h>
+     809              : #include <ATen/ops/linalg_diagonal.h>
+     810              : #include <ATen/ops/linalg_eig.h>
+     811              : #include <ATen/ops/linalg_eigh.h>
+     812              : #include <ATen/ops/linalg_eigvals.h>
+     813              : #include <ATen/ops/linalg_eigvalsh.h>
+     814              : #include <ATen/ops/linalg_householder_product.h>
+     815              : #include <ATen/ops/linalg_inv.h>
+     816              : #include <ATen/ops/linalg_inv_ex.h>
+     817              : #include <ATen/ops/linalg_ldl_factor.h>
+     818              : #include <ATen/ops/linalg_ldl_factor_ex.h>
+     819              : #include <ATen/ops/linalg_ldl_solve.h>
+     820              : #include <ATen/ops/linalg_lstsq.h>
+     821              : #include <ATen/ops/linalg_lu.h>
+     822              : #include <ATen/ops/linalg_lu_factor.h>
+     823              : #include <ATen/ops/linalg_lu_factor_ex.h>
+     824              : #include <ATen/ops/linalg_lu_solve.h>
+     825              : #include <ATen/ops/linalg_matmul.h>
+     826              : #include <ATen/ops/linalg_matrix_exp.h>
+     827              : #include <ATen/ops/linalg_matrix_norm.h>
+     828              : #include <ATen/ops/linalg_matrix_power.h>
+     829              : #include <ATen/ops/linalg_matrix_rank.h>
+     830              : #include <ATen/ops/linalg_multi_dot.h>
+     831              : #include <ATen/ops/linalg_norm.h>
+     832              : #include <ATen/ops/linalg_pinv.h>
+     833              : #include <ATen/ops/linalg_qr.h>
+     834              : #include <ATen/ops/linalg_slogdet.h>
+     835              : #include <ATen/ops/linalg_solve.h>
+     836              : #include <ATen/ops/linalg_solve_ex.h>
+     837              : #include <ATen/ops/linalg_solve_triangular.h>
+     838              : #include <ATen/ops/linalg_svd.h>
+     839              : #include <ATen/ops/linalg_svdvals.h>
+     840              : #include <ATen/ops/linalg_tensorinv.h>
+     841              : #include <ATen/ops/linalg_tensorsolve.h>
+     842              : #include <ATen/ops/linalg_vander.h>
+     843              : #include <ATen/ops/linalg_vecdot.h>
+     844              : #include <ATen/ops/linalg_vector_norm.h>
+     845              : #include <ATen/ops/linear.h>
+     846              : #include <ATen/ops/linear_backward.h>
+     847              : #include <ATen/ops/linspace.h>
+     848              : #include <ATen/ops/log.h>
+     849              : #include <ATen/ops/log10.h>
+     850              : #include <ATen/ops/log1p.h>
+     851              : #include <ATen/ops/log2.h>
+     852              : #include <ATen/ops/log_normal.h>
+     853              : #include <ATen/ops/log_sigmoid.h>
+     854              : #include <ATen/ops/log_sigmoid_backward.h>
+     855              : #include <ATen/ops/log_sigmoid_forward.h>
+     856              : #include <ATen/ops/log_softmax.h>
+     857              : #include <ATen/ops/logaddexp.h>
+     858              : #include <ATen/ops/logaddexp2.h>
+     859              : #include <ATen/ops/logcumsumexp.h>
+     860              : #include <ATen/ops/logdet.h>
+     861              : #include <ATen/ops/logical_and.h>
+     862              : #include <ATen/ops/logical_not.h>
+     863              : #include <ATen/ops/logical_or.h>
+     864              : #include <ATen/ops/logical_xor.h>
+     865              : #include <ATen/ops/logit.h>
+     866              : #include <ATen/ops/logit_backward.h>
+     867              : #include <ATen/ops/logspace.h>
+     868              : #include <ATen/ops/logsumexp.h>
+     869              : #include <ATen/ops/lshift.h>
+     870              : #include <ATen/ops/lstm.h>
+     871              : #include <ATen/ops/lstm_cell.h>
+     872              : #include <ATen/ops/lstm_mps_backward.h>
+     873              : #include <ATen/ops/lt.h>
+     874              : #include <ATen/ops/lu_solve.h>
+     875              : #include <ATen/ops/lu_unpack.h>
+     876              : #include <ATen/ops/mH.h>
+     877              : #include <ATen/ops/mT.h>
+     878              : #include <ATen/ops/margin_ranking_loss.h>
+     879              : #include <ATen/ops/masked_fill.h>
+     880              : #include <ATen/ops/masked_scatter.h>
+     881              : #include <ATen/ops/masked_select.h>
+     882              : #include <ATen/ops/masked_select_backward.h>
+     883              : #include <ATen/ops/matmul.h>
+     884              : #include <ATen/ops/matmul_backward.h>
+     885              : #include <ATen/ops/matrix_H.h>
+     886              : #include <ATen/ops/matrix_exp.h>
+     887              : #include <ATen/ops/matrix_exp_backward.h>
+     888              : #include <ATen/ops/matrix_power.h>
+     889              : #include <ATen/ops/max.h>
+     890              : #include <ATen/ops/max_pool1d.h>
+     891              : #include <ATen/ops/max_pool1d_with_indices.h>
+     892              : #include <ATen/ops/max_pool2d.h>
+     893              : #include <ATen/ops/max_pool2d_backward.h>
+     894              : #include <ATen/ops/max_pool2d_with_indices.h>
+     895              : #include <ATen/ops/max_pool2d_with_indices_backward.h>
+     896              : #include <ATen/ops/max_pool3d.h>
+     897              : #include <ATen/ops/max_pool3d_with_indices.h>
+     898              : #include <ATen/ops/max_pool3d_with_indices_backward.h>
+     899              : #include <ATen/ops/max_unpool2d.h>
+     900              : #include <ATen/ops/max_unpool3d.h>
+     901              : #include <ATen/ops/maximum.h>
+     902              : #include <ATen/ops/mean.h>
+     903              : #include <ATen/ops/median.h>
+     904              : #include <ATen/ops/meshgrid.h>
+     905              : #include <ATen/ops/min.h>
+     906              : #include <ATen/ops/minimum.h>
+     907              : #include <ATen/ops/miopen_batch_norm.h>
+     908              : #include <ATen/ops/miopen_batch_norm_backward.h>
+     909              : #include <ATen/ops/miopen_convolution.h>
+     910              : #include <ATen/ops/miopen_convolution_add_relu.h>
+     911              : #include <ATen/ops/miopen_convolution_relu.h>
+     912              : #include <ATen/ops/miopen_convolution_transpose.h>
+     913              : #include <ATen/ops/miopen_depthwise_convolution.h>
+     914              : #include <ATen/ops/miopen_rnn.h>
+     915              : #include <ATen/ops/miopen_rnn_backward.h>
+     916              : #include <ATen/ops/mish.h>
+     917              : #include <ATen/ops/mish_backward.h>
+     918              : #include <ATen/ops/mkldnn_adaptive_avg_pool2d.h>
+     919              : #include <ATen/ops/mkldnn_adaptive_avg_pool2d_backward.h>
+     920              : #include <ATen/ops/mkldnn_convolution.h>
+     921              : #include <ATen/ops/mkldnn_linear.h>
+     922              : #include <ATen/ops/mkldnn_linear_backward.h>
+     923              : #include <ATen/ops/mkldnn_linear_backward_input.h>
+     924              : #include <ATen/ops/mkldnn_linear_backward_weights.h>
+     925              : #include <ATen/ops/mkldnn_max_pool2d.h>
+     926              : #include <ATen/ops/mkldnn_max_pool2d_backward.h>
+     927              : #include <ATen/ops/mkldnn_max_pool3d.h>
+     928              : #include <ATen/ops/mkldnn_max_pool3d_backward.h>
+     929              : #include <ATen/ops/mkldnn_reorder_conv2d_weight.h>
+     930              : #include <ATen/ops/mkldnn_reorder_conv3d_weight.h>
+     931              : #include <ATen/ops/mkldnn_rnn_layer.h>
+     932              : #include <ATen/ops/mkldnn_rnn_layer_backward.h>
+     933              : #include <ATen/ops/mm.h>
+     934              : #include <ATen/ops/mode.h>
+     935              : #include <ATen/ops/moveaxis.h>
+     936              : #include <ATen/ops/movedim.h>
+     937              : #include <ATen/ops/mps_convolution_backward.h>
+     938              : #include <ATen/ops/mps_convolution_transpose_backward.h>
+     939              : #include <ATen/ops/mse_loss.h>
+     940              : #include <ATen/ops/mse_loss_backward.h>
+     941              : #include <ATen/ops/msort.h>
+     942              : #include <ATen/ops/mul.h>
+     943              : #include <ATen/ops/multi_margin_loss.h>
+     944              : #include <ATen/ops/multi_margin_loss_backward.h>
+     945              : #include <ATen/ops/multilabel_margin_loss.h>
+     946              : #include <ATen/ops/multilabel_margin_loss_backward.h>
+     947              : #include <ATen/ops/multilabel_margin_loss_forward.h>
+     948              : #include <ATen/ops/multinomial.h>
+     949              : #include <ATen/ops/multiply.h>
+     950              : #include <ATen/ops/mv.h>
+     951              : #include <ATen/ops/mvlgamma.h>
+     952              : #include <ATen/ops/nan_to_num.h>
+     953              : #include <ATen/ops/nanmean.h>
+     954              : #include <ATen/ops/nanmedian.h>
+     955              : #include <ATen/ops/nanquantile.h>
+     956              : #include <ATen/ops/nansum.h>
+     957              : #include <ATen/ops/narrow.h>
+     958              : #include <ATen/ops/narrow_copy.h>
+     959              : #include <ATen/ops/native_batch_norm.h>
+     960              : #include <ATen/ops/native_batch_norm_backward.h>
+     961              : #include <ATen/ops/native_channel_shuffle.h>
+     962              : #include <ATen/ops/native_dropout.h>
+     963              : #include <ATen/ops/native_dropout_backward.h>
+     964              : #include <ATen/ops/native_group_norm.h>
+     965              : #include <ATen/ops/native_group_norm_backward.h>
+     966              : #include <ATen/ops/native_layer_norm.h>
+     967              : #include <ATen/ops/native_layer_norm_backward.h>
+     968              : #include <ATen/ops/native_norm.h>
+     969              : #include <ATen/ops/ne.h>
+     970              : #include <ATen/ops/neg.h>
+     971              : #include <ATen/ops/negative.h>
+     972              : #include <ATen/ops/nested_to_padded_tensor.h>
+     973              : #include <ATen/ops/new_empty.h>
+     974              : #include <ATen/ops/new_empty_strided.h>
+     975              : #include <ATen/ops/new_full.h>
+     976              : #include <ATen/ops/new_ones.h>
+     977              : #include <ATen/ops/new_zeros.h>
+     978              : #include <ATen/ops/nextafter.h>
+     979              : #include <ATen/ops/nll_loss.h>
+     980              : #include <ATen/ops/nll_loss2d.h>
+     981              : #include <ATen/ops/nll_loss2d_backward.h>
+     982              : #include <ATen/ops/nll_loss2d_forward.h>
+     983              : #include <ATen/ops/nll_loss_backward.h>
+     984              : #include <ATen/ops/nll_loss_forward.h>
+     985              : #include <ATen/ops/nll_loss_nd.h>
+     986              : #include <ATen/ops/nonzero.h>
+     987              : #include <ATen/ops/nonzero_numpy.h>
+     988              : #include <ATen/ops/nonzero_static.h>
+     989              : #include <ATen/ops/norm.h>
+     990              : #include <ATen/ops/norm_except_dim.h>
+     991              : #include <ATen/ops/normal.h>
+     992              : #include <ATen/ops/not_equal.h>
+     993              : #include <ATen/ops/nuclear_norm.h>
+     994              : #include <ATen/ops/numpy_T.h>
+     995              : #include <ATen/ops/one_hot.h>
+     996              : #include <ATen/ops/ones.h>
+     997              : #include <ATen/ops/ones_like.h>
+     998              : #include <ATen/ops/or.h>
+     999              : #include <ATen/ops/orgqr.h>
+    1000              : #include <ATen/ops/ormqr.h>
+    1001              : #include <ATen/ops/outer.h>
+    1002              : #include <ATen/ops/output_nr.h>
+    1003              : #include <ATen/ops/pad.h>
+    1004              : #include <ATen/ops/pad_sequence.h>
+    1005              : #include <ATen/ops/pairwise_distance.h>
+    1006              : #include <ATen/ops/pdist.h>
+    1007              : #include <ATen/ops/permute.h>
+    1008              : #include <ATen/ops/permute_copy.h>
+    1009              : #include <ATen/ops/pin_memory.h>
+    1010              : #include <ATen/ops/pinverse.h>
+    1011              : #include <ATen/ops/pixel_shuffle.h>
+    1012              : #include <ATen/ops/pixel_unshuffle.h>
+    1013              : #include <ATen/ops/poisson.h>
+    1014              : #include <ATen/ops/poisson_nll_loss.h>
+    1015              : #include <ATen/ops/polar.h>
+    1016              : #include <ATen/ops/polygamma.h>
+    1017              : #include <ATen/ops/positive.h>
+    1018              : #include <ATen/ops/pow.h>
+    1019              : #include <ATen/ops/prelu.h>
+    1020              : #include <ATen/ops/prod.h>
+    1021              : #include <ATen/ops/promote_types.h>
+    1022              : #include <ATen/ops/put.h>
+    1023              : #include <ATen/ops/q_per_channel_axis.h>
+    1024              : #include <ATen/ops/q_per_channel_scales.h>
+    1025              : #include <ATen/ops/q_per_channel_zero_points.h>
+    1026              : #include <ATen/ops/q_scale.h>
+    1027              : #include <ATen/ops/q_zero_point.h>
+    1028              : #include <ATen/ops/qr.h>
+    1029              : #include <ATen/ops/qscheme.h>
+    1030              : #include <ATen/ops/quantile.h>
+    1031              : #include <ATen/ops/quantize_per_channel.h>
+    1032              : #include <ATen/ops/quantize_per_tensor.h>
+    1033              : #include <ATen/ops/quantize_per_tensor_dynamic.h>
+    1034              : #include <ATen/ops/quantized_batch_norm.h>
+    1035              : #include <ATen/ops/quantized_gru_cell.h>
+    1036              : #include <ATen/ops/quantized_lstm_cell.h>
+    1037              : #include <ATen/ops/quantized_max_pool1d.h>
+    1038              : #include <ATen/ops/quantized_max_pool2d.h>
+    1039              : #include <ATen/ops/quantized_max_pool3d.h>
+    1040              : #include <ATen/ops/quantized_rnn_relu_cell.h>
+    1041              : #include <ATen/ops/quantized_rnn_tanh_cell.h>
+    1042              : #include <ATen/ops/rad2deg.h>
+    1043              : #include <ATen/ops/rand.h>
+    1044              : #include <ATen/ops/rand_like.h>
+    1045              : #include <ATen/ops/randint.h>
+    1046              : #include <ATen/ops/randint_like.h>
+    1047              : #include <ATen/ops/randn.h>
+    1048              : #include <ATen/ops/randn_like.h>
+    1049              : #include <ATen/ops/random.h>
+    1050              : #include <ATen/ops/randperm.h>
+    1051              : #include <ATen/ops/range.h>
+    1052              : #include <ATen/ops/ravel.h>
+    1053              : #include <ATen/ops/real.h>
+    1054              : #include <ATen/ops/reciprocal.h>
+    1055              : #include <ATen/ops/record_stream.h>
+    1056              : #include <ATen/ops/refine_names.h>
+    1057              : #include <ATen/ops/reflection_pad1d.h>
+    1058              : #include <ATen/ops/reflection_pad1d_backward.h>
+    1059              : #include <ATen/ops/reflection_pad2d.h>
+    1060              : #include <ATen/ops/reflection_pad2d_backward.h>
+    1061              : #include <ATen/ops/reflection_pad3d.h>
+    1062              : #include <ATen/ops/reflection_pad3d_backward.h>
+    1063              : #include <ATen/ops/relu.h>
+    1064              : #include <ATen/ops/relu6.h>
+    1065              : #include <ATen/ops/remainder.h>
+    1066              : #include <ATen/ops/rename.h>
+    1067              : #include <ATen/ops/renorm.h>
+    1068              : #include <ATen/ops/repeat.h>
+    1069              : #include <ATen/ops/repeat_interleave.h>
+    1070              : #include <ATen/ops/replication_pad1d.h>
+    1071              : #include <ATen/ops/replication_pad1d_backward.h>
+    1072              : #include <ATen/ops/replication_pad2d.h>
+    1073              : #include <ATen/ops/replication_pad2d_backward.h>
+    1074              : #include <ATen/ops/replication_pad3d.h>
+    1075              : #include <ATen/ops/replication_pad3d_backward.h>
+    1076              : #include <ATen/ops/requires_grad.h>
+    1077              : #include <ATen/ops/reshape.h>
+    1078              : #include <ATen/ops/reshape_as.h>
+    1079              : #include <ATen/ops/resize.h>
+    1080              : #include <ATen/ops/resize_as.h>
+    1081              : #include <ATen/ops/resize_as_sparse.h>
+    1082              : #include <ATen/ops/resolve_conj.h>
+    1083              : #include <ATen/ops/resolve_neg.h>
+    1084              : #include <ATen/ops/result_type.h>
+    1085              : #include <ATen/ops/retain_grad.h>
+    1086              : #include <ATen/ops/retains_grad.h>
+    1087              : #include <ATen/ops/rnn_relu.h>
+    1088              : #include <ATen/ops/rnn_relu_cell.h>
+    1089              : #include <ATen/ops/rnn_tanh.h>
+    1090              : #include <ATen/ops/rnn_tanh_cell.h>
+    1091              : #include <ATen/ops/roll.h>
+    1092              : #include <ATen/ops/rot90.h>
+    1093              : #include <ATen/ops/round.h>
+    1094              : #include <ATen/ops/row_indices.h>
+    1095              : #include <ATen/ops/row_indices_copy.h>
+    1096              : #include <ATen/ops/row_stack.h>
+    1097              : #include <ATen/ops/rrelu.h>
+    1098              : #include <ATen/ops/rrelu_with_noise.h>
+    1099              : #include <ATen/ops/rrelu_with_noise_backward.h>
+    1100              : #include <ATen/ops/rshift.h>
+    1101              : #include <ATen/ops/rsqrt.h>
+    1102              : #include <ATen/ops/rsub.h>
+    1103              : #include <ATen/ops/scalar_tensor.h>
+    1104              : #include <ATen/ops/scaled_dot_product_attention.h>
+    1105              : #include <ATen/ops/scatter.h>
+    1106              : #include <ATen/ops/scatter_add.h>
+    1107              : #include <ATen/ops/scatter_reduce.h>
+    1108              : #include <ATen/ops/searchsorted.h>
+    1109              : #include <ATen/ops/segment_reduce.h>
+    1110              : #include <ATen/ops/select.h>
+    1111              : #include <ATen/ops/select_backward.h>
+    1112              : #include <ATen/ops/select_copy.h>
+    1113              : #include <ATen/ops/select_scatter.h>
+    1114              : #include <ATen/ops/selu.h>
+    1115              : #include <ATen/ops/set.h>
+    1116              : #include <ATen/ops/set_data.h>
+    1117              : #include <ATen/ops/sgn.h>
+    1118              : #include <ATen/ops/sigmoid.h>
+    1119              : #include <ATen/ops/sigmoid_backward.h>
+    1120              : #include <ATen/ops/sign.h>
+    1121              : #include <ATen/ops/signbit.h>
+    1122              : #include <ATen/ops/silu.h>
+    1123              : #include <ATen/ops/silu_backward.h>
+    1124              : #include <ATen/ops/sin.h>
+    1125              : #include <ATen/ops/sinc.h>
+    1126              : #include <ATen/ops/sinh.h>
+    1127              : #include <ATen/ops/size.h>
+    1128              : #include <ATen/ops/slice.h>
+    1129              : #include <ATen/ops/slice_backward.h>
+    1130              : #include <ATen/ops/slice_copy.h>
+    1131              : #include <ATen/ops/slice_scatter.h>
+    1132              : #include <ATen/ops/slogdet.h>
+    1133              : #include <ATen/ops/slow_conv3d.h>
+    1134              : #include <ATen/ops/slow_conv3d_forward.h>
+    1135              : #include <ATen/ops/slow_conv_dilated2d.h>
+    1136              : #include <ATen/ops/slow_conv_dilated3d.h>
+    1137              : #include <ATen/ops/slow_conv_transpose2d.h>
+    1138              : #include <ATen/ops/slow_conv_transpose3d.h>
+    1139              : #include <ATen/ops/smm.h>
+    1140              : #include <ATen/ops/smooth_l1_loss.h>
+    1141              : #include <ATen/ops/smooth_l1_loss_backward.h>
+    1142              : #include <ATen/ops/soft_margin_loss.h>
+    1143              : #include <ATen/ops/soft_margin_loss_backward.h>
+    1144              : #include <ATen/ops/softmax.h>
+    1145              : #include <ATen/ops/softplus.h>
+    1146              : #include <ATen/ops/softplus_backward.h>
+    1147              : #include <ATen/ops/softshrink.h>
+    1148              : #include <ATen/ops/softshrink_backward.h>
+    1149              : #include <ATen/ops/sort.h>
+    1150              : #include <ATen/ops/sparse_bsc_tensor.h>
+    1151              : #include <ATen/ops/sparse_bsr_tensor.h>
+    1152              : #include <ATen/ops/sparse_compressed_tensor.h>
+    1153              : #include <ATen/ops/sparse_coo_tensor.h>
+    1154              : #include <ATen/ops/sparse_csc_tensor.h>
+    1155              : #include <ATen/ops/sparse_csr_tensor.h>
+    1156              : #include <ATen/ops/sparse_dim.h>
+    1157              : #include <ATen/ops/sparse_mask.h>
+    1158              : #include <ATen/ops/sparse_resize.h>
+    1159              : #include <ATen/ops/sparse_resize_and_clear.h>
+    1160              : #include <ATen/ops/sparse_sampled_addmm.h>
+    1161              : #include <ATen/ops/special_airy_ai.h>
+    1162              : #include <ATen/ops/special_bessel_j0.h>
+    1163              : #include <ATen/ops/special_bessel_j1.h>
+    1164              : #include <ATen/ops/special_bessel_y0.h>
+    1165              : #include <ATen/ops/special_bessel_y1.h>
+    1166              : #include <ATen/ops/special_chebyshev_polynomial_t.h>
+    1167              : #include <ATen/ops/special_chebyshev_polynomial_u.h>
+    1168              : #include <ATen/ops/special_chebyshev_polynomial_v.h>
+    1169              : #include <ATen/ops/special_chebyshev_polynomial_w.h>
+    1170              : #include <ATen/ops/special_digamma.h>
+    1171              : #include <ATen/ops/special_entr.h>
+    1172              : #include <ATen/ops/special_erf.h>
+    1173              : #include <ATen/ops/special_erfc.h>
+    1174              : #include <ATen/ops/special_erfcx.h>
+    1175              : #include <ATen/ops/special_erfinv.h>
+    1176              : #include <ATen/ops/special_exp2.h>
+    1177              : #include <ATen/ops/special_expit.h>
+    1178              : #include <ATen/ops/special_expm1.h>
+    1179              : #include <ATen/ops/special_gammainc.h>
+    1180              : #include <ATen/ops/special_gammaincc.h>
+    1181              : #include <ATen/ops/special_gammaln.h>
+    1182              : #include <ATen/ops/special_hermite_polynomial_h.h>
+    1183              : #include <ATen/ops/special_hermite_polynomial_he.h>
+    1184              : #include <ATen/ops/special_i0.h>
+    1185              : #include <ATen/ops/special_i0e.h>
+    1186              : #include <ATen/ops/special_i1.h>
+    1187              : #include <ATen/ops/special_i1e.h>
+    1188              : #include <ATen/ops/special_laguerre_polynomial_l.h>
+    1189              : #include <ATen/ops/special_legendre_polynomial_p.h>
+    1190              : #include <ATen/ops/special_log1p.h>
+    1191              : #include <ATen/ops/special_log_ndtr.h>
+    1192              : #include <ATen/ops/special_log_softmax.h>
+    1193              : #include <ATen/ops/special_logit.h>
+    1194              : #include <ATen/ops/special_logsumexp.h>
+    1195              : #include <ATen/ops/special_modified_bessel_i0.h>
+    1196              : #include <ATen/ops/special_modified_bessel_i1.h>
+    1197              : #include <ATen/ops/special_modified_bessel_k0.h>
+    1198              : #include <ATen/ops/special_modified_bessel_k1.h>
+    1199              : #include <ATen/ops/special_multigammaln.h>
+    1200              : #include <ATen/ops/special_ndtr.h>
+    1201              : #include <ATen/ops/special_ndtri.h>
+    1202              : #include <ATen/ops/special_polygamma.h>
+    1203              : #include <ATen/ops/special_psi.h>
+    1204              : #include <ATen/ops/special_round.h>
+    1205              : #include <ATen/ops/special_scaled_modified_bessel_k0.h>
+    1206              : #include <ATen/ops/special_scaled_modified_bessel_k1.h>
+    1207              : #include <ATen/ops/special_shifted_chebyshev_polynomial_t.h>
+    1208              : #include <ATen/ops/special_shifted_chebyshev_polynomial_u.h>
+    1209              : #include <ATen/ops/special_shifted_chebyshev_polynomial_v.h>
+    1210              : #include <ATen/ops/special_shifted_chebyshev_polynomial_w.h>
+    1211              : #include <ATen/ops/special_sinc.h>
+    1212              : #include <ATen/ops/special_softmax.h>
+    1213              : #include <ATen/ops/special_spherical_bessel_j0.h>
+    1214              : #include <ATen/ops/special_xlog1py.h>
+    1215              : #include <ATen/ops/special_xlogy.h>
+    1216              : #include <ATen/ops/special_zeta.h>
+    1217              : #include <ATen/ops/split.h>
+    1218              : #include <ATen/ops/split_copy.h>
+    1219              : #include <ATen/ops/split_with_sizes.h>
+    1220              : #include <ATen/ops/split_with_sizes_copy.h>
+    1221              : #include <ATen/ops/sqrt.h>
+    1222              : #include <ATen/ops/square.h>
+    1223              : #include <ATen/ops/squeeze.h>
+    1224              : #include <ATen/ops/squeeze_copy.h>
+    1225              : #include <ATen/ops/sspaddmm.h>
+    1226              : #include <ATen/ops/stack.h>
+    1227              : #include <ATen/ops/std.h>
+    1228              : #include <ATen/ops/std_mean.h>
+    1229              : #include <ATen/ops/stft.h>
+    1230              : #include <ATen/ops/stride.h>
+    1231              : #include <ATen/ops/sub.h>
+    1232              : #include <ATen/ops/subtract.h>
+    1233              : #include <ATen/ops/sum.h>
+    1234              : #include <ATen/ops/sum_to_size.h>
+    1235              : #include <ATen/ops/svd.h>
+    1236              : #include <ATen/ops/swapaxes.h>
+    1237              : #include <ATen/ops/swapdims.h>
+    1238              : #include <ATen/ops/sym_constrain_range.h>
+    1239              : #include <ATen/ops/sym_constrain_range_for_size.h>
+    1240              : #include <ATen/ops/sym_numel.h>
+    1241              : #include <ATen/ops/sym_size.h>
+    1242              : #include <ATen/ops/sym_storage_offset.h>
+    1243              : #include <ATen/ops/sym_stride.h>
+    1244              : #include <ATen/ops/t.h>
+    1245              : #include <ATen/ops/t_copy.h>
+    1246              : #include <ATen/ops/take.h>
+    1247              : #include <ATen/ops/take_along_dim.h>
+    1248              : #include <ATen/ops/tan.h>
+    1249              : #include <ATen/ops/tanh.h>
+    1250              : #include <ATen/ops/tanh_backward.h>
+    1251              : #include <ATen/ops/tensor_split.h>
+    1252              : #include <ATen/ops/tensordot.h>
+    1253              : #include <ATen/ops/thnn_conv2d.h>
+    1254              : #include <ATen/ops/threshold.h>
+    1255              : #include <ATen/ops/threshold_backward.h>
+    1256              : #include <ATen/ops/tile.h>
+    1257              : #include <ATen/ops/to.h>
+    1258              : #include <ATen/ops/to_dense.h>
+    1259              : #include <ATen/ops/to_dense_backward.h>
+    1260              : #include <ATen/ops/to_mkldnn.h>
+    1261              : #include <ATen/ops/to_mkldnn_backward.h>
+    1262              : #include <ATen/ops/to_padded_tensor.h>
+    1263              : #include <ATen/ops/to_sparse.h>
+    1264              : #include <ATen/ops/to_sparse_bsc.h>
+    1265              : #include <ATen/ops/to_sparse_bsr.h>
+    1266              : #include <ATen/ops/to_sparse_csc.h>
+    1267              : #include <ATen/ops/to_sparse_csr.h>
+    1268              : #include <ATen/ops/topk.h>
+    1269              : #include <ATen/ops/trace.h>
+    1270              : #include <ATen/ops/trace_backward.h>
+    1271              : #include <ATen/ops/transpose.h>
+    1272              : #include <ATen/ops/transpose_copy.h>
+    1273              : #include <ATen/ops/trapezoid.h>
+    1274              : #include <ATen/ops/trapz.h>
+    1275              : #include <ATen/ops/triangular_solve.h>
+    1276              : #include <ATen/ops/tril.h>
+    1277              : #include <ATen/ops/tril_indices.h>
+    1278              : #include <ATen/ops/triplet_margin_loss.h>
+    1279              : #include <ATen/ops/triu.h>
+    1280              : #include <ATen/ops/triu_indices.h>
+    1281              : #include <ATen/ops/true_divide.h>
+    1282              : #include <ATen/ops/trunc.h>
+    1283              : #include <ATen/ops/type_as.h>
+    1284              : #include <ATen/ops/unbind.h>
+    1285              : #include <ATen/ops/unbind_copy.h>
+    1286              : #include <ATen/ops/unflatten.h>
+    1287              : #include <ATen/ops/unflatten_dense_tensors.h>
+    1288              : #include <ATen/ops/unfold.h>
+    1289              : #include <ATen/ops/unfold_backward.h>
+    1290              : #include <ATen/ops/unfold_copy.h>
+    1291              : #include <ATen/ops/uniform.h>
+    1292              : #include <ATen/ops/unique_consecutive.h>
+    1293              : #include <ATen/ops/unique_dim.h>
+    1294              : #include <ATen/ops/unique_dim_consecutive.h>
+    1295              : #include <ATen/ops/unsafe_chunk.h>
+    1296              : #include <ATen/ops/unsafe_split.h>
+    1297              : #include <ATen/ops/unsafe_split_with_sizes.h>
+    1298              : #include <ATen/ops/unsqueeze.h>
+    1299              : #include <ATen/ops/unsqueeze_copy.h>
+    1300              : #include <ATen/ops/upsample_bicubic2d.h>
+    1301              : #include <ATen/ops/upsample_bicubic2d_backward.h>
+    1302              : #include <ATen/ops/upsample_bilinear2d.h>
+    1303              : #include <ATen/ops/upsample_bilinear2d_backward.h>
+    1304              : #include <ATen/ops/upsample_linear1d.h>
+    1305              : #include <ATen/ops/upsample_linear1d_backward.h>
+    1306              : #include <ATen/ops/upsample_nearest1d.h>
+    1307              : #include <ATen/ops/upsample_nearest1d_backward.h>
+    1308              : #include <ATen/ops/upsample_nearest2d.h>
+    1309              : #include <ATen/ops/upsample_nearest2d_backward.h>
+    1310              : #include <ATen/ops/upsample_nearest3d.h>
+    1311              : #include <ATen/ops/upsample_nearest3d_backward.h>
+    1312              : #include <ATen/ops/upsample_trilinear3d.h>
+    1313              : #include <ATen/ops/upsample_trilinear3d_backward.h>
+    1314              : #include <ATen/ops/value_selecting_reduction_backward.h>
+    1315              : #include <ATen/ops/values.h>
+    1316              : #include <ATen/ops/values_copy.h>
+    1317              : #include <ATen/ops/vander.h>
+    1318              : #include <ATen/ops/var.h>
+    1319              : #include <ATen/ops/var_mean.h>
+    1320              : #include <ATen/ops/vdot.h>
+    1321              : #include <ATen/ops/view.h>
+    1322              : #include <ATen/ops/view_as.h>
+    1323              : #include <ATen/ops/view_as_complex.h>
+    1324              : #include <ATen/ops/view_as_complex_copy.h>
+    1325              : #include <ATen/ops/view_as_real.h>
+    1326              : #include <ATen/ops/view_as_real_copy.h>
+    1327              : #include <ATen/ops/view_copy.h>
+    1328              : #include <ATen/ops/vsplit.h>
+    1329              : #include <ATen/ops/vstack.h>
+    1330              : #include <ATen/ops/where.h>
+    1331              : #include <ATen/ops/xlogy.h>
+    1332              : #include <ATen/ops/xor.h>
+    1333              : #include <ATen/ops/zero.h>
+    1334              : #include <ATen/ops/zeros.h>
+    1335              : #include <ATen/ops/zeros_like.h>
+    1336              : 
+    1337              : namespace at {
+    1338              : 
+    1339              : 
+    1340              : 
+    1341              : // Special C++ only overloads for std()-like functions (See gh-40287)
+    1342              : // These are needed because int -> bool conversion takes precedence over int -> IntArrayRef
+    1343              : // So, for example std(0) would select the std(unbiased=False) overload
+    1344              : TORCH_API inline Tensor var(const Tensor& self, int dim) {
+    1345              :   return at::var(self, IntArrayRef{dim});
+    1346              : }
+    1347              : TORCH_API inline std::tuple<Tensor, Tensor> var_mean(const Tensor& self, int dim) {
+    1348              :   return at::var_mean(self, IntArrayRef{dim});
+    1349              : }
+    1350              : TORCH_API inline Tensor std(const Tensor& self, int dim) {
+    1351              :   return at::std(self, IntArrayRef{dim});
+    1352              : }
+    1353              : TORCH_API inline std::tuple<Tensor, Tensor> std_mean(const Tensor& self, int dim) {
+    1354              :   return at::std_mean(self, IntArrayRef{dim});
+    1355              : }
+    1356              : 
+    1357              : inline int64_t numel(const Tensor& tensor) {
+    1358              :   return tensor.numel();
+    1359              : }
+    1360              : 
+    1361              : inline int64_t size(const Tensor& tensor, int64_t dim) {
+    1362              :   return tensor.size(dim);
+    1363              : }
+    1364              : 
+    1365              : inline int64_t stride(const Tensor& tensor, int64_t dim) {
+    1366              :   return tensor.stride(dim);
+    1367              : }
+    1368              : 
+    1369              : inline bool is_complex(const Tensor& tensor) {
+    1370              :   return tensor.is_complex();
+    1371              : }
+    1372              : 
+    1373          876 : inline bool is_floating_point(const Tensor& tensor) {
+    1374          876 :   return tensor.is_floating_point();
+    1375              : }
+    1376              : 
+    1377              : inline bool is_signed(const Tensor& tensor) {
+    1378              :   return tensor.is_signed();
+    1379              : }
+    1380              : 
+    1381              : inline bool is_inference(const Tensor& tensor) {
+    1382              :   return tensor.is_inference();
+    1383              : }
+    1384              : 
+    1385              : inline bool _is_zerotensor(const Tensor& tensor) {
+    1386              :   return tensor._is_zerotensor();
+    1387              : }
+    1388              : 
+    1389              : inline bool is_conj(const Tensor& tensor) {
+    1390              :   return tensor.is_conj();
+    1391              : }
+    1392              : 
+    1393              : inline Tensor conj(const Tensor& tensor) {
+    1394              :   return tensor.conj();
+    1395              : }
+    1396              : 
+    1397              : inline bool is_neg(const Tensor& tensor) {
+    1398              :   return tensor.is_neg();
+    1399              : }
+    1400              : 
+    1401              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/TensorIndexing.h.func-c.html b/html/libtorch/include/ATen/TensorIndexing.h.func-c.html new file mode 100644 index 0000000..7ab5348 --- /dev/null +++ b/html/libtorch/include/ATen/TensorIndexing.h.func-c.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/TensorIndexing.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen - TensorIndexing.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:96.0 %2524
Test Date:2024-04-30 13:17:26Functions:100.0 %77
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at8indexing11TensorIndexC2ENS0_5SliceE510
_ZN2at8indexing11TensorIndexC2ENS_6TensorE27136
_ZN2at8indexing11TensorIndexC2ENS0_17EllipsisIndexTypeE776042
_ZN2at8indexing11TensorIndexC2EPKc776042
_ZN2at8indexing11TensorIndexC2EN3c106SymIntE36171516
_ZN2at8indexing11TensorIndexC2Ei36171516
_ZN2at8indexing5SliceC2EN3c108optionalINS2_6SymIntEEES5_S5_36975204
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/TensorIndexing.h.func.html b/html/libtorch/include/ATen/TensorIndexing.h.func.html new file mode 100644 index 0000000..071c6a8 --- /dev/null +++ b/html/libtorch/include/ATen/TensorIndexing.h.func.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/TensorIndexing.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen - TensorIndexing.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:96.0 %2524
Test Date:2024-04-30 13:17:26Functions:100.0 %77
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at8indexing11TensorIndexC2EN3c106SymIntE36171516
_ZN2at8indexing11TensorIndexC2ENS0_17EllipsisIndexTypeE776042
_ZN2at8indexing11TensorIndexC2ENS0_5SliceE510
_ZN2at8indexing11TensorIndexC2ENS_6TensorE27136
_ZN2at8indexing11TensorIndexC2EPKc776042
_ZN2at8indexing11TensorIndexC2Ei36171516
_ZN2at8indexing5SliceC2EN3c108optionalINS2_6SymIntEEES5_S5_36975204
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/TensorIndexing.h.gcov.html b/html/libtorch/include/ATen/TensorIndexing.h.gcov.html new file mode 100644 index 0000000..1556761 --- /dev/null +++ b/html/libtorch/include/ATen/TensorIndexing.h.gcov.html @@ -0,0 +1,808 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/TensorIndexing.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen - TensorIndexing.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:96.0 %2524
Test Date:2024-04-30 13:17:26Functions:100.0 %77
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <ATen/ExpandUtils.h>
+       4              : #include <ATen/ScalarOps.h>
+       5              : #include <ATen/core/Tensor.h>
+       6              : #include <ATen/core/TensorBody.h>
+       7              : #include <c10/core/SymInt.h>
+       8              : #include <c10/util/Optional.h>
+       9              : #include <c10/util/irange.h>
+      10              : 
+      11              : #ifndef AT_PER_OPERATOR_HEADERS
+      12              : #include <ATen/Functions.h>
+      13              : #include <ATen/NativeFunctions.h>
+      14              : #else
+      15              : #include <ATen/ops/alias.h>
+      16              : #include <ATen/ops/empty.h>
+      17              : #include <ATen/ops/scalar_tensor.h>
+      18              : #include <ATen/ops/zeros.h>
+      19              : #endif
+      20              : 
+      21              : #include <ATen/core/List.h>
+      22              : 
+      23              : #include <utility>
+      24              : 
+      25              : namespace at {
+      26              : namespace indexing {
+      27              : 
+      28              : const int64_t INDEX_MIN = c10::SymInt::min_representable_int();
+      29              : const int64_t INDEX_MAX = -(INDEX_MIN + 1);
+      30              : 
+      31              : enum class TensorIndexType { None, Ellipsis, SymInt, Boolean, Slice, Tensor };
+      32              : 
+      33              : constexpr c10::nullopt_t None = c10::nullopt;
+      34              : 
+      35              : struct TORCH_API EllipsisIndexType final {
+      36              :   EllipsisIndexType() = default;
+      37              : };
+      38              : TORCH_API extern const EllipsisIndexType Ellipsis;
+      39              : 
+      40              : struct TORCH_API Slice final {
+      41              :  public:
+      42     36975204 :   Slice(
+      43              :       c10::optional<c10::SymInt> start_index = c10::nullopt,
+      44              :       c10::optional<c10::SymInt> stop_index = c10::nullopt,
+      45     36975204 :       c10::optional<c10::SymInt> step_index = c10::nullopt) {
+      46     36975204 :     if (!step_index.has_value()) {
+      47     36975204 :       step_ = c10::SymInt(1);
+      48              :     } else {
+      49            0 :       step_ = std::move(step_index).value();
+      50              :     }
+      51              : 
+      52     36975204 :     TORCH_CHECK_VALUE(step_ != 0, "slice step cannot be zero");
+      53              : 
+      54     36975204 :     if (!start_index.has_value()) {
+      55     36974694 :       start_ = c10::SymInt(step_ < 0 ? INDEX_MAX : 0);
+      56              :     } else {
+      57          510 :       start_ = std::move(start_index).value();
+      58              :     }
+      59              : 
+      60     36975204 :     if (!stop_index.has_value()) {
+      61     36974694 :       stop_ = c10::SymInt(step_ < 0 ? INDEX_MIN : INDEX_MAX);
+      62              :     } else {
+      63          510 :       stop_ = std::move(stop_index).value();
+      64              :     }
+      65     36975204 :   }
+      66              : 
+      67              :   inline c10::SymInt start() const {
+      68              :     return start_;
+      69              :   }
+      70              : 
+      71              :   inline c10::SymInt stop() const {
+      72              :     return stop_;
+      73              :   }
+      74              : 
+      75              :   inline c10::SymInt step() const {
+      76              :     return step_;
+      77              :   }
+      78              : 
+      79              :  private:
+      80              :   c10::SymInt start_;
+      81              :   c10::SymInt stop_;
+      82              :   c10::SymInt step_;
+      83              : };
+      84              : 
+      85              : TORCH_API std::ostream& operator<<(std::ostream& stream, const Slice& slice);
+      86              : 
+      87              : // `at::indexing::TensorIndex` is used for converting C++ tensor indices such as
+      88              : // `{None, "...", Ellipsis, 0, true, Slice(1, None, 2), torch::tensor({1, 2})}`
+      89              : // into its equivalent `std::vector<TensorIndex>`, so that further tensor
+      90              : // indexing operations can be performed using the supplied indices.
+      91              : //
+      92              : // There is one-to-one correspondence between Python and C++ tensor index types:
+      93              : // Python                  | C++
+      94              : // -----------------------------------------------------
+      95              : // `None`                  | `at::indexing::None`
+      96              : // `Ellipsis`              | `at::indexing::Ellipsis`
+      97              : // `...`                   | `"..."`
+      98              : // `123`                   | `123`
+      99              : // `True` / `False`        | `true` / `false`
+     100              : // `:`                     | `Slice()` / `Slice(None, None)`
+     101              : // `::`                    | `Slice()` / `Slice(None, None, None)`
+     102              : // `1:`                    | `Slice(1, None)`
+     103              : // `1::`                   | `Slice(1, None, None)`
+     104              : // `:3`                    | `Slice(None, 3)`
+     105              : // `:3:`                   | `Slice(None, 3, None)`
+     106              : // `::2`                   | `Slice(None, None, 2)`
+     107              : // `1:3`                   | `Slice(1, 3)`
+     108              : // `1::2`                  | `Slice(1, None, 2)`
+     109              : // `:3:2`                  | `Slice(None, 3, 2)`
+     110              : // `1:3:2`                 | `Slice(1, 3, 2)`
+     111              : // `torch.tensor([1, 2])`) | `torch::tensor({1, 2})`
+     112              : struct TORCH_API TensorIndex final {
+     113              :   // Case 1: `at::indexing::None`
+     114              :   TensorIndex(c10::nullopt_t) : type_(TensorIndexType::None) {}
+     115              : 
+     116              :   // Case 2: "..." / `at::indexing::Ellipsis`
+     117       776042 :   TensorIndex(at::indexing::EllipsisIndexType)
+     118       776042 :       : type_(TensorIndexType::Ellipsis) {}
+     119       776042 :   TensorIndex(const char* str) : TensorIndex(at::indexing::Ellipsis) {
+     120       776042 :     TORCH_CHECK_VALUE(
+     121              :         strcmp(str, "...") == 0,
+     122              :         "Expected \"...\" to represent an ellipsis index, but got \"",
+     123              :         str,
+     124              :         "\"");
+     125       776042 :   }
+     126              : 
+     127              :   // Case 3: (Sym) Integer value
+     128     36171516 :   TensorIndex(SymInt integer)
+     129     36171516 :       : integer_(std::move(integer)), type_(TensorIndexType::SymInt) {}
+     130              :   TensorIndex(int64_t integer) : TensorIndex(SymInt(integer)) {}
+     131     36171516 :   TensorIndex(int integer) : TensorIndex(SymInt(integer)) {}
+     132              : 
+     133              :   // Case 4: Boolean value
+     134              :   template <
+     135              :       class T,
+     136              :       class = typename std::enable_if<std::is_same<bool, T>::value>::type>
+     137              :   TensorIndex(T boolean) : boolean_(boolean), type_(TensorIndexType::Boolean) {}
+     138              : 
+     139              :   // Case 5: Slice represented in `at::indexing::Slice` form
+     140          510 :   TensorIndex(Slice slice)
+     141          510 :       : slice_(std::move(slice)), type_(TensorIndexType::Slice) {}
+     142              : 
+     143              :   // Case 6: Tensor value
+     144        27136 :   TensorIndex(Tensor tensor)
+     145        27136 :       : tensor_(std::move(tensor)), type_(TensorIndexType::Tensor) {}
+     146              : 
+     147              :   inline bool is_none() const {
+     148              :     return type_ == TensorIndexType::None;
+     149              :   }
+     150              : 
+     151              :   inline bool is_ellipsis() const {
+     152              :     return type_ == TensorIndexType::Ellipsis;
+     153              :   }
+     154              : 
+     155              :   inline bool is_integer() const {
+     156              :     return type_ == TensorIndexType::SymInt;
+     157              :   }
+     158              : 
+     159              :   inline SymInt integer() const {
+     160              :     return integer_;
+     161              :   }
+     162              : 
+     163              :   inline bool is_boolean() const {
+     164              :     return type_ == TensorIndexType::Boolean;
+     165              :   }
+     166              : 
+     167              :   inline bool boolean() const {
+     168              :     return boolean_;
+     169              :   }
+     170              : 
+     171              :   inline bool is_slice() const {
+     172              :     return type_ == TensorIndexType::Slice;
+     173              :   }
+     174              : 
+     175              :   inline const Slice& slice() const {
+     176              :     return slice_;
+     177              :   }
+     178              : 
+     179              :   inline bool is_tensor() const {
+     180              :     return type_ == TensorIndexType::Tensor;
+     181              :   }
+     182              : 
+     183              :   inline const Tensor& tensor() const {
+     184              :     return tensor_;
+     185              :   }
+     186              : 
+     187              :  private:
+     188              :   SymInt integer_ = 0;
+     189              :   bool boolean_ = false;
+     190              :   Slice slice_;
+     191              :   Tensor tensor_;
+     192              :   TensorIndexType type_;
+     193              : };
+     194              : 
+     195              : TORCH_API std::ostream& operator<<(
+     196              :     std::ostream& stream,
+     197              :     const TensorIndex& tensor_index);
+     198              : TORCH_API std::ostream& operator<<(
+     199              :     std::ostream& stream,
+     200              :     const std::vector<TensorIndex>& tensor_indices);
+     201              : 
+     202              : namespace impl {
+     203              : static inline Tensor applySlice(
+     204              :     const Tensor& self,
+     205              :     int64_t dim,
+     206              :     c10::SymInt start,
+     207              :     c10::SymInt stop,
+     208              :     c10::SymInt step,
+     209              :     bool disable_slice_optimization,
+     210              :     const at::Device& self_device,
+     211              :     const c10::optional<SymIntArrayRef>& self_sizes) {
+     212              :   // TODO: implement negative step
+     213              :   TORCH_CHECK_VALUE(step > 0, "step must be greater than zero");
+     214              : 
+     215              :   // See NOTE [nested tensor size for indexing]
+     216              :   if (self_sizes.has_value()) {
+     217              :     // Skip this optimization if we are tracing, as the trace may be polymorphic
+     218              :     // over the shape of the `self` tensor, and we still want to record
+     219              :     // the slice.
+     220              :     SymInt length = (self_device == at::kCPU || self_device == at::kCUDA)
+     221              :         ? (*self_sizes)[dim]
+     222              :         : self.sym_size(dim);
+     223              :     if (!disable_slice_optimization && start == 0 && length == stop &&
+     224              :         step == 1) {
+     225              :       return self;
+     226              :     }
+     227              :   }
+     228              :   return self.slice_symint(dim, start, stop, std::move(step));
+     229              : }
+     230              : 
+     231              : static inline Tensor applySelect(
+     232              :     const Tensor& self,
+     233              :     int64_t dim,
+     234              :     SymInt index,
+     235              :     int64_t real_dim,
+     236              :     const at::Device& /*self_device*/,
+     237              :     const c10::optional<SymIntArrayRef>& self_sizes) {
+     238              :   // See NOTE [nested tensor size for indexing]
+     239              :   if (self_sizes.has_value()) {
+     240              :     auto maybe_index = index.maybe_as_int();
+     241              :     if (maybe_index.has_value()) {
+     242              :       TORCH_CHECK_INDEX(
+     243              :           !(maybe_index.value() == 0 && dim == 0 && self_sizes->empty()),
+     244              :           "invalid index of a 0-dim tensor. ",
+     245              :           "Use `tensor.item()` in Python or `tensor.item<T>()` in C++ to convert a 0-dim tensor to a number");
+     246              :     }
+     247              : 
+     248              :     auto size = (*self_sizes)[dim];
+     249              :     TORCH_CHECK_INDEX(
+     250              :         size >= -index && size > index,
+     251              :         "index ",
+     252              :         index,
+     253              :         " is out of bounds for dimension ",
+     254              :         real_dim,
+     255              :         " with size ",
+     256              :         size);
+     257              :   }
+     258              : 
+     259              :   // if the index is negative, do not normalize it because that would fix the
+     260              :   // index on the current tensor size in the tracer. aten::select also works on
+     261              :   // negative indices
+     262              :   return self.select_symint(dim, index);
+     263              : }
+     264              : 
+     265              : static inline Tensor boolToIndexingTensorCPUOrCUDA(
+     266              :     const Tensor& self,
+     267              :     bool value) {
+     268              :   // booleans add a dimension of size 1. true indexes this dimension as if 0:,
+     269              :   // false as empty.
+     270              :   if (value) {
+     271              :     return at::empty({1}, {}, self.options().dtype(kLong)).fill_(0.);
+     272              :   } else {
+     273              :     return at::empty({0}, {}, self.options().dtype(kLong));
+     274              :   }
+     275              : }
+     276              : 
+     277              : static inline Tensor boolToIndexingTensorNonNativeDeviceType(
+     278              :     const Tensor& self,
+     279              :     bool value) {
+     280              :   // booleans add a dimension of size 1. true indexes this dimension as if 0:,
+     281              :   // false as empty.
+     282              :   if (value) {
+     283              :     return at::zeros({1}, {}, self.options().dtype(kLong));
+     284              :   } else {
+     285              :     return at::empty({0}, {}, self.options().dtype(kLong));
+     286              :   }
+     287              : }
+     288              : 
+     289              : static inline Tensor boolToIndexingTensor(
+     290              :     const Tensor& self,
+     291              :     bool value,
+     292              :     const at::Device& self_device) {
+     293              :   if (self_device == at::kCPU || self_device == at::kCUDA) {
+     294              :     return boolToIndexingTensorCPUOrCUDA(self, value);
+     295              :   } else {
+     296              :     return boolToIndexingTensorNonNativeDeviceType(self, value);
+     297              :   }
+     298              : }
+     299              : 
+     300              : static inline Tensor scalarToTensorNonNativeDeviceType(
+     301              :     const Scalar& v,
+     302              :     const TensorOptions& options) {
+     303              :   return at::scalar_tensor(v, options);
+     304              : }
+     305              : 
+     306              : static inline void recordTensorIndex(
+     307              :     const Tensor& tensor,
+     308              :     std::vector<Tensor>& outIndices,
+     309              :     int64_t* dim_ptr) {
+     310              :   // TODO: check scalarType
+     311              :   outIndices.resize(*dim_ptr + 1);
+     312              :   outIndices[*dim_ptr] = tensor;
+     313              :   (*dim_ptr)++;
+     314              : };
+     315              : 
+     316              : static inline c10::List<c10::optional<Tensor>> typeConvertIndices(
+     317              :     const Tensor& /*self*/,
+     318              :     std::vector<Tensor>&& indices) {
+     319              :   c10::List<c10::optional<Tensor>> converted_inds;
+     320              :   converted_inds.reserve(indices.size());
+     321              :   for (const auto& i : indices) {
+     322              :     converted_inds.push_back(std::move(i));
+     323              :   }
+     324              :   return converted_inds;
+     325              : }
+     326              : 
+     327              : // NOTE: Why do we mirror instead of replace the `count_specified_dimensions`
+     328              : // function in torch/csrc/autograd/python_variable_indexing.cpp? It's because
+     329              : // `count_specified_dimensions` is on the hot path of Python tensor multi-dim
+     330              : // indexing (i.e. it's called by `applySlicing` which is called by
+     331              : // `THPVariable_getitem` / `THPVariable_setitem` when handling indexing of more
+     332              : // than one dimension). If we were to merge the Python/C++
+     333              : // `count_specified_dimensions` function, on the Python side we would have to
+     334              : // construct a `std::vector` container to be consumed by the C++
+     335              : // `count_specified_dimensions` function, which adds 100s of nanoseconds
+     336              : // overhead and is undesirable.
+     337              : static inline int64_t count_specified_dimensions(
+     338              :     const ArrayRef<TensorIndex>& indices) {
+     339              :   // Count the number of indexed dimensions (everything but ellipsis and None)
+     340              :   int64_t count = 0;
+     341              :   for (auto& obj : indices) {
+     342              :     if (obj.is_tensor()) {
+     343              :       auto& tensor = obj.tensor();
+     344              :       if (tensor.scalar_type() == kByte || tensor.scalar_type() == kBool) {
+     345              :         count += tensor.dim();
+     346              :       } else {
+     347              :         count++;
+     348              :       }
+     349              :     } else if (!obj.is_none() && !obj.is_ellipsis() && !obj.is_boolean()) {
+     350              :       count++;
+     351              :     }
+     352              :   }
+     353              :   return count;
+     354              : }
+     355              : } // namespace impl
+     356              : 
+     357              : // NOTE: Many functions below are only for consumption from Python indexing
+     358              : // implementation, they include:
+     359              : //
+     360              : // - `Tensor scalarToTensor(...)`
+     361              : // - `IntArrayRef slicePrefix1sSize(...)`
+     362              : // - `void copy_to(...)`
+     363              : // - `Tensor handleDimInMultiDimIndexing(...)`
+     364              : // - `Tensor dispatch_index(...)`
+     365              : // - `Tensor dispatch_index_put_(...)`
+     366              : // - `Tensor get_item(...)`
+     367              : // - `void set_item(...)`
+     368              : //
+     369              : // The rest of the functions are in `at::indexing::impl` namespace, signifying
+     370              : // that they shouldn't be used from Python indexing implementation.
+     371              : static inline Tensor scalarToTensor(
+     372              :     const Scalar& v,
+     373              :     const TensorOptions& options,
+     374              :     const at::Device& self_device) {
+     375              :   if (self_device == at::kCPU) {
+     376              :     return at::detail::scalar_tensor_static(
+     377              :         v, options.dtype_opt()->toScalarType(), self_device);
+     378              :   } else {
+     379              :     return impl::scalarToTensorNonNativeDeviceType(v, options);
+     380              :   }
+     381              : }
+     382              : 
+     383              : // To match numpy semantics:
+     384              : // As a special case for backwards compatibility,
+     385              : // strip away unit dimensions from the left of 'src'
+     386              : static inline SymIntArrayRef slicePrefix1sSize(const SymIntArrayRef& sizes) {
+     387              :   size_t first_non1_src = sizes.size();
+     388              :   for (const auto i : c10::irange(sizes.size())) {
+     389              :     // Unbacked SymInt has different behavior, but this is sound because
+     390              :     // failing to slice will only ever cause an error, not divergent
+     391              :     // behavior
+     392              :     if (!sizes[i].has_hint() || sizes[i] != 1) {
+     393              :       first_non1_src = i;
+     394              :       break;
+     395              :     }
+     396              :   }
+     397              : 
+     398              :   return sizes.slice(first_non1_src);
+     399              : }
+     400              : 
+     401              : static inline void copy_to(const Tensor& dst, const Tensor& src) {
+     402              :   if (dst.sym_sizes().equals(src.sym_sizes())) {
+     403              :     // A shortcut to avoid generating hard-coded constant sizes during tracing.
+     404              :     // This is not a perfect solution: when src & dst have different shapes,
+     405              :     // constants will still appear. Users can workaround that case by
+     406              :     // dst[index..] = src.reshape(..)
+     407              :     dst.copy_(src);
+     408              :     return;
+     409              :   } else if (src.dim() == 0 && src.device().type() == at::kCPU) {
+     410              :     dst.fill_(src);
+     411              :     return;
+     412              :   }
+     413              :   auto src_view = src.view_symint(slicePrefix1sSize(src.sym_sizes()));
+     414              :   c10::MaybeOwned<Tensor> b_src = expand_inplace(dst, src_view, "setitem");
+     415              :   dst.copy_(*b_src);
+     416              : }
+     417              : 
+     418              : // See NOTE [ Setting `disable_slice_optimization` when calling C++ tensor
+     419              : // indexing functions from Python ]
+     420              : static inline Tensor handleDimInMultiDimIndexing(
+     421              :     const Tensor& prev_dim_result,
+     422              :     const Tensor& original_tensor,
+     423              :     const TensorIndex& index,
+     424              :     int64_t* dim_ptr,
+     425              :     int64_t* specified_dims_ptr,
+     426              :     int64_t real_dim,
+     427              :     std::vector<Tensor>& outIndices,
+     428              :     bool disable_slice_optimization,
+     429              :     const at::Device& original_tensor_device,
+     430              :     const c10::optional<SymIntArrayRef>& prev_dim_result_sizes) {
+     431              :   if (index.is_integer()) {
+     432              :     return impl::applySelect(
+     433              :         prev_dim_result,
+     434              :         *dim_ptr,
+     435              :         index.integer(),
+     436              :         real_dim,
+     437              :         original_tensor_device,
+     438              :         prev_dim_result_sizes);
+     439              :   } else if (index.is_slice()) {
+     440              :     Tensor result = impl::applySlice(
+     441              :         prev_dim_result,
+     442              :         *dim_ptr,
+     443              :         index.slice().start(),
+     444              :         index.slice().stop(),
+     445              :         index.slice().step(),
+     446              :         /*disable_slice_optimization=*/disable_slice_optimization,
+     447              :         original_tensor_device,
+     448              :         prev_dim_result_sizes);
+     449              :     (*dim_ptr)++;
+     450              :     return result;
+     451              :   } else if (index.is_ellipsis()) {
+     452              :     (*dim_ptr) += original_tensor.dim() - (*specified_dims_ptr);
+     453              :     return prev_dim_result;
+     454              :   } else if (index.is_none()) {
+     455              :     Tensor result = prev_dim_result.unsqueeze(*dim_ptr);
+     456              :     (*dim_ptr)++;
+     457              :     return result;
+     458              :   } else if (index.is_boolean()) {
+     459              :     Tensor result = prev_dim_result.unsqueeze(*dim_ptr);
+     460              :     impl::recordTensorIndex(
+     461              :         impl::boolToIndexingTensor(
+     462              :             result, index.boolean(), original_tensor_device),
+     463              :         outIndices,
+     464              :         dim_ptr);
+     465              :     return result;
+     466              :   } else if (index.is_tensor()) {
+     467              :     Tensor result = prev_dim_result;
+     468              :     const Tensor& tensor = index.tensor();
+     469              :     auto scalar_type = tensor.scalar_type();
+     470              :     if (tensor.dim() == 0 &&
+     471              :         at::isIntegralType(scalar_type, /*includeBool=*/true)) {
+     472              :       if (scalar_type != at::kByte && scalar_type != at::kBool) {
+     473              :         result = impl::applySelect(
+     474              :             result,
+     475              :             *dim_ptr,
+     476              :             tensor.item<int64_t>(),
+     477              :             real_dim,
+     478              :             original_tensor_device,
+     479              :             prev_dim_result_sizes);
+     480              :       } else {
+     481              :         result = result.unsqueeze(*dim_ptr);
+     482              :         if (scalar_type == at::kBool) {
+     483              :           impl::recordTensorIndex(
+     484              :               impl::boolToIndexingTensor(
+     485              :                   result, tensor.item<bool>() != 0, original_tensor_device),
+     486              :               outIndices,
+     487              :               dim_ptr);
+     488              :         } else {
+     489              :           impl::recordTensorIndex(
+     490              :               impl::boolToIndexingTensor(
+     491              :                   result, tensor.item<uint8_t>() != 0, original_tensor_device),
+     492              :               outIndices,
+     493              :               dim_ptr);
+     494              :         }
+     495              :       }
+     496              :     } else {
+     497              :       impl::recordTensorIndex(tensor, outIndices, dim_ptr);
+     498              :     }
+     499              :     return result;
+     500              :   } else {
+     501              :     TORCH_INTERNAL_ASSERT(false, "Invalid TensorIndex type");
+     502              :   }
+     503              : }
+     504              : 
+     505              : namespace impl {
+     506              : // This mirrors `applySlicing` in
+     507              : // torch/csrc/autograd/python_variable_indexing.cpp
+     508              : static inline Tensor applySlicing(
+     509              :     const Tensor& self,
+     510              :     const ArrayRef<TensorIndex>& indices,
+     511              :     std::vector<Tensor>& outIndices,
+     512              :     bool disable_slice_optimization,
+     513              :     const at::Device& self_device,
+     514              :     const c10::optional<SymIntArrayRef>& self_sizes) {
+     515              :   int64_t dim = 0;
+     516              :   int64_t specified_dims = impl::count_specified_dimensions(indices);
+     517              : 
+     518              :   // See NOTE [nested tensor size for indexing]
+     519              :   if (self_sizes.has_value()) {
+     520              :     TORCH_CHECK_INDEX(
+     521              :         specified_dims <= (int64_t)self_sizes->size(),
+     522              :         "too many indices for tensor of dimension ",
+     523              :         (int)self_sizes->size());
+     524              :   }
+     525              : 
+     526              :   Tensor result = self;
+     527              :   for (const auto i : c10::irange(indices.size())) {
+     528              :     auto& obj = indices[i];
+     529              :     // See NOTE [nested tensor size for indexing]
+     530              :     c10::optional<SymIntArrayRef> result_sizes = result.is_nested()
+     531              :         ? c10::optional<SymIntArrayRef>(c10::nullopt)
+     532              :         : c10::optional<SymIntArrayRef>(result.sym_sizes());
+     533              :     result = handleDimInMultiDimIndexing(
+     534              :         /*prev_dim_result=*/result,
+     535              :         /*original_tensor=*/self,
+     536              :         /*index=*/obj,
+     537              :         /*dim=*/&dim,
+     538              :         /*specified_dims=*/&specified_dims,
+     539              :         /*real_dim=*/i,
+     540              :         /*outIndices=*/outIndices,
+     541              :         /*disable_slice_optimization=*/disable_slice_optimization,
+     542              :         /*original_tensor_device=*/self_device,
+     543              :         /*prev_dim_result_sizes=*/result_sizes);
+     544              :   }
+     545              :   return result;
+     546              : }
+     547              : } // namespace impl
+     548              : 
+     549              : static inline Tensor dispatch_index(
+     550              :     const Tensor& self,
+     551              :     std::vector<Tensor>&& indices) {
+     552              :   return self.index(impl::typeConvertIndices(self, std::move(indices)));
+     553              : }
+     554              : 
+     555              : static inline Tensor dispatch_index_put_(
+     556              :     Tensor& self,
+     557              :     std::vector<Tensor>&& indices,
+     558              :     const Tensor& value) {
+     559              :   return self.index_put_(
+     560              :       impl::typeConvertIndices(self, std::move(indices)), value);
+     561              : }
+     562              : 
+     563              : // NOTE [ Setting `disable_slice_optimization` when calling C++ tensor indexing
+     564              : // functions from Python ]
+     565              : //
+     566              : // Question: When should we set `disable_slice_optimization` to `true` when
+     567              : // calling C++ tensor indexing functions from Python indexing code?
+     568              : //
+     569              : // Answer: What "slice optimization" means: when we have a slicing expression
+     570              : // like `x[0:5, 0]`, where the sliced tensor was of size 5 in dimension 0, we
+     571              : // would skip dispatching the actual slice call as an optimization. However,
+     572              : // here are the cases where we DON'T want this optimization:
+     573              : //
+     574              : // 1. When we are doing 1-D slicing (e.g. `tensor[:]`).
+     575              : //    Reason: we always return a shallow copy for expressions such as
+     576              : //    `tensor[:]` / `tensor[...]` / `tensor[:, :]`. (Note that for `tensor[:,
+     577              : //    :]`, we return an alias of `tensor` by doing the following:
+     578              : //    ```
+     579              : //    Tensor sliced = impl::applySlicing(self, indices, tensorIndices,
+     580              : //    disable_slice_optimization, self_device, self_sizes); if
+     581              : //    (tensorIndices.empty()) {
+     582              : //      if (sliced.is_same(self)) {
+     583              : //        // ensure we return a shallow copy for things like x[...]
+     584              : //        sliced = at::alias(sliced);
+     585              : //      }
+     586              : //      return sliced;
+     587              : //    }
+     588              : //    ```)
+     589              : // 2. When we are doing JIT tracing.
+     590              : //    Reason: JIT tracing needs the `self.slice(...)` call to properly trace the
+     591              : //    slice operation.
+     592              : 
+     593              : // This mirrors `THPVariable_getitem` in
+     594              : // torch/csrc/autograd/python_variable_indexing.cpp See NOTE [ Setting
+     595              : // `disable_slice_optimization` when calling C++ tensor indexing functions from
+     596              : // Python ]
+     597              : static inline Tensor get_item(
+     598              :     const Tensor& self,
+     599              :     const ArrayRef<TensorIndex>& indices,
+     600              :     bool disable_slice_optimization = false) {
+     601              :   at::Device self_device = self.device();
+     602              :   // NOTE [nested tensor size for indexing]
+     603              :   // nested tensor does not have a size (yet) so for now we represent its size
+     604              :   // as null may need to be changed after we reach a better solution for nested
+     605              :   // tensor size
+     606              :   c10::optional<SymIntArrayRef> self_sizes = self.is_nested()
+     607              :       ? c10::optional<SymIntArrayRef>(c10::nullopt)
+     608              :       : c10::optional<SymIntArrayRef>(self.sym_sizes());
+     609              : 
+     610              :   // handle simple types: integers, slices, none, ellipsis, bool
+     611              :   if (indices.size() == 1) {
+     612              :     const TensorIndex& index = indices[0];
+     613              :     if (index.is_integer()) {
+     614              :       return impl::applySelect(
+     615              :           self, 0, index.integer(), 0, self_device, self_sizes);
+     616              :     } else if (index.is_slice()) {
+     617              :       return impl::applySlice(
+     618              :           self,
+     619              :           0,
+     620              :           index.slice().start(),
+     621              :           index.slice().stop(),
+     622              :           index.slice().step(),
+     623              :           /*disable_slice_optimization=*/true,
+     624              :           self_device,
+     625              :           self_sizes);
+     626              :     } else if (index.is_none()) {
+     627              :       return self.unsqueeze(0);
+     628              :     } else if (index.is_ellipsis()) {
+     629              :       return at::alias(self);
+     630              :     } else if (index.is_boolean()) {
+     631              :       Tensor result = self.unsqueeze(0);
+     632              :       return dispatch_index(
+     633              :           result,
+     634              :           std::vector<Tensor>{impl::boolToIndexingTensor(
+     635              :               result, index.boolean(), self_device)});
+     636              :     }
+     637              :   }
+     638              : 
+     639              :   std::vector<Tensor> tensorIndices;
+     640              :   Tensor sliced = impl::applySlicing(
+     641              :       self,
+     642              :       indices,
+     643              :       tensorIndices,
+     644              :       disable_slice_optimization,
+     645              :       self_device,
+     646              :       self_sizes);
+     647              :   if (tensorIndices.empty()) {
+     648              :     if (sliced.is_same(self)) {
+     649              :       // ensure we return a shallow copy for things like x[...]
+     650              :       sliced = at::alias(sliced);
+     651              :     }
+     652              :     return sliced;
+     653              :   }
+     654              : 
+     655              :   // indexing by tensors ("advanced" indexing)
+     656              :   return dispatch_index(sliced, std::move(tensorIndices));
+     657              : }
+     658              : 
+     659              : // This mirrors `THPVariable_setitem` in
+     660              : // torch/csrc/autograd/python_variable_indexing.cpp for "the assigned value is a
+     661              : // Tensor" case See NOTE [ Setting `disable_slice_optimization` when calling C++
+     662              : // tensor indexing functions from Python ]
+     663              : static inline void set_item(
+     664              :     const Tensor& self,
+     665              :     const ArrayRef<TensorIndex>& indices,
+     666              :     const Tensor& value,
+     667              :     bool disable_slice_optimization = false) {
+     668              :   at::Device self_device = self.device();
+     669              :   SymIntArrayRef self_sizes = self.sym_sizes();
+     670              : 
+     671              :   // handle simple types: integers, slices, ellipsis, bool
+     672              :   if (indices.size() == 1) {
+     673              :     const TensorIndex& index = indices[0];
+     674              :     if (index.is_boolean() && !index.boolean()) {
+     675              :       // do nothing for false (technically we should check the size, but we
+     676              :       // don't have real 0-sized shapes.
+     677              :       return;
+     678              :     } else if (index.is_ellipsis()) {
+     679              :       copy_to(self, value);
+     680              :       return;
+     681              :     } else if (index.is_none() || (index.is_boolean() && index.boolean())) {
+     682              :       copy_to(self.unsqueeze(0), value);
+     683              :       return;
+     684              :     } else if (index.is_integer()) {
+     685              :       copy_to(
+     686              :           impl::applySelect(
+     687              :               self, 0, index.integer(), 0, self_device, self_sizes),
+     688              :           value);
+     689              :       return;
+     690              :     } else if (index.is_slice()) {
+     691              :       copy_to(
+     692              :           impl::applySlice(
+     693              :               self,
+     694              :               0,
+     695              :               index.slice().start(),
+     696              :               index.slice().stop(),
+     697              :               index.slice().step(),
+     698              :               /*disable_slice_optimization=*/disable_slice_optimization,
+     699              :               self_device,
+     700              :               self_sizes),
+     701              :           value);
+     702              :       return;
+     703              :     }
+     704              :   }
+     705              : 
+     706              :   std::vector<Tensor> tensorIndices;
+     707              :   Tensor sliced = impl::applySlicing(
+     708              :       self,
+     709              :       indices,
+     710              :       tensorIndices,
+     711              :       disable_slice_optimization,
+     712              :       self_device,
+     713              :       self_sizes);
+     714              :   if (tensorIndices.empty()) {
+     715              :     copy_to(sliced, value);
+     716              :     return;
+     717              :   }
+     718              : 
+     719              :   SymIntArrayRef valueSizes = value.sym_sizes();
+     720              :   SymIntArrayRef slicedValueSizes = slicePrefix1sSize(valueSizes);
+     721              :   Tensor valuesSliced;
+     722              :   if (!valueSizes.equals(slicedValueSizes)) {
+     723              :     valuesSliced = value.view_symint(slicedValueSizes);
+     724              :   } else {
+     725              :     valuesSliced = value;
+     726              :   }
+     727              :   dispatch_index_put_(sliced, std::move(tensorIndices), valuesSliced);
+     728              :   return;
+     729              : }
+     730              : 
+     731              : } // namespace indexing
+     732              : } // namespace at
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/TensorOperators.h.func-c.html b/html/libtorch/include/ATen/TensorOperators.h.func-c.html new file mode 100644 index 0000000..66f08c3 --- /dev/null +++ b/html/libtorch/include/ATen/TensorOperators.h.func-c.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/TensorOperators.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen - TensorOperators.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %88
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2atdvERKNS_6TensorES2_5196418
_ZN2atneERKNS_6TensorES2_272
_ZN2ateqERKNS_6TensorES2_472
_ZN2atmlERKNS_6TensorERKN3c106ScalarE1262
_ZN2ateqERKNS_6TensorERKN3c106ScalarE9012
_ZN2atdvERKNS_6TensorES2_14194
_ZN2atdvERKNS_6TensorERKN3c106ScalarE16744
_ZN2atmlERKNS_6TensorES2_17280
_ZN2atplERKNS_6TensorERKN3c106ScalarE5137182
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/TensorOperators.h.func.html b/html/libtorch/include/ATen/TensorOperators.h.func.html new file mode 100644 index 0000000..faafc29 --- /dev/null +++ b/html/libtorch/include/ATen/TensorOperators.h.func.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/TensorOperators.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen - TensorOperators.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %88
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2atdvERKNS_6TensorES2_5196418
_ZN2atdvERKNS_6TensorERKN3c106ScalarE16744
_ZN2atdvERKNS_6TensorES2_14194
_ZN2ateqERKNS_6TensorERKN3c106ScalarE9012
_ZN2ateqERKNS_6TensorES2_472
_ZN2atmlERKNS_6TensorERKN3c106ScalarE1262
_ZN2atmlERKNS_6TensorES2_17280
_ZN2atneERKNS_6TensorES2_272
_ZN2atplERKNS_6TensorERKN3c106ScalarE5137182
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/TensorOperators.h.gcov.html b/html/libtorch/include/ATen/TensorOperators.h.gcov.html new file mode 100644 index 0000000..88012b0 --- /dev/null +++ b/html/libtorch/include/ATen/TensorOperators.h.gcov.html @@ -0,0 +1,130 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/TensorOperators.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen - TensorOperators.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %88
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <ATen/core/Tensor.h>
+       4              : #include <c10/core/Scalar.h>
+       5              : 
+       6              : #ifndef AT_PER_OPERATOR_HEADERS
+       7              : #include <ATen/Functions.h>
+       8              : #else
+       9              : #include <ATen/ops/empty_like.h>
+      10              : #endif
+      11              : 
+      12              : #include <stdexcept>
+      13              : #include <string>
+      14              : 
+      15              : namespace at {
+      16              : 
+      17              : #define AT_FORALL_BINARY_OPS(_)                                             \
+      18              :   _(+, x.add(y), y.add(x))                                                  \
+      19              :   _(*, x.mul(y), y.mul(x))                                                  \
+      20              :   _(-,                                                                      \
+      21              :     x.sub(y),                                                               \
+      22              :     ::at::empty_like(y, at::MemoryFormat::Preserve).fill_(x).sub_(y))       \
+      23              :   _(/,                                                                      \
+      24              :     x.div(y),                                                               \
+      25              :     ::at::empty_like(y, at::MemoryFormat::Preserve).fill_(x).div_(y))       \
+      26              :   _(%,                                                                      \
+      27              :     x.remainder(y),                                                         \
+      28              :     ::at::empty_like(y, at::MemoryFormat::Preserve).fill_(x).remainder_(y)) \
+      29              :   _(&, x.bitwise_and(y), y.bitwise_and(x))                                  \
+      30              :   _(|, x.bitwise_or(y), y.bitwise_or(x))                                    \
+      31              :   _(^, x.bitwise_xor(y), y.bitwise_xor(x))                                  \
+      32              :   _(<, x.lt(y), y.gt(x))                                                    \
+      33              :   _(<=, x.le(y), y.ge(x))                                                   \
+      34              :   _(>, x.gt(y), y.lt(x))                                                    \
+      35              :   _(>=, x.ge(y), y.le(x))                                                   \
+      36              :   _(==, x.eq(y), y.eq(x))                                                   \
+      37              :   _(!=, x.ne(y), y.ne(x))
+      38              : 
+      39              : #define DEFINE_OPERATOR(op, body, reverse_scalar_body)                 \
+      40              :   static inline Tensor operator op(const Tensor& x, const Tensor& y) { \
+      41              :     return body;                                                       \
+      42              :   }                                                                    \
+      43              :   static inline Tensor operator op(const Tensor& x, const Scalar& y) { \
+      44              :     return body;                                                       \
+      45              :   }                                                                    \
+      46              :   static inline Tensor operator op(const Scalar& x, const Tensor& y) { \
+      47              :     return reverse_scalar_body;                                        \
+      48              :   }
+      49              : 
+      50      5196418 : AT_FORALL_BINARY_OPS(DEFINE_OPERATOR)
+      51              : #undef DEFINE_OPERATOR
+      52              : #undef AT_FORALL_BINARY_OPS
+      53              : 
+      54              : } // namespace at
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/CheckMemoryFormat.h.func-c.html b/html/libtorch/include/ATen/core/CheckMemoryFormat.h.func-c.html new file mode 100644 index 0000000..4053b8d --- /dev/null +++ b/html/libtorch/include/ATen/core/CheckMemoryFormat.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/CheckMemoryFormat.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - CheckMemoryFormat.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:83.3 %65
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c104impl46check_tensor_options_and_extract_memory_formatERKNS_13TensorOptionsENS_8optionalINS_12MemoryFormatEEE401402
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/CheckMemoryFormat.h.func.html b/html/libtorch/include/ATen/core/CheckMemoryFormat.h.func.html new file mode 100644 index 0000000..02a7b1d --- /dev/null +++ b/html/libtorch/include/ATen/core/CheckMemoryFormat.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/CheckMemoryFormat.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - CheckMemoryFormat.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:83.3 %65
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c104impl46check_tensor_options_and_extract_memory_formatERKNS_13TensorOptionsENS_8optionalINS_12MemoryFormatEEE401402
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/CheckMemoryFormat.h.gcov.html b/html/libtorch/include/ATen/core/CheckMemoryFormat.h.gcov.html new file mode 100644 index 0000000..a63cf15 --- /dev/null +++ b/html/libtorch/include/ATen/core/CheckMemoryFormat.h.gcov.html @@ -0,0 +1,101 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/CheckMemoryFormat.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - CheckMemoryFormat.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:83.3 %65
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #include <c10/core/TensorOptions.h>
+       2              : 
+       3              : namespace c10 { namespace impl {
+       4              : 
+       5              : inline c10::optional<MemoryFormat>
+       6       401402 : check_tensor_options_and_extract_memory_format(
+       7              :     const TensorOptions& options,
+       8              :     c10::optional<MemoryFormat> memory_format) {
+       9       401402 :   TORCH_CHECK(
+      10              :       options.requires_grad_opt() == c10::nullopt ||
+      11              :       options.requires_grad_opt().value() == false,
+      12              :       "Operators taking TensorOptions cannot take a TensorOptions with "
+      13              :       "options.requires_grad set as true. This isn't implemented yet.");
+      14       401402 :   TORCH_CHECK(
+      15              :       !(options.has_memory_format() && memory_format.has_value()),
+      16              :       "Cannot set memory_format both in TensorOptions and explicit argument; please delete "
+      17              :       "the redundant setter.");
+      18       401402 :   if (memory_format.has_value()) {
+      19            0 :     return memory_format;
+      20              :   } else {
+      21       401402 :     return options.memory_format_opt();
+      22              :   }
+      23              : }
+      24              : 
+      25              : }} // namespace impl namespace c10
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/Formatting.h.func-c.html b/html/libtorch/include/ATen/core/Formatting.h.func-c.html new file mode 100644 index 0000000..da7a198 --- /dev/null +++ b/html/libtorch/include/ATen/core/Formatting.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/Formatting.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - Formatting.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2atlsERSoRKNS_6TensorE20
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/Formatting.h.func.html b/html/libtorch/include/ATen/core/Formatting.h.func.html new file mode 100644 index 0000000..afbeba4 --- /dev/null +++ b/html/libtorch/include/ATen/core/Formatting.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/Formatting.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - Formatting.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2atlsERSoRKNS_6TensorE20
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/Formatting.h.gcov.html b/html/libtorch/include/ATen/core/Formatting.h.gcov.html new file mode 100644 index 0000000..44a807b --- /dev/null +++ b/html/libtorch/include/ATen/core/Formatting.h.gcov.html @@ -0,0 +1,101 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/Formatting.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - Formatting.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <ostream>
+       4              : #include <string>
+       5              : 
+       6              : #include <c10/core/Scalar.h>
+       7              : #include <ATen/core/Tensor.h>
+       8              : 
+       9              : namespace c10 {
+      10              : TORCH_API std::ostream& operator<<(std::ostream& out, Backend b);
+      11              : TORCH_API std::ostream& operator<<(std::ostream & out, const Scalar& s);
+      12              : TORCH_API std::string toString(const Scalar& s);
+      13              : }
+      14              : namespace at {
+      15              : 
+      16              : TORCH_API std::ostream& operator<<(std::ostream& out, const DeprecatedTypeProperties& t);
+      17              : TORCH_API std::ostream& print(
+      18              :     std::ostream& stream,
+      19              :     const Tensor& tensor,
+      20              :     int64_t linesize);
+      21           20 : static inline std::ostream& operator<<(std::ostream & out, const Tensor & t) {
+      22           20 :   return print(out,t,80);
+      23              : }
+      24              : TORCH_API void print(const Tensor & t, int64_t linesize=80);
+      25              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/IListRef.h.func-c.html b/html/libtorch/include/ATen/core/IListRef.h.func-c.html new file mode 100644 index 0000000..8fd9d4e --- /dev/null +++ b/html/libtorch/include/ATen/core/IListRef.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/IListRef.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - IListRef.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %55
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c108IListRefIN2at6TensorEE7PayloadC2Ev378
_ZN3c108IListRefIN2at6TensorEE7PayloadD2Ev378
_ZN3c108IListRefIN2at6TensorEEC2ERKSt16initializer_listIS2_E378
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/IListRef.h.func.html b/html/libtorch/include/ATen/core/IListRef.h.func.html new file mode 100644 index 0000000..4540eba --- /dev/null +++ b/html/libtorch/include/ATen/core/IListRef.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/IListRef.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - IListRef.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %55
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c108IListRefIN2at6TensorEE7PayloadC2Ev378
_ZN3c108IListRefIN2at6TensorEE7PayloadD2Ev378
_ZN3c108IListRefIN2at6TensorEEC2ERKSt16initializer_listIS2_E378
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/IListRef.h.gcov.html b/html/libtorch/include/ATen/core/IListRef.h.gcov.html new file mode 100644 index 0000000..21be52a --- /dev/null +++ b/html/libtorch/include/ATen/core/IListRef.h.gcov.html @@ -0,0 +1,708 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/IListRef.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - IListRef.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %55
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <ATen/core/ivalue_to.h>
+       4              : #include <c10/util/ArrayRef.h>
+       5              : #include <c10/util/Exception.h>
+       6              : 
+       7              : #include <functional>
+       8              : #include <initializer_list>
+       9              : #include <iterator>
+      10              : #include <type_traits>
+      11              : 
+      12              : /*
+      13              :  * [Note: IListRef]
+      14              :  * Wrapper around different API containers (e.g. boxed and unboxed).
+      15              :  *
+      16              :  * What is it?
+      17              :  * ===========
+      18              :  * It is a tagged union of both boxed and unboxed API containers.
+      19              :  * Working implementations:
+      20              :  *
+      21              :  * - `IListRef<at::Tensor>`
+      22              :  * - `IListRef<at::OptionalTensorRef>`
+      23              :  *
+      24              :  * Note that `IListRef` is a view type. Meaning that it won't own the
+      25              :  * tensors it holds. It's intended to be used only as argument parameters.
+      26              :  * Specifically, where these 2 worlds overlap.
+      27              :  *
+      28              :  * What is this for?
+      29              :  * =================
+      30              :  * Historically, PyTorch has maintained 2 different APIs: the unboxed
+      31              :  * (called from C++ API and Python eager mode) and boxed APIs (called
+      32              :  * from the TorchScript JIT, mobile interpreter, and boxed fallbacks).
+      33              :  *
+      34              :  * Calling unboxed kernels from the boxed "world" and vice-versa may
+      35              :  * result in non-negligible overhead. Lists are one of those types:
+      36              :  *
+      37              :  * - Boxed world: `c10::List`
+      38              :  * - Unboxed world: `c10::ArrayRef`
+      39              :  *
+      40              :  * In this context, `c10::IListRef` solves this problem by wrapping those
+      41              :  * 2 container types, so that we don't need to convert from one to
+      42              :  * the other.
+      43              :  *
+      44              :  * (see https://github.com/pytorch/pytorch/issues/66328)
+      45              :  *
+      46              :  * What does it do?
+      47              :  * ================
+      48              :  * This container wraps around the different tagged containers
+      49              :  * (currently, only boxed and unboxed), without incurring in extra
+      50              :  * overhead for converting from one to another. It does so while
+      51              :  * exposing usual container methods, which dispatch to corresponding
+      52              :  * implementations.
+      53              :  *
+      54              :  * While it works with different container types, it introduces
+      55              :  * overhead for repeatedly calling member functions (since those will
+      56              :  * get dispatched, again). Therefore, you should only use it to iterate
+      57              :  * through the list up to one time. If you need to do more complex things,
+      58              :  * call `materialize()` first.
+      59              :  *
+      60              :  * Adding support for a new Tag
+      61              :  * ============================
+      62              :  * Suppose we want to add a new tag: `Chest`. Here are the steps
+      63              :  * we would have to go through:
+      64              :  *
+      65              :  * 1. Add a line for it in the macro `TORCH_ILISTREF_FORALL_TAGS`.
+      66              :  *
+      67              :  *   #define TORCH_ILISTREF_FORALL_TAGS(_, ...) \
+      68              :  *     ...
+      69              :  *     _(Chest, ##__VA_ARGS__)
+      70              :  *
+      71              :  * 2. Add type aliases, union members, and constructors.
+      72              :  *
+      73              :  *   template <typename T>
+      74              :  *   class IListRef {
+      75              :  *     ...
+      76              :  *     using chest_type =
+      77              :  *       typename detail::IListRefTagImpl<T, IListRefTag::Chest>::list_type;
+      78              :  *     ...
+      79              :  *     IListRef(...) : tag_(IListRefTag::Chest) {
+      80              :  *       ...
+      81              :  *     }
+      82              :  *     ...
+      83              :  *     union Payload {
+      84              :  *       ...
+      85              :  *       chest_type chest;
+      86              :  *       ...
+      87              :  *     };
+      88              :  *     ...
+      89              :  *   };
+      90              :  *
+      91              :  * 3. Add a default implementation for it (in 'IListRef_inl.h'). It's
+      92              :  *    preferable to make the default implementation work for `T = Tensor`
+      93              :  *    (both `Unboxed` and `Boxed` do it).
+      94              :  *
+      95              :  *   template <typename T, typename ListElemT>
+      96              :  *   class IListRefTagImplBase<IListRefTag::Chest, T, ListElemT> {
+      97              :  *    public:
+      98              :  *     using elem_type = ListElemT;
+      99              :  *     using list_type = ChestContainer<elem_type>;
+     100              :  *
+     101              :  *     static const list_type& unwrap(const IListRef<T>& ilist) { ... }
+     102              :  *
+     103              :  *     static typename list_type::const_iterator& unwrap(
+     104              :  *         IListRefIterator<T>& it) { ... }
+     105              :  *
+     106              :  *     static const typename list_type::const_iterator& unwrap(
+     107              :  *         const IListRefIterator<T>& it) { ... }
+     108              :  *
+     109              :  *     static IListRefConstRef<T> iterator_get(
+     110              :  *         const typename list_type::const_iterator& it) { ... }
+     111              :  *   }
+     112              :  *
+     113              :  * 4. Add an specialization for each of the already supported types.
+     114              :  *    Finally, for consistency, add them to the tracking list.
+     115              :  *    (see [Note: IListRefTagImpl Specializations])
+     116              :  *
+     117              :  *   template <>
+     118              :  *   class IListRefTagImpl<IListRefTag::Chest, at::Tensor>
+     119              :  *       : public IListRefTagImplBase<IListRefTag::Chest, at::Tensor> {};
+     120              :  *
+     121              :  * Adding support for a new Type
+     122              :  * =============================
+     123              :  * Suppose we want to add support for a new type: `Matrix`.
+     124              :  * Here are the steps we would have to go through:
+     125              :  *
+     126              :  * 1. Add an specialization for each of the existing tags.
+     127              :  *    For consistency, add them to the tracking list.
+     128              :  *    (see [Note: IListRefTagImpl Specializations])
+     129              :  *
+     130              :  *   template <>
+     131              :  *   class IListRefTagImpl<IListRefTag::Unboxed, Matrix>
+     132              :  *       : public IListRefTagImplBase<IListRefTag::Unboxed, Matrix> {};
+     133              :  *
+     134              :  *   template <>
+     135              :  *   class IListRefTagImpl<Matrix, IListRefTag::Boxed>
+     136              :  *       : public IListRefTagImplBase<IListRefTag::Boxed, Matrix> {};
+     137              :  *
+     138              :  * Common Problems
+     139              :  * ===============
+     140              :  * 1. One of `IListRef(Iterator)` methods are failing to compile.
+     141              :  *
+     142              :  *     That may be happening because the container type you added
+     143              :  *     is not compatible with the code written for that method. If
+     144              :  *     that's true, then you might have to transform that code into
+     145              :  *     a static method call (see `List::operator[]` method).
+     146              :  *
+     147              :  * 2. Can't make `IListRefIterator<T>::operator*` return a const-reference.
+     148              :  *
+     149              :  *    First, keep in mind that we assume that boxed containers will
+     150              :  *    have to deal with `IValue` (e.g. `c10::List`). In this context,
+     151              :  *    what may be happening is that `IValue` doesn't store internally
+     152              :  *    your type `T`. Instead, it constructs a type new `T` everytime
+     153              :  *    you try to get `T` for it (see `IListRef<at::OptinalTensorRef>`).
+     154              :  */
+     155              : 
+     156              : namespace c10 {
+     157              : template <typename T>
+     158              : class IListRef;
+     159              : 
+     160              : /*
+     161              :  * Applies arbitrary macros to each `IListRefTag`.
+     162              :  */
+     163              : #define TORCH_ILISTREF_FORALL_TAGS(_, ...) \
+     164              :   _(Unboxed, ##__VA_ARGS__)                \
+     165              :   _(Boxed, ##__VA_ARGS__)                  \
+     166              :   _(Materialized, ##__VA_ARGS__)
+     167              : 
+     168              : /*
+     169              :  * Defines a "switch-case" for `TAG`. Inside, it executes `BODY`,
+     170              :  * while bringing to scope:
+     171              :  *
+     172              :  * - `ImplT`: the implementation class for `TAG`
+     173              :  * - `this_`: the result of unwrapping `this`
+     174              :  */
+     175              : #define TORCH_ILISTREF_UNWRAP_CASE(TAG, BODY)                        \
+     176              :   case c10::IListRefTag::TAG: {                                      \
+     177              :     using ImplT = c10::detail::IListRefTagImpl<IListRefTag::TAG, T>; \
+     178              :     auto& this_ = ImplT::unwrap(*this);                              \
+     179              :     BODY                                                             \
+     180              :   } break;
+     181              : 
+     182              : /*
+     183              :  * Dispatches the unwrap call, depending on `TAG`, followed by
+     184              :  * the execution of `BODY`. It aborts if `TAG` is not a `IListRefTag`.
+     185              :  *
+     186              :  * This macro is useful because it allows us to handle different
+     187              :  * types (that correspond to different tags) to be implemented
+     188              :  * only once. We can do it even when the implementation of the
+     189              :  * different tags aren't syntatically the same, by dispatching
+     190              :  * it to a function (e.g. `ImplT::<dispatch-function>(this_)`).
+     191              :  */
+     192              : #define TORCH_ILISTREF_UNWRAP(TAG, BODY)                         \
+     193              :   switch (TAG) {                                                 \
+     194              :     TORCH_ILISTREF_FORALL_TAGS(TORCH_ILISTREF_UNWRAP_CASE, BODY) \
+     195              :     break;                                                       \
+     196              :     default:                                                     \
+     197              :       TORCH_INTERNAL_ASSERT(false, "invalid IListRef tag.");     \
+     198              :   }
+     199              : 
+     200              : enum class IListRefTag {
+     201              : #define DEFINE_TAG(tag, ...) tag,
+     202              :   TORCH_ILISTREF_FORALL_TAGS(DEFINE_TAG)
+     203              : #undef DEFINE_TAG
+     204              :       None
+     205              : };
+     206              : 
+     207              : namespace detail {
+     208              : /*
+     209              :  * Type alias that specifies whether we return a reference or a copy of `T`.
+     210              :  *
+     211              :  * What is this for?
+     212              :  * =================
+     213              :  * Since values in the boxed world are represented by an `IValue`, we also
+     214              :  * depend on whether it can be converted to a const-reference (`Tensor`) or
+     215              :  * has to create a new copy of `T` (`OptionalTensorRef`).
+     216              :  */
+     217              : template <typename T>
+     218              : using IListRefConstRef = typename ivalue_to_const_ref_overload_return<T>::type;
+     219              : 
+     220              : /*
+     221              :  * Interface that implements key functions for each `IListRefTag` type.
+     222              :  *
+     223              :  * What is this for?
+     224              :  * =================
+     225              :  * Given an `IListRef(Iterator)<T>`, some methods have to be implemented
+     226              :  * differently for each `TAG`. Therefore, the methods inside this class
+     227              :  * are used as dispatch targets for the different `IListRefTag` values.
+     228              :  *
+     229              :  * You should create an specialization of this class for each possible
+     230              :  * combination of `IListRefTag` type (except `None`) and element types
+     231              :  * (e.g. `Tensor`).
+     232              :  *
+     233              :  * What does it do?
+     234              :  * ================
+     235              :  * 1. defines static methods to be used as dispatch targets by both
+     236              :  *    `IListRef<T>` and `IListRefIterator<T>` (see the implementation of
+     237              :  *    `IListRefTagImplBase`).
+     238              :  *
+     239              :  * 2. defines the `elem_type` and `list_type` aliases that will be
+     240              :  *    used in the definition of `IListRef<T>`. In general, we should do
+     241              :  *    so by inheriting from `IListRefTagImplBase<TAG, T, ListElemT>`.
+     242              :  *
+     243              :  * [Note: IListRefTagImpl Specialization]
+     244              :  * ======================================
+     245              :  * For `IListRef(Iterator)<at::Tensor>`:
+     246              :  * - <IListRefTag::Unboxed, at::Tensor>
+     247              :  * - <IListRefTag::Boxed, at::Tensor>
+     248              :  * - <IListRefTag::Materialized, at::Tensor>
+     249              :  *
+     250              :  * For `IListRef(Iterator)<at::OptionalTensorRef>`:
+     251              :  * - <IListRefTag::Unboxed, at::OptionalTensorRef>
+     252              :  * - <IListRefTag::Boxed, at::OptionalTensorRef>
+     253              :  * - <IListRefTag::Materialized, at::OptionalTensorRef>
+     254              :  */
+     255              : template <IListRefTag TAG, typename T>
+     256              : class IListRefTagImpl {};
+     257              : 
+     258              : /*
+     259              :  * Base implementation of `IListRefTagImpl<TAG, T>` methods.
+     260              :  *
+     261              :  * What is this for?
+     262              :  * =================
+     263              :  * This should make adding specializations for new types easier. For
+     264              :  * example, one should be able to add a new type just by making its
+     265              :  * `IListRefTagImpl` specialization inherit from `IListRefTagImplBase`.
+     266              :  *
+     267              :  * You should create a partial specialization for this class only if
+     268              :  * you introduce a new `IListRefTag`. The idea being that there is one
+     269              :  * default implementation for each possible value of `IListRefTag`.
+     270              :  *
+     271              :  * What does it do?
+     272              :  * ================
+     273              :  * 1. defines `elem_type` as an alias to `ListElemT`.
+     274              :  *
+     275              :  * 1. defines `list_type` as an alias to the default container type
+     276              :  *    that will hold a collection of `elem_type`. The idea being that
+     277              :  *    all types tagged as `TAG` will have `list_type` as its container,
+     278              :  *    with different `elem_type`.
+     279              :  *
+     280              :  * 3. defines the default implementation for each of the methods that
+     281              :  *    are supposed to be defined on `IListRefTagImpl` specializations.
+     282              :  *
+     283              :  * 4. inheriting from `IListRefTagImplBase<TAG, T, ListElemT>` also means
+     284              :  *    that the payload of the type `IListRef<T>` will be of type `list_type`
+     285              :  *    when it is tagged as `TAG`.
+     286              :  */
+     287              : template <IListRefTag TAG, typename T, typename ListElemT = T>
+     288              : class IListRefTagImplBase {};
+     289              : 
+     290              : /*
+     291              :  * Materialized container for `IListRef<T>`.
+     292              :  *
+     293              :  * What is this for?
+     294              :  * =================
+     295              :  * Container that groups `T` references together. This exchanges the
+     296              :  * overhead of every method call from `IListRef<T>` for a dynamic allocation.
+     297              :  *
+     298              :  * You should use this container instead of `IListRef<T>` if:
+     299              :  *
+     300              :  *   - You are going to iterate the list more than once
+     301              :  *   - You need to repeatedly access arbitrary elements (using `operator[]`)
+     302              :  * What does it do?
+     303              : 
+     304              :  * ================
+     305              :  * Removes the reference (&) from the type, and wraps it into a
+     306              :  * `std::reference_wrapper`. If `IListRefConstRef<T>` is not a
+     307              :  * reference type, then it's left unchanged.
+     308              :  */
+     309              : template <typename T>
+     310              : using _MaterializedIListRefElem = typename std::conditional<
+     311              :     std::is_reference<T>::value,
+     312              :     typename std::reference_wrapper<typename std::remove_reference<T>::type>,
+     313              :     T>::type;
+     314              : 
+     315              : template <typename T>
+     316              : using MaterializedIListRefElem = _MaterializedIListRefElem<IListRefConstRef<T>>;
+     317              : 
+     318              : template <typename T>
+     319              : using MaterializedIListRef = std::vector<MaterializedIListRefElem<T>>;
+     320              : 
+     321              : } // namespace detail
+     322              : 
+     323              : /*
+     324              :  * Iterator for `IListRef<T>`.
+     325              :  *
+     326              :  * What is it?
+     327              :  * ===========
+     328              :  * Currently, a `std::bidirectional_iterator` that wraps the iterator
+     329              :  * types defined for each of the `IListRefTag`.
+     330              :  *
+     331              :  * One should be able to use it, as if it were the unwrapped
+     332              :  * iterators themselves.
+     333              : 
+     334              :  * What does it do?
+     335              :  * ================
+     336              :  * Similarly to `IListRef<T>`, this is a wrapper class. Specifically, it
+     337              :  * wraps each container's `const_iterator` type alias. So, for example,
+     338              :  * given that the container for `IListRefTag::Boxed` is `c10::List`, this
+     339              :  * iterator will wrap a `c10::List::const_iterator`.
+     340              :  *
+     341              :  * [Note: MSVC Iterator Debug]
+     342              :  * ===========================
+     343              :  * MSVC `vector<T>::iterator` implementation (used in the boxed variant)
+     344              :  * makes it so this union's destructor, copy-constructor (assignment), and
+     345              :  * move-constructor (assignment) are implicitly deleted.
+     346              :  *
+     347              :  * Therefore, we need to explicitly define them as needed. Follows a list
+     348              :  * of places where these are needed and their reason:
+     349              :  *
+     350              :  *   - `Payload` destructor:
+     351              :  *     it is deleted only if the macro `_ITERATOR_DEBUG_LEVEL` is set to 2.
+     352              :  *
+     353              :  *   - `IListRefIterator` destructor:
+     354              :  *     same as above. However, we need to explicitly call the variant
+     355              :  *     destructor explicitly.
+     356              :  *
+     357              :  *   - `IListRefIterator` copy-constructor:
+     358              :  *     it is deleted only if the macro `_ITERATOR_DEBUG_LEVEL` is different
+     359              :  *     than 0.
+     360              :  */
+     361              : template <typename T>
+     362              : class IListRefIterator {
+     363              :  private:
+     364              : #define DEFINE_FRIEND_CLASS(TAG, ...)                        \
+     365              :   friend class detail::IListRefTagImpl<IListRefTag::TAG, T>; \
+     366              :   friend class detail::IListRefTagImplBase<                  \
+     367              :       IListRefTag::TAG,                                      \
+     368              :       T,                                                     \
+     369              :       typename detail::IListRefTagImpl<IListRefTag::TAG, T>::elem_type>;
+     370              :   TORCH_ILISTREF_FORALL_TAGS(DEFINE_FRIEND_CLASS)
+     371              : #undef DEFINE_FRIEND_CLASS
+     372              : 
+     373              :  public:
+     374              :   // C++17 friendly std::iterator implementation
+     375              :   using iterator_category = std::bidirectional_iterator_tag;
+     376              :   using value_type = T;
+     377              :   using difference_type = std::ptrdiff_t;
+     378              :   using pointer = T*;
+     379              :   using reference = T&;
+     380              : 
+     381              :   using unboxed_iterator_type = typename detail::
+     382              :       IListRefTagImpl<IListRefTag::Unboxed, T>::list_type::const_iterator;
+     383              :   using boxed_iterator_type = typename detail::
+     384              :       IListRefTagImpl<IListRefTag::Boxed, T>::list_type::const_iterator;
+     385              :   using materialized_iterator_type =
+     386              :       typename detail::MaterializedIListRef<T>::const_iterator;
+     387              : 
+     388              :   IListRefIterator() : tag_(IListRefTag::None) {}
+     389              : 
+     390              : #if defined(_MSC_VER) && _ITERATOR_DEBUG_LEVEL != 0
+     391              :   // See [Note: MSVC Iterator Debug]
+     392              :   IListRefIterator(const IListRefIterator& iterator)
+     393              :       : tag_(iterator.tag_) {
+     394              :     switch (tag_) {
+     395              :       case IListRefTag::Boxed:
+     396              :         payload_.boxed_iterator = iterator.payload_.boxed_iterator;
+     397              :         break;
+     398              :       case IListRefTag::Unboxed:
+     399              :         payload_.unboxed_iterator = iterator.payload_.unboxed_iterator;
+     400              :         break;
+     401              :       case IListRefTag::Materialized:
+     402              :         payload_.materialized_iterator = iterator.payload_.materialized_iterator;
+     403              :         break;
+     404              :       default:
+     405              :         TORCH_INTERNAL_ASSERT(false, "invalid IListRef tag.");
+     406              :     }
+     407              :   }
+     408              : #endif
+     409              : 
+     410              : #if defined(_MSC_VER) && _ITERATOR_DEBUG_LEVEL == 2
+     411              :   // See [Note: MSVC Iterator Debug]
+     412              :   ~IListRefIterator() noexcept(false) {
+     413              :     switch (tag_) {
+     414              :       case IListRefTag::Boxed:
+     415              :         payload_.boxed_iterator.~boxed_iterator_type();
+     416              :         break;
+     417              :       case IListRefTag::Unboxed:
+     418              :         payload_.unboxed_iterator.~unboxed_iterator_type();
+     419              :         break;
+     420              :       case IListRefTag::Materialized:
+     421              :         payload_.materialized_iterator.~materialized_iterator_type();
+     422              :         break;
+     423              :       default:
+     424              :         TORCH_INTERNAL_ASSERT(false, "invalid IListRef tag.");
+     425              :     }
+     426              :   }
+     427              : #endif
+     428              : 
+     429              :   IListRefIterator(boxed_iterator_type boxed) : tag_(IListRefTag::Boxed) {
+     430              :     payload_.boxed_iterator = boxed;
+     431              :   }
+     432              : 
+     433              :   IListRefIterator(unboxed_iterator_type unboxed) : tag_(IListRefTag::Unboxed) {
+     434              :     payload_.unboxed_iterator = unboxed;
+     435              :   }
+     436              : 
+     437              :   IListRefIterator(materialized_iterator_type materialized) : tag_(IListRefTag::Materialized) {
+     438              :     payload_.materialized_iterator = materialized;
+     439              :   }
+     440              : 
+     441              :   detail::IListRefConstRef<T> operator*() const {
+     442              :     TORCH_ILISTREF_UNWRAP(tag_, { return ImplT::iterator_get(this_); });
+     443              :   }
+     444              : 
+     445              :   IListRefIterator& operator++() {
+     446              :     TORCH_ILISTREF_UNWRAP(tag_, { ++this_; });
+     447              :     return *this;
+     448              :   }
+     449              : 
+     450              :   IListRefIterator operator++(int) {
+     451              :     auto old = *this;
+     452              :     TORCH_ILISTREF_UNWRAP(tag_, { ++this_; });
+     453              :     return old;
+     454              :   }
+     455              : 
+     456              :   IListRefIterator& operator--() {
+     457              :     TORCH_ILISTREF_UNWRAP(tag_, { --this_; });
+     458              :     return *this;
+     459              :   }
+     460              : 
+     461              :   IListRefIterator operator--(int) {
+     462              :     auto old = *this;
+     463              :     TORCH_ILISTREF_UNWRAP(tag_, { --this_; });
+     464              :     return old;
+     465              :   }
+     466              : 
+     467              :   bool operator==(const IListRefIterator& rhs) const {
+     468              :     if (tag_ != rhs.tag_) {
+     469              :       return false;
+     470              :     }
+     471              :     TORCH_ILISTREF_UNWRAP(tag_, {
+     472              :       auto& rhs_it = ImplT::unwrap(rhs);
+     473              :       return this_ == rhs_it;
+     474              :     });
+     475              :   }
+     476              : 
+     477              :   bool operator!=(const IListRefIterator& rhs) const {
+     478              :     return !(*this == rhs);
+     479              :   }
+     480              : 
+     481              :  private:
+     482              :   union Payload {
+     483              :     boxed_iterator_type boxed_iterator;
+     484              :     unboxed_iterator_type unboxed_iterator;
+     485              :     materialized_iterator_type materialized_iterator;
+     486              :     void* _init_ptr;
+     487              :     Payload() : _init_ptr(nullptr) {}
+     488              : #if defined(_MSC_VER)
+     489              :     // See [Note: MSVC Iterator Debug]
+     490              :     ~Payload() {}
+     491              : #endif
+     492              :   };
+     493              : 
+     494              :   Payload payload_;
+     495              :   IListRefTag tag_;
+     496              : };
+     497              : 
+     498              : /*
+     499              :  * See [Note: IListRef]
+     500              :  */
+     501              : template <typename T>
+     502              : class IListRef {
+     503              :  private:
+     504              : #define DEFINE_FRIEND_CLASS(TAG, ...)                        \
+     505              :   friend class detail::IListRefTagImpl<IListRefTag::TAG, T>; \
+     506              :   friend class detail::IListRefTagImplBase<                  \
+     507              :       IListRefTag::TAG,                                      \
+     508              :       T,                                                     \
+     509              :       typename detail::IListRefTagImpl<IListRefTag::TAG, T>::elem_type>;
+     510              :   TORCH_ILISTREF_FORALL_TAGS(DEFINE_FRIEND_CLASS)
+     511              : #undef DEFINE_FRIEND_CLASS
+     512              : 
+     513              :  public:
+     514              :   using unboxed_type =
+     515              :       typename detail::IListRefTagImpl<IListRefTag::Unboxed, T>::list_type;
+     516              :   using boxed_type =
+     517              :       typename detail::IListRefTagImpl<IListRefTag::Boxed, T>::list_type;
+     518              :   using materialized_type =
+     519              :       typename detail::MaterializedIListRef<T>;
+     520              : 
+     521              :   using iterator = IListRefIterator<T>;
+     522              :   using const_iterator = IListRefIterator<T>;
+     523              :   using reverse_iterator = std::reverse_iterator<iterator>;
+     524              :   using value_type = typename iterator::value_type;
+     525              : 
+     526              :   IListRef() : tag_(IListRefTag::None) {}
+     527              : 
+     528              :   IListRef(const boxed_type& boxed) : tag_(IListRefTag::Boxed) {
+     529              :     payload_.boxed = &boxed;
+     530              :   }
+     531              : 
+     532              :   IListRef(const unboxed_type& unboxed) : tag_(IListRefTag::Unboxed) {
+     533              :     payload_.unboxed = unboxed;
+     534              :   }
+     535              : 
+     536          378 :   IListRef(const std::initializer_list<T>& list) : tag_(IListRefTag::Unboxed) {
+     537          378 :     payload_.unboxed = at::ArrayRef<T>(list);
+     538          378 :   }
+     539              : 
+     540              :   template <
+     541              :       typename... UnboxedConstructorArgs,
+     542              :       typename = std::enable_if_t<
+     543              :           std::is_constructible<unboxed_type, UnboxedConstructorArgs...>::value>>
+     544              :   IListRef(UnboxedConstructorArgs&&... args) : tag_(IListRefTag::Unboxed) {
+     545              :     payload_.unboxed = unboxed_type(std::forward<UnboxedConstructorArgs>(args)...);
+     546              :   }
+     547              : 
+     548              :   IListRef(const materialized_type& materialized) : tag_(IListRefTag::Materialized) {
+     549              :     payload_.materialized = &materialized;
+     550              :   }
+     551              : 
+     552              :   size_t size() const {
+     553              :     TORCH_ILISTREF_UNWRAP(tag_, { return this_.size(); });
+     554              :   }
+     555              : 
+     556              :   bool empty() const {
+     557              :     return size() == 0;
+     558              :   }
+     559              : 
+     560              :   iterator begin() const {
+     561              :     TORCH_ILISTREF_UNWRAP(tag_, { return this_.begin(); });
+     562              :   }
+     563              : 
+     564              :   iterator end() const {
+     565              :     TORCH_ILISTREF_UNWRAP(tag_, { return this_.end(); });
+     566              :   }
+     567              : 
+     568              :   detail::IListRefConstRef<T> front() const {
+     569              :     TORCH_ILISTREF_UNWRAP(tag_, { return ImplT::front(this_); });
+     570              :   }
+     571              : 
+     572              :   /*
+     573              :    * Materializes the `IListRef` into a `std::vector`.
+     574              :    *
+     575              :    * This should be used when one wishes to either:
+     576              :    *
+     577              :    *   - iterate over the list more than once: each `IListRefIterator`
+     578              :    *     member function call has to go through a switch, introducing
+     579              :    *     non-negligible overhead
+     580              :    *
+     581              :    *   - randomly access an arbitrary element using `operator[]`:
+     582              :    *     same reason as above
+     583              :    */
+     584              :   detail::MaterializedIListRef<T> materialize() const {
+     585              :     if (isMaterialized()) {
+     586              :       return toMaterialized();
+     587              :     }
+     588              : 
+     589              :     detail::MaterializedIListRef<T> materialized;
+     590              :     materialized.reserve(size());
+     591              :     for (const auto& t : *this) {
+     592              :       materialized.emplace_back(t);
+     593              :     }
+     594              :     return materialized;
+     595              :   }
+     596              : 
+     597              : #define DEFINE_CHECK(TAG, ...)    \
+     598              :   bool is##TAG() const {          \
+     599              :     return tag_ == IListRefTag::TAG; \
+     600              :   }
+     601              :   TORCH_ILISTREF_FORALL_TAGS(DEFINE_CHECK);
+     602              : #undef DEFINE_CHECK
+     603              : 
+     604              :   bool isNone() const {
+     605              :     return tag_ == IListRefTag::None;
+     606              :   }
+     607              : 
+     608              : #define DEFINE_CASTING(TAG, ...)                                          \
+     609              :   const typename detail::IListRefTagImpl<IListRefTag::TAG, T>::list_type& \
+     610              :       to##TAG() const {                                                   \
+     611              :     TORCH_INTERNAL_ASSERT(is##TAG());                                     \
+     612              :     return detail::IListRefTagImpl<IListRefTag::TAG, T>::unwrap(*this);   \
+     613              :   }
+     614              :   TORCH_ILISTREF_FORALL_TAGS(DEFINE_CASTING);
+     615              : #undef DEFINE_CASTING
+     616              : 
+     617              :  private:
+     618              :   union Payload {
+     619              :     const boxed_type* boxed;
+     620              :     unboxed_type unboxed;
+     621              :     const materialized_type* materialized;
+     622          378 :     Payload() : boxed(nullptr) {}
+     623          378 :     ~Payload() {}
+     624              :   };
+     625              : 
+     626              :   Payload payload_;
+     627              :   IListRefTag tag_;
+     628              : };
+     629              : 
+     630              : } // namespace c10
+     631              : 
+     632              : #include <ATen/core/IListRef_inl.h>
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/LegacyTypeDispatch.h.func-c.html b/html/libtorch/include/ATen/core/LegacyTypeDispatch.h.func-c.html new file mode 100644 index 0000000..2721baf --- /dev/null +++ b/html/libtorch/include/ATen/core/LegacyTypeDispatch.h.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/LegacyTypeDispatch.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - LegacyTypeDispatch.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %66
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at32AutoDispatchBelowADInplaceOrViewC2Ev17526
_ZN2at25AutoDispatchBelowAutogradC2Ev401318
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/LegacyTypeDispatch.h.func.html b/html/libtorch/include/ATen/core/LegacyTypeDispatch.h.func.html new file mode 100644 index 0000000..981223c --- /dev/null +++ b/html/libtorch/include/ATen/core/LegacyTypeDispatch.h.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/LegacyTypeDispatch.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - LegacyTypeDispatch.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %66
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at25AutoDispatchBelowAutogradC2Ev401318
_ZN2at32AutoDispatchBelowADInplaceOrViewC2Ev17526
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/LegacyTypeDispatch.h.gcov.html b/html/libtorch/include/ATen/core/LegacyTypeDispatch.h.gcov.html new file mode 100644 index 0000000..13a3da8 --- /dev/null +++ b/html/libtorch/include/ATen/core/LegacyTypeDispatch.h.gcov.html @@ -0,0 +1,187 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/LegacyTypeDispatch.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - LegacyTypeDispatch.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %66
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : // The legacy mechanism for dispatching operators in ATen is a Type
+       4              : // object, which is essentially a giant virtual dispatch table
+       5              : // for every operation we support dynamically dispatching over.
+       6              : //
+       7              : // This has been deprecated in favor of ATenDispatch, and in the future,
+       8              : // c10 dispatcher.
+       9              : // TODO: Clean up what remains here
+      10              : 
+      11              : #include <c10/core/impl/LocalDispatchKeySet.h>
+      12              : 
+      13              : namespace at {
+      14              : 
+      15              : // A RAII, thread local (!) guard that will disable dispatch to variable
+      16              : // handler.
+      17              : //
+      18              : // NOTE [ Treating Variables as non-Variables in type dispatch ]
+      19              : //
+      20              : // What exactly does AutoDispatchBelowAutograd do?  The short answer is, it causes
+      21              : // dispatches on ATen functions to go to the non-variable implementation,
+      22              : // bypassing autograd handling (and also profiling and tracing).
+      23              : //
+      24              : // To understand why this guard exists, it's helpful to understand the history
+      25              : // behind how Variable was implemented.  Previously, Variables were implemented
+      26              : // as a wrapper on Tensors; so the act of processing a Variable involved
+      27              : // unwrapping the underlying Tensor, and then calling the underlying base
+      28              : // operation on /that/ operation
+      29              : //
+      30              : // However, after the Variable/Tensor merge, there is no concept of unwrapping
+      31              : // a tensor anymore.  If you just call the operation on the same variable
+      32              : // again inside your VariableType handler, you'll dispatch back to
+      33              : // VariableType, which is not what we want.
+      34              : //
+      35              : // The solution to the above problem is to add `at::AutoDispatchBelowAutograd`, which
+      36              : // when enabled will cause `legacyTensorType()` and `getType()` to always return
+      37              : // non-Variable type, even if the tensor being called on is a variable.
+      38              : 
+      39              : /* Note [AutoDispatchBelowAutograd]
+      40              :  * AutoDispatchBelowAutograd is **INTERNAL ONLY** that it should be used
+      41              :  * for kernel implementations and customized C++ kernels.
+      42              :  * If you are looking for a guard to run workload in inference mode, please use
+      43              :  * c10::InferenceMode RAII which is user facing API.
+      44              :  * In the past AutoDispatchBelowAutograd(or its old version AutoNonVariableTypeMode)
+      45              :  * was used in the user code for inference-only workload, this was under risk of
+      46              :  * producing wrong results silently in some edge cases. For example:
+      47              :  * ```
+      48              :  *  torch::Tensor s = torch::ones({1, 2, 3}).set_requires_grad(true);
+      49              :  *  torch::Tensor out = s * s;
+      50              :  *  {
+      51              :  *    at::AutoDispatchBelowAutograd guard;
+      52              :  *    s.add_(1);  // Skips version bump on `s`.
+      53              :  *  }
+      54              :  *  // WRONG GRADIENT! s.grad() are now computed using `s` value after the
+      55              :  *  // inplace update.
+      56              :  *  out.backward(torch::ones_like(out));
+      57              :  * ```
+      58              :  * Users should use `c10::InferenceMode` here so that it'll properly throw an
+      59              :  * error saying "one of the variables needed for gradient computation has be modified."
+      60              :  */
+      61              : struct TORCH_API AutoDispatchBelowAutograd {
+      62       401318 :   AutoDispatchBelowAutograd() :
+      63       401318 :     autograd_guard_(c10::autograd_dispatch_keyset) {
+      64       401318 :   }
+      65              : 
+      66              :   // disable all autograd dispatch keys
+      67              :   c10::impl::ExcludeDispatchKeyGuard autograd_guard_;
+      68              : };
+      69              : 
+      70              : // TODO: AutoNonVariableTypeMode should be removed in release 1.10.
+      71              : struct TORCH_API AutoNonVariableTypeMode {
+      72              :   AutoNonVariableTypeMode(bool enabled = true) :
+      73              :     autograd_guard_(c10::autograd_dispatch_keyset) {
+      74              :     TORCH_WARN_ONCE("AutoNonVariableTypeMode is deprecated and will be removed in 1.10 release. "
+      75              :         "For kernel implementations please use AutoDispatchBelowADInplaceOrView instead, "
+      76              :         "If you are looking for a user facing API to enable running your inference-only "
+      77              :         "workload, please use c10::InferenceMode. Using AutoDispatchBelowADInplaceOrView in user code "
+      78              :         "is under risk of producing silent wrong result in some edge cases. "
+      79              :         "See Note [AutoDispatchBelowAutograd] for more details.");
+      80              :     TORCH_INTERNAL_ASSERT(enabled);
+      81              :   }
+      82              : 
+      83              :   // disable all autograd dispatch keys
+      84              :   c10::impl::ExcludeDispatchKeyGuard autograd_guard_;
+      85              : };
+      86              : 
+      87              : struct TORCH_API AutoDispatchSkipFunctionalize {
+      88              :   AutoDispatchSkipFunctionalize() :
+      89              :     dispatch_key_guard_(c10::DispatchKeySet(c10::DispatchKey::Functionalize)) {
+      90              :   }
+      91              :   c10::impl::ExcludeDispatchKeyGuard dispatch_key_guard_;
+      92              : };
+      93              : 
+      94              : /* Note [AutoDispatchBelowADInplaceOrView]
+      95              :  * AutoDispatchBelowADInplaceOrView is equivalent to AutoNonVariableTypeMode
+      96              :  * before we split inplace & view ops out of VariableType kernel.
+      97              :  * Note this guard is used in VariableType kernels for functional ops
+      98              :  * as well as ADInplaceOrView kernels for inplace/view ops to enforce the
+      99              :  * Invariant:
+     100              :  *   Once you are in VariableType/ADInplaceOrView kernel for an op,
+     101              :  *   you never go back to a kernel on same dispatch key until
+     102              :  *   you finish the current op.
+     103              :  */
+     104              : struct TORCH_API AutoDispatchBelowADInplaceOrView {
+     105        17526 :   AutoDispatchBelowADInplaceOrView() :
+     106        17526 :     dispatch_key_guard_(c10::autograd_dispatch_keyset_with_ADInplaceOrView) {
+     107        17526 :   }
+     108              :   // disable Autograd & ADInplaceOrView dispatch keys
+     109              :   c10::impl::ExcludeDispatchKeyGuard dispatch_key_guard_;
+     110              : };
+     111              : } // namespace at
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/List_inl.h.func-c.html b/html/libtorch/include/ATen/core/List_inl.h.func-c.html new file mode 100644 index 0000000..ab3ef59 --- /dev/null +++ b/html/libtorch/include/ATen/core/List_inl.h.func-c.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/List_inl.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - List_inl.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1111
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c104ListINS_8optionalIN2at6TensorEEEEC2EONS_13intrusive_ptrINS_6detail8ListImplENS7_34intrusive_target_default_null_typeIS8_EEEE36925424
_ZN3c104ListINS_8optionalIN2at6TensorEEEEC2Ev36925424
_ZN3c106detail15ListElementFromINS_8optionalIN2at6TensorEEEE4fromEOS5_105276376
_ZNK3c104ListINS_8optionalIN2at6TensorEEEE9push_backEOS4_105276376
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/List_inl.h.func.html b/html/libtorch/include/ATen/core/List_inl.h.func.html new file mode 100644 index 0000000..07f26e6 --- /dev/null +++ b/html/libtorch/include/ATen/core/List_inl.h.func.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/List_inl.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - List_inl.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1111
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c104ListINS_8optionalIN2at6TensorEEEEC2EONS_13intrusive_ptrINS_6detail8ListImplENS7_34intrusive_target_default_null_typeIS8_EEEE36925424
_ZN3c104ListINS_8optionalIN2at6TensorEEEEC2Ev36925424
_ZN3c106detail15ListElementFromINS_8optionalIN2at6TensorEEEE4fromEOS5_105276376
_ZNK3c104ListINS_8optionalIN2at6TensorEEEE9push_backEOS4_105276376
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/List_inl.h.gcov.html b/html/libtorch/include/ATen/core/List_inl.h.gcov.html new file mode 100644 index 0000000..9c22018 --- /dev/null +++ b/html/libtorch/include/ATen/core/List_inl.h.gcov.html @@ -0,0 +1,436 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/List_inl.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - List_inl.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1111
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <ATen/core/jit_type_base.h>
+       4              : #include <ATen/core/ivalue.h>
+       5              : 
+       6              : namespace c10 {
+       7              : 
+       8              : template<class T> decltype(auto) getTypePtr();
+       9              : std::string toString(const Type& type);
+      10              : 
+      11              : template<class T>
+      12     36925424 : List<T>::List(c10::intrusive_ptr<c10::detail::ListImpl>&& elements)
+      13     36925424 : : impl_(std::move(elements)) {}
+      14              : 
+      15              : template<class T>
+      16              : List<T>::List(const c10::intrusive_ptr<c10::detail::ListImpl>& elements)
+      17              : : impl_(elements) {}
+      18              : 
+      19              : template<class T>
+      20     36925424 : List<T>::List()
+      21              : : List(make_intrusive<c10::detail::ListImpl>(
+      22     36925424 :   typename c10::detail::ListImpl::list_type(),
+      23     36925424 :   getTypePtr<T>())) {
+      24              :   static_assert(!std::is_same<T, IValue>::value, "This constructor is not valid for List<IValue>. Please use c10::impl::GenericList(elementType) instead.");
+      25     36925424 : }
+      26              : 
+      27              : template<class T>
+      28              : List<T>::List(ArrayRef<T> values)
+      29              : : List(make_intrusive<c10::detail::ListImpl>(
+      30              :     typename c10::detail::ListImpl::list_type(),
+      31              :     getTypePtr<T>())) {
+      32              :   static_assert(!std::is_same<T, IValue>::value, "This constructor is not valid for List<IValue>. Please use c10::impl::GenericList(elementType).");
+      33              :   impl_->list.reserve(values.size());
+      34              :   for (const T& element : values) {
+      35              :     impl_->list.push_back(element);
+      36              :   }
+      37              : }
+      38              : 
+      39              : template<class T>
+      40              : List<T>::List(std::initializer_list<T> initial_values)
+      41              : : List(ArrayRef<T>(initial_values)) {
+      42              :   static_assert(!std::is_same<T, IValue>::value, "This constructor is not valid for List<IValue>. Please use c10::impl::GenericList(elementType).");
+      43              : }
+      44              : 
+      45              : template<class T>
+      46              : List<T>::List(TypePtr elementType)
+      47              : : List(make_intrusive<c10::detail::ListImpl>(
+      48              :     typename c10::detail::ListImpl::list_type(),
+      49              :     std::move(elementType))) {
+      50              :   static_assert(std::is_same<T, IValue>::value || std::is_same<T, c10::intrusive_ptr<ivalue::Future>>::value,
+      51              :                 "This constructor is only valid for c10::impl::GenericList or List<Future>.");
+      52              : }
+      53              : 
+      54              : namespace impl {
+      55              : template<class T>
+      56              : List<T> toTypedList(impl::GenericList list) {
+      57              :   // If there's other instances of the list (i.e. list.use_count() > 1), then we have to be invariant
+      58              :   // because upcasting would allow people to add types into the new list that would break the old list.
+      59              :   // However, if there aren't any other instances of this list (i.e. list.use_count() == 1), then we can
+      60              :   // allow upcasting. This can be a perf improvement since we can cast List<T> to List<optional<T>>
+      61              :   // without having to copy it. This is also used to provide backwards compatibility with some old models
+      62              :   // that serialized the index arguments to aten::index, aten::index_put, aten::index_put_ and aten::index_put_impl_
+      63              :   // as List<Tensor> before we changed that argument to be List<optional<Tensor>>. When deserializing, we
+      64              :   // have list.use_count() == 1 and can deserialize the List<Tensor> directly as List<optional<Tensor>>.
+      65              :   TORCH_CHECK(*list.impl_->elementType == *getTypePtr<T>()
+      66              :     || (list.use_count() == 1 && list.impl_->elementType->isSubtypeOf(*getTypePtr<T>()))
+      67              :     , "Tried to cast a List<", toString(*list.impl_->elementType), "> to a List<", toString(*getTypePtr<T>()), ">. Types mismatch.");
+      68              :   return List<T>(std::move(list.impl_));
+      69              : }
+      70              : 
+      71              : template<class T>
+      72              : impl::GenericList toList(List<T>&& list) {
+      73              :   return GenericList(std::move(list.impl_));
+      74              : }
+      75              : template<class T>
+      76              : impl::GenericList toList(const List<T>& list) {
+      77              :   return GenericList(list.impl_);
+      78              : }
+      79              : }
+      80              : 
+      81              : template<class T>
+      82              : List<T> List<T>::copy() const {
+      83              :   return List<T>(impl_->copy());
+      84              : }
+      85              : 
+      86              : namespace detail {
+      87              :   template<class T>
+      88              :   T list_element_to(T element) {
+      89              :     return element;
+      90              :   }
+      91              :   template<class T>
+      92              :   T list_element_to(const IValue& element) {
+      93              :     return element.template to<T>();
+      94              :   }
+      95              :   template<class T>
+      96              :   T list_element_to(IValue&& element) {
+      97              :     return std::move(element).template to<T>();
+      98              :   }
+      99              :   template<class T>
+     100              :   struct ListElementFrom {
+     101              :     static IValue from(const T& element) {
+     102              :       return element;
+     103              :     }
+     104    105276376 :     static IValue from(T&& element) {
+     105    105276376 :       return std::move(element);
+     106              :     }
+     107              :   };
+     108              :   template<>
+     109              :   struct ListElementFrom<IValue> {
+     110              :     static const IValue& from(const IValue& element) {
+     111              :       return element;
+     112              :     }
+     113              :     static IValue&& from(IValue&& element) {
+     114              :       return std::move(element);
+     115              :     }
+     116              :   };
+     117              : }
+     118              : 
+     119              : namespace impl {
+     120              : 
+     121              : template <class T, class Iterator>
+     122              : ListElementReference<T, Iterator>::operator std::conditional_t<
+     123              :     std::is_reference<typename c10::detail::ivalue_to_const_ref_overload_return<
+     124              :         T>::type>::value,
+     125              :     const T&,
+     126              :     T>() const {
+     127              :   return iterator_->template to<T>();
+     128              : }
+     129              : 
+     130              : template<class T, class Iterator>
+     131              : ListElementReference<T, Iterator>& ListElementReference<T, Iterator>::operator=(T&& new_value) && {
+     132              :   *iterator_ = c10::detail::ListElementFrom<T>::from(std::move(new_value));
+     133              :   return *this;
+     134              : }
+     135              : 
+     136              : template<class T, class Iterator>
+     137              : ListElementReference<T, Iterator>& ListElementReference<T, Iterator>::operator=(const T& new_value) && {
+     138              :   *iterator_ = c10::detail::ListElementFrom<T>::from(new_value);
+     139              :   return *this;
+     140              : }
+     141              : 
+     142              : template<class T, class Iterator>
+     143              : ListElementReference<T, Iterator>& ListElementReference<T, Iterator>::operator=(ListElementReference<T, Iterator>&& rhs) && noexcept {
+     144              :   *iterator_ = *rhs.iterator_;
+     145              :   return *this;
+     146              : }
+     147              : 
+     148              : template<class T, class Iterator>
+     149              : void swap(ListElementReference<T, Iterator>&& lhs, ListElementReference<T, Iterator>&& rhs) {
+     150              :   std::swap(*lhs.iterator_, *rhs.iterator_);
+     151              : }
+     152              : 
+     153              : template<class T, class Iterator>
+     154              : bool operator==(const ListElementReference<T, Iterator>& lhs, const T& rhs) {
+     155              :   const T& lhs_tmp = lhs;
+     156              :   return lhs_tmp == rhs;
+     157              : }
+     158              : 
+     159              : template<class T, class Iterator>
+     160              : inline bool operator==(const T& lhs, const ListElementReference<T, Iterator>& rhs) {
+     161              :   return rhs == lhs;
+     162              : }
+     163              : 
+     164              : template<class T>
+     165              : inline typename ListElementConstReferenceTraits<T>::const_reference
+     166              : list_element_to_const_ref(const IValue& element) {
+     167              :   return element.template to<T>();
+     168              : }
+     169              : 
+     170              : template<>
+     171              : inline typename ListElementConstReferenceTraits<c10::optional<std::string>>::const_reference
+     172              : list_element_to_const_ref<c10::optional<std::string>>(const IValue& element) {
+     173              :   return element.toOptionalStringRef();
+     174              : }
+     175              : 
+     176              : } // namespace impl
+     177              : 
+     178              : template<class T>
+     179              : void List<T>::set(size_type pos, const value_type& value) const {
+     180              :   impl_->list.at(pos) = c10::detail::ListElementFrom<T>::from(value);
+     181              : }
+     182              : 
+     183              : template<class T>
+     184              : void List<T>::set(size_type pos, value_type&& value) const {
+     185              :   impl_->list.at(pos) = c10::detail::ListElementFrom<T>::from(std::move(value));
+     186              : }
+     187              : 
+     188              : template<class T>
+     189              : typename List<T>::value_type List<T>::get(size_type pos) const {
+     190              :   return c10::detail::list_element_to<T>(impl_->list.at(pos));
+     191              : }
+     192              : 
+     193              : template<class T>
+     194              : typename List<T>::internal_const_reference_type List<T>::operator[](size_type pos) const {
+     195              :   return c10::impl::list_element_to_const_ref<T>(impl_->list.at(pos));
+     196              : }
+     197              : 
+     198              : template<class T>
+     199              : typename List<T>::internal_reference_type List<T>::operator[](size_type pos) {
+     200              :   static_cast<void>(impl_->list.at(pos)); // Throw the exception if it is out of range.
+     201              :   return {impl_->list.begin() + pos};
+     202              : }
+     203              : 
+     204              : template<class T>
+     205              : typename List<T>::value_type List<T>::extract(size_type pos) const {
+     206              :   auto& elem = impl_->list.at(pos);
+     207              :   auto result = c10::detail::list_element_to<T>(std::move(elem));
+     208              :   // Reset the list element to a T() instead of None to keep it correctly typed
+     209              :   elem = c10::detail::ListElementFrom<T>::from(T{});
+     210              :   return result;
+     211              : }
+     212              : 
+     213              : template<class T>
+     214              : typename List<T>::iterator List<T>::begin() const {
+     215              :   return iterator(impl_->list.begin());
+     216              : }
+     217              : 
+     218              : template<class T>
+     219              : typename List<T>::iterator List<T>::end() const {
+     220              :   return iterator(impl_->list.end());
+     221              : }
+     222              : 
+     223              : template<class T>
+     224              : bool List<T>::empty() const {
+     225              :   return impl_->list.empty();
+     226              : }
+     227              : 
+     228              : template<class T>
+     229              : typename List<T>::size_type List<T>::size() const {
+     230              :   return impl_->list.size();
+     231              : }
+     232              : 
+     233              : template<class T>
+     234              : void List<T>::reserve(size_type new_cap) const {
+     235              :   impl_->list.reserve(new_cap);
+     236              : }
+     237              : 
+     238              : template<class T>
+     239              : void List<T>::clear() const {
+     240              :   impl_->list.clear();
+     241              : }
+     242              : 
+     243              : template<class T>
+     244              : typename List<T>::iterator List<T>::insert(iterator pos, const T& value) const {
+     245              :   return iterator { impl_->list.insert(pos.iterator_, c10::detail::ListElementFrom<T>::from(value)) };
+     246              : }
+     247              : 
+     248              : template<class T>
+     249              : typename List<T>::iterator List<T>::insert(iterator pos, T&& value) const {
+     250              :   return iterator { impl_->list.insert(pos.iterator_, c10::detail::ListElementFrom<T>::from(std::move(value))) };
+     251              : }
+     252              : 
+     253              : template<class T>
+     254              : template<class... Args>
+     255              : typename List<T>::iterator List<T>::emplace(iterator pos, Args&&... value) const {
+     256              :   // TODO Use list_element_from?
+     257              :   return iterator { impl_->list.emplace(pos.iterator_, std::forward<Args>(value)...) };
+     258              : }
+     259              : 
+     260              : template<class T>
+     261              : void List<T>::push_back(const T& value) const {
+     262              :   impl_->list.push_back(c10::detail::ListElementFrom<T>::from(value));
+     263              : }
+     264              : 
+     265              : template<class T>
+     266    105276376 : void List<T>::push_back(T&& value) const {
+     267    105276376 :   impl_->list.push_back(c10::detail::ListElementFrom<T>::from(std::move(value)));
+     268    105276376 : }
+     269              : 
+     270              : template<class T>
+     271              : void List<T>::append(List<T> b) const {
+     272              :   if (b.use_count() == 1) {
+     273              :     impl_->list.insert(impl_->list.end(), make_move_iterator(b.impl_->list.begin()), make_move_iterator(b.impl_->list.end()));
+     274              :   } else {
+     275              :     impl_->list.insert(impl_->list.end(), b.impl_->list.begin(), b.impl_->list.end());
+     276              :   }
+     277              : }
+     278              : 
+     279              : template<class T>
+     280              : template<class... Args>
+     281              : void List<T>::emplace_back(Args&&... args) const {
+     282              :   // TODO Use list_element_from?
+     283              :   impl_->list.push_back(T(std::forward<Args>(args)...));
+     284              : }
+     285              : 
+     286              : template<class T>
+     287              : typename List<T>::iterator List<T>::erase(iterator pos) const {
+     288              :   return iterator { impl_->list.erase(pos.iterator_) };
+     289              : }
+     290              : 
+     291              : template<class T>
+     292              : typename List<T>::iterator List<T>::erase(iterator first, iterator last) const {
+     293              :   return iterator { impl_->list.erase(first.iterator_, last.iterator_) };
+     294              : }
+     295              : 
+     296              : template<class T>
+     297              : void List<T>::pop_back() const {
+     298              :   impl_->list.pop_back();
+     299              : }
+     300              : 
+     301              : template<class T>
+     302              : void List<T>::resize(size_type count) const {
+     303              :   impl_->list.resize(count, T{});
+     304              : }
+     305              : 
+     306              : template<class T>
+     307              : void List<T>::resize(size_type count, const T& value) const {
+     308              :   impl_->list.resize(count, value);
+     309              : }
+     310              : 
+     311              : template<class T>
+     312              : bool operator==(const List<T>& lhs, const List<T>& rhs) {
+     313              :   // Lists with the same identity trivially compare equal.
+     314              :   if (lhs.impl_ == rhs.impl_) {
+     315              :     return true;
+     316              :   }
+     317              : 
+     318              :   // Otherwise, just compare values directly.
+     319              :   return *lhs.impl_ == *rhs.impl_;
+     320              : }
+     321              : 
+     322              : template<class T>
+     323              : bool operator!=(const List<T>& lhs, const List<T>& rhs) {
+     324              :   return !(lhs == rhs);
+     325              : }
+     326              : 
+     327              : template<class T>
+     328              : bool List<T>::is(const List<T>& rhs) const {
+     329              :   return this->impl_ == rhs.impl_;
+     330              : }
+     331              : 
+     332              : template<class T>
+     333              : std::vector<T> List<T>::vec() const {
+     334              :   std::vector<T> result(begin(), end());
+     335              :   return result;
+     336              : }
+     337              : 
+     338              : template<class T>
+     339              : size_t List<T>::use_count() const {
+     340              :   return impl_.use_count();
+     341              : }
+     342              : 
+     343              : template <class T>
+     344              : TypePtr List<T>::elementType() const {
+     345              :   return impl_->elementType;
+     346              : }
+     347              : 
+     348              : template <class T>
+     349              : void List<T>::unsafeSetElementType(TypePtr t) {
+     350              :   impl_->elementType = std::move(t);
+     351              : }
+     352              : 
+     353              : namespace impl {
+     354              : 
+     355              : inline const IValue* ptr_to_first_element(const GenericList& list) {
+     356              :   return &list.impl_->list[0];
+     357              : }
+     358              : 
+     359              : }
+     360              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/TensorAccessor.h.func-c.html b/html/libtorch/include/ATen/core/TensorAccessor.h.func-c.html new file mode 100644 index 0000000..1eb8f3a --- /dev/null +++ b/html/libtorch/include/ATen/core/TensorAccessor.h.func-c.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/TensorAccessor.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - TensorAccessor.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1010
Test Date:2024-04-30 13:17:26Functions:100.0 %66
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at14TensorAccessorIiLm2ENS_16DefaultPtrTraitsElEC2EPiPKlS5_80
_ZN2at14TensorAccessorIiLm1ENS_16DefaultPtrTraitsElEC2EPiPKlS5_151268
_ZN2at14TensorAccessorIiLm1ENS_16DefaultPtrTraitsElEixEl151268
_ZN2at14TensorAccessorIiLm2ENS_16DefaultPtrTraitsElEixEl151268
_ZN2at18TensorAccessorBaseIiLm1ENS_16DefaultPtrTraitsElEC2EPiPKlS5_151348
_ZN2at18TensorAccessorBaseIiLm2ENS_16DefaultPtrTraitsElEC2EPiPKlS5_80
_ZN2at18TensorAccessorBaseIiLm1ENS_16DefaultPtrTraitsElEC2EPiPKlS5_151268
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/TensorAccessor.h.func.html b/html/libtorch/include/ATen/core/TensorAccessor.h.func.html new file mode 100644 index 0000000..de13435 --- /dev/null +++ b/html/libtorch/include/ATen/core/TensorAccessor.h.func.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/TensorAccessor.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - TensorAccessor.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1010
Test Date:2024-04-30 13:17:26Functions:100.0 %66
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at14TensorAccessorIiLm1ENS_16DefaultPtrTraitsElEC2EPiPKlS5_151268
_ZN2at14TensorAccessorIiLm1ENS_16DefaultPtrTraitsElEixEl151268
_ZN2at14TensorAccessorIiLm2ENS_16DefaultPtrTraitsElEC2EPiPKlS5_80
_ZN2at14TensorAccessorIiLm2ENS_16DefaultPtrTraitsElEixEl151268
_ZN2at18TensorAccessorBaseIiLm1ENS_16DefaultPtrTraitsElEC2EPiPKlS5_151348
_ZN2at18TensorAccessorBaseIiLm1ENS_16DefaultPtrTraitsElEC2EPiPKlS5_151268
_ZN2at18TensorAccessorBaseIiLm2ENS_16DefaultPtrTraitsElEC2EPiPKlS5_80
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/TensorAccessor.h.gcov.html b/html/libtorch/include/ATen/core/TensorAccessor.h.gcov.html new file mode 100644 index 0000000..aa69558 --- /dev/null +++ b/html/libtorch/include/ATen/core/TensorAccessor.h.gcov.html @@ -0,0 +1,348 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/TensorAccessor.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - TensorAccessor.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1010
Test Date:2024-04-30 13:17:26Functions:100.0 %66
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <c10/macros/Macros.h>
+       4              : #include <c10/util/ArrayRef.h>
+       5              : #include <c10/util/Deprecated.h>
+       6              : #include <c10/util/Exception.h>
+       7              : #include <c10/util/irange.h>
+       8              : #include <stdint.h>
+       9              : #include <cstddef>
+      10              : 
+      11              : namespace at {
+      12              : 
+      13              : // The PtrTraits argument to the TensorAccessor/GenericPackedTensorAccessor
+      14              : // is used to enable the __restrict__ keyword/modifier for the data
+      15              : // passed to cuda.
+      16              : template <typename T>
+      17              : struct DefaultPtrTraits {
+      18              :   typedef T* PtrType;
+      19              : };
+      20              : 
+      21              : #if defined(__CUDACC__) || defined(__HIPCC__)
+      22              : template <typename T>
+      23              : struct RestrictPtrTraits {
+      24              :   typedef T* __restrict__ PtrType;
+      25              : };
+      26              : #endif
+      27              : 
+      28              : // TensorAccessorBase and TensorAccessor are used for both CPU and CUDA tensors.
+      29              : // For CUDA tensors it is used in device code (only). This means that we restrict ourselves
+      30              : // to functions and types available there (e.g. IntArrayRef isn't).
+      31              : 
+      32              : // The PtrTraits argument is only relevant to cuda to support `__restrict__` pointers.
+      33              : template<typename T, size_t N, template <typename U> class PtrTraits = DefaultPtrTraits, typename index_t = int64_t>
+      34              : class TensorAccessorBase {
+      35              : public:
+      36              :   typedef typename PtrTraits<T>::PtrType PtrType;
+      37              : 
+      38       151348 :   C10_HOST_DEVICE TensorAccessorBase(
+      39              :       PtrType data_,
+      40              :       const index_t* sizes_,
+      41              :       const index_t* strides_)
+      42       151348 :       : data_(data_), sizes_(sizes_), strides_(strides_) {}
+      43              :   C10_HOST IntArrayRef sizes() const {
+      44              :     return IntArrayRef(sizes_,N);
+      45              :   }
+      46              :   C10_HOST IntArrayRef strides() const {
+      47              :     return IntArrayRef(strides_,N);
+      48              :   }
+      49              :   C10_HOST_DEVICE index_t stride(index_t i) const {
+      50              :     return strides_[i];
+      51              :   }
+      52              :   C10_HOST_DEVICE index_t size(index_t i) const {
+      53              :     return sizes_[i];
+      54              :   }
+      55              :   C10_HOST_DEVICE PtrType data() {
+      56              :     return data_;
+      57              :   }
+      58              :   C10_HOST_DEVICE const PtrType data() const {
+      59              :     return data_;
+      60              :   }
+      61              : protected:
+      62              :   PtrType data_;
+      63              :   const index_t* sizes_;
+      64              :   const index_t* strides_;
+      65              : };
+      66              : 
+      67              : // The `TensorAccessor` is typically instantiated for CPU `Tensor`s using
+      68              : // `Tensor.accessor<T, N>()`.
+      69              : // For CUDA `Tensor`s, `GenericPackedTensorAccessor` is used on the host and only
+      70              : // indexing on the device uses `TensorAccessor`s.
+      71              : template<typename T, size_t N, template <typename U> class PtrTraits = DefaultPtrTraits, typename index_t = int64_t>
+      72              : class TensorAccessor : public TensorAccessorBase<T,N,PtrTraits,index_t> {
+      73              : public:
+      74              :   typedef typename PtrTraits<T>::PtrType PtrType;
+      75              : 
+      76           80 :   C10_HOST_DEVICE TensorAccessor(
+      77              :       PtrType data_,
+      78              :       const index_t* sizes_,
+      79              :       const index_t* strides_)
+      80           80 :       : TensorAccessorBase<T, N, PtrTraits, index_t>(data_,sizes_,strides_) {}
+      81              : 
+      82       151268 :   C10_HOST_DEVICE TensorAccessor<T, N - 1, PtrTraits, index_t> operator[](index_t i) {
+      83       151268 :     return TensorAccessor<T,N-1,PtrTraits,index_t>(this->data_ + this->strides_[0]*i,this->sizes_+1,this->strides_+1);
+      84              :   }
+      85              : 
+      86              :   C10_HOST_DEVICE const TensorAccessor<T, N-1, PtrTraits, index_t> operator[](index_t i) const {
+      87              :     return TensorAccessor<T,N-1,PtrTraits,index_t>(this->data_ + this->strides_[0]*i,this->sizes_+1,this->strides_+1);
+      88              :   }
+      89              : };
+      90              : 
+      91              : template<typename T, template <typename U> class PtrTraits, typename index_t>
+      92              : class TensorAccessor<T,1,PtrTraits,index_t> : public TensorAccessorBase<T,1,PtrTraits,index_t> {
+      93              : public:
+      94              :   typedef typename PtrTraits<T>::PtrType PtrType;
+      95              : 
+      96       151268 :   C10_HOST_DEVICE TensorAccessor(
+      97              :       PtrType data_,
+      98              :       const index_t* sizes_,
+      99              :       const index_t* strides_)
+     100       151268 :       : TensorAccessorBase<T, 1, PtrTraits, index_t>(data_,sizes_,strides_) {}
+     101       151268 :   C10_HOST_DEVICE T & operator[](index_t i) {
+     102              :     // NOLINTNEXTLINE(clang-analyzer-core.NullDereference)
+     103       151268 :     return this->data_[this->strides_[0]*i];
+     104              :   }
+     105              :   C10_HOST_DEVICE const T & operator[](index_t i) const {
+     106              :     return this->data_[this->strides_[0]*i];
+     107              :   }
+     108              : };
+     109              : 
+     110              : 
+     111              : // GenericPackedTensorAccessorBase and GenericPackedTensorAccessor are used on for CUDA `Tensor`s on the host
+     112              : // and as
+     113              : // In contrast to `TensorAccessor`s, they copy the strides and sizes on instantiation (on the host)
+     114              : // in order to transfer them on the device when calling kernels.
+     115              : // On the device, indexing of multidimensional tensors gives to `TensorAccessor`s.
+     116              : // Use RestrictPtrTraits as PtrTraits if you want the tensor's data pointer to be marked as __restrict__.
+     117              : // Instantiation from data, sizes, strides is only needed on the host and std::copy isn't available
+     118              : // on the device, so those functions are host only.
+     119              : template<typename T, size_t N, template <typename U> class PtrTraits = DefaultPtrTraits, typename index_t = int64_t>
+     120              : class GenericPackedTensorAccessorBase {
+     121              : public:
+     122              :   typedef typename PtrTraits<T>::PtrType PtrType;
+     123              :   C10_HOST GenericPackedTensorAccessorBase(
+     124              :       PtrType data_,
+     125              :       const index_t* sizes_,
+     126              :       const index_t* strides_)
+     127              :       : data_(data_) {
+     128              :     std::copy(sizes_, sizes_ + N, std::begin(this->sizes_));
+     129              :     std::copy(strides_, strides_ + N, std::begin(this->strides_));
+     130              :   }
+     131              : 
+     132              :   // if index_t is not int64_t, we want to have an int64_t constructor
+     133              :   template <typename source_index_t, class = typename std::enable_if<std::is_same<source_index_t, int64_t>::value>::type>
+     134              :   C10_HOST GenericPackedTensorAccessorBase(
+     135              :       PtrType data_,
+     136              :       const source_index_t* sizes_,
+     137              :       const source_index_t* strides_)
+     138              :       : data_(data_) {
+     139              :     for (const auto i : c10::irange(N)) {
+     140              :       this->sizes_[i] = sizes_[i];
+     141              :       this->strides_[i] = strides_[i];
+     142              :     }
+     143              :   }
+     144              : 
+     145              :   C10_HOST_DEVICE index_t stride(index_t i) const {
+     146              :     return strides_[i];
+     147              :   }
+     148              :   C10_HOST_DEVICE index_t size(index_t i) const {
+     149              :     return sizes_[i];
+     150              :   }
+     151              :   C10_HOST_DEVICE PtrType data() {
+     152              :     return data_;
+     153              :   }
+     154              :   C10_HOST_DEVICE const PtrType data() const {
+     155              :     return data_;
+     156              :   }
+     157              : protected:
+     158              :   PtrType data_;
+     159              :   index_t sizes_[N];
+     160              :   index_t strides_[N];
+     161              :   C10_HOST void bounds_check_(index_t i) const {
+     162              :     TORCH_CHECK_INDEX(
+     163              :         0 <= i && i < index_t{N},
+     164              :         "Index ",
+     165              :         i,
+     166              :         " is not within bounds of a tensor of dimension ",
+     167              :         N);
+     168              :   }
+     169              : };
+     170              : 
+     171              : template<typename T, size_t N, template <typename U> class PtrTraits = DefaultPtrTraits, typename index_t = int64_t>
+     172              : class GenericPackedTensorAccessor : public GenericPackedTensorAccessorBase<T,N,PtrTraits,index_t> {
+     173              : public:
+     174              :   typedef typename PtrTraits<T>::PtrType PtrType;
+     175              : 
+     176              :   C10_HOST GenericPackedTensorAccessor(
+     177              :       PtrType data_,
+     178              :       const index_t* sizes_,
+     179              :       const index_t* strides_)
+     180              :       : GenericPackedTensorAccessorBase<T, N, PtrTraits, index_t>(data_, sizes_, strides_) {}
+     181              : 
+     182              :   // if index_t is not int64_t, we want to have an int64_t constructor
+     183              :   template <typename source_index_t, class = typename std::enable_if<std::is_same<source_index_t, int64_t>::value>::type>
+     184              :   C10_HOST GenericPackedTensorAccessor(
+     185              :       PtrType data_,
+     186              :       const source_index_t* sizes_,
+     187              :       const source_index_t* strides_)
+     188              :       : GenericPackedTensorAccessorBase<T, N, PtrTraits, index_t>(data_, sizes_, strides_) {}
+     189              : 
+     190              :   C10_DEVICE TensorAccessor<T, N - 1, PtrTraits, index_t> operator[](index_t i) {
+     191              :     index_t* new_sizes = this->sizes_ + 1;
+     192              :     index_t* new_strides = this->strides_ + 1;
+     193              :     return TensorAccessor<T,N-1,PtrTraits,index_t>(this->data_ + this->strides_[0]*i, new_sizes, new_strides);
+     194              :   }
+     195              : 
+     196              :   C10_DEVICE const TensorAccessor<T, N - 1, PtrTraits, index_t> operator[](index_t i) const {
+     197              :     const index_t* new_sizes = this->sizes_ + 1;
+     198              :     const index_t* new_strides = this->strides_ + 1;
+     199              :     return TensorAccessor<T,N-1,PtrTraits,index_t>(this->data_ + this->strides_[0]*i, new_sizes, new_strides);
+     200              :   }
+     201              : 
+     202              :   /// Returns a PackedTensorAccessor of the same dimension after transposing the
+     203              :   /// two dimensions given. Does not actually move elements; transposition is
+     204              :   /// made by permuting the size/stride arrays. If the dimensions are not valid,
+     205              :   /// asserts.
+     206              :   C10_HOST GenericPackedTensorAccessor<T, N, PtrTraits, index_t> transpose(
+     207              :       index_t dim1,
+     208              :       index_t dim2) const {
+     209              :     this->bounds_check_(dim1);
+     210              :     this->bounds_check_(dim2);
+     211              :     GenericPackedTensorAccessor<T, N, PtrTraits, index_t> result(
+     212              :         this->data_, this->sizes_, this->strides_);
+     213              :     std::swap(result.strides_[dim1], result.strides_[dim2]);
+     214              :     std::swap(result.sizes_[dim1], result.sizes_[dim2]);
+     215              :     return result;
+     216              :   }
+     217              : };
+     218              : 
+     219              : template<typename T, template <typename U> class PtrTraits, typename index_t>
+     220              : class GenericPackedTensorAccessor<T,1,PtrTraits,index_t> : public GenericPackedTensorAccessorBase<T,1,PtrTraits,index_t> {
+     221              : public:
+     222              :   typedef typename PtrTraits<T>::PtrType PtrType;
+     223              :   C10_HOST GenericPackedTensorAccessor(
+     224              :       PtrType data_,
+     225              :       const index_t* sizes_,
+     226              :       const index_t* strides_)
+     227              :       : GenericPackedTensorAccessorBase<T, 1, PtrTraits, index_t>(data_, sizes_, strides_) {}
+     228              : 
+     229              :   // if index_t is not int64_t, we want to have an int64_t constructor
+     230              :   template <typename source_index_t, class = typename std::enable_if<std::is_same<source_index_t, int64_t>::value>::type>
+     231              :   C10_HOST GenericPackedTensorAccessor(
+     232              :       PtrType data_,
+     233              :       const source_index_t* sizes_,
+     234              :       const source_index_t* strides_)
+     235              :       : GenericPackedTensorAccessorBase<T, 1, PtrTraits, index_t>(data_, sizes_, strides_) {}
+     236              : 
+     237              :   C10_DEVICE T & operator[](index_t i) {
+     238              :     return this->data_[this->strides_[0] * i];
+     239              :   }
+     240              :   C10_DEVICE const T& operator[](index_t i) const {
+     241              :     return this->data_[this->strides_[0]*i];
+     242              :   }
+     243              : 
+     244              :   // Same as in the general N-dimensional case, but note that in the
+     245              :   // 1-dimensional case the returned PackedTensorAccessor will always be an
+     246              :   // identical copy of the original
+     247              :   C10_HOST GenericPackedTensorAccessor<T, 1, PtrTraits, index_t> transpose(
+     248              :       index_t dim1,
+     249              :       index_t dim2) const {
+     250              :     this->bounds_check_(dim1);
+     251              :     this->bounds_check_(dim2);
+     252              :     return GenericPackedTensorAccessor<T, 1, PtrTraits, index_t>(
+     253              :         this->data_, this->sizes_, this->strides_);
+     254              :   }
+     255              : };
+     256              : 
+     257              : 
+     258              : // Can't put this directly into the macro function args because of commas
+     259              : #define AT_X GenericPackedTensorAccessor<T, N, PtrTraits, index_t>
+     260              : 
+     261              : // Old name for `GenericPackedTensorAccessor`
+     262              : template <typename T, size_t N, template <typename U> class PtrTraits = DefaultPtrTraits, typename index_t = int64_t>
+     263              : C10_DEFINE_DEPRECATED_USING(PackedTensorAccessor, AT_X)
+     264              : 
+     265              : #undef AT_X
+     266              : 
+     267              : template <typename T, size_t N, template <typename U> class PtrTraits = DefaultPtrTraits>
+     268              : using PackedTensorAccessor32 = GenericPackedTensorAccessor<T, N, PtrTraits, int32_t>;
+     269              : 
+     270              : template <typename T, size_t N, template <typename U> class PtrTraits = DefaultPtrTraits>
+     271              : using PackedTensorAccessor64 = GenericPackedTensorAccessor<T, N, PtrTraits, int64_t>;
+     272              : } // namespace at
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/TensorBase.h.func-c.html b/html/libtorch/include/ATen/core/TensorBase.h.func-c.html new file mode 100644 index 0000000..bdced5b --- /dev/null +++ b/html/libtorch/include/ATen/core/TensorBase.h.func-c.html @@ -0,0 +1,201 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/TensorBase.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - TensorBase.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:97.3 %3736
Test Date:2024-04-30 13:17:26Functions:100.0 %1818
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK2at10TensorBase7stridesEv80
_ZNKR2at10TensorBase8accessorIiLm2EEENS_14TensorAccessorIT_XT0_ENS_16DefaultPtrTraitsElEEv80
_ZNK2at10TensorBase5numelEv500
_ZNK2at10TensorBase5dtypeEv800
_ZNK2at10TensorBase17is_floating_pointEv876
_ZNK2at10TensorBase3dimEv7152
_ZN2at10TensorBaseC2ERKS0_61054
_ZNK2at10TensorBase5sizesEv88706
_ZNK2at10TensorBase10is_complexEv401318
_ZNK2at10TensorBase11scalar_typeEv402194
_ZN2at10TensorBaseC2EN3c1013intrusive_ptrINS1_10TensorImplENS1_19UndefinedTensorImplEEE418844
_ZNK2at10TensorBase7definedEv426804
_ZN2at10TensorBase25unsafeReleaseIntrusivePtrEv475156
_ZNK2at10TensorBase15getIntrusivePtrEv839508
_ZNK2at10TensorBase4sizeEl15310736
_ZN2at10TensorBaseC2Ev37370160
_ZNK2at10TensorBase19unsafeGetTensorImplEv105276376
_ZN2at10TensorBaseC2EOS0_733483980
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/TensorBase.h.func.html b/html/libtorch/include/ATen/core/TensorBase.h.func.html new file mode 100644 index 0000000..c20ae43 --- /dev/null +++ b/html/libtorch/include/ATen/core/TensorBase.h.func.html @@ -0,0 +1,201 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/TensorBase.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - TensorBase.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:97.3 %3736
Test Date:2024-04-30 13:17:26Functions:100.0 %1818
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at10TensorBase25unsafeReleaseIntrusivePtrEv475156
_ZN2at10TensorBaseC2EN3c1013intrusive_ptrINS1_10TensorImplENS1_19UndefinedTensorImplEEE418844
_ZN2at10TensorBaseC2EOS0_733483980
_ZN2at10TensorBaseC2ERKS0_61054
_ZN2at10TensorBaseC2Ev37370160
_ZNK2at10TensorBase10is_complexEv401318
_ZNK2at10TensorBase11scalar_typeEv402194
_ZNK2at10TensorBase15getIntrusivePtrEv839508
_ZNK2at10TensorBase17is_floating_pointEv876
_ZNK2at10TensorBase19unsafeGetTensorImplEv105276376
_ZNK2at10TensorBase3dimEv7152
_ZNK2at10TensorBase4sizeEl15310736
_ZNK2at10TensorBase5dtypeEv800
_ZNK2at10TensorBase5numelEv500
_ZNK2at10TensorBase5sizesEv88706
_ZNK2at10TensorBase7definedEv426804
_ZNK2at10TensorBase7stridesEv80
_ZNKR2at10TensorBase8accessorIiLm2EEENS_14TensorAccessorIT_XT0_ENS_16DefaultPtrTraitsElEEv80
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/TensorBase.h.gcov.html b/html/libtorch/include/ATen/core/TensorBase.h.gcov.html new file mode 100644 index 0000000..569b575 --- /dev/null +++ b/html/libtorch/include/ATen/core/TensorBase.h.gcov.html @@ -0,0 +1,1104 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/TensorBase.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - TensorBase.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:97.3 %3736
Test Date:2024-04-30 13:17:26Functions:100.0 %1818
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <c10/core/Device.h>
+       4              : #include <c10/core/Layout.h>
+       5              : #include <c10/core/MemoryFormat.h>
+       6              : #include <c10/core/ScalarType.h>
+       7              : #include <c10/core/ScalarTypeToTypeMeta.h>
+       8              : #include <c10/core/Storage.h>
+       9              : #include <c10/core/SymIntArrayRef.h>
+      10              : #include <c10/core/TensorImpl.h>
+      11              : #include <c10/core/TensorOptions.h>
+      12              : #include <c10/core/UndefinedTensorImpl.h>
+      13              : #include <c10/core/WrapDimMinimal.h>
+      14              : #include <c10/util/Exception.h>
+      15              : #include <c10/util/ExclusivelyOwned.h>
+      16              : #include <c10/util/ExclusivelyOwnedTensorTraits.h>
+      17              : #include <c10/util/MaybeOwned.h>
+      18              : #include <c10/util/Optional.h>
+      19              : #include <c10/util/intrusive_ptr.h>
+      20              : 
+      21              : #include <ATen/core/NamedTensor.h>
+      22              : #include <ATen/core/QuantizerBase.h>
+      23              : #include <ATen/core/TensorAccessor.h>
+      24              : #include <ATen/StorageUtils.h>
+      25              : 
+      26              : namespace c10 {
+      27              : class Scalar;
+      28              : }
+      29              : 
+      30              : namespace torch { namespace autograd {
+      31              : 
+      32              : struct Node;
+      33              : 
+      34              : }} // namespace torch::autograd
+      35              : 
+      36              : namespace at {
+      37              : 
+      38              : class Tensor;
+      39              : class TensorBase;
+      40              : 
+      41              : // Convert Tensor to TensorBase without any need to include Tensor.h
+      42              : TORCH_API const TensorBase& get_tensor_base(const Tensor& t);
+      43              : 
+      44              : namespace impl {
+      45              : inline bool variable_excluded_from_dispatch() {
+      46              : #ifdef C10_MOBILE
+      47              :   // Please read the comment in `VariableFallbackKernel.cpp` about the background of this change.
+      48              :   return true;
+      49              : #else
+      50              :   return c10::impl::tls_local_dispatch_key_set().excluded_.isSupersetOf(c10::autograd_dispatch_keyset);
+      51              : #endif
+      52              : }
+      53              : 
+      54              : }
+      55              : 
+      56              : // NOTE: [Tensor vs. TensorBase]
+      57              : //
+      58              : // Tensor, being the central data structure in PyTorch, gets used and
+      59              : // it's header included almost everywhere. Unfortunately this means
+      60              : // every time an operator signature is updated or changed in
+      61              : // native_functions.yaml, you (and every other PyTorch developer) need
+      62              : // to recompile all of ATen and it's dependencies.
+      63              : //
+      64              : // TensorBase aims to break up these header dependencies, and improve
+      65              : // incremental build times for all PyTorch developers. TensorBase
+      66              : // represents a reference counted handle to TensorImpl, exactly the
+      67              : // same as Tensor. However, TensorBase doesn't have code generated
+      68              : // methods in it's API and thus no dependence on native_functions.yaml.
+      69              : //
+      70              : // Usage tips
+      71              : // ----------
+      72              : // - You can `#define TORCH_ASSERT_NO_OPERATORS` at the top of a .cpp
+      73              : //   or .cu file to ensure it has no header dependencies on
+      74              : //   native_functions.yaml (direct or indirect).
+      75              : // - Tensor inherits from TensorBase, so functions taking
+      76              : //   `const TensorBase &` are callable with Tensor as well.
+      77              : // - TensorBase can be converted to tensor with `Tensor(tensor_base)`,
+      78              : //   but this requires a reference-count bump. OptionalTensorRef on
+      79              : //   the other hand can materialize a `const Tensor &` without
+      80              : //   touching the reference-count.
+      81              : class TORCH_API TensorBase {
+      82              :  public:
+      83              :   struct unsafe_borrow_t { explicit unsafe_borrow_t() = default; };
+      84              : 
+      85              :  protected:
+      86              :   // Create a Tensor with a +0 reference count. Special care must be
+      87              :   // taken to avoid decrementing this reference count at destruction
+      88              :   // time. Intended to support MaybeOwnedTraits<Tensor>.
+      89              :   explicit TensorBase(unsafe_borrow_t, const TensorBase& rhs)
+      90              :       : impl_(c10::intrusive_ptr<at::TensorImpl, UndefinedTensorImpl>::reclaim(rhs.impl_.get())) {}
+      91              :   friend MaybeOwnedTraits<TensorBase>;
+      92              : 
+      93              :  public:
+      94     37370160 :   TensorBase() = default;
+      95              :   // This constructor should not be used by end users and is an implementation
+      96              :   // detail invoked by autogenerated code.
+      97       418844 :   explicit TensorBase(
+      98              :       c10::intrusive_ptr<TensorImpl, UndefinedTensorImpl> tensor_impl)
+      99       418844 :       : impl_(std::move(tensor_impl)) {
+     100       418844 :     if (impl_.get() == nullptr) {
+     101            0 :       throw std::runtime_error("TensorImpl with nullptr is not supported");
+     102              :     }
+     103       418844 :   }
+     104        61054 :   TensorBase(const TensorBase&) = default;
+     105    733483980 :   TensorBase(TensorBase&&) = default;
+     106              : 
+     107              :  public:
+     108              :   // Creates a new wrapper from TensorImpl. Intentionally a free method because
+     109              :   // it should be used with care. Checks necessary invariants
+     110              :   static TensorBase wrap_tensor_impl(
+     111              :       c10::intrusive_ptr<TensorImpl, UndefinedTensorImpl> tensor_impl) {
+     112              :     TensorBase r(std::move(tensor_impl));
+     113              :     r.enforce_invariants();
+     114              :     return r;
+     115              :   }
+     116              : 
+     117         7152 :   int64_t dim() const {
+     118         7152 :     return impl_->dim();
+     119              :   }
+     120              :   int64_t storage_offset() const {
+     121              :     return impl_->storage_offset();
+     122              :   }
+     123              : 
+     124              :   TensorBase contiguous(MemoryFormat memory_format=MemoryFormat::Contiguous) const {
+     125              :     if (is_contiguous(memory_format)) {
+     126              :       return *this;
+     127              :     } else {
+     128              :       return __dispatch_contiguous(memory_format);
+     129              :     }
+     130              :   }
+     131              : 
+     132              :   /// Should be used if *this can reasonably be expected to be contiguous and
+     133              :   /// performance is important.
+     134              :   /// Compared to contiguous, it saves a reference count
+     135              :   /// increment/decrement if *this is already contiguous, at the cost
+     136              :   /// in all cases of an extra pointer of stack usage, an extra branch
+     137              :   /// to access, and an extra branch at destruction time.
+     138              :   c10::MaybeOwned<TensorBase> expect_contiguous(
+     139              :       MemoryFormat memory_format=MemoryFormat::Contiguous) const &;
+     140              : 
+     141              :   // Use .contiguous() instead. Trying to borrow from a prvalue
+     142              :   // will only lead to trouble and dangling references.
+     143              :   c10::MaybeOwned<TensorBase> expect_contiguous(
+     144              :       MemoryFormat memory_format=MemoryFormat::Contiguous) && = delete;
+     145              : 
+     146              :   const TensorBase& fill_(const c10::Scalar& scalar) const;
+     147              :   const TensorBase& zero_() const;
+     148              : 
+     149              :   TensorBase to(at::TensorOptions options={}, bool non_blocking=false, bool copy=false, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) const;
+     150              : 
+     151       401318 :   bool is_complex() const {
+     152       401318 :     return at::isComplexType(this->scalar_type());
+     153              :   }
+     154              : 
+     155          876 :   bool is_floating_point() const {
+     156          876 :     return at::isFloatingType(this->scalar_type());
+     157              :   }
+     158              : 
+     159              :   bool is_signed() const {
+     160              :     return at::isSignedType(this->scalar_type());
+     161              :   }
+     162              : 
+     163              :   c10::SymInt sym_size(int64_t dim) const {
+     164              :     return impl_->sym_size(dim);
+     165              :   }
+     166              : 
+     167              :   c10::SymInt sym_stride(int64_t dim) const {
+     168              :     const auto sizes = this->sym_strides();
+     169              :     const auto ndim = static_cast<int64_t>(sizes.size());
+     170              :     // false is passed to maybe_wrap_dim so behavior is identical to array access (but with wrapping)
+     171              :     return sizes[c10::maybe_wrap_dim(dim, ndim, /*wrap_scalar=*/false)];
+     172              : 
+     173              :   }
+     174              : 
+     175     15310736 :   int64_t size(int64_t dim) const {
+     176     15310736 :     return impl_->size(dim);
+     177              :   }
+     178              : 
+     179              :   int64_t stride(int64_t dim) const {
+     180              :     const auto strides = this->strides();
+     181              :     const auto ndim = static_cast<int64_t>(strides.size());
+     182              :     // false is passed to maybe_wrap_dim so behavior is identical to array access (but with wrapping)
+     183              :     return strides[c10::maybe_wrap_dim(dim, ndim, /*wrap_scalar=*/false)];
+     184              :   }
+     185              : 
+     186    105276376 :   TensorImpl * unsafeGetTensorImpl() const {
+     187    105276376 :     return impl_.get();
+     188              :   }
+     189              :   TensorImpl * unsafeReleaseTensorImpl() {
+     190              :     return impl_.release();
+     191              :   }
+     192       839508 :   const c10::intrusive_ptr<TensorImpl, UndefinedTensorImpl>& getIntrusivePtr() const {
+     193       839508 :     return impl_;
+     194              :   }
+     195              : 
+     196       475156 :   c10::intrusive_ptr<TensorImpl, UndefinedTensorImpl> unsafeReleaseIntrusivePtr() {
+     197       475156 :     return std::move(impl_);
+     198              :   }
+     199              : 
+     200       426804 :   bool defined() const {
+     201       426804 :     return impl_;
+     202              :   }
+     203              : 
+     204              :   void reset() {
+     205              :     impl_.reset();
+     206              :   }
+     207              : 
+     208              :   TensorBase& operator=(const TensorBase& x) & {
+     209              :     impl_ = x.impl_;
+     210              :     return *this;
+     211              :   };
+     212              :   TensorBase& operator=(TensorBase&& x) & noexcept {
+     213              :     impl_ = std::move(x.impl_);
+     214              :     return *this;
+     215              :   }
+     216              : 
+     217              :   // Ban assignment to rvalues, since at::Tensor (weirdly) performs a deep copy here
+     218              :   TensorBase& operator=(const TensorBase&) && = delete;
+     219              :   TensorBase& operator=(TensorBase&&) && noexcept = delete;
+     220              : 
+     221              :   bool is_same(const TensorBase& other) const noexcept {
+     222              :     return impl_ == other.impl_;
+     223              :   }
+     224              :   size_t use_count() const noexcept {
+     225              :     return impl_.use_count();
+     226              :   }
+     227              :   size_t weak_use_count() const noexcept {
+     228              :     return impl_.weak_use_count();
+     229              :   }
+     230              : 
+     231              :   std::string toString() const;
+     232              : 
+     233        88706 :   IntArrayRef sizes() const {
+     234        88706 :     return impl_->sizes();
+     235              :   }
+     236              :   c10::SymIntArrayRef sym_sizes() const {
+     237              :     return impl_->sym_sizes();
+     238              :   }
+     239              :   c10::SymIntArrayRef sym_strides() const {
+     240              :     return impl_->sym_strides();
+     241              :   }
+     242           80 :   IntArrayRef strides() const {
+     243           80 :     return impl_->strides();
+     244              :   }
+     245              :   // See impl::get_opt_names in ATen/NamedTensor.h for docs.
+     246              :   c10::optional<DimnameList> opt_names() const {
+     247              :     return impl::get_opt_names(unsafeGetTensorImpl());
+     248              :   }
+     249              :   // See impl::get_names in ATen/NamedTensor.h for docs.
+     250              :   DimnameList names() const {
+     251              :     return impl::get_names(unsafeGetTensorImpl());
+     252              :   }
+     253              :   int64_t ndimension() const {
+     254              :     return dim();
+     255              :   }
+     256              : 
+     257              :   bool is_contiguous(at::MemoryFormat memory_format=at::MemoryFormat::Contiguous) const {
+     258              :     return impl_->is_contiguous(memory_format);
+     259              :   }
+     260              : 
+     261              :   bool is_non_overlapping_and_dense() const {
+     262              :     return impl_->is_non_overlapping_and_dense();
+     263              :   }
+     264              : 
+     265              :   at::MemoryFormat suggest_memory_format(
+     266              :       bool channels_last_strides_exact_match = false) const {
+     267              :     // Setting channels_last_strides_exact_match to true forces function to
+     268              :     // check 0,1 - sized dimension strides.
+     269              :     if (layout() == at::kStrided) {
+     270              :       if (impl_->is_strides_like_channels_last()) {
+     271              :         if (!channels_last_strides_exact_match ||
+     272              :             get_channels_last_strides_2d(sizes()) == strides()) {
+     273              :           return at::MemoryFormat::ChannelsLast;
+     274              :         }
+     275              :       }
+     276              :       else if (impl_->is_strides_like_channels_last_3d()) {
+     277              :         if (!channels_last_strides_exact_match ||
+     278              :             get_channels_last_strides_3d(sizes()) == strides()) {
+     279              :           return at::MemoryFormat::ChannelsLast3d;
+     280              :         }
+     281              :       }
+     282              :     }
+     283              :     return at::MemoryFormat::Contiguous;
+     284              :   }
+     285              : 
+     286              :   // Total bytes consumed by the "view" of elements of the array.  Does not
+     287              :   // include size of metadata.  The number reported here does not necessarily
+     288              :   // correspond to the true physical memory consumed by a tensor; instead,
+     289              :   // it reports the memory the tensor would take *if* it were contiguous.
+     290              :   // Defined to be numel() * itemsize()
+     291              :   size_t nbytes() const {
+     292              :     TORCH_CHECK(layout () != at::kSparse,
+     293              :                 "nbytes is not defined for sparse tensors.  If you want the size of the constituent " \
+     294              :                 "tensors, add the nbytes of the indices and values.  If you want the size of the  " \
+     295              :                 "equivalent dense tensor, multiply numel() by element_size()");
+     296              :     return impl_->numel() * impl_->itemsize();
+     297              :   }
+     298              : 
+     299              :   c10::SymInt sym_nbytes() const {
+     300              :     TORCH_CHECK(layout () != at::kSparse,
+     301              :                 "nbytes is not defined for sparse tensors.  If you want the size of the constituent " \
+     302              :                 "tensors, add the nbytes of the indices and values.  If you want the size of the  " \
+     303              :                 "equivalent dense tensor, multiply numel() by element_size()");
+     304              :     return impl_->sym_numel() * impl_->itemsize();
+     305              :   }
+     306              : 
+     307          500 :   int64_t numel() const {
+     308          500 :     return impl_->numel();
+     309              :   }
+     310              : 
+     311              :   c10::SymInt sym_numel() const {
+     312              :     return impl_->sym_numel();
+     313              :   }
+     314              : 
+     315              :   c10::SymInt sym_storage_offset() const {
+     316              :     return impl_->sym_storage_offset();
+     317              :   }
+     318              : 
+     319              :   // Length of one array element in bytes.  This is the traditional
+     320              :   // Numpy naming.
+     321              :   size_t itemsize() const {
+     322              :     return impl_->itemsize();
+     323              :   }
+     324              : 
+     325              :   // Same as itemsize().  This is the PyTorch naming.
+     326              :   int64_t element_size() const {
+     327              :     return static_cast<int64_t>(impl_->itemsize());
+     328              :   }
+     329              : 
+     330              :   DispatchKeySet key_set() const {
+     331              :     return impl_->key_set();
+     332              :   }
+     333       402194 :   ScalarType scalar_type() const {
+     334       402194 :     return typeMetaToScalarType(impl_->dtype());
+     335              :   }
+     336              :   bool has_storage() const {
+     337              :     return defined() && impl_->has_storage();
+     338              :   }
+     339              :   const Storage& storage() const {
+     340              :     return impl_->storage();
+     341              :   }
+     342              :   bool is_alias_of(const at::TensorBase& other) const{
+     343              :     return impl_->storage().is_alias_of(other.storage());
+     344              :   }
+     345              : 
+     346              :   // Move the storage backend to shm based
+     347              :   // to enable memory sharing across processes.
+     348              :   //
+     349              :   // NB1: the ideal behavior of this API still requires further discussion
+     350              :   // but for now we are inclined to keep it consistent with existing THP behavior
+     351              :   // https://github.com/pytorch/pytorch/blob/4dca9bde0552afc67b5b74f4a0696fe6055709c4/torch/storage.py#L196-L212
+     352              :   // so we don't assert on anything here and rely on caller knowing
+     353              :   // what it's doing.
+     354              :   //
+     355              :   // NB2: this currently provides Linux fd based shm support only
+     356              :   // to simplify the storage lifetime management logic in ATen
+     357              :   // and similarly for now we are not adding support for file system based
+     358              :   // shm support like in THP due to additional GC manager support needed
+     359              :   // to prevent leaks.
+     360              :   // As such, calling this from non supported systems (e.g. Windows) would fail.
+     361              :   void share_memory_() {
+     362              :     at::share_memory_(*this);
+     363              :   }
+     364              : 
+     365              :   inline bool _is_zerotensor() const {
+     366              :     return impl_->_is_zerotensor();
+     367              :   }
+     368              : 
+     369              :   inline void _set_zero(bool zero) const {
+     370              :     impl_->_set_zero(zero);
+     371              :   }
+     372              : 
+     373              :   inline bool is_conj() const {
+     374              :     return impl_->is_conj();
+     375              :   }
+     376              : 
+     377              :   // sets the conjugate bit of a tensor.
+     378              :   // NOTE: Conjugate bit is supposed to be a read-only field. Only change this, if you are sure
+     379              :   // that's what you want. Changing this might lead to incorrect behavior since conjugation is
+     380              :   // a lazy operation and we rely on this bit to determine if a conjugation needs to be materialized.
+     381              :   inline void _set_conj(bool conjugate) const {
+     382              :     impl_->_set_conj(conjugate);
+     383              :   }
+     384              : 
+     385              :   inline bool is_neg() const {
+     386              :     return impl_->is_neg();
+     387              :   }
+     388              : 
+     389              :   // sets the negative bit of a tensor.
+     390              :   // NOTE: Negative bit is supposed to be a read-only field. Only change this, if you are sure
+     391              :   // that's what you want. Changing this might lead to incorrect behavior since we rely on this
+     392              :   // bit to determine if a negation needs to be materialized.
+     393              :   inline void _set_neg(bool negative) const {
+     394              :     impl_->_set_neg(negative);
+     395              :   }
+     396              : 
+     397              :   /// Returns a `Tensor`'s layout.
+     398              :   Layout layout() const {
+     399              :     return impl_->layout();
+     400              :   }
+     401              : 
+     402              :   /// Returns a `Tensor`'s dtype (`TypeMeta`).
+     403          800 :   caffe2::TypeMeta dtype() const {
+     404          800 :     return impl_->dtype();
+     405              :   }
+     406              : 
+     407              :   /// Returns a `Tensor`'s device.
+     408              :   inline Device device() const {
+     409              :     return impl_->device();
+     410              :   }
+     411              : 
+     412              :   /// Returns a `Tensor`'s device index.
+     413              :   int64_t get_device() const {
+     414              :     // NB: this is not a native function to avoid dispatching overhead.
+     415              :     return impl_->get_device();
+     416              :   }
+     417              : 
+     418              :   /// Returns if a `Tensor` has CPU backend.
+     419              :   bool is_cpu() const {
+     420              :     // NB: this is not a native function to avoid dispatching overhead.
+     421              :     return impl_->is_cpu();
+     422              :   }
+     423              : 
+     424              :   /// Returns if a `Tensor` has CUDA backend.
+     425              :   bool is_cuda() const {
+     426              :     // NB: this is not a native function to avoid dispatching overhead.
+     427              :     return impl_->is_cuda();
+     428              :   }
+     429              : 
+     430              :   /// Returns if a `Tensor` has IPU backend.
+     431              :   bool is_ipu() const {
+     432              :     // NB: this is not a native function to avoid dispatching overhead.
+     433              :     return impl_->is_ipu();
+     434              :   }
+     435              : 
+     436              :   /// Returns if a `Tensor` has XPU backend.
+     437              :   bool is_xpu() const {
+     438              :     // NB: this is not a native function to avoid dispatching overhead.
+     439              :     return impl_->is_xpu();
+     440              :   }
+     441              : 
+     442              :   /// Returns if a `Tensor` has XLA backend.
+     443              :   bool is_xla() const {
+     444              :     return impl_->is_xla();
+     445              :   }
+     446              : 
+     447              :   /// Returns if a `Tensor` has MTIA backend.
+     448              :   bool is_mtia() const {
+     449              :     return impl_->is_mtia();
+     450              :   }
+     451              : 
+     452              :   /// Returns if a `Tensor` has HPU backend.
+     453              :   bool is_hpu() const {
+     454              :     return impl_->is_hpu();
+     455              :   }
+     456              : 
+     457              :   /// Returns if a `Tensor` has Lazy backend.
+     458              :   bool is_lazy() const {
+     459              :     return impl_->is_lazy();
+     460              :   }
+     461              : 
+     462              :   /// Returns if a `Tensor` has HIP backend.
+     463              :   bool is_hip() const {
+     464              :     // NB: this is not a native function to avoid dispatching overhead.
+     465              :     return impl_->is_hip();
+     466              :   }
+     467              : 
+     468              :   /// Returns if a `Tensor` has VE backend.
+     469              :   bool is_ve() const {
+     470              :     // NB: this is not a native function to avoid dispatching overhead.
+     471              :     return impl_->is_ve();
+     472              :   }
+     473              : 
+     474              :   /// Returns if a `Tensor` has sparse backend.
+     475              :   bool is_sparse() const {
+     476              :     // NB: this is not a native function to avoid dispatching overhead.
+     477              :     return impl_->is_sparse();
+     478              :   }
+     479              : 
+     480              :   /// Returns is a `Tensor` has a sparse CSR backend.
+     481              :   bool is_sparse_csr() const {
+     482              :     // NB: this is not a native function to avoid dispatching overhead.
+     483              :     return impl_->is_sparse_csr();
+     484              :   }
+     485              : 
+     486              :   /// Returns if a `Tensor` is mkldnn tensor.
+     487              :   bool is_mkldnn() const {
+     488              :     // NB: this is not a native function to avoid dispatching overhead.
+     489              :     return impl_->is_mkldnn();
+     490              :   }
+     491              : 
+     492              :   /// Returns if a `Tensor` is mps tensor.
+     493              :   bool is_mps() const {
+     494              :     // NB: this is not a native function to avoid dispatching overhead.
+     495              :     return impl_->is_mps();
+     496              :   }
+     497              : 
+     498              :   /// Returns if a `Tensor` is ort tensor.
+     499              :   bool is_ort() const {
+     500              :     // NB: this is not a native function to avoid dispatching overhead.
+     501              :     return impl_->is_ort();
+     502              :   }
+     503              : 
+     504              :   /// Returns if a `Tensor` is vulkan tensor.
+     505              :   bool is_vulkan() const {
+     506              :     // NB: this is not a native function to avoid dispatching overhead.
+     507              :     return impl_->is_vulkan();
+     508              :   }
+     509              : 
+     510              :   /// Returns if a `Tensor` is metal tensor.
+     511              :   bool is_metal() const {
+     512              :     // NB: this is not a native function to avoid dispatching overhead.
+     513              :     return impl_->is_metal();
+     514              :   }
+     515              : 
+     516              :   /// Returns if a `Tensor` has quantized backend.
+     517              :   bool is_quantized() const {
+     518              :     // NB: this is not a native function to avoid dispatching overhead.
+     519              :     return impl_->is_quantized();
+     520              :   }
+     521              : 
+     522              :   /// Returns if a `Tensor` is a meta tensor.  Meta tensors can
+     523              :   /// also have other designations.
+     524              :   bool is_meta() const {
+     525              :     return impl_->is_meta();
+     526              :   }
+     527              : 
+     528              :   /// Returns if a `Tensor` is an inference tensor.
+     529              :   bool is_inference() const {
+     530              :     return impl_->is_inference();
+     531              :   }
+     532              : 
+     533              :   // Returns if a `Tensor` is a NestedTensor.
+     534              :   bool is_nested() const {
+     535              :     return impl_->is_nested();
+     536              :   }
+     537              : 
+     538              :   /// If a tensor is a quantized tensor, returns its quantizer
+     539              :   /// TODO: it's not in native_functions.yaml yet as it's not exposed to python
+     540              :   QuantizerPtr quantizer() const;
+     541              : 
+     542              :   /// Returns if a `Tensor` has any dimension names
+     543              :   bool has_names() const {
+     544              :     // If a user is using unnamed tensors, then we can short-circuit right here.
+     545              :     // Otherwise, impl::has_names attempts to retrieve names.
+     546              :     if (!impl_->has_named_tensor_meta()) {
+     547              :       return false;
+     548              :     }
+     549              :     return impl::has_names(unsafeGetTensorImpl());
+     550              :   }
+     551              : 
+     552              :   /// Returns a `Tensor`'s dimension names data structure
+     553              :   const NamedTensorMeta* get_named_tensor_meta() const {
+     554              :     return static_cast<NamedTensorMeta*>(impl_->named_tensor_meta());
+     555              :   }
+     556              : 
+     557              :   NamedTensorMeta* get_named_tensor_meta() {
+     558              :     return static_cast<NamedTensorMeta*>(impl_->named_tensor_meta());
+     559              :   }
+     560              : 
+     561              :   /// Returns the `TensorOptions` corresponding to this `Tensor`. Defined in
+     562              :   /// TensorOptions.h.
+     563              :   TensorOptions options() const {
+     564              :     return TensorOptions().dtype(dtype())
+     565              :                           .device(device())
+     566              :                           .layout(layout());
+     567              :   }
+     568              : 
+     569              :   const void* const_data_ptr() const {
+     570              :     return this->unsafeGetTensorImpl()->data();
+     571              :   }
+     572              : 
+     573              :   void* mutable_data_ptr() const {
+     574              :     return this->unsafeGetTensorImpl()->mutable_data();
+     575              :   }
+     576              : 
+     577              :   // TODO(#97856) Make this return a const pointer. This currently
+     578              :   //              returns a non-const pointer because of the large
+     579              :   //              number of clients that we still want to audit before
+     580              :   //              migrating to mutable_data_ptr().
+     581              :   void* data_ptr() const {
+     582              :     return mutable_data_ptr();
+     583              :   }
+     584              : 
+     585              :   template <typename T>
+     586              :   const T* const_data_ptr() const;
+     587              : 
+     588              :   template <typename T>
+     589              :   T* mutable_data_ptr() const;
+     590              : 
+     591              :   // Legacy interface during the migration to indicate that a callsite
+     592              :   // has not been audited for mutability.
+     593              :   //
+     594              :   // Do not add new uses of this, use const_data_ptr() if possible,
+     595              :   // mutable_data_ptr() otherwise.
+     596              :   //
+     597              :   // TODO(#97856) Make this return a const pointer. This is currently
+     598              :   //              const because of the vast number of clients that
+     599              :   //              rely on this.
+     600              :   template <typename T>
+     601              :   T* data_ptr() const;
+     602              : 
+     603              :   // Purposely not defined here to avoid inlining
+     604              :   void print() const;
+     605              : 
+     606              :   // Return a `TensorAccessor` for CPU `Tensor`s. You have to specify scalar type and
+     607              :   // dimension.
+     608              :   template<typename T, size_t N>
+     609           80 :   TensorAccessor<T,N> accessor() const& {
+     610              :     static_assert(N > 0, "accessor is used for indexing tensor, for scalars use *data_ptr<T>()");
+     611           80 :     TORCH_CHECK(dim() == N, "TensorAccessor expected ", N, " dims but tensor has ", dim());
+     612           80 :     return TensorAccessor<T,N>(data_ptr<T>(),sizes().data(),strides().data());
+     613              :   }
+     614              :   template<typename T, size_t N>
+     615              :   TensorAccessor<T,N> accessor() && = delete;
+     616              : 
+     617              :   // Return a `GenericPackedTensorAccessor` for CUDA `Tensor`s. You have to specify scalar type and
+     618              :   // dimension. You can optionally specify RestrictPtrTraits as a template parameter to
+     619              :   // cast the data pointer to a __restrict__ pointer.
+     620              :   // In order to use this, your CUDA kernel has to take a corresponding GenericPackedTensorAccessor
+     621              :   // as an argument.
+     622              :   template<typename T, size_t N, template <typename U> class PtrTraits = DefaultPtrTraits, typename index_t = int64_t>
+     623              :   GenericPackedTensorAccessor<T,N,PtrTraits,index_t> generic_packed_accessor() const& {
+     624              :     static_assert(N > 0, "accessor is used for indexing tensor, for scalars use *data_ptr<T>()");
+     625              :     TORCH_CHECK(dim() == N, "TensorAccessor expected ", N, " dims but tensor has ", dim());
+     626              :     return GenericPackedTensorAccessor<T,N,PtrTraits,index_t>(static_cast<typename PtrTraits<T>::PtrType>(data_ptr<T>()),sizes().data(),strides().data());
+     627              :   }
+     628              :   template<typename T, size_t N, template <typename U> class PtrTraits = DefaultPtrTraits, typename index_t = int64_t>
+     629              :   GenericPackedTensorAccessor<T,N> generic_packed_accessor() && = delete;
+     630              : 
+     631              :   template<typename T, size_t N, template <typename U> class PtrTraits = DefaultPtrTraits>
+     632              :   PackedTensorAccessor32<T,N,PtrTraits> packed_accessor32() const& {
+     633              :     TORCH_CHECK(
+     634              :         impl_->numel() <=
+     635              :             static_cast<int64_t>(std::numeric_limits<int32_t>::max()),
+     636              :         "numel needs to be smaller than int32_t max; otherwise, please use packed_accessor64");
+     637              :     return generic_packed_accessor<T,N,PtrTraits,int32_t>();
+     638              :   }
+     639              :   template<typename T, size_t N, template <typename U> class PtrTraits = DefaultPtrTraits>
+     640              :   PackedTensorAccessor32<T,N,PtrTraits> packed_accessor32() && = delete;
+     641              : 
+     642              :   template<typename T, size_t N, template <typename U> class PtrTraits = DefaultPtrTraits>
+     643              :   PackedTensorAccessor64<T,N,PtrTraits> packed_accessor64() const& {
+     644              :     return generic_packed_accessor<T,N,PtrTraits,int64_t>();
+     645              :   }
+     646              :   template<typename T, size_t N, template <typename U> class PtrTraits = DefaultPtrTraits>
+     647              :   PackedTensorAccessor64<T,N,PtrTraits> packed_accessor64() && = delete;
+     648              : 
+     649              :   // ~~~~~ Autograd API ~~~~~
+     650              : 
+     651              :   /// \fn bool is_leaf() const;
+     652              :   ///
+     653              :   /// All Tensors that have `requires_grad()` which is ``false`` will be leaf Tensors by convention.
+     654              :   ///
+     655              :   /// For Tensors that have `requires_grad()` which is ``true``, they will be leaf Tensors if they were
+     656              :   /// created by the user. This means that they are not the result of an operation and so
+     657              :   /// `grad_fn()` is `nullptr`.
+     658              :   ///
+     659              :   /// Only leaf Tensors will have their `grad()` populated during a call to `backward()`.
+     660              :   /// To get `grad()` populated for non-leaf Tensors, you can use `retain_grad()`.
+     661              :   ///
+     662              :   /// Example:
+     663              :   /// @code
+     664              :   /// auto a = torch::rand(10, torch::requires_grad());
+     665              :   /// std::cout << a.is_leaf() << std::endl; // prints `true`
+     666              :   ///
+     667              :   /// auto b = torch::rand(10, torch::requires_grad()).to(torch::kCUDA);
+     668              :   /// std::cout << b.is_leaf() << std::endl; // prints `false`
+     669              :   /// // b was created by the operation that cast a cpu Tensor into a cuda Tensor
+     670              :   ///
+     671              :   /// auto c = torch::rand(10, torch::requires_grad()) + 2;
+     672              :   /// std::cout << c.is_leaf() << std::endl; // prints `false`
+     673              :   /// // c was created by the addition operation
+     674              :   ///
+     675              :   /// auto d = torch::rand(10).cuda();
+     676              :   /// std::cout << d.is_leaf() << std::endl; // prints `true`
+     677              :   /// // d does not require gradients and so has no operation creating it (that is tracked by the autograd engine)
+     678              :   ///
+     679              :   /// auto e = torch::rand(10).cuda().requires_grad_();
+     680              :   /// std::cout << e.is_leaf() << std::endl; // prints `true`
+     681              :   /// // e requires gradients and has no operations creating it
+     682              :   ///
+     683              :   /// auto f = torch::rand(10, torch::device(torch::kCUDA).requires_grad(true));
+     684              :   /// std::cout << f.is_leaf() << std::endl; // prints `true`
+     685              :   /// // f requires grad, has no operation creating it
+     686              :   /// @endcode
+     687              : 
+     688              :   /// \fn void backward(const Tensor & gradient={}, c10::optional<bool> retain_graph=c10::nullopt, bool create_graph=false, c10::optional<TensorList> inputs=c10::nullopt) const;
+     689              :   ///
+     690              :   /// Computes the gradient of current tensor with respect to graph leaves.
+     691              :   ///
+     692              :   /// The graph is differentiated using the chain rule. If the tensor is
+     693              :   /// non-scalar (i.e. its data has more than one element) and requires
+     694              :   /// gradient, the function additionally requires specifying ``gradient``.
+     695              :   /// It should be a tensor of matching type and location, that contains
+     696              :   /// the gradient of the differentiated function w.r.t. this Tensor.
+     697              :   ///
+     698              :   /// This function accumulates gradients in the leaves - you might need to
+     699              :   /// zero them before calling it.
+     700              :   ///
+     701              :   /// \param gradient Gradient w.r.t. the
+     702              :   ///     tensor. If it is a tensor, it will be automatically converted
+     703              :   ///     to a Tensor that does not require grad unless ``create_graph`` is True.
+     704              :   ///     None values can be specified for scalar Tensors or ones that
+     705              :   ///     don't require grad. If a None value would be acceptable then
+     706              :   ///     this argument is optional.
+     707              :   /// \param retain_graph If ``false``, the graph used to compute
+     708              :   ///     the grads will be freed. Note that in nearly all cases setting
+     709              :   ///     this option to True is not needed and often can be worked around
+     710              :   ///     in a much more efficient way. Defaults to the value of
+     711              :   ///     ``create_graph``.
+     712              :   /// \param create_graph If ``true``, graph of the derivative will
+     713              :   ///     be constructed, allowing to compute higher order derivative
+     714              :   ///     products. Defaults to ``false``.
+     715              :   /// \param inputs Inputs w.r.t. which the gradient will be accumulated into
+     716              :   ///     ``at::Tensor::grad``. All other Tensors will be ignored. If not
+     717              :   ///     provided, the gradient is accumulated into all the leaf Tensors
+     718              :   ///     that were used to compute the current tensor.
+     719              :   ///     When inputs are provided and a given input is not a leaf,
+     720              :   ///     the current implementation will call its grad_fn (even though it is not strictly needed to get this gradients).
+     721              :   ///     It is an implementation detail on which the user should not rely.
+     722              :   ///     See https://github.com/pytorch/pytorch/pull/60521#issuecomment-867061780 for more details.
+     723              : 
+     724              :   /// \fn Tensor detach() const;
+     725              :   ///
+     726              :   /// Returns a new Tensor, detached from the current graph.
+     727              :   /// The result will never require gradient.
+     728              : 
+     729              :   /// \fn Tensor & detach_() const;
+     730              :   ///
+     731              :   /// Detaches the Tensor from the graph that created it, making it a leaf.
+     732              :   /// Views cannot be detached in-place.
+     733              : 
+     734              :   /// \fn void retain_grad() const;
+     735              :   ///
+     736              :   /// Enables this Tensor to have their :attr:`grad` populated during
+     737              :   /// :func:`backward`. This is a no-op for leaf tensors.
+     738              : 
+     739              :   /// \fn bool retains_grad() const;
+     740              :   ///
+     741              :   /// Is ``true`` if this Tensor is non-leaf and its :attr:`grad` is enabled to be
+     742              :   /// populated during :func:`backward`, ``false`` otherwise.
+     743              : 
+     744              :   const TensorBase& set_requires_grad(bool requires_grad) const {
+     745              :     impl_->set_requires_grad(requires_grad);
+     746              :     return *this;
+     747              :   }
+     748              :   bool requires_grad() const {
+     749              :     return impl_->requires_grad();
+     750              :   }
+     751              : 
+     752              :   // The Forward AD API functions below are low level and are not to be used by end
+     753              :   // users who should use the API provided in torch/csrc/autograd.h
+     754              : 
+     755              :   /// This function returns the forward gradient for this Tensor at the given level.
+     756              :   const Tensor& _fw_grad(uint64_t level) const {
+     757              :     return impl_->_fw_grad(level, *this);
+     758              :   }
+     759              : 
+     760              :   /// This function can be used to set the value of the forward grad.
+     761              :   /// Note that the given new_grad might not be used directly if it has different
+     762              :   /// metadata (size/stride/storage offset) compared to this Tensor. In that case,
+     763              :   /// new_grad content will be copied into a new Tensor
+     764              :   void _set_fw_grad(const TensorBase& new_grad, uint64_t level, bool is_inplace_op) const {
+     765              :     impl_->_set_fw_grad(new_grad, *this, level, is_inplace_op);
+     766              :   }
+     767              : 
+     768              :   /// NOTE: This is similar to the legacy `.data()` function on `Variable`, and is intended
+     769              :   /// to be used from functions that need to access the `Variable`'s equivalent `Tensor`
+     770              :   /// (i.e. `Tensor` that shares the same storage and tensor metadata with the `Variable`).
+     771              :   ///
+     772              :   /// One notable difference with the legacy `.data()` function is that changes to the
+     773              :   /// returned `Tensor`'s tensor metadata (e.g. sizes / strides / storage / storage_offset)
+     774              :   /// will not update the original `Variable`, due to the fact that this function
+     775              :   /// shallow-copies the `Variable`'s underlying TensorImpl.
+     776              :   at::TensorBase tensor_data() const;
+     777              : 
+     778              :   /// NOTE: `var.variable_data()` in C++ has the same semantics as `tensor.data`
+     779              :   /// in Python, which create a new `Variable` that shares the same storage and
+     780              :   /// tensor metadata with the original `Variable`, but with a completely new
+     781              :   /// autograd history.
+     782              :   ///
+     783              :   /// NOTE: If we change the tensor metadata (e.g. sizes / strides /
+     784              :   /// storage / storage_offset) of a variable created from `var.variable_data()`, those
+     785              :   /// changes will not update the original variable `var`. In `.variable_data()`, we set
+     786              :   /// `allow_tensor_metadata_change_` to false to make such changes explicitly illegal,
+     787              :   /// in order to prevent users from changing metadata of `var.variable_data()`
+     788              :   /// and expecting the original variable `var` to also be updated.
+     789              :   at::TensorBase variable_data() const;
+     790              : 
+     791              :   // Gradient Node and Edges
+     792              :   //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     793              : 
+     794              :   /// Gets the gradient function of the `Variable`. If this is a leaf variable,
+     795              :   /// the pointer returned will be null.
+     796              :   ///
+     797              :   /// For View Variables:
+     798              :   /// Gets the up-to-date grad_fn. If the shared data or base was modified, we
+     799              :   /// re-create the grad_fn to express the up-to-date view relationship between
+     800              :   /// this and the base Variable.
+     801              :   const std::shared_ptr<torch::autograd::Node>& grad_fn() const;
+     802              : 
+     803              :   // Hooks
+     804              :   //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     805              : 
+     806              :   template <typename T>
+     807              :   using hook_return_void_t = std::enable_if_t<std::is_void<typename c10::invoke_result_t<T&, TensorBase>>::value, unsigned>;
+     808              :   template <typename T>
+     809              :   using hook_return_var_t = std::enable_if_t<std::is_same<typename c10::invoke_result_t<T&, TensorBase>, TensorBase>::value, unsigned>;
+     810              : 
+     811              :   /// Registers a backward hook.
+     812              :   ///
+     813              :   /// The hook will be called every time a gradient with respect to the Tensor is computed.
+     814              :   /// The hook should have one of the following signature:
+     815              :   /// ```
+     816              :   /// hook(TensorBase grad) -> TensorBase
+     817              :   /// ```
+     818              :   /// ```
+     819              :   /// hook(TensorBase grad) -> void
+     820              :   /// ```
+     821              :   /// The hook should not modify its argument, but it can optionally return a new gradient
+     822              :   /// which will be used in place of `grad`.
+     823              :   ///
+     824              :   /// This function returns the index of the hook in the list which can be used to remove hook.
+     825              :   ///
+     826              :   /// Example:
+     827              :   /// @code
+     828              :   /// auto v = torch::tensor({0., 0., 0.}, torch::requires_grad());
+     829              :   /// auto h = v.register_hook([](torch::Tensor grad){ return grad * 2; }); // double the gradient
+     830              :   /// v.backward(torch::tensor({1., 2., 3.}));
+     831              :   /// // This prints:
+     832              :   /// // ```
+     833              :   /// //  2
+     834              :   /// //  4
+     835              :   /// //  6
+     836              :   /// // [ CPUFloatType{3} ]
+     837              :   /// // ```
+     838              :   /// std::cout << v.grad() << std::endl;
+     839              :   /// v.remove_hook(h);  // removes the hook
+     840              :   /// @endcode
+     841              :   template <typename T>
+     842              :   hook_return_void_t<T> register_hook(T&& hook) const;
+     843              :   template <typename T>
+     844              :   hook_return_var_t<T> register_hook(T&& hook) const;
+     845              : 
+     846              : protected:
+     847              :   unsigned _register_hook(std::function<TensorBase(const TensorBase&)> hook) const;
+     848              : 
+     849              : public:
+     850              : 
+     851              :   /// Remove hook at given position
+     852              :   void remove_hook(unsigned pos) const;
+     853              : 
+     854              :   // Variable methods
+     855              :   //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     856              : 
+     857              :   bool is_leaf() const;
+     858              : 
+     859              :   int64_t output_nr() const;
+     860              : 
+     861              :   void set_data(const TensorBase & new_data) const;
+     862              : 
+     863              :   TensorBase data() const;
+     864              : 
+     865              :   int64_t _version() const;
+     866              : 
+     867              :   void retain_grad() const;
+     868              : 
+     869              :   bool retains_grad() const;
+     870              : 
+     871              :   const TensorBase& requires_grad_(bool _requires_grad=true) const;
+     872              : 
+     873              :   // View Variables
+     874              :   //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     875              : 
+     876              :   /// Returns true if this `Variable` is a view of another `Variable`.
+     877              :   bool is_view() const;
+     878              : 
+     879              :   /// Returns the `Variable` that this `Variable` is a view of. If this
+     880              :   /// `Variable` is not a view, throw a `std::runtime_error`.
+     881              :   const TensorBase& _base() const;
+     882              : 
+     883              :   // Miscellaneous
+     884              :   //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     885              : 
+     886              :   const std::string& name() const;
+     887              : 
+     888              : protected:
+     889              :   void enforce_invariants();
+     890              :   c10::intrusive_ptr<TensorImpl, UndefinedTensorImpl> impl_;
+     891              : 
+     892              : private:
+     893              :   TensorBase __dispatch_contiguous(c10::MemoryFormat) const;
+     894              : };
+     895              : 
+     896              : inline int64_t get_device(const TensorBase& self) {
+     897              :   return self.get_device();
+     898              : }
+     899              : 
+     900              : template <typename T>
+     901              : auto TensorBase::register_hook(T&& hook) const -> TensorBase::hook_return_void_t<T> {
+     902              :   // Return the grad argument in case of a hook with void return type to have an
+     903              :   // std::function with Tensor return type
+     904              :   static_assert(std::is_same<decltype(hook(TensorBase())), void>::value,
+     905              :                 "Expected hook to return void");
+     906              :   return _register_hook([fn=std::forward<T>(hook)](const TensorBase& grad) {
+     907              :     fn(grad);
+     908              :     return TensorBase();
+     909              :   });
+     910              : }
+     911              : 
+     912              : template <typename T>
+     913              : auto TensorBase::register_hook(T&& hook) const -> TensorBase::hook_return_var_t<T> {
+     914              :   return _register_hook(std::forward<T>(hook));
+     915              : }
+     916              : 
+     917              : namespace detail {
+     918              : // Helper creator for Tensor class which doesn't requires the users to pass
+     919              : // in an intrusive_ptr instead it just converts the argument passed to
+     920              : // requested intrusive_ptr type.
+     921              : template <typename T, typename... Args>
+     922              : TensorBase make_tensor_base(Args&&... args) {
+     923              :   return TensorBase(c10::make_intrusive<T>(std::forward<Args>(args)...));
+     924              : }
+     925              : 
+     926              : } // namespace detail
+     927              : 
+     928              : static inline DispatchKey legacyExtractDispatchKey(const TensorBase& t) {
+     929              :   return legacyExtractDispatchKey(t.key_set());
+     930              : }
+     931              : 
+     932              : } // namespace at
+     933              : 
+     934              : namespace c10 {
+     935              : template <>
+     936              : struct MaybeOwnedTraits<at::TensorBase> {
+     937              :   using owned_type = at::TensorBase;
+     938              :   using borrow_type = at::TensorBase;
+     939              : 
+     940              :   static borrow_type createBorrow(const owned_type& from) {
+     941              :     // NOTE: this can be implemented without the special
+     942              :     // unsafe_borrow_t Tensor constructor as
+     943              :     //
+     944              :     // return borrow_type(c10::intrusive_ptr<at::TensorImpl, at::UndefinedTensorImpl>::reclaim(from.unsafeGetTensorImpl()));
+     945              :     //
+     946              :     // but that hurts inlining due to the nullptr check in the
+     947              :     // Tensor(c10::intrusive_ptr<...>) constructor. We already know
+     948              :     // that from.impl_ isn't null because from is a valid Tensor, so
+     949              :     // we needn't do the check again. (using __builtin_assume can
+     950              :     // avoid this, but wouldn't be portable to MSVC.)
+     951              :     return borrow_type(borrow_type::unsafe_borrow_t{}, from);
+     952              :   }
+     953              : 
+     954              :   static void assignBorrow(borrow_type& lhs, const borrow_type& rhs) {
+     955              :     lhs.unsafeReleaseTensorImpl();
+     956              :     // See above note: this can be implemented with public API
+     957              :     // similarly to createBorrow(), but that would hurt inlining.
+     958              :     lhs = borrow_type(borrow_type::unsafe_borrow_t{}, rhs);
+     959              :   }
+     960              : 
+     961              :   static void destroyBorrow(borrow_type& toDestroy) {
+     962              :     toDestroy.unsafeReleaseTensorImpl(); // "leak" it, but it was already +0.
+     963              :   }
+     964              : 
+     965              :   static const owned_type& referenceFromBorrow(const borrow_type& borrow) {
+     966              :     return borrow;
+     967              :   }
+     968              : 
+     969              :   static const owned_type* pointerFromBorrow(const borrow_type& borrow) {
+     970              :     return &borrow;
+     971              :   }
+     972              : 
+     973              :   static bool debugBorrowIsValid(const borrow_type& /*borrow*/) {
+     974              :     return true;
+     975              :   }
+     976              : };
+     977              : 
+     978              : template <>
+     979              : struct ExclusivelyOwnedTraits<at::TensorBase> : public c10::ExclusivelyOwnedTensorTraits<at::TensorBase> {};
+     980              : } // namespace c10
+     981              : 
+     982              : namespace at {
+     983              : 
+     984              : inline c10::MaybeOwned<TensorBase> borrow_from_optional_tensor(
+     985              :     const c10::optional<TensorBase>& opt) {
+     986              :   return opt.has_value()
+     987              :     ? c10::MaybeOwned<TensorBase>::borrowed(*opt)
+     988              :     : c10::MaybeOwned<TensorBase>::owned(c10::in_place);
+     989              : }
+     990              : 
+     991              : inline c10::MaybeOwned<TensorBase> TensorBase::expect_contiguous(MemoryFormat memory_format) const & {
+     992              :   if (is_contiguous(memory_format)) {
+     993              :     return c10::MaybeOwned<TensorBase>::borrowed(*this);
+     994              :   } else {
+     995              :     return c10::MaybeOwned<TensorBase>::owned(__dispatch_contiguous(memory_format));
+     996              :   }
+     997              : }
+     998              : 
+     999              : namespace symint {
+    1000              : 
+    1001              : template <typename T>
+    1002              : using enable_if_symint = std::enable_if_t<std::is_same<T, c10::SymInt>::value>;
+    1003              : template <typename T>
+    1004              : using enable_if_int = std::enable_if_t<std::is_same<T, int64_t>::value>;
+    1005              : 
+    1006              : template <typename T, typename = enable_if_symint<T>>
+    1007              : c10::SymIntArrayRef sizes(const TensorBase& t) { return t.sym_sizes(); }
+    1008              : template <typename T, typename = enable_if_int<T>>
+    1009              : IntArrayRef sizes(const TensorBase& t) { return t.sizes(); }
+    1010              : 
+    1011              : template <typename T, typename = enable_if_symint<T>>
+    1012              : c10::SymInt size(const TensorBase& t, int64_t dim) { return t.sym_size(dim); }
+    1013              : template <typename T, typename = enable_if_int<T>>
+    1014              : int64_t size(const TensorBase& t, int64_t dim) { return t.size(dim); }
+    1015              : 
+    1016              : template <typename T, typename = enable_if_symint<T>>
+    1017              : c10::SymIntArrayRef strides(const TensorBase& t) { return t.sym_strides(); }
+    1018              : template <typename T, typename = enable_if_int<T>>
+    1019              : IntArrayRef strides(const TensorBase& t) { return t.strides(); }
+    1020              : 
+    1021              : template <typename T, typename = enable_if_symint<T>>
+    1022              : c10::SymInt numel(const TensorBase& t) { return t.sym_numel(); }
+    1023              : template <typename T, typename = enable_if_int<T>>
+    1024              : int64_t numel(const TensorBase& t) { return t.numel(); }
+    1025              : 
+    1026              : } // namespace symint
+    1027              : 
+    1028              : } // namespace at
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/TensorBody.h.func-c.html b/html/libtorch/include/ATen/core/TensorBody.h.func-c.html new file mode 100644 index 0000000..0a54b32 --- /dev/null +++ b/html/libtorch/include/ATen/core/TensorBody.h.func-c.html @@ -0,0 +1,404 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/TensorBody.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - TensorBody.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:96.9 %9895
Test Date:2024-04-30 13:17:26Functions:100.0 %4747
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK2at6Tensor5cloneEN3c108optionalINS1_12MemoryFormatEEE6
_ZNK2at6Tensor5equalERKS0_110
_ZN2at6TensordVERKN3c106ScalarE228
_ZNK2at6Tensor4div_ERKN3c106ScalarE228
_ZNK2at6Tensor2neERKS0_272
_ZNK2at6Tensor2gtERKN3c106ScalarE330
_ZNK2at6Tensor7nonzeroEv330
_ZNK2at6Tensor4viewEN3c108ArrayRefIlEE376
_ZNK2at6Tensor2eqERKS0_472
_ZNK2at6Tensor2toEN6caffe28TypeMetaEbb800
_ZNK2at6Tensor6argmaxEN3c108optionalIlEEb914
_ZN2at6TensorpLERKS0_1262
_ZNK2at6Tensor3mulERKN3c106ScalarE1262
_ZNK2at6Tensor4add_ERKS0_RKN3c106ScalarE1262
_ZNR2at6TensoraSERKNS_10TensorBaseE1820
_ZNR2at6TensoraSERKS0_1820
_ZNK2at6Tensor4itemEv7072
_ZNK2at6TensorixERKN3c106ScalarE7072
_ZNK2at6TensorixERKS0_7072
_ZNK2at6Tensor2eqERKN3c106ScalarE9012
_ZNK2at6Tensor3divERKS0_14194
_ZNK2at6Tensor3sumEN3c1016OptionalArrayRefIlEEbNS1_8optionalINS1_10ScalarTypeEEE14194
_ZNK2at6Tensor3negEv16480
_ZNK2at6Tensor6nansumEN3c1016OptionalArrayRefIlEEbNS1_8optionalINS1_10ScalarTypeEEE16480
_ZNK2at6TensorngEv16480
_ZNK2at6Tensor3divERKN3c106ScalarE16744
_ZNK2at6Tensor3sumEN3c108optionalINS1_10ScalarTypeEEE17252
_ZNK2at6Tensor3mulERKS0_17280
_ZNK2at6Tensor2toEN3c1010ScalarTypeEbbNS1_8optionalINS1_12MemoryFormatEEE17282
_ZNK2at6Tensor5copy_ERKS0_b20532
_ZNO2at6TensoraSEOS0_20532
_ZNK2at6Tensor5fill_ERKN3c106ScalarE28734
_ZNO2at6TensoraSERKN3c106ScalarE28734
_ZNK2at6Tensor8bincountERKN3c108optionalIS0_EEl31316
_ZN2at6TensorC2ERKS0_61054
_ZNK2at6Tensor2toEN3c1013TensorOptionsEbbNS1_8optionalINS1_12MemoryFormatEEE401318
_ZN2at6TensorC2EN3c1013intrusive_ptrINS1_10TensorImplENS1_19UndefinedTensorImplEEE418844
_ZNR2at6TensoraSEONS_10TensorBaseE435080
_ZNR2at6TensoraSEOS0_435080
_ZNK2at6Tensor10index_put_ERKN3c104ListINS1_8optionalIS0_EEEERKS0_b5122988
_ZNK2at6Tensor3addERKN3c106ScalarES4_5137182
_ZNK2at6Tensor6selectEll20560890
_ZNK2at6TensorixEl20560890
_ZNK2at6Tensor5indexERKN3c104ListINS1_8optionalIS0_EEEE36925424
_ZN2at6TensorC2Ev37370160
_ZN2at6TensorC2EONS_10TensorBaseE105276376
_ZN2at6TensorC2EOS0_522931228
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/TensorBody.h.func.html b/html/libtorch/include/ATen/core/TensorBody.h.func.html new file mode 100644 index 0000000..7ab15c6 --- /dev/null +++ b/html/libtorch/include/ATen/core/TensorBody.h.func.html @@ -0,0 +1,404 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/TensorBody.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - TensorBody.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:96.9 %9895
Test Date:2024-04-30 13:17:26Functions:100.0 %4747
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at6TensorC2EN3c1013intrusive_ptrINS1_10TensorImplENS1_19UndefinedTensorImplEEE418844
_ZN2at6TensorC2EONS_10TensorBaseE105276376
_ZN2at6TensorC2EOS0_522931228
_ZN2at6TensorC2ERKS0_61054
_ZN2at6TensorC2Ev37370160
_ZN2at6TensordVERKN3c106ScalarE228
_ZN2at6TensorpLERKS0_1262
_ZNK2at6Tensor10index_put_ERKN3c104ListINS1_8optionalIS0_EEEERKS0_b5122988
_ZNK2at6Tensor2eqERKN3c106ScalarE9012
_ZNK2at6Tensor2eqERKS0_472
_ZNK2at6Tensor2gtERKN3c106ScalarE330
_ZNK2at6Tensor2neERKS0_272
_ZNK2at6Tensor2toEN3c1010ScalarTypeEbbNS1_8optionalINS1_12MemoryFormatEEE17282
_ZNK2at6Tensor2toEN3c1013TensorOptionsEbbNS1_8optionalINS1_12MemoryFormatEEE401318
_ZNK2at6Tensor2toEN6caffe28TypeMetaEbb800
_ZNK2at6Tensor3addERKN3c106ScalarES4_5137182
_ZNK2at6Tensor3divERKN3c106ScalarE16744
_ZNK2at6Tensor3divERKS0_14194
_ZNK2at6Tensor3mulERKN3c106ScalarE1262
_ZNK2at6Tensor3mulERKS0_17280
_ZNK2at6Tensor3negEv16480
_ZNK2at6Tensor3sumEN3c1016OptionalArrayRefIlEEbNS1_8optionalINS1_10ScalarTypeEEE14194
_ZNK2at6Tensor3sumEN3c108optionalINS1_10ScalarTypeEEE17252
_ZNK2at6Tensor4add_ERKS0_RKN3c106ScalarE1262
_ZNK2at6Tensor4div_ERKN3c106ScalarE228
_ZNK2at6Tensor4itemEv7072
_ZNK2at6Tensor4viewEN3c108ArrayRefIlEE376
_ZNK2at6Tensor5cloneEN3c108optionalINS1_12MemoryFormatEEE6
_ZNK2at6Tensor5copy_ERKS0_b20532
_ZNK2at6Tensor5equalERKS0_110
_ZNK2at6Tensor5fill_ERKN3c106ScalarE28734
_ZNK2at6Tensor5indexERKN3c104ListINS1_8optionalIS0_EEEE36925424
_ZNK2at6Tensor6argmaxEN3c108optionalIlEEb914
_ZNK2at6Tensor6nansumEN3c1016OptionalArrayRefIlEEbNS1_8optionalINS1_10ScalarTypeEEE16480
_ZNK2at6Tensor6selectEll20560890
_ZNK2at6Tensor7nonzeroEv330
_ZNK2at6Tensor8bincountERKN3c108optionalIS0_EEl31316
_ZNK2at6TensorixERKN3c106ScalarE7072
_ZNK2at6TensorixERKS0_7072
_ZNK2at6TensorixEl20560890
_ZNK2at6TensorngEv16480
_ZNO2at6TensoraSEOS0_20532
_ZNO2at6TensoraSERKN3c106ScalarE28734
_ZNR2at6TensoraSEONS_10TensorBaseE435080
_ZNR2at6TensoraSEOS0_435080
_ZNR2at6TensoraSERKNS_10TensorBaseE1820
_ZNR2at6TensoraSERKS0_1820
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/TensorBody.h.gcov.html b/html/libtorch/include/ATen/core/TensorBody.h.gcov.html new file mode 100644 index 0000000..bbee0b0 --- /dev/null +++ b/html/libtorch/include/ATen/core/TensorBody.h.gcov.html @@ -0,0 +1,5771 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/TensorBody.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - TensorBody.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:96.9 %9895
Test Date:2024-04-30 13:17:26Functions:100.0 %4747
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #ifdef TORCH_ASSERT_NO_OPERATORS
+       4              : #error This change adds a dependency on native_functions.yaml,            \
+       5              :   meaning the file will need to be re-compiled every time an operator     \
+       6              :   is changed or added. Consider if your change would be better placed in  \
+       7              :   another file, or if a more specific header might achieve the same goal. \
+       8              :   See NOTE: [Tensor vs. TensorBase]
+       9              : #endif
+      10              : 
+      11              : #include <c10/core/Device.h>
+      12              : #include <c10/core/Layout.h>
+      13              : #include <c10/core/MemoryFormat.h>
+      14              : #include <c10/core/QScheme.h>
+      15              : #include <c10/core/Stream.h>
+      16              : #include <c10/core/Scalar.h>
+      17              : #include <c10/core/ScalarType.h>
+      18              : #include <c10/core/ScalarTypeToTypeMeta.h>
+      19              : #include <c10/core/Storage.h>
+      20              : #include <c10/core/TensorImpl.h>
+      21              : #include <c10/core/UndefinedTensorImpl.h>
+      22              : #include <c10/core/WrapDimMinimal.h>
+      23              : #include <c10/util/Exception.h>
+      24              : #include <c10/util/ExclusivelyOwned.h>
+      25              : #include <c10/util/Deprecated.h>
+      26              : #include <c10/util/MaybeOwned.h>
+      27              : #include <c10/util/Optional.h>
+      28              : #include <c10/util/OptionalArrayRef.h>
+      29              : #include <c10/util/intrusive_ptr.h>
+      30              : #include <c10/macros/Export.h>
+      31              : #include <ATen/core/CheckMemoryFormat.h>
+      32              : #include <ATen/core/DeprecatedTypePropertiesRegistry.h>
+      33              : #include <ATen/core/DeprecatedTypeProperties.h>
+      34              : #include <ATen/core/NamedTensor.h>
+      35              : #include <ATen/core/QuantizerBase.h>
+      36              : #include <c10/core/SymInt.h>
+      37              : #include <ATen/core/TensorAccessor.h>
+      38              : #include <ATen/core/TensorBase.h>
+      39              : 
+      40              : 
+      41              : #include <ATen/MethodOperators.h>
+      42              : 
+      43              : namespace c10{
+      44              : template<class T> class List;
+      45              : template<class T> class IListRef;
+      46              : }
+      47              : namespace at {
+      48              : struct Generator;
+      49              : struct Type;
+      50              : class DeprecatedTypeProperties;
+      51              : class Tensor;
+      52              : } // namespace at
+      53              : namespace at {
+      54              : namespace indexing {
+      55              : struct TensorIndex;
+      56              : } // namespace indexing
+      57              : } // namespace at
+      58              : 
+      59              : namespace torch { namespace autograd {
+      60              : 
+      61              : struct Node;
+      62              : 
+      63              : }} // namespace torch::autograd
+      64              : 
+      65              : namespace at {
+      66              : 
+      67              : class OptionalTensorRef;
+      68              : class TensorRef;
+      69              : class Tensor;
+      70              : using TensorList = ArrayRef<Tensor>;
+      71              : using ITensorList = c10::IListRef<Tensor>;
+      72              : 
+      73              : using Stream = c10::Stream;
+      74              : 
+      75              : // Tensor is a "generic" object holding a pointer to the underlying TensorImpl object, which
+      76              : // has an embedded reference count. In this way, Tensor is similar to boost::intrusive_ptr.
+      77              : //
+      78              : // For example:
+      79              : //
+      80              : // void func(Tensor a) {
+      81              : //   Tensor b = a;
+      82              : //   ...
+      83              : // }
+      84              : //
+      85              : // In this example, when we say Tensor b = a, we are creating a new object that points to the
+      86              : // same underlying TensorImpl, and bumps its reference count. When b goes out of scope, the
+      87              : // destructor decrements the reference count by calling release() on the TensorImpl it points to.
+      88              : // The existing constructors, operator overloads, etc. take care to implement the correct semantics.
+      89              : //
+      90              : // Note that Tensor can also be NULL, i.e. it is not associated with any underlying TensorImpl, and
+      91              : // special care must be taken to handle this.
+      92              : class TORCH_API Tensor: public TensorBase {
+      93              :  protected:
+      94              :   // Create a Tensor with a +0 reference count. Special care must be
+      95              :   // taken to avoid decrementing this reference count at destruction
+      96              :   // time. Intended to support MaybeOwnedTraits<Tensor>.
+      97              :   explicit Tensor(unsafe_borrow_t, const TensorBase& rhs): TensorBase(unsafe_borrow_t{}, rhs) {}
+      98              :   friend MaybeOwnedTraits<Tensor>;
+      99              :   friend OptionalTensorRef;
+     100              :   friend TensorRef;
+     101              : 
+     102              :  public:
+     103     37370160 :   Tensor() = default;
+     104              :   // This constructor should not be used by end users and is an implementation
+     105              :   // detail invoked by autogenerated code.
+     106       418844 :   explicit Tensor(
+     107              :       c10::intrusive_ptr<TensorImpl, UndefinedTensorImpl> tensor_impl)
+     108       418844 :       : TensorBase(std::move(tensor_impl)) {}
+     109        61054 :   Tensor(const Tensor &tensor) = default;
+     110    522931228 :   Tensor(Tensor &&tensor) = default;
+     111              : 
+     112              :   // Implicitly move-constructible from TensorBase, but must be explicit to increase refcount
+     113              :   explicit Tensor(const TensorBase &base): TensorBase(base) {}
+     114    105276376 :   /*implicit*/ Tensor(TensorBase &&base): TensorBase(std::move(base)) {}
+     115              : 
+     116              :   // Creates a new wrapper from TensorImpl. Intentionally a free method because
+     117              :   // it should be used with care. Checks necessary invariants
+     118              :   static Tensor wrap_tensor_impl(
+     119              :       c10::intrusive_ptr<TensorImpl, UndefinedTensorImpl> tensor_impl) {
+     120              :     return TensorBase::wrap_tensor_impl(std::move(tensor_impl));
+     121              :   }
+     122              : 
+     123              :   Tensor contiguous(MemoryFormat memory_format=MemoryFormat::Contiguous) const {
+     124              :     return TensorBase::contiguous(memory_format);
+     125              :   }
+     126              : 
+     127              :   Tensor conj() const {
+     128              :     if (!this->is_complex()) {
+     129              :       return *this;
+     130              :     }
+     131              : 
+     132              :     switch (this->layout()) {
+     133              :       case at::kSparse:
+     134              :       case at::kSparseCsr:
+     135              :       case at::kSparseCsc:
+     136              :       case at::kSparseBsr:
+     137              :       case at::kSparseBsc:
+     138              :         return this->conj_physical();
+     139              :       default:
+     140              :         return this->_conj();
+     141              :     }
+     142              :   }
+     143              : 
+     144              :   // Aliased by Dimname overloads, so need explicit using
+     145              :   using TensorBase::size;
+     146              :   using TensorBase::sym_size;
+     147              :   using TensorBase::stride;
+     148              : 
+     149              :   /// Should be used if *this can reasonably be expected to be contiguous and
+     150              :   /// performance is important.
+     151              :   /// Compared to contiguous, it saves a reference count
+     152              :   /// increment/decrement if *this is already contiguous, at the cost
+     153              :   /// in all cases of an extra pointer of stack usage, an extra branch
+     154              :   /// to access, and an extra branch at destruction time.
+     155              :   c10::MaybeOwned<Tensor> expect_contiguous(MemoryFormat memory_format=MemoryFormat::Contiguous) const &;
+     156              : 
+     157              :   // Use .contiguous() instead. Trying to borrow from a prvalue Tensor
+     158              :   // will only lead to trouble and dangling references.
+     159              :   c10::MaybeOwned<Tensor> expect_contiguous(MemoryFormat memory_format=MemoryFormat::Contiguous) && = delete;
+     160              : 
+     161              :   // The following overloads are very intruiging.  Consider the following
+     162              :   // program:
+     163              :   //
+     164              :   //    x[1] = 3;
+     165              :   //
+     166              :   // We would expect that the first entry of x is written to 3.  But how can we
+     167              :   // actually achieve this?  x[1] evaluates to a tensor...
+     168              :   //
+     169              :   // The answer is, using a ref-qualifier.  x[1] is an rvalue, which cannot be
+     170              :   // (profitably) assigned to in the traditional sense, so we overload
+     171              :   // assignment to mean, "Actually, copy 3 into the tensor data."  This is done
+     172              :   // with an rvalue-reference ref-qualified overload (the methods with && at the
+     173              :   // end of their type.)
+     174              :   //
+     175              :   // There's one more fly in the ointment: We also want
+     176              :   //
+     177              :   //    Tensor x = y;
+     178              :   //
+     179              :   // to work, and we want it NOT to copy.  So we need a traditional operator=
+     180              :   // overload.  But we MUST specify a mutable lvalue ref-qualifier, to
+     181              :   // disambiguate the traditional overload from the rvalue-reference
+     182              :   // ref-qualified overload.  Otherwise, it will be ambiguous, because
+     183              :   // a non ref-qualified method is eligible for all situations.
+     184              : 
+     185              :   // Unfortunately, we have to write these constructors out manually
+     186              :   // to work around an MSVC bug:
+     187              :   //    error C2580: 'at::Tensor &at::Tensor::operator =(const at::Tensor &) &':
+     188              :   //    multiple versions of a defaulted special member functions are not allowed
+     189              :   // Tensor& operator=(const Tensor&) & = default;
+     190              :   // Tensor& operator=(Tensor&&) & = default;
+     191              : 
+     192              :   // Also MSVC will wrongly issue the following warning with the aforementioned fix
+     193              :   //    warning C4522: 'at::Tensor': multiple assignment operators specified
+     194              :   // Let's just skip the warning.
+     195              :   //
+     196              :   // TODO: temporarily disabled
+     197              : 
+     198         1820 :   Tensor& operator=(const TensorBase& x) & {
+     199         1820 :     impl_ = x.getIntrusivePtr();
+     200         1820 :     return *this;
+     201              :   }
+     202       435080 :   Tensor& operator=(TensorBase&& x) & noexcept {
+     203       435080 :     impl_ = x.unsafeReleaseIntrusivePtr();
+     204       435080 :     return *this;
+     205              :   }
+     206              : 
+     207         1820 :   Tensor& operator=(const Tensor &x) & {
+     208         1820 :     return operator=(static_cast<const TensorBase&>(x));
+     209              :   }
+     210       435080 :   Tensor& operator=(Tensor &&x) & noexcept {
+     211       435080 :     return operator=(static_cast<TensorBase&&>(x));
+     212              :   }
+     213              : 
+     214        28734 :   Tensor& operator=(const Scalar &v) && {
+     215        28734 :     return fill_(v);
+     216              :   }
+     217              :   Tensor& operator=(const Tensor &rhs) && {
+     218              :     return copy_(rhs);
+     219              :   }
+     220        20532 :   Tensor& operator=(Tensor&& rhs) && {
+     221        20532 :     return copy_(rhs);
+     222              :   }
+     223              : 
+     224              :   C10_DEPRECATED_MESSAGE("Tensor.type() is deprecated. Instead use Tensor.options(), which in many cases (e.g. in a constructor) is a drop-in replacement. If you were using data from type(), that is now available from Tensor itself, so instead of tensor.type().scalar_type(), use tensor.scalar_type() instead and instead of tensor.type().backend() use tensor.device().")
+     225              :   DeprecatedTypeProperties & type() const {
+     226              :     return globalDeprecatedTypePropertiesRegistry().getDeprecatedTypeProperties(
+     227              :         dispatchKeyToBackend(legacyExtractDispatchKey(key_set())),
+     228              :         scalar_type());
+     229              :   }
+     230              : 
+     231              :   Tensor toType(ScalarType t) const {
+     232              :     return to(options().dtype(t), /*non_blocking*/ false, /*copy*/ false);
+     233              :   }
+     234              : 
+     235              :   // TODO: Deprecate me
+     236              :   Tensor toBackend(Backend b) const {
+     237              :     return to(options().device(backendToDeviceType(b)).layout(layout_from_backend(b)), /*non_blocking*/ false, /*copy*/ false);
+     238              :   }
+     239              : 
+     240              :   C10_DEPRECATED_MESSAGE("Tensor.is_variable() is deprecated; everything is a variable now. (If you want to assert that variable has been appropriately handled already, use at::impl::variable_excluded_from_dispatch())")
+     241              :   bool is_variable() const noexcept {
+     242              :     return !at::impl::variable_excluded_from_dispatch();
+     243              :   }
+     244              : 
+     245              :   template<typename T>
+     246              :   C10_DEPRECATED_MESSAGE("Tensor.data<T>() is deprecated. Please use Tensor.data_ptr<T>() instead.")
+     247              :   T * data() const {
+     248              :     return data_ptr<T>();
+     249              :   }
+     250              : 
+     251              :   template <typename T>
+     252              :   T item() const;
+     253              : 
+     254              :   template<typename T, size_t N, template <typename U> class PtrTraits = DefaultPtrTraits, typename index_t = int64_t>
+     255              :   C10_DEPRECATED_MESSAGE("packed_accessor is deprecated, use packed_accessor32 or packed_accessor64 instead")
+     256              :   GenericPackedTensorAccessor<T,N,PtrTraits,index_t> packed_accessor() const & {
+     257              :     return generic_packed_accessor<T,N,PtrTraits,index_t>();
+     258              :   }
+     259              :   template<typename T, size_t N, template <typename U> class PtrTraits = DefaultPtrTraits, typename index_t = int64_t>
+     260              :   C10_DEPRECATED_MESSAGE("packed_accessor is deprecated, use packed_accessor32 or packed_accessor64 instead")
+     261              :   GenericPackedTensorAccessor<T,N,PtrTraits,index_t> packed_accessor() && = delete;
+     262              : 
+     263              :   Tensor operator~() const {
+     264              :     return bitwise_not();
+     265              :   }
+     266        16480 :   Tensor operator-() const {
+     267        16480 :     return neg();
+     268              :   }
+     269         1262 :   Tensor& operator+=(const Tensor & other) {
+     270         1262 :     return add_(other);
+     271              :   }
+     272              :   Tensor& operator+=(const Scalar & other) {
+     273              :     return add_(other);
+     274              :   }
+     275              :   Tensor& operator-=(const Tensor & other) {
+     276              :     return sub_(other);
+     277              :   }
+     278              :   Tensor& operator-=(const Scalar & other) {
+     279              :     return sub_(other);
+     280              :   }
+     281              :   Tensor& operator*=(const Tensor & other) {
+     282              :     return mul_(other);
+     283              :   }
+     284              :   Tensor& operator*=(const Scalar & other) {
+     285              :     return mul_(other);
+     286              :   }
+     287              :   Tensor& operator/=(const Tensor & other) {
+     288              :     return div_(other);
+     289              :   }
+     290          228 :   Tensor& operator/=(const Scalar & other) {
+     291          228 :     return div_(other);
+     292              :   }
+     293              :   Tensor& operator&=(const Tensor & other) {
+     294              :     return bitwise_and_(other);
+     295              :   }
+     296              :   Tensor& operator|=(const Tensor & other) {
+     297              :     return bitwise_or_(other);
+     298              :   }
+     299              :   Tensor& operator^=(const Tensor & other) {
+     300              :     return bitwise_xor_(other);
+     301              :   }
+     302         7072 :   Tensor operator[](const Scalar & index) const {
+     303         7072 :     if (!index.isIntegral(false)) {
+     304            0 :       TORCH_CHECK_INDEX(false, "Can only index tensors with integral scalars");
+     305              :     }
+     306         7072 :     return this->operator[](index.toLong());
+     307              :   }
+     308         7072 :   Tensor operator[](const Tensor & index) const {
+     309              :     // These properties are checked in the Scalar constructor, but we already
+     310              :     // check them here to provide more useful diagnostics for the user.
+     311         7072 :     if (!index.defined()) {
+     312            0 :       TORCH_CHECK_INDEX(false, "Can only index with tensors that are defined");
+     313              :     }
+     314         7072 :     if (index.dim() != 0) {
+     315            0 :       TORCH_CHECK_INDEX(false,
+     316              :                         "Can only index with tensors that are scalars (zero-dim)");
+     317              :     }
+     318              :     // The Scalar(Tensor) constructor is explicit, so we need to call it.
+     319         7072 :     return this->operator[](index.item());
+     320              :   }
+     321     20560890 :   Tensor operator[](int64_t index) const {
+     322     20560890 :     return select(0, index);
+     323              :   }
+     324              : 
+     325              :   Tensor index(ArrayRef<at::indexing::TensorIndex> indices) const;
+     326              :   Tensor index(std::initializer_list<at::indexing::TensorIndex> indices) const;
+     327              : 
+     328              :   Tensor & index_put_(ArrayRef<at::indexing::TensorIndex> indices, Tensor const & rhs);
+     329              :   Tensor & index_put_(ArrayRef<at::indexing::TensorIndex> indices, const Scalar& v);
+     330              :   Tensor & index_put_(std::initializer_list<at::indexing::TensorIndex> indices, Tensor const & rhs);
+     331              :   Tensor & index_put_(std::initializer_list<at::indexing::TensorIndex> indices, const Scalar& v);
+     332              : 
+     333              :   Tensor cpu() const {
+     334              :     return to(options().device(c10::DeviceType::CPU), /*non_blocking*/ false, /*copy*/ false);
+     335              :   }
+     336              : 
+     337              :   // TODO: The Python version also accepts arguments
+     338              :   Tensor cuda() const {
+     339              :     return to(options().device(c10::DeviceType::CUDA), /*non_blocking*/ false, /*copy*/ false);
+     340              :   }
+     341              : 
+     342              :   Tensor hip() const {
+     343              :     return to(options().device(c10::DeviceType::HIP), /*non_blocking*/ false, /*copy*/ false);
+     344              :   }
+     345              : 
+     346              :   Tensor ve() const {
+     347              :     return to(options().device(c10::DeviceType::VE), /*non_blocking*/ false, /*copy*/ false);
+     348              :   }
+     349              : 
+     350              :   Tensor vulkan() const {
+     351              :     return to(options().device(c10::DeviceType::Vulkan), /*non_blocking*/ false, /*copy*/ false);
+     352              :   }
+     353              : 
+     354              :   Tensor metal() const {
+     355              :     return to(options().device(c10::DeviceType::Metal), /*non_blocking*/ false, /*copy*/ false);
+     356              :   }
+     357              : 
+     358              :   Tensor meta() const {
+     359              :     return to(options().device(c10::DeviceType::Meta), /*non_blocking*/ false, /*copy*/ false);
+     360              :   }
+     361              : 
+     362              :   // ~~~~~ Autograd API ~~~~~
+     363              : 
+     364              :   /// \fn bool is_leaf() const;
+     365              :   ///
+     366              :   /// All Tensors that have `requires_grad()` which is ``false`` will be leaf Tensors by convention.
+     367              :   ///
+     368              :   /// For Tensors that have `requires_grad()` which is ``true``, they will be leaf Tensors if they were
+     369              :   /// created by the user. This means that they are not the result of an operation and so
+     370              :   /// `grad_fn()` is `nullptr`.
+     371              :   ///
+     372              :   /// Only leaf Tensors will have their `grad()` populated during a call to `backward()`.
+     373              :   /// To get `grad()` populated for non-leaf Tensors, you can use `retain_grad()`.
+     374              :   ///
+     375              :   /// Example:
+     376              :   /// @code
+     377              :   /// auto a = torch::rand(10, torch::requires_grad());
+     378              :   /// std::cout << a.is_leaf() << std::endl; // prints `true`
+     379              :   ///
+     380              :   /// auto b = torch::rand(10, torch::requires_grad()).to(torch::kCUDA);
+     381              :   /// std::cout << b.is_leaf() << std::endl; // prints `false`
+     382              :   /// // b was created by the operation that cast a cpu Tensor into a cuda Tensor
+     383              :   ///
+     384              :   /// auto c = torch::rand(10, torch::requires_grad()) + 2;
+     385              :   /// std::cout << c.is_leaf() << std::endl; // prints `false`
+     386              :   /// // c was created by the addition operation
+     387              :   ///
+     388              :   /// auto d = torch::rand(10).cuda();
+     389              :   /// std::cout << d.is_leaf() << std::endl; // prints `true`
+     390              :   /// // d does not require gradients and so has no operation creating it (that is tracked by the autograd engine)
+     391              :   ///
+     392              :   /// auto e = torch::rand(10).cuda().requires_grad_();
+     393              :   /// std::cout << e.is_leaf() << std::endl; // prints `true`
+     394              :   /// // e requires gradients and has no operations creating it
+     395              :   ///
+     396              :   /// auto f = torch::rand(10, torch::device(torch::kCUDA).requires_grad(true));
+     397              :   /// std::cout << f.is_leaf() << std::endl; // prints `true`
+     398              :   /// // f requires grad, has no operation creating it
+     399              :   /// @endcode
+     400              : 
+     401              :   /// \fn void backward(const Tensor & gradient={}, c10::optional<bool> retain_graph=c10::nullopt, bool create_graph=false, c10::optional<TensorList> inputs=c10::nullopt) const;
+     402              :   ///
+     403              :   /// Computes the gradient of current tensor with respect to graph leaves.
+     404              :   ///
+     405              :   /// The graph is differentiated using the chain rule. If the tensor is
+     406              :   /// non-scalar (i.e. its data has more than one element) and requires
+     407              :   /// gradient, the function additionally requires specifying ``gradient``.
+     408              :   /// It should be a tensor of matching type and location, that contains
+     409              :   /// the gradient of the differentiated function w.r.t. this Tensor.
+     410              :   ///
+     411              :   /// This function accumulates gradients in the leaves - you might need to
+     412              :   /// zero them before calling it.
+     413              :   ///
+     414              :   /// \param gradient Gradient w.r.t. the
+     415              :   ///     tensor. If it is a tensor, it will be automatically converted
+     416              :   ///     to a Tensor that does not require grad unless ``create_graph`` is True.
+     417              :   ///     None values can be specified for scalar Tensors or ones that
+     418              :   ///     don't require grad. If a None value would be acceptable then
+     419              :   ///     this argument is optional.
+     420              :   /// \param retain_graph If ``false``, the graph used to compute
+     421              :   ///     the grads will be freed. Note that in nearly all cases setting
+     422              :   ///     this option to True is not needed and often can be worked around
+     423              :   ///     in a much more efficient way. Defaults to the value of
+     424              :   ///     ``create_graph``.
+     425              :   /// \param create_graph If ``true``, graph of the derivative will
+     426              :   ///     be constructed, allowing to compute higher order derivative
+     427              :   ///     products. Defaults to ``false``.
+     428              :   /// \param inputs Inputs w.r.t. which the gradient will be accumulated into
+     429              :   ///     ``at::Tensor::grad``. All other Tensors will be ignored. If not
+     430              :   ///     provided, the gradient is accumulated into all the leaf Tensors
+     431              :   ///     that were used to compute the current tensor.
+     432              :   ///     When inputs are provided and a given input is not a leaf,
+     433              :   ///     the current implementation will call its grad_fn (even though it is not strictly needed to get this gradients).
+     434              :   ///     It is an implementation detail on which the user should not rely.
+     435              :   ///     See https://github.com/pytorch/pytorch/pull/60521#issuecomment-867061780 for more details.
+     436              :   void backward(const Tensor & gradient={}, c10::optional<bool> retain_graph=c10::nullopt, bool create_graph=false, c10::optional<TensorList> inputs=c10::nullopt) const {
+     437              :     // NB: Adding this wrapper to _backward here because we'd like our
+     438              :     // 'backwards' api to accept the 'inputs' argument optionally. Since code gen
+     439              :     // currently does not support optional of TensorList our approach is to replace
+     440              :     // backward in native_functions.yaml with _backward and call it here instead.
+     441              :     if (inputs.has_value()) {
+     442              :       TORCH_CHECK(inputs.value().size() > 0, "'inputs' argument to backward cannot be empty")
+     443              :       this->_backward(inputs.value(), gradient, retain_graph, create_graph);
+     444              :     } else {
+     445              :       this->_backward({}, gradient, retain_graph, create_graph);
+     446              :     }
+     447              :   }
+     448              : 
+     449              :   /// \fn Tensor detach() const;
+     450              :   ///
+     451              :   /// Returns a new Tensor, detached from the current graph.
+     452              :   /// The result will never require gradient.
+     453              : 
+     454              :   /// \fn Tensor & detach_() const;
+     455              :   ///
+     456              :   /// Detaches the Tensor from the graph that created it, making it a leaf.
+     457              :   /// Views cannot be detached in-place.
+     458              : 
+     459              :   /// \fn void retain_grad() const;
+     460              :   ///
+     461              :   /// Enables this Tensor to have their :attr:`grad` populated during
+     462              :   /// :func:`backward`. This is a no-op for leaf tensors.
+     463              : 
+     464              :   /// \fn bool retains_grad() const;
+     465              :   ///
+     466              :   /// Is ``true`` if this Tensor is non-leaf and its :attr:`grad` is enabled to be
+     467              :   /// populated during :func:`backward`, ``false`` otherwise.
+     468              : 
+     469              :   const Tensor& set_requires_grad(bool requires_grad) const {
+     470              :     TensorBase::set_requires_grad(requires_grad);
+     471              :     return *this;
+     472              :   }
+     473              : 
+     474              :   /// Return a mutable reference to the gradient. This is conventionally
+     475              :   /// used as `t.grad() = x` to set a gradient to a completely new tensor.
+     476              :   /// Note that this function work with a non-const Tensor and is not
+     477              :   /// thread safe.
+     478              :   Tensor& mutable_grad() const {
+     479              :     return impl_->mutable_grad();
+     480              :   }
+     481              : 
+     482              :   /// This function returns an undefined tensor by default and returns a defined tensor
+     483              :   /// the first time a call to `backward()` computes gradients for this Tensor.
+     484              :   /// The attribute will then contain the gradients computed and future calls
+     485              :   /// to `backward()` will accumulate (add) gradients into it.
+     486              :   const Tensor& grad() const {
+     487              :     const Tensor& maybe_grad = impl_->grad();
+     488              :     if (!is_leaf() && !retains_grad() && !maybe_grad.defined()) {
+     489              :       TORCH_WARN(
+     490              :         "The .grad attribute of a Tensor that is not a leaf Tensor is being accessed. Its .grad "
+     491              :         "attribute won't be populated during autograd.backward(). If you indeed want the .grad "
+     492              :         "field to be populated for a non-leaf Tensor, use .retain_grad() on the non-leaf Tensor. "
+     493              :         "If you access the non-leaf Tensor by mistake, make sure you access the leaf Tensor "
+     494              :         "instead. See github.com/pytorch/pytorch/pull/30531 for more informations.");
+     495              :     }
+     496              :     return maybe_grad;
+     497              :   }
+     498              : 
+     499              :   // The Forward AD API functions below are low level and are not to be used by end
+     500              :   // users who should use the API provided in torch/csrc/autograd.h
+     501              : 
+     502              :   /// This function returns the forward gradient for this Tensor at the given level.
+     503              :   const Tensor& _fw_grad(uint64_t level) const {
+     504              :     return impl_->_fw_grad(level, *this);
+     505              :   }
+     506              : 
+     507              :   /// This function can be used to set the value of the forward grad.
+     508              :   /// Note that the given new_grad might not be used directly if it has different
+     509              :   /// metadata (size/stride/storage offset) compared to this Tensor. In that case,
+     510              :   /// new_grad content will be copied into a new Tensor
+     511              :   void _set_fw_grad(const TensorBase& new_grad, uint64_t level, bool is_inplace_op) const {
+     512              :     impl_->_set_fw_grad(new_grad, *this, level, is_inplace_op);
+     513              :   }
+     514              : 
+     515              : 
+     516              :   // STOP.  Thinking of adding a method here, which only makes use
+     517              :   // of other ATen methods?  Define it in native_functions.yaml.
+     518              : 
+     519              :   //example
+     520              :   //Tensor * add(Tensor & b);
+     521              :   void __dispatch__backward(at::TensorList inputs, const c10::optional<at::Tensor> & gradient={}, c10::optional<bool> retain_graph=c10::nullopt, bool create_graph=false) const;
+     522              :   void __dispatch_set_data(const at::Tensor & new_data) const;
+     523              :   at::Tensor __dispatch_data() const;
+     524              :   bool __dispatch_is_leaf() const;
+     525              :   int64_t __dispatch_output_nr() const;
+     526              :   int64_t __dispatch__version() const;
+     527              :   at::Tensor & __dispatch_requires_grad_(bool requires_grad=true) const;
+     528              :   void __dispatch_retain_grad() const;
+     529              :   bool __dispatch_retains_grad() const;
+     530              :   at::Tensor _fw_primal(int64_t level) const;
+     531              :   at::Tensor & rename_(c10::optional<at::DimnameList> names) const;
+     532              :   at::Tensor rename(c10::optional<at::DimnameList> names) const;
+     533              :   at::Tensor align_to(at::DimnameList names) const;
+     534              :   at::Tensor align_to(at::DimnameList order, int64_t ellipsis_idx) const;
+     535              :   at::Tensor align_as(const at::Tensor & other) const;
+     536              :   at::Tensor refine_names(at::DimnameList names) const;
+     537              :   at::Tensor abs() const;
+     538              :   at::Tensor & abs_() const;
+     539              :   at::Tensor absolute() const;
+     540              :   at::Tensor & absolute_() const;
+     541              :   at::Tensor angle() const;
+     542              :   at::Tensor sgn() const;
+     543              :   at::Tensor & sgn_() const;
+     544              :   at::Tensor chalf(c10::optional<at::MemoryFormat> memory_format=c10::nullopt) const;
+     545              :   at::Tensor _conj() const;
+     546              :   at::Tensor __dispatch_conj() const;
+     547              :   at::Tensor _conj_physical() const;
+     548              :   at::Tensor conj_physical() const;
+     549              :   at::Tensor & conj_physical_() const;
+     550              :   at::Tensor resolve_conj() const;
+     551              :   at::Tensor resolve_neg() const;
+     552              :   at::Tensor _neg_view() const;
+     553              :   at::Tensor acos() const;
+     554              :   at::Tensor & acos_() const;
+     555              :   at::Tensor arccos() const;
+     556              :   at::Tensor & arccos_() const;
+     557              :   at::Tensor add(const at::Tensor & other, const at::Scalar & alpha=1) const;
+     558              :   at::Tensor & add_(const at::Tensor & other, const at::Scalar & alpha=1) const;
+     559              :   at::Tensor add(const at::Scalar & other, const at::Scalar & alpha=1) const;
+     560              :   at::Tensor & add_(const at::Scalar & other, const at::Scalar & alpha=1) const;
+     561              :   at::Tensor addmv(const at::Tensor & mat, const at::Tensor & vec, const at::Scalar & beta=1, const at::Scalar & alpha=1) const;
+     562              :   at::Tensor & addmv_(const at::Tensor & mat, const at::Tensor & vec, const at::Scalar & beta=1, const at::Scalar & alpha=1) const;
+     563              :   at::Tensor addr(const at::Tensor & vec1, const at::Tensor & vec2, const at::Scalar & beta=1, const at::Scalar & alpha=1) const;
+     564              :   at::Tensor & addr_(const at::Tensor & vec1, const at::Tensor & vec2, const at::Scalar & beta=1, const at::Scalar & alpha=1) const;
+     565              :   at::Tensor _is_all_true() const;
+     566              :   at::Tensor _is_any_true() const;
+     567              :   at::Tensor all(int64_t dim, bool keepdim=false) const;
+     568              :   at::Tensor all(at::Dimname dim, bool keepdim=false) const;
+     569              :   bool allclose(const at::Tensor & other, double rtol=1e-05, double atol=1e-08, bool equal_nan=false) const;
+     570              :   at::Tensor any(int64_t dim, bool keepdim=false) const;
+     571              :   at::Tensor any(at::Dimname dim, bool keepdim=false) const;
+     572              :   at::Tensor argmax(c10::optional<int64_t> dim=c10::nullopt, bool keepdim=false) const;
+     573              :   at::Tensor argmin(c10::optional<int64_t> dim=c10::nullopt, bool keepdim=false) const;
+     574              :   at::Tensor acosh() const;
+     575              :   at::Tensor & acosh_() const;
+     576              :   at::Tensor arccosh() const;
+     577              :   at::Tensor & arccosh_() const;
+     578              :   at::Tensor asinh() const;
+     579              :   at::Tensor & asinh_() const;
+     580              :   at::Tensor arcsinh() const;
+     581              :   at::Tensor & arcsinh_() const;
+     582              :   at::Tensor atanh() const;
+     583              :   at::Tensor & atanh_() const;
+     584              :   at::Tensor arctanh() const;
+     585              :   at::Tensor & arctanh_() const;
+     586              :   at::Tensor as_strided(at::IntArrayRef size, at::IntArrayRef stride, c10::optional<int64_t> storage_offset=c10::nullopt) const;
+     587              :   at::Tensor as_strided_symint(c10::SymIntArrayRef size, c10::SymIntArrayRef stride, c10::optional<c10::SymInt> storage_offset=c10::nullopt) const;
+     588              :   const at::Tensor & as_strided_(at::IntArrayRef size, at::IntArrayRef stride, c10::optional<int64_t> storage_offset=c10::nullopt) const;
+     589              :   const at::Tensor & as_strided__symint(c10::SymIntArrayRef size, c10::SymIntArrayRef stride, c10::optional<c10::SymInt> storage_offset=c10::nullopt) const;
+     590              :   at::Tensor asin() const;
+     591              :   at::Tensor & asin_() const;
+     592              :   at::Tensor arcsin() const;
+     593              :   at::Tensor & arcsin_() const;
+     594              :   at::Tensor atan() const;
+     595              :   at::Tensor & atan_() const;
+     596              :   at::Tensor arctan() const;
+     597              :   at::Tensor & arctan_() const;
+     598              :   at::Tensor baddbmm(const at::Tensor & batch1, const at::Tensor & batch2, const at::Scalar & beta=1, const at::Scalar & alpha=1) const;
+     599              :   at::Tensor & baddbmm_(const at::Tensor & batch1, const at::Tensor & batch2, const at::Scalar & beta=1, const at::Scalar & alpha=1) const;
+     600              :   at::Tensor bernoulli(c10::optional<at::Generator> generator=c10::nullopt) const;
+     601              :   at::Tensor & bernoulli_(const at::Tensor & p, c10::optional<at::Generator> generator=c10::nullopt) const;
+     602              :   at::Tensor & bernoulli_(double p=0.5, c10::optional<at::Generator> generator=c10::nullopt) const;
+     603              :   at::Tensor bernoulli(double p, c10::optional<at::Generator> generator=c10::nullopt) const;
+     604              :   at::Tensor bincount(const c10::optional<at::Tensor> & weights={}, int64_t minlength=0) const;
+     605              :   at::Tensor bitwise_not() const;
+     606              :   at::Tensor & bitwise_not_() const;
+     607              :   at::Tensor copysign(const at::Tensor & other) const;
+     608              :   at::Tensor & copysign_(const at::Tensor & other) const;
+     609              :   at::Tensor copysign(const at::Scalar & other) const;
+     610              :   at::Tensor & copysign_(const at::Scalar & other) const;
+     611              :   at::Tensor logical_not() const;
+     612              :   at::Tensor & logical_not_() const;
+     613              :   at::Tensor logical_xor(const at::Tensor & other) const;
+     614              :   at::Tensor & logical_xor_(const at::Tensor & other) const;
+     615              :   at::Tensor logical_and(const at::Tensor & other) const;
+     616              :   at::Tensor & logical_and_(const at::Tensor & other) const;
+     617              :   at::Tensor logical_or(const at::Tensor & other) const;
+     618              :   at::Tensor & logical_or_(const at::Tensor & other) const;
+     619              :   at::Tensor bmm(const at::Tensor & mat2) const;
+     620              :   at::Tensor broadcast_to(at::IntArrayRef size) const;
+     621              :   at::Tensor broadcast_to_symint(c10::SymIntArrayRef size) const;
+     622              :   at::Tensor ceil() const;
+     623              :   at::Tensor & ceil_() const;
+     624              :   ::std::vector<at::Tensor> unsafe_chunk(int64_t chunks, int64_t dim=0) const;
+     625              :   ::std::vector<at::Tensor> chunk(int64_t chunks, int64_t dim=0) const;
+     626              :   ::std::vector<at::Tensor> tensor_split(int64_t sections, int64_t dim=0) const;
+     627              :   ::std::vector<at::Tensor> tensor_split_symint(c10::SymInt sections, int64_t dim=0) const;
+     628              :   ::std::vector<at::Tensor> tensor_split(at::IntArrayRef indices, int64_t dim=0) const;
+     629              :   ::std::vector<at::Tensor> tensor_split_symint(c10::SymIntArrayRef indices, int64_t dim=0) const;
+     630              :   ::std::vector<at::Tensor> tensor_split(const at::Tensor & tensor_indices_or_sections, int64_t dim=0) const;
+     631              :   at::Tensor clamp(const c10::optional<at::Scalar> & min, const c10::optional<at::Scalar> & max=c10::nullopt) const;
+     632              :   at::Tensor clamp(const c10::optional<at::Tensor> & min={}, const c10::optional<at::Tensor> & max={}) const;
+     633              :   at::Tensor & clamp_(const c10::optional<at::Scalar> & min, const c10::optional<at::Scalar> & max=c10::nullopt) const;
+     634              :   at::Tensor & clamp_(const c10::optional<at::Tensor> & min={}, const c10::optional<at::Tensor> & max={}) const;
+     635              :   at::Tensor clamp_max(const at::Scalar & max) const;
+     636              :   at::Tensor clamp_max(const at::Tensor & max) const;
+     637              :   at::Tensor & clamp_max_(const at::Scalar & max) const;
+     638              :   at::Tensor & clamp_max_(const at::Tensor & max) const;
+     639              :   at::Tensor clamp_min(const at::Scalar & min) const;
+     640              :   at::Tensor clamp_min(const at::Tensor & min) const;
+     641              :   at::Tensor & clamp_min_(const at::Scalar & min) const;
+     642              :   at::Tensor & clamp_min_(const at::Tensor & min) const;
+     643              :   at::Tensor clip(const c10::optional<at::Scalar> & min, const c10::optional<at::Scalar> & max=c10::nullopt) const;
+     644              :   at::Tensor clip(const c10::optional<at::Tensor> & min={}, const c10::optional<at::Tensor> & max={}) const;
+     645              :   at::Tensor & clip_(const c10::optional<at::Scalar> & min, const c10::optional<at::Scalar> & max=c10::nullopt) const;
+     646              :   at::Tensor & clip_(const c10::optional<at::Tensor> & min={}, const c10::optional<at::Tensor> & max={}) const;
+     647              :   at::Tensor __dispatch_contiguous(at::MemoryFormat memory_format=MemoryFormat::Contiguous) const;
+     648              :   at::Tensor & copy_(const at::Tensor & src, bool non_blocking=false) const;
+     649              :   at::Tensor cos() const;
+     650              :   at::Tensor & cos_() const;
+     651              :   at::Tensor cosh() const;
+     652              :   at::Tensor & cosh_() const;
+     653              :   at::Tensor count_nonzero(at::IntArrayRef dim) const;
+     654              :   at::Tensor count_nonzero(c10::optional<int64_t> dim=c10::nullopt) const;
+     655              :   at::Tensor cov(int64_t correction=1, const c10::optional<at::Tensor> & fweights={}, const c10::optional<at::Tensor> & aweights={}) const;
+     656              :   at::Tensor corrcoef() const;
+     657              :   ::std::tuple<at::Tensor,at::Tensor> cummax(int64_t dim) const;
+     658              :   ::std::tuple<at::Tensor,at::Tensor> cummax(at::Dimname dim) const;
+     659              :   ::std::tuple<at::Tensor,at::Tensor> cummin(int64_t dim) const;
+     660              :   ::std::tuple<at::Tensor,at::Tensor> cummin(at::Dimname dim) const;
+     661              :   at::Tensor cumprod(int64_t dim, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     662              :   at::Tensor & cumprod_(int64_t dim, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     663              :   at::Tensor cumprod(at::Dimname dim, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     664              :   at::Tensor & cumprod_(at::Dimname dim, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     665              :   at::Tensor cumsum(int64_t dim, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     666              :   at::Tensor & cumsum_(int64_t dim, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     667              :   at::Tensor cumsum(at::Dimname dim, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     668              :   at::Tensor & cumsum_(at::Dimname dim, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     669              :   at::Tensor diag_embed(int64_t offset=0, int64_t dim1=-2, int64_t dim2=-1) const;
+     670              :   at::Tensor diagflat(int64_t offset=0) const;
+     671              :   at::Tensor diagonal(int64_t offset=0, int64_t dim1=0, int64_t dim2=1) const;
+     672              :   at::Tensor diagonal(at::Dimname outdim, at::Dimname dim1, at::Dimname dim2, int64_t offset=0) const;
+     673              :   at::Tensor & fill_diagonal_(const at::Scalar & fill_value, bool wrap=false) const;
+     674              :   at::Tensor diff(int64_t n=1, int64_t dim=-1, const c10::optional<at::Tensor> & prepend={}, const c10::optional<at::Tensor> & append={}) const;
+     675              :   at::Tensor div(const at::Tensor & other) const;
+     676              :   at::Tensor & div_(const at::Tensor & other) const;
+     677              :   at::Tensor div(const at::Tensor & other, c10::optional<c10::string_view> rounding_mode) const;
+     678              :   at::Tensor & div_(const at::Tensor & other, c10::optional<c10::string_view> rounding_mode) const;
+     679              :   at::Tensor div(const at::Scalar & other) const;
+     680              :   at::Tensor & div_(const at::Scalar & other) const;
+     681              :   at::Tensor div(const at::Scalar & other, c10::optional<c10::string_view> rounding_mode) const;
+     682              :   at::Tensor & div_(const at::Scalar & other, c10::optional<c10::string_view> rounding_mode) const;
+     683              :   at::Tensor divide(const at::Tensor & other) const;
+     684              :   at::Tensor & divide_(const at::Tensor & other) const;
+     685              :   at::Tensor divide(const at::Scalar & other) const;
+     686              :   at::Tensor & divide_(const at::Scalar & other) const;
+     687              :   at::Tensor divide(const at::Tensor & other, c10::optional<c10::string_view> rounding_mode) const;
+     688              :   at::Tensor & divide_(const at::Tensor & other, c10::optional<c10::string_view> rounding_mode) const;
+     689              :   at::Tensor divide(const at::Scalar & other, c10::optional<c10::string_view> rounding_mode) const;
+     690              :   at::Tensor & divide_(const at::Scalar & other, c10::optional<c10::string_view> rounding_mode) const;
+     691              :   at::Tensor true_divide(const at::Tensor & other) const;
+     692              :   at::Tensor & true_divide_(const at::Tensor & other) const;
+     693              :   at::Tensor true_divide(const at::Scalar & other) const;
+     694              :   at::Tensor & true_divide_(const at::Scalar & other) const;
+     695              :   at::Tensor dot(const at::Tensor & tensor) const;
+     696              :   at::Tensor vdot(const at::Tensor & other) const;
+     697              :   at::Tensor new_empty(at::IntArrayRef size, at::TensorOptions options={}) const;
+     698              :   at::Tensor new_empty(at::IntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const;
+     699              :   at::Tensor new_empty_symint(c10::SymIntArrayRef size, at::TensorOptions options={}) const;
+     700              :   at::Tensor new_empty_symint(c10::SymIntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const;
+     701              :   at::Tensor new_empty_strided(at::IntArrayRef size, at::IntArrayRef stride, at::TensorOptions options={}) const;
+     702              :   at::Tensor new_empty_strided(at::IntArrayRef size, at::IntArrayRef stride, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const;
+     703              :   at::Tensor new_empty_strided_symint(c10::SymIntArrayRef size, c10::SymIntArrayRef stride, at::TensorOptions options={}) const;
+     704              :   at::Tensor new_empty_strided_symint(c10::SymIntArrayRef size, c10::SymIntArrayRef stride, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const;
+     705              :   at::Tensor new_full(at::IntArrayRef size, const at::Scalar & fill_value, at::TensorOptions options={}) const;
+     706              :   at::Tensor new_full(at::IntArrayRef size, const at::Scalar & fill_value, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const;
+     707              :   at::Tensor new_full_symint(c10::SymIntArrayRef size, const at::Scalar & fill_value, at::TensorOptions options={}) const;
+     708              :   at::Tensor new_full_symint(c10::SymIntArrayRef size, const at::Scalar & fill_value, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const;
+     709              :   at::Tensor new_zeros(at::IntArrayRef size, at::TensorOptions options={}) const;
+     710              :   at::Tensor new_zeros(at::IntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const;
+     711              :   at::Tensor new_zeros_symint(c10::SymIntArrayRef size, at::TensorOptions options={}) const;
+     712              :   at::Tensor new_zeros_symint(c10::SymIntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const;
+     713              :   at::Tensor new_ones(at::IntArrayRef size, at::TensorOptions options={}) const;
+     714              :   at::Tensor new_ones(at::IntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const;
+     715              :   at::Tensor new_ones_symint(c10::SymIntArrayRef size, at::TensorOptions options={}) const;
+     716              :   at::Tensor new_ones_symint(c10::SymIntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const;
+     717              :   const at::Tensor & resize_(at::IntArrayRef size, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) const;
+     718              :   const at::Tensor & resize__symint(c10::SymIntArrayRef size, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) const;
+     719              :   at::Tensor erf() const;
+     720              :   at::Tensor & erf_() const;
+     721              :   at::Tensor erfc() const;
+     722              :   at::Tensor & erfc_() const;
+     723              :   at::Tensor exp() const;
+     724              :   at::Tensor & exp_() const;
+     725              :   at::Tensor exp2() const;
+     726              :   at::Tensor & exp2_() const;
+     727              :   at::Tensor expm1() const;
+     728              :   at::Tensor & expm1_() const;
+     729              :   at::Tensor expand(at::IntArrayRef size, bool implicit=false) const;
+     730              :   at::Tensor expand_symint(c10::SymIntArrayRef size, bool implicit=false) const;
+     731              :   at::Tensor expand_as(const at::Tensor & other) const;
+     732              :   at::Tensor flatten(int64_t start_dim=0, int64_t end_dim=-1) const;
+     733              :   at::Tensor flatten(int64_t start_dim, int64_t end_dim, at::Dimname out_dim) const;
+     734              :   at::Tensor flatten(at::Dimname start_dim, at::Dimname end_dim, at::Dimname out_dim) const;
+     735              :   at::Tensor flatten(at::DimnameList dims, at::Dimname out_dim) const;
+     736              :   at::Tensor unflatten(int64_t dim, at::IntArrayRef sizes) const;
+     737              :   at::Tensor unflatten_symint(int64_t dim, c10::SymIntArrayRef sizes) const;
+     738              :   at::Tensor unflatten(at::Dimname dim, at::IntArrayRef sizes, at::DimnameList names) const;
+     739              :   at::Tensor unflatten_symint(at::Dimname dim, c10::SymIntArrayRef sizes, at::DimnameList names) const;
+     740              :   at::Tensor & fill_(const at::Scalar & value) const;
+     741              :   at::Tensor & fill_(const at::Tensor & value) const;
+     742              :   at::Tensor floor() const;
+     743              :   at::Tensor & floor_() const;
+     744              :   at::Tensor floor_divide(const at::Tensor & other) const;
+     745              :   at::Tensor & floor_divide_(const at::Tensor & other) const;
+     746              :   at::Tensor floor_divide(const at::Scalar & other) const;
+     747              :   at::Tensor & floor_divide_(const at::Scalar & other) const;
+     748              :   at::Tensor frac() const;
+     749              :   at::Tensor & frac_() const;
+     750              :   at::Tensor gcd(const at::Tensor & other) const;
+     751              :   at::Tensor & gcd_(const at::Tensor & other) const;
+     752              :   at::Tensor lcm(const at::Tensor & other) const;
+     753              :   at::Tensor & lcm_(const at::Tensor & other) const;
+     754              :   at::Tensor index(const c10::List<c10::optional<at::Tensor>> & indices) const;
+     755              :   at::Tensor & index_copy_(int64_t dim, const at::Tensor & index, const at::Tensor & source) const;
+     756              :   at::Tensor index_copy(int64_t dim, const at::Tensor & index, const at::Tensor & source) const;
+     757              :   at::Tensor & index_copy_(at::Dimname dim, const at::Tensor & index, const at::Tensor & source) const;
+     758              :   at::Tensor index_copy(at::Dimname dim, const at::Tensor & index, const at::Tensor & source) const;
+     759              :   at::Tensor & index_put_(const c10::List<c10::optional<at::Tensor>> & indices, const at::Tensor & values, bool accumulate=false) const;
+     760              :   at::Tensor index_put(const c10::List<c10::optional<at::Tensor>> & indices, const at::Tensor & values, bool accumulate=false) const;
+     761              :   at::Tensor isclose(const at::Tensor & other, double rtol=1e-05, double atol=1e-08, bool equal_nan=false) const;
+     762              :   at::Tensor isnan() const;
+     763              :   bool is_distributed() const;
+     764              :   bool __dispatch_is_floating_point() const;
+     765              :   bool __dispatch_is_complex() const;
+     766              :   bool __dispatch_is_conj() const;
+     767              :   bool __dispatch__is_zerotensor() const;
+     768              :   bool __dispatch_is_neg() const;
+     769              :   at::Tensor isreal() const;
+     770              :   bool is_nonzero() const;
+     771              :   bool is_same_size(const at::Tensor & other) const;
+     772              :   bool __dispatch_is_signed() const;
+     773              :   bool __dispatch_is_inference() const;
+     774              :   at::Tensor kron(const at::Tensor & other) const;
+     775              :   ::std::tuple<at::Tensor,at::Tensor> kthvalue(int64_t k, int64_t dim=-1, bool keepdim=false) const;
+     776              :   ::std::tuple<at::Tensor,at::Tensor> kthvalue(int64_t k, at::Dimname dim, bool keepdim=false) const;
+     777              :   at::Tensor nan_to_num(c10::optional<double> nan=c10::nullopt, c10::optional<double> posinf=c10::nullopt, c10::optional<double> neginf=c10::nullopt) const;
+     778              :   at::Tensor & nan_to_num_(c10::optional<double> nan=c10::nullopt, c10::optional<double> posinf=c10::nullopt, c10::optional<double> neginf=c10::nullopt) const;
+     779              :   at::Tensor ldexp(const at::Tensor & other) const;
+     780              :   at::Tensor & ldexp_(const at::Tensor & other) const;
+     781              :   at::Tensor log() const;
+     782              :   at::Tensor & log_() const;
+     783              :   at::Tensor log10() const;
+     784              :   at::Tensor & log10_() const;
+     785              :   at::Tensor log1p() const;
+     786              :   at::Tensor & log1p_() const;
+     787              :   at::Tensor log2() const;
+     788              :   at::Tensor & log2_() const;
+     789              :   at::Tensor logaddexp(const at::Tensor & other) const;
+     790              :   at::Tensor logaddexp2(const at::Tensor & other) const;
+     791              :   at::Tensor xlogy(const at::Tensor & other) const;
+     792              :   at::Tensor xlogy(const at::Scalar & other) const;
+     793              :   at::Tensor & xlogy_(const at::Tensor & other) const;
+     794              :   at::Tensor & xlogy_(const at::Scalar & other) const;
+     795              :   at::Tensor log_softmax(int64_t dim, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     796              :   at::Tensor log_softmax(at::Dimname dim, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     797              :   at::Tensor logcumsumexp(int64_t dim) const;
+     798              :   at::Tensor logcumsumexp(at::Dimname dim) const;
+     799              :   at::Tensor logsumexp(at::IntArrayRef dim, bool keepdim=false) const;
+     800              :   at::Tensor logsumexp(at::DimnameList dim, bool keepdim=false) const;
+     801              :   at::Tensor matmul(const at::Tensor & other) const;
+     802              :   at::Tensor matrix_power(int64_t n) const;
+     803              :   at::Tensor matrix_exp() const;
+     804              :   ::std::tuple<at::Tensor,at::Tensor> aminmax(c10::optional<int64_t> dim=c10::nullopt, bool keepdim=false) const;
+     805              :   ::std::tuple<at::Tensor,at::Tensor> max(int64_t dim, bool keepdim=false) const;
+     806              :   ::std::tuple<at::Tensor,at::Tensor> max(at::Dimname dim, bool keepdim=false) const;
+     807              :   at::Tensor amax(at::IntArrayRef dim={}, bool keepdim=false) const;
+     808              :   at::Tensor mean(c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     809              :   at::Tensor mean(at::OptionalIntArrayRef dim, bool keepdim=false, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     810              :   at::Tensor mean(at::DimnameList dim, bool keepdim=false, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     811              :   at::Tensor nanmean(at::OptionalIntArrayRef dim=c10::nullopt, bool keepdim=false, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     812              :   at::Tensor median() const;
+     813              :   ::std::tuple<at::Tensor,at::Tensor> median(int64_t dim, bool keepdim=false) const;
+     814              :   ::std::tuple<at::Tensor,at::Tensor> median(at::Dimname dim, bool keepdim=false) const;
+     815              :   at::Tensor nanmedian() const;
+     816              :   ::std::tuple<at::Tensor,at::Tensor> nanmedian(int64_t dim, bool keepdim=false) const;
+     817              :   ::std::tuple<at::Tensor,at::Tensor> nanmedian(at::Dimname dim, bool keepdim=false) const;
+     818              :   ::std::tuple<at::Tensor,at::Tensor> min(int64_t dim, bool keepdim=false) const;
+     819              :   ::std::tuple<at::Tensor,at::Tensor> min(at::Dimname dim, bool keepdim=false) const;
+     820              :   at::Tensor amin(at::IntArrayRef dim={}, bool keepdim=false) const;
+     821              :   at::Tensor mm(const at::Tensor & mat2) const;
+     822              :   ::std::tuple<at::Tensor,at::Tensor> mode(int64_t dim=-1, bool keepdim=false) const;
+     823              :   ::std::tuple<at::Tensor,at::Tensor> mode(at::Dimname dim, bool keepdim=false) const;
+     824              :   at::Tensor mul(const at::Tensor & other) const;
+     825              :   at::Tensor & mul_(const at::Tensor & other) const;
+     826              :   at::Tensor mul(const at::Scalar & other) const;
+     827              :   at::Tensor & mul_(const at::Scalar & other) const;
+     828              :   at::Tensor multiply(const at::Tensor & other) const;
+     829              :   at::Tensor & multiply_(const at::Tensor & other) const;
+     830              :   at::Tensor multiply(const at::Scalar & other) const;
+     831              :   at::Tensor & multiply_(const at::Scalar & other) const;
+     832              :   at::Tensor mv(const at::Tensor & vec) const;
+     833              :   at::Tensor mvlgamma(int64_t p) const;
+     834              :   at::Tensor & mvlgamma_(int64_t p) const;
+     835              :   at::Tensor narrow_copy(int64_t dim, int64_t start, int64_t length) const;
+     836              :   at::Tensor narrow_copy_symint(int64_t dim, c10::SymInt start, c10::SymInt length) const;
+     837              :   at::Tensor narrow(int64_t dim, int64_t start, int64_t length) const;
+     838              :   at::Tensor narrow_symint(int64_t dim, c10::SymInt start, c10::SymInt length) const;
+     839              :   at::Tensor narrow(int64_t dim, const at::Tensor & start, int64_t length) const;
+     840              :   at::Tensor narrow_symint(int64_t dim, const at::Tensor & start, c10::SymInt length) const;
+     841              :   at::Tensor permute(at::IntArrayRef dims) const;
+     842              :   at::Tensor movedim(at::IntArrayRef source, at::IntArrayRef destination) const;
+     843              :   at::Tensor movedim(int64_t source, int64_t destination) const;
+     844              :   at::Tensor moveaxis(at::IntArrayRef source, at::IntArrayRef destination) const;
+     845              :   at::Tensor moveaxis(int64_t source, int64_t destination) const;
+     846              :   at::Tensor numpy_T() const;
+     847              :   at::Tensor matrix_H() const;
+     848              :   at::Tensor mT() const;
+     849              :   at::Tensor mH() const;
+     850              :   at::Tensor adjoint() const;
+     851              :   bool is_pinned(c10::optional<at::Device> device=c10::nullopt) const;
+     852              :   at::Tensor pin_memory(c10::optional<at::Device> device=c10::nullopt) const;
+     853              :   at::Tensor pinverse(double rcond=1e-15) const;
+     854              :   at::Tensor rad2deg() const;
+     855              :   at::Tensor & rad2deg_() const;
+     856              :   at::Tensor deg2rad() const;
+     857              :   at::Tensor & deg2rad_() const;
+     858              :   at::Tensor ravel() const;
+     859              :   at::Tensor reciprocal() const;
+     860              :   at::Tensor & reciprocal_() const;
+     861              :   at::Tensor neg() const;
+     862              :   at::Tensor & neg_() const;
+     863              :   at::Tensor negative() const;
+     864              :   at::Tensor & negative_() const;
+     865              :   at::Tensor repeat(at::IntArrayRef repeats) const;
+     866              :   at::Tensor repeat_symint(c10::SymIntArrayRef repeats) const;
+     867              :   at::Tensor repeat_interleave(const at::Tensor & repeats, c10::optional<int64_t> dim=c10::nullopt, c10::optional<int64_t> output_size=c10::nullopt) const;
+     868              :   at::Tensor repeat_interleave(int64_t repeats, c10::optional<int64_t> dim=c10::nullopt, c10::optional<int64_t> output_size=c10::nullopt) const;
+     869              :   at::Tensor repeat_interleave_symint(c10::SymInt repeats, c10::optional<int64_t> dim=c10::nullopt, c10::optional<int64_t> output_size=c10::nullopt) const;
+     870              :   at::Tensor reshape(at::IntArrayRef shape) const;
+     871              :   at::Tensor reshape_symint(c10::SymIntArrayRef shape) const;
+     872              :   at::Tensor _reshape_alias(at::IntArrayRef size, at::IntArrayRef stride) const;
+     873              :   at::Tensor _reshape_alias_symint(c10::SymIntArrayRef size, c10::SymIntArrayRef stride) const;
+     874              :   at::Tensor reshape_as(const at::Tensor & other) const;
+     875              :   at::Tensor round() const;
+     876              :   at::Tensor & round_() const;
+     877              :   at::Tensor round(int64_t decimals) const;
+     878              :   at::Tensor & round_(int64_t decimals) const;
+     879              :   at::Tensor relu() const;
+     880              :   at::Tensor & relu_() const;
+     881              :   at::Tensor prelu(const at::Tensor & weight) const;
+     882              :   at::Tensor hardshrink(const at::Scalar & lambd=0.5) const;
+     883              :   at::Tensor hardshrink_backward(const at::Tensor & grad_out, const at::Scalar & lambd) const;
+     884              :   at::Tensor rsqrt() const;
+     885              :   at::Tensor & rsqrt_() const;
+     886              :   at::Tensor select(at::Dimname dim, int64_t index) const;
+     887              :   at::Tensor select(int64_t dim, int64_t index) const;
+     888              :   at::Tensor select_symint(int64_t dim, c10::SymInt index) const;
+     889              :   at::Tensor sigmoid() const;
+     890              :   at::Tensor & sigmoid_() const;
+     891              :   at::Tensor logit(c10::optional<double> eps=c10::nullopt) const;
+     892              :   at::Tensor & logit_(c10::optional<double> eps=c10::nullopt) const;
+     893              :   at::Tensor sin() const;
+     894              :   at::Tensor & sin_() const;
+     895              :   at::Tensor sinc() const;
+     896              :   at::Tensor & sinc_() const;
+     897              :   at::Tensor sinh() const;
+     898              :   at::Tensor & sinh_() const;
+     899              :   at::Tensor detach() const;
+     900              :   at::Tensor & detach_() const;
+     901              :   int64_t size(at::Dimname dim) const;
+     902              :   at::Tensor slice(int64_t dim=0, c10::optional<int64_t> start=c10::nullopt, c10::optional<int64_t> end=c10::nullopt, int64_t step=1) const;
+     903              :   at::Tensor slice_symint(int64_t dim=0, c10::optional<c10::SymInt> start=c10::nullopt, c10::optional<c10::SymInt> end=c10::nullopt, c10::SymInt step=1) const;
+     904              :   at::Tensor slice_scatter(const at::Tensor & src, int64_t dim=0, c10::optional<int64_t> start=c10::nullopt, c10::optional<int64_t> end=c10::nullopt, int64_t step=1) const;
+     905              :   at::Tensor slice_scatter_symint(const at::Tensor & src, int64_t dim=0, c10::optional<c10::SymInt> start=c10::nullopt, c10::optional<c10::SymInt> end=c10::nullopt, c10::SymInt step=1) const;
+     906              :   at::Tensor select_scatter(const at::Tensor & src, int64_t dim, int64_t index) const;
+     907              :   at::Tensor select_scatter_symint(const at::Tensor & src, int64_t dim, c10::SymInt index) const;
+     908              :   at::Tensor diagonal_scatter(const at::Tensor & src, int64_t offset=0, int64_t dim1=0, int64_t dim2=1) const;
+     909              :   at::Tensor as_strided_scatter(const at::Tensor & src, at::IntArrayRef size, at::IntArrayRef stride, c10::optional<int64_t> storage_offset=c10::nullopt) const;
+     910              :   at::Tensor as_strided_scatter_symint(const at::Tensor & src, c10::SymIntArrayRef size, c10::SymIntArrayRef stride, c10::optional<c10::SymInt> storage_offset=c10::nullopt) const;
+     911              :   at::Tensor smm(const at::Tensor & mat2) const;
+     912              :   at::Tensor softmax(int64_t dim, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     913              :   at::Tensor softmax(at::Dimname dim, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     914              :   ::std::vector<at::Tensor> unsafe_split(int64_t split_size, int64_t dim=0) const;
+     915              :   ::std::vector<at::Tensor> unsafe_split_symint(c10::SymInt split_size, int64_t dim=0) const;
+     916              :   ::std::vector<at::Tensor> split(int64_t split_size, int64_t dim=0) const;
+     917              :   ::std::vector<at::Tensor> split_symint(c10::SymInt split_size, int64_t dim=0) const;
+     918              :   ::std::vector<at::Tensor> split(at::IntArrayRef split_size, int64_t dim=0) const;
+     919              :   ::std::vector<at::Tensor> split_symint(c10::SymIntArrayRef split_size, int64_t dim=0) const;
+     920              :   ::std::vector<at::Tensor> unsafe_split_with_sizes(at::IntArrayRef split_sizes, int64_t dim=0) const;
+     921              :   ::std::vector<at::Tensor> unsafe_split_with_sizes_symint(c10::SymIntArrayRef split_sizes, int64_t dim=0) const;
+     922              :   ::std::vector<at::Tensor> split_with_sizes(at::IntArrayRef split_sizes, int64_t dim=0) const;
+     923              :   ::std::vector<at::Tensor> split_with_sizes_symint(c10::SymIntArrayRef split_sizes, int64_t dim=0) const;
+     924              :   ::std::vector<at::Tensor> hsplit(int64_t sections) const;
+     925              :   ::std::vector<at::Tensor> hsplit(at::IntArrayRef indices) const;
+     926              :   ::std::vector<at::Tensor> vsplit(int64_t sections) const;
+     927              :   ::std::vector<at::Tensor> vsplit(at::IntArrayRef indices) const;
+     928              :   ::std::vector<at::Tensor> dsplit(int64_t sections) const;
+     929              :   ::std::vector<at::Tensor> dsplit(at::IntArrayRef indices) const;
+     930              :   at::Tensor squeeze() const;
+     931              :   at::Tensor squeeze(int64_t dim) const;
+     932              :   at::Tensor squeeze(at::Dimname dim) const;
+     933              :   at::Tensor squeeze(at::IntArrayRef dim) const;
+     934              :   at::Tensor & squeeze_() const;
+     935              :   at::Tensor & squeeze_(int64_t dim) const;
+     936              :   at::Tensor & squeeze_(at::IntArrayRef dim) const;
+     937              :   at::Tensor & squeeze_(at::Dimname dim) const;
+     938              :   at::Tensor sspaddmm(const at::Tensor & mat1, const at::Tensor & mat2, const at::Scalar & beta=1, const at::Scalar & alpha=1) const;
+     939              :   at::Tensor stft(int64_t n_fft, c10::optional<int64_t> hop_length, c10::optional<int64_t> win_length, const c10::optional<at::Tensor> & window, bool normalized, c10::optional<bool> onesided=c10::nullopt, c10::optional<bool> return_complex=c10::nullopt) const;
+     940              :   at::Tensor stft(int64_t n_fft, c10::optional<int64_t> hop_length=c10::nullopt, c10::optional<int64_t> win_length=c10::nullopt, const c10::optional<at::Tensor> & window={}, bool center=true, c10::string_view pad_mode="reflect", bool normalized=false, c10::optional<bool> onesided=c10::nullopt, c10::optional<bool> return_complex=c10::nullopt) const;
+     941              :   at::Tensor istft(int64_t n_fft, c10::optional<int64_t> hop_length=c10::nullopt, c10::optional<int64_t> win_length=c10::nullopt, const c10::optional<at::Tensor> & window={}, bool center=true, bool normalized=false, c10::optional<bool> onesided=c10::nullopt, c10::optional<int64_t> length=c10::nullopt, bool return_complex=false) const;
+     942              :   int64_t stride(at::Dimname dim) const;
+     943              :   at::Tensor sum(c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     944              :   at::Tensor sum(at::OptionalIntArrayRef dim, bool keepdim=false, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     945              :   at::Tensor sum(at::DimnameList dim, bool keepdim=false, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     946              :   at::Tensor nansum(at::OptionalIntArrayRef dim=c10::nullopt, bool keepdim=false, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     947              :   at::Tensor sum_to_size(at::IntArrayRef size) const;
+     948              :   at::Tensor sum_to_size_symint(c10::SymIntArrayRef size) const;
+     949              :   at::Tensor sqrt() const;
+     950              :   at::Tensor & sqrt_() const;
+     951              :   at::Tensor square() const;
+     952              :   at::Tensor & square_() const;
+     953              :   at::Tensor std(bool unbiased) const;
+     954              :   at::Tensor std(at::OptionalIntArrayRef dim, bool unbiased, bool keepdim=false) const;
+     955              :   at::Tensor std(at::OptionalIntArrayRef dim=c10::nullopt, const c10::optional<at::Scalar> & correction=c10::nullopt, bool keepdim=false) const;
+     956              :   at::Tensor std(at::DimnameList dim, bool unbiased, bool keepdim=false) const;
+     957              :   at::Tensor std(at::DimnameList dim, const c10::optional<at::Scalar> & correction=c10::nullopt, bool keepdim=false) const;
+     958              :   at::Tensor prod(c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     959              :   at::Tensor prod(int64_t dim, bool keepdim=false, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     960              :   at::Tensor prod(at::Dimname dim, bool keepdim=false, c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+     961              :   at::Tensor t() const;
+     962              :   at::Tensor & t_() const;
+     963              :   at::Tensor tan() const;
+     964              :   at::Tensor & tan_() const;
+     965              :   at::Tensor tanh() const;
+     966              :   at::Tensor & tanh_() const;
+     967              :   at::Tensor tile(at::IntArrayRef dims) const;
+     968              :   at::Tensor tile_symint(c10::SymIntArrayRef dims) const;
+     969              :   at::Tensor transpose(int64_t dim0, int64_t dim1) const;
+     970              :   at::Tensor transpose(at::Dimname dim0, at::Dimname dim1) const;
+     971              :   at::Tensor & transpose_(int64_t dim0, int64_t dim1) const;
+     972              :   at::Tensor flip(at::IntArrayRef dims) const;
+     973              :   at::Tensor fliplr() const;
+     974              :   at::Tensor flipud() const;
+     975              :   at::Tensor roll(at::IntArrayRef shifts, at::IntArrayRef dims={}) const;
+     976              :   at::Tensor roll_symint(c10::SymIntArrayRef shifts, at::IntArrayRef dims={}) const;
+     977              :   at::Tensor rot90(int64_t k=1, at::IntArrayRef dims={0,1}) const;
+     978              :   at::Tensor _nested_tensor_size() const;
+     979              :   at::Tensor _nested_tensor_strides() const;
+     980              :   at::Tensor _nested_tensor_storage_offsets() const;
+     981              :   at::Tensor trunc() const;
+     982              :   at::Tensor & trunc_() const;
+     983              :   at::Tensor fix() const;
+     984              :   at::Tensor & fix_() const;
+     985              :   at::Tensor type_as(const at::Tensor & other) const;
+     986              :   at::Tensor unsqueeze(int64_t dim) const;
+     987              :   at::Tensor & unsqueeze_(int64_t dim) const;
+     988              :   at::Tensor var(bool unbiased) const;
+     989              :   at::Tensor var(at::OptionalIntArrayRef dim, bool unbiased, bool keepdim=false) const;
+     990              :   at::Tensor var(at::OptionalIntArrayRef dim=c10::nullopt, const c10::optional<at::Scalar> & correction=c10::nullopt, bool keepdim=false) const;
+     991              :   at::Tensor var(at::DimnameList dim, bool unbiased, bool keepdim=false) const;
+     992              :   at::Tensor var(at::DimnameList dim, const c10::optional<at::Scalar> & correction=c10::nullopt, bool keepdim=false) const;
+     993              :   at::Tensor view_as(const at::Tensor & other) const;
+     994              :   at::Tensor where(const at::Tensor & condition, const at::Tensor & other) const;
+     995              :   at::Tensor where(const at::Tensor & condition, const at::Scalar & other) const;
+     996              :   at::Tensor norm(const c10::optional<at::Scalar> & p, at::ScalarType dtype) const;
+     997              :   at::Tensor norm(const at::Scalar & p=2) const;
+     998              :   at::Tensor norm(const c10::optional<at::Scalar> & p, at::IntArrayRef dim, bool keepdim, at::ScalarType dtype) const;
+     999              :   at::Tensor norm(const c10::optional<at::Scalar> & p, at::IntArrayRef dim, bool keepdim=false) const;
+    1000              :   at::Tensor norm(const c10::optional<at::Scalar> & p, at::DimnameList dim, bool keepdim, at::ScalarType dtype) const;
+    1001              :   at::Tensor norm(const c10::optional<at::Scalar> & p, at::DimnameList dim, bool keepdim=false) const;
+    1002              :   ::std::tuple<at::Tensor,at::Tensor> frexp() const;
+    1003              :   at::Tensor clone(c10::optional<at::MemoryFormat> memory_format=c10::nullopt) const;
+    1004              :   at::Tensor positive() const;
+    1005              :   const at::Tensor & resize_as_(const at::Tensor & the_template, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) const;
+    1006              :   const at::Tensor & resize_as_sparse_(const at::Tensor & the_template) const;
+    1007              :   at::Tensor & zero_() const;
+    1008              :   at::Tensor sub(const at::Tensor & other, const at::Scalar & alpha=1) const;
+    1009              :   at::Tensor & sub_(const at::Tensor & other, const at::Scalar & alpha=1) const;
+    1010              :   at::Tensor sub(const at::Scalar & other, const at::Scalar & alpha=1) const;
+    1011              :   at::Tensor & sub_(const at::Scalar & other, const at::Scalar & alpha=1) const;
+    1012              :   at::Tensor subtract(const at::Tensor & other, const at::Scalar & alpha=1) const;
+    1013              :   at::Tensor & subtract_(const at::Tensor & other, const at::Scalar & alpha=1) const;
+    1014              :   at::Tensor subtract(const at::Scalar & other, const at::Scalar & alpha=1) const;
+    1015              :   at::Tensor & subtract_(const at::Scalar & other, const at::Scalar & alpha=1) const;
+    1016              :   at::Tensor heaviside(const at::Tensor & values) const;
+    1017              :   at::Tensor & heaviside_(const at::Tensor & values) const;
+    1018              :   at::Tensor addmm(const at::Tensor & mat1, const at::Tensor & mat2, const at::Scalar & beta=1, const at::Scalar & alpha=1) const;
+    1019              :   at::Tensor & addmm_(const at::Tensor & mat1, const at::Tensor & mat2, const at::Scalar & beta=1, const at::Scalar & alpha=1) const;
+    1020              :   at::Tensor _addmm_activation(const at::Tensor & mat1, const at::Tensor & mat2, const at::Scalar & beta=1, const at::Scalar & alpha=1, bool use_gelu=false) const;
+    1021              :   const at::Tensor & sparse_resize_(at::IntArrayRef size, int64_t sparse_dim, int64_t dense_dim) const;
+    1022              :   const at::Tensor & sparse_resize_and_clear_(at::IntArrayRef size, int64_t sparse_dim, int64_t dense_dim) const;
+    1023              :   at::Tensor sparse_mask(const at::Tensor & mask) const;
+    1024              :   at::Tensor _sparse_mask_projection(const at::Tensor & mask, bool accumulate_matches=false) const;
+    1025              :   at::Tensor to_dense(c10::optional<at::ScalarType> dtype=c10::nullopt, c10::optional<bool> masked_grad=c10::nullopt) const;
+    1026              :   at::Tensor _to_dense(c10::optional<at::ScalarType> dtype=c10::nullopt, c10::optional<bool> masked_grad=c10::nullopt) const;
+    1027              :   int64_t sparse_dim() const;
+    1028              :   int64_t _dimI() const;
+    1029              :   int64_t dense_dim() const;
+    1030              :   int64_t _dimV() const;
+    1031              :   int64_t _nnz() const;
+    1032              :   at::Tensor coalesce() const;
+    1033              :   bool is_coalesced() const;
+    1034              :   at::Tensor _indices() const;
+    1035              :   at::Tensor _values() const;
+    1036              :   at::Tensor & _coalesced_(bool coalesced) const;
+    1037              :   at::Tensor indices() const;
+    1038              :   at::Tensor values() const;
+    1039              :   at::Tensor crow_indices() const;
+    1040              :   at::Tensor col_indices() const;
+    1041              :   at::Tensor ccol_indices() const;
+    1042              :   at::Tensor row_indices() const;
+    1043              :   ::std::vector<at::Tensor> unbind(int64_t dim=0) const;
+    1044              :   ::std::vector<at::Tensor> unbind(at::Dimname dim) const;
+    1045              :   at::Tensor to_sparse(int64_t sparse_dim) const;
+    1046              :   at::Tensor _to_sparse(int64_t sparse_dim) const;
+    1047              :   at::Tensor to_sparse(c10::optional<at::Layout> layout=c10::nullopt, at::OptionalIntArrayRef blocksize=c10::nullopt, c10::optional<int64_t> dense_dim=c10::nullopt) const;
+    1048              :   at::Tensor _to_sparse(c10::optional<at::Layout> layout=c10::nullopt, at::OptionalIntArrayRef blocksize=c10::nullopt, c10::optional<int64_t> dense_dim=c10::nullopt) const;
+    1049              :   at::Tensor to_sparse_csr(c10::optional<int64_t> dense_dim=c10::nullopt) const;
+    1050              :   at::Tensor _to_sparse_csr(c10::optional<int64_t> dense_dim=c10::nullopt) const;
+    1051              :   at::Tensor to_sparse_csc(c10::optional<int64_t> dense_dim=c10::nullopt) const;
+    1052              :   at::Tensor _to_sparse_csc(c10::optional<int64_t> dense_dim=c10::nullopt) const;
+    1053              :   at::Tensor to_sparse_bsr(at::IntArrayRef blocksize, c10::optional<int64_t> dense_dim=c10::nullopt) const;
+    1054              :   at::Tensor _to_sparse_bsr(at::IntArrayRef blocksize, c10::optional<int64_t> dense_dim=c10::nullopt) const;
+    1055              :   at::Tensor to_sparse_bsc(at::IntArrayRef blocksize, c10::optional<int64_t> dense_dim=c10::nullopt) const;
+    1056              :   at::Tensor _to_sparse_bsc(at::IntArrayRef blocksize, c10::optional<int64_t> dense_dim=c10::nullopt) const;
+    1057              :   at::Tensor to_mkldnn(c10::optional<at::ScalarType> dtype=c10::nullopt) const;
+    1058              :   at::Tensor dequantize() const;
+    1059              :   double q_scale() const;
+    1060              :   int64_t q_zero_point() const;
+    1061              :   at::Tensor q_per_channel_scales() const;
+    1062              :   at::Tensor q_per_channel_zero_points() const;
+    1063              :   int64_t q_per_channel_axis() const;
+    1064              :   at::Tensor int_repr() const;
+    1065              :   at::QScheme qscheme() const;
+    1066              :   at::Tensor _autocast_to_reduced_precision(bool cuda_enabled, bool cpu_enabled, at::ScalarType cuda_dtype, at::ScalarType cpu_dtype) const;
+    1067              :   at::Tensor _autocast_to_full_precision(bool cuda_enabled, bool cpu_enabled) const;
+    1068              :   at::Tensor to(at::TensorOptions options={}, bool non_blocking=false, bool copy=false, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) const;
+    1069              :   at::Tensor to(c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory, bool non_blocking, bool copy, c10::optional<at::MemoryFormat> memory_format) const;
+    1070              :   at::Tensor to(at::Device device, at::ScalarType dtype, bool non_blocking=false, bool copy=false, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) const;
+    1071              :   at::Tensor to(at::ScalarType dtype, bool non_blocking=false, bool copy=false, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) const;
+    1072              :   at::Tensor to(const at::Tensor & other, bool non_blocking=false, bool copy=false, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) const;
+    1073              :   at::Scalar item() const;
+    1074              :   at::Tensor & set_(at::Storage source) const;
+    1075              :   at::Tensor & set_(at::Storage source, int64_t storage_offset, at::IntArrayRef size, at::IntArrayRef stride={}) const;
+    1076              :   at::Tensor & set__symint(at::Storage source, c10::SymInt storage_offset, c10::SymIntArrayRef size, c10::SymIntArrayRef stride={}) const;
+    1077              :   at::Tensor & set_(const at::Tensor & source, int64_t storage_offset, at::IntArrayRef size, at::IntArrayRef stride={}) const;
+    1078              :   at::Tensor & set__symint(const at::Tensor & source, c10::SymInt storage_offset, c10::SymIntArrayRef size, c10::SymIntArrayRef stride={}) const;
+    1079              :   at::Tensor & set_(const at::Tensor & source) const;
+    1080              :   at::Tensor & set_() const;
+    1081              :   bool is_set_to(const at::Tensor & tensor) const;
+    1082              :   at::Tensor & masked_fill_(const at::Tensor & mask, const at::Scalar & value) const;
+    1083              :   at::Tensor masked_fill(const at::Tensor & mask, const at::Scalar & value) const;
+    1084              :   at::Tensor & masked_fill_(const at::Tensor & mask, const at::Tensor & value) const;
+    1085              :   at::Tensor masked_fill(const at::Tensor & mask, const at::Tensor & value) const;
+    1086              :   at::Tensor & masked_scatter_(const at::Tensor & mask, const at::Tensor & source) const;
+    1087              :   at::Tensor masked_scatter(const at::Tensor & mask, const at::Tensor & source) const;
+    1088              :   at::Tensor view(at::IntArrayRef size) const;
+    1089              :   at::Tensor view_symint(c10::SymIntArrayRef size) const;
+    1090              :   at::Tensor view(at::ScalarType dtype) const;
+    1091              :   at::Tensor & put_(const at::Tensor & index, const at::Tensor & source, bool accumulate=false) const;
+    1092              :   at::Tensor put(const at::Tensor & index, const at::Tensor & source, bool accumulate=false) const;
+    1093              :   at::Tensor & index_add_(int64_t dim, const at::Tensor & index, const at::Tensor & source, const at::Scalar & alpha=1) const;
+    1094              :   at::Tensor index_add(int64_t dim, const at::Tensor & index, const at::Tensor & source, const at::Scalar & alpha=1) const;
+    1095              :   at::Tensor index_add(at::Dimname dim, const at::Tensor & index, const at::Tensor & source, const at::Scalar & alpha=1) const;
+    1096              :   at::Tensor & index_reduce_(int64_t dim, const at::Tensor & index, const at::Tensor & source, c10::string_view reduce, bool include_self=true) const;
+    1097              :   at::Tensor index_reduce(int64_t dim, const at::Tensor & index, const at::Tensor & source, c10::string_view reduce, bool include_self=true) const;
+    1098              :   at::Tensor & index_fill_(int64_t dim, const at::Tensor & index, const at::Scalar & value) const;
+    1099              :   at::Tensor index_fill(int64_t dim, const at::Tensor & index, const at::Scalar & value) const;
+    1100              :   at::Tensor & index_fill_(int64_t dim, const at::Tensor & index, const at::Tensor & value) const;
+    1101              :   at::Tensor index_fill(int64_t dim, const at::Tensor & index, const at::Tensor & value) const;
+    1102              :   at::Tensor & index_fill_(at::Dimname dim, const at::Tensor & index, const at::Scalar & value) const;
+    1103              :   at::Tensor & index_fill_(at::Dimname dim, const at::Tensor & index, const at::Tensor & value) const;
+    1104              :   at::Tensor index_fill(at::Dimname dim, const at::Tensor & index, const at::Scalar & value) const;
+    1105              :   at::Tensor index_fill(at::Dimname dim, const at::Tensor & index, const at::Tensor & value) const;
+    1106              :   at::Tensor scatter(int64_t dim, const at::Tensor & index, const at::Tensor & src) const;
+    1107              :   at::Tensor & scatter_(int64_t dim, const at::Tensor & index, const at::Tensor & src) const;
+    1108              :   at::Tensor scatter(int64_t dim, const at::Tensor & index, const at::Scalar & value) const;
+    1109              :   at::Tensor & scatter_(int64_t dim, const at::Tensor & index, const at::Scalar & value) const;
+    1110              :   at::Tensor scatter(int64_t dim, const at::Tensor & index, const at::Tensor & src, c10::string_view reduce) const;
+    1111              :   at::Tensor & scatter_(int64_t dim, const at::Tensor & index, const at::Tensor & src, c10::string_view reduce) const;
+    1112              :   at::Tensor scatter(int64_t dim, const at::Tensor & index, const at::Scalar & value, c10::string_view reduce) const;
+    1113              :   at::Tensor & scatter_(int64_t dim, const at::Tensor & index, const at::Scalar & value, c10::string_view reduce) const;
+    1114              :   at::Tensor scatter(at::Dimname dim, const at::Tensor & index, const at::Tensor & src) const;
+    1115              :   at::Tensor scatter(at::Dimname dim, const at::Tensor & index, const at::Scalar & value) const;
+    1116              :   at::Tensor scatter_add(int64_t dim, const at::Tensor & index, const at::Tensor & src) const;
+    1117              :   at::Tensor & scatter_add_(int64_t dim, const at::Tensor & index, const at::Tensor & src) const;
+    1118              :   at::Tensor scatter_add(at::Dimname dim, const at::Tensor & index, const at::Tensor & src) const;
+    1119              :   at::Tensor scatter_reduce(int64_t dim, const at::Tensor & index, const at::Tensor & src, c10::string_view reduce, bool include_self=true) const;
+    1120              :   at::Tensor & scatter_reduce_(int64_t dim, const at::Tensor & index, const at::Tensor & src, c10::string_view reduce, bool include_self=true) const;
+    1121              :   at::Tensor & eq_(const at::Scalar & other) const;
+    1122              :   at::Tensor & eq_(const at::Tensor & other) const;
+    1123              :   at::Tensor bitwise_and(const at::Scalar & other) const;
+    1124              :   at::Tensor bitwise_and(const at::Tensor & other) const;
+    1125              :   at::Tensor & bitwise_and_(const at::Scalar & other) const;
+    1126              :   at::Tensor & bitwise_and_(const at::Tensor & other) const;
+    1127              :   at::Tensor __and__(const at::Scalar & other) const;
+    1128              :   at::Tensor __and__(const at::Tensor & other) const;
+    1129              :   at::Tensor & __iand__(const at::Scalar & other) const;
+    1130              :   at::Tensor & __iand__(const at::Tensor & other) const;
+    1131              :   at::Tensor bitwise_or(const at::Scalar & other) const;
+    1132              :   at::Tensor bitwise_or(const at::Tensor & other) const;
+    1133              :   at::Tensor & bitwise_or_(const at::Scalar & other) const;
+    1134              :   at::Tensor & bitwise_or_(const at::Tensor & other) const;
+    1135              :   at::Tensor __or__(const at::Scalar & other) const;
+    1136              :   at::Tensor __or__(const at::Tensor & other) const;
+    1137              :   at::Tensor & __ior__(const at::Scalar & other) const;
+    1138              :   at::Tensor & __ior__(const at::Tensor & other) const;
+    1139              :   at::Tensor bitwise_xor(const at::Scalar & other) const;
+    1140              :   at::Tensor bitwise_xor(const at::Tensor & other) const;
+    1141              :   at::Tensor & bitwise_xor_(const at::Scalar & other) const;
+    1142              :   at::Tensor & bitwise_xor_(const at::Tensor & other) const;
+    1143              :   at::Tensor __xor__(const at::Scalar & other) const;
+    1144              :   at::Tensor __xor__(const at::Tensor & other) const;
+    1145              :   at::Tensor & __ixor__(const at::Scalar & other) const;
+    1146              :   at::Tensor & __ixor__(const at::Tensor & other) const;
+    1147              :   at::Tensor __lshift__(const at::Scalar & other) const;
+    1148              :   at::Tensor __lshift__(const at::Tensor & other) const;
+    1149              :   at::Tensor & __ilshift__(const at::Scalar & other) const;
+    1150              :   at::Tensor & __ilshift__(const at::Tensor & other) const;
+    1151              :   at::Tensor bitwise_left_shift(const at::Tensor & other) const;
+    1152              :   at::Tensor & bitwise_left_shift_(const at::Tensor & other) const;
+    1153              :   at::Tensor bitwise_left_shift(const at::Scalar & other) const;
+    1154              :   at::Tensor & bitwise_left_shift_(const at::Scalar & other) const;
+    1155              :   at::Tensor __rshift__(const at::Scalar & other) const;
+    1156              :   at::Tensor __rshift__(const at::Tensor & other) const;
+    1157              :   at::Tensor & __irshift__(const at::Scalar & other) const;
+    1158              :   at::Tensor & __irshift__(const at::Tensor & other) const;
+    1159              :   at::Tensor bitwise_right_shift(const at::Tensor & other) const;
+    1160              :   at::Tensor & bitwise_right_shift_(const at::Tensor & other) const;
+    1161              :   at::Tensor bitwise_right_shift(const at::Scalar & other) const;
+    1162              :   at::Tensor & bitwise_right_shift_(const at::Scalar & other) const;
+    1163              :   at::Tensor & tril_(int64_t diagonal=0) const;
+    1164              :   at::Tensor & triu_(int64_t diagonal=0) const;
+    1165              :   at::Tensor & digamma_() const;
+    1166              :   at::Tensor & lerp_(const at::Tensor & end, const at::Scalar & weight) const;
+    1167              :   at::Tensor & lerp_(const at::Tensor & end, const at::Tensor & weight) const;
+    1168              :   at::Tensor & addbmm_(const at::Tensor & batch1, const at::Tensor & batch2, const at::Scalar & beta=1, const at::Scalar & alpha=1) const;
+    1169              :   at::Tensor addbmm(const at::Tensor & batch1, const at::Tensor & batch2, const at::Scalar & beta=1, const at::Scalar & alpha=1) const;
+    1170              :   at::Tensor & random_(int64_t from, c10::optional<int64_t> to, c10::optional<at::Generator> generator=c10::nullopt) const;
+    1171              :   at::Tensor & random_(int64_t to, c10::optional<at::Generator> generator=c10::nullopt) const;
+    1172              :   at::Tensor & random_(c10::optional<at::Generator> generator=c10::nullopt) const;
+    1173              :   at::Tensor & uniform_(double from=0, double to=1, c10::optional<at::Generator> generator=c10::nullopt) const;
+    1174              :   at::Tensor & cauchy_(double median=0, double sigma=1, c10::optional<at::Generator> generator=c10::nullopt) const;
+    1175              :   at::Tensor & log_normal_(double mean=1, double std=2, c10::optional<at::Generator> generator=c10::nullopt) const;
+    1176              :   at::Tensor & exponential_(double lambd=1, c10::optional<at::Generator> generator=c10::nullopt) const;
+    1177              :   at::Tensor & geometric_(double p, c10::optional<at::Generator> generator=c10::nullopt) const;
+    1178              :   at::Tensor diag(int64_t diagonal=0) const;
+    1179              :   at::Tensor cross(const at::Tensor & other, c10::optional<int64_t> dim=c10::nullopt) const;
+    1180              :   at::Tensor triu(int64_t diagonal=0) const;
+    1181              :   at::Tensor tril(int64_t diagonal=0) const;
+    1182              :   at::Tensor trace() const;
+    1183              :   at::Tensor ne(const at::Scalar & other) const;
+    1184              :   at::Tensor ne(const at::Tensor & other) const;
+    1185              :   at::Tensor & ne_(const at::Scalar & other) const;
+    1186              :   at::Tensor & ne_(const at::Tensor & other) const;
+    1187              :   at::Tensor not_equal(const at::Scalar & other) const;
+    1188              :   at::Tensor not_equal(const at::Tensor & other) const;
+    1189              :   at::Tensor & not_equal_(const at::Scalar & other) const;
+    1190              :   at::Tensor & not_equal_(const at::Tensor & other) const;
+    1191              :   at::Tensor eq(const at::Scalar & other) const;
+    1192              :   at::Tensor eq(const at::Tensor & other) const;
+    1193              :   at::Tensor ge(const at::Scalar & other) const;
+    1194              :   at::Tensor ge(const at::Tensor & other) const;
+    1195              :   at::Tensor & ge_(const at::Scalar & other) const;
+    1196              :   at::Tensor & ge_(const at::Tensor & other) const;
+    1197              :   at::Tensor greater_equal(const at::Scalar & other) const;
+    1198              :   at::Tensor greater_equal(const at::Tensor & other) const;
+    1199              :   at::Tensor & greater_equal_(const at::Scalar & other) const;
+    1200              :   at::Tensor & greater_equal_(const at::Tensor & other) const;
+    1201              :   at::Tensor le(const at::Scalar & other) const;
+    1202              :   at::Tensor le(const at::Tensor & other) const;
+    1203              :   at::Tensor & le_(const at::Scalar & other) const;
+    1204              :   at::Tensor & le_(const at::Tensor & other) const;
+    1205              :   at::Tensor less_equal(const at::Scalar & other) const;
+    1206              :   at::Tensor less_equal(const at::Tensor & other) const;
+    1207              :   at::Tensor & less_equal_(const at::Scalar & other) const;
+    1208              :   at::Tensor & less_equal_(const at::Tensor & other) const;
+    1209              :   at::Tensor gt(const at::Scalar & other) const;
+    1210              :   at::Tensor gt(const at::Tensor & other) const;
+    1211              :   at::Tensor & gt_(const at::Scalar & other) const;
+    1212              :   at::Tensor & gt_(const at::Tensor & other) const;
+    1213              :   at::Tensor greater(const at::Scalar & other) const;
+    1214              :   at::Tensor greater(const at::Tensor & other) const;
+    1215              :   at::Tensor & greater_(const at::Scalar & other) const;
+    1216              :   at::Tensor & greater_(const at::Tensor & other) const;
+    1217              :   at::Tensor lt(const at::Scalar & other) const;
+    1218              :   at::Tensor lt(const at::Tensor & other) const;
+    1219              :   at::Tensor & lt_(const at::Scalar & other) const;
+    1220              :   at::Tensor & lt_(const at::Tensor & other) const;
+    1221              :   at::Tensor less(const at::Scalar & other) const;
+    1222              :   at::Tensor less(const at::Tensor & other) const;
+    1223              :   at::Tensor & less_(const at::Scalar & other) const;
+    1224              :   at::Tensor & less_(const at::Tensor & other) const;
+    1225              :   at::Tensor take(const at::Tensor & index) const;
+    1226              :   at::Tensor take_along_dim(const at::Tensor & indices, c10::optional<int64_t> dim=c10::nullopt) const;
+    1227              :   at::Tensor index_select(int64_t dim, const at::Tensor & index) const;
+    1228              :   at::Tensor index_select(at::Dimname dim, const at::Tensor & index) const;
+    1229              :   at::Tensor masked_select(const at::Tensor & mask) const;
+    1230              :   at::Tensor nonzero() const;
+    1231              :   at::Tensor nonzero_static(int64_t size, int64_t fill_value=-1) const;
+    1232              :   ::std::vector<at::Tensor> nonzero_numpy() const;
+    1233              :   at::Tensor argwhere() const;
+    1234              :   at::Tensor gather(int64_t dim, const at::Tensor & index, bool sparse_grad=false) const;
+    1235              :   at::Tensor gather(at::Dimname dim, const at::Tensor & index, bool sparse_grad=false) const;
+    1236              :   at::Tensor addcmul(const at::Tensor & tensor1, const at::Tensor & tensor2, const at::Scalar & value=1) const;
+    1237              :   at::Tensor & addcmul_(const at::Tensor & tensor1, const at::Tensor & tensor2, const at::Scalar & value=1) const;
+    1238              :   at::Tensor addcdiv(const at::Tensor & tensor1, const at::Tensor & tensor2, const at::Scalar & value=1) const;
+    1239              :   at::Tensor & addcdiv_(const at::Tensor & tensor1, const at::Tensor & tensor2, const at::Scalar & value=1) const;
+    1240              :   ::std::tuple<at::Tensor,at::Tensor> triangular_solve(const at::Tensor & A, bool upper=true, bool transpose=false, bool unitriangular=false) const;
+    1241              :   ::std::tuple<at::Tensor,at::Tensor,at::Tensor> svd(bool some=true, bool compute_uv=true) const;
+    1242              :   at::Tensor swapaxes(int64_t axis0, int64_t axis1) const;
+    1243              :   at::Tensor & swapaxes_(int64_t axis0, int64_t axis1) const;
+    1244              :   at::Tensor swapdims(int64_t dim0, int64_t dim1) const;
+    1245              :   at::Tensor & swapdims_(int64_t dim0, int64_t dim1) const;
+    1246              :   at::Tensor cholesky(bool upper=false) const;
+    1247              :   at::Tensor cholesky_solve(const at::Tensor & input2, bool upper=false) const;
+    1248              :   at::Tensor cholesky_inverse(bool upper=false) const;
+    1249              :   ::std::tuple<at::Tensor,at::Tensor> qr(bool some=true) const;
+    1250              :   ::std::tuple<at::Tensor,at::Tensor> geqrf() const;
+    1251              :   at::Tensor orgqr(const at::Tensor & input2) const;
+    1252              :   at::Tensor ormqr(const at::Tensor & input2, const at::Tensor & input3, bool left=true, bool transpose=false) const;
+    1253              :   at::Tensor lu_solve(const at::Tensor & LU_data, const at::Tensor & LU_pivots) const;
+    1254              :   at::Tensor multinomial(int64_t num_samples, bool replacement=false, c10::optional<at::Generator> generator=c10::nullopt) const;
+    1255              :   at::Tensor & lgamma_() const;
+    1256              :   at::Tensor lgamma() const;
+    1257              :   at::Tensor digamma() const;
+    1258              :   at::Tensor polygamma(int64_t n) const;
+    1259              :   at::Tensor & polygamma_(int64_t n) const;
+    1260              :   at::Tensor erfinv() const;
+    1261              :   at::Tensor & erfinv_() const;
+    1262              :   at::Tensor i0() const;
+    1263              :   at::Tensor & i0_() const;
+    1264              :   at::Tensor sign() const;
+    1265              :   at::Tensor & sign_() const;
+    1266              :   at::Tensor signbit() const;
+    1267              :   at::Tensor dist(const at::Tensor & other, const at::Scalar & p=2) const;
+    1268              :   at::Tensor & atan2_(const at::Tensor & other) const;
+    1269              :   at::Tensor atan2(const at::Tensor & other) const;
+    1270              :   at::Tensor arctan2(const at::Tensor & other) const;
+    1271              :   at::Tensor & arctan2_(const at::Tensor & other) const;
+    1272              :   at::Tensor lerp(const at::Tensor & end, const at::Scalar & weight) const;
+    1273              :   at::Tensor lerp(const at::Tensor & end, const at::Tensor & weight) const;
+    1274              :   at::Tensor histc(int64_t bins=100, const at::Scalar & min=0, const at::Scalar & max=0) const;
+    1275              :   ::std::tuple<at::Tensor,at::Tensor> histogram(const at::Tensor & bins, const c10::optional<at::Tensor> & weight={}, bool density=false) const;
+    1276              :   ::std::tuple<at::Tensor,at::Tensor> histogram(int64_t bins=100, c10::optional<at::ArrayRef<double>> range=c10::nullopt, const c10::optional<at::Tensor> & weight={}, bool density=false) const;
+    1277              :   at::Tensor fmod(const at::Scalar & other) const;
+    1278              :   at::Tensor & fmod_(const at::Scalar & other) const;
+    1279              :   at::Tensor fmod(const at::Tensor & other) const;
+    1280              :   at::Tensor & fmod_(const at::Tensor & other) const;
+    1281              :   at::Tensor hypot(const at::Tensor & other) const;
+    1282              :   at::Tensor & hypot_(const at::Tensor & other) const;
+    1283              :   at::Tensor igamma(const at::Tensor & other) const;
+    1284              :   at::Tensor & igamma_(const at::Tensor & other) const;
+    1285              :   at::Tensor igammac(const at::Tensor & other) const;
+    1286              :   at::Tensor & igammac_(const at::Tensor & other) const;
+    1287              :   at::Tensor nextafter(const at::Tensor & other) const;
+    1288              :   at::Tensor & nextafter_(const at::Tensor & other) const;
+    1289              :   at::Tensor remainder(const at::Scalar & other) const;
+    1290              :   at::Tensor & remainder_(const at::Scalar & other) const;
+    1291              :   at::Tensor remainder(const at::Tensor & other) const;
+    1292              :   at::Tensor & remainder_(const at::Tensor & other) const;
+    1293              :   at::Tensor min() const;
+    1294              :   at::Tensor fmin(const at::Tensor & other) const;
+    1295              :   at::Tensor max() const;
+    1296              :   at::Tensor fmax(const at::Tensor & other) const;
+    1297              :   at::Tensor maximum(const at::Tensor & other) const;
+    1298              :   at::Tensor max(const at::Tensor & other) const;
+    1299              :   at::Tensor minimum(const at::Tensor & other) const;
+    1300              :   at::Tensor min(const at::Tensor & other) const;
+    1301              :   at::Tensor quantile(const at::Tensor & q, c10::optional<int64_t> dim=c10::nullopt, bool keepdim=false, c10::string_view interpolation="linear") const;
+    1302              :   at::Tensor quantile(double q, c10::optional<int64_t> dim=c10::nullopt, bool keepdim=false, c10::string_view interpolation="linear") const;
+    1303              :   at::Tensor nanquantile(const at::Tensor & q, c10::optional<int64_t> dim=c10::nullopt, bool keepdim=false, c10::string_view interpolation="linear") const;
+    1304              :   at::Tensor nanquantile(double q, c10::optional<int64_t> dim=c10::nullopt, bool keepdim=false, c10::string_view interpolation="linear") const;
+    1305              :   ::std::tuple<at::Tensor,at::Tensor> sort(int64_t dim=-1, bool descending=false) const;
+    1306              :   ::std::tuple<at::Tensor,at::Tensor> sort(c10::optional<bool> stable, int64_t dim=-1, bool descending=false) const;
+    1307              :   ::std::tuple<at::Tensor,at::Tensor> sort(at::Dimname dim, bool descending=false) const;
+    1308              :   ::std::tuple<at::Tensor,at::Tensor> sort(c10::optional<bool> stable, at::Dimname dim, bool descending=false) const;
+    1309              :   at::Tensor msort() const;
+    1310              :   at::Tensor argsort(int64_t dim=-1, bool descending=false) const;
+    1311              :   at::Tensor argsort(bool stable, int64_t dim=-1, bool descending=false) const;
+    1312              :   at::Tensor argsort(at::Dimname dim, bool descending=false) const;
+    1313              :   ::std::tuple<at::Tensor,at::Tensor> topk(int64_t k, int64_t dim=-1, bool largest=true, bool sorted=true) const;
+    1314              :   ::std::tuple<at::Tensor,at::Tensor> topk_symint(c10::SymInt k, int64_t dim=-1, bool largest=true, bool sorted=true) const;
+    1315              :   at::Tensor all() const;
+    1316              :   at::Tensor any() const;
+    1317              :   at::Tensor renorm(const at::Scalar & p, int64_t dim, const at::Scalar & maxnorm) const;
+    1318              :   at::Tensor & renorm_(const at::Scalar & p, int64_t dim, const at::Scalar & maxnorm) const;
+    1319              :   at::Tensor unfold(int64_t dimension, int64_t size, int64_t step) const;
+    1320              :   bool equal(const at::Tensor & other) const;
+    1321              :   at::Tensor pow(const at::Tensor & exponent) const;
+    1322              :   at::Tensor pow(const at::Scalar & exponent) const;
+    1323              :   at::Tensor & pow_(const at::Scalar & exponent) const;
+    1324              :   at::Tensor & pow_(const at::Tensor & exponent) const;
+    1325              :   at::Tensor float_power(const at::Tensor & exponent) const;
+    1326              :   at::Tensor float_power(const at::Scalar & exponent) const;
+    1327              :   at::Tensor & float_power_(const at::Scalar & exponent) const;
+    1328              :   at::Tensor & float_power_(const at::Tensor & exponent) const;
+    1329              :   at::Tensor & normal_(double mean=0, double std=1, c10::optional<at::Generator> generator=c10::nullopt) const;
+    1330              :   at::Tensor alias() const;
+    1331              :   at::Tensor isfinite() const;
+    1332              :   at::Tensor isinf() const;
+    1333              :   void record_stream(at::Stream s) const;
+    1334              :   at::Tensor isposinf() const;
+    1335              :   at::Tensor isneginf() const;
+    1336              :   at::Tensor det() const;
+    1337              :   ::std::tuple<at::Tensor,at::Tensor> slogdet() const;
+    1338              :   at::Tensor logdet() const;
+    1339              :   at::Tensor inverse() const;
+    1340              :   at::Tensor inner(const at::Tensor & other) const;
+    1341              :   at::Tensor outer(const at::Tensor & vec2) const;
+    1342              :   at::Tensor ger(const at::Tensor & vec2) const;
+    1343              :   at::Tensor to_padded_tensor(double padding, at::OptionalIntArrayRef output_size=c10::nullopt) const;
+    1344              :   at::Tensor to_padded_tensor_symint(double padding, at::OptionalSymIntArrayRef output_size=c10::nullopt) const;
+    1345              : 
+    1346              :   // Special C++ only overloads for std()-like functions (See gh-40287)
+    1347              :   // These are needed because int -> bool conversion takes precedence over int -> IntArrayRef
+    1348              :   // So, for example std(0) would select the std(unbiased=False) overload
+    1349              : 
+    1350              :   Tensor var(int dim) const {
+    1351              :     return var(IntArrayRef{dim});
+    1352              :   }
+    1353              : 
+    1354              :   Tensor std(int dim) const {
+    1355              :     return std(IntArrayRef{dim});
+    1356              :   }
+    1357              : 
+    1358              :   // We changed .dtype() to return a TypeMeta in #12766. Ideally, we want the
+    1359              :   // at::kDouble and its friends to be TypeMeta's, but that hasn't happened yet.
+    1360              :   // Before that change, we make this method to maintain BC for C++ usage like
+    1361              :   // `x.to(y.dtype)`.
+    1362              :   // TODO: remove following two after at::kDouble and its friends are TypeMeta's.
+    1363          800 :   inline Tensor to(caffe2::TypeMeta type_meta, bool non_blocking=false, bool copy=false) const {
+    1364          800 :     return this->to(/*scalar_type=*/typeMetaToScalarType(type_meta), non_blocking, copy);
+    1365              :   }
+    1366              :   inline Tensor to(Device device, caffe2::TypeMeta type_meta, bool non_blocking=false, bool copy=false) const {
+    1367              :     return this->to(device, /*scalar_type=*/typeMetaToScalarType(type_meta), non_blocking, copy);
+    1368              :   }
+    1369              : 
+    1370              :   template <typename F, typename... Args>
+    1371              :   decltype(auto) m(F func, Args&&... params) const {
+    1372              :     return func(*this, std::forward<Args>(params)...);
+    1373              :   }
+    1374              : 
+    1375              :   /// NOTE: This is similar to the legacy `.data()` function on `Variable`, and is intended
+    1376              :   /// to be used from functions that need to access the `Variable`'s equivalent `Tensor`
+    1377              :   /// (i.e. `Tensor` that shares the same storage and tensor metadata with the `Variable`).
+    1378              :   ///
+    1379              :   /// One notable difference with the legacy `.data()` function is that changes to the
+    1380              :   /// returned `Tensor`'s tensor metadata (e.g. sizes / strides / storage / storage_offset)
+    1381              :   /// will not update the original `Variable`, due to the fact that this function
+    1382              :   /// shallow-copies the `Variable`'s underlying TensorImpl.
+    1383              :   at::Tensor tensor_data() const {
+    1384              :     return TensorBase::tensor_data();
+    1385              :   }
+    1386              : 
+    1387              :   /// NOTE: `var.variable_data()` in C++ has the same semantics as `tensor.data`
+    1388              :   /// in Python, which create a new `Variable` that shares the same storage and
+    1389              :   /// tensor metadata with the original `Variable`, but with a completely new
+    1390              :   /// autograd history.
+    1391              :   ///
+    1392              :   /// NOTE: If we change the tensor metadata (e.g. sizes / strides /
+    1393              :   /// storage / storage_offset) of a variable created from `var.variable_data()`, those
+    1394              :   /// changes will not update the original variable `var`. In `.variable_data()`, we set
+    1395              :   /// `allow_tensor_metadata_change_` to false to make such changes explicitly illegal,
+    1396              :   /// in order to prevent users from changing metadata of `var.variable_data()`
+    1397              :   /// and expecting the original variable `var` to also be updated.
+    1398              :   at::Tensor variable_data() const {
+    1399              :     return TensorBase::variable_data();
+    1400              :   }
+    1401              : 
+    1402              :   // Hooks
+    1403              :   //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    1404              : 
+    1405              :   template <typename T>
+    1406              :   using hook_return_void_t = std::enable_if_t<std::is_void<typename c10::invoke_result_t<T&, Tensor>>::value, unsigned>;
+    1407              :   template <typename T>
+    1408              :   using hook_return_var_t = std::enable_if_t<std::is_same<typename c10::invoke_result_t<T&, Tensor>, Tensor>::value, unsigned>;
+    1409              : 
+    1410              :   /// Registers a backward hook.
+    1411              :   ///
+    1412              :   /// The hook will be called every time a gradient with respect to the Tensor is computed.
+    1413              :   /// The hook should have one of the following signature:
+    1414              :   /// ```
+    1415              :   /// hook(Tensor grad) -> Tensor
+    1416              :   /// ```
+    1417              :   /// ```
+    1418              :   /// hook(Tensor grad) -> void
+    1419              :   /// ```
+    1420              :   /// The hook should not modify its argument, but it can optionally return a new gradient
+    1421              :   /// which will be used in place of `grad`.
+    1422              :   ///
+    1423              :   /// This function returns the index of the hook in the list which can be used to remove hook.
+    1424              :   ///
+    1425              :   /// Example:
+    1426              :   /// @code
+    1427              :   /// auto v = torch::tensor({0., 0., 0.}, torch::requires_grad());
+    1428              :   /// auto h = v.register_hook([](torch::Tensor grad){ return grad * 2; }); // double the gradient
+    1429              :   /// v.backward(torch::tensor({1., 2., 3.}));
+    1430              :   /// // This prints:
+    1431              :   /// // ```
+    1432              :   /// //  2
+    1433              :   /// //  4
+    1434              :   /// //  6
+    1435              :   /// // [ CPUFloatType{3} ]
+    1436              :   /// // ```
+    1437              :   /// std::cout << v.grad() << std::endl;
+    1438              :   /// v.remove_hook(h);  // removes the hook
+    1439              :   /// @endcode
+    1440              :   template <typename T>
+    1441              :   hook_return_void_t<T> register_hook(T&& hook) const;
+    1442              :   template <typename T>
+    1443              :   hook_return_var_t<T> register_hook(T&& hook) const;
+    1444              : 
+    1445              :   // Variable methods
+    1446              :   //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    1447              : 
+    1448              :   Tensor data() const {
+    1449              :     return TensorBase::data();
+    1450              :   }
+    1451              : 
+    1452              :   void _backward(TensorList inputs, const c10::optional<Tensor>& gradient, c10::optional<bool> keep_graph, bool create_graph) const;
+    1453              : 
+    1454              :   const Tensor& requires_grad_(bool _requires_grad=true) const {
+    1455              :     TensorBase::requires_grad_(_requires_grad);
+    1456              :     return *this;
+    1457              :   }
+    1458              : };
+    1459              : 
+    1460              : namespace detail {
+    1461              : // Helper creator for Tensor class which doesn't requires the users to pass
+    1462              : // in an intrusive_ptr instead it just converts the argument passed to
+    1463              : // requested intrusive_ptr type.
+    1464              : template <typename T, typename... Args>
+    1465              : Tensor make_tensor(Args&&... args) {
+    1466              :   return Tensor(c10::make_intrusive<T>(std::forward<Args>(args)...));
+    1467              : }
+    1468              : 
+    1469              : } // namespace detail
+    1470              : 
+    1471              : } // namespace at
+    1472              : 
+    1473              : 
+    1474              : namespace at {
+    1475              : 
+    1476              : // aten::_backward(Tensor self, Tensor[] inputs, Tensor? gradient=None, bool? retain_graph=None, bool create_graph=False) -> ()
+    1477              : inline void Tensor::__dispatch__backward(at::TensorList inputs, const c10::optional<at::Tensor> & gradient, c10::optional<bool> retain_graph, bool create_graph) const {
+    1478              :     return at::_ops::_backward::call(const_cast<Tensor&>(*this), inputs, gradient, retain_graph, create_graph);
+    1479              : }
+    1480              : 
+    1481              : // aten::set_data(Tensor(a!) self, Tensor new_data) -> ()
+    1482              : inline void Tensor::__dispatch_set_data(const at::Tensor & new_data) const {
+    1483              :     return at::_ops::set_data::call(const_cast<Tensor&>(*this), new_data);
+    1484              : }
+    1485              : 
+    1486              : // aten::data(Tensor self) -> Tensor
+    1487              : inline at::Tensor Tensor::__dispatch_data() const {
+    1488              :     return at::_ops::data::call(const_cast<Tensor&>(*this));
+    1489              : }
+    1490              : 
+    1491              : // aten::is_leaf(Tensor self) -> bool
+    1492              : inline bool Tensor::__dispatch_is_leaf() const {
+    1493              :     return at::_ops::is_leaf::call(const_cast<Tensor&>(*this));
+    1494              : }
+    1495              : 
+    1496              : // aten::output_nr(Tensor self) -> int
+    1497              : inline int64_t Tensor::__dispatch_output_nr() const {
+    1498              :     return at::_ops::output_nr::call(const_cast<Tensor&>(*this));
+    1499              : }
+    1500              : 
+    1501              : // aten::_version(Tensor self) -> int
+    1502              : inline int64_t Tensor::__dispatch__version() const {
+    1503              :     return at::_ops::_version::call(const_cast<Tensor&>(*this));
+    1504              : }
+    1505              : 
+    1506              : // aten::requires_grad_(Tensor(a!) self, bool requires_grad=True) -> Tensor(a!)
+    1507              : inline at::Tensor & Tensor::__dispatch_requires_grad_(bool requires_grad) const {
+    1508              :     return at::_ops::requires_grad_::call(const_cast<Tensor&>(*this), requires_grad);
+    1509              : }
+    1510              : 
+    1511              : // aten::retain_grad(Tensor(a!) self) -> ()
+    1512              : inline void Tensor::__dispatch_retain_grad() const {
+    1513              :     return at::_ops::retain_grad::call(const_cast<Tensor&>(*this));
+    1514              : }
+    1515              : 
+    1516              : // aten::retains_grad(Tensor self) -> bool
+    1517              : inline bool Tensor::__dispatch_retains_grad() const {
+    1518              :     return at::_ops::retains_grad::call(const_cast<Tensor&>(*this));
+    1519              : }
+    1520              : 
+    1521              : // aten::_fw_primal(Tensor(a) self, int level) -> Tensor(a)
+    1522              : inline at::Tensor Tensor::_fw_primal(int64_t level) const {
+    1523              :     return at::_ops::_fw_primal::call(const_cast<Tensor&>(*this), level);
+    1524              : }
+    1525              : 
+    1526              : // aten::rename_(Tensor(a!) self, Dimname[]? names) -> Tensor(a!)
+    1527              : inline at::Tensor & Tensor::rename_(c10::optional<at::DimnameList> names) const {
+    1528              :     return at::_ops::rename_::call(const_cast<Tensor&>(*this), names);
+    1529              : }
+    1530              : 
+    1531              : // aten::rename(Tensor(a) self, Dimname[]? names) -> Tensor(a)
+    1532              : inline at::Tensor Tensor::rename(c10::optional<at::DimnameList> names) const {
+    1533              :     return at::_ops::rename::call(const_cast<Tensor&>(*this), names);
+    1534              : }
+    1535              : 
+    1536              : // aten::align_to(Tensor(a) self, Dimname[] names) -> Tensor(a)
+    1537              : inline at::Tensor Tensor::align_to(at::DimnameList names) const {
+    1538              :     return at::_ops::align_to::call(const_cast<Tensor&>(*this), names);
+    1539              : }
+    1540              : 
+    1541              : // aten::align_to.ellipsis_idx(Tensor(a) self, Dimname[] order, int ellipsis_idx) -> Tensor(a)
+    1542              : inline at::Tensor Tensor::align_to(at::DimnameList order, int64_t ellipsis_idx) const {
+    1543              :     return at::_ops::align_to_ellipsis_idx::call(const_cast<Tensor&>(*this), order, ellipsis_idx);
+    1544              : }
+    1545              : 
+    1546              : // aten::align_as(Tensor self, Tensor other) -> Tensor
+    1547              : inline at::Tensor Tensor::align_as(const at::Tensor & other) const {
+    1548              :     return at::_ops::align_as::call(const_cast<Tensor&>(*this), other);
+    1549              : }
+    1550              : 
+    1551              : // aten::refine_names(Tensor(a) self, Dimname[] names) -> Tensor(a)
+    1552              : inline at::Tensor Tensor::refine_names(at::DimnameList names) const {
+    1553              :     return at::_ops::refine_names::call(const_cast<Tensor&>(*this), names);
+    1554              : }
+    1555              : 
+    1556              : // aten::abs(Tensor self) -> Tensor
+    1557              : inline at::Tensor Tensor::abs() const {
+    1558              :     return at::_ops::abs::call(const_cast<Tensor&>(*this));
+    1559              : }
+    1560              : 
+    1561              : // aten::abs_(Tensor(a!) self) -> Tensor(a!)
+    1562              : inline at::Tensor & Tensor::abs_() const {
+    1563              :     return at::_ops::abs_::call(const_cast<Tensor&>(*this));
+    1564              : }
+    1565              : 
+    1566              : // aten::absolute(Tensor self) -> Tensor
+    1567              : inline at::Tensor Tensor::absolute() const {
+    1568              :     return at::_ops::absolute::call(const_cast<Tensor&>(*this));
+    1569              : }
+    1570              : 
+    1571              : // aten::absolute_(Tensor(a!) self) -> Tensor(a!)
+    1572              : inline at::Tensor & Tensor::absolute_() const {
+    1573              :     return at::_ops::absolute_::call(const_cast<Tensor&>(*this));
+    1574              : }
+    1575              : 
+    1576              : // aten::angle(Tensor self) -> Tensor
+    1577              : inline at::Tensor Tensor::angle() const {
+    1578              :     return at::_ops::angle::call(const_cast<Tensor&>(*this));
+    1579              : }
+    1580              : 
+    1581              : // aten::sgn(Tensor self) -> Tensor
+    1582              : inline at::Tensor Tensor::sgn() const {
+    1583              :     return at::_ops::sgn::call(const_cast<Tensor&>(*this));
+    1584              : }
+    1585              : 
+    1586              : // aten::sgn_(Tensor(a!) self) -> Tensor(a!)
+    1587              : inline at::Tensor & Tensor::sgn_() const {
+    1588              :     return at::_ops::sgn_::call(const_cast<Tensor&>(*this));
+    1589              : }
+    1590              : 
+    1591              : // aten::chalf(Tensor self, *, MemoryFormat? memory_format=None) -> Tensor
+    1592              : inline at::Tensor Tensor::chalf(c10::optional<at::MemoryFormat> memory_format) const {
+    1593              :     return at::_ops::chalf::call(const_cast<Tensor&>(*this), memory_format);
+    1594              : }
+    1595              : 
+    1596              : // aten::_conj(Tensor(a) self) -> Tensor(a)
+    1597              : inline at::Tensor Tensor::_conj() const {
+    1598              :     return at::_ops::_conj::call(const_cast<Tensor&>(*this));
+    1599              : }
+    1600              : 
+    1601              : // aten::conj(Tensor(a) self) -> Tensor(a)
+    1602              : inline at::Tensor Tensor::__dispatch_conj() const {
+    1603              :     return at::_ops::conj::call(const_cast<Tensor&>(*this));
+    1604              : }
+    1605              : 
+    1606              : // aten::_conj_physical(Tensor self) -> Tensor
+    1607              : inline at::Tensor Tensor::_conj_physical() const {
+    1608              :     return at::_ops::_conj_physical::call(const_cast<Tensor&>(*this));
+    1609              : }
+    1610              : 
+    1611              : // aten::conj_physical(Tensor self) -> Tensor
+    1612              : inline at::Tensor Tensor::conj_physical() const {
+    1613              :     return at::_ops::conj_physical::call(const_cast<Tensor&>(*this));
+    1614              : }
+    1615              : 
+    1616              : // aten::conj_physical_(Tensor(a!) self) -> Tensor(a!)
+    1617              : inline at::Tensor & Tensor::conj_physical_() const {
+    1618              :     return at::_ops::conj_physical_::call(const_cast<Tensor&>(*this));
+    1619              : }
+    1620              : 
+    1621              : // aten::resolve_conj(Tensor(a) self) -> Tensor(a)
+    1622              : inline at::Tensor Tensor::resolve_conj() const {
+    1623              :     return at::_ops::resolve_conj::call(const_cast<Tensor&>(*this));
+    1624              : }
+    1625              : 
+    1626              : // aten::resolve_neg(Tensor(a) self) -> Tensor(a)
+    1627              : inline at::Tensor Tensor::resolve_neg() const {
+    1628              :     return at::_ops::resolve_neg::call(const_cast<Tensor&>(*this));
+    1629              : }
+    1630              : 
+    1631              : // aten::_neg_view(Tensor(a) self) -> Tensor(a)
+    1632              : inline at::Tensor Tensor::_neg_view() const {
+    1633              :     return at::_ops::_neg_view::call(const_cast<Tensor&>(*this));
+    1634              : }
+    1635              : 
+    1636              : // aten::acos(Tensor self) -> Tensor
+    1637              : inline at::Tensor Tensor::acos() const {
+    1638              :     return at::_ops::acos::call(const_cast<Tensor&>(*this));
+    1639              : }
+    1640              : 
+    1641              : // aten::acos_(Tensor(a!) self) -> Tensor(a!)
+    1642              : inline at::Tensor & Tensor::acos_() const {
+    1643              :     return at::_ops::acos_::call(const_cast<Tensor&>(*this));
+    1644              : }
+    1645              : 
+    1646              : // aten::arccos(Tensor self) -> Tensor
+    1647              : inline at::Tensor Tensor::arccos() const {
+    1648              :     return at::_ops::arccos::call(const_cast<Tensor&>(*this));
+    1649              : }
+    1650              : 
+    1651              : // aten::arccos_(Tensor(a!) self) -> Tensor(a!)
+    1652              : inline at::Tensor & Tensor::arccos_() const {
+    1653              :     return at::_ops::arccos_::call(const_cast<Tensor&>(*this));
+    1654              : }
+    1655              : 
+    1656              : // aten::add.Tensor(Tensor self, Tensor other, *, Scalar alpha=1) -> Tensor
+    1657              : inline at::Tensor Tensor::add(const at::Tensor & other, const at::Scalar & alpha) const {
+    1658              :     return at::_ops::add_Tensor::call(const_cast<Tensor&>(*this), other, alpha);
+    1659              : }
+    1660              : 
+    1661              : // aten::add_.Tensor(Tensor(a!) self, Tensor other, *, Scalar alpha=1) -> Tensor(a!)
+    1662         1262 : inline at::Tensor & Tensor::add_(const at::Tensor & other, const at::Scalar & alpha) const {
+    1663         1262 :     return at::_ops::add__Tensor::call(const_cast<Tensor&>(*this), other, alpha);
+    1664              : }
+    1665              : 
+    1666              : // aten::add.Scalar(Tensor self, Scalar other, Scalar alpha=1) -> Tensor
+    1667      5137182 : inline at::Tensor Tensor::add(const at::Scalar & other, const at::Scalar & alpha) const {
+    1668      5137182 :     return at::_ops::add_Scalar::call(const_cast<Tensor&>(*this), other, alpha);
+    1669              : }
+    1670              : 
+    1671              : // aten::add_.Scalar(Tensor(a!) self, Scalar other, Scalar alpha=1) -> Tensor(a!)
+    1672              : inline at::Tensor & Tensor::add_(const at::Scalar & other, const at::Scalar & alpha) const {
+    1673              :     return at::_ops::add__Scalar::call(const_cast<Tensor&>(*this), other, alpha);
+    1674              : }
+    1675              : 
+    1676              : // aten::addmv(Tensor self, Tensor mat, Tensor vec, *, Scalar beta=1, Scalar alpha=1) -> Tensor
+    1677              : inline at::Tensor Tensor::addmv(const at::Tensor & mat, const at::Tensor & vec, const at::Scalar & beta, const at::Scalar & alpha) const {
+    1678              :     return at::_ops::addmv::call(const_cast<Tensor&>(*this), mat, vec, beta, alpha);
+    1679              : }
+    1680              : 
+    1681              : // aten::addmv_(Tensor(a!) self, Tensor mat, Tensor vec, *, Scalar beta=1, Scalar alpha=1) -> Tensor(a!)
+    1682              : inline at::Tensor & Tensor::addmv_(const at::Tensor & mat, const at::Tensor & vec, const at::Scalar & beta, const at::Scalar & alpha) const {
+    1683              :     return at::_ops::addmv_::call(const_cast<Tensor&>(*this), mat, vec, beta, alpha);
+    1684              : }
+    1685              : 
+    1686              : // aten::addr(Tensor self, Tensor vec1, Tensor vec2, *, Scalar beta=1, Scalar alpha=1) -> Tensor
+    1687              : inline at::Tensor Tensor::addr(const at::Tensor & vec1, const at::Tensor & vec2, const at::Scalar & beta, const at::Scalar & alpha) const {
+    1688              :     return at::_ops::addr::call(const_cast<Tensor&>(*this), vec1, vec2, beta, alpha);
+    1689              : }
+    1690              : 
+    1691              : // aten::addr_(Tensor(a!) self, Tensor vec1, Tensor vec2, *, Scalar beta=1, Scalar alpha=1) -> Tensor(a!)
+    1692              : inline at::Tensor & Tensor::addr_(const at::Tensor & vec1, const at::Tensor & vec2, const at::Scalar & beta, const at::Scalar & alpha) const {
+    1693              :     return at::_ops::addr_::call(const_cast<Tensor&>(*this), vec1, vec2, beta, alpha);
+    1694              : }
+    1695              : 
+    1696              : // aten::_is_all_true(Tensor self) -> Tensor
+    1697              : inline at::Tensor Tensor::_is_all_true() const {
+    1698              :     return at::_ops::_is_all_true::call(const_cast<Tensor&>(*this));
+    1699              : }
+    1700              : 
+    1701              : // aten::_is_any_true(Tensor self) -> Tensor
+    1702              : inline at::Tensor Tensor::_is_any_true() const {
+    1703              :     return at::_ops::_is_any_true::call(const_cast<Tensor&>(*this));
+    1704              : }
+    1705              : 
+    1706              : // aten::all.dim(Tensor self, int dim, bool keepdim=False) -> Tensor
+    1707              : inline at::Tensor Tensor::all(int64_t dim, bool keepdim) const {
+    1708              :     return at::_ops::all_dim::call(const_cast<Tensor&>(*this), dim, keepdim);
+    1709              : }
+    1710              : 
+    1711              : // aten::all.dimname(Tensor self, Dimname dim, bool keepdim=False) -> Tensor
+    1712              : inline at::Tensor Tensor::all(at::Dimname dim, bool keepdim) const {
+    1713              :     return at::_ops::all_dimname::call(const_cast<Tensor&>(*this), dim, keepdim);
+    1714              : }
+    1715              : 
+    1716              : // aten::allclose(Tensor self, Tensor other, float rtol=1e-05, float atol=1e-08, bool equal_nan=False) -> bool
+    1717              : inline bool Tensor::allclose(const at::Tensor & other, double rtol, double atol, bool equal_nan) const {
+    1718              :     return at::_ops::allclose::call(const_cast<Tensor&>(*this), other, rtol, atol, equal_nan);
+    1719              : }
+    1720              : 
+    1721              : // aten::any.dim(Tensor self, int dim, bool keepdim=False) -> Tensor
+    1722              : inline at::Tensor Tensor::any(int64_t dim, bool keepdim) const {
+    1723              :     return at::_ops::any_dim::call(const_cast<Tensor&>(*this), dim, keepdim);
+    1724              : }
+    1725              : 
+    1726              : // aten::any.dimname(Tensor self, Dimname dim, bool keepdim=False) -> Tensor
+    1727              : inline at::Tensor Tensor::any(at::Dimname dim, bool keepdim) const {
+    1728              :     return at::_ops::any_dimname::call(const_cast<Tensor&>(*this), dim, keepdim);
+    1729              : }
+    1730              : 
+    1731              : // aten::argmax(Tensor self, int? dim=None, bool keepdim=False) -> Tensor
+    1732          914 : inline at::Tensor Tensor::argmax(c10::optional<int64_t> dim, bool keepdim) const {
+    1733          914 :     return at::_ops::argmax::call(const_cast<Tensor&>(*this), dim, keepdim);
+    1734              : }
+    1735              : 
+    1736              : // aten::argmin(Tensor self, int? dim=None, bool keepdim=False) -> Tensor
+    1737              : inline at::Tensor Tensor::argmin(c10::optional<int64_t> dim, bool keepdim) const {
+    1738              :     return at::_ops::argmin::call(const_cast<Tensor&>(*this), dim, keepdim);
+    1739              : }
+    1740              : 
+    1741              : // aten::acosh(Tensor self) -> Tensor
+    1742              : inline at::Tensor Tensor::acosh() const {
+    1743              :     return at::_ops::acosh::call(const_cast<Tensor&>(*this));
+    1744              : }
+    1745              : 
+    1746              : // aten::acosh_(Tensor(a!) self) -> Tensor(a!)
+    1747              : inline at::Tensor & Tensor::acosh_() const {
+    1748              :     return at::_ops::acosh_::call(const_cast<Tensor&>(*this));
+    1749              : }
+    1750              : 
+    1751              : // aten::arccosh(Tensor self) -> Tensor
+    1752              : inline at::Tensor Tensor::arccosh() const {
+    1753              :     return at::_ops::arccosh::call(const_cast<Tensor&>(*this));
+    1754              : }
+    1755              : 
+    1756              : // aten::arccosh_(Tensor(a!) self) -> Tensor(a!)
+    1757              : inline at::Tensor & Tensor::arccosh_() const {
+    1758              :     return at::_ops::arccosh_::call(const_cast<Tensor&>(*this));
+    1759              : }
+    1760              : 
+    1761              : // aten::asinh(Tensor self) -> Tensor
+    1762              : inline at::Tensor Tensor::asinh() const {
+    1763              :     return at::_ops::asinh::call(const_cast<Tensor&>(*this));
+    1764              : }
+    1765              : 
+    1766              : // aten::asinh_(Tensor(a!) self) -> Tensor(a!)
+    1767              : inline at::Tensor & Tensor::asinh_() const {
+    1768              :     return at::_ops::asinh_::call(const_cast<Tensor&>(*this));
+    1769              : }
+    1770              : 
+    1771              : // aten::arcsinh(Tensor self) -> Tensor
+    1772              : inline at::Tensor Tensor::arcsinh() const {
+    1773              :     return at::_ops::arcsinh::call(const_cast<Tensor&>(*this));
+    1774              : }
+    1775              : 
+    1776              : // aten::arcsinh_(Tensor(a!) self) -> Tensor(a!)
+    1777              : inline at::Tensor & Tensor::arcsinh_() const {
+    1778              :     return at::_ops::arcsinh_::call(const_cast<Tensor&>(*this));
+    1779              : }
+    1780              : 
+    1781              : // aten::atanh(Tensor self) -> Tensor
+    1782              : inline at::Tensor Tensor::atanh() const {
+    1783              :     return at::_ops::atanh::call(const_cast<Tensor&>(*this));
+    1784              : }
+    1785              : 
+    1786              : // aten::atanh_(Tensor(a!) self) -> Tensor(a!)
+    1787              : inline at::Tensor & Tensor::atanh_() const {
+    1788              :     return at::_ops::atanh_::call(const_cast<Tensor&>(*this));
+    1789              : }
+    1790              : 
+    1791              : // aten::arctanh(Tensor self) -> Tensor
+    1792              : inline at::Tensor Tensor::arctanh() const {
+    1793              :     return at::_ops::arctanh::call(const_cast<Tensor&>(*this));
+    1794              : }
+    1795              : 
+    1796              : // aten::arctanh_(Tensor(a!) self) -> Tensor(a!)
+    1797              : inline at::Tensor & Tensor::arctanh_() const {
+    1798              :     return at::_ops::arctanh_::call(const_cast<Tensor&>(*this));
+    1799              : }
+    1800              : 
+    1801              : // aten::as_strided(Tensor(a) self, SymInt[] size, SymInt[] stride, SymInt? storage_offset=None) -> Tensor(a)
+    1802              : inline at::Tensor Tensor::as_strided(at::IntArrayRef size, at::IntArrayRef stride, c10::optional<int64_t> storage_offset) const {
+    1803              :     return at::_ops::as_strided::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(size), c10::fromIntArrayRefSlow(stride), storage_offset.has_value() ? c10::make_optional(c10::SymInt(*storage_offset)) : c10::nullopt);
+    1804              : }
+    1805              : 
+    1806              : // aten::as_strided(Tensor(a) self, SymInt[] size, SymInt[] stride, SymInt? storage_offset=None) -> Tensor(a)
+    1807              : inline at::Tensor Tensor::as_strided_symint(c10::SymIntArrayRef size, c10::SymIntArrayRef stride, c10::optional<c10::SymInt> storage_offset) const {
+    1808              :     return at::_ops::as_strided::call(const_cast<Tensor&>(*this), size, stride, storage_offset);
+    1809              : }
+    1810              : 
+    1811              : // aten::as_strided_(Tensor(a!) self, SymInt[] size, SymInt[] stride, SymInt? storage_offset=None) -> Tensor(a!)
+    1812              : inline const at::Tensor & Tensor::as_strided_(at::IntArrayRef size, at::IntArrayRef stride, c10::optional<int64_t> storage_offset) const {
+    1813              :     return at::_ops::as_strided_::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(size), c10::fromIntArrayRefSlow(stride), storage_offset.has_value() ? c10::make_optional(c10::SymInt(*storage_offset)) : c10::nullopt);
+    1814              : }
+    1815              : 
+    1816              : // aten::as_strided_(Tensor(a!) self, SymInt[] size, SymInt[] stride, SymInt? storage_offset=None) -> Tensor(a!)
+    1817              : inline const at::Tensor & Tensor::as_strided__symint(c10::SymIntArrayRef size, c10::SymIntArrayRef stride, c10::optional<c10::SymInt> storage_offset) const {
+    1818              :     return at::_ops::as_strided_::call(const_cast<Tensor&>(*this), size, stride, storage_offset);
+    1819              : }
+    1820              : 
+    1821              : // aten::asin(Tensor self) -> Tensor
+    1822              : inline at::Tensor Tensor::asin() const {
+    1823              :     return at::_ops::asin::call(const_cast<Tensor&>(*this));
+    1824              : }
+    1825              : 
+    1826              : // aten::asin_(Tensor(a!) self) -> Tensor(a!)
+    1827              : inline at::Tensor & Tensor::asin_() const {
+    1828              :     return at::_ops::asin_::call(const_cast<Tensor&>(*this));
+    1829              : }
+    1830              : 
+    1831              : // aten::arcsin(Tensor self) -> Tensor
+    1832              : inline at::Tensor Tensor::arcsin() const {
+    1833              :     return at::_ops::arcsin::call(const_cast<Tensor&>(*this));
+    1834              : }
+    1835              : 
+    1836              : // aten::arcsin_(Tensor(a!) self) -> Tensor(a!)
+    1837              : inline at::Tensor & Tensor::arcsin_() const {
+    1838              :     return at::_ops::arcsin_::call(const_cast<Tensor&>(*this));
+    1839              : }
+    1840              : 
+    1841              : // aten::atan(Tensor self) -> Tensor
+    1842              : inline at::Tensor Tensor::atan() const {
+    1843              :     return at::_ops::atan::call(const_cast<Tensor&>(*this));
+    1844              : }
+    1845              : 
+    1846              : // aten::atan_(Tensor(a!) self) -> Tensor(a!)
+    1847              : inline at::Tensor & Tensor::atan_() const {
+    1848              :     return at::_ops::atan_::call(const_cast<Tensor&>(*this));
+    1849              : }
+    1850              : 
+    1851              : // aten::arctan(Tensor self) -> Tensor
+    1852              : inline at::Tensor Tensor::arctan() const {
+    1853              :     return at::_ops::arctan::call(const_cast<Tensor&>(*this));
+    1854              : }
+    1855              : 
+    1856              : // aten::arctan_(Tensor(a!) self) -> Tensor(a!)
+    1857              : inline at::Tensor & Tensor::arctan_() const {
+    1858              :     return at::_ops::arctan_::call(const_cast<Tensor&>(*this));
+    1859              : }
+    1860              : 
+    1861              : // aten::baddbmm(Tensor self, Tensor batch1, Tensor batch2, *, Scalar beta=1, Scalar alpha=1) -> Tensor
+    1862              : inline at::Tensor Tensor::baddbmm(const at::Tensor & batch1, const at::Tensor & batch2, const at::Scalar & beta, const at::Scalar & alpha) const {
+    1863              :     return at::_ops::baddbmm::call(const_cast<Tensor&>(*this), batch1, batch2, beta, alpha);
+    1864              : }
+    1865              : 
+    1866              : // aten::baddbmm_(Tensor(a!) self, Tensor batch1, Tensor batch2, *, Scalar beta=1, Scalar alpha=1) -> Tensor(a!)
+    1867              : inline at::Tensor & Tensor::baddbmm_(const at::Tensor & batch1, const at::Tensor & batch2, const at::Scalar & beta, const at::Scalar & alpha) const {
+    1868              :     return at::_ops::baddbmm_::call(const_cast<Tensor&>(*this), batch1, batch2, beta, alpha);
+    1869              : }
+    1870              : 
+    1871              : // aten::bernoulli(Tensor self, *, Generator? generator=None) -> Tensor
+    1872              : inline at::Tensor Tensor::bernoulli(c10::optional<at::Generator> generator) const {
+    1873              :     return at::_ops::bernoulli::call(const_cast<Tensor&>(*this), generator);
+    1874              : }
+    1875              : 
+    1876              : // aten::bernoulli_.Tensor(Tensor(a!) self, Tensor p, *, Generator? generator=None) -> Tensor(a!)
+    1877              : inline at::Tensor & Tensor::bernoulli_(const at::Tensor & p, c10::optional<at::Generator> generator) const {
+    1878              :     return at::_ops::bernoulli__Tensor::call(const_cast<Tensor&>(*this), p, generator);
+    1879              : }
+    1880              : 
+    1881              : // aten::bernoulli_.float(Tensor(a!) self, float p=0.5, *, Generator? generator=None) -> Tensor(a!)
+    1882              : inline at::Tensor & Tensor::bernoulli_(double p, c10::optional<at::Generator> generator) const {
+    1883              :     return at::_ops::bernoulli__float::call(const_cast<Tensor&>(*this), p, generator);
+    1884              : }
+    1885              : 
+    1886              : // aten::bernoulli.p(Tensor self, float p, *, Generator? generator=None) -> Tensor
+    1887              : inline at::Tensor Tensor::bernoulli(double p, c10::optional<at::Generator> generator) const {
+    1888              :     return at::_ops::bernoulli_p::call(const_cast<Tensor&>(*this), p, generator);
+    1889              : }
+    1890              : 
+    1891              : // aten::bincount(Tensor self, Tensor? weights=None, int minlength=0) -> Tensor
+    1892        31316 : inline at::Tensor Tensor::bincount(const c10::optional<at::Tensor> & weights, int64_t minlength) const {
+    1893        31316 :     return at::_ops::bincount::call(const_cast<Tensor&>(*this), weights, minlength);
+    1894              : }
+    1895              : 
+    1896              : // aten::bitwise_not(Tensor self) -> Tensor
+    1897              : inline at::Tensor Tensor::bitwise_not() const {
+    1898              :     return at::_ops::bitwise_not::call(const_cast<Tensor&>(*this));
+    1899              : }
+    1900              : 
+    1901              : // aten::bitwise_not_(Tensor(a!) self) -> Tensor(a!)
+    1902              : inline at::Tensor & Tensor::bitwise_not_() const {
+    1903              :     return at::_ops::bitwise_not_::call(const_cast<Tensor&>(*this));
+    1904              : }
+    1905              : 
+    1906              : // aten::copysign.Tensor(Tensor self, Tensor other) -> Tensor
+    1907              : inline at::Tensor Tensor::copysign(const at::Tensor & other) const {
+    1908              :     return at::_ops::copysign_Tensor::call(const_cast<Tensor&>(*this), other);
+    1909              : }
+    1910              : 
+    1911              : // aten::copysign_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    1912              : inline at::Tensor & Tensor::copysign_(const at::Tensor & other) const {
+    1913              :     return at::_ops::copysign__Tensor::call(const_cast<Tensor&>(*this), other);
+    1914              : }
+    1915              : 
+    1916              : // aten::copysign.Scalar(Tensor self, Scalar other) -> Tensor
+    1917              : inline at::Tensor Tensor::copysign(const at::Scalar & other) const {
+    1918              :     return at::_ops::copysign_Scalar::call(const_cast<Tensor&>(*this), other);
+    1919              : }
+    1920              : 
+    1921              : // aten::copysign_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    1922              : inline at::Tensor & Tensor::copysign_(const at::Scalar & other) const {
+    1923              :     return at::_ops::copysign__Scalar::call(const_cast<Tensor&>(*this), other);
+    1924              : }
+    1925              : 
+    1926              : // aten::logical_not(Tensor self) -> Tensor
+    1927              : inline at::Tensor Tensor::logical_not() const {
+    1928              :     return at::_ops::logical_not::call(const_cast<Tensor&>(*this));
+    1929              : }
+    1930              : 
+    1931              : // aten::logical_not_(Tensor(a!) self) -> Tensor(a!)
+    1932              : inline at::Tensor & Tensor::logical_not_() const {
+    1933              :     return at::_ops::logical_not_::call(const_cast<Tensor&>(*this));
+    1934              : }
+    1935              : 
+    1936              : // aten::logical_xor(Tensor self, Tensor other) -> Tensor
+    1937              : inline at::Tensor Tensor::logical_xor(const at::Tensor & other) const {
+    1938              :     return at::_ops::logical_xor::call(const_cast<Tensor&>(*this), other);
+    1939              : }
+    1940              : 
+    1941              : // aten::logical_xor_(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    1942              : inline at::Tensor & Tensor::logical_xor_(const at::Tensor & other) const {
+    1943              :     return at::_ops::logical_xor_::call(const_cast<Tensor&>(*this), other);
+    1944              : }
+    1945              : 
+    1946              : // aten::logical_and(Tensor self, Tensor other) -> Tensor
+    1947              : inline at::Tensor Tensor::logical_and(const at::Tensor & other) const {
+    1948              :     return at::_ops::logical_and::call(const_cast<Tensor&>(*this), other);
+    1949              : }
+    1950              : 
+    1951              : // aten::logical_and_(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    1952              : inline at::Tensor & Tensor::logical_and_(const at::Tensor & other) const {
+    1953              :     return at::_ops::logical_and_::call(const_cast<Tensor&>(*this), other);
+    1954              : }
+    1955              : 
+    1956              : // aten::logical_or(Tensor self, Tensor other) -> Tensor
+    1957              : inline at::Tensor Tensor::logical_or(const at::Tensor & other) const {
+    1958              :     return at::_ops::logical_or::call(const_cast<Tensor&>(*this), other);
+    1959              : }
+    1960              : 
+    1961              : // aten::logical_or_(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    1962              : inline at::Tensor & Tensor::logical_or_(const at::Tensor & other) const {
+    1963              :     return at::_ops::logical_or_::call(const_cast<Tensor&>(*this), other);
+    1964              : }
+    1965              : 
+    1966              : // aten::bmm(Tensor self, Tensor mat2) -> Tensor
+    1967              : inline at::Tensor Tensor::bmm(const at::Tensor & mat2) const {
+    1968              :     return at::_ops::bmm::call(const_cast<Tensor&>(*this), mat2);
+    1969              : }
+    1970              : 
+    1971              : // aten::broadcast_to(Tensor(a) self, SymInt[] size) -> Tensor(a)
+    1972              : inline at::Tensor Tensor::broadcast_to(at::IntArrayRef size) const {
+    1973              :     return at::_ops::broadcast_to::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(size));
+    1974              : }
+    1975              : 
+    1976              : // aten::broadcast_to(Tensor(a) self, SymInt[] size) -> Tensor(a)
+    1977              : inline at::Tensor Tensor::broadcast_to_symint(c10::SymIntArrayRef size) const {
+    1978              :     return at::_ops::broadcast_to::call(const_cast<Tensor&>(*this), size);
+    1979              : }
+    1980              : 
+    1981              : // aten::ceil(Tensor self) -> Tensor
+    1982              : inline at::Tensor Tensor::ceil() const {
+    1983              :     return at::_ops::ceil::call(const_cast<Tensor&>(*this));
+    1984              : }
+    1985              : 
+    1986              : // aten::ceil_(Tensor(a!) self) -> Tensor(a!)
+    1987              : inline at::Tensor & Tensor::ceil_() const {
+    1988              :     return at::_ops::ceil_::call(const_cast<Tensor&>(*this));
+    1989              : }
+    1990              : 
+    1991              : // aten::unsafe_chunk(Tensor self, int chunks, int dim=0) -> Tensor[]
+    1992              : inline ::std::vector<at::Tensor> Tensor::unsafe_chunk(int64_t chunks, int64_t dim) const {
+    1993              :     return at::_ops::unsafe_chunk::call(const_cast<Tensor&>(*this), chunks, dim);
+    1994              : }
+    1995              : 
+    1996              : // aten::chunk(Tensor(a -> *) self, int chunks, int dim=0) -> Tensor(a)[]
+    1997              : inline ::std::vector<at::Tensor> Tensor::chunk(int64_t chunks, int64_t dim) const {
+    1998              :     return at::_ops::chunk::call(const_cast<Tensor&>(*this), chunks, dim);
+    1999              : }
+    2000              : 
+    2001              : // aten::tensor_split.sections(Tensor(a -> *) self, SymInt sections, int dim=0) -> Tensor(a)[]
+    2002              : inline ::std::vector<at::Tensor> Tensor::tensor_split(int64_t sections, int64_t dim) const {
+    2003              :     return at::_ops::tensor_split_sections::call(const_cast<Tensor&>(*this), sections, dim);
+    2004              : }
+    2005              : 
+    2006              : // aten::tensor_split.sections(Tensor(a -> *) self, SymInt sections, int dim=0) -> Tensor(a)[]
+    2007              : inline ::std::vector<at::Tensor> Tensor::tensor_split_symint(c10::SymInt sections, int64_t dim) const {
+    2008              :     return at::_ops::tensor_split_sections::call(const_cast<Tensor&>(*this), sections, dim);
+    2009              : }
+    2010              : 
+    2011              : // aten::tensor_split.indices(Tensor(a -> *) self, SymInt[] indices, int dim=0) -> Tensor(a)[]
+    2012              : inline ::std::vector<at::Tensor> Tensor::tensor_split(at::IntArrayRef indices, int64_t dim) const {
+    2013              :     return at::_ops::tensor_split_indices::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(indices), dim);
+    2014              : }
+    2015              : 
+    2016              : // aten::tensor_split.indices(Tensor(a -> *) self, SymInt[] indices, int dim=0) -> Tensor(a)[]
+    2017              : inline ::std::vector<at::Tensor> Tensor::tensor_split_symint(c10::SymIntArrayRef indices, int64_t dim) const {
+    2018              :     return at::_ops::tensor_split_indices::call(const_cast<Tensor&>(*this), indices, dim);
+    2019              : }
+    2020              : 
+    2021              : // aten::tensor_split.tensor_indices_or_sections(Tensor(a -> *) self, Tensor tensor_indices_or_sections, int dim=0) -> Tensor(a)[]
+    2022              : inline ::std::vector<at::Tensor> Tensor::tensor_split(const at::Tensor & tensor_indices_or_sections, int64_t dim) const {
+    2023              :     return at::_ops::tensor_split_tensor_indices_or_sections::call(const_cast<Tensor&>(*this), tensor_indices_or_sections, dim);
+    2024              : }
+    2025              : 
+    2026              : // aten::clamp(Tensor self, Scalar? min=None, Scalar? max=None) -> Tensor
+    2027              : inline at::Tensor Tensor::clamp(const c10::optional<at::Scalar> & min, const c10::optional<at::Scalar> & max) const {
+    2028              :     return at::_ops::clamp::call(const_cast<Tensor&>(*this), min, max);
+    2029              : }
+    2030              : 
+    2031              : // aten::clamp.Tensor(Tensor self, Tensor? min=None, Tensor? max=None) -> Tensor
+    2032              : inline at::Tensor Tensor::clamp(const c10::optional<at::Tensor> & min, const c10::optional<at::Tensor> & max) const {
+    2033              :     return at::_ops::clamp_Tensor::call(const_cast<Tensor&>(*this), min, max);
+    2034              : }
+    2035              : 
+    2036              : // aten::clamp_(Tensor(a!) self, Scalar? min=None, Scalar? max=None) -> Tensor(a!)
+    2037              : inline at::Tensor & Tensor::clamp_(const c10::optional<at::Scalar> & min, const c10::optional<at::Scalar> & max) const {
+    2038              :     return at::_ops::clamp_::call(const_cast<Tensor&>(*this), min, max);
+    2039              : }
+    2040              : 
+    2041              : // aten::clamp_.Tensor(Tensor(a!) self, Tensor? min=None, Tensor? max=None) -> Tensor(a!)
+    2042              : inline at::Tensor & Tensor::clamp_(const c10::optional<at::Tensor> & min, const c10::optional<at::Tensor> & max) const {
+    2043              :     return at::_ops::clamp__Tensor::call(const_cast<Tensor&>(*this), min, max);
+    2044              : }
+    2045              : 
+    2046              : // aten::clamp_max(Tensor self, Scalar max) -> Tensor
+    2047              : inline at::Tensor Tensor::clamp_max(const at::Scalar & max) const {
+    2048              :     return at::_ops::clamp_max::call(const_cast<Tensor&>(*this), max);
+    2049              : }
+    2050              : 
+    2051              : // aten::clamp_max.Tensor(Tensor self, Tensor max) -> Tensor
+    2052              : inline at::Tensor Tensor::clamp_max(const at::Tensor & max) const {
+    2053              :     return at::_ops::clamp_max_Tensor::call(const_cast<Tensor&>(*this), max);
+    2054              : }
+    2055              : 
+    2056              : // aten::clamp_max_(Tensor(a!) self, Scalar max) -> Tensor(a!)
+    2057              : inline at::Tensor & Tensor::clamp_max_(const at::Scalar & max) const {
+    2058              :     return at::_ops::clamp_max_::call(const_cast<Tensor&>(*this), max);
+    2059              : }
+    2060              : 
+    2061              : // aten::clamp_max_.Tensor(Tensor(a!) self, Tensor max) -> Tensor(a!)
+    2062              : inline at::Tensor & Tensor::clamp_max_(const at::Tensor & max) const {
+    2063              :     return at::_ops::clamp_max__Tensor::call(const_cast<Tensor&>(*this), max);
+    2064              : }
+    2065              : 
+    2066              : // aten::clamp_min(Tensor self, Scalar min) -> Tensor
+    2067              : inline at::Tensor Tensor::clamp_min(const at::Scalar & min) const {
+    2068              :     return at::_ops::clamp_min::call(const_cast<Tensor&>(*this), min);
+    2069              : }
+    2070              : 
+    2071              : // aten::clamp_min.Tensor(Tensor self, Tensor min) -> Tensor
+    2072              : inline at::Tensor Tensor::clamp_min(const at::Tensor & min) const {
+    2073              :     return at::_ops::clamp_min_Tensor::call(const_cast<Tensor&>(*this), min);
+    2074              : }
+    2075              : 
+    2076              : // aten::clamp_min_(Tensor(a!) self, Scalar min) -> Tensor(a!)
+    2077              : inline at::Tensor & Tensor::clamp_min_(const at::Scalar & min) const {
+    2078              :     return at::_ops::clamp_min_::call(const_cast<Tensor&>(*this), min);
+    2079              : }
+    2080              : 
+    2081              : // aten::clamp_min_.Tensor(Tensor(a!) self, Tensor min) -> Tensor(a!)
+    2082              : inline at::Tensor & Tensor::clamp_min_(const at::Tensor & min) const {
+    2083              :     return at::_ops::clamp_min__Tensor::call(const_cast<Tensor&>(*this), min);
+    2084              : }
+    2085              : 
+    2086              : // aten::clip(Tensor self, Scalar? min=None, Scalar? max=None) -> Tensor
+    2087              : inline at::Tensor Tensor::clip(const c10::optional<at::Scalar> & min, const c10::optional<at::Scalar> & max) const {
+    2088              :     return at::_ops::clip::call(const_cast<Tensor&>(*this), min, max);
+    2089              : }
+    2090              : 
+    2091              : // aten::clip.Tensor(Tensor self, Tensor? min=None, Tensor? max=None) -> Tensor
+    2092              : inline at::Tensor Tensor::clip(const c10::optional<at::Tensor> & min, const c10::optional<at::Tensor> & max) const {
+    2093              :     return at::_ops::clip_Tensor::call(const_cast<Tensor&>(*this), min, max);
+    2094              : }
+    2095              : 
+    2096              : // aten::clip_(Tensor(a!) self, Scalar? min=None, Scalar? max=None) -> Tensor(a!)
+    2097              : inline at::Tensor & Tensor::clip_(const c10::optional<at::Scalar> & min, const c10::optional<at::Scalar> & max) const {
+    2098              :     return at::_ops::clip_::call(const_cast<Tensor&>(*this), min, max);
+    2099              : }
+    2100              : 
+    2101              : // aten::clip_.Tensor(Tensor(a!) self, Tensor? min=None, Tensor? max=None) -> Tensor(a!)
+    2102              : inline at::Tensor & Tensor::clip_(const c10::optional<at::Tensor> & min, const c10::optional<at::Tensor> & max) const {
+    2103              :     return at::_ops::clip__Tensor::call(const_cast<Tensor&>(*this), min, max);
+    2104              : }
+    2105              : 
+    2106              : // aten::contiguous(Tensor(a) self, *, MemoryFormat memory_format=contiguous_format) -> Tensor(a)
+    2107              : inline at::Tensor Tensor::__dispatch_contiguous(at::MemoryFormat memory_format) const {
+    2108              :     return at::_ops::contiguous::call(const_cast<Tensor&>(*this), memory_format);
+    2109              : }
+    2110              : 
+    2111              : // aten::copy_(Tensor(a!) self, Tensor src, bool non_blocking=False) -> Tensor(a!)
+    2112        20532 : inline at::Tensor & Tensor::copy_(const at::Tensor & src, bool non_blocking) const {
+    2113        20532 :     return at::_ops::copy_::call(const_cast<Tensor&>(*this), src, non_blocking);
+    2114              : }
+    2115              : 
+    2116              : // aten::cos(Tensor self) -> Tensor
+    2117              : inline at::Tensor Tensor::cos() const {
+    2118              :     return at::_ops::cos::call(const_cast<Tensor&>(*this));
+    2119              : }
+    2120              : 
+    2121              : // aten::cos_(Tensor(a!) self) -> Tensor(a!)
+    2122              : inline at::Tensor & Tensor::cos_() const {
+    2123              :     return at::_ops::cos_::call(const_cast<Tensor&>(*this));
+    2124              : }
+    2125              : 
+    2126              : // aten::cosh(Tensor self) -> Tensor
+    2127              : inline at::Tensor Tensor::cosh() const {
+    2128              :     return at::_ops::cosh::call(const_cast<Tensor&>(*this));
+    2129              : }
+    2130              : 
+    2131              : // aten::cosh_(Tensor(a!) self) -> Tensor(a!)
+    2132              : inline at::Tensor & Tensor::cosh_() const {
+    2133              :     return at::_ops::cosh_::call(const_cast<Tensor&>(*this));
+    2134              : }
+    2135              : 
+    2136              : // aten::count_nonzero.dim_IntList(Tensor self, int[] dim) -> Tensor
+    2137              : inline at::Tensor Tensor::count_nonzero(at::IntArrayRef dim) const {
+    2138              :     return at::_ops::count_nonzero_dim_IntList::call(const_cast<Tensor&>(*this), dim);
+    2139              : }
+    2140              : 
+    2141              : // aten::count_nonzero(Tensor self, int? dim=None) -> Tensor
+    2142              : inline at::Tensor Tensor::count_nonzero(c10::optional<int64_t> dim) const {
+    2143              :     return at::_ops::count_nonzero::call(const_cast<Tensor&>(*this), dim);
+    2144              : }
+    2145              : 
+    2146              : // aten::cov(Tensor self, *, int correction=1, Tensor? fweights=None, Tensor? aweights=None) -> Tensor
+    2147              : inline at::Tensor Tensor::cov(int64_t correction, const c10::optional<at::Tensor> & fweights, const c10::optional<at::Tensor> & aweights) const {
+    2148              :     return at::_ops::cov::call(const_cast<Tensor&>(*this), correction, fweights, aweights);
+    2149              : }
+    2150              : 
+    2151              : // aten::corrcoef(Tensor self) -> Tensor
+    2152              : inline at::Tensor Tensor::corrcoef() const {
+    2153              :     return at::_ops::corrcoef::call(const_cast<Tensor&>(*this));
+    2154              : }
+    2155              : 
+    2156              : // aten::cummax(Tensor self, int dim) -> (Tensor values, Tensor indices)
+    2157              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::cummax(int64_t dim) const {
+    2158              :     return at::_ops::cummax::call(const_cast<Tensor&>(*this), dim);
+    2159              : }
+    2160              : 
+    2161              : // aten::cummax.dimname(Tensor self, Dimname dim) -> (Tensor values, Tensor indices)
+    2162              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::cummax(at::Dimname dim) const {
+    2163              :     return at::_ops::cummax_dimname::call(const_cast<Tensor&>(*this), dim);
+    2164              : }
+    2165              : 
+    2166              : // aten::cummin(Tensor self, int dim) -> (Tensor values, Tensor indices)
+    2167              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::cummin(int64_t dim) const {
+    2168              :     return at::_ops::cummin::call(const_cast<Tensor&>(*this), dim);
+    2169              : }
+    2170              : 
+    2171              : // aten::cummin.dimname(Tensor self, Dimname dim) -> (Tensor values, Tensor indices)
+    2172              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::cummin(at::Dimname dim) const {
+    2173              :     return at::_ops::cummin_dimname::call(const_cast<Tensor&>(*this), dim);
+    2174              : }
+    2175              : 
+    2176              : // aten::cumprod(Tensor self, int dim, *, ScalarType? dtype=None) -> Tensor
+    2177              : inline at::Tensor Tensor::cumprod(int64_t dim, c10::optional<at::ScalarType> dtype) const {
+    2178              :     return at::_ops::cumprod::call(const_cast<Tensor&>(*this), dim, dtype);
+    2179              : }
+    2180              : 
+    2181              : // aten::cumprod_(Tensor(a!) self, int dim, *, ScalarType? dtype=None) -> Tensor(a!)
+    2182              : inline at::Tensor & Tensor::cumprod_(int64_t dim, c10::optional<at::ScalarType> dtype) const {
+    2183              :     return at::_ops::cumprod_::call(const_cast<Tensor&>(*this), dim, dtype);
+    2184              : }
+    2185              : 
+    2186              : // aten::cumprod.dimname(Tensor self, Dimname dim, *, ScalarType? dtype=None) -> Tensor
+    2187              : inline at::Tensor Tensor::cumprod(at::Dimname dim, c10::optional<at::ScalarType> dtype) const {
+    2188              :     return at::_ops::cumprod_dimname::call(const_cast<Tensor&>(*this), dim, dtype);
+    2189              : }
+    2190              : 
+    2191              : // aten::cumprod_.dimname(Tensor(a!) self, Dimname dim, *, ScalarType? dtype=None) -> Tensor(a!)
+    2192              : inline at::Tensor & Tensor::cumprod_(at::Dimname dim, c10::optional<at::ScalarType> dtype) const {
+    2193              :     return at::_ops::cumprod__dimname::call(const_cast<Tensor&>(*this), dim, dtype);
+    2194              : }
+    2195              : 
+    2196              : // aten::cumsum(Tensor self, int dim, *, ScalarType? dtype=None) -> Tensor
+    2197              : inline at::Tensor Tensor::cumsum(int64_t dim, c10::optional<at::ScalarType> dtype) const {
+    2198              :     return at::_ops::cumsum::call(const_cast<Tensor&>(*this), dim, dtype);
+    2199              : }
+    2200              : 
+    2201              : // aten::cumsum_(Tensor(a!) self, int dim, *, ScalarType? dtype=None) -> Tensor(a!)
+    2202              : inline at::Tensor & Tensor::cumsum_(int64_t dim, c10::optional<at::ScalarType> dtype) const {
+    2203              :     return at::_ops::cumsum_::call(const_cast<Tensor&>(*this), dim, dtype);
+    2204              : }
+    2205              : 
+    2206              : // aten::cumsum.dimname(Tensor self, Dimname dim, *, ScalarType? dtype=None) -> Tensor
+    2207              : inline at::Tensor Tensor::cumsum(at::Dimname dim, c10::optional<at::ScalarType> dtype) const {
+    2208              :     return at::_ops::cumsum_dimname::call(const_cast<Tensor&>(*this), dim, dtype);
+    2209              : }
+    2210              : 
+    2211              : // aten::cumsum_.dimname(Tensor(a!) self, Dimname dim, *, ScalarType? dtype=None) -> Tensor(a!)
+    2212              : inline at::Tensor & Tensor::cumsum_(at::Dimname dim, c10::optional<at::ScalarType> dtype) const {
+    2213              :     return at::_ops::cumsum__dimname::call(const_cast<Tensor&>(*this), dim, dtype);
+    2214              : }
+    2215              : 
+    2216              : // aten::diag_embed(Tensor self, int offset=0, int dim1=-2, int dim2=-1) -> Tensor
+    2217              : inline at::Tensor Tensor::diag_embed(int64_t offset, int64_t dim1, int64_t dim2) const {
+    2218              :     return at::_ops::diag_embed::call(const_cast<Tensor&>(*this), offset, dim1, dim2);
+    2219              : }
+    2220              : 
+    2221              : // aten::diagflat(Tensor self, int offset=0) -> Tensor
+    2222              : inline at::Tensor Tensor::diagflat(int64_t offset) const {
+    2223              :     return at::_ops::diagflat::call(const_cast<Tensor&>(*this), offset);
+    2224              : }
+    2225              : 
+    2226              : // aten::diagonal(Tensor(a) self, int offset=0, int dim1=0, int dim2=1) -> Tensor(a)
+    2227              : inline at::Tensor Tensor::diagonal(int64_t offset, int64_t dim1, int64_t dim2) const {
+    2228              :     return at::_ops::diagonal::call(const_cast<Tensor&>(*this), offset, dim1, dim2);
+    2229              : }
+    2230              : 
+    2231              : // aten::diagonal.Dimname(Tensor(a) self, *, Dimname outdim, Dimname dim1, Dimname dim2, int offset=0) -> Tensor(a)
+    2232              : inline at::Tensor Tensor::diagonal(at::Dimname outdim, at::Dimname dim1, at::Dimname dim2, int64_t offset) const {
+    2233              :     return at::_ops::diagonal_Dimname::call(const_cast<Tensor&>(*this), outdim, dim1, dim2, offset);
+    2234              : }
+    2235              : 
+    2236              : // aten::fill_diagonal_(Tensor(a!) self, Scalar fill_value, bool wrap=False) -> Tensor(a!)
+    2237              : inline at::Tensor & Tensor::fill_diagonal_(const at::Scalar & fill_value, bool wrap) const {
+    2238              :     return at::_ops::fill_diagonal_::call(const_cast<Tensor&>(*this), fill_value, wrap);
+    2239              : }
+    2240              : 
+    2241              : // aten::diff(Tensor self, int n=1, int dim=-1, Tensor? prepend=None, Tensor? append=None) -> Tensor
+    2242              : inline at::Tensor Tensor::diff(int64_t n, int64_t dim, const c10::optional<at::Tensor> & prepend, const c10::optional<at::Tensor> & append) const {
+    2243              :     return at::_ops::diff::call(const_cast<Tensor&>(*this), n, dim, prepend, append);
+    2244              : }
+    2245              : 
+    2246              : // aten::div.Tensor(Tensor self, Tensor other) -> Tensor
+    2247        14194 : inline at::Tensor Tensor::div(const at::Tensor & other) const {
+    2248        14194 :     return at::_ops::div_Tensor::call(const_cast<Tensor&>(*this), other);
+    2249              : }
+    2250              : 
+    2251              : // aten::div_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    2252              : inline at::Tensor & Tensor::div_(const at::Tensor & other) const {
+    2253              :     return at::_ops::div__Tensor::call(const_cast<Tensor&>(*this), other);
+    2254              : }
+    2255              : 
+    2256              : // aten::div.Tensor_mode(Tensor self, Tensor other, *, str? rounding_mode) -> Tensor
+    2257              : inline at::Tensor Tensor::div(const at::Tensor & other, c10::optional<c10::string_view> rounding_mode) const {
+    2258              :     return at::_ops::div_Tensor_mode::call(const_cast<Tensor&>(*this), other, rounding_mode);
+    2259              : }
+    2260              : 
+    2261              : // aten::div_.Tensor_mode(Tensor(a!) self, Tensor other, *, str? rounding_mode) -> Tensor(a!)
+    2262              : inline at::Tensor & Tensor::div_(const at::Tensor & other, c10::optional<c10::string_view> rounding_mode) const {
+    2263              :     return at::_ops::div__Tensor_mode::call(const_cast<Tensor&>(*this), other, rounding_mode);
+    2264              : }
+    2265              : 
+    2266              : // aten::div.Scalar(Tensor self, Scalar other) -> Tensor
+    2267        16744 : inline at::Tensor Tensor::div(const at::Scalar & other) const {
+    2268        16744 :     return at::_ops::div_Scalar::call(const_cast<Tensor&>(*this), other);
+    2269              : }
+    2270              : 
+    2271              : // aten::div_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    2272          228 : inline at::Tensor & Tensor::div_(const at::Scalar & other) const {
+    2273          228 :     return at::_ops::div__Scalar::call(const_cast<Tensor&>(*this), other);
+    2274              : }
+    2275              : 
+    2276              : // aten::div.Scalar_mode(Tensor self, Scalar other, *, str? rounding_mode) -> Tensor
+    2277              : inline at::Tensor Tensor::div(const at::Scalar & other, c10::optional<c10::string_view> rounding_mode) const {
+    2278              :     return at::_ops::div_Scalar_mode::call(const_cast<Tensor&>(*this), other, rounding_mode);
+    2279              : }
+    2280              : 
+    2281              : // aten::div_.Scalar_mode(Tensor(a!) self, Scalar other, *, str? rounding_mode) -> Tensor(a!)
+    2282              : inline at::Tensor & Tensor::div_(const at::Scalar & other, c10::optional<c10::string_view> rounding_mode) const {
+    2283              :     return at::_ops::div__Scalar_mode::call(const_cast<Tensor&>(*this), other, rounding_mode);
+    2284              : }
+    2285              : 
+    2286              : // aten::divide.Tensor(Tensor self, Tensor other) -> Tensor
+    2287              : inline at::Tensor Tensor::divide(const at::Tensor & other) const {
+    2288              :     return at::_ops::divide_Tensor::call(const_cast<Tensor&>(*this), other);
+    2289              : }
+    2290              : 
+    2291              : // aten::divide_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    2292              : inline at::Tensor & Tensor::divide_(const at::Tensor & other) const {
+    2293              :     return at::_ops::divide__Tensor::call(const_cast<Tensor&>(*this), other);
+    2294              : }
+    2295              : 
+    2296              : // aten::divide.Scalar(Tensor self, Scalar other) -> Tensor
+    2297              : inline at::Tensor Tensor::divide(const at::Scalar & other) const {
+    2298              :     return at::_ops::divide_Scalar::call(const_cast<Tensor&>(*this), other);
+    2299              : }
+    2300              : 
+    2301              : // aten::divide_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    2302              : inline at::Tensor & Tensor::divide_(const at::Scalar & other) const {
+    2303              :     return at::_ops::divide__Scalar::call(const_cast<Tensor&>(*this), other);
+    2304              : }
+    2305              : 
+    2306              : // aten::divide.Tensor_mode(Tensor self, Tensor other, *, str? rounding_mode) -> Tensor
+    2307              : inline at::Tensor Tensor::divide(const at::Tensor & other, c10::optional<c10::string_view> rounding_mode) const {
+    2308              :     return at::_ops::divide_Tensor_mode::call(const_cast<Tensor&>(*this), other, rounding_mode);
+    2309              : }
+    2310              : 
+    2311              : // aten::divide_.Tensor_mode(Tensor(a!) self, Tensor other, *, str? rounding_mode) -> Tensor(a!)
+    2312              : inline at::Tensor & Tensor::divide_(const at::Tensor & other, c10::optional<c10::string_view> rounding_mode) const {
+    2313              :     return at::_ops::divide__Tensor_mode::call(const_cast<Tensor&>(*this), other, rounding_mode);
+    2314              : }
+    2315              : 
+    2316              : // aten::divide.Scalar_mode(Tensor self, Scalar other, *, str? rounding_mode) -> Tensor
+    2317              : inline at::Tensor Tensor::divide(const at::Scalar & other, c10::optional<c10::string_view> rounding_mode) const {
+    2318              :     return at::_ops::divide_Scalar_mode::call(const_cast<Tensor&>(*this), other, rounding_mode);
+    2319              : }
+    2320              : 
+    2321              : // aten::divide_.Scalar_mode(Tensor(a!) self, Scalar other, *, str? rounding_mode) -> Tensor(a!)
+    2322              : inline at::Tensor & Tensor::divide_(const at::Scalar & other, c10::optional<c10::string_view> rounding_mode) const {
+    2323              :     return at::_ops::divide__Scalar_mode::call(const_cast<Tensor&>(*this), other, rounding_mode);
+    2324              : }
+    2325              : 
+    2326              : // aten::true_divide.Tensor(Tensor self, Tensor other) -> Tensor
+    2327              : inline at::Tensor Tensor::true_divide(const at::Tensor & other) const {
+    2328              :     return at::_ops::true_divide_Tensor::call(const_cast<Tensor&>(*this), other);
+    2329              : }
+    2330              : 
+    2331              : // aten::true_divide_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    2332              : inline at::Tensor & Tensor::true_divide_(const at::Tensor & other) const {
+    2333              :     return at::_ops::true_divide__Tensor::call(const_cast<Tensor&>(*this), other);
+    2334              : }
+    2335              : 
+    2336              : // aten::true_divide.Scalar(Tensor self, Scalar other) -> Tensor
+    2337              : inline at::Tensor Tensor::true_divide(const at::Scalar & other) const {
+    2338              :     return at::_ops::true_divide_Scalar::call(const_cast<Tensor&>(*this), other);
+    2339              : }
+    2340              : 
+    2341              : // aten::true_divide_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    2342              : inline at::Tensor & Tensor::true_divide_(const at::Scalar & other) const {
+    2343              :     return at::_ops::true_divide__Scalar::call(const_cast<Tensor&>(*this), other);
+    2344              : }
+    2345              : 
+    2346              : // aten::dot(Tensor self, Tensor tensor) -> Tensor
+    2347              : inline at::Tensor Tensor::dot(const at::Tensor & tensor) const {
+    2348              :     return at::_ops::dot::call(const_cast<Tensor&>(*this), tensor);
+    2349              : }
+    2350              : 
+    2351              : // aten::vdot(Tensor self, Tensor other) -> Tensor
+    2352              : inline at::Tensor Tensor::vdot(const at::Tensor & other) const {
+    2353              :     return at::_ops::vdot::call(const_cast<Tensor&>(*this), other);
+    2354              : }
+    2355              : 
+    2356              : // aten::new_empty(Tensor self, SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2357              : inline at::Tensor Tensor::new_empty(at::IntArrayRef size, at::TensorOptions options) const {
+    2358              :     return at::_ops::new_empty::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(size), optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+    2359              : }
+    2360              : 
+    2361              : // aten::new_empty(Tensor self, SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2362              : inline at::Tensor Tensor::new_empty(at::IntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const {
+    2363              :     return at::_ops::new_empty::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(size), dtype, layout, device, pin_memory);
+    2364              : }
+    2365              : 
+    2366              : // aten::new_empty(Tensor self, SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2367              : inline at::Tensor Tensor::new_empty_symint(c10::SymIntArrayRef size, at::TensorOptions options) const {
+    2368              :     return at::_ops::new_empty::call(const_cast<Tensor&>(*this), size, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+    2369              : }
+    2370              : 
+    2371              : // aten::new_empty(Tensor self, SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2372              : inline at::Tensor Tensor::new_empty_symint(c10::SymIntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const {
+    2373              :     return at::_ops::new_empty::call(const_cast<Tensor&>(*this), size, dtype, layout, device, pin_memory);
+    2374              : }
+    2375              : 
+    2376              : // aten::new_empty_strided(Tensor self, SymInt[] size, SymInt[] stride, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2377              : inline at::Tensor Tensor::new_empty_strided(at::IntArrayRef size, at::IntArrayRef stride, at::TensorOptions options) const {
+    2378              :     return at::_ops::new_empty_strided::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(size), c10::fromIntArrayRefSlow(stride), optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+    2379              : }
+    2380              : 
+    2381              : // aten::new_empty_strided(Tensor self, SymInt[] size, SymInt[] stride, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2382              : inline at::Tensor Tensor::new_empty_strided(at::IntArrayRef size, at::IntArrayRef stride, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const {
+    2383              :     return at::_ops::new_empty_strided::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(size), c10::fromIntArrayRefSlow(stride), dtype, layout, device, pin_memory);
+    2384              : }
+    2385              : 
+    2386              : // aten::new_empty_strided(Tensor self, SymInt[] size, SymInt[] stride, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2387              : inline at::Tensor Tensor::new_empty_strided_symint(c10::SymIntArrayRef size, c10::SymIntArrayRef stride, at::TensorOptions options) const {
+    2388              :     return at::_ops::new_empty_strided::call(const_cast<Tensor&>(*this), size, stride, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+    2389              : }
+    2390              : 
+    2391              : // aten::new_empty_strided(Tensor self, SymInt[] size, SymInt[] stride, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2392              : inline at::Tensor Tensor::new_empty_strided_symint(c10::SymIntArrayRef size, c10::SymIntArrayRef stride, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const {
+    2393              :     return at::_ops::new_empty_strided::call(const_cast<Tensor&>(*this), size, stride, dtype, layout, device, pin_memory);
+    2394              : }
+    2395              : 
+    2396              : // aten::new_full(Tensor self, SymInt[] size, Scalar fill_value, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2397              : inline at::Tensor Tensor::new_full(at::IntArrayRef size, const at::Scalar & fill_value, at::TensorOptions options) const {
+    2398              :     return at::_ops::new_full::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(size), fill_value, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+    2399              : }
+    2400              : 
+    2401              : // aten::new_full(Tensor self, SymInt[] size, Scalar fill_value, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2402              : inline at::Tensor Tensor::new_full(at::IntArrayRef size, const at::Scalar & fill_value, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const {
+    2403              :     return at::_ops::new_full::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(size), fill_value, dtype, layout, device, pin_memory);
+    2404              : }
+    2405              : 
+    2406              : // aten::new_full(Tensor self, SymInt[] size, Scalar fill_value, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2407              : inline at::Tensor Tensor::new_full_symint(c10::SymIntArrayRef size, const at::Scalar & fill_value, at::TensorOptions options) const {
+    2408              :     return at::_ops::new_full::call(const_cast<Tensor&>(*this), size, fill_value, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+    2409              : }
+    2410              : 
+    2411              : // aten::new_full(Tensor self, SymInt[] size, Scalar fill_value, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2412              : inline at::Tensor Tensor::new_full_symint(c10::SymIntArrayRef size, const at::Scalar & fill_value, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const {
+    2413              :     return at::_ops::new_full::call(const_cast<Tensor&>(*this), size, fill_value, dtype, layout, device, pin_memory);
+    2414              : }
+    2415              : 
+    2416              : // aten::new_zeros(Tensor self, SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2417              : inline at::Tensor Tensor::new_zeros(at::IntArrayRef size, at::TensorOptions options) const {
+    2418              :     return at::_ops::new_zeros::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(size), optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+    2419              : }
+    2420              : 
+    2421              : // aten::new_zeros(Tensor self, SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2422              : inline at::Tensor Tensor::new_zeros(at::IntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const {
+    2423              :     return at::_ops::new_zeros::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(size), dtype, layout, device, pin_memory);
+    2424              : }
+    2425              : 
+    2426              : // aten::new_zeros(Tensor self, SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2427              : inline at::Tensor Tensor::new_zeros_symint(c10::SymIntArrayRef size, at::TensorOptions options) const {
+    2428              :     return at::_ops::new_zeros::call(const_cast<Tensor&>(*this), size, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+    2429              : }
+    2430              : 
+    2431              : // aten::new_zeros(Tensor self, SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2432              : inline at::Tensor Tensor::new_zeros_symint(c10::SymIntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const {
+    2433              :     return at::_ops::new_zeros::call(const_cast<Tensor&>(*this), size, dtype, layout, device, pin_memory);
+    2434              : }
+    2435              : 
+    2436              : // aten::new_ones(Tensor self, SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2437              : inline at::Tensor Tensor::new_ones(at::IntArrayRef size, at::TensorOptions options) const {
+    2438              :     return at::_ops::new_ones::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(size), optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+    2439              : }
+    2440              : 
+    2441              : // aten::new_ones(Tensor self, SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2442              : inline at::Tensor Tensor::new_ones(at::IntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const {
+    2443              :     return at::_ops::new_ones::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(size), dtype, layout, device, pin_memory);
+    2444              : }
+    2445              : 
+    2446              : // aten::new_ones(Tensor self, SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2447              : inline at::Tensor Tensor::new_ones_symint(c10::SymIntArrayRef size, at::TensorOptions options) const {
+    2448              :     return at::_ops::new_ones::call(const_cast<Tensor&>(*this), size, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+    2449              : }
+    2450              : 
+    2451              : // aten::new_ones(Tensor self, SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+    2452              : inline at::Tensor Tensor::new_ones_symint(c10::SymIntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) const {
+    2453              :     return at::_ops::new_ones::call(const_cast<Tensor&>(*this), size, dtype, layout, device, pin_memory);
+    2454              : }
+    2455              : 
+    2456              : // aten::resize_(Tensor(a!) self, SymInt[] size, *, MemoryFormat? memory_format=None) -> Tensor(a!)
+    2457              : inline const at::Tensor & Tensor::resize_(at::IntArrayRef size, c10::optional<at::MemoryFormat> memory_format) const {
+    2458              :     return at::_ops::resize_::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(size), memory_format);
+    2459              : }
+    2460              : 
+    2461              : // aten::resize_(Tensor(a!) self, SymInt[] size, *, MemoryFormat? memory_format=None) -> Tensor(a!)
+    2462              : inline const at::Tensor & Tensor::resize__symint(c10::SymIntArrayRef size, c10::optional<at::MemoryFormat> memory_format) const {
+    2463              :     return at::_ops::resize_::call(const_cast<Tensor&>(*this), size, memory_format);
+    2464              : }
+    2465              : 
+    2466              : // aten::erf(Tensor self) -> Tensor
+    2467              : inline at::Tensor Tensor::erf() const {
+    2468              :     return at::_ops::erf::call(const_cast<Tensor&>(*this));
+    2469              : }
+    2470              : 
+    2471              : // aten::erf_(Tensor(a!) self) -> Tensor(a!)
+    2472              : inline at::Tensor & Tensor::erf_() const {
+    2473              :     return at::_ops::erf_::call(const_cast<Tensor&>(*this));
+    2474              : }
+    2475              : 
+    2476              : // aten::erfc(Tensor self) -> Tensor
+    2477              : inline at::Tensor Tensor::erfc() const {
+    2478              :     return at::_ops::erfc::call(const_cast<Tensor&>(*this));
+    2479              : }
+    2480              : 
+    2481              : // aten::erfc_(Tensor(a!) self) -> Tensor(a!)
+    2482              : inline at::Tensor & Tensor::erfc_() const {
+    2483              :     return at::_ops::erfc_::call(const_cast<Tensor&>(*this));
+    2484              : }
+    2485              : 
+    2486              : // aten::exp(Tensor self) -> Tensor
+    2487              : inline at::Tensor Tensor::exp() const {
+    2488              :     return at::_ops::exp::call(const_cast<Tensor&>(*this));
+    2489              : }
+    2490              : 
+    2491              : // aten::exp_(Tensor(a!) self) -> Tensor(a!)
+    2492              : inline at::Tensor & Tensor::exp_() const {
+    2493              :     return at::_ops::exp_::call(const_cast<Tensor&>(*this));
+    2494              : }
+    2495              : 
+    2496              : // aten::exp2(Tensor self) -> Tensor
+    2497              : inline at::Tensor Tensor::exp2() const {
+    2498              :     return at::_ops::exp2::call(const_cast<Tensor&>(*this));
+    2499              : }
+    2500              : 
+    2501              : // aten::exp2_(Tensor(a!) self) -> Tensor(a!)
+    2502              : inline at::Tensor & Tensor::exp2_() const {
+    2503              :     return at::_ops::exp2_::call(const_cast<Tensor&>(*this));
+    2504              : }
+    2505              : 
+    2506              : // aten::expm1(Tensor self) -> Tensor
+    2507              : inline at::Tensor Tensor::expm1() const {
+    2508              :     return at::_ops::expm1::call(const_cast<Tensor&>(*this));
+    2509              : }
+    2510              : 
+    2511              : // aten::expm1_(Tensor(a!) self) -> Tensor(a!)
+    2512              : inline at::Tensor & Tensor::expm1_() const {
+    2513              :     return at::_ops::expm1_::call(const_cast<Tensor&>(*this));
+    2514              : }
+    2515              : 
+    2516              : // aten::expand(Tensor(a) self, SymInt[] size, *, bool implicit=False) -> Tensor(a)
+    2517              : inline at::Tensor Tensor::expand(at::IntArrayRef size, bool implicit) const {
+    2518              :     return at::_ops::expand::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(size), implicit);
+    2519              : }
+    2520              : 
+    2521              : // aten::expand(Tensor(a) self, SymInt[] size, *, bool implicit=False) -> Tensor(a)
+    2522              : inline at::Tensor Tensor::expand_symint(c10::SymIntArrayRef size, bool implicit) const {
+    2523              :     return at::_ops::expand::call(const_cast<Tensor&>(*this), size, implicit);
+    2524              : }
+    2525              : 
+    2526              : // aten::expand_as(Tensor(a) self, Tensor other) -> Tensor(a)
+    2527              : inline at::Tensor Tensor::expand_as(const at::Tensor & other) const {
+    2528              :     return at::_ops::expand_as::call(const_cast<Tensor&>(*this), other);
+    2529              : }
+    2530              : 
+    2531              : // aten::flatten.using_ints(Tensor(a) self, int start_dim=0, int end_dim=-1) -> Tensor(a)
+    2532              : inline at::Tensor Tensor::flatten(int64_t start_dim, int64_t end_dim) const {
+    2533              :     return at::_ops::flatten_using_ints::call(const_cast<Tensor&>(*this), start_dim, end_dim);
+    2534              : }
+    2535              : 
+    2536              : // aten::flatten.named_out_dim(Tensor(a) self, int start_dim, int end_dim, Dimname out_dim) -> Tensor(a)
+    2537              : inline at::Tensor Tensor::flatten(int64_t start_dim, int64_t end_dim, at::Dimname out_dim) const {
+    2538              :     return at::_ops::flatten_named_out_dim::call(const_cast<Tensor&>(*this), start_dim, end_dim, out_dim);
+    2539              : }
+    2540              : 
+    2541              : // aten::flatten.using_names(Tensor(a) self, Dimname start_dim, Dimname end_dim, Dimname out_dim) -> Tensor(a)
+    2542              : inline at::Tensor Tensor::flatten(at::Dimname start_dim, at::Dimname end_dim, at::Dimname out_dim) const {
+    2543              :     return at::_ops::flatten_using_names::call(const_cast<Tensor&>(*this), start_dim, end_dim, out_dim);
+    2544              : }
+    2545              : 
+    2546              : // aten::flatten.DimnameList(Tensor(a) self, Dimname[] dims, Dimname out_dim) -> Tensor(a)
+    2547              : inline at::Tensor Tensor::flatten(at::DimnameList dims, at::Dimname out_dim) const {
+    2548              :     return at::_ops::flatten_DimnameList::call(const_cast<Tensor&>(*this), dims, out_dim);
+    2549              : }
+    2550              : 
+    2551              : // aten::unflatten.int(Tensor(a) self, int dim, SymInt[] sizes) -> Tensor(a)
+    2552              : inline at::Tensor Tensor::unflatten(int64_t dim, at::IntArrayRef sizes) const {
+    2553              :     return at::_ops::unflatten_int::call(const_cast<Tensor&>(*this), dim, c10::fromIntArrayRefSlow(sizes));
+    2554              : }
+    2555              : 
+    2556              : // aten::unflatten.int(Tensor(a) self, int dim, SymInt[] sizes) -> Tensor(a)
+    2557              : inline at::Tensor Tensor::unflatten_symint(int64_t dim, c10::SymIntArrayRef sizes) const {
+    2558              :     return at::_ops::unflatten_int::call(const_cast<Tensor&>(*this), dim, sizes);
+    2559              : }
+    2560              : 
+    2561              : // aten::unflatten.Dimname(Tensor(a) self, Dimname dim, SymInt[] sizes, Dimname[] names) -> Tensor(a)
+    2562              : inline at::Tensor Tensor::unflatten(at::Dimname dim, at::IntArrayRef sizes, at::DimnameList names) const {
+    2563              :     return at::_ops::unflatten_Dimname::call(const_cast<Tensor&>(*this), dim, c10::fromIntArrayRefSlow(sizes), names);
+    2564              : }
+    2565              : 
+    2566              : // aten::unflatten.Dimname(Tensor(a) self, Dimname dim, SymInt[] sizes, Dimname[] names) -> Tensor(a)
+    2567              : inline at::Tensor Tensor::unflatten_symint(at::Dimname dim, c10::SymIntArrayRef sizes, at::DimnameList names) const {
+    2568              :     return at::_ops::unflatten_Dimname::call(const_cast<Tensor&>(*this), dim, sizes, names);
+    2569              : }
+    2570              : 
+    2571              : // aten::fill_.Scalar(Tensor(a!) self, Scalar value) -> Tensor(a!)
+    2572        28734 : inline at::Tensor & Tensor::fill_(const at::Scalar & value) const {
+    2573        28734 :     return at::_ops::fill__Scalar::call(const_cast<Tensor&>(*this), value);
+    2574              : }
+    2575              : 
+    2576              : // aten::fill_.Tensor(Tensor(a!) self, Tensor value) -> Tensor(a!)
+    2577              : inline at::Tensor & Tensor::fill_(const at::Tensor & value) const {
+    2578              :     return at::_ops::fill__Tensor::call(const_cast<Tensor&>(*this), value);
+    2579              : }
+    2580              : 
+    2581              : // aten::floor(Tensor self) -> Tensor
+    2582              : inline at::Tensor Tensor::floor() const {
+    2583              :     return at::_ops::floor::call(const_cast<Tensor&>(*this));
+    2584              : }
+    2585              : 
+    2586              : // aten::floor_(Tensor(a!) self) -> Tensor(a!)
+    2587              : inline at::Tensor & Tensor::floor_() const {
+    2588              :     return at::_ops::floor_::call(const_cast<Tensor&>(*this));
+    2589              : }
+    2590              : 
+    2591              : // aten::floor_divide(Tensor self, Tensor other) -> Tensor
+    2592              : inline at::Tensor Tensor::floor_divide(const at::Tensor & other) const {
+    2593              :     return at::_ops::floor_divide::call(const_cast<Tensor&>(*this), other);
+    2594              : }
+    2595              : 
+    2596              : // aten::floor_divide_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    2597              : inline at::Tensor & Tensor::floor_divide_(const at::Tensor & other) const {
+    2598              :     return at::_ops::floor_divide__Tensor::call(const_cast<Tensor&>(*this), other);
+    2599              : }
+    2600              : 
+    2601              : // aten::floor_divide.Scalar(Tensor self, Scalar other) -> Tensor
+    2602              : inline at::Tensor Tensor::floor_divide(const at::Scalar & other) const {
+    2603              :     return at::_ops::floor_divide_Scalar::call(const_cast<Tensor&>(*this), other);
+    2604              : }
+    2605              : 
+    2606              : // aten::floor_divide_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    2607              : inline at::Tensor & Tensor::floor_divide_(const at::Scalar & other) const {
+    2608              :     return at::_ops::floor_divide__Scalar::call(const_cast<Tensor&>(*this), other);
+    2609              : }
+    2610              : 
+    2611              : // aten::frac(Tensor self) -> Tensor
+    2612              : inline at::Tensor Tensor::frac() const {
+    2613              :     return at::_ops::frac::call(const_cast<Tensor&>(*this));
+    2614              : }
+    2615              : 
+    2616              : // aten::frac_(Tensor(a!) self) -> Tensor(a!)
+    2617              : inline at::Tensor & Tensor::frac_() const {
+    2618              :     return at::_ops::frac_::call(const_cast<Tensor&>(*this));
+    2619              : }
+    2620              : 
+    2621              : // aten::gcd(Tensor self, Tensor other) -> Tensor
+    2622              : inline at::Tensor Tensor::gcd(const at::Tensor & other) const {
+    2623              :     return at::_ops::gcd::call(const_cast<Tensor&>(*this), other);
+    2624              : }
+    2625              : 
+    2626              : // aten::gcd_(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    2627              : inline at::Tensor & Tensor::gcd_(const at::Tensor & other) const {
+    2628              :     return at::_ops::gcd_::call(const_cast<Tensor&>(*this), other);
+    2629              : }
+    2630              : 
+    2631              : // aten::lcm(Tensor self, Tensor other) -> Tensor
+    2632              : inline at::Tensor Tensor::lcm(const at::Tensor & other) const {
+    2633              :     return at::_ops::lcm::call(const_cast<Tensor&>(*this), other);
+    2634              : }
+    2635              : 
+    2636              : // aten::lcm_(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    2637              : inline at::Tensor & Tensor::lcm_(const at::Tensor & other) const {
+    2638              :     return at::_ops::lcm_::call(const_cast<Tensor&>(*this), other);
+    2639              : }
+    2640              : 
+    2641              : // aten::index.Tensor(Tensor self, Tensor?[] indices) -> Tensor
+    2642     36925424 : inline at::Tensor Tensor::index(const c10::List<c10::optional<at::Tensor>> & indices) const {
+    2643     36925424 :     return at::_ops::index_Tensor::call(const_cast<Tensor&>(*this), indices);
+    2644              : }
+    2645              : 
+    2646              : // aten::index_copy_(Tensor(a!) self, int dim, Tensor index, Tensor source) -> Tensor(a!)
+    2647              : inline at::Tensor & Tensor::index_copy_(int64_t dim, const at::Tensor & index, const at::Tensor & source) const {
+    2648              :     return at::_ops::index_copy_::call(const_cast<Tensor&>(*this), dim, index, source);
+    2649              : }
+    2650              : 
+    2651              : // aten::index_copy(Tensor self, int dim, Tensor index, Tensor source) -> Tensor
+    2652              : inline at::Tensor Tensor::index_copy(int64_t dim, const at::Tensor & index, const at::Tensor & source) const {
+    2653              :     return at::_ops::index_copy::call(const_cast<Tensor&>(*this), dim, index, source);
+    2654              : }
+    2655              : 
+    2656              : // aten::index_copy_.dimname(Tensor(a!) self, Dimname dim, Tensor index, Tensor source) -> Tensor(a!)
+    2657              : inline at::Tensor & Tensor::index_copy_(at::Dimname dim, const at::Tensor & index, const at::Tensor & source) const {
+    2658              :     return at::_ops::index_copy__dimname::call(const_cast<Tensor&>(*this), dim, index, source);
+    2659              : }
+    2660              : 
+    2661              : // aten::index_copy.dimname(Tensor self, Dimname dim, Tensor index, Tensor source) -> Tensor
+    2662              : inline at::Tensor Tensor::index_copy(at::Dimname dim, const at::Tensor & index, const at::Tensor & source) const {
+    2663              :     return at::_ops::index_copy_dimname::call(const_cast<Tensor&>(*this), dim, index, source);
+    2664              : }
+    2665              : 
+    2666              : // aten::index_put_(Tensor(a!) self, Tensor?[] indices, Tensor values, bool accumulate=False) -> Tensor(a!)
+    2667      5122988 : inline at::Tensor & Tensor::index_put_(const c10::List<c10::optional<at::Tensor>> & indices, const at::Tensor & values, bool accumulate) const {
+    2668      5122988 :     return at::_ops::index_put_::call(const_cast<Tensor&>(*this), indices, values, accumulate);
+    2669              : }
+    2670              : 
+    2671              : // aten::index_put(Tensor self, Tensor?[] indices, Tensor values, bool accumulate=False) -> Tensor
+    2672              : inline at::Tensor Tensor::index_put(const c10::List<c10::optional<at::Tensor>> & indices, const at::Tensor & values, bool accumulate) const {
+    2673              :     return at::_ops::index_put::call(const_cast<Tensor&>(*this), indices, values, accumulate);
+    2674              : }
+    2675              : 
+    2676              : // aten::isclose(Tensor self, Tensor other, float rtol=1e-05, float atol=1e-08, bool equal_nan=False) -> Tensor
+    2677              : inline at::Tensor Tensor::isclose(const at::Tensor & other, double rtol, double atol, bool equal_nan) const {
+    2678              :     return at::_ops::isclose::call(const_cast<Tensor&>(*this), other, rtol, atol, equal_nan);
+    2679              : }
+    2680              : 
+    2681              : // aten::isnan(Tensor self) -> Tensor
+    2682              : inline at::Tensor Tensor::isnan() const {
+    2683              :     return at::_ops::isnan::call(const_cast<Tensor&>(*this));
+    2684              : }
+    2685              : 
+    2686              : // aten::is_distributed(Tensor self) -> bool
+    2687              : inline bool Tensor::is_distributed() const {
+    2688              :     return at::_ops::is_distributed::call(const_cast<Tensor&>(*this));
+    2689              : }
+    2690              : 
+    2691              : // aten::is_floating_point(Tensor self) -> bool
+    2692              : inline bool Tensor::__dispatch_is_floating_point() const {
+    2693              :     return at::_ops::is_floating_point::call(const_cast<Tensor&>(*this));
+    2694              : }
+    2695              : 
+    2696              : // aten::is_complex(Tensor self) -> bool
+    2697              : inline bool Tensor::__dispatch_is_complex() const {
+    2698              :     return at::_ops::is_complex::call(const_cast<Tensor&>(*this));
+    2699              : }
+    2700              : 
+    2701              : // aten::is_conj(Tensor self) -> bool
+    2702              : inline bool Tensor::__dispatch_is_conj() const {
+    2703              :     return at::_ops::is_conj::call(const_cast<Tensor&>(*this));
+    2704              : }
+    2705              : 
+    2706              : // aten::_is_zerotensor(Tensor self) -> bool
+    2707              : inline bool Tensor::__dispatch__is_zerotensor() const {
+    2708              :     return at::_ops::_is_zerotensor::call(const_cast<Tensor&>(*this));
+    2709              : }
+    2710              : 
+    2711              : // aten::is_neg(Tensor self) -> bool
+    2712              : inline bool Tensor::__dispatch_is_neg() const {
+    2713              :     return at::_ops::is_neg::call(const_cast<Tensor&>(*this));
+    2714              : }
+    2715              : 
+    2716              : // aten::isreal(Tensor self) -> Tensor
+    2717              : inline at::Tensor Tensor::isreal() const {
+    2718              :     return at::_ops::isreal::call(const_cast<Tensor&>(*this));
+    2719              : }
+    2720              : 
+    2721              : // aten::is_nonzero(Tensor self) -> bool
+    2722              : inline bool Tensor::is_nonzero() const {
+    2723              :     return at::_ops::is_nonzero::call(const_cast<Tensor&>(*this));
+    2724              : }
+    2725              : 
+    2726              : // aten::is_same_size(Tensor self, Tensor other) -> bool
+    2727              : inline bool Tensor::is_same_size(const at::Tensor & other) const {
+    2728              :     return at::_ops::is_same_size::call(const_cast<Tensor&>(*this), other);
+    2729              : }
+    2730              : 
+    2731              : // aten::is_signed(Tensor self) -> bool
+    2732              : inline bool Tensor::__dispatch_is_signed() const {
+    2733              :     return at::_ops::is_signed::call(const_cast<Tensor&>(*this));
+    2734              : }
+    2735              : 
+    2736              : // aten::is_inference(Tensor self) -> bool
+    2737              : inline bool Tensor::__dispatch_is_inference() const {
+    2738              :     return at::_ops::is_inference::call(const_cast<Tensor&>(*this));
+    2739              : }
+    2740              : 
+    2741              : // aten::kron(Tensor self, Tensor other) -> Tensor
+    2742              : inline at::Tensor Tensor::kron(const at::Tensor & other) const {
+    2743              :     return at::_ops::kron::call(const_cast<Tensor&>(*this), other);
+    2744              : }
+    2745              : 
+    2746              : // aten::kthvalue(Tensor self, int k, int dim=-1, bool keepdim=False) -> (Tensor values, Tensor indices)
+    2747              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::kthvalue(int64_t k, int64_t dim, bool keepdim) const {
+    2748              :     return at::_ops::kthvalue::call(const_cast<Tensor&>(*this), k, dim, keepdim);
+    2749              : }
+    2750              : 
+    2751              : // aten::kthvalue.dimname(Tensor self, int k, Dimname dim, bool keepdim=False) -> (Tensor values, Tensor indices)
+    2752              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::kthvalue(int64_t k, at::Dimname dim, bool keepdim) const {
+    2753              :     return at::_ops::kthvalue_dimname::call(const_cast<Tensor&>(*this), k, dim, keepdim);
+    2754              : }
+    2755              : 
+    2756              : // aten::nan_to_num(Tensor self, float? nan=None, float? posinf=None, float? neginf=None) -> Tensor
+    2757              : inline at::Tensor Tensor::nan_to_num(c10::optional<double> nan, c10::optional<double> posinf, c10::optional<double> neginf) const {
+    2758              :     return at::_ops::nan_to_num::call(const_cast<Tensor&>(*this), nan, posinf, neginf);
+    2759              : }
+    2760              : 
+    2761              : // aten::nan_to_num_(Tensor(a!) self, float? nan=None, float? posinf=None, float? neginf=None) -> Tensor(a!)
+    2762              : inline at::Tensor & Tensor::nan_to_num_(c10::optional<double> nan, c10::optional<double> posinf, c10::optional<double> neginf) const {
+    2763              :     return at::_ops::nan_to_num_::call(const_cast<Tensor&>(*this), nan, posinf, neginf);
+    2764              : }
+    2765              : 
+    2766              : // aten::ldexp.Tensor(Tensor self, Tensor other) -> Tensor
+    2767              : inline at::Tensor Tensor::ldexp(const at::Tensor & other) const {
+    2768              :     return at::_ops::ldexp_Tensor::call(const_cast<Tensor&>(*this), other);
+    2769              : }
+    2770              : 
+    2771              : // aten::ldexp_(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    2772              : inline at::Tensor & Tensor::ldexp_(const at::Tensor & other) const {
+    2773              :     return at::_ops::ldexp_::call(const_cast<Tensor&>(*this), other);
+    2774              : }
+    2775              : 
+    2776              : // aten::log(Tensor self) -> Tensor
+    2777              : inline at::Tensor Tensor::log() const {
+    2778              :     return at::_ops::log::call(const_cast<Tensor&>(*this));
+    2779              : }
+    2780              : 
+    2781              : // aten::log_(Tensor(a!) self) -> Tensor(a!)
+    2782              : inline at::Tensor & Tensor::log_() const {
+    2783              :     return at::_ops::log_::call(const_cast<Tensor&>(*this));
+    2784              : }
+    2785              : 
+    2786              : // aten::log10(Tensor self) -> Tensor
+    2787              : inline at::Tensor Tensor::log10() const {
+    2788              :     return at::_ops::log10::call(const_cast<Tensor&>(*this));
+    2789              : }
+    2790              : 
+    2791              : // aten::log10_(Tensor(a!) self) -> Tensor(a!)
+    2792              : inline at::Tensor & Tensor::log10_() const {
+    2793              :     return at::_ops::log10_::call(const_cast<Tensor&>(*this));
+    2794              : }
+    2795              : 
+    2796              : // aten::log1p(Tensor self) -> Tensor
+    2797              : inline at::Tensor Tensor::log1p() const {
+    2798              :     return at::_ops::log1p::call(const_cast<Tensor&>(*this));
+    2799              : }
+    2800              : 
+    2801              : // aten::log1p_(Tensor(a!) self) -> Tensor(a!)
+    2802              : inline at::Tensor & Tensor::log1p_() const {
+    2803              :     return at::_ops::log1p_::call(const_cast<Tensor&>(*this));
+    2804              : }
+    2805              : 
+    2806              : // aten::log2(Tensor self) -> Tensor
+    2807              : inline at::Tensor Tensor::log2() const {
+    2808              :     return at::_ops::log2::call(const_cast<Tensor&>(*this));
+    2809              : }
+    2810              : 
+    2811              : // aten::log2_(Tensor(a!) self) -> Tensor(a!)
+    2812              : inline at::Tensor & Tensor::log2_() const {
+    2813              :     return at::_ops::log2_::call(const_cast<Tensor&>(*this));
+    2814              : }
+    2815              : 
+    2816              : // aten::logaddexp(Tensor self, Tensor other) -> Tensor
+    2817              : inline at::Tensor Tensor::logaddexp(const at::Tensor & other) const {
+    2818              :     return at::_ops::logaddexp::call(const_cast<Tensor&>(*this), other);
+    2819              : }
+    2820              : 
+    2821              : // aten::logaddexp2(Tensor self, Tensor other) -> Tensor
+    2822              : inline at::Tensor Tensor::logaddexp2(const at::Tensor & other) const {
+    2823              :     return at::_ops::logaddexp2::call(const_cast<Tensor&>(*this), other);
+    2824              : }
+    2825              : 
+    2826              : // aten::xlogy.Tensor(Tensor self, Tensor other) -> Tensor
+    2827              : inline at::Tensor Tensor::xlogy(const at::Tensor & other) const {
+    2828              :     return at::_ops::xlogy_Tensor::call(const_cast<Tensor&>(*this), other);
+    2829              : }
+    2830              : 
+    2831              : // aten::xlogy.Scalar_Other(Tensor self, Scalar other) -> Tensor
+    2832              : inline at::Tensor Tensor::xlogy(const at::Scalar & other) const {
+    2833              :     return at::_ops::xlogy_Scalar_Other::call(const_cast<Tensor&>(*this), other);
+    2834              : }
+    2835              : 
+    2836              : // aten::xlogy_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    2837              : inline at::Tensor & Tensor::xlogy_(const at::Tensor & other) const {
+    2838              :     return at::_ops::xlogy__Tensor::call(const_cast<Tensor&>(*this), other);
+    2839              : }
+    2840              : 
+    2841              : // aten::xlogy_.Scalar_Other(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    2842              : inline at::Tensor & Tensor::xlogy_(const at::Scalar & other) const {
+    2843              :     return at::_ops::xlogy__Scalar_Other::call(const_cast<Tensor&>(*this), other);
+    2844              : }
+    2845              : 
+    2846              : // aten::log_softmax.int(Tensor self, int dim, ScalarType? dtype=None) -> Tensor
+    2847              : inline at::Tensor Tensor::log_softmax(int64_t dim, c10::optional<at::ScalarType> dtype) const {
+    2848              :     return at::_ops::log_softmax_int::call(const_cast<Tensor&>(*this), dim, dtype);
+    2849              : }
+    2850              : 
+    2851              : // aten::log_softmax.Dimname(Tensor self, Dimname dim, *, ScalarType? dtype=None) -> Tensor
+    2852              : inline at::Tensor Tensor::log_softmax(at::Dimname dim, c10::optional<at::ScalarType> dtype) const {
+    2853              :     return at::_ops::log_softmax_Dimname::call(const_cast<Tensor&>(*this), dim, dtype);
+    2854              : }
+    2855              : 
+    2856              : // aten::logcumsumexp(Tensor self, int dim) -> Tensor
+    2857              : inline at::Tensor Tensor::logcumsumexp(int64_t dim) const {
+    2858              :     return at::_ops::logcumsumexp::call(const_cast<Tensor&>(*this), dim);
+    2859              : }
+    2860              : 
+    2861              : // aten::logcumsumexp.dimname(Tensor self, Dimname dim) -> Tensor
+    2862              : inline at::Tensor Tensor::logcumsumexp(at::Dimname dim) const {
+    2863              :     return at::_ops::logcumsumexp_dimname::call(const_cast<Tensor&>(*this), dim);
+    2864              : }
+    2865              : 
+    2866              : // aten::logsumexp(Tensor self, int[1] dim, bool keepdim=False) -> Tensor
+    2867              : inline at::Tensor Tensor::logsumexp(at::IntArrayRef dim, bool keepdim) const {
+    2868              :     return at::_ops::logsumexp::call(const_cast<Tensor&>(*this), dim, keepdim);
+    2869              : }
+    2870              : 
+    2871              : // aten::logsumexp.names(Tensor self, Dimname[1] dim, bool keepdim=False) -> Tensor
+    2872              : inline at::Tensor Tensor::logsumexp(at::DimnameList dim, bool keepdim) const {
+    2873              :     return at::_ops::logsumexp_names::call(const_cast<Tensor&>(*this), dim, keepdim);
+    2874              : }
+    2875              : 
+    2876              : // aten::matmul(Tensor self, Tensor other) -> Tensor
+    2877              : inline at::Tensor Tensor::matmul(const at::Tensor & other) const {
+    2878              :     return at::_ops::matmul::call(const_cast<Tensor&>(*this), other);
+    2879              : }
+    2880              : 
+    2881              : // aten::matrix_power(Tensor self, int n) -> Tensor
+    2882              : inline at::Tensor Tensor::matrix_power(int64_t n) const {
+    2883              :     return at::_ops::matrix_power::call(const_cast<Tensor&>(*this), n);
+    2884              : }
+    2885              : 
+    2886              : // aten::matrix_exp(Tensor self) -> Tensor
+    2887              : inline at::Tensor Tensor::matrix_exp() const {
+    2888              :     return at::_ops::matrix_exp::call(const_cast<Tensor&>(*this));
+    2889              : }
+    2890              : 
+    2891              : // aten::aminmax(Tensor self, *, int? dim=None, bool keepdim=False) -> (Tensor min, Tensor max)
+    2892              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::aminmax(c10::optional<int64_t> dim, bool keepdim) const {
+    2893              :     return at::_ops::aminmax::call(const_cast<Tensor&>(*this), dim, keepdim);
+    2894              : }
+    2895              : 
+    2896              : // aten::max.dim(Tensor self, int dim, bool keepdim=False) -> (Tensor values, Tensor indices)
+    2897              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::max(int64_t dim, bool keepdim) const {
+    2898              :     return at::_ops::max_dim::call(const_cast<Tensor&>(*this), dim, keepdim);
+    2899              : }
+    2900              : 
+    2901              : // aten::max.names_dim(Tensor self, Dimname dim, bool keepdim=False) -> (Tensor values, Tensor indices)
+    2902              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::max(at::Dimname dim, bool keepdim) const {
+    2903              :     return at::_ops::max_names_dim::call(const_cast<Tensor&>(*this), dim, keepdim);
+    2904              : }
+    2905              : 
+    2906              : // aten::amax(Tensor self, int[1] dim=[], bool keepdim=False) -> Tensor
+    2907              : inline at::Tensor Tensor::amax(at::IntArrayRef dim, bool keepdim) const {
+    2908              :     return at::_ops::amax::call(const_cast<Tensor&>(*this), dim, keepdim);
+    2909              : }
+    2910              : 
+    2911              : // aten::mean(Tensor self, *, ScalarType? dtype=None) -> Tensor
+    2912              : inline at::Tensor Tensor::mean(c10::optional<at::ScalarType> dtype) const {
+    2913              :     return at::_ops::mean::call(const_cast<Tensor&>(*this), dtype);
+    2914              : }
+    2915              : 
+    2916              : // aten::mean.dim(Tensor self, int[1]? dim, bool keepdim=False, *, ScalarType? dtype=None) -> Tensor
+    2917              : inline at::Tensor Tensor::mean(at::OptionalIntArrayRef dim, bool keepdim, c10::optional<at::ScalarType> dtype) const {
+    2918              :     return at::_ops::mean_dim::call(const_cast<Tensor&>(*this), dim, keepdim, dtype);
+    2919              : }
+    2920              : 
+    2921              : // aten::mean.names_dim(Tensor self, Dimname[1] dim, bool keepdim=False, *, ScalarType? dtype=None) -> Tensor
+    2922              : inline at::Tensor Tensor::mean(at::DimnameList dim, bool keepdim, c10::optional<at::ScalarType> dtype) const {
+    2923              :     return at::_ops::mean_names_dim::call(const_cast<Tensor&>(*this), dim, keepdim, dtype);
+    2924              : }
+    2925              : 
+    2926              : // aten::nanmean(Tensor self, int[1]? dim=None, bool keepdim=False, *, ScalarType? dtype=None) -> Tensor
+    2927              : inline at::Tensor Tensor::nanmean(at::OptionalIntArrayRef dim, bool keepdim, c10::optional<at::ScalarType> dtype) const {
+    2928              :     return at::_ops::nanmean::call(const_cast<Tensor&>(*this), dim, keepdim, dtype);
+    2929              : }
+    2930              : 
+    2931              : // aten::median(Tensor self) -> Tensor
+    2932              : inline at::Tensor Tensor::median() const {
+    2933              :     return at::_ops::median::call(const_cast<Tensor&>(*this));
+    2934              : }
+    2935              : 
+    2936              : // aten::median.dim(Tensor self, int dim, bool keepdim=False) -> (Tensor values, Tensor indices)
+    2937              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::median(int64_t dim, bool keepdim) const {
+    2938              :     return at::_ops::median_dim::call(const_cast<Tensor&>(*this), dim, keepdim);
+    2939              : }
+    2940              : 
+    2941              : // aten::median.names_dim(Tensor self, Dimname dim, bool keepdim=False) -> (Tensor values, Tensor indices)
+    2942              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::median(at::Dimname dim, bool keepdim) const {
+    2943              :     return at::_ops::median_names_dim::call(const_cast<Tensor&>(*this), dim, keepdim);
+    2944              : }
+    2945              : 
+    2946              : // aten::nanmedian(Tensor self) -> Tensor
+    2947              : inline at::Tensor Tensor::nanmedian() const {
+    2948              :     return at::_ops::nanmedian::call(const_cast<Tensor&>(*this));
+    2949              : }
+    2950              : 
+    2951              : // aten::nanmedian.dim(Tensor self, int dim, bool keepdim=False) -> (Tensor values, Tensor indices)
+    2952              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::nanmedian(int64_t dim, bool keepdim) const {
+    2953              :     return at::_ops::nanmedian_dim::call(const_cast<Tensor&>(*this), dim, keepdim);
+    2954              : }
+    2955              : 
+    2956              : // aten::nanmedian.names_dim(Tensor self, Dimname dim, bool keepdim=False) -> (Tensor values, Tensor indices)
+    2957              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::nanmedian(at::Dimname dim, bool keepdim) const {
+    2958              :     return at::_ops::nanmedian_names_dim::call(const_cast<Tensor&>(*this), dim, keepdim);
+    2959              : }
+    2960              : 
+    2961              : // aten::min.dim(Tensor self, int dim, bool keepdim=False) -> (Tensor values, Tensor indices)
+    2962              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::min(int64_t dim, bool keepdim) const {
+    2963              :     return at::_ops::min_dim::call(const_cast<Tensor&>(*this), dim, keepdim);
+    2964              : }
+    2965              : 
+    2966              : // aten::min.names_dim(Tensor self, Dimname dim, bool keepdim=False) -> (Tensor values, Tensor indices)
+    2967              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::min(at::Dimname dim, bool keepdim) const {
+    2968              :     return at::_ops::min_names_dim::call(const_cast<Tensor&>(*this), dim, keepdim);
+    2969              : }
+    2970              : 
+    2971              : // aten::amin(Tensor self, int[1] dim=[], bool keepdim=False) -> Tensor
+    2972              : inline at::Tensor Tensor::amin(at::IntArrayRef dim, bool keepdim) const {
+    2973              :     return at::_ops::amin::call(const_cast<Tensor&>(*this), dim, keepdim);
+    2974              : }
+    2975              : 
+    2976              : // aten::mm(Tensor self, Tensor mat2) -> Tensor
+    2977              : inline at::Tensor Tensor::mm(const at::Tensor & mat2) const {
+    2978              :     return at::_ops::mm::call(const_cast<Tensor&>(*this), mat2);
+    2979              : }
+    2980              : 
+    2981              : // aten::mode(Tensor self, int dim=-1, bool keepdim=False) -> (Tensor values, Tensor indices)
+    2982              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::mode(int64_t dim, bool keepdim) const {
+    2983              :     return at::_ops::mode::call(const_cast<Tensor&>(*this), dim, keepdim);
+    2984              : }
+    2985              : 
+    2986              : // aten::mode.dimname(Tensor self, Dimname dim, bool keepdim=False) -> (Tensor values, Tensor indices)
+    2987              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::mode(at::Dimname dim, bool keepdim) const {
+    2988              :     return at::_ops::mode_dimname::call(const_cast<Tensor&>(*this), dim, keepdim);
+    2989              : }
+    2990              : 
+    2991              : // aten::mul.Tensor(Tensor self, Tensor other) -> Tensor
+    2992        17280 : inline at::Tensor Tensor::mul(const at::Tensor & other) const {
+    2993        17280 :     return at::_ops::mul_Tensor::call(const_cast<Tensor&>(*this), other);
+    2994              : }
+    2995              : 
+    2996              : // aten::mul_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    2997              : inline at::Tensor & Tensor::mul_(const at::Tensor & other) const {
+    2998              :     return at::_ops::mul__Tensor::call(const_cast<Tensor&>(*this), other);
+    2999              : }
+    3000              : 
+    3001              : // aten::mul.Scalar(Tensor self, Scalar other) -> Tensor
+    3002         1262 : inline at::Tensor Tensor::mul(const at::Scalar & other) const {
+    3003         1262 :     return at::_ops::mul_Scalar::call(const_cast<Tensor&>(*this), other);
+    3004              : }
+    3005              : 
+    3006              : // aten::mul_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    3007              : inline at::Tensor & Tensor::mul_(const at::Scalar & other) const {
+    3008              :     return at::_ops::mul__Scalar::call(const_cast<Tensor&>(*this), other);
+    3009              : }
+    3010              : 
+    3011              : // aten::multiply.Tensor(Tensor self, Tensor other) -> Tensor
+    3012              : inline at::Tensor Tensor::multiply(const at::Tensor & other) const {
+    3013              :     return at::_ops::multiply_Tensor::call(const_cast<Tensor&>(*this), other);
+    3014              : }
+    3015              : 
+    3016              : // aten::multiply_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    3017              : inline at::Tensor & Tensor::multiply_(const at::Tensor & other) const {
+    3018              :     return at::_ops::multiply__Tensor::call(const_cast<Tensor&>(*this), other);
+    3019              : }
+    3020              : 
+    3021              : // aten::multiply.Scalar(Tensor self, Scalar other) -> Tensor
+    3022              : inline at::Tensor Tensor::multiply(const at::Scalar & other) const {
+    3023              :     return at::_ops::multiply_Scalar::call(const_cast<Tensor&>(*this), other);
+    3024              : }
+    3025              : 
+    3026              : // aten::multiply_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    3027              : inline at::Tensor & Tensor::multiply_(const at::Scalar & other) const {
+    3028              :     return at::_ops::multiply__Scalar::call(const_cast<Tensor&>(*this), other);
+    3029              : }
+    3030              : 
+    3031              : // aten::mv(Tensor self, Tensor vec) -> Tensor
+    3032              : inline at::Tensor Tensor::mv(const at::Tensor & vec) const {
+    3033              :     return at::_ops::mv::call(const_cast<Tensor&>(*this), vec);
+    3034              : }
+    3035              : 
+    3036              : // aten::mvlgamma(Tensor self, int p) -> Tensor
+    3037              : inline at::Tensor Tensor::mvlgamma(int64_t p) const {
+    3038              :     return at::_ops::mvlgamma::call(const_cast<Tensor&>(*this), p);
+    3039              : }
+    3040              : 
+    3041              : // aten::mvlgamma_(Tensor(a!) self, int p) -> Tensor(a!)
+    3042              : inline at::Tensor & Tensor::mvlgamma_(int64_t p) const {
+    3043              :     return at::_ops::mvlgamma_::call(const_cast<Tensor&>(*this), p);
+    3044              : }
+    3045              : 
+    3046              : // aten::narrow_copy(Tensor self, int dim, SymInt start, SymInt length) -> Tensor
+    3047              : inline at::Tensor Tensor::narrow_copy(int64_t dim, int64_t start, int64_t length) const {
+    3048              :     return at::_ops::narrow_copy::call(const_cast<Tensor&>(*this), dim, start, length);
+    3049              : }
+    3050              : 
+    3051              : // aten::narrow_copy(Tensor self, int dim, SymInt start, SymInt length) -> Tensor
+    3052              : inline at::Tensor Tensor::narrow_copy_symint(int64_t dim, c10::SymInt start, c10::SymInt length) const {
+    3053              :     return at::_ops::narrow_copy::call(const_cast<Tensor&>(*this), dim, start, length);
+    3054              : }
+    3055              : 
+    3056              : // aten::narrow(Tensor(a) self, int dim, SymInt start, SymInt length) -> Tensor(a)
+    3057              : inline at::Tensor Tensor::narrow(int64_t dim, int64_t start, int64_t length) const {
+    3058              :     return at::_ops::narrow::call(const_cast<Tensor&>(*this), dim, start, length);
+    3059              : }
+    3060              : 
+    3061              : // aten::narrow(Tensor(a) self, int dim, SymInt start, SymInt length) -> Tensor(a)
+    3062              : inline at::Tensor Tensor::narrow_symint(int64_t dim, c10::SymInt start, c10::SymInt length) const {
+    3063              :     return at::_ops::narrow::call(const_cast<Tensor&>(*this), dim, start, length);
+    3064              : }
+    3065              : 
+    3066              : // aten::narrow.Tensor(Tensor(a) self, int dim, Tensor start, SymInt length) -> Tensor(a)
+    3067              : inline at::Tensor Tensor::narrow(int64_t dim, const at::Tensor & start, int64_t length) const {
+    3068              :     return at::_ops::narrow_Tensor::call(const_cast<Tensor&>(*this), dim, start, length);
+    3069              : }
+    3070              : 
+    3071              : // aten::narrow.Tensor(Tensor(a) self, int dim, Tensor start, SymInt length) -> Tensor(a)
+    3072              : inline at::Tensor Tensor::narrow_symint(int64_t dim, const at::Tensor & start, c10::SymInt length) const {
+    3073              :     return at::_ops::narrow_Tensor::call(const_cast<Tensor&>(*this), dim, start, length);
+    3074              : }
+    3075              : 
+    3076              : // aten::permute(Tensor(a) self, int[] dims) -> Tensor(a)
+    3077              : inline at::Tensor Tensor::permute(at::IntArrayRef dims) const {
+    3078              :     return at::_ops::permute::call(const_cast<Tensor&>(*this), dims);
+    3079              : }
+    3080              : 
+    3081              : // aten::movedim.intlist(Tensor(a) self, int[] source, int[] destination) -> Tensor(a)
+    3082              : inline at::Tensor Tensor::movedim(at::IntArrayRef source, at::IntArrayRef destination) const {
+    3083              :     return at::_ops::movedim_intlist::call(const_cast<Tensor&>(*this), source, destination);
+    3084              : }
+    3085              : 
+    3086              : // aten::movedim.int(Tensor(a) self, int source, int destination) -> Tensor(a)
+    3087              : inline at::Tensor Tensor::movedim(int64_t source, int64_t destination) const {
+    3088              :     return at::_ops::movedim_int::call(const_cast<Tensor&>(*this), source, destination);
+    3089              : }
+    3090              : 
+    3091              : // aten::moveaxis.intlist(Tensor(a) self, int[] source, int[] destination) -> Tensor(a)
+    3092              : inline at::Tensor Tensor::moveaxis(at::IntArrayRef source, at::IntArrayRef destination) const {
+    3093              :     return at::_ops::moveaxis_intlist::call(const_cast<Tensor&>(*this), source, destination);
+    3094              : }
+    3095              : 
+    3096              : // aten::moveaxis.int(Tensor(a) self, int source, int destination) -> Tensor(a)
+    3097              : inline at::Tensor Tensor::moveaxis(int64_t source, int64_t destination) const {
+    3098              :     return at::_ops::moveaxis_int::call(const_cast<Tensor&>(*this), source, destination);
+    3099              : }
+    3100              : 
+    3101              : // aten::numpy_T(Tensor(a) self) -> Tensor(a)
+    3102              : inline at::Tensor Tensor::numpy_T() const {
+    3103              :     return at::_ops::numpy_T::call(const_cast<Tensor&>(*this));
+    3104              : }
+    3105              : 
+    3106              : // aten::matrix_H(Tensor(a) self) -> Tensor(a)
+    3107              : inline at::Tensor Tensor::matrix_H() const {
+    3108              :     return at::_ops::matrix_H::call(const_cast<Tensor&>(*this));
+    3109              : }
+    3110              : 
+    3111              : // aten::mT(Tensor(a) self) -> Tensor(a)
+    3112              : inline at::Tensor Tensor::mT() const {
+    3113              :     return at::_ops::mT::call(const_cast<Tensor&>(*this));
+    3114              : }
+    3115              : 
+    3116              : // aten::mH(Tensor(a) self) -> Tensor(a)
+    3117              : inline at::Tensor Tensor::mH() const {
+    3118              :     return at::_ops::mH::call(const_cast<Tensor&>(*this));
+    3119              : }
+    3120              : 
+    3121              : // aten::adjoint(Tensor(a) self) -> Tensor(a)
+    3122              : inline at::Tensor Tensor::adjoint() const {
+    3123              :     return at::_ops::adjoint::call(const_cast<Tensor&>(*this));
+    3124              : }
+    3125              : 
+    3126              : // aten::is_pinned(Tensor self, Device? device=None) -> bool
+    3127              : inline bool Tensor::is_pinned(c10::optional<at::Device> device) const {
+    3128              :     return at::_ops::is_pinned::call(const_cast<Tensor&>(*this), device);
+    3129              : }
+    3130              : 
+    3131              : // aten::pin_memory(Tensor(a) self, Device? device=None) -> Tensor(a)
+    3132              : inline at::Tensor Tensor::pin_memory(c10::optional<at::Device> device) const {
+    3133              :     return at::_ops::pin_memory::call(const_cast<Tensor&>(*this), device);
+    3134              : }
+    3135              : 
+    3136              : // aten::pinverse(Tensor self, float rcond=1e-15) -> Tensor
+    3137              : inline at::Tensor Tensor::pinverse(double rcond) const {
+    3138              :     return at::_ops::pinverse::call(const_cast<Tensor&>(*this), rcond);
+    3139              : }
+    3140              : 
+    3141              : // aten::rad2deg(Tensor self) -> Tensor
+    3142              : inline at::Tensor Tensor::rad2deg() const {
+    3143              :     return at::_ops::rad2deg::call(const_cast<Tensor&>(*this));
+    3144              : }
+    3145              : 
+    3146              : // aten::rad2deg_(Tensor(a!) self) -> Tensor(a!)
+    3147              : inline at::Tensor & Tensor::rad2deg_() const {
+    3148              :     return at::_ops::rad2deg_::call(const_cast<Tensor&>(*this));
+    3149              : }
+    3150              : 
+    3151              : // aten::deg2rad(Tensor self) -> Tensor
+    3152              : inline at::Tensor Tensor::deg2rad() const {
+    3153              :     return at::_ops::deg2rad::call(const_cast<Tensor&>(*this));
+    3154              : }
+    3155              : 
+    3156              : // aten::deg2rad_(Tensor(a!) self) -> Tensor(a!)
+    3157              : inline at::Tensor & Tensor::deg2rad_() const {
+    3158              :     return at::_ops::deg2rad_::call(const_cast<Tensor&>(*this));
+    3159              : }
+    3160              : 
+    3161              : // aten::ravel(Tensor(a) self) -> Tensor(a)
+    3162              : inline at::Tensor Tensor::ravel() const {
+    3163              :     return at::_ops::ravel::call(const_cast<Tensor&>(*this));
+    3164              : }
+    3165              : 
+    3166              : // aten::reciprocal(Tensor self) -> Tensor
+    3167              : inline at::Tensor Tensor::reciprocal() const {
+    3168              :     return at::_ops::reciprocal::call(const_cast<Tensor&>(*this));
+    3169              : }
+    3170              : 
+    3171              : // aten::reciprocal_(Tensor(a!) self) -> Tensor(a!)
+    3172              : inline at::Tensor & Tensor::reciprocal_() const {
+    3173              :     return at::_ops::reciprocal_::call(const_cast<Tensor&>(*this));
+    3174              : }
+    3175              : 
+    3176              : // aten::neg(Tensor self) -> Tensor
+    3177        16480 : inline at::Tensor Tensor::neg() const {
+    3178        16480 :     return at::_ops::neg::call(const_cast<Tensor&>(*this));
+    3179              : }
+    3180              : 
+    3181              : // aten::neg_(Tensor(a!) self) -> Tensor(a!)
+    3182              : inline at::Tensor & Tensor::neg_() const {
+    3183              :     return at::_ops::neg_::call(const_cast<Tensor&>(*this));
+    3184              : }
+    3185              : 
+    3186              : // aten::negative(Tensor self) -> Tensor
+    3187              : inline at::Tensor Tensor::negative() const {
+    3188              :     return at::_ops::negative::call(const_cast<Tensor&>(*this));
+    3189              : }
+    3190              : 
+    3191              : // aten::negative_(Tensor(a!) self) -> Tensor(a!)
+    3192              : inline at::Tensor & Tensor::negative_() const {
+    3193              :     return at::_ops::negative_::call(const_cast<Tensor&>(*this));
+    3194              : }
+    3195              : 
+    3196              : // aten::repeat(Tensor self, SymInt[] repeats) -> Tensor
+    3197              : inline at::Tensor Tensor::repeat(at::IntArrayRef repeats) const {
+    3198              :     return at::_ops::repeat::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(repeats));
+    3199              : }
+    3200              : 
+    3201              : // aten::repeat(Tensor self, SymInt[] repeats) -> Tensor
+    3202              : inline at::Tensor Tensor::repeat_symint(c10::SymIntArrayRef repeats) const {
+    3203              :     return at::_ops::repeat::call(const_cast<Tensor&>(*this), repeats);
+    3204              : }
+    3205              : 
+    3206              : // aten::repeat_interleave.self_Tensor(Tensor self, Tensor repeats, int? dim=None, *, int? output_size=None) -> Tensor
+    3207              : inline at::Tensor Tensor::repeat_interleave(const at::Tensor & repeats, c10::optional<int64_t> dim, c10::optional<int64_t> output_size) const {
+    3208              :     return at::_ops::repeat_interleave_self_Tensor::call(const_cast<Tensor&>(*this), repeats, dim, output_size);
+    3209              : }
+    3210              : 
+    3211              : // aten::repeat_interleave.self_int(Tensor self, SymInt repeats, int? dim=None, *, int? output_size=None) -> Tensor
+    3212              : inline at::Tensor Tensor::repeat_interleave(int64_t repeats, c10::optional<int64_t> dim, c10::optional<int64_t> output_size) const {
+    3213              :     return at::_ops::repeat_interleave_self_int::call(const_cast<Tensor&>(*this), repeats, dim, output_size);
+    3214              : }
+    3215              : 
+    3216              : // aten::repeat_interleave.self_int(Tensor self, SymInt repeats, int? dim=None, *, int? output_size=None) -> Tensor
+    3217              : inline at::Tensor Tensor::repeat_interleave_symint(c10::SymInt repeats, c10::optional<int64_t> dim, c10::optional<int64_t> output_size) const {
+    3218              :     return at::_ops::repeat_interleave_self_int::call(const_cast<Tensor&>(*this), repeats, dim, output_size);
+    3219              : }
+    3220              : 
+    3221              : // aten::reshape(Tensor(a) self, SymInt[] shape) -> Tensor(a)
+    3222              : inline at::Tensor Tensor::reshape(at::IntArrayRef shape) const {
+    3223              :     return at::_ops::reshape::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(shape));
+    3224              : }
+    3225              : 
+    3226              : // aten::reshape(Tensor(a) self, SymInt[] shape) -> Tensor(a)
+    3227              : inline at::Tensor Tensor::reshape_symint(c10::SymIntArrayRef shape) const {
+    3228              :     return at::_ops::reshape::call(const_cast<Tensor&>(*this), shape);
+    3229              : }
+    3230              : 
+    3231              : // aten::_reshape_alias(Tensor(a) self, SymInt[] size, SymInt[] stride) -> Tensor(a)
+    3232              : inline at::Tensor Tensor::_reshape_alias(at::IntArrayRef size, at::IntArrayRef stride) const {
+    3233              :     return at::_ops::_reshape_alias::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(size), c10::fromIntArrayRefSlow(stride));
+    3234              : }
+    3235              : 
+    3236              : // aten::_reshape_alias(Tensor(a) self, SymInt[] size, SymInt[] stride) -> Tensor(a)
+    3237              : inline at::Tensor Tensor::_reshape_alias_symint(c10::SymIntArrayRef size, c10::SymIntArrayRef stride) const {
+    3238              :     return at::_ops::_reshape_alias::call(const_cast<Tensor&>(*this), size, stride);
+    3239              : }
+    3240              : 
+    3241              : // aten::reshape_as(Tensor(a) self, Tensor other) -> Tensor(a)
+    3242              : inline at::Tensor Tensor::reshape_as(const at::Tensor & other) const {
+    3243              :     return at::_ops::reshape_as::call(const_cast<Tensor&>(*this), other);
+    3244              : }
+    3245              : 
+    3246              : // aten::round(Tensor self) -> Tensor
+    3247              : inline at::Tensor Tensor::round() const {
+    3248              :     return at::_ops::round::call(const_cast<Tensor&>(*this));
+    3249              : }
+    3250              : 
+    3251              : // aten::round_(Tensor(a!) self) -> Tensor(a!)
+    3252              : inline at::Tensor & Tensor::round_() const {
+    3253              :     return at::_ops::round_::call(const_cast<Tensor&>(*this));
+    3254              : }
+    3255              : 
+    3256              : // aten::round.decimals(Tensor self, *, int decimals) -> Tensor
+    3257              : inline at::Tensor Tensor::round(int64_t decimals) const {
+    3258              :     return at::_ops::round_decimals::call(const_cast<Tensor&>(*this), decimals);
+    3259              : }
+    3260              : 
+    3261              : // aten::round_.decimals(Tensor(a!) self, *, int decimals) -> Tensor(a!)
+    3262              : inline at::Tensor & Tensor::round_(int64_t decimals) const {
+    3263              :     return at::_ops::round__decimals::call(const_cast<Tensor&>(*this), decimals);
+    3264              : }
+    3265              : 
+    3266              : // aten::relu(Tensor self) -> Tensor
+    3267              : inline at::Tensor Tensor::relu() const {
+    3268              :     return at::_ops::relu::call(const_cast<Tensor&>(*this));
+    3269              : }
+    3270              : 
+    3271              : // aten::relu_(Tensor(a!) self) -> Tensor(a!)
+    3272              : inline at::Tensor & Tensor::relu_() const {
+    3273              :     return at::_ops::relu_::call(const_cast<Tensor&>(*this));
+    3274              : }
+    3275              : 
+    3276              : // aten::prelu(Tensor self, Tensor weight) -> Tensor
+    3277              : inline at::Tensor Tensor::prelu(const at::Tensor & weight) const {
+    3278              :     return at::_ops::prelu::call(const_cast<Tensor&>(*this), weight);
+    3279              : }
+    3280              : 
+    3281              : // aten::hardshrink(Tensor self, Scalar lambd=0.5) -> Tensor
+    3282              : inline at::Tensor Tensor::hardshrink(const at::Scalar & lambd) const {
+    3283              :     return at::_ops::hardshrink::call(const_cast<Tensor&>(*this), lambd);
+    3284              : }
+    3285              : 
+    3286              : // aten::hardshrink_backward(Tensor grad_out, Tensor self, Scalar lambd) -> Tensor
+    3287              : inline at::Tensor Tensor::hardshrink_backward(const at::Tensor & grad_out, const at::Scalar & lambd) const {
+    3288              :     return at::_ops::hardshrink_backward::call(grad_out, const_cast<Tensor&>(*this), lambd);
+    3289              : }
+    3290              : 
+    3291              : // aten::rsqrt(Tensor self) -> Tensor
+    3292              : inline at::Tensor Tensor::rsqrt() const {
+    3293              :     return at::_ops::rsqrt::call(const_cast<Tensor&>(*this));
+    3294              : }
+    3295              : 
+    3296              : // aten::rsqrt_(Tensor(a!) self) -> Tensor(a!)
+    3297              : inline at::Tensor & Tensor::rsqrt_() const {
+    3298              :     return at::_ops::rsqrt_::call(const_cast<Tensor&>(*this));
+    3299              : }
+    3300              : 
+    3301              : // aten::select.Dimname(Tensor(a) self, Dimname dim, int index) -> Tensor(a)
+    3302              : inline at::Tensor Tensor::select(at::Dimname dim, int64_t index) const {
+    3303              :     return at::_ops::select_Dimname::call(const_cast<Tensor&>(*this), dim, index);
+    3304              : }
+    3305              : 
+    3306              : // aten::select.int(Tensor(a) self, int dim, SymInt index) -> Tensor(a)
+    3307     20560890 : inline at::Tensor Tensor::select(int64_t dim, int64_t index) const {
+    3308     20560890 :     return at::_ops::select_int::call(const_cast<Tensor&>(*this), dim, index);
+    3309              : }
+    3310              : 
+    3311              : // aten::select.int(Tensor(a) self, int dim, SymInt index) -> Tensor(a)
+    3312              : inline at::Tensor Tensor::select_symint(int64_t dim, c10::SymInt index) const {
+    3313              :     return at::_ops::select_int::call(const_cast<Tensor&>(*this), dim, index);
+    3314              : }
+    3315              : 
+    3316              : // aten::sigmoid(Tensor self) -> Tensor
+    3317              : inline at::Tensor Tensor::sigmoid() const {
+    3318              :     return at::_ops::sigmoid::call(const_cast<Tensor&>(*this));
+    3319              : }
+    3320              : 
+    3321              : // aten::sigmoid_(Tensor(a!) self) -> Tensor(a!)
+    3322              : inline at::Tensor & Tensor::sigmoid_() const {
+    3323              :     return at::_ops::sigmoid_::call(const_cast<Tensor&>(*this));
+    3324              : }
+    3325              : 
+    3326              : // aten::logit(Tensor self, float? eps=None) -> Tensor
+    3327              : inline at::Tensor Tensor::logit(c10::optional<double> eps) const {
+    3328              :     return at::_ops::logit::call(const_cast<Tensor&>(*this), eps);
+    3329              : }
+    3330              : 
+    3331              : // aten::logit_(Tensor(a!) self, float? eps=None) -> Tensor(a!)
+    3332              : inline at::Tensor & Tensor::logit_(c10::optional<double> eps) const {
+    3333              :     return at::_ops::logit_::call(const_cast<Tensor&>(*this), eps);
+    3334              : }
+    3335              : 
+    3336              : // aten::sin(Tensor self) -> Tensor
+    3337              : inline at::Tensor Tensor::sin() const {
+    3338              :     return at::_ops::sin::call(const_cast<Tensor&>(*this));
+    3339              : }
+    3340              : 
+    3341              : // aten::sin_(Tensor(a!) self) -> Tensor(a!)
+    3342              : inline at::Tensor & Tensor::sin_() const {
+    3343              :     return at::_ops::sin_::call(const_cast<Tensor&>(*this));
+    3344              : }
+    3345              : 
+    3346              : // aten::sinc(Tensor self) -> Tensor
+    3347              : inline at::Tensor Tensor::sinc() const {
+    3348              :     return at::_ops::sinc::call(const_cast<Tensor&>(*this));
+    3349              : }
+    3350              : 
+    3351              : // aten::sinc_(Tensor(a!) self) -> Tensor(a!)
+    3352              : inline at::Tensor & Tensor::sinc_() const {
+    3353              :     return at::_ops::sinc_::call(const_cast<Tensor&>(*this));
+    3354              : }
+    3355              : 
+    3356              : // aten::sinh(Tensor self) -> Tensor
+    3357              : inline at::Tensor Tensor::sinh() const {
+    3358              :     return at::_ops::sinh::call(const_cast<Tensor&>(*this));
+    3359              : }
+    3360              : 
+    3361              : // aten::sinh_(Tensor(a!) self) -> Tensor(a!)
+    3362              : inline at::Tensor & Tensor::sinh_() const {
+    3363              :     return at::_ops::sinh_::call(const_cast<Tensor&>(*this));
+    3364              : }
+    3365              : 
+    3366              : // aten::detach(Tensor(a) self) -> Tensor(a)
+    3367              : inline at::Tensor Tensor::detach() const {
+    3368              :     return at::_ops::detach::call(const_cast<Tensor&>(*this));
+    3369              : }
+    3370              : 
+    3371              : // aten::detach_(Tensor(a!) self) -> Tensor(a!)
+    3372              : inline at::Tensor & Tensor::detach_() const {
+    3373              :     return at::_ops::detach_::call(const_cast<Tensor&>(*this));
+    3374              : }
+    3375              : 
+    3376              : // aten::size.Dimname(Tensor self, Dimname dim) -> int
+    3377              : inline int64_t Tensor::size(at::Dimname dim) const {
+    3378              :     return at::_ops::size_Dimname::call(const_cast<Tensor&>(*this), dim);
+    3379              : }
+    3380              : 
+    3381              : // aten::slice.Tensor(Tensor(a) self, int dim=0, SymInt? start=None, SymInt? end=None, SymInt step=1) -> Tensor(a)
+    3382              : inline at::Tensor Tensor::slice(int64_t dim, c10::optional<int64_t> start, c10::optional<int64_t> end, int64_t step) const {
+    3383              :     return at::_ops::slice_Tensor::call(const_cast<Tensor&>(*this), dim, start.has_value() ? c10::make_optional(c10::SymInt(*start)) : c10::nullopt, end.has_value() ? c10::make_optional(c10::SymInt(*end)) : c10::nullopt, step);
+    3384              : }
+    3385              : 
+    3386              : // aten::slice.Tensor(Tensor(a) self, int dim=0, SymInt? start=None, SymInt? end=None, SymInt step=1) -> Tensor(a)
+    3387              : inline at::Tensor Tensor::slice_symint(int64_t dim, c10::optional<c10::SymInt> start, c10::optional<c10::SymInt> end, c10::SymInt step) const {
+    3388              :     return at::_ops::slice_Tensor::call(const_cast<Tensor&>(*this), dim, start, end, step);
+    3389              : }
+    3390              : 
+    3391              : // aten::slice_scatter(Tensor self, Tensor src, int dim=0, SymInt? start=None, SymInt? end=None, SymInt step=1) -> Tensor
+    3392              : inline at::Tensor Tensor::slice_scatter(const at::Tensor & src, int64_t dim, c10::optional<int64_t> start, c10::optional<int64_t> end, int64_t step) const {
+    3393              :     return at::_ops::slice_scatter::call(const_cast<Tensor&>(*this), src, dim, start.has_value() ? c10::make_optional(c10::SymInt(*start)) : c10::nullopt, end.has_value() ? c10::make_optional(c10::SymInt(*end)) : c10::nullopt, step);
+    3394              : }
+    3395              : 
+    3396              : // aten::slice_scatter(Tensor self, Tensor src, int dim=0, SymInt? start=None, SymInt? end=None, SymInt step=1) -> Tensor
+    3397              : inline at::Tensor Tensor::slice_scatter_symint(const at::Tensor & src, int64_t dim, c10::optional<c10::SymInt> start, c10::optional<c10::SymInt> end, c10::SymInt step) const {
+    3398              :     return at::_ops::slice_scatter::call(const_cast<Tensor&>(*this), src, dim, start, end, step);
+    3399              : }
+    3400              : 
+    3401              : // aten::select_scatter(Tensor self, Tensor src, int dim, SymInt index) -> Tensor
+    3402              : inline at::Tensor Tensor::select_scatter(const at::Tensor & src, int64_t dim, int64_t index) const {
+    3403              :     return at::_ops::select_scatter::call(const_cast<Tensor&>(*this), src, dim, index);
+    3404              : }
+    3405              : 
+    3406              : // aten::select_scatter(Tensor self, Tensor src, int dim, SymInt index) -> Tensor
+    3407              : inline at::Tensor Tensor::select_scatter_symint(const at::Tensor & src, int64_t dim, c10::SymInt index) const {
+    3408              :     return at::_ops::select_scatter::call(const_cast<Tensor&>(*this), src, dim, index);
+    3409              : }
+    3410              : 
+    3411              : // aten::diagonal_scatter(Tensor self, Tensor src, int offset=0, int dim1=0, int dim2=1) -> Tensor
+    3412              : inline at::Tensor Tensor::diagonal_scatter(const at::Tensor & src, int64_t offset, int64_t dim1, int64_t dim2) const {
+    3413              :     return at::_ops::diagonal_scatter::call(const_cast<Tensor&>(*this), src, offset, dim1, dim2);
+    3414              : }
+    3415              : 
+    3416              : // aten::as_strided_scatter(Tensor self, Tensor src, SymInt[] size, SymInt[] stride, SymInt? storage_offset=None) -> Tensor
+    3417              : inline at::Tensor Tensor::as_strided_scatter(const at::Tensor & src, at::IntArrayRef size, at::IntArrayRef stride, c10::optional<int64_t> storage_offset) const {
+    3418              :     return at::_ops::as_strided_scatter::call(const_cast<Tensor&>(*this), src, c10::fromIntArrayRefSlow(size), c10::fromIntArrayRefSlow(stride), storage_offset.has_value() ? c10::make_optional(c10::SymInt(*storage_offset)) : c10::nullopt);
+    3419              : }
+    3420              : 
+    3421              : // aten::as_strided_scatter(Tensor self, Tensor src, SymInt[] size, SymInt[] stride, SymInt? storage_offset=None) -> Tensor
+    3422              : inline at::Tensor Tensor::as_strided_scatter_symint(const at::Tensor & src, c10::SymIntArrayRef size, c10::SymIntArrayRef stride, c10::optional<c10::SymInt> storage_offset) const {
+    3423              :     return at::_ops::as_strided_scatter::call(const_cast<Tensor&>(*this), src, size, stride, storage_offset);
+    3424              : }
+    3425              : 
+    3426              : // aten::smm(Tensor self, Tensor mat2) -> Tensor
+    3427              : inline at::Tensor Tensor::smm(const at::Tensor & mat2) const {
+    3428              :     return at::_ops::smm::call(const_cast<Tensor&>(*this), mat2);
+    3429              : }
+    3430              : 
+    3431              : // aten::softmax.int(Tensor self, int dim, ScalarType? dtype=None) -> Tensor
+    3432              : inline at::Tensor Tensor::softmax(int64_t dim, c10::optional<at::ScalarType> dtype) const {
+    3433              :     return at::_ops::softmax_int::call(const_cast<Tensor&>(*this), dim, dtype);
+    3434              : }
+    3435              : 
+    3436              : // aten::softmax.Dimname(Tensor self, Dimname dim, *, ScalarType? dtype=None) -> Tensor
+    3437              : inline at::Tensor Tensor::softmax(at::Dimname dim, c10::optional<at::ScalarType> dtype) const {
+    3438              :     return at::_ops::softmax_Dimname::call(const_cast<Tensor&>(*this), dim, dtype);
+    3439              : }
+    3440              : 
+    3441              : // aten::unsafe_split.Tensor(Tensor self, SymInt split_size, int dim=0) -> Tensor[]
+    3442              : inline ::std::vector<at::Tensor> Tensor::unsafe_split(int64_t split_size, int64_t dim) const {
+    3443              :     return at::_ops::unsafe_split_Tensor::call(const_cast<Tensor&>(*this), split_size, dim);
+    3444              : }
+    3445              : 
+    3446              : // aten::unsafe_split.Tensor(Tensor self, SymInt split_size, int dim=0) -> Tensor[]
+    3447              : inline ::std::vector<at::Tensor> Tensor::unsafe_split_symint(c10::SymInt split_size, int64_t dim) const {
+    3448              :     return at::_ops::unsafe_split_Tensor::call(const_cast<Tensor&>(*this), split_size, dim);
+    3449              : }
+    3450              : 
+    3451              : // aten::split.Tensor(Tensor(a -> *) self, SymInt split_size, int dim=0) -> Tensor(a)[]
+    3452              : inline ::std::vector<at::Tensor> Tensor::split(int64_t split_size, int64_t dim) const {
+    3453              :     return at::_ops::split_Tensor::call(const_cast<Tensor&>(*this), split_size, dim);
+    3454              : }
+    3455              : 
+    3456              : // aten::split.Tensor(Tensor(a -> *) self, SymInt split_size, int dim=0) -> Tensor(a)[]
+    3457              : inline ::std::vector<at::Tensor> Tensor::split_symint(c10::SymInt split_size, int64_t dim) const {
+    3458              :     return at::_ops::split_Tensor::call(const_cast<Tensor&>(*this), split_size, dim);
+    3459              : }
+    3460              : 
+    3461              : // aten::split.sizes(Tensor(a -> *) self, SymInt[] split_size, int dim=0) -> Tensor(a)[]
+    3462              : inline ::std::vector<at::Tensor> Tensor::split(at::IntArrayRef split_size, int64_t dim) const {
+    3463              :     return at::_ops::split_sizes::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(split_size), dim);
+    3464              : }
+    3465              : 
+    3466              : // aten::split.sizes(Tensor(a -> *) self, SymInt[] split_size, int dim=0) -> Tensor(a)[]
+    3467              : inline ::std::vector<at::Tensor> Tensor::split_symint(c10::SymIntArrayRef split_size, int64_t dim) const {
+    3468              :     return at::_ops::split_sizes::call(const_cast<Tensor&>(*this), split_size, dim);
+    3469              : }
+    3470              : 
+    3471              : // aten::unsafe_split_with_sizes(Tensor self, SymInt[] split_sizes, int dim=0) -> Tensor[]
+    3472              : inline ::std::vector<at::Tensor> Tensor::unsafe_split_with_sizes(at::IntArrayRef split_sizes, int64_t dim) const {
+    3473              :     return at::_ops::unsafe_split_with_sizes::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(split_sizes), dim);
+    3474              : }
+    3475              : 
+    3476              : // aten::unsafe_split_with_sizes(Tensor self, SymInt[] split_sizes, int dim=0) -> Tensor[]
+    3477              : inline ::std::vector<at::Tensor> Tensor::unsafe_split_with_sizes_symint(c10::SymIntArrayRef split_sizes, int64_t dim) const {
+    3478              :     return at::_ops::unsafe_split_with_sizes::call(const_cast<Tensor&>(*this), split_sizes, dim);
+    3479              : }
+    3480              : 
+    3481              : // aten::split_with_sizes(Tensor(a -> *) self, SymInt[] split_sizes, int dim=0) -> Tensor(a)[]
+    3482              : inline ::std::vector<at::Tensor> Tensor::split_with_sizes(at::IntArrayRef split_sizes, int64_t dim) const {
+    3483              :     return at::_ops::split_with_sizes::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(split_sizes), dim);
+    3484              : }
+    3485              : 
+    3486              : // aten::split_with_sizes(Tensor(a -> *) self, SymInt[] split_sizes, int dim=0) -> Tensor(a)[]
+    3487              : inline ::std::vector<at::Tensor> Tensor::split_with_sizes_symint(c10::SymIntArrayRef split_sizes, int64_t dim) const {
+    3488              :     return at::_ops::split_with_sizes::call(const_cast<Tensor&>(*this), split_sizes, dim);
+    3489              : }
+    3490              : 
+    3491              : // aten::hsplit.int(Tensor(a -> *) self, int sections) -> Tensor(a)[]
+    3492              : inline ::std::vector<at::Tensor> Tensor::hsplit(int64_t sections) const {
+    3493              :     return at::_ops::hsplit_int::call(const_cast<Tensor&>(*this), sections);
+    3494              : }
+    3495              : 
+    3496              : // aten::hsplit.array(Tensor(a -> *) self, int[] indices) -> Tensor(a)[]
+    3497              : inline ::std::vector<at::Tensor> Tensor::hsplit(at::IntArrayRef indices) const {
+    3498              :     return at::_ops::hsplit_array::call(const_cast<Tensor&>(*this), indices);
+    3499              : }
+    3500              : 
+    3501              : // aten::vsplit.int(Tensor(a -> *) self, int sections) -> Tensor(a)[]
+    3502              : inline ::std::vector<at::Tensor> Tensor::vsplit(int64_t sections) const {
+    3503              :     return at::_ops::vsplit_int::call(const_cast<Tensor&>(*this), sections);
+    3504              : }
+    3505              : 
+    3506              : // aten::vsplit.array(Tensor(a -> *) self, int[] indices) -> Tensor(a)[]
+    3507              : inline ::std::vector<at::Tensor> Tensor::vsplit(at::IntArrayRef indices) const {
+    3508              :     return at::_ops::vsplit_array::call(const_cast<Tensor&>(*this), indices);
+    3509              : }
+    3510              : 
+    3511              : // aten::dsplit.int(Tensor(a -> *) self, int sections) -> Tensor(a)[]
+    3512              : inline ::std::vector<at::Tensor> Tensor::dsplit(int64_t sections) const {
+    3513              :     return at::_ops::dsplit_int::call(const_cast<Tensor&>(*this), sections);
+    3514              : }
+    3515              : 
+    3516              : // aten::dsplit.array(Tensor(a -> *) self, int[] indices) -> Tensor(a)[]
+    3517              : inline ::std::vector<at::Tensor> Tensor::dsplit(at::IntArrayRef indices) const {
+    3518              :     return at::_ops::dsplit_array::call(const_cast<Tensor&>(*this), indices);
+    3519              : }
+    3520              : 
+    3521              : // aten::squeeze(Tensor(a) self) -> Tensor(a)
+    3522              : inline at::Tensor Tensor::squeeze() const {
+    3523              :     return at::_ops::squeeze::call(const_cast<Tensor&>(*this));
+    3524              : }
+    3525              : 
+    3526              : // aten::squeeze.dim(Tensor(a) self, int dim) -> Tensor(a)
+    3527              : inline at::Tensor Tensor::squeeze(int64_t dim) const {
+    3528              :     return at::_ops::squeeze_dim::call(const_cast<Tensor&>(*this), dim);
+    3529              : }
+    3530              : 
+    3531              : // aten::squeeze.dimname(Tensor(a) self, Dimname dim) -> Tensor(a)
+    3532              : inline at::Tensor Tensor::squeeze(at::Dimname dim) const {
+    3533              :     return at::_ops::squeeze_dimname::call(const_cast<Tensor&>(*this), dim);
+    3534              : }
+    3535              : 
+    3536              : // aten::squeeze.dims(Tensor(a) self, int[] dim) -> Tensor(a)
+    3537              : inline at::Tensor Tensor::squeeze(at::IntArrayRef dim) const {
+    3538              :     return at::_ops::squeeze_dims::call(const_cast<Tensor&>(*this), dim);
+    3539              : }
+    3540              : 
+    3541              : // aten::squeeze_(Tensor(a!) self) -> Tensor(a!)
+    3542              : inline at::Tensor & Tensor::squeeze_() const {
+    3543              :     return at::_ops::squeeze_::call(const_cast<Tensor&>(*this));
+    3544              : }
+    3545              : 
+    3546              : // aten::squeeze_.dim(Tensor(a!) self, int dim) -> Tensor(a!)
+    3547              : inline at::Tensor & Tensor::squeeze_(int64_t dim) const {
+    3548              :     return at::_ops::squeeze__dim::call(const_cast<Tensor&>(*this), dim);
+    3549              : }
+    3550              : 
+    3551              : // aten::squeeze_.dims(Tensor(a!) self, int[] dim) -> Tensor(a!)
+    3552              : inline at::Tensor & Tensor::squeeze_(at::IntArrayRef dim) const {
+    3553              :     return at::_ops::squeeze__dims::call(const_cast<Tensor&>(*this), dim);
+    3554              : }
+    3555              : 
+    3556              : // aten::squeeze_.dimname(Tensor(a!) self, Dimname dim) -> Tensor(a!)
+    3557              : inline at::Tensor & Tensor::squeeze_(at::Dimname dim) const {
+    3558              :     return at::_ops::squeeze__dimname::call(const_cast<Tensor&>(*this), dim);
+    3559              : }
+    3560              : 
+    3561              : // aten::sspaddmm(Tensor self, Tensor mat1, Tensor mat2, *, Scalar beta=1, Scalar alpha=1) -> Tensor
+    3562              : inline at::Tensor Tensor::sspaddmm(const at::Tensor & mat1, const at::Tensor & mat2, const at::Scalar & beta, const at::Scalar & alpha) const {
+    3563              :     return at::_ops::sspaddmm::call(const_cast<Tensor&>(*this), mat1, mat2, beta, alpha);
+    3564              : }
+    3565              : 
+    3566              : // aten::stft(Tensor self, int n_fft, int? hop_length=None, int? win_length=None, Tensor? window=None, bool normalized=False, bool? onesided=None, bool? return_complex=None) -> Tensor
+    3567              : inline at::Tensor Tensor::stft(int64_t n_fft, c10::optional<int64_t> hop_length, c10::optional<int64_t> win_length, const c10::optional<at::Tensor> & window, bool normalized, c10::optional<bool> onesided, c10::optional<bool> return_complex) const {
+    3568              :     return at::_ops::stft::call(const_cast<Tensor&>(*this), n_fft, hop_length, win_length, window, normalized, onesided, return_complex);
+    3569              : }
+    3570              : 
+    3571              : // aten::stft.center(Tensor self, int n_fft, int? hop_length=None, int? win_length=None, Tensor? window=None, bool center=True, str pad_mode="reflect", bool normalized=False, bool? onesided=None, bool? return_complex=None) -> Tensor
+    3572              : inline at::Tensor Tensor::stft(int64_t n_fft, c10::optional<int64_t> hop_length, c10::optional<int64_t> win_length, const c10::optional<at::Tensor> & window, bool center, c10::string_view pad_mode, bool normalized, c10::optional<bool> onesided, c10::optional<bool> return_complex) const {
+    3573              :     return at::_ops::stft_center::call(const_cast<Tensor&>(*this), n_fft, hop_length, win_length, window, center, pad_mode, normalized, onesided, return_complex);
+    3574              : }
+    3575              : 
+    3576              : // aten::istft(Tensor self, int n_fft, int? hop_length=None, int? win_length=None, Tensor? window=None, bool center=True, bool normalized=False, bool? onesided=None, int? length=None, bool return_complex=False) -> Tensor
+    3577              : inline at::Tensor Tensor::istft(int64_t n_fft, c10::optional<int64_t> hop_length, c10::optional<int64_t> win_length, const c10::optional<at::Tensor> & window, bool center, bool normalized, c10::optional<bool> onesided, c10::optional<int64_t> length, bool return_complex) const {
+    3578              :     return at::_ops::istft::call(const_cast<Tensor&>(*this), n_fft, hop_length, win_length, window, center, normalized, onesided, length, return_complex);
+    3579              : }
+    3580              : 
+    3581              : // aten::stride.Dimname(Tensor self, Dimname dim) -> int
+    3582              : inline int64_t Tensor::stride(at::Dimname dim) const {
+    3583              :     return at::_ops::stride_Dimname::call(const_cast<Tensor&>(*this), dim);
+    3584              : }
+    3585              : 
+    3586              : // aten::sum(Tensor self, *, ScalarType? dtype=None) -> Tensor
+    3587        17252 : inline at::Tensor Tensor::sum(c10::optional<at::ScalarType> dtype) const {
+    3588        17252 :     return at::_ops::sum::call(const_cast<Tensor&>(*this), dtype);
+    3589              : }
+    3590              : 
+    3591              : // aten::sum.dim_IntList(Tensor self, int[1]? dim, bool keepdim=False, *, ScalarType? dtype=None) -> Tensor
+    3592        14194 : inline at::Tensor Tensor::sum(at::OptionalIntArrayRef dim, bool keepdim, c10::optional<at::ScalarType> dtype) const {
+    3593        14194 :     return at::_ops::sum_dim_IntList::call(const_cast<Tensor&>(*this), dim, keepdim, dtype);
+    3594              : }
+    3595              : 
+    3596              : // aten::sum.dim_DimnameList(Tensor self, Dimname[1] dim, bool keepdim=False, *, ScalarType? dtype=None) -> Tensor
+    3597              : inline at::Tensor Tensor::sum(at::DimnameList dim, bool keepdim, c10::optional<at::ScalarType> dtype) const {
+    3598              :     return at::_ops::sum_dim_DimnameList::call(const_cast<Tensor&>(*this), dim, keepdim, dtype);
+    3599              : }
+    3600              : 
+    3601              : // aten::nansum(Tensor self, int[1]? dim=None, bool keepdim=False, *, ScalarType? dtype=None) -> Tensor
+    3602        16480 : inline at::Tensor Tensor::nansum(at::OptionalIntArrayRef dim, bool keepdim, c10::optional<at::ScalarType> dtype) const {
+    3603        16480 :     return at::_ops::nansum::call(const_cast<Tensor&>(*this), dim, keepdim, dtype);
+    3604              : }
+    3605              : 
+    3606              : // aten::sum_to_size(Tensor self, SymInt[] size) -> Tensor
+    3607              : inline at::Tensor Tensor::sum_to_size(at::IntArrayRef size) const {
+    3608              :     return at::_ops::sum_to_size::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(size));
+    3609              : }
+    3610              : 
+    3611              : // aten::sum_to_size(Tensor self, SymInt[] size) -> Tensor
+    3612              : inline at::Tensor Tensor::sum_to_size_symint(c10::SymIntArrayRef size) const {
+    3613              :     return at::_ops::sum_to_size::call(const_cast<Tensor&>(*this), size);
+    3614              : }
+    3615              : 
+    3616              : // aten::sqrt(Tensor self) -> Tensor
+    3617              : inline at::Tensor Tensor::sqrt() const {
+    3618              :     return at::_ops::sqrt::call(const_cast<Tensor&>(*this));
+    3619              : }
+    3620              : 
+    3621              : // aten::sqrt_(Tensor(a!) self) -> Tensor(a!)
+    3622              : inline at::Tensor & Tensor::sqrt_() const {
+    3623              :     return at::_ops::sqrt_::call(const_cast<Tensor&>(*this));
+    3624              : }
+    3625              : 
+    3626              : // aten::square(Tensor self) -> Tensor
+    3627              : inline at::Tensor Tensor::square() const {
+    3628              :     return at::_ops::square::call(const_cast<Tensor&>(*this));
+    3629              : }
+    3630              : 
+    3631              : // aten::square_(Tensor(a!) self) -> Tensor(a!)
+    3632              : inline at::Tensor & Tensor::square_() const {
+    3633              :     return at::_ops::square_::call(const_cast<Tensor&>(*this));
+    3634              : }
+    3635              : 
+    3636              : // aten::std(Tensor self, bool unbiased=True) -> Tensor
+    3637              : inline at::Tensor Tensor::std(bool unbiased) const {
+    3638              :     return at::_ops::std::call(const_cast<Tensor&>(*this), unbiased);
+    3639              : }
+    3640              : 
+    3641              : // aten::std.dim(Tensor self, int[1]? dim, bool unbiased=True, bool keepdim=False) -> Tensor
+    3642              : inline at::Tensor Tensor::std(at::OptionalIntArrayRef dim, bool unbiased, bool keepdim) const {
+    3643              :     return at::_ops::std_dim::call(const_cast<Tensor&>(*this), dim, unbiased, keepdim);
+    3644              : }
+    3645              : 
+    3646              : // aten::std.correction(Tensor self, int[1]? dim=None, *, Scalar? correction=None, bool keepdim=False) -> Tensor
+    3647              : inline at::Tensor Tensor::std(at::OptionalIntArrayRef dim, const c10::optional<at::Scalar> & correction, bool keepdim) const {
+    3648              :     return at::_ops::std_correction::call(const_cast<Tensor&>(*this), dim, correction, keepdim);
+    3649              : }
+    3650              : 
+    3651              : // aten::std.names_dim(Tensor self, Dimname[1] dim, bool unbiased=True, bool keepdim=False) -> Tensor
+    3652              : inline at::Tensor Tensor::std(at::DimnameList dim, bool unbiased, bool keepdim) const {
+    3653              :     return at::_ops::std_names_dim::call(const_cast<Tensor&>(*this), dim, unbiased, keepdim);
+    3654              : }
+    3655              : 
+    3656              : // aten::std.correction_names(Tensor self, Dimname[1] dim, *, Scalar? correction=None, bool keepdim=False) -> Tensor
+    3657              : inline at::Tensor Tensor::std(at::DimnameList dim, const c10::optional<at::Scalar> & correction, bool keepdim) const {
+    3658              :     return at::_ops::std_correction_names::call(const_cast<Tensor&>(*this), dim, correction, keepdim);
+    3659              : }
+    3660              : 
+    3661              : // aten::prod(Tensor self, *, ScalarType? dtype=None) -> Tensor
+    3662              : inline at::Tensor Tensor::prod(c10::optional<at::ScalarType> dtype) const {
+    3663              :     return at::_ops::prod::call(const_cast<Tensor&>(*this), dtype);
+    3664              : }
+    3665              : 
+    3666              : // aten::prod.dim_int(Tensor self, int dim, bool keepdim=False, *, ScalarType? dtype=None) -> Tensor
+    3667              : inline at::Tensor Tensor::prod(int64_t dim, bool keepdim, c10::optional<at::ScalarType> dtype) const {
+    3668              :     return at::_ops::prod_dim_int::call(const_cast<Tensor&>(*this), dim, keepdim, dtype);
+    3669              : }
+    3670              : 
+    3671              : // aten::prod.dim_Dimname(Tensor self, Dimname dim, bool keepdim=False, *, ScalarType? dtype=None) -> Tensor
+    3672              : inline at::Tensor Tensor::prod(at::Dimname dim, bool keepdim, c10::optional<at::ScalarType> dtype) const {
+    3673              :     return at::_ops::prod_dim_Dimname::call(const_cast<Tensor&>(*this), dim, keepdim, dtype);
+    3674              : }
+    3675              : 
+    3676              : // aten::t(Tensor(a) self) -> Tensor(a)
+    3677              : inline at::Tensor Tensor::t() const {
+    3678              :     return at::_ops::t::call(const_cast<Tensor&>(*this));
+    3679              : }
+    3680              : 
+    3681              : // aten::t_(Tensor(a!) self) -> Tensor(a!)
+    3682              : inline at::Tensor & Tensor::t_() const {
+    3683              :     return at::_ops::t_::call(const_cast<Tensor&>(*this));
+    3684              : }
+    3685              : 
+    3686              : // aten::tan(Tensor self) -> Tensor
+    3687              : inline at::Tensor Tensor::tan() const {
+    3688              :     return at::_ops::tan::call(const_cast<Tensor&>(*this));
+    3689              : }
+    3690              : 
+    3691              : // aten::tan_(Tensor(a!) self) -> Tensor(a!)
+    3692              : inline at::Tensor & Tensor::tan_() const {
+    3693              :     return at::_ops::tan_::call(const_cast<Tensor&>(*this));
+    3694              : }
+    3695              : 
+    3696              : // aten::tanh(Tensor self) -> Tensor
+    3697              : inline at::Tensor Tensor::tanh() const {
+    3698              :     return at::_ops::tanh::call(const_cast<Tensor&>(*this));
+    3699              : }
+    3700              : 
+    3701              : // aten::tanh_(Tensor(a!) self) -> Tensor(a!)
+    3702              : inline at::Tensor & Tensor::tanh_() const {
+    3703              :     return at::_ops::tanh_::call(const_cast<Tensor&>(*this));
+    3704              : }
+    3705              : 
+    3706              : // aten::tile(Tensor self, SymInt[] dims) -> Tensor
+    3707              : inline at::Tensor Tensor::tile(at::IntArrayRef dims) const {
+    3708              :     return at::_ops::tile::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(dims));
+    3709              : }
+    3710              : 
+    3711              : // aten::tile(Tensor self, SymInt[] dims) -> Tensor
+    3712              : inline at::Tensor Tensor::tile_symint(c10::SymIntArrayRef dims) const {
+    3713              :     return at::_ops::tile::call(const_cast<Tensor&>(*this), dims);
+    3714              : }
+    3715              : 
+    3716              : // aten::transpose.int(Tensor(a) self, int dim0, int dim1) -> Tensor(a)
+    3717              : inline at::Tensor Tensor::transpose(int64_t dim0, int64_t dim1) const {
+    3718              :     return at::_ops::transpose_int::call(const_cast<Tensor&>(*this), dim0, dim1);
+    3719              : }
+    3720              : 
+    3721              : // aten::transpose.Dimname(Tensor(a) self, Dimname dim0, Dimname dim1) -> Tensor(a)
+    3722              : inline at::Tensor Tensor::transpose(at::Dimname dim0, at::Dimname dim1) const {
+    3723              :     return at::_ops::transpose_Dimname::call(const_cast<Tensor&>(*this), dim0, dim1);
+    3724              : }
+    3725              : 
+    3726              : // aten::transpose_(Tensor(a!) self, int dim0, int dim1) -> Tensor(a!)
+    3727              : inline at::Tensor & Tensor::transpose_(int64_t dim0, int64_t dim1) const {
+    3728              :     return at::_ops::transpose_::call(const_cast<Tensor&>(*this), dim0, dim1);
+    3729              : }
+    3730              : 
+    3731              : // aten::flip(Tensor self, int[] dims) -> Tensor
+    3732              : inline at::Tensor Tensor::flip(at::IntArrayRef dims) const {
+    3733              :     return at::_ops::flip::call(const_cast<Tensor&>(*this), dims);
+    3734              : }
+    3735              : 
+    3736              : // aten::fliplr(Tensor self) -> Tensor
+    3737              : inline at::Tensor Tensor::fliplr() const {
+    3738              :     return at::_ops::fliplr::call(const_cast<Tensor&>(*this));
+    3739              : }
+    3740              : 
+    3741              : // aten::flipud(Tensor self) -> Tensor
+    3742              : inline at::Tensor Tensor::flipud() const {
+    3743              :     return at::_ops::flipud::call(const_cast<Tensor&>(*this));
+    3744              : }
+    3745              : 
+    3746              : // aten::roll(Tensor self, SymInt[1] shifts, int[1] dims=[]) -> Tensor
+    3747              : inline at::Tensor Tensor::roll(at::IntArrayRef shifts, at::IntArrayRef dims) const {
+    3748              :     return at::_ops::roll::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(shifts), dims);
+    3749              : }
+    3750              : 
+    3751              : // aten::roll(Tensor self, SymInt[1] shifts, int[1] dims=[]) -> Tensor
+    3752              : inline at::Tensor Tensor::roll_symint(c10::SymIntArrayRef shifts, at::IntArrayRef dims) const {
+    3753              :     return at::_ops::roll::call(const_cast<Tensor&>(*this), shifts, dims);
+    3754              : }
+    3755              : 
+    3756              : // aten::rot90(Tensor self, int k=1, int[] dims=[0,1]) -> Tensor
+    3757              : inline at::Tensor Tensor::rot90(int64_t k, at::IntArrayRef dims) const {
+    3758              :     return at::_ops::rot90::call(const_cast<Tensor&>(*this), k, dims);
+    3759              : }
+    3760              : 
+    3761              : // aten::_nested_tensor_size(Tensor self) -> Tensor
+    3762              : inline at::Tensor Tensor::_nested_tensor_size() const {
+    3763              :     return at::_ops::_nested_tensor_size::call(const_cast<Tensor&>(*this));
+    3764              : }
+    3765              : 
+    3766              : // aten::_nested_tensor_strides(Tensor self) -> Tensor
+    3767              : inline at::Tensor Tensor::_nested_tensor_strides() const {
+    3768              :     return at::_ops::_nested_tensor_strides::call(const_cast<Tensor&>(*this));
+    3769              : }
+    3770              : 
+    3771              : // aten::_nested_tensor_storage_offsets(Tensor self) -> Tensor
+    3772              : inline at::Tensor Tensor::_nested_tensor_storage_offsets() const {
+    3773              :     return at::_ops::_nested_tensor_storage_offsets::call(const_cast<Tensor&>(*this));
+    3774              : }
+    3775              : 
+    3776              : // aten::trunc(Tensor self) -> Tensor
+    3777              : inline at::Tensor Tensor::trunc() const {
+    3778              :     return at::_ops::trunc::call(const_cast<Tensor&>(*this));
+    3779              : }
+    3780              : 
+    3781              : // aten::trunc_(Tensor(a!) self) -> Tensor(a!)
+    3782              : inline at::Tensor & Tensor::trunc_() const {
+    3783              :     return at::_ops::trunc_::call(const_cast<Tensor&>(*this));
+    3784              : }
+    3785              : 
+    3786              : // aten::fix(Tensor self) -> Tensor
+    3787              : inline at::Tensor Tensor::fix() const {
+    3788              :     return at::_ops::fix::call(const_cast<Tensor&>(*this));
+    3789              : }
+    3790              : 
+    3791              : // aten::fix_(Tensor(a!) self) -> Tensor(a!)
+    3792              : inline at::Tensor & Tensor::fix_() const {
+    3793              :     return at::_ops::fix_::call(const_cast<Tensor&>(*this));
+    3794              : }
+    3795              : 
+    3796              : // aten::type_as(Tensor self, Tensor other) -> Tensor
+    3797              : inline at::Tensor Tensor::type_as(const at::Tensor & other) const {
+    3798              :     return at::_ops::type_as::call(const_cast<Tensor&>(*this), other);
+    3799              : }
+    3800              : 
+    3801              : // aten::unsqueeze(Tensor(a) self, int dim) -> Tensor(a)
+    3802              : inline at::Tensor Tensor::unsqueeze(int64_t dim) const {
+    3803              :     return at::_ops::unsqueeze::call(const_cast<Tensor&>(*this), dim);
+    3804              : }
+    3805              : 
+    3806              : // aten::unsqueeze_(Tensor(a!) self, int dim) -> Tensor(a!)
+    3807              : inline at::Tensor & Tensor::unsqueeze_(int64_t dim) const {
+    3808              :     return at::_ops::unsqueeze_::call(const_cast<Tensor&>(*this), dim);
+    3809              : }
+    3810              : 
+    3811              : // aten::var(Tensor self, bool unbiased=True) -> Tensor
+    3812              : inline at::Tensor Tensor::var(bool unbiased) const {
+    3813              :     return at::_ops::var::call(const_cast<Tensor&>(*this), unbiased);
+    3814              : }
+    3815              : 
+    3816              : // aten::var.dim(Tensor self, int[1]? dim, bool unbiased=True, bool keepdim=False) -> Tensor
+    3817              : inline at::Tensor Tensor::var(at::OptionalIntArrayRef dim, bool unbiased, bool keepdim) const {
+    3818              :     return at::_ops::var_dim::call(const_cast<Tensor&>(*this), dim, unbiased, keepdim);
+    3819              : }
+    3820              : 
+    3821              : // aten::var.correction(Tensor self, int[1]? dim=None, *, Scalar? correction=None, bool keepdim=False) -> Tensor
+    3822              : inline at::Tensor Tensor::var(at::OptionalIntArrayRef dim, const c10::optional<at::Scalar> & correction, bool keepdim) const {
+    3823              :     return at::_ops::var_correction::call(const_cast<Tensor&>(*this), dim, correction, keepdim);
+    3824              : }
+    3825              : 
+    3826              : // aten::var.names_dim(Tensor self, Dimname[1] dim, bool unbiased=True, bool keepdim=False) -> Tensor
+    3827              : inline at::Tensor Tensor::var(at::DimnameList dim, bool unbiased, bool keepdim) const {
+    3828              :     return at::_ops::var_names_dim::call(const_cast<Tensor&>(*this), dim, unbiased, keepdim);
+    3829              : }
+    3830              : 
+    3831              : // aten::var.correction_names(Tensor self, Dimname[1] dim, *, Scalar? correction=None, bool keepdim=False) -> Tensor
+    3832              : inline at::Tensor Tensor::var(at::DimnameList dim, const c10::optional<at::Scalar> & correction, bool keepdim) const {
+    3833              :     return at::_ops::var_correction_names::call(const_cast<Tensor&>(*this), dim, correction, keepdim);
+    3834              : }
+    3835              : 
+    3836              : // aten::view_as(Tensor(a) self, Tensor other) -> Tensor(a)
+    3837              : inline at::Tensor Tensor::view_as(const at::Tensor & other) const {
+    3838              :     return at::_ops::view_as::call(const_cast<Tensor&>(*this), other);
+    3839              : }
+    3840              : 
+    3841              : // aten::where.self(Tensor condition, Tensor self, Tensor other) -> Tensor
+    3842              : inline at::Tensor Tensor::where(const at::Tensor & condition, const at::Tensor & other) const {
+    3843              :     return at::_ops::where_self::call(condition, const_cast<Tensor&>(*this), other);
+    3844              : }
+    3845              : 
+    3846              : // aten::where.ScalarOther(Tensor condition, Tensor self, Scalar other) -> Tensor
+    3847              : inline at::Tensor Tensor::where(const at::Tensor & condition, const at::Scalar & other) const {
+    3848              :     return at::_ops::where_ScalarOther::call(condition, const_cast<Tensor&>(*this), other);
+    3849              : }
+    3850              : 
+    3851              : // aten::norm.ScalarOpt_dtype(Tensor self, Scalar? p, *, ScalarType dtype) -> Tensor
+    3852              : inline at::Tensor Tensor::norm(const c10::optional<at::Scalar> & p, at::ScalarType dtype) const {
+    3853              :     return at::_ops::norm_ScalarOpt_dtype::call(const_cast<Tensor&>(*this), p, dtype);
+    3854              : }
+    3855              : 
+    3856              : // aten::norm.Scalar(Tensor self, Scalar p=2) -> Tensor
+    3857              : inline at::Tensor Tensor::norm(const at::Scalar & p) const {
+    3858              :     return at::_ops::norm_Scalar::call(const_cast<Tensor&>(*this), p);
+    3859              : }
+    3860              : 
+    3861              : // aten::norm.ScalarOpt_dim_dtype(Tensor self, Scalar? p, int[1] dim, bool keepdim, *, ScalarType dtype) -> Tensor
+    3862              : inline at::Tensor Tensor::norm(const c10::optional<at::Scalar> & p, at::IntArrayRef dim, bool keepdim, at::ScalarType dtype) const {
+    3863              :     return at::_ops::norm_ScalarOpt_dim_dtype::call(const_cast<Tensor&>(*this), p, dim, keepdim, dtype);
+    3864              : }
+    3865              : 
+    3866              : // aten::norm.ScalarOpt_dim(Tensor self, Scalar? p, int[1] dim, bool keepdim=False) -> Tensor
+    3867              : inline at::Tensor Tensor::norm(const c10::optional<at::Scalar> & p, at::IntArrayRef dim, bool keepdim) const {
+    3868              :     return at::_ops::norm_ScalarOpt_dim::call(const_cast<Tensor&>(*this), p, dim, keepdim);
+    3869              : }
+    3870              : 
+    3871              : // aten::norm.names_ScalarOpt_dim_dtype(Tensor self, Scalar? p, Dimname[1] dim, bool keepdim, *, ScalarType dtype) -> Tensor
+    3872              : inline at::Tensor Tensor::norm(const c10::optional<at::Scalar> & p, at::DimnameList dim, bool keepdim, at::ScalarType dtype) const {
+    3873              :     return at::_ops::norm_names_ScalarOpt_dim_dtype::call(const_cast<Tensor&>(*this), p, dim, keepdim, dtype);
+    3874              : }
+    3875              : 
+    3876              : // aten::norm.names_ScalarOpt_dim(Tensor self, Scalar? p, Dimname[1] dim, bool keepdim=False) -> Tensor
+    3877              : inline at::Tensor Tensor::norm(const c10::optional<at::Scalar> & p, at::DimnameList dim, bool keepdim) const {
+    3878              :     return at::_ops::norm_names_ScalarOpt_dim::call(const_cast<Tensor&>(*this), p, dim, keepdim);
+    3879              : }
+    3880              : 
+    3881              : // aten::frexp.Tensor(Tensor self) -> (Tensor mantissa, Tensor exponent)
+    3882              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::frexp() const {
+    3883              :     return at::_ops::frexp_Tensor::call(const_cast<Tensor&>(*this));
+    3884              : }
+    3885              : 
+    3886              : // aten::clone(Tensor self, *, MemoryFormat? memory_format=None) -> Tensor
+    3887            6 : inline at::Tensor Tensor::clone(c10::optional<at::MemoryFormat> memory_format) const {
+    3888            6 :     return at::_ops::clone::call(const_cast<Tensor&>(*this), memory_format);
+    3889              : }
+    3890              : 
+    3891              : // aten::positive(Tensor(a) self) -> Tensor(a)
+    3892              : inline at::Tensor Tensor::positive() const {
+    3893              :     return at::_ops::positive::call(const_cast<Tensor&>(*this));
+    3894              : }
+    3895              : 
+    3896              : // aten::resize_as_(Tensor(a!) self, Tensor the_template, *, MemoryFormat? memory_format=None) -> Tensor(a!)
+    3897              : inline const at::Tensor & Tensor::resize_as_(const at::Tensor & the_template, c10::optional<at::MemoryFormat> memory_format) const {
+    3898              :     return at::_ops::resize_as_::call(const_cast<Tensor&>(*this), the_template, memory_format);
+    3899              : }
+    3900              : 
+    3901              : // aten::resize_as_sparse_(Tensor(a!) self, Tensor the_template) -> Tensor(a!)
+    3902              : inline const at::Tensor & Tensor::resize_as_sparse_(const at::Tensor & the_template) const {
+    3903              :     return at::_ops::resize_as_sparse_::call(const_cast<Tensor&>(*this), the_template);
+    3904              : }
+    3905              : 
+    3906              : // aten::zero_(Tensor(a!) self) -> Tensor(a!)
+    3907              : inline at::Tensor & Tensor::zero_() const {
+    3908              :     return at::_ops::zero_::call(const_cast<Tensor&>(*this));
+    3909              : }
+    3910              : 
+    3911              : // aten::sub.Tensor(Tensor self, Tensor other, *, Scalar alpha=1) -> Tensor
+    3912              : inline at::Tensor Tensor::sub(const at::Tensor & other, const at::Scalar & alpha) const {
+    3913              :     return at::_ops::sub_Tensor::call(const_cast<Tensor&>(*this), other, alpha);
+    3914              : }
+    3915              : 
+    3916              : // aten::sub_.Tensor(Tensor(a!) self, Tensor other, *, Scalar alpha=1) -> Tensor(a!)
+    3917              : inline at::Tensor & Tensor::sub_(const at::Tensor & other, const at::Scalar & alpha) const {
+    3918              :     return at::_ops::sub__Tensor::call(const_cast<Tensor&>(*this), other, alpha);
+    3919              : }
+    3920              : 
+    3921              : // aten::sub.Scalar(Tensor self, Scalar other, Scalar alpha=1) -> Tensor
+    3922              : inline at::Tensor Tensor::sub(const at::Scalar & other, const at::Scalar & alpha) const {
+    3923              :     return at::_ops::sub_Scalar::call(const_cast<Tensor&>(*this), other, alpha);
+    3924              : }
+    3925              : 
+    3926              : // aten::sub_.Scalar(Tensor(a!) self, Scalar other, Scalar alpha=1) -> Tensor(a!)
+    3927              : inline at::Tensor & Tensor::sub_(const at::Scalar & other, const at::Scalar & alpha) const {
+    3928              :     return at::_ops::sub__Scalar::call(const_cast<Tensor&>(*this), other, alpha);
+    3929              : }
+    3930              : 
+    3931              : // aten::subtract.Tensor(Tensor self, Tensor other, *, Scalar alpha=1) -> Tensor
+    3932              : inline at::Tensor Tensor::subtract(const at::Tensor & other, const at::Scalar & alpha) const {
+    3933              :     return at::_ops::subtract_Tensor::call(const_cast<Tensor&>(*this), other, alpha);
+    3934              : }
+    3935              : 
+    3936              : // aten::subtract_.Tensor(Tensor(a!) self, Tensor other, *, Scalar alpha=1) -> Tensor(a!)
+    3937              : inline at::Tensor & Tensor::subtract_(const at::Tensor & other, const at::Scalar & alpha) const {
+    3938              :     return at::_ops::subtract__Tensor::call(const_cast<Tensor&>(*this), other, alpha);
+    3939              : }
+    3940              : 
+    3941              : // aten::subtract.Scalar(Tensor self, Scalar other, Scalar alpha=1) -> Tensor
+    3942              : inline at::Tensor Tensor::subtract(const at::Scalar & other, const at::Scalar & alpha) const {
+    3943              :     return at::_ops::subtract_Scalar::call(const_cast<Tensor&>(*this), other, alpha);
+    3944              : }
+    3945              : 
+    3946              : // aten::subtract_.Scalar(Tensor(a!) self, Scalar other, Scalar alpha=1) -> Tensor(a!)
+    3947              : inline at::Tensor & Tensor::subtract_(const at::Scalar & other, const at::Scalar & alpha) const {
+    3948              :     return at::_ops::subtract__Scalar::call(const_cast<Tensor&>(*this), other, alpha);
+    3949              : }
+    3950              : 
+    3951              : // aten::heaviside(Tensor self, Tensor values) -> Tensor
+    3952              : inline at::Tensor Tensor::heaviside(const at::Tensor & values) const {
+    3953              :     return at::_ops::heaviside::call(const_cast<Tensor&>(*this), values);
+    3954              : }
+    3955              : 
+    3956              : // aten::heaviside_(Tensor(a!) self, Tensor values) -> Tensor(a!)
+    3957              : inline at::Tensor & Tensor::heaviside_(const at::Tensor & values) const {
+    3958              :     return at::_ops::heaviside_::call(const_cast<Tensor&>(*this), values);
+    3959              : }
+    3960              : 
+    3961              : // aten::addmm(Tensor self, Tensor mat1, Tensor mat2, *, Scalar beta=1, Scalar alpha=1) -> Tensor
+    3962              : inline at::Tensor Tensor::addmm(const at::Tensor & mat1, const at::Tensor & mat2, const at::Scalar & beta, const at::Scalar & alpha) const {
+    3963              :     return at::_ops::addmm::call(const_cast<Tensor&>(*this), mat1, mat2, beta, alpha);
+    3964              : }
+    3965              : 
+    3966              : // aten::addmm_(Tensor(a!) self, Tensor mat1, Tensor mat2, *, Scalar beta=1, Scalar alpha=1) -> Tensor(a!)
+    3967              : inline at::Tensor & Tensor::addmm_(const at::Tensor & mat1, const at::Tensor & mat2, const at::Scalar & beta, const at::Scalar & alpha) const {
+    3968              :     return at::_ops::addmm_::call(const_cast<Tensor&>(*this), mat1, mat2, beta, alpha);
+    3969              : }
+    3970              : 
+    3971              : // aten::_addmm_activation(Tensor self, Tensor mat1, Tensor mat2, *, Scalar beta=1, Scalar alpha=1, bool use_gelu=False) -> Tensor
+    3972              : inline at::Tensor Tensor::_addmm_activation(const at::Tensor & mat1, const at::Tensor & mat2, const at::Scalar & beta, const at::Scalar & alpha, bool use_gelu) const {
+    3973              :     return at::_ops::_addmm_activation::call(const_cast<Tensor&>(*this), mat1, mat2, beta, alpha, use_gelu);
+    3974              : }
+    3975              : 
+    3976              : // aten::sparse_resize_(Tensor(a!) self, int[] size, int sparse_dim, int dense_dim) -> Tensor(a!)
+    3977              : inline const at::Tensor & Tensor::sparse_resize_(at::IntArrayRef size, int64_t sparse_dim, int64_t dense_dim) const {
+    3978              :     return at::_ops::sparse_resize_::call(const_cast<Tensor&>(*this), size, sparse_dim, dense_dim);
+    3979              : }
+    3980              : 
+    3981              : // aten::sparse_resize_and_clear_(Tensor(a!) self, int[] size, int sparse_dim, int dense_dim) -> Tensor(a!)
+    3982              : inline const at::Tensor & Tensor::sparse_resize_and_clear_(at::IntArrayRef size, int64_t sparse_dim, int64_t dense_dim) const {
+    3983              :     return at::_ops::sparse_resize_and_clear_::call(const_cast<Tensor&>(*this), size, sparse_dim, dense_dim);
+    3984              : }
+    3985              : 
+    3986              : // aten::sparse_mask(Tensor self, Tensor mask) -> Tensor
+    3987              : inline at::Tensor Tensor::sparse_mask(const at::Tensor & mask) const {
+    3988              :     return at::_ops::sparse_mask::call(const_cast<Tensor&>(*this), mask);
+    3989              : }
+    3990              : 
+    3991              : // aten::_sparse_mask_projection(Tensor self, Tensor mask, bool accumulate_matches=False) -> Tensor
+    3992              : inline at::Tensor Tensor::_sparse_mask_projection(const at::Tensor & mask, bool accumulate_matches) const {
+    3993              :     return at::_ops::_sparse_mask_projection::call(const_cast<Tensor&>(*this), mask, accumulate_matches);
+    3994              : }
+    3995              : 
+    3996              : // aten::to_dense(Tensor self, ScalarType? dtype=None, *, bool? masked_grad=None) -> Tensor
+    3997              : inline at::Tensor Tensor::to_dense(c10::optional<at::ScalarType> dtype, c10::optional<bool> masked_grad) const {
+    3998              :     return at::_ops::to_dense::call(const_cast<Tensor&>(*this), dtype, masked_grad);
+    3999              : }
+    4000              : 
+    4001              : // aten::_to_dense(Tensor self, ScalarType? dtype=None, bool? masked_grad=None) -> Tensor
+    4002              : inline at::Tensor Tensor::_to_dense(c10::optional<at::ScalarType> dtype, c10::optional<bool> masked_grad) const {
+    4003              :     return at::_ops::_to_dense::call(const_cast<Tensor&>(*this), dtype, masked_grad);
+    4004              : }
+    4005              : 
+    4006              : // aten::sparse_dim(Tensor self) -> int
+    4007              : inline int64_t Tensor::sparse_dim() const {
+    4008              :     return at::_ops::sparse_dim::call(const_cast<Tensor&>(*this));
+    4009              : }
+    4010              : 
+    4011              : // aten::_dimI(Tensor self) -> int
+    4012              : inline int64_t Tensor::_dimI() const {
+    4013              :     return at::_ops::_dimI::call(const_cast<Tensor&>(*this));
+    4014              : }
+    4015              : 
+    4016              : // aten::dense_dim(Tensor self) -> int
+    4017              : inline int64_t Tensor::dense_dim() const {
+    4018              :     return at::_ops::dense_dim::call(const_cast<Tensor&>(*this));
+    4019              : }
+    4020              : 
+    4021              : // aten::_dimV(Tensor self) -> int
+    4022              : inline int64_t Tensor::_dimV() const {
+    4023              :     return at::_ops::_dimV::call(const_cast<Tensor&>(*this));
+    4024              : }
+    4025              : 
+    4026              : // aten::_nnz(Tensor self) -> int
+    4027              : inline int64_t Tensor::_nnz() const {
+    4028              :     return at::_ops::_nnz::call(const_cast<Tensor&>(*this));
+    4029              : }
+    4030              : 
+    4031              : // aten::coalesce(Tensor(a) self) -> Tensor(a)
+    4032              : inline at::Tensor Tensor::coalesce() const {
+    4033              :     return at::_ops::coalesce::call(const_cast<Tensor&>(*this));
+    4034              : }
+    4035              : 
+    4036              : // aten::is_coalesced(Tensor self) -> bool
+    4037              : inline bool Tensor::is_coalesced() const {
+    4038              :     return at::_ops::is_coalesced::call(const_cast<Tensor&>(*this));
+    4039              : }
+    4040              : 
+    4041              : // aten::_indices(Tensor(a) self) -> Tensor(a)
+    4042              : inline at::Tensor Tensor::_indices() const {
+    4043              :     return at::_ops::_indices::call(const_cast<Tensor&>(*this));
+    4044              : }
+    4045              : 
+    4046              : // aten::_values(Tensor(a) self) -> Tensor(a)
+    4047              : inline at::Tensor Tensor::_values() const {
+    4048              :     return at::_ops::_values::call(const_cast<Tensor&>(*this));
+    4049              : }
+    4050              : 
+    4051              : // aten::_coalesced_(Tensor(a!) self, bool coalesced) -> Tensor(a!)
+    4052              : inline at::Tensor & Tensor::_coalesced_(bool coalesced) const {
+    4053              :     return at::_ops::_coalesced_::call(const_cast<Tensor&>(*this), coalesced);
+    4054              : }
+    4055              : 
+    4056              : // aten::indices(Tensor(a) self) -> Tensor(a)
+    4057              : inline at::Tensor Tensor::indices() const {
+    4058              :     return at::_ops::indices::call(const_cast<Tensor&>(*this));
+    4059              : }
+    4060              : 
+    4061              : // aten::values(Tensor(a) self) -> Tensor(a)
+    4062              : inline at::Tensor Tensor::values() const {
+    4063              :     return at::_ops::values::call(const_cast<Tensor&>(*this));
+    4064              : }
+    4065              : 
+    4066              : // aten::crow_indices(Tensor(a) self) -> Tensor(a)
+    4067              : inline at::Tensor Tensor::crow_indices() const {
+    4068              :     return at::_ops::crow_indices::call(const_cast<Tensor&>(*this));
+    4069              : }
+    4070              : 
+    4071              : // aten::col_indices(Tensor(a) self) -> Tensor(a)
+    4072              : inline at::Tensor Tensor::col_indices() const {
+    4073              :     return at::_ops::col_indices::call(const_cast<Tensor&>(*this));
+    4074              : }
+    4075              : 
+    4076              : // aten::ccol_indices(Tensor(a) self) -> Tensor(a)
+    4077              : inline at::Tensor Tensor::ccol_indices() const {
+    4078              :     return at::_ops::ccol_indices::call(const_cast<Tensor&>(*this));
+    4079              : }
+    4080              : 
+    4081              : // aten::row_indices(Tensor(a) self) -> Tensor(a)
+    4082              : inline at::Tensor Tensor::row_indices() const {
+    4083              :     return at::_ops::row_indices::call(const_cast<Tensor&>(*this));
+    4084              : }
+    4085              : 
+    4086              : // aten::unbind.int(Tensor(a -> *) self, int dim=0) -> Tensor(a)[]
+    4087              : inline ::std::vector<at::Tensor> Tensor::unbind(int64_t dim) const {
+    4088              :     return at::_ops::unbind_int::call(const_cast<Tensor&>(*this), dim);
+    4089              : }
+    4090              : 
+    4091              : // aten::unbind.Dimname(Tensor(a -> *) self, Dimname dim) -> Tensor(a)[]
+    4092              : inline ::std::vector<at::Tensor> Tensor::unbind(at::Dimname dim) const {
+    4093              :     return at::_ops::unbind_Dimname::call(const_cast<Tensor&>(*this), dim);
+    4094              : }
+    4095              : 
+    4096              : // aten::to_sparse.sparse_dim(Tensor self, int sparse_dim) -> Tensor
+    4097              : inline at::Tensor Tensor::to_sparse(int64_t sparse_dim) const {
+    4098              :     return at::_ops::to_sparse_sparse_dim::call(const_cast<Tensor&>(*this), sparse_dim);
+    4099              : }
+    4100              : 
+    4101              : // aten::_to_sparse.sparse_dim(Tensor self, int sparse_dim) -> Tensor
+    4102              : inline at::Tensor Tensor::_to_sparse(int64_t sparse_dim) const {
+    4103              :     return at::_ops::_to_sparse_sparse_dim::call(const_cast<Tensor&>(*this), sparse_dim);
+    4104              : }
+    4105              : 
+    4106              : // aten::to_sparse(Tensor self, *, Layout? layout=None, int[2]? blocksize=None, int? dense_dim=None) -> Tensor
+    4107              : inline at::Tensor Tensor::to_sparse(c10::optional<at::Layout> layout, at::OptionalIntArrayRef blocksize, c10::optional<int64_t> dense_dim) const {
+    4108              :     return at::_ops::to_sparse::call(const_cast<Tensor&>(*this), layout, blocksize, dense_dim);
+    4109              : }
+    4110              : 
+    4111              : // aten::_to_sparse(Tensor self, *, Layout? layout=None, int[2]? blocksize=None, int? dense_dim=None) -> Tensor
+    4112              : inline at::Tensor Tensor::_to_sparse(c10::optional<at::Layout> layout, at::OptionalIntArrayRef blocksize, c10::optional<int64_t> dense_dim) const {
+    4113              :     return at::_ops::_to_sparse::call(const_cast<Tensor&>(*this), layout, blocksize, dense_dim);
+    4114              : }
+    4115              : 
+    4116              : // aten::to_sparse_csr(Tensor self, int? dense_dim=None) -> Tensor
+    4117              : inline at::Tensor Tensor::to_sparse_csr(c10::optional<int64_t> dense_dim) const {
+    4118              :     return at::_ops::to_sparse_csr::call(const_cast<Tensor&>(*this), dense_dim);
+    4119              : }
+    4120              : 
+    4121              : // aten::_to_sparse_csr(Tensor self, int? dense_dim=None) -> Tensor
+    4122              : inline at::Tensor Tensor::_to_sparse_csr(c10::optional<int64_t> dense_dim) const {
+    4123              :     return at::_ops::_to_sparse_csr::call(const_cast<Tensor&>(*this), dense_dim);
+    4124              : }
+    4125              : 
+    4126              : // aten::to_sparse_csc(Tensor self, int? dense_dim=None) -> Tensor
+    4127              : inline at::Tensor Tensor::to_sparse_csc(c10::optional<int64_t> dense_dim) const {
+    4128              :     return at::_ops::to_sparse_csc::call(const_cast<Tensor&>(*this), dense_dim);
+    4129              : }
+    4130              : 
+    4131              : // aten::_to_sparse_csc(Tensor self, int? dense_dim=None) -> Tensor
+    4132              : inline at::Tensor Tensor::_to_sparse_csc(c10::optional<int64_t> dense_dim) const {
+    4133              :     return at::_ops::_to_sparse_csc::call(const_cast<Tensor&>(*this), dense_dim);
+    4134              : }
+    4135              : 
+    4136              : // aten::to_sparse_bsr(Tensor self, int[2] blocksize, int? dense_dim=None) -> Tensor
+    4137              : inline at::Tensor Tensor::to_sparse_bsr(at::IntArrayRef blocksize, c10::optional<int64_t> dense_dim) const {
+    4138              :     return at::_ops::to_sparse_bsr::call(const_cast<Tensor&>(*this), blocksize, dense_dim);
+    4139              : }
+    4140              : 
+    4141              : // aten::_to_sparse_bsr(Tensor self, int[2] blocksize, int? dense_dim=None) -> Tensor
+    4142              : inline at::Tensor Tensor::_to_sparse_bsr(at::IntArrayRef blocksize, c10::optional<int64_t> dense_dim) const {
+    4143              :     return at::_ops::_to_sparse_bsr::call(const_cast<Tensor&>(*this), blocksize, dense_dim);
+    4144              : }
+    4145              : 
+    4146              : // aten::to_sparse_bsc(Tensor self, int[2] blocksize, int? dense_dim=None) -> Tensor
+    4147              : inline at::Tensor Tensor::to_sparse_bsc(at::IntArrayRef blocksize, c10::optional<int64_t> dense_dim) const {
+    4148              :     return at::_ops::to_sparse_bsc::call(const_cast<Tensor&>(*this), blocksize, dense_dim);
+    4149              : }
+    4150              : 
+    4151              : // aten::_to_sparse_bsc(Tensor self, int[2] blocksize, int? dense_dim=None) -> Tensor
+    4152              : inline at::Tensor Tensor::_to_sparse_bsc(at::IntArrayRef blocksize, c10::optional<int64_t> dense_dim) const {
+    4153              :     return at::_ops::_to_sparse_bsc::call(const_cast<Tensor&>(*this), blocksize, dense_dim);
+    4154              : }
+    4155              : 
+    4156              : // aten::to_mkldnn(Tensor self, ScalarType? dtype=None) -> Tensor
+    4157              : inline at::Tensor Tensor::to_mkldnn(c10::optional<at::ScalarType> dtype) const {
+    4158              :     return at::_ops::to_mkldnn::call(const_cast<Tensor&>(*this), dtype);
+    4159              : }
+    4160              : 
+    4161              : // aten::dequantize.self(Tensor self) -> Tensor
+    4162              : inline at::Tensor Tensor::dequantize() const {
+    4163              :     return at::_ops::dequantize_self::call(const_cast<Tensor&>(*this));
+    4164              : }
+    4165              : 
+    4166              : // aten::q_scale(Tensor self) -> float
+    4167              : inline double Tensor::q_scale() const {
+    4168              :     return at::_ops::q_scale::call(const_cast<Tensor&>(*this));
+    4169              : }
+    4170              : 
+    4171              : // aten::q_zero_point(Tensor self) -> int
+    4172              : inline int64_t Tensor::q_zero_point() const {
+    4173              :     return at::_ops::q_zero_point::call(const_cast<Tensor&>(*this));
+    4174              : }
+    4175              : 
+    4176              : // aten::q_per_channel_scales(Tensor self) -> Tensor
+    4177              : inline at::Tensor Tensor::q_per_channel_scales() const {
+    4178              :     return at::_ops::q_per_channel_scales::call(const_cast<Tensor&>(*this));
+    4179              : }
+    4180              : 
+    4181              : // aten::q_per_channel_zero_points(Tensor self) -> Tensor
+    4182              : inline at::Tensor Tensor::q_per_channel_zero_points() const {
+    4183              :     return at::_ops::q_per_channel_zero_points::call(const_cast<Tensor&>(*this));
+    4184              : }
+    4185              : 
+    4186              : // aten::q_per_channel_axis(Tensor self) -> int
+    4187              : inline int64_t Tensor::q_per_channel_axis() const {
+    4188              :     return at::_ops::q_per_channel_axis::call(const_cast<Tensor&>(*this));
+    4189              : }
+    4190              : 
+    4191              : // aten::int_repr(Tensor self) -> Tensor
+    4192              : inline at::Tensor Tensor::int_repr() const {
+    4193              :     return at::_ops::int_repr::call(const_cast<Tensor&>(*this));
+    4194              : }
+    4195              : 
+    4196              : // aten::qscheme(Tensor self) -> QScheme
+    4197              : inline at::QScheme Tensor::qscheme() const {
+    4198              :     return at::_ops::qscheme::call(const_cast<Tensor&>(*this));
+    4199              : }
+    4200              : 
+    4201              : // aten::_autocast_to_reduced_precision(Tensor(a) self, bool cuda_enabled, bool cpu_enabled, ScalarType cuda_dtype, ScalarType cpu_dtype) -> Tensor(a)
+    4202              : inline at::Tensor Tensor::_autocast_to_reduced_precision(bool cuda_enabled, bool cpu_enabled, at::ScalarType cuda_dtype, at::ScalarType cpu_dtype) const {
+    4203              :     return at::_ops::_autocast_to_reduced_precision::call(const_cast<Tensor&>(*this), cuda_enabled, cpu_enabled, cuda_dtype, cpu_dtype);
+    4204              : }
+    4205              : 
+    4206              : // aten::_autocast_to_full_precision(Tensor(a) self, bool cuda_enabled, bool cpu_enabled) -> Tensor(a)
+    4207              : inline at::Tensor Tensor::_autocast_to_full_precision(bool cuda_enabled, bool cpu_enabled) const {
+    4208              :     return at::_ops::_autocast_to_full_precision::call(const_cast<Tensor&>(*this), cuda_enabled, cpu_enabled);
+    4209              : }
+    4210              : 
+    4211              : // aten::to.dtype_layout(Tensor(a) self, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None, bool non_blocking=False, bool copy=False, MemoryFormat? memory_format=None) -> Tensor(a)
+    4212       401318 : inline at::Tensor Tensor::to(at::TensorOptions options, bool non_blocking, bool copy, c10::optional<at::MemoryFormat> memory_format) const {
+    4213       401318 :     return at::_ops::to_dtype_layout::call(const_cast<Tensor&>(*this), optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt(), non_blocking, copy, c10::impl::check_tensor_options_and_extract_memory_format(options, memory_format));
+    4214              : }
+    4215              : 
+    4216              : // aten::to.dtype_layout(Tensor(a) self, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None, bool non_blocking=False, bool copy=False, MemoryFormat? memory_format=None) -> Tensor(a)
+    4217              : inline at::Tensor Tensor::to(c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory, bool non_blocking, bool copy, c10::optional<at::MemoryFormat> memory_format) const {
+    4218              :     return at::_ops::to_dtype_layout::call(const_cast<Tensor&>(*this), dtype, layout, device, pin_memory, non_blocking, copy, memory_format);
+    4219              : }
+    4220              : 
+    4221              : // aten::to.device(Tensor(a) self, Device device, ScalarType dtype, bool non_blocking=False, bool copy=False, MemoryFormat? memory_format=None) -> Tensor(a)
+    4222              : inline at::Tensor Tensor::to(at::Device device, at::ScalarType dtype, bool non_blocking, bool copy, c10::optional<at::MemoryFormat> memory_format) const {
+    4223              :     return at::_ops::to_device::call(const_cast<Tensor&>(*this), device, dtype, non_blocking, copy, memory_format);
+    4224              : }
+    4225              : 
+    4226              : // aten::to.dtype(Tensor(a) self, ScalarType dtype, bool non_blocking=False, bool copy=False, MemoryFormat? memory_format=None) -> Tensor(a)
+    4227        17282 : inline at::Tensor Tensor::to(at::ScalarType dtype, bool non_blocking, bool copy, c10::optional<at::MemoryFormat> memory_format) const {
+    4228        17282 :     return at::_ops::to_dtype::call(const_cast<Tensor&>(*this), dtype, non_blocking, copy, memory_format);
+    4229              : }
+    4230              : 
+    4231              : // aten::to.other(Tensor(a) self, Tensor other, bool non_blocking=False, bool copy=False, MemoryFormat? memory_format=None) -> Tensor(a)
+    4232              : inline at::Tensor Tensor::to(const at::Tensor & other, bool non_blocking, bool copy, c10::optional<at::MemoryFormat> memory_format) const {
+    4233              :     return at::_ops::to_other::call(const_cast<Tensor&>(*this), other, non_blocking, copy, memory_format);
+    4234              : }
+    4235              : 
+    4236              : // aten::item(Tensor self) -> Scalar
+    4237         7072 : inline at::Scalar Tensor::item() const {
+    4238         7072 :     return at::_ops::item::call(const_cast<Tensor&>(*this));
+    4239              : }
+    4240              : 
+    4241              : // aten::set_.source_Storage(Tensor(a!) self, Storage source) -> Tensor(a!)
+    4242              : inline at::Tensor & Tensor::set_(at::Storage source) const {
+    4243              :     return at::_ops::set__source_Storage::call(const_cast<Tensor&>(*this), source);
+    4244              : }
+    4245              : 
+    4246              : // aten::set_.source_Storage_storage_offset(Tensor(a!) self, Storage source, SymInt storage_offset, SymInt[] size, SymInt[] stride=[]) -> Tensor(a!)
+    4247              : inline at::Tensor & Tensor::set_(at::Storage source, int64_t storage_offset, at::IntArrayRef size, at::IntArrayRef stride) const {
+    4248              :     return at::_ops::set__source_Storage_storage_offset::call(const_cast<Tensor&>(*this), source, storage_offset, c10::fromIntArrayRefSlow(size), c10::fromIntArrayRefSlow(stride));
+    4249              : }
+    4250              : 
+    4251              : // aten::set_.source_Storage_storage_offset(Tensor(a!) self, Storage source, SymInt storage_offset, SymInt[] size, SymInt[] stride=[]) -> Tensor(a!)
+    4252              : inline at::Tensor & Tensor::set__symint(at::Storage source, c10::SymInt storage_offset, c10::SymIntArrayRef size, c10::SymIntArrayRef stride) const {
+    4253              :     return at::_ops::set__source_Storage_storage_offset::call(const_cast<Tensor&>(*this), source, storage_offset, size, stride);
+    4254              : }
+    4255              : 
+    4256              : // aten::set_.source_Tensor_storage_offset(Tensor(a!) self, Tensor source, SymInt storage_offset, SymInt[] size, SymInt[] stride=[]) -> Tensor(a!)
+    4257              : inline at::Tensor & Tensor::set_(const at::Tensor & source, int64_t storage_offset, at::IntArrayRef size, at::IntArrayRef stride) const {
+    4258              :     return at::_ops::set__source_Tensor_storage_offset::call(const_cast<Tensor&>(*this), source, storage_offset, c10::fromIntArrayRefSlow(size), c10::fromIntArrayRefSlow(stride));
+    4259              : }
+    4260              : 
+    4261              : // aten::set_.source_Tensor_storage_offset(Tensor(a!) self, Tensor source, SymInt storage_offset, SymInt[] size, SymInt[] stride=[]) -> Tensor(a!)
+    4262              : inline at::Tensor & Tensor::set__symint(const at::Tensor & source, c10::SymInt storage_offset, c10::SymIntArrayRef size, c10::SymIntArrayRef stride) const {
+    4263              :     return at::_ops::set__source_Tensor_storage_offset::call(const_cast<Tensor&>(*this), source, storage_offset, size, stride);
+    4264              : }
+    4265              : 
+    4266              : // aten::set_.source_Tensor(Tensor(a!) self, Tensor source) -> Tensor(a!)
+    4267              : inline at::Tensor & Tensor::set_(const at::Tensor & source) const {
+    4268              :     return at::_ops::set__source_Tensor::call(const_cast<Tensor&>(*this), source);
+    4269              : }
+    4270              : 
+    4271              : // aten::set_(Tensor(a!) self) -> Tensor(a!)
+    4272              : inline at::Tensor & Tensor::set_() const {
+    4273              :     return at::_ops::set_::call(const_cast<Tensor&>(*this));
+    4274              : }
+    4275              : 
+    4276              : // aten::is_set_to(Tensor self, Tensor tensor) -> bool
+    4277              : inline bool Tensor::is_set_to(const at::Tensor & tensor) const {
+    4278              :     return at::_ops::is_set_to::call(const_cast<Tensor&>(*this), tensor);
+    4279              : }
+    4280              : 
+    4281              : // aten::masked_fill_.Scalar(Tensor(a!) self, Tensor mask, Scalar value) -> Tensor(a!)
+    4282              : inline at::Tensor & Tensor::masked_fill_(const at::Tensor & mask, const at::Scalar & value) const {
+    4283              :     return at::_ops::masked_fill__Scalar::call(const_cast<Tensor&>(*this), mask, value);
+    4284              : }
+    4285              : 
+    4286              : // aten::masked_fill.Scalar(Tensor self, Tensor mask, Scalar value) -> Tensor
+    4287              : inline at::Tensor Tensor::masked_fill(const at::Tensor & mask, const at::Scalar & value) const {
+    4288              :     return at::_ops::masked_fill_Scalar::call(const_cast<Tensor&>(*this), mask, value);
+    4289              : }
+    4290              : 
+    4291              : // aten::masked_fill_.Tensor(Tensor(a!) self, Tensor mask, Tensor value) -> Tensor(a!)
+    4292              : inline at::Tensor & Tensor::masked_fill_(const at::Tensor & mask, const at::Tensor & value) const {
+    4293              :     return at::_ops::masked_fill__Tensor::call(const_cast<Tensor&>(*this), mask, value);
+    4294              : }
+    4295              : 
+    4296              : // aten::masked_fill.Tensor(Tensor self, Tensor mask, Tensor value) -> Tensor
+    4297              : inline at::Tensor Tensor::masked_fill(const at::Tensor & mask, const at::Tensor & value) const {
+    4298              :     return at::_ops::masked_fill_Tensor::call(const_cast<Tensor&>(*this), mask, value);
+    4299              : }
+    4300              : 
+    4301              : // aten::masked_scatter_(Tensor(a!) self, Tensor mask, Tensor source) -> Tensor(a!)
+    4302              : inline at::Tensor & Tensor::masked_scatter_(const at::Tensor & mask, const at::Tensor & source) const {
+    4303              :     return at::_ops::masked_scatter_::call(const_cast<Tensor&>(*this), mask, source);
+    4304              : }
+    4305              : 
+    4306              : // aten::masked_scatter(Tensor self, Tensor mask, Tensor source) -> Tensor
+    4307              : inline at::Tensor Tensor::masked_scatter(const at::Tensor & mask, const at::Tensor & source) const {
+    4308              :     return at::_ops::masked_scatter::call(const_cast<Tensor&>(*this), mask, source);
+    4309              : }
+    4310              : 
+    4311              : // aten::view(Tensor(a) self, SymInt[] size) -> Tensor(a)
+    4312          376 : inline at::Tensor Tensor::view(at::IntArrayRef size) const {
+    4313          376 :     return at::_ops::view::call(const_cast<Tensor&>(*this), c10::fromIntArrayRefSlow(size));
+    4314              : }
+    4315              : 
+    4316              : // aten::view(Tensor(a) self, SymInt[] size) -> Tensor(a)
+    4317              : inline at::Tensor Tensor::view_symint(c10::SymIntArrayRef size) const {
+    4318              :     return at::_ops::view::call(const_cast<Tensor&>(*this), size);
+    4319              : }
+    4320              : 
+    4321              : // aten::view.dtype(Tensor(a) self, ScalarType dtype) -> Tensor(a)
+    4322              : inline at::Tensor Tensor::view(at::ScalarType dtype) const {
+    4323              :     return at::_ops::view_dtype::call(const_cast<Tensor&>(*this), dtype);
+    4324              : }
+    4325              : 
+    4326              : // aten::put_(Tensor(a!) self, Tensor index, Tensor source, bool accumulate=False) -> Tensor(a!)
+    4327              : inline at::Tensor & Tensor::put_(const at::Tensor & index, const at::Tensor & source, bool accumulate) const {
+    4328              :     return at::_ops::put_::call(const_cast<Tensor&>(*this), index, source, accumulate);
+    4329              : }
+    4330              : 
+    4331              : // aten::put(Tensor self, Tensor index, Tensor source, bool accumulate=False) -> Tensor
+    4332              : inline at::Tensor Tensor::put(const at::Tensor & index, const at::Tensor & source, bool accumulate) const {
+    4333              :     return at::_ops::put::call(const_cast<Tensor&>(*this), index, source, accumulate);
+    4334              : }
+    4335              : 
+    4336              : // aten::index_add_(Tensor(a!) self, int dim, Tensor index, Tensor source, *, Scalar alpha=1) -> Tensor(a!)
+    4337              : inline at::Tensor & Tensor::index_add_(int64_t dim, const at::Tensor & index, const at::Tensor & source, const at::Scalar & alpha) const {
+    4338              :     return at::_ops::index_add_::call(const_cast<Tensor&>(*this), dim, index, source, alpha);
+    4339              : }
+    4340              : 
+    4341              : // aten::index_add(Tensor self, int dim, Tensor index, Tensor source, *, Scalar alpha=1) -> Tensor
+    4342              : inline at::Tensor Tensor::index_add(int64_t dim, const at::Tensor & index, const at::Tensor & source, const at::Scalar & alpha) const {
+    4343              :     return at::_ops::index_add::call(const_cast<Tensor&>(*this), dim, index, source, alpha);
+    4344              : }
+    4345              : 
+    4346              : // aten::index_add.dimname(Tensor self, Dimname dim, Tensor index, Tensor source, *, Scalar alpha=1) -> Tensor
+    4347              : inline at::Tensor Tensor::index_add(at::Dimname dim, const at::Tensor & index, const at::Tensor & source, const at::Scalar & alpha) const {
+    4348              :     return at::_ops::index_add_dimname::call(const_cast<Tensor&>(*this), dim, index, source, alpha);
+    4349              : }
+    4350              : 
+    4351              : // aten::index_reduce_(Tensor(a!) self, int dim, Tensor index, Tensor source, str reduce, *, bool include_self=True) -> Tensor(a!)
+    4352              : inline at::Tensor & Tensor::index_reduce_(int64_t dim, const at::Tensor & index, const at::Tensor & source, c10::string_view reduce, bool include_self) const {
+    4353              :     return at::_ops::index_reduce_::call(const_cast<Tensor&>(*this), dim, index, source, reduce, include_self);
+    4354              : }
+    4355              : 
+    4356              : // aten::index_reduce(Tensor self, int dim, Tensor index, Tensor source, str reduce, *, bool include_self=True) -> Tensor
+    4357              : inline at::Tensor Tensor::index_reduce(int64_t dim, const at::Tensor & index, const at::Tensor & source, c10::string_view reduce, bool include_self) const {
+    4358              :     return at::_ops::index_reduce::call(const_cast<Tensor&>(*this), dim, index, source, reduce, include_self);
+    4359              : }
+    4360              : 
+    4361              : // aten::index_fill_.int_Scalar(Tensor(a!) self, int dim, Tensor index, Scalar value) -> Tensor(a!)
+    4362              : inline at::Tensor & Tensor::index_fill_(int64_t dim, const at::Tensor & index, const at::Scalar & value) const {
+    4363              :     return at::_ops::index_fill__int_Scalar::call(const_cast<Tensor&>(*this), dim, index, value);
+    4364              : }
+    4365              : 
+    4366              : // aten::index_fill.int_Scalar(Tensor self, int dim, Tensor index, Scalar value) -> Tensor
+    4367              : inline at::Tensor Tensor::index_fill(int64_t dim, const at::Tensor & index, const at::Scalar & value) const {
+    4368              :     return at::_ops::index_fill_int_Scalar::call(const_cast<Tensor&>(*this), dim, index, value);
+    4369              : }
+    4370              : 
+    4371              : // aten::index_fill_.int_Tensor(Tensor(a!) self, int dim, Tensor index, Tensor value) -> Tensor(a!)
+    4372              : inline at::Tensor & Tensor::index_fill_(int64_t dim, const at::Tensor & index, const at::Tensor & value) const {
+    4373              :     return at::_ops::index_fill__int_Tensor::call(const_cast<Tensor&>(*this), dim, index, value);
+    4374              : }
+    4375              : 
+    4376              : // aten::index_fill.int_Tensor(Tensor self, int dim, Tensor index, Tensor value) -> Tensor
+    4377              : inline at::Tensor Tensor::index_fill(int64_t dim, const at::Tensor & index, const at::Tensor & value) const {
+    4378              :     return at::_ops::index_fill_int_Tensor::call(const_cast<Tensor&>(*this), dim, index, value);
+    4379              : }
+    4380              : 
+    4381              : // aten::index_fill_.Dimname_Scalar(Tensor(a!) self, Dimname dim, Tensor index, Scalar value) -> Tensor(a!)
+    4382              : inline at::Tensor & Tensor::index_fill_(at::Dimname dim, const at::Tensor & index, const at::Scalar & value) const {
+    4383              :     return at::_ops::index_fill__Dimname_Scalar::call(const_cast<Tensor&>(*this), dim, index, value);
+    4384              : }
+    4385              : 
+    4386              : // aten::index_fill_.Dimname_Tensor(Tensor(a!) self, Dimname dim, Tensor index, Tensor value) -> Tensor(a!)
+    4387              : inline at::Tensor & Tensor::index_fill_(at::Dimname dim, const at::Tensor & index, const at::Tensor & value) const {
+    4388              :     return at::_ops::index_fill__Dimname_Tensor::call(const_cast<Tensor&>(*this), dim, index, value);
+    4389              : }
+    4390              : 
+    4391              : // aten::index_fill.Dimname_Scalar(Tensor self, Dimname dim, Tensor index, Scalar value) -> Tensor
+    4392              : inline at::Tensor Tensor::index_fill(at::Dimname dim, const at::Tensor & index, const at::Scalar & value) const {
+    4393              :     return at::_ops::index_fill_Dimname_Scalar::call(const_cast<Tensor&>(*this), dim, index, value);
+    4394              : }
+    4395              : 
+    4396              : // aten::index_fill.Dimname_Tensor(Tensor self, Dimname dim, Tensor index, Tensor value) -> Tensor
+    4397              : inline at::Tensor Tensor::index_fill(at::Dimname dim, const at::Tensor & index, const at::Tensor & value) const {
+    4398              :     return at::_ops::index_fill_Dimname_Tensor::call(const_cast<Tensor&>(*this), dim, index, value);
+    4399              : }
+    4400              : 
+    4401              : // aten::scatter.src(Tensor self, int dim, Tensor index, Tensor src) -> Tensor
+    4402              : inline at::Tensor Tensor::scatter(int64_t dim, const at::Tensor & index, const at::Tensor & src) const {
+    4403              :     return at::_ops::scatter_src::call(const_cast<Tensor&>(*this), dim, index, src);
+    4404              : }
+    4405              : 
+    4406              : // aten::scatter_.src(Tensor(a!) self, int dim, Tensor index, Tensor src) -> Tensor(a!)
+    4407              : inline at::Tensor & Tensor::scatter_(int64_t dim, const at::Tensor & index, const at::Tensor & src) const {
+    4408              :     return at::_ops::scatter__src::call(const_cast<Tensor&>(*this), dim, index, src);
+    4409              : }
+    4410              : 
+    4411              : // aten::scatter.value(Tensor self, int dim, Tensor index, Scalar value) -> Tensor
+    4412              : inline at::Tensor Tensor::scatter(int64_t dim, const at::Tensor & index, const at::Scalar & value) const {
+    4413              :     return at::_ops::scatter_value::call(const_cast<Tensor&>(*this), dim, index, value);
+    4414              : }
+    4415              : 
+    4416              : // aten::scatter_.value(Tensor(a!) self, int dim, Tensor index, Scalar value) -> Tensor(a!)
+    4417              : inline at::Tensor & Tensor::scatter_(int64_t dim, const at::Tensor & index, const at::Scalar & value) const {
+    4418              :     return at::_ops::scatter__value::call(const_cast<Tensor&>(*this), dim, index, value);
+    4419              : }
+    4420              : 
+    4421              : // aten::scatter.reduce(Tensor self, int dim, Tensor index, Tensor src, *, str reduce) -> Tensor
+    4422              : inline at::Tensor Tensor::scatter(int64_t dim, const at::Tensor & index, const at::Tensor & src, c10::string_view reduce) const {
+    4423              :     return at::_ops::scatter_reduce::call(const_cast<Tensor&>(*this), dim, index, src, reduce);
+    4424              : }
+    4425              : 
+    4426              : // aten::scatter_.reduce(Tensor(a!) self, int dim, Tensor index, Tensor src, *, str reduce) -> Tensor(a!)
+    4427              : inline at::Tensor & Tensor::scatter_(int64_t dim, const at::Tensor & index, const at::Tensor & src, c10::string_view reduce) const {
+    4428              :     return at::_ops::scatter__reduce::call(const_cast<Tensor&>(*this), dim, index, src, reduce);
+    4429              : }
+    4430              : 
+    4431              : // aten::scatter.value_reduce(Tensor self, int dim, Tensor index, Scalar value, *, str reduce) -> Tensor
+    4432              : inline at::Tensor Tensor::scatter(int64_t dim, const at::Tensor & index, const at::Scalar & value, c10::string_view reduce) const {
+    4433              :     return at::_ops::scatter_value_reduce::call(const_cast<Tensor&>(*this), dim, index, value, reduce);
+    4434              : }
+    4435              : 
+    4436              : // aten::scatter_.value_reduce(Tensor(a!) self, int dim, Tensor index, Scalar value, *, str reduce) -> Tensor(a!)
+    4437              : inline at::Tensor & Tensor::scatter_(int64_t dim, const at::Tensor & index, const at::Scalar & value, c10::string_view reduce) const {
+    4438              :     return at::_ops::scatter__value_reduce::call(const_cast<Tensor&>(*this), dim, index, value, reduce);
+    4439              : }
+    4440              : 
+    4441              : // aten::scatter.dimname_src(Tensor self, Dimname dim, Tensor index, Tensor src) -> Tensor
+    4442              : inline at::Tensor Tensor::scatter(at::Dimname dim, const at::Tensor & index, const at::Tensor & src) const {
+    4443              :     return at::_ops::scatter_dimname_src::call(const_cast<Tensor&>(*this), dim, index, src);
+    4444              : }
+    4445              : 
+    4446              : // aten::scatter.dimname_value(Tensor self, Dimname dim, Tensor index, Scalar value) -> Tensor
+    4447              : inline at::Tensor Tensor::scatter(at::Dimname dim, const at::Tensor & index, const at::Scalar & value) const {
+    4448              :     return at::_ops::scatter_dimname_value::call(const_cast<Tensor&>(*this), dim, index, value);
+    4449              : }
+    4450              : 
+    4451              : // aten::scatter_add(Tensor self, int dim, Tensor index, Tensor src) -> Tensor
+    4452              : inline at::Tensor Tensor::scatter_add(int64_t dim, const at::Tensor & index, const at::Tensor & src) const {
+    4453              :     return at::_ops::scatter_add::call(const_cast<Tensor&>(*this), dim, index, src);
+    4454              : }
+    4455              : 
+    4456              : // aten::scatter_add_(Tensor(a!) self, int dim, Tensor index, Tensor src) -> Tensor(a!)
+    4457              : inline at::Tensor & Tensor::scatter_add_(int64_t dim, const at::Tensor & index, const at::Tensor & src) const {
+    4458              :     return at::_ops::scatter_add_::call(const_cast<Tensor&>(*this), dim, index, src);
+    4459              : }
+    4460              : 
+    4461              : // aten::scatter_add.dimname(Tensor self, Dimname dim, Tensor index, Tensor src) -> Tensor
+    4462              : inline at::Tensor Tensor::scatter_add(at::Dimname dim, const at::Tensor & index, const at::Tensor & src) const {
+    4463              :     return at::_ops::scatter_add_dimname::call(const_cast<Tensor&>(*this), dim, index, src);
+    4464              : }
+    4465              : 
+    4466              : // aten::scatter_reduce.two(Tensor self, int dim, Tensor index, Tensor src, str reduce, *, bool include_self=True) -> Tensor
+    4467              : inline at::Tensor Tensor::scatter_reduce(int64_t dim, const at::Tensor & index, const at::Tensor & src, c10::string_view reduce, bool include_self) const {
+    4468              :     return at::_ops::scatter_reduce_two::call(const_cast<Tensor&>(*this), dim, index, src, reduce, include_self);
+    4469              : }
+    4470              : 
+    4471              : // aten::scatter_reduce_.two(Tensor(a!) self, int dim, Tensor index, Tensor src, str reduce, *, bool include_self=True) -> Tensor(a!)
+    4472              : inline at::Tensor & Tensor::scatter_reduce_(int64_t dim, const at::Tensor & index, const at::Tensor & src, c10::string_view reduce, bool include_self) const {
+    4473              :     return at::_ops::scatter_reduce__two::call(const_cast<Tensor&>(*this), dim, index, src, reduce, include_self);
+    4474              : }
+    4475              : 
+    4476              : // aten::eq_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4477              : inline at::Tensor & Tensor::eq_(const at::Scalar & other) const {
+    4478              :     return at::_ops::eq__Scalar::call(const_cast<Tensor&>(*this), other);
+    4479              : }
+    4480              : 
+    4481              : // aten::eq_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4482              : inline at::Tensor & Tensor::eq_(const at::Tensor & other) const {
+    4483              :     return at::_ops::eq__Tensor::call(const_cast<Tensor&>(*this), other);
+    4484              : }
+    4485              : 
+    4486              : // aten::bitwise_and.Scalar(Tensor self, Scalar other) -> Tensor
+    4487              : inline at::Tensor Tensor::bitwise_and(const at::Scalar & other) const {
+    4488              :     return at::_ops::bitwise_and_Scalar::call(const_cast<Tensor&>(*this), other);
+    4489              : }
+    4490              : 
+    4491              : // aten::bitwise_and.Tensor(Tensor self, Tensor other) -> Tensor
+    4492              : inline at::Tensor Tensor::bitwise_and(const at::Tensor & other) const {
+    4493              :     return at::_ops::bitwise_and_Tensor::call(const_cast<Tensor&>(*this), other);
+    4494              : }
+    4495              : 
+    4496              : // aten::bitwise_and_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4497              : inline at::Tensor & Tensor::bitwise_and_(const at::Scalar & other) const {
+    4498              :     return at::_ops::bitwise_and__Scalar::call(const_cast<Tensor&>(*this), other);
+    4499              : }
+    4500              : 
+    4501              : // aten::bitwise_and_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4502              : inline at::Tensor & Tensor::bitwise_and_(const at::Tensor & other) const {
+    4503              :     return at::_ops::bitwise_and__Tensor::call(const_cast<Tensor&>(*this), other);
+    4504              : }
+    4505              : 
+    4506              : // aten::__and__.Scalar(Tensor self, Scalar other) -> Tensor
+    4507              : inline at::Tensor Tensor::__and__(const at::Scalar & other) const {
+    4508              :     return at::_ops::__and___Scalar::call(const_cast<Tensor&>(*this), other);
+    4509              : }
+    4510              : 
+    4511              : // aten::__and__.Tensor(Tensor self, Tensor other) -> Tensor
+    4512              : inline at::Tensor Tensor::__and__(const at::Tensor & other) const {
+    4513              :     return at::_ops::__and___Tensor::call(const_cast<Tensor&>(*this), other);
+    4514              : }
+    4515              : 
+    4516              : // aten::__iand__.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4517              : inline at::Tensor & Tensor::__iand__(const at::Scalar & other) const {
+    4518              :     return at::_ops::__iand___Scalar::call(const_cast<Tensor&>(*this), other);
+    4519              : }
+    4520              : 
+    4521              : // aten::__iand__.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4522              : inline at::Tensor & Tensor::__iand__(const at::Tensor & other) const {
+    4523              :     return at::_ops::__iand___Tensor::call(const_cast<Tensor&>(*this), other);
+    4524              : }
+    4525              : 
+    4526              : // aten::bitwise_or.Scalar(Tensor self, Scalar other) -> Tensor
+    4527              : inline at::Tensor Tensor::bitwise_or(const at::Scalar & other) const {
+    4528              :     return at::_ops::bitwise_or_Scalar::call(const_cast<Tensor&>(*this), other);
+    4529              : }
+    4530              : 
+    4531              : // aten::bitwise_or.Tensor(Tensor self, Tensor other) -> Tensor
+    4532              : inline at::Tensor Tensor::bitwise_or(const at::Tensor & other) const {
+    4533              :     return at::_ops::bitwise_or_Tensor::call(const_cast<Tensor&>(*this), other);
+    4534              : }
+    4535              : 
+    4536              : // aten::bitwise_or_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4537              : inline at::Tensor & Tensor::bitwise_or_(const at::Scalar & other) const {
+    4538              :     return at::_ops::bitwise_or__Scalar::call(const_cast<Tensor&>(*this), other);
+    4539              : }
+    4540              : 
+    4541              : // aten::bitwise_or_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4542              : inline at::Tensor & Tensor::bitwise_or_(const at::Tensor & other) const {
+    4543              :     return at::_ops::bitwise_or__Tensor::call(const_cast<Tensor&>(*this), other);
+    4544              : }
+    4545              : 
+    4546              : // aten::__or__.Scalar(Tensor self, Scalar other) -> Tensor
+    4547              : inline at::Tensor Tensor::__or__(const at::Scalar & other) const {
+    4548              :     return at::_ops::__or___Scalar::call(const_cast<Tensor&>(*this), other);
+    4549              : }
+    4550              : 
+    4551              : // aten::__or__.Tensor(Tensor self, Tensor other) -> Tensor
+    4552              : inline at::Tensor Tensor::__or__(const at::Tensor & other) const {
+    4553              :     return at::_ops::__or___Tensor::call(const_cast<Tensor&>(*this), other);
+    4554              : }
+    4555              : 
+    4556              : // aten::__ior__.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4557              : inline at::Tensor & Tensor::__ior__(const at::Scalar & other) const {
+    4558              :     return at::_ops::__ior___Scalar::call(const_cast<Tensor&>(*this), other);
+    4559              : }
+    4560              : 
+    4561              : // aten::__ior__.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4562              : inline at::Tensor & Tensor::__ior__(const at::Tensor & other) const {
+    4563              :     return at::_ops::__ior___Tensor::call(const_cast<Tensor&>(*this), other);
+    4564              : }
+    4565              : 
+    4566              : // aten::bitwise_xor.Scalar(Tensor self, Scalar other) -> Tensor
+    4567              : inline at::Tensor Tensor::bitwise_xor(const at::Scalar & other) const {
+    4568              :     return at::_ops::bitwise_xor_Scalar::call(const_cast<Tensor&>(*this), other);
+    4569              : }
+    4570              : 
+    4571              : // aten::bitwise_xor.Tensor(Tensor self, Tensor other) -> Tensor
+    4572              : inline at::Tensor Tensor::bitwise_xor(const at::Tensor & other) const {
+    4573              :     return at::_ops::bitwise_xor_Tensor::call(const_cast<Tensor&>(*this), other);
+    4574              : }
+    4575              : 
+    4576              : // aten::bitwise_xor_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4577              : inline at::Tensor & Tensor::bitwise_xor_(const at::Scalar & other) const {
+    4578              :     return at::_ops::bitwise_xor__Scalar::call(const_cast<Tensor&>(*this), other);
+    4579              : }
+    4580              : 
+    4581              : // aten::bitwise_xor_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4582              : inline at::Tensor & Tensor::bitwise_xor_(const at::Tensor & other) const {
+    4583              :     return at::_ops::bitwise_xor__Tensor::call(const_cast<Tensor&>(*this), other);
+    4584              : }
+    4585              : 
+    4586              : // aten::__xor__.Scalar(Tensor self, Scalar other) -> Tensor
+    4587              : inline at::Tensor Tensor::__xor__(const at::Scalar & other) const {
+    4588              :     return at::_ops::__xor___Scalar::call(const_cast<Tensor&>(*this), other);
+    4589              : }
+    4590              : 
+    4591              : // aten::__xor__.Tensor(Tensor self, Tensor other) -> Tensor
+    4592              : inline at::Tensor Tensor::__xor__(const at::Tensor & other) const {
+    4593              :     return at::_ops::__xor___Tensor::call(const_cast<Tensor&>(*this), other);
+    4594              : }
+    4595              : 
+    4596              : // aten::__ixor__.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4597              : inline at::Tensor & Tensor::__ixor__(const at::Scalar & other) const {
+    4598              :     return at::_ops::__ixor___Scalar::call(const_cast<Tensor&>(*this), other);
+    4599              : }
+    4600              : 
+    4601              : // aten::__ixor__.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4602              : inline at::Tensor & Tensor::__ixor__(const at::Tensor & other) const {
+    4603              :     return at::_ops::__ixor___Tensor::call(const_cast<Tensor&>(*this), other);
+    4604              : }
+    4605              : 
+    4606              : // aten::__lshift__.Scalar(Tensor self, Scalar other) -> Tensor
+    4607              : inline at::Tensor Tensor::__lshift__(const at::Scalar & other) const {
+    4608              :     return at::_ops::__lshift___Scalar::call(const_cast<Tensor&>(*this), other);
+    4609              : }
+    4610              : 
+    4611              : // aten::__lshift__.Tensor(Tensor self, Tensor other) -> Tensor
+    4612              : inline at::Tensor Tensor::__lshift__(const at::Tensor & other) const {
+    4613              :     return at::_ops::__lshift___Tensor::call(const_cast<Tensor&>(*this), other);
+    4614              : }
+    4615              : 
+    4616              : // aten::__ilshift__.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4617              : inline at::Tensor & Tensor::__ilshift__(const at::Scalar & other) const {
+    4618              :     return at::_ops::__ilshift___Scalar::call(const_cast<Tensor&>(*this), other);
+    4619              : }
+    4620              : 
+    4621              : // aten::__ilshift__.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4622              : inline at::Tensor & Tensor::__ilshift__(const at::Tensor & other) const {
+    4623              :     return at::_ops::__ilshift___Tensor::call(const_cast<Tensor&>(*this), other);
+    4624              : }
+    4625              : 
+    4626              : // aten::bitwise_left_shift.Tensor(Tensor self, Tensor other) -> Tensor
+    4627              : inline at::Tensor Tensor::bitwise_left_shift(const at::Tensor & other) const {
+    4628              :     return at::_ops::bitwise_left_shift_Tensor::call(const_cast<Tensor&>(*this), other);
+    4629              : }
+    4630              : 
+    4631              : // aten::bitwise_left_shift_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4632              : inline at::Tensor & Tensor::bitwise_left_shift_(const at::Tensor & other) const {
+    4633              :     return at::_ops::bitwise_left_shift__Tensor::call(const_cast<Tensor&>(*this), other);
+    4634              : }
+    4635              : 
+    4636              : // aten::bitwise_left_shift.Tensor_Scalar(Tensor self, Scalar other) -> Tensor
+    4637              : inline at::Tensor Tensor::bitwise_left_shift(const at::Scalar & other) const {
+    4638              :     return at::_ops::bitwise_left_shift_Tensor_Scalar::call(const_cast<Tensor&>(*this), other);
+    4639              : }
+    4640              : 
+    4641              : // aten::bitwise_left_shift_.Tensor_Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4642              : inline at::Tensor & Tensor::bitwise_left_shift_(const at::Scalar & other) const {
+    4643              :     return at::_ops::bitwise_left_shift__Tensor_Scalar::call(const_cast<Tensor&>(*this), other);
+    4644              : }
+    4645              : 
+    4646              : // aten::__rshift__.Scalar(Tensor self, Scalar other) -> Tensor
+    4647              : inline at::Tensor Tensor::__rshift__(const at::Scalar & other) const {
+    4648              :     return at::_ops::__rshift___Scalar::call(const_cast<Tensor&>(*this), other);
+    4649              : }
+    4650              : 
+    4651              : // aten::__rshift__.Tensor(Tensor self, Tensor other) -> Tensor
+    4652              : inline at::Tensor Tensor::__rshift__(const at::Tensor & other) const {
+    4653              :     return at::_ops::__rshift___Tensor::call(const_cast<Tensor&>(*this), other);
+    4654              : }
+    4655              : 
+    4656              : // aten::__irshift__.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4657              : inline at::Tensor & Tensor::__irshift__(const at::Scalar & other) const {
+    4658              :     return at::_ops::__irshift___Scalar::call(const_cast<Tensor&>(*this), other);
+    4659              : }
+    4660              : 
+    4661              : // aten::__irshift__.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4662              : inline at::Tensor & Tensor::__irshift__(const at::Tensor & other) const {
+    4663              :     return at::_ops::__irshift___Tensor::call(const_cast<Tensor&>(*this), other);
+    4664              : }
+    4665              : 
+    4666              : // aten::bitwise_right_shift.Tensor(Tensor self, Tensor other) -> Tensor
+    4667              : inline at::Tensor Tensor::bitwise_right_shift(const at::Tensor & other) const {
+    4668              :     return at::_ops::bitwise_right_shift_Tensor::call(const_cast<Tensor&>(*this), other);
+    4669              : }
+    4670              : 
+    4671              : // aten::bitwise_right_shift_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4672              : inline at::Tensor & Tensor::bitwise_right_shift_(const at::Tensor & other) const {
+    4673              :     return at::_ops::bitwise_right_shift__Tensor::call(const_cast<Tensor&>(*this), other);
+    4674              : }
+    4675              : 
+    4676              : // aten::bitwise_right_shift.Tensor_Scalar(Tensor self, Scalar other) -> Tensor
+    4677              : inline at::Tensor Tensor::bitwise_right_shift(const at::Scalar & other) const {
+    4678              :     return at::_ops::bitwise_right_shift_Tensor_Scalar::call(const_cast<Tensor&>(*this), other);
+    4679              : }
+    4680              : 
+    4681              : // aten::bitwise_right_shift_.Tensor_Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4682              : inline at::Tensor & Tensor::bitwise_right_shift_(const at::Scalar & other) const {
+    4683              :     return at::_ops::bitwise_right_shift__Tensor_Scalar::call(const_cast<Tensor&>(*this), other);
+    4684              : }
+    4685              : 
+    4686              : // aten::tril_(Tensor(a!) self, int diagonal=0) -> Tensor(a!)
+    4687              : inline at::Tensor & Tensor::tril_(int64_t diagonal) const {
+    4688              :     return at::_ops::tril_::call(const_cast<Tensor&>(*this), diagonal);
+    4689              : }
+    4690              : 
+    4691              : // aten::triu_(Tensor(a!) self, int diagonal=0) -> Tensor(a!)
+    4692              : inline at::Tensor & Tensor::triu_(int64_t diagonal) const {
+    4693              :     return at::_ops::triu_::call(const_cast<Tensor&>(*this), diagonal);
+    4694              : }
+    4695              : 
+    4696              : // aten::digamma_(Tensor(a!) self) -> Tensor(a!)
+    4697              : inline at::Tensor & Tensor::digamma_() const {
+    4698              :     return at::_ops::digamma_::call(const_cast<Tensor&>(*this));
+    4699              : }
+    4700              : 
+    4701              : // aten::lerp_.Scalar(Tensor(a!) self, Tensor end, Scalar weight) -> Tensor(a!)
+    4702              : inline at::Tensor & Tensor::lerp_(const at::Tensor & end, const at::Scalar & weight) const {
+    4703              :     return at::_ops::lerp__Scalar::call(const_cast<Tensor&>(*this), end, weight);
+    4704              : }
+    4705              : 
+    4706              : // aten::lerp_.Tensor(Tensor(a!) self, Tensor end, Tensor weight) -> Tensor(a!)
+    4707              : inline at::Tensor & Tensor::lerp_(const at::Tensor & end, const at::Tensor & weight) const {
+    4708              :     return at::_ops::lerp__Tensor::call(const_cast<Tensor&>(*this), end, weight);
+    4709              : }
+    4710              : 
+    4711              : // aten::addbmm_(Tensor(a!) self, Tensor batch1, Tensor batch2, *, Scalar beta=1, Scalar alpha=1) -> Tensor(a!)
+    4712              : inline at::Tensor & Tensor::addbmm_(const at::Tensor & batch1, const at::Tensor & batch2, const at::Scalar & beta, const at::Scalar & alpha) const {
+    4713              :     return at::_ops::addbmm_::call(const_cast<Tensor&>(*this), batch1, batch2, beta, alpha);
+    4714              : }
+    4715              : 
+    4716              : // aten::addbmm(Tensor self, Tensor batch1, Tensor batch2, *, Scalar beta=1, Scalar alpha=1) -> Tensor
+    4717              : inline at::Tensor Tensor::addbmm(const at::Tensor & batch1, const at::Tensor & batch2, const at::Scalar & beta, const at::Scalar & alpha) const {
+    4718              :     return at::_ops::addbmm::call(const_cast<Tensor&>(*this), batch1, batch2, beta, alpha);
+    4719              : }
+    4720              : 
+    4721              : // aten::random_.from(Tensor(a!) self, int from, int? to, *, Generator? generator=None) -> Tensor(a!)
+    4722              : inline at::Tensor & Tensor::random_(int64_t from, c10::optional<int64_t> to, c10::optional<at::Generator> generator) const {
+    4723              :     return at::_ops::random__from::call(const_cast<Tensor&>(*this), from, to, generator);
+    4724              : }
+    4725              : 
+    4726              : // aten::random_.to(Tensor(a!) self, int to, *, Generator? generator=None) -> Tensor(a!)
+    4727              : inline at::Tensor & Tensor::random_(int64_t to, c10::optional<at::Generator> generator) const {
+    4728              :     return at::_ops::random__to::call(const_cast<Tensor&>(*this), to, generator);
+    4729              : }
+    4730              : 
+    4731              : // aten::random_(Tensor(a!) self, *, Generator? generator=None) -> Tensor(a!)
+    4732              : inline at::Tensor & Tensor::random_(c10::optional<at::Generator> generator) const {
+    4733              :     return at::_ops::random_::call(const_cast<Tensor&>(*this), generator);
+    4734              : }
+    4735              : 
+    4736              : // aten::uniform_(Tensor(a!) self, float from=0, float to=1, *, Generator? generator=None) -> Tensor(a!)
+    4737              : inline at::Tensor & Tensor::uniform_(double from, double to, c10::optional<at::Generator> generator) const {
+    4738              :     return at::_ops::uniform_::call(const_cast<Tensor&>(*this), from, to, generator);
+    4739              : }
+    4740              : 
+    4741              : // aten::cauchy_(Tensor(a!) self, float median=0, float sigma=1, *, Generator? generator=None) -> Tensor(a!)
+    4742              : inline at::Tensor & Tensor::cauchy_(double median, double sigma, c10::optional<at::Generator> generator) const {
+    4743              :     return at::_ops::cauchy_::call(const_cast<Tensor&>(*this), median, sigma, generator);
+    4744              : }
+    4745              : 
+    4746              : // aten::log_normal_(Tensor(a!) self, float mean=1, float std=2, *, Generator? generator=None) -> Tensor(a!)
+    4747              : inline at::Tensor & Tensor::log_normal_(double mean, double std, c10::optional<at::Generator> generator) const {
+    4748              :     return at::_ops::log_normal_::call(const_cast<Tensor&>(*this), mean, std, generator);
+    4749              : }
+    4750              : 
+    4751              : // aten::exponential_(Tensor(a!) self, float lambd=1, *, Generator? generator=None) -> Tensor(a!)
+    4752              : inline at::Tensor & Tensor::exponential_(double lambd, c10::optional<at::Generator> generator) const {
+    4753              :     return at::_ops::exponential_::call(const_cast<Tensor&>(*this), lambd, generator);
+    4754              : }
+    4755              : 
+    4756              : // aten::geometric_(Tensor(a!) self, float p, *, Generator? generator=None) -> Tensor(a!)
+    4757              : inline at::Tensor & Tensor::geometric_(double p, c10::optional<at::Generator> generator) const {
+    4758              :     return at::_ops::geometric_::call(const_cast<Tensor&>(*this), p, generator);
+    4759              : }
+    4760              : 
+    4761              : // aten::diag(Tensor self, int diagonal=0) -> Tensor
+    4762              : inline at::Tensor Tensor::diag(int64_t diagonal) const {
+    4763              :     return at::_ops::diag::call(const_cast<Tensor&>(*this), diagonal);
+    4764              : }
+    4765              : 
+    4766              : // aten::cross(Tensor self, Tensor other, int? dim=None) -> Tensor
+    4767              : inline at::Tensor Tensor::cross(const at::Tensor & other, c10::optional<int64_t> dim) const {
+    4768              :     return at::_ops::cross::call(const_cast<Tensor&>(*this), other, dim);
+    4769              : }
+    4770              : 
+    4771              : // aten::triu(Tensor self, int diagonal=0) -> Tensor
+    4772              : inline at::Tensor Tensor::triu(int64_t diagonal) const {
+    4773              :     return at::_ops::triu::call(const_cast<Tensor&>(*this), diagonal);
+    4774              : }
+    4775              : 
+    4776              : // aten::tril(Tensor self, int diagonal=0) -> Tensor
+    4777              : inline at::Tensor Tensor::tril(int64_t diagonal) const {
+    4778              :     return at::_ops::tril::call(const_cast<Tensor&>(*this), diagonal);
+    4779              : }
+    4780              : 
+    4781              : // aten::trace(Tensor self) -> Tensor
+    4782              : inline at::Tensor Tensor::trace() const {
+    4783              :     return at::_ops::trace::call(const_cast<Tensor&>(*this));
+    4784              : }
+    4785              : 
+    4786              : // aten::ne.Scalar(Tensor self, Scalar other) -> Tensor
+    4787              : inline at::Tensor Tensor::ne(const at::Scalar & other) const {
+    4788              :     return at::_ops::ne_Scalar::call(const_cast<Tensor&>(*this), other);
+    4789              : }
+    4790              : 
+    4791              : // aten::ne.Tensor(Tensor self, Tensor other) -> Tensor
+    4792          272 : inline at::Tensor Tensor::ne(const at::Tensor & other) const {
+    4793          272 :     return at::_ops::ne_Tensor::call(const_cast<Tensor&>(*this), other);
+    4794              : }
+    4795              : 
+    4796              : // aten::ne_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4797              : inline at::Tensor & Tensor::ne_(const at::Scalar & other) const {
+    4798              :     return at::_ops::ne__Scalar::call(const_cast<Tensor&>(*this), other);
+    4799              : }
+    4800              : 
+    4801              : // aten::ne_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4802              : inline at::Tensor & Tensor::ne_(const at::Tensor & other) const {
+    4803              :     return at::_ops::ne__Tensor::call(const_cast<Tensor&>(*this), other);
+    4804              : }
+    4805              : 
+    4806              : // aten::not_equal.Scalar(Tensor self, Scalar other) -> Tensor
+    4807              : inline at::Tensor Tensor::not_equal(const at::Scalar & other) const {
+    4808              :     return at::_ops::not_equal_Scalar::call(const_cast<Tensor&>(*this), other);
+    4809              : }
+    4810              : 
+    4811              : // aten::not_equal.Tensor(Tensor self, Tensor other) -> Tensor
+    4812              : inline at::Tensor Tensor::not_equal(const at::Tensor & other) const {
+    4813              :     return at::_ops::not_equal_Tensor::call(const_cast<Tensor&>(*this), other);
+    4814              : }
+    4815              : 
+    4816              : // aten::not_equal_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4817              : inline at::Tensor & Tensor::not_equal_(const at::Scalar & other) const {
+    4818              :     return at::_ops::not_equal__Scalar::call(const_cast<Tensor&>(*this), other);
+    4819              : }
+    4820              : 
+    4821              : // aten::not_equal_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4822              : inline at::Tensor & Tensor::not_equal_(const at::Tensor & other) const {
+    4823              :     return at::_ops::not_equal__Tensor::call(const_cast<Tensor&>(*this), other);
+    4824              : }
+    4825              : 
+    4826              : // aten::eq.Scalar(Tensor self, Scalar other) -> Tensor
+    4827         9012 : inline at::Tensor Tensor::eq(const at::Scalar & other) const {
+    4828         9012 :     return at::_ops::eq_Scalar::call(const_cast<Tensor&>(*this), other);
+    4829              : }
+    4830              : 
+    4831              : // aten::eq.Tensor(Tensor self, Tensor other) -> Tensor
+    4832          472 : inline at::Tensor Tensor::eq(const at::Tensor & other) const {
+    4833          472 :     return at::_ops::eq_Tensor::call(const_cast<Tensor&>(*this), other);
+    4834              : }
+    4835              : 
+    4836              : // aten::ge.Scalar(Tensor self, Scalar other) -> Tensor
+    4837              : inline at::Tensor Tensor::ge(const at::Scalar & other) const {
+    4838              :     return at::_ops::ge_Scalar::call(const_cast<Tensor&>(*this), other);
+    4839              : }
+    4840              : 
+    4841              : // aten::ge.Tensor(Tensor self, Tensor other) -> Tensor
+    4842              : inline at::Tensor Tensor::ge(const at::Tensor & other) const {
+    4843              :     return at::_ops::ge_Tensor::call(const_cast<Tensor&>(*this), other);
+    4844              : }
+    4845              : 
+    4846              : // aten::ge_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4847              : inline at::Tensor & Tensor::ge_(const at::Scalar & other) const {
+    4848              :     return at::_ops::ge__Scalar::call(const_cast<Tensor&>(*this), other);
+    4849              : }
+    4850              : 
+    4851              : // aten::ge_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4852              : inline at::Tensor & Tensor::ge_(const at::Tensor & other) const {
+    4853              :     return at::_ops::ge__Tensor::call(const_cast<Tensor&>(*this), other);
+    4854              : }
+    4855              : 
+    4856              : // aten::greater_equal.Scalar(Tensor self, Scalar other) -> Tensor
+    4857              : inline at::Tensor Tensor::greater_equal(const at::Scalar & other) const {
+    4858              :     return at::_ops::greater_equal_Scalar::call(const_cast<Tensor&>(*this), other);
+    4859              : }
+    4860              : 
+    4861              : // aten::greater_equal.Tensor(Tensor self, Tensor other) -> Tensor
+    4862              : inline at::Tensor Tensor::greater_equal(const at::Tensor & other) const {
+    4863              :     return at::_ops::greater_equal_Tensor::call(const_cast<Tensor&>(*this), other);
+    4864              : }
+    4865              : 
+    4866              : // aten::greater_equal_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4867              : inline at::Tensor & Tensor::greater_equal_(const at::Scalar & other) const {
+    4868              :     return at::_ops::greater_equal__Scalar::call(const_cast<Tensor&>(*this), other);
+    4869              : }
+    4870              : 
+    4871              : // aten::greater_equal_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4872              : inline at::Tensor & Tensor::greater_equal_(const at::Tensor & other) const {
+    4873              :     return at::_ops::greater_equal__Tensor::call(const_cast<Tensor&>(*this), other);
+    4874              : }
+    4875              : 
+    4876              : // aten::le.Scalar(Tensor self, Scalar other) -> Tensor
+    4877              : inline at::Tensor Tensor::le(const at::Scalar & other) const {
+    4878              :     return at::_ops::le_Scalar::call(const_cast<Tensor&>(*this), other);
+    4879              : }
+    4880              : 
+    4881              : // aten::le.Tensor(Tensor self, Tensor other) -> Tensor
+    4882              : inline at::Tensor Tensor::le(const at::Tensor & other) const {
+    4883              :     return at::_ops::le_Tensor::call(const_cast<Tensor&>(*this), other);
+    4884              : }
+    4885              : 
+    4886              : // aten::le_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4887              : inline at::Tensor & Tensor::le_(const at::Scalar & other) const {
+    4888              :     return at::_ops::le__Scalar::call(const_cast<Tensor&>(*this), other);
+    4889              : }
+    4890              : 
+    4891              : // aten::le_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4892              : inline at::Tensor & Tensor::le_(const at::Tensor & other) const {
+    4893              :     return at::_ops::le__Tensor::call(const_cast<Tensor&>(*this), other);
+    4894              : }
+    4895              : 
+    4896              : // aten::less_equal.Scalar(Tensor self, Scalar other) -> Tensor
+    4897              : inline at::Tensor Tensor::less_equal(const at::Scalar & other) const {
+    4898              :     return at::_ops::less_equal_Scalar::call(const_cast<Tensor&>(*this), other);
+    4899              : }
+    4900              : 
+    4901              : // aten::less_equal.Tensor(Tensor self, Tensor other) -> Tensor
+    4902              : inline at::Tensor Tensor::less_equal(const at::Tensor & other) const {
+    4903              :     return at::_ops::less_equal_Tensor::call(const_cast<Tensor&>(*this), other);
+    4904              : }
+    4905              : 
+    4906              : // aten::less_equal_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4907              : inline at::Tensor & Tensor::less_equal_(const at::Scalar & other) const {
+    4908              :     return at::_ops::less_equal__Scalar::call(const_cast<Tensor&>(*this), other);
+    4909              : }
+    4910              : 
+    4911              : // aten::less_equal_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4912              : inline at::Tensor & Tensor::less_equal_(const at::Tensor & other) const {
+    4913              :     return at::_ops::less_equal__Tensor::call(const_cast<Tensor&>(*this), other);
+    4914              : }
+    4915              : 
+    4916              : // aten::gt.Scalar(Tensor self, Scalar other) -> Tensor
+    4917          330 : inline at::Tensor Tensor::gt(const at::Scalar & other) const {
+    4918          330 :     return at::_ops::gt_Scalar::call(const_cast<Tensor&>(*this), other);
+    4919              : }
+    4920              : 
+    4921              : // aten::gt.Tensor(Tensor self, Tensor other) -> Tensor
+    4922              : inline at::Tensor Tensor::gt(const at::Tensor & other) const {
+    4923              :     return at::_ops::gt_Tensor::call(const_cast<Tensor&>(*this), other);
+    4924              : }
+    4925              : 
+    4926              : // aten::gt_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4927              : inline at::Tensor & Tensor::gt_(const at::Scalar & other) const {
+    4928              :     return at::_ops::gt__Scalar::call(const_cast<Tensor&>(*this), other);
+    4929              : }
+    4930              : 
+    4931              : // aten::gt_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4932              : inline at::Tensor & Tensor::gt_(const at::Tensor & other) const {
+    4933              :     return at::_ops::gt__Tensor::call(const_cast<Tensor&>(*this), other);
+    4934              : }
+    4935              : 
+    4936              : // aten::greater.Scalar(Tensor self, Scalar other) -> Tensor
+    4937              : inline at::Tensor Tensor::greater(const at::Scalar & other) const {
+    4938              :     return at::_ops::greater_Scalar::call(const_cast<Tensor&>(*this), other);
+    4939              : }
+    4940              : 
+    4941              : // aten::greater.Tensor(Tensor self, Tensor other) -> Tensor
+    4942              : inline at::Tensor Tensor::greater(const at::Tensor & other) const {
+    4943              :     return at::_ops::greater_Tensor::call(const_cast<Tensor&>(*this), other);
+    4944              : }
+    4945              : 
+    4946              : // aten::greater_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4947              : inline at::Tensor & Tensor::greater_(const at::Scalar & other) const {
+    4948              :     return at::_ops::greater__Scalar::call(const_cast<Tensor&>(*this), other);
+    4949              : }
+    4950              : 
+    4951              : // aten::greater_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4952              : inline at::Tensor & Tensor::greater_(const at::Tensor & other) const {
+    4953              :     return at::_ops::greater__Tensor::call(const_cast<Tensor&>(*this), other);
+    4954              : }
+    4955              : 
+    4956              : // aten::lt.Scalar(Tensor self, Scalar other) -> Tensor
+    4957              : inline at::Tensor Tensor::lt(const at::Scalar & other) const {
+    4958              :     return at::_ops::lt_Scalar::call(const_cast<Tensor&>(*this), other);
+    4959              : }
+    4960              : 
+    4961              : // aten::lt.Tensor(Tensor self, Tensor other) -> Tensor
+    4962              : inline at::Tensor Tensor::lt(const at::Tensor & other) const {
+    4963              :     return at::_ops::lt_Tensor::call(const_cast<Tensor&>(*this), other);
+    4964              : }
+    4965              : 
+    4966              : // aten::lt_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4967              : inline at::Tensor & Tensor::lt_(const at::Scalar & other) const {
+    4968              :     return at::_ops::lt__Scalar::call(const_cast<Tensor&>(*this), other);
+    4969              : }
+    4970              : 
+    4971              : // aten::lt_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4972              : inline at::Tensor & Tensor::lt_(const at::Tensor & other) const {
+    4973              :     return at::_ops::lt__Tensor::call(const_cast<Tensor&>(*this), other);
+    4974              : }
+    4975              : 
+    4976              : // aten::less.Scalar(Tensor self, Scalar other) -> Tensor
+    4977              : inline at::Tensor Tensor::less(const at::Scalar & other) const {
+    4978              :     return at::_ops::less_Scalar::call(const_cast<Tensor&>(*this), other);
+    4979              : }
+    4980              : 
+    4981              : // aten::less.Tensor(Tensor self, Tensor other) -> Tensor
+    4982              : inline at::Tensor Tensor::less(const at::Tensor & other) const {
+    4983              :     return at::_ops::less_Tensor::call(const_cast<Tensor&>(*this), other);
+    4984              : }
+    4985              : 
+    4986              : // aten::less_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    4987              : inline at::Tensor & Tensor::less_(const at::Scalar & other) const {
+    4988              :     return at::_ops::less__Scalar::call(const_cast<Tensor&>(*this), other);
+    4989              : }
+    4990              : 
+    4991              : // aten::less_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    4992              : inline at::Tensor & Tensor::less_(const at::Tensor & other) const {
+    4993              :     return at::_ops::less__Tensor::call(const_cast<Tensor&>(*this), other);
+    4994              : }
+    4995              : 
+    4996              : // aten::take(Tensor self, Tensor index) -> Tensor
+    4997              : inline at::Tensor Tensor::take(const at::Tensor & index) const {
+    4998              :     return at::_ops::take::call(const_cast<Tensor&>(*this), index);
+    4999              : }
+    5000              : 
+    5001              : // aten::take_along_dim(Tensor self, Tensor indices, int? dim=None) -> Tensor
+    5002              : inline at::Tensor Tensor::take_along_dim(const at::Tensor & indices, c10::optional<int64_t> dim) const {
+    5003              :     return at::_ops::take_along_dim::call(const_cast<Tensor&>(*this), indices, dim);
+    5004              : }
+    5005              : 
+    5006              : // aten::index_select(Tensor self, int dim, Tensor index) -> Tensor
+    5007              : inline at::Tensor Tensor::index_select(int64_t dim, const at::Tensor & index) const {
+    5008              :     return at::_ops::index_select::call(const_cast<Tensor&>(*this), dim, index);
+    5009              : }
+    5010              : 
+    5011              : // aten::index_select.dimname(Tensor self, Dimname dim, Tensor index) -> Tensor
+    5012              : inline at::Tensor Tensor::index_select(at::Dimname dim, const at::Tensor & index) const {
+    5013              :     return at::_ops::index_select_dimname::call(const_cast<Tensor&>(*this), dim, index);
+    5014              : }
+    5015              : 
+    5016              : // aten::masked_select(Tensor self, Tensor mask) -> Tensor
+    5017              : inline at::Tensor Tensor::masked_select(const at::Tensor & mask) const {
+    5018              :     return at::_ops::masked_select::call(const_cast<Tensor&>(*this), mask);
+    5019              : }
+    5020              : 
+    5021              : // aten::nonzero(Tensor self) -> Tensor
+    5022          330 : inline at::Tensor Tensor::nonzero() const {
+    5023          330 :     return at::_ops::nonzero::call(const_cast<Tensor&>(*this));
+    5024              : }
+    5025              : 
+    5026              : // aten::nonzero_static(Tensor self, *, int size, int fill_value=-1) -> Tensor
+    5027              : inline at::Tensor Tensor::nonzero_static(int64_t size, int64_t fill_value) const {
+    5028              :     return at::_ops::nonzero_static::call(const_cast<Tensor&>(*this), size, fill_value);
+    5029              : }
+    5030              : 
+    5031              : // aten::nonzero_numpy(Tensor self) -> Tensor[]
+    5032              : inline ::std::vector<at::Tensor> Tensor::nonzero_numpy() const {
+    5033              :     return at::_ops::nonzero_numpy::call(const_cast<Tensor&>(*this));
+    5034              : }
+    5035              : 
+    5036              : // aten::argwhere(Tensor self) -> Tensor
+    5037              : inline at::Tensor Tensor::argwhere() const {
+    5038              :     return at::_ops::argwhere::call(const_cast<Tensor&>(*this));
+    5039              : }
+    5040              : 
+    5041              : // aten::gather(Tensor self, int dim, Tensor index, *, bool sparse_grad=False) -> Tensor
+    5042              : inline at::Tensor Tensor::gather(int64_t dim, const at::Tensor & index, bool sparse_grad) const {
+    5043              :     return at::_ops::gather::call(const_cast<Tensor&>(*this), dim, index, sparse_grad);
+    5044              : }
+    5045              : 
+    5046              : // aten::gather.dimname(Tensor self, Dimname dim, Tensor index, *, bool sparse_grad=False) -> Tensor
+    5047              : inline at::Tensor Tensor::gather(at::Dimname dim, const at::Tensor & index, bool sparse_grad) const {
+    5048              :     return at::_ops::gather_dimname::call(const_cast<Tensor&>(*this), dim, index, sparse_grad);
+    5049              : }
+    5050              : 
+    5051              : // aten::addcmul(Tensor self, Tensor tensor1, Tensor tensor2, *, Scalar value=1) -> Tensor
+    5052              : inline at::Tensor Tensor::addcmul(const at::Tensor & tensor1, const at::Tensor & tensor2, const at::Scalar & value) const {
+    5053              :     return at::_ops::addcmul::call(const_cast<Tensor&>(*this), tensor1, tensor2, value);
+    5054              : }
+    5055              : 
+    5056              : // aten::addcmul_(Tensor(a!) self, Tensor tensor1, Tensor tensor2, *, Scalar value=1) -> Tensor(a!)
+    5057              : inline at::Tensor & Tensor::addcmul_(const at::Tensor & tensor1, const at::Tensor & tensor2, const at::Scalar & value) const {
+    5058              :     return at::_ops::addcmul_::call(const_cast<Tensor&>(*this), tensor1, tensor2, value);
+    5059              : }
+    5060              : 
+    5061              : // aten::addcdiv(Tensor self, Tensor tensor1, Tensor tensor2, *, Scalar value=1) -> Tensor
+    5062              : inline at::Tensor Tensor::addcdiv(const at::Tensor & tensor1, const at::Tensor & tensor2, const at::Scalar & value) const {
+    5063              :     return at::_ops::addcdiv::call(const_cast<Tensor&>(*this), tensor1, tensor2, value);
+    5064              : }
+    5065              : 
+    5066              : // aten::addcdiv_(Tensor(a!) self, Tensor tensor1, Tensor tensor2, *, Scalar value=1) -> Tensor(a!)
+    5067              : inline at::Tensor & Tensor::addcdiv_(const at::Tensor & tensor1, const at::Tensor & tensor2, const at::Scalar & value) const {
+    5068              :     return at::_ops::addcdiv_::call(const_cast<Tensor&>(*this), tensor1, tensor2, value);
+    5069              : }
+    5070              : 
+    5071              : // aten::triangular_solve(Tensor self, Tensor A, bool upper=True, bool transpose=False, bool unitriangular=False) -> (Tensor solution, Tensor cloned_coefficient)
+    5072              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::triangular_solve(const at::Tensor & A, bool upper, bool transpose, bool unitriangular) const {
+    5073              :     return at::_ops::triangular_solve::call(const_cast<Tensor&>(*this), A, upper, transpose, unitriangular);
+    5074              : }
+    5075              : 
+    5076              : // aten::svd(Tensor self, bool some=True, bool compute_uv=True) -> (Tensor U, Tensor S, Tensor V)
+    5077              : inline ::std::tuple<at::Tensor,at::Tensor,at::Tensor> Tensor::svd(bool some, bool compute_uv) const {
+    5078              :     return at::_ops::svd::call(const_cast<Tensor&>(*this), some, compute_uv);
+    5079              : }
+    5080              : 
+    5081              : // aten::swapaxes(Tensor(a) self, int axis0, int axis1) -> Tensor(a)
+    5082              : inline at::Tensor Tensor::swapaxes(int64_t axis0, int64_t axis1) const {
+    5083              :     return at::_ops::swapaxes::call(const_cast<Tensor&>(*this), axis0, axis1);
+    5084              : }
+    5085              : 
+    5086              : // aten::swapaxes_(Tensor(a!) self, int axis0, int axis1) -> Tensor(a!)
+    5087              : inline at::Tensor & Tensor::swapaxes_(int64_t axis0, int64_t axis1) const {
+    5088              :     return at::_ops::swapaxes_::call(const_cast<Tensor&>(*this), axis0, axis1);
+    5089              : }
+    5090              : 
+    5091              : // aten::swapdims(Tensor(a) self, int dim0, int dim1) -> Tensor(a)
+    5092              : inline at::Tensor Tensor::swapdims(int64_t dim0, int64_t dim1) const {
+    5093              :     return at::_ops::swapdims::call(const_cast<Tensor&>(*this), dim0, dim1);
+    5094              : }
+    5095              : 
+    5096              : // aten::swapdims_(Tensor(a!) self, int dim0, int dim1) -> Tensor(a!)
+    5097              : inline at::Tensor & Tensor::swapdims_(int64_t dim0, int64_t dim1) const {
+    5098              :     return at::_ops::swapdims_::call(const_cast<Tensor&>(*this), dim0, dim1);
+    5099              : }
+    5100              : 
+    5101              : // aten::cholesky(Tensor self, bool upper=False) -> Tensor
+    5102              : inline at::Tensor Tensor::cholesky(bool upper) const {
+    5103              :     return at::_ops::cholesky::call(const_cast<Tensor&>(*this), upper);
+    5104              : }
+    5105              : 
+    5106              : // aten::cholesky_solve(Tensor self, Tensor input2, bool upper=False) -> Tensor
+    5107              : inline at::Tensor Tensor::cholesky_solve(const at::Tensor & input2, bool upper) const {
+    5108              :     return at::_ops::cholesky_solve::call(const_cast<Tensor&>(*this), input2, upper);
+    5109              : }
+    5110              : 
+    5111              : // aten::cholesky_inverse(Tensor self, bool upper=False) -> Tensor
+    5112              : inline at::Tensor Tensor::cholesky_inverse(bool upper) const {
+    5113              :     return at::_ops::cholesky_inverse::call(const_cast<Tensor&>(*this), upper);
+    5114              : }
+    5115              : 
+    5116              : // aten::qr(Tensor self, bool some=True) -> (Tensor Q, Tensor R)
+    5117              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::qr(bool some) const {
+    5118              :     return at::_ops::qr::call(const_cast<Tensor&>(*this), some);
+    5119              : }
+    5120              : 
+    5121              : // aten::geqrf(Tensor self) -> (Tensor a, Tensor tau)
+    5122              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::geqrf() const {
+    5123              :     return at::_ops::geqrf::call(const_cast<Tensor&>(*this));
+    5124              : }
+    5125              : 
+    5126              : // aten::orgqr(Tensor self, Tensor input2) -> Tensor
+    5127              : inline at::Tensor Tensor::orgqr(const at::Tensor & input2) const {
+    5128              :     return at::_ops::orgqr::call(const_cast<Tensor&>(*this), input2);
+    5129              : }
+    5130              : 
+    5131              : // aten::ormqr(Tensor self, Tensor input2, Tensor input3, bool left=True, bool transpose=False) -> Tensor
+    5132              : inline at::Tensor Tensor::ormqr(const at::Tensor & input2, const at::Tensor & input3, bool left, bool transpose) const {
+    5133              :     return at::_ops::ormqr::call(const_cast<Tensor&>(*this), input2, input3, left, transpose);
+    5134              : }
+    5135              : 
+    5136              : // aten::lu_solve(Tensor self, Tensor LU_data, Tensor LU_pivots) -> Tensor
+    5137              : inline at::Tensor Tensor::lu_solve(const at::Tensor & LU_data, const at::Tensor & LU_pivots) const {
+    5138              :     return at::_ops::lu_solve::call(const_cast<Tensor&>(*this), LU_data, LU_pivots);
+    5139              : }
+    5140              : 
+    5141              : // aten::multinomial(Tensor self, int num_samples, bool replacement=False, *, Generator? generator=None) -> Tensor
+    5142              : inline at::Tensor Tensor::multinomial(int64_t num_samples, bool replacement, c10::optional<at::Generator> generator) const {
+    5143              :     return at::_ops::multinomial::call(const_cast<Tensor&>(*this), num_samples, replacement, generator);
+    5144              : }
+    5145              : 
+    5146              : // aten::lgamma_(Tensor(a!) self) -> Tensor(a!)
+    5147              : inline at::Tensor & Tensor::lgamma_() const {
+    5148              :     return at::_ops::lgamma_::call(const_cast<Tensor&>(*this));
+    5149              : }
+    5150              : 
+    5151              : // aten::lgamma(Tensor self) -> Tensor
+    5152              : inline at::Tensor Tensor::lgamma() const {
+    5153              :     return at::_ops::lgamma::call(const_cast<Tensor&>(*this));
+    5154              : }
+    5155              : 
+    5156              : // aten::digamma(Tensor self) -> Tensor
+    5157              : inline at::Tensor Tensor::digamma() const {
+    5158              :     return at::_ops::digamma::call(const_cast<Tensor&>(*this));
+    5159              : }
+    5160              : 
+    5161              : // aten::polygamma(int n, Tensor self) -> Tensor
+    5162              : inline at::Tensor Tensor::polygamma(int64_t n) const {
+    5163              :     return at::_ops::polygamma::call(n, const_cast<Tensor&>(*this));
+    5164              : }
+    5165              : 
+    5166              : // aten::polygamma_(Tensor(a!) self, int n) -> Tensor(a!)
+    5167              : inline at::Tensor & Tensor::polygamma_(int64_t n) const {
+    5168              :     return at::_ops::polygamma_::call(const_cast<Tensor&>(*this), n);
+    5169              : }
+    5170              : 
+    5171              : // aten::erfinv(Tensor self) -> Tensor
+    5172              : inline at::Tensor Tensor::erfinv() const {
+    5173              :     return at::_ops::erfinv::call(const_cast<Tensor&>(*this));
+    5174              : }
+    5175              : 
+    5176              : // aten::erfinv_(Tensor(a!) self) -> Tensor(a!)
+    5177              : inline at::Tensor & Tensor::erfinv_() const {
+    5178              :     return at::_ops::erfinv_::call(const_cast<Tensor&>(*this));
+    5179              : }
+    5180              : 
+    5181              : // aten::i0(Tensor self) -> Tensor
+    5182              : inline at::Tensor Tensor::i0() const {
+    5183              :     return at::_ops::i0::call(const_cast<Tensor&>(*this));
+    5184              : }
+    5185              : 
+    5186              : // aten::i0_(Tensor(a!) self) -> Tensor(a!)
+    5187              : inline at::Tensor & Tensor::i0_() const {
+    5188              :     return at::_ops::i0_::call(const_cast<Tensor&>(*this));
+    5189              : }
+    5190              : 
+    5191              : // aten::sign(Tensor self) -> Tensor
+    5192              : inline at::Tensor Tensor::sign() const {
+    5193              :     return at::_ops::sign::call(const_cast<Tensor&>(*this));
+    5194              : }
+    5195              : 
+    5196              : // aten::sign_(Tensor(a!) self) -> Tensor(a!)
+    5197              : inline at::Tensor & Tensor::sign_() const {
+    5198              :     return at::_ops::sign_::call(const_cast<Tensor&>(*this));
+    5199              : }
+    5200              : 
+    5201              : // aten::signbit(Tensor self) -> Tensor
+    5202              : inline at::Tensor Tensor::signbit() const {
+    5203              :     return at::_ops::signbit::call(const_cast<Tensor&>(*this));
+    5204              : }
+    5205              : 
+    5206              : // aten::dist(Tensor self, Tensor other, Scalar p=2) -> Tensor
+    5207              : inline at::Tensor Tensor::dist(const at::Tensor & other, const at::Scalar & p) const {
+    5208              :     return at::_ops::dist::call(const_cast<Tensor&>(*this), other, p);
+    5209              : }
+    5210              : 
+    5211              : // aten::atan2_(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    5212              : inline at::Tensor & Tensor::atan2_(const at::Tensor & other) const {
+    5213              :     return at::_ops::atan2_::call(const_cast<Tensor&>(*this), other);
+    5214              : }
+    5215              : 
+    5216              : // aten::atan2(Tensor self, Tensor other) -> Tensor
+    5217              : inline at::Tensor Tensor::atan2(const at::Tensor & other) const {
+    5218              :     return at::_ops::atan2::call(const_cast<Tensor&>(*this), other);
+    5219              : }
+    5220              : 
+    5221              : // aten::arctan2(Tensor self, Tensor other) -> Tensor
+    5222              : inline at::Tensor Tensor::arctan2(const at::Tensor & other) const {
+    5223              :     return at::_ops::arctan2::call(const_cast<Tensor&>(*this), other);
+    5224              : }
+    5225              : 
+    5226              : // aten::arctan2_(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    5227              : inline at::Tensor & Tensor::arctan2_(const at::Tensor & other) const {
+    5228              :     return at::_ops::arctan2_::call(const_cast<Tensor&>(*this), other);
+    5229              : }
+    5230              : 
+    5231              : // aten::lerp.Scalar(Tensor self, Tensor end, Scalar weight) -> Tensor
+    5232              : inline at::Tensor Tensor::lerp(const at::Tensor & end, const at::Scalar & weight) const {
+    5233              :     return at::_ops::lerp_Scalar::call(const_cast<Tensor&>(*this), end, weight);
+    5234              : }
+    5235              : 
+    5236              : // aten::lerp.Tensor(Tensor self, Tensor end, Tensor weight) -> Tensor
+    5237              : inline at::Tensor Tensor::lerp(const at::Tensor & end, const at::Tensor & weight) const {
+    5238              :     return at::_ops::lerp_Tensor::call(const_cast<Tensor&>(*this), end, weight);
+    5239              : }
+    5240              : 
+    5241              : // aten::histc(Tensor self, int bins=100, Scalar min=0, Scalar max=0) -> Tensor
+    5242              : inline at::Tensor Tensor::histc(int64_t bins, const at::Scalar & min, const at::Scalar & max) const {
+    5243              :     return at::_ops::histc::call(const_cast<Tensor&>(*this), bins, min, max);
+    5244              : }
+    5245              : 
+    5246              : // aten::histogram.bins_tensor(Tensor self, Tensor bins, *, Tensor? weight=None, bool density=False) -> (Tensor hist, Tensor bin_edges)
+    5247              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::histogram(const at::Tensor & bins, const c10::optional<at::Tensor> & weight, bool density) const {
+    5248              :     return at::_ops::histogram_bins_tensor::call(const_cast<Tensor&>(*this), bins, weight, density);
+    5249              : }
+    5250              : 
+    5251              : // aten::histogram.bin_ct(Tensor self, int bins=100, *, float[]? range=None, Tensor? weight=None, bool density=False) -> (Tensor hist, Tensor bin_edges)
+    5252              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::histogram(int64_t bins, c10::optional<at::ArrayRef<double>> range, const c10::optional<at::Tensor> & weight, bool density) const {
+    5253              :     return at::_ops::histogram_bin_ct::call(const_cast<Tensor&>(*this), bins, range, weight, density);
+    5254              : }
+    5255              : 
+    5256              : // aten::fmod.Scalar(Tensor self, Scalar other) -> Tensor
+    5257              : inline at::Tensor Tensor::fmod(const at::Scalar & other) const {
+    5258              :     return at::_ops::fmod_Scalar::call(const_cast<Tensor&>(*this), other);
+    5259              : }
+    5260              : 
+    5261              : // aten::fmod_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    5262              : inline at::Tensor & Tensor::fmod_(const at::Scalar & other) const {
+    5263              :     return at::_ops::fmod__Scalar::call(const_cast<Tensor&>(*this), other);
+    5264              : }
+    5265              : 
+    5266              : // aten::fmod.Tensor(Tensor self, Tensor other) -> Tensor
+    5267              : inline at::Tensor Tensor::fmod(const at::Tensor & other) const {
+    5268              :     return at::_ops::fmod_Tensor::call(const_cast<Tensor&>(*this), other);
+    5269              : }
+    5270              : 
+    5271              : // aten::fmod_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    5272              : inline at::Tensor & Tensor::fmod_(const at::Tensor & other) const {
+    5273              :     return at::_ops::fmod__Tensor::call(const_cast<Tensor&>(*this), other);
+    5274              : }
+    5275              : 
+    5276              : // aten::hypot(Tensor self, Tensor other) -> Tensor
+    5277              : inline at::Tensor Tensor::hypot(const at::Tensor & other) const {
+    5278              :     return at::_ops::hypot::call(const_cast<Tensor&>(*this), other);
+    5279              : }
+    5280              : 
+    5281              : // aten::hypot_(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    5282              : inline at::Tensor & Tensor::hypot_(const at::Tensor & other) const {
+    5283              :     return at::_ops::hypot_::call(const_cast<Tensor&>(*this), other);
+    5284              : }
+    5285              : 
+    5286              : // aten::igamma(Tensor self, Tensor other) -> Tensor
+    5287              : inline at::Tensor Tensor::igamma(const at::Tensor & other) const {
+    5288              :     return at::_ops::igamma::call(const_cast<Tensor&>(*this), other);
+    5289              : }
+    5290              : 
+    5291              : // aten::igamma_(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    5292              : inline at::Tensor & Tensor::igamma_(const at::Tensor & other) const {
+    5293              :     return at::_ops::igamma_::call(const_cast<Tensor&>(*this), other);
+    5294              : }
+    5295              : 
+    5296              : // aten::igammac(Tensor self, Tensor other) -> Tensor
+    5297              : inline at::Tensor Tensor::igammac(const at::Tensor & other) const {
+    5298              :     return at::_ops::igammac::call(const_cast<Tensor&>(*this), other);
+    5299              : }
+    5300              : 
+    5301              : // aten::igammac_(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    5302              : inline at::Tensor & Tensor::igammac_(const at::Tensor & other) const {
+    5303              :     return at::_ops::igammac_::call(const_cast<Tensor&>(*this), other);
+    5304              : }
+    5305              : 
+    5306              : // aten::nextafter(Tensor self, Tensor other) -> Tensor
+    5307              : inline at::Tensor Tensor::nextafter(const at::Tensor & other) const {
+    5308              :     return at::_ops::nextafter::call(const_cast<Tensor&>(*this), other);
+    5309              : }
+    5310              : 
+    5311              : // aten::nextafter_(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    5312              : inline at::Tensor & Tensor::nextafter_(const at::Tensor & other) const {
+    5313              :     return at::_ops::nextafter_::call(const_cast<Tensor&>(*this), other);
+    5314              : }
+    5315              : 
+    5316              : // aten::remainder.Scalar(Tensor self, Scalar other) -> Tensor
+    5317              : inline at::Tensor Tensor::remainder(const at::Scalar & other) const {
+    5318              :     return at::_ops::remainder_Scalar::call(const_cast<Tensor&>(*this), other);
+    5319              : }
+    5320              : 
+    5321              : // aten::remainder_.Scalar(Tensor(a!) self, Scalar other) -> Tensor(a!)
+    5322              : inline at::Tensor & Tensor::remainder_(const at::Scalar & other) const {
+    5323              :     return at::_ops::remainder__Scalar::call(const_cast<Tensor&>(*this), other);
+    5324              : }
+    5325              : 
+    5326              : // aten::remainder.Tensor(Tensor self, Tensor other) -> Tensor
+    5327              : inline at::Tensor Tensor::remainder(const at::Tensor & other) const {
+    5328              :     return at::_ops::remainder_Tensor::call(const_cast<Tensor&>(*this), other);
+    5329              : }
+    5330              : 
+    5331              : // aten::remainder_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)
+    5332              : inline at::Tensor & Tensor::remainder_(const at::Tensor & other) const {
+    5333              :     return at::_ops::remainder__Tensor::call(const_cast<Tensor&>(*this), other);
+    5334              : }
+    5335              : 
+    5336              : // aten::min(Tensor self) -> Tensor
+    5337              : inline at::Tensor Tensor::min() const {
+    5338              :     return at::_ops::min::call(const_cast<Tensor&>(*this));
+    5339              : }
+    5340              : 
+    5341              : // aten::fmin(Tensor self, Tensor other) -> Tensor
+    5342              : inline at::Tensor Tensor::fmin(const at::Tensor & other) const {
+    5343              :     return at::_ops::fmin::call(const_cast<Tensor&>(*this), other);
+    5344              : }
+    5345              : 
+    5346              : // aten::max(Tensor self) -> Tensor
+    5347              : inline at::Tensor Tensor::max() const {
+    5348              :     return at::_ops::max::call(const_cast<Tensor&>(*this));
+    5349              : }
+    5350              : 
+    5351              : // aten::fmax(Tensor self, Tensor other) -> Tensor
+    5352              : inline at::Tensor Tensor::fmax(const at::Tensor & other) const {
+    5353              :     return at::_ops::fmax::call(const_cast<Tensor&>(*this), other);
+    5354              : }
+    5355              : 
+    5356              : // aten::maximum(Tensor self, Tensor other) -> Tensor
+    5357              : inline at::Tensor Tensor::maximum(const at::Tensor & other) const {
+    5358              :     return at::_ops::maximum::call(const_cast<Tensor&>(*this), other);
+    5359              : }
+    5360              : 
+    5361              : // aten::max.other(Tensor self, Tensor other) -> Tensor
+    5362              : inline at::Tensor Tensor::max(const at::Tensor & other) const {
+    5363              :     return at::_ops::max_other::call(const_cast<Tensor&>(*this), other);
+    5364              : }
+    5365              : 
+    5366              : // aten::minimum(Tensor self, Tensor other) -> Tensor
+    5367              : inline at::Tensor Tensor::minimum(const at::Tensor & other) const {
+    5368              :     return at::_ops::minimum::call(const_cast<Tensor&>(*this), other);
+    5369              : }
+    5370              : 
+    5371              : // aten::min.other(Tensor self, Tensor other) -> Tensor
+    5372              : inline at::Tensor Tensor::min(const at::Tensor & other) const {
+    5373              :     return at::_ops::min_other::call(const_cast<Tensor&>(*this), other);
+    5374              : }
+    5375              : 
+    5376              : // aten::quantile(Tensor self, Tensor q, int? dim=None, bool keepdim=False, *, str interpolation='linear') -> Tensor
+    5377              : inline at::Tensor Tensor::quantile(const at::Tensor & q, c10::optional<int64_t> dim, bool keepdim, c10::string_view interpolation) const {
+    5378              :     return at::_ops::quantile::call(const_cast<Tensor&>(*this), q, dim, keepdim, interpolation);
+    5379              : }
+    5380              : 
+    5381              : // aten::quantile.scalar(Tensor self, float q, int? dim=None, bool keepdim=False, *, str interpolation='linear') -> Tensor
+    5382              : inline at::Tensor Tensor::quantile(double q, c10::optional<int64_t> dim, bool keepdim, c10::string_view interpolation) const {
+    5383              :     return at::_ops::quantile_scalar::call(const_cast<Tensor&>(*this), q, dim, keepdim, interpolation);
+    5384              : }
+    5385              : 
+    5386              : // aten::nanquantile(Tensor self, Tensor q, int? dim=None, bool keepdim=False, *, str interpolation='linear') -> Tensor
+    5387              : inline at::Tensor Tensor::nanquantile(const at::Tensor & q, c10::optional<int64_t> dim, bool keepdim, c10::string_view interpolation) const {
+    5388              :     return at::_ops::nanquantile::call(const_cast<Tensor&>(*this), q, dim, keepdim, interpolation);
+    5389              : }
+    5390              : 
+    5391              : // aten::nanquantile.scalar(Tensor self, float q, int? dim=None, bool keepdim=False, *, str interpolation='linear') -> Tensor
+    5392              : inline at::Tensor Tensor::nanquantile(double q, c10::optional<int64_t> dim, bool keepdim, c10::string_view interpolation) const {
+    5393              :     return at::_ops::nanquantile_scalar::call(const_cast<Tensor&>(*this), q, dim, keepdim, interpolation);
+    5394              : }
+    5395              : 
+    5396              : // aten::sort(Tensor self, int dim=-1, bool descending=False) -> (Tensor values, Tensor indices)
+    5397              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::sort(int64_t dim, bool descending) const {
+    5398              :     return at::_ops::sort::call(const_cast<Tensor&>(*this), dim, descending);
+    5399              : }
+    5400              : 
+    5401              : // aten::sort.stable(Tensor self, *, bool? stable, int dim=-1, bool descending=False) -> (Tensor values, Tensor indices)
+    5402              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::sort(c10::optional<bool> stable, int64_t dim, bool descending) const {
+    5403              :     return at::_ops::sort_stable::call(const_cast<Tensor&>(*this), stable, dim, descending);
+    5404              : }
+    5405              : 
+    5406              : // aten::sort.dimname(Tensor self, Dimname dim, bool descending=False) -> (Tensor values, Tensor indices)
+    5407              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::sort(at::Dimname dim, bool descending) const {
+    5408              :     return at::_ops::sort_dimname::call(const_cast<Tensor&>(*this), dim, descending);
+    5409              : }
+    5410              : 
+    5411              : // aten::sort.dimname_stable(Tensor self, *, bool? stable, Dimname dim, bool descending=False) -> (Tensor values, Tensor indices)
+    5412              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::sort(c10::optional<bool> stable, at::Dimname dim, bool descending) const {
+    5413              :     return at::_ops::sort_dimname_stable::call(const_cast<Tensor&>(*this), stable, dim, descending);
+    5414              : }
+    5415              : 
+    5416              : // aten::msort(Tensor self) -> Tensor
+    5417              : inline at::Tensor Tensor::msort() const {
+    5418              :     return at::_ops::msort::call(const_cast<Tensor&>(*this));
+    5419              : }
+    5420              : 
+    5421              : // aten::argsort(Tensor self, int dim=-1, bool descending=False) -> Tensor
+    5422              : inline at::Tensor Tensor::argsort(int64_t dim, bool descending) const {
+    5423              :     return at::_ops::argsort::call(const_cast<Tensor&>(*this), dim, descending);
+    5424              : }
+    5425              : 
+    5426              : // aten::argsort.stable(Tensor self, *, bool stable, int dim=-1, bool descending=False) -> Tensor
+    5427              : inline at::Tensor Tensor::argsort(bool stable, int64_t dim, bool descending) const {
+    5428              :     return at::_ops::argsort_stable::call(const_cast<Tensor&>(*this), stable, dim, descending);
+    5429              : }
+    5430              : 
+    5431              : // aten::argsort.dimname(Tensor self, Dimname dim, bool descending=False) -> Tensor
+    5432              : inline at::Tensor Tensor::argsort(at::Dimname dim, bool descending) const {
+    5433              :     return at::_ops::argsort_dimname::call(const_cast<Tensor&>(*this), dim, descending);
+    5434              : }
+    5435              : 
+    5436              : // aten::topk(Tensor self, SymInt k, int dim=-1, bool largest=True, bool sorted=True) -> (Tensor values, Tensor indices)
+    5437              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::topk(int64_t k, int64_t dim, bool largest, bool sorted) const {
+    5438              :     return at::_ops::topk::call(const_cast<Tensor&>(*this), k, dim, largest, sorted);
+    5439              : }
+    5440              : 
+    5441              : // aten::topk(Tensor self, SymInt k, int dim=-1, bool largest=True, bool sorted=True) -> (Tensor values, Tensor indices)
+    5442              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::topk_symint(c10::SymInt k, int64_t dim, bool largest, bool sorted) const {
+    5443              :     return at::_ops::topk::call(const_cast<Tensor&>(*this), k, dim, largest, sorted);
+    5444              : }
+    5445              : 
+    5446              : // aten::all(Tensor self) -> Tensor
+    5447              : inline at::Tensor Tensor::all() const {
+    5448              :     return at::_ops::all::call(const_cast<Tensor&>(*this));
+    5449              : }
+    5450              : 
+    5451              : // aten::any(Tensor self) -> Tensor
+    5452              : inline at::Tensor Tensor::any() const {
+    5453              :     return at::_ops::any::call(const_cast<Tensor&>(*this));
+    5454              : }
+    5455              : 
+    5456              : // aten::renorm(Tensor self, Scalar p, int dim, Scalar maxnorm) -> Tensor
+    5457              : inline at::Tensor Tensor::renorm(const at::Scalar & p, int64_t dim, const at::Scalar & maxnorm) const {
+    5458              :     return at::_ops::renorm::call(const_cast<Tensor&>(*this), p, dim, maxnorm);
+    5459              : }
+    5460              : 
+    5461              : // aten::renorm_(Tensor(a!) self, Scalar p, int dim, Scalar maxnorm) -> Tensor(a!)
+    5462              : inline at::Tensor & Tensor::renorm_(const at::Scalar & p, int64_t dim, const at::Scalar & maxnorm) const {
+    5463              :     return at::_ops::renorm_::call(const_cast<Tensor&>(*this), p, dim, maxnorm);
+    5464              : }
+    5465              : 
+    5466              : // aten::unfold(Tensor(a) self, int dimension, int size, int step) -> Tensor(a)
+    5467              : inline at::Tensor Tensor::unfold(int64_t dimension, int64_t size, int64_t step) const {
+    5468              :     return at::_ops::unfold::call(const_cast<Tensor&>(*this), dimension, size, step);
+    5469              : }
+    5470              : 
+    5471              : // aten::equal(Tensor self, Tensor other) -> bool
+    5472          110 : inline bool Tensor::equal(const at::Tensor & other) const {
+    5473          110 :     return at::_ops::equal::call(const_cast<Tensor&>(*this), other);
+    5474              : }
+    5475              : 
+    5476              : // aten::pow.Tensor_Tensor(Tensor self, Tensor exponent) -> Tensor
+    5477              : inline at::Tensor Tensor::pow(const at::Tensor & exponent) const {
+    5478              :     return at::_ops::pow_Tensor_Tensor::call(const_cast<Tensor&>(*this), exponent);
+    5479              : }
+    5480              : 
+    5481              : // aten::pow.Tensor_Scalar(Tensor self, Scalar exponent) -> Tensor
+    5482              : inline at::Tensor Tensor::pow(const at::Scalar & exponent) const {
+    5483              :     return at::_ops::pow_Tensor_Scalar::call(const_cast<Tensor&>(*this), exponent);
+    5484              : }
+    5485              : 
+    5486              : // aten::pow_.Scalar(Tensor(a!) self, Scalar exponent) -> Tensor(a!)
+    5487              : inline at::Tensor & Tensor::pow_(const at::Scalar & exponent) const {
+    5488              :     return at::_ops::pow__Scalar::call(const_cast<Tensor&>(*this), exponent);
+    5489              : }
+    5490              : 
+    5491              : // aten::pow_.Tensor(Tensor(a!) self, Tensor exponent) -> Tensor(a!)
+    5492              : inline at::Tensor & Tensor::pow_(const at::Tensor & exponent) const {
+    5493              :     return at::_ops::pow__Tensor::call(const_cast<Tensor&>(*this), exponent);
+    5494              : }
+    5495              : 
+    5496              : // aten::float_power.Tensor_Tensor(Tensor self, Tensor exponent) -> Tensor
+    5497              : inline at::Tensor Tensor::float_power(const at::Tensor & exponent) const {
+    5498              :     return at::_ops::float_power_Tensor_Tensor::call(const_cast<Tensor&>(*this), exponent);
+    5499              : }
+    5500              : 
+    5501              : // aten::float_power.Tensor_Scalar(Tensor self, Scalar exponent) -> Tensor
+    5502              : inline at::Tensor Tensor::float_power(const at::Scalar & exponent) const {
+    5503              :     return at::_ops::float_power_Tensor_Scalar::call(const_cast<Tensor&>(*this), exponent);
+    5504              : }
+    5505              : 
+    5506              : // aten::float_power_.Scalar(Tensor(a!) self, Scalar exponent) -> Tensor(a!)
+    5507              : inline at::Tensor & Tensor::float_power_(const at::Scalar & exponent) const {
+    5508              :     return at::_ops::float_power__Scalar::call(const_cast<Tensor&>(*this), exponent);
+    5509              : }
+    5510              : 
+    5511              : // aten::float_power_.Tensor(Tensor(a!) self, Tensor exponent) -> Tensor(a!)
+    5512              : inline at::Tensor & Tensor::float_power_(const at::Tensor & exponent) const {
+    5513              :     return at::_ops::float_power__Tensor::call(const_cast<Tensor&>(*this), exponent);
+    5514              : }
+    5515              : 
+    5516              : // aten::normal_(Tensor(a!) self, float mean=0, float std=1, *, Generator? generator=None) -> Tensor(a!)
+    5517              : inline at::Tensor & Tensor::normal_(double mean, double std, c10::optional<at::Generator> generator) const {
+    5518              :     return at::_ops::normal_::call(const_cast<Tensor&>(*this), mean, std, generator);
+    5519              : }
+    5520              : 
+    5521              : // aten::alias(Tensor(a) self) -> Tensor(a)
+    5522              : inline at::Tensor Tensor::alias() const {
+    5523              :     return at::_ops::alias::call(const_cast<Tensor&>(*this));
+    5524              : }
+    5525              : 
+    5526              : // aten::isfinite(Tensor self) -> Tensor
+    5527              : inline at::Tensor Tensor::isfinite() const {
+    5528              :     return at::_ops::isfinite::call(const_cast<Tensor&>(*this));
+    5529              : }
+    5530              : 
+    5531              : // aten::isinf(Tensor self) -> Tensor
+    5532              : inline at::Tensor Tensor::isinf() const {
+    5533              :     return at::_ops::isinf::call(const_cast<Tensor&>(*this));
+    5534              : }
+    5535              : 
+    5536              : // aten::record_stream(Tensor(a!) self, Stream s) -> ()
+    5537              : inline void Tensor::record_stream(at::Stream s) const {
+    5538              :     return at::_ops::record_stream::call(const_cast<Tensor&>(*this), s);
+    5539              : }
+    5540              : 
+    5541              : // aten::isposinf(Tensor self) -> Tensor
+    5542              : inline at::Tensor Tensor::isposinf() const {
+    5543              :     return at::_ops::isposinf::call(const_cast<Tensor&>(*this));
+    5544              : }
+    5545              : 
+    5546              : // aten::isneginf(Tensor self) -> Tensor
+    5547              : inline at::Tensor Tensor::isneginf() const {
+    5548              :     return at::_ops::isneginf::call(const_cast<Tensor&>(*this));
+    5549              : }
+    5550              : 
+    5551              : // aten::det(Tensor self) -> Tensor
+    5552              : inline at::Tensor Tensor::det() const {
+    5553              :     return at::_ops::det::call(const_cast<Tensor&>(*this));
+    5554              : }
+    5555              : 
+    5556              : // aten::slogdet(Tensor self) -> (Tensor sign, Tensor logabsdet)
+    5557              : inline ::std::tuple<at::Tensor,at::Tensor> Tensor::slogdet() const {
+    5558              :     return at::_ops::slogdet::call(const_cast<Tensor&>(*this));
+    5559              : }
+    5560              : 
+    5561              : // aten::logdet(Tensor self) -> Tensor
+    5562              : inline at::Tensor Tensor::logdet() const {
+    5563              :     return at::_ops::logdet::call(const_cast<Tensor&>(*this));
+    5564              : }
+    5565              : 
+    5566              : // aten::inverse(Tensor self) -> Tensor
+    5567              : inline at::Tensor Tensor::inverse() const {
+    5568              :     return at::_ops::inverse::call(const_cast<Tensor&>(*this));
+    5569              : }
+    5570              : 
+    5571              : // aten::inner(Tensor self, Tensor other) -> Tensor
+    5572              : inline at::Tensor Tensor::inner(const at::Tensor & other) const {
+    5573              :     return at::_ops::inner::call(const_cast<Tensor&>(*this), other);
+    5574              : }
+    5575              : 
+    5576              : // aten::outer(Tensor self, Tensor vec2) -> Tensor
+    5577              : inline at::Tensor Tensor::outer(const at::Tensor & vec2) const {
+    5578              :     return at::_ops::outer::call(const_cast<Tensor&>(*this), vec2);
+    5579              : }
+    5580              : 
+    5581              : // aten::ger(Tensor self, Tensor vec2) -> Tensor
+    5582              : inline at::Tensor Tensor::ger(const at::Tensor & vec2) const {
+    5583              :     return at::_ops::ger::call(const_cast<Tensor&>(*this), vec2);
+    5584              : }
+    5585              : 
+    5586              : // aten::to_padded_tensor(Tensor self, float padding, SymInt[]? output_size=None) -> Tensor
+    5587              : inline at::Tensor Tensor::to_padded_tensor(double padding, at::OptionalIntArrayRef output_size) const {
+    5588              :     return at::_ops::to_padded_tensor::call(const_cast<Tensor&>(*this), padding, output_size.has_value() ? c10::make_optional(c10::fromIntArrayRefSlow(*output_size)) : c10::nullopt);
+    5589              : }
+    5590              : 
+    5591              : // aten::to_padded_tensor(Tensor self, float padding, SymInt[]? output_size=None) -> Tensor
+    5592              : inline at::Tensor Tensor::to_padded_tensor_symint(double padding, at::OptionalSymIntArrayRef output_size) const {
+    5593              :     return at::_ops::to_padded_tensor::call(const_cast<Tensor&>(*this), padding, output_size);
+    5594              : }
+    5595              : } // namespace at
+    5596              : 
+    5597              : 
+    5598              : namespace c10 {
+    5599              : template <>
+    5600              : struct MaybeOwnedTraits<at::Tensor> {
+    5601              :   using owned_type = at::Tensor;
+    5602              :   using borrow_type = at::Tensor;
+    5603              : 
+    5604              :   static borrow_type createBorrow(const owned_type& from) {
+    5605              :     // NOTE: this can be implemented without the special
+    5606              :     // unsafe_borrow_t Tensor constructor as
+    5607              :     //
+    5608              :     // return borrow_type(c10::intrusive_ptr<at::TensorImpl, at::UndefinedTensorImpl>::reclaim(from.unsafeGetTensorImpl()));
+    5609              :     //
+    5610              :     // but that hurts inlining due to the nullptr check in the
+    5611              :     // Tensor(c10::intrusive_ptr<...>) constructor. We already know
+    5612              :     // that from.impl_ isn't null because from is a valid Tensor, so
+    5613              :     // we needn't do the check again. (using __builtin_assume can
+    5614              :     // avoid this, but wouldn't be portable to MSVC.)
+    5615              :     return borrow_type(borrow_type::unsafe_borrow_t{}, from);
+    5616              :   }
+    5617              : 
+    5618              :   static void assignBorrow(borrow_type& lhs, const borrow_type& rhs) {
+    5619              :     lhs.unsafeReleaseTensorImpl();
+    5620              :     // See above note: this can be implemented with public API
+    5621              :     // similarly to createBorrow(), but that would hurt inlining.
+    5622              :     lhs = borrow_type(borrow_type::unsafe_borrow_t{}, rhs);
+    5623              :   }
+    5624              : 
+    5625              :   static void destroyBorrow(borrow_type& toDestroy) {
+    5626              :     toDestroy.unsafeReleaseTensorImpl(); // "leak" it, but it was already +0.
+    5627              :   }
+    5628              : 
+    5629              :   static const owned_type& referenceFromBorrow(const borrow_type& borrow) {
+    5630              :     return borrow;
+    5631              :   }
+    5632              : 
+    5633              :   static const owned_type* pointerFromBorrow(const borrow_type& borrow) {
+    5634              :     return &borrow;
+    5635              :   }
+    5636              : 
+    5637              :   static bool debugBorrowIsValid(const borrow_type& /*borrow*/) {
+    5638              :     return true;
+    5639              :   }
+    5640              : };
+    5641              : 
+    5642              : template <>
+    5643              : struct ExclusivelyOwnedTraits<at::Tensor> {
+    5644              :   using repr_type = at::Tensor;
+    5645              :   using pointer_type = at::Tensor*;
+    5646              :   using const_pointer_type = const at::Tensor*;
+    5647              : 
+    5648              :   static repr_type nullRepr() {
+    5649              :     return at::Tensor();
+    5650              :   }
+    5651              : 
+    5652              :   template <class... Args>
+    5653              :   static repr_type createInPlace(Args&&... args) {
+    5654              :     return at::Tensor(std::forward<Args>(args)...);
+    5655              :   }
+    5656              : 
+    5657              :   static repr_type moveToRepr(at::Tensor&& x) {
+    5658              :     return std::move(x);
+    5659              :   }
+    5660              : 
+    5661              :   static void destroyOwned(at::Tensor& x) {
+    5662              :     return ExclusivelyOwnedTraits<at::TensorBase>::destroyOwned(x);
+    5663              :   }
+    5664              : 
+    5665              :   static at::Tensor take(at::Tensor& x) {
+    5666              :     return std::move(x);
+    5667              :   }
+    5668              : 
+    5669              :   static pointer_type getImpl(repr_type& x) {
+    5670              :     return &x;
+    5671              :   }
+    5672              : 
+    5673              :   static const_pointer_type getImpl(const repr_type& x) {
+    5674              :     return &x;
+    5675              :   }
+    5676              : };
+    5677              : } // namespace c10
+    5678              : 
+    5679              : namespace at {
+    5680              : 
+    5681              : inline c10::MaybeOwned<Tensor> borrow_from_optional_tensor(
+    5682              :     const c10::optional<Tensor>& opt) {
+    5683              :   return opt.has_value()
+    5684              :     ? c10::MaybeOwned<Tensor>::borrowed(*opt)
+    5685              :     : c10::MaybeOwned<Tensor>::owned(c10::in_place);
+    5686              : }
+    5687              : 
+    5688              : inline c10::MaybeOwned<Tensor> Tensor::expect_contiguous(MemoryFormat memory_format) const & {
+    5689              :   if (is_contiguous(memory_format)) {
+    5690              :     return c10::MaybeOwned<Tensor>::borrowed(*this);
+    5691              :   } else {
+    5692              :     return c10::MaybeOwned<Tensor>::owned(__dispatch_contiguous(memory_format));
+    5693              :   }
+    5694              : }
+    5695              : } // namespace at
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/index-sort-f.html b/html/libtorch/include/ATen/core/index-sort-f.html new file mode 100644 index 0000000..bce96ab --- /dev/null +++ b/html/libtorch/include/ATen/core/index-sort-f.html @@ -0,0 +1,237 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/coreCoverageTotalHit
Test:coverage.infoLines:64.0 %381244
Test Date:2024-04-30 13:17:26Functions:74.3 %144107
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
ivalue_inl.h +
8.2%8.2%
+
8.2 %4943.6 %281
ivalue.h +
30.6%30.6%
+
30.6 %1213752.4 %2111
CheckMemoryFormat.h +
83.3%83.3%
+
83.3 %65100.0 %11
Formatting.h +
100.0%
+
100.0 %22100.0 %11
LegacyTypeDispatch.h +
100.0%
+
100.0 %66100.0 %22
IListRef.h +
100.0%
+
100.0 %55100.0 %33
List_inl.h +
100.0%
+
100.0 %1111100.0 %44
jit_type.h +
100.0%
+
100.0 %1010100.0 %44
TensorAccessor.h +
100.0%
+
100.0 %1010100.0 %66
jit_type_base.h +
88.5%88.5%
+
88.5 %2623100.0 %99
TensorBase.h +
97.3%97.3%
+
97.3 %3736100.0 %1818
TensorBody.h +
96.9%96.9%
+
96.9 %9895100.0 %4747
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/index-sort-l.html b/html/libtorch/include/ATen/core/index-sort-l.html new file mode 100644 index 0000000..f4fadfe --- /dev/null +++ b/html/libtorch/include/ATen/core/index-sort-l.html @@ -0,0 +1,237 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/coreCoverageTotalHit
Test:coverage.infoLines:64.0 %381244
Test Date:2024-04-30 13:17:26Functions:74.3 %144107
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
ivalue_inl.h +
8.2%8.2%
+
8.2 %4943.6 %281
ivalue.h +
30.6%30.6%
+
30.6 %1213752.4 %2111
CheckMemoryFormat.h +
83.3%83.3%
+
83.3 %65100.0 %11
jit_type_base.h +
88.5%88.5%
+
88.5 %2623100.0 %99
TensorBody.h +
96.9%96.9%
+
96.9 %9895100.0 %4747
TensorBase.h +
97.3%97.3%
+
97.3 %3736100.0 %1818
Formatting.h +
100.0%
+
100.0 %22100.0 %11
IListRef.h +
100.0%
+
100.0 %55100.0 %33
LegacyTypeDispatch.h +
100.0%
+
100.0 %66100.0 %22
TensorAccessor.h +
100.0%
+
100.0 %1010100.0 %66
jit_type.h +
100.0%
+
100.0 %1010100.0 %44
List_inl.h +
100.0%
+
100.0 %1111100.0 %44
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/index.html b/html/libtorch/include/ATen/core/index.html new file mode 100644 index 0000000..f5b2eae --- /dev/null +++ b/html/libtorch/include/ATen/core/index.html @@ -0,0 +1,237 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/coreCoverageTotalHit
Test:coverage.infoLines:64.0 %381244
Test Date:2024-04-30 13:17:26Functions:74.3 %144107
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
CheckMemoryFormat.h +
83.3%83.3%
+
83.3 %65100.0 %11
Formatting.h +
100.0%
+
100.0 %22100.0 %11
IListRef.h +
100.0%
+
100.0 %55100.0 %33
LegacyTypeDispatch.h +
100.0%
+
100.0 %66100.0 %22
List_inl.h +
100.0%
+
100.0 %1111100.0 %44
TensorAccessor.h +
100.0%
+
100.0 %1010100.0 %66
TensorBase.h +
97.3%97.3%
+
97.3 %3736100.0 %1818
TensorBody.h +
96.9%96.9%
+
96.9 %9895100.0 %4747
ivalue.h +
30.6%30.6%
+
30.6 %1213752.4 %2111
ivalue_inl.h +
8.2%8.2%
+
8.2 %4943.6 %281
jit_type.h +
100.0%
+
100.0 %1010100.0 %44
jit_type_base.h +
88.5%88.5%
+
88.5 %2623100.0 %99
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/ivalue.h.func-c.html b/html/libtorch/include/ATen/core/ivalue.h.func-c.html new file mode 100644 index 0000000..ece72c1 --- /dev/null +++ b/html/libtorch/include/ATen/core/ivalue.h.func-c.html @@ -0,0 +1,222 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/ivalue.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - ivalue.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:30.6 %12137
Test Date:2024-04-30 13:17:26Functions:52.4 %2111
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c106IValueC2ERKNS0_7PayloadENS0_3TagE0
_ZN3c106IValueC2ERKS0_0
_ZNK3c106IValue15isComplexDoubleEv0
_ZNK3c106IValue5isIntEv0
_ZNK3c106IValue5toIntEv0
_ZNK3c106IValue6isNoneEv0
_ZNK3c106IValue7tagKindB5cxx11Ev0
_ZNK3c106IValue8isDoubleEv0
_ZNK3c106IValue8isSymIntEv0
_ZNK3c106IValue8toDoubleEv0
_ZN3c106IValueC2EN2at10TensorBaseE105276376
_ZN3c106IValueC2Ev105276376
_ZN3c106IValueC2EOS0_206672908
_ZN3c106IValue11clearToNoneEv311949284
_ZN3c106IValue7Payload24TriviallyCopyablePayloadC2Ev417225660
_ZN3c106IValue7PayloadC2Ev417225660
_ZN3c106IValue7PayloadD2Ev417225660
_ZN3c106IValueD2Ev417225660
_ZNK3c106IValue14isIntrusivePtrEv417225660
_ZN3c106IValue7destroyEv522502036
_ZNK3c106IValue8isTensorEv939727696
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/ivalue.h.func.html b/html/libtorch/include/ATen/core/ivalue.h.func.html new file mode 100644 index 0000000..e3fcefb --- /dev/null +++ b/html/libtorch/include/ATen/core/ivalue.h.func.html @@ -0,0 +1,222 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/ivalue.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - ivalue.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:30.6 %12137
Test Date:2024-04-30 13:17:26Functions:52.4 %2111
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c106IValue11clearToNoneEv311949284
_ZN3c106IValue7Payload24TriviallyCopyablePayloadC2Ev417225660
_ZN3c106IValue7PayloadC2Ev417225660
_ZN3c106IValue7PayloadD2Ev417225660
_ZN3c106IValue7destroyEv522502036
_ZN3c106IValueC2EN2at10TensorBaseE105276376
_ZN3c106IValueC2EOS0_206672908
_ZN3c106IValueC2ERKNS0_7PayloadENS0_3TagE0
_ZN3c106IValueC2ERKS0_0
_ZN3c106IValueC2Ev105276376
_ZN3c106IValueD2Ev417225660
_ZNK3c106IValue14isIntrusivePtrEv417225660
_ZNK3c106IValue15isComplexDoubleEv0
_ZNK3c106IValue5isIntEv0
_ZNK3c106IValue5toIntEv0
_ZNK3c106IValue6isNoneEv0
_ZNK3c106IValue7tagKindB5cxx11Ev0
_ZNK3c106IValue8isDoubleEv0
_ZNK3c106IValue8isSymIntEv0
_ZNK3c106IValue8isTensorEv939727696
_ZNK3c106IValue8toDoubleEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/ivalue.h.gcov.html b/html/libtorch/include/ATen/core/ivalue.h.gcov.html new file mode 100644 index 0000000..43a6705 --- /dev/null +++ b/html/libtorch/include/ATen/core/ivalue.h.gcov.html @@ -0,0 +1,1575 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/ivalue.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - ivalue.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:30.6 %12137
Test Date:2024-04-30 13:17:26Functions:52.4 %2111
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <ATen/core/DimVector.h>
+       4              : #include <ATen/core/TensorBody.h>
+       5              : #include <ATen/core/blob.h>
+       6              : #include <ATen/core/custom_class.h>
+       7              : #include <ATen/core/ivalue_to.h>
+       8              : #include <ATen/core/jit_type_base.h>
+       9              : #include <ATen/core/type_factory.h>
+      10              : #include <c10/core/SymFloat.h>
+      11              : #include <c10/core/SymBool.h>
+      12              : #include <c10/macros/Export.h>
+      13              : #include <c10/util/C++17.h>
+      14              : #include <c10/util/MaybeOwned.h>
+      15              : #include <c10/util/intrusive_ptr.h>
+      16              : #include <typeindex>
+      17              : #include <unordered_map>
+      18              : #include <unordered_set>
+      19              : #include <utility>
+      20              : 
+      21              : namespace torch {
+      22              : class TORCH_API CustomClassHolder : public c10::intrusive_ptr_target {};
+      23              : namespace jit {
+      24              : using ::torch::CustomClassHolder;
+      25              : struct Function;
+      26              : struct CompilationUnit;
+      27              : struct Module;
+      28              : } // namespace jit
+      29              : } // namespace torch
+      30              : namespace c10 {
+      31              : template <class Key, class Value>
+      32              : class Dict;
+      33              : template <class T>
+      34              : class List;
+      35              : template <class T>
+      36              : class IListRef;
+      37              : struct IValue;
+      38              : struct ClassType;
+      39              : struct Type;
+      40              : class RRefInterface;
+      41              : 
+      42              : struct ClassType;
+      43              : using ClassTypePtr = std::shared_ptr<ClassType>;
+      44              : 
+      45              : TORCH_API bool _fastEqualsForContainer(const IValue& lhs, const IValue& rhs);
+      46              : 
+      47              : TORCH_API torch::jit::Function* checkObjectSortSchema(
+      48              :     const c10::ClassTypePtr& t,
+      49              :     std::stringstream& why_not);
+      50              : 
+      51              : // A comparator that checks ordering of two IValues of same type.
+      52              : typedef std::function<bool(const IValue& a, const IValue& b)> IValueComparator;
+      53              : 
+      54              : TORCH_API IValueComparator getLessThanComparator(const IValue& v);
+      55              : TORCH_API IValueComparator getGreaterThanComparator(const IValue& v);
+      56              : 
+      57              : namespace ivalue {
+      58              : struct Tuple;
+      59              : struct Future;
+      60              : struct Await;
+      61              : struct ConstantString;
+      62              : struct GenericDict;
+      63              : struct Object;
+      64              : struct PyObjectHolder;
+      65              : struct EnumHolder;
+      66              : // We need a ComplexHolder because currently the payloads in the Union
+      67              : // only take 64 bits. Since ComplexDouble takes up 128 bits, and is too big
+      68              : // to fit in the IValue directly, we indirect complex numbers through an intrusive
+      69              : // pointer to ComplexHolder (which contains a c10::complex).
+      70              : struct ComplexHolder : c10::intrusive_ptr_target {
+      71              :   public:
+      72              :     template <typename T>
+      73              :     ComplexHolder(c10::complex<T> c) {
+      74              :       val = convert<decltype(val), c10::complex<T>>(c);
+      75              :     }
+      76              :     ComplexHolder() = default;
+      77              :     c10::complex<double> val;
+      78              : };
+      79              : 
+      80              : // Similar to ComplexHolder, for StreamData3
+      81              : struct StreamData3Holder : c10::intrusive_ptr_target {
+      82              :   public:
+      83              :     StreamData3Holder(struct c10::StreamData3 d) {
+      84              :       val = d;
+      85              :     }
+      86              :     StreamData3Holder() = delete;
+      87              :     struct c10::StreamData3 val;
+      88              : };
+      89              : 
+      90              : } // namespace ivalue
+      91              : 
+      92              : // This is an owning wrapper for a c10::optional<std::vector<T>>
+      93              : // that can be implicitly converted to a (non-owning) optional<ArrayRef<T>>.
+      94              : // Its purpose is to be used in generated code to keep the vector alive
+      95              : // either until the end of a statement (as a temporary), or as a saved arg
+      96              : // in autograd.
+      97              : template <typename T>
+      98              : struct OptionalArray {
+      99              :   c10::optional<std::vector<T>> list;
+     100              : 
+     101              :   OptionalArray()= default;
+     102              :   OptionalArray(std::vector<T> val) : list(std::move(val)) {}
+     103              : 
+     104              :   // Used when saving an argument for the backwards pass.
+     105              :   OptionalArray& operator=(c10::optional<ArrayRef<T>> ref) {
+     106              :     if (ref) {
+     107              :       list = std::vector<T>(ref->begin(), ref->end());
+     108              :     } else {
+     109              :       list = nullopt;
+     110              :     }
+     111              :     return *this;
+     112              :   }
+     113              : 
+     114              :   // Used when saving an argument for the backwards pass.
+     115              :   OptionalArray& operator=(c10::OptionalArrayRef<T> ref) {
+     116              :     if (ref) {
+     117              :       list = std::vector<T>(ref->begin(), ref->end());
+     118              :     } else {
+     119              :       list = nullopt;
+     120              :     }
+     121              :     return *this;
+     122              :   }
+     123              : 
+     124              :   operator c10::optional<c10::ArrayRef<T>>() {
+     125              :     if (!list) {
+     126              :       return nullopt;
+     127              :     }
+     128              :     return *list;
+     129              :   }
+     130              : 
+     131              :   operator c10::OptionalArrayRef<T>() {
+     132              :     if (!list) {
+     133              :       return nullopt;
+     134              :     }
+     135              :     return *list;
+     136              :   }
+     137              : };
+     138              : 
+     139              : // Capsule is an internal implementation detail of custom C++ classes. We
+     140              : // define it as an owning wrapper for
+     141              : // c10::intrusive_ptr<torch::CustomClassHolder> This wrapper is here to serve as
+     142              : // an abstraction of the type erased custom class object pointer. It also allow
+     143              : // pybind11 to treat this as a standalone class to register as a separate type
+     144              : // caster, instead of a custom pointer holder which the pointer holder type
+     145              : // caster try to "unwrap" it automatically.
+     146              : struct Capsule {
+     147              :   c10::intrusive_ptr<torch::CustomClassHolder> obj_ptr;
+     148              :   explicit Capsule(c10::intrusive_ptr<torch::CustomClassHolder> ptr)
+     149              :       : obj_ptr(std::move(ptr)) {}
+     150              : };
+     151              : 
+     152              : // IValue is the generic tagged union used by the interpreter to hold
+     153              : // all value types.
+     154              : // It is a 16-byte object with an 8-byte payload and an 8-byte tag.
+     155              : // The tag is currently 4 bytes to determine the type, and 1 byte
+     156              : // to mark whether that type is a subtype of c10::intrusive_ptr_target and needs
+     157              : // retain/release calls.
+     158              : 
+     159              : #define TORCH_FORALL_TAGS(_) \
+     160              :   _(None)                    \
+     161              :   _(Tensor)                  \
+     162              :   _(Storage)                 \
+     163              :   _(Double)                  \
+     164              :   _(ComplexDouble)           \
+     165              :   _(Int)                     \
+     166              :   _(SymInt)                  \
+     167              :   _(SymFloat)                \
+     168              :   _(SymBool)                 \
+     169              :   _(Bool)                    \
+     170              :   _(Tuple)                   \
+     171              :   _(String)                  \
+     172              :   _(Blob)                    \
+     173              :   _(GenericList)             \
+     174              :   _(GenericDict)             \
+     175              :   _(Future)                  \
+     176              :   _(Await)                   \
+     177              :   _(Device)                  \
+     178              :   _(Stream)                  \
+     179              :   _(Object)                  \
+     180              :   _(PyObject)                \
+     181              :   _(Uninitialized)           \
+     182              :   _(Capsule)                 \
+     183              :   _(RRef)                    \
+     184              :   _(Quantizer)               \
+     185              :   _(Generator)               \
+     186              :   _(Enum)
+     187              : 
+     188              : // [doxygen private]
+     189              : // These methods are not actually private but we don't want to document them, so
+     190              : // they are marked `@private`, which hides them on the doxygen documentation for
+     191              : // this page.
+     192              : 
+     193              : /// IValue (Interpreter Value) is a tagged union over the types
+     194              : /// supported by the TorchScript interpreter. IValues contain their
+     195              : /// values as an `IValue::Payload`, which holds primitive types
+     196              : /// (`int64_t`, `bool`, `double`, `Device`) and `Tensor` as values,
+     197              : /// and all other types as a `c10::intrusive_ptr`. In order to
+     198              : /// optimize performance of the destructor and related operations by
+     199              : /// making the `Tensor` and `c10::intrusive_ptr` paths generate the
+     200              : /// same code, we represent a null `c10::intrusive_ptr` as
+     201              : /// `UndefinedTensorImpl::singleton()`, *not* `nullptr`.
+     202              : ///
+     203              : /// IValues are used as inputs to and outputs from the TorchScript interpreter.
+     204              : /// To retrieve the value contained within an IValue, use the `.toX()` methods,
+     205              : /// where `X` is the type you are trying to get. Note that neither the `.toX()`
+     206              : /// methods nor the templated `.to<T>` functions do any kind of casting, they
+     207              : /// only unwrap the contained value. For example:
+     208              : ///
+     209              : /// \rst
+     210              : /// .. code-block:: cpp
+     211              : ///
+     212              : ///   // Make the IValue
+     213              : ///   torch::IValue my_ivalue(26);
+     214              : ///   std::cout << my_ivalue << "\n";
+     215              : ///
+     216              : ///   // Unwrap the IValue
+     217              : ///   int64_t my_int = my_ivalue.toInt();
+     218              : ///   std::cout << my_int << "\n";
+     219              : ///
+     220              : ///   // This will throw an error!
+     221              : ///   // `my_ivalue` is tagged as an int and cannot be used as another type
+     222              : ///   torch::Tensor my_tensor = my_ivalue.toTensor();
+     223              : /// \endrst
+     224              : struct TORCH_API IValue final {
+     225            0 :   IValue(const IValue& rhs)
+     226            0 :       : IValue(rhs.payload, rhs.tag) {
+     227            0 :     if (isIntrusivePtr() && payload.u.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton()) {
+     228            0 :       c10::raw::intrusive_ptr::incref(payload.u.as_intrusive_ptr);
+     229              :     }
+     230            0 :   }
+     231              : 
+     232    206672908 :   IValue(IValue&& rhs) noexcept : tag(rhs.tag) {
+     233    206672908 :     moveFrom(std::move(rhs));
+     234    206672908 :   }
+     235              : 
+     236              :   /// @private [doxygen private]
+     237    417225660 :   ~IValue() {
+     238    417225660 :     destroy();
+     239    417225660 :   }
+     240              : 
+     241              :   C10_ALWAYS_INLINE IValue& operator=(IValue&& rhs) & noexcept {
+     242    105276376 :     if (&rhs == this) {
+     243            0 :       return *this;
+     244              :     }
+     245              : 
+     246    105276376 :     destroy();
+     247    105276376 :     moveFrom(std::move(rhs));
+     248    105276376 :     return *this;
+     249              :   }
+     250              : 
+     251              :   IValue& operator=(IValue const& rhs) & {
+     252              :     *this = IValue(rhs);
+     253              :     return *this;
+     254              :   }
+     255              : 
+     256              :   void dump() const;
+     257              : 
+     258              :   /**
+     259              :    * Equality comparison. The semantics are the same as Python's `==`:
+     260              :    * 1. Numerical types are compared by value.
+     261              :    * 2. Tensors compute element-wise equality, returning a BoolTensor (see:
+     262              :    * `torch.eq()`)
+     263              :    * 3. Strings are compared by value.
+     264              :    * 4. Sequence types (list, tuple) are compared lexicographically by
+     265              :    *    comparing their elements. Different sequence types never compare equal.
+     266              :    * 5. Mappings (dict) must have equal (key, value) pairs.
+     267              :    * 6. If not listed above, the default behavior for is to test identity
+     268              :    * equality (e.g. pointer equality).
+     269              :    *
+     270              :    * Why does this return an IValue instead of a bool? Because in PyTorch,
+     271              :    * `tensor1 == tensor2` returns a `BoolTensor`, not a bool.
+     272              :    *
+     273              :    * NOTE: we (like Python) assume that identity equality implies value equality
+     274              :    * for efficiency.
+     275              :    * TODO: need to support customizing equality
+     276              :    */
+     277              :   IValue equals(const IValue& rhs) const;
+     278              :   /**
+     279              :    * This implements the same semantics as `bool(lhs == rhs)` in Python. which
+     280              :    * is the same as `equals()` except for Tensor types.
+     281              :    */
+     282              :   TORCH_API friend bool operator==(const IValue& lhs, const IValue& rhs);
+     283              :   TORCH_API friend bool operator!=(const IValue& lhs, const IValue& rhs);
+     284              : 
+     285              :   /**
+     286              :    * Identity comparison. Checks if `this` is the same object as `rhs`. The
+     287              :    * semantics are the same as Python's `is` operator.
+     288              :    *
+     289              :    * NOTE: Like in Python, this operation is poorly defined for primitive types
+     290              :    * like numbers and strings. Prefer to use `==` unless you really want to
+     291              :    * check identity equality.
+     292              :    */
+     293              :   bool is(const IValue& rhs) const;
+     294              : 
+     295              :    /**
+     296              :    * Hashing for IValues. Returns an IValue-boxed int.
+     297              :    *
+     298              :    * Some notes:
+     299              :    * - Like eager, Tensors are hashed by looking at the pointer. This is not
+     300              :    *   strictly correct because two value-equal tensors with different tensor
+     301              :    *   pointers will hash differently, but we choose to reproduce the eager
+     302              :    *   semantics.
+     303              :    * - Hashing is not defined on all built-in IValue types (e.g. list and
+     304              :    *   dict), following Python. Calling `hash()` on these types will throw.
+     305              :    */
+     306              :   IValue hash() const {
+     307              :     return (int64_t)IValue::hash(*this);
+     308              :   }
+     309              :   // This is defined because `c10::hash` dispatches to a function of this
+     310              :   // signature. See the member function `hash()`.
+     311              :   static size_t hash(const IValue& iv);
+     312              : 
+     313              :   /**
+     314              :    * @private [doxygen private]
+     315              :    * [container equality]
+     316              :    * This is an equality implementation that assumes objects with the same
+     317              :    * identity equal themselves, for efficiency reasons. We primarily have this
+     318              :    * for consistency, because Python does the same thing. This actually
+     319              :    * provokes user-visible changes in behavior due to quirks in torch:
+     320              :    *      [tensor1] == [tensor1] -> True (because container equality will first
+     321              :    * compare identity) [tensor1] == [tensor1_copy] -> RuntimeError:
+     322              :    * Boolean value of Tensor with more than one value is ambiguous
+     323              :    */
+     324              :   TORCH_API friend bool _fastEqualsForContainer(
+     325              :       const IValue& lhs,
+     326              :       const IValue& rhs);
+     327              : 
+     328              : private:
+     329              :   static bool isAliasOf(const at::Tensor& a, const at::Tensor& b) {
+     330              :     if (a.is_sparse()) {
+     331              :       return isAliasOf(a._values(), b) || isAliasOf(a._indices(), b);
+     332              :     }
+     333              :     if (b.is_sparse()) {
+     334              :       return isAliasOf(a, b._values()) || isAliasOf(a, b._indices());
+     335              :     }
+     336              :     if (a.is_sparse_csr()) {
+     337              :       return isAliasOf(a.values(), b) ||
+     338              :              isAliasOf(a.crow_indices(), b) ||
+     339              :              isAliasOf(a.col_indices(), b);
+     340              :     }
+     341              :     if (b.is_sparse_csr()) {
+     342              :       return isAliasOf(a, b.values()) ||
+     343              :              isAliasOf(a, b.crow_indices()) ||
+     344              :              isAliasOf(a, b.col_indices());
+     345              :     }
+     346              : 
+     347              :     // Opaque tensors such as the ones constructed by the MKL-DNN backend
+     348              :     // don't have storage so we just compare their TensorImpls.
+     349              :     // TODO: Find way to expose alias info for opaque tensors.
+     350              :     if (!a.has_storage() || !b.has_storage()) {
+     351              :       return a.unsafeGetTensorImpl() == b.unsafeGetTensorImpl();
+     352              :     }
+     353              : 
+     354              :     return a.is_alias_of(b);
+     355              :   }
+     356              : 
+     357              :   template <typename T>
+     358              :   bool isListOf() const;
+     359              : 
+     360              : public:
+     361              :   /// @private [doxygen private]
+     362              :   bool isAliasOf(const IValue& rhs) const {
+     363              :     if (this->tag != rhs.tag) {
+     364              :       // Trivially don't alias if the type is different
+     365              :       return false;
+     366              :     }
+     367              : 
+     368              :     // Tensors should be compared based on internal storage
+     369              :     if (this->isTensor()) {
+     370              :       return isAliasOf(this->toTensor(), rhs.toTensor());
+     371              :     }
+     372              : 
+     373              :     if (!isIntrusivePtr()) {
+     374              :       // Primitive types don't alias anything
+     375              :       return false;
+     376              :     }
+     377              : 
+     378              :     AT_ASSERT(rhs.isIntrusivePtr());
+     379              : 
+     380              :     // Other types can be compared by their ptr value
+     381              :     return this->payload.u.as_intrusive_ptr == rhs.payload.u.as_intrusive_ptr;
+     382              :   }
+     383              : 
+     384              :   /// @private [doxygen private]
+     385              :   size_t use_count() const noexcept {
+     386              :     if (isTensor()) {
+     387              :       return payload.as_tensor.use_count();
+     388              :     }
+     389              : 
+     390              :     if (!isIntrusivePtrLegacyBehavior()) {
+     391              :       return 1;
+     392              :     }
+     393              : 
+     394              :     if (payload.u.as_intrusive_ptr == c10::UndefinedTensorImpl::singleton()) {
+     395              :       return 0;
+     396              :     }
+     397              :     return c10::raw::intrusive_ptr::use_count(payload.u.as_intrusive_ptr);
+     398              :   }
+     399              : 
+     400              :   /// @private [doxygen private]
+     401              :   void swap(IValue& rhs) noexcept {
+     402              :     if (isTensor() && rhs.isTensor()) {
+     403              :       std::swap(payload.as_tensor, rhs.payload.as_tensor);
+     404              :     } else if (isTensor()) {
+     405              :       at::Tensor t = std::move(payload.as_tensor);
+     406              :       // As far as I can tell, omitting the usual explicit destructor call
+     407              :       // is not UB in and of itself, and it's a slight perf win. The
+     408              :       // destructor is a no-op, because the moved-from Tensor is
+     409              :       // effectively an intrusive_ptr in the null state, so we don't need
+     410              :       // the behavior for correctness reasons either. Leaving this
+     411              :       // explanatory comment, including commented-out destructor call, to
+     412              :       // make this abundantly clear.
+     413              :       //
+     414              :       // payload.as_tensor.~Tensor();
+     415              :       payload.u = rhs.payload.u;
+     416              :       new (&rhs.payload.as_tensor) at::Tensor(std::move(t));
+     417              :     } else if (rhs.isTensor()) {
+     418              :       rhs.swap(*this);
+     419              :       return;
+     420              :     } else {
+     421              :       std::swap(payload.u, rhs.payload.u);
+     422              :     }
+     423              :     std::swap(tag, rhs.tag);
+     424              :   }
+     425              : 
+     426              :   // Accessors for subtypes are arranged together below
+     427              :   // While some of these accessors could be generated through templates,
+     428              :   // we prefer to write them manually for clarity
+     429              : 
+     430    105276376 :   IValue(at::TensorBase t) : tag(Tag::Tensor) {
+     431    105276376 :     new (&payload.as_tensor) at::Tensor(std::move(t));
+     432    105276376 :   }
+     433    939727696 :   bool isTensor() const {
+     434    939727696 :     return Tag::Tensor == tag;
+     435              :   }
+     436              : 
+     437              :  private:
+     438              :   // Outlined error path so that toTensor() can be inlined.
+     439              :   [[noreturn]] void reportToTensorTypeError() const;
+     440              : 
+     441              :  public:
+     442              :   at::Tensor toTensor() &&;
+     443              :   at::Tensor& toTensor() &;
+     444              :   const at::Tensor& toTensor() const&;
+     445              :   at::TensorImpl* unsafeToTensorImpl() const {
+     446              :     TORCH_INTERNAL_ASSERT(isTensor());
+     447              :     return payload.as_tensor.unsafeGetTensorImpl();
+     448              :   }
+     449              : 
+     450              :   IValue(at::Storage s) : tag(Tag::Storage) {
+     451              :     payload.u.as_intrusive_ptr = null_to_undefined_tensor(s.unsafeReleaseStorageImpl());
+     452              :   }
+     453              :   bool isStorage() const {
+     454              :     return Tag::Storage == tag;
+     455              :   }
+     456              :   c10::Storage toStorage() &&;
+     457              :   c10::Storage toStorage() const&;
+     458              : 
+     459              :   const IValue& toIValue() const {
+     460              :     return *this;
+     461              :   }
+     462              :   IValue& toIValue() {
+     463              :     return *this;
+     464              :   }
+     465              : 
+     466              :   /// @private [doxygen private]
+     467              :   IValue(intrusive_ptr<caffe2::Blob> blob)
+     468              :       : tag(Tag::Blob) {
+     469              :     // TODO (after Tensor merge) If we pass in a Blob holding a Tensor, extract
+     470              :     // and store it as a Tensor instead.
+     471              :     payload.u.as_intrusive_ptr = null_to_undefined_tensor(blob.release());
+     472              :   }
+     473              : 
+     474              :   /// @private [doxygen private]
+     475              :   bool isBlob() const {
+     476              :     return Tag::Blob == tag;
+     477              :   }
+     478              : 
+     479              :   /// @private [doxygen private]
+     480              :   c10::intrusive_ptr<caffe2::Blob> toBlob() &&;
+     481              : 
+     482              :   /// @private [doxygen private]
+     483              :   c10::intrusive_ptr<caffe2::Blob> toBlob() const&;
+     484              : 
+     485              :   // Capsule. No new callsites of these APIs should
+     486              :   // be introduced.
+     487              :   static inline IValue make_capsule(
+     488              :       intrusive_ptr<torch::CustomClassHolder> blob);
+     489              :   bool isCapsule() const {
+     490              :     return Tag::Capsule == tag;
+     491              :   }
+     492              :   c10::intrusive_ptr<torch::CustomClassHolder> toCapsule() &&;
+     493              :   c10::intrusive_ptr<torch::CustomClassHolder> toCapsule() const&;
+     494              : 
+     495              :   // Custom C++ classes
+     496              :   template <
+     497              :       typename T,
+     498              :       std::enable_if_t<
+     499              :           std::is_base_of<torch::CustomClassHolder, T>::value,
+     500              :           int> = 0>
+     501              :   IValue(intrusive_ptr<T> custom_class);
+     502              :   bool isCustomClass() const;
+     503              :   template <typename T>
+     504              :   c10::intrusive_ptr<T> toCustomClass() &&;
+     505              :   template <typename T>
+     506              :   c10::intrusive_ptr<T> toCustomClass() const&;
+     507              : 
+     508              :   // Tuple
+     509              :   IValue(c10::intrusive_ptr<ivalue::Tuple> v);
+     510              : 
+     511              :   template <
+     512              :       typename... Args,
+     513              :       std::enable_if_t<
+     514              :           !guts::disjunction<
+     515              :               std::is_lvalue_reference<Args>...,
+     516              :               guts::negation<std::is_constructible<IValue, Args>>...>::value,
+     517              :           std::nullptr_t> = nullptr>
+     518              :   IValue(const std::tuple<Args...>& t);
+     519              :   template <
+     520              :       typename... Args,
+     521              :       std::enable_if_t<
+     522              :           !guts::disjunction<
+     523              :               std::is_lvalue_reference<Args>...,
+     524              :               guts::negation<std::is_constructible<IValue, Args>>...>::value,
+     525              :           std::nullptr_t> = nullptr>
+     526              :   IValue(std::tuple<Args...>&& t);
+     527              :   bool isTuple() const {
+     528              :     return Tag::Tuple == tag;
+     529              :   }
+     530              :   c10::intrusive_ptr<ivalue::Tuple> toTuple() &&;
+     531              :   c10::intrusive_ptr<ivalue::Tuple> toTuple() const&;
+     532              :   C10_NODISCARD ivalue::Tuple& toTupleRef() const;
+     533              : 
+     534              :   // Double
+     535              :   IValue(double d) : tag(Tag::Double) {
+     536              :     payload.u.as_double = d;
+     537              :   }
+     538            0 :   bool isDouble() const {
+     539            0 :     return Tag::Double == tag;
+     540              :   }
+     541            0 :   double toDouble() const {
+     542            0 :     AT_ASSERT(isDouble());
+     543            0 :     return payload.u.as_double;
+     544              :   }
+     545              : 
+     546              :   // ComplexDouble
+     547              :   template <typename T>
+     548              :   IValue(c10::complex<T> c);
+     549            0 :   bool isComplexDouble() const { return Tag::ComplexDouble == tag; }
+     550              :   c10::complex<double> toComplexDouble() const;
+     551              : 
+     552              :   // Future
+     553              :   IValue(c10::intrusive_ptr<ivalue::Future> v);
+     554              :   bool isFuture() const {
+     555              :     return Tag::Future == tag;
+     556              :   }
+     557              :   c10::intrusive_ptr<ivalue::Future> toFuture() &&;
+     558              :   c10::intrusive_ptr<ivalue::Future> toFuture() const&;
+     559              : 
+     560              :   IValue(c10::intrusive_ptr<ivalue::Await> v);
+     561              :   bool isAwait() const {
+     562              :     return Tag::Await == tag;
+     563              :   }
+     564              :   c10::intrusive_ptr<ivalue::Await> toAwait() &&;
+     565              :   c10::intrusive_ptr<ivalue::Await> toAwait() const&;
+     566              : 
+     567              :   // RRef
+     568              :   IValue(c10::intrusive_ptr<c10::RRefInterface> v);
+     569              :   bool isRRef() const {
+     570              :     return Tag::RRef == tag;
+     571              :   }
+     572              :   c10::intrusive_ptr<c10::RRefInterface> toRRef() &&;
+     573              :   c10::intrusive_ptr<c10::RRefInterface> toRRef() const&;
+     574              : 
+     575              :   // Quantizer
+     576              :   IValue(c10::intrusive_ptr<at::Quantizer> v);
+     577              :   bool isQuantizer() const {
+     578              :     return Tag::Quantizer == tag;
+     579              :   }
+     580              :   c10::intrusive_ptr<at::Quantizer> toQuantizer() &&;
+     581              :   c10::intrusive_ptr<at::Quantizer> toQuantizer() const&;
+     582              : 
+     583              :   // Int
+     584              :   IValue(int64_t i) : tag(Tag::Int) {
+     585              :     payload.u.as_int = i;
+     586              :   }
+     587              : 
+     588              :   IValue(c10::SymInt i) {
+     589              :     if (auto mi = i.maybe_as_int()) {
+     590              :       tag = Tag::Int;
+     591              :       payload.u.as_int = *mi;
+     592              :     } else {
+     593              :       tag = Tag::SymInt;
+     594              :       payload.u.as_intrusive_ptr = i.toSymNode().release();
+     595              :     }
+     596              :   }
+     597              : 
+     598            0 :   bool isSymInt() const {
+     599            0 :     return Tag::SymInt == tag;
+     600              :   }
+     601              : 
+     602              :   c10::SymInt toSymInt() &&;
+     603              :   c10::SymInt toSymInt() const&;
+     604              : 
+     605              :   IValue(c10::SymFloat i) {
+     606              :     if (i.is_symbolic()) {
+     607              :       tag = Tag::SymFloat;
+     608              :       payload.u.as_intrusive_ptr = i.toSymNodeImpl().release();
+     609              :     } else {
+     610              :       tag = Tag::Double;
+     611              :       payload.u.as_double = i.as_float_unchecked();
+     612              :     }
+     613              :   }
+     614              : 
+     615              :   bool isSymFloat() const {
+     616              :     return Tag::SymFloat == tag;
+     617              :   }
+     618              : 
+     619              :   c10::SymFloat toSymFloat() &&;
+     620              :   c10::SymFloat toSymFloat() const&;
+     621              : 
+     622              :   IValue(c10::SymBool i) {
+     623              :      if (auto mi = i.maybe_as_bool()) {
+     624              :       tag = Tag::Bool;
+     625              :       payload.u.as_int = *mi;
+     626              :     } else {
+     627              :       tag = Tag::SymBool;
+     628              :       payload.u.as_intrusive_ptr = i.toSymNodeImpl().release();
+     629              :     }
+     630              :   }
+     631              : 
+     632              :   bool isSymBool() const {
+     633              :     return Tag::SymBool == tag;
+     634              :   }
+     635              : 
+     636              :   c10::SymBool toSymBool() &&;
+     637              :   c10::SymBool toSymBool() const&;
+     638              : 
+     639              :   // allow you to pass literals (3, 4) without ambiguity
+     640              :   IValue(int32_t i) : IValue(static_cast<int64_t>(i)) {}
+     641              : 
+     642            0 :   bool isInt() const {
+     643            0 :     return Tag::Int == tag;
+     644              :   }
+     645              : 
+     646            0 :   int64_t toInt() const {
+     647            0 :     AT_ASSERT(isInt());
+     648            0 :     return payload.u.as_int;
+     649              :   }
+     650              : 
+     651              :   // Bool
+     652              :   IValue(bool b) : tag(Tag::Bool) {
+     653              : #if defined(__clang__) && defined(__x86_64__)
+     654              :     // Initializing entire payload stops valgrind's from reporting
+     655              :     // "jump or move depends on uninitialised value" in IValue copy constructor
+     656              :     // See https://github.com/pytorch/pytorch/issues/37117
+     657              :     payload.u.as_int = b;
+     658              : #else
+     659              :     payload.u.as_bool = b;
+     660              : #endif
+     661              :   }
+     662              :   bool isBool() const {
+     663              :     return Tag::Bool == tag;
+     664              :   }
+     665              :   bool toBool() const {
+     666              :     AT_ASSERT(isBool());
+     667              :     return payload.u.as_bool;
+     668              :   }
+     669              : 
+     670              :   // IntList
+     671              :   bool isIntList() const;
+     672              :   bool isSymIntList() const;
+     673              :   c10::List<int64_t> toIntList() &&;
+     674              :   c10::List<int64_t> toIntList() const&;
+     675              :   std::vector<int64_t> toIntVector() const;
+     676              :   std::vector<c10::SymInt> toSymIntVector() const;
+     677              :   at::DimVector toDimVector() const;
+     678              : 
+     679              :   // ConstantString
+     680              :   IValue(c10::intrusive_ptr<ivalue::ConstantString> v);
+     681              :   IValue(std::string v);
+     682              :   IValue(const char* v) : IValue(std::string(v)) {}
+     683              :   IValue(c10::string_view v) : IValue(std::string(v)) {};
+     684              :   bool isString() const {
+     685              :     return Tag::String == tag;
+     686              :   }
+     687              :   c10::intrusive_ptr<ivalue::ConstantString> toString() &&;
+     688              :   c10::intrusive_ptr<ivalue::ConstantString> toString() const&;
+     689              :   const std::string& toStringRef() const;
+     690              :   c10::optional<std::reference_wrapper<const std::string>> toOptionalStringRef()
+     691              :       const;
+     692              :   c10::string_view toStringView() const;
+     693              : 
+     694              :   // DoubleList
+     695              :   bool isDoubleList() const;
+     696              :   c10::List<double> toDoubleList() &&;
+     697              :   c10::List<double> toDoubleList() const&;
+     698              :   std::vector<double> toDoubleVector() const;
+     699              : 
+     700              :   // ComplexDoubleList
+     701              :   bool isComplexDoubleList() const;
+     702              :   c10::List<c10::complex<double>> toComplexDoubleList() &&;
+     703              :   c10::List<c10::complex<double>> toComplexDoubleList() const&;
+     704              :   std::vector<c10::complex<double>> toComplexDoubleVector() const;
+     705              : 
+     706              :   // BoolList
+     707              :   bool isBoolList() const;
+     708              :   c10::List<bool> toBoolList() &&;
+     709              :   c10::List<bool> toBoolList() const&;
+     710              : 
+     711              :   // TensorList
+     712              :   bool isTensorList() const;
+     713              :   c10::List<at::Tensor> toTensorList() &&;
+     714              :   c10::List<at::Tensor> toTensorList() const&;
+     715              :   std::vector<at::Tensor> toTensorVector() const;
+     716              : 
+     717              :   // OptionalTensorList
+     718              :   bool isOptionalTensorList() const;
+     719              :   c10::List<c10::optional<at::Tensor>> toOptionalTensorList() &&;
+     720              :   c10::List<c10::optional<at::Tensor>> toOptionalTensorList() const&;
+     721              :   std::vector<c10::optional<at::Tensor>> toOptionalTensorVector() const;
+     722              : 
+     723              :   // GenericList
+     724              :   IValue(c10::List<IValue> v);
+     725              :   bool isList() const {
+     726              :     return Tag::GenericList == tag;
+     727              :   }
+     728              :   c10::List<IValue> toList() &&;
+     729              :   c10::List<IValue> toList() const&;
+     730              :   c10::ArrayRef<IValue> toListRef() const;
+     731              : 
+     732              :   // Some template constructors of IValue calls another constructor recursively.
+     733              :   // This SFINAEs the called constructor exists.
+     734              :   template <class T>
+     735              :   using enable_if_ivalue_constructible =
+     736              :       std::enable_if_t<std::is_constructible<IValue, T>::value, std::nullptr_t>;
+     737              : 
+     738              :   // The rule for lists is more complicated; the generic constructor is only
+     739              :   // acceptable if your element isn't SymInt.  If you do have a SymInt element,
+     740              :   // then you must also, at construction time, check if you can decay the list
+     741              :   // into an int list (this is MANDATORY, as at a use site we may expect
+     742              :   // toIntList to work even if at the call site you had a SymIntArrayRef
+     743              :   // argument).  In practice, only SymIntArrayRef is used this way, so we
+     744              :   // didn't bother making it work for the other constructors, we just make sure
+     745              :   // they're not selectable.
+     746              :   template <class T>
+     747              :   using enable_if_list_is_ivalue_constructible =
+     748              :       std::enable_if_t<std::is_constructible<IValue, T>::value &&
+     749              :         !std::is_same<T, c10::SymInt>::value, std::nullptr_t>;
+     750              : 
+     751              :   template <class T, enable_if_list_is_ivalue_constructible<T> = nullptr>
+     752              :   IValue(c10::List<T>&& v);
+     753              :   template <class T, enable_if_list_is_ivalue_constructible<T> = nullptr>
+     754              :   IValue(const c10::List<T>& v);
+     755              :   template <class T, enable_if_list_is_ivalue_constructible<T> = nullptr>
+     756              :   IValue(at::ArrayRef<T> v);
+     757              :   template <class T, enable_if_list_is_ivalue_constructible<T> = nullptr>
+     758              :   IValue(const std::vector<T>& v);
+     759              :   template <class T, size_t N>
+     760              :   IValue(std::array<T, N> v);
+     761              : 
+     762              :   // Manual constructors for lists of symints, which decay to int list if
+     763              :   // possible.  To avoid ambiguous overload situations, we template them
+     764              :   // to prevent implicit conversions
+     765              :   template <class T>
+     766              :   using enable_if_symint =
+     767              :       std::enable_if_t<std::is_same<T, c10::SymInt>::value, std::nullptr_t>;
+     768              : 
+     769              :   template <class T, enable_if_symint<T> = nullptr>
+     770              :   IValue(at::ArrayRef<T> v);
+     771              :   template <class T, enable_if_symint<T> = nullptr>
+     772              :   IValue(at::OptionalArrayRef<T> v);
+     773              :   template <class T, enable_if_symint<T> = nullptr>
+     774              :   IValue(const std::vector<T>& v);
+     775              : 
+     776              :   template <class T>
+     777              :   using enable_if_ilist_is_ivalue_constructible = std::enable_if_t<
+     778              :       std::is_constructible<IValue, T>::value &&
+     779              :           std::is_constructible<IValue, typename IListRef<T>::boxed_type>::value &&
+     780              :           !std::is_same<T, c10::SymInt>::value,
+     781              :       std::nullptr_t>;
+     782              : 
+     783              :   template <class T, enable_if_ilist_is_ivalue_constructible<T> = nullptr>
+     784              :   IValue(c10::IListRef<T> v);
+     785              : 
+     786              :   // GenericDict
+     787              :   IValue(c10::Dict<IValue, IValue> v);
+     788              :   bool isGenericDict() const {
+     789              :     return Tag::GenericDict == tag;
+     790              :   }
+     791              :   c10::Dict<IValue, IValue> toGenericDict() &&;
+     792              :   c10::Dict<IValue, IValue> toGenericDict() const&;
+     793              : 
+     794              :   template <class Key, class Value>
+     795              :   IValue(c10::Dict<Key, Value> v);
+     796              : 
+     797              :   template <class Key, class Value>
+     798              :   /// \cond
+     799              :   /// DOXYGEN_CANNOT_HANDLE_CONSTRUCTORS_WITH_MACROS_SO_EXCLUDE_THIS_LINE_FROM_DOXYGEN
+     800              :   C10_DEPRECATED_MESSAGE(
+     801              :       "IValues based on std::unordered_map<K, V> are slow and deprecated. Please use c10::Dict<K, V> instead.")
+     802              :       /// \endcond
+     803              :       IValue(std::unordered_map<Key, Value> v);
+     804              : 
+     805              :   template <class T, enable_if_ivalue_constructible<T> = nullptr>
+     806              :   IValue(c10::optional<T> v);
+     807              :   template <class T, enable_if_list_is_ivalue_constructible<T> = nullptr>
+     808              :   IValue(c10::OptionalArrayRef<T> v);
+     809              :   IValue(c10::nullopt_t);
+     810              : 
+     811              :   // ClassType
+     812              :   IValue(c10::intrusive_ptr<ivalue::Object> v);
+     813              :   bool isObject() const {
+     814              :     return tag == Tag::Object;
+     815              :   }
+     816              :   c10::intrusive_ptr<ivalue::Object> toObject() &&;
+     817              :   c10::intrusive_ptr<ivalue::Object> toObject() const&;
+     818              :   ivalue::Object& toObjectRef() const;
+     819              : 
+     820              :   torch::jit::Module toModule() const;
+     821              :   bool isModule() const;
+     822              : 
+     823              :   // PyObject
+     824              :   IValue(c10::intrusive_ptr<ivalue::PyObjectHolder> v);
+     825              :   bool isPyObject() const {
+     826              :     return tag == Tag::PyObject;
+     827              :   }
+     828              :   c10::intrusive_ptr<ivalue::PyObjectHolder> toPyObjectHolder() &&;
+     829              :   c10::intrusive_ptr<ivalue::PyObjectHolder> toPyObjectHolder() const&;
+     830              :   PyObject* toPyObject() const;
+     831              : 
+     832              :   // Enum
+     833              :   explicit IValue(c10::intrusive_ptr<ivalue::EnumHolder> v);
+     834              :   bool isEnum() const {
+     835              :     return tag == Tag::Enum;
+     836              :   }
+     837              :   c10::intrusive_ptr<ivalue::EnumHolder> toEnumHolder() &&;
+     838              :   c10::intrusive_ptr<ivalue::EnumHolder> toEnumHolder() const&;
+     839              : 
+     840              :   // None
+     841    105276376 :   IValue() : tag(Tag::None) {}
+     842            0 :   bool isNone() const {
+     843            0 :     return Tag::None == tag;
+     844              :   }
+     845              :   std::string toNone() const {
+     846              :     AT_ASSERT(isNone());
+     847              :     return "None";
+     848              :   }
+     849              : 
+     850              :   static IValue uninitialized() {
+     851              :     auto i = IValue();
+     852              :     i.tag = Tag::Uninitialized;
+     853              :     return i;
+     854              :   }
+     855              : 
+     856              :   // Scalar, which gets encoded as either an Int, a Double or a ComplexDouble
+     857              :   IValue(const at::Scalar& s) : IValue() {
+     858              :     // NB: do the symbolic versions first, as isFloatingPoint is true
+     859              :     // for both SymFloat and double
+     860              :     if (s.isSymInt()) {
+     861              :       tag = Tag::SymInt;
+     862              :       payload.u.as_intrusive_ptr = s.toSymInt().toSymNode().release();
+     863              :     } else if (s.isSymFloat()) {
+     864              :       tag = Tag::SymFloat;
+     865              :       payload.u.as_intrusive_ptr = s.toSymFloat().toSymNodeImpl().release();
+     866              :     } else if (s.isSymBool()) {
+     867              :       tag = Tag::SymBool;
+     868              :       payload.u.as_intrusive_ptr = s.toSymBool().toSymNodeImpl().release();
+     869              :     } else if (s.isFloatingPoint()) {
+     870              :       tag = Tag::Double;
+     871              :       payload.u.as_double = s.toDouble();
+     872              :     } else if (s.isComplex()) {
+     873              :       *this = s.toComplexDouble();
+     874              :     } else if (s.isBoolean()) {
+     875              :       tag = Tag::Bool;
+     876              :       payload.u.as_bool = s.toBool();
+     877              :     } else {
+     878              :       TORCH_INTERNAL_ASSERT_DEBUG_ONLY(s.isIntegral(false), "Unknown type in Scalar");
+     879              :       tag  = Tag::Int;
+     880              :       payload.u.as_int = s.toLong();
+     881              :     }
+     882              :   }
+     883              : 
+     884              :   bool isScalar() const {
+     885              :     return isDouble() || isInt() || isComplexDouble() || isBool() || isSymInt() || isSymFloat() || isSymBool();
+     886              :   }
+     887              : 
+     888              :   at::Scalar toScalar() const {
+     889              :     if (isDouble())
+     890              :       return toDouble();
+     891              :     else if (isInt())
+     892              :       return toInt();
+     893              :     else if (isComplexDouble())
+     894              :       return toComplexDouble();
+     895              :     else if (isBool())
+     896              :       return toBool();
+     897              :     else if (isSymInt())
+     898              :       return toSymInt();
+     899              :     else if (isSymFloat())
+     900              :       return toSymFloat();
+     901              :     else if (isSymBool())
+     902              :       return toSymBool();
+     903              :     throw std::runtime_error("IValue is not a Scalar");
+     904              :   }
+     905              : 
+     906              :   // Device
+     907              :   IValue(c10::Device d) : tag(Tag::Device) {
+     908              :     payload.u.as_device.type = d.type();
+     909              :     payload.u.as_device.index = d.index();
+     910              :   }
+     911              :   bool isDevice() const {
+     912              :     return Tag::Device == tag;
+     913              :   }
+     914              :   c10::Device toDevice() const {
+     915              :     AT_ASSERT(isDevice());
+     916              :     return c10::Device(payload.u.as_device.type, payload.u.as_device.index);
+     917              :   }
+     918              : 
+     919              :   // Stream
+     920              :   IValue(c10::Stream s)
+     921              :     : tag(Tag::Stream) {
+     922              :     auto v = c10::make_intrusive<ivalue::StreamData3Holder>(s.pack3());
+     923              :     payload.u.as_intrusive_ptr = v.release();
+     924              :   }
+     925              :   c10::Stream toStream() &&;
+     926              :   c10::Stream toStream() const &;
+     927              :   bool isStream() const { return Tag::Stream == tag; }
+     928              : 
+     929              :   // ScalarType
+     930              :   IValue(ScalarType t)
+     931              :       : IValue(static_cast<std::underlying_type<ScalarType>::type>(t)) {}
+     932              :   at::ScalarType toScalarType() const {
+     933              :     return static_cast<at::ScalarType>(toInt());
+     934              :   }
+     935              : 
+     936              :   // Layout
+     937              :   IValue(Layout l)
+     938              :       : IValue(static_cast<std::underlying_type<Layout>::type>(l)) {}
+     939              :   at::Layout toLayout() const {
+     940              :     return static_cast<at::Layout>(toInt());
+     941              :   }
+     942              : 
+     943              :   // MemoryFormat
+     944              :   IValue(MemoryFormat m)
+     945              :       : IValue(static_cast<std::underlying_type<MemoryFormat>::type>(m)) {}
+     946              :   at::MemoryFormat toMemoryFormat() const {
+     947              :     return static_cast<at::MemoryFormat>(toInt());
+     948              :   }
+     949              : 
+     950              :   // QScheme
+     951              :   IValue(at::QScheme qscheme) : tag(Tag::Int) {
+     952              :     payload.u.as_int = static_cast<int64_t>(qscheme);
+     953              :   }
+     954              : 
+     955              :   at::QScheme toQScheme() const {
+     956              :     return static_cast<at::QScheme>(toInt());
+     957              :   }
+     958              : 
+     959              :   // Dimname
+     960              :   IValue(at::Dimname dimname) : IValue(dimname.symbol().toQualString()) {}
+     961              : 
+     962              :   at::Dimname toDimname() const {
+     963              :     return at::Dimname::fromSymbol(Symbol::fromQualString(toStringRef()));
+     964              :   }
+     965              : 
+     966              :   // Generator
+     967              :   IValue(at::Generator g) : tag(Tag::Generator) {
+     968              :     payload.u.as_intrusive_ptr = null_to_undefined_tensor(g.unsafeReleaseGeneratorImpl());
+     969              :   }
+     970              :   bool isGenerator() const {
+     971              :     return Tag::Generator == tag;
+     972              :   }
+     973              :   at::Generator toGenerator() &&;
+     974              :   at::Generator toGenerator() const&;
+     975              : 
+     976              :   // for debugging
+     977            0 :   std::string tagKind() const {
+     978            0 :     switch (tag) {
+     979              : #define DEFINE_CASE(x) \
+     980              :   case Tag::x:         \
+     981              :     return #x;
+     982            0 :       TORCH_FORALL_TAGS(DEFINE_CASE)
+     983              : #undef DEFINE_CASE
+     984              :     }
+     985            0 :     return "InvalidTag(" + c10::guts::to_string(static_cast<int>(tag)) + ")";
+     986              :   }
+     987              : 
+     988              :   // generic v.to<at::Tensor>() implementations
+     989              :   // that can be used in special functions like pop/push
+     990              :   // that use template meta-programming.
+     991              :   // prefer the directly named methods when you can,
+     992              :   // since they are simpler to understand
+     993              : 
+     994              :   // Note: if you get linker errors saying one of these is missing,
+     995              :   // change it to ... && = delete; and you will see better error messages for
+     996              :   // why However, we cannot commit this because some compiler versions barf on
+     997              :   // it.
+     998              :   template <typename T>
+     999              :   T to() &&;
+    1000              :   template <typename T>
+    1001              :   typename c10::detail::ivalue_to_const_ref_overload_return<T>::type to() const&;
+    1002              : 
+    1003              :   // ToOptional: convert a IValue to the Optional obj that accepts both T and
+    1004              :   // None
+    1005              :   template <typename T>
+    1006              :   optional<T> toOptional();
+    1007              :   template <typename T>
+    1008              :   optional<T> toOptional() const;
+    1009              : 
+    1010              :   /// @private [doxygen private]
+    1011              :   /// this is a shallow comparison of two IValues to test the object identity
+    1012              :   bool isSameIdentity(const IValue& rhs) const;
+    1013              : 
+    1014              :   // Computes the "official" string representation of an IValue. This produces a
+    1015              :   // TorchScript expression that can be used to recreate an IValue with the same
+    1016              :   // value (e.g. when we are printing constants in the serializer).
+    1017              :   //
+    1018              :   // Callers can use `customFormatter` to override how `repr()` prints out an
+    1019              :   // IValue. This is useful if you have some other environment where you can
+    1020              :   // look up values, and you want to print a reference to that environment (like
+    1021              :   // the serializer's constant table).
+    1022              :   //
+    1023              :   // repr() is not necessarily defined on all objects!
+    1024              :   std::ostream& repr(
+    1025              :       std::ostream& stream,
+    1026              :       std::function<bool(std::ostream&, const IValue& v)> customFormatter)
+    1027              :       const;
+    1028              : 
+    1029              :   // Computes an "informal" string representation of an IValue. This should be
+    1030              :   // used for debugging, or servicing `print()`-like functions.
+    1031              :   // This is different from `repr()` in that there is no expectation that we can
+    1032              :   // exactly reconstruct an IValue from the output; feel free to use a
+    1033              :   // concise/pretty form
+    1034              :   TORCH_API friend std::ostream& operator<<(
+    1035              :       std::ostream& out,
+    1036              :       const IValue& v);
+    1037              : 
+    1038              :   bool isPtrType() const {
+    1039              :     if (isTensor()) {
+    1040              :       return payload.as_tensor.defined();
+    1041              :     }
+    1042              :     return isIntrusivePtrLegacyBehavior();
+    1043              :   }
+    1044              : 
+    1045              :   /// @private [doxygen private]
+    1046              :   const void* internalToPointer() const {
+    1047              :     TORCH_INTERNAL_ASSERT(
+    1048              :         isPtrType(), "Can only call internalToPointer() for pointer types");
+    1049              :     if (isTensor()) {
+    1050              :       return payload.as_tensor.unsafeGetTensorImpl();
+    1051              :     } else {
+    1052              :       return payload.u.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton()
+    1053              :         ? payload.u.as_intrusive_ptr : nullptr;
+    1054              :     }
+    1055              :   }
+    1056              : 
+    1057              :   template <typename T = c10::PlatformType>
+    1058              :   TypePtr type() const;
+    1059              : 
+    1060              :   // Detect aliased tensors.
+    1061              :   struct HashAliasedIValue {
+    1062              :     size_t hashTensor(const at::Tensor& ten) const {
+    1063              :       if (ten.is_sparse()) {
+    1064              :         // COO sparse tensors have a "values" tensor and an "indices" tensor
+    1065              :         // so this will detect overlap of sparse tensors that share a values
+    1066              :         // tensor, but not sparse tensors that share an indices tensor.
+    1067              :         return hashTensor(ten._values());
+    1068              :       } else if (ten.is_sparse_csr()) {
+    1069              :         // COO sparse tensors have a "values" tensor and an "indices" tensor
+    1070              :         // so this will detect overlap of sparse tensors that share a values
+    1071              :         // tensor, but not sparse tensors that share an indices tensor.
+    1072              :         return hashTensor(ten.values());
+    1073              :       }  else if (!ten.has_storage()) {
+    1074              :         // Opaque tensors such as the ones constructed by the MKL-DNN backend
+    1075              :         // don't have storage so we just use their TensorImpls.
+    1076              :         // TODO: Find way to expose alias info for opaque tensors.
+    1077              :         return reinterpret_cast<size_t>(ten.unsafeGetTensorImpl());
+    1078              :       } else {
+    1079              :         return reinterpret_cast<size_t>(
+    1080              :             ten.storage().unsafeGetStorageImpl());
+    1081              :       }
+    1082              :     }
+    1083              :     size_t operator()(const IValue& val) const {
+    1084              :       if (val.isTensor()) {
+    1085              :         return hashTensor(val.toTensor());
+    1086              :       }
+    1087              :       // If it is not a Tensor, then two mutable IValues alias each other only
+    1088              :       // if they are the same pointer.
+    1089              :       return val.payload.u.as_int;
+    1090              :     }
+    1091              :   };
+    1092              : 
+    1093              :   struct CompAliasedIValues {
+    1094              :     bool operator()(const IValue& lhs, const IValue& rhs) const {
+    1095              :       return lhs.isAliasOf(rhs);
+    1096              :     }
+    1097              :   };
+    1098              : 
+    1099              :   using HashAliasedIValues =
+    1100              :       std::unordered_set<IValue, HashAliasedIValue, CompAliasedIValues>;
+    1101              :   using HashAliasedIValueMap =
+    1102              :       std::unordered_map<IValue, IValue, HashAliasedIValue, CompAliasedIValues>;
+    1103              : 
+    1104              :   // Chechs if this and rhs has a subvalues in common.
+    1105              :   // [t1,t2] and [t2, t3] returns true.
+    1106              :   bool overlaps(const IValue& rhs) const;
+    1107              : 
+    1108              :   // Inserts all subvalues of this in subValues.
+    1109              :   void getSubValues(HashAliasedIValues& subValues) const;
+    1110              : 
+    1111              :   // Apply visitor to every subvalue.
+    1112              :   // TODO: There are several places that recurse over IValue. This is fragile.
+    1113              :   // This visitor should be used to recurse over ivalues.
+    1114              :   void visit(const std::function<bool(const IValue&)>& visitor) const;
+    1115              :   IValue deepcopy(c10::optional<at::Device> device = c10::nullopt) const;
+    1116              :   IValue deepcopy(
+    1117              :       HashAliasedIValueMap& memo,
+    1118              :       c10::optional<at::Device> device = c10::nullopt) const;
+    1119              : 
+    1120              :  private:
+    1121              :   static c10::intrusive_ptr_target* null_to_undefined_tensor(c10::intrusive_ptr_target* p) {
+    1122              :     return p ? p : static_cast<c10::intrusive_ptr_target*>(c10::UndefinedTensorImpl::singleton());
+    1123              :   }
+    1124              : 
+    1125              :   static bool ptrEqual(const IValue& lhs, const IValue& rhs);
+    1126              :   // NOTE: IValue tags are intentionally private. In the future we may encode
+    1127              :   // this value different (e.g. using NaN boxing), and this would make it more
+    1128              :   // costly to determine the tag for all types vs just determining if something
+    1129              :   // is a particular type. Instead we want clients to use the `isX` methods when
+    1130              :   // possible. If for perf. reasons you really, absolutely, must have a jump
+    1131              :   // table, then we can revisit this.
+    1132              :   enum class Tag : uint32_t {
+    1133              : #define DEFINE_TAG(x) x,
+    1134              :     TORCH_FORALL_TAGS(DEFINE_TAG)
+    1135              : #undef DEFINE_TAG
+    1136              :   };
+    1137              : 
+    1138              :   template <
+    1139              :       class T,
+    1140              :       class NullType = c10::detail::intrusive_target_default_null_type<T>>
+    1141              :   c10::intrusive_ptr<T, NullType> moveToIntrusivePtr();
+    1142              :   template <
+    1143              :       typename T,
+    1144              :       class NullType = c10::detail::intrusive_target_default_null_type<T>>
+    1145              :   c10::intrusive_ptr<T, NullType> toIntrusivePtr() const;
+    1146              : 
+    1147    522502036 :   void destroy() {
+    1148              :     // We carefully construct this call to both 1) avoid UB by using
+    1149              :     // the "wrong" one of as_tensor and as_intrusive_ptr and 2) enable
+    1150              :     // the compiler to generate the same code for each case. It is
+    1151              :     // surprisingly difficult to get this right.
+    1152    522502036 :     if (isTensor() || isIntrusivePtr()) {
+    1153    105276376 :       c10::intrusive_ptr_target* p = isTensor() ? payload.as_tensor.unsafeGetTensorImpl() : payload.u.as_intrusive_ptr;
+    1154    105276376 :       c10::intrusive_ptr<intrusive_ptr_target, c10::UndefinedTensorImpl>::reclaim(p);
+    1155              :       // No need to make this destructor call!
+    1156              :       // payload.as_tensor.~Tensor();
+    1157              :     }
+    1158    522502036 :   }
+    1159              : 
+    1160              :   C10_ALWAYS_INLINE void moveFrom(IValue&& rhs) noexcept {
+    1161    311949284 :     if (rhs.isTensor()) {
+    1162    311949284 :       new (&payload.as_tensor) at::Tensor(std::move(rhs.payload.as_tensor));
+    1163              :       // As far as I can tell, omitting the usual explicit destructor call
+    1164              :       // is not UB in and of itself, and it's a slight perf win. The
+    1165              :       // destructor is a no-op, because the moved-from Tensor is
+    1166              :       // effectively an intrusive_ptr in the null state, so we don't need
+    1167              :       // the behavior for correctness reasons either. Leaving this
+    1168              :       // explanatory comment, including commented-out destructor call, to
+    1169              :       // make this abundantly clear.
+    1170              :       //
+    1171              :       // rhs.payload.as_tensor.~Tensor();
+    1172              :     } else {
+    1173            0 :       payload.u = rhs.payload.u;
+    1174              :     }
+    1175    311949284 :     tag = rhs.tag;
+    1176    311949284 :     rhs.clearToNone();
+    1177    311949284 :   }
+    1178              : 
+    1179    311949284 :   void clearToNone() noexcept {
+    1180    311949284 :     payload.u.as_int = 0;
+    1181    311949284 :     tag = Tag::None;
+    1182    311949284 :   }
+    1183              : 
+    1184    417225660 :   bool isIntrusivePtr() const {
+    1185    417225660 :     switch (tag) {
+    1186    417225660 :       case Tag::None:
+    1187    417225660 :         return false;
+    1188            0 :       case Tag::Tensor:
+    1189            0 :         return false;
+    1190            0 :       case Tag::Storage:
+    1191            0 :         return true;
+    1192            0 :       case Tag::Generator:
+    1193            0 :         return true;
+    1194            0 :       case Tag::Double:
+    1195            0 :         return false;
+    1196            0 :       case Tag::ComplexDouble:
+    1197            0 :         return true;
+    1198            0 :       case Tag::Int:
+    1199            0 :         return false;
+    1200            0 :       case Tag::SymInt:
+    1201            0 :         return true;
+    1202            0 :       case Tag::SymFloat:
+    1203            0 :         return true;
+    1204            0 :       case Tag::SymBool:
+    1205            0 :         return true;
+    1206            0 :       case Tag::Bool:
+    1207            0 :         return false;
+    1208            0 :       case Tag::Tuple:
+    1209            0 :         return true;
+    1210            0 :       case Tag::String:
+    1211            0 :         return true;
+    1212            0 :       case Tag::Blob:
+    1213            0 :         return true;
+    1214            0 :       case Tag::GenericList:
+    1215            0 :         return true;
+    1216            0 :       case Tag::GenericDict:
+    1217            0 :         return true;
+    1218            0 :       case Tag::Future:
+    1219            0 :         return true;
+    1220            0 :       case Tag::Await:
+    1221            0 :         return true;
+    1222            0 :       case Tag::Device:
+    1223            0 :         return false;
+    1224            0 :       case Tag::Stream:
+    1225            0 :         return true;
+    1226            0 :       case Tag::Object:
+    1227            0 :         return true;
+    1228            0 :       case Tag::PyObject:
+    1229            0 :         return true;
+    1230            0 :       case Tag::Uninitialized:
+    1231            0 :         return false;
+    1232            0 :       case Tag::Capsule:
+    1233            0 :         return true;
+    1234            0 :       case Tag::RRef:
+    1235            0 :         return true;
+    1236            0 :       case Tag::Quantizer:
+    1237            0 :         return true;
+    1238            0 :       case Tag::Enum:
+    1239            0 :         return true;
+    1240              :     }
+    1241            0 :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(false, "unexpected tag ", static_cast<int>(tag));
+    1242              :     return false;
+    1243              :   }
+    1244              : 
+    1245              :   // Storage and Generator were treated specially when
+    1246              :   // is_intrusive_ptr was stored as explicit state. This getter
+    1247              :   // preserves the old behavior for use with WeakIValue for now.
+    1248              :   bool isIntrusivePtrLegacyBehavior() const {
+    1249              :     if (tag == Tag::Storage || tag == Tag::Generator) {
+    1250              :       return payload.u.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton();
+    1251              :     } else {
+    1252              :       return isIntrusivePtr();
+    1253              :     }
+    1254              :   }
+    1255              : 
+    1256              :   union Payload {
+    1257              :     // [TriviallyCopyablePayload]
+    1258              :     // We use a nested union here so that we can make the copy easy
+    1259              :     // and efficient in the non-tensor (i.e., trivially copyable)
+    1260              :     // case. Specifically, we do not have to do a switch-on-tag to
+    1261              :     // figure out which union member to assign; we can just use
+    1262              :     // TriviallyCopyablePayload::operator=.
+    1263              :     union TriviallyCopyablePayload {
+    1264    417225660 :       TriviallyCopyablePayload() : as_int(0) {}
+    1265              :       int64_t as_int;
+    1266              :       double as_double;
+    1267              :       bool as_bool;
+    1268              :       // Invariant: never nullptr; null state is represented as
+    1269              :       // c10::UndefinedTensorImpl::singleton() for consistency of
+    1270              :       // representation with Tensor.
+    1271              :       c10::intrusive_ptr_target* as_intrusive_ptr;
+    1272              :       struct {
+    1273              :         c10::DeviceType type;
+    1274              :         DeviceIndex index;
+    1275              :       } as_device;
+    1276              :     } u;
+    1277              :     at::Tensor as_tensor;
+    1278    417225660 :     Payload() : u() {}
+    1279    417225660 :     ~Payload() {}
+    1280              :   };
+    1281              : 
+    1282            0 :   IValue(const Payload& p, Tag t) : tag(t) {
+    1283            0 :     if (isTensor()) {
+    1284            0 :       new (&payload.as_tensor) at::Tensor(p.as_tensor);
+    1285              :     } else {
+    1286            0 :       payload.u = p.u;
+    1287              :     }
+    1288            0 :   }
+    1289              : 
+    1290              :   template <typename T>
+    1291              :   struct TagType {};
+    1292              : 
+    1293              :   friend MaybeOwnedTraits<IValue>;
+    1294              : 
+    1295              :   Payload payload;
+    1296              :   Tag tag{IValue::Tag::None};
+    1297              :   friend struct WeakIValue;
+    1298              : };
+    1299              : 
+    1300              : struct TORCH_API WeakIValue final {
+    1301              :   WeakIValue() = default;
+    1302              : 
+    1303              :   WeakIValue(const WeakIValue& rhs)
+    1304              :       : payload(rhs.payload),
+    1305              :         tag(rhs.tag),
+    1306              :         is_intrusive_ptr(rhs.is_intrusive_ptr) {
+    1307              :     if (is_intrusive_ptr && payload.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton()) {
+    1308              :       c10::raw::weak_intrusive_ptr::incref(payload.as_intrusive_ptr);
+    1309              :     }
+    1310              :   }
+    1311              :   WeakIValue(const IValue& rhs)
+    1312              :       : tag(rhs.tag),
+    1313              :     is_intrusive_ptr(rhs.isIntrusivePtrLegacyBehavior()) {
+    1314              :     if (rhs.isTensor()) {
+    1315              :       payload.as_intrusive_ptr = rhs.unsafeToTensorImpl();
+    1316              :       is_intrusive_ptr = true;
+    1317              :     } else {
+    1318              :       payload = rhs.payload.u;
+    1319              :     }
+    1320              :     if (is_intrusive_ptr) {
+    1321              :       if (payload.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton()) {
+    1322              :         c10::raw::weak_intrusive_ptr::incref(payload.as_intrusive_ptr);
+    1323              :       }
+    1324              :     }
+    1325              :   }
+    1326              :   WeakIValue(WeakIValue&& rhs) noexcept : WeakIValue() {
+    1327              :     swap(rhs);
+    1328              :   }
+    1329              :   ~WeakIValue() {
+    1330              :     if (is_intrusive_ptr && payload.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton()) {
+    1331              :       c10::raw::weak_intrusive_ptr::decref(payload.as_intrusive_ptr);
+    1332              :     }
+    1333              :   }
+    1334              :   WeakIValue& operator=(WeakIValue&& rhs) & noexcept {
+    1335              :     WeakIValue(std::move(rhs)).swap(*this); // this also sets rhs to None
+    1336              :     return *this;
+    1337              :   }
+    1338              :   WeakIValue& operator=(WeakIValue const& rhs) & {
+    1339              :     WeakIValue(rhs).swap(*this);
+    1340              :     return *this;
+    1341              :   }
+    1342              :   void swap(WeakIValue& rhs) noexcept {
+    1343              :     std::swap(payload, rhs.payload);
+    1344              :     std::swap(is_intrusive_ptr, rhs.is_intrusive_ptr);
+    1345              :     std::swap(tag, rhs.tag);
+    1346              :   }
+    1347              : 
+    1348              :   bool isSameIdentity(const WeakIValue& rhs) const {
+    1349              :     return payload.as_int == rhs.payload.as_int && tag == rhs.tag &&
+    1350              :         is_intrusive_ptr == rhs.is_intrusive_ptr;
+    1351              :   }
+    1352              : 
+    1353              :   IValue lock() const {
+    1354              :     if (!is_intrusive_ptr) {
+    1355              :       IValue::Payload newPayload;
+    1356              :       newPayload.u = payload;
+    1357              :       return IValue(newPayload, tag);
+    1358              :     }
+    1359              :     if (IValue::Tag::Tensor == tag) {
+    1360              :       auto temp = c10::weak_intrusive_ptr<at::TensorImpl, c10::UndefinedTensorImpl>::reclaim(
+    1361              :           static_cast<at::TensorImpl*>(payload.as_intrusive_ptr));
+    1362              :       c10::intrusive_ptr<at::TensorImpl, c10::UndefinedTensorImpl> ip(temp.lock());
+    1363              :       temp.release();
+    1364              :       if (!ip) {
+    1365              :         return IValue();
+    1366              :       } else {
+    1367              :         return IValue(at::Tensor(std::move(ip)));
+    1368              :       }
+    1369              :     } else {
+    1370              :       auto temp = c10::weak_intrusive_ptr<c10::intrusive_ptr_target>::reclaim(
+    1371              :           payload.as_intrusive_ptr == c10::UndefinedTensorImpl::singleton()
+    1372              :           ? nullptr
+    1373              :           : payload.as_intrusive_ptr);
+    1374              :       IValue::Payload pl;
+    1375              :       pl.u.as_intrusive_ptr = temp.lock().release();
+    1376              :       temp.release();
+    1377              :       if (!pl.u.as_intrusive_ptr) {
+    1378              :         return IValue();
+    1379              :       } else {
+    1380              :         return IValue(pl, tag);
+    1381              :       }
+    1382              :     }
+    1383              :   }
+    1384              : 
+    1385              :   size_t use_count() const noexcept {
+    1386              :     if (!is_intrusive_ptr) {
+    1387              :       return 1;
+    1388              :     }
+    1389              :     auto temp = c10::weak_intrusive_ptr<c10::intrusive_ptr_target, c10::UndefinedTensorImpl>::reclaim(
+    1390              :         payload.as_intrusive_ptr);
+    1391              :     size_t result = temp.use_count();
+    1392              :     temp.release();
+    1393              :     return result;
+    1394              :   }
+    1395              : 
+    1396              :   size_t weak_use_count() const noexcept {
+    1397              :     if (!is_intrusive_ptr) {
+    1398              :       return 1;
+    1399              :     }
+    1400              :     auto temp = c10::weak_intrusive_ptr<c10::intrusive_ptr_target, c10::UndefinedTensorImpl>::reclaim(
+    1401              :         payload.as_intrusive_ptr);
+    1402              :     size_t result = temp.weak_use_count();
+    1403              :     temp.release();
+    1404              :     return result;
+    1405              :   }
+    1406              :   size_t hash() const {
+    1407              :     return payload.as_int;
+    1408              :   }
+    1409              : 
+    1410              :  private:
+    1411              :   using Payload = IValue::Payload::TriviallyCopyablePayload;
+    1412              :   Payload payload;
+    1413              :   IValue::Tag tag{IValue::Tag::None};
+    1414              :   bool is_intrusive_ptr{false};
+    1415              : };
+    1416              : 
+    1417              : // An owning pointer to a type. When the type is class type, it requires a pair
+    1418              : // of shared_ptrs to the class type and its owning CU, so that the class type is
+    1419              : // guaranteed to stay alive as long as we hold this object.
+    1420              : struct TORCH_API StrongTypePtr {
+    1421              :   StrongTypePtr(
+    1422              :       std::shared_ptr<torch::jit::CompilationUnit> cu,
+    1423              :       TypePtr type);
+    1424              : 
+    1425              :   std::shared_ptr<torch::jit::CompilationUnit> cu_;
+    1426              :   TypePtr type_;
+    1427              : };
+    1428              : 
+    1429              : // [Constant Object Weak CompilationUnit Reference]
+    1430              : // A non owning pointer to a type. When a class get inserted as a constant
+    1431              : // into a graph, if we used a strong pointer we would have a circular reference
+    1432              : // from Object -> CompilationUnit and CompilationUnit -> Graph (which owns the
+    1433              : // Constant Object)
+    1434              : struct TORCH_API WeakTypePtr {
+    1435              :   WeakTypePtr(
+    1436              :       std::weak_ptr<torch::jit::CompilationUnit> cu,
+    1437              :       TypePtr type);
+    1438              : 
+    1439              :   std::weak_ptr<torch::jit::CompilationUnit> cu_;
+    1440              :   TypePtr type_;
+    1441              : };
+    1442              : 
+    1443              : // internal build errors with std::variant :/
+    1444              : struct WeakOrStrongCompilationUnit {
+    1445              :   explicit WeakOrStrongCompilationUnit(
+    1446              :       std::shared_ptr<torch::jit::CompilationUnit> shared_cu) : strong_ptr_(std::move(shared_cu)), weak_ptr_(c10::nullopt) {}
+    1447              : 
+    1448              :   explicit WeakOrStrongCompilationUnit(
+    1449              :       std::weak_ptr<torch::jit::CompilationUnit> weak_cu) : strong_ptr_(c10::nullopt), weak_ptr_(std::move(weak_cu)) {}
+    1450              : 
+    1451              :   std::shared_ptr<torch::jit::CompilationUnit> getStrongRefOrThrow() const {
+    1452              :     TORCH_INTERNAL_ASSERT(strong_ptr_ != c10::nullopt);
+    1453              :     return *strong_ptr_;
+    1454              :   }
+    1455              : 
+    1456              :   std::weak_ptr<torch::jit::CompilationUnit> getWeakRefOrThrow() const {
+    1457              :     TORCH_INTERNAL_ASSERT(weak_ptr_ != c10::nullopt);
+    1458              :     return *weak_ptr_;
+    1459              :   }
+    1460              : 
+    1461              :   bool holdingStrongRef() const {
+    1462              :     return strong_ptr_ != c10::nullopt;
+    1463              :   }
+    1464              : 
+    1465              :   bool holdingEmptyStrongRef() const {
+    1466              :     return holdingStrongRef() && *strong_ptr_ == nullptr;
+    1467              :   }
+    1468              : 
+    1469              :   c10::optional<std::shared_ptr<torch::jit::CompilationUnit>> strong_ptr_;
+    1470              :   c10::optional<std::weak_ptr<torch::jit::CompilationUnit>> weak_ptr_;
+    1471              : };
+    1472              : 
+    1473              : // An Object will hold a non-owning Compilation Unit reference if it is a
+    1474              : // Constant in the graph and a Owning reference otherwise
+    1475              : struct TORCH_API WeakOrStrongTypePtr {
+    1476              :   explicit WeakOrStrongTypePtr(WeakTypePtr weak)
+    1477              :       : cu_(WeakOrStrongCompilationUnit(std::move(weak.cu_))), type_(std::move(weak.type_)) {}
+    1478              :   explicit WeakOrStrongTypePtr(StrongTypePtr strong)
+    1479              :       : cu_(WeakOrStrongCompilationUnit(std::move(strong.cu_))), type_(std::move(strong.type_)) {}
+    1480              :   explicit WeakOrStrongTypePtr(WeakOrStrongCompilationUnit cu, TypePtr type)
+    1481              :       : cu_(std::move(cu)), type_(std::move(type)) {}
+    1482              :   WeakTypePtr asWeakTypePtr() const;
+    1483              : 
+    1484              :   WeakOrStrongCompilationUnit cu_;
+    1485              :   TypePtr type_;
+    1486              : 
+    1487              :   bool holds_strong_ref() const {
+    1488              :     return cu_.holdingStrongRef();
+    1489              :   }
+    1490              : 
+    1491              :   bool holds_empty_strong_ref() const {
+    1492              :     return cu_.holdingEmptyStrongRef();
+    1493              :   }
+    1494              : };
+    1495              : 
+    1496              : 
+    1497              : } // namespace c10
+    1498              : 
+    1499              : #include <ATen/core/ivalue_inl.h>  // IWYU pragma: keep
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/ivalue_inl.h.func-c.html b/html/libtorch/include/ATen/core/ivalue_inl.h.func-c.html new file mode 100644 index 0000000..555beaf --- /dev/null +++ b/html/libtorch/include/ATen/core/ivalue_inl.h.func-c.html @@ -0,0 +1,299 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/ivalue_inl.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - ivalue_inl.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:8.2 %494
Test Date:2024-04-30 13:17:26Functions:3.6 %281
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1010generic_toIN2at6TensorEEENS_8optionalIT_EENS_6IValueENS_10_fake_typeIS5_EE0
_ZN3c10L20createVectorFromListIdEESt6vectorIT_SaIS2_EEPKNS_6detail8ListImplE0
_ZN3c10L20createVectorFromListIN2at6TensorEEESt6vectorIT_SaIS4_EEPKNS_6detail8ListImplE0
_ZN3c10L20createVectorFromListINS_6SymIntEEESt6vectorIT_SaIS3_EEPKNS_6detail8ListImplE0
_ZN3c10L20createVectorFromListINS_7complexIdEEEESt6vectorIT_SaIS4_EEPKNS_6detail8ListImplE0
_ZN3c10L20createVectorFromListINS_8optionalIN2at6TensorEEEEESt6vectorIT_SaIS6_EEPKNS_6detail8ListImplE0
_ZN3c10L20createVectorFromListIdEESt6vectorIT_SaIS2_EEPKNS_6detail8ListImplE0
_ZN3c10L20createVectorFromListIlEESt6vectorIT_SaIS2_EEPKNS_6detail8ListImplE0
_ZN3c10L24createVectorLikeFromListISt6vectorIdSaIdEEEET_PKNS_6detail8ListImplE0
_ZN3c10L24createVectorLikeFromListINS_11SmallVectorIlLj5EEEEET_PKNS_6detail8ListImplE0
_ZN3c10L24createVectorLikeFromListISt6vectorIN2at6TensorESaIS3_EEEET_PKNS_6detail8ListImplE0
_ZN3c10L24createVectorLikeFromListISt6vectorINS_6SymIntESaIS2_EEEET_PKNS_6detail8ListImplE0
_ZN3c10L24createVectorLikeFromListISt6vectorINS_7complexIdEESaIS3_EEEET_PKNS_6detail8ListImplE0
_ZN3c10L24createVectorLikeFromListISt6vectorINS_8optionalIN2at6TensorEEESaIS5_EEEET_PKNS_6detail8ListImplE0
_ZN3c10L24createVectorLikeFromListISt6vectorIdSaIdEEEET_PKNS_6detail8ListImplE0
_ZN3c10L24createVectorLikeFromListISt6vectorIlSaIlEEEET_PKNS_6detail8ListImplE0
_ZNK3c106IValue14toIntrusivePtrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS2_EEEENS_13intrusive_ptrIT_T0_EEv0
_ZNK3c106IValue14toIntrusivePtrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS2_EEEENS_13intrusive_ptrIT_T0_EEv0
_ZNK3c106IValue14toIntrusivePtrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS3_EEEENS_13intrusive_ptrIT_T0_EEv0
_ZNK3c106IValue15toComplexDoubleEv0
_ZNKR3c106IValue2toINS_6SymIntEEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv0
_ZNKR3c106IValue2toINS_7complexIdEEEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv0
_ZNKR3c106IValue2toINS_8optionalIN2at6TensorEEEEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv0
_ZNKR3c106IValue2toIdEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv0
_ZNKR3c106IValue2toIlEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv0
_ZNKR3c106IValue8toSymIntEv0
_ZNKR3c106IValue8toTensorEv0
_ZNO3c106IValue2toIN2at6TensorEEET_v0
_ZNKR3c106IValue2toIN2at6TensorEEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv0
_ZNO3c106IValue2toIN2at6TensorEEET_v0
_ZNO3c106IValue8toTensorEv0
_ZN3c106IValueC2IN2at6TensorELDnEEENS_8optionalIT_EE105276376
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/ivalue_inl.h.func.html b/html/libtorch/include/ATen/core/ivalue_inl.h.func.html new file mode 100644 index 0000000..cfb6ec8 --- /dev/null +++ b/html/libtorch/include/ATen/core/ivalue_inl.h.func.html @@ -0,0 +1,299 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/ivalue_inl.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - ivalue_inl.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:8.2 %494
Test Date:2024-04-30 13:17:26Functions:3.6 %281
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1010generic_toIN2at6TensorEEENS_8optionalIT_EENS_6IValueENS_10_fake_typeIS5_EE0
_ZN3c106IValueC2IN2at6TensorELDnEEENS_8optionalIT_EE105276376
_ZN3c10L20createVectorFromListIdEESt6vectorIT_SaIS2_EEPKNS_6detail8ListImplE0
_ZN3c10L20createVectorFromListIN2at6TensorEEESt6vectorIT_SaIS4_EEPKNS_6detail8ListImplE0
_ZN3c10L20createVectorFromListINS_6SymIntEEESt6vectorIT_SaIS3_EEPKNS_6detail8ListImplE0
_ZN3c10L20createVectorFromListINS_7complexIdEEEESt6vectorIT_SaIS4_EEPKNS_6detail8ListImplE0
_ZN3c10L20createVectorFromListINS_8optionalIN2at6TensorEEEEESt6vectorIT_SaIS6_EEPKNS_6detail8ListImplE0
_ZN3c10L20createVectorFromListIdEESt6vectorIT_SaIS2_EEPKNS_6detail8ListImplE0
_ZN3c10L20createVectorFromListIlEESt6vectorIT_SaIS2_EEPKNS_6detail8ListImplE0
_ZN3c10L24createVectorLikeFromListISt6vectorIdSaIdEEEET_PKNS_6detail8ListImplE0
_ZN3c10L24createVectorLikeFromListINS_11SmallVectorIlLj5EEEEET_PKNS_6detail8ListImplE0
_ZN3c10L24createVectorLikeFromListISt6vectorIN2at6TensorESaIS3_EEEET_PKNS_6detail8ListImplE0
_ZN3c10L24createVectorLikeFromListISt6vectorINS_6SymIntESaIS2_EEEET_PKNS_6detail8ListImplE0
_ZN3c10L24createVectorLikeFromListISt6vectorINS_7complexIdEESaIS3_EEEET_PKNS_6detail8ListImplE0
_ZN3c10L24createVectorLikeFromListISt6vectorINS_8optionalIN2at6TensorEEESaIS5_EEEET_PKNS_6detail8ListImplE0
_ZN3c10L24createVectorLikeFromListISt6vectorIdSaIdEEEET_PKNS_6detail8ListImplE0
_ZN3c10L24createVectorLikeFromListISt6vectorIlSaIlEEEET_PKNS_6detail8ListImplE0
_ZNK3c106IValue14toIntrusivePtrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS2_EEEENS_13intrusive_ptrIT_T0_EEv0
_ZNK3c106IValue14toIntrusivePtrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS2_EEEENS_13intrusive_ptrIT_T0_EEv0
_ZNK3c106IValue14toIntrusivePtrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS3_EEEENS_13intrusive_ptrIT_T0_EEv0
_ZNK3c106IValue15toComplexDoubleEv0
_ZNKR3c106IValue2toINS_6SymIntEEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv0
_ZNKR3c106IValue2toINS_7complexIdEEEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv0
_ZNKR3c106IValue2toINS_8optionalIN2at6TensorEEEEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv0
_ZNKR3c106IValue2toIdEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv0
_ZNKR3c106IValue2toIlEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv0
_ZNKR3c106IValue8toSymIntEv0
_ZNKR3c106IValue8toTensorEv0
_ZNO3c106IValue2toIN2at6TensorEEET_v0
_ZNKR3c106IValue2toIN2at6TensorEEENS_6detail35ivalue_to_const_ref_overload_returnIT_E4typeEv0
_ZNO3c106IValue2toIN2at6TensorEEET_v0
_ZNO3c106IValue8toTensorEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/ivalue_inl.h.gcov.html b/html/libtorch/include/ATen/core/ivalue_inl.h.gcov.html new file mode 100644 index 0000000..f917b32 --- /dev/null +++ b/html/libtorch/include/ATen/core/ivalue_inl.h.gcov.html @@ -0,0 +1,2570 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/ivalue_inl.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - ivalue_inl.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:8.2 %494
Test Date:2024-04-30 13:17:26Functions:3.6 %281
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <condition_variable>
+       4              : #include <memory>
+       5              : #include <type_traits>
+       6              : #include <utility>
+       7              : 
+       8              : #include <ATen/core/Dict.h>
+       9              : #include <ATen/core/List.h>
+      10              : #include <ATen/core/IListRef.h>
+      11              : #include <ATen/core/functional.h>
+      12              : #include <ATen/core/jit_type.h>
+      13              : #include <ATen/core/qualified_name.h>
+      14              : #include <ATen/core/rref_interface.h>
+      15              : #include <ATen/core/symbol.h>
+      16              : #include <c10/core/DeviceGuard.h>
+      17              : #include <c10/core/Event.h>
+      18              : #include <c10/core/Scalar.h>
+      19              : #include <c10/core/Stream.h>
+      20              : #include <c10/core/StreamGuard.h>
+      21              : #include <c10/core/TensorImpl.h>
+      22              : #include <c10/core/UndefinedTensorImpl.h>
+      23              : #include <c10/core/impl/DeviceGuardImplInterface.h>
+      24              : #include <c10/util/FunctionRef.h>
+      25              : #include <c10/util/Logging.h>
+      26              : #include <c10/util/hash.h>
+      27              : #include <c10/util/intrusive_ptr.h>
+      28              : #include <c10/util/irange.h>
+      29              : 
+      30              : namespace torch {
+      31              : namespace jit {
+      32              : struct Function;
+      33              : struct CompilationUnit;
+      34              : } // namespace jit
+      35              : TORCH_API bool isCustomClass(const c10::IValue& v);
+      36              : } // namespace torch
+      37              : namespace c10 {
+      38              : struct IValue;
+      39              : struct ClassType;
+      40              : struct TupleType;
+      41              : struct EnumType;
+      42              : struct InferredType;
+      43              : 
+      44              : // For custom class __init__ registration, we need to pass in a function
+      45              : // that looks like this: [](IValue x, args...)
+      46              : 
+      47              : // However, make_boxed_from_unboxed_functor.h automatically sets the input types
+      48              : // of the function by introspecting the types of the functor (which is IValue in
+      49              : // this case). However, we need the type it binds to be Foo.
+      50              : 
+      51              : // Instead, we pass in a lambda [](ivalue_holder<CurClass> x, args...) from
+      52              : // which getTypePtr can recover the original class pointer.
+      53              : 
+      54              : template <typename TaggedCapsuleType>
+      55              : struct tagged_capsule {
+      56              :   IValue ivalue;
+      57              : };
+      58              : 
+      59              : template <class T, class NullType>
+      60              : c10::intrusive_ptr<T, NullType> IValue::moveToIntrusivePtr() {
+      61              :   auto t = c10::intrusive_ptr<T, NullType>::reclaim(
+      62              :       payload.u.as_intrusive_ptr == c10::UndefinedTensorImpl::singleton()
+      63              :       ? NullType::singleton()
+      64              :       : static_cast<T*>(payload.u.as_intrusive_ptr));
+      65              :   clearToNone();
+      66              :   return t;
+      67              : }
+      68              : template <typename T, class NullType>
+      69            0 : c10::intrusive_ptr<T, NullType> IValue::toIntrusivePtr() const {
+      70            0 :   if (payload.u.as_intrusive_ptr == c10::UndefinedTensorImpl::singleton()) {
+      71            0 :     return c10::intrusive_ptr<T, NullType>();
+      72              :   }
+      73            0 :   c10::raw::intrusive_ptr::incref(payload.u.as_intrusive_ptr);
+      74              :   return c10::intrusive_ptr<T, NullType>::reclaim(
+      75            0 :       static_cast<T*>(payload.u.as_intrusive_ptr));
+      76              : }
+      77              : 
+      78              : template <class T, class U>
+      79              : intrusive_ptr<T> static_intrusive_pointer_cast(intrusive_ptr<U> r) {
+      80              :   return intrusive_ptr<T>::reclaim(static_cast<T*>(r.release()));
+      81              : }
+      82              : 
+      83              : template <class T, class U>
+      84              : intrusive_ptr<T> dynamic_intrusive_pointer_cast(intrusive_ptr<U> r) {
+      85              :   return intrusive_ptr<T>::reclaim(dynamic_cast<T*>(r.release()));
+      86              : }
+      87              : 
+      88              : inline c10::intrusive_ptr<ivalue::Future> IValue::toFuture() && {
+      89              :   AT_ASSERT(isFuture(), "Expected Future but got ", tagKind());
+      90              :   return moveToIntrusivePtr<ivalue::Future>();
+      91              : }
+      92              : inline c10::intrusive_ptr<ivalue::Future> IValue::toFuture() const& {
+      93              :   AT_ASSERT(isFuture(), "Expected Future but got ", tagKind());
+      94              :   return toIntrusivePtr<ivalue::Future>();
+      95              : }
+      96              : inline c10::intrusive_ptr<ivalue::Await> IValue::toAwait() && {
+      97              :   AT_ASSERT(isAwait(), "Expected Await but got ", tagKind());
+      98              :   return moveToIntrusivePtr<ivalue::Await>();
+      99              : }
+     100              : inline c10::intrusive_ptr<ivalue::Await> IValue::toAwait() const& {
+     101              :   AT_ASSERT(isAwait(), "Expected Await but got ", tagKind());
+     102              :   return toIntrusivePtr<ivalue::Await>();
+     103              : }
+     104              : inline c10::intrusive_ptr<c10::RRefInterface> IValue::toRRef() && {
+     105              :   AT_ASSERT(isRRef(), "Expected RRef but got ", tagKind());
+     106              :   return moveToIntrusivePtr<c10::RRefInterface>();
+     107              : }
+     108              : inline c10::intrusive_ptr<c10::RRefInterface> IValue::toRRef() const& {
+     109              :   AT_ASSERT(isRRef(), "Expected RRef but got ", tagKind());
+     110              :   return toIntrusivePtr<c10::RRefInterface>();
+     111              : }
+     112              : inline c10::intrusive_ptr<at::Quantizer> IValue::toQuantizer() && {
+     113              :   AT_ASSERT(isQuantizer(), "Expected Quantizer but got ", tagKind());
+     114              :   return moveToIntrusivePtr<at::Quantizer>();
+     115              : }
+     116              : inline c10::intrusive_ptr<at::Quantizer> IValue::toQuantizer() const& {
+     117              :   AT_ASSERT(isQuantizer(), "Expected Quantizer but got ", tagKind());
+     118              :   return toIntrusivePtr<at::Quantizer>();
+     119              : }
+     120              : inline c10::intrusive_ptr<ivalue::ConstantString> IValue::toString() && {
+     121              :   AT_ASSERT(isString(), "Expected String but got ", tagKind());
+     122              :   return moveToIntrusivePtr<ivalue::ConstantString>();
+     123              : }
+     124              : inline c10::intrusive_ptr<ivalue::ConstantString> IValue::toString() const& {
+     125              :   AT_ASSERT(isString(), "Expected String but got ", tagKind());
+     126              :   return toIntrusivePtr<ivalue::ConstantString>();
+     127              : }
+     128              : inline c10::intrusive_ptr<ivalue::Object> IValue::toObject() && {
+     129              :   AT_ASSERT(isObject(), "Expected Object but got ", tagKind());
+     130              :   return moveToIntrusivePtr<ivalue::Object>();
+     131              : }
+     132              : inline c10::intrusive_ptr<ivalue::Object> IValue::toObject() const& {
+     133              :   AT_ASSERT(isObject(), "Expected Object but got ", tagKind());
+     134              :   return toIntrusivePtr<ivalue::Object>();
+     135              : }
+     136              : inline c10::intrusive_ptr<ivalue::PyObjectHolder> IValue::
+     137              :     toPyObjectHolder() && {
+     138              :   TORCH_INTERNAL_ASSERT(isPyObject(), "Expected PyObject but got ", tagKind());
+     139              :   return moveToIntrusivePtr<ivalue::PyObjectHolder>();
+     140              : }
+     141              : inline c10::intrusive_ptr<ivalue::PyObjectHolder> IValue::toPyObjectHolder()
+     142              :     const& {
+     143              :   TORCH_INTERNAL_ASSERT(isPyObject(), "Expected PyObject but got ", tagKind());
+     144              :   return toIntrusivePtr<ivalue::PyObjectHolder>();
+     145              : }
+     146              : inline c10::intrusive_ptr<ivalue::EnumHolder> IValue::toEnumHolder() && {
+     147              :   TORCH_INTERNAL_ASSERT(isEnum(), "Expected Enum but got ", tagKind());
+     148              :   return moveToIntrusivePtr<ivalue::EnumHolder>();
+     149              : }
+     150              : inline c10::intrusive_ptr<ivalue::EnumHolder> IValue::toEnumHolder() const& {
+     151              :   TORCH_INTERNAL_ASSERT(isEnum(), "Expected Enum but got ", tagKind());
+     152              :   return toIntrusivePtr<ivalue::EnumHolder>();
+     153              : }
+     154            0 : inline c10::complex<double> IValue::toComplexDouble() const {
+     155            0 :   TORCH_INTERNAL_ASSERT(isComplexDouble(), "Expected ComplexDouble but got ", tagKind());
+     156            0 :   auto ptr = toIntrusivePtr<ivalue::ComplexHolder>();
+     157            0 :   return (*ptr).val;
+     158            0 : }
+     159            0 : inline at::Tensor IValue::toTensor() && {
+     160            0 :   if (C10_UNLIKELY(!isTensor())) {
+     161            0 :     reportToTensorTypeError();
+     162              :   }
+     163            0 :   auto result = std::move(payload.as_tensor);
+     164              :   // As far as I can tell, omitting the usual explicit destructor call
+     165              :   // is not UB in and of itself, and it's a slight perf win. The
+     166              :   // destructor is a no-op, because the moved-from Tensor is
+     167              :   // effectively an intrusive_ptr in the null state, so we don't need
+     168              :   // the behavior for correctness reasons either. Leaving this
+     169              :   // explanatory comment, including commented-out destructor call, to
+     170              :   // make this abundantly clear.
+     171              :   //
+     172              :   // payload.as_tensor.~Tensor();
+     173            0 :   clearToNone();
+     174            0 :   return result;
+     175              : }
+     176              : inline at::Tensor& IValue::toTensor() & {
+     177              :   if (C10_UNLIKELY(!isTensor())) {
+     178              :     reportToTensorTypeError();
+     179              :   }
+     180              :   return payload.as_tensor;
+     181              : }
+     182            0 : inline const at::Tensor& IValue::toTensor() const& {
+     183            0 :   if (C10_UNLIKELY(!isTensor())) {
+     184            0 :     reportToTensorTypeError();
+     185              :   }
+     186            0 :   return payload.as_tensor;
+     187              : }
+     188              : inline c10::Storage IValue::toStorage() && {
+     189              :   AT_ASSERT(isStorage(), "Expected Storage but got ", tagKind());
+     190              :   return c10::Storage(
+     191              :       moveToIntrusivePtr<at::StorageImpl>());
+     192              : }
+     193              : inline c10::Storage IValue::toStorage() const& {
+     194              :   AT_ASSERT(isStorage(), "Expected Storage but got ", tagKind());
+     195              :   return c10::Storage(toIntrusivePtr<at::StorageImpl>());
+     196              : }
+     197              : inline c10::Stream IValue::toStream() && {
+     198              :   AT_ASSERT(isStream(), "Expected Stream but got ", tagKind());
+     199              :   auto ptr = toIntrusivePtr<ivalue::StreamData3Holder>();
+     200              :   return c10::Stream::unpack3((*ptr).val.stream_id,
+     201              :                               (*ptr).val.device_index,
+     202              :                               (*ptr).val.device_type);
+     203              : }
+     204              : inline c10::Stream IValue::toStream() const& {
+     205              :   AT_ASSERT(isStream(), "Expected Stream but got ", tagKind());
+     206              :   auto ptr = toIntrusivePtr<ivalue::StreamData3Holder>();
+     207              :   return c10::Stream::unpack3((*ptr).val.stream_id,
+     208              :                               (*ptr).val.device_index,
+     209              :                               (*ptr).val.device_type);
+     210              : }
+     211              : inline c10::intrusive_ptr<caffe2::Blob> IValue::toBlob() && {
+     212              :   AT_ASSERT(isBlob(), "Expected Blob but got ", tagKind());
+     213              :   return moveToIntrusivePtr<caffe2::Blob>();
+     214              : }
+     215              : inline c10::intrusive_ptr<caffe2::Blob> IValue::toBlob() const& {
+     216              :   AT_ASSERT(isBlob(), "Expected Blob but got ", tagKind());
+     217              :   return toIntrusivePtr<caffe2::Blob>();
+     218              :   ;
+     219              : }
+     220              : inline c10::intrusive_ptr<torch::CustomClassHolder> IValue::toCapsule() && {
+     221              :   TORCH_INTERNAL_ASSERT(isCapsule());
+     222              :   return moveToIntrusivePtr<torch::CustomClassHolder>();
+     223              : }
+     224              : inline c10::intrusive_ptr<torch::CustomClassHolder> IValue::toCapsule() const& {
+     225              :   TORCH_INTERNAL_ASSERT(isCapsule());
+     226              :   return toIntrusivePtr<torch::CustomClassHolder>();
+     227              : }
+     228              : inline at::Generator IValue::toGenerator() && {
+     229              :   AT_ASSERT(isGenerator(), "Expected Generator but got ", tagKind());
+     230              :   return at::Generator(moveToIntrusivePtr<at::GeneratorImpl>());
+     231              : }
+     232              : inline at::Generator IValue::toGenerator() const& {
+     233              :   AT_ASSERT(isGenerator(), "Expected Generator but got ", tagKind());
+     234              :   return at::Generator(toIntrusivePtr<at::GeneratorImpl>());
+     235              : }
+     236              : inline c10::SymInt IValue::toSymInt() && {
+     237              :   AT_ASSERT(isSymInt() || isInt(), "Expected SymInt or int but got ", tagKind());
+     238              :   if (isSymInt()) {
+     239              :     return c10::SymInt(moveToIntrusivePtr<c10::SymNodeImpl>());
+     240              :   } else {
+     241              :     return c10::SymInt(payload.u.as_int);
+     242              :   }
+     243              : }
+     244            0 : inline c10::SymInt IValue::toSymInt() const& {
+     245            0 :   AT_ASSERT(isSymInt() || isInt(), "Expected SymInt or int but got ", tagKind());
+     246            0 :   if (isSymInt()) {
+     247            0 :     return c10::SymInt(toIntrusivePtr<c10::SymNodeImpl>());
+     248              :   } else {
+     249            0 :     return c10::SymInt(payload.u.as_int);
+     250              :   }
+     251              : }
+     252              : inline c10::SymFloat IValue::toSymFloat() && {
+     253              :   AT_ASSERT(isSymFloat() || isDouble(), "Expected SymFloat or double but got ", tagKind());
+     254              :   if (isSymFloat()) {
+     255              :     return c10::SymFloat(moveToIntrusivePtr<c10::SymNodeImpl>());
+     256              :   } else {
+     257              :     return c10::SymFloat(payload.u.as_double);
+     258              :   }
+     259              : }
+     260              : inline c10::SymFloat IValue::toSymFloat() const& {
+     261              :   AT_ASSERT(isSymFloat() || isDouble(), "Expected SymFloat or double but got ", tagKind());
+     262              :   if (isSymFloat()) {
+     263              :     return c10::SymFloat(toIntrusivePtr<c10::SymNodeImpl>());
+     264              :   } else {
+     265              :     return c10::SymFloat(payload.u.as_double);
+     266              :   }
+     267              : }
+     268              : inline c10::SymBool IValue::toSymBool() && {
+     269              :   AT_ASSERT(isSymBool() || isBool(), "Expected SymBool or boolean but got ", tagKind());
+     270              :   if (isSymBool()) {
+     271              :     return c10::SymBool(moveToIntrusivePtr<c10::SymNodeImpl>());
+     272              :   } else {
+     273              :     return c10::SymBool(payload.u.as_bool);
+     274              :   }
+     275              : }
+     276              : 
+     277              : inline c10::SymBool IValue::toSymBool() const& {
+     278              :   AT_ASSERT(isSymBool() || isBool(), "Expected SymBool or boolean but got ", tagKind());
+     279              :   if (isSymBool()) {
+     280              :     return c10::SymBool(toIntrusivePtr<c10::SymNodeImpl>());
+     281              :   } else {
+     282              :     return c10::SymBool(payload.u.as_bool);
+     283              :   }
+     284              : }
+     285              : 
+     286              : namespace ivalue {
+     287              : 
+     288              : void TORCH_API
+     289              : checkCustomClassType(const ClassType* expected_type, const Type* actual_type);
+     290              : 
+     291              : template <typename T>
+     292              : using Shared = c10::intrusive_ptr<T>;
+     293              : 
+     294              : // string
+     295              : struct TORCH_API ConstantString final : c10::intrusive_ptr_target {
+     296              :  private:
+     297              :   const std::string str_;
+     298              : 
+     299              :  public:
+     300              :   ConstantString(std::string str) : str_(std::move(str)) {}
+     301              :   ConstantString(c10::string_view str) : str_(std::string(str)) {}
+     302              :   static c10::intrusive_ptr<ConstantString> create(std::string str_);
+     303              :   static c10::intrusive_ptr<ConstantString> create(c10::string_view str_);
+     304              :   static c10::intrusive_ptr<ConstantString> create(const char* str_);
+     305              : 
+     306              :   const std::string& string() const {
+     307              :     return str_;
+     308              :   }
+     309              :   c10::string_view string_view() const {
+     310              :     return str_;
+     311              :   }
+     312              : 
+     313              :   operator const std::string&() const {
+     314              :     return string();
+     315              :   }
+     316              :   TORCH_API friend std::ostream& operator<<(
+     317              :       std::ostream& out,
+     318              :       const ConstantString& v);
+     319              : };
+     320              : 
+     321              : struct Future;
+     322              : 
+     323              : struct TORCH_API TupleElements {
+     324              :  private:
+     325              :   size_t inlineSize_;
+     326              :   // We represent TupleElements this way to save doing a heap
+     327              :   // allocation in the common (at least for unpickling) case where we
+     328              :   // have only 3 elements. We have our own union instead of
+     329              :   // c10::SmallVector<IValue> because c10::SmallVector<IValue> always
+     330              :   // stores the begin/end/capacity pointers, which would be a waste of
+     331              :   // space in our use case.
+     332              :   union {
+     333              :     std::vector<IValue> elementsVector_;
+     334              :     // Don't want to declare a std::array because the convenient
+     335              :     // iteration and size members are a footgun in this case -- the
+     336              :     // actual size of the array may be smaller than 3!
+     337              :     // NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays)
+     338              :     IValue elementsInline_[3];
+     339              :   };
+     340              : 
+     341              :   void destroyInline() {
+     342              :    for (const auto ii : c10::irange(inlineSize_)) {
+     343              :      elementsInline_[ii].~IValue();
+     344              :    }
+     345              :   }
+     346              :  public:
+     347              : 
+     348              :   using iterator = IValue*;
+     349              :   using const_iterator = const IValue*;
+     350              : 
+     351              :   TupleElements() : inlineSize_(0) {
+     352              :     new (&elementsVector_) std::vector<IValue>();
+     353              :   }
+     354              : 
+     355              :   explicit TupleElements(std::vector<IValue> elements)
+     356              :   : inlineSize_(0), elementsVector_(std::move(elements)) {}
+     357              : 
+     358              :   explicit TupleElements(c10::ArrayRef<IValue> elements)
+     359              :   : inlineSize_(elements.size() <= 3 ? elements.size() : 0) {
+     360              :     switch (inlineSize_) {
+     361              :       case 3:
+     362              :         new (&elementsInline_[2]) IValue(elements[2]);
+     363              :         C10_FALLTHROUGH;
+     364              :       case 2:
+     365              :         new (&elementsInline_[1]) IValue(elements[1]);
+     366              :         C10_FALLTHROUGH;
+     367              :       case 1:
+     368              :         new (&elementsInline_[0]) IValue(elements[0]);
+     369              :         break;
+     370              :       case 0:
+     371              :         new (&elementsVector_) std::vector<IValue>(elements.begin(), elements.end());
+     372              :         break;
+     373              :     }
+     374              :   }
+     375              : 
+     376              :   explicit TupleElements(IValue&& e1)
+     377              :   : inlineSize_(1) {
+     378              :     new (&elementsInline_[0]) IValue(std::move(e1));
+     379              :   }
+     380              : 
+     381              :   explicit TupleElements(IValue&& e1, IValue&& e2)
+     382              :   : inlineSize_(2) {
+     383              :     new (&elementsInline_[0]) IValue(std::move(e1));
+     384              :     new (&elementsInline_[1]) IValue(std::move(e2));
+     385              :   }
+     386              : 
+     387              :   explicit TupleElements(IValue&& e1, IValue&& e2, IValue&& e3)
+     388              :   : inlineSize_(3) {
+     389              :     new (&elementsInline_[0]) IValue(std::move(e1));
+     390              :     new (&elementsInline_[1]) IValue(std::move(e2));
+     391              :     new (&elementsInline_[2]) IValue(std::move(e3));
+     392              :   }
+     393              : 
+     394              :   ~TupleElements() {
+     395              :     if (inlineSize_) {
+     396              :       destroyInline();
+     397              :     } else {
+     398              :       elementsVector_.~vector();
+     399              :     }
+     400              :   }
+     401              : 
+     402              :   // It would be nice to make this noncopyable to prevent people from
+     403              :   // writing code like `auto output =
+     404              :   // forward(...).toTupleRef().elements()` (which does refcount bumps on
+     405              :   // each element, unlike the more efficient but verbose
+     406              :   // ```
+     407              :   // auto outputIntrusivePtr = forward(...).toTuple();
+     408              :   // const auto& output = outputIntrusivePtr->elements();
+     409              :   // ```
+     410              :   // ), but there is simply an overwhelming amount of code that does
+     411              :   // it the inefficient way.
+     412              :   // See also operator std::vector below.
+     413              :   TupleElements(const TupleElements& rhs)
+     414              :   : inlineSize_(rhs.inlineSize_) {
+     415              :     if (rhs.inlineSize_) {
+     416              :       for (const auto  ii : c10::irange(inlineSize_)) {
+     417              :         new (&elementsInline_[ii]) IValue(rhs.elementsInline_[ii]);
+     418              :       }
+     419              :     } else {
+     420              :       new (&elementsVector_) std::vector<IValue>(rhs.elementsVector_);
+     421              :     }
+     422              :   }
+     423              : 
+     424              :   TupleElements& operator=(const TupleElements& rhs) {
+     425              :     if (inlineSize_) {
+     426              :       if (rhs.inlineSize_) {
+     427              :         for (const auto ii : c10::irange(std::min(inlineSize_, rhs.inlineSize_))) {
+     428              :           elementsInline_[ii] = rhs.elementsInline_[ii];
+     429              :         }
+     430              :         if (rhs.inlineSize_ > inlineSize_) {
+     431              :           for (const auto ii : c10::irange(inlineSize_, rhs.inlineSize_)) {
+     432              :             new (&elementsInline_[ii]) IValue(rhs.elementsInline_[ii]);
+     433              :           }
+     434              :         } else {
+     435              :           for (const auto ii : c10::irange(rhs.inlineSize_, inlineSize_)) {
+     436              :             elementsInline_[ii].~IValue();
+     437              :           }
+     438              :         }
+     439              :       } else {
+     440              :         destroyInline();
+     441              :         new (&elementsVector_) std::vector<IValue>(rhs.elementsVector_);
+     442              :       }
+     443              :     } else {
+     444              :       if (rhs.inlineSize_) {
+     445              :         elementsVector_.~vector();
+     446              :         for (const auto ii : c10::irange(rhs.inlineSize_)) {
+     447              :           new (&elementsInline_[ii]) IValue(rhs.elementsInline_[ii]);
+     448              :         }
+     449              :       } else {
+     450              :         elementsVector_ = rhs.elementsVector_;
+     451              :       }
+     452              :     }
+     453              :     inlineSize_ = rhs.inlineSize_;
+     454              :     return *this;
+     455              :   }
+     456              : 
+     457              :   TupleElements(TupleElements&& rhs) noexcept
+     458              :   : inlineSize_(rhs.inlineSize_) {
+     459              :     if (inlineSize_) {
+     460              :       for (const auto ii : c10::irange(inlineSize_)) {
+     461              :         new (&elementsInline_[ii]) IValue(std::move(rhs.elementsInline_[ii]));
+     462              :       }
+     463              :     } else {
+     464              :       new (&elementsVector_) std::vector<IValue>(std::move(rhs.elementsVector_));
+     465              :     }
+     466              :   }
+     467              : 
+     468              :   TupleElements& operator=(TupleElements&& rhs) noexcept {
+     469              :     if (inlineSize_) {
+     470              :       if (rhs.inlineSize_) {
+     471              :         for (const auto ii : c10::irange(std::min(inlineSize_, rhs.inlineSize_))) {
+     472              :           elementsInline_[ii] = std::move(rhs.elementsInline_[ii]);
+     473              :         }
+     474              :         if (rhs.inlineSize_ > inlineSize_) {
+     475              :           for (const auto ii : c10::irange(inlineSize_, rhs.inlineSize_)) {
+     476              :             new (&elementsInline_[ii]) IValue(std::move(rhs.elementsInline_[ii]));
+     477              :           }
+     478              :         } else {
+     479              :           for (const auto ii : c10::irange(rhs.inlineSize_, inlineSize_)) {
+     480              :             elementsInline_[ii].~IValue();
+     481              :           }
+     482              :         }
+     483              :       } else {
+     484              :         destroyInline();
+     485              :         new (&elementsVector_) std::vector<IValue>(std::move(rhs.elementsVector_));
+     486              :       }
+     487              :     } else {
+     488              :       if (rhs.inlineSize_) {
+     489              :         elementsVector_.~vector();
+     490              :         for (const auto ii : c10::irange(rhs.inlineSize_)) {
+     491              :           new (&elementsInline_[ii]) IValue(std::move(rhs.elementsInline_[ii]));
+     492              :         }
+     493              :       } else {
+     494              :         elementsVector_ = std::move(rhs.elementsVector_);
+     495              :       }
+     496              :     }
+     497              :     inlineSize_ = rhs.inlineSize_;
+     498              :     return *this;
+     499              :   }
+     500              : 
+     501              :   C10_NODISCARD c10::ArrayRef<IValue> asArrayRef() const {
+     502              :     if (inlineSize_) {
+     503              :       return c10::ArrayRef<IValue>(elementsInline_, inlineSize_);
+     504              :     } else {
+     505              :       return elementsVector_;
+     506              :     }
+     507              :   }
+     508              : 
+     509              :   // Mimic implicit conversion from std::vector to ArrayRef.
+     510              :   operator c10::ArrayRef<IValue>() const {
+     511              :     return asArrayRef();
+     512              :   }
+     513              : 
+     514              :   static size_t hash(const TupleElements& v) {
+     515              :     return c10::hash<c10::ArrayRef<IValue>>()(v.asArrayRef());
+     516              :   }
+     517              : 
+     518              :   void setContents(std::vector<IValue>&& contents) {
+     519              :     if (inlineSize_) {
+     520              :       destroyInline();
+     521              :       new (&elementsVector_) std::vector<IValue>(std::move(contents));
+     522              :       inlineSize_ = 0;
+     523              :     } else {
+     524              :       elementsVector_ = std::move(contents);
+     525              :     }
+     526              :   }
+     527              : 
+     528              :   C10_NODISCARD bool empty() const {
+     529              :     return inlineSize_ ? false : elementsVector_.empty();
+     530              :   }
+     531              : 
+     532              :   C10_NODISCARD size_t size() const {
+     533              :     return inlineSize_ ? inlineSize_ : elementsVector_.size();
+     534              :   }
+     535              : 
+     536              :   C10_NODISCARD IValue& operator[](size_t idx) {
+     537              :     if (inlineSize_) {
+     538              :       return elementsInline_[idx];
+     539              :     } else {
+     540              :       return elementsVector_[idx];
+     541              :     }
+     542              :   }
+     543              : 
+     544              :   C10_NODISCARD const IValue& operator[](size_t idx) const {
+     545              :     if (inlineSize_) {
+     546              :       return elementsInline_[idx];
+     547              :     } else {
+     548              :       return elementsVector_[idx];
+     549              :     }
+     550              :   }
+     551              : 
+     552              :   C10_NODISCARD IValue& at(size_t idx) {
+     553              :     if (inlineSize_) {
+     554              :       TORCH_INTERNAL_ASSERT_DEBUG_ONLY(inlineSize_ <= 3);
+     555              :       TORCH_CHECK(idx < inlineSize_, "TupleElements: invalid index Index = ", idx, "; Length = ", inlineSize_);
+     556              :       return elementsInline_[idx];
+     557              :     } else {
+     558              :       return elementsVector_.at(idx);
+     559              :     }
+     560              :   }
+     561              : 
+     562              :   C10_NODISCARD const IValue& at(size_t idx) const {
+     563              :     if (inlineSize_) {
+     564              :       TORCH_INTERNAL_ASSERT_DEBUG_ONLY(inlineSize_ <= 3);
+     565              :       TORCH_CHECK(idx < inlineSize_, "TupleElements: invalid index Index = ", idx, "; Length = ", inlineSize_);
+     566              :       return elementsInline_[idx];
+     567              :     } else {
+     568              :       TORCH_CHECK(idx < elementsVector_.size(), "TupleElements: invalid index Index = ", idx, "; Length = ", elementsVector_.size());
+     569              :       return elementsVector_.at(idx);
+     570              :     }
+     571              :   }
+     572              : 
+     573              :   C10_NODISCARD iterator begin() {
+     574              :     if (inlineSize_) {
+     575              :       return elementsInline_;
+     576              :     } else {
+     577              :       return elementsVector_.data();
+     578              :     }
+     579              :   }
+     580              : 
+     581              :   C10_NODISCARD iterator end() {
+     582              :     if (inlineSize_) {
+     583              :       return elementsInline_ + inlineSize_;
+     584              :     } else {
+     585              :       return elementsVector_.data() + elementsVector_.size();
+     586              :     }
+     587              :   }
+     588              : 
+     589              :   C10_NODISCARD const_iterator begin() const {
+     590              :     if (inlineSize_) {
+     591              :       return elementsInline_;
+     592              :     } else {
+     593              :       return elementsVector_.data();
+     594              :     }
+     595              :   }
+     596              : 
+     597              :   C10_NODISCARD const_iterator end() const {
+     598              :     if (inlineSize_) {
+     599              :       return elementsInline_ + inlineSize_;
+     600              :     } else {
+     601              :       return elementsVector_.data() + elementsVector_.size();
+     602              :     }
+     603              :   }
+     604              : 
+     605              :   C10_NODISCARD const_iterator cbegin() const {
+     606              :     return begin();
+     607              :   }
+     608              : 
+     609              :   C10_NODISCARD const_iterator cend() const {
+     610              :     return end();
+     611              :   }
+     612              : 
+     613              :   C10_NODISCARD std::vector<IValue> vec() const & {
+     614              :     return asArrayRef().vec();
+     615              :   }
+     616              : 
+     617              :   C10_NODISCARD IValue& back() {
+     618              :     return *(end() - 1);
+     619              :   }
+     620              : 
+     621              :   C10_NODISCARD const IValue& back() const {
+     622              :     return *(end() - 1);
+     623              :   }
+     624              : 
+     625              :   C10_NODISCARD std::vector<IValue> vec() && {
+     626              :     std::vector<IValue> result;
+     627              :     result.reserve(size());
+     628              :     for (auto&& iv : *this) {
+     629              :       result.push_back(std::move(iv));
+     630              :     }
+     631              :     return result;
+     632              :   }
+     633              : 
+     634              :   // More compatibility shims for the overwhelming amount of code that
+     635              :   // likes to copy tuple elements into a vector; see comment above the
+     636              :   // copy constructor.
+     637              :   operator std::vector<IValue>() const & {
+     638              :     return vec();
+     639              :   }
+     640              : 
+     641              :   operator std::vector<IValue>() && {
+     642              :     return vec();
+     643              :   }
+     644              : };
+     645              : 
+     646              : template <typename T>
+     647              : struct TupleTypeFactory {};
+     648              : 
+     649              : template <>
+     650              : struct TORCH_API TupleTypeFactory<TupleType> {
+     651              :   static TupleTypePtr create(std::vector<TypePtr> types) {
+     652              :     return TupleType::create(std::move(types));
+     653              :   }
+     654              :   static TupleTypePtr fallback(const Type& type);
+     655              : };
+     656              : 
+     657              : template <>
+     658              : struct TORCH_API TupleTypeFactory<c10::DynamicType> {
+     659              :   static DynamicTypePtr create(std::vector<TypePtr> elemTypes);
+     660              :   static DynamicTypePtr fallback(const Type&);
+     661              : };
+     662              : 
+     663              : struct TORCH_API Tuple : c10::intrusive_ptr_target {
+     664              :  private:
+     665              :   TupleElements elements_;
+     666              :   mutable c10::TypePtr type_; // lazily computed for unnamed tuples
+     667              : 
+     668              :  public:
+     669              :   // named tuples have additional type information, so we
+     670              :   // directly create them tagged
+     671              :   static c10::intrusive_ptr<Tuple> createNamed(
+     672              :       std::vector<IValue> elements_,
+     673              :       c10::TypePtr type_) {
+     674              :     return c10::make_intrusive<Tuple>(std::move(elements_), std::move(type_));
+     675              :   }
+     676              : 
+     677              :   static c10::intrusive_ptr<Tuple> createNamed(
+     678              :       TupleElements elements_,
+     679              :       std::shared_ptr<TupleType> type_) {
+     680              :     return c10::make_intrusive<Tuple>(std::move(elements_), std::move(type_));
+     681              :   }
+     682              : 
+     683              :   static c10::intrusive_ptr<Tuple> createNamed(
+     684              :       std::initializer_list<IValue> elements_,
+     685              :       std::shared_ptr<TupleType> type_) {
+     686              :     return createNamed(TupleElements(c10::ArrayRef<IValue>(elements_)), std::move(type_));
+     687              :   }
+     688              : 
+     689              :   // MSVC apparently can't disambiguate the other two overloads of
+     690              :   // create when passed an initializer_list without this.
+     691              :   static c10::intrusive_ptr<Tuple> create(std::initializer_list<IValue> elements_) {
+     692              :     return create(c10::ArrayRef<IValue>(elements_));
+     693              :   }
+     694              : 
+     695              :   static c10::intrusive_ptr<Tuple> create(std::vector<IValue> elements_) {
+     696              :     return c10::make_intrusive<Tuple>(std::move(elements_));
+     697              :   }
+     698              : 
+     699              :   static c10::intrusive_ptr<Tuple> create(TupleElements elements_) {
+     700              :     return c10::make_intrusive<Tuple>(std::move(elements_));
+     701              :   }
+     702              : 
+     703              :   static c10::intrusive_ptr<Tuple> create(c10::ArrayRef<IValue> elements_) {
+     704              :     return create(TupleElements(elements_));
+     705              :   }
+     706              : 
+     707              :   static c10::intrusive_ptr<Tuple> create(IValue e1) {
+     708              :     return c10::make_intrusive<Tuple>(std::move(e1));
+     709              :   }
+     710              : 
+     711              :   static c10::intrusive_ptr<Tuple> create(IValue e1, IValue e2) {
+     712              :     return c10::make_intrusive<Tuple>(std::move(e1), std::move(e2));
+     713              :   }
+     714              : 
+     715              :   static c10::intrusive_ptr<Tuple> create(IValue e1, IValue e2, IValue e3) {
+     716              :     return c10::make_intrusive<Tuple>(std::move(e1), std::move(e2), std::move(e3));
+     717              :   }
+     718              : 
+     719              :  private:
+     720              :   // Workaround inability to use `>` operator in template argument list.
+     721              :   template <typename... Args>
+     722              :   static constexpr bool hasMoreThanThreeArgs() {
+     723              :     return sizeof...(Args) > 3;
+     724              :   }
+     725              : 
+     726              :  public:
+     727              :   template <typename... Args>
+     728              :   static c10::intrusive_ptr<Tuple> create(Args&&... elements_) {
+     729              :     switch (sizeof...(Args)) {
+     730              :       case 1:
+     731              :       case 2:
+     732              :       case 3:
+     733              :         return create(IValue(std::forward<Args>(elements_))...);
+     734              :       default:
+     735              :         return create(
+     736              :             std::vector<IValue>{IValue(std::forward<Args>(elements_))...});
+     737              :     }
+     738              :   }
+     739              : 
+     740              :   // Again, it would be nice to make this noncopyable, but there's a
+     741              :   // lot of extant code that copies Tuples.
+     742              :   // Tuple(const Tuple& rhs) = delete;
+     743              : 
+     744              :   const TupleElements& elements() const& {
+     745              :     return elements_;
+     746              :   }
+     747              : 
+     748              :   TupleElements elements() && {
+     749              :     return std::move(elements_);
+     750              :   }
+     751              : 
+     752              :   void setElements(std::vector<IValue>&& elements) {
+     753              :     elements_.setContents(std::move(elements));
+     754              :   }
+     755              : 
+     756              :   void setElements(TupleElements&& elements) {
+     757              :     elements_ = std::move(elements);
+     758              :   }
+     759              : 
+     760              :   void unsafeSetElement(size_t idx, const IValue& element) {
+     761              :     elements_[idx] = element;
+     762              :   }
+     763              : 
+     764              :   void unsafeSetElement(size_t idx, IValue&& element) {
+     765              :     elements_[idx] = std::move(element);
+     766              :   }
+     767              : 
+     768              :   size_t size() const {
+     769              :     return elements_.size();
+     770              :   }
+     771              : 
+     772              :   template <typename T = c10::TupleType>
+     773              :   std::shared_ptr<T> type() const {
+     774              :     if (!type_) {
+     775              :       type_ = TupleTypeFactory<T>::create(fmap(elements(), [&](const IValue& v) {
+     776              :         return v.type<typename T::ElementType>();
+     777              :       }));
+     778              :     }
+     779              :     if (auto t = type_->cast<T>()) {
+     780              :       return t;
+     781              :     }
+     782              :     return TupleTypeFactory<T>::fallback(*type_);
+     783              :   }
+     784              : 
+     785              :   static size_t hash(const Tuple& t) {
+     786              :     return c10::get_hash(t.elements());
+     787              :   }
+     788              : 
+     789              :   TORCH_API friend bool operator==(
+     790              :       const ivalue::Tuple& lhs,
+     791              :       const ivalue::Tuple& rhs);
+     792              : 
+     793              :  private:
+     794              :   // NOTE: If we try to avoid the overloads without
+     795              :   // `std::shared_ptr<TupleType> type` by defaulting it to nullptr, we
+     796              :   // end up having to call (part of) the shared_ptr destructor for
+     797              :   // `type` even though we should know statically it won't do
+     798              :   // anything.
+     799              :   explicit Tuple(std::vector<IValue> elements)
+     800              :     : elements_(std::move(elements)){}
+     801              : 
+     802              :   explicit Tuple(std::vector<IValue> elements, c10::TypePtr type)
+     803              :     : elements_(std::move(elements)), type_(std::move(type)) {}
+     804              : 
+     805              :   explicit Tuple(TupleElements&& elements)
+     806              :     : elements_(std::move(elements)) {}
+     807              : 
+     808              :   explicit Tuple(TupleElements&& elements, std::shared_ptr<TupleType> type)
+     809              :     : elements_(std::move(elements)), type_(std::move(type)) {}
+     810              : 
+     811              :   explicit Tuple(IValue&& e1)
+     812              :     : elements_(std::move(e1)) {}
+     813              : 
+     814              :   explicit Tuple(IValue&& e1, std::shared_ptr<TupleType> type)
+     815              :     : elements_(std::move(e1)), type_(std::move(type)) {}
+     816              : 
+     817              :   explicit Tuple(IValue&& e1, IValue&& e2)
+     818              :     : elements_(std::move(e1), std::move(e2)) {}
+     819              : 
+     820              :   explicit Tuple(IValue&& e1, IValue&& e2, std::shared_ptr<TupleType> type)
+     821              :     : elements_(std::move(e1), std::move(e2)), type_(std::move(type)) {}
+     822              : 
+     823              :   explicit Tuple(IValue&& e1, IValue&& e2, IValue&& e3)
+     824              :     : elements_(std::move(e1), std::move(e2), std::move(e3)) {}
+     825              : 
+     826              :   explicit Tuple(IValue&& e1, IValue&& e2, IValue&& e3, std::shared_ptr<TupleType> type)
+     827              :     : elements_(std::move(e1), std::move(e2), std::move(e3)), type_(std::move(type)) {}
+     828              : 
+     829              :   friend class c10::intrusive_ptr<Tuple>;
+     830              : };
+     831              : 
+     832              : struct Object;
+     833              : struct PyObjectHolder;
+     834              : struct EnumHolder;
+     835              : } // namespace ivalue
+     836              : 
+     837              : // Future
+     838              : struct C10_EXPORT ivalue::Future final : c10::intrusive_ptr_target {
+     839              :  private:
+     840              :   // Keep this private in order to force users to go through make_intrusive and
+     841              :   // thus prevent creating a Future that's not held by an intrusive_ptr.
+     842              :   explicit Future(TypePtr type, std::vector<c10::Device> devices={})
+     843              :       : type_(std::move(type)),
+     844              :         impl_(getTypeOfDevices(devices)),
+     845              :         devices_(sortAndDeduplicateDevices(impl_, std::move(devices))) {}
+     846              : 
+     847              :   friend c10::intrusive_ptr<Future>;
+     848              : 
+     849              :  public:
+     850              :   Future(const Future&) = delete;
+     851              :   Future(Future&&) = delete;
+     852              :   Future& operator=(const Future&) = delete;
+     853              :   Future& operator=(Future&&) = delete;
+     854              : 
+     855              :   struct TORCH_API FutureError final : public std::exception {
+     856              :     explicit FutureError(std::string&& error_msg_)
+     857              :         : error_msg(std::move(error_msg_)) {}
+     858              : 
+     859              :     FutureError() = default;
+     860              : 
+     861              :     const char* what() const noexcept override {
+     862              :       return error_msg.c_str();
+     863              :     }
+     864              : 
+     865              :     std::string error_msg;
+     866              :   };
+     867              : 
+     868              :   /**
+     869              :    * Wait on the future until it completes.
+     870              :    */
+     871              :   void wait() {
+     872              :     std::unique_lock<std::mutex> lock(mutex_);
+     873              :     finished_cv_.wait(lock, [&]() -> bool { return completed_; });
+     874              :     synchronizeWithCurrentStreams();
+     875              :   }
+     876              : 
+     877              :   /**
+     878              :    * Wait on the future until it completes and throw an
+     879              :    * exception if an error exists.
+     880              :    */
+     881              :   void waitAndThrow() {
+     882              :     wait();
+     883              : 
+     884              :     if (eptr_) {
+     885              :       std::rethrow_exception(eptr_);
+     886              :     }
+     887              :   }
+     888              : 
+     889              :   /**
+     890              :    * Explicitly mark the future as completed with the output value. Optionally,
+     891              :    * the storages for all tensors in IValue can be passed as well. The DataPtrs
+     892              :    * of these storages are used to synchronize CUDA streams. If storages isn't
+     893              :    * given we will attempt to extract it from the value, if we need to (this
+     894              :    * happens if a non-empty set of devices was given to the constructor). Thus
+     895              :    * one only needs to provide storages when 1) they cannot be extracted through
+     896              :    * IValue::getSubValues() or through pickling in case of Python object; or
+     897              :    * when 2) customized storage extraction is more efficient.
+     898              :    */
+     899              :   using WeakStorage = c10::weak_intrusive_ptr<c10::StorageImpl>;
+     900              :   void markCompleted(
+     901              :       IValue value,
+     902              :       c10::optional<std::vector<WeakStorage>> storages = c10::nullopt) {
+     903              :     // Start by performing all steps that can throw, before setting any field.
+     904              :     // Do this before even acquiring the mutex, because extractStorages might
+     905              :     // acquire the GIL, which could lead to a lock inversion with our mutex.
+     906              :     // See https://github.com/pytorch/pytorch/issues/58239.
+     907              :     std::vector<WeakStorage> actualStorages;
+     908              :     std::vector<c10::Device> usedDevices;
+     909              :     try {
+     910              :       // FIXME We should always extract DataPtrs, in order to catch the case of
+     911              :       // users using CUDA values but forgetting to set devices, which currently
+     912              :       // leads to a silent synchronization/correctness issue. However, as this
+     913              :       // might worsen perf in CPU-only cases, we should only do so after careful
+     914              :       // benchmarks.
+     915              :       if (impl_.type() != c10::kCPU) {
+     916              :         actualStorages =
+     917              :             storages.has_value() ? std::move(*storages) : extractStorages(value);
+     918              :         usedDevices = getDevicesOfStorages(impl_, actualStorages);
+     919              :         ensureIsSubsetOfDevices(usedDevices, devices_);
+     920              :       }
+     921              :     } catch (const std::exception&) {
+     922              :       setError(std::current_exception());
+     923              :       return;
+     924              :     }
+     925              : 
+     926              :     std::unique_lock<std::mutex> lock(mutex_);
+     927              :     TORCH_CHECK(
+     928              :         !completed(),
+     929              :         "Attempting to mark a completed Future as complete again. Note that "
+     930              :         "a Future can only be marked completed once.");
+     931              : 
+     932              :     // Only set value_ and completed_ flag once all checks and preparation steps
+     933              :     // have returned successfully to allow for proper error propagation.
+     934              :     value_ = std::move(value);
+     935              :     completed_ = true;
+     936              : 
+     937              :     currentDevice_ = impl_.getDevice();
+     938              :     storages_ = std::move(actualStorages);
+     939              :     for (const c10::Device& device : usedDevices) {
+     940              :       c10::Event event(impl_.type());
+     941              :       event.record(impl_.getStream(device));
+     942              :       events_.push_back(std::move(event));
+     943              :     }
+     944              : 
+     945              :     std::vector<std::function<void(Future&)>> cbs;
+     946              :     cbs.swap(callbacks_);
+     947              :     lock.unlock();
+     948              : 
+     949              :     finished_cv_.notify_all();
+     950              :     for (auto& callback : cbs) {
+     951              :       invokeCallback(std::move(callback));
+     952              :     }
+     953              :   }
+     954              : 
+     955              :   void markCompleted() {
+     956              :     markCompleted(IValue{});
+     957              :   }
+     958              : 
+     959              :   void setError(std::exception_ptr eptr) {
+     960              :     std::unique_lock<std::mutex> lock(mutex_);
+     961              :     setErrorInternal(std::move(eptr), lock);
+     962              :   }
+     963              : 
+     964              :   void setErrorIfNeeded(std::exception_ptr eptr) {
+     965              :     std::unique_lock<std::mutex> lock(mutex_);
+     966              :     if (completed_) {
+     967              :       // This should be rare and shouldn't cause log spew. Its important to
+     968              :       // log errors and thats why we have this log here.
+     969              :       std::string msg = c10::str(
+     970              :           "Skipping setting following error on the Future since "
+     971              :           "it is already marked completed (this is not necessarily "
+     972              :           "an error):\n",
+     973              :           tryRetrieveErrorMessageInternal(std::move(eptr)));
+     974              :       if (eptr_) {
+     975              :         msg += c10::str(
+     976              :             ", \nOriginal exception:\n",
+     977              :             tryRetrieveErrorMessageInternal(eptr_));
+     978              :       }
+     979              :       LOG(INFO) << msg;
+     980              :       return;
+     981              :     } else {
+     982              :       setErrorInternal(std::move(eptr), lock);
+     983              :     }
+     984              :   }
+     985              : 
+     986              :   // Get the result of the current future.
+     987              :   IValue value() {
+     988              :     std::unique_lock<std::mutex> lock(mutex_);
+     989              :     AT_ASSERT(completed());
+     990              :     if (eptr_) {
+     991              :       std::rethrow_exception(eptr_);
+     992              :     }
+     993              :     return value_;
+     994              :   }
+     995              : 
+     996              :   // This accessor should only be used if we know that the future is
+     997              :   // completed() with no error.
+     998              :   const IValue& constValue() const {
+     999              :     std::unique_lock<std::mutex> lock(mutex_);
+    1000              :     AT_ASSERT(completed());
+    1001              :     TORCH_INTERNAL_ASSERT(
+    1002              :       !eptr_,
+    1003              :       "value() accessor should only be used when future is not completed with ",
+    1004              :       "an error, but future had the following error: ",
+    1005              :       tryRetrieveErrorMessageInternal(eptr_)
+    1006              :     );
+    1007              :     return value_;
+    1008              :   }
+    1009              : 
+    1010              :   // This accessor should only be used if we know that the future is
+    1011              :   // completed() with no error.
+    1012              :   const std::vector<WeakStorage>& storages() const {
+    1013              :     std::unique_lock<std::mutex> lock(mutex_);
+    1014              :     AT_ASSERT(completed());
+    1015              :     AT_ASSERT(!eptr_);
+    1016              :     return storages_;
+    1017              :   }
+    1018              : 
+    1019              :   /**
+    1020              :    * Add a callback to the future.
+    1021              :    * The callbacks will be executed once the future completes.
+    1022              :    * If the future has already completed,
+    1023              :    * this function will execute the callback immediately.
+    1024              :    */
+    1025              :   template <typename T>
+    1026              :   void addCallback(T callback) {
+    1027              : #if __cpp_lib_is_invocable >= 201703
+    1028              :     static_assert(
+    1029              :         std::is_invocable_r<void, T, Future&>::value,
+    1030              :         "The callback must have signature void(Future&)");
+    1031              : #endif
+    1032              :     std::unique_lock<std::mutex> lock(mutex_);
+    1033              :     if (completed()) {
+    1034              :       lock.unlock();
+    1035              :       invokeCallback(std::move(callback));
+    1036              :       return;
+    1037              :     }
+    1038              :     callbacks_.emplace_back(std::move(callback));
+    1039              :   }
+    1040              : 
+    1041              :   /**
+    1042              :    * Add a callback to the future, and return another Future to hold the return
+    1043              :    * value of the callback. This is necessary when the callback provider needs
+    1044              :    * to know for sure when the callback has finished.
+    1045              :    */
+    1046              :   template <typename T>
+    1047              :   c10::intrusive_ptr<Future> then(T callback, TypePtr type) {
+    1048              :     using IValueWithStorages = std::tuple<IValue, std::vector<WeakStorage>>;
+    1049              : #if __cpp_lib_is_invocable >= 201703
+    1050              :     static_assert(
+    1051              :         guts::disjunction<
+    1052              :             std::is_invocable_r<IValue, T, Future&>,
+    1053              :             std::is_invocable_r<IValueWithStorages, T, Future&>>::value,
+    1054              :         "The callback must have signature IValue(Future&) or "
+    1055              :         "std::tuple<IValue, std::vector<Storage>>(Future&)");
+    1056              : #endif
+    1057              :     auto childFut = createInstance(::std::move(type));
+    1058              :     addCallback([childFut,
+    1059              :                  cb = std::move(callback)](Future& parentFut) mutable {
+    1060              :       try {
+    1061              :         if constexpr (::std::is_convertible_v<typename c10::invoke_result_t<T &&, Future&>, IValueWithStorages>) {
+    1062              :           auto [ivalue, storages] = cb(parentFut);
+    1063              :           childFut->markCompleted(::std::move(ivalue), ::std::move(storages));
+    1064              :         } else {
+    1065              :           childFut->markCompleted(cb(parentFut));
+    1066              :         }
+    1067              :       } catch (std::exception&) {
+    1068              :         childFut->setError(std::current_exception());
+    1069              :       }
+    1070              :     });
+    1071              :     return childFut;
+    1072              :   }
+    1073              : 
+    1074              :   template <typename T>
+    1075              :   c10::intrusive_ptr<Future> thenAsync(T callback, TypePtr type) {
+    1076              : #if __cpp_lib_is_invocable >= 201703
+    1077              :     static_assert(
+    1078              :         std::is_invocable_r<c10::intrusive_ptr<Future>, T, Future&>::value,
+    1079              :         "The callback must have signature c10::intrusive_ptr<Future>(Future&)");
+    1080              : #endif
+    1081              :     auto childFut = createInstance(std::move(type));
+    1082              :     addCallback(
+    1083              :         [childFut, cb = std::move(callback)](Future& parentFut) mutable {
+    1084              :           c10::intrusive_ptr<Future> intermediateFut;
+    1085              :           try {
+    1086              :             intermediateFut = cb(parentFut);
+    1087              :           } catch (std::exception&) {
+    1088              :             childFut->setError(std::current_exception());
+    1089              :             return;
+    1090              :           }
+    1091              :           intermediateFut->addCallback(
+    1092              :               [childFut = std::move(childFut)](Future& intermediateFut) {
+    1093              :                 if (intermediateFut.hasError()) {
+    1094              :                   childFut->setError(intermediateFut.exception_ptr());
+    1095              :                 } else {
+    1096              :                   childFut->markCompleted(
+    1097              :                       intermediateFut.value(), intermediateFut.storages());
+    1098              :                 }
+    1099              :               });
+    1100              :         });
+    1101              :     return childFut;
+    1102              :   }
+    1103              : 
+    1104              :   // Tries to retrieve the error message from std::exception_ptr.
+    1105              :   std::string tryRetrieveErrorMessage() const {
+    1106              :     TORCH_CHECK(hasError(), "No error present on the future.");
+    1107              :     std::unique_lock<std::mutex> lock(mutex_);
+    1108              :     return tryRetrieveErrorMessageInternal(eptr_);
+    1109              :   }
+    1110              : 
+    1111              :   // Check if the current future has completed
+    1112              :   bool completed() const {
+    1113              :     return completed_;
+    1114              :   }
+    1115              : 
+    1116              :   bool hasValue() const {
+    1117              :     std::unique_lock<std::mutex> lock(mutex_);
+    1118              :     return completed_ && !eptr_;
+    1119              :   }
+    1120              : 
+    1121              :   bool hasError() const {
+    1122              :     std::unique_lock<std::mutex> lock(mutex_);
+    1123              :     return eptr_ ? true : false;
+    1124              :   }
+    1125              : 
+    1126              :   std::exception_ptr exception_ptr() const {
+    1127              :     std::unique_lock<std::mutex> lock(mutex_);
+    1128              :     return eptr_;
+    1129              :   }
+    1130              : 
+    1131              :   TORCH_API friend std::ostream& operator<<(
+    1132              :       std::ostream& out,
+    1133              :       const Future& v);
+    1134              : 
+    1135              :   TypePtr elementType() const {
+    1136              :     return type_;
+    1137              :   }
+    1138              : 
+    1139              :   const std::vector<c10::Device>& devices() const {
+    1140              :     return devices_;
+    1141              :   }
+    1142              : 
+    1143              :   // This method should be used when one intends to manually create a child
+    1144              :   // future, for example when implementing a customized version of then().
+    1145              :   c10::intrusive_ptr<Future> createInstance(at::TypePtr type) {
+    1146              :     return c10::make_intrusive<Future>(std::move(type), devices_);
+    1147              :   }
+    1148              : 
+    1149              :  private:
+    1150              : 
+    1151              :   // This method should always be used when invoking a callback (regardless of
+    1152              :   // how/when that happens) as it will ensure that the proper "environment" is
+    1153              :   // set up before running the callback, as in, it will set up the CUDA streams,
+    1154              :   // synchronize them with the value, and so on (if needed).
+    1155              :   template<typename T>
+    1156              :   void invokeCallback(T callback) {
+    1157              : #if __cpp_lib_is_invocable >= 201703
+    1158              :     static_assert(
+    1159              :         std::is_invocable_r<void, T, Future&>::value,
+    1160              :         "The callback must have signature void(Future&)");
+    1161              : #endif
+    1162              : 
+    1163              :     c10::OptionalDeviceGuard deviceGuard(currentDevice_);
+    1164              : 
+    1165              :     std::vector<c10::Stream> streams;
+    1166              :     streams.reserve(devices_.size());
+    1167              :     for (const c10::Device& device : devices_) {
+    1168              :       streams.push_back(impl_.getStreamFromGlobalPool(device));
+    1169              :     }
+    1170              :     c10::MultiStreamGuard streamGuard(streams);
+    1171              :     synchronizeWithCurrentStreams();
+    1172              : 
+    1173              :     callback(*this);
+    1174              :   }
+    1175              : 
+    1176              :   // This method should be called before this future's value is used, as it
+    1177              :   // ensures that the CUDA streams that are "current" at the callsite properly
+    1178              :   // synchronize with the value.
+    1179              :   void synchronizeWithCurrentStreams() {
+    1180              :     for (c10::Event& event : events_) {
+    1181              :       event.block(impl_.getStream(event.device()));
+    1182              :     }
+    1183              : 
+    1184              :     for (const WeakStorage& weak_storage : storages_) {
+    1185              :       c10::intrusive_ptr<c10::StorageImpl> storage = weak_storage.lock();
+    1186              :       if (!storage) {
+    1187              :         continue;
+    1188              :       }
+    1189              :       if (!storage->device().is_cpu()) {
+    1190              :         impl_.recordDataPtrOnStream(
+    1191              :             storage->data_ptr(), impl_.getStream(storage->device()));
+    1192              :       }
+    1193              :     }
+    1194              :   }
+    1195              : 
+    1196              :   void setErrorInternal(
+    1197              :       std::exception_ptr eptr,
+    1198              :       std::unique_lock<std::mutex>& lock) {
+    1199              :     TORCH_CHECK(
+    1200              :         !eptr_,
+    1201              :         "Error already set on this Future: ",
+    1202              :         tryRetrieveErrorMessageInternal(eptr_),
+    1203              :         ", trying to set error: ",
+    1204              :         tryRetrieveErrorMessageInternal(eptr));
+    1205              :     TORCH_INTERNAL_ASSERT(!completed(), "Future is already marked completed");
+    1206              :     completed_ = true;
+    1207              :     eptr_ = std::move(eptr);
+    1208              : 
+    1209              :     std::vector<std::function<void(Future&)>> cbs;
+    1210              :     cbs.swap(callbacks_);
+    1211              :     lock.unlock();
+    1212              : 
+    1213              :     finished_cv_.notify_all();
+    1214              :     for (auto& callback : cbs) {
+    1215              :       invokeCallback(std::move(callback));
+    1216              :     }
+    1217              :   }
+    1218              : 
+    1219              :   // Tries to retrieve the error message from std::exception_ptr.
+    1220              :   std::string tryRetrieveErrorMessageInternal(std::exception_ptr eptr) const {
+    1221              :     try {
+    1222              :       std::rethrow_exception(std::move(eptr));
+    1223              :     } catch (const std::exception& e) {
+    1224              :       return e.what();
+    1225              :     } catch (...) {
+    1226              :       return "Unknown Exception Type";
+    1227              :     }
+    1228              :   }
+    1229              : 
+    1230              :   // Defined in ivalue.cpp.
+    1231              :   static std::vector<WeakStorage> extractStorages(
+    1232              :       const at::IValue& value);
+    1233              : 
+    1234              :   static std::vector<c10::Device> getDevicesOfStorages(
+    1235              :       const c10::impl::VirtualGuardImpl& impl,
+    1236              :       const std::vector<WeakStorage>& storages) {
+    1237              :     c10::DeviceIndex deviceCount = impl.deviceCount();
+    1238              :     std::vector<bool> isDeviceUsed(deviceCount, false);
+    1239              :     for (const WeakStorage& weak_storage : storages) {
+    1240              :       c10::intrusive_ptr<c10::StorageImpl> storage = weak_storage.lock();
+    1241              :       if (!storage) {
+    1242              :         continue;
+    1243              :       }
+    1244              :       c10::Device device = storage->device();
+    1245              :       if (!device.is_cpu()) {
+    1246              :         TORCH_CHECK_VALUE(
+    1247              :             device.type() == impl.type(),
+    1248              :             "Expected all data ptrs to be on a device of type ",
+    1249              :             impl.type(),
+    1250              :             ", got one on device ",
+    1251              :             device);
+    1252              :         isDeviceUsed[device.index()] = true;
+    1253              :       }
+    1254              :     }
+    1255              :     std::vector<c10::Device> devices;
+    1256              :     for (c10::DeviceIndex idx = 0; idx < deviceCount; idx++) {
+    1257              :       if (isDeviceUsed[idx]) {
+    1258              :         devices.emplace_back(impl.type(), idx);
+    1259              :       }
+    1260              :     }
+    1261              :     return devices;
+    1262              :   }
+    1263              : 
+    1264              :   static std::string formatSetOfDevices(
+    1265              :       const std::vector<c10::Device>& devices) {
+    1266              :     if (devices.empty()) {
+    1267              :       return "(none)";
+    1268              :     }
+    1269              :     std::ostringstream oss;
+    1270              :     oss << devices[0];
+    1271              :     for (const auto idx : c10::irange(1, devices.size())) {
+    1272              :       if (idx == devices.size() - 1) {
+    1273              :         oss << " and ";
+    1274              :       } else {
+    1275              :         oss << ", ";
+    1276              :       }
+    1277              :       oss << devices[idx];
+    1278              :     }
+    1279              :     return oss.str();
+    1280              :   }
+    1281              : 
+    1282              :   static c10::DeviceType getTypeOfDevices(
+    1283              :       const std::vector<c10::Device>& devices) {
+    1284              :     if (devices.empty()) {
+    1285              :       return c10::kCPU;
+    1286              :     }
+    1287              :     c10::DeviceType deviceType = devices[0].type();
+    1288              :     for (const auto idx : c10::irange(1, devices.size())) {
+    1289              :       TORCH_CHECK_VALUE(
+    1290              :           devices[idx].type() == deviceType,
+    1291              :           "Expected all devices to be of the same type, but got a mismatch between ",
+    1292              :           devices[0],
+    1293              :           " and ",
+    1294              :           devices[idx]);
+    1295              :     }
+    1296              :     return deviceType;
+    1297              :   }
+    1298              : 
+    1299              :   // We need devices to be sorted in order to use ensureIsSubsetOfDevices.
+    1300              :   static std::vector<c10::Device> sortAndDeduplicateDevices(
+    1301              :       const c10::impl::VirtualGuardImpl& /*impl*/,
+    1302              :       std::vector<c10::Device> devices) {
+    1303              :     std::sort(
+    1304              :       devices.begin(), devices.end(),
+    1305              :       [](const c10::Device& a, const c10::Device& b) { return a.index() < b.index(); });
+    1306              :     // Deduplicate by compacting.
+    1307              :     size_t targetIdx = 0;
+    1308              :     for (const auto sourceIdx : c10::irange(devices.size())) {
+    1309              :       TORCH_CHECK_VALUE(
+    1310              :           devices[sourceIdx].has_index(),
+    1311              :           "Expected devices to have indices, got ", devices[sourceIdx]);
+    1312              :       if (targetIdx > 0 && devices[targetIdx - 1].index() == devices[sourceIdx].index()) {
+    1313              :         // It's a duplicate, skip it.
+    1314              :         continue;
+    1315              :       }
+    1316              :       if (sourceIdx != targetIdx) {
+    1317              :         devices[targetIdx] = devices[sourceIdx];
+    1318              :       }
+    1319              :       targetIdx++;
+    1320              :     }
+    1321              :     // If there were duplicates there's now a gap at the end: trim it. Resizing
+    1322              :     // requires the item type to be default-constructible (which c10::Device is
+    1323              :     // not) because in principle it could be required to create new items. Since
+    1324              :     // we know we'll shrink the vector, we provide a custom dummy value instead.
+    1325              :     devices.resize(targetIdx, c10::Device(c10::kCPU));
+    1326              :     return devices;
+    1327              :   }
+    1328              : 
+    1329              :   static void ensureIsSubsetOfDevices(
+    1330              :       const std::vector<c10::Device>& subset,
+    1331              :       const std::vector<c10::Device>& superset) {
+    1332              :     // We assume the devices in both vectors have the same consistent type, and
+    1333              :     // their indices are unique and sorted.
+    1334              :     std::vector<c10::Device> excessDevices;
+    1335              :     std::set_difference(
+    1336              :         subset.begin(),
+    1337              :         subset.end(),
+    1338              :         superset.begin(),
+    1339              :         superset.end(),
+    1340              :         std::back_inserter(excessDevices),
+    1341              :         [](const c10::Device& a, const c10::Device& b) { return a.index() < b.index(); });
+    1342              :     TORCH_CHECK_VALUE(
+    1343              :         excessDevices.empty(),
+    1344              :         "The result contained tensors residing on device(s) ",
+    1345              :         formatSetOfDevices(excessDevices),
+    1346              :         " which are not among the expected device(s) ",
+    1347              :         formatSetOfDevices(superset));
+    1348              :   }
+    1349              : 
+    1350              :   mutable std::mutex mutex_;
+    1351              :   std::atomic_bool completed_ = {false}; // is this future complete
+    1352              :   std::condition_variable finished_cv_;
+    1353              : 
+    1354              :   IValue value_; // when finished the value
+    1355              :   TypePtr type_;
+    1356              :   std::vector<std::function<void(Future&)>> callbacks_;
+    1357              :   std::exception_ptr eptr_;
+    1358              : 
+    1359              :   // An upcast pointer to a virtual class which allows us to manipulate events,
+    1360              :   // streams, ... in a generic way, without an explicit dependency on CUDA.
+    1361              :   const c10::impl::VirtualGuardImpl impl_;
+    1362              : 
+    1363              :   // The device that was current when markCompleted was called, which we'll
+    1364              :   // restore when invoking callbacks. It's optional because we'll only store it
+    1365              :   // if the future completes successfully.
+    1366              :   optional<c10::Device> currentDevice_;
+    1367              : 
+    1368              :   // The events that correspond to the completion of the async I/O kernels. They
+    1369              :   // are recorded on the appropriate streams when the future is marked completed
+    1370              :   // and can then be queried/waited/blocked on. There is one event for each
+    1371              :   // distinct device on which the value's tensors reside.
+    1372              :   std::vector<c10::Event> events_;
+    1373              : 
+    1374              :   // A cached version of the storages extracted from the value when the future
+    1375              :   // is first marked completed.
+    1376              :   std::vector<WeakStorage> storages_;
+    1377              : 
+    1378              :   // The bounding set of devices that this future, and any of its children, is
+    1379              :   // allowed to use. This is a superset of the set of devices used by the events
+    1380              :   // above. We need this to know what streams (for which devices) to set as
+    1381              :   // current when invoking a callback, thus allowing the callback to use devices
+    1382              :   // that the parent future didn't use. This field is set to the value provided
+    1383              :   // in the constructor and will be "inherited" by all child futures.
+    1384              :   const std::vector<c10::Device> devices_;
+    1385              : };
+    1386              : 
+    1387              : struct C10_EXPORT ivalue::Await final : c10::intrusive_ptr_target {
+    1388              :  private:
+    1389              :   explicit Await(TypePtr elType, std::function<IValue()> fn)
+    1390              :       : elType_(std::move(elType)), type_(AwaitType::create(elType_)), fn_(std::move(fn)) {}
+    1391              : 
+    1392              :   explicit Await(TypePtr elType) : elType_(std::move(elType)), type_(AwaitType::create(elType_)) { }
+    1393              : 
+    1394              :   friend c10::intrusive_ptr<Await>;
+    1395              : 
+    1396              :  public:
+    1397              :   Await(const Await&) = delete;
+    1398              :   Await(Await&&) = delete;
+    1399              :   Await& operator=(const Await&) = delete;
+    1400              :   Await& operator=(Await&&) = delete;
+    1401              : 
+    1402              :   IValue wait() {
+    1403              :     if (!completed_) {
+    1404              :       TORCH_CHECK(fn_, "Incompleted Await: fn can't be None");
+    1405              :       value_ = fn_();
+    1406              :       completed_ = true;
+    1407              :       args_ = {};
+    1408              :     }
+    1409              :     return value_;
+    1410              :   }
+    1411              : 
+    1412              :   IValue value() {
+    1413              :     TORCH_CHECK(completed_, "Await must be completed");
+    1414              :     return value_;
+    1415              :   }
+    1416              : 
+    1417              :   void setFn(std::function<IValue()> fn) {
+    1418              :     fn_ = std::move(fn);
+    1419              :   }
+    1420              : 
+    1421              :   bool completed() {
+    1422              :     return completed_;
+    1423              :   }
+    1424              : 
+    1425              :   void markCompleted(IValue value) {
+    1426              :     value_ = std::move(value);
+    1427              :     completed_ = true;
+    1428              :   }
+    1429              : 
+    1430              :   TORCH_API friend std::ostream& operator<<(
+    1431              :       std::ostream& out,
+    1432              :       const Await& v);
+    1433              : 
+    1434              :   TypePtr elementType() const {
+    1435              :     return elType_;
+    1436              :   }
+    1437              : 
+    1438              :   TypePtr type() const {
+    1439              :     return type_;
+    1440              :   }
+    1441              : 
+    1442              :   void setArgs(std::vector<IValue> args) {
+    1443              :     args_ = std::move(args);
+    1444              :   }
+    1445              : 
+    1446              :   std::vector<IValue>& args() {
+    1447              :     return args_;
+    1448              :   }
+    1449              : 
+    1450              :  private:
+    1451              :   TypePtr elType_;
+    1452              :   TypePtr type_;
+    1453              :   std::vector<IValue> args_;
+    1454              :   std::function<IValue()> fn_;
+    1455              :   IValue value_;
+    1456              :   bool completed_{};
+    1457              : };
+    1458              : 
+    1459              : // Input is a list of Futures with the same target type.
+    1460              : // Output is a Future to the List of completed Futures.
+    1461              : TORCH_API intrusive_ptr<ivalue::Future> collectAll(
+    1462              :     c10::List<c10::intrusive_ptr<ivalue::Future>> srcs);
+    1463              : // Input is a List of Futures with the same target type.
+    1464              : // Output is a Future that will be updated with a seen value.
+    1465              : TORCH_API intrusive_ptr<ivalue::Future> collectAny(
+    1466              :     c10::List<c10::intrusive_ptr<ivalue::Future>> srcs);
+    1467              : 
+    1468              : // User-defined object.
+    1469              : struct C10_EXPORT ivalue::Object final : c10::intrusive_ptr_target {
+    1470              :  public:
+    1471              :   // In general, class types hold a shared_ptr to its owning CompilationUnit,
+    1472              :   // so that its type and methods do not get deallocated while the class exists.
+    1473              :   // However, the CompilationUnit holds ownership of the type's graphs, so
+    1474              :   // inserting a constant object into a Graph would create a reference cycle if
+    1475              :   // that constant object held a shared_ptr to its CU. For these objects we
+    1476              :   // instatiate them with non-owning references to its CU
+    1477              :   Object(WeakOrStrongTypePtr type, size_t numSlots) : type_(std::move(type)) {
+    1478              :     slots_.resize(numSlots);
+    1479              :   }
+    1480              : 
+    1481              :   Object(StrongTypePtr type, size_t numSlots)
+    1482              :       : type_(WeakOrStrongTypePtr(std::move(type))) {
+    1483              :     slots_.resize(numSlots);
+    1484              :   }
+    1485              : 
+    1486              :   static c10::intrusive_ptr<Object> create(
+    1487              :       WeakOrStrongTypePtr type,
+    1488              :       size_t numSlots) {
+    1489              :     return c10::make_intrusive<Object>(std::move(type), numSlots);
+    1490              :   }
+    1491              : 
+    1492              :   static c10::intrusive_ptr<Object> create(
+    1493              :       StrongTypePtr type,
+    1494              :       size_t numSlots) {
+    1495              :     return c10::make_intrusive<Object>(std::move(type), numSlots);
+    1496              :   }
+    1497              : 
+    1498              :   static c10::intrusive_ptr<Object> create(ClassTypePtr classType, size_t numSlots);
+    1499              : 
+    1500              :   /**
+    1501              :    * Slot API.
+    1502              :    *
+    1503              :    * Attributes are stored as a simple vector so that lookups are fast at
+    1504              :    * runtime. A "slot" is just an index into that vector, which can be computed
+    1505              :    * statically if you have access to the class type. Use this API if you are
+    1506              :    * writing compiler stuff.
+    1507              :    */
+    1508              :   void setSlot(size_t slot, IValue v) {
+    1509              :     if (slot >= slots_.size()) {
+    1510              :       // for module types, it is possible that the members of the class have
+    1511              :       // expanded after the object was created. In this case, we expand
+    1512              :       // the slots to the right size
+    1513              :       resizeObject(slot);
+    1514              :     }
+    1515              :     slots_[slot] = std::move(v);
+    1516              :   }
+    1517              : 
+    1518              :   const IValue& getSlot(size_t slot) const {
+    1519              :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(slot < slots_.size());
+    1520              :     // NOTE: This lookup is fairly hot, so we use unchecked access to the
+    1521              :     // vector.  Errors should still be detectable with ASan.
+    1522              :     return slots_[slot];
+    1523              :   }
+    1524              : 
+    1525              :   void unsafeRemoveSlot(size_t slot) {
+    1526              :     TORCH_CHECK(slot < slots_.size());
+    1527              :     slots_.erase(slots_.begin() + slot);
+    1528              :   }
+    1529              : 
+    1530              :   /**
+    1531              :    * Attribute API.
+    1532              :    *
+    1533              :    * Wrappers around the slot stuff so that users can access attributes
+    1534              :    * directly. Use this API if you are a user.
+    1535              :    *
+    1536              :    * Note: Unlike in Python, TorchScript must make a distinction between
+    1537              :    * attributes (which are IValues) and methods (which are Methods). If you
+    1538              :    * want a method, use `obj.type()->getMethod()`
+    1539              :    */
+    1540              :   IValue getAttr(const std::string& name) const;
+    1541              :   void setAttr(const std::string& name, IValue v);
+    1542              :   // Remove attribute by name, caller is responsible for
+    1543              :   // the safety of this operation
+    1544              :   // We didn't remove the attribute in the type because the type
+    1545              :   // might be shared by multiple objects.
+    1546              :   // Therefore after removing attribute, the object is in an inconsistent
+    1547              :   // state where it has more attribute types in its Type than
+    1548              :   // the attribute slots it has, user needs to make sure the object
+    1549              :   // has consistent by removing the attribute in type as well
+    1550              :   void unsafeRemoveAttr(const std::string& name);
+    1551              : 
+    1552              :   std::string name() const;
+    1553              : 
+    1554              :   const std::vector<IValue>& slots() const {
+    1555              :     return slots_;
+    1556              :   }
+    1557              :   std::shared_ptr<ClassType> type() const;
+    1558              : 
+    1559              :   std::shared_ptr<torch::jit::CompilationUnit> compilation_unit() {
+    1560              :     if (type_.holds_strong_ref()) {
+    1561              :       return type_.cu_.getStrongRefOrThrow();
+    1562              :     } else {
+    1563              :       auto weak_ptr = type_.cu_.getWeakRefOrThrow();
+    1564              :       return std::shared_ptr<torch::jit::CompilationUnit>(weak_ptr);
+    1565              :     }
+    1566              :   }
+    1567              : 
+    1568              :   c10::intrusive_ptr<Object> copy_to_weak_compilation_ref() const;
+    1569              : 
+    1570              :   void unsafe_make_weak_compilation_ref() {
+    1571              :     type_ = WeakOrStrongTypePtr(type_.asWeakTypePtr());
+    1572              :   }
+    1573              : 
+    1574              :   c10::intrusive_ptr<Object> copy() const;
+    1575              : 
+    1576              :   c10::intrusive_ptr<Object> deepcopy(
+    1577              :       c10::optional<at::Device> device = c10::nullopt) const;
+    1578              : 
+    1579              :   c10::intrusive_ptr<Object> deepcopy(
+    1580              :       IValue::HashAliasedIValueMap& memo,
+    1581              :       c10::optional<at::Device> device = c10::nullopt) const;
+    1582              : 
+    1583              :   bool is_weak_compilation_ref() const {
+    1584              :     return !type_.holds_strong_ref();
+    1585              :   }
+    1586              : 
+    1587              :   bool is_empty_strong_compilation_ref() const {
+    1588              :     return type_.holds_empty_strong_ref();
+    1589              :   }
+    1590              : 
+    1591              :  private:
+    1592              :   void resizeObject(size_t slot);
+    1593              :   WeakOrStrongTypePtr type_;
+    1594              :   std::vector<IValue> slots_;
+    1595              : };
+    1596              : 
+    1597              : // virtual ivalue PyObjectHolder that hold a py::object, we make this virtual
+    1598              : // because the py::object and refcounting logic should happen in libtorch_python
+    1599              : // see concrete implementation in python_ivalue.h
+    1600              : struct ivalue::PyObjectHolder : c10::intrusive_ptr_target {
+    1601              :  public:
+    1602              :   virtual PyObject* getPyObject() = 0;
+    1603              :   virtual c10::InferredType tryToInferType() = 0;
+    1604              :   virtual IValue toIValue(const TypePtr& type, c10::optional<int32_t> N = c10::nullopt) = 0;
+    1605              :   virtual std::string toStr() = 0;
+    1606              :   virtual std::vector<at::Tensor> extractTensors() = 0;
+    1607              : 
+    1608              :   ~PyObjectHolder() override = default;
+    1609              : };
+    1610              : 
+    1611              : struct ivalue::EnumHolder : c10::intrusive_ptr_target {
+    1612              :  public:
+    1613              :   EnumHolder(std::shared_ptr<EnumType> type, std::string name, IValue value)
+    1614              :       : type_(std::move(type)),
+    1615              :         name_(std::move(name)),
+    1616              :         value_(std::move(value)) {}
+    1617              : 
+    1618              :   bool is(const ivalue::EnumHolder& rhs) {
+    1619              :     return *this == rhs;
+    1620              :   }
+    1621              : 
+    1622              :   friend bool operator==(
+    1623              :       const ivalue::EnumHolder& lhs,
+    1624              :       const ivalue::EnumHolder& rhs);
+    1625              : 
+    1626              :   TORCH_API friend std::ostream& operator<<(
+    1627              :       std::ostream& out,
+    1628              :       const ivalue::EnumHolder& v);
+    1629              : 
+    1630              :   TORCH_API const std::string qualifiedClassName() const;
+    1631              : 
+    1632              :   const std::string unqualifiedClassName() const;
+    1633              : 
+    1634              :   const std::string& name() const {
+    1635              :     return name_;
+    1636              :   }
+    1637              : 
+    1638              :   const IValue& value() const {
+    1639              :     return value_;
+    1640              :   }
+    1641              : 
+    1642              :   std::shared_ptr<EnumType> type() const {
+    1643              :     return type_;
+    1644              :   }
+    1645              : 
+    1646              :  private:
+    1647              :   std::shared_ptr<EnumType> type_;
+    1648              :   std::string name_;
+    1649              :   IValue value_;
+    1650              : };
+    1651              : 
+    1652              : #undef TORCH_FORALL_TAGS
+    1653              : 
+    1654              : namespace detail {
+    1655              : 
+    1656              : struct _guarded_unsigned_long_unique_dummy final {
+    1657              :   _guarded_unsigned_long_unique_dummy(int64_t){};
+    1658              : };
+    1659              : using _guarded_unsigned_long = std::conditional_t<
+    1660              :     std::is_same<unsigned long, uint32_t>::value ||
+    1661              :         std::is_same<unsigned long, uint64_t>::value,
+    1662              :     _guarded_unsigned_long_unique_dummy,
+    1663              :     unsigned long>;
+    1664              : 
+    1665              : } // namespace detail
+    1666              : 
+    1667              : inline ivalue::Object& IValue::toObjectRef() const {
+    1668              :   AT_ASSERT(isObject(), "Expected Object but got ", tagKind());
+    1669              :   TORCH_INTERNAL_ASSERT_DEBUG_ONLY(payload.u.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton(), "Attempted to create null reference");
+    1670              :   return *static_cast<c10::ivalue::Object*>(payload.u.as_intrusive_ptr);
+    1671              : }
+    1672              : 
+    1673              : // note: when adding a DEFINE_TO case here you should also add a
+    1674              : // toX method to IValue. These named methods are much more discoverable
+    1675              : // than the to templated function.
+    1676              : 
+    1677              : #define DEFINE_TO(T, method_name)                          \
+    1678              :   template <>                                              \
+    1679              :   inline T IValue::to<T>()&& {                             \
+    1680              :     return static_cast<T>(std::move(*this).method_name()); \
+    1681              :   }                                                        \
+    1682              :   template <>                                              \
+    1683              :   inline c10::detail::ivalue_to_const_ref_overload_return<T>::type IValue::to<T>() const& { \
+    1684              :     typedef c10::detail::ivalue_to_const_ref_overload_return<T>::type return_type;          \
+    1685              :     return static_cast<return_type>(this->method_name());                                   \
+    1686              :   }
+    1687              : 
+    1688            0 : DEFINE_TO(at::Tensor, toTensor)
+    1689              : DEFINE_TO(at::Storage, toStorage)
+    1690              : DEFINE_TO(c10::Stream, toStream)
+    1691              : DEFINE_TO(float, toDouble)
+    1692            0 : DEFINE_TO(double, toDouble)
+    1693            0 : DEFINE_TO(c10::complex<double>, toComplexDouble)
+    1694              : DEFINE_TO(unsigned char, toInt)
+    1695              : DEFINE_TO(signed char, toInt)
+    1696              : DEFINE_TO(unsigned short, toInt)
+    1697              : DEFINE_TO(short, toInt)
+    1698              : DEFINE_TO(int, toInt)
+    1699              : DEFINE_TO(uint32_t, toInt)
+    1700              : DEFINE_TO(uint64_t, toInt)
+    1701              : DEFINE_TO(detail::_guarded_unsigned_long, toInt)
+    1702            0 : DEFINE_TO(int64_t, toInt)
+    1703              : DEFINE_TO(bool, toBool)
+    1704              : DEFINE_TO(c10::intrusive_ptr<caffe2::Blob>, toBlob);
+    1705              : DEFINE_TO(c10::intrusive_ptr<ivalue::ConstantString>, toString)
+    1706              : DEFINE_TO(c10::intrusive_ptr<ivalue::Object>, toObject)
+    1707              : DEFINE_TO(at::Scalar, toScalar)
+    1708              : DEFINE_TO(c10::List<int64_t>, toIntList)
+    1709              : DEFINE_TO(c10::List<double>, toDoubleList)
+    1710              : DEFINE_TO(c10::List<c10::complex<double>>, toComplexDoubleList)
+    1711              : DEFINE_TO(c10::List<bool>, toBoolList)
+    1712              : DEFINE_TO(c10::List<at::Tensor>, toTensorList)
+    1713              : DEFINE_TO(c10::impl::GenericList, toList)
+    1714              : DEFINE_TO(c10::impl::GenericDict, toGenericDict)
+    1715              : DEFINE_TO(c10::intrusive_ptr<ivalue::Tuple>, toTuple)
+    1716              : DEFINE_TO(std::string, toStringRef)
+    1717              : DEFINE_TO(c10::string_view, toStringView)
+    1718              : DEFINE_TO(c10::intrusive_ptr<ivalue::Future>, toFuture)
+    1719              : DEFINE_TO(c10::intrusive_ptr<ivalue::Await>, toAwait)
+    1720              : DEFINE_TO(c10::intrusive_ptr<c10::RRefInterface>, toRRef)
+    1721              : DEFINE_TO(c10::intrusive_ptr<at::Quantizer>, toQuantizer)
+    1722              : DEFINE_TO(IValue, toIValue)
+    1723              : DEFINE_TO(c10::Device, toDevice)
+    1724              : DEFINE_TO(at::ScalarType, toScalarType)
+    1725              : DEFINE_TO(at::Layout, toLayout)
+    1726              : DEFINE_TO(at::MemoryFormat, toMemoryFormat)
+    1727              : DEFINE_TO(at::QScheme, toQScheme)
+    1728              : DEFINE_TO(at::Dimname, toDimname)
+    1729              : DEFINE_TO(at::Generator, toGenerator)
+    1730            0 : DEFINE_TO(c10::SymInt, toSymInt)
+    1731              : DEFINE_TO(c10::SymFloat, toSymFloat)
+    1732              : DEFINE_TO(c10::SymBool, toSymBool)
+    1733              : 
+    1734              : template <class T>
+    1735              : struct _fake_type {};
+    1736              : 
+    1737              : // generic_to<T> converts an IValue from a generic list or generic dict
+    1738              : // to a concrete list/dict type likelike List<T>, Dict<...> or optional<T>.
+    1739              : // Note that in the case of lists, this only works for IValue-based lists,
+    1740              : // i.e. not for int64_t, double, ...
+    1741              : // generic_to<T> is an implementation detail of IValue::to<T> and not
+    1742              : // supposed to be called directly.
+    1743              : // The _fake_type<T> parameter allows us to overload
+    1744              : // based on the return type.
+    1745              : template <class Elem>
+    1746              : // TODO this is deprecated but we don't throw a warning because a lot of ops in
+    1747              : // native_functions.yaml still return std::vector.
+    1748              : // C10_DEPRECATED_MESSAGE("IValues based on std::vector<T> are potentially slow
+    1749              : // and deprecated. Please use torch::List<T> instead.")
+    1750              : std::vector<Elem> generic_to(IValue ivalue, _fake_type<std::vector<Elem>>) {
+    1751              :   // We need to do a deep copy of the vector because there might be other
+    1752              :   // references to this same IValue that also use the list. We can't just
+    1753              :   // move the elements out.
+    1754              :   auto list = std::move(ivalue).to<List<Elem>>();
+    1755              :   std::vector<Elem> result;
+    1756              :   result.reserve(list.size());
+    1757              :   for (Elem v : list) {
+    1758              :     result.push_back(std::move(v));
+    1759              :   }
+    1760              :   return result;
+    1761              : }
+    1762              : 
+    1763              : template <typename T>
+    1764              : c10::intrusive_ptr<T> IValue::toCustomClass() && {
+    1765              :   static_assert(
+    1766              :       std::is_base_of<torch::CustomClassHolder, T>::value == true,
+    1767              :       "toCustomClass requires that template parameter T must inherit "
+    1768              :       "from torch::CustomClassHolder");
+    1769              :   auto obj = toObject();
+    1770              :   TORCH_CHECK(
+    1771              :       obj->slots().size() == 1,
+    1772              :       "Tried to cast IValue to custom class but it did "
+    1773              :       "not contain a custom class!");
+    1774              :   const auto* expected_type = c10::getCustomClassType<c10::intrusive_ptr<T>>().get();
+    1775              :   ivalue::checkCustomClassType(expected_type, type().get());
+    1776              :   auto userObj =
+    1777              :       c10::static_intrusive_pointer_cast<T>(obj->getSlot(0).toCapsule());
+    1778              :   return userObj;
+    1779              : }
+    1780              : 
+    1781              : template <typename T>
+    1782              : c10::intrusive_ptr<T> IValue::toCustomClass() const& {
+    1783              :   static_assert(
+    1784              :       std::is_base_of<torch::CustomClassHolder, T>::value == true,
+    1785              :       "toCustomClass requires that template parameter T must inherit "
+    1786              :       "from torch::CustomClassHolder");
+    1787              :   auto obj = toObject();
+    1788              :   TORCH_CHECK(
+    1789              :       obj->slots().size() == 1,
+    1790              :       "Tried to cast IValue to custom class but it did "
+    1791              :       "not contain a custom class!");
+    1792              :   const auto* expected_type = c10::getCustomClassType<c10::intrusive_ptr<T>>().get();
+    1793              :   ivalue::checkCustomClassType(expected_type, type().get());
+    1794              :   auto userObj =
+    1795              :       c10::static_intrusive_pointer_cast<T>(obj->getSlot(0).toCapsule());
+    1796              :   return userObj;
+    1797              : }
+    1798              : 
+    1799              : template <typename T>
+    1800              : T generic_to(IValue ivalue, _fake_type<T>) {
+    1801              :   using ElemType = typename std::remove_pointer<T>::type::element_type;
+    1802              :   return std::move(ivalue).toCustomClass<ElemType>();
+    1803              : }
+    1804              : 
+    1805              : template <typename T>
+    1806              : tagged_capsule<T> generic_to(IValue ivalue, _fake_type<tagged_capsule<T>>) {
+    1807              :   return tagged_capsule<T>{std::move(ivalue)};
+    1808              : }
+    1809              : 
+    1810              : template <typename Elem>
+    1811              : c10::List<Elem> generic_to(IValue ivalue, _fake_type<c10::List<Elem>>) {
+    1812              :   return impl::toTypedList<Elem>(std::move(ivalue).toList());
+    1813              : }
+    1814              : 
+    1815              : template <typename T>
+    1816            0 : static T createVectorLikeFromList(const c10::detail::ListImpl* impl) {
+    1817            0 :   T result;
+    1818            0 :   result.reserve(impl->list.size());
+    1819            0 :   for (const auto & i : impl->list) {
+    1820            0 :     result.push_back(i.to<typename T::value_type>());
+    1821              :   }
+    1822            0 :   return result;
+    1823            0 : }
+    1824              : 
+    1825              : template <typename T>
+    1826            0 : static std::vector<T> createVectorFromList(const c10::detail::ListImpl* impl) {
+    1827            0 :   return createVectorLikeFromList<std::vector<T>>(impl);
+    1828              : }
+    1829              : 
+    1830              : template <typename T>
+    1831              : std::vector<T> createVectorFromList(const c10::List<T>& impl) {
+    1832              :   std::vector<T> result;
+    1833              :   result.reserve(impl.size());
+    1834              :   for (size_t i = 0, N = impl.size(); i < N; ++i) {
+    1835              :     result.push_back(impl[i]);
+    1836              :   }
+    1837              :   return result;
+    1838              : }
+    1839              : 
+    1840              : template <typename T>
+    1841              : OptionalArray<T> generic_to(IValue ivalue, _fake_type<OptionalArray<T>>) {
+    1842              :   if (ivalue.isNone()) {
+    1843              :     return {};
+    1844              :   }
+    1845              :   return createVectorFromList<T>(
+    1846              :     std::move(ivalue).to<c10::List<T>>()
+    1847              :   );
+    1848              : }
+    1849              : 
+    1850              : namespace detail {
+    1851              : template <typename Elem, size_t... I>
+    1852              : std::array<Elem, sizeof...(I)> generic_to_array(
+    1853              :     IValue ivalue,
+    1854              :     _fake_type<std::array<Elem, sizeof...(I)>>,
+    1855              :     std::index_sequence<I...>) {
+    1856              :   // We need to do a deep copy of the array because there might be other
+    1857              :   // references to this same IValue that also use the list. We can't just
+    1858              :   // move the elements out.
+    1859              :   auto list = std::move(ivalue).to<List<Elem>>();
+    1860              :   TORCH_CHECK(
+    1861              :       list.size() == sizeof...(I),
+    1862              :       "Tried to convert a List with ",
+    1863              :       list.size(),
+    1864              :       " elements to a fixed-size array of size ",
+    1865              :       sizeof...(I));
+    1866              :   return {list[I]...};
+    1867              : }
+    1868              : } // namespace detail
+    1869              : 
+    1870              : template <typename Elem, size_t N>
+    1871              : std::array<Elem, N> generic_to(
+    1872              :     IValue ivalue,
+    1873              :     _fake_type<std::array<Elem, N>> ft) {
+    1874              :   return detail::generic_to_array(ivalue, ft, std::make_index_sequence<N>());
+    1875              : }
+    1876              : 
+    1877              : template <typename Key, typename Value>
+    1878              : c10::Dict<Key, Value> generic_to(
+    1879              :     IValue ivalue,
+    1880              :     _fake_type<c10::Dict<Key, Value>>) {
+    1881              :   return impl::toTypedDict<Key, Value>(std::move(ivalue).toGenericDict());
+    1882              : }
+    1883              : 
+    1884              : template <typename K, typename V>
+    1885              : C10_DEPRECATED_MESSAGE(
+    1886              :     "IValues based on std::unordered_map are slow and deprecated. Please use c10::Dict<K, V> instead.")
+    1887              : std::unordered_map<K, V> generic_to(
+    1888              :     IValue ivalue,
+    1889              :     _fake_type<std::unordered_map<K, V>>) {
+    1890              :   std::unordered_map<K, V> specialized_dict;
+    1891              : 
+    1892              :   for (const auto& item : std::move(ivalue).toGenericDict()) {
+    1893              :     specialized_dict[item.key().template to<K>()] = item.value().template to<V>();
+    1894              :   }
+    1895              : 
+    1896              :   return specialized_dict;
+    1897              : }
+    1898              : 
+    1899              : template <typename T>
+    1900            0 : c10::optional<T> generic_to(IValue ivalue, _fake_type<c10::optional<T>>) {
+    1901            0 :   if (ivalue.isNone()) {
+    1902            0 :     return c10::nullopt;
+    1903              :   }
+    1904            0 :   return std::move(ivalue).to<T>();
+    1905              : }
+    1906              : 
+    1907              : namespace detail {
+    1908              : template <typename Tuple, std::size_t... INDEX>
+    1909              : Tuple generic_to_tuple_impl(
+    1910              :     const ivalue::TupleElements& t,
+    1911              :     std::index_sequence<INDEX...>) {
+    1912              :   return std::make_tuple(
+    1913              :       t[INDEX].to<typename std::tuple_element<INDEX, Tuple>::type>()...);
+    1914              : }
+    1915              : } // namespace detail
+    1916              : 
+    1917              : template <
+    1918              :     typename... Args,
+    1919              :     typename Indices = std::make_index_sequence<sizeof...(Args)>,
+    1920              :     std::enable_if_t<
+    1921              :         !guts::disjunction<
+    1922              :             std::is_lvalue_reference<Args>...,
+    1923              :             guts::negation<std::is_constructible<IValue, Args>>...>::value,
+    1924              :         std::nullptr_t> = nullptr>
+    1925              : std::tuple<Args...> generic_to(const IValue& ivalue, _fake_type<std::tuple<Args...>>) {
+    1926              :   const auto& vals = ivalue.toTupleRef().elements();
+    1927              :   TORCH_CHECK(vals.size() == sizeof...(Args));
+    1928              :   return detail::generic_to_tuple_impl<std::tuple<Args...>>(vals, Indices{});
+    1929              : }
+    1930              : 
+    1931              : template <typename T>
+    1932              : inline T IValue::to() && {
+    1933              :   return generic_to(std::move(*this), _fake_type<T>{});
+    1934              : }
+    1935              : 
+    1936              : template <>
+    1937              : inline c10::optional<c10::string_view> IValue::to() && {
+    1938              :   // In the default implementation, the IValue is destroyed with std::move.
+    1939              :   // But if the unboxed type is optional<string_view> we cannot destroy
+    1940              :   // the IValue.
+    1941              :   return generic_to(*this, _fake_type<c10::optional<c10::string_view>>{});
+    1942              : }
+    1943              : 
+    1944              : template <typename T>
+    1945            0 : inline typename c10::detail::ivalue_to_const_ref_overload_return<T>::type IValue::to() const& {
+    1946            0 :   return generic_to(*this, _fake_type<T>{});
+    1947              : }
+    1948              : 
+    1949              : inline c10::List<int64_t> IValue::toIntList() && {
+    1950              :   AT_ASSERT(isIntList(), "Expected IntList but got ", tagKind());
+    1951              :   return c10::List<int64_t>(moveToIntrusivePtr<c10::detail::ListImpl>());
+    1952              : }
+    1953              : inline c10::List<int64_t> IValue::toIntList() const& {
+    1954              :   AT_ASSERT(isIntList(), "Expected IntList but got ", tagKind());
+    1955              :   return c10::List<int64_t>(toIntrusivePtr<c10::detail::ListImpl>());
+    1956              : }
+    1957              : inline std::vector<int64_t> IValue::toIntVector() const {
+    1958              :   AT_ASSERT(isIntList(), "Expected IntList but got ", tagKind());
+    1959              :   TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+    1960              :       payload.u.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton(),
+    1961              :       "called toIntVector on null intrusive_ptr IValue");
+    1962              :   return createVectorFromList<int64_t>(
+    1963              :       static_cast<const c10::detail::ListImpl*>(payload.u.as_intrusive_ptr));
+    1964              : }
+    1965              : inline std::vector<c10::SymInt> IValue::toSymIntVector() const {
+    1966              :   AT_ASSERT(isSymIntList() || isIntList(), "Expected SymIntList or IntList but got ", tagKind());
+    1967              :   TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+    1968              :       payload.u.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton(),
+    1969              :       "called toSymIntVector on null intrusive_ptr IValue");
+    1970              :   return createVectorFromList<c10::SymInt>(
+    1971              :       static_cast<const c10::detail::ListImpl*>(payload.u.as_intrusive_ptr));
+    1972              : }
+    1973              : inline at::DimVector IValue::toDimVector() const {
+    1974              :   AT_ASSERT(isIntList(), "Expected IntList but got ", tagKind());
+    1975              :   TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+    1976              :       payload.u.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton(),
+    1977              :       "called toDimVector on null intrusive_ptr IValue");
+    1978              :   return createVectorLikeFromList<at::DimVector>(
+    1979              :       static_cast<const c10::detail::ListImpl*>(payload.u.as_intrusive_ptr));
+    1980              : }
+    1981              : inline c10::List<double> IValue::toDoubleList() && {
+    1982              :   AT_ASSERT(isDoubleList(), "Expected DoubleList but got ", tagKind());
+    1983              :   return c10::List<double>(moveToIntrusivePtr<c10::detail::ListImpl>());
+    1984              : }
+    1985              : inline c10::List<double> IValue::toDoubleList() const& {
+    1986              :   AT_ASSERT(isDoubleList(), "Expected DoubleList but got ", tagKind());
+    1987              :   return c10::List<double>(toIntrusivePtr<c10::detail::ListImpl>());
+    1988              : }
+    1989              : inline std::vector<double> IValue::toDoubleVector() const {
+    1990              :   AT_ASSERT(isDoubleList(), "Expected DoubleList but got ", tagKind());
+    1991              :   TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+    1992              :       payload.u.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton(),
+    1993              :       "called toDoubleVector on null intrusive_ptr IValue");
+    1994              :   return createVectorFromList<double>(
+    1995              :       static_cast<const c10::detail::ListImpl*>(payload.u.as_intrusive_ptr));
+    1996              : }
+    1997              : inline c10::List<c10::complex<double>> IValue::toComplexDoubleList() && {
+    1998              :   AT_ASSERT(isComplexDoubleList(), "Expected ComplexDoubleList but got ", tagKind());
+    1999              :   return c10::List<c10::complex<double>>(moveToIntrusivePtr<c10::detail::ListImpl>());
+    2000              : }
+    2001              : inline c10::List<c10::complex<double>> IValue::toComplexDoubleList() const& {
+    2002              :   AT_ASSERT(isComplexDoubleList(), "Expected ComplexDoubleList but got ", tagKind());
+    2003              :   return c10::List<c10::complex<double>>(toIntrusivePtr<c10::detail::ListImpl>());
+    2004              : }
+    2005              : inline std::vector<c10::complex<double>> IValue::toComplexDoubleVector() const {
+    2006              :   AT_ASSERT(isComplexDoubleList(), "Expected ComplexDoubleList but got ", tagKind());
+    2007              :   TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+    2008              :       payload.u.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton(),
+    2009              :       "called toComplexDoubleVector on null intrusive_ptr IValue");
+    2010              :   return createVectorFromList<c10::complex<double>>(
+    2011              :       static_cast<const c10::detail::ListImpl*>(payload.u.as_intrusive_ptr));
+    2012              : }
+    2013              : inline c10::List<bool> IValue::toBoolList() && {
+    2014              :   AT_ASSERT(isBoolList(), "Expected BoolList but got ", tagKind());
+    2015              :   return c10::List<bool>(moveToIntrusivePtr<c10::detail::ListImpl>());
+    2016              : }
+    2017              : inline c10::List<bool> IValue::toBoolList() const& {
+    2018              :   AT_ASSERT(isBoolList(), "Expected BoolList but got ", tagKind());
+    2019              :   return c10::List<bool>(toIntrusivePtr<c10::detail::ListImpl>());
+    2020              : }
+    2021              : inline c10::List<at::Tensor> IValue::toTensorList() && {
+    2022              :   AT_ASSERT(isTensorList(), "Expected TensorList but got ", tagKind());
+    2023              :   return c10::List<at::Tensor>(moveToIntrusivePtr<c10::detail::ListImpl>());
+    2024              : }
+    2025              : inline c10::List<at::Tensor> IValue::toTensorList() const& {
+    2026              :   AT_ASSERT(isTensorList(), "Expected TensorList but got ", tagKind());
+    2027              :   return c10::List<at::Tensor>(toIntrusivePtr<c10::detail::ListImpl>());
+    2028              : }
+    2029              : inline std::vector<at::Tensor> IValue::toTensorVector() const {
+    2030              :   AT_ASSERT(isTensorList(), "Expected TensorList but got ", tagKind());
+    2031              :   TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+    2032              :       payload.u.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton(),
+    2033              :       "called toTensorVector on null intrusive_ptr IValue");
+    2034              :   return createVectorFromList<at::Tensor>(
+    2035              :       static_cast<const c10::detail::ListImpl*>(payload.u.as_intrusive_ptr));
+    2036              : }
+    2037              : inline c10::List<c10::optional<at::Tensor>> IValue::toOptionalTensorList() && {
+    2038              :   AT_ASSERT(isOptionalTensorList(), "Expected OptionalTensorList but got ", tagKind());
+    2039              :   return c10::List<c10::optional<at::Tensor>>(moveToIntrusivePtr<c10::detail::ListImpl>());
+    2040              : }
+    2041              : inline c10::List<c10::optional<at::Tensor>> IValue::toOptionalTensorList() const& {
+    2042              :   AT_ASSERT(isOptionalTensorList(), "Expected OptionalTensorList but got ", tagKind());
+    2043              :   return c10::List<c10::optional<at::Tensor>>(toIntrusivePtr<c10::detail::ListImpl>());
+    2044              : }
+    2045              : inline std::vector<c10::optional<at::Tensor>> IValue::toOptionalTensorVector() const {
+    2046              :   AT_ASSERT(isOptionalTensorList(), "Expected OptionalTensorList but got ", tagKind());
+    2047              :   TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+    2048              :       payload.u.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton(),
+    2049              :       "called toOptionalTensorVector on null intrusive_ptr IValue");
+    2050              :   return createVectorFromList<c10::optional<at::Tensor>>(
+    2051              :       static_cast<const c10::detail::ListImpl*>(payload.u.as_intrusive_ptr));
+    2052              : }
+    2053              : inline c10::List<IValue> IValue::toList() && {
+    2054              :   AT_ASSERT(isList(), "Expected GenericList but got ", tagKind());
+    2055              :   return c10::List<IValue>(moveToIntrusivePtr<c10::detail::ListImpl>());
+    2056              : }
+    2057              : inline c10::List<IValue> IValue::toList() const& {
+    2058              :   AT_ASSERT(isList(), "Expected GenericList but got ", tagKind());
+    2059              :   return c10::List<IValue>(toIntrusivePtr<c10::detail::ListImpl>());
+    2060              : }
+    2061              : inline c10::ArrayRef<IValue> IValue::toListRef() const {
+    2062              :   AT_ASSERT(isList(), "Expected GenericList but got ", tagKind());
+    2063              :   TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+    2064              :       payload.u.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton(),
+    2065              :       "called toListRef on null intrusive_ptr IValue");
+    2066              :   return static_cast<const c10::detail::ListImpl*>(payload.u.as_intrusive_ptr)
+    2067              :       ->list;
+    2068              : }
+    2069              : inline c10::Dict<IValue, IValue> IValue::toGenericDict() && {
+    2070              :   AT_ASSERT(isGenericDict(), "Expected GenericDict but got ", tagKind());
+    2071              :   return c10::Dict<IValue, IValue>(moveToIntrusivePtr<c10::detail::DictImpl>());
+    2072              : }
+    2073              : inline c10::Dict<IValue, IValue> IValue::toGenericDict() const& {
+    2074              :   AT_ASSERT(isGenericDict(), "Expected GenericDict but got ", tagKind());
+    2075              :   return c10::Dict<IValue, IValue>(toIntrusivePtr<c10::detail::DictImpl>());
+    2076              : }
+    2077              : inline c10::intrusive_ptr<ivalue::Tuple> IValue::toTuple() && {
+    2078              :   AT_ASSERT(isTuple(), "Expected Tuple but got ", tagKind());
+    2079              :   return moveToIntrusivePtr<ivalue::Tuple>();
+    2080              : }
+    2081              : inline c10::intrusive_ptr<ivalue::Tuple> IValue::toTuple() const& {
+    2082              :   AT_ASSERT(isTuple(), "Expected Tuple but got ", tagKind());
+    2083              :   return toIntrusivePtr<ivalue::Tuple>();
+    2084              : }
+    2085              : inline ivalue::Tuple& IValue::toTupleRef() const {
+    2086              :   AT_ASSERT(isTuple(), "Expected Tuple but got ", tagKind());
+    2087              :   TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+    2088              :       payload.u.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton(),
+    2089              :       "called toTupleRef on null intrusive_ptr IValue");
+    2090              :   return *static_cast<c10::ivalue::Tuple*>(
+    2091              :       payload.u.as_intrusive_ptr);
+    2092              : }
+    2093              : 
+    2094              : inline IValue::IValue(c10::intrusive_ptr<ivalue::Tuple> v)
+    2095              :     : tag(Tag::Tuple) {
+    2096              :   payload.u.as_intrusive_ptr = null_to_undefined_tensor(v.release());
+    2097              : }
+    2098              : template <
+    2099              :     typename... Args,
+    2100              :     std::enable_if_t<
+    2101              :         !guts::disjunction<
+    2102              :             std::is_lvalue_reference<Args>...,
+    2103              :             guts::negation<std::is_constructible<IValue, Args>>...>::value,
+    2104              :         std::nullptr_t>>
+    2105              : inline IValue::IValue(const std::tuple<Args...>& t)
+    2106              :     : IValue(c10::guts::apply(c10::ivalue::Tuple::create<const Args&...>, t)) {
+    2107              : }
+    2108              : 
+    2109              : template <
+    2110              :     typename... Args,
+    2111              :     std::enable_if_t<
+    2112              :         !guts::disjunction<
+    2113              :             std::is_lvalue_reference<Args>...,
+    2114              :             guts::negation<std::is_constructible<IValue, Args>>...>::value,
+    2115              :         std::nullptr_t>>
+    2116              : inline IValue::IValue(std::tuple<Args...>&& t)
+    2117              :     : IValue(c10::guts::apply(c10::ivalue::Tuple::create<Args&&...>, std::move(t))) {
+    2118              : }
+    2119              : 
+    2120              : inline IValue::IValue(c10::intrusive_ptr<ivalue::ConstantString> v)
+    2121              :     : tag(Tag::String) {
+    2122              :   payload.u.as_intrusive_ptr = null_to_undefined_tensor(v.release());
+    2123              : }
+    2124              : inline IValue::IValue(std::string v)
+    2125              :     : IValue(ivalue::ConstantString::create(std::move(v))) {}
+    2126              : 
+    2127              : inline IValue::IValue(c10::impl::GenericList v)
+    2128              :     : tag(Tag::GenericList) {
+    2129              :   payload.u.as_intrusive_ptr = null_to_undefined_tensor(v.impl_.release());
+    2130              : }
+    2131              : 
+    2132              : template <class T, IValue::enable_if_list_is_ivalue_constructible<T>>
+    2133              : inline IValue::IValue(c10::List<T>&& v) : IValue(impl::toList<T>(std::move(v))) {}
+    2134              : template <class T, IValue::enable_if_list_is_ivalue_constructible<T>>
+    2135              : inline IValue::IValue(const c10::List<T>& v) : IValue(impl::toList<T>(v)) {}
+    2136              : template <class T, IValue::enable_if_list_is_ivalue_constructible<T>>
+    2137              : inline IValue::IValue(at::ArrayRef<T> v) : IValue(c10::List<T>()) {
+    2138              :   auto list = to<c10::List<T>>();
+    2139              :   list.reserve(v.size());
+    2140              :   for (const auto& e : v) {
+    2141              :     list.push_back(e);
+    2142              :   }
+    2143              : }
+    2144              : template <class T, IValue::enable_if_symint<T>>
+    2145              : inline IValue::IValue(at::ArrayRef<T> v) : IValue() {
+    2146              :   auto vi = c10::asIntArrayRefSlowOpt(v);
+    2147              :   if (vi.has_value()) {
+    2148              :     // This list is entirely integers; ensure it is typed as
+    2149              :     // an IntList so toIntList works
+    2150              :     *this = IValue(*vi);
+    2151              :   } else {
+    2152              :     // This list has SymInts; type it as a SymInt
+    2153              :     *this = IValue(impl::toList<c10::SymInt>(c10::List<c10::SymInt>()));
+    2154              :     auto list = to<c10::List<c10::SymInt>>();
+    2155              :     list.reserve(v.size());
+    2156              :     for (const auto& e : v) {
+    2157              :       list.push_back(e);
+    2158              :     }
+    2159              :   }
+    2160              : }
+    2161              : template <class T, IValue::enable_if_symint<T>>
+    2162              : inline IValue::IValue(at::OptionalArrayRef<T> mb_v) : IValue() {
+    2163              :   if (!mb_v.has_value()) return;
+    2164              :   *this = IValue(*mb_v);
+    2165              : }
+    2166              : template <class T, IValue::enable_if_symint<T>>
+    2167              : inline IValue::IValue(const std::vector<T>& v) : IValue() {
+    2168              :   *this = IValue(at::ArrayRef<T>(v));
+    2169              : }
+    2170              : template <class T, IValue::enable_if_list_is_ivalue_constructible<T>>
+    2171              : inline IValue::IValue(const std::vector<T>& v) : IValue(c10::List<T>()) {
+    2172              :   auto list = to<c10::List<T>>();
+    2173              :   list.reserve(v.size());
+    2174              :   for (const auto& e : v) {
+    2175              :     list.push_back(e);
+    2176              :   }
+    2177              : }
+    2178              : template <class T, IValue::enable_if_list_is_ivalue_constructible<T>>
+    2179              : inline IValue::IValue(c10::OptionalArrayRef<T> v) : IValue() {
+    2180              :   if (v.has_value()) {
+    2181              :     *this = IValue(std::move(*v));
+    2182              :   }
+    2183              : }
+    2184              : 
+    2185              : template <class T, size_t N>
+    2186              : inline IValue::IValue(std::array<T, N> v) : IValue(c10::List<T>()) {
+    2187              :   auto list = to<c10::List<T>>();
+    2188              :   list.reserve(v.size());
+    2189              :   for (auto& e : v) {
+    2190              :     list.push_back(std::move(e));
+    2191              :   }
+    2192              : }
+    2193              : 
+    2194              : template <class T, IValue::enable_if_ilist_is_ivalue_constructible<T>>
+    2195              : inline IValue::IValue(c10::IListRef<T> v) : IValue() {
+    2196              :   constexpr bool boxed_type_constructs_ivalue =
+    2197              :       std::is_constructible<IValue, typename c10::IListRef<T>::boxed_type>::value;
+    2198              :   // First, we try to use the boxed value.
+    2199              :   // If we fail (either it's not in the boxed state, or its boxed type
+    2200              :   // can not construct an IValue), we fallback to copying the list.
+    2201              :   if (boxed_type_constructs_ivalue && v.isBoxed()) {
+    2202              :     *this = IValue(impl::toList(v.toBoxed()));
+    2203              :   } else {
+    2204              :     c10::List<T> list;
+    2205              :     list.reserve(v.size());
+    2206              :     for (const auto& t : v) {
+    2207              :       list.push_back(t);
+    2208              :     }
+    2209              :     *this = IValue(impl::toList(std::move(list)));
+    2210              :   }
+    2211              : }
+    2212              : 
+    2213              : inline IValue::IValue(c10::impl::GenericDict v)
+    2214              :     : tag(Tag::GenericDict) {
+    2215              :   payload.u.as_intrusive_ptr = null_to_undefined_tensor(v.impl_.release());
+    2216              : }
+    2217              : template <class Key, class Value>
+    2218              : inline IValue::IValue(c10::Dict<Key, Value> v)
+    2219              :     : IValue(impl::toGenericDict(std::move(v))) {}
+    2220              : 
+    2221              : template <class Key, class Value>
+    2222              : inline IValue::IValue(std::unordered_map<Key, Value> v)
+    2223              :     : IValue(Dict<Key, Value>()) {
+    2224              :   auto dict = to<c10::Dict<Key, Value>>();
+    2225              :   dict.reserve(v.size());
+    2226              :   for (auto& e : v) {
+    2227              :     dict.insert(std::move(e.first), std::move(e.second));
+    2228              :   }
+    2229              : }
+    2230              : 
+    2231              : template <class T, IValue::enable_if_ivalue_constructible<T>>
+    2232    105276376 : inline IValue::IValue(c10::optional<T> v) : IValue() {
+    2233    105276376 :   if (v.has_value()) {
+    2234    210552752 :     *this = IValue(std::move(*v));
+    2235              :   }
+    2236    105276376 : }
+    2237              : 
+    2238              : inline IValue::IValue(c10::nullopt_t) : IValue() {}
+    2239              : 
+    2240              : inline IValue::IValue(c10::intrusive_ptr<ivalue::Object> v)
+    2241              :     : tag(Tag::Object) {
+    2242              :   payload.u.as_intrusive_ptr = null_to_undefined_tensor(v.release());
+    2243              : }
+    2244              : 
+    2245              : inline IValue::IValue(c10::intrusive_ptr<ivalue::PyObjectHolder> v)
+    2246              :     : tag(Tag::PyObject) {
+    2247              :   payload.u.as_intrusive_ptr = null_to_undefined_tensor(v.release());
+    2248              : }
+    2249              : 
+    2250              : inline IValue::IValue(c10::intrusive_ptr<ivalue::EnumHolder> v)
+    2251              :     : tag(Tag::Enum) {
+    2252              :   payload.u.as_intrusive_ptr = null_to_undefined_tensor(v.release());
+    2253              : }
+    2254              : 
+    2255              : inline IValue IValue::make_capsule(
+    2256              :     intrusive_ptr<torch::CustomClassHolder> blob) {
+    2257              :   IValue iv;
+    2258              :   iv.tag = Tag::Capsule;
+    2259              :   iv.payload.u.as_intrusive_ptr = null_to_undefined_tensor(blob.release());
+    2260              :   return iv;
+    2261              : }
+    2262              : 
+    2263              : template <
+    2264              :     typename T,
+    2265              :     std::enable_if_t<std::is_base_of<torch::CustomClassHolder, T>::value, int>>
+    2266              : IValue::IValue(c10::intrusive_ptr<T> custom_class) : tag(Tag::Object) {
+    2267              :   auto classType = []() {
+    2268              :     try {
+    2269              :       return c10::getCustomClassType<c10::intrusive_ptr<T>>();
+    2270              :     } catch (const c10::Error&) {
+    2271              :       throw c10::Error(
+    2272              :           "Trying to instantiate a class that isn't a registered custom class: " +
+    2273              :           std::string(c10::util::get_fully_qualified_type_name<T>()),
+    2274              :           "");
+    2275              :     }
+    2276              :   }();
+    2277              :   auto ivalue_obj = c10::ivalue::Object::create(std::move(classType), /* numSlots */1);
+    2278              :   ivalue_obj->setSlot(0, IValue::make_capsule(std::move(custom_class)));
+    2279              :   payload.u.as_intrusive_ptr = null_to_undefined_tensor(ivalue_obj.release());
+    2280              : 
+    2281              : }
+    2282              : 
+    2283              : inline IValue::IValue(c10::intrusive_ptr<ivalue::Future> v)
+    2284              :     : tag(Tag::Future) {
+    2285              :   payload.u.as_intrusive_ptr = null_to_undefined_tensor(v.release());
+    2286              : }
+    2287              : 
+    2288              : inline IValue::IValue(c10::intrusive_ptr<ivalue::Await> v)
+    2289              :     : tag(Tag::Await) {
+    2290              :   payload.u.as_intrusive_ptr = null_to_undefined_tensor(v.release());
+    2291              : }
+    2292              : 
+    2293              : inline IValue::IValue(c10::intrusive_ptr<c10::RRefInterface> v)
+    2294              :     : tag(Tag::RRef) {
+    2295              :   payload.u.as_intrusive_ptr = null_to_undefined_tensor(v.release());
+    2296              : }
+    2297              : 
+    2298              : inline IValue::IValue(c10::intrusive_ptr<at::Quantizer> v)
+    2299              :     : tag(Tag::Quantizer) {
+    2300              :   payload.u.as_intrusive_ptr = null_to_undefined_tensor(v.release());
+    2301              : }
+    2302              : 
+    2303              : template <typename T>
+    2304              : inline IValue::IValue(c10::complex<T> c)
+    2305              :     : tag(Tag::ComplexDouble) {
+    2306              :   auto v = c10::make_intrusive<ivalue::ComplexHolder>(c);
+    2307              :   payload.u.as_intrusive_ptr = v.release();
+    2308              : }
+    2309              : 
+    2310              : inline const std::string& IValue::toStringRef() const {
+    2311              :   AT_ASSERT(isString(), "Expected String but got ", tagKind());
+    2312              :   TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+    2313              :       payload.u.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton(),
+    2314              :       "called toStringRef on null intrusive_ptr IValue");
+    2315              :   return static_cast<const c10::ivalue::ConstantString*>(
+    2316              :              payload.u.as_intrusive_ptr)
+    2317              :       ->string();
+    2318              : }
+    2319              : inline c10::optional<std::reference_wrapper<const std::string>> IValue::
+    2320              :     toOptionalStringRef() const {
+    2321              :   if (isNone()) {
+    2322              :     return c10::nullopt;
+    2323              :   }
+    2324              :   AT_ASSERT(isString(), "Expected optional<string> but got ", tagKind());
+    2325              :   TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+    2326              :       payload.u.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton(),
+    2327              :       "called toOptionalStringRef on null intrusive_ptr IValue");
+    2328              :   return std::reference_wrapper<const std::string>(
+    2329              :       static_cast<const c10::ivalue::ConstantString*>(payload.u.as_intrusive_ptr)
+    2330              :           ->string());
+    2331              : }
+    2332              : 
+    2333              : inline c10::string_view IValue::toStringView() const {
+    2334              :   AT_ASSERT(isString(), "Expected String but got ", tagKind());
+    2335              :   TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+    2336              :       payload.u.as_intrusive_ptr != c10::UndefinedTensorImpl::singleton(),
+    2337              :       "called toStringView on null intrusive_ptr IValue");
+    2338              :   return static_cast<const c10::ivalue::ConstantString*>(
+    2339              :         payload.u.as_intrusive_ptr)
+    2340              :     ->string_view();
+    2341              : }
+    2342              : 
+    2343              : inline PyObject* IValue::toPyObject() const {
+    2344              :   return toPyObjectHolder()->getPyObject();
+    2345              : }
+    2346              : 
+    2347              : template <typename T>
+    2348              : inline optional<T> IValue::toOptional() {
+    2349              :   if (this->isNone()) {
+    2350              :     return nullopt;
+    2351              :   }
+    2352              :   return this->to<T>();
+    2353              : }
+    2354              : 
+    2355              : template <typename T>
+    2356              : inline optional<T> IValue::toOptional() const {
+    2357              :   if (this->isNone()) {
+    2358              :     return nullopt;
+    2359              :   }
+    2360              :   return this->to<T>();
+    2361              : }
+    2362              : 
+    2363              : inline bool IValue::isCustomClass() const {
+    2364              :   return torch::isCustomClass(*this);
+    2365              : }
+    2366              : 
+    2367              : inline bool IValue::isSameIdentity(const IValue& rhs) const {
+    2368              :   // We choose to not use memcmp for payload check due to potential random
+    2369              :   // padding characters on union type
+    2370              : 
+    2371              :   // Semantics:
+    2372              :   // 1. Immutable primitive values of the same type (Int, Double, None, Bool,
+    2373              :   // Str) return value equality
+    2374              :   // 2. If it is a tensor type, we need to take undefined tensor into account
+    2375              :   // 3. Undefined_tensor is None and vice versa should be true
+    2376              :   // 4. If it is a reference type (i.e. isIntrusivePtr()), then is True when
+    2377              :   // the pointed-to object is the same.
+    2378              :   // 5. False for all other comparisons.
+    2379              :   if (this->isNone() && rhs.isNone()) {
+    2380              :     return true;
+    2381              :   } else if (this->isBool() && rhs.isBool()) {
+    2382              :     // for bool type, do equality check
+    2383              :     return this->toBool() == rhs.toBool();
+    2384              :   } else if (this->isTensor() && rhs.isTensor()) {
+    2385              :     return this->payload.as_tensor.is_same(rhs.payload.as_tensor);
+    2386              :   } else if (this->isTensor() && rhs.isNone()) {
+    2387              :     // special case: undefined tensor and None are the same identity
+    2388              :     return !this->payload.as_tensor.defined();
+    2389              :   } else if (this->isNone() && rhs.isTensor()) {
+    2390              :     // special case: undefined tensor and None are the same identity
+    2391              :     return !rhs.payload.as_tensor.defined();
+    2392              :   } else if (this->isInt() && rhs.isInt()) {
+    2393              :     return this->toInt() == rhs.toInt();
+    2394              :   } else if (this->isDouble() && rhs.isDouble()) {
+    2395              :     return this->toDouble() == rhs.toDouble();
+    2396              :   } else if (this->isString() && rhs.isString()) {
+    2397              :     return this->toStringRef() == rhs.toStringRef();
+    2398              :   } else {
+    2399              :     // for objects holding in IValue, do shallow compare on pointer address to
+    2400              :     // testify the identity
+    2401              :     return this->isIntrusivePtr() && rhs.isIntrusivePtr() &&
+    2402              :         this->payload.u.as_intrusive_ptr == rhs.payload.u.as_intrusive_ptr;
+    2403              :   }
+    2404              : }
+    2405              : 
+    2406              : namespace ivalue {
+    2407              : namespace detail {
+    2408              : 
+    2409              : template <typename T>
+    2410              : IValue from_(T&& x, std::true_type) {
+    2411              :   return IValue(std::forward<T>(x));
+    2412              : }
+    2413              : template <typename T>
+    2414              : IValue from_(c10::intrusive_ptr<T> x, std::false_type) {
+    2415              :   return IValue(std::move(x));
+    2416              : }
+    2417              : template <typename T>
+    2418              : IValue from_(T&& /*x*/, std::false_type) {
+    2419              :   static_assert(
+    2420              :       guts::false_t<T>::value,
+    2421              :       "You are calling from with a type that it doesn't support, and isn't a potential custom class (ie: is an intrusive_ptr)");
+    2422              :   return IValue();
+    2423              : }
+    2424              : } // namespace detail
+    2425              : 
+    2426              : template <typename T>
+    2427              : IValue from(T&& x) {
+    2428              :   return detail::from_(
+    2429              :       std::forward<T>(x), typename std::is_constructible<IValue, T>::type{});
+    2430              : }
+    2431              : 
+    2432              : } // namespace ivalue
+    2433              : 
+    2434              : 
+    2435              : template <>
+    2436              : struct MaybeOwnedTraits<IValue> {
+    2437              :   using owned_type = IValue;
+    2438              :   using borrow_type = IValue;
+    2439              : 
+    2440              :   static borrow_type createBorrow(const owned_type& from) {
+    2441              :     if (!from.isPtrType()) {
+    2442              :       return from;
+    2443              :     }
+    2444              :     if (from.isTensor()) {
+    2445              :       return IValue(MaybeOwnedTraits<at::Tensor>::createBorrow(from.toTensor()));
+    2446              :     } else {
+    2447              :       return IValue(from.payload, from.tag);
+    2448              :     }
+    2449              :   }
+    2450              : 
+    2451              :   static void assignBorrow(borrow_type& lhs, const borrow_type& rhs) {
+    2452              :     lhs.clearToNone();
+    2453              :     if (!rhs.isPtrType()) {
+    2454              :       lhs = rhs;
+    2455              :     } else if (rhs.isTensor()) {
+    2456              :       lhs = IValue(MaybeOwnedTraits<at::Tensor>::createBorrow(rhs.toTensor()));
+    2457              :     } else {
+    2458              :       lhs = IValue(rhs.payload, rhs.tag);
+    2459              :     }
+    2460              :   }
+    2461              : 
+    2462              :   static void destroyBorrow(borrow_type& toDestroy) {
+    2463              :     toDestroy.clearToNone();
+    2464              :   }
+    2465              : 
+    2466              :   static const owned_type& referenceFromBorrow(const borrow_type& borrow) {
+    2467              :     return borrow;
+    2468              :   }
+    2469              : 
+    2470              :   static const owned_type* pointerFromBorrow(const borrow_type& borrow) {
+    2471              :     return &borrow;
+    2472              :   }
+    2473              : 
+    2474              :   static bool debugBorrowIsValid(const borrow_type&) {
+    2475              :     return true;
+    2476              :   }
+    2477              : };
+    2478              : 
+    2479              : template <>
+    2480              : struct IValue::TagType<c10::Type> {
+    2481              :   static TORCH_API c10::TypePtr get(const IValue&);
+    2482              : };
+    2483              : 
+    2484              : template <>
+    2485              : struct IValue::TagType<c10::DynamicType> {
+    2486              :   static TORCH_API c10::TypePtr get(const IValue&);
+    2487              : };
+    2488              : 
+    2489              : template <typename T>
+    2490              : TypePtr IValue::type() const {
+    2491              :   return IValue::TagType<T>::get(*this);
+    2492              : }
+    2493              : 
+    2494              : } // namespace c10
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/jit_type.h.func-c.html b/html/libtorch/include/ATen/core/jit_type.h.func-c.html new file mode 100644 index 0000000..8d1d54f --- /dev/null +++ b/html/libtorch/include/ATen/core/jit_type.h.func-c.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/jit_type.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - jit_type.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1010
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c106detail11getTypePtr_IN2at6TensorEE4callEv2
_ZN3c106detail20getMaybeFakeTypePtr_IN2at6TensorELb0EE4callEv2
_ZN3c1010getTypePtrINS_8optionalIN2at6TensorEEEEEDcv36925424
_ZN3c106detail20getMaybeFakeTypePtr_INS_8optionalIN2at6TensorEEELb0EE4callEv36925424
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/jit_type.h.func.html b/html/libtorch/include/ATen/core/jit_type.h.func.html new file mode 100644 index 0000000..70420c2 --- /dev/null +++ b/html/libtorch/include/ATen/core/jit_type.h.func.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/jit_type.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - jit_type.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1010
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1010getTypePtrINS_8optionalIN2at6TensorEEEEEDcv36925424
_ZN3c106detail11getTypePtr_IN2at6TensorEE4callEv2
_ZN3c106detail20getMaybeFakeTypePtr_IN2at6TensorELb0EE4callEv2
_ZN3c106detail20getMaybeFakeTypePtr_INS_8optionalIN2at6TensorEEELb0EE4callEv36925424
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/jit_type.h.gcov.html b/html/libtorch/include/ATen/core/jit_type.h.gcov.html new file mode 100644 index 0000000..f285c50 --- /dev/null +++ b/html/libtorch/include/ATen/core/jit_type.h.gcov.html @@ -0,0 +1,2507 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/jit_type.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - jit_type.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1010
Test Date:2024-04-30 13:17:26Functions:100.0 %44
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <ATen/core/custom_class.h>
+       4              : #include <ATen/core/jit_type_base.h>
+       5              : #include <ATen/core/TensorBody.h>
+       6              : #include <ATen/core/functional.h>
+       7              : #include <ATen/core/symbol.h>
+       8              : #include <ATen/core/type_factory.h>
+       9              : #include <ATen/core/qualified_name.h>
+      10              : #include <c10/util/TypeList.h>
+      11              : #include <c10/util/Optional.h>
+      12              : #include <c10/core/SymFloat.h>
+      13              : #include <c10/core/SymBool.h>
+      14              : #include <c10/core/Device.h>
+      15              : 
+      16              : #include <array>
+      17              : #include <memory>
+      18              : #include <ostream>
+      19              : #include <sstream>
+      20              : #include <type_traits>
+      21              : #include <utility>
+      22              : 
+      23              : namespace torch {
+      24              : namespace jit {
+      25              : struct Function;
+      26              : } // namespace jit
+      27              : } // namespace torch
+      28              : 
+      29              : namespace c10 {
+      30              : 
+      31              : template<class Key, class Value>
+      32              : class Dict;
+      33              : struct IValue;
+      34              : struct FunctionSchema;
+      35              : struct NamedType;
+      36              : using OptNameList = c10::optional<std::vector<std::string>>;
+      37              : 
+      38              : void standardizeVectorForUnion(std::vector<TypePtr>& reference, std::vector<TypePtr>* to_fill);
+      39              : void standardizeVectorForUnion(std::vector<TypePtr>* to_flatten);
+      40              : 
+      41              : inline bool is_contiguous_strides(
+      42              :     const IntArrayRef sizes,
+      43              :     const IntArrayRef strides) {
+      44              :   int n_dim = static_cast<int>(sizes.size());
+      45              :   if (n_dim == 0) {
+      46              :     return true;
+      47              :   }
+      48              : 
+      49              :   if (strides[n_dim - 1] != 1) {
+      50              :     return false;
+      51              :   }
+      52              : 
+      53              :   for (int i = n_dim - 2; i >= 0; i--) {
+      54              :     if (strides[i] != strides[i + 1] * sizes[i + 1]) {
+      55              :       return false;
+      56              :     }
+      57              :   }
+      58              :   return true;
+      59              : }
+      60              : 
+      61              : struct AnyType;
+      62              : using AnyTypePtr = SingletonTypePtr<AnyType>;
+      63              : // Any is the top of the type hierarchy, all other types are subtypes
+      64              : // T <: Any, forall T
+      65              : struct TORCH_API AnyType : public Type {
+      66              :   bool equals(const Type& rhs) const override {
+      67              :     return rhs.kind() == kind();
+      68              :   }
+      69              :   std::string str() const override {
+      70              :     return "Any";
+      71              :   }
+      72              :   static const TypeKind Kind = TypeKind::AnyType;
+      73              :   // global singleton
+      74              :   static AnyTypePtr get();
+      75              : 
+      76              :  private:
+      77              :   AnyType() : Type(TypeKind::AnyType) {}
+      78              : };
+      79              : 
+      80              : inline std::string toString(const Type& type) {
+      81              :   return type.str();
+      82              : }
+      83              : 
+      84              : // Shim for compatibility with code that uses TypePtr.
+      85              : inline std::string toString(const TypePtr& typePtr) {
+      86              :   return toString(*typePtr);
+      87              : }
+      88              : 
+      89              : inline bool operator!=(const Type& lhs, const Type& rhs) {
+      90              :   return !(lhs == rhs);
+      91              : }
+      92              : 
+      93              : // common base for all types that have a single sub element
+      94              : // e.g. Future[T], Optional[T], List[T]
+      95              : template <TypeKind K, typename T>
+      96              : struct SingleElementType : public SharedType {
+      97              :   static const TypeKind Kind = K;
+      98              : 
+      99              :   const TypePtr& getElementType() const {
+     100              :     return elem;
+     101              :   }
+     102              : 
+     103              :   bool hasFreeVariables() const override {
+     104              :     return getElementType()->hasFreeVariables();
+     105              :   }
+     106              : 
+     107              :   at::ArrayRef<TypePtr> containedTypes() const override {
+     108              :     return elem;
+     109              :   }
+     110              : 
+     111              :   bool equals(const Type& rhs) const override {
+     112              :     if (auto rhs_ = rhs.cast<T>()) {
+     113              :       return *getElementType() == *rhs_->getElementType();
+     114              :     }
+     115              :     return false;
+     116              :   }
+     117              : 
+     118              :  protected:
+     119              :   SingleElementType(TypePtr elem) : SharedType(Kind), elem(std::move(elem)) {
+     120              :     if (!this->elem) {
+     121              :       throw std::runtime_error(c10::str(
+     122              :             "Can not create ", typeKindToString(Kind), " with None type"));
+     123              :     }
+     124              :   }
+     125              : 
+     126              :  private:
+     127              :   TypePtr elem;
+     128              : };
+     129              : 
+     130              : struct UnionType;
+     131              : using UnionTypePtr = std::shared_ptr<UnionType>;
+     132              : struct TORCH_API UnionType : public SharedType {
+     133              :   friend struct Type;
+     134              : 
+     135              :   static const TypeKind Kind = TypeKind::UnionType;
+     136              : 
+     137              :   bool isSubtypeOfExt(const Type& rhs_, std::ostream* why_not) const override;
+     138              : 
+     139              :   std::string str() const override;
+     140              : 
+     141              :   static UnionTypePtr create(std::vector<TypePtr> reference);
+     142              : 
+     143              :   bool equals(const Type& rhs) const override;
+     144              : 
+     145              :   bool isUnionType() const override {
+     146              :     return true;
+     147              :   }
+     148              : 
+     149              :   at::ArrayRef<TypePtr> containedTypes() const override {
+     150              :     return types_;
+     151              :   }
+     152              : 
+     153              :   // For testing purposes only
+     154              :   at::ArrayRef<TypePtr> getTypes() const {
+     155              :     return types_;
+     156              :   }
+     157              : 
+     158              :   TypePtr createWithContained(std::vector<TypePtr> contained_types) const override {
+     159              :     return create(std::move(contained_types));
+     160              :   }
+     161              : 
+     162              :   bool canHoldType(const Type& type) const;
+     163              : 
+     164              :   bool hasFreeVariables() const override {
+     165              :     return has_free_variables_;
+     166              :   }
+     167              : 
+     168              :   c10::optional<TypePtr> toOptional() const;
+     169              : 
+     170              :   c10::optional<TypePtr> subtractTypeSet(std::vector<TypePtr>& to_subtract) const;
+     171              : 
+     172              :  protected:
+     173              :     explicit UnionType(std::vector<TypePtr> types, TypeKind kind=TypeKind::UnionType);
+     174              :     std::string annotation_str_impl(TypePrinter printer = nullptr) const override;
+     175              :     std::string unionStr(
+     176              :         TypePrinter printer = nullptr,
+     177              :         bool is_annotation_str = false) const;
+     178              :     // NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes)
+     179              :     bool has_free_variables_;
+     180              :     // NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes)
+     181              :     std::vector<TypePtr> types_;
+     182              :     // NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes)
+     183              :     bool can_hold_none_;
+     184              : 
+     185              : };
+     186              : 
+     187              : struct OptionalType;
+     188              : using OptionalTypePtr = std::shared_ptr<OptionalType>;
+     189              : // This type represents an optional type. There is one `Optional` for
+     190              : // each element type. `Optional[T]` can accept both `T` and
+     191              : // `None`(`c10::nullopt` in C++)
+     192              : // Subtype hierarchy for Optional:
+     193              : //     - Optional[T] <: Optional[R] iff T <: R
+     194              : //     - T <: Optional[R] if T <: R
+     195              : //     - None <: Optional[T] for all T
+     196              : //     - Optional[T] == Union[T, None] for all T
+     197              : struct TORCH_API OptionalType : public UnionType {
+     198              :   static OptionalTypePtr create(TypePtr contained);
+     199              : 
+     200              :   static const TypeKind Kind = TypeKind::OptionalType;
+     201              : 
+     202              :   friend struct Type;
+     203              : 
+     204              :   bool equals(const Type& rhs) const override;
+     205              : 
+     206              :   const TypePtr& getElementType() const {
+     207              :     return contained_;
+     208              :   }
+     209              : 
+     210              :   at::ArrayRef<TypePtr> containedTypes() const override {
+     211              :     return contained_;
+     212              :   }
+     213              : 
+     214              :   std::string str() const override {
+     215              :     std::stringstream ss;
+     216              :     ss << getElementType()->str() << "?";
+     217              :     return ss.str();
+     218              :   }
+     219              : 
+     220              :   TypePtr createWithContained(
+     221              :       std::vector<TypePtr> contained_types) const override {
+     222              :     AT_ASSERT(contained_types.size() == 1);
+     223              :     return create(std::move(contained_types[0]));
+     224              :   }
+     225              : 
+     226              :   bool isSubtypeOfExt(const Type& rhs, std::ostream* why_not) const override;
+     227              : 
+     228              :   bool isUnionType() const override {
+     229              :     return true;
+     230              :   }
+     231              : 
+     232              :   // common cast Optional[Tensor] for undefined tensor type
+     233              :   static TypePtr ofTensor();
+     234              :   //
+     235              :   // global singleton
+     236              :   static TypePtr get(TypePtr inner);
+     237              : 
+     238              :  private:
+     239              :   explicit OptionalType(TypePtr contained);
+     240              : 
+     241              :   TypePtr contained_;
+     242              : 
+     243              :   std::string annotation_str_impl(TypePrinter printer = nullptr) const override {
+     244              :     std::stringstream ss;
+     245              :     ss << "Optional[" << getElementType()->annotation_str(std::move(printer)) << "]";
+     246              :     return ss.str();
+     247              :   }
+     248              : };
+     249              : 
+     250              : template <typename T>
+     251              : inline c10::optional<T> merge_primitive(
+     252              :     const c10::optional<T>& a,
+     253              :     const c10::optional<T>& b) {
+     254              :   if (a.has_value() && b.has_value() && a.value() == b.value()) {
+     255              :     return a;
+     256              :   }
+     257              :   return c10::optional<T>{};
+     258              : }
+     259              : 
+     260              : // If we see `a + b + c`  and know that a, b, and c are the same size and have
+     261              : // two dimensions (WxH), then we can generate a fused kernel for them. That
+     262              : // fused kernel would likely have indexing math to handling both the W and H
+     263              : // dimensions. However, if we knew the WxH dimensions were contiguous, we can
+     264              : // pretend like we only have a single dimension, simplifying the indexing logic.
+     265              : // This can be performed even if the dimensions are transposed,
+     266              : // as long as a, b, and c are transposed in the same way.
+     267              : // We'd like to have the compiler be able to do this dimensionality reduction,
+     268              : // but simply knowing sizes is not enough.
+     269              : // We can extend profiling to also record stride information.
+     270              : // Rather than recording specific strides,
+     271              : // we can simply order the strides from smallest to largest with
+     272              : // `stride_indices` A contiguity marker on the smallest stride (c0) indicates
+     273              : // the stride is precisely 1, otherwise a contiguity marker means that $stride_n
+     274              : // = size_{n-1}*stride_{n-1}$
+     275              : struct TORCH_API Stride {
+     276              :   Stride() = default;
+     277              :   Stride(
+     278              :       const c10::optional<size_t>& stride_index,
+     279              :       c10::optional<bool> contiguous,
+     280              :       const c10::optional<size_t>& stride)
+     281              :       : stride_index_(stride_index), contiguous_(contiguous), stride_(stride) {}
+     282              : 
+     283              :   bool operator==(const Stride& b) const {
+     284              :     return stride_index_ == b.stride_index_ && contiguous_ == b.contiguous_ &&
+     285              :         stride_ == b.stride_;
+     286              :   }
+     287              : 
+     288              :   bool isComplete() const {
+     289              :     return stride_index_ && contiguous_ && stride_;
+     290              :   }
+     291              : 
+     292              :   c10::optional<size_t> stride_index_;
+     293              :   c10::optional<bool> contiguous_;
+     294              :   c10::optional<size_t> stride_;
+     295              : };
+     296              : 
+     297              : template <>
+     298              : inline c10::optional<Stride> merge_primitive(
+     299              :     const c10::optional<Stride>& a,
+     300              :     const c10::optional<Stride>& b) {
+     301              :   c10::optional<Stride> left = a;
+     302              :   c10::optional<Stride> right = b;
+     303              :   if (!left.has_value()) {
+     304              :     left = {Stride()};
+     305              :   }
+     306              :   if (!right.has_value()) {
+     307              :     right = {Stride()};
+     308              :   }
+     309              : 
+     310              :   auto merged_index =
+     311              :       merge_primitive(left->stride_index_, right->stride_index_);
+     312              :   auto merged_cont = merge_primitive(left->contiguous_, right->contiguous_);
+     313              :   auto merged_stride = merge_primitive(left->stride_, right->stride_);
+     314              :   auto r = Stride(merged_index, merged_cont, merged_stride);
+     315              :   // normalize
+     316              :   if (!r.stride_index_.has_value() && !r.contiguous_.has_value() &&
+     317              :       !r.stride_.has_value()) {
+     318              :     return c10::optional<Stride>{};
+     319              :   }
+     320              : 
+     321              :   return r;
+     322              : }
+     323              : 
+     324              : struct TORCH_API ShapeSymbol {
+     325              :   // needed for use in `std::map`
+     326              :   ShapeSymbol() : value_(-1) {}
+     327              :   // is this symbol a fixed/static dimension
+     328              :   bool is_static() const {
+     329              :     return value_ >= 0;
+     330              :   };
+     331              :   bool operator==(const ShapeSymbol& b) const {
+     332              :     return value_ == b.value_;
+     333              :   }
+     334              :   bool operator<(const ShapeSymbol& b) const {
+     335              :     return value_ < b.value_;
+     336              :   }
+     337              : 
+     338              :   static ShapeSymbol fromStaticSize(int64_t val) {
+     339              :     return ShapeSymbol(val);
+     340              :   }
+     341              :   int64_t static_size() const {
+     342              :     TORCH_CHECK(is_static());
+     343              :     return value_;
+     344              :   };
+     345              : 
+     346              :   int64_t value() const {
+     347              :     return value_;
+     348              :   };
+     349              : 
+     350              :   static ShapeSymbol newSymbol() {
+     351              :     return fromStaticSize(-static_cast<int64_t>(++num_symbols));
+     352              :   };
+     353              :   friend TORCH_API std::ostream& operator<<(
+     354              :       std::ostream& os,
+     355              :       const ShapeSymbol& s);
+     356              : 
+     357              :  private:
+     358              :   ShapeSymbol(int64_t val) : value_(val) {}
+     359              :   int64_t value_;
+     360              :   static std::atomic<size_t> num_symbols;
+     361              : };
+     362              : 
+     363              : inline ShapeSymbol merge_primitive(
+     364              :     const ShapeSymbol& a,
+     365              :     const ShapeSymbol& b) {
+     366              :   if (a.is_static() && b.is_static() && a == b) {
+     367              :     return a;
+     368              :   }
+     369              :   return ShapeSymbol::newSymbol();
+     370              : }
+     371              : 
+     372              : // Shape of a Tensor represented with ShapeSymbol's. Unranked, ranked unknown
+     373              : // dims, partially known and fully known shapes are all supported.
+     374              : struct TORCH_API SymbolicShape {
+     375              :   // Unranked shape constructor.
+     376              :   SymbolicShape() : dims_(c10::nullopt) {}
+     377              : 
+     378              :   // Known rank but unknown dimentions.
+     379              :   SymbolicShape(c10::optional<size_t> rank) : dims_(c10::nullopt) {
+     380              :     if(!rank) {
+     381              :       return;
+     382              :     }
+     383              : 
+     384              :     std::vector<ShapeSymbol> shape_symbols;
+     385              :     shape_symbols.reserve(*rank);
+     386              :     for(size_t i = 0; i < *rank; ++i) {
+     387              :       shape_symbols.push_back(ShapeSymbol::newSymbol());
+     388              :     }
+     389              :     dims_ = shape_symbols;
+     390              :   }
+     391              : 
+     392              :   // Mix of known and unknown ranks
+     393              :   SymbolicShape(const std::vector<c10::optional<int64_t>>& dims) {
+     394              :     std::vector<ShapeSymbol> shape_symbols;
+     395              :     shape_symbols.reserve(dims.size());
+     396              :     for(c10::optional<int64_t> dim: dims) {
+     397              :       if(!dim) {
+     398              :         shape_symbols.push_back(ShapeSymbol::newSymbol());
+     399              :       } else {
+     400              :         shape_symbols.push_back(ShapeSymbol::fromStaticSize(*dim));
+     401              :       }
+     402              :     }
+     403              :     dims_ = shape_symbols;
+     404              :   }
+     405              : 
+     406              :   void dump() const;
+     407              : 
+     408              :   SymbolicShape(std::vector<ShapeSymbol> dims) : dims_(std::move(dims)) {}
+     409              : 
+     410              :   SymbolicShape(c10::IntArrayRef dims) {
+     411              :     std::vector<ShapeSymbol> shape_symbols;
+     412              :     shape_symbols.reserve(dims.size());
+     413              :     for(int64_t dim : dims) {
+     414              :       shape_symbols.push_back(ShapeSymbol::fromStaticSize(dim));
+     415              :     }
+     416              :     dims_ = shape_symbols;
+     417              :   }
+     418              : 
+     419              :   ShapeSymbol operator[](size_t i) const {
+     420              :     if (!dims_) {
+     421              :       throw std::runtime_error("Rank isn't fixed");
+     422              :     }
+     423              :     return (*dims_).at(i);
+     424              :   }
+     425              : 
+     426              :   ShapeSymbol at(size_t i) const {
+     427              :     if (!dims_) {
+     428              :       throw std::runtime_error("Rank isn't fixed");
+     429              :     }
+     430              :     return (*dims_).at(i);
+     431              :   }
+     432              : 
+     433              :   // Returns rank or nullopt in case of unranked shape.
+     434              :   c10::optional<size_t> rank() const {
+     435              :     if(!dims_) {
+     436              :       return c10::nullopt;
+     437              :     }
+     438              :     return dims_->size();
+     439              :   }
+     440              : 
+     441              :   c10::optional<std::vector<ShapeSymbol>> sizes() const {
+     442              :     return dims_;
+     443              :   }
+     444              : 
+     445              :   c10::optional<std::vector<bool>> symbolicDims() const {
+     446              :     if (!dims_) {
+     447              :       return c10::nullopt;
+     448              :     }
+     449              :     auto symbolic_dims = std::vector<bool>();
+     450              :     for (const ShapeSymbol& s : *dims_) {
+     451              :       symbolic_dims.push_back(!s.is_static());
+     452              :     }
+     453              :     return symbolic_dims;
+     454              :   }
+     455              : 
+     456              :   // Checks whether the shape is fully defined/complete, ie. rank and sizes
+     457              :   // of every dimension are known.
+     458              :   bool isComplete() const {
+     459              :     if(!dims_) {
+     460              :       return false;
+     461              :     }
+     462              :     for(auto d : *dims_) {
+     463              :       if(!d.is_static()) {
+     464              :         return false;
+     465              :       }
+     466              :     }
+     467              :     return true;
+     468              :   }
+     469              : 
+     470              :   // Create new SymbolicShape that is result of merging self and another
+     471              :   // SymbolicShape. Only dimensions that are static and equal will be
+     472              :   // preserved.
+     473              :   // If either of two shapes are of unknown rank or they have unmatching rank,
+     474              :   // result will be unranked.
+     475              :   SymbolicShape merge(const SymbolicShape& other) const;
+     476              : 
+     477              :   friend bool operator==(const SymbolicShape& lhs, const SymbolicShape& rhs) {
+     478              :     return lhs.dims_ == rhs.dims_;
+     479              :   }
+     480              : 
+     481              :   friend bool operator!=(const SymbolicShape& lhs, const SymbolicShape& rhs) {
+     482              :     return !(lhs == rhs);
+     483              :   }
+     484              : 
+     485              :   private:
+     486              :     c10::optional<std::vector<ShapeSymbol>> dims_;
+     487              : };
+     488              : 
+     489              : namespace detail {
+     490              : inline bool isComplete(const Stride& s) {
+     491              :   return s.isComplete();
+     492              : }
+     493              : 
+     494              : template<typename T>
+     495              : inline bool isComplete(const T& /*t*/) {
+     496              :   return true;
+     497              : }
+     498              : }
+     499              : 
+     500              : template <typename T>
+     501              : struct VaryingShape {
+     502              :   using ListOfOptionalElements = std::vector<c10::optional<T>>;
+     503              :   VaryingShape(const std::vector<T>& vec)
+     504              :       : VaryingShape(ListOfOptionalElements(vec.begin(), vec.end())) {}
+     505              : 
+     506              :   VaryingShape(c10::ArrayRef<T> vec)
+     507              :       : VaryingShape(ListOfOptionalElements(vec.begin(), vec.end())) {}
+     508              : 
+     509              :   VaryingShape(c10::optional<size_t> size = c10::nullopt) : dims_(c10::nullopt) {
+     510              :     if (size) {
+     511              :       dims_ = ListOfOptionalElements(*size);
+     512              :     }
+     513              :   }
+     514              : 
+     515              :   VaryingShape(ListOfOptionalElements dims) : dims_(std::move(dims)) {}
+     516              : 
+     517              :   VaryingShape(size_t size) : VaryingShape(c10::optional<size_t>(size)) {}
+     518              : 
+     519              :   bool operator==(const VaryingShape& other) const {
+     520              :     return dims_ == other.dims_;
+     521              :   }
+     522              : 
+     523              :   const c10::optional<T> &operator[](size_t i) const {
+     524              :     if (!dims_) {
+     525              :       throw std::runtime_error("Rank isn't fixed");
+     526              :     }
+     527              :     return (*dims_).at(i);
+     528              :   }
+     529              : 
+     530              :   c10::optional<size_t> size() const {
+     531              :     if (!dims_) {
+     532              :       return c10::nullopt;
+     533              :     }
+     534              :     const auto& dims = dims_.value();
+     535              :     return dims.size();
+     536              :   }
+     537              : 
+     538              :   const c10::optional<ListOfOptionalElements>& sizes() const {
+     539              :     return dims_;
+     540              :   }
+     541              : 
+     542              :   TORCH_API VaryingShape merge(const VaryingShape& other) const;
+     543              : 
+     544              :   c10::optional<std::vector<T>> concrete_sizes() const {
+     545              :     if (!dims_) {
+     546              :       return c10::nullopt;
+     547              :     }
+     548              :     std::vector<T> sizes;
+     549              :     for (auto d : *dims_) {
+     550              :       if (!d) {
+     551              :         return c10::nullopt;
+     552              :       }
+     553              :       sizes.push_back(d.value());
+     554              :     }
+     555              :     return sizes;
+     556              :   }
+     557              : 
+     558              :   bool isComplete() const {
+     559              :     if (!dims_) {
+     560              :       return false;
+     561              :     }
+     562              :     for (auto d : *dims_) {
+     563              :       if (!d || !detail::isComplete(*d)) {
+     564              :         return false;
+     565              :       }
+     566              :     }
+     567              :     return true;
+     568              :   }
+     569              : 
+     570              :  private:
+     571              :   c10::optional<ListOfOptionalElements> dims_;
+     572              : };
+     573              : 
+     574              : struct TensorType;
+     575              : // TODO: investigate making this SingletonOrSharedTypePtr<TensorType>
+     576              : using TensorTypePtr = std::shared_ptr<TensorType>;
+     577              : // This type represents a single Tensor with a specific size
+     578              : struct TORCH_API TensorType : public SharedType {
+     579              :   static TensorTypePtr create(const at::Tensor& t);
+     580              : 
+     581              :   // used by TensorType::create(size_t dim) which in turn used by
+     582              :   // shape_analysis.cpp
+     583              :   static TensorTypePtr create(
+     584              :       c10::optional<at::ScalarType> scalar_type,
+     585              :       c10::optional<Device> device,
+     586              :       const VaryingShape<int64_t>& sizes,
+     587              :       const VaryingShape<int64_t>& strides,
+     588              :       c10::optional<bool> requires_grad,
+     589              :       c10::optional<bool> undefined = false,
+     590              :       bool tensor_contiguity = false);
+     591              : 
+     592              :   static TensorTypePtr create(
+     593              :       c10::optional<at::ScalarType> scalar_type,
+     594              :       c10::optional<Device> device,
+     595              :       const SymbolicShape& sizes,
+     596              :       const VaryingShape<Stride>& stride_,
+     597              :       c10::optional<bool> requires_grad,
+     598              :       c10::optional<bool> undefined = false);
+     599              : 
+     600              :   static TensorTypePtr create(
+     601              :       c10::optional<at::ScalarType> scalar_type,
+     602              :       c10::optional<Device> device,
+     603              :       c10::optional<size_t> dim,
+     604              :       c10::optional<bool> requires_grad);
+     605              : 
+     606              :   // overloaded create variadic template argument as it could not distinguish
+     607              :   // initializer list
+     608              :   static TensorTypePtr createContiguous(
+     609              :       at::ScalarType scalar_type,
+     610              :       at::Device device,
+     611              :       at::IntArrayRef sizes);
+     612              : 
+     613              :   static TypePtr fromNumberType(const Type& typ);
+     614              :   static TypePtr fromBoolType();
+     615              : 
+     616              :   c10::optional<size_t> dim() const {
+     617              :     return sizes().size();
+     618              :   }
+     619              : 
+     620              :   VaryingShape<int64_t> sizes() const;
+     621              : 
+     622              :   VaryingShape<int64_t> strides() const;
+     623              : 
+     624              :   const VaryingShape<Stride>& stride_properties() const {
+     625              :     return strides_;
+     626              :   }
+     627              : 
+     628              :   c10::optional<at::Device> device() const {
+     629              :     return device_;
+     630              :   }
+     631              :   c10::optional<at::ScalarType> scalarType() const {
+     632              :     return scalar_type_;
+     633              :   }
+     634              :   c10::optional<bool> requiresGrad() const {
+     635              :     return requires_grad_;
+     636              :   }
+     637              :   bool requires_grad() const override {
+     638              :     return requires_grad_ ? *requires_grad_ : true;
+     639              :   }
+     640              : 
+     641              :   bool equals(const Type& rhs) const override;
+     642              :   bool isSubtypeOfExt(const Type& rhs, std::ostream* why_not) const override;
+     643              : 
+     644              :   std::string str() const override;
+     645              : 
+     646              :   std::string repr_str() const override {
+     647              :     if (isInferredType()) {
+     648              :       return str() + " (inferred)";
+     649              :     } else {
+     650              :       return str();
+     651              :     }
+     652              :   }
+     653              : 
+     654              :   c10::optional<size_t> numel() const {
+     655              :     size_t prod = 1;
+     656              :     const auto& shape = sizes();
+     657              : 
+     658              :     for (size_t i = 0; i < shape.size(); i++) {
+     659              :       if (!shape[i]) {
+     660              :         return c10::optional<size_t>{};
+     661              :       }
+     662              :       prod *= shape[i].value();
+     663              :     }
+     664              :     return prod;
+     665              :   }
+     666              : 
+     667              :   TensorTypePtr withRequiresGrad(c10::optional<bool> s) {
+     668              :     auto copy = clone();
+     669              :     copy->requires_grad_ = s;
+     670              :     return copy;
+     671              :   }
+     672              : 
+     673              :   TensorTypePtr withScalarType(c10::optional<ScalarType> st) {
+     674              :     auto copy = clone();
+     675              :     copy->scalar_type_ = st;
+     676              :     return copy;
+     677              :   }
+     678              : 
+     679              :   TensorTypePtr withDim(c10::optional<size_t> d) {
+     680              :     auto copy = clone();
+     681              :     // withDim is only used by the legacy executor
+     682              :     // that only cares about the rank, so create dummy symbols)) :
+     683              :     copy->sizes_ = SymbolicShape(d);
+     684              :     copy->strides_ = VaryingShape<Stride>(d);
+     685              :     return copy;
+     686              :   }
+     687              : 
+     688              :   TensorTypePtr withStrides(VaryingShape<Stride> sstrides) const {
+     689              :     auto cloned = clone();
+     690              :     cloned->strides_ = sstrides;
+     691              :     return cloned;
+     692              :   }
+     693              : 
+     694              :   TensorTypePtr withSizesStrides(
+     695              :       at::IntArrayRef sizes,
+     696              :       at::IntArrayRef strides) const {
+     697              :     auto cloned = clone();
+     698              :     auto ssizes = SymbolicShape(sizes);
+     699              :     cloned->sizes_ = ssizes;
+     700              :     cloned->strides_ = computeStrideProps(sizes, strides);
+     701              :     return cloned;
+     702              :   }
+     703              : 
+     704              :   TensorTypePtr withSymbolicShapes(SymbolicShape ssizes) const {
+     705              :     auto cloned = clone();
+     706              :     cloned->sizes_ = std::move(ssizes);
+     707              :     return cloned;
+     708              :   }
+     709              : 
+     710              :   TensorTypePtr withSizes(at::IntArrayRef sizes) const {
+     711              :     return withSizesStrides(
+     712              :         sizes, contiguousStridesOf(sizes));
+     713              :   }
+     714              : 
+     715              :   TensorTypePtr withDevice(const c10::optional<at::Device> device) const {
+     716              :     auto copy = clone();
+     717              :     copy->device_ = device;
+     718              :     return copy;
+     719              :   }
+     720              : 
+     721              :   TensorTypePtr dimensionedOnly() const {
+     722              :     auto copy = clone();
+     723              :     copy->sizes_ = SymbolicShape(sizes().size());
+     724              :     copy->strides_ = VaryingShape<Stride>(sizes().size());
+     725              :     return copy;
+     726              :   }
+     727              : 
+     728              :   TensorTypePtr contiguous() const {
+     729              :     auto cloned = clone();
+     730              :     TORCH_INTERNAL_ASSERT(sizes().concrete_sizes().has_value());
+     731              :     auto strides = computeStrideProps(
+     732              :         *sizes().concrete_sizes(),
+     733              :         contiguousStridesOf(*sizes().concrete_sizes()));
+     734              :     cloned->strides_ = strides;
+     735              :     return cloned;
+     736              :   }
+     737              : 
+     738              :   const SymbolicShape& symbolic_sizes() const;
+     739              : 
+     740              :   TensorTypePtr merge(const TensorType& other, bool merge_sizes = true) const;
+     741              : 
+     742              :   bool matchTensor(const at::Tensor& t);
+     743              : 
+     744              :   // is all information about the type specified except for autograd?
+     745              :   // This replaces the notion of a 'CompleteTensorType' that used to exist
+     746              :   // in the type-hierarchy. Excluding require_grad and undefined allows
+     747              :   // this to match the old behavior.
+     748              :   bool isComplete() const {
+     749              :     return scalar_type_ && device_ && sizes_.isComplete() && strides_.isComplete();
+     750              :   }
+     751              : 
+     752              :   bool isInferredType() const {
+     753              :     return is_inferred_;
+     754              :   }
+     755              : 
+     756              :   static TensorTypePtr getInferred() {
+     757              :     static auto valueInferred = TensorType::create(
+     758              :         /*scalar_type=*/{},
+     759              :         /*device=*/{},
+     760              :         /*sizes=*/SymbolicShape(),
+     761              :         /*stride=*/VaryingShape<Stride>{},
+     762              :         /*requires_grad=*/{},
+     763              :         /*undefined=*/false);
+     764              :     valueInferred->is_inferred_ = true;
+     765              :     return valueInferred;
+     766              :   }
+     767              : 
+     768              :   // this property is used by GuardElimination
+     769              :   // please see `checkInputs` for more details
+     770              :   bool isSummarized() const {
+     771              :     return !(isComplete() && requiresGrad().has_value() &&
+     772              :              undefined().has_value());
+     773              :   }
+     774              : 
+     775              :   TensorTypePtr withUndefined() {
+     776              :     auto r = clone();
+     777              :     r->undefined_ = true;
+     778              :     return r;
+     779              :   }
+     780              : 
+     781              :   TensorTypePtr withPossiblyUndefined() {
+     782              :     auto r = clone();
+     783              :     r->undefined_ = c10::nullopt;
+     784              :     return r;
+     785              :   }
+     786              : 
+     787              :   c10::optional<bool> undefined() const { return undefined_; }
+     788              : 
+     789              :   static const TensorTypePtr& get();
+     790              : 
+     791              :   static const TypeKind Kind = TypeKind::TensorType;
+     792              : 
+     793              :   static std::vector<int64_t> contiguousStridesOf(
+     794              :       at::IntArrayRef in_sizes,
+     795              :       at::MemoryFormat memory_format = MemoryFormat::Contiguous) {
+     796              :     auto contiguous_fn = [](const at::IntArrayRef& sizes,
+     797              :                             const std::vector<int64_t>& dim_order) {
+     798              :       std::vector<int64_t> strides(sizes.size());
+     799              :       if (sizes.empty()) // zero-dim case
+     800              :         return strides;
+     801              : 
+     802              :       strides[dim_order[0]] = 1;
+     803              :       for (size_t i = 1; i < dim_order.size(); i++) {
+     804              :         auto cur_dim = dim_order[i];
+     805              :         auto pre_dim = dim_order[i - 1];
+     806              :         strides[cur_dim] = strides[pre_dim] * sizes[pre_dim];
+     807              :       }
+     808              :       return strides;
+     809              :     };
+     810              : 
+     811              :     std::vector<int64_t> dim_order(in_sizes.size());
+     812              :     if (memory_format == MemoryFormat::ChannelsLast) {
+     813              :       dim_order = {1, 3, 2, 0};
+     814              :     } else if (memory_format == MemoryFormat::ChannelsLast3d) {
+     815              :       dim_order = {1, 4, 3, 2, 0};
+     816              :     } else {
+     817              :       auto ndims = in_sizes.size();
+     818              :       for (size_t i = 0; i < ndims; i++) {
+     819              :         dim_order[i] = ndims - i - 1; // Reverse
+     820              :       }
+     821              :     }
+     822              :     return contiguous_fn(in_sizes, dim_order);
+     823              :   }
+     824              : 
+     825              :  private:
+     826              :   TensorType(
+     827              :       c10::optional<at::ScalarType> scalar_type,
+     828              :       c10::optional<Device> device,
+     829              :       SymbolicShape sizes,
+     830              :       VaryingShape<Stride> strides,
+     831              :       c10::optional<bool> requires_grad,
+     832              :       c10::optional<bool> undefined = false);
+     833              : 
+     834              :   TensorTypePtr clone() const {
+     835              :     return TensorTypePtr(new TensorType(
+     836              :         scalar_type_, device_, sizes_, strides_, requires_grad_, undefined_));
+     837              :   }
+     838              : 
+     839              :   static VaryingShape<Stride> computeStrideProps(
+     840              :       at::IntArrayRef sizes,
+     841              :       at::IntArrayRef strides,
+     842              :       bool tensor_contiguity = false);
+     843              : 
+     844              :   c10::optional<at::ScalarType> scalar_type_;
+     845              :   c10::optional<at::Device> device_;
+     846              :   SymbolicShape sizes_;
+     847              :   VaryingShape<Stride> strides_;
+     848              :   c10::optional<bool> requires_grad_;
+     849              :   // we exploit the fact certain tensors must be zero in the autograd to
+     850              :   // optimize gradient computation. Such zero tensors are currently implemented
+     851              :   // with `UndefinedTensorImpl.` They can be handled only by special operators
+     852              :   // (e.g. `AutogradAdd`) and their `Tensor::defined()` property returns false.
+     853              :   // Normally, `undefined_` is set to false, unless a type was created
+     854              :   // with `withUndefined`
+     855              :   // This will also mean that `undefined` tensors will fail
+     856              :   // `subtypeOf(TensorType::get())` check
+     857              :   // undefined_ may become `c10::nullopt` if the tensor was observed to be both
+     858              :   // defined and undefined. However, no tensor type starts out with
+     859              :   // `undefined_` set to `c10::nullopt`
+     860              :   c10::optional<bool> undefined_;
+     861              :   // Represents whether or not this type was inferred.
+     862              :   bool is_inferred_ = false;
+     863              : };
+     864              : 
+     865              : struct ListType;
+     866              : using ListTypePtr = std::shared_ptr<ListType>;
+     867              : struct TORCH_API ListType
+     868              :     : public SingleElementType<TypeKind::ListType, ListType> {
+     869              :   // It's not exactly a singleton, but there should be exactly one instance of
+     870              :   // List[T] for every T
+     871              :   friend struct Type;
+     872              :   template <typename... T>
+     873              :   static ListTypePtr create(T&&... all) {
+     874              :     return ListTypePtr(
+     875              :         new ListType(std::forward<T>(all)...)); // NOLINT(modernize-make-shared)
+     876              :   }
+     877              : 
+     878              :   std::string str() const override {
+     879              :     std::stringstream ss;
+     880              :     ss << getElementType()->str() << "[]";
+     881              :     return ss.str();
+     882              :   }
+     883              :   TypePtr createWithContained(
+     884              :       std::vector<TypePtr> contained_types) const override {
+     885              :     return create(std::move(contained_types.at(0)));
+     886              :   }
+     887              : 
+     888              :   bool isSubtypeOfExt(const Type& rhs, std::ostream* why_not) const override;
+     889              : 
+     890              :   // global singleton
+     891              :   // Given an inner type T and an identifier,
+     892              :   // this function wil return the global singleton type pointer
+     893              :   // the type List<T>.
+     894              :   // The extra "identifier" argument is needed beccause we have multiple container types
+     895              :   // that all re-use this function (List<T>, array<T, N>, etc.)
+     896              :   static TypePtr get(std::string identifier, TypePtr inner);
+     897              : 
+     898              :   // common cast List[Tensor]
+     899              :   static ListTypePtr ofTensors();
+     900              :   static ListTypePtr ofOptionalTensors();
+     901              :   static ListTypePtr ofInts();
+     902              :   static ListTypePtr ofSymInts();
+     903              :   static ListTypePtr ofFloats();
+     904              :   static ListTypePtr ofComplexDoubles();
+     905              :   static ListTypePtr ofBools();
+     906              :   static ListTypePtr ofStrings();
+     907              : 
+     908              :  private:
+     909              :   ListType(TypePtr elem) : SingleElementType(std::move(elem)) {}
+     910              : 
+     911              :   std::string annotation_str_impl(TypePrinter printer = nullptr) const override {
+     912              :     std::stringstream ss;
+     913              :     ss << "List[" << getElementType()->annotation_str(std::move(printer)) << "]";
+     914              :     return ss.str();
+     915              :   }
+     916              : };
+     917              : 
+     918              : struct DictType;
+     919              : using DictTypePtr = std::shared_ptr<DictType>;
+     920              : struct TORCH_API DictType : public SharedType {
+     921              :   friend struct Type;
+     922              :   static const TypeKind Kind = TypeKind::DictType;
+     923              : 
+     924              :   static DictTypePtr create(TypePtr key, TypePtr value) {
+     925              :     auto kind = key->kind();
+     926              :     if (auto dyn = key->castRaw<DynamicType>()) {
+     927              :       kind = dyn->dynamicKind();
+     928              :     }
+     929              :     switch (kind) {
+     930              :       case TypeKind::AnyType:
+     931              :       case TypeKind::IntType:
+     932              :       case TypeKind::BoolType:
+     933              :       case TypeKind::FloatType:
+     934              :       case TypeKind::ComplexType:
+     935              :       case TypeKind::StringType:
+     936              :       case TypeKind::TensorType:
+     937              :       case TypeKind::DeviceObjType:
+     938              :         return DictTypePtr(new DictType(std::move(key), std::move(value)));
+     939              :       default:
+     940              :         AT_ERROR(
+     941              :             "Cannot create dict for key type '",
+     942              :             key->str(),
+     943              :             "', only int, float, complex, Tensor, device and string keys are supported");
+     944              :     }
+     945              :   }
+     946              : 
+     947              :   // aligned with the format in FunctionSchema
+     948              :   std::string str() const override {
+     949              :     std::stringstream ss;
+     950              :     ss << "Dict(" << getKeyType()->str() << ", " << getValueType()->str()
+     951              :        << ")";
+     952              :     return ss.str();
+     953              :   }
+     954              : 
+     955              :   TypePtr createWithContained(
+     956              :       std::vector<TypePtr> contained_types) const override {
+     957              :     if (contained_types.size() != 2) {
+     958              :       throw std::runtime_error("Expected 2 contained types");
+     959              :     }
+     960              :     return create(std::move(contained_types.at(0)), std::move(contained_types.at(1)));
+     961              :   }
+     962              : 
+     963              :   const TypePtr& getKeyType() const {
+     964              :     return types.at(0);
+     965              :   }
+     966              : 
+     967              :   const TypePtr& getValueType() const {
+     968              :     return types.at(1);
+     969              :   }
+     970              : 
+     971              :   bool hasFreeVariables() const override {
+     972              :     return has_free_variables;
+     973              :   }
+     974              : 
+     975              :   at::ArrayRef<TypePtr> containedTypes() const override {
+     976              :     return types;
+     977              :   }
+     978              : 
+     979              :   bool equals(const Type& rhs) const override {
+     980              :     if (auto* dict_rhs = rhs.castRaw<DictType>()) {
+     981              :       return *getKeyType() == *(dict_rhs->getKeyType()) &&
+     982              :           *getValueType() == *(dict_rhs->getValueType());
+     983              :     }
+     984              :     return false;
+     985              :   }
+     986              : 
+     987              :   // global singleton
+     988              :   // Given an inner type T and an identifier,
+     989              :   // this function wil return the global singleton type pointer
+     990              :   // the type List<T>.
+     991              :   // The extra "identifier" argument is needed beccause we have multiple container types
+     992              :   // that all re-use this function (Dict<K, V> and unordered_map<K, V>)
+     993              :   static TypePtr get(std::string identifier, TypePtr key, TypePtr val);
+     994              : 
+     995              :  private:
+     996              :   DictType(TypePtr key, TypePtr value)
+     997              :       : SharedType(TypeKind::DictType),
+     998              :         has_free_variables(
+     999              :             key->hasFreeVariables() || value->hasFreeVariables()) {
+    1000              :     types.reserve(2);
+    1001              :     types.push_back(std::move(key));
+    1002              :     types.push_back(std::move(value));
+    1003              :   }
+    1004              : 
+    1005              :   std::string annotation_str_impl(TypePrinter printer = nullptr) const override;
+    1006              : 
+    1007              :   std::vector<TypePtr> types;
+    1008              :   bool has_free_variables;
+    1009              : };
+    1010              : 
+    1011              : struct FutureType;
+    1012              : using FutureTypePtr = std::shared_ptr<FutureType>;
+    1013              : 
+    1014              : struct TORCH_API FutureType
+    1015              :     : public SingleElementType<TypeKind::FutureType, FutureType> {
+    1016              :   friend struct Type;
+    1017              :   template <typename... T>
+    1018              :   static FutureTypePtr create(TypePtr elem) {
+    1019              :     return FutureTypePtr(
+    1020              :         new FutureType(std::move(elem))); // NOLINT(modernize-make-shared)
+    1021              :   }
+    1022              : 
+    1023              :   std::string str() const override {
+    1024              :     std::stringstream ss;
+    1025              :     ss << "Future(" << getElementType()->str() << ")";
+    1026              :     return ss.str();
+    1027              :   }
+    1028              :   TypePtr createWithContained(
+    1029              :       std::vector<TypePtr> contained_types) const override {
+    1030              :     return create(std::move(contained_types.at(0)));
+    1031              :   }
+    1032              : 
+    1033              :   bool isSubtypeOfExt(const Type& rhs, std::ostream* why_not) const override {
+    1034              :     if (Type::isSubtypeOfExt(rhs, why_not)) {
+    1035              :       return true;
+    1036              :     }
+    1037              :     if (auto rhs_ = rhs.castRaw<FutureType>()) {
+    1038              :       return getElementType()->isSubtypeOfExt(*rhs_->getElementType(), why_not);
+    1039              :     }
+    1040              :     return false;
+    1041              :   }
+    1042              : 
+    1043              :  private:
+    1044              :   FutureType(TypePtr elem) : SingleElementType(std::move(elem)) {}
+    1045              : 
+    1046              :   std::string annotation_str_impl(TypePrinter printer = nullptr) const override {
+    1047              :     std::stringstream ss;
+    1048              :     ss << "Future[" << getElementType()->annotation_str(std::move(printer)) << "]";
+    1049              :     return ss.str();
+    1050              :   }
+    1051              : };
+    1052              : 
+    1053              : struct AwaitType;
+    1054              : using AwaitTypePtr = std::shared_ptr<AwaitType>;
+    1055              : 
+    1056              : struct TORCH_API AwaitType
+    1057              :     : public SingleElementType<TypeKind::AwaitType, AwaitType> {
+    1058              :   friend struct Type;
+    1059              :   template <typename... T>
+    1060              :   static AwaitTypePtr create(TypePtr elem) {
+    1061              :     return AwaitTypePtr(
+    1062              :         new AwaitType(std::move(elem))); // NOLINT(modernize-make-shared)
+    1063              :   }
+    1064              : 
+    1065              :   std::string str() const override {
+    1066              :     std::stringstream ss;
+    1067              :     ss << "Await(" << getElementType()->str() << ")";
+    1068              :     return ss.str();
+    1069              :   }
+    1070              :   TypePtr createWithContained(
+    1071              :       std::vector<TypePtr> contained_types) const override {
+    1072              :     return create(std::move(contained_types.at(0)));
+    1073              :   }
+    1074              : 
+    1075              :   bool isSubtypeOfExt(const Type& rhs, std::ostream* why_not) const override {
+    1076              :     if (Type::isSubtypeOfExt(rhs, why_not)) {
+    1077              :       return true;
+    1078              :     }
+    1079              :     if (auto rhs_ = rhs.castRaw<AwaitType>()) {
+    1080              :       return getElementType()->isSubtypeOfExt(*rhs_->getElementType(), why_not);
+    1081              :     }
+    1082              :     return false;
+    1083              :   }
+    1084              : 
+    1085              :  private:
+    1086              :   AwaitType(TypePtr elem) : SingleElementType(std::move(elem)) {}
+    1087              : 
+    1088              :   std::string annotation_str_impl(TypePrinter printer = nullptr) const override {
+    1089              :     std::stringstream ss;
+    1090              :     ss << "Await[" << getElementType()->annotation_str(printer) << "]";
+    1091              :     return ss.str();
+    1092              :   }
+    1093              : };
+    1094              : 
+    1095              : struct RRefType;
+    1096              : using RRefTypePtr = std::shared_ptr<RRefType>;
+    1097              : 
+    1098              : struct TORCH_API RRefType
+    1099              :     : public SingleElementType<TypeKind::RRefType, RRefType> {
+    1100              :   friend struct Type;
+    1101              :   template <typename... T>
+    1102              :   static RRefTypePtr create(TypePtr elem) {
+    1103              :     return RRefTypePtr(
+    1104              :         new RRefType(std::move(elem))); // NOLINT(modernize-make-shared)
+    1105              :   }
+    1106              : 
+    1107              :   std::string str() const override {
+    1108              :     std::stringstream ss;
+    1109              :     ss << "RRef(" << getElementType()->str() << ")";
+    1110              :     return ss.str();
+    1111              :   }
+    1112              :   TypePtr createWithContained(
+    1113              :       std::vector<TypePtr> contained_types) const override {
+    1114              :     return create(std::move(contained_types.at(0)));
+    1115              :   }
+    1116              : 
+    1117              :  private:
+    1118              :   RRefType(TypePtr elem) : SingleElementType(std::move(elem)) {}
+    1119              : 
+    1120              :   std::string annotation_str_impl(TypePrinter printer = nullptr) const override {
+    1121              :     std::stringstream ss;
+    1122              :     ss << "RRef[" << getElementType()->annotation_str(std::move(printer)) << "]";
+    1123              :     return ss.str();
+    1124              :   }
+    1125              : };
+    1126              : 
+    1127              : // Any should never appear in a named type like a class, namedtuple or
+    1128              : // interface. If it does, then dynamic type information will be lost in the
+    1129              : // Pickler, leading to hard-to-track-down bugs that will only occur
+    1130              : // after saving or loading a model. This is because we rely on the
+    1131              : // static types in named types to reconstruct type tags of loaded
+    1132              : // values. Lifting this restriction requires solving the serialization
+    1133              : // problem first.
+    1134              : TORCH_API void checkNoAny(
+    1135              :     const Type& base,
+    1136              :     const char* what,
+    1137              :     const std::string& attrname,
+    1138              :     const TypePtr& attrtype);
+    1139              : 
+    1140              : struct TupleType;
+    1141              : using TupleTypePtr = std::shared_ptr<TupleType>;
+    1142              : using NameList = std::vector<std::string>;
+    1143              : // This type represents a Tuple
+    1144              : struct TORCH_API TupleType : public NamedType {
+    1145              : 
+    1146              :   static TupleTypePtr createNamed(const c10::optional<c10::QualifiedName>& name,
+    1147              :       const std::vector<std::string>& field_names,
+    1148              :       const std::vector<TypePtr>& field_types,
+    1149              :       std::vector<IValue>& field_defaults);
+    1150              : 
+    1151              :   static TupleTypePtr createNamed(const c10::optional<c10::QualifiedName>& name,
+    1152              :       const std::vector<std::string>& field_names,
+    1153              :       const std::vector<TypePtr>& field_types);
+    1154              : 
+    1155              :   static TupleTypePtr createNamed(const c10::optional<c10::QualifiedName>& name,
+    1156              :       const std::vector<c10::string_view>& field_names,
+    1157              :       const std::vector<TypePtr>& field_types);
+    1158              : 
+    1159              :   static TupleTypePtr create(
+    1160              :       std::vector<TypePtr> types) {
+    1161              :     return TupleTypePtr(new TupleType(
+    1162              :         std::move(types),
+    1163              :         c10::nullopt,
+    1164              :         nullptr)); // NOLINT(modernize-make-shared)
+    1165              :   }
+    1166              :   static TupleTypePtr create() {
+    1167              :     return create({});
+    1168              :   }
+    1169              : 
+    1170              :   at::ArrayRef<TypePtr> elements() const {
+    1171              :     return elements_;
+    1172              :   }
+    1173              : 
+    1174              :   bool equals(const Type& rhs) const override;
+    1175              :   bool isSubtypeOfExt(const Type& rhs_, std::ostream* why_not) const override;
+    1176              : 
+    1177              :   std::string str() const override;
+    1178              :   bool hasFreeVariables() const override {
+    1179              :     return has_free_variables_;
+    1180              :   }
+    1181              :   at::ArrayRef<TypePtr> containedTypes() const override {
+    1182              :     return elements_;
+    1183              :   }
+    1184              :   TypePtr createWithContained(
+    1185              :       std::vector<TypePtr> contained_types) const override {
+    1186              :     return std::shared_ptr<TupleType>(
+    1187              :         new TupleType(std::move(contained_types), name(), schema()));
+    1188              :   }
+    1189              :   const std::shared_ptr<FunctionSchema>& schema() const {
+    1190              :     return schema_;
+    1191              :   }
+    1192              :   c10::optional<std::vector<c10::string_view>> names() const;
+    1193              : 
+    1194              :   static const TypeKind Kind = TypeKind::TupleType;
+    1195              : 
+    1196              :  private:
+    1197              :   template <typename S>
+    1198              :   static TupleTypePtr createWithSpec(
+    1199              :       const c10::optional<c10::QualifiedName>& name,
+    1200              :       const std::vector<S>& field_names,
+    1201              :       const std::vector<TypePtr>& field_types,
+    1202              :       std::vector<IValue>& field_defaults);
+    1203              : 
+    1204              :   TupleType(
+    1205              :       std::vector<TypePtr> elements_,
+    1206              :       c10::optional<c10::QualifiedName> name,
+    1207              :       std::shared_ptr<FunctionSchema> schema);
+    1208              : 
+    1209              :   bool compare(
+    1210              :       const Type& rhs,
+    1211              :       std::function<bool(const Type&, const Type&)> fn) const {
+    1212              :     if (rhs.kind() != kind()) {
+    1213              :       return false;
+    1214              :     }
+    1215              : 
+    1216              :     const auto& l_elements = elements();
+    1217              :     const auto& r_elements = rhs.castRaw<TupleType>()->elements();
+    1218              :     if (l_elements.size() != r_elements.size())
+    1219              :       return false;
+    1220              :     for (size_t i = 0; i < l_elements.size(); ++i) {
+    1221              :       if (!fn(*l_elements[i], *r_elements[i]))
+    1222              :         return false;
+    1223              :     }
+    1224              :     return true;
+    1225              :   }
+    1226              : 
+    1227              :   std::string annotation_str_impl(TypePrinter printer = nullptr) const override;
+    1228              : 
+    1229              :   std::vector<TypePtr> elements_;
+    1230              :   bool has_free_variables_;
+    1231              :   std::shared_ptr<FunctionSchema> schema_;
+    1232              : };
+    1233              : 
+    1234              : // the common supertype of all Enums, only used in operator registraion.
+    1235              : // EnumType <: AnyEnumType for all Enums
+    1236              : struct AnyEnumType;
+    1237              : using AnyEnumTypePtr = SingletonTypePtr<AnyEnumType>;
+    1238              : struct TORCH_API AnyEnumType final : public Type {
+    1239              :   bool equals(const Type& rhs) const override {
+    1240              :     return rhs.kind() == kind();
+    1241              :   }
+    1242              :   std::string str() const override {
+    1243              :     return "AnyEnumType";
+    1244              :   }
+    1245              :   static const TypeKind Kind = TypeKind::AnyEnumType;
+    1246              :   // global singleton
+    1247              :   static AnyEnumTypePtr get();
+    1248              : private:
+    1249              :   AnyEnumType()
+    1250              :   : Type(TypeKind::AnyEnumType) {}
+    1251              : };
+    1252              : 
+    1253              : struct NumberType;
+    1254              : using NumberTypePtr = SingletonTypePtr<NumberType>;
+    1255              : // This type represents a Python number
+    1256              : // Subtype hierarchy for Number Types (NumberType as the base type):
+    1257              : // IntType <: NumberType
+    1258              : // FloatType <: NumberType
+    1259              : // ComplexType <:NumberType
+    1260              : //
+    1261              : // WARNING: if you add a new subtype of NumberType that is not
+    1262              : // represented by a global singleton, you need to change NumberTypePtr
+    1263              : // to a SingletonOrSharedTypePtr and deal with NumberType needing to
+    1264              : // both inherit and not inherit from SharedType!
+    1265              : struct TORCH_API NumberType : public Type {
+    1266              :   bool equals(const Type& rhs) const override;
+    1267              : 
+    1268              :   bool isSubtypeOfExt(const Type& rhs, std::ostream* why_not) const override;
+    1269              : 
+    1270              :   std::string str() const override {
+    1271              :     return "Scalar"; // match what PythonArgParser says for clarity
+    1272              :   }
+    1273              :   static const TypeKind Kind = TypeKind::NumberType;
+    1274              :   // global singleton
+    1275              :   static NumberTypePtr get();
+    1276              : 
+    1277              :  protected:
+    1278              :   NumberType(TypeKind kind = TypeKind::NumberType) : Type(kind) {}
+    1279              : 
+    1280              :   std::string annotation_str_impl(TypePrinter printer = nullptr) const override {
+    1281              :     (void)printer; // Suppress unused variable warning
+    1282              :     return "number"; // technically not a valid python type, but
+    1283              :                      // we need to use it when parsing back in annotations
+    1284              :                      // for implicit conversions
+    1285              :   }
+    1286              : };
+    1287              : 
+    1288              : struct FloatType;
+    1289              : using FloatTypePtr = SingletonTypePtr<FloatType>;
+    1290              : // This type represents a Python float number
+    1291              : struct TORCH_API FloatType : public NumberType {
+    1292              :   bool equals(const Type& rhs) const override {
+    1293              :     return rhs.kind() == kind();
+    1294              :   }
+    1295              :   std::string str() const override {
+    1296              :     return "float";
+    1297              :   }
+    1298              :   bool isSubtypeOfExt(const Type& rhs, std::ostream* why_not) const override {
+    1299              :     // NOLINTNEXTLINE(bugprone-parent-virtual-call)
+    1300              :     return rhs.kind() == TypeKind::NumberType || Type::isSubtypeOfExt(rhs, why_not);
+    1301              :   }
+    1302              :   static const TypeKind Kind = TypeKind::FloatType;
+    1303              :   // global singleton
+    1304              :   static FloatTypePtr get();
+    1305              : 
+    1306              :  private:
+    1307              :   FloatType() : NumberType(TypeKind::FloatType) {}
+    1308              :   std::string annotation_str_impl(TypePrinter printer = nullptr) const override {
+    1309              :     (void)printer; // Suppress unused variable warning
+    1310              :     return "float";
+    1311              :   }
+    1312              : };
+    1313              : 
+    1314              : struct ComplexType;
+    1315              : using ComplexTypePtr = SingletonTypePtr<ComplexType>;
+    1316              : // This type represents a Python float number
+    1317              : struct TORCH_API ComplexType : public NumberType {
+    1318              :   bool equals(const Type& rhs) const override {
+    1319              :     return rhs.kind() == kind();
+    1320              :   }
+    1321              :   std::string str() const override {
+    1322              :     return "complex";
+    1323              :   }
+    1324              :   bool isSubtypeOfExt(const Type& rhs, std::ostream* why_not) const override {
+    1325              :     // NOLINTNEXTLINE(bugprone-parent-virtual-call)
+    1326              :     return rhs.kind() == TypeKind::NumberType || Type::isSubtypeOfExt(rhs, why_not);
+    1327              :   }
+    1328              :   static const TypeKind Kind = TypeKind::ComplexType;
+    1329              :   // global singleton
+    1330              :   static ComplexTypePtr get();
+    1331              : 
+    1332              :  private:
+    1333              :   ComplexType() : NumberType(TypeKind::ComplexType) {}
+    1334              :   std::string annotation_str_impl(TypePrinter printer = nullptr) const override {
+    1335              :     (void)printer; // Suppress unused variable warning
+    1336              :     return "complex";
+    1337              :   }
+    1338              : };
+    1339              : 
+    1340              : // We need to introduce `SymIntType` to represent the `SymInt` type
+    1341              : // used in function schemas e.g. `aten::narrow_copy(... SymInt length)
+    1342              : // `SymInt` will be used to enable tracing arithmetic operations on
+    1343              : // dimension values. Please see [SymInt.h] for more information
+    1344              : struct SymIntType;
+    1345              : using SymIntTypePtr = SingletonTypePtr<SymIntType>;
+    1346              : struct TORCH_API SymIntType : public Type {
+    1347              :   bool equals(const Type& rhs) const override {
+    1348              :     return rhs.kind() == kind();
+    1349              :   }
+    1350              :   std::string str() const override {
+    1351              :     return "SymInt";
+    1352              :   }
+    1353              :   std::string annotation_str_impl(TypePrinter printer = nullptr) const override {
+    1354              :     return "int";
+    1355              :   }
+    1356              :   static const TypeKind Kind = TypeKind::SymIntType;
+    1357              :   // global singleton
+    1358              :   static SymIntTypePtr get();
+    1359              : 
+    1360              :  private:
+    1361              :   SymIntType() : Type(TypeKind::SymIntType) {}
+    1362              : };
+    1363              : 
+    1364              : struct SymFloatType;
+    1365              : using SymFloatTypePtr = SingletonTypePtr<SymFloatType>;
+    1366              : struct TORCH_API SymFloatType : public Type {
+    1367              :   bool equals(const Type& rhs) const override {
+    1368              :     return rhs.kind() == kind();
+    1369              :   }
+    1370              :   std::string str() const override {
+    1371              :     return "SymFloat";
+    1372              :   }
+    1373              :   std::string annotation_str_impl(TypePrinter printer = nullptr) const override {
+    1374              :     return "float";
+    1375              :   }
+    1376              :   static const TypeKind Kind = TypeKind::SymFloatType;
+    1377              :   // global singleton
+    1378              :   static SymFloatTypePtr get();
+    1379              : 
+    1380              :  private:
+    1381              :   SymFloatType() : Type(TypeKind::SymFloatType) {}
+    1382              : };
+    1383              : 
+    1384              : struct SymBoolType;
+    1385              : using SymBoolTypePtr = SingletonTypePtr<SymBoolType>;
+    1386              : struct TORCH_API SymBoolType : public Type {
+    1387              :   bool equals(const Type& rhs) const override {
+    1388              :     return rhs.kind() == kind();
+    1389              :   }
+    1390              :   std::string str() const override {
+    1391              :     return "SymBool";
+    1392              :   }
+    1393              :   std::string annotation_str_impl(TypePrinter printer = nullptr) const override {
+    1394              :     return "bool";
+    1395              :   }
+    1396              :   static const TypeKind Kind = TypeKind::SymBoolType;
+    1397              :   // global singleton
+    1398              :   static SymBoolTypePtr get();
+    1399              : 
+    1400              :  private:
+    1401              :   SymBoolType() : Type(TypeKind::SymBoolType) {}
+    1402              : };
+    1403              : 
+    1404              : struct IntType;
+    1405              : using IntTypePtr = SingletonTypePtr<IntType>;
+    1406              : // This type represents a Python int number
+    1407              : struct TORCH_API IntType : public NumberType {
+    1408              :   bool equals(const Type& rhs) const override {
+    1409              :     return rhs.kind() == kind();
+    1410              :   }
+    1411              :   std::string str() const override {
+    1412              :     return "int";
+    1413              :   }
+    1414              :   bool isSubtypeOfExt(const Type& rhs, std::ostream* why_not) const override {
+    1415              :     // NOLINTNEXTLINE(bugprone-parent-virtual-call)
+    1416              :     return rhs.kind() == TypeKind::NumberType || Type::isSubtypeOfExt(rhs, why_not);
+    1417              :   }
+    1418              :   static const TypeKind Kind = TypeKind::IntType;
+    1419              :   // global singleton
+    1420              :   static IntTypePtr get();
+    1421              : 
+    1422              :  private:
+    1423              :   IntType() : NumberType(TypeKind::IntType) {}
+    1424              :   std::string annotation_str_impl(TypePrinter printer = nullptr) const override {
+    1425              :     (void)printer; // Suppress unused variable warning
+    1426              :     return "int";
+    1427              :   }
+    1428              : };
+    1429              : 
+    1430              : struct BoolType;
+    1431              : using BoolTypePtr = SingletonTypePtr<BoolType>;
+    1432              : // This node represents a Python bool value
+    1433              : struct TORCH_API BoolType : public Type {
+    1434              :   bool equals(const Type& rhs) const override {
+    1435              :     return rhs.kind() == kind();
+    1436              :   }
+    1437              :   std::string str() const override {
+    1438              :     return "bool";
+    1439              :   }
+    1440              :   static const TypeKind Kind = TypeKind::BoolType;
+    1441              :   // global singleton
+    1442              :   static BoolTypePtr get();
+    1443              : 
+    1444              :  private:
+    1445              :   BoolType() : Type(TypeKind::BoolType) {}
+    1446              : };
+    1447              : 
+    1448              : struct StringType;
+    1449              : using StringTypePtr = SingletonTypePtr<StringType>;
+    1450              : // This type represents a Python string
+    1451              : struct TORCH_API StringType : public Type {
+    1452              :   bool equals(const Type& rhs) const override {
+    1453              :     return rhs.kind() == kind();
+    1454              :   }
+    1455              :   std::string str() const override {
+    1456              :     // we only use "str" (not "string") in both FunctionSchema and script
+    1457              :     return annotation_str();
+    1458              :   }
+    1459              :   std::string annotation_str_impl(TypePrinter printer = nullptr) const override {
+    1460              :     (void)printer; // Suppress unused variable warning
+    1461              :     return "str";
+    1462              :   }
+    1463              :   static const TypeKind Kind = TypeKind::StringType;
+    1464              :   // global singleton
+    1465              :   static StringTypePtr get();
+    1466              : 
+    1467              :  private:
+    1468              :   StringType() : Type(TypeKind::StringType) {}
+    1469              : };
+    1470              : 
+    1471              : struct StorageType;
+    1472              : using StorageTypePtr = SingletonTypePtr<StorageType>;
+    1473              : struct TORCH_API StorageType : public Type {
+    1474              :   bool equals(const Type& rhs) const override {
+    1475              :     return rhs.kind() == kind();
+    1476              :   }
+    1477              :   std::string str() const override {
+    1478              :     return annotation_str();
+    1479              :   }
+    1480              :   std::string annotation_str_impl(TypePrinter printer = nullptr) const override {
+    1481              :     (void)printer; // Suppress unused variable warning
+    1482              :     return "Storage";
+    1483              :   }
+    1484              :   static const TypeKind Kind = TypeKind::StorageType;
+    1485              :   // global singleton
+    1486              :   static StorageTypePtr get();
+    1487              : 
+    1488              :  private:
+    1489              :   StorageType() : Type(TypeKind::StorageType) {}
+    1490              : };
+    1491              : 
+    1492              : struct FunctionType;
+    1493              : using FunctionTypePtr = std::shared_ptr<FunctionType>;
+    1494              : struct TORCH_API FunctionType : public NamedType {
+    1495              :   static FunctionTypePtr create(torch::jit::Function* function) {
+    1496              :     return FunctionTypePtr(
+    1497              :         new FunctionType(function)); // NOLINT(modernize-make-shared)
+    1498              :   }
+    1499              :   bool equals(const Type& rhs) const override {
+    1500              :     if (auto func_type = rhs.cast<FunctionType>()) {
+    1501              :       return func_type->function_ == function_;
+    1502              :     }
+    1503              : 
+    1504              :     return false;
+    1505              :   }
+    1506              :   std::string str() const override {
+    1507              :     return "Function";
+    1508              :   }
+    1509              :   torch::jit::Function* function() const {
+    1510              :     return function_;
+    1511              :   }
+    1512              :   static const TypeKind Kind = TypeKind::FunctionType;
+    1513              : 
+    1514              :  private:
+    1515              :   FunctionType(torch::jit::Function* function);
+    1516              :   std::string annotation_str_impl(TypePrinter printer = nullptr) const override {
+    1517              :     (void)printer; // Suppress unused variable warning
+    1518              :     const auto& n = name().value();
+    1519              :     return n.qualifiedName();
+    1520              :   }
+    1521              :   torch::jit::Function* function_;
+    1522              : };
+    1523              : 
+    1524              : struct NoneType;
+    1525              : using NoneTypePtr = SingletonTypePtr<NoneType>;
+    1526              : // This type represents a Python None
+    1527              : struct TORCH_API NoneType : public Type {
+    1528              :   bool equals(const Type& rhs) const override {
+    1529              :     return rhs.kind() == kind();
+    1530              :   }
+    1531              :   std::string str() const override {
+    1532              :     return "NoneType";
+    1533              :   }
+    1534              :   bool isSubtypeOfExt(const Type& rhs, std::ostream *why_not) const override;
+    1535              : 
+    1536              :   static const TypeKind Kind = TypeKind::NoneType;
+    1537              :   // global singleton
+    1538              :   static NoneTypePtr get();
+    1539              : 
+    1540              :  private:
+    1541              :   NoneType() : Type(TypeKind::NoneType) {}
+    1542              : };
+    1543              : 
+    1544              : struct GeneratorType;
+    1545              : using GeneratorTypePtr = SingletonTypePtr<GeneratorType>;
+    1546              : // This type represents a Generator
+    1547              : struct TORCH_API GeneratorType : public Type {
+    1548              :   bool equals(const Type& rhs) const override {
+    1549              :     return rhs.kind() == kind();
+    1550              :   }
+    1551              :   std::string str() const override {
+    1552              :     return "Generator";
+    1553              :   }
+    1554              :   static const TypeKind Kind = TypeKind::GeneratorType;
+    1555              :   // global singleton
+    1556              :   static GeneratorTypePtr get();
+    1557              : 
+    1558              :  private:
+    1559              :   GeneratorType() : Type(TypeKind::GeneratorType) {}
+    1560              : };
+    1561              : 
+    1562              : struct QuantizerType;
+    1563              : using QuantizerTypePtr = SingletonTypePtr<QuantizerType>;
+    1564              : // This type represents a Quantizer
+    1565              : struct TORCH_API QuantizerType : public Type {
+    1566              :   bool equals(const Type& rhs) const override {
+    1567              :     return rhs.kind() == kind();
+    1568              :   }
+    1569              :   std::string str() const override {
+    1570              :     return "Quantizer";
+    1571              :   }
+    1572              :   static const TypeKind Kind = TypeKind::QuantizerType;
+    1573              :   // global singleton
+    1574              :   static QuantizerTypePtr get();
+    1575              : 
+    1576              :  private:
+    1577              :   QuantizerType() : Type(TypeKind::QuantizerType) {}
+    1578              : };
+    1579              : 
+    1580              : struct QSchemeType;
+    1581              : using QSchemeTypePtr = SingletonTypePtr<QSchemeType>;
+    1582              : // This type represents a QScheme
+    1583              : struct TORCH_API QSchemeType : public Type {
+    1584              :   bool equals(const Type& rhs) const override {
+    1585              :     return rhs.kind() == kind();
+    1586              :   }
+    1587              :   std::string str() const override {
+    1588              :     return "QScheme";
+    1589              :   }
+    1590              :   static const TypeKind Kind = TypeKind::QSchemeType;
+    1591              :   // global singleton
+    1592              :   static QSchemeTypePtr get();
+    1593              : 
+    1594              :  private:
+    1595              :   QSchemeType() : Type(TypeKind::QSchemeType) {}
+    1596              : };
+    1597              : 
+    1598              : struct DeviceObjType;
+    1599              : using DeviceObjTypePtr = SingletonTypePtr<DeviceObjType>;
+    1600              : // This type represents a Device
+    1601              : struct TORCH_API DeviceObjType : public Type {
+    1602              :   bool equals(const Type& rhs) const override {
+    1603              :     return rhs.kind() == kind();
+    1604              :   }
+    1605              :   std::string str() const override {
+    1606              :     return "Device";
+    1607              :   }
+    1608              :   static const TypeKind Kind = TypeKind::DeviceObjType;
+    1609              :   // global singleton
+    1610              :   static DeviceObjTypePtr get();
+    1611              : 
+    1612              :  private:
+    1613              :   DeviceObjType() : Type(TypeKind::DeviceObjType) {}
+    1614              : };
+    1615              : 
+    1616              : struct StreamObjType;
+    1617              : using StreamObjTypePtr = SingletonTypePtr<StreamObjType>;
+    1618              : // This type represents a Generator
+    1619              : struct TORCH_API StreamObjType : public Type {
+    1620              :   bool equals(const Type& rhs) const override {
+    1621              :     return rhs.kind() == kind();
+    1622              :   }
+    1623              :   std::string str() const override {
+    1624              :     return "Stream";
+    1625              :   }
+    1626              :   static const TypeKind Kind = TypeKind::StreamObjType;
+    1627              :   // global singleton
+    1628              :   static StreamObjTypePtr get();
+    1629              : 
+    1630              : private:
+    1631              :   StreamObjType() : Type(TypeKind::StreamObjType) {}
+    1632              : };
+    1633              : 
+    1634              : struct VarType;
+    1635              : using VarTypePtr = std::shared_ptr<VarType>;
+    1636              : // This type represents a type variable, used in FunctionSchema
+    1637              : struct VarType : public SharedType {
+    1638              :   static VarTypePtr create(std::string name_) {
+    1639              :     return VarTypePtr(new VarType(std::move(name_)));
+    1640              :   }
+    1641              :   bool equals(const Type& rhs) const override {
+    1642              :     return rhs.kind() == kind();
+    1643              :   }
+    1644              :   std::string str() const override {
+    1645              :     return name();
+    1646              :   }
+    1647              :   const std::string& name() const {
+    1648              :     return name_;
+    1649              :   }
+    1650              :   bool hasFreeVariables() const override {
+    1651              :     return true;
+    1652              :   }
+    1653              :   static const TypeKind Kind = TypeKind::VarType;
+    1654              : 
+    1655              :  private:
+    1656              :   VarType(std::string name_)
+    1657              :       : SharedType(TypeKind::VarType), name_(std::move(name_)) {}
+    1658              :   std::string name_;
+    1659              : };
+    1660              : 
+    1661              : struct CapsuleType;
+    1662              : using CapsuleTypePtr = SingletonTypePtr<CapsuleType>;
+    1663              : // This type represents a Python Capsule.
+    1664              : // It does not appear in the IR and is only used during runtime
+    1665              : struct TORCH_API CapsuleType : public Type {
+    1666              :   bool equals(const Type& rhs) const override {
+    1667              :     return rhs.kind() == kind();
+    1668              :   }
+    1669              :   std::string str() const override {
+    1670              :     return "Capsule";
+    1671              :   }
+    1672              :   static const TypeKind Kind = TypeKind::CapsuleType;
+    1673              :   // global singleton
+    1674              :   static CapsuleTypePtr get();
+    1675              : private:
+    1676              :   CapsuleType()
+    1677              :   : Type(TypeKind::CapsuleType) {}
+    1678              : };
+    1679              : 
+    1680              : struct PyObjectType;
+    1681              : using PyObjectTypePtr = SingletonTypePtr<PyObjectType>;
+    1682              : // This type represents a PyObject Type
+    1683              : struct TORCH_API PyObjectType : public Type {
+    1684              :   bool equals(const Type& rhs) const override {
+    1685              :     return rhs.kind() == kind();
+    1686              :   }
+    1687              :   std::string str() const override {
+    1688              :     return "PyObject";
+    1689              :   }
+    1690              :   static const TypeKind Kind = TypeKind::PyObjectType;
+    1691              :   // global singleton
+    1692              :   static PyObjectTypePtr get();
+    1693              : private:
+    1694              :   PyObjectType()
+    1695              :   : Type(TypeKind::PyObjectType) {}
+    1696              : };
+    1697              : 
+    1698              : enum class TypeVerbosity {
+    1699              :   None,
+    1700              :   Type,
+    1701              :   TypeAndStride,
+    1702              :   Full,
+    1703              :   Symbolic,
+    1704              :   Default = Full,
+    1705              : };
+    1706              : 
+    1707              : TORCH_API TypeVerbosity type_verbosity();
+    1708              : 
+    1709              : TORCH_API std::ostream& operator<<(std::ostream& out, const Type& t);
+    1710              : template <typename T>
+    1711              : TORCH_API std::ostream& operator<<(
+    1712              :     std::ostream& out,
+    1713              :     const VaryingShape<T>& t);
+    1714              : TORCH_API std::ostream& operator<<(std::ostream& os, const SymbolicShape& s);
+    1715              : TORCH_API std::ostream& operator<<(std::ostream& os, const ShapeSymbol& s);
+    1716              : TORCH_API std::ostream& operator<<(std::ostream& os, const Stride& s);
+    1717              : // what is the type, ignoring extra size/shape information?
+    1718              : // e.g. Tensor(2x3) -> Dynamic, and Tuple(Tensor(2x3),...) -> Tuple(Dynamic,...)
+    1719              : 
+    1720              : // `unshapedType` is used to remove Tensor subtypes. We treat all Tensor
+    1721              : // subtypes as simply "Tensor"; we also create a new version of any
+    1722              : // container types in which internal Tensors have undergone the same
+    1723              : // operation. This is used for type comparisons between two Tensor types
+    1724              : // (`unshapedType` means that we don't falsely return `false` for e.g.
+    1725              : // Tensors of different dimensions). It's also used in the alias
+    1726              : // analysis pass.
+    1727              : // Be careful with calls because this can be very slow. If calling this
+    1728              : // on a graph, use `EraseShapeInformation` in shape_analysis.h
+    1729              : inline TypePtr unshapedType(const TypePtr& type) {
+    1730              :   if (type->isSubtypeOf(*TensorType::get())) {
+    1731              :     return TensorType::get();
+    1732              :   }
+    1733              :   at::ArrayRef<TypePtr> contained = type->containedTypes();
+    1734              :   if (contained.empty()) {
+    1735              :     return type;
+    1736              :   }
+    1737              :   return type->withContained(fmap(type->containedTypes(), unshapedType));
+    1738              : }
+    1739              : 
+    1740              : inline TypePtr TensorType::fromNumberType(const Type& typ) {
+    1741              :   if (typ.isSubtypeOf(*IntType::get())) {
+    1742              :     return TensorType::createContiguous(at::kLong, at::kCPU, {});
+    1743              :   } else if (typ.isSubtypeOf(*FloatType::get())) {
+    1744              :     return TensorType::createContiguous(at::kDouble, at::kCPU, {});
+    1745              :   } else if (typ.isSubtypeOf(*BoolType::get())) {
+    1746              :     return TensorType::createContiguous(at::kBool, at::kCPU, {});
+    1747              :   } else if (typ.kind() == NumberType::Kind) {
+    1748              :     return TensorType::create(c10::nullopt, at::kCPU, {}, c10::nullopt);
+    1749              :   }
+    1750              :   TORCH_CHECK(false, "Unknown number type: ", typ.str());
+    1751              : }
+    1752              : inline TypePtr TensorType::fromBoolType() {
+    1753              :   return TensorType::createContiguous(at::kBool, at::kCPU, {});
+    1754              : }
+    1755              : 
+    1756              : inline c10::optional<c10::ScalarType> tryScalarTypeFromJitType(const Type& type) {
+    1757              :   if (type == *FloatType::get()) {
+    1758              :     return at::typeMetaToScalarType(c10::get_default_dtype());
+    1759              :   } else if (type == *IntType::get()) {
+    1760              :     return at::ScalarType::Long;
+    1761              :   } else if (type == *BoolType::get()) {
+    1762              :     return at::ScalarType::Bool;
+    1763              :   }
+    1764              :   return c10::nullopt;
+    1765              : }
+    1766              : 
+    1767              : inline at::ScalarType scalarTypeFromJitType(const Type& type) {
+    1768              :   auto result = tryScalarTypeFromJitType(type);
+    1769              :   TORCH_CHECK(
+    1770              :       result,
+    1771              :       "Add new condition, expected Float, Complex, Int, or Bool but got",
+    1772              :       type.str());
+    1773              :   return *result;
+    1774              : }
+    1775              : 
+    1776              : // Attempt to find the correct supertype of the two types `t1` and `t2`.
+    1777              : // If no supertype is found, then nullopt will be returned if
+    1778              : // `default_to_union` is false, and `Union[t1, t2]` will be returned
+    1779              : // if it is true. If `t1 == t2`, or `t1` is a type refinement of `t2`,
+    1780              : // then `t2` will be returned (and vice versa).
+    1781              : //
+    1782              : // Two different tensortypes will return dynamic.
+    1783              : //
+    1784              : // Currently we chose not to support returning a NumberType for
+    1785              : // two types from the set of {FloatType, IntType, ComplexType}, because
+    1786              : // there is a lack of operator support for NumberType.
+    1787              : //
+    1788              : // If `type_hint` is an `InterfaceType`, then we can use that as a
+    1789              : // potential supertype for `ClassType`s in the list. Otherwise, we have
+    1790              : // no way to find and use some common interface type
+    1791              : TORCH_API c10::optional<TypePtr> unifyTypes(
+    1792              :     const TypePtr& t1,
+    1793              :     const TypePtr& t2,
+    1794              :     bool default_to_union = false,
+    1795              :     TypePtr type_hint = nullptr);
+    1796              : 
+    1797              : TORCH_API c10::optional<TypePtr> unifyTypeList(
+    1798              :     at::ArrayRef<TypePtr> elements,
+    1799              :     std::ostream& why_not,
+    1800              :     bool default_to_union = false,
+    1801              :     TypePtr type_hint = nullptr);
+    1802              : 
+    1803              : namespace detail {
+    1804              : template <typename T>
+    1805              : struct getTypePtr_ final {
+    1806              :   static decltype(auto) call() {
+    1807              :     return ([]() {
+    1808              :       try {
+    1809              :         return getCustomClassType<T>();
+    1810              :       } catch(const c10::Error&) {
+    1811              :         TORCH_CHECK(
+    1812              :             false,
+    1813              :             "Type ",
+    1814              :             c10::util::get_fully_qualified_type_name<T>(),
+    1815              :             " could not be converted to any of the known types."
+    1816              :         );
+    1817              :       }
+    1818              :     }());
+    1819              :   }
+    1820              : };
+    1821              : 
+    1822              : template <typename T, bool fake>
+    1823              : struct getMaybeFakeTypePtr_ final {
+    1824            2 :   static decltype(auto) call() {
+    1825            2 :     return getTypePtr_<T>::call();
+    1826              :   }
+    1827              : };
+    1828              : 
+    1829              : template <>
+    1830              : struct getTypePtr_<at::IValue> final {
+    1831              :   static decltype(auto) call() {
+    1832              :     return AnyType::get();
+    1833              :   }
+    1834              : };
+    1835              : 
+    1836              : template <>
+    1837              : struct getTypePtr_<at::Tensor> final {
+    1838            2 :   static decltype(auto) call() {
+    1839            2 :     return TensorType::get();
+    1840              :   }
+    1841              : };
+    1842              : template <>
+    1843              : struct getTypePtr_<c10::Storage> final {
+    1844              :   static decltype(auto) call() {
+    1845              :     return StorageType::get();
+    1846              :   }
+    1847              : };
+    1848              : template <>
+    1849              : struct getTypePtr_<c10::Stream> final {
+    1850              :   static decltype(auto) call() {
+    1851              :     return StreamObjType::get();
+    1852              :   }
+    1853              : };
+    1854              : template <>
+    1855              : struct getTypePtr_<double> final {
+    1856              :   static decltype(auto) call() {
+    1857              :     return FloatType::get();
+    1858              :   }
+    1859              : };
+    1860              : template <>
+    1861              : struct getTypePtr_<c10::complex<double>> final {
+    1862              :   static decltype(auto) call() {
+    1863              :     return ComplexType::get();
+    1864              :   }
+    1865              : };
+    1866              : template <>
+    1867              : struct getTypePtr_<int64_t> final {
+    1868              :   static decltype(auto) call() {
+    1869              :     return IntType::get();
+    1870              :   }
+    1871              : };
+    1872              : 
+    1873              : template <>
+    1874              : struct getTypePtr_<DeviceIndex> final {
+    1875              :   static decltype(auto) call() {
+    1876              :     return IntType::get();
+    1877              :   }
+    1878              : };
+    1879              : 
+    1880              : template <>
+    1881              : struct getMaybeFakeTypePtr_<SymInt, false> final {
+    1882              :   static decltype(auto) call() {
+    1883              :     return SymIntType::get();
+    1884              :   }
+    1885              : };
+    1886              : template <>
+    1887              : struct getMaybeFakeTypePtr_<SymInt, true> final {
+    1888              :   static decltype(auto) call() {
+    1889              :     return IntType::get();
+    1890              :   }
+    1891              : };
+    1892              : 
+    1893              : template <>
+    1894              : struct getMaybeFakeTypePtr_<SymFloat, false> final {
+    1895              :   static decltype(auto) call() {
+    1896              :     return SymFloatType::get();
+    1897              :   }
+    1898              : };
+    1899              : template <>
+    1900              : struct getMaybeFakeTypePtr_<SymFloat, true> final {
+    1901              :   static decltype(auto) call() {
+    1902              :     return FloatType::get();
+    1903              :   }
+    1904              : };
+    1905              : 
+    1906              : template <>
+    1907              : struct getMaybeFakeTypePtr_<SymBool, false> final {
+    1908              :   static decltype(auto) call() {
+    1909              :     return SymBoolType::get();
+    1910              :   }
+    1911              : };
+    1912              : template <>
+    1913              : struct getMaybeFakeTypePtr_<SymBool, true> final {
+    1914              :   static decltype(auto) call() {
+    1915              :     return BoolType::get();
+    1916              :   }
+    1917              : };
+    1918              : 
+    1919              : template <>
+    1920              : struct getTypePtr_<c10::Device> final {
+    1921              :   static decltype(auto) call() {
+    1922              :     return DeviceObjType::get();
+    1923              :   }
+    1924              : };
+    1925              : template <>
+    1926              : struct getTypePtr_<bool> final {
+    1927              :   static decltype(auto) call() {
+    1928              :     return BoolType::get();
+    1929              :   }
+    1930              : };
+    1931              : template <>
+    1932              : struct getTypePtr_<at::Scalar> final {
+    1933              :   static decltype(auto) call() {
+    1934              :     return NumberType::get();
+    1935              :   }
+    1936              : };
+    1937              : template <>
+    1938              : struct getTypePtr_<c10::QScheme> final {
+    1939              :   static decltype(auto) call() {
+    1940              :     return QSchemeType::get();
+    1941              :   }
+    1942              : };
+    1943              : template <>
+    1944              : struct getTypePtr_<at::Generator> final {
+    1945              :   static decltype(auto) call() {
+    1946              :     return TypeFactory::create<OptionalType>(
+    1947              :         TypeFactory::get<GeneratorType>());
+    1948              :   }
+    1949              : };
+    1950              : template <>
+    1951              : struct getTypePtr_<std::string> final {
+    1952              :   static decltype(auto) call() {
+    1953              :     return StringType::get();
+    1954              :   }
+    1955              : };
+    1956              : template <>
+    1957              : struct getTypePtr_<c10::string_view> final {
+    1958              :   static decltype(auto) call() {
+    1959              :     return StringType::get();
+    1960              :   }
+    1961              : };
+    1962              : template <>
+    1963              : struct getTypePtr_<at::Dimname> final {
+    1964              :   static decltype(auto) call() {
+    1965              :     return StringType::get();
+    1966              :   }
+    1967              : };
+    1968              : template <class T, bool fake>
+    1969              : struct getMaybeFakeTypePtr_<std::vector<T>, fake> final {
+    1970              :   static const auto& call() {
+    1971              :     static auto inner_type = getMaybeFakeTypePtr_<T, fake>::call();
+    1972              :     // The "per vector<T>" static singleton needs to live in a .cpp file,
+    1973              :     // otherwise we'll end up with one singleton instance per shared library.
+    1974              :     static auto type = ListType::get("vector", inner_type);
+    1975              :     return type;
+    1976              :   }
+    1977              : };
+    1978              : template <class T, bool fake>
+    1979              : struct getMaybeFakeTypePtr_<c10::ArrayRef<T>, fake> final {
+    1980              :   static const auto& call() {
+    1981              :     static auto inner_type = getMaybeFakeTypePtr_<T, fake>::call();
+    1982              :     // The "per ArrayRef<T>" static singleton needs to live in a .cpp file,
+    1983              :     // otherwise we'll end up with one singleton instance per shared library.
+    1984              :     static auto type = ListType::get("ArrayRef", inner_type);
+    1985              :     return type;
+    1986              :   }
+    1987              : };
+    1988              : template <bool fake>
+    1989              : struct getMaybeFakeTypePtr_<c10::SymIntArrayRef, fake> final {
+    1990              :   static const auto& call() {
+    1991              :     static auto type = ListType::create(getMaybeFakeTypePtr_<c10::SymInt, fake>::call());
+    1992              :     return type;
+    1993              :   }
+    1994              : };
+    1995              : template <class T, bool fake>
+    1996              : struct getMaybeFakeTypePtr_<c10::List<T>, fake> final {
+    1997              :   static const auto& call() {
+    1998              :     static auto inner_type = getMaybeFakeTypePtr_<T, fake>::call();
+    1999              :     // The "per List<T>" static singleton needs to live in a .cpp file,
+    2000              :     // otherwise we'll end up with one singleton instance per shared library.
+    2001              :     static auto type = ListType::get("List", inner_type);
+    2002              :     return type;
+    2003              :   }
+    2004              : };
+    2005              : template <class T, bool fake>
+    2006              : struct getMaybeFakeTypePtr_<c10::IListRef<T>, fake> final {
+    2007              :   static const auto& call() {
+    2008              :     static auto inner_type = getMaybeFakeTypePtr_<T, fake>::call();
+    2009              :     static auto type = ListType::get("List", inner_type);
+    2010              :     return type;
+    2011              :   }
+    2012              : };
+    2013              : template <class T, size_t N, bool fake>
+    2014              : struct getMaybeFakeTypePtr_<std::array<T, N>, fake> final {
+    2015              :   static const auto& call() {
+    2016              :     static auto inner_type = getMaybeFakeTypePtr_<T, fake>::call();
+    2017              :     // The "per array<T, N>" static singleton needs to live in a .cpp file,
+    2018              :     // otherwise we'll end up with one singleton instance per shared library.
+    2019              :     // (Concatenating the length onto the end of the string because we want a unique
+    2020              :     // type_ptr created for every std::array<T, N> type).
+    2021              :     static auto type = ListType::get(std::string("array") + std::to_string(N), inner_type);
+    2022              :     return type;
+    2023              :   }
+    2024              : };
+    2025              : template <class K, class V, bool fake>
+    2026              : struct getMaybeFakeTypePtr_<std::unordered_map<K, V>, fake> final {
+    2027              :   static const auto& call() {
+    2028              :     static auto inner_key_type = getMaybeFakeTypePtr_<K, fake>::call();
+    2029              :     static auto inner_val_type = getMaybeFakeTypePtr_<V, fake>::call();
+    2030              :     // The "per unordered_map<K, V>" static singleton needs to live in a .cpp file,
+    2031              :     // otherwise we'll end up with one singleton instance per shared library.
+    2032              :     static auto type = DictType::get("unordered_map", inner_key_type, inner_val_type);
+    2033              :     return type;
+    2034              :   }
+    2035              : };
+    2036              : template <class K, class V, bool fake>
+    2037              : struct getMaybeFakeTypePtr_<c10::Dict<K, V>, fake> final {
+    2038              :   static const auto& call() {
+    2039              :     static auto inner_key_type = getMaybeFakeTypePtr_<K, fake>::call();
+    2040              :     static auto inner_val_type = getMaybeFakeTypePtr_<V, fake>::call();
+    2041              :     // The "per Dict<K, V>" static singleton needs to live in a .cpp file,
+    2042              :     // otherwise we'll end up with one singleton instance per shared library.
+    2043              :     static auto type = DictType::get("Dict", inner_key_type, inner_val_type);
+    2044              :     return type;
+    2045              :   }
+    2046              : };
+    2047              : 
+    2048              : template <class T, bool fake>
+    2049              : struct getMaybeFakeTypePtr_<at::optional<T>, fake> final {
+    2050     36925424 :   static const auto& call() {
+    2051     36925424 :     static auto inner_type = getMaybeFakeTypePtr_<T, fake>::call();
+    2052              :     // The "per optional<T>" static singleton needs to live in a .cpp file,
+    2053              :     // otherwise we'll end up with one singleton instance per shared library.
+    2054     36925424 :     static auto type = OptionalType::get(inner_type);
+    2055     36925424 :     return type;
+    2056              :   }
+    2057              : };
+    2058              : 
+    2059              : 
+    2060              : template<>
+    2061              : struct getTypePtr_<at::OptionalIntArrayRef> final {
+    2062              :   static const auto& call() {
+    2063              :     static auto inner_type = getMaybeFakeTypePtr_<IntArrayRef, false>::call();
+    2064              :     // The "per optional<T>" static singleton needs to live in a .cpp file,
+    2065              :     // otherwise we'll end up with one singleton instance per shared library.
+    2066              :     static auto type = OptionalType::get(inner_type);
+    2067              :     return type;
+    2068              :   }
+    2069              : };
+    2070              : 
+    2071              : template <bool fake>
+    2072              : struct getMaybeFakeTypePtr_<at::OptionalSymIntArrayRef, fake> final {
+    2073              :   static const auto& call() {
+    2074              :     // The "per optional<T>" static singleton needs to live in a .cpp file,
+    2075              :     // otherwise we'll end up with one singleton instance per shared library.
+    2076              :     static auto inner_type = getMaybeFakeTypePtr_<SymIntArrayRef, fake>::call();
+    2077              :     static auto type = OptionalType::get(inner_type);
+    2078              :     return type;
+    2079              :   }
+    2080              : };
+    2081              : 
+    2082              : template <class... Contained, bool fake>
+    2083              : struct getMaybeFakeTypePtr_<std::tuple<Contained...>, fake> final {
+    2084              :   static const auto& call() {
+    2085              :     static auto type = ([]() {
+    2086              :       std::vector<TypePtr> contained_types = {
+    2087              :         (getMaybeFakeTypePtr_<Contained, fake>::call())...
+    2088              :       };
+    2089              :       return TupleType::create(std::move(contained_types));
+    2090              :     })();
+    2091              :     return type;
+    2092              :   }
+    2093              : };
+    2094              : template <>
+    2095              : struct getTypePtr_<void> final {
+    2096              :   static decltype(auto) call() {
+    2097              :     return NoneType::get();
+    2098              :   }
+    2099              : };
+    2100              : } // namespace detail
+    2101              : template <class T>
+    2102     36925424 : inline decltype(auto) getTypePtr() {
+    2103              :   // TODO: static_assert that a templated function exists, and throw a friendly
+    2104              :   // error message if not
+    2105     36925424 :   return detail::getMaybeFakeTypePtr_<T, false>::call();
+    2106              : }
+    2107              : 
+    2108              : template <class T>
+    2109              : inline TypePtr getTypePtrCopy() {
+    2110              :   // TODO: static_assert that a templated function exists, and throw a friendly
+    2111              :   // error message if not
+    2112              :   return getTypePtr<T>();
+    2113              : }
+    2114              : 
+    2115              : template <class T>
+    2116              : inline decltype(auto) getFakeTypePtr() {
+    2117              :   return detail::getMaybeFakeTypePtr_<T, true>::call();
+    2118              : }
+    2119              : 
+    2120              : template <class T>
+    2121              : inline TypePtr getFakeTypePtrCopy() {
+    2122              :   return getFakeTypePtr<T>();
+    2123              : }
+    2124              : 
+    2125              : using TypeEnv = std::unordered_map<std::string, TypePtr>;
+    2126              : struct MatchTypeReturn {
+    2127              :   MatchTypeReturn(std::string reason) : reason_(std::move(reason)) {}
+    2128              :   static MatchTypeReturn Success() {
+    2129              :     return MatchTypeReturn();
+    2130              :   }
+    2131              :   bool success() const {
+    2132              :     return !reason_.has_value();
+    2133              :   }
+    2134              :   const std::string& reason() const {
+    2135              :     return reason_.value();
+    2136              :   }
+    2137              : 
+    2138              :  private:
+    2139              :   MatchTypeReturn()
+    2140              :   : reason_(c10::nullopt) {}
+    2141              :   c10::optional<std::string> reason_; // is there is no match, this contains the reason
+    2142              : };
+    2143              : 
+    2144              : // attempt to match the type variables in formal to actual, adding them to type_env.
+    2145              : // If no match is possible this returns a MatchTypeReturn with r.success() == false
+    2146              : // and a r.reason() that describes why it could not match.
+    2147              : // note: It is possible to successfully match a formal, but for type variables
+    2148              : // in the formal to still not be defined. In particular, None matches Optional[T]
+    2149              : // but does not define the value of T.
+    2150              : TORCH_API MatchTypeReturn
+    2151              : matchTypeVariables(const TypePtr& formal, const TypePtr& actual, TypeEnv& type_env);
+    2152              : 
+    2153              : // replace type variables appearing in `type` with the values in
+    2154              : // `type_env`. Returns nullptr if a variable used in `type`
+    2155              : // does not appear in `type_env`
+    2156              : TORCH_API TypePtr tryEvalTypeVariables(const TypePtr& type, TypeEnv& type_env);
+    2157              : 
+    2158              : TORCH_API bool elementTypeCanBeInferredFromMembers(const TypePtr& elem_type);
+    2159              : 
+    2160              : struct InterfaceType;
+    2161              : using InterfaceTypePtr = std::shared_ptr<InterfaceType>;
+    2162              : 
+    2163              : // Interfaces are a list of abstract methods that a class might meet.
+    2164              : // If a class provides those methods, it implicitly meets the interface.
+    2165              : 
+    2166              : // Subtype relations for Interface with ClassType:
+    2167              : // lhs (ClassType or InterfaceType) is a subtype of rhs if:
+    2168              : // 1. lhs methods are a superset of rhs methods
+    2169              : // 2. if rhs is module interface, the lhs must be module interface or module itself
+    2170              : struct TORCH_API InterfaceType : public NamedType {
+    2171              :   static InterfaceTypePtr create(
+    2172              :       QualifiedName qualifiedName, bool is_module=false);
+    2173              : 
+    2174              :   bool equals(const Type& rhs) const override {
+    2175              :     if (auto user_rhs = rhs.castRaw<InterfaceType>()) {
+    2176              :       return isSubTypeImpl(*this, *user_rhs, nullptr) &&
+    2177              :           isSubTypeImpl(*user_rhs, *this, nullptr);
+    2178              :     }
+    2179              :     return false;
+    2180              :   }
+    2181              : 
+    2182              :   std::string str() const override {
+    2183              :     return std::string("InterfaceType<") + name()->name() + ">";
+    2184              :   }
+    2185              : 
+    2186              :   bool isSubtypeOfExt(const Type& rhs, std::ostream* why_not) const override;
+    2187              : 
+    2188              :   // try to find a method of this interface,
+    2189              :   // returns nullptr if not found.
+    2190              :   const FunctionSchema* getMethod(const std::string& name) const;
+    2191              :   void addMethod(FunctionSchema schema);
+    2192              :   const std::vector<FunctionSchema>& methods() const {
+    2193              :     return *methods_;
+    2194              :   }
+    2195              : 
+    2196              :   bool is_module() const override{
+    2197              :     return is_module_;
+    2198              :   }
+    2199              :   static const TypeKind Kind = TypeKind::InterfaceType;
+    2200              :   ~InterfaceType() override;
+    2201              :  private:
+    2202              :   InterfaceType(QualifiedName name, bool is_module);
+    2203              :   static bool isSubTypeImpl(
+    2204              :       const InterfaceType& lhs,
+    2205              :       const InterfaceType& rhs,
+    2206              :       std::ostream* why_not);
+    2207              : 
+    2208              :   std::string annotation_str_impl(TypePrinter printer = nullptr) const override {
+    2209              :     (void)printer; // Suppress unused variable warning
+    2210              :     return name()->qualifiedName();
+    2211              :   }
+    2212              : 
+    2213              :   // shared_ptr so that this header does not have to depend on
+    2214              :   // FunctionSchema.h
+    2215              :   std::shared_ptr<std::vector<FunctionSchema>> methods_;
+    2216              :   // flag to distinguish if it's an interface type from a module or not
+    2217              :   bool is_module_;
+    2218              : };
+    2219              : 
+    2220              : template <TypeKind K>
+    2221              : struct EnumerationType : public Type {
+    2222              : static const TypeKind Kind = K;
+    2223              : 
+    2224              : bool equals(const Type& rhs) const override {
+    2225              :   return rhs.kind() == kind();
+    2226              : }
+    2227              : 
+    2228              : protected:
+    2229              : EnumerationType() : Type(Kind) {}
+    2230              : };
+    2231              : 
+    2232              : // WARNING: These enumeration types below DO NOT actually get parsed out
+    2233              : // from the logical schema strings, instead they are mapped as ints.  To
+    2234              : // observe these types, use real_type() instead of type() on Argument
+    2235              : 
+    2236              : struct ScalarTypeType;
+    2237              : using ScalarTypeTypePtr = SingletonTypePtr<ScalarTypeType>;
+    2238              : struct TORCH_API ScalarTypeType : public EnumerationType<TypeKind::ScalarTypeType> {
+    2239              : std::string str() const override {
+    2240              : return "ScalarType";
+    2241              : }
+    2242              : static const TypeKind Kind = TypeKind::ScalarTypeType;
+    2243              : // global singleton
+    2244              : static ScalarTypeTypePtr get();
+    2245              : 
+    2246              : private:
+    2247              : ScalarTypeType() : EnumerationType() {}
+    2248              : };
+    2249              : 
+    2250              : struct MemoryFormatType;
+    2251              : using MemoryFormatTypePtr = SingletonTypePtr<MemoryFormatType>;
+    2252              : struct TORCH_API MemoryFormatType : public EnumerationType<TypeKind::MemoryFormatType> {
+    2253              : std::string str() const override {
+    2254              : return "MemoryFormat";
+    2255              : }
+    2256              : static const TypeKind Kind = TypeKind::MemoryFormatType;
+    2257              : // global singleton
+    2258              : static MemoryFormatTypePtr get();
+    2259              : 
+    2260              : private:
+    2261              : MemoryFormatType() : EnumerationType() {}
+    2262              : };
+    2263              : 
+    2264              : struct LayoutType;
+    2265              : using LayoutTypePtr = SingletonTypePtr<LayoutType>;
+    2266              : struct TORCH_API LayoutType : public EnumerationType<TypeKind::LayoutType> {
+    2267              : std::string str() const override {
+    2268              : return "Layout";
+    2269              : }
+    2270              : static const TypeKind Kind = TypeKind::LayoutType;
+    2271              : // global singleton
+    2272              : static LayoutTypePtr get();
+    2273              : 
+    2274              : private:
+    2275              : LayoutType() : EnumerationType() {}
+    2276              : };
+    2277              : 
+    2278              : namespace detail {
+    2279              : template <>
+    2280              : struct getMaybeFakeTypePtr_<c10::ScalarType, false> final {
+    2281              :   static decltype(auto) call() {
+    2282              :     return ScalarTypeType::get();
+    2283              :   }
+    2284              : };
+    2285              : template <>
+    2286              : struct getMaybeFakeTypePtr_<c10::Layout, false> final {
+    2287              :   static decltype(auto) call() {
+    2288              :     return LayoutType::get();
+    2289              :   }
+    2290              : };
+    2291              : template <>
+    2292              : struct getMaybeFakeTypePtr_<c10::MemoryFormat, false> final {
+    2293              :   static decltype(auto) call() {
+    2294              :     return MemoryFormatType::get();
+    2295              :   }
+    2296              : };
+    2297              : template <>
+    2298              : struct getMaybeFakeTypePtr_<c10::ScalarType, true> final {
+    2299              :   static decltype(auto) call() {
+    2300              :     return IntType::get();
+    2301              :   }
+    2302              : };
+    2303              : template <>
+    2304              : struct getMaybeFakeTypePtr_<c10::Layout, true> final {
+    2305              :   static decltype(auto) call() {
+    2306              :     return IntType::get();
+    2307              :   }
+    2308              : };
+    2309              : template <>
+    2310              : struct getMaybeFakeTypePtr_<c10::MemoryFormat, true> final {
+    2311              :   static decltype(auto) call() {
+    2312              :     return IntType::get();
+    2313              :   }
+    2314              : };
+    2315              : } // namespace detail
+    2316              : 
+    2317              : // the common supertype of all lists,
+    2318              : // List[T] <: AnyList for all T
+    2319              : struct AnyListType;
+    2320              : using AnyListTypePtr = SingletonTypePtr<AnyListType>;
+    2321              : struct TORCH_API AnyListType : public Type {
+    2322              :   bool equals(const Type& rhs) const override {
+    2323              :     return rhs.kind() == kind();
+    2324              :   }
+    2325              :   std::string str() const override {
+    2326              :     return "list";
+    2327              :   }
+    2328              :   static const TypeKind Kind = TypeKind::AnyListType;
+    2329              :   // global singleton
+    2330              :   static AnyListTypePtr get();
+    2331              : private:
+    2332              :   AnyListType()
+    2333              :   : Type(TypeKind::AnyListType) {}
+    2334              : };
+    2335              : 
+    2336              : // the common supertype of all tuples,
+    2337              : // Tuple[T...] <: AnyTuple for all T
+    2338              : struct AnyTupleType;
+    2339              : using AnyTupleTypePtr = SingletonTypePtr<AnyTupleType>;
+    2340              : struct TORCH_API AnyTupleType : public Type {
+    2341              :   bool equals(const Type& rhs) const override {
+    2342              :     return rhs.kind() == kind();
+    2343              :   }
+    2344              : 
+    2345              :   std::string str() const override {
+    2346              :     return "tuple";
+    2347              :   }
+    2348              :   static const TypeKind Kind = TypeKind::AnyTupleType;
+    2349              : 
+    2350              :   // global singleton
+    2351              :   static AnyTupleTypePtr get();
+    2352              : private:
+    2353              :   AnyTupleType()
+    2354              :   : Type(TypeKind::AnyTupleType) {}
+    2355              : };
+    2356              : 
+    2357              : // the common supertype of all classes,
+    2358              : // ClassType <: AnyClassType for all classes
+    2359              : struct AnyClassType;
+    2360              : using AnyClassTypePtr = SingletonTypePtr<AnyClassType>;
+    2361              : struct TORCH_API AnyClassType : public Type {
+    2362              :   bool equals(const Type& rhs) const override {
+    2363              :     return rhs.kind() == kind();
+    2364              :   }
+    2365              :   std::string str() const override {
+    2366              :     return "AnyClassType";
+    2367              :   }
+    2368              :   static const TypeKind Kind = TypeKind::AnyClassType;
+    2369              :   // global singleton
+    2370              :   static AnyClassTypePtr get();
+    2371              : private:
+    2372              :   AnyClassType()
+    2373              :   : Type(TypeKind::AnyClassType) {}
+    2374              : };
+    2375              : 
+    2376              : template<>
+    2377              : inline typename detail::CastReturnType<NamedType>::type Type::cast<NamedType>() {
+    2378              :   if (kind() == TypeKind::TupleType || kind() == TypeKind::FunctionType ||
+    2379              :       kind() == TypeKind::ClassType || kind() == TypeKind::InterfaceType) {
+    2380              :     return std::static_pointer_cast<NamedType>(static_cast<NamedType *>(this)->shared_from_this());
+    2381              :   }
+    2382              :   return nullptr;
+    2383              : }
+    2384              : 
+    2385              : template<>
+    2386              : inline typename detail::CastConstReturnType<NamedType>::type Type::cast<NamedType>() const {
+    2387              :   if (kind() == TypeKind::TupleType || kind() == TypeKind::FunctionType ||
+    2388              :       kind() == TypeKind::ClassType || kind() == TypeKind::InterfaceType) {
+    2389              :     return std::static_pointer_cast<const NamedType>(static_cast<const NamedType *>(this)->shared_from_this());
+    2390              :   }
+    2391              :   return nullptr;
+    2392              : }
+    2393              : 
+    2394              : template<>
+    2395              : inline const NamedType* Type::castRaw<NamedType>() const {
+    2396              :   if (kind() == TypeKind::TupleType || kind() == TypeKind::FunctionType ||
+    2397              :       kind() == TypeKind::ClassType || kind() == TypeKind::InterfaceType) {
+    2398              :     return static_cast<const NamedType*>(this);
+    2399              :   }
+    2400              :   return nullptr;
+    2401              : }
+    2402              : 
+    2403              : // Used as a return type when inferring the IValue type of a Python object.
+    2404              : struct InferredType {
+    2405              :   /* implicit */ InferredType(TypePtr type) : type_(std::move(type)) {}
+    2406              :   /* implicit */ InferredType(std::string reason)
+    2407              :       : type_(nullptr), reason_(std::move(reason)) {}
+    2408              :   TypePtr type() const {
+    2409              :     TORCH_INTERNAL_ASSERT(
+    2410              :         type_,
+    2411              :         "Tried to get the type from an InferredType but the type is null. ",
+    2412              :         "Reason: ",
+    2413              :         reason_);
+    2414              :     return type_;
+    2415              :   }
+    2416              :   bool success() const {
+    2417              :     return type_ != nullptr;
+    2418              :   }
+    2419              :   const std::string& reason() const {
+    2420              :     TORCH_INTERNAL_ASSERT(!type_);
+    2421              :     return reason_;
+    2422              :   }
+    2423              : 
+    2424              : private:
+    2425              :   TypePtr type_;
+    2426              :   std::string reason_;
+    2427              : };
+    2428              : 
+    2429              : TORCH_API bool containsAnyType(const TypePtr& type);
+    2430              : 
+    2431              : } // namespace c10
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/jit_type_base.h.func-c.html b/html/libtorch/include/ATen/core/jit_type_base.h.func-c.html new file mode 100644 index 0000000..88bac8f --- /dev/null +++ b/html/libtorch/include/ATen/core/jit_type_base.h.func-c.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/jit_type_base.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - jit_type_base.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:88.5 %2623
Test Date:2024-04-30 13:17:26Functions:100.0 %99
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c104Type24SingletonOrSharedTypePtrIS0_E16SharedPtrWrapperC2EOSt10shared_ptrIS0_E2
_ZN3c104Type24SingletonOrSharedTypePtrIS0_E4ReprC2ESt10shared_ptrIS0_E2
_ZN3c104Type24SingletonOrSharedTypePtrIS0_EC2INS_10TensorTypeELb1EEESt10shared_ptrIT_E2
_ZN3c104Type24SingletonOrSharedTypePtrIS0_E4ReprC2ERKS3_36925424
_ZN3c104Type24SingletonOrSharedTypePtrIS0_EC2ERKS2_36925424
_ZN3c104Type24SingletonOrSharedTypePtrIS0_E4Repr7destroyEv73850852
_ZN3c104Type24SingletonOrSharedTypePtrIS0_E4ReprD2Ev73850852
_ZNK3c104Type24SingletonOrSharedTypePtrIS0_E4Repr18isSharedAndNonNullEv110776276
_ZNK3c104Type24SingletonOrSharedTypePtrIS0_E4Repr7rawReprEv110776276
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/jit_type_base.h.func.html b/html/libtorch/include/ATen/core/jit_type_base.h.func.html new file mode 100644 index 0000000..8a08e6e --- /dev/null +++ b/html/libtorch/include/ATen/core/jit_type_base.h.func.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/jit_type_base.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - jit_type_base.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:88.5 %2623
Test Date:2024-04-30 13:17:26Functions:100.0 %99
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c104Type24SingletonOrSharedTypePtrIS0_E16SharedPtrWrapperC2EOSt10shared_ptrIS0_E2
_ZN3c104Type24SingletonOrSharedTypePtrIS0_E4Repr7destroyEv73850852
_ZN3c104Type24SingletonOrSharedTypePtrIS0_E4ReprC2ERKS3_36925424
_ZN3c104Type24SingletonOrSharedTypePtrIS0_E4ReprC2ESt10shared_ptrIS0_E2
_ZN3c104Type24SingletonOrSharedTypePtrIS0_E4ReprD2Ev73850852
_ZN3c104Type24SingletonOrSharedTypePtrIS0_EC2ERKS2_36925424
_ZN3c104Type24SingletonOrSharedTypePtrIS0_EC2INS_10TensorTypeELb1EEESt10shared_ptrIT_E2
_ZNK3c104Type24SingletonOrSharedTypePtrIS0_E4Repr18isSharedAndNonNullEv110776276
_ZNK3c104Type24SingletonOrSharedTypePtrIS0_E4Repr7rawReprEv110776276
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/core/jit_type_base.h.gcov.html b/html/libtorch/include/ATen/core/jit_type_base.h.gcov.html new file mode 100644 index 0000000..73a89a0 --- /dev/null +++ b/html/libtorch/include/ATen/core/jit_type_base.h.gcov.html @@ -0,0 +1,790 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/core/jit_type_base.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/core - jit_type_base.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:88.5 %2623
Test Date:2024-04-30 13:17:26Functions:100.0 %99
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <functional>
+       4              : #include <memory>
+       5              : #include <string>
+       6              : #include <utility>
+       7              : 
+       8              : #include <ATen/core/qualified_name.h>
+       9              : #include <ATen/core/type_ptr.h>
+      10              : #include <c10/core/SymInt.h>
+      11              : #include <c10/core/SymFloat.h>
+      12              : #include <c10/core/SymBool.h>
+      13              : #include <c10/core/SymIntArrayRef.h>
+      14              : #include <c10/macros/Macros.h>
+      15              : #include <c10/util/ArrayRef.h>
+      16              : #include <c10/util/Exception.h>
+      17              : #include <c10/util/Optional.h>
+      18              : 
+      19              : namespace c10 {
+      20              : 
+      21              : #define C10_FORALL_TYPES(_) \
+      22              :   _(AnyType)                \
+      23              :   _(EnumType)               \
+      24              :   _(AnyEnumType)            \
+      25              :   _(TensorType)             \
+      26              :   _(StorageType)            \
+      27              :   _(TupleType)              \
+      28              :   _(ListType)               \
+      29              :   _(DictType)               \
+      30              :   _(NumberType)             \
+      31              :   _(FloatType)              \
+      32              :   _(ComplexType)            \
+      33              :   _(FutureType)             \
+      34              :   _(AwaitType)              \
+      35              :   _(RRefType)               \
+      36              :   _(IntType)                \
+      37              :   _(NoneType)               \
+      38              :   _(StringType)             \
+      39              :   _(GeneratorType)          \
+      40              :   _(QuantizerType)          \
+      41              :   _(BoolType)               \
+      42              :   _(OptionalType)           \
+      43              :   _(VarType)                \
+      44              :   _(DeviceObjType)          \
+      45              :   _(StreamObjType)          \
+      46              :   _(FunctionType)           \
+      47              :   _(ClassType)              \
+      48              :   _(PyObjectType)           \
+      49              :   _(CapsuleType)            \
+      50              :   _(InterfaceType)          \
+      51              :   _(QSchemeType)            \
+      52              :   _(ScalarTypeType)         \
+      53              :   _(LayoutType)             \
+      54              :   _(MemoryFormatType)       \
+      55              :   _(AnyListType)            \
+      56              :   _(AnyTupleType)           \
+      57              :   _(AnyClassType)           \
+      58              :   _(SymIntType)             \
+      59              :   _(SymFloatType)           \
+      60              :   _(SymBoolType)            \
+      61              :   _(UnionType)              \
+      62              :   _(DynamicType)
+      63              : 
+      64              : enum class TypeKind {
+      65              : #define DEFINE_TYPE(T) T,
+      66              :   C10_FORALL_TYPES(DEFINE_TYPE)
+      67              : #undef DEFINE_TYPE
+      68              : };
+      69              : 
+      70              : TORCH_API const char* typeKindToString(TypeKind kind);
+      71              : 
+      72              : struct Type;
+      73              : struct SharedType;
+      74              : 
+      75              : // Use this to customize how a Type is printed using `annotation_str()`. If
+      76              : // c10::nullopt is returned, `annotation_str()` falls through to its default
+      77              : // implementation.
+      78              : using TypePrinter = std::function<c10::optional<std::string>(const Type&)>;
+      79              : 
+      80              : namespace detail {
+      81              : template <typename T>
+      82              : struct IsSingletonType : public std::integral_constant<bool, false> {};
+      83              : } // namespace detail
+      84              : #define TORCH_DECLARE_SINGLETON(Type) \
+      85              :   struct Type;                                                          \
+      86              :   namespace detail { \
+      87              :   template <> struct IsSingletonType<Type> : public std::integral_constant<bool, true> {}; \
+      88              :   }
+      89              : 
+      90              : TORCH_DECLARE_SINGLETON(AnyType);
+      91              : TORCH_DECLARE_SINGLETON(AnyEnumType);
+      92              : TORCH_DECLARE_SINGLETON(NumberType);
+      93              : TORCH_DECLARE_SINGLETON(FloatType);
+      94              : TORCH_DECLARE_SINGLETON(ComplexType);
+      95              : TORCH_DECLARE_SINGLETON(IntType);
+      96              : TORCH_DECLARE_SINGLETON(BoolType);
+      97              : TORCH_DECLARE_SINGLETON(StringType);
+      98              : TORCH_DECLARE_SINGLETON(StorageType);
+      99              : TORCH_DECLARE_SINGLETON(NoneType);
+     100              : TORCH_DECLARE_SINGLETON(GeneratorType);
+     101              : TORCH_DECLARE_SINGLETON(QuantizerType);
+     102              : TORCH_DECLARE_SINGLETON(QSchemeType);
+     103              : TORCH_DECLARE_SINGLETON(DeviceObjType);
+     104              : TORCH_DECLARE_SINGLETON(StreamObjType);
+     105              : TORCH_DECLARE_SINGLETON(CapsuleType);
+     106              : TORCH_DECLARE_SINGLETON(PyObjectType);
+     107              : TORCH_DECLARE_SINGLETON(ScalarTypeType);
+     108              : TORCH_DECLARE_SINGLETON(LayoutType);
+     109              : TORCH_DECLARE_SINGLETON(MemoryFormatType);
+     110              : TORCH_DECLARE_SINGLETON(AnyListType);
+     111              : TORCH_DECLARE_SINGLETON(AnyTupleType);
+     112              : TORCH_DECLARE_SINGLETON(AnyClassType);
+     113              : 
+     114              : namespace detail {
+     115              : template <typename T, typename Enable = void>
+     116              : struct CastReturnType {
+     117              :   using type = std::shared_ptr<T>;
+     118              : };
+     119              : 
+     120              : template <typename T>
+     121              : struct CastReturnType<T, typename std::enable_if<IsSingletonType<T>::value>::type> {
+     122              :   using type = SingletonTypePtr<T>;
+     123              : };
+     124              : 
+     125              : template <typename T, typename Enable = void>
+     126              : struct CastConstReturnType {
+     127              :   using type = std::shared_ptr<const T>;
+     128              : };
+     129              : 
+     130              : template <typename T>
+     131              : struct CastConstReturnType<T, typename std::enable_if<IsSingletonType<T>::value>::type> {
+     132              :   using type = SingletonTypePtr<const T>;
+     133              : };
+     134              : 
+     135              : template <typename T>
+     136              : struct as_shared_type {
+     137              :   using type = SharedType*;
+     138              : };
+     139              : 
+     140              : template <typename T>
+     141              : struct as_shared_type<const T*> {
+     142              :   using type = const SharedType *;
+     143              : };
+     144              : } // namespace detail
+     145              : 
+     146              : struct TORCH_API Type {
+     147              :   friend TORCH_API bool operator==(const Type& lhs, const Type& rhs);
+     148              :  private:
+     149              :   TypeKind kind_;
+     150              : 
+     151              :   protected:
+     152              :   Type(TypeKind kind) : kind_(kind) {}
+     153              : 
+     154              :   virtual std::string annotation_str_impl(TypePrinter /*printer*/) const {
+     155              :     return str();
+     156              :   }
+     157              :   // a == b
+     158              :   virtual bool equals(const Type& rhs) const = 0;
+     159              :   // a == b <=> b == a
+     160              :   virtual bool symmetric() const {
+     161              :     return true;
+     162              :   }
+     163              : 
+     164              :  public:
+     165              :   template <typename T>
+     166              :   class SingletonOrSharedTypePtr {
+     167              :    public:
+     168              :     using element_type = typename std::shared_ptr<T>::element_type;
+     169              : 
+     170              :     SingletonOrSharedTypePtr() = default;
+     171              : 
+     172              :     /* implicit */ SingletonOrSharedTypePtr(std::shared_ptr<T> x)
+     173              :         : repr_(std::move(x)) {}
+     174              : 
+     175              :     template <typename U, std::enable_if_t<std::is_convertible<U*, T*>::value, bool> = true>
+     176            2 :     /* implicit */ SingletonOrSharedTypePtr(std::shared_ptr<U> x)
+     177            2 :         : repr_(std::move(x)) {}
+     178              : 
+     179              :     /* implicit */ SingletonOrSharedTypePtr(std::nullptr_t)
+     180              :         : repr_(nullptr) {}
+     181              : 
+     182              :     /* implicit */ SingletonOrSharedTypePtr(SingletonTypePtr<T> p)
+     183              :         : repr_(p) {}
+     184              : 
+     185              :     template <typename U, std::enable_if_t<std::is_convertible<U*, T*>::value, bool> = true>
+     186              :     /* implicit */ SingletonOrSharedTypePtr(SingletonTypePtr<U> p)
+     187              :         : repr_(SingletonTypePtr<T>(p.get())) {}
+     188              : 
+     189              : 
+     190              :     // We need to support construction from T* for pybind. The problem
+     191              :     // is that it's not clear if we are supposed to be taking shared
+     192              :     // ownership or not.
+     193              :     //
+     194              :     // Case 1: if T is known statically to derive from SharedType, we should use
+     195              :     // shared_from_this() and take shared_ownership.
+     196              :     //
+     197              :     // Case 2: if T is exactly Type, we need to do a dynamic_cast to
+     198              :     // check if it's a SharedType and do the right thing.
+     199              :     //
+     200              :     // Case 3: Otherwise, T is not a SharedType. (debug-check this
+     201              :     // assumption!) Use a singleton pointer.
+     202              : 
+     203              :     template <typename U = T, std::enable_if_t<std::is_base_of<SharedType, U>::value, bool> = true>
+     204              :     /* implicit */ SingletonOrSharedTypePtr(T* p) : SingletonOrSharedTypePtr(static_cast<typename detail::as_shared_type<U>::type>(p)->shared_from_this()) {}
+     205              : 
+     206              :     template <typename U = T, std::enable_if_t<std::is_same<Type, U>::value, bool> = true>
+     207              :     /* implicit */ SingletonOrSharedTypePtr(T* p) {
+     208              :       if (auto* shared_p = dynamic_cast<typename detail::as_shared_type<U>::type>(p)) {
+     209              :         repr_ = Repr(shared_p->shared_from_this());
+     210              :       } else {
+     211              :         repr_ = Repr(p);
+     212              :       }
+     213              :     }
+     214              : 
+     215              :     template <typename U = T, std::enable_if_t<!std::is_same<Type, U>::value && !std::is_base_of<SharedType, U>::value, bool> = true>
+     216              :     /* implicit */ SingletonOrSharedTypePtr(T* p)
+     217              :         : repr_(p) {
+     218              :       TORCH_INTERNAL_ASSERT_DEBUG_ONLY(dynamic_cast<typename detail::as_shared_type<U>::type>(p) == nullptr);
+     219              :     }
+     220              : 
+     221     36925424 :     SingletonOrSharedTypePtr(const SingletonOrSharedTypePtr&) = default;
+     222              :     SingletonOrSharedTypePtr(SingletonOrSharedTypePtr&&) noexcept = default;
+     223              :     SingletonOrSharedTypePtr& operator=(const SingletonOrSharedTypePtr&) = default;
+     224              :     SingletonOrSharedTypePtr& operator=(SingletonOrSharedTypePtr&&) noexcept = default;
+     225              : 
+     226              :     T* get() const {
+     227              :       return repr_.isSharedAndNonNull() ? repr_.shared_.repr_.get() : static_cast<T*>(repr_.rawRepr().first);
+     228              :     }
+     229              : 
+     230              :     operator bool() const {
+     231              :       return repr_.isNonNull();
+     232              :     }
+     233              : 
+     234              :     bool operator==(std::nullptr_t) const {
+     235              :       return !repr_.isNonNull();
+     236              :     }
+     237              : 
+     238              :     bool operator!=(std::nullptr_t) const {
+     239              :       return repr_.isNonNull();
+     240              :     }
+     241              : 
+     242              :     template <typename U = T, std::enable_if_t<!std::is_same<std::remove_const_t<U>, void>::value, bool> = true>
+     243              :     U& operator*() const {
+     244              :       return *get();
+     245              :     }
+     246              : 
+     247              :     T* operator->() const {
+     248              :       return get();
+     249              :     }
+     250              : 
+     251              :   private:
+     252              :     // NOTE: SharedPtrWrapper exists to work around a baffling bug in
+     253              :     // nvcc; see comment in destroy() below.
+     254              :     struct SharedPtrWrapper {
+     255            2 :       SharedPtrWrapper(std::shared_ptr<T> &&x)
+     256            2 :           : repr_(std::move(x)) {}
+     257              :       std::shared_ptr<T> repr_;
+     258              :     };
+     259              :     union Repr {
+     260              :       Repr() : Repr(nullptr) {}
+     261              : 
+     262            2 :       explicit Repr(std::shared_ptr<T> x)
+     263            2 :           : shared_(std::move(x)) {}
+     264              : 
+     265              :       explicit Repr(std::nullptr_t)
+     266              :           : singletonRepr_(nullptr) {}
+     267              : 
+     268              :       explicit Repr(SingletonTypePtr<T> p)
+     269              :           : singletonRepr_(p.get()) {}
+     270              : 
+     271     73850852 :       ~Repr() {
+     272     73850852 :         destroy();
+     273     73850852 :       }
+     274              : 
+     275              :       // NOTE: the only non-UB way to access our null state is through
+     276              :       // rawRepr(), because our copy operation doesn't preserve which
+     277              :       // union member is active for null pointers.
+     278     36925424 :       Repr(const Repr& rhs) {
+     279     36925424 :         if (rhs.isSharedAndNonNull()) {
+     280     36925424 :           new (&shared_) SharedPtrWrapper(rhs.shared_);
+     281              :         } else {
+     282            0 :           singletonRepr_.singleton_ = static_cast<T*>(rhs.rawRepr().first);
+     283            0 :           TORCH_INTERNAL_ASSERT_DEBUG_ONLY(rhs.singletonRepr_.unused_ == nullptr);
+     284            0 :           singletonRepr_.unused_ = nullptr;
+     285              :         }
+     286     36925424 :       }
+     287              : 
+     288              :       Repr(Repr&& rhs) noexcept {
+     289              :         if (rhs.isSharedAndNonNull()) {
+     290              :           new (&shared_) SharedPtrWrapper(std::move(rhs.shared_));
+     291              :         } else {
+     292              :           singletonRepr_.singleton_ = static_cast<T*>(rhs.rawRepr().first);
+     293              :           TORCH_INTERNAL_ASSERT_DEBUG_ONLY(rhs.singletonRepr_.unused_ == nullptr);
+     294              :           singletonRepr_.unused_ = nullptr;
+     295              :         }
+     296              :       }
+     297              : 
+     298              :       Repr& operator=(const Repr& rhs) {
+     299              :         if (&rhs == this) {
+     300              :           return *this;
+     301              :         }
+     302              :         if (rhs.isSharedAndNonNull()) {
+     303              :           if (isSharedAndNonNull()) {
+     304              :             shared_ = rhs.shared_;
+     305              :           } else {
+     306              :             new (&shared_) SharedPtrWrapper(rhs.shared_);
+     307              :           }
+     308              :         } else {
+     309              :           if (isSharedAndNonNull()) {
+     310              :             destroy();
+     311              :           }
+     312              :           singletonRepr_.singleton_ = static_cast<T*>(rhs.rawRepr().first);
+     313              :           TORCH_INTERNAL_ASSERT_DEBUG_ONLY(rhs.rawRepr().nullIfSingleton_ == nullptr);
+     314              :           singletonRepr_.unused_ = nullptr;
+     315              :         }
+     316              :         return *this;
+     317              :       }
+     318              : 
+     319              :       Repr& operator=(Repr&& rhs) noexcept {
+     320              :         if (&rhs == this) {
+     321              :           return *this;
+     322              :         }
+     323              :         if (rhs.isSharedAndNonNull()) {
+     324              :           if (isSharedAndNonNull()) {
+     325              :             shared_ = std::move(rhs.shared_);
+     326              :           } else {
+     327              :             new (&shared_) SharedPtrWrapper(std::move(rhs.shared_));
+     328              :           }
+     329              :         } else {
+     330              :           if (isSharedAndNonNull()) {
+     331              :             destroy();
+     332              :           }
+     333              :           singletonRepr_.singleton_ = static_cast<T*>(rhs.rawRepr().first);
+     334              :           TORCH_INTERNAL_ASSERT_DEBUG_ONLY(rhs.rawRepr().nullIfSingleton_ == nullptr);
+     335              :           singletonRepr_.unused_ = nullptr;
+     336              :         }
+     337              :         return *this;
+     338              :       }
+     339              : 
+     340              :       SharedPtrWrapper shared_;
+     341              : 
+     342              :       struct SingletonRepr {
+     343              :         explicit SingletonRepr(T* s) : singleton_(s) {}
+     344              :         T* singleton_;
+     345              :         void* unused_ = nullptr;
+     346              :       } singletonRepr_;
+     347              :       struct RawRepr {
+     348              :         void* first;
+     349              :         void* nullIfSingleton_;
+     350              :       };
+     351              : 
+     352              :       // It is UB to read the singleton part of Repr if it was
+     353              :       // constructed as a shared_ptr and vice versa, but memcpying out
+     354              :       // the representation is always OK, so here's an accessor to obey
+     355              :       // the letter of the law.
+     356    110776276 :       RawRepr rawRepr() const {
+     357              :         RawRepr repr;
+     358    110776276 :         memcpy(&repr, reinterpret_cast<const char *>(this), sizeof(RawRepr));
+     359    110776276 :         return repr;
+     360              :       }
+     361              : 
+     362              :       bool isNonNull() const {
+     363              :         auto repr = rawRepr();
+     364              :         TORCH_INTERNAL_ASSERT_DEBUG_ONLY(repr.nullIfSingleton_ == nullptr || repr.first != nullptr);
+     365              :         return repr.first != nullptr;
+     366              :       }
+     367              : 
+     368    110776276 :       bool isSharedAndNonNull() const {
+     369    110776276 :         return rawRepr().nullIfSingleton_ != nullptr;
+     370              :       }
+     371              : 
+     372              :      private:
+     373     73850852 :       void destroy() {
+     374     73850852 :         if (isSharedAndNonNull()) {
+     375              :           // Without SharedPtrWrapper, this line would read
+     376              :           // `shared_.~shared_ptr()` and nvcc would complain with
+     377              :           // "error: expected primary-expression before '>' token"
+     378              :           // referring to the "t" in "shared_ptr". SharedPtrWrapper
+     379              :           // exists to work around this compiler bug.
+     380     36925428 :           shared_.~SharedPtrWrapper();
+     381              :         }
+     382     73850852 :       }
+     383              :     } repr_;
+     384              :   };
+     385              : 
+     386              :   using TypePtr = SingletonOrSharedTypePtr<Type>;
+     387              :   using Ptr = TypePtr;
+     388              :   using ElementType = Type;
+     389              : 
+     390              :   // subtyping relation. By default, we return true for the case
+     391              :   // when the type is exactly equal or if this <: T where rhs = Optional[T]
+     392              : 
+     393              :   // if this returns false and the why_not stream is non-null, it contains
+     394              :   // additional details that describe why this is not a subtype of 'rhs'.
+     395              :   // This additional information should only contain details that are not
+     396              :   // obvious from the annotation_str() that describes the type. For instance it
+     397              :   // is clear that `int <: str` is false but not clear why `Foo <: InterfaceBar`
+     398              :   // might be false.
+     399              :   virtual bool isSubtypeOfExt(const Type& rhs, std::ostream* why_not) const;
+     400              :   virtual bool is_module() const;
+     401              :   bool isSubtypeOf(const Type& rhs) const {
+     402              :     return isSubtypeOfExt(rhs, nullptr);
+     403              :   }
+     404              :   // Compatibility shims to accommodate existing code that passes shared_ptrs
+     405              :   // around. Ideally, we would just delete this, but it should be harmless.
+     406              :   template <typename T>
+     407              :   typename std::enable_if<std::is_base_of<Type, T>::value, bool>::type
+     408              :   isSubtypeOf(const std::shared_ptr<T>& rhs) const {
+     409              :     return isSubtypeOf(*rhs);
+     410              :   }
+     411              : 
+     412              :   template <typename T>
+     413              :   typename std::enable_if<std::is_base_of<Type, T>::value, bool>::type
+     414              :   isSubtypeOf(const SingletonOrSharedTypePtr<T>& rhs) const {
+     415              :     return isSubtypeOf(*rhs);
+     416              :   }
+     417              : 
+     418              :   template <typename T>
+     419              :   typename std::enable_if<std::is_base_of<Type, T>::value, bool>::type
+     420              :   isSubtypeOf(SingletonTypePtr<T> rhs) const {
+     421              :     return isSubtypeOf(*rhs);
+     422              :   }
+     423              : 
+     424              :   template <typename T>
+     425              :   typename std::enable_if<std::is_base_of<Type, T>::value, bool>::type
+     426              :   isSubtypeOfExt(const SingletonOrSharedTypePtr<T>& rhs, std::ostream* why_not) const {
+     427              :     return isSubtypeOfExt(*rhs, why_not);
+     428              :   }
+     429              : 
+     430              :   template <typename T>
+     431              :   typename std::enable_if<std::is_base_of<Type, T>::value, bool>::type
+     432              :   isSubtypeOfExt(const std::shared_ptr<T>& rhs, std::ostream* why_not) const {
+     433              :     return isSubtypeOfExt(*rhs, why_not);
+     434              :   }
+     435              : 
+     436              :   template <typename T>
+     437              :   typename std::enable_if<std::is_base_of<Type, T>::value, bool>::type
+     438              :   isSubtypeOfExt(SingletonTypePtr<T> rhs, std::ostream* why_not) const {
+     439              :     return isSubtypeOfExt(*rhs, why_not);
+     440              :   }
+     441              : 
+     442              :   // How this type will appear in FunctionSchema declarations
+     443              :   virtual std::string str() const = 0;
+     444              : 
+     445              :   // How this type will appear as if it were a type annotation in Python
+     446              :   // which is sometimes different than how it appears in declarations (e.g.
+     447              :   // int[] vs List[int])
+     448              :   //
+     449              :   // Takes a custom printer that users can pass in to customize the output of
+     450              :   // this method.
+     451              :   std::string annotation_str(TypePrinter printer) const {
+     452              :     if (printer) {
+     453              :       // the printer can return nullopt to fall through to the default impl
+     454              :       if (auto renamed = printer(*this)) {
+     455              :         return *renamed;
+     456              :       }
+     457              :     }
+     458              :     return annotation_str_impl(std::move(printer));
+     459              :   }
+     460              :   std::string annotation_str() const {
+     461              :     // Overload instead of define a default value for `printer` to help
+     462              :     // debuggers out.
+     463              :     return annotation_str(nullptr);
+     464              :   }
+     465              : 
+     466              :   // Returns a human readable string that includes additional information like
+     467              :   // "type is inferred rather than explictly defined" to help construct more
+     468              :   // user-friendly messages.
+     469              :   virtual std::string repr_str() const {
+     470              :     return annotation_str();
+     471              :   }
+     472              : 
+     473              :   TypeKind kind() const {
+     474              :     return kind_;
+     475              :   }
+     476              : 
+     477              :   virtual bool isUnionType() const {
+     478              :     return false;
+     479              :   }
+     480              : 
+     481              :   virtual bool requires_grad() const {
+     482              :     for (const auto& ct : containedTypes()) {
+     483              :       if (ct->requires_grad()) {
+     484              :         return true;
+     485              :       }
+     486              :     }
+     487              :     return false;
+     488              :   }
+     489              : 
+     490              :   // Dynamically cast this object to the subclass indicated by the
+     491              :   // template variable, returning nullptr if the cast is invalid.
+     492              :   template <typename T, std::enable_if_t<!detail::IsSingletonType<T>::value, bool> = true>
+     493              :   typename detail::CastReturnType<T>::type cast() {
+     494              :     if (T::Kind == kind()) {
+     495              :       return std::static_pointer_cast<T>(static_cast<T*>(this)->shared_from_this());
+     496              :     }
+     497              :     return nullptr;
+     498              :   }
+     499              :   template <typename T, std::enable_if_t<detail::IsSingletonType<T>::value, bool> = true>
+     500              :   typename detail::CastReturnType<T>::type cast() {
+     501              :     if (T::Kind == kind()) {
+     502              :       TORCH_INTERNAL_ASSERT_DEBUG_ONLY(this == T::get().get());
+     503              :       return typename detail::CastReturnType<T>::type(static_cast<T*>(this));
+     504              :     }
+     505              :     return nullptr;
+     506              :   }
+     507              :   template <typename T, std::enable_if_t<!detail::IsSingletonType<T>::value, bool> = true>
+     508              :   typename detail::CastConstReturnType<T>::type cast() const {
+     509              :     if (T::Kind == kind()) {
+     510              :       return std::static_pointer_cast<const T>(static_cast<const T*>(this)->shared_from_this());
+     511              :     }
+     512              :     return nullptr;
+     513              :   }
+     514              :   template <typename T, std::enable_if_t<detail::IsSingletonType<T>::value, bool> = true>
+     515              :   typename detail::CastConstReturnType<T>::type cast() const {
+     516              :     if (T::Kind == kind()) {
+     517              :       TORCH_INTERNAL_ASSERT_DEBUG_ONLY(this == T::get().get());
+     518              :       return typename detail::CastConstReturnType<T>::type(static_cast<const T*>(this));
+     519              :     }
+     520              :     return nullptr;
+     521              :   }
+     522              :   template <typename T>
+     523              :   T* castRaw() {
+     524              :     if (T::Kind == kind()) {
+     525              :       return static_cast<T*>(this);
+     526              :     }
+     527              :     return nullptr;
+     528              :   }
+     529              :   template <typename T>
+     530              :   const T* castRaw() const {
+     531              :     if (T::Kind == kind()) {
+     532              :       return static_cast<const T*>(this);
+     533              :     }
+     534              :     return nullptr;
+     535              :   }
+     536              :   template <typename T>
+     537              :   auto expect() {
+     538              :     auto r = cast<T>();
+     539              :     AT_ASSERT(r);
+     540              :     return r;
+     541              :   }
+     542              :   template <typename T>
+     543              :   auto expect() const {
+     544              :     auto r = cast<const T>();
+     545              :     AT_ASSERT(r);
+     546              :     return r;
+     547              :   }
+     548              :   template <typename T>
+     549              :   T& expectRef() {
+     550              :     auto* r = castRaw<T>();
+     551              :     AT_ASSERT(r);
+     552              :     return *r;
+     553              :   }
+     554              :   template <typename T>
+     555              :   const T& expectRef() const {
+     556              :     auto* r = castRaw<const T>();
+     557              :     AT_ASSERT(r);
+     558              :     return *r;
+     559              :   }
+     560              :   virtual ~Type() = default;
+     561              :   virtual bool hasFreeVariables() const {
+     562              :     return false;
+     563              :   }
+     564              :   // list of types this type contains, e.g. for a List then element type of a
+     565              :   // list for a tuple, the types of the tuple elements
+     566              :   virtual at::ArrayRef<TypePtr> containedTypes() const {
+     567              :     return {};
+     568              :   }
+     569              :   virtual TypePtr containedType(size_t i) const {
+     570              :     return containedTypes().at(i);
+     571              :   }
+     572              :   virtual size_t containedTypeSize() const {
+     573              :     return containedTypes().size();
+     574              :   }
+     575              :   // create a new version of this type, replacing its contained types with
+     576              :   // contained_types
+     577              :   TypePtr withContained(std::vector<TypePtr> contained_types);
+     578              :   // per-type constructor, you only need to override this if the
+     579              :   // containedTypes() is not empty
+     580              :   virtual TypePtr createWithContained(
+     581              :       std::vector<TypePtr> /*contained_types*/) const {
+     582              :     AT_ERROR(
+     583              :         "type with contained types did not overload createWithContained: ",
+     584              :         str());
+     585              :   }
+     586              : 
+     587              : };
+     588              : 
+     589              : template <typename T>
+     590              : using SingletonOrSharedTypePtr = Type::SingletonOrSharedTypePtr<T>;
+     591              : 
+     592              : 
+     593              : template <typename T, typename U>
+     594              : bool operator==(const SingletonOrSharedTypePtr<T>& x, const SingletonOrSharedTypePtr<U>& y) {
+     595              :   return (void*)x.get() == (void*)y.get();
+     596              : }
+     597              : 
+     598              : template <typename T, typename U>
+     599              : bool operator==(const SingletonOrSharedTypePtr<T>& x, const std::shared_ptr<U>& y) {
+     600              :   return (void*)x.get() == (void*)y.get();
+     601              : }
+     602              : 
+     603              : template <typename T, typename U>
+     604              : bool operator==(const std::shared_ptr<T>& x, const SingletonOrSharedTypePtr<U>& y) {
+     605              :   return (void*)x.get() == (void*)y.get();
+     606              : }
+     607              : 
+     608              : template <typename T, typename U>
+     609              : bool operator==(const SingletonOrSharedTypePtr<T>& x, const SingletonTypePtr<U>& y) {
+     610              :   return (void*)x.get() == (void*)y.get();
+     611              : }
+     612              : 
+     613              : template <typename T, typename U>
+     614              : bool operator==(const SingletonTypePtr<T>& x, const SingletonOrSharedTypePtr<U>& y) {
+     615              :   return (void*)x.get() == (void*)y.get();
+     616              : }
+     617              : 
+     618              : template <typename T, typename U>
+     619              : bool operator!=(const SingletonOrSharedTypePtr<T>& x, const SingletonOrSharedTypePtr<U>& y) {
+     620              :   return !(x == y);
+     621              : }
+     622              : 
+     623              : template <typename T, typename U>
+     624              : bool operator!=(const SingletonOrSharedTypePtr<T>& x, const std::shared_ptr<U>& y) {
+     625              :   return !(x == y);
+     626              : }
+     627              : 
+     628              : template <typename T, typename U>
+     629              : bool operator!=(const std::shared_ptr<T>& x, const SingletonOrSharedTypePtr<U>& y) {
+     630              :   return !(x == y);
+     631              : }
+     632              : 
+     633              : template <typename T, typename U>
+     634              : bool operator!=(const SingletonOrSharedTypePtr<T>& x, const SingletonTypePtr<U>& y) {
+     635              :   return !(x == y);
+     636              : }
+     637              : 
+     638              : template <typename T, typename U>
+     639              : bool operator!=(const SingletonTypePtr<T>& x, const SingletonOrSharedTypePtr<U>& y) {
+     640              :   return !(x == y);
+     641              : }
+     642              : 
+     643              : using TypePtr = SingletonOrSharedTypePtr<Type>;
+     644              : using ConstTypePtr = SingletonOrSharedTypePtr<const Type>;
+     645              : 
+     646              : // Explicitly enable MaybeOwned<shared_ptr<T>>, rather than allowing
+     647              : // MaybeOwned to be used for any type right away.
+     648              : template <typename T>
+     649              : struct MaybeOwnedTraits<SingletonOrSharedTypePtr<T>>
+     650              :     : public MaybeOwnedTraitsGenericImpl<SingletonOrSharedTypePtr<T>> {};
+     651              : 
+     652              : // Base class for Types that are guaranteed to be owned by std::shared_ptr.
+     653              : struct TORCH_API SharedType : public Type, public std::enable_shared_from_this<SharedType> {
+     654              :   using Type::Type;
+     655              : };
+     656              : 
+     657              : inline TypePtr Type::withContained(std::vector<TypePtr> contained_types) {
+     658              :   auto current_contained = containedTypes();
+     659              :   // Types with no contained_types don't need this call. Check before calling!
+     660              :   //
+     661              :   // (We can't support this efficiently because types without
+     662              :   // contained types may be singletons, in which case
+     663              :   // shared_from_this will crash; we would have to provide a virtual
+     664              :   // typeptr_from_this or isSingleton.)
+     665              :   TORCH_INTERNAL_ASSERT(!current_contained.empty() && current_contained.size() == contained_types.size());
+     666              :   if (current_contained.equals(contained_types)) {
+     667              :     return std::static_pointer_cast<Type>(static_cast<SharedType *>(this)->shared_from_this());
+     668              :   }
+     669              :   return createWithContained(std::move(contained_types));
+     670              : }
+     671              : 
+     672              : 
+     673              : TORCH_API inline bool operator==(const Type& lhs, const Type& rhs) {
+     674              :   if (C10_UNLIKELY(!rhs.symmetric())) {
+     675              :     return rhs.equals(lhs);
+     676              :   }
+     677              :   return lhs.equals(rhs);
+     678              : }
+     679              : 
+     680              : struct NamedType;
+     681              : using NamedTypePtr = std::shared_ptr<NamedType>;
+     682              : using ConstNamedTypePtr = std::shared_ptr<const NamedType>;
+     683              : 
+     684              : struct TORCH_API NamedType : public SharedType {
+     685              :   NamedType(TypeKind tk, c10::optional<QualifiedName> name)
+     686              :       : SharedType(tk), name_(std::move(name)) {
+     687              :     TORCH_INTERNAL_ASSERT(
+     688              :         tk == TypeKind::TupleType || tk == TypeKind::FunctionType ||
+     689              :             tk == TypeKind::ClassType || tk == TypeKind::InterfaceType ||
+     690              :             tk == TypeKind::EnumType,
+     691              :         "If you add a new kind of NamedType, ",
+     692              :         "please update the cast<NamedType> specialization and this assert");
+     693              :   }
+     694              : 
+     695              :   // Fully qualified name of type
+     696              :   // Looks like: "foo.bar.Baz".
+     697              :   const c10::optional<QualifiedName>& name() const {
+     698              :     return name_;
+     699              :   }
+     700              : 
+     701              :  private:
+     702              :   c10::optional<QualifiedName> name_;
+     703              : };
+     704              : 
+     705              : } // namespace c10
+     706              : 
+     707              : namespace std {
+     708              : template <typename T>
+     709              : struct hash<c10::SingletonOrSharedTypePtr<T>> {
+     710              :   size_t operator()(const c10::SingletonOrSharedTypePtr<T>& x) const {
+     711              :     return std::hash<T*>()(x.get());
+     712              :   }
+     713              : };
+     714              : } // namespace std
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/index-sort-f.html b/html/libtorch/include/ATen/index-sort-f.html new file mode 100644 index 0000000..bdc905e --- /dev/null +++ b/html/libtorch/include/ATen/index-sort-f.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATenCoverageTotalHit
Test:coverage.infoLines:96.4 %2827
Test Date:2024-04-30 13:17:26Functions:100.0 %1616
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
Functions.h +
100.0%
+
100.0 %22100.0 %11
TensorIndexing.h +
96.0%96.0%
+
96.0 %2524100.0 %77
TensorOperators.h +
100.0%
+
100.0 %11100.0 %88
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/index-sort-l.html b/html/libtorch/include/ATen/index-sort-l.html new file mode 100644 index 0000000..17f14f7 --- /dev/null +++ b/html/libtorch/include/ATen/index-sort-l.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATenCoverageTotalHit
Test:coverage.infoLines:96.4 %2827
Test Date:2024-04-30 13:17:26Functions:100.0 %1616
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
TensorIndexing.h +
96.0%96.0%
+
96.0 %2524100.0 %77
TensorOperators.h +
100.0%
+
100.0 %11100.0 %88
Functions.h +
100.0%
+
100.0 %22100.0 %11
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/index.html b/html/libtorch/include/ATen/index.html new file mode 100644 index 0000000..0a6bf5d --- /dev/null +++ b/html/libtorch/include/ATen/index.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATenCoverageTotalHit
Test:coverage.infoLines:96.4 %2827
Test Date:2024-04-30 13:17:26Functions:100.0 %1616
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
Functions.h +
100.0%
+
100.0 %22100.0 %11
TensorIndexing.h +
96.0%96.0%
+
96.0 %2524100.0 %77
TensorOperators.h +
100.0%
+
100.0 %11100.0 %88
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/argmax.h.func-c.html b/html/libtorch/include/ATen/ops/argmax.h.func-c.html new file mode 100644 index 0000000..a867db3 --- /dev/null +++ b/html/libtorch/include/ATen/ops/argmax.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/argmax.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - argmax.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at6argmaxERKNS_6TensorEN3c108optionalIlEEb542
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/argmax.h.func.html b/html/libtorch/include/ATen/ops/argmax.h.func.html new file mode 100644 index 0000000..4c1fdc0 --- /dev/null +++ b/html/libtorch/include/ATen/ops/argmax.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/argmax.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - argmax.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at6argmaxERKNS_6TensorEN3c108optionalIlEEb542
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/argmax.h.gcov.html b/html/libtorch/include/ATen/ops/argmax.h.gcov.html new file mode 100644 index 0000000..d501a88 --- /dev/null +++ b/html/libtorch/include/ATen/ops/argmax.h.gcov.html @@ -0,0 +1,115 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/argmax.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - argmax.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : // @generated by torchgen/gen.py from Function.h
+       4              : 
+       5              : #include <ATen/Context.h>
+       6              : #include <ATen/DeviceGuard.h>
+       7              : #include <ATen/TensorUtils.h>
+       8              : #include <ATen/TracerMode.h>
+       9              : #include <ATen/core/Generator.h>
+      10              : #include <ATen/core/Reduction.h>
+      11              : #include <ATen/core/Tensor.h>
+      12              : #include <c10/core/Scalar.h>
+      13              : #include <c10/core/Storage.h>
+      14              : #include <c10/core/TensorOptions.h>
+      15              : #include <c10/util/Deprecated.h>
+      16              : #include <c10/util/Optional.h>
+      17              : 
+      18              : 
+      19              : 
+      20              : #include <ATen/ops/argmax_ops.h>
+      21              : 
+      22              : namespace at {
+      23              : 
+      24              : 
+      25              : // aten::argmax(Tensor self, int? dim=None, bool keepdim=False) -> Tensor
+      26          542 : inline at::Tensor argmax(const at::Tensor & self, c10::optional<int64_t> dim=c10::nullopt, bool keepdim=false) {
+      27          542 :     return at::_ops::argmax::call(self, dim, keepdim);
+      28              : }
+      29              : 
+      30              : // aten::argmax.out(Tensor self, int? dim=None, bool keepdim=False, *, Tensor(a!) out) -> Tensor(a!)
+      31              : inline at::Tensor & argmax_out(at::Tensor & out, const at::Tensor & self, c10::optional<int64_t> dim=c10::nullopt, bool keepdim=false) {
+      32              :     return at::_ops::argmax_out::call(self, dim, keepdim, out);
+      33              : }
+      34              : // aten::argmax.out(Tensor self, int? dim=None, bool keepdim=False, *, Tensor(a!) out) -> Tensor(a!)
+      35              : inline at::Tensor & argmax_outf(const at::Tensor & self, c10::optional<int64_t> dim, bool keepdim, at::Tensor & out) {
+      36              :     return at::_ops::argmax_out::call(self, dim, keepdim, out);
+      37              : }
+      38              : 
+      39              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/cat.h.func-c.html b/html/libtorch/include/ATen/ops/cat.h.func-c.html new file mode 100644 index 0000000..46a0a07 --- /dev/null +++ b/html/libtorch/include/ATen/ops/cat.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/cat.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - cat.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at3catERKN3c108IListRefINS_6TensorEEEl378
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/cat.h.func.html b/html/libtorch/include/ATen/ops/cat.h.func.html new file mode 100644 index 0000000..969ef78 --- /dev/null +++ b/html/libtorch/include/ATen/ops/cat.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/cat.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - cat.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at3catERKN3c108IListRefINS_6TensorEEEl378
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/cat.h.gcov.html b/html/libtorch/include/ATen/ops/cat.h.gcov.html new file mode 100644 index 0000000..160920a --- /dev/null +++ b/html/libtorch/include/ATen/ops/cat.h.gcov.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/cat.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - cat.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : // @generated by torchgen/gen.py from Function.h
+       4              : 
+       5              : #include <ATen/Context.h>
+       6              : #include <ATen/DeviceGuard.h>
+       7              : #include <ATen/TensorUtils.h>
+       8              : #include <ATen/TracerMode.h>
+       9              : #include <ATen/core/Generator.h>
+      10              : #include <ATen/core/Reduction.h>
+      11              : #include <ATen/core/Tensor.h>
+      12              : #include <c10/core/Scalar.h>
+      13              : #include <c10/core/Storage.h>
+      14              : #include <c10/core/TensorOptions.h>
+      15              : #include <c10/util/Deprecated.h>
+      16              : #include <c10/util/Optional.h>
+      17              : 
+      18              : 
+      19              : 
+      20              : #include <ATen/ops/cat_ops.h>
+      21              : 
+      22              : namespace at {
+      23              : 
+      24              : 
+      25              : // aten::cat(Tensor[] tensors, int dim=0) -> Tensor
+      26          378 : inline at::Tensor cat(const at::ITensorListRef & tensors, int64_t dim=0) {
+      27          378 :     return at::_ops::cat::call(tensors, dim);
+      28              : }
+      29              : 
+      30              : // aten::cat.out(Tensor[] tensors, int dim=0, *, Tensor(a!) out) -> Tensor(a!)
+      31              : inline at::Tensor & cat_out(at::Tensor & out, const at::ITensorListRef & tensors, int64_t dim=0) {
+      32              :     return at::_ops::cat_out::call(tensors, dim, out);
+      33              : }
+      34              : // aten::cat.out(Tensor[] tensors, int dim=0, *, Tensor(a!) out) -> Tensor(a!)
+      35              : inline at::Tensor & cat_outf(const at::ITensorListRef & tensors, int64_t dim, at::Tensor & out) {
+      36              :     return at::_ops::cat_out::call(tensors, dim, out);
+      37              : }
+      38              : 
+      39              : // aten::cat.names(Tensor[] tensors, Dimname dim) -> Tensor
+      40              : inline at::Tensor cat(at::TensorList tensors, at::Dimname dim) {
+      41              :     return at::_ops::cat_names::call(tensors, dim);
+      42              : }
+      43              : 
+      44              : // aten::cat.names_out(Tensor[] tensors, Dimname dim, *, Tensor(a!) out) -> Tensor(a!)
+      45              : inline at::Tensor & cat_out(at::Tensor & out, at::TensorList tensors, at::Dimname dim) {
+      46              :     return at::_ops::cat_names_out::call(tensors, dim, out);
+      47              : }
+      48              : // aten::cat.names_out(Tensor[] tensors, Dimname dim, *, Tensor(a!) out) -> Tensor(a!)
+      49              : inline at::Tensor & cat_outf(at::TensorList tensors, at::Dimname dim, at::Tensor & out) {
+      50              :     return at::_ops::cat_names_out::call(tensors, dim, out);
+      51              : }
+      52              : 
+      53              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/clone.h.func-c.html b/html/libtorch/include/ATen/ops/clone.h.func-c.html new file mode 100644 index 0000000..1915001 --- /dev/null +++ b/html/libtorch/include/ATen/ops/clone.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/clone.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - clone.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at5cloneERKNS_6TensorEN3c108optionalINS3_12MemoryFormatEEE172
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/clone.h.func.html b/html/libtorch/include/ATen/ops/clone.h.func.html new file mode 100644 index 0000000..5a61794 --- /dev/null +++ b/html/libtorch/include/ATen/ops/clone.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/clone.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - clone.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at5cloneERKNS_6TensorEN3c108optionalINS3_12MemoryFormatEEE172
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/clone.h.gcov.html b/html/libtorch/include/ATen/ops/clone.h.gcov.html new file mode 100644 index 0000000..f92c2c5 --- /dev/null +++ b/html/libtorch/include/ATen/ops/clone.h.gcov.html @@ -0,0 +1,115 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/clone.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - clone.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : // @generated by torchgen/gen.py from Function.h
+       4              : 
+       5              : #include <ATen/Context.h>
+       6              : #include <ATen/DeviceGuard.h>
+       7              : #include <ATen/TensorUtils.h>
+       8              : #include <ATen/TracerMode.h>
+       9              : #include <ATen/core/Generator.h>
+      10              : #include <ATen/core/Reduction.h>
+      11              : #include <ATen/core/Tensor.h>
+      12              : #include <c10/core/Scalar.h>
+      13              : #include <c10/core/Storage.h>
+      14              : #include <c10/core/TensorOptions.h>
+      15              : #include <c10/util/Deprecated.h>
+      16              : #include <c10/util/Optional.h>
+      17              : 
+      18              : 
+      19              : 
+      20              : #include <ATen/ops/clone_ops.h>
+      21              : 
+      22              : namespace at {
+      23              : 
+      24              : 
+      25              : // aten::clone(Tensor self, *, MemoryFormat? memory_format=None) -> Tensor
+      26          172 : inline at::Tensor clone(const at::Tensor & self, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) {
+      27          172 :     return at::_ops::clone::call(self, memory_format);
+      28              : }
+      29              : 
+      30              : // aten::clone.out(Tensor self, *, MemoryFormat? memory_format=None, Tensor(a!) out) -> Tensor(a!)
+      31              : inline at::Tensor & clone_out(at::Tensor & out, const at::Tensor & self, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) {
+      32              :     return at::_ops::clone_out::call(self, memory_format, out);
+      33              : }
+      34              : // aten::clone.out(Tensor self, *, MemoryFormat? memory_format=None, Tensor(a!) out) -> Tensor(a!)
+      35              : inline at::Tensor & clone_outf(const at::Tensor & self, c10::optional<at::MemoryFormat> memory_format, at::Tensor & out) {
+      36              :     return at::_ops::clone_out::call(self, memory_format, out);
+      37              : }
+      38              : 
+      39              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/empty.h.func-c.html b/html/libtorch/include/ATen/ops/empty.h.func-c.html new file mode 100644 index 0000000..f76759e --- /dev/null +++ b/html/libtorch/include/ATen/ops/empty.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/empty.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - empty.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %20
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at5emptyEN3c108ArrayRefIlEENS0_13TensorOptionsENS0_8optionalINS0_12MemoryFormatEEE0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/empty.h.func.html b/html/libtorch/include/ATen/ops/empty.h.func.html new file mode 100644 index 0000000..d0bae87 --- /dev/null +++ b/html/libtorch/include/ATen/ops/empty.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/empty.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - empty.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %20
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at5emptyEN3c108ArrayRefIlEENS0_13TensorOptionsENS0_8optionalINS0_12MemoryFormatEEE0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/empty.h.gcov.html b/html/libtorch/include/ATen/ops/empty.h.gcov.html new file mode 100644 index 0000000..fde329c --- /dev/null +++ b/html/libtorch/include/ATen/ops/empty.h.gcov.html @@ -0,0 +1,207 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/empty.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - empty.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %20
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : // @generated by torchgen/gen.py from Function.h
+       4              : 
+       5              : #include <ATen/Context.h>
+       6              : #include <ATen/DeviceGuard.h>
+       7              : #include <ATen/TensorUtils.h>
+       8              : #include <ATen/TracerMode.h>
+       9              : #include <ATen/core/Generator.h>
+      10              : #include <ATen/core/Reduction.h>
+      11              : #include <ATen/core/Tensor.h>
+      12              : #include <c10/core/Scalar.h>
+      13              : #include <c10/core/Storage.h>
+      14              : #include <c10/core/TensorOptions.h>
+      15              : #include <c10/util/Deprecated.h>
+      16              : #include <c10/util/Optional.h>
+      17              : 
+      18              : 
+      19              : 
+      20              : #include <ATen/ops/empty_ops.h>
+      21              : 
+      22              : namespace at {
+      23              : 
+      24              : 
+      25              : // aten::empty.names(int[] size, *, Dimname[]? names, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None, MemoryFormat? memory_format=None) -> Tensor
+      26              : inline at::Tensor empty(at::IntArrayRef size, c10::optional<at::DimnameList> names, at::TensorOptions options={}, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) {
+      27              :     return at::_ops::empty_names::call(size, names, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt(), c10::impl::check_tensor_options_and_extract_memory_format(options, memory_format));
+      28              : }
+      29              : // aten::empty.names(int[] size, *, Dimname[]? names, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None, MemoryFormat? memory_format=None) -> Tensor
+      30              : inline at::Tensor empty(at::IntArrayRef size, c10::optional<at::DimnameList> names, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory, c10::optional<at::MemoryFormat> memory_format) {
+      31              :     return at::_ops::empty_names::call(size, names, dtype, layout, device, pin_memory, memory_format);
+      32              : }
+      33              : 
+      34              : // aten::empty.memory_format(SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None, MemoryFormat? memory_format=None) -> Tensor
+      35            0 : inline at::Tensor empty(at::IntArrayRef size, at::TensorOptions options={}, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) {
+      36            0 :     return at::_ops::empty_memory_format::call(c10::fromIntArrayRefSlow(size), optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt(), c10::impl::check_tensor_options_and_extract_memory_format(options, memory_format));
+      37              : }
+      38              : namespace symint {
+      39              :   template <typename T, typename = std::enable_if_t<std::is_same<T, int64_t>::value>>
+      40              :   at::Tensor empty(at::IntArrayRef size, at::TensorOptions options={}, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) {
+      41              :     return at::_ops::empty_memory_format::call(c10::fromIntArrayRefSlow(size), optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt(), c10::impl::check_tensor_options_and_extract_memory_format(options, memory_format));
+      42              :   }
+      43              : }
+      44              : 
+      45              : // aten::empty.memory_format(SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None, MemoryFormat? memory_format=None) -> Tensor
+      46              : inline at::Tensor empty(at::IntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory, c10::optional<at::MemoryFormat> memory_format) {
+      47              :     return at::_ops::empty_memory_format::call(c10::fromIntArrayRefSlow(size), dtype, layout, device, pin_memory, memory_format);
+      48              : }
+      49              : namespace symint {
+      50              :   template <typename T, typename = std::enable_if_t<std::is_same<T, int64_t>::value>>
+      51              :   at::Tensor empty(at::IntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory, c10::optional<at::MemoryFormat> memory_format) {
+      52              :     return at::_ops::empty_memory_format::call(c10::fromIntArrayRefSlow(size), dtype, layout, device, pin_memory, memory_format);
+      53              :   }
+      54              : }
+      55              : 
+      56              : // aten::empty.memory_format(SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None, MemoryFormat? memory_format=None) -> Tensor
+      57              : inline at::Tensor empty_symint(c10::SymIntArrayRef size, at::TensorOptions options={}, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) {
+      58              :     return at::_ops::empty_memory_format::call(size, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt(), c10::impl::check_tensor_options_and_extract_memory_format(options, memory_format));
+      59              : }
+      60              : namespace symint {
+      61              :   template <typename T, typename = std::enable_if_t<std::is_same<T, c10::SymInt>::value>>
+      62              :   at::Tensor empty(c10::SymIntArrayRef size, at::TensorOptions options={}, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) {
+      63              :     return at::_ops::empty_memory_format::call(size, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt(), c10::impl::check_tensor_options_and_extract_memory_format(options, memory_format));
+      64              :   }
+      65              : }
+      66              : 
+      67              : // aten::empty.memory_format(SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None, MemoryFormat? memory_format=None) -> Tensor
+      68              : inline at::Tensor empty_symint(c10::SymIntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory, c10::optional<at::MemoryFormat> memory_format) {
+      69              :     return at::_ops::empty_memory_format::call(size, dtype, layout, device, pin_memory, memory_format);
+      70              : }
+      71              : namespace symint {
+      72              :   template <typename T, typename = std::enable_if_t<std::is_same<T, c10::SymInt>::value>>
+      73              :   at::Tensor empty(c10::SymIntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory, c10::optional<at::MemoryFormat> memory_format) {
+      74              :     return at::_ops::empty_memory_format::call(size, dtype, layout, device, pin_memory, memory_format);
+      75              :   }
+      76              : }
+      77              : 
+      78              : // aten::empty.out(SymInt[] size, *, MemoryFormat? memory_format=None, Tensor(a!) out) -> Tensor(a!)
+      79              : inline at::Tensor & empty_out(at::Tensor & out, at::IntArrayRef size, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) {
+      80              :     return at::_ops::empty_out::call(c10::fromIntArrayRefSlow(size), memory_format, out);
+      81              : }
+      82              : namespace symint {
+      83              :   template <typename T, typename = std::enable_if_t<std::is_same<T, int64_t>::value>>
+      84              :   at::Tensor & empty_out(at::Tensor & out, at::IntArrayRef size, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) {
+      85              :     return at::_ops::empty_out::call(c10::fromIntArrayRefSlow(size), memory_format, out);
+      86              :   }
+      87              : }
+      88              : 
+      89              : // aten::empty.out(SymInt[] size, *, MemoryFormat? memory_format=None, Tensor(a!) out) -> Tensor(a!)
+      90              : inline at::Tensor & empty_outf(at::IntArrayRef size, c10::optional<at::MemoryFormat> memory_format, at::Tensor & out) {
+      91              :     return at::_ops::empty_out::call(c10::fromIntArrayRefSlow(size), memory_format, out);
+      92              : }
+      93              : namespace symint {
+      94              :   template <typename T, typename = std::enable_if_t<std::is_same<T, int64_t>::value>>
+      95              :   at::Tensor & empty_outf(at::IntArrayRef size, c10::optional<at::MemoryFormat> memory_format, at::Tensor & out) {
+      96              :     return at::_ops::empty_out::call(c10::fromIntArrayRefSlow(size), memory_format, out);
+      97              :   }
+      98              : }
+      99              : 
+     100              : // aten::empty.out(SymInt[] size, *, MemoryFormat? memory_format=None, Tensor(a!) out) -> Tensor(a!)
+     101              : inline at::Tensor & empty_symint_out(at::Tensor & out, c10::SymIntArrayRef size, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) {
+     102              :     return at::_ops::empty_out::call(size, memory_format, out);
+     103              : }
+     104              : namespace symint {
+     105              :   template <typename T, typename = std::enable_if_t<std::is_same<T, c10::SymInt>::value>>
+     106              :   at::Tensor & empty_out(at::Tensor & out, c10::SymIntArrayRef size, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) {
+     107              :     return at::_ops::empty_out::call(size, memory_format, out);
+     108              :   }
+     109              : }
+     110              : 
+     111              : // aten::empty.out(SymInt[] size, *, MemoryFormat? memory_format=None, Tensor(a!) out) -> Tensor(a!)
+     112              : inline at::Tensor & empty_symint_outf(c10::SymIntArrayRef size, c10::optional<at::MemoryFormat> memory_format, at::Tensor & out) {
+     113              :     return at::_ops::empty_out::call(size, memory_format, out);
+     114              : }
+     115              : namespace symint {
+     116              :   template <typename T, typename = std::enable_if_t<std::is_same<T, c10::SymInt>::value>>
+     117              :   at::Tensor & empty_outf(c10::SymIntArrayRef size, c10::optional<at::MemoryFormat> memory_format, at::Tensor & out) {
+     118              :     return at::_ops::empty_out::call(size, memory_format, out);
+     119              :   }
+     120              : }
+     121              : 
+     122              : // aten::empty.names_out(int[] size, *, Dimname[]? names, MemoryFormat? memory_format=None, Tensor(a!) out) -> Tensor(a!)
+     123              : inline at::Tensor & empty_out(at::Tensor & out, at::IntArrayRef size, c10::optional<at::DimnameList> names, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) {
+     124              :     return at::_ops::empty_names_out::call(size, names, memory_format, out);
+     125              : }
+     126              : // aten::empty.names_out(int[] size, *, Dimname[]? names, MemoryFormat? memory_format=None, Tensor(a!) out) -> Tensor(a!)
+     127              : inline at::Tensor & empty_outf(at::IntArrayRef size, c10::optional<at::DimnameList> names, c10::optional<at::MemoryFormat> memory_format, at::Tensor & out) {
+     128              :     return at::_ops::empty_names_out::call(size, names, memory_format, out);
+     129              : }
+     130              : 
+     131              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/full.h.func-c.html b/html/libtorch/include/ATen/ops/full.h.func-c.html new file mode 100644 index 0000000..0c862da --- /dev/null +++ b/html/libtorch/include/ATen/ops/full.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/full.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - full.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at4fullEN3c108ArrayRefIlEERKNS0_6ScalarENS0_13TensorOptionsE694
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/full.h.func.html b/html/libtorch/include/ATen/ops/full.h.func.html new file mode 100644 index 0000000..a9c81d2 --- /dev/null +++ b/html/libtorch/include/ATen/ops/full.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/full.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - full.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at4fullEN3c108ArrayRefIlEERKNS0_6ScalarENS0_13TensorOptionsE694
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/full.h.gcov.html b/html/libtorch/include/ATen/ops/full.h.gcov.html new file mode 100644 index 0000000..b1e9d14 --- /dev/null +++ b/html/libtorch/include/ATen/ops/full.h.gcov.html @@ -0,0 +1,207 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/full.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - full.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : // @generated by torchgen/gen.py from Function.h
+       4              : 
+       5              : #include <ATen/Context.h>
+       6              : #include <ATen/DeviceGuard.h>
+       7              : #include <ATen/TensorUtils.h>
+       8              : #include <ATen/TracerMode.h>
+       9              : #include <ATen/core/Generator.h>
+      10              : #include <ATen/core/Reduction.h>
+      11              : #include <ATen/core/Tensor.h>
+      12              : #include <c10/core/Scalar.h>
+      13              : #include <c10/core/Storage.h>
+      14              : #include <c10/core/TensorOptions.h>
+      15              : #include <c10/util/Deprecated.h>
+      16              : #include <c10/util/Optional.h>
+      17              : 
+      18              : 
+      19              : 
+      20              : #include <ATen/ops/full_ops.h>
+      21              : 
+      22              : namespace at {
+      23              : 
+      24              : 
+      25              : // aten::full.names(int[] size, Scalar fill_value, *, Dimname[]? names, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+      26              : inline at::Tensor full(at::IntArrayRef size, const at::Scalar & fill_value, c10::optional<at::DimnameList> names, at::TensorOptions options={}) {
+      27              :     return at::_ops::full_names::call(size, fill_value, names, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+      28              : }
+      29              : // aten::full.names(int[] size, Scalar fill_value, *, Dimname[]? names, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+      30              : inline at::Tensor full(at::IntArrayRef size, const at::Scalar & fill_value, c10::optional<at::DimnameList> names, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) {
+      31              :     return at::_ops::full_names::call(size, fill_value, names, dtype, layout, device, pin_memory);
+      32              : }
+      33              : 
+      34              : // aten::full(SymInt[] size, Scalar fill_value, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+      35          694 : inline at::Tensor full(at::IntArrayRef size, const at::Scalar & fill_value, at::TensorOptions options={}) {
+      36          694 :     return at::_ops::full::call(c10::fromIntArrayRefSlow(size), fill_value, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+      37              : }
+      38              : namespace symint {
+      39              :   template <typename T, typename = std::enable_if_t<std::is_same<T, int64_t>::value>>
+      40              :   at::Tensor full(at::IntArrayRef size, const at::Scalar & fill_value, at::TensorOptions options={}) {
+      41              :     return at::_ops::full::call(c10::fromIntArrayRefSlow(size), fill_value, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+      42              :   }
+      43              : }
+      44              : 
+      45              : // aten::full(SymInt[] size, Scalar fill_value, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+      46              : inline at::Tensor full(at::IntArrayRef size, const at::Scalar & fill_value, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) {
+      47              :     return at::_ops::full::call(c10::fromIntArrayRefSlow(size), fill_value, dtype, layout, device, pin_memory);
+      48              : }
+      49              : namespace symint {
+      50              :   template <typename T, typename = std::enable_if_t<std::is_same<T, int64_t>::value>>
+      51              :   at::Tensor full(at::IntArrayRef size, const at::Scalar & fill_value, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) {
+      52              :     return at::_ops::full::call(c10::fromIntArrayRefSlow(size), fill_value, dtype, layout, device, pin_memory);
+      53              :   }
+      54              : }
+      55              : 
+      56              : // aten::full(SymInt[] size, Scalar fill_value, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+      57              : inline at::Tensor full_symint(c10::SymIntArrayRef size, const at::Scalar & fill_value, at::TensorOptions options={}) {
+      58              :     return at::_ops::full::call(size, fill_value, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+      59              : }
+      60              : namespace symint {
+      61              :   template <typename T, typename = std::enable_if_t<std::is_same<T, c10::SymInt>::value>>
+      62              :   at::Tensor full(c10::SymIntArrayRef size, const at::Scalar & fill_value, at::TensorOptions options={}) {
+      63              :     return at::_ops::full::call(size, fill_value, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+      64              :   }
+      65              : }
+      66              : 
+      67              : // aten::full(SymInt[] size, Scalar fill_value, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+      68              : inline at::Tensor full_symint(c10::SymIntArrayRef size, const at::Scalar & fill_value, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) {
+      69              :     return at::_ops::full::call(size, fill_value, dtype, layout, device, pin_memory);
+      70              : }
+      71              : namespace symint {
+      72              :   template <typename T, typename = std::enable_if_t<std::is_same<T, c10::SymInt>::value>>
+      73              :   at::Tensor full(c10::SymIntArrayRef size, const at::Scalar & fill_value, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) {
+      74              :     return at::_ops::full::call(size, fill_value, dtype, layout, device, pin_memory);
+      75              :   }
+      76              : }
+      77              : 
+      78              : // aten::full.out(SymInt[] size, Scalar fill_value, *, Tensor(a!) out) -> Tensor(a!)
+      79              : inline at::Tensor & full_out(at::Tensor & out, at::IntArrayRef size, const at::Scalar & fill_value) {
+      80              :     return at::_ops::full_out::call(c10::fromIntArrayRefSlow(size), fill_value, out);
+      81              : }
+      82              : namespace symint {
+      83              :   template <typename T, typename = std::enable_if_t<std::is_same<T, int64_t>::value>>
+      84              :   at::Tensor & full_out(at::Tensor & out, at::IntArrayRef size, const at::Scalar & fill_value) {
+      85              :     return at::_ops::full_out::call(c10::fromIntArrayRefSlow(size), fill_value, out);
+      86              :   }
+      87              : }
+      88              : 
+      89              : // aten::full.out(SymInt[] size, Scalar fill_value, *, Tensor(a!) out) -> Tensor(a!)
+      90              : inline at::Tensor & full_outf(at::IntArrayRef size, const at::Scalar & fill_value, at::Tensor & out) {
+      91              :     return at::_ops::full_out::call(c10::fromIntArrayRefSlow(size), fill_value, out);
+      92              : }
+      93              : namespace symint {
+      94              :   template <typename T, typename = std::enable_if_t<std::is_same<T, int64_t>::value>>
+      95              :   at::Tensor & full_outf(at::IntArrayRef size, const at::Scalar & fill_value, at::Tensor & out) {
+      96              :     return at::_ops::full_out::call(c10::fromIntArrayRefSlow(size), fill_value, out);
+      97              :   }
+      98              : }
+      99              : 
+     100              : // aten::full.out(SymInt[] size, Scalar fill_value, *, Tensor(a!) out) -> Tensor(a!)
+     101              : inline at::Tensor & full_symint_out(at::Tensor & out, c10::SymIntArrayRef size, const at::Scalar & fill_value) {
+     102              :     return at::_ops::full_out::call(size, fill_value, out);
+     103              : }
+     104              : namespace symint {
+     105              :   template <typename T, typename = std::enable_if_t<std::is_same<T, c10::SymInt>::value>>
+     106              :   at::Tensor & full_out(at::Tensor & out, c10::SymIntArrayRef size, const at::Scalar & fill_value) {
+     107              :     return at::_ops::full_out::call(size, fill_value, out);
+     108              :   }
+     109              : }
+     110              : 
+     111              : // aten::full.out(SymInt[] size, Scalar fill_value, *, Tensor(a!) out) -> Tensor(a!)
+     112              : inline at::Tensor & full_symint_outf(c10::SymIntArrayRef size, const at::Scalar & fill_value, at::Tensor & out) {
+     113              :     return at::_ops::full_out::call(size, fill_value, out);
+     114              : }
+     115              : namespace symint {
+     116              :   template <typename T, typename = std::enable_if_t<std::is_same<T, c10::SymInt>::value>>
+     117              :   at::Tensor & full_outf(c10::SymIntArrayRef size, const at::Scalar & fill_value, at::Tensor & out) {
+     118              :     return at::_ops::full_out::call(size, fill_value, out);
+     119              :   }
+     120              : }
+     121              : 
+     122              : // aten::full.names_out(int[] size, Scalar fill_value, *, Dimname[]? names, Tensor(a!) out) -> Tensor(a!)
+     123              : inline at::Tensor & full_out(at::Tensor & out, at::IntArrayRef size, const at::Scalar & fill_value, c10::optional<at::DimnameList> names) {
+     124              :     return at::_ops::full_names_out::call(size, fill_value, names, out);
+     125              : }
+     126              : // aten::full.names_out(int[] size, Scalar fill_value, *, Dimname[]? names, Tensor(a!) out) -> Tensor(a!)
+     127              : inline at::Tensor & full_outf(at::IntArrayRef size, const at::Scalar & fill_value, c10::optional<at::DimnameList> names, at::Tensor & out) {
+     128              :     return at::_ops::full_names_out::call(size, fill_value, names, out);
+     129              : }
+     130              : 
+     131              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/index-sort-f.html b/html/libtorch/include/ATen/ops/index-sort-f.html new file mode 100644 index 0000000..68ad321 --- /dev/null +++ b/html/libtorch/include/ATen/ops/index-sort-f.html @@ -0,0 +1,261 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/opsCoverageTotalHit
Test:coverage.infoLines:85.2 %2723
Test Date:2024-04-30 13:17:26Functions:86.7 %1513
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
empty.h +
0.0%
+
0.0 %20.0 %1
scalar_tensor.h +
0.0%
+
0.0 %20.0 %1
argmax.h +
100.0%
+
100.0 %22100.0 %11
cat.h +
100.0%
+
100.0 %22100.0 %11
clone.h +
100.0%
+
100.0 %22100.0 %11
full.h +
100.0%
+
100.0 %22100.0 %11
log.h +
100.0%
+
100.0 %22100.0 %11
max.h +
100.0%
+
100.0 %22100.0 %11
sum.h +
100.0%
+
100.0 %22100.0 %11
transpose.h +
100.0%
+
100.0 %22100.0 %11
triu_indices.h +
100.0%
+
100.0 %22100.0 %11
zeros.h +
100.0%
+
100.0 %22100.0 %11
zeros_like.h +
100.0%
+
100.0 %22100.0 %11
tensor.h +
100.0%
+
100.0 %11100.0 %22
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/index-sort-l.html b/html/libtorch/include/ATen/ops/index-sort-l.html new file mode 100644 index 0000000..c52f174 --- /dev/null +++ b/html/libtorch/include/ATen/ops/index-sort-l.html @@ -0,0 +1,261 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/opsCoverageTotalHit
Test:coverage.infoLines:85.2 %2723
Test Date:2024-04-30 13:17:26Functions:86.7 %1513
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
empty.h +
0.0%
+
0.0 %20.0 %1
scalar_tensor.h +
0.0%
+
0.0 %20.0 %1
tensor.h +
100.0%
+
100.0 %11100.0 %22
argmax.h +
100.0%
+
100.0 %22100.0 %11
cat.h +
100.0%
+
100.0 %22100.0 %11
clone.h +
100.0%
+
100.0 %22100.0 %11
full.h +
100.0%
+
100.0 %22100.0 %11
log.h +
100.0%
+
100.0 %22100.0 %11
max.h +
100.0%
+
100.0 %22100.0 %11
sum.h +
100.0%
+
100.0 %22100.0 %11
transpose.h +
100.0%
+
100.0 %22100.0 %11
triu_indices.h +
100.0%
+
100.0 %22100.0 %11
zeros.h +
100.0%
+
100.0 %22100.0 %11
zeros_like.h +
100.0%
+
100.0 %22100.0 %11
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/index.html b/html/libtorch/include/ATen/ops/index.html new file mode 100644 index 0000000..5bf8fe5 --- /dev/null +++ b/html/libtorch/include/ATen/ops/index.html @@ -0,0 +1,261 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/opsCoverageTotalHit
Test:coverage.infoLines:85.2 %2723
Test Date:2024-04-30 13:17:26Functions:86.7 %1513
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
argmax.h +
100.0%
+
100.0 %22100.0 %11
cat.h +
100.0%
+
100.0 %22100.0 %11
clone.h +
100.0%
+
100.0 %22100.0 %11
empty.h +
0.0%
+
0.0 %20.0 %1
full.h +
100.0%
+
100.0 %22100.0 %11
log.h +
100.0%
+
100.0 %22100.0 %11
max.h +
100.0%
+
100.0 %22100.0 %11
scalar_tensor.h +
0.0%
+
0.0 %20.0 %1
sum.h +
100.0%
+
100.0 %22100.0 %11
tensor.h +
100.0%
+
100.0 %11100.0 %22
transpose.h +
100.0%
+
100.0 %22100.0 %11
triu_indices.h +
100.0%
+
100.0 %22100.0 %11
zeros.h +
100.0%
+
100.0 %22100.0 %11
zeros_like.h +
100.0%
+
100.0 %22100.0 %11
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/log.h.func-c.html b/html/libtorch/include/ATen/ops/log.h.func-c.html new file mode 100644 index 0000000..c1c59ae --- /dev/null +++ b/html/libtorch/include/ATen/ops/log.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/log.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - log.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at3logERKNS_6TensorE16480
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/log.h.func.html b/html/libtorch/include/ATen/ops/log.h.func.html new file mode 100644 index 0000000..589cf5b --- /dev/null +++ b/html/libtorch/include/ATen/ops/log.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/log.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - log.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at3logERKNS_6TensorE16480
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/log.h.gcov.html b/html/libtorch/include/ATen/ops/log.h.gcov.html new file mode 100644 index 0000000..b78fcd0 --- /dev/null +++ b/html/libtorch/include/ATen/ops/log.h.gcov.html @@ -0,0 +1,120 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/log.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - log.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : // @generated by torchgen/gen.py from Function.h
+       4              : 
+       5              : #include <ATen/Context.h>
+       6              : #include <ATen/DeviceGuard.h>
+       7              : #include <ATen/TensorUtils.h>
+       8              : #include <ATen/TracerMode.h>
+       9              : #include <ATen/core/Generator.h>
+      10              : #include <ATen/core/Reduction.h>
+      11              : #include <ATen/core/Tensor.h>
+      12              : #include <c10/core/Scalar.h>
+      13              : #include <c10/core/Storage.h>
+      14              : #include <c10/core/TensorOptions.h>
+      15              : #include <c10/util/Deprecated.h>
+      16              : #include <c10/util/Optional.h>
+      17              : 
+      18              : 
+      19              : 
+      20              : #include <ATen/ops/log_ops.h>
+      21              : 
+      22              : namespace at {
+      23              : 
+      24              : 
+      25              : // aten::log(Tensor self) -> Tensor
+      26        16480 : inline at::Tensor log(const at::Tensor & self) {
+      27        16480 :     return at::_ops::log::call(self);
+      28              : }
+      29              : 
+      30              : // aten::log_(Tensor(a!) self) -> Tensor(a!)
+      31              : inline at::Tensor & log_(at::Tensor & self) {
+      32              :     return at::_ops::log_::call(self);
+      33              : }
+      34              : 
+      35              : // aten::log.out(Tensor self, *, Tensor(a!) out) -> Tensor(a!)
+      36              : inline at::Tensor & log_out(at::Tensor & out, const at::Tensor & self) {
+      37              :     return at::_ops::log_out::call(self, out);
+      38              : }
+      39              : // aten::log.out(Tensor self, *, Tensor(a!) out) -> Tensor(a!)
+      40              : inline at::Tensor & log_outf(const at::Tensor & self, at::Tensor & out) {
+      41              :     return at::_ops::log_out::call(self, out);
+      42              : }
+      43              : 
+      44              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/max.h.func-c.html b/html/libtorch/include/ATen/ops/max.h.func-c.html new file mode 100644 index 0000000..c9c67b0 --- /dev/null +++ b/html/libtorch/include/ATen/ops/max.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/max.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - max.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at3maxERKNS_6TensorE116
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/max.h.func.html b/html/libtorch/include/ATen/ops/max.h.func.html new file mode 100644 index 0000000..35fd656 --- /dev/null +++ b/html/libtorch/include/ATen/ops/max.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/max.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - max.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at3maxERKNS_6TensorE116
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/max.h.gcov.html b/html/libtorch/include/ATen/ops/max.h.gcov.html new file mode 100644 index 0000000..a69d6af --- /dev/null +++ b/html/libtorch/include/ATen/ops/max.h.gcov.html @@ -0,0 +1,157 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/max.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - max.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : // @generated by torchgen/gen.py from Function.h
+       4              : 
+       5              : #include <ATen/Context.h>
+       6              : #include <ATen/DeviceGuard.h>
+       7              : #include <ATen/TensorUtils.h>
+       8              : #include <ATen/TracerMode.h>
+       9              : #include <ATen/core/Generator.h>
+      10              : #include <ATen/core/Reduction.h>
+      11              : #include <ATen/core/Tensor.h>
+      12              : #include <c10/core/Scalar.h>
+      13              : #include <c10/core/Storage.h>
+      14              : #include <c10/core/TensorOptions.h>
+      15              : #include <c10/util/Deprecated.h>
+      16              : #include <c10/util/Optional.h>
+      17              : 
+      18              : 
+      19              : 
+      20              : #include <ATen/ops/max_ops.h>
+      21              : 
+      22              : namespace at {
+      23              : 
+      24              : 
+      25              : // aten::max.dim(Tensor self, int dim, bool keepdim=False) -> (Tensor values, Tensor indices)
+      26              : inline ::std::tuple<at::Tensor,at::Tensor> max(const at::Tensor & self, int64_t dim, bool keepdim=false) {
+      27              :     return at::_ops::max_dim::call(self, dim, keepdim);
+      28              : }
+      29              : 
+      30              : // aten::max.dim_max(Tensor self, int dim, bool keepdim=False, *, Tensor(a!) max, Tensor(b!) max_values) -> (Tensor(a!) values, Tensor(b!) indices)
+      31              : inline ::std::tuple<at::Tensor &,at::Tensor &> max_out(at::Tensor & max, at::Tensor & max_values, const at::Tensor & self, int64_t dim, bool keepdim=false) {
+      32              :     return at::_ops::max_dim_max::call(self, dim, keepdim, max, max_values);
+      33              : }
+      34              : // aten::max.dim_max(Tensor self, int dim, bool keepdim=False, *, Tensor(a!) max, Tensor(b!) max_values) -> (Tensor(a!) values, Tensor(b!) indices)
+      35              : inline ::std::tuple<at::Tensor &,at::Tensor &> max_outf(const at::Tensor & self, int64_t dim, bool keepdim, at::Tensor & max, at::Tensor & max_values) {
+      36              :     return at::_ops::max_dim_max::call(self, dim, keepdim, max, max_values);
+      37              : }
+      38              : 
+      39              : // aten::max.names_dim(Tensor self, Dimname dim, bool keepdim=False) -> (Tensor values, Tensor indices)
+      40              : inline ::std::tuple<at::Tensor,at::Tensor> max(const at::Tensor & self, at::Dimname dim, bool keepdim=false) {
+      41              :     return at::_ops::max_names_dim::call(self, dim, keepdim);
+      42              : }
+      43              : 
+      44              : // aten::max.names_dim_max(Tensor self, Dimname dim, bool keepdim=False, *, Tensor(a!) max, Tensor(b!) max_values) -> (Tensor(a!) values, Tensor(b!) indices)
+      45              : inline ::std::tuple<at::Tensor &,at::Tensor &> max_out(at::Tensor & max, at::Tensor & max_values, const at::Tensor & self, at::Dimname dim, bool keepdim=false) {
+      46              :     return at::_ops::max_names_dim_max::call(self, dim, keepdim, max, max_values);
+      47              : }
+      48              : // aten::max.names_dim_max(Tensor self, Dimname dim, bool keepdim=False, *, Tensor(a!) max, Tensor(b!) max_values) -> (Tensor(a!) values, Tensor(b!) indices)
+      49              : inline ::std::tuple<at::Tensor &,at::Tensor &> max_outf(const at::Tensor & self, at::Dimname dim, bool keepdim, at::Tensor & max, at::Tensor & max_values) {
+      50              :     return at::_ops::max_names_dim_max::call(self, dim, keepdim, max, max_values);
+      51              : }
+      52              : 
+      53              : // aten::max(Tensor self) -> Tensor
+      54          116 : inline at::Tensor max(const at::Tensor & self) {
+      55          116 :     return at::_ops::max::call(self);
+      56              : }
+      57              : 
+      58              : // aten::max.other(Tensor self, Tensor other) -> Tensor
+      59              : inline at::Tensor max(const at::Tensor & self, const at::Tensor & other) {
+      60              :     return at::_ops::max_other::call(self, other);
+      61              : }
+      62              : 
+      63              : // aten::max.out(Tensor self, Tensor other, *, Tensor(a!) out) -> Tensor(a!)
+      64              : inline at::Tensor & max_out(at::Tensor & out, const at::Tensor & self, const at::Tensor & other) {
+      65              :     return at::_ops::max_out::call(self, other, out);
+      66              : }
+      67              : // aten::max.out(Tensor self, Tensor other, *, Tensor(a!) out) -> Tensor(a!)
+      68              : inline at::Tensor & max_outf(const at::Tensor & self, const at::Tensor & other, at::Tensor & out) {
+      69              :     return at::_ops::max_out::call(self, other, out);
+      70              : }
+      71              : 
+      72              : // aten::max.unary_out(Tensor self, *, Tensor(a!) out) -> Tensor(a!)
+      73              : inline at::Tensor & max_out(at::Tensor & out, const at::Tensor & self) {
+      74              :     return at::_ops::max_unary_out::call(self, out);
+      75              : }
+      76              : // aten::max.unary_out(Tensor self, *, Tensor(a!) out) -> Tensor(a!)
+      77              : inline at::Tensor & max_outf(const at::Tensor & self, at::Tensor & out) {
+      78              :     return at::_ops::max_unary_out::call(self, out);
+      79              : }
+      80              : 
+      81              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/scalar_tensor.h.func-c.html b/html/libtorch/include/ATen/ops/scalar_tensor.h.func-c.html new file mode 100644 index 0000000..de94d3f --- /dev/null +++ b/html/libtorch/include/ATen/ops/scalar_tensor.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/scalar_tensor.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - scalar_tensor.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %20
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at13scalar_tensorERKN3c106ScalarENS0_13TensorOptionsE0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/scalar_tensor.h.func.html b/html/libtorch/include/ATen/ops/scalar_tensor.h.func.html new file mode 100644 index 0000000..b38cf57 --- /dev/null +++ b/html/libtorch/include/ATen/ops/scalar_tensor.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/scalar_tensor.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - scalar_tensor.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %20
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at13scalar_tensorERKN3c106ScalarENS0_13TensorOptionsE0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/scalar_tensor.h.gcov.html b/html/libtorch/include/ATen/ops/scalar_tensor.h.gcov.html new file mode 100644 index 0000000..9480a61 --- /dev/null +++ b/html/libtorch/include/ATen/ops/scalar_tensor.h.gcov.html @@ -0,0 +1,119 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/scalar_tensor.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - scalar_tensor.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %20
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : // @generated by torchgen/gen.py from Function.h
+       4              : 
+       5              : #include <ATen/Context.h>
+       6              : #include <ATen/DeviceGuard.h>
+       7              : #include <ATen/TensorUtils.h>
+       8              : #include <ATen/TracerMode.h>
+       9              : #include <ATen/core/Generator.h>
+      10              : #include <ATen/core/Reduction.h>
+      11              : #include <ATen/core/Tensor.h>
+      12              : #include <c10/core/Scalar.h>
+      13              : #include <c10/core/Storage.h>
+      14              : #include <c10/core/TensorOptions.h>
+      15              : #include <c10/util/Deprecated.h>
+      16              : #include <c10/util/Optional.h>
+      17              : 
+      18              : 
+      19              : 
+      20              : #include <ATen/ops/scalar_tensor_ops.h>
+      21              : 
+      22              : namespace at {
+      23              : 
+      24              : 
+      25              : // aten::scalar_tensor(Scalar s, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+      26            0 : inline at::Tensor scalar_tensor(const at::Scalar & s, at::TensorOptions options={}) {
+      27            0 :     return at::_ops::scalar_tensor::call(s, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+      28              : }
+      29              : // aten::scalar_tensor(Scalar s, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+      30              : inline at::Tensor scalar_tensor(const at::Scalar & s, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) {
+      31              :     return at::_ops::scalar_tensor::call(s, dtype, layout, device, pin_memory);
+      32              : }
+      33              : 
+      34              : // aten::scalar_tensor.out(Scalar s, *, Tensor(a!) out) -> Tensor(a!)
+      35              : inline at::Tensor & scalar_tensor_out(at::Tensor & out, const at::Scalar & s) {
+      36              :     return at::_ops::scalar_tensor_out::call(s, out);
+      37              : }
+      38              : // aten::scalar_tensor.out(Scalar s, *, Tensor(a!) out) -> Tensor(a!)
+      39              : inline at::Tensor & scalar_tensor_outf(const at::Scalar & s, at::Tensor & out) {
+      40              :     return at::_ops::scalar_tensor_out::call(s, out);
+      41              : }
+      42              : 
+      43              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/sum.h.func-c.html b/html/libtorch/include/ATen/ops/sum.h.func-c.html new file mode 100644 index 0000000..badc977 --- /dev/null +++ b/html/libtorch/include/ATen/ops/sum.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/sum.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - sum.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at3sumERKNS_6TensorEN3c108optionalINS3_10ScalarTypeEEE264
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/sum.h.func.html b/html/libtorch/include/ATen/ops/sum.h.func.html new file mode 100644 index 0000000..28c7c21 --- /dev/null +++ b/html/libtorch/include/ATen/ops/sum.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/sum.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - sum.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at3sumERKNS_6TensorEN3c108optionalINS3_10ScalarTypeEEE264
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/sum.h.gcov.html b/html/libtorch/include/ATen/ops/sum.h.gcov.html new file mode 100644 index 0000000..4f7c0d2 --- /dev/null +++ b/html/libtorch/include/ATen/ops/sum.h.gcov.html @@ -0,0 +1,143 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/sum.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - sum.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : // @generated by torchgen/gen.py from Function.h
+       4              : 
+       5              : #include <ATen/Context.h>
+       6              : #include <ATen/DeviceGuard.h>
+       7              : #include <ATen/TensorUtils.h>
+       8              : #include <ATen/TracerMode.h>
+       9              : #include <ATen/core/Generator.h>
+      10              : #include <ATen/core/Reduction.h>
+      11              : #include <ATen/core/Tensor.h>
+      12              : #include <c10/core/Scalar.h>
+      13              : #include <c10/core/Storage.h>
+      14              : #include <c10/core/TensorOptions.h>
+      15              : #include <c10/util/Deprecated.h>
+      16              : #include <c10/util/Optional.h>
+      17              : 
+      18              : 
+      19              : 
+      20              : #include <ATen/ops/sum_ops.h>
+      21              : 
+      22              : namespace at {
+      23              : 
+      24              : 
+      25              : // aten::sum(Tensor self, *, ScalarType? dtype=None) -> Tensor
+      26          264 : inline at::Tensor sum(const at::Tensor & self, c10::optional<at::ScalarType> dtype=c10::nullopt) {
+      27          264 :     return at::_ops::sum::call(self, dtype);
+      28              : }
+      29              : 
+      30              : // aten::sum.dim_IntList(Tensor self, int[1]? dim, bool keepdim=False, *, ScalarType? dtype=None) -> Tensor
+      31              : inline at::Tensor sum(const at::Tensor & self, at::OptionalIntArrayRef dim, bool keepdim=false, c10::optional<at::ScalarType> dtype=c10::nullopt) {
+      32              :     return at::_ops::sum_dim_IntList::call(self, dim, keepdim, dtype);
+      33              : }
+      34              : 
+      35              : // aten::sum.dim_DimnameList(Tensor self, Dimname[1] dim, bool keepdim=False, *, ScalarType? dtype=None) -> Tensor
+      36              : inline at::Tensor sum(const at::Tensor & self, at::DimnameList dim, bool keepdim=false, c10::optional<at::ScalarType> dtype=c10::nullopt) {
+      37              :     return at::_ops::sum_dim_DimnameList::call(self, dim, keepdim, dtype);
+      38              : }
+      39              : 
+      40              : // aten::sum.IntList_out(Tensor self, int[1]? dim, bool keepdim=False, *, ScalarType? dtype=None, Tensor(a!) out) -> Tensor(a!)
+      41              : inline at::Tensor & sum_out(at::Tensor & out, const at::Tensor & self, at::OptionalIntArrayRef dim, bool keepdim=false, c10::optional<at::ScalarType> dtype=c10::nullopt) {
+      42              :     return at::_ops::sum_IntList_out::call(self, dim, keepdim, dtype, out);
+      43              : }
+      44              : // aten::sum.IntList_out(Tensor self, int[1]? dim, bool keepdim=False, *, ScalarType? dtype=None, Tensor(a!) out) -> Tensor(a!)
+      45              : inline at::Tensor & sum_outf(const at::Tensor & self, at::OptionalIntArrayRef dim, bool keepdim, c10::optional<at::ScalarType> dtype, at::Tensor & out) {
+      46              :     return at::_ops::sum_IntList_out::call(self, dim, keepdim, dtype, out);
+      47              : }
+      48              : 
+      49              : // aten::sum.DimnameList_out(Tensor self, Dimname[1] dim, bool keepdim=False, *, ScalarType? dtype=None, Tensor(a!) out) -> Tensor(a!)
+      50              : inline at::Tensor & sum_out(at::Tensor & out, const at::Tensor & self, at::DimnameList dim, bool keepdim=false, c10::optional<at::ScalarType> dtype=c10::nullopt) {
+      51              :     return at::_ops::sum_DimnameList_out::call(self, dim, keepdim, dtype, out);
+      52              : }
+      53              : // aten::sum.DimnameList_out(Tensor self, Dimname[1] dim, bool keepdim=False, *, ScalarType? dtype=None, Tensor(a!) out) -> Tensor(a!)
+      54              : inline at::Tensor & sum_outf(const at::Tensor & self, at::DimnameList dim, bool keepdim, c10::optional<at::ScalarType> dtype, at::Tensor & out) {
+      55              :     return at::_ops::sum_DimnameList_out::call(self, dim, keepdim, dtype, out);
+      56              : }
+      57              : 
+      58              : // aten::sum.out(Tensor self, *, ScalarType? dtype=None, Tensor(a!) out) -> Tensor(a!)
+      59              : inline at::Tensor & sum_out(at::Tensor & out, const at::Tensor & self, c10::optional<at::ScalarType> dtype=c10::nullopt) {
+      60              :     return at::_ops::sum_out::call(self, dtype, out);
+      61              : }
+      62              : // aten::sum.out(Tensor self, *, ScalarType? dtype=None, Tensor(a!) out) -> Tensor(a!)
+      63              : inline at::Tensor & sum_outf(const at::Tensor & self, c10::optional<at::ScalarType> dtype, at::Tensor & out) {
+      64              :     return at::_ops::sum_out::call(self, dtype, out);
+      65              : }
+      66              : 
+      67              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/tensor.h.func-c.html b/html/libtorch/include/ATen/ops/tensor.h.func-c.html new file mode 100644 index 0000000..210a3bf --- /dev/null +++ b/html/libtorch/include/ATen/ops/tensor.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/tensor.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - tensor.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at6tensorEi181257936
_ZN2at6tensorEN3c108ArrayRefIiEE90628968
_ZN2at6tensorEi90628968
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/tensor.h.func.html b/html/libtorch/include/ATen/ops/tensor.h.func.html new file mode 100644 index 0000000..fa8cd3a --- /dev/null +++ b/html/libtorch/include/ATen/ops/tensor.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/tensor.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - tensor.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at6tensorEi181257936
_ZN2at6tensorEN3c108ArrayRefIiEE90628968
_ZN2at6tensorEi90628968
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/tensor.h.gcov.html b/html/libtorch/include/ATen/ops/tensor.h.gcov.html new file mode 100644 index 0000000..2f7f785 --- /dev/null +++ b/html/libtorch/include/ATen/ops/tensor.h.gcov.html @@ -0,0 +1,106 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/tensor.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - tensor.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : #include <ATen/core/Tensor.h>
+       3              : #include <c10/core/ScalarType.h>
+       4              : 
+       5              : namespace at {
+       6              : 
+       7              : // These functions are defined in ATen/Utils.cpp.
+       8              : #define TENSOR(T, S)                                                          \
+       9              :   TORCH_API Tensor tensor(ArrayRef<T> values, const TensorOptions& options);  \
+      10              :   inline Tensor tensor(                                                       \
+      11              :       std::initializer_list<T> values, const TensorOptions& options) {        \
+      12              :     return at::tensor(ArrayRef<T>(values), options);                          \
+      13              :   }                                                                           \
+      14              :   inline Tensor tensor(T value, const TensorOptions& options) {               \
+      15              :     return at::tensor(ArrayRef<T>(value), options);                           \
+      16              :   }                                                                           \
+      17              :   inline Tensor tensor(ArrayRef<T> values) {                                  \
+      18              :     return at::tensor(std::move(values), at::dtype(k##S));                    \
+      19              :   }                                                                           \
+      20              :   inline Tensor tensor(std::initializer_list<T> values) {                     \
+      21              :     return at::tensor(ArrayRef<T>(values));                                   \
+      22              :   }                                                                           \
+      23              :   inline Tensor tensor(T value) {                                             \
+      24              :     return at::tensor(ArrayRef<T>(value));                                    \
+      25              :   }
+      26    181257936 : AT_FORALL_SCALAR_TYPES_AND3(Bool, Half, BFloat16, TENSOR)
+      27              : AT_FORALL_COMPLEX_TYPES(TENSOR)
+      28              : #undef TENSOR
+      29              : 
+      30              : }  // namespace at
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/transpose.h.func-c.html b/html/libtorch/include/ATen/ops/transpose.h.func-c.html new file mode 100644 index 0000000..4256023 --- /dev/null +++ b/html/libtorch/include/ATen/ops/transpose.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/transpose.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - transpose.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at9transposeERKNS_6TensorEll376
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/transpose.h.func.html b/html/libtorch/include/ATen/ops/transpose.h.func.html new file mode 100644 index 0000000..5e9d63a --- /dev/null +++ b/html/libtorch/include/ATen/ops/transpose.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/transpose.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - transpose.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at9transposeERKNS_6TensorEll376
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/transpose.h.gcov.html b/html/libtorch/include/ATen/ops/transpose.h.gcov.html new file mode 100644 index 0000000..4548534 --- /dev/null +++ b/html/libtorch/include/ATen/ops/transpose.h.gcov.html @@ -0,0 +1,111 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/transpose.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - transpose.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : // @generated by torchgen/gen.py from Function.h
+       4              : 
+       5              : #include <ATen/Context.h>
+       6              : #include <ATen/DeviceGuard.h>
+       7              : #include <ATen/TensorUtils.h>
+       8              : #include <ATen/TracerMode.h>
+       9              : #include <ATen/core/Generator.h>
+      10              : #include <ATen/core/Reduction.h>
+      11              : #include <ATen/core/Tensor.h>
+      12              : #include <c10/core/Scalar.h>
+      13              : #include <c10/core/Storage.h>
+      14              : #include <c10/core/TensorOptions.h>
+      15              : #include <c10/util/Deprecated.h>
+      16              : #include <c10/util/Optional.h>
+      17              : 
+      18              : 
+      19              : 
+      20              : #include <ATen/ops/transpose_ops.h>
+      21              : 
+      22              : namespace at {
+      23              : 
+      24              : 
+      25              : // aten::transpose.int(Tensor(a) self, int dim0, int dim1) -> Tensor(a)
+      26          376 : inline at::Tensor transpose(const at::Tensor & self, int64_t dim0, int64_t dim1) {
+      27          376 :     return at::_ops::transpose_int::call(self, dim0, dim1);
+      28              : }
+      29              : 
+      30              : // aten::transpose.Dimname(Tensor(a) self, Dimname dim0, Dimname dim1) -> Tensor(a)
+      31              : inline at::Tensor transpose(const at::Tensor & self, at::Dimname dim0, at::Dimname dim1) {
+      32              :     return at::_ops::transpose_Dimname::call(self, dim0, dim1);
+      33              : }
+      34              : 
+      35              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/triu_indices.h.func-c.html b/html/libtorch/include/ATen/ops/triu_indices.h.func-c.html new file mode 100644 index 0000000..e853f29 --- /dev/null +++ b/html/libtorch/include/ATen/ops/triu_indices.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/triu_indices.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - triu_indices.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at12triu_indicesElllN3c1013TensorOptionsE68
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/triu_indices.h.func.html b/html/libtorch/include/ATen/ops/triu_indices.h.func.html new file mode 100644 index 0000000..5b79300 --- /dev/null +++ b/html/libtorch/include/ATen/ops/triu_indices.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/triu_indices.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - triu_indices.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at12triu_indicesElllN3c1013TensorOptionsE68
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/triu_indices.h.gcov.html b/html/libtorch/include/ATen/ops/triu_indices.h.gcov.html new file mode 100644 index 0000000..9c40459 --- /dev/null +++ b/html/libtorch/include/ATen/ops/triu_indices.h.gcov.html @@ -0,0 +1,119 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/triu_indices.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - triu_indices.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : // @generated by torchgen/gen.py from Function.h
+       4              : 
+       5              : #include <ATen/Context.h>
+       6              : #include <ATen/DeviceGuard.h>
+       7              : #include <ATen/TensorUtils.h>
+       8              : #include <ATen/TracerMode.h>
+       9              : #include <ATen/core/Generator.h>
+      10              : #include <ATen/core/Reduction.h>
+      11              : #include <ATen/core/Tensor.h>
+      12              : #include <c10/core/Scalar.h>
+      13              : #include <c10/core/Storage.h>
+      14              : #include <c10/core/TensorOptions.h>
+      15              : #include <c10/util/Deprecated.h>
+      16              : #include <c10/util/Optional.h>
+      17              : 
+      18              : 
+      19              : 
+      20              : #include <ATen/ops/triu_indices_ops.h>
+      21              : 
+      22              : namespace at {
+      23              : 
+      24              : 
+      25              : // aten::triu_indices(int row, int col, int offset=0, *, ScalarType? dtype=long, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+      26           68 : inline at::Tensor triu_indices(int64_t row, int64_t col, int64_t offset=0, at::TensorOptions options=at::kLong) {
+      27           68 :     return at::_ops::triu_indices::call(row, col, offset, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+      28              : }
+      29              : // aten::triu_indices(int row, int col, int offset=0, *, ScalarType? dtype=long, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+      30              : inline at::Tensor triu_indices(int64_t row, int64_t col, int64_t offset, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) {
+      31              :     return at::_ops::triu_indices::call(row, col, offset, dtype, layout, device, pin_memory);
+      32              : }
+      33              : 
+      34              : // aten::triu_indices.out(int row, int col, int offset=0, *, Tensor(a!) out) -> Tensor(a!)
+      35              : inline at::Tensor & triu_indices_out(at::Tensor & out, int64_t row, int64_t col, int64_t offset=0) {
+      36              :     return at::_ops::triu_indices_out::call(row, col, offset, out);
+      37              : }
+      38              : // aten::triu_indices.out(int row, int col, int offset=0, *, Tensor(a!) out) -> Tensor(a!)
+      39              : inline at::Tensor & triu_indices_outf(int64_t row, int64_t col, int64_t offset, at::Tensor & out) {
+      40              :     return at::_ops::triu_indices_out::call(row, col, offset, out);
+      41              : }
+      42              : 
+      43              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/zeros.h.func-c.html b/html/libtorch/include/ATen/ops/zeros.h.func-c.html new file mode 100644 index 0000000..af62206 --- /dev/null +++ b/html/libtorch/include/ATen/ops/zeros.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/zeros.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - zeros.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at5zerosEN3c108ArrayRefIlEENS0_13TensorOptionsE16680
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/zeros.h.func.html b/html/libtorch/include/ATen/ops/zeros.h.func.html new file mode 100644 index 0000000..c582cd0 --- /dev/null +++ b/html/libtorch/include/ATen/ops/zeros.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/zeros.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - zeros.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at5zerosEN3c108ArrayRefIlEENS0_13TensorOptionsE16680
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/zeros.h.gcov.html b/html/libtorch/include/ATen/ops/zeros.h.gcov.html new file mode 100644 index 0000000..f85caf4 --- /dev/null +++ b/html/libtorch/include/ATen/ops/zeros.h.gcov.html @@ -0,0 +1,207 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/zeros.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - zeros.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : // @generated by torchgen/gen.py from Function.h
+       4              : 
+       5              : #include <ATen/Context.h>
+       6              : #include <ATen/DeviceGuard.h>
+       7              : #include <ATen/TensorUtils.h>
+       8              : #include <ATen/TracerMode.h>
+       9              : #include <ATen/core/Generator.h>
+      10              : #include <ATen/core/Reduction.h>
+      11              : #include <ATen/core/Tensor.h>
+      12              : #include <c10/core/Scalar.h>
+      13              : #include <c10/core/Storage.h>
+      14              : #include <c10/core/TensorOptions.h>
+      15              : #include <c10/util/Deprecated.h>
+      16              : #include <c10/util/Optional.h>
+      17              : 
+      18              : 
+      19              : 
+      20              : #include <ATen/ops/zeros_ops.h>
+      21              : 
+      22              : namespace at {
+      23              : 
+      24              : 
+      25              : // aten::zeros.names(int[] size, *, Dimname[]? names, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+      26              : inline at::Tensor zeros(at::IntArrayRef size, c10::optional<at::DimnameList> names, at::TensorOptions options={}) {
+      27              :     return at::_ops::zeros_names::call(size, names, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+      28              : }
+      29              : // aten::zeros.names(int[] size, *, Dimname[]? names, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+      30              : inline at::Tensor zeros(at::IntArrayRef size, c10::optional<at::DimnameList> names, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) {
+      31              :     return at::_ops::zeros_names::call(size, names, dtype, layout, device, pin_memory);
+      32              : }
+      33              : 
+      34              : // aten::zeros(SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+      35        16680 : inline at::Tensor zeros(at::IntArrayRef size, at::TensorOptions options={}) {
+      36        16680 :     return at::_ops::zeros::call(c10::fromIntArrayRefSlow(size), optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+      37              : }
+      38              : namespace symint {
+      39              :   template <typename T, typename = std::enable_if_t<std::is_same<T, int64_t>::value>>
+      40              :   at::Tensor zeros(at::IntArrayRef size, at::TensorOptions options={}) {
+      41              :     return at::_ops::zeros::call(c10::fromIntArrayRefSlow(size), optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+      42              :   }
+      43              : }
+      44              : 
+      45              : // aten::zeros(SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+      46              : inline at::Tensor zeros(at::IntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) {
+      47              :     return at::_ops::zeros::call(c10::fromIntArrayRefSlow(size), dtype, layout, device, pin_memory);
+      48              : }
+      49              : namespace symint {
+      50              :   template <typename T, typename = std::enable_if_t<std::is_same<T, int64_t>::value>>
+      51              :   at::Tensor zeros(at::IntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) {
+      52              :     return at::_ops::zeros::call(c10::fromIntArrayRefSlow(size), dtype, layout, device, pin_memory);
+      53              :   }
+      54              : }
+      55              : 
+      56              : // aten::zeros(SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+      57              : inline at::Tensor zeros_symint(c10::SymIntArrayRef size, at::TensorOptions options={}) {
+      58              :     return at::_ops::zeros::call(size, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+      59              : }
+      60              : namespace symint {
+      61              :   template <typename T, typename = std::enable_if_t<std::is_same<T, c10::SymInt>::value>>
+      62              :   at::Tensor zeros(c10::SymIntArrayRef size, at::TensorOptions options={}) {
+      63              :     return at::_ops::zeros::call(size, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt());
+      64              :   }
+      65              : }
+      66              : 
+      67              : // aten::zeros(SymInt[] size, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None) -> Tensor
+      68              : inline at::Tensor zeros_symint(c10::SymIntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) {
+      69              :     return at::_ops::zeros::call(size, dtype, layout, device, pin_memory);
+      70              : }
+      71              : namespace symint {
+      72              :   template <typename T, typename = std::enable_if_t<std::is_same<T, c10::SymInt>::value>>
+      73              :   at::Tensor zeros(c10::SymIntArrayRef size, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory) {
+      74              :     return at::_ops::zeros::call(size, dtype, layout, device, pin_memory);
+      75              :   }
+      76              : }
+      77              : 
+      78              : // aten::zeros.out(SymInt[] size, *, Tensor(a!) out) -> Tensor(a!)
+      79              : inline at::Tensor & zeros_out(at::Tensor & out, at::IntArrayRef size) {
+      80              :     return at::_ops::zeros_out::call(c10::fromIntArrayRefSlow(size), out);
+      81              : }
+      82              : namespace symint {
+      83              :   template <typename T, typename = std::enable_if_t<std::is_same<T, int64_t>::value>>
+      84              :   at::Tensor & zeros_out(at::Tensor & out, at::IntArrayRef size) {
+      85              :     return at::_ops::zeros_out::call(c10::fromIntArrayRefSlow(size), out);
+      86              :   }
+      87              : }
+      88              : 
+      89              : // aten::zeros.out(SymInt[] size, *, Tensor(a!) out) -> Tensor(a!)
+      90              : inline at::Tensor & zeros_outf(at::IntArrayRef size, at::Tensor & out) {
+      91              :     return at::_ops::zeros_out::call(c10::fromIntArrayRefSlow(size), out);
+      92              : }
+      93              : namespace symint {
+      94              :   template <typename T, typename = std::enable_if_t<std::is_same<T, int64_t>::value>>
+      95              :   at::Tensor & zeros_outf(at::IntArrayRef size, at::Tensor & out) {
+      96              :     return at::_ops::zeros_out::call(c10::fromIntArrayRefSlow(size), out);
+      97              :   }
+      98              : }
+      99              : 
+     100              : // aten::zeros.out(SymInt[] size, *, Tensor(a!) out) -> Tensor(a!)
+     101              : inline at::Tensor & zeros_symint_out(at::Tensor & out, c10::SymIntArrayRef size) {
+     102              :     return at::_ops::zeros_out::call(size, out);
+     103              : }
+     104              : namespace symint {
+     105              :   template <typename T, typename = std::enable_if_t<std::is_same<T, c10::SymInt>::value>>
+     106              :   at::Tensor & zeros_out(at::Tensor & out, c10::SymIntArrayRef size) {
+     107              :     return at::_ops::zeros_out::call(size, out);
+     108              :   }
+     109              : }
+     110              : 
+     111              : // aten::zeros.out(SymInt[] size, *, Tensor(a!) out) -> Tensor(a!)
+     112              : inline at::Tensor & zeros_symint_outf(c10::SymIntArrayRef size, at::Tensor & out) {
+     113              :     return at::_ops::zeros_out::call(size, out);
+     114              : }
+     115              : namespace symint {
+     116              :   template <typename T, typename = std::enable_if_t<std::is_same<T, c10::SymInt>::value>>
+     117              :   at::Tensor & zeros_outf(c10::SymIntArrayRef size, at::Tensor & out) {
+     118              :     return at::_ops::zeros_out::call(size, out);
+     119              :   }
+     120              : }
+     121              : 
+     122              : // aten::zeros.names_out(int[] size, *, Dimname[]? names, Tensor(a!) out) -> Tensor(a!)
+     123              : inline at::Tensor & zeros_out(at::Tensor & out, at::IntArrayRef size, c10::optional<at::DimnameList> names) {
+     124              :     return at::_ops::zeros_names_out::call(size, names, out);
+     125              : }
+     126              : // aten::zeros.names_out(int[] size, *, Dimname[]? names, Tensor(a!) out) -> Tensor(a!)
+     127              : inline at::Tensor & zeros_outf(at::IntArrayRef size, c10::optional<at::DimnameList> names, at::Tensor & out) {
+     128              :     return at::_ops::zeros_names_out::call(size, names, out);
+     129              : }
+     130              : 
+     131              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/zeros_like.h.func-c.html b/html/libtorch/include/ATen/ops/zeros_like.h.func-c.html new file mode 100644 index 0000000..f8d8fbc --- /dev/null +++ b/html/libtorch/include/ATen/ops/zeros_like.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/zeros_like.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - zeros_like.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at10zeros_likeERKNS_6TensorEN3c1013TensorOptionsENS3_8optionalINS3_12MemoryFormatEEE84
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/zeros_like.h.func.html b/html/libtorch/include/ATen/ops/zeros_like.h.func.html new file mode 100644 index 0000000..48037c5 --- /dev/null +++ b/html/libtorch/include/ATen/ops/zeros_like.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/zeros_like.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - zeros_like.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN2at10zeros_likeERKNS_6TensorEN3c1013TensorOptionsENS3_8optionalINS3_12MemoryFormatEEE84
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/ATen/ops/zeros_like.h.gcov.html b/html/libtorch/include/ATen/ops/zeros_like.h.gcov.html new file mode 100644 index 0000000..1a099d1 --- /dev/null +++ b/html/libtorch/include/ATen/ops/zeros_like.h.gcov.html @@ -0,0 +1,119 @@ + + + + + + + LCOV - coverage.info - libtorch/include/ATen/ops/zeros_like.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/ATen/ops - zeros_like.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : // @generated by torchgen/gen.py from Function.h
+       4              : 
+       5              : #include <ATen/Context.h>
+       6              : #include <ATen/DeviceGuard.h>
+       7              : #include <ATen/TensorUtils.h>
+       8              : #include <ATen/TracerMode.h>
+       9              : #include <ATen/core/Generator.h>
+      10              : #include <ATen/core/Reduction.h>
+      11              : #include <ATen/core/Tensor.h>
+      12              : #include <c10/core/Scalar.h>
+      13              : #include <c10/core/Storage.h>
+      14              : #include <c10/core/TensorOptions.h>
+      15              : #include <c10/util/Deprecated.h>
+      16              : #include <c10/util/Optional.h>
+      17              : 
+      18              : 
+      19              : 
+      20              : #include <ATen/ops/zeros_like_ops.h>
+      21              : 
+      22              : namespace at {
+      23              : 
+      24              : 
+      25              : // aten::zeros_like(Tensor self, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None, MemoryFormat? memory_format=None) -> Tensor
+      26           84 : inline at::Tensor zeros_like(const at::Tensor & self, at::TensorOptions options={}, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) {
+      27           84 :     return at::_ops::zeros_like::call(self, optTypeMetaToScalarType(options.dtype_opt()), options.layout_opt(), options.device_opt(), options.pinned_memory_opt(), c10::impl::check_tensor_options_and_extract_memory_format(options, memory_format));
+      28              : }
+      29              : // aten::zeros_like(Tensor self, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None, MemoryFormat? memory_format=None) -> Tensor
+      30              : inline at::Tensor zeros_like(const at::Tensor & self, c10::optional<at::ScalarType> dtype, c10::optional<at::Layout> layout, c10::optional<at::Device> device, c10::optional<bool> pin_memory, c10::optional<at::MemoryFormat> memory_format) {
+      31              :     return at::_ops::zeros_like::call(self, dtype, layout, device, pin_memory, memory_format);
+      32              : }
+      33              : 
+      34              : // aten::zeros_like.out(Tensor self, *, MemoryFormat? memory_format=None, Tensor(a!) out) -> Tensor(a!)
+      35              : inline at::Tensor & zeros_like_out(at::Tensor & out, const at::Tensor & self, c10::optional<at::MemoryFormat> memory_format=c10::nullopt) {
+      36              :     return at::_ops::zeros_like_out::call(self, memory_format, out);
+      37              : }
+      38              : // aten::zeros_like.out(Tensor self, *, MemoryFormat? memory_format=None, Tensor(a!) out) -> Tensor(a!)
+      39              : inline at::Tensor & zeros_like_outf(const at::Tensor & self, c10::optional<at::MemoryFormat> memory_format, at::Tensor & out) {
+      40              :     return at::_ops::zeros_like_out::call(self, memory_format, out);
+      41              : }
+      42              : 
+      43              : }
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/Device.h.func-c.html b/html/libtorch/include/c10/core/Device.h.func-c.html new file mode 100644 index 0000000..c88d496 --- /dev/null +++ b/html/libtorch/include/c10/core/Device.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/Device.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - Device.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1010
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c106Device8validateEv91850448
_ZN3c106DeviceC2ENS_10DeviceTypeEa91850448
_ZNK3c106Device6is_cpuEv91850448
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/Device.h.func.html b/html/libtorch/include/c10/core/Device.h.func.html new file mode 100644 index 0000000..ffb1111 --- /dev/null +++ b/html/libtorch/include/c10/core/Device.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/Device.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - Device.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1010
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c106Device8validateEv91850448
_ZN3c106DeviceC2ENS_10DeviceTypeEa91850448
_ZNK3c106Device6is_cpuEv91850448
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/Device.h.gcov.html b/html/libtorch/include/c10/core/Device.h.gcov.html new file mode 100644 index 0000000..ff943c7 --- /dev/null +++ b/html/libtorch/include/c10/core/Device.h.gcov.html @@ -0,0 +1,291 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/Device.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - Device.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1010
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <c10/core/DeviceType.h>
+       4              : #include <c10/macros/Export.h>
+       5              : #include <c10/util/Exception.h>
+       6              : 
+       7              : #include <cstddef>
+       8              : #include <functional>
+       9              : #include <iosfwd>
+      10              : #include <string>
+      11              : 
+      12              : namespace c10 {
+      13              : 
+      14              : /// An index representing a specific device; e.g., the 1 in GPU 1.
+      15              : /// A DeviceIndex is not independently meaningful without knowing
+      16              : /// the DeviceType it is associated; try to use Device rather than
+      17              : /// DeviceIndex directly.
+      18              : using DeviceIndex = int8_t;
+      19              : 
+      20              : /// Represents a compute device on which a tensor is located. A device is
+      21              : /// uniquely identified by a type, which specifies the type of machine it is
+      22              : /// (e.g. CPU or CUDA GPU), and a device index or ordinal, which identifies the
+      23              : /// specific compute device when there is more than one of a certain type. The
+      24              : /// device index is optional, and in its defaulted state represents (abstractly)
+      25              : /// "the current device". Further, there are two constraints on the value of the
+      26              : /// device index, if one is explicitly stored:
+      27              : /// 1. A negative index represents the current device, a non-negative index
+      28              : /// represents a specific, concrete device,
+      29              : /// 2. When the device type is CPU, the device index must be zero.
+      30              : struct C10_API Device final {
+      31              :   using Type = DeviceType;
+      32              : 
+      33              :   /// Constructs a new `Device` from a `DeviceType` and an optional device
+      34              :   /// index.
+      35     91850448 :   /* implicit */ Device(DeviceType type, DeviceIndex index = -1)
+      36     91850448 :       : type_(type), index_(index) {
+      37     91850448 :     validate();
+      38     91850448 :   }
+      39              : 
+      40              :   /// Constructs a `Device` from a string description, for convenience.
+      41              :   /// The string supplied must follow the following schema:
+      42              :   /// `(cpu|cuda)[:<device-index>]`
+      43              :   /// where `cpu` or `cuda` specifies the device type, and
+      44              :   /// `:<device-index>` optionally specifies a device index.
+      45              :   /* implicit */ Device(const std::string& device_string);
+      46              : 
+      47              :   /// Returns true if the type and index of this `Device` matches that of
+      48              :   /// `other`.
+      49              :   bool operator==(const Device& other) const noexcept {
+      50              :     return this->type_ == other.type_ && this->index_ == other.index_;
+      51              :   }
+      52              : 
+      53              :   /// Returns true if the type or index of this `Device` differs from that of
+      54              :   /// `other`.
+      55              :   bool operator!=(const Device& other) const noexcept {
+      56              :     return !(*this == other);
+      57              :   }
+      58              : 
+      59              :   /// Sets the device index.
+      60              :   void set_index(DeviceIndex index) {
+      61              :     index_ = index;
+      62              :   }
+      63              : 
+      64              :   /// Returns the type of device this is.
+      65              :   DeviceType type() const noexcept {
+      66              :     return type_;
+      67              :   }
+      68              : 
+      69              :   /// Returns the optional index.
+      70              :   DeviceIndex index() const noexcept {
+      71              :     return index_;
+      72              :   }
+      73              : 
+      74              :   /// Returns true if the device has a non-default index.
+      75              :   bool has_index() const noexcept {
+      76              :     return index_ != -1;
+      77              :   }
+      78              : 
+      79              :   /// Return true if the device is of CUDA type.
+      80              :   bool is_cuda() const noexcept {
+      81              :     return type_ == DeviceType::CUDA;
+      82              :   }
+      83              : 
+      84              :   /// Return true if the device is of PrivateUse1 type.
+      85              :   bool is_privateuseone() const noexcept {
+      86              :     return type_ == DeviceType::PrivateUse1;
+      87              :   }
+      88              : 
+      89              :   /// Return true if the device is of MPS type.
+      90              :   bool is_mps() const noexcept {
+      91              :     return type_ == DeviceType::MPS;
+      92              :   }
+      93              : 
+      94              :   /// Return true if the device is of HIP type.
+      95              :   bool is_hip() const noexcept {
+      96              :     return type_ == DeviceType::HIP;
+      97              :   }
+      98              : 
+      99              :   /// Return true if the device is of VE type.
+     100              :   bool is_ve() const noexcept {
+     101              :     return type_ == DeviceType::VE;
+     102              :   }
+     103              : 
+     104              :   /// Return true if the device is of XPU type.
+     105              :   bool is_xpu() const noexcept {
+     106              :     return type_ == DeviceType::XPU;
+     107              :   }
+     108              : 
+     109              :   /// Return true if the device is of IPU type.
+     110              :   bool is_ipu() const noexcept {
+     111              :     return type_ == DeviceType::IPU;
+     112              :   }
+     113              : 
+     114              :   /// Return true if the device is of XLA type.
+     115              :   bool is_xla() const noexcept {
+     116              :     return type_ == DeviceType::XLA;
+     117              :   }
+     118              : 
+     119              :   /// Return true if the device is of MTIA type.
+     120              :   bool is_mtia() const noexcept {
+     121              :     return type_ == DeviceType::MTIA;
+     122              :   }
+     123              : 
+     124              :   /// Return true if the device is of HPU type.
+     125              :   bool is_hpu() const noexcept {
+     126              :     return type_ == DeviceType::HPU;
+     127              :   }
+     128              : 
+     129              :   /// Return true if the device is of Lazy type.
+     130              :   bool is_lazy() const noexcept {
+     131              :     return type_ == DeviceType::Lazy;
+     132              :   }
+     133              : 
+     134              :   /// Return true if the device is of Vulkan type.
+     135              :   bool is_vulkan() const noexcept {
+     136              :     return type_ == DeviceType::Vulkan;
+     137              :   }
+     138              : 
+     139              :   /// Return true if the device is of Metal type.
+     140              :   bool is_metal() const noexcept {
+     141              :     return type_ == DeviceType::Metal;
+     142              :   }
+     143              : 
+     144              :   /// Return true if the device is of ORT type.
+     145              :   bool is_ort() const noexcept {
+     146              :     return type_ == DeviceType::ORT;
+     147              :   }
+     148              : 
+     149              :   /// Return true if the device is of META type.
+     150              :   bool is_meta() const noexcept {
+     151              :     return type_ == DeviceType::Meta;
+     152              :   }
+     153              : 
+     154              :   /// Return true if the device is of CPU type.
+     155     91850448 :   bool is_cpu() const noexcept {
+     156     91850448 :     return type_ == DeviceType::CPU;
+     157              :   }
+     158              : 
+     159              :   /// Return true if the device supports arbitrary strides.
+     160              :   bool supports_as_strided() const noexcept {
+     161              :     return type_ != DeviceType::IPU && type_ != DeviceType::XLA &&
+     162              :         type_ != DeviceType::Lazy && type_ != DeviceType::MTIA;
+     163              :   }
+     164              : 
+     165              :   /// Same string as returned from operator<<.
+     166              :   std::string str() const;
+     167              : 
+     168              :  private:
+     169              :   DeviceType type_;
+     170              :   DeviceIndex index_ = -1;
+     171     91850448 :   void validate() {
+     172              :     // Removing these checks in release builds noticeably improves
+     173              :     // performance in micro-benchmarks.
+     174              :     // This is safe to do, because backends that use the DeviceIndex
+     175              :     // have a later check when we actually try to switch to that device.
+     176     91850448 :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+     177              :         index_ >= -1,
+     178              :         "Device index must be -1 or non-negative, got ",
+     179              :         static_cast<int>(index_));
+     180     91850448 :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+     181              :         !is_cpu() || index_ <= 0,
+     182              :         "CPU device index must be -1 or zero, got ",
+     183              :         static_cast<int>(index_));
+     184     91850448 :   }
+     185              : };
+     186              : 
+     187              : C10_API std::ostream& operator<<(std::ostream& stream, const Device& device);
+     188              : 
+     189              : } // namespace c10
+     190              : 
+     191              : namespace std {
+     192              : template <>
+     193              : struct hash<c10::Device> {
+     194              :   size_t operator()(c10::Device d) const noexcept {
+     195              :     // Are you here because this static assert failed?  Make sure you ensure
+     196              :     // that the bitmasking code below is updated accordingly!
+     197              :     static_assert(sizeof(c10::DeviceType) == 1, "DeviceType is not 8-bit");
+     198              :     static_assert(sizeof(c10::DeviceIndex) == 1, "DeviceIndex is not 8-bit");
+     199              :     // Note [Hazard when concatenating signed integers]
+     200              :     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     201              :     // We must first convert to a same-sized unsigned type, before promoting to
+     202              :     // the result type, to prevent sign extension when any of the values is -1.
+     203              :     // If sign extension occurs, you'll clobber all of the values in the MSB
+     204              :     // half of the resulting integer.
+     205              :     //
+     206              :     // Technically, by C/C++ integer promotion rules, we only need one of the
+     207              :     // uint32_t casts to the result type, but we put in both for explicitness's
+     208              :     // sake.
+     209              :     uint32_t bits = static_cast<uint32_t>(static_cast<uint8_t>(d.type()))
+     210              :             << 16 |
+     211              :         static_cast<uint32_t>(static_cast<uint8_t>(d.index()));
+     212              :     return std::hash<uint32_t>{}(bits);
+     213              :   }
+     214              : };
+     215              : } // namespace std
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/GradMode.h.func-c.html b/html/libtorch/include/c10/core/GradMode.h.func-c.html new file mode 100644 index 0000000..0f0b880 --- /dev/null +++ b/html/libtorch/include/c10/core/GradMode.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/GradMode.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - GradMode.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %70
Test Date:2024-04-30 13:17:26Functions:0.0 %30
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1011NoGradGuardC2Ev0
_ZN3c1012AutoGradModeC2Eb0
_ZN3c1012AutoGradModeD2Ev0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/GradMode.h.func.html b/html/libtorch/include/c10/core/GradMode.h.func.html new file mode 100644 index 0000000..231f6f7 --- /dev/null +++ b/html/libtorch/include/c10/core/GradMode.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/GradMode.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - GradMode.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %70
Test Date:2024-04-30 13:17:26Functions:0.0 %30
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1011NoGradGuardC2Ev0
_ZN3c1012AutoGradModeC2Eb0
_ZN3c1012AutoGradModeD2Ev0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/GradMode.h.gcov.html b/html/libtorch/include/c10/core/GradMode.h.gcov.html new file mode 100644 index 0000000..1702be3 --- /dev/null +++ b/html/libtorch/include/c10/core/GradMode.h.gcov.html @@ -0,0 +1,120 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/GradMode.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - GradMode.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %70
Test Date:2024-04-30 13:17:26Functions:0.0 %30
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <c10/core/AutogradState.h>
+       4              : #include <c10/macros/Export.h>
+       5              : 
+       6              : namespace c10 {
+       7              : 
+       8              : struct C10_API GradMode {
+       9              :   static bool is_enabled();
+      10              :   static void set_enabled(bool enabled);
+      11              : };
+      12              : 
+      13              : // A RAII, thread local (!) guard that enables or disables grad mode upon
+      14              : // construction, and sets it back to the original value upon destruction.
+      15              : struct C10_API AutoGradMode {
+      16            0 :   AutoGradMode(bool enabled) : prev_mode(GradMode::is_enabled()) {
+      17            0 :     GradMode::set_enabled(enabled);
+      18            0 :   }
+      19            0 :   ~AutoGradMode() {
+      20            0 :     GradMode::set_enabled(prev_mode);
+      21            0 :   }
+      22              :   bool prev_mode;
+      23              : };
+      24              : 
+      25              : // A RAII, thread local (!) guard that stops future operations from building
+      26              : // gradients.
+      27              : struct C10_API NoGradGuard : public AutoGradMode {
+      28            0 :   NoGradGuard() : AutoGradMode(/*enabled=*/false) {}
+      29              : };
+      30              : 
+      31              : // A RAII, thread local (!) guard that enables or disables forward grad mode
+      32              : // upon construction, and sets it back to the original value upon destruction.
+      33              : struct C10_API AutoFwGradMode {
+      34              :   AutoFwGradMode(bool enabled)
+      35              :       : prev_mode(AutogradState::get_tls_state().get_fw_grad_mode()) {
+      36              :     AutogradState::get_tls_state().set_fw_grad_mode(enabled);
+      37              :   }
+      38              :   ~AutoFwGradMode() {
+      39              :     AutogradState::get_tls_state().set_fw_grad_mode(prev_mode);
+      40              :   }
+      41              :   bool prev_mode;
+      42              : };
+      43              : 
+      44              : } // namespace c10
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/Scalar.h.func-c.html b/html/libtorch/include/c10/core/Scalar.h.func-c.html new file mode 100644 index 0000000..c49479f --- /dev/null +++ b/html/libtorch/include/c10/core/Scalar.h.func-c.html @@ -0,0 +1,201 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/Scalar.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - Scalar.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:82.6 %2319
Test Date:2024-04-30 13:17:26Functions:93.3 %1514
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK3c106Scalar9isBooleanEv0
_ZNK3c106Scalar10isIntegralEb7072
_ZNK3c106Scalar6toLongEv7072
_ZN3c106ScalarC2Ev401318
_ZN3c106ScalarC2IdLPb0EEET_b5160312
_ZN3c106ScalarC2IfLPb0EEET_b366
_ZN3c106ScalarC2IdLPb0EEET_b5159946
_ZN3c106ScalarC2IiLPb0EEET_b5573966
_ZN3c106ScalarC2IlLPb0EEET_b401318
_ZN3c106ScalarC2IiLPb0EEET_b5172648
_ZN3c106Scalar3v_tC2Ev10734278
_ZN3c106ScalarC2Ed10734278
_ZN3c106ScalarC2Ef366
_ZN3c106ScalarC2El401318
_ZN3c106ScalarC2Ed5159946
_ZN3c106ScalarC2Ei5172648
_ZN3c106Scalar7destroyEv10741350
_ZN3c106ScalarD2Ev10741350
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/Scalar.h.func.html b/html/libtorch/include/c10/core/Scalar.h.func.html new file mode 100644 index 0000000..08c6230 --- /dev/null +++ b/html/libtorch/include/c10/core/Scalar.h.func.html @@ -0,0 +1,201 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/Scalar.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - Scalar.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:82.6 %2319
Test Date:2024-04-30 13:17:26Functions:93.3 %1514
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c106Scalar3v_tC2Ev10734278
_ZN3c106Scalar7destroyEv10741350
_ZN3c106ScalarC2Ed10734278
_ZN3c106ScalarC2Ed5159946
_ZN3c106ScalarC2Ef366
_ZN3c106ScalarC2Ei5172648
_ZN3c106ScalarC2El401318
_ZN3c106ScalarC2Ev401318
_ZN3c106ScalarC2IdLPb0EEET_b5160312
_ZN3c106ScalarC2IdLPb0EEET_b5159946
_ZN3c106ScalarC2IfLPb0EEET_b366
_ZN3c106ScalarC2IiLPb0EEET_b5573966
_ZN3c106ScalarC2IiLPb0EEET_b5172648
_ZN3c106ScalarC2IlLPb0EEET_b401318
_ZN3c106ScalarD2Ev10741350
_ZNK3c106Scalar10isIntegralEb7072
_ZNK3c106Scalar6toLongEv7072
_ZNK3c106Scalar9isBooleanEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/Scalar.h.gcov.html b/html/libtorch/include/c10/core/Scalar.h.gcov.html new file mode 100644 index 0000000..564b773 --- /dev/null +++ b/html/libtorch/include/c10/core/Scalar.h.gcov.html @@ -0,0 +1,454 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/Scalar.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - Scalar.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:82.6 %2319
Test Date:2024-04-30 13:17:26Functions:93.3 %1514
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <stdint.h>
+       4              : #include <stdexcept>
+       5              : #include <type_traits>
+       6              : #include <utility>
+       7              : 
+       8              : #include <c10/core/OptionalRef.h>
+       9              : #include <c10/core/ScalarType.h>
+      10              : #include <c10/core/SymFloat.h>
+      11              : #include <c10/core/SymInt.h>
+      12              : #include <c10/macros/Macros.h>
+      13              : #include <c10/util/Exception.h>
+      14              : #include <c10/util/Half.h>
+      15              : #include <c10/util/TypeCast.h>
+      16              : #include <c10/util/intrusive_ptr.h>
+      17              : 
+      18              : C10_CLANG_DIAGNOSTIC_PUSH()
+      19              : #if C10_CLANG_HAS_WARNING("-Wimplicit-int-float-conversion")
+      20              : C10_CLANG_DIAGNOSTIC_IGNORE("-Wimplicit-int-float-conversion")
+      21              : #endif
+      22              : 
+      23              : namespace c10 {
+      24              : 
+      25              : /**
+      26              :  * Scalar represents a 0-dimensional tensor which contains a single element.
+      27              :  * Unlike a tensor, numeric literals (in C++) are implicitly convertible to
+      28              :  * Scalar (which is why, for example, we provide both add(Tensor) and
+      29              :  * add(Scalar) overloads for many operations). It may also be used in
+      30              :  * circumstances where you statically know a tensor is 0-dim and single size,
+      31              :  * but don't know its type.
+      32              :  */
+      33              : class C10_API Scalar {
+      34              :  public:
+      35       401318 :   Scalar() : Scalar(int64_t(0)) {}
+      36              : 
+      37     10741350 :   void destroy() {
+      38     10741350 :     if (Tag::HAS_si == tag || Tag::HAS_sd == tag || Tag::HAS_sb == tag) {
+      39            0 :       raw::intrusive_ptr::decref(v.p);
+      40            0 :       v.p = nullptr;
+      41              :     }
+      42     10741350 :   }
+      43              : 
+      44     10741350 :   ~Scalar() {
+      45     10741350 :     destroy();
+      46     10741350 :   }
+      47              : 
+      48              : #define DEFINE_IMPLICIT_CTOR(type, name) \
+      49              :   Scalar(type vv) : Scalar(vv, true) {}
+      50              : 
+      51     10734278 :   AT_FORALL_SCALAR_TYPES_AND5(
+      52              :       Half,
+      53              :       BFloat16,
+      54              :       Float8_e5m2,
+      55              :       Float8_e4m3fn,
+      56              :       ComplexHalf,
+      57              :       DEFINE_IMPLICIT_CTOR)
+      58              :   AT_FORALL_COMPLEX_TYPES(DEFINE_IMPLICIT_CTOR)
+      59              : 
+      60              : #undef DEFINE_IMPLICIT_CTOR
+      61              : 
+      62              :   // Value* is both implicitly convertible to SymbolicVariable and bool which
+      63              :   // causes ambiguity error. Specialized constructor for bool resolves this
+      64              :   // problem.
+      65              :   template <
+      66              :       typename T,
+      67              :       typename std::enable_if<std::is_same<T, bool>::value, bool>::type* =
+      68              :           nullptr>
+      69              :   Scalar(T vv) : tag(Tag::HAS_b) {
+      70              :     v.i = convert<int64_t, bool>(vv);
+      71              :   }
+      72              : 
+      73              :   template <
+      74              :       typename T,
+      75              :       typename std::enable_if<std::is_same<T, c10::SymBool>::value, bool>::
+      76              :           type* = nullptr>
+      77              :   Scalar(T vv) : tag(Tag::HAS_sb) {
+      78              :     v.i = convert<int64_t, c10::SymBool>(vv);
+      79              :   }
+      80              : 
+      81              : #define DEFINE_ACCESSOR(type, name)                                   \
+      82              :   type to##name() const {                                             \
+      83              :     if (Tag::HAS_d == tag) {                                          \
+      84              :       return checked_convert<type, double>(v.d, #type);               \
+      85              :     } else if (Tag::HAS_z == tag) {                                   \
+      86              :       return checked_convert<type, c10::complex<double>>(v.z, #type); \
+      87              :     }                                                                 \
+      88              :     if (Tag::HAS_b == tag) {                                          \
+      89              :       return checked_convert<type, bool>(v.i, #type);                 \
+      90              :     } else if (Tag::HAS_i == tag) {                                   \
+      91              :       return checked_convert<type, int64_t>(v.i, #type);              \
+      92              :     } else if (Tag::HAS_si == tag) {                                  \
+      93              :       TORCH_CHECK(false, "tried to get " #name " out of SymInt")      \
+      94              :     } else if (Tag::HAS_sd == tag) {                                  \
+      95              :       TORCH_CHECK(false, "tried to get " #name " out of SymFloat")    \
+      96              :     } else if (Tag::HAS_sb == tag) {                                  \
+      97              :       TORCH_CHECK(false, "tried to get " #name " out of SymBool")     \
+      98              :     }                                                                 \
+      99              :     TORCH_CHECK(false)                                                \
+     100              :   }
+     101              : 
+     102              :   // TODO: Support ComplexHalf accessor
+     103         7072 :   AT_FORALL_SCALAR_TYPES_WITH_COMPLEX(DEFINE_ACCESSOR)
+     104              : 
+     105              : #undef DEFINE_ACCESSOR
+     106              : 
+     107              :   SymInt toSymInt() const {
+     108              :     if (Tag::HAS_si == tag) {
+     109              :       return c10::SymInt(intrusive_ptr<SymNodeImpl>::reclaim_copy(
+     110              :           static_cast<SymNodeImpl*>(v.p)));
+     111              :     } else {
+     112              :       return toLong();
+     113              :     }
+     114              :   }
+     115              : 
+     116              :   SymFloat toSymFloat() const {
+     117              :     if (Tag::HAS_sd == tag) {
+     118              :       return c10::SymFloat(intrusive_ptr<SymNodeImpl>::reclaim_copy(
+     119              :           static_cast<SymNodeImpl*>(v.p)));
+     120              :     } else {
+     121              :       return toDouble();
+     122              :     }
+     123              :   }
+     124              : 
+     125              :   SymBool toSymBool() const {
+     126              :     if (Tag::HAS_sb == tag) {
+     127              :       return c10::SymBool(intrusive_ptr<SymNodeImpl>::reclaim_copy(
+     128              :           static_cast<SymNodeImpl*>(v.p)));
+     129              :     } else {
+     130              :       return toBool();
+     131              :     }
+     132              :   }
+     133              : 
+     134              :   // also support scalar.to<int64_t>();
+     135              :   // Deleted for unsupported types, but specialized below for supported types
+     136              :   template <typename T>
+     137              :   T to() const = delete;
+     138              : 
+     139              :   // audit uses of data_ptr
+     140              :   const void* data_ptr() const {
+     141              :     TORCH_INTERNAL_ASSERT(!isSymbolic());
+     142              :     return static_cast<const void*>(&v);
+     143              :   }
+     144              : 
+     145              :   bool isFloatingPoint() const {
+     146              :     return Tag::HAS_d == tag || Tag::HAS_sd == tag;
+     147              :   }
+     148              : 
+     149              :   C10_DEPRECATED_MESSAGE(
+     150              :       "isIntegral is deprecated. Please use the overload with 'includeBool' parameter instead.")
+     151              :   bool isIntegral() const {
+     152              :     return Tag::HAS_i == tag || Tag::HAS_si == tag;
+     153              :   }
+     154         7072 :   bool isIntegral(bool includeBool) const {
+     155         7072 :     return Tag::HAS_i == tag || Tag::HAS_si == tag ||
+     156         7072 :         (includeBool && isBoolean());
+     157              :   }
+     158              : 
+     159              :   bool isComplex() const {
+     160              :     return Tag::HAS_z == tag;
+     161              :   }
+     162            0 :   bool isBoolean() const {
+     163            0 :     return Tag::HAS_b == tag || Tag::HAS_sb == tag;
+     164              :   }
+     165              : 
+     166              :   // you probably don't actually want these; they're mostly for testing
+     167              :   bool isSymInt() const {
+     168              :     return Tag::HAS_si == tag;
+     169              :   }
+     170              :   bool isSymFloat() const {
+     171              :     return Tag::HAS_sd == tag;
+     172              :   }
+     173              :   bool isSymBool() const {
+     174              :     return Tag::HAS_sb == tag;
+     175              :   }
+     176              : 
+     177              :   bool isSymbolic() const {
+     178              :     return Tag::HAS_si == tag || Tag::HAS_sd == tag || Tag::HAS_sb == tag;
+     179              :   }
+     180              : 
+     181              :   C10_ALWAYS_INLINE Scalar& operator=(Scalar&& other) noexcept {
+     182              :     if (&other == this) {
+     183              :       return *this;
+     184              :     }
+     185              : 
+     186              :     destroy();
+     187              :     moveFrom(std::move(other));
+     188              :     return *this;
+     189              :   }
+     190              : 
+     191              :   C10_ALWAYS_INLINE Scalar& operator=(const Scalar& other) {
+     192              :     if (&other == this) {
+     193              :       return *this;
+     194              :     }
+     195              : 
+     196              :     *this = Scalar(other);
+     197              :     return *this;
+     198              :   }
+     199              : 
+     200              :   Scalar operator-() const;
+     201              :   Scalar conj() const;
+     202              :   Scalar log() const;
+     203              : 
+     204              :   template <
+     205              :       typename T,
+     206              :       typename std::enable_if<!c10::is_complex<T>::value, int>::type = 0>
+     207              :   bool equal(T num) const {
+     208              :     if (isComplex()) {
+     209              :       TORCH_INTERNAL_ASSERT(!isSymbolic());
+     210              :       auto val = v.z;
+     211              :       return (val.real() == num) && (val.imag() == T());
+     212              :     } else if (isFloatingPoint()) {
+     213              :       TORCH_CHECK(!isSymbolic(), "NYI SymFloat equality");
+     214              :       return v.d == num;
+     215              :     } else if (isIntegral(/*includeBool=*/false)) {
+     216              :       TORCH_CHECK(!isSymbolic(), "NYI SymInt equality");
+     217              :       return v.i == num;
+     218              :     } else if (isBoolean()) {
+     219              :       // boolean scalar does not equal to a non boolean value
+     220              :       TORCH_INTERNAL_ASSERT(!isSymbolic());
+     221              :       return false;
+     222              :     } else {
+     223              :       TORCH_INTERNAL_ASSERT(false);
+     224              :     }
+     225              :   }
+     226              : 
+     227              :   template <
+     228              :       typename T,
+     229              :       typename std::enable_if<c10::is_complex<T>::value, int>::type = 0>
+     230              :   bool equal(T num) const {
+     231              :     if (isComplex()) {
+     232              :       TORCH_INTERNAL_ASSERT(!isSymbolic());
+     233              :       return v.z == num;
+     234              :     } else if (isFloatingPoint()) {
+     235              :       TORCH_CHECK(!isSymbolic(), "NYI SymFloat equality");
+     236              :       return (v.d == num.real()) && (num.imag() == T());
+     237              :     } else if (isIntegral(/*includeBool=*/false)) {
+     238              :       TORCH_CHECK(!isSymbolic(), "NYI SymInt equality");
+     239              :       return (v.i == num.real()) && (num.imag() == T());
+     240              :     } else if (isBoolean()) {
+     241              :       // boolean scalar does not equal to a non boolean value
+     242              :       TORCH_INTERNAL_ASSERT(!isSymbolic());
+     243              :       return false;
+     244              :     } else {
+     245              :       TORCH_INTERNAL_ASSERT(false);
+     246              :     }
+     247              :   }
+     248              : 
+     249              :   bool equal(bool num) const {
+     250              :     if (isBoolean()) {
+     251              :       TORCH_INTERNAL_ASSERT(!isSymbolic());
+     252              :       return static_cast<bool>(v.i) == num;
+     253              :     } else {
+     254              :       return false;
+     255              :     }
+     256              :   }
+     257              : 
+     258              :   ScalarType type() const {
+     259              :     if (isComplex()) {
+     260              :       return ScalarType::ComplexDouble;
+     261              :     } else if (isFloatingPoint()) {
+     262              :       return ScalarType::Double;
+     263              :     } else if (isIntegral(/*includeBool=*/false)) {
+     264              :       return ScalarType::Long;
+     265              :     } else if (isBoolean()) {
+     266              :       return ScalarType::Bool;
+     267              :     } else {
+     268              :       throw std::runtime_error("Unknown scalar type.");
+     269              :     }
+     270              :   }
+     271              : 
+     272              :   Scalar(Scalar&& rhs) noexcept : tag(rhs.tag) {
+     273              :     moveFrom(std::move(rhs));
+     274              :   }
+     275              : 
+     276              :   Scalar(const Scalar& rhs) : tag(rhs.tag), v(rhs.v) {
+     277              :     if (isSymbolic()) {
+     278              :       c10::raw::intrusive_ptr::incref(v.p);
+     279              :     }
+     280              :   }
+     281              : 
+     282              :   Scalar(c10::SymInt si) {
+     283              :     if (auto m = si.maybe_as_int()) {
+     284              :       tag = Tag::HAS_i;
+     285              :       v.i = *m;
+     286              :     } else {
+     287              :       tag = Tag::HAS_si;
+     288              :       v.p = std::move(si).release();
+     289              :     }
+     290              :   }
+     291              : 
+     292              :   Scalar(c10::SymFloat sd) {
+     293              :     if (sd.is_symbolic()) {
+     294              :       tag = Tag::HAS_sd;
+     295              :       v.p = std::move(sd).release();
+     296              :     } else {
+     297              :       tag = Tag::HAS_d;
+     298              :       v.d = sd.as_float_unchecked();
+     299              :     }
+     300              :   }
+     301              : 
+     302              :   Scalar(c10::SymBool sb) {
+     303              :     if (auto m = sb.maybe_as_bool()) {
+     304              :       tag = Tag::HAS_b;
+     305              :       v.i = *m;
+     306              :     } else {
+     307              :       tag = Tag::HAS_sb;
+     308              :       v.p = std::move(sb).release();
+     309              :     }
+     310              :   }
+     311              : 
+     312              :   // We can't set v in the initializer list using the
+     313              :   // syntax v{ .member = ... } because it doesn't work on MSVC
+     314              :  private:
+     315              :   enum class Tag { HAS_d, HAS_i, HAS_z, HAS_b, HAS_sd, HAS_si, HAS_sb };
+     316              : 
+     317              :   // NB: assumes that self has already been cleared
+     318              :   C10_ALWAYS_INLINE void moveFrom(Scalar&& rhs) noexcept {
+     319              :     v = rhs.v;
+     320              :     tag = rhs.tag;
+     321              :     if (rhs.tag == Tag::HAS_si || rhs.tag == Tag::HAS_sd ||
+     322              :         rhs.tag == Tag::HAS_sb) {
+     323              :       // Move out of scalar
+     324              :       rhs.tag = Tag::HAS_i;
+     325              :       rhs.v.i = 0;
+     326              :     }
+     327              :   }
+     328              : 
+     329              :   Tag tag;
+     330              : 
+     331              :   union v_t {
+     332              :     double d{};
+     333              :     int64_t i;
+     334              :     c10::complex<double> z;
+     335              :     c10::intrusive_ptr_target* p;
+     336     10734278 :     v_t() {} // default constructor
+     337              :   } v;
+     338              : 
+     339              :   template <
+     340              :       typename T,
+     341              :       typename std::enable_if<
+     342              :           std::is_integral<T>::value && !std::is_same<T, bool>::value,
+     343              :           bool>::type* = nullptr>
+     344      5573966 :   Scalar(T vv, bool) : tag(Tag::HAS_i) {
+     345      5573966 :     v.i = convert<decltype(v.i), T>(vv);
+     346      5573966 :   }
+     347              : 
+     348              :   template <
+     349              :       typename T,
+     350              :       typename std::enable_if<
+     351              :           !std::is_integral<T>::value && !c10::is_complex<T>::value,
+     352              :           bool>::type* = nullptr>
+     353      5160312 :   Scalar(T vv, bool) : tag(Tag::HAS_d) {
+     354      5160312 :     v.d = convert<decltype(v.d), T>(vv);
+     355      5160312 :   }
+     356              : 
+     357              :   template <
+     358              :       typename T,
+     359              :       typename std::enable_if<c10::is_complex<T>::value, bool>::type* = nullptr>
+     360              :   Scalar(T vv, bool) : tag(Tag::HAS_z) {
+     361              :     v.z = convert<decltype(v.z), T>(vv);
+     362              :   }
+     363              : };
+     364              : 
+     365              : using OptionalScalarRef = c10::OptionalRef<Scalar>;
+     366              : 
+     367              : // define the scalar.to<int64_t>() specializations
+     368              : #define DEFINE_TO(T, name)         \
+     369              :   template <>                      \
+     370              :   inline T Scalar::to<T>() const { \
+     371              :     return to##name();             \
+     372              :   }
+     373              : AT_FORALL_SCALAR_TYPES_WITH_COMPLEX(DEFINE_TO)
+     374              : #undef DEFINE_TO
+     375              : 
+     376              : } // namespace c10
+     377              : 
+     378              : C10_CLANG_DIAGNOSTIC_POP()
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/ScalarType.h.func-c.html b/html/libtorch/include/c10/core/ScalarType.h.func-c.html new file mode 100644 index 0000000..1ddf5c2 --- /dev/null +++ b/html/libtorch/include/c10/core/ScalarType.h.func-c.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/ScalarType.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - ScalarType.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:50.0 %147
Test Date:2024-04-30 13:17:26Functions:50.0 %42
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c10L8toStringENS_10ScalarTypeE0
_ZN3c10lsERSoNS_10ScalarTypeE0
_ZN3c10L14isFloatingTypeENS_10ScalarTypeE876
_ZN3c10L13isComplexTypeENS_10ScalarTypeE401318
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/ScalarType.h.func.html b/html/libtorch/include/c10/core/ScalarType.h.func.html new file mode 100644 index 0000000..048f094 --- /dev/null +++ b/html/libtorch/include/c10/core/ScalarType.h.func.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/ScalarType.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - ScalarType.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:50.0 %147
Test Date:2024-04-30 13:17:26Functions:50.0 %42
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c10L13isComplexTypeENS_10ScalarTypeE401318
_ZN3c10L14isFloatingTypeENS_10ScalarTypeE876
_ZN3c10L8toStringENS_10ScalarTypeE0
_ZN3c10lsERSoNS_10ScalarTypeE0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/ScalarType.h.gcov.html b/html/libtorch/include/c10/core/ScalarType.h.gcov.html new file mode 100644 index 0000000..9efb1d4 --- /dev/null +++ b/html/libtorch/include/c10/core/ScalarType.h.gcov.html @@ -0,0 +1,633 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/ScalarType.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - ScalarType.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:50.0 %147
Test Date:2024-04-30 13:17:26Functions:50.0 %42
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <c10/util/BFloat16.h>
+       4              : #include <c10/util/Deprecated.h>
+       5              : #include <c10/util/Exception.h>
+       6              : #include <c10/util/Float8_e4m3fn.h>
+       7              : #include <c10/util/Float8_e5m2.h>
+       8              : #include <c10/util/Half.h>
+       9              : #include <c10/util/bits.h>
+      10              : #include <c10/util/complex.h>
+      11              : #include <c10/util/qint32.h>
+      12              : #include <c10/util/qint8.h>
+      13              : #include <c10/util/quint2x4.h>
+      14              : #include <c10/util/quint4x2.h>
+      15              : #include <c10/util/quint8.h>
+      16              : 
+      17              : #include <complex>
+      18              : #include <cstdint>
+      19              : #include <ostream>
+      20              : 
+      21              : namespace c10 {
+      22              : 
+      23              : // For the macros below:
+      24              : // NB: If you want to macro some code for all non-QInt scalar types (i.e. types
+      25              : // with complete information, you probably want one of the
+      26              : // AT_FORALL_SCALAR_TYPES / AT_FORALL_SCALAR_TYPES_AND
+      27              : // macros below, which are designed to behave similarly to the Dispatch macros
+      28              : // with the same name.
+      29              : 
+      30              : // NB: Order matters for this macro; it is relied upon in
+      31              : // _promoteTypesLookup and the serialization format.
+      32              : #define AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS(_) \
+      33              :   _(uint8_t, Byte) /* 0 */                               \
+      34              :   _(int8_t, Char) /* 1 */                                \
+      35              :   _(int16_t, Short) /* 2 */                              \
+      36              :   _(int, Int) /* 3 */                                    \
+      37              :   _(int64_t, Long) /* 4 */                               \
+      38              :   _(at::Half, Half) /* 5 */                              \
+      39              :   _(float, Float) /* 6 */                                \
+      40              :   _(double, Double) /* 7 */                              \
+      41              :   _(c10::complex<c10::Half>, ComplexHalf) /* 8 */        \
+      42              :   _(c10::complex<float>, ComplexFloat) /* 9 */           \
+      43              :   _(c10::complex<double>, ComplexDouble) /* 10 */        \
+      44              :   _(bool, Bool) /* 11 */                                 \
+      45              :   _(c10::qint8, QInt8) /* 12 */                          \
+      46              :   _(c10::quint8, QUInt8) /* 13 */                        \
+      47              :   _(c10::qint32, QInt32) /* 14 */                        \
+      48              :   _(at::BFloat16, BFloat16) /* 15 */                     \
+      49              :   _(c10::quint4x2, QUInt4x2) /* 16 */                    \
+      50              :   _(c10::quint2x4, QUInt2x4) /* 17 */                    \
+      51              :   _(c10::bits1x8, Bits1x8) /* 18 */                      \
+      52              :   _(c10::bits2x4, Bits2x4) /* 19 */                      \
+      53              :   _(c10::bits4x2, Bits4x2) /* 20 */                      \
+      54              :   _(c10::bits8, Bits8) /* 21 */                          \
+      55              :   _(c10::bits16, Bits16) /* 22 */                        \
+      56              :   _(c10::Float8_e5m2, Float8_e5m2) /* 23 */              \
+      57              :   _(c10::Float8_e4m3fn, Float8_e4m3fn) /* 24 */
+      58              : 
+      59              : // If you want to support ComplexHalf for real, add ComplexHalf
+      60              : // into this macro (and change the name).  But beware: convert()
+      61              : // doesn't work for all the conversions you need...
+      62              : #define AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_EXCEPT_COMPLEX_HALF(_) \
+      63              :   _(uint8_t, Byte)                                                 \
+      64              :   _(int8_t, Char)                                                  \
+      65              :   _(int16_t, Short)                                                \
+      66              :   _(int, Int)                                                      \
+      67              :   _(int64_t, Long)                                                 \
+      68              :   _(at::Half, Half)                                                \
+      69              :   _(float, Float)                                                  \
+      70              :   _(double, Double)                                                \
+      71              :   _(c10::complex<float>, ComplexFloat)                             \
+      72              :   _(c10::complex<double>, ComplexDouble)                           \
+      73              :   _(bool, Bool)                                                    \
+      74              :   _(at::BFloat16, BFloat16)                                        \
+      75              :   _(at::Float8_e5m2, Float8_e5m2)                                  \
+      76              :   _(at::Float8_e4m3fn, Float8_e4m3fn)
+      77              : 
+      78              : #define AT_FORALL_SCALAR_TYPES_WITH_COMPLEX(_) \
+      79              :   _(uint8_t, Byte)                             \
+      80              :   _(int8_t, Char)                              \
+      81              :   _(int16_t, Short)                            \
+      82              :   _(int, Int)                                  \
+      83              :   _(int64_t, Long)                             \
+      84              :   _(at::Half, Half)                            \
+      85              :   _(float, Float)                              \
+      86              :   _(double, Double)                            \
+      87              :   _(c10::complex<c10::Half>, ComplexHalf)      \
+      88              :   _(c10::complex<float>, ComplexFloat)         \
+      89              :   _(c10::complex<double>, ComplexDouble)       \
+      90              :   _(bool, Bool)                                \
+      91              :   _(at::BFloat16, BFloat16)                    \
+      92              :   _(at::Float8_e5m2, Float8_e5m2)              \
+      93              :   _(at::Float8_e4m3fn, Float8_e4m3fn)
+      94              : 
+      95              : enum class ScalarType : int8_t {
+      96              : #define DEFINE_ENUM(_1, n) n,
+      97              :   AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS(DEFINE_ENUM)
+      98              : #undef DEFINE_ENUM
+      99              :       Undefined,
+     100              :   NumOptions
+     101              : };
+     102              : 
+     103              : constexpr uint16_t NumScalarTypes =
+     104              :     static_cast<uint16_t>(ScalarType::NumOptions);
+     105              : 
+     106              : namespace impl {
+     107              : 
+     108              : // These are used to map ScalarTypes to C++ types.
+     109              : 
+     110              : template <c10::ScalarType N>
+     111              : struct ScalarTypeToCPPType;
+     112              : 
+     113              : #define SPECIALIZE_ScalarTypeToCPPType(cpp_type, scalar_type)                \
+     114              :   template <>                                                                \
+     115              :   struct ScalarTypeToCPPType<c10::ScalarType::scalar_type> {                 \
+     116              :     using type = cpp_type;                                                   \
+     117              :                                                                              \
+     118              :     /* This is a workaround for the CUDA bug which prevents */               \
+     119              :     /* ::detail::ScalarTypeToCType<T>::type being used directly due to */    \
+     120              :     /* ambiguous reference which can't to be resolved. For some reason it */ \
+     121              :     /* can't pick between at::detail and at::cuda::detail. */                \
+     122              :     /* For repro example, please see: */                                     \
+     123              :     /* https://gist.github.com/izdeby/952ae7cf256ddb740a73776d39a7e7ba */    \
+     124              :     /* TODO: remove once the bug is fixed. */                                \
+     125              :     static type t;                                                           \
+     126              :   };
+     127              : 
+     128              : AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS(SPECIALIZE_ScalarTypeToCPPType)
+     129              : 
+     130              : #undef SPECIALIZE_ScalarTypeToCPPType
+     131              : 
+     132              : template <c10::ScalarType N>
+     133              : using ScalarTypeToCPPTypeT = typename ScalarTypeToCPPType<N>::type;
+     134              : 
+     135              : } // namespace impl
+     136              : 
+     137              : template <typename T>
+     138              : struct CppTypeToScalarType;
+     139              : 
+     140              : #define SPECIALIZE_CppTypeToScalarType(cpp_type, scalar_type)                  \
+     141              :   template <>                                                                  \
+     142              :   struct CppTypeToScalarType<cpp_type>                                         \
+     143              :       : std::                                                                  \
+     144              :             integral_constant<c10::ScalarType, c10::ScalarType::scalar_type> { \
+     145              :   };
+     146              : 
+     147              : AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS(SPECIALIZE_CppTypeToScalarType)
+     148              : 
+     149              : #undef SPECIALIZE_CppTypeToScalarType
+     150              : 
+     151              : #define AT_FORALL_INT_TYPES(_) \
+     152              :   _(uint8_t, Byte)             \
+     153              :   _(int8_t, Char)              \
+     154              :   _(int16_t, Short)            \
+     155              :   _(int, Int)                  \
+     156              :   _(int64_t, Long)
+     157              : 
+     158              : #define AT_FORALL_SCALAR_TYPES(_) \
+     159              :   _(uint8_t, Byte)                \
+     160              :   _(int8_t, Char)                 \
+     161              :   _(int16_t, Short)               \
+     162              :   _(int, Int)                     \
+     163              :   _(int64_t, Long)                \
+     164              :   _(float, Float)                 \
+     165              :   _(double, Double)
+     166              : 
+     167              : #define AT_FORALL_SCALAR_TYPES_AND(SCALARTYPE, _) \
+     168              :   _(uint8_t, Byte)                                \
+     169              :   _(int8_t, Char)                                 \
+     170              :   _(int16_t, Short)                               \
+     171              :   _(int, Int)                                     \
+     172              :   _(int64_t, Long)                                \
+     173              :   _(float, Float)                                 \
+     174              :   _(double, Double)                               \
+     175              :   _(decltype(::c10::impl::ScalarTypeToCPPType<    \
+     176              :              ::c10::ScalarType::SCALARTYPE>::t),  \
+     177              :     SCALARTYPE)
+     178              : 
+     179              : #define AT_FORALL_SCALAR_TYPES_AND2(SCALARTYPE1, SCALARTYPE2, _) \
+     180              :   _(uint8_t, Byte)                                               \
+     181              :   _(int8_t, Char)                                                \
+     182              :   _(int16_t, Short)                                              \
+     183              :   _(int, Int)                                                    \
+     184              :   _(int64_t, Long)                                               \
+     185              :   _(float, Float)                                                \
+     186              :   _(double, Double)                                              \
+     187              :   _(decltype(::c10::impl::ScalarTypeToCPPType<                   \
+     188              :              ::c10::ScalarType::SCALARTYPE1>::t),                \
+     189              :     SCALARTYPE1)                                                 \
+     190              :   _(decltype(::c10::impl::ScalarTypeToCPPType<                   \
+     191              :              ::c10::ScalarType::SCALARTYPE2>::t),                \
+     192              :     SCALARTYPE2)
+     193              : 
+     194              : #define AT_FORALL_SCALAR_TYPES_AND3(SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, _) \
+     195              :   _(uint8_t, Byte)                                                            \
+     196              :   _(int8_t, Char)                                                             \
+     197              :   _(int16_t, Short)                                                           \
+     198              :   _(int, Int)                                                                 \
+     199              :   _(int64_t, Long)                                                            \
+     200              :   _(float, Float)                                                             \
+     201              :   _(double, Double)                                                           \
+     202              :   _(decltype(::c10::impl::ScalarTypeToCPPType<                                \
+     203              :              ::c10::ScalarType::SCALARTYPE1>::t),                             \
+     204              :     SCALARTYPE1)                                                              \
+     205              :   _(decltype(::c10::impl::ScalarTypeToCPPType<                                \
+     206              :              ::c10::ScalarType::SCALARTYPE2>::t),                             \
+     207              :     SCALARTYPE2)                                                              \
+     208              :   _(decltype(::c10::impl::ScalarTypeToCPPType<                                \
+     209              :              ::c10::ScalarType::SCALARTYPE3>::t),                             \
+     210              :     SCALARTYPE3)
+     211              : 
+     212              : #define AT_FORALL_SCALAR_TYPES_AND4(                       \
+     213              :     SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, SCALARTYPE4, _) \
+     214              :   _(uint8_t, Byte)                                         \
+     215              :   _(int8_t, Char)                                          \
+     216              :   _(int16_t, Short)                                        \
+     217              :   _(int, Int)                                              \
+     218              :   _(int64_t, Long)                                         \
+     219              :   _(float, Float)                                          \
+     220              :   _(double, Double)                                        \
+     221              :   _(decltype(::c10::impl::ScalarTypeToCPPType<             \
+     222              :              ::c10::ScalarType::SCALARTYPE1>::t),          \
+     223              :     SCALARTYPE1)                                           \
+     224              :   _(decltype(::c10::impl::ScalarTypeToCPPType<             \
+     225              :              ::c10::ScalarType::SCALARTYPE2>::t),          \
+     226              :     SCALARTYPE2)                                           \
+     227              :   _(decltype(::c10::impl::ScalarTypeToCPPType<             \
+     228              :              ::c10::ScalarType::SCALARTYPE3>::t),          \
+     229              :     SCALARTYPE3)                                           \
+     230              :   _(decltype(::c10::impl::ScalarTypeToCPPType<             \
+     231              :              ::c10::ScalarType::SCALARTYPE4>::t),          \
+     232              :     SCALARTYPE4)
+     233              : 
+     234              : #define AT_FORALL_SCALAR_TYPES_AND5(                                    \
+     235              :     SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, SCALARTYPE4, SCALARTYPE5, _) \
+     236              :   _(uint8_t, Byte)                                                      \
+     237              :   _(int8_t, Char)                                                       \
+     238              :   _(int16_t, Short)                                                     \
+     239              :   _(int, Int)                                                           \
+     240              :   _(int64_t, Long)                                                      \
+     241              :   _(float, Float)                                                       \
+     242              :   _(double, Double)                                                     \
+     243              :   _(decltype(::c10::impl::ScalarTypeToCPPType<                          \
+     244              :              ::c10::ScalarType::SCALARTYPE1>::t),                       \
+     245              :     SCALARTYPE1)                                                        \
+     246              :   _(decltype(::c10::impl::ScalarTypeToCPPType<                          \
+     247              :              ::c10::ScalarType::SCALARTYPE2>::t),                       \
+     248              :     SCALARTYPE2)                                                        \
+     249              :   _(decltype(::c10::impl::ScalarTypeToCPPType<                          \
+     250              :              ::c10::ScalarType::SCALARTYPE3>::t),                       \
+     251              :     SCALARTYPE3)                                                        \
+     252              :   _(decltype(::c10::impl::ScalarTypeToCPPType<                          \
+     253              :              ::c10::ScalarType::SCALARTYPE4>::t),                       \
+     254              :     SCALARTYPE4)                                                        \
+     255              :   _(decltype(::c10::impl::ScalarTypeToCPPType<                          \
+     256              :              ::c10::ScalarType::SCALARTYPE5>::t),                       \
+     257              :     SCALARTYPE5)
+     258              : 
+     259              : #define AT_FORALL_QINT_TYPES(_) \
+     260              :   _(c10::qint8, QInt8)          \
+     261              :   _(c10::quint8, QUInt8)        \
+     262              :   _(c10::qint32, QInt32)        \
+     263              :   _(c10::quint4x2, QUInt4x2)    \
+     264              :   _(c10::quint2x4, QUInt2x4)
+     265              : 
+     266              : #define AT_FORALL_COMPLEX_TYPES(_)     \
+     267              :   _(c10::complex<float>, ComplexFloat) \
+     268              :   _(c10::complex<double>, ComplexDouble)
+     269              : 
+     270              : #define DEFINE_CONSTANT(_, name) \
+     271              :   constexpr ScalarType k##name = ScalarType::name;
+     272              : 
+     273              : AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS(DEFINE_CONSTANT)
+     274              : #undef DEFINE_CONSTANT
+     275              : 
+     276            0 : static inline const char* toString(ScalarType t) {
+     277              : #define DEFINE_CASE(_, name) \
+     278              :   case ScalarType::name:     \
+     279              :     return #name;
+     280              : 
+     281            0 :   switch (t) {
+     282            0 :     AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS(DEFINE_CASE)
+     283            0 :     default:
+     284            0 :       return "UNKNOWN_SCALAR";
+     285              :   }
+     286              : #undef DEFINE_CASE
+     287              : }
+     288              : 
+     289              : static inline size_t elementSize(ScalarType t) {
+     290              : #define CASE_ELEMENTSIZE_CASE(ctype, name) \
+     291              :   case ScalarType::name:                   \
+     292              :     return sizeof(ctype);
+     293              : 
+     294              :   switch (t) {
+     295              :     AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS(CASE_ELEMENTSIZE_CASE)
+     296              :     default:
+     297              :       TORCH_CHECK(false, "Unknown ScalarType");
+     298              :   }
+     299              : #undef CASE_ELEMENTSIZE_CASE
+     300              : }
+     301              : 
+     302              : static inline bool isIntegralType(ScalarType t, bool includeBool) {
+     303              :   bool isIntegral =
+     304              :       (t == ScalarType::Byte || t == ScalarType::Char || t == ScalarType::Int ||
+     305              :        t == ScalarType::Long || t == ScalarType::Short);
+     306              : 
+     307              :   return isIntegral || (includeBool && t == ScalarType::Bool);
+     308              : }
+     309              : 
+     310              : C10_DEPRECATED_MESSAGE(
+     311              :     "isIntegralType is deprecated. Please use the overload with 'includeBool' parameter instead.")
+     312              : static inline bool isIntegralType(ScalarType t) {
+     313              :   return isIntegralType(t, /*includeBool=*/false);
+     314              : }
+     315              : 
+     316          876 : static inline bool isFloatingType(ScalarType t) {
+     317              :   return (
+     318          876 :       t == ScalarType::Double || t == ScalarType::Float ||
+     319          756 :       t == ScalarType::Half || t == ScalarType::BFloat16 ||
+     320         1752 :       t == ScalarType::Float8_e5m2 || t == ScalarType::Float8_e4m3fn);
+     321              : }
+     322              : 
+     323              : static inline bool isFloat8Type(ScalarType t) {
+     324              :   return t == ScalarType::Float8_e4m3fn || t == ScalarType::Float8_e5m2;
+     325              : }
+     326              : static inline bool isReducedFloatingType(ScalarType t) {
+     327              :   return t == ScalarType::Half || t == ScalarType::BFloat16 || isFloat8Type(t);
+     328              : }
+     329              : 
+     330       401318 : static inline bool isComplexType(ScalarType t) {
+     331              :   return (
+     332       401318 :       t == ScalarType::ComplexHalf || t == ScalarType::ComplexFloat ||
+     333       401318 :       t == ScalarType::ComplexDouble);
+     334              : }
+     335              : 
+     336              : static inline bool isQIntType(ScalarType t) {
+     337              :   // Don't forget to extend this when adding new QInt types
+     338              :   return t == ScalarType::QInt8 || t == ScalarType::QUInt8 ||
+     339              :       t == ScalarType::QInt32 || t == ScalarType::QUInt4x2 ||
+     340              :       t == ScalarType::QUInt2x4;
+     341              : }
+     342              : 
+     343              : static inline bool isBitsType(ScalarType t) {
+     344              :   return t == ScalarType::Bits1x8 || t == ScalarType::Bits2x4 ||
+     345              :       t == ScalarType::Bits4x2 || t == ScalarType::Bits8 ||
+     346              :       t == ScalarType::Bits16;
+     347              : }
+     348              : 
+     349              : static inline ScalarType toQIntType(ScalarType t) {
+     350              :   switch (t) {
+     351              :     case ScalarType::Byte:
+     352              :       return ScalarType::QUInt8;
+     353              :     case ScalarType::Char:
+     354              :       return ScalarType::QInt8;
+     355              :     case ScalarType::Int:
+     356              :       return ScalarType::QInt32;
+     357              :     default:
+     358              :       return t;
+     359              :   }
+     360              : }
+     361              : 
+     362              : static inline ScalarType toUnderlying(ScalarType t) {
+     363              :   switch (t) {
+     364              :     case ScalarType::QUInt8:
+     365              :       return ScalarType::Byte;
+     366              :     case ScalarType::QInt8:
+     367              :       return ScalarType::Char;
+     368              :     case ScalarType::QInt32:
+     369              :       return ScalarType::Int;
+     370              :     case ScalarType::QUInt4x2:
+     371              :       return ScalarType::Byte;
+     372              :     case ScalarType::QUInt2x4:
+     373              :       return ScalarType::Byte;
+     374              :     default:
+     375              :       return t;
+     376              :   }
+     377              : }
+     378              : 
+     379              : static inline bool isSignedType(ScalarType t) {
+     380              :   TORCH_CHECK(!isQIntType(t), "isSignedType not supported for quantized types");
+     381              : #define CASE_SIGNED(ctype, name) \
+     382              :   case ScalarType::name:         \
+     383              :     return std::numeric_limits<ctype>::is_signed;
+     384              : 
+     385              :   switch (t) {
+     386              :     case ScalarType::Bits1x8:
+     387              :     case ScalarType::Bits2x4:
+     388              :     case ScalarType::Bits4x2:
+     389              :     case ScalarType::Bits8:
+     390              :     case ScalarType::Bits16:
+     391              :       TORCH_CHECK(false, "Bits types are undefined");
+     392              :     case ScalarType::ComplexHalf:
+     393              :     case ScalarType::ComplexFloat:
+     394              :     case ScalarType::ComplexDouble:
+     395              :       return true;
+     396              :       AT_FORALL_SCALAR_TYPES_AND5(
+     397              :           Half, Bool, BFloat16, Float8_e5m2, Float8_e4m3fn, CASE_SIGNED)
+     398              :     default:
+     399              :       TORCH_CHECK(false, "Unknown ScalarType");
+     400              :   }
+     401              : #undef CASE_SIGNED
+     402              : }
+     403              : 
+     404              : static inline bool isUnderlying(ScalarType type, ScalarType qtype) {
+     405              :   return type == toUnderlying(qtype);
+     406              : }
+     407              : 
+     408              : static inline ScalarType toRealValueType(ScalarType t) {
+     409              :   switch (t) {
+     410              :     case ScalarType::ComplexHalf:
+     411              :       return ScalarType::Half;
+     412              :     case ScalarType::ComplexFloat:
+     413              :       return ScalarType::Float;
+     414              :     case ScalarType::ComplexDouble:
+     415              :       return ScalarType::Double;
+     416              :     default:
+     417              :       return t;
+     418              :   }
+     419              : }
+     420              : 
+     421              : static inline ScalarType toComplexType(ScalarType t) {
+     422              :   switch (t) {
+     423              :     case ScalarType::BFloat16:
+     424              :       // BFloat16 has range equivalent to Float,
+     425              :       // so we map it to ComplexFloat.
+     426              :       return ScalarType::ComplexFloat;
+     427              :     case ScalarType::Half:
+     428              :       return ScalarType::ComplexHalf;
+     429              :     case ScalarType::Float:
+     430              :       return ScalarType::ComplexFloat;
+     431              :     case ScalarType::Double:
+     432              :       return ScalarType::ComplexDouble;
+     433              :     case ScalarType::ComplexHalf:
+     434              :       return ScalarType::ComplexHalf;
+     435              :     case ScalarType::ComplexFloat:
+     436              :       return ScalarType::ComplexFloat;
+     437              :     case ScalarType::ComplexDouble:
+     438              :       return ScalarType::ComplexDouble;
+     439              :     default:
+     440              :       TORCH_CHECK(false, "Unknown Complex ScalarType for ", t);
+     441              :   }
+     442              : }
+     443              : 
+     444              : // see tensor_attributes.rst for detailed explanation and examples
+     445              : // of casting rules.
+     446              : static inline bool canCast(const ScalarType from, const ScalarType to) {
+     447              :   // We disallow complex -> non complex, e.g., float_tensor *= complex is
+     448              :   // disallowed.
+     449              :   if (isComplexType(from) && !isComplexType(to)) {
+     450              :     return false;
+     451              :   }
+     452              :   // We disallow float -> integral, e.g., int_tensor *= float is disallowed.
+     453              :   if (isFloatingType(from) && isIntegralType(to, false)) {
+     454              :     return false;
+     455              :   }
+     456              : 
+     457              :   // Treat bool as a distinct "category," to be consistent with type promotion
+     458              :   // rules (e.g. `bool_tensor + 5 -> int64_tensor`). If `5` was in the same
+     459              :   // category as `bool_tensor`, we would not promote. Differing categories
+     460              :   // implies `bool_tensor += 5` is disallowed.
+     461              :   //
+     462              :   // NB: numpy distinguishes "unsigned" as a category to get the desired
+     463              :   // `bool_tensor + 5 -> int64_tensor` behavior. We don't, because:
+     464              :   // * We don't want the performance hit of checking the runtime sign of
+     465              :   // Scalars.
+     466              :   // * `uint8_tensor + 5 -> int64_tensor` would be undesirable.
+     467              :   if (from != ScalarType::Bool && to == ScalarType::Bool) {
+     468              :     return false;
+     469              :   }
+     470              :   return true;
+     471              : }
+     472              : 
+     473              : static inline ScalarType promoteTypes(ScalarType a, ScalarType b) {
+     474              :   // This is generated according to NumPy's promote_types
+     475              :   constexpr auto u1 = ScalarType::Byte;
+     476              :   constexpr auto i1 = ScalarType::Char;
+     477              :   constexpr auto i2 = ScalarType::Short;
+     478              :   constexpr auto i4 = ScalarType::Int;
+     479              :   constexpr auto i8 = ScalarType::Long;
+     480              :   constexpr auto f2 = ScalarType::Half;
+     481              :   constexpr auto f4 = ScalarType::Float;
+     482              :   constexpr auto f8 = ScalarType::Double;
+     483              :   constexpr auto c2 = ScalarType::ComplexHalf;
+     484              :   constexpr auto c4 = ScalarType::ComplexFloat;
+     485              :   constexpr auto c8 = ScalarType::ComplexDouble;
+     486              :   constexpr auto b1 = ScalarType::Bool;
+     487              :   constexpr auto bf = ScalarType::BFloat16;
+     488              :   constexpr auto b8 = ScalarType::Float8_e5m2;
+     489              :   constexpr auto h8 = ScalarType::Float8_e4m3fn;
+     490              :   constexpr auto ud = ScalarType::Undefined;
+     491              :   if (a == ud || b == ud) {
+     492              :     return ScalarType::Undefined;
+     493              :   }
+     494              : 
+     495              :   // For QInt types, we only allow exact match
+     496              :   if (isQIntType(a) && a == b) {
+     497              :     return a;
+     498              :   }
+     499              : 
+     500              :   if (isQIntType(a) || isQIntType(b)) {
+     501              :     TORCH_CHECK(
+     502              :         false,
+     503              :         "promoteTypes with quantized numbers is not handled yet; figure out what the correct rules should be, offending types: ",
+     504              :         toString(a),
+     505              :         " ",
+     506              :         toString(b));
+     507              :   }
+     508              : 
+     509              :   if (isBitsType(a) && a == b) {
+     510              :     return a;
+     511              :   } else if (isBitsType(a) || isBitsType(b)) {
+     512              :     return ScalarType::Undefined;
+     513              :   }
+     514              : 
+     515              :   // Ignore the 5 bits types, since they are handled by the if statement
+     516              :   // above and do not participate in type promotion. The `5` value has to
+     517              :   // be consistent with the number of the unique `c10::bits*` types that
+     518              :   // exist.
+     519              :   const int NUM_PROMOTE_TYPES = static_cast<int>(ScalarType::NumOptions) - 5;
+     520              : 
+     521              :   // this matrix has to be consistent with
+     522              :   // AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS undefined is used where we
+     523              :   // are not sure about the correct value for type promotion.
+     524              :   // clang-format off
+     525              :   static constexpr ScalarType _promoteTypesLookup[
+     526              :       NUM_PROMOTE_TYPES][NUM_PROMOTE_TYPES] = {
+     527              :       /*        u1  i1  i2  i4  i8  f2  f4  f8  c2  c4  c8  b1  q1  q2  q3  bf  b8  h8*/
+     528              :       /* u1 */ {u1, i2, i2, i4, i8, f2, f4, f8, c2, c4, c8, u1, ud, ud, ud, bf, b8, h8},
+     529              :       /* i1 */ {i2, i1, i2, i4, i8, f2, f4, f8, c2, c4, c8, i1, ud, ud, ud, bf, b8, h8},
+     530              :       /* i2 */ {i2, i2, i2, i4, i8, f2, f4, f8, c2, c4, c8, i2, ud, ud, ud, bf, b8, h8},
+     531              :       /* i4 */ {i4, i4, i4, i4, i8, f2, f4, f8, c2, c4, c8, i4, ud, ud, ud, bf, b8, h8},
+     532              :       /* i8 */ {i8, i8, i8, i8, i8, f2, f4, f8, c2, c4, c8, i8, ud, ud, ud, bf, b8, h8},
+     533              :       /* f2 */ {f2, f2, f2, f2, f2, f2, f4, f8, c2, c4, c8, f2, ud, ud, ud, f4, f4, f4},
+     534              :       /* f4 */ {f4, f4, f4, f4, f4, f4, f4, f8, c4, c4, c8, f4, ud, ud, ud, f4, f4, f4},
+     535              :       /* f8 */ {f8, f8, f8, f8, f8, f8, f8, f8, c8, c8, c8, f8, ud, ud, ud, f8, f8, f8},
+     536              :       /* c2 */ {c2, c2, c2, c2, c2, c2, c4, c8, c2, c4, c8, c2, ud, ud, ud, c4, c4, c4},
+     537              :       /* c4 */ {c4, c4, c4, c4, c4, c4, c4, c8, c4, c4, c8, c4, ud, ud, ud, c4, c4, c4},
+     538              :       /* c8 */ {c8, c8, c8, c8, c8, c8, c8, c8, c8, c8, c8, c8, ud, ud, ud, c8, c8, c8},
+     539              :       /* b1 */ {u1, i1, i2, i4, i8, f2, f4, f8, c2, c4, c8, b1, ud, ud, ud, bf, b8, h8},
+     540              :       /* q1 */ {ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud},
+     541              :       /* q2 */ {ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud},
+     542              :       /* q3 */ {ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud, ud},
+     543              :       /* bf */ {bf, bf, bf, bf, bf, f4, f4, f8, c4, c4, c8, bf, ud, ud, ud, bf, bf, bf},
+     544              :       /* b8 */ {b8, b8, b8, b8, b8, f4, f4, f8, c4, c4, c8, b8, ud, ud, ud, bf, b8, ud},
+     545              :       /* h8 */ {h8, h8, h8, h8, h8, f4, f4, f8, c4, c4, c8, h8, ud, ud, ud, bf, ud, h8},
+     546              :   };
+     547              :   // clang-format on
+     548              :   return _promoteTypesLookup[static_cast<int>(a)][static_cast<int>(b)];
+     549              : }
+     550              : 
+     551            0 : inline std::ostream& operator<<(
+     552              :     std::ostream& stream,
+     553              :     at::ScalarType scalar_type) {
+     554            0 :   return stream << toString(scalar_type);
+     555              : }
+     556              : 
+     557              : } // namespace c10
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/ScalarTypeToTypeMeta.h.func-c.html b/html/libtorch/include/c10/core/ScalarTypeToTypeMeta.h.func-c.html new file mode 100644 index 0000000..9aa9e02 --- /dev/null +++ b/html/libtorch/include/c10/core/ScalarTypeToTypeMeta.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/ScalarTypeToTypeMeta.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - ScalarTypeToTypeMeta.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %88
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c10L23optTypeMetaToScalarTypeENS_8optionalIN6caffe28TypeMetaEEE418844
_ZN3c10L20typeMetaToScalarTypeEN6caffe28TypeMetaE423800
_ZN3c10L20scalarTypeToTypeMetaENS_10ScalarTypeE91449062
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/ScalarTypeToTypeMeta.h.func.html b/html/libtorch/include/c10/core/ScalarTypeToTypeMeta.h.func.html new file mode 100644 index 0000000..1974ef8 --- /dev/null +++ b/html/libtorch/include/c10/core/ScalarTypeToTypeMeta.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/ScalarTypeToTypeMeta.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - ScalarTypeToTypeMeta.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %88
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c10L20scalarTypeToTypeMetaENS_10ScalarTypeE91449062
_ZN3c10L20typeMetaToScalarTypeEN6caffe28TypeMetaE423800
_ZN3c10L23optTypeMetaToScalarTypeENS_8optionalIN6caffe28TypeMetaEEE418844
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/ScalarTypeToTypeMeta.h.gcov.html b/html/libtorch/include/c10/core/ScalarTypeToTypeMeta.h.gcov.html new file mode 100644 index 0000000..aecdfb9 --- /dev/null +++ b/html/libtorch/include/c10/core/ScalarTypeToTypeMeta.h.gcov.html @@ -0,0 +1,133 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/ScalarTypeToTypeMeta.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - ScalarTypeToTypeMeta.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %88
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <c10/core/ScalarType.h>
+       4              : #include <c10/util/Optional.h>
+       5              : #include <c10/util/typeid.h>
+       6              : 
+       7              : // these just expose TypeMeta/ScalarType bridge functions in c10
+       8              : // TODO move to typeid.h (or codemod away) when TypeMeta et al
+       9              : // are moved from caffe2 to c10 (see note at top of typeid.h)
+      10              : 
+      11              : namespace c10 {
+      12              : 
+      13              : /**
+      14              :  * convert ScalarType enum values to TypeMeta handles
+      15              :  */
+      16     91449062 : static inline caffe2::TypeMeta scalarTypeToTypeMeta(ScalarType scalar_type) {
+      17     91449062 :   return caffe2::TypeMeta::fromScalarType(scalar_type);
+      18              : }
+      19              : 
+      20              : /**
+      21              :  * convert TypeMeta handles to ScalarType enum values
+      22              :  */
+      23       423800 : static inline ScalarType typeMetaToScalarType(caffe2::TypeMeta dtype) {
+      24       423800 :   return dtype.toScalarType();
+      25              : }
+      26              : 
+      27              : /**
+      28              :  * typeMetaToScalarType(), lifted to optional
+      29              :  */
+      30       418844 : static inline optional<at::ScalarType> optTypeMetaToScalarType(
+      31              :     optional<caffe2::TypeMeta> type_meta) {
+      32       418844 :   if (!type_meta.has_value()) {
+      33           68 :     return c10::nullopt;
+      34              :   }
+      35       418776 :   return type_meta->toScalarType();
+      36              : }
+      37              : 
+      38              : /**
+      39              :  * convenience: equality across TypeMeta/ScalarType conversion
+      40              :  */
+      41              : static inline bool operator==(ScalarType t, caffe2::TypeMeta m) {
+      42              :   return m.isScalarType(t);
+      43              : }
+      44              : 
+      45              : static inline bool operator==(caffe2::TypeMeta m, ScalarType t) {
+      46              :   return t == m;
+      47              : }
+      48              : 
+      49              : static inline bool operator!=(ScalarType t, caffe2::TypeMeta m) {
+      50              :   return !(t == m);
+      51              : }
+      52              : 
+      53              : static inline bool operator!=(caffe2::TypeMeta m, ScalarType t) {
+      54              :   return !(t == m);
+      55              : }
+      56              : 
+      57              : } // namespace c10
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/SymInt.h.func-c.html b/html/libtorch/include/c10/core/SymInt.h.func-c.html new file mode 100644 index 0000000..a77e31e --- /dev/null +++ b/html/libtorch/include/c10/core/SymInt.h.func-c.html @@ -0,0 +1,131 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/SymInt.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - SymInt.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:71.0 %3122
Test Date:2024-04-30 13:17:26Functions:87.5 %87
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK3c106SymInt20toSymNodeImplUnownedEv0
_ZN3c106SymIntC2EOS0_36174066
_ZN3c106SymIntC2Ev110925612
_ZN3c106SymIntaSEOS0_110925612
_ZN3c106SymIntC2El168461706
_ZN3c106SymIntD2Ev347570268
_ZN3c106SymInt8release_Ev458495880
_ZN3c106SymInt11check_rangeEl737930100
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/SymInt.h.func.html b/html/libtorch/include/c10/core/SymInt.h.func.html new file mode 100644 index 0000000..af9f7d8 --- /dev/null +++ b/html/libtorch/include/c10/core/SymInt.h.func.html @@ -0,0 +1,131 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/SymInt.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - SymInt.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:71.0 %3122
Test Date:2024-04-30 13:17:26Functions:87.5 %87
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c106SymInt11check_rangeEl737930100
_ZN3c106SymInt8release_Ev458495880
_ZN3c106SymIntC2EOS0_36174066
_ZN3c106SymIntC2El168461706
_ZN3c106SymIntC2Ev110925612
_ZN3c106SymIntD2Ev347570268
_ZN3c106SymIntaSEOS0_110925612
_ZNK3c106SymInt20toSymNodeImplUnownedEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/SymInt.h.gcov.html b/html/libtorch/include/c10/core/SymInt.h.gcov.html new file mode 100644 index 0000000..8c710d8 --- /dev/null +++ b/html/libtorch/include/c10/core/SymInt.h.gcov.html @@ -0,0 +1,424 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/SymInt.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - SymInt.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:71.0 %3122
Test Date:2024-04-30 13:17:26Functions:87.5 %87
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <c10/core/SymBool.h>
+       4              : #include <c10/core/SymNodeImpl.h>
+       5              : #include <c10/macros/Macros.h>
+       6              : #include <c10/util/Exception.h>
+       7              : #include <c10/util/Optional.h>
+       8              : 
+       9              : #include <numeric>
+      10              : #include <type_traits>
+      11              : 
+      12              : namespace c10 {
+      13              : 
+      14              : class SymFloat;
+      15              : 
+      16              : // SymInt represents either a regular int64_t, or a symbolic integer
+      17              : // (represented in a type erased way as SymNode).  The intention is for SymInt
+      18              : // to represent symbolic sizes that arise when doing shape computation in
+      19              : // operator kernels. This allows for tracing through programs without baking in
+      20              : // concrete sizes into kernel calls.
+      21              : //
+      22              : // SymInt has an API equivalent to int64_t.  In particular, it is a value type.
+      23              : // Internally, SymInt is represented in a clever packed way, so that it only
+      24              : // occupies one word of space; but morally, it is a union between an int64_t
+      25              : // and an intrusive pointer to SymNodeImpl.
+      26              : //
+      27              : // Invariant: the referenced SymNodeImpl is guaranteed to be a SymNode where
+      28              : // is_int() returns true
+      29              : 
+      30              : class C10_API SymInt {
+      31              :  public:
+      32              :   enum Unchecked {
+      33              :     UNCHECKED,
+      34              :   };
+      35              : 
+      36    168461706 :   /*implicit*/ SymInt(int64_t d) : data_(d) {
+      37    168461706 :     if (is_heap_allocated()) {
+      38              :       // Large negative number, heap allocate it
+      39            0 :       promote_to_negative();
+      40              :     }
+      41    168461706 :   };
+      42    110925612 :   SymInt() : data_(0) {}
+      43              :   SymInt(SymNode n);
+      44              : 
+      45              :   // unchecked c-tor accepting raw `data_`
+      46              :   // One appropriate use for this is when you are constructing a symint
+      47              :   // in a situation where you know it is non-negative (or, if it is negative,
+      48              :   // the negative value is -1; i.e., not user controlled)
+      49              :   SymInt(Unchecked, int64_t d) : data_(d) {}
+      50              : 
+      51              :   // TODO: these implementations are not optimal because they allocate a
+      52              :   // temporary and then use the move constructor/assignment
+      53              :   SymInt(const SymInt& s) : data_(0) {
+      54              :     if (s.is_heap_allocated()) {
+      55              :       *this = SymInt(s.toSymNode());
+      56              :     } else {
+      57              :       data_ = s.data_;
+      58              :     }
+      59              :   }
+      60     36174066 :   SymInt(SymInt&& s) noexcept : data_(s.data_) {
+      61     36174066 :     s.data_ = 0;
+      62     36174066 :   }
+      63              : 
+      64              :   SymInt& operator=(const SymInt& s) {
+      65              :     if (this != &s) {
+      66              :       if (s.is_heap_allocated()) {
+      67              :         *this = SymInt(s.toSymNode());
+      68              :       } else {
+      69              :         data_ = s.data_;
+      70              :       }
+      71              :     }
+      72              :     return *this;
+      73              :   }
+      74    110925612 :   SymInt& operator=(SymInt&& s) noexcept {
+      75    110925612 :     if (this != &s) {
+      76    110925612 :       release_(); // release the current SymNode if any
+      77    110925612 :       data_ = s.data_;
+      78    110925612 :       if (s.is_heap_allocated())
+      79            0 :         s.data_ = 0;
+      80              :     };
+      81    110925612 :     return *this;
+      82              :   }
+      83              : 
+      84            0 :   SymNodeImpl* toSymNodeImplUnowned() const {
+      85            0 :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(is_heap_allocated());
+      86            0 :     uint64_t unextended_bits = static_cast<uint64_t>(data_) & ~MASK;
+      87            0 :     uint64_t sign_bit_mask = 1ULL << (62 - 1);
+      88              :     // https://stackoverflow.com/questions/42534749/signed-extension-from-24-bit-to-32-bit-in-c
+      89            0 :     uint64_t extended_bits = (unextended_bits ^ sign_bit_mask) - sign_bit_mask;
+      90              :     return static_cast<SymNodeImpl*>(
+      91            0 :         reinterpret_cast<void*>(static_cast<uintptr_t>(extended_bits)));
+      92              :   }
+      93              : 
+      94    458495880 :   void release_() {
+      95    458495880 :     if (is_heap_allocated()) {
+      96            0 :       SymNode::reclaim(toSymNodeImplUnowned()); // steal
+      97              :     }
+      98    458495880 :   }
+      99              : 
+     100              :   SymNodeImpl* release() && {
+     101              : #ifndef C10_MOBILE
+     102              :     TORCH_INTERNAL_ASSERT(is_heap_allocated());
+     103              :     auto* r = toSymNodeImplUnowned();
+     104              :     data_ = 0; // transfer ownership
+     105              :     return r;
+     106              : #else
+     107              :     TORCH_INTERNAL_ASSERT(false);
+     108              : #endif
+     109              :   }
+     110              : 
+     111              :   // Only valid if is_heap_allocated()
+     112              :   SymNode toSymNode() const;
+     113              : 
+     114              :   // Guaranteed to return a SymNode, wrapping using base if necessary
+     115              :   SymNode wrap_node(const SymNode& base) const;
+     116              : 
+     117    347570268 :   ~SymInt() {
+     118    347570268 :     release_();
+     119    347570268 :   }
+     120              : 
+     121              :   // Require the int to be non-symbolic, and if it is symbolic raise an
+     122              :   // error.  This is safe to use for C++ code that doesn't work for symbolic
+     123              :   // shapes, and you don't have time to fix it immediately, as if we
+     124              :   // try to trigger the path in C++ you'll appropriately get an error
+     125              :   int64_t expect_int() const {
+     126              :     if (auto r = maybe_as_int()) {
+     127              :       return *r;
+     128              :     }
+     129              :     TORCH_CHECK(false, "expected int but got ", *this);
+     130              :   }
+     131              : 
+     132              :   // Test if we have a hint for this int (e.g., guard_int would work).
+     133              :   // Most of the time this is true; it is only false when you have
+     134              :   // an unbacked SymInt.
+     135              :   bool has_hint() const;
+     136              : 
+     137              :   // Insert a guard for the int to be its concrete value, and then return
+     138              :   // that value.  This operation always works, even if the int is symbolic,
+     139              :   // so long as we know what the underlying value is (e.g., this won't work
+     140              :   // if you call it on the size of nonzero output).  Don't blindly put this
+     141              :   // everywhere; you can cause overspecialization of PyTorch programs with
+     142              :   // this method.
+     143              :   //
+     144              :   // It should be called as guard_int(__FILE__, __LINE__).  The file and line
+     145              :   // number can be used to diagnose overspecialization.
+     146              :   int64_t guard_int(const char* file, int64_t line) const;
+     147              : 
+     148              :   // Distinguish actual symbolic values from constants stored on the heap
+     149              :   bool is_symbolic() const {
+     150              :     return is_heap_allocated() &&
+     151              :         !toSymNodeImplUnowned()->constant_int().has_value();
+     152              :   }
+     153              : 
+     154              :   // N.B. It's important to keep this definition in the header
+     155              :   // as we expect if checks to be folded for mobile builds
+     156              :   // where `is_heap_allocated` is always false and optimize dead code paths
+     157              :   C10_ALWAYS_INLINE bool is_heap_allocated() const {
+     158              : #ifdef C10_MOBILE
+     159              :     return false;
+     160              : #else
+     161    737883198 :     return !check_range(data_);
+     162              : #endif
+     163              :   }
+     164              : 
+     165              :   SymInt operator+(const SymInt& sci) const;
+     166              :   SymInt operator-(const SymInt& sci) const;
+     167              :   SymInt operator*(const SymInt& sci) const;
+     168              :   SymInt operator/(const SymInt& sci) const;
+     169              :   SymInt operator%(const SymInt& sci) const;
+     170              :   void operator*=(const SymInt& sci);
+     171              :   void operator+=(const SymInt& sci);
+     172              :   void operator/=(const SymInt& sci);
+     173              : 
+     174              :   SymInt clone() const;
+     175              : 
+     176              :   SymBool sym_eq(const SymInt&) const;
+     177              :   SymBool sym_ne(const SymInt&) const;
+     178              :   SymBool sym_lt(const SymInt&) const;
+     179              :   SymBool sym_le(const SymInt&) const;
+     180              :   SymBool sym_gt(const SymInt&) const;
+     181              :   SymBool sym_ge(const SymInt&) const;
+     182              : 
+     183              :   bool operator==(const SymInt& o) const {
+     184              :     return sym_eq(o).guard_bool(__FILE__, __LINE__);
+     185              :   }
+     186              :   bool operator!=(const SymInt& o) const {
+     187              :     return sym_ne(o).guard_bool(__FILE__, __LINE__);
+     188              :   }
+     189              :   bool operator<(const SymInt& o) const {
+     190              :     return sym_lt(o).guard_bool(__FILE__, __LINE__);
+     191              :   }
+     192              :   bool operator<=(const SymInt& o) const {
+     193              :     return sym_le(o).guard_bool(__FILE__, __LINE__);
+     194              :   }
+     195              :   bool operator>(const SymInt& o) const {
+     196              :     return sym_gt(o).guard_bool(__FILE__, __LINE__);
+     197              :   }
+     198              :   bool operator>=(const SymInt& o) const {
+     199              :     return sym_ge(o).guard_bool(__FILE__, __LINE__);
+     200              :   }
+     201              : 
+     202              :   SymInt min(const SymInt& sci) const;
+     203              :   SymInt max(const SymInt& sci) const;
+     204              : 
+     205              :   operator SymFloat() const;
+     206              : 
+     207              :   // Don't use this.  Prefer maybe_as_int instead
+     208              :   int64_t as_int_unchecked() const {
+     209              :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(!is_heap_allocated());
+     210              :     return data_;
+     211              :   }
+     212              : 
+     213              :   c10::optional<int64_t> maybe_as_int() const {
+     214              :     if (!is_heap_allocated()) {
+     215              :       return c10::make_optional(data_);
+     216              :     }
+     217              :     auto* node = toSymNodeImplUnowned();
+     218              :     if (auto c = node->constant_int()) {
+     219              :       return c;
+     220              :     }
+     221              :     return node->maybe_as_int();
+     222              :   }
+     223              : 
+     224              :   // Return whether the integer is directly coercible to a SymInt
+     225              :   // without requiring heap allocation.  You don't need to use this
+     226              :   // to check if you can pass an integer to SymInt; this is guaranteed
+     227              :   // to work (it just might heap allocate!)
+     228    737930100 :   static bool check_range(int64_t i) {
+     229    737930100 :     return i > MAX_UNREPRESENTABLE_INT;
+     230              :   }
+     231              : 
+     232              :   // Return the min representable integer as a SymInt without
+     233              :   // heap allocation.  For quantities that count bytes (or larger),
+     234              :   // this is still much larger than you need, so you may consider
+     235              :   // using this as a more efficient version of MIN_INT
+     236              :   static constexpr int64_t min_representable_int() {
+     237              :     return MAX_UNREPRESENTABLE_INT + 1;
+     238              :   }
+     239              : 
+     240              :  private:
+     241              :   void promote_to_negative();
+     242              : 
+     243              :   // Constraints on the internal representation:
+     244              :   //
+     245              :   // - Should represent positive and small negative ints
+     246              :   // - No conversion necessary for operations on ints
+     247              :   // - Must represent valid 64-bit pointers
+     248              :   // - Is symbolic test should be FAST (two arithmetic instructions is too
+     249              :   // much).
+     250              :   //   This code being a hotpath is based on Strobelight profiles of
+     251              :   //   is_heap_allocated().  FB only: https://fburl.com/strobelight/5l50ncxd
+     252              :   //   (you will need to change the time window).
+     253              :   //
+     254              :   // So, the scheme is to reserve large negative numbers (assuming
+     255              :   // two's complement):
+     256              :   //
+     257              :   // - 0b0.... means we are a positive int
+     258              :   // - 0b11... means we are a small negative int
+     259              :   // - 0b10... means we are are a pointer. This means that
+     260              :   //           [-2^63, -2^62-1] are not representable as ints.
+     261              :   //           We don't actually need all of this space as on x86_64
+     262              :   //           as the top 16bits aren't used for anything
+     263              :   static constexpr uint64_t MASK = 1ULL << 63 | 1ULL << 62 | 1ULL << 61;
+     264              :   static constexpr uint64_t IS_SYM = 1ULL << 63 | 1ULL << 61;
+     265              :   // We must manually translate the bit pattern test into a greater
+     266              :   // than test because compiler doesn't figure it out:
+     267              :   // https://godbolt.org/z/356aferaW
+     268              :   static constexpr int64_t MAX_UNREPRESENTABLE_INT =
+     269              :       -1LL & static_cast<int64_t>(~(1ULL << 62));
+     270              :   int64_t data_;
+     271              : };
+     272              : 
+     273              : /// Sum of a list of SymInt; accumulates into the c10::SymInt expression
+     274              : template <
+     275              :     typename C,
+     276              :     typename std::enable_if<
+     277              :         std::is_same<typename C::value_type, c10::SymInt>::value,
+     278              :         int>::type = 0>
+     279              : inline c10::SymInt multiply_integers(const C& container) {
+     280              :   return std::accumulate(
+     281              :       container.begin(),
+     282              :       container.end(),
+     283              :       c10::SymInt(1),
+     284              :       [](const c10::SymInt& a, const c10::SymInt& b) { return a * b; });
+     285              : }
+     286              : 
+     287              : template <
+     288              :     typename Iter,
+     289              :     typename = std::enable_if_t<std::is_same<
+     290              :         typename std::iterator_traits<Iter>::value_type,
+     291              :         c10::SymInt>::value>>
+     292              : inline c10::SymInt multiply_integers(Iter begin, Iter end) {
+     293              :   return std::accumulate(
+     294              :       begin,
+     295              :       end,
+     296              :       c10::SymInt(1),
+     297              :       [](const c10::SymInt& a, const c10::SymInt& b) { return a * b; });
+     298              : }
+     299              : 
+     300              : #define DECLARE_SYMINT_OP_INTONLY(scalar_t, RetTy)      \
+     301              :   C10_API RetTy operator%(const SymInt& a, scalar_t b); \
+     302              :   C10_API RetTy operator%(scalar_t a, const SymInt& b);
+     303              : 
+     304              : #define DECLARE_SYMINT_OP(scalar_t, RetTy)              \
+     305              :   C10_API RetTy operator+(const SymInt& a, scalar_t b); \
+     306              :   C10_API RetTy operator-(const SymInt& a, scalar_t b); \
+     307              :   C10_API RetTy operator*(const SymInt& a, scalar_t b); \
+     308              :   C10_API RetTy operator/(const SymInt& a, scalar_t b); \
+     309              :   C10_API RetTy operator+(scalar_t a, const SymInt& b); \
+     310              :   C10_API RetTy operator-(scalar_t a, const SymInt& b); \
+     311              :   C10_API RetTy operator*(scalar_t a, const SymInt& b); \
+     312              :   C10_API RetTy operator/(scalar_t a, const SymInt& b); \
+     313              :   C10_API bool operator==(const SymInt& a, scalar_t b); \
+     314              :   C10_API bool operator!=(const SymInt& a, scalar_t b); \
+     315              :   C10_API bool operator<(const SymInt& a, scalar_t b);  \
+     316              :   C10_API bool operator<=(const SymInt& a, scalar_t b); \
+     317              :   C10_API bool operator>(const SymInt& a, scalar_t b);  \
+     318              :   C10_API bool operator>=(const SymInt& a, scalar_t b); \
+     319              :   C10_API bool operator==(scalar_t a, const SymInt& b); \
+     320              :   C10_API bool operator!=(scalar_t a, const SymInt& b); \
+     321              :   C10_API bool operator<(scalar_t a, const SymInt& b);  \
+     322              :   C10_API bool operator<=(scalar_t a, const SymInt& b); \
+     323              :   C10_API bool operator>(scalar_t a, const SymInt& b);  \
+     324              :   C10_API bool operator>=(scalar_t a, const SymInt& b);
+     325              : 
+     326              : DECLARE_SYMINT_OP_INTONLY(int64_t, SymInt)
+     327              : DECLARE_SYMINT_OP_INTONLY(int32_t, SymInt)
+     328              : DECLARE_SYMINT_OP_INTONLY(uint64_t, SymInt)
+     329              : DECLARE_SYMINT_OP_INTONLY(uint32_t, SymInt)
+     330              : DECLARE_SYMINT_OP(int64_t, SymInt)
+     331              : DECLARE_SYMINT_OP(int32_t, SymInt) // make sure constants work
+     332              : DECLARE_SYMINT_OP(uint64_t, SymInt)
+     333              : DECLARE_SYMINT_OP(uint32_t, SymInt)
+     334              : DECLARE_SYMINT_OP(double, SymFloat)
+     335              : DECLARE_SYMINT_OP(float, SymFloat) // just for completeness
+     336              : 
+     337              : // On OSX size_t is different than uint64_t so we have to
+     338              : // define it separately
+     339              : #if defined(__APPLE__)
+     340              : DECLARE_SYMINT_OP_INTONLY(size_t, SymInt)
+     341              : DECLARE_SYMINT_OP(size_t, SymInt)
+     342              : #endif
+     343              : 
+     344              : #undef DECLARE_SYMINT_OP
+     345              : 
+     346              : C10_API std::ostream& operator<<(std::ostream& os, const SymInt& s);
+     347              : C10_API SymInt operator-(const SymInt& s);
+     348              : } // namespace c10
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/SymIntArrayRef.h.func-c.html b/html/libtorch/include/c10/core/SymIntArrayRef.h.func-c.html new file mode 100644 index 0000000..26ca4de --- /dev/null +++ b/html/libtorch/include/c10/core/SymIntArrayRef.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/SymIntArrayRef.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - SymIntArrayRef.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %55
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1019fromIntArrayRefSlowENS_8ArrayRefIlEE17750
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/SymIntArrayRef.h.func.html b/html/libtorch/include/c10/core/SymIntArrayRef.h.func.html new file mode 100644 index 0000000..8cf8116 --- /dev/null +++ b/html/libtorch/include/c10/core/SymIntArrayRef.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/SymIntArrayRef.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - SymIntArrayRef.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %55
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1019fromIntArrayRefSlowENS_8ArrayRefIlEE17750
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/SymIntArrayRef.h.gcov.html b/html/libtorch/include/c10/core/SymIntArrayRef.h.gcov.html new file mode 100644 index 0000000..a2882a2 --- /dev/null +++ b/html/libtorch/include/c10/core/SymIntArrayRef.h.gcov.html @@ -0,0 +1,147 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/SymIntArrayRef.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - SymIntArrayRef.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %55
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <c10/core/SymInt.h>
+       4              : #include <c10/util/ArrayRef.h>
+       5              : #include <c10/util/Exception.h>
+       6              : #include <c10/util/Optional.h>
+       7              : 
+       8              : namespace c10 {
+       9              : using SymIntArrayRef = ArrayRef<SymInt>;
+      10              : 
+      11              : inline at::IntArrayRef asIntArrayRefUnchecked(c10::SymIntArrayRef ar) {
+      12              :   return IntArrayRef(reinterpret_cast<const int64_t*>(ar.data()), ar.size());
+      13              : }
+      14              : 
+      15              : // TODO: a SymIntArrayRef containing a heap allocated large negative integer
+      16              : // can actually technically be converted to an IntArrayRef... but not with
+      17              : // the non-owning API we have here.  We can't reinterpet cast; we have to
+      18              : // allocate another buffer and write the integers into it.  If you need it,
+      19              : // we can do it.  But I don't think you need it.
+      20              : 
+      21              : inline c10::optional<at::IntArrayRef> asIntArrayRefSlowOpt(
+      22              :     c10::SymIntArrayRef ar) {
+      23              :   for (const c10::SymInt& sci : ar) {
+      24              :     if (sci.is_heap_allocated()) {
+      25              :       return c10::nullopt;
+      26              :     }
+      27              :   }
+      28              : 
+      29              :   return {asIntArrayRefUnchecked(ar)};
+      30              : }
+      31              : 
+      32              : inline at::IntArrayRef asIntArrayRefSlow(
+      33              :     c10::SymIntArrayRef ar,
+      34              :     const char* file,
+      35              :     int64_t line) {
+      36              :   for (const c10::SymInt& sci : ar) {
+      37              :     TORCH_CHECK(
+      38              :         !sci.is_heap_allocated(),
+      39              :         file,
+      40              :         ":",
+      41              :         line,
+      42              :         ": SymIntArrayRef expected to contain only concrete integers");
+      43              :   }
+      44              :   return asIntArrayRefUnchecked(ar);
+      45              : }
+      46              : 
+      47              : #define C10_AS_INTARRAYREF_SLOW(a) c10::asIntArrayRefSlow(a, __FILE__, __LINE__)
+      48              : 
+      49              : // Prefer using a more semantic constructor, like
+      50              : // fromIntArrayRefKnownNonNegative
+      51              : inline SymIntArrayRef fromIntArrayRefUnchecked(IntArrayRef array_ref) {
+      52              :   return SymIntArrayRef(
+      53              :       reinterpret_cast<const SymInt*>(array_ref.data()), array_ref.size());
+      54              : }
+      55              : 
+      56              : inline SymIntArrayRef fromIntArrayRefKnownNonNegative(IntArrayRef array_ref) {
+      57              :   return fromIntArrayRefUnchecked(array_ref);
+      58              : }
+      59              : 
+      60        17750 : inline SymIntArrayRef fromIntArrayRefSlow(IntArrayRef array_ref) {
+      61        64652 :   for (long i : array_ref) {
+      62        46902 :     TORCH_CHECK(
+      63              :         SymInt::check_range(i),
+      64              :         "IntArrayRef contains an int that cannot be represented as a SymInt: ",
+      65              :         i);
+      66              :   }
+      67        35500 :   return SymIntArrayRef(
+      68        35500 :       reinterpret_cast<const SymInt*>(array_ref.data()), array_ref.size());
+      69              : }
+      70              : 
+      71              : } // namespace c10
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/TensorImpl.h.func-c.html b/html/libtorch/include/c10/core/TensorImpl.h.func-c.html new file mode 100644 index 0000000..5d92d4c --- /dev/null +++ b/html/libtorch/include/c10/core/TensorImpl.h.func-c.html @@ -0,0 +1,159 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/TensorImpl.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - TensorImpl.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:85.7 %3530
Test Date:2024-04-30 13:17:26Functions:100.0 %1212
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK3c1010TensorImpl7stridesEv80
_ZNK3c1010TensorImpl5numelEv500
_ZN3c1010TensorImpl32set_allow_tensor_metadata_changeEb40076
_ZNK3c1010TensorImpl14unique_versionEv40076
_ZNK3c1015VariableVersion6uniqueEv40076
_ZNK3c1010TensorImpl5sizesEv88706
_ZN3c1015VariableVersion14VersionCounterC2Ej378768
_ZN3c1015VariableVersionC2Ej378768
_ZNK3c1010TensorImpl5dtypeEv402994
_ZNK3c1010TensorImpl4sizeEl15310736
_ZNK3c1010TensorImpl3dimEv15317888
_ZNK3c1010TensorImpl14matches_policyENS0_18SizesStridesPolicyE30717910
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/TensorImpl.h.func.html b/html/libtorch/include/c10/core/TensorImpl.h.func.html new file mode 100644 index 0000000..9f6ed64 --- /dev/null +++ b/html/libtorch/include/c10/core/TensorImpl.h.func.html @@ -0,0 +1,159 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/TensorImpl.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - TensorImpl.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:85.7 %3530
Test Date:2024-04-30 13:17:26Functions:100.0 %1212
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1010TensorImpl32set_allow_tensor_metadata_changeEb40076
_ZN3c1015VariableVersion14VersionCounterC2Ej378768
_ZN3c1015VariableVersionC2Ej378768
_ZNK3c1010TensorImpl14matches_policyENS0_18SizesStridesPolicyE30717910
_ZNK3c1010TensorImpl14unique_versionEv40076
_ZNK3c1010TensorImpl3dimEv15317888
_ZNK3c1010TensorImpl4sizeEl15310736
_ZNK3c1010TensorImpl5dtypeEv402994
_ZNK3c1010TensorImpl5numelEv500
_ZNK3c1010TensorImpl5sizesEv88706
_ZNK3c1010TensorImpl7stridesEv80
_ZNK3c1015VariableVersion6uniqueEv40076
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/TensorImpl.h.gcov.html b/html/libtorch/include/c10/core/TensorImpl.h.gcov.html new file mode 100644 index 0000000..dabdd0f --- /dev/null +++ b/html/libtorch/include/c10/core/TensorImpl.h.gcov.html @@ -0,0 +1,3365 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/TensorImpl.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - TensorImpl.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:85.7 %3530
Test Date:2024-04-30 13:17:26Functions:100.0 %1212
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <c10/core/DispatchKeySet.h>
+       4              : #include <c10/core/InferenceMode.h>
+       5              : #include <c10/core/MemoryFormat.h>
+       6              : #include <c10/core/ScalarTypeToTypeMeta.h>
+       7              : #include <c10/core/Storage.h>
+       8              : #include <c10/core/SymBool.h>
+       9              : #include <c10/core/SymIntArrayRef.h>
+      10              : #include <c10/core/WrapDimMinimal.h>
+      11              : #include <c10/core/impl/PyObjectSlot.h>
+      12              : #include <c10/core/impl/SizesAndStrides.h>
+      13              : #include <c10/macros/Macros.h>
+      14              : #include <c10/util/DimVector.h>
+      15              : #include <c10/util/Exception.h>
+      16              : #include <c10/util/Flags.h>
+      17              : #include <c10/util/Optional.h>
+      18              : #include <c10/util/accumulate.h>
+      19              : #include <c10/util/intrusive_ptr.h>
+      20              : #include <c10/util/irange.h>
+      21              : #include <c10/util/safe_numerics.h>
+      22              : #include <c10/util/typeid.h>
+      23              : 
+      24              : #include <algorithm>
+      25              : #include <atomic>
+      26              : #include <limits>
+      27              : #include <memory>
+      28              : #include <type_traits>
+      29              : #include <utility>
+      30              : 
+      31              : // A global boolean variable to control whether we free memory when a Tensor
+      32              : // is shrunk to a smaller size. As a result, a Tensor is always going to
+      33              : // keep the memory allocated for its maximum capacity reshaped to so far.
+      34              : //
+      35              : // This parameter is respected "upper-case" methods which call Resize()
+      36              : // (e.g., CopyFrom, ResizeLike); it is NOT respected by Tensor::resize_
+      37              : // or ShrinkTo, both of which guarantee to never to free memory.
+      38              : C10_DECLARE_bool(caffe2_keep_on_shrink);
+      39              : 
+      40              : // Since we can have high variance in blob memory allocated across different
+      41              : // inputs in the same run, we will shrink the blob only if the memory gain
+      42              : // is larger than this flag in bytes.  This only applies to functions which
+      43              : // respect caffe2_keep_on_shrink.
+      44              : C10_DECLARE_int64(caffe2_max_keep_on_shrink_memory);
+      45              : 
+      46              : C10_CLANG_DIAGNOSTIC_PUSH()
+      47              : #if C10_CLANG_HAS_WARNING("-Wimplicit-int-float-conversion")
+      48              : C10_CLANG_DIAGNOSTIC_IGNORE("-Wimplicit-int-float-conversion")
+      49              : #endif
+      50              : 
+      51              : namespace at {
+      52              : class Tensor;
+      53              : class TensorBase;
+      54              : } // namespace at
+      55              : 
+      56              : namespace c10 {
+      57              : 
+      58              : /**
+      59              :  * A utility function to convert vector<int> to vector<int64_t>.
+      60              :  */
+      61              : inline std::vector<int64_t> ToVectorint64_t(const ArrayRef<int>& src) {
+      62              :   return std::vector<int64_t>(src.begin(), src.end());
+      63              : }
+      64              : 
+      65              : /**
+      66              :  * Return product of all dimensions starting from k
+      67              :  */
+      68              : inline int64_t size_from_dim_(int k, IntArrayRef dims) {
+      69              :   int64_t r = 1;
+      70              :   for (const auto i : c10::irange(k, dims.size())) {
+      71              :     r *= dims[i];
+      72              :   }
+      73              :   return r;
+      74              : }
+      75              : 
+      76              : // Product of all dims up to k (not including dims[k])
+      77              : inline int64_t size_to_dim_(int k, IntArrayRef dims) {
+      78              :   TORCH_CHECK((unsigned)k <= dims.size());
+      79              :   int64_t r = 1;
+      80              :   for (const auto i : c10::irange(k)) {
+      81              :     r *= dims[i];
+      82              :   }
+      83              :   return r;
+      84              : }
+      85              : 
+      86              : // Product of all dims between k and l (not including dims[k] and dims[l])
+      87              : inline int64_t size_between_dim_(int k, int l, IntArrayRef dims) {
+      88              :   TORCH_CHECK((unsigned)l < dims.size() && (unsigned)k < dims.size());
+      89              :   int64_t r = 1;
+      90              :   if (k < l) {
+      91              :     for (int i = k + 1; i < l; ++i) {
+      92              :       r *= dims[i];
+      93              :     }
+      94              :   } else {
+      95              :     for (int i = l + 1; i < k; ++i) {
+      96              :       r *= dims[i];
+      97              :     }
+      98              :   }
+      99              :   return r;
+     100              : }
+     101              : 
+     102              : // Wrap around axis_index if it is negative, s.t., -1 is the last dim
+     103              : inline int canonical_axis_index_(int axis_index, int ndims) {
+     104              :   TORCH_CHECK(axis_index >= -ndims);
+     105              :   TORCH_CHECK(axis_index < ndims);
+     106              :   if (axis_index < 0) {
+     107              :     return axis_index + ndims;
+     108              :   }
+     109              :   return axis_index;
+     110              : }
+     111              : 
+     112              : using PlacementDtor = void (*)(void*, size_t);
+     113              : 
+     114              : /*
+     115              :  * A Context that will call extra placement deleter during
+     116              :  * deconstruction.
+     117              :  *
+     118              :  * Accept a already constructed DataPtr and store it as member
+     119              :  * during destruction, we'll call extra deleter on the underlying
+     120              :  * data pointer before the DataPtr is destructed.
+     121              :  * `data_ptr_` owns the memory.
+     122              :  */
+     123              : struct C10_API PlacementDeleteContext {
+     124              :   DataPtr data_ptr_;
+     125              :   PlacementDtor placement_dtor_;
+     126              :   size_t size_;
+     127              :   PlacementDeleteContext(
+     128              :       DataPtr&& data_ptr,
+     129              :       PlacementDtor placement_dtor,
+     130              :       size_t size)
+     131              :       : data_ptr_(std::move(data_ptr)),
+     132              :         placement_dtor_(placement_dtor),
+     133              :         size_(size) {}
+     134              :   static DataPtr makeDataPtr(
+     135              :       DataPtr&& data_ptr,
+     136              :       PlacementDtor placement_dtor,
+     137              :       size_t size,
+     138              :       Device device);
+     139              :   ~PlacementDeleteContext() {
+     140              :     placement_dtor_(data_ptr_.get(), size_);
+     141              :     // original memory will be freed when data_ptr_ is destructed
+     142              :   }
+     143              : };
+     144              : 
+     145              : struct C10_API AutogradMetaInterface {
+     146              :   virtual void set_requires_grad(
+     147              :       bool requires_grad,
+     148              :       at::TensorImpl* self_impl) = 0;
+     149              :   virtual bool requires_grad() const = 0;
+     150              :   virtual at::Tensor& mutable_grad() = 0;
+     151              :   virtual const at::Tensor& grad() const = 0;
+     152              :   virtual const at::Tensor& fw_grad(uint64_t level, const at::TensorBase& self)
+     153              :       const = 0;
+     154              :   virtual void set_fw_grad(
+     155              :       const at::TensorBase& new_grad,
+     156              :       const at::TensorBase& self,
+     157              :       uint64_t level,
+     158              :       bool is_inplace_op) = 0;
+     159              :   virtual ~AutogradMetaInterface();
+     160              : };
+     161              : 
+     162              : namespace impl {
+     163              : 
+     164              : // Unfortunately, the definition of AutogradMeta lives in a separate
+     165              : // compilation unit than TensorImpl (libtorch.so versus libc10.so)
+     166              : // which means that we cannot construct an AutogradMeta from TensorImpl,
+     167              : // not even from the cpp file.  So we have to indirect it through a factory
+     168              : // function which will be initialized when we load libtorch.so.
+     169              : 
+     170              : struct C10_API AutogradMetaFactory {
+     171              :   virtual ~AutogradMetaFactory() = default;
+     172              :   virtual std::unique_ptr<AutogradMetaInterface> make() const = 0;
+     173              :   // This method is the dumbest method.  But I don't have access
+     174              :   // to Tensor (not TensorImpl) which is undefined in this header.
+     175              :   virtual const at::Tensor& undefined_tensor() const = 0;
+     176              : };
+     177              : 
+     178              : C10_API void SetAutogradMetaFactory(AutogradMetaFactory* factory);
+     179              : C10_API AutogradMetaFactory* GetAutogradMetaFactory();
+     180              : 
+     181              : struct C10_API AutogradMetaFactoryRegisterer {
+     182              :   explicit AutogradMetaFactoryRegisterer(AutogradMetaFactory* factory) {
+     183              :     SetAutogradMetaFactory(factory);
+     184              :   }
+     185              : };
+     186              : 
+     187              : } // namespace impl
+     188              : 
+     189              : struct C10_API NamedTensorMetaInterface {
+     190              :   virtual ~NamedTensorMetaInterface() = default;
+     191              :   virtual std::unique_ptr<NamedTensorMetaInterface> clone() const {
+     192              :     TORCH_INTERNAL_ASSERT(
+     193              :         false, "Not implemented: NamedTensorMetaInterface::clone");
+     194              :   };
+     195              :   virtual int64_t slow_dim() const {
+     196              :     TORCH_INTERNAL_ASSERT(
+     197              :         false, "Not implemented: NamedTensorMetaInterface::slow_dim");
+     198              :   };
+     199              : };
+     200              : 
+     201              : // For ease of copy pasting
+     202              : #if 0
+     203              : is_contiguous
+     204              : is_channels_last_contiguous
+     205              : is_channels_last_3d_contiguous
+     206              : is_channels_last
+     207              : is_channels_last_3d
+     208              : is_non_overlapping_and_dense
+     209              : #endif
+     210              : 
+     211              : /**
+     212              :  * This structure is intended to hold additional metadata of the specific device
+     213              :  * backend.
+     214              :  **/
+     215              : struct C10_API BackendMeta : intrusive_ptr_target {
+     216              :   ~BackendMeta() override = default;
+     217              :   virtual intrusive_ptr<BackendMeta> clone(
+     218              :       const intrusive_ptr<BackendMeta>& ptr) const {
+     219              :     return ptr;
+     220              :   }
+     221              : };
+     222              : 
+     223              : struct C10_API SymbolicShapeMeta {
+     224              :   SymDimVector sizes_ = {0};
+     225              :   SymDimVector strides_ = {1};
+     226              :   SymInt numel_ = 1;
+     227              :   SymInt storage_offset_ = 0;
+     228              :   SymBool is_contiguous_{true};
+     229              :   SymBool is_channels_last_contiguous_{false};
+     230              :   SymBool is_channels_last_3d_contiguous_{false};
+     231              :   SymBool is_channels_last_{false};
+     232              :   SymBool is_channels_last_3d_{false};
+     233              :   SymBool is_non_overlapping_and_dense_{true};
+     234              : };
+     235              : 
+     236              : struct C10_API ExtraMeta {
+     237              :   std::unique_ptr<c10::SymbolicShapeMeta> symbolic_shape_meta_ = nullptr;
+     238              :   std::unique_ptr<c10::NamedTensorMetaInterface> named_tensor_meta_ = nullptr;
+     239              :   intrusive_ptr<c10::BackendMeta> backend_meta_ = nullptr;
+     240              :   c10::optional<std::string> custom_data_ptr_error_msg_ = c10::nullopt;
+     241              : 
+     242              :   ExtraMeta() = default;
+     243              :   ExtraMeta(const ExtraMeta& other) {
+     244              :     if (other.symbolic_shape_meta_) {
+     245              :       symbolic_shape_meta_ =
+     246              :           std::make_unique<c10::SymbolicShapeMeta>(*other.symbolic_shape_meta_);
+     247              :     }
+     248              :     if (other.named_tensor_meta_) {
+     249              :       named_tensor_meta_ = other.named_tensor_meta_->clone();
+     250              :     }
+     251              :     if (other.backend_meta_) {
+     252              :       backend_meta_ = other.backend_meta_->clone(other.backend_meta_);
+     253              :     }
+     254              :     if (other.custom_data_ptr_error_msg_) {
+     255              :       custom_data_ptr_error_msg_ = other.custom_data_ptr_error_msg_;
+     256              :     }
+     257              :   }
+     258              : 
+     259              :   ExtraMeta(
+     260              :       std::unique_ptr<c10::SymbolicShapeMeta> symbolic_shape_meta,
+     261              :       std::unique_ptr<c10::NamedTensorMetaInterface> named_tensor_meta,
+     262              :       intrusive_ptr<c10::BackendMeta> backend_meta,
+     263              :       c10::optional<std::string> custom_data_ptr_error_msg = c10::nullopt)
+     264              :       : symbolic_shape_meta_(std::move(symbolic_shape_meta)),
+     265              :         named_tensor_meta_(std::move(named_tensor_meta)),
+     266              :         backend_meta_(std::move(backend_meta)),
+     267              :         custom_data_ptr_error_msg_(std::move(custom_data_ptr_error_msg)) {}
+     268              : 
+     269              :   std::unique_ptr<ExtraMeta> clone() const {
+     270              :     return std::make_unique<ExtraMeta>(*this);
+     271              :   }
+     272              : };
+     273              : 
+     274              : // NOTE [ Version Counter Sharing ]
+     275              : //
+     276              : // Every Tensor has a version counter. Version counters are incremented whenever
+     277              : // the data or size of a tensor changes through in-place Variable operations.
+     278              : // Version counters are used to detect modifications to saved variables which
+     279              : // would result in incorrect gradient calculations. Version counters may be
+     280              : // shared between Variables:
+     281              : //
+     282              : // 1. A view shares the version counter of the base Variable,
+     283              : // 2. `x.detach()` shares the version counter of `x`,
+     284              : // 3. Unpacked saved variables share the version counter of the source.
+     285              : //
+     286              : // Version counters are not shared in these scenarios:
+     287              : //
+     288              : // 1. When we replace a `Variable`'s underlying `Tensor` by calling
+     289              : // `set_data(...)`,
+     290              : // 2. `x.data` does not share the version counter of `x`. (See discussion at
+     291              : // https://github.com/pytorch/pytorch/issues/5396)
+     292              : //
+     293              : // Question: Why do we put the version counter in TensorImpl instead of
+     294              : // AutogradMeta?
+     295              : //
+     296              : // Answer: After the Variable/Tensor merge, a tensor will not have AutogradMeta
+     297              : // when its `requires_grad_` is false, but when we use this tensor in the
+     298              : // forward pass of a function that requires saving this tensor for backward, we
+     299              : // need to keep track of this tensor's version to make sure it's always valid in
+     300              : // the autograd graph.
+     301              : //
+     302              : // To achieve this goal, we put the version counter in TensorImpl instead of
+     303              : // AutogradMeta, and have it always be available. This allows us to have the
+     304              : // optimization of not carrying AutogradMeta when a tensor doesn't require
+     305              : // gradient.
+     306              : //
+     307              : // A hypothetical alternative way to achieve this goal is to initialize
+     308              : // AutogradMeta and create the version counter for the non-requires-grad tensor
+     309              : // only when it's saved for backward. However, since saving a tensor for
+     310              : // backward happens in the forward pass, and our invariant is that forward pass
+     311              : // needs to be thread-safe, lazy-initializing AutogradMeta when saving a tensor
+     312              : // can introduce race conditions when we are running the forward pass in
+     313              : // multi-thread scenarios, thus making the forward pass not thread-safe anymore,
+     314              : // which breaks the invariant.
+     315              : struct C10_API VariableVersion {
+     316              :  private:
+     317              :   struct VersionCounter : intrusive_ptr_target {
+     318       378768 :     VersionCounter(uint32_t version) : version_(version) {}
+     319              :     std::atomic<uint32_t> version_;
+     320              :   };
+     321              :   c10::intrusive_ptr<VersionCounter> version_counter_;
+     322              : 
+     323              :  public:
+     324              :   // Note [Disabled VariableVersion]
+     325              :   // VariableVersion struct has an intrusive_ptr pointing VersionCounter struct
+     326              :   // with an atomic variable. Thus `VariableVersion(/*version=*/0)` is not as
+     327              :   // cheap as we expected. In some cases constructing a VariableVersion with
+     328              :   // version 0 is not necessary so we add a cheap constructor which
+     329              :   // doesn't allocate the intrusive_ptr.
+     330              :   // Example use cases are:
+     331              :   //  - Inference tensors don't track version counter, so they'll just always
+     332              :   //    have disabled VariableVersion.
+     333              :   //  - In SavedVariable class we override version_counter_ inside its
+     334              :   //  constructor
+     335              :   //    so that we can use the cheap constructor there.
+     336              :   enum Disabled { DISABLED };
+     337              :   // It's okay to return true even for inference tensor which
+     338              :   // doesn't have version counter enabled.
+     339              :   // We want to be permissive here since in many cases (e.g. make_variable)
+     340              :   // we can std::move a TensorImpl if there's no other uses which saves us
+     341              :   // an additional TensorImpl allocation.
+     342        40076 :   bool unique() const {
+     343        40076 :     return version_counter_ ? 1 == version_counter_.use_count() : true;
+     344              :   }
+     345              :   // NOTE: As of C++11 and 14, default-constructing a std::atomic variable
+     346              :   // leaves it in a persistently undefined state. See
+     347              :   // https://cplusplus.github.io/LWG/issue2334.
+     348       378768 :   VariableVersion(uint32_t version)
+     349       378768 :       : version_counter_(c10::make_intrusive<VersionCounter>(version)) {}
+     350              :   VariableVersion(Disabled = DISABLED) {}
+     351              : 
+     352              :   bool enabled() const {
+     353              :     return version_counter_;
+     354              :   }
+     355              : 
+     356              :   // Note [Inplace update inference tensor]
+     357              :   // 1. Inplace update to inference tensor is forbidden in normal mode.
+     358              :   //   For example:
+     359              :   //     inference_tensor.copy_(normal_tensor_requires_grad)
+     360              :   //   This inplace makes inference_tensor have requires_grad=True and
+     361              :   //   have a grad_fn.  This is bad because views of `inference_tensor`
+     362              :   //   created in InferenceMode won't be able to know the grad_fn since
+     363              :   //   their ViewMeta were not recorded. To match NoGradMode behavior
+     364              :   //   that "inplace update to a view created in NoGradMode raise an error",
+     365              :   //   we just ban inplace update to inference tensor since we can't tell
+     366              :   //   if an inference tensor is a view created in InferenceMode.
+     367              :   //
+     368              :   //   Note that views of normal tensor created in InferenceMode has proper
+     369              :   //   ViewMeta so that they're aware of the grad_fn correctly.
+     370              :   //
+     371              :   // 2. Inplace update to inference tensor in inference tensor doesn't bump
+     372              :   //    version counter.
+     373              :   //    * It either doesn't call bump() by skipping ADInplaceOrView kernel,
+     374              :   //      - e.g. inference_tensor.add_(1)
+     375              :   //    * or bump() is a no-op for inference tensor.
+     376              :   //      - e.g. inference_tensor.add_(normal_tensor)
+     377              :   void bump() {
+     378              :     // TODO: Replace the link to the documentation once it's available.
+     379              :     TORCH_CHECK(
+     380              :         version_counter_ || InferenceMode::is_enabled(),
+     381              :         "Inplace update to inference tensor outside InferenceMode is not allowed."
+     382              :         "You can make a clone to get a normal tensor before doing inplace update."
+     383              :         "See https://github.com/pytorch/rfcs/pull/17 for more details.");
+     384              :     if (version_counter_) {
+     385              :       ++version_counter_->version_;
+     386              :     }
+     387              :   }
+     388              : 
+     389              :   void set_version(int64_t i) {
+     390              :     TORCH_CHECK(
+     391              :         version_counter_,
+     392              :         "Tried to call torch.autograd._unsafe_set_version() on a tensor "
+     393              :         "that does not have a version counter. Was it created in inference mode?");
+     394              :     TORCH_CHECK(i >= 0, "Cannot set a version_counter to a value below 0: ", i);
+     395              :     version_counter_->version_ = i;
+     396              :   }
+     397              : 
+     398              :   // Inference tensor doesn't have version counter so it shouldn't be
+     399              :   // accessed.
+     400              :   uint32_t current_version() const {
+     401              :     TORCH_CHECK(
+     402              :         version_counter_, "Inference tensors do not track version counter.");
+     403              :     return version_counter_->version_;
+     404              :   }
+     405              : };
+     406              : 
+     407              : // Forward declaration of TensorImpl needed for forward declaration of
+     408              : // C10_TensorImpl_Size_Check_Dummy_Class
+     409              : struct C10_API TensorImpl;
+     410              : 
+     411              : /**
+     412              :  * NOTE: Some TensorImpl methods are small and not overridden in the
+     413              :  * PyTorch codebase itself, but may theoretically need to be
+     414              :  * overridden by third-party TensorImpl subclasses. This macro allows
+     415              :  * users that need maximum performance and don't need these extension
+     416              :  * points to disable them with a build-time flag. (In particular,
+     417              :  * XLA's XLATensorImpl currently overrides these methods, so we can't
+     418              :  * enable this flag by default.)
+     419              :  */
+     420              : #ifdef C10_DISABLE_TENSORIMPL_EXTENSIBILITY
+     421              : #define TENSORIMPL_MAYBE_VIRTUAL
+     422              : #else
+     423              : #define TENSORIMPL_MAYBE_VIRTUAL virtual
+     424              : #endif
+     425              : 
+     426              : /**
+     427              :  * The low-level representation of a tensor, which contains a pointer
+     428              :  * to a storage (which contains the actual data) and metadata (e.g., sizes and
+     429              :  * strides) describing this particular view of the data as a tensor.
+     430              :  *
+     431              :  * Some basic characteristics about our in-memory representation of
+     432              :  * tensors:
+     433              :  *
+     434              :  *  - It contains a pointer to a storage struct (Storage/StorageImpl)
+     435              :  *    which contains the pointer to the actual data and records the
+     436              :  *    data type and device of the view.  This allows multiple tensors
+     437              :  *    to alias the same underlying data, which allows to efficiently
+     438              :  *    implement differing *views* on a tensor.
+     439              :  *
+     440              :  *  - The tensor struct itself records view-specific metadata about
+     441              :  *    the tensor, e.g., sizes, strides and offset into storage.
+     442              :  *    Each view of a storage can have a different size or offset.
+     443              :  *
+     444              :  *  - This class is intrusively refcounted.  It is refcounted so that
+     445              :  *    we can support prompt deallocation of large tensors; it is
+     446              :  *    intrusively refcounted so that we can still perform reference
+     447              :  *    counted operations on raw pointers, which is often more convenient
+     448              :  *    when passing tensors across language boundaries.
+     449              :  *
+     450              :  *  - For backwards-compatibility reasons, a tensor may be in an
+     451              :  *    uninitialized state.  A tensor may be uninitialized in the following
+     452              :  *    two ways:
+     453              :  *
+     454              :  *      - A tensor may be DTYPE UNINITIALIZED.  A tensor of this
+     455              :  *        form has an uninitialized dtype.  This situation most
+     456              :  *        frequently arises when a user writes Tensor x(CPU).  The dtype
+     457              :  *        is subsequently initialized when mutable_data<T>() is
+     458              :  *        invoked for the first time.
+     459              :  *
+     460              :  *      - A tensor may be STORAGE UNINITIALIZED.  A tensor of this form
+     461              :  *        has non-zero size, but has a storage with a null data pointer.
+     462              :  *        This situation most frequently arises when a user calls
+     463              :  *        Resize() or FreeMemory().  This is because Caffe2 historically
+     464              :  *        does lazy allocation: allocation of data doesn't occur until
+     465              :  *        mutable_data<T>() is invoked.  A tensor with zero size is
+     466              :  *        always storage initialized, because no allocation is necessary
+     467              :  *        in this case.
+     468              :  *
+     469              :  *    All combinations of these two uninitialized states are possible.
+     470              :  *    Consider the following transcript in idiomatic Caffe2 API:
+     471              :  *
+     472              :  *      Tensor x(CPU); // x is storage-initialized, dtype-UNINITIALIZED
+     473              :  *      x.Resize(4); // x is storage-UNINITIALIZED, dtype-UNINITIALIZED
+     474              :  *      x.mutable_data<float>(); // x is storage-initialized, dtype-initialized
+     475              :  *      x.FreeMemory(); // x is storage-UNINITIALIZED, dtype-initialized.
+     476              :  *
+     477              :  *    All other fields on tensor are always initialized.  In particular,
+     478              :  *    size is always valid. (Historically, a tensor declared as Tensor x(CPU)
+     479              :  *    also had uninitialized size, encoded as numel == -1, but we have now
+     480              :  *    decided to default to zero size, resulting in numel == 0).
+     481              :  *
+     482              :  *    Uninitialized storages MUST be uniquely owned, to keep our model
+     483              :  *    simple.  Thus, we will reject operations which could cause an
+     484              :  *    uninitialized storage to become shared (or a shared storage to
+     485              :  *    become uninitialized, e.g., from FreeMemory).
+     486              :  *
+     487              :  *    In practice, tensors which are storage-UNINITIALIZED and
+     488              :  *    dtype-UNINITIALIZED are *extremely* ephemeral: essentially,
+     489              :  *    after you do a Resize(), you basically always call mutable_data()
+     490              :  *    immediately afterwards.  Most functions are not designed to
+     491              :  *    work if given a storage-UNINITIALIZED, dtype-UNINITIALIZED tensor.
+     492              :  *
+     493              :  *    We intend to eliminate all uninitialized states, so that every
+     494              :  *    tensor is fully initialized in all fields.  Please do not write new code
+     495              :  *    that depends on these uninitialized states.
+     496              :  */
+     497              : struct C10_API TensorImpl : public c10::intrusive_ptr_target {
+     498              :   TensorImpl() = delete;
+     499              :   ~TensorImpl() override;
+     500              :   // Note [Enum ImplType]
+     501              :   // This enum is temporary. In the followup refactor we should
+     502              :   // think about how to specialize TensorImpl creation for view
+     503              :   // tensors. Currently we only special case its key_set_ but
+     504              :   // there's also potential to share version_counter_ directly
+     505              :   // without creating first and then override in as_view.
+     506              :   enum ImplType { VIEW };
+     507              : 
+     508              :   /**
+     509              :    * Construct a 1-dim 0-size tensor backed by the given storage.
+     510              :    */
+     511              :   TensorImpl(
+     512              :       Storage&& storage,
+     513              :       DispatchKeySet,
+     514              :       const caffe2::TypeMeta data_type);
+     515              : 
+     516              :   // See Note [Enum ImplType]
+     517              :   TensorImpl(
+     518              :       ImplType,
+     519              :       Storage&& storage,
+     520              :       DispatchKeySet,
+     521              :       const caffe2::TypeMeta data_type);
+     522              : 
+     523              :   /**
+     524              :    * Construct a 1-dim 0 size tensor that doesn't have a storage.
+     525              :    */
+     526              :   TensorImpl(
+     527              :       DispatchKeySet,
+     528              :       const caffe2::TypeMeta data_type,
+     529              :       c10::optional<c10::Device> device_opt);
+     530              : 
+     531              :   // Legacy constructors so I don't have to go update call sites.
+     532              :   // TODO: When Variable is added, delete these constructors
+     533              :   TensorImpl(
+     534              :       Storage&& storage,
+     535              :       DispatchKey dispatch_key,
+     536              :       const caffe2::TypeMeta data_type)
+     537              :       : TensorImpl(
+     538              :             std::move(storage),
+     539              :             DispatchKeySet(dispatch_key),
+     540              :             data_type) {}
+     541              :   TensorImpl(
+     542              :       DispatchKey dispatch_key,
+     543              :       const caffe2::TypeMeta data_type,
+     544              :       c10::optional<c10::Device> device_opt)
+     545              :       : TensorImpl(DispatchKeySet(dispatch_key), data_type, device_opt) {}
+     546              : 
+     547              :  private:
+     548              :   // This constructor is private, because the data_type is redundant with
+     549              :   // storage.  Still, we pass it in separately because it's easier to write
+     550              :   // the initializer list if we're not worried about storage being moved out
+     551              :   // from under us.
+     552              :   TensorImpl(
+     553              :       Storage&& storage,
+     554              :       DispatchKeySet,
+     555              :       const caffe2::TypeMeta data_type,
+     556              :       c10::optional<c10::Device>);
+     557              : 
+     558              :  public:
+     559              :   TensorImpl(const TensorImpl&) = delete;
+     560              :   TensorImpl& operator=(const TensorImpl&) = delete;
+     561              :   TensorImpl(TensorImpl&&) = delete;
+     562              :   TensorImpl& operator=(TensorImpl&&) = delete;
+     563              : 
+     564              :   /**
+     565              :    * Release (decref) storage, and any other external allocations.  This
+     566              :    * override is for `intrusive_ptr_target` and is used to implement weak
+     567              :    * tensors.
+     568              :    */
+     569              :   void release_resources() override;
+     570              : 
+     571              :  public:
+     572              :   /**
+     573              :    * Return the DispatchKeySet corresponding to this Tensor, specifying
+     574              :    * all of the DispatchKeys that this Tensor identifies as.  This is the
+     575              :    * information used to dispatch operations on this tensor.
+     576              :    */
+     577              :   DispatchKeySet key_set() const {
+     578              :     return key_set_;
+     579              :   }
+     580              : 
+     581              :   // NOTE: The general recipe for customizable methods is that the fastpath
+     582              :   // function (e.g., sizes()) does an unlikely policy test, and if doesn't
+     583              :   // trigger, it does the fast path implementation with no checks and going
+     584              :   // directly to on-TensorImpl fields.  In particular, you never need to
+     585              :   // check ExtraMeta if the policy doesn't trigger, as non-trivial ExtraMeta
+     586              :   // implies the policy will always match.
+     587              :   //
+     588              :   // The default implementations of methods are "safe": they do extra tests
+     589              :   // to make sure the internal state is consistent no matter if you are
+     590              :   // doing symbolic shapes or not.  If you don't want the tests, directly
+     591              :   // override the custom method (e.g., custom_sizes()) to do your preferred
+     592              :   // behavior.
+     593              : 
+     594              :  public:
+     595              :   /**
+     596              :    * Return a reference to the sizes of this tensor.  This reference remains
+     597              :    * valid as long as the tensor is live and not resized.
+     598              :    */
+     599        88706 :   IntArrayRef sizes() const {
+     600        88706 :     if (C10_UNLIKELY(matches_policy(SizesStridesPolicy::CustomSizes))) {
+     601            0 :       return sizes_custom();
+     602              :     }
+     603        88706 :     return sizes_and_strides_.sizes_arrayref();
+     604              :   }
+     605              : 
+     606              :   SymIntArrayRef sym_sizes() const {
+     607              :     if (C10_UNLIKELY(matches_policy(SizesStridesPolicy::CustomSizes))) {
+     608              :       return sym_sizes_custom();
+     609              :     }
+     610              :     // Sizes guaranteed to be non-negative, so unchecked cast is OK
+     611              :     return c10::fromIntArrayRefKnownNonNegative(
+     612              :         sizes_and_strides_.sizes_arrayref());
+     613              :   }
+     614              : 
+     615              :   IntArrayRef sizes_default() const {
+     616              :     // TODO: force backtrace to be printed on this error
+     617              :     TORCH_CHECK(
+     618              :         !has_symbolic_sizes_strides_,
+     619              :         "Cannot call sizes() on tensor with symbolic sizes/strides");
+     620              :     return sizes_and_strides_.sizes_arrayref();
+     621              :   }
+     622              : 
+     623              :   SymIntArrayRef sym_sizes_default() const {
+     624              :     if (has_symbolic_sizes_strides_) {
+     625              :       return symbolic_shape_meta().sizes_;
+     626              :     } else {
+     627              :       // Sizes guaranteed to be non-negative, so unchecked cast is OK
+     628              :       return c10::fromIntArrayRefKnownNonNegative(sizes_default());
+     629              :     }
+     630              :   }
+     631              : 
+     632              :   // From https://stackoverflow.com/a/3057522/23845
+     633              :   // TODO: does C++14 have a stdlib template for this?
+     634              :   template <typename T>
+     635              :   struct identity {
+     636              :     typedef T type;
+     637              :   };
+     638              : 
+     639              :   template <typename T>
+     640              :   ArrayRef<T> generic_sizes() {
+     641              :     return _generic_sizes(identity<T>());
+     642              :   }
+     643              : 
+     644              :   ArrayRef<int64_t> _generic_sizes(identity<int64_t>) {
+     645              :     return sizes();
+     646              :   }
+     647              :   ArrayRef<c10::SymInt> _generic_sizes(identity<c10::SymInt>) {
+     648              :     return sym_sizes();
+     649              :   }
+     650              : 
+     651              :   template <typename T>
+     652              :   ArrayRef<T> generic_strides() {
+     653              :     return _generic_strides(identity<T>());
+     654              :   }
+     655              : 
+     656              :   ArrayRef<int64_t> _generic_strides(identity<int64_t>) {
+     657              :     return strides();
+     658              :   }
+     659              :   ArrayRef<c10::SymInt> _generic_strides(identity<c10::SymInt>) {
+     660              :     return sym_strides();
+     661              :   }
+     662              : 
+     663              :   template <typename T>
+     664              :   T generic_storage_offset() {
+     665              :     return _generic_storage_offset(identity<T>());
+     666              :   }
+     667              : 
+     668              :   int64_t _generic_storage_offset(identity<int64_t>) {
+     669              :     return storage_offset();
+     670              :   }
+     671              :   c10::SymInt _generic_storage_offset(identity<c10::SymInt>) {
+     672              :     return sym_storage_offset();
+     673              :   }
+     674              : 
+     675              :   /**
+     676              :    * The number of elements in a tensor.
+     677              :    *
+     678              :    * WARNING: Previously, if you were using the Caffe2 API, you could
+     679              :    * test numel() == -1 to see if a tensor was uninitialized.  This
+     680              :    * is no longer true; numel always accurately reports the product
+     681              :    * of sizes of a tensor.
+     682              :    */
+     683          500 :   int64_t numel() const {
+     684          500 :     if (C10_UNLIKELY(matches_policy(SizesStridesPolicy::CustomSizes))) {
+     685            0 :       return numel_custom();
+     686              :     }
+     687          500 :     return numel_;
+     688              :   }
+     689              : 
+     690              :   c10::SymInt sym_numel() const {
+     691              :     if (C10_UNLIKELY(matches_policy(SizesStridesPolicy::CustomSizes))) {
+     692              :       return sym_numel_custom();
+     693              :     }
+     694              :     return c10::SymInt(SymInt::UNCHECKED, numel_);
+     695              :   }
+     696              : 
+     697              :   int64_t numel_default() const {
+     698              :     TORCH_CHECK(
+     699              :         !has_symbolic_sizes_strides_,
+     700              :         "Cannot call numel() on tensor with symbolic sizes/strides");
+     701              :     return numel_;
+     702              :   }
+     703              : 
+     704              :   c10::SymInt sym_numel_default() const {
+     705              :     if (has_symbolic_sizes_strides_) {
+     706              :       return symbolic_shape_meta().numel_;
+     707              :     } else {
+     708              :       return c10::SymInt(SymInt::UNCHECKED, numel_);
+     709              :     }
+     710              :   }
+     711              : 
+     712              :   /**
+     713              :    * Return the number of dimensions of this tensor.  Note that 0-dimension
+     714              :    * represents a Tensor that is a Scalar, e.g., one that has a single element.
+     715              :    */
+     716     15317888 :   int64_t dim() const {
+     717     15317888 :     if (C10_UNLIKELY(matches_policy(SizesStridesPolicy::CustomSizes))) {
+     718            0 :       return dim_custom();
+     719              :     }
+     720     15317888 :     return sizes_and_strides_.size();
+     721              :   }
+     722              : 
+     723              :   int64_t dim_default() const {
+     724              :     if (has_symbolic_sizes_strides_) {
+     725              :       return symbolic_shape_meta().sizes_.size();
+     726              :     } else {
+     727              :       return sizes_and_strides_.size();
+     728              :     }
+     729              :   }
+     730              : 
+     731              :   /**
+     732              :    * Return the offset in number of elements into the storage that this
+     733              :    * tensor points to.  Most tensors have storage_offset() == 0, but,
+     734              :    * for example, an index into a tensor will have a non-zero storage_offset().
+     735              :    *
+     736              :    * WARNING: This is NOT computed in bytes.
+     737              :    */
+     738              :   int64_t storage_offset() const {
+     739              :     // TODO: maybe this should be toggled by strides
+     740              :     if (C10_UNLIKELY(matches_policy(SizesStridesPolicy::CustomSizes))) {
+     741              :       return storage_offset_custom();
+     742              :     }
+     743              :     return storage_offset_;
+     744              :   }
+     745              : 
+     746              :   c10::SymInt sym_storage_offset() const {
+     747              :     if (C10_UNLIKELY(matches_policy(SizesStridesPolicy::CustomSizes))) {
+     748              :       return sym_storage_offset_custom();
+     749              :     }
+     750              :     return c10::SymInt(SymInt::UNCHECKED, storage_offset_);
+     751              :   }
+     752              : 
+     753              :   int64_t storage_offset_default() const {
+     754              :     TORCH_CHECK(
+     755              :         !has_symbolic_sizes_strides_,
+     756              :         "Cannot call storage_offset() on tensor with symbolic sizes/strides");
+     757              :     return storage_offset_;
+     758              :   }
+     759              : 
+     760              :   c10::SymInt sym_storage_offset_default() const {
+     761              :     if (has_symbolic_sizes_strides_) {
+     762              :       return symbolic_shape_meta().storage_offset_;
+     763              :     } else {
+     764              :       return c10::SymInt(SymInt::UNCHECKED, storage_offset_);
+     765              :     }
+     766              :   }
+     767              : 
+     768              :   /**
+     769              :    * Return a reference to the strides of this tensor.  This reference remains
+     770              :    * valid as long as the tensor is live and not restrided.
+     771              :    */
+     772           80 :   IntArrayRef strides() const {
+     773           80 :     if (C10_UNLIKELY(matches_policy(SizesStridesPolicy::CustomStrides))) {
+     774            0 :       return strides_custom();
+     775              :     }
+     776           80 :     return sizes_and_strides_.strides_arrayref();
+     777              :   }
+     778              : 
+     779              :   c10::SymIntArrayRef sym_strides() const {
+     780              :     if (C10_UNLIKELY(matches_policy(SizesStridesPolicy::CustomStrides))) {
+     781              :       return sym_strides_custom();
+     782              :     }
+     783              :     return c10::fromIntArrayRefKnownNonNegative(strides_default());
+     784              :   }
+     785              : 
+     786              :   IntArrayRef strides_default() const {
+     787              :     TORCH_CHECK(
+     788              :         !has_symbolic_sizes_strides_,
+     789              :         "Cannot call strides() on tensor with symbolic sizes/strides");
+     790              :     return sizes_and_strides_.strides_arrayref();
+     791              :   }
+     792              : 
+     793              :   c10::SymIntArrayRef sym_strides_default() const {
+     794              :     if (has_symbolic_sizes_strides_) {
+     795              :       return symbolic_shape_meta().strides_;
+     796              :     } else {
+     797              :       return c10::fromIntArrayRefKnownNonNegative(strides_default());
+     798              :     }
+     799              :   }
+     800              : 
+     801              :   /**
+     802              :    * Whether or not a tensor is laid out in contiguous memory.
+     803              :    *
+     804              :    * Tensors with non-trivial strides are not contiguous.  See
+     805              :    * compute_contiguous() for the exact definition of whether or not
+     806              :    * a tensor is contiguous or not.
+     807              :    */
+     808              :   bool is_contiguous(
+     809              :       at::MemoryFormat memory_format = at::MemoryFormat::Contiguous) const {
+     810              :     if (C10_UNLIKELY(matches_policy(SizesStridesPolicy::CustomStrides))) {
+     811              :       return is_contiguous_custom(memory_format);
+     812              :     }
+     813              :     return is_contiguous_default(memory_format);
+     814              :   }
+     815              : 
+     816              :   // These are factored into separate functions in case subclasses
+     817              :   // want to use them
+     818              :   bool is_contiguous_default(at::MemoryFormat memory_format) const {
+     819              :     if (has_symbolic_sizes_strides_) {
+     820              :       if (memory_format == at::MemoryFormat::ChannelsLast) {
+     821              :         return symbolic_shape_meta().is_channels_last_contiguous_.guard_bool(
+     822              :             __FILE__, __LINE__);
+     823              :       } else if (memory_format == at::MemoryFormat::ChannelsLast3d) {
+     824              :         return symbolic_shape_meta().is_channels_last_3d_contiguous_.guard_bool(
+     825              :             __FILE__, __LINE__);
+     826              :       }
+     827              :       return symbolic_shape_meta().is_contiguous_.guard_bool(
+     828              :           __FILE__, __LINE__);
+     829              :     }
+     830              : 
+     831              :     if (memory_format == at::MemoryFormat::ChannelsLast) {
+     832              :       return is_channels_last_contiguous_;
+     833              :     } else if (memory_format == at::MemoryFormat::ChannelsLast3d) {
+     834              :       return is_channels_last_3d_contiguous_;
+     835              :     }
+     836              :     return is_contiguous_;
+     837              :   }
+     838              : 
+     839              :   bool is_strides_like_default(at::MemoryFormat memory_format) const {
+     840              :     if (has_symbolic_sizes_strides_) {
+     841              :       if (memory_format == at::MemoryFormat::ChannelsLast) {
+     842              :         return symbolic_shape_meta().is_channels_last_.guard_bool(
+     843              :             __FILE__, __LINE__);
+     844              :       } else if (memory_format == at::MemoryFormat::ChannelsLast3d) {
+     845              :         return symbolic_shape_meta().is_channels_last_3d_.guard_bool(
+     846              :             __FILE__, __LINE__);
+     847              :       } else {
+     848              :         return false;
+     849              :       }
+     850              :     }
+     851              : 
+     852              :     if (memory_format == at::MemoryFormat::ChannelsLast) {
+     853              :       return is_channels_last_;
+     854              :     } else if (memory_format == at::MemoryFormat::ChannelsLast3d) {
+     855              :       return is_channels_last_3d_;
+     856              :     } else {
+     857              :       return false;
+     858              :     }
+     859              :   }
+     860              : 
+     861              :   bool is_non_overlapping_and_dense_default() const {
+     862              :     if (has_symbolic_sizes_strides_) {
+     863              :       return symbolic_shape_meta().is_non_overlapping_and_dense_.guard_bool(
+     864              :           __FILE__, __LINE__);
+     865              :     } else {
+     866              :       return is_non_overlapping_and_dense_;
+     867              :     }
+     868              :   }
+     869              : 
+     870              :   // NB: these dim accessor functions don't have _default(), as you can use
+     871              :   // sizes_default/strides_default
+     872              :   /**
+     873              :    * Return the size of a tensor at some dimension, wrapping the dimension if
+     874              :    * necessary.
+     875              :    *
+     876              :    * NOTE: if you know wrapping is unnecessary, do sizes()[d] instead; it will
+     877              :    * be faster
+     878              :    */
+     879     15310736 :   int64_t size(int64_t d) const {
+     880     15310736 :     if (C10_UNLIKELY(matches_policy(SizesStridesPolicy::CustomSizes))) {
+     881            0 :       return size_custom(d);
+     882              :     }
+     883     15310736 :     d = maybe_wrap_dim(d, dim(), /*wrap_scalar=*/false);
+     884     15310736 :     return sizes_and_strides_.size_at_unchecked(d);
+     885              :   }
+     886              : 
+     887              :   c10::SymInt sym_size(int64_t d) const {
+     888              :     if (C10_UNLIKELY(matches_policy(SizesStridesPolicy::CustomSizes))) {
+     889              :       return sym_size_custom(d);
+     890              :     }
+     891              :     d = maybe_wrap_dim(d, dim(), /*wrap_scalar=*/false);
+     892              :     const auto sizes = this->sym_sizes();
+     893              :     return sizes[d];
+     894              :   }
+     895              : 
+     896              :   /**
+     897              :    * Return the stride of a tensor at some dimension, wrapping the dimension
+     898              :    * if necessary.
+     899              :    *
+     900              :    * NOTE: if you know wrapping is unnecessary, do sizes()[d] instead; it will
+     901              :    * be faster
+     902              :    */
+     903              :   int64_t stride(int64_t d) const {
+     904              :     d = maybe_wrap_dim(d, dim(), false);
+     905              :     if (C10_UNLIKELY(matches_policy(SizesStridesPolicy::CustomStrides))) {
+     906              :       // TODO: provide stride_custom, symmetrically with size_custom.
+     907              :       // There is presently no user for it; only NestedTensor is using
+     908              :       // size_custom overrideability
+     909              :       return strides_custom()[d]; // unchecked (maybe_wrap_dim enforces bounds)
+     910              :     }
+     911              :     // Intentionally don't call default, which also handles symbolic
+     912              :     return sizes_and_strides_.stride_at_unchecked(d);
+     913              :   }
+     914              : 
+     915              :   enum class SizesStridesPolicy : uint8_t {
+     916              :     // Default behavior, e.g., dense tensor.
+     917              :     //
+     918              :     // Can override: nothing
+     919              :     Default = 0,
+     920              :     // Customizable strides behavior, e.g., sparse tensor,
+     921              :     // mkldnn tensor.
+     922              :     //
+     923              :     // Can override: strides(), is_contiguous()
+     924              :     CustomStrides = 1,
+     925              :     // Customizable sizes behavior, e.g., nested tensor
+     926              :     //
+     927              :     // Can override: strides(), is_contiguous(), sizes(), dim(), numel()
+     928              :     CustomSizes = 2
+     929              :   };
+     930              : 
+     931              :  protected:
+     932     30717910 :   inline bool matches_policy(SizesStridesPolicy policy) const {
+     933     30717910 :     return sizes_strides_policy_ >= static_cast<uint8_t>(policy);
+     934              :   }
+     935              : 
+     936              :   inline bool matches_custom(SizesStridesPolicy policy) const {
+     937              :     return custom_sizes_strides_ >= static_cast<uint8_t>(policy);
+     938              :   }
+     939              : 
+     940              :   inline bool matches_python_custom(SizesStridesPolicy policy) const {
+     941              :     auto r = python_custom_sizes_strides_ >= static_cast<uint8_t>(policy);
+     942              :     if (r) {
+     943              :       TORCH_INTERNAL_ASSERT(is_python_dispatch())
+     944              :     }
+     945              :     return r;
+     946              :   }
+     947              : 
+     948              :   /**
+     949              :    * Customization points for the functions above.  sizes_strides_policy_
+     950              :    * must be set to enable these.
+     951              :    *
+     952              :    * NB: dim is overrideable separately from sizes because it is possible
+     953              :    * for a tensor to have rank, but not well defined sizes.
+     954              :    */
+     955              :   // sizes_strides_policy_ >= CustomStrides
+     956              :   virtual bool is_contiguous_custom(at::MemoryFormat memory_format) const;
+     957              :   virtual bool is_strides_like_custom(at::MemoryFormat memory_format) const;
+     958              :   virtual bool is_non_overlapping_and_dense_custom() const;
+     959              :   // sizes_strides_policy_ >= CustomSizes
+     960              :   // Currently this method only exists to be overwritten by subclasses such as
+     961              :   // NestedTensorImpl.
+     962              :   virtual int64_t size_custom(int64_t d) const {
+     963              :     // TODO: We could add support to Python dispatch here.
+     964              :     // TODO: We could call into aten::size.int instead of
+     965              :     // sizes_custom()[d] and enable use of the dispatcher.
+     966              :     d = maybe_wrap_dim(d, dim(), /*wrap_scalar=*/false);
+     967              :     return sizes_custom()[d]; // unchecked (maybe_wrap_dim enforces bounds)
+     968              :   }
+     969              : 
+     970              :   virtual c10::SymInt sym_size_custom(int64_t d) const {
+     971              :     // TODO: We could add support to Python dispatch here.
+     972              :     // TODO: We could call into aten::size.int instead of
+     973              :     // sym_sizes_custom()[d] and enable use of the dispatcher.
+     974              :     d = maybe_wrap_dim(d, dim(), /*wrap_scalar=*/false);
+     975              :     return sym_sizes_custom()[d]; // unchecked (maybe_wrap_dim enforces bounds)
+     976              :   }
+     977              : 
+     978              :   virtual IntArrayRef sizes_custom() const;
+     979              :   virtual IntArrayRef strides_custom() const;
+     980              :   virtual int64_t numel_custom() const;
+     981              :   virtual int64_t storage_offset_custom() const;
+     982              :   virtual int64_t dim_custom() const;
+     983              :   virtual Device device_custom() const;
+     984              :   virtual Layout layout_custom() const;
+     985              : 
+     986              :   virtual c10::SymIntArrayRef sym_sizes_custom() const;
+     987              :   virtual c10::SymIntArrayRef sym_strides_custom() const;
+     988              :   virtual c10::SymInt sym_numel_custom() const;
+     989              :   virtual c10::SymInt sym_storage_offset_custom() const;
+     990              : 
+     991              :  public:
+     992              :   /**
+     993              :    * True if this tensor has storage. See storage() for details.
+     994              :    */
+     995              : #ifdef DEBUG
+     996              :   // Allow subclasses to check that their storage_ is never getting set in debug
+     997              :   // builds.
+     998              :   virtual
+     999              : #else
+    1000              :   TENSORIMPL_MAYBE_VIRTUAL
+    1001              : #endif
+    1002              :       bool
+    1003              :       has_storage() const
+    1004              :   // NOTE: we devirtualize this because it arguably shouldn't be an
+    1005              :   // error just to ask subclasses if they have storage.
+    1006              :   // This used to throw for most subclasses, but OpaqueTensorImpl
+    1007              :   // wanted it to successfully return false, so we went ahead and made
+    1008              :   // it a non-error.
+    1009              : #ifdef C10_DISABLE_TENSORIMPL_EXTENSIBILITY
+    1010              :   {
+    1011              :     return storage_;
+    1012              :   }
+    1013              : #else
+    1014              :       ;
+    1015              : #endif
+    1016              : 
+    1017              :   /**
+    1018              :    * Return the underlying storage of a Tensor.  Multiple tensors may share
+    1019              :    * a single storage.  A Storage is an impoverished, Tensor-like class
+    1020              :    * which supports far less operations than Tensor.
+    1021              :    *
+    1022              :    * Avoid using this method if possible; try to use only Tensor APIs to perform
+    1023              :    * operations.
+    1024              :    */
+    1025              :   TENSORIMPL_MAYBE_VIRTUAL const Storage& storage() const {
+    1026              :     if (C10_UNLIKELY(storage_access_should_throw_)) {
+    1027              :       throw_storage_access_error();
+    1028              :     }
+    1029              :     return storage_;
+    1030              :   }
+    1031              : 
+    1032              :   /**
+    1033              :    * Return the underlying storage, unsafely assuming this is a basic strided
+    1034              :    * tensor. In cases where `storage` access would throw, this returns a
+    1035              :    * default-constructed Storage.
+    1036              :    */
+    1037              :   inline const Storage& unsafe_storage() const {
+    1038              :     return storage_;
+    1039              :   }
+    1040              : 
+    1041        40076 :   bool unique_version() const {
+    1042        40076 :     return version_counter_.unique();
+    1043              :   }
+    1044              : 
+    1045              :  protected:
+    1046              :   virtual Layout layout_impl() const {
+    1047              :     TORCH_CHECK(
+    1048              :         false, "layout_impl is only implemented for TensorImpl subclasses.");
+    1049              :   }
+    1050              : 
+    1051              :  public:
+    1052              :   // Whether a tensor is sparse COO or not.
+    1053              :   bool is_sparse() const {
+    1054              :     // NB: This method is not virtual and avoid dispatches for performance
+    1055              :     // reasons.
+    1056              :     return key_set_.has_all(c10::sparse_ks);
+    1057              :   }
+    1058              : 
+    1059              :   // Whether a tensor is sparse CSR or not.
+    1060              :   bool is_sparse_csr() const {
+    1061              :     return layout() == kSparseCsr;
+    1062              :   }
+    1063              : 
+    1064              :   bool is_quantized() const {
+    1065              :     // NB: This method is not virtual and avoid dispatches for performance
+    1066              :     // reasons.
+    1067              :     constexpr auto quantized_ks = DispatchKeySet(DispatchKey::Quantized);
+    1068              :     return key_set_.has_all(quantized_ks);
+    1069              :   }
+    1070              : 
+    1071              :   bool is_meta() const {
+    1072              :     // NB: This method is not virtual and avoid dispatches for performance
+    1073              :     // reasons.
+    1074              :     if (C10_UNLIKELY(device_policy_)) {
+    1075              :       return device_custom().is_meta();
+    1076              :     }
+    1077              :     return device_opt_.has_value() && device_opt_->type() == kMeta;
+    1078              :   }
+    1079              : 
+    1080              :   bool is_cpu() const {
+    1081              :     // NB: This method is not virtual and avoid dispatches for performance
+    1082              :     // reasons.
+    1083              :     if (C10_UNLIKELY(device_policy_)) {
+    1084              :       return device_custom().is_cpu();
+    1085              :     }
+    1086              :     // Note: we cannot rely on dispatch keys to determine the device type
+    1087              :     // of a tensor, because "wrapper" tensors (like FunctionalTensorWrapper)
+    1088              :     // don't include backend dispatch keys.
+    1089              :     return device_opt_.has_value() && device_opt_->type() == kCPU;
+    1090              :   }
+    1091              : 
+    1092              :   bool is_cuda() const {
+    1093              :     // NB: This method is not virtual and avoid dispatches for performance
+    1094              :     // reasons.
+    1095              :     if (C10_UNLIKELY(device_policy_)) {
+    1096              :       return device_custom().is_cuda();
+    1097              :     }
+    1098              :     return device_opt_.has_value() && device_opt_->type() == kCUDA;
+    1099              :   }
+    1100              : 
+    1101              :   bool is_xpu() const {
+    1102              :     // NB: This method is not virtual and avoid dispatches for performance
+    1103              :     // reasons.
+    1104              :     if (C10_UNLIKELY(device_policy_)) {
+    1105              :       return device_custom().is_xpu();
+    1106              :     }
+    1107              :     return device_opt_.has_value() && device_opt_->type() == kXPU;
+    1108              :   }
+    1109              : 
+    1110              :   bool is_ipu() const {
+    1111              :     if (C10_UNLIKELY(device_policy_)) {
+    1112              :       return device_custom().is_ipu();
+    1113              :     }
+    1114              :     return device_opt_.has_value() && device_opt_->type() == kIPU;
+    1115              :   }
+    1116              : 
+    1117              :   bool is_xla() const {
+    1118              :     if (C10_UNLIKELY(device_policy_)) {
+    1119              :       return device_custom().is_xla();
+    1120              :     }
+    1121              :     return device_opt_.has_value() && device_opt_->type() == kXLA;
+    1122              :   }
+    1123              : 
+    1124              :   bool is_mtia() const {
+    1125              :     if (C10_UNLIKELY(device_policy_)) {
+    1126              :       return device_custom().is_mtia();
+    1127              :     }
+    1128              :     return device_opt_.has_value() && device_opt_->type() == kMTIA;
+    1129              :   }
+    1130              : 
+    1131              :   bool is_hpu() const {
+    1132              :     if (C10_UNLIKELY(device_policy_)) {
+    1133              :       return device_custom().is_hpu();
+    1134              :     }
+    1135              :     return device_opt_.has_value() && device_opt_->type() == kHPU;
+    1136              :   }
+    1137              : 
+    1138              :   bool is_lazy() const {
+    1139              :     if (C10_UNLIKELY(device_policy_)) {
+    1140              :       return device_custom().is_lazy();
+    1141              :     }
+    1142              :     return device_opt_.has_value() && device_opt_->type() == kLazy;
+    1143              :   }
+    1144              : 
+    1145              :   bool is_hip() const {
+    1146              :     // NB: This method is not virtual and avoid dispatches for performance
+    1147              :     // reasons.
+    1148              :     if (C10_UNLIKELY(device_policy_)) {
+    1149              :       return device_custom().is_hip();
+    1150              :     }
+    1151              :     return device_opt_.has_value() && device_opt_->type() == kHIP;
+    1152              :   }
+    1153              : 
+    1154              :   bool is_ve() const {
+    1155              :     // NB: This method is not virtual and avoid dispatches for performance
+    1156              :     // reasons.
+    1157              :     if (C10_UNLIKELY(device_policy_)) {
+    1158              :       return device_custom().is_ve();
+    1159              :     }
+    1160              :     return device_opt_.has_value() && device_opt_->type() == kVE;
+    1161              :   }
+    1162              : 
+    1163              :   bool is_mkldnn() const {
+    1164              :     return key_set_.has_all(c10::mkldnn_ks);
+    1165              :   }
+    1166              : 
+    1167              :   bool is_vulkan() const {
+    1168              :     if (C10_UNLIKELY(device_policy_)) {
+    1169              :       return device_custom().is_vulkan();
+    1170              :     }
+    1171              :     return device_opt_.has_value() && device_opt_->type() == kVulkan;
+    1172              :   }
+    1173              : 
+    1174              :   bool is_metal() const {
+    1175              :     if (C10_UNLIKELY(device_policy_)) {
+    1176              :       return device_custom().is_metal();
+    1177              :     }
+    1178              :     return device_opt_.has_value() && device_opt_->type() == kMetal;
+    1179              :   }
+    1180              : 
+    1181              :   bool is_mps() const {
+    1182              :     if (C10_UNLIKELY(device_policy_)) {
+    1183              :       return device_custom().is_mps();
+    1184              :     }
+    1185              :     return device_opt_.has_value() && device_opt_->type() == kMPS;
+    1186              :   }
+    1187              : 
+    1188              :   bool is_ort() const {
+    1189              :     if (C10_UNLIKELY(device_policy_)) {
+    1190              :       return device_custom().is_ort();
+    1191              :     }
+    1192              :     return device_opt_.has_value() && device_opt_->type() == kORT;
+    1193              :   }
+    1194              : 
+    1195              :   bool is_nested() const {
+    1196              :     return key_set_.has(DispatchKey::NestedTensor);
+    1197              :   }
+    1198              : 
+    1199              :   // TODO: remove this once we don't automatically enabled Autograd dispatch
+    1200              :   // keys
+    1201              :   //       in TensorImpl constructor.
+    1202              :   // DON'T USE THIS API!! It's only created for testing purpose in
+    1203              :   // file aten/src/ATen/core/boxing/impl/test_helpers.h
+    1204              :   void remove_autograd_key() {
+    1205              :     key_set_ = key_set_ - autograd_dispatch_keyset;
+    1206              :   }
+    1207              : 
+    1208              :   // Inference tensor doesn't have autograd or ADInplaceOrView key.
+    1209              :   // Invariant:
+    1210              :   //   Inference tensor has version_counter_.enabled() == false
+    1211              :   bool is_inference() {
+    1212              :     bool no_ADInplaceOrView = !key_set_.has_any(c10::inplace_or_view_ks);
+    1213              :     bool no_Autograd = !key_set_.has_any(c10::autograd_dispatch_keyset);
+    1214              :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+    1215              :         no_ADInplaceOrView == no_Autograd,
+    1216              :         "ADInplaceOrView and Autograd keys must be on/off at the same time.");
+    1217              :     return no_ADInplaceOrView && no_Autograd;
+    1218              :   }
+    1219              : 
+    1220              :   int64_t get_device() const {
+    1221              :     if (C10_UNLIKELY(device_policy_)) {
+    1222              :       return device_custom().index();
+    1223              :     }
+    1224              :     return device_default().index();
+    1225              :   }
+    1226              : 
+    1227              :   Device device() const {
+    1228              :     if (C10_UNLIKELY(device_policy_)) {
+    1229              :       return device_custom();
+    1230              :     }
+    1231              :     return device_default();
+    1232              :   }
+    1233              : 
+    1234              :  protected:
+    1235              :   c10::Device device_default() const {
+    1236              :     TORCH_CHECK(device_opt_.has_value(), "tensor does not have a device");
+    1237              :     // See NOTE [c10::optional operator usage in CUDA]
+    1238              :     return *device_opt_;
+    1239              :   }
+    1240              : 
+    1241              :  public:
+    1242              :   Layout layout() const {
+    1243              :     if (C10_UNLIKELY(layout_policy_)) {
+    1244              :       return layout_custom();
+    1245              :     }
+    1246              : 
+    1247              :     // NB: This method is not virtual and avoid dispatches for perf.
+    1248              :     // strided is also the most common layout type, so we check for
+    1249              :     // strided case first.
+    1250              :     // This keyset must also be kept in sync with the logic in
+    1251              :     // is_sparse() / is_sparse_csr() / is_mkldnn()
+    1252              :     constexpr auto sparse_and_sparsecsr_and_mkldnn_ks =
+    1253              :         c10::sparse_ks | c10::sparse_csr_ks | c10::mkldnn_ks;
+    1254              :     if (!key_set_.has_any(sparse_and_sparsecsr_and_mkldnn_ks)) {
+    1255              :       return kStrided;
+    1256              :     } else if (is_sparse()) {
+    1257              :       return kSparse;
+    1258              :     } else if (key_set_.has_any(c10::sparse_csr_ks)) {
+    1259              :       // Typically, the tensor dispatch keys define the tensor layout
+    1260              :       // uniquely. This allows using non-virtual layout method for
+    1261              :       // better performance. However, when tensor's layout depends,
+    1262              :       // say, on tensor attributes, one must use this execution path
+    1263              :       // where the corresponding tensor impl class overwrites virtual
+    1264              :       // layout_impl() method.
+    1265              :       //
+    1266              :       // TODO: implement layout() as native function/method so that
+    1267              :       // __torch_dispatch__ users will be able to redefine the
+    1268              :       // layout() method.
+    1269              :       return layout_impl();
+    1270              :     } else {
+    1271              :       TORCH_INTERNAL_ASSERT(
+    1272              :           is_mkldnn(), "There is an error in the layout calculation logic.");
+    1273              :       return kMkldnn;
+    1274              :     }
+    1275              :   }
+    1276              : 
+    1277              :   /**
+    1278              :    * True if a tensor was auto-wrapped from a C++ or Python number.
+    1279              :    * For example, when you write 't + 2', 2 is auto-wrapped into a Tensor
+    1280              :    * with `is_wrapped_number_` set to true.
+    1281              :    *
+    1282              :    * Wrapped numbers do not participate in the result type computation for
+    1283              :    * mixed-type operations if there are any Tensors that are not wrapped
+    1284              :    * numbers.  This is useful, because we want 't + 2' to work with
+    1285              :    * any type of tensor, not just LongTensor (which is what integers
+    1286              :    * in Python represent).
+    1287              :    *
+    1288              :    * Otherwise, they behave like their non-wrapped equivalents.
+    1289              :    * See [Result type computation] in TensorIterator.h.
+    1290              :    *
+    1291              :    * Why did we opt for wrapped numbers, as opposed to just having
+    1292              :    * an extra function add(Tensor, Scalar)?  This helps greatly reduce
+    1293              :    * the amount of code we have to write for add, when actually
+    1294              :    * a Tensor-Scalar addition is really just a Tensor-Tensor
+    1295              :    * addition when the RHS is 0-dim (except for promotion behavior.)
+    1296              :    */
+    1297              :   bool is_wrapped_number() const {
+    1298              :     return is_wrapped_number_;
+    1299              :   }
+    1300              : 
+    1301              :   /**
+    1302              :    * Set whether or not a tensor was auto-wrapped from a C++ or Python
+    1303              :    * number.  You probably don't want to call this, unless you are
+    1304              :    * writing binding code.
+    1305              :    */
+    1306              :   void set_wrapped_number(bool value) {
+    1307              :     TORCH_INTERNAL_ASSERT(dim() == 0);
+    1308              :     is_wrapped_number_ = value;
+    1309              :   }
+    1310              : 
+    1311              :   /**
+    1312              :    * Returns true if Tensor supports as_strided and as_strided_backward.
+    1313              :    * This is used in autograd to perform inplace update on view Tensors.
+    1314              :    * See Note [View + Inplace update for base tensor] and
+    1315              :    * [View + Inplace update for view tensor] for details.
+    1316              :    * Note this method only returns true for XLA backend, where it
+    1317              :    * simulates strided Tensor to support most view ops, but it cannot
+    1318              :    * fully support general `as_strided` case.
+    1319              :    * It can be expanded as needed in the future, e.g sparse Tensor.
+    1320              :    */
+    1321              :   inline bool support_as_strided() const {
+    1322              :     if (is_nested()) {
+    1323              :       return false;
+    1324              :     }
+    1325              :     if (key_set_.has(DispatchKey::Functionalize)) {
+    1326              :       return false;
+    1327              :     }
+    1328              :     return device().supports_as_strided();
+    1329              :   }
+    1330              : 
+    1331              :   // ~~~~~ Autograd API ~~~~~
+    1332              :   // Some methods below are defined in TensorImpl.cpp because Tensor is an
+    1333              :   // incomplete type.
+    1334              : 
+    1335              :   /**
+    1336              :    * Set whether or not a tensor requires gradient.
+    1337              :    */
+    1338              :   void set_requires_grad(bool requires_grad);
+    1339              : 
+    1340              :   /**
+    1341              :    * True if a tensor requires gradient.  Tensors which require gradient
+    1342              :    * have history tracked for any operations performed on them, so that
+    1343              :    * we can automatically differentiate back to them.  A tensor that
+    1344              :    * requires gradient and has no history is a "leaf" tensor, which we
+    1345              :    * accumulate gradients into.
+    1346              :    */
+    1347              :   bool requires_grad() const;
+    1348              : 
+    1349              :   /**
+    1350              :    * Return a mutable reference to the gradient.  This is conventionally
+    1351              :    * used as `t.grad() = x` to set a gradient to a completely new tensor.
+    1352              :    */
+    1353              :   at::Tensor& mutable_grad();
+    1354              : 
+    1355              :   /**
+    1356              :    * Return the accumulated gradient of a tensor.  This gradient is written
+    1357              :    * into when performing backwards, when this tensor is a leaf tensor.
+    1358              :    */
+    1359              :   const at::Tensor& grad() const;
+    1360              : 
+    1361              :   /**
+    1362              :    * Whether or not the imaginary part of the tensor should be negated
+    1363              :    */
+    1364              :   inline bool is_conj() const {
+    1365              :     constexpr auto conjugate_ks = DispatchKeySet(DispatchKey::Conjugate);
+    1366              :     return key_set_.has_all(conjugate_ks);
+    1367              :   }
+    1368              : 
+    1369              :   /**
+    1370              :    * Set whether or not to take the conjugate of the tensor (flip the imaginary
+    1371              :    * bit).
+    1372              :    */
+    1373              :   void _set_conj(bool value) {
+    1374              :     if (value) {
+    1375              :       key_set_ = key_set_.add(DispatchKey::Conjugate);
+    1376              :       TORCH_INTERNAL_ASSERT(isComplexType(typeMetaToScalarType(dtype())));
+    1377              :     } else {
+    1378              :       key_set_ = key_set_.remove(DispatchKey::Conjugate);
+    1379              :     }
+    1380              :   }
+    1381              : 
+    1382              :   /**
+    1383              :    * XXX: do not use, private api!
+    1384              :    * Update the backend component related keys to the backend component
+    1385              :    * corresponding to this device.
+    1386              :    */
+    1387              :   void _change_backend_component_keys(c10::Device device);
+    1388              : 
+    1389              :   /**
+    1390              :    * Whether or not the tensor is a zerotensor
+    1391              :    */
+    1392              :   inline bool _is_zerotensor() const {
+    1393              :     constexpr auto zerotensor_ks = DispatchKeySet(DispatchKey::ZeroTensor);
+    1394              :     return key_set_.has_all(zerotensor_ks);
+    1395              :   }
+    1396              : 
+    1397              :   /**
+    1398              :    Set whether or not the tensor is a zero tensor
+    1399              :   */
+    1400              :   void _set_zero(bool value) {
+    1401              :     if (value) {
+    1402              :       TORCH_INTERNAL_ASSERT(
+    1403              :           false,
+    1404              :           "Please call `torch._efficientzerotensor` if you want to create a tensor with no storage.");
+    1405              :     } else {
+    1406              :       key_set_ = key_set_.remove(DispatchKey::ZeroTensor);
+    1407              :     }
+    1408              :   }
+    1409              : 
+    1410              :   /**
+    1411              :    * Whether or not the tensor should be negated
+    1412              :    */
+    1413              :   inline bool is_neg() const {
+    1414              :     constexpr auto negative_ks = DispatchKeySet(DispatchKey::Negative);
+    1415              :     return key_set_.has_all(negative_ks);
+    1416              :   }
+    1417              : 
+    1418              :   /**
+    1419              :    * Set whether or not to take the conjugate of the tensor (flip the imaginary
+    1420              :    * bit).
+    1421              :    */
+    1422              :   void _set_neg(bool value) {
+    1423              :     if (value) {
+    1424              :       key_set_ = key_set_.add(DispatchKey::Negative);
+    1425              :     } else {
+    1426              :       key_set_ = key_set_.remove(DispatchKey::Negative);
+    1427              :     }
+    1428              :   }
+    1429              : 
+    1430              :   /**
+    1431              :    * Return the accumulated gradient of a tensor. This gradient is computed
+    1432              :    * using forward mode AD.
+    1433              :    *
+    1434              :    * This is an internal API that should never be used by end users.
+    1435              :    *
+    1436              :    * The API is as follows:
+    1437              :    *   - "level" allows to specify the level of forward AD nesting for which the
+    1438              :    *     gradient should be returned. Note that since levels are not fully
+    1439              :    *     supported yet, this argument should be 0. See documentation for
+    1440              :    *     torch::autograd::enter_dual_level for more details about forward AD
+    1441              :    * nesting.
+    1442              :    *   - "self" should represent the Tensor whose forward grad is accessed. It
+    1443              :    * is required when dealing with view.
+    1444              :    */
+    1445              :   const at::Tensor& _fw_grad(uint64_t level, const at::TensorBase& self) const;
+    1446              : 
+    1447              :   /**
+    1448              :    * Sets the forward gradient for this Tensor.
+    1449              :    * The given Tensor might not be used directly and its content will be copied.
+    1450              :    *
+    1451              :    * This is an internal API that should never be used by end users.
+    1452              :    *
+    1453              :    * The API is as follows:
+    1454              :    *   - "new_grad" is a Tensor containing the new value of the gradient that
+    1455              :    * should be set
+    1456              :    *   - "self" should represent the Tensor whose forward grad is accessed. It
+    1457              :    * is required when dealing with view.
+    1458              :    *   - "level" allows to specify the level of forward AD nesting for which the
+    1459              :    *     gradient should be set. Note that since levels are not fully supported
+    1460              :    *     yet, this argument should be 0. See documentation for
+    1461              :    * torch::autograd::enter_dual_level for more details about forward AD
+    1462              :    * nesting.
+    1463              :    *   - "is_inplace_op" is a boolean flag that tells if this gradient was
+    1464              :    * generated by an inplace operation or an out of place one. This allows
+    1465              :    * better error checking.
+    1466              :    */
+    1467              :   void _set_fw_grad(
+    1468              :       const at::TensorBase& new_grad,
+    1469              :       const at::TensorBase& self,
+    1470              :       uint64_t level,
+    1471              :       bool is_inplace_op);
+    1472              : 
+    1473              :   /**
+    1474              :    * Return a typed data pointer to the actual data which this tensor refers to.
+    1475              :    * This checks that the requested type (from the template parameter) matches
+    1476              :    * the internal type of the tensor.
+    1477              :    *
+    1478              :    * It is invalid to call data() on a dtype-uninitialized tensor, even if
+    1479              :    * the size is 0.
+    1480              :    *
+    1481              :    * WARNING: If a tensor is not contiguous, you MUST use strides when
+    1482              :    * performing index calculations to determine the location of elements in
+    1483              :    * the tensor.  We recommend using 'TensorAccessor' to handle this computation
+    1484              :    * for you; this class is available from 'Tensor'.
+    1485              :    */
+    1486              :   template <typename T>
+    1487              :   const T* data_dtype_initialized() const {
+    1488              :     return data_dtype_initialized_impl<const T>(
+    1489              :         [this] { return static_cast<const T*>(storage_.data()); });
+    1490              :   }
+    1491              : 
+    1492              :   /**
+    1493              :    * Return a mutable typed data pointer to the actual data which this
+    1494              :    * tensor refers to. This checks that the requested type (from the
+    1495              :    * template parameter) matches the internal type of the tensor.
+    1496              :    *
+    1497              :    * It is invalid to call data() on a dtype-uninitialized tensor, even if
+    1498              :    * the size is 0.
+    1499              :    *
+    1500              :    * WARNING: If a tensor is not contiguous, you MUST use strides when
+    1501              :    * performing index calculations to determine the location of elements in
+    1502              :    * the tensor.  We recommend using 'TensorAccessor' to handle this computation
+    1503              :    * for you; this class is available from 'Tensor'.
+    1504              :    */
+    1505              :   template <typename T>
+    1506              :   T* mutable_data_dtype_initialized() {
+    1507              :     return data_dtype_initialized_impl<T>(
+    1508              :         [this] { return static_cast<T*>(storage_.mutable_data()); });
+    1509              :   }
+    1510              : 
+    1511              :  private:
+    1512              :   // Shared implementation of data_dtype_initialized() and
+    1513              :   // mutable_data_dtype_initialized().
+    1514              :   template <typename T, typename Func>
+    1515              :   T* data_dtype_initialized_impl(const Func& get_data) const {
+    1516              :     TORCH_CHECK(
+    1517              :         data_type_.Match<std::remove_const_t<T>>(),
+    1518              :         "Tensor type mismatch, caller expects elements to be ",
+    1519              :         caffe2::TypeMeta::TypeName<std::remove_const_t<T>>(),
+    1520              :         ", while tensor contains ",
+    1521              :         data_type_.name(),
+    1522              :         ". ");
+    1523              :     return data_ptr_impl_impl<T>(get_data);
+    1524              :   }
+    1525              : 
+    1526              :  public:
+    1527              :   /**
+    1528              :    * More efficient helper for Tensor::data_ptr(). Like data<T>(), but
+    1529              :    * does not do a type check. Unlike the untemplated data(), does
+    1530              :    * check has_storage() and storage_initialized().
+    1531              :    */
+    1532              :   template <typename T>
+    1533              :   inline const T* data_ptr_impl() const {
+    1534              :     return data_ptr_impl_impl<const T>(
+    1535              :         [this] { return static_cast<const T*>(storage_.data()); });
+    1536              :   }
+    1537              : 
+    1538              :   /**
+    1539              :    * More efficient helper for Tensor::data_ptr(). Like data<T>(), but
+    1540              :    * does not do a type check. Unlike the untemplated data(), does
+    1541              :    * check has_storage() and storage_initialized().
+    1542              :    */
+    1543              :   template <typename T>
+    1544              :   inline T* mutable_data_ptr_impl() {
+    1545              :     return data_ptr_impl_impl<T>(
+    1546              :         [this] { return static_cast<T*>(storage_.mutable_data()); });
+    1547              :   }
+    1548              : 
+    1549              :  private:
+    1550              :   // Shared implementation of mutable_data_ptr_impl() and the future
+    1551              :   // mutable_data_ptr_impl().
+    1552              :   template <typename T, typename Func>
+    1553              :   __ubsan_ignore_pointer_overflow__ T* data_ptr_impl_impl(
+    1554              :       const Func& get_data) const {
+    1555              :     if (C10_UNLIKELY(!has_storage())) {
+    1556              :       throw_data_ptr_access_error();
+    1557              :     }
+    1558              :     TORCH_CHECK(
+    1559              :         storage_initialized(),
+    1560              :         "The tensor has a non-zero number of elements, but its data is not allocated yet. "
+    1561              :         "Caffe2 uses a lazy allocation, so you will need to call "
+    1562              :         "mutable_data() or raw_mutable_data() to actually allocate memory.");
+    1563              :     // Caller does the type check.
+    1564              :     // Note: storage_offset_ can be non-null even for zero-elements tensors
+    1565              :     // (for example if created as `torch.empty(5)[10:]`) that triggers
+    1566              :     // applying non-zero offset to null pointer in UBSan
+    1567              :     return get_data() + storage_offset_;
+    1568              :   }
+    1569              : 
+    1570              :  public:
+    1571              :   /**
+    1572              :    * Return a const void* data pointer to the actual data which this
+    1573              :    * tensor refers to.
+    1574              :    *
+    1575              :    * It is invalid to call data() on a dtype-uninitialized tensor, even if the
+    1576              :    * size is 0.
+    1577              :    *
+    1578              :    * WARNING: The data pointed to by this tensor may not contiguous; do NOT
+    1579              :    * assume that itemsize() * numel() is sufficient to compute the bytes that
+    1580              :    * can be validly read from this tensor.
+    1581              :    */
+    1582              :   inline const void* data() const {
+    1583              :     return data_impl<const void>(
+    1584              :         [this] { return static_cast<const char*>(storage_.data()); });
+    1585              :   }
+    1586              : 
+    1587              :   /**
+    1588              :    * Return a void* data pointer to the actual data which this tensor refers to.
+    1589              :    *
+    1590              :    * It is invalid to call mutable_data() on a dtype-uninitialized
+    1591              :    * tensor, even if the size is 0.
+    1592              :    *
+    1593              :    * WARNING: The data pointed to by this tensor may not contiguous; do NOT
+    1594              :    * assume that itemsize() * numel() is sufficient to compute the bytes that
+    1595              :    * can be validly read from this tensor.
+    1596              :    */
+    1597              :   inline void* mutable_data() {
+    1598              :     return data_impl<void>(
+    1599              :         [this] { return static_cast<char*>(storage_.mutable_data()); });
+    1600              :   }
+    1601              : 
+    1602              :  private:
+    1603              :   /// Shared implementation of data() and mutable_data().
+    1604              :   ///
+    1605              :   /// get_data must return a byte-addressed pointer, e.g. char*,
+    1606              :   /// std::byte const*, etc.
+    1607              :   template <typename Void, typename Func>
+    1608              :   Void* data_impl(const Func& get_data) const {
+    1609              :     if (C10_UNLIKELY(!has_storage())) {
+    1610              :       throw_data_ptr_access_error();
+    1611              :     }
+    1612              :     TORCH_CHECK(
+    1613              :         dtype_initialized(),
+    1614              :         "Cannot access data pointer of Tensor that doesn't have initialized dtype "
+    1615              :         "(e.g., caffe2::Tensor x(CPU), prior to calling mutable_data<T>() on x)");
+    1616              :     auto* data = get_data();
+    1617              :     static_assert(
+    1618              :         sizeof(*data) == 1, "get_data must return a byte-addressed pointer.");
+    1619              :     // Computing an offset into an empty tensor would be UB, since an empty
+    1620              :     // tensor's storage will be nullptr, and adding a nonzero offset to nullptr
+    1621              :     // is UB.  So we skip the offset computation in this case.
+    1622              :     if (is_empty()) {
+    1623              :       return nullptr;
+    1624              :     }
+    1625              :     return data + data_type_.itemsize() * storage_offset_;
+    1626              :   }
+    1627              : 
+    1628              :  public:
+    1629              :   /**
+    1630              :    * Returns the TypeMeta of a tensor, which describes what data type
+    1631              :    * it is (e.g., int, float, ...)
+    1632              :    */
+    1633       402994 :   const caffe2::TypeMeta dtype() const {
+    1634       402994 :     return data_type_;
+    1635              :   }
+    1636              : 
+    1637              :   /**
+    1638              :    * Return the size of a single element of this tensor in bytes.
+    1639              :    */
+    1640              :   size_t itemsize() const {
+    1641              :     TORCH_CHECK(
+    1642              :         dtype_initialized(),
+    1643              :         "Cannot report itemsize of Tensor that doesn't have initialized dtype "
+    1644              :         "(e.g., caffe2::Tensor x(CPU), prior to calling mutable_data<T>() on x)");
+    1645              :     return data_type_.itemsize();
+    1646              :   }
+    1647              : 
+    1648              :   void set_backend_meta(intrusive_ptr<c10::BackendMeta> backend_meta) {
+    1649              :     get_extra_meta().backend_meta_ = std::move(backend_meta);
+    1650              :   }
+    1651              : 
+    1652              :   c10::BackendMeta* get_backend_meta() {
+    1653              :     if (!extra_meta_) {
+    1654              :       return nullptr;
+    1655              :     }
+    1656              :     return extra_meta_->backend_meta_.get();
+    1657              :   }
+    1658              : 
+    1659              :   intrusive_ptr<c10::BackendMeta> get_backend_meta_intrusive_ptr() const {
+    1660              :     if (!extra_meta_) {
+    1661              :       return nullptr;
+    1662              :     }
+    1663              :     return extra_meta_->backend_meta_;
+    1664              :   }
+    1665              : 
+    1666              :   void release_storage_and_set_meta_custom_data_ptr_error_msg_(
+    1667              :       c10::optional<std::string> s) {
+    1668              :     storage_ = {};
+    1669              :     get_extra_meta().custom_data_ptr_error_msg_ = std::move(s);
+    1670              :   }
+    1671              : 
+    1672              :  protected:
+    1673              :   /**
+    1674              :    * Returns the human-readable name of the actual type of this object (e.g.,
+    1675              :    * TensorImpl, BatchedTensorImpl, etc.). Used for error messages.
+    1676              :    */
+    1677              :   virtual const char* tensorimpl_type_name() const {
+    1678              :     return "TensorImpl";
+    1679              :   }
+    1680              : 
+    1681              :  private:
+    1682              :   [[noreturn]] void throw_storage_access_error() const;
+    1683              :   [[noreturn]] void throw_data_ptr_access_error() const;
+    1684              : 
+    1685              :   ExtraMeta& get_extra_meta() {
+    1686              :     if (!extra_meta_) {
+    1687              :       extra_meta_ = std::make_unique<ExtraMeta>();
+    1688              :     }
+    1689              :     return *extra_meta_;
+    1690              :   }
+    1691              : 
+    1692              :   c10::SymbolicShapeMeta& symbolic_shape_meta() {
+    1693              :     TORCH_INTERNAL_ASSERT(extra_meta_ && extra_meta_->symbolic_shape_meta_);
+    1694              :     return *extra_meta_->symbolic_shape_meta_;
+    1695              :   }
+    1696              : 
+    1697              :   const c10::SymbolicShapeMeta& symbolic_shape_meta() const {
+    1698              :     TORCH_INTERNAL_ASSERT(extra_meta_ && extra_meta_->symbolic_shape_meta_);
+    1699              :     return *extra_meta_->symbolic_shape_meta_;
+    1700              :   }
+    1701              : 
+    1702              :  public:
+    1703              :   /**
+    1704              :    * True if a tensor has no elements (e.g., numel() == 0).
+    1705              :    */
+    1706              :   inline bool is_empty() const {
+    1707              :     return numel() == 0;
+    1708              :   }
+    1709              : 
+    1710              :   // if we are going to use sym sizes, we should be setting sym strides at the
+    1711              :   // same time, otherwise it's very easy to misuse this API
+    1712              :   void set_sizes_and_strides(
+    1713              :       c10::SymIntArrayRef sizes,
+    1714              :       c10::SymIntArrayRef strides,
+    1715              :       c10::optional<c10::SymInt> storage_offset = c10::nullopt);
+    1716              :   // This is renamed to avoid breaking overload BC
+    1717              :   void generic_set_sizes_contiguous(c10::SymIntArrayRef sizes);
+    1718              :   void generic_set_sizes_contiguous(c10::IntArrayRef sizes) {
+    1719              :     set_sizes_contiguous(sizes);
+    1720              :   }
+    1721              : 
+    1722              :   /**
+    1723              :    * Change the size at some dimension.  This DOES NOT update strides;
+    1724              :    * thus, most changes to size will not preserve contiguity.  You probably
+    1725              :    * also want to call set_stride() when you call this.
+    1726              :    *
+    1727              :    * TODO: This should be jettisoned in favor of `set_sizes_and_strides`,
+    1728              :    * which is harder to misuse.
+    1729              :    */
+    1730              :   virtual void set_size(int64_t dim, int64_t new_size) {
+    1731              :     TORCH_CHECK(
+    1732              :         allow_tensor_metadata_change(),
+    1733              :         "set_size ",
+    1734              :         err_msg_tensor_metadata_change_not_allowed);
+    1735              :     TORCH_CHECK(
+    1736              :         !matches_policy(SizesStridesPolicy::CustomSizes),
+    1737              :         "set_size() called on tensor with dynamic shapes or customized size behavior")
+    1738              :     sizes_and_strides_.size_at(dim) = new_size;
+    1739              :     refresh_numel();
+    1740              :     refresh_contiguous();
+    1741              :   }
+    1742              : 
+    1743              :   /**
+    1744              :    * Change the stride at some dimension.
+    1745              :    *
+    1746              :    * TODO: This should be jettisoned in favor of `set_sizes_and_strides`,
+    1747              :    * which is harder to misuse.
+    1748              :    */
+    1749              :   virtual void set_stride(int64_t dim, int64_t new_stride) {
+    1750              :     TORCH_CHECK(
+    1751              :         allow_tensor_metadata_change(),
+    1752              :         "set_stride ",
+    1753              :         err_msg_tensor_metadata_change_not_allowed);
+    1754              :     TORCH_CHECK(
+    1755              :         !has_symbolic_sizes_strides_,
+    1756              :         "set_stride() called on tensor with symbolic shape")
+    1757              :     sizes_and_strides_.stride_at_unchecked(dim) = new_stride;
+    1758              :     refresh_contiguous();
+    1759              :   }
+    1760              : 
+    1761              :   /**
+    1762              :    * Set the offset into the storage of this tensor.
+    1763              :    *
+    1764              :    * WARNING: This does NOT check if the tensor is in bounds for the new
+    1765              :    * location at the storage; the caller is responsible for checking this
+    1766              :    * (and resizing if necessary.)
+    1767              :    */
+    1768              :   virtual void set_storage_offset(int64_t storage_offset) {
+    1769              :     TORCH_CHECK(
+    1770              :         allow_tensor_metadata_change(),
+    1771              :         "set_storage_offset ",
+    1772              :         err_msg_tensor_metadata_change_not_allowed);
+    1773              :     // TODO: this should probably consult policy
+    1774              :     TORCH_CHECK(
+    1775              :         !has_symbolic_sizes_strides_,
+    1776              :         "set_storage_offset() called on tensor with symbolic shape")
+    1777              :     storage_offset_ = storage_offset;
+    1778              :   }
+    1779              : 
+    1780              :   /**
+    1781              :    * Like set_sizes_and_strides but assumes contiguous strides.
+    1782              :    *
+    1783              :    * WARNING: This function does not check if the requested
+    1784              :    * sizes/strides are in bounds for the storage that is allocated;
+    1785              :    * this is the responsibility of the caller
+    1786              :    */
+    1787              :   void set_sizes_contiguous(IntArrayRef new_size) {
+    1788              :     TORCH_CHECK(
+    1789              :         allow_tensor_metadata_change(),
+    1790              :         "set_sizes_contiguous ",
+    1791              :         err_msg_tensor_metadata_change_not_allowed);
+    1792              :     TORCH_CHECK(
+    1793              :         !matches_policy(SizesStridesPolicy::CustomStrides),
+    1794              :         "tried to directly modify sizes for customized tensor");
+    1795              :     sizes_and_strides_.set_sizes(new_size);
+    1796              : 
+    1797              :     refresh_numel();
+    1798              :     empty_tensor_restride(
+    1799              :         MemoryFormat::Contiguous); // calls refresh_contiguous()
+    1800              :   }
+    1801              : 
+    1802              :   /**
+    1803              :    * Set the sizes and strides of a tensor.
+    1804              :    *
+    1805              :    * WARNING: This function does not check if the requested
+    1806              :    * sizes/strides are in bounds for the storage that is allocated;
+    1807              :    * this is the responsibility of the caller
+    1808              :    */
+    1809              :   void set_sizes_and_strides(
+    1810              :       IntArrayRef new_size,
+    1811              :       IntArrayRef new_stride,
+    1812              :       c10::optional<int64_t> storage_offset = c10::nullopt) {
+    1813              :     TORCH_CHECK(
+    1814              :         allow_tensor_metadata_change(),
+    1815              :         "set_sizes_and_strides ",
+    1816              :         err_msg_tensor_metadata_change_not_allowed);
+    1817              :     TORCH_CHECK(
+    1818              :         !has_symbolic_sizes_strides_,
+    1819              :         "set_sizes_and_strides() called on tensor with symbolic shape")
+    1820              :     TORCH_CHECK(
+    1821              :         new_size.size() == new_stride.size(),
+    1822              :         "dimensionality of sizes (",
+    1823              :         new_size.size(),
+    1824              :         ") must match dimensionality of strides (",
+    1825              :         new_stride.size(),
+    1826              :         ")");
+    1827              :     const auto new_dim = new_size.size();
+    1828              :     bool overflowed = false;
+    1829              :     sizes_and_strides_.set_sizes(new_size);
+    1830              : 
+    1831              :     if (new_dim > 0) {
+    1832              :       for (size_t dim = new_dim - 1;; dim--) {
+    1833              :         if (new_stride[dim] >= 0) {
+    1834              :           sizes_and_strides_.stride_at_unchecked(dim) = new_stride[dim];
+    1835              :         } else {
+    1836              :           // XXX: This behavior is surprising and may need to be removed to
+    1837              :           // support negative strides. Some pytorch functions rely on it:
+    1838              :           // for example, torch.cat (run TestTorch.test_cat_empty).
+    1839              :           if (dim == new_dim - 1) {
+    1840              :             sizes_and_strides_.stride_at_unchecked(dim) = 1;
+    1841              :           } else {
+    1842              :             // Keep stride monotonically increasing to match NumPy.
+    1843              :             overflowed |= c10::mul_overflows(
+    1844              :                 sizes_and_strides_.stride_at_unchecked(dim + 1),
+    1845              :                 std::max<int64_t>(
+    1846              :                     sizes_and_strides_.size_at_unchecked(dim + 1), 1),
+    1847              :                 std::addressof(sizes_and_strides_.stride_at_unchecked(dim)));
+    1848              :           }
+    1849              :         }
+    1850              :         if (dim == 0)
+    1851              :           break;
+    1852              :       }
+    1853              :       TORCH_CHECK(!overflowed, "Stride calculation overflowed");
+    1854              :     }
+    1855              : 
+    1856              :     refresh_numel();
+    1857              :     refresh_contiguous();
+    1858              : 
+    1859              :     if (storage_offset.has_value()) {
+    1860              :       storage_offset_ = *storage_offset;
+    1861              :     }
+    1862              :   }
+    1863              : 
+    1864              :   /**
+    1865              :    * Set whether a tensor allows changes to its metadata (e.g. sizes / strides /
+    1866              :    * storage / storage_offset). See NOTE [ Metadata Change for a Detached Tensor
+    1867              :    * ] for details.
+    1868              :    */
+    1869        40076 :   void set_allow_tensor_metadata_change(bool value) {
+    1870              :     // TODO: at some point, we should kill this field completely.
+    1871        40076 :     allow_tensor_metadata_change_ = true;
+    1872        40076 :   }
+    1873              : 
+    1874              :   /**
+    1875              :    * True if a tensor allows changes to its metadata (e.g. sizes / strides /
+    1876              :    * storage / storage_offset). See NOTE [ Metadata Change for a Detached Tensor
+    1877              :    * ] for details.
+    1878              :    */
+    1879              :   bool allow_tensor_metadata_change() const {
+    1880              :     return allow_tensor_metadata_change_;
+    1881              :   }
+    1882              : 
+    1883              :   /**
+    1884              :    * Set the pointer to autograd metadata.
+    1885              :    */
+    1886              :   void set_autograd_meta(
+    1887              :       std::unique_ptr<c10::AutogradMetaInterface> autograd_meta);
+    1888              : 
+    1889              :   /**
+    1890              :    * Return the pointer to autograd metadata.  May return nullptr if the
+    1891              :    * tensor does not track gradients.
+    1892              :    */
+    1893              :   c10::AutogradMetaInterface* autograd_meta() const;
+    1894              : 
+    1895              :   /**
+    1896              :    * Set the pointer to named tensor metadata.
+    1897              :    */
+    1898              :   void set_named_tensor_meta(
+    1899              :       std::unique_ptr<c10::NamedTensorMetaInterface> named_tensor_meta) {
+    1900              :     TORCH_WARN_ONCE(
+    1901              :         "Named tensors and all their associated APIs are an experimental feature ",
+    1902              :         "and subject to change. Please do not use them for anything important ",
+    1903              :         "until they are released as stable.");
+    1904              : #ifdef DEBUG
+    1905              :     if (named_tensor_meta) {
+    1906              :       TORCH_INTERNAL_ASSERT(named_tensor_meta->slow_dim() == dim());
+    1907              :     }
+    1908              : #endif
+    1909              :     if (named_tensor_meta) {
+    1910              :       get_extra_meta().named_tensor_meta_ = std::move(named_tensor_meta);
+    1911              :       key_set_ = key_set_.add(DispatchKey::Named);
+    1912              :     } else {
+    1913              :       if (extra_meta_) {
+    1914              :         extra_meta_->named_tensor_meta_ = nullptr;
+    1915              :       }
+    1916              :       key_set_ = key_set_.remove(DispatchKey::Named);
+    1917              :     }
+    1918              :   }
+    1919              : 
+    1920              :   void set_python_dispatch(bool k) {
+    1921              :     if (k) {
+    1922              :       key_set_ = key_set_.add(c10::python_ks);
+    1923              :     } else {
+    1924              :       key_set_ = key_set_ - c10::python_ks;
+    1925              :     }
+    1926              :   }
+    1927              : 
+    1928              :   bool is_python_dispatch() const {
+    1929              :     return key_set_.has_all(c10::python_ks);
+    1930              :   }
+    1931              : 
+    1932              :   /**
+    1933              :    * Return the pointer to named tensor metadata.
+    1934              :    */
+    1935              :   const c10::NamedTensorMetaInterface* named_tensor_meta() const {
+    1936              :     if (!extra_meta_) {
+    1937              :       return nullptr;
+    1938              :     }
+    1939              :     return extra_meta_->named_tensor_meta_.get();
+    1940              :   }
+    1941              : 
+    1942              :   c10::NamedTensorMetaInterface* named_tensor_meta() {
+    1943              :     if (!extra_meta_) {
+    1944              :       return nullptr;
+    1945              :     }
+    1946              :     return extra_meta_->named_tensor_meta_.get();
+    1947              :   }
+    1948              : 
+    1949              :   bool has_named_tensor_meta() const {
+    1950              :     if (!extra_meta_) {
+    1951              :       return false;
+    1952              :     }
+    1953              :     return extra_meta_->named_tensor_meta_ != nullptr;
+    1954              :   }
+    1955              : 
+    1956              :   // NOTE [ TensorImpl Shallow-Copying ]
+    1957              :   //
+    1958              :   // TensorImpl shallow-copying is used when we want to have two Variables share
+    1959              :   // the same tensor metadata (e.g. sizes / strides / storage pointer /
+    1960              :   // storage_offset), but each with a different autograd history. Example call
+    1961              :   // sites:
+    1962              :   //
+    1963              :   // 1. `var_detached = var.detach()` uses `shallow_copy_and_detach()` to create
+    1964              :   // `var_detached` that shares the same tensor metadata with `var`, but with a
+    1965              :   // completely new autograd history.
+    1966              :   // 2. `var.set_data(tensor)` uses `shallow_copy_from()` to copy tensor
+    1967              :   // metadata from `tensor` into `var`, while keeping `var`'s original
+    1968              :   // AutogradMeta.
+    1969              :   //
+    1970              :   // Functions that shallow-copy a TensorImpl (such as
+    1971              :   // `shallow_copy_and_detach()` / `shallow_copy_from()` /
+    1972              :   // `copy_tensor_metadata()`) copy the tensor metadata fields (e.g. sizes /
+    1973              :   // strides / storage pointer / storage_offset) by value. However, the
+    1974              :   // following fields are not copied:
+    1975              :   //
+    1976              :   // 1. the AutogradMeta pointer, because it is unique for each Variable.
+    1977              :   // 2. the version counter, because the destination TensorImpl's version
+    1978              :   // counter is either set to the passed-in `version_counter` (in
+    1979              :   // `shallow_copy_and_detach()` and `copy_tensor_metadata()`), or it is kept
+    1980              :   // intact (in `shallow_copy_from()`). See NOTE [ Version Counter Sharing ] for
+    1981              :   // details.
+    1982              :   //
+    1983              :   // In `shallow_copy_and_detach()` and `copy_tensor_metadata()`, the passed-in
+    1984              :   // `allow_tensor_metadata_change` determines whether the TensorImpl
+    1985              :   // shallow-copy allows changes to its metadata (e.g. sizes / strides / storage
+    1986              :   // / storage_offset). See NOTE [ Metadata Change for a Detached Tensor ] for
+    1987              :   // details.
+    1988              :   //
+    1989              :   // In `shallow_copy_from()`, we don't check the destination TensorImpl's
+    1990              :   // `allow_tensor_metadata_change_`, because `shallow_copy_from()` is used for
+    1991              :   // implementing functions such as `var.set_data(tensor)`, which changes
+    1992              :   // `var`'s tensor metadata and expects its `allow_tensor_metadata_change_` to
+    1993              :   // be ignored.
+    1994              : 
+    1995              :   /**
+    1996              :    * One TensorImpl can be copied to another TensorImpl if they have the same
+    1997              :    * DispatchKeySet. The only two special cases (for legacy reason) are:
+    1998              :    * CPU is compatible with CUDA and SparseCPU is
+    1999              :    * compatible with SparseCUDA.
+    2000              :    */
+    2001              :   inline bool has_compatible_shallow_copy_type(DispatchKeySet from) {
+    2002              :     auto is_dense = [](DispatchKeySet ts) {
+    2003              :       constexpr auto dense_backends = DispatchKeySet(
+    2004              :           {BackendComponent::CPUBit,
+    2005              :            BackendComponent::CUDABit,
+    2006              :            BackendComponent::MPSBit,
+    2007              :            BackendComponent::HIPBit,
+    2008              :            BackendComponent::XPUBit,
+    2009              :            BackendComponent::HPUBit});
+    2010              :       constexpr auto dense_k = DispatchKeySet(DispatchKey::Dense);
+    2011              :       return ts.has_any(dense_k) && ts.has_any(dense_backends);
+    2012              :     };
+    2013              :     auto is_sparse = [](DispatchKeySet ts) {
+    2014              :       constexpr auto sparse_backends = DispatchKeySet(
+    2015              :           {BackendComponent::CPUBit,
+    2016              :            BackendComponent::CUDABit,
+    2017              :            BackendComponent::HIPBit,
+    2018              :            BackendComponent::XPUBit});
+    2019              :       constexpr auto sparse_k = DispatchKeySet(DispatchKey::Sparse);
+    2020              :       return ts.has_any(sparse_k) && ts.has_any(sparse_backends);
+    2021              :     };
+    2022              :     return (key_set_ == from) || (is_dense(key_set_) && is_dense(from)) ||
+    2023              :         (is_sparse(key_set_) && is_sparse(from));
+    2024              :   }
+    2025              : 
+    2026              :  private:
+    2027              :   template <typename VariableVersion>
+    2028              :   c10::intrusive_ptr<TensorImpl> shallow_copy_and_detach_core(
+    2029              :       VariableVersion&& version_counter,
+    2030              :       bool allow_tensor_metadata_change) const;
+    2031              : 
+    2032              :  public:
+    2033              :   /**
+    2034              :    * Return a TensorImpl that is a shallow-copy of this TensorImpl.
+    2035              :    *
+    2036              :    * For usage of `version_counter` and `allow_tensor_metadata_change`,
+    2037              :    * see NOTE [ TensorImpl Shallow-Copying ].
+    2038              :    */
+    2039              :   virtual c10::intrusive_ptr<TensorImpl> shallow_copy_and_detach(
+    2040              :       const c10::VariableVersion& version_counter,
+    2041              :       bool allow_tensor_metadata_change) const;
+    2042              : 
+    2043              :   /**
+    2044              :    * Return a TensorImpl that is a shallow-copy of this TensorImpl.
+    2045              :    *
+    2046              :    * For usage of `version_counter` and `allow_tensor_metadata_change`,
+    2047              :    * see NOTE [ TensorImpl Shallow-Copying ].
+    2048              :    */
+    2049              :   virtual c10::intrusive_ptr<TensorImpl> shallow_copy_and_detach(
+    2050              :       c10::VariableVersion&& version_counter,
+    2051              :       bool allow_tensor_metadata_change) const;
+    2052              : 
+    2053              :   /**
+    2054              :    * Shallow-copies data from another TensorImpl into this TensorImpl.
+    2055              :    *
+    2056              :    * For why this function doesn't check this TensorImpl's
+    2057              :    * `allow_tensor_metadata_change_`, see NOTE [ TensorImpl Shallow-Copying ].
+    2058              :    */
+    2059              :   virtual void shallow_copy_from(const c10::intrusive_ptr<TensorImpl>& impl) {
+    2060              :     copy_tensor_metadata(
+    2061              :         /*src_impl=*/impl.get(),
+    2062              :         /*dest_impl=*/this,
+    2063              :         /*version_counter=*/version_counter(),
+    2064              :         /*allow_tensor_metadata_change=*/allow_tensor_metadata_change());
+    2065              :     refresh_numel();
+    2066              :     refresh_contiguous();
+    2067              :   }
+    2068              : 
+    2069              :   // Inference tensor doesn't have version counter,
+    2070              :   // set_version_counter is no-op for them.
+    2071              :   void set_version_counter(const c10::VariableVersion& version_counter) {
+    2072              :     TORCH_CHECK(
+    2073              :         !(is_inference() && version_counter.enabled()),
+    2074              :         "Cannot set version_counter for inference tensor");
+    2075              :     version_counter_ = version_counter;
+    2076              :   }
+    2077              : 
+    2078              :   void set_version_counter(c10::VariableVersion&& version_counter) {
+    2079              :     TORCH_CHECK(
+    2080              :         !(is_inference() && version_counter.enabled()),
+    2081              :         "Cannot set version_counter for inference tensor");
+    2082              :     version_counter_ = std::move(version_counter);
+    2083              :   }
+    2084              : 
+    2085              :   const c10::VariableVersion& version_counter() const noexcept {
+    2086              :     return version_counter_;
+    2087              :   }
+    2088              : 
+    2089              :   void bump_version() {
+    2090              :     version_counter_.bump();
+    2091              :   }
+    2092              : 
+    2093              :   impl::PyObjectSlot* pyobj_slot() {
+    2094              :     return &pyobj_slot_;
+    2095              :   }
+    2096              : 
+    2097              :   const impl::PyObjectSlot* pyobj_slot() const {
+    2098              :     return &pyobj_slot_;
+    2099              :   }
+    2100              : 
+    2101              :  private:
+    2102              :   // See NOTE [c10::optional operator usage in CUDA]
+    2103              :   // We probably don't want to expose this publicly until
+    2104              :   // the note is addressed.
+    2105              :   c10::optional<c10::Device> device_opt() const {
+    2106              :     return device_opt_;
+    2107              :   }
+    2108              : 
+    2109              :  public:
+    2110              :   /**
+    2111              :    * The device type of a Tensor, e.g., DeviceType::CPU or DeviceType::CUDA.
+    2112              :    */
+    2113              :   DeviceType device_type() const {
+    2114              :     // TODO: A useful internal assert would be to show that device_opt_ is null
+    2115              :     // only if you are an undefined tensor
+    2116              :     TORCH_CHECK(
+    2117              :         device_opt_.has_value(),
+    2118              :         "device_type cannot be run on undefined Tensor");
+    2119              :     // See NOTE [c10::optional operator usage in CUDA]
+    2120              :     return (*device_opt_).type();
+    2121              :   }
+    2122              : 
+    2123              :   /**
+    2124              :    * @brief Extends the outer-most dimension of this tensor by num elements,
+    2125              :    * preserving the existing data.
+    2126              :    *
+    2127              :    * The underlying data may be reallocated in order to accommodate the new
+    2128              :    * elements, in which case this tensors' capacity is grown at a factor of
+    2129              :    * growthPct. This ensures that Extend runs on an amortized O(1) time
+    2130              :    * complexity.
+    2131              :    *
+    2132              :    * This op is auto-asynchronous if the underlying device (CUDA) supports it.
+    2133              :    */
+    2134              :   void Extend(int64_t num, float growthPct);
+    2135              : 
+    2136              :   /**
+    2137              :    * @brief Reserve space for the underlying tensor.
+    2138              :    *
+    2139              :    * This must be called after Resize(), since we only specify the first
+    2140              :    * dimension This does not copy over the old data to the newly allocated space
+    2141              :    */
+    2142              :   void ReserveSpace(int64_t outer_dim);
+    2143              : 
+    2144              :   /**
+    2145              :    * @brief Resizes a tensor.
+    2146              :    *
+    2147              :    * Resize takes in a vector of ints specifying the dimensions of the tensor.
+    2148              :    * You can pass in an empty vector to specify that it is a scalar (i.e.
+    2149              :    * containing one single item).
+    2150              :    *
+    2151              :    * The underlying storage may be deleted after calling Resize: if the new
+    2152              :    * shape leads to a different number of items in the tensor, the old memory
+    2153              :    * is deleted and new memory will be allocated next time you call
+    2154              :    * mutable_data(). However, if the shape is different but the total number of
+    2155              :    * items is the same, the underlying storage is kept.
+    2156              :    *
+    2157              :    * This method respects caffe2_keep_on_shrink.  Consult the internal logic
+    2158              :    * of this method to see exactly under what circumstances this flag matters.
+    2159              :    */
+    2160              :   template <typename... Ts>
+    2161              :   void Resize(Ts... dim_source) {
+    2162              :     bool size_changed = SetDims(dim_source...);
+    2163              :     if (size_changed) {
+    2164              :       HandleResize();
+    2165              :     }
+    2166              :   }
+    2167              : 
+    2168              :   template <typename T>
+    2169              :   void Resize(const std::vector<T>& dim_source) {
+    2170              :     Resize(ArrayRef<T>(dim_source));
+    2171              :   }
+    2172              : 
+    2173              :   /**
+    2174              :    * Resizes the tensor without touching underlying storage.
+    2175              :    * This requires the total size of the tensor to remains constant.
+    2176              :    */
+    2177              :   void Reshape(const std::vector<int64_t>& dims);
+    2178              : 
+    2179              :   /**
+    2180              :    * Release whatever memory the tensor was holding but keep size and type
+    2181              :    * information. Subsequent call to mutable_data will trigger new memory
+    2182              :    * allocation.
+    2183              :    */
+    2184              :   void FreeMemory();
+    2185              : 
+    2186              :   /**
+    2187              :    * @brief Shares the data with another tensor.
+    2188              :    *
+    2189              :    * To share data between two tensors, the sizes of the two tensors must be
+    2190              :    * equal already. The reason we do not implicitly do a Resize to make the two
+    2191              :    * tensors have the same shape is that we want to allow tensors of different
+    2192              :    * shapes but the same number of items to still be able to share data. This
+    2193              :    * allows one to e.g. have a n-dimensional Tensor and a flattened version
+    2194              :    * sharing the same underlying storage.
+    2195              :    *
+    2196              :    * The source tensor should already have its data allocated.
+    2197              :    */
+    2198              :   // To be deprecated
+    2199              :   void ShareData(const TensorImpl& src);
+    2200              : 
+    2201              :   void ShareExternalPointer(
+    2202              :       DataPtr&& data_ptr,
+    2203              :       const caffe2::TypeMeta data_type,
+    2204              :       size_t size_bytes);
+    2205              : 
+    2206              :   /**
+    2207              :    * Returns a mutable raw pointer of the underlying storage. Since we will need
+    2208              :    * to know the type of the data for allocation, a TypeMeta object is passed in
+    2209              :    * to specify the necessary information. This is conceptually equivalent of
+    2210              :    * calling mutable_data<T>() where the TypeMeta parameter meta is derived from
+    2211              :    * the type T. This function differs from mutable_data<T>() in the sense that
+    2212              :    * the type T can be specified during runtime via the TypeMeta object.
+    2213              :    *
+    2214              :    * If the existing data does not match the desired type, it will be deleted
+    2215              :    * and a new storage will be created.
+    2216              :    */
+    2217              :   inline void* raw_mutable_data(const caffe2::TypeMeta& meta) {
+    2218              :     // For 0-size tensors it's fine to return any pointer (including nullptr)
+    2219              :     if (data_type_ == meta && storage_initialized()) {
+    2220              :       return static_cast<void*>(
+    2221              :           static_cast<char*>(storage_.mutable_data()) +
+    2222              :           storage_offset_ * meta.itemsize());
+    2223              :     } else {
+    2224              :       bool had_special_dtor = data_type_.placementDelete() != nullptr;
+    2225              :       storage_offset_ = 0;
+    2226              :       data_type_ = meta;
+    2227              :       // NB: device is not changed
+    2228              : 
+    2229              :       // We can reuse the existing buffer if the current data does not have
+    2230              :       // a special destructor and the new data doesn't have a special
+    2231              :       // constructor.
+    2232              :       if (numel_ == 0 ||
+    2233              :           (meta.placementNew() == nullptr && !had_special_dtor &&
+    2234              :            (storage_.nbytes() >= (numel_ * data_type_.itemsize())))) {
+    2235              :         TORCH_INTERNAL_ASSERT(
+    2236              :             storage_offset_ == 0); // because we just reallocated
+    2237              :         return storage_.mutable_data();
+    2238              :       }
+    2239              :       const Allocator* allocator = storage_.allocator();
+    2240              :       // Storage might have nullptr allocator in rare cases, for example, if
+    2241              :       // an external memory segment has been wrapped with Tensor and we don't
+    2242              :       // know how to reallocate it. However, in order to preserve legacy C2
+    2243              :       // behavior, we allow reallocating the memory using default allocator.
+    2244              :       if (allocator == nullptr) {
+    2245              :         allocator = GetAllocator(storage_.device_type());
+    2246              :       }
+    2247              :       if (meta.placementNew()) {
+    2248              :         // For types that need placement new, we will call it, as well as
+    2249              :         // making sure that when the data is freed, it calls the right
+    2250              :         // destruction procedure.
+    2251              :         auto size = numel_;
+    2252              :         auto dtor = data_type_.placementDelete();
+    2253              :         auto data_ptr = allocator->allocate(numel_ * data_type_.itemsize());
+    2254              :         storage_.set_data_ptr_noswap(PlacementDeleteContext::makeDataPtr(
+    2255              :             std::move(data_ptr), dtor, size, storage_.device()));
+    2256              :         data_type_.placementNew()(storage_.mutable_data(), numel_);
+    2257              :       } else {
+    2258              :         // For fundamental type, new and delete is easier.
+    2259              :         storage_.set_data_ptr_noswap(
+    2260              :             allocator->allocate(numel_ * data_type_.itemsize()));
+    2261              :       }
+    2262              :       storage_.set_nbytes(numel_ * data_type_.itemsize());
+    2263              :       TORCH_INTERNAL_ASSERT(
+    2264              :           storage_offset_ == 0); // because we just reallocated
+    2265              :       device_opt_ = storage_.device();
+    2266              :       return storage_.mutable_data();
+    2267              :     }
+    2268              :   }
+    2269              : 
+    2270              :   /**
+    2271              :    * Returns a typed pointer of the underlying storage.
+    2272              :    *
+    2273              :    * For fundamental types, we reuse possible existing storage if there
+    2274              :    * is sufficient capacity.
+    2275              :    */
+    2276              :   template <typename T>
+    2277              :   inline T* mutable_data() {
+    2278              :     if (storage_initialized() && data_type_.Match<T>()) {
+    2279              :       return static_cast<T*>(storage_.mutable_data()) + storage_offset_;
+    2280              :     }
+    2281              :     // Check it here statically - otherwise TypeMeta would throw the runtime
+    2282              :     // error in attempt to invoke TypeMeta::ctor()
+    2283              :     static_assert(
+    2284              :         std::is_default_constructible<T>::value,
+    2285              :         "Tensor can't hold non-default-constructable types");
+    2286              :     return static_cast<T*>(raw_mutable_data(caffe2::TypeMeta::Make<T>()));
+    2287              :   }
+    2288              : 
+    2289              :   /**
+    2290              :    * True if a tensor is storage initialized.  A tensor may become
+    2291              :    * storage UNINITIALIZED after a Resize() or FreeMemory()
+    2292              :    */
+    2293              :   bool storage_initialized() const {
+    2294              :     TORCH_CHECK(
+    2295              :         has_storage(),
+    2296              :         "cannot call storage_initialized on tensor that does not have storage");
+    2297              :     return storage_.data() || numel_ == 0;
+    2298              :   }
+    2299              : 
+    2300              :   /**
+    2301              :    * True if a tensor is dtype initialized.  A tensor allocated with
+    2302              :    * Caffe2-style constructors is dtype uninitialized until the
+    2303              :    * first time mutable_data<T>() is called.
+    2304              :    */
+    2305              :   bool dtype_initialized() const noexcept {
+    2306              :     return data_type_ != caffe2::TypeMeta();
+    2307              :   }
+    2308              : 
+    2309              :   void set_storage_keep_dtype(at::Storage storage) {
+    2310              :     TORCH_CHECK(
+    2311              :         allow_tensor_metadata_change(),
+    2312              :         "set_storage ",
+    2313              :         err_msg_tensor_metadata_change_not_allowed);
+    2314              :     storage_ = std::move(storage);
+    2315              :     device_opt_ = storage_.device();
+    2316              :   }
+    2317              : 
+    2318              :   void set_storage_and_dtype(
+    2319              :       at::Storage storage,
+    2320              :       const caffe2::TypeMeta data_type) {
+    2321              :     set_storage_keep_dtype(std::move(storage));
+    2322              :     data_type_ = data_type;
+    2323              :   }
+    2324              : 
+    2325              :   void empty_tensor_restride_symint(MemoryFormat memory_format);
+    2326              : 
+    2327              :   /**
+    2328              :    * Set the strides of the tensor to match memory_format
+    2329              :    *
+    2330              :    * WARNING: This function doesn't rearrange data and assumes tensor is a
+    2331              :    * memory contiguous
+    2332              :    */
+    2333              :   void empty_tensor_restride(MemoryFormat memory_format) {
+    2334              :     if (has_symbolic_sizes_strides_) {
+    2335              :       empty_tensor_restride_symint(memory_format);
+    2336              :       return;
+    2337              :     }
+    2338              : #ifdef DEBUG
+    2339              :     TORCH_INTERNAL_ASSERT(
+    2340              :         compute_numel() == numel_,
+    2341              :         "If you are seeing this error, that means empty_tensor_restride was "
+    2342              :         "called before setting correct numel");
+    2343              : #endif
+    2344              :     switch (memory_format) {
+    2345              :       case MemoryFormat::Contiguous: {
+    2346              :         // dim_ is a virtual call, don't repeat it
+    2347              :         const auto dim_ = dim();
+    2348              :         sizes_and_strides_.resize(dim_);
+    2349              :         if (dim_ > 0) {
+    2350              :           bool overflowed = false;
+    2351              :           const auto last_idx = dim_ - 1;
+    2352              :           sizes_and_strides_.stride_at_unchecked(last_idx) = 1;
+    2353              :           for (auto i = last_idx - 1; i >= 0; --i) {
+    2354              :             overflowed |= c10::mul_overflows(
+    2355              :                 sizes_and_strides_.stride_at_unchecked(i + 1),
+    2356              :                 std::max<int64_t>(
+    2357              :                     sizes_and_strides_.size_at_unchecked(i + 1), 1),
+    2358              :                 std::addressof(sizes_and_strides_.stride_at_unchecked(i)));
+    2359              :           }
+    2360              :           TORCH_CHECK(!overflowed, "Stride calculation overflowed");
+    2361              :         }
+    2362              :         break;
+    2363              :       }
+    2364              :       case MemoryFormat::ChannelsLast: {
+    2365              :         TORCH_CHECK(
+    2366              :             dim() == 4, "required rank 4 tensor to use channels_last format");
+    2367              :         set_sizes_and_strides(sizes(), get_channels_last_strides_2d(sizes()));
+    2368              :         break;
+    2369              :       }
+    2370              :       case MemoryFormat::ChannelsLast3d: {
+    2371              :         TORCH_CHECK(
+    2372              :             dim() == 5,
+    2373              :             "required rank 5 tensor to use channels_last_3d format");
+    2374              :         set_sizes_and_strides(sizes(), get_channels_last_strides_3d(sizes()));
+    2375              :         break;
+    2376              :       }
+    2377              :       case MemoryFormat::Preserve:
+    2378              :         TORCH_CHECK(false, "unsupported memory format ", memory_format);
+    2379              :         // Cleaning warning messages, no need to break as TORCH_CHECK(false)
+    2380              :         // terminates flow.
+    2381              :         // break;
+    2382              :       case MemoryFormat::NumOptions:
+    2383              :         TORCH_INTERNAL_ASSERT(false, "invalid memory format ", memory_format);
+    2384              :     }
+    2385              :     // recompute contiguous flag, as currently NHWC/NCHW flags are not mutually
+    2386              :     // exclusive see #24090
+    2387              :     refresh_contiguous();
+    2388              :   }
+    2389              : 
+    2390              :   bool is_strides_like(at::MemoryFormat memory_format) const {
+    2391              :     if (C10_UNLIKELY(matches_policy(SizesStridesPolicy::CustomStrides))) {
+    2392              :       return is_strides_like_custom(memory_format);
+    2393              :     }
+    2394              :     return is_strides_like_default(memory_format);
+    2395              :   }
+    2396              : 
+    2397              :   bool is_strides_like_channels_last() const {
+    2398              :     return is_strides_like(at::MemoryFormat::ChannelsLast);
+    2399              :   }
+    2400              : 
+    2401              :   bool is_strides_like_channels_last_3d() const {
+    2402              :     return is_strides_like(at::MemoryFormat::ChannelsLast3d);
+    2403              :   }
+    2404              : 
+    2405              :   bool is_non_overlapping_and_dense() const {
+    2406              :     if (C10_UNLIKELY(matches_policy(SizesStridesPolicy::CustomStrides))) {
+    2407              :       return is_non_overlapping_and_dense_custom();
+    2408              :     }
+    2409              :     return is_non_overlapping_and_dense_default();
+    2410              :   }
+    2411              : 
+    2412              :   bool has_symbolic_sizes_strides() const {
+    2413              :     return has_symbolic_sizes_strides_;
+    2414              :   }
+    2415              : 
+    2416              :  private:
+    2417              :   void HandleResize();
+    2418              : 
+    2419              :   // The Caffe2 Resize() method supports being called both as Resize({2,2}) as
+    2420              :   // well as variadic with Resize(2, 2).  These overloads provide all of the
+    2421              :   // supported calling configurations, while being overloads (and not templates)
+    2422              :   // so that implicit conversions still work.
+    2423              :   //
+    2424              :   // SetDims on ArrayRef is internally implemented as a template, so we can
+    2425              :   // handle both ArrayRefs of different types (there are some uses of
+    2426              :   // Resize in Caffe2 which pass in int, not int64_t.)
+    2427              : 
+    2428              :   template <
+    2429              :       typename T,
+    2430              :       typename = typename std::enable_if<std::is_integral<T>::value>::type>
+    2431              :   bool SetDimsTemplate(ArrayRef<T> src) {
+    2432              :     TORCH_CHECK(
+    2433              :         !has_symbolic_sizes_strides_,
+    2434              :         "SetDims() called on tensor with symbolic shape")
+    2435              : 
+    2436              :     auto old_numel = numel_;
+    2437              :     sizes_and_strides_.resize(src.size());
+    2438              :     int64_t new_numel = 1;
+    2439              :     for (const auto i : c10::irange(src.size())) {
+    2440              :       new_numel *= src[i];
+    2441              :       sizes_and_strides_.size_at_unchecked(i) = src[i];
+    2442              :     }
+    2443              :     numel_ = new_numel;
+    2444              :     empty_tensor_restride(MemoryFormat::Contiguous);
+    2445              :     return numel_ != old_numel;
+    2446              :   }
+    2447              : 
+    2448              :   bool SetDims(ArrayRef<int64_t> s) {
+    2449              :     return SetDimsTemplate(s);
+    2450              :   }
+    2451              : 
+    2452              :   bool SetDims(ArrayRef<int> s) {
+    2453              :     return SetDimsTemplate(s);
+    2454              :   }
+    2455              : 
+    2456              :   bool SetDims(ArrayRef<size_t> s) {
+    2457              :     return SetDimsTemplate(s);
+    2458              :   }
+    2459              : 
+    2460              :   bool SetDims() {
+    2461              :     return SetDims(IntArrayRef{});
+    2462              :   }
+    2463              : 
+    2464              :   bool SetDims(const int64_t d0) {
+    2465              :     return SetDims(IntArrayRef{d0});
+    2466              :   }
+    2467              : 
+    2468              :   bool SetDims(const int64_t d0, const int64_t d1) {
+    2469              :     return SetDims(IntArrayRef{d0, d1});
+    2470              :   }
+    2471              : 
+    2472              :   bool SetDims(const int64_t d0, const int64_t d1, const int64_t d2) {
+    2473              :     return SetDims(IntArrayRef{d0, d1, d2});
+    2474              :   }
+    2475              : 
+    2476              :   bool SetDims(
+    2477              :       const int64_t d0,
+    2478              :       const int64_t d1,
+    2479              :       const int64_t d2,
+    2480              :       const int64_t d3) {
+    2481              :     return SetDims(IntArrayRef{d0, d1, d2, d3});
+    2482              :   }
+    2483              : 
+    2484              :   /**
+    2485              :    * Compute the number of elements based on the sizes of a tensor.
+    2486              :    */
+    2487              :   // NB: This is ONLY called when sizes_and_strides_ is used directly; if
+    2488              :   // we are virtualizing, then numel calls are virtualized as well, and this
+    2489              :   // should never get called
+    2490              :   int64_t compute_numel() const {
+    2491              :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(!has_symbolic_sizes_strides_);
+    2492              : #if C10_HAS_BUILTIN_OVERFLOW() && !defined(C10_MOBILE)
+    2493              :     // Use overflow checks if supported by the compiler
+    2494              :     return safe_compute_numel();
+    2495              : #else
+    2496              :     return c10::multiply_integers(sizes_and_strides_.sizes_arrayref());
+    2497              : #endif
+    2498              :   }
+    2499              : 
+    2500              :   /**
+    2501              :    * Compute the number of elements based on the sizes of a
+    2502              :    * tensor. Catches integer overflow that may occur when a tensor
+    2503              :    * using a sparse layout has multiple dimensions with large sizes.
+    2504              :    */
+    2505              :   int64_t safe_compute_numel() const {
+    2506              :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(!has_symbolic_sizes_strides_);
+    2507              :     uint64_t n = 1;
+    2508              :     bool overflows =
+    2509              :         c10::safe_multiplies_u64(sizes_and_strides_.sizes_arrayref(), &n);
+    2510              :     constexpr auto numel_max = std::min(
+    2511              :         static_cast<uint64_t>(std::numeric_limits<int64_t>::max()),
+    2512              :         static_cast<uint64_t>(std::numeric_limits<size_t>::max()));
+    2513              : 
+    2514              :     overflows |= (n > numel_max);
+    2515              :     TORCH_CHECK(!overflows, "numel: integer multiplication overflow");
+    2516              :     return static_cast<int64_t>(n);
+    2517              :   }
+    2518              : 
+    2519              :   SymInt compute_sym_numel() const {
+    2520              :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(has_symbolic_sizes_strides_);
+    2521              :     auto& sym_shape_meta{symbolic_shape_meta()};
+    2522              :     SymInt numel = 1;
+    2523              :     for (const auto& s : sym_shape_meta.sizes_) {
+    2524              :       numel *= s;
+    2525              :     }
+    2526              :     return numel;
+    2527              :   }
+    2528              : 
+    2529              :   /**
+    2530              :    * Compute whether or not a tensor is contiguous based on the sizes and
+    2531              :    * strides of a tensor.
+    2532              :    */
+    2533              :   bool compute_contiguous(identity<bool>) const;
+    2534              : 
+    2535              :   bool compute_channels_last_contiguous_2d(identity<bool>) const;
+    2536              : 
+    2537              :   bool compute_channels_last_contiguous_3d(identity<bool>) const;
+    2538              : 
+    2539              :   bool compute_strides_like_channels_last_2d(identity<bool>) const;
+    2540              : 
+    2541              :   bool compute_strides_like_channels_last_3d(identity<bool>) const;
+    2542              : 
+    2543              :   bool compute_non_overlapping_and_dense(identity<bool>) const;
+    2544              : 
+    2545              :   SymBool compute_contiguous(identity<SymBool>) const;
+    2546              : 
+    2547              :   SymBool compute_channels_last_contiguous_2d(identity<SymBool>) const;
+    2548              : 
+    2549              :   SymBool compute_channels_last_contiguous_3d(identity<SymBool>) const;
+    2550              : 
+    2551              :   SymBool compute_strides_like_channels_last_2d(identity<SymBool>) const;
+    2552              : 
+    2553              :   SymBool compute_strides_like_channels_last_3d(identity<SymBool>) const;
+    2554              : 
+    2555              :   SymBool compute_non_overlapping_and_dense(identity<SymBool>) const;
+    2556              : 
+    2557              :  protected:
+    2558              :   /**
+    2559              :    * Recompute the cached numel of a tensor.  Call this if you modify
+    2560              :    * sizes.
+    2561              :    *
+    2562              :    * For tensors with sparse layouts, use safe_refresh_numel() instead
+    2563              :    * because it will catch integer overflow that may occur for tensors
+    2564              :    * with sparse layouts and large dimensions.
+    2565              :    *
+    2566              :    * NB: We may uselessly recompute cached numel even in situations where
+    2567              :    * it is completely never used (e.g., if CustomSizes for Python).  However,
+    2568              :    * we still must keep it up to date in case the Python overload
+    2569              :    * returns None (in which case we will consult the field here).  This also
+    2570              :    * implies that sizes/strides will never be complete garbage; in the
+    2571              :    * very worst case scenario, it will reflect a 1-dim zero size tensor.
+    2572              :    */
+    2573              :   void refresh_numel() {
+    2574              :     if (has_symbolic_sizes_strides_) {
+    2575              :       symbolic_shape_meta().numel_ = compute_sym_numel();
+    2576              :     } else {
+    2577              :       numel_ = compute_numel();
+    2578              :     }
+    2579              :   }
+    2580              : 
+    2581              :   /**
+    2582              :    * Recompute the cached numel of a tensor.  Call this if you modify
+    2583              :    * sizes. Use only for tensors with sparse layouts because only
+    2584              :    * sparse tensor are likely to have sizes that may lead to integer
+    2585              :    * overflow when computing numel.
+    2586              :    */
+    2587              :   void safe_refresh_numel() {
+    2588              :     if (has_symbolic_sizes_strides_) {
+    2589              :       // NB: sym numel is done with symbolic integers, which handle overflow
+    2590              :       // checking
+    2591              :       symbolic_shape_meta().numel_ = compute_sym_numel();
+    2592              :     } else {
+    2593              :       numel_ = safe_compute_numel();
+    2594              :     }
+    2595              :   }
+    2596              : 
+    2597              :  private:
+    2598              :   // NB: the TypeId argument prevents confusion where you pass a true/false
+    2599              :   // literal and pick the wrong overload
+    2600              : 
+    2601              :   void _set_is_contiguous(identity<bool>, bool b) {
+    2602              :     is_contiguous_ = b;
+    2603              :   }
+    2604              : 
+    2605              :   void _set_is_contiguous(identity<SymBool>, SymBool b) {
+    2606              :     symbolic_shape_meta().is_contiguous_ = std::move(b);
+    2607              :   }
+    2608              : 
+    2609              :   void _set_is_channels_last_contiguous(identity<bool>, bool b) {
+    2610              :     is_channels_last_contiguous_ = b;
+    2611              :   }
+    2612              : 
+    2613              :   void _set_is_channels_last_contiguous(identity<SymBool>, SymBool b) {
+    2614              :     symbolic_shape_meta().is_channels_last_contiguous_ = std::move(b);
+    2615              :   }
+    2616              : 
+    2617              :   void _set_is_channels_last_3d_contiguous(identity<bool>, bool b) {
+    2618              :     is_channels_last_3d_contiguous_ = b;
+    2619              :   }
+    2620              : 
+    2621              :   void _set_is_channels_last_3d_contiguous(identity<SymBool>, SymBool b) {
+    2622              :     symbolic_shape_meta().is_channels_last_3d_contiguous_ = std::move(b);
+    2623              :   }
+    2624              : 
+    2625              :   void _set_is_channels_last(identity<bool>, bool b) {
+    2626              :     is_channels_last_ = b;
+    2627              :   }
+    2628              : 
+    2629              :   void _set_is_channels_last(identity<SymBool>, SymBool b) {
+    2630              :     symbolic_shape_meta().is_channels_last_ = std::move(b);
+    2631              :   }
+    2632              : 
+    2633              :   void _set_is_channels_last_3d(identity<bool>, bool b) {
+    2634              :     is_channels_last_3d_ = b;
+    2635              :   }
+    2636              : 
+    2637              :   void _set_is_channels_last_3d(identity<SymBool>, SymBool b) {
+    2638              :     symbolic_shape_meta().is_channels_last_3d_ = std::move(b);
+    2639              :   }
+    2640              : 
+    2641              :   void _set_is_non_overlapping_and_dense(identity<bool>, bool b) {
+    2642              :     is_non_overlapping_and_dense_ = b;
+    2643              :   }
+    2644              : 
+    2645              :   void _set_is_non_overlapping_and_dense(identity<SymBool>, SymBool b) {
+    2646              :     symbolic_shape_meta().is_non_overlapping_and_dense_ = std::move(b);
+    2647              :   }
+    2648              : 
+    2649              :   // These are little wrappers over the real compute_ functions that
+    2650              :   // can make use of other contiguity fields to short circuit.
+    2651              :   // They need to be implemented separately for SymBool, as SymBool does
+    2652              :   // not short circuit.
+    2653              :   // TODO: should the SymBool cases avoid the short circuit?  Need to reason
+    2654              :   // if its correct, and reason if the simpler expressions are better for
+    2655              :   // analysis (maybe not!)
+    2656              : 
+    2657              :   bool compute_is_non_overlapping_and_dense_dim4(identity<bool> type_id) {
+    2658              :     return is_contiguous_ || is_channels_last_contiguous_ ||
+    2659              :         compute_non_overlapping_and_dense(type_id);
+    2660              :   }
+    2661              : 
+    2662              :   SymBool compute_is_non_overlapping_and_dense_dim4(identity<SymBool> type_id);
+    2663              : 
+    2664              :   bool compute_channels_last_contiguous_3d_dim5(identity<bool> type_id) {
+    2665              :     return !is_channels_last_contiguous_ &&
+    2666              :         compute_channels_last_contiguous_3d(type_id);
+    2667              :   }
+    2668              : 
+    2669              :   SymBool compute_channels_last_contiguous_3d_dim5(identity<SymBool> type_id);
+    2670              : 
+    2671              :   bool compute_channels_last_2d_dim5(identity<bool> type_id) {
+    2672              :     return !is_channels_last_3d_contiguous_ &&
+    2673              :         compute_strides_like_channels_last_2d(type_id);
+    2674              :   }
+    2675              : 
+    2676              :   SymBool compute_channels_last_2d_dim5(identity<SymBool> type_id);
+    2677              : 
+    2678              :   bool compute_channels_last_3d_dim5(identity<bool> type_id) {
+    2679              :     return !is_channels_last_ && compute_strides_like_channels_last_3d(type_id);
+    2680              :   }
+    2681              : 
+    2682              :   SymBool compute_channels_last_3d_dim5(identity<SymBool> type_id);
+    2683              : 
+    2684              :   bool compute_is_non_overlapping_and_dense_dim5(identity<bool> type_id) {
+    2685              :     return is_contiguous_ || is_channels_last_contiguous_ ||
+    2686              :         is_channels_last_3d_contiguous_ ||
+    2687              :         compute_non_overlapping_and_dense(type_id);
+    2688              :   }
+    2689              : 
+    2690              :   SymBool compute_is_non_overlapping_and_dense_dim5(identity<SymBool> type_id);
+    2691              : 
+    2692              :   bool compute_is_non_overlapping_and_dense_anydim(identity<bool> type_id) {
+    2693              :     return is_contiguous_ || compute_non_overlapping_and_dense(type_id);
+    2694              :   }
+    2695              : 
+    2696              :   SymBool compute_is_non_overlapping_and_dense_anydim(
+    2697              :       identity<SymBool> type_id);
+    2698              : 
+    2699              :   template <typename T>
+    2700              :   void _refresh_contiguous() {
+    2701              :     auto type_id = identity<T>();
+    2702              :     // Note:
+    2703              :     // Dim 0, 1, 2 will never be a channels last 2d/3d format
+    2704              :     // Dim 3+ is possibly be a channels last 2d format (Dim 4 only at this
+    2705              :     // point) Dim 4+ is possibly be a channels last 3d format (Dim 5 only at
+    2706              :     // this point)
+    2707              :     switch (dim()) {
+    2708              :       case 4: {
+    2709              :         _set_is_contiguous(type_id, compute_contiguous(type_id));
+    2710              :         _set_is_channels_last_contiguous(
+    2711              :             type_id, compute_channels_last_contiguous_2d(type_id));
+    2712              :         _set_is_channels_last_3d_contiguous(type_id, false);
+    2713              :         _set_is_channels_last(
+    2714              :             type_id, compute_strides_like_channels_last_2d(type_id));
+    2715              :         _set_is_channels_last_3d(type_id, false);
+    2716              :         _set_is_non_overlapping_and_dense(
+    2717              :             type_id, compute_is_non_overlapping_and_dense_dim4(type_id));
+    2718              :         break;
+    2719              :       }
+    2720              :       case 5: {
+    2721              :         _set_is_contiguous(type_id, compute_contiguous(type_id));
+    2722              :         _set_is_channels_last_contiguous(
+    2723              :             type_id, compute_channels_last_contiguous_2d(type_id));
+    2724              :         _set_is_channels_last_3d_contiguous(
+    2725              :             type_id, compute_channels_last_contiguous_3d_dim5(type_id));
+    2726              :         _set_is_channels_last(type_id, compute_channels_last_2d_dim5(type_id));
+    2727              :         _set_is_channels_last_3d(
+    2728              :             type_id, compute_channels_last_3d_dim5(type_id));
+    2729              :         _set_is_non_overlapping_and_dense(
+    2730              :             type_id, compute_is_non_overlapping_and_dense_dim5(type_id));
+    2731              :         break;
+    2732              :       }
+    2733              :       default:
+    2734              :         // is_channels_last_ and is_channels_last_3d_ are suggested
+    2735              :         // memory_format. Being channels_last_contiguous doesn't necessarily
+    2736              :         // mean the tensor is strided like channels_last: for strides on channel
+    2737              :         // dimension could suggest desired memory_layout, but it doesn't affect
+    2738              :         // memory storage
+    2739              :         _set_is_contiguous(type_id, compute_contiguous(type_id));
+    2740              :         _set_is_channels_last_contiguous(type_id, false);
+    2741              :         _set_is_channels_last_3d_contiguous(type_id, false);
+    2742              :         _set_is_channels_last(type_id, false);
+    2743              :         _set_is_channels_last_3d(type_id, false);
+    2744              :         _set_is_non_overlapping_and_dense(
+    2745              :             type_id, compute_is_non_overlapping_and_dense_anydim(type_id));
+    2746              :         break;
+    2747              :     }
+    2748              :   }
+    2749              : 
+    2750              :  protected:
+    2751              :   /**
+    2752              :    * Recompute the cached contiguity of a tensor.  Call this if you modify sizes
+    2753              :    * or strides.
+    2754              :    */
+    2755              :   void refresh_contiguous() {
+    2756              :     if (has_symbolic_sizes_strides_) {
+    2757              :       _refresh_contiguous<SymBool>();
+    2758              :     } else {
+    2759              :       _refresh_contiguous<bool>();
+    2760              :     }
+    2761              :   }
+    2762              : 
+    2763              :   /**
+    2764              :    * Copy the tensor metadata fields (e.g. sizes / strides / storage pointer /
+    2765              :    * storage_offset) from one TensorImpl to another TensorImpl.
+    2766              :    *
+    2767              :    * For usage of `version_counter` and `allow_tensor_metadata_change`, see NOTE
+    2768              :    * [ TensorImpl Shallow-Copying ].
+    2769              :    */
+    2770              :   static void copy_tensor_metadata(
+    2771              :       const TensorImpl* src_impl,
+    2772              :       TensorImpl* dest_impl,
+    2773              :       const c10::VariableVersion& version_counter,
+    2774              :       bool allow_tensor_metadata_change);
+    2775              : 
+    2776              :   /**
+    2777              :    * Copy the tensor metadata fields (e.g. sizes / strides / storage pointer /
+    2778              :    * storage_offset) from one TensorImpl to another TensorImpl.
+    2779              :    *
+    2780              :    * For usage of `version_counter` and `allow_tensor_metadata_change`, see NOTE
+    2781              :    * [ TensorImpl Shallow-Copying ].
+    2782              :    */
+    2783              :   static void copy_tensor_metadata(
+    2784              :       const TensorImpl* src_impl,
+    2785              :       TensorImpl* dest_impl,
+    2786              :       c10::VariableVersion&& version_counter,
+    2787              :       bool allow_tensor_metadata_change);
+    2788              : 
+    2789              :  private:
+    2790              :   static void copy_tensor_metadata_except_version_counter(
+    2791              :       const TensorImpl* src_impl,
+    2792              :       TensorImpl* dest_impl,
+    2793              :       bool allow_tensor_metadata_change);
+    2794              : 
+    2795              :  protected:
+    2796              :   // Error message to show when the user tries to change tensor metadata on
+    2797              :   // Tensor created from .data or .detach().
+    2798              :   //
+    2799              :   // See NOTE [ Metadata Change for a Detached Tensor ] for details.
+    2800              :   static const char* const err_msg_tensor_metadata_change_not_allowed;
+    2801              : 
+    2802              :   static void copy_generic_tensor_metadata(
+    2803              :       const TensorImpl* src_impl,
+    2804              :       TensorImpl* dest_impl);
+    2805              : 
+    2806              :  public:
+    2807              :   void set_storage_access_should_throw() {
+    2808              :     storage_access_should_throw_ = true;
+    2809              :   }
+    2810              : 
+    2811              :  public:
+    2812              :   void set_custom_sizes_strides(SizesStridesPolicy policy) {
+    2813              :     custom_sizes_strides_ = static_cast<uint8_t>(policy);
+    2814              :     refresh_sizes_strides_policy();
+    2815              :   }
+    2816              : 
+    2817              :   void set_python_custom_sizes_strides(SizesStridesPolicy policy) {
+    2818              :     python_custom_sizes_strides_ = static_cast<uint8_t>(policy);
+    2819              :     refresh_sizes_strides_policy();
+    2820              :   }
+    2821              : 
+    2822              :   void set_custom_device(bool custom_device) {
+    2823              :     custom_device_ = custom_device;
+    2824              :     refresh_device_policy();
+    2825              :   }
+    2826              : 
+    2827              :   void set_custom_layout(bool custom_layout) {
+    2828              :     custom_layout_ = custom_layout;
+    2829              :     refresh_layout_policy();
+    2830              :   }
+    2831              : 
+    2832              :   void set_python_custom_device(bool custom_device) {
+    2833              :     python_custom_device_ = custom_device;
+    2834              :     refresh_device_policy();
+    2835              :   }
+    2836              : 
+    2837              :   void set_python_custom_layout(bool custom_layout) {
+    2838              :     python_custom_layout_ = custom_layout;
+    2839              :     refresh_layout_policy();
+    2840              :   }
+    2841              : 
+    2842              :  protected:
+    2843              :   void refresh_sizes_strides_policy() {
+    2844              :     if (has_symbolic_sizes_strides_) {
+    2845              :       sizes_strides_policy_ =
+    2846              :           static_cast<uint8_t>(SizesStridesPolicy::CustomSizes);
+    2847              :     } else {
+    2848              :       sizes_strides_policy_ =
+    2849              :           std::max(custom_sizes_strides_, python_custom_sizes_strides_);
+    2850              :     }
+    2851              :   }
+    2852              : 
+    2853              :   void refresh_device_policy() {
+    2854              :     device_policy_ = custom_device_ || python_custom_device_;
+    2855              :   }
+    2856              : 
+    2857              :   void refresh_layout_policy() {
+    2858              :     layout_policy_ = custom_layout_ || python_custom_layout_;
+    2859              :   }
+    2860              : 
+    2861              :  protected:
+    2862              :   Storage storage_;
+    2863              : 
+    2864              :  private:
+    2865              :   // This pointer points to an AutogradMeta struct that stores autograd-specific
+    2866              :   // fields (such as grad_ / grad_fn_ / grad_accumulator_). This pointer always
+    2867              :   // has unique ownership (meaning only one TensorImpl can own it at a time).
+    2868              :   //
+    2869              :   // autograd_meta_ can be nullptr, as an optimization.  When this occurs, it is
+    2870              :   // equivalent to having an autograd_meta_ pointing to a default constructed
+    2871              :   // AutogradMeta; intuitively, tensors which don't require grad will have this
+    2872              :   // field set to null.
+    2873              :   //
+    2874              :   // This means accessors on autograd_meta_ have to be careful to test if they
+    2875              :   // got a nullptr, and handle default behavior appropriately in that case.
+    2876              :   //
+    2877              :   // Note that we don't enforce the invariant that if the AutogradMeta is
+    2878              :   // default constructed, it is nullptr (to do this, we'd have to continuously
+    2879              :   // check if an AutogradMeta became, by mutation, equal to the default
+    2880              :   // constructed form.  (This might be useful, but it seems rare enough that
+    2881              :   // a requires_grad=True variable will turn back into the requires_grad=False
+    2882              :   // version.)  So there are three representable states:
+    2883              :   //
+    2884              :   //    1. autograd_meta_ == nullptr
+    2885              :   //    2. autograd_meta_ is default constructed (semantically, same as (1))
+    2886              :   //    3. autograd_meta_ has nontrivial information content
+    2887              :   //
+    2888              :   std::unique_ptr<c10::AutogradMetaInterface> autograd_meta_ = nullptr;
+    2889              : 
+    2890              :  protected:
+    2891              :   std::unique_ptr<c10::ExtraMeta> extra_meta_ = nullptr;
+    2892              : 
+    2893              :   c10::VariableVersion version_counter_;
+    2894              : 
+    2895              :   impl::PyObjectSlot pyobj_slot_;
+    2896              : 
+    2897              :   c10::impl::SizesAndStrides sizes_and_strides_;
+    2898              : 
+    2899              :   int64_t storage_offset_ = 0;
+    2900              :   // If sizes and strides are empty, the numel is 1!!  However, most of the
+    2901              :   // time, we will immediately set sizes to {0} and reset numel to 0.
+    2902              :   // (Can't do that in the default initializers, because there's no way to
+    2903              :   // spell "allocate a one-element array" for strides_).
+    2904              :   int64_t numel_ = 1;
+    2905              : 
+    2906              :   // INVARIANT: When storage is non-null, this type meta must
+    2907              :   // agree with the type meta in storage
+    2908              :   caffe2::TypeMeta data_type_;
+    2909              : 
+    2910              :   // NOTE [c10::optional operator usage in CUDA]
+    2911              :   // Our optional definition doesn't compile in .cu file if `value()` or
+    2912              :   // `operator->` are used.  Instead, we always use `operator*`.
+    2913              :   // See https://github.com/pytorch/pytorch/issues/18496 for more info.
+    2914              :   // If this is too burdensome to maintain, we can just
+    2915              :   // manually implement this with an additional bool.
+    2916              : 
+    2917              :   // INVARIANT: When storage is non-null, this Device must
+    2918              :   // agree with the type meta in storage.
+    2919              :   //
+    2920              :   // INVARIANT: device_opt_ is only nullopt for undefined tensors
+    2921              :   // (which do not have a device.)
+    2922              :   c10::optional<c10::Device> device_opt_;
+    2923              : 
+    2924              :   // default member initializers for bit-fields only available with -std=c++2a
+    2925              :   // or -std=gnu++2a
+    2926              :   inline void init_bitfields() {
+    2927              :     is_contiguous_ = true;
+    2928              :     is_channels_last_ = false;
+    2929              :     is_channels_last_contiguous_ = false;
+    2930              :     is_channels_last_3d_ = false;
+    2931              :     is_channels_last_3d_contiguous_ = false;
+    2932              :     is_non_overlapping_and_dense_ = true;
+    2933              :     is_wrapped_number_ = false;
+    2934              :     allow_tensor_metadata_change_ = true;
+    2935              :     reserved_ = false;
+    2936              :     sizes_strides_policy_ = static_cast<uint8_t>(SizesStridesPolicy::Default);
+    2937              :     custom_sizes_strides_ = static_cast<uint8_t>(SizesStridesPolicy::Default);
+    2938              :     python_custom_sizes_strides_ =
+    2939              :         static_cast<uint8_t>(SizesStridesPolicy::Default);
+    2940              :     python_custom_device_ = false;
+    2941              :     python_custom_layout_ = false;
+    2942              :     custom_device_ = false;
+    2943              :     custom_layout_ = false;
+    2944              :     device_policy_ = false;
+    2945              :     layout_policy_ = false;
+    2946              :     storage_access_should_throw_ = false;
+    2947              :     has_symbolic_sizes_strides_ = false;
+    2948              :   }
+    2949              : 
+    2950              :   // Tensor is contiguous
+    2951              :   bool is_contiguous_ : 1;
+    2952              : 
+    2953              :   // Tensor is a subclass that does not permit storage access.
+    2954              :   bool storage_access_should_throw_ : 1;
+    2955              : 
+    2956              :   // Tensor is stored in the channels last 2d memory format, when dimensions
+    2957              :   // order is (N)CHW and C-strides < W-strides < H-strides (< N-strides)
+    2958              :   // (If size of any dimension is equal to 1, this dimension strides value
+    2959              :   // is not taken into account).
+    2960              :   bool is_channels_last_ : 1;
+    2961              : 
+    2962              :   // Channels last contiguous tensor is channel last tensor which occupies
+    2963              :   // contiguous memory block.
+    2964              :   bool is_channels_last_contiguous_ : 1;
+    2965              : 
+    2966              :   // Tensor is stored in the channels last 3d memory format, when dimensions
+    2967              :   // order is (N)CDHW and C-strides < W-strides < H-strides < D - strides (<
+    2968              :   // N-strides) (If size of any dimension is equal to 1, this dimension strides
+    2969              :   // value is not taken into account).
+    2970              :   bool is_channels_last_3d_ : 1;
+    2971              : 
+    2972              :   // Channels last 3d contiguous tensor is channel last 3d tensor which occupies
+    2973              :   // contiguous memory block.
+    2974              :   bool is_channels_last_3d_contiguous_ : 1;
+    2975              : 
+    2976              :   // Dense tensor is the tensor that store values in a contiguous block of
+    2977              :   // memory. Non-overlapping tensor is the tensor in which elements occupy
+    2978              :   // individual non-repetitive memory.
+    2979              :   bool is_non_overlapping_and_dense_ : 1;
+    2980              : 
+    2981              :   bool is_wrapped_number_ : 1;
+    2982              : 
+    2983              :   // NOTE [ Metadata Change for a Detached Tensor ]
+    2984              :   //
+    2985              :   // Normally, a user is allowed to change the tensor metadata
+    2986              :   // (e.g. sizes / strides / storage / storage_offset) of a tensor.
+    2987              :   // However, if the tensor is created by `t1_detached = t1.data` in Python
+    2988              :   // or `t1_detached = t1.detach()` in Python/C++, those changes to the
+    2989              :   // tensor metadata of `t1_detached` will not be propagated back to the
+    2990              :   // original tensor `t1`. In order to make such changes explicitly illegal,
+    2991              :   // we created the `allow_tensor_metadata_change_` flag, to prevent users
+    2992              :   // from changing metadata of the detached tensor and expecting the original
+    2993              :   // tensor to also be updated.
+    2994              :   //
+    2995              :   // NOTE: For a full list of tensor metadata fields, please see
+    2996              :   // `copy_tensor_metadata()` in TensorImpl and its subclasses to find
+    2997              :   // which fields are copied by value.
+    2998              :   bool allow_tensor_metadata_change_ : 1;
+    2999              : 
+    3000              :   // we decide to keep reserved_ and it will
+    3001              :   // live in Tensor after the split
+    3002              :   // The logic is that if Extend() or ReserveSpace() were ever called,
+    3003              :   // then subsequent Resize()s will not free up Storage.
+    3004              :   bool reserved_ : 1;
+    3005              : 
+    3006              :   // Call _custom() virtual methods for
+    3007              :   // strides()/is_contiguous()/sizes()/dim()/numel()
+    3008              :   // This is a combination of sizes_strides_custom_dispatch_
+    3009              :   // and has_symbolic_sizes_strides_
+    3010              :   uint8_t sizes_strides_policy_ : 2;
+    3011              : 
+    3012              :   // Whether or not sizes_and_strides_ contains a symbolic value.
+    3013              :   bool has_symbolic_sizes_strides_ : 1;
+    3014              : 
+    3015              :   // Call _custom() virtual method for
+    3016              :   // strides()/is_contiguous()/sizes()/dim()/numel()
+    3017              :   uint8_t custom_sizes_strides_ : 2;
+    3018              : 
+    3019              :   // Combo of custom_ and python_custom_
+    3020              :   bool device_policy_ : 1;
+    3021              :   bool layout_policy_ : 1;
+    3022              : 
+    3023              :   // Call _custom() virtual method for device()
+    3024              :   bool custom_device_ : 1;
+    3025              : 
+    3026              :   // Call _custom() virtual method for layout()
+    3027              :   bool custom_layout_ : 1;
+    3028              : 
+    3029              :   // Call into Python for
+    3030              :   // strides()/is_contiguous()/sizes()/dim()/numel()
+    3031              :   uint8_t python_custom_sizes_strides_ : 2;
+    3032              : 
+    3033              :   // Call into Python for device()
+    3034              :   bool python_custom_device_ : 1;
+    3035              : 
+    3036              :   // Call into Python for layout()
+    3037              :   bool python_custom_layout_ : 1;
+    3038              : 
+    3039              :   // The set of DispatchKeys which describe this tensor.  NB: this
+    3040              :   // does NOT include Autograd (historically, it did, but
+    3041              :   // not anymore!)
+    3042              :   //
+    3043              :   // INVARIANT: extra_meta_->named_tensor_meta_ != nullptr  <==>
+    3044              :   // key_set_.has(DispatchKey::Named)
+    3045              :   DispatchKeySet key_set_;
+    3046              : 
+    3047              :  private:
+    3048              :   // C10_TensorImpl_Size_Check_Dummy_Class needs to be friends with
+    3049              :   // TensorImpl so it can inspect the size of private fields
+    3050              :   template <
+    3051              :       size_t cplusplus,
+    3052              :       size_t clang_ver_major,
+    3053              :       size_t gcc_ver,
+    3054              :       size_t gcc_ver_minor,
+    3055              :       size_t nvcc,
+    3056              :       size_t cuda_version,
+    3057              :       size_t cuda_version_major,
+    3058              :       size_t ptr_size>
+    3059              :   friend class C10_TensorImpl_Size_Check_Dummy_Class;
+    3060              : };
+    3061              : 
+    3062              : // Note [TensorImpl size constraints]
+    3063              : // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    3064              : // Changed the size of TensorImpl?  If the size went down, good for
+    3065              : // you!  Adjust the documentation below and the expected size.
+    3066              : // Did it go up?  Read on...
+    3067              : //
+    3068              : // Struct size matters.  In some production systems at Facebook, we have
+    3069              : // 400M live tensors during a training run.  Do the math: every 64-bit
+    3070              : // word you add to Tensor is an extra 3.2 gigabytes in RAM.
+    3071              : //
+    3072              : // If you are a Facebook employee, you can check if the run in question
+    3073              : // has tipped you over the point using the command here:
+    3074              : // https://fburl.com/q5enpv98
+    3075              : //
+    3076              : // For reference, we OOMed at 160 bytes (20 words) per TensorImpl.
+    3077              : // This is not counting overhead from strides out-of-line allocation and
+    3078              : // StorageImpl space and this is from before we inlined sizes and strides
+    3079              : // directly into TensorImpl as SmallVectors.
+    3080              : //
+    3081              : // Our memory usage on 32-bit systems is suboptimal, but we're not checking
+    3082              : // for it at the moment (to help avoid rage inducing cycles when the
+    3083              : // 32-bit number is wrong).
+    3084              : //
+    3085              : // Current breakdown:
+    3086              : //
+    3087              : //    vtable pointer
+    3088              : //    strong refcount           TODO: pack these into one word
+    3089              : //    weak refcount
+    3090              : //    storage pointer
+    3091              : //    autograd metadata pointer
+    3092              : //    named tensor metadata pointer
+    3093              : //    version counter pointer
+    3094              : //    PyObjectSlot
+    3095              : //    SizesAndStrides size/pointer
+    3096              : //    SizesAndStrides sizes (pre-allocated 0)
+    3097              : //    SizesAndStrides sizes (pre-allocated 1)
+    3098              : //    SizesAndStrides sizes (pre-allocated 2)
+    3099              : //    SizesAndStrides sizes (pre-allocated 3)
+    3100              : //    SizesAndStrides sizes (pre-allocated 4)
+    3101              : //    SizesAndStrides strides (pre-allocated 0)
+    3102              : //    SizesAndStrides strides (pre-allocated 1)
+    3103              : //    SizesAndStrides strides (pre-allocated 2)
+    3104              : //    SizesAndStrides strides (pre-allocated 3)
+    3105              : //    SizesAndStrides strides (pre-allocated 4)
+    3106              : //    storage offset
+    3107              : //    numel
+    3108              : //    data type, device, is_contiguous, storage_access_should_throw_, bitfields
+    3109              : //    DispatchKeySet
+    3110              : //
+    3111              : 
+    3112              : // Various preprocessor macros we use to check that the
+    3113              : // TensorImpl size hasn't changed unexpectedly. We undef
+    3114              : // these later.
+    3115              : #ifndef __NVCC__
+    3116              : #define C10_NVCC 0
+    3117              : #else
+    3118              : #define C10_NVCC __NVCC__
+    3119              : #endif
+    3120              : 
+    3121              : #ifndef __CUDA_VER_MAJOR__
+    3122              : #define C10_CUDA_VERSION_MAJOR 0
+    3123              : #else
+    3124              : #define C10_CUDA_VERSION_MAJOR __CUDA_VER_MAJOR__
+    3125              : #endif
+    3126              : 
+    3127              : #ifndef CUDA_VERSION
+    3128              : #define C10_CUDA_VERSION 0
+    3129              : #else
+    3130              : #define C10_CUDA_VERSION CUDA_VERSION
+    3131              : #endif
+    3132              : 
+    3133              : #ifndef __clang_major__
+    3134              : #define C10_CLANG_MAJOR_VERSION 0
+    3135              : #else
+    3136              : #define C10_CLANG_MAJOR_VERSION __clang_major__
+    3137              : #endif
+    3138              : 
+    3139              : #ifndef __GNUC__
+    3140              : #define C10_GCC_VERSION 0
+    3141              : #else
+    3142              : #define C10_GCC_VERSION __GNUC__
+    3143              : #endif
+    3144              : 
+    3145              : #ifndef __GNUC_MINOR__
+    3146              : #define C10_GCC_VERSION_MINOR 0
+    3147              : #else
+    3148              : #define C10_GCC_VERSION_MINOR __GNUC_MINOR__
+    3149              : #endif
+    3150              : 
+    3151              : // We use a templatized class to both contain the logic of checking the sizes
+    3152              : // as well as to provide compile-time information that might be useful in
+    3153              : // figuring out why sizes may have changed.
+    3154              : // All the compile time information is given by the template fields that are
+    3155              : // always printed by the compiler when the static_assert fails.
+    3156              : template <
+    3157              :     size_t cplusplus = __cplusplus,
+    3158              :     size_t clang_ver_major = C10_CLANG_MAJOR_VERSION,
+    3159              :     size_t gcc_ver = C10_GCC_VERSION,
+    3160              :     size_t gcc_ver_minor = C10_GCC_VERSION_MINOR,
+    3161              :     size_t nvcc = C10_NVCC,
+    3162              :     size_t cuda_version = C10_CUDA_VERSION,
+    3163              :     size_t cuda_version_major = C10_CUDA_VERSION_MAJOR,
+    3164              :     size_t ptr_size = sizeof(void*)>
+    3165              : class C10_TensorImpl_Size_Check_Dummy_Class : private TensorImpl {
+    3166              :   // Names of (non-bitfield) fields in TensorImpl; used to provide
+    3167              :   // compile-time info about fields whose size changes unexpectedly.
+    3168              :   enum class FieldNameEnum {
+    3169              :     storage_,
+    3170              :     autograd_meta_,
+    3171              :     extra_meta_,
+    3172              :     version_counter_,
+    3173              :     pyobj_slot_,
+    3174              :     sizes_and_strides_,
+    3175              :     storage_offset_,
+    3176              :     numel_,
+    3177              :     data_type_,
+    3178              :     device_opt_,
+    3179              :     key_set_,
+    3180              :     TOTAL_SIZE
+    3181              :   };
+    3182              : 
+    3183              :   // Provides compile-time equality check that reveals what numbers
+    3184              :   // were used and on which quantity
+    3185              :   template <size_t Actual, size_t Expected, FieldNameEnum FiledName>
+    3186              :   constexpr static bool are_equal() {
+    3187              :     static_assert(
+    3188              :         Actual == Expected,
+    3189              :         "Actual and Expected sizes of a field did not match!");
+    3190              :     return true;
+    3191              :   }
+    3192              : 
+    3193              :   // Provides compile-time <= check that reveals what numbers
+    3194              :   // were used and on which quantity
+    3195              :   template <size_t Actual, size_t Expected, FieldNameEnum FiledName>
+    3196              :   constexpr static bool is_le() {
+    3197              :     static_assert(
+    3198              :         Actual <= Expected,
+    3199              :         "Actual and Expected sizes of a field did not match!");
+    3200              :     return true;
+    3201              :   }
+    3202              : 
+    3203              :  public:
+    3204              :   // Compile-time check that TensorImpl field sizes are as expected
+    3205              :   //
+    3206              :   // Observed total sizes and associated versions
+    3207              :   // If you find a flag that predicts when unique_ptr has 16 bytes
+    3208              :   // on 64-bit systems or when sizes_and_strides_ is 84 vs 88 bytes
+    3209              :   // on 32-bit systems you get a cookie!
+    3210              :   // Length | LLVM | GCC  |    C++ |  CUDA
+    3211              :   //    192 |    ? | 11.2 | 201703 | 11040
+    3212              :   //    208 |    ? | 11.2 | 201703 | 11040
+    3213              :   //    208 |    ? | 11.2 | 201402 | 11040
+    3214              :   //    192 |    ? | 11.2 | 201402 | 11040
+    3215              :   //    160 |   12 |  4.2 | 201703 |     0
+    3216              :   //
+    3217              :   // To keep things clean, we split on systems here.
+    3218              : 
+    3219              : #if UINTPTR_MAX == 0xFFFFFFFF
+    3220              :   // This is a 32-bit system
+    3221              :   static constexpr bool check_sizes() {
+    3222              :     constexpr size_t tsize = 20 * sizeof(int64_t);
+    3223              : 
+    3224              :     // clang-format off
+    3225              :     are_equal<sizeof(storage_),            4,  FieldNameEnum::storage_>();
+    3226              :     are_equal<sizeof(autograd_meta_),      4,  FieldNameEnum::autograd_meta_>();
+    3227              :     are_equal<sizeof(extra_meta_),         4,  FieldNameEnum::extra_meta_>();
+    3228              :     are_equal<sizeof(version_counter_),    4,  FieldNameEnum::version_counter_>();
+    3229              :     are_equal<sizeof(pyobj_slot_),    8,  FieldNameEnum::pyobj_slot_>();
+    3230              :     is_le<sizeof(sizes_and_strides_),     88, FieldNameEnum::sizes_and_strides_>();
+    3231              :     are_equal<sizeof(storage_offset_),     8,  FieldNameEnum::storage_offset_>();
+    3232              :     are_equal<sizeof(numel_),              8,  FieldNameEnum::numel_>();
+    3233              :     are_equal<sizeof(data_type_),          2,  FieldNameEnum::data_type_>();
+    3234              :     are_equal<sizeof(device_opt_),         3,  FieldNameEnum::device_opt_>();
+    3235              :     are_equal<sizeof(key_set_),            8,  FieldNameEnum::key_set_>();
+    3236              :     is_le<sizeof(TensorImpl),          tsize,  FieldNameEnum::TOTAL_SIZE>();
+    3237              :     // clang-format on
+    3238              : 
+    3239              :     return true;
+    3240              :   }
+    3241              : #else
+    3242              :   // This is a 64-bit system
+    3243              :   static constexpr bool check_sizes() {
+    3244              :     constexpr size_t tsize = 26 * sizeof(int64_t);
+    3245              : 
+    3246              :     // clang-format off
+    3247              :     are_equal<sizeof(storage_),            8,  FieldNameEnum::storage_>();
+    3248              :     // On some systems involving NVCC the size of unique_ptr is 16 bytes. We haven't
+    3249              :     // figured out how to detect those via macro preprocessors yet, so we use <=
+    3250              :     // comparisons for the relevant fields.
+    3251              :     is_le<sizeof(autograd_meta_),         16,  FieldNameEnum::autograd_meta_>();
+    3252              :     is_le<sizeof(extra_meta_),            16,  FieldNameEnum::extra_meta_>();
+    3253              :     are_equal<sizeof(version_counter_),    8,  FieldNameEnum::version_counter_>();
+    3254              :     are_equal<sizeof(pyobj_slot_),   16,  FieldNameEnum::pyobj_slot_>();
+    3255              :     are_equal<sizeof(sizes_and_strides_), 88,  FieldNameEnum::sizes_and_strides_>();
+    3256              :     are_equal<sizeof(storage_offset_),     8,  FieldNameEnum::storage_offset_>();
+    3257              :     are_equal<sizeof(numel_),              8,  FieldNameEnum::numel_>();
+    3258              :     are_equal<sizeof(data_type_),          2,  FieldNameEnum::data_type_>();
+    3259              :     are_equal<sizeof(device_opt_),         3,  FieldNameEnum::device_opt_>();
+    3260              :     are_equal<sizeof(key_set_),            8,  FieldNameEnum::key_set_>();
+    3261              :     is_le<sizeof(TensorImpl),          tsize,  FieldNameEnum::TOTAL_SIZE>();
+    3262              :     // clang-format on
+    3263              : 
+    3264              :     return true;
+    3265              :   }
+    3266              : #endif
+    3267              : };
+    3268              : 
+    3269              : // We use a class to encapsulate size-checking logic with
+    3270              : // templates to capture sizes and flags. We call this within
+    3271              : // a static assert to prove there is no run-time behaviour.
+    3272              : // Since the methods we call return either true or fail their
+    3273              : // own static_asserts, we should never see the error messages
+    3274              : // below. We have to provide it though for c++ <17.
+    3275              : static_assert(
+    3276              :     C10_TensorImpl_Size_Check_Dummy_Class<>::check_sizes(),
+    3277              :     "You should not see this message.");
+    3278              : 
+    3279              : // Clean up after ourselves
+    3280              : #undef C10_NVCC
+    3281              : #undef C10_CUDA_VERSION_MAJOR
+    3282              : #undef C10_CUDA_VERSION
+    3283              : #undef C10_CLANG_MAJOR_VERSION
+    3284              : #undef C10_GCC_VERSION
+    3285              : #undef C10_GCC_VERSION_MINOR
+    3286              : 
+    3287              : } // namespace c10
+    3288              : 
+    3289              : C10_CLANG_DIAGNOSTIC_POP()
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/TensorOptions.h.func-c.html b/html/libtorch/include/c10/core/TensorOptions.h.func-c.html new file mode 100644 index 0000000..d7dfadc --- /dev/null +++ b/html/libtorch/include/c10/core/TensorOptions.h.func-c.html @@ -0,0 +1,250 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/TensorOptions.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - TensorOptions.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:85.9 %8573
Test Date:2024-04-30 13:17:26Functions:84.0 %2521
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1013TensorOptionsC2INS_6DeviceEvEEOT_0
_ZN3c1017device_or_defaultENS_8optionalINS_6DeviceEEE0
_ZNK3c1013TensorOptions6deviceEv0
_ZZN3c1017device_or_defaultENS_8optionalINS_6DeviceEEEENKUlvE_clEv0
_ZNK3c1013TensorOptions5dtypeENS_8optionalINS_10ScalarTypeEEE22824
_ZN3c1013TensorOptionsC2ENS_10ScalarTypeE395952
_ZNK3c1013TensorOptions6deviceENS_8optionalINS_6DeviceEEE401318
_ZNK3c1013TensorOptions6deviceIJRKNS_10DeviceTypeEEEES0_DpOT_401318
_ZNK3c1013TensorOptions9has_dtypeEv401318
_ZNR3c1013TensorOptions10set_deviceENS_8optionalINS_6DeviceEEE401318
_ZNK3c1013TensorOptions17has_memory_formatEv401402
_ZNK3c1013TensorOptions17memory_format_optEv401402
_ZNK3c1013TensorOptions17requires_grad_optEv401402
_ZNR3c1013TensorOptions9set_dtypeENS_8optionalINS_10ScalarTypeEEE418776
_ZNK3c1013TensorOptions10device_optEv418844
_ZNK3c1013TensorOptions10layout_optEv418844
_ZNK3c1013TensorOptions13requires_gradENS_8optionalIbEE418844
_ZNK3c1013TensorOptions13requires_gradEv418844
_ZNK3c1013TensorOptions17pinned_memory_optEv418844
_ZNK3c1013TensorOptions9dtype_optEv418844
_ZNR3c1013TensorOptions17set_requires_gradENS_8optionalIbEE418844
_ZN3c105dtypeENS_10ScalarTypeE91030286
_ZNK3c1013TensorOptions5dtypeENS_8optionalIN6caffe28TypeMetaEEE91030286
_ZNR3c1013TensorOptions9set_dtypeENS_8optionalIN6caffe28TypeMetaEEE91030286
_ZN3c1013TensorOptionsC2Ev91449130
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/TensorOptions.h.func.html b/html/libtorch/include/c10/core/TensorOptions.h.func.html new file mode 100644 index 0000000..ee2cd40 --- /dev/null +++ b/html/libtorch/include/c10/core/TensorOptions.h.func.html @@ -0,0 +1,250 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/TensorOptions.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - TensorOptions.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:85.9 %8573
Test Date:2024-04-30 13:17:26Functions:84.0 %2521
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1013TensorOptionsC2ENS_10ScalarTypeE395952
_ZN3c1013TensorOptionsC2Ev91449130
_ZN3c1013TensorOptionsC2INS_6DeviceEvEEOT_0
_ZN3c1017device_or_defaultENS_8optionalINS_6DeviceEEE0
_ZN3c105dtypeENS_10ScalarTypeE91030286
_ZNK3c1013TensorOptions10device_optEv418844
_ZNK3c1013TensorOptions10layout_optEv418844
_ZNK3c1013TensorOptions13requires_gradENS_8optionalIbEE418844
_ZNK3c1013TensorOptions13requires_gradEv418844
_ZNK3c1013TensorOptions17has_memory_formatEv401402
_ZNK3c1013TensorOptions17memory_format_optEv401402
_ZNK3c1013TensorOptions17pinned_memory_optEv418844
_ZNK3c1013TensorOptions17requires_grad_optEv401402
_ZNK3c1013TensorOptions5dtypeENS_8optionalIN6caffe28TypeMetaEEE91030286
_ZNK3c1013TensorOptions5dtypeENS_8optionalINS_10ScalarTypeEEE22824
_ZNK3c1013TensorOptions6deviceENS_8optionalINS_6DeviceEEE401318
_ZNK3c1013TensorOptions6deviceEv0
_ZNK3c1013TensorOptions6deviceIJRKNS_10DeviceTypeEEEES0_DpOT_401318
_ZNK3c1013TensorOptions9dtype_optEv418844
_ZNK3c1013TensorOptions9has_dtypeEv401318
_ZNR3c1013TensorOptions10set_deviceENS_8optionalINS_6DeviceEEE401318
_ZNR3c1013TensorOptions17set_requires_gradENS_8optionalIbEE418844
_ZNR3c1013TensorOptions9set_dtypeENS_8optionalIN6caffe28TypeMetaEEE91030286
_ZNR3c1013TensorOptions9set_dtypeENS_8optionalINS_10ScalarTypeEEE418776
_ZZN3c1017device_or_defaultENS_8optionalINS_6DeviceEEEENKUlvE_clEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/TensorOptions.h.gcov.html b/html/libtorch/include/c10/core/TensorOptions.h.gcov.html new file mode 100644 index 0000000..393c397 --- /dev/null +++ b/html/libtorch/include/c10/core/TensorOptions.h.gcov.html @@ -0,0 +1,848 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/TensorOptions.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - TensorOptions.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:85.9 %8573
Test Date:2024-04-30 13:17:26Functions:84.0 %2521
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <c10/core/Backend.h>
+       4              : #include <c10/core/DefaultDtype.h>
+       5              : #include <c10/core/Device.h>
+       6              : #include <c10/core/Layout.h>
+       7              : #include <c10/core/MemoryFormat.h>
+       8              : #include <c10/core/ScalarType.h>
+       9              : #include <c10/core/ScalarTypeToTypeMeta.h>
+      10              : 
+      11              : #include <c10/macros/Macros.h>
+      12              : #include <c10/util/Optional.h>
+      13              : 
+      14              : #include <iosfwd>
+      15              : #include <utility>
+      16              : 
+      17              : namespace c10 {
+      18              : 
+      19              : DispatchKey computeDispatchKey(
+      20              :     c10::optional<ScalarType> dtype,
+      21              :     c10::optional<Layout> layout,
+      22              :     c10::optional<Device> device);
+      23              : 
+      24              : inline ScalarType dtype_or_default(c10::optional<ScalarType> dtype) {
+      25              :   return value_or_else(dtype, [] { return get_default_dtype_as_scalartype(); });
+      26              : }
+      27              : 
+      28              : inline caffe2::TypeMeta dtype_or_default(
+      29              :     c10::optional<caffe2::TypeMeta> dtype) {
+      30              :   return value_or_else(dtype, [] { return get_default_dtype(); });
+      31              : }
+      32              : 
+      33              : inline Layout layout_or_default(c10::optional<Layout> layout) {
+      34              :   return layout.value_or(kStrided);
+      35              : }
+      36              : 
+      37            0 : inline Device device_or_default(c10::optional<Device> device) {
+      38            0 :   return value_or_else(device, [] { return Device(kCPU); });
+      39              : }
+      40              : 
+      41              : inline bool pinned_memory_or_default(c10::optional<bool> pinned_memory) {
+      42              :   return pinned_memory.value_or(false);
+      43              : }
+      44              : 
+      45              : /// A class to encapsulate construction axes of an Tensor.  TensorOptions was
+      46              : /// designed to support the Python style API for specifying construction options
+      47              : /// on factory functions, e.g.,
+      48              : ///
+      49              : ///     torch.zeros(2, 3, dtype=torch.int32)
+      50              : ///
+      51              : /// Because C++ doesn't natively support keyword arguments, there must be
+      52              : /// another way of specifying keyword-like arguments.  TensorOptions is a
+      53              : /// builder class which can be used to construct this "dictionary" of keyword
+      54              : /// arguments: functions which support TensorOptions conventionally take this
+      55              : /// argument optionally as their last argument.
+      56              : ///
+      57              : /// WARNING: In PyTorch, there are `torch::` variants of factory functions,
+      58              : /// e.g., torch::zeros for at::zeros.  These return Variables (while the
+      59              : /// stock ATen functions return plain Tensors).  If you mix these functions
+      60              : /// up, you WILL BE SAD.
+      61              : ///
+      62              : /// Rather than use the constructor of this class directly, you should prefer to
+      63              : /// use the constructor functions, and then chain setter methods on top of them.
+      64              : ///
+      65              : ///     at::device(at::kCUDA).dtype(kInt)
+      66              : ///     at::dtype(at::kInt)
+      67              : ///
+      68              : /// Additionally, anywhere a TensorOptions is expected, you can directly
+      69              : /// pass at::kCUDA / at::kInt, and it will implicitly convert to a
+      70              : /// TensorOptions.
+      71              : ///
+      72              : /// Here are some recommended ways to create a 2x2 tensor of zeros
+      73              : /// with certain properties.  These all *implicitly* make use of
+      74              : /// TensorOptions, even if they don't mention the class explicitly:
+      75              : ///
+      76              : ///     at::zeros({2,2}, at::kCUDA);
+      77              : ///     at::zeros({2,2}, at::kLong);
+      78              : ///     at::zeros({2,2}, at::device(at::kCUDA).dtype(at::kLong()));
+      79              : ///     at::zeros({2,2}, at::device({at::kCUDA, 1})); // place on device 1
+      80              : ///     at::zeros({2,2}, at::requires_grad());
+      81              : ///
+      82              : 
+      83              : /// NOTE [ TensorOptions Constructors ]
+      84              : ///
+      85              : /// TensorOptions is like a dictionary with entries from the set:
+      86              : /// {requires_grad, device, dtype, layout}, where each entry may be
+      87              : /// unspecified (i.e., is optional). It is used to specify the properties of
+      88              : /// tensors in many places both in C++ internal and API, e.g., tensor factory
+      89              : /// methods like `at::empty({10}, options)`, tensor conversions like
+      90              : /// `tensor.to(...)`, etc.
+      91              : ///
+      92              : /// To provide a simple API that is consistent with Python, where one can do
+      93              : /// `torch.empty(sizes, X)` with `X` being a `torch.device`, `torch.dtype`, or a
+      94              : /// `torch.layout`, we want TensorOptions to be implicitly convertible from
+      95              : /// `ScalarType dtype`, `Layout layout` and `Device device`. Therefore, we have
+      96              : /// three implicit constructors from each of these three types.
+      97              : ///
+      98              : /// This is sufficient for `ScalarType` and `Layout` as they are simple Enum
+      99              : /// classes. However, `Device` is an ordinary class with implicit constructors
+     100              : /// `Device(DeviceType, DeviceIndex = -1)` and `Device(std::string)` to be
+     101              : /// consistent with Python API, where strings are treated as equivalent with a
+     102              : /// `torch.device` object (e.g., "cuda:1" can be passed to everywhere a
+     103              : /// `torch.device("cuda:1")` is accepted). To support the syntax
+     104              : /// `at::empty({10}, {kCUDA, 1})` and `tensor.to(kCUDA)`, we need to make sure
+     105              : /// that `TensorOptions` is implicitly constructible with any arguments that a
+     106              : /// `Device` can constructed from. So we have,
+     107              : ///
+     108              : ///    /* implicit */ TensorOptions(T&& device) : TensorOptions() {
+     109              : ///      this->set_device(device);
+     110              : ///    }
+     111              : ///
+     112              : ///    template <typename... Args,
+     113              : ///             typename = std::enable_if_t<std::is_constructible<Device,
+     114              : ///             Args&&...>::value>>
+     115              : ///    /* implicit */  TensorOptions(Args&&... args)
+     116              : ///     : TensorOptions(Device(std::forward<Args>(args)...)) {}
+     117              : ///
+     118              : ///
+     119              : /// But this will be problematic. Consider this: `TensorOptions({kCUDA, 1})`.
+     120              : /// Compiler will complain about ambiguity between the copy constructor and the
+     121              : /// `Device` constructor because `{kCUDA, 1}` can be converted to both a
+     122              : /// `TensorOption` and a `Device`.
+     123              : ///
+     124              : /// To get around this, we templatize the `Device` constructor. Since overload
+     125              : /// resolution is done before template resolution, our problem is solved.
+     126              : 
+     127              : DispatchKey computeDispatchKey(
+     128              :     optional<ScalarType> dtype,
+     129              :     optional<Layout> layout,
+     130              :     optional<Device> device);
+     131              : 
+     132              : struct C10_API TensorOptions {
+     133     91449130 :   TensorOptions()
+     134    182898260 :       : requires_grad_(false),
+     135     91449130 :         pinned_memory_(false),
+     136     91449130 :         has_device_(false),
+     137     91449130 :         has_dtype_(false),
+     138     91449130 :         has_layout_(false),
+     139     91449130 :         has_requires_grad_(false),
+     140     91449130 :         has_pinned_memory_(false),
+     141     91449130 :         has_memory_format_(false) {}
+     142              : 
+     143              :   /// Constructs a `TensorOptions` object with the given layout.
+     144              :   /* implicit */ TensorOptions(Layout layout) : TensorOptions() {
+     145              :     this->set_layout(layout);
+     146              :   }
+     147              : 
+     148              :   /// Constructs a `TensorOptions` object with the given device.
+     149              :   /// See NOTE [ TensorOptions Constructors ] on why this is templatized.
+     150              :   template <
+     151              :       typename T,
+     152              :       typename = std::enable_if_t<std::is_same<std::decay_t<T>, Device>::value>>
+     153            0 :   /* implicit */ TensorOptions(T&& device) : TensorOptions() {
+     154            0 :     this->set_device(std::forward<T>(device));
+     155            0 :   }
+     156              : 
+     157              :   /// Constructs a `TensorOptions` object from arguments allowed in `Device`
+     158              :   /// constructors.
+     159              :   ///
+     160              :   /// See NOTE [ TensorOptions Constructors ].
+     161              :   ///
+     162              :   /// NB: Ideally we only allow implicit constructors here. But there is no easy
+     163              :   ///     way to detect them. So we have this one that allows explicit
+     164              :   ///     constructors too.
+     165              :   template <
+     166              :       typename... Args,
+     167              :       typename =
+     168              :           std::enable_if_t<std::is_constructible<Device, Args&&...>::value>>
+     169              :   /* implicit */ TensorOptions(Args&&... args)
+     170              :       : TensorOptions(Device(std::forward<Args>(args)...)) {}
+     171              : 
+     172              :   /// Constructs a `TensorOptions` object with the given dtype.
+     173              :   /* implicit */ TensorOptions(caffe2::TypeMeta dtype) : TensorOptions() {
+     174              :     this->set_dtype(dtype);
+     175              :   }
+     176              : 
+     177              :   /// legacy constructor to support ScalarType
+     178       395952 :   /* implicit */ TensorOptions(ScalarType dtype) : TensorOptions() {
+     179       395952 :     this->set_dtype(dtype);
+     180       395952 :   }
+     181              : 
+     182              :   /// Constructs a `TensorOptions` object with the given memory format.
+     183              :   /* implicit */ TensorOptions(MemoryFormat memory_format) : TensorOptions() {
+     184              :     set_memory_format(memory_format);
+     185              :   }
+     186              : 
+     187              :   /// Return a copy of `TensorOptions` with `device` set to the given one, or
+     188              :   /// cleared if `device` is `nullopt`.
+     189              :   C10_NODISCARD TensorOptions
+     190       401318 :   device(c10::optional<Device> device) const noexcept {
+     191       401318 :     TensorOptions r = *this;
+     192       401318 :     r.set_device(device);
+     193       401318 :     return r;
+     194              :   }
+     195              : 
+     196              :   /// Return a copy of `TensorOptions` with `device` set to the given one.
+     197              :   /// (This overload ensures that variadic template c10::optional constructor
+     198              :   /// for Device work correctly.)
+     199              :   template <typename... Args>
+     200       401318 :   C10_NODISCARD TensorOptions device(Args&&... args) const noexcept {
+     201       802636 :     return device(
+     202       401318 :         c10::optional<Device>(c10::in_place, std::forward<Args>(args)...));
+     203              :   }
+     204              : 
+     205              :   /// Return a copy of `TensorOptions`, but with device set to CUDA, and the
+     206              :   /// device index set to the given one.
+     207              :   ///
+     208              :   /// TODO: This function encourages bad behavior (assuming CUDA is
+     209              :   /// the only device that matters).  Get rid of it / rename it.
+     210              :   C10_NODISCARD TensorOptions
+     211              :   device_index(c10::DeviceIndex device_index) const noexcept {
+     212              :     return device(Device::Type::CUDA, device_index);
+     213              :   }
+     214              : 
+     215              :   /// Return a copy of `TensorOptions` with `dtype` set to the given one.
+     216              :   C10_NODISCARD TensorOptions
+     217     91030286 :   dtype(c10::optional<caffe2::TypeMeta> dtype) const noexcept {
+     218     91030286 :     TensorOptions r = *this;
+     219     91030286 :     r.set_dtype(dtype);
+     220     91030286 :     return r;
+     221              :   }
+     222              : 
+     223              :   // legacy function to support ScalarType
+     224              :   C10_NODISCARD TensorOptions
+     225        22824 :   dtype(c10::optional<ScalarType> dtype) const noexcept {
+     226        22824 :     TensorOptions r = *this;
+     227        22824 :     r.set_dtype(dtype);
+     228        22824 :     return r;
+     229              :   }
+     230              : 
+     231              :   // Since dtype is taken...
+     232              :   template <typename T>
+     233              :   TensorOptions& dtype() {
+     234              :     dtype_ = caffe2::TypeMeta::Make<T>();
+     235              :     has_dtype_ = true;
+     236              :     return *this;
+     237              :   }
+     238              : 
+     239              :   /// Sets the layout of the `TensorOptions`.
+     240              :   C10_NODISCARD TensorOptions
+     241              :   layout(c10::optional<Layout> layout) const noexcept {
+     242              :     TensorOptions r = *this;
+     243              :     r.set_layout(layout);
+     244              :     return r;
+     245              :   }
+     246              : 
+     247              :   /// Sets the `requires_grad` property of the `TensorOptions`.
+     248              :   C10_NODISCARD TensorOptions
+     249       418844 :   requires_grad(c10::optional<bool> requires_grad) const noexcept {
+     250       418844 :     TensorOptions r = *this;
+     251       418844 :     r.set_requires_grad(requires_grad);
+     252       418844 :     return r;
+     253              :   }
+     254              : 
+     255              :   /// Sets the `pinned_memory` property on the `TensorOptions`.
+     256              :   C10_NODISCARD TensorOptions
+     257              :   pinned_memory(c10::optional<bool> pinned_memory) const noexcept {
+     258              :     TensorOptions r = *this;
+     259              :     r.set_pinned_memory(pinned_memory);
+     260              :     return r;
+     261              :   }
+     262              : 
+     263              :   /// Sets the `memory_format` property on `TensorOptions`.
+     264              :   C10_NODISCARD TensorOptions
+     265              :   memory_format(c10::optional<MemoryFormat> memory_format) const noexcept {
+     266              :     TensorOptions r = *this;
+     267              :     r.set_memory_format(memory_format);
+     268              :     return r;
+     269              :   }
+     270              : 
+     271              :   /// Returns the device of the `TensorOptions`.
+     272            0 :   Device device() const noexcept {
+     273            0 :     return device_or_default(device_opt());
+     274              :   }
+     275              : 
+     276              :   /// Returns whether the device is specified.
+     277              :   bool has_device() const noexcept {
+     278              :     return has_device_;
+     279              :   }
+     280              : 
+     281              :   /// Returns the device of the `TensorOptions`, or `c10::nullopt` if
+     282              :   /// device is not specified.
+     283       418844 :   c10::optional<Device> device_opt() const noexcept {
+     284       418844 :     return has_device_ ? c10::make_optional(device_) : c10::nullopt;
+     285              :   }
+     286              : 
+     287              :   /// Returns the device index of the `TensorOptions`.
+     288              :   int32_t device_index() const noexcept {
+     289              :     return device().index();
+     290              :   }
+     291              : 
+     292              :   /// Returns the dtype of the `TensorOptions`.
+     293              :   caffe2::TypeMeta dtype() const noexcept {
+     294              :     return dtype_or_default(dtype_opt());
+     295              :   }
+     296              : 
+     297              :   /// Returns whether the dtype is specified.
+     298       401318 :   bool has_dtype() const noexcept {
+     299       401318 :     return has_dtype_;
+     300              :   }
+     301              : 
+     302              :   /// Returns the dtype of the `TensorOptions`, or `c10::nullopt` if
+     303              :   /// device is not specified.
+     304       418844 :   c10::optional<caffe2::TypeMeta> dtype_opt() const noexcept {
+     305       418844 :     return has_dtype_ ? c10::make_optional(dtype_) : c10::nullopt;
+     306              :   }
+     307              : 
+     308              :   /// Returns the layout of the `TensorOptions`.
+     309              :   Layout layout() const noexcept {
+     310              :     return layout_or_default(layout_opt());
+     311              :   }
+     312              : 
+     313              :   /// Returns whether the layout is specified.
+     314              :   bool has_layout() const noexcept {
+     315              :     return has_layout_;
+     316              :   }
+     317              : 
+     318              :   /// Returns the layout of the `TensorOptions`, or `c10::nullopt` if
+     319              :   /// layout is not specified.
+     320       418844 :   c10::optional<Layout> layout_opt() const noexcept {
+     321       418844 :     return has_layout_ ? c10::make_optional(layout_) : c10::nullopt;
+     322              :   }
+     323              : 
+     324              :   /// Returns the `requires_grad` property of the `TensorOptions`.
+     325       418844 :   bool requires_grad() const noexcept {
+     326       418844 :     return has_requires_grad_ ? requires_grad_ : false;
+     327              :   }
+     328              : 
+     329              :   /// Returns whether the `requires_grad` is specified.
+     330              :   bool has_requires_grad() const noexcept {
+     331              :     return has_requires_grad_;
+     332              :   }
+     333              : 
+     334              :   /// Returns the `requires_grad` property of the `TensorOptions`, or
+     335              :   /// `c10::nullopt` if `requires_grad` is not specified.
+     336       401402 :   c10::optional<bool> requires_grad_opt() const noexcept {
+     337       802804 :     return has_requires_grad_ ? c10::make_optional(requires_grad_)
+     338       401402 :                               : c10::nullopt;
+     339              :   }
+     340              : 
+     341              :   /// Returns the `pinned_memory` property of the `TensorOptions`.
+     342              :   bool pinned_memory() const noexcept {
+     343              :     return pinned_memory_or_default(pinned_memory_opt());
+     344              :   }
+     345              : 
+     346              :   /// Returns whether the `pinned_memory` is specified.
+     347              :   bool has_pinned_memory() const noexcept {
+     348              :     return has_pinned_memory_;
+     349              :   }
+     350              : 
+     351              :   /// Returns if the layout is sparse
+     352              :   bool is_sparse() const {
+     353              :     return layout_ == c10::Layout::Sparse;
+     354              :   }
+     355              : 
+     356              :   bool is_sparse_csr() const {
+     357              :     return layout_ == c10::Layout::SparseCsr;
+     358              :   }
+     359              : 
+     360              :   // For compatibility with legacy tensor.type() comparisons
+     361              :   bool type_equal(const TensorOptions& other) const {
+     362              :     return computeDispatchKey() == other.computeDispatchKey() &&
+     363              :         typeMetaToScalarType(dtype_) == typeMetaToScalarType(other.dtype());
+     364              :   }
+     365              : 
+     366              :   /// Returns the `pinned_memory` property of the `TensorOptions`, or
+     367              :   /// `c10::nullopt` if `pinned_memory` is not specified.
+     368       418844 :   c10::optional<bool> pinned_memory_opt() const noexcept {
+     369       837688 :     return has_pinned_memory_ ? c10::make_optional(pinned_memory_)
+     370       418844 :                               : c10::nullopt;
+     371              :   }
+     372              : 
+     373              :   /// Returns whether the `memory_layout` is specified
+     374       401402 :   bool has_memory_format() const noexcept {
+     375       401402 :     return has_memory_format_;
+     376              :   }
+     377              : 
+     378              :   // NB: memory_format() getter is PURPOSELY not defined, as the default
+     379              :   // behavior of memory_format varies from function to function.
+     380              : 
+     381              :   /// Returns the `memory_layout` property of `TensorOptions, or
+     382              :   /// `c10::nullopt` if `memory_format` is not specified.
+     383       401402 :   c10::optional<MemoryFormat> memory_format_opt() const noexcept {
+     384       401402 :     return has_memory_format_ ? c10::make_optional(memory_format_)
+     385       401402 :                               : c10::nullopt;
+     386              :   }
+     387              : 
+     388              :   // Resolves the ATen backend specified by the current construction axes.
+     389              :   // TODO: Deprecate this
+     390              :   Backend backend() const {
+     391              :     return at::dispatchKeyToBackend(computeDispatchKey());
+     392              :   }
+     393              : 
+     394              :   /// Return the right-biased merge of two TensorOptions.  This has the
+     395              :   /// effect of overwriting settings from self with specified options
+     396              :   /// of options.
+     397              :   ///
+     398              :   /// NB: This merging operation does NOT respect device merges.
+     399              :   /// For example, if you device({kCUDA, 1}).merge_in(kCUDA)
+     400              :   /// you will get kCUDA in the end!  Functions like Tensor.new_empty
+     401              :   /// ensure the right device is selected anyway by way of a
+     402              :   /// device guard.
+     403              :   ///
+     404              :   TensorOptions merge_in(TensorOptions options) const noexcept {
+     405              :     TensorOptions merged = *this;
+     406              :     if (options.has_device())
+     407              :       merged.set_device(options.device_opt());
+     408              :     if (options.has_dtype())
+     409              :       merged.set_dtype(options.dtype_opt());
+     410              :     if (options.has_layout())
+     411              :       merged.set_layout(options.layout_opt());
+     412              :     // NB: requires grad is right biased; not a logical AND/OR!
+     413              :     if (options.has_requires_grad())
+     414              :       merged.set_requires_grad(options.requires_grad_opt());
+     415              :     if (options.has_pinned_memory())
+     416              :       merged.set_pinned_memory(options.pinned_memory_opt());
+     417              :     if (options.has_memory_format())
+     418              :       merged.set_memory_format(options.memory_format_opt());
+     419              :     return merged;
+     420              :   }
+     421              : 
+     422              :   // TODO remove after TensorOptions rationalization
+     423              :   TensorOptions merge_memory_format(
+     424              :       c10::optional<MemoryFormat> optional_memory_format) const noexcept {
+     425              :     TensorOptions merged = *this;
+     426              :     if (optional_memory_format.has_value()) {
+     427              :       merged.set_memory_format(*optional_memory_format);
+     428              :     }
+     429              :     return merged;
+     430              :   }
+     431              : 
+     432              :   // INVARIANT: computeDispatchKey returns only the subset of dispatch keys for
+     433              :   // which dispatchKeyToBackend is injective, if it is defined at all  (for
+     434              :   // the most part, this just means that this function never returns an
+     435              :   // Autograd key)
+     436              :   DispatchKey computeDispatchKey() const {
+     437              :     return c10::computeDispatchKey(
+     438              :         optTypeMetaToScalarType(dtype_opt()), layout_opt(), device_opt());
+     439              :   }
+     440              : 
+     441              :  private:
+     442              :   // These methods are currently private because I'm not sure if it's wise
+     443              :   // to actually publish them.  They are methods because I need them in
+     444              :   // the constructor and the functional API implementation.
+     445              :   //
+     446              :   // If you really, really need it, you can make these public, but check if you
+     447              :   // couldn't just do what you need with the functional API.  Similarly, these
+     448              :   // methods are not chainable, because if you wanted chaining, you probably
+     449              :   // want to use the functional API instead.  (It's probably OK to make
+     450              :   // these chainable, because these functions are all explicitly annotated
+     451              :   // with a ref-qualifier, the trailing &, that makes them illegal to call
+     452              :   // on temporaries.)
+     453              : 
+     454              :   /// Mutably set the device of `TensorOptions`.
+     455       401318 :   void set_device(c10::optional<Device> device) & noexcept {
+     456       401318 :     if (device) {
+     457       401318 :       device_ = *device;
+     458       401318 :       has_device_ = true;
+     459              :     } else {
+     460            0 :       has_device_ = false;
+     461              :     }
+     462       401318 :   }
+     463              : 
+     464              :   /// Mutably set the dtype of `TensorOptions`.
+     465     91030286 :   void set_dtype(c10::optional<caffe2::TypeMeta> dtype) & noexcept {
+     466     91030286 :     if (dtype) {
+     467     91030286 :       dtype_ = *dtype;
+     468     91030286 :       has_dtype_ = true;
+     469              :     } else {
+     470            0 :       has_dtype_ = false;
+     471              :     }
+     472     91030286 :   }
+     473              : 
+     474              :   // legacy function to support ScalarType
+     475       418776 :   void set_dtype(c10::optional<ScalarType> dtype) & noexcept {
+     476       418776 :     if (dtype) {
+     477       418776 :       dtype_ = scalarTypeToTypeMeta(*dtype);
+     478       418776 :       has_dtype_ = true;
+     479              :     } else {
+     480            0 :       has_dtype_ = false;
+     481              :     }
+     482       418776 :   }
+     483              : 
+     484              :   /// Mutably set the layout of `TensorOptions`.
+     485              :   void set_layout(c10::optional<Layout> layout) & noexcept {
+     486              :     if (layout) {
+     487              :       layout_ = *layout;
+     488              :       has_layout_ = true;
+     489              :     } else {
+     490              :       has_layout_ = false;
+     491              :     }
+     492              :   }
+     493              : 
+     494              :   /// Mutably set the `requires_grad` property of `TensorOptions`.
+     495       418844 :   void set_requires_grad(c10::optional<bool> requires_grad) & noexcept {
+     496       418844 :     if (requires_grad) {
+     497            0 :       requires_grad_ = *requires_grad;
+     498            0 :       has_requires_grad_ = true;
+     499              :     } else {
+     500       418844 :       has_requires_grad_ = false;
+     501              :     }
+     502       418844 :   }
+     503              : 
+     504              :   /// Mutably set the `pinned_memory` property of `TensorOptions`.
+     505              :   void set_pinned_memory(c10::optional<bool> pinned_memory) & noexcept {
+     506              :     if (pinned_memory) {
+     507              :       pinned_memory_ = *pinned_memory;
+     508              :       has_pinned_memory_ = true;
+     509              :     } else {
+     510              :       has_pinned_memory_ = false;
+     511              :     }
+     512              :   }
+     513              : 
+     514              :   /// Mutably set the `memory_Format` property of `TensorOptions`.
+     515              :   void set_memory_format(c10::optional<MemoryFormat> memory_format) & noexcept {
+     516              :     if (memory_format) {
+     517              :       memory_format_ = *memory_format;
+     518              :       has_memory_format_ = true;
+     519              :     } else {
+     520              :       has_memory_format_ = false;
+     521              :     }
+     522              :   }
+     523              : 
+     524              :   // WARNING: If you edit TensorOptions to add more options, you
+     525              :   // may need to adjust the implementation of Tensor::options.
+     526              :   // The criteria for whether or not Tensor::options must be adjusted
+     527              :   // is whether or not the new option you added should preserved
+     528              :   // by functions such as empty_like(); if it should be preserved,
+     529              :   // you must adjust options().
+     530              :   //
+     531              :   // TODO: MemoryFormat is not implemented in this way
+     532              : 
+     533              :   // NB: We didn't use c10::optional here, because then we can't pack
+     534              :   // the has_***_ boolean fields.
+     535              : 
+     536              :   Device device_ = at::kCPU; // 16-bit
+     537              :   caffe2::TypeMeta dtype_ = caffe2::TypeMeta::Make<float>(); // 16-bit
+     538              :   Layout layout_ = at::kStrided; // 8-bit
+     539              :   MemoryFormat memory_format_ = MemoryFormat::Contiguous; // 8-bit
+     540              : 
+     541              :   // Bitmask required here to get this to fit inside 32 bits (or even 64 bits,
+     542              :   // for that matter)
+     543              : 
+     544              :   bool requires_grad_ : 1;
+     545              :   bool pinned_memory_ : 1;
+     546              : 
+     547              :   bool has_device_ : 1;
+     548              :   bool has_dtype_ : 1;
+     549              :   bool has_layout_ : 1;
+     550              :   bool has_requires_grad_ : 1;
+     551              :   bool has_pinned_memory_ : 1;
+     552              :   bool has_memory_format_ : 1;
+     553              : };
+     554              : 
+     555              : // We should aspire to fit in one machine-size word; but a size greater than two
+     556              : // words is too much.  (We are doing terribly on 32-bit archs, where we require
+     557              : // three machine size words to store tensor options.  Eek!)
+     558              : static_assert(
+     559              :     sizeof(TensorOptions) <= sizeof(int64_t) * 2,
+     560              :     "TensorOptions must fit in 128-bits");
+     561              : 
+     562              : /// Convenience function that returns a `TensorOptions` object with the `dtype`
+     563              : /// set to the given one.
+     564              : inline TensorOptions dtype(caffe2::TypeMeta dtype) {
+     565              :   return TensorOptions().dtype(dtype);
+     566              : }
+     567              : 
+     568              : // legacy function to support ScalarType
+     569     91030286 : inline TensorOptions dtype(ScalarType dtype) {
+     570     91030286 :   return TensorOptions().dtype(scalarTypeToTypeMeta(dtype));
+     571              : }
+     572              : 
+     573              : /// Convenience function that returns a `TensorOptions` object with the `layout`
+     574              : /// set to the given one.
+     575              : inline TensorOptions layout(Layout layout) {
+     576              :   return TensorOptions().layout(layout);
+     577              : }
+     578              : 
+     579              : /// Convenience function that returns a `TensorOptions` object with the `device`
+     580              : /// set to the given one.
+     581              : inline TensorOptions device(Device device) {
+     582              :   return TensorOptions().device(device);
+     583              : }
+     584              : 
+     585              : /// Convenience function that returns a `TensorOptions` object with the
+     586              : /// `device` set to CUDA and the `device_index` set to the given one.
+     587              : inline TensorOptions device_index(int16_t device_index) {
+     588              :   return TensorOptions().device_index(
+     589              :       static_cast<c10::DeviceIndex>(device_index));
+     590              : }
+     591              : 
+     592              : /// Convenience function that returns a `TensorOptions` object with the
+     593              : /// `requires_grad` set to the given one.
+     594              : inline TensorOptions requires_grad(bool requires_grad = true) {
+     595              :   return TensorOptions().requires_grad(requires_grad);
+     596              : }
+     597              : 
+     598              : /// Convenience function that returns a `TensorOptions` object with the
+     599              : /// `memory_format` set to the given one.
+     600              : inline TensorOptions memory_format(MemoryFormat memory_format) {
+     601              :   return TensorOptions().memory_format(memory_format);
+     602              : }
+     603              : 
+     604              : C10_API std::ostream& operator<<(
+     605              :     std::ostream& stream,
+     606              :     const TensorOptions& options);
+     607              : 
+     608              : template <typename T>
+     609              : inline TensorOptions dtype() {
+     610              :   return dtype(caffe2::TypeMeta::Make<T>());
+     611              : }
+     612              : 
+     613              : inline std::string toString(const TensorOptions& options) {
+     614              :   std::ostringstream stream;
+     615              :   stream << options;
+     616              :   return stream.str();
+     617              : }
+     618              : 
+     619              : // This is intended to be a centralized location by which we can determine
+     620              : // what an appropriate DispatchKey for a tensor is.
+     621              : inline DispatchKey computeDispatchKey(
+     622              :     c10::optional<ScalarType> dtype,
+     623              :     c10::optional<Layout> layout,
+     624              :     c10::optional<Device> device) {
+     625              :   const auto layout_ = layout_or_default(layout);
+     626              :   const auto device_ = device_or_default(device);
+     627              :   switch (layout_) {
+     628              :     case Layout::Strided: {
+     629              :       const auto dtype_ = dtype_or_default(dtype);
+     630              :       switch (device_.type()) {
+     631              : #define DO_CASE(device, _)                   \
+     632              :   case c10::DeviceType::device: {            \
+     633              :     if (isQIntType(dtype_)) {                \
+     634              :       return DispatchKey::Quantized##device; \
+     635              :     }                                        \
+     636              :     return DispatchKey::device;              \
+     637              :   }
+     638              :         C10_FORALL_BACKEND_DEVICE_TYPES(DO_CASE, unused)
+     639              : #undef DO_CASE
+     640              :         case c10::DeviceType::FPGA:
+     641              :           return DispatchKey::FPGA;
+     642              :         case c10::DeviceType::ORT:
+     643              :           return DispatchKey::ORT;
+     644              :         case c10::DeviceType::Vulkan:
+     645              :           return DispatchKey::Vulkan;
+     646              :         case c10::DeviceType::Metal:
+     647              :           return DispatchKey::Metal;
+     648              :         case c10::DeviceType::MKLDNN:
+     649              :         case c10::DeviceType::OPENGL:
+     650              :         case c10::DeviceType::OPENCL:
+     651              :         case c10::DeviceType::IDEEP:
+     652              :           TORCH_INTERNAL_ASSERT(
+     653              :               0,
+     654              :               "This is a grandfathered Caffe2 device type ",
+     655              :               device_.type(),
+     656              :               ", it shouldn't ever convert to a DispatchKey.  File a bug describing what you were doing if you think this is in error.");
+     657              :         default:
+     658              :           TORCH_CHECK_NOT_IMPLEMENTED(
+     659              :               false,
+     660              :               "Unsupported device type for dense layout: ",
+     661              :               device_.type());
+     662              :       }
+     663              :     }
+     664              :     case Layout::Sparse:
+     665              :       switch (device_.type()) {
+     666              : #define DO_CASE(device, _)              \
+     667              :   case c10::DeviceType::device: {       \
+     668              :     return DispatchKey::Sparse##device; \
+     669              :   }
+     670              :         C10_FORALL_BACKEND_DEVICE_TYPES(DO_CASE, unused)
+     671              : #undef DO_CASE
+     672              :         default:
+     673              :           TORCH_CHECK_NOT_IMPLEMENTED(
+     674              :               false,
+     675              :               "Unsupported device type for sparse layout: ",
+     676              :               device_.type());
+     677              :       }
+     678              :     case Layout::Mkldnn:
+     679              :       switch (device_.type()) {
+     680              :         case c10::DeviceType::CPU:
+     681              :           return DispatchKey::MkldnnCPU;
+     682              :         default:
+     683              :           TORCH_CHECK_NOT_IMPLEMENTED(
+     684              :               false,
+     685              :               "Unsupported device type for mkldnn layout: ",
+     686              :               device_.type());
+     687              :       }
+     688              :     case Layout::SparseCsr:
+     689              :     case Layout::SparseCsc:
+     690              :     case Layout::SparseBsr:
+     691              :     case Layout::SparseBsc:
+     692              :       switch (device_.type()) {
+     693              :         case c10::DeviceType::CPU:
+     694              :           return DispatchKey::SparseCsrCPU;
+     695              :         case c10::DeviceType::CUDA:
+     696              :           return DispatchKey::SparseCsrCUDA;
+     697              :         default:
+     698              :           AT_ERROR(
+     699              :               "Unsupported device type for ",
+     700              :               layout_,
+     701              :               " layout: ",
+     702              :               device_.type());
+     703              :       }
+     704              :     default:
+     705              :       TORCH_CHECK(false, "Unsupported layout: ", layout_);
+     706              :   }
+     707              : }
+     708              : 
+     709              : inline Layout dispatchKeyToLayout(DispatchKey dispatch_key) {
+     710              :   switch (dispatch_key) {
+     711              : #define DO_CASE(bc, _) case DispatchKey::Sparse##bc:
+     712              :     C10_FORALL_BACKEND_COMPONENTS(DO_CASE, unused)
+     713              : #undef DO_CASE
+     714              :     return Layout::Sparse;
+     715              :     case DispatchKey::SparseCsrCPU:
+     716              :     case DispatchKey::SparseCsrCUDA:
+     717              :       TORCH_CHECK(
+     718              :           false,
+     719              :           "Cannot map DispatchKey ",
+     720              :           dispatch_key,
+     721              :           " to a unique layout.");
+     722              :     case DispatchKey::MkldnnCPU:
+     723              :       return Layout::Mkldnn;
+     724              :     default:
+     725              :       return Layout::Strided;
+     726              :   }
+     727              : }
+     728              : 
+     729              : inline c10::DeviceType dispatchKeyToDeviceType(DispatchKey dispatch_key) {
+     730              :   switch (dispatch_key) {
+     731              :     // stuff that's real
+     732              : #define DO_CASE(suffix, prefix)     \
+     733              :   case DispatchKey::prefix##suffix: \
+     734              :     return c10::DeviceType::suffix;
+     735              : #define DO_CASES(_, prefix) C10_FORALL_BACKEND_DEVICE_TYPES(DO_CASE, prefix)
+     736              :     C10_FORALL_FUNCTIONALITY_KEYS(DO_CASES)
+     737              : #undef DO_CASES
+     738              : #undef DO_CASE
+     739              : 
+     740              :     case DispatchKey::MkldnnCPU:
+     741              :       return c10::DeviceType::CPU;
+     742              :     case DispatchKey::Vulkan:
+     743              :       return c10::DeviceType::Vulkan;
+     744              : 
+     745              :     case DispatchKey::ORT:
+     746              :       return c10::DeviceType::ORT;
+     747              :     default:
+     748              :       TORCH_CHECK(
+     749              :           false,
+     750              :           "DispatchKey ",
+     751              :           dispatch_key,
+     752              :           " doesn't correspond to a device");
+     753              :   }
+     754              : }
+     755              : 
+     756              : inline TensorOptions dispatchKeyToTensorOptions(DispatchKey dispatch_key) {
+     757              :   return TensorOptions()
+     758              :       .layout(dispatchKeyToLayout(dispatch_key))
+     759              :       .device(dispatchKeyToDeviceType(dispatch_key));
+     760              : }
+     761              : 
+     762              : namespace detail {
+     763              : inline bool backend_supports_empty_operator(const TensorOptions& options) {
+     764              :   // Quantized backends don't support at::empty().
+     765              :   // They have separate operators like at::empty_quantized() that take in
+     766              :   // extra information about how to quantize the tensor.
+     767              :   return !isQIntType(typeMetaToScalarType(options.dtype()));
+     768              : }
+     769              : 
+     770              : } // namespace detail
+     771              : 
+     772              : } // namespace c10
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/UndefinedTensorImpl.h.func-c.html b/html/libtorch/include/c10/core/UndefinedTensorImpl.h.func-c.html new file mode 100644 index 0000000..1837afe --- /dev/null +++ b/html/libtorch/include/c10/core/UndefinedTensorImpl.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/UndefinedTensorImpl.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - UndefinedTensorImpl.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1019UndefinedTensorImpl9singletonEv1515278852
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/UndefinedTensorImpl.h.func.html b/html/libtorch/include/c10/core/UndefinedTensorImpl.h.func.html new file mode 100644 index 0000000..443cdc8 --- /dev/null +++ b/html/libtorch/include/c10/core/UndefinedTensorImpl.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/UndefinedTensorImpl.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - UndefinedTensorImpl.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1019UndefinedTensorImpl9singletonEv1515278852
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/UndefinedTensorImpl.h.gcov.html b/html/libtorch/include/c10/core/UndefinedTensorImpl.h.gcov.html new file mode 100644 index 0000000..096fd61 --- /dev/null +++ b/html/libtorch/include/c10/core/UndefinedTensorImpl.h.gcov.html @@ -0,0 +1,113 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/UndefinedTensorImpl.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - UndefinedTensorImpl.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <c10/core/TensorImpl.h>
+       4              : 
+       5              : namespace c10 {
+       6              : 
+       7              : struct C10_API UndefinedTensorImpl final : public TensorImpl {
+       8              :  public:
+       9              :   // Without this, we get:
+      10              :   //  error: identifier "at::UndefinedTensorImpl::_singleton" is undefined in
+      11              :   //  device code
+      12              :   // (ostensibly because the constexpr tricks MSVC into trying to compile this
+      13              :   // function for device as well).
+      14              : #ifdef _WIN32
+      15              :   static inline TensorImpl* singleton() {
+      16              : #else
+      17   1515278852 :   static constexpr inline TensorImpl* singleton() {
+      18              : #endif
+      19   1515278852 :     return &_singleton;
+      20              :   }
+      21              : #ifdef DEBUG
+      22              :   bool has_storage() const override;
+      23              : #endif
+      24              :   void set_storage_offset(int64_t offset) override;
+      25              : 
+      26              :  protected:
+      27              :   bool is_contiguous_custom(MemoryFormat format) const override;
+      28              :   IntArrayRef strides_custom() const override;
+      29              :   SymIntArrayRef sym_strides_custom() const override;
+      30              : 
+      31              :  private:
+      32              :   UndefinedTensorImpl();
+      33              :   static UndefinedTensorImpl _singleton;
+      34              :   const char* tensorimpl_type_name() const override;
+      35              : };
+      36              : 
+      37              : } // namespace c10
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/WrapDimMinimal.h.func-c.html b/html/libtorch/include/c10/core/WrapDimMinimal.h.func-c.html new file mode 100644 index 0000000..4341b60 --- /dev/null +++ b/html/libtorch/include/c10/core/WrapDimMinimal.h.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/WrapDimMinimal.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - WrapDimMinimal.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:66.7 %96
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1014maybe_wrap_dimEllb15310736
_ZN3c1015_maybe_wrap_dimIlEET_S1_S1_b15310736
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/WrapDimMinimal.h.func.html b/html/libtorch/include/c10/core/WrapDimMinimal.h.func.html new file mode 100644 index 0000000..a29de3a --- /dev/null +++ b/html/libtorch/include/c10/core/WrapDimMinimal.h.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/WrapDimMinimal.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - WrapDimMinimal.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:66.7 %96
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1014maybe_wrap_dimEllb15310736
_ZN3c1015_maybe_wrap_dimIlEET_S1_S1_b15310736
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/WrapDimMinimal.h.gcov.html b/html/libtorch/include/c10/core/WrapDimMinimal.h.gcov.html new file mode 100644 index 0000000..b3726e9 --- /dev/null +++ b/html/libtorch/include/c10/core/WrapDimMinimal.h.gcov.html @@ -0,0 +1,120 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/WrapDimMinimal.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core - WrapDimMinimal.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:66.7 %96
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <c10/core/SymInt.h>
+       4              : 
+       5              : namespace c10 {
+       6              : 
+       7              : namespace detail {
+       8              : // This template can only be specialized at int64_t and c10::SymInt;
+       9              : // you'll get linker errors otherwise
+      10              : template <typename T>
+      11              : C10_API T maybe_wrap_dim_slow(T dim, T dim_post_expr, bool wrap_scalar);
+      12              : } // namespace detail
+      13              : 
+      14              : template <typename T>
+      15     15310736 : T _maybe_wrap_dim(T dim, T dim_post_expr, bool wrap_scalar = true) {
+      16              :   // Inline the fast paths
+      17     15310736 :   if (C10_LIKELY(dim_post_expr * -1 <= dim && dim < dim_post_expr)) {
+      18              :     // For SymInts, we want an explicit control flow to trigger a guard, so we
+      19              :     // may as well branch too.
+      20     15310736 :     if (dim < 0) {
+      21            0 :       return dim + dim_post_expr;
+      22              :     }
+      23     15310736 :     return dim;
+      24              :   }
+      25              :   // Check edge-cases out-of-line (wrapping scalars and out-of-bounds errors)
+      26            0 :   return c10::detail::maybe_wrap_dim_slow<T>(
+      27            0 :       std::move(dim), std::move(dim_post_expr), wrap_scalar);
+      28              : }
+      29              : 
+      30     15310736 : inline int64_t maybe_wrap_dim(
+      31              :     int64_t dim,
+      32              :     int64_t dim_post_expr,
+      33              :     bool wrap_scalar = true) {
+      34     15310736 :   return _maybe_wrap_dim(dim, dim_post_expr, wrap_scalar);
+      35              : }
+      36              : 
+      37              : inline c10::SymInt maybe_wrap_dim(
+      38              :     c10::SymInt dim,
+      39              :     c10::SymInt dim_post_expr,
+      40              :     bool wrap_scalar = true) {
+      41              :   return _maybe_wrap_dim(std::move(dim), std::move(dim_post_expr), wrap_scalar);
+      42              : }
+      43              : 
+      44              : } // namespace c10
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/impl/SizesAndStrides.h.func-c.html b/html/libtorch/include/c10/core/impl/SizesAndStrides.h.func-c.html new file mode 100644 index 0000000..4c9e1fc --- /dev/null +++ b/html/libtorch/include/c10/core/impl/SizesAndStrides.h.func-c.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/impl/SizesAndStrides.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core/impl - SizesAndStrides.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:88.9 %1816
Test Date:2024-04-30 13:17:26Functions:100.0 %77
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK3c104impl15SizesAndStrides12strides_dataEv80
_ZNK3c104impl15SizesAndStrides16strides_arrayrefEv80
_ZNK3c104impl15SizesAndStrides14sizes_arrayrefEv88706
_ZNK3c104impl15SizesAndStrides17size_at_uncheckedEm15310736
_ZNK3c104impl15SizesAndStrides10sizes_dataEv15399442
_ZNK3c104impl15SizesAndStrides8isInlineEv15399522
_ZNK3c104impl15SizesAndStrides4sizeEv15406674
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/impl/SizesAndStrides.h.func.html b/html/libtorch/include/c10/core/impl/SizesAndStrides.h.func.html new file mode 100644 index 0000000..1514065 --- /dev/null +++ b/html/libtorch/include/c10/core/impl/SizesAndStrides.h.func.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/impl/SizesAndStrides.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core/impl - SizesAndStrides.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:88.9 %1816
Test Date:2024-04-30 13:17:26Functions:100.0 %77
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK3c104impl15SizesAndStrides10sizes_dataEv15399442
_ZNK3c104impl15SizesAndStrides12strides_dataEv80
_ZNK3c104impl15SizesAndStrides14sizes_arrayrefEv88706
_ZNK3c104impl15SizesAndStrides16strides_arrayrefEv80
_ZNK3c104impl15SizesAndStrides17size_at_uncheckedEm15310736
_ZNK3c104impl15SizesAndStrides4sizeEv15406674
_ZNK3c104impl15SizesAndStrides8isInlineEv15399522
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/impl/SizesAndStrides.h.gcov.html b/html/libtorch/include/c10/core/impl/SizesAndStrides.h.gcov.html new file mode 100644 index 0000000..3a7dd5d --- /dev/null +++ b/html/libtorch/include/c10/core/impl/SizesAndStrides.h.gcov.html @@ -0,0 +1,384 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/impl/SizesAndStrides.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core/impl - SizesAndStrides.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:88.9 %1816
Test Date:2024-04-30 13:17:26Functions:100.0 %77
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <algorithm>
+       4              : #include <cstdint>
+       5              : 
+       6              : #include <c10/macros/Macros.h>
+       7              : #include <c10/util/ArrayRef.h>
+       8              : #include <c10/util/SmallVector.h>
+       9              : 
+      10              : #define C10_SIZES_AND_STRIDES_MAX_INLINE_SIZE 5
+      11              : 
+      12              : namespace c10 {
+      13              : namespace impl {
+      14              : 
+      15              : // Packed container for TensorImpl sizes and strides.
+      16              : // This design improves on the previous approach of using a pair of
+      17              : // c10::SmallVector<int64_t, 5> by specializing for the operations we
+      18              : // actually use and enforcing that the number of sizes is the same as
+      19              : // the number of strides. The memory layout is as follows:
+      20              : //
+      21              : // 1 size_t for the size
+      22              : // 5 eightbytes of inline sizes and 5 eightbytes of inline strides, OR pointer
+      23              : // to out-of-line array
+      24              : class C10_API SizesAndStrides {
+      25              :  public:
+      26              :   // TODO: different iterator types for sizes & strides to prevent
+      27              :   // mixing the two accidentally.
+      28              :   using sizes_iterator = int64_t*;
+      29              :   using sizes_const_iterator = const int64_t*;
+      30              :   using strides_iterator = int64_t*;
+      31              :   using strides_const_iterator = const int64_t*;
+      32              : 
+      33              :   SizesAndStrides() : size_(1) {
+      34              :     size_at_unchecked(0) = 0;
+      35              :     stride_at_unchecked(0) = 1;
+      36              :   }
+      37              : 
+      38              :   ~SizesAndStrides() {
+      39              :     if (C10_UNLIKELY(!isInline())) {
+      40              :       free(outOfLineStorage_);
+      41              :     }
+      42              :   }
+      43              : 
+      44              :   SizesAndStrides(const SizesAndStrides& rhs) : size_(rhs.size_) {
+      45              :     if (C10_LIKELY(rhs.isInline())) {
+      46              :       copyDataInline(rhs);
+      47              :     } else {
+      48              :       allocateOutOfLineStorage(size_);
+      49              :       copyDataOutline(rhs);
+      50              :     }
+      51              :   }
+      52              : 
+      53              :   SizesAndStrides& operator=(const SizesAndStrides& rhs) {
+      54              :     if (this == &rhs) {
+      55              :       return *this;
+      56              :     }
+      57              :     if (C10_LIKELY(rhs.isInline())) {
+      58              :       if (C10_UNLIKELY(!isInline())) {
+      59              :         free(outOfLineStorage_);
+      60              :       }
+      61              :       copyDataInline(rhs);
+      62              :     } else {
+      63              :       if (isInline()) {
+      64              :         allocateOutOfLineStorage(rhs.size_);
+      65              :       } else {
+      66              :         resizeOutOfLineStorage(rhs.size_);
+      67              :       }
+      68              :       copyDataOutline(rhs);
+      69              :     }
+      70              :     size_ = rhs.size_;
+      71              :     return *this;
+      72              :   }
+      73              : 
+      74              :   // Move from rhs. rhs.size() == 0 afterwards.
+      75              :   SizesAndStrides(SizesAndStrides&& rhs) noexcept : size_(rhs.size_) {
+      76              :     if (C10_LIKELY(isInline())) {
+      77              :       memcpy(inlineStorage_, rhs.inlineStorage_, sizeof(inlineStorage_));
+      78              :     } else {
+      79              :       outOfLineStorage_ = rhs.outOfLineStorage_;
+      80              :       rhs.outOfLineStorage_ = nullptr;
+      81              :     }
+      82              : 
+      83              :     rhs.size_ = 0;
+      84              :   }
+      85              : 
+      86              :   // Move from rhs. rhs.size() == 0 afterwards.
+      87              :   SizesAndStrides& operator=(SizesAndStrides&& rhs) noexcept {
+      88              :     if (this == &rhs) {
+      89              :       return *this;
+      90              :     }
+      91              :     if (C10_LIKELY(rhs.isInline())) {
+      92              :       if (C10_UNLIKELY(!isInline())) {
+      93              :         free(outOfLineStorage_);
+      94              :       }
+      95              :       copyDataInline(rhs);
+      96              :     } else {
+      97              :       // They're outline. We're going to steal their vector.
+      98              :       if (!isInline()) {
+      99              :         free(outOfLineStorage_);
+     100              :       }
+     101              :       outOfLineStorage_ = rhs.outOfLineStorage_;
+     102              :       rhs.outOfLineStorage_ = nullptr;
+     103              :     }
+     104              :     size_ = rhs.size_;
+     105              :     rhs.size_ = 0;
+     106              : 
+     107              :     return *this;
+     108              :   }
+     109              : 
+     110     15406674 :   size_t size() const noexcept {
+     111     15406674 :     return size_;
+     112              :   }
+     113              : 
+     114     15399442 :   const int64_t* sizes_data() const noexcept {
+     115     15399442 :     if (C10_LIKELY(isInline())) {
+     116     15399442 :       return &inlineStorage_[0];
+     117              :     } else {
+     118            0 :       return &outOfLineStorage_[0];
+     119              :     }
+     120              :   }
+     121              : 
+     122              :   int64_t* sizes_data() noexcept {
+     123              :     if (C10_LIKELY(isInline())) {
+     124              :       return &inlineStorage_[0];
+     125              :     } else {
+     126              :       return &outOfLineStorage_[0];
+     127              :     }
+     128              :   }
+     129              : 
+     130              :   sizes_const_iterator sizes_begin() const noexcept {
+     131              :     return sizes_data();
+     132              :   }
+     133              : 
+     134              :   sizes_iterator sizes_begin() noexcept {
+     135              :     return sizes_data();
+     136              :   }
+     137              : 
+     138              :   sizes_const_iterator sizes_end() const noexcept {
+     139              :     return sizes_begin() + size();
+     140              :   }
+     141              : 
+     142              :   sizes_iterator sizes_end() noexcept {
+     143              :     return sizes_begin() + size();
+     144              :   }
+     145              : 
+     146        88706 :   IntArrayRef sizes_arrayref() const noexcept {
+     147        88706 :     return IntArrayRef{sizes_data(), size()};
+     148              :   }
+     149              : 
+     150              :   void set_sizes(IntArrayRef newSizes) {
+     151              :     resize(newSizes.size());
+     152              :     std::copy(newSizes.begin(), newSizes.end(), sizes_begin());
+     153              :   }
+     154              : 
+     155              :   void set_strides(IntArrayRef strides) {
+     156              :     TORCH_INTERNAL_ASSERT(strides.size() == size());
+     157              :     std::copy(strides.begin(), strides.end(), strides_begin());
+     158              :   }
+     159              : 
+     160           80 :   const int64_t* strides_data() const noexcept {
+     161           80 :     if (C10_LIKELY(isInline())) {
+     162           80 :       return &inlineStorage_[C10_SIZES_AND_STRIDES_MAX_INLINE_SIZE];
+     163              :     } else {
+     164            0 :       return &outOfLineStorage_[size()];
+     165              :     }
+     166              :   }
+     167              : 
+     168              :   int64_t* strides_data() noexcept {
+     169              :     if (C10_LIKELY(isInline())) {
+     170              :       return &inlineStorage_[C10_SIZES_AND_STRIDES_MAX_INLINE_SIZE];
+     171              :     } else {
+     172              :       return &outOfLineStorage_[size()];
+     173              :     }
+     174              :   }
+     175              : 
+     176              :   strides_const_iterator strides_begin() const noexcept {
+     177              :     if (C10_LIKELY(isInline())) {
+     178              :       return &inlineStorage_[C10_SIZES_AND_STRIDES_MAX_INLINE_SIZE];
+     179              :     } else {
+     180              :       return &outOfLineStorage_[size()];
+     181              :     }
+     182              :   }
+     183              : 
+     184              :   strides_iterator strides_begin() noexcept {
+     185              :     if (C10_LIKELY(isInline())) {
+     186              :       return &inlineStorage_[C10_SIZES_AND_STRIDES_MAX_INLINE_SIZE];
+     187              :     } else {
+     188              :       return &outOfLineStorage_[size()];
+     189              :     }
+     190              :   }
+     191              : 
+     192              :   strides_const_iterator strides_end() const noexcept {
+     193              :     return strides_begin() + size();
+     194              :   }
+     195              : 
+     196              :   strides_iterator strides_end() noexcept {
+     197              :     return strides_begin() + size();
+     198              :   }
+     199              : 
+     200           80 :   IntArrayRef strides_arrayref() const noexcept {
+     201           80 :     return IntArrayRef{strides_data(), size()};
+     202              :   }
+     203              : 
+     204              :   // Size accessors.
+     205              :   int64_t size_at(size_t idx) const noexcept {
+     206              :     assert(idx < size());
+     207              :     return sizes_data()[idx];
+     208              :   }
+     209              : 
+     210              :   int64_t& size_at(size_t idx) noexcept {
+     211              :     assert(idx < size());
+     212              :     return sizes_data()[idx];
+     213              :   }
+     214              : 
+     215     15310736 :   int64_t size_at_unchecked(size_t idx) const noexcept {
+     216     15310736 :     return sizes_data()[idx];
+     217              :   }
+     218              : 
+     219              :   int64_t& size_at_unchecked(size_t idx) noexcept {
+     220              :     return sizes_data()[idx];
+     221              :   }
+     222              : 
+     223              :   // Size accessors.
+     224              :   int64_t stride_at(size_t idx) const noexcept {
+     225              :     assert(idx < size());
+     226              :     return strides_data()[idx];
+     227              :   }
+     228              : 
+     229              :   int64_t& stride_at(size_t idx) noexcept {
+     230              :     assert(idx < size());
+     231              :     return strides_data()[idx];
+     232              :   }
+     233              : 
+     234              :   int64_t stride_at_unchecked(size_t idx) const noexcept {
+     235              :     return strides_data()[idx];
+     236              :   }
+     237              : 
+     238              :   int64_t& stride_at_unchecked(size_t idx) noexcept {
+     239              :     return strides_data()[idx];
+     240              :   }
+     241              : 
+     242              :   void resize(size_t newSize) {
+     243              :     const auto oldSize = size();
+     244              :     if (newSize == oldSize) {
+     245              :       return;
+     246              :     }
+     247              :     if (C10_LIKELY(
+     248              :             newSize <= C10_SIZES_AND_STRIDES_MAX_INLINE_SIZE && isInline())) {
+     249              :       if (oldSize < newSize) {
+     250              :         const auto bytesToZero =
+     251              :             (newSize - oldSize) * sizeof(inlineStorage_[0]);
+     252              :         memset(&inlineStorage_[oldSize], 0, bytesToZero);
+     253              :         memset(
+     254              :             &inlineStorage_[C10_SIZES_AND_STRIDES_MAX_INLINE_SIZE + oldSize],
+     255              :             0,
+     256              :             bytesToZero);
+     257              :       }
+     258              :       size_ = newSize;
+     259              :     } else {
+     260              :       resizeSlowPath(newSize, oldSize);
+     261              :     }
+     262              :   }
+     263              : 
+     264              :   void resizeSlowPath(size_t newSize, size_t oldSize);
+     265              : 
+     266              :  private:
+     267     15399522 :   bool isInline() const noexcept {
+     268     15399522 :     return size_ <= C10_SIZES_AND_STRIDES_MAX_INLINE_SIZE;
+     269              :   }
+     270              : 
+     271              :   void copyDataInline(const SizesAndStrides& rhs) {
+     272              :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(rhs.isInline());
+     273              :     memcpy(inlineStorage_, rhs.inlineStorage_, sizeof(inlineStorage_));
+     274              :   }
+     275              : 
+     276              :   static size_t storageBytes(size_t size) noexcept {
+     277              :     return size * 2 * sizeof(int64_t);
+     278              :   }
+     279              : 
+     280              :   void allocateOutOfLineStorage(size_t size) {
+     281              :     outOfLineStorage_ = static_cast<int64_t*>(malloc(storageBytes(size)));
+     282              :     TORCH_CHECK(
+     283              :         outOfLineStorage_,
+     284              :         "Could not allocate memory for Tensor SizesAndStrides!");
+     285              :   }
+     286              : 
+     287              :   void resizeOutOfLineStorage(size_t newSize) {
+     288              :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(!isInline());
+     289              :     outOfLineStorage_ = static_cast<int64_t*>(
+     290              :         realloc(outOfLineStorage_, storageBytes(newSize)));
+     291              :     TORCH_CHECK(
+     292              :         outOfLineStorage_,
+     293              :         "Could not allocate memory for Tensor SizesAndStrides!");
+     294              :   }
+     295              : 
+     296              :   void copyDataOutline(const SizesAndStrides& rhs) noexcept {
+     297              :     memcpy(outOfLineStorage_, rhs.outOfLineStorage_, storageBytes(rhs.size_));
+     298              :   }
+     299              : 
+     300              :   size_t size_;
+     301              :   union {
+     302              :     int64_t* outOfLineStorage_;
+     303              :     int64_t inlineStorage_[C10_SIZES_AND_STRIDES_MAX_INLINE_SIZE * 2]{};
+     304              :   };
+     305              : };
+     306              : 
+     307              : } // namespace impl
+     308              : } // namespace c10
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/impl/index-sort-f.html b/html/libtorch/include/c10/core/impl/index-sort-f.html new file mode 100644 index 0000000..5b3de2a --- /dev/null +++ b/html/libtorch/include/c10/core/impl/index-sort-f.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/impl + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core/implCoverageTotalHit
Test:coverage.infoLines:88.9 %1816
Test Date:2024-04-30 13:17:26Functions:100.0 %77
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
SizesAndStrides.h +
88.9%88.9%
+
88.9 %1816100.0 %77
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/impl/index-sort-l.html b/html/libtorch/include/c10/core/impl/index-sort-l.html new file mode 100644 index 0000000..042c2f0 --- /dev/null +++ b/html/libtorch/include/c10/core/impl/index-sort-l.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/impl + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core/implCoverageTotalHit
Test:coverage.infoLines:88.9 %1816
Test Date:2024-04-30 13:17:26Functions:100.0 %77
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
SizesAndStrides.h +
88.9%88.9%
+
88.9 %1816100.0 %77
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/impl/index.html b/html/libtorch/include/c10/core/impl/index.html new file mode 100644 index 0000000..f9bc65e --- /dev/null +++ b/html/libtorch/include/c10/core/impl/index.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core/impl + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/core/implCoverageTotalHit
Test:coverage.infoLines:88.9 %1816
Test Date:2024-04-30 13:17:26Functions:100.0 %77
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
SizesAndStrides.h +
88.9%88.9%
+
88.9 %1816100.0 %77
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/index-sort-f.html b/html/libtorch/include/c10/core/index-sort-f.html new file mode 100644 index 0000000..86d682e --- /dev/null +++ b/html/libtorch/include/c10/core/index-sort-f.html @@ -0,0 +1,225 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/coreCoverageTotalHit
Test:coverage.infoLines:79.5 %229182
Test Date:2024-04-30 13:17:26Functions:85.7 %7766
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
GradMode.h +
0.0%
+
0.0 %70.0 %3
ScalarType.h +
50.0%50.0%
+
50.0 %14750.0 %42
TensorOptions.h +
85.9%85.9%
+
85.9 %857384.0 %2521
SymInt.h +
71.0%71.0%
+
71.0 %312287.5 %87
Scalar.h +
82.6%82.6%
+
82.6 %231993.3 %1514
SymIntArrayRef.h +
100.0%
+
100.0 %55100.0 %11
UndefinedTensorImpl.h +
100.0%
+
100.0 %22100.0 %11
WrapDimMinimal.h +
66.7%66.7%
+
66.7 %96100.0 %22
Device.h +
100.0%
+
100.0 %1010100.0 %33
ScalarTypeToTypeMeta.h +
100.0%
+
100.0 %88100.0 %33
TensorImpl.h +
85.7%85.7%
+
85.7 %3530100.0 %1212
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/index-sort-l.html b/html/libtorch/include/c10/core/index-sort-l.html new file mode 100644 index 0000000..1868e32 --- /dev/null +++ b/html/libtorch/include/c10/core/index-sort-l.html @@ -0,0 +1,225 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/coreCoverageTotalHit
Test:coverage.infoLines:79.5 %229182
Test Date:2024-04-30 13:17:26Functions:85.7 %7766
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
GradMode.h +
0.0%
+
0.0 %70.0 %3
ScalarType.h +
50.0%50.0%
+
50.0 %14750.0 %42
WrapDimMinimal.h +
66.7%66.7%
+
66.7 %96100.0 %22
SymInt.h +
71.0%71.0%
+
71.0 %312287.5 %87
Scalar.h +
82.6%82.6%
+
82.6 %231993.3 %1514
TensorImpl.h +
85.7%85.7%
+
85.7 %3530100.0 %1212
TensorOptions.h +
85.9%85.9%
+
85.9 %857384.0 %2521
UndefinedTensorImpl.h +
100.0%
+
100.0 %22100.0 %11
SymIntArrayRef.h +
100.0%
+
100.0 %55100.0 %11
ScalarTypeToTypeMeta.h +
100.0%
+
100.0 %88100.0 %33
Device.h +
100.0%
+
100.0 %1010100.0 %33
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/core/index.html b/html/libtorch/include/c10/core/index.html new file mode 100644 index 0000000..8c4749e --- /dev/null +++ b/html/libtorch/include/c10/core/index.html @@ -0,0 +1,225 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/core + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/coreCoverageTotalHit
Test:coverage.infoLines:79.5 %229182
Test Date:2024-04-30 13:17:26Functions:85.7 %7766
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
Device.h +
100.0%
+
100.0 %1010100.0 %33
GradMode.h +
0.0%
+
0.0 %70.0 %3
Scalar.h +
82.6%82.6%
+
82.6 %231993.3 %1514
ScalarType.h +
50.0%50.0%
+
50.0 %14750.0 %42
ScalarTypeToTypeMeta.h +
100.0%
+
100.0 %88100.0 %33
SymInt.h +
71.0%71.0%
+
71.0 %312287.5 %87
SymIntArrayRef.h +
100.0%
+
100.0 %55100.0 %11
TensorImpl.h +
85.7%85.7%
+
85.7 %3530100.0 %1212
TensorOptions.h +
85.9%85.9%
+
85.9 %857384.0 %2521
UndefinedTensorImpl.h +
100.0%
+
100.0 %22100.0 %11
WrapDimMinimal.h +
66.7%66.7%
+
66.7 %96100.0 %22
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/ArrayRef.h.func-c.html b/html/libtorch/include/c10/util/ArrayRef.h.func-c.html new file mode 100644 index 0000000..79097f2 --- /dev/null +++ b/html/libtorch/include/c10/util/ArrayRef.h.func-c.html @@ -0,0 +1,264 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/ArrayRef.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - ArrayRef.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %3535
Test Date:2024-04-30 13:17:26Functions:100.0 %2121
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c10lsIlEERSoS1_NS_8ArrayRefIT_EE36
_ZN3c108ArrayRefIlEC2ERKSt16initializer_listIlE3934
_ZN3c108ArrayRefIN2at6TensorEEC2ERKSt16initializer_listIS2_E378
_ZN3c108ArrayRefIlEC2ERKSt16initializer_listIlE3556
_ZNK3c108ArrayRefIlE3endEv17786
_ZNK3c108ArrayRefIlE5beginEv17786
_ZNK3c108ArrayRefIlE4dataEv17910
_ZNK3c108ArrayRefIlEixEm88590
_ZN3c108ArrayRefIlE26debugCheckNullptrInvariantEv106536
_ZN3c108ArrayRefINS_6SymIntEE26debugCheckNullptrInvariantEv17750
_ZN3c108ArrayRefIlE26debugCheckNullptrInvariantEv88786
_ZN3c108ArrayRefIlEC2EPKlm106536
_ZN3c108ArrayRefINS_6SymIntEEC2EPKS1_m17750
_ZN3c108ArrayRefIlEC2EPKlm88786
_ZN3c108ArrayRefIdEC2ISaIdEEERKSt6vectorIdT_E415512
_ZN3c108ArrayRefIfEC2ISaIfEEERKSt6vectorIfT_E274
_ZN3c108ArrayRefIiEC2ISaIiEEERKSt6vectorIiT_E5026
_ZN3c108ArrayRefIlEC2ISaIlEEERKSt6vectorIlT_E14194
_ZN3c108ArrayRefIdEC2ISaIdEEERKSt6vectorIdT_E396018
_ZNK3c108ArrayRefIdE4sizeEv419068
_ZNK3c108ArrayRefIfE4sizeEv274
_ZNK3c108ArrayRefIiE4sizeEv5026
_ZNK3c108ArrayRefIlE4sizeEv17750
_ZNK3c108ArrayRefIdE4sizeEv396018
_ZN3c108ArrayRefIiEC2ERKi90643162
_ZN3c108ArrayRefIlEC2ERKl14194
_ZN3c108ArrayRefIiEC2ERKi90628968
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/ArrayRef.h.func.html b/html/libtorch/include/c10/util/ArrayRef.h.func.html new file mode 100644 index 0000000..a317d4c --- /dev/null +++ b/html/libtorch/include/c10/util/ArrayRef.h.func.html @@ -0,0 +1,264 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/ArrayRef.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - ArrayRef.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %3535
Test Date:2024-04-30 13:17:26Functions:100.0 %2121
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c108ArrayRefIdEC2ISaIdEEERKSt6vectorIdT_E415512
_ZN3c108ArrayRefIdEC2ISaIdEEERKSt6vectorIdT_E396018
_ZN3c108ArrayRefIfEC2ISaIfEEERKSt6vectorIfT_E274
_ZN3c108ArrayRefIiEC2ISaIiEEERKSt6vectorIiT_E5026
_ZN3c108ArrayRefIlEC2ISaIlEEERKSt6vectorIlT_E14194
_ZN3c108ArrayRefIiEC2ERKi90643162
_ZN3c108ArrayRefIiEC2ERKi90628968
_ZN3c108ArrayRefIlEC2ERKl14194
_ZN3c108ArrayRefIlE26debugCheckNullptrInvariantEv106536
_ZN3c108ArrayRefINS_6SymIntEE26debugCheckNullptrInvariantEv17750
_ZN3c108ArrayRefIlE26debugCheckNullptrInvariantEv88786
_ZN3c108ArrayRefIlEC2EPKlm106536
_ZN3c108ArrayRefINS_6SymIntEEC2EPKS1_m17750
_ZN3c108ArrayRefIlEC2EPKlm88786
_ZN3c108ArrayRefIlEC2ERKSt16initializer_listIlE3934
_ZN3c108ArrayRefIN2at6TensorEEC2ERKSt16initializer_listIS2_E378
_ZN3c108ArrayRefIlEC2ERKSt16initializer_listIlE3556
_ZN3c10lsIlEERSoS1_NS_8ArrayRefIT_EE36
_ZNK3c108ArrayRefIdE4sizeEv419068
_ZNK3c108ArrayRefIdE4sizeEv396018
_ZNK3c108ArrayRefIfE4sizeEv274
_ZNK3c108ArrayRefIiE4sizeEv5026
_ZNK3c108ArrayRefIlE4sizeEv17750
_ZNK3c108ArrayRefIlE3endEv17786
_ZNK3c108ArrayRefIlE4dataEv17910
_ZNK3c108ArrayRefIlE5beginEv17786
_ZNK3c108ArrayRefIlEixEm88590
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/ArrayRef.h.gcov.html b/html/libtorch/include/c10/util/ArrayRef.h.gcov.html new file mode 100644 index 0000000..b90be6b --- /dev/null +++ b/html/libtorch/include/c10/util/ArrayRef.h.gcov.html @@ -0,0 +1,448 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/ArrayRef.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - ArrayRef.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %3535
Test Date:2024-04-30 13:17:26Functions:100.0 %2121
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : //===--- ArrayRef.h - Array Reference Wrapper -------------------*- C++ -*-===//
+       2              : //
+       3              : //                     The LLVM Compiler Infrastructure
+       4              : //
+       5              : // This file is distributed under the University of Illinois Open Source
+       6              : // License. See LICENSE.TXT for details.
+       7              : //
+       8              : //===----------------------------------------------------------------------===//
+       9              : 
+      10              : // ATen: modified from llvm::ArrayRef.
+      11              : // removed llvm-specific functionality
+      12              : // removed some implicit const -> non-const conversions that rely on
+      13              : // complicated std::enable_if meta-programming
+      14              : // removed a bunch of slice variants for simplicity...
+      15              : 
+      16              : #pragma once
+      17              : 
+      18              : #include <c10/util/C++17.h>
+      19              : #include <c10/util/Deprecated.h>
+      20              : #include <c10/util/Exception.h>
+      21              : #include <c10/util/SmallVector.h>
+      22              : 
+      23              : #include <array>
+      24              : #include <iterator>
+      25              : #include <vector>
+      26              : 
+      27              : namespace c10 {
+      28              : /// ArrayRef - Represent a constant reference to an array (0 or more elements
+      29              : /// consecutively in memory), i.e. a start pointer and a length.  It allows
+      30              : /// various APIs to take consecutive elements easily and conveniently.
+      31              : ///
+      32              : /// This class does not own the underlying data, it is expected to be used in
+      33              : /// situations where the data resides in some other buffer, whose lifetime
+      34              : /// extends past that of the ArrayRef. For this reason, it is not in general
+      35              : /// safe to store an ArrayRef.
+      36              : ///
+      37              : /// This is intended to be trivially copyable, so it should be passed by
+      38              : /// value.
+      39              : template <typename T>
+      40              : class ArrayRef final {
+      41              :  public:
+      42              :   using iterator = const T*;
+      43              :   using const_iterator = const T*;
+      44              :   using size_type = size_t;
+      45              :   using value_type = T;
+      46              : 
+      47              :   using reverse_iterator = std::reverse_iterator<iterator>;
+      48              : 
+      49              :  private:
+      50              :   /// The start of the array, in an external buffer.
+      51              :   const T* Data;
+      52              : 
+      53              :   /// The number of elements.
+      54              :   size_type Length;
+      55              : 
+      56       106536 :   void debugCheckNullptrInvariant() {
+      57       106536 :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+      58              :         Data != nullptr || Length == 0,
+      59              :         "created ArrayRef with nullptr and non-zero length! c10::optional relies on this being illegal");
+      60       106536 :   }
+      61              : 
+      62              :  public:
+      63              :   /// @name Constructors
+      64              :   /// @{
+      65              : 
+      66              :   /// Construct an empty ArrayRef.
+      67              :   /* implicit */ constexpr ArrayRef() : Data(nullptr), Length(0) {}
+      68              : 
+      69              :   /// Construct an ArrayRef from a single element.
+      70              :   // TODO Make this explicit
+      71     90643162 :   constexpr ArrayRef(const T& OneElt) : Data(&OneElt), Length(1) {}
+      72              : 
+      73              :   /// Construct an ArrayRef from a pointer and length.
+      74       106536 :   C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA ArrayRef(const T* data, size_t length)
+      75       106536 :       : Data(data), Length(length) {
+      76       106536 :     debugCheckNullptrInvariant();
+      77       106536 :   }
+      78              : 
+      79              :   /// Construct an ArrayRef from a range.
+      80              :   C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA ArrayRef(const T* begin, const T* end)
+      81              :       : Data(begin), Length(end - begin) {
+      82              :     debugCheckNullptrInvariant();
+      83              :   }
+      84              : 
+      85              :   /// Construct an ArrayRef from a SmallVector. This is templated in order to
+      86              :   /// avoid instantiating SmallVectorTemplateCommon<T> whenever we
+      87              :   /// copy-construct an ArrayRef.
+      88              :   template <typename U>
+      89              :   /* implicit */ ArrayRef(const SmallVectorTemplateCommon<T, U>& Vec)
+      90              :       : Data(Vec.data()), Length(Vec.size()) {
+      91              :     debugCheckNullptrInvariant();
+      92              :   }
+      93              : 
+      94              :   template <
+      95              :       typename Container,
+      96              :       typename = std::enable_if_t<std::is_same<
+      97              :           std::remove_const_t<decltype(std::declval<Container>().data())>,
+      98              :           T*>::value>>
+      99              :   /* implicit */ ArrayRef(const Container& container)
+     100              :       : Data(container.data()), Length(container.size()) {
+     101              :     debugCheckNullptrInvariant();
+     102              :   }
+     103              : 
+     104              :   /// Construct an ArrayRef from a std::vector.
+     105              :   // The enable_if stuff here makes sure that this isn't used for
+     106              :   // std::vector<bool>, because ArrayRef can't work on a std::vector<bool>
+     107              :   // bitfield.
+     108              :   template <typename A>
+     109       415512 :   /* implicit */ ArrayRef(const std::vector<T, A>& Vec)
+     110       415512 :       : Data(Vec.data()), Length(Vec.size()) {
+     111              :     static_assert(
+     112              :         !std::is_same<T, bool>::value,
+     113              :         "ArrayRef<bool> cannot be constructed from a std::vector<bool> bitfield.");
+     114       415512 :   }
+     115              : 
+     116              :   /// Construct an ArrayRef from a std::array
+     117              :   template <size_t N>
+     118              :   /* implicit */ constexpr ArrayRef(const std::array<T, N>& Arr)
+     119              :       : Data(Arr.data()), Length(N) {}
+     120              : 
+     121              :   /// Construct an ArrayRef from a C array.
+     122              :   template <size_t N>
+     123              :   /* implicit */ constexpr ArrayRef(const T (&Arr)[N]) : Data(Arr), Length(N) {}
+     124              : 
+     125              :   /// Construct an ArrayRef from a std::initializer_list.
+     126         3934 :   /* implicit */ constexpr ArrayRef(const std::initializer_list<T>& Vec)
+     127         3934 :       : Data(
+     128         3934 :             std::begin(Vec) == std::end(Vec) ? static_cast<T*>(nullptr)
+     129         3934 :                                              : std::begin(Vec)),
+     130         3934 :         Length(Vec.size()) {}
+     131              : 
+     132              :   /// @}
+     133              :   /// @name Simple Operations
+     134              :   /// @{
+     135              : 
+     136        17786 :   constexpr iterator begin() const {
+     137        17786 :     return Data;
+     138              :   }
+     139        17786 :   constexpr iterator end() const {
+     140        17786 :     return Data + Length;
+     141              :   }
+     142              : 
+     143              :   // These are actually the same as iterator, since ArrayRef only
+     144              :   // gives you const iterators.
+     145              :   constexpr const_iterator cbegin() const {
+     146              :     return Data;
+     147              :   }
+     148              :   constexpr const_iterator cend() const {
+     149              :     return Data + Length;
+     150              :   }
+     151              : 
+     152              :   constexpr reverse_iterator rbegin() const {
+     153              :     return reverse_iterator(end());
+     154              :   }
+     155              :   constexpr reverse_iterator rend() const {
+     156              :     return reverse_iterator(begin());
+     157              :   }
+     158              : 
+     159              :   /// empty - Check if the array is empty.
+     160              :   constexpr bool empty() const {
+     161              :     return Length == 0;
+     162              :   }
+     163              : 
+     164        17910 :   constexpr const T* data() const {
+     165        17910 :     return Data;
+     166              :   }
+     167              : 
+     168              :   /// size - Get the array size.
+     169       419068 :   constexpr size_t size() const {
+     170       419068 :     return Length;
+     171              :   }
+     172              : 
+     173              :   /// front - Get the first element.
+     174              :   C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA const T& front() const {
+     175              :     TORCH_CHECK(
+     176              :         !empty(), "ArrayRef: attempted to access front() of empty list");
+     177              :     return Data[0];
+     178              :   }
+     179              : 
+     180              :   /// back - Get the last element.
+     181              :   C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA const T& back() const {
+     182              :     TORCH_CHECK(!empty(), "ArrayRef: attempted to access back() of empty list");
+     183              :     return Data[Length - 1];
+     184              :   }
+     185              : 
+     186              :   /// equals - Check for element-wise equality.
+     187              :   constexpr bool equals(ArrayRef RHS) const {
+     188              :     return Length == RHS.Length && std::equal(begin(), end(), RHS.begin());
+     189              :   }
+     190              : 
+     191              :   /// slice(n, m) - Take M elements of the array starting at element N
+     192              :   C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA ArrayRef<T> slice(size_t N, size_t M)
+     193              :       const {
+     194              :     TORCH_CHECK(
+     195              :         N + M <= size(),
+     196              :         "ArrayRef: invalid slice, N = ",
+     197              :         N,
+     198              :         "; M = ",
+     199              :         M,
+     200              :         "; size = ",
+     201              :         size());
+     202              :     return ArrayRef<T>(data() + N, M);
+     203              :   }
+     204              : 
+     205              :   /// slice(n) - Chop off the first N elements of the array.
+     206              :   C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA ArrayRef<T> slice(size_t N) const {
+     207              :     TORCH_CHECK(
+     208              :         N <= size(), "ArrayRef: invalid slice, N = ", N, "; size = ", size());
+     209              :     return slice(N, size() - N);
+     210              :   }
+     211              : 
+     212              :   /// @}
+     213              :   /// @name Operator Overloads
+     214              :   /// @{
+     215        88590 :   constexpr const T& operator[](size_t Index) const {
+     216        88590 :     return Data[Index];
+     217              :   }
+     218              : 
+     219              :   /// Vector compatibility
+     220              :   C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA const T& at(size_t Index) const {
+     221              :     TORCH_CHECK(
+     222              :         Index < Length,
+     223              :         "ArrayRef: invalid index Index = ",
+     224              :         Index,
+     225              :         "; Length = ",
+     226              :         Length);
+     227              :     return Data[Index];
+     228              :   }
+     229              : 
+     230              :   /// Disallow accidental assignment from a temporary.
+     231              :   ///
+     232              :   /// The declaration here is extra complicated so that "arrayRef = {}"
+     233              :   /// continues to select the move assignment operator.
+     234              :   template <typename U>
+     235              :   typename std::enable_if<std::is_same<U, T>::value, ArrayRef<T>>::type&
+     236              :   operator=(U&& Temporary) = delete;
+     237              : 
+     238              :   /// Disallow accidental assignment from a temporary.
+     239              :   ///
+     240              :   /// The declaration here is extra complicated so that "arrayRef = {}"
+     241              :   /// continues to select the move assignment operator.
+     242              :   template <typename U>
+     243              :   typename std::enable_if<std::is_same<U, T>::value, ArrayRef<T>>::type&
+     244              :   operator=(std::initializer_list<U>) = delete;
+     245              : 
+     246              :   /// @}
+     247              :   /// @name Expensive Operations
+     248              :   /// @{
+     249              :   std::vector<T> vec() const {
+     250              :     return std::vector<T>(Data, Data + Length);
+     251              :   }
+     252              : 
+     253              :   /// @}
+     254              : };
+     255              : 
+     256              : template <typename T>
+     257           36 : std::ostream& operator<<(std::ostream& out, ArrayRef<T> list) {
+     258           36 :   int i = 0;
+     259           36 :   out << "[";
+     260          108 :   for (const auto& e : list) {
+     261           72 :     if (i++ > 0)
+     262           36 :       out << ", ";
+     263           72 :     out << e;
+     264              :   }
+     265           36 :   out << "]";
+     266           36 :   return out;
+     267              : }
+     268              : 
+     269              : /// @name ArrayRef Convenience constructors
+     270              : /// @{
+     271              : 
+     272              : /// Construct an ArrayRef from a single element.
+     273              : template <typename T>
+     274              : ArrayRef<T> makeArrayRef(const T& OneElt) {
+     275              :   return OneElt;
+     276              : }
+     277              : 
+     278              : /// Construct an ArrayRef from a pointer and length.
+     279              : template <typename T>
+     280              : ArrayRef<T> makeArrayRef(const T* data, size_t length) {
+     281              :   return ArrayRef<T>(data, length);
+     282              : }
+     283              : 
+     284              : /// Construct an ArrayRef from a range.
+     285              : template <typename T>
+     286              : ArrayRef<T> makeArrayRef(const T* begin, const T* end) {
+     287              :   return ArrayRef<T>(begin, end);
+     288              : }
+     289              : 
+     290              : /// Construct an ArrayRef from a SmallVector.
+     291              : template <typename T>
+     292              : ArrayRef<T> makeArrayRef(const SmallVectorImpl<T>& Vec) {
+     293              :   return Vec;
+     294              : }
+     295              : 
+     296              : /// Construct an ArrayRef from a SmallVector.
+     297              : template <typename T, unsigned N>
+     298              : ArrayRef<T> makeArrayRef(const SmallVector<T, N>& Vec) {
+     299              :   return Vec;
+     300              : }
+     301              : 
+     302              : /// Construct an ArrayRef from a std::vector.
+     303              : template <typename T>
+     304              : ArrayRef<T> makeArrayRef(const std::vector<T>& Vec) {
+     305              :   return Vec;
+     306              : }
+     307              : 
+     308              : /// Construct an ArrayRef from a std::array.
+     309              : template <typename T, std::size_t N>
+     310              : ArrayRef<T> makeArrayRef(const std::array<T, N>& Arr) {
+     311              :   return Arr;
+     312              : }
+     313              : 
+     314              : /// Construct an ArrayRef from an ArrayRef (no-op) (const)
+     315              : template <typename T>
+     316              : ArrayRef<T> makeArrayRef(const ArrayRef<T>& Vec) {
+     317              :   return Vec;
+     318              : }
+     319              : 
+     320              : /// Construct an ArrayRef from an ArrayRef (no-op)
+     321              : template <typename T>
+     322              : ArrayRef<T>& makeArrayRef(ArrayRef<T>& Vec) {
+     323              :   return Vec;
+     324              : }
+     325              : 
+     326              : /// Construct an ArrayRef from a C array.
+     327              : template <typename T, size_t N>
+     328              : ArrayRef<T> makeArrayRef(const T (&Arr)[N]) {
+     329              :   return ArrayRef<T>(Arr);
+     330              : }
+     331              : 
+     332              : // WARNING: Template instantiation will NOT be willing to do an implicit
+     333              : // conversions to get you to an c10::ArrayRef, which is why we need so
+     334              : // many overloads.
+     335              : 
+     336              : template <typename T>
+     337              : bool operator==(c10::ArrayRef<T> a1, c10::ArrayRef<T> a2) {
+     338              :   return a1.equals(a2);
+     339              : }
+     340              : 
+     341              : template <typename T>
+     342              : bool operator!=(c10::ArrayRef<T> a1, c10::ArrayRef<T> a2) {
+     343              :   return !a1.equals(a2);
+     344              : }
+     345              : 
+     346              : template <typename T>
+     347              : bool operator==(const std::vector<T>& a1, c10::ArrayRef<T> a2) {
+     348              :   return c10::ArrayRef<T>(a1).equals(a2);
+     349              : }
+     350              : 
+     351              : template <typename T>
+     352              : bool operator!=(const std::vector<T>& a1, c10::ArrayRef<T> a2) {
+     353              :   return !c10::ArrayRef<T>(a1).equals(a2);
+     354              : }
+     355              : 
+     356              : template <typename T>
+     357              : bool operator==(c10::ArrayRef<T> a1, const std::vector<T>& a2) {
+     358              :   return a1.equals(c10::ArrayRef<T>(a2));
+     359              : }
+     360              : 
+     361              : template <typename T>
+     362              : bool operator!=(c10::ArrayRef<T> a1, const std::vector<T>& a2) {
+     363              :   return !a1.equals(c10::ArrayRef<T>(a2));
+     364              : }
+     365              : 
+     366              : using IntArrayRef = ArrayRef<int64_t>;
+     367              : 
+     368              : // This alias is deprecated because it doesn't make ownership
+     369              : // semantics obvious.  Use IntArrayRef instead!
+     370              : C10_DEFINE_DEPRECATED_USING(IntList, ArrayRef<int64_t>)
+     371              : 
+     372              : } // namespace c10
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/C++17.h.func-c.html b/html/libtorch/include/c10/util/C++17.h.func-c.html new file mode 100644 index 0000000..9dd34c5 --- /dev/null +++ b/html/libtorch/include/c10/util/C++17.h.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/C++17.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - C++17.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %40
Test Date:2024-04-30 13:17:26Functions:0.0 %20
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c104guts6detail10to_string_IivE4callB5cxx11Ei0
_ZN3c104guts9to_stringIiEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/C++17.h.func.html b/html/libtorch/include/c10/util/C++17.h.func.html new file mode 100644 index 0000000..a9f97e1 --- /dev/null +++ b/html/libtorch/include/c10/util/C++17.h.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/C++17.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - C++17.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %40
Test Date:2024-04-30 13:17:26Functions:0.0 %20
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c104guts6detail10to_string_IivE4callB5cxx11Ei0
_ZN3c104guts9to_stringIiEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/C++17.h.gcov.html b/html/libtorch/include/c10/util/C++17.h.gcov.html new file mode 100644 index 0000000..11350c2 --- /dev/null +++ b/html/libtorch/include/c10/util/C++17.h.gcov.html @@ -0,0 +1,359 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/C++17.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - C++17.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %40
Test Date:2024-04-30 13:17:26Functions:0.0 %20
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : #ifndef C10_UTIL_CPP17_H_
+       3              : #define C10_UTIL_CPP17_H_
+       4              : 
+       5              : #include <c10/macros/Macros.h>
+       6              : #include <cstdlib>
+       7              : #include <functional>
+       8              : #include <memory>
+       9              : #include <sstream>
+      10              : #include <string>
+      11              : #include <type_traits>
+      12              : #include <utility>
+      13              : 
+      14              : #if !defined(__clang__) && !defined(_MSC_VER) && defined(__GNUC__) && \
+      15              :     __GNUC__ < 5
+      16              : #error \
+      17              :     "You're trying to build PyTorch with a too old version of GCC. We need GCC 5 or later."
+      18              : #endif
+      19              : 
+      20              : #if defined(__clang__) && __clang_major__ < 4
+      21              : #error \
+      22              :     "You're trying to build PyTorch with a too old version of Clang. We need Clang 4 or later."
+      23              : #endif
+      24              : 
+      25              : #if (defined(_MSC_VER) && (!defined(_MSVC_LANG) || _MSVC_LANG < 201703L)) || \
+      26              :     (!defined(_MSC_VER) && __cplusplus < 201703L)
+      27              : #error You need C++17 to compile PyTorch
+      28              : #endif
+      29              : 
+      30              : #if defined(_WIN32) && (defined(min) || defined(max))
+      31              : #error Macro clash with min and max -- define NOMINMAX when compiling your program on Windows
+      32              : #endif
+      33              : 
+      34              : /*
+      35              :  * This header adds some polyfills with C++17 functionality
+      36              :  */
+      37              : 
+      38              : namespace c10 {
+      39              : 
+      40              : // in c++17 std::result_of has been superceded by std::invoke_result.  Since
+      41              : // c++20, std::result_of is removed.
+      42              : template <typename F, typename... args>
+      43              : #if defined(__cpp_lib_is_invocable) && __cpp_lib_is_invocable >= 201703L
+      44              : using invoke_result = typename std::invoke_result<F, args...>;
+      45              : #else
+      46              : using invoke_result = typename std::result_of<F && (args && ...)>;
+      47              : #endif
+      48              : 
+      49              : template <typename F, typename... args>
+      50              : using invoke_result_t = typename invoke_result<F, args...>::type;
+      51              : 
+      52              : // std::is_pod is deprecated in C++20, std::is_standard_layout and
+      53              : // std::is_trivial are introduced in C++11, std::conjunction has been introduced
+      54              : // in C++17.
+      55              : template <typename T>
+      56              : #if defined(__cpp_lib_logical_traits) && __cpp_lib_logical_traits >= 201510L
+      57              : using is_pod = std::conjunction<std::is_standard_layout<T>, std::is_trivial<T>>;
+      58              : #else
+      59              : using is_pod = std::is_pod<T>;
+      60              : #endif
+      61              : 
+      62              : template <typename T>
+      63              : constexpr bool is_pod_v = is_pod<T>::value;
+      64              : 
+      65              : namespace guts {
+      66              : 
+      67              : template <typename Base, typename Child, typename... Args>
+      68              : typename std::enable_if<
+      69              :     !std::is_array<Base>::value && !std::is_array<Child>::value &&
+      70              :         std::is_base_of<Base, Child>::value,
+      71              :     std::unique_ptr<Base>>::type
+      72              : make_unique_base(Args&&... args) {
+      73              :   return std::unique_ptr<Base>(new Child(std::forward<Args>(args)...));
+      74              : }
+      75              : 
+      76              : #if defined(__cpp_lib_logical_traits) && !(defined(_MSC_VER) && _MSC_VER < 1920)
+      77              : 
+      78              : template <class... B>
+      79              : using conjunction = std::conjunction<B...>;
+      80              : template <class... B>
+      81              : using disjunction = std::disjunction<B...>;
+      82              : template <bool B>
+      83              : using bool_constant = std::bool_constant<B>;
+      84              : template <class B>
+      85              : using negation = std::negation<B>;
+      86              : 
+      87              : #else
+      88              : 
+      89              : // Implementation taken from http://en.cppreference.com/w/cpp/types/conjunction
+      90              : template <class...>
+      91              : struct conjunction : std::true_type {};
+      92              : template <class B1>
+      93              : struct conjunction<B1> : B1 {};
+      94              : template <class B1, class... Bn>
+      95              : struct conjunction<B1, Bn...>
+      96              :     : std::conditional_t<bool(B1::value), conjunction<Bn...>, B1> {};
+      97              : 
+      98              : // Implementation taken from http://en.cppreference.com/w/cpp/types/disjunction
+      99              : template <class...>
+     100              : struct disjunction : std::false_type {};
+     101              : template <class B1>
+     102              : struct disjunction<B1> : B1 {};
+     103              : template <class B1, class... Bn>
+     104              : struct disjunction<B1, Bn...>
+     105              :     : std::conditional_t<bool(B1::value), B1, disjunction<Bn...>> {};
+     106              : 
+     107              : // Implementation taken from
+     108              : // http://en.cppreference.com/w/cpp/types/integral_constant
+     109              : template <bool B>
+     110              : using bool_constant = std::integral_constant<bool, B>;
+     111              : 
+     112              : // Implementation taken from http://en.cppreference.com/w/cpp/types/negation
+     113              : template <class B>
+     114              : struct negation : bool_constant<!bool(B::value)> {};
+     115              : 
+     116              : #endif
+     117              : 
+     118              : #ifdef __cpp_lib_void_t
+     119              : 
+     120              : template <class T>
+     121              : using void_t = std::void_t<T>;
+     122              : 
+     123              : #else
+     124              : 
+     125              : // Implementation taken from http://en.cppreference.com/w/cpp/types/void_t
+     126              : // (it takes CWG1558 into account and also works for older compilers)
+     127              : template <typename... Ts>
+     128              : struct make_void {
+     129              :   typedef void type;
+     130              : };
+     131              : template <typename... Ts>
+     132              : using void_t = typename make_void<Ts...>::type;
+     133              : 
+     134              : #endif
+     135              : 
+     136              : #if defined(USE_ROCM)
+     137              : // rocm doesn't like the C10_HOST_DEVICE
+     138              : #define CUDA_HOST_DEVICE
+     139              : #else
+     140              : #define CUDA_HOST_DEVICE C10_HOST_DEVICE
+     141              : #endif
+     142              : 
+     143              : #if defined(__cpp_lib_apply) && !defined(__CUDA_ARCH__)
+     144              : 
+     145              : template <class F, class Tuple>
+     146              : CUDA_HOST_DEVICE inline constexpr decltype(auto) apply(F&& f, Tuple&& t) {
+     147              :   return std::apply(std::forward<F>(f), std::forward<Tuple>(t));
+     148              : }
+     149              : 
+     150              : #else
+     151              : 
+     152              : // Implementation from http://en.cppreference.com/w/cpp/utility/apply (but
+     153              : // modified)
+     154              : // TODO This is an incomplete implementation of std::apply, not working for
+     155              : // member functions.
+     156              : namespace detail {
+     157              : template <class F, class Tuple, std::size_t... INDEX>
+     158              : #if defined(_MSC_VER)
+     159              : // MSVC has a problem with the decltype() return type, but it also doesn't need
+     160              : // it
+     161              : C10_HOST_DEVICE constexpr auto apply_impl(
+     162              :     F&& f,
+     163              :     Tuple&& t,
+     164              :     std::index_sequence<INDEX...>)
+     165              : #else
+     166              : // GCC/Clang need the decltype() return type
+     167              : CUDA_HOST_DEVICE constexpr decltype(auto) apply_impl(
+     168              :     F&& f,
+     169              :     Tuple&& t,
+     170              :     std::index_sequence<INDEX...>)
+     171              : #endif
+     172              : {
+     173              :   return std::forward<F>(f)(std::get<INDEX>(std::forward<Tuple>(t))...);
+     174              : }
+     175              : } // namespace detail
+     176              : 
+     177              : template <class F, class Tuple>
+     178              : CUDA_HOST_DEVICE constexpr decltype(auto) apply(F&& f, Tuple&& t) {
+     179              :   return detail::apply_impl(
+     180              :       std::forward<F>(f),
+     181              :       std::forward<Tuple>(t),
+     182              :       std::make_index_sequence<
+     183              :           std::tuple_size<std::remove_reference_t<Tuple>>::value>{});
+     184              : }
+     185              : 
+     186              : #endif
+     187              : 
+     188              : #undef CUDA_HOST_DEVICE
+     189              : 
+     190              : template <typename Functor, typename... Args>
+     191              : typename std::enable_if<
+     192              :     std::is_member_pointer<typename std::decay<Functor>::type>::value,
+     193              :     typename c10::invoke_result_t<Functor, Args...>>::type
+     194              : invoke(Functor&& f, Args&&... args) {
+     195              :   return std::mem_fn(std::forward<Functor>(f))(std::forward<Args>(args)...);
+     196              : }
+     197              : 
+     198              : template <typename Functor, typename... Args>
+     199              : typename std::enable_if<
+     200              :     !std::is_member_pointer<typename std::decay<Functor>::type>::value,
+     201              :     typename c10::invoke_result_t<Functor, Args...>>::type
+     202              : invoke(Functor&& f, Args&&... args) {
+     203              :   return std::forward<Functor>(f)(std::forward<Args>(args)...);
+     204              : }
+     205              : 
+     206              : namespace detail {
+     207              : struct _identity final {
+     208              :   template <class T>
+     209              :   using type_identity = T;
+     210              : 
+     211              :   template <class T>
+     212              :   decltype(auto) operator()(T&& arg) {
+     213              :     return std::forward<T>(arg);
+     214              :   }
+     215              : };
+     216              : 
+     217              : template <class Func, class Enable = void>
+     218              : struct function_takes_identity_argument : std::false_type {};
+     219              : #if defined(_MSC_VER)
+     220              : // For some weird reason, MSVC shows a compiler error when using guts::void_t
+     221              : // instead of std::void_t. But we're only building on MSVC versions that have
+     222              : // std::void_t, so let's just use that one.
+     223              : template <class Func>
+     224              : struct function_takes_identity_argument<
+     225              :     Func,
+     226              :     std::void_t<decltype(std::declval<Func>()(_identity()))>> : std::true_type {
+     227              : };
+     228              : #else
+     229              : template <class Func>
+     230              : struct function_takes_identity_argument<
+     231              :     Func,
+     232              :     void_t<decltype(std::declval<Func>()(_identity()))>> : std::true_type {};
+     233              : #endif
+     234              : } // namespace detail
+     235              : 
+     236              : // GCC 4.8 doesn't define std::to_string, even though that's in C++11. Let's
+     237              : // define it.
+     238              : namespace detail {
+     239              : class DummyClassForToString final {};
+     240              : } // namespace detail
+     241              : } // namespace guts
+     242              : } // namespace c10
+     243              : namespace std {
+     244              : // We use SFINAE to detect if std::to_string exists for a type, but that only
+     245              : // works if the function name is defined. So let's define a std::to_string for a
+     246              : // dummy type. If you're getting an error here saying that this overload doesn't
+     247              : // match your std::to_string() call, then you're calling std::to_string() but
+     248              : // should be calling c10::guts::to_string().
+     249              : inline std::string to_string(c10::guts::detail::DummyClassForToString) {
+     250              :   return "";
+     251              : }
+     252              : 
+     253              : } // namespace std
+     254              : namespace c10 {
+     255              : namespace guts {
+     256              : namespace detail {
+     257              : 
+     258              : template <class T, class Enable = void>
+     259              : struct to_string_ final {
+     260              :   static std::string call(T value) {
+     261              :     std::ostringstream str;
+     262              :     str << value;
+     263              :     return str.str();
+     264              :   }
+     265              : };
+     266              : // If a std::to_string exists, use that instead
+     267              : template <class T>
+     268              : struct to_string_<T, void_t<decltype(std::to_string(std::declval<T>()))>>
+     269              :     final {
+     270            0 :   static std::string call(T value) {
+     271            0 :     return std::to_string(value);
+     272              :   }
+     273              : };
+     274              : } // namespace detail
+     275              : template <class T>
+     276            0 : inline std::string to_string(T value) {
+     277            0 :   return detail::to_string_<T>::call(value);
+     278              : }
+     279              : 
+     280              : } // namespace guts
+     281              : } // namespace c10
+     282              : 
+     283              : #endif // C10_UTIL_CPP17_H_
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/Exception.h.func-c.html b/html/libtorch/include/c10/util/Exception.h.func-c.html new file mode 100644 index 0000000..e8c69dc --- /dev/null +++ b/html/libtorch/include/c10/util/Exception.h.func-c.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/Exception.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - Exception.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %110
Test Date:2024-04-30 13:17:26Functions:0.0 %80
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c106detail17torchCheckMsgImplEPKc0
_ZN3c106detail17torchCheckMsgImplEPKcS2_0
_ZN3c106detail17torchCheckMsgImplIJA69_clEEEDcPKcDpRKT_0
_ZN3c106detail17torchCheckMsgImplIJA25_cmA22_clEEEDcPKcDpRKT_0
_ZN3c106detail17torchCheckMsgImplIJA57_cPKcA2_cEEEDcS4_DpRKT_0
_ZN3c106detail17torchCheckMsgImplIJA69_clEEEDcPKcDpRKT_0
_ZN3c106detail20deprecated_AT_ASSERTEv0
_ZN3c106detail23torchInternalAssertFailEPKcS2_jS2_NS0_22CompileTimeEmptyStringE0
_ZNK3c105Error4whatEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/Exception.h.func.html b/html/libtorch/include/c10/util/Exception.h.func.html new file mode 100644 index 0000000..6eeb7b9 --- /dev/null +++ b/html/libtorch/include/c10/util/Exception.h.func.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/Exception.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - Exception.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %110
Test Date:2024-04-30 13:17:26Functions:0.0 %80
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c106detail17torchCheckMsgImplEPKc0
_ZN3c106detail17torchCheckMsgImplEPKcS2_0
_ZN3c106detail17torchCheckMsgImplIJA69_clEEEDcPKcDpRKT_0
_ZN3c106detail17torchCheckMsgImplIJA25_cmA22_clEEEDcPKcDpRKT_0
_ZN3c106detail17torchCheckMsgImplIJA57_cPKcA2_cEEEDcS4_DpRKT_0
_ZN3c106detail17torchCheckMsgImplIJA69_clEEEDcPKcDpRKT_0
_ZN3c106detail20deprecated_AT_ASSERTEv0
_ZN3c106detail23torchInternalAssertFailEPKcS2_jS2_NS0_22CompileTimeEmptyStringE0
_ZNK3c105Error4whatEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/Exception.h.gcov.html b/html/libtorch/include/c10/util/Exception.h.gcov.html new file mode 100644 index 0000000..1542dc1 --- /dev/null +++ b/html/libtorch/include/c10/util/Exception.h.gcov.html @@ -0,0 +1,757 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/Exception.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - Exception.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %110
Test Date:2024-04-30 13:17:26Functions:0.0 %80
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #ifndef C10_UTIL_EXCEPTION_H_
+       2              : #define C10_UTIL_EXCEPTION_H_
+       3              : 
+       4              : #include <c10/macros/Macros.h>
+       5              : #include <c10/util/StringUtil.h>
+       6              : #include <c10/util/variant.h>
+       7              : 
+       8              : #include <cstddef>
+       9              : #include <exception>
+      10              : #include <string>
+      11              : #include <vector>
+      12              : 
+      13              : #if defined(_MSC_VER) && _MSC_VER <= 1900
+      14              : #define __func__ __FUNCTION__
+      15              : #endif
+      16              : 
+      17              : namespace c10 {
+      18              : 
+      19              : /// The primary ATen error class.
+      20              : /// Provides a complete error message with source location information via
+      21              : /// `what()`, and a more concise message via `what_without_backtrace()`.
+      22              : /// Don't throw this directly; use TORCH_CHECK/TORCH_INTERNAL_ASSERT instead.
+      23              : ///
+      24              : /// NB: c10::Error is handled specially by the default torch to suppress the
+      25              : /// backtrace, see torch/csrc/Exceptions.h
+      26              : class C10_API Error : public std::exception {
+      27              :   // The actual error message.
+      28              :   std::string msg_;
+      29              : 
+      30              :   // Context for the message (in order of decreasing specificity).  Context will
+      31              :   // be automatically formatted appropriately, so it is not necessary to add
+      32              :   // extra leading/trailing newlines to strings inside this vector
+      33              :   std::vector<std::string> context_;
+      34              : 
+      35              :   // The C++ backtrace at the point when this exception was raised.  This
+      36              :   // may be empty if there is no valid backtrace.  (We don't use optional
+      37              :   // here to reduce the dependencies this file has.)
+      38              :   std::string backtrace_;
+      39              : 
+      40              :   // These two are derived fields from msg_stack_ and backtrace_, but we need
+      41              :   // fields for the strings so that we can return a const char* (as the
+      42              :   // signature of std::exception requires).  Currently, the invariant
+      43              :   // is that these fields are ALWAYS populated consistently with respect
+      44              :   // to msg_stack_ and backtrace_.
+      45              :   std::string what_;
+      46              :   std::string what_without_backtrace_;
+      47              : 
+      48              :   // This is a little debugging trick: you can stash a relevant pointer
+      49              :   // in caller, and then when you catch the exception, you can compare
+      50              :   // against pointers you have on hand to get more information about
+      51              :   // where the exception came from.  In Caffe2, this is used to figure
+      52              :   // out which operator raised an exception.
+      53              :   const void* caller_;
+      54              : 
+      55              :  public:
+      56              :   // PyTorch-style Error constructor.  NB: the implementation of this
+      57              :   // is actually in Logging.cpp
+      58              :   Error(SourceLocation source_location, std::string msg);
+      59              : 
+      60              :   // Caffe2-style error message
+      61              :   Error(
+      62              :       const char* file,
+      63              :       const uint32_t line,
+      64              :       const char* condition,
+      65              :       const std::string& msg,
+      66              :       const std::string& backtrace,
+      67              :       const void* caller = nullptr);
+      68              : 
+      69              :   // Base constructor
+      70              :   Error(std::string msg, std::string backtrace, const void* caller = nullptr);
+      71              : 
+      72              :   // Add some new context to the message stack.  The last added context
+      73              :   // will be formatted at the end of the context list upon printing.
+      74              :   // WARNING: This method is O(n) in the size of the stack, so don't go
+      75              :   // wild adding a ridiculous amount of context to error messages.
+      76              :   void add_context(std::string msg);
+      77              : 
+      78              :   const std::string& msg() const {
+      79              :     return msg_;
+      80              :   }
+      81              : 
+      82              :   const std::vector<std::string>& context() const {
+      83              :     return context_;
+      84              :   }
+      85              : 
+      86              :   const std::string& backtrace() const {
+      87              :     return backtrace_;
+      88              :   }
+      89              : 
+      90              :   /// Returns the complete error message, including the source location.
+      91              :   /// The returned pointer is invalidated if you call add_context() on
+      92              :   /// this object.
+      93            0 :   const char* what() const noexcept override {
+      94            0 :     return what_.c_str();
+      95              :   }
+      96              : 
+      97              :   const void* caller() const noexcept {
+      98              :     return caller_;
+      99              :   }
+     100              : 
+     101              :   /// Returns only the error message string, without source location.
+     102              :   /// The returned pointer is invalidated if you call add_context() on
+     103              :   /// this object.
+     104              :   const char* what_without_backtrace() const noexcept {
+     105              :     return what_without_backtrace_.c_str();
+     106              :   }
+     107              : 
+     108              :  private:
+     109              :   void refresh_what();
+     110              :   std::string compute_what(bool include_backtrace) const;
+     111              : };
+     112              : 
+     113              : class C10_API Warning {
+     114              :  public:
+     115              :   class C10_API UserWarning {};
+     116              :   class C10_API DeprecationWarning {};
+     117              : 
+     118              :   using warning_variant_t = c10::variant<UserWarning, DeprecationWarning>;
+     119              : 
+     120              :   Warning(
+     121              :       warning_variant_t type,
+     122              :       const SourceLocation& source_location,
+     123              :       std::string msg,
+     124              :       bool verbatim);
+     125              : 
+     126              :   Warning(
+     127              :       warning_variant_t type,
+     128              :       SourceLocation source_location,
+     129              :       const char* msg,
+     130              :       bool verbatim);
+     131              : 
+     132              :   Warning(
+     133              :       warning_variant_t type,
+     134              :       SourceLocation source_location,
+     135              :       ::c10::detail::CompileTimeEmptyString msg,
+     136              :       bool verbatim);
+     137              : 
+     138              :   // Getters for members
+     139              :   warning_variant_t type() const;
+     140              :   const SourceLocation& source_location() const;
+     141              :   const std::string& msg() const;
+     142              :   bool verbatim() const;
+     143              : 
+     144              :  private:
+     145              :   // The type of warning
+     146              :   warning_variant_t type_;
+     147              : 
+     148              :   // Where the warning happened.
+     149              :   SourceLocation source_location_;
+     150              : 
+     151              :   // The actual warning message.
+     152              :   std::string msg_;
+     153              : 
+     154              :   // See note: [Verbatim Warnings]
+     155              :   bool verbatim_;
+     156              : };
+     157              : 
+     158              : using UserWarning = Warning::UserWarning;
+     159              : using DeprecationWarning = Warning::DeprecationWarning;
+     160              : 
+     161              : // Issue a warning with a given message. Dispatched to the current
+     162              : // warning handler.
+     163              : void C10_API warn(const Warning& warning);
+     164              : 
+     165              : class C10_API WarningHandler {
+     166              :  public:
+     167              :   virtual ~WarningHandler() = default;
+     168              :   /// The default warning handler. Prints the message to stderr.
+     169              :   virtual void process(const Warning& warning);
+     170              : };
+     171              : 
+     172              : namespace WarningUtils {
+     173              : 
+     174              : // Note: [Verbatim Warnings]
+     175              : // Warnings originating in C++ code can appear out-of-place to Python users:
+     176              : // a user runs a line in Python, but the warning references a line in C++.
+     177              : // Some parts of PyTorch, like the JIT, are cognizant of this mismatch
+     178              : // and take care to map warnings back to the user's program, but most
+     179              : // of PyTorch simply throws a context-free warning. To allow warning
+     180              : // handlers to add context where appropriate, warn takes the
+     181              : // "verbatim" flag. When this is false a warning handler might append
+     182              : // the C++ warning to a Python warning message that relates the warning
+     183              : // back to the user's program. Callers who have already accounted for
+     184              : // context in their warnings should set verbatim to true so their warnings
+     185              : // appear without modification.
+     186              : 
+     187              : /// Sets the global warning handler. This is not thread-safe, so it should
+     188              : /// generally be called once during initialization or while holding the GIL
+     189              : /// for programs that use python.
+     190              : /// User is responsible for keeping the WarningHandler alive until
+     191              : /// it is not needed.
+     192              : C10_API void set_warning_handler(WarningHandler* handler) noexcept(true);
+     193              : /// Gets the global warning handler.
+     194              : C10_API WarningHandler* get_warning_handler() noexcept(true);
+     195              : 
+     196              : class C10_API WarningHandlerGuard {
+     197              :   WarningHandler* prev_handler_;
+     198              : 
+     199              :  public:
+     200              :   WarningHandlerGuard(WarningHandler* new_handler)
+     201              :       : prev_handler_(c10::WarningUtils::get_warning_handler()) {
+     202              :     c10::WarningUtils::set_warning_handler(new_handler);
+     203              :   }
+     204              :   ~WarningHandlerGuard() {
+     205              :     c10::WarningUtils::set_warning_handler(prev_handler_);
+     206              :   }
+     207              : };
+     208              : 
+     209              : /// The TORCH_WARN_ONCE macro is difficult to test for. Use
+     210              : /// setWarnAlways(true) to turn it into TORCH_WARN, which can be
+     211              : /// tested for more easily.
+     212              : C10_API void set_warnAlways(bool) noexcept(true);
+     213              : C10_API bool get_warnAlways(void) noexcept(true);
+     214              : 
+     215              : // A RAII guard that sets warn_always (not thread-local) on
+     216              : // construction, and sets it back to the original value upon destruction.
+     217              : struct C10_API WarnAlways {
+     218              :  public:
+     219              :   explicit WarnAlways(bool setting = true);
+     220              :   ~WarnAlways();
+     221              : 
+     222              :  private:
+     223              :   bool prev_setting;
+     224              : };
+     225              : 
+     226              : } // namespace WarningUtils
+     227              : 
+     228              : // Used in ATen for out-of-bound indices that can reasonably only be detected
+     229              : // lazily inside a kernel (See: advanced indexing).  These turn into
+     230              : // IndexError when they cross to Python.
+     231              : class C10_API IndexError : public Error {
+     232              :   using Error::Error;
+     233              : };
+     234              : 
+     235              : // Used in ATen for invalid values.  These turn into
+     236              : // ValueError when they cross to Python.
+     237              : class C10_API ValueError : public Error {
+     238              :   using Error::Error;
+     239              : };
+     240              : 
+     241              : // Used in ATen for invalid types.  These turn into
+     242              : // TypeError when they cross to Python.
+     243              : class C10_API TypeError : public Error {
+     244              :   using Error::Error;
+     245              : };
+     246              : 
+     247              : // Used in ATen for functionality that is not implemented.  These turn into
+     248              : // NotImplementedError when they cross to Python.
+     249              : class C10_API NotImplementedError : public Error {
+     250              :   using Error::Error;
+     251              : };
+     252              : 
+     253              : // Used in ATen for non finite indices.  These turn into
+     254              : // ExitException when they cross to Python.
+     255              : class C10_API EnforceFiniteError : public Error {
+     256              :   using Error::Error;
+     257              : };
+     258              : 
+     259              : // Used in Onnxifi backend lowering.  These turn into
+     260              : // ExitException when they cross to Python.
+     261              : class C10_API OnnxfiBackendSystemError : public Error {
+     262              :   using Error::Error;
+     263              : };
+     264              : 
+     265              : // Used for numerical errors from the linalg module. These
+     266              : // turn into LinAlgError when they cross into Python.
+     267              : class C10_API LinAlgError : public Error {
+     268              :   using Error::Error;
+     269              : };
+     270              : 
+     271              : class C10_API OutOfMemoryError : public Error {
+     272              :   using Error::Error;
+     273              : };
+     274              : 
+     275              : // Used for collective communication library errors from the distributed module.
+     276              : // These turn into DistBackendError when they cross into Python.
+     277              : class C10_API DistBackendError : public Error {
+     278              :   using Error::Error;
+     279              : };
+     280              : 
+     281              : // A utility function to return an exception std::string by prepending its
+     282              : // exception type before its what() content
+     283              : C10_API std::string GetExceptionString(const std::exception& e);
+     284              : 
+     285              : } // namespace c10
+     286              : 
+     287              : // Private helper macro for implementing TORCH_INTERNAL_ASSERT and TORCH_CHECK
+     288              : //
+     289              : // Note: In the debug build With MSVC, __LINE__ might be of long type (a.k.a
+     290              : // int32_t), which is different from the definition of `SourceLocation` that
+     291              : // requires unsigned int (a.k.a uint32_t) and may cause a compile error with the
+     292              : // message: error C2397: conversion from 'long' to 'uint32_t' requires a
+     293              : // narrowing conversion Here the static cast is used to pass the build. if this
+     294              : // is used inside a lambda the __func__ macro expands to operator(), which isn't
+     295              : // very useful, but hard to fix in a macro so suppressing the warning.
+     296              : #define C10_THROW_ERROR(err_type, msg) \
+     297              :   throw ::c10::err_type(               \
+     298              :       {__func__, __FILE__, static_cast<uint32_t>(__LINE__)}, msg)
+     299              : 
+     300              : // Private helper macro for workaround MSVC misexpansion of nested macro
+     301              : // invocations involving __VA_ARGS__.  See
+     302              : // https://stackoverflow.com/questions/5134523/msvc-doesnt-expand-va-args-correctly
+     303              : #define C10_EXPAND_MSVC_WORKAROUND(x) x
+     304              : 
+     305              : // On nvcc, C10_UNLIKELY thwarts missing return statement analysis.  In cases
+     306              : // where the unlikely expression may be a constant, use this macro to ensure
+     307              : // return statement analysis keeps working (at the cost of not getting the
+     308              : // likely/unlikely annotation on nvcc).
+     309              : // https://github.com/pytorch/pytorch/issues/21418
+     310              : //
+     311              : // Currently, this is only used in the error reporting macros below.  If you
+     312              : // want to use it more generally, move me to Macros.h
+     313              : //
+     314              : // TODO: Brian Vaughan observed that we might be able to get this to work on
+     315              : // nvcc by writing some sort of C++ overload that distinguishes constexpr inputs
+     316              : // from non-constexpr.  Since there isn't any evidence that losing C10_UNLIKELY
+     317              : // in nvcc is causing us perf problems, this is not yet implemented, but this
+     318              : // might be an interesting piece of C++ code for an intrepid bootcamper to
+     319              : // write.
+     320              : #if defined(__CUDACC__)
+     321              : #define C10_UNLIKELY_OR_CONST(e) e
+     322              : #else
+     323              : #define C10_UNLIKELY_OR_CONST(e) C10_UNLIKELY(e)
+     324              : #endif
+     325              : 
+     326              : // ----------------------------------------------------------------------------
+     327              : // Error reporting macros
+     328              : // ----------------------------------------------------------------------------
+     329              : 
+     330              : #ifdef STRIP_ERROR_MESSAGES
+     331              : #define TORCH_RETHROW(e, ...) throw
+     332              : #else
+     333              : #define TORCH_RETHROW(e, ...)               \
+     334              :   do {                                      \
+     335              :     e.add_context(::c10::str(__VA_ARGS__)); \
+     336              :     throw;                                  \
+     337              :   } while (false)
+     338              : #endif
+     339              : 
+     340              : // A utility macro to provide assert()-like functionality; that is, enforcement
+     341              : // of internal invariants in code.  It supports an arbitrary number of extra
+     342              : // arguments (evaluated only on failure), which will be printed in the assert
+     343              : // failure message using operator<< (this is useful to print some variables
+     344              : // which may be useful for debugging.)
+     345              : //
+     346              : // Usage:
+     347              : //    TORCH_INTERNAL_ASSERT(should_be_true);
+     348              : //    TORCH_INTERNAL_ASSERT(x == 0, "x = ", x);
+     349              : //
+     350              : // Assuming no bugs in PyTorch, the conditions tested by this macro should
+     351              : // always be true; e.g., it should be possible to disable all of these
+     352              : // conditions without changing observable user behavior.  If you would like to
+     353              : // do error reporting for user input, please use TORCH_CHECK instead.
+     354              : //
+     355              : // NOTE: It is SAFE to use this macro in production code; on failure, this
+     356              : // simply raises an exception, it does NOT unceremoniously quit the process
+     357              : // (unlike assert()).
+     358              : //
+     359              : #ifdef STRIP_ERROR_MESSAGES
+     360              : #define TORCH_INTERNAL_ASSERT(cond, ...)                              \
+     361              :   if (C10_UNLIKELY_OR_CONST(!(cond))) {                               \
+     362              :     ::c10::detail::torchCheckFail(                                    \
+     363              :         __func__,                                                     \
+     364              :         __FILE__,                                                     \
+     365              :         static_cast<uint32_t>(__LINE__),                              \
+     366              :         #cond " INTERNAL ASSERT FAILED at " C10_STRINGIZE(__FILE__)); \
+     367              :   }
+     368              : #else
+     369              : // It would be nice if we could build a combined string literal out of
+     370              : // the TORCH_INTERNAL_ASSERT prefix and a user-provided string literal
+     371              : // as the first argument, but there doesn't seem to be any good way to
+     372              : // do that while still supporting having a first argument that isn't a
+     373              : // string literal.
+     374              : #define TORCH_INTERNAL_ASSERT(cond, ...)                                         \
+     375              :   if (C10_UNLIKELY_OR_CONST(!(cond))) {                                          \
+     376              :     ::c10::detail::torchInternalAssertFail(                                      \
+     377              :         __func__,                                                                \
+     378              :         __FILE__,                                                                \
+     379              :         static_cast<uint32_t>(__LINE__),                                         \
+     380              :         #cond                                                                    \
+     381              :         " INTERNAL ASSERT FAILED at " C10_STRINGIZE(__FILE__) ":" C10_STRINGIZE( \
+     382              :             __LINE__) ", please report a bug to PyTorch. ",                      \
+     383              :         c10::str(__VA_ARGS__));                                                  \
+     384              :   }
+     385              : #endif
+     386              : 
+     387              : // A utility macro to make it easier to test for error conditions from user
+     388              : // input.  Like TORCH_INTERNAL_ASSERT, it supports an arbitrary number of extra
+     389              : // arguments (evaluated only on failure), which will be printed in the error
+     390              : // message using operator<< (e.g., you can pass any object which has
+     391              : // operator<< defined.  Most objects in PyTorch have these definitions!)
+     392              : //
+     393              : // Usage:
+     394              : //    TORCH_CHECK(should_be_true); // A default error message will be provided
+     395              : //                                 // in this case; but we recommend writing an
+     396              : //                                 // explicit error message, as it is more
+     397              : //                                 // user friendly.
+     398              : //    TORCH_CHECK(x == 0, "Expected x to be 0, but got ", x);
+     399              : //
+     400              : // On failure, this macro will raise an exception.  If this exception propagates
+     401              : // to Python, it will convert into a Python RuntimeError.
+     402              : //
+     403              : // NOTE: It is SAFE to use this macro in production code; on failure, this
+     404              : // simply raises an exception, it does NOT unceremoniously quit the process
+     405              : // (unlike CHECK() from glog.)
+     406              : //
+     407              : #define TORCH_CHECK_WITH(error_t, cond, ...) \
+     408              :   TORCH_CHECK_WITH_MSG(error_t, cond, "", __VA_ARGS__)
+     409              : 
+     410              : #ifdef STRIP_ERROR_MESSAGES
+     411              : #define TORCH_CHECK_MSG(cond, type, ...) \
+     412              :   (#cond #type " CHECK FAILED at " C10_STRINGIZE(__FILE__))
+     413              : #define TORCH_CHECK_WITH_MSG(error_t, cond, type, ...)                \
+     414              :   if (C10_UNLIKELY_OR_CONST(!(cond))) {                               \
+     415              :     C10_THROW_ERROR(Error, TORCH_CHECK_MSG(cond, type, __VA_ARGS__)); \
+     416              :   }
+     417              : #else
+     418              : namespace c10 {
+     419              : namespace detail {
+     420              : template <typename... Args>
+     421            0 : decltype(auto) torchCheckMsgImpl(const char* /*msg*/, const Args&... args) {
+     422            0 :   return ::c10::str(args...);
+     423              : }
+     424            0 : inline C10_API const char* torchCheckMsgImpl(const char* msg) {
+     425            0 :   return msg;
+     426              : }
+     427              : // If there is just 1 user-provided C-string argument, use it.
+     428            0 : inline C10_API const char* torchCheckMsgImpl(
+     429              :     const char* /*msg*/,
+     430              :     const char* args) {
+     431            0 :   return args;
+     432              : }
+     433              : } // namespace detail
+     434              : } // namespace c10
+     435              : 
+     436              : #define TORCH_CHECK_MSG(cond, type, ...)                   \
+     437              :   (::c10::detail::torchCheckMsgImpl(                       \
+     438              :       "Expected " #cond                                    \
+     439              :       " to be true, but got false.  "                      \
+     440              :       "(Could this error message be improved?  If so, "    \
+     441              :       "please report an enhancement request to PyTorch.)", \
+     442              :       ##__VA_ARGS__))
+     443              : #define TORCH_CHECK_WITH_MSG(error_t, cond, type, ...)                  \
+     444              :   if (C10_UNLIKELY_OR_CONST(!(cond))) {                                 \
+     445              :     C10_THROW_ERROR(error_t, TORCH_CHECK_MSG(cond, type, __VA_ARGS__)); \
+     446              :   }
+     447              : #endif
+     448              : 
+     449              : namespace c10 {
+     450              : namespace detail {
+     451              : 
+     452              : [[noreturn]] C10_API void torchCheckFail(
+     453              :     const char* func,
+     454              :     const char* file,
+     455              :     uint32_t line,
+     456              :     const std::string& msg);
+     457              : [[noreturn]] C10_API void torchCheckFail(
+     458              :     const char* func,
+     459              :     const char* file,
+     460              :     uint32_t line,
+     461              :     const char* msg);
+     462              : 
+     463              : // The c10::str() call that creates userMsg can have 1 of 3 return
+     464              : // types depending on the number and types of arguments passed to
+     465              : // TORCH_INTERNAL_ASSERT.  0 arguments will get a
+     466              : // CompileTimeEmptyString, 1 const char * will be passed straight
+     467              : // through, and anything else will get converted to std::string.
+     468              : [[noreturn]] C10_API void torchInternalAssertFail(
+     469              :     const char* func,
+     470              :     const char* file,
+     471              :     uint32_t line,
+     472              :     const char* condMsg,
+     473              :     const char* userMsg);
+     474            0 : [[noreturn]] inline C10_API void torchInternalAssertFail(
+     475              :     const char* func,
+     476              :     const char* file,
+     477              :     uint32_t line,
+     478              :     const char* condMsg,
+     479              :     ::c10::detail::CompileTimeEmptyString /*userMsg*/) {
+     480            0 :   torchCheckFail(func, file, line, condMsg);
+     481              : }
+     482              : [[noreturn]] C10_API void torchInternalAssertFail(
+     483              :     const char* func,
+     484              :     const char* file,
+     485              :     uint32_t line,
+     486              :     const char* condMsg,
+     487              :     const std::string& userMsg);
+     488              : 
+     489              : } // namespace detail
+     490              : } // namespace c10
+     491              : 
+     492              : #ifdef STRIP_ERROR_MESSAGES
+     493              : #define TORCH_CHECK(cond, ...)                   \
+     494              :   if (C10_UNLIKELY_OR_CONST(!(cond))) {          \
+     495              :     ::c10::detail::torchCheckFail(               \
+     496              :         __func__,                                \
+     497              :         __FILE__,                                \
+     498              :         static_cast<uint32_t>(__LINE__),         \
+     499              :         TORCH_CHECK_MSG(cond, "", __VA_ARGS__)); \
+     500              :   }
+     501              : #else
+     502              : #define TORCH_CHECK(cond, ...)                     \
+     503              :   if (C10_UNLIKELY_OR_CONST(!(cond))) {            \
+     504              :     ::c10::detail::torchCheckFail(                 \
+     505              :         __func__,                                  \
+     506              :         __FILE__,                                  \
+     507              :         static_cast<uint32_t>(__LINE__),           \
+     508              :         TORCH_CHECK_MSG(cond, "", ##__VA_ARGS__)); \
+     509              :   }
+     510              : #endif
+     511              : 
+     512              : // An utility macro that does what `TORCH_CHECK` does if compiled in the host
+     513              : // code, otherwise does nothing. Supposed to be used in the code shared between
+     514              : // host and device code as an alternative for `TORCH_CHECK`.
+     515              : #if defined(__CUDACC__) || defined(__HIPCC__)
+     516              : #define TORCH_CHECK_IF_NOT_ON_CUDA(cond, ...)
+     517              : #else
+     518              : #define TORCH_CHECK_IF_NOT_ON_CUDA(cond, ...) TORCH_CHECK(cond, ##__VA_ARGS__)
+     519              : #endif
+     520              : 
+     521              : // Debug only version of TORCH_INTERNAL_ASSERT. This macro only checks in debug
+     522              : // build, and does nothing in release build.  It is appropriate to use
+     523              : // in situations where you want to add an assert to a hotpath, but it is
+     524              : // too expensive to run this assert on production builds.
+     525              : #ifdef NDEBUG
+     526              : // Optimized version - generates no code.
+     527              : #define TORCH_INTERNAL_ASSERT_DEBUG_ONLY(...) \
+     528              :   while (false)                               \
+     529              :   C10_EXPAND_MSVC_WORKAROUND(TORCH_INTERNAL_ASSERT(__VA_ARGS__))
+     530              : #else
+     531              : #define TORCH_INTERNAL_ASSERT_DEBUG_ONLY(...) \
+     532              :   C10_EXPAND_MSVC_WORKAROUND(TORCH_INTERNAL_ASSERT(__VA_ARGS__))
+     533              : #endif
+     534              : 
+     535              : // TODO: We're going to get a lot of similar looking string literals
+     536              : // this way; check if this actually affects binary size.
+     537              : 
+     538              : // Like TORCH_CHECK, but raises LinAlgError instead of Error.
+     539              : #define TORCH_CHECK_LINALG(cond, ...) \
+     540              :   TORCH_CHECK_WITH_MSG(LinAlgError, cond, "LINALG", __VA_ARGS__)
+     541              : 
+     542              : // Like TORCH_CHECK, but raises IndexErrors instead of Errors.
+     543              : #define TORCH_CHECK_INDEX(cond, ...) \
+     544              :   TORCH_CHECK_WITH_MSG(IndexError, cond, "INDEX", __VA_ARGS__)
+     545              : 
+     546              : // Like TORCH_CHECK, but raises ValueErrors instead of Errors.
+     547              : #define TORCH_CHECK_VALUE(cond, ...) \
+     548              :   TORCH_CHECK_WITH_MSG(ValueError, cond, "VALUE", __VA_ARGS__)
+     549              : 
+     550              : // Like TORCH_CHECK, but raises TypeErrors instead of Errors.
+     551              : #define TORCH_CHECK_TYPE(cond, ...) \
+     552              :   TORCH_CHECK_WITH_MSG(TypeError, cond, "TYPE", __VA_ARGS__)
+     553              : 
+     554              : // Like TORCH_CHECK, but raises NotImplementedErrors instead of Errors.
+     555              : #define TORCH_CHECK_NOT_IMPLEMENTED(cond, ...) \
+     556              :   TORCH_CHECK_WITH_MSG(NotImplementedError, cond, "TYPE", __VA_ARGS__)
+     557              : 
+     558              : #ifdef STRIP_ERROR_MESSAGES
+     559              : #define WARNING_MESSAGE_STRING(...) \
+     560              :   ::c10::detail::CompileTimeEmptyString {}
+     561              : #else
+     562              : #define WARNING_MESSAGE_STRING(...) ::c10::str(__VA_ARGS__)
+     563              : #endif
+     564              : 
+     565              : // Report a warning to the user.  Accepts an arbitrary number of extra
+     566              : // arguments which are concatenated into the warning message using operator<<
+     567              : //
+     568              : #ifdef DISABLE_WARN
+     569              : #define _TORCH_WARN_WITH(...) ((void)0);
+     570              : #else
+     571              : #define _TORCH_WARN_WITH(warning_t, ...)                     \
+     572              :   ::c10::warn(::c10::Warning(                                \
+     573              :       warning_t(),                                           \
+     574              :       {__func__, __FILE__, static_cast<uint32_t>(__LINE__)}, \
+     575              :       WARNING_MESSAGE_STRING(__VA_ARGS__),                   \
+     576              :       false));
+     577              : #endif
+     578              : 
+     579              : #define TORCH_WARN(...) _TORCH_WARN_WITH(::c10::UserWarning, __VA_ARGS__);
+     580              : 
+     581              : #define TORCH_WARN_DEPRECATION(...) \
+     582              :   _TORCH_WARN_WITH(::c10::DeprecationWarning, __VA_ARGS__);
+     583              : 
+     584              : // Report a warning to the user only once.  Accepts an arbitrary number of extra
+     585              : // arguments which are concatenated into the warning message using operator<<
+     586              : //
+     587              : #define _TORCH_WARN_ONCE(...)                                             \
+     588              :   C10_UNUSED static const auto C10_ANONYMOUS_VARIABLE(torch_warn_once_) = \
+     589              :       [&] {                                                               \
+     590              :         TORCH_WARN(__VA_ARGS__);                                          \
+     591              :         return true;                                                      \
+     592              :       }()
+     593              : 
+     594              : #ifdef DISABLE_WARN
+     595              : #define TORCH_WARN_ONCE(...) ((void)0);
+     596              : #else
+     597              : #define TORCH_WARN_ONCE(...)                   \
+     598              :   if (::c10::WarningUtils::get_warnAlways()) { \
+     599              :     TORCH_WARN(__VA_ARGS__);                   \
+     600              :   } else {                                     \
+     601              :     _TORCH_WARN_ONCE(__VA_ARGS__);             \
+     602              :   }
+     603              : #endif
+     604              : 
+     605              : // Report an error with a specific argument
+     606              : // NOTE: using the argument name in TORCH_CHECK's message is preferred
+     607              : #define TORCH_CHECK_ARG(cond, argN, ...) \
+     608              :   TORCH_CHECK(cond, "invalid argument ", argN, ": ", __VA_ARGS__)
+     609              : 
+     610              : // ----------------------------------------------------------------------------
+     611              : // Deprecated macros
+     612              : // ----------------------------------------------------------------------------
+     613              : 
+     614              : namespace c10 {
+     615              : namespace detail {
+     616              : 
+     617              : /*
+     618              : // Deprecation disabled until we fix sites in our codebase
+     619              : C10_DEPRECATED_MESSAGE("AT_ERROR(msg) is deprecated, use TORCH_CHECK(false, msg)
+     620              : instead.")
+     621              : */
+     622              : inline void deprecated_AT_ERROR() {}
+     623              : 
+     624              : /*
+     625              : // Deprecation disabled until we fix sites in our codebase
+     626              : C10_DEPRECATED_MESSAGE("AT_ASSERT is deprecated, if you mean to indicate an
+     627              : internal invariant failure, use " \
+     628              :                        "TORCH_INTERNAL_ASSERT instead; if you mean to do user
+     629              : error checking, use " \ "TORCH_CHECK.  See
+     630              : https://github.com/pytorch/pytorch/issues/20287 for more details.")
+     631              : */
+     632            0 : inline void deprecated_AT_ASSERT() {}
+     633              : 
+     634              : /*
+     635              : // Deprecation disabled until we fix sites in our codebase
+     636              : C10_DEPRECATED_MESSAGE("AT_ASSERTM is deprecated, if you mean to indicate an
+     637              : internal invariant failure, use " \
+     638              :                        "TORCH_INTERNAL_ASSERT instead; if you mean to do user
+     639              : error checking, use " \ "TORCH_CHECK.  See
+     640              : https://github.com/pytorch/pytorch/issues/20287 for more details.")
+     641              : */
+     642              : inline void deprecated_AT_ASSERTM() {}
+     643              : 
+     644              : } // namespace detail
+     645              : } // namespace c10
+     646              : 
+     647              : // Deprecated alias; this alias was deprecated because people kept mistakenly
+     648              : // using it for user error checking.  Use TORCH_INTERNAL_ASSERT or TORCH_CHECK
+     649              : // instead. See https://github.com/pytorch/pytorch/issues/20287 for more
+     650              : // details.
+     651              : #define AT_ASSERT(...)                                              \
+     652              :   do {                                                              \
+     653              :     ::c10::detail::deprecated_AT_ASSERT();                          \
+     654              :     C10_EXPAND_MSVC_WORKAROUND(TORCH_INTERNAL_ASSERT(__VA_ARGS__)); \
+     655              :   } while (false)
+     656              : 
+     657              : // Deprecated alias, like AT_ASSERT.  The new TORCH_INTERNAL_ASSERT macro
+     658              : // supports both 0-ary and variadic calls, so having a separate
+     659              : // message-accepting macro is not necessary.
+     660              : //
+     661              : // NB: we MUST include cond explicitly here, as MSVC will miscompile the macro
+     662              : // expansion, shunting all of __VA_ARGS__ to cond.  An alternate workaround
+     663              : // can be seen at
+     664              : // https://stackoverflow.com/questions/5134523/msvc-doesnt-expand-va-args-correctly
+     665              : #define AT_ASSERTM(cond, ...)                                             \
+     666              :   do {                                                                    \
+     667              :     ::c10::detail::deprecated_AT_ASSERTM();                               \
+     668              :     C10_EXPAND_MSVC_WORKAROUND(TORCH_INTERNAL_ASSERT(cond, __VA_ARGS__)); \
+     669              :   } while (false)
+     670              : 
+     671              : // Deprecated alias; this alias was deprecated because it represents extra API
+     672              : // surface that makes it hard for people to understand what macro to use.
+     673              : // Use TORCH_CHECK(false, ...) or TORCH_INTERNAL_ASSERT(false, ...) to
+     674              : // unconditionally fail at a line of code.
+     675              : #define AT_ERROR(...)                                                        \
+     676              :   do {                                                                       \
+     677              :     ::c10::detail::deprecated_AT_ERROR();                                    \
+     678              :     C10_EXPAND_MSVC_WORKAROUND(TORCH_CHECK(false, ::c10::str(__VA_ARGS__))); \
+     679              :   } while (false)
+     680              : 
+     681              : #endif // C10_UTIL_EXCEPTION_H_
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/Half.h.func-c.html b/html/libtorch/include/c10/util/Half.h.func-c.html new file mode 100644 index 0000000..74e2161 --- /dev/null +++ b/html/libtorch/include/c10/util/Half.h.func-c.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/Half.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - Half.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:15.4 %132
Test Date:2024-04-30 13:17:26Functions:25.0 %41
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c109overflowsIlNS_7complexIdEEEENSt9enable_ifIXsrNS_10is_complexIT0_EE5valueEbE4typeES5_0
_ZN3c109overflowsIlbEENSt9enable_ifIXsrSt7is_sameIT0_bE5valueEbE4typeES3_0
_ZN3c109overflowsIldEENSt9enable_ifIXsrSt17is_floating_pointIT0_E5valueEbE4typeES3_0
_ZN3c109overflowsIllEENSt9enable_ifIXaasrSt11is_integralIT0_E5valuentsrSt7is_sameIS3_bE5valueEbE4typeES3_7072
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/Half.h.func.html b/html/libtorch/include/c10/util/Half.h.func.html new file mode 100644 index 0000000..420cf5f --- /dev/null +++ b/html/libtorch/include/c10/util/Half.h.func.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/Half.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - Half.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:15.4 %132
Test Date:2024-04-30 13:17:26Functions:25.0 %41
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c109overflowsIlNS_7complexIdEEEENSt9enable_ifIXsrNS_10is_complexIT0_EE5valueEbE4typeES5_0
_ZN3c109overflowsIlbEENSt9enable_ifIXsrSt7is_sameIT0_bE5valueEbE4typeES3_0
_ZN3c109overflowsIldEENSt9enable_ifIXsrSt17is_floating_pointIT0_E5valueEbE4typeES3_0
_ZN3c109overflowsIllEENSt9enable_ifIXaasrSt11is_integralIT0_E5valuentsrSt7is_sameIS3_bE5valueEbE4typeES3_7072
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/Half.h.gcov.html b/html/libtorch/include/c10/util/Half.h.gcov.html new file mode 100644 index 0000000..30b4f9e --- /dev/null +++ b/html/libtorch/include/c10/util/Half.h.gcov.html @@ -0,0 +1,582 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/Half.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - Half.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:15.4 %132
Test Date:2024-04-30 13:17:26Functions:25.0 %41
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : /// Defines the Half type (half-precision floating-point) including conversions
+       4              : /// to standard C types and basic arithmetic operations. Note that arithmetic
+       5              : /// operations are implemented by converting to floating point and
+       6              : /// performing the operation in float32, instead of using CUDA half intrinsics.
+       7              : /// Most uses of this type within ATen are memory bound, including the
+       8              : /// element-wise kernels, and the half intrinsics aren't efficient on all GPUs.
+       9              : /// If you are writing a compute bound kernel, you can use the CUDA half
+      10              : /// intrinsics directly on the Half type from device code.
+      11              : 
+      12              : #include <c10/macros/Macros.h>
+      13              : #include <c10/util/C++17.h>
+      14              : #include <c10/util/TypeSafeSignMath.h>
+      15              : #include <c10/util/complex.h>
+      16              : #include <c10/util/floating_point_utils.h>
+      17              : #include <type_traits>
+      18              : 
+      19              : #if defined(__cplusplus) && (__cplusplus >= 201103L)
+      20              : #include <cmath>
+      21              : #include <cstdint>
+      22              : #elif !defined(__OPENCL_VERSION__)
+      23              : #include <math.h>
+      24              : #include <stdint.h>
+      25              : #endif
+      26              : 
+      27              : #ifdef _MSC_VER
+      28              : #include <intrin.h>
+      29              : #endif
+      30              : 
+      31              : #include <complex>
+      32              : #include <cstdint>
+      33              : #include <cstring>
+      34              : #include <iosfwd>
+      35              : #include <limits>
+      36              : #include <sstream>
+      37              : #include <stdexcept>
+      38              : #include <string>
+      39              : #include <utility>
+      40              : 
+      41              : #ifdef __CUDACC__
+      42              : #include <cuda_fp16.h>
+      43              : #endif
+      44              : 
+      45              : #ifdef __HIPCC__
+      46              : #include <hip/hip_fp16.h>
+      47              : #endif
+      48              : 
+      49              : #if defined(CL_SYCL_LANGUAGE_VERSION)
+      50              : #include <CL/sycl.hpp> // for SYCL 1.2.1
+      51              : #elif defined(SYCL_LANGUAGE_VERSION)
+      52              : #include <sycl/sycl.hpp> // for SYCL 2020
+      53              : #endif
+      54              : 
+      55              : #include <typeinfo> // operator typeid
+      56              : 
+      57              : namespace c10 {
+      58              : 
+      59              : namespace detail {
+      60              : 
+      61              : /*
+      62              :  * Convert a 16-bit floating-point number in IEEE half-precision format, in bit
+      63              :  * representation, to a 32-bit floating-point number in IEEE single-precision
+      64              :  * format, in bit representation.
+      65              :  *
+      66              :  * @note The implementation doesn't use any floating-point operations.
+      67              :  */
+      68              : inline uint32_t fp16_ieee_to_fp32_bits(uint16_t h) {
+      69              :   /*
+      70              :    * Extend the half-precision floating-point number to 32 bits and shift to the
+      71              :    * upper part of the 32-bit word:
+      72              :    *      +---+-----+------------+-------------------+
+      73              :    *      | S |EEEEE|MM MMMM MMMM|0000 0000 0000 0000|
+      74              :    *      +---+-----+------------+-------------------+
+      75              :    * Bits  31  26-30    16-25            0-15
+      76              :    *
+      77              :    * S - sign bit, E - bits of the biased exponent, M - bits of the mantissa, 0
+      78              :    * - zero bits.
+      79              :    */
+      80              :   const uint32_t w = (uint32_t)h << 16;
+      81              :   /*
+      82              :    * Extract the sign of the input number into the high bit of the 32-bit word:
+      83              :    *
+      84              :    *      +---+----------------------------------+
+      85              :    *      | S |0000000 00000000 00000000 00000000|
+      86              :    *      +---+----------------------------------+
+      87              :    * Bits  31                 0-31
+      88              :    */
+      89              :   const uint32_t sign = w & UINT32_C(0x80000000);
+      90              :   /*
+      91              :    * Extract mantissa and biased exponent of the input number into the bits 0-30
+      92              :    * of the 32-bit word:
+      93              :    *
+      94              :    *      +---+-----+------------+-------------------+
+      95              :    *      | 0 |EEEEE|MM MMMM MMMM|0000 0000 0000 0000|
+      96              :    *      +---+-----+------------+-------------------+
+      97              :    * Bits  30  27-31     17-26            0-16
+      98              :    */
+      99              :   const uint32_t nonsign = w & UINT32_C(0x7FFFFFFF);
+     100              :   /*
+     101              :    * Renorm shift is the number of bits to shift mantissa left to make the
+     102              :    * half-precision number normalized. If the initial number is normalized, some
+     103              :    * of its high 6 bits (sign == 0 and 5-bit exponent) equals one. In this case
+     104              :    * renorm_shift == 0. If the number is denormalize, renorm_shift > 0. Note
+     105              :    * that if we shift denormalized nonsign by renorm_shift, the unit bit of
+     106              :    * mantissa will shift into exponent, turning the biased exponent into 1, and
+     107              :    * making mantissa normalized (i.e. without leading 1).
+     108              :    */
+     109              : #ifdef _MSC_VER
+     110              :   unsigned long nonsign_bsr;
+     111              :   _BitScanReverse(&nonsign_bsr, (unsigned long)nonsign);
+     112              :   uint32_t renorm_shift = (uint32_t)nonsign_bsr ^ 31;
+     113              : #else
+     114              :   uint32_t renorm_shift = __builtin_clz(nonsign);
+     115              : #endif
+     116              :   renorm_shift = renorm_shift > 5 ? renorm_shift - 5 : 0;
+     117              :   /*
+     118              :    * Iff half-precision number has exponent of 15, the addition overflows
+     119              :    * it into bit 31, and the subsequent shift turns the high 9 bits
+     120              :    * into 1. Thus inf_nan_mask == 0x7F800000 if the half-precision number
+     121              :    * had exponent of 15 (i.e. was NaN or infinity) 0x00000000 otherwise
+     122              :    */
+     123              :   const int32_t inf_nan_mask =
+     124              :       ((int32_t)(nonsign + 0x04000000) >> 8) & INT32_C(0x7F800000);
+     125              :   /*
+     126              :    * Iff nonsign is 0, it overflows into 0xFFFFFFFF, turning bit 31
+     127              :    * into 1. Otherwise, bit 31 remains 0. The signed shift right by 31
+     128              :    * broadcasts bit 31 into all bits of the zero_mask. Thus zero_mask ==
+     129              :    * 0xFFFFFFFF if the half-precision number was zero (+0.0h or -0.0h)
+     130              :    * 0x00000000 otherwise
+     131              :    */
+     132              :   const int32_t zero_mask = (int32_t)(nonsign - 1) >> 31;
+     133              :   /*
+     134              :    * 1. Shift nonsign left by renorm_shift to normalize it (if the input
+     135              :    * was denormal)
+     136              :    * 2. Shift nonsign right by 3 so the exponent (5 bits originally)
+     137              :    * becomes an 8-bit field and 10-bit mantissa shifts into the 10 high
+     138              :    * bits of the 23-bit mantissa of IEEE single-precision number.
+     139              :    * 3. Add 0x70 to the exponent (starting at bit 23) to compensate the
+     140              :    * different in exponent bias (0x7F for single-precision number less 0xF
+     141              :    * for half-precision number).
+     142              :    * 4. Subtract renorm_shift from the exponent (starting at bit 23) to
+     143              :    * account for renormalization. As renorm_shift is less than 0x70, this
+     144              :    * can be combined with step 3.
+     145              :    * 5. Binary OR with inf_nan_mask to turn the exponent into 0xFF if the
+     146              :    * input was NaN or infinity.
+     147              :    * 6. Binary ANDNOT with zero_mask to turn the mantissa and exponent
+     148              :    * into zero if the input was zero.
+     149              :    * 7. Combine with the sign of the input number.
+     150              :    */
+     151              :   return sign |
+     152              :       ((((nonsign << renorm_shift >> 3) + ((0x70 - renorm_shift) << 23)) |
+     153              :         inf_nan_mask) &
+     154              :        ~zero_mask);
+     155              : }
+     156              : 
+     157              : /*
+     158              :  * Convert a 16-bit floating-point number in IEEE half-precision format, in bit
+     159              :  * representation, to a 32-bit floating-point number in IEEE single-precision
+     160              :  * format.
+     161              :  *
+     162              :  * @note The implementation relies on IEEE-like (no assumption about rounding
+     163              :  * mode and no operations on denormals) floating-point operations and bitcasts
+     164              :  * between integer and floating-point variables.
+     165              :  */
+     166              : C10_HOST_DEVICE inline float fp16_ieee_to_fp32_value(uint16_t h) {
+     167              :   /*
+     168              :    * Extend the half-precision floating-point number to 32 bits and shift to the
+     169              :    * upper part of the 32-bit word:
+     170              :    *      +---+-----+------------+-------------------+
+     171              :    *      | S |EEEEE|MM MMMM MMMM|0000 0000 0000 0000|
+     172              :    *      +---+-----+------------+-------------------+
+     173              :    * Bits  31  26-30    16-25            0-15
+     174              :    *
+     175              :    * S - sign bit, E - bits of the biased exponent, M - bits of the mantissa, 0
+     176              :    * - zero bits.
+     177              :    */
+     178              :   const uint32_t w = (uint32_t)h << 16;
+     179              :   /*
+     180              :    * Extract the sign of the input number into the high bit of the 32-bit word:
+     181              :    *
+     182              :    *      +---+----------------------------------+
+     183              :    *      | S |0000000 00000000 00000000 00000000|
+     184              :    *      +---+----------------------------------+
+     185              :    * Bits  31                 0-31
+     186              :    */
+     187              :   const uint32_t sign = w & UINT32_C(0x80000000);
+     188              :   /*
+     189              :    * Extract mantissa and biased exponent of the input number into the high bits
+     190              :    * of the 32-bit word:
+     191              :    *
+     192              :    *      +-----+------------+---------------------+
+     193              :    *      |EEEEE|MM MMMM MMMM|0 0000 0000 0000 0000|
+     194              :    *      +-----+------------+---------------------+
+     195              :    * Bits  27-31    17-26            0-16
+     196              :    */
+     197              :   const uint32_t two_w = w + w;
+     198              : 
+     199              :   /*
+     200              :    * Shift mantissa and exponent into bits 23-28 and bits 13-22 so they become
+     201              :    * mantissa and exponent of a single-precision floating-point number:
+     202              :    *
+     203              :    *       S|Exponent |          Mantissa
+     204              :    *      +-+---+-----+------------+----------------+
+     205              :    *      |0|000|EEEEE|MM MMMM MMMM|0 0000 0000 0000|
+     206              :    *      +-+---+-----+------------+----------------+
+     207              :    * Bits   | 23-31   |           0-22
+     208              :    *
+     209              :    * Next, there are some adjustments to the exponent:
+     210              :    * - The exponent needs to be corrected by the difference in exponent bias
+     211              :    * between single-precision and half-precision formats (0x7F - 0xF = 0x70)
+     212              :    * - Inf and NaN values in the inputs should become Inf and NaN values after
+     213              :    * conversion to the single-precision number. Therefore, if the biased
+     214              :    * exponent of the half-precision input was 0x1F (max possible value), the
+     215              :    * biased exponent of the single-precision output must be 0xFF (max possible
+     216              :    * value). We do this correction in two steps:
+     217              :    *   - First, we adjust the exponent by (0xFF - 0x1F) = 0xE0 (see exp_offset
+     218              :    * below) rather than by 0x70 suggested by the difference in the exponent bias
+     219              :    * (see above).
+     220              :    *   - Then we multiply the single-precision result of exponent adjustment by
+     221              :    * 2**(-112) to reverse the effect of exponent adjustment by 0xE0 less the
+     222              :    * necessary exponent adjustment by 0x70 due to difference in exponent bias.
+     223              :    *     The floating-point multiplication hardware would ensure than Inf and
+     224              :    * NaN would retain their value on at least partially IEEE754-compliant
+     225              :    * implementations.
+     226              :    *
+     227              :    * Note that the above operations do not handle denormal inputs (where biased
+     228              :    * exponent == 0). However, they also do not operate on denormal inputs, and
+     229              :    * do not produce denormal results.
+     230              :    */
+     231              :   constexpr uint32_t exp_offset = UINT32_C(0xE0) << 23;
+     232              :   // const float exp_scale = 0x1.0p-112f;
+     233              :   constexpr uint32_t scale_bits = (uint32_t)15 << 23;
+     234              :   float exp_scale_val;
+     235              :   std::memcpy(&exp_scale_val, &scale_bits, sizeof(exp_scale_val));
+     236              :   const float exp_scale = exp_scale_val;
+     237              :   const float normalized_value =
+     238              :       fp32_from_bits((two_w >> 4) + exp_offset) * exp_scale;
+     239              : 
+     240              :   /*
+     241              :    * Convert denormalized half-precision inputs into single-precision results
+     242              :    * (always normalized). Zero inputs are also handled here.
+     243              :    *
+     244              :    * In a denormalized number the biased exponent is zero, and mantissa has
+     245              :    * on-zero bits. First, we shift mantissa into bits 0-9 of the 32-bit word.
+     246              :    *
+     247              :    *                  zeros           |  mantissa
+     248              :    *      +---------------------------+------------+
+     249              :    *      |0000 0000 0000 0000 0000 00|MM MMMM MMMM|
+     250              :    *      +---------------------------+------------+
+     251              :    * Bits             10-31                0-9
+     252              :    *
+     253              :    * Now, remember that denormalized half-precision numbers are represented as:
+     254              :    *    FP16 = mantissa * 2**(-24).
+     255              :    * The trick is to construct a normalized single-precision number with the
+     256              :    * same mantissa and thehalf-precision input and with an exponent which would
+     257              :    * scale the corresponding mantissa bits to 2**(-24). A normalized
+     258              :    * single-precision floating-point number is represented as: FP32 = (1 +
+     259              :    * mantissa * 2**(-23)) * 2**(exponent - 127) Therefore, when the biased
+     260              :    * exponent is 126, a unit change in the mantissa of the input denormalized
+     261              :    * half-precision number causes a change of the constructed single-precision
+     262              :    * number by 2**(-24), i.e. the same amount.
+     263              :    *
+     264              :    * The last step is to adjust the bias of the constructed single-precision
+     265              :    * number. When the input half-precision number is zero, the constructed
+     266              :    * single-precision number has the value of FP32 = 1 * 2**(126 - 127) =
+     267              :    * 2**(-1) = 0.5 Therefore, we need to subtract 0.5 from the constructed
+     268              :    * single-precision number to get the numerical equivalent of the input
+     269              :    * half-precision number.
+     270              :    */
+     271              :   constexpr uint32_t magic_mask = UINT32_C(126) << 23;
+     272              :   constexpr float magic_bias = 0.5f;
+     273              :   const float denormalized_value =
+     274              :       fp32_from_bits((two_w >> 17) | magic_mask) - magic_bias;
+     275              : 
+     276              :   /*
+     277              :    * - Choose either results of conversion of input as a normalized number, or
+     278              :    * as a denormalized number, depending on the input exponent. The variable
+     279              :    * two_w contains input exponent in bits 27-31, therefore if its smaller than
+     280              :    * 2**27, the input is either a denormal number, or zero.
+     281              :    * - Combine the result of conversion of exponent and mantissa with the sign
+     282              :    * of the input number.
+     283              :    */
+     284              :   constexpr uint32_t denormalized_cutoff = UINT32_C(1) << 27;
+     285              :   const uint32_t result = sign |
+     286              :       (two_w < denormalized_cutoff ? fp32_to_bits(denormalized_value)
+     287              :                                    : fp32_to_bits(normalized_value));
+     288              :   return fp32_from_bits(result);
+     289              : }
+     290              : 
+     291              : /*
+     292              :  * Convert a 32-bit floating-point number in IEEE single-precision format to a
+     293              :  * 16-bit floating-point number in IEEE half-precision format, in bit
+     294              :  * representation.
+     295              :  *
+     296              :  * @note The implementation relies on IEEE-like (no assumption about rounding
+     297              :  * mode and no operations on denormals) floating-point operations and bitcasts
+     298              :  * between integer and floating-point variables.
+     299              :  */
+     300              : inline uint16_t fp16_ieee_from_fp32_value(float f) {
+     301              :   // const float scale_to_inf = 0x1.0p+112f;
+     302              :   // const float scale_to_zero = 0x1.0p-110f;
+     303              :   constexpr uint32_t scale_to_inf_bits = (uint32_t)239 << 23;
+     304              :   constexpr uint32_t scale_to_zero_bits = (uint32_t)17 << 23;
+     305              :   float scale_to_inf_val, scale_to_zero_val;
+     306              :   std::memcpy(&scale_to_inf_val, &scale_to_inf_bits, sizeof(scale_to_inf_val));
+     307              :   std::memcpy(
+     308              :       &scale_to_zero_val, &scale_to_zero_bits, sizeof(scale_to_zero_val));
+     309              :   const float scale_to_inf = scale_to_inf_val;
+     310              :   const float scale_to_zero = scale_to_zero_val;
+     311              : 
+     312              : #if defined(_MSC_VER) && _MSC_VER == 1916
+     313              :   float base = ((signbit(f) != 0 ? -f : f) * scale_to_inf) * scale_to_zero;
+     314              : #else
+     315              :   float base = (fabsf(f) * scale_to_inf) * scale_to_zero;
+     316              : #endif
+     317              : 
+     318              :   const uint32_t w = fp32_to_bits(f);
+     319              :   const uint32_t shl1_w = w + w;
+     320              :   const uint32_t sign = w & UINT32_C(0x80000000);
+     321              :   uint32_t bias = shl1_w & UINT32_C(0xFF000000);
+     322              :   if (bias < UINT32_C(0x71000000)) {
+     323              :     bias = UINT32_C(0x71000000);
+     324              :   }
+     325              : 
+     326              :   base = fp32_from_bits((bias >> 1) + UINT32_C(0x07800000)) + base;
+     327              :   const uint32_t bits = fp32_to_bits(base);
+     328              :   const uint32_t exp_bits = (bits >> 13) & UINT32_C(0x00007C00);
+     329              :   const uint32_t mantissa_bits = bits & UINT32_C(0x00000FFF);
+     330              :   const uint32_t nonsign = exp_bits + mantissa_bits;
+     331              :   return static_cast<uint16_t>(
+     332              :       (sign >> 16) |
+     333              :       (shl1_w > UINT32_C(0xFF000000) ? UINT16_C(0x7E00) : nonsign));
+     334              : }
+     335              : 
+     336              : } // namespace detail
+     337              : 
+     338              : struct alignas(2) Half {
+     339              :   unsigned short x;
+     340              : 
+     341              :   struct from_bits_t {};
+     342              :   C10_HOST_DEVICE static constexpr from_bits_t from_bits() {
+     343              :     return from_bits_t();
+     344              :   }
+     345              : 
+     346              :   // HIP wants __host__ __device__ tag, CUDA does not
+     347              : #if defined(USE_ROCM)
+     348              :   C10_HOST_DEVICE Half() = default;
+     349              : #else
+     350              :   Half() = default;
+     351              : #endif
+     352              : 
+     353              :   constexpr C10_HOST_DEVICE Half(unsigned short bits, from_bits_t) : x(bits){};
+     354              :   inline C10_HOST_DEVICE Half(float value);
+     355              :   inline C10_HOST_DEVICE operator float() const;
+     356              : 
+     357              : #if defined(__CUDACC__) || defined(__HIPCC__)
+     358              :   inline C10_HOST_DEVICE Half(const __half& value);
+     359              :   inline C10_HOST_DEVICE operator __half() const;
+     360              : #endif
+     361              : #ifdef SYCL_LANGUAGE_VERSION
+     362              :   inline C10_HOST_DEVICE Half(const sycl::half& value);
+     363              :   inline C10_HOST_DEVICE operator sycl::half() const;
+     364              : #endif
+     365              : };
+     366              : 
+     367              : // TODO : move to complex.h
+     368              : template <>
+     369              : struct alignas(4) complex<Half> {
+     370              :   Half real_;
+     371              :   Half imag_;
+     372              : 
+     373              :   // Constructors
+     374              :   complex() = default;
+     375              :   // Half constructor is not constexpr so the following constructor can't
+     376              :   // be constexpr
+     377              :   C10_HOST_DEVICE explicit inline complex(const Half& real, const Half& imag)
+     378              :       : real_(real), imag_(imag) {}
+     379              :   C10_HOST_DEVICE inline complex(const c10::complex<float>& value)
+     380              :       : real_(value.real()), imag_(value.imag()) {}
+     381              : 
+     382              :   // Conversion operator
+     383              :   inline C10_HOST_DEVICE operator c10::complex<float>() const {
+     384              :     return {real_, imag_};
+     385              :   }
+     386              : 
+     387              :   constexpr C10_HOST_DEVICE Half real() const {
+     388              :     return real_;
+     389              :   }
+     390              :   constexpr C10_HOST_DEVICE Half imag() const {
+     391              :     return imag_;
+     392              :   }
+     393              : 
+     394              :   C10_HOST_DEVICE complex<Half>& operator+=(const complex<Half>& other) {
+     395              :     real_ = static_cast<float>(real_) + static_cast<float>(other.real_);
+     396              :     imag_ = static_cast<float>(imag_) + static_cast<float>(other.imag_);
+     397              :     return *this;
+     398              :   }
+     399              : 
+     400              :   C10_HOST_DEVICE complex<Half>& operator-=(const complex<Half>& other) {
+     401              :     real_ = static_cast<float>(real_) - static_cast<float>(other.real_);
+     402              :     imag_ = static_cast<float>(imag_) - static_cast<float>(other.imag_);
+     403              :     return *this;
+     404              :   }
+     405              : 
+     406              :   C10_HOST_DEVICE complex<Half>& operator*=(const complex<Half>& other) {
+     407              :     auto a = static_cast<float>(real_);
+     408              :     auto b = static_cast<float>(imag_);
+     409              :     auto c = static_cast<float>(other.real());
+     410              :     auto d = static_cast<float>(other.imag());
+     411              :     real_ = a * c - b * d;
+     412              :     imag_ = a * d + b * c;
+     413              :     return *this;
+     414              :   }
+     415              : };
+     416              : 
+     417              : // In some versions of MSVC, there will be a compiler error when building.
+     418              : // C4146: unary minus operator applied to unsigned type, result still unsigned
+     419              : // C4804: unsafe use of type 'bool' in operation
+     420              : // It can be addressed by disabling the following warning.
+     421              : #ifdef _MSC_VER
+     422              : #pragma warning(push)
+     423              : #pragma warning(disable : 4146)
+     424              : #pragma warning(disable : 4804)
+     425              : #pragma warning(disable : 4018)
+     426              : #endif
+     427              : 
+     428              : // The overflow checks may involve float to int conversion which may
+     429              : // trigger precision loss warning. Re-enable the warning once the code
+     430              : // is fixed. See T58053069.
+     431              : C10_CLANG_DIAGNOSTIC_PUSH()
+     432              : #if C10_CLANG_HAS_WARNING("-Wimplicit-float-conversion")
+     433              : C10_CLANG_DIAGNOSTIC_IGNORE("-Wimplicit-float-conversion")
+     434              : #endif
+     435              : 
+     436              : // bool can be converted to any type.
+     437              : // Without specializing on bool, in pytorch_linux_trusty_py2_7_9_build:
+     438              : // `error: comparison of constant '255' with boolean expression is always false`
+     439              : // for `f > limit::max()` below
+     440              : template <typename To, typename From>
+     441            0 : typename std::enable_if<std::is_same<From, bool>::value, bool>::type overflows(
+     442              :     From /*f*/) {
+     443            0 :   return false;
+     444              : }
+     445              : 
+     446              : // skip isnan and isinf check for integral types
+     447              : template <typename To, typename From>
+     448              : typename std::enable_if<
+     449              :     std::is_integral<From>::value && !std::is_same<From, bool>::value,
+     450              :     bool>::type
+     451         7072 : overflows(From f) {
+     452              :   using limit = std::numeric_limits<typename scalar_value_type<To>::type>;
+     453              :   if (!limit::is_signed && std::numeric_limits<From>::is_signed) {
+     454              :     // allow for negative numbers to wrap using two's complement arithmetic.
+     455              :     // For example, with uint8, this allows for `a - b` to be treated as
+     456              :     // `a + 255 * b`.
+     457              :     return greater_than_max<To>(f) ||
+     458              :         (c10::is_negative(f) && -static_cast<uint64_t>(f) > limit::max());
+     459              :   } else {
+     460         7072 :     return c10::less_than_lowest<To>(f) || greater_than_max<To>(f);
+     461              :   }
+     462              : }
+     463              : 
+     464              : template <typename To, typename From>
+     465              : typename std::enable_if<std::is_floating_point<From>::value, bool>::type
+     466            0 : overflows(From f) {
+     467              :   using limit = std::numeric_limits<typename scalar_value_type<To>::type>;
+     468              :   if (limit::has_infinity && std::isinf(static_cast<double>(f))) {
+     469              :     return false;
+     470              :   }
+     471            0 :   if (!limit::has_quiet_NaN && (f != f)) {
+     472            0 :     return true;
+     473              :   }
+     474            0 :   return f < limit::lowest() || f > limit::max();
+     475              : }
+     476              : 
+     477              : C10_CLANG_DIAGNOSTIC_POP()
+     478              : 
+     479              : #ifdef _MSC_VER
+     480              : #pragma warning(pop)
+     481              : #endif
+     482              : 
+     483              : template <typename To, typename From>
+     484            0 : typename std::enable_if<is_complex<From>::value, bool>::type overflows(From f) {
+     485              :   // casts from complex to real are considered to overflow if the
+     486              :   // imaginary component is non-zero
+     487            0 :   if (!is_complex<To>::value && f.imag() != 0) {
+     488            0 :     return true;
+     489              :   }
+     490              :   // Check for overflow componentwise
+     491              :   // (Technically, the imag overflow check is guaranteed to be false
+     492              :   // when !is_complex<To>, but any optimizer worth its salt will be
+     493              :   // able to figure it out.)
+     494              :   return overflows<
+     495              :              typename scalar_value_type<To>::type,
+     496            0 :              typename From::value_type>(f.real()) ||
+     497              :       overflows<
+     498              :              typename scalar_value_type<To>::type,
+     499            0 :              typename From::value_type>(f.imag());
+     500              : }
+     501              : 
+     502              : C10_API std::ostream& operator<<(std::ostream& out, const Half& value);
+     503              : 
+     504              : } // namespace c10
+     505              : 
+     506              : #include <c10/util/Half-inl.h> // IWYU pragma: keep
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/Optional.h.func-c.html b/html/libtorch/include/c10/util/Optional.h.func-c.html new file mode 100644 index 0000000..bd1b48a --- /dev/null +++ b/html/libtorch/include/c10/util/Optional.h.func-c.html @@ -0,0 +1,1349 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/Optional.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - Optional.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:89.0 %9181
Test Date:2024-04-30 13:17:26Functions:76.4 %157120
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1013value_or_elseINS_6DeviceEZNS_17device_or_defaultENS_8optionalIS1_EEEUlvE_EET_RKNS2_IS5_EEOT0_0
_ZN3c1019bad_optional_accessC2EPKc0
_ZN3c107detail_7convertINS_6DeviceEEET_S3_0
_ZNKR3c108optionalINS_6DeviceEE13contained_valEv0
_ZNKR3c108optionalINS_6DeviceEEdeEv0
_ZZNKR3c108optionalINS_6DeviceEEdeEvENKUlvE_clEv0
_ZNO3c108optionalIbE5valueEv1020
_ZNO3c108optionalIbE5valueEv0
_ZNO3c108optionalINS_6SymIntEE5valueEv1020
_ZN3c1022arrayref_optional_baseINS_8ArrayRefIlEEE7storageC2IJRKS2_EEEDpOT_14194
_ZN3c1022arrayref_optional_baseINS_8ArrayRefIlEEEC2ERKS2_14194
_ZN3c1022arrayref_optional_baseINS_8ArrayRefIlEEE7storage16setUninitializedEv16480
_ZN3c1022arrayref_optional_baseINS_8ArrayRefIlEEE7storageC2Ev16480
_ZN3c1022arrayref_optional_baseINS_8ArrayRefIlEEEC2Ev16480
_ZN3c108optionalINS_8ArrayRefIlEEEC2Ev16480
_ZN3c1013optional_baseIN2at6TensorEEC2ERKS2_31316
_ZN3c1045trivially_copyable_optimization_optional_baseINS_6DeviceEEC2IJRKNS_10DeviceTypeEEEENS_10in_place_tEDpOT_401318
_ZN3c108optionalINS_6DeviceEEC2IJRKNS_10DeviceTypeEEEENS_10in_place_tEDpOT_401318
_ZN3c10eqIbEEbRKNS_8optionalIT_EENS_9nullopt_tE401402
_ZN3c1013make_optionalIRKbEENS_8optionalINSt5decayIT_E4typeEEEOS5_418776
_ZN3c1013make_optionalIRKNS_12MemoryFormatEEENS_8optionalINSt5decayIT_E4typeEEEOS6_0
_ZN3c1013make_optionalIRKNS_6DeviceEEENS_8optionalINSt5decayIT_E4typeEEEOS6_0
_ZN3c1013make_optionalIRKNS_6LayoutEEENS_8optionalINSt5decayIT_E4typeEEEOS6_0
_ZN3c1013make_optionalIRKbEENS_8optionalINSt5decayIT_E4typeEEEOS5_0
_ZN3c1013make_optionalIRKN6caffe28TypeMetaEEENS_8optionalINSt5decayIT_E4typeEEEOS7_418776
_ZN3c108optionalIN6caffe28TypeMetaEE7dataptrEv418776
_ZN3c108optionalIN6caffe28TypeMetaEEptEv418776
_ZN3c1045trivially_copyable_optimization_optional_baseIbEC2ERKb814728
_ZN3c1045trivially_copyable_optimization_optional_baseINS_12MemoryFormatEEC2ERKS1_0
_ZN3c1045trivially_copyable_optimization_optional_baseINS_6DeviceEEC2ERKS1_0
_ZN3c1045trivially_copyable_optimization_optional_baseINS_6LayoutEEC2ERKS1_0
_ZN3c1045trivially_copyable_optimization_optional_baseIbEC2ERKb0
_ZN3c1045trivially_copyable_optimization_optional_baseINS_10ScalarTypeEEC2ERKS1_395952
_ZN3c1045trivially_copyable_optimization_optional_baseIN6caffe28TypeMetaEEC2ERKS2_418776
_ZN3c1019constexpr_storage_tIbEC1ENS_14trivial_init_tE2945770
_ZN3c1019constexpr_storage_tIN6caffe28TypeMetaEEC2ENS_14trivial_init_tE68
_ZN3c1019constexpr_storage_tIlEC1ENS_14trivial_init_tE402
_ZN3c1019constexpr_storage_tINS_10ScalarTypeEEC2ENS_14trivial_init_tE48258
_ZN3c1019constexpr_storage_tINS_6DeviceEEC2ENS_14trivial_init_tE418844
_ZN3c1019constexpr_storage_tINS_6LayoutEEC2ENS_14trivial_init_tE418844
_ZN3c1019constexpr_storage_tINS_12MemoryFormatEEC2ENS_14trivial_init_tE820264
_ZN3c1019constexpr_storage_tIbEC1ENS_14trivial_init_tE1239090
_ZN3c1045trivially_copyable_optimization_optional_baseIbEC2Ev2945770
_ZN3c1045trivially_copyable_optimization_optional_baseIN6caffe28TypeMetaEEC2Ev68
_ZN3c1045trivially_copyable_optimization_optional_baseIlEC2Ev402
_ZN3c1045trivially_copyable_optimization_optional_baseINS_10ScalarTypeEEC2Ev48258
_ZN3c1045trivially_copyable_optimization_optional_baseINS_6DeviceEEC2Ev418844
_ZN3c1045trivially_copyable_optimization_optional_baseINS_6LayoutEEC2Ev418844
_ZN3c1045trivially_copyable_optimization_optional_baseINS_12MemoryFormatEEC2Ev820264
_ZN3c1045trivially_copyable_optimization_optional_baseIbEC2Ev1239090
_ZN3c1045trivially_copyable_optimization_optional_baseIlEC2EOl91472940
_ZN3c1045trivially_copyable_optimization_optional_baseINS_6DeviceEEC2EOS1_0
_ZN3c1045trivially_copyable_optimization_optional_baseIlEC2EOl1054
_ZN3c1045trivially_copyable_optimization_optional_baseINS_10ScalarTypeEEC2EOS1_441600
_ZN3c1045trivially_copyable_optimization_optional_baseIN6caffe28TypeMetaEEC2EOS2_91030286
_ZNK3c108optionalIbEcvbEv92670626
_ZNK3c108optionalINS_6DeviceEEcvbEv401318
_ZNK3c108optionalINS_10ScalarTypeEEcvbEv418776
_ZNK3c108optionalIbEcvbEv820246
_ZNK3c108optionalIN6caffe28TypeMetaEEcvbEv91030286
_ZN3c1019constexpr_storage_tIlEC2IJlEEEDpOT_92688986
_ZN3c1019constexpr_storage_tINS_12MemoryFormatEEC2IJRKS1_EEEDpOT_0
_ZN3c1019constexpr_storage_tINS_6DeviceEEC2IJRKS1_EEEDpOT_0
_ZN3c1019constexpr_storage_tINS_6DeviceEEC2IJS1_EEEDpOT_0
_ZN3c1019constexpr_storage_tINS_6LayoutEEC2IJRKS1_EEEDpOT_0
_ZN3c1019constexpr_storage_tIbEC2IJRKbEEEDpOT_0
_ZN3c1019constexpr_storage_tIlEC2IJlEEEDpOT_1054
_ZN3c1019constexpr_storage_tINS_10ScalarTypeEEC2IJRKS1_EEEDpOT_395952
_ZN3c1019constexpr_storage_tINS_6DeviceEEC2IJRKNS_10DeviceTypeEEEEDpOT_401318
_ZN3c1019constexpr_storage_tIN6caffe28TypeMetaEEC2IJRKS2_EEEDpOT_418776
_ZN3c1019constexpr_storage_tINS_10ScalarTypeEEC2IJS1_EEEDpOT_441600
_ZN3c1019constexpr_storage_tIN6caffe28TypeMetaEEC2IJS2_EEEDpOT_91030286
_ZN3c1013optional_baseIN2at6TensorEE7dataptrEv105276376
_ZN3c1013optional_baseIN2at6TensorEEC2EOS3_105276376
_ZN3c108optionalIN2at6TensorEEC2EOS3_105276376
_ZN3c1013optional_baseINS_6SymIntEEC2EOS1_105277396
_ZN3c1013optional_baseINS_6SymIntEEC2EOS1_1020
_ZN3c1013optional_baseIN2at6TensorEEC2EOS2_105276376
_ZN3c109storage_tINS_6SymIntEEC2IJS1_EEEDpOT_105308712
_ZN3c109storage_tINS_6SymIntEEC2IJS1_EEEDpOT_1020
_ZN3c109storage_tIN2at6TensorEEC2IJRKS2_EEEDpOT_31316
_ZN3c109storage_tIN2at6TensorEEC2IJS2_EEEDpOT_105276376
_ZN3c1013optional_baseINS_6SymIntEEC2Ev110924592
_ZN3c1013optional_baseIN2at6TensorEEC2Ev0
_ZN3c1013optional_baseINS_6SymIntEEC2Ev110924592
_ZN3c108optionalIbEC2ENS_9nullopt_tE113870362
_ZN3c108optionalIN2at6TensorEEC2ENS_9nullopt_tE0
_ZN3c108optionalIN6caffe28TypeMetaEEC2ENS_9nullopt_tE68
_ZN3c108optionalIlEC2ENS_9nullopt_tE402
_ZN3c108optionalINS_10ScalarTypeEEC2ENS_9nullopt_tE48258
_ZN3c108optionalINS_6DeviceEEC2ENS_9nullopt_tE418844
_ZN3c108optionalINS_6LayoutEEC2ENS_9nullopt_tE418844
_ZN3c108optionalINS_12MemoryFormatEEC2ENS_9nullopt_tE820264
_ZN3c108optionalIbEC2ENS_9nullopt_tE1239090
_ZN3c108optionalINS_6SymIntEEC2ENS_9nullopt_tE110924592
_ZNK3c1045trivially_copyable_optimization_optional_baseIbE11initializedEv185760028
_ZNK3c1045trivially_copyable_optimization_optional_baseINS_12MemoryFormatEE11initializedEv401402
_ZNK3c1045trivially_copyable_optimization_optional_baseINS_6DeviceEE11initializedEv802636
_ZNK3c1045trivially_copyable_optimization_optional_baseIbE11initializedEv820246
_ZNK3c1045trivially_copyable_optimization_optional_baseINS_10ScalarTypeEE11initializedEv837552
_ZNK3c1045trivially_copyable_optimization_optional_baseIN6caffe28TypeMetaEE11initializedEv182898192
_ZN3c1014constexpr_moveIRlEEONSt16remove_referenceIT_E4typeEOS3_196750336
_ZN3c1014constexpr_moveIRNS_6DeviceEEEONSt16remove_referenceIT_E4typeEOS4_0
_ZN3c1014constexpr_moveIRNS_6SymIntEEEONSt16remove_referenceIT_E4typeEOS4_1020
_ZN3c1014constexpr_moveIRlEEONSt16remove_referenceIT_E4typeEOS3_1054
_ZN3c1014constexpr_moveIRNS_10ScalarTypeEEEONSt16remove_referenceIT_E4typeEOS4_441600
_ZN3c1014constexpr_moveIRN6caffe28TypeMetaEEEONSt16remove_referenceIT_E4typeEOS5_91030286
_ZN3c1014constexpr_moveIRN2at6TensorEEEONSt16remove_referenceIT_E4typeEOS5_105276376
_ZNR3c108optionalIbEdeEv197126756
_ZNR3c108optionalIbEdeEv0
_ZNR3c108optionalINS_6DeviceEEdeEv401318
_ZNR3c108optionalINS_10ScalarTypeEEdeEv418776
_ZNR3c108optionalIN6caffe28TypeMetaEEdeEv91030286
_ZNR3c108optionalIN2at6TensorEEdeEv105276376
_ZNR3c108optionalIbE13contained_valEv197127776
_ZNR3c108optionalIbE13contained_valEv0
_ZNR3c108optionalINS_6SymIntEE13contained_valEv1020
_ZNR3c108optionalINS_6DeviceEE13contained_valEv401318
_ZNR3c108optionalINS_10ScalarTypeEE13contained_valEv418776
_ZNR3c108optionalIN6caffe28TypeMetaEE13contained_valEv91030286
_ZNR3c108optionalIN2at6TensorEE13contained_valEv105276376
_ZN3c108optionalIlEC2IiLb0EEEOT_197610574
_ZN3c108optionalINS_12MemoryFormatEEC2IRKS1_Lb0EEEOT_0
_ZN3c108optionalINS_6DeviceEEC2IRKS1_Lb0EEEOT_0
_ZN3c108optionalINS_6DeviceEEC2IS1_Lb0EEEOT_0
_ZN3c108optionalINS_6LayoutEEC2IRKS1_Lb0EEEOT_0
_ZN3c108optionalIbEC2IRKbLb0EEEOT_0
_ZN3c108optionalINS_6SymIntEEC2IiLb0EEEOT_510
_ZN3c108optionalINS_6SymIntEEC2IlLb0EEEOT_510
_ZN3c108optionalIlEC2IiLb0EEEOT_1054
_ZN3c108optionalINS_8ArrayRefIlEEEC2IRKlLb0EEEOT_14194
_ZN3c108optionalIN2at6TensorEEC2IRKS2_Lb0EEEOT_31316
_ZN3c108optionalINS_10ScalarTypeEEC2IRS1_Lb0EEEOT_395952
_ZN3c108optionalIN6caffe28TypeMetaEEC2IRKS2_Lb0EEEOT_418776
_ZN3c108optionalINS_10ScalarTypeEEC2IS1_Lb0EEEOT_441600
_ZN3c108optionalIN6caffe28TypeMetaEEC2IS2_Lb0EEEOT_91030286
_ZN3c108optionalIN2at6TensorEEC2IS2_Lb0EEEOT_105276376
_ZN3c1017constexpr_forwardIlEEOT_RNSt16remove_referenceIS1_E4typeE199233304
_ZN3c1017constexpr_forwardINS_6DeviceEEEOT_RNSt16remove_referenceIS2_E4typeE0
_ZN3c1017constexpr_forwardIRKNS_12MemoryFormatEEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZN3c1017constexpr_forwardIRKNS_6DeviceEEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZN3c1017constexpr_forwardIRKNS_6LayoutEEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZN3c1017constexpr_forwardIRKbEEOT_RNSt16remove_referenceIS3_E4typeE0
_ZN3c1017constexpr_forwardINS_6SymIntEEEOT_RNSt16remove_referenceIS2_E4typeE1020
_ZN3c1017constexpr_forwardIlEEOT_RNSt16remove_referenceIS1_E4typeE1054
_ZN3c1017constexpr_forwardIRKNS_8ArrayRefIlEEEEOT_RNSt16remove_referenceIS5_E4typeE14194
_ZN3c1017constexpr_forwardIRKN2at6TensorEEEOT_RNSt16remove_referenceIS5_E4typeE31316
_ZN3c1017constexpr_forwardIRKNS_10ScalarTypeEEEOT_RNSt16remove_referenceIS4_E4typeE395952
_ZN3c1017constexpr_forwardINS_10ScalarTypeEEEOT_RNSt16remove_referenceIS2_E4typeE441600
_ZN3c1017constexpr_forwardIRKN6caffe28TypeMetaEEEOT_RNSt16remove_referenceIS5_E4typeE837552
_ZN3c1017constexpr_forwardIRKNS_10DeviceTypeEEEOT_RNSt16remove_referenceIS4_E4typeE1203954
_ZN3c1017constexpr_forwardIN6caffe28TypeMetaEEEOT_RNSt16remove_referenceIS3_E4typeE91030286
_ZN3c1017constexpr_forwardIN2at6TensorEEEOT_RNSt16remove_referenceIS3_E4typeE105276376
_ZN3c109storage_tINS_6SymIntEEC2ENS_14trivial_init_tE216200968
_ZN3c109storage_tIN2at6TensorEEC2ENS_14trivial_init_tE105276376
_ZN3c109storage_tINS_6SymIntEEC2ENS_14trivial_init_tE110924592
_ZNK3c108optionalINS_6DeviceEE9has_valueEv217022234
_ZNK3c108optionalINS_6DeviceEE9has_valueEv0
_ZNK3c108optionalINS_12MemoryFormatEE9has_valueEv401402
_ZNK3c108optionalIN6caffe28TypeMetaEE9has_valueEv418844
_ZNK3c108optionalIN2at6TensorEE9has_valueEv105276376
_ZNK3c108optionalINS_6SymIntEE9has_valueEv110925612
_ZNK3c1013optional_baseINS_6SymIntEE11initializedEv321479384
_ZNK3c1013optional_baseINS_6SymIntEE11initializedEv110926632
_ZNK3c1013optional_baseIN2at6TensorEE11initializedEv210552752
_ZN3c1013optional_baseINS_6SymIntEED2Ev321509680
_ZN3c1013optional_baseINS_6SymIntEED2Ev110925612
_ZN3c1013optional_baseIN2at6TensorEED2Ev210584068
_ZN3c108optionalINS_6SymIntEED2Ev321509680
_ZN3c108optionalINS_6SymIntEED2Ev110925612
_ZN3c108optionalIN2at6TensorEED2Ev210584068
_ZN3c109storage_tINS_6SymIntEED2Ev321509680
_ZN3c109storage_tINS_6SymIntEED2Ev110925612
_ZN3c109storage_tIN2at6TensorEED2Ev210584068
_ZNK3c108optionalIbE11initializedEv507239412
_ZNK3c108optionalINS_12MemoryFormatEE11initializedEv401402
_ZNK3c108optionalINS_6DeviceEE11initializedEv802636
_ZNK3c108optionalIbE11initializedEv820246
_ZNK3c108optionalINS_10ScalarTypeEE11initializedEv837552
_ZNK3c108optionalINS_6SymIntEE11initializedEv110926632
_ZNK3c108optionalIN6caffe28TypeMetaEE11initializedEv182898192
_ZNK3c108optionalIN2at6TensorEE11initializedEv210552752
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/Optional.h.func.html b/html/libtorch/include/c10/util/Optional.h.func.html new file mode 100644 index 0000000..4ee50a6 --- /dev/null +++ b/html/libtorch/include/c10/util/Optional.h.func.html @@ -0,0 +1,1349 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/Optional.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - Optional.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:89.0 %9181
Test Date:2024-04-30 13:17:26Functions:76.4 %157120
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1013make_optionalIRKbEENS_8optionalINSt5decayIT_E4typeEEEOS5_418776
_ZN3c1013make_optionalIRKN6caffe28TypeMetaEEENS_8optionalINSt5decayIT_E4typeEEEOS7_418776
_ZN3c1013make_optionalIRKNS_12MemoryFormatEEENS_8optionalINSt5decayIT_E4typeEEEOS6_0
_ZN3c1013make_optionalIRKNS_6DeviceEEENS_8optionalINSt5decayIT_E4typeEEEOS6_0
_ZN3c1013make_optionalIRKNS_6LayoutEEENS_8optionalINSt5decayIT_E4typeEEEOS6_0
_ZN3c1013make_optionalIRKbEENS_8optionalINSt5decayIT_E4typeEEEOS5_0
_ZN3c1013optional_baseIN2at6TensorEE7dataptrEv105276376
_ZN3c1013optional_baseIN2at6TensorEEC2EOS3_105276376
_ZN3c1013optional_baseIN2at6TensorEEC2ERKS2_31316
_ZN3c1013optional_baseINS_6SymIntEEC2EOS1_105277396
_ZN3c1013optional_baseIN2at6TensorEEC2EOS2_105276376
_ZN3c1013optional_baseINS_6SymIntEEC2EOS1_1020
_ZN3c1013optional_baseINS_6SymIntEEC2Ev110924592
_ZN3c1013optional_baseIN2at6TensorEEC2Ev0
_ZN3c1013optional_baseINS_6SymIntEEC2Ev110924592
_ZN3c1013optional_baseINS_6SymIntEED2Ev321509680
_ZN3c1013optional_baseIN2at6TensorEED2Ev210584068
_ZN3c1013optional_baseINS_6SymIntEED2Ev110925612
_ZN3c1013value_or_elseINS_6DeviceEZNS_17device_or_defaultENS_8optionalIS1_EEEUlvE_EET_RKNS2_IS5_EEOT0_0
_ZN3c1014constexpr_moveIRlEEONSt16remove_referenceIT_E4typeEOS3_196750336
_ZN3c1014constexpr_moveIRN2at6TensorEEEONSt16remove_referenceIT_E4typeEOS5_105276376
_ZN3c1014constexpr_moveIRN6caffe28TypeMetaEEEONSt16remove_referenceIT_E4typeEOS5_91030286
_ZN3c1014constexpr_moveIRNS_10ScalarTypeEEEONSt16remove_referenceIT_E4typeEOS4_441600
_ZN3c1014constexpr_moveIRNS_6DeviceEEEONSt16remove_referenceIT_E4typeEOS4_0
_ZN3c1014constexpr_moveIRNS_6SymIntEEEONSt16remove_referenceIT_E4typeEOS4_1020
_ZN3c1014constexpr_moveIRlEEONSt16remove_referenceIT_E4typeEOS3_1054
_ZN3c1017constexpr_forwardIlEEOT_RNSt16remove_referenceIS1_E4typeE199233304
_ZN3c1017constexpr_forwardIN2at6TensorEEEOT_RNSt16remove_referenceIS3_E4typeE105276376
_ZN3c1017constexpr_forwardIN6caffe28TypeMetaEEEOT_RNSt16remove_referenceIS3_E4typeE91030286
_ZN3c1017constexpr_forwardINS_10ScalarTypeEEEOT_RNSt16remove_referenceIS2_E4typeE441600
_ZN3c1017constexpr_forwardINS_6DeviceEEEOT_RNSt16remove_referenceIS2_E4typeE0
_ZN3c1017constexpr_forwardINS_6SymIntEEEOT_RNSt16remove_referenceIS2_E4typeE1020
_ZN3c1017constexpr_forwardIRKN2at6TensorEEEOT_RNSt16remove_referenceIS5_E4typeE31316
_ZN3c1017constexpr_forwardIRKN6caffe28TypeMetaEEEOT_RNSt16remove_referenceIS5_E4typeE837552
_ZN3c1017constexpr_forwardIRKNS_10DeviceTypeEEEOT_RNSt16remove_referenceIS4_E4typeE1203954
_ZN3c1017constexpr_forwardIRKNS_10ScalarTypeEEEOT_RNSt16remove_referenceIS4_E4typeE395952
_ZN3c1017constexpr_forwardIRKNS_12MemoryFormatEEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZN3c1017constexpr_forwardIRKNS_6DeviceEEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZN3c1017constexpr_forwardIRKNS_6LayoutEEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZN3c1017constexpr_forwardIRKNS_8ArrayRefIlEEEEOT_RNSt16remove_referenceIS5_E4typeE14194
_ZN3c1017constexpr_forwardIRKbEEOT_RNSt16remove_referenceIS3_E4typeE0
_ZN3c1017constexpr_forwardIlEEOT_RNSt16remove_referenceIS1_E4typeE1054
_ZN3c1019bad_optional_accessC2EPKc0
_ZN3c1019constexpr_storage_tIbEC1ENS_14trivial_init_tE2945770
_ZN3c1019constexpr_storage_tIN6caffe28TypeMetaEEC2ENS_14trivial_init_tE68
_ZN3c1019constexpr_storage_tINS_10ScalarTypeEEC2ENS_14trivial_init_tE48258
_ZN3c1019constexpr_storage_tINS_12MemoryFormatEEC2ENS_14trivial_init_tE820264
_ZN3c1019constexpr_storage_tINS_6DeviceEEC2ENS_14trivial_init_tE418844
_ZN3c1019constexpr_storage_tINS_6LayoutEEC2ENS_14trivial_init_tE418844
_ZN3c1019constexpr_storage_tIbEC1ENS_14trivial_init_tE1239090
_ZN3c1019constexpr_storage_tIlEC1ENS_14trivial_init_tE402
_ZN3c1019constexpr_storage_tIlEC2IJlEEEDpOT_92688986
_ZN3c1019constexpr_storage_tIN6caffe28TypeMetaEEC2IJRKS2_EEEDpOT_418776
_ZN3c1019constexpr_storage_tIN6caffe28TypeMetaEEC2IJS2_EEEDpOT_91030286
_ZN3c1019constexpr_storage_tINS_10ScalarTypeEEC2IJRKS1_EEEDpOT_395952
_ZN3c1019constexpr_storage_tINS_10ScalarTypeEEC2IJS1_EEEDpOT_441600
_ZN3c1019constexpr_storage_tINS_12MemoryFormatEEC2IJRKS1_EEEDpOT_0
_ZN3c1019constexpr_storage_tINS_6DeviceEEC2IJRKNS_10DeviceTypeEEEEDpOT_401318
_ZN3c1019constexpr_storage_tINS_6DeviceEEC2IJRKS1_EEEDpOT_0
_ZN3c1019constexpr_storage_tINS_6DeviceEEC2IJS1_EEEDpOT_0
_ZN3c1019constexpr_storage_tINS_6LayoutEEC2IJRKS1_EEEDpOT_0
_ZN3c1019constexpr_storage_tIbEC2IJRKbEEEDpOT_0
_ZN3c1019constexpr_storage_tIlEC2IJlEEEDpOT_1054
_ZN3c1022arrayref_optional_baseINS_8ArrayRefIlEEE7storage16setUninitializedEv16480
_ZN3c1022arrayref_optional_baseINS_8ArrayRefIlEEE7storageC2Ev16480
_ZN3c1022arrayref_optional_baseINS_8ArrayRefIlEEE7storageC2IJRKS2_EEEDpOT_14194
_ZN3c1022arrayref_optional_baseINS_8ArrayRefIlEEEC2ERKS2_14194
_ZN3c1022arrayref_optional_baseINS_8ArrayRefIlEEEC2Ev16480
_ZN3c1045trivially_copyable_optimization_optional_baseINS_6DeviceEEC2IJRKNS_10DeviceTypeEEEENS_10in_place_tEDpOT_401318
_ZN3c1045trivially_copyable_optimization_optional_baseIbEC2ERKb814728
_ZN3c1045trivially_copyable_optimization_optional_baseIN6caffe28TypeMetaEEC2ERKS2_418776
_ZN3c1045trivially_copyable_optimization_optional_baseINS_10ScalarTypeEEC2ERKS1_395952
_ZN3c1045trivially_copyable_optimization_optional_baseINS_12MemoryFormatEEC2ERKS1_0
_ZN3c1045trivially_copyable_optimization_optional_baseINS_6DeviceEEC2ERKS1_0
_ZN3c1045trivially_copyable_optimization_optional_baseINS_6LayoutEEC2ERKS1_0
_ZN3c1045trivially_copyable_optimization_optional_baseIbEC2ERKb0
_ZN3c1045trivially_copyable_optimization_optional_baseIbEC2Ev2945770
_ZN3c1045trivially_copyable_optimization_optional_baseIN6caffe28TypeMetaEEC2Ev68
_ZN3c1045trivially_copyable_optimization_optional_baseINS_10ScalarTypeEEC2Ev48258
_ZN3c1045trivially_copyable_optimization_optional_baseINS_12MemoryFormatEEC2Ev820264
_ZN3c1045trivially_copyable_optimization_optional_baseINS_6DeviceEEC2Ev418844
_ZN3c1045trivially_copyable_optimization_optional_baseINS_6LayoutEEC2Ev418844
_ZN3c1045trivially_copyable_optimization_optional_baseIbEC2Ev1239090
_ZN3c1045trivially_copyable_optimization_optional_baseIlEC2Ev402
_ZN3c1045trivially_copyable_optimization_optional_baseIlEC2EOl91472940
_ZN3c1045trivially_copyable_optimization_optional_baseIN6caffe28TypeMetaEEC2EOS2_91030286
_ZN3c1045trivially_copyable_optimization_optional_baseINS_10ScalarTypeEEC2EOS1_441600
_ZN3c1045trivially_copyable_optimization_optional_baseINS_6DeviceEEC2EOS1_0
_ZN3c1045trivially_copyable_optimization_optional_baseIlEC2EOl1054
_ZN3c107detail_7convertINS_6DeviceEEET_S3_0
_ZN3c108optionalIN2at6TensorEEC2EOS3_105276376
_ZN3c108optionalIN6caffe28TypeMetaEE7dataptrEv418776
_ZN3c108optionalIN6caffe28TypeMetaEEptEv418776
_ZN3c108optionalINS_6DeviceEEC2IJRKNS_10DeviceTypeEEEENS_10in_place_tEDpOT_401318
_ZN3c108optionalINS_6SymIntEED2Ev321509680
_ZN3c108optionalIN2at6TensorEED2Ev210584068
_ZN3c108optionalINS_6SymIntEED2Ev110925612
_ZN3c108optionalINS_8ArrayRefIlEEEC2Ev16480
_ZN3c108optionalIbEC2ENS_9nullopt_tE113870362
_ZN3c108optionalIN2at6TensorEEC2ENS_9nullopt_tE0
_ZN3c108optionalIN6caffe28TypeMetaEEC2ENS_9nullopt_tE68
_ZN3c108optionalINS_10ScalarTypeEEC2ENS_9nullopt_tE48258
_ZN3c108optionalINS_12MemoryFormatEEC2ENS_9nullopt_tE820264
_ZN3c108optionalINS_6DeviceEEC2ENS_9nullopt_tE418844
_ZN3c108optionalINS_6LayoutEEC2ENS_9nullopt_tE418844
_ZN3c108optionalINS_6SymIntEEC2ENS_9nullopt_tE110924592
_ZN3c108optionalIbEC2ENS_9nullopt_tE1239090
_ZN3c108optionalIlEC2ENS_9nullopt_tE402
_ZN3c108optionalIlEC2IiLb0EEEOT_197610574
_ZN3c108optionalIN2at6TensorEEC2IRKS2_Lb0EEEOT_31316
_ZN3c108optionalIN2at6TensorEEC2IS2_Lb0EEEOT_105276376
_ZN3c108optionalIN6caffe28TypeMetaEEC2IRKS2_Lb0EEEOT_418776
_ZN3c108optionalIN6caffe28TypeMetaEEC2IS2_Lb0EEEOT_91030286
_ZN3c108optionalINS_10ScalarTypeEEC2IRS1_Lb0EEEOT_395952
_ZN3c108optionalINS_10ScalarTypeEEC2IS1_Lb0EEEOT_441600
_ZN3c108optionalINS_12MemoryFormatEEC2IRKS1_Lb0EEEOT_0
_ZN3c108optionalINS_6DeviceEEC2IRKS1_Lb0EEEOT_0
_ZN3c108optionalINS_6DeviceEEC2IS1_Lb0EEEOT_0
_ZN3c108optionalINS_6LayoutEEC2IRKS1_Lb0EEEOT_0
_ZN3c108optionalINS_6SymIntEEC2IiLb0EEEOT_510
_ZN3c108optionalINS_6SymIntEEC2IlLb0EEEOT_510
_ZN3c108optionalINS_8ArrayRefIlEEEC2IRKlLb0EEEOT_14194
_ZN3c108optionalIbEC2IRKbLb0EEEOT_0
_ZN3c108optionalIlEC2IiLb0EEEOT_1054
_ZN3c109storage_tINS_6SymIntEEC2ENS_14trivial_init_tE216200968
_ZN3c109storage_tIN2at6TensorEEC2ENS_14trivial_init_tE105276376
_ZN3c109storage_tINS_6SymIntEEC2ENS_14trivial_init_tE110924592
_ZN3c109storage_tINS_6SymIntEEC2IJS1_EEEDpOT_105308712
_ZN3c109storage_tIN2at6TensorEEC2IJRKS2_EEEDpOT_31316
_ZN3c109storage_tIN2at6TensorEEC2IJS2_EEEDpOT_105276376
_ZN3c109storage_tINS_6SymIntEEC2IJS1_EEEDpOT_1020
_ZN3c109storage_tINS_6SymIntEED2Ev321509680
_ZN3c109storage_tIN2at6TensorEED2Ev210584068
_ZN3c109storage_tINS_6SymIntEED2Ev110925612
_ZN3c10eqIbEEbRKNS_8optionalIT_EENS_9nullopt_tE401402
_ZNK3c1013optional_baseINS_6SymIntEE11initializedEv321479384
_ZNK3c1013optional_baseIN2at6TensorEE11initializedEv210552752
_ZNK3c1013optional_baseINS_6SymIntEE11initializedEv110926632
_ZNK3c1045trivially_copyable_optimization_optional_baseIbE11initializedEv185760028
_ZNK3c1045trivially_copyable_optimization_optional_baseIN6caffe28TypeMetaEE11initializedEv182898192
_ZNK3c1045trivially_copyable_optimization_optional_baseINS_10ScalarTypeEE11initializedEv837552
_ZNK3c1045trivially_copyable_optimization_optional_baseINS_12MemoryFormatEE11initializedEv401402
_ZNK3c1045trivially_copyable_optimization_optional_baseINS_6DeviceEE11initializedEv802636
_ZNK3c1045trivially_copyable_optimization_optional_baseIbE11initializedEv820246
_ZNK3c108optionalINS_6DeviceEE9has_valueEv217022234
_ZNK3c108optionalIN2at6TensorEE9has_valueEv105276376
_ZNK3c108optionalIN6caffe28TypeMetaEE9has_valueEv418844
_ZNK3c108optionalINS_12MemoryFormatEE9has_valueEv401402
_ZNK3c108optionalINS_6DeviceEE9has_valueEv0
_ZNK3c108optionalINS_6SymIntEE9has_valueEv110925612
_ZNK3c108optionalIbE11initializedEv507239412
_ZNK3c108optionalIN2at6TensorEE11initializedEv210552752
_ZNK3c108optionalIN6caffe28TypeMetaEE11initializedEv182898192
_ZNK3c108optionalINS_10ScalarTypeEE11initializedEv837552
_ZNK3c108optionalINS_12MemoryFormatEE11initializedEv401402
_ZNK3c108optionalINS_6DeviceEE11initializedEv802636
_ZNK3c108optionalINS_6SymIntEE11initializedEv110926632
_ZNK3c108optionalIbE11initializedEv820246
_ZNK3c108optionalIbEcvbEv92670626
_ZNK3c108optionalIN6caffe28TypeMetaEEcvbEv91030286
_ZNK3c108optionalINS_10ScalarTypeEEcvbEv418776
_ZNK3c108optionalINS_6DeviceEEcvbEv401318
_ZNK3c108optionalIbEcvbEv820246
_ZNKR3c108optionalINS_6DeviceEE13contained_valEv0
_ZNKR3c108optionalINS_6DeviceEEdeEv0
_ZNO3c108optionalIbE5valueEv1020
_ZNO3c108optionalINS_6SymIntEE5valueEv1020
_ZNO3c108optionalIbE5valueEv0
_ZNR3c108optionalIbE13contained_valEv197127776
_ZNR3c108optionalIN2at6TensorEE13contained_valEv105276376
_ZNR3c108optionalIN6caffe28TypeMetaEE13contained_valEv91030286
_ZNR3c108optionalINS_10ScalarTypeEE13contained_valEv418776
_ZNR3c108optionalINS_6DeviceEE13contained_valEv401318
_ZNR3c108optionalINS_6SymIntEE13contained_valEv1020
_ZNR3c108optionalIbE13contained_valEv0
_ZNR3c108optionalIbEdeEv197126756
_ZNR3c108optionalIN2at6TensorEEdeEv105276376
_ZNR3c108optionalIN6caffe28TypeMetaEEdeEv91030286
_ZNR3c108optionalINS_10ScalarTypeEEdeEv418776
_ZNR3c108optionalINS_6DeviceEEdeEv401318
_ZNR3c108optionalIbEdeEv0
_ZZNKR3c108optionalINS_6DeviceEEdeEvENKUlvE_clEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/Optional.h.gcov.html b/html/libtorch/include/c10/util/Optional.h.gcov.html new file mode 100644 index 0000000..c5e851f --- /dev/null +++ b/html/libtorch/include/c10/util/Optional.h.gcov.html @@ -0,0 +1,1347 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/Optional.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - Optional.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:89.0 %9181
Test Date:2024-04-30 13:17:26Functions:76.4 %157120
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Copyright (C) 2011 - 2012 Andrzej Krzemienski.
+       2              : //
+       3              : // Use, modification, and distribution is subject to the Boost Software
+       4              : // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+       5              : // http://www.boost.org/LICENSE_1_0.txt)
+       6              : //
+       7              : // The idea and interface is based on Boost.Optional library
+       8              : // authored by Fernando Luis Cacciola Carballal
+       9              : //
+      10              : // From https://github.com/akrzemi1/Optional
+      11              : //
+      12              : // C10
+      13              : // - Move file to `c10` namespace.
+      14              : // - Remove macro use in line 478 because the nvcc device compiler cannot handle
+      15              : // it.
+      16              : // - Revise constructor logic so that it is 1) consistent with c++ 17 standard
+      17              : // documented here in (8):
+      18              : // https://en.cppreference.com/w/cpp/utility/optional/optional, and 2) able to
+      19              : // support initialization of optionals from convertible type U.
+      20              : // - Remove the constructors for `optional(const T&)` and `optional(T&&)`, as
+      21              : // they can be handled by the template<U=T> case with the default template
+      22              : // argument.
+      23              : // - Move `constexpr struct in_place_t {} in_place{}` to `c10/util/in_place.h`
+      24              : // so that it can also be used in `c10/util/variant.h`.
+      25              : // - Remove special cases for pre-c++14 compilers to make code simpler.
+      26              : 
+      27              : #ifndef C10_UTIL_OPTIONAL_H_
+      28              : #define C10_UTIL_OPTIONAL_H_
+      29              : 
+      30              : #include <c10/macros/Macros.h>
+      31              : #include <c10/util/ArrayRef.h>
+      32              : #include <c10/util/in_place.h>
+      33              : 
+      34              : #include <cassert>
+      35              : #include <functional>
+      36              : #include <initializer_list>
+      37              : #include <stdexcept>
+      38              : #include <string>
+      39              : #include <type_traits>
+      40              : #include <utility>
+      41              : 
+      42              : #include <c10/util/C++17.h>
+      43              : #include <c10/util/Metaprogramming.h>
+      44              : 
+      45              : C10_CLANG_DIAGNOSTIC_PUSH()
+      46              : #if C10_CLANG_HAS_WARNING("-Wstring-conversion")
+      47              : C10_CLANG_DIAGNOSTIC_IGNORE("-Wstring-conversion")
+      48              : #endif
+      49              : #if C10_CLANG_HAS_WARNING("-Wshorten-64-to-32")
+      50              : C10_CLANG_DIAGNOSTIC_IGNORE("-Wshorten-64-to-32")
+      51              : #endif
+      52              : #if C10_CLANG_HAS_WARNING("-Wimplicit-float-conversion")
+      53              : C10_CLANG_DIAGNOSTIC_IGNORE("-Wimplicit-float-conversion")
+      54              : #endif
+      55              : #if C10_CLANG_HAS_WARNING("-Wimplicit-int-conversion")
+      56              : C10_CLANG_DIAGNOSTIC_IGNORE("-Wimplicit-int-conversion")
+      57              : #endif
+      58              : 
+      59              : #if defined(_MSC_VER) && !defined(__clang__)
+      60              : #pragma warning(push)
+      61              : #pragma warning(disable : 4624) // destructor was implicitly defined as deleted
+      62              : #endif
+      63              : 
+      64              : #define TR2_OPTIONAL_REQUIRES(...) \
+      65              :   typename std::enable_if<__VA_ARGS__::value, bool>::type = false
+      66              : 
+      67              : namespace c10 {
+      68              : 
+      69              : // 20.5.4, optional for object types
+      70              : template <class T>
+      71              : class optional;
+      72              : 
+      73              : // 20.5.5, optional for lvalue reference types
+      74              : template <class T>
+      75              : class optional<T&>;
+      76              : 
+      77              : // workaround: std utility functions aren't constexpr yet
+      78              : template <class T>
+      79    199233304 : inline constexpr T&& constexpr_forward(
+      80              :     typename std::remove_reference<T>::type& t) noexcept {
+      81    199233304 :   return static_cast<T&&>(t);
+      82              : }
+      83              : 
+      84              : template <class T>
+      85              : inline constexpr T&& constexpr_forward(
+      86              :     typename std::remove_reference<T>::type&& t) noexcept {
+      87              :   static_assert(!std::is_lvalue_reference<T>::value, "!!");
+      88              :   return static_cast<T&&>(t);
+      89              : }
+      90              : 
+      91              : template <class T>
+      92    196750336 : inline constexpr typename std::remove_reference<T>::type&& constexpr_move(
+      93              :     T&& t) noexcept {
+      94    196750336 :   return static_cast<typename std::remove_reference<T>::type&&>(t);
+      95              : }
+      96              : 
+      97              : #if defined NDEBUG
+      98              : #define TR2_OPTIONAL_ASSERTED_EXPRESSION(CHECK, EXPR) (EXPR)
+      99              : #else
+     100              : #define TR2_OPTIONAL_ASSERTED_EXPRESSION(CHECK, EXPR) \
+     101              :   ((CHECK) ? (EXPR) : ([] { assert(!#CHECK); }(), (EXPR)))
+     102              : #endif
+     103              : 
+     104              : #if defined(__CUDA_ARCH__)
+     105              : #define TR2_OPTIONAL_HOST_CONSTEXPR
+     106              : #else
+     107              : #define TR2_OPTIONAL_HOST_CONSTEXPR constexpr
+     108              : #endif
+     109              : 
+     110              : // Sphinx chokes on static_addressof, so exclude it from Doxygen
+     111              : // generation.  See https://github.com/sphinx-doc/sphinx/issues/7944
+     112              : // \cond
+     113              : 
+     114              : namespace detail_ {
+     115              : 
+     116              : // VS doesn't handle constexpr well, so we need to skip these stuff.
+     117              : #if (defined _MSC_VER)
+     118              : template <typename T>
+     119              : T* static_addressof(T& ref) {
+     120              :   return std::addressof(ref);
+     121              : }
+     122              : #else
+     123              : // static_addressof: a constexpr version of addressof
+     124              : template <typename T>
+     125              : struct has_overloaded_addressof {
+     126              :   template <class X>
+     127              :   constexpr static bool has_overload(...) {
+     128              :     return false;
+     129              :   }
+     130              : 
+     131              :   template <class X, size_t S = sizeof(std::declval<X&>().operator&())>
+     132              :   constexpr static bool has_overload(bool) {
+     133              :     return true;
+     134              :   }
+     135              : 
+     136              :   constexpr static bool value = has_overload<T>(true);
+     137              : };
+     138              : 
+     139              : template <typename T, TR2_OPTIONAL_REQUIRES(!has_overloaded_addressof<T>)>
+     140              : constexpr T* static_addressof(T& ref) {
+     141              :   return &ref;
+     142              : }
+     143              : 
+     144              : template <typename T, TR2_OPTIONAL_REQUIRES(has_overloaded_addressof<T>)>
+     145              : T* static_addressof(T& ref) {
+     146              :   return std::addressof(ref);
+     147              : }
+     148              : #endif
+     149              : 
+     150              : // the call to convert<A>(b) has return type A and converts b to type A iff b
+     151              : // decltype(b) is implicitly convertible to A
+     152              : template <class U>
+     153            0 : constexpr U convert(U v) {
+     154            0 :   return v;
+     155              : }
+     156              : 
+     157              : } // namespace detail_
+     158              : 
+     159              : // \endcond
+     160              : 
+     161              : constexpr struct trivial_init_t {
+     162              : } trivial_init{};
+     163              : 
+     164              : // 20.5.7, Disengaged state indicator
+     165              : struct nullopt_t {
+     166              :   constexpr explicit nullopt_t(int) {}
+     167              : };
+     168              : constexpr nullopt_t nullopt{0};
+     169              : 
+     170              : // 20.5.8, class bad_optional_access
+     171              : class bad_optional_access : public std::logic_error {
+     172              :  public:
+     173              :   explicit bad_optional_access(const std::string& what_arg)
+     174              :       : logic_error{what_arg} {}
+     175            0 :   explicit bad_optional_access(const char* what_arg) : logic_error{what_arg} {}
+     176              : };
+     177              : 
+     178              : template <class T>
+     179              : union storage_t {
+     180              :   unsigned char dummy_{};
+     181              :   T value_;
+     182              : 
+     183              : #if __cplusplus >= 202002L
+     184              :   constexpr
+     185              : #endif
+     186    216200968 :       storage_t(trivial_init_t) noexcept {
+     187    216200968 :     new (&dummy_) unsigned char;
+     188    216200968 :   }
+     189              : 
+     190              :   template <class... Args>
+     191    105308712 :   constexpr storage_t(Args&&... args)
+     192    105308712 :       : value_(constexpr_forward<Args>(args)...) {}
+     193              : 
+     194    321509680 :   ~storage_t() {}
+     195              : };
+     196              : 
+     197              : template <class T>
+     198              : union constexpr_storage_t {
+     199              :   unsigned char dummy_;
+     200              :   T value_;
+     201              : 
+     202              : #if __cplusplus >= 202002L
+     203              :   // C++20 lifted the requirement to initialize a union member in order to be
+     204              :   // constexpr.
+     205              :   constexpr constexpr_storage_t(trivial_init_t) noexcept {
+     206              :     new (&dummy_) unsigned char;
+     207              :   }
+     208              : #else
+     209      2945770 :   constexpr constexpr_storage_t(trivial_init_t) noexcept : dummy_() {}
+     210              : #endif
+     211              : 
+     212              :   template <class... Args>
+     213     92688986 :   constexpr constexpr_storage_t(Args&&... args)
+     214     92688986 :       : value_(constexpr_forward<Args>(args)...) {}
+     215              : 
+     216              :   ~constexpr_storage_t() = default;
+     217              : };
+     218              : 
+     219              : template <class T>
+     220              : struct optional_base {
+     221              :   bool init_;
+     222              :   storage_t<T> storage_;
+     223              : 
+     224    110924592 :   constexpr optional_base() noexcept : init_(false), storage_(trivial_init){};
+     225              : 
+     226              :   explicit constexpr optional_base(const optional_base<T>& v)
+     227              :       : init_(v.init_), storage_(trivial_init) {
+     228              :     if (init_) {
+     229              :       ::new (dataptr()) T(v.storage_.value_);
+     230              :     }
+     231              :   }
+     232              : 
+     233        31316 :   explicit constexpr optional_base(const T& v) : init_(true), storage_(v) {}
+     234              : 
+     235    105276376 :   explicit constexpr optional_base(optional_base<T>&& v) noexcept(
+     236              :       std::is_nothrow_move_constructible<T>::value)
+     237    105276376 :       : init_(v.init_), storage_(trivial_init) {
+     238    105276376 :     if (init_) {
+     239    105276376 :       ::new (dataptr()) T(std::move(v.storage_.value_));
+     240              :     }
+     241    105276376 :   }
+     242              : 
+     243    105277396 :   explicit constexpr optional_base(T&& v)
+     244    105277396 :       : init_(true), storage_(constexpr_move(v)) {}
+     245              : 
+     246              :   template <class... Args>
+     247              :   explicit optional_base(in_place_t, Args&&... args)
+     248              :       : init_(true), storage_(constexpr_forward<Args>(args)...) {}
+     249              : 
+     250              :   template <
+     251              :       class U,
+     252              :       class... Args,
+     253              :       TR2_OPTIONAL_REQUIRES(std::is_constructible<T, std::initializer_list<U>>)>
+     254              :   explicit optional_base(
+     255              :       in_place_t,
+     256              :       std::initializer_list<U> il,
+     257              :       Args&&... args)
+     258              :       : init_(true), storage_(il, std::forward<Args>(args)...) {}
+     259              : 
+     260              :   optional_base& operator=(const optional_base& rhs) {
+     261              :     if (init_ && !rhs.init_) {
+     262              :       clear();
+     263              :     } else if (!init_ && rhs.init_) {
+     264              :       init_ = true;
+     265              :       ::new (dataptr()) T(rhs.storage_.value_);
+     266              :     } else if (init_ && rhs.init_) {
+     267              :       storage_.value_ = rhs.storage_.value_;
+     268              :     }
+     269              :     return *this;
+     270              :   }
+     271              : 
+     272              :   optional_base& operator=(optional_base&& rhs) noexcept(
+     273              :       std::is_nothrow_move_assignable<T>::value&&
+     274              :           std::is_nothrow_move_constructible<T>::value) {
+     275              :     if (init_ && !rhs.init_) {
+     276              :       clear();
+     277              :     } else if (!init_ && rhs.init_) {
+     278              :       init_ = true;
+     279              :       ::new (dataptr()) T(std::move(rhs.storage_.value_));
+     280              :     } else if (init_ && rhs.init_) {
+     281              :       storage_.value_ = std::move(rhs.storage_.value_);
+     282              :     }
+     283              :     return *this;
+     284              :   }
+     285              : 
+     286    321509680 :   ~optional_base() {
+     287    321509680 :     if (init_)
+     288    210585088 :       storage_.value_.T::~T();
+     289    321509680 :   }
+     290              : 
+     291    321479384 :   constexpr bool initialized() const noexcept {
+     292    321479384 :     return init_;
+     293              :   }
+     294              : 
+     295              :   void setInitialized(bool init) noexcept {
+     296              :     init_ = init;
+     297              :   }
+     298              : 
+     299              :  private:
+     300    105276376 :   typename std::remove_const<T>::type* dataptr() {
+     301    105276376 :     return std::addressof(storage_.value_);
+     302              :   }
+     303              : 
+     304              :   constexpr const T* dataptr() const {
+     305              :     return detail_::static_addressof(storage_.value_);
+     306              :   }
+     307              : 
+     308              :   void clear() noexcept {
+     309              :     if (init_) {
+     310              :       dataptr()->~T();
+     311              :     }
+     312              :     init_ = false;
+     313              :   }
+     314              : };
+     315              : 
+     316              : template <class T>
+     317              : struct constexpr_optional_base {
+     318              :   bool init_;
+     319              :   constexpr_storage_t<T> storage_;
+     320              : 
+     321              :   constexpr constexpr_optional_base() noexcept
+     322              :       : init_(false), storage_(trivial_init){};
+     323              : 
+     324              :   explicit constexpr constexpr_optional_base(
+     325              :       const constexpr_optional_base<T>& v)
+     326              :       : init_(v.init_), storage_(trivial_init) {
+     327              :     if (init_) {
+     328              :       ::new (dataptr()) T(v.storage_.value_);
+     329              :     }
+     330              :   }
+     331              : 
+     332              :   explicit constexpr constexpr_optional_base(
+     333              :       constexpr_optional_base<T>&&
+     334              :           v) noexcept(std::is_nothrow_move_constructible<T>::value)
+     335              :       : init_(v.init_), storage_(trivial_init) {
+     336              :     if (init_) {
+     337              :       ::new (dataptr()) T(std::move(v.storage_.value_));
+     338              :     }
+     339              :   }
+     340              : 
+     341              :   explicit constexpr constexpr_optional_base(const T& v)
+     342              :       : init_(true), storage_(v) {}
+     343              : 
+     344              :   explicit constexpr constexpr_optional_base(T&& v)
+     345              :       : init_(true), storage_(constexpr_move(v)) {}
+     346              : 
+     347              :   template <class... Args>
+     348              :   explicit constexpr constexpr_optional_base(in_place_t, Args&&... args)
+     349              :       : init_(true), storage_(constexpr_forward<Args>(args)...) {}
+     350              : 
+     351              :   template <
+     352              :       class U,
+     353              :       class... Args,
+     354              :       TR2_OPTIONAL_REQUIRES(std::is_constructible<T, std::initializer_list<U>>)>
+     355              :   constexpr explicit constexpr_optional_base(
+     356              :       in_place_t,
+     357              :       std::initializer_list<U> il,
+     358              :       Args&&... args)
+     359              :       : init_(true), storage_(il, std::forward<Args>(args)...) {}
+     360              : 
+     361              :   ~constexpr_optional_base() = default;
+     362              : 
+     363              :   constexpr_optional_base& operator=(const constexpr_optional_base& rhs) {
+     364              :     if (init_ && !rhs.init_) {
+     365              :       clear();
+     366              :     } else if (!init_ && rhs.init_) {
+     367              :       init_ = true;
+     368              :       ::new (dataptr()) T(rhs.storage_.value_);
+     369              :     } else if (init_ && rhs.init_) {
+     370              :       storage_.value_ = rhs.storage_.value_;
+     371              :     }
+     372              :     return *this;
+     373              :   }
+     374              : 
+     375              :   constexpr_optional_base& operator=(constexpr_optional_base&& rhs) noexcept(
+     376              :       std::is_nothrow_move_assignable<T>::value&&
+     377              :           std::is_nothrow_move_constructible<T>::value) {
+     378              :     if (init_ && !rhs.init_) {
+     379              :       clear();
+     380              :     } else if (!init_ && rhs.init_) {
+     381              :       init_ = true;
+     382              :       ::new (dataptr()) T(std::move(rhs.storage_.value_));
+     383              :     } else if (init_ && rhs.init_) {
+     384              :       storage_.value_ = std::move(rhs.storage_.value_);
+     385              :     }
+     386              :     return *this;
+     387              :   }
+     388              : 
+     389              :   constexpr bool initialized() const noexcept {
+     390              :     return init_;
+     391              :   }
+     392              :   void setInitialized(bool init) noexcept {
+     393              :     init_ = init;
+     394              :   }
+     395              : 
+     396              :  private:
+     397              :   typename std::remove_const<T>::type* dataptr() {
+     398              :     return std::addressof(storage_.value_);
+     399              :   }
+     400              : 
+     401              :   constexpr const T* dataptr() const {
+     402              :     return detail_::static_addressof(storage_.value_);
+     403              :   }
+     404              : 
+     405              :   void clear() noexcept {
+     406              :     init_ = false;
+     407              :   }
+     408              : };
+     409              : 
+     410              : // HACK: Optimization for trivially copyable types. The mainline
+     411              : // implementation fails to have trivial copy/move operations in these
+     412              : // cases, and we care about them, so just implement that directly.
+     413              : template <class T>
+     414              : struct trivially_copyable_optimization_optional_base {
+     415              :   bool init_;
+     416              :   constexpr_storage_t<T> storage_;
+     417              : 
+     418      2945770 :   constexpr trivially_copyable_optimization_optional_base() noexcept
+     419      2945770 :       : init_(false), storage_(trivial_init) {}
+     420              : 
+     421       814728 :   explicit constexpr trivially_copyable_optimization_optional_base(const T& v)
+     422       814728 :       : init_(true), storage_(v) {}
+     423              : 
+     424     91472940 :   explicit constexpr trivially_copyable_optimization_optional_base(T&& v)
+     425     91472940 :       : init_(true), storage_(constexpr_move(v)) {}
+     426              : 
+     427              :   template <class... Args>
+     428       401318 :   explicit constexpr trivially_copyable_optimization_optional_base(
+     429              :       in_place_t,
+     430              :       Args&&... args)
+     431       401318 :       : init_(true), storage_(constexpr_forward<Args>(args)...) {}
+     432              : 
+     433              :   template <
+     434              :       class U,
+     435              :       class... Args,
+     436              :       TR2_OPTIONAL_REQUIRES(std::is_constructible<T, std::initializer_list<U>>)>
+     437              :   constexpr explicit trivially_copyable_optimization_optional_base(
+     438              :       in_place_t,
+     439              :       std::initializer_list<U> il,
+     440              :       Args&&... args)
+     441              :       : init_(true), storage_(il, std::forward<Args>(args)...) {}
+     442              : 
+     443              :   ~trivially_copyable_optimization_optional_base() = default;
+     444              : 
+     445    185760028 :   constexpr bool initialized() const noexcept {
+     446    185760028 :     return init_;
+     447              :   }
+     448              :   void setInitialized(bool init) noexcept {
+     449              :     init_ = init;
+     450              :   }
+     451              : };
+     452              : 
+     453              : // HACK: Optimization for ArrayRef<T>. We take advantage of an unused
+     454              : // bit pattern in ArrayRef (inspired by Arthur O'Dwyer's
+     455              : // tombstone_traits -- see https://youtu.be/MWBfmmg8-Yo?t=2466) to
+     456              : // keep the size of c10::optional::ArrayRef<T> down to 16 bytes, which
+     457              : // allows it to be passed to functions in registers instead of getting
+     458              : // passed in memory per item 5c of the classification algorithm in
+     459              : // section 3.2.3 of the System V ABI document
+     460              : // (https://www.uclibc.org/docs/psABI-x86_64.pdf).
+     461              : template <class ArrayRefT>
+     462              : class arrayref_optional_base {
+     463              :  public:
+     464              :   union storage {
+     465              :     struct raw {
+     466              :       // ArrayRef has the invariant that if Data is nullptr then
+     467              :       // Length must be zero, so this is an unused bit pattern.
+     468              :       const void* p = nullptr;
+     469              :       size_t sz = 1;
+     470              :     } uninitialized_{};
+     471              :     ArrayRefT value_;
+     472              : 
+     473        16480 :     constexpr storage() noexcept : uninitialized_() {
+     474        16480 :       setUninitialized();
+     475        16480 :     }
+     476              : 
+     477        16480 :     constexpr void setUninitialized() noexcept {
+     478        16480 :       uninitialized_.p = nullptr;
+     479        16480 :       uninitialized_.sz = 1;
+     480        16480 :     }
+     481              : 
+     482              :     explicit constexpr storage(ArrayRefT& v) : value_(v) {}
+     483              : 
+     484              :     template <typename T>
+     485              :     explicit constexpr storage(const std::initializer_list<T>& v) : value_(v) {}
+     486              : 
+     487              :     template <class... Args>
+     488        14194 :     explicit constexpr storage(Args&&... args)
+     489        14194 :         : value_(constexpr_forward<Args>(args)...) {}
+     490              :   };
+     491              : 
+     492              :   storage storage_;
+     493              : 
+     494        16480 :   constexpr arrayref_optional_base() noexcept = default;
+     495              : 
+     496        14194 :   explicit constexpr arrayref_optional_base(const ArrayRefT& v) : storage_(v) {}
+     497              : 
+     498              :   template <class... Args>
+     499              :   explicit constexpr arrayref_optional_base(in_place_t, Args&&... args)
+     500              :       : storage_(constexpr_forward<Args>(args)...) {}
+     501              : 
+     502              :   template <typename T>
+     503              :   explicit constexpr arrayref_optional_base(
+     504              :       in_place_t,
+     505              :       const std::initializer_list<T>& v)
+     506              :       : storage_(v) {}
+     507              : 
+     508              :   constexpr bool initialized() const noexcept {
+     509              :     return storage_.uninitialized_.p != nullptr ||
+     510              :         storage_.uninitialized_.sz == 0;
+     511              :   }
+     512              : 
+     513              :   void setInitialized(bool init) noexcept {
+     514              :     if (!init) {
+     515              :       storage_.setUninitialized();
+     516              :     } else {
+     517              :       assert(initialized());
+     518              :     }
+     519              :   }
+     520              : };
+     521              : 
+     522              : namespace detail_ {
+     523              : template <typename T>
+     524              : struct is_arrayref : std::false_type {};
+     525              : 
+     526              : template <typename T>
+     527              : struct is_arrayref<c10::ArrayRef<T>> : std::true_type {};
+     528              : } // namespace detail_
+     529              : 
+     530              : template <class T>
+     531              : using OptionalBase = std::conditional_t<
+     532              :     detail_::is_arrayref<T>::value,
+     533              :     arrayref_optional_base<T>,
+     534              :     std::conditional_t<
+     535              :         std::is_trivially_destructible<T>::value &&
+     536              :             C10_IS_TRIVIALLY_COPYABLE(T) &&
+     537              :             // Avoid using is_trivially_copy_{constructible,assignable}
+     538              :             // because old GCC versions don't support them. Also,
+     539              :             // is_trivially_copyable seems not to do what I expect, so check
+     540              :             // trivially_copyable_optimization_optional_base directly.
+     541              :             std::is_copy_constructible<
+     542              :                 trivially_copyable_optimization_optional_base<T>>::value &&
+     543              :             std::is_copy_assignable<
+     544              :                 trivially_copyable_optimization_optional_base<T>>::value,
+     545              :         trivially_copyable_optimization_optional_base<T>,
+     546              :         std::conditional_t<
+     547              :             std::is_trivially_destructible<T>::value, // if possible
+     548              :             constexpr_optional_base<std::remove_const_t<T>>, // use base with
+     549              :                                                              // trivial
+     550              :                                                              // destructor
+     551              :             optional_base<std::remove_const_t<T>>>>>;
+     552              : 
+     553              : template <class T>
+     554              : class optional : private OptionalBase<T> {
+     555              :   template <class U> // re-declaration for nvcc on Windows.
+     556              :   using OptionalBase = std::conditional_t<
+     557              :       detail_::is_arrayref<U>::value,
+     558              :       arrayref_optional_base<U>,
+     559              :       std::conditional_t<
+     560              :           std::is_trivially_destructible<U>::value &&
+     561              :               C10_IS_TRIVIALLY_COPYABLE(U) &&
+     562              :               // Avoid using is_trivially_copy_{constructible,assignable}
+     563              :               // because old GCC versions don't support them. Also,
+     564              :               // is_trivially_copyable seems not to do what I expect, so
+     565              :               // check trivially_copyable_optimization_optional_base
+     566              :               // directly.
+     567              :               std::is_copy_constructible<
+     568              :                   trivially_copyable_optimization_optional_base<U>>::value &&
+     569              :               std::is_copy_assignable<
+     570              :                   trivially_copyable_optimization_optional_base<U>>::value,
+     571              :           trivially_copyable_optimization_optional_base<U>,
+     572              :           std::conditional_t<
+     573              :               std::is_trivially_destructible<U>::value, // if possible
+     574              :               constexpr_optional_base<std::remove_const_t<U>>, // use base
+     575              :                                                                // with
+     576              :                                                                // trivial
+     577              :                                                                // destructor
+     578              :               optional_base<std::remove_const_t<U>>>>>;
+     579              : 
+     580              :   static_assert(
+     581              :       !std::is_same<typename std::decay<T>::type, nullopt_t>::value,
+     582              :       "bad T");
+     583              :   static_assert(
+     584              :       !std::is_same<typename std::decay<T>::type, in_place_t>::value,
+     585              :       "bad T");
+     586              : 
+     587    507239412 :   constexpr bool initialized() const noexcept {
+     588    507239412 :     return OptionalBase<T>::initialized();
+     589              :   }
+     590       418776 :   typename std::remove_const<T>::type* dataptr() {
+     591       418776 :     return std::addressof(OptionalBase<T>::storage_.value_);
+     592              :   }
+     593              :   constexpr const T* dataptr() const {
+     594              :     return detail_::static_addressof(OptionalBase<T>::storage_.value_);
+     595              :   }
+     596              : 
+     597            0 :   constexpr const T& contained_val() const& {
+     598            0 :     return OptionalBase<T>::storage_.value_;
+     599              :   }
+     600              :   constexpr T&& contained_val() && {
+     601              :     return std::move(OptionalBase<T>::storage_.value_);
+     602              :   }
+     603    197127776 :   constexpr T& contained_val() & {
+     604    197127776 :     return OptionalBase<T>::storage_.value_;
+     605              :   }
+     606              : 
+     607              :   void clear() noexcept {
+     608              :     if (initialized())
+     609              :       dataptr()->~T();
+     610              :     OptionalBase<T>::setInitialized(false);
+     611              :   }
+     612              : 
+     613              :   template <class... Args>
+     614              :   void initialize(Args&&... args) noexcept(
+     615              :       noexcept(T(std::forward<Args>(args)...))) {
+     616              :     assert(!initialized());
+     617              :     ::new (static_cast<void*>(dataptr())) T(std::forward<Args>(args)...);
+     618              :     OptionalBase<T>::setInitialized(true);
+     619              :   }
+     620              : 
+     621              :   template <class U, class... Args>
+     622              :   void initialize(std::initializer_list<U> il, Args&&... args) noexcept(
+     623              :       noexcept(T(il, std::forward<Args>(args)...))) {
+     624              :     assert(!initialized());
+     625              :     ::new (static_cast<void*>(dataptr())) T(il, std::forward<Args>(args)...);
+     626              :     OptionalBase<T>::setInitialized(true);
+     627              :   }
+     628              : 
+     629              :  public:
+     630              :   typedef T value_type;
+     631              : 
+     632              :   // 20.5.5.1, constructors
+     633        16480 :   constexpr optional() noexcept = default;
+     634    113870362 :   constexpr optional(nullopt_t) noexcept : OptionalBase<T>(){};
+     635              : 
+     636              :   optional(const optional& rhs) = default;
+     637    105276376 :   optional(optional&& rhs) = default;
+     638              : 
+     639              :   // see https://github.com/akrzemi1/Optional/issues/16
+     640              :   // and https://en.cppreference.com/w/cpp/utility/optional/optional,
+     641              :   // in constructor 8, the std::optional spec can allow initialization
+     642              :   // of optionals from convertible type U
+     643              :   //
+     644              :   // 8 - implicit move construct from value
+     645              :   template <
+     646              :       typename U = T,
+     647              :       TR2_OPTIONAL_REQUIRES(
+     648              :           std::is_constructible<T, U&&>::value &&
+     649              :           !std::is_same<typename std::decay<U>::type, in_place_t>::value &&
+     650              :           !std::is_same<typename std::decay<U>::type, optional<T>>::value &&
+     651              :           std::is_convertible<U&&, T>)>
+     652    197610574 :   constexpr optional(U&& u) : OptionalBase<T>(std::forward<U>(u)) {}
+     653              : 
+     654              :   // 8 - explicit move construct from value
+     655              :   template <
+     656              :       typename U = T,
+     657              :       TR2_OPTIONAL_REQUIRES(
+     658              :           std::is_constructible<T, U&&>::value &&
+     659              :           !std::is_same<typename std::decay<U>::type, in_place_t>::value &&
+     660              :           !std::is_same<typename std::decay<U>::type, optional<T>>::value &&
+     661              :           !std::is_convertible<U&&, T>)>
+     662              :   explicit constexpr optional(U&& u) : OptionalBase<T>(std::forward<U>(u)) {}
+     663              : 
+     664              :   template <class... Args>
+     665       401318 :   explicit constexpr optional(in_place_t, Args&&... args)
+     666       401318 :       : OptionalBase<T>(in_place_t{}, constexpr_forward<Args>(args)...) {}
+     667              : 
+     668              :   template <
+     669              :       class U,
+     670              :       class... Args,
+     671              :       TR2_OPTIONAL_REQUIRES(std::is_constructible<T, std::initializer_list<U>>)>
+     672              :   constexpr explicit optional(
+     673              :       in_place_t,
+     674              :       std::initializer_list<U> il,
+     675              :       Args&&... args)
+     676              :       : OptionalBase<T>(in_place_t{}, il, constexpr_forward<Args>(args)...) {}
+     677              : 
+     678              :   // 20.5.4.2, Destructor
+     679    321509680 :   ~optional() = default;
+     680              : 
+     681              :   // 20.5.4.3, assignment
+     682              :   optional& operator=(nullopt_t) noexcept {
+     683              :     clear();
+     684              :     return *this;
+     685              :   }
+     686              : 
+     687              :   optional& operator=(const optional& rhs) = default;
+     688              : 
+     689              :   optional& operator=(optional&& rhs) = default;
+     690              : 
+     691              :   template <class U = T>
+     692              :   auto operator=(U&& v) -> typename std::enable_if<
+     693              :       std::is_constructible<T, U>::value &&
+     694              :           !std::is_same<typename std::decay<U>::type, optional<T>>::value &&
+     695              :           (std::is_scalar<T>::value ||
+     696              :            std::is_same<typename std::decay<U>::type, T>::value) &&
+     697              :           std::is_assignable<T&, U>::value,
+     698              :       optional&>::type {
+     699              :     if (initialized()) {
+     700              :       contained_val() = std::forward<U>(v);
+     701              :     } else {
+     702              :       initialize(std::forward<U>(v));
+     703              :     }
+     704              :     return *this;
+     705              :   }
+     706              : 
+     707              :   template <class... Args>
+     708              :   void emplace(Args&&... args) {
+     709              :     clear();
+     710              :     initialize(std::forward<Args>(args)...);
+     711              :   }
+     712              : 
+     713              :   template <class U, class... Args>
+     714              :   void emplace(std::initializer_list<U> il, Args&&... args) {
+     715              :     clear();
+     716              :     initialize<U, Args...>(il, std::forward<Args>(args)...);
+     717              :   }
+     718              : 
+     719              :   // 20.5.4.4, Swap
+     720              :   void swap(optional<T>& rhs) noexcept(
+     721              :       std::is_nothrow_move_constructible<T>::value&& noexcept(
+     722              :           std::swap(std::declval<T&>(), std::declval<T&>()))) {
+     723              :     if (initialized() == true && rhs.initialized() == false) {
+     724              :       rhs.initialize(std::move(**this));
+     725              :       clear();
+     726              :     } else if (initialized() == false && rhs.initialized() == true) {
+     727              :       initialize(std::move(*rhs));
+     728              :       rhs.clear();
+     729              :     } else if (initialized() == true && rhs.initialized() == true) {
+     730              :       using std::swap;
+     731              :       swap(**this, *rhs);
+     732              :     }
+     733              :   }
+     734              : 
+     735              :   // 20.5.4.5, Observers
+     736              : 
+     737     92670626 :   explicit constexpr operator bool() const noexcept {
+     738     92670626 :     return initialized();
+     739              :   }
+     740    217022234 :   constexpr bool has_value() const noexcept {
+     741    217022234 :     return initialized();
+     742              :   }
+     743              : 
+     744              :   TR2_OPTIONAL_HOST_CONSTEXPR T const* operator->() const {
+     745              :     return TR2_OPTIONAL_ASSERTED_EXPRESSION(initialized(), dataptr());
+     746              :   }
+     747              : 
+     748       418776 :   TR2_OPTIONAL_HOST_CONSTEXPR T* operator->() {
+     749       418776 :     assert(initialized());
+     750       418776 :     return dataptr();
+     751              :   }
+     752              : 
+     753            0 :   TR2_OPTIONAL_HOST_CONSTEXPR T const& operator*() const& {
+     754            0 :     return TR2_OPTIONAL_ASSERTED_EXPRESSION(initialized(), contained_val());
+     755              :   }
+     756              : 
+     757    197126756 :   TR2_OPTIONAL_HOST_CONSTEXPR T& operator*() & {
+     758    197126756 :     assert(initialized());
+     759    197126756 :     return contained_val();
+     760              :   }
+     761              : 
+     762              :   TR2_OPTIONAL_HOST_CONSTEXPR T&& operator*() && {
+     763              :     assert(initialized());
+     764              :     return constexpr_move(contained_val());
+     765              :   }
+     766              : 
+     767              :   TR2_OPTIONAL_HOST_CONSTEXPR T const& value() const& {
+     768              :     return initialized()
+     769              :         ? contained_val()
+     770              :         : (throw bad_optional_access("bad optional access"), contained_val());
+     771              :   }
+     772              : 
+     773              :   TR2_OPTIONAL_HOST_CONSTEXPR T& value() & {
+     774              :     return initialized()
+     775              :         ? contained_val()
+     776              :         : (throw bad_optional_access("bad optional access"), contained_val());
+     777              :   }
+     778              : 
+     779         1020 :   TR2_OPTIONAL_HOST_CONSTEXPR T&& value() && {
+     780         1020 :     if (!initialized())
+     781            0 :       throw bad_optional_access("bad optional access");
+     782         1020 :     return std::move(contained_val());
+     783              :   }
+     784              : 
+     785              :   template <class V>
+     786              :   constexpr T value_or(V&& v) const& {
+     787              :     return *this ? **this : detail_::convert<T>(constexpr_forward<V>(v));
+     788              :   }
+     789              : 
+     790              :   template <class V>
+     791              :   constexpr T value_or(V&& v) && {
+     792              :     return *this
+     793              :         ? constexpr_move(const_cast<optional<T>&>(*this).contained_val())
+     794              :         : detail_::convert<T>(constexpr_forward<V>(v));
+     795              :   }
+     796              : 
+     797              :   // 20.6.3.6, modifiers
+     798              :   void reset() noexcept {
+     799              :     clear();
+     800              :   }
+     801              : };
+     802              : 
+     803              : template <class T, class F>
+     804            0 : constexpr T value_or_else(const optional<T>& v, F&& func) {
+     805              :   static_assert(
+     806              :       std::is_convertible<
+     807              :           typename guts::infer_function_traits_t<F>::return_type,
+     808              :           T>::value,
+     809              :       "func parameters must be a callable that returns a type convertible to the value stored in the optional");
+     810            0 :   return v.has_value() ? *v : detail_::convert<T>(std::forward<F>(func)());
+     811              : }
+     812              : 
+     813              : template <class T, class F>
+     814              : constexpr T value_or_else(optional<T>&& v, F&& func) {
+     815              :   static_assert(
+     816              :       std::is_convertible<
+     817              :           typename guts::infer_function_traits_t<F>::return_type,
+     818              :           T>::value,
+     819              :       "func parameters must be a callable that returns a type convertible to the value stored in the optional");
+     820              :   return v.has_value() ? constexpr_move(std::move(v).contained_val())
+     821              :                        : detail_::convert<T>(std::forward<F>(func)());
+     822              : }
+     823              : 
+     824              : // XXX: please refrain from using optional<T&>, since it is being against with
+     825              : // the optional standard in c++ 17, see the debate and the details here:
+     826              : // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3406#rationale.refs
+     827              : // if you need it, consider using optional<std::reference_wrapper<T>> or *
+     828              : // pointer
+     829              : //
+     830              : // we leave the implementation here in case we want to reconsider using it in
+     831              : // the future if it becomes a definitely necessary case.
+     832              : template <class T>
+     833              : class optional<T&> {
+     834              :   // add this assert to prevent user from using optional reference as indicated
+     835              :   // above
+     836              :   static_assert(
+     837              :       sizeof(T) == 0,
+     838              :       "optional references is ill-formed, \
+     839              :     consider use optional of a std::reference_wrapper of type T to \
+     840              :     hold a reference if you really need to");
+     841              : 
+     842              :   static_assert(!std::is_same<T, nullopt_t>::value, "bad T");
+     843              :   static_assert(!std::is_same<T, in_place_t>::value, "bad T");
+     844              :   T* ref;
+     845              : 
+     846              :  public:
+     847              :   // 20.5.5.1, construction/destruction
+     848              :   constexpr optional() noexcept : ref(nullptr) {}
+     849              : 
+     850              :   constexpr optional(nullopt_t) noexcept : ref(nullptr) {}
+     851              : 
+     852              :   template <typename U = T>
+     853              :   constexpr optional(U& u) noexcept : ref(detail_::static_addressof(u)) {}
+     854              : 
+     855              :   template <typename U = T>
+     856              :   optional(U&&) = delete;
+     857              : 
+     858              :   constexpr optional(const optional& rhs) noexcept : ref(rhs.ref) {}
+     859              : 
+     860              :   explicit constexpr optional(in_place_t, T& v) noexcept
+     861              :       : ref(detail_::static_addressof(v)) {}
+     862              : 
+     863              :   explicit optional(in_place_t, T&&) = delete;
+     864              : 
+     865              :   ~optional() = default;
+     866              : 
+     867              :   // 20.5.5.2, mutation
+     868              :   optional& operator=(nullopt_t) noexcept {
+     869              :     ref = nullptr;
+     870              :     return *this;
+     871              :   }
+     872              : 
+     873              :   // optional& operator=(const optional& rhs) noexcept {
+     874              :   // ref = rhs.ref;
+     875              :   // return *this;
+     876              :   // }
+     877              : 
+     878              :   // optional& operator=(optional&& rhs) noexcept {
+     879              :   // ref = rhs.ref;
+     880              :   // return *this;
+     881              :   // }
+     882              : 
+     883              :   template <typename U>
+     884              :   auto operator=(U&& rhs) noexcept -> typename std::enable_if<
+     885              :       std::is_same<typename std::decay<U>::type, optional<T&>>::value,
+     886              :       optional&>::type {
+     887              :     ref = rhs.ref;
+     888              :     return *this;
+     889              :   }
+     890              : 
+     891              :   template <typename U>
+     892              :   auto operator=(U&& rhs) noexcept -> typename std::enable_if<
+     893              :       !std::is_same<typename std::decay<U>::type, optional<T&>>::value,
+     894              :       optional&>::type = delete;
+     895              : 
+     896              :   void emplace(T& v) noexcept {
+     897              :     ref = detail_::static_addressof(v);
+     898              :   }
+     899              : 
+     900              :   void emplace(T&&) = delete;
+     901              : 
+     902              :   void swap(optional<T&>& rhs) noexcept {
+     903              :     std::swap(ref, rhs.ref);
+     904              :   }
+     905              : 
+     906              :   // 20.5.5.3, observers
+     907              :   TR2_OPTIONAL_HOST_CONSTEXPR T* operator->() const {
+     908              :     return TR2_OPTIONAL_ASSERTED_EXPRESSION(ref, ref);
+     909              :   }
+     910              : 
+     911              :   TR2_OPTIONAL_HOST_CONSTEXPR T& operator*() const {
+     912              :     return TR2_OPTIONAL_ASSERTED_EXPRESSION(ref, *ref);
+     913              :   }
+     914              : 
+     915              :   constexpr T& value() const {
+     916              :     return ref ? *ref
+     917              :                : (throw bad_optional_access("bad optional access"), *ref);
+     918              :   }
+     919              : 
+     920              :   explicit constexpr operator bool() const noexcept {
+     921              :     return ref != nullptr;
+     922              :   }
+     923              : 
+     924              :   constexpr bool has_value() const noexcept {
+     925              :     return ref != nullptr;
+     926              :   }
+     927              : 
+     928              :   template <class V>
+     929              :   constexpr typename std::decay<T>::type value_or(V&& v) const {
+     930              :     return *this ? **this
+     931              :                  : detail_::convert<typename std::decay<T>::type>(
+     932              :                        constexpr_forward<V>(v));
+     933              :   }
+     934              : 
+     935              :   // x.x.x.x, modifiers
+     936              :   void reset() noexcept {
+     937              :     ref = nullptr;
+     938              :   }
+     939              : };
+     940              : 
+     941              : template <class T>
+     942              : class optional<T&&> {
+     943              :   static_assert(sizeof(T) == 0, "optional rvalue references disallowed");
+     944              : };
+     945              : 
+     946              : // 20.5.8, Relational operators
+     947              : template <class T>
+     948              : constexpr bool operator==(const optional<T>& x, const optional<T>& y) {
+     949              :   return bool(x) != bool(y) ? false : bool(x) == false ? true : *x == *y;
+     950              : }
+     951              : 
+     952              : template <class T>
+     953              : constexpr bool operator!=(const optional<T>& x, const optional<T>& y) {
+     954              :   return !(x == y);
+     955              : }
+     956              : 
+     957              : template <class T>
+     958              : constexpr bool operator<(const optional<T>& x, const optional<T>& y) {
+     959              :   return (!y) ? false : (!x) ? true : *x < *y;
+     960              : }
+     961              : 
+     962              : template <class T>
+     963              : constexpr bool operator>(const optional<T>& x, const optional<T>& y) {
+     964              :   return (y < x);
+     965              : }
+     966              : 
+     967              : template <class T>
+     968              : constexpr bool operator<=(const optional<T>& x, const optional<T>& y) {
+     969              :   return !(y < x);
+     970              : }
+     971              : 
+     972              : template <class T>
+     973              : constexpr bool operator>=(const optional<T>& x, const optional<T>& y) {
+     974              :   return !(x < y);
+     975              : }
+     976              : 
+     977              : // 20.5.9, Comparison with nullopt
+     978              : template <class T>
+     979       401402 : constexpr bool operator==(const optional<T>& x, nullopt_t) noexcept {
+     980       401402 :   return (!x);
+     981              : }
+     982              : 
+     983              : template <class T>
+     984              : constexpr bool operator==(nullopt_t, const optional<T>& x) noexcept {
+     985              :   return (!x);
+     986              : }
+     987              : 
+     988              : template <class T>
+     989              : constexpr bool operator!=(const optional<T>& x, nullopt_t) noexcept {
+     990              :   return bool(x);
+     991              : }
+     992              : 
+     993              : template <class T>
+     994              : constexpr bool operator!=(nullopt_t, const optional<T>& x) noexcept {
+     995              :   return bool(x);
+     996              : }
+     997              : 
+     998              : template <class T>
+     999              : constexpr bool operator<(const optional<T>&, nullopt_t) noexcept {
+    1000              :   return false;
+    1001              : }
+    1002              : 
+    1003              : template <class T>
+    1004              : constexpr bool operator<(nullopt_t, const optional<T>& x) noexcept {
+    1005              :   return bool(x);
+    1006              : }
+    1007              : 
+    1008              : template <class T>
+    1009              : constexpr bool operator<=(const optional<T>& x, nullopt_t) noexcept {
+    1010              :   return (!x);
+    1011              : }
+    1012              : 
+    1013              : template <class T>
+    1014              : constexpr bool operator<=(nullopt_t, const optional<T>&) noexcept {
+    1015              :   return true;
+    1016              : }
+    1017              : 
+    1018              : template <class T>
+    1019              : constexpr bool operator>(const optional<T>& x, nullopt_t) noexcept {
+    1020              :   return bool(x);
+    1021              : }
+    1022              : 
+    1023              : template <class T>
+    1024              : constexpr bool operator>(nullopt_t, const optional<T>&) noexcept {
+    1025              :   return false;
+    1026              : }
+    1027              : 
+    1028              : template <class T>
+    1029              : constexpr bool operator>=(const optional<T>&, nullopt_t) noexcept {
+    1030              :   return true;
+    1031              : }
+    1032              : 
+    1033              : template <class T>
+    1034              : constexpr bool operator>=(nullopt_t, const optional<T>& x) noexcept {
+    1035              :   return (!x);
+    1036              : }
+    1037              : 
+    1038              : // 20.5.10, Comparison with T
+    1039              : template <class T, class U>
+    1040              : constexpr bool operator==(const optional<T>& x, const U& v) {
+    1041              :   return bool(x) ? *x == v : false;
+    1042              : }
+    1043              : 
+    1044              : template <class T, class U>
+    1045              : constexpr bool operator==(const U& v, const optional<T>& x) {
+    1046              :   return bool(x) ? v == *x : false;
+    1047              : }
+    1048              : 
+    1049              : template <class T, class U>
+    1050              : constexpr bool operator!=(const optional<T>& x, const U& v) {
+    1051              :   return bool(x) ? *x != v : true;
+    1052              : }
+    1053              : 
+    1054              : template <class T, class U>
+    1055              : constexpr bool operator!=(const U& v, const optional<T>& x) {
+    1056              :   return bool(x) ? v != *x : true;
+    1057              : }
+    1058              : 
+    1059              : template <class T, class U>
+    1060              : constexpr bool operator<(const optional<T>& x, const U& v) {
+    1061              :   return bool(x) ? *x < v : true;
+    1062              : }
+    1063              : 
+    1064              : template <class T, class U>
+    1065              : constexpr bool operator>(const U& v, const optional<T>& x) {
+    1066              :   return bool(x) ? v > *x : true;
+    1067              : }
+    1068              : 
+    1069              : template <class T, class U>
+    1070              : constexpr bool operator>(const optional<T>& x, const U& v) {
+    1071              :   return bool(x) ? *x > v : false;
+    1072              : }
+    1073              : 
+    1074              : template <class T, class U>
+    1075              : constexpr bool operator<(const U& v, const optional<T>& x) {
+    1076              :   return bool(x) ? v < *x : false;
+    1077              : }
+    1078              : 
+    1079              : template <class T, class U>
+    1080              : constexpr bool operator>=(const optional<T>& x, const U& v) {
+    1081              :   return bool(x) ? *x >= v : false;
+    1082              : }
+    1083              : 
+    1084              : template <class T, class U>
+    1085              : constexpr bool operator<=(const U& v, const optional<T>& x) {
+    1086              :   return bool(x) ? v <= *x : false;
+    1087              : }
+    1088              : 
+    1089              : template <class T, class U>
+    1090              : constexpr bool operator<=(const optional<T>& x, const U& v) {
+    1091              :   return bool(x) ? *x <= v : true;
+    1092              : }
+    1093              : 
+    1094              : template <class T, class U>
+    1095              : constexpr bool operator>=(const U& v, const optional<T>& x) {
+    1096              :   return bool(x) ? v >= *x : true;
+    1097              : }
+    1098              : 
+    1099              : // Comparison of optional<T&> with T
+    1100              : template <class T>
+    1101              : constexpr bool operator==(const optional<T&>& x, const T& v) {
+    1102              :   return bool(x) ? *x == v : false;
+    1103              : }
+    1104              : 
+    1105              : template <class T>
+    1106              : constexpr bool operator==(const T& v, const optional<T&>& x) {
+    1107              :   return bool(x) ? v == *x : false;
+    1108              : }
+    1109              : 
+    1110              : template <class T>
+    1111              : constexpr bool operator!=(const optional<T&>& x, const T& v) {
+    1112              :   return bool(x) ? *x != v : true;
+    1113              : }
+    1114              : 
+    1115              : template <class T>
+    1116              : constexpr bool operator!=(const T& v, const optional<T&>& x) {
+    1117              :   return bool(x) ? v != *x : true;
+    1118              : }
+    1119              : 
+    1120              : template <class T>
+    1121              : constexpr bool operator<(const optional<T&>& x, const T& v) {
+    1122              :   return bool(x) ? *x < v : true;
+    1123              : }
+    1124              : 
+    1125              : template <class T>
+    1126              : constexpr bool operator>(const T& v, const optional<T&>& x) {
+    1127              :   return bool(x) ? v > *x : true;
+    1128              : }
+    1129              : 
+    1130              : template <class T>
+    1131              : constexpr bool operator>(const optional<T&>& x, const T& v) {
+    1132              :   return bool(x) ? *x > v : false;
+    1133              : }
+    1134              : 
+    1135              : template <class T>
+    1136              : constexpr bool operator<(const T& v, const optional<T&>& x) {
+    1137              :   return bool(x) ? v < *x : false;
+    1138              : }
+    1139              : 
+    1140              : template <class T>
+    1141              : constexpr bool operator>=(const optional<T&>& x, const T& v) {
+    1142              :   return bool(x) ? *x >= v : false;
+    1143              : }
+    1144              : 
+    1145              : template <class T>
+    1146              : constexpr bool operator<=(const T& v, const optional<T&>& x) {
+    1147              :   return bool(x) ? v <= *x : false;
+    1148              : }
+    1149              : 
+    1150              : template <class T>
+    1151              : constexpr bool operator<=(const optional<T&>& x, const T& v) {
+    1152              :   return bool(x) ? *x <= v : true;
+    1153              : }
+    1154              : 
+    1155              : template <class T>
+    1156              : constexpr bool operator>=(const T& v, const optional<T&>& x) {
+    1157              :   return bool(x) ? v >= *x : true;
+    1158              : }
+    1159              : 
+    1160              : // Comparison of optional<T const&> with T
+    1161              : template <class T>
+    1162              : constexpr bool operator==(const optional<const T&>& x, const T& v) {
+    1163              :   return bool(x) ? *x == v : false;
+    1164              : }
+    1165              : 
+    1166              : template <class T>
+    1167              : constexpr bool operator==(const T& v, const optional<const T&>& x) {
+    1168              :   return bool(x) ? v == *x : false;
+    1169              : }
+    1170              : 
+    1171              : template <class T>
+    1172              : constexpr bool operator!=(const optional<const T&>& x, const T& v) {
+    1173              :   return bool(x) ? *x != v : true;
+    1174              : }
+    1175              : 
+    1176              : template <class T>
+    1177              : constexpr bool operator!=(const T& v, const optional<const T&>& x) {
+    1178              :   return bool(x) ? v != *x : true;
+    1179              : }
+    1180              : 
+    1181              : template <class T>
+    1182              : constexpr bool operator<(const optional<const T&>& x, const T& v) {
+    1183              :   return bool(x) ? *x < v : true;
+    1184              : }
+    1185              : 
+    1186              : template <class T>
+    1187              : constexpr bool operator>(const T& v, const optional<const T&>& x) {
+    1188              :   return bool(x) ? v > *x : true;
+    1189              : }
+    1190              : 
+    1191              : template <class T>
+    1192              : constexpr bool operator>(const optional<const T&>& x, const T& v) {
+    1193              :   return bool(x) ? *x > v : false;
+    1194              : }
+    1195              : 
+    1196              : template <class T>
+    1197              : constexpr bool operator<(const T& v, const optional<const T&>& x) {
+    1198              :   return bool(x) ? v < *x : false;
+    1199              : }
+    1200              : 
+    1201              : template <class T>
+    1202              : constexpr bool operator>=(const optional<const T&>& x, const T& v) {
+    1203              :   return bool(x) ? *x >= v : false;
+    1204              : }
+    1205              : 
+    1206              : template <class T>
+    1207              : constexpr bool operator<=(const T& v, const optional<const T&>& x) {
+    1208              :   return bool(x) ? v <= *x : false;
+    1209              : }
+    1210              : 
+    1211              : template <class T>
+    1212              : constexpr bool operator<=(const optional<const T&>& x, const T& v) {
+    1213              :   return bool(x) ? *x <= v : true;
+    1214              : }
+    1215              : 
+    1216              : template <class T>
+    1217              : constexpr bool operator>=(const T& v, const optional<const T&>& x) {
+    1218              :   return bool(x) ? v >= *x : true;
+    1219              : }
+    1220              : 
+    1221              : // 20.5.12, Specialized algorithms
+    1222              : template <class T>
+    1223              : void swap(optional<T>& x, optional<T>& y) noexcept(noexcept(x.swap(y))) {
+    1224              :   x.swap(y);
+    1225              : }
+    1226              : 
+    1227              : template <class T>
+    1228       418776 : constexpr optional<typename std::decay<T>::type> make_optional(T&& v) {
+    1229       418776 :   return optional<typename std::decay<T>::type>(constexpr_forward<T>(v));
+    1230              : }
+    1231              : 
+    1232              : template <class X>
+    1233              : constexpr optional<X&> make_optional(std::reference_wrapper<X> v) {
+    1234              :   return optional<X&>(v.get());
+    1235              : }
+    1236              : 
+    1237              : } // namespace c10
+    1238              : 
+    1239              : namespace std {
+    1240              : template <typename T>
+    1241              : struct hash<c10::optional<T>> {
+    1242              :   typedef c10::invoke_result_t<std::hash<T>, T> result_type;
+    1243              :   typedef c10::optional<T> argument_type;
+    1244              : 
+    1245              :   constexpr result_type operator()(argument_type const& arg) const {
+    1246              :     return arg ? std::hash<T>{}(*arg) : result_type{};
+    1247              :   }
+    1248              : };
+    1249              : 
+    1250              : template <typename T>
+    1251              : struct hash<c10::optional<T&>> {
+    1252              :   typedef typename hash<T>::result_type result_type;
+    1253              :   typedef c10::optional<T&> argument_type;
+    1254              : 
+    1255              :   constexpr result_type operator()(argument_type const& arg) const {
+    1256              :     return arg ? std::hash<T>{}(*arg) : result_type{};
+    1257              :   }
+    1258              : };
+    1259              : } // namespace std
+    1260              : 
+    1261              : #undef TR2_OPTIONAL_REQUIRES
+    1262              : #undef TR2_OPTIONAL_ASSERTED_EXPRESSION
+    1263              : #undef TR2_OPTIONAL_HOST_CONSTEXPR
+    1264              : 
+    1265              : C10_CLANG_DIAGNOSTIC_POP()
+    1266              : 
+    1267              : #if defined(_MSC_VER) && !defined(__clang__)
+    1268              : #pragma warning(pop)
+    1269              : #endif
+    1270              : 
+    1271              : #endif // C10_UTIL_OPTIONAL_H_
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/OptionalArrayRef.h.func-c.html b/html/libtorch/include/c10/util/OptionalArrayRef.h.func-c.html new file mode 100644 index 0000000..5c5ab0c --- /dev/null +++ b/html/libtorch/include/c10/util/OptionalArrayRef.h.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/OptionalArrayRef.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - OptionalArrayRef.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %33
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1016OptionalArrayRefIlEC2ERKl14194
_ZN3c1016OptionalArrayRefIlEC2ENS_9nullopt_tE16480
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/OptionalArrayRef.h.func.html b/html/libtorch/include/c10/util/OptionalArrayRef.h.func.html new file mode 100644 index 0000000..0c9d422 --- /dev/null +++ b/html/libtorch/include/c10/util/OptionalArrayRef.h.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/OptionalArrayRef.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - OptionalArrayRef.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %33
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1016OptionalArrayRefIlEC2ENS_9nullopt_tE16480
_ZN3c1016OptionalArrayRefIlEC2ERKl14194
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/OptionalArrayRef.h.gcov.html b/html/libtorch/include/c10/util/OptionalArrayRef.h.gcov.html new file mode 100644 index 0000000..7a09424 --- /dev/null +++ b/html/libtorch/include/c10/util/OptionalArrayRef.h.gcov.html @@ -0,0 +1,307 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/OptionalArrayRef.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - OptionalArrayRef.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %33
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // This file defines OptionalArrayRef<T>, a class that has almost the same
+       2              : // exact functionality as c10::optional<ArrayRef<T>>, except that its
+       3              : // converting constructor fixes a dangling pointer issue.
+       4              : //
+       5              : // The implicit converting constructor of both c10::optional<ArrayRef<T>> and
+       6              : // std::optional<ArrayRef<T>> can cause the underlying ArrayRef<T> to store
+       7              : // a dangling pointer. OptionalArrayRef<T> prevents this by wrapping
+       8              : // a c10::optional<ArrayRef<T>> and fixing the constructor implementation.
+       9              : //
+      10              : // See https://github.com/pytorch/pytorch/issues/63645 for more on this.
+      11              : 
+      12              : #pragma once
+      13              : 
+      14              : #include <c10/util/ArrayRef.h>
+      15              : #include <c10/util/Optional.h>
+      16              : 
+      17              : namespace c10 {
+      18              : 
+      19              : template <typename T>
+      20              : class OptionalArrayRef final {
+      21              :  public:
+      22              :   // Constructors
+      23              : 
+      24              :   constexpr OptionalArrayRef() noexcept = default;
+      25              : 
+      26        16480 :   constexpr OptionalArrayRef(nullopt_t) noexcept {}
+      27              : 
+      28              :   OptionalArrayRef(const OptionalArrayRef& other) = default;
+      29              : 
+      30              :   OptionalArrayRef(OptionalArrayRef&& other) = default;
+      31              : 
+      32              :   constexpr OptionalArrayRef(const optional<ArrayRef<T>>& other) noexcept
+      33              :       : wrapped_opt_array_ref(other) {}
+      34              : 
+      35              :   constexpr OptionalArrayRef(optional<ArrayRef<T>>&& other) noexcept
+      36              :       : wrapped_opt_array_ref(other) {}
+      37              : 
+      38        14194 :   constexpr OptionalArrayRef(const T& value) noexcept
+      39        14194 :       : wrapped_opt_array_ref(value) {}
+      40              : 
+      41              :   template <
+      42              :       typename U = ArrayRef<T>,
+      43              :       std::enable_if_t<
+      44              :           !std::is_same<std::decay_t<U>, OptionalArrayRef>::value &&
+      45              :               !std::is_same<std::decay_t<U>, in_place_t>::value &&
+      46              :               std::is_constructible<ArrayRef<T>, U&&>::value &&
+      47              :               std::is_convertible<U&&, ArrayRef<T>>::value &&
+      48              :               !std::is_convertible<U&&, T>::value,
+      49              :           bool> = false>
+      50              :   constexpr OptionalArrayRef(U&& value) noexcept(
+      51              :       std::is_nothrow_constructible<ArrayRef<T>, U&&>::value)
+      52              :       : wrapped_opt_array_ref(value) {}
+      53              : 
+      54              :   template <
+      55              :       typename U = ArrayRef<T>,
+      56              :       std::enable_if_t<
+      57              :           !std::is_same<std::decay_t<U>, OptionalArrayRef>::value &&
+      58              :               !std::is_same<std::decay_t<U>, in_place_t>::value &&
+      59              :               std::is_constructible<ArrayRef<T>, U&&>::value &&
+      60              :               !std::is_convertible<U&&, ArrayRef<T>>::value,
+      61              :           bool> = false>
+      62              :   constexpr explicit OptionalArrayRef(U&& value) noexcept(
+      63              :       std::is_nothrow_constructible<ArrayRef<T>, U&&>::value)
+      64              :       : wrapped_opt_array_ref(value) {}
+      65              : 
+      66              :   template <typename... Args>
+      67              :   constexpr explicit OptionalArrayRef(in_place_t ip, Args&&... args) noexcept
+      68              :       : wrapped_opt_array_ref(ip, args...) {}
+      69              : 
+      70              :   template <typename U, typename... Args>
+      71              :   constexpr explicit OptionalArrayRef(
+      72              :       in_place_t ip,
+      73              :       std::initializer_list<U> il,
+      74              :       Args&&... args)
+      75              :       : wrapped_opt_array_ref(ip, il, args...) {}
+      76              : 
+      77              :   constexpr OptionalArrayRef(const std::initializer_list<T>& Vec)
+      78              :       : wrapped_opt_array_ref(ArrayRef<T>(Vec)) {}
+      79              : 
+      80              :   // Destructor
+      81              : 
+      82              :   ~OptionalArrayRef() = default;
+      83              : 
+      84              :   // Assignment
+      85              : 
+      86              :   constexpr OptionalArrayRef& operator=(nullopt_t) noexcept {
+      87              :     wrapped_opt_array_ref = c10::nullopt;
+      88              :     return *this;
+      89              :   }
+      90              : 
+      91              :   OptionalArrayRef& operator=(const OptionalArrayRef& other) = default;
+      92              : 
+      93              :   OptionalArrayRef& operator=(OptionalArrayRef&& other) = default;
+      94              : 
+      95              :   constexpr OptionalArrayRef& operator=(
+      96              :       const optional<ArrayRef<T>>& other) noexcept {
+      97              :     wrapped_opt_array_ref = other;
+      98              :     return *this;
+      99              :   }
+     100              : 
+     101              :   constexpr OptionalArrayRef& operator=(
+     102              :       optional<ArrayRef<T>>&& other) noexcept {
+     103              :     wrapped_opt_array_ref = other;
+     104              :     return *this;
+     105              :   }
+     106              : 
+     107              :   template <typename U = ArrayRef<T>>
+     108              :   constexpr std::enable_if_t<
+     109              :       !std::is_same<std::decay_t<U>, OptionalArrayRef>::value &&
+     110              :           std::is_constructible<ArrayRef<T>, U&&>::value &&
+     111              :           std::is_assignable<ArrayRef<T>&, U&&>::value,
+     112              :       OptionalArrayRef&>
+     113              :   operator=(U&& value) noexcept(
+     114              :       std::is_nothrow_constructible<ArrayRef<T>, U&&>::value&&
+     115              :           std::is_nothrow_assignable<ArrayRef<T>&, U&&>::value) {
+     116              :     wrapped_opt_array_ref = value;
+     117              :     return *this;
+     118              :   }
+     119              : 
+     120              :   // Observers
+     121              : 
+     122              :   constexpr ArrayRef<T>* operator->() noexcept {
+     123              :     return &wrapped_opt_array_ref.value();
+     124              :   }
+     125              : 
+     126              :   constexpr const ArrayRef<T>* operator->() const noexcept {
+     127              :     return &wrapped_opt_array_ref.value();
+     128              :   }
+     129              : 
+     130              :   constexpr ArrayRef<T>& operator*() & noexcept {
+     131              :     return wrapped_opt_array_ref.value();
+     132              :   }
+     133              : 
+     134              :   constexpr const ArrayRef<T>& operator*() const& noexcept {
+     135              :     return wrapped_opt_array_ref.value();
+     136              :   }
+     137              : 
+     138              :   constexpr ArrayRef<T>&& operator*() && noexcept {
+     139              :     return std::move(wrapped_opt_array_ref.value());
+     140              :   }
+     141              : 
+     142              :   constexpr const ArrayRef<T>&& operator*() const&& noexcept {
+     143              :     return std::move(wrapped_opt_array_ref.value());
+     144              :   }
+     145              : 
+     146              :   constexpr explicit operator bool() const noexcept {
+     147              :     return wrapped_opt_array_ref.has_value();
+     148              :   }
+     149              : 
+     150              :   constexpr bool has_value() const noexcept {
+     151              :     return wrapped_opt_array_ref.has_value();
+     152              :   }
+     153              : 
+     154              :   constexpr ArrayRef<T>& value() & {
+     155              :     return wrapped_opt_array_ref.value();
+     156              :   }
+     157              : 
+     158              :   constexpr const ArrayRef<T>& value() const& {
+     159              :     return wrapped_opt_array_ref.value();
+     160              :   }
+     161              : 
+     162              :   constexpr ArrayRef<T>&& value() && {
+     163              :     return std::move(wrapped_opt_array_ref.value());
+     164              :   }
+     165              : 
+     166              :   constexpr const ArrayRef<T>&& value() const&& {
+     167              :     return std::move(wrapped_opt_array_ref.value());
+     168              :   }
+     169              : 
+     170              :   template <typename U>
+     171              :   constexpr std::
+     172              :       enable_if_t<std::is_convertible<U&&, ArrayRef<T>>::value, ArrayRef<T>>
+     173              :       value_or(U&& default_value) const& {
+     174              :     return wrapped_opt_array_ref.value_or(default_value);
+     175              :   }
+     176              : 
+     177              :   template <typename U>
+     178              :   constexpr std::
+     179              :       enable_if_t<std::is_convertible<U&&, ArrayRef<T>>::value, ArrayRef<T>>
+     180              :       value_or(U&& default_value) && {
+     181              :     return wrapped_opt_array_ref.value_or(default_value);
+     182              :   }
+     183              : 
+     184              :   // Modifiers
+     185              : 
+     186              :   constexpr void swap(OptionalArrayRef& other) noexcept {
+     187              :     std::swap(wrapped_opt_array_ref, other.wrapped_opt_array_ref);
+     188              :   }
+     189              : 
+     190              :   constexpr void reset() noexcept {
+     191              :     wrapped_opt_array_ref.reset();
+     192              :   }
+     193              : 
+     194              :   template <typename... Args>
+     195              :   constexpr std::enable_if_t<
+     196              :       std::is_constructible<ArrayRef<T>, Args&&...>::value,
+     197              :       ArrayRef<T>&>
+     198              :   emplace(Args&&... args) noexcept(
+     199              :       std::is_nothrow_constructible<ArrayRef<T>, Args&&...>::value) {
+     200              :     return wrapped_opt_array_ref.emplace(args...);
+     201              :   }
+     202              : 
+     203              :   template <typename U, typename... Args>
+     204              :   constexpr ArrayRef<T>& emplace(
+     205              :       std::initializer_list<U> il,
+     206              :       Args&&... args) noexcept {
+     207              :     return wrapped_opt_array_ref.emplace(il, args...);
+     208              :   }
+     209              : 
+     210              :  private:
+     211              :   optional<ArrayRef<T>> wrapped_opt_array_ref;
+     212              : };
+     213              : 
+     214              : using OptionalIntArrayRef = OptionalArrayRef<int64_t>;
+     215              : 
+     216              : inline bool operator==(
+     217              :     const OptionalIntArrayRef& a1,
+     218              :     const IntArrayRef& other) {
+     219              :   if (!a1.has_value()) {
+     220              :     return false;
+     221              :   }
+     222              :   return a1.value() == other;
+     223              : }
+     224              : 
+     225              : inline bool operator==(
+     226              :     const c10::IntArrayRef& a1,
+     227              :     const c10::OptionalIntArrayRef& a2) {
+     228              :   return a2 == a1;
+     229              : }
+     230              : 
+     231              : } // namespace c10
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/SmallVector.h.func-c.html b/html/libtorch/include/c10/util/SmallVector.h.func-c.html new file mode 100644 index 0000000..d1c8573 --- /dev/null +++ b/html/libtorch/include/c10/util/SmallVector.h.func-c.html @@ -0,0 +1,222 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/SmallVector.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - SmallVector.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %550
Test Date:2024-04-30 13:17:26Functions:0.0 %210
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1011SmallVectorIlLj5EEC2Ev0
_ZN3c1011SmallVectorIlLj5EED2Ev0
_ZN3c1015SmallVectorBaseIjE8set_sizeEm0
_ZN3c1015SmallVectorBaseIjEC2EPvm0
_ZN3c1015SmallVectorImplIlE7reserveEm0
_ZN3c1015SmallVectorImplIlEC2Ej0
_ZN3c1015SmallVectorImplIlED2Ev0
_ZN3c1023SmallVectorTemplateBaseIlLb1EE13destroy_rangeEPlS2_0
_ZN3c1023SmallVectorTemplateBaseIlLb1EE28reserveForParamAndGetAddressERlm0
_ZN3c1023SmallVectorTemplateBaseIlLb1EE4growEm0
_ZN3c1023SmallVectorTemplateBaseIlLb1EE9push_backEl0
_ZN3c1023SmallVectorTemplateBaseIlLb1EEC2Em0
_ZN3c1025SmallVectorTemplateCommonIlvE32reserveForParamAndGetAddressImplINS_23SmallVectorTemplateBaseIlLb1EEEEEPKlPT_RS5_m0
_ZN3c1025SmallVectorTemplateCommonIlvE3endEv0
_ZN3c1025SmallVectorTemplateCommonIlvE5beginEv0
_ZN3c1025SmallVectorTemplateCommonIlvE8grow_podEmm0
_ZN3c1025SmallVectorTemplateCommonIlvEC2Em0
_ZNK3c1015SmallVectorBaseIjE4sizeEv0
_ZNK3c1015SmallVectorBaseIjE8capacityEv0
_ZNK3c1025SmallVectorTemplateCommonIlvE10getFirstElEv0
_ZNK3c1025SmallVectorTemplateCommonIlvE7isSmallEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/SmallVector.h.func.html b/html/libtorch/include/c10/util/SmallVector.h.func.html new file mode 100644 index 0000000..bd22139 --- /dev/null +++ b/html/libtorch/include/c10/util/SmallVector.h.func.html @@ -0,0 +1,222 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/SmallVector.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - SmallVector.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %550
Test Date:2024-04-30 13:17:26Functions:0.0 %210
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1011SmallVectorIlLj5EEC2Ev0
_ZN3c1011SmallVectorIlLj5EED2Ev0
_ZN3c1015SmallVectorBaseIjE8set_sizeEm0
_ZN3c1015SmallVectorBaseIjEC2EPvm0
_ZN3c1015SmallVectorImplIlE7reserveEm0
_ZN3c1015SmallVectorImplIlEC2Ej0
_ZN3c1015SmallVectorImplIlED2Ev0
_ZN3c1023SmallVectorTemplateBaseIlLb1EE13destroy_rangeEPlS2_0
_ZN3c1023SmallVectorTemplateBaseIlLb1EE28reserveForParamAndGetAddressERlm0
_ZN3c1023SmallVectorTemplateBaseIlLb1EE4growEm0
_ZN3c1023SmallVectorTemplateBaseIlLb1EE9push_backEl0
_ZN3c1023SmallVectorTemplateBaseIlLb1EEC2Em0
_ZN3c1025SmallVectorTemplateCommonIlvE32reserveForParamAndGetAddressImplINS_23SmallVectorTemplateBaseIlLb1EEEEEPKlPT_RS5_m0
_ZN3c1025SmallVectorTemplateCommonIlvE3endEv0
_ZN3c1025SmallVectorTemplateCommonIlvE5beginEv0
_ZN3c1025SmallVectorTemplateCommonIlvE8grow_podEmm0
_ZN3c1025SmallVectorTemplateCommonIlvEC2Em0
_ZNK3c1015SmallVectorBaseIjE4sizeEv0
_ZNK3c1015SmallVectorBaseIjE8capacityEv0
_ZNK3c1025SmallVectorTemplateCommonIlvE10getFirstElEv0
_ZNK3c1025SmallVectorTemplateCommonIlvE7isSmallEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/SmallVector.h.gcov.html b/html/libtorch/include/c10/util/SmallVector.h.gcov.html new file mode 100644 index 0000000..a0d342a --- /dev/null +++ b/html/libtorch/include/c10/util/SmallVector.h.gcov.html @@ -0,0 +1,1543 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/SmallVector.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - SmallVector.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %550
Test Date:2024-04-30 13:17:26Functions:0.0 %210
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : //===- llvm/ADT/SmallVector.h - 'Normally small' vectors --------*- C++ -*-===//
+       2              : //
+       3              : // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+       4              : // See https://llvm.org/LICENSE.txt for license information.
+       5              : // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+       6              : //
+       7              : //===----------------------------------------------------------------------===//
+       8              : //
+       9              : // This file defines the SmallVector class.
+      10              : //
+      11              : //===----------------------------------------------------------------------===//
+      12              : 
+      13              : // ATen: modified from llvm::SmallVector.
+      14              : // used std::is_trivially_{copy,move}_constructible
+      15              : // replaced iterator_range constructor with inline Container&& constructor
+      16              : // replaced LLVM_NODISCARD, LLVM_LIKELY, and LLVM_UNLIKELY with c10 equivalents
+      17              : // removed LLVM_GSL_OWNER
+      18              : // added SmallVector::at
+      19              : // added operator<< for std::ostream
+      20              : // added C10_API to export SmallVectorBase
+      21              : 
+      22              : #pragma once
+      23              : 
+      24              : #include <c10/macros/Macros.h>
+      25              : #include <c10/util/AlignOf.h>
+      26              : 
+      27              : #include <algorithm>
+      28              : #include <cassert>
+      29              : #include <cstddef>
+      30              : #include <cstdlib>
+      31              : #include <cstring>
+      32              : #include <functional>
+      33              : #include <initializer_list>
+      34              : #include <iterator>
+      35              : #include <limits>
+      36              : #include <memory>
+      37              : #include <new>
+      38              : #include <ostream>
+      39              : #include <type_traits>
+      40              : #include <utility>
+      41              : 
+      42              : C10_CLANG_DIAGNOSTIC_PUSH()
+      43              : #if C10_CLANG_HAS_WARNING("-Wshorten-64-to-32")
+      44              : C10_CLANG_DIAGNOSTIC_IGNORE("-Wshorten-64-to-32")
+      45              : #endif
+      46              : 
+      47              : namespace c10 {
+      48              : 
+      49              : /// This is all the stuff common to all SmallVectors.
+      50              : ///
+      51              : /// The template parameter specifies the type which should be used to hold the
+      52              : /// Size and Capacity of the SmallVector, so it can be adjusted.
+      53              : /// Using 32 bit size is desirable to shrink the size of the SmallVector.
+      54              : /// Using 64 bit size is desirable for cases like SmallVector<char>, where a
+      55              : /// 32 bit size would limit the vector to ~4GB. SmallVectors are used for
+      56              : /// buffering bitcode output - which can exceed 4GB.
+      57              : template <class Size_T>
+      58              : class C10_API SmallVectorBase {
+      59              :  protected:
+      60              :   void* BeginX;
+      61              :   Size_T Size = 0, Capacity;
+      62              : 
+      63              :   /// The maximum value of the Size_T used.
+      64              :   static constexpr size_t SizeTypeMax() {
+      65              :     return std::numeric_limits<Size_T>::max();
+      66              :   }
+      67              : 
+      68            0 :   SmallVectorBase(void* FirstEl, size_t TotalCapacity)
+      69            0 :       : BeginX(FirstEl), Capacity(TotalCapacity) {}
+      70              : 
+      71              :   /// This is a helper for \a grow() that's out of line to reduce code
+      72              :   /// duplication.  This function will report a fatal error if it can't grow at
+      73              :   /// least to \p MinSize.
+      74              :   void* mallocForGrow(size_t MinSize, size_t TSize, size_t& NewCapacity);
+      75              : 
+      76              :   /// This is an implementation of the grow() method which only works
+      77              :   /// on POD-like data types and is out of line to reduce code duplication.
+      78              :   /// This function will report a fatal error if it cannot increase capacity.
+      79              :   void grow_pod(void* FirstEl, size_t MinSize, size_t TSize);
+      80              : 
+      81              :  public:
+      82              :   SmallVectorBase() = delete;
+      83            0 :   size_t size() const {
+      84            0 :     return Size;
+      85              :   }
+      86            0 :   size_t capacity() const {
+      87            0 :     return Capacity;
+      88              :   }
+      89              : 
+      90              :   C10_NODISCARD bool empty() const {
+      91              :     return !Size;
+      92              :   }
+      93              : 
+      94              :   /// Set the array size to \p N, which the current array must have enough
+      95              :   /// capacity for.
+      96              :   ///
+      97              :   /// This does not construct or destroy any elements in the vector.
+      98              :   ///
+      99              :   /// Clients can use this in conjunction with capacity() to write past the end
+     100              :   /// of the buffer when they know that more elements are available, and only
+     101              :   /// update the size later. This avoids the cost of value initializing elements
+     102              :   /// which will only be overwritten.
+     103            0 :   void set_size(size_t N) {
+     104            0 :     assert(N <= capacity());
+     105            0 :     Size = N;
+     106            0 :   }
+     107              : };
+     108              : 
+     109              : template <class T>
+     110              : using SmallVectorSizeType = typename std::
+     111              :     conditional<sizeof(T) < 4 && sizeof(void*) >= 8, uint64_t, uint32_t>::type;
+     112              : 
+     113              : /// Figure out the offset of the first element.
+     114              : template <class T, typename = void>
+     115              : struct SmallVectorAlignmentAndSize {
+     116              :   alignas(SmallVectorBase<SmallVectorSizeType<T>>) char Base[sizeof(
+     117              :       SmallVectorBase<SmallVectorSizeType<T>>)];
+     118              :   alignas(T) char FirstEl[sizeof(T)];
+     119              : };
+     120              : 
+     121              : /// This is the part of SmallVectorTemplateBase which does not depend on whether
+     122              : /// the type T is a POD. The extra dummy template argument is used by ArrayRef
+     123              : /// to avoid unnecessarily requiring T to be complete.
+     124              : template <typename T, typename = void>
+     125              : class SmallVectorTemplateCommon
+     126              :     : public SmallVectorBase<SmallVectorSizeType<T>> {
+     127              :   using Base = SmallVectorBase<SmallVectorSizeType<T>>;
+     128              : 
+     129              :   /// Find the address of the first element.  For this pointer math to be valid
+     130              :   /// with small-size of 0 for T with lots of alignment, it's important that
+     131              :   /// SmallVectorStorage is properly-aligned even for small-size of 0.
+     132            0 :   void* getFirstEl() const {
+     133              :     return const_cast<void*>(reinterpret_cast<const void*>(
+     134              :         reinterpret_cast<const char*>(this) +
+     135            0 :         offsetof(SmallVectorAlignmentAndSize<T>, FirstEl)));
+     136              :   }
+     137              :   // Space after 'FirstEl' is clobbered, do not add any instance vars after it.
+     138              : 
+     139              :  protected:
+     140            0 :   SmallVectorTemplateCommon(size_t Size) : Base(getFirstEl(), Size) {}
+     141              : 
+     142            0 :   void grow_pod(size_t MinSize, size_t TSize) {
+     143            0 :     Base::grow_pod(getFirstEl(), MinSize, TSize);
+     144            0 :   }
+     145              : 
+     146              :   /// Return true if this is a smallvector which has not had dynamic
+     147              :   /// memory allocated for it.
+     148            0 :   bool isSmall() const {
+     149            0 :     return this->BeginX == getFirstEl();
+     150              :   }
+     151              : 
+     152              :   /// Put this vector in a state of being small.
+     153              :   void resetToSmall() {
+     154              :     this->BeginX = getFirstEl();
+     155              :     this->Size = this->Capacity = 0; // FIXME: Setting Capacity to 0 is suspect.
+     156              :   }
+     157              : 
+     158              :   /// Return true if V is an internal reference to the given range.
+     159              :   bool isReferenceToRange(const void* V, const void* First, const void* Last)
+     160              :       const {
+     161              :     // Use std::less to avoid UB.
+     162              :     std::less<> LessThan;
+     163              :     return !LessThan(V, First) && LessThan(V, Last);
+     164              :   }
+     165              : 
+     166              :   /// Return true if V is an internal reference to this vector.
+     167              :   bool isReferenceToStorage(const void* V) const {
+     168              :     return isReferenceToRange(V, this->begin(), this->end());
+     169              :   }
+     170              : 
+     171              :   /// Return true if First and Last form a valid (possibly empty) range in this
+     172              :   /// vector's storage.
+     173              :   bool isRangeInStorage(const void* First, const void* Last) const {
+     174              :     // Use std::less to avoid UB.
+     175              :     std::less<> LessThan;
+     176              :     return !LessThan(First, this->begin()) && !LessThan(Last, First) &&
+     177              :         !LessThan(this->end(), Last);
+     178              :   }
+     179              : 
+     180              :   /// Return true unless Elt will be invalidated by resizing the vector to
+     181              :   /// NewSize.
+     182              :   bool isSafeToReferenceAfterResize(const void* Elt, size_t NewSize) {
+     183              :     // Past the end.
+     184              :     if (C10_LIKELY(!isReferenceToStorage(Elt)))
+     185              :       return true;
+     186              : 
+     187              :     // Return false if Elt will be destroyed by shrinking.
+     188              :     if (NewSize <= this->size())
+     189              :       return Elt < this->begin() + NewSize;
+     190              : 
+     191              :     // Return false if we need to grow.
+     192              :     return NewSize <= this->capacity();
+     193              :   }
+     194              : 
+     195              :   /// Check whether Elt will be invalidated by resizing the vector to NewSize.
+     196              :   void assertSafeToReferenceAfterResize(const void* Elt, size_t NewSize) {
+     197              :     (void)Elt; // Suppress unused variable warning
+     198              :     (void)NewSize; // Suppress unused variable warning
+     199              :     assert(
+     200              :         isSafeToReferenceAfterResize(Elt, NewSize) &&
+     201              :         "Attempting to reference an element of the vector in an operation "
+     202              :         "that invalidates it");
+     203              :   }
+     204              : 
+     205              :   /// Check whether Elt will be invalidated by increasing the size of the
+     206              :   /// vector by N.
+     207              :   void assertSafeToAdd(const void* Elt, size_t N = 1) {
+     208              :     this->assertSafeToReferenceAfterResize(Elt, this->size() + N);
+     209              :   }
+     210              : 
+     211              :   /// Check whether any part of the range will be invalidated by clearing.
+     212              :   void assertSafeToReferenceAfterClear(const T* From, const T* To) {
+     213              :     if (From == To)
+     214              :       return;
+     215              :     this->assertSafeToReferenceAfterResize(From, 0);
+     216              :     this->assertSafeToReferenceAfterResize(To - 1, 0);
+     217              :   }
+     218              :   template <
+     219              :       class ItTy,
+     220              :       std::enable_if_t<
+     221              :           !std::is_same<std::remove_const_t<ItTy>, T*>::value,
+     222              :           bool> = false>
+     223              :   void assertSafeToReferenceAfterClear(ItTy, ItTy) {}
+     224              : 
+     225              :   /// Check whether any part of the range will be invalidated by growing.
+     226              :   void assertSafeToAddRange(const T* From, const T* To) {
+     227              :     if (From == To)
+     228              :       return;
+     229              :     this->assertSafeToAdd(From, To - From);
+     230              :     this->assertSafeToAdd(To - 1, To - From);
+     231              :   }
+     232              :   template <
+     233              :       class ItTy,
+     234              :       std::enable_if_t<
+     235              :           !std::is_same<std::remove_const_t<ItTy>, T*>::value,
+     236              :           bool> = false>
+     237              :   void assertSafeToAddRange(ItTy, ItTy) {}
+     238              : 
+     239              :   /// Reserve enough space to add one element, and return the updated element
+     240              :   /// pointer in case it was a reference to the storage.
+     241              :   template <class U>
+     242            0 :   static const T* reserveForParamAndGetAddressImpl(
+     243              :       U* This,
+     244              :       const T& Elt,
+     245              :       size_t N) {
+     246            0 :     size_t NewSize = This->size() + N;
+     247            0 :     if (C10_LIKELY(NewSize <= This->capacity()))
+     248            0 :       return &Elt;
+     249              : 
+     250            0 :     bool ReferencesStorage = false;
+     251            0 :     int64_t Index = -1;
+     252              :     if (!U::TakesParamByValue) {
+     253              :       if (C10_UNLIKELY(This->isReferenceToStorage(&Elt))) {
+     254              :         ReferencesStorage = true;
+     255              :         Index = &Elt - This->begin();
+     256              :       }
+     257              :     }
+     258            0 :     This->grow(NewSize);
+     259            0 :     return ReferencesStorage ? This->begin() + Index : &Elt;
+     260              :   }
+     261              : 
+     262              :  public:
+     263              :   using size_type = size_t;
+     264              :   using difference_type = ptrdiff_t;
+     265              :   using value_type = T;
+     266              :   using iterator = T*;
+     267              :   using const_iterator = const T*;
+     268              : 
+     269              :   using const_reverse_iterator = std::reverse_iterator<const_iterator>;
+     270              :   using reverse_iterator = std::reverse_iterator<iterator>;
+     271              : 
+     272              :   using reference = T&;
+     273              :   using const_reference = const T&;
+     274              :   using pointer = T*;
+     275              :   using const_pointer = const T*;
+     276              : 
+     277              :   using Base::capacity;
+     278              :   using Base::empty;
+     279              :   using Base::size;
+     280              : 
+     281              :   // forward iterator creation methods.
+     282            0 :   iterator begin() {
+     283            0 :     return (iterator)this->BeginX;
+     284              :   }
+     285              :   const_iterator begin() const {
+     286              :     return (const_iterator)this->BeginX;
+     287              :   }
+     288            0 :   iterator end() {
+     289            0 :     return begin() + size();
+     290              :   }
+     291              :   const_iterator end() const {
+     292              :     return begin() + size();
+     293              :   }
+     294              : 
+     295              :   // reverse iterator creation methods.
+     296              :   reverse_iterator rbegin() {
+     297              :     return reverse_iterator(end());
+     298              :   }
+     299              :   const_reverse_iterator rbegin() const {
+     300              :     return const_reverse_iterator(end());
+     301              :   }
+     302              :   reverse_iterator rend() {
+     303              :     return reverse_iterator(begin());
+     304              :   }
+     305              :   const_reverse_iterator rend() const {
+     306              :     return const_reverse_iterator(begin());
+     307              :   }
+     308              : 
+     309              :   size_type size_in_bytes() const {
+     310              :     return size() * sizeof(T);
+     311              :   }
+     312              :   size_type max_size() const {
+     313              :     return std::min(this->SizeTypeMax(), size_type(-1) / sizeof(T));
+     314              :   }
+     315              : 
+     316              :   size_t capacity_in_bytes() const {
+     317              :     return capacity() * sizeof(T);
+     318              :   }
+     319              : 
+     320              :   /// Return a pointer to the vector's buffer, even if empty().
+     321              :   pointer data() {
+     322              :     return pointer(begin());
+     323              :   }
+     324              :   /// Return a pointer to the vector's buffer, even if empty().
+     325              :   const_pointer data() const {
+     326              :     return const_pointer(begin());
+     327              :   }
+     328              : 
+     329              :   // SmallVector::at is NOT from LLVM.
+     330              :   reference at(size_type idx) {
+     331              :     assert(idx < size());
+     332              :     return begin()[idx];
+     333              :   }
+     334              :   const_reference at(size_type idx) const {
+     335              :     assert(idx < size());
+     336              :     return begin()[idx];
+     337              :   }
+     338              :   reference operator[](size_type idx) {
+     339              :     assert(idx < size());
+     340              :     return begin()[idx];
+     341              :   }
+     342              :   const_reference operator[](size_type idx) const {
+     343              :     assert(idx < size());
+     344              :     return begin()[idx];
+     345              :   }
+     346              : 
+     347              :   reference front() {
+     348              :     assert(!empty());
+     349              :     return begin()[0];
+     350              :   }
+     351              :   const_reference front() const {
+     352              :     assert(!empty());
+     353              :     return begin()[0];
+     354              :   }
+     355              : 
+     356              :   reference back() {
+     357              :     assert(!empty());
+     358              :     return end()[-1];
+     359              :   }
+     360              :   const_reference back() const {
+     361              :     assert(!empty());
+     362              :     return end()[-1];
+     363              :   }
+     364              : };
+     365              : 
+     366              : /// SmallVectorTemplateBase<TriviallyCopyable = false> - This is where we put
+     367              : /// method implementations that are designed to work with non-trivial T's.
+     368              : ///
+     369              : /// We approximate is_trivially_copyable with trivial move/copy construction and
+     370              : /// trivial destruction. While the standard doesn't specify that you're allowed
+     371              : /// copy these types with memcpy, there is no way for the type to observe this.
+     372              : /// This catches the important case of std::pair<POD, POD>, which is not
+     373              : /// trivially assignable.
+     374              : ///
+     375              : /// XXX: if build fails here fall back to C10_IS_TRIVIALLY_COPYABLE and make a
+     376              : /// note
+     377              : template <
+     378              :     typename T,
+     379              :     bool = (std::is_trivially_copy_constructible<T>::value) &&
+     380              :         (std::is_trivially_move_constructible<T>::value) &&
+     381              :         std::is_trivially_destructible<T>::value>
+     382              : class SmallVectorTemplateBase : public SmallVectorTemplateCommon<T> {
+     383              :   friend class SmallVectorTemplateCommon<T>;
+     384              : 
+     385              :  protected:
+     386              :   static constexpr bool TakesParamByValue = false;
+     387              :   using ValueParamT = const T&;
+     388              : 
+     389              :   SmallVectorTemplateBase(size_t Size) : SmallVectorTemplateCommon<T>(Size) {}
+     390              : 
+     391              :   static void destroy_range(T* S, T* E) {
+     392              :     while (S != E) {
+     393              :       --E;
+     394              :       E->~T();
+     395              :     }
+     396              :   }
+     397              : 
+     398              :   /// Move the range [I, E) into the uninitialized memory starting with "Dest",
+     399              :   /// constructing elements as needed.
+     400              :   template <typename It1, typename It2>
+     401              :   static void uninitialized_move(It1 I, It1 E, It2 Dest) {
+     402              :     std::uninitialized_copy(
+     403              :         std::make_move_iterator(I), std::make_move_iterator(E), Dest);
+     404              :   }
+     405              : 
+     406              :   /// Copy the range [I, E) onto the uninitialized memory starting with "Dest",
+     407              :   /// constructing elements as needed.
+     408              :   template <typename It1, typename It2>
+     409              :   static void uninitialized_copy(It1 I, It1 E, It2 Dest) {
+     410              :     std::uninitialized_copy(I, E, Dest);
+     411              :   }
+     412              : 
+     413              :   /// Grow the allocated memory (without initializing new elements), doubling
+     414              :   /// the size of the allocated memory. Guarantees space for at least one more
+     415              :   /// element, or MinSize more elements if specified.
+     416              :   void grow(size_t MinSize = 0);
+     417              : 
+     418              :   /// Create a new allocation big enough for \p MinSize and pass back its size
+     419              :   /// in \p NewCapacity. This is the first section of \a grow().
+     420              :   T* mallocForGrow(size_t MinSize, size_t& NewCapacity) {
+     421              :     return static_cast<T*>(
+     422              :         SmallVectorBase<SmallVectorSizeType<T>>::mallocForGrow(
+     423              :             MinSize, sizeof(T), NewCapacity));
+     424              :   }
+     425              : 
+     426              :   /// Move existing elements over to the new allocation \p NewElts, the middle
+     427              :   /// section of \a grow().
+     428              :   void moveElementsForGrow(T* NewElts);
+     429              : 
+     430              :   /// Transfer ownership of the allocation, finishing up \a grow().
+     431              :   void takeAllocationForGrow(T* NewElts, size_t NewCapacity);
+     432              : 
+     433              :   /// Reserve enough space to add one element, and return the updated element
+     434              :   /// pointer in case it was a reference to the storage.
+     435              :   const T* reserveForParamAndGetAddress(const T& Elt, size_t N = 1) {
+     436              :     return this->reserveForParamAndGetAddressImpl(this, Elt, N);
+     437              :   }
+     438              : 
+     439              :   /// Reserve enough space to add one element, and return the updated element
+     440              :   /// pointer in case it was a reference to the storage.
+     441              :   T* reserveForParamAndGetAddress(T& Elt, size_t N = 1) {
+     442              :     return const_cast<T*>(this->reserveForParamAndGetAddressImpl(this, Elt, N));
+     443              :   }
+     444              : 
+     445              :   static T&& forward_value_param(T&& V) {
+     446              :     return std::move(V);
+     447              :   }
+     448              :   static const T& forward_value_param(const T& V) {
+     449              :     return V;
+     450              :   }
+     451              : 
+     452              :   void growAndAssign(size_t NumElts, const T& Elt) {
+     453              :     // Grow manually in case Elt is an internal reference.
+     454              :     size_t NewCapacity = 0;
+     455              :     T* NewElts = mallocForGrow(NumElts, NewCapacity);
+     456              :     std::uninitialized_fill_n(NewElts, NumElts, Elt);
+     457              :     this->destroy_range(this->begin(), this->end());
+     458              :     takeAllocationForGrow(NewElts, NewCapacity);
+     459              :     this->set_size(NumElts);
+     460              :   }
+     461              : 
+     462              :   template <typename... ArgTypes>
+     463              :   T& growAndEmplaceBack(ArgTypes&&... Args) {
+     464              :     // Grow manually in case one of Args is an internal reference.
+     465              :     size_t NewCapacity = 0;
+     466              :     T* NewElts = mallocForGrow(0, NewCapacity);
+     467              :     ::new ((void*)(NewElts + this->size())) T(std::forward<ArgTypes>(Args)...);
+     468              :     moveElementsForGrow(NewElts);
+     469              :     takeAllocationForGrow(NewElts, NewCapacity);
+     470              :     this->set_size(this->size() + 1);
+     471              :     return this->back();
+     472              :   }
+     473              : 
+     474              :  public:
+     475              :   void push_back(const T& Elt) {
+     476              :     const T* EltPtr = reserveForParamAndGetAddress(Elt);
+     477              :     ::new ((void*)this->end()) T(*EltPtr);
+     478              :     this->set_size(this->size() + 1);
+     479              :   }
+     480              : 
+     481              :   void push_back(T&& Elt) {
+     482              :     T* EltPtr = reserveForParamAndGetAddress(Elt);
+     483              :     ::new ((void*)this->end()) T(::std::move(*EltPtr));
+     484              :     this->set_size(this->size() + 1);
+     485              :   }
+     486              : 
+     487              :   void pop_back() {
+     488              :     this->set_size(this->size() - 1);
+     489              :     this->end()->~T();
+     490              :   }
+     491              : };
+     492              : 
+     493              : // Define this out-of-line to dissuade the C++ compiler from inlining it.
+     494              : template <typename T, bool TriviallyCopyable>
+     495              : void SmallVectorTemplateBase<T, TriviallyCopyable>::grow(size_t MinSize) {
+     496              :   size_t NewCapacity = 0;
+     497              :   T* NewElts = mallocForGrow(MinSize, NewCapacity);
+     498              :   moveElementsForGrow(NewElts);
+     499              :   takeAllocationForGrow(NewElts, NewCapacity);
+     500              : }
+     501              : 
+     502              : // Define this out-of-line to dissuade the C++ compiler from inlining it.
+     503              : template <typename T, bool TriviallyCopyable>
+     504              : void SmallVectorTemplateBase<T, TriviallyCopyable>::moveElementsForGrow(
+     505              :     T* NewElts) {
+     506              :   // Move the elements over.
+     507              :   this->uninitialized_move(this->begin(), this->end(), NewElts);
+     508              : 
+     509              :   // Destroy the original elements.
+     510              :   destroy_range(this->begin(), this->end());
+     511              : }
+     512              : 
+     513              : // Define this out-of-line to dissuade the C++ compiler from inlining it.
+     514              : template <typename T, bool TriviallyCopyable>
+     515              : void SmallVectorTemplateBase<T, TriviallyCopyable>::takeAllocationForGrow(
+     516              :     T* NewElts,
+     517              :     size_t NewCapacity) {
+     518              :   // If this wasn't grown from the inline copy, deallocate the old space.
+     519              :   if (!this->isSmall())
+     520              :     free(this->begin());
+     521              : 
+     522              :   this->BeginX = NewElts;
+     523              :   this->Capacity = NewCapacity;
+     524              : }
+     525              : 
+     526              : /// SmallVectorTemplateBase<TriviallyCopyable = true> - This is where we put
+     527              : /// method implementations that are designed to work with trivially copyable
+     528              : /// T's. This allows using memcpy in place of copy/move construction and
+     529              : /// skipping destruction.
+     530              : template <typename T>
+     531              : class SmallVectorTemplateBase<T, true> : public SmallVectorTemplateCommon<T> {
+     532              :   friend class SmallVectorTemplateCommon<T>;
+     533              : 
+     534              :  protected:
+     535              :   /// True if it's cheap enough to take parameters by value. Doing so avoids
+     536              :   /// overhead related to mitigations for reference invalidation.
+     537              :   static constexpr bool TakesParamByValue = sizeof(T) <= 2 * sizeof(void*);
+     538              : 
+     539              :   /// Either const T& or T, depending on whether it's cheap enough to take
+     540              :   /// parameters by value.
+     541              :   using ValueParamT =
+     542              :       typename std::conditional<TakesParamByValue, T, const T&>::type;
+     543              : 
+     544            0 :   SmallVectorTemplateBase(size_t Size) : SmallVectorTemplateCommon<T>(Size) {}
+     545              : 
+     546              :   // No need to do a destroy loop for POD's.
+     547            0 :   static void destroy_range(T*, T*) {}
+     548              : 
+     549              :   /// Move the range [I, E) onto the uninitialized memory
+     550              :   /// starting with "Dest", constructing elements into it as needed.
+     551              :   template <typename It1, typename It2>
+     552              :   static void uninitialized_move(It1 I, It1 E, It2 Dest) {
+     553              :     // Just do a copy.
+     554              :     uninitialized_copy(I, E, Dest);
+     555              :   }
+     556              : 
+     557              :   /// Copy the range [I, E) onto the uninitialized memory
+     558              :   /// starting with "Dest", constructing elements into it as needed.
+     559              :   template <typename It1, typename It2>
+     560              :   static void uninitialized_copy(It1 I, It1 E, It2 Dest) {
+     561              :     // Arbitrary iterator types; just use the basic implementation.
+     562              :     std::uninitialized_copy(I, E, Dest);
+     563              :   }
+     564              : 
+     565              :   /// Copy the range [I, E) onto the uninitialized memory
+     566              :   /// starting with "Dest", constructing elements into it as needed.
+     567              :   template <typename T1, typename T2>
+     568              :   static void uninitialized_copy(
+     569              :       T1* I,
+     570              :       T1* E,
+     571              :       T2* Dest,
+     572              :       std::enable_if_t<
+     573              :           std::is_same<typename std::remove_const<T1>::type, T2>::value>* =
+     574              :           nullptr) {
+     575              :     // Use memcpy for PODs iterated by pointers (which includes SmallVector
+     576              :     // iterators): std::uninitialized_copy optimizes to memmove, but we can
+     577              :     // use memcpy here. Note that I and E are iterators and thus might be
+     578              :     // invalid for memcpy if they are equal.
+     579              :     if (I != E)
+     580              :       memcpy(reinterpret_cast<void*>(Dest), I, (E - I) * sizeof(T));
+     581              :   }
+     582              : 
+     583              :   /// Double the size of the allocated memory, guaranteeing space for at
+     584              :   /// least one more element or MinSize if specified.
+     585            0 :   void grow(size_t MinSize = 0) {
+     586            0 :     this->grow_pod(MinSize, sizeof(T));
+     587            0 :   }
+     588              : 
+     589              :   /// Reserve enough space to add one element, and return the updated element
+     590              :   /// pointer in case it was a reference to the storage.
+     591              :   const T* reserveForParamAndGetAddress(const T& Elt, size_t N = 1) {
+     592              :     return this->reserveForParamAndGetAddressImpl(this, Elt, N);
+     593              :   }
+     594              : 
+     595              :   /// Reserve enough space to add one element, and return the updated element
+     596              :   /// pointer in case it was a reference to the storage.
+     597            0 :   T* reserveForParamAndGetAddress(T& Elt, size_t N = 1) {
+     598            0 :     return const_cast<T*>(this->reserveForParamAndGetAddressImpl(this, Elt, N));
+     599              :   }
+     600              : 
+     601              :   /// Copy \p V or return a reference, depending on \a ValueParamT.
+     602              :   static ValueParamT forward_value_param(ValueParamT V) {
+     603              :     return V;
+     604              :   }
+     605              : 
+     606              :   void growAndAssign(size_t NumElts, T Elt) {
+     607              :     // Elt has been copied in case it's an internal reference, side-stepping
+     608              :     // reference invalidation problems without losing the realloc optimization.
+     609              :     this->set_size(0);
+     610              :     this->grow(NumElts);
+     611              :     std::uninitialized_fill_n(this->begin(), NumElts, Elt);
+     612              :     this->set_size(NumElts);
+     613              :   }
+     614              : 
+     615              :   template <typename... ArgTypes>
+     616              :   T& growAndEmplaceBack(ArgTypes&&... Args) {
+     617              :     // Use push_back with a copy in case Args has an internal reference,
+     618              :     // side-stepping reference invalidation problems without losing the realloc
+     619              :     // optimization.
+     620              :     push_back(T(std::forward<ArgTypes>(Args)...));
+     621              :     return this->back();
+     622              :   }
+     623              : 
+     624              :  public:
+     625            0 :   void push_back(ValueParamT Elt) {
+     626            0 :     const T* EltPtr = reserveForParamAndGetAddress(Elt);
+     627            0 :     memcpy(reinterpret_cast<void*>(this->end()), EltPtr, sizeof(T));
+     628            0 :     this->set_size(this->size() + 1);
+     629            0 :   }
+     630              : 
+     631              :   void pop_back() {
+     632              :     this->set_size(this->size() - 1);
+     633              :   }
+     634              : };
+     635              : 
+     636              : /// This class consists of common code factored out of the SmallVector class to
+     637              : /// reduce code duplication based on the SmallVector 'N' template parameter.
+     638              : template <typename T>
+     639              : class SmallVectorImpl : public SmallVectorTemplateBase<T> {
+     640              :   using SuperClass = SmallVectorTemplateBase<T>;
+     641              : 
+     642              :  public:
+     643              :   using iterator = typename SuperClass::iterator;
+     644              :   using const_iterator = typename SuperClass::const_iterator;
+     645              :   using reference = typename SuperClass::reference;
+     646              :   using size_type = typename SuperClass::size_type;
+     647              : 
+     648              :  protected:
+     649              :   using SmallVectorTemplateBase<T>::TakesParamByValue;
+     650              :   using ValueParamT = typename SuperClass::ValueParamT;
+     651              : 
+     652              :   // Default ctor - Initialize to empty.
+     653            0 :   explicit SmallVectorImpl(unsigned N) : SmallVectorTemplateBase<T>(N) {}
+     654              : 
+     655              :  public:
+     656              :   SmallVectorImpl(const SmallVectorImpl&) = delete;
+     657              : 
+     658            0 :   ~SmallVectorImpl() {
+     659              :     // Subclass has already destructed this vector's elements.
+     660              :     // If this wasn't grown from the inline copy, deallocate the old space.
+     661            0 :     if (!this->isSmall())
+     662            0 :       free(this->begin());
+     663            0 :   }
+     664              : 
+     665              :   void clear() {
+     666              :     this->destroy_range(this->begin(), this->end());
+     667              :     this->Size = 0;
+     668              :   }
+     669              : 
+     670              :  private:
+     671              :   template <bool ForOverwrite>
+     672              :   void resizeImpl(size_type N) {
+     673              :     if (N < this->size()) {
+     674              :       this->pop_back_n(this->size() - N);
+     675              :     } else if (N > this->size()) {
+     676              :       this->reserve(N);
+     677              :       for (auto I = this->end(), E = this->begin() + N; I != E; ++I)
+     678              :         if (ForOverwrite)
+     679              :           new (&*I) T;
+     680              :         else
+     681              :           new (&*I) T();
+     682              :       this->set_size(N);
+     683              :     }
+     684              :   }
+     685              : 
+     686              :  public:
+     687              :   void resize(size_type N) {
+     688              :     resizeImpl<false>(N);
+     689              :   }
+     690              : 
+     691              :   /// Like resize, but \ref T is POD, the new values won't be initialized.
+     692              :   void resize_for_overwrite(size_type N) {
+     693              :     resizeImpl<true>(N);
+     694              :   }
+     695              : 
+     696              :   void resize(size_type N, ValueParamT NV) {
+     697              :     if (N == this->size())
+     698              :       return;
+     699              : 
+     700              :     if (N < this->size()) {
+     701              :       this->pop_back_n(this->size() - N);
+     702              :       return;
+     703              :     }
+     704              : 
+     705              :     // N > this->size(). Defer to append.
+     706              :     this->append(N - this->size(), NV);
+     707              :   }
+     708              : 
+     709            0 :   void reserve(size_type N) {
+     710            0 :     if (this->capacity() < N)
+     711            0 :       this->grow(N);
+     712            0 :   }
+     713              : 
+     714              :   void pop_back_n(size_type NumItems) {
+     715              :     assert(this->size() >= NumItems);
+     716              :     this->destroy_range(this->end() - NumItems, this->end());
+     717              :     this->set_size(this->size() - NumItems);
+     718              :   }
+     719              : 
+     720              :   C10_NODISCARD T pop_back_val() {
+     721              :     T Result = ::std::move(this->back());
+     722              :     this->pop_back();
+     723              :     return Result;
+     724              :   }
+     725              : 
+     726              :   void swap(SmallVectorImpl& RHS);
+     727              : 
+     728              :   /// Add the specified range to the end of the SmallVector.
+     729              :   template <
+     730              :       typename in_iter,
+     731              :       typename = std::enable_if_t<std::is_convertible<
+     732              :           typename std::iterator_traits<in_iter>::iterator_category,
+     733              :           std::input_iterator_tag>::value>>
+     734              :   void append(in_iter in_start, in_iter in_end) {
+     735              :     this->assertSafeToAddRange(in_start, in_end);
+     736              :     size_type NumInputs = std::distance(in_start, in_end);
+     737              :     this->reserve(this->size() + NumInputs);
+     738              :     this->uninitialized_copy(in_start, in_end, this->end());
+     739              :     this->set_size(this->size() + NumInputs);
+     740              :   }
+     741              : 
+     742              :   /// Append \p NumInputs copies of \p Elt to the end.
+     743              :   void append(size_type NumInputs, ValueParamT Elt) {
+     744              :     const T* EltPtr = this->reserveForParamAndGetAddress(Elt, NumInputs);
+     745              :     std::uninitialized_fill_n(this->end(), NumInputs, *EltPtr);
+     746              :     this->set_size(this->size() + NumInputs);
+     747              :   }
+     748              : 
+     749              :   void append(std::initializer_list<T> IL) {
+     750              :     append(IL.begin(), IL.end());
+     751              :   }
+     752              : 
+     753              :   void append(const SmallVectorImpl& RHS) {
+     754              :     append(RHS.begin(), RHS.end());
+     755              :   }
+     756              : 
+     757              :   void assign(size_type NumElts, ValueParamT Elt) {
+     758              :     // Note that Elt could be an internal reference.
+     759              :     if (NumElts > this->capacity()) {
+     760              :       this->growAndAssign(NumElts, Elt);
+     761              :       return;
+     762              :     }
+     763              : 
+     764              :     // Assign over existing elements.
+     765              :     std::fill_n(this->begin(), std::min(NumElts, this->size()), Elt);
+     766              :     if (NumElts > this->size())
+     767              :       std::uninitialized_fill_n(this->end(), NumElts - this->size(), Elt);
+     768              :     else if (NumElts < this->size())
+     769              :       this->destroy_range(this->begin() + NumElts, this->end());
+     770              :     this->set_size(NumElts);
+     771              :   }
+     772              : 
+     773              :   // FIXME: Consider assigning over existing elements, rather than clearing &
+     774              :   // re-initializing them - for all assign(...) variants.
+     775              : 
+     776              :   template <
+     777              :       typename in_iter,
+     778              :       typename = std::enable_if_t<std::is_convertible<
+     779              :           typename std::iterator_traits<in_iter>::iterator_category,
+     780              :           std::input_iterator_tag>::value>>
+     781              :   void assign(in_iter in_start, in_iter in_end) {
+     782              :     this->assertSafeToReferenceAfterClear(in_start, in_end);
+     783              :     clear();
+     784              :     append(in_start, in_end);
+     785              :   }
+     786              : 
+     787              :   void assign(std::initializer_list<T> IL) {
+     788              :     clear();
+     789              :     append(IL);
+     790              :   }
+     791              : 
+     792              :   void assign(const SmallVectorImpl& RHS) {
+     793              :     assign(RHS.begin(), RHS.end());
+     794              :   }
+     795              : 
+     796              :   iterator erase(const_iterator CI) {
+     797              :     // Just cast away constness because this is a non-const member function.
+     798              :     iterator I = const_cast<iterator>(CI);
+     799              : 
+     800              :     assert(
+     801              :         this->isReferenceToStorage(CI) &&
+     802              :         "Iterator to erase is out of bounds.");
+     803              : 
+     804              :     iterator N = I;
+     805              :     // Shift all elts down one.
+     806              :     std::move(I + 1, this->end(), I);
+     807              :     // Drop the last elt.
+     808              :     this->pop_back();
+     809              :     return (N);
+     810              :   }
+     811              : 
+     812              :   iterator erase(const_iterator CS, const_iterator CE) {
+     813              :     // Just cast away constness because this is a non-const member function.
+     814              :     iterator S = const_cast<iterator>(CS);
+     815              :     iterator E = const_cast<iterator>(CE);
+     816              : 
+     817              :     assert(this->isRangeInStorage(S, E) && "Range to erase is out of bounds.");
+     818              : 
+     819              :     iterator N = S;
+     820              :     // Shift all elts down.
+     821              :     iterator I = std::move(E, this->end(), S);
+     822              :     // Drop the last elts.
+     823              :     this->destroy_range(I, this->end());
+     824              :     this->set_size(I - this->begin());
+     825              :     return (N);
+     826              :   }
+     827              : 
+     828              :  private:
+     829              :   template <class ArgType>
+     830              :   iterator insert_one_impl(iterator I, ArgType&& Elt) {
+     831              :     // Callers ensure that ArgType is derived from T.
+     832              :     static_assert(
+     833              :         std::is_same<std::remove_const_t<std::remove_reference_t<ArgType>>, T>::
+     834              :             value,
+     835              :         "ArgType must be derived from T!");
+     836              : 
+     837              :     if (I == this->end()) { // Important special case for empty vector.
+     838              :       this->push_back(::std::forward<ArgType>(Elt));
+     839              :       return this->end() - 1;
+     840              :     }
+     841              : 
+     842              :     assert(
+     843              :         this->isReferenceToStorage(I) &&
+     844              :         "Insertion iterator is out of bounds.");
+     845              : 
+     846              :     // Grow if necessary.
+     847              :     size_t Index = I - this->begin();
+     848              :     std::remove_reference_t<ArgType>* EltPtr =
+     849              :         this->reserveForParamAndGetAddress(Elt);
+     850              :     I = this->begin() + Index;
+     851              : 
+     852              :     ::new ((void*)this->end()) T(::std::move(this->back()));
+     853              :     // Push everything else over.
+     854              :     std::move_backward(I, this->end() - 1, this->end());
+     855              :     this->set_size(this->size() + 1);
+     856              : 
+     857              :     // If we just moved the element we're inserting, be sure to update
+     858              :     // the reference (never happens if TakesParamByValue).
+     859              :     static_assert(
+     860              :         !TakesParamByValue || std::is_same<ArgType, T>::value,
+     861              :         "ArgType must be 'T' when taking by value!");
+     862              :     if (!TakesParamByValue && this->isReferenceToRange(EltPtr, I, this->end()))
+     863              :       ++EltPtr;
+     864              : 
+     865              :     *I = ::std::forward<ArgType>(*EltPtr);
+     866              :     return I;
+     867              :   }
+     868              : 
+     869              :  public:
+     870              :   iterator insert(iterator I, T&& Elt) {
+     871              :     return insert_one_impl(I, this->forward_value_param(std::move(Elt)));
+     872              :   }
+     873              : 
+     874              :   iterator insert(iterator I, const T& Elt) {
+     875              :     return insert_one_impl(I, this->forward_value_param(Elt));
+     876              :   }
+     877              : 
+     878              :   iterator insert(iterator I, size_type NumToInsert, ValueParamT Elt) {
+     879              :     // Convert iterator to elt# to avoid invalidating iterator when we reserve()
+     880              :     size_t InsertElt = I - this->begin();
+     881              : 
+     882              :     if (I == this->end()) { // Important special case for empty vector.
+     883              :       append(NumToInsert, Elt);
+     884              :       return this->begin() + InsertElt;
+     885              :     }
+     886              : 
+     887              :     assert(
+     888              :         this->isReferenceToStorage(I) &&
+     889              :         "Insertion iterator is out of bounds.");
+     890              : 
+     891              :     // Ensure there is enough space, and get the (maybe updated) address of
+     892              :     // Elt.
+     893              :     const T* EltPtr = this->reserveForParamAndGetAddress(Elt, NumToInsert);
+     894              : 
+     895              :     // Uninvalidate the iterator.
+     896              :     I = this->begin() + InsertElt;
+     897              : 
+     898              :     // If there are more elements between the insertion point and the end of the
+     899              :     // range than there are being inserted, we can use a simple approach to
+     900              :     // insertion.  Since we already reserved space, we know that this won't
+     901              :     // reallocate the vector.
+     902              :     if (size_t(this->end() - I) >= NumToInsert) {
+     903              :       T* OldEnd = this->end();
+     904              :       append(
+     905              :           std::move_iterator<iterator>(this->end() - NumToInsert),
+     906              :           std::move_iterator<iterator>(this->end()));
+     907              : 
+     908              :       // Copy the existing elements that get replaced.
+     909              :       std::move_backward(I, OldEnd - NumToInsert, OldEnd);
+     910              : 
+     911              :       // If we just moved the element we're inserting, be sure to update
+     912              :       // the reference (never happens if TakesParamByValue).
+     913              :       if (!TakesParamByValue && I <= EltPtr && EltPtr < this->end())
+     914              :         EltPtr += NumToInsert;
+     915              : 
+     916              :       std::fill_n(I, NumToInsert, *EltPtr);
+     917              :       return I;
+     918              :     }
+     919              : 
+     920              :     // Otherwise, we're inserting more elements than exist already, and we're
+     921              :     // not inserting at the end.
+     922              : 
+     923              :     // Move over the elements that we're about to overwrite.
+     924              :     T* OldEnd = this->end();
+     925              :     this->set_size(this->size() + NumToInsert);
+     926              :     size_t NumOverwritten = OldEnd - I;
+     927              :     this->uninitialized_move(I, OldEnd, this->end() - NumOverwritten);
+     928              : 
+     929              :     // If we just moved the element we're inserting, be sure to update
+     930              :     // the reference (never happens if TakesParamByValue).
+     931              :     if (!TakesParamByValue && I <= EltPtr && EltPtr < this->end())
+     932              :       EltPtr += NumToInsert;
+     933              : 
+     934              :     // Replace the overwritten part.
+     935              :     std::fill_n(I, NumOverwritten, *EltPtr);
+     936              : 
+     937              :     // Insert the non-overwritten middle part.
+     938              :     std::uninitialized_fill_n(OldEnd, NumToInsert - NumOverwritten, *EltPtr);
+     939              :     return I;
+     940              :   }
+     941              : 
+     942              :   template <
+     943              :       typename ItTy,
+     944              :       typename = std::enable_if_t<std::is_convertible<
+     945              :           typename std::iterator_traits<ItTy>::iterator_category,
+     946              :           std::input_iterator_tag>::value>>
+     947              :   iterator insert(iterator I, ItTy From, ItTy To) {
+     948              :     // Convert iterator to elt# to avoid invalidating iterator when we reserve()
+     949              :     size_t InsertElt = I - this->begin();
+     950              : 
+     951              :     if (I == this->end()) { // Important special case for empty vector.
+     952              :       append(From, To);
+     953              :       return this->begin() + InsertElt;
+     954              :     }
+     955              : 
+     956              :     assert(
+     957              :         this->isReferenceToStorage(I) &&
+     958              :         "Insertion iterator is out of bounds.");
+     959              : 
+     960              :     // Check that the reserve that follows doesn't invalidate the iterators.
+     961              :     this->assertSafeToAddRange(From, To);
+     962              : 
+     963              :     size_t NumToInsert = std::distance(From, To);
+     964              : 
+     965              :     // Ensure there is enough space.
+     966              :     reserve(this->size() + NumToInsert);
+     967              : 
+     968              :     // Uninvalidate the iterator.
+     969              :     I = this->begin() + InsertElt;
+     970              : 
+     971              :     // If there are more elements between the insertion point and the end of the
+     972              :     // range than there are being inserted, we can use a simple approach to
+     973              :     // insertion.  Since we already reserved space, we know that this won't
+     974              :     // reallocate the vector.
+     975              :     if (size_t(this->end() - I) >= NumToInsert) {
+     976              :       T* OldEnd = this->end();
+     977              :       append(
+     978              :           std::move_iterator<iterator>(this->end() - NumToInsert),
+     979              :           std::move_iterator<iterator>(this->end()));
+     980              : 
+     981              :       // Copy the existing elements that get replaced.
+     982              :       std::move_backward(I, OldEnd - NumToInsert, OldEnd);
+     983              : 
+     984              :       std::copy(From, To, I);
+     985              :       return I;
+     986              :     }
+     987              : 
+     988              :     // Otherwise, we're inserting more elements than exist already, and we're
+     989              :     // not inserting at the end.
+     990              : 
+     991              :     // Move over the elements that we're about to overwrite.
+     992              :     T* OldEnd = this->end();
+     993              :     this->set_size(this->size() + NumToInsert);
+     994              :     size_t NumOverwritten = OldEnd - I;
+     995              :     this->uninitialized_move(I, OldEnd, this->end() - NumOverwritten);
+     996              : 
+     997              :     // Replace the overwritten part.
+     998              :     for (T* J = I; NumOverwritten > 0; --NumOverwritten) {
+     999              :       *J = *From;
+    1000              :       ++J;
+    1001              :       ++From;
+    1002              :     }
+    1003              : 
+    1004              :     // Insert the non-overwritten middle part.
+    1005              :     this->uninitialized_copy(From, To, OldEnd);
+    1006              :     return I;
+    1007              :   }
+    1008              : 
+    1009              :   void insert(iterator I, std::initializer_list<T> IL) {
+    1010              :     insert(I, IL.begin(), IL.end());
+    1011              :   }
+    1012              : 
+    1013              :   template <typename... ArgTypes>
+    1014              :   reference emplace_back(ArgTypes&&... Args) {
+    1015              :     if (C10_UNLIKELY(this->size() >= this->capacity()))
+    1016              :       return this->growAndEmplaceBack(std::forward<ArgTypes>(Args)...);
+    1017              : 
+    1018              :     ::new ((void*)this->end()) T(std::forward<ArgTypes>(Args)...);
+    1019              :     this->set_size(this->size() + 1);
+    1020              :     return this->back();
+    1021              :   }
+    1022              : 
+    1023              :   SmallVectorImpl& operator=(const SmallVectorImpl& RHS);
+    1024              : 
+    1025              :   SmallVectorImpl& operator=(SmallVectorImpl&& RHS);
+    1026              : 
+    1027              :   bool operator==(const SmallVectorImpl& RHS) const {
+    1028              :     if (this->size() != RHS.size())
+    1029              :       return false;
+    1030              :     return std::equal(this->begin(), this->end(), RHS.begin());
+    1031              :   }
+    1032              :   bool operator!=(const SmallVectorImpl& RHS) const {
+    1033              :     return !(*this == RHS);
+    1034              :   }
+    1035              : 
+    1036              :   bool operator<(const SmallVectorImpl& RHS) const {
+    1037              :     return std::lexicographical_compare(
+    1038              :         this->begin(), this->end(), RHS.begin(), RHS.end());
+    1039              :   }
+    1040              : };
+    1041              : 
+    1042              : template <typename T>
+    1043              : void SmallVectorImpl<T>::swap(SmallVectorImpl<T>& RHS) {
+    1044              :   if (this == &RHS)
+    1045              :     return;
+    1046              : 
+    1047              :   // We can only avoid copying elements if neither vector is small.
+    1048              :   if (!this->isSmall() && !RHS.isSmall()) {
+    1049              :     std::swap(this->BeginX, RHS.BeginX);
+    1050              :     std::swap(this->Size, RHS.Size);
+    1051              :     std::swap(this->Capacity, RHS.Capacity);
+    1052              :     return;
+    1053              :   }
+    1054              :   this->reserve(RHS.size());
+    1055              :   RHS.reserve(this->size());
+    1056              : 
+    1057              :   // Swap the shared elements.
+    1058              :   size_t NumShared = this->size();
+    1059              :   if (NumShared > RHS.size())
+    1060              :     NumShared = RHS.size();
+    1061              :   for (size_type i = 0; i != NumShared; ++i)
+    1062              :     std::swap((*this)[i], RHS[i]);
+    1063              : 
+    1064              :   // Copy over the extra elts.
+    1065              :   if (this->size() > RHS.size()) {
+    1066              :     size_t EltDiff = this->size() - RHS.size();
+    1067              :     this->uninitialized_copy(this->begin() + NumShared, this->end(), RHS.end());
+    1068              :     RHS.set_size(RHS.size() + EltDiff);
+    1069              :     this->destroy_range(this->begin() + NumShared, this->end());
+    1070              :     this->set_size(NumShared);
+    1071              :   } else if (RHS.size() > this->size()) {
+    1072              :     size_t EltDiff = RHS.size() - this->size();
+    1073              :     this->uninitialized_copy(RHS.begin() + NumShared, RHS.end(), this->end());
+    1074              :     this->set_size(this->size() + EltDiff);
+    1075              :     this->destroy_range(RHS.begin() + NumShared, RHS.end());
+    1076              :     RHS.set_size(NumShared);
+    1077              :   }
+    1078              : }
+    1079              : 
+    1080              : template <typename T>
+    1081              : SmallVectorImpl<T>& SmallVectorImpl<T>::operator=(
+    1082              :     const SmallVectorImpl<T>& RHS) {
+    1083              :   // Avoid self-assignment.
+    1084              :   if (this == &RHS)
+    1085              :     return *this;
+    1086              : 
+    1087              :   // If we already have sufficient space, assign the common elements, then
+    1088              :   // destroy any excess.
+    1089              :   size_t RHSSize = RHS.size();
+    1090              :   size_t CurSize = this->size();
+    1091              :   if (CurSize >= RHSSize) {
+    1092              :     // Assign common elements.
+    1093              :     iterator NewEnd;
+    1094              :     if (RHSSize)
+    1095              :       NewEnd = std::copy(RHS.begin(), RHS.begin() + RHSSize, this->begin());
+    1096              :     else
+    1097              :       NewEnd = this->begin();
+    1098              : 
+    1099              :     // Destroy excess elements.
+    1100              :     this->destroy_range(NewEnd, this->end());
+    1101              : 
+    1102              :     // Trim.
+    1103              :     this->set_size(RHSSize);
+    1104              :     return *this;
+    1105              :   }
+    1106              : 
+    1107              :   // If we have to grow to have enough elements, destroy the current elements.
+    1108              :   // This allows us to avoid copying them during the grow.
+    1109              :   // FIXME: don't do this if they're efficiently moveable.
+    1110              :   if (this->capacity() < RHSSize) {
+    1111              :     // Destroy current elements.
+    1112              :     this->clear();
+    1113              :     CurSize = 0;
+    1114              :     this->grow(RHSSize);
+    1115              :   } else if (CurSize) {
+    1116              :     // Otherwise, use assignment for the already-constructed elements.
+    1117              :     std::copy(RHS.begin(), RHS.begin() + CurSize, this->begin());
+    1118              :   }
+    1119              : 
+    1120              :   // Copy construct the new elements in place.
+    1121              :   this->uninitialized_copy(
+    1122              :       RHS.begin() + CurSize, RHS.end(), this->begin() + CurSize);
+    1123              : 
+    1124              :   // Set end.
+    1125              :   this->set_size(RHSSize);
+    1126              :   return *this;
+    1127              : }
+    1128              : 
+    1129              : template <typename T>
+    1130              : SmallVectorImpl<T>& SmallVectorImpl<T>::operator=(SmallVectorImpl<T>&& RHS) {
+    1131              :   // Avoid self-assignment.
+    1132              :   if (this == &RHS)
+    1133              :     return *this;
+    1134              : 
+    1135              :   // If the RHS isn't small, clear this vector and then steal its buffer.
+    1136              :   if (!RHS.isSmall()) {
+    1137              :     this->destroy_range(this->begin(), this->end());
+    1138              :     if (!this->isSmall())
+    1139              :       free(this->begin());
+    1140              :     this->BeginX = RHS.BeginX;
+    1141              :     this->Size = RHS.Size;
+    1142              :     this->Capacity = RHS.Capacity;
+    1143              :     RHS.resetToSmall();
+    1144              :     return *this;
+    1145              :   }
+    1146              : 
+    1147              :   // If we already have sufficient space, assign the common elements, then
+    1148              :   // destroy any excess.
+    1149              :   size_t RHSSize = RHS.size();
+    1150              :   size_t CurSize = this->size();
+    1151              :   if (CurSize >= RHSSize) {
+    1152              :     // Assign common elements.
+    1153              :     iterator NewEnd = this->begin();
+    1154              :     if (RHSSize)
+    1155              :       NewEnd = std::move(RHS.begin(), RHS.end(), NewEnd);
+    1156              : 
+    1157              :     // Destroy excess elements and trim the bounds.
+    1158              :     this->destroy_range(NewEnd, this->end());
+    1159              :     this->set_size(RHSSize);
+    1160              : 
+    1161              :     // Clear the RHS.
+    1162              :     RHS.clear();
+    1163              : 
+    1164              :     return *this;
+    1165              :   }
+    1166              : 
+    1167              :   // If we have to grow to have enough elements, destroy the current elements.
+    1168              :   // This allows us to avoid copying them during the grow.
+    1169              :   // FIXME: this may not actually make any sense if we can efficiently move
+    1170              :   // elements.
+    1171              :   if (this->capacity() < RHSSize) {
+    1172              :     // Destroy current elements.
+    1173              :     this->clear();
+    1174              :     CurSize = 0;
+    1175              :     this->grow(RHSSize);
+    1176              :   } else if (CurSize) {
+    1177              :     // Otherwise, use assignment for the already-constructed elements.
+    1178              :     std::move(RHS.begin(), RHS.begin() + CurSize, this->begin());
+    1179              :   }
+    1180              : 
+    1181              :   // Move-construct the new elements in place.
+    1182              :   this->uninitialized_move(
+    1183              :       RHS.begin() + CurSize, RHS.end(), this->begin() + CurSize);
+    1184              : 
+    1185              :   // Set end.
+    1186              :   this->set_size(RHSSize);
+    1187              : 
+    1188              :   RHS.clear();
+    1189              :   return *this;
+    1190              : }
+    1191              : 
+    1192              : /// Storage for the SmallVector elements.  This is specialized for the N=0 case
+    1193              : /// to avoid allocating unnecessary storage.
+    1194              : template <typename T, unsigned N>
+    1195              : struct SmallVectorStorage {
+    1196              :   alignas(T) char InlineElts[N * sizeof(T)];
+    1197              : };
+    1198              : 
+    1199              : /// We need the storage to be properly aligned even for small-size of 0 so that
+    1200              : /// the pointer math in \a SmallVectorTemplateCommon::getFirstEl() is
+    1201              : /// well-defined.
+    1202              : template <typename T>
+    1203              : struct alignas(T) SmallVectorStorage<T, 0> {};
+    1204              : 
+    1205              : /// Forward declaration of SmallVector so that
+    1206              : /// calculateSmallVectorDefaultInlinedElements can reference
+    1207              : /// `sizeof(SmallVector<T, 0>)`.
+    1208              : template <typename T, unsigned N>
+    1209              : class /* LLVM_GSL_OWNER */ SmallVector;
+    1210              : 
+    1211              : /// Helper class for calculating the default number of inline elements for
+    1212              : /// `SmallVector<T>`.
+    1213              : ///
+    1214              : /// This should be migrated to a constexpr function when our minimum
+    1215              : /// compiler support is enough for multi-statement constexpr functions.
+    1216              : template <typename T>
+    1217              : struct CalculateSmallVectorDefaultInlinedElements {
+    1218              :   // Parameter controlling the default number of inlined elements
+    1219              :   // for `SmallVector<T>`.
+    1220              :   //
+    1221              :   // The default number of inlined elements ensures that
+    1222              :   // 1. There is at least one inlined element.
+    1223              :   // 2. `sizeof(SmallVector<T>) <= kPreferredSmallVectorSizeof` unless
+    1224              :   // it contradicts 1.
+    1225              :   static constexpr size_t kPreferredSmallVectorSizeof = 64;
+    1226              : 
+    1227              :   // static_assert that sizeof(T) is not "too big".
+    1228              :   //
+    1229              :   // Because our policy guarantees at least one inlined element, it is possible
+    1230              :   // for an arbitrarily large inlined element to allocate an arbitrarily large
+    1231              :   // amount of inline storage. We generally consider it an antipattern for a
+    1232              :   // SmallVector to allocate an excessive amount of inline storage, so we want
+    1233              :   // to call attention to these cases and make sure that users are making an
+    1234              :   // intentional decision if they request a lot of inline storage.
+    1235              :   //
+    1236              :   // We want this assertion to trigger in pathological cases, but otherwise
+    1237              :   // not be too easy to hit. To accomplish that, the cutoff is actually somewhat
+    1238              :   // larger than kPreferredSmallVectorSizeof (otherwise,
+    1239              :   // `SmallVector<SmallVector<T>>` would be one easy way to trip it, and that
+    1240              :   // pattern seems useful in practice).
+    1241              :   //
+    1242              :   // One wrinkle is that this assertion is in theory non-portable, since
+    1243              :   // sizeof(T) is in general platform-dependent. However, we don't expect this
+    1244              :   // to be much of an issue, because most LLVM development happens on 64-bit
+    1245              :   // hosts, and therefore sizeof(T) is expected to *decrease* when compiled for
+    1246              :   // 32-bit hosts, dodging the issue. The reverse situation, where development
+    1247              :   // happens on a 32-bit host and then fails due to sizeof(T) *increasing* on a
+    1248              :   // 64-bit host, is expected to be very rare.
+    1249              :   static_assert(
+    1250              :       sizeof(T) <= 256,
+    1251              :       "You are trying to use a default number of inlined elements for "
+    1252              :       "`SmallVector<T>` but `sizeof(T)` is really big! Please use an "
+    1253              :       "explicit number of inlined elements with `SmallVector<T, N>` to make "
+    1254              :       "sure you really want that much inline storage.");
+    1255              : 
+    1256              :   // Discount the size of the header itself when calculating the maximum inline
+    1257              :   // bytes.
+    1258              :   static constexpr size_t PreferredInlineBytes =
+    1259              :       kPreferredSmallVectorSizeof - sizeof(SmallVector<T, 0>);
+    1260              :   static constexpr size_t NumElementsThatFit = PreferredInlineBytes / sizeof(T);
+    1261              :   static constexpr size_t value =
+    1262              :       NumElementsThatFit == 0 ? 1 : NumElementsThatFit;
+    1263              : };
+    1264              : 
+    1265              : /// This is a 'vector' (really, a variable-sized array), optimized
+    1266              : /// for the case when the array is small.  It contains some number of elements
+    1267              : /// in-place, which allows it to avoid heap allocation when the actual number of
+    1268              : /// elements is below that threshold.  This allows normal "small" cases to be
+    1269              : /// fast without losing generality for large inputs.
+    1270              : ///
+    1271              : /// \note
+    1272              : /// In the absence of a well-motivated choice for the number of inlined
+    1273              : /// elements \p N, it is recommended to use \c SmallVector<T> (that is,
+    1274              : /// omitting the \p N). This will choose a default number of inlined elements
+    1275              : /// reasonable for allocation on the stack (for example, trying to keep \c
+    1276              : /// sizeof(SmallVector<T>) around 64 bytes).
+    1277              : ///
+    1278              : /// \warning This does not attempt to be exception safe.
+    1279              : ///
+    1280              : /// \see https://llvm.org/docs/ProgrammersManual.html#llvm-adt-smallvector-h
+    1281              : template <
+    1282              :     typename T,
+    1283              :     unsigned N = CalculateSmallVectorDefaultInlinedElements<T>::value>
+    1284              : class /* LLVM_GSL_OWNER */ SmallVector : public SmallVectorImpl<T>,
+    1285              :                                          SmallVectorStorage<T, N> {
+    1286              :  public:
+    1287            0 :   SmallVector() : SmallVectorImpl<T>(N) {}
+    1288              : 
+    1289            0 :   ~SmallVector() {
+    1290              :     // Destroy the constructed elements in the vector.
+    1291            0 :     this->destroy_range(this->begin(), this->end());
+    1292            0 :   }
+    1293              : 
+    1294              :   explicit SmallVector(size_t Size, const T& Value = T())
+    1295              :       : SmallVectorImpl<T>(N) {
+    1296              :     this->assign(Size, Value);
+    1297              :   }
+    1298              : 
+    1299              :   template <
+    1300              :       typename ItTy,
+    1301              :       typename = std::enable_if_t<std::is_convertible<
+    1302              :           typename std::iterator_traits<ItTy>::iterator_category,
+    1303              :           std::input_iterator_tag>::value>>
+    1304              :   SmallVector(ItTy S, ItTy E) : SmallVectorImpl<T>(N) {
+    1305              :     this->append(S, E);
+    1306              :   }
+    1307              : 
+    1308              :   // note: The enable_if restricts Container to types that have a .begin() and
+    1309              :   // .end() that return valid input iterators.
+    1310              :   template <
+    1311              :       typename Container,
+    1312              :       std::enable_if_t<
+    1313              :           std::is_convertible<
+    1314              :               typename std::iterator_traits<
+    1315              :                   decltype(std::declval<Container>()
+    1316              :                                .begin())>::iterator_category,
+    1317              :               std::input_iterator_tag>::value &&
+    1318              :               std::is_convertible<
+    1319              :                   typename std::iterator_traits<
+    1320              :                       decltype(std::declval<Container>()
+    1321              :                                    .end())>::iterator_category,
+    1322              :                   std::input_iterator_tag>::value,
+    1323              :           int> = 0>
+    1324              :   explicit SmallVector(Container&& c) : SmallVectorImpl<T>(N) {
+    1325              :     this->append(c.begin(), c.end());
+    1326              :   }
+    1327              : 
+    1328              :   SmallVector(std::initializer_list<T> IL) : SmallVectorImpl<T>(N) {
+    1329              :     this->assign(IL);
+    1330              :   }
+    1331              : 
+    1332              :   SmallVector(const SmallVector& RHS) : SmallVectorImpl<T>(N) {
+    1333              :     if (!RHS.empty())
+    1334              :       SmallVectorImpl<T>::operator=(RHS);
+    1335              :   }
+    1336              : 
+    1337              :   SmallVector& operator=(const SmallVector& RHS) {
+    1338              :     SmallVectorImpl<T>::operator=(RHS);
+    1339              :     return *this;
+    1340              :   }
+    1341              : 
+    1342              :   SmallVector(SmallVector&& RHS) : SmallVectorImpl<T>(N) {
+    1343              :     if (!RHS.empty())
+    1344              :       SmallVectorImpl<T>::operator=(::std::move(RHS));
+    1345              :   }
+    1346              : 
+    1347              :   // note: The enable_if restricts Container to types that have a .begin() and
+    1348              :   // .end() that return valid input iterators.
+    1349              :   template <
+    1350              :       typename Container,
+    1351              :       std::enable_if_t<
+    1352              :           std::is_convertible<
+    1353              :               typename std::iterator_traits<
+    1354              :                   decltype(std::declval<Container>()
+    1355              :                                .begin())>::iterator_category,
+    1356              :               std::input_iterator_tag>::value &&
+    1357              :               std::is_convertible<
+    1358              :                   typename std::iterator_traits<
+    1359              :                       decltype(std::declval<Container>()
+    1360              :                                    .end())>::iterator_category,
+    1361              :                   std::input_iterator_tag>::value,
+    1362              :           int> = 0>
+    1363              :   const SmallVector& operator=(const Container& RHS) {
+    1364              :     this->assign(RHS.begin(), RHS.end());
+    1365              :     return *this;
+    1366              :   }
+    1367              : 
+    1368              :   SmallVector(SmallVectorImpl<T>&& RHS) : SmallVectorImpl<T>(N) {
+    1369              :     if (!RHS.empty())
+    1370              :       SmallVectorImpl<T>::operator=(::std::move(RHS));
+    1371              :   }
+    1372              : 
+    1373              :   SmallVector& operator=(SmallVector&& RHS) {
+    1374              :     SmallVectorImpl<T>::operator=(::std::move(RHS));
+    1375              :     return *this;
+    1376              :   }
+    1377              : 
+    1378              :   SmallVector& operator=(SmallVectorImpl<T>&& RHS) {
+    1379              :     SmallVectorImpl<T>::operator=(::std::move(RHS));
+    1380              :     return *this;
+    1381              :   }
+    1382              : 
+    1383              :   // note: The enable_if restricts Container to types that have a .begin() and
+    1384              :   // .end() that return valid input iterators.
+    1385              :   template <
+    1386              :       typename Container,
+    1387              :       std::enable_if_t<
+    1388              :           std::is_convertible<
+    1389              :               typename std::iterator_traits<
+    1390              :                   decltype(std::declval<Container>()
+    1391              :                                .begin())>::iterator_category,
+    1392              :               std::input_iterator_tag>::value &&
+    1393              :               std::is_convertible<
+    1394              :                   typename std::iterator_traits<
+    1395              :                       decltype(std::declval<Container>()
+    1396              :                                    .end())>::iterator_category,
+    1397              :                   std::input_iterator_tag>::value,
+    1398              :           int> = 0>
+    1399              :   const SmallVector& operator=(Container&& C) {
+    1400              :     this->assign(C.begin(), C.end());
+    1401              :     return *this;
+    1402              :   }
+    1403              : 
+    1404              :   SmallVector& operator=(std::initializer_list<T> IL) {
+    1405              :     this->assign(IL);
+    1406              :     return *this;
+    1407              :   }
+    1408              : };
+    1409              : 
+    1410              : template <typename T, unsigned N>
+    1411              : inline size_t capacity_in_bytes(const SmallVector<T, N>& X) {
+    1412              :   return X.capacity_in_bytes();
+    1413              : }
+    1414              : 
+    1415              : template <typename T, unsigned N>
+    1416              : std::ostream& operator<<(std::ostream& out, const SmallVector<T, N>& list) {
+    1417              :   int i = 0;
+    1418              :   out << "[";
+    1419              :   for (auto e : list) {
+    1420              :     if (i++ > 0)
+    1421              :       out << ", ";
+    1422              :     out << e;
+    1423              :   }
+    1424              :   out << "]";
+    1425              :   return out;
+    1426              : }
+    1427              : 
+    1428              : template <typename RangeType>
+    1429              : using ValueTypeFromRangeType =
+    1430              :     typename std::remove_const<typename std::remove_reference<
+    1431              :         decltype(*std::begin(std::declval<RangeType&>()))>::type>::type;
+    1432              : 
+    1433              : /// Given a range of type R, iterate the entire range and return a
+    1434              : /// SmallVector with elements of the vector.  This is useful, for example,
+    1435              : /// when you want to iterate a range and then sort the results.
+    1436              : template <unsigned Size, typename R>
+    1437              : SmallVector<ValueTypeFromRangeType<R>, Size> to_vector(R&& Range) {
+    1438              :   return {std::begin(Range), std::end(Range)};
+    1439              : }
+    1440              : template <typename R>
+    1441              : SmallVector<
+    1442              :     ValueTypeFromRangeType<R>,
+    1443              :     CalculateSmallVectorDefaultInlinedElements<
+    1444              :         ValueTypeFromRangeType<R>>::value>
+    1445              : to_vector(R&& Range) {
+    1446              :   return {std::begin(Range), std::end(Range)};
+    1447              : }
+    1448              : 
+    1449              : } // end namespace c10
+    1450              : 
+    1451              : namespace std {
+    1452              : 
+    1453              : /// Implement std::swap in terms of SmallVector swap.
+    1454              : template <typename T>
+    1455              : inline void swap(c10::SmallVectorImpl<T>& LHS, c10::SmallVectorImpl<T>& RHS) {
+    1456              :   LHS.swap(RHS);
+    1457              : }
+    1458              : 
+    1459              : /// Implement std::swap in terms of SmallVector swap.
+    1460              : template <typename T, unsigned N>
+    1461              : inline void swap(c10::SmallVector<T, N>& LHS, c10::SmallVector<T, N>& RHS) {
+    1462              :   LHS.swap(RHS);
+    1463              : }
+    1464              : 
+    1465              : } // end namespace std
+    1466              : 
+    1467              : C10_CLANG_DIAGNOSTIC_POP()
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/StringUtil.h.func-c.html b/html/libtorch/include/c10/util/StringUtil.h.func-c.html new file mode 100644 index 0000000..996d49f --- /dev/null +++ b/html/libtorch/include/c10/util/StringUtil.h.func-c.html @@ -0,0 +1,446 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/StringUtil.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - StringUtil.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %160
Test Date:2024-04-30 13:17:26Functions:0.0 %490
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c103strIJEEEDcDpRKT_0
_ZN3c103strIJA154_cEEEDcDpRKT_0
_ZN3c103strIJA16_ciEEEDcDpRKT_0
_ZN3c103strIJA25_cNS_10ScalarTypeEA28_cEEEDcDpRKT_0
_ZN3c103strIJA25_cmA22_clEEEDcDpRKT_0
_ZN3c103strIJA29_cmA51_clA24_cEEEDcDpRKT_0
_ZN3c103strIJA32_cNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEDcDpRKT_0
_ZN3c103strIJA33_cEEEDcDpRKT_0
_ZN3c103strIJA42_ciEEEDcDpRKT_0
_ZN3c103strIJA46_ciEEEDcDpRKT_0
_ZN3c103strIJA57_cPKcA2_cEEEDcDpRKT_0
_ZN3c103strIJA58_clEEEDcDpRKT_0
_ZN3c103strIJA63_cEEEDcDpRKT_0
_ZN3c103strIJA68_cEEEDcDpRKT_0
_ZN3c103strIJA69_clEEEDcDpRKT_0
_ZN3c103strIJA81_cEEEDcDpRKT_0
_ZN3c103strIJA82_cEEEDcDpRKT_0
_ZN3c103strIJA92_cmEEEDcDpRKT_0
_ZN3c103strIJA94_cEEEDcDpRKT_0
_ZN3c103strIJEEEDcDpRKT_0
_ZN3c106detail12_str_wrapperIJEE4callEv0
_ZN3c106detail12_str_wrapperIJPKcEE4callES3_0
_ZN3c106detail12_str_wrapperIJPKcRKiEE4callB5cxx11ERKS3_S5_0
_ZN3c106detail12_str_wrapperIJPKcRKNS_10ScalarTypeES3_EE4callB5cxx11ERKS3_S6_S9_0
_ZN3c106detail12_str_wrapperIJPKcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE4callERKS3_SB_0
_ZN3c106detail12_str_wrapperIJPKcRKS3_S3_EE4callB5cxx11ES5_S5_S5_0
_ZN3c106detail12_str_wrapperIJPKcRKiEE4callB5cxx11ERKS3_S5_0
_ZN3c106detail12_str_wrapperIJPKcRKlEE4callB5cxx11ERKS3_S5_0
_ZN3c106detail12_str_wrapperIJPKcRKmEE4callB5cxx11ERKS3_S5_0
_ZN3c106detail12_str_wrapperIJPKcRKmS3_RKlEE4callB5cxx11ERKS3_S5_SA_S7_0
_ZN3c106detail12_str_wrapperIJPKcRKmS3_RKlS3_EE4callB5cxx11ERKS3_S5_SA_S7_SA_0
_ZN3c106detail4_strIPKcJiEEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strINS_10ScalarTypeEJPKcEEERSoS5_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJNS_10ScalarTypeES3_EEERSoS5_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEERSoSA_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJS3_EEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJS3_S3_EEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJiEEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJlEEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJlS3_EEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJmEEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJmS3_lEEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJmS3_lS3_EEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strIlJPKcEEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strImJPKclEEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strImJPKclS3_EEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strIiEERSoS2_RKT_0
_ZN3c106detail4_strINS_10ScalarTypeEEERSoS3_RKT_0
_ZN3c106detail4_strINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEERSoS8_RKT_0
_ZN3c106detail4_strIPKcEERSoS4_RKT_0
_ZN3c106detail4_strIiEERSoS2_RKT_0
_ZN3c106detail4_strIlEERSoS2_RKT_0
_ZN3c106detail4_strImEERSoS2_RKT_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/StringUtil.h.func.html b/html/libtorch/include/c10/util/StringUtil.h.func.html new file mode 100644 index 0000000..7447f5c --- /dev/null +++ b/html/libtorch/include/c10/util/StringUtil.h.func.html @@ -0,0 +1,446 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/StringUtil.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - StringUtil.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %160
Test Date:2024-04-30 13:17:26Functions:0.0 %490
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c103strIJEEEDcDpRKT_0
_ZN3c103strIJA154_cEEEDcDpRKT_0
_ZN3c103strIJA16_ciEEEDcDpRKT_0
_ZN3c103strIJA25_cNS_10ScalarTypeEA28_cEEEDcDpRKT_0
_ZN3c103strIJA25_cmA22_clEEEDcDpRKT_0
_ZN3c103strIJA29_cmA51_clA24_cEEEDcDpRKT_0
_ZN3c103strIJA32_cNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEDcDpRKT_0
_ZN3c103strIJA33_cEEEDcDpRKT_0
_ZN3c103strIJA42_ciEEEDcDpRKT_0
_ZN3c103strIJA46_ciEEEDcDpRKT_0
_ZN3c103strIJA57_cPKcA2_cEEEDcDpRKT_0
_ZN3c103strIJA58_clEEEDcDpRKT_0
_ZN3c103strIJA63_cEEEDcDpRKT_0
_ZN3c103strIJA68_cEEEDcDpRKT_0
_ZN3c103strIJA69_clEEEDcDpRKT_0
_ZN3c103strIJA81_cEEEDcDpRKT_0
_ZN3c103strIJA82_cEEEDcDpRKT_0
_ZN3c103strIJA92_cmEEEDcDpRKT_0
_ZN3c103strIJA94_cEEEDcDpRKT_0
_ZN3c103strIJEEEDcDpRKT_0
_ZN3c106detail12_str_wrapperIJEE4callEv0
_ZN3c106detail12_str_wrapperIJPKcEE4callES3_0
_ZN3c106detail12_str_wrapperIJPKcRKiEE4callB5cxx11ERKS3_S5_0
_ZN3c106detail12_str_wrapperIJPKcRKNS_10ScalarTypeES3_EE4callB5cxx11ERKS3_S6_S9_0
_ZN3c106detail12_str_wrapperIJPKcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE4callERKS3_SB_0
_ZN3c106detail12_str_wrapperIJPKcRKS3_S3_EE4callB5cxx11ES5_S5_S5_0
_ZN3c106detail12_str_wrapperIJPKcRKiEE4callB5cxx11ERKS3_S5_0
_ZN3c106detail12_str_wrapperIJPKcRKlEE4callB5cxx11ERKS3_S5_0
_ZN3c106detail12_str_wrapperIJPKcRKmEE4callB5cxx11ERKS3_S5_0
_ZN3c106detail12_str_wrapperIJPKcRKmS3_RKlEE4callB5cxx11ERKS3_S5_SA_S7_0
_ZN3c106detail12_str_wrapperIJPKcRKmS3_RKlS3_EE4callB5cxx11ERKS3_S5_SA_S7_SA_0
_ZN3c106detail4_strIPKcJiEEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strINS_10ScalarTypeEJPKcEEERSoS5_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJNS_10ScalarTypeES3_EEERSoS5_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEERSoSA_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJS3_EEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJS3_S3_EEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJiEEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJlEEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJlS3_EEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJmEEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJmS3_lEEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strIPKcJmS3_lS3_EEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strIlJPKcEEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strImJPKclEEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strImJPKclS3_EEERSoS4_RKT_DpRKT0_0
_ZN3c106detail4_strIiEERSoS2_RKT_0
_ZN3c106detail4_strINS_10ScalarTypeEEERSoS3_RKT_0
_ZN3c106detail4_strINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEERSoS8_RKT_0
_ZN3c106detail4_strIPKcEERSoS4_RKT_0
_ZN3c106detail4_strIiEERSoS2_RKT_0
_ZN3c106detail4_strIlEERSoS2_RKT_0
_ZN3c106detail4_strImEERSoS2_RKT_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/StringUtil.h.gcov.html b/html/libtorch/include/c10/util/StringUtil.h.gcov.html new file mode 100644 index 0000000..42bf4f2 --- /dev/null +++ b/html/libtorch/include/c10/util/StringUtil.h.gcov.html @@ -0,0 +1,278 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/StringUtil.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - StringUtil.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %160
Test Date:2024-04-30 13:17:26Functions:0.0 %490
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #ifndef C10_UTIL_STRINGUTIL_H_
+       2              : #define C10_UTIL_STRINGUTIL_H_
+       3              : 
+       4              : #include <c10/macros/Macros.h>
+       5              : #include <c10/util/string_utils.h>
+       6              : #include <c10/util/string_view.h>
+       7              : 
+       8              : #include <cstddef>
+       9              : #include <ostream>
+      10              : #include <sstream>
+      11              : #include <string>
+      12              : #include <vector>
+      13              : 
+      14              : C10_CLANG_DIAGNOSTIC_PUSH()
+      15              : #if C10_CLANG_HAS_WARNING("-Wshorten-64-to-32")
+      16              : C10_CLANG_DIAGNOSTIC_IGNORE("-Wshorten-64-to-32")
+      17              : #endif
+      18              : 
+      19              : namespace c10 {
+      20              : 
+      21              : namespace detail {
+      22              : 
+      23              : // Obtains the base name from a full path.
+      24              : C10_API std::string StripBasename(const std::string& full_path);
+      25              : 
+      26              : C10_API std::string ExcludeFileExtension(const std::string& full_path);
+      27              : 
+      28              : struct CompileTimeEmptyString {
+      29              :   operator const std::string&() const {
+      30              :     static const std::string empty_string_literal;
+      31              :     return empty_string_literal;
+      32              :   }
+      33              :   operator const char*() const {
+      34              :     return "";
+      35              :   }
+      36              : };
+      37              : 
+      38              : template <typename T>
+      39              : struct CanonicalizeStrTypes {
+      40              :   using type = const T&;
+      41              : };
+      42              : 
+      43              : template <size_t N>
+      44              : struct CanonicalizeStrTypes<char[N]> {
+      45              :   using type = const char*;
+      46              : };
+      47              : 
+      48              : inline std::ostream& _str(std::ostream& ss) {
+      49              :   return ss;
+      50              : }
+      51              : 
+      52              : template <typename T>
+      53            0 : inline std::ostream& _str(std::ostream& ss, const T& t) {
+      54              :   // NOLINTNEXTLINE(clang-analyzer-core.CallAndMessage)
+      55            0 :   ss << t;
+      56            0 :   return ss;
+      57              : }
+      58              : 
+      59              : template <>
+      60              : inline std::ostream& _str<CompileTimeEmptyString>(
+      61              :     std::ostream& ss,
+      62              :     const CompileTimeEmptyString&) {
+      63              :   return ss;
+      64              : }
+      65              : 
+      66              : template <typename T, typename... Args>
+      67            0 : inline std::ostream& _str(std::ostream& ss, const T& t, const Args&... args) {
+      68            0 :   return _str(_str(ss, t), args...);
+      69              : }
+      70              : 
+      71              : template <typename... Args>
+      72              : struct _str_wrapper final {
+      73            0 :   static std::string call(const Args&... args) {
+      74            0 :     std::ostringstream ss;
+      75            0 :     _str(ss, args...);
+      76            0 :     return ss.str();
+      77            0 :   }
+      78              : };
+      79              : 
+      80              : // Specializations for already-a-string types.
+      81              : template <>
+      82              : struct _str_wrapper<std::string> final {
+      83              :   // return by reference to avoid the binary size of a string copy
+      84              :   static const std::string& call(const std::string& str) {
+      85              :     return str;
+      86              :   }
+      87              : };
+      88              : 
+      89              : template <>
+      90              : struct _str_wrapper<const char*> final {
+      91            0 :   static const char* call(const char* str) {
+      92            0 :     return str;
+      93              :   }
+      94              : };
+      95              : 
+      96              : // For c10::str() with an empty argument list (which is common in our assert
+      97              : // macros), we don't want to pay the binary size for constructing and
+      98              : // destructing a stringstream or even constructing a string.
+      99              : template <>
+     100              : struct _str_wrapper<> final {
+     101            0 :   static CompileTimeEmptyString call() {
+     102            0 :     return CompileTimeEmptyString();
+     103              :   }
+     104              : };
+     105              : 
+     106              : } // namespace detail
+     107              : 
+     108              : // Convert a list of string-like arguments into a single string.
+     109              : template <typename... Args>
+     110            0 : inline decltype(auto) str(const Args&... args) {
+     111              :   return detail::_str_wrapper<
+     112            0 :       typename detail::CanonicalizeStrTypes<Args>::type...>::call(args...);
+     113              : }
+     114              : 
+     115              : template <class Container>
+     116              : inline std::string Join(const std::string& delimiter, const Container& v) {
+     117              :   std::stringstream s;
+     118              :   int cnt = static_cast<int64_t>(v.size()) - 1;
+     119              :   for (auto i = v.begin(); i != v.end(); ++i, --cnt) {
+     120              :     s << (*i) << (cnt ? delimiter : "");
+     121              :   }
+     122              :   return s.str();
+     123              : }
+     124              : 
+     125              : // Replace all occurrences of "from" substring to "to" string.
+     126              : // Returns number of replacements
+     127              : size_t C10_API
+     128              : ReplaceAll(std::string& s, c10::string_view from, c10::string_view to);
+     129              : 
+     130              : /// Represents a location in source code (for debugging).
+     131              : struct C10_API SourceLocation {
+     132              :   const char* function;
+     133              :   const char* file;
+     134              :   uint32_t line;
+     135              : };
+     136              : 
+     137              : std::ostream& operator<<(std::ostream& out, const SourceLocation& loc);
+     138              : 
+     139              : // unix isprint but insensitive to locale
+     140              : inline static bool isPrint(char s) {
+     141              :   return s > 0x1f && s < 0x7f;
+     142              : }
+     143              : 
+     144              : inline void printQuotedString(std::ostream& stmt, const string_view str) {
+     145              :   stmt << "\"";
+     146              :   for (auto s : str) {
+     147              :     switch (s) {
+     148              :       case '\\':
+     149              :         stmt << "\\\\";
+     150              :         break;
+     151              :       case '\'':
+     152              :         stmt << "\\'";
+     153              :         break;
+     154              :       case '\"':
+     155              :         stmt << "\\\"";
+     156              :         break;
+     157              :       case '\a':
+     158              :         stmt << "\\a";
+     159              :         break;
+     160              :       case '\b':
+     161              :         stmt << "\\b";
+     162              :         break;
+     163              :       case '\f':
+     164              :         stmt << "\\f";
+     165              :         break;
+     166              :       case '\n':
+     167              :         stmt << "\\n";
+     168              :         break;
+     169              :       case '\r':
+     170              :         stmt << "\\r";
+     171              :         break;
+     172              :       case '\t':
+     173              :         stmt << "\\t";
+     174              :         break;
+     175              :       case '\v':
+     176              :         stmt << "\\v";
+     177              :         break;
+     178              :       default:
+     179              :         if (isPrint(s)) {
+     180              :           stmt << s;
+     181              :         } else {
+     182              :           // C++ io has stateful formatting settings. Messing with
+     183              :           // them is probably worse than doing this manually.
+     184              :           char buf[4] = "000";
+     185              :           buf[2] += s % 8;
+     186              :           s /= 8;
+     187              :           buf[1] += s % 8;
+     188              :           s /= 8;
+     189              :           buf[0] += s;
+     190              :           stmt << "\\" << buf;
+     191              :         }
+     192              :         break;
+     193              :     }
+     194              :   }
+     195              :   stmt << "\"";
+     196              : }
+     197              : 
+     198              : } // namespace c10
+     199              : 
+     200              : C10_CLANG_DIAGNOSTIC_POP()
+     201              : 
+     202              : #endif // C10_UTIL_STRINGUTIL_H_
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/TypeCast.h.func-c.html b/html/libtorch/include/c10/util/TypeCast.h.func-c.html new file mode 100644 index 0000000..79f3598 --- /dev/null +++ b/html/libtorch/include/c10/util/TypeCast.h.func-c.html @@ -0,0 +1,271 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/TypeCast.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - TypeCast.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:78.6 %1411
Test Date:2024-04-30 13:17:26Functions:54.2 %2413
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1010maybe_realILb1ENS_7complexIdEEE5applyES2_0
_ZN3c1015checked_convertIlbEET_T0_PKc7072
_ZN3c1015checked_convertIlNS_7complexIdEEEET_T0_PKc0
_ZN3c1015checked_convertIlbEET_T0_PKc0
_ZN3c1015checked_convertIldEET_T0_PKc0
_ZN3c1015checked_convertIllEET_T0_PKc7072
_ZN3c1010maybe_realILb0EbE5applyEb10741350
_ZN3c1010maybe_realILb0EbE5applyEb0
_ZN3c1010maybe_realILb0EfE5applyEf366
_ZN3c1010maybe_realILb0ElE5applyEl408390
_ZN3c1010maybe_realILb0EdE5applyEd5159946
_ZN3c1010maybe_realILb0EiE5applyEi5172648
_ZN3c1027static_cast_with_inter_typeIddE5applyEd10741350
_ZN3c1027static_cast_with_inter_typeIlNS_7complexIdEEE5applyES2_0
_ZN3c1027static_cast_with_inter_typeIlbE5applyEb0
_ZN3c1027static_cast_with_inter_typeIldE5applyEd0
_ZN3c1027static_cast_with_inter_typeIdfE5applyEf366
_ZN3c1027static_cast_with_inter_typeIllE5applyEl408390
_ZN3c1027static_cast_with_inter_typeIddE5applyEd5159946
_ZN3c1027static_cast_with_inter_typeIliE5applyEi5172648
_ZN3c107convertIddEET_T0_10741350
_ZN3c107convertIlNS_7complexIdEEEET_T0_0
_ZN3c107convertIlbEET_T0_0
_ZN3c107convertIldEET_T0_0
_ZN3c107convertIdfEET_T0_366
_ZN3c107convertIllEET_T0_408390
_ZN3c107convertIddEET_T0_5159946
_ZN3c107convertIliEET_T0_5172648
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/TypeCast.h.func.html b/html/libtorch/include/c10/util/TypeCast.h.func.html new file mode 100644 index 0000000..ffd12ac --- /dev/null +++ b/html/libtorch/include/c10/util/TypeCast.h.func.html @@ -0,0 +1,271 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/TypeCast.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - TypeCast.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:78.6 %1411
Test Date:2024-04-30 13:17:26Functions:54.2 %2413
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1010maybe_realILb0EbE5applyEb10741350
_ZN3c1010maybe_realILb0EbE5applyEb0
_ZN3c1010maybe_realILb0EdE5applyEd5159946
_ZN3c1010maybe_realILb0EfE5applyEf366
_ZN3c1010maybe_realILb0EiE5applyEi5172648
_ZN3c1010maybe_realILb0ElE5applyEl408390
_ZN3c1010maybe_realILb1ENS_7complexIdEEE5applyES2_0
_ZN3c1015checked_convertIlbEET_T0_PKc7072
_ZN3c1015checked_convertIlNS_7complexIdEEEET_T0_PKc0
_ZN3c1015checked_convertIlbEET_T0_PKc0
_ZN3c1015checked_convertIldEET_T0_PKc0
_ZN3c1015checked_convertIllEET_T0_PKc7072
_ZN3c1027static_cast_with_inter_typeIddE5applyEd10741350
_ZN3c1027static_cast_with_inter_typeIddE5applyEd5159946
_ZN3c1027static_cast_with_inter_typeIdfE5applyEf366
_ZN3c1027static_cast_with_inter_typeIlNS_7complexIdEEE5applyES2_0
_ZN3c1027static_cast_with_inter_typeIlbE5applyEb0
_ZN3c1027static_cast_with_inter_typeIldE5applyEd0
_ZN3c1027static_cast_with_inter_typeIliE5applyEi5172648
_ZN3c1027static_cast_with_inter_typeIllE5applyEl408390
_ZN3c107convertIddEET_T0_10741350
_ZN3c107convertIddEET_T0_5159946
_ZN3c107convertIdfEET_T0_366
_ZN3c107convertIlNS_7complexIdEEEET_T0_0
_ZN3c107convertIlbEET_T0_0
_ZN3c107convertIldEET_T0_0
_ZN3c107convertIliEET_T0_5172648
_ZN3c107convertIllEET_T0_408390
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/TypeCast.h.gcov.html b/html/libtorch/include/c10/util/TypeCast.h.gcov.html new file mode 100644 index 0000000..5678040 --- /dev/null +++ b/html/libtorch/include/c10/util/TypeCast.h.gcov.html @@ -0,0 +1,220 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/TypeCast.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - TypeCast.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:78.6 %1411
Test Date:2024-04-30 13:17:26Functions:54.2 %2413
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : #include <c10/macros/Macros.h>
+       3              : #include <c10/util/BFloat16.h>
+       4              : #include <c10/util/Float8_e4m3fn.h>
+       5              : #include <c10/util/Float8_e5m2.h>
+       6              : #include <c10/util/Half.h>
+       7              : 
+       8              : #include <type_traits>
+       9              : 
+      10              : C10_CLANG_DIAGNOSTIC_PUSH()
+      11              : #if C10_CLANG_HAS_WARNING("-Wimplicit-float-conversion")
+      12              : C10_CLANG_DIAGNOSTIC_IGNORE("-Wimplicit-float-conversion")
+      13              : #endif
+      14              : #if C10_CLANG_HAS_WARNING("-Wimplicit-int-float-conversion")
+      15              : C10_CLANG_DIAGNOSTIC_IGNORE("-Wimplicit-int-float-conversion")
+      16              : #endif
+      17              : 
+      18              : namespace c10 {
+      19              : 
+      20              : template <typename dest_t, typename src_t>
+      21              : struct needs_real {
+      22              :   constexpr static bool value =
+      23              :       (is_complex<src_t>::value && !is_complex<dest_t>::value);
+      24              : };
+      25              : 
+      26              : template <bool, typename src_t>
+      27              : struct maybe_real {
+      28     10741350 :   C10_HOST_DEVICE static inline src_t apply(src_t src) {
+      29     10741350 :     return src;
+      30              :   }
+      31              : };
+      32              : 
+      33              : template <typename src_t>
+      34              : struct maybe_real<true, src_t> {
+      35            0 :   C10_HOST_DEVICE static inline decltype(auto) apply(src_t src) {
+      36            0 :     return src.real();
+      37              :   }
+      38              : };
+      39              : 
+      40              : // Note: deliberately ignores undefined behavior, consistent with NumPy.
+      41              : // PyTorch's type conversions can cause a variety of undefined behavior,
+      42              : // including float to integral overflow and signed to unsigned integer overflow.
+      43              : // Some of this undefined behavior is addressed below.
+      44              : template <typename dest_t, typename src_t>
+      45              : struct static_cast_with_inter_type {
+      46     10741350 :   C10_HOST_DEVICE __ubsan_ignore_undefined__ static inline dest_t apply(
+      47              :       src_t src) {
+      48     10741350 :     constexpr bool real = needs_real<dest_t, src_t>::value;
+      49     10741350 :     auto r = maybe_real<real, src_t>::apply(src);
+      50     10741350 :     return static_cast<dest_t>(r);
+      51              :   }
+      52              : };
+      53              : 
+      54              : // Partial template instantiation for casting to uint8.
+      55              : // Note: Converting from negative float values to unsigned integer types is
+      56              : // undefined behavior in C++, and current CPU and GPU compilers exhibit
+      57              : // divergent behavior. Casting from negative float values to signed
+      58              : // integer types and then to unsigned integer types is not undefined,
+      59              : // however, so this cast improves the consistency of type conversions
+      60              : // to uint8 across compilers.
+      61              : // Further note: Type conversions across compilers still have other undefined
+      62              : // and divergent behavior.
+      63              : template <typename src_t>
+      64              : struct static_cast_with_inter_type<uint8_t, src_t> {
+      65              :   C10_HOST_DEVICE __ubsan_ignore_undefined__ static inline uint8_t apply(
+      66              :       src_t src) {
+      67              :     constexpr bool real = needs_real<uint8_t, src_t>::value;
+      68              :     return static_cast<uint8_t>(
+      69              :         static_cast<int64_t>(maybe_real<real, src_t>::apply(src)));
+      70              :   }
+      71              : };
+      72              : 
+      73              : template <>
+      74              : struct static_cast_with_inter_type<c10::complex<c10::Half>, c10::BFloat16> {
+      75              :   C10_HOST_DEVICE __ubsan_ignore_undefined__ static inline c10::complex<
+      76              :       c10::Half>
+      77              :   apply(c10::BFloat16 src) {
+      78              :     return static_cast<c10::complex<c10::Half>>(c10::complex<float>{src});
+      79              :   }
+      80              : };
+      81              : 
+      82              : template <>
+      83              : struct static_cast_with_inter_type<c10::complex<c10::Half>, c10::Float8_e5m2> {
+      84              :   C10_HOST_DEVICE __ubsan_ignore_undefined__ static inline c10::complex<
+      85              :       c10::Half>
+      86              :   apply(c10::Float8_e5m2 src) {
+      87              :     return static_cast<c10::complex<c10::Half>>(c10::complex<float>{src});
+      88              :   }
+      89              : };
+      90              : 
+      91              : template <>
+      92              : struct static_cast_with_inter_type<
+      93              :     c10::complex<c10::Half>,
+      94              :     c10::Float8_e4m3fn> {
+      95              :   C10_HOST_DEVICE __ubsan_ignore_undefined__ static inline c10::complex<
+      96              :       c10::Half>
+      97              :   apply(c10::Float8_e4m3fn src) {
+      98              :     return static_cast<c10::complex<c10::Half>>(c10::complex<float>{src});
+      99              :   }
+     100              : };
+     101              : 
+     102              : template <>
+     103              : struct static_cast_with_inter_type<c10::complex<c10::Half>, c10::Half> {
+     104              :   C10_HOST_DEVICE __ubsan_ignore_undefined__ static inline c10::complex<
+     105              :       c10::Half>
+     106              :   apply(c10::Half src) {
+     107              :     return static_cast<c10::complex<c10::Half>>(c10::complex<float>{src});
+     108              :   }
+     109              : };
+     110              : 
+     111              : template <>
+     112              : struct static_cast_with_inter_type<
+     113              :     c10::complex<c10::Half>,
+     114              :     c10::complex<double>> {
+     115              :   C10_HOST_DEVICE __ubsan_ignore_undefined__ static inline c10::complex<
+     116              :       c10::Half>
+     117              :   apply(c10::complex<double> src) {
+     118              :     return static_cast<c10::complex<c10::Half>>(
+     119              :         static_cast<c10::complex<float>>(src));
+     120              :   }
+     121              : };
+     122              : 
+     123              : template <typename To, typename From>
+     124     10741350 : C10_HOST_DEVICE To convert(From f) {
+     125     10741350 :   return static_cast_with_inter_type<To, From>::apply(f);
+     126              : }
+     127              : 
+     128              : // Define separately to avoid being inlined and prevent code-size bloat
+     129              : C10_API void report_overflow(const char* name);
+     130              : 
+     131              : template <typename To, typename From>
+     132         7072 : To checked_convert(From f, const char* name) {
+     133              :   // Converting to bool can't overflow so we exclude this case from checking.
+     134         7072 :   if (!std::is_same<To, bool>::value && overflows<To, From>(f)) {
+     135            0 :     report_overflow(name);
+     136              :   }
+     137         7072 :   return convert<To, From>(f);
+     138              : }
+     139              : 
+     140              : } // namespace c10
+     141              : 
+     142              : C10_CLANG_DIAGNOSTIC_POP()
+     143              : 
+     144              : // Trigger tests for D25440771. TODO: Remove this line any time you want.
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/TypeSafeSignMath.h.func-c.html b/html/libtorch/include/c10/util/TypeSafeSignMath.h.func-c.html new file mode 100644 index 0000000..e84c836 --- /dev/null +++ b/html/libtorch/include/c10/util/TypeSafeSignMath.h.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/TypeSafeSignMath.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - TypeSafeSignMath.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %88
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1016greater_than_maxIllEEbRKT0_7072
_ZN3c1016less_than_lowestIllEEbRKT0_7072
_ZN3c10L16less_than_lowestIllEEbRKT0_St17integral_constantIbLb0EES5_7072
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/TypeSafeSignMath.h.func.html b/html/libtorch/include/c10/util/TypeSafeSignMath.h.func.html new file mode 100644 index 0000000..8272ecb --- /dev/null +++ b/html/libtorch/include/c10/util/TypeSafeSignMath.h.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/TypeSafeSignMath.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - TypeSafeSignMath.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %88
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1016greater_than_maxIllEEbRKT0_7072
_ZN3c1016less_than_lowestIllEEbRKT0_7072
_ZN3c10L16less_than_lowestIllEEbRKT0_St17integral_constantIbLb0EES5_7072
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/TypeSafeSignMath.h.gcov.html b/html/libtorch/include/c10/util/TypeSafeSignMath.h.gcov.html new file mode 100644 index 0000000..3aa60c5 --- /dev/null +++ b/html/libtorch/include/c10/util/TypeSafeSignMath.h.gcov.html @@ -0,0 +1,220 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/TypeSafeSignMath.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - TypeSafeSignMath.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %88
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <c10/macros/Macros.h>
+       4              : #include <limits>
+       5              : #include <type_traits>
+       6              : 
+       7              : C10_CLANG_DIAGNOSTIC_PUSH()
+       8              : #if C10_CLANG_HAS_WARNING("-Wstring-conversion")
+       9              : C10_CLANG_DIAGNOSTIC_IGNORE("-Wstring-conversion")
+      10              : #endif
+      11              : #if C10_CLANG_HAS_WARNING("-Wimplicit-int-float-conversion")
+      12              : C10_CLANG_DIAGNOSTIC_IGNORE("-Wimplicit-int-float-conversion")
+      13              : #endif
+      14              : 
+      15              : namespace c10 {
+      16              : 
+      17              : /// Returns false since we cannot have x < 0 if x is unsigned.
+      18              : template <typename T>
+      19              : static inline constexpr bool is_negative(
+      20              :     const T& /*x*/,
+      21              :     std::true_type /*is_unsigned*/) {
+      22              :   return false;
+      23              : }
+      24              : 
+      25              : /// Returns true if a signed variable x < 0
+      26              : template <typename T>
+      27              : static inline constexpr bool is_negative(
+      28              :     const T& x,
+      29              :     std::false_type /*is_unsigned*/) {
+      30              :   return x < T(0);
+      31              : }
+      32              : 
+      33              : /// Returns true if x < 0
+      34              : /// NOTE: Will fail on an unsigned custom type
+      35              : ///       For the most part it's possible to fix this if
+      36              : ///       the custom type has a constexpr constructor.
+      37              : ///       However, notably, c10::Half does not :-(
+      38              : template <typename T>
+      39              : inline constexpr bool is_negative(const T& x) {
+      40              :   return is_negative(x, std::is_unsigned<T>());
+      41              : }
+      42              : 
+      43              : /// Returns the sign of an unsigned variable x as 0, 1
+      44              : template <typename T>
+      45              : static inline constexpr int signum(const T& x, std::true_type /*is_unsigned*/) {
+      46              :   return T(0) < x;
+      47              : }
+      48              : 
+      49              : /// Returns the sign of a signed variable x as -1, 0, 1
+      50              : template <typename T>
+      51              : static inline constexpr int signum(
+      52              :     const T& x,
+      53              :     std::false_type /*is_unsigned*/) {
+      54              :   return (T(0) < x) - (x < T(0));
+      55              : }
+      56              : 
+      57              : /// Returns the sign of x as -1, 0, 1
+      58              : /// NOTE: Will fail on an unsigned custom type
+      59              : ///       For the most part it's possible to fix this if
+      60              : ///       the custom type has a constexpr constructor.
+      61              : ///       However, notably, c10::Half does not :-(
+      62              : template <typename T>
+      63              : inline constexpr int signum(const T& x) {
+      64              :   return signum(x, std::is_unsigned<T>());
+      65              : }
+      66              : 
+      67              : /// Returns true if a and b are not both negative
+      68              : template <typename T, typename U>
+      69              : inline constexpr bool signs_differ(const T& a, const U& b) {
+      70              :   return is_negative(a) != is_negative(b);
+      71              : }
+      72              : 
+      73              : // Suppress sign compare warning when compiling with GCC
+      74              : // as later does not account for short-circuit rule before
+      75              : // raising the warning, see https://godbolt.org/z/Tr3Msnz99
+      76              : #ifdef __GNUC__
+      77              : #pragma GCC diagnostic push
+      78              : #pragma GCC diagnostic ignored "-Wsign-compare"
+      79              : #endif
+      80              : 
+      81              : /// Returns true if x is greater than the greatest value of the type Limit
+      82              : template <typename Limit, typename T>
+      83         7072 : inline constexpr bool greater_than_max(const T& x) {
+      84         7072 :   constexpr bool can_overflow =
+      85              :       std::numeric_limits<T>::digits > std::numeric_limits<Limit>::digits;
+      86         7072 :   return can_overflow && x > std::numeric_limits<Limit>::max();
+      87              : }
+      88              : 
+      89              : #ifdef __GNUC__
+      90              : #pragma GCC diagnostic pop
+      91              : #endif
+      92              : 
+      93              : /// Returns true if x < lowest(Limit). Standard comparison
+      94              : template <typename Limit, typename T>
+      95         7072 : static inline constexpr bool less_than_lowest(
+      96              :     const T& x,
+      97              :     std::false_type /*limit_is_unsigned*/,
+      98              :     std::false_type /*x_is_unsigned*/) {
+      99         7072 :   return x < std::numeric_limits<Limit>::lowest();
+     100              : }
+     101              : 
+     102              : /// Returns false since all the limit is signed and therefore includes
+     103              : /// negative values but x cannot be negative because it is unsigned
+     104              : template <typename Limit, typename T>
+     105              : static inline constexpr bool less_than_lowest(
+     106              :     const T& /*x*/,
+     107              :     std::false_type /*limit_is_unsigned*/,
+     108              :     std::true_type /*x_is_unsigned*/) {
+     109              :   return false;
+     110              : }
+     111              : 
+     112              : /// Returns true if x < 0, where 0 is constructed from T.
+     113              : /// Limit is not signed, so its lower value is zero
+     114              : template <typename Limit, typename T>
+     115              : static inline constexpr bool less_than_lowest(
+     116              :     const T& x,
+     117              :     std::true_type /*limit_is_unsigned*/,
+     118              :     std::false_type /*x_is_unsigned*/) {
+     119              :   return x < T(0);
+     120              : }
+     121              : 
+     122              : /// Returns false sign both types are unsigned
+     123              : template <typename Limit, typename T>
+     124              : static inline constexpr bool less_than_lowest(
+     125              :     const T& /*x*/,
+     126              :     std::true_type /*limit_is_unsigned*/,
+     127              :     std::true_type /*x_is_unsigned*/) {
+     128              :   return false;
+     129              : }
+     130              : 
+     131              : /// Returns true if x is less than the lowest value of type T
+     132              : /// NOTE: Will fail on an unsigned custom type
+     133              : ///       For the most part it's possible to fix this if
+     134              : ///       the custom type has a constexpr constructor.
+     135              : ///       However, notably, c10::Half does not :
+     136              : template <typename Limit, typename T>
+     137         7072 : inline constexpr bool less_than_lowest(const T& x) {
+     138         7072 :   return less_than_lowest<Limit>(
+     139         7072 :       x, std::is_unsigned<Limit>(), std::is_unsigned<T>());
+     140              : }
+     141              : 
+     142              : } // namespace c10
+     143              : 
+     144              : C10_CLANG_DIAGNOSTIC_POP()
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/complex.h.func-c.html b/html/libtorch/include/c10/util/complex.h.func-c.html new file mode 100644 index 0000000..8c2080f --- /dev/null +++ b/html/libtorch/include/c10/util/complex.h.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/complex.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - complex.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %40
Test Date:2024-04-30 13:17:26Functions:0.0 %20
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK3c107complexIdE4imagEv0
_ZNK3c107complexIdE4realEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/complex.h.func.html b/html/libtorch/include/c10/util/complex.h.func.html new file mode 100644 index 0000000..2ef800d --- /dev/null +++ b/html/libtorch/include/c10/util/complex.h.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/complex.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - complex.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %40
Test Date:2024-04-30 13:17:26Functions:0.0 %20
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK3c107complexIdE4imagEv0
_ZNK3c107complexIdE4realEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/complex.h.gcov.html b/html/libtorch/include/c10/util/complex.h.gcov.html new file mode 100644 index 0000000..12e056b --- /dev/null +++ b/html/libtorch/include/c10/util/complex.h.gcov.html @@ -0,0 +1,696 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/complex.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - complex.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %40
Test Date:2024-04-30 13:17:26Functions:0.0 %20
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <complex>
+       4              : 
+       5              : #include <c10/macros/Macros.h>
+       6              : 
+       7              : #if defined(__CUDACC__) || defined(__HIPCC__)
+       8              : #include <thrust/complex.h>
+       9              : #endif
+      10              : 
+      11              : C10_CLANG_DIAGNOSTIC_PUSH()
+      12              : #if C10_CLANG_HAS_WARNING("-Wimplicit-float-conversion")
+      13              : C10_CLANG_DIAGNOSTIC_IGNORE("-Wimplicit-float-conversion")
+      14              : #endif
+      15              : #if C10_CLANG_HAS_WARNING("-Wfloat-conversion")
+      16              : C10_CLANG_DIAGNOSTIC_IGNORE("-Wfloat-conversion")
+      17              : #endif
+      18              : 
+      19              : namespace c10 {
+      20              : 
+      21              : // c10::complex is an implementation of complex numbers that aims
+      22              : // to work on all devices supported by PyTorch
+      23              : //
+      24              : // Most of the APIs duplicates std::complex
+      25              : // Reference: https://en.cppreference.com/w/cpp/numeric/complex
+      26              : //
+      27              : // [NOTE: Complex Operator Unification]
+      28              : // Operators currently use a mix of std::complex, thrust::complex, and
+      29              : // c10::complex internally. The end state is that all operators will use
+      30              : // c10::complex internally.  Until then, there may be some hacks to support all
+      31              : // variants.
+      32              : //
+      33              : //
+      34              : // [Note on Constructors]
+      35              : //
+      36              : // The APIs of constructors are mostly copied from C++ standard:
+      37              : //   https://en.cppreference.com/w/cpp/numeric/complex/complex
+      38              : //
+      39              : // Since C++14, all constructors are constexpr in std::complex
+      40              : //
+      41              : // There are three types of constructors:
+      42              : // - initializing from real and imag:
+      43              : //     `constexpr complex( const T& re = T(), const T& im = T() );`
+      44              : // - implicitly-declared copy constructor
+      45              : // - converting constructors
+      46              : //
+      47              : // Converting constructors:
+      48              : // - std::complex defines converting constructor between float/double/long
+      49              : // double,
+      50              : //   while we define converting constructor between float/double.
+      51              : // - For these converting constructors, upcasting is implicit, downcasting is
+      52              : //   explicit.
+      53              : // - We also define explicit casting from std::complex/thrust::complex
+      54              : //   - Note that the conversion from thrust is not constexpr, because
+      55              : //     thrust does not define them as constexpr ????
+      56              : //
+      57              : //
+      58              : // [Operator =]
+      59              : //
+      60              : // The APIs of operator = are mostly copied from C++ standard:
+      61              : //   https://en.cppreference.com/w/cpp/numeric/complex/operator%3D
+      62              : //
+      63              : // Since C++20, all operator= are constexpr. Although we are not building with
+      64              : // C++20, we also obey this behavior.
+      65              : //
+      66              : // There are three types of assign operator:
+      67              : // - Assign a real value from the same scalar type
+      68              : //   - In std, this is templated as complex& operator=(const T& x)
+      69              : //     with specialization `complex& operator=(T x)` for float/double/long
+      70              : //     double Since we only support float and double, on will use `complex&
+      71              : //     operator=(T x)`
+      72              : // - Copy assignment operator and converting assignment operator
+      73              : //   - There is no specialization of converting assignment operators, which type
+      74              : //   is
+      75              : //     convertible is solely dependent on whether the scalar type is convertible
+      76              : //
+      77              : // In addition to the standard assignment, we also provide assignment operators
+      78              : // with std and thrust
+      79              : //
+      80              : //
+      81              : // [Casting operators]
+      82              : //
+      83              : // std::complex does not have casting operators. We define casting operators
+      84              : // casting to std::complex and thrust::complex
+      85              : //
+      86              : //
+      87              : // [Operator ""]
+      88              : //
+      89              : // std::complex has custom literals `i`, `if` and `il` defined in namespace
+      90              : // `std::literals::complex_literals`. We define our own custom literals in the
+      91              : // namespace `c10::complex_literals`. Our custom literals does not follow the
+      92              : // same behavior as in std::complex, instead, we define _if, _id to construct
+      93              : // float/double complex literals.
+      94              : //
+      95              : //
+      96              : // [real() and imag()]
+      97              : //
+      98              : // In C++20, there are two overload of these functions, one it to return the
+      99              : // real/imag, another is to set real/imag, they are both constexpr. We follow
+     100              : // this design.
+     101              : //
+     102              : //
+     103              : // [Operator +=,-=,*=,/=]
+     104              : //
+     105              : // Since C++20, these operators become constexpr. In our implementation, they
+     106              : // are also constexpr.
+     107              : //
+     108              : // There are two types of such operators: operating with a real number, or
+     109              : // operating with another complex number. For the operating with a real number,
+     110              : // the generic template form has argument type `const T &`, while the overload
+     111              : // for float/double/long double has `T`. We will follow the same type as
+     112              : // float/double/long double in std.
+     113              : //
+     114              : // [Unary operator +-]
+     115              : //
+     116              : // Since C++20, they are constexpr. We also make them expr
+     117              : //
+     118              : // [Binary operators +-*/]
+     119              : //
+     120              : // Each operator has three versions (taking + as example):
+     121              : // - complex + complex
+     122              : // - complex + real
+     123              : // - real + complex
+     124              : //
+     125              : // [Operator ==, !=]
+     126              : //
+     127              : // Each operator has three versions (taking == as example):
+     128              : // - complex == complex
+     129              : // - complex == real
+     130              : // - real == complex
+     131              : //
+     132              : // Some of them are removed on C++20, but we decide to keep them
+     133              : //
+     134              : // [Operator <<, >>]
+     135              : //
+     136              : // These are implemented by casting to std::complex
+     137              : //
+     138              : //
+     139              : //
+     140              : // TODO(@zasdfgbnm): c10::complex<c10::Half> is not currently supported,
+     141              : // because:
+     142              : //  - lots of members and functions of c10::Half are not constexpr
+     143              : //  - thrust::complex only support float and double
+     144              : 
+     145              : template <typename T>
+     146              : struct alignas(sizeof(T) * 2) complex {
+     147              :   using value_type = T;
+     148              : 
+     149              :   T real_ = T(0);
+     150              :   T imag_ = T(0);
+     151              : 
+     152              :   constexpr complex() = default;
+     153              :   C10_HOST_DEVICE constexpr complex(const T& re, const T& im = T())
+     154              :       : real_(re), imag_(im) {}
+     155              :   template <typename U>
+     156              :   explicit constexpr complex(const std::complex<U>& other)
+     157              :       : complex(other.real(), other.imag()) {}
+     158              : #if defined(__CUDACC__) || defined(__HIPCC__)
+     159              :   template <typename U>
+     160              :   explicit C10_HOST_DEVICE complex(const thrust::complex<U>& other)
+     161              :       : real_(other.real()), imag_(other.imag()) {}
+     162              : // NOTE can not be implemented as follow due to ROCm bug:
+     163              : //   explicit C10_HOST_DEVICE complex(const thrust::complex<U> &other):
+     164              : //   complex(other.real(), other.imag()) {}
+     165              : #endif
+     166              : 
+     167              :   // Use SFINAE to specialize casting constructor for c10::complex<float> and
+     168              :   // c10::complex<double>
+     169              :   template <typename U = T>
+     170              :   C10_HOST_DEVICE explicit constexpr complex(
+     171              :       const std::enable_if_t<std::is_same<U, float>::value, complex<double>>&
+     172              :           other)
+     173              :       : real_(other.real_), imag_(other.imag_) {}
+     174              :   template <typename U = T>
+     175              :   C10_HOST_DEVICE constexpr complex(
+     176              :       const std::enable_if_t<std::is_same<U, double>::value, complex<float>>&
+     177              :           other)
+     178              :       : real_(other.real_), imag_(other.imag_) {}
+     179              : 
+     180              :   constexpr complex<T>& operator=(T re) {
+     181              :     real_ = re;
+     182              :     imag_ = 0;
+     183              :     return *this;
+     184              :   }
+     185              : 
+     186              :   constexpr complex<T>& operator+=(T re) {
+     187              :     real_ += re;
+     188              :     return *this;
+     189              :   }
+     190              : 
+     191              :   constexpr complex<T>& operator-=(T re) {
+     192              :     real_ -= re;
+     193              :     return *this;
+     194              :   }
+     195              : 
+     196              :   constexpr complex<T>& operator*=(T re) {
+     197              :     real_ *= re;
+     198              :     imag_ *= re;
+     199              :     return *this;
+     200              :   }
+     201              : 
+     202              :   constexpr complex<T>& operator/=(T re) {
+     203              :     real_ /= re;
+     204              :     imag_ /= re;
+     205              :     return *this;
+     206              :   }
+     207              : 
+     208              :   template <typename U>
+     209              :   constexpr complex<T>& operator=(const complex<U>& rhs) {
+     210              :     real_ = rhs.real();
+     211              :     imag_ = rhs.imag();
+     212              :     return *this;
+     213              :   }
+     214              : 
+     215              :   template <typename U>
+     216              :   constexpr complex<T>& operator+=(const complex<U>& rhs) {
+     217              :     real_ += rhs.real();
+     218              :     imag_ += rhs.imag();
+     219              :     return *this;
+     220              :   }
+     221              : 
+     222              :   template <typename U>
+     223              :   constexpr complex<T>& operator-=(const complex<U>& rhs) {
+     224              :     real_ -= rhs.real();
+     225              :     imag_ -= rhs.imag();
+     226              :     return *this;
+     227              :   }
+     228              : 
+     229              :   template <typename U>
+     230              :   constexpr complex<T>& operator*=(const complex<U>& rhs) {
+     231              :     // (a + bi) * (c + di) = (a*c - b*d) + (a * d + b * c) i
+     232              :     T a = real_;
+     233              :     T b = imag_;
+     234              :     U c = rhs.real();
+     235              :     U d = rhs.imag();
+     236              :     real_ = a * c - b * d;
+     237              :     imag_ = a * d + b * c;
+     238              :     return *this;
+     239              :   }
+     240              : 
+     241              : #ifdef __APPLE__
+     242              : #define FORCE_INLINE_APPLE __attribute__((always_inline))
+     243              : #else
+     244              : #define FORCE_INLINE_APPLE
+     245              : #endif
+     246              :   template <typename U>
+     247              :   constexpr FORCE_INLINE_APPLE complex<T>& operator/=(const complex<U>& rhs)
+     248              :       __ubsan_ignore_float_divide_by_zero__ {
+     249              :     // (a + bi) / (c + di) = (ac + bd)/(c^2 + d^2) + (bc - ad)/(c^2 + d^2) i
+     250              :     // the calculation below follows numpy's complex division
+     251              :     T a = real_;
+     252              :     T b = imag_;
+     253              :     U c = rhs.real();
+     254              :     U d = rhs.imag();
+     255              : 
+     256              : #if defined(__GNUC__) && !defined(__clang__)
+     257              :     // std::abs is already constexpr by gcc
+     258              :     auto abs_c = std::abs(c);
+     259              :     auto abs_d = std::abs(d);
+     260              : #else
+     261              :     auto abs_c = c < 0 ? -c : c;
+     262              :     auto abs_d = d < 0 ? -d : d;
+     263              : #endif
+     264              : 
+     265              :     if (abs_c >= abs_d) {
+     266              :       if (abs_c == 0 && abs_d == 0) {
+     267              :         /* divide by zeros should yield a complex inf or nan */
+     268              :         real_ = a / abs_c;
+     269              :         imag_ = b / abs_d;
+     270              :       } else {
+     271              :         auto rat = d / c;
+     272              :         auto scl = 1.0 / (c + d * rat);
+     273              :         real_ = (a + b * rat) * scl;
+     274              :         imag_ = (b - a * rat) * scl;
+     275              :       }
+     276              :     } else {
+     277              :       auto rat = c / d;
+     278              :       auto scl = 1.0 / (d + c * rat);
+     279              :       real_ = (a * rat + b) * scl;
+     280              :       imag_ = (b * rat - a) * scl;
+     281              :     }
+     282              :     return *this;
+     283              :   }
+     284              : #undef FORCE_INLINE_APPLE
+     285              : 
+     286              :   template <typename U>
+     287              :   constexpr complex<T>& operator=(const std::complex<U>& rhs) {
+     288              :     real_ = rhs.real();
+     289              :     imag_ = rhs.imag();
+     290              :     return *this;
+     291              :   }
+     292              : 
+     293              : #if defined(__CUDACC__) || defined(__HIPCC__)
+     294              :   template <typename U>
+     295              :   C10_HOST_DEVICE complex<T>& operator=(const thrust::complex<U>& rhs) {
+     296              :     real_ = rhs.real();
+     297              :     imag_ = rhs.imag();
+     298              :     return *this;
+     299              :   }
+     300              : #endif
+     301              : 
+     302              :   template <typename U>
+     303              :   explicit constexpr operator std::complex<U>() const {
+     304              :     return std::complex<U>(std::complex<T>(real(), imag()));
+     305              :   }
+     306              : 
+     307              : #if defined(__CUDACC__) || defined(__HIPCC__)
+     308              :   template <typename U>
+     309              :   C10_HOST_DEVICE explicit operator thrust::complex<U>() const {
+     310              :     return static_cast<thrust::complex<U>>(thrust::complex<T>(real(), imag()));
+     311              :   }
+     312              : #endif
+     313              : 
+     314              :   // consistent with NumPy behavior
+     315              :   explicit constexpr operator bool() const {
+     316              :     return real() || imag();
+     317              :   }
+     318              : 
+     319            0 :   C10_HOST_DEVICE constexpr T real() const {
+     320            0 :     return real_;
+     321              :   }
+     322              :   constexpr void real(T value) {
+     323              :     real_ = value;
+     324              :   }
+     325            0 :   constexpr T imag() const {
+     326            0 :     return imag_;
+     327              :   }
+     328              :   constexpr void imag(T value) {
+     329              :     imag_ = value;
+     330              :   }
+     331              : };
+     332              : 
+     333              : namespace complex_literals {
+     334              : 
+     335              : constexpr complex<float> operator"" _if(long double imag) {
+     336              :   return complex<float>(0.0f, static_cast<float>(imag));
+     337              : }
+     338              : 
+     339              : constexpr complex<double> operator"" _id(long double imag) {
+     340              :   return complex<double>(0.0, static_cast<double>(imag));
+     341              : }
+     342              : 
+     343              : constexpr complex<float> operator"" _if(unsigned long long imag) {
+     344              :   return complex<float>(0.0f, static_cast<float>(imag));
+     345              : }
+     346              : 
+     347              : constexpr complex<double> operator"" _id(unsigned long long imag) {
+     348              :   return complex<double>(0.0, static_cast<double>(imag));
+     349              : }
+     350              : 
+     351              : } // namespace complex_literals
+     352              : 
+     353              : template <typename T>
+     354              : constexpr complex<T> operator+(const complex<T>& val) {
+     355              :   return val;
+     356              : }
+     357              : 
+     358              : template <typename T>
+     359              : constexpr complex<T> operator-(const complex<T>& val) {
+     360              :   return complex<T>(-val.real(), -val.imag());
+     361              : }
+     362              : 
+     363              : template <typename T>
+     364              : constexpr complex<T> operator+(const complex<T>& lhs, const complex<T>& rhs) {
+     365              :   complex<T> result = lhs;
+     366              :   return result += rhs;
+     367              : }
+     368              : 
+     369              : template <typename T>
+     370              : constexpr complex<T> operator+(const complex<T>& lhs, const T& rhs) {
+     371              :   complex<T> result = lhs;
+     372              :   return result += rhs;
+     373              : }
+     374              : 
+     375              : template <typename T>
+     376              : constexpr complex<T> operator+(const T& lhs, const complex<T>& rhs) {
+     377              :   return complex<T>(lhs + rhs.real(), rhs.imag());
+     378              : }
+     379              : 
+     380              : template <typename T>
+     381              : constexpr complex<T> operator-(const complex<T>& lhs, const complex<T>& rhs) {
+     382              :   complex<T> result = lhs;
+     383              :   return result -= rhs;
+     384              : }
+     385              : 
+     386              : template <typename T>
+     387              : constexpr complex<T> operator-(const complex<T>& lhs, const T& rhs) {
+     388              :   complex<T> result = lhs;
+     389              :   return result -= rhs;
+     390              : }
+     391              : 
+     392              : template <typename T>
+     393              : constexpr complex<T> operator-(const T& lhs, const complex<T>& rhs) {
+     394              :   complex<T> result = -rhs;
+     395              :   return result += lhs;
+     396              : }
+     397              : 
+     398              : template <typename T>
+     399              : constexpr complex<T> operator*(const complex<T>& lhs, const complex<T>& rhs) {
+     400              :   complex<T> result = lhs;
+     401              :   return result *= rhs;
+     402              : }
+     403              : 
+     404              : template <typename T>
+     405              : constexpr complex<T> operator*(const complex<T>& lhs, const T& rhs) {
+     406              :   complex<T> result = lhs;
+     407              :   return result *= rhs;
+     408              : }
+     409              : 
+     410              : template <typename T>
+     411              : constexpr complex<T> operator*(const T& lhs, const complex<T>& rhs) {
+     412              :   complex<T> result = rhs;
+     413              :   return result *= lhs;
+     414              : }
+     415              : 
+     416              : template <typename T>
+     417              : constexpr complex<T> operator/(const complex<T>& lhs, const complex<T>& rhs) {
+     418              :   complex<T> result = lhs;
+     419              :   return result /= rhs;
+     420              : }
+     421              : 
+     422              : template <typename T>
+     423              : constexpr complex<T> operator/(const complex<T>& lhs, const T& rhs) {
+     424              :   complex<T> result = lhs;
+     425              :   return result /= rhs;
+     426              : }
+     427              : 
+     428              : template <typename T>
+     429              : constexpr complex<T> operator/(const T& lhs, const complex<T>& rhs) {
+     430              :   complex<T> result(lhs, T());
+     431              :   return result /= rhs;
+     432              : }
+     433              : 
+     434              : // Define operators between integral scalars and c10::complex. std::complex does
+     435              : // not support this when T is a floating-point number. This is useful because it
+     436              : // saves a lot of "static_cast" when operate a complex and an integer. This
+     437              : // makes the code both less verbose and potentially more efficient.
+     438              : #define COMPLEX_INTEGER_OP_TEMPLATE_CONDITION                           \
+     439              :   typename std::enable_if_t<                                            \
+     440              :       std::is_floating_point<fT>::value && std::is_integral<iT>::value, \
+     441              :       int> = 0
+     442              : 
+     443              : template <typename fT, typename iT, COMPLEX_INTEGER_OP_TEMPLATE_CONDITION>
+     444              : constexpr c10::complex<fT> operator+(const c10::complex<fT>& a, const iT& b) {
+     445              :   return a + static_cast<fT>(b);
+     446              : }
+     447              : 
+     448              : template <typename fT, typename iT, COMPLEX_INTEGER_OP_TEMPLATE_CONDITION>
+     449              : constexpr c10::complex<fT> operator+(const iT& a, const c10::complex<fT>& b) {
+     450              :   return static_cast<fT>(a) + b;
+     451              : }
+     452              : 
+     453              : template <typename fT, typename iT, COMPLEX_INTEGER_OP_TEMPLATE_CONDITION>
+     454              : constexpr c10::complex<fT> operator-(const c10::complex<fT>& a, const iT& b) {
+     455              :   return a - static_cast<fT>(b);
+     456              : }
+     457              : 
+     458              : template <typename fT, typename iT, COMPLEX_INTEGER_OP_TEMPLATE_CONDITION>
+     459              : constexpr c10::complex<fT> operator-(const iT& a, const c10::complex<fT>& b) {
+     460              :   return static_cast<fT>(a) - b;
+     461              : }
+     462              : 
+     463              : template <typename fT, typename iT, COMPLEX_INTEGER_OP_TEMPLATE_CONDITION>
+     464              : constexpr c10::complex<fT> operator*(const c10::complex<fT>& a, const iT& b) {
+     465              :   return a * static_cast<fT>(b);
+     466              : }
+     467              : 
+     468              : template <typename fT, typename iT, COMPLEX_INTEGER_OP_TEMPLATE_CONDITION>
+     469              : constexpr c10::complex<fT> operator*(const iT& a, const c10::complex<fT>& b) {
+     470              :   return static_cast<fT>(a) * b;
+     471              : }
+     472              : 
+     473              : template <typename fT, typename iT, COMPLEX_INTEGER_OP_TEMPLATE_CONDITION>
+     474              : constexpr c10::complex<fT> operator/(const c10::complex<fT>& a, const iT& b) {
+     475              :   return a / static_cast<fT>(b);
+     476              : }
+     477              : 
+     478              : template <typename fT, typename iT, COMPLEX_INTEGER_OP_TEMPLATE_CONDITION>
+     479              : constexpr c10::complex<fT> operator/(const iT& a, const c10::complex<fT>& b) {
+     480              :   return static_cast<fT>(a) / b;
+     481              : }
+     482              : 
+     483              : #undef COMPLEX_INTEGER_OP_TEMPLATE_CONDITION
+     484              : 
+     485              : template <typename T>
+     486              : constexpr bool operator==(const complex<T>& lhs, const complex<T>& rhs) {
+     487              :   return (lhs.real() == rhs.real()) && (lhs.imag() == rhs.imag());
+     488              : }
+     489              : 
+     490              : template <typename T>
+     491              : constexpr bool operator==(const complex<T>& lhs, const T& rhs) {
+     492              :   return (lhs.real() == rhs) && (lhs.imag() == T());
+     493              : }
+     494              : 
+     495              : template <typename T>
+     496              : constexpr bool operator==(const T& lhs, const complex<T>& rhs) {
+     497              :   return (lhs == rhs.real()) && (T() == rhs.imag());
+     498              : }
+     499              : 
+     500              : template <typename T>
+     501              : constexpr bool operator!=(const complex<T>& lhs, const complex<T>& rhs) {
+     502              :   return !(lhs == rhs);
+     503              : }
+     504              : 
+     505              : template <typename T>
+     506              : constexpr bool operator!=(const complex<T>& lhs, const T& rhs) {
+     507              :   return !(lhs == rhs);
+     508              : }
+     509              : 
+     510              : template <typename T>
+     511              : constexpr bool operator!=(const T& lhs, const complex<T>& rhs) {
+     512              :   return !(lhs == rhs);
+     513              : }
+     514              : 
+     515              : template <typename T, typename CharT, typename Traits>
+     516              : std::basic_ostream<CharT, Traits>& operator<<(
+     517              :     std::basic_ostream<CharT, Traits>& os,
+     518              :     const complex<T>& x) {
+     519              :   return (os << static_cast<std::complex<T>>(x));
+     520              : }
+     521              : 
+     522              : template <typename T, typename CharT, typename Traits>
+     523              : std::basic_istream<CharT, Traits>& operator>>(
+     524              :     std::basic_istream<CharT, Traits>& is,
+     525              :     complex<T>& x) {
+     526              :   std::complex<T> tmp;
+     527              :   is >> tmp;
+     528              :   x = tmp;
+     529              :   return is;
+     530              : }
+     531              : 
+     532              : } // namespace c10
+     533              : 
+     534              : // std functions
+     535              : //
+     536              : // The implementation of these functions also follow the design of C++20
+     537              : 
+     538              : namespace std {
+     539              : 
+     540              : template <typename T>
+     541              : constexpr T real(const c10::complex<T>& z) {
+     542              :   return z.real();
+     543              : }
+     544              : 
+     545              : template <typename T>
+     546              : constexpr T imag(const c10::complex<T>& z) {
+     547              :   return z.imag();
+     548              : }
+     549              : 
+     550              : template <typename T>
+     551              : C10_HOST_DEVICE T abs(const c10::complex<T>& z) {
+     552              : #if defined(__CUDACC__) || defined(__HIPCC__)
+     553              :   return thrust::abs(static_cast<thrust::complex<T>>(z));
+     554              : #else
+     555              :   return std::abs(static_cast<std::complex<T>>(z));
+     556              : #endif
+     557              : }
+     558              : 
+     559              : #if defined(USE_ROCM)
+     560              : #define ROCm_Bug(x)
+     561              : #else
+     562              : #define ROCm_Bug(x) x
+     563              : #endif
+     564              : 
+     565              : template <typename T>
+     566              : C10_HOST_DEVICE T arg(const c10::complex<T>& z) {
+     567              :   return ROCm_Bug(std)::atan2(std::imag(z), std::real(z));
+     568              : }
+     569              : 
+     570              : #undef ROCm_Bug
+     571              : 
+     572              : template <typename T>
+     573              : constexpr T norm(const c10::complex<T>& z) {
+     574              :   return z.real() * z.real() + z.imag() * z.imag();
+     575              : }
+     576              : 
+     577              : // For std::conj, there are other versions of it:
+     578              : //   constexpr std::complex<float> conj( float z );
+     579              : //   template< class DoubleOrInteger >
+     580              : //   constexpr std::complex<double> conj( DoubleOrInteger z );
+     581              : //   constexpr std::complex<long double> conj( long double z );
+     582              : // These are not implemented
+     583              : // TODO(@zasdfgbnm): implement them as c10::conj
+     584              : template <typename T>
+     585              : constexpr c10::complex<T> conj(const c10::complex<T>& z) {
+     586              :   return c10::complex<T>(z.real(), -z.imag());
+     587              : }
+     588              : 
+     589              : // Thrust does not have complex --> complex version of thrust::proj,
+     590              : // so this function is not implemented at c10 right now.
+     591              : // TODO(@zasdfgbnm): implement it by ourselves
+     592              : 
+     593              : // There is no c10 version of std::polar, because std::polar always
+     594              : // returns std::complex. Use c10::polar instead;
+     595              : 
+     596              : } // namespace std
+     597              : 
+     598              : namespace c10 {
+     599              : 
+     600              : template <typename T>
+     601              : C10_HOST_DEVICE complex<T> polar(const T& r, const T& theta = T()) {
+     602              : #if defined(__CUDACC__) || defined(__HIPCC__)
+     603              :   return static_cast<complex<T>>(thrust::polar(r, theta));
+     604              : #else
+     605              :   // std::polar() requires r >= 0, so spell out the explicit implementation to
+     606              :   // avoid a branch.
+     607              :   return complex<T>(r * std::cos(theta), r * std::sin(theta));
+     608              : #endif
+     609              : }
+     610              : 
+     611              : } // namespace c10
+     612              : 
+     613              : C10_CLANG_DIAGNOSTIC_POP()
+     614              : 
+     615              : #define C10_INTERNAL_INCLUDE_COMPLEX_REMAINING_H
+     616              : // math functions are included in a separate file
+     617              : #include <c10/util/complex_math.h> // IWYU pragma: keep
+     618              : // utilities for complex types
+     619              : #include <c10/util/complex_utils.h> // IWYU pragma: keep
+     620              : #undef C10_INTERNAL_INCLUDE_COMPLEX_REMAINING_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/index-sort-f.html b/html/libtorch/include/c10/util/index-sort-f.html new file mode 100644 index 0000000..0106958 --- /dev/null +++ b/html/libtorch/include/c10/util/index-sort-f.html @@ -0,0 +1,261 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/utilCoverageTotalHit
Test:coverage.infoLines:62.6 %385241
Test Date:2024-04-30 13:17:26Functions:56.2 %381214
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
C++17.h +
0.0%
+
0.0 %40.0 %2
complex.h +
0.0%
+
0.0 %40.0 %2
Exception.h +
0.0%
+
0.0 %110.0 %8
logging_is_not_google_glog.h +
0.0%
+
0.0 %120.0 %10
SmallVector.h +
0.0%
+
0.0 %550.0 %21
StringUtil.h +
0.0%
+
0.0 %160.0 %49
Half.h +
15.4%15.4%
+
15.4 %13225.0 %41
TypeCast.h +
78.6%78.6%
+
78.6 %141154.2 %2413
intrusive_ptr.h +
83.8%83.8%
+
83.8 %1058866.7 %7248
Optional.h +
89.0%89.0%
+
89.0 %918176.4 %157120
OptionalArrayRef.h +
100.0%
+
100.0 %33100.0 %22
TypeSafeSignMath.h +
100.0%
+
100.0 %88100.0 %33
typeid.h +
92.9%92.9%
+
92.9 %1413100.0 %66
ArrayRef.h +
100.0%
+
100.0 %3535100.0 %2121
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/index-sort-l.html b/html/libtorch/include/c10/util/index-sort-l.html new file mode 100644 index 0000000..eaab3bc --- /dev/null +++ b/html/libtorch/include/c10/util/index-sort-l.html @@ -0,0 +1,261 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/utilCoverageTotalHit
Test:coverage.infoLines:62.6 %385241
Test Date:2024-04-30 13:17:26Functions:56.2 %381214
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
C++17.h +
0.0%
+
0.0 %40.0 %2
complex.h +
0.0%
+
0.0 %40.0 %2
Exception.h +
0.0%
+
0.0 %110.0 %8
logging_is_not_google_glog.h +
0.0%
+
0.0 %120.0 %10
StringUtil.h +
0.0%
+
0.0 %160.0 %49
SmallVector.h +
0.0%
+
0.0 %550.0 %21
Half.h +
15.4%15.4%
+
15.4 %13225.0 %41
TypeCast.h +
78.6%78.6%
+
78.6 %141154.2 %2413
intrusive_ptr.h +
83.8%83.8%
+
83.8 %1058866.7 %7248
Optional.h +
89.0%89.0%
+
89.0 %918176.4 %157120
typeid.h +
92.9%92.9%
+
92.9 %1413100.0 %66
OptionalArrayRef.h +
100.0%
+
100.0 %33100.0 %22
TypeSafeSignMath.h +
100.0%
+
100.0 %88100.0 %33
ArrayRef.h +
100.0%
+
100.0 %3535100.0 %2121
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/index.html b/html/libtorch/include/c10/util/index.html new file mode 100644 index 0000000..334c293 --- /dev/null +++ b/html/libtorch/include/c10/util/index.html @@ -0,0 +1,261 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/utilCoverageTotalHit
Test:coverage.infoLines:62.6 %385241
Test Date:2024-04-30 13:17:26Functions:56.2 %381214
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
ArrayRef.h +
100.0%
+
100.0 %3535100.0 %2121
C++17.h +
0.0%
+
0.0 %40.0 %2
Exception.h +
0.0%
+
0.0 %110.0 %8
Half.h +
15.4%15.4%
+
15.4 %13225.0 %41
Optional.h +
89.0%89.0%
+
89.0 %918176.4 %157120
OptionalArrayRef.h +
100.0%
+
100.0 %33100.0 %22
SmallVector.h +
0.0%
+
0.0 %550.0 %21
StringUtil.h +
0.0%
+
0.0 %160.0 %49
TypeCast.h +
78.6%78.6%
+
78.6 %141154.2 %2413
TypeSafeSignMath.h +
100.0%
+
100.0 %88100.0 %33
complex.h +
0.0%
+
0.0 %40.0 %2
intrusive_ptr.h +
83.8%83.8%
+
83.8 %1058866.7 %7248
logging_is_not_google_glog.h +
0.0%
+
0.0 %120.0 %10
typeid.h +
92.9%92.9%
+
92.9 %1413100.0 %66
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/intrusive_ptr.h.func-c.html b/html/libtorch/include/c10/util/intrusive_ptr.h.func-c.html new file mode 100644 index 0000000..3115e5e --- /dev/null +++ b/html/libtorch/include/c10/util/intrusive_ptr.h.func-c.html @@ -0,0 +1,684 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/intrusive_ptr.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - intrusive_ptr.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:83.8 %10588
Test Date:2024-04-30 13:17:26Functions:66.7 %7248
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1020intrusive_ptr_target17release_resourcesEv0
_ZN3c103raw13intrusive_ptr6decrefEPNS_20intrusive_ptr_targetE0
_ZN3c103raw13intrusive_ptr6increfEPNS_20intrusive_ptr_targetE0
_ZN3c106detail26atomic_weakcount_decrementERSt6atomicImE0
_ZNK3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEEdeEv0
_ZNR3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEaSERKS3_1820
_ZNR3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEaSIS1_S2_EERS3_RKNS0_IT_S2_EE1820
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2ERKS3_62874
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2IS1_NS_6detail34intrusive_target_default_null_typeIS1_EEEERKNS0_IT_T0_EE378768
_ZN3c1020intrusive_ptr_targetC2Ev378768
_ZN3c106detail11assign_ptr_INS_10TensorImplENS_19UndefinedTensorImplENS0_34intrusive_target_default_null_typeIS2_EEEEPT_S7_378768
_ZNR3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEaSEOS3_435080
_ZNR3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEaSIS1_S2_EERS3_ONS0_IT_T0_EE435080
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE4swapERS3_436900
_ZN3c106detail25atomic_refcount_incrementERSt6atomicImE440756
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE7retain_Ev441642
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE9use_countEv458920
_ZNK3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEE9use_countEv40076
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE9use_countEv418844
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEcvbEv466880
_ZNK3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEEcvbEv40076
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEcvbEv426804
_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEE4makeIJRjEEES6_DpOT_37304192
_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEE4makeIJRjEEES6_DpOT_378768
_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEE4makeIJSt6vectorINS_6IValueESaIS8_EERKNS_4Type24SingletonOrSharedTypePtrISB_EEEEES5_DpOT_36925424
_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEC2EPS2_37304192
_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEEC2EPS2_378768
_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEC2EPS2_36925424
_ZN3c1014make_intrusiveINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEJRjEEENS_13intrusive_ptrIT_T0_EEDpOT1_37304192
_ZN3c1014make_intrusiveINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEJRjEEENS_13intrusive_ptrIT_T0_EEDpOT1_378768
_ZN3c1014make_intrusiveINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEJSt6vectorINS_6IValueESaIS6_EERKNS_4Type24SingletonOrSharedTypePtrIS9_EEEEENS_13intrusive_ptrIT_T0_EEDpOT1_36925424
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2Ev37370160
_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEEC2Ev0
_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEEC2Ev0
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2Ev37370160
_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEE7reclaimEPS1_105276376
_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEE7reclaimEPS1_0
_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_6detail34intrusive_target_default_null_typeIS1_EEE7reclaimEPS1_0
_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEE7reclaimEPS2_0
_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEE7reclaimEPS1_105276376
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE3getEv105695220
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_6detail34intrusive_target_default_null_typeIS1_EEE3getEv0
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE3getEv105695220
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEptEv121964308
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_6detail34intrusive_target_default_null_typeIS1_EEEptEv378768
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEptEv16309164
_ZNK3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEptEv105276376
_ZN3c106detail34intrusive_target_default_null_typeINS0_8ListImplEE9singletonEv149296920
_ZN3c106detail34intrusive_target_default_null_typeINS_11SymNodeImplEE9singletonEv0
_ZN3c106detail34intrusive_target_default_null_typeINS_20intrusive_ptr_targetEE9singletonEv0
_ZN3c106detail34intrusive_target_default_null_typeINS_6ivalue13ComplexHolderEE9singletonEv0
_ZN3c106detail34intrusive_target_default_null_typeINS_10TensorImplEE9singletonEv757536
_ZN3c106detail34intrusive_target_default_null_typeINS_15VariableVersion14VersionCounterEE9singletonEv837688
_ZN3c106detail34intrusive_target_default_null_typeINS0_8ListImplEE9singletonEv147701696
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2EPS1_NS_3raw20DontIncreaseRefcountE179950728
_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEEC2EPS1_NS_3raw20DontIncreaseRefcountE0
_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_6detail34intrusive_target_default_null_typeIS1_EEEC2EPS1_NS_3raw20DontIncreaseRefcountE0
_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEEC2EPS2_NS_3raw20DontIncreaseRefcountE0
_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEEC2EPS2_NS_3raw20DontIncreaseRefcountE378768
_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEC2EPS2_NS_3raw20DontIncreaseRefcountE36925424
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2EPS1_NS_3raw20DontIncreaseRefcountE37370160
_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEEC2EPS1_NS_3raw20DontIncreaseRefcountE105276376
_ZN3c106detail25atomic_refcount_decrementERSt6atomicImE212684736
_ZN3c1020intrusive_ptr_targetD0Ev520215158
_ZN3c1020intrusive_ptr_targetD0Ev0
_ZN3c1020intrusive_ptr_targetD2Ev520215158
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE6reset_Ev710681430
_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEE6reset_Ev0
_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_6detail34intrusive_target_default_null_typeIS1_EEE6reset_Ev0
_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEE6reset_Ev0
_ZN3c1013intrusive_ptrINS_10TensorImplENS_6detail34intrusive_target_default_null_typeIS1_EEE6reset_Ev378768
_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEE6reset_Ev378768
_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEE6reset_Ev73850848
_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEE6reset_Ev105276376
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE6reset_Ev530796670
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEED2Ev710681430
_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEED2Ev0
_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_6detail34intrusive_target_default_null_typeIS1_EEED2Ev0
_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEED2Ev0
_ZN3c1013intrusive_ptrINS_10TensorImplENS_6detail34intrusive_target_default_null_typeIS1_EEED2Ev378768
_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEED2Ev378768
_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEED2Ev73850848
_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEED2Ev105276376
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEED2Ev530796670
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2EOS3_772197404
_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEC2EOS5_36925424
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2EOS3_735271980
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/intrusive_ptr.h.func.html b/html/libtorch/include/c10/util/intrusive_ptr.h.func.html new file mode 100644 index 0000000..7a50818 --- /dev/null +++ b/html/libtorch/include/c10/util/intrusive_ptr.h.func.html @@ -0,0 +1,684 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/intrusive_ptr.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - intrusive_ptr.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:83.8 %10588
Test Date:2024-04-30 13:17:26Functions:66.7 %7248
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE4swapERS3_436900
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE6reset_Ev710681430
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE6reset_Ev530796670
_ZN3c1013intrusive_ptrINS_10TensorImplENS_6detail34intrusive_target_default_null_typeIS1_EEE6reset_Ev378768
_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEE6reset_Ev0
_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEE6reset_Ev378768
_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEE6reset_Ev105276376
_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_6detail34intrusive_target_default_null_typeIS1_EEE6reset_Ev0
_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEE6reset_Ev73850848
_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEE6reset_Ev0
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE7retain_Ev441642
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2EOS3_772197404
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2EOS3_735271980
_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEC2EOS5_36925424
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2EPS1_NS_3raw20DontIncreaseRefcountE179950728
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2EPS1_NS_3raw20DontIncreaseRefcountE37370160
_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEEC2EPS1_NS_3raw20DontIncreaseRefcountE0
_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEEC2EPS2_NS_3raw20DontIncreaseRefcountE378768
_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEEC2EPS1_NS_3raw20DontIncreaseRefcountE105276376
_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_6detail34intrusive_target_default_null_typeIS1_EEEC2EPS1_NS_3raw20DontIncreaseRefcountE0
_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEC2EPS2_NS_3raw20DontIncreaseRefcountE36925424
_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEEC2EPS2_NS_3raw20DontIncreaseRefcountE0
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2ERKS3_62874
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2Ev37370160
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2Ev37370160
_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEEC2Ev0
_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEEC2Ev0
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEC2IS1_NS_6detail34intrusive_target_default_null_typeIS1_EEEERKNS0_IT_T0_EE378768
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEED2Ev710681430
_ZN3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEED2Ev530796670
_ZN3c1013intrusive_ptrINS_10TensorImplENS_6detail34intrusive_target_default_null_typeIS1_EEED2Ev378768
_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEED2Ev0
_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEED2Ev378768
_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEED2Ev105276376
_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_6detail34intrusive_target_default_null_typeIS1_EEED2Ev0
_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEED2Ev73850848
_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEED2Ev0
_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEE4makeIJRjEEES6_DpOT_37304192
_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEE4makeIJRjEEES6_DpOT_378768
_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEE4makeIJSt6vectorINS_6IValueESaIS8_EERKNS_4Type24SingletonOrSharedTypePtrISB_EEEEES5_DpOT_36925424
_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEE7reclaimEPS1_105276376
_ZN3c1013intrusive_ptrINS_11SymNodeImplENS_6detail34intrusive_target_default_null_typeIS1_EEE7reclaimEPS1_0
_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_19UndefinedTensorImplEE7reclaimEPS1_105276376
_ZN3c1013intrusive_ptrINS_20intrusive_ptr_targetENS_6detail34intrusive_target_default_null_typeIS1_EEE7reclaimEPS1_0
_ZN3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEE7reclaimEPS2_0
_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEC2EPS2_37304192
_ZN3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEEC2EPS2_378768
_ZN3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEC2EPS2_36925424
_ZN3c1014make_intrusiveINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEJRjEEENS_13intrusive_ptrIT_T0_EEDpOT1_37304192
_ZN3c1014make_intrusiveINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEJRjEEENS_13intrusive_ptrIT_T0_EEDpOT1_378768
_ZN3c1014make_intrusiveINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEJSt6vectorINS_6IValueESaIS6_EERKNS_4Type24SingletonOrSharedTypePtrIS9_EEEEENS_13intrusive_ptrIT_T0_EEDpOT1_36925424
_ZN3c1020intrusive_ptr_target17release_resourcesEv0
_ZN3c1020intrusive_ptr_targetC2Ev378768
_ZN3c1020intrusive_ptr_targetD0Ev520215158
_ZN3c1020intrusive_ptr_targetD0Ev0
_ZN3c1020intrusive_ptr_targetD2Ev520215158
_ZN3c103raw13intrusive_ptr6decrefEPNS_20intrusive_ptr_targetE0
_ZN3c103raw13intrusive_ptr6increfEPNS_20intrusive_ptr_targetE0
_ZN3c106detail11assign_ptr_INS_10TensorImplENS_19UndefinedTensorImplENS0_34intrusive_target_default_null_typeIS2_EEEEPT_S7_378768
_ZN3c106detail25atomic_refcount_decrementERSt6atomicImE212684736
_ZN3c106detail25atomic_refcount_incrementERSt6atomicImE440756
_ZN3c106detail26atomic_weakcount_decrementERSt6atomicImE0
_ZN3c106detail34intrusive_target_default_null_typeINS0_8ListImplEE9singletonEv149296920
_ZN3c106detail34intrusive_target_default_null_typeINS0_8ListImplEE9singletonEv147701696
_ZN3c106detail34intrusive_target_default_null_typeINS_10TensorImplEE9singletonEv757536
_ZN3c106detail34intrusive_target_default_null_typeINS_11SymNodeImplEE9singletonEv0
_ZN3c106detail34intrusive_target_default_null_typeINS_15VariableVersion14VersionCounterEE9singletonEv837688
_ZN3c106detail34intrusive_target_default_null_typeINS_20intrusive_ptr_targetEE9singletonEv0
_ZN3c106detail34intrusive_target_default_null_typeINS_6ivalue13ComplexHolderEE9singletonEv0
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE3getEv105695220
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE3getEv105695220
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_6detail34intrusive_target_default_null_typeIS1_EEE3getEv0
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE9use_countEv458920
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEE9use_countEv418844
_ZNK3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEE9use_countEv40076
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEcvbEv466880
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEcvbEv426804
_ZNK3c1013intrusive_ptrINS_15VariableVersion14VersionCounterENS_6detail34intrusive_target_default_null_typeIS2_EEEcvbEv40076
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEptEv121964308
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEptEv16309164
_ZNK3c1013intrusive_ptrINS_10TensorImplENS_6detail34intrusive_target_default_null_typeIS1_EEEptEv378768
_ZNK3c1013intrusive_ptrINS_6detail8ListImplENS1_34intrusive_target_default_null_typeIS2_EEEptEv105276376
_ZNK3c1013intrusive_ptrINS_6ivalue13ComplexHolderENS_6detail34intrusive_target_default_null_typeIS2_EEEdeEv0
_ZNR3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEaSEOS3_435080
_ZNR3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEaSERKS3_1820
_ZNR3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEaSIS1_S2_EERS3_ONS0_IT_T0_EE435080
_ZNR3c1013intrusive_ptrINS_10TensorImplENS_19UndefinedTensorImplEEaSIS1_S2_EERS3_RKNS0_IT_S2_EE1820
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/intrusive_ptr.h.gcov.html b/html/libtorch/include/c10/util/intrusive_ptr.h.gcov.html new file mode 100644 index 0000000..8dcdbca --- /dev/null +++ b/html/libtorch/include/c10/util/intrusive_ptr.h.gcov.html @@ -0,0 +1,1131 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/intrusive_ptr.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - intrusive_ptr.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:83.8 %10588
Test Date:2024-04-30 13:17:26Functions:66.7 %7248
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <c10/util/Exception.h>
+       4              : #include <c10/util/MaybeOwned.h>
+       5              : #include <atomic>
+       6              : #include <climits>
+       7              : #include <memory>
+       8              : 
+       9              : namespace pybind11 {
+      10              : template <typename, typename...>
+      11              : class class_;
+      12              : }
+      13              : 
+      14              : namespace c10 {
+      15              : class intrusive_ptr_target;
+      16              : namespace raw {
+      17              : namespace weak_intrusive_ptr {
+      18              : inline void incref(intrusive_ptr_target* self);
+      19              : }
+      20              : namespace intrusive_ptr {
+      21              : inline void incref(intrusive_ptr_target* self);
+      22              : }
+      23              : 
+      24              : // constructor tag used by intrusive_ptr constructors
+      25              : struct DontIncreaseRefcount {};
+      26              : } // namespace raw
+      27              : /**
+      28              :  * intrusive_ptr<T> is an alternative to shared_ptr<T> that has better
+      29              :  * performance because it does the refcounting intrusively
+      30              :  * (i.e. in a member of the object itself).
+      31              :  * Your class T needs to inherit from intrusive_ptr_target to allow it to be
+      32              :  * used in an intrusive_ptr<T>. Your class's constructor should not allow
+      33              :  *`this` to escape to other threads or create an intrusive_ptr from `this`.
+      34              :  */
+      35              : 
+      36              : // Note [Stack allocated intrusive_ptr_target safety]
+      37              : // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      38              : // A well known problem with std::enable_shared_from_this is that it
+      39              : // allows you to create a std::shared_ptr from a stack allocated object,
+      40              : // which is totally bogus because the object will die once you return
+      41              : // from the stack.  In intrusive_ptr, we can detect that this has occurred,
+      42              : // because we set the refcount/weakcount of objects which inherit from
+      43              : // intrusive_ptr_target to zero, *unless* we can prove that the object
+      44              : // was dynamically allocated (e.g., via make_intrusive).
+      45              : //
+      46              : // Thus, whenever you transmute a T* into a intrusive_ptr<T>, we check
+      47              : // and make sure that the refcount isn't zero (or, a more subtle
+      48              : // test for weak_intrusive_ptr<T>, for which the refcount may validly
+      49              : // be zero, but the weak refcount better not be zero), because that
+      50              : // tells us if the object was allocated by us.  If it wasn't, no
+      51              : // intrusive_ptr for you!
+      52              : 
+      53              : // NOLINTNEXTLINE(cppcoreguidelines-virtual-class-destructor)
+      54              : class C10_API intrusive_ptr_target {
+      55              :   // Note [Weak references for intrusive refcounting]
+      56              :   // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      57              :   // Here's the scheme:
+      58              :   //
+      59              :   //  - refcount == number of strong references to the object
+      60              :   //    weakcount == number of weak references to the object,
+      61              :   //      plus one more if refcount > 0
+      62              :   //    An invariant: refcount > 0  =>  weakcount > 0
+      63              :   //
+      64              :   //  - c10::StorageImpl stays live as long as there are any strong
+      65              :   //    or weak pointers to it (weakcount > 0, since strong
+      66              :   //    references count as a +1 to weakcount)
+      67              :   //
+      68              :   //  - finalizers are called and data_ptr is deallocated when refcount == 0
+      69              :   //
+      70              :   //  - Once refcount == 0, it can never again be > 0 (the transition
+      71              :   //    from > 0 to == 0 is monotonic)
+      72              :   //
+      73              :   //  - When you access c10::StorageImpl via a weak pointer, you must
+      74              :   //    atomically increment the use count, if it is greater than 0.
+      75              :   //    If it is not, you must report that the storage is dead.
+      76              :   //
+      77              :   mutable std::atomic<size_t> refcount_;
+      78              :   mutable std::atomic<size_t> weakcount_;
+      79              : 
+      80              :   template <typename T, typename NullType>
+      81              :   friend class intrusive_ptr;
+      82              :   friend inline void raw::intrusive_ptr::incref(intrusive_ptr_target* self);
+      83              : 
+      84              :   template <typename T, typename NullType>
+      85              :   friend class weak_intrusive_ptr;
+      86              :   friend inline void raw::weak_intrusive_ptr::incref(
+      87              :       intrusive_ptr_target* self);
+      88              : 
+      89              :   template <typename T>
+      90              :   friend struct ExclusivelyOwnedTensorTraits;
+      91              : 
+      92              :  protected:
+      93              :   // protected destructor. We never want to destruct intrusive_ptr_target*
+      94              :   // directly.
+      95    520215158 :   virtual ~intrusive_ptr_target() {
+      96              : // Disable -Wterminate and -Wexceptions so we're allowed to use assertions
+      97              : // (i.e. throw exceptions) in a destructor.
+      98              : // We also have to disable -Wunknown-warning-option and -Wpragmas, because
+      99              : // some other compilers don't know about -Wterminate or -Wexceptions and
+     100              : // will show a warning about unknown warning options otherwise.
+     101              : #if defined(_MSC_VER) && !defined(__clang__)
+     102              : #pragma warning(push)
+     103              : #pragma warning( \
+     104              :     disable : 4297) // function assumed not to throw an exception but does
+     105              : #else
+     106              : #pragma GCC diagnostic push
+     107              : #pragma GCC diagnostic ignored "-Wpragmas"
+     108              : #pragma GCC diagnostic ignored "-Wunknown-warning-option"
+     109              : #pragma GCC diagnostic ignored "-Wterminate"
+     110              : #pragma GCC diagnostic ignored "-Wexceptions"
+     111              : #endif
+     112   1040430316 :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+     113              :         // Second condition is there to accommodate
+     114              :         // unsafe_adapt_non_heap_allocated: since we are doing our own
+     115              :         // deallocation in that case, it is correct for each
+     116              :         // expected_decref to have happened (some user code tried to
+     117              :         // decref and thus free the object, but it didn't happen right
+     118              :         // away) or not (no user code tried to free the object, and
+     119              :         // now it's getting destroyed through whatever mechanism the
+     120              :         // caller of unsafe_adapt_non_heap_allocated wanted to
+     121              :         // use). We choose our reference count such that the count
+     122              :         // will not dip below INT_MAX regardless.
+     123              :         refcount_.load() == 0 || refcount_.load() >= INT_MAX,
+     124              :         "Tried to destruct an intrusive_ptr_target that still has intrusive_ptr to it; refcount was ",
+     125              :         refcount_.load());
+     126   1040430316 :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+     127              :         // See ~intrusive_ptr for optimization that will frequently result in 1
+     128              :         // at destruction time.
+     129              :         weakcount_.load() == 1 || weakcount_.load() == 0 ||
+     130              :             weakcount_.load() == INT_MAX - 1 || weakcount_.load() == INT_MAX,
+     131              :         "Tried to destruct an intrusive_ptr_target that still has weak_intrusive_ptr to it");
+     132              : #if defined(_MSC_VER) && !defined(__clang__)
+     133              : #pragma warning(pop)
+     134              : #else
+     135              : #pragma GCC diagnostic pop
+     136              : #endif
+     137    520215158 :   }
+     138              : 
+     139       378768 :   constexpr intrusive_ptr_target() noexcept : refcount_(0), weakcount_(0) {}
+     140              : 
+     141              :   // intrusive_ptr_target supports copy and move: but refcount and weakcount
+     142              :   // don't participate (since they are intrinsic properties of the memory
+     143              :   // location)
+     144              :   intrusive_ptr_target(intrusive_ptr_target&& /*other*/) noexcept
+     145              :       : intrusive_ptr_target() {}
+     146              : 
+     147              :   intrusive_ptr_target& operator=(intrusive_ptr_target&& /*other*/) noexcept {
+     148              :     return *this;
+     149              :   }
+     150              : 
+     151              :   intrusive_ptr_target(const intrusive_ptr_target& /*other*/) noexcept
+     152              :       : intrusive_ptr_target() {}
+     153              : 
+     154              :   intrusive_ptr_target& operator=(
+     155              :       const intrusive_ptr_target& /*other*/) noexcept {
+     156              :     return *this;
+     157              :   }
+     158              : 
+     159              :  private:
+     160              :   /**
+     161              :    * This is called when refcount reaches zero.
+     162              :    * You can override this to release expensive resources.
+     163              :    * There might still be weak references, so your object might not get
+     164              :    * destructed yet, but you can assume the object isn't used anymore,
+     165              :    * i.e. no more calls to methods or accesses to members (we just can't
+     166              :    * destruct it yet because we need the weakcount accessible).
+     167              :    *
+     168              :    * If there are no weak references (i.e. your class is about to be
+     169              :    * destructed), this function WILL NOT be called.
+     170              :    */
+     171            0 :   virtual void release_resources() {}
+     172              : };
+     173              : 
+     174              : namespace detail {
+     175              : template <class TTarget>
+     176              : struct intrusive_target_default_null_type final {
+     177    149296920 :   static constexpr TTarget* singleton() noexcept {
+     178    149296920 :     return nullptr;
+     179              :   }
+     180              : };
+     181              : 
+     182              : template <class TTarget, class ToNullType, class FromNullType>
+     183       378768 : TTarget* assign_ptr_(TTarget* rhs) {
+     184       378768 :   if (FromNullType::singleton() == rhs) {
+     185            0 :     return ToNullType::singleton();
+     186              :   } else {
+     187       378768 :     return rhs;
+     188              :   }
+     189              : }
+     190              : 
+     191              : // Increment needs to be acquire-release to make use_count() and
+     192              : // unique() reliable.
+     193       440756 : inline size_t atomic_refcount_increment(std::atomic<size_t>& refcount) {
+     194       881512 :   return refcount.fetch_add(1, std::memory_order_acq_rel) + 1;
+     195              : }
+     196              : 
+     197              : // weak_use_count() is only used for testing, so we don't need it to
+     198              : // be reliable. Relaxed should be fine.
+     199              : inline size_t atomic_weakcount_increment(std::atomic<size_t>& weakcount) {
+     200              :   return weakcount.fetch_add(1, std::memory_order_relaxed) + 1;
+     201              : }
+     202              : 
+     203              : // Both decrements need to be acquire-release for correctness. See
+     204              : // e.g. std::shared_ptr implementation.
+     205    212684736 : inline size_t atomic_refcount_decrement(std::atomic<size_t>& refcount) {
+     206    425369472 :   return refcount.fetch_sub(1, std::memory_order_acq_rel) - 1;
+     207              : }
+     208              : 
+     209            0 : inline size_t atomic_weakcount_decrement(std::atomic<size_t>& weakcount) {
+     210            0 :   return weakcount.fetch_sub(1, std::memory_order_acq_rel) - 1;
+     211              : }
+     212              : 
+     213              : } // namespace detail
+     214              : 
+     215              : template <class TTarget, class NullType>
+     216              : class weak_intrusive_ptr;
+     217              : 
+     218              : template <
+     219              :     class TTarget,
+     220              :     class NullType = detail::intrusive_target_default_null_type<TTarget>>
+     221              : class intrusive_ptr final {
+     222              :  private:
+     223              : //  the following static assert would be nice to have but it requires
+     224              : //  the target class T to be fully defined when intrusive_ptr<T> is instantiated
+     225              : //  this is a problem for classes that contain pointers to themselves
+     226              : //  static_assert(
+     227              : //      std::is_base_of<intrusive_ptr_target, TTarget>::value,
+     228              : //      "intrusive_ptr can only be used for classes that inherit from
+     229              : //      intrusive_ptr_target.");
+     230              : #ifndef _WIN32
+     231              :   // This static_assert triggers on MSVC
+     232              :   //  error C2131: expression did not evaluate to a constant
+     233              :   static_assert(
+     234              :       NullType::singleton() == NullType::singleton(),
+     235              :       "NullType must have a constexpr singleton() method");
+     236              : #endif
+     237              :   static_assert(
+     238              :       std::is_base_of<
+     239              :           TTarget,
+     240              :           typename std::remove_pointer<decltype(NullType::singleton())>::type>::
+     241              :           value,
+     242              :       "NullType::singleton() must return a element_type* pointer");
+     243              : 
+     244              :   TTarget* target_;
+     245              : 
+     246              :   template <typename T>
+     247              :   friend struct ExclusivelyOwnedTensorTraits;
+     248              :   template <class TTarget2, class NullType2>
+     249              :   friend class intrusive_ptr;
+     250              :   friend class weak_intrusive_ptr<TTarget, NullType>;
+     251              : 
+     252              :   // Make pybind11::class_ be a friend class of intrusive_ptr, so that custom
+     253              :   // smart holder in pybind11 could access the private constructor of
+     254              :   // intrusive_ptr(T*) which took the ownership of the object. This is required
+     255              :   // by customer holder macro PYBIND11_DECLARE_HOLDER_TYPE, where it uses
+     256              :   // intrusive_ptr(TTarget*) to initialize and take ownership of the object. For
+     257              :   // details, see
+     258              :   // https://pybind11.readthedocs.io/en/stable/advanced/smart_ptrs.html#custom-smart-pointers
+     259              :   template <typename, typename...>
+     260              :   friend class pybind11::class_;
+     261              : 
+     262       441642 :   void retain_() {
+     263       441642 :     if (target_ != NullType::singleton()) {
+     264              :       size_t new_refcount =
+     265       440756 :           detail::atomic_refcount_increment(target_->refcount_);
+     266       440756 :       TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+     267              :           new_refcount != 1,
+     268              :           "intrusive_ptr: Cannot increase refcount after it reached zero.");
+     269              :     }
+     270       441642 :   }
+     271              : 
+     272    710681430 :   void reset_() noexcept {
+     273    923366166 :     if (target_ != NullType::singleton() &&
+     274    212684736 :         detail::atomic_refcount_decrement(target_->refcount_) == 0) {
+     275              :       // See comment above about weakcount. As long as refcount>0,
+     276              :       // weakcount is one larger than the actual number of weak references.
+     277              :       // So we need to decrement it here.
+     278    211864418 :       bool should_delete =
+     279    211864418 :           target_->weakcount_.load(std::memory_order_acquire) == 1;
+     280    211864418 :       if (!should_delete) {
+     281              :         // justification for const_cast: release_resources is basically a
+     282              :         // destructor and a destructor always mutates the object, even for const
+     283              :         // objects. NOLINTNEXTLINE(cppcoreguidelines-pro-type-const-cast)
+     284            0 :         const_cast<std::remove_const_t<TTarget>*>(target_)->release_resources();
+     285            0 :         should_delete =
+     286            0 :             detail::atomic_weakcount_decrement(target_->weakcount_) == 0;
+     287              :       }
+     288    211864418 :       if (should_delete) {
+     289    211864418 :         delete target_;
+     290              :       }
+     291              :     }
+     292    710681430 :   }
+     293              : 
+     294              :   // raw pointer constructors are not public because we shouldn't make
+     295              :   // intrusive_ptr out of raw pointers except from inside the make_intrusive(),
+     296              :   // reclaim() and weak_intrusive_ptr::lock() implementations.
+     297              : 
+     298              :   // This constructor will increase the ref counter for you.
+     299              :   // This constructor will be used by the make_intrusive(), and also pybind11,
+     300              :   // which wrap the intrusive_ptr holder around the raw pointer and incref
+     301              :   // correspondingly (pybind11 requires raw pointer constructor to incref by
+     302              :   // default).
+     303     37304192 :   explicit intrusive_ptr(TTarget* target)
+     304     37304192 :       : intrusive_ptr(target, raw::DontIncreaseRefcount{}) {
+     305     37304192 :     if (target_ != NullType::singleton()) {
+     306              :       // We just created result.target_, so we know no other thread has
+     307              :       // access to it, so we know we needn't care about memory ordering.
+     308              :       // (On x86_64, a store with memory_order_relaxed generates a plain old
+     309              :       // `mov`, whereas an atomic increment does a lock-prefixed `add`, which is
+     310              :       // much more expensive: https://godbolt.org/z/eKPzj8.)
+     311     37304192 :       TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+     312              :           target_->refcount_ == 0 && target_->weakcount_ == 0,
+     313              :           "intrusive_ptr: Newly-created target had non-zero refcounts. Does its "
+     314              :           "constructor do something strange like incref or create an "
+     315              :           "intrusive_ptr from `this`?");
+     316     37304192 :       target_->refcount_.store(1, std::memory_order_relaxed);
+     317     37304192 :       target_->weakcount_.store(1, std::memory_order_relaxed);
+     318              :     }
+     319     37304192 :   }
+     320              : 
+     321              :  public:
+     322              :   using element_type = TTarget;
+     323              : 
+     324     37370160 :   intrusive_ptr() noexcept
+     325     37370160 :       : intrusive_ptr(NullType::singleton(), raw::DontIncreaseRefcount{}) {}
+     326              : 
+     327              :   intrusive_ptr(std::nullptr_t) noexcept
+     328              :       : intrusive_ptr(NullType::singleton(), raw::DontIncreaseRefcount{}) {}
+     329              : 
+     330              :   // This constructor will not increase the ref counter for you.
+     331              :   // We use the tagged dispatch mechanism to explicitly mark this constructor
+     332              :   // to not increase the refcount
+     333    179950728 :   explicit intrusive_ptr(TTarget* target, raw::DontIncreaseRefcount) noexcept
+     334    179950728 :       : target_(target) {}
+     335              : 
+     336              :   explicit intrusive_ptr(std::unique_ptr<TTarget> rhs) noexcept
+     337              :       : intrusive_ptr(rhs.release()) {}
+     338              : 
+     339    772197404 :   intrusive_ptr(intrusive_ptr&& rhs) noexcept : target_(rhs.target_) {
+     340    772197404 :     rhs.target_ = NullType::singleton();
+     341    772197404 :   }
+     342              : 
+     343              :   template <class From, class FromNullType>
+     344              :   /* implicit */ intrusive_ptr(intrusive_ptr<From, FromNullType>&& rhs) noexcept
+     345              :       : target_(
+     346              :             detail::assign_ptr_<TTarget, NullType, FromNullType>(rhs.target_)) {
+     347              :     static_assert(
+     348              :         std::is_convertible<From*, TTarget*>::value,
+     349              :         "Type mismatch. intrusive_ptr move constructor got pointer of wrong type.");
+     350              :     rhs.target_ = FromNullType::singleton();
+     351              :   }
+     352              : 
+     353        62874 :   intrusive_ptr(const intrusive_ptr& rhs) : target_(rhs.target_) {
+     354        62874 :     retain_();
+     355        62874 :   }
+     356              : 
+     357              :   template <class From, class FromNullType>
+     358       378768 :   /* implicit */ intrusive_ptr(const intrusive_ptr<From, FromNullType>& rhs)
+     359       378768 :       : target_(
+     360       378768 :             detail::assign_ptr_<TTarget, NullType, FromNullType>(rhs.target_)) {
+     361              :     static_assert(
+     362              :         std::is_convertible<From*, TTarget*>::value,
+     363              :         "Type mismatch. intrusive_ptr copy constructor got pointer of wrong type.");
+     364       378768 :     retain_();
+     365       378768 :   }
+     366              : 
+     367    710681430 :   ~intrusive_ptr() noexcept {
+     368    710681430 :     reset_();
+     369    710681430 :   }
+     370              : 
+     371       435080 :   intrusive_ptr& operator=(intrusive_ptr&& rhs) & noexcept {
+     372       435080 :     return operator=<TTarget, NullType>(std::move(rhs));
+     373              :   }
+     374              : 
+     375              :   template <class From, class FromNullType>
+     376       435080 :   intrusive_ptr& operator=(intrusive_ptr<From, FromNullType>&& rhs) & noexcept {
+     377              :     static_assert(
+     378              :         std::is_convertible<From*, TTarget*>::value,
+     379              :         "Type mismatch. intrusive_ptr move assignment got pointer of wrong type.");
+     380       435080 :     intrusive_ptr tmp = std::move(rhs);
+     381       435080 :     swap(tmp);
+     382       870160 :     return *this;
+     383       435080 :   }
+     384              : 
+     385         1820 :   intrusive_ptr& operator=(const intrusive_ptr& rhs) & noexcept {
+     386         1820 :     return operator=<TTarget, NullType>(rhs);
+     387              :   }
+     388              : 
+     389              :   template <class From, class FromNullType>
+     390         1820 :   intrusive_ptr& operator=(const intrusive_ptr<From, NullType>& rhs) & {
+     391              :     static_assert(
+     392              :         std::is_convertible<From*, TTarget*>::value,
+     393              :         "Type mismatch. intrusive_ptr copy assignment got pointer of wrong type.");
+     394         1820 :     intrusive_ptr tmp = rhs;
+     395         1820 :     swap(tmp);
+     396         1820 :     return *this;
+     397         1820 :   }
+     398              : 
+     399    105695220 :   TTarget* get() const noexcept {
+     400    105695220 :     return target_;
+     401              :   }
+     402              : 
+     403            0 :   TTarget& operator*() const noexcept {
+     404            0 :     return *target_;
+     405              :   }
+     406              : 
+     407    121964308 :   TTarget* operator->() const noexcept {
+     408              :     // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDelete)
+     409    121964308 :     return target_;
+     410              :   }
+     411              : 
+     412       466880 :   operator bool() const noexcept {
+     413       466880 :     return target_ != NullType::singleton();
+     414              :   }
+     415              : 
+     416              :   void reset() noexcept {
+     417              :     reset_();
+     418              :     target_ = NullType::singleton();
+     419              :   }
+     420              : 
+     421       436900 :   void swap(intrusive_ptr& rhs) noexcept {
+     422       436900 :     TTarget* tmp = target_;
+     423       436900 :     target_ = rhs.target_;
+     424       436900 :     rhs.target_ = tmp;
+     425       436900 :   }
+     426              : 
+     427              :   // We do a lot of null-pointer checks in our code, good to have this be cheap.
+     428              :   bool defined() const noexcept {
+     429              :     return target_ != NullType::singleton();
+     430              :   }
+     431              : 
+     432       458920 :   size_t use_count() const noexcept {
+     433       458920 :     if (target_ == NullType::singleton()) {
+     434            0 :       return 0;
+     435              :     }
+     436       917840 :     return target_->refcount_.load(std::memory_order_acquire);
+     437              :   }
+     438              : 
+     439              :   size_t weak_use_count() const noexcept {
+     440              :     if (target_ == NullType::singleton()) {
+     441              :       return 0;
+     442              :     }
+     443              :     return target_->weakcount_.load(std::memory_order_acquire);
+     444              :   }
+     445              : 
+     446              :   bool unique() const noexcept {
+     447              :     return use_count() == 1;
+     448              :   }
+     449              : 
+     450              :   /**
+     451              :    * Returns an owning (!) pointer to the underlying object and makes the
+     452              :    * intrusive_ptr instance invalid. That means the refcount is not decreased.
+     453              :    * You *must* put the returned pointer back into a intrusive_ptr using
+     454              :    * intrusive_ptr::reclaim(ptr) to properly destruct it.
+     455              :    * This is helpful for C APIs.
+     456              :    */
+     457              :   TTarget* release() noexcept {
+     458              :     // NOLINTNEXTLINE(clang-analyzer-core.uninitialized.Assign)
+     459              :     TTarget* result = target_;
+     460              :     target_ = NullType::singleton();
+     461              :     return result;
+     462              :   }
+     463              : 
+     464              :   /**
+     465              :    * Takes an owning pointer to TTarget* and creates an intrusive_ptr that takes
+     466              :    * over ownership. That means the refcount is not increased.
+     467              :    * This is the counter-part to intrusive_ptr::release() and the pointer
+     468              :    * passed in *must* have been created using intrusive_ptr::release().
+     469              :    */
+     470    105276376 :   static intrusive_ptr reclaim(TTarget* owning_ptr) {
+     471    315829128 :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+     472              :         owning_ptr == NullType::singleton() ||
+     473              :             owning_ptr->refcount_.load() == 0 || owning_ptr->weakcount_.load(),
+     474              :         "TTarget violates the invariant that refcount > 0  =>  weakcount > 0");
+     475    105276376 :     return intrusive_ptr(owning_ptr, raw::DontIncreaseRefcount{});
+     476              :   }
+     477              : 
+     478              :   /**
+     479              :    * Takes an owning pointer to TTarget* and creates an intrusive_ptr
+     480              :    * representing a new reference, i.e. the raw pointer retains
+     481              :    * ownership.
+     482              :    */
+     483              :   static intrusive_ptr reclaim_copy(TTarget* owning_ptr) {
+     484              :     auto ret = reclaim(owning_ptr);
+     485              :     ret.retain_();
+     486              :     return ret;
+     487              :   }
+     488              : 
+     489              :   /**
+     490              :    * Allocate a heap object with args and wrap it inside a intrusive_ptr and
+     491              :    * incref. This is a helper function to let make_intrusive() access private
+     492              :    * intrusive_ptr constructors.
+     493              :    */
+     494              :   template <class... Args>
+     495     37304192 :   static intrusive_ptr make(Args&&... args) {
+     496     37304192 :     return intrusive_ptr(new TTarget(std::forward<Args>(args)...));
+     497              :   }
+     498              : 
+     499              :   /**
+     500              :    * Turn a new instance of TTarget (e.g., literally allocated
+     501              :    * using new TTarget(...) into an intrusive_ptr.  If possible,
+     502              :    * use intrusive_ptr::make instead which statically guarantees
+     503              :    * that the allocation was done properly.
+     504              :    *
+     505              :    * At the moment, the only reason this method exists is because
+     506              :    * pybind11 holder types expect to be able to allocate in
+     507              :    * this way (because pybind11 handles the new allocation itself).
+     508              :    */
+     509              :   static intrusive_ptr unsafe_steal_from_new(TTarget* raw_ptr) {
+     510              :     return intrusive_ptr(raw_ptr);
+     511              :   }
+     512              : 
+     513              :   /**
+     514              :    * Turn an instance of TTarget that should not be reference counted
+     515              :    * (e.g., allocated into an arena with placement new) into an
+     516              :    * intrusive_ptr. This is gratuitously unsafe and should only be
+     517              :    * used if you can guarantee that the pointer will not escape and be
+     518              :    * refcounted as normal.
+     519              :    *
+     520              :    * `expected_decrefs` is a debugging parameter: it indicates the
+     521              :    * number of strong owners the intrusive_ptr_target in question is
+     522              :    * expected to get. In most use cases, this will likely be 1.
+     523              :    *
+     524              :    * The reason this method exists is for manually sharing
+     525              :    * StorageImpls across Tensors in the static runtime. It needs
+     526              :    * access to private intrusive_ptr members so that the refcounts can
+     527              :    * be initialized to custom values.
+     528              :    */
+     529              :   static intrusive_ptr unsafe_adapt_non_heap_allocated(
+     530              :       TTarget* raw_ptr,
+     531              :       size_t expected_decrefs) {
+     532              :     intrusive_ptr result(raw_ptr, raw::DontIncreaseRefcount{});
+     533              :     // INT_MAX is impractically huge for a reference count, while
+     534              :     // being in no danger of overflowing size_t. We actually only need to
+     535              :     // initialize the refcount to 2 -- we are just doing an unbalanced
+     536              :     // incref to prevent the non-heap-allocated target from being
+     537              :     // freed, and we are optimizing that incref by directly
+     538              :     // initializing the refcounts rather than doing an expensive
+     539              :     // atomic increment. The reason to use INT_MAX is to accommodate
+     540              :     // the debug assertions in ~intrusive_ptr_target.
+     541              : #ifdef NDEBUG
+     542              :     expected_decrefs = 0;
+     543              : #endif
+     544              :     result.target_->refcount_.store(
+     545              :         INT_MAX + expected_decrefs, std::memory_order_relaxed);
+     546              :     result.target_->weakcount_.store(INT_MAX, std::memory_order_relaxed);
+     547              :     return result;
+     548              :   }
+     549              : 
+     550              :   /**
+     551              :    * Turn a **non-owning raw pointer** to an intrusive_ptr.  It is
+     552              :    * the moral equivalent of enable_shared_from_this on a shared pointer.
+     553              :    *
+     554              :    * This method is only valid for objects that are already live.  If
+     555              :    * you are looking for the moral equivalent of unique_ptr<T>(T*)
+     556              :    * constructor, see steal_from_new.
+     557              :    *
+     558              :    * TODO: https://github.com/pytorch/pytorch/issues/56482
+     559              :    */
+     560              :   static intrusive_ptr unsafe_reclaim_from_nonowning(TTarget* raw_ptr) {
+     561              :     // See Note [Stack allocated intrusive_ptr_target safety]
+     562              :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+     563              :         raw_ptr == NullType::singleton() || raw_ptr->refcount_.load() > 0,
+     564              :         "intrusive_ptr: Can only reclaim pointers that are owned by someone");
+     565              :     auto ptr = reclaim(raw_ptr); // doesn't increase refcount
+     566              :     ptr.retain_();
+     567              :     return ptr;
+     568              :   }
+     569              : };
+     570              : 
+     571              : template <
+     572              :     class TTarget,
+     573              :     class NullType = detail::intrusive_target_default_null_type<TTarget>,
+     574              :     class... Args>
+     575     37304192 : inline intrusive_ptr<TTarget, NullType> make_intrusive(Args&&... args) {
+     576     37304192 :   return intrusive_ptr<TTarget, NullType>::make(std::forward<Args>(args)...);
+     577              : }
+     578              : 
+     579              : template <class TTarget, class NullType>
+     580              : inline void swap(
+     581              :     intrusive_ptr<TTarget, NullType>& lhs,
+     582              :     intrusive_ptr<TTarget, NullType>& rhs) noexcept {
+     583              :   lhs.swap(rhs);
+     584              : }
+     585              : 
+     586              : // To allow intrusive_ptr inside std::map or std::set, we need operator<
+     587              : template <class TTarget1, class NullType1, class TTarget2, class NullType2>
+     588              : inline bool operator<(
+     589              :     const intrusive_ptr<TTarget1, NullType1>& lhs,
+     590              :     const intrusive_ptr<TTarget2, NullType2>& rhs) noexcept {
+     591              :   return lhs.get() < rhs.get();
+     592              : }
+     593              : 
+     594              : template <class TTarget1, class NullType1, class TTarget2, class NullType2>
+     595              : inline bool operator==(
+     596              :     const intrusive_ptr<TTarget1, NullType1>& lhs,
+     597              :     const intrusive_ptr<TTarget2, NullType2>& rhs) noexcept {
+     598              :   return lhs.get() == rhs.get();
+     599              : }
+     600              : 
+     601              : template <class TTarget1, class NullType1>
+     602              : inline bool operator==(
+     603              :     const intrusive_ptr<TTarget1, NullType1>& lhs,
+     604              :     std::nullptr_t) noexcept {
+     605              :   return lhs.get() == nullptr;
+     606              : }
+     607              : 
+     608              : template <class TTarget2, class NullType2>
+     609              : inline bool operator==(
+     610              :     std::nullptr_t,
+     611              :     const intrusive_ptr<TTarget2, NullType2>& rhs) noexcept {
+     612              :   return nullptr == rhs.get();
+     613              : }
+     614              : 
+     615              : template <class TTarget1, class NullType1, class TTarget2, class NullType2>
+     616              : inline bool operator!=(
+     617              :     const intrusive_ptr<TTarget1, NullType1>& lhs,
+     618              :     const intrusive_ptr<TTarget2, NullType2>& rhs) noexcept {
+     619              :   return !operator==(lhs, rhs);
+     620              : }
+     621              : 
+     622              : template <class TTarget1, class NullType1>
+     623              : inline bool operator!=(
+     624              :     const intrusive_ptr<TTarget1, NullType1>& lhs,
+     625              :     std::nullptr_t) noexcept {
+     626              :   return !operator==(lhs, nullptr);
+     627              : }
+     628              : 
+     629              : template <class TTarget2, class NullType2>
+     630              : inline bool operator!=(
+     631              :     std::nullptr_t,
+     632              :     const intrusive_ptr<TTarget2, NullType2>& rhs) noexcept {
+     633              :   return !operator==(nullptr, rhs);
+     634              : }
+     635              : template <typename T>
+     636              : struct MaybeOwnedTraits<c10::intrusive_ptr<T>> {
+     637              :   using owned_type = c10::intrusive_ptr<T>;
+     638              :   using borrow_type = c10::intrusive_ptr<T>;
+     639              : 
+     640              :   static borrow_type createBorrow(const owned_type& from) {
+     641              :     return borrow_type::reclaim(from.get());
+     642              :   }
+     643              : 
+     644              :   static void assignBorrow(borrow_type& lhs, const borrow_type& rhs) {
+     645              :     lhs.release();
+     646              :     lhs = borrow_type::reclaim(rhs.get());
+     647              :   }
+     648              : 
+     649              :   static void destroyBorrow(borrow_type& toDestroy) {
+     650              :     toDestroy.release();
+     651              :   }
+     652              : 
+     653              :   static const owned_type& referenceFromBorrow(const borrow_type& borrow) {
+     654              :     return borrow;
+     655              :   }
+     656              : 
+     657              :   static const owned_type* pointerFromBorrow(const borrow_type& borrow) {
+     658              :     return &borrow;
+     659              :   }
+     660              : 
+     661              :   static bool debugBorrowIsValid(const borrow_type& /*borrow*/) {
+     662              :     return true;
+     663              :   }
+     664              : };
+     665              : 
+     666              : template <
+     667              :     typename TTarget,
+     668              :     class NullType = detail::intrusive_target_default_null_type<TTarget>>
+     669              : class weak_intrusive_ptr final {
+     670              :  private:
+     671              :   static_assert(
+     672              :       std::is_base_of<intrusive_ptr_target, TTarget>::value,
+     673              :       "intrusive_ptr can only be used for classes that inherit from intrusive_ptr_target.");
+     674              : #ifndef _WIN32
+     675              :   // This static_assert triggers on MSVC
+     676              :   //  error C2131: expression did not evaluate to a constant
+     677              :   static_assert(
+     678              :       NullType::singleton() == NullType::singleton(),
+     679              :       "NullType must have a constexpr singleton() method");
+     680              : #endif
+     681              :   static_assert(
+     682              :       std::is_base_of<
+     683              :           TTarget,
+     684              :           typename std::remove_pointer<decltype(NullType::singleton())>::type>::
+     685              :           value,
+     686              :       "NullType::singleton() must return a element_type* pointer");
+     687              : 
+     688              :   TTarget* target_;
+     689              : 
+     690              :   template <class TTarget2, class NullType2>
+     691              :   friend class weak_intrusive_ptr;
+     692              : 
+     693              :   void retain_() {
+     694              :     if (target_ != NullType::singleton()) {
+     695              :       size_t new_weakcount =
+     696              :           detail::atomic_weakcount_increment(target_->weakcount_);
+     697              :       TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+     698              :           new_weakcount != 1,
+     699              :           "weak_intrusive_ptr: Cannot increase weakcount after it reached zero.");
+     700              :     }
+     701              :   }
+     702              : 
+     703              :   void reset_() noexcept {
+     704              :     if (target_ != NullType::singleton() &&
+     705              :         detail::atomic_weakcount_decrement(target_->weakcount_) == 0) {
+     706              :       // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDelete)
+     707              :       delete target_;
+     708              :     }
+     709              :     target_ = NullType::singleton();
+     710              :   }
+     711              : 
+     712              :   constexpr explicit weak_intrusive_ptr(TTarget* target) : target_(target) {}
+     713              : 
+     714              :  public:
+     715              :   using element_type = TTarget;
+     716              : 
+     717              :   explicit weak_intrusive_ptr(const intrusive_ptr<TTarget, NullType>& ptr)
+     718              :       : weak_intrusive_ptr(ptr.get()) {
+     719              :     retain_();
+     720              :   }
+     721              : 
+     722              :   weak_intrusive_ptr(weak_intrusive_ptr&& rhs) noexcept : target_(rhs.target_) {
+     723              :     rhs.target_ = NullType::singleton();
+     724              :   }
+     725              : 
+     726              :   template <class From, class FromNullType>
+     727              :   /* implicit */ weak_intrusive_ptr(
+     728              :       weak_intrusive_ptr<From, FromNullType>&& rhs) noexcept
+     729              :       : target_(
+     730              :             detail::assign_ptr_<TTarget, NullType, FromNullType>(rhs.target_)) {
+     731              :     static_assert(
+     732              :         std::is_convertible<From*, TTarget*>::value,
+     733              :         "Type mismatch. weak_intrusive_ptr move constructor got pointer of wrong type.");
+     734              :     rhs.target_ = FromNullType::singleton();
+     735              :   }
+     736              : 
+     737              :   weak_intrusive_ptr(const weak_intrusive_ptr& rhs) : target_(rhs.target_) {
+     738              :     retain_();
+     739              :   }
+     740              : 
+     741              :   template <class From, class FromNullType>
+     742              :   /* implicit */ weak_intrusive_ptr(
+     743              :       const weak_intrusive_ptr<From, FromNullType>& rhs)
+     744              :       : target_(
+     745              :             detail::assign_ptr_<TTarget, NullType, FromNullType>(rhs.target_)) {
+     746              :     static_assert(
+     747              :         std::is_convertible<From*, TTarget*>::value,
+     748              :         "Type mismatch. weak_intrusive_ptr copy constructor got pointer of wrong type.");
+     749              :     retain_();
+     750              :   }
+     751              : 
+     752              :   ~weak_intrusive_ptr() noexcept {
+     753              :     reset_();
+     754              :   }
+     755              : 
+     756              :   weak_intrusive_ptr& operator=(weak_intrusive_ptr&& rhs) & noexcept {
+     757              :     return operator=<TTarget, NullType>(std::move(rhs));
+     758              :   }
+     759              : 
+     760              :   template <class From, class FromNullType>
+     761              :   weak_intrusive_ptr& operator=(
+     762              :       weak_intrusive_ptr<From, FromNullType>&& rhs) & noexcept {
+     763              :     static_assert(
+     764              :         std::is_convertible<From*, TTarget*>::value,
+     765              :         "Type mismatch. weak_intrusive_ptr move assignment got pointer of wrong type.");
+     766              :     weak_intrusive_ptr tmp = std::move(rhs);
+     767              :     swap(tmp);
+     768              :     return *this;
+     769              :   }
+     770              : 
+     771              :   weak_intrusive_ptr& operator=(const weak_intrusive_ptr& rhs) & noexcept {
+     772              :     return operator=<TTarget, NullType>(rhs);
+     773              :   }
+     774              : 
+     775              :   weak_intrusive_ptr& operator=(
+     776              :       const intrusive_ptr<TTarget, NullType>& rhs) & noexcept {
+     777              :     weak_intrusive_ptr tmp(rhs);
+     778              :     swap(tmp);
+     779              :     return *this;
+     780              :   }
+     781              : 
+     782              :   template <class From, class FromNullType>
+     783              :   weak_intrusive_ptr& operator=(
+     784              :       const weak_intrusive_ptr<From, NullType>& rhs) & {
+     785              :     static_assert(
+     786              :         std::is_convertible<From*, TTarget*>::value,
+     787              :         "Type mismatch. weak_intrusive_ptr copy assignment got pointer of wrong type.");
+     788              :     weak_intrusive_ptr tmp = rhs;
+     789              :     swap(tmp);
+     790              :     return *this;
+     791              :   }
+     792              : 
+     793              :   void reset() noexcept {
+     794              :     reset_();
+     795              :   }
+     796              : 
+     797              :   void swap(weak_intrusive_ptr& rhs) noexcept {
+     798              :     TTarget* tmp = target_;
+     799              :     target_ = rhs.target_;
+     800              :     rhs.target_ = tmp;
+     801              :   }
+     802              : 
+     803              :   // NB: This should ONLY be used by the std::hash implementation
+     804              :   // for weak_intrusive_ptr.  Another way you could do this is
+     805              :   // friend std::hash<weak_intrusive_ptr>, but this triggers two
+     806              :   // bugs:
+     807              :   //
+     808              :   //  (1) It triggers an nvcc bug, where std::hash in a friend class
+     809              :   //      declaration gets preprocessed into hash, which then cannot
+     810              :   //      actually be found.  The error in this case looks like:
+     811              :   //
+     812              :   //        error: no template named 'hash'; did you mean 'std::hash'?
+     813              :   //
+     814              :   //  (2) On OS X, std::hash is declared as a struct, not a class.
+     815              :   //      This twings:
+     816              :   //
+     817              :   //        error: class 'hash' was previously declared as a struct
+     818              :   //        [-Werror,-Wmismatched-tags]
+     819              :   //
+     820              :   // Both of these are work-aroundable, but on the whole, I decided
+     821              :   // it would be simpler and easier to make work if we just expose
+     822              :   // an unsafe getter for target_
+     823              :   //
+     824              :   TTarget* _unsafe_get_target() const noexcept {
+     825              :     return target_;
+     826              :   }
+     827              : 
+     828              :   size_t use_count() const noexcept {
+     829              :     if (target_ == NullType::singleton()) {
+     830              :       return 0;
+     831              :     }
+     832              :     return target_->refcount_.load(
+     833              :         std::memory_order_acquire); // refcount, not weakcount!
+     834              :   }
+     835              : 
+     836              :   size_t weak_use_count() const noexcept {
+     837              :     if (target_ == NullType::singleton()) {
+     838              :       return 0;
+     839              :     }
+     840              :     return target_->weakcount_.load(std::memory_order_acquire);
+     841              :   }
+     842              : 
+     843              :   bool expired() const noexcept {
+     844              :     return use_count() == 0;
+     845              :   }
+     846              : 
+     847              :   intrusive_ptr<TTarget, NullType> lock() const noexcept {
+     848              :     if (expired()) {
+     849              :       return intrusive_ptr<TTarget, NullType>();
+     850              :     } else {
+     851              :       auto refcount = target_->refcount_.load(std::memory_order_seq_cst);
+     852              :       do {
+     853              :         if (refcount == 0) {
+     854              :           // Object already destructed, no strong references left anymore.
+     855              :           // Return nullptr.
+     856              :           return intrusive_ptr<TTarget, NullType>();
+     857              :         }
+     858              :       } while (
+     859              :           !target_->refcount_.compare_exchange_weak(refcount, refcount + 1));
+     860              :       return intrusive_ptr<TTarget, NullType>(
+     861              :           target_, raw::DontIncreaseRefcount{});
+     862              :     }
+     863              :   }
+     864              : 
+     865              :   /**
+     866              :    * Returns an owning (but still only weakly referenced) pointer to the
+     867              :    * underlying object and makes the weak_intrusive_ptr instance invalid.
+     868              :    * That means the weakcount is not decreased.
+     869              :    * You *must* put the returned pointer back into a weak_intrusive_ptr using
+     870              :    * weak_intrusive_ptr::reclaim(ptr) to properly destruct it.
+     871              :    * This is helpful for C APIs.
+     872              :    */
+     873              :   TTarget* release() noexcept {
+     874              :     TTarget* result = target_;
+     875              :     target_ = NullType::singleton();
+     876              :     return result;
+     877              :   }
+     878              : 
+     879              :   /**
+     880              :    * Takes an owning (but must be weakly referenced) pointer to TTarget* and
+     881              :    * creates a weak_intrusive_ptr that takes over ownership.
+     882              :    * This means that the weakcount is not increased.
+     883              :    * This is the counter-part to weak_intrusive_ptr::release() and the pointer
+     884              :    * passed in *must* have been created using weak_intrusive_ptr::release().
+     885              :    */
+     886              :   static weak_intrusive_ptr reclaim(TTarget* owning_weak_ptr) {
+     887              :     // See Note [Stack allocated intrusive_ptr_target safety]
+     888              :     // if refcount > 0, weakcount must be >1 for weak references to exist.
+     889              :     // see weak counting explanation at top of this file.
+     890              :     // if refcount == 0, weakcount only must be >0.
+     891              :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+     892              :         owning_weak_ptr == NullType::singleton() ||
+     893              :             owning_weak_ptr->weakcount_.load() > 1 ||
+     894              :             (owning_weak_ptr->refcount_.load() == 0 &&
+     895              :              owning_weak_ptr->weakcount_.load() > 0),
+     896              :         "weak_intrusive_ptr: Can only weak_intrusive_ptr::reclaim() owning pointers that were created using weak_intrusive_ptr::release().");
+     897              :     return weak_intrusive_ptr(owning_weak_ptr);
+     898              :   }
+     899              : 
+     900              :   /**
+     901              :    * Takes a pointer to TTarget* (may be weak or strong) and creates a
+     902              :    * new weak_intrusive_ptr representing a new weak reference, i.e.
+     903              :    * the raw pointer retains ownership.
+     904              :    */
+     905              :   static weak_intrusive_ptr reclaim_copy(TTarget* owning_ptr) {
+     906              :     auto ret = reclaim(owning_ptr);
+     907              :     ret.retain_();
+     908              :     return ret;
+     909              :   }
+     910              : 
+     911              :   template <class TTarget1, class NullType1, class TTarget2, class NullType2>
+     912              :   friend bool operator<(
+     913              :       const weak_intrusive_ptr<TTarget1, NullType1>& lhs,
+     914              :       const weak_intrusive_ptr<TTarget2, NullType2>& rhs) noexcept;
+     915              :   template <class TTarget1, class NullType1, class TTarget2, class NullType2>
+     916              :   friend bool operator==(
+     917              :       const weak_intrusive_ptr<TTarget1, NullType1>& lhs,
+     918              :       const weak_intrusive_ptr<TTarget2, NullType2>& rhs) noexcept;
+     919              : };
+     920              : 
+     921              : template <class TTarget, class NullType>
+     922              : inline void swap(
+     923              :     weak_intrusive_ptr<TTarget, NullType>& lhs,
+     924              :     weak_intrusive_ptr<TTarget, NullType>& rhs) noexcept {
+     925              :   lhs.swap(rhs);
+     926              : }
+     927              : 
+     928              : // To allow weak_intrusive_ptr inside std::map or std::set, we need operator<
+     929              : template <class TTarget1, class NullType1, class TTarget2, class NullType2>
+     930              : inline bool operator<(
+     931              :     const weak_intrusive_ptr<TTarget1, NullType1>& lhs,
+     932              :     const weak_intrusive_ptr<TTarget2, NullType2>& rhs) noexcept {
+     933              :   return lhs.target_ < rhs.target_;
+     934              : }
+     935              : 
+     936              : template <class TTarget1, class NullType1, class TTarget2, class NullType2>
+     937              : inline bool operator==(
+     938              :     const weak_intrusive_ptr<TTarget1, NullType1>& lhs,
+     939              :     const weak_intrusive_ptr<TTarget2, NullType2>& rhs) noexcept {
+     940              :   return lhs.target_ == rhs.target_;
+     941              : }
+     942              : 
+     943              : template <class TTarget1, class NullType1, class TTarget2, class NullType2>
+     944              : inline bool operator!=(
+     945              :     const weak_intrusive_ptr<TTarget1, NullType1>& lhs,
+     946              :     const weak_intrusive_ptr<TTarget2, NullType2>& rhs) noexcept {
+     947              :   return !operator==(lhs, rhs);
+     948              : }
+     949              : 
+     950              : // Alias for documentary purposes, to more easily distinguish
+     951              : // weak raw intrusive pointers from intrusive pointers.
+     952              : using weak_intrusive_ptr_target = intrusive_ptr_target;
+     953              : 
+     954              : // This namespace provides some methods for working with
+     955              : // raw pointers that subclass intrusive_ptr_target.  They are not provided
+     956              : // as methods on intrusive_ptr_target, because ideally you would not need these
+     957              : // methods at all (use smart pointers), but if you are dealing with legacy code
+     958              : // that still needs to pass around raw pointers, you may find these quite
+     959              : // useful.
+     960              : //
+     961              : // An important usage note: some functions are only valid if you have a
+     962              : // strong raw pointer to the object, while others are only valid if you
+     963              : // have a weak raw pointer to the object.  ONLY call intrusive_ptr namespace
+     964              : // functions on strong pointers, and weak_intrusive_ptr namespace functions
+     965              : // on weak pointers.  If you mix it up, you may get an assert failure.
+     966              : namespace raw {
+     967              : 
+     968              : namespace intrusive_ptr {
+     969              : 
+     970              : // WARNING: Unlike the reclaim() API, it is NOT valid to pass
+     971              : // NullType::singleton to this function
+     972            0 : inline void incref(intrusive_ptr_target* self) {
+     973            0 :   if (self) {
+     974            0 :     detail::atomic_refcount_increment(self->refcount_);
+     975              :   }
+     976            0 : }
+     977              : 
+     978              : // WARNING: Unlike the reclaim() API, it is NOT valid to pass
+     979              : // NullType::singleton to this function
+     980            0 : inline void decref(intrusive_ptr_target* self) {
+     981              :   // Let it die
+     982            0 :   c10::intrusive_ptr<intrusive_ptr_target>::reclaim(self);
+     983              :   // NB: Caller still has 'self' pointer, but it's now invalid.
+     984              :   // If you want more safety, used the actual c10::intrusive_ptr class
+     985            0 : }
+     986              : 
+     987              : template <typename T>
+     988              : inline T* make_weak(T* self) {
+     989              :   // NB: 'this' is a strong pointer, but we return a weak pointer
+     990              :   auto ptr = c10::intrusive_ptr<T>::reclaim(self);
+     991              :   c10::weak_intrusive_ptr<T> wptr(ptr);
+     992              :   ptr.release();
+     993              :   return wptr.release();
+     994              : }
+     995              : 
+     996              : inline size_t use_count(intrusive_ptr_target* self) {
+     997              :   auto ptr = c10::intrusive_ptr<intrusive_ptr_target>::reclaim(self);
+     998              :   auto r = ptr.use_count();
+     999              :   ptr.release();
+    1000              :   return r;
+    1001              : }
+    1002              : 
+    1003              : } // namespace intrusive_ptr
+    1004              : 
+    1005              : namespace weak_intrusive_ptr {
+    1006              : 
+    1007              : inline void incref(weak_intrusive_ptr_target* self) {
+    1008              :   detail::atomic_weakcount_increment(self->weakcount_);
+    1009              : }
+    1010              : 
+    1011              : inline void decref(weak_intrusive_ptr_target* self) {
+    1012              :   // Let it die
+    1013              :   c10::weak_intrusive_ptr<intrusive_ptr_target>::reclaim(self);
+    1014              :   // NB: You still "have" the 'self' pointer, but it's now invalid.
+    1015              :   // If you want more safety, used the actual c10::weak_intrusive_ptr class
+    1016              : }
+    1017              : 
+    1018              : template <typename T>
+    1019              : inline T* lock(T* self) {
+    1020              :   auto wptr = c10::weak_intrusive_ptr<T>::reclaim(self);
+    1021              :   auto ptr = wptr.lock();
+    1022              :   wptr.release();
+    1023              :   return ptr.release();
+    1024              : }
+    1025              : 
+    1026              : // This gives the STRONG refcount of a WEAK pointer
+    1027              : inline size_t use_count(weak_intrusive_ptr_target* self) {
+    1028              :   auto wptr = c10::weak_intrusive_ptr<intrusive_ptr_target>::reclaim(self);
+    1029              :   auto r = wptr.use_count();
+    1030              :   wptr.release();
+    1031              :   return r;
+    1032              : }
+    1033              : 
+    1034              : } // namespace weak_intrusive_ptr
+    1035              : 
+    1036              : } // namespace raw
+    1037              : 
+    1038              : } // namespace c10
+    1039              : 
+    1040              : namespace std {
+    1041              : // To allow intrusive_ptr and weak_intrusive_ptr inside std::unordered_map or
+    1042              : // std::unordered_set, we need std::hash
+    1043              : template <class TTarget, class NullType>
+    1044              : struct hash<c10::intrusive_ptr<TTarget, NullType>> {
+    1045              :   size_t operator()(const c10::intrusive_ptr<TTarget, NullType>& x) const {
+    1046              :     return std::hash<TTarget*>()(x.get());
+    1047              :   }
+    1048              : };
+    1049              : template <class TTarget, class NullType>
+    1050              : struct hash<c10::weak_intrusive_ptr<TTarget, NullType>> {
+    1051              :   size_t operator()(const c10::weak_intrusive_ptr<TTarget, NullType>& x) const {
+    1052              :     return std::hash<TTarget*>()(x._unsafe_get_target());
+    1053              :   }
+    1054              : };
+    1055              : } // namespace std
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/logging_is_not_google_glog.h.func-c.html b/html/libtorch/include/c10/util/logging_is_not_google_glog.h.func-c.html new file mode 100644 index 0000000..8eca439 --- /dev/null +++ b/html/libtorch/include/c10/util/logging_is_not_google_glog.h.func-c.html @@ -0,0 +1,166 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/logging_is_not_google_glog.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - logging_is_not_google_glog.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %120
Test Date:2024-04-30 13:17:26Functions:0.0 %100
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEEvRSoT_SA_0
_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_SaIS8_EEEEEEvRSoT_SG_0
_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_ESt6vectorISA_SaISA_EEEEEEvRSoT_SI_0
_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS4_SaIS4_EEEEEEvRSoT_SC_0
_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEEvRSoT_SA_0
_ZStlsIJiSaIiEEERSoS1_RKSt6vectorIDpT_E0
_ZStlsIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEERSoS7_RKSt6vectorIDpT_E0
_ZStlsIJSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEERSoS9_RKSt6vectorIDpT_E0
_ZStlsIJSt4pairIiiESaIS1_EEERSoS3_RKSt6vectorIDpT_E0
_ZStlsIJiSaIiEEERSoS1_RKSt6vectorIDpT_E0
_ZStlsIiiERSoS0_RKSt4pairIT_T0_E0
_ZStlsINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ERSoS6_RKSt4pairIT_T0_E0
_ZStlsIiiERSoS0_RKSt4pairIT_T0_E0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/logging_is_not_google_glog.h.func.html b/html/libtorch/include/c10/util/logging_is_not_google_glog.h.func.html new file mode 100644 index 0000000..4fd70a1 --- /dev/null +++ b/html/libtorch/include/c10/util/logging_is_not_google_glog.h.func.html @@ -0,0 +1,166 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/logging_is_not_google_glog.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - logging_is_not_google_glog.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %120
Test Date:2024-04-30 13:17:26Functions:0.0 %100
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEEvRSoT_SA_0
_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_SaIS8_EEEEEEvRSoT_SG_0
_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_ESt6vectorISA_SaISA_EEEEEEvRSoT_SI_0
_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS4_SaIS4_EEEEEEvRSoT_SC_0
_ZN3c1013PrintSequenceIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEEEvRSoT_SA_0
_ZStlsIJiSaIiEEERSoS1_RKSt6vectorIDpT_E0
_ZStlsIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEERSoS7_RKSt6vectorIDpT_E0
_ZStlsIJSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEERSoS9_RKSt6vectorIDpT_E0
_ZStlsIJSt4pairIiiESaIS1_EEERSoS3_RKSt6vectorIDpT_E0
_ZStlsIJiSaIiEEERSoS1_RKSt6vectorIDpT_E0
_ZStlsIiiERSoS0_RKSt4pairIT_T0_E0
_ZStlsINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ERSoS6_RKSt4pairIT_T0_E0
_ZStlsIiiERSoS0_RKSt4pairIT_T0_E0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/logging_is_not_google_glog.h.gcov.html b/html/libtorch/include/c10/util/logging_is_not_google_glog.h.gcov.html new file mode 100644 index 0000000..6ef8a50 --- /dev/null +++ b/html/libtorch/include/c10/util/logging_is_not_google_glog.h.gcov.html @@ -0,0 +1,334 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/logging_is_not_google_glog.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - logging_is_not_google_glog.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %120
Test Date:2024-04-30 13:17:26Functions:0.0 %100
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #ifndef C10_UTIL_LOGGING_IS_NOT_GOOGLE_GLOG_H_
+       2              : #define C10_UTIL_LOGGING_IS_NOT_GOOGLE_GLOG_H_
+       3              : 
+       4              : #include <chrono>
+       5              : #include <climits>
+       6              : #include <ctime>
+       7              : #include <iomanip>
+       8              : #include <map>
+       9              : #include <ostream>
+      10              : #include <set>
+      11              : #include <sstream>
+      12              : #include <string>
+      13              : #include <vector>
+      14              : 
+      15              : #include <c10/util/Flags.h>
+      16              : 
+      17              : const char CAFFE2_SEVERITY_PREFIX[] = "FEWIV";
+      18              : 
+      19              : namespace c10 {
+      20              : 
+      21              : // Log severity level constants.
+      22              : const int GLOG_FATAL = 3;
+      23              : const int GLOG_ERROR = 2;
+      24              : const int GLOG_WARNING = 1;
+      25              : const int GLOG_INFO = 0;
+      26              : 
+      27              : class C10_API MessageLogger {
+      28              :  public:
+      29              :   MessageLogger(const char* file, int line, int severity);
+      30              :   ~MessageLogger();
+      31              :   // Return the stream associated with the logger object.
+      32              :   std::stringstream& stream() {
+      33              :     return stream_;
+      34              :   }
+      35              : 
+      36              :  private:
+      37              :   // When there is a fatal log, we simply abort.
+      38              :   void DealWithFatal() {
+      39              :     abort();
+      40              :   }
+      41              : 
+      42              :   const char* tag_;
+      43              :   std::stringstream stream_;
+      44              :   int severity_;
+      45              : };
+      46              : 
+      47              : // This class is used to explicitly ignore values in the conditional
+      48              : // logging macros.  This avoids compiler warnings like "value computed
+      49              : // is not used" and "statement has no effect".
+      50              : class C10_API LoggerVoidify {
+      51              :  public:
+      52              :   LoggerVoidify() = default;
+      53              :   // This has to be an operator with a precedence lower than << but
+      54              :   // higher than ?:
+      55              :   void operator&(const std::ostream& s) {}
+      56              : };
+      57              : 
+      58              : // Log a message and terminate.
+      59              : template <class T>
+      60              : void LogMessageFatal(const char* file, int line, const T& message) {
+      61              :   MessageLogger(file, line, GLOG_FATAL).stream() << message;
+      62              : }
+      63              : 
+      64              : // Helpers for TORCH_CHECK_NOTNULL(). Two are necessary to support both raw
+      65              : // pointers and smart pointers.
+      66              : template <typename T>
+      67              : T& CheckNotNullCommon(const char* file, int line, const char* names, T& t) {
+      68              :   if (t == nullptr) {
+      69              :     LogMessageFatal(file, line, std::string(names));
+      70              :   }
+      71              :   return t;
+      72              : }
+      73              : 
+      74              : template <typename T>
+      75              : T* CheckNotNull(const char* file, int line, const char* names, T* t) {
+      76              :   return CheckNotNullCommon(file, line, names, t);
+      77              : }
+      78              : 
+      79              : template <typename T>
+      80              : T& CheckNotNull(const char* file, int line, const char* names, T& t) {
+      81              :   return CheckNotNullCommon(file, line, names, t);
+      82              : }
+      83              : } // namespace c10
+      84              : 
+      85              : // ---------------------- Logging Macro definitions --------------------------
+      86              : 
+      87              : static_assert(
+      88              :     CAFFE2_LOG_THRESHOLD <= ::c10::GLOG_FATAL,
+      89              :     "CAFFE2_LOG_THRESHOLD should at most be GLOG_FATAL.");
+      90              : // If n is under the compile time caffe log threshold, The _CAFFE_LOG(n)
+      91              : // should not generate anything in optimized code.
+      92              : #define LOG(n)                                 \
+      93              :   if (::c10::GLOG_##n >= CAFFE2_LOG_THRESHOLD) \
+      94              :   ::c10::MessageLogger(__FILE__, __LINE__, ::c10::GLOG_##n).stream()
+      95              : #define VLOG(n)                   \
+      96              :   if (-n >= CAFFE2_LOG_THRESHOLD) \
+      97              :   ::c10::MessageLogger(__FILE__, __LINE__, -n).stream()
+      98              : 
+      99              : #define LOG_IF(n, condition)                                  \
+     100              :   if (::c10::GLOG_##n >= CAFFE2_LOG_THRESHOLD && (condition)) \
+     101              :   ::c10::MessageLogger(__FILE__, __LINE__, ::c10::GLOG_##n).stream()
+     102              : #define VLOG_IF(n, condition)                    \
+     103              :   if (-n >= CAFFE2_LOG_THRESHOLD && (condition)) \
+     104              :   ::c10::MessageLogger(__FILE__, __LINE__, -n).stream()
+     105              : 
+     106              : #define VLOG_IS_ON(verboselevel) (CAFFE2_LOG_THRESHOLD <= -(verboselevel))
+     107              : 
+     108              : // Log with source location information override (to be used in generic
+     109              : // warning/error handlers implemented as functions, not macros)
+     110              : #define LOG_AT_FILE_LINE(n, file, line)        \
+     111              :   if (::c10::GLOG_##n >= CAFFE2_LOG_THRESHOLD) \
+     112              :   ::c10::MessageLogger(file, line, ::c10::GLOG_##n).stream()
+     113              : 
+     114              : // Log only if condition is met.  Otherwise evaluates to void.
+     115              : #define FATAL_IF(condition)            \
+     116              :   condition ? (void)0                  \
+     117              :             : ::c10::LoggerVoidify() & \
+     118              :           ::c10::MessageLogger(__FILE__, __LINE__, ::c10::GLOG_FATAL).stream()
+     119              : 
+     120              : // Check for a given boolean condition.
+     121              : #define CHECK(condition) FATAL_IF(condition) << "Check failed: " #condition " "
+     122              : 
+     123              : #ifndef NDEBUG
+     124              : // Debug only version of CHECK
+     125              : #define DCHECK(condition) FATAL_IF(condition) << "Check failed: " #condition " "
+     126              : #define DLOG(severity) LOG(severity)
+     127              : #else // NDEBUG
+     128              : // Optimized version - generates no code.
+     129              : #define DCHECK(condition) \
+     130              :   while (false)           \
+     131              :   CHECK(condition)
+     132              : 
+     133              : #define DLOG(n)                   \
+     134              :   true ? (void)0                  \
+     135              :        : ::c10::LoggerVoidify() & \
+     136              :           ::c10::MessageLogger(__FILE__, __LINE__, ::c10::GLOG_##n).stream()
+     137              : #endif // NDEBUG
+     138              : 
+     139              : #define TORCH_CHECK_OP(val1, val2, op)                                        \
+     140              :   FATAL_IF(((val1)op(val2))) << "Check failed: " #val1 " " #op " " #val2 " (" \
+     141              :                              << (val1) << " vs. " << (val2) << ") "
+     142              : 
+     143              : // TORCH_CHECK_OP macro definitions
+     144              : #define TORCH_CHECK_EQ(val1, val2) TORCH_CHECK_OP(val1, val2, ==)
+     145              : #define TORCH_CHECK_NE(val1, val2) TORCH_CHECK_OP(val1, val2, !=)
+     146              : #define TORCH_CHECK_LE(val1, val2) TORCH_CHECK_OP(val1, val2, <=)
+     147              : #define TORCH_CHECK_LT(val1, val2) TORCH_CHECK_OP(val1, val2, <)
+     148              : #define TORCH_CHECK_GE(val1, val2) TORCH_CHECK_OP(val1, val2, >=)
+     149              : #define TORCH_CHECK_GT(val1, val2) TORCH_CHECK_OP(val1, val2, >)
+     150              : 
+     151              : #ifndef NDEBUG
+     152              : // Debug only versions of TORCH_CHECK_OP macros.
+     153              : #define TORCH_DCHECK_EQ(val1, val2) TORCH_CHECK_OP(val1, val2, ==)
+     154              : #define TORCH_DCHECK_NE(val1, val2) TORCH_CHECK_OP(val1, val2, !=)
+     155              : #define TORCH_DCHECK_LE(val1, val2) TORCH_CHECK_OP(val1, val2, <=)
+     156              : #define TORCH_DCHECK_LT(val1, val2) TORCH_CHECK_OP(val1, val2, <)
+     157              : #define TORCH_DCHECK_GE(val1, val2) TORCH_CHECK_OP(val1, val2, >=)
+     158              : #define TORCH_DCHECK_GT(val1, val2) TORCH_CHECK_OP(val1, val2, >)
+     159              : #else // !NDEBUG
+     160              : // These versions generate no code in optimized mode.
+     161              : #define TORCH_DCHECK_EQ(val1, val2) \
+     162              :   while (false)                     \
+     163              :   TORCH_CHECK_OP(val1, val2, ==)
+     164              : #define TORCH_DCHECK_NE(val1, val2) \
+     165              :   while (false)                     \
+     166              :   TORCH_CHECK_OP(val1, val2, !=)
+     167              : #define TORCH_DCHECK_LE(val1, val2) \
+     168              :   while (false)                     \
+     169              :   TORCH_CHECK_OP(val1, val2, <=)
+     170              : #define TORCH_DCHECK_LT(val1, val2) \
+     171              :   while (false)                     \
+     172              :   TORCH_CHECK_OP(val1, val2, <)
+     173              : #define TORCH_DCHECK_GE(val1, val2) \
+     174              :   while (false)                     \
+     175              :   TORCH_CHECK_OP(val1, val2, >=)
+     176              : #define TORCH_DCHECK_GT(val1, val2) \
+     177              :   while (false)                     \
+     178              :   TORCH_CHECK_OP(val1, val2, >)
+     179              : #endif // NDEBUG
+     180              : 
+     181              : // Check that a pointer is not null.
+     182              : #define TORCH_CHECK_NOTNULL(val) \
+     183              :   ::c10::CheckNotNull(           \
+     184              :       __FILE__, __LINE__, "Check failed: '" #val "' Must be non NULL", (val))
+     185              : 
+     186              : #ifndef NDEBUG
+     187              : // Debug only version of TORCH_CHECK_NOTNULL
+     188              : #define TORCH_DCHECK_NOTNULL(val) \
+     189              :   ::c10::CheckNotNull(            \
+     190              :       __FILE__, __LINE__, "Check failed: '" #val "' Must be non NULL", (val))
+     191              : #else // !NDEBUG
+     192              : // Optimized version - generates no code.
+     193              : #define TORCH_DCHECK_NOTNULL(val) \
+     194              :   while (false)                   \
+     195              :   TORCH_CHECK_NOTNULL(val)
+     196              : #endif // NDEBUG
+     197              : 
+     198              : // ---------------------- Support for std objects --------------------------
+     199              : // These are adapted from glog to support a limited set of logging capability
+     200              : // for STL objects.
+     201              : 
+     202              : namespace std {
+     203              : // Forward declare these two, and define them after all the container streams
+     204              : // operators so that we can recurse from pair -> container -> container -> pair
+     205              : // properly.
+     206              : template <class First, class Second>
+     207              : std::ostream& operator<<(std::ostream& out, const std::pair<First, Second>& p);
+     208              : } // namespace std
+     209              : 
+     210              : namespace c10 {
+     211              : template <class Iter>
+     212              : void PrintSequence(std::ostream& ss, Iter begin, Iter end);
+     213              : } // namespace c10
+     214              : 
+     215              : namespace std {
+     216              : #define INSTANTIATE_FOR_CONTAINER(container)               \
+     217              :   template <class... Types>                                \
+     218              :   std::ostream& operator<<(                                \
+     219              :       std::ostream& out, const container<Types...>& seq) { \
+     220              :     c10::PrintSequence(out, seq.begin(), seq.end());       \
+     221              :     return out;                                            \
+     222              :   }
+     223              : 
+     224            0 : INSTANTIATE_FOR_CONTAINER(std::vector)
+     225              : INSTANTIATE_FOR_CONTAINER(std::map)
+     226              : INSTANTIATE_FOR_CONTAINER(std::set)
+     227              : #undef INSTANTIATE_FOR_CONTAINER
+     228              : 
+     229              : template <class First, class Second>
+     230            0 : inline std::ostream& operator<<(
+     231              :     std::ostream& out,
+     232              :     const std::pair<First, Second>& p) {
+     233            0 :   out << '(' << p.first << ", " << p.second << ')';
+     234            0 :   return out;
+     235              : }
+     236              : 
+     237              : inline std::ostream& operator<<(std::ostream& out, const std::nullptr_t&) {
+     238              :   out << "(null)";
+     239              :   return out;
+     240              : }
+     241              : } // namespace std
+     242              : 
+     243              : namespace c10 {
+     244              : template <class Iter>
+     245            0 : inline void PrintSequence(std::ostream& out, Iter begin, Iter end) {
+     246              :   // Output at most 100 elements -- appropriate if used for logging.
+     247            0 :   for (int i = 0; begin != end && i < 100; ++i, ++begin) {
+     248            0 :     if (i > 0)
+     249            0 :       out << ' ';
+     250            0 :     out << *begin;
+     251              :   }
+     252            0 :   if (begin != end) {
+     253            0 :     out << " ...";
+     254              :   }
+     255            0 : }
+     256              : } // namespace c10
+     257              : 
+     258              : #endif // C10_UTIL_LOGGING_IS_NOT_GOOGLE_GLOG_H_
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/typeid.h.func-c.html b/html/libtorch/include/c10/util/typeid.h.func-c.html new file mode 100644 index 0000000..1d141c9 --- /dev/null +++ b/html/libtorch/include/c10/util/typeid.h.func-c.html @@ -0,0 +1,117 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/typeid.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - typeid.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.9 %1413
Test Date:2024-04-30 13:17:26Functions:100.0 %66
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN6caffe28TypeMeta12toScalarTypeEv842576
_ZNK6caffe28TypeMeta12isScalarTypeEv842576
_ZN6caffe28TypeMeta14fromScalarTypeEN3c1010ScalarTypeE91449062
_ZN6caffe28TypeMeta13_typeMetaDataIfEEtv91449130
_ZN6caffe28TypeMeta4MakeIfEES0_v91449130
_ZN6caffe28TypeMetaC2Et182898192
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/typeid.h.func.html b/html/libtorch/include/c10/util/typeid.h.func.html new file mode 100644 index 0000000..d69bfca --- /dev/null +++ b/html/libtorch/include/c10/util/typeid.h.func.html @@ -0,0 +1,117 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/typeid.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - typeid.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.9 %1413
Test Date:2024-04-30 13:17:26Functions:100.0 %66
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN6caffe28TypeMeta12toScalarTypeEv842576
_ZN6caffe28TypeMeta13_typeMetaDataIfEEtv91449130
_ZN6caffe28TypeMeta14fromScalarTypeEN3c1010ScalarTypeE91449062
_ZN6caffe28TypeMeta4MakeIfEES0_v91449130
_ZN6caffe28TypeMetaC2Et182898192
_ZNK6caffe28TypeMeta12isScalarTypeEv842576
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/c10/util/typeid.h.gcov.html b/html/libtorch/include/c10/util/typeid.h.gcov.html new file mode 100644 index 0000000..c349353 --- /dev/null +++ b/html/libtorch/include/c10/util/typeid.h.gcov.html @@ -0,0 +1,787 @@ + + + + + + + LCOV - coverage.info - libtorch/include/c10/util/typeid.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/c10/util - typeid.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.9 %1413
Test Date:2024-04-30 13:17:26Functions:100.0 %66
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <atomic>
+       4              : #include <cstdlib>
+       5              : #include <memory>
+       6              : #include <mutex>
+       7              : #include <type_traits>
+       8              : #include <vector>
+       9              : 
+      10              : #include <c10/macros/Macros.h>
+      11              : #include <c10/util/Exception.h>
+      12              : #include <c10/util/IdWrapper.h>
+      13              : #include <c10/util/TypeIndex.h>
+      14              : #include <c10/util/TypeTraits.h>
+      15              : 
+      16              : #include <c10/core/ScalarType.h>
+      17              : #include <c10/util/irange.h>
+      18              : 
+      19              : /*
+      20              :  * TypeIdentifier is a small type containing an id.
+      21              :  * Types must be registered using CAFFE_DECLARE_KNOWN_TYPE() (in their header)
+      22              :  * and CAFFE_DEFINE_KNOWN_TYPE() (in their .cpp file) for them to have a type
+      23              :  * id. If a type is registered, you can also create an object containing meta
+      24              :  * data like constructor, destructor, stringified name, ... about the type by
+      25              :  * calling TypeMeta::Make<T>. This returns a TypeMeta() object, which is
+      26              :  * basically just a pointer to the type information, so it's cheap to pass
+      27              :  * around.
+      28              :  */
+      29              : 
+      30              : // TODO: This file is still in the caffe2 namespace, despite living
+      31              : // in the ATen directory.  This is because the macro
+      32              : // CAFFE_KNOWN_TYPE (and CAFFE_DECLARE_KNOWN_TYPE) defines a template
+      33              : // specialization, which relies
+      34              : // on the namespace of TypeMeta matching the namespace where the macro is
+      35              : // called.  This requires us to fix all of the call-sites, which I want to do
+      36              : // later.  So the namespace is not fixed at the moment.
+      37              : 
+      38              : // Make at::Half a fundamental type.
+      39              : namespace c10 {
+      40              : namespace guts {
+      41              : template <>
+      42              : struct is_fundamental<at::Half> : std::true_type {};
+      43              : } // namespace guts
+      44              : } // namespace c10
+      45              : 
+      46              : namespace caffe2 {
+      47              : 
+      48              : /**
+      49              :  * A type id is a unique id for a given C++ type.
+      50              :  * You need to register your types using CAFFE_KNOWN_TYPE(MyType) to be able to
+      51              :  * use TypeIdentifier with custom types. This is for example used to store the
+      52              :  * dtype of tensors.
+      53              :  */
+      54              : class C10_API TypeIdentifier final
+      55              :     : public at::IdWrapper<TypeIdentifier, c10::util::type_index> {
+      56              :  public:
+      57              :   friend std::ostream& operator<<(std::ostream& stream, TypeIdentifier typeId);
+      58              :   friend constexpr bool operator<(TypeIdentifier lhs, TypeIdentifier rhs);
+      59              : 
+      60              :   /**
+      61              :    * Returns the unique id for the given type T. The id is unique for the type T
+      62              :    * in the sense that for any two different types, their ids are different; for
+      63              :    * the same type T, the id remains the same over different calls of the
+      64              :    * function. However, this is not guaranteed over different runs, as the id
+      65              :    * is generated during run-time. Do NOT serialize the id for storage.
+      66              :    */
+      67              :   template <typename T>
+      68              :   static C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA TypeIdentifier Get() noexcept {
+      69              :     return TypeIdentifier(c10::util::get_type_index<T>());
+      70              :   }
+      71              : 
+      72              :   static constexpr TypeIdentifier uninitialized() {
+      73              :     return TypeIdentifier(c10::util::type_index{0});
+      74              :   }
+      75              : 
+      76              :  private:
+      77              :   constexpr explicit TypeIdentifier(c10::util::type_index id) : IdWrapper(id) {}
+      78              : };
+      79              : 
+      80              : // Allow usage in std::map / std::set
+      81              : // TODO Disallow this and rather use std::unordered_map/set everywhere
+      82              : inline constexpr bool operator<(TypeIdentifier lhs, TypeIdentifier rhs) {
+      83              :   return lhs.underlyingId() < rhs.underlyingId();
+      84              : }
+      85              : 
+      86              : inline std::ostream& operator<<(
+      87              :     std::ostream& stream,
+      88              :     caffe2::TypeIdentifier typeId) {
+      89              :   return stream << typeId.underlyingId();
+      90              : }
+      91              : 
+      92              : } // namespace caffe2
+      93              : 
+      94              : namespace at {
+      95              : using DataType = caffe2::TypeIdentifier;
+      96              : }
+      97              : 
+      98              : C10_DEFINE_HASH_FOR_IDWRAPPER(caffe2::TypeIdentifier)
+      99              : 
+     100              : namespace caffe2 {
+     101              : 
+     102              : namespace detail {
+     103              : 
+     104              : // This struct holds the actual type information. There will be
+     105              : // one allocated per type. TypeMeta objects will then point to the struct
+     106              : // instance for the type they're configured for.
+     107              : struct TypeMetaData final {
+     108              :   using New = void*();
+     109              :   using PlacementNew = void(void*, size_t);
+     110              :   using Copy = void(const void*, void*, size_t);
+     111              :   using PlacementDelete = void(void*, size_t);
+     112              :   using Delete = void(void*);
+     113              : 
+     114              :   constexpr TypeMetaData() noexcept
+     115              :       : itemsize_(0),
+     116              :         new_(nullptr),
+     117              :         placementNew_(nullptr),
+     118              :         copy_(nullptr),
+     119              :         placementDelete_(nullptr),
+     120              :         delete_(nullptr),
+     121              :         id_(TypeIdentifier::uninitialized()),
+     122              :         name_("nullptr (uninitialized)") {}
+     123              : 
+     124              :   constexpr TypeMetaData(
+     125              :       size_t itemsize,
+     126              :       New* newFn,
+     127              :       PlacementNew* placementNew,
+     128              :       Copy* copy,
+     129              :       PlacementDelete* placementDelete,
+     130              :       Delete* deleteFn,
+     131              :       TypeIdentifier id,
+     132              :       c10::string_view name) noexcept
+     133              :       : itemsize_(itemsize),
+     134              :         new_(newFn),
+     135              :         placementNew_(placementNew),
+     136              :         copy_(copy),
+     137              :         placementDelete_(placementDelete),
+     138              :         delete_(deleteFn),
+     139              :         id_(id),
+     140              :         name_(name) {}
+     141              : 
+     142              :   size_t itemsize_;
+     143              :   New* new_;
+     144              :   PlacementNew* placementNew_;
+     145              :   Copy* copy_;
+     146              :   PlacementDelete* placementDelete_;
+     147              :   Delete* delete_;
+     148              :   TypeIdentifier id_;
+     149              :   c10::string_view name_;
+     150              : };
+     151              : 
+     152              : // Mechanism for throwing errors which can't be prevented at compile time
+     153              : // due to type erasure. E.g. somebody calling TypeMeta::copy() for
+     154              : // non-copyable type. Right now just throws exception but is implemented
+     155              : // in .cpp to manage dependencies
+     156              : [[noreturn]] C10_API void _ThrowRuntimeTypeLogicError(const std::string& msg);
+     157              : 
+     158              : /**
+     159              :  * Placement new function for the type.
+     160              :  */
+     161              : template <typename T>
+     162              : inline void _PlacementNew(void* ptr, size_t n) {
+     163              :   T* typed_ptr = static_cast<T*>(ptr);
+     164              :   for (const auto i : c10::irange(n)) {
+     165              :     new (typed_ptr + i) T;
+     166              :   }
+     167              : }
+     168              : 
+     169              : template <typename T>
+     170              : inline void _PlacementNewNotDefault(void* /*ptr*/, size_t /*n*/) {
+     171              :   _ThrowRuntimeTypeLogicError(
+     172              :       "Type " + std::string(c10::util::get_fully_qualified_type_name<T>()) +
+     173              :       " is not default-constructible.");
+     174              : }
+     175              : 
+     176              : template <
+     177              :     typename T,
+     178              :     std::enable_if_t<std::is_default_constructible<T>::value>* = nullptr>
+     179              : inline constexpr TypeMetaData::PlacementNew* _PickPlacementNew() {
+     180              :   return (c10::guts::is_fundamental<T>::value || std::is_pointer<T>::value)
+     181              :       ? nullptr
+     182              :       : &_PlacementNew<T>;
+     183              : }
+     184              : 
+     185              : template <
+     186              :     typename T,
+     187              :     std::enable_if_t<!std::is_default_constructible<T>::value>* = nullptr>
+     188              : inline constexpr TypeMetaData::PlacementNew* _PickPlacementNew() {
+     189              :   static_assert(
+     190              :       !c10::guts::is_fundamental<T>::value && !std::is_pointer<T>::value,
+     191              :       "this should have picked the other SFINAE case");
+     192              :   return &_PlacementNewNotDefault<T>;
+     193              : }
+     194              : 
+     195              : template <typename T>
+     196              : inline void* _New() {
+     197              :   return new T;
+     198              : }
+     199              : 
+     200              : template <typename T>
+     201              : inline void* _NewNotDefault() {
+     202              :   _ThrowRuntimeTypeLogicError(
+     203              :       "Type " + std::string(c10::util::get_fully_qualified_type_name<T>()) +
+     204              :       " is not default-constructible.");
+     205              : }
+     206              : 
+     207              : template <
+     208              :     typename T,
+     209              :     std::enable_if_t<std::is_default_constructible<T>::value>* = nullptr>
+     210              : inline constexpr TypeMetaData::New* _PickNew() {
+     211              :   return &_New<T>;
+     212              : }
+     213              : 
+     214              : template <
+     215              :     typename T,
+     216              :     std::enable_if_t<!std::is_default_constructible<T>::value>* = nullptr>
+     217              : inline constexpr TypeMetaData::New* _PickNew() {
+     218              :   return &_NewNotDefault<T>;
+     219              : }
+     220              : 
+     221              : /**
+     222              :  * Typed copy function for classes.
+     223              :  */
+     224              : template <typename T>
+     225              : inline void _Copy(const void* src, void* dst, size_t n) {
+     226              :   const T* typed_src = static_cast<const T*>(src);
+     227              :   T* typed_dst = static_cast<T*>(dst);
+     228              :   for (const auto i : c10::irange(n)) {
+     229              :     typed_dst[i] = typed_src[i];
+     230              :   }
+     231              : }
+     232              : 
+     233              : /**
+     234              :  * A placeholder function for types that do not allow assignment.
+     235              :  */
+     236              : template <typename T>
+     237              : inline void _CopyNotAllowed(const void* /*src*/, void* /*dst*/, size_t /*n*/) {
+     238              :   _ThrowRuntimeTypeLogicError(
+     239              :       "Type " + std::string(c10::util::get_fully_qualified_type_name<T>()) +
+     240              :       " does not allow assignment.");
+     241              : }
+     242              : 
+     243              : template <
+     244              :     typename T,
+     245              :     std::enable_if_t<std::is_copy_assignable<T>::value>* = nullptr>
+     246              : inline constexpr TypeMetaData::Copy* _PickCopy() {
+     247              :   return (c10::guts::is_fundamental<T>::value || std::is_pointer<T>::value)
+     248              :       ? nullptr
+     249              :       : &_Copy<T>;
+     250              : }
+     251              : 
+     252              : template <
+     253              :     typename T,
+     254              :     std::enable_if_t<!std::is_copy_assignable<T>::value>* = nullptr>
+     255              : inline constexpr TypeMetaData::Copy* _PickCopy() {
+     256              :   static_assert(
+     257              :       !c10::guts::is_fundamental<T>::value && !std::is_pointer<T>::value,
+     258              :       "this should have picked the other SFINAE case");
+     259              :   return &_CopyNotAllowed<T>;
+     260              : }
+     261              : 
+     262              : /**
+     263              :  * Destructor for non-fundamental types.
+     264              :  */
+     265              : template <typename T>
+     266              : inline void _PlacementDelete(void* ptr, size_t n) {
+     267              :   T* typed_ptr = static_cast<T*>(ptr);
+     268              :   for (const auto i : c10::irange(n)) {
+     269              :     typed_ptr[i].~T();
+     270              :   }
+     271              : }
+     272              : 
+     273              : template <typename T>
+     274              : inline constexpr TypeMetaData::PlacementDelete* _PickPlacementDelete() {
+     275              :   return (c10::guts::is_fundamental<T>::value || std::is_pointer<T>::value)
+     276              :       ? nullptr
+     277              :       : &_PlacementDelete<T>;
+     278              : }
+     279              : 
+     280              : template <typename T>
+     281              : inline void _Delete(void* ptr) {
+     282              :   T* typed_ptr = static_cast<T*>(ptr);
+     283              :   delete typed_ptr;
+     284              : }
+     285              : 
+     286              : template <class T>
+     287              : inline constexpr TypeMetaData::Delete* _PickDelete() noexcept {
+     288              :   return &_Delete<T>;
+     289              : }
+     290              : 
+     291              : class _Uninitialized final {};
+     292              : 
+     293              : } // namespace detail
+     294              : 
+     295              : //
+     296              : // note: this is outside TypeMeta bc gcc seems to have trouble
+     297              : // with scalarTypeItemSizes as a constexpr static member used by
+     298              : // a public inline instance method
+     299              : //
+     300              : 
+     301              : // item sizes for TypeMeta::itemsize() fast path
+     302              : static constexpr uint8_t scalarTypeItemSizes[NumScalarTypes] = {
+     303              : #define SCALAR_TYPE_SIZE(T, name) sizeof(T),
+     304              :     AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS(SCALAR_TYPE_SIZE)
+     305              : #undef SCALAR_TYPE_SIZE
+     306              :         0, // Undefined
+     307              : };
+     308              : 
+     309              : /**
+     310              :  * TypeMeta is a thin class that allows us to store the type of a container such
+     311              :  * as a blob, or the data type of a tensor, with a unique run-time id. It also
+     312              :  * stores some additional data such as the item size and the name of the type
+     313              :  * for run-time inspection.
+     314              :  */
+     315              : class C10_API TypeMeta final {
+     316              :  public:
+     317              :   using New = detail::TypeMetaData::New;
+     318              :   using PlacementNew = detail::TypeMetaData::PlacementNew;
+     319              :   using Copy = detail::TypeMetaData::Copy;
+     320              :   using PlacementDelete = detail::TypeMetaData::PlacementDelete;
+     321              :   using Delete = detail::TypeMetaData::Delete;
+     322              : 
+     323              :   /** Create a dummy TypeMeta object. To create a TypeMeta object for a specific
+     324              :    * type, use TypeMeta::Make<T>().
+     325              :    */
+     326              :   TypeMeta() noexcept;
+     327              : 
+     328              :   /**
+     329              :    * Copy constructor.
+     330              :    */
+     331              :   TypeMeta(const TypeMeta& src) noexcept = default;
+     332              : 
+     333              :   /**
+     334              :    * Assignment operators.
+     335              :    */
+     336              :   TypeMeta& operator=(const TypeMeta& src) noexcept = default;
+     337              : 
+     338              :   TypeMeta(TypeMeta&& rhs) noexcept = default;
+     339              : 
+     340              :   inline TypeMeta& operator=(ScalarType scalar_type) noexcept {
+     341              :     index_ = static_cast<uint16_t>(scalar_type);
+     342              :     return *this;
+     343              :   }
+     344              : 
+     345              :  private:
+     346              :   // TypeMeta can only be created by Make, making sure that we do not
+     347              :   // create incorrectly mixed up TypeMeta objects.
+     348    182898192 :   explicit TypeMeta(const uint16_t index) noexcept : index_(index) {}
+     349              : 
+     350              :  public:
+     351              :   /**
+     352              :    * Returns the type id.
+     353              :    */
+     354              :   TypeIdentifier id() const noexcept {
+     355              :     return data().id_;
+     356              :   }
+     357              :   /**
+     358              :    * true if we represent some ScalarType type
+     359              :    */
+     360       842576 :   inline bool isScalarType() const noexcept {
+     361       842576 :     return index_ < NumScalarTypes;
+     362              :   }
+     363              :   /**
+     364              :    * true if we represent ScalarType scalar_type
+     365              :    */
+     366              :   inline bool isScalarType(ScalarType scalar_type) const noexcept {
+     367              :     return index_ == static_cast<uint16_t>(scalar_type);
+     368              :   }
+     369              :   /**
+     370              :    * Returns the size of the item.
+     371              :    */
+     372              :   inline size_t itemsize() const noexcept {
+     373              :     if (C10_LIKELY(isScalarType())) {
+     374              :       return scalarTypeItemSizes[index_];
+     375              :     }
+     376              :     return data().itemsize_;
+     377              :   }
+     378              :   /**
+     379              :    * Returns the new function pointer for individual items.
+     380              :    */
+     381              :   New* newFn() const noexcept {
+     382              :     return data().new_;
+     383              :   }
+     384              :   /**
+     385              :    * Returns the placement new function pointer for individual items.
+     386              :    */
+     387              :   PlacementNew* placementNew() const noexcept {
+     388              :     return data().placementNew_;
+     389              :   }
+     390              :   /**
+     391              :    * Returns the typed copy function pointer for individual iterms.
+     392              :    */
+     393              :   Copy* copy() const noexcept {
+     394              :     return data().copy_;
+     395              :   }
+     396              :   /**
+     397              :    * Returns the destructor function pointer for individual items.
+     398              :    */
+     399              :   PlacementDelete* placementDelete() const noexcept {
+     400              :     return data().placementDelete_;
+     401              :   }
+     402              :   Delete* deleteFn() const noexcept {
+     403              :     return data().delete_;
+     404              :   }
+     405              :   /**
+     406              :    * Returns a printable name for the type.
+     407              :    */
+     408              :   c10::string_view name() const noexcept {
+     409              :     return data().name_;
+     410              :   }
+     411              : 
+     412              :   friend bool operator==(const TypeMeta& lhs, const TypeMeta& rhs) noexcept;
+     413              : 
+     414              :   template <typename T>
+     415              :   bool Match() const noexcept {
+     416              :     return (*this == Make<T>());
+     417              :   }
+     418              : 
+     419              :   // Below are static functions that can be called by passing a specific type.
+     420              : 
+     421              :   template <class T>
+     422              :   static C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA TypeIdentifier Id() noexcept {
+     423              :     return TypeIdentifier::Get<T>();
+     424              :   }
+     425              : 
+     426              :   template <class T>
+     427              :   static c10::string_view TypeName() noexcept {
+     428              :     return c10::util::get_fully_qualified_type_name<T>();
+     429              :   }
+     430              : 
+     431              :   template <class T>
+     432              :   static constexpr size_t ItemSize() noexcept {
+     433              :     return sizeof(T);
+     434              :   }
+     435              : 
+     436              :   /**
+     437              :    * Returns a TypeMeta object that corresponds to the typename T.
+     438              :    */
+     439              :   template <typename T>
+     440     91449130 :   static TypeMeta Make() {
+     441              :     // The instance pointed to is declared here, but defined in a .cpp file.
+     442              :     // We need to silence the compiler warning about using an undefined
+     443              :     // variable template. '-Wpragmas' and '-Wunknown-warning-option' has to be
+     444              :     // disabled for compilers that don't know '-Wundefined-var-template' and
+     445              :     // would error at our attempt to disable it.
+     446              : #ifndef _MSC_VER
+     447              : #pragma GCC diagnostic push
+     448              : #pragma GCC diagnostic ignored "-Wpragmas"
+     449              : #pragma GCC diagnostic ignored "-Wunknown-warning-option"
+     450              : #pragma GCC diagnostic ignored "-Wundefined-var-template"
+     451              : #endif
+     452     91449130 :     return TypeMeta(_typeMetaData<T>());
+     453              : #ifndef _MSC_VER
+     454              : #pragma GCC diagnostic pop
+     455              : #endif
+     456              :   }
+     457              : 
+     458              :   /**
+     459              :    * convert ScalarType enum values to TypeMeta handles
+     460              :    */
+     461     91449062 :   static inline caffe2::TypeMeta fromScalarType(ScalarType scalar_type) {
+     462     91449062 :     const auto index = static_cast<uint16_t>(scalar_type);
+     463     91449062 :     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(
+     464              :         index < NumScalarTypes,
+     465              :         "Unrecognized Scalartype ",
+     466              :         scalar_type,
+     467              :         " (please report this error)");
+     468     91449062 :     return TypeMeta(index);
+     469              :   }
+     470              : 
+     471              :   /**
+     472              :    * convert TypeMeta handles to ScalarType enum values
+     473              :    */
+     474       842576 :   inline ScalarType toScalarType() {
+     475       842576 :     if (C10_LIKELY(isScalarType())) {
+     476       842576 :       return static_cast<ScalarType>(index_);
+     477              :     }
+     478            0 :     error_unsupported_typemeta(*this);
+     479              :   }
+     480              : 
+     481              :  private:
+     482              :   [[noreturn]] static void error_unsupported_typemeta(caffe2::TypeMeta dtype);
+     483              : 
+     484              :   // hard limit number of registered types
+     485              :   // note: constexpr provokes Windows compilation error "member may not be
+     486              :   // initialized" static constexpr size_t MaxTypeIndex = 32;
+     487              :   //
+     488              : #if defined C10_MOBILE
+     489              : // The reason for this not to be UINT8_MAX is that the array
+     490              : // initialization takes space which is proportional to the size of the array.
+     491              : // The compiler seems to add code (or data padding) to initialize the array with
+     492              : // empty elements. Please see
+     493              : // https://github.com/pytorch/pytorch/pull/51881 for details.
+     494              : //
+     495              : #define MaxTypeIndex                                                           \
+     496              :   (NumScalarTypes + 15 /* number of CAFFE_DEFINE_KNOWN_TYPE in typeid.cpp */ + \
+     497              :    1 /* 1 more for caffe2 tensor */)
+     498              : #else
+     499              : #define MaxTypeIndex UINT8_MAX
+     500              : #endif
+     501              : 
+     502              :   // Protects type metadata allocation.
+     503              :   // NOLINTNEXTLINE(facebook-hte-NonPodStaticDeclaration)
+     504              :   static std::mutex& getTypeMetaDatasLock();
+     505              :   static uint16_t nextTypeIndex;
+     506              : 
+     507              :   static detail::TypeMetaData* typeMetaDatas();
+     508              : 
+     509              :   static uint16_t existingMetaDataIndexForType(TypeIdentifier identifier);
+     510              : 
+     511              :  public:
+     512              : #ifdef __CUDACC__
+     513              :   // NOTE [ TypeIdentifier::Get nvcc/clang discrepancy]
+     514              :   // nvcc and clang do not produce identical results for
+     515              :   // TypeIdentifier::Get, because TypeIdentifier::Get relies on
+     516              :   // __PRETTY_FUNCTION__ and they don't agree on the canonical names
+     517              :   // of types (e.g., nvcc normalizes to `short unsigned int`, but clang
+     518              :   // calls it `unsigned short`). Hide the implementation of this function
+     519              :   // from nvcc so that we always use clang (or whatever host C++ compiler)
+     520              :   // for TypeIdentifier::Get.
+     521              :   template <class T>
+     522              :   C10_EXPORT static uint16_t addTypeMetaData();
+     523              : #else
+     524              :   template <class T>
+     525              :   C10_EXPORT static uint16_t addTypeMetaData() {
+     526              :     const auto identifier = TypeIdentifier::Get<T>();
+     527              :     // Need to hold this for the rest of the function, protecting:
+     528              :     // 1) existingMetaDataIndexForType()
+     529              :     // 2) nextTypeIndex++
+     530              :     // 3) the write into typeMetaDatas()
+     531              :     std::lock_guard<std::mutex> lock(getTypeMetaDatasLock());
+     532              :     // It may exist already if added in a different dynamic shared library.
+     533              :     const uint16_t existing_index = existingMetaDataIndexForType(identifier);
+     534              :     if (existing_index != MaxTypeIndex) {
+     535              :       return existing_index;
+     536              :     }
+     537              :     const uint16_t index = nextTypeIndex++;
+     538              :     TORCH_CHECK(
+     539              :         index <= MaxTypeIndex,
+     540              :         "Maximum number of CAFFE_KNOWN_TYPE declarations has been exceeded. ",
+     541              :         "Please report this issue.");
+     542              :     typeMetaDatas()[index] = detail::TypeMetaData{
+     543              :         sizeof(T),
+     544              :         detail::_PickNew<T>(),
+     545              :         detail::_PickPlacementNew<T>(),
+     546              :         detail::_PickCopy<T>(),
+     547              :         detail::_PickPlacementDelete<T>(),
+     548              :         detail::_PickDelete<T>(),
+     549              :         identifier,
+     550              :         c10::util::get_fully_qualified_type_name<T>()};
+     551              :     return index;
+     552              :   }
+     553              : #endif
+     554              : 
+     555              :  private:
+     556              :   // specializations return indexes into typeMetaDataInstances()
+     557              :   template <class T>
+     558              :   C10_API static uint16_t _typeMetaData() noexcept;
+     559              : 
+     560              :   //
+     561              :   // TypeMeta just wraps this index
+     562              :   //
+     563              : 
+     564              :   uint16_t index_;
+     565              : 
+     566              :   inline const detail::TypeMetaData& data() const {
+     567              :     return typeMetaDatas()[index_];
+     568              :   }
+     569              : };
+     570              : 
+     571              : // specializations of TypeMeta::_typeMetaData for ScalarType types
+     572              : 
+     573              : #define DEFINE_SCALAR_METADATA_INSTANCE(T, name)             \
+     574              :   template <>                                                \
+     575              :   constexpr uint16_t TypeMeta::_typeMetaData<T>() noexcept { \
+     576              :     return static_cast<uint16_t>(ScalarType::name);          \
+     577              :   }
+     578     91449130 : AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS(DEFINE_SCALAR_METADATA_INSTANCE)
+     579              : #undef DEFINE_SCALAR_METADATA_INSTANCE
+     580              : 
+     581              : template <>
+     582              : C10_EXPORT constexpr uint16_t TypeMeta::_typeMetaData<
+     583              :     detail::_Uninitialized>() noexcept {
+     584              :   return static_cast<uint16_t>(ScalarType::Undefined);
+     585              : }
+     586              : 
+     587              : inline TypeMeta::TypeMeta() noexcept
+     588              :     : index_(_typeMetaData<detail::_Uninitialized>()) {}
+     589              : 
+     590              : inline bool operator==(const TypeMeta& lhs, const TypeMeta& rhs) noexcept {
+     591              :   return (lhs.index_ == rhs.index_);
+     592              : }
+     593              : inline bool operator!=(const TypeMeta& lhs, const TypeMeta& rhs) noexcept {
+     594              :   return !operator==(lhs, rhs);
+     595              : }
+     596              : 
+     597              : inline std::ostream& operator<<(
+     598              :     std::ostream& stream,
+     599              :     caffe2::TypeMeta typeMeta) {
+     600              :   return stream << typeMeta.name();
+     601              : }
+     602              : 
+     603              : /**
+     604              :  * Register unique id for a type so it can be used in TypeMeta context, e.g. be
+     605              :  * used as a type for Blob or for Tensor elements.
+     606              :  *
+     607              :  * CAFFE_KNOWN_TYPE is deprecated; prefer CAFFE_DECLARE_KNOWN_TYPE and
+     608              :  * CAFFE_DEFINE_KNOWN_TYPE.
+     609              :  *
+     610              :  * CAFFE_KNOWN_TYPE does explicit instantiation of TypeIdentifier::Get<T>
+     611              :  * template function and thus needs to be put in a single translation unit (.cpp
+     612              :  * file) for a given type T. Other translation units that use type T as a type
+     613              :  * of the caffe2::Blob or element type of caffe2::Tensor need to depend on the
+     614              :  * translation unit that contains CAFFE_KNOWN_TYPE declaration via regular
+     615              :  * linkage dependencies.
+     616              :  *
+     617              :  * NOTE: the macro needs to be invoked in ::caffe2 namespace
+     618              :  */
+     619              : // Implementation note: in MSVC, we will need to prepend the C10_API
+     620              : // keyword in order to get things compiled properly. in Linux, gcc seems to
+     621              : // create attribute ignored error for explicit template instantiations, see
+     622              : //   http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0537r0.html
+     623              : //   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51930
+     624              : // and as a result, we define these two macros slightly differently.
+     625              : #if defined(_MSC_VER) || defined(__clang__)
+     626              : #define EXPORT_IF_NOT_GCC C10_EXPORT
+     627              : #else
+     628              : #define EXPORT_IF_NOT_GCC
+     629              : #endif
+     630              : 
+     631              : // CAFFE_KNOWN_TYPE is deprecated! Use CAFFE_DECLARE_KNOWN_TYPE and
+     632              : // CAFFE_DEFINE_KNOWN_TYPE instead.
+     633              : #define CAFFE_KNOWN_TYPE(T)                                          \
+     634              :   template uint16_t TypeMeta::addTypeMetaData<T>();                  \
+     635              :   template <>                                                        \
+     636              :   EXPORT_IF_NOT_GCC uint16_t TypeMeta::_typeMetaData<T>() noexcept { \
+     637              :     static const uint16_t index = addTypeMetaData<T>();              \
+     638              :     return index;                                                    \
+     639              :   }
+     640              : 
+     641              : #define CAFFE_DEFINE_KNOWN_TYPE(T, ident)                   \
+     642              :   template uint16_t TypeMeta::addTypeMetaData<T>();         \
+     643              :   namespace detail {                                        \
+     644              :   EXPORT_IF_NOT_GCC const uint16_t ident##_metadata_index = \
+     645              :       TypeMeta::addTypeMetaData<T>();                       \
+     646              :   } // namespace detail
+     647              : 
+     648              : // Unlike CAFFE_KNOWN_TYPE, CAFFE_DECLARE_KNOWN_TYPE avoids a function
+     649              : // call to access _typeMetaData in the common case.
+     650              : #define CAFFE_DECLARE_KNOWN_TYPE(T, ident)                 \
+     651              :   extern template uint16_t TypeMeta::addTypeMetaData<T>(); \
+     652              :   namespace detail {                                       \
+     653              :   extern C10_API const uint16_t ident##_metadata_index;    \
+     654              :   } /* namespace detail */                                 \
+     655              :   template <>                                              \
+     656              :   EXPORT_IF_NOT_GCC C10_ALWAYS_INLINE uint16_t             \
+     657              :   TypeMeta::_typeMetaData<T>() noexcept {                  \
+     658              :     return detail::ident##_metadata_index;                 \
+     659              :   }
+     660              : 
+     661              : #define CAFFE_KNOWN_TYPE_NOEXPORT(T)                    \
+     662              :   template <>                                           \
+     663              :   uint16_t TypeMeta::_typeMetaData<T>() noexcept {      \
+     664              :     static const uint16_t index = addTypeMetaData<T>(); \
+     665              :     return index;                                       \
+     666              :   }
+     667              : 
+     668              : CAFFE_DECLARE_KNOWN_TYPE(std::string, std_string)
+     669              : CAFFE_DECLARE_KNOWN_TYPE(uint16_t, uint16_t)
+     670              : CAFFE_DECLARE_KNOWN_TYPE(char, char)
+     671              : CAFFE_DECLARE_KNOWN_TYPE(std::unique_ptr<std::mutex>, std_unique_ptr_std_mutex)
+     672              : CAFFE_DECLARE_KNOWN_TYPE(
+     673              :     std::unique_ptr<std::atomic<bool>>,
+     674              :     std_unique_ptr_std_atomic_bool)
+     675              : CAFFE_DECLARE_KNOWN_TYPE(std::vector<int32_t>, std_vector_int32_t)
+     676              : CAFFE_DECLARE_KNOWN_TYPE(std::vector<int64_t>, std_vector_int64_t)
+     677              : CAFFE_DECLARE_KNOWN_TYPE(std::vector<unsigned long>, std_vector_unsigned_long)
+     678              : CAFFE_DECLARE_KNOWN_TYPE(bool*, bool_ptr)
+     679              : CAFFE_DECLARE_KNOWN_TYPE(char*, char_ptr)
+     680              : CAFFE_DECLARE_KNOWN_TYPE(int*, int_ptr)
+     681              : 
+     682              : // For some of the compilers, long is defined separately from int32_t and
+     683              : // int64_t. As a result we will need to actually define them separately.
+     684              : // It is recommended that one does NOT use long - use int32_t and int64_t
+     685              : // explicitly. Explicit long type annotation may go away in the future.
+     686              : // details: This hack works by defining a _guard_long_unique type, which is
+     687              : // long iff the compiler has a separate long type and is a dummy type otherwise.
+     688              : // we then allocate a type id to that _guard_long_unique. If the compiler has a
+     689              : // separate long type, this allocates a type id for long. Otherwise, it
+     690              : // allocates a type id for the dummy type, which doesn't matter.
+     691              : namespace detail {
+     692              : template <class T>
+     693              : class _guard_long_unique_dummy final {};
+     694              : template <class T>
+     695              : using _guard_long_unique = std::conditional_t<
+     696              :     std::is_same<long, int32_t>::value || std::is_same<long, int64_t>::value,
+     697              :     _guard_long_unique_dummy<T>,
+     698              :     T>;
+     699              : } // namespace detail
+     700              : 
+     701              : CAFFE_DECLARE_KNOWN_TYPE(
+     702              :     detail::_guard_long_unique<long>,
+     703              :     detail_guard_long_unique_long);
+     704              : CAFFE_DECLARE_KNOWN_TYPE(
+     705              :     detail::_guard_long_unique<std::vector<long>>,
+     706              :     detail_guard_long_unique_std_vector_long)
+     707              : 
+     708              : CAFFE_DECLARE_KNOWN_TYPE(float*, float_ptr)
+     709              : CAFFE_DECLARE_KNOWN_TYPE(at::Half*, at_Half)
+     710              : 
+     711              : } // namespace caffe2
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/api/include/torch/detail/TensorDataContainer.h.func-c.html b/html/libtorch/include/torch/csrc/api/include/torch/detail/TensorDataContainer.h.func-c.html new file mode 100644 index 0000000..d810bd9 --- /dev/null +++ b/html/libtorch/include/torch/csrc/api/include/torch/detail/TensorDataContainer.h.func-c.html @@ -0,0 +1,180 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/api/include/torch/detail/TensorDataContainer.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/api/include/torch/detail - TensorDataContainer.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:46.0 %5023
Test Date:2024-04-30 13:17:26Functions:84.6 %1311
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK5torch6detail19TensorDataContainer11fill_tensorERN2at6TensorE0
_ZZNK5torch6detail19TensorDataContainer17convert_to_tensorEN3c1013TensorOptionsEENKUlvE_clEv0
_ZN5torch6detail21compute_desired_dtypeEN3c1010ScalarTypeE22824
_ZN5torch6detail19TensorDataContainerC2EN3c108ArrayRefIdEE401318
_ZN5torch6detail19TensorDataContainerC2EN3c108ArrayRefIfEE274
_ZN5torch6detail19TensorDataContainerC2EN3c108ArrayRefIiEE5026
_ZN5torch6detail19TensorDataContainerC2EN3c108ArrayRefIdEE396018
_ZN5torch6detail19TensorDataContainerC2ERKSt6vectorIdSaIdEE401318
_ZN5torch6detail19TensorDataContainerC2ERKSt6vectorIfSaIfEE274
_ZN5torch6detail19TensorDataContainerC2ERKSt6vectorIiSaIiEE5026
_ZN5torch6detail19TensorDataContainerC2ERKSt6vectorIdSaIdEE396018
_ZNK5torch6detail19TensorDataContainer12is_init_listEv401318
_ZNK5torch6detail19TensorDataContainer17convert_to_tensorEN3c1013TensorOptionsE401318
_ZNK5torch6detail19TensorDataContainer9is_scalarEv401318
_ZNK5torch6detail19TensorDataContainer9is_tensorEv401318
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/api/include/torch/detail/TensorDataContainer.h.func.html b/html/libtorch/include/torch/csrc/api/include/torch/detail/TensorDataContainer.h.func.html new file mode 100644 index 0000000..e538329 --- /dev/null +++ b/html/libtorch/include/torch/csrc/api/include/torch/detail/TensorDataContainer.h.func.html @@ -0,0 +1,180 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/api/include/torch/detail/TensorDataContainer.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/api/include/torch/detail - TensorDataContainer.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:46.0 %5023
Test Date:2024-04-30 13:17:26Functions:84.6 %1311
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5torch6detail19TensorDataContainerC2EN3c108ArrayRefIdEE401318
_ZN5torch6detail19TensorDataContainerC2EN3c108ArrayRefIdEE396018
_ZN5torch6detail19TensorDataContainerC2EN3c108ArrayRefIfEE274
_ZN5torch6detail19TensorDataContainerC2EN3c108ArrayRefIiEE5026
_ZN5torch6detail19TensorDataContainerC2ERKSt6vectorIdSaIdEE401318
_ZN5torch6detail19TensorDataContainerC2ERKSt6vectorIdSaIdEE396018
_ZN5torch6detail19TensorDataContainerC2ERKSt6vectorIfSaIfEE274
_ZN5torch6detail19TensorDataContainerC2ERKSt6vectorIiSaIiEE5026
_ZN5torch6detail21compute_desired_dtypeEN3c1010ScalarTypeE22824
_ZNK5torch6detail19TensorDataContainer11fill_tensorERN2at6TensorE0
_ZNK5torch6detail19TensorDataContainer12is_init_listEv401318
_ZNK5torch6detail19TensorDataContainer17convert_to_tensorEN3c1013TensorOptionsE401318
_ZNK5torch6detail19TensorDataContainer9is_scalarEv401318
_ZNK5torch6detail19TensorDataContainer9is_tensorEv401318
_ZZNK5torch6detail19TensorDataContainer17convert_to_tensorEN3c1013TensorOptionsEENKUlvE_clEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/api/include/torch/detail/TensorDataContainer.h.gcov.html b/html/libtorch/include/torch/csrc/api/include/torch/detail/TensorDataContainer.h.gcov.html new file mode 100644 index 0000000..458cb58 --- /dev/null +++ b/html/libtorch/include/torch/csrc/api/include/torch/detail/TensorDataContainer.h.gcov.html @@ -0,0 +1,448 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/api/include/torch/detail/TensorDataContainer.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/api/include/torch/detail - TensorDataContainer.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:46.0 %5023
Test Date:2024-04-30 13:17:26Functions:84.6 %1311
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <ATen/Dispatch.h>
+       4              : #include <ATen/ScalarOps.h>
+       5              : #include <ATen/core/Tensor.h>
+       6              : #include <ATen/core/grad_mode.h>
+       7              : 
+       8              : #include <c10/util/irange.h>
+       9              : 
+      10              : #ifndef AT_PER_OPERATOR_HEADERS
+      11              : #include <ATen/Functions.h>
+      12              : #else
+      13              : #include <ATen/ops/empty.h>
+      14              : #include <ATen/ops/tensor.h>
+      15              : #endif
+      16              : 
+      17              : #include <initializer_list>
+      18              : 
+      19              : namespace torch {
+      20              : 
+      21              : namespace detail {
+      22              : 
+      23              : enum class TensorDataContainerType { Scalar, InitList, Tensor };
+      24              : 
+      25              : struct TensorDataContainer;
+      26              : 
+      27              : inline std::ostream& operator<<(
+      28              :     std::ostream& stream,
+      29              :     const TensorDataContainer& tensor_data_container);
+      30              : 
+      31              : // FIXME: There is no `operator<<` overload for `at::kBFloat16` type,
+      32              : // and we need to convert it to `float` type using `operator float()` function
+      33              : // defined in `c10/util/BFloat16.h`.
+      34              : // Tracking issue: https://github.com/pytorch/pytorch/issues/28845
+      35              : inline std::ostream& operator<<(std::ostream& stream, c10::BFloat16 value) {
+      36              :   stream << static_cast<float>(value);
+      37              :   return stream;
+      38              : }
+      39              : 
+      40        22824 : inline c10::ScalarType compute_desired_dtype(c10::ScalarType scalar_type) {
+      41        22824 :   if (scalar_type == at::kInt || scalar_type == at::kLong) {
+      42              :     // C++ `torch::tensor` with an integer type or an `at::ArrayRef` /
+      43              :     // `std::vector` / (nested) braced-init-list of integer types always
+      44              :     // produces a tensor of dtype `at::kLong` (aka. int64_t), matching Python
+      45              :     // `torch.tensor` behavior.
+      46         2018 :     return at::kLong;
+      47        20806 :   } else if (scalar_type == at::kFloat || scalar_type == at::kDouble) {
+      48              :     // C++ `torch::tensor` with a floating-point type or an `at::ArrayRef` /
+      49              :     // `std::vector` / (nested) braced-init-list of floating-point types always
+      50              :     // produces a tensor of dtype `torch::get_default_dtype()`, matching Python
+      51              :     // `torch.tensor` behavior.
+      52        20806 :     return at::typeMetaToScalarType(at::get_default_dtype());
+      53              :   } else {
+      54            0 :     return scalar_type;
+      55              :   }
+      56              : }
+      57              : 
+      58              : // We use `TensorDataContainer` to support converting the following data
+      59              : // container types into the equivalent Tensor:
+      60              : //
+      61              : // 1. Arbitrarily nested braced-init-list (e.g. `{{1, 2}, {3, 4}}`).
+      62              : // 2. `at::ArrayRef` of supported tensor data types.
+      63              : // 3. `std::vector` of supported tensor data types.
+      64              : //
+      65              : // At any time, a `TensorDataContainer` object represents one of the following:
+      66              : //
+      67              : // 1. A scalar with value `scalar()` and type `scalar_type()`.
+      68              : // 2. A Tensor represented in `std::initializer_list<TensorDataContainer>` form,
+      69              : //    with value `init_list()`, Tensor scalar type `scalar_type()`, and Tensor
+      70              : //    sizes `sizes()`.
+      71              : // 3. A Tensor represented in `at::Tensor` form, with value `tensor()`, scalar
+      72              : // type `scalar_type()`,
+      73              : //    and Tensor sizes `sizes()`.
+      74              : //
+      75              : // All the infrastructure here is mostly to support converting an arbitrarily
+      76              : // nested braced-init-list to the equivalent Tensor successfully. Consider the
+      77              : // following example:
+      78              : //
+      79              : // `torch::tensor({{1}, {2}})`
+      80              : //
+      81              : // this will call into the `torch::tensor` function:
+      82              : //
+      83              : // `at::Tensor tensor(detail::TensorDataContainer tensor_data_container, const
+      84              : // at::TensorOptions& options = {})`
+      85              : //
+      86              : // the compiler will first try to convert `{{1}, {2}}` to `TensorDataContainer`
+      87              : // type:
+      88              : //
+      89              : // `TensorDataContainer({{1}, {2}})`
+      90              : //
+      91              : // which matches to the
+      92              : // `TensorDataContainer(std::initializer_list<TensorDataContainer>)`
+      93              : // constructor, and in an attempt to convert `{1}` and `{2}` to
+      94              : // `TensorDataContainer`, it calls the following:
+      95              : //
+      96              : // `TensorDataContainer({1})`  (same call path happens for `{2}`, and we'll just
+      97              : // focus on `{1}` here)
+      98              : //
+      99              : // At this point, theoretically there are two plausible ways for `{1}` to be
+     100              : // matched to one of the constructors of `TensorDataContainer`:
+     101              : //
+     102              : // 1. It can be a list-initialization of a scalar value, thus matching
+     103              : // `TensorDataContainer(int value)`.
+     104              : // 2. It can be converted to `std::initializer_list<TensorDataContainer>`, thus
+     105              : // matching
+     106              : //    `TensorDataContainer(std::initializer_list<TensorDataContainer>)`.
+     107              : //
+     108              : // How does the compiler decide which one to choose? According to
+     109              : // `https://en.cppreference.com/w/cpp/language/list_initialization`,
+     110              : // braced-init-list always prefers the constructor that takes
+     111              : // `std::initializer_list`. Hence we happily move forward with constructor #2,
+     112              : // and it calls the following:
+     113              : //
+     114              : // `TensorDataContainer(1)`
+     115              : //
+     116              : // Now it matches `TensorDataContainer(int value)`, which stores `1` as a scalar
+     117              : // value. All is good.
+     118              : struct TensorDataContainer {
+     119              :   // NOTE: For tensors with zero-size dimensions (e.g. `torch::tensor({{},
+     120              :   // {}})`), the innermost empty braced-init-list `{}` matches the default
+     121              :   // constructor of the innermost `TensorDataContainer`.
+     122              :   // NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init)
+     123              :   TensorDataContainer()
+     124              :       : sizes_({0}),
+     125              :         // NOTE: In Python, the dtype of tensors with zero-size dimensions (e.g.
+     126              :         // `torch.tensor([[], []])`) depends on the value of
+     127              :         // `torch.get_default_dtype()`, and we should do the same for the C++
+     128              :         // equivalent.
+     129              :         scalar_type_(at::typeMetaToScalarType(at::get_default_dtype())),
+     130              :         type_(TensorDataContainerType::InitList) {}
+     131              : #define TENSOR(T, S)                            \
+     132              :   TensorDataContainer(T value)                  \
+     133              :       : sizes_(),                               \
+     134              :         scalar_type_(at::k##S),                 \
+     135              :         type_(TensorDataContainerType::Scalar), \
+     136              :         scalar_(value) {}
+     137              :   // NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init)
+     138              :   AT_FORALL_SCALAR_TYPES_AND3(Bool, Half, BFloat16, TENSOR)
+     139              :   // NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init)
+     140              :   AT_FORALL_COMPLEX_TYPES(TENSOR)
+     141              : #undef TENSOR
+     142              :   // NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init)
+     143              :   TensorDataContainer(std::initializer_list<TensorDataContainer> init_list)
+     144              :       : sizes_(),
+     145              :         scalar_type_(init_list.begin()->scalar_type()),
+     146              :         type_(TensorDataContainerType::InitList),
+     147              :         init_list_(init_list) {
+     148              :     const TensorDataContainer& first_elem = *(init_list.begin());
+     149              :     for (const auto& elem : init_list) {
+     150              :       TORCH_CHECK(
+     151              :           elem.sizes() == first_elem.sizes(),
+     152              :           "Expected all sub-lists to have sizes: ",
+     153              :           first_elem.sizes(),
+     154              :           " (e.g. ",
+     155              :           first_elem,
+     156              :           "), ",
+     157              :           "but got sub-list ",
+     158              :           elem,
+     159              :           " with sizes: ",
+     160              :           elem.sizes());
+     161              :       TORCH_CHECK(
+     162              :           elem.scalar_type() == first_elem.scalar_type(),
+     163              :           "Expected all elements of the tensor to have the same scalar type: ",
+     164              :           first_elem.scalar_type(),
+     165              :           ", but got element of scalar type: ",
+     166              :           elem.scalar_type());
+     167              :     }
+     168              :     sizes_.reserve(first_elem.sizes().size() + 1);
+     169              :     sizes_.push_back(init_list.size());
+     170              :     sizes_.insert(
+     171              :         sizes_.end(), first_elem.sizes().begin(), first_elem.sizes().end());
+     172              :   }
+     173              : 
+     174              : #define TENSOR(T, S)                                                          \
+     175              :   TensorDataContainer(at::ArrayRef<T> values)                                 \
+     176              :       : sizes_({(int64_t)values.size()}),                                     \
+     177              :         scalar_type_(at::k##S),                                               \
+     178              :         type_(TensorDataContainerType::Tensor) {                              \
+     179              :     at::AutoDispatchBelowAutograd mode;                                       \
+     180              :     if (scalar_type_ == at::kBool) {                                          \
+     181              :       tensor_ = at::tensor(values, at::TensorOptions().device(at::kCPU));     \
+     182              :     } else {                                                                  \
+     183              :       tensor_ = at::tensor(values, at::dtype(scalar_type_).device(at::kCPU)); \
+     184              :     }                                                                         \
+     185              :   }
+     186              :   // NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init)
+     187       802636 :   AT_FORALL_SCALAR_TYPES_AND3(Bool, Half, BFloat16, TENSOR)
+     188              :   // NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init)
+     189              :   AT_FORALL_COMPLEX_TYPES(TENSOR)
+     190              : #undef TENSOR
+     191              : 
+     192              :   // NOTE: We need to handle `std::vector` explicitly instead of relying on an
+     193              :   // implicit conversion to `at::ArrayRef`, otherwise the following error can be
+     194              :   // thrown when calling `torch::tensor(std::vector<int>({1, 2}))`:
+     195              :   // ```
+     196              :   // error: no matching function for call to 'tensor(const std::vector<int>&)'
+     197              :   // no known conversion for argument 1 from 'const std::vector<int>' to
+     198              :   // 'torch::detail::TensorDataContainer'
+     199              :   // ```
+     200              :   //
+     201              :   // NOTE: `torch::tensor(std::vector<bool>)` is not supported for now, because
+     202              :   // ArrayRef<bool> cannot be constructed from a std::vector<bool> bitfield.
+     203              : #define TENSOR(T, S)                                \
+     204              :   TensorDataContainer(const std::vector<T>& values) \
+     205              :       : TensorDataContainer(at::ArrayRef<T>(values)) {}
+     206              :   // NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init)
+     207       401318 :   AT_FORALL_SCALAR_TYPES_AND2(Half, BFloat16, TENSOR)
+     208              :   // NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init)
+     209              :   AT_FORALL_COMPLEX_TYPES(TENSOR)
+     210              : #undef TENSOR
+     211              : 
+     212       401318 :   bool is_scalar() const {
+     213       401318 :     return type_ == TensorDataContainerType::Scalar;
+     214              :   }
+     215              : 
+     216              :   const c10::Scalar& scalar() const {
+     217              :     TORCH_CHECK(
+     218              :         is_scalar(),
+     219              :         "Can only call `scalar()` on a TensorDataContainer that has `is_scalar() == true`");
+     220              :     return scalar_;
+     221              :   }
+     222              : 
+     223       401318 :   bool is_init_list() const {
+     224       401318 :     return type_ == TensorDataContainerType::InitList;
+     225              :   }
+     226              : 
+     227              :   const std::initializer_list<TensorDataContainer>& init_list() const {
+     228              :     TORCH_CHECK(
+     229              :         is_init_list(),
+     230              :         "Can only call `init_list()` on a TensorDataContainer that has `is_init_list() == true`");
+     231              :     return init_list_;
+     232              :   }
+     233              : 
+     234       401318 :   bool is_tensor() const {
+     235       401318 :     return type_ == TensorDataContainerType::Tensor;
+     236              :   }
+     237              : 
+     238              :   const at::Tensor& tensor() const {
+     239              :     TORCH_CHECK(
+     240              :         is_tensor(),
+     241              :         "Can only call `tensor()` on a TensorDataContainer that has `is_tensor() == true`");
+     242              :     return tensor_;
+     243              :   }
+     244              : 
+     245              :   const std::vector<int64_t>& sizes() const {
+     246              :     return sizes_;
+     247              :   }
+     248              : 
+     249              :   const c10::ScalarType& scalar_type() const {
+     250              :     return scalar_type_;
+     251              :   }
+     252              : 
+     253       401318 :   at::Tensor convert_to_tensor(at::TensorOptions options) const {
+     254       401318 :     if (!options.has_dtype()) {
+     255        22824 :       options = options.dtype(compute_desired_dtype(scalar_type_));
+     256              :     }
+     257              : 
+     258       401318 :     if (is_scalar()) {
+     259            0 :       at::AutoDispatchBelowAutograd mode;
+     260            0 :       return at::scalar_tensor(scalar_, options);
+     261       401318 :     } else if (is_init_list()) {
+     262              :       // NOTE: Here we explicitly choose to initialize the tensor on CPU first,
+     263              :       // fill each element of the tensor, and then move the tensor to the
+     264              :       // desired device. For CUDA device, this approach only involves 1 CUDA
+     265              :       // kernel launch, and is much faster than initializing the tensor on CUDA
+     266              :       // first and then filling each element of it (which involves `N` CUDA
+     267              :       // kernel launches where `N` is the number of the elements in the tensor).
+     268            0 :       at::Tensor tensor = ([&]() {
+     269            0 :         at::AutoDispatchBelowAutograd mode;
+     270            0 :         return at::empty(sizes_, options.device(at::kCPU));
+     271            0 :       })();
+     272            0 :       fill_tensor(tensor);
+     273            0 :       return tensor.to(options.device());
+     274       401318 :     } else if (is_tensor()) {
+     275       401318 :       auto output = tensor_.to(options);
+     276       401318 :       TORCH_CHECK(
+     277              :           !tensor_.is_complex() || output.is_complex(),
+     278              :           "can not do torch::tensor(complex, dtype=non-complex) because complex can not be casted to real number without loss of information");
+     279       401318 :       return output;
+     280       401318 :     } else {
+     281            0 :       TORCH_INTERNAL_ASSERT(false, "Invalid TensorDataContainer type");
+     282              :     }
+     283              :   }
+     284              : 
+     285              :   void pretty_print_recursive(std::ostream& stream) const {
+     286              :     if (is_scalar()) {
+     287              :       AT_DISPATCH_ALL_TYPES_AND3(
+     288              :           at::kBool,
+     289              :           at::kHalf,
+     290              :           at::kBFloat16,
+     291              :           scalar_type_,
+     292              :           "TensorDataContainer_pretty_print_scalar",
+     293              :           [&] { stream << scalar_.to<scalar_t>(); });
+     294              :     } else if (is_init_list()) {
+     295              :       stream << "{";
+     296              :       for (const TensorDataContainer* it = init_list_.begin();
+     297              :            it != init_list_.end();
+     298              :            it++) {
+     299              :         stream << *it;
+     300              :         if (std::next(it) != init_list_.end())
+     301              :           stream << ", ";
+     302              :       }
+     303              :       stream << "}";
+     304              :     } else if (is_tensor()) {
+     305              :       stream << "{";
+     306              :       for (const auto i : c10::irange(tensor_.sizes()[0])) {
+     307              :         AT_DISPATCH_ALL_TYPES_AND3(
+     308              :             at::kBool,
+     309              :             at::kHalf,
+     310              :             at::kBFloat16,
+     311              :             scalar_type_,
+     312              :             "TensorDataContainer_pretty_print_tensor_item",
+     313              :             [&] { stream << tensor_[i].item<scalar_t>(); });
+     314              :         if (i != tensor_.sizes()[0] - 1)
+     315              :           stream << ", ";
+     316              :       }
+     317              :       stream << "}";
+     318              :     } else {
+     319              :       TORCH_INTERNAL_ASSERT(false, "Invalid TensorDataContainer type");
+     320              :     }
+     321              :   }
+     322              : 
+     323              :  private:
+     324            0 :   void fill_tensor(at::Tensor& tensor) const {
+     325            0 :     if (is_scalar()) {
+     326            0 :       TORCH_INTERNAL_ASSERT(
+     327              :           tensor.dim() == 0,
+     328              :           "Expected a 0-dim Tensor, but got Tensor with dimensions: ",
+     329              :           tensor.dim());
+     330            0 :       at::NoGradGuard guard;
+     331            0 :       tensor.fill_(scalar_);
+     332            0 :     } else if (is_init_list()) {
+     333            0 :       TORCH_INTERNAL_ASSERT(
+     334              :           tensor.sizes()[0] == (int64_t)init_list_.size(),
+     335              :           "Expected a Tensor with size ",
+     336              :           init_list_.size(),
+     337              :           " in its first dimension, but got Tensor with size ",
+     338              :           tensor.sizes()[0],
+     339              :           " in its first dimension");
+     340            0 :       size_t index = 0;
+     341            0 :       for (const auto& elem : init_list_) {
+     342            0 :         at::Tensor slice = tensor[index];
+     343            0 :         elem.fill_tensor(slice);
+     344            0 :         index++;
+     345            0 :       }
+     346            0 :     } else if (is_tensor()) {
+     347            0 :       TORCH_INTERNAL_ASSERT(
+     348              :           false,
+     349              :           "TensorDataContainer is already a Tensor type, `fill_tensor` should not be called");
+     350              :     } else {
+     351            0 :       TORCH_INTERNAL_ASSERT(false, "Invalid TensorDataContainer type");
+     352              :     }
+     353            0 :   }
+     354              : 
+     355              :   std::vector<int64_t> sizes_;
+     356              :   c10::ScalarType scalar_type_;
+     357              :   TensorDataContainerType type_;
+     358              :   c10::Scalar scalar_;
+     359              :   std::initializer_list<TensorDataContainer> init_list_;
+     360              :   at::Tensor tensor_;
+     361              : };
+     362              : 
+     363              : inline std::ostream& operator<<(
+     364              :     std::ostream& stream,
+     365              :     const TensorDataContainer& tensor_data_container) {
+     366              :   tensor_data_container.pretty_print_recursive(stream);
+     367              :   return stream;
+     368              : }
+     369              : 
+     370              : } // namespace detail
+     371              : 
+     372              : } // namespace torch
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/api/include/torch/detail/index-sort-f.html b/html/libtorch/include/torch/csrc/api/include/torch/detail/index-sort-f.html new file mode 100644 index 0000000..0930fa8 --- /dev/null +++ b/html/libtorch/include/torch/csrc/api/include/torch/detail/index-sort-f.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/api/include/torch/detail + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/api/include/torch/detailCoverageTotalHit
Test:coverage.infoLines:46.0 %5023
Test Date:2024-04-30 13:17:26Functions:84.6 %1311
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
TensorDataContainer.h +
46.0%46.0%
+
46.0 %502384.6 %1311
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/api/include/torch/detail/index-sort-l.html b/html/libtorch/include/torch/csrc/api/include/torch/detail/index-sort-l.html new file mode 100644 index 0000000..05cff36 --- /dev/null +++ b/html/libtorch/include/torch/csrc/api/include/torch/detail/index-sort-l.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/api/include/torch/detail + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/api/include/torch/detailCoverageTotalHit
Test:coverage.infoLines:46.0 %5023
Test Date:2024-04-30 13:17:26Functions:84.6 %1311
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
TensorDataContainer.h +
46.0%46.0%
+
46.0 %502384.6 %1311
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/api/include/torch/detail/index.html b/html/libtorch/include/torch/csrc/api/include/torch/detail/index.html new file mode 100644 index 0000000..e69ee44 --- /dev/null +++ b/html/libtorch/include/torch/csrc/api/include/torch/detail/index.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/api/include/torch/detail + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/api/include/torch/detailCoverageTotalHit
Test:coverage.infoLines:46.0 %5023
Test Date:2024-04-30 13:17:26Functions:84.6 %1311
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
TensorDataContainer.h +
46.0%46.0%
+
46.0 %502384.6 %1311
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/autograd/edge.h.func-c.html b/html/libtorch/include/torch/csrc/autograd/edge.h.func-c.html new file mode 100644 index 0000000..2c5db3b --- /dev/null +++ b/html/libtorch/include/torch/csrc/autograd/edge.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/autograd/edge.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/autograd - edge.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %10
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5torch8autograd4EdgeC2Ev0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/autograd/edge.h.func.html b/html/libtorch/include/torch/csrc/autograd/edge.h.func.html new file mode 100644 index 0000000..94131cf --- /dev/null +++ b/html/libtorch/include/torch/csrc/autograd/edge.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/autograd/edge.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/autograd - edge.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %10
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5torch8autograd4EdgeC2Ev0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/autograd/edge.h.gcov.html b/html/libtorch/include/torch/csrc/autograd/edge.h.gcov.html new file mode 100644 index 0000000..4efb939 --- /dev/null +++ b/html/libtorch/include/torch/csrc/autograd/edge.h.gcov.html @@ -0,0 +1,134 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/autograd/edge.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/autograd - edge.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %10
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <cstdint>
+       4              : #include <functional>
+       5              : #include <memory>
+       6              : 
+       7              : #include <c10/util/hash.h>
+       8              : 
+       9              : namespace torch {
+      10              : namespace autograd {
+      11              : 
+      12              : struct Node;
+      13              : 
+      14              : /// Represents a particular input of a function.
+      15              : struct Edge {
+      16            0 :   Edge() noexcept : function(nullptr), input_nr(0) {}
+      17              : 
+      18              :   Edge(std::shared_ptr<Node> function_, uint32_t input_nr_) noexcept
+      19              :       : function(std::move(function_)), input_nr(input_nr_) {}
+      20              : 
+      21              :   /// Convenience method to test if an edge is valid.
+      22              :   bool is_valid() const noexcept {
+      23              :     return function != nullptr;
+      24              :   }
+      25              : 
+      26              :   // Required for use in associative containers.
+      27              :   bool operator==(const Edge& other) const noexcept {
+      28              :     return this->function == other.function && this->input_nr == other.input_nr;
+      29              :   }
+      30              : 
+      31              :   bool operator!=(const Edge& other) const noexcept {
+      32              :     return !(*this == other);
+      33              :   }
+      34              : 
+      35              :   /// The function this `Edge` points to.
+      36              :   std::shared_ptr<Node> function;
+      37              : 
+      38              :   /// The identifier of a particular input to the function.
+      39              :   uint32_t input_nr;
+      40              : };
+      41              : } // namespace autograd
+      42              : } // namespace torch
+      43              : 
+      44              : // The idiomatic way of enabling use of a custom type as the key of hash
+      45              : // containers in C++11. This method removes the requirement of having to pass
+      46              : // a custom hasher to std::unordered_{map, set}.
+      47              : // See http://en.cppreference.com/w/cpp/utility/hash for more information.
+      48              : namespace std {
+      49              : template <>
+      50              : struct hash<torch::autograd::Edge> {
+      51              :   // These type aliases are required by the standard.
+      52              :   using argument_type = torch::autograd::Edge;
+      53              :   using return_type = size_t;
+      54              :   return_type operator()(const argument_type& edge) const noexcept {
+      55              :     return c10::get_hash(edge.function, edge.input_nr);
+      56              :   }
+      57              : };
+      58              : } // namespace std
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/autograd/generated/index-sort-f.html b/html/libtorch/include/torch/csrc/autograd/generated/index-sort-f.html new file mode 100644 index 0000000..4b9077d --- /dev/null +++ b/html/libtorch/include/torch/csrc/autograd/generated/index-sort-f.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/autograd/generated + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/autograd/generatedCoverageTotalHit
Test:coverage.infoLines:100.0 %1919
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
variable_factories.h +
100.0%
+
100.0 %1919100.0 %55
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/autograd/generated/index-sort-l.html b/html/libtorch/include/torch/csrc/autograd/generated/index-sort-l.html new file mode 100644 index 0000000..e661d05 --- /dev/null +++ b/html/libtorch/include/torch/csrc/autograd/generated/index-sort-l.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/autograd/generated + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/autograd/generatedCoverageTotalHit
Test:coverage.infoLines:100.0 %1919
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
variable_factories.h +
100.0%
+
100.0 %1919100.0 %55
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/autograd/generated/index.html b/html/libtorch/include/torch/csrc/autograd/generated/index.html new file mode 100644 index 0000000..bb45db9 --- /dev/null +++ b/html/libtorch/include/torch/csrc/autograd/generated/index.html @@ -0,0 +1,105 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/autograd/generated + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/autograd/generatedCoverageTotalHit
Test:coverage.infoLines:100.0 %1919
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
variable_factories.h +
100.0%
+
100.0 %1919100.0 %55
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/autograd/generated/variable_factories.h.func-c.html b/html/libtorch/include/torch/csrc/autograd/generated/variable_factories.h.func-c.html new file mode 100644 index 0000000..a5f16fd --- /dev/null +++ b/html/libtorch/include/torch/csrc/autograd/generated/variable_factories.h.func-c.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/autograd/generated/variable_factories.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/autograd/generated - variable_factories.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1919
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5torch12triu_indicesElllN3c1013TensorOptionsE68
_ZN5torch10zeros_likeERKN2at6TensorEN3c1013TensorOptionsENS4_8optionalINS4_12MemoryFormatEEE84
_ZN5torch4fullEN3c108ArrayRefIlEERKNS0_6ScalarENS0_13TensorOptionsE694
_ZN5torch5zerosEN3c108ArrayRefIlEENS0_13TensorOptionsE16680
_ZN5torch6tensorENS_6detail19TensorDataContainerERKN3c1013TensorOptionsE401318
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/autograd/generated/variable_factories.h.func.html b/html/libtorch/include/torch/csrc/autograd/generated/variable_factories.h.func.html new file mode 100644 index 0000000..00ee3e5 --- /dev/null +++ b/html/libtorch/include/torch/csrc/autograd/generated/variable_factories.h.func.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/autograd/generated/variable_factories.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/autograd/generated - variable_factories.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1919
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5torch10zeros_likeERKN2at6TensorEN3c1013TensorOptionsENS4_8optionalINS4_12MemoryFormatEEE84
_ZN5torch12triu_indicesElllN3c1013TensorOptionsE68
_ZN5torch4fullEN3c108ArrayRefIlEERKNS0_6ScalarENS0_13TensorOptionsE694
_ZN5torch5zerosEN3c108ArrayRefIlEENS0_13TensorOptionsE16680
_ZN5torch6tensorENS_6detail19TensorDataContainerERKN3c1013TensorOptionsE401318
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/autograd/generated/variable_factories.h.gcov.html b/html/libtorch/include/torch/csrc/autograd/generated/variable_factories.h.gcov.html new file mode 100644 index 0000000..fae0e83 --- /dev/null +++ b/html/libtorch/include/torch/csrc/autograd/generated/variable_factories.h.gcov.html @@ -0,0 +1,774 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/autograd/generated/variable_factories.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/autograd/generated - variable_factories.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1919
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : // @generated from ../tools/autograd/templates/variable_factories.h
+       4              : 
+       5              : #include <ATen/core/Tensor.h>
+       6              : #include <ATen/TracerMode.h>
+       7              : #include <ATen/core/grad_mode.h>
+       8              : #include <c10/util/ArrayRef.h>
+       9              : #include <c10/core/MemoryFormat.h>
+      10              : #include <torch/csrc/api/include/torch/detail/TensorDataContainer.h>
+      11              : #include <torch/csrc/autograd/variable.h>
+      12              : 
+      13              : #ifndef AT_PER_OPERATOR_HEADERS
+      14              : #include <ATen/Functions.h>
+      15              : #else
+      16              : #include <ATen/ops/from_blob.h>
+      17              : #include <ATen/ops/_make_dep_token.h>
+      18              : #include <ATen/ops/_cudnn_init_dropout_state.h>
+      19              : #include <ATen/ops/arange.h>
+      20              : #include <ATen/ops/arange.h>
+      21              : #include <ATen/ops/arange.h>
+      22              : #include <ATen/ops/bartlett_window.h>
+      23              : #include <ATen/ops/bartlett_window.h>
+      24              : #include <ATen/ops/blackman_window.h>
+      25              : #include <ATen/ops/blackman_window.h>
+      26              : #include <ATen/ops/empty.h>
+      27              : #include <ATen/ops/empty.h>
+      28              : #include <ATen/ops/empty_permuted.h>
+      29              : #include <ATen/ops/_empty_affine_quantized.h>
+      30              : #include <ATen/ops/_empty_per_channel_affine_quantized.h>
+      31              : #include <ATen/ops/empty_quantized.h>
+      32              : #include <ATen/ops/empty_like.h>
+      33              : #include <ATen/ops/empty_strided.h>
+      34              : #include <ATen/ops/eye.h>
+      35              : #include <ATen/ops/eye.h>
+      36              : #include <ATen/ops/full.h>
+      37              : #include <ATen/ops/full.h>
+      38              : #include <ATen/ops/full_like.h>
+      39              : #include <ATen/ops/from_file.h>
+      40              : #include <ATen/ops/hann_window.h>
+      41              : #include <ATen/ops/hann_window.h>
+      42              : #include <ATen/ops/hamming_window.h>
+      43              : #include <ATen/ops/hamming_window.h>
+      44              : #include <ATen/ops/hamming_window.h>
+      45              : #include <ATen/ops/hamming_window.h>
+      46              : #include <ATen/ops/kaiser_window.h>
+      47              : #include <ATen/ops/kaiser_window.h>
+      48              : #include <ATen/ops/kaiser_window.h>
+      49              : #include <ATen/ops/linspace.h>
+      50              : #include <ATen/ops/logspace.h>
+      51              : #include <ATen/ops/ones.h>
+      52              : #include <ATen/ops/ones.h>
+      53              : #include <ATen/ops/ones_like.h>
+      54              : #include <ATen/ops/scalar_tensor.h>
+      55              : #include <ATen/ops/rand.h>
+      56              : #include <ATen/ops/rand.h>
+      57              : #include <ATen/ops/rand.h>
+      58              : #include <ATen/ops/rand.h>
+      59              : #include <ATen/ops/rand_like.h>
+      60              : #include <ATen/ops/randint.h>
+      61              : #include <ATen/ops/randint.h>
+      62              : #include <ATen/ops/randint.h>
+      63              : #include <ATen/ops/randint.h>
+      64              : #include <ATen/ops/randint_like.h>
+      65              : #include <ATen/ops/randint_like.h>
+      66              : #include <ATen/ops/randn.h>
+      67              : #include <ATen/ops/randn.h>
+      68              : #include <ATen/ops/randn.h>
+      69              : #include <ATen/ops/randn.h>
+      70              : #include <ATen/ops/randn_like.h>
+      71              : #include <ATen/ops/randperm.h>
+      72              : #include <ATen/ops/randperm.h>
+      73              : #include <ATen/ops/range.h>
+      74              : #include <ATen/ops/range.h>
+      75              : #include <ATen/ops/zeros.h>
+      76              : #include <ATen/ops/_efficientzerotensor.h>
+      77              : #include <ATen/ops/zeros.h>
+      78              : #include <ATen/ops/zeros_like.h>
+      79              : #include <ATen/ops/sparse_compressed_tensor.h>
+      80              : #include <ATen/ops/sparse_csr_tensor.h>
+      81              : #include <ATen/ops/sparse_csc_tensor.h>
+      82              : #include <ATen/ops/sparse_bsr_tensor.h>
+      83              : #include <ATen/ops/sparse_bsc_tensor.h>
+      84              : #include <ATen/ops/sparse_compressed_tensor.h>
+      85              : #include <ATen/ops/sparse_csr_tensor.h>
+      86              : #include <ATen/ops/sparse_csc_tensor.h>
+      87              : #include <ATen/ops/sparse_bsr_tensor.h>
+      88              : #include <ATen/ops/sparse_bsc_tensor.h>
+      89              : #include <ATen/ops/_sparse_compressed_tensor_unsafe.h>
+      90              : #include <ATen/ops/_sparse_csr_tensor_unsafe.h>
+      91              : #include <ATen/ops/_sparse_csc_tensor_unsafe.h>
+      92              : #include <ATen/ops/_sparse_bsr_tensor_unsafe.h>
+      93              : #include <ATen/ops/_sparse_bsc_tensor_unsafe.h>
+      94              : #include <ATen/ops/sparse_coo_tensor.h>
+      95              : #include <ATen/ops/sparse_coo_tensor.h>
+      96              : #include <ATen/ops/sparse_coo_tensor.h>
+      97              : #include <ATen/ops/_sparse_coo_tensor_unsafe.h>
+      98              : #include <ATen/ops/_sparse_coo_tensor_with_dims.h>
+      99              : #include <ATen/ops/_sparse_coo_tensor_with_dims_and_tensors.h>
+     100              : #include <ATen/ops/_to_copy.h>
+     101              : #include <ATen/ops/tril_indices.h>
+     102              : #include <ATen/ops/triu_indices.h>
+     103              : #include <ATen/ops/normal.h>
+     104              : #include <ATen/ops/fft_fftfreq.h>
+     105              : #include <ATen/ops/fft_rfftfreq.h>
+     106              : #endif
+     107              : 
+     108              : #include <functional>
+     109              : #include <initializer_list>
+     110              : #include <utility>
+     111              : 
+     112              : namespace torch {
+     113              : 
+     114              : /// NOTE: Currently `torch::tensor(...)` doesn't support mixed data types
+     115              : /// (i.e. `torch::tensor({{bool, 2.0}})` doesn't work). We might be able to
+     116              : /// support it in the future by iterating over all sub-lists to find
+     117              : /// the largest data type that can represent all of the elements, or by using
+     118              : /// variadic templates.
+     119              : ///
+     120              : /// NOTE: C++ `torch::tensor` with a floating-point type or an `at::ArrayRef` / `std::vector` /
+     121              : /// (nested) braced-init-list of floating-point types always produces a tensor of dtype
+     122              : /// `torch::get_default_dtype()`, matching Python `torch.tensor` behavior.
+     123              : ///
+     124              : /// NOTE: C++ `torch::tensor` with an integer type or an `at::ArrayRef` / `std::vector` /
+     125              : /// (nested) braced-init-list of integer types always produces a tensor of dtype `at::kLong`
+     126              : /// (aka. int64_t), matching Python `torch.tensor` behavior.
+     127              : ///
+     128              : /// NOTE: The following dtypes are not supported by `torch::tensor` currently:
+     129              : /// - `unsigned int`
+     130              : /// - `unsigned long int`
+     131              : /// - `unsigned long long int`
+     132              : /// - `long long int`
+     133       401318 : inline at::Tensor tensor(detail::TensorDataContainer tensor_data_container, const at::TensorOptions& options = {}) {
+     134              :   return autograd::make_variable(
+     135              :     // note: we remove the requires_grad setting from the TensorOptions because
+     136              :     // it is ignored anyways (and we actually have an assertion that it isn't set
+     137              :     // which would fail otherwise). We handle requires_grad explicitly here
+     138              :     // instead of passing it through to the kernel.
+     139       802636 :     tensor_data_container.convert_to_tensor(options.requires_grad(c10::nullopt)),
+     140      1203954 :     options.requires_grad());
+     141              : }
+     142              : 
+     143              : /// A generic deleter function.
+     144              : using Deleter = std::function<void(void*)>;
+     145              : using at::MemoryFormat;
+     146              : 
+     147              : /// Exposes the given `data` as a `Tensor` without taking ownership of the
+     148              : /// original data. `sizes` should specify the shape of the tensor, `strides` the
+     149              : /// stride in each dimension. The `deleter` function (a
+     150              : /// `std::function<void(void*)>`) will be called on the `data` when the Tensor
+     151              : /// data would normally be deallocated. The `TensorOptions` specify additional
+     152              : /// configuration options for the returned tensor, such as what type to
+     153              : /// interpret the `data` as.
+     154              : inline at::Tensor from_blob(
+     155              :     void* data,
+     156              :     at::IntArrayRef sizes,
+     157              :     at::IntArrayRef strides,
+     158              :     const Deleter& deleter,
+     159              :     const at::TensorOptions& options = at::TensorOptions()) {
+     160              :   at::Tensor tensor = ([&]() {
+     161              :     at::AutoDispatchBelowAutograd guard;  // TODO: remove
+     162              :     at::tracer::impl::NoTracerDispatchMode tracer_guard;
+     163              :     return at::from_blob(data, sizes, strides, deleter, options.requires_grad(c10::nullopt));
+     164              :   })();
+     165              :   return autograd::make_variable(tensor, options.requires_grad());
+     166              : }
+     167              : 
+     168              : /// Exposes the given `data` as a `Tensor` without taking ownership of the
+     169              : /// original data. `sizes` should specify the shape of the tensor, `strides` the
+     170              : /// stride in each dimension. The `TensorOptions`
+     171              : /// specify additional configuration options for the returned tensor, such as
+     172              : /// what type to interpret the `data` as.
+     173              : inline at::Tensor from_blob(
+     174              :     void* data,
+     175              :     at::IntArrayRef sizes,
+     176              :     at::IntArrayRef strides,
+     177              :     const at::TensorOptions& options = at::TensorOptions()) {
+     178              :   at::Tensor tensor = ([&]() {
+     179              :     at::AutoDispatchBelowAutograd guard;  // TODO: remove
+     180              :     at::tracer::impl::NoTracerDispatchMode tracer_guard;
+     181              :     return at::from_blob(data, sizes, strides, options.requires_grad(c10::nullopt));
+     182              :   })();
+     183              :   return autograd::make_variable(tensor, options.requires_grad());
+     184              : }
+     185              : 
+     186              : /// Exposes the given `data` as a `Tensor` without taking ownership of the
+     187              : /// original data. `sizes` should specify the shape of the tensor. The `deleter`
+     188              : /// (a `std::function<void(void*)>`) function will be called on the `data` when
+     189              : /// the Tensor data would normally be deallocated. The `TensorOptions` specify
+     190              : /// additional configuration options for the returned tensor, such as what type
+     191              : /// to interpret the `data` as.
+     192              : inline at::Tensor from_blob(
+     193              :     void* data,
+     194              :     at::IntArrayRef sizes,
+     195              :     const Deleter& deleter,
+     196              :     const at::TensorOptions& options = at::TensorOptions()) {
+     197              :   at::Tensor tensor = ([&]() {
+     198              :     at::AutoDispatchBelowAutograd guard;  // TODO: remove
+     199              :     at::tracer::impl::NoTracerDispatchMode tracer_guard;
+     200              :     return at::from_blob(data, sizes, deleter, options.requires_grad(c10::nullopt));
+     201              :   })();
+     202              :   return autograd::make_variable(tensor, options.requires_grad());
+     203              : }
+     204              : 
+     205              : /// Exposes the given `data` as a `Tensor` without taking ownership of the
+     206              : /// original data. `sizes` should specify the shape of the tensor. The
+     207              : /// `TensorOptions` specify additional configuration options for the returned
+     208              : /// tensor, such as what type to interpret the `data` as.
+     209              : inline at::Tensor from_blob(
+     210              :     void* data,
+     211              :     at::IntArrayRef sizes,
+     212              :     const at::TensorOptions& options = at::TensorOptions()) {
+     213              :   at::Tensor tensor = ([&]() {
+     214              :     at::AutoDispatchBelowAutograd guard;  // TODO: remove
+     215              :     at::tracer::impl::NoTracerDispatchMode tracer_guard;
+     216              :     return at::from_blob(data, sizes, options.requires_grad(c10::nullopt));
+     217              :   })();
+     218              :   return autograd::make_variable(tensor, options.requires_grad());
+     219              : }
+     220              : 
+     221              : inline at::Tensor _make_dep_token(at::TensorOptions options = {}, c10::optional<at::MemoryFormat> memory_format = c10::nullopt) {
+     222              :   at::AutoDispatchBelowADInplaceOrView guard;
+     223              :   return autograd::make_variable(at::_make_dep_token(at::TensorOptions(options).requires_grad(c10::nullopt), memory_format), /*requires_grad=*/options.requires_grad());
+     224              : }
+     225              : inline at::Tensor _cudnn_init_dropout_state(double dropout, bool train, int64_t dropout_seed, at::TensorOptions options) {
+     226              :   at::AutoDispatchBelowADInplaceOrView guard;
+     227              :   return autograd::make_variable(at::_cudnn_init_dropout_state(dropout, train, dropout_seed, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     228              : }
+     229              : inline at::Tensor arange(const at::Scalar & end, at::TensorOptions options = {}) {
+     230              :   at::AutoDispatchBelowADInplaceOrView guard;
+     231              :   return autograd::make_variable(at::arange(end, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     232              : }
+     233              : inline at::Tensor arange(const at::Scalar & start, const at::Scalar & end, at::TensorOptions options = {}) {
+     234              :   at::AutoDispatchBelowADInplaceOrView guard;
+     235              :   return autograd::make_variable(at::arange(start, end, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     236              : }
+     237              : inline at::Tensor arange(const at::Scalar & start, const at::Scalar & end, const at::Scalar & step, at::TensorOptions options = {}) {
+     238              :   at::AutoDispatchBelowADInplaceOrView guard;
+     239              :   return autograd::make_variable(at::arange(start, end, step, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     240              : }
+     241              : inline at::Tensor bartlett_window(int64_t window_length, at::TensorOptions options = {}) {
+     242              :   at::AutoDispatchBelowADInplaceOrView guard;
+     243              :   return autograd::make_variable(at::bartlett_window(window_length, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     244              : }
+     245              : inline at::Tensor bartlett_window(int64_t window_length, bool periodic, at::TensorOptions options = {}) {
+     246              :   at::AutoDispatchBelowADInplaceOrView guard;
+     247              :   return autograd::make_variable(at::bartlett_window(window_length, periodic, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     248              : }
+     249              : inline at::Tensor blackman_window(int64_t window_length, at::TensorOptions options = {}) {
+     250              :   at::AutoDispatchBelowADInplaceOrView guard;
+     251              :   return autograd::make_variable(at::blackman_window(window_length, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     252              : }
+     253              : inline at::Tensor blackman_window(int64_t window_length, bool periodic, at::TensorOptions options = {}) {
+     254              :   at::AutoDispatchBelowADInplaceOrView guard;
+     255              :   return autograd::make_variable(at::blackman_window(window_length, periodic, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     256              : }
+     257              : inline at::Tensor empty(at::IntArrayRef size, c10::optional<at::DimnameList> names, at::TensorOptions options = {}, c10::optional<at::MemoryFormat> memory_format = c10::nullopt) {
+     258              :   at::AutoDispatchBelowADInplaceOrView guard;
+     259              :   return autograd::make_variable(at::empty(size, names, at::TensorOptions(options).requires_grad(c10::nullopt), memory_format), /*requires_grad=*/options.requires_grad());
+     260              : }
+     261              : inline at::Tensor empty(at::IntArrayRef size, at::TensorOptions options = {}, c10::optional<at::MemoryFormat> memory_format = c10::nullopt) {
+     262              :   at::AutoDispatchBelowADInplaceOrView guard;
+     263              :   return autograd::make_variable(at::empty(size, at::TensorOptions(options).requires_grad(c10::nullopt), memory_format), /*requires_grad=*/options.requires_grad());
+     264              : }
+     265              : inline at::Tensor empty_symint(c10::SymIntArrayRef size, at::TensorOptions options = {}, c10::optional<at::MemoryFormat> memory_format = c10::nullopt) {
+     266              :   at::AutoDispatchBelowADInplaceOrView guard;
+     267              :   return autograd::make_variable(at::empty_symint(size, at::TensorOptions(options).requires_grad(c10::nullopt), memory_format), /*requires_grad=*/options.requires_grad());
+     268              : }
+     269              : inline at::Tensor empty_permuted(at::IntArrayRef size, at::IntArrayRef physical_layout, at::TensorOptions options = {}) {
+     270              :   at::AutoDispatchBelowADInplaceOrView guard;
+     271              :   return autograd::make_variable(at::empty_permuted(size, physical_layout, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     272              : }
+     273              : inline at::Tensor empty_permuted_symint(c10::SymIntArrayRef size, at::IntArrayRef physical_layout, at::TensorOptions options = {}) {
+     274              :   at::AutoDispatchBelowADInplaceOrView guard;
+     275              :   return autograd::make_variable(at::empty_permuted_symint(size, physical_layout, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     276              : }
+     277              : inline at::Tensor _empty_affine_quantized(at::IntArrayRef size, at::TensorOptions options = {}, double scale = 1, int64_t zero_point = 0, c10::optional<at::MemoryFormat> memory_format = MemoryFormat::Contiguous) {
+     278              :   at::AutoDispatchBelowADInplaceOrView guard;
+     279              :   return autograd::make_variable(at::_empty_affine_quantized(size, at::TensorOptions(options).requires_grad(c10::nullopt), scale, zero_point, memory_format), /*requires_grad=*/options.requires_grad());
+     280              : }
+     281              : inline at::Tensor _empty_affine_quantized_symint(c10::SymIntArrayRef size, at::TensorOptions options = {}, double scale = 1, int64_t zero_point = 0, c10::optional<at::MemoryFormat> memory_format = MemoryFormat::Contiguous) {
+     282              :   at::AutoDispatchBelowADInplaceOrView guard;
+     283              :   return autograd::make_variable(at::_empty_affine_quantized_symint(size, at::TensorOptions(options).requires_grad(c10::nullopt), scale, zero_point, memory_format), /*requires_grad=*/options.requires_grad());
+     284              : }
+     285              : inline at::Tensor _empty_per_channel_affine_quantized(at::IntArrayRef size, const at::Tensor & scales, const at::Tensor & zero_points, int64_t axis, at::TensorOptions options = {}, c10::optional<at::MemoryFormat> memory_format = MemoryFormat::Contiguous) {
+     286              :   at::AutoDispatchBelowADInplaceOrView guard;
+     287              :   return autograd::make_variable(at::_empty_per_channel_affine_quantized(size, scales, zero_points, axis, at::TensorOptions(options).requires_grad(c10::nullopt), memory_format), /*requires_grad=*/options.requires_grad());
+     288              : }
+     289              : inline at::Tensor _empty_per_channel_affine_quantized_symint(c10::SymIntArrayRef size, const at::Tensor & scales, const at::Tensor & zero_points, int64_t axis, at::TensorOptions options = {}, c10::optional<at::MemoryFormat> memory_format = MemoryFormat::Contiguous) {
+     290              :   at::AutoDispatchBelowADInplaceOrView guard;
+     291              :   return autograd::make_variable(at::_empty_per_channel_affine_quantized_symint(size, scales, zero_points, axis, at::TensorOptions(options).requires_grad(c10::nullopt), memory_format), /*requires_grad=*/options.requires_grad());
+     292              : }
+     293              : inline at::Tensor empty_quantized(at::IntArrayRef size, const at::Tensor & qtensor, at::TensorOptions options = {}, c10::optional<at::MemoryFormat> memory_format = c10::nullopt) {
+     294              :   at::AutoDispatchBelowADInplaceOrView guard;
+     295              :   return autograd::make_variable(at::empty_quantized(size, qtensor, at::TensorOptions(options).requires_grad(c10::nullopt), memory_format), /*requires_grad=*/options.requires_grad());
+     296              : }
+     297              : inline at::Tensor empty_like(const at::Tensor & self, at::TensorOptions options = {}, c10::optional<at::MemoryFormat> memory_format = c10::nullopt) {
+     298              :   at::AutoDispatchBelowADInplaceOrView guard;
+     299              :   return autograd::make_variable(at::empty_like(self, at::TensorOptions(options).requires_grad(c10::nullopt), memory_format), /*requires_grad=*/options.requires_grad());
+     300              : }
+     301              : inline at::Tensor empty_strided(at::IntArrayRef size, at::IntArrayRef stride, at::TensorOptions options = {}) {
+     302              :   at::AutoDispatchBelowADInplaceOrView guard;
+     303              :   return autograd::make_variable(at::empty_strided(size, stride, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     304              : }
+     305              : inline at::Tensor empty_strided_symint(c10::SymIntArrayRef size, c10::SymIntArrayRef stride, at::TensorOptions options = {}) {
+     306              :   at::AutoDispatchBelowADInplaceOrView guard;
+     307              :   return autograd::make_variable(at::empty_strided_symint(size, stride, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     308              : }
+     309              : inline at::Tensor eye(int64_t n, at::TensorOptions options = {}) {
+     310              :   at::AutoDispatchBelowADInplaceOrView guard;
+     311              :   return autograd::make_variable(at::eye(n, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     312              : }
+     313              : inline at::Tensor eye_symint(c10::SymInt n, at::TensorOptions options = {}) {
+     314              :   at::AutoDispatchBelowADInplaceOrView guard;
+     315              :   return autograd::make_variable(at::eye_symint(n, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     316              : }
+     317              : inline at::Tensor eye(int64_t n, int64_t m, at::TensorOptions options = {}) {
+     318              :   at::AutoDispatchBelowADInplaceOrView guard;
+     319              :   return autograd::make_variable(at::eye(n, m, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     320              : }
+     321              : inline at::Tensor eye_symint(c10::SymInt n, c10::SymInt m, at::TensorOptions options = {}) {
+     322              :   at::AutoDispatchBelowADInplaceOrView guard;
+     323              :   return autograd::make_variable(at::eye_symint(n, m, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     324              : }
+     325              : inline at::Tensor full(at::IntArrayRef size, const at::Scalar & fill_value, c10::optional<at::DimnameList> names, at::TensorOptions options = {}) {
+     326              :   at::AutoDispatchBelowADInplaceOrView guard;
+     327              :   return autograd::make_variable(at::full(size, fill_value, names, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     328              : }
+     329          694 : inline at::Tensor full(at::IntArrayRef size, const at::Scalar & fill_value, at::TensorOptions options = {}) {
+     330          694 :   at::AutoDispatchBelowADInplaceOrView guard;
+     331         1388 :   return autograd::make_variable(at::full(size, fill_value, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     332          694 : }
+     333              : inline at::Tensor full_symint(c10::SymIntArrayRef size, const at::Scalar & fill_value, at::TensorOptions options = {}) {
+     334              :   at::AutoDispatchBelowADInplaceOrView guard;
+     335              :   return autograd::make_variable(at::full_symint(size, fill_value, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     336              : }
+     337              : inline at::Tensor full_like(const at::Tensor & self, const at::Scalar & fill_value, at::TensorOptions options = {}, c10::optional<at::MemoryFormat> memory_format = c10::nullopt) {
+     338              :   at::AutoDispatchBelowADInplaceOrView guard;
+     339              :   return autograd::make_variable(at::full_like(self, fill_value, at::TensorOptions(options).requires_grad(c10::nullopt), memory_format), /*requires_grad=*/options.requires_grad());
+     340              : }
+     341              : inline at::Tensor from_file(c10::string_view filename, c10::optional<bool> shared = c10::nullopt, c10::optional<int64_t> size = 0, at::TensorOptions options = {}) {
+     342              :   at::AutoDispatchBelowADInplaceOrView guard;
+     343              :   return autograd::make_variable(at::from_file(filename, shared, size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     344              : }
+     345              : inline at::Tensor hann_window(int64_t window_length, at::TensorOptions options = {}) {
+     346              :   at::AutoDispatchBelowADInplaceOrView guard;
+     347              :   return autograd::make_variable(at::hann_window(window_length, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     348              : }
+     349              : inline at::Tensor hann_window(int64_t window_length, bool periodic, at::TensorOptions options = {}) {
+     350              :   at::AutoDispatchBelowADInplaceOrView guard;
+     351              :   return autograd::make_variable(at::hann_window(window_length, periodic, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     352              : }
+     353              : inline at::Tensor hamming_window(int64_t window_length, at::TensorOptions options = {}) {
+     354              :   at::AutoDispatchBelowADInplaceOrView guard;
+     355              :   return autograd::make_variable(at::hamming_window(window_length, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     356              : }
+     357              : inline at::Tensor hamming_window(int64_t window_length, bool periodic, at::TensorOptions options = {}) {
+     358              :   at::AutoDispatchBelowADInplaceOrView guard;
+     359              :   return autograd::make_variable(at::hamming_window(window_length, periodic, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     360              : }
+     361              : inline at::Tensor hamming_window(int64_t window_length, bool periodic, double alpha, at::TensorOptions options = {}) {
+     362              :   at::AutoDispatchBelowADInplaceOrView guard;
+     363              :   return autograd::make_variable(at::hamming_window(window_length, periodic, alpha, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     364              : }
+     365              : inline at::Tensor hamming_window(int64_t window_length, bool periodic, double alpha, double beta, at::TensorOptions options = {}) {
+     366              :   at::AutoDispatchBelowADInplaceOrView guard;
+     367              :   return autograd::make_variable(at::hamming_window(window_length, periodic, alpha, beta, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     368              : }
+     369              : inline at::Tensor kaiser_window(int64_t window_length, at::TensorOptions options = {}) {
+     370              :   at::AutoDispatchBelowADInplaceOrView guard;
+     371              :   return autograd::make_variable(at::kaiser_window(window_length, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     372              : }
+     373              : inline at::Tensor kaiser_window(int64_t window_length, bool periodic, at::TensorOptions options = {}) {
+     374              :   at::AutoDispatchBelowADInplaceOrView guard;
+     375              :   return autograd::make_variable(at::kaiser_window(window_length, periodic, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     376              : }
+     377              : inline at::Tensor kaiser_window(int64_t window_length, bool periodic, double beta, at::TensorOptions options = {}) {
+     378              :   at::AutoDispatchBelowADInplaceOrView guard;
+     379              :   return autograd::make_variable(at::kaiser_window(window_length, periodic, beta, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     380              : }
+     381              : inline at::Tensor linspace(const at::Scalar & start, const at::Scalar & end, int64_t steps, at::TensorOptions options = {}) {
+     382              :   at::AutoDispatchBelowADInplaceOrView guard;
+     383              :   return autograd::make_variable(at::linspace(start, end, steps, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     384              : }
+     385              : inline at::Tensor logspace(const at::Scalar & start, const at::Scalar & end, int64_t steps, double base = 10.0, at::TensorOptions options = {}) {
+     386              :   at::AutoDispatchBelowADInplaceOrView guard;
+     387              :   return autograd::make_variable(at::logspace(start, end, steps, base, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     388              : }
+     389              : inline at::Tensor ones(at::IntArrayRef size, c10::optional<at::DimnameList> names, at::TensorOptions options = {}) {
+     390              :   at::AutoDispatchBelowADInplaceOrView guard;
+     391              :   return autograd::make_variable(at::ones(size, names, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     392              : }
+     393              : inline at::Tensor ones(at::IntArrayRef size, at::TensorOptions options = {}) {
+     394              :   at::AutoDispatchBelowADInplaceOrView guard;
+     395              :   return autograd::make_variable(at::ones(size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     396              : }
+     397              : inline at::Tensor ones_symint(c10::SymIntArrayRef size, at::TensorOptions options = {}) {
+     398              :   at::AutoDispatchBelowADInplaceOrView guard;
+     399              :   return autograd::make_variable(at::ones_symint(size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     400              : }
+     401              : inline at::Tensor ones_like(const at::Tensor & self, at::TensorOptions options = {}, c10::optional<at::MemoryFormat> memory_format = c10::nullopt) {
+     402              :   at::AutoDispatchBelowADInplaceOrView guard;
+     403              :   return autograd::make_variable(at::ones_like(self, at::TensorOptions(options).requires_grad(c10::nullopt), memory_format), /*requires_grad=*/options.requires_grad());
+     404              : }
+     405              : inline at::Tensor scalar_tensor(const at::Scalar & s, at::TensorOptions options = {}) {
+     406              :   at::AutoDispatchBelowADInplaceOrView guard;
+     407              :   return autograd::make_variable(at::scalar_tensor(s, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     408              : }
+     409              : inline at::Tensor rand(at::IntArrayRef size, c10::optional<at::DimnameList> names, at::TensorOptions options = {}) {
+     410              :   at::AutoDispatchBelowADInplaceOrView guard;
+     411              :   return autograd::make_variable(at::rand(size, names, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     412              : }
+     413              : inline at::Tensor rand_symint(c10::SymIntArrayRef size, c10::optional<at::DimnameList> names, at::TensorOptions options = {}) {
+     414              :   at::AutoDispatchBelowADInplaceOrView guard;
+     415              :   return autograd::make_variable(at::rand_symint(size, names, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     416              : }
+     417              : inline at::Tensor rand(at::IntArrayRef size, c10::optional<at::Generator> generator, c10::optional<at::DimnameList> names, at::TensorOptions options = {}) {
+     418              :   at::AutoDispatchBelowADInplaceOrView guard;
+     419              :   return autograd::make_variable(at::rand(size, generator, names, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     420              : }
+     421              : inline at::Tensor rand_symint(c10::SymIntArrayRef size, c10::optional<at::Generator> generator, c10::optional<at::DimnameList> names, at::TensorOptions options = {}) {
+     422              :   at::AutoDispatchBelowADInplaceOrView guard;
+     423              :   return autograd::make_variable(at::rand_symint(size, generator, names, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     424              : }
+     425              : inline at::Tensor rand(at::IntArrayRef size, at::TensorOptions options = {}) {
+     426              :   at::AutoDispatchBelowADInplaceOrView guard;
+     427              :   return autograd::make_variable(at::rand(size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     428              : }
+     429              : inline at::Tensor rand_symint(c10::SymIntArrayRef size, at::TensorOptions options = {}) {
+     430              :   at::AutoDispatchBelowADInplaceOrView guard;
+     431              :   return autograd::make_variable(at::rand_symint(size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     432              : }
+     433              : inline at::Tensor rand(at::IntArrayRef size, c10::optional<at::Generator> generator, at::TensorOptions options = {}) {
+     434              :   at::AutoDispatchBelowADInplaceOrView guard;
+     435              :   return autograd::make_variable(at::rand(size, generator, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     436              : }
+     437              : inline at::Tensor rand_symint(c10::SymIntArrayRef size, c10::optional<at::Generator> generator, at::TensorOptions options = {}) {
+     438              :   at::AutoDispatchBelowADInplaceOrView guard;
+     439              :   return autograd::make_variable(at::rand_symint(size, generator, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     440              : }
+     441              : inline at::Tensor rand_like(const at::Tensor & self, at::TensorOptions options = {}, c10::optional<at::MemoryFormat> memory_format = c10::nullopt) {
+     442              :   at::AutoDispatchBelowADInplaceOrView guard;
+     443              :   return autograd::make_variable(at::rand_like(self, at::TensorOptions(options).requires_grad(c10::nullopt), memory_format), /*requires_grad=*/options.requires_grad());
+     444              : }
+     445              : inline at::Tensor randint(int64_t high, at::IntArrayRef size, at::TensorOptions options = at::kLong) {
+     446              :   at::AutoDispatchBelowADInplaceOrView guard;
+     447              :   return autograd::make_variable(at::randint(high, size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     448              : }
+     449              : inline at::Tensor randint_symint(c10::SymInt high, c10::SymIntArrayRef size, at::TensorOptions options = at::kLong) {
+     450              :   at::AutoDispatchBelowADInplaceOrView guard;
+     451              :   return autograd::make_variable(at::randint_symint(high, size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     452              : }
+     453              : inline at::Tensor randint(int64_t high, at::IntArrayRef size, c10::optional<at::Generator> generator, at::TensorOptions options = at::kLong) {
+     454              :   at::AutoDispatchBelowADInplaceOrView guard;
+     455              :   return autograd::make_variable(at::randint(high, size, generator, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     456              : }
+     457              : inline at::Tensor randint_symint(c10::SymInt high, c10::SymIntArrayRef size, c10::optional<at::Generator> generator, at::TensorOptions options = at::kLong) {
+     458              :   at::AutoDispatchBelowADInplaceOrView guard;
+     459              :   return autograd::make_variable(at::randint_symint(high, size, generator, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     460              : }
+     461              : inline at::Tensor randint(int64_t low, int64_t high, at::IntArrayRef size, at::TensorOptions options = at::kLong) {
+     462              :   at::AutoDispatchBelowADInplaceOrView guard;
+     463              :   return autograd::make_variable(at::randint(low, high, size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     464              : }
+     465              : inline at::Tensor randint_symint(c10::SymInt low, c10::SymInt high, c10::SymIntArrayRef size, at::TensorOptions options = at::kLong) {
+     466              :   at::AutoDispatchBelowADInplaceOrView guard;
+     467              :   return autograd::make_variable(at::randint_symint(low, high, size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     468              : }
+     469              : inline at::Tensor randint(int64_t low, int64_t high, at::IntArrayRef size, c10::optional<at::Generator> generator, at::TensorOptions options = at::kLong) {
+     470              :   at::AutoDispatchBelowADInplaceOrView guard;
+     471              :   return autograd::make_variable(at::randint(low, high, size, generator, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     472              : }
+     473              : inline at::Tensor randint_symint(c10::SymInt low, c10::SymInt high, c10::SymIntArrayRef size, c10::optional<at::Generator> generator, at::TensorOptions options = at::kLong) {
+     474              :   at::AutoDispatchBelowADInplaceOrView guard;
+     475              :   return autograd::make_variable(at::randint_symint(low, high, size, generator, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     476              : }
+     477              : inline at::Tensor randint_like(const at::Tensor & self, int64_t high, at::TensorOptions options = {}, c10::optional<at::MemoryFormat> memory_format = c10::nullopt) {
+     478              :   at::AutoDispatchBelowADInplaceOrView guard;
+     479              :   return autograd::make_variable(at::randint_like(self, high, at::TensorOptions(options).requires_grad(c10::nullopt), memory_format), /*requires_grad=*/options.requires_grad());
+     480              : }
+     481              : inline at::Tensor randint_like_symint(const at::Tensor & self, c10::SymInt high, at::TensorOptions options = {}, c10::optional<at::MemoryFormat> memory_format = c10::nullopt) {
+     482              :   at::AutoDispatchBelowADInplaceOrView guard;
+     483              :   return autograd::make_variable(at::randint_like_symint(self, high, at::TensorOptions(options).requires_grad(c10::nullopt), memory_format), /*requires_grad=*/options.requires_grad());
+     484              : }
+     485              : inline at::Tensor randint_like(const at::Tensor & self, int64_t low, int64_t high, at::TensorOptions options = {}, c10::optional<at::MemoryFormat> memory_format = c10::nullopt) {
+     486              :   at::AutoDispatchBelowADInplaceOrView guard;
+     487              :   return autograd::make_variable(at::randint_like(self, low, high, at::TensorOptions(options).requires_grad(c10::nullopt), memory_format), /*requires_grad=*/options.requires_grad());
+     488              : }
+     489              : inline at::Tensor randint_like_symint(const at::Tensor & self, c10::SymInt low, c10::SymInt high, at::TensorOptions options = {}, c10::optional<at::MemoryFormat> memory_format = c10::nullopt) {
+     490              :   at::AutoDispatchBelowADInplaceOrView guard;
+     491              :   return autograd::make_variable(at::randint_like_symint(self, low, high, at::TensorOptions(options).requires_grad(c10::nullopt), memory_format), /*requires_grad=*/options.requires_grad());
+     492              : }
+     493              : inline at::Tensor randn(at::IntArrayRef size, at::TensorOptions options = {}) {
+     494              :   at::AutoDispatchBelowADInplaceOrView guard;
+     495              :   return autograd::make_variable(at::randn(size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     496              : }
+     497              : inline at::Tensor randn_symint(c10::SymIntArrayRef size, at::TensorOptions options = {}) {
+     498              :   at::AutoDispatchBelowADInplaceOrView guard;
+     499              :   return autograd::make_variable(at::randn_symint(size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     500              : }
+     501              : inline at::Tensor randn(at::IntArrayRef size, c10::optional<at::Generator> generator, at::TensorOptions options = {}) {
+     502              :   at::AutoDispatchBelowADInplaceOrView guard;
+     503              :   return autograd::make_variable(at::randn(size, generator, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     504              : }
+     505              : inline at::Tensor randn_symint(c10::SymIntArrayRef size, c10::optional<at::Generator> generator, at::TensorOptions options = {}) {
+     506              :   at::AutoDispatchBelowADInplaceOrView guard;
+     507              :   return autograd::make_variable(at::randn_symint(size, generator, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     508              : }
+     509              : inline at::Tensor randn(at::IntArrayRef size, c10::optional<at::DimnameList> names, at::TensorOptions options = {}) {
+     510              :   at::AutoDispatchBelowADInplaceOrView guard;
+     511              :   return autograd::make_variable(at::randn(size, names, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     512              : }
+     513              : inline at::Tensor randn_symint(c10::SymIntArrayRef size, c10::optional<at::DimnameList> names, at::TensorOptions options = {}) {
+     514              :   at::AutoDispatchBelowADInplaceOrView guard;
+     515              :   return autograd::make_variable(at::randn_symint(size, names, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     516              : }
+     517              : inline at::Tensor randn(at::IntArrayRef size, c10::optional<at::Generator> generator, c10::optional<at::DimnameList> names, at::TensorOptions options = {}) {
+     518              :   at::AutoDispatchBelowADInplaceOrView guard;
+     519              :   return autograd::make_variable(at::randn(size, generator, names, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     520              : }
+     521              : inline at::Tensor randn_symint(c10::SymIntArrayRef size, c10::optional<at::Generator> generator, c10::optional<at::DimnameList> names, at::TensorOptions options = {}) {
+     522              :   at::AutoDispatchBelowADInplaceOrView guard;
+     523              :   return autograd::make_variable(at::randn_symint(size, generator, names, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     524              : }
+     525              : inline at::Tensor randn_like(const at::Tensor & self, at::TensorOptions options = {}, c10::optional<at::MemoryFormat> memory_format = c10::nullopt) {
+     526              :   at::AutoDispatchBelowADInplaceOrView guard;
+     527              :   return autograd::make_variable(at::randn_like(self, at::TensorOptions(options).requires_grad(c10::nullopt), memory_format), /*requires_grad=*/options.requires_grad());
+     528              : }
+     529              : inline at::Tensor randperm(int64_t n, at::TensorOptions options = at::kLong) {
+     530              :   at::AutoDispatchBelowADInplaceOrView guard;
+     531              :   return autograd::make_variable(at::randperm(n, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     532              : }
+     533              : inline at::Tensor randperm_symint(c10::SymInt n, at::TensorOptions options = at::kLong) {
+     534              :   at::AutoDispatchBelowADInplaceOrView guard;
+     535              :   return autograd::make_variable(at::randperm_symint(n, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     536              : }
+     537              : inline at::Tensor randperm(int64_t n, c10::optional<at::Generator> generator, at::TensorOptions options = at::kLong) {
+     538              :   at::AutoDispatchBelowADInplaceOrView guard;
+     539              :   return autograd::make_variable(at::randperm(n, generator, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     540              : }
+     541              : inline at::Tensor randperm_symint(c10::SymInt n, c10::optional<at::Generator> generator, at::TensorOptions options = at::kLong) {
+     542              :   at::AutoDispatchBelowADInplaceOrView guard;
+     543              :   return autograd::make_variable(at::randperm_symint(n, generator, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     544              : }
+     545              : inline at::Tensor range(const at::Scalar & start, const at::Scalar & end, const at::Scalar & step = 1, at::TensorOptions options = {}) {
+     546              :   at::AutoDispatchBelowADInplaceOrView guard;
+     547              :   return autograd::make_variable(at::range(start, end, step, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     548              : }
+     549              : inline at::Tensor range(const at::Scalar & start, const at::Scalar & end, at::TensorOptions options = {}) {
+     550              :   at::AutoDispatchBelowADInplaceOrView guard;
+     551              :   return autograd::make_variable(at::range(start, end, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     552              : }
+     553              : inline at::Tensor zeros(at::IntArrayRef size, c10::optional<at::DimnameList> names, at::TensorOptions options = {}) {
+     554              :   at::AutoDispatchBelowADInplaceOrView guard;
+     555              :   return autograd::make_variable(at::zeros(size, names, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     556              : }
+     557              : inline at::Tensor _efficientzerotensor(at::IntArrayRef size, at::TensorOptions options = {}) {
+     558              :   at::AutoDispatchBelowADInplaceOrView guard;
+     559              :   return autograd::make_variable(at::_efficientzerotensor(size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     560              : }
+     561              : inline at::Tensor _efficientzerotensor_symint(c10::SymIntArrayRef size, at::TensorOptions options = {}) {
+     562              :   at::AutoDispatchBelowADInplaceOrView guard;
+     563              :   return autograd::make_variable(at::_efficientzerotensor_symint(size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     564              : }
+     565        16680 : inline at::Tensor zeros(at::IntArrayRef size, at::TensorOptions options = {}) {
+     566        16680 :   at::AutoDispatchBelowADInplaceOrView guard;
+     567        33360 :   return autograd::make_variable(at::zeros(size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     568        16680 : }
+     569              : inline at::Tensor zeros_symint(c10::SymIntArrayRef size, at::TensorOptions options = {}) {
+     570              :   at::AutoDispatchBelowADInplaceOrView guard;
+     571              :   return autograd::make_variable(at::zeros_symint(size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     572              : }
+     573           84 : inline at::Tensor zeros_like(const at::Tensor & self, at::TensorOptions options = {}, c10::optional<at::MemoryFormat> memory_format = c10::nullopt) {
+     574           84 :   at::AutoDispatchBelowADInplaceOrView guard;
+     575          168 :   return autograd::make_variable(at::zeros_like(self, at::TensorOptions(options).requires_grad(c10::nullopt), memory_format), /*requires_grad=*/options.requires_grad());
+     576           84 : }
+     577              : inline at::Tensor sparse_compressed_tensor(const at::Tensor & compressed_indices, const at::Tensor & plain_indices, const at::Tensor & values, at::IntArrayRef size, at::TensorOptions options) {
+     578              :   at::AutoDispatchBelowADInplaceOrView guard;
+     579              :   return autograd::make_variable(at::sparse_compressed_tensor(compressed_indices, plain_indices, values, size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     580              : }
+     581              : inline at::Tensor sparse_csr_tensor(const at::Tensor & crow_indices, const at::Tensor & col_indices, const at::Tensor & values, at::IntArrayRef size, at::TensorOptions options) {
+     582              :   at::AutoDispatchBelowADInplaceOrView guard;
+     583              :   return autograd::make_variable(at::sparse_csr_tensor(crow_indices, col_indices, values, size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     584              : }
+     585              : inline at::Tensor sparse_csc_tensor(const at::Tensor & ccol_indices, const at::Tensor & row_indices, const at::Tensor & values, at::IntArrayRef size, at::TensorOptions options) {
+     586              :   at::AutoDispatchBelowADInplaceOrView guard;
+     587              :   return autograd::make_variable(at::sparse_csc_tensor(ccol_indices, row_indices, values, size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     588              : }
+     589              : inline at::Tensor sparse_bsr_tensor(const at::Tensor & crow_indices, const at::Tensor & col_indices, const at::Tensor & values, at::IntArrayRef size, at::TensorOptions options) {
+     590              :   at::AutoDispatchBelowADInplaceOrView guard;
+     591              :   return autograd::make_variable(at::sparse_bsr_tensor(crow_indices, col_indices, values, size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     592              : }
+     593              : inline at::Tensor sparse_bsc_tensor(const at::Tensor & ccol_indices, const at::Tensor & row_indices, const at::Tensor & values, at::IntArrayRef size, at::TensorOptions options) {
+     594              :   at::AutoDispatchBelowADInplaceOrView guard;
+     595              :   return autograd::make_variable(at::sparse_bsc_tensor(ccol_indices, row_indices, values, size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     596              : }
+     597              : inline at::Tensor sparse_compressed_tensor(const at::Tensor & compressed_indices, const at::Tensor & plain_indices, const at::Tensor & values, at::TensorOptions options) {
+     598              :   at::AutoDispatchBelowADInplaceOrView guard;
+     599              :   return autograd::make_variable(at::sparse_compressed_tensor(compressed_indices, plain_indices, values, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     600              : }
+     601              : inline at::Tensor sparse_csr_tensor(const at::Tensor & crow_indices, const at::Tensor & col_indices, const at::Tensor & values, at::TensorOptions options) {
+     602              :   at::AutoDispatchBelowADInplaceOrView guard;
+     603              :   return autograd::make_variable(at::sparse_csr_tensor(crow_indices, col_indices, values, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     604              : }
+     605              : inline at::Tensor sparse_csc_tensor(const at::Tensor & ccol_indices, const at::Tensor & row_indices, const at::Tensor & values, at::TensorOptions options) {
+     606              :   at::AutoDispatchBelowADInplaceOrView guard;
+     607              :   return autograd::make_variable(at::sparse_csc_tensor(ccol_indices, row_indices, values, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     608              : }
+     609              : inline at::Tensor sparse_bsr_tensor(const at::Tensor & crow_indices, const at::Tensor & col_indices, const at::Tensor & values, at::TensorOptions options) {
+     610              :   at::AutoDispatchBelowADInplaceOrView guard;
+     611              :   return autograd::make_variable(at::sparse_bsr_tensor(crow_indices, col_indices, values, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     612              : }
+     613              : inline at::Tensor sparse_bsc_tensor(const at::Tensor & ccol_indices, const at::Tensor & row_indices, const at::Tensor & values, at::TensorOptions options) {
+     614              :   at::AutoDispatchBelowADInplaceOrView guard;
+     615              :   return autograd::make_variable(at::sparse_bsc_tensor(ccol_indices, row_indices, values, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     616              : }
+     617              : inline at::Tensor _sparse_compressed_tensor_unsafe(const at::Tensor & compressed_indices, const at::Tensor & plain_indices, const at::Tensor & values, at::IntArrayRef size, at::TensorOptions options = {}) {
+     618              :   at::AutoDispatchBelowADInplaceOrView guard;
+     619              :   return autograd::make_variable(at::_sparse_compressed_tensor_unsafe(compressed_indices, plain_indices, values, size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     620              : }
+     621              : inline at::Tensor _sparse_csr_tensor_unsafe(const at::Tensor & crow_indices, const at::Tensor & col_indices, const at::Tensor & values, at::IntArrayRef size, at::TensorOptions options = {}) {
+     622              :   at::AutoDispatchBelowADInplaceOrView guard;
+     623              :   return autograd::make_variable(at::_sparse_csr_tensor_unsafe(crow_indices, col_indices, values, size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     624              : }
+     625              : inline at::Tensor _sparse_csc_tensor_unsafe(const at::Tensor & ccol_indices, const at::Tensor & row_indices, const at::Tensor & values, at::IntArrayRef size, at::TensorOptions options = {}) {
+     626              :   at::AutoDispatchBelowADInplaceOrView guard;
+     627              :   return autograd::make_variable(at::_sparse_csc_tensor_unsafe(ccol_indices, row_indices, values, size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     628              : }
+     629              : inline at::Tensor _sparse_bsr_tensor_unsafe(const at::Tensor & crow_indices, const at::Tensor & col_indices, const at::Tensor & values, at::IntArrayRef size, at::TensorOptions options = {}) {
+     630              :   at::AutoDispatchBelowADInplaceOrView guard;
+     631              :   return autograd::make_variable(at::_sparse_bsr_tensor_unsafe(crow_indices, col_indices, values, size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     632              : }
+     633              : inline at::Tensor _sparse_bsc_tensor_unsafe(const at::Tensor & ccol_indices, const at::Tensor & row_indices, const at::Tensor & values, at::IntArrayRef size, at::TensorOptions options = {}) {
+     634              :   at::AutoDispatchBelowADInplaceOrView guard;
+     635              :   return autograd::make_variable(at::_sparse_bsc_tensor_unsafe(ccol_indices, row_indices, values, size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     636              : }
+     637              : inline at::Tensor sparse_coo_tensor(at::IntArrayRef size, at::TensorOptions options) {
+     638              :   at::AutoDispatchBelowADInplaceOrView guard;
+     639              :   return autograd::make_variable(at::sparse_coo_tensor(size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     640              : }
+     641              : inline at::Tensor sparse_coo_tensor(const at::Tensor & indices, const at::Tensor & values, at::TensorOptions options = {}, c10::optional<bool> is_coalesced = c10::nullopt) {
+     642              :   at::AutoDispatchBelowADInplaceOrView guard;
+     643              :   return autograd::make_variable(at::sparse_coo_tensor(indices, values, at::TensorOptions(options).requires_grad(c10::nullopt), is_coalesced), /*requires_grad=*/options.requires_grad());
+     644              : }
+     645              : inline at::Tensor sparse_coo_tensor(const at::Tensor & indices, const at::Tensor & values, at::IntArrayRef size, at::TensorOptions options = {}, c10::optional<bool> is_coalesced = c10::nullopt) {
+     646              :   at::AutoDispatchBelowADInplaceOrView guard;
+     647              :   return autograd::make_variable(at::sparse_coo_tensor(indices, values, size, at::TensorOptions(options).requires_grad(c10::nullopt), is_coalesced), /*requires_grad=*/options.requires_grad());
+     648              : }
+     649              : inline at::Tensor _sparse_coo_tensor_unsafe(const at::Tensor & indices, const at::Tensor & values, at::IntArrayRef size, at::TensorOptions options = {}, c10::optional<bool> is_coalesced = c10::nullopt) {
+     650              :   at::AutoDispatchBelowADInplaceOrView guard;
+     651              :   return autograd::make_variable(at::_sparse_coo_tensor_unsafe(indices, values, size, at::TensorOptions(options).requires_grad(c10::nullopt), is_coalesced), /*requires_grad=*/options.requires_grad());
+     652              : }
+     653              : inline at::Tensor _sparse_coo_tensor_unsafe_symint(const at::Tensor & indices, const at::Tensor & values, c10::SymIntArrayRef size, at::TensorOptions options = {}, c10::optional<bool> is_coalesced = c10::nullopt) {
+     654              :   at::AutoDispatchBelowADInplaceOrView guard;
+     655              :   return autograd::make_variable(at::_sparse_coo_tensor_unsafe_symint(indices, values, size, at::TensorOptions(options).requires_grad(c10::nullopt), is_coalesced), /*requires_grad=*/options.requires_grad());
+     656              : }
+     657              : inline at::Tensor _sparse_coo_tensor_with_dims(int64_t sparse_dim, int64_t dense_dim, at::IntArrayRef size, at::TensorOptions options) {
+     658              :   at::AutoDispatchBelowADInplaceOrView guard;
+     659              :   return autograd::make_variable(at::_sparse_coo_tensor_with_dims(sparse_dim, dense_dim, size, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     660              : }
+     661              : inline at::Tensor _sparse_coo_tensor_with_dims_and_tensors(int64_t sparse_dim, int64_t dense_dim, at::IntArrayRef size, const at::Tensor & indices, const at::Tensor & values, at::TensorOptions options, c10::optional<bool> is_coalesced = c10::nullopt) {
+     662              :   at::AutoDispatchBelowADInplaceOrView guard;
+     663              :   return autograd::make_variable(at::_sparse_coo_tensor_with_dims_and_tensors(sparse_dim, dense_dim, size, indices, values, at::TensorOptions(options).requires_grad(c10::nullopt), is_coalesced), /*requires_grad=*/options.requires_grad());
+     664              : }
+     665              : inline at::Tensor _sparse_coo_tensor_with_dims_and_tensors_symint(int64_t sparse_dim, int64_t dense_dim, c10::SymIntArrayRef size, const at::Tensor & indices, const at::Tensor & values, at::TensorOptions options, c10::optional<bool> is_coalesced = c10::nullopt) {
+     666              :   at::AutoDispatchBelowADInplaceOrView guard;
+     667              :   return autograd::make_variable(at::_sparse_coo_tensor_with_dims_and_tensors_symint(sparse_dim, dense_dim, size, indices, values, at::TensorOptions(options).requires_grad(c10::nullopt), is_coalesced), /*requires_grad=*/options.requires_grad());
+     668              : }
+     669              : inline at::Tensor _to_copy(const at::Tensor & self, at::TensorOptions options = {}, bool non_blocking = false, c10::optional<at::MemoryFormat> memory_format = c10::nullopt) {
+     670              :   at::AutoDispatchBelowADInplaceOrView guard;
+     671              :   return autograd::make_variable(at::_to_copy(self, at::TensorOptions(options).requires_grad(c10::nullopt), non_blocking, memory_format), /*requires_grad=*/options.requires_grad());
+     672              : }
+     673              : inline at::Tensor tril_indices(int64_t row, int64_t col, int64_t offset = 0, at::TensorOptions options = at::kLong) {
+     674              :   at::AutoDispatchBelowADInplaceOrView guard;
+     675              :   return autograd::make_variable(at::tril_indices(row, col, offset, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     676              : }
+     677           68 : inline at::Tensor triu_indices(int64_t row, int64_t col, int64_t offset = 0, at::TensorOptions options = at::kLong) {
+     678           68 :   at::AutoDispatchBelowADInplaceOrView guard;
+     679          136 :   return autograd::make_variable(at::triu_indices(row, col, offset, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     680           68 : }
+     681              : inline at::Tensor normal(double mean, double std, at::IntArrayRef size, c10::optional<at::Generator> generator = c10::nullopt, at::TensorOptions options = {}) {
+     682              :   at::AutoDispatchBelowADInplaceOrView guard;
+     683              :   return autograd::make_variable(at::normal(mean, std, size, generator, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     684              : }
+     685              : inline at::Tensor normal_symint(double mean, double std, c10::SymIntArrayRef size, c10::optional<at::Generator> generator = c10::nullopt, at::TensorOptions options = {}) {
+     686              :   at::AutoDispatchBelowADInplaceOrView guard;
+     687              :   return autograd::make_variable(at::normal_symint(mean, std, size, generator, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     688              : }
+     689              : inline at::Tensor fft_fftfreq(int64_t n, double d = 1.0, at::TensorOptions options = {}) {
+     690              :   at::AutoDispatchBelowADInplaceOrView guard;
+     691              :   return autograd::make_variable(at::fft_fftfreq(n, d, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     692              : }
+     693              : inline at::Tensor fft_rfftfreq(int64_t n, double d = 1.0, at::TensorOptions options = {}) {
+     694              :   at::AutoDispatchBelowADInplaceOrView guard;
+     695              :   return autograd::make_variable(at::fft_rfftfreq(n, d, at::TensorOptions(options).requires_grad(c10::nullopt)), /*requires_grad=*/options.requires_grad());
+     696              : }
+     697              : 
+     698              : } // namespace torch
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/autograd/index-sort-f.html b/html/libtorch/include/torch/csrc/autograd/index-sort-f.html new file mode 100644 index 0000000..f804760 --- /dev/null +++ b/html/libtorch/include/torch/csrc/autograd/index-sort-f.html @@ -0,0 +1,117 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/autograd + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/autogradCoverageTotalHit
Test:coverage.infoLines:44.4 %3616
Test Date:2024-04-30 13:17:26Functions:20.0 %51
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
edge.h +
0.0%
+
0.0 %10.0 %1
variable.h +
45.7%45.7%
+
45.7 %351625.0 %41
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/autograd/index-sort-l.html b/html/libtorch/include/torch/csrc/autograd/index-sort-l.html new file mode 100644 index 0000000..f1916d0 --- /dev/null +++ b/html/libtorch/include/torch/csrc/autograd/index-sort-l.html @@ -0,0 +1,117 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/autograd + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/autogradCoverageTotalHit
Test:coverage.infoLines:44.4 %3616
Test Date:2024-04-30 13:17:26Functions:20.0 %51
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
edge.h +
0.0%
+
0.0 %10.0 %1
variable.h +
45.7%45.7%
+
45.7 %351625.0 %41
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/autograd/index.html b/html/libtorch/include/torch/csrc/autograd/index.html new file mode 100644 index 0000000..a2c0cfd --- /dev/null +++ b/html/libtorch/include/torch/csrc/autograd/index.html @@ -0,0 +1,117 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/autograd + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/autogradCoverageTotalHit
Test:coverage.infoLines:44.4 %3616
Test Date:2024-04-30 13:17:26Functions:20.0 %51
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
edge.h +
0.0%
+
0.0 %10.0 %1
variable.h +
45.7%45.7%
+
45.7 %351625.0 %41
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/autograd/variable.h.func-c.html b/html/libtorch/include/torch/csrc/autograd/variable.h.func-c.html new file mode 100644 index 0000000..53db441 --- /dev/null +++ b/html/libtorch/include/torch/csrc/autograd/variable.h.func-c.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/autograd/variable.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/autograd - variable.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:45.7 %3516
Test Date:2024-04-30 13:17:26Functions:25.0 %41
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5torch8autograd12AutogradMeta17set_requires_gradEbPN3c1010TensorImplE0
_ZN5torch8autograd12AutogradMetaC2EPN3c1010TensorImplEbNS0_4EdgeE0
_ZN5torch8autogradL20isDifferentiableTypeEN3c1010ScalarTypeE0
_ZN5torch8autograd13make_variableEN2at6TensorEbb418844
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/autograd/variable.h.func.html b/html/libtorch/include/torch/csrc/autograd/variable.h.func.html new file mode 100644 index 0000000..8367f7a --- /dev/null +++ b/html/libtorch/include/torch/csrc/autograd/variable.h.func.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/autograd/variable.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/autograd - variable.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:45.7 %3516
Test Date:2024-04-30 13:17:26Functions:25.0 %41
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN5torch8autograd12AutogradMeta17set_requires_gradEbPN3c1010TensorImplE0
_ZN5torch8autograd12AutogradMetaC2EPN3c1010TensorImplEbNS0_4EdgeE0
_ZN5torch8autograd13make_variableEN2at6TensorEbb418844
_ZN5torch8autogradL20isDifferentiableTypeEN3c1010ScalarTypeE0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/libtorch/include/torch/csrc/autograd/variable.h.gcov.html b/html/libtorch/include/torch/csrc/autograd/variable.h.gcov.html new file mode 100644 index 0000000..5054b48 --- /dev/null +++ b/html/libtorch/include/torch/csrc/autograd/variable.h.gcov.html @@ -0,0 +1,930 @@ + + + + + + + LCOV - coverage.info - libtorch/include/torch/csrc/autograd/variable.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - libtorch/include/torch/csrc/autograd - variable.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:45.7 %3516
Test Date:2024-04-30 13:17:26Functions:25.0 %41
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #pragma once
+       2              : 
+       3              : #include <torch/csrc/utils/python_stub.h>
+       4              : 
+       5              : #include <torch/csrc/Export.h>
+       6              : #include <torch/csrc/autograd/cpp_hook.h>
+       7              : #include <torch/csrc/autograd/edge.h>
+       8              : #include <torch/csrc/autograd/forward_grad.h>
+       9              : #include <torch/csrc/autograd/function_hook.h>
+      10              : 
+      11              : #include <ATen/NamedTensorUtils.h>
+      12              : #include <ATen/core/Tensor.h>
+      13              : #include <ATen/core/VariableHooksInterface.h>
+      14              : #include <c10/util/Exception.h>
+      15              : 
+      16              : #include <cstdint>
+      17              : #include <memory>
+      18              : #include <mutex>
+      19              : #include <stdexcept>
+      20              : #include <string>
+      21              : #include <utility>
+      22              : #include <vector>
+      23              : 
+      24              : namespace torch {
+      25              : namespace autograd {
+      26              : 
+      27              : /// `Variable` is exactly the same as `Tensor` (i.e. we have `using Variable =
+      28              : /// at::Tensor`). This means you can perform all the usual mathematical and
+      29              : /// other operations you can perform on `Tensor`s also on `Variable`s.
+      30              : ///
+      31              : /// The only reason we are keeping the `Variable` class is backward
+      32              : /// compatibility with external user's legacy C++ frontend code. Our intention
+      33              : /// is to eliminate the `Variable` class in the near future.
+      34              : using Variable = at::Tensor;
+      35              : 
+      36              : } // namespace autograd
+      37              : } // namespace torch
+      38              : 
+      39              : // The following are all internal APIs and should not be shown in libtorch docs.
+      40              : // Therefore, we wrap the following code with `#ifndef DOXYGEN_SHOULD_SKIP_THIS
+      41              : // ... #endif`
+      42              : 
+      43              : #ifndef DOXYGEN_SHOULD_SKIP_THIS
+      44              : 
+      45              : namespace torch {
+      46              : namespace autograd {
+      47              : 
+      48              : /// Check if this type is supported by the autograd engine.
+      49              : /// If you change this, update the doc at the top of the
+      50              : /// torch/autograd/__init__.py file and
+      51              : /// "test_set_requires_grad_only_for_continuous_types" in test/test_autograd.py
+      52            0 : static inline bool isDifferentiableType(at::ScalarType t) {
+      53            0 :   return isFloatingType(t) || isComplexType(t);
+      54              : }
+      55              : 
+      56              : struct Node;
+      57              : 
+      58              : ///~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      59              : ///                                Variable
+      60              : ///~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      61              : /// A `Variable` augments a `Tensor` with the ability to interact in our
+      62              : /// autograd machinery. Conceptually, `Variable`s travel along `Edge`s between
+      63              : /// `Node`s in the autograd graph. A `Variable` can either be a leaf, like a
+      64              : /// weight in a neural network, or an interior variable, when it is the result
+      65              : /// of an operation between variables. Every `Variable` also stores another
+      66              : /// `Variable` called its `grad` (gradient). If the variable is a leaf, its
+      67              : /// gradient will be accumulated into this variable.
+      68              : ///
+      69              : /// Every Tensor is a Variable, but sometimes we colloquially refer to Variables
+      70              : /// that don't require gradients as Tensors (since none of the autograd
+      71              : /// machinery for Variables applies).  Historically, Variables and Tensors
+      72              : /// were separate concepts, but now they are exactly the same (i.e. we have
+      73              : /// `using Variable = at::Tensor`).
+      74              : ///
+      75              : ///                              Gradient Edges
+      76              : ///~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      77              : /// Furthermore, `Variable`s have the notion of a `gradient_edge`, which is the
+      78              : /// edge in the autograd graph that connects the variable to a particular input
+      79              : /// of the gradient function that will be invoked with the variable during the
+      80              : /// backward pass. More precisely, this gradient function can be one of two
+      81              : /// things:
+      82              : /// 1. A `grad_fn`, if the variable is in the interior of the graph. This is the
+      83              : ///    gradient of the function that produced the variable.
+      84              : /// 2. A `grad_accumulator`, if the variable is a leaf, which accumulates a
+      85              : ///    scalar gradient value into its `grad` variable.
+      86              : ///
+      87              : ///                               Versioning
+      88              : ///~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      89              : /// Another major feature of `Variable`s are *versions*. Versions are
+      90              : /// incremented when an in-place mutation of a variable occurs. Versions are
+      91              : /// useful when constructing `SavedVariable`s, which take a snapshot of a
+      92              : /// `Variable` at a certain version. You can retrieve a `Variable`'s version
+      93              : /// through its `current_version()` method.
+      94              : ///
+      95              : ///                                 Views
+      96              : ///~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      97              : /// It is possible for a  `Variable` to be a *view* of another `Variable`, in
+      98              : /// which case it tracks that `Variable`'s data and autograd history. Beyond
+      99              : /// construction, the interface of a view is identical to that of a regular
+     100              : /// `Variable`. You can determine whether `Variable` is in fact a view by
+     101              : /// probing its `is_view()` method. Note that the *view* semantics are only
+     102              : /// meaningful for `Variable` relations that are relevant to autograd.
+     103              : /// See NOTE [ Autograd View Variables ] for more details.
+     104              : ///~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     105              : 
+     106              : struct AutogradMeta;
+     107              : struct DifferentiableViewMeta;
+     108              : 
+     109              : // Private-ish functions for manipulating variables; we don't want to put them
+     110              : // on Tensor proper
+     111              : namespace impl {
+     112              : 
+     113              : // WARNING: This may return a nullptr.  If you require AutogradMeta to return
+     114              : // a materialized structure, use materialize_autograd_meta instead.
+     115              : TORCH_API AutogradMeta* get_autograd_meta(const at::TensorBase&);
+     116              : 
+     117              : // WARNING: This will return a nullptr if the Tensor is not a view.
+     118              : TORCH_API DifferentiableViewMeta* get_view_autograd_meta(const at::TensorBase&);
+     119              : 
+     120              : // Returns the current autograd meta, materializing it if it was previously
+     121              : // none.  This counts as a *mutating* operation, so do not call it on
+     122              : // "read-only" operators; in particular, this is NOT thread safe
+     123              : TORCH_API AutogradMeta* materialize_autograd_meta(const at::TensorBase&);
+     124              : 
+     125              : /// Set the gradient accumulator of the `Variable`. This is only applicable to
+     126              : /// leaf variables. Interior variables should call `set_gradient_edge()`.
+     127              : TORCH_API void set_grad_accumulator(
+     128              :     const Variable&,
+     129              :     std::weak_ptr<Node> grad_accumulator);
+     130              : 
+     131              : /// Attempts to get a pointer to the gradient accumulator of the `Variable`,
+     132              : /// if it still exists. If the gradient accumulator function has been
+     133              : /// destroyed, returns a `nullptr`.
+     134              : TORCH_API std::shared_ptr<Node> try_get_grad_accumulator(const Variable&);
+     135              : 
+     136              : /// Gets the gradient accumulator of the `Variable` if it has one, or else
+     137              : /// create one on the fly and return it.
+     138              : TORCH_API std::shared_ptr<Node> grad_accumulator(const Variable&);
+     139              : 
+     140              : /// Returns the "canonical" gradient edge of this `Variable`, i.e. either the
+     141              : /// gradient function if this is an interior `Variable`, or the gradient
+     142              : /// accumulator otherwise. If the `Variable` is interior, the returned `Edge`
+     143              : /// will store the input index of the `Node` to which this variable is
+     144              : /// connected in its `input_nr` field. For leaves, the `input_nr` is always
+     145              : /// zero. Note that `set_gradient_edge` and `gradient_edge` are not
+     146              : /// symmetric. You must use `set_gradient_edge` to set the `grad_fn` and
+     147              : /// `set_grad_accumulator` to set the accumulator.
+     148              : TORCH_API Edge gradient_edge(const Variable&);
+     149              : 
+     150              : /// Set the gradient edge -- i.e. `grad_fn` and `input_nr` -- of the
+     151              : /// `Variable`.
+     152              : /// NOTE: This will always set the `grad_fn`, even if this is a leaf variable,
+     153              : /// and never the `grad_accumulator`. For the latter, use
+     154              : /// `set_grad_accumulator`. This allows late construction of an interior
+     155              : /// `Variable`.
+     156              : TORCH_API void set_gradient_edge(const Variable&, Edge edge);
+     157              : 
+     158              : // Autograd Graph Interaction
+     159              : //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     160              : 
+     161              : /// Update the `grad_fn` of an existing Variable. Called after in-place
+     162              : /// modifications.
+     163              : ///
+     164              : /// For View Variables:
+     165              : /// Called after in-place modifications. Modifies the grad_fn of the base
+     166              : /// Variable.
+     167              : TORCH_API void rebase_history(const Variable&, Edge gradient_edge);
+     168              : 
+     169              : /// Gets the raw gradient function pointer, whatever it currently is.
+     170              : TORCH_API Node* grad_fn_unsafe(const Variable&);
+     171              : 
+     172              : /// Increments the version count of this `Variable`.
+     173              : TORCH_API void bump_version(const Variable&);
+     174              : TORCH_API void set_version_counter(
+     175              :     const Variable&,
+     176              :     const c10::VariableVersion& version_counter);
+     177              : 
+     178              : /// Retrieves this `Variable`s version counter.
+     179              : TORCH_API const c10::VariableVersion& version_counter(const Variable&);
+     180              : 
+     181              : TORCH_API void set_name(const Variable&, const std::string& name);
+     182              : 
+     183              : TORCH_API void add_hook(
+     184              :     const at::TensorBase&,
+     185              :     std::unique_ptr<FunctionPreHook> hook);
+     186              : TORCH_API std::vector<std::unique_ptr<FunctionPreHook>>& hooks(const Variable&);
+     187              : TORCH_API void clear_hooks(const at::TensorBase&);
+     188              : 
+     189              : TORCH_API void set_post_acc_grad_hooks(
+     190              :     const at::TensorBase&,
+     191              :     std::unique_ptr<PostAccumulateGradHook> dict);
+     192              : TORCH_API std::unique_ptr<PostAccumulateGradHook>& post_acc_grad_hooks(
+     193              :     const Variable&);
+     194              : 
+     195              : TORCH_API void create_cpp_hook(
+     196              :     const at::TensorBase&,
+     197              :     bool is_retains_grad_hooks = false);
+     198              : } // namespace impl
+     199              : 
+     200              : //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     201              : //                            AutogradMeta
+     202              : //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     203              : 
+     204              : /// Each `Variable` has one unique `AutogradMeta` struct, which stores autograd
+     205              : /// metadata fields that are necessary for tracking the Variable's autograd
+     206              : /// history. As an optimization, a Variable may store a nullptr, in lieu of a
+     207              : /// default constructed AutogradMeta.
+     208              : 
+     209              : struct TORCH_API AutogradMeta : public c10::AutogradMetaInterface {
+     210              :   std::string name_;
+     211              : 
+     212              :   Variable grad_;
+     213              :   std::shared_ptr<Node> grad_fn_;
+     214              :   std::weak_ptr<Node> grad_accumulator_;
+     215              : 
+     216              :   // This field is used to store all the forward AD gradients
+     217              :   // associated with this AutogradMeta (and the Tensor it corresponds to)
+     218              :   // There is a semantic 1:1 correspondence between AutogradMeta and
+     219              :   // ForwardGrad but:
+     220              :   //   - This field is lazily populated.
+     221              :   //   - This field is a shared_ptr but it must never be
+     222              :   //     shared by multiple Tensors. See Note [ Using ForwardGrad ]
+     223              :   // Any transition from not_initialized to initialized
+     224              :   // must be protected by mutex_
+     225              :   std::shared_ptr<ForwardGrad> fw_grad_;
+     226              : 
+     227              :   // The hooks_ field is actually reused by both python and cpp logic
+     228              :   // For both cases, we have a data structure, cpp_hooks_list_ (cpp)
+     229              :   // or dict (python) which is the canonical copy.
+     230              :   // Then, for both cases, we always register a single hook to
+     231              :   // hooks_ which wraps all the hooks in the list/dict.
+     232              :   // And, again in both cases, if the grad_fn exists on that tensor
+     233              :   // we will additionally register a single hook to the grad_fn.
+     234              :   //
+     235              :   // Note that the cpp and python use cases aren't actually aware of
+     236              :   // each other, so using both is not defined behavior.
+     237              :   std::vector<std::unique_ptr<FunctionPreHook>> hooks_;
+     238              :   std::shared_ptr<hooks_list> cpp_hooks_list_;
+     239              : 
+     240              :   // The post_acc_grad_hooks_ field stores only Python hooks
+     241              :   // (PyFunctionTensorPostAccGradHooks) that are called after the
+     242              :   // .grad field has been accumulated into. This is less complicated
+     243              :   // than the hooks_ field, which encapsulates a lot more.
+     244              :   std::unique_ptr<PostAccumulateGradHook> post_acc_grad_hooks_ = nullptr;
+     245              : 
+     246              :   // Only meaningful on leaf variables (must be false otherwise)
+     247              :   bool requires_grad_{false};
+     248              : 
+     249              :   // Only meaningful on non-leaf variables (must be false otherwise)
+     250              :   bool retains_grad_{false};
+     251              : 
+     252              :   bool is_view_{false};
+     253              : 
+     254              :   // The "output number" of this variable; e.g., if this variable
+     255              :   // was the second output of a function, then output_nr == 1.
+     256              :   // We use this to make sure we can setup the backwards trace
+     257              :   // correctly when this variable is passed to another function.
+     258              :   uint32_t output_nr_;
+     259              : 
+     260              :   // Mutex to ensure that concurrent read operations that modify internal
+     261              :   // state are still thread-safe. Used by grad_fn(), grad_accumulator(),
+     262              :   // fw_grad() and set_fw_grad()
+     263              :   // This is mutable because we need to be able to acquire this from const
+     264              :   // version of this class for the functions above
+     265              :   mutable std::mutex mutex_;
+     266              : 
+     267              :   /// Sets the `requires_grad` property of `Variable`. This should be true for
+     268              :   /// leaf variables that want to accumulate gradients, and false for all other
+     269              :   /// variables.
+     270            0 :   void set_requires_grad(bool requires_grad, at::TensorImpl* self_impl)
+     271              :       override {
+     272            0 :     TORCH_CHECK(
+     273              :         !requires_grad ||
+     274              :             isDifferentiableType(at::typeMetaToScalarType(self_impl->dtype())),
+     275              :         "Only Tensors of floating point and complex dtype can require gradients");
+     276            0 :     requires_grad_ = requires_grad;
+     277            0 :   }
+     278              : 
+     279              :   bool requires_grad() const override {
+     280              :     return requires_grad_ || grad_fn_;
+     281              :   }
+     282              : 
+     283              :   /// Accesses the gradient `Variable` of this `Variable`.
+     284              :   Variable& mutable_grad() override {
+     285              :     return grad_;
+     286              :   }
+     287              : 
+     288              :   const Variable& grad() const override {
+     289              :     return grad_;
+     290              :   }
+     291              : 
+     292              :   const Variable& fw_grad(uint64_t level, const at::TensorBase& self)
+     293              :       const override;
+     294              : 
+     295              :   void set_fw_grad(
+     296              :       const at::TensorBase& new_grad,
+     297              :       const at::TensorBase& self,
+     298              :       uint64_t level,
+     299              :       bool is_inplace_op) override;
+     300              : 
+     301            0 :   AutogradMeta(
+     302              :       at::TensorImpl* self_impl = nullptr,
+     303              :       bool requires_grad = false,
+     304              :       Edge gradient_edge = Edge())
+     305            0 :       : grad_fn_(std::move(gradient_edge.function)),
+     306              : 
+     307            0 :         output_nr_(gradient_edge.input_nr) {
+     308              :     // set_requires_grad also checks error conditions.
+     309            0 :     if (requires_grad) {
+     310            0 :       TORCH_INTERNAL_ASSERT(self_impl);
+     311              :       // NOLINTNEXTLINE(clang-analyzer-optin.cplusplus.VirtualCall)
+     312            0 :       set_requires_grad(requires_grad, self_impl);
+     313              :     }
+     314            0 :     TORCH_CHECK(
+     315              :         !grad_fn_ || !requires_grad_,
+     316              :         "requires_grad should be false if grad_fn is set");
+     317            0 :   }
+     318              : 
+     319              :   ~AutogradMeta() override {
+     320              :     // If AutogradMeta is being destroyed, it means that there is no other
+     321              :     // reference to its corresponding Tensor. It implies that no other thread
+     322              :     // can be using this object and so there is no need to lock mutex_ here to
+     323              :     // guard the check if fw_grad_ is populated.
+     324              :     if (fw_grad_) {
+     325              :       // See note [ Using ForwardGrad ]
+     326              :       fw_grad_->clear();
+     327              :     }
+     328              :   }
+     329              : };
+     330              : 
+     331              : struct TORCH_API ViewInfo {
+     332              :   /// The base `Variable`
+     333              :   /// If this ViewInfo represents a forward (respectively backward) AD gradient,
+     334              :   /// then this Tensor cannot be a forward (respectively backward) view.
+     335              :   Variable base_;
+     336              : 
+     337              :   /// By default we use as_strided to recover views which is more efficient.
+     338              :   /// view_fn is only saved when as_strided is not supported.
+     339              :   /// If view_fn has value, we use it to recover views in backward.
+     340              :   std::function<Variable(const Variable&)> view_fn_;
+     341              : 
+     342              :   /// Accessors for the view function
+     343              :   bool has_view_fn() const {
+     344              :     return view_fn_ != nullptr;
+     345              :   }
+     346              : 
+     347              :   std::function<Variable(const Variable&)> view_fn() const {
+     348              :     TORCH_CHECK(
+     349              :         has_view_fn(), "Can only access the view function if it exists.");
+     350              :     return view_fn_;
+     351              :   }
+     352              : 
+     353              :   /// The chain function can be used to build a new ViewInfo for a
+     354              :   /// differentiable view function. It will return a new view info that
+     355              :   /// accurately represents how "tensor" is a view of this instance's "base_".
+     356              :   /// The "base" and "tensor" are respectively the input and output of the
+     357              :   /// differentiable view function that happened. They are required to properly
+     358              :   /// set the optional view_fn_ when it is not provided. The "view_func", if
+     359              :   /// provided, should be a function that allows to re-do the view between
+     360              :   /// "base" and "tensor".
+     361              :   ViewInfo chain(
+     362              :       const Variable& base,
+     363              :       const Variable& tensor,
+     364              :       std::function<Variable(const Variable&)> view_func = nullptr) const;
+     365              : 
+     366              :   ViewInfo(Variable base, std::function<Variable(const Variable&)> view_fn)
+     367              :       : base_(std::move(base)), view_fn_(std::move(view_fn)) {
+     368              :     TORCH_CHECK(base_.defined(), "base is undefined");
+     369              :   }
+     370              : };
+     371              : 
+     372              : //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     373              : //                     DifferentiableViewMeta
+     374              : //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     375              : 
+     376              : /// NOTE [ Autograd View Variables ]
+     377              : ///
+     378              : /// Many operations return Variable that shares storage with an input Variable.
+     379              : /// The returned Variable is called a **view** Variable on the input **base**
+     380              : /// Variable.
+     381              : ///
+     382              : /// In PyTorch, we have two types of views: differentiable views, and
+     383              : /// non-differentiable views. In either type, to support proper version
+     384              : /// checking, the base and view Variables must always share the same
+     385              : /// version_counter.
+     386              : ///
+     387              : ///
+     388              : /// Differentiable Views
+     389              : /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     390              : /// This class allows to track both forward and backward AD differentiable
+     391              : /// views. These views can have different base as non-differentiable view for
+     392              : /// forward and backward mode AD are not the same.
+     393              : ///
+     394              : /// Most function are either both forward and backward differentiable views (for
+     395              : /// example: view, select, narrow, transpose, etc) or both not forward and not
+     396              : /// backward differentiable views (for example: indices, values, eq, lt, etc).
+     397              : /// But there are also functions that are forward but not backward
+     398              : /// differentiable views (only detach for now) or functions that are backward
+     399              : /// but not forward differentiable view (only make_dual and unpack dual for
+     400              : /// now).
+     401              : ///
+     402              : /// A concrete example of two views with different bases is as follow:
+     403              : ///
+     404              : ///     # Have:
+     405              : ///     #   dual is a dual Tensor that is neither a forward or backward view
+     406              : ///     detached_dual = dual.detach()
+     407              : ///     view = detached_dual.view_as(dual)
+     408              : ///     # The forward base of view is dual
+     409              : ///     # The backward base of view is detached_dual
+     410              : ///
+     411              : /// - Backward Mode View
+     412              : /// Differentiable views are the view variables where you want gradients to flow
+     413              : /// back to the base variables. Out-of-place operations on views are quite
+     414              : /// straightforward, but in-place ones are very tricky. Even if the base
+     415              : /// variable may not require grad when we create the view, we still need to
+     416              : /// track the view relation because future in-place ops may require back-proping
+     417              : /// through it. For example, we need to support
+     418              : ///
+     419              : ///   (1) in-place operation on view, e.g.,
+     420              : ///
+     421              : ///     # Have:
+     422              : ///     #   base.requires_grad = False
+     423              : ///     #   var.requires_grad = True
+     424              : ///     base[1] = var  # i.e., base[1].copy_(var)
+     425              : ///     torch.autograd.grad(base.sum(), var)  <- should return an all ones
+     426              : ///     tensor
+     427              : ///
+     428              : ///   (2) in-place operation on base after view is created, e.g.,
+     429              : ///
+     430              : ///     # Have:
+     431              : ///     #   base.requires_grad = False
+     432              : ///     #   var.requires_grad = True
+     433              : ///     view = base[1]
+     434              : ///     base.copy_(var)
+     435              : ///     torch.autograd.grad(view.sum(), var)  <- should return a tensor with
+     436              : ///                                              var[1] filled with all ones and
+     437              : ///                                              zeros everywhere else
+     438              : ///
+     439              : /// - Forward Mode View
+     440              : /// Forward differentiable views follow the same semantic as backward ones but
+     441              : /// show up differently as they are computed along with the forward evaluation.
+     442              : /// The hard examples above are thus very similar
+     443              : ///
+     444              : ///   (1) in-place operation on view, e.g.,
+     445              : ///
+     446              : ///     # Have:
+     447              : ///     #   base is a regular Tensor
+     448              : ///     #   var is a dual Tensor whose tangent is all ones
+     449              : ///     base[1] = var  # i.e., base[1].copy_(var)
+     450              : ///     # Now, base is a dual Tensor
+     451              : ///     _, fw_grad = fwAD.unpack_dual(base) <- fw_grad should be a tensor with
+     452              : ///                                              fw_grad[1] filled with all ones
+     453              : ///                                              and zeros everywhere else
+     454              : ///
+     455              : ///   (2) in-place operation on base after view is created, e.g.,
+     456              : ///
+     457              : ///     # Have:
+     458              : ///     #   base is a regular Tensor
+     459              : ///     #   var is a dual Tensor whose tangent is all ones
+     460              : ///     view = base[1]
+     461              : ///     base.copy_(var)
+     462              : ///     _, fw_grad = fwAD.unpack_dual(view) <- fw_grad should be an all ones
+     463              : ///     tensor
+     464              : ///
+     465              : /// See Note [Forward Grad View/inplace] for more details on how we handle these
+     466              : /// hard cases.
+     467              : ///
+     468              : ///
+     469              : /// DifferentiableViewMeta is created to support gradient tracking of
+     470              : /// such **in-place** operations. In particular,
+     471              : ///   + if an in-place op is done on base, the grad_fn field of the view may
+     472              : ///     become stale. So accesses should always go through grad_fn(), which
+     473              : ///     reconstructs an updated grad_fn if the version_counter has incremented.
+     474              : ///     All other fields are always valid.
+     475              : ///   + if an in-place op is done on view, in rebase_history() of view, which is
+     476              : ///     called after every in-place op in VariableType.cpp, the grad_fn of base
+     477              : ///     is updated.
+     478              : ///   + if a single autograd Node returns multiple differentiable views, if any
+     479              : ///     output is modified by an inplace operation, the autograd engine will
+     480              : ///     make an equivalent graph (corresponding to the view operations) without
+     481              : ///     using equivalent graph, where each output is treated as if it were
+     482              : ///     produced by a distinct view operation. This discards the original (e.g.,
+     483              : ///     user provided) grad_fn. If the provided grad_fn does more than the
+     484              : ///     backward of the view, then the DifferentiableViewMeta must be created
+     485              : ///     with creation_meta= CreationMeta::MULTI_OUTPUT_NODE to prevent the
+     486              : ///     engine from ignoring the provided grad_fn.
+     487              : ///
+     488              : /// Interaction with GradMode:
+     489              : /// The particular case that we consider here is:
+     490              : ///
+     491              : ///     # Have:
+     492              : ///     #   base.requires_grad = True or False
+     493              : ///     with torch.no_grad():
+     494              : ///         view = base[1]
+     495              : ///     base.requires_grad_()
+     496              : ///     view.copy_(var)
+     497              : ///     torch.autograd.grad(base.sum(), var)  <- what should it return?
+     498              : ///
+     499              : /// Given that this particular code example is ambiguous and can easily be
+     500              : /// replace by either moving both inside the no_grad block or both outside, we
+     501              : /// explicitly forbid it. For now, it is deprecated by a warning. This is
+     502              : /// achieved by setting creation_meta=CreationMeta::NO_GRAD_MODE for all
+     503              : /// differentiable views created in no_grad mode.
+     504              : ///
+     505              : /// See Note [View + Inplace update for base tensor]
+     506              : /// and Note [View + Inplace update for view tensor] for the details how
+     507              : /// autograd handles inplace update with view ops.
+     508              : ///
+     509              : /// Non-Differentiable Views
+     510              : /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     511              : /// In certain cases, although function outputs share storage with inputs, they
+     512              : /// will **never** require gradient history tracking. Instead of registering the
+     513              : /// view relation via DifferentiableViewMeta in autograd, the views will be
+     514              : /// using usual AutogradMeta and just share the version counters with the base
+     515              : /// Variables.
+     516              : /// Such views include:
+     517              : ///   1. Views created from .detach()
+     518              : ///   2. Views that are non-differentiable by its nature.
+     519              : ///      E.g., `sparse_tensor.indices()` is a integral view on a (possibly)
+     520              : ///      floating point tensor.
+     521              : ///      See top of `derivatives.yaml` on how to specify that outputs of a
+     522              : ///      function are non-differentiable.
+     523              : /// These are called non-differentiable views as the gradients do not flow
+     524              : /// through the view relation.
+     525              : ///
+     526              : /// Relevant logic for both differentiable and non-differentiable views is
+     527              : /// implemented in make_variable_(non_)differentiable_view below, and
+     528              : /// wrap_output of gen_variable_type.py.
+     529              : 
+     530              : /// NOTE [ View + Inplace detection ]
+     531              : ///
+     532              : /// We want to detect views followed by inplace as they are often forbidden to
+     533              : /// ensure correctness of the computed gradients. But since we want to only
+     534              : /// notify the user when both happen, we tag the DifferentiableViewMeta when the
+     535              : /// view is created via the `make_variable_*_view()` functions. This tag is then
+     536              : /// checked by the `check_inplace()` function from `VariableTypeUtils.h` that
+     537              : /// should be called before every inplace operation and to detect cases where
+     538              : /// other views are modified and this one is rebased by side effect, we also
+     539              : /// check in the `VariableHooks::grad_fn()`.
+     540              : 
+     541              : /// Flag that gives more information about when this view was created:
+     542              : /// - IN_CUSTOM_FUNCTION should be set when the view is created inside a custom
+     543              : ///   autograd Function is returned.
+     544              : /// - NO_GRAD_MODE should be set when a view in created when GradMode is
+     545              : /// disabled
+     546              : /// - MULTI_OUTPUT_NODE should be set when a Node created by codegen code
+     547              : /// returns
+     548              : ///   multiple differentiable views
+     549              : /// - Inference_MODE should be set when a view of normal tensor is created in
+     550              : /// InferenceMode.
+     551              : /// - DEFAULT is for all other cases
+     552              : enum class CreationMeta : uint8_t {
+     553              :   DEFAULT,
+     554              :   IN_CUSTOM_FUNCTION,
+     555              :   MULTI_OUTPUT_NODE,
+     556              :   NO_GRAD_MODE,
+     557              :   INFERENCE_MODE
+     558              : };
+     559              : 
+     560              : /// Handles correctly propagating CreationMeta when a new view is created from a
+     561              : /// previous view. In general, we don't want the new view to be _less_
+     562              : /// restrictive than the previous view (it's okay to be _more_ restrictive). A
+     563              : /// CreationMeta value of DEFAULT is currently the least restrictive, as the
+     564              : /// behavior for all other CreationMeta values is to error out for in-place ops.
+     565              : /// A CreationMeta value of INFERENCE_MODE is currently the most restrictive, so
+     566              : /// it takes precedence in propagation. If this changes, the logic here will
+     567              : /// need to be updated to properly handle the new semantics.
+     568              : inline CreationMeta propagate_creation_meta(
+     569              :     CreationMeta prev_view_creation_meta,
+     570              :     CreationMeta new_view_creation_meta) {
+     571              :   return (new_view_creation_meta == CreationMeta::DEFAULT)
+     572              :       ? prev_view_creation_meta
+     573              :       : (prev_view_creation_meta == CreationMeta::INFERENCE_MODE
+     574              :              ? prev_view_creation_meta
+     575              :              : new_view_creation_meta);
+     576              : }
+     577              : 
+     578              : /// Unified function to handle error checking when rebase happens
+     579              : /// indirect=true means that the caller is not doing the inplace, but the
+     580              : /// inplace happened somewhere else.
+     581              : TORCH_API void handle_view_on_rebase(
+     582              :     DifferentiableViewMeta* diff_view_meta,
+     583              :     bool indirect = false);
+     584              : 
+     585              : struct TORCH_API DifferentiableViewMeta : public AutogradMeta {
+     586              :  private:
+     587              :   /// Informations about the views
+     588              :   c10::optional<ViewInfo> backward_info_;
+     589              :   c10::optional<ViewInfo> forward_info_;
+     590              : 
+     591              :   // Optimization to reduce the number of ViewInfo we create.
+     592              :   // In the (very common) case where backward_info_ == forward_info_, we only
+     593              :   // populate backward_info_ (that should be used as both the forward and
+     594              :   // backward view information) and set shared_view_info_ = true. Invariants:
+     595              :   //   - If shared_view_info_ is false, there is no special constraints on
+     596              :   //     backward_info_ and forward_info_
+     597              :   //   - If shared_view_info_ is true, we must have:
+     598              :   //      - backward_info_.has_value() == true
+     599              :   //      - forward_info_.has_value() == false
+     600              :   bool shared_view_info_;
+     601              : 
+     602              :   /// The two following fields are extra information that we track to ensure
+     603              :   /// that any operation on this backward view is valid.
+     604              : 
+     605              :   /// The value of the version_counter at the time grad_fn was created. The
+     606              :   /// grad_fn field is stale if attr_version_ !=
+     607              :   /// version_counter.current_version().
+     608              :   uint32_t attr_version_;
+     609              :   CreationMeta creation_meta_;
+     610              : 
+     611              :  public:
+     612              :   /// requires_grad is a backward AD field so we only use the view specific
+     613              :   /// logic for backward differentiable views
+     614              :   bool requires_grad() const override {
+     615              :     return requires_grad_ || grad_fn_ ||
+     616              :         (has_bw_view() && get_backward_view().base_.requires_grad());
+     617              :   }
+     618              : 
+     619              :   bool shared_view_info() const {
+     620              :     return shared_view_info_;
+     621              :   }
+     622              : 
+     623              :   bool has_bw_view() const {
+     624              :     return backward_info_.has_value();
+     625              :   }
+     626              : 
+     627              :   const ViewInfo& get_backward_view() const {
+     628              :     TORCH_CHECK(
+     629              :         has_bw_view(), "backward view info can only exist for backward views.");
+     630              :     return backward_info_.value();
+     631              :   }
+     632              : 
+     633              :   uint32_t get_attr_version() const {
+     634              :     TORCH_CHECK(
+     635              :         has_bw_view(), "attr_version can only exist for backward views.");
+     636              :     return attr_version_;
+     637              :   }
+     638              : 
+     639              :   void set_attr_version(uint32_t new_attr_version) {
+     640              :     TORCH_CHECK(
+     641              :         has_bw_view(), "attr_version can only exist for backward views.");
+     642              :     attr_version_ = new_attr_version;
+     643              :   }
+     644              : 
+     645              :   CreationMeta get_creation_meta() const {
+     646              :     TORCH_CHECK(
+     647              :         has_bw_view(), "creation_meta can only exist for backward views.");
+     648              :     return creation_meta_;
+     649              :   }
+     650              : 
+     651              :   void set_creation_meta(CreationMeta new_creation_meta) {
+     652              :     TORCH_CHECK(
+     653              :         has_bw_view(), "creation_meta can only exist for backward views.");
+     654              :     creation_meta_ = new_creation_meta;
+     655              :   }
+     656              : 
+     657              :   bool has_fw_view() const {
+     658              :     return shared_view_info_ || forward_info_.has_value();
+     659              :   }
+     660              : 
+     661              :   const ViewInfo& get_forward_view() const {
+     662              :     TORCH_CHECK(
+     663              :         has_fw_view(), "forward view info can only exist for forward views.");
+     664              :     TORCH_CHECK(
+     665              :         !shared_view_info_ || has_bw_view(),
+     666              :         "forward view info can only exist for forward views.");
+     667              :     return shared_view_info_ ? backward_info_.value() : forward_info_.value();
+     668              :   }
+     669              : 
+     670              :   DifferentiableViewMeta(
+     671              :       at::TensorImpl* self_impl,
+     672              :       c10::optional<ViewInfo> backward_info,
+     673              :       c10::optional<ViewInfo> forward_info,
+     674              :       bool shared_view_info,
+     675              :       CreationMeta creation_meta = CreationMeta::DEFAULT);
+     676              : };
+     677              : 
+     678              : //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     679              : //                        Variable Implementation
+     680              : //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     681              : 
+     682              : // Factory Functions
+     683              : //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+     684              : 
+     685              : /// Creates a `Variable` that is a *view* of another (*base*) variable.
+     686              : /// The `gradient_edge` is an optional (gradient_function, input_number) pair.
+     687              : /// `is_differentiable` is a bool that specifies whether this view is
+     688              : /// differentiable, i.e., whether the relation should be tracked by autograd.
+     689              : /// See NOTE [ Autograd View Variables ] for details.
+     690              : 
+     691              : /// NOTE: `allow_tensor_metadata_change` is set to true by default, because
+     692              : /// there are a lot of call sites to these factory functions that need to change
+     693              : /// the variable's size or storage afterwards, and they don't expect the
+     694              : /// original tensor (where the variable is created from) to be updated. Setting
+     695              : /// `allow_tensor_metadata_change_` to false by default would unnecessarily
+     696              : /// prevent those changes from happening and is undesirable.
+     697              : 
+     698              : // See NOTE [ Autograd View Variables ] for details.
+     699              : // Differentiable view. Track history with DifferentiableViewMeta.
+     700              : inline Variable make_variable_differentiable_view(
+     701              :     const at::Tensor& data,
+     702              :     c10::optional<ViewInfo> backward_info,
+     703              :     c10::optional<ViewInfo> forward_info,
+     704              :     bool shared_view_info,
+     705              :     CreationMeta creation_meta,
+     706              :     bool allow_tensor_metadata_change = true) {
+     707              :   if (data.defined()) {
+     708              :     TORCH_CHECK(
+     709              :         data.getIntrusivePtr()->autograd_meta() == nullptr,
+     710              :         "Attempted to make a tensor into a differentiable view, but the "
+     711              :         "tensor already had autograd metadata associated with it.  If you are "
+     712              :         "using a __torch_dispatch__ mode, the most common cause for this "
+     713              :         "problem is that you used torch.overrides.enable_reentrant_dispatch() "
+     714              :         "improperly; tensors created within the extent of reentrant dispatch "
+     715              :         "MUST NOT be directly returned from __torch_dispatch__; instead, they "
+     716              :         "must be wrapped into fresh tensors that serve as the output.  If you "
+     717              :         "are not using wrappers, you probably don't need reentrant dispatch.  "
+     718              :         "If this doesn't seem applicable, please file a bug to PyTorch.");
+     719              :     at::TensorImpl* data_impl = data.unsafeGetTensorImpl();
+     720              :     data_impl->set_allow_tensor_metadata_change(allow_tensor_metadata_change);
+     721              :     data_impl->set_autograd_meta(std::make_unique<DifferentiableViewMeta>(
+     722              :         data_impl,
+     723              :         std::move(backward_info),
+     724              :         std::move(forward_info),
+     725              :         shared_view_info,
+     726              :         creation_meta));
+     727              :     return data;
+     728              :   }
+     729              :   return Variable();
+     730              : }
+     731              : 
+     732              : // See NOTE [ Autograd View Variables ] for details.
+     733              : // Non-differentiable view. Just share version counter.
+     734              : inline Variable make_variable_non_differentiable_view(
+     735              :     Variable base,
+     736              :     const at::Tensor& data,
+     737              :     bool allow_tensor_metadata_change = true) {
+     738              :   if (data.defined()) {
+     739              :     // Currently all of non-differentiable view ops(detach/_indices/_values)
+     740              :     // share the same TensorImpl as their base Tensor. Thus a new TensorImpl
+     741              :     // allocation here is required.
+     742              :     auto data_impl_copy = data.getIntrusivePtr()->shallow_copy_and_detach(
+     743              :         /*version_counter=*/impl::version_counter(base),
+     744              :         /*allow_tensor_metadata_change=*/allow_tensor_metadata_change);
+     745              :     data_impl_copy->set_autograd_meta(nullptr);
+     746              :     return Variable(data_impl_copy);
+     747              :   }
+     748              :   return Variable();
+     749              : }
+     750              : 
+     751              : /// Creates a `Variable` from the given `Tensor`, copying its underlying
+     752              : /// `TensorImpl`. `requires_grad` should be set only for leaves, and determines
+     753              : /// whether the `Variable` will accumulate gradients. NOTE: `data` must *not* be
+     754              : /// a `Variable` already. Its dynamic type *must* be `Tensor`.
+     755              : ///
+     756              : /// TODO: Eliminate this function as much as possible, as it can be expressed
+     757              : /// more clearly as detach() or a no-op in most call sites (especially when
+     758              : /// there is only one use of the variable).
+     759       418844 : inline Variable make_variable(
+     760              :     at::Tensor data,
+     761              :     bool requires_grad = false,
+     762              :     bool allow_tensor_metadata_change = true) {
+     763       418844 :   if (data.defined()) {
+     764       458920 :     if (data.getIntrusivePtr().use_count() == 1 &&
+     765        40076 :         data.getIntrusivePtr()->unique_version()) {
+     766        40076 :       auto data_impl = data.unsafeReleaseIntrusivePtr();
+     767        40076 :       data_impl->set_allow_tensor_metadata_change(allow_tensor_metadata_change);
+     768              :       // NOLINTNEXTLINE(bugprone-branch-clone)
+     769        40076 :       if (requires_grad) {
+     770            0 :         data_impl->set_autograd_meta(
+     771            0 :             std::make_unique<AutogradMeta>(data_impl.get(), requires_grad));
+     772              :       } else {
+     773        40076 :         data_impl->set_autograd_meta(nullptr);
+     774              :       }
+     775        40076 :       return Variable(std::move(data_impl));
+     776        40076 :     } else {
+     777       378768 :       auto data_impl_copy = data.getIntrusivePtr()->shallow_copy_and_detach(
+     778              :           /*version_counter=*/0,
+     779       378768 :           /*allow_tensor_metadata_change=*/allow_tensor_metadata_change);
+     780              :       // NOLINTNEXTLINE(bugprone-branch-clone)
+     781       378768 :       if (requires_grad) {
+     782            0 :         data_impl_copy->set_autograd_meta(std::make_unique<AutogradMeta>(
+     783            0 :             data_impl_copy.get(), requires_grad));
+     784              :       } else {
+     785       378768 :         data_impl_copy->set_autograd_meta(nullptr);
+     786              :       }
+     787       378768 :       return Variable(data_impl_copy);
+     788       378768 :     }
+     789              :   }
+     790            0 :   return Variable();
+     791              : }
+     792              : 
+     793              : /// Creates a `Variable` from the given `Tensor`, copying its underlying
+     794              : /// `TensorImpl`. `gradient_edge` should be a (function, input_nr) pair
+     795              : /// specifying the function in the autograd graph, and what particular input of
+     796              : /// that function, this variable is connected to.
+     797              : inline Variable make_variable(
+     798              :     at::Tensor data,
+     799              :     Edge gradient_edge,
+     800              :     bool allow_tensor_metadata_change = true) {
+     801              :   if (data.defined()) {
+     802              :     auto data_impl_copy = data.getIntrusivePtr()->shallow_copy_and_detach(
+     803              :         /*version_counter=*/0,
+     804              :         /*allow_tensor_metadata_change=*/allow_tensor_metadata_change);
+     805              :     data_impl_copy->set_autograd_meta(std::make_unique<AutogradMeta>(
+     806              :         data_impl_copy.get(), false, std::move(gradient_edge)));
+     807              :     return Variable(data_impl_copy);
+     808              :   }
+     809              :   return Variable();
+     810              : }
+     811              : 
+     812              : struct VariableHooks final : at::impl::VariableHooksInterface {
+     813              :   at::TensorBase tensor_data(const at::TensorBase&) const override;
+     814              :   at::TensorBase variable_data(const at::TensorBase&) const override;
+     815              :   const std::shared_ptr<torch::autograd::Node>& grad_fn(
+     816              :       const at::TensorBase&) const override;
+     817              :   unsigned _register_hook(
+     818              :       const at::TensorBase&,
+     819              :       std::function<at::TensorBase(const at::TensorBase&)> hook) const override;
+     820              :   void remove_hook(const at::TensorBase&, unsigned pos) const override;
+     821              :   bool is_view(const at::TensorBase&) const override;
+     822              :   const at::TensorBase& base(const at::TensorBase&) const override;
+     823              :   const std::string& name(const at::TensorBase&) const override;
+     824              :   bool is_leaf(const at::TensorBase&) const override;
+     825              :   int64_t output_nr(const at::TensorBase&) const override;
+     826              :   void set_data(const at::TensorBase& self, const at::TensorBase& new_data)
+     827              :       const override;
+     828              :   at::TensorBase data(const at::TensorBase& self) const override;
+     829              :   int64_t _version(const at::TensorBase& self) const override;
+     830              :   void retain_grad(const at::TensorBase& self) const override;
+     831              :   bool retains_grad(const at::TensorBase& self) const override;
+     832              :   void _backward(
+     833              :       const at::Tensor& self,
+     834              :       at::TensorList inputs,
+     835              :       const c10::optional<at::Tensor>& gradient,
+     836              :       c10::optional<bool> keep_graph,
+     837              :       bool create_graph) const override;
+     838              :   void requires_grad_(const at::TensorBase& self, bool _requires_grad)
+     839              :       const override;
+     840              :   void basic_autograd_not_implemented_fallback(
+     841              :       const c10::OperatorHandle& op,
+     842              :       c10::DispatchKeySet dispatch_keys,
+     843              :       torch::jit::Stack* stack) const override;
+     844              : };
+     845              : 
+     846              : namespace utils {
+     847              : 
+     848              : TORCH_API bool has_same_meta(const Variable& base, const Variable& other);
+     849              : 
+     850              : } // namespace utils
+     851              : } // namespace autograd
+     852              : } // namespace torch
+     853              : 
+     854              : #endif /* DOXYGEN_SHOULD_SKIP_THIS */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/array.func-c.html b/html/usr/include/c++/13/array.func-c.html new file mode 100644 index 0000000..9900d95 --- /dev/null +++ b/html/usr/include/c++/13/array.func-c.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/array - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - array (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %88
Test Date:2024-04-30 13:17:26Functions:66.7 %64
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt5arrayIcLm64EE5beginEv2
_ZNSt5arrayIcLm512EEixEm360
_ZNKSt5arrayIcLm2EEixEm728
_ZNKSt5arrayIS_IcLm2EELm100EEixEm0
_ZNKSt5arrayIcLm2EEixEm0
_ZNKSt5arrayIN8nlohmann16json_abi_v3_11_36detail9dtoa_impl12cached_powerELm79EEixEm8
_ZNKSt5arrayIhLm400EEixEm720
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/array.func.html b/html/usr/include/c++/13/array.func.html new file mode 100644 index 0000000..cf6e0a0 --- /dev/null +++ b/html/usr/include/c++/13/array.func.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/array - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - array (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %88
Test Date:2024-04-30 13:17:26Functions:66.7 %64
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt5arrayIcLm2EEixEm728
_ZNKSt5arrayIN8nlohmann16json_abi_v3_11_36detail9dtoa_impl12cached_powerELm79EEixEm8
_ZNKSt5arrayIS_IcLm2EELm100EEixEm0
_ZNKSt5arrayIcLm2EEixEm0
_ZNKSt5arrayIhLm400EEixEm720
_ZNSt5arrayIcLm512EEixEm360
_ZNSt5arrayIcLm64EE5beginEv2
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/array.gcov.html b/html/usr/include/c++/13/array.gcov.html new file mode 100644 index 0000000..b3fe281 --- /dev/null +++ b/html/usr/include/c++/13/array.gcov.html @@ -0,0 +1,586 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/array + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - array (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %88
Test Date:2024-04-30 13:17:26Functions:66.7 %64
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // <array> -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2007-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file include/array
+      26              :  *  This is a Standard C++ Library header.
+      27              :  */
+      28              : 
+      29              : #ifndef _GLIBCXX_ARRAY
+      30              : #define _GLIBCXX_ARRAY 1
+      31              : 
+      32              : #pragma GCC system_header
+      33              : 
+      34              : #if __cplusplus < 201103L
+      35              : # include <bits/c++0x_warning.h>
+      36              : #else
+      37              : 
+      38              : #include <compare>
+      39              : #include <initializer_list>
+      40              : 
+      41              : #include <type_traits>
+      42              : #include <bits/functexcept.h>
+      43              : #include <bits/stl_algobase.h>
+      44              : #include <bits/range_access.h> // std::begin, std::end etc.
+      45              : #include <bits/utility.h>      // std::index_sequence, std::tuple_size
+      46              : #include <debug/assertions.h>
+      47              : 
+      48              : namespace std _GLIBCXX_VISIBILITY(default)
+      49              : {
+      50              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      51              : 
+      52              :   template<typename _Tp, size_t _Nm>
+      53              :     struct __array_traits
+      54              :     {
+      55              :       using _Type = _Tp[_Nm];
+      56              :       using _Is_swappable = __is_swappable<_Tp>;
+      57              :       using _Is_nothrow_swappable = __is_nothrow_swappable<_Tp>;
+      58              :     };
+      59              : 
+      60              :  template<typename _Tp>
+      61              :    struct __array_traits<_Tp, 0>
+      62              :    {
+      63              :      // Empty type used instead of _Tp[0] for std::array<_Tp, 0>.
+      64              :      struct _Type
+      65              :      {
+      66              :        // Indexing is undefined.
+      67              :        __attribute__((__always_inline__,__noreturn__))
+      68              :        _Tp& operator[](size_t) const noexcept { __builtin_trap(); }
+      69              : 
+      70              :        // Conversion to a pointer produces a null pointer.
+      71              :        __attribute__((__always_inline__))
+      72              :        constexpr explicit operator _Tp*() const noexcept { return nullptr; }
+      73              :      };
+      74              : 
+      75              :      using _Is_swappable = true_type;
+      76              :      using _Is_nothrow_swappable = true_type;
+      77              :    };
+      78              : 
+      79              :   /**
+      80              :    *  @brief A standard container for storing a fixed size sequence of elements.
+      81              :    *
+      82              :    *  @ingroup sequences
+      83              :    *
+      84              :    *  Meets the requirements of a <a href="tables.html#65">container</a>, a
+      85              :    *  <a href="tables.html#66">reversible container</a>, and a
+      86              :    *  <a href="tables.html#67">sequence</a>.
+      87              :    *
+      88              :    *  Sets support random access iterators.
+      89              :    *
+      90              :    *  @tparam  Tp  Type of element. Required to be a complete type.
+      91              :    *  @tparam  Nm  Number of elements.
+      92              :   */
+      93              :   template<typename _Tp, std::size_t _Nm>
+      94              :     struct array
+      95              :     {
+      96              :       typedef _Tp                                     value_type;
+      97              :       typedef value_type*                             pointer;
+      98              :       typedef const value_type*                       const_pointer;
+      99              :       typedef value_type&                                 reference;
+     100              :       typedef const value_type&                           const_reference;
+     101              :       typedef value_type*                             iterator;
+     102              :       typedef const value_type*                       const_iterator;
+     103              :       typedef std::size_t                             size_type;
+     104              :       typedef std::ptrdiff_t                          difference_type;
+     105              :       typedef std::reverse_iterator<iterator>           reverse_iterator;
+     106              :       typedef std::reverse_iterator<const_iterator>   const_reverse_iterator;
+     107              : 
+     108              :       // Support for zero-sized arrays mandatory.
+     109              :       typename __array_traits<_Tp, _Nm>::_Type        _M_elems;
+     110              : 
+     111              :       // No explicit construct/copy/destroy for aggregate type.
+     112              : 
+     113              :       // DR 776.
+     114              :       _GLIBCXX20_CONSTEXPR void
+     115              :       fill(const value_type& __u)
+     116              :       { std::fill_n(begin(), size(), __u); }
+     117              : 
+     118              :       _GLIBCXX20_CONSTEXPR void
+     119              :       swap(array& __other)
+     120              :       noexcept(__array_traits<_Tp, _Nm>::_Is_nothrow_swappable::value)
+     121              :       { std::swap_ranges(begin(), end(), __other.begin()); }
+     122              : 
+     123              :       // Iterators.
+     124              :       [[__gnu__::__const__, __nodiscard__]]
+     125              :       _GLIBCXX17_CONSTEXPR iterator
+     126            2 :       begin() noexcept
+     127            2 :       { return iterator(data()); }
+     128              : 
+     129              :       [[__nodiscard__]]
+     130              :       _GLIBCXX17_CONSTEXPR const_iterator
+     131              :       begin() const noexcept
+     132              :       { return const_iterator(data()); }
+     133              : 
+     134              :       [[__gnu__::__const__, __nodiscard__]]
+     135              :       _GLIBCXX17_CONSTEXPR iterator
+     136              :       end() noexcept
+     137              :       { return iterator(data() + _Nm); }
+     138              : 
+     139              :       [[__nodiscard__]]
+     140              :       _GLIBCXX17_CONSTEXPR const_iterator
+     141              :       end() const noexcept
+     142              :       { return const_iterator(data() + _Nm); }
+     143              : 
+     144              :       [[__gnu__::__const__, __nodiscard__]]
+     145              :       _GLIBCXX17_CONSTEXPR reverse_iterator
+     146              :       rbegin() noexcept
+     147              :       { return reverse_iterator(end()); }
+     148              : 
+     149              :       [[__nodiscard__]]
+     150              :       _GLIBCXX17_CONSTEXPR const_reverse_iterator
+     151              :       rbegin() const noexcept
+     152              :       { return const_reverse_iterator(end()); }
+     153              : 
+     154              :       [[__gnu__::__const__, __nodiscard__]]
+     155              :       _GLIBCXX17_CONSTEXPR reverse_iterator
+     156              :       rend() noexcept
+     157              :       { return reverse_iterator(begin()); }
+     158              : 
+     159              :       [[__nodiscard__]]
+     160              :       _GLIBCXX17_CONSTEXPR const_reverse_iterator
+     161              :       rend() const noexcept
+     162              :       { return const_reverse_iterator(begin()); }
+     163              : 
+     164              :       [[__nodiscard__]]
+     165              :       _GLIBCXX17_CONSTEXPR const_iterator
+     166              :       cbegin() const noexcept
+     167              :       { return const_iterator(data()); }
+     168              : 
+     169              :       [[__nodiscard__]]
+     170              :       _GLIBCXX17_CONSTEXPR const_iterator
+     171              :       cend() const noexcept
+     172              :       { return const_iterator(data() + _Nm); }
+     173              : 
+     174              :       [[__nodiscard__]]
+     175              :       _GLIBCXX17_CONSTEXPR const_reverse_iterator
+     176              :       crbegin() const noexcept
+     177              :       { return const_reverse_iterator(end()); }
+     178              : 
+     179              :       [[__nodiscard__]]
+     180              :       _GLIBCXX17_CONSTEXPR const_reverse_iterator
+     181              :       crend() const noexcept
+     182              :       { return const_reverse_iterator(begin()); }
+     183              : 
+     184              :       // Capacity.
+     185              :       [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]]
+     186              :       constexpr size_type
+     187         1098 :       size() const noexcept { return _Nm; }
+     188              : 
+     189              :       [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]]
+     190              :       constexpr size_type
+     191              :       max_size() const noexcept { return _Nm; }
+     192              : 
+     193              :       [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]]
+     194              :       constexpr bool
+     195              :       empty() const noexcept { return size() == 0; }
+     196              : 
+     197              :       // Element access.
+     198              :       [[__nodiscard__]]
+     199              :       _GLIBCXX17_CONSTEXPR reference
+     200          360 :       operator[](size_type __n) noexcept
+     201              :       {
+     202              :         __glibcxx_requires_subscript(__n);
+     203          360 :         return _M_elems[__n];
+     204              :       }
+     205              : 
+     206              :       [[__nodiscard__]]
+     207              :       constexpr const_reference
+     208          728 :       operator[](size_type __n) const noexcept
+     209              :       {
+     210              : #if __cplusplus >= 201402L
+     211              :         __glibcxx_requires_subscript(__n);
+     212              : #endif
+     213          728 :         return _M_elems[__n];
+     214              :       }
+     215              : 
+     216              :       _GLIBCXX17_CONSTEXPR reference
+     217              :       at(size_type __n)
+     218              :       {
+     219              :         if (__n >= _Nm)
+     220              :           std::__throw_out_of_range_fmt(__N("array::at: __n (which is %zu) "
+     221              :                                             ">= _Nm (which is %zu)"),
+     222              :                                         __n, _Nm);
+     223              :         return _M_elems[__n];
+     224              :       }
+     225              : 
+     226              :       constexpr const_reference
+     227              :       at(size_type __n) const
+     228              :       {
+     229              :         // Result of conditional expression must be an lvalue so use
+     230              :         // boolean ? lvalue : (throw-expr, lvalue)
+     231              :         return __n < _Nm ? _M_elems[__n]
+     232              :           : (std::__throw_out_of_range_fmt(__N("array::at: __n (which is %zu) "
+     233              :                                                ">= _Nm (which is %zu)"),
+     234              :                                            __n, _Nm),
+     235              :              _M_elems[__n]);
+     236              :       }
+     237              : 
+     238              :       [[__nodiscard__]]
+     239              :       _GLIBCXX17_CONSTEXPR reference
+     240              :       front() noexcept
+     241              :       {
+     242              :         __glibcxx_requires_nonempty();
+     243              :         return _M_elems[(size_type)0];
+     244              :       }
+     245              : 
+     246              :       [[__nodiscard__]]
+     247              :       constexpr const_reference
+     248              :       front() const noexcept
+     249              :       {
+     250              : #if __cplusplus >= 201402L
+     251              :         __glibcxx_requires_nonempty();
+     252              : #endif
+     253              :         return _M_elems[(size_type)0];
+     254              :       }
+     255              : 
+     256              :       [[__nodiscard__]]
+     257              :       _GLIBCXX17_CONSTEXPR reference
+     258              :       back() noexcept
+     259              :       {
+     260              :         __glibcxx_requires_nonempty();
+     261              :         return _M_elems[_Nm - 1];
+     262              :       }
+     263              : 
+     264              :       [[__nodiscard__]]
+     265              :       constexpr const_reference
+     266              :       back() const noexcept
+     267              :       {
+     268              : #if __cplusplus >= 201402L
+     269              :         __glibcxx_requires_nonempty();
+     270              : #endif
+     271              :         return _M_elems[_Nm - 1];
+     272              :       }
+     273              : 
+     274              :       [[__nodiscard__, __gnu__::__const__, __gnu__::__always_inline__]]
+     275              :       _GLIBCXX17_CONSTEXPR pointer
+     276              :       data() noexcept
+     277           56 :       { return static_cast<pointer>(_M_elems); }
+     278              : 
+     279              :       [[__nodiscard__]]
+     280              :       _GLIBCXX17_CONSTEXPR const_pointer
+     281              :       data() const noexcept
+     282              :       { return static_cast<const_pointer>(_M_elems); }
+     283              :     };
+     284              : 
+     285              : #if __cpp_deduction_guides >= 201606
+     286              :   template<typename _Tp, typename... _Up>
+     287              :     array(_Tp, _Up...)
+     288              :       -> array<enable_if_t<(is_same_v<_Tp, _Up> && ...), _Tp>,
+     289              :                1 + sizeof...(_Up)>;
+     290              : #endif
+     291              : 
+     292              :   // Array comparisons.
+     293              :   template<typename _Tp, std::size_t _Nm>
+     294              :     [[__nodiscard__]]
+     295              :     _GLIBCXX20_CONSTEXPR
+     296              :     inline bool
+     297              :     operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
+     298              :     { return std::equal(__one.begin(), __one.end(), __two.begin()); }
+     299              : 
+     300              : #if __cpp_lib_three_way_comparison && __cpp_lib_concepts
+     301              :   template<typename _Tp, size_t _Nm>
+     302              :     [[nodiscard]]
+     303              :     constexpr __detail::__synth3way_t<_Tp>
+     304              :     operator<=>(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b)
+     305              :     {
+     306              :       if constexpr (_Nm && __is_memcmp_ordered<_Tp>::__value)
+     307              :         if (!std::__is_constant_evaluated())
+     308              :           {
+     309              :             constexpr size_t __n = _Nm * sizeof(_Tp);
+     310              :             return __builtin_memcmp(__a.data(), __b.data(), __n) <=> 0;
+     311              :           }
+     312              : 
+     313              :       for (size_t __i = 0; __i < _Nm; ++__i)
+     314              :         {
+     315              :           auto __c = __detail::__synth3way(__a[__i], __b[__i]);
+     316              :           if (__c != 0)
+     317              :             return __c;
+     318              :         }
+     319              :       return strong_ordering::equal;
+     320              :     }
+     321              : #else
+     322              :   template<typename _Tp, std::size_t _Nm>
+     323              :     [[__nodiscard__]]
+     324              :     _GLIBCXX20_CONSTEXPR
+     325              :     inline bool
+     326              :     operator!=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
+     327              :     { return !(__one == __two); }
+     328              : 
+     329              :   template<typename _Tp, std::size_t _Nm>
+     330              :     [[__nodiscard__]]
+     331              :     _GLIBCXX20_CONSTEXPR
+     332              :     inline bool
+     333              :     operator<(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b)
+     334              :     {
+     335              :       return std::lexicographical_compare(__a.begin(), __a.end(),
+     336              :                                           __b.begin(), __b.end());
+     337              :     }
+     338              : 
+     339              :   template<typename _Tp, std::size_t _Nm>
+     340              :     [[__nodiscard__]]
+     341              :     _GLIBCXX20_CONSTEXPR
+     342              :     inline bool
+     343              :     operator>(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
+     344              :     { return __two < __one; }
+     345              : 
+     346              :   template<typename _Tp, std::size_t _Nm>
+     347              :     [[__nodiscard__]]
+     348              :     _GLIBCXX20_CONSTEXPR
+     349              :     inline bool
+     350              :     operator<=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
+     351              :     { return !(__one > __two); }
+     352              : 
+     353              :   template<typename _Tp, std::size_t _Nm>
+     354              :     [[__nodiscard__]]
+     355              :     _GLIBCXX20_CONSTEXPR
+     356              :     inline bool
+     357              :     operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
+     358              :     { return !(__one < __two); }
+     359              : #endif // three_way_comparison && concepts
+     360              : 
+     361              :   // Specialized algorithms.
+     362              :   template<typename _Tp, std::size_t _Nm>
+     363              :     _GLIBCXX20_CONSTEXPR
+     364              :     inline
+     365              : #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
+     366              :     // Constrained free swap overload, see p0185r1
+     367              :     __enable_if_t<__array_traits<_Tp, _Nm>::_Is_swappable::value>
+     368              : #else
+     369              :     void
+     370              : #endif
+     371              :     swap(array<_Tp, _Nm>& __one, array<_Tp, _Nm>& __two)
+     372              :     noexcept(noexcept(__one.swap(__two)))
+     373              :     { __one.swap(__two); }
+     374              : 
+     375              : #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
+     376              :   template<typename _Tp, std::size_t _Nm>
+     377              :     __enable_if_t<!__array_traits<_Tp, _Nm>::_Is_swappable::value>
+     378              :     swap(array<_Tp, _Nm>&, array<_Tp, _Nm>&) = delete;
+     379              : #endif
+     380              : 
+     381              :   template<std::size_t _Int, typename _Tp, std::size_t _Nm>
+     382              :     [[__nodiscard__]]
+     383              :     constexpr _Tp&
+     384              :     get(array<_Tp, _Nm>& __arr) noexcept
+     385              :     {
+     386              :       static_assert(_Int < _Nm, "array index is within bounds");
+     387              :       return __arr._M_elems[_Int];
+     388              :     }
+     389              : 
+     390              :   template<std::size_t _Int, typename _Tp, std::size_t _Nm>
+     391              :     [[__nodiscard__]]
+     392              :     constexpr _Tp&&
+     393              :     get(array<_Tp, _Nm>&& __arr) noexcept
+     394              :     {
+     395              :       static_assert(_Int < _Nm, "array index is within bounds");
+     396              :       return std::move(std::get<_Int>(__arr));
+     397              :     }
+     398              : 
+     399              :   template<std::size_t _Int, typename _Tp, std::size_t _Nm>
+     400              :     [[__nodiscard__]]
+     401              :     constexpr const _Tp&
+     402              :     get(const array<_Tp, _Nm>& __arr) noexcept
+     403              :     {
+     404              :       static_assert(_Int < _Nm, "array index is within bounds");
+     405              :       return __arr._M_elems[_Int];
+     406              :     }
+     407              : 
+     408              :   template<std::size_t _Int, typename _Tp, std::size_t _Nm>
+     409              :     [[__nodiscard__]]
+     410              :     constexpr const _Tp&&
+     411              :     get(const array<_Tp, _Nm>&& __arr) noexcept
+     412              :     {
+     413              :       static_assert(_Int < _Nm, "array index is within bounds");
+     414              :       return std::move(std::get<_Int>(__arr));
+     415              :     }
+     416              : 
+     417              : #if __cplusplus >= 202002L && __cpp_generic_lambdas >= 201707L
+     418              : #define __cpp_lib_to_array 201907L
+     419              :   template<typename _Tp, size_t _Nm>
+     420              :     [[nodiscard]]
+     421              :     constexpr array<remove_cv_t<_Tp>, _Nm>
+     422              :     to_array(_Tp (&__a)[_Nm])
+     423              :     noexcept(is_nothrow_constructible_v<_Tp, _Tp&>)
+     424              :     {
+     425              :       static_assert(!is_array_v<_Tp>);
+     426              :       static_assert(is_constructible_v<_Tp, _Tp&>);
+     427              :       if constexpr (is_constructible_v<_Tp, _Tp&>)
+     428              :         {
+     429              :           if constexpr (is_trivial_v<_Tp>)
+     430              :             {
+     431              :               array<remove_cv_t<_Tp>, _Nm> __arr;
+     432              :               if (!__is_constant_evaluated() && _Nm != 0)
+     433              :                 __builtin_memcpy((void*)__arr.data(), (void*)__a, sizeof(__a));
+     434              :               else
+     435              :                 for (size_t __i = 0; __i < _Nm; ++__i)
+     436              :                   __arr._M_elems[__i] = __a[__i];
+     437              :               return __arr;
+     438              :             }
+     439              :           else
+     440              :             return [&__a]<size_t... _Idx>(index_sequence<_Idx...>) {
+     441              :               return array<remove_cv_t<_Tp>, _Nm>{{ __a[_Idx]... }};
+     442              :             }(make_index_sequence<_Nm>{});
+     443              :         }
+     444              :       else
+     445              :         __builtin_unreachable(); // FIXME: see PR c++/91388
+     446              :     }
+     447              : 
+     448              :   template<typename _Tp, size_t _Nm>
+     449              :     [[nodiscard]]
+     450              :     constexpr array<remove_cv_t<_Tp>, _Nm>
+     451              :     to_array(_Tp (&&__a)[_Nm])
+     452              :     noexcept(is_nothrow_move_constructible_v<_Tp>)
+     453              :     {
+     454              :       static_assert(!is_array_v<_Tp>);
+     455              :       static_assert(is_move_constructible_v<_Tp>);
+     456              :       if constexpr (is_move_constructible_v<_Tp>)
+     457              :         {
+     458              :           if constexpr (is_trivial_v<_Tp>)
+     459              :             {
+     460              :               array<remove_cv_t<_Tp>, _Nm> __arr;
+     461              :               if (!__is_constant_evaluated() && _Nm != 0)
+     462              :                 __builtin_memcpy((void*)__arr.data(), (void*)__a, sizeof(__a));
+     463              :               else
+     464              :                 for (size_t __i = 0; __i < _Nm; ++__i)
+     465              :                   __arr._M_elems[__i] = __a[__i];
+     466              :               return __arr;
+     467              :             }
+     468              :           else
+     469              :             return [&__a]<size_t... _Idx>(index_sequence<_Idx...>) {
+     470              :               return array<remove_cv_t<_Tp>, _Nm>{{ std::move(__a[_Idx])... }};
+     471              :             }(make_index_sequence<_Nm>{});
+     472              :         }
+     473              :       else
+     474              :         __builtin_unreachable(); // FIXME: see PR c++/91388
+     475              :     }
+     476              : #endif // C++20
+     477              : 
+     478              :   // Tuple interface to class template array.
+     479              : 
+     480              :   /// Partial specialization for std::array
+     481              :   template<typename _Tp, size_t _Nm>
+     482              :     struct tuple_size<array<_Tp, _Nm>>
+     483              :     : public integral_constant<size_t, _Nm> { };
+     484              : 
+     485              :   /// Partial specialization for std::array
+     486              :   template<size_t _Ind, typename _Tp, size_t _Nm>
+     487              :     struct tuple_element<_Ind, array<_Tp, _Nm>>
+     488              :     {
+     489              :       static_assert(_Ind < _Nm, "array index is in range");
+     490              :       using type = _Tp;
+     491              :     };
+     492              : 
+     493              : #if __cplusplus >= 201703L
+     494              :   template<typename _Tp, size_t _Nm>
+     495              :     inline constexpr size_t tuple_size_v<array<_Tp, _Nm>> = _Nm;
+     496              : 
+     497              :   template<typename _Tp, size_t _Nm>
+     498              :     inline constexpr size_t tuple_size_v<const array<_Tp, _Nm>> = _Nm;
+     499              : #endif
+     500              : 
+     501              :   template<typename _Tp, size_t _Nm>
+     502              :     struct __is_tuple_like_impl<array<_Tp, _Nm>> : true_type
+     503              :     { };
+     504              : 
+     505              : _GLIBCXX_END_NAMESPACE_VERSION
+     506              : } // namespace std
+     507              : 
+     508              : #endif // C++11
+     509              : 
+     510              : #endif // _GLIBCXX_ARRAY
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/atomic.func-c.html b/html/usr/include/c++/13/atomic.func-c.html new file mode 100644 index 0000000..bfc07de --- /dev/null +++ b/html/usr/include/c++/13/atomic.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/atomic - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - atomic (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt6atomicIjEC2Ej378768
_ZNSt6atomicImEC2Em757536
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/atomic.func.html b/html/usr/include/c++/13/atomic.func.html new file mode 100644 index 0000000..f3e2588 --- /dev/null +++ b/html/usr/include/c++/13/atomic.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/atomic - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - atomic (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt6atomicIjEC2Ej378768
_ZNSt6atomicImEC2Em757536
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/atomic.gcov.html b/html/usr/include/c++/13/atomic.gcov.html new file mode 100644 index 0000000..d0f1aaa --- /dev/null +++ b/html/usr/include/c++/13/atomic.gcov.html @@ -0,0 +1,1871 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/atomic + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - atomic (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // -*- C++ -*- header.
+       2              : 
+       3              : // Copyright (C) 2008-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file include/atomic
+      26              :  *  This is a Standard C++ Library header.
+      27              :  */
+      28              : 
+      29              : // Based on "C++ Atomic Types and Operations" by Hans Boehm and Lawrence Crowl.
+      30              : // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html
+      31              : 
+      32              : #ifndef _GLIBCXX_ATOMIC
+      33              : #define _GLIBCXX_ATOMIC 1
+      34              : 
+      35              : #pragma GCC system_header
+      36              : 
+      37              : #if __cplusplus < 201103L
+      38              : # include <bits/c++0x_warning.h>
+      39              : #else
+      40              : 
+      41              : #include <bits/atomic_base.h>
+      42              : 
+      43              : namespace std _GLIBCXX_VISIBILITY(default)
+      44              : {
+      45              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      46              : 
+      47              :   /**
+      48              :    * @addtogroup atomics
+      49              :    * @{
+      50              :    */
+      51              : 
+      52              : #if __cplusplus >= 201703L
+      53              : # define __cpp_lib_atomic_is_always_lock_free 201603L
+      54              : #endif
+      55              : 
+      56              :   template<typename _Tp>
+      57              :     struct atomic;
+      58              : 
+      59              :   /// atomic<bool>
+      60              :   // NB: No operators or fetch-operations for this type.
+      61              :   template<>
+      62              :   struct atomic<bool>
+      63              :   {
+      64              :     using value_type = bool;
+      65              : 
+      66              :   private:
+      67              :     __atomic_base<bool>   _M_base;
+      68              : 
+      69              :   public:
+      70              :     atomic() noexcept = default;
+      71              :     ~atomic() noexcept = default;
+      72              :     atomic(const atomic&) = delete;
+      73              :     atomic& operator=(const atomic&) = delete;
+      74              :     atomic& operator=(const atomic&) volatile = delete;
+      75              : 
+      76              :     constexpr atomic(bool __i) noexcept : _M_base(__i) { }
+      77              : 
+      78              :     bool
+      79              :     operator=(bool __i) noexcept
+      80              :     { return _M_base.operator=(__i); }
+      81              : 
+      82              :     bool
+      83              :     operator=(bool __i) volatile noexcept
+      84              :     { return _M_base.operator=(__i); }
+      85              : 
+      86              :     operator bool() const noexcept
+      87              :     { return _M_base.load(); }
+      88              : 
+      89              :     operator bool() const volatile noexcept
+      90              :     { return _M_base.load(); }
+      91              : 
+      92              :     bool
+      93              :     is_lock_free() const noexcept { return _M_base.is_lock_free(); }
+      94              : 
+      95              :     bool
+      96              :     is_lock_free() const volatile noexcept { return _M_base.is_lock_free(); }
+      97              : 
+      98              : #if __cplusplus >= 201703L
+      99              :     static constexpr bool is_always_lock_free = ATOMIC_BOOL_LOCK_FREE == 2;
+     100              : #endif
+     101              : 
+     102              :     void
+     103              :     store(bool __i, memory_order __m = memory_order_seq_cst) noexcept
+     104              :     { _M_base.store(__i, __m); }
+     105              : 
+     106              :     void
+     107              :     store(bool __i, memory_order __m = memory_order_seq_cst) volatile noexcept
+     108              :     { _M_base.store(__i, __m); }
+     109              : 
+     110              :     bool
+     111              :     load(memory_order __m = memory_order_seq_cst) const noexcept
+     112              :     { return _M_base.load(__m); }
+     113              : 
+     114              :     bool
+     115              :     load(memory_order __m = memory_order_seq_cst) const volatile noexcept
+     116              :     { return _M_base.load(__m); }
+     117              : 
+     118              :     bool
+     119              :     exchange(bool __i, memory_order __m = memory_order_seq_cst) noexcept
+     120              :     { return _M_base.exchange(__i, __m); }
+     121              : 
+     122              :     bool
+     123              :     exchange(bool __i,
+     124              :              memory_order __m = memory_order_seq_cst) volatile noexcept
+     125              :     { return _M_base.exchange(__i, __m); }
+     126              : 
+     127              :     bool
+     128              :     compare_exchange_weak(bool& __i1, bool __i2, memory_order __m1,
+     129              :                           memory_order __m2) noexcept
+     130              :     { return _M_base.compare_exchange_weak(__i1, __i2, __m1, __m2); }
+     131              : 
+     132              :     bool
+     133              :     compare_exchange_weak(bool& __i1, bool __i2, memory_order __m1,
+     134              :                           memory_order __m2) volatile noexcept
+     135              :     { return _M_base.compare_exchange_weak(__i1, __i2, __m1, __m2); }
+     136              : 
+     137              :     bool
+     138              :     compare_exchange_weak(bool& __i1, bool __i2,
+     139              :                           memory_order __m = memory_order_seq_cst) noexcept
+     140              :     { return _M_base.compare_exchange_weak(__i1, __i2, __m); }
+     141              : 
+     142              :     bool
+     143              :     compare_exchange_weak(bool& __i1, bool __i2,
+     144              :                      memory_order __m = memory_order_seq_cst) volatile noexcept
+     145              :     { return _M_base.compare_exchange_weak(__i1, __i2, __m); }
+     146              : 
+     147              :     bool
+     148              :     compare_exchange_strong(bool& __i1, bool __i2, memory_order __m1,
+     149              :                             memory_order __m2) noexcept
+     150              :     { return _M_base.compare_exchange_strong(__i1, __i2, __m1, __m2); }
+     151              : 
+     152              :     bool
+     153              :     compare_exchange_strong(bool& __i1, bool __i2, memory_order __m1,
+     154              :                             memory_order __m2) volatile noexcept
+     155              :     { return _M_base.compare_exchange_strong(__i1, __i2, __m1, __m2); }
+     156              : 
+     157              :     bool
+     158              :     compare_exchange_strong(bool& __i1, bool __i2,
+     159              :                             memory_order __m = memory_order_seq_cst) noexcept
+     160              :     { return _M_base.compare_exchange_strong(__i1, __i2, __m); }
+     161              : 
+     162              :     bool
+     163              :     compare_exchange_strong(bool& __i1, bool __i2,
+     164              :                     memory_order __m = memory_order_seq_cst) volatile noexcept
+     165              :     { return _M_base.compare_exchange_strong(__i1, __i2, __m); }
+     166              : 
+     167              : #if __cpp_lib_atomic_wait
+     168              :     void
+     169              :     wait(bool __old, memory_order __m = memory_order_seq_cst) const noexcept
+     170              :     { _M_base.wait(__old, __m); }
+     171              : 
+     172              :     // TODO add const volatile overload
+     173              : 
+     174              :     void
+     175              :     notify_one() noexcept
+     176              :     { _M_base.notify_one(); }
+     177              : 
+     178              :     void
+     179              :     notify_all() noexcept
+     180              :     { _M_base.notify_all(); }
+     181              : #endif // __cpp_lib_atomic_wait
+     182              :   };
+     183              : 
+     184              : /// @cond undocumented
+     185              : #if __cpp_lib_atomic_value_initialization
+     186              : # define _GLIBCXX20_INIT(I) = I
+     187              : #else
+     188              : # define _GLIBCXX20_INIT(I)
+     189              : #endif
+     190              : /// @endcond
+     191              : 
+     192              :   /**
+     193              :    *  @brief Generic atomic type, primary class template.
+     194              :    *
+     195              :    *  @tparam _Tp  Type to be made atomic, must be trivially copyable.
+     196              :    */
+     197              :   template<typename _Tp>
+     198              :     struct atomic
+     199              :     {
+     200              :       using value_type = _Tp;
+     201              : 
+     202              :     private:
+     203              :       // Align 1/2/4/8/16-byte types to at least their size.
+     204              :       static constexpr int _S_min_alignment
+     205              :         = (sizeof(_Tp) & (sizeof(_Tp) - 1)) || sizeof(_Tp) > 16
+     206              :         ? 0 : sizeof(_Tp);
+     207              : 
+     208              :       static constexpr int _S_alignment
+     209              :         = _S_min_alignment > alignof(_Tp) ? _S_min_alignment : alignof(_Tp);
+     210              : 
+     211              :       alignas(_S_alignment) _Tp _M_i _GLIBCXX20_INIT(_Tp());
+     212              : 
+     213              :       static_assert(__is_trivially_copyable(_Tp),
+     214              :                     "std::atomic requires a trivially copyable type");
+     215              : 
+     216              :       static_assert(sizeof(_Tp) > 0,
+     217              :                     "Incomplete or zero-sized types are not supported");
+     218              : 
+     219              : #if __cplusplus > 201703L
+     220              :       static_assert(is_copy_constructible_v<_Tp>);
+     221              :       static_assert(is_move_constructible_v<_Tp>);
+     222              :       static_assert(is_copy_assignable_v<_Tp>);
+     223              :       static_assert(is_move_assignable_v<_Tp>);
+     224              : #endif
+     225              : 
+     226              :     public:
+     227              :       atomic() = default;
+     228              :       ~atomic() noexcept = default;
+     229              :       atomic(const atomic&) = delete;
+     230              :       atomic& operator=(const atomic&) = delete;
+     231              :       atomic& operator=(const atomic&) volatile = delete;
+     232              : 
+     233              :       constexpr atomic(_Tp __i) noexcept : _M_i(__i)
+     234              :       {
+     235              : #if __cplusplus >= 201402L && __has_builtin(__builtin_clear_padding)
+     236              :         if _GLIBCXX17_CONSTEXPR (__atomic_impl::__maybe_has_padding<_Tp>())
+     237              :           __builtin_clear_padding(std::__addressof(_M_i));
+     238              : #endif
+     239              :       }
+     240              : 
+     241              :       operator _Tp() const noexcept
+     242              :       { return load(); }
+     243              : 
+     244              :       operator _Tp() const volatile noexcept
+     245              :       { return load(); }
+     246              : 
+     247              :       _Tp
+     248              :       operator=(_Tp __i) noexcept
+     249              :       { store(__i); return __i; }
+     250              : 
+     251              :       _Tp
+     252              :       operator=(_Tp __i) volatile noexcept
+     253              :       { store(__i); return __i; }
+     254              : 
+     255              :       bool
+     256              :       is_lock_free() const noexcept
+     257              :       {
+     258              :         // Produce a fake, minimally aligned pointer.
+     259              :         return __atomic_is_lock_free(sizeof(_M_i),
+     260              :             reinterpret_cast<void *>(-_S_alignment));
+     261              :       }
+     262              : 
+     263              :       bool
+     264              :       is_lock_free() const volatile noexcept
+     265              :       {
+     266              :         // Produce a fake, minimally aligned pointer.
+     267              :         return __atomic_is_lock_free(sizeof(_M_i),
+     268              :             reinterpret_cast<void *>(-_S_alignment));
+     269              :       }
+     270              : 
+     271              : #if __cplusplus >= 201703L
+     272              :       static constexpr bool is_always_lock_free
+     273              :         = __atomic_always_lock_free(sizeof(_M_i), 0);
+     274              : #endif
+     275              : 
+     276              :       void
+     277              :       store(_Tp __i, memory_order __m = memory_order_seq_cst) noexcept
+     278              :       {
+     279              :         __atomic_store(std::__addressof(_M_i),
+     280              :                        __atomic_impl::__clear_padding(__i),
+     281              :                        int(__m));
+     282              :       }
+     283              : 
+     284              :       void
+     285              :       store(_Tp __i, memory_order __m = memory_order_seq_cst) volatile noexcept
+     286              :       {
+     287              :         __atomic_store(std::__addressof(_M_i),
+     288              :                        __atomic_impl::__clear_padding(__i),
+     289              :                        int(__m));
+     290              :       }
+     291              : 
+     292              :       _Tp
+     293              :       load(memory_order __m = memory_order_seq_cst) const noexcept
+     294              :       {
+     295              :         alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
+     296              :         _Tp* __ptr = reinterpret_cast<_Tp*>(__buf);
+     297              :         __atomic_load(std::__addressof(_M_i), __ptr, int(__m));
+     298              :         return *__ptr;
+     299              :       }
+     300              : 
+     301              :       _Tp
+     302              :       load(memory_order __m = memory_order_seq_cst) const volatile noexcept
+     303              :       {
+     304              :         alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
+     305              :         _Tp* __ptr = reinterpret_cast<_Tp*>(__buf);
+     306              :         __atomic_load(std::__addressof(_M_i), __ptr, int(__m));
+     307              :         return *__ptr;
+     308              :       }
+     309              : 
+     310              :       _Tp
+     311              :       exchange(_Tp __i, memory_order __m = memory_order_seq_cst) noexcept
+     312              :       {
+     313              :         alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
+     314              :         _Tp* __ptr = reinterpret_cast<_Tp*>(__buf);
+     315              :         __atomic_exchange(std::__addressof(_M_i),
+     316              :                           __atomic_impl::__clear_padding(__i),
+     317              :                           __ptr, int(__m));
+     318              :         return *__ptr;
+     319              :       }
+     320              : 
+     321              :       _Tp
+     322              :       exchange(_Tp __i,
+     323              :                memory_order __m = memory_order_seq_cst) volatile noexcept
+     324              :       {
+     325              :         alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
+     326              :         _Tp* __ptr = reinterpret_cast<_Tp*>(__buf);
+     327              :         __atomic_exchange(std::__addressof(_M_i),
+     328              :                           __atomic_impl::__clear_padding(__i),
+     329              :                           __ptr, int(__m));
+     330              :         return *__ptr;
+     331              :       }
+     332              : 
+     333              :       bool
+     334              :       compare_exchange_weak(_Tp& __e, _Tp __i, memory_order __s,
+     335              :                             memory_order __f) noexcept
+     336              :       {
+     337              :         return __atomic_impl::__compare_exchange(_M_i, __e, __i, true,
+     338              :                                                  __s, __f);
+     339              :       }
+     340              : 
+     341              :       bool
+     342              :       compare_exchange_weak(_Tp& __e, _Tp __i, memory_order __s,
+     343              :                             memory_order __f) volatile noexcept
+     344              :       {
+     345              :         return __atomic_impl::__compare_exchange(_M_i, __e, __i, true,
+     346              :                                                  __s, __f);
+     347              :       }
+     348              : 
+     349              :       bool
+     350              :       compare_exchange_weak(_Tp& __e, _Tp __i,
+     351              :                             memory_order __m = memory_order_seq_cst) noexcept
+     352              :       { return compare_exchange_weak(__e, __i, __m,
+     353              :                                      __cmpexch_failure_order(__m)); }
+     354              : 
+     355              :       bool
+     356              :       compare_exchange_weak(_Tp& __e, _Tp __i,
+     357              :                      memory_order __m = memory_order_seq_cst) volatile noexcept
+     358              :       { return compare_exchange_weak(__e, __i, __m,
+     359              :                                      __cmpexch_failure_order(__m)); }
+     360              : 
+     361              :       bool
+     362              :       compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s,
+     363              :                               memory_order __f) noexcept
+     364              :       {
+     365              :         return __atomic_impl::__compare_exchange(_M_i, __e, __i, false,
+     366              :                                                  __s, __f);
+     367              :       }
+     368              : 
+     369              :       bool
+     370              :       compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s,
+     371              :                               memory_order __f) volatile noexcept
+     372              :       {
+     373              :         return __atomic_impl::__compare_exchange(_M_i, __e, __i, false,
+     374              :                                                  __s, __f);
+     375              :       }
+     376              : 
+     377              :       bool
+     378              :       compare_exchange_strong(_Tp& __e, _Tp __i,
+     379              :                                memory_order __m = memory_order_seq_cst) noexcept
+     380              :       { return compare_exchange_strong(__e, __i, __m,
+     381              :                                        __cmpexch_failure_order(__m)); }
+     382              : 
+     383              :       bool
+     384              :       compare_exchange_strong(_Tp& __e, _Tp __i,
+     385              :                      memory_order __m = memory_order_seq_cst) volatile noexcept
+     386              :       { return compare_exchange_strong(__e, __i, __m,
+     387              :                                        __cmpexch_failure_order(__m)); }
+     388              : 
+     389              : #if __cpp_lib_atomic_wait
+     390              :     void
+     391              :     wait(_Tp __old, memory_order __m = memory_order_seq_cst) const noexcept
+     392              :     {
+     393              :       std::__atomic_wait_address_v(&_M_i, __old,
+     394              :                          [__m, this] { return this->load(__m); });
+     395              :     }
+     396              : 
+     397              :     // TODO add const volatile overload
+     398              : 
+     399              :     void
+     400              :     notify_one() noexcept
+     401              :     { std::__atomic_notify_address(&_M_i, false); }
+     402              : 
+     403              :     void
+     404              :     notify_all() noexcept
+     405              :     { std::__atomic_notify_address(&_M_i, true); }
+     406              : #endif // __cpp_lib_atomic_wait
+     407              : 
+     408              :     };
+     409              : #undef _GLIBCXX20_INIT
+     410              : 
+     411              :   /// Partial specialization for pointer types.
+     412              :   template<typename _Tp>
+     413              :     struct atomic<_Tp*>
+     414              :     {
+     415              :       using value_type = _Tp*;
+     416              :       using difference_type = ptrdiff_t;
+     417              : 
+     418              :       typedef _Tp*                      __pointer_type;
+     419              :       typedef __atomic_base<_Tp*> __base_type;
+     420              :       __base_type                       _M_b;
+     421              : 
+     422              :       atomic() noexcept = default;
+     423              :       ~atomic() noexcept = default;
+     424              :       atomic(const atomic&) = delete;
+     425              :       atomic& operator=(const atomic&) = delete;
+     426              :       atomic& operator=(const atomic&) volatile = delete;
+     427              : 
+     428              :       constexpr atomic(__pointer_type __p) noexcept : _M_b(__p) { }
+     429              : 
+     430              :       operator __pointer_type() const noexcept
+     431              :       { return __pointer_type(_M_b); }
+     432              : 
+     433              :       operator __pointer_type() const volatile noexcept
+     434              :       { return __pointer_type(_M_b); }
+     435              : 
+     436              :       __pointer_type
+     437              :       operator=(__pointer_type __p) noexcept
+     438              :       { return _M_b.operator=(__p); }
+     439              : 
+     440              :       __pointer_type
+     441              :       operator=(__pointer_type __p) volatile noexcept
+     442              :       { return _M_b.operator=(__p); }
+     443              : 
+     444              :       __pointer_type
+     445              :       operator++(int) noexcept
+     446              :       {
+     447              : #if __cplusplus >= 201703L
+     448              :         static_assert( is_object<_Tp>::value, "pointer to object type" );
+     449              : #endif
+     450              :         return _M_b++;
+     451              :       }
+     452              : 
+     453              :       __pointer_type
+     454              :       operator++(int) volatile noexcept
+     455              :       {
+     456              : #if __cplusplus >= 201703L
+     457              :         static_assert( is_object<_Tp>::value, "pointer to object type" );
+     458              : #endif
+     459              :         return _M_b++;
+     460              :       }
+     461              : 
+     462              :       __pointer_type
+     463              :       operator--(int) noexcept
+     464              :       {
+     465              : #if __cplusplus >= 201703L
+     466              :         static_assert( is_object<_Tp>::value, "pointer to object type" );
+     467              : #endif
+     468              :         return _M_b--;
+     469              :       }
+     470              : 
+     471              :       __pointer_type
+     472              :       operator--(int) volatile noexcept
+     473              :       {
+     474              : #if __cplusplus >= 201703L
+     475              :         static_assert( is_object<_Tp>::value, "pointer to object type" );
+     476              : #endif
+     477              :         return _M_b--;
+     478              :       }
+     479              : 
+     480              :       __pointer_type
+     481              :       operator++() noexcept
+     482              :       {
+     483              : #if __cplusplus >= 201703L
+     484              :         static_assert( is_object<_Tp>::value, "pointer to object type" );
+     485              : #endif
+     486              :         return ++_M_b;
+     487              :       }
+     488              : 
+     489              :       __pointer_type
+     490              :       operator++() volatile noexcept
+     491              :       {
+     492              : #if __cplusplus >= 201703L
+     493              :         static_assert( is_object<_Tp>::value, "pointer to object type" );
+     494              : #endif
+     495              :         return ++_M_b;
+     496              :       }
+     497              : 
+     498              :       __pointer_type
+     499              :       operator--() noexcept
+     500              :       {
+     501              : #if __cplusplus >= 201703L
+     502              :         static_assert( is_object<_Tp>::value, "pointer to object type" );
+     503              : #endif
+     504              :         return --_M_b;
+     505              :       }
+     506              : 
+     507              :       __pointer_type
+     508              :       operator--() volatile noexcept
+     509              :       {
+     510              : #if __cplusplus >= 201703L
+     511              :         static_assert( is_object<_Tp>::value, "pointer to object type" );
+     512              : #endif
+     513              :         return --_M_b;
+     514              :       }
+     515              : 
+     516              :       __pointer_type
+     517              :       operator+=(ptrdiff_t __d) noexcept
+     518              :       {
+     519              : #if __cplusplus >= 201703L
+     520              :         static_assert( is_object<_Tp>::value, "pointer to object type" );
+     521              : #endif
+     522              :         return _M_b.operator+=(__d);
+     523              :       }
+     524              : 
+     525              :       __pointer_type
+     526              :       operator+=(ptrdiff_t __d) volatile noexcept
+     527              :       {
+     528              : #if __cplusplus >= 201703L
+     529              :         static_assert( is_object<_Tp>::value, "pointer to object type" );
+     530              : #endif
+     531              :         return _M_b.operator+=(__d);
+     532              :       }
+     533              : 
+     534              :       __pointer_type
+     535              :       operator-=(ptrdiff_t __d) noexcept
+     536              :       {
+     537              : #if __cplusplus >= 201703L
+     538              :         static_assert( is_object<_Tp>::value, "pointer to object type" );
+     539              : #endif
+     540              :         return _M_b.operator-=(__d);
+     541              :       }
+     542              : 
+     543              :       __pointer_type
+     544              :       operator-=(ptrdiff_t __d) volatile noexcept
+     545              :       {
+     546              : #if __cplusplus >= 201703L
+     547              :         static_assert( is_object<_Tp>::value, "pointer to object type" );
+     548              : #endif
+     549              :         return _M_b.operator-=(__d);
+     550              :       }
+     551              : 
+     552              :       bool
+     553              :       is_lock_free() const noexcept
+     554              :       { return _M_b.is_lock_free(); }
+     555              : 
+     556              :       bool
+     557              :       is_lock_free() const volatile noexcept
+     558              :       { return _M_b.is_lock_free(); }
+     559              : 
+     560              : #if __cplusplus >= 201703L
+     561              :       static constexpr bool is_always_lock_free
+     562              :         = ATOMIC_POINTER_LOCK_FREE == 2;
+     563              : #endif
+     564              : 
+     565              :       void
+     566              :       store(__pointer_type __p,
+     567              :             memory_order __m = memory_order_seq_cst) noexcept
+     568              :       { return _M_b.store(__p, __m); }
+     569              : 
+     570              :       void
+     571              :       store(__pointer_type __p,
+     572              :             memory_order __m = memory_order_seq_cst) volatile noexcept
+     573              :       { return _M_b.store(__p, __m); }
+     574              : 
+     575              :       __pointer_type
+     576              :       load(memory_order __m = memory_order_seq_cst) const noexcept
+     577              :       { return _M_b.load(__m); }
+     578              : 
+     579              :       __pointer_type
+     580              :       load(memory_order __m = memory_order_seq_cst) const volatile noexcept
+     581              :       { return _M_b.load(__m); }
+     582              : 
+     583              :       __pointer_type
+     584              :       exchange(__pointer_type __p,
+     585              :                memory_order __m = memory_order_seq_cst) noexcept
+     586              :       { return _M_b.exchange(__p, __m); }
+     587              : 
+     588              :       __pointer_type
+     589              :       exchange(__pointer_type __p,
+     590              :                memory_order __m = memory_order_seq_cst) volatile noexcept
+     591              :       { return _M_b.exchange(__p, __m); }
+     592              : 
+     593              :       bool
+     594              :       compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
+     595              :                             memory_order __m1, memory_order __m2) noexcept
+     596              :       { return _M_b.compare_exchange_weak(__p1, __p2, __m1, __m2); }
+     597              : 
+     598              :       bool
+     599              :       compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
+     600              :                             memory_order __m1,
+     601              :                             memory_order __m2) volatile noexcept
+     602              :       { return _M_b.compare_exchange_weak(__p1, __p2, __m1, __m2); }
+     603              : 
+     604              :       bool
+     605              :       compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
+     606              :                             memory_order __m = memory_order_seq_cst) noexcept
+     607              :       {
+     608              :         return compare_exchange_weak(__p1, __p2, __m,
+     609              :                                      __cmpexch_failure_order(__m));
+     610              :       }
+     611              : 
+     612              :       bool
+     613              :       compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
+     614              :                     memory_order __m = memory_order_seq_cst) volatile noexcept
+     615              :       {
+     616              :         return compare_exchange_weak(__p1, __p2, __m,
+     617              :                                      __cmpexch_failure_order(__m));
+     618              :       }
+     619              : 
+     620              :       bool
+     621              :       compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
+     622              :                               memory_order __m1, memory_order __m2) noexcept
+     623              :       { return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); }
+     624              : 
+     625              :       bool
+     626              :       compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
+     627              :                               memory_order __m1,
+     628              :                               memory_order __m2) volatile noexcept
+     629              :       { return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); }
+     630              : 
+     631              :       bool
+     632              :       compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
+     633              :                               memory_order __m = memory_order_seq_cst) noexcept
+     634              :       {
+     635              :         return _M_b.compare_exchange_strong(__p1, __p2, __m,
+     636              :                                             __cmpexch_failure_order(__m));
+     637              :       }
+     638              : 
+     639              :       bool
+     640              :       compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
+     641              :                     memory_order __m = memory_order_seq_cst) volatile noexcept
+     642              :       {
+     643              :         return _M_b.compare_exchange_strong(__p1, __p2, __m,
+     644              :                                             __cmpexch_failure_order(__m));
+     645              :       }
+     646              : 
+     647              : #if __cpp_lib_atomic_wait
+     648              :     void
+     649              :     wait(__pointer_type __old, memory_order __m = memory_order_seq_cst) const noexcept
+     650              :     { _M_b.wait(__old, __m); }
+     651              : 
+     652              :     // TODO add const volatile overload
+     653              : 
+     654              :     void
+     655              :     notify_one() noexcept
+     656              :     { _M_b.notify_one(); }
+     657              : 
+     658              :     void
+     659              :     notify_all() noexcept
+     660              :     { _M_b.notify_all(); }
+     661              : #endif // __cpp_lib_atomic_wait
+     662              : 
+     663              :       __pointer_type
+     664              :       fetch_add(ptrdiff_t __d,
+     665              :                 memory_order __m = memory_order_seq_cst) noexcept
+     666              :       {
+     667              : #if __cplusplus >= 201703L
+     668              :         static_assert( is_object<_Tp>::value, "pointer to object type" );
+     669              : #endif
+     670              :         return _M_b.fetch_add(__d, __m);
+     671              :       }
+     672              : 
+     673              :       __pointer_type
+     674              :       fetch_add(ptrdiff_t __d,
+     675              :                 memory_order __m = memory_order_seq_cst) volatile noexcept
+     676              :       {
+     677              : #if __cplusplus >= 201703L
+     678              :         static_assert( is_object<_Tp>::value, "pointer to object type" );
+     679              : #endif
+     680              :         return _M_b.fetch_add(__d, __m);
+     681              :       }
+     682              : 
+     683              :       __pointer_type
+     684              :       fetch_sub(ptrdiff_t __d,
+     685              :                 memory_order __m = memory_order_seq_cst) noexcept
+     686              :       {
+     687              : #if __cplusplus >= 201703L
+     688              :         static_assert( is_object<_Tp>::value, "pointer to object type" );
+     689              : #endif
+     690              :         return _M_b.fetch_sub(__d, __m);
+     691              :       }
+     692              : 
+     693              :       __pointer_type
+     694              :       fetch_sub(ptrdiff_t __d,
+     695              :                 memory_order __m = memory_order_seq_cst) volatile noexcept
+     696              :       {
+     697              : #if __cplusplus >= 201703L
+     698              :         static_assert( is_object<_Tp>::value, "pointer to object type" );
+     699              : #endif
+     700              :         return _M_b.fetch_sub(__d, __m);
+     701              :       }
+     702              :     };
+     703              : 
+     704              : 
+     705              :   /// Explicit specialization for char.
+     706              :   template<>
+     707              :     struct atomic<char> : __atomic_base<char>
+     708              :     {
+     709              :       typedef char                      __integral_type;
+     710              :       typedef __atomic_base<char>         __base_type;
+     711              : 
+     712              :       atomic() noexcept = default;
+     713              :       ~atomic() noexcept = default;
+     714              :       atomic(const atomic&) = delete;
+     715              :       atomic& operator=(const atomic&) = delete;
+     716              :       atomic& operator=(const atomic&) volatile = delete;
+     717              : 
+     718              :       constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
+     719              : 
+     720              :       using __base_type::operator __integral_type;
+     721              :       using __base_type::operator=;
+     722              : 
+     723              : #if __cplusplus >= 201703L
+     724              :       static constexpr bool is_always_lock_free = ATOMIC_CHAR_LOCK_FREE == 2;
+     725              : #endif
+     726              :     };
+     727              : 
+     728              :   /// Explicit specialization for signed char.
+     729              :   template<>
+     730              :     struct atomic<signed char> : __atomic_base<signed char>
+     731              :     {
+     732              :       typedef signed char               __integral_type;
+     733              :       typedef __atomic_base<signed char>  __base_type;
+     734              : 
+     735              :       atomic() noexcept= default;
+     736              :       ~atomic() noexcept = default;
+     737              :       atomic(const atomic&) = delete;
+     738              :       atomic& operator=(const atomic&) = delete;
+     739              :       atomic& operator=(const atomic&) volatile = delete;
+     740              : 
+     741              :       constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
+     742              : 
+     743              :       using __base_type::operator __integral_type;
+     744              :       using __base_type::operator=;
+     745              : 
+     746              : #if __cplusplus >= 201703L
+     747              :       static constexpr bool is_always_lock_free = ATOMIC_CHAR_LOCK_FREE == 2;
+     748              : #endif
+     749              :     };
+     750              : 
+     751              :   /// Explicit specialization for unsigned char.
+     752              :   template<>
+     753              :     struct atomic<unsigned char> : __atomic_base<unsigned char>
+     754              :     {
+     755              :       typedef unsigned char             __integral_type;
+     756              :       typedef __atomic_base<unsigned char>        __base_type;
+     757              : 
+     758              :       atomic() noexcept= default;
+     759              :       ~atomic() noexcept = default;
+     760              :       atomic(const atomic&) = delete;
+     761              :       atomic& operator=(const atomic&) = delete;
+     762              :       atomic& operator=(const atomic&) volatile = delete;
+     763              : 
+     764              :       constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
+     765              : 
+     766              :       using __base_type::operator __integral_type;
+     767              :       using __base_type::operator=;
+     768              : 
+     769              : #if __cplusplus >= 201703L
+     770              :       static constexpr bool is_always_lock_free = ATOMIC_CHAR_LOCK_FREE == 2;
+     771              : #endif
+     772              :     };
+     773              : 
+     774              :   /// Explicit specialization for short.
+     775              :   template<>
+     776              :     struct atomic<short> : __atomic_base<short>
+     777              :     {
+     778              :       typedef short                     __integral_type;
+     779              :       typedef __atomic_base<short>                __base_type;
+     780              : 
+     781              :       atomic() noexcept = default;
+     782              :       ~atomic() noexcept = default;
+     783              :       atomic(const atomic&) = delete;
+     784              :       atomic& operator=(const atomic&) = delete;
+     785              :       atomic& operator=(const atomic&) volatile = delete;
+     786              : 
+     787              :       constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
+     788              : 
+     789              :       using __base_type::operator __integral_type;
+     790              :       using __base_type::operator=;
+     791              : 
+     792              : #if __cplusplus >= 201703L
+     793              :       static constexpr bool is_always_lock_free = ATOMIC_SHORT_LOCK_FREE == 2;
+     794              : #endif
+     795              :     };
+     796              : 
+     797              :   /// Explicit specialization for unsigned short.
+     798              :   template<>
+     799              :     struct atomic<unsigned short> : __atomic_base<unsigned short>
+     800              :     {
+     801              :       typedef unsigned short            __integral_type;
+     802              :       typedef __atomic_base<unsigned short>               __base_type;
+     803              : 
+     804              :       atomic() noexcept = default;
+     805              :       ~atomic() noexcept = default;
+     806              :       atomic(const atomic&) = delete;
+     807              :       atomic& operator=(const atomic&) = delete;
+     808              :       atomic& operator=(const atomic&) volatile = delete;
+     809              : 
+     810              :       constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
+     811              : 
+     812              :       using __base_type::operator __integral_type;
+     813              :       using __base_type::operator=;
+     814              : 
+     815              : #if __cplusplus >= 201703L
+     816              :       static constexpr bool is_always_lock_free = ATOMIC_SHORT_LOCK_FREE == 2;
+     817              : #endif
+     818              :     };
+     819              : 
+     820              :   /// Explicit specialization for int.
+     821              :   template<>
+     822              :     struct atomic<int> : __atomic_base<int>
+     823              :     {
+     824              :       typedef int                       __integral_type;
+     825              :       typedef __atomic_base<int>          __base_type;
+     826              : 
+     827              :       atomic() noexcept = default;
+     828              :       ~atomic() noexcept = default;
+     829              :       atomic(const atomic&) = delete;
+     830              :       atomic& operator=(const atomic&) = delete;
+     831              :       atomic& operator=(const atomic&) volatile = delete;
+     832              : 
+     833              :       constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
+     834              : 
+     835              :       using __base_type::operator __integral_type;
+     836              :       using __base_type::operator=;
+     837              : 
+     838              : #if __cplusplus >= 201703L
+     839              :       static constexpr bool is_always_lock_free = ATOMIC_INT_LOCK_FREE == 2;
+     840              : #endif
+     841              :     };
+     842              : 
+     843              :   /// Explicit specialization for unsigned int.
+     844              :   template<>
+     845              :     struct atomic<unsigned int> : __atomic_base<unsigned int>
+     846              :     {
+     847              :       typedef unsigned int              __integral_type;
+     848              :       typedef __atomic_base<unsigned int>         __base_type;
+     849              : 
+     850              :       atomic() noexcept = default;
+     851              :       ~atomic() noexcept = default;
+     852              :       atomic(const atomic&) = delete;
+     853              :       atomic& operator=(const atomic&) = delete;
+     854              :       atomic& operator=(const atomic&) volatile = delete;
+     855              : 
+     856       378768 :       constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
+     857              : 
+     858              :       using __base_type::operator __integral_type;
+     859              :       using __base_type::operator=;
+     860              : 
+     861              : #if __cplusplus >= 201703L
+     862              :       static constexpr bool is_always_lock_free = ATOMIC_INT_LOCK_FREE == 2;
+     863              : #endif
+     864              :     };
+     865              : 
+     866              :   /// Explicit specialization for long.
+     867              :   template<>
+     868              :     struct atomic<long> : __atomic_base<long>
+     869              :     {
+     870              :       typedef long                      __integral_type;
+     871              :       typedef __atomic_base<long>         __base_type;
+     872              : 
+     873              :       atomic() noexcept = default;
+     874              :       ~atomic() noexcept = default;
+     875              :       atomic(const atomic&) = delete;
+     876              :       atomic& operator=(const atomic&) = delete;
+     877              :       atomic& operator=(const atomic&) volatile = delete;
+     878              : 
+     879              :       constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
+     880              : 
+     881              :       using __base_type::operator __integral_type;
+     882              :       using __base_type::operator=;
+     883              : 
+     884              : #if __cplusplus >= 201703L
+     885              :       static constexpr bool is_always_lock_free = ATOMIC_LONG_LOCK_FREE == 2;
+     886              : #endif
+     887              :     };
+     888              : 
+     889              :   /// Explicit specialization for unsigned long.
+     890              :   template<>
+     891              :     struct atomic<unsigned long> : __atomic_base<unsigned long>
+     892              :     {
+     893              :       typedef unsigned long             __integral_type;
+     894              :       typedef __atomic_base<unsigned long>        __base_type;
+     895              : 
+     896              :       atomic() noexcept = default;
+     897              :       ~atomic() noexcept = default;
+     898              :       atomic(const atomic&) = delete;
+     899              :       atomic& operator=(const atomic&) = delete;
+     900              :       atomic& operator=(const atomic&) volatile = delete;
+     901              : 
+     902       757536 :       constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
+     903              : 
+     904              :       using __base_type::operator __integral_type;
+     905              :       using __base_type::operator=;
+     906              : 
+     907              : #if __cplusplus >= 201703L
+     908              :       static constexpr bool is_always_lock_free = ATOMIC_LONG_LOCK_FREE == 2;
+     909              : #endif
+     910              :     };
+     911              : 
+     912              :   /// Explicit specialization for long long.
+     913              :   template<>
+     914              :     struct atomic<long long> : __atomic_base<long long>
+     915              :     {
+     916              :       typedef long long                 __integral_type;
+     917              :       typedef __atomic_base<long long>            __base_type;
+     918              : 
+     919              :       atomic() noexcept = default;
+     920              :       ~atomic() noexcept = default;
+     921              :       atomic(const atomic&) = delete;
+     922              :       atomic& operator=(const atomic&) = delete;
+     923              :       atomic& operator=(const atomic&) volatile = delete;
+     924              : 
+     925              :       constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
+     926              : 
+     927              :       using __base_type::operator __integral_type;
+     928              :       using __base_type::operator=;
+     929              : 
+     930              : #if __cplusplus >= 201703L
+     931              :       static constexpr bool is_always_lock_free = ATOMIC_LLONG_LOCK_FREE == 2;
+     932              : #endif
+     933              :     };
+     934              : 
+     935              :   /// Explicit specialization for unsigned long long.
+     936              :   template<>
+     937              :     struct atomic<unsigned long long> : __atomic_base<unsigned long long>
+     938              :     {
+     939              :       typedef unsigned long long        __integral_type;
+     940              :       typedef __atomic_base<unsigned long long>   __base_type;
+     941              : 
+     942              :       atomic() noexcept = default;
+     943              :       ~atomic() noexcept = default;
+     944              :       atomic(const atomic&) = delete;
+     945              :       atomic& operator=(const atomic&) = delete;
+     946              :       atomic& operator=(const atomic&) volatile = delete;
+     947              : 
+     948              :       constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
+     949              : 
+     950              :       using __base_type::operator __integral_type;
+     951              :       using __base_type::operator=;
+     952              : 
+     953              : #if __cplusplus >= 201703L
+     954              :       static constexpr bool is_always_lock_free = ATOMIC_LLONG_LOCK_FREE == 2;
+     955              : #endif
+     956              :     };
+     957              : 
+     958              :   /// Explicit specialization for wchar_t.
+     959              :   template<>
+     960              :     struct atomic<wchar_t> : __atomic_base<wchar_t>
+     961              :     {
+     962              :       typedef wchar_t                   __integral_type;
+     963              :       typedef __atomic_base<wchar_t>      __base_type;
+     964              : 
+     965              :       atomic() noexcept = default;
+     966              :       ~atomic() noexcept = default;
+     967              :       atomic(const atomic&) = delete;
+     968              :       atomic& operator=(const atomic&) = delete;
+     969              :       atomic& operator=(const atomic&) volatile = delete;
+     970              : 
+     971              :       constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
+     972              : 
+     973              :       using __base_type::operator __integral_type;
+     974              :       using __base_type::operator=;
+     975              : 
+     976              : #if __cplusplus >= 201703L
+     977              :       static constexpr bool is_always_lock_free = ATOMIC_WCHAR_T_LOCK_FREE == 2;
+     978              : #endif
+     979              :     };
+     980              : 
+     981              : #ifdef _GLIBCXX_USE_CHAR8_T
+     982              :   /// Explicit specialization for char8_t.
+     983              :   template<>
+     984              :     struct atomic<char8_t> : __atomic_base<char8_t>
+     985              :     {
+     986              :       typedef char8_t                   __integral_type;
+     987              :       typedef __atomic_base<char8_t>      __base_type;
+     988              : 
+     989              :       atomic() noexcept = default;
+     990              :       ~atomic() noexcept = default;
+     991              :       atomic(const atomic&) = delete;
+     992              :       atomic& operator=(const atomic&) = delete;
+     993              :       atomic& operator=(const atomic&) volatile = delete;
+     994              : 
+     995              :       constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
+     996              : 
+     997              :       using __base_type::operator __integral_type;
+     998              :       using __base_type::operator=;
+     999              : 
+    1000              : #if __cplusplus > 201402L
+    1001              :       static constexpr bool is_always_lock_free
+    1002              :         = ATOMIC_CHAR8_T_LOCK_FREE == 2;
+    1003              : #endif
+    1004              :     };
+    1005              : #endif
+    1006              : 
+    1007              :   /// Explicit specialization for char16_t.
+    1008              :   template<>
+    1009              :     struct atomic<char16_t> : __atomic_base<char16_t>
+    1010              :     {
+    1011              :       typedef char16_t                  __integral_type;
+    1012              :       typedef __atomic_base<char16_t>     __base_type;
+    1013              : 
+    1014              :       atomic() noexcept = default;
+    1015              :       ~atomic() noexcept = default;
+    1016              :       atomic(const atomic&) = delete;
+    1017              :       atomic& operator=(const atomic&) = delete;
+    1018              :       atomic& operator=(const atomic&) volatile = delete;
+    1019              : 
+    1020              :       constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
+    1021              : 
+    1022              :       using __base_type::operator __integral_type;
+    1023              :       using __base_type::operator=;
+    1024              : 
+    1025              : #if __cplusplus >= 201703L
+    1026              :       static constexpr bool is_always_lock_free
+    1027              :         = ATOMIC_CHAR16_T_LOCK_FREE == 2;
+    1028              : #endif
+    1029              :     };
+    1030              : 
+    1031              :   /// Explicit specialization for char32_t.
+    1032              :   template<>
+    1033              :     struct atomic<char32_t> : __atomic_base<char32_t>
+    1034              :     {
+    1035              :       typedef char32_t                  __integral_type;
+    1036              :       typedef __atomic_base<char32_t>     __base_type;
+    1037              : 
+    1038              :       atomic() noexcept = default;
+    1039              :       ~atomic() noexcept = default;
+    1040              :       atomic(const atomic&) = delete;
+    1041              :       atomic& operator=(const atomic&) = delete;
+    1042              :       atomic& operator=(const atomic&) volatile = delete;
+    1043              : 
+    1044              :       constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
+    1045              : 
+    1046              :       using __base_type::operator __integral_type;
+    1047              :       using __base_type::operator=;
+    1048              : 
+    1049              : #if __cplusplus >= 201703L
+    1050              :       static constexpr bool is_always_lock_free
+    1051              :         = ATOMIC_CHAR32_T_LOCK_FREE == 2;
+    1052              : #endif
+    1053              :     };
+    1054              : 
+    1055              : 
+    1056              :   /// atomic_bool
+    1057              :   typedef atomic<bool>                    atomic_bool;
+    1058              : 
+    1059              :   /// atomic_char
+    1060              :   typedef atomic<char>                    atomic_char;
+    1061              : 
+    1062              :   /// atomic_schar
+    1063              :   typedef atomic<signed char>             atomic_schar;
+    1064              : 
+    1065              :   /// atomic_uchar
+    1066              :   typedef atomic<unsigned char>           atomic_uchar;
+    1067              : 
+    1068              :   /// atomic_short
+    1069              :   typedef atomic<short>                   atomic_short;
+    1070              : 
+    1071              :   /// atomic_ushort
+    1072              :   typedef atomic<unsigned short>  atomic_ushort;
+    1073              : 
+    1074              :   /// atomic_int
+    1075              :   typedef atomic<int>                     atomic_int;
+    1076              : 
+    1077              :   /// atomic_uint
+    1078              :   typedef atomic<unsigned int>            atomic_uint;
+    1079              : 
+    1080              :   /// atomic_long
+    1081              :   typedef atomic<long>                    atomic_long;
+    1082              : 
+    1083              :   /// atomic_ulong
+    1084              :   typedef atomic<unsigned long>           atomic_ulong;
+    1085              : 
+    1086              :   /// atomic_llong
+    1087              :   typedef atomic<long long>               atomic_llong;
+    1088              : 
+    1089              :   /// atomic_ullong
+    1090              :   typedef atomic<unsigned long long>      atomic_ullong;
+    1091              : 
+    1092              :   /// atomic_wchar_t
+    1093              :   typedef atomic<wchar_t>         atomic_wchar_t;
+    1094              : 
+    1095              : #ifdef _GLIBCXX_USE_CHAR8_T
+    1096              :   /// atomic_char8_t
+    1097              :   typedef atomic<char8_t>         atomic_char8_t;
+    1098              : #endif
+    1099              : 
+    1100              :   /// atomic_char16_t
+    1101              :   typedef atomic<char16_t>                atomic_char16_t;
+    1102              : 
+    1103              :   /// atomic_char32_t
+    1104              :   typedef atomic<char32_t>                atomic_char32_t;
+    1105              : 
+    1106              : #ifdef _GLIBCXX_USE_C99_STDINT_TR1
+    1107              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1108              :   // 2441. Exact-width atomic typedefs should be provided
+    1109              : 
+    1110              :   /// atomic_int8_t
+    1111              :   typedef atomic<int8_t>          atomic_int8_t;
+    1112              : 
+    1113              :   /// atomic_uint8_t
+    1114              :   typedef atomic<uint8_t>         atomic_uint8_t;
+    1115              : 
+    1116              :   /// atomic_int16_t
+    1117              :   typedef atomic<int16_t>         atomic_int16_t;
+    1118              : 
+    1119              :   /// atomic_uint16_t
+    1120              :   typedef atomic<uint16_t>                atomic_uint16_t;
+    1121              : 
+    1122              :   /// atomic_int32_t
+    1123              :   typedef atomic<int32_t>         atomic_int32_t;
+    1124              : 
+    1125              :   /// atomic_uint32_t
+    1126              :   typedef atomic<uint32_t>                atomic_uint32_t;
+    1127              : 
+    1128              :   /// atomic_int64_t
+    1129              :   typedef atomic<int64_t>         atomic_int64_t;
+    1130              : 
+    1131              :   /// atomic_uint64_t
+    1132              :   typedef atomic<uint64_t>                atomic_uint64_t;
+    1133              : 
+    1134              : 
+    1135              :   /// atomic_int_least8_t
+    1136              :   typedef atomic<int_least8_t>            atomic_int_least8_t;
+    1137              : 
+    1138              :   /// atomic_uint_least8_t
+    1139              :   typedef atomic<uint_least8_t>           atomic_uint_least8_t;
+    1140              : 
+    1141              :   /// atomic_int_least16_t
+    1142              :   typedef atomic<int_least16_t>           atomic_int_least16_t;
+    1143              : 
+    1144              :   /// atomic_uint_least16_t
+    1145              :   typedef atomic<uint_least16_t>  atomic_uint_least16_t;
+    1146              : 
+    1147              :   /// atomic_int_least32_t
+    1148              :   typedef atomic<int_least32_t>           atomic_int_least32_t;
+    1149              : 
+    1150              :   /// atomic_uint_least32_t
+    1151              :   typedef atomic<uint_least32_t>  atomic_uint_least32_t;
+    1152              : 
+    1153              :   /// atomic_int_least64_t
+    1154              :   typedef atomic<int_least64_t>           atomic_int_least64_t;
+    1155              : 
+    1156              :   /// atomic_uint_least64_t
+    1157              :   typedef atomic<uint_least64_t>  atomic_uint_least64_t;
+    1158              : 
+    1159              : 
+    1160              :   /// atomic_int_fast8_t
+    1161              :   typedef atomic<int_fast8_t>             atomic_int_fast8_t;
+    1162              : 
+    1163              :   /// atomic_uint_fast8_t
+    1164              :   typedef atomic<uint_fast8_t>            atomic_uint_fast8_t;
+    1165              : 
+    1166              :   /// atomic_int_fast16_t
+    1167              :   typedef atomic<int_fast16_t>            atomic_int_fast16_t;
+    1168              : 
+    1169              :   /// atomic_uint_fast16_t
+    1170              :   typedef atomic<uint_fast16_t>           atomic_uint_fast16_t;
+    1171              : 
+    1172              :   /// atomic_int_fast32_t
+    1173              :   typedef atomic<int_fast32_t>            atomic_int_fast32_t;
+    1174              : 
+    1175              :   /// atomic_uint_fast32_t
+    1176              :   typedef atomic<uint_fast32_t>           atomic_uint_fast32_t;
+    1177              : 
+    1178              :   /// atomic_int_fast64_t
+    1179              :   typedef atomic<int_fast64_t>            atomic_int_fast64_t;
+    1180              : 
+    1181              :   /// atomic_uint_fast64_t
+    1182              :   typedef atomic<uint_fast64_t>           atomic_uint_fast64_t;
+    1183              : #endif
+    1184              : 
+    1185              : 
+    1186              :   /// atomic_intptr_t
+    1187              :   typedef atomic<intptr_t>                atomic_intptr_t;
+    1188              : 
+    1189              :   /// atomic_uintptr_t
+    1190              :   typedef atomic<uintptr_t>               atomic_uintptr_t;
+    1191              : 
+    1192              :   /// atomic_size_t
+    1193              :   typedef atomic<size_t>          atomic_size_t;
+    1194              : 
+    1195              :   /// atomic_ptrdiff_t
+    1196              :   typedef atomic<ptrdiff_t>               atomic_ptrdiff_t;
+    1197              : 
+    1198              : #ifdef _GLIBCXX_USE_C99_STDINT_TR1
+    1199              :   /// atomic_intmax_t
+    1200              :   typedef atomic<intmax_t>                atomic_intmax_t;
+    1201              : 
+    1202              :   /// atomic_uintmax_t
+    1203              :   typedef atomic<uintmax_t>               atomic_uintmax_t;
+    1204              : #endif
+    1205              : 
+    1206              :   // Function definitions, atomic_flag operations.
+    1207              :   inline bool
+    1208              :   atomic_flag_test_and_set_explicit(atomic_flag* __a,
+    1209              :                                     memory_order __m) noexcept
+    1210              :   { return __a->test_and_set(__m); }
+    1211              : 
+    1212              :   inline bool
+    1213              :   atomic_flag_test_and_set_explicit(volatile atomic_flag* __a,
+    1214              :                                     memory_order __m) noexcept
+    1215              :   { return __a->test_and_set(__m); }
+    1216              : 
+    1217              : #if __cpp_lib_atomic_flag_test
+    1218              :   inline bool
+    1219              :   atomic_flag_test(const atomic_flag* __a) noexcept
+    1220              :   { return __a->test(); }
+    1221              : 
+    1222              :   inline bool
+    1223              :   atomic_flag_test(const volatile atomic_flag* __a) noexcept
+    1224              :   { return __a->test(); }
+    1225              : 
+    1226              :   inline bool
+    1227              :   atomic_flag_test_explicit(const atomic_flag* __a,
+    1228              :                             memory_order __m) noexcept
+    1229              :   { return __a->test(__m); }
+    1230              : 
+    1231              :   inline bool
+    1232              :   atomic_flag_test_explicit(const volatile atomic_flag* __a,
+    1233              :                             memory_order __m) noexcept
+    1234              :   { return __a->test(__m); }
+    1235              : #endif
+    1236              : 
+    1237              :   inline void
+    1238              :   atomic_flag_clear_explicit(atomic_flag* __a, memory_order __m) noexcept
+    1239              :   { __a->clear(__m); }
+    1240              : 
+    1241              :   inline void
+    1242              :   atomic_flag_clear_explicit(volatile atomic_flag* __a,
+    1243              :                              memory_order __m) noexcept
+    1244              :   { __a->clear(__m); }
+    1245              : 
+    1246              :   inline bool
+    1247              :   atomic_flag_test_and_set(atomic_flag* __a) noexcept
+    1248              :   { return atomic_flag_test_and_set_explicit(__a, memory_order_seq_cst); }
+    1249              : 
+    1250              :   inline bool
+    1251              :   atomic_flag_test_and_set(volatile atomic_flag* __a) noexcept
+    1252              :   { return atomic_flag_test_and_set_explicit(__a, memory_order_seq_cst); }
+    1253              : 
+    1254              :   inline void
+    1255              :   atomic_flag_clear(atomic_flag* __a) noexcept
+    1256              :   { atomic_flag_clear_explicit(__a, memory_order_seq_cst); }
+    1257              : 
+    1258              :   inline void
+    1259              :   atomic_flag_clear(volatile atomic_flag* __a) noexcept
+    1260              :   { atomic_flag_clear_explicit(__a, memory_order_seq_cst); }
+    1261              : 
+    1262              : #if __cpp_lib_atomic_wait
+    1263              :   inline void
+    1264              :   atomic_flag_wait(atomic_flag* __a, bool __old) noexcept
+    1265              :   { __a->wait(__old); }
+    1266              : 
+    1267              :   inline void
+    1268              :   atomic_flag_wait_explicit(atomic_flag* __a, bool __old,
+    1269              :                                 memory_order __m) noexcept
+    1270              :   { __a->wait(__old, __m); }
+    1271              : 
+    1272              :   inline void
+    1273              :   atomic_flag_notify_one(atomic_flag* __a) noexcept
+    1274              :   { __a->notify_one(); }
+    1275              : 
+    1276              :   inline void
+    1277              :   atomic_flag_notify_all(atomic_flag* __a) noexcept
+    1278              :   { __a->notify_all(); }
+    1279              : #endif // __cpp_lib_atomic_wait
+    1280              : 
+    1281              :   /// @cond undocumented
+    1282              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1283              :   // 3220. P0558 broke conforming C++14 uses of atomic shared_ptr
+    1284              :   template<typename _Tp>
+    1285              :     using __atomic_val_t = __type_identity_t<_Tp>;
+    1286              :   template<typename _Tp>
+    1287              :     using __atomic_diff_t = typename atomic<_Tp>::difference_type;
+    1288              :   /// @endcond
+    1289              : 
+    1290              :   // [atomics.nonmembers] Non-member functions.
+    1291              :   // Function templates generally applicable to atomic types.
+    1292              :   template<typename _ITp>
+    1293              :     inline bool
+    1294              :     atomic_is_lock_free(const atomic<_ITp>* __a) noexcept
+    1295              :     { return __a->is_lock_free(); }
+    1296              : 
+    1297              :   template<typename _ITp>
+    1298              :     inline bool
+    1299              :     atomic_is_lock_free(const volatile atomic<_ITp>* __a) noexcept
+    1300              :     { return __a->is_lock_free(); }
+    1301              : 
+    1302              :   template<typename _ITp>
+    1303              :     inline void
+    1304              :     atomic_init(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept
+    1305              :     { __a->store(__i, memory_order_relaxed); }
+    1306              : 
+    1307              :   template<typename _ITp>
+    1308              :     inline void
+    1309              :     atomic_init(volatile atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept
+    1310              :     { __a->store(__i, memory_order_relaxed); }
+    1311              : 
+    1312              :   template<typename _ITp>
+    1313              :     inline void
+    1314              :     atomic_store_explicit(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i,
+    1315              :                           memory_order __m) noexcept
+    1316              :     { __a->store(__i, __m); }
+    1317              : 
+    1318              :   template<typename _ITp>
+    1319              :     inline void
+    1320              :     atomic_store_explicit(volatile atomic<_ITp>* __a, __atomic_val_t<_ITp> __i,
+    1321              :                           memory_order __m) noexcept
+    1322              :     { __a->store(__i, __m); }
+    1323              : 
+    1324              :   template<typename _ITp>
+    1325              :     inline _ITp
+    1326              :     atomic_load_explicit(const atomic<_ITp>* __a, memory_order __m) noexcept
+    1327              :     { return __a->load(__m); }
+    1328              : 
+    1329              :   template<typename _ITp>
+    1330              :     inline _ITp
+    1331              :     atomic_load_explicit(const volatile atomic<_ITp>* __a,
+    1332              :                          memory_order __m) noexcept
+    1333              :     { return __a->load(__m); }
+    1334              : 
+    1335              :   template<typename _ITp>
+    1336              :     inline _ITp
+    1337              :     atomic_exchange_explicit(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i,
+    1338              :                              memory_order __m) noexcept
+    1339              :     { return __a->exchange(__i, __m); }
+    1340              : 
+    1341              :   template<typename _ITp>
+    1342              :     inline _ITp
+    1343              :     atomic_exchange_explicit(volatile atomic<_ITp>* __a,
+    1344              :                              __atomic_val_t<_ITp> __i,
+    1345              :                              memory_order __m) noexcept
+    1346              :     { return __a->exchange(__i, __m); }
+    1347              : 
+    1348              :   template<typename _ITp>
+    1349              :     inline bool
+    1350              :     atomic_compare_exchange_weak_explicit(atomic<_ITp>* __a,
+    1351              :                                           __atomic_val_t<_ITp>* __i1,
+    1352              :                                           __atomic_val_t<_ITp> __i2,
+    1353              :                                           memory_order __m1,
+    1354              :                                           memory_order __m2) noexcept
+    1355              :     { return __a->compare_exchange_weak(*__i1, __i2, __m1, __m2); }
+    1356              : 
+    1357              :   template<typename _ITp>
+    1358              :     inline bool
+    1359              :     atomic_compare_exchange_weak_explicit(volatile atomic<_ITp>* __a,
+    1360              :                                           __atomic_val_t<_ITp>* __i1,
+    1361              :                                           __atomic_val_t<_ITp> __i2,
+    1362              :                                           memory_order __m1,
+    1363              :                                           memory_order __m2) noexcept
+    1364              :     { return __a->compare_exchange_weak(*__i1, __i2, __m1, __m2); }
+    1365              : 
+    1366              :   template<typename _ITp>
+    1367              :     inline bool
+    1368              :     atomic_compare_exchange_strong_explicit(atomic<_ITp>* __a,
+    1369              :                                             __atomic_val_t<_ITp>* __i1,
+    1370              :                                             __atomic_val_t<_ITp> __i2,
+    1371              :                                             memory_order __m1,
+    1372              :                                             memory_order __m2) noexcept
+    1373              :     { return __a->compare_exchange_strong(*__i1, __i2, __m1, __m2); }
+    1374              : 
+    1375              :   template<typename _ITp>
+    1376              :     inline bool
+    1377              :     atomic_compare_exchange_strong_explicit(volatile atomic<_ITp>* __a,
+    1378              :                                             __atomic_val_t<_ITp>* __i1,
+    1379              :                                             __atomic_val_t<_ITp> __i2,
+    1380              :                                             memory_order __m1,
+    1381              :                                             memory_order __m2) noexcept
+    1382              :     { return __a->compare_exchange_strong(*__i1, __i2, __m1, __m2); }
+    1383              : 
+    1384              : 
+    1385              :   template<typename _ITp>
+    1386              :     inline void
+    1387              :     atomic_store(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept
+    1388              :     { atomic_store_explicit(__a, __i, memory_order_seq_cst); }
+    1389              : 
+    1390              :   template<typename _ITp>
+    1391              :     inline void
+    1392              :     atomic_store(volatile atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept
+    1393              :     { atomic_store_explicit(__a, __i, memory_order_seq_cst); }
+    1394              : 
+    1395              :   template<typename _ITp>
+    1396              :     inline _ITp
+    1397              :     atomic_load(const atomic<_ITp>* __a) noexcept
+    1398              :     { return atomic_load_explicit(__a, memory_order_seq_cst); }
+    1399              : 
+    1400              :   template<typename _ITp>
+    1401              :     inline _ITp
+    1402              :     atomic_load(const volatile atomic<_ITp>* __a) noexcept
+    1403              :     { return atomic_load_explicit(__a, memory_order_seq_cst); }
+    1404              : 
+    1405              :   template<typename _ITp>
+    1406              :     inline _ITp
+    1407              :     atomic_exchange(atomic<_ITp>* __a, __atomic_val_t<_ITp> __i) noexcept
+    1408              :     { return atomic_exchange_explicit(__a, __i, memory_order_seq_cst); }
+    1409              : 
+    1410              :   template<typename _ITp>
+    1411              :     inline _ITp
+    1412              :     atomic_exchange(volatile atomic<_ITp>* __a,
+    1413              :                     __atomic_val_t<_ITp> __i) noexcept
+    1414              :     { return atomic_exchange_explicit(__a, __i, memory_order_seq_cst); }
+    1415              : 
+    1416              :   template<typename _ITp>
+    1417              :     inline bool
+    1418              :     atomic_compare_exchange_weak(atomic<_ITp>* __a,
+    1419              :                                  __atomic_val_t<_ITp>* __i1,
+    1420              :                                  __atomic_val_t<_ITp> __i2) noexcept
+    1421              :     {
+    1422              :       return atomic_compare_exchange_weak_explicit(__a, __i1, __i2,
+    1423              :                                                    memory_order_seq_cst,
+    1424              :                                                    memory_order_seq_cst);
+    1425              :     }
+    1426              : 
+    1427              :   template<typename _ITp>
+    1428              :     inline bool
+    1429              :     atomic_compare_exchange_weak(volatile atomic<_ITp>* __a,
+    1430              :                                  __atomic_val_t<_ITp>* __i1,
+    1431              :                                  __atomic_val_t<_ITp> __i2) noexcept
+    1432              :     {
+    1433              :       return atomic_compare_exchange_weak_explicit(__a, __i1, __i2,
+    1434              :                                                    memory_order_seq_cst,
+    1435              :                                                    memory_order_seq_cst);
+    1436              :     }
+    1437              : 
+    1438              :   template<typename _ITp>
+    1439              :     inline bool
+    1440              :     atomic_compare_exchange_strong(atomic<_ITp>* __a,
+    1441              :                                    __atomic_val_t<_ITp>* __i1,
+    1442              :                                    __atomic_val_t<_ITp> __i2) noexcept
+    1443              :     {
+    1444              :       return atomic_compare_exchange_strong_explicit(__a, __i1, __i2,
+    1445              :                                                      memory_order_seq_cst,
+    1446              :                                                      memory_order_seq_cst);
+    1447              :     }
+    1448              : 
+    1449              :   template<typename _ITp>
+    1450              :     inline bool
+    1451              :     atomic_compare_exchange_strong(volatile atomic<_ITp>* __a,
+    1452              :                                    __atomic_val_t<_ITp>* __i1,
+    1453              :                                    __atomic_val_t<_ITp> __i2) noexcept
+    1454              :     {
+    1455              :       return atomic_compare_exchange_strong_explicit(__a, __i1, __i2,
+    1456              :                                                      memory_order_seq_cst,
+    1457              :                                                      memory_order_seq_cst);
+    1458              :     }
+    1459              : 
+    1460              : 
+    1461              : #if __cpp_lib_atomic_wait
+    1462              :   template<typename _Tp>
+    1463              :     inline void
+    1464              :     atomic_wait(const atomic<_Tp>* __a,
+    1465              :                 typename std::atomic<_Tp>::value_type __old) noexcept
+    1466              :     { __a->wait(__old); }
+    1467              : 
+    1468              :   template<typename _Tp>
+    1469              :     inline void
+    1470              :     atomic_wait_explicit(const atomic<_Tp>* __a,
+    1471              :                          typename std::atomic<_Tp>::value_type __old,
+    1472              :                          std::memory_order __m) noexcept
+    1473              :     { __a->wait(__old, __m); }
+    1474              : 
+    1475              :   template<typename _Tp>
+    1476              :     inline void
+    1477              :     atomic_notify_one(atomic<_Tp>* __a) noexcept
+    1478              :     { __a->notify_one(); }
+    1479              : 
+    1480              :   template<typename _Tp>
+    1481              :     inline void
+    1482              :     atomic_notify_all(atomic<_Tp>* __a) noexcept
+    1483              :     { __a->notify_all(); }
+    1484              : #endif // __cpp_lib_atomic_wait
+    1485              : 
+    1486              :   // Function templates for atomic_integral and atomic_pointer operations only.
+    1487              :   // Some operations (and, or, xor) are only available for atomic integrals,
+    1488              :   // which is implemented by taking a parameter of type __atomic_base<_ITp>*.
+    1489              : 
+    1490              :   template<typename _ITp>
+    1491              :     inline _ITp
+    1492              :     atomic_fetch_add_explicit(atomic<_ITp>* __a,
+    1493              :                               __atomic_diff_t<_ITp> __i,
+    1494              :                               memory_order __m) noexcept
+    1495              :     { return __a->fetch_add(__i, __m); }
+    1496              : 
+    1497              :   template<typename _ITp>
+    1498              :     inline _ITp
+    1499              :     atomic_fetch_add_explicit(volatile atomic<_ITp>* __a,
+    1500              :                               __atomic_diff_t<_ITp> __i,
+    1501              :                               memory_order __m) noexcept
+    1502              :     { return __a->fetch_add(__i, __m); }
+    1503              : 
+    1504              :   template<typename _ITp>
+    1505              :     inline _ITp
+    1506              :     atomic_fetch_sub_explicit(atomic<_ITp>* __a,
+    1507              :                               __atomic_diff_t<_ITp> __i,
+    1508              :                               memory_order __m) noexcept
+    1509              :     { return __a->fetch_sub(__i, __m); }
+    1510              : 
+    1511              :   template<typename _ITp>
+    1512              :     inline _ITp
+    1513              :     atomic_fetch_sub_explicit(volatile atomic<_ITp>* __a,
+    1514              :                               __atomic_diff_t<_ITp> __i,
+    1515              :                               memory_order __m) noexcept
+    1516              :     { return __a->fetch_sub(__i, __m); }
+    1517              : 
+    1518              :   template<typename _ITp>
+    1519              :     inline _ITp
+    1520              :     atomic_fetch_and_explicit(__atomic_base<_ITp>* __a,
+    1521              :                               __atomic_val_t<_ITp> __i,
+    1522              :                               memory_order __m) noexcept
+    1523              :     { return __a->fetch_and(__i, __m); }
+    1524              : 
+    1525              :   template<typename _ITp>
+    1526              :     inline _ITp
+    1527              :     atomic_fetch_and_explicit(volatile __atomic_base<_ITp>* __a,
+    1528              :                               __atomic_val_t<_ITp> __i,
+    1529              :                               memory_order __m) noexcept
+    1530              :     { return __a->fetch_and(__i, __m); }
+    1531              : 
+    1532              :   template<typename _ITp>
+    1533              :     inline _ITp
+    1534              :     atomic_fetch_or_explicit(__atomic_base<_ITp>* __a,
+    1535              :                              __atomic_val_t<_ITp> __i,
+    1536              :                              memory_order __m) noexcept
+    1537              :     { return __a->fetch_or(__i, __m); }
+    1538              : 
+    1539              :   template<typename _ITp>
+    1540              :     inline _ITp
+    1541              :     atomic_fetch_or_explicit(volatile __atomic_base<_ITp>* __a,
+    1542              :                              __atomic_val_t<_ITp> __i,
+    1543              :                              memory_order __m) noexcept
+    1544              :     { return __a->fetch_or(__i, __m); }
+    1545              : 
+    1546              :   template<typename _ITp>
+    1547              :     inline _ITp
+    1548              :     atomic_fetch_xor_explicit(__atomic_base<_ITp>* __a,
+    1549              :                               __atomic_val_t<_ITp> __i,
+    1550              :                               memory_order __m) noexcept
+    1551              :     { return __a->fetch_xor(__i, __m); }
+    1552              : 
+    1553              :   template<typename _ITp>
+    1554              :     inline _ITp
+    1555              :     atomic_fetch_xor_explicit(volatile __atomic_base<_ITp>* __a,
+    1556              :                               __atomic_val_t<_ITp> __i,
+    1557              :                               memory_order __m) noexcept
+    1558              :     { return __a->fetch_xor(__i, __m); }
+    1559              : 
+    1560              :   template<typename _ITp>
+    1561              :     inline _ITp
+    1562              :     atomic_fetch_add(atomic<_ITp>* __a,
+    1563              :                      __atomic_diff_t<_ITp> __i) noexcept
+    1564              :     { return atomic_fetch_add_explicit(__a, __i, memory_order_seq_cst); }
+    1565              : 
+    1566              :   template<typename _ITp>
+    1567              :     inline _ITp
+    1568              :     atomic_fetch_add(volatile atomic<_ITp>* __a,
+    1569              :                      __atomic_diff_t<_ITp> __i) noexcept
+    1570              :     { return atomic_fetch_add_explicit(__a, __i, memory_order_seq_cst); }
+    1571              : 
+    1572              :   template<typename _ITp>
+    1573              :     inline _ITp
+    1574              :     atomic_fetch_sub(atomic<_ITp>* __a,
+    1575              :                      __atomic_diff_t<_ITp> __i) noexcept
+    1576              :     { return atomic_fetch_sub_explicit(__a, __i, memory_order_seq_cst); }
+    1577              : 
+    1578              :   template<typename _ITp>
+    1579              :     inline _ITp
+    1580              :     atomic_fetch_sub(volatile atomic<_ITp>* __a,
+    1581              :                      __atomic_diff_t<_ITp> __i) noexcept
+    1582              :     { return atomic_fetch_sub_explicit(__a, __i, memory_order_seq_cst); }
+    1583              : 
+    1584              :   template<typename _ITp>
+    1585              :     inline _ITp
+    1586              :     atomic_fetch_and(__atomic_base<_ITp>* __a,
+    1587              :                      __atomic_val_t<_ITp> __i) noexcept
+    1588              :     { return atomic_fetch_and_explicit(__a, __i, memory_order_seq_cst); }
+    1589              : 
+    1590              :   template<typename _ITp>
+    1591              :     inline _ITp
+    1592              :     atomic_fetch_and(volatile __atomic_base<_ITp>* __a,
+    1593              :                      __atomic_val_t<_ITp> __i) noexcept
+    1594              :     { return atomic_fetch_and_explicit(__a, __i, memory_order_seq_cst); }
+    1595              : 
+    1596              :   template<typename _ITp>
+    1597              :     inline _ITp
+    1598              :     atomic_fetch_or(__atomic_base<_ITp>* __a,
+    1599              :                     __atomic_val_t<_ITp> __i) noexcept
+    1600              :     { return atomic_fetch_or_explicit(__a, __i, memory_order_seq_cst); }
+    1601              : 
+    1602              :   template<typename _ITp>
+    1603              :     inline _ITp
+    1604              :     atomic_fetch_or(volatile __atomic_base<_ITp>* __a,
+    1605              :                     __atomic_val_t<_ITp> __i) noexcept
+    1606              :     { return atomic_fetch_or_explicit(__a, __i, memory_order_seq_cst); }
+    1607              : 
+    1608              :   template<typename _ITp>
+    1609              :     inline _ITp
+    1610              :     atomic_fetch_xor(__atomic_base<_ITp>* __a,
+    1611              :                      __atomic_val_t<_ITp> __i) noexcept
+    1612              :     { return atomic_fetch_xor_explicit(__a, __i, memory_order_seq_cst); }
+    1613              : 
+    1614              :   template<typename _ITp>
+    1615              :     inline _ITp
+    1616              :     atomic_fetch_xor(volatile __atomic_base<_ITp>* __a,
+    1617              :                      __atomic_val_t<_ITp> __i) noexcept
+    1618              :     { return atomic_fetch_xor_explicit(__a, __i, memory_order_seq_cst); }
+    1619              : 
+    1620              : #if __cplusplus > 201703L
+    1621              : #define __cpp_lib_atomic_float 201711L
+    1622              :   template<>
+    1623              :     struct atomic<float> : __atomic_float<float>
+    1624              :     {
+    1625              :       atomic() noexcept = default;
+    1626              : 
+    1627              :       constexpr
+    1628              :       atomic(float __fp) noexcept : __atomic_float<float>(__fp)
+    1629              :       { }
+    1630              : 
+    1631              :       atomic& operator=(const atomic&) volatile = delete;
+    1632              :       atomic& operator=(const atomic&) = delete;
+    1633              : 
+    1634              :       using __atomic_float<float>::operator=;
+    1635              :     };
+    1636              : 
+    1637              :   template<>
+    1638              :     struct atomic<double> : __atomic_float<double>
+    1639              :     {
+    1640              :       atomic() noexcept = default;
+    1641              : 
+    1642              :       constexpr
+    1643              :       atomic(double __fp) noexcept : __atomic_float<double>(__fp)
+    1644              :       { }
+    1645              : 
+    1646              :       atomic& operator=(const atomic&) volatile = delete;
+    1647              :       atomic& operator=(const atomic&) = delete;
+    1648              : 
+    1649              :       using __atomic_float<double>::operator=;
+    1650              :     };
+    1651              : 
+    1652              :   template<>
+    1653              :     struct atomic<long double> : __atomic_float<long double>
+    1654              :     {
+    1655              :       atomic() noexcept = default;
+    1656              : 
+    1657              :       constexpr
+    1658              :       atomic(long double __fp) noexcept : __atomic_float<long double>(__fp)
+    1659              :       { }
+    1660              : 
+    1661              :       atomic& operator=(const atomic&) volatile = delete;
+    1662              :       atomic& operator=(const atomic&) = delete;
+    1663              : 
+    1664              :       using __atomic_float<long double>::operator=;
+    1665              :     };
+    1666              : 
+    1667              : #ifdef __STDCPP_FLOAT16_T__
+    1668              :   template<>
+    1669              :     struct atomic<_Float16> : __atomic_float<_Float16>
+    1670              :     {
+    1671              :       atomic() noexcept = default;
+    1672              : 
+    1673              :       constexpr
+    1674              :       atomic(_Float16 __fp) noexcept : __atomic_float<_Float16>(__fp)
+    1675              :       { }
+    1676              : 
+    1677              :       atomic& operator=(const atomic&) volatile = delete;
+    1678              :       atomic& operator=(const atomic&) = delete;
+    1679              : 
+    1680              :       using __atomic_float<_Float16>::operator=;
+    1681              :     };
+    1682              : #endif
+    1683              : 
+    1684              : #ifdef __STDCPP_FLOAT32_T__
+    1685              :   template<>
+    1686              :     struct atomic<_Float32> : __atomic_float<_Float32>
+    1687              :     {
+    1688              :       atomic() noexcept = default;
+    1689              : 
+    1690              :       constexpr
+    1691              :       atomic(_Float32 __fp) noexcept : __atomic_float<_Float32>(__fp)
+    1692              :       { }
+    1693              : 
+    1694              :       atomic& operator=(const atomic&) volatile = delete;
+    1695              :       atomic& operator=(const atomic&) = delete;
+    1696              : 
+    1697              :       using __atomic_float<_Float32>::operator=;
+    1698              :     };
+    1699              : #endif
+    1700              : 
+    1701              : #ifdef __STDCPP_FLOAT64_T__
+    1702              :   template<>
+    1703              :     struct atomic<_Float64> : __atomic_float<_Float64>
+    1704              :     {
+    1705              :       atomic() noexcept = default;
+    1706              : 
+    1707              :       constexpr
+    1708              :       atomic(_Float64 __fp) noexcept : __atomic_float<_Float64>(__fp)
+    1709              :       { }
+    1710              : 
+    1711              :       atomic& operator=(const atomic&) volatile = delete;
+    1712              :       atomic& operator=(const atomic&) = delete;
+    1713              : 
+    1714              :       using __atomic_float<_Float64>::operator=;
+    1715              :     };
+    1716              : #endif
+    1717              : 
+    1718              : #ifdef __STDCPP_FLOAT128_T__
+    1719              :   template<>
+    1720              :     struct atomic<_Float128> : __atomic_float<_Float128>
+    1721              :     {
+    1722              :       atomic() noexcept = default;
+    1723              : 
+    1724              :       constexpr
+    1725              :       atomic(_Float128 __fp) noexcept : __atomic_float<_Float128>(__fp)
+    1726              :       { }
+    1727              : 
+    1728              :       atomic& operator=(const atomic&) volatile = delete;
+    1729              :       atomic& operator=(const atomic&) = delete;
+    1730              : 
+    1731              :       using __atomic_float<_Float128>::operator=;
+    1732              :     };
+    1733              : #endif
+    1734              : 
+    1735              : #ifdef __STDCPP_BFLOAT16_T__
+    1736              :   template<>
+    1737              :     struct atomic<__gnu_cxx::__bfloat16_t> : __atomic_float<__gnu_cxx::__bfloat16_t>
+    1738              :     {
+    1739              :       atomic() noexcept = default;
+    1740              : 
+    1741              :       constexpr
+    1742              :       atomic(__gnu_cxx::__bfloat16_t __fp) noexcept : __atomic_float<__gnu_cxx::__bfloat16_t>(__fp)
+    1743              :       { }
+    1744              : 
+    1745              :       atomic& operator=(const atomic&) volatile = delete;
+    1746              :       atomic& operator=(const atomic&) = delete;
+    1747              : 
+    1748              :       using __atomic_float<__gnu_cxx::__bfloat16_t>::operator=;
+    1749              :     };
+    1750              : #endif
+    1751              : 
+    1752              : #define __cpp_lib_atomic_ref 201806L
+    1753              : 
+    1754              :   /// Class template to provide atomic operations on a non-atomic variable.
+    1755              :   template<typename _Tp>
+    1756              :     struct atomic_ref : __atomic_ref<_Tp>
+    1757              :     {
+    1758              :       explicit
+    1759              :       atomic_ref(_Tp& __t) noexcept : __atomic_ref<_Tp>(__t)
+    1760              :       { }
+    1761              : 
+    1762              :       atomic_ref& operator=(const atomic_ref&) = delete;
+    1763              : 
+    1764              :       atomic_ref(const atomic_ref&) = default;
+    1765              : 
+    1766              :       using __atomic_ref<_Tp>::operator=;
+    1767              :     };
+    1768              : 
+    1769              : #define __cpp_lib_atomic_lock_free_type_aliases 201907L
+    1770              : #ifdef _GLIBCXX_HAVE_PLATFORM_WAIT
+    1771              :   using atomic_signed_lock_free
+    1772              :     = atomic<make_signed_t<__detail::__platform_wait_t>>;
+    1773              :   using atomic_unsigned_lock_free
+    1774              :     = atomic<make_unsigned_t<__detail::__platform_wait_t>>;
+    1775              : #elif ATOMIC_INT_LOCK_FREE || !(ATOMIC_LONG_LOCK_FREE || ATOMIC_CHAR_LOCK_FREE)
+    1776              :   using atomic_signed_lock_free = atomic<signed int>;
+    1777              :   using atomic_unsigned_lock_free = atomic<unsigned int>;
+    1778              : #elif ATOMIC_LONG_LOCK_FREE
+    1779              :   using atomic_signed_lock_free = atomic<signed long>;
+    1780              :   using atomic_unsigned_lock_free = atomic<unsigned long>;
+    1781              : #elif ATOMIC_CHAR_LOCK_FREE
+    1782              :   using atomic_signed_lock_free = atomic<signed char>;
+    1783              :   using atomic_unsigned_lock_free = atomic<unsigned char>;
+    1784              : #endif
+    1785              : 
+    1786              : #endif // C++2a
+    1787              : 
+    1788              :   /// @} group atomics
+    1789              : 
+    1790              : _GLIBCXX_END_NAMESPACE_VERSION
+    1791              : } // namespace
+    1792              : 
+    1793              : #endif // C++11
+    1794              : 
+    1795              : #endif // _GLIBCXX_ATOMIC
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bit.func-c.html b/html/usr/include/c++/13/bit.func-c.html new file mode 100644 index 0000000..d1bbde0 --- /dev/null +++ b/html/usr/include/c++/13/bit.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bit - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - bit (source / functions)CoverageTotalHit
Test:coverage.infoLines:91.7 %1211
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt11__bit_widthImEiT_3724
_ZSt13__countl_zeroImEiT_3724
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bit.func.html b/html/usr/include/c++/13/bit.func.html new file mode 100644 index 0000000..5820ebb --- /dev/null +++ b/html/usr/include/c++/13/bit.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bit - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - bit (source / functions)CoverageTotalHit
Test:coverage.infoLines:91.7 %1211
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt11__bit_widthImEiT_3724
_ZSt13__countl_zeroImEiT_3724
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bit.gcov.html b/html/usr/include/c++/13/bit.gcov.html new file mode 100644 index 0000000..6e550bf --- /dev/null +++ b/html/usr/include/c++/13/bit.gcov.html @@ -0,0 +1,558 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bit + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - bit (source / functions)CoverageTotalHit
Test:coverage.infoLines:91.7 %1211
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // <bit> -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2018-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file include/bit
+      26              :  *  This is a Standard C++ Library header.
+      27              :  */
+      28              : 
+      29              : #ifndef _GLIBCXX_BIT
+      30              : #define _GLIBCXX_BIT 1
+      31              : 
+      32              : #pragma GCC system_header
+      33              : 
+      34              : #if __cplusplus >= 201402L
+      35              : 
+      36              : #include <type_traits>
+      37              : 
+      38              : #if _GLIBCXX_HOSTED || __has_include(<ext/numeric_traits.h>)
+      39              : # include <ext/numeric_traits.h>
+      40              : #else
+      41              : # include <limits>
+      42              : /// @cond undocumented
+      43              : namespace __gnu_cxx
+      44              : {
+      45              :   template<typename _Tp>
+      46              :     struct __int_traits
+      47              :     {
+      48              :       static constexpr int __digits = std::numeric_limits<_Tp>::digits;
+      49              :       static constexpr _Tp __max = std::numeric_limits<_Tp>::max();
+      50              :     };
+      51              : }
+      52              : /// @endcond
+      53              : #endif
+      54              : 
+      55              : namespace std _GLIBCXX_VISIBILITY(default)
+      56              : {
+      57              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      58              : 
+      59              :   /**
+      60              :    * @defgroup bit_manip Bit manipulation
+      61              :    * @ingroup numerics
+      62              :    *
+      63              :    * Utilities for examining and manipulating individual bits.
+      64              :    *
+      65              :    * @{
+      66              :    */
+      67              : 
+      68              : #if __cplusplus > 201703l && __has_builtin(__builtin_bit_cast)
+      69              : #define __cpp_lib_bit_cast 201806L
+      70              : 
+      71              :   /// Create a value of type `To` from the bits of `from`.
+      72              :   /**
+      73              :    * @tparam _To   A trivially-copyable type.
+      74              :    * @param __from A trivially-copyable object of the same size as `_To`.
+      75              :    * @return       An object of type `_To`.
+      76              :    * @since C++20
+      77              :    */
+      78              :   template<typename _To, typename _From>
+      79              :     [[nodiscard]]
+      80              :     constexpr _To
+      81              :     bit_cast(const _From& __from) noexcept
+      82              : #ifdef __cpp_concepts
+      83              :     requires (sizeof(_To) == sizeof(_From))
+      84              :       && __is_trivially_copyable(_To) && __is_trivially_copyable(_From)
+      85              : #endif
+      86              :     {
+      87              :       return __builtin_bit_cast(_To, __from);
+      88              :     }
+      89              : #endif
+      90              : 
+      91              : #if __cplusplus > 202002L
+      92              : #define __cpp_lib_byteswap 202110L
+      93              : 
+      94              :   /// Reverse order of bytes in the object representation of `value`.
+      95              :   /**
+      96              :    * @tparam _Tp     An integral type.
+      97              :    * @param __value  An object of integer type.
+      98              :    * @return         An object of the same type, with the bytes reversed.
+      99              :    * @since C++23
+     100              :    */
+     101              :   template<typename _Tp>
+     102              :     [[nodiscard]]
+     103              :     constexpr enable_if_t<is_integral<_Tp>::value, _Tp>
+     104              :     byteswap(_Tp __value) noexcept
+     105              :     {
+     106              :       if constexpr (sizeof(_Tp) == 1)
+     107              :         return __value;
+     108              : #if __cpp_if_consteval >= 202106L && __CHAR_BIT__ == 8
+     109              :       if !consteval
+     110              :         {
+     111              :           if constexpr (sizeof(_Tp) == 2)
+     112              :             return __builtin_bswap16(__value);
+     113              :           if constexpr (sizeof(_Tp) == 4)
+     114              :             return __builtin_bswap32(__value);
+     115              :           if constexpr (sizeof(_Tp) == 8)
+     116              :             return __builtin_bswap64(__value);
+     117              :           if constexpr (sizeof(_Tp) == 16)
+     118              : #if __has_builtin(__builtin_bswap128)
+     119              :             return __builtin_bswap128(__value);
+     120              : #else
+     121              :             return (__builtin_bswap64(__value >> 64)
+     122              :                     | (static_cast<_Tp>(__builtin_bswap64(__value)) << 64));
+     123              : #endif
+     124              :         }
+     125              : #endif
+     126              : 
+     127              :       // Fallback implementation that handles even __int24 etc.
+     128              :       using _Up = typename __make_unsigned<__remove_cv_t<_Tp>>::__type;
+     129              :       size_t __diff = __CHAR_BIT__ * (sizeof(_Tp) - 1);
+     130              :       _Up __mask1 = static_cast<unsigned char>(~0);
+     131              :       _Up __mask2 = __mask1 << __diff;
+     132              :       _Up __val = __value;
+     133              :       for (size_t __i = 0; __i < sizeof(_Tp) / 2; ++__i)
+     134              :         {
+     135              :           _Up __byte1 = __val & __mask1;
+     136              :           _Up __byte2 = __val & __mask2;
+     137              :           __val = (__val ^ __byte1 ^ __byte2
+     138              :                    ^ (__byte1 << __diff) ^ (__byte2 >> __diff));
+     139              :           __mask1 <<= __CHAR_BIT__;
+     140              :           __mask2 >>= __CHAR_BIT__;
+     141              :           __diff -= 2 * __CHAR_BIT__;
+     142              :         }
+     143              :       return __val;
+     144              :     }
+     145              : #endif
+     146              : 
+     147              :   /// @cond undocumented
+     148              : 
+     149              :   template<typename _Tp>
+     150              :     constexpr _Tp
+     151              :     __rotl(_Tp __x, int __s) noexcept
+     152              :     {
+     153              :       constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits;
+     154              :       if _GLIBCXX17_CONSTEXPR ((_Nd & (_Nd - 1)) == 0)
+     155              :         {
+     156              :           // Variant for power of two _Nd which the compiler can
+     157              :           // easily pattern match.
+     158              :           constexpr unsigned __uNd = _Nd;
+     159              :           const unsigned __r = __s;
+     160              :           return (__x << (__r % __uNd)) | (__x >> ((-__r) % __uNd));
+     161              :         }
+     162              :       const int __r = __s % _Nd;
+     163              :       if (__r == 0)
+     164              :         return __x;
+     165              :       else if (__r > 0)
+     166              :         return (__x << __r) | (__x >> ((_Nd - __r) % _Nd));
+     167              :       else
+     168              :         return (__x >> -__r) | (__x << ((_Nd + __r) % _Nd)); // rotr(x, -r)
+     169              :     }
+     170              : 
+     171              :   template<typename _Tp>
+     172              :     constexpr _Tp
+     173              :     __rotr(_Tp __x, int __s) noexcept
+     174              :     {
+     175              :       constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits;
+     176              :       if _GLIBCXX17_CONSTEXPR ((_Nd & (_Nd - 1)) == 0)
+     177              :         {
+     178              :           // Variant for power of two _Nd which the compiler can
+     179              :           // easily pattern match.
+     180              :           constexpr unsigned __uNd = _Nd;
+     181              :           const unsigned __r = __s;
+     182              :           return (__x >> (__r % __uNd)) | (__x << ((-__r) % __uNd));
+     183              :         }
+     184              :       const int __r = __s % _Nd;
+     185              :       if (__r == 0)
+     186              :         return __x;
+     187              :       else if (__r > 0)
+     188              :         return (__x >> __r) | (__x << ((_Nd - __r) % _Nd));
+     189              :       else
+     190              :         return (__x << -__r) | (__x >> ((_Nd + __r) % _Nd)); // rotl(x, -r)
+     191              :     }
+     192              : 
+     193              :   template<typename _Tp>
+     194              :     constexpr int
+     195         3724 :     __countl_zero(_Tp __x) noexcept
+     196              :     {
+     197              :       using __gnu_cxx::__int_traits;
+     198         3724 :       constexpr auto _Nd = __int_traits<_Tp>::__digits;
+     199              : 
+     200         3724 :       if (__x == 0)
+     201            0 :         return _Nd;
+     202              : 
+     203         3724 :       constexpr auto _Nd_ull = __int_traits<unsigned long long>::__digits;
+     204         3724 :       constexpr auto _Nd_ul = __int_traits<unsigned long>::__digits;
+     205         3724 :       constexpr auto _Nd_u = __int_traits<unsigned>::__digits;
+     206              : 
+     207              :       if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_u)
+     208              :         {
+     209              :           constexpr int __diff = _Nd_u - _Nd;
+     210              :           return __builtin_clz(__x) - __diff;
+     211              :         }
+     212              :       else if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_ul)
+     213              :         {
+     214         3724 :           constexpr int __diff = _Nd_ul - _Nd;
+     215         3724 :           return __builtin_clzl(__x) - __diff;
+     216              :         }
+     217              :       else if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_ull)
+     218              :         {
+     219              :           constexpr int __diff = _Nd_ull - _Nd;
+     220              :           return __builtin_clzll(__x) - __diff;
+     221              :         }
+     222              :       else // (_Nd > _Nd_ull)
+     223              :         {
+     224              :           static_assert(_Nd <= (2 * _Nd_ull),
+     225              :                         "Maximum supported integer size is 128-bit");
+     226              : 
+     227              :           unsigned long long __high = __x >> _Nd_ull;
+     228              :           if (__high != 0)
+     229              :             {
+     230              :               constexpr int __diff = (2 * _Nd_ull) - _Nd;
+     231              :               return __builtin_clzll(__high) - __diff;
+     232              :             }
+     233              :           constexpr auto __max_ull = __int_traits<unsigned long long>::__max;
+     234              :           unsigned long long __low = __x & __max_ull;
+     235              :           return (_Nd - _Nd_ull) + __builtin_clzll(__low);
+     236              :         }
+     237              :     }
+     238              : 
+     239              :   template<typename _Tp>
+     240              :     constexpr int
+     241              :     __countl_one(_Tp __x) noexcept
+     242              :     {
+     243              :       return std::__countl_zero<_Tp>((_Tp)~__x);
+     244              :     }
+     245              : 
+     246              :   template<typename _Tp>
+     247              :     constexpr int
+     248              :     __countr_zero(_Tp __x) noexcept
+     249              :     {
+     250              :       using __gnu_cxx::__int_traits;
+     251              :       constexpr auto _Nd = __int_traits<_Tp>::__digits;
+     252              : 
+     253              :       if (__x == 0)
+     254              :         return _Nd;
+     255              : 
+     256              :       constexpr auto _Nd_ull = __int_traits<unsigned long long>::__digits;
+     257              :       constexpr auto _Nd_ul = __int_traits<unsigned long>::__digits;
+     258              :       constexpr auto _Nd_u = __int_traits<unsigned>::__digits;
+     259              : 
+     260              :       if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_u)
+     261              :         return __builtin_ctz(__x);
+     262              :       else if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_ul)
+     263              :         return __builtin_ctzl(__x);
+     264              :       else if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_ull)
+     265              :         return __builtin_ctzll(__x);
+     266              :       else // (_Nd > _Nd_ull)
+     267              :         {
+     268              :           static_assert(_Nd <= (2 * _Nd_ull),
+     269              :                         "Maximum supported integer size is 128-bit");
+     270              : 
+     271              :           constexpr auto __max_ull = __int_traits<unsigned long long>::__max;
+     272              :           unsigned long long __low = __x & __max_ull;
+     273              :           if (__low != 0)
+     274              :             return __builtin_ctzll(__low);
+     275              :           unsigned long long __high = __x >> _Nd_ull;
+     276              :           return __builtin_ctzll(__high) + _Nd_ull;
+     277              :         }
+     278              :     }
+     279              : 
+     280              :   template<typename _Tp>
+     281              :     constexpr int
+     282              :     __countr_one(_Tp __x) noexcept
+     283              :     {
+     284              :       return std::__countr_zero((_Tp)~__x);
+     285              :     }
+     286              : 
+     287              :   template<typename _Tp>
+     288              :     constexpr int
+     289              :     __popcount(_Tp __x) noexcept
+     290              :     {
+     291              :       using __gnu_cxx::__int_traits;
+     292              :       constexpr auto _Nd = __int_traits<_Tp>::__digits;
+     293              : 
+     294              :       constexpr auto _Nd_ull = __int_traits<unsigned long long>::__digits;
+     295              :       constexpr auto _Nd_ul = __int_traits<unsigned long>::__digits;
+     296              :       constexpr auto _Nd_u = __int_traits<unsigned>::__digits;
+     297              : 
+     298              :       if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_u)
+     299              :         return __builtin_popcount(__x);
+     300              :       else if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_ul)
+     301              :         return __builtin_popcountl(__x);
+     302              :       else if _GLIBCXX17_CONSTEXPR (_Nd <= _Nd_ull)
+     303              :         return __builtin_popcountll(__x);
+     304              :       else // (_Nd > _Nd_ull)
+     305              :         {
+     306              :           static_assert(_Nd <= (2 * _Nd_ull),
+     307              :                         "Maximum supported integer size is 128-bit");
+     308              : 
+     309              :           constexpr auto __max_ull = __int_traits<unsigned long long>::__max;
+     310              :           unsigned long long __low = __x & __max_ull;
+     311              :           unsigned long long __high = __x >> _Nd_ull;
+     312              :           return __builtin_popcountll(__low) + __builtin_popcountll(__high);
+     313              :         }
+     314              :     }
+     315              : 
+     316              :   template<typename _Tp>
+     317              :     constexpr bool
+     318              :     __has_single_bit(_Tp __x) noexcept
+     319              :     { return std::__popcount(__x) == 1; }
+     320              : 
+     321              :   template<typename _Tp>
+     322              :     constexpr _Tp
+     323              :     __bit_ceil(_Tp __x) noexcept
+     324              :     {
+     325              :       using __gnu_cxx::__int_traits;
+     326              :       constexpr auto _Nd = __int_traits<_Tp>::__digits;
+     327              :       if (__x == 0 || __x == 1)
+     328              :         return 1;
+     329              :       auto __shift_exponent = _Nd - std::__countl_zero((_Tp)(__x - 1u));
+     330              :       // If the shift exponent equals _Nd then the correct result is not
+     331              :       // representable as a value of _Tp, and so the result is undefined.
+     332              :       // Want that undefined behaviour to be detected in constant expressions,
+     333              :       // by UBSan, and by debug assertions.
+     334              :       if (!std::__is_constant_evaluated())
+     335              :         {
+     336              :           __glibcxx_assert( __shift_exponent != __int_traits<_Tp>::__digits );
+     337              :         }
+     338              : 
+     339              :       using __promoted_type = decltype(__x << 1);
+     340              :       if _GLIBCXX17_CONSTEXPR (!is_same<__promoted_type, _Tp>::value)
+     341              :         {
+     342              :           // If __x undergoes integral promotion then shifting by _Nd is
+     343              :           // not undefined. In order to make the shift undefined, so that
+     344              :           // it is diagnosed in constant expressions and by UBsan, we also
+     345              :           // need to "promote" the shift exponent to be too large for the
+     346              :           // promoted type.
+     347              :           const int __extra_exp = sizeof(__promoted_type) / sizeof(_Tp) / 2;
+     348              :           __shift_exponent |= (__shift_exponent & _Nd) << __extra_exp;
+     349              :         }
+     350              :       return (_Tp)1u << __shift_exponent;
+     351              :     }
+     352              : 
+     353              :   template<typename _Tp>
+     354              :     constexpr _Tp
+     355              :     __bit_floor(_Tp __x) noexcept
+     356              :     {
+     357              :       constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits;
+     358              :       if (__x == 0)
+     359              :         return 0;
+     360              :       return (_Tp)1u << (_Nd - std::__countl_zero((_Tp)(__x >> 1)));
+     361              :     }
+     362              : 
+     363              :   template<typename _Tp>
+     364              :     constexpr int
+     365         3724 :     __bit_width(_Tp __x) noexcept
+     366              :     {
+     367         3724 :       constexpr auto _Nd = __gnu_cxx::__int_traits<_Tp>::__digits;
+     368         3724 :       return _Nd - std::__countl_zero(__x);
+     369              :     }
+     370              : 
+     371              :   /// @endcond
+     372              : 
+     373              : #if __cplusplus > 201703L
+     374              : 
+     375              : #define __cpp_lib_bitops 201907L
+     376              : 
+     377              :   /// @cond undocumented
+     378              :   template<typename _Tp, typename _Up = _Tp>
+     379              :     using _If_is_unsigned_integer
+     380              :       = enable_if_t<__is_unsigned_integer<_Tp>::value, _Up>;
+     381              :   /// @endcond
+     382              : 
+     383              :   // [bit.rot], rotating
+     384              : 
+     385              :   /// Rotate `x` to the left by `s` bits.
+     386              :   template<typename _Tp>
+     387              :     [[nodiscard]] constexpr _If_is_unsigned_integer<_Tp>
+     388              :     rotl(_Tp __x, int __s) noexcept
+     389              :     { return std::__rotl(__x, __s); }
+     390              : 
+     391              :   /// Rotate `x` to the right by `s` bits.
+     392              :   template<typename _Tp>
+     393              :     [[nodiscard]] constexpr _If_is_unsigned_integer<_Tp>
+     394              :     rotr(_Tp __x, int __s) noexcept
+     395              :     { return std::__rotr(__x, __s); }
+     396              : 
+     397              :   // [bit.count], counting
+     398              : 
+     399              :   /// The number of contiguous zero bits, starting from the highest bit.
+     400              :   template<typename _Tp>
+     401              :     constexpr _If_is_unsigned_integer<_Tp, int>
+     402              :     countl_zero(_Tp __x) noexcept
+     403              :     { return std::__countl_zero(__x); }
+     404              : 
+     405              :   /// The number of contiguous one bits, starting from the highest bit.
+     406              :   template<typename _Tp>
+     407              :     constexpr _If_is_unsigned_integer<_Tp, int>
+     408              :     countl_one(_Tp __x) noexcept
+     409              :     { return std::__countl_one(__x); }
+     410              : 
+     411              :   /// The number of contiguous zero bits, starting from the lowest bit.
+     412              :   template<typename _Tp>
+     413              :     constexpr _If_is_unsigned_integer<_Tp, int>
+     414              :     countr_zero(_Tp __x) noexcept
+     415              :     { return std::__countr_zero(__x); }
+     416              : 
+     417              :   /// The number of contiguous one bits, starting from the lowest bit.
+     418              :   template<typename _Tp>
+     419              :     constexpr _If_is_unsigned_integer<_Tp, int>
+     420              :     countr_one(_Tp __x) noexcept
+     421              :     { return std::__countr_one(__x); }
+     422              : 
+     423              :   /// The number of bits set in `x`.
+     424              :   template<typename _Tp>
+     425              :     constexpr _If_is_unsigned_integer<_Tp, int>
+     426              :     popcount(_Tp __x) noexcept
+     427              :     { return std::__popcount(__x); }
+     428              : 
+     429              :   // [bit.pow.two], integral powers of 2
+     430              : 
+     431              : #define __cpp_lib_int_pow2 202002L
+     432              : 
+     433              :   /// True if `x` is a power of two, false otherwise.
+     434              :   template<typename _Tp>
+     435              :     constexpr _If_is_unsigned_integer<_Tp, bool>
+     436              :     has_single_bit(_Tp __x) noexcept
+     437              :     { return std::__has_single_bit(__x); }
+     438              : 
+     439              :   /// The smallest power-of-two not less than `x`.
+     440              :   template<typename _Tp>
+     441              :     constexpr _If_is_unsigned_integer<_Tp>
+     442              :     bit_ceil(_Tp __x) noexcept
+     443              :     { return std::__bit_ceil(__x); }
+     444              : 
+     445              :   /// The largest power-of-two not greater than `x`.
+     446              :   template<typename _Tp>
+     447              :     constexpr _If_is_unsigned_integer<_Tp>
+     448              :     bit_floor(_Tp __x) noexcept
+     449              :     { return std::__bit_floor(__x); }
+     450              : 
+     451              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     452              :   // 3656. Inconsistent bit operations returning a count
+     453              :   /// The smallest integer greater than the base-2 logarithm of `x`.
+     454              :   template<typename _Tp>
+     455              :     constexpr _If_is_unsigned_integer<_Tp, int>
+     456              :     bit_width(_Tp __x) noexcept
+     457              :     { return std::__bit_width(__x); }
+     458              : 
+     459              : #define __cpp_lib_endian 201907L
+     460              : 
+     461              :   /// Byte order constants
+     462              :   /**
+     463              :    * The platform endianness can be checked by comparing `std::endian::native`
+     464              :    * to one of `std::endian::big` or `std::endian::little`.
+     465              :    *
+     466              :    * @since C++20
+     467              :    */
+     468              :   enum class endian
+     469              :   {
+     470              :     little = __ORDER_LITTLE_ENDIAN__,
+     471              :     big    = __ORDER_BIG_ENDIAN__,
+     472              :     native = __BYTE_ORDER__
+     473              :   };
+     474              : #endif // C++2a
+     475              : 
+     476              :   /// @}
+     477              : 
+     478              : _GLIBCXX_END_NAMESPACE_VERSION
+     479              : } // namespace std
+     480              : 
+     481              : #endif // C++14
+     482              : #endif // _GLIBCXX_BIT
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/alloc_traits.h.func-c.html b/html/usr/include/c++/13/bits/alloc_traits.h.func-c.html new file mode 100644 index 0000000..b92065e --- /dev/null +++ b/html/usr/include/c++/13/bits/alloc_traits.h.func-c.html @@ -0,0 +1,75 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/alloc_traits.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - alloc_traits.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.9 %1413
Test Date:2024-04-30 13:17:26Functions:-00
+
+ +
+ + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/alloc_traits.h.func.html b/html/usr/include/c++/13/bits/alloc_traits.h.func.html new file mode 100644 index 0000000..7a59bb5 --- /dev/null +++ b/html/usr/include/c++/13/bits/alloc_traits.h.func.html @@ -0,0 +1,75 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/alloc_traits.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - alloc_traits.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.9 %1413
Test Date:2024-04-30 13:17:26Functions:-00
+
+ +
+ + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/alloc_traits.h.gcov.html b/html/usr/include/c++/13/bits/alloc_traits.h.gcov.html new file mode 100644 index 0000000..2c8503d --- /dev/null +++ b/html/usr/include/c++/13/bits/alloc_traits.h.gcov.html @@ -0,0 +1,1031 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/alloc_traits.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - alloc_traits.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.9 %1413
Test Date:2024-04-30 13:17:26Functions:-00
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Allocator traits -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2011-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/alloc_traits.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{memory}
+      28              :  */
+      29              : 
+      30              : #ifndef _ALLOC_TRAITS_H
+      31              : #define _ALLOC_TRAITS_H 1
+      32              : 
+      33              : #include <bits/stl_construct.h>
+      34              : #include <bits/memoryfwd.h>
+      35              : #if __cplusplus >= 201103L
+      36              : # include <bits/ptr_traits.h>
+      37              : # include <ext/numeric_traits.h>
+      38              : # if _GLIBCXX_HOSTED
+      39              : #  include <bits/allocator.h>
+      40              : # endif
+      41              : #endif
+      42              : 
+      43              : namespace std _GLIBCXX_VISIBILITY(default)
+      44              : {
+      45              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      46              : 
+      47              : #if __cplusplus >= 201103L
+      48              : #define __cpp_lib_allocator_traits_is_always_equal 201411L
+      49              : 
+      50              :   /// @cond undocumented
+      51              :   struct __allocator_traits_base
+      52              :   {
+      53              :     template<typename _Tp, typename _Up, typename = void>
+      54              :       struct __rebind : __replace_first_arg<_Tp, _Up>
+      55              :       {
+      56              :         static_assert(is_same<
+      57              :           typename __replace_first_arg<_Tp, typename _Tp::value_type>::type,
+      58              :                         _Tp>::value,
+      59              :           "allocator_traits<A>::rebind_alloc<A::value_type> must be A");
+      60              :       };
+      61              : 
+      62              :     template<typename _Tp, typename _Up>
+      63              :       struct __rebind<_Tp, _Up,
+      64              :                       __void_t<typename _Tp::template rebind<_Up>::other>>
+      65              :       {
+      66              :         using type = typename _Tp::template rebind<_Up>::other;
+      67              : 
+      68              :         static_assert(is_same<
+      69              :           typename _Tp::template rebind<typename _Tp::value_type>::other,
+      70              :                         _Tp>::value,
+      71              :           "allocator_traits<A>::rebind_alloc<A::value_type> must be A");
+      72              :       };
+      73              : 
+      74              :   protected:
+      75              :     template<typename _Tp>
+      76              :       using __pointer = typename _Tp::pointer;
+      77              :     template<typename _Tp>
+      78              :       using __c_pointer = typename _Tp::const_pointer;
+      79              :     template<typename _Tp>
+      80              :       using __v_pointer = typename _Tp::void_pointer;
+      81              :     template<typename _Tp>
+      82              :       using __cv_pointer = typename _Tp::const_void_pointer;
+      83              :     template<typename _Tp>
+      84              :       using __pocca = typename _Tp::propagate_on_container_copy_assignment;
+      85              :     template<typename _Tp>
+      86              :       using __pocma = typename _Tp::propagate_on_container_move_assignment;
+      87              :     template<typename _Tp>
+      88              :       using __pocs = typename _Tp::propagate_on_container_swap;
+      89              :     template<typename _Tp>
+      90              :       using __equal = __type_identity<typename _Tp::is_always_equal>;
+      91              :   };
+      92              : 
+      93              :   template<typename _Alloc, typename _Up>
+      94              :     using __alloc_rebind
+      95              :       = typename __allocator_traits_base::template __rebind<_Alloc, _Up>::type;
+      96              :   /// @endcond
+      97              : 
+      98              :   /**
+      99              :    * @brief  Uniform interface to all allocator types.
+     100              :    * @headerfile memory
+     101              :    * @ingroup allocators
+     102              :    * @since C++11
+     103              :   */
+     104              :   template<typename _Alloc>
+     105              :     struct allocator_traits : __allocator_traits_base
+     106              :     {
+     107              :       /// The allocator type
+     108              :       typedef _Alloc allocator_type;
+     109              :       /// The allocated type
+     110              :       typedef typename _Alloc::value_type value_type;
+     111              : 
+     112              :       /**
+     113              :        * @brief   The allocator's pointer type.
+     114              :        *
+     115              :        * @c Alloc::pointer if that type exists, otherwise @c value_type*
+     116              :       */
+     117              :       using pointer = __detected_or_t<value_type*, __pointer, _Alloc>;
+     118              : 
+     119              :     private:
+     120              :       // Select _Func<_Alloc> or pointer_traits<pointer>::rebind<_Tp>
+     121              :       template<template<typename> class _Func, typename _Tp, typename = void>
+     122              :         struct _Ptr
+     123              :         {
+     124              :           using type = typename pointer_traits<pointer>::template rebind<_Tp>;
+     125              :         };
+     126              : 
+     127              :       template<template<typename> class _Func, typename _Tp>
+     128              :         struct _Ptr<_Func, _Tp, __void_t<_Func<_Alloc>>>
+     129              :         {
+     130              :           using type = _Func<_Alloc>;
+     131              :         };
+     132              : 
+     133              :       // Select _A2::difference_type or pointer_traits<_Ptr>::difference_type
+     134              :       template<typename _A2, typename _PtrT, typename = void>
+     135              :         struct _Diff
+     136              :         { using type = typename pointer_traits<_PtrT>::difference_type; };
+     137              : 
+     138              :       template<typename _A2, typename _PtrT>
+     139              :         struct _Diff<_A2, _PtrT, __void_t<typename _A2::difference_type>>
+     140              :         { using type = typename _A2::difference_type; };
+     141              : 
+     142              :       // Select _A2::size_type or make_unsigned<_DiffT>::type
+     143              :       template<typename _A2, typename _DiffT, typename = void>
+     144              :         struct _Size : make_unsigned<_DiffT> { };
+     145              : 
+     146              :       template<typename _A2, typename _DiffT>
+     147              :         struct _Size<_A2, _DiffT, __void_t<typename _A2::size_type>>
+     148              :         { using type = typename _A2::size_type; };
+     149              : 
+     150              :     public:
+     151              :       /**
+     152              :        * @brief   The allocator's const pointer type.
+     153              :        *
+     154              :        * @c Alloc::const_pointer if that type exists, otherwise
+     155              :        * <tt> pointer_traits<pointer>::rebind<const value_type> </tt>
+     156              :       */
+     157              :       using const_pointer = typename _Ptr<__c_pointer, const value_type>::type;
+     158              : 
+     159              :       /**
+     160              :        * @brief   The allocator's void pointer type.
+     161              :        *
+     162              :        * @c Alloc::void_pointer if that type exists, otherwise
+     163              :        * <tt> pointer_traits<pointer>::rebind<void> </tt>
+     164              :       */
+     165              :       using void_pointer = typename _Ptr<__v_pointer, void>::type;
+     166              : 
+     167              :       /**
+     168              :        * @brief   The allocator's const void pointer type.
+     169              :        *
+     170              :        * @c Alloc::const_void_pointer if that type exists, otherwise
+     171              :        * <tt> pointer_traits<pointer>::rebind<const void> </tt>
+     172              :       */
+     173              :       using const_void_pointer = typename _Ptr<__cv_pointer, const void>::type;
+     174              : 
+     175              :       /**
+     176              :        * @brief   The allocator's difference type
+     177              :        *
+     178              :        * @c Alloc::difference_type if that type exists, otherwise
+     179              :        * <tt> pointer_traits<pointer>::difference_type </tt>
+     180              :       */
+     181              :       using difference_type = typename _Diff<_Alloc, pointer>::type;
+     182              : 
+     183              :       /**
+     184              :        * @brief   The allocator's size type
+     185              :        *
+     186              :        * @c Alloc::size_type if that type exists, otherwise
+     187              :        * <tt> make_unsigned<difference_type>::type </tt>
+     188              :       */
+     189              :       using size_type = typename _Size<_Alloc, difference_type>::type;
+     190              : 
+     191              :       /**
+     192              :        * @brief   How the allocator is propagated on copy assignment
+     193              :        *
+     194              :        * @c Alloc::propagate_on_container_copy_assignment if that type exists,
+     195              :        * otherwise @c false_type
+     196              :       */
+     197              :       using propagate_on_container_copy_assignment
+     198              :         = __detected_or_t<false_type, __pocca, _Alloc>;
+     199              : 
+     200              :       /**
+     201              :        * @brief   How the allocator is propagated on move assignment
+     202              :        *
+     203              :        * @c Alloc::propagate_on_container_move_assignment if that type exists,
+     204              :        * otherwise @c false_type
+     205              :       */
+     206              :       using propagate_on_container_move_assignment
+     207              :         = __detected_or_t<false_type, __pocma, _Alloc>;
+     208              : 
+     209              :       /**
+     210              :        * @brief   How the allocator is propagated on swap
+     211              :        *
+     212              :        * @c Alloc::propagate_on_container_swap if that type exists,
+     213              :        * otherwise @c false_type
+     214              :       */
+     215              :       using propagate_on_container_swap
+     216              :         = __detected_or_t<false_type, __pocs, _Alloc>;
+     217              : 
+     218              :       /**
+     219              :        * @brief   Whether all instances of the allocator type compare equal.
+     220              :        *
+     221              :        * @c Alloc::is_always_equal if that type exists,
+     222              :        * otherwise @c is_empty<Alloc>::type
+     223              :       */
+     224              :       using is_always_equal
+     225              :         = typename __detected_or_t<is_empty<_Alloc>, __equal, _Alloc>::type;
+     226              : 
+     227              :       template<typename _Tp>
+     228              :         using rebind_alloc = __alloc_rebind<_Alloc, _Tp>;
+     229              :       template<typename _Tp>
+     230              :         using rebind_traits = allocator_traits<rebind_alloc<_Tp>>;
+     231              : 
+     232              :     private:
+     233              :       template<typename _Alloc2>
+     234              :         static constexpr auto
+     235              :         _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer __hint, int)
+     236              :         -> decltype(__a.allocate(__n, __hint))
+     237              :         { return __a.allocate(__n, __hint); }
+     238              : 
+     239              :       template<typename _Alloc2>
+     240              :         static constexpr pointer
+     241              :         _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer, ...)
+     242              :         { return __a.allocate(__n); }
+     243              : 
+     244              :       template<typename _Tp, typename... _Args>
+     245              :         struct __construct_helper
+     246              :         {
+     247              :           template<typename _Alloc2,
+     248              :             typename = decltype(std::declval<_Alloc2*>()->construct(
+     249              :                   std::declval<_Tp*>(), std::declval<_Args>()...))>
+     250              :             static true_type __test(int);
+     251              : 
+     252              :           template<typename>
+     253              :             static false_type __test(...);
+     254              : 
+     255              :           using type = decltype(__test<_Alloc>(0));
+     256              :         };
+     257              : 
+     258              :       template<typename _Tp, typename... _Args>
+     259              :         using __has_construct
+     260              :           = typename __construct_helper<_Tp, _Args...>::type;
+     261              : 
+     262              :       template<typename _Tp, typename... _Args>
+     263              :         static _GLIBCXX14_CONSTEXPR _Require<__has_construct<_Tp, _Args...>>
+     264              :         _S_construct(_Alloc& __a, _Tp* __p, _Args&&... __args)
+     265              :         noexcept(noexcept(__a.construct(__p, std::forward<_Args>(__args)...)))
+     266              :         { __a.construct(__p, std::forward<_Args>(__args)...); }
+     267              : 
+     268              :       template<typename _Tp, typename... _Args>
+     269              :         static _GLIBCXX14_CONSTEXPR
+     270              :         _Require<__and_<__not_<__has_construct<_Tp, _Args...>>,
+     271              :                                is_constructible<_Tp, _Args...>>>
+     272              :         _S_construct(_Alloc&, _Tp* __p, _Args&&... __args)
+     273              :         noexcept(std::is_nothrow_constructible<_Tp, _Args...>::value)
+     274              :         {
+     275              : #if __cplusplus <= 201703L
+     276              :           ::new((void*)__p) _Tp(std::forward<_Args>(__args)...);
+     277              : #else
+     278              :           std::construct_at(__p, std::forward<_Args>(__args)...);
+     279              : #endif
+     280              :         }
+     281              : 
+     282              :       template<typename _Alloc2, typename _Tp>
+     283              :         static _GLIBCXX14_CONSTEXPR auto
+     284              :         _S_destroy(_Alloc2& __a, _Tp* __p, int)
+     285              :         noexcept(noexcept(__a.destroy(__p)))
+     286              :         -> decltype(__a.destroy(__p))
+     287              :         { __a.destroy(__p); }
+     288              : 
+     289              :       template<typename _Alloc2, typename _Tp>
+     290              :         static _GLIBCXX14_CONSTEXPR void
+     291              :         _S_destroy(_Alloc2&, _Tp* __p, ...)
+     292              :         noexcept(std::is_nothrow_destructible<_Tp>::value)
+     293              :         { std::_Destroy(__p); }
+     294              : 
+     295              :       template<typename _Alloc2>
+     296              :         static constexpr auto
+     297              :         _S_max_size(_Alloc2& __a, int)
+     298              :         -> decltype(__a.max_size())
+     299              :         { return __a.max_size(); }
+     300              : 
+     301              :       template<typename _Alloc2>
+     302              :         static constexpr size_type
+     303              :         _S_max_size(_Alloc2&, ...)
+     304              :         {
+     305              :           // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     306              :           // 2466. allocator_traits::max_size() default behavior is incorrect
+     307              :           return __gnu_cxx::__numeric_traits<size_type>::__max
+     308              :             / sizeof(value_type);
+     309              :         }
+     310              : 
+     311              :       template<typename _Alloc2>
+     312              :         static constexpr auto
+     313              :         _S_select(_Alloc2& __a, int)
+     314              :         -> decltype(__a.select_on_container_copy_construction())
+     315              :         { return __a.select_on_container_copy_construction(); }
+     316              : 
+     317              :       template<typename _Alloc2>
+     318              :         static constexpr _Alloc2
+     319              :         _S_select(_Alloc2& __a, ...)
+     320              :         { return __a; }
+     321              : 
+     322              :     public:
+     323              : 
+     324              :       /**
+     325              :        *  @brief  Allocate memory.
+     326              :        *  @param  __a  An allocator.
+     327              :        *  @param  __n  The number of objects to allocate space for.
+     328              :        *
+     329              :        *  Calls @c a.allocate(n)
+     330              :       */
+     331              :       _GLIBCXX_NODISCARD static _GLIBCXX20_CONSTEXPR pointer
+     332              :       allocate(_Alloc& __a, size_type __n)
+     333              :       { return __a.allocate(__n); }
+     334              : 
+     335              :       /**
+     336              :        *  @brief  Allocate memory.
+     337              :        *  @param  __a  An allocator.
+     338              :        *  @param  __n  The number of objects to allocate space for.
+     339              :        *  @param  __hint Aid to locality.
+     340              :        *  @return Memory of suitable size and alignment for @a n objects
+     341              :        *          of type @c value_type
+     342              :        *
+     343              :        *  Returns <tt> a.allocate(n, hint) </tt> if that expression is
+     344              :        *  well-formed, otherwise returns @c a.allocate(n)
+     345              :       */
+     346              :       _GLIBCXX_NODISCARD static _GLIBCXX20_CONSTEXPR pointer
+     347              :       allocate(_Alloc& __a, size_type __n, const_void_pointer __hint)
+     348              :       { return _S_allocate(__a, __n, __hint, 0); }
+     349              : 
+     350              :       /**
+     351              :        *  @brief  Deallocate memory.
+     352              :        *  @param  __a  An allocator.
+     353              :        *  @param  __p  Pointer to the memory to deallocate.
+     354              :        *  @param  __n  The number of objects space was allocated for.
+     355              :        *
+     356              :        *  Calls <tt> a.deallocate(p, n) </tt>
+     357              :       */
+     358              :       static _GLIBCXX20_CONSTEXPR void
+     359              :       deallocate(_Alloc& __a, pointer __p, size_type __n)
+     360              :       { __a.deallocate(__p, __n); }
+     361              : 
+     362              :       /**
+     363              :        *  @brief  Construct an object of type `_Tp`
+     364              :        *  @param  __a  An allocator.
+     365              :        *  @param  __p  Pointer to memory of suitable size and alignment for Tp
+     366              :        *  @param  __args Constructor arguments.
+     367              :        *
+     368              :        *  Calls <tt> __a.construct(__p, std::forward<Args>(__args)...) </tt>
+     369              :        *  if that expression is well-formed, otherwise uses placement-new
+     370              :        *  to construct an object of type @a _Tp at location @a __p from the
+     371              :        *  arguments @a __args...
+     372              :       */
+     373              :       template<typename _Tp, typename... _Args>
+     374              :         static _GLIBCXX20_CONSTEXPR auto
+     375              :         construct(_Alloc& __a, _Tp* __p, _Args&&... __args)
+     376              :         noexcept(noexcept(_S_construct(__a, __p,
+     377              :                                        std::forward<_Args>(__args)...)))
+     378              :         -> decltype(_S_construct(__a, __p, std::forward<_Args>(__args)...))
+     379              :         { _S_construct(__a, __p, std::forward<_Args>(__args)...); }
+     380              : 
+     381              :       /**
+     382              :        *  @brief  Destroy an object of type @a _Tp
+     383              :        *  @param  __a  An allocator.
+     384              :        *  @param  __p  Pointer to the object to destroy
+     385              :        *
+     386              :        *  Calls @c __a.destroy(__p) if that expression is well-formed,
+     387              :        *  otherwise calls @c __p->~_Tp()
+     388              :       */
+     389              :       template<typename _Tp>
+     390              :         static _GLIBCXX20_CONSTEXPR void
+     391              :         destroy(_Alloc& __a, _Tp* __p)
+     392              :         noexcept(noexcept(_S_destroy(__a, __p, 0)))
+     393              :         { _S_destroy(__a, __p, 0); }
+     394              : 
+     395              :       /**
+     396              :        *  @brief  The maximum supported allocation size
+     397              :        *  @param  __a  An allocator.
+     398              :        *  @return @c __a.max_size() or @c numeric_limits<size_type>::max()
+     399              :        *
+     400              :        *  Returns @c __a.max_size() if that expression is well-formed,
+     401              :        *  otherwise returns @c numeric_limits<size_type>::max()
+     402              :       */
+     403              :       static _GLIBCXX20_CONSTEXPR size_type
+     404              :       max_size(const _Alloc& __a) noexcept
+     405              :       { return _S_max_size(__a, 0); }
+     406              : 
+     407              :       /**
+     408              :        *  @brief  Obtain an allocator to use when copying a container.
+     409              :        *  @param  __rhs  An allocator.
+     410              :        *  @return @c __rhs.select_on_container_copy_construction() or @a __rhs
+     411              :        *
+     412              :        *  Returns @c __rhs.select_on_container_copy_construction() if that
+     413              :        *  expression is well-formed, otherwise returns @a __rhs
+     414              :       */
+     415              :       static _GLIBCXX20_CONSTEXPR _Alloc
+     416              :       select_on_container_copy_construction(const _Alloc& __rhs)
+     417              :       { return _S_select(__rhs, 0); }
+     418              :     };
+     419              : 
+     420              : #if _GLIBCXX_HOSTED
+     421              : 
+     422              : #if __cplusplus > 201703L
+     423              : # define __cpp_lib_constexpr_dynamic_alloc 201907L
+     424              : #endif
+     425              : 
+     426              :   /// Partial specialization for std::allocator.
+     427              :   template<typename _Tp>
+     428              :     struct allocator_traits<allocator<_Tp>>
+     429              :     {
+     430              :       /// The allocator type
+     431              :       using allocator_type = allocator<_Tp>;
+     432              : 
+     433              :       /// The allocated type
+     434              :       using value_type = _Tp;
+     435              : 
+     436              :       /// The allocator's pointer type.
+     437              :       using pointer = _Tp*;
+     438              : 
+     439              :       /// The allocator's const pointer type.
+     440              :       using const_pointer = const _Tp*;
+     441              : 
+     442              :       /// The allocator's void pointer type.
+     443              :       using void_pointer = void*;
+     444              : 
+     445              :       /// The allocator's const void pointer type.
+     446              :       using const_void_pointer = const void*;
+     447              : 
+     448              :       /// The allocator's difference type
+     449              :       using difference_type = std::ptrdiff_t;
+     450              : 
+     451              :       /// The allocator's size type
+     452              :       using size_type = std::size_t;
+     453              : 
+     454              :       /// How the allocator is propagated on copy assignment
+     455              :       using propagate_on_container_copy_assignment = false_type;
+     456              : 
+     457              :       /// How the allocator is propagated on move assignment
+     458              :       using propagate_on_container_move_assignment = true_type;
+     459              : 
+     460              :       /// How the allocator is propagated on swap
+     461              :       using propagate_on_container_swap = false_type;
+     462              : 
+     463              :       /// Whether all instances of the allocator type compare equal.
+     464              :       using is_always_equal = true_type;
+     465              : 
+     466              :       template<typename _Up>
+     467              :         using rebind_alloc = allocator<_Up>;
+     468              : 
+     469              :       template<typename _Up>
+     470              :         using rebind_traits = allocator_traits<allocator<_Up>>;
+     471              : 
+     472              :       /**
+     473              :        *  @brief  Allocate memory.
+     474              :        *  @param  __a  An allocator.
+     475              :        *  @param  __n  The number of objects to allocate space for.
+     476              :        *
+     477              :        *  Calls @c a.allocate(n)
+     478              :       */
+     479              :       [[__nodiscard__,__gnu__::__always_inline__]]
+     480              :       static _GLIBCXX20_CONSTEXPR pointer
+     481              :       allocate(allocator_type& __a, size_type __n)
+     482    150488702 :       { return __a.allocate(__n); }
+     483              : 
+     484              :       /**
+     485              :        *  @brief  Allocate memory.
+     486              :        *  @param  __a  An allocator.
+     487              :        *  @param  __n  The number of objects to allocate space for.
+     488              :        *  @param  __hint Aid to locality.
+     489              :        *  @return Memory of suitable size and alignment for @a n objects
+     490              :        *          of type @c value_type
+     491              :        *
+     492              :        *  Returns <tt> a.allocate(n, hint) </tt>
+     493              :       */
+     494              :       [[__nodiscard__,__gnu__::__always_inline__]]
+     495              :       static _GLIBCXX20_CONSTEXPR pointer
+     496              :       allocate(allocator_type& __a, size_type __n,
+     497              :                [[maybe_unused]] const_void_pointer __hint)
+     498              :       {
+     499              : #if __cplusplus <= 201703L
+     500              :         return __a.allocate(__n, __hint);
+     501              : #else
+     502              :         return __a.allocate(__n);
+     503              : #endif
+     504              :       }
+     505              : 
+     506              :       /**
+     507              :        *  @brief  Deallocate memory.
+     508              :        *  @param  __a  An allocator.
+     509              :        *  @param  __p  Pointer to the memory to deallocate.
+     510              :        *  @param  __n  The number of objects space was allocated for.
+     511              :        *
+     512              :        *  Calls <tt> a.deallocate(p, n) </tt>
+     513              :       */
+     514              :       [[__gnu__::__always_inline__]]
+     515              :       static _GLIBCXX20_CONSTEXPR void
+     516              :       deallocate(allocator_type& __a, pointer __p, size_type __n)
+     517    263968424 :       { __a.deallocate(__p, __n); }
+     518              : 
+     519              :       /**
+     520              :        *  @brief  Construct an object of type `_Up`
+     521              :        *  @param  __a  An allocator.
+     522              :        *  @param  __p  Pointer to memory of suitable size and alignment for
+     523              :        *               an object of type `_Up`.
+     524              :        *  @param  __args Constructor arguments.
+     525              :        *
+     526              :        *  Calls `__a.construct(__p, std::forward<_Args>(__args)...)`
+     527              :        *  in C++11, C++14 and C++17. Changed in C++20 to call
+     528              :        *  `std::construct_at(__p, std::forward<_Args>(__args)...)` instead.
+     529              :       */
+     530              :       template<typename _Up, typename... _Args>
+     531              :         [[__gnu__::__always_inline__]]
+     532              :         static _GLIBCXX20_CONSTEXPR void
+     533              :         construct(allocator_type& __a __attribute__((__unused__)), _Up* __p,
+     534              :                   _Args&&... __args)
+     535              :         noexcept(std::is_nothrow_constructible<_Up, _Args...>::value)
+     536              :         {
+     537              : #if __cplusplus <= 201703L
+     538    253267682 :           __a.construct(__p, std::forward<_Args>(__args)...);
+     539              : #else
+     540              :           std::construct_at(__p, std::forward<_Args>(__args)...);
+     541              : #endif
+     542    253267732 :         }
+     543              : 
+     544              :       /**
+     545              :        *  @brief  Destroy an object of type @a _Up
+     546              :        *  @param  __a  An allocator.
+     547              :        *  @param  __p  Pointer to the object to destroy
+     548              :        *
+     549              :        *  Calls @c __a.destroy(__p).
+     550              :       */
+     551              :       template<typename _Up>
+     552              :         [[__gnu__::__always_inline__]]
+     553              :         static _GLIBCXX20_CONSTEXPR void
+     554              :         destroy(allocator_type& __a __attribute__((__unused__)), _Up* __p)
+     555              :         noexcept(is_nothrow_destructible<_Up>::value)
+     556              :         {
+     557              : #if __cplusplus <= 201703L
+     558              :           __a.destroy(__p);
+     559              : #else
+     560              :           std::destroy_at(__p);
+     561              : #endif
+     562    143934368 :         }
+     563              : 
+     564              :       /**
+     565              :        *  @brief  The maximum supported allocation size
+     566              :        *  @param  __a  An allocator.
+     567              :        *  @return @c __a.max_size()
+     568              :       */
+     569              :       [[__gnu__::__always_inline__]]
+     570              :       static _GLIBCXX20_CONSTEXPR size_type
+     571              :       max_size(const allocator_type& __a __attribute__((__unused__))) noexcept
+     572              :       {
+     573              : #if __cplusplus <= 201703L
+     574    216018506 :         return __a.max_size();
+     575              : #else
+     576              :         return size_t(-1) / sizeof(value_type);
+     577              : #endif
+     578              :       }
+     579              : 
+     580              :       /**
+     581              :        *  @brief  Obtain an allocator to use when copying a container.
+     582              :        *  @param  __rhs  An allocator.
+     583              :        *  @return @c __rhs
+     584              :       */
+     585              :       [[__gnu__::__always_inline__]]
+     586              :       static _GLIBCXX20_CONSTEXPR allocator_type
+     587              :       select_on_container_copy_construction(const allocator_type& __rhs)
+     588      1630802 :       { return __rhs; }
+     589              :     };
+     590              : 
+     591              :   /// Explicit specialization for std::allocator<void>.
+     592              :   template<>
+     593              :     struct allocator_traits<allocator<void>>
+     594              :     {
+     595              :       /// The allocator type
+     596              :       using allocator_type = allocator<void>;
+     597              : 
+     598              :       /// The allocated type
+     599              :       using value_type = void;
+     600              : 
+     601              :       /// The allocator's pointer type.
+     602              :       using pointer = void*;
+     603              : 
+     604              :       /// The allocator's const pointer type.
+     605              :       using const_pointer = const void*;
+     606              : 
+     607              :       /// The allocator's void pointer type.
+     608              :       using void_pointer = void*;
+     609              : 
+     610              :       /// The allocator's const void pointer type.
+     611              :       using const_void_pointer = const void*;
+     612              : 
+     613              :       /// The allocator's difference type
+     614              :       using difference_type = std::ptrdiff_t;
+     615              : 
+     616              :       /// The allocator's size type
+     617              :       using size_type = std::size_t;
+     618              : 
+     619              :       /// How the allocator is propagated on copy assignment
+     620              :       using propagate_on_container_copy_assignment = false_type;
+     621              : 
+     622              :       /// How the allocator is propagated on move assignment
+     623              :       using propagate_on_container_move_assignment = true_type;
+     624              : 
+     625              :       /// How the allocator is propagated on swap
+     626              :       using propagate_on_container_swap = false_type;
+     627              : 
+     628              :       /// Whether all instances of the allocator type compare equal.
+     629              :       using is_always_equal = true_type;
+     630              : 
+     631              :       template<typename _Up>
+     632              :         using rebind_alloc = allocator<_Up>;
+     633              : 
+     634              :       template<typename _Up>
+     635              :         using rebind_traits = allocator_traits<allocator<_Up>>;
+     636              : 
+     637              :       /// allocate is ill-formed for allocator<void>
+     638              :       static void*
+     639              :       allocate(allocator_type&, size_type, const void* = nullptr) = delete;
+     640              : 
+     641              :       /// deallocate is ill-formed for allocator<void>
+     642              :       static void
+     643              :       deallocate(allocator_type&, void*, size_type) = delete;
+     644              : 
+     645              :       /**
+     646              :        *  @brief  Construct an object of type `_Up`
+     647              :        *  @param  __a  An allocator.
+     648              :        *  @param  __p  Pointer to memory of suitable size and alignment for
+     649              :        *               an object of type `_Up`.
+     650              :        *  @param  __args Constructor arguments.
+     651              :        *
+     652              :        *  Calls `__a.construct(__p, std::forward<_Args>(__args)...)`
+     653              :        *  in C++11, C++14 and C++17. Changed in C++20 to call
+     654              :        *  `std::construct_at(__p, std::forward<_Args>(__args)...)` instead.
+     655              :       */
+     656              :       template<typename _Up, typename... _Args>
+     657              :         [[__gnu__::__always_inline__]]
+     658              :         static _GLIBCXX20_CONSTEXPR void
+     659              :         construct(allocator_type&, _Up* __p, _Args&&... __args)
+     660              :         noexcept(std::is_nothrow_constructible<_Up, _Args...>::value)
+     661           20 :         { std::_Construct(__p, std::forward<_Args>(__args)...); }
+     662              : 
+     663              :       /**
+     664              :        *  @brief  Destroy an object of type `_Up`
+     665              :        *  @param  __a  An allocator.
+     666              :        *  @param  __p  Pointer to the object to destroy
+     667              :        *
+     668              :        *  Invokes the destructor for `*__p`.
+     669              :       */
+     670              :       template<typename _Up>
+     671              :         [[__gnu__::__always_inline__]]
+     672              :         static _GLIBCXX20_CONSTEXPR void
+     673              :         destroy(allocator_type&, _Up* __p)
+     674              :         noexcept(is_nothrow_destructible<_Up>::value)
+     675           20 :         { std::_Destroy(__p); }
+     676              : 
+     677              :       /// max_size is ill-formed for allocator<void>
+     678              :       static size_type
+     679              :       max_size(const allocator_type&) = delete;
+     680              : 
+     681              :       /**
+     682              :        *  @brief  Obtain an allocator to use when copying a container.
+     683              :        *  @param  __rhs  An allocator.
+     684              :        *  @return `__rhs`
+     685              :       */
+     686              :       [[__gnu__::__always_inline__]]
+     687              :       static _GLIBCXX20_CONSTEXPR allocator_type
+     688              :       select_on_container_copy_construction(const allocator_type& __rhs)
+     689              :       { return __rhs; }
+     690              :     };
+     691              : #endif
+     692              : 
+     693              :   /// @cond undocumented
+     694              : #if __cplusplus < 201703L
+     695              :   template<typename _Alloc>
+     696              :     [[__gnu__::__always_inline__]]
+     697              :     inline void
+     698              :     __do_alloc_on_copy(_Alloc& __one, const _Alloc& __two, true_type)
+     699              :     { __one = __two; }
+     700              : 
+     701              :   template<typename _Alloc>
+     702              :     [[__gnu__::__always_inline__]]
+     703              :     inline void
+     704              :     __do_alloc_on_copy(_Alloc&, const _Alloc&, false_type)
+     705              :     { }
+     706              : #endif
+     707              : 
+     708              :   template<typename _Alloc>
+     709              :     [[__gnu__::__always_inline__]]
+     710              :     _GLIBCXX14_CONSTEXPR inline void
+     711              :     __alloc_on_copy(_Alloc& __one, const _Alloc& __two)
+     712              :     {
+     713              :       using __traits = allocator_traits<_Alloc>;
+     714              :       using __pocca =
+     715              :         typename __traits::propagate_on_container_copy_assignment::type;
+     716              : #if __cplusplus >= 201703L
+     717              :       if constexpr (__pocca::value)
+     718              :         __one = __two;
+     719              : #else
+     720              :       __do_alloc_on_copy(__one, __two, __pocca());
+     721              : #endif
+     722            0 :     }
+     723              : 
+     724              :   template<typename _Alloc>
+     725              :     [[__gnu__::__always_inline__]]
+     726              :     constexpr _Alloc
+     727              :     __alloc_on_copy(const _Alloc& __a)
+     728              :     {
+     729              :       typedef allocator_traits<_Alloc> __traits;
+     730              :       return __traits::select_on_container_copy_construction(__a);
+     731              :     }
+     732              : 
+     733              : #if __cplusplus < 201703L
+     734              :   template<typename _Alloc>
+     735              :     [[__gnu__::__always_inline__]]
+     736              :     inline void __do_alloc_on_move(_Alloc& __one, _Alloc& __two, true_type)
+     737              :     { __one = std::move(__two); }
+     738              : 
+     739              :   template<typename _Alloc>
+     740              :     [[__gnu__::__always_inline__]]
+     741              :     inline void __do_alloc_on_move(_Alloc&, _Alloc&, false_type)
+     742              :     { }
+     743              : #endif
+     744              : 
+     745              :   template<typename _Alloc>
+     746              :     [[__gnu__::__always_inline__]]
+     747              :     _GLIBCXX14_CONSTEXPR inline void
+     748              :     __alloc_on_move(_Alloc& __one, _Alloc& __two)
+     749              :     {
+     750              :       using __traits = allocator_traits<_Alloc>;
+     751              :       using __pocma
+     752              :         = typename __traits::propagate_on_container_move_assignment::type;
+     753              : #if __cplusplus >= 201703L
+     754              :       if constexpr (__pocma::value)
+     755         5792 :         __one = std::move(__two);
+     756              : #else
+     757              :       __do_alloc_on_move(__one, __two, __pocma());
+     758              : #endif
+     759         5792 :     }
+     760              : 
+     761              : #if __cplusplus < 201703L
+     762              :   template<typename _Alloc>
+     763              :     [[__gnu__::__always_inline__]]
+     764              :     inline void __do_alloc_on_swap(_Alloc& __one, _Alloc& __two, true_type)
+     765              :     {
+     766              :       using std::swap;
+     767              :       swap(__one, __two);
+     768              :     }
+     769              : 
+     770              :   template<typename _Alloc>
+     771              :     [[__gnu__::__always_inline__]]
+     772              :     inline void __do_alloc_on_swap(_Alloc&, _Alloc&, false_type)
+     773              :     { }
+     774              : #endif
+     775              : 
+     776              :   template<typename _Alloc>
+     777              :     [[__gnu__::__always_inline__]]
+     778              :     _GLIBCXX14_CONSTEXPR inline void
+     779              :     __alloc_on_swap(_Alloc& __one, _Alloc& __two)
+     780              :     {
+     781              :       using __traits = allocator_traits<_Alloc>;
+     782              :       using __pocs = typename __traits::propagate_on_container_swap::type;
+     783              : #if __cplusplus >= 201703L
+     784              :       if constexpr (__pocs::value)
+     785              :         {
+     786              :           using std::swap;
+     787              :           swap(__one, __two);
+     788              :         }
+     789              : #else
+     790              :       __do_alloc_on_swap(__one, __two, __pocs());
+     791              : #endif
+     792              :     }
+     793              : 
+     794              :   template<typename _Alloc, typename _Tp,
+     795              :            typename _ValueT = __remove_cvref_t<typename _Alloc::value_type>,
+     796              :            typename = void>
+     797              :     struct __is_alloc_insertable_impl
+     798              :     : false_type
+     799              :     { };
+     800              : 
+     801              :   template<typename _Alloc, typename _Tp, typename _ValueT>
+     802              :     struct __is_alloc_insertable_impl<_Alloc, _Tp, _ValueT,
+     803              :       __void_t<decltype(allocator_traits<_Alloc>::construct(
+     804              :                    std::declval<_Alloc&>(), std::declval<_ValueT*>(),
+     805              :                    std::declval<_Tp>()))>>
+     806              :     : true_type
+     807              :     { };
+     808              : 
+     809              :   // true if _Alloc::value_type is CopyInsertable into containers using _Alloc
+     810              :   // (might be wrong if _Alloc::construct exists but is not constrained,
+     811              :   // i.e. actually trying to use it would still be invalid. Use with caution.)
+     812              :   template<typename _Alloc>
+     813              :     struct __is_copy_insertable
+     814              :     : __is_alloc_insertable_impl<_Alloc,
+     815              :                                  typename _Alloc::value_type const&>::type
+     816              :     { };
+     817              : 
+     818              : #if _GLIBCXX_HOSTED
+     819              :   // std::allocator<_Tp> just requires CopyConstructible
+     820              :   template<typename _Tp>
+     821              :     struct __is_copy_insertable<allocator<_Tp>>
+     822              :     : is_copy_constructible<_Tp>
+     823              :     { };
+     824              : #endif
+     825              : 
+     826              :   // true if _Alloc::value_type is MoveInsertable into containers using _Alloc
+     827              :   // (might be wrong if _Alloc::construct exists but is not constrained,
+     828              :   // i.e. actually trying to use it would still be invalid. Use with caution.)
+     829              :   template<typename _Alloc>
+     830              :     struct __is_move_insertable
+     831              :     : __is_alloc_insertable_impl<_Alloc, typename _Alloc::value_type>::type
+     832              :     { };
+     833              : 
+     834              : #if _GLIBCXX_HOSTED
+     835              :   // std::allocator<_Tp> just requires MoveConstructible
+     836              :   template<typename _Tp>
+     837              :     struct __is_move_insertable<allocator<_Tp>>
+     838              :     : is_move_constructible<_Tp>
+     839              :     { };
+     840              : #endif
+     841              : 
+     842              :   // Trait to detect Allocator-like types.
+     843              :   template<typename _Alloc, typename = void>
+     844              :     struct __is_allocator : false_type { };
+     845              : 
+     846              :   template<typename _Alloc>
+     847              :     struct __is_allocator<_Alloc,
+     848              :       __void_t<typename _Alloc::value_type,
+     849              :                decltype(std::declval<_Alloc&>().allocate(size_t{}))>>
+     850              :     : true_type { };
+     851              : 
+     852              :   template<typename _Alloc>
+     853              :     using _RequireAllocator
+     854              :       = typename enable_if<__is_allocator<_Alloc>::value, _Alloc>::type;
+     855              : 
+     856              :   template<typename _Alloc>
+     857              :     using _RequireNotAllocator
+     858              :       = typename enable_if<!__is_allocator<_Alloc>::value, _Alloc>::type;
+     859              : 
+     860              : #if __cpp_concepts >= 201907L
+     861              :   template<typename _Alloc>
+     862              :     concept __allocator_like = requires (_Alloc& __a) {
+     863              :       typename _Alloc::value_type;
+     864              :       __a.deallocate(__a.allocate(1u), 1u);
+     865              :     };
+     866              : #endif
+     867              :   /// @endcond
+     868              : #endif // C++11
+     869              : 
+     870              :   /// @cond undocumented
+     871              : 
+     872              :   // To implement Option 3 of DR 431.
+     873              :   template<typename _Alloc, bool = __is_empty(_Alloc)>
+     874              :     struct __alloc_swap
+     875              :     { static void _S_do_it(_Alloc&, _Alloc&) _GLIBCXX_NOEXCEPT { } };
+     876              : 
+     877              :   template<typename _Alloc>
+     878              :     struct __alloc_swap<_Alloc, false>
+     879              :     {
+     880              :       static void
+     881              :       _S_do_it(_Alloc& __one, _Alloc& __two) _GLIBCXX_NOEXCEPT
+     882              :       {
+     883              :         // Precondition: swappable allocators.
+     884              :         if (__one != __two)
+     885              :           swap(__one, __two);
+     886              :       }
+     887              :     };
+     888              : 
+     889              : #if __cplusplus >= 201103L
+     890              :   template<typename _Tp, bool
+     891              :     = __or_<is_copy_constructible<typename _Tp::value_type>,
+     892              :             is_nothrow_move_constructible<typename _Tp::value_type>>::value>
+     893              :     struct __shrink_to_fit_aux
+     894              :     { static bool _S_do_it(_Tp&) noexcept { return false; } };
+     895              : 
+     896              :   template<typename _Tp>
+     897              :     struct __shrink_to_fit_aux<_Tp, true>
+     898              :     {
+     899              :       _GLIBCXX20_CONSTEXPR
+     900              :       static bool
+     901              :       _S_do_it(_Tp& __c) noexcept
+     902              :       {
+     903              : #if __cpp_exceptions
+     904              :         try
+     905              :           {
+     906              :             _Tp(__make_move_if_noexcept_iterator(__c.begin()),
+     907              :                 __make_move_if_noexcept_iterator(__c.end()),
+     908              :                 __c.get_allocator()).swap(__c);
+     909              :             return true;
+     910              :           }
+     911              :         catch(...)
+     912              :           { return false; }
+     913              : #else
+     914              :         return false;
+     915              : #endif
+     916              :       }
+     917              :     };
+     918              : #endif
+     919              : 
+     920              :   /**
+     921              :    * Destroy a range of objects using the supplied allocator.  For
+     922              :    * non-default allocators we do not optimize away invocation of
+     923              :    * destroy() even if _Tp has a trivial destructor.
+     924              :    */
+     925              : 
+     926              :   template<typename _ForwardIterator, typename _Allocator>
+     927              :     _GLIBCXX20_CONSTEXPR
+     928              :     void
+     929              :     _Destroy(_ForwardIterator __first, _ForwardIterator __last,
+     930              :              _Allocator& __alloc)
+     931              :     {
+     932              :       for (; __first != __last; ++__first)
+     933              : #if __cplusplus < 201103L
+     934              :         __alloc.destroy(std::__addressof(*__first));
+     935              : #else
+     936              :         allocator_traits<_Allocator>::destroy(__alloc,
+     937              :                                               std::__addressof(*__first));
+     938              : #endif
+     939              :     }
+     940              : 
+     941              : #if _GLIBCXX_HOSTED
+     942              :   template<typename _ForwardIterator, typename _Tp>
+     943              :     __attribute__((__always_inline__)) _GLIBCXX20_CONSTEXPR
+     944              :     inline void
+     945              :     _Destroy(_ForwardIterator __first, _ForwardIterator __last,
+     946              :              allocator<_Tp>&)
+     947              :     {
+     948    227834360 :       std::_Destroy(__first, __last);
+     949    227834360 :     }
+     950              : #endif
+     951              :   /// @endcond
+     952              : 
+     953              : _GLIBCXX_END_NAMESPACE_VERSION
+     954              : } // namespace std
+     955              : #endif // _ALLOC_TRAITS_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/allocated_ptr.h.func-c.html b/html/usr/include/c++/13/bits/allocated_ptr.h.func-c.html new file mode 100644 index 0000000..cc9b7a5 --- /dev/null +++ b/html/usr/include/c++/13/bits/allocated_ptr.h.func-c.html @@ -0,0 +1,201 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/allocated_ptr.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - allocated_ptr.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1313
Test Date:2024-04-30 13:17:26Functions:61.5 %138
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEE3getEv20
_ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEE3getEv0
_ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEE3getEv20
_ZSt18__allocate_guardedISaISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEESt15__allocated_ptrIT_ERSD_20
_ZSt18__allocate_guardedISaISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEESt15__allocated_ptrIT_ERSD_0
_ZSt18__allocate_guardedISaISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEESt15__allocated_ptrIT_ERSI_20
_ZNSt15__allocated_ptrISaISt10_List_nodeIiEEEaSEDn396
_ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEEaSEDn0
_ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEEaSEDn20
_ZNSt15__allocated_ptrISaISt10_List_nodeIiEEEaSEDn376
_ZNSt15__allocated_ptrISaISt10_List_nodeIiEEEC2ERS2_PS1_416
_ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEEC2ERSB_PSA_0
_ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEEC2ERSG_PSF_40
_ZNSt15__allocated_ptrISaISt10_List_nodeIiEEEC2ERS2_PS1_376
_ZNSt15__allocated_ptrISaISt10_List_nodeIiEEED2Ev416
_ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEED2Ev0
_ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEED2Ev40
_ZNSt15__allocated_ptrISaISt10_List_nodeIiEEED2Ev376
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/allocated_ptr.h.func.html b/html/usr/include/c++/13/bits/allocated_ptr.h.func.html new file mode 100644 index 0000000..30e7fc8 --- /dev/null +++ b/html/usr/include/c++/13/bits/allocated_ptr.h.func.html @@ -0,0 +1,201 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/allocated_ptr.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - allocated_ptr.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1313
Test Date:2024-04-30 13:17:26Functions:61.5 %138
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt15__allocated_ptrISaISt10_List_nodeIiEEEC2ERS2_PS1_416
_ZNSt15__allocated_ptrISaISt10_List_nodeIiEEEC2ERS2_PS1_376
_ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEEC2ERSG_PSF_40
_ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEEC2ERSB_PSA_0
_ZNSt15__allocated_ptrISaISt10_List_nodeIiEEED2Ev416
_ZNSt15__allocated_ptrISaISt10_List_nodeIiEEED2Ev376
_ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEED2Ev40
_ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEED2Ev0
_ZNSt15__allocated_ptrISaISt10_List_nodeIiEEEaSEDn396
_ZNSt15__allocated_ptrISaISt10_List_nodeIiEEEaSEDn376
_ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEEaSEDn20
_ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEEaSEDn0
_ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEE3getEv20
_ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEE3getEv20
_ZNSt15__allocated_ptrISaISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEE3getEv0
_ZSt18__allocate_guardedISaISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEESt15__allocated_ptrIT_ERSD_20
_ZSt18__allocate_guardedISaISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEESt15__allocated_ptrIT_ERSI_20
_ZSt18__allocate_guardedISaISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEESt15__allocated_ptrIT_ERSD_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/allocated_ptr.h.gcov.html b/html/usr/include/c++/13/bits/allocated_ptr.h.gcov.html new file mode 100644 index 0000000..82a41c1 --- /dev/null +++ b/html/usr/include/c++/13/bits/allocated_ptr.h.gcov.html @@ -0,0 +1,182 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/allocated_ptr.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - allocated_ptr.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1313
Test Date:2024-04-30 13:17:26Functions:61.5 %138
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Guarded Allocation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2014-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/allocated_ptr.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{memory}
+      28              :  */
+      29              : 
+      30              : #ifndef _ALLOCATED_PTR_H
+      31              : #define _ALLOCATED_PTR_H 1
+      32              : 
+      33              : #if __cplusplus < 201103L
+      34              : # include <bits/c++0xwarning.h>
+      35              : #else
+      36              : # include <type_traits>
+      37              : # include <bits/ptr_traits.h>
+      38              : # include <bits/alloc_traits.h>
+      39              : 
+      40              : namespace std _GLIBCXX_VISIBILITY(default)
+      41              : {
+      42              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      43              : /// @cond undocumented
+      44              : 
+      45              :   /// Non-standard RAII type for managing pointers obtained from allocators.
+      46              :   template<typename _Alloc>
+      47              :     struct __allocated_ptr
+      48              :     {
+      49              :       using pointer = typename allocator_traits<_Alloc>::pointer;
+      50              :       using value_type = typename allocator_traits<_Alloc>::value_type;
+      51              : 
+      52              :       /// Take ownership of __ptr
+      53          416 :       __allocated_ptr(_Alloc& __a, pointer __ptr) noexcept
+      54          416 :       : _M_alloc(std::__addressof(__a)), _M_ptr(__ptr)
+      55          416 :       { }
+      56              : 
+      57              :       /// Convert __ptr to allocator's pointer type and take ownership of it
+      58              :       template<typename _Ptr,
+      59              :                typename _Req = _Require<is_same<_Ptr, value_type*>>>
+      60              :       __allocated_ptr(_Alloc& __a, _Ptr __ptr)
+      61              :       : _M_alloc(std::__addressof(__a)),
+      62              :         _M_ptr(pointer_traits<pointer>::pointer_to(*__ptr))
+      63              :       { }
+      64              : 
+      65              :       /// Transfer ownership of the owned pointer
+      66              :       __allocated_ptr(__allocated_ptr&& __gd) noexcept
+      67              :       : _M_alloc(__gd._M_alloc), _M_ptr(__gd._M_ptr)
+      68              :       { __gd._M_ptr = nullptr; }
+      69              : 
+      70              :       /// Deallocate the owned pointer
+      71          416 :       ~__allocated_ptr()
+      72              :       {
+      73          416 :         if (_M_ptr != nullptr)
+      74           20 :           std::allocator_traits<_Alloc>::deallocate(*_M_alloc, _M_ptr, 1);
+      75          416 :       }
+      76              : 
+      77              :       /// Release ownership of the owned pointer
+      78              :       __allocated_ptr&
+      79          396 :       operator=(std::nullptr_t) noexcept
+      80              :       {
+      81          396 :         _M_ptr = nullptr;
+      82          396 :         return *this;
+      83              :       }
+      84              : 
+      85              :       /// Get the address that the owned pointer refers to.
+      86           20 :       value_type* get() { return std::__to_address(_M_ptr); }
+      87              : 
+      88              :     private:
+      89              :       _Alloc* _M_alloc;
+      90              :       pointer _M_ptr;
+      91              :     };
+      92              : 
+      93              :   /// Allocate space for a single object using __a
+      94              :   template<typename _Alloc>
+      95              :     __allocated_ptr<_Alloc>
+      96           20 :     __allocate_guarded(_Alloc& __a)
+      97              :     {
+      98           20 :       return { __a, std::allocator_traits<_Alloc>::allocate(__a, 1) };
+      99              :     }
+     100              : 
+     101              : /// @endcond
+     102              : _GLIBCXX_END_NAMESPACE_VERSION
+     103              : } // namespace std
+     104              : 
+     105              : #endif
+     106              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/allocator.h.func-c.html b/html/usr/include/c++/13/bits/allocator.h.func-c.html new file mode 100644 index 0000000..8db1ffc --- /dev/null +++ b/html/usr/include/c++/13/bits/allocator.h.func-c.html @@ -0,0 +1,75 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/allocator.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - allocator.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:80.0 %54
Test Date:2024-04-30 13:17:26Functions:-00
+
+ +
+ + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/allocator.h.func.html b/html/usr/include/c++/13/bits/allocator.h.func.html new file mode 100644 index 0000000..c20fd51 --- /dev/null +++ b/html/usr/include/c++/13/bits/allocator.h.func.html @@ -0,0 +1,75 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/allocator.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - allocator.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:80.0 %54
Test Date:2024-04-30 13:17:26Functions:-00
+
+ +
+ + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/allocator.h.gcov.html b/html/usr/include/c++/13/bits/allocator.h.gcov.html new file mode 100644 index 0000000..073cb6f --- /dev/null +++ b/html/usr/include/c++/13/bits/allocator.h.gcov.html @@ -0,0 +1,370 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/allocator.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - allocator.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:80.0 %54
Test Date:2024-04-30 13:17:26Functions:-00
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Allocators -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  * Copyright (c) 1996-1997
+      27              :  * Silicon Graphics Computer Systems, Inc.
+      28              :  *
+      29              :  * Permission to use, copy, modify, distribute and sell this software
+      30              :  * and its documentation for any purpose is hereby granted without fee,
+      31              :  * provided that the above copyright notice appear in all copies and
+      32              :  * that both that copyright notice and this permission notice appear
+      33              :  * in supporting documentation.  Silicon Graphics makes no
+      34              :  * representations about the suitability of this software for any
+      35              :  * purpose.  It is provided "as is" without express or implied warranty.
+      36              :  */
+      37              : 
+      38              : /** @file bits/allocator.h
+      39              :  *  This is an internal header file, included by other library headers.
+      40              :  *  Do not attempt to use it directly. @headername{memory}
+      41              :  */
+      42              : 
+      43              : #ifndef _ALLOCATOR_H
+      44              : #define _ALLOCATOR_H 1
+      45              : 
+      46              : #include <bits/c++allocator.h> // Define the base class to std::allocator.
+      47              : #include <bits/memoryfwd.h>
+      48              : #if __cplusplus >= 201103L
+      49              : #include <type_traits>
+      50              : #endif
+      51              : 
+      52              : #define __cpp_lib_incomplete_container_elements 201505L
+      53              : 
+      54              : namespace std _GLIBCXX_VISIBILITY(default)
+      55              : {
+      56              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      57              : 
+      58              :   /**
+      59              :    *  @addtogroup allocators
+      60              :    *  @{
+      61              :    */
+      62              : 
+      63              :   // Since C++20 the primary template should be used for allocator<void>,
+      64              :   // but then it would have a non-trivial default ctor and dtor for C++20,
+      65              :   // but trivial for C++98-17, which would be an ABI incompatibility between
+      66              :   // different standard dialects. So C++20 still uses the allocator<void>
+      67              :   // explicit specialization, with the historical ABI properties, but with
+      68              :   // the same members that are present in the primary template.
+      69              : 
+      70              :   /** std::allocator<void> specialization.
+      71              :    *
+      72              :    * @headerfile memory
+      73              :    */
+      74              :   template<>
+      75              :     class allocator<void>
+      76              :     {
+      77              :     public:
+      78              :       typedef void        value_type;
+      79              :       typedef size_t      size_type;
+      80              :       typedef ptrdiff_t   difference_type;
+      81              : 
+      82              : #if __cplusplus <= 201703L
+      83              :       // These were removed for C++20, allocator_traits does the right thing.
+      84              :       typedef void*       pointer;
+      85              :       typedef const void* const_pointer;
+      86              : 
+      87              :       template<typename _Tp1>
+      88              :         struct rebind
+      89              :         { typedef allocator<_Tp1> other; };
+      90              : #endif
+      91              : 
+      92              : #if __cplusplus >= 201103L
+      93              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+      94              :       // 2103. std::allocator propagate_on_container_move_assignment
+      95              :       using propagate_on_container_move_assignment = true_type;
+      96              : 
+      97              :       using is_always_equal
+      98              :         _GLIBCXX20_DEPRECATED_SUGGEST("std::allocator_traits::is_always_equal")
+      99              :         = true_type;
+     100              : 
+     101              : #if __cplusplus >= 202002L
+     102              :       // As noted above, these members are present for C++20 to provide the
+     103              :       // same API as the primary template, but still trivial as in pre-C++20.
+     104              :       allocator() = default;
+     105              :       ~allocator() = default;
+     106              : 
+     107              :       template<typename _Up>
+     108              :         __attribute__((__always_inline__))
+     109              :         constexpr
+     110              :         allocator(const allocator<_Up>&) noexcept { }
+     111              : 
+     112              :       // No allocate member because it's ill-formed by LWG 3307.
+     113              :       // No deallocate member because it would be undefined to call it
+     114              :       // with any pointer which wasn't obtained from allocate.
+     115              : #endif // C++20
+     116              : #endif // C++11
+     117              :     };
+     118              : 
+     119              :   /**
+     120              :    * @brief  The @a standard allocator, as per C++03 [20.4.1].
+     121              :    *
+     122              :    *  See https://gcc.gnu.org/onlinedocs/libstdc++/manual/memory.html#std.util.memory.allocator
+     123              :    *  for further details.
+     124              :    *
+     125              :    *  @tparam  _Tp  Type of allocated object.
+     126              :    *
+     127              :    *  @headerfile memory
+     128              :    */
+     129              :   template<typename _Tp>
+     130              :     class allocator : public __allocator_base<_Tp>
+     131              :     {
+     132              :     public:
+     133              :       typedef _Tp        value_type;
+     134              :       typedef size_t     size_type;
+     135              :       typedef ptrdiff_t  difference_type;
+     136              : 
+     137              : #if __cplusplus <= 201703L
+     138              :       // These were removed for C++20.
+     139              :       typedef _Tp*       pointer;
+     140              :       typedef const _Tp* const_pointer;
+     141              :       typedef _Tp&       reference;
+     142              :       typedef const _Tp& const_reference;
+     143              : 
+     144              :       template<typename _Tp1>
+     145              :         struct rebind
+     146              :         { typedef allocator<_Tp1> other; };
+     147              : #endif
+     148              : 
+     149              : #if __cplusplus >= 201103L
+     150              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     151              :       // 2103. std::allocator propagate_on_container_move_assignment
+     152              :       using propagate_on_container_move_assignment = true_type;
+     153              : 
+     154              :       using is_always_equal
+     155              :         _GLIBCXX20_DEPRECATED_SUGGEST("std::allocator_traits::is_always_equal")
+     156              :         = true_type;
+     157              : #endif
+     158              : 
+     159              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     160              :       // 3035. std::allocator's constructors should be constexpr
+     161              :       __attribute__((__always_inline__))
+     162              :       _GLIBCXX20_CONSTEXPR
+     163     39249340 :       allocator() _GLIBCXX_NOTHROW { }
+     164              : 
+     165              :       __attribute__((__always_inline__))
+     166              :       _GLIBCXX20_CONSTEXPR
+     167              :       allocator(const allocator& __a) _GLIBCXX_NOTHROW
+     168     46076150 :       : __allocator_base<_Tp>(__a) { }
+     169              : 
+     170              : #if __cplusplus >= 201103L
+     171              :       // Avoid implicit deprecation.
+     172              :       allocator& operator=(const allocator&) = default;
+     173              : #endif
+     174              : 
+     175              :       template<typename _Tp1>
+     176              :         __attribute__((__always_inline__))
+     177              :         _GLIBCXX20_CONSTEXPR
+     178       234446 :         allocator(const allocator<_Tp1>&) _GLIBCXX_NOTHROW { }
+     179              : 
+     180              :       __attribute__((__always_inline__))
+     181              : #if __cpp_constexpr_dynamic_alloc
+     182              :       constexpr
+     183              : #endif
+     184      6107564 :       ~allocator() _GLIBCXX_NOTHROW { }
+     185              : 
+     186              : #if __cplusplus > 201703L
+     187              :       [[nodiscard,__gnu__::__always_inline__]]
+     188              :       constexpr _Tp*
+     189              :       allocate(size_t __n)
+     190              :       {
+     191              :         if (std::__is_constant_evaluated())
+     192              :           {
+     193              :             if (__builtin_mul_overflow(__n, sizeof(_Tp), &__n))
+     194              :               std::__throw_bad_array_new_length();
+     195              :             return static_cast<_Tp*>(::operator new(__n));
+     196              :           }
+     197              : 
+     198              :         return __allocator_base<_Tp>::allocate(__n, 0);
+     199              :       }
+     200              : 
+     201              :       [[__gnu__::__always_inline__]]
+     202              :       constexpr void
+     203              :       deallocate(_Tp* __p, size_t __n)
+     204              :       {
+     205              :         if (std::__is_constant_evaluated())
+     206              :           {
+     207              :             ::operator delete(__p);
+     208              :             return;
+     209              :           }
+     210              :         __allocator_base<_Tp>::deallocate(__p, __n);
+     211              :       }
+     212              : #endif // C++20
+     213              : 
+     214              :       friend __attribute__((__always_inline__)) _GLIBCXX20_CONSTEXPR
+     215              :       bool
+     216              :       operator==(const allocator&, const allocator&) _GLIBCXX_NOTHROW
+     217              :       { return true; }
+     218              : 
+     219              : #if __cpp_impl_three_way_comparison < 201907L
+     220              :       friend __attribute__((__always_inline__)) _GLIBCXX20_CONSTEXPR
+     221              :       bool
+     222              :       operator!=(const allocator&, const allocator&) _GLIBCXX_NOTHROW
+     223            0 :       { return false; }
+     224              : #endif
+     225              : 
+     226              :       // Inherit everything else.
+     227              :     };
+     228              : 
+     229              :   /** Equality comparison for std::allocator objects
+     230              :    *
+     231              :    * @return true, for all std::allocator objects.
+     232              :    * @relates std::allocator
+     233              :    */
+     234              :   template<typename _T1, typename _T2>
+     235              :     __attribute__((__always_inline__))
+     236              :     inline _GLIBCXX20_CONSTEXPR bool
+     237              :     operator==(const allocator<_T1>&, const allocator<_T2>&)
+     238              :     _GLIBCXX_NOTHROW
+     239              :     { return true; }
+     240              : 
+     241              : #if __cpp_impl_three_way_comparison < 201907L
+     242              :   template<typename _T1, typename _T2>
+     243              :     __attribute__((__always_inline__))
+     244              :     inline _GLIBCXX20_CONSTEXPR bool
+     245              :     operator!=(const allocator<_T1>&, const allocator<_T2>&)
+     246              :     _GLIBCXX_NOTHROW
+     247              :     { return false; }
+     248              : #endif
+     249              : 
+     250              :   /// @cond undocumented
+     251              : 
+     252              :   // Invalid allocator<cv T> partial specializations.
+     253              :   // allocator_traits::rebind_alloc can be used to form a valid allocator type.
+     254              :   template<typename _Tp>
+     255              :     class allocator<const _Tp>
+     256              :     {
+     257              :     public:
+     258              :       typedef _Tp value_type;
+     259              :       template<typename _Up> allocator(const allocator<_Up>&) { }
+     260              :     };
+     261              : 
+     262              :   template<typename _Tp>
+     263              :     class allocator<volatile _Tp>
+     264              :     {
+     265              :     public:
+     266              :       typedef _Tp value_type;
+     267              :       template<typename _Up> allocator(const allocator<_Up>&) { }
+     268              :     };
+     269              : 
+     270              :   template<typename _Tp>
+     271              :     class allocator<const volatile _Tp>
+     272              :     {
+     273              :     public:
+     274              :       typedef _Tp value_type;
+     275              :       template<typename _Up> allocator(const allocator<_Up>&) { }
+     276              :     };
+     277              :   /// @endcond
+     278              : 
+     279              :   /// @} group allocator
+     280              : 
+     281              :   // Inhibit implicit instantiations for required instantiations,
+     282              :   // which are defined via explicit instantiations elsewhere.
+     283              : #if _GLIBCXX_EXTERN_TEMPLATE
+     284              :   extern template class allocator<char>;
+     285              :   extern template class allocator<wchar_t>;
+     286              : #endif
+     287              : 
+     288              :   // Undefine.
+     289              : #undef __allocator_base
+     290              : 
+     291              : _GLIBCXX_END_NAMESPACE_VERSION
+     292              : } // namespace std
+     293              : 
+     294              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/atomic_base.h.func-c.html b/html/usr/include/c++/13/bits/atomic_base.h.func-c.html new file mode 100644 index 0000000..1ea67ed --- /dev/null +++ b/html/usr/include/c++/13/bits/atomic_base.h.func-c.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/atomic_base.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - atomic_base.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:81.0 %2117
Test Date:2024-04-30 13:17:26Functions:71.4 %75
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt13__atomic_baseIjEmmEv0
_ZNSt13__atomic_baseIjEppEv0
_ZNSt13__atomic_baseIjEC2Ej1136304
_ZNSt13__atomic_baseIjEC2Ej378768
_ZNSt13__atomic_baseImEC2Em757536
_ZNKSt13__atomic_baseIjEcvjEv74610166
_ZNKSt13__atomic_baseIjEcvjEv1782
_ZNKSt13__atomic_baseImEcvmEv74608384
_ZStanSt12memory_orderSt23__memory_order_modifier1612524956
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/atomic_base.h.func.html b/html/usr/include/c++/13/bits/atomic_base.h.func.html new file mode 100644 index 0000000..764bbd8 --- /dev/null +++ b/html/usr/include/c++/13/bits/atomic_base.h.func.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/atomic_base.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - atomic_base.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:81.0 %2117
Test Date:2024-04-30 13:17:26Functions:71.4 %75
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt13__atomic_baseIjEcvjEv74610166
_ZNKSt13__atomic_baseIjEcvjEv1782
_ZNKSt13__atomic_baseImEcvmEv74608384
_ZNSt13__atomic_baseIjEC2Ej1136304
_ZNSt13__atomic_baseIjEC2Ej378768
_ZNSt13__atomic_baseImEC2Em757536
_ZNSt13__atomic_baseIjEmmEv0
_ZNSt13__atomic_baseIjEppEv0
_ZStanSt12memory_orderSt23__memory_order_modifier1612524956
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/atomic_base.h.gcov.html b/html/usr/include/c++/13/bits/atomic_base.h.gcov.html new file mode 100644 index 0000000..480eb7d --- /dev/null +++ b/html/usr/include/c++/13/bits/atomic_base.h.gcov.html @@ -0,0 +1,2099 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/atomic_base.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - atomic_base.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:81.0 %2117
Test Date:2024-04-30 13:17:26Functions:71.4 %75
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // -*- C++ -*- header.
+       2              : 
+       3              : // Copyright (C) 2008-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/atomic_base.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{atomic}
+      28              :  */
+      29              : 
+      30              : #ifndef _GLIBCXX_ATOMIC_BASE_H
+      31              : #define _GLIBCXX_ATOMIC_BASE_H 1
+      32              : 
+      33              : #pragma GCC system_header
+      34              : 
+      35              : #include <bits/c++config.h>
+      36              : #include <new> // For placement new
+      37              : #include <stdint.h>
+      38              : #include <bits/atomic_lockfree_defines.h>
+      39              : #include <bits/move.h>
+      40              : 
+      41              : #if __cplusplus > 201703L && _GLIBCXX_HOSTED
+      42              : #include <bits/atomic_wait.h>
+      43              : #endif
+      44              : 
+      45              : #ifndef _GLIBCXX_ALWAYS_INLINE
+      46              : #define _GLIBCXX_ALWAYS_INLINE inline __attribute__((__always_inline__))
+      47              : #endif
+      48              : 
+      49              : namespace std _GLIBCXX_VISIBILITY(default)
+      50              : {
+      51              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      52              : 
+      53              :   /**
+      54              :    * @defgroup atomics Atomics
+      55              :    *
+      56              :    * Components for performing atomic operations.
+      57              :    * @{
+      58              :    */
+      59              : 
+      60              :   /// Enumeration for memory_order
+      61              : #if __cplusplus > 201703L
+      62              :   enum class memory_order : int
+      63              :     {
+      64              :       relaxed,
+      65              :       consume,
+      66              :       acquire,
+      67              :       release,
+      68              :       acq_rel,
+      69              :       seq_cst
+      70              :     };
+      71              : 
+      72              :   inline constexpr memory_order memory_order_relaxed = memory_order::relaxed;
+      73              :   inline constexpr memory_order memory_order_consume = memory_order::consume;
+      74              :   inline constexpr memory_order memory_order_acquire = memory_order::acquire;
+      75              :   inline constexpr memory_order memory_order_release = memory_order::release;
+      76              :   inline constexpr memory_order memory_order_acq_rel = memory_order::acq_rel;
+      77              :   inline constexpr memory_order memory_order_seq_cst = memory_order::seq_cst;
+      78              : #else
+      79              :   typedef enum memory_order
+      80              :     {
+      81              :       memory_order_relaxed,
+      82              :       memory_order_consume,
+      83              :       memory_order_acquire,
+      84              :       memory_order_release,
+      85              :       memory_order_acq_rel,
+      86              :       memory_order_seq_cst
+      87              :     } memory_order;
+      88              : #endif
+      89              : 
+      90              :   /// @cond undocumented
+      91              :   enum __memory_order_modifier
+      92              :     {
+      93              :       __memory_order_mask          = 0x0ffff,
+      94              :       __memory_order_modifier_mask = 0xffff0000,
+      95              :       __memory_order_hle_acquire   = 0x10000,
+      96              :       __memory_order_hle_release   = 0x20000
+      97              :     };
+      98              :   /// @endcond
+      99              : 
+     100              :   constexpr memory_order
+     101              :   operator|(memory_order __m, __memory_order_modifier __mod)
+     102              :   {
+     103              :     return memory_order(int(__m) | int(__mod));
+     104              :   }
+     105              : 
+     106              :   constexpr memory_order
+     107   1612524956 :   operator&(memory_order __m, __memory_order_modifier __mod)
+     108              :   {
+     109   1612524956 :     return memory_order(int(__m) & int(__mod));
+     110              :   }
+     111              : 
+     112              :   /// @cond undocumented
+     113              : 
+     114              :   // Drop release ordering as per [atomics.types.operations.req]/21
+     115              :   constexpr memory_order
+     116              :   __cmpexch_failure_order2(memory_order __m) noexcept
+     117              :   {
+     118              :     return __m == memory_order_acq_rel ? memory_order_acquire
+     119              :       : __m == memory_order_release ? memory_order_relaxed : __m;
+     120              :   }
+     121              : 
+     122              :   constexpr memory_order
+     123              :   __cmpexch_failure_order(memory_order __m) noexcept
+     124              :   {
+     125              :     return memory_order(__cmpexch_failure_order2(__m & __memory_order_mask)
+     126              :       | __memory_order_modifier(__m & __memory_order_modifier_mask));
+     127              :   }
+     128              : 
+     129              :   constexpr bool
+     130              :   __is_valid_cmpexch_failure_order(memory_order __m) noexcept
+     131              :   {
+     132              :     return (__m & __memory_order_mask) != memory_order_release
+     133              :         && (__m & __memory_order_mask) != memory_order_acq_rel;
+     134              :   }
+     135              : 
+     136              :   // Base types for atomics.
+     137              :   template<typename _IntTp>
+     138              :     struct __atomic_base;
+     139              : 
+     140              :   /// @endcond
+     141              : 
+     142              :   _GLIBCXX_ALWAYS_INLINE void
+     143              :   atomic_thread_fence(memory_order __m) noexcept
+     144              :   { __atomic_thread_fence(int(__m)); }
+     145              : 
+     146              :   _GLIBCXX_ALWAYS_INLINE void
+     147              :   atomic_signal_fence(memory_order __m) noexcept
+     148              :   { __atomic_signal_fence(int(__m)); }
+     149              : 
+     150              :   /// kill_dependency
+     151              :   template<typename _Tp>
+     152              :     inline _Tp
+     153              :     kill_dependency(_Tp __y) noexcept
+     154              :     {
+     155              :       _Tp __ret(__y);
+     156              :       return __ret;
+     157              :     }
+     158              : 
+     159              : #if __cplusplus >= 202002L
+     160              : # define __cpp_lib_atomic_value_initialization 201911L
+     161              : #endif
+     162              : 
+     163              : /// @cond undocumented
+     164              : #if __cpp_lib_atomic_value_initialization
+     165              : # define _GLIBCXX20_INIT(I) = I
+     166              : #else
+     167              : # define _GLIBCXX20_INIT(I)
+     168              : #endif
+     169              : /// @endcond
+     170              : 
+     171              : #define ATOMIC_VAR_INIT(_VI) { _VI }
+     172              : 
+     173              :   template<typename _Tp>
+     174              :     struct atomic;
+     175              : 
+     176              :   template<typename _Tp>
+     177              :     struct atomic<_Tp*>;
+     178              : 
+     179              :     /* The target's "set" value for test-and-set may not be exactly 1.  */
+     180              : #if __GCC_ATOMIC_TEST_AND_SET_TRUEVAL == 1
+     181              :     typedef bool __atomic_flag_data_type;
+     182              : #else
+     183              :     typedef unsigned char __atomic_flag_data_type;
+     184              : #endif
+     185              : 
+     186              :   /// @cond undocumented
+     187              : 
+     188              :   /*
+     189              :    *  Base type for atomic_flag.
+     190              :    *
+     191              :    *  Base type is POD with data, allowing atomic_flag to derive from
+     192              :    *  it and meet the standard layout type requirement. In addition to
+     193              :    *  compatibility with a C interface, this allows different
+     194              :    *  implementations of atomic_flag to use the same atomic operation
+     195              :    *  functions, via a standard conversion to the __atomic_flag_base
+     196              :    *  argument.
+     197              :   */
+     198              :   _GLIBCXX_BEGIN_EXTERN_C
+     199              : 
+     200              :   struct __atomic_flag_base
+     201              :   {
+     202              :     __atomic_flag_data_type _M_i _GLIBCXX20_INIT({});
+     203              :   };
+     204              : 
+     205              :   _GLIBCXX_END_EXTERN_C
+     206              : 
+     207              :   /// @endcond
+     208              : 
+     209              : #define ATOMIC_FLAG_INIT { 0 }
+     210              : 
+     211              :   /// atomic_flag
+     212              :   struct atomic_flag : public __atomic_flag_base
+     213              :   {
+     214              :     atomic_flag() noexcept = default;
+     215              :     ~atomic_flag() noexcept = default;
+     216              :     atomic_flag(const atomic_flag&) = delete;
+     217              :     atomic_flag& operator=(const atomic_flag&) = delete;
+     218              :     atomic_flag& operator=(const atomic_flag&) volatile = delete;
+     219              : 
+     220              :     // Conversion to ATOMIC_FLAG_INIT.
+     221              :     constexpr atomic_flag(bool __i) noexcept
+     222              :       : __atomic_flag_base{ _S_init(__i) }
+     223              :     { }
+     224              : 
+     225              :     _GLIBCXX_ALWAYS_INLINE bool
+     226              :     test_and_set(memory_order __m = memory_order_seq_cst) noexcept
+     227              :     {
+     228              :       return __atomic_test_and_set (&_M_i, int(__m));
+     229              :     }
+     230              : 
+     231              :     _GLIBCXX_ALWAYS_INLINE bool
+     232              :     test_and_set(memory_order __m = memory_order_seq_cst) volatile noexcept
+     233              :     {
+     234              :       return __atomic_test_and_set (&_M_i, int(__m));
+     235              :     }
+     236              : 
+     237              : #if __cplusplus > 201703L
+     238              : #define __cpp_lib_atomic_flag_test 201907L
+     239              : 
+     240              :     _GLIBCXX_ALWAYS_INLINE bool
+     241              :     test(memory_order __m = memory_order_seq_cst) const noexcept
+     242              :     {
+     243              :       __atomic_flag_data_type __v;
+     244              :       __atomic_load(&_M_i, &__v, int(__m));
+     245              :       return __v == __GCC_ATOMIC_TEST_AND_SET_TRUEVAL;
+     246              :     }
+     247              : 
+     248              :     _GLIBCXX_ALWAYS_INLINE bool
+     249              :     test(memory_order __m = memory_order_seq_cst) const volatile noexcept
+     250              :     {
+     251              :       __atomic_flag_data_type __v;
+     252              :       __atomic_load(&_M_i, &__v, int(__m));
+     253              :       return __v == __GCC_ATOMIC_TEST_AND_SET_TRUEVAL;
+     254              :     }
+     255              : 
+     256              : #if __cpp_lib_atomic_wait
+     257              :     _GLIBCXX_ALWAYS_INLINE void
+     258              :     wait(bool __old,
+     259              :         memory_order __m = memory_order_seq_cst) const noexcept
+     260              :     {
+     261              :       const __atomic_flag_data_type __v
+     262              :         = __old ? __GCC_ATOMIC_TEST_AND_SET_TRUEVAL : 0;
+     263              : 
+     264              :       std::__atomic_wait_address_v(&_M_i, __v,
+     265              :           [__m, this] { return __atomic_load_n(&_M_i, int(__m)); });
+     266              :     }
+     267              : 
+     268              :     // TODO add const volatile overload
+     269              : 
+     270              :     _GLIBCXX_ALWAYS_INLINE void
+     271              :     notify_one() noexcept
+     272              :     { std::__atomic_notify_address(&_M_i, false); }
+     273              : 
+     274              :     // TODO add const volatile overload
+     275              : 
+     276              :     _GLIBCXX_ALWAYS_INLINE void
+     277              :     notify_all() noexcept
+     278              :     { std::__atomic_notify_address(&_M_i, true); }
+     279              : 
+     280              :     // TODO add const volatile overload
+     281              : #endif // __cpp_lib_atomic_wait
+     282              : #endif // C++20
+     283              : 
+     284              :     _GLIBCXX_ALWAYS_INLINE void
+     285              :     clear(memory_order __m = memory_order_seq_cst) noexcept
+     286              :     {
+     287              :       memory_order __b __attribute__ ((__unused__))
+     288              :         = __m & __memory_order_mask;
+     289              :       __glibcxx_assert(__b != memory_order_consume);
+     290              :       __glibcxx_assert(__b != memory_order_acquire);
+     291              :       __glibcxx_assert(__b != memory_order_acq_rel);
+     292              : 
+     293              :       __atomic_clear (&_M_i, int(__m));
+     294              :     }
+     295              : 
+     296              :     _GLIBCXX_ALWAYS_INLINE void
+     297              :     clear(memory_order __m = memory_order_seq_cst) volatile noexcept
+     298              :     {
+     299              :       memory_order __b __attribute__ ((__unused__))
+     300              :         = __m & __memory_order_mask;
+     301              :       __glibcxx_assert(__b != memory_order_consume);
+     302              :       __glibcxx_assert(__b != memory_order_acquire);
+     303              :       __glibcxx_assert(__b != memory_order_acq_rel);
+     304              : 
+     305              :       __atomic_clear (&_M_i, int(__m));
+     306              :     }
+     307              : 
+     308              :   private:
+     309              :     static constexpr __atomic_flag_data_type
+     310              :     _S_init(bool __i)
+     311              :     { return __i ? __GCC_ATOMIC_TEST_AND_SET_TRUEVAL : 0; }
+     312              :   };
+     313              : 
+     314              :   /// @cond undocumented
+     315              : 
+     316              :   /// Base class for atomic integrals.
+     317              :   //
+     318              :   // For each of the integral types, define atomic_[integral type] struct
+     319              :   //
+     320              :   // atomic_bool     bool
+     321              :   // atomic_char     char
+     322              :   // atomic_schar    signed char
+     323              :   // atomic_uchar    unsigned char
+     324              :   // atomic_short    short
+     325              :   // atomic_ushort   unsigned short
+     326              :   // atomic_int      int
+     327              :   // atomic_uint     unsigned int
+     328              :   // atomic_long     long
+     329              :   // atomic_ulong    unsigned long
+     330              :   // atomic_llong    long long
+     331              :   // atomic_ullong   unsigned long long
+     332              :   // atomic_char8_t  char8_t
+     333              :   // atomic_char16_t char16_t
+     334              :   // atomic_char32_t char32_t
+     335              :   // atomic_wchar_t  wchar_t
+     336              :   //
+     337              :   // NB: Assuming _ITp is an integral scalar type that is 1, 2, 4, or
+     338              :   // 8 bytes, since that is what GCC built-in functions for atomic
+     339              :   // memory access expect.
+     340              :   template<typename _ITp>
+     341              :     struct __atomic_base
+     342              :     {
+     343              :       using value_type = _ITp;
+     344              :       using difference_type = value_type;
+     345              : 
+     346              :     private:
+     347              :       typedef _ITp      __int_type;
+     348              : 
+     349              :       static constexpr int _S_alignment =
+     350              :         sizeof(_ITp) > alignof(_ITp) ? sizeof(_ITp) : alignof(_ITp);
+     351              : 
+     352              :       alignas(_S_alignment) __int_type _M_i _GLIBCXX20_INIT(0);
+     353              : 
+     354              :     public:
+     355              :       __atomic_base() noexcept = default;
+     356              :       ~__atomic_base() noexcept = default;
+     357              :       __atomic_base(const __atomic_base&) = delete;
+     358              :       __atomic_base& operator=(const __atomic_base&) = delete;
+     359              :       __atomic_base& operator=(const __atomic_base&) volatile = delete;
+     360              : 
+     361              :       // Requires __int_type convertible to _M_i.
+     362      1136304 :       constexpr __atomic_base(__int_type __i) noexcept : _M_i (__i) { }
+     363              : 
+     364     74610166 :       operator __int_type() const noexcept
+     365     74610166 :       { return load(); }
+     366              : 
+     367              :       operator __int_type() const volatile noexcept
+     368              :       { return load(); }
+     369              : 
+     370              :       __int_type
+     371              :       operator=(__int_type __i) noexcept
+     372              :       {
+     373              :         store(__i);
+     374              :         return __i;
+     375              :       }
+     376              : 
+     377              :       __int_type
+     378              :       operator=(__int_type __i) volatile noexcept
+     379              :       {
+     380              :         store(__i);
+     381              :         return __i;
+     382              :       }
+     383              : 
+     384              :       __int_type
+     385              :       operator++(int) noexcept
+     386              :       { return fetch_add(1); }
+     387              : 
+     388              :       __int_type
+     389              :       operator++(int) volatile noexcept
+     390              :       { return fetch_add(1); }
+     391              : 
+     392              :       __int_type
+     393              :       operator--(int) noexcept
+     394              :       { return fetch_sub(1); }
+     395              : 
+     396              :       __int_type
+     397              :       operator--(int) volatile noexcept
+     398              :       { return fetch_sub(1); }
+     399              : 
+     400              :       __int_type
+     401            0 :       operator++() noexcept
+     402            0 :       { return __atomic_add_fetch(&_M_i, 1, int(memory_order_seq_cst)); }
+     403              : 
+     404              :       __int_type
+     405              :       operator++() volatile noexcept
+     406              :       { return __atomic_add_fetch(&_M_i, 1, int(memory_order_seq_cst)); }
+     407              : 
+     408              :       __int_type
+     409            0 :       operator--() noexcept
+     410            0 :       { return __atomic_sub_fetch(&_M_i, 1, int(memory_order_seq_cst)); }
+     411              : 
+     412              :       __int_type
+     413              :       operator--() volatile noexcept
+     414              :       { return __atomic_sub_fetch(&_M_i, 1, int(memory_order_seq_cst)); }
+     415              : 
+     416              :       __int_type
+     417              :       operator+=(__int_type __i) noexcept
+     418              :       { return __atomic_add_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
+     419              : 
+     420              :       __int_type
+     421              :       operator+=(__int_type __i) volatile noexcept
+     422              :       { return __atomic_add_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
+     423              : 
+     424              :       __int_type
+     425              :       operator-=(__int_type __i) noexcept
+     426              :       { return __atomic_sub_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
+     427              : 
+     428              :       __int_type
+     429              :       operator-=(__int_type __i) volatile noexcept
+     430              :       { return __atomic_sub_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
+     431              : 
+     432              :       __int_type
+     433              :       operator&=(__int_type __i) noexcept
+     434              :       { return __atomic_and_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
+     435              : 
+     436              :       __int_type
+     437              :       operator&=(__int_type __i) volatile noexcept
+     438              :       { return __atomic_and_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
+     439              : 
+     440              :       __int_type
+     441              :       operator|=(__int_type __i) noexcept
+     442              :       { return __atomic_or_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
+     443              : 
+     444              :       __int_type
+     445              :       operator|=(__int_type __i) volatile noexcept
+     446              :       { return __atomic_or_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
+     447              : 
+     448              :       __int_type
+     449              :       operator^=(__int_type __i) noexcept
+     450              :       { return __atomic_xor_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
+     451              : 
+     452              :       __int_type
+     453              :       operator^=(__int_type __i) volatile noexcept
+     454              :       { return __atomic_xor_fetch(&_M_i, __i, int(memory_order_seq_cst)); }
+     455              : 
+     456              :       bool
+     457              :       is_lock_free() const noexcept
+     458              :       {
+     459              :         // Use a fake, minimally aligned pointer.
+     460              :         return __atomic_is_lock_free(sizeof(_M_i),
+     461              :             reinterpret_cast<void *>(-_S_alignment));
+     462              :       }
+     463              : 
+     464              :       bool
+     465              :       is_lock_free() const volatile noexcept
+     466              :       {
+     467              :         // Use a fake, minimally aligned pointer.
+     468              :         return __atomic_is_lock_free(sizeof(_M_i),
+     469              :             reinterpret_cast<void *>(-_S_alignment));
+     470              :       }
+     471              : 
+     472              :       _GLIBCXX_ALWAYS_INLINE void
+     473              :       store(__int_type __i, memory_order __m = memory_order_seq_cst) noexcept
+     474              :       {
+     475              :         memory_order __b __attribute__ ((__unused__))
+     476     74608384 :           = __m & __memory_order_mask;
+     477     74608384 :         __glibcxx_assert(__b != memory_order_acquire);
+     478     74608384 :         __glibcxx_assert(__b != memory_order_acq_rel);
+     479     74608384 :         __glibcxx_assert(__b != memory_order_consume);
+     480              : 
+     481     74608384 :         __atomic_store_n(&_M_i, __i, int(__m));
+     482     74608384 :       }
+     483              : 
+     484              :       _GLIBCXX_ALWAYS_INLINE void
+     485              :       store(__int_type __i,
+     486              :             memory_order __m = memory_order_seq_cst) volatile noexcept
+     487              :       {
+     488              :         memory_order __b __attribute__ ((__unused__))
+     489              :           = __m & __memory_order_mask;
+     490              :         __glibcxx_assert(__b != memory_order_acquire);
+     491              :         __glibcxx_assert(__b != memory_order_acq_rel);
+     492              :         __glibcxx_assert(__b != memory_order_consume);
+     493              : 
+     494              :         __atomic_store_n(&_M_i, __i, int(__m));
+     495              :       }
+     496              : 
+     497              :       _GLIBCXX_ALWAYS_INLINE __int_type
+     498              :       load(memory_order __m = memory_order_seq_cst) const noexcept
+     499              :       {
+     500              :         memory_order __b __attribute__ ((__unused__))
+     501   1537916572 :           = __m & __memory_order_mask;
+     502   1537916572 :         __glibcxx_assert(__b != memory_order_release);
+     503   1537916572 :         __glibcxx_assert(__b != memory_order_acq_rel);
+     504              : 
+     505   1537916572 :         return __atomic_load_n(&_M_i, int(__m));
+     506              :       }
+     507              : 
+     508              :       _GLIBCXX_ALWAYS_INLINE __int_type
+     509              :       load(memory_order __m = memory_order_seq_cst) const volatile noexcept
+     510              :       {
+     511              :         memory_order __b __attribute__ ((__unused__))
+     512              :           = __m & __memory_order_mask;
+     513              :         __glibcxx_assert(__b != memory_order_release);
+     514              :         __glibcxx_assert(__b != memory_order_acq_rel);
+     515              : 
+     516              :         return __atomic_load_n(&_M_i, int(__m));
+     517              :       }
+     518              : 
+     519              :       _GLIBCXX_ALWAYS_INLINE __int_type
+     520              :       exchange(__int_type __i,
+     521              :                memory_order __m = memory_order_seq_cst) noexcept
+     522              :       {
+     523              :         return __atomic_exchange_n(&_M_i, __i, int(__m));
+     524              :       }
+     525              : 
+     526              : 
+     527              :       _GLIBCXX_ALWAYS_INLINE __int_type
+     528              :       exchange(__int_type __i,
+     529              :                memory_order __m = memory_order_seq_cst) volatile noexcept
+     530              :       {
+     531              :         return __atomic_exchange_n(&_M_i, __i, int(__m));
+     532              :       }
+     533              : 
+     534              :       _GLIBCXX_ALWAYS_INLINE bool
+     535              :       compare_exchange_weak(__int_type& __i1, __int_type __i2,
+     536              :                             memory_order __m1, memory_order __m2) noexcept
+     537              :       {
+     538              :         __glibcxx_assert(__is_valid_cmpexch_failure_order(__m2));
+     539              : 
+     540              :         return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1,
+     541              :                                            int(__m1), int(__m2));
+     542              :       }
+     543              : 
+     544              :       _GLIBCXX_ALWAYS_INLINE bool
+     545              :       compare_exchange_weak(__int_type& __i1, __int_type __i2,
+     546              :                             memory_order __m1,
+     547              :                             memory_order __m2) volatile noexcept
+     548              :       {
+     549              :         __glibcxx_assert(__is_valid_cmpexch_failure_order(__m2));
+     550              : 
+     551              :         return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1,
+     552              :                                            int(__m1), int(__m2));
+     553              :       }
+     554              : 
+     555              :       _GLIBCXX_ALWAYS_INLINE bool
+     556              :       compare_exchange_weak(__int_type& __i1, __int_type __i2,
+     557              :                             memory_order __m = memory_order_seq_cst) noexcept
+     558              :       {
+     559              :         return compare_exchange_weak(__i1, __i2, __m,
+     560              :                                      __cmpexch_failure_order(__m));
+     561              :       }
+     562              : 
+     563              :       _GLIBCXX_ALWAYS_INLINE bool
+     564              :       compare_exchange_weak(__int_type& __i1, __int_type __i2,
+     565              :                    memory_order __m = memory_order_seq_cst) volatile noexcept
+     566              :       {
+     567              :         return compare_exchange_weak(__i1, __i2, __m,
+     568              :                                      __cmpexch_failure_order(__m));
+     569              :       }
+     570              : 
+     571              :       _GLIBCXX_ALWAYS_INLINE bool
+     572              :       compare_exchange_strong(__int_type& __i1, __int_type __i2,
+     573              :                               memory_order __m1, memory_order __m2) noexcept
+     574              :       {
+     575              :         __glibcxx_assert(__is_valid_cmpexch_failure_order(__m2));
+     576              : 
+     577              :         return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0,
+     578              :                                            int(__m1), int(__m2));
+     579              :       }
+     580              : 
+     581              :       _GLIBCXX_ALWAYS_INLINE bool
+     582              :       compare_exchange_strong(__int_type& __i1, __int_type __i2,
+     583              :                               memory_order __m1,
+     584              :                               memory_order __m2) volatile noexcept
+     585              :       {
+     586              :         __glibcxx_assert(__is_valid_cmpexch_failure_order(__m2));
+     587              : 
+     588              :         return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0,
+     589              :                                            int(__m1), int(__m2));
+     590              :       }
+     591              : 
+     592              :       _GLIBCXX_ALWAYS_INLINE bool
+     593              :       compare_exchange_strong(__int_type& __i1, __int_type __i2,
+     594              :                               memory_order __m = memory_order_seq_cst) noexcept
+     595              :       {
+     596              :         return compare_exchange_strong(__i1, __i2, __m,
+     597              :                                        __cmpexch_failure_order(__m));
+     598              :       }
+     599              : 
+     600              :       _GLIBCXX_ALWAYS_INLINE bool
+     601              :       compare_exchange_strong(__int_type& __i1, __int_type __i2,
+     602              :                  memory_order __m = memory_order_seq_cst) volatile noexcept
+     603              :       {
+     604              :         return compare_exchange_strong(__i1, __i2, __m,
+     605              :                                        __cmpexch_failure_order(__m));
+     606              :       }
+     607              : 
+     608              : #if __cpp_lib_atomic_wait
+     609              :       _GLIBCXX_ALWAYS_INLINE void
+     610              :       wait(__int_type __old,
+     611              :           memory_order __m = memory_order_seq_cst) const noexcept
+     612              :       {
+     613              :         std::__atomic_wait_address_v(&_M_i, __old,
+     614              :                            [__m, this] { return this->load(__m); });
+     615              :       }
+     616              : 
+     617              :       // TODO add const volatile overload
+     618              : 
+     619              :       _GLIBCXX_ALWAYS_INLINE void
+     620              :       notify_one() noexcept
+     621              :       { std::__atomic_notify_address(&_M_i, false); }
+     622              : 
+     623              :       // TODO add const volatile overload
+     624              : 
+     625              :       _GLIBCXX_ALWAYS_INLINE void
+     626              :       notify_all() noexcept
+     627              :       { std::__atomic_notify_address(&_M_i, true); }
+     628              : 
+     629              :       // TODO add const volatile overload
+     630              : #endif // __cpp_lib_atomic_wait
+     631              : 
+     632              :       _GLIBCXX_ALWAYS_INLINE __int_type
+     633              :       fetch_add(__int_type __i,
+     634              :                 memory_order __m = memory_order_seq_cst) noexcept
+     635       440756 :       { return __atomic_fetch_add(&_M_i, __i, int(__m)); }
+     636              : 
+     637              :       _GLIBCXX_ALWAYS_INLINE __int_type
+     638              :       fetch_add(__int_type __i,
+     639              :                 memory_order __m = memory_order_seq_cst) volatile noexcept
+     640              :       { return __atomic_fetch_add(&_M_i, __i, int(__m)); }
+     641              : 
+     642              :       _GLIBCXX_ALWAYS_INLINE __int_type
+     643              :       fetch_sub(__int_type __i,
+     644              :                 memory_order __m = memory_order_seq_cst) noexcept
+     645    212684736 :       { return __atomic_fetch_sub(&_M_i, __i, int(__m)); }
+     646              : 
+     647              :       _GLIBCXX_ALWAYS_INLINE __int_type
+     648              :       fetch_sub(__int_type __i,
+     649              :                 memory_order __m = memory_order_seq_cst) volatile noexcept
+     650              :       { return __atomic_fetch_sub(&_M_i, __i, int(__m)); }
+     651              : 
+     652              :       _GLIBCXX_ALWAYS_INLINE __int_type
+     653              :       fetch_and(__int_type __i,
+     654              :                 memory_order __m = memory_order_seq_cst) noexcept
+     655              :       { return __atomic_fetch_and(&_M_i, __i, int(__m)); }
+     656              : 
+     657              :       _GLIBCXX_ALWAYS_INLINE __int_type
+     658              :       fetch_and(__int_type __i,
+     659              :                 memory_order __m = memory_order_seq_cst) volatile noexcept
+     660              :       { return __atomic_fetch_and(&_M_i, __i, int(__m)); }
+     661              : 
+     662              :       _GLIBCXX_ALWAYS_INLINE __int_type
+     663              :       fetch_or(__int_type __i,
+     664              :                memory_order __m = memory_order_seq_cst) noexcept
+     665              :       { return __atomic_fetch_or(&_M_i, __i, int(__m)); }
+     666              : 
+     667              :       _GLIBCXX_ALWAYS_INLINE __int_type
+     668              :       fetch_or(__int_type __i,
+     669              :                memory_order __m = memory_order_seq_cst) volatile noexcept
+     670              :       { return __atomic_fetch_or(&_M_i, __i, int(__m)); }
+     671              : 
+     672              :       _GLIBCXX_ALWAYS_INLINE __int_type
+     673              :       fetch_xor(__int_type __i,
+     674              :                 memory_order __m = memory_order_seq_cst) noexcept
+     675              :       { return __atomic_fetch_xor(&_M_i, __i, int(__m)); }
+     676              : 
+     677              :       _GLIBCXX_ALWAYS_INLINE __int_type
+     678              :       fetch_xor(__int_type __i,
+     679              :                 memory_order __m = memory_order_seq_cst) volatile noexcept
+     680              :       { return __atomic_fetch_xor(&_M_i, __i, int(__m)); }
+     681              :     };
+     682              : 
+     683              : 
+     684              :   /// Partial specialization for pointer types.
+     685              :   template<typename _PTp>
+     686              :     struct __atomic_base<_PTp*>
+     687              :     {
+     688              :     private:
+     689              :       typedef _PTp*     __pointer_type;
+     690              : 
+     691              :       __pointer_type    _M_p _GLIBCXX20_INIT(nullptr);
+     692              : 
+     693              :       // Factored out to facilitate explicit specialization.
+     694              :       constexpr ptrdiff_t
+     695              :       _M_type_size(ptrdiff_t __d) const { return __d * sizeof(_PTp); }
+     696              : 
+     697              :       constexpr ptrdiff_t
+     698              :       _M_type_size(ptrdiff_t __d) const volatile { return __d * sizeof(_PTp); }
+     699              : 
+     700              :     public:
+     701              :       __atomic_base() noexcept = default;
+     702              :       ~__atomic_base() noexcept = default;
+     703              :       __atomic_base(const __atomic_base&) = delete;
+     704              :       __atomic_base& operator=(const __atomic_base&) = delete;
+     705              :       __atomic_base& operator=(const __atomic_base&) volatile = delete;
+     706              : 
+     707              :       // Requires __pointer_type convertible to _M_p.
+     708              :       constexpr __atomic_base(__pointer_type __p) noexcept : _M_p (__p) { }
+     709              : 
+     710              :       operator __pointer_type() const noexcept
+     711              :       { return load(); }
+     712              : 
+     713              :       operator __pointer_type() const volatile noexcept
+     714              :       { return load(); }
+     715              : 
+     716              :       __pointer_type
+     717              :       operator=(__pointer_type __p) noexcept
+     718              :       {
+     719              :         store(__p);
+     720              :         return __p;
+     721              :       }
+     722              : 
+     723              :       __pointer_type
+     724              :       operator=(__pointer_type __p) volatile noexcept
+     725              :       {
+     726              :         store(__p);
+     727              :         return __p;
+     728              :       }
+     729              : 
+     730              :       __pointer_type
+     731              :       operator++(int) noexcept
+     732              :       { return fetch_add(1); }
+     733              : 
+     734              :       __pointer_type
+     735              :       operator++(int) volatile noexcept
+     736              :       { return fetch_add(1); }
+     737              : 
+     738              :       __pointer_type
+     739              :       operator--(int) noexcept
+     740              :       { return fetch_sub(1); }
+     741              : 
+     742              :       __pointer_type
+     743              :       operator--(int) volatile noexcept
+     744              :       { return fetch_sub(1); }
+     745              : 
+     746              :       __pointer_type
+     747              :       operator++() noexcept
+     748              :       { return __atomic_add_fetch(&_M_p, _M_type_size(1),
+     749              :                                   int(memory_order_seq_cst)); }
+     750              : 
+     751              :       __pointer_type
+     752              :       operator++() volatile noexcept
+     753              :       { return __atomic_add_fetch(&_M_p, _M_type_size(1),
+     754              :                                   int(memory_order_seq_cst)); }
+     755              : 
+     756              :       __pointer_type
+     757              :       operator--() noexcept
+     758              :       { return __atomic_sub_fetch(&_M_p, _M_type_size(1),
+     759              :                                   int(memory_order_seq_cst)); }
+     760              : 
+     761              :       __pointer_type
+     762              :       operator--() volatile noexcept
+     763              :       { return __atomic_sub_fetch(&_M_p, _M_type_size(1),
+     764              :                                   int(memory_order_seq_cst)); }
+     765              : 
+     766              :       __pointer_type
+     767              :       operator+=(ptrdiff_t __d) noexcept
+     768              :       { return __atomic_add_fetch(&_M_p, _M_type_size(__d),
+     769              :                                   int(memory_order_seq_cst)); }
+     770              : 
+     771              :       __pointer_type
+     772              :       operator+=(ptrdiff_t __d) volatile noexcept
+     773              :       { return __atomic_add_fetch(&_M_p, _M_type_size(__d),
+     774              :                                   int(memory_order_seq_cst)); }
+     775              : 
+     776              :       __pointer_type
+     777              :       operator-=(ptrdiff_t __d) noexcept
+     778              :       { return __atomic_sub_fetch(&_M_p, _M_type_size(__d),
+     779              :                                   int(memory_order_seq_cst)); }
+     780              : 
+     781              :       __pointer_type
+     782              :       operator-=(ptrdiff_t __d) volatile noexcept
+     783              :       { return __atomic_sub_fetch(&_M_p, _M_type_size(__d),
+     784              :                                   int(memory_order_seq_cst)); }
+     785              : 
+     786              :       bool
+     787              :       is_lock_free() const noexcept
+     788              :       {
+     789              :         // Produce a fake, minimally aligned pointer.
+     790              :         return __atomic_is_lock_free(sizeof(_M_p),
+     791              :             reinterpret_cast<void *>(-__alignof(_M_p)));
+     792              :       }
+     793              : 
+     794              :       bool
+     795              :       is_lock_free() const volatile noexcept
+     796              :       {
+     797              :         // Produce a fake, minimally aligned pointer.
+     798              :         return __atomic_is_lock_free(sizeof(_M_p),
+     799              :             reinterpret_cast<void *>(-__alignof(_M_p)));
+     800              :       }
+     801              : 
+     802              :       _GLIBCXX_ALWAYS_INLINE void
+     803              :       store(__pointer_type __p,
+     804              :             memory_order __m = memory_order_seq_cst) noexcept
+     805              :       {
+     806              :         memory_order __b __attribute__ ((__unused__))
+     807              :           = __m & __memory_order_mask;
+     808              : 
+     809              :         __glibcxx_assert(__b != memory_order_acquire);
+     810              :         __glibcxx_assert(__b != memory_order_acq_rel);
+     811              :         __glibcxx_assert(__b != memory_order_consume);
+     812              : 
+     813              :         __atomic_store_n(&_M_p, __p, int(__m));
+     814              :       }
+     815              : 
+     816              :       _GLIBCXX_ALWAYS_INLINE void
+     817              :       store(__pointer_type __p,
+     818              :             memory_order __m = memory_order_seq_cst) volatile noexcept
+     819              :       {
+     820              :         memory_order __b __attribute__ ((__unused__))
+     821              :           = __m & __memory_order_mask;
+     822              :         __glibcxx_assert(__b != memory_order_acquire);
+     823              :         __glibcxx_assert(__b != memory_order_acq_rel);
+     824              :         __glibcxx_assert(__b != memory_order_consume);
+     825              : 
+     826              :         __atomic_store_n(&_M_p, __p, int(__m));
+     827              :       }
+     828              : 
+     829              :       _GLIBCXX_ALWAYS_INLINE __pointer_type
+     830              :       load(memory_order __m = memory_order_seq_cst) const noexcept
+     831              :       {
+     832              :         memory_order __b __attribute__ ((__unused__))
+     833              :           = __m & __memory_order_mask;
+     834              :         __glibcxx_assert(__b != memory_order_release);
+     835              :         __glibcxx_assert(__b != memory_order_acq_rel);
+     836              : 
+     837              :         return __atomic_load_n(&_M_p, int(__m));
+     838              :       }
+     839              : 
+     840              :       _GLIBCXX_ALWAYS_INLINE __pointer_type
+     841              :       load(memory_order __m = memory_order_seq_cst) const volatile noexcept
+     842              :       {
+     843              :         memory_order __b __attribute__ ((__unused__))
+     844              :           = __m & __memory_order_mask;
+     845              :         __glibcxx_assert(__b != memory_order_release);
+     846              :         __glibcxx_assert(__b != memory_order_acq_rel);
+     847              : 
+     848              :         return __atomic_load_n(&_M_p, int(__m));
+     849              :       }
+     850              : 
+     851              :       _GLIBCXX_ALWAYS_INLINE __pointer_type
+     852              :       exchange(__pointer_type __p,
+     853              :                memory_order __m = memory_order_seq_cst) noexcept
+     854              :       {
+     855              :         return __atomic_exchange_n(&_M_p, __p, int(__m));
+     856              :       }
+     857              : 
+     858              : 
+     859              :       _GLIBCXX_ALWAYS_INLINE __pointer_type
+     860              :       exchange(__pointer_type __p,
+     861              :                memory_order __m = memory_order_seq_cst) volatile noexcept
+     862              :       {
+     863              :         return __atomic_exchange_n(&_M_p, __p, int(__m));
+     864              :       }
+     865              : 
+     866              :       _GLIBCXX_ALWAYS_INLINE bool
+     867              :       compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
+     868              :                             memory_order __m1,
+     869              :                             memory_order __m2) noexcept
+     870              :       {
+     871              :         __glibcxx_assert(__is_valid_cmpexch_failure_order(__m2));
+     872              : 
+     873              :         return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 1,
+     874              :                                            int(__m1), int(__m2));
+     875              :       }
+     876              : 
+     877              :       _GLIBCXX_ALWAYS_INLINE bool
+     878              :       compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
+     879              :                             memory_order __m1,
+     880              :                             memory_order __m2) volatile noexcept
+     881              :       {
+     882              :         __glibcxx_assert(__is_valid_cmpexch_failure_order(__m2));
+     883              : 
+     884              :         return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 1,
+     885              :                                            int(__m1), int(__m2));
+     886              :       }
+     887              : 
+     888              :       _GLIBCXX_ALWAYS_INLINE bool
+     889              :       compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
+     890              :                               memory_order __m1,
+     891              :                               memory_order __m2) noexcept
+     892              :       {
+     893              :         __glibcxx_assert(__is_valid_cmpexch_failure_order(__m2));
+     894              : 
+     895              :         return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0,
+     896              :                                            int(__m1), int(__m2));
+     897              :       }
+     898              : 
+     899              :       _GLIBCXX_ALWAYS_INLINE bool
+     900              :       compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
+     901              :                               memory_order __m1,
+     902              :                               memory_order __m2) volatile noexcept
+     903              :       {
+     904              :         __glibcxx_assert(__is_valid_cmpexch_failure_order(__m2));
+     905              : 
+     906              :         return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0,
+     907              :                                            int(__m1), int(__m2));
+     908              :       }
+     909              : 
+     910              : #if __cpp_lib_atomic_wait
+     911              :       _GLIBCXX_ALWAYS_INLINE void
+     912              :       wait(__pointer_type __old,
+     913              :            memory_order __m = memory_order_seq_cst) const noexcept
+     914              :       {
+     915              :         std::__atomic_wait_address_v(&_M_p, __old,
+     916              :                                      [__m, this]
+     917              :                                      { return this->load(__m); });
+     918              :       }
+     919              : 
+     920              :       // TODO add const volatile overload
+     921              : 
+     922              :       _GLIBCXX_ALWAYS_INLINE void
+     923              :       notify_one() const noexcept
+     924              :       { std::__atomic_notify_address(&_M_p, false); }
+     925              : 
+     926              :       // TODO add const volatile overload
+     927              : 
+     928              :       _GLIBCXX_ALWAYS_INLINE void
+     929              :       notify_all() const noexcept
+     930              :       { std::__atomic_notify_address(&_M_p, true); }
+     931              : 
+     932              :       // TODO add const volatile overload
+     933              : #endif // __cpp_lib_atomic_wait
+     934              : 
+     935              :       _GLIBCXX_ALWAYS_INLINE __pointer_type
+     936              :       fetch_add(ptrdiff_t __d,
+     937              :                 memory_order __m = memory_order_seq_cst) noexcept
+     938              :       { return __atomic_fetch_add(&_M_p, _M_type_size(__d), int(__m)); }
+     939              : 
+     940              :       _GLIBCXX_ALWAYS_INLINE __pointer_type
+     941              :       fetch_add(ptrdiff_t __d,
+     942              :                 memory_order __m = memory_order_seq_cst) volatile noexcept
+     943              :       { return __atomic_fetch_add(&_M_p, _M_type_size(__d), int(__m)); }
+     944              : 
+     945              :       _GLIBCXX_ALWAYS_INLINE __pointer_type
+     946              :       fetch_sub(ptrdiff_t __d,
+     947              :                 memory_order __m = memory_order_seq_cst) noexcept
+     948              :       { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), int(__m)); }
+     949              : 
+     950              :       _GLIBCXX_ALWAYS_INLINE __pointer_type
+     951              :       fetch_sub(ptrdiff_t __d,
+     952              :                 memory_order __m = memory_order_seq_cst) volatile noexcept
+     953              :       { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), int(__m)); }
+     954              :     };
+     955              : 
+     956              :   namespace __atomic_impl
+     957              :   {
+     958              :     // Implementation details of atomic padding handling
+     959              : 
+     960              :     template<typename _Tp>
+     961              :       constexpr bool
+     962              :       __maybe_has_padding()
+     963              :       {
+     964              : #if ! __has_builtin(__builtin_clear_padding)
+     965              :         return false;
+     966              : #elif __has_builtin(__has_unique_object_representations)
+     967              :         return !__has_unique_object_representations(_Tp)
+     968              :           && !is_same<_Tp, float>::value && !is_same<_Tp, double>::value;
+     969              : #else
+     970              :         return true;
+     971              : #endif
+     972              :       }
+     973              : 
+     974              :     template<typename _Tp>
+     975              :       _GLIBCXX_ALWAYS_INLINE _Tp*
+     976              :       __clear_padding(_Tp& __val) noexcept
+     977              :       {
+     978              :         auto* __ptr = std::__addressof(__val);
+     979              : #if __has_builtin(__builtin_clear_padding)
+     980              :         if _GLIBCXX17_CONSTEXPR (__atomic_impl::__maybe_has_padding<_Tp>())
+     981              :           __builtin_clear_padding(__ptr);
+     982              : #endif
+     983              :         return __ptr;
+     984              :       }
+     985              : 
+     986              :     // Remove volatile and create a non-deduced context for value arguments.
+     987              :     template<typename _Tp>
+     988              :       using _Val = typename remove_volatile<_Tp>::type;
+     989              : 
+     990              :     template<typename _Tp>
+     991              :       _GLIBCXX_ALWAYS_INLINE bool
+     992              :       __compare_exchange(_Tp& __val, _Val<_Tp>& __e, _Val<_Tp>& __i,
+     993              :                          bool __is_weak,
+     994              :                          memory_order __s, memory_order __f) noexcept
+     995              :       {
+     996              :         __glibcxx_assert(__is_valid_cmpexch_failure_order(__f));
+     997              : 
+     998              :         using _Vp = _Val<_Tp>;
+     999              : 
+    1000              :         if _GLIBCXX17_CONSTEXPR (__atomic_impl::__maybe_has_padding<_Vp>())
+    1001              :           {
+    1002              :             // We must not modify __e on success, so cannot clear its padding.
+    1003              :             // Copy into a buffer and clear that, then copy back on failure.
+    1004              :             alignas(_Vp) unsigned char __buf[sizeof(_Vp)];
+    1005              :             _Vp* __exp = ::new((void*)__buf) _Vp(__e);
+    1006              :             __atomic_impl::__clear_padding(*__exp);
+    1007              :             if (__atomic_compare_exchange(std::__addressof(__val), __exp,
+    1008              :                                           __atomic_impl::__clear_padding(__i),
+    1009              :                                           __is_weak, int(__s), int(__f)))
+    1010              :               return true;
+    1011              :             __builtin_memcpy(std::__addressof(__e), __exp, sizeof(_Vp));
+    1012              :             return false;
+    1013              :           }
+    1014              :         else
+    1015              :           return __atomic_compare_exchange(std::__addressof(__val),
+    1016              :                                            std::__addressof(__e),
+    1017              :                                            std::__addressof(__i),
+    1018              :                                            __is_weak, int(__s), int(__f));
+    1019              :       }
+    1020              :   } // namespace __atomic_impl
+    1021              : 
+    1022              : #if __cplusplus > 201703L
+    1023              :   // Implementation details of atomic_ref and atomic<floating-point>.
+    1024              :   namespace __atomic_impl
+    1025              :   {
+    1026              :     // Like _Val<T> above, but for difference_type arguments.
+    1027              :     template<typename _Tp>
+    1028              :       using _Diff = __conditional_t<is_pointer_v<_Tp>, ptrdiff_t, _Val<_Tp>>;
+    1029              : 
+    1030              :     template<size_t _Size, size_t _Align>
+    1031              :       _GLIBCXX_ALWAYS_INLINE bool
+    1032              :       is_lock_free() noexcept
+    1033              :       {
+    1034              :         // Produce a fake, minimally aligned pointer.
+    1035              :         return __atomic_is_lock_free(_Size, reinterpret_cast<void *>(-_Align));
+    1036              :       }
+    1037              : 
+    1038              :     template<typename _Tp>
+    1039              :       _GLIBCXX_ALWAYS_INLINE void
+    1040              :       store(_Tp* __ptr, _Val<_Tp> __t, memory_order __m) noexcept
+    1041              :       {
+    1042              :         __atomic_store(__ptr, __atomic_impl::__clear_padding(__t), int(__m));
+    1043              :       }
+    1044              : 
+    1045              :     template<typename _Tp>
+    1046              :       _GLIBCXX_ALWAYS_INLINE _Val<_Tp>
+    1047              :       load(const _Tp* __ptr, memory_order __m) noexcept
+    1048              :       {
+    1049              :         alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
+    1050              :         auto* __dest = reinterpret_cast<_Val<_Tp>*>(__buf);
+    1051              :         __atomic_load(__ptr, __dest, int(__m));
+    1052              :         return *__dest;
+    1053              :       }
+    1054              : 
+    1055              :     template<typename _Tp>
+    1056              :       _GLIBCXX_ALWAYS_INLINE _Val<_Tp>
+    1057              :       exchange(_Tp* __ptr, _Val<_Tp> __desired, memory_order __m) noexcept
+    1058              :       {
+    1059              :         alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
+    1060              :         auto* __dest = reinterpret_cast<_Val<_Tp>*>(__buf);
+    1061              :         __atomic_exchange(__ptr, __atomic_impl::__clear_padding(__desired),
+    1062              :                           __dest, int(__m));
+    1063              :         return *__dest;
+    1064              :       }
+    1065              : 
+    1066              :     template<typename _Tp>
+    1067              :       _GLIBCXX_ALWAYS_INLINE bool
+    1068              :       compare_exchange_weak(_Tp* __ptr, _Val<_Tp>& __expected,
+    1069              :                             _Val<_Tp> __desired, memory_order __success,
+    1070              :                             memory_order __failure) noexcept
+    1071              :       {
+    1072              :         return __atomic_impl::__compare_exchange(*__ptr, __expected, __desired,
+    1073              :                                                  true, __success, __failure);
+    1074              :       }
+    1075              : 
+    1076              :     template<typename _Tp>
+    1077              :       _GLIBCXX_ALWAYS_INLINE bool
+    1078              :       compare_exchange_strong(_Tp* __ptr, _Val<_Tp>& __expected,
+    1079              :                               _Val<_Tp> __desired, memory_order __success,
+    1080              :                               memory_order __failure) noexcept
+    1081              :       {
+    1082              :         return __atomic_impl::__compare_exchange(*__ptr, __expected, __desired,
+    1083              :                                                  false, __success, __failure);
+    1084              :       }
+    1085              : 
+    1086              : #if __cpp_lib_atomic_wait
+    1087              :     template<typename _Tp>
+    1088              :       _GLIBCXX_ALWAYS_INLINE void
+    1089              :       wait(const _Tp* __ptr, _Val<_Tp> __old,
+    1090              :            memory_order __m = memory_order_seq_cst) noexcept
+    1091              :       {
+    1092              :         std::__atomic_wait_address_v(__ptr, __old,
+    1093              :             [__ptr, __m]() { return __atomic_impl::load(__ptr, __m); });
+    1094              :       }
+    1095              : 
+    1096              :       // TODO add const volatile overload
+    1097              : 
+    1098              :     template<typename _Tp>
+    1099              :       _GLIBCXX_ALWAYS_INLINE void
+    1100              :       notify_one(const _Tp* __ptr) noexcept
+    1101              :       { std::__atomic_notify_address(__ptr, false); }
+    1102              : 
+    1103              :       // TODO add const volatile overload
+    1104              : 
+    1105              :     template<typename _Tp>
+    1106              :       _GLIBCXX_ALWAYS_INLINE void
+    1107              :       notify_all(const _Tp* __ptr) noexcept
+    1108              :       { std::__atomic_notify_address(__ptr, true); }
+    1109              : 
+    1110              :       // TODO add const volatile overload
+    1111              : #endif // __cpp_lib_atomic_wait
+    1112              : 
+    1113              :     template<typename _Tp>
+    1114              :       _GLIBCXX_ALWAYS_INLINE _Tp
+    1115              :       fetch_add(_Tp* __ptr, _Diff<_Tp> __i, memory_order __m) noexcept
+    1116              :       { return __atomic_fetch_add(__ptr, __i, int(__m)); }
+    1117              : 
+    1118              :     template<typename _Tp>
+    1119              :       _GLIBCXX_ALWAYS_INLINE _Tp
+    1120              :       fetch_sub(_Tp* __ptr, _Diff<_Tp> __i, memory_order __m) noexcept
+    1121              :       { return __atomic_fetch_sub(__ptr, __i, int(__m)); }
+    1122              : 
+    1123              :     template<typename _Tp>
+    1124              :       _GLIBCXX_ALWAYS_INLINE _Tp
+    1125              :       fetch_and(_Tp* __ptr, _Val<_Tp> __i, memory_order __m) noexcept
+    1126              :       { return __atomic_fetch_and(__ptr, __i, int(__m)); }
+    1127              : 
+    1128              :     template<typename _Tp>
+    1129              :       _GLIBCXX_ALWAYS_INLINE _Tp
+    1130              :       fetch_or(_Tp* __ptr, _Val<_Tp> __i, memory_order __m) noexcept
+    1131              :       { return __atomic_fetch_or(__ptr, __i, int(__m)); }
+    1132              : 
+    1133              :     template<typename _Tp>
+    1134              :       _GLIBCXX_ALWAYS_INLINE _Tp
+    1135              :       fetch_xor(_Tp* __ptr, _Val<_Tp> __i, memory_order __m) noexcept
+    1136              :       { return __atomic_fetch_xor(__ptr, __i, int(__m)); }
+    1137              : 
+    1138              :     template<typename _Tp>
+    1139              :       _GLIBCXX_ALWAYS_INLINE _Tp
+    1140              :       __add_fetch(_Tp* __ptr, _Diff<_Tp> __i) noexcept
+    1141              :       { return __atomic_add_fetch(__ptr, __i, __ATOMIC_SEQ_CST); }
+    1142              : 
+    1143              :     template<typename _Tp>
+    1144              :       _GLIBCXX_ALWAYS_INLINE _Tp
+    1145              :       __sub_fetch(_Tp* __ptr, _Diff<_Tp> __i) noexcept
+    1146              :       { return __atomic_sub_fetch(__ptr, __i, __ATOMIC_SEQ_CST); }
+    1147              : 
+    1148              :     template<typename _Tp>
+    1149              :       _GLIBCXX_ALWAYS_INLINE _Tp
+    1150              :       __and_fetch(_Tp* __ptr, _Val<_Tp> __i) noexcept
+    1151              :       { return __atomic_and_fetch(__ptr, __i, __ATOMIC_SEQ_CST); }
+    1152              : 
+    1153              :     template<typename _Tp>
+    1154              :       _GLIBCXX_ALWAYS_INLINE _Tp
+    1155              :       __or_fetch(_Tp* __ptr, _Val<_Tp> __i) noexcept
+    1156              :       { return __atomic_or_fetch(__ptr, __i, __ATOMIC_SEQ_CST); }
+    1157              : 
+    1158              :     template<typename _Tp>
+    1159              :       _GLIBCXX_ALWAYS_INLINE _Tp
+    1160              :       __xor_fetch(_Tp* __ptr, _Val<_Tp> __i) noexcept
+    1161              :       { return __atomic_xor_fetch(__ptr, __i, __ATOMIC_SEQ_CST); }
+    1162              : 
+    1163              :     template<typename _Tp>
+    1164              :       _Tp
+    1165              :       __fetch_add_flt(_Tp* __ptr, _Val<_Tp> __i, memory_order __m) noexcept
+    1166              :       {
+    1167              :         _Val<_Tp> __oldval = load(__ptr, memory_order_relaxed);
+    1168              :         _Val<_Tp> __newval = __oldval + __i;
+    1169              :         while (!compare_exchange_weak(__ptr, __oldval, __newval, __m,
+    1170              :                                       memory_order_relaxed))
+    1171              :           __newval = __oldval + __i;
+    1172              :         return __oldval;
+    1173              :       }
+    1174              : 
+    1175              :     template<typename _Tp>
+    1176              :       _Tp
+    1177              :       __fetch_sub_flt(_Tp* __ptr, _Val<_Tp> __i, memory_order __m) noexcept
+    1178              :       {
+    1179              :         _Val<_Tp> __oldval = load(__ptr, memory_order_relaxed);
+    1180              :         _Val<_Tp> __newval = __oldval - __i;
+    1181              :         while (!compare_exchange_weak(__ptr, __oldval, __newval, __m,
+    1182              :                                       memory_order_relaxed))
+    1183              :           __newval = __oldval - __i;
+    1184              :         return __oldval;
+    1185              :       }
+    1186              : 
+    1187              :     template<typename _Tp>
+    1188              :       _Tp
+    1189              :       __add_fetch_flt(_Tp* __ptr, _Val<_Tp> __i) noexcept
+    1190              :       {
+    1191              :         _Val<_Tp> __oldval = load(__ptr, memory_order_relaxed);
+    1192              :         _Val<_Tp> __newval = __oldval + __i;
+    1193              :         while (!compare_exchange_weak(__ptr, __oldval, __newval,
+    1194              :                                       memory_order_seq_cst,
+    1195              :                                       memory_order_relaxed))
+    1196              :           __newval = __oldval + __i;
+    1197              :         return __newval;
+    1198              :       }
+    1199              : 
+    1200              :     template<typename _Tp>
+    1201              :       _Tp
+    1202              :       __sub_fetch_flt(_Tp* __ptr, _Val<_Tp> __i) noexcept
+    1203              :       {
+    1204              :         _Val<_Tp> __oldval = load(__ptr, memory_order_relaxed);
+    1205              :         _Val<_Tp> __newval = __oldval - __i;
+    1206              :         while (!compare_exchange_weak(__ptr, __oldval, __newval,
+    1207              :                                       memory_order_seq_cst,
+    1208              :                                       memory_order_relaxed))
+    1209              :           __newval = __oldval - __i;
+    1210              :         return __newval;
+    1211              :       }
+    1212              :   } // namespace __atomic_impl
+    1213              : 
+    1214              :   // base class for atomic<floating-point-type>
+    1215              :   template<typename _Fp>
+    1216              :     struct __atomic_float
+    1217              :     {
+    1218              :       static_assert(is_floating_point_v<_Fp>);
+    1219              : 
+    1220              :       static constexpr size_t _S_alignment = __alignof__(_Fp);
+    1221              : 
+    1222              :     public:
+    1223              :       using value_type = _Fp;
+    1224              :       using difference_type = value_type;
+    1225              : 
+    1226              :       static constexpr bool is_always_lock_free
+    1227              :         = __atomic_always_lock_free(sizeof(_Fp), 0);
+    1228              : 
+    1229              :       __atomic_float() = default;
+    1230              : 
+    1231              :       constexpr
+    1232              :       __atomic_float(_Fp __t) : _M_fp(__t)
+    1233              :       { }
+    1234              : 
+    1235              :       __atomic_float(const __atomic_float&) = delete;
+    1236              :       __atomic_float& operator=(const __atomic_float&) = delete;
+    1237              :       __atomic_float& operator=(const __atomic_float&) volatile = delete;
+    1238              : 
+    1239              :       _Fp
+    1240              :       operator=(_Fp __t) volatile noexcept
+    1241              :       {
+    1242              :         this->store(__t);
+    1243              :         return __t;
+    1244              :       }
+    1245              : 
+    1246              :       _Fp
+    1247              :       operator=(_Fp __t) noexcept
+    1248              :       {
+    1249              :         this->store(__t);
+    1250              :         return __t;
+    1251              :       }
+    1252              : 
+    1253              :       bool
+    1254              :       is_lock_free() const volatile noexcept
+    1255              :       { return __atomic_impl::is_lock_free<sizeof(_Fp), _S_alignment>(); }
+    1256              : 
+    1257              :       bool
+    1258              :       is_lock_free() const noexcept
+    1259              :       { return __atomic_impl::is_lock_free<sizeof(_Fp), _S_alignment>(); }
+    1260              : 
+    1261              :       void
+    1262              :       store(_Fp __t, memory_order __m = memory_order_seq_cst) volatile noexcept
+    1263              :       { __atomic_impl::store(&_M_fp, __t, __m); }
+    1264              : 
+    1265              :       void
+    1266              :       store(_Fp __t, memory_order __m = memory_order_seq_cst) noexcept
+    1267              :       { __atomic_impl::store(&_M_fp, __t, __m); }
+    1268              : 
+    1269              :       _Fp
+    1270              :       load(memory_order __m = memory_order_seq_cst) const volatile noexcept
+    1271              :       { return __atomic_impl::load(&_M_fp, __m); }
+    1272              : 
+    1273              :       _Fp
+    1274              :       load(memory_order __m = memory_order_seq_cst) const noexcept
+    1275              :       { return __atomic_impl::load(&_M_fp, __m); }
+    1276              : 
+    1277              :       operator _Fp() const volatile noexcept { return this->load(); }
+    1278              :       operator _Fp() const noexcept { return this->load(); }
+    1279              : 
+    1280              :       _Fp
+    1281              :       exchange(_Fp __desired,
+    1282              :                memory_order __m = memory_order_seq_cst) volatile noexcept
+    1283              :       { return __atomic_impl::exchange(&_M_fp, __desired, __m); }
+    1284              : 
+    1285              :       _Fp
+    1286              :       exchange(_Fp __desired,
+    1287              :                memory_order __m = memory_order_seq_cst) noexcept
+    1288              :       { return __atomic_impl::exchange(&_M_fp, __desired, __m); }
+    1289              : 
+    1290              :       bool
+    1291              :       compare_exchange_weak(_Fp& __expected, _Fp __desired,
+    1292              :                             memory_order __success,
+    1293              :                             memory_order __failure) noexcept
+    1294              :       {
+    1295              :         return __atomic_impl::compare_exchange_weak(&_M_fp,
+    1296              :                                                     __expected, __desired,
+    1297              :                                                     __success, __failure);
+    1298              :       }
+    1299              : 
+    1300              :       bool
+    1301              :       compare_exchange_weak(_Fp& __expected, _Fp __desired,
+    1302              :                             memory_order __success,
+    1303              :                             memory_order __failure) volatile noexcept
+    1304              :       {
+    1305              :         return __atomic_impl::compare_exchange_weak(&_M_fp,
+    1306              :                                                     __expected, __desired,
+    1307              :                                                     __success, __failure);
+    1308              :       }
+    1309              : 
+    1310              :       bool
+    1311              :       compare_exchange_strong(_Fp& __expected, _Fp __desired,
+    1312              :                               memory_order __success,
+    1313              :                               memory_order __failure) noexcept
+    1314              :       {
+    1315              :         return __atomic_impl::compare_exchange_strong(&_M_fp,
+    1316              :                                                       __expected, __desired,
+    1317              :                                                       __success, __failure);
+    1318              :       }
+    1319              : 
+    1320              :       bool
+    1321              :       compare_exchange_strong(_Fp& __expected, _Fp __desired,
+    1322              :                               memory_order __success,
+    1323              :                               memory_order __failure) volatile noexcept
+    1324              :       {
+    1325              :         return __atomic_impl::compare_exchange_strong(&_M_fp,
+    1326              :                                                       __expected, __desired,
+    1327              :                                                       __success, __failure);
+    1328              :       }
+    1329              : 
+    1330              :       bool
+    1331              :       compare_exchange_weak(_Fp& __expected, _Fp __desired,
+    1332              :                             memory_order __order = memory_order_seq_cst)
+    1333              :       noexcept
+    1334              :       {
+    1335              :         return compare_exchange_weak(__expected, __desired, __order,
+    1336              :                                      __cmpexch_failure_order(__order));
+    1337              :       }
+    1338              : 
+    1339              :       bool
+    1340              :       compare_exchange_weak(_Fp& __expected, _Fp __desired,
+    1341              :                             memory_order __order = memory_order_seq_cst)
+    1342              :       volatile noexcept
+    1343              :       {
+    1344              :         return compare_exchange_weak(__expected, __desired, __order,
+    1345              :                                      __cmpexch_failure_order(__order));
+    1346              :       }
+    1347              : 
+    1348              :       bool
+    1349              :       compare_exchange_strong(_Fp& __expected, _Fp __desired,
+    1350              :                               memory_order __order = memory_order_seq_cst)
+    1351              :       noexcept
+    1352              :       {
+    1353              :         return compare_exchange_strong(__expected, __desired, __order,
+    1354              :                                        __cmpexch_failure_order(__order));
+    1355              :       }
+    1356              : 
+    1357              :       bool
+    1358              :       compare_exchange_strong(_Fp& __expected, _Fp __desired,
+    1359              :                               memory_order __order = memory_order_seq_cst)
+    1360              :       volatile noexcept
+    1361              :       {
+    1362              :         return compare_exchange_strong(__expected, __desired, __order,
+    1363              :                                        __cmpexch_failure_order(__order));
+    1364              :       }
+    1365              : 
+    1366              : #if __cpp_lib_atomic_wait
+    1367              :       _GLIBCXX_ALWAYS_INLINE void
+    1368              :       wait(_Fp __old, memory_order __m = memory_order_seq_cst) const noexcept
+    1369              :       { __atomic_impl::wait(&_M_fp, __old, __m); }
+    1370              : 
+    1371              :       // TODO add const volatile overload
+    1372              : 
+    1373              :       _GLIBCXX_ALWAYS_INLINE void
+    1374              :       notify_one() const noexcept
+    1375              :       { __atomic_impl::notify_one(&_M_fp); }
+    1376              : 
+    1377              :       // TODO add const volatile overload
+    1378              : 
+    1379              :       _GLIBCXX_ALWAYS_INLINE void
+    1380              :       notify_all() const noexcept
+    1381              :       { __atomic_impl::notify_all(&_M_fp); }
+    1382              : 
+    1383              :       // TODO add const volatile overload
+    1384              : #endif // __cpp_lib_atomic_wait
+    1385              : 
+    1386              :       value_type
+    1387              :       fetch_add(value_type __i,
+    1388              :                 memory_order __m = memory_order_seq_cst) noexcept
+    1389              :       { return __atomic_impl::__fetch_add_flt(&_M_fp, __i, __m); }
+    1390              : 
+    1391              :       value_type
+    1392              :       fetch_add(value_type __i,
+    1393              :                 memory_order __m = memory_order_seq_cst) volatile noexcept
+    1394              :       { return __atomic_impl::__fetch_add_flt(&_M_fp, __i, __m); }
+    1395              : 
+    1396              :       value_type
+    1397              :       fetch_sub(value_type __i,
+    1398              :                 memory_order __m = memory_order_seq_cst) noexcept
+    1399              :       { return __atomic_impl::__fetch_sub_flt(&_M_fp, __i, __m); }
+    1400              : 
+    1401              :       value_type
+    1402              :       fetch_sub(value_type __i,
+    1403              :                 memory_order __m = memory_order_seq_cst) volatile noexcept
+    1404              :       { return __atomic_impl::__fetch_sub_flt(&_M_fp, __i, __m); }
+    1405              : 
+    1406              :       value_type
+    1407              :       operator+=(value_type __i) noexcept
+    1408              :       { return __atomic_impl::__add_fetch_flt(&_M_fp, __i); }
+    1409              : 
+    1410              :       value_type
+    1411              :       operator+=(value_type __i) volatile noexcept
+    1412              :       { return __atomic_impl::__add_fetch_flt(&_M_fp, __i); }
+    1413              : 
+    1414              :       value_type
+    1415              :       operator-=(value_type __i) noexcept
+    1416              :       { return __atomic_impl::__sub_fetch_flt(&_M_fp, __i); }
+    1417              : 
+    1418              :       value_type
+    1419              :       operator-=(value_type __i) volatile noexcept
+    1420              :       { return __atomic_impl::__sub_fetch_flt(&_M_fp, __i); }
+    1421              : 
+    1422              :     private:
+    1423              :       alignas(_S_alignment) _Fp _M_fp _GLIBCXX20_INIT(0);
+    1424              :     };
+    1425              : #undef _GLIBCXX20_INIT
+    1426              : 
+    1427              :   template<typename _Tp,
+    1428              :            bool = is_integral_v<_Tp>, bool = is_floating_point_v<_Tp>>
+    1429              :     struct __atomic_ref;
+    1430              : 
+    1431              :   // base class for non-integral, non-floating-point, non-pointer types
+    1432              :   template<typename _Tp>
+    1433              :     struct __atomic_ref<_Tp, false, false>
+    1434              :     {
+    1435              :       static_assert(is_trivially_copyable_v<_Tp>);
+    1436              : 
+    1437              :       // 1/2/4/8/16-byte types must be aligned to at least their size.
+    1438              :       static constexpr int _S_min_alignment
+    1439              :         = (sizeof(_Tp) & (sizeof(_Tp) - 1)) || sizeof(_Tp) > 16
+    1440              :         ? 0 : sizeof(_Tp);
+    1441              : 
+    1442              :     public:
+    1443              :       using value_type = _Tp;
+    1444              : 
+    1445              :       static constexpr bool is_always_lock_free
+    1446              :         = __atomic_always_lock_free(sizeof(_Tp), 0);
+    1447              : 
+    1448              :       static constexpr size_t required_alignment
+    1449              :         = _S_min_alignment > alignof(_Tp) ? _S_min_alignment : alignof(_Tp);
+    1450              : 
+    1451              :       __atomic_ref& operator=(const __atomic_ref&) = delete;
+    1452              : 
+    1453              :       explicit
+    1454              :       __atomic_ref(_Tp& __t) : _M_ptr(std::__addressof(__t))
+    1455              :       { __glibcxx_assert(((uintptr_t)_M_ptr % required_alignment) == 0); }
+    1456              : 
+    1457              :       __atomic_ref(const __atomic_ref&) noexcept = default;
+    1458              : 
+    1459              :       _Tp
+    1460              :       operator=(_Tp __t) const noexcept
+    1461              :       {
+    1462              :         this->store(__t);
+    1463              :         return __t;
+    1464              :       }
+    1465              : 
+    1466              :       operator _Tp() const noexcept { return this->load(); }
+    1467              : 
+    1468              :       bool
+    1469              :       is_lock_free() const noexcept
+    1470              :       { return __atomic_impl::is_lock_free<sizeof(_Tp), required_alignment>(); }
+    1471              : 
+    1472              :       void
+    1473              :       store(_Tp __t, memory_order __m = memory_order_seq_cst) const noexcept
+    1474              :       { __atomic_impl::store(_M_ptr, __t, __m); }
+    1475              : 
+    1476              :       _Tp
+    1477              :       load(memory_order __m = memory_order_seq_cst) const noexcept
+    1478              :       { return __atomic_impl::load(_M_ptr, __m); }
+    1479              : 
+    1480              :       _Tp
+    1481              :       exchange(_Tp __desired, memory_order __m = memory_order_seq_cst)
+    1482              :       const noexcept
+    1483              :       { return __atomic_impl::exchange(_M_ptr, __desired, __m); }
+    1484              : 
+    1485              :       bool
+    1486              :       compare_exchange_weak(_Tp& __expected, _Tp __desired,
+    1487              :                             memory_order __success,
+    1488              :                             memory_order __failure) const noexcept
+    1489              :       {
+    1490              :         return __atomic_impl::compare_exchange_weak(_M_ptr,
+    1491              :                                                     __expected, __desired,
+    1492              :                                                     __success, __failure);
+    1493              :       }
+    1494              : 
+    1495              :       bool
+    1496              :       compare_exchange_strong(_Tp& __expected, _Tp __desired,
+    1497              :                             memory_order __success,
+    1498              :                             memory_order __failure) const noexcept
+    1499              :       {
+    1500              :         return __atomic_impl::compare_exchange_strong(_M_ptr,
+    1501              :                                                       __expected, __desired,
+    1502              :                                                       __success, __failure);
+    1503              :       }
+    1504              : 
+    1505              :       bool
+    1506              :       compare_exchange_weak(_Tp& __expected, _Tp __desired,
+    1507              :                             memory_order __order = memory_order_seq_cst)
+    1508              :       const noexcept
+    1509              :       {
+    1510              :         return compare_exchange_weak(__expected, __desired, __order,
+    1511              :                                      __cmpexch_failure_order(__order));
+    1512              :       }
+    1513              : 
+    1514              :       bool
+    1515              :       compare_exchange_strong(_Tp& __expected, _Tp __desired,
+    1516              :                               memory_order __order = memory_order_seq_cst)
+    1517              :       const noexcept
+    1518              :       {
+    1519              :         return compare_exchange_strong(__expected, __desired, __order,
+    1520              :                                        __cmpexch_failure_order(__order));
+    1521              :       }
+    1522              : 
+    1523              : #if __cpp_lib_atomic_wait
+    1524              :       _GLIBCXX_ALWAYS_INLINE void
+    1525              :       wait(_Tp __old, memory_order __m = memory_order_seq_cst) const noexcept
+    1526              :       { __atomic_impl::wait(_M_ptr, __old, __m); }
+    1527              : 
+    1528              :       // TODO add const volatile overload
+    1529              : 
+    1530              :       _GLIBCXX_ALWAYS_INLINE void
+    1531              :       notify_one() const noexcept
+    1532              :       { __atomic_impl::notify_one(_M_ptr); }
+    1533              : 
+    1534              :       // TODO add const volatile overload
+    1535              : 
+    1536              :       _GLIBCXX_ALWAYS_INLINE void
+    1537              :       notify_all() const noexcept
+    1538              :       { __atomic_impl::notify_all(_M_ptr); }
+    1539              : 
+    1540              :       // TODO add const volatile overload
+    1541              : #endif // __cpp_lib_atomic_wait
+    1542              : 
+    1543              :     private:
+    1544              :       _Tp* _M_ptr;
+    1545              :     };
+    1546              : 
+    1547              :   // base class for atomic_ref<integral-type>
+    1548              :   template<typename _Tp>
+    1549              :     struct __atomic_ref<_Tp, true, false>
+    1550              :     {
+    1551              :       static_assert(is_integral_v<_Tp>);
+    1552              : 
+    1553              :     public:
+    1554              :       using value_type = _Tp;
+    1555              :       using difference_type = value_type;
+    1556              : 
+    1557              :       static constexpr bool is_always_lock_free
+    1558              :         = __atomic_always_lock_free(sizeof(_Tp), 0);
+    1559              : 
+    1560              :       static constexpr size_t required_alignment
+    1561              :         = sizeof(_Tp) > alignof(_Tp) ? sizeof(_Tp) : alignof(_Tp);
+    1562              : 
+    1563              :       __atomic_ref() = delete;
+    1564              :       __atomic_ref& operator=(const __atomic_ref&) = delete;
+    1565              : 
+    1566              :       explicit
+    1567              :       __atomic_ref(_Tp& __t) : _M_ptr(&__t)
+    1568              :       { __glibcxx_assert(((uintptr_t)_M_ptr % required_alignment) == 0); }
+    1569              : 
+    1570              :       __atomic_ref(const __atomic_ref&) noexcept = default;
+    1571              : 
+    1572              :       _Tp
+    1573              :       operator=(_Tp __t) const noexcept
+    1574              :       {
+    1575              :         this->store(__t);
+    1576              :         return __t;
+    1577              :       }
+    1578              : 
+    1579              :       operator _Tp() const noexcept { return this->load(); }
+    1580              : 
+    1581              :       bool
+    1582              :       is_lock_free() const noexcept
+    1583              :       {
+    1584              :         return __atomic_impl::is_lock_free<sizeof(_Tp), required_alignment>();
+    1585              :       }
+    1586              : 
+    1587              :       void
+    1588              :       store(_Tp __t, memory_order __m = memory_order_seq_cst) const noexcept
+    1589              :       { __atomic_impl::store(_M_ptr, __t, __m); }
+    1590              : 
+    1591              :       _Tp
+    1592              :       load(memory_order __m = memory_order_seq_cst) const noexcept
+    1593              :       { return __atomic_impl::load(_M_ptr, __m); }
+    1594              : 
+    1595              :       _Tp
+    1596              :       exchange(_Tp __desired,
+    1597              :                memory_order __m = memory_order_seq_cst) const noexcept
+    1598              :       { return __atomic_impl::exchange(_M_ptr, __desired, __m); }
+    1599              : 
+    1600              :       bool
+    1601              :       compare_exchange_weak(_Tp& __expected, _Tp __desired,
+    1602              :                             memory_order __success,
+    1603              :                             memory_order __failure) const noexcept
+    1604              :       {
+    1605              :         return __atomic_impl::compare_exchange_weak(_M_ptr,
+    1606              :                                                     __expected, __desired,
+    1607              :                                                     __success, __failure);
+    1608              :       }
+    1609              : 
+    1610              :       bool
+    1611              :       compare_exchange_strong(_Tp& __expected, _Tp __desired,
+    1612              :                               memory_order __success,
+    1613              :                               memory_order __failure) const noexcept
+    1614              :       {
+    1615              :         return __atomic_impl::compare_exchange_strong(_M_ptr,
+    1616              :                                                       __expected, __desired,
+    1617              :                                                       __success, __failure);
+    1618              :       }
+    1619              : 
+    1620              :       bool
+    1621              :       compare_exchange_weak(_Tp& __expected, _Tp __desired,
+    1622              :                             memory_order __order = memory_order_seq_cst)
+    1623              :       const noexcept
+    1624              :       {
+    1625              :         return compare_exchange_weak(__expected, __desired, __order,
+    1626              :                                      __cmpexch_failure_order(__order));
+    1627              :       }
+    1628              : 
+    1629              :       bool
+    1630              :       compare_exchange_strong(_Tp& __expected, _Tp __desired,
+    1631              :                               memory_order __order = memory_order_seq_cst)
+    1632              :       const noexcept
+    1633              :       {
+    1634              :         return compare_exchange_strong(__expected, __desired, __order,
+    1635              :                                        __cmpexch_failure_order(__order));
+    1636              :       }
+    1637              : 
+    1638              : #if __cpp_lib_atomic_wait
+    1639              :       _GLIBCXX_ALWAYS_INLINE void
+    1640              :       wait(_Tp __old, memory_order __m = memory_order_seq_cst) const noexcept
+    1641              :       { __atomic_impl::wait(_M_ptr, __old, __m); }
+    1642              : 
+    1643              :       // TODO add const volatile overload
+    1644              : 
+    1645              :       _GLIBCXX_ALWAYS_INLINE void
+    1646              :       notify_one() const noexcept
+    1647              :       { __atomic_impl::notify_one(_M_ptr); }
+    1648              : 
+    1649              :       // TODO add const volatile overload
+    1650              : 
+    1651              :       _GLIBCXX_ALWAYS_INLINE void
+    1652              :       notify_all() const noexcept
+    1653              :       { __atomic_impl::notify_all(_M_ptr); }
+    1654              : 
+    1655              :       // TODO add const volatile overload
+    1656              : #endif // __cpp_lib_atomic_wait 
+    1657              : 
+    1658              :       value_type
+    1659              :       fetch_add(value_type __i,
+    1660              :                 memory_order __m = memory_order_seq_cst) const noexcept
+    1661              :       { return __atomic_impl::fetch_add(_M_ptr, __i, __m); }
+    1662              : 
+    1663              :       value_type
+    1664              :       fetch_sub(value_type __i,
+    1665              :                 memory_order __m = memory_order_seq_cst) const noexcept
+    1666              :       { return __atomic_impl::fetch_sub(_M_ptr, __i, __m); }
+    1667              : 
+    1668              :       value_type
+    1669              :       fetch_and(value_type __i,
+    1670              :                 memory_order __m = memory_order_seq_cst) const noexcept
+    1671              :       { return __atomic_impl::fetch_and(_M_ptr, __i, __m); }
+    1672              : 
+    1673              :       value_type
+    1674              :       fetch_or(value_type __i,
+    1675              :                memory_order __m = memory_order_seq_cst) const noexcept
+    1676              :       { return __atomic_impl::fetch_or(_M_ptr, __i, __m); }
+    1677              : 
+    1678              :       value_type
+    1679              :       fetch_xor(value_type __i,
+    1680              :                 memory_order __m = memory_order_seq_cst) const noexcept
+    1681              :       { return __atomic_impl::fetch_xor(_M_ptr, __i, __m); }
+    1682              : 
+    1683              :       _GLIBCXX_ALWAYS_INLINE value_type
+    1684              :       operator++(int) const noexcept
+    1685              :       { return fetch_add(1); }
+    1686              : 
+    1687              :       _GLIBCXX_ALWAYS_INLINE value_type
+    1688              :       operator--(int) const noexcept
+    1689              :       { return fetch_sub(1); }
+    1690              : 
+    1691              :       value_type
+    1692              :       operator++() const noexcept
+    1693              :       { return __atomic_impl::__add_fetch(_M_ptr, value_type(1)); }
+    1694              : 
+    1695              :       value_type
+    1696              :       operator--() const noexcept
+    1697              :       { return __atomic_impl::__sub_fetch(_M_ptr, value_type(1)); }
+    1698              : 
+    1699              :       value_type
+    1700              :       operator+=(value_type __i) const noexcept
+    1701              :       { return __atomic_impl::__add_fetch(_M_ptr, __i); }
+    1702              : 
+    1703              :       value_type
+    1704              :       operator-=(value_type __i) const noexcept
+    1705              :       { return __atomic_impl::__sub_fetch(_M_ptr, __i); }
+    1706              : 
+    1707              :       value_type
+    1708              :       operator&=(value_type __i) const noexcept
+    1709              :       { return __atomic_impl::__and_fetch(_M_ptr, __i); }
+    1710              : 
+    1711              :       value_type
+    1712              :       operator|=(value_type __i) const noexcept
+    1713              :       { return __atomic_impl::__or_fetch(_M_ptr, __i); }
+    1714              : 
+    1715              :       value_type
+    1716              :       operator^=(value_type __i) const noexcept
+    1717              :       { return __atomic_impl::__xor_fetch(_M_ptr, __i); }
+    1718              : 
+    1719              :     private:
+    1720              :       _Tp* _M_ptr;
+    1721              :     };
+    1722              : 
+    1723              :   // base class for atomic_ref<floating-point-type>
+    1724              :   template<typename _Fp>
+    1725              :     struct __atomic_ref<_Fp, false, true>
+    1726              :     {
+    1727              :       static_assert(is_floating_point_v<_Fp>);
+    1728              : 
+    1729              :     public:
+    1730              :       using value_type = _Fp;
+    1731              :       using difference_type = value_type;
+    1732              : 
+    1733              :       static constexpr bool is_always_lock_free
+    1734              :         = __atomic_always_lock_free(sizeof(_Fp), 0);
+    1735              : 
+    1736              :       static constexpr size_t required_alignment = __alignof__(_Fp);
+    1737              : 
+    1738              :       __atomic_ref() = delete;
+    1739              :       __atomic_ref& operator=(const __atomic_ref&) = delete;
+    1740              : 
+    1741              :       explicit
+    1742              :       __atomic_ref(_Fp& __t) : _M_ptr(&__t)
+    1743              :       { __glibcxx_assert(((uintptr_t)_M_ptr % required_alignment) == 0); }
+    1744              : 
+    1745              :       __atomic_ref(const __atomic_ref&) noexcept = default;
+    1746              : 
+    1747              :       _Fp
+    1748              :       operator=(_Fp __t) const noexcept
+    1749              :       {
+    1750              :         this->store(__t);
+    1751              :         return __t;
+    1752              :       }
+    1753              : 
+    1754              :       operator _Fp() const noexcept { return this->load(); }
+    1755              : 
+    1756              :       bool
+    1757              :       is_lock_free() const noexcept
+    1758              :       {
+    1759              :         return __atomic_impl::is_lock_free<sizeof(_Fp), required_alignment>();
+    1760              :       }
+    1761              : 
+    1762              :       void
+    1763              :       store(_Fp __t, memory_order __m = memory_order_seq_cst) const noexcept
+    1764              :       { __atomic_impl::store(_M_ptr, __t, __m); }
+    1765              : 
+    1766              :       _Fp
+    1767              :       load(memory_order __m = memory_order_seq_cst) const noexcept
+    1768              :       { return __atomic_impl::load(_M_ptr, __m); }
+    1769              : 
+    1770              :       _Fp
+    1771              :       exchange(_Fp __desired,
+    1772              :                memory_order __m = memory_order_seq_cst) const noexcept
+    1773              :       { return __atomic_impl::exchange(_M_ptr, __desired, __m); }
+    1774              : 
+    1775              :       bool
+    1776              :       compare_exchange_weak(_Fp& __expected, _Fp __desired,
+    1777              :                             memory_order __success,
+    1778              :                             memory_order __failure) const noexcept
+    1779              :       {
+    1780              :         return __atomic_impl::compare_exchange_weak(_M_ptr,
+    1781              :                                                     __expected, __desired,
+    1782              :                                                     __success, __failure);
+    1783              :       }
+    1784              : 
+    1785              :       bool
+    1786              :       compare_exchange_strong(_Fp& __expected, _Fp __desired,
+    1787              :                             memory_order __success,
+    1788              :                             memory_order __failure) const noexcept
+    1789              :       {
+    1790              :         return __atomic_impl::compare_exchange_strong(_M_ptr,
+    1791              :                                                       __expected, __desired,
+    1792              :                                                       __success, __failure);
+    1793              :       }
+    1794              : 
+    1795              :       bool
+    1796              :       compare_exchange_weak(_Fp& __expected, _Fp __desired,
+    1797              :                             memory_order __order = memory_order_seq_cst)
+    1798              :       const noexcept
+    1799              :       {
+    1800              :         return compare_exchange_weak(__expected, __desired, __order,
+    1801              :                                      __cmpexch_failure_order(__order));
+    1802              :       }
+    1803              : 
+    1804              :       bool
+    1805              :       compare_exchange_strong(_Fp& __expected, _Fp __desired,
+    1806              :                               memory_order __order = memory_order_seq_cst)
+    1807              :       const noexcept
+    1808              :       {
+    1809              :         return compare_exchange_strong(__expected, __desired, __order,
+    1810              :                                        __cmpexch_failure_order(__order));
+    1811              :       }
+    1812              : 
+    1813              : #if __cpp_lib_atomic_wait
+    1814              :       _GLIBCXX_ALWAYS_INLINE void
+    1815              :       wait(_Fp __old, memory_order __m = memory_order_seq_cst) const noexcept
+    1816              :       { __atomic_impl::wait(_M_ptr, __old, __m); }
+    1817              : 
+    1818              :       // TODO add const volatile overload
+    1819              : 
+    1820              :       _GLIBCXX_ALWAYS_INLINE void
+    1821              :       notify_one() const noexcept
+    1822              :       { __atomic_impl::notify_one(_M_ptr); }
+    1823              : 
+    1824              :       // TODO add const volatile overload
+    1825              : 
+    1826              :       _GLIBCXX_ALWAYS_INLINE void
+    1827              :       notify_all() const noexcept
+    1828              :       { __atomic_impl::notify_all(_M_ptr); }
+    1829              : 
+    1830              :       // TODO add const volatile overload
+    1831              : #endif // __cpp_lib_atomic_wait
+    1832              : 
+    1833              :       value_type
+    1834              :       fetch_add(value_type __i,
+    1835              :                 memory_order __m = memory_order_seq_cst) const noexcept
+    1836              :       { return __atomic_impl::__fetch_add_flt(_M_ptr, __i, __m); }
+    1837              : 
+    1838              :       value_type
+    1839              :       fetch_sub(value_type __i,
+    1840              :                 memory_order __m = memory_order_seq_cst) const noexcept
+    1841              :       { return __atomic_impl::__fetch_sub_flt(_M_ptr, __i, __m); }
+    1842              : 
+    1843              :       value_type
+    1844              :       operator+=(value_type __i) const noexcept
+    1845              :       { return __atomic_impl::__add_fetch_flt(_M_ptr, __i); }
+    1846              : 
+    1847              :       value_type
+    1848              :       operator-=(value_type __i) const noexcept
+    1849              :       { return __atomic_impl::__sub_fetch_flt(_M_ptr, __i); }
+    1850              : 
+    1851              :     private:
+    1852              :       _Fp* _M_ptr;
+    1853              :     };
+    1854              : 
+    1855              :   // base class for atomic_ref<pointer-type>
+    1856              :   template<typename _Tp>
+    1857              :     struct __atomic_ref<_Tp*, false, false>
+    1858              :     {
+    1859              :     public:
+    1860              :       using value_type = _Tp*;
+    1861              :       using difference_type = ptrdiff_t;
+    1862              : 
+    1863              :       static constexpr bool is_always_lock_free = ATOMIC_POINTER_LOCK_FREE == 2;
+    1864              : 
+    1865              :       static constexpr size_t required_alignment = __alignof__(_Tp*);
+    1866              : 
+    1867              :       __atomic_ref() = delete;
+    1868              :       __atomic_ref& operator=(const __atomic_ref&) = delete;
+    1869              : 
+    1870              :       explicit
+    1871              :       __atomic_ref(_Tp*& __t) : _M_ptr(std::__addressof(__t))
+    1872              :       { __glibcxx_assert(((uintptr_t)_M_ptr % required_alignment) == 0); }
+    1873              : 
+    1874              :       __atomic_ref(const __atomic_ref&) noexcept = default;
+    1875              : 
+    1876              :       _Tp*
+    1877              :       operator=(_Tp* __t) const noexcept
+    1878              :       {
+    1879              :         this->store(__t);
+    1880              :         return __t;
+    1881              :       }
+    1882              : 
+    1883              :       operator _Tp*() const noexcept { return this->load(); }
+    1884              : 
+    1885              :       bool
+    1886              :       is_lock_free() const noexcept
+    1887              :       {
+    1888              :         return __atomic_impl::is_lock_free<sizeof(_Tp*), required_alignment>();
+    1889              :       }
+    1890              : 
+    1891              :       void
+    1892              :       store(_Tp* __t, memory_order __m = memory_order_seq_cst) const noexcept
+    1893              :       { __atomic_impl::store(_M_ptr, __t, __m); }
+    1894              : 
+    1895              :       _Tp*
+    1896              :       load(memory_order __m = memory_order_seq_cst) const noexcept
+    1897              :       { return __atomic_impl::load(_M_ptr, __m); }
+    1898              : 
+    1899              :       _Tp*
+    1900              :       exchange(_Tp* __desired,
+    1901              :                memory_order __m = memory_order_seq_cst) const noexcept
+    1902              :       { return __atomic_impl::exchange(_M_ptr, __desired, __m); }
+    1903              : 
+    1904              :       bool
+    1905              :       compare_exchange_weak(_Tp*& __expected, _Tp* __desired,
+    1906              :                             memory_order __success,
+    1907              :                             memory_order __failure) const noexcept
+    1908              :       {
+    1909              :         return __atomic_impl::compare_exchange_weak(_M_ptr,
+    1910              :                                                     __expected, __desired,
+    1911              :                                                     __success, __failure);
+    1912              :       }
+    1913              : 
+    1914              :       bool
+    1915              :       compare_exchange_strong(_Tp*& __expected, _Tp* __desired,
+    1916              :                             memory_order __success,
+    1917              :                             memory_order __failure) const noexcept
+    1918              :       {
+    1919              :         return __atomic_impl::compare_exchange_strong(_M_ptr,
+    1920              :                                                       __expected, __desired,
+    1921              :                                                       __success, __failure);
+    1922              :       }
+    1923              : 
+    1924              :       bool
+    1925              :       compare_exchange_weak(_Tp*& __expected, _Tp* __desired,
+    1926              :                             memory_order __order = memory_order_seq_cst)
+    1927              :       const noexcept
+    1928              :       {
+    1929              :         return compare_exchange_weak(__expected, __desired, __order,
+    1930              :                                      __cmpexch_failure_order(__order));
+    1931              :       }
+    1932              : 
+    1933              :       bool
+    1934              :       compare_exchange_strong(_Tp*& __expected, _Tp* __desired,
+    1935              :                               memory_order __order = memory_order_seq_cst)
+    1936              :       const noexcept
+    1937              :       {
+    1938              :         return compare_exchange_strong(__expected, __desired, __order,
+    1939              :                                        __cmpexch_failure_order(__order));
+    1940              :       }
+    1941              : 
+    1942              : #if __cpp_lib_atomic_wait
+    1943              :       _GLIBCXX_ALWAYS_INLINE void
+    1944              :       wait(_Tp* __old, memory_order __m = memory_order_seq_cst) const noexcept
+    1945              :       { __atomic_impl::wait(_M_ptr, __old, __m); }
+    1946              : 
+    1947              :       // TODO add const volatile overload
+    1948              : 
+    1949              :       _GLIBCXX_ALWAYS_INLINE void
+    1950              :       notify_one() const noexcept
+    1951              :       { __atomic_impl::notify_one(_M_ptr); }
+    1952              : 
+    1953              :       // TODO add const volatile overload
+    1954              : 
+    1955              :       _GLIBCXX_ALWAYS_INLINE void
+    1956              :       notify_all() const noexcept
+    1957              :       { __atomic_impl::notify_all(_M_ptr); }
+    1958              : 
+    1959              :       // TODO add const volatile overload
+    1960              : #endif // __cpp_lib_atomic_wait
+    1961              : 
+    1962              :       _GLIBCXX_ALWAYS_INLINE value_type
+    1963              :       fetch_add(difference_type __d,
+    1964              :                 memory_order __m = memory_order_seq_cst) const noexcept
+    1965              :       { return __atomic_impl::fetch_add(_M_ptr, _S_type_size(__d), __m); }
+    1966              : 
+    1967              :       _GLIBCXX_ALWAYS_INLINE value_type
+    1968              :       fetch_sub(difference_type __d,
+    1969              :                 memory_order __m = memory_order_seq_cst) const noexcept
+    1970              :       { return __atomic_impl::fetch_sub(_M_ptr, _S_type_size(__d), __m); }
+    1971              : 
+    1972              :       value_type
+    1973              :       operator++(int) const noexcept
+    1974              :       { return fetch_add(1); }
+    1975              : 
+    1976              :       value_type
+    1977              :       operator--(int) const noexcept
+    1978              :       { return fetch_sub(1); }
+    1979              : 
+    1980              :       value_type
+    1981              :       operator++() const noexcept
+    1982              :       {
+    1983              :         return __atomic_impl::__add_fetch(_M_ptr, _S_type_size(1));
+    1984              :       }
+    1985              : 
+    1986              :       value_type
+    1987              :       operator--() const noexcept
+    1988              :       {
+    1989              :         return __atomic_impl::__sub_fetch(_M_ptr, _S_type_size(1));
+    1990              :       }
+    1991              : 
+    1992              :       value_type
+    1993              :       operator+=(difference_type __d) const noexcept
+    1994              :       {
+    1995              :         return __atomic_impl::__add_fetch(_M_ptr, _S_type_size(__d));
+    1996              :       }
+    1997              : 
+    1998              :       value_type
+    1999              :       operator-=(difference_type __d) const noexcept
+    2000              :       {
+    2001              :         return __atomic_impl::__sub_fetch(_M_ptr, _S_type_size(__d));
+    2002              :       }
+    2003              : 
+    2004              :     private:
+    2005              :       static constexpr ptrdiff_t
+    2006              :       _S_type_size(ptrdiff_t __d) noexcept
+    2007              :       {
+    2008              :         static_assert(is_object_v<_Tp>);
+    2009              :         return __d * sizeof(_Tp);
+    2010              :       }
+    2011              : 
+    2012              :       _Tp** _M_ptr;
+    2013              :     };
+    2014              : #endif // C++2a
+    2015              : 
+    2016              :   /// @endcond
+    2017              : 
+    2018              :   /// @} group atomics
+    2019              : 
+    2020              : _GLIBCXX_END_NAMESPACE_VERSION
+    2021              : } // namespace std
+    2022              : 
+    2023              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/basic_string.h.func-c.html b/html/usr/include/c++/13/bits/basic_string.h.func-c.html new file mode 100644 index 0000000..2ecb57d --- /dev/null +++ b/html/usr/include/c++/13/bits/basic_string.h.func-c.html @@ -0,0 +1,292 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/basic_string.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - basic_string.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:74.8 %10780
Test Date:2024-04-30 13:17:26Functions:80.0 %3024
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt7__cxx119to_stringEd0
_ZNSt7__cxx119to_stringEe0
_ZNSt7__cxx119to_stringEx0
_ZNSt7__cxx119to_stringEy0
_ZStleIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EESA_0
_ZNSt7__cxx119to_stringEf4
_ZNSt7__cxx119to_stringEl12
_ZNSt7__cxx119to_stringEj38
_ZNSt7__cxx119to_stringEm44
_ZStneIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_64
_ZNSt8literals15string_literalsli1sB5cxx11EPKcm96
_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_178
_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_202
_ZStltIcSt11char_traitsIcESaIcEEbPKT_RKNSt7__cxx1112basic_stringIS3_T0_T1_EE256
_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_332
_ZStltIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_412
_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_1546
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IPcvEET_S7_RKS3_2632
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IN9__gnu_cxx17__normal_iteratorIPcS4_EEvEET_SA_RKS3_0
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IPKcvEET_S8_RKS3_228
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IPcvEET_S7_RKS3_2404
_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_3600
_ZSt12__str_concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_PKNS6_10value_typeENS6_9size_typeES9_SA_RKNS6_14allocator_typeE3802
_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_4660
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_6364
_ZNKSt15__str_hash_baseIcSaIcENSt7__cxx1112basic_stringIcSt11char_traitsIcES0_EEEclERKS5_66742
_ZNSt7__cxx119to_stringEi478034
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEmcRKS3_478156
_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_2022226
_ZStltIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EESA_754700098
_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EESA_847645632
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/basic_string.h.func.html b/html/usr/include/c++/13/bits/basic_string.h.func.html new file mode 100644 index 0000000..b8c4049 --- /dev/null +++ b/html/usr/include/c++/13/bits/basic_string.h.func.html @@ -0,0 +1,292 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/basic_string.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - basic_string.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:74.8 %10780
Test Date:2024-04-30 13:17:26Functions:80.0 %3024
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt15__str_hash_baseIcSaIcENSt7__cxx1112basic_stringIcSt11char_traitsIcES0_EEEclERKS5_66742
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IPcvEET_S7_RKS3_2632
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IN9__gnu_cxx17__normal_iteratorIPcS4_EEvEET_SA_RKS3_0
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IPKcvEET_S8_RKS3_228
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IPcvEET_S7_RKS3_2404
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_6364
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEmcRKS3_478156
_ZNSt7__cxx119to_stringEd0
_ZNSt7__cxx119to_stringEe0
_ZNSt7__cxx119to_stringEf4
_ZNSt7__cxx119to_stringEi478034
_ZNSt7__cxx119to_stringEj38
_ZNSt7__cxx119to_stringEl12
_ZNSt7__cxx119to_stringEm44
_ZNSt7__cxx119to_stringEx0
_ZNSt7__cxx119to_stringEy0
_ZNSt8literals15string_literalsli1sB5cxx11EPKcm96
_ZSt12__str_concatINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_PKNS6_10value_typeENS6_9size_typeES9_SA_RKNS6_14allocator_typeE3802
_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_2022226
_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EESA_847645632
_ZStleIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EESA_0
_ZStltIcSt11char_traitsIcESaIcEEbPKT_RKNSt7__cxx1112basic_stringIS3_T0_T1_EE256
_ZStltIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_412
_ZStltIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EESA_754700098
_ZStneIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_64
_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_1546
_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_178
_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_S9_4660
_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_332
_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_202
_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_3600
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/basic_string.h.gcov.html b/html/usr/include/c++/13/bits/basic_string.h.gcov.html new file mode 100644 index 0000000..2921497 --- /dev/null +++ b/html/usr/include/c++/13/bits/basic_string.h.gcov.html @@ -0,0 +1,4616 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/basic_string.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - basic_string.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:74.8 %10780
Test Date:2024-04-30 13:17:26Functions:80.0 %3024
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Components for manipulating sequences of characters -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 1997-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/basic_string.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{string}
+      28              :  */
+      29              : 
+      30              : //
+      31              : // ISO C++ 14882: 21 Strings library
+      32              : //
+      33              : 
+      34              : #ifndef _BASIC_STRING_H
+      35              : #define _BASIC_STRING_H 1
+      36              : 
+      37              : #pragma GCC system_header
+      38              : 
+      39              : #include <ext/alloc_traits.h>
+      40              : #include <debug/debug.h>
+      41              : 
+      42              : #if __cplusplus >= 201103L
+      43              : #include <initializer_list>
+      44              : #endif
+      45              : 
+      46              : #if __cplusplus >= 201703L
+      47              : # include <string_view>
+      48              : #endif
+      49              : 
+      50              : #if ! _GLIBCXX_USE_CXX11_ABI
+      51              : # include "cow_string.h"
+      52              : #else
+      53              : namespace std _GLIBCXX_VISIBILITY(default)
+      54              : {
+      55              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      56              : _GLIBCXX_BEGIN_NAMESPACE_CXX11
+      57              : 
+      58              : #ifdef __cpp_lib_is_constant_evaluated
+      59              : // Support P0980R1 in C++20.
+      60              : # define __cpp_lib_constexpr_string 201907L
+      61              : #elif __cplusplus >= 201703L && _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED
+      62              : // Support P0426R1 changes to char_traits in C++17.
+      63              : # define __cpp_lib_constexpr_string 201611L
+      64              : #endif
+      65              : 
+      66              :   /**
+      67              :    *  @class basic_string basic_string.h <string>
+      68              :    *  @brief  Managing sequences of characters and character-like objects.
+      69              :    *
+      70              :    *  @ingroup strings
+      71              :    *  @ingroup sequences
+      72              :    *  @headerfile string
+      73              :    *  @since C++98
+      74              :    *
+      75              :    *  @tparam _CharT  Type of character
+      76              :    *  @tparam _Traits  Traits for character type, defaults to
+      77              :    *                   char_traits<_CharT>.
+      78              :    *  @tparam _Alloc  Allocator type, defaults to allocator<_CharT>.
+      79              :    *
+      80              :    *  Meets the requirements of a <a href="tables.html#65">container</a>, a
+      81              :    *  <a href="tables.html#66">reversible container</a>, and a
+      82              :    *  <a href="tables.html#67">sequence</a>.  Of the
+      83              :    *  <a href="tables.html#68">optional sequence requirements</a>, only
+      84              :    *  @c push_back, @c at, and @c %array access are supported.
+      85              :    */
+      86              :   template<typename _CharT, typename _Traits, typename _Alloc>
+      87              :     class basic_string
+      88              :     {
+      89              :       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+      90              :         rebind<_CharT>::other _Char_alloc_type;
+      91              : 
+      92              :       typedef __gnu_cxx::__alloc_traits<_Char_alloc_type> _Alloc_traits;
+      93              : 
+      94              :       // Types:
+      95              :     public:
+      96              :       typedef _Traits                                   traits_type;
+      97              :       typedef typename _Traits::char_type               value_type;
+      98              :       typedef _Char_alloc_type                          allocator_type;
+      99              :       typedef typename _Alloc_traits::size_type         size_type;
+     100              :       typedef typename _Alloc_traits::difference_type   difference_type;
+     101              :       typedef typename _Alloc_traits::reference         reference;
+     102              :       typedef typename _Alloc_traits::const_reference   const_reference;
+     103              :       typedef typename _Alloc_traits::pointer           pointer;
+     104              :       typedef typename _Alloc_traits::const_pointer     const_pointer;
+     105              :       typedef __gnu_cxx::__normal_iterator<pointer, basic_string>  iterator;
+     106              :       typedef __gnu_cxx::__normal_iterator<const_pointer, basic_string>
+     107              :                                                         const_iterator;
+     108              :       typedef std::reverse_iterator<const_iterator>       const_reverse_iterator;
+     109              :       typedef std::reverse_iterator<iterator>             reverse_iterator;
+     110              : 
+     111              :       ///  Value returned by various member functions when they fail.
+     112              :       static const size_type    npos = static_cast<size_type>(-1);
+     113              : 
+     114              :     protected:
+     115              :       // type used for positions in insert, erase etc.
+     116              : #if __cplusplus < 201103L
+     117              :       typedef iterator __const_iterator;
+     118              : #else
+     119              :       typedef const_iterator __const_iterator;
+     120              : #endif
+     121              : 
+     122              :     private:
+     123              :       static _GLIBCXX20_CONSTEXPR pointer
+     124              :       _S_allocate(_Char_alloc_type& __a, size_type __n)
+     125              :       {
+     126              :         pointer __p = _Alloc_traits::allocate(__a, __n);
+     127              : #if __cpp_lib_constexpr_string >= 201907L
+     128              :         // std::char_traits begins the lifetime of characters,
+     129              :         // but custom traits might not, so do it here.
+     130              :         if constexpr (!is_same_v<_Traits, char_traits<_CharT>>)
+     131              :           if (std::__is_constant_evaluated())
+     132              :             // Begin the lifetime of characters in allocated storage.
+     133              :             for (size_type __i = 0; __i < __n; ++__i)
+     134              :               std::construct_at(__builtin_addressof(__p[__i]));
+     135              : #endif
+     136              :         return __p;
+     137              :       }
+     138              : 
+     139              : #if __cplusplus >= 201703L
+     140              :       // A helper type for avoiding boiler-plate.
+     141              :       typedef basic_string_view<_CharT, _Traits> __sv_type;
+     142              : 
+     143              :       template<typename _Tp, typename _Res>
+     144              :         using _If_sv = enable_if_t<
+     145              :           __and_<is_convertible<const _Tp&, __sv_type>,
+     146              :                  __not_<is_convertible<const _Tp*, const basic_string*>>,
+     147              :                  __not_<is_convertible<const _Tp&, const _CharT*>>>::value,
+     148              :           _Res>;
+     149              : 
+     150              :       // Allows an implicit conversion to __sv_type.
+     151              :       _GLIBCXX20_CONSTEXPR
+     152              :       static __sv_type
+     153              :       _S_to_string_view(__sv_type __svt) noexcept
+     154              :       { return __svt; }
+     155              : 
+     156              :       // Wraps a string_view by explicit conversion and thus
+     157              :       // allows to add an internal constructor that does not
+     158              :       // participate in overload resolution when a string_view
+     159              :       // is provided.
+     160              :       struct __sv_wrapper
+     161              :       {
+     162              :         _GLIBCXX20_CONSTEXPR explicit
+     163              :         __sv_wrapper(__sv_type __sv) noexcept : _M_sv(__sv) { }
+     164              : 
+     165              :         __sv_type _M_sv;
+     166              :       };
+     167              : 
+     168              :       /**
+     169              :        *  @brief  Only internally used: Construct string from a string view
+     170              :        *          wrapper.
+     171              :        *  @param  __svw  string view wrapper.
+     172              :        *  @param  __a  Allocator to use.
+     173              :        */
+     174              :       _GLIBCXX20_CONSTEXPR
+     175              :       explicit
+     176              :       basic_string(__sv_wrapper __svw, const _Alloc& __a)
+     177              :       : basic_string(__svw._M_sv.data(), __svw._M_sv.size(), __a) { }
+     178              : #endif
+     179              : 
+     180              :       // Use empty-base optimization: http://www.cantrip.org/emptyopt.html
+     181              :       struct _Alloc_hider : allocator_type // TODO check __is_final
+     182              :       {
+     183              : #if __cplusplus < 201103L
+     184              :         _Alloc_hider(pointer __dat, const _Alloc& __a = _Alloc())
+     185              :         : allocator_type(__a), _M_p(__dat) { }
+     186              : #else
+     187              :         _GLIBCXX20_CONSTEXPR
+     188              :         _Alloc_hider(pointer __dat, const _Alloc& __a)
+     189              :         : allocator_type(__a), _M_p(__dat) { }
+     190              : 
+     191              :         _GLIBCXX20_CONSTEXPR
+     192              :         _Alloc_hider(pointer __dat, _Alloc&& __a = _Alloc())
+     193              :         : allocator_type(std::move(__a)), _M_p(__dat) { }
+     194              : #endif
+     195              : 
+     196              :         pointer _M_p; // The actual data.
+     197              :       };
+     198              : 
+     199              :       _Alloc_hider      _M_dataplus;
+     200              :       size_type         _M_string_length;
+     201              : 
+     202              :       enum { _S_local_capacity = 15 / sizeof(_CharT) };
+     203              : 
+     204              :       union
+     205              :       {
+     206              :         _CharT           _M_local_buf[_S_local_capacity + 1];
+     207              :         size_type        _M_allocated_capacity;
+     208              :       };
+     209              : 
+     210              :       _GLIBCXX20_CONSTEXPR
+     211              :       void
+     212              :       _M_data(pointer __p)
+     213              :       { _M_dataplus._M_p = __p; }
+     214              : 
+     215              :       _GLIBCXX20_CONSTEXPR
+     216              :       void
+     217              :       _M_length(size_type __length)
+     218              :       { _M_string_length = __length; }
+     219              : 
+     220              :       _GLIBCXX20_CONSTEXPR
+     221              :       pointer
+     222              :       _M_data() const
+     223              :       { return _M_dataplus._M_p; }
+     224              : 
+     225              :       _GLIBCXX20_CONSTEXPR
+     226              :       pointer
+     227              :       _M_local_data()
+     228              :       {
+     229              : #if __cplusplus >= 201103L
+     230              :         return std::pointer_traits<pointer>::pointer_to(*_M_local_buf);
+     231              : #else
+     232              :         return pointer(_M_local_buf);
+     233              : #endif
+     234              :       }
+     235              : 
+     236              :       _GLIBCXX20_CONSTEXPR
+     237              :       const_pointer
+     238              :       _M_local_data() const
+     239              :       {
+     240              : #if __cplusplus >= 201103L
+     241              :         return std::pointer_traits<const_pointer>::pointer_to(*_M_local_buf);
+     242              : #else
+     243              :         return const_pointer(_M_local_buf);
+     244              : #endif
+     245              :       }
+     246              : 
+     247              :       _GLIBCXX20_CONSTEXPR
+     248              :       void
+     249              :       _M_capacity(size_type __capacity)
+     250              :       { _M_allocated_capacity = __capacity; }
+     251              : 
+     252              :       _GLIBCXX20_CONSTEXPR
+     253              :       void
+     254              :       _M_set_length(size_type __n)
+     255              :       {
+     256              :         _M_length(__n);
+     257              :         traits_type::assign(_M_data()[__n], _CharT());
+     258              :       }
+     259              : 
+     260              :       _GLIBCXX20_CONSTEXPR
+     261              :       bool
+     262              :       _M_is_local() const
+     263              :       {
+     264              :         if (_M_data() == _M_local_data())
+     265              :           {
+     266              :             if (_M_string_length > _S_local_capacity)
+     267              :               __builtin_unreachable();
+     268              :             return true;
+     269              :           }
+     270              :         return false;
+     271              :       }
+     272              : 
+     273              :       // Create & Destroy
+     274              :       _GLIBCXX20_CONSTEXPR
+     275              :       pointer
+     276              :       _M_create(size_type&, size_type);
+     277              : 
+     278              :       _GLIBCXX20_CONSTEXPR
+     279              :       void
+     280              :       _M_dispose()
+     281              :       {
+     282              :         if (!_M_is_local())
+     283              :           _M_destroy(_M_allocated_capacity);
+     284              :       }
+     285              : 
+     286              :       _GLIBCXX20_CONSTEXPR
+     287              :       void
+     288              :       _M_destroy(size_type __size) throw()
+     289              :       { _Alloc_traits::deallocate(_M_get_allocator(), _M_data(), __size + 1); }
+     290              : 
+     291              : #if __cplusplus < 201103L || defined _GLIBCXX_DEFINING_STRING_INSTANTIATIONS
+     292              :       // _M_construct_aux is used to implement the 21.3.1 para 15 which
+     293              :       // requires special behaviour if _InIterator is an integral type
+     294              :       template<typename _InIterator>
+     295              :         void
+     296              :         _M_construct_aux(_InIterator __beg, _InIterator __end,
+     297              :                          std::__false_type)
+     298              :         {
+     299              :           typedef typename iterator_traits<_InIterator>::iterator_category _Tag;
+     300              :           _M_construct(__beg, __end, _Tag());
+     301              :         }
+     302              : 
+     303              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     304              :       // 438. Ambiguity in the "do the right thing" clause
+     305              :       template<typename _Integer>
+     306              :         void
+     307              :         _M_construct_aux(_Integer __beg, _Integer __end, std::__true_type)
+     308              :         { _M_construct_aux_2(static_cast<size_type>(__beg), __end); }
+     309              : 
+     310              :       void
+     311              :       _M_construct_aux_2(size_type __req, _CharT __c)
+     312              :       { _M_construct(__req, __c); }
+     313              : #endif
+     314              : 
+     315              :       // For Input Iterators, used in istreambuf_iterators, etc.
+     316              :       template<typename _InIterator>
+     317              :         _GLIBCXX20_CONSTEXPR
+     318              :         void
+     319              :         _M_construct(_InIterator __beg, _InIterator __end,
+     320              :                      std::input_iterator_tag);
+     321              : 
+     322              :       // For forward_iterators up to random_access_iterators, used for
+     323              :       // string::iterator, _CharT*, etc.
+     324              :       template<typename _FwdIterator>
+     325              :         _GLIBCXX20_CONSTEXPR
+     326              :         void
+     327              :         _M_construct(_FwdIterator __beg, _FwdIterator __end,
+     328              :                      std::forward_iterator_tag);
+     329              : 
+     330              :       _GLIBCXX20_CONSTEXPR
+     331              :       void
+     332              :       _M_construct(size_type __req, _CharT __c);
+     333              : 
+     334              :       _GLIBCXX20_CONSTEXPR
+     335              :       allocator_type&
+     336              :       _M_get_allocator()
+     337              :       { return _M_dataplus; }
+     338              : 
+     339              :       _GLIBCXX20_CONSTEXPR
+     340              :       const allocator_type&
+     341              :       _M_get_allocator() const
+     342              :       { return _M_dataplus; }
+     343              : 
+     344              :       // Ensure that _M_local_buf is the active member of the union.
+     345              :       __attribute__((__always_inline__))
+     346              :       _GLIBCXX14_CONSTEXPR
+     347              :       void
+     348              :       _M_init_local_buf() _GLIBCXX_NOEXCEPT
+     349              :       {
+     350              : #if __cpp_lib_is_constant_evaluated
+     351              :         if (std::is_constant_evaluated())
+     352              :           for (size_type __i = 0; __i <= _S_local_capacity; ++__i)
+     353              :             _M_local_buf[__i] = _CharT();
+     354              : #endif
+     355    109255510 :       }
+     356              : 
+     357              :       __attribute__((__always_inline__))
+     358              :       _GLIBCXX14_CONSTEXPR
+     359              :       pointer
+     360              :       _M_use_local_data() _GLIBCXX_NOEXCEPT
+     361              :       {
+     362              : #if __cpp_lib_is_constant_evaluated
+     363              :         _M_init_local_buf();
+     364              : #endif
+     365              :         return _M_local_data();
+     366              :       }
+     367              : 
+     368              :     private:
+     369              : 
+     370              : #ifdef _GLIBCXX_DISAMBIGUATE_REPLACE_INST
+     371              :       // The explicit instantiations in misc-inst.cc require this due to
+     372              :       // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64063
+     373              :       template<typename _Tp, bool _Requires =
+     374              :                !__are_same<_Tp, _CharT*>::__value
+     375              :                && !__are_same<_Tp, const _CharT*>::__value
+     376              :                && !__are_same<_Tp, iterator>::__value
+     377              :                && !__are_same<_Tp, const_iterator>::__value>
+     378              :         struct __enable_if_not_native_iterator
+     379              :         { typedef basic_string& __type; };
+     380              :       template<typename _Tp>
+     381              :         struct __enable_if_not_native_iterator<_Tp, false> { };
+     382              : #endif
+     383              : 
+     384              :       _GLIBCXX20_CONSTEXPR
+     385              :       size_type
+     386              :       _M_check(size_type __pos, const char* __s) const
+     387              :       {
+     388              :         if (__pos > this->size())
+     389              :           __throw_out_of_range_fmt(__N("%s: __pos (which is %zu) > "
+     390              :                                        "this->size() (which is %zu)"),
+     391              :                                    __s, __pos, this->size());
+     392              :         return __pos;
+     393              :       }
+     394              : 
+     395              :       _GLIBCXX20_CONSTEXPR
+     396              :       void
+     397              :       _M_check_length(size_type __n1, size_type __n2, const char* __s) const
+     398              :       {
+     399              :         if (this->max_size() - (this->size() - __n1) < __n2)
+     400              :           __throw_length_error(__N(__s));
+     401              :       }
+     402              : 
+     403              : 
+     404              :       // NB: _M_limit doesn't check for a bad __pos value.
+     405              :       _GLIBCXX20_CONSTEXPR
+     406              :       size_type
+     407              :       _M_limit(size_type __pos, size_type __off) const _GLIBCXX_NOEXCEPT
+     408              :       {
+     409              :         const bool __testoff =  __off < this->size() - __pos;
+     410              :         return __testoff ? __off : this->size() - __pos;
+     411              :       }
+     412              : 
+     413              :       // True if _Rep and source do not overlap.
+     414              :       bool
+     415              :       _M_disjunct(const _CharT* __s) const _GLIBCXX_NOEXCEPT
+     416              :       {
+     417              :         return (less<const _CharT*>()(__s, _M_data())
+     418              :                 || less<const _CharT*>()(_M_data() + this->size(), __s));
+     419              :       }
+     420              : 
+     421              :       // When __n = 1 way faster than the general multichar
+     422              :       // traits_type::copy/move/assign.
+     423              :       _GLIBCXX20_CONSTEXPR
+     424              :       static void
+     425              :       _S_copy(_CharT* __d, const _CharT* __s, size_type __n)
+     426              :       {
+     427              :         if (__n == 1)
+     428              :           traits_type::assign(*__d, *__s);
+     429              :         else
+     430              :           traits_type::copy(__d, __s, __n);
+     431              :       }
+     432              : 
+     433              :       _GLIBCXX20_CONSTEXPR
+     434              :       static void
+     435              :       _S_move(_CharT* __d, const _CharT* __s, size_type __n)
+     436              :       {
+     437              :         if (__n == 1)
+     438              :           traits_type::assign(*__d, *__s);
+     439              :         else
+     440              :           traits_type::move(__d, __s, __n);
+     441              :       }
+     442              : 
+     443              :       _GLIBCXX20_CONSTEXPR
+     444              :       static void
+     445              :       _S_assign(_CharT* __d, size_type __n, _CharT __c)
+     446              :       {
+     447              :         if (__n == 1)
+     448              :           traits_type::assign(*__d, __c);
+     449              :         else
+     450              :           traits_type::assign(__d, __n, __c);
+     451              :       }
+     452              : 
+     453              :       // _S_copy_chars is a separate template to permit specialization
+     454              :       // to optimize for the common case of pointers as iterators.
+     455              :       template<class _Iterator>
+     456              :         _GLIBCXX20_CONSTEXPR
+     457              :         static void
+     458              :         _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2)
+     459              :         {
+     460              :           for (; __k1 != __k2; ++__k1, (void)++__p)
+     461              :             traits_type::assign(*__p, *__k1); // These types are off.
+     462              :         }
+     463              : 
+     464              :       _GLIBCXX20_CONSTEXPR
+     465              :       static void
+     466              :       _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2) _GLIBCXX_NOEXCEPT
+     467              :       { _S_copy_chars(__p, __k1.base(), __k2.base()); }
+     468              : 
+     469              :       _GLIBCXX20_CONSTEXPR
+     470              :       static void
+     471              :       _S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2)
+     472              :       _GLIBCXX_NOEXCEPT
+     473              :       { _S_copy_chars(__p, __k1.base(), __k2.base()); }
+     474              : 
+     475              :       _GLIBCXX20_CONSTEXPR
+     476              :       static void
+     477              :       _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2) _GLIBCXX_NOEXCEPT
+     478              :       { _S_copy(__p, __k1, __k2 - __k1); }
+     479              : 
+     480              :       _GLIBCXX20_CONSTEXPR
+     481              :       static void
+     482              :       _S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2)
+     483              :       _GLIBCXX_NOEXCEPT
+     484              :       { _S_copy(__p, __k1, __k2 - __k1); }
+     485              : 
+     486              :       _GLIBCXX20_CONSTEXPR
+     487              :       static int
+     488              :       _S_compare(size_type __n1, size_type __n2) _GLIBCXX_NOEXCEPT
+     489              :       {
+     490              :         const difference_type __d = difference_type(__n1 - __n2);
+     491              : 
+     492              :         if (__d > __gnu_cxx::__numeric_traits<int>::__max)
+     493              :           return __gnu_cxx::__numeric_traits<int>::__max;
+     494              :         else if (__d < __gnu_cxx::__numeric_traits<int>::__min)
+     495              :           return __gnu_cxx::__numeric_traits<int>::__min;
+     496              :         else
+     497              :           return int(__d);
+     498              :       }
+     499              : 
+     500              :       _GLIBCXX20_CONSTEXPR
+     501              :       void
+     502              :       _M_assign(const basic_string&);
+     503              : 
+     504              :       _GLIBCXX20_CONSTEXPR
+     505              :       void
+     506              :       _M_mutate(size_type __pos, size_type __len1, const _CharT* __s,
+     507              :                 size_type __len2);
+     508              : 
+     509              :       _GLIBCXX20_CONSTEXPR
+     510              :       void
+     511              :       _M_erase(size_type __pos, size_type __n);
+     512              : 
+     513              :     public:
+     514              :       // Construct/copy/destroy:
+     515              :       // NB: We overload ctors in some cases instead of using default
+     516              :       // arguments, per 17.4.4.4 para. 2 item 2.
+     517              : 
+     518              :       /**
+     519              :        *  @brief  Default constructor creates an empty string.
+     520              :        */
+     521              :       _GLIBCXX20_CONSTEXPR
+     522              :       basic_string()
+     523              :       _GLIBCXX_NOEXCEPT_IF(is_nothrow_default_constructible<_Alloc>::value)
+     524              :       : _M_dataplus(_M_local_data())
+     525              :       {
+     526              :         _M_init_local_buf();
+     527              :         _M_set_length(0);
+     528              :       }
+     529              : 
+     530              :       /**
+     531              :        *  @brief  Construct an empty string using allocator @a a.
+     532              :        */
+     533              :       _GLIBCXX20_CONSTEXPR
+     534              :       explicit
+     535              :       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
+     536              :       : _M_dataplus(_M_local_data(), __a)
+     537              :       {
+     538              :         _M_init_local_buf();
+     539              :         _M_set_length(0);
+     540              :       }
+     541              : 
+     542              :       /**
+     543              :        *  @brief  Construct string with copy of value of @a __str.
+     544              :        *  @param  __str  Source string.
+     545              :        */
+     546              :       _GLIBCXX20_CONSTEXPR
+     547              :       basic_string(const basic_string& __str)
+     548              :       : _M_dataplus(_M_local_data(),
+     549              :                     _Alloc_traits::_S_select_on_copy(__str._M_get_allocator()))
+     550              :       {
+     551              :         _M_construct(__str._M_data(), __str._M_data() + __str.length(),
+     552              :                      std::forward_iterator_tag());
+     553              :       }
+     554              : 
+     555              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     556              :       // 2583. no way to supply an allocator for basic_string(str, pos)
+     557              :       /**
+     558              :        *  @brief  Construct string as copy of a substring.
+     559              :        *  @param  __str  Source string.
+     560              :        *  @param  __pos  Index of first character to copy from.
+     561              :        *  @param  __a  Allocator to use.
+     562              :        */
+     563              :       _GLIBCXX20_CONSTEXPR
+     564              :       basic_string(const basic_string& __str, size_type __pos,
+     565              :                    const _Alloc& __a = _Alloc())
+     566              :       : _M_dataplus(_M_local_data(), __a)
+     567              :       {
+     568              :         const _CharT* __start = __str._M_data()
+     569              :           + __str._M_check(__pos, "basic_string::basic_string");
+     570              :         _M_construct(__start, __start + __str._M_limit(__pos, npos),
+     571              :                      std::forward_iterator_tag());
+     572              :       }
+     573              : 
+     574              :       /**
+     575              :        *  @brief  Construct string as copy of a substring.
+     576              :        *  @param  __str  Source string.
+     577              :        *  @param  __pos  Index of first character to copy from.
+     578              :        *  @param  __n  Number of characters to copy.
+     579              :        */
+     580              :       _GLIBCXX20_CONSTEXPR
+     581              :       basic_string(const basic_string& __str, size_type __pos,
+     582              :                    size_type __n)
+     583              :       : _M_dataplus(_M_local_data())
+     584              :       {
+     585              :         const _CharT* __start = __str._M_data()
+     586              :           + __str._M_check(__pos, "basic_string::basic_string");
+     587              :         _M_construct(__start, __start + __str._M_limit(__pos, __n),
+     588              :                      std::forward_iterator_tag());
+     589              :       }
+     590              : 
+     591              :       /**
+     592              :        *  @brief  Construct string as copy of a substring.
+     593              :        *  @param  __str  Source string.
+     594              :        *  @param  __pos  Index of first character to copy from.
+     595              :        *  @param  __n  Number of characters to copy.
+     596              :        *  @param  __a  Allocator to use.
+     597              :        */
+     598              :       _GLIBCXX20_CONSTEXPR
+     599              :       basic_string(const basic_string& __str, size_type __pos,
+     600              :                    size_type __n, const _Alloc& __a)
+     601              :       : _M_dataplus(_M_local_data(), __a)
+     602              :       {
+     603              :         const _CharT* __start
+     604              :           = __str._M_data() + __str._M_check(__pos, "string::string");
+     605              :         _M_construct(__start, __start + __str._M_limit(__pos, __n),
+     606              :                      std::forward_iterator_tag());
+     607              :       }
+     608              : 
+     609              :       /**
+     610              :        *  @brief  Construct string initialized by a character %array.
+     611              :        *  @param  __s  Source character %array.
+     612              :        *  @param  __n  Number of characters to copy.
+     613              :        *  @param  __a  Allocator to use (default is default allocator).
+     614              :        *
+     615              :        *  NB: @a __s must have at least @a __n characters, &apos;\\0&apos;
+     616              :        *  has no special meaning.
+     617              :        */
+     618              :       _GLIBCXX20_CONSTEXPR
+     619              :       basic_string(const _CharT* __s, size_type __n,
+     620              :                    const _Alloc& __a = _Alloc())
+     621              :       : _M_dataplus(_M_local_data(), __a)
+     622              :       {
+     623              :         // NB: Not required, but considered best practice.
+     624              :         if (__s == 0 && __n > 0)
+     625              :           std::__throw_logic_error(__N("basic_string: "
+     626              :                                        "construction from null is not valid"));
+     627              :         _M_construct(__s, __s + __n, std::forward_iterator_tag());
+     628              :       }
+     629              : 
+     630              :       /**
+     631              :        *  @brief  Construct string as copy of a C string.
+     632              :        *  @param  __s  Source C string.
+     633              :        *  @param  __a  Allocator to use (default is default allocator).
+     634              :        */
+     635              : #if __cpp_deduction_guides && ! defined _GLIBCXX_DEFINING_STRING_INSTANTIATIONS
+     636              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     637              :       // 3076. basic_string CTAD ambiguity
+     638              :       template<typename = _RequireAllocator<_Alloc>>
+     639              : #endif
+     640              :       _GLIBCXX20_CONSTEXPR
+     641         6364 :       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
+     642         6364 :       : _M_dataplus(_M_local_data(), __a)
+     643              :       {
+     644              :         // NB: Not required, but considered best practice.
+     645         6364 :         if (__s == 0)
+     646            0 :           std::__throw_logic_error(__N("basic_string: "
+     647              :                                        "construction from null is not valid"));
+     648         6364 :         const _CharT* __end = __s + traits_type::length(__s);
+     649         6364 :         _M_construct(__s, __end, forward_iterator_tag());
+     650         6364 :       }
+     651              : 
+     652              :       /**
+     653              :        *  @brief  Construct string as multiple characters.
+     654              :        *  @param  __n  Number of characters.
+     655              :        *  @param  __c  Character to use.
+     656              :        *  @param  __a  Allocator to use (default is default allocator).
+     657              :        */
+     658              : #if __cpp_deduction_guides && ! defined _GLIBCXX_DEFINING_STRING_INSTANTIATIONS
+     659              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     660              :       // 3076. basic_string CTAD ambiguity
+     661              :       template<typename = _RequireAllocator<_Alloc>>
+     662              : #endif
+     663              :       _GLIBCXX20_CONSTEXPR
+     664       478156 :       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
+     665       478156 :       : _M_dataplus(_M_local_data(), __a)
+     666       478156 :       { _M_construct(__n, __c); }
+     667              : 
+     668              : #if __cplusplus >= 201103L
+     669              :       /**
+     670              :        *  @brief  Move construct string.
+     671              :        *  @param  __str  Source string.
+     672              :        *
+     673              :        *  The newly-created string contains the exact contents of @a __str.
+     674              :        *  @a __str is a valid, but unspecified string.
+     675              :        */
+     676              :       _GLIBCXX20_CONSTEXPR
+     677              :       basic_string(basic_string&& __str) noexcept
+     678              :       : _M_dataplus(_M_local_data(), std::move(__str._M_get_allocator()))
+     679              :       {
+     680              :         if (__str._M_is_local())
+     681              :           {
+     682              :             _M_init_local_buf();
+     683              :             traits_type::copy(_M_local_buf, __str._M_local_buf,
+     684              :                               __str.length() + 1);
+     685              :           }
+     686              :         else
+     687              :           {
+     688              :             _M_data(__str._M_data());
+     689              :             _M_capacity(__str._M_allocated_capacity);
+     690              :           }
+     691              : 
+     692              :         // Must use _M_length() here not _M_set_length() because
+     693              :         // basic_stringbuf relies on writing into unallocated capacity so
+     694              :         // we mess up the contents if we put a '\0' in the string.
+     695              :         _M_length(__str.length());
+     696              :         __str._M_data(__str._M_use_local_data());
+     697              :         __str._M_set_length(0);
+     698              :       }
+     699              : 
+     700              :       /**
+     701              :        *  @brief  Construct string from an initializer %list.
+     702              :        *  @param  __l  std::initializer_list of characters.
+     703              :        *  @param  __a  Allocator to use (default is default allocator).
+     704              :        */
+     705              :       _GLIBCXX20_CONSTEXPR
+     706              :       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
+     707              :       : _M_dataplus(_M_local_data(), __a)
+     708              :       { _M_construct(__l.begin(), __l.end(), std::forward_iterator_tag()); }
+     709              : 
+     710              :       _GLIBCXX20_CONSTEXPR
+     711              :       basic_string(const basic_string& __str, const _Alloc& __a)
+     712              :       : _M_dataplus(_M_local_data(), __a)
+     713              :       { _M_construct(__str.begin(), __str.end(), std::forward_iterator_tag()); }
+     714              : 
+     715              :       _GLIBCXX20_CONSTEXPR
+     716              :       basic_string(basic_string&& __str, const _Alloc& __a)
+     717              :       noexcept(_Alloc_traits::_S_always_equal())
+     718              :       : _M_dataplus(_M_local_data(), __a)
+     719              :       {
+     720              :         if (__str._M_is_local())
+     721              :           {
+     722              :             _M_init_local_buf();
+     723              :             traits_type::copy(_M_local_buf, __str._M_local_buf,
+     724              :                               __str.length() + 1);
+     725              :             _M_length(__str.length());
+     726              :             __str._M_set_length(0);
+     727              :           }
+     728              :         else if (_Alloc_traits::_S_always_equal()
+     729              :             || __str.get_allocator() == __a)
+     730              :           {
+     731              :             _M_data(__str._M_data());
+     732              :             _M_length(__str.length());
+     733              :             _M_capacity(__str._M_allocated_capacity);
+     734              :             __str._M_data(__str._M_use_local_data());
+     735              :             __str._M_set_length(0);
+     736              :           }
+     737              :         else
+     738              :           _M_construct(__str.begin(), __str.end(), std::forward_iterator_tag());
+     739              :       }
+     740              : #endif // C++11
+     741              : 
+     742              : #if __cplusplus >= 202100L
+     743              :       basic_string(nullptr_t) = delete;
+     744              :       basic_string& operator=(nullptr_t) = delete;
+     745              : #endif // C++23
+     746              : 
+     747              :       /**
+     748              :        *  @brief  Construct string as copy of a range.
+     749              :        *  @param  __beg  Start of range.
+     750              :        *  @param  __end  End of range.
+     751              :        *  @param  __a  Allocator to use (default is default allocator).
+     752              :        */
+     753              : #if __cplusplus >= 201103L
+     754              :       template<typename _InputIterator,
+     755              :                typename = std::_RequireInputIter<_InputIterator>>
+     756              : #else
+     757              :       template<typename _InputIterator>
+     758              : #endif
+     759              :         _GLIBCXX20_CONSTEXPR
+     760         2632 :         basic_string(_InputIterator __beg, _InputIterator __end,
+     761              :                      const _Alloc& __a = _Alloc())
+     762         2632 :         : _M_dataplus(_M_local_data(), __a), _M_string_length(0)
+     763              :         {
+     764              : #if __cplusplus >= 201103L
+     765         2632 :           _M_construct(__beg, __end, std::__iterator_category(__beg));
+     766              : #else
+     767              :           typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+     768              :           _M_construct_aux(__beg, __end, _Integral());
+     769              : #endif
+     770         2632 :         }
+     771              : 
+     772              : #if __cplusplus >= 201703L
+     773              :       /**
+     774              :        *  @brief  Construct string from a substring of a string_view.
+     775              :        *  @param  __t   Source object convertible to string view.
+     776              :        *  @param  __pos The index of the first character to copy from __t.
+     777              :        *  @param  __n   The number of characters to copy from __t.
+     778              :        *  @param  __a   Allocator to use.
+     779              :        */
+     780              :       template<typename _Tp,
+     781              :                typename = enable_if_t<is_convertible_v<const _Tp&, __sv_type>>>
+     782              :         _GLIBCXX20_CONSTEXPR
+     783              :         basic_string(const _Tp& __t, size_type __pos, size_type __n,
+     784              :                      const _Alloc& __a = _Alloc())
+     785              :         : basic_string(_S_to_string_view(__t).substr(__pos, __n), __a) { }
+     786              : 
+     787              :       /**
+     788              :        *  @brief  Construct string from a string_view.
+     789              :        *  @param  __t  Source object convertible to string view.
+     790              :        *  @param  __a  Allocator to use (default is default allocator).
+     791              :        */
+     792              :       template<typename _Tp, typename = _If_sv<_Tp, void>>
+     793              :         _GLIBCXX20_CONSTEXPR
+     794              :         explicit
+     795              :         basic_string(const _Tp& __t, const _Alloc& __a = _Alloc())
+     796              :         : basic_string(__sv_wrapper(_S_to_string_view(__t)), __a) { }
+     797              : #endif // C++17
+     798              : 
+     799              :       /**
+     800              :        *  @brief  Destroy the string instance.
+     801              :        */
+     802              :       _GLIBCXX20_CONSTEXPR
+     803              :       ~basic_string()
+     804              :       { _M_dispose(); }
+     805              : 
+     806              :       /**
+     807              :        *  @brief  Assign the value of @a str to this string.
+     808              :        *  @param  __str  Source string.
+     809              :        */
+     810              :       _GLIBCXX20_CONSTEXPR
+     811              :       basic_string&
+     812              :       operator=(const basic_string& __str)
+     813              :       {
+     814              :         return this->assign(__str);
+     815              :       }
+     816              : 
+     817              :       /**
+     818              :        *  @brief  Copy contents of @a s into this string.
+     819              :        *  @param  __s  Source null-terminated string.
+     820              :        */
+     821              :       _GLIBCXX20_CONSTEXPR
+     822              :       basic_string&
+     823              :       operator=(const _CharT* __s)
+     824              :       { return this->assign(__s); }
+     825              : 
+     826              :       /**
+     827              :        *  @brief  Set value to string of length 1.
+     828              :        *  @param  __c  Source character.
+     829              :        *
+     830              :        *  Assigning to a character makes this string length 1 and
+     831              :        *  (*this)[0] == @a c.
+     832              :        */
+     833              :       _GLIBCXX20_CONSTEXPR
+     834              :       basic_string&
+     835              :       operator=(_CharT __c)
+     836              :       {
+     837              :         this->assign(1, __c);
+     838              :         return *this;
+     839              :       }
+     840              : 
+     841              : #if __cplusplus >= 201103L
+     842              :       /**
+     843              :        *  @brief  Move assign the value of @a str to this string.
+     844              :        *  @param  __str  Source string.
+     845              :        *
+     846              :        *  The contents of @a str are moved into this string (without copying).
+     847              :        *  @a str is a valid, but unspecified string.
+     848              :        */
+     849              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     850              :       // 2063. Contradictory requirements for string move assignment
+     851              :       _GLIBCXX20_CONSTEXPR
+     852              :       basic_string&
+     853              :       operator=(basic_string&& __str)
+     854              :       noexcept(_Alloc_traits::_S_nothrow_move())
+     855              :       {
+     856              :         const bool __equal_allocs = _Alloc_traits::_S_always_equal()
+     857              :           || _M_get_allocator() == __str._M_get_allocator();
+     858              :         if (!_M_is_local() && _Alloc_traits::_S_propagate_on_move_assign()
+     859              :             && !__equal_allocs)
+     860              :           {
+     861              :             // Destroy existing storage before replacing allocator.
+     862              :             _M_destroy(_M_allocated_capacity);
+     863              :             _M_data(_M_local_data());
+     864              :             _M_set_length(0);
+     865              :           }
+     866              :         // Replace allocator if POCMA is true.
+     867              :         std::__alloc_on_move(_M_get_allocator(), __str._M_get_allocator());
+     868              : 
+     869              :         if (__str._M_is_local())
+     870              :           {
+     871              :             // We've always got room for a short string, just copy it
+     872              :             // (unless this is a self-move, because that would violate the
+     873              :             // char_traits::copy precondition that the ranges don't overlap).
+     874              :             if (__builtin_expect(std::__addressof(__str) != this, true))
+     875              :               {
+     876              :                 if (__str.size())
+     877              :                   this->_S_copy(_M_data(), __str._M_data(), __str.size());
+     878              :                 _M_set_length(__str.size());
+     879              :               }
+     880              :           }
+     881              :         else if (_Alloc_traits::_S_propagate_on_move_assign() || __equal_allocs)
+     882              :           {
+     883              :             // Just move the allocated pointer, our allocator can free it.
+     884              :             pointer __data = nullptr;
+     885              :             size_type __capacity;
+     886              :             if (!_M_is_local())
+     887              :               {
+     888              :                 if (__equal_allocs)
+     889              :                   {
+     890              :                     // __str can reuse our existing storage.
+     891              :                     __data = _M_data();
+     892              :                     __capacity = _M_allocated_capacity;
+     893              :                   }
+     894              :                 else // __str can't use it, so free it.
+     895              :                   _M_destroy(_M_allocated_capacity);
+     896              :               }
+     897              : 
+     898              :             _M_data(__str._M_data());
+     899              :             _M_length(__str.length());
+     900              :             _M_capacity(__str._M_allocated_capacity);
+     901              :             if (__data)
+     902              :               {
+     903              :                 __str._M_data(__data);
+     904              :                 __str._M_capacity(__capacity);
+     905              :               }
+     906              :             else
+     907              :               __str._M_data(__str._M_use_local_data());
+     908              :           }
+     909              :         else // Need to do a deep copy
+     910              :           assign(__str);
+     911              :         __str.clear();
+     912              :         return *this;
+     913              :       }
+     914              : 
+     915              :       /**
+     916              :        *  @brief  Set value to string constructed from initializer %list.
+     917              :        *  @param  __l  std::initializer_list.
+     918              :        */
+     919              :       _GLIBCXX20_CONSTEXPR
+     920              :       basic_string&
+     921              :       operator=(initializer_list<_CharT> __l)
+     922              :       {
+     923              :         this->assign(__l.begin(), __l.size());
+     924              :         return *this;
+     925              :       }
+     926              : #endif // C++11
+     927              : 
+     928              : #if __cplusplus >= 201703L
+     929              :       /**
+     930              :        *  @brief  Set value to string constructed from a string_view.
+     931              :        *  @param  __svt  An object convertible to string_view.
+     932              :        */
+     933              :      template<typename _Tp>
+     934              :        _GLIBCXX20_CONSTEXPR
+     935              :        _If_sv<_Tp, basic_string&>
+     936              :        operator=(const _Tp& __svt)
+     937              :        { return this->assign(__svt); }
+     938              : 
+     939              :       /**
+     940              :        *  @brief  Convert to a string_view.
+     941              :        *  @return A string_view.
+     942              :        */
+     943              :       _GLIBCXX20_CONSTEXPR
+     944              :       operator __sv_type() const noexcept
+     945              :       { return __sv_type(data(), size()); }
+     946              : #endif // C++17
+     947              : 
+     948              :       // Iterators:
+     949              :       /**
+     950              :        *  Returns a read/write iterator that points to the first character in
+     951              :        *  the %string.
+     952              :        */
+     953              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     954              :       iterator
+     955              :       begin() _GLIBCXX_NOEXCEPT
+     956              :       { return iterator(_M_data()); }
+     957              : 
+     958              :       /**
+     959              :        *  Returns a read-only (constant) iterator that points to the first
+     960              :        *  character in the %string.
+     961              :        */
+     962              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     963              :       const_iterator
+     964              :       begin() const _GLIBCXX_NOEXCEPT
+     965              :       { return const_iterator(_M_data()); }
+     966              : 
+     967              :       /**
+     968              :        *  Returns a read/write iterator that points one past the last
+     969              :        *  character in the %string.
+     970              :        */
+     971              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     972              :       iterator
+     973              :       end() _GLIBCXX_NOEXCEPT
+     974              :       { return iterator(_M_data() + this->size()); }
+     975              : 
+     976              :       /**
+     977              :        *  Returns a read-only (constant) iterator that points one past the
+     978              :        *  last character in the %string.
+     979              :        */
+     980              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     981              :       const_iterator
+     982              :       end() const _GLIBCXX_NOEXCEPT
+     983              :       { return const_iterator(_M_data() + this->size()); }
+     984              : 
+     985              :       /**
+     986              :        *  Returns a read/write reverse iterator that points to the last
+     987              :        *  character in the %string.  Iteration is done in reverse element
+     988              :        *  order.
+     989              :        */
+     990              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     991              :       reverse_iterator
+     992              :       rbegin() _GLIBCXX_NOEXCEPT
+     993              :       { return reverse_iterator(this->end()); }
+     994              : 
+     995              :       /**
+     996              :        *  Returns a read-only (constant) reverse iterator that points
+     997              :        *  to the last character in the %string.  Iteration is done in
+     998              :        *  reverse element order.
+     999              :        */
+    1000              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1001              :       const_reverse_iterator
+    1002              :       rbegin() const _GLIBCXX_NOEXCEPT
+    1003              :       { return const_reverse_iterator(this->end()); }
+    1004              : 
+    1005              :       /**
+    1006              :        *  Returns a read/write reverse iterator that points to one before the
+    1007              :        *  first character in the %string.  Iteration is done in reverse
+    1008              :        *  element order.
+    1009              :        */
+    1010              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1011              :       reverse_iterator
+    1012              :       rend() _GLIBCXX_NOEXCEPT
+    1013              :       { return reverse_iterator(this->begin()); }
+    1014              : 
+    1015              :       /**
+    1016              :        *  Returns a read-only (constant) reverse iterator that points
+    1017              :        *  to one before the first character in the %string.  Iteration
+    1018              :        *  is done in reverse element order.
+    1019              :        */
+    1020              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1021              :       const_reverse_iterator
+    1022              :       rend() const _GLIBCXX_NOEXCEPT
+    1023              :       { return const_reverse_iterator(this->begin()); }
+    1024              : 
+    1025              : #if __cplusplus >= 201103L
+    1026              :       /**
+    1027              :        *  Returns a read-only (constant) iterator that points to the first
+    1028              :        *  character in the %string.
+    1029              :        */
+    1030              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1031              :       const_iterator
+    1032              :       cbegin() const noexcept
+    1033              :       { return const_iterator(this->_M_data()); }
+    1034              : 
+    1035              :       /**
+    1036              :        *  Returns a read-only (constant) iterator that points one past the
+    1037              :        *  last character in the %string.
+    1038              :        */
+    1039              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1040              :       const_iterator
+    1041              :       cend() const noexcept
+    1042              :       { return const_iterator(this->_M_data() + this->size()); }
+    1043              : 
+    1044              :       /**
+    1045              :        *  Returns a read-only (constant) reverse iterator that points
+    1046              :        *  to the last character in the %string.  Iteration is done in
+    1047              :        *  reverse element order.
+    1048              :        */
+    1049              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1050              :       const_reverse_iterator
+    1051              :       crbegin() const noexcept
+    1052              :       { return const_reverse_iterator(this->end()); }
+    1053              : 
+    1054              :       /**
+    1055              :        *  Returns a read-only (constant) reverse iterator that points
+    1056              :        *  to one before the first character in the %string.  Iteration
+    1057              :        *  is done in reverse element order.
+    1058              :        */
+    1059              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1060              :       const_reverse_iterator
+    1061              :       crend() const noexcept
+    1062              :       { return const_reverse_iterator(this->begin()); }
+    1063              : #endif
+    1064              : 
+    1065              :     public:
+    1066              :       // Capacity:
+    1067              :       ///  Returns the number of characters in the string, not including any
+    1068              :       ///  null-termination.
+    1069              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1070              :       size_type
+    1071              :       size() const _GLIBCXX_NOEXCEPT
+    1072              :       { return _M_string_length; }
+    1073              : 
+    1074              :       ///  Returns the number of characters in the string, not including any
+    1075              :       ///  null-termination.
+    1076              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1077              :       size_type
+    1078              :       length() const _GLIBCXX_NOEXCEPT
+    1079              :       { return _M_string_length; }
+    1080              : 
+    1081              :       ///  Returns the size() of the largest possible %string.
+    1082              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1083              :       size_type
+    1084              :       max_size() const _GLIBCXX_NOEXCEPT
+    1085              :       { return (_Alloc_traits::max_size(_M_get_allocator()) - 1) / 2; }
+    1086              : 
+    1087              :       /**
+    1088              :        *  @brief  Resizes the %string to the specified number of characters.
+    1089              :        *  @param  __n  Number of characters the %string should contain.
+    1090              :        *  @param  __c  Character to fill any new elements.
+    1091              :        *
+    1092              :        *  This function will %resize the %string to the specified
+    1093              :        *  number of characters.  If the number is smaller than the
+    1094              :        *  %string's current size the %string is truncated, otherwise
+    1095              :        *  the %string is extended and new elements are %set to @a __c.
+    1096              :        */
+    1097              :       _GLIBCXX20_CONSTEXPR
+    1098              :       void
+    1099              :       resize(size_type __n, _CharT __c);
+    1100              : 
+    1101              :       /**
+    1102              :        *  @brief  Resizes the %string to the specified number of characters.
+    1103              :        *  @param  __n  Number of characters the %string should contain.
+    1104              :        *
+    1105              :        *  This function will resize the %string to the specified length.  If
+    1106              :        *  the new size is smaller than the %string's current size the %string
+    1107              :        *  is truncated, otherwise the %string is extended and new characters
+    1108              :        *  are default-constructed.  For basic types such as char, this means
+    1109              :        *  setting them to 0.
+    1110              :        */
+    1111              :       _GLIBCXX20_CONSTEXPR
+    1112              :       void
+    1113              :       resize(size_type __n)
+    1114              :       { this->resize(__n, _CharT()); }
+    1115              : 
+    1116              : #if __cplusplus >= 201103L
+    1117              : #pragma GCC diagnostic push
+    1118              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+    1119              :       ///  A non-binding request to reduce capacity() to size().
+    1120              :       _GLIBCXX20_CONSTEXPR
+    1121              :       void
+    1122              :       shrink_to_fit() noexcept
+    1123              :       { reserve(); }
+    1124              : #pragma GCC diagnostic pop
+    1125              : #endif
+    1126              : 
+    1127              : #if __cplusplus > 202002L
+    1128              : #define __cpp_lib_string_resize_and_overwrite 202110L
+    1129              :       /** Resize the string and call a function to fill it.
+    1130              :        *
+    1131              :        * @param __n   The maximum size requested.
+    1132              :        * @param __op  A callable object that writes characters to the string.
+    1133              :        *
+    1134              :        * This is a low-level function that is easy to misuse, be careful.
+    1135              :        *
+    1136              :        * Calling `str.resize_and_overwrite(n, op)` will reserve at least `n`
+    1137              :        * characters in `str`, evaluate `n2 = std::move(op)(str.data(), n)`,
+    1138              :        * and finally set the string length to `n2` (adding a null terminator
+    1139              :        * at the end). The function object `op` is allowed to write to the
+    1140              :        * extra capacity added by the initial reserve operation, which is not
+    1141              :        * allowed if you just call `str.reserve(n)` yourself.
+    1142              :        *
+    1143              :        * This can be used to efficiently fill a `string` buffer without the
+    1144              :        * overhead of zero-initializing characters that will be overwritten
+    1145              :        * anyway.
+    1146              :        *
+    1147              :        * The callable `op` must not access the string directly (only through
+    1148              :        * the pointer passed as its first argument), must not write more than
+    1149              :        * `n` characters to the string, must return a value no greater than `n`,
+    1150              :        * and must ensure that all characters up to the returned length are
+    1151              :        * valid after it returns (i.e. there must be no uninitialized values
+    1152              :        * left in the string after the call, because accessing them would
+    1153              :        * have undefined behaviour). If `op` exits by throwing an exception
+    1154              :        * the behaviour is undefined.
+    1155              :        *
+    1156              :        * @since C++23
+    1157              :        */
+    1158              :       template<typename _Operation>
+    1159              :         constexpr void
+    1160              :         resize_and_overwrite(size_type __n, _Operation __op);
+    1161              : #endif
+    1162              : 
+    1163              :       /**
+    1164              :        *  Returns the total number of characters that the %string can hold
+    1165              :        *  before needing to allocate more memory.
+    1166              :        */
+    1167              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1168              :       size_type
+    1169              :       capacity() const _GLIBCXX_NOEXCEPT
+    1170              :       {
+    1171              :         return _M_is_local() ? size_type(_S_local_capacity)
+    1172              :                              : _M_allocated_capacity;
+    1173              :       }
+    1174              : 
+    1175              :       /**
+    1176              :        *  @brief  Attempt to preallocate enough memory for specified number of
+    1177              :        *          characters.
+    1178              :        *  @param  __res_arg  Number of characters required.
+    1179              :        *  @throw  std::length_error  If @a __res_arg exceeds @c max_size().
+    1180              :        *
+    1181              :        *  This function attempts to reserve enough memory for the
+    1182              :        *  %string to hold the specified number of characters.  If the
+    1183              :        *  number requested is more than max_size(), length_error is
+    1184              :        *  thrown.
+    1185              :        *
+    1186              :        *  The advantage of this function is that if optimal code is a
+    1187              :        *  necessity and the user can determine the string length that will be
+    1188              :        *  required, the user can reserve the memory in %advance, and thus
+    1189              :        *  prevent a possible reallocation of memory and copying of %string
+    1190              :        *  data.
+    1191              :        */
+    1192              :       _GLIBCXX20_CONSTEXPR
+    1193              :       void
+    1194              :       reserve(size_type __res_arg);
+    1195              : 
+    1196              :       /**
+    1197              :        *  Equivalent to shrink_to_fit().
+    1198              :        */
+    1199              : #if __cplusplus > 201703L
+    1200              :       [[deprecated("use shrink_to_fit() instead")]]
+    1201              : #endif
+    1202              :       _GLIBCXX20_CONSTEXPR
+    1203              :       void
+    1204              :       reserve();
+    1205              : 
+    1206              :       /**
+    1207              :        *  Erases the string, making it empty.
+    1208              :        */
+    1209              :       _GLIBCXX20_CONSTEXPR
+    1210              :       void
+    1211              :       clear() _GLIBCXX_NOEXCEPT
+    1212              :       { _M_set_length(0); }
+    1213              : 
+    1214              :       /**
+    1215              :        *  Returns true if the %string is empty.  Equivalent to 
+    1216              :        *  <code>*this == ""</code>.
+    1217              :        */
+    1218              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1219              :       bool
+    1220              :       empty() const _GLIBCXX_NOEXCEPT
+    1221              :       { return this->size() == 0; }
+    1222              : 
+    1223              :       // Element access:
+    1224              :       /**
+    1225              :        *  @brief  Subscript access to the data contained in the %string.
+    1226              :        *  @param  __pos  The index of the character to access.
+    1227              :        *  @return  Read-only (constant) reference to the character.
+    1228              :        *
+    1229              :        *  This operator allows for easy, array-style, data access.
+    1230              :        *  Note that data access with this operator is unchecked and
+    1231              :        *  out_of_range lookups are not defined. (For checked lookups
+    1232              :        *  see at().)
+    1233              :        */
+    1234              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1235              :       const_reference
+    1236              :       operator[] (size_type __pos) const _GLIBCXX_NOEXCEPT
+    1237              :       {
+    1238              :         __glibcxx_assert(__pos <= size());
+    1239              :         return _M_data()[__pos];
+    1240              :       }
+    1241              : 
+    1242              :       /**
+    1243              :        *  @brief  Subscript access to the data contained in the %string.
+    1244              :        *  @param  __pos  The index of the character to access.
+    1245              :        *  @return  Read/write reference to the character.
+    1246              :        *
+    1247              :        *  This operator allows for easy, array-style, data access.
+    1248              :        *  Note that data access with this operator is unchecked and
+    1249              :        *  out_of_range lookups are not defined. (For checked lookups
+    1250              :        *  see at().)
+    1251              :        */
+    1252              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1253              :       reference
+    1254              :       operator[](size_type __pos)
+    1255              :       {
+    1256              :         // Allow pos == size() both in C++98 mode, as v3 extension,
+    1257              :         // and in C++11 mode.
+    1258              :         __glibcxx_assert(__pos <= size());
+    1259              :         // In pedantic mode be strict in C++98 mode.
+    1260              :         _GLIBCXX_DEBUG_PEDASSERT(__cplusplus >= 201103L || __pos < size());
+    1261              :         return _M_data()[__pos];
+    1262              :       }
+    1263              : 
+    1264              :       /**
+    1265              :        *  @brief  Provides access to the data contained in the %string.
+    1266              :        *  @param __n The index of the character to access.
+    1267              :        *  @return  Read-only (const) reference to the character.
+    1268              :        *  @throw  std::out_of_range  If @a n is an invalid index.
+    1269              :        *
+    1270              :        *  This function provides for safer data access.  The parameter is
+    1271              :        *  first checked that it is in the range of the string.  The function
+    1272              :        *  throws out_of_range if the check fails.
+    1273              :        */
+    1274              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1275              :       const_reference
+    1276              :       at(size_type __n) const
+    1277              :       {
+    1278              :         if (__n >= this->size())
+    1279              :           __throw_out_of_range_fmt(__N("basic_string::at: __n "
+    1280              :                                        "(which is %zu) >= this->size() "
+    1281              :                                        "(which is %zu)"),
+    1282              :                                    __n, this->size());
+    1283              :         return _M_data()[__n];
+    1284              :       }
+    1285              : 
+    1286              :       /**
+    1287              :        *  @brief  Provides access to the data contained in the %string.
+    1288              :        *  @param __n The index of the character to access.
+    1289              :        *  @return  Read/write reference to the character.
+    1290              :        *  @throw  std::out_of_range  If @a n is an invalid index.
+    1291              :        *
+    1292              :        *  This function provides for safer data access.  The parameter is
+    1293              :        *  first checked that it is in the range of the string.  The function
+    1294              :        *  throws out_of_range if the check fails.
+    1295              :        */
+    1296              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1297              :       reference
+    1298              :       at(size_type __n)
+    1299              :       {
+    1300              :         if (__n >= size())
+    1301              :           __throw_out_of_range_fmt(__N("basic_string::at: __n "
+    1302              :                                        "(which is %zu) >= this->size() "
+    1303              :                                        "(which is %zu)"),
+    1304              :                                    __n, this->size());
+    1305              :         return _M_data()[__n];
+    1306              :       }
+    1307              : 
+    1308              : #if __cplusplus >= 201103L
+    1309              :       /**
+    1310              :        *  Returns a read/write reference to the data at the first
+    1311              :        *  element of the %string.
+    1312              :        */
+    1313              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1314              :       reference
+    1315              :       front() noexcept
+    1316              :       {
+    1317              :         __glibcxx_assert(!empty());
+    1318              :         return operator[](0);
+    1319              :       }
+    1320              : 
+    1321              :       /**
+    1322              :        *  Returns a read-only (constant) reference to the data at the first
+    1323              :        *  element of the %string.
+    1324              :        */
+    1325              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1326              :       const_reference
+    1327              :       front() const noexcept
+    1328              :       {
+    1329              :         __glibcxx_assert(!empty());
+    1330              :         return operator[](0);
+    1331              :       }
+    1332              : 
+    1333              :       /**
+    1334              :        *  Returns a read/write reference to the data at the last
+    1335              :        *  element of the %string.
+    1336              :        */
+    1337              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1338              :       reference
+    1339              :       back() noexcept
+    1340              :       {
+    1341              :         __glibcxx_assert(!empty());
+    1342              :         return operator[](this->size() - 1);
+    1343              :       }
+    1344              : 
+    1345              :       /**
+    1346              :        *  Returns a read-only (constant) reference to the data at the
+    1347              :        *  last element of the %string.
+    1348              :        */
+    1349              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1350              :       const_reference
+    1351              :       back() const noexcept
+    1352              :       {
+    1353              :         __glibcxx_assert(!empty());
+    1354              :         return operator[](this->size() - 1);
+    1355              :       }
+    1356              : #endif
+    1357              : 
+    1358              :       // Modifiers:
+    1359              :       /**
+    1360              :        *  @brief  Append a string to this string.
+    1361              :        *  @param __str  The string to append.
+    1362              :        *  @return  Reference to this string.
+    1363              :        */
+    1364              :       _GLIBCXX20_CONSTEXPR
+    1365              :       basic_string&
+    1366              :       operator+=(const basic_string& __str)
+    1367              :       { return this->append(__str); }
+    1368              : 
+    1369              :       /**
+    1370              :        *  @brief  Append a C string.
+    1371              :        *  @param __s  The C string to append.
+    1372              :        *  @return  Reference to this string.
+    1373              :        */
+    1374              :       _GLIBCXX20_CONSTEXPR
+    1375              :       basic_string&
+    1376              :       operator+=(const _CharT* __s)
+    1377              :       { return this->append(__s); }
+    1378              : 
+    1379              :       /**
+    1380              :        *  @brief  Append a character.
+    1381              :        *  @param __c  The character to append.
+    1382              :        *  @return  Reference to this string.
+    1383              :        */
+    1384              :       _GLIBCXX20_CONSTEXPR
+    1385              :       basic_string&
+    1386              :       operator+=(_CharT __c)
+    1387              :       {
+    1388              :         this->push_back(__c);
+    1389              :         return *this;
+    1390              :       }
+    1391              : 
+    1392              : #if __cplusplus >= 201103L
+    1393              :       /**
+    1394              :        *  @brief  Append an initializer_list of characters.
+    1395              :        *  @param __l  The initializer_list of characters to be appended.
+    1396              :        *  @return  Reference to this string.
+    1397              :        */
+    1398              :       _GLIBCXX20_CONSTEXPR
+    1399              :       basic_string&
+    1400              :       operator+=(initializer_list<_CharT> __l)
+    1401              :       { return this->append(__l.begin(), __l.size()); }
+    1402              : #endif // C++11
+    1403              : 
+    1404              : #if __cplusplus >= 201703L
+    1405              :       /**
+    1406              :        *  @brief  Append a string_view.
+    1407              :        *  @param __svt  An object convertible to string_view to be appended.
+    1408              :        *  @return  Reference to this string.
+    1409              :        */
+    1410              :       template<typename _Tp>
+    1411              :         _GLIBCXX20_CONSTEXPR
+    1412              :         _If_sv<_Tp, basic_string&>
+    1413              :         operator+=(const _Tp& __svt)
+    1414              :         { return this->append(__svt); }
+    1415              : #endif // C++17
+    1416              : 
+    1417              :       /**
+    1418              :        *  @brief  Append a string to this string.
+    1419              :        *  @param __str  The string to append.
+    1420              :        *  @return  Reference to this string.
+    1421              :        */
+    1422              :       _GLIBCXX20_CONSTEXPR
+    1423              :       basic_string&
+    1424              :       append(const basic_string& __str)
+    1425              :       { return this->append(__str._M_data(), __str.size()); }
+    1426              : 
+    1427              :       /**
+    1428              :        *  @brief  Append a substring.
+    1429              :        *  @param __str  The string to append.
+    1430              :        *  @param __pos  Index of the first character of str to append.
+    1431              :        *  @param __n  The number of characters to append.
+    1432              :        *  @return  Reference to this string.
+    1433              :        *  @throw  std::out_of_range if @a __pos is not a valid index.
+    1434              :        *
+    1435              :        *  This function appends @a __n characters from @a __str
+    1436              :        *  starting at @a __pos to this string.  If @a __n is is larger
+    1437              :        *  than the number of available characters in @a __str, the
+    1438              :        *  remainder of @a __str is appended.
+    1439              :        */
+    1440              :       _GLIBCXX20_CONSTEXPR
+    1441              :       basic_string&
+    1442              :       append(const basic_string& __str, size_type __pos, size_type __n = npos)
+    1443              :       { return this->append(__str._M_data()
+    1444              :                             + __str._M_check(__pos, "basic_string::append"),
+    1445              :                             __str._M_limit(__pos, __n)); }
+    1446              : 
+    1447              :       /**
+    1448              :        *  @brief  Append a C substring.
+    1449              :        *  @param __s  The C string to append.
+    1450              :        *  @param __n  The number of characters to append.
+    1451              :        *  @return  Reference to this string.
+    1452              :        */
+    1453              :       _GLIBCXX20_CONSTEXPR
+    1454              :       basic_string&
+    1455              :       append(const _CharT* __s, size_type __n)
+    1456              :       {
+    1457              :         __glibcxx_requires_string_len(__s, __n);
+    1458              :         _M_check_length(size_type(0), __n, "basic_string::append");
+    1459              :         return _M_append(__s, __n);
+    1460              :       }
+    1461              : 
+    1462              :       /**
+    1463              :        *  @brief  Append a C string.
+    1464              :        *  @param __s  The C string to append.
+    1465              :        *  @return  Reference to this string.
+    1466              :        */
+    1467              :       _GLIBCXX20_CONSTEXPR
+    1468              :       basic_string&
+    1469              :       append(const _CharT* __s)
+    1470              :       {
+    1471              :         __glibcxx_requires_string(__s);
+    1472              :         const size_type __n = traits_type::length(__s);
+    1473              :         _M_check_length(size_type(0), __n, "basic_string::append");
+    1474              :         return _M_append(__s, __n);
+    1475              :       }
+    1476              : 
+    1477              :       /**
+    1478              :        *  @brief  Append multiple characters.
+    1479              :        *  @param __n  The number of characters to append.
+    1480              :        *  @param __c  The character to use.
+    1481              :        *  @return  Reference to this string.
+    1482              :        *
+    1483              :        *  Appends __n copies of __c to this string.
+    1484              :        */
+    1485              :       _GLIBCXX20_CONSTEXPR
+    1486              :       basic_string&
+    1487              :       append(size_type __n, _CharT __c)
+    1488              :       { return _M_replace_aux(this->size(), size_type(0), __n, __c); }
+    1489              : 
+    1490              : #if __cplusplus >= 201103L
+    1491              :       /**
+    1492              :        *  @brief  Append an initializer_list of characters.
+    1493              :        *  @param __l  The initializer_list of characters to append.
+    1494              :        *  @return  Reference to this string.
+    1495              :        */
+    1496              :       _GLIBCXX20_CONSTEXPR
+    1497              :       basic_string&
+    1498              :       append(initializer_list<_CharT> __l)
+    1499              :       { return this->append(__l.begin(), __l.size()); }
+    1500              : #endif // C++11
+    1501              : 
+    1502              :       /**
+    1503              :        *  @brief  Append a range of characters.
+    1504              :        *  @param __first  Iterator referencing the first character to append.
+    1505              :        *  @param __last  Iterator marking the end of the range.
+    1506              :        *  @return  Reference to this string.
+    1507              :        *
+    1508              :        *  Appends characters in the range [__first,__last) to this string.
+    1509              :        */
+    1510              : #if __cplusplus >= 201103L
+    1511              :       template<class _InputIterator,
+    1512              :                typename = std::_RequireInputIter<_InputIterator>>
+    1513              :         _GLIBCXX20_CONSTEXPR
+    1514              : #else
+    1515              :       template<class _InputIterator>
+    1516              : #endif
+    1517              :         basic_string&
+    1518              :         append(_InputIterator __first, _InputIterator __last)
+    1519              :         { return this->replace(end(), end(), __first, __last); }
+    1520              : 
+    1521              : #if __cplusplus >= 201703L
+    1522              :       /**
+    1523              :        *  @brief  Append a string_view.
+    1524              :        *  @param __svt  An object convertible to string_view to be appended.
+    1525              :        *  @return  Reference to this string.
+    1526              :        */
+    1527              :       template<typename _Tp>
+    1528              :         _GLIBCXX20_CONSTEXPR
+    1529              :         _If_sv<_Tp, basic_string&>
+    1530              :         append(const _Tp& __svt)
+    1531              :         {
+    1532              :           __sv_type __sv = __svt;
+    1533              :           return this->append(__sv.data(), __sv.size());
+    1534              :         }
+    1535              : 
+    1536              :       /**
+    1537              :        *  @brief  Append a range of characters from a string_view.
+    1538              :        *  @param __svt  An object convertible to string_view to be appended from.
+    1539              :        *  @param __pos The position in the string_view to append from.
+    1540              :        *  @param __n   The number of characters to append from the string_view.
+    1541              :        *  @return  Reference to this string.
+    1542              :        */
+    1543              :       template<typename _Tp>
+    1544              :         _GLIBCXX20_CONSTEXPR
+    1545              :         _If_sv<_Tp, basic_string&>
+    1546              :         append(const _Tp& __svt, size_type __pos, size_type __n = npos)
+    1547              :         {
+    1548              :           __sv_type __sv = __svt;
+    1549              :           return _M_append(__sv.data()
+    1550              :               + std::__sv_check(__sv.size(), __pos, "basic_string::append"),
+    1551              :               std::__sv_limit(__sv.size(), __pos, __n));
+    1552              :         }
+    1553              : #endif // C++17
+    1554              : 
+    1555              :       /**
+    1556              :        *  @brief  Append a single character.
+    1557              :        *  @param __c  Character to append.
+    1558              :        */
+    1559              :       _GLIBCXX20_CONSTEXPR
+    1560              :       void
+    1561              :       push_back(_CharT __c)
+    1562              :       {
+    1563              :         const size_type __size = this->size();
+    1564              :         if (__size + 1 > this->capacity())
+    1565              :           this->_M_mutate(__size, size_type(0), 0, size_type(1));
+    1566              :         traits_type::assign(this->_M_data()[__size], __c);
+    1567              :         this->_M_set_length(__size + 1);
+    1568              :       }
+    1569              : 
+    1570              :       /**
+    1571              :        *  @brief  Set value to contents of another string.
+    1572              :        *  @param  __str  Source string to use.
+    1573              :        *  @return  Reference to this string.
+    1574              :        */
+    1575              :       _GLIBCXX20_CONSTEXPR
+    1576              :       basic_string&
+    1577              :       assign(const basic_string& __str)
+    1578              :       {
+    1579              : #if __cplusplus >= 201103L
+    1580              :         if (_Alloc_traits::_S_propagate_on_copy_assign())
+    1581              :           {
+    1582              :             if (!_Alloc_traits::_S_always_equal() && !_M_is_local()
+    1583              :                 && _M_get_allocator() != __str._M_get_allocator())
+    1584              :               {
+    1585              :                 // Propagating allocator cannot free existing storage so must
+    1586              :                 // deallocate it before replacing current allocator.
+    1587              :                 if (__str.size() <= _S_local_capacity)
+    1588              :                   {
+    1589              :                     _M_destroy(_M_allocated_capacity);
+    1590              :                     _M_data(_M_use_local_data());
+    1591              :                     _M_set_length(0);
+    1592              :                   }
+    1593              :                 else
+    1594              :                   {
+    1595              :                     const auto __len = __str.size();
+    1596              :                     auto __alloc = __str._M_get_allocator();
+    1597              :                     // If this allocation throws there are no effects:
+    1598              :                     auto __ptr = _S_allocate(__alloc, __len + 1);
+    1599              :                     _M_destroy(_M_allocated_capacity);
+    1600              :                     _M_data(__ptr);
+    1601              :                     _M_capacity(__len);
+    1602              :                     _M_set_length(__len);
+    1603              :                   }
+    1604              :               }
+    1605              :             std::__alloc_on_copy(_M_get_allocator(), __str._M_get_allocator());
+    1606              :           }
+    1607              : #endif
+    1608              :         this->_M_assign(__str);
+    1609              :         return *this;
+    1610              :       }
+    1611              : 
+    1612              : #if __cplusplus >= 201103L
+    1613              :       /**
+    1614              :        *  @brief  Set value to contents of another string.
+    1615              :        *  @param  __str  Source string to use.
+    1616              :        *  @return  Reference to this string.
+    1617              :        *
+    1618              :        *  This function sets this string to the exact contents of @a __str.
+    1619              :        *  @a __str is a valid, but unspecified string.
+    1620              :        */
+    1621              :       _GLIBCXX20_CONSTEXPR
+    1622              :       basic_string&
+    1623              :       assign(basic_string&& __str)
+    1624              :       noexcept(_Alloc_traits::_S_nothrow_move())
+    1625              :       {
+    1626              :         // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1627              :         // 2063. Contradictory requirements for string move assignment
+    1628              :         return *this = std::move(__str);
+    1629              :       }
+    1630              : #endif // C++11
+    1631              : 
+    1632              :       /**
+    1633              :        *  @brief  Set value to a substring of a string.
+    1634              :        *  @param __str  The string to use.
+    1635              :        *  @param __pos  Index of the first character of str.
+    1636              :        *  @param __n  Number of characters to use.
+    1637              :        *  @return  Reference to this string.
+    1638              :        *  @throw  std::out_of_range if @a pos is not a valid index.
+    1639              :        *
+    1640              :        *  This function sets this string to the substring of @a __str
+    1641              :        *  consisting of @a __n characters at @a __pos.  If @a __n is
+    1642              :        *  is larger than the number of available characters in @a
+    1643              :        *  __str, the remainder of @a __str is used.
+    1644              :        */
+    1645              :       _GLIBCXX20_CONSTEXPR
+    1646              :       basic_string&
+    1647              :       assign(const basic_string& __str, size_type __pos, size_type __n = npos)
+    1648              :       { return _M_replace(size_type(0), this->size(), __str._M_data()
+    1649              :                           + __str._M_check(__pos, "basic_string::assign"),
+    1650              :                           __str._M_limit(__pos, __n)); }
+    1651              : 
+    1652              :       /**
+    1653              :        *  @brief  Set value to a C substring.
+    1654              :        *  @param __s  The C string to use.
+    1655              :        *  @param __n  Number of characters to use.
+    1656              :        *  @return  Reference to this string.
+    1657              :        *
+    1658              :        *  This function sets the value of this string to the first @a __n
+    1659              :        *  characters of @a __s.  If @a __n is is larger than the number of
+    1660              :        *  available characters in @a __s, the remainder of @a __s is used.
+    1661              :        */
+    1662              :       _GLIBCXX20_CONSTEXPR
+    1663              :       basic_string&
+    1664              :       assign(const _CharT* __s, size_type __n)
+    1665              :       {
+    1666              :         __glibcxx_requires_string_len(__s, __n);
+    1667              :         return _M_replace(size_type(0), this->size(), __s, __n);
+    1668              :       }
+    1669              : 
+    1670              :       /**
+    1671              :        *  @brief  Set value to contents of a C string.
+    1672              :        *  @param __s  The C string to use.
+    1673              :        *  @return  Reference to this string.
+    1674              :        *
+    1675              :        *  This function sets the value of this string to the value of @a __s.
+    1676              :        *  The data is copied, so there is no dependence on @a __s once the
+    1677              :        *  function returns.
+    1678              :        */
+    1679              :       _GLIBCXX20_CONSTEXPR
+    1680              :       basic_string&
+    1681              :       assign(const _CharT* __s)
+    1682              :       {
+    1683              :         __glibcxx_requires_string(__s);
+    1684              :         return _M_replace(size_type(0), this->size(), __s,
+    1685              :                           traits_type::length(__s));
+    1686              :       }
+    1687              : 
+    1688              :       /**
+    1689              :        *  @brief  Set value to multiple characters.
+    1690              :        *  @param __n  Length of the resulting string.
+    1691              :        *  @param __c  The character to use.
+    1692              :        *  @return  Reference to this string.
+    1693              :        *
+    1694              :        *  This function sets the value of this string to @a __n copies of
+    1695              :        *  character @a __c.
+    1696              :        */
+    1697              :       _GLIBCXX20_CONSTEXPR
+    1698              :       basic_string&
+    1699              :       assign(size_type __n, _CharT __c)
+    1700              :       { return _M_replace_aux(size_type(0), this->size(), __n, __c); }
+    1701              : 
+    1702              :       /**
+    1703              :        *  @brief  Set value to a range of characters.
+    1704              :        *  @param __first  Iterator referencing the first character to append.
+    1705              :        *  @param __last  Iterator marking the end of the range.
+    1706              :        *  @return  Reference to this string.
+    1707              :        *
+    1708              :        *  Sets value of string to characters in the range [__first,__last).
+    1709              :       */
+    1710              : #if __cplusplus >= 201103L
+    1711              :       template<class _InputIterator,
+    1712              :                typename = std::_RequireInputIter<_InputIterator>>
+    1713              :         _GLIBCXX20_CONSTEXPR
+    1714              : #else
+    1715              :       template<class _InputIterator>
+    1716              : #endif
+    1717              :         basic_string&
+    1718              :         assign(_InputIterator __first, _InputIterator __last)
+    1719              :         { return this->replace(begin(), end(), __first, __last); }
+    1720              : 
+    1721              : #if __cplusplus >= 201103L
+    1722              :       /**
+    1723              :        *  @brief  Set value to an initializer_list of characters.
+    1724              :        *  @param __l  The initializer_list of characters to assign.
+    1725              :        *  @return  Reference to this string.
+    1726              :        */
+    1727              :       _GLIBCXX20_CONSTEXPR
+    1728              :       basic_string&
+    1729              :       assign(initializer_list<_CharT> __l)
+    1730              :       { return this->assign(__l.begin(), __l.size()); }
+    1731              : #endif // C++11
+    1732              : 
+    1733              : #if __cplusplus >= 201703L
+    1734              :       /**
+    1735              :        *  @brief  Set value from a string_view.
+    1736              :        *  @param __svt  The source object convertible to string_view.
+    1737              :        *  @return  Reference to this string.
+    1738              :        */
+    1739              :       template<typename _Tp>
+    1740              :         _GLIBCXX20_CONSTEXPR
+    1741              :         _If_sv<_Tp, basic_string&>
+    1742              :         assign(const _Tp& __svt)
+    1743              :         {
+    1744              :           __sv_type __sv = __svt;
+    1745              :           return this->assign(__sv.data(), __sv.size());
+    1746              :         }
+    1747              : 
+    1748              :       /**
+    1749              :        *  @brief  Set value from a range of characters in a string_view.
+    1750              :        *  @param __svt  The source object convertible to string_view.
+    1751              :        *  @param __pos  The position in the string_view to assign from.
+    1752              :        *  @param __n  The number of characters to assign.
+    1753              :        *  @return  Reference to this string.
+    1754              :        */
+    1755              :       template<typename _Tp>
+    1756              :         _GLIBCXX20_CONSTEXPR
+    1757              :         _If_sv<_Tp, basic_string&>
+    1758              :         assign(const _Tp& __svt, size_type __pos, size_type __n = npos)
+    1759              :         {
+    1760              :           __sv_type __sv = __svt;
+    1761              :           return _M_replace(size_type(0), this->size(),
+    1762              :               __sv.data()
+    1763              :               + std::__sv_check(__sv.size(), __pos, "basic_string::assign"),
+    1764              :               std::__sv_limit(__sv.size(), __pos, __n));
+    1765              :         }
+    1766              : #endif // C++17
+    1767              : 
+    1768              : #if __cplusplus >= 201103L
+    1769              :       /**
+    1770              :        *  @brief  Insert multiple characters.
+    1771              :        *  @param __p  Const_iterator referencing location in string to
+    1772              :        *              insert at.
+    1773              :        *  @param __n  Number of characters to insert
+    1774              :        *  @param __c  The character to insert.
+    1775              :        *  @return  Iterator referencing the first inserted char.
+    1776              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    1777              :        *
+    1778              :        *  Inserts @a __n copies of character @a __c starting at the
+    1779              :        *  position referenced by iterator @a __p.  If adding
+    1780              :        *  characters causes the length to exceed max_size(),
+    1781              :        *  length_error is thrown.  The value of the string doesn't
+    1782              :        *  change if an error is thrown.
+    1783              :       */
+    1784              :       _GLIBCXX20_CONSTEXPR
+    1785              :       iterator
+    1786              :       insert(const_iterator __p, size_type __n, _CharT __c)
+    1787              :       {
+    1788              :         _GLIBCXX_DEBUG_PEDASSERT(__p >= begin() && __p <= end());
+    1789              :         const size_type __pos = __p - begin();
+    1790              :         this->replace(__p, __p, __n, __c);
+    1791              :         return iterator(this->_M_data() + __pos);
+    1792              :       }
+    1793              : #else
+    1794              :       /**
+    1795              :        *  @brief  Insert multiple characters.
+    1796              :        *  @param __p  Iterator referencing location in string to insert at.
+    1797              :        *  @param __n  Number of characters to insert
+    1798              :        *  @param __c  The character to insert.
+    1799              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    1800              :        *
+    1801              :        *  Inserts @a __n copies of character @a __c starting at the
+    1802              :        *  position referenced by iterator @a __p.  If adding
+    1803              :        *  characters causes the length to exceed max_size(),
+    1804              :        *  length_error is thrown.  The value of the string doesn't
+    1805              :        *  change if an error is thrown.
+    1806              :       */
+    1807              :       void
+    1808              :       insert(iterator __p, size_type __n, _CharT __c)
+    1809              :       { this->replace(__p, __p, __n, __c);  }
+    1810              : #endif
+    1811              : 
+    1812              : #if __cplusplus >= 201103L
+    1813              :       /**
+    1814              :        *  @brief  Insert a range of characters.
+    1815              :        *  @param __p  Const_iterator referencing location in string to
+    1816              :        *              insert at.
+    1817              :        *  @param __beg  Start of range.
+    1818              :        *  @param __end  End of range.
+    1819              :        *  @return  Iterator referencing the first inserted char.
+    1820              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    1821              :        *
+    1822              :        *  Inserts characters in range [beg,end).  If adding characters
+    1823              :        *  causes the length to exceed max_size(), length_error is
+    1824              :        *  thrown.  The value of the string doesn't change if an error
+    1825              :        *  is thrown.
+    1826              :       */
+    1827              :       template<class _InputIterator,
+    1828              :                typename = std::_RequireInputIter<_InputIterator>>
+    1829              :         _GLIBCXX20_CONSTEXPR
+    1830              :         iterator
+    1831              :         insert(const_iterator __p, _InputIterator __beg, _InputIterator __end)
+    1832              :         {
+    1833              :           _GLIBCXX_DEBUG_PEDASSERT(__p >= begin() && __p <= end());
+    1834              :           const size_type __pos = __p - begin();
+    1835              :           this->replace(__p, __p, __beg, __end);
+    1836              :           return iterator(this->_M_data() + __pos);
+    1837              :         }
+    1838              : #else
+    1839              :       /**
+    1840              :        *  @brief  Insert a range of characters.
+    1841              :        *  @param __p  Iterator referencing location in string to insert at.
+    1842              :        *  @param __beg  Start of range.
+    1843              :        *  @param __end  End of range.
+    1844              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    1845              :        *
+    1846              :        *  Inserts characters in range [__beg,__end).  If adding
+    1847              :        *  characters causes the length to exceed max_size(),
+    1848              :        *  length_error is thrown.  The value of the string doesn't
+    1849              :        *  change if an error is thrown.
+    1850              :       */
+    1851              :       template<class _InputIterator>
+    1852              :         void
+    1853              :         insert(iterator __p, _InputIterator __beg, _InputIterator __end)
+    1854              :         { this->replace(__p, __p, __beg, __end); }
+    1855              : #endif
+    1856              : 
+    1857              : #if __cplusplus >= 201103L
+    1858              :       /**
+    1859              :        *  @brief  Insert an initializer_list of characters.
+    1860              :        *  @param __p  Iterator referencing location in string to insert at.
+    1861              :        *  @param __l  The initializer_list of characters to insert.
+    1862              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    1863              :        */
+    1864              :       _GLIBCXX20_CONSTEXPR
+    1865              :       iterator
+    1866              :       insert(const_iterator __p, initializer_list<_CharT> __l)
+    1867              :       { return this->insert(__p, __l.begin(), __l.end()); }
+    1868              : 
+    1869              : #ifdef _GLIBCXX_DEFINING_STRING_INSTANTIATIONS
+    1870              :       // See PR libstdc++/83328
+    1871              :       void
+    1872              :       insert(iterator __p, initializer_list<_CharT> __l)
+    1873              :       {
+    1874              :         _GLIBCXX_DEBUG_PEDASSERT(__p >= begin() && __p <= end());
+    1875              :         this->insert(__p - begin(), __l.begin(), __l.size());
+    1876              :       }
+    1877              : #endif
+    1878              : #endif // C++11
+    1879              : 
+    1880              :       /**
+    1881              :        *  @brief  Insert value of a string.
+    1882              :        *  @param __pos1 Position in string to insert at.
+    1883              :        *  @param __str  The string to insert.
+    1884              :        *  @return  Reference to this string.
+    1885              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    1886              :        *
+    1887              :        *  Inserts value of @a __str starting at @a __pos1.  If adding
+    1888              :        *  characters causes the length to exceed max_size(),
+    1889              :        *  length_error is thrown.  The value of the string doesn't
+    1890              :        *  change if an error is thrown.
+    1891              :       */
+    1892              :       _GLIBCXX20_CONSTEXPR
+    1893              :       basic_string&
+    1894              :       insert(size_type __pos1, const basic_string& __str)
+    1895              :       { return this->replace(__pos1, size_type(0),
+    1896              :                              __str._M_data(), __str.size()); }
+    1897              : 
+    1898              :       /**
+    1899              :        *  @brief  Insert a substring.
+    1900              :        *  @param __pos1  Position in string to insert at.
+    1901              :        *  @param __str   The string to insert.
+    1902              :        *  @param __pos2  Start of characters in str to insert.
+    1903              :        *  @param __n  Number of characters to insert.
+    1904              :        *  @return  Reference to this string.
+    1905              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    1906              :        *  @throw  std::out_of_range  If @a pos1 > size() or
+    1907              :        *  @a __pos2 > @a str.size().
+    1908              :        *
+    1909              :        *  Starting at @a pos1, insert @a __n character of @a __str
+    1910              :        *  beginning with @a __pos2.  If adding characters causes the
+    1911              :        *  length to exceed max_size(), length_error is thrown.  If @a
+    1912              :        *  __pos1 is beyond the end of this string or @a __pos2 is
+    1913              :        *  beyond the end of @a __str, out_of_range is thrown.  The
+    1914              :        *  value of the string doesn't change if an error is thrown.
+    1915              :       */
+    1916              :       _GLIBCXX20_CONSTEXPR
+    1917              :       basic_string&
+    1918              :       insert(size_type __pos1, const basic_string& __str,
+    1919              :              size_type __pos2, size_type __n = npos)
+    1920              :       { return this->replace(__pos1, size_type(0), __str._M_data()
+    1921              :                              + __str._M_check(__pos2, "basic_string::insert"),
+    1922              :                              __str._M_limit(__pos2, __n)); }
+    1923              : 
+    1924              :       /**
+    1925              :        *  @brief  Insert a C substring.
+    1926              :        *  @param __pos  Position in string to insert at.
+    1927              :        *  @param __s  The C string to insert.
+    1928              :        *  @param __n  The number of characters to insert.
+    1929              :        *  @return  Reference to this string.
+    1930              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    1931              :        *  @throw  std::out_of_range  If @a __pos is beyond the end of this
+    1932              :        *  string.
+    1933              :        *
+    1934              :        *  Inserts the first @a __n characters of @a __s starting at @a
+    1935              :        *  __pos.  If adding characters causes the length to exceed
+    1936              :        *  max_size(), length_error is thrown.  If @a __pos is beyond
+    1937              :        *  end(), out_of_range is thrown.  The value of the string
+    1938              :        *  doesn't change if an error is thrown.
+    1939              :       */
+    1940              :       _GLIBCXX20_CONSTEXPR
+    1941              :       basic_string&
+    1942              :       insert(size_type __pos, const _CharT* __s, size_type __n)
+    1943              :       { return this->replace(__pos, size_type(0), __s, __n); }
+    1944              : 
+    1945              :       /**
+    1946              :        *  @brief  Insert a C string.
+    1947              :        *  @param __pos  Position in string to insert at.
+    1948              :        *  @param __s  The C string to insert.
+    1949              :        *  @return  Reference to this string.
+    1950              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    1951              :        *  @throw  std::out_of_range  If @a pos is beyond the end of this
+    1952              :        *  string.
+    1953              :        *
+    1954              :        *  Inserts the first @a n characters of @a __s starting at @a __pos.  If
+    1955              :        *  adding characters causes the length to exceed max_size(),
+    1956              :        *  length_error is thrown.  If @a __pos is beyond end(), out_of_range is
+    1957              :        *  thrown.  The value of the string doesn't change if an error is
+    1958              :        *  thrown.
+    1959              :       */
+    1960              :       _GLIBCXX20_CONSTEXPR
+    1961              :       basic_string&
+    1962              :       insert(size_type __pos, const _CharT* __s)
+    1963              :       {
+    1964              :         __glibcxx_requires_string(__s);
+    1965              :         return this->replace(__pos, size_type(0), __s,
+    1966              :                              traits_type::length(__s));
+    1967              :       }
+    1968              : 
+    1969              :       /**
+    1970              :        *  @brief  Insert multiple characters.
+    1971              :        *  @param __pos  Index in string to insert at.
+    1972              :        *  @param __n  Number of characters to insert
+    1973              :        *  @param __c  The character to insert.
+    1974              :        *  @return  Reference to this string.
+    1975              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    1976              :        *  @throw  std::out_of_range  If @a __pos is beyond the end of this
+    1977              :        *  string.
+    1978              :        *
+    1979              :        *  Inserts @a __n copies of character @a __c starting at index
+    1980              :        *  @a __pos.  If adding characters causes the length to exceed
+    1981              :        *  max_size(), length_error is thrown.  If @a __pos > length(),
+    1982              :        *  out_of_range is thrown.  The value of the string doesn't
+    1983              :        *  change if an error is thrown.
+    1984              :       */
+    1985              :       _GLIBCXX20_CONSTEXPR
+    1986              :       basic_string&
+    1987              :       insert(size_type __pos, size_type __n, _CharT __c)
+    1988              :       { return _M_replace_aux(_M_check(__pos, "basic_string::insert"),
+    1989              :                               size_type(0), __n, __c); }
+    1990              : 
+    1991              :       /**
+    1992              :        *  @brief  Insert one character.
+    1993              :        *  @param __p  Iterator referencing position in string to insert at.
+    1994              :        *  @param __c  The character to insert.
+    1995              :        *  @return  Iterator referencing newly inserted char.
+    1996              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    1997              :        *
+    1998              :        *  Inserts character @a __c at position referenced by @a __p.
+    1999              :        *  If adding character causes the length to exceed max_size(),
+    2000              :        *  length_error is thrown.  If @a __p is beyond end of string,
+    2001              :        *  out_of_range is thrown.  The value of the string doesn't
+    2002              :        *  change if an error is thrown.
+    2003              :       */
+    2004              :       _GLIBCXX20_CONSTEXPR
+    2005              :       iterator
+    2006              :       insert(__const_iterator __p, _CharT __c)
+    2007              :       {
+    2008              :         _GLIBCXX_DEBUG_PEDASSERT(__p >= begin() && __p <= end());
+    2009              :         const size_type __pos = __p - begin();
+    2010              :         _M_replace_aux(__pos, size_type(0), size_type(1), __c);
+    2011              :         return iterator(_M_data() + __pos);
+    2012              :       }
+    2013              : 
+    2014              : #if __cplusplus >= 201703L
+    2015              :       /**
+    2016              :        *  @brief  Insert a string_view.
+    2017              :        *  @param __pos  Position in string to insert at.
+    2018              :        *  @param __svt  The object convertible to string_view to insert.
+    2019              :        *  @return  Reference to this string.
+    2020              :       */
+    2021              :       template<typename _Tp>
+    2022              :         _GLIBCXX20_CONSTEXPR
+    2023              :         _If_sv<_Tp, basic_string&>
+    2024              :         insert(size_type __pos, const _Tp& __svt)
+    2025              :         {
+    2026              :           __sv_type __sv = __svt;
+    2027              :           return this->insert(__pos, __sv.data(), __sv.size());
+    2028              :         }
+    2029              : 
+    2030              :       /**
+    2031              :        *  @brief  Insert a string_view.
+    2032              :        *  @param __pos1  Position in string to insert at.
+    2033              :        *  @param __svt   The object convertible to string_view to insert from.
+    2034              :        *  @param __pos2  Start of characters in str to insert.
+    2035              :        *  @param __n    The number of characters to insert.
+    2036              :        *  @return  Reference to this string.
+    2037              :       */
+    2038              :       template<typename _Tp>
+    2039              :         _GLIBCXX20_CONSTEXPR
+    2040              :         _If_sv<_Tp, basic_string&>
+    2041              :         insert(size_type __pos1, const _Tp& __svt,
+    2042              :                size_type __pos2, size_type __n = npos)
+    2043              :         {
+    2044              :           __sv_type __sv = __svt;
+    2045              :           return this->replace(__pos1, size_type(0),
+    2046              :               __sv.data()
+    2047              :               + std::__sv_check(__sv.size(), __pos2, "basic_string::insert"),
+    2048              :               std::__sv_limit(__sv.size(), __pos2, __n));
+    2049              :         }
+    2050              : #endif // C++17
+    2051              : 
+    2052              :       /**
+    2053              :        *  @brief  Remove characters.
+    2054              :        *  @param __pos  Index of first character to remove (default 0).
+    2055              :        *  @param __n  Number of characters to remove (default remainder).
+    2056              :        *  @return  Reference to this string.
+    2057              :        *  @throw  std::out_of_range  If @a pos is beyond the end of this
+    2058              :        *  string.
+    2059              :        *
+    2060              :        *  Removes @a __n characters from this string starting at @a
+    2061              :        *  __pos.  The length of the string is reduced by @a __n.  If
+    2062              :        *  there are < @a __n characters to remove, the remainder of
+    2063              :        *  the string is truncated.  If @a __p is beyond end of string,
+    2064              :        *  out_of_range is thrown.  The value of the string doesn't
+    2065              :        *  change if an error is thrown.
+    2066              :       */
+    2067              :       _GLIBCXX20_CONSTEXPR
+    2068              :       basic_string&
+    2069              :       erase(size_type __pos = 0, size_type __n = npos)
+    2070              :       {
+    2071              :         _M_check(__pos, "basic_string::erase");
+    2072              :         if (__n == npos)
+    2073              :           this->_M_set_length(__pos);
+    2074              :         else if (__n != 0)
+    2075              :           this->_M_erase(__pos, _M_limit(__pos, __n));
+    2076              :         return *this;
+    2077              :       }
+    2078              : 
+    2079              :       /**
+    2080              :        *  @brief  Remove one character.
+    2081              :        *  @param __position  Iterator referencing the character to remove.
+    2082              :        *  @return  iterator referencing same location after removal.
+    2083              :        *
+    2084              :        *  Removes the character at @a __position from this string. The value
+    2085              :        *  of the string doesn't change if an error is thrown.
+    2086              :       */
+    2087              :       _GLIBCXX20_CONSTEXPR
+    2088              :       iterator
+    2089              :       erase(__const_iterator __position)
+    2090              :       {
+    2091              :         _GLIBCXX_DEBUG_PEDASSERT(__position >= begin()
+    2092              :                                  && __position < end());
+    2093              :         const size_type __pos = __position - begin();
+    2094              :         this->_M_erase(__pos, size_type(1));
+    2095              :         return iterator(_M_data() + __pos);
+    2096              :       }
+    2097              : 
+    2098              :       /**
+    2099              :        *  @brief  Remove a range of characters.
+    2100              :        *  @param __first  Iterator referencing the first character to remove.
+    2101              :        *  @param __last  Iterator referencing the end of the range.
+    2102              :        *  @return  Iterator referencing location of first after removal.
+    2103              :        *
+    2104              :        *  Removes the characters in the range [first,last) from this string.
+    2105              :        *  The value of the string doesn't change if an error is thrown.
+    2106              :       */
+    2107              :       _GLIBCXX20_CONSTEXPR
+    2108              :       iterator
+    2109              :       erase(__const_iterator __first, __const_iterator __last)
+    2110              :       {
+    2111              :         _GLIBCXX_DEBUG_PEDASSERT(__first >= begin() && __first <= __last
+    2112              :                                  && __last <= end());
+    2113              :         const size_type __pos = __first - begin();
+    2114              :         if (__last == end())
+    2115              :           this->_M_set_length(__pos);
+    2116              :         else
+    2117              :           this->_M_erase(__pos, __last - __first);
+    2118              :         return iterator(this->_M_data() + __pos);
+    2119              :       }
+    2120              : 
+    2121              : #if __cplusplus >= 201103L
+    2122              :       /**
+    2123              :        *  @brief  Remove the last character.
+    2124              :        *
+    2125              :        *  The string must be non-empty.
+    2126              :        */
+    2127              :       _GLIBCXX20_CONSTEXPR
+    2128              :       void
+    2129              :       pop_back() noexcept
+    2130              :       {
+    2131              :         __glibcxx_assert(!empty());
+    2132              :         _M_erase(size() - 1, 1);
+    2133              :       }
+    2134              : #endif // C++11
+    2135              : 
+    2136              :       /**
+    2137              :        *  @brief  Replace characters with value from another string.
+    2138              :        *  @param __pos  Index of first character to replace.
+    2139              :        *  @param __n  Number of characters to be replaced.
+    2140              :        *  @param __str  String to insert.
+    2141              :        *  @return  Reference to this string.
+    2142              :        *  @throw  std::out_of_range  If @a pos is beyond the end of this
+    2143              :        *  string.
+    2144              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    2145              :        *
+    2146              :        *  Removes the characters in the range [__pos,__pos+__n) from
+    2147              :        *  this string.  In place, the value of @a __str is inserted.
+    2148              :        *  If @a __pos is beyond end of string, out_of_range is thrown.
+    2149              :        *  If the length of the result exceeds max_size(), length_error
+    2150              :        *  is thrown.  The value of the string doesn't change if an
+    2151              :        *  error is thrown.
+    2152              :       */
+    2153              :       _GLIBCXX20_CONSTEXPR
+    2154              :       basic_string&
+    2155              :       replace(size_type __pos, size_type __n, const basic_string& __str)
+    2156              :       { return this->replace(__pos, __n, __str._M_data(), __str.size()); }
+    2157              : 
+    2158              :       /**
+    2159              :        *  @brief  Replace characters with value from another string.
+    2160              :        *  @param __pos1  Index of first character to replace.
+    2161              :        *  @param __n1  Number of characters to be replaced.
+    2162              :        *  @param __str  String to insert.
+    2163              :        *  @param __pos2  Index of first character of str to use.
+    2164              :        *  @param __n2  Number of characters from str to use.
+    2165              :        *  @return  Reference to this string.
+    2166              :        *  @throw  std::out_of_range  If @a __pos1 > size() or @a __pos2 >
+    2167              :        *  __str.size().
+    2168              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    2169              :        *
+    2170              :        *  Removes the characters in the range [__pos1,__pos1 + n) from this
+    2171              :        *  string.  In place, the value of @a __str is inserted.  If @a __pos is
+    2172              :        *  beyond end of string, out_of_range is thrown.  If the length of the
+    2173              :        *  result exceeds max_size(), length_error is thrown.  The value of the
+    2174              :        *  string doesn't change if an error is thrown.
+    2175              :       */
+    2176              :       _GLIBCXX20_CONSTEXPR
+    2177              :       basic_string&
+    2178              :       replace(size_type __pos1, size_type __n1, const basic_string& __str,
+    2179              :               size_type __pos2, size_type __n2 = npos)
+    2180              :       { return this->replace(__pos1, __n1, __str._M_data()
+    2181              :                              + __str._M_check(__pos2, "basic_string::replace"),
+    2182              :                              __str._M_limit(__pos2, __n2)); }
+    2183              : 
+    2184              :       /**
+    2185              :        *  @brief  Replace characters with value of a C substring.
+    2186              :        *  @param __pos  Index of first character to replace.
+    2187              :        *  @param __n1  Number of characters to be replaced.
+    2188              :        *  @param __s  C string to insert.
+    2189              :        *  @param __n2  Number of characters from @a s to use.
+    2190              :        *  @return  Reference to this string.
+    2191              :        *  @throw  std::out_of_range  If @a pos1 > size().
+    2192              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    2193              :        *
+    2194              :        *  Removes the characters in the range [__pos,__pos + __n1)
+    2195              :        *  from this string.  In place, the first @a __n2 characters of
+    2196              :        *  @a __s are inserted, or all of @a __s if @a __n2 is too large.  If
+    2197              :        *  @a __pos is beyond end of string, out_of_range is thrown.  If
+    2198              :        *  the length of result exceeds max_size(), length_error is
+    2199              :        *  thrown.  The value of the string doesn't change if an error
+    2200              :        *  is thrown.
+    2201              :       */
+    2202              :       _GLIBCXX20_CONSTEXPR
+    2203              :       basic_string&
+    2204              :       replace(size_type __pos, size_type __n1, const _CharT* __s,
+    2205              :               size_type __n2)
+    2206              :       {
+    2207              :         __glibcxx_requires_string_len(__s, __n2);
+    2208              :         return _M_replace(_M_check(__pos, "basic_string::replace"),
+    2209              :                           _M_limit(__pos, __n1), __s, __n2);
+    2210              :       }
+    2211              : 
+    2212              :       /**
+    2213              :        *  @brief  Replace characters with value of a C string.
+    2214              :        *  @param __pos  Index of first character to replace.
+    2215              :        *  @param __n1  Number of characters to be replaced.
+    2216              :        *  @param __s  C string to insert.
+    2217              :        *  @return  Reference to this string.
+    2218              :        *  @throw  std::out_of_range  If @a pos > size().
+    2219              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    2220              :        *
+    2221              :        *  Removes the characters in the range [__pos,__pos + __n1)
+    2222              :        *  from this string.  In place, the characters of @a __s are
+    2223              :        *  inserted.  If @a __pos is beyond end of string, out_of_range
+    2224              :        *  is thrown.  If the length of result exceeds max_size(),
+    2225              :        *  length_error is thrown.  The value of the string doesn't
+    2226              :        *  change if an error is thrown.
+    2227              :       */
+    2228              :       _GLIBCXX20_CONSTEXPR
+    2229              :       basic_string&
+    2230              :       replace(size_type __pos, size_type __n1, const _CharT* __s)
+    2231              :       {
+    2232              :         __glibcxx_requires_string(__s);
+    2233              :         return this->replace(__pos, __n1, __s, traits_type::length(__s));
+    2234              :       }
+    2235              : 
+    2236              :       /**
+    2237              :        *  @brief  Replace characters with multiple characters.
+    2238              :        *  @param __pos  Index of first character to replace.
+    2239              :        *  @param __n1  Number of characters to be replaced.
+    2240              :        *  @param __n2  Number of characters to insert.
+    2241              :        *  @param __c  Character to insert.
+    2242              :        *  @return  Reference to this string.
+    2243              :        *  @throw  std::out_of_range  If @a __pos > size().
+    2244              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    2245              :        *
+    2246              :        *  Removes the characters in the range [pos,pos + n1) from this
+    2247              :        *  string.  In place, @a __n2 copies of @a __c are inserted.
+    2248              :        *  If @a __pos is beyond end of string, out_of_range is thrown.
+    2249              :        *  If the length of result exceeds max_size(), length_error is
+    2250              :        *  thrown.  The value of the string doesn't change if an error
+    2251              :        *  is thrown.
+    2252              :       */
+    2253              :       _GLIBCXX20_CONSTEXPR
+    2254              :       basic_string&
+    2255              :       replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c)
+    2256              :       { return _M_replace_aux(_M_check(__pos, "basic_string::replace"),
+    2257              :                               _M_limit(__pos, __n1), __n2, __c); }
+    2258              : 
+    2259              :       /**
+    2260              :        *  @brief  Replace range of characters with string.
+    2261              :        *  @param __i1  Iterator referencing start of range to replace.
+    2262              :        *  @param __i2  Iterator referencing end of range to replace.
+    2263              :        *  @param __str  String value to insert.
+    2264              :        *  @return  Reference to this string.
+    2265              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    2266              :        *
+    2267              :        *  Removes the characters in the range [__i1,__i2).  In place,
+    2268              :        *  the value of @a __str is inserted.  If the length of result
+    2269              :        *  exceeds max_size(), length_error is thrown.  The value of
+    2270              :        *  the string doesn't change if an error is thrown.
+    2271              :       */
+    2272              :       _GLIBCXX20_CONSTEXPR
+    2273              :       basic_string&
+    2274              :       replace(__const_iterator __i1, __const_iterator __i2,
+    2275              :               const basic_string& __str)
+    2276              :       { return this->replace(__i1, __i2, __str._M_data(), __str.size()); }
+    2277              : 
+    2278              :       /**
+    2279              :        *  @brief  Replace range of characters with C substring.
+    2280              :        *  @param __i1  Iterator referencing start of range to replace.
+    2281              :        *  @param __i2  Iterator referencing end of range to replace.
+    2282              :        *  @param __s  C string value to insert.
+    2283              :        *  @param __n  Number of characters from s to insert.
+    2284              :        *  @return  Reference to this string.
+    2285              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    2286              :        *
+    2287              :        *  Removes the characters in the range [__i1,__i2).  In place,
+    2288              :        *  the first @a __n characters of @a __s are inserted.  If the
+    2289              :        *  length of result exceeds max_size(), length_error is thrown.
+    2290              :        *  The value of the string doesn't change if an error is
+    2291              :        *  thrown.
+    2292              :       */
+    2293              :       _GLIBCXX20_CONSTEXPR
+    2294              :       basic_string&
+    2295              :       replace(__const_iterator __i1, __const_iterator __i2,
+    2296              :               const _CharT* __s, size_type __n)
+    2297              :       {
+    2298              :         _GLIBCXX_DEBUG_PEDASSERT(begin() <= __i1 && __i1 <= __i2
+    2299              :                                  && __i2 <= end());
+    2300              :         return this->replace(__i1 - begin(), __i2 - __i1, __s, __n);
+    2301              :       }
+    2302              : 
+    2303              :       /**
+    2304              :        *  @brief  Replace range of characters with C string.
+    2305              :        *  @param __i1  Iterator referencing start of range to replace.
+    2306              :        *  @param __i2  Iterator referencing end of range to replace.
+    2307              :        *  @param __s  C string value to insert.
+    2308              :        *  @return  Reference to this string.
+    2309              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    2310              :        *
+    2311              :        *  Removes the characters in the range [__i1,__i2).  In place,
+    2312              :        *  the characters of @a __s are inserted.  If the length of
+    2313              :        *  result exceeds max_size(), length_error is thrown.  The
+    2314              :        *  value of the string doesn't change if an error is thrown.
+    2315              :       */
+    2316              :       _GLIBCXX20_CONSTEXPR
+    2317              :       basic_string&
+    2318              :       replace(__const_iterator __i1, __const_iterator __i2, const _CharT* __s)
+    2319              :       {
+    2320              :         __glibcxx_requires_string(__s);
+    2321              :         return this->replace(__i1, __i2, __s, traits_type::length(__s));
+    2322              :       }
+    2323              : 
+    2324              :       /**
+    2325              :        *  @brief  Replace range of characters with multiple characters
+    2326              :        *  @param __i1  Iterator referencing start of range to replace.
+    2327              :        *  @param __i2  Iterator referencing end of range to replace.
+    2328              :        *  @param __n  Number of characters to insert.
+    2329              :        *  @param __c  Character to insert.
+    2330              :        *  @return  Reference to this string.
+    2331              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    2332              :        *
+    2333              :        *  Removes the characters in the range [__i1,__i2).  In place,
+    2334              :        *  @a __n copies of @a __c are inserted.  If the length of
+    2335              :        *  result exceeds max_size(), length_error is thrown.  The
+    2336              :        *  value of the string doesn't change if an error is thrown.
+    2337              :       */
+    2338              :       _GLIBCXX20_CONSTEXPR
+    2339              :       basic_string&
+    2340              :       replace(__const_iterator __i1, __const_iterator __i2, size_type __n,
+    2341              :               _CharT __c)
+    2342              :       {
+    2343              :         _GLIBCXX_DEBUG_PEDASSERT(begin() <= __i1 && __i1 <= __i2
+    2344              :                                  && __i2 <= end());
+    2345              :         return _M_replace_aux(__i1 - begin(), __i2 - __i1, __n, __c);
+    2346              :       }
+    2347              : 
+    2348              :       /**
+    2349              :        *  @brief  Replace range of characters with range.
+    2350              :        *  @param __i1  Iterator referencing start of range to replace.
+    2351              :        *  @param __i2  Iterator referencing end of range to replace.
+    2352              :        *  @param __k1  Iterator referencing start of range to insert.
+    2353              :        *  @param __k2  Iterator referencing end of range to insert.
+    2354              :        *  @return  Reference to this string.
+    2355              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    2356              :        *
+    2357              :        *  Removes the characters in the range [__i1,__i2).  In place,
+    2358              :        *  characters in the range [__k1,__k2) are inserted.  If the
+    2359              :        *  length of result exceeds max_size(), length_error is thrown.
+    2360              :        *  The value of the string doesn't change if an error is
+    2361              :        *  thrown.
+    2362              :       */
+    2363              : #if __cplusplus >= 201103L
+    2364              :       template<class _InputIterator,
+    2365              :                typename = std::_RequireInputIter<_InputIterator>>
+    2366              :         _GLIBCXX20_CONSTEXPR
+    2367              :         basic_string&
+    2368              :         replace(const_iterator __i1, const_iterator __i2,
+    2369              :                 _InputIterator __k1, _InputIterator __k2)
+    2370              :         {
+    2371              :           _GLIBCXX_DEBUG_PEDASSERT(begin() <= __i1 && __i1 <= __i2
+    2372              :                                    && __i2 <= end());
+    2373              :           __glibcxx_requires_valid_range(__k1, __k2);
+    2374              :           return this->_M_replace_dispatch(__i1, __i2, __k1, __k2,
+    2375              :                                            std::__false_type());
+    2376              :         }
+    2377              : #else
+    2378              :       template<class _InputIterator>
+    2379              : #ifdef _GLIBCXX_DISAMBIGUATE_REPLACE_INST
+    2380              :         typename __enable_if_not_native_iterator<_InputIterator>::__type
+    2381              : #else
+    2382              :         basic_string&
+    2383              : #endif
+    2384              :         replace(iterator __i1, iterator __i2,
+    2385              :                 _InputIterator __k1, _InputIterator __k2)
+    2386              :         {
+    2387              :           _GLIBCXX_DEBUG_PEDASSERT(begin() <= __i1 && __i1 <= __i2
+    2388              :                                    && __i2 <= end());
+    2389              :           __glibcxx_requires_valid_range(__k1, __k2);
+    2390              :           typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+    2391              :           return _M_replace_dispatch(__i1, __i2, __k1, __k2, _Integral());
+    2392              :         }
+    2393              : #endif
+    2394              : 
+    2395              :       // Specializations for the common case of pointer and iterator:
+    2396              :       // useful to avoid the overhead of temporary buffering in _M_replace.
+    2397              :       _GLIBCXX20_CONSTEXPR
+    2398              :       basic_string&
+    2399              :       replace(__const_iterator __i1, __const_iterator __i2,
+    2400              :               _CharT* __k1, _CharT* __k2)
+    2401              :       {
+    2402              :         _GLIBCXX_DEBUG_PEDASSERT(begin() <= __i1 && __i1 <= __i2
+    2403              :                                  && __i2 <= end());
+    2404              :         __glibcxx_requires_valid_range(__k1, __k2);
+    2405              :         return this->replace(__i1 - begin(), __i2 - __i1,
+    2406              :                              __k1, __k2 - __k1);
+    2407              :       }
+    2408              : 
+    2409              :       _GLIBCXX20_CONSTEXPR
+    2410              :       basic_string&
+    2411              :       replace(__const_iterator __i1, __const_iterator __i2,
+    2412              :               const _CharT* __k1, const _CharT* __k2)
+    2413              :       {
+    2414              :         _GLIBCXX_DEBUG_PEDASSERT(begin() <= __i1 && __i1 <= __i2
+    2415              :                                  && __i2 <= end());
+    2416              :         __glibcxx_requires_valid_range(__k1, __k2);
+    2417              :         return this->replace(__i1 - begin(), __i2 - __i1,
+    2418              :                              __k1, __k2 - __k1);
+    2419              :       }
+    2420              : 
+    2421              :       _GLIBCXX20_CONSTEXPR
+    2422              :       basic_string&
+    2423              :       replace(__const_iterator __i1, __const_iterator __i2,
+    2424              :               iterator __k1, iterator __k2)
+    2425              :       {
+    2426              :         _GLIBCXX_DEBUG_PEDASSERT(begin() <= __i1 && __i1 <= __i2
+    2427              :                                  && __i2 <= end());
+    2428              :         __glibcxx_requires_valid_range(__k1, __k2);
+    2429              :         return this->replace(__i1 - begin(), __i2 - __i1,
+    2430              :                              __k1.base(), __k2 - __k1);
+    2431              :       }
+    2432              : 
+    2433              :       _GLIBCXX20_CONSTEXPR
+    2434              :       basic_string&
+    2435              :       replace(__const_iterator __i1, __const_iterator __i2,
+    2436              :               const_iterator __k1, const_iterator __k2)
+    2437              :       {
+    2438              :         _GLIBCXX_DEBUG_PEDASSERT(begin() <= __i1 && __i1 <= __i2
+    2439              :                                  && __i2 <= end());
+    2440              :         __glibcxx_requires_valid_range(__k1, __k2);
+    2441              :         return this->replace(__i1 - begin(), __i2 - __i1,
+    2442              :                              __k1.base(), __k2 - __k1);
+    2443              :       }
+    2444              : 
+    2445              : #if __cplusplus >= 201103L
+    2446              :       /**
+    2447              :        *  @brief  Replace range of characters with initializer_list.
+    2448              :        *  @param __i1  Iterator referencing start of range to replace.
+    2449              :        *  @param __i2  Iterator referencing end of range to replace.
+    2450              :        *  @param __l  The initializer_list of characters to insert.
+    2451              :        *  @return  Reference to this string.
+    2452              :        *  @throw  std::length_error  If new length exceeds @c max_size().
+    2453              :        *
+    2454              :        *  Removes the characters in the range [__i1,__i2).  In place,
+    2455              :        *  characters in the range [__k1,__k2) are inserted.  If the
+    2456              :        *  length of result exceeds max_size(), length_error is thrown.
+    2457              :        *  The value of the string doesn't change if an error is
+    2458              :        *  thrown.
+    2459              :       */
+    2460              :       _GLIBCXX20_CONSTEXPR
+    2461              :       basic_string& replace(const_iterator __i1, const_iterator __i2,
+    2462              :                             initializer_list<_CharT> __l)
+    2463              :       { return this->replace(__i1, __i2, __l.begin(), __l.size()); }
+    2464              : #endif // C++11
+    2465              : 
+    2466              : #if __cplusplus >= 201703L
+    2467              :       /**
+    2468              :        *  @brief  Replace range of characters with string_view.
+    2469              :        *  @param __pos  The position to replace at.
+    2470              :        *  @param __n    The number of characters to replace.
+    2471              :        *  @param __svt  The object convertible to string_view to insert.
+    2472              :        *  @return  Reference to this string.
+    2473              :       */
+    2474              :       template<typename _Tp>
+    2475              :         _GLIBCXX20_CONSTEXPR
+    2476              :         _If_sv<_Tp, basic_string&>
+    2477              :         replace(size_type __pos, size_type __n, const _Tp& __svt)
+    2478              :         {
+    2479              :           __sv_type __sv = __svt;
+    2480              :           return this->replace(__pos, __n, __sv.data(), __sv.size());
+    2481              :         }
+    2482              : 
+    2483              :       /**
+    2484              :        *  @brief  Replace range of characters with string_view.
+    2485              :        *  @param __pos1  The position to replace at.
+    2486              :        *  @param __n1    The number of characters to replace.
+    2487              :        *  @param __svt   The object convertible to string_view to insert from.
+    2488              :        *  @param __pos2  The position in the string_view to insert from.
+    2489              :        *  @param __n2    The number of characters to insert.
+    2490              :        *  @return  Reference to this string.
+    2491              :       */
+    2492              :       template<typename _Tp>
+    2493              :         _GLIBCXX20_CONSTEXPR
+    2494              :         _If_sv<_Tp, basic_string&>
+    2495              :         replace(size_type __pos1, size_type __n1, const _Tp& __svt,
+    2496              :                 size_type __pos2, size_type __n2 = npos)
+    2497              :         {
+    2498              :           __sv_type __sv = __svt;
+    2499              :           return this->replace(__pos1, __n1,
+    2500              :               __sv.data()
+    2501              :               + std::__sv_check(__sv.size(), __pos2, "basic_string::replace"),
+    2502              :               std::__sv_limit(__sv.size(), __pos2, __n2));
+    2503              :         }
+    2504              : 
+    2505              :       /**
+    2506              :        *  @brief  Replace range of characters with string_view.
+    2507              :        *  @param __i1    An iterator referencing the start position
+    2508              :           to replace at.
+    2509              :        *  @param __i2    An iterator referencing the end position
+    2510              :           for the replace.
+    2511              :        *  @param __svt   The object convertible to string_view to insert from.
+    2512              :        *  @return  Reference to this string.
+    2513              :       */
+    2514              :       template<typename _Tp>
+    2515              :         _GLIBCXX20_CONSTEXPR
+    2516              :         _If_sv<_Tp, basic_string&>
+    2517              :         replace(const_iterator __i1, const_iterator __i2, const _Tp& __svt)
+    2518              :         {
+    2519              :           __sv_type __sv = __svt;
+    2520              :           return this->replace(__i1 - begin(), __i2 - __i1, __sv);
+    2521              :         }
+    2522              : #endif // C++17
+    2523              : 
+    2524              :     private:
+    2525              :       template<class _Integer>
+    2526              :         _GLIBCXX20_CONSTEXPR
+    2527              :         basic_string&
+    2528              :         _M_replace_dispatch(const_iterator __i1, const_iterator __i2,
+    2529              :                             _Integer __n, _Integer __val, __true_type)
+    2530              :         { return _M_replace_aux(__i1 - begin(), __i2 - __i1, __n, __val); }
+    2531              : 
+    2532              :       template<class _InputIterator>
+    2533              :         _GLIBCXX20_CONSTEXPR
+    2534              :         basic_string&
+    2535              :         _M_replace_dispatch(const_iterator __i1, const_iterator __i2,
+    2536              :                             _InputIterator __k1, _InputIterator __k2,
+    2537              :                             __false_type);
+    2538              : 
+    2539              :       _GLIBCXX20_CONSTEXPR
+    2540              :       basic_string&
+    2541              :       _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2,
+    2542              :                      _CharT __c);
+    2543              : 
+    2544              :       __attribute__((__noinline__, __noclone__, __cold__)) void
+    2545              :       _M_replace_cold(pointer __p, size_type __len1, const _CharT* __s,
+    2546              :                       const size_type __len2, const size_type __how_much);
+    2547              : 
+    2548              :       _GLIBCXX20_CONSTEXPR
+    2549              :       basic_string&
+    2550              :       _M_replace(size_type __pos, size_type __len1, const _CharT* __s,
+    2551              :                  const size_type __len2);
+    2552              : 
+    2553              :       _GLIBCXX20_CONSTEXPR
+    2554              :       basic_string&
+    2555              :       _M_append(const _CharT* __s, size_type __n);
+    2556              : 
+    2557              :     public:
+    2558              : 
+    2559              :       /**
+    2560              :        *  @brief  Copy substring into C string.
+    2561              :        *  @param __s  C string to copy value into.
+    2562              :        *  @param __n  Number of characters to copy.
+    2563              :        *  @param __pos  Index of first character to copy.
+    2564              :        *  @return  Number of characters actually copied
+    2565              :        *  @throw  std::out_of_range  If __pos > size().
+    2566              :        *
+    2567              :        *  Copies up to @a __n characters starting at @a __pos into the
+    2568              :        *  C string @a __s.  If @a __pos is %greater than size(),
+    2569              :        *  out_of_range is thrown.
+    2570              :       */
+    2571              :       _GLIBCXX20_CONSTEXPR
+    2572              :       size_type
+    2573              :       copy(_CharT* __s, size_type __n, size_type __pos = 0) const;
+    2574              : 
+    2575              :       /**
+    2576              :        *  @brief  Swap contents with another string.
+    2577              :        *  @param __s  String to swap with.
+    2578              :        *
+    2579              :        *  Exchanges the contents of this string with that of @a __s in constant
+    2580              :        *  time.
+    2581              :       */
+    2582              :       _GLIBCXX20_CONSTEXPR
+    2583              :       void
+    2584              :       swap(basic_string& __s) _GLIBCXX_NOEXCEPT;
+    2585              : 
+    2586              :       // String operations:
+    2587              :       /**
+    2588              :        *  @brief  Return const pointer to null-terminated contents.
+    2589              :        *
+    2590              :        *  This is a handle to internal data.  Do not modify or dire things may
+    2591              :        *  happen.
+    2592              :       */
+    2593              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2594              :       const _CharT*
+    2595              :       c_str() const _GLIBCXX_NOEXCEPT
+    2596              :       { return _M_data(); }
+    2597              : 
+    2598              :       /**
+    2599              :        *  @brief  Return const pointer to contents.
+    2600              :        *
+    2601              :        *  This is a pointer to internal data.  It is undefined to modify
+    2602              :        *  the contents through the returned pointer. To get a pointer that
+    2603              :        *  allows modifying the contents use @c &str[0] instead,
+    2604              :        *  (or in C++17 the non-const @c str.data() overload).
+    2605              :       */
+    2606              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2607              :       const _CharT*
+    2608              :       data() const _GLIBCXX_NOEXCEPT
+    2609              :       { return _M_data(); }
+    2610              : 
+    2611              : #if __cplusplus >= 201703L
+    2612              :       /**
+    2613              :        *  @brief  Return non-const pointer to contents.
+    2614              :        *
+    2615              :        *  This is a pointer to the character sequence held by the string.
+    2616              :        *  Modifying the characters in the sequence is allowed.
+    2617              :       */
+    2618              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2619              :       _CharT*
+    2620              :       data() noexcept
+    2621              :       { return _M_data(); }
+    2622              : #endif
+    2623              : 
+    2624              :       /**
+    2625              :        *  @brief  Return copy of allocator used to construct this string.
+    2626              :       */
+    2627              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2628              :       allocator_type
+    2629              :       get_allocator() const _GLIBCXX_NOEXCEPT
+    2630              :       { return _M_get_allocator(); }
+    2631              : 
+    2632              :       /**
+    2633              :        *  @brief  Find position of a C substring.
+    2634              :        *  @param __s  C string to locate.
+    2635              :        *  @param __pos  Index of character to search from.
+    2636              :        *  @param __n  Number of characters from @a s to search for.
+    2637              :        *  @return  Index of start of first occurrence.
+    2638              :        *
+    2639              :        *  Starting from @a __pos, searches forward for the first @a
+    2640              :        *  __n characters in @a __s within this string.  If found,
+    2641              :        *  returns the index where it begins.  If not found, returns
+    2642              :        *  npos.
+    2643              :       */
+    2644              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2645              :       size_type
+    2646              :       find(const _CharT* __s, size_type __pos, size_type __n) const
+    2647              :       _GLIBCXX_NOEXCEPT;
+    2648              : 
+    2649              :       /**
+    2650              :        *  @brief  Find position of a string.
+    2651              :        *  @param __str  String to locate.
+    2652              :        *  @param __pos  Index of character to search from (default 0).
+    2653              :        *  @return  Index of start of first occurrence.
+    2654              :        *
+    2655              :        *  Starting from @a __pos, searches forward for value of @a __str within
+    2656              :        *  this string.  If found, returns the index where it begins.  If not
+    2657              :        *  found, returns npos.
+    2658              :       */
+    2659              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2660              :       size_type
+    2661              :       find(const basic_string& __str, size_type __pos = 0) const
+    2662              :       _GLIBCXX_NOEXCEPT
+    2663              :       { return this->find(__str.data(), __pos, __str.size()); }
+    2664              : 
+    2665              : #if __cplusplus >= 201703L
+    2666              :       /**
+    2667              :        *  @brief  Find position of a string_view.
+    2668              :        *  @param __svt  The object convertible to string_view to locate.
+    2669              :        *  @param __pos  Index of character to search from (default 0).
+    2670              :        *  @return  Index of start of first occurrence.
+    2671              :       */
+    2672              :       template<typename _Tp>
+    2673              :         _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2674              :         _If_sv<_Tp, size_type>
+    2675              :         find(const _Tp& __svt, size_type __pos = 0) const
+    2676              :         noexcept(is_same<_Tp, __sv_type>::value)
+    2677              :         {
+    2678              :           __sv_type __sv = __svt;
+    2679              :           return this->find(__sv.data(), __pos, __sv.size());
+    2680              :         }
+    2681              : #endif // C++17
+    2682              : 
+    2683              :       /**
+    2684              :        *  @brief  Find position of a C string.
+    2685              :        *  @param __s  C string to locate.
+    2686              :        *  @param __pos  Index of character to search from (default 0).
+    2687              :        *  @return  Index of start of first occurrence.
+    2688              :        *
+    2689              :        *  Starting from @a __pos, searches forward for the value of @a
+    2690              :        *  __s within this string.  If found, returns the index where
+    2691              :        *  it begins.  If not found, returns npos.
+    2692              :       */
+    2693              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2694              :       size_type
+    2695              :       find(const _CharT* __s, size_type __pos = 0) const _GLIBCXX_NOEXCEPT
+    2696              :       {
+    2697              :         __glibcxx_requires_string(__s);
+    2698              :         return this->find(__s, __pos, traits_type::length(__s));
+    2699              :       }
+    2700              : 
+    2701              :       /**
+    2702              :        *  @brief  Find position of a character.
+    2703              :        *  @param __c  Character to locate.
+    2704              :        *  @param __pos  Index of character to search from (default 0).
+    2705              :        *  @return  Index of first occurrence.
+    2706              :        *
+    2707              :        *  Starting from @a __pos, searches forward for @a __c within
+    2708              :        *  this string.  If found, returns the index where it was
+    2709              :        *  found.  If not found, returns npos.
+    2710              :       */
+    2711              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2712              :       size_type
+    2713              :       find(_CharT __c, size_type __pos = 0) const _GLIBCXX_NOEXCEPT;
+    2714              : 
+    2715              :       /**
+    2716              :        *  @brief  Find last position of a string.
+    2717              :        *  @param __str  String to locate.
+    2718              :        *  @param __pos  Index of character to search back from (default end).
+    2719              :        *  @return  Index of start of last occurrence.
+    2720              :        *
+    2721              :        *  Starting from @a __pos, searches backward for value of @a
+    2722              :        *  __str within this string.  If found, returns the index where
+    2723              :        *  it begins.  If not found, returns npos.
+    2724              :       */
+    2725              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2726              :       size_type
+    2727              :       rfind(const basic_string& __str, size_type __pos = npos) const
+    2728              :       _GLIBCXX_NOEXCEPT
+    2729              :       { return this->rfind(__str.data(), __pos, __str.size()); }
+    2730              : 
+    2731              : #if __cplusplus >= 201703L
+    2732              :       /**
+    2733              :        *  @brief  Find last position of a string_view.
+    2734              :        *  @param __svt  The object convertible to string_view to locate.
+    2735              :        *  @param __pos  Index of character to search back from (default end).
+    2736              :        *  @return  Index of start of last occurrence.
+    2737              :       */
+    2738              :       template<typename _Tp>
+    2739              :         _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2740              :         _If_sv<_Tp, size_type>
+    2741              :         rfind(const _Tp& __svt, size_type __pos = npos) const
+    2742              :         noexcept(is_same<_Tp, __sv_type>::value)
+    2743              :         {
+    2744              :           __sv_type __sv = __svt;
+    2745              :           return this->rfind(__sv.data(), __pos, __sv.size());
+    2746              :         }
+    2747              : #endif // C++17
+    2748              : 
+    2749              :       /**
+    2750              :        *  @brief  Find last position of a C substring.
+    2751              :        *  @param __s  C string to locate.
+    2752              :        *  @param __pos  Index of character to search back from.
+    2753              :        *  @param __n  Number of characters from s to search for.
+    2754              :        *  @return  Index of start of last occurrence.
+    2755              :        *
+    2756              :        *  Starting from @a __pos, searches backward for the first @a
+    2757              :        *  __n characters in @a __s within this string.  If found,
+    2758              :        *  returns the index where it begins.  If not found, returns
+    2759              :        *  npos.
+    2760              :       */
+    2761              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2762              :       size_type
+    2763              :       rfind(const _CharT* __s, size_type __pos, size_type __n) const
+    2764              :       _GLIBCXX_NOEXCEPT;
+    2765              : 
+    2766              :       /**
+    2767              :        *  @brief  Find last position of a C string.
+    2768              :        *  @param __s  C string to locate.
+    2769              :        *  @param __pos  Index of character to start search at (default end).
+    2770              :        *  @return  Index of start of  last occurrence.
+    2771              :        *
+    2772              :        *  Starting from @a __pos, searches backward for the value of
+    2773              :        *  @a __s within this string.  If found, returns the index
+    2774              :        *  where it begins.  If not found, returns npos.
+    2775              :       */
+    2776              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2777              :       size_type
+    2778              :       rfind(const _CharT* __s, size_type __pos = npos) const
+    2779              :       {
+    2780              :         __glibcxx_requires_string(__s);
+    2781              :         return this->rfind(__s, __pos, traits_type::length(__s));
+    2782              :       }
+    2783              : 
+    2784              :       /**
+    2785              :        *  @brief  Find last position of a character.
+    2786              :        *  @param __c  Character to locate.
+    2787              :        *  @param __pos  Index of character to search back from (default end).
+    2788              :        *  @return  Index of last occurrence.
+    2789              :        *
+    2790              :        *  Starting from @a __pos, searches backward for @a __c within
+    2791              :        *  this string.  If found, returns the index where it was
+    2792              :        *  found.  If not found, returns npos.
+    2793              :       */
+    2794              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2795              :       size_type
+    2796              :       rfind(_CharT __c, size_type __pos = npos) const _GLIBCXX_NOEXCEPT;
+    2797              : 
+    2798              :       /**
+    2799              :        *  @brief  Find position of a character of string.
+    2800              :        *  @param __str  String containing characters to locate.
+    2801              :        *  @param __pos  Index of character to search from (default 0).
+    2802              :        *  @return  Index of first occurrence.
+    2803              :        *
+    2804              :        *  Starting from @a __pos, searches forward for one of the
+    2805              :        *  characters of @a __str within this string.  If found,
+    2806              :        *  returns the index where it was found.  If not found, returns
+    2807              :        *  npos.
+    2808              :       */
+    2809              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2810              :       size_type
+    2811              :       find_first_of(const basic_string& __str, size_type __pos = 0) const
+    2812              :       _GLIBCXX_NOEXCEPT
+    2813              :       { return this->find_first_of(__str.data(), __pos, __str.size()); }
+    2814              : 
+    2815              : #if __cplusplus >= 201703L
+    2816              :       /**
+    2817              :        *  @brief  Find position of a character of a string_view.
+    2818              :        *  @param __svt  An object convertible to string_view containing
+    2819              :        *                characters to locate.
+    2820              :        *  @param __pos  Index of character to search from (default 0).
+    2821              :        *  @return  Index of first occurrence.
+    2822              :       */
+    2823              :       template<typename _Tp>
+    2824              :         _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2825              :         _If_sv<_Tp, size_type>
+    2826              :         find_first_of(const _Tp& __svt, size_type __pos = 0) const
+    2827              :         noexcept(is_same<_Tp, __sv_type>::value)
+    2828              :         {
+    2829              :           __sv_type __sv = __svt;
+    2830              :           return this->find_first_of(__sv.data(), __pos, __sv.size());
+    2831              :         }
+    2832              : #endif // C++17
+    2833              : 
+    2834              :       /**
+    2835              :        *  @brief  Find position of a character of C substring.
+    2836              :        *  @param __s  String containing characters to locate.
+    2837              :        *  @param __pos  Index of character to search from.
+    2838              :        *  @param __n  Number of characters from s to search for.
+    2839              :        *  @return  Index of first occurrence.
+    2840              :        *
+    2841              :        *  Starting from @a __pos, searches forward for one of the
+    2842              :        *  first @a __n characters of @a __s within this string.  If
+    2843              :        *  found, returns the index where it was found.  If not found,
+    2844              :        *  returns npos.
+    2845              :       */
+    2846              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2847              :       size_type
+    2848              :       find_first_of(const _CharT* __s, size_type __pos, size_type __n) const
+    2849              :       _GLIBCXX_NOEXCEPT;
+    2850              : 
+    2851              :       /**
+    2852              :        *  @brief  Find position of a character of C string.
+    2853              :        *  @param __s  String containing characters to locate.
+    2854              :        *  @param __pos  Index of character to search from (default 0).
+    2855              :        *  @return  Index of first occurrence.
+    2856              :        *
+    2857              :        *  Starting from @a __pos, searches forward for one of the
+    2858              :        *  characters of @a __s within this string.  If found, returns
+    2859              :        *  the index where it was found.  If not found, returns npos.
+    2860              :       */
+    2861              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2862              :       size_type
+    2863              :       find_first_of(const _CharT* __s, size_type __pos = 0) const
+    2864              :       _GLIBCXX_NOEXCEPT
+    2865              :       {
+    2866              :         __glibcxx_requires_string(__s);
+    2867              :         return this->find_first_of(__s, __pos, traits_type::length(__s));
+    2868              :       }
+    2869              : 
+    2870              :       /**
+    2871              :        *  @brief  Find position of a character.
+    2872              :        *  @param __c  Character to locate.
+    2873              :        *  @param __pos  Index of character to search from (default 0).
+    2874              :        *  @return  Index of first occurrence.
+    2875              :        *
+    2876              :        *  Starting from @a __pos, searches forward for the character
+    2877              :        *  @a __c within this string.  If found, returns the index
+    2878              :        *  where it was found.  If not found, returns npos.
+    2879              :        *
+    2880              :        *  Note: equivalent to find(__c, __pos).
+    2881              :       */
+    2882              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2883              :       size_type
+    2884              :       find_first_of(_CharT __c, size_type __pos = 0) const _GLIBCXX_NOEXCEPT
+    2885              :       { return this->find(__c, __pos); }
+    2886              : 
+    2887              :       /**
+    2888              :        *  @brief  Find last position of a character of string.
+    2889              :        *  @param __str  String containing characters to locate.
+    2890              :        *  @param __pos  Index of character to search back from (default end).
+    2891              :        *  @return  Index of last occurrence.
+    2892              :        *
+    2893              :        *  Starting from @a __pos, searches backward for one of the
+    2894              :        *  characters of @a __str within this string.  If found,
+    2895              :        *  returns the index where it was found.  If not found, returns
+    2896              :        *  npos.
+    2897              :       */
+    2898              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2899              :       size_type
+    2900              :       find_last_of(const basic_string& __str, size_type __pos = npos) const
+    2901              :       _GLIBCXX_NOEXCEPT
+    2902              :       { return this->find_last_of(__str.data(), __pos, __str.size()); }
+    2903              : 
+    2904              : #if __cplusplus >= 201703L
+    2905              :       /**
+    2906              :        *  @brief  Find last position of a character of string.
+    2907              :        *  @param __svt  An object convertible to string_view containing
+    2908              :        *                characters to locate.
+    2909              :        *  @param __pos  Index of character to search back from (default end).
+    2910              :        *  @return  Index of last occurrence.
+    2911              :       */
+    2912              :       template<typename _Tp>
+    2913              :         _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2914              :         _If_sv<_Tp, size_type>
+    2915              :         find_last_of(const _Tp& __svt, size_type __pos = npos) const
+    2916              :         noexcept(is_same<_Tp, __sv_type>::value)
+    2917              :         {
+    2918              :           __sv_type __sv = __svt;
+    2919              :           return this->find_last_of(__sv.data(), __pos, __sv.size());
+    2920              :         }
+    2921              : #endif // C++17
+    2922              : 
+    2923              :       /**
+    2924              :        *  @brief  Find last position of a character of C substring.
+    2925              :        *  @param __s  C string containing characters to locate.
+    2926              :        *  @param __pos  Index of character to search back from.
+    2927              :        *  @param __n  Number of characters from s to search for.
+    2928              :        *  @return  Index of last occurrence.
+    2929              :        *
+    2930              :        *  Starting from @a __pos, searches backward for one of the
+    2931              :        *  first @a __n characters of @a __s within this string.  If
+    2932              :        *  found, returns the index where it was found.  If not found,
+    2933              :        *  returns npos.
+    2934              :       */
+    2935              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2936              :       size_type
+    2937              :       find_last_of(const _CharT* __s, size_type __pos, size_type __n) const
+    2938              :       _GLIBCXX_NOEXCEPT;
+    2939              : 
+    2940              :       /**
+    2941              :        *  @brief  Find last position of a character of C string.
+    2942              :        *  @param __s  C string containing characters to locate.
+    2943              :        *  @param __pos  Index of character to search back from (default end).
+    2944              :        *  @return  Index of last occurrence.
+    2945              :        *
+    2946              :        *  Starting from @a __pos, searches backward for one of the
+    2947              :        *  characters of @a __s within this string.  If found, returns
+    2948              :        *  the index where it was found.  If not found, returns npos.
+    2949              :       */
+    2950              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2951              :       size_type
+    2952              :       find_last_of(const _CharT* __s, size_type __pos = npos) const
+    2953              :       _GLIBCXX_NOEXCEPT
+    2954              :       {
+    2955              :         __glibcxx_requires_string(__s);
+    2956              :         return this->find_last_of(__s, __pos, traits_type::length(__s));
+    2957              :       }
+    2958              : 
+    2959              :       /**
+    2960              :        *  @brief  Find last position of a character.
+    2961              :        *  @param __c  Character to locate.
+    2962              :        *  @param __pos  Index of character to search back from (default end).
+    2963              :        *  @return  Index of last occurrence.
+    2964              :        *
+    2965              :        *  Starting from @a __pos, searches backward for @a __c within
+    2966              :        *  this string.  If found, returns the index where it was
+    2967              :        *  found.  If not found, returns npos.
+    2968              :        *
+    2969              :        *  Note: equivalent to rfind(__c, __pos).
+    2970              :       */
+    2971              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2972              :       size_type
+    2973              :       find_last_of(_CharT __c, size_type __pos = npos) const _GLIBCXX_NOEXCEPT
+    2974              :       { return this->rfind(__c, __pos); }
+    2975              : 
+    2976              :       /**
+    2977              :        *  @brief  Find position of a character not in string.
+    2978              :        *  @param __str  String containing characters to avoid.
+    2979              :        *  @param __pos  Index of character to search from (default 0).
+    2980              :        *  @return  Index of first occurrence.
+    2981              :        *
+    2982              :        *  Starting from @a __pos, searches forward for a character not contained
+    2983              :        *  in @a __str within this string.  If found, returns the index where it
+    2984              :        *  was found.  If not found, returns npos.
+    2985              :       */
+    2986              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    2987              :       size_type
+    2988              :       find_first_not_of(const basic_string& __str, size_type __pos = 0) const
+    2989              :       _GLIBCXX_NOEXCEPT
+    2990              :       { return this->find_first_not_of(__str.data(), __pos, __str.size()); }
+    2991              : 
+    2992              : #if __cplusplus >= 201703L
+    2993              :       /**
+    2994              :        *  @brief  Find position of a character not in a string_view.
+    2995              :        *  @param __svt  A object convertible to string_view containing
+    2996              :        *                characters to avoid.
+    2997              :        *  @param __pos  Index of character to search from (default 0).
+    2998              :        *  @return  Index of first occurrence.
+    2999              :        */
+    3000              :       template<typename _Tp>
+    3001              :         _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3002              :         _If_sv<_Tp, size_type>
+    3003              :         find_first_not_of(const _Tp& __svt, size_type __pos = 0) const
+    3004              :         noexcept(is_same<_Tp, __sv_type>::value)
+    3005              :         {
+    3006              :           __sv_type __sv = __svt;
+    3007              :           return this->find_first_not_of(__sv.data(), __pos, __sv.size());
+    3008              :         }
+    3009              : #endif // C++17
+    3010              : 
+    3011              :       /**
+    3012              :        *  @brief  Find position of a character not in C substring.
+    3013              :        *  @param __s  C string containing characters to avoid.
+    3014              :        *  @param __pos  Index of character to search from.
+    3015              :        *  @param __n  Number of characters from __s to consider.
+    3016              :        *  @return  Index of first occurrence.
+    3017              :        *
+    3018              :        *  Starting from @a __pos, searches forward for a character not
+    3019              :        *  contained in the first @a __n characters of @a __s within
+    3020              :        *  this string.  If found, returns the index where it was
+    3021              :        *  found.  If not found, returns npos.
+    3022              :       */
+    3023              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3024              :       size_type
+    3025              :       find_first_not_of(const _CharT* __s, size_type __pos,
+    3026              :                         size_type __n) const _GLIBCXX_NOEXCEPT;
+    3027              : 
+    3028              :       /**
+    3029              :        *  @brief  Find position of a character not in C string.
+    3030              :        *  @param __s  C string containing characters to avoid.
+    3031              :        *  @param __pos  Index of character to search from (default 0).
+    3032              :        *  @return  Index of first occurrence.
+    3033              :        *
+    3034              :        *  Starting from @a __pos, searches forward for a character not
+    3035              :        *  contained in @a __s within this string.  If found, returns
+    3036              :        *  the index where it was found.  If not found, returns npos.
+    3037              :       */
+    3038              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3039              :       size_type
+    3040              :       find_first_not_of(const _CharT* __s, size_type __pos = 0) const
+    3041              :       _GLIBCXX_NOEXCEPT
+    3042              :       {
+    3043              :         __glibcxx_requires_string(__s);
+    3044              :         return this->find_first_not_of(__s, __pos, traits_type::length(__s));
+    3045              :       }
+    3046              : 
+    3047              :       /**
+    3048              :        *  @brief  Find position of a different character.
+    3049              :        *  @param __c  Character to avoid.
+    3050              :        *  @param __pos  Index of character to search from (default 0).
+    3051              :        *  @return  Index of first occurrence.
+    3052              :        *
+    3053              :        *  Starting from @a __pos, searches forward for a character
+    3054              :        *  other than @a __c within this string.  If found, returns the
+    3055              :        *  index where it was found.  If not found, returns npos.
+    3056              :       */
+    3057              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3058              :       size_type
+    3059              :       find_first_not_of(_CharT __c, size_type __pos = 0) const
+    3060              :       _GLIBCXX_NOEXCEPT;
+    3061              : 
+    3062              :       /**
+    3063              :        *  @brief  Find last position of a character not in string.
+    3064              :        *  @param __str  String containing characters to avoid.
+    3065              :        *  @param __pos  Index of character to search back from (default end).
+    3066              :        *  @return  Index of last occurrence.
+    3067              :        *
+    3068              :        *  Starting from @a __pos, searches backward for a character
+    3069              :        *  not contained in @a __str within this string.  If found,
+    3070              :        *  returns the index where it was found.  If not found, returns
+    3071              :        *  npos.
+    3072              :       */
+    3073              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3074              :       size_type
+    3075              :       find_last_not_of(const basic_string& __str, size_type __pos = npos) const
+    3076              :       _GLIBCXX_NOEXCEPT
+    3077              :       { return this->find_last_not_of(__str.data(), __pos, __str.size()); }
+    3078              : 
+    3079              : #if __cplusplus >= 201703L
+    3080              :       /**
+    3081              :        *  @brief  Find last position of a character not in a string_view.
+    3082              :        *  @param __svt  An object convertible to string_view containing
+    3083              :        *                characters to avoid.
+    3084              :        *  @param __pos  Index of character to search back from (default end).
+    3085              :        *  @return  Index of last occurrence.
+    3086              :        */
+    3087              :       template<typename _Tp>
+    3088              :         _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3089              :         _If_sv<_Tp, size_type>
+    3090              :         find_last_not_of(const _Tp& __svt, size_type __pos = npos) const
+    3091              :         noexcept(is_same<_Tp, __sv_type>::value)
+    3092              :         {
+    3093              :           __sv_type __sv = __svt;
+    3094              :           return this->find_last_not_of(__sv.data(), __pos, __sv.size());
+    3095              :         }
+    3096              : #endif // C++17
+    3097              : 
+    3098              :       /**
+    3099              :        *  @brief  Find last position of a character not in C substring.
+    3100              :        *  @param __s  C string containing characters to avoid.
+    3101              :        *  @param __pos  Index of character to search back from.
+    3102              :        *  @param __n  Number of characters from s to consider.
+    3103              :        *  @return  Index of last occurrence.
+    3104              :        *
+    3105              :        *  Starting from @a __pos, searches backward for a character not
+    3106              :        *  contained in the first @a __n characters of @a __s within this string.
+    3107              :        *  If found, returns the index where it was found.  If not found,
+    3108              :        *  returns npos.
+    3109              :       */
+    3110              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3111              :       size_type
+    3112              :       find_last_not_of(const _CharT* __s, size_type __pos,
+    3113              :                        size_type __n) const _GLIBCXX_NOEXCEPT;
+    3114              :       /**
+    3115              :        *  @brief  Find last position of a character not in C string.
+    3116              :        *  @param __s  C string containing characters to avoid.
+    3117              :        *  @param __pos  Index of character to search back from (default end).
+    3118              :        *  @return  Index of last occurrence.
+    3119              :        *
+    3120              :        *  Starting from @a __pos, searches backward for a character
+    3121              :        *  not contained in @a __s within this string.  If found,
+    3122              :        *  returns the index where it was found.  If not found, returns
+    3123              :        *  npos.
+    3124              :       */
+    3125              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3126              :       size_type
+    3127              :       find_last_not_of(const _CharT* __s, size_type __pos = npos) const
+    3128              :       _GLIBCXX_NOEXCEPT
+    3129              :       {
+    3130              :         __glibcxx_requires_string(__s);
+    3131              :         return this->find_last_not_of(__s, __pos, traits_type::length(__s));
+    3132              :       }
+    3133              : 
+    3134              :       /**
+    3135              :        *  @brief  Find last position of a different character.
+    3136              :        *  @param __c  Character to avoid.
+    3137              :        *  @param __pos  Index of character to search back from (default end).
+    3138              :        *  @return  Index of last occurrence.
+    3139              :        *
+    3140              :        *  Starting from @a __pos, searches backward for a character other than
+    3141              :        *  @a __c within this string.  If found, returns the index where it was
+    3142              :        *  found.  If not found, returns npos.
+    3143              :       */
+    3144              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3145              :       size_type
+    3146              :       find_last_not_of(_CharT __c, size_type __pos = npos) const
+    3147              :       _GLIBCXX_NOEXCEPT;
+    3148              : 
+    3149              :       /**
+    3150              :        *  @brief  Get a substring.
+    3151              :        *  @param __pos  Index of first character (default 0).
+    3152              :        *  @param __n  Number of characters in substring (default remainder).
+    3153              :        *  @return  The new string.
+    3154              :        *  @throw  std::out_of_range  If __pos > size().
+    3155              :        *
+    3156              :        *  Construct and return a new string using the @a __n
+    3157              :        *  characters starting at @a __pos.  If the string is too
+    3158              :        *  short, use the remainder of the characters.  If @a __pos is
+    3159              :        *  beyond the end of the string, out_of_range is thrown.
+    3160              :       */
+    3161              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3162              :       basic_string
+    3163              :       substr(size_type __pos = 0, size_type __n = npos) const
+    3164              :       { return basic_string(*this,
+    3165              :                             _M_check(__pos, "basic_string::substr"), __n); }
+    3166              : 
+    3167              :       /**
+    3168              :        *  @brief  Compare to a string.
+    3169              :        *  @param __str  String to compare against.
+    3170              :        *  @return  Integer < 0, 0, or > 0.
+    3171              :        *
+    3172              :        *  Returns an integer < 0 if this string is ordered before @a
+    3173              :        *  __str, 0 if their values are equivalent, or > 0 if this
+    3174              :        *  string is ordered after @a __str.  Determines the effective
+    3175              :        *  length rlen of the strings to compare as the smallest of
+    3176              :        *  size() and str.size().  The function then compares the two
+    3177              :        *  strings by calling traits::compare(data(), str.data(),rlen).
+    3178              :        *  If the result of the comparison is nonzero returns it,
+    3179              :        *  otherwise the shorter one is ordered first.
+    3180              :       */
+    3181              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3182              :       int
+    3183              :       compare(const basic_string& __str) const
+    3184              :       {
+    3185              :         const size_type __size = this->size();
+    3186              :         const size_type __osize = __str.size();
+    3187              :         const size_type __len = std::min(__size, __osize);
+    3188              : 
+    3189              :         int __r = traits_type::compare(_M_data(), __str.data(), __len);
+    3190              :         if (!__r)
+    3191              :           __r = _S_compare(__size, __osize);
+    3192              :         return __r;
+    3193              :       }
+    3194              : 
+    3195              : #if __cplusplus >= 201703L
+    3196              :       /**
+    3197              :        *  @brief  Compare to a string_view.
+    3198              :        *  @param __svt An object convertible to string_view to compare against.
+    3199              :        *  @return  Integer < 0, 0, or > 0.
+    3200              :        */
+    3201              :       template<typename _Tp>
+    3202              :         _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3203              :         _If_sv<_Tp, int>
+    3204              :         compare(const _Tp& __svt) const
+    3205              :         noexcept(is_same<_Tp, __sv_type>::value)
+    3206              :         {
+    3207              :           __sv_type __sv = __svt;
+    3208              :           const size_type __size = this->size();
+    3209              :           const size_type __osize = __sv.size();
+    3210              :           const size_type __len = std::min(__size, __osize);
+    3211              : 
+    3212              :           int __r = traits_type::compare(_M_data(), __sv.data(), __len);
+    3213              :           if (!__r)
+    3214              :             __r = _S_compare(__size, __osize);
+    3215              :           return __r;
+    3216              :         }
+    3217              : 
+    3218              :       /**
+    3219              :        *  @brief  Compare to a string_view.
+    3220              :        *  @param __pos  A position in the string to start comparing from.
+    3221              :        *  @param __n  The number of characters to compare.
+    3222              :        *  @param __svt  An object convertible to string_view to compare
+    3223              :        *                against.
+    3224              :        *  @return  Integer < 0, 0, or > 0.
+    3225              :        */
+    3226              :       template<typename _Tp>
+    3227              :         _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3228              :         _If_sv<_Tp, int>
+    3229              :         compare(size_type __pos, size_type __n, const _Tp& __svt) const
+    3230              :         noexcept(is_same<_Tp, __sv_type>::value)
+    3231              :         {
+    3232              :           __sv_type __sv = __svt;
+    3233              :           return __sv_type(*this).substr(__pos, __n).compare(__sv);
+    3234              :         }
+    3235              : 
+    3236              :       /**
+    3237              :        *  @brief  Compare to a string_view.
+    3238              :        *  @param __pos1  A position in the string to start comparing from.
+    3239              :        *  @param __n1  The number of characters to compare.
+    3240              :        *  @param __svt  An object convertible to string_view to compare
+    3241              :        *                against.
+    3242              :        *  @param __pos2  A position in the string_view to start comparing from.
+    3243              :        *  @param __n2  The number of characters to compare.
+    3244              :        *  @return  Integer < 0, 0, or > 0.
+    3245              :        */
+    3246              :       template<typename _Tp>
+    3247              :         _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3248              :         _If_sv<_Tp, int>
+    3249              :         compare(size_type __pos1, size_type __n1, const _Tp& __svt,
+    3250              :                 size_type __pos2, size_type __n2 = npos) const
+    3251              :         noexcept(is_same<_Tp, __sv_type>::value)
+    3252              :         {
+    3253              :           __sv_type __sv = __svt;
+    3254              :           return __sv_type(*this)
+    3255              :             .substr(__pos1, __n1).compare(__sv.substr(__pos2, __n2));
+    3256              :         }
+    3257              : #endif // C++17
+    3258              : 
+    3259              :       /**
+    3260              :        *  @brief  Compare substring to a string.
+    3261              :        *  @param __pos  Index of first character of substring.
+    3262              :        *  @param __n  Number of characters in substring.
+    3263              :        *  @param __str  String to compare against.
+    3264              :        *  @return  Integer < 0, 0, or > 0.
+    3265              :        *
+    3266              :        *  Form the substring of this string from the @a __n characters
+    3267              :        *  starting at @a __pos.  Returns an integer < 0 if the
+    3268              :        *  substring is ordered before @a __str, 0 if their values are
+    3269              :        *  equivalent, or > 0 if the substring is ordered after @a
+    3270              :        *  __str.  Determines the effective length rlen of the strings
+    3271              :        *  to compare as the smallest of the length of the substring
+    3272              :        *  and @a __str.size().  The function then compares the two
+    3273              :        *  strings by calling
+    3274              :        *  traits::compare(substring.data(),str.data(),rlen).  If the
+    3275              :        *  result of the comparison is nonzero returns it, otherwise
+    3276              :        *  the shorter one is ordered first.
+    3277              :       */
+    3278              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3279              :       int
+    3280              :       compare(size_type __pos, size_type __n, const basic_string& __str) const
+    3281              :       {
+    3282              :         _M_check(__pos, "basic_string::compare");
+    3283              :         __n = _M_limit(__pos, __n);
+    3284              :         const size_type __osize = __str.size();
+    3285              :         const size_type __len = std::min(__n, __osize);
+    3286              :         int __r = traits_type::compare(_M_data() + __pos, __str.data(), __len);
+    3287              :         if (!__r)
+    3288              :           __r = _S_compare(__n, __osize);
+    3289              :         return __r;
+    3290              :       }
+    3291              : 
+    3292              :       /**
+    3293              :        *  @brief  Compare substring to a substring.
+    3294              :        *  @param __pos1  Index of first character of substring.
+    3295              :        *  @param __n1  Number of characters in substring.
+    3296              :        *  @param __str  String to compare against.
+    3297              :        *  @param __pos2  Index of first character of substring of str.
+    3298              :        *  @param __n2  Number of characters in substring of str.
+    3299              :        *  @return  Integer < 0, 0, or > 0.
+    3300              :        *
+    3301              :        *  Form the substring of this string from the @a __n1
+    3302              :        *  characters starting at @a __pos1.  Form the substring of @a
+    3303              :        *  __str from the @a __n2 characters starting at @a __pos2.
+    3304              :        *  Returns an integer < 0 if this substring is ordered before
+    3305              :        *  the substring of @a __str, 0 if their values are equivalent,
+    3306              :        *  or > 0 if this substring is ordered after the substring of
+    3307              :        *  @a __str.  Determines the effective length rlen of the
+    3308              :        *  strings to compare as the smallest of the lengths of the
+    3309              :        *  substrings.  The function then compares the two strings by
+    3310              :        *  calling
+    3311              :        *  traits::compare(substring.data(),str.substr(pos2,n2).data(),rlen).
+    3312              :        *  If the result of the comparison is nonzero returns it,
+    3313              :        *  otherwise the shorter one is ordered first.
+    3314              :       */
+    3315              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3316              :       int
+    3317              :       compare(size_type __pos1, size_type __n1, const basic_string& __str,
+    3318              :               size_type __pos2, size_type __n2 = npos) const
+    3319              :       {
+    3320              :         _M_check(__pos1, "basic_string::compare");
+    3321              :         __str._M_check(__pos2, "basic_string::compare");
+    3322              :         __n1 = _M_limit(__pos1, __n1);
+    3323              :         __n2 = __str._M_limit(__pos2, __n2);
+    3324              :         const size_type __len = std::min(__n1, __n2);
+    3325              :         int __r = traits_type::compare(_M_data() + __pos1,
+    3326              :                                        __str.data() + __pos2, __len);
+    3327              :         if (!__r)
+    3328              :           __r = _S_compare(__n1, __n2);
+    3329              :         return __r;
+    3330              :       }
+    3331              : 
+    3332              :       /**
+    3333              :        *  @brief  Compare to a C string.
+    3334              :        *  @param __s  C string to compare against.
+    3335              :        *  @return  Integer < 0, 0, or > 0.
+    3336              :        *
+    3337              :        *  Returns an integer < 0 if this string is ordered before @a __s, 0 if
+    3338              :        *  their values are equivalent, or > 0 if this string is ordered after
+    3339              :        *  @a __s.  Determines the effective length rlen of the strings to
+    3340              :        *  compare as the smallest of size() and the length of a string
+    3341              :        *  constructed from @a __s.  The function then compares the two strings
+    3342              :        *  by calling traits::compare(data(),s,rlen).  If the result of the
+    3343              :        *  comparison is nonzero returns it, otherwise the shorter one is
+    3344              :        *  ordered first.
+    3345              :       */
+    3346              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3347              :       int
+    3348              :       compare(const _CharT* __s) const _GLIBCXX_NOEXCEPT
+    3349              :       {
+    3350              :         __glibcxx_requires_string(__s);
+    3351              :         const size_type __size = this->size();
+    3352              :         const size_type __osize = traits_type::length(__s);
+    3353              :         const size_type __len = std::min(__size, __osize);
+    3354              :         int __r = traits_type::compare(_M_data(), __s, __len);
+    3355              :         if (!__r)
+    3356              :           __r = _S_compare(__size, __osize);
+    3357              :         return __r;
+    3358              :       }
+    3359              : 
+    3360              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    3361              :       // 5 String::compare specification questionable
+    3362              :       /**
+    3363              :        *  @brief  Compare substring to a C string.
+    3364              :        *  @param __pos  Index of first character of substring.
+    3365              :        *  @param __n1  Number of characters in substring.
+    3366              :        *  @param __s  C string to compare against.
+    3367              :        *  @return  Integer < 0, 0, or > 0.
+    3368              :        *
+    3369              :        *  Form the substring of this string from the @a __n1
+    3370              :        *  characters starting at @a pos.  Returns an integer < 0 if
+    3371              :        *  the substring is ordered before @a __s, 0 if their values
+    3372              :        *  are equivalent, or > 0 if the substring is ordered after @a
+    3373              :        *  __s.  Determines the effective length rlen of the strings to
+    3374              :        *  compare as the smallest of the length of the substring and
+    3375              :        *  the length of a string constructed from @a __s.  The
+    3376              :        *  function then compares the two string by calling
+    3377              :        *  traits::compare(substring.data(),__s,rlen).  If the result of
+    3378              :        *  the comparison is nonzero returns it, otherwise the shorter
+    3379              :        *  one is ordered first.
+    3380              :       */
+    3381              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3382              :       int
+    3383              :       compare(size_type __pos, size_type __n1, const _CharT* __s) const
+    3384              :       {
+    3385              :         __glibcxx_requires_string(__s);
+    3386              :         _M_check(__pos, "basic_string::compare");
+    3387              :         __n1 = _M_limit(__pos, __n1);
+    3388              :         const size_type __osize = traits_type::length(__s);
+    3389              :         const size_type __len = std::min(__n1, __osize);
+    3390              :         int __r = traits_type::compare(_M_data() + __pos, __s, __len);
+    3391              :         if (!__r)
+    3392              :           __r = _S_compare(__n1, __osize);
+    3393              :         return __r;
+    3394              :       }
+    3395              : 
+    3396              :       /**
+    3397              :        *  @brief  Compare substring against a character %array.
+    3398              :        *  @param __pos  Index of first character of substring.
+    3399              :        *  @param __n1  Number of characters in substring.
+    3400              :        *  @param __s  character %array to compare against.
+    3401              :        *  @param __n2  Number of characters of s.
+    3402              :        *  @return  Integer < 0, 0, or > 0.
+    3403              :        *
+    3404              :        *  Form the substring of this string from the @a __n1
+    3405              :        *  characters starting at @a __pos.  Form a string from the
+    3406              :        *  first @a __n2 characters of @a __s.  Returns an integer < 0
+    3407              :        *  if this substring is ordered before the string from @a __s,
+    3408              :        *  0 if their values are equivalent, or > 0 if this substring
+    3409              :        *  is ordered after the string from @a __s.  Determines the
+    3410              :        *  effective length rlen of the strings to compare as the
+    3411              :        *  smallest of the length of the substring and @a __n2.  The
+    3412              :        *  function then compares the two strings by calling
+    3413              :        *  traits::compare(substring.data(),s,rlen).  If the result of
+    3414              :        *  the comparison is nonzero returns it, otherwise the shorter
+    3415              :        *  one is ordered first.
+    3416              :        *
+    3417              :        *  NB: s must have at least n2 characters, &apos;\\0&apos; has
+    3418              :        *  no special meaning.
+    3419              :       */
+    3420              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3421              :       int
+    3422              :       compare(size_type __pos, size_type __n1, const _CharT* __s,
+    3423              :               size_type __n2) const
+    3424              :       {
+    3425              :         __glibcxx_requires_string_len(__s, __n2);
+    3426              :         _M_check(__pos, "basic_string::compare");
+    3427              :         __n1 = _M_limit(__pos, __n1);
+    3428              :         const size_type __len = std::min(__n1, __n2);
+    3429              :         int __r = traits_type::compare(_M_data() + __pos, __s, __len);
+    3430              :         if (!__r)
+    3431              :           __r = _S_compare(__n1, __n2);
+    3432              :         return __r;
+    3433              :       }
+    3434              : 
+    3435              : #if __cplusplus >= 202002L
+    3436              :       [[nodiscard]]
+    3437              :       constexpr bool
+    3438              :       starts_with(basic_string_view<_CharT, _Traits> __x) const noexcept
+    3439              :       { return __sv_type(this->data(), this->size()).starts_with(__x); }
+    3440              : 
+    3441              :       [[nodiscard]]
+    3442              :       constexpr bool
+    3443              :       starts_with(_CharT __x) const noexcept
+    3444              :       { return __sv_type(this->data(), this->size()).starts_with(__x); }
+    3445              : 
+    3446              :       [[nodiscard, __gnu__::__nonnull__]]
+    3447              :       constexpr bool
+    3448              :       starts_with(const _CharT* __x) const noexcept
+    3449              :       { return __sv_type(this->data(), this->size()).starts_with(__x); }
+    3450              : 
+    3451              :       [[nodiscard]]
+    3452              :       constexpr bool
+    3453              :       ends_with(basic_string_view<_CharT, _Traits> __x) const noexcept
+    3454              :       { return __sv_type(this->data(), this->size()).ends_with(__x); }
+    3455              : 
+    3456              :       [[nodiscard]]
+    3457              :       constexpr bool
+    3458              :       ends_with(_CharT __x) const noexcept
+    3459              :       { return __sv_type(this->data(), this->size()).ends_with(__x); }
+    3460              : 
+    3461              :       [[nodiscard, __gnu__::__nonnull__]]
+    3462              :       constexpr bool
+    3463              :       ends_with(const _CharT* __x) const noexcept
+    3464              :       { return __sv_type(this->data(), this->size()).ends_with(__x); }
+    3465              : #endif // C++20
+    3466              : 
+    3467              : #if __cplusplus > 202002L
+    3468              :       [[nodiscard]]
+    3469              :       constexpr bool
+    3470              :       contains(basic_string_view<_CharT, _Traits> __x) const noexcept
+    3471              :       { return __sv_type(this->data(), this->size()).contains(__x); }
+    3472              : 
+    3473              :       [[nodiscard]]
+    3474              :       constexpr bool
+    3475              :       contains(_CharT __x) const noexcept
+    3476              :       { return __sv_type(this->data(), this->size()).contains(__x); }
+    3477              : 
+    3478              :       [[nodiscard, __gnu__::__nonnull__]]
+    3479              :       constexpr bool
+    3480              :       contains(const _CharT* __x) const noexcept
+    3481              :       { return __sv_type(this->data(), this->size()).contains(__x); }
+    3482              : #endif // C++23
+    3483              : 
+    3484              :       // Allow basic_stringbuf::__xfer_bufptrs to call _M_length:
+    3485              :       template<typename, typename, typename> friend class basic_stringbuf;
+    3486              :     };
+    3487              : _GLIBCXX_END_NAMESPACE_CXX11
+    3488              : _GLIBCXX_END_NAMESPACE_VERSION
+    3489              : } // namespace std
+    3490              : #endif  // _GLIBCXX_USE_CXX11_ABI
+    3491              : 
+    3492              : namespace std _GLIBCXX_VISIBILITY(default)
+    3493              : {
+    3494              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+    3495              : 
+    3496              : #if __cpp_deduction_guides >= 201606
+    3497              : _GLIBCXX_BEGIN_NAMESPACE_CXX11
+    3498              :   template<typename _InputIterator, typename _CharT
+    3499              :              = typename iterator_traits<_InputIterator>::value_type,
+    3500              :            typename _Allocator = allocator<_CharT>,
+    3501              :            typename = _RequireInputIter<_InputIterator>,
+    3502              :            typename = _RequireAllocator<_Allocator>>
+    3503              :     basic_string(_InputIterator, _InputIterator, _Allocator = _Allocator())
+    3504              :       -> basic_string<_CharT, char_traits<_CharT>, _Allocator>;
+    3505              : 
+    3506              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    3507              :   // 3075. basic_string needs deduction guides from basic_string_view
+    3508              :   template<typename _CharT, typename _Traits,
+    3509              :            typename _Allocator = allocator<_CharT>,
+    3510              :            typename = _RequireAllocator<_Allocator>>
+    3511              :     basic_string(basic_string_view<_CharT, _Traits>, const _Allocator& = _Allocator())
+    3512              :       -> basic_string<_CharT, _Traits, _Allocator>;
+    3513              : 
+    3514              :   template<typename _CharT, typename _Traits,
+    3515              :            typename _Allocator = allocator<_CharT>,
+    3516              :            typename = _RequireAllocator<_Allocator>>
+    3517              :     basic_string(basic_string_view<_CharT, _Traits>,
+    3518              :                  typename basic_string<_CharT, _Traits, _Allocator>::size_type,
+    3519              :                  typename basic_string<_CharT, _Traits, _Allocator>::size_type,
+    3520              :                  const _Allocator& = _Allocator())
+    3521              :       -> basic_string<_CharT, _Traits, _Allocator>;
+    3522              : _GLIBCXX_END_NAMESPACE_CXX11
+    3523              : #endif
+    3524              : 
+    3525              :   template<typename _Str>
+    3526              :     _GLIBCXX20_CONSTEXPR
+    3527              :     inline _Str
+    3528         3802 :     __str_concat(typename _Str::value_type const* __lhs,
+    3529              :                  typename _Str::size_type __lhs_len,
+    3530              :                  typename _Str::value_type const* __rhs,
+    3531              :                  typename _Str::size_type __rhs_len,
+    3532              :                  typename _Str::allocator_type const& __a)
+    3533              :     {
+    3534              :       typedef typename _Str::allocator_type allocator_type;
+    3535              :       typedef __gnu_cxx::__alloc_traits<allocator_type> _Alloc_traits;
+    3536         3802 :       _Str __str(_Alloc_traits::_S_select_on_copy(__a));
+    3537         3802 :       __str.reserve(__lhs_len + __rhs_len);
+    3538         3802 :       __str.append(__lhs, __lhs_len);
+    3539         3802 :       __str.append(__rhs, __rhs_len);
+    3540         3802 :       return __str;
+    3541            0 :     }
+    3542              : 
+    3543              :   // operator+
+    3544              :   /**
+    3545              :    *  @brief  Concatenate two strings.
+    3546              :    *  @param __lhs  First string.
+    3547              :    *  @param __rhs  Last string.
+    3548              :    *  @return  New string with value of @a __lhs followed by @a __rhs.
+    3549              :    */
+    3550              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3551              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3552              :     inline basic_string<_CharT, _Traits, _Alloc>
+    3553              :     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+    3554              :               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    3555              :     {
+    3556              :       typedef basic_string<_CharT, _Traits, _Alloc> _Str;
+    3557              :       return std::__str_concat<_Str>(__lhs.c_str(), __lhs.size(),
+    3558              :                                      __rhs.c_str(), __rhs.size(),
+    3559              :                                      __lhs.get_allocator());
+    3560              :     }
+    3561              : 
+    3562              :   /**
+    3563              :    *  @brief  Concatenate C string and string.
+    3564              :    *  @param __lhs  First string.
+    3565              :    *  @param __rhs  Last string.
+    3566              :    *  @return  New string with value of @a __lhs followed by @a __rhs.
+    3567              :    */
+    3568              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3569              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3570              :     inline basic_string<_CharT,_Traits,_Alloc>
+    3571          202 :     operator+(const _CharT* __lhs,
+    3572              :               const basic_string<_CharT,_Traits,_Alloc>& __rhs)
+    3573              :     {
+    3574              :       __glibcxx_requires_string(__lhs);
+    3575              :       typedef basic_string<_CharT, _Traits, _Alloc> _Str;
+    3576              :       return std::__str_concat<_Str>(__lhs, _Traits::length(__lhs),
+    3577              :                                      __rhs.c_str(), __rhs.size(),
+    3578          404 :                                      __rhs.get_allocator());
+    3579              :     }
+    3580              : 
+    3581              :   /**
+    3582              :    *  @brief  Concatenate character and string.
+    3583              :    *  @param __lhs  First string.
+    3584              :    *  @param __rhs  Last string.
+    3585              :    *  @return  New string with @a __lhs followed by @a __rhs.
+    3586              :    */
+    3587              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3588              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3589              :     inline basic_string<_CharT,_Traits,_Alloc>
+    3590              :     operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs)
+    3591              :     {
+    3592              :       typedef basic_string<_CharT, _Traits, _Alloc> _Str;
+    3593              :       return std::__str_concat<_Str>(__builtin_addressof(__lhs), 1,
+    3594              :                                      __rhs.c_str(), __rhs.size(),
+    3595              :                                      __rhs.get_allocator());
+    3596              :     }
+    3597              : 
+    3598              :   /**
+    3599              :    *  @brief  Concatenate string and C string.
+    3600              :    *  @param __lhs  First string.
+    3601              :    *  @param __rhs  Last string.
+    3602              :    *  @return  New string with @a __lhs followed by @a __rhs.
+    3603              :    */
+    3604              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3605              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3606              :     inline basic_string<_CharT, _Traits, _Alloc>
+    3607         3600 :     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+    3608              :               const _CharT* __rhs)
+    3609              :     {
+    3610              :       __glibcxx_requires_string(__rhs);
+    3611              :       typedef basic_string<_CharT, _Traits, _Alloc> _Str;
+    3612              :       return std::__str_concat<_Str>(__lhs.c_str(), __lhs.size(),
+    3613              :                                      __rhs, _Traits::length(__rhs),
+    3614         7200 :                                      __lhs.get_allocator());
+    3615              :     }
+    3616              :   /**
+    3617              :    *  @brief  Concatenate string and character.
+    3618              :    *  @param __lhs  First string.
+    3619              :    *  @param __rhs  Last string.
+    3620              :    *  @return  New string with @a __lhs followed by @a __rhs.
+    3621              :    */
+    3622              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3623              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3624              :     inline basic_string<_CharT, _Traits, _Alloc>
+    3625              :     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs)
+    3626              :     {
+    3627              :       typedef basic_string<_CharT, _Traits, _Alloc> _Str;
+    3628              :       return std::__str_concat<_Str>(__lhs.c_str(), __lhs.size(),
+    3629              :                                      __builtin_addressof(__rhs), 1,
+    3630              :                                      __lhs.get_allocator());
+    3631              :     }
+    3632              : 
+    3633              : #if __cplusplus >= 201103L
+    3634              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3635              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3636              :     inline basic_string<_CharT, _Traits, _Alloc>
+    3637          178 :     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
+    3638              :               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    3639          178 :     { return std::move(__lhs.append(__rhs)); }
+    3640              : 
+    3641              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3642              :     _GLIBCXX20_CONSTEXPR
+    3643              :     inline basic_string<_CharT, _Traits, _Alloc>
+    3644              :     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+    3645              :               basic_string<_CharT, _Traits, _Alloc>&& __rhs)
+    3646              :     { return std::move(__rhs.insert(0, __lhs)); }
+    3647              : 
+    3648              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3649              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3650              :     inline basic_string<_CharT, _Traits, _Alloc>
+    3651         4660 :     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
+    3652              :               basic_string<_CharT, _Traits, _Alloc>&& __rhs)
+    3653              :     {
+    3654              : #if _GLIBCXX_USE_CXX11_ABI
+    3655              :       using _Alloc_traits = allocator_traits<_Alloc>;
+    3656         4660 :       bool __use_rhs = false;
+    3657              :       if _GLIBCXX17_CONSTEXPR (typename _Alloc_traits::is_always_equal{})
+    3658         4660 :         __use_rhs = true;
+    3659              :       else if (__lhs.get_allocator() == __rhs.get_allocator())
+    3660              :         __use_rhs = true;
+    3661         4660 :       if (__use_rhs)
+    3662              : #endif
+    3663              :         {
+    3664         4660 :           const auto __size = __lhs.size() + __rhs.size();
+    3665         4660 :           if (__size > __lhs.capacity() && __size <= __rhs.capacity())
+    3666            0 :             return std::move(__rhs.insert(0, __lhs));
+    3667              :         }
+    3668         4660 :       return std::move(__lhs.append(__rhs));
+    3669              :     }
+    3670              : 
+    3671              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3672              :     _GLIBCXX_NODISCARD _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3673              :     inline basic_string<_CharT, _Traits, _Alloc>
+    3674          332 :     operator+(const _CharT* __lhs,
+    3675              :               basic_string<_CharT, _Traits, _Alloc>&& __rhs)
+    3676          332 :     { return std::move(__rhs.insert(0, __lhs)); }
+    3677              : 
+    3678              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3679              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3680              :     inline basic_string<_CharT, _Traits, _Alloc>
+    3681              :     operator+(_CharT __lhs,
+    3682              :               basic_string<_CharT, _Traits, _Alloc>&& __rhs)
+    3683              :     { return std::move(__rhs.insert(0, 1, __lhs)); }
+    3684              : 
+    3685              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3686              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3687              :     inline basic_string<_CharT, _Traits, _Alloc>
+    3688         1546 :     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
+    3689              :               const _CharT* __rhs)
+    3690         1546 :     { return std::move(__lhs.append(__rhs)); }
+    3691              : 
+    3692              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3693              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3694              :     inline basic_string<_CharT, _Traits, _Alloc>
+    3695              :     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
+    3696              :               _CharT __rhs)
+    3697              :     { return std::move(__lhs.append(1, __rhs)); }
+    3698              : #endif
+    3699              : 
+    3700              :   // operator ==
+    3701              :   /**
+    3702              :    *  @brief  Test equivalence of two strings.
+    3703              :    *  @param __lhs  First string.
+    3704              :    *  @param __rhs  Second string.
+    3705              :    *  @return  True if @a __lhs.compare(@a __rhs) == 0.  False otherwise.
+    3706              :    */
+    3707              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3708              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3709              :     inline bool
+    3710    847645632 :     operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+    3711              :                const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    3712              :     _GLIBCXX_NOEXCEPT
+    3713              :     {
+    3714    847645632 :       return __lhs.size() == __rhs.size()
+    3715    847645632 :                && !_Traits::compare(__lhs.data(), __rhs.data(), __lhs.size());
+    3716              :     }
+    3717              : 
+    3718              :   /**
+    3719              :    *  @brief  Test equivalence of string and C string.
+    3720              :    *  @param __lhs  String.
+    3721              :    *  @param __rhs  C string.
+    3722              :    *  @return  True if @a __lhs.compare(@a __rhs) == 0.  False otherwise.
+    3723              :    */
+    3724              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3725              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    3726              :     inline bool
+    3727      2022226 :     operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+    3728              :                const _CharT* __rhs)
+    3729              :     {
+    3730      2022226 :       return __lhs.size() == _Traits::length(__rhs)
+    3731      2022226 :                && !_Traits::compare(__lhs.data(), __rhs, __lhs.size());
+    3732              :     }
+    3733              : 
+    3734              : #if __cpp_lib_three_way_comparison
+    3735              :   /**
+    3736              :    *  @brief  Three-way comparison of a string and a C string.
+    3737              :    *  @param __lhs  A string.
+    3738              :    *  @param __rhs  A null-terminated string.
+    3739              :    *  @return  A value indicating whether `__lhs` is less than, equal to,
+    3740              :    *           greater than, or incomparable with `__rhs`.
+    3741              :    */
+    3742              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3743              :     [[nodiscard]]
+    3744              :     constexpr auto
+    3745              :     operator<=>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+    3746              :                 const basic_string<_CharT, _Traits, _Alloc>& __rhs) noexcept
+    3747              :     -> decltype(__detail::__char_traits_cmp_cat<_Traits>(0))
+    3748              :     { return __detail::__char_traits_cmp_cat<_Traits>(__lhs.compare(__rhs)); }
+    3749              : 
+    3750              :   /**
+    3751              :    *  @brief  Three-way comparison of a string and a C string.
+    3752              :    *  @param __lhs  A string.
+    3753              :    *  @param __rhs  A null-terminated string.
+    3754              :    *  @return  A value indicating whether `__lhs` is less than, equal to,
+    3755              :    *           greater than, or incomparable with `__rhs`.
+    3756              :    */
+    3757              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3758              :     [[nodiscard]]
+    3759              :     constexpr auto
+    3760              :     operator<=>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+    3761              :                 const _CharT* __rhs) noexcept
+    3762              :     -> decltype(__detail::__char_traits_cmp_cat<_Traits>(0))
+    3763              :     { return __detail::__char_traits_cmp_cat<_Traits>(__lhs.compare(__rhs)); }
+    3764              : #else
+    3765              :   /**
+    3766              :    *  @brief  Test equivalence of C string and string.
+    3767              :    *  @param __lhs  C string.
+    3768              :    *  @param __rhs  String.
+    3769              :    *  @return  True if @a __rhs.compare(@a __lhs) == 0.  False otherwise.
+    3770              :    */
+    3771              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3772              :     _GLIBCXX_NODISCARD
+    3773              :     inline bool
+    3774              :     operator==(const _CharT* __lhs,
+    3775              :                const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    3776              :     { return __rhs == __lhs; }
+    3777              : 
+    3778              :   // operator !=
+    3779              :   /**
+    3780              :    *  @brief  Test difference of two strings.
+    3781              :    *  @param __lhs  First string.
+    3782              :    *  @param __rhs  Second string.
+    3783              :    *  @return  True if @a __lhs.compare(@a __rhs) != 0.  False otherwise.
+    3784              :    */
+    3785              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3786              :     _GLIBCXX_NODISCARD
+    3787              :     inline bool
+    3788              :     operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+    3789              :                const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    3790              :     _GLIBCXX_NOEXCEPT
+    3791              :     { return !(__lhs == __rhs); }
+    3792              : 
+    3793              :   /**
+    3794              :    *  @brief  Test difference of C string and string.
+    3795              :    *  @param __lhs  C string.
+    3796              :    *  @param __rhs  String.
+    3797              :    *  @return  True if @a __rhs.compare(@a __lhs) != 0.  False otherwise.
+    3798              :    */
+    3799              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3800              :     _GLIBCXX_NODISCARD
+    3801              :     inline bool
+    3802              :     operator!=(const _CharT* __lhs,
+    3803              :                const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    3804              :     { return !(__rhs == __lhs); }
+    3805              : 
+    3806              :   /**
+    3807              :    *  @brief  Test difference of string and C string.
+    3808              :    *  @param __lhs  String.
+    3809              :    *  @param __rhs  C string.
+    3810              :    *  @return  True if @a __lhs.compare(@a __rhs) != 0.  False otherwise.
+    3811              :    */
+    3812              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3813              :     _GLIBCXX_NODISCARD
+    3814              :     inline bool
+    3815           64 :     operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+    3816              :                const _CharT* __rhs)
+    3817           64 :     { return !(__lhs == __rhs); }
+    3818              : 
+    3819              :   // operator <
+    3820              :   /**
+    3821              :    *  @brief  Test if string precedes string.
+    3822              :    *  @param __lhs  First string.
+    3823              :    *  @param __rhs  Second string.
+    3824              :    *  @return  True if @a __lhs precedes @a __rhs.  False otherwise.
+    3825              :    */
+    3826              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3827              :     _GLIBCXX_NODISCARD
+    3828              :     inline bool
+    3829    754700098 :     operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+    3830              :               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    3831              :     _GLIBCXX_NOEXCEPT
+    3832    754700098 :     { return __lhs.compare(__rhs) < 0; }
+    3833              : 
+    3834              :   /**
+    3835              :    *  @brief  Test if string precedes C string.
+    3836              :    *  @param __lhs  String.
+    3837              :    *  @param __rhs  C string.
+    3838              :    *  @return  True if @a __lhs precedes @a __rhs.  False otherwise.
+    3839              :    */
+    3840              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3841              :     _GLIBCXX_NODISCARD
+    3842              :     inline bool
+    3843          412 :     operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+    3844              :               const _CharT* __rhs)
+    3845          412 :     { return __lhs.compare(__rhs) < 0; }
+    3846              : 
+    3847              :   /**
+    3848              :    *  @brief  Test if C string precedes string.
+    3849              :    *  @param __lhs  C string.
+    3850              :    *  @param __rhs  String.
+    3851              :    *  @return  True if @a __lhs precedes @a __rhs.  False otherwise.
+    3852              :    */
+    3853              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3854              :     _GLIBCXX_NODISCARD
+    3855              :     inline bool
+    3856          256 :     operator<(const _CharT* __lhs,
+    3857              :               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    3858          256 :     { return __rhs.compare(__lhs) > 0; }
+    3859              : 
+    3860              :   // operator >
+    3861              :   /**
+    3862              :    *  @brief  Test if string follows string.
+    3863              :    *  @param __lhs  First string.
+    3864              :    *  @param __rhs  Second string.
+    3865              :    *  @return  True if @a __lhs follows @a __rhs.  False otherwise.
+    3866              :    */
+    3867              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3868              :     _GLIBCXX_NODISCARD
+    3869              :     inline bool
+    3870              :     operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+    3871              :               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    3872              :     _GLIBCXX_NOEXCEPT
+    3873              :     { return __lhs.compare(__rhs) > 0; }
+    3874              : 
+    3875              :   /**
+    3876              :    *  @brief  Test if string follows C string.
+    3877              :    *  @param __lhs  String.
+    3878              :    *  @param __rhs  C string.
+    3879              :    *  @return  True if @a __lhs follows @a __rhs.  False otherwise.
+    3880              :    */
+    3881              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3882              :     _GLIBCXX_NODISCARD
+    3883              :     inline bool
+    3884              :     operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+    3885              :               const _CharT* __rhs)
+    3886              :     { return __lhs.compare(__rhs) > 0; }
+    3887              : 
+    3888              :   /**
+    3889              :    *  @brief  Test if C string follows string.
+    3890              :    *  @param __lhs  C string.
+    3891              :    *  @param __rhs  String.
+    3892              :    *  @return  True if @a __lhs follows @a __rhs.  False otherwise.
+    3893              :    */
+    3894              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3895              :     _GLIBCXX_NODISCARD
+    3896              :     inline bool
+    3897              :     operator>(const _CharT* __lhs,
+    3898              :               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    3899              :     { return __rhs.compare(__lhs) < 0; }
+    3900              : 
+    3901              :   // operator <=
+    3902              :   /**
+    3903              :    *  @brief  Test if string doesn't follow string.
+    3904              :    *  @param __lhs  First string.
+    3905              :    *  @param __rhs  Second string.
+    3906              :    *  @return  True if @a __lhs doesn't follow @a __rhs.  False otherwise.
+    3907              :    */
+    3908              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3909              :     _GLIBCXX_NODISCARD
+    3910              :     inline bool
+    3911            0 :     operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+    3912              :                const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    3913              :     _GLIBCXX_NOEXCEPT
+    3914            0 :     { return __lhs.compare(__rhs) <= 0; }
+    3915              : 
+    3916              :   /**
+    3917              :    *  @brief  Test if string doesn't follow C string.
+    3918              :    *  @param __lhs  String.
+    3919              :    *  @param __rhs  C string.
+    3920              :    *  @return  True if @a __lhs doesn't follow @a __rhs.  False otherwise.
+    3921              :    */
+    3922              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3923              :     _GLIBCXX_NODISCARD
+    3924              :     inline bool
+    3925              :     operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+    3926              :                const _CharT* __rhs)
+    3927              :     { return __lhs.compare(__rhs) <= 0; }
+    3928              : 
+    3929              :   /**
+    3930              :    *  @brief  Test if C string doesn't follow string.
+    3931              :    *  @param __lhs  C string.
+    3932              :    *  @param __rhs  String.
+    3933              :    *  @return  True if @a __lhs doesn't follow @a __rhs.  False otherwise.
+    3934              :    */
+    3935              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3936              :     _GLIBCXX_NODISCARD
+    3937              :     inline bool
+    3938              :     operator<=(const _CharT* __lhs,
+    3939              :                const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    3940              :     { return __rhs.compare(__lhs) >= 0; }
+    3941              : 
+    3942              :   // operator >=
+    3943              :   /**
+    3944              :    *  @brief  Test if string doesn't precede string.
+    3945              :    *  @param __lhs  First string.
+    3946              :    *  @param __rhs  Second string.
+    3947              :    *  @return  True if @a __lhs doesn't precede @a __rhs.  False otherwise.
+    3948              :    */
+    3949              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3950              :     _GLIBCXX_NODISCARD
+    3951              :     inline bool
+    3952              :     operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+    3953              :                const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    3954              :     _GLIBCXX_NOEXCEPT
+    3955              :     { return __lhs.compare(__rhs) >= 0; }
+    3956              : 
+    3957              :   /**
+    3958              :    *  @brief  Test if string doesn't precede C string.
+    3959              :    *  @param __lhs  String.
+    3960              :    *  @param __rhs  C string.
+    3961              :    *  @return  True if @a __lhs doesn't precede @a __rhs.  False otherwise.
+    3962              :    */
+    3963              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3964              :     _GLIBCXX_NODISCARD
+    3965              :     inline bool
+    3966              :     operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+    3967              :                const _CharT* __rhs)
+    3968              :     { return __lhs.compare(__rhs) >= 0; }
+    3969              : 
+    3970              :   /**
+    3971              :    *  @brief  Test if C string doesn't precede string.
+    3972              :    *  @param __lhs  C string.
+    3973              :    *  @param __rhs  String.
+    3974              :    *  @return  True if @a __lhs doesn't precede @a __rhs.  False otherwise.
+    3975              :    */
+    3976              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3977              :     _GLIBCXX_NODISCARD
+    3978              :     inline bool
+    3979              :     operator>=(const _CharT* __lhs,
+    3980              :              const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    3981              :     { return __rhs.compare(__lhs) <= 0; }
+    3982              : #endif // three-way comparison
+    3983              : 
+    3984              :   /**
+    3985              :    *  @brief  Swap contents of two strings.
+    3986              :    *  @param __lhs  First string.
+    3987              :    *  @param __rhs  Second string.
+    3988              :    *
+    3989              :    *  Exchanges the contents of @a __lhs and @a __rhs in constant time.
+    3990              :    */
+    3991              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    3992              :     _GLIBCXX20_CONSTEXPR
+    3993              :     inline void
+    3994              :     swap(basic_string<_CharT, _Traits, _Alloc>& __lhs,
+    3995              :          basic_string<_CharT, _Traits, _Alloc>& __rhs)
+    3996              :     _GLIBCXX_NOEXCEPT_IF(noexcept(__lhs.swap(__rhs)))
+    3997              :     { __lhs.swap(__rhs); }
+    3998              : 
+    3999              : 
+    4000              :   /**
+    4001              :    *  @brief  Read stream into a string.
+    4002              :    *  @param __is  Input stream.
+    4003              :    *  @param __str  Buffer to store into.
+    4004              :    *  @return  Reference to the input stream.
+    4005              :    *
+    4006              :    *  Stores characters from @a __is into @a __str until whitespace is
+    4007              :    *  found, the end of the stream is encountered, or str.max_size()
+    4008              :    *  is reached.  If is.width() is non-zero, that is the limit on the
+    4009              :    *  number of characters stored into @a __str.  Any previous
+    4010              :    *  contents of @a __str are erased.
+    4011              :    */
+    4012              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    4013              :     basic_istream<_CharT, _Traits>&
+    4014              :     operator>>(basic_istream<_CharT, _Traits>& __is,
+    4015              :                basic_string<_CharT, _Traits, _Alloc>& __str);
+    4016              : 
+    4017              :   template<>
+    4018              :     basic_istream<char>&
+    4019              :     operator>>(basic_istream<char>& __is, basic_string<char>& __str);
+    4020              : 
+    4021              :   /**
+    4022              :    *  @brief  Write string to a stream.
+    4023              :    *  @param __os  Output stream.
+    4024              :    *  @param __str  String to write out.
+    4025              :    *  @return  Reference to the output stream.
+    4026              :    *
+    4027              :    *  Output characters of @a __str into os following the same rules as for
+    4028              :    *  writing a C string.
+    4029              :    */
+    4030              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    4031              :     inline basic_ostream<_CharT, _Traits>&
+    4032              :     operator<<(basic_ostream<_CharT, _Traits>& __os,
+    4033              :                const basic_string<_CharT, _Traits, _Alloc>& __str)
+    4034              :     {
+    4035              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    4036              :       // 586. string inserter not a formatted function
+    4037              :       return __ostream_insert(__os, __str.data(), __str.size());
+    4038              :     }
+    4039              : 
+    4040              :   /**
+    4041              :    *  @brief  Read a line from stream into a string.
+    4042              :    *  @param __is  Input stream.
+    4043              :    *  @param __str  Buffer to store into.
+    4044              :    *  @param __delim  Character marking end of line.
+    4045              :    *  @return  Reference to the input stream.
+    4046              :    *
+    4047              :    *  Stores characters from @a __is into @a __str until @a __delim is
+    4048              :    *  found, the end of the stream is encountered, or str.max_size()
+    4049              :    *  is reached.  Any previous contents of @a __str are erased.  If
+    4050              :    *  @a __delim is encountered, it is extracted but not stored into
+    4051              :    *  @a __str.
+    4052              :    */
+    4053              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    4054              :     basic_istream<_CharT, _Traits>&
+    4055              :     getline(basic_istream<_CharT, _Traits>& __is,
+    4056              :             basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim);
+    4057              : 
+    4058              :   /**
+    4059              :    *  @brief  Read a line from stream into a string.
+    4060              :    *  @param __is  Input stream.
+    4061              :    *  @param __str  Buffer to store into.
+    4062              :    *  @return  Reference to the input stream.
+    4063              :    *
+    4064              :    *  Stores characters from is into @a __str until &apos;\n&apos; is
+    4065              :    *  found, the end of the stream is encountered, or str.max_size()
+    4066              :    *  is reached.  Any previous contents of @a __str are erased.  If
+    4067              :    *  end of line is encountered, it is extracted but not stored into
+    4068              :    *  @a __str.
+    4069              :    */
+    4070              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    4071              :     inline basic_istream<_CharT, _Traits>&
+    4072              :     getline(basic_istream<_CharT, _Traits>& __is,
+    4073              :             basic_string<_CharT, _Traits, _Alloc>& __str)
+    4074              :     { return std::getline(__is, __str, __is.widen('\n')); }
+    4075              : 
+    4076              : #if __cplusplus >= 201103L
+    4077              :   /// Read a line from an rvalue stream into a string.
+    4078              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    4079              :     inline basic_istream<_CharT, _Traits>&
+    4080              :     getline(basic_istream<_CharT, _Traits>&& __is,
+    4081              :             basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim)
+    4082              :     { return std::getline(__is, __str, __delim); }
+    4083              : 
+    4084              :   /// Read a line from an rvalue stream into a string.
+    4085              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    4086              :     inline basic_istream<_CharT, _Traits>&
+    4087              :     getline(basic_istream<_CharT, _Traits>&& __is,
+    4088              :             basic_string<_CharT, _Traits, _Alloc>& __str)
+    4089              :     { return std::getline(__is, __str); }
+    4090              : #endif
+    4091              : 
+    4092              :   template<>
+    4093              :     basic_istream<char>&
+    4094              :     getline(basic_istream<char>& __in, basic_string<char>& __str,
+    4095              :             char __delim);
+    4096              : 
+    4097              : #ifdef _GLIBCXX_USE_WCHAR_T
+    4098              :   template<>
+    4099              :     basic_istream<wchar_t>&
+    4100              :     getline(basic_istream<wchar_t>& __in, basic_string<wchar_t>& __str,
+    4101              :             wchar_t __delim);
+    4102              : #endif  
+    4103              : 
+    4104              : _GLIBCXX_END_NAMESPACE_VERSION
+    4105              : } // namespace
+    4106              : 
+    4107              : #if __cplusplus >= 201103L
+    4108              : 
+    4109              : #include <ext/string_conversions.h>
+    4110              : #include <bits/charconv.h>
+    4111              : 
+    4112              : namespace std _GLIBCXX_VISIBILITY(default)
+    4113              : {
+    4114              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+    4115              : _GLIBCXX_BEGIN_NAMESPACE_CXX11
+    4116              : 
+    4117              : #if _GLIBCXX_USE_C99_STDLIB
+    4118              :   // 21.4 Numeric Conversions [string.conversions].
+    4119              :   inline int
+    4120              :   stoi(const string& __str, size_t* __idx = 0, int __base = 10)
+    4121              :   { return __gnu_cxx::__stoa<long, int>(&std::strtol, "stoi", __str.c_str(),
+    4122              :                                         __idx, __base); }
+    4123              : 
+    4124              :   inline long
+    4125              :   stol(const string& __str, size_t* __idx = 0, int __base = 10)
+    4126              :   { return __gnu_cxx::__stoa(&std::strtol, "stol", __str.c_str(),
+    4127              :                              __idx, __base); }
+    4128              : 
+    4129              :   inline unsigned long
+    4130              :   stoul(const string& __str, size_t* __idx = 0, int __base = 10)
+    4131              :   { return __gnu_cxx::__stoa(&std::strtoul, "stoul", __str.c_str(),
+    4132              :                              __idx, __base); }
+    4133              : 
+    4134              :   inline long long
+    4135              :   stoll(const string& __str, size_t* __idx = 0, int __base = 10)
+    4136              :   { return __gnu_cxx::__stoa(&std::strtoll, "stoll", __str.c_str(),
+    4137              :                              __idx, __base); }
+    4138              : 
+    4139              :   inline unsigned long long
+    4140              :   stoull(const string& __str, size_t* __idx = 0, int __base = 10)
+    4141              :   { return __gnu_cxx::__stoa(&std::strtoull, "stoull", __str.c_str(),
+    4142              :                              __idx, __base); }
+    4143              : 
+    4144              :   // NB: strtof vs strtod.
+    4145              :   inline float
+    4146              :   stof(const string& __str, size_t* __idx = 0)
+    4147              :   { return __gnu_cxx::__stoa(&std::strtof, "stof", __str.c_str(), __idx); }
+    4148              : 
+    4149              :   inline double
+    4150              :   stod(const string& __str, size_t* __idx = 0)
+    4151              :   { return __gnu_cxx::__stoa(&std::strtod, "stod", __str.c_str(), __idx); }
+    4152              : 
+    4153              :   inline long double
+    4154              :   stold(const string& __str, size_t* __idx = 0)
+    4155              :   { return __gnu_cxx::__stoa(&std::strtold, "stold", __str.c_str(), __idx); }
+    4156              : #endif // _GLIBCXX_USE_C99_STDLIB
+    4157              : 
+    4158              :   // DR 1261. Insufficent overloads for to_string / to_wstring
+    4159              : 
+    4160              :   _GLIBCXX_NODISCARD
+    4161              :   inline string
+    4162       478034 :   to_string(int __val)
+    4163              : #if _GLIBCXX_USE_CXX11_ABI && (__CHAR_BIT__ * __SIZEOF_INT__) <= 32
+    4164              :   noexcept // any 32-bit value fits in the SSO buffer
+    4165              : #endif
+    4166              :   {
+    4167       478034 :     const bool __neg = __val < 0;
+    4168       478034 :     const unsigned __uval = __neg ? (unsigned)~__val + 1u : __val;
+    4169       478034 :     const auto __len = __detail::__to_chars_len(__uval);
+    4170       478034 :     string __str(__neg + __len, '-');
+    4171       478034 :     __detail::__to_chars_10_impl(&__str[__neg], __len, __uval);
+    4172       478034 :     return __str;
+    4173              :   }
+    4174              : 
+    4175              :   _GLIBCXX_NODISCARD
+    4176              :   inline string
+    4177           38 :   to_string(unsigned __val)
+    4178              : #if _GLIBCXX_USE_CXX11_ABI && (__CHAR_BIT__ * __SIZEOF_INT__) <= 32
+    4179              :   noexcept // any 32-bit value fits in the SSO buffer
+    4180              : #endif
+    4181              :   {
+    4182           38 :     string __str(__detail::__to_chars_len(__val), '\0');
+    4183           38 :     __detail::__to_chars_10_impl(&__str[0], __str.size(), __val);
+    4184           38 :     return __str;
+    4185              :   }
+    4186              : 
+    4187              :   _GLIBCXX_NODISCARD
+    4188              :   inline string
+    4189           12 :   to_string(long __val)
+    4190              : #if _GLIBCXX_USE_CXX11_ABI && (__CHAR_BIT__ * __SIZEOF_LONG__) <= 32
+    4191              :   noexcept // any 32-bit value fits in the SSO buffer
+    4192              : #endif
+    4193              :   {
+    4194           12 :     const bool __neg = __val < 0;
+    4195           12 :     const unsigned long __uval = __neg ? (unsigned long)~__val + 1ul : __val;
+    4196           12 :     const auto __len = __detail::__to_chars_len(__uval);
+    4197           12 :     string __str(__neg + __len, '-');
+    4198           12 :     __detail::__to_chars_10_impl(&__str[__neg], __len, __uval);
+    4199           12 :     return __str;
+    4200            0 :   }
+    4201              : 
+    4202              :   _GLIBCXX_NODISCARD
+    4203              :   inline string
+    4204           44 :   to_string(unsigned long __val)
+    4205              : #if _GLIBCXX_USE_CXX11_ABI && (__CHAR_BIT__ * __SIZEOF_LONG__) <= 32
+    4206              :   noexcept // any 32-bit value fits in the SSO buffer
+    4207              : #endif
+    4208              :   {
+    4209           44 :     string __str(__detail::__to_chars_len(__val), '\0');
+    4210           44 :     __detail::__to_chars_10_impl(&__str[0], __str.size(), __val);
+    4211           44 :     return __str;
+    4212            0 :   }
+    4213              : 
+    4214              :   _GLIBCXX_NODISCARD
+    4215              :   inline string
+    4216            0 :   to_string(long long __val)
+    4217              :   {
+    4218            0 :     const bool __neg = __val < 0;
+    4219            0 :     const unsigned long long __uval
+    4220            0 :       = __neg ? (unsigned long long)~__val + 1ull : __val;
+    4221            0 :     const auto __len = __detail::__to_chars_len(__uval);
+    4222            0 :     string __str(__neg + __len, '-');
+    4223            0 :     __detail::__to_chars_10_impl(&__str[__neg], __len, __uval);
+    4224            0 :     return __str;
+    4225            0 :   }
+    4226              : 
+    4227              :   _GLIBCXX_NODISCARD
+    4228              :   inline string
+    4229            0 :   to_string(unsigned long long __val)
+    4230              :   {
+    4231            0 :     string __str(__detail::__to_chars_len(__val), '\0');
+    4232            0 :     __detail::__to_chars_10_impl(&__str[0], __str.size(), __val);
+    4233            0 :     return __str;
+    4234            0 :   }
+    4235              : 
+    4236              : #if _GLIBCXX_USE_C99_STDIO
+    4237              :   // NB: (v)snprintf vs sprintf.
+    4238              : 
+    4239              :   _GLIBCXX_NODISCARD
+    4240              :   inline string
+    4241            4 :   to_string(float __val)
+    4242              :   {
+    4243            4 :     const int __n = 
+    4244              :       __gnu_cxx::__numeric_traits<float>::__max_exponent10 + 20;
+    4245              :     return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, __n,
+    4246            4 :                                            "%f", __val);
+    4247              :   }
+    4248              : 
+    4249              :   _GLIBCXX_NODISCARD
+    4250              :   inline string
+    4251            0 :   to_string(double __val)
+    4252              :   {
+    4253            0 :     const int __n = 
+    4254              :       __gnu_cxx::__numeric_traits<double>::__max_exponent10 + 20;
+    4255              :     return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, __n,
+    4256            0 :                                            "%f", __val);
+    4257              :   }
+    4258              : 
+    4259              :   _GLIBCXX_NODISCARD
+    4260              :   inline string
+    4261            0 :   to_string(long double __val)
+    4262              :   {
+    4263            0 :     const int __n = 
+    4264              :       __gnu_cxx::__numeric_traits<long double>::__max_exponent10 + 20;
+    4265              :     return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, __n,
+    4266            0 :                                            "%Lf", __val);
+    4267              :   }
+    4268              : #endif // _GLIBCXX_USE_C99_STDIO
+    4269              : 
+    4270              : #if defined(_GLIBCXX_USE_WCHAR_T) && _GLIBCXX_USE_C99_WCHAR
+    4271              :   inline int 
+    4272              :   stoi(const wstring& __str, size_t* __idx = 0, int __base = 10)
+    4273              :   { return __gnu_cxx::__stoa<long, int>(&std::wcstol, "stoi", __str.c_str(),
+    4274              :                                         __idx, __base); }
+    4275              : 
+    4276              :   inline long 
+    4277              :   stol(const wstring& __str, size_t* __idx = 0, int __base = 10)
+    4278              :   { return __gnu_cxx::__stoa(&std::wcstol, "stol", __str.c_str(),
+    4279              :                              __idx, __base); }
+    4280              : 
+    4281              :   inline unsigned long
+    4282              :   stoul(const wstring& __str, size_t* __idx = 0, int __base = 10)
+    4283              :   { return __gnu_cxx::__stoa(&std::wcstoul, "stoul", __str.c_str(),
+    4284              :                              __idx, __base); }
+    4285              : 
+    4286              :   inline long long
+    4287              :   stoll(const wstring& __str, size_t* __idx = 0, int __base = 10)
+    4288              :   { return __gnu_cxx::__stoa(&std::wcstoll, "stoll", __str.c_str(),
+    4289              :                              __idx, __base); }
+    4290              : 
+    4291              :   inline unsigned long long
+    4292              :   stoull(const wstring& __str, size_t* __idx = 0, int __base = 10)
+    4293              :   { return __gnu_cxx::__stoa(&std::wcstoull, "stoull", __str.c_str(),
+    4294              :                              __idx, __base); }
+    4295              : 
+    4296              :   // NB: wcstof vs wcstod.
+    4297              :   inline float
+    4298              :   stof(const wstring& __str, size_t* __idx = 0)
+    4299              :   { return __gnu_cxx::__stoa(&std::wcstof, "stof", __str.c_str(), __idx); }
+    4300              : 
+    4301              :   inline double
+    4302              :   stod(const wstring& __str, size_t* __idx = 0)
+    4303              :   { return __gnu_cxx::__stoa(&std::wcstod, "stod", __str.c_str(), __idx); }
+    4304              : 
+    4305              :   inline long double
+    4306              :   stold(const wstring& __str, size_t* __idx = 0)
+    4307              :   { return __gnu_cxx::__stoa(&std::wcstold, "stold", __str.c_str(), __idx); }
+    4308              : 
+    4309              : #ifndef _GLIBCXX_HAVE_BROKEN_VSWPRINTF
+    4310              :   // DR 1261.
+    4311              :   _GLIBCXX_NODISCARD
+    4312              :   inline wstring
+    4313              :   to_wstring(int __val)
+    4314              :   { return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, 4 * sizeof(int),
+    4315              :                                             L"%d", __val); }
+    4316              : 
+    4317              :   _GLIBCXX_NODISCARD
+    4318              :   inline wstring
+    4319              :   to_wstring(unsigned __val)
+    4320              :   { return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf,
+    4321              :                                             4 * sizeof(unsigned),
+    4322              :                                             L"%u", __val); }
+    4323              : 
+    4324              :   _GLIBCXX_NODISCARD
+    4325              :   inline wstring
+    4326              :   to_wstring(long __val)
+    4327              :   { return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, 4 * sizeof(long),
+    4328              :                                             L"%ld", __val); }
+    4329              : 
+    4330              :   _GLIBCXX_NODISCARD
+    4331              :   inline wstring
+    4332              :   to_wstring(unsigned long __val)
+    4333              :   { return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf,
+    4334              :                                             4 * sizeof(unsigned long),
+    4335              :                                             L"%lu", __val); }
+    4336              : 
+    4337              :   _GLIBCXX_NODISCARD
+    4338              :   inline wstring
+    4339              :   to_wstring(long long __val)
+    4340              :   { return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf,
+    4341              :                                             4 * sizeof(long long),
+    4342              :                                             L"%lld", __val); }
+    4343              : 
+    4344              :   _GLIBCXX_NODISCARD
+    4345              :   inline wstring
+    4346              :   to_wstring(unsigned long long __val)
+    4347              :   { return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf,
+    4348              :                                             4 * sizeof(unsigned long long),
+    4349              :                                             L"%llu", __val); }
+    4350              : 
+    4351              :   _GLIBCXX_NODISCARD
+    4352              :   inline wstring
+    4353              :   to_wstring(float __val)
+    4354              :   {
+    4355              :     const int __n =
+    4356              :       __gnu_cxx::__numeric_traits<float>::__max_exponent10 + 20;
+    4357              :     return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, __n,
+    4358              :                                             L"%f", __val);
+    4359              :   }
+    4360              : 
+    4361              :   _GLIBCXX_NODISCARD
+    4362              :   inline wstring
+    4363              :   to_wstring(double __val)
+    4364              :   {
+    4365              :     const int __n =
+    4366              :       __gnu_cxx::__numeric_traits<double>::__max_exponent10 + 20;
+    4367              :     return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, __n,
+    4368              :                                             L"%f", __val);
+    4369              :   }
+    4370              : 
+    4371              :   _GLIBCXX_NODISCARD
+    4372              :   inline wstring
+    4373              :   to_wstring(long double __val)
+    4374              :   {
+    4375              :     const int __n =
+    4376              :       __gnu_cxx::__numeric_traits<long double>::__max_exponent10 + 20;
+    4377              :     return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, __n,
+    4378              :                                             L"%Lf", __val);
+    4379              :   }
+    4380              : #endif // _GLIBCXX_HAVE_BROKEN_VSWPRINTF
+    4381              : #endif // _GLIBCXX_USE_WCHAR_T && _GLIBCXX_USE_C99_WCHAR
+    4382              : 
+    4383              : _GLIBCXX_END_NAMESPACE_CXX11
+    4384              : _GLIBCXX_END_NAMESPACE_VERSION
+    4385              : } // namespace
+    4386              : 
+    4387              : #endif /* C++11 */
+    4388              : 
+    4389              : #if __cplusplus >= 201103L
+    4390              : 
+    4391              : #include <bits/functional_hash.h>
+    4392              : 
+    4393              : namespace std _GLIBCXX_VISIBILITY(default)
+    4394              : {
+    4395              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+    4396              : 
+    4397              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    4398              :   // 3705. Hashability shouldn't depend on basic_string's allocator
+    4399              : 
+    4400              :   template<typename _CharT, typename _Alloc,
+    4401              :            typename _StrT = basic_string<_CharT, char_traits<_CharT>, _Alloc>>
+    4402              :     struct __str_hash_base
+    4403              :     : public __hash_base<size_t, _StrT>
+    4404              :     {
+    4405              :       [[__nodiscard__]]
+    4406              :       size_t
+    4407        66742 :       operator()(const _StrT& __s) const noexcept
+    4408        66742 :       { return _Hash_impl::hash(__s.data(), __s.length() * sizeof(_CharT)); }
+    4409              :     };
+    4410              : 
+    4411              : #ifndef _GLIBCXX_COMPATIBILITY_CXX0X
+    4412              :   /// std::hash specialization for string.
+    4413              :   template<typename _Alloc>
+    4414              :     struct hash<basic_string<char, char_traits<char>, _Alloc>>
+    4415              :     : public __str_hash_base<char, _Alloc>
+    4416              :     { };
+    4417              : 
+    4418              :   /// std::hash specialization for wstring.
+    4419              :   template<typename _Alloc>
+    4420              :     struct hash<basic_string<wchar_t, char_traits<wchar_t>, _Alloc>>
+    4421              :     : public __str_hash_base<wchar_t, _Alloc>
+    4422              :     { };
+    4423              : 
+    4424              :   template<typename _Alloc>
+    4425              :     struct __is_fast_hash<hash<basic_string<wchar_t, char_traits<wchar_t>,
+    4426              :                                             _Alloc>>>
+    4427              :     : std::false_type
+    4428              :     { };
+    4429              : #endif /* _GLIBCXX_COMPATIBILITY_CXX0X */
+    4430              : 
+    4431              : #ifdef _GLIBCXX_USE_CHAR8_T
+    4432              :   /// std::hash specialization for u8string.
+    4433              :   template<typename _Alloc>
+    4434              :     struct hash<basic_string<char8_t, char_traits<char8_t>, _Alloc>>
+    4435              :     : public __str_hash_base<char8_t, _Alloc>
+    4436              :     { };
+    4437              : #endif
+    4438              : 
+    4439              :   /// std::hash specialization for u16string.
+    4440              :   template<typename _Alloc>
+    4441              :     struct hash<basic_string<char16_t, char_traits<char16_t>, _Alloc>>
+    4442              :     : public __str_hash_base<char16_t, _Alloc>
+    4443              :     { };
+    4444              : 
+    4445              :   /// std::hash specialization for u32string.
+    4446              :   template<typename _Alloc>
+    4447              :     struct hash<basic_string<char32_t, char_traits<char32_t>, _Alloc>>
+    4448              :     : public __str_hash_base<char32_t, _Alloc>
+    4449              :     { };
+    4450              : 
+    4451              : #if ! _GLIBCXX_INLINE_VERSION
+    4452              :   // PR libstdc++/105907 - __is_fast_hash affects unordered container ABI.
+    4453              :   template<> struct __is_fast_hash<hash<string>> : std::false_type { };
+    4454              :   template<> struct __is_fast_hash<hash<wstring>> : std::false_type { };
+    4455              :   template<> struct __is_fast_hash<hash<u16string>> : std::false_type { };
+    4456              :   template<> struct __is_fast_hash<hash<u32string>> : std::false_type { };
+    4457              : #ifdef _GLIBCXX_USE_CHAR8_T
+    4458              :   template<> struct __is_fast_hash<hash<u8string>> : std::false_type { };
+    4459              : #endif
+    4460              : #else
+    4461              :   // For versioned namespace, assume every std::hash<basic_string<>> is slow.
+    4462              :   template<typename _CharT, typename _Traits, typename _Alloc>
+    4463              :     struct __is_fast_hash<hash<basic_string<_CharT, _Traits, _Alloc>>>
+    4464              :     : std::false_type
+    4465              :     { };
+    4466              : #endif
+    4467              : 
+    4468              : #if __cplusplus >= 201402L
+    4469              : 
+    4470              : #define __cpp_lib_string_udls 201304L
+    4471              : 
+    4472              :   inline namespace literals
+    4473              :   {
+    4474              :   inline namespace string_literals
+    4475              :   {
+    4476              : #pragma GCC diagnostic push
+    4477              : #pragma GCC diagnostic ignored "-Wliteral-suffix"
+    4478              : 
+    4479              : #if __cpp_lib_constexpr_string >= 201907L
+    4480              : # define _GLIBCXX_STRING_CONSTEXPR constexpr
+    4481              : #else
+    4482              : # define _GLIBCXX_STRING_CONSTEXPR
+    4483              : #endif
+    4484              : 
+    4485              :     _GLIBCXX_DEFAULT_ABI_TAG _GLIBCXX_STRING_CONSTEXPR
+    4486              :     inline basic_string<char>
+    4487           96 :     operator""s(const char* __str, size_t __len)
+    4488          288 :     { return basic_string<char>{__str, __len}; }
+    4489              : 
+    4490              :     _GLIBCXX_DEFAULT_ABI_TAG _GLIBCXX_STRING_CONSTEXPR
+    4491              :     inline basic_string<wchar_t>
+    4492              :     operator""s(const wchar_t* __str, size_t __len)
+    4493              :     { return basic_string<wchar_t>{__str, __len}; }
+    4494              : 
+    4495              : #ifdef _GLIBCXX_USE_CHAR8_T
+    4496              :     _GLIBCXX_DEFAULT_ABI_TAG _GLIBCXX_STRING_CONSTEXPR
+    4497              :     inline basic_string<char8_t>
+    4498              :     operator""s(const char8_t* __str, size_t __len)
+    4499              :     { return basic_string<char8_t>{__str, __len}; }
+    4500              : #endif
+    4501              : 
+    4502              :     _GLIBCXX_DEFAULT_ABI_TAG _GLIBCXX_STRING_CONSTEXPR
+    4503              :     inline basic_string<char16_t>
+    4504              :     operator""s(const char16_t* __str, size_t __len)
+    4505              :     { return basic_string<char16_t>{__str, __len}; }
+    4506              : 
+    4507              :     _GLIBCXX_DEFAULT_ABI_TAG _GLIBCXX_STRING_CONSTEXPR
+    4508              :     inline basic_string<char32_t>
+    4509              :     operator""s(const char32_t* __str, size_t __len)
+    4510              :     { return basic_string<char32_t>{__str, __len}; }
+    4511              : 
+    4512              : #undef _GLIBCXX_STRING_CONSTEXPR
+    4513              : #pragma GCC diagnostic pop
+    4514              :   } // inline namespace string_literals
+    4515              :   } // inline namespace literals
+    4516              : 
+    4517              : #if __cplusplus >= 201703L
+    4518              :   namespace __detail::__variant
+    4519              :   {
+    4520              :     template<typename> struct _Never_valueless_alt; // see <variant>
+    4521              : 
+    4522              :     // Provide the strong exception-safety guarantee when emplacing a
+    4523              :     // basic_string into a variant, but only if moving the string cannot throw.
+    4524              :     template<typename _Tp, typename _Traits, typename _Alloc>
+    4525              :       struct _Never_valueless_alt<std::basic_string<_Tp, _Traits, _Alloc>>
+    4526              :       : __and_<
+    4527              :         is_nothrow_move_constructible<std::basic_string<_Tp, _Traits, _Alloc>>,
+    4528              :         is_nothrow_move_assignable<std::basic_string<_Tp, _Traits, _Alloc>>
+    4529              :         >::type
+    4530              :       { };
+    4531              :   }  // namespace __detail::__variant
+    4532              : #endif // C++17
+    4533              : #endif // C++14
+    4534              : 
+    4535              : _GLIBCXX_END_NAMESPACE_VERSION
+    4536              : } // namespace std
+    4537              : 
+    4538              : #endif // C++11
+    4539              : 
+    4540              : #endif /* _BASIC_STRING_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/basic_string.tcc.func-c.html b/html/usr/include/c++/13/bits/basic_string.tcc.func-c.html new file mode 100644 index 0000000..1c5a170 --- /dev/null +++ b/html/usr/include/c++/13/bits/basic_string.tcc.func-c.html @@ -0,0 +1,159 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/basic_string.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - basic_string.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1212
Test Date:2024-04-30 13:17:26Functions:66.7 %96
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tag109359428
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag0
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag7216
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tag109352212
_ZZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tagEN6_GuardC2EPS4_109359428
_ZZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tagEN6_GuardC2EPS4_0
_ZZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tagEN6_GuardC2EPS4_7216
_ZZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tagEN6_GuardC2EPS4_109352212
_ZZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tagEN6_GuardD2Ev109359428
_ZZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tagEN6_GuardD2Ev0
_ZZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tagEN6_GuardD2Ev7216
_ZZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tagEN6_GuardD2Ev109352212
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/basic_string.tcc.func.html b/html/usr/include/c++/13/bits/basic_string.tcc.func.html new file mode 100644 index 0000000..3d0c6ec --- /dev/null +++ b/html/usr/include/c++/13/bits/basic_string.tcc.func.html @@ -0,0 +1,159 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/basic_string.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - basic_string.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1212
Test Date:2024-04-30 13:17:26Functions:66.7 %96
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tag109359428
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag0
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag7216
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tag109352212
_ZZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tagEN6_GuardC2EPS4_109359428
_ZZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tagEN6_GuardC2EPS4_0
_ZZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tagEN6_GuardC2EPS4_7216
_ZZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tagEN6_GuardC2EPS4_109352212
_ZZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tagEN6_GuardD2Ev109359428
_ZZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tagEN6_GuardD2Ev0
_ZZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tagEN6_GuardD2Ev7216
_ZZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tagEN6_GuardD2Ev109352212
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/basic_string.tcc.gcov.html b/html/usr/include/c++/13/bits/basic_string.tcc.gcov.html new file mode 100644 index 0000000..71c6d3e --- /dev/null +++ b/html/usr/include/c++/13/bits/basic_string.tcc.gcov.html @@ -0,0 +1,1102 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/basic_string.tcc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - basic_string.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1212
Test Date:2024-04-30 13:17:26Functions:66.7 %96
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Components for manipulating sequences of characters -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 1997-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/basic_string.tcc
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{string}
+      28              :  */
+      29              : 
+      30              : //
+      31              : // ISO C++ 14882: 21  Strings library
+      32              : //
+      33              : 
+      34              : // Written by Jason Merrill based upon the specification by Takanori Adachi
+      35              : // in ANSI X3J16/94-0013R2.  Rewritten by Nathan Myers to ISO-14882.
+      36              : // Non-reference-counted implementation written by Paolo Carlini and
+      37              : // updated by Jonathan Wakely for ISO-14882-2011.
+      38              : 
+      39              : #ifndef _BASIC_STRING_TCC
+      40              : #define _BASIC_STRING_TCC 1
+      41              : 
+      42              : #pragma GCC system_header
+      43              : 
+      44              : #include <bits/cxxabi_forced.h>
+      45              : 
+      46              : namespace std _GLIBCXX_VISIBILITY(default)
+      47              : {
+      48              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      49              : 
+      50              : #if _GLIBCXX_USE_CXX11_ABI
+      51              : 
+      52              :   template<typename _CharT, typename _Traits, typename _Alloc>
+      53              :     const typename basic_string<_CharT, _Traits, _Alloc>::size_type
+      54              :     basic_string<_CharT, _Traits, _Alloc>::npos;
+      55              : 
+      56              :   template<typename _CharT, typename _Traits, typename _Alloc>
+      57              :     _GLIBCXX20_CONSTEXPR
+      58              :     void
+      59              :     basic_string<_CharT, _Traits, _Alloc>::
+      60              :     swap(basic_string& __s) _GLIBCXX_NOEXCEPT
+      61              :     {
+      62              :       if (this == std::__addressof(__s))
+      63              :         return;
+      64              : 
+      65              :       _Alloc_traits::_S_on_swap(_M_get_allocator(), __s._M_get_allocator());
+      66              : 
+      67              :       if (_M_is_local())
+      68              :         if (__s._M_is_local())
+      69              :           {
+      70              :             if (length() && __s.length())
+      71              :               {
+      72              :                 _CharT __tmp_data[_S_local_capacity + 1];
+      73              :                 traits_type::copy(__tmp_data, __s._M_local_buf,
+      74              :                                   __s.length() + 1);
+      75              :                 traits_type::copy(__s._M_local_buf, _M_local_buf,
+      76              :                                   length() + 1);
+      77              :                 traits_type::copy(_M_local_buf, __tmp_data,
+      78              :                                   __s.length() + 1);
+      79              :               }
+      80              :             else if (__s.length())
+      81              :               {
+      82              :                 _M_init_local_buf();
+      83              :                 traits_type::copy(_M_local_buf, __s._M_local_buf,
+      84              :                                   __s.length() + 1);
+      85              :                 _M_length(__s.length());
+      86              :                 __s._M_set_length(0);
+      87              :                 return;
+      88              :               }
+      89              :             else if (length())
+      90              :               {
+      91              :                 __s._M_init_local_buf();
+      92              :                 traits_type::copy(__s._M_local_buf, _M_local_buf,
+      93              :                                   length() + 1);
+      94              :                 __s._M_length(length());
+      95              :                 _M_set_length(0);
+      96              :                 return;
+      97              :               }
+      98              :           }
+      99              :         else
+     100              :           {
+     101              :             const size_type __tmp_capacity = __s._M_allocated_capacity;
+     102              :             __s._M_init_local_buf();
+     103              :             traits_type::copy(__s._M_local_buf, _M_local_buf,
+     104              :                               length() + 1);
+     105              :             _M_data(__s._M_data());
+     106              :             __s._M_data(__s._M_local_buf);
+     107              :             _M_capacity(__tmp_capacity);
+     108              :           }
+     109              :       else
+     110              :         {
+     111              :           const size_type __tmp_capacity = _M_allocated_capacity;
+     112              :           if (__s._M_is_local())
+     113              :             {
+     114              :               _M_init_local_buf();
+     115              :               traits_type::copy(_M_local_buf, __s._M_local_buf,
+     116              :                                 __s.length() + 1);
+     117              :               __s._M_data(_M_data());
+     118              :               _M_data(_M_local_buf);
+     119              :             }
+     120              :           else
+     121              :             {
+     122              :               pointer __tmp_ptr = _M_data();
+     123              :               _M_data(__s._M_data());
+     124              :               __s._M_data(__tmp_ptr);
+     125              :               _M_capacity(__s._M_allocated_capacity);
+     126              :             }
+     127              :           __s._M_capacity(__tmp_capacity);
+     128              :         }
+     129              : 
+     130              :       const size_type __tmp_length = length();
+     131              :       _M_length(__s.length());
+     132              :       __s._M_length(__tmp_length);
+     133              :     }
+     134              : 
+     135              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     136              :     _GLIBCXX20_CONSTEXPR
+     137              :     typename basic_string<_CharT, _Traits, _Alloc>::pointer
+     138              :     basic_string<_CharT, _Traits, _Alloc>::
+     139              :     _M_create(size_type& __capacity, size_type __old_capacity)
+     140              :     {
+     141              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     142              :       // 83.  String::npos vs. string::max_size()
+     143              :       if (__capacity > max_size())
+     144              :         std::__throw_length_error(__N("basic_string::_M_create"));
+     145              : 
+     146              :       // The below implements an exponential growth policy, necessary to
+     147              :       // meet amortized linear time requirements of the library: see
+     148              :       // http://gcc.gnu.org/ml/libstdc++/2001-07/msg00085.html.
+     149              :       if (__capacity > __old_capacity && __capacity < 2 * __old_capacity)
+     150              :         {
+     151              :           __capacity = 2 * __old_capacity;
+     152              :           // Never allocate a string bigger than max_size.
+     153              :           if (__capacity > max_size())
+     154              :             __capacity = max_size();
+     155              :         }
+     156              : 
+     157              :       // NB: Need an array of char_type[__capacity], plus a terminating
+     158              :       // null char_type() element.
+     159              :       return _S_allocate(_M_get_allocator(), __capacity + 1);
+     160              :     }
+     161              : 
+     162              :   // NB: This is the special case for Input Iterators, used in
+     163              :   // istreambuf_iterators, etc.
+     164              :   // Input Iterators have a cost structure very different from
+     165              :   // pointers, calling for a different coding style.
+     166              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     167              :     template<typename _InIterator>
+     168              :       _GLIBCXX20_CONSTEXPR
+     169              :       void
+     170              :       basic_string<_CharT, _Traits, _Alloc>::
+     171              :       _M_construct(_InIterator __beg, _InIterator __end,
+     172              :                    std::input_iterator_tag)
+     173              :       {
+     174              :         size_type __len = 0;
+     175              :         size_type __capacity = size_type(_S_local_capacity);
+     176              : 
+     177              :         _M_init_local_buf();
+     178              : 
+     179              :         while (__beg != __end && __len < __capacity)
+     180              :           {
+     181              :             _M_local_buf[__len++] = *__beg;
+     182              :             ++__beg;
+     183              :           }
+     184              : 
+     185              :         struct _Guard
+     186              :         {
+     187              :           _GLIBCXX20_CONSTEXPR
+     188              :           explicit _Guard(basic_string* __s) : _M_guarded(__s) { }
+     189              : 
+     190              :           _GLIBCXX20_CONSTEXPR
+     191              :           ~_Guard() { if (_M_guarded) _M_guarded->_M_dispose(); }
+     192              : 
+     193              :           basic_string* _M_guarded;
+     194              :         } __guard(this);
+     195              : 
+     196              :         while (__beg != __end)
+     197              :           {
+     198              :             if (__len == __capacity)
+     199              :               {
+     200              :                 // Allocate more space.
+     201              :                 __capacity = __len + 1;
+     202              :                 pointer __another = _M_create(__capacity, __len);
+     203              :                 this->_S_copy(__another, _M_data(), __len);
+     204              :                 _M_dispose();
+     205              :                 _M_data(__another);
+     206              :                 _M_capacity(__capacity);
+     207              :               }
+     208              :             traits_type::assign(_M_data()[__len++], *__beg);
+     209              :             ++__beg;
+     210              :           }
+     211              : 
+     212              :         __guard._M_guarded = 0;
+     213              : 
+     214              :         _M_set_length(__len);
+     215              :       }
+     216              : 
+     217              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     218              :     template<typename _InIterator>
+     219              :       _GLIBCXX20_CONSTEXPR
+     220              :       void
+     221    109359428 :       basic_string<_CharT, _Traits, _Alloc>::
+     222              :       _M_construct(_InIterator __beg, _InIterator __end,
+     223              :                    std::forward_iterator_tag)
+     224              :       {
+     225    109359428 :         size_type __dnew = static_cast<size_type>(std::distance(__beg, __end));
+     226              : 
+     227    109359428 :         if (__dnew > size_type(_S_local_capacity))
+     228              :           {
+     229       103918 :             _M_data(_M_create(__dnew, size_type(0)));
+     230       103918 :             _M_capacity(__dnew);
+     231              :           }
+     232              :         else
+     233              :           _M_init_local_buf();
+     234              : 
+     235              :         // Check for out_of_range and length_error exceptions.
+     236              :         struct _Guard
+     237              :         {
+     238              :           _GLIBCXX20_CONSTEXPR
+     239    109359428 :           explicit _Guard(basic_string* __s) : _M_guarded(__s) { }
+     240              : 
+     241              :           _GLIBCXX20_CONSTEXPR
+     242    109359428 :           ~_Guard() { if (_M_guarded) _M_guarded->_M_dispose(); }
+     243              : 
+     244              :           basic_string* _M_guarded;
+     245    109359428 :         } __guard(this);
+     246              : 
+     247    109359428 :         this->_S_copy_chars(_M_data(), __beg, __end);
+     248              : 
+     249    109359428 :         __guard._M_guarded = 0;
+     250              : 
+     251    109359428 :         _M_set_length(__dnew);
+     252    109359428 :       }
+     253              : 
+     254              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     255              :     _GLIBCXX20_CONSTEXPR
+     256              :     void
+     257              :     basic_string<_CharT, _Traits, _Alloc>::
+     258              :     _M_construct(size_type __n, _CharT __c)
+     259              :     {
+     260              :       if (__n > size_type(_S_local_capacity))
+     261              :         {
+     262              :           _M_data(_M_create(__n, size_type(0)));
+     263              :           _M_capacity(__n);
+     264              :         }
+     265              :       else
+     266              :         _M_init_local_buf();
+     267              : 
+     268              :       if (__n)
+     269              :         this->_S_assign(_M_data(), __n, __c);
+     270              : 
+     271              :       _M_set_length(__n);
+     272              :     }
+     273              : 
+     274              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     275              :     _GLIBCXX20_CONSTEXPR
+     276              :     void
+     277              :     basic_string<_CharT, _Traits, _Alloc>::
+     278              :     _M_assign(const basic_string& __str)
+     279              :     {
+     280              :       if (this != std::__addressof(__str))
+     281              :         {
+     282              :           const size_type __rsize = __str.length();
+     283              :           const size_type __capacity = capacity();
+     284              : 
+     285              :           if (__rsize > __capacity)
+     286              :             {
+     287              :               size_type __new_capacity = __rsize;
+     288              :               pointer __tmp = _M_create(__new_capacity, __capacity);
+     289              :               _M_dispose();
+     290              :               _M_data(__tmp);
+     291              :               _M_capacity(__new_capacity);
+     292              :             }
+     293              : 
+     294              :           if (__rsize)
+     295              :             this->_S_copy(_M_data(), __str._M_data(), __rsize);
+     296              : 
+     297              :           _M_set_length(__rsize);
+     298              :         }
+     299              :     }
+     300              : 
+     301              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     302              :     _GLIBCXX20_CONSTEXPR
+     303              :     void
+     304              :     basic_string<_CharT, _Traits, _Alloc>::
+     305              :     reserve(size_type __res)
+     306              :     {
+     307              :       const size_type __capacity = capacity();
+     308              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     309              :       // 2968. Inconsistencies between basic_string reserve and
+     310              :       // vector/unordered_map/unordered_set reserve functions
+     311              :       // P0966 reserve should not shrink
+     312              :       if (__res <= __capacity)
+     313              :         return;
+     314              : 
+     315              :       pointer __tmp = _M_create(__res, __capacity);
+     316              :       this->_S_copy(__tmp, _M_data(), length() + 1);
+     317              :       _M_dispose();
+     318              :       _M_data(__tmp);
+     319              :       _M_capacity(__res);
+     320              :     }
+     321              : 
+     322              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     323              :     _GLIBCXX20_CONSTEXPR
+     324              :     void
+     325              :     basic_string<_CharT, _Traits, _Alloc>::
+     326              :     _M_mutate(size_type __pos, size_type __len1, const _CharT* __s,
+     327              :               size_type __len2)
+     328              :     {
+     329              :       const size_type __how_much = length() - __pos - __len1;
+     330              : 
+     331              :       size_type __new_capacity = length() + __len2 - __len1;
+     332              :       pointer __r = _M_create(__new_capacity, capacity());
+     333              : 
+     334              :       if (__pos)
+     335              :         this->_S_copy(__r, _M_data(), __pos);
+     336              :       if (__s && __len2)
+     337              :         this->_S_copy(__r + __pos, __s, __len2);
+     338              :       if (__how_much)
+     339              :         this->_S_copy(__r + __pos + __len2,
+     340              :                       _M_data() + __pos + __len1, __how_much);
+     341              : 
+     342              :       _M_dispose();
+     343              :       _M_data(__r);
+     344              :       _M_capacity(__new_capacity);
+     345              :     }
+     346              : 
+     347              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     348              :     _GLIBCXX20_CONSTEXPR
+     349              :     void
+     350              :     basic_string<_CharT, _Traits, _Alloc>::
+     351              :     _M_erase(size_type __pos, size_type __n)
+     352              :     {
+     353              :       const size_type __how_much = length() - __pos - __n;
+     354              : 
+     355              :       if (__how_much && __n)
+     356              :         this->_S_move(_M_data() + __pos, _M_data() + __pos + __n, __how_much);
+     357              : 
+     358              :       _M_set_length(length() - __n);
+     359              :     }
+     360              : 
+     361              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     362              :     _GLIBCXX20_CONSTEXPR
+     363              :     void
+     364              :     basic_string<_CharT, _Traits, _Alloc>::
+     365              :     reserve()
+     366              :     {
+     367              :       if (_M_is_local())
+     368              :         return;
+     369              : 
+     370              :       const size_type __length = length();
+     371              :       const size_type __capacity = _M_allocated_capacity;
+     372              : 
+     373              :       if (__length <= size_type(_S_local_capacity))
+     374              :         {
+     375              :           _M_init_local_buf();
+     376              :           this->_S_copy(_M_local_buf, _M_data(), __length + 1);
+     377              :           _M_destroy(__capacity);
+     378              :           _M_data(_M_local_data());
+     379              :         }
+     380              : #if __cpp_exceptions
+     381              :       else if (__length < __capacity)
+     382              :         try
+     383              :           {
+     384              :             pointer __tmp = _S_allocate(_M_get_allocator(), __length + 1);
+     385              :             this->_S_copy(__tmp, _M_data(), __length + 1);
+     386              :             _M_dispose();
+     387              :             _M_data(__tmp);
+     388              :             _M_capacity(__length);
+     389              :           }
+     390              :         catch (const __cxxabiv1::__forced_unwind&)
+     391              :           { throw; }
+     392              :         catch (...)
+     393              :           { /* swallow the exception */ }
+     394              : #endif
+     395              :     }
+     396              : 
+     397              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     398              :     _GLIBCXX20_CONSTEXPR
+     399              :     void
+     400              :     basic_string<_CharT, _Traits, _Alloc>::
+     401              :     resize(size_type __n, _CharT __c)
+     402              :     {
+     403              :       const size_type __size = this->size();
+     404              :       if (__size < __n)
+     405              :         this->append(__n - __size, __c);
+     406              :       else if (__n < __size)
+     407              :         this->_M_set_length(__n);
+     408              :     }
+     409              : 
+     410              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     411              :     _GLIBCXX20_CONSTEXPR
+     412              :     basic_string<_CharT, _Traits, _Alloc>&
+     413              :     basic_string<_CharT, _Traits, _Alloc>::
+     414              :     _M_append(const _CharT* __s, size_type __n)
+     415              :     {
+     416              :       const size_type __len = __n + this->size();
+     417              : 
+     418              :       if (__len <= this->capacity())
+     419              :         {
+     420              :           if (__n)
+     421              :             this->_S_copy(this->_M_data() + this->size(), __s, __n);
+     422              :         }
+     423              :       else
+     424              :         this->_M_mutate(this->size(), size_type(0), __s, __n);
+     425              : 
+     426              :       this->_M_set_length(__len);
+     427              :       return *this;
+     428              :     }
+     429              : 
+     430              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     431              :     template<typename _InputIterator>
+     432              :       _GLIBCXX20_CONSTEXPR
+     433              :       basic_string<_CharT, _Traits, _Alloc>&
+     434              :       basic_string<_CharT, _Traits, _Alloc>::
+     435              :       _M_replace_dispatch(const_iterator __i1, const_iterator __i2,
+     436              :                           _InputIterator __k1, _InputIterator __k2,
+     437              :                           std::__false_type)
+     438              :       {
+     439              :         // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     440              :         // 2788. unintentionally require a default constructible allocator
+     441              :         const basic_string __s(__k1, __k2, this->get_allocator());
+     442              :         const size_type __n1 = __i2 - __i1;
+     443              :         return _M_replace(__i1 - begin(), __n1, __s._M_data(),
+     444              :                           __s.size());
+     445              :       }
+     446              : 
+     447              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     448              :     _GLIBCXX20_CONSTEXPR
+     449              :     basic_string<_CharT, _Traits, _Alloc>&
+     450              :     basic_string<_CharT, _Traits, _Alloc>::
+     451              :     _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2,
+     452              :                    _CharT __c)
+     453              :     {
+     454              :       _M_check_length(__n1, __n2, "basic_string::_M_replace_aux");
+     455              : 
+     456              :       const size_type __old_size = this->size();
+     457              :       const size_type __new_size = __old_size + __n2 - __n1;
+     458              : 
+     459              :       if (__new_size <= this->capacity())
+     460              :         {
+     461              :           pointer __p = this->_M_data() + __pos1;
+     462              : 
+     463              :           const size_type __how_much = __old_size - __pos1 - __n1;
+     464              :           if (__how_much && __n1 != __n2)
+     465              :             this->_S_move(__p + __n2, __p + __n1, __how_much);
+     466              :         }
+     467              :       else
+     468              :         this->_M_mutate(__pos1, __n1, 0, __n2);
+     469              : 
+     470              :       if (__n2)
+     471              :         this->_S_assign(this->_M_data() + __pos1, __n2, __c);
+     472              : 
+     473              :       this->_M_set_length(__new_size);
+     474              :       return *this;
+     475              :     }
+     476              : 
+     477              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     478              :     __attribute__((__noinline__, __noclone__, __cold__)) void
+     479              :     basic_string<_CharT, _Traits, _Alloc>::
+     480              :     _M_replace_cold(pointer __p, size_type __len1, const _CharT* __s,
+     481              :                     const size_type __len2, const size_type __how_much)
+     482              :     {
+     483              :       // Work in-place.
+     484              :       if (__len2 && __len2 <= __len1)
+     485              :         this->_S_move(__p, __s, __len2);
+     486              :       if (__how_much && __len1 != __len2)
+     487              :         this->_S_move(__p + __len2, __p + __len1, __how_much);
+     488              :       if (__len2 > __len1)
+     489              :         {
+     490              :           if (__s + __len2 <= __p + __len1)
+     491              :             this->_S_move(__p, __s, __len2);
+     492              :           else if (__s >= __p + __len1)
+     493              :             {
+     494              :               // Hint to middle end that __p and __s overlap
+     495              :               // (PR 98465).
+     496              :               const size_type __poff = (__s - __p) + (__len2 - __len1);
+     497              :               this->_S_copy(__p, __p + __poff, __len2);
+     498              :             }
+     499              :           else
+     500              :             {
+     501              :               const size_type __nleft = (__p + __len1) - __s;
+     502              :               this->_S_move(__p, __s, __nleft);
+     503              :               this->_S_copy(__p + __nleft, __p + __len2, __len2 - __nleft);
+     504              :             }
+     505              :         }
+     506              :     }
+     507              : 
+     508              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     509              :     _GLIBCXX20_CONSTEXPR
+     510              :     basic_string<_CharT, _Traits, _Alloc>&
+     511              :     basic_string<_CharT, _Traits, _Alloc>::
+     512              :     _M_replace(size_type __pos, size_type __len1, const _CharT* __s,
+     513              :                const size_type __len2)
+     514              :     {
+     515              :       _M_check_length(__len1, __len2, "basic_string::_M_replace");
+     516              : 
+     517              :       const size_type __old_size = this->size();
+     518              :       const size_type __new_size = __old_size + __len2 - __len1;
+     519              : 
+     520              :       if (__new_size <= this->capacity())
+     521              :         {
+     522              :           pointer __p = this->_M_data() + __pos;
+     523              : 
+     524              :           const size_type __how_much = __old_size - __pos - __len1;
+     525              : #if __cpp_lib_is_constant_evaluated
+     526              :           if (std::is_constant_evaluated())
+     527              :             {
+     528              :               auto __newp = _S_allocate(_M_get_allocator(), __new_size);
+     529              :               _S_copy(__newp, this->_M_data(), __pos);
+     530              :               _S_copy(__newp + __pos, __s, __len2);
+     531              :               _S_copy(__newp + __pos + __len2, __p + __len1, __how_much);
+     532              :               _S_copy(this->_M_data(), __newp, __new_size);
+     533              :               this->_M_get_allocator().deallocate(__newp, __new_size);
+     534              :             }
+     535              :           else
+     536              : #endif
+     537              :           if (__builtin_expect(_M_disjunct(__s), true))
+     538              :             {
+     539              :               if (__how_much && __len1 != __len2)
+     540              :                 this->_S_move(__p + __len2, __p + __len1, __how_much);
+     541              :               if (__len2)
+     542              :                 this->_S_copy(__p, __s, __len2);
+     543              :             }
+     544              :           else
+     545              :             _M_replace_cold(__p, __len1, __s, __len2, __how_much);
+     546              :         }
+     547              :       else
+     548              :         this->_M_mutate(__pos, __len1, __s, __len2);
+     549              : 
+     550              :       this->_M_set_length(__new_size);
+     551              :       return *this;
+     552              :     }
+     553              : 
+     554              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     555              :     _GLIBCXX20_CONSTEXPR
+     556              :     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+     557              :     basic_string<_CharT, _Traits, _Alloc>::
+     558              :     copy(_CharT* __s, size_type __n, size_type __pos) const
+     559              :     {
+     560              :       _M_check(__pos, "basic_string::copy");
+     561              :       __n = _M_limit(__pos, __n);
+     562              :       __glibcxx_requires_string_len(__s, __n);
+     563              :       if (__n)
+     564              :         _S_copy(__s, _M_data() + __pos, __n);
+     565              :       // 21.3.5.7 par 3: do not append null.  (good.)
+     566              :       return __n;
+     567              :     }
+     568              : 
+     569              : #if __cplusplus > 202002L
+     570              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     571              :   template<typename _Operation>
+     572              :     constexpr void
+     573              :     basic_string<_CharT, _Traits, _Alloc>::
+     574              :     resize_and_overwrite(const size_type __n, _Operation __op)
+     575              :     {
+     576              :       const size_type __capacity = capacity();
+     577              :       _CharT* __p;
+     578              :       if (__n > __capacity)
+     579              :         {
+     580              :           auto __new_capacity = __n; // Must not allow _M_create to modify __n.
+     581              :           __p = _M_create(__new_capacity, __capacity);
+     582              :           this->_S_copy(__p, _M_data(), length()); // exclude trailing null
+     583              : #if __cpp_lib_is_constant_evaluated
+     584              :           if (std::is_constant_evaluated())
+     585              :             traits_type::assign(__p + length(), __n - length(), _CharT());
+     586              : #endif
+     587              :           _M_dispose();
+     588              :           _M_data(__p);
+     589              :           _M_capacity(__new_capacity);
+     590              :         }
+     591              :       else
+     592              :         __p = _M_data();
+     593              :       struct _Terminator {
+     594              :         constexpr ~_Terminator() { _M_this->_M_set_length(_M_r); }
+     595              :         basic_string* _M_this;
+     596              :         size_type _M_r;
+     597              :       };
+     598              :       _Terminator __term{this};
+     599              :       auto __r = std::move(__op)(auto(__p), auto(__n));
+     600              :       static_assert(ranges::__detail::__is_integer_like<decltype(__r)>);
+     601              :       _GLIBCXX_DEBUG_ASSERT(__r >= 0 && __r <= __n);
+     602              :       __term._M_r = size_type(__r);
+     603              :       if (__term._M_r > __n)
+     604              :         __builtin_unreachable();
+     605              :     }
+     606              : #endif // C++23
+     607              : 
+     608              : #endif  // _GLIBCXX_USE_CXX11_ABI
+     609              :    
+     610              : #if __cpp_lib_constexpr_string >= 201907L
+     611              : # define _GLIBCXX_STRING_CONSTEXPR constexpr
+     612              : #else
+     613              : # define _GLIBCXX_STRING_CONSTEXPR
+     614              : #endif
+     615              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     616              :     _GLIBCXX_STRING_CONSTEXPR
+     617              :     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+     618              :     basic_string<_CharT, _Traits, _Alloc>::
+     619              :     find(const _CharT* __s, size_type __pos, size_type __n) const
+     620              :     _GLIBCXX_NOEXCEPT
+     621              :     {
+     622              :       __glibcxx_requires_string_len(__s, __n);
+     623              :       const size_type __size = this->size();
+     624              : 
+     625              :       if (__n == 0)
+     626              :         return __pos <= __size ? __pos : npos;
+     627              :       if (__pos >= __size)
+     628              :         return npos;
+     629              : 
+     630              :       const _CharT __elem0 = __s[0];
+     631              :       const _CharT* const __data = data();
+     632              :       const _CharT* __first = __data + __pos;
+     633              :       const _CharT* const __last = __data + __size;
+     634              :       size_type __len = __size - __pos;
+     635              : 
+     636              :       while (__len >= __n)
+     637              :         {
+     638              :           // Find the first occurrence of __elem0:
+     639              :           __first = traits_type::find(__first, __len - __n + 1, __elem0);
+     640              :           if (!__first)
+     641              :             return npos;
+     642              :           // Compare the full strings from the first occurrence of __elem0.
+     643              :           // We already know that __first[0] == __s[0] but compare them again
+     644              :           // anyway because __s is probably aligned, which helps memcmp.
+     645              :           if (traits_type::compare(__first, __s, __n) == 0)
+     646              :             return __first - __data;
+     647              :           __len = __last - ++__first;
+     648              :         }
+     649              :       return npos;
+     650              :     }
+     651              : 
+     652              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     653              :     _GLIBCXX_STRING_CONSTEXPR
+     654              :     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+     655              :     basic_string<_CharT, _Traits, _Alloc>::
+     656              :     find(_CharT __c, size_type __pos) const _GLIBCXX_NOEXCEPT
+     657              :     {
+     658              :       size_type __ret = npos;
+     659              :       const size_type __size = this->size();
+     660              :       if (__pos < __size)
+     661              :         {
+     662              :           const _CharT* __data = _M_data();
+     663              :           const size_type __n = __size - __pos;
+     664              :           const _CharT* __p = traits_type::find(__data + __pos, __n, __c);
+     665              :           if (__p)
+     666              :             __ret = __p - __data;
+     667              :         }
+     668              :       return __ret;
+     669              :     }
+     670              : 
+     671              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     672              :     _GLIBCXX_STRING_CONSTEXPR
+     673              :     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+     674              :     basic_string<_CharT, _Traits, _Alloc>::
+     675              :     rfind(const _CharT* __s, size_type __pos, size_type __n) const
+     676              :     _GLIBCXX_NOEXCEPT
+     677              :     {
+     678              :       __glibcxx_requires_string_len(__s, __n);
+     679              :       const size_type __size = this->size();
+     680              :       if (__n <= __size)
+     681              :         {
+     682              :           __pos = std::min(size_type(__size - __n), __pos);
+     683              :           const _CharT* __data = _M_data();
+     684              :           do
+     685              :             {
+     686              :               if (traits_type::compare(__data + __pos, __s, __n) == 0)
+     687              :                 return __pos;
+     688              :             }
+     689              :           while (__pos-- > 0);
+     690              :         }
+     691              :       return npos;
+     692              :     }
+     693              : 
+     694              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     695              :     _GLIBCXX_STRING_CONSTEXPR
+     696              :     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+     697              :     basic_string<_CharT, _Traits, _Alloc>::
+     698              :     rfind(_CharT __c, size_type __pos) const _GLIBCXX_NOEXCEPT
+     699              :     {
+     700              :       size_type __size = this->size();
+     701              :       if (__size)
+     702              :         {
+     703              :           if (--__size > __pos)
+     704              :             __size = __pos;
+     705              :           for (++__size; __size-- > 0; )
+     706              :             if (traits_type::eq(_M_data()[__size], __c))
+     707              :               return __size;
+     708              :         }
+     709              :       return npos;
+     710              :     }
+     711              : 
+     712              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     713              :     _GLIBCXX_STRING_CONSTEXPR
+     714              :     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+     715              :     basic_string<_CharT, _Traits, _Alloc>::
+     716              :     find_first_of(const _CharT* __s, size_type __pos, size_type __n) const
+     717              :     _GLIBCXX_NOEXCEPT
+     718              :     {
+     719              :       __glibcxx_requires_string_len(__s, __n);
+     720              :       for (; __n && __pos < this->size(); ++__pos)
+     721              :         {
+     722              :           const _CharT* __p = traits_type::find(__s, __n, _M_data()[__pos]);
+     723              :           if (__p)
+     724              :             return __pos;
+     725              :         }
+     726              :       return npos;
+     727              :     }
+     728              : 
+     729              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     730              :     _GLIBCXX_STRING_CONSTEXPR
+     731              :     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+     732              :     basic_string<_CharT, _Traits, _Alloc>::
+     733              :     find_last_of(const _CharT* __s, size_type __pos, size_type __n) const
+     734              :     _GLIBCXX_NOEXCEPT
+     735              :     {
+     736              :       __glibcxx_requires_string_len(__s, __n);
+     737              :       size_type __size = this->size();
+     738              :       if (__size && __n)
+     739              :         {
+     740              :           if (--__size > __pos)
+     741              :             __size = __pos;
+     742              :           do
+     743              :             {
+     744              :               if (traits_type::find(__s, __n, _M_data()[__size]))
+     745              :                 return __size;
+     746              :             }
+     747              :           while (__size-- != 0);
+     748              :         }
+     749              :       return npos;
+     750              :     }
+     751              : 
+     752              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     753              :     _GLIBCXX_STRING_CONSTEXPR
+     754              :     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+     755              :     basic_string<_CharT, _Traits, _Alloc>::
+     756              :     find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const
+     757              :     _GLIBCXX_NOEXCEPT
+     758              :     {
+     759              :       __glibcxx_requires_string_len(__s, __n);
+     760              :       for (; __pos < this->size(); ++__pos)
+     761              :         if (!traits_type::find(__s, __n, _M_data()[__pos]))
+     762              :           return __pos;
+     763              :       return npos;
+     764              :     }
+     765              : 
+     766              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     767              :     _GLIBCXX_STRING_CONSTEXPR
+     768              :     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+     769              :     basic_string<_CharT, _Traits, _Alloc>::
+     770              :     find_first_not_of(_CharT __c, size_type __pos) const _GLIBCXX_NOEXCEPT
+     771              :     {
+     772              :       for (; __pos < this->size(); ++__pos)
+     773              :         if (!traits_type::eq(_M_data()[__pos], __c))
+     774              :           return __pos;
+     775              :       return npos;
+     776              :     }
+     777              : 
+     778              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     779              :     _GLIBCXX_STRING_CONSTEXPR
+     780              :     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+     781              :     basic_string<_CharT, _Traits, _Alloc>::
+     782              :     find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const
+     783              :     _GLIBCXX_NOEXCEPT
+     784              :     {
+     785              :       __glibcxx_requires_string_len(__s, __n);
+     786              :       size_type __size = this->size();
+     787              :       if (__size)
+     788              :         {
+     789              :           if (--__size > __pos)
+     790              :             __size = __pos;
+     791              :           do
+     792              :             {
+     793              :               if (!traits_type::find(__s, __n, _M_data()[__size]))
+     794              :                 return __size;
+     795              :             }
+     796              :           while (__size--);
+     797              :         }
+     798              :       return npos;
+     799              :     }
+     800              : 
+     801              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     802              :     _GLIBCXX_STRING_CONSTEXPR
+     803              :     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+     804              :     basic_string<_CharT, _Traits, _Alloc>::
+     805              :     find_last_not_of(_CharT __c, size_type __pos) const _GLIBCXX_NOEXCEPT
+     806              :     {
+     807              :       size_type __size = this->size();
+     808              :       if (__size)
+     809              :         {
+     810              :           if (--__size > __pos)
+     811              :             __size = __pos;
+     812              :           do
+     813              :             {
+     814              :               if (!traits_type::eq(_M_data()[__size], __c))
+     815              :                 return __size;
+     816              :             }
+     817              :           while (__size--);
+     818              :         }
+     819              :       return npos;
+     820              :     }
+     821              : 
+     822              : #undef _GLIBCXX_STRING_CONSTEXPR
+     823              : 
+     824              :   // 21.3.7.9 basic_string::getline and operators
+     825              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     826              :     basic_istream<_CharT, _Traits>&
+     827              :     operator>>(basic_istream<_CharT, _Traits>& __in,
+     828              :                basic_string<_CharT, _Traits, _Alloc>& __str)
+     829              :     {
+     830              :       typedef basic_istream<_CharT, _Traits>              __istream_type;
+     831              :       typedef basic_string<_CharT, _Traits, _Alloc>       __string_type;
+     832              :       typedef typename __istream_type::ios_base         __ios_base;
+     833              :       typedef typename __istream_type::int_type         __int_type;
+     834              :       typedef typename __string_type::size_type         __size_type;
+     835              :       typedef ctype<_CharT>                               __ctype_type;
+     836              :       typedef typename __ctype_type::ctype_base         __ctype_base;
+     837              : 
+     838              :       __size_type __extracted = 0;
+     839              :       typename __ios_base::iostate __err = __ios_base::goodbit;
+     840              :       typename __istream_type::sentry __cerb(__in, false);
+     841              :       if (__cerb)
+     842              :         {
+     843              :           __try
+     844              :             {
+     845              :               // Avoid reallocation for common case.
+     846              :               __str.erase();
+     847              :               _CharT __buf[128];
+     848              :               __size_type __len = 0;          
+     849              :               const streamsize __w = __in.width();
+     850              :               const __size_type __n = __w > 0 ? static_cast<__size_type>(__w)
+     851              :                                               : __str.max_size();
+     852              :               const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
+     853              :               const __int_type __eof = _Traits::eof();
+     854              :               __int_type __c = __in.rdbuf()->sgetc();
+     855              : 
+     856              :               while (__extracted < __n
+     857              :                      && !_Traits::eq_int_type(__c, __eof)
+     858              :                      && !__ct.is(__ctype_base::space,
+     859              :                                  _Traits::to_char_type(__c)))
+     860              :                 {
+     861              :                   if (__len == sizeof(__buf) / sizeof(_CharT))
+     862              :                     {
+     863              :                       __str.append(__buf, sizeof(__buf) / sizeof(_CharT));
+     864              :                       __len = 0;
+     865              :                     }
+     866              :                   __buf[__len++] = _Traits::to_char_type(__c);
+     867              :                   ++__extracted;
+     868              :                   __c = __in.rdbuf()->snextc();
+     869              :                 }
+     870              :               __str.append(__buf, __len);
+     871              : 
+     872              :               if (__extracted < __n && _Traits::eq_int_type(__c, __eof))
+     873              :                 __err |= __ios_base::eofbit;
+     874              :               __in.width(0);
+     875              :             }
+     876              :           __catch(__cxxabiv1::__forced_unwind&)
+     877              :             {
+     878              :               __in._M_setstate(__ios_base::badbit);
+     879              :               __throw_exception_again;
+     880              :             }
+     881              :           __catch(...)
+     882              :             {
+     883              :               // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     884              :               // 91. Description of operator>> and getline() for string<>
+     885              :               // might cause endless loop
+     886              :               __in._M_setstate(__ios_base::badbit);
+     887              :             }
+     888              :         }
+     889              :       // 211.  operator>>(istream&, string&) doesn't set failbit
+     890              :       if (!__extracted)
+     891              :         __err |= __ios_base::failbit;
+     892              :       if (__err)
+     893              :         __in.setstate(__err);
+     894              :       return __in;
+     895              :     }
+     896              : 
+     897              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     898              :     basic_istream<_CharT, _Traits>&
+     899              :     getline(basic_istream<_CharT, _Traits>& __in,
+     900              :             basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim)
+     901              :     {
+     902              :       typedef basic_istream<_CharT, _Traits>              __istream_type;
+     903              :       typedef basic_string<_CharT, _Traits, _Alloc>       __string_type;
+     904              :       typedef typename __istream_type::ios_base         __ios_base;
+     905              :       typedef typename __istream_type::int_type         __int_type;
+     906              :       typedef typename __string_type::size_type         __size_type;
+     907              : 
+     908              :       __size_type __extracted = 0;
+     909              :       const __size_type __n = __str.max_size();
+     910              :       typename __ios_base::iostate __err = __ios_base::goodbit;
+     911              :       typename __istream_type::sentry __cerb(__in, true);
+     912              :       if (__cerb)
+     913              :         {
+     914              :           __try
+     915              :             {
+     916              :               __str.erase();
+     917              :               const __int_type __idelim = _Traits::to_int_type(__delim);
+     918              :               const __int_type __eof = _Traits::eof();
+     919              :               __int_type __c = __in.rdbuf()->sgetc();
+     920              : 
+     921              :               while (__extracted < __n
+     922              :                      && !_Traits::eq_int_type(__c, __eof)
+     923              :                      && !_Traits::eq_int_type(__c, __idelim))
+     924              :                 {
+     925              :                   __str += _Traits::to_char_type(__c);
+     926              :                   ++__extracted;
+     927              :                   __c = __in.rdbuf()->snextc();
+     928              :                 }
+     929              : 
+     930              :               if (_Traits::eq_int_type(__c, __eof))
+     931              :                 __err |= __ios_base::eofbit;
+     932              :               else if (_Traits::eq_int_type(__c, __idelim))
+     933              :                 {
+     934              :                   ++__extracted;                  
+     935              :                   __in.rdbuf()->sbumpc();
+     936              :                 }
+     937              :               else
+     938              :                 __err |= __ios_base::failbit;
+     939              :             }
+     940              :           __catch(__cxxabiv1::__forced_unwind&)
+     941              :             {
+     942              :               __in._M_setstate(__ios_base::badbit);
+     943              :               __throw_exception_again;
+     944              :             }
+     945              :           __catch(...)
+     946              :             {
+     947              :               // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     948              :               // 91. Description of operator>> and getline() for string<>
+     949              :               // might cause endless loop
+     950              :               __in._M_setstate(__ios_base::badbit);
+     951              :             }
+     952              :         }
+     953              :       if (!__extracted)
+     954              :         __err |= __ios_base::failbit;
+     955              :       if (__err)
+     956              :         __in.setstate(__err);
+     957              :       return __in;
+     958              :     }
+     959              : 
+     960              :   // Inhibit implicit instantiations for required instantiations,
+     961              :   // which are defined via explicit instantiations elsewhere.
+     962              : #if _GLIBCXX_EXTERN_TEMPLATE
+     963              :   // The explicit instantiation definitions in src/c++11/string-inst.cc and
+     964              :   // src/c++17/string-inst.cc only instantiate the members required for C++17
+     965              :   // and earlier standards (so not C++20's starts_with and ends_with).
+     966              :   // Suppress the explicit instantiation declarations for C++20, so C++20
+     967              :   // code will implicitly instantiate std::string and std::wstring as needed.
+     968              : # if __cplusplus <= 201703L && _GLIBCXX_EXTERN_TEMPLATE > 0
+     969              :   extern template class basic_string<char>;
+     970              : # elif ! _GLIBCXX_USE_CXX11_ABI
+     971              :   // Still need to prevent implicit instantiation of the COW empty rep,
+     972              :   // to ensure the definition in libstdc++.so is unique (PR 86138).
+     973              :   extern template basic_string<char>::size_type
+     974              :     basic_string<char>::_Rep::_S_empty_rep_storage[];
+     975              : # elif _GLIBCXX_EXTERN_TEMPLATE > 0
+     976              :   // Export _M_replace_cold even for C++20.
+     977              :   extern template void
+     978              :     basic_string<char>::_M_replace_cold(char *, size_type, const char*,
+     979              :                                         const size_type, const size_type);
+     980              : # endif
+     981              : 
+     982              :   extern template
+     983              :     basic_istream<char>&
+     984              :     operator>>(basic_istream<char>&, string&);
+     985              :   extern template
+     986              :     basic_ostream<char>&
+     987              :     operator<<(basic_ostream<char>&, const string&);
+     988              :   extern template
+     989              :     basic_istream<char>&
+     990              :     getline(basic_istream<char>&, string&, char);
+     991              :   extern template
+     992              :     basic_istream<char>&
+     993              :     getline(basic_istream<char>&, string&);
+     994              : 
+     995              : #ifdef _GLIBCXX_USE_WCHAR_T
+     996              : # if __cplusplus <= 201703L && _GLIBCXX_EXTERN_TEMPLATE > 0
+     997              :   extern template class basic_string<wchar_t>;
+     998              : # elif ! _GLIBCXX_USE_CXX11_ABI
+     999              :   extern template basic_string<wchar_t>::size_type
+    1000              :     basic_string<wchar_t>::_Rep::_S_empty_rep_storage[];
+    1001              : # elif _GLIBCXX_EXTERN_TEMPLATE > 0
+    1002              :   // Export _M_replace_cold even for C++20.
+    1003              :   extern template void
+    1004              :     basic_string<wchar_t>::_M_replace_cold(wchar_t*, size_type, const wchar_t*,
+    1005              :                                            const size_type, const size_type);
+    1006              : # endif
+    1007              : 
+    1008              :   extern template
+    1009              :     basic_istream<wchar_t>&
+    1010              :     operator>>(basic_istream<wchar_t>&, wstring&);
+    1011              :   extern template
+    1012              :     basic_ostream<wchar_t>&
+    1013              :     operator<<(basic_ostream<wchar_t>&, const wstring&);
+    1014              :   extern template
+    1015              :     basic_istream<wchar_t>&
+    1016              :     getline(basic_istream<wchar_t>&, wstring&, wchar_t);
+    1017              :   extern template
+    1018              :     basic_istream<wchar_t>&
+    1019              :     getline(basic_istream<wchar_t>&, wstring&);
+    1020              : #endif // _GLIBCXX_USE_WCHAR_T
+    1021              : #endif // _GLIBCXX_EXTERN_TEMPLATE
+    1022              : 
+    1023              : _GLIBCXX_END_NAMESPACE_VERSION
+    1024              : } // namespace std
+    1025              : 
+    1026              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/char_traits.h.func-c.html b/html/usr/include/c++/13/bits/char_traits.h.func-c.html new file mode 100644 index 0000000..00878b9 --- /dev/null +++ b/html/usr/include/c++/13/bits/char_traits.h.func-c.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/char_traits.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - char_traits.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:23.8 %4210
Test Date:2024-04-30 13:17:26Functions:33.3 %93
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN9__gnu_cxx11char_traitsIcE2eqERKcS3_0
_ZN9__gnu_cxx11char_traitsIcE4findEPKcmRS2_0
_ZN9__gnu_cxx11char_traitsIcE6lengthEPKc0
_ZNSt11char_traitsIcE2ltERKcS2_0
_ZNSt11char_traitsIcE4copyEPcPKcm0
_ZNSt11char_traitsIcE4findEPKcmRS1_0
_ZNSt11char_traitsIcE12to_char_typeERKi40
_ZNSt11char_traitsIcE6lengthEPKc2271938
_ZNSt11char_traitsIcE7compareEPKcS2_m355119538
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/char_traits.h.func.html b/html/usr/include/c++/13/bits/char_traits.h.func.html new file mode 100644 index 0000000..f43a904 --- /dev/null +++ b/html/usr/include/c++/13/bits/char_traits.h.func.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/char_traits.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - char_traits.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:23.8 %4210
Test Date:2024-04-30 13:17:26Functions:33.3 %93
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN9__gnu_cxx11char_traitsIcE2eqERKcS3_0
_ZN9__gnu_cxx11char_traitsIcE4findEPKcmRS2_0
_ZN9__gnu_cxx11char_traitsIcE6lengthEPKc0
_ZNSt11char_traitsIcE12to_char_typeERKi40
_ZNSt11char_traitsIcE2ltERKcS2_0
_ZNSt11char_traitsIcE4copyEPcPKcm0
_ZNSt11char_traitsIcE4findEPKcmRS1_0
_ZNSt11char_traitsIcE6lengthEPKc2271938
_ZNSt11char_traitsIcE7compareEPKcS2_m355119538
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/char_traits.h.gcov.html b/html/usr/include/c++/13/bits/char_traits.h.gcov.html new file mode 100644 index 0000000..8865ee6 --- /dev/null +++ b/html/usr/include/c++/13/bits/char_traits.h.gcov.html @@ -0,0 +1,1105 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/char_traits.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - char_traits.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:23.8 %4210
Test Date:2024-04-30 13:17:26Functions:33.3 %93
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Character Traits for use by standard string and iostream -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 1997-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/char_traits.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{string}
+      28              :  */
+      29              : 
+      30              : //
+      31              : // ISO C++ 14882: 21  Strings library
+      32              : //
+      33              : 
+      34              : #ifndef _CHAR_TRAITS_H
+      35              : #define _CHAR_TRAITS_H 1
+      36              : 
+      37              : #pragma GCC system_header
+      38              : 
+      39              : #include <bits/c++config.h>
+      40              : 
+      41              : #if _GLIBCXX_HOSTED
+      42              : # include <bits/postypes.h>     // For streampos
+      43              : #endif // HOSTED
+      44              : 
+      45              : #ifdef _GLIBCXX_USE_WCHAR_T
+      46              : # include <cwchar>              // For WEOF, wmemmove, wmemset, etc.
+      47              : #endif // USE_WCHAR_T
+      48              : 
+      49              : #if __cplusplus >= 201103L
+      50              : # include <type_traits>
+      51              : #if !defined __UINT_LEAST16_TYPE__ || !defined __UINT_LEAST32_TYPE__
+      52              : # include <cstdint>
+      53              : #endif
+      54              : #endif
+      55              : #if __cplusplus >= 202002L
+      56              : # include <compare>
+      57              : # include <bits/stl_construct.h>
+      58              : #endif
+      59              : 
+      60              : #ifndef _GLIBCXX_ALWAYS_INLINE
+      61              : # define _GLIBCXX_ALWAYS_INLINE inline __attribute__((__always_inline__))
+      62              : #endif
+      63              : 
+      64              : namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+      65              : {
+      66              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      67              : 
+      68              : #pragma GCC diagnostic push
+      69              : #pragma GCC diagnostic ignored "-Wstringop-overflow"
+      70              : #pragma GCC diagnostic ignored "-Wstringop-overread"
+      71              : #pragma GCC diagnostic ignored "-Warray-bounds"
+      72              : 
+      73              :   /**
+      74              :    *  @brief  Mapping from character type to associated types.
+      75              :    *
+      76              :    *  @note This is an implementation class for the generic version
+      77              :    *  of char_traits.  It defines int_type, off_type, pos_type, and
+      78              :    *  state_type.  By default these are unsigned long, streamoff,
+      79              :    *  streampos, and mbstate_t.  Users who need a different set of
+      80              :    *  types, but who don't need to change the definitions of any function
+      81              :    *  defined in char_traits, can specialize __gnu_cxx::_Char_types
+      82              :    *  while leaving __gnu_cxx::char_traits alone. */
+      83              :   template<typename _CharT>
+      84              :     struct _Char_types
+      85              :     {
+      86              :       typedef unsigned long   int_type;
+      87              : #if _GLIBCXX_HOSTED
+      88              :       typedef std::streampos  pos_type;
+      89              :       typedef std::streamoff  off_type;
+      90              :       typedef std::mbstate_t  state_type;
+      91              : #endif // HOSTED
+      92              :     };
+      93              : 
+      94              : 
+      95              :   /**
+      96              :    *  @brief  Base class used to implement std::char_traits.
+      97              :    *
+      98              :    *  @note For any given actual character type, this definition is
+      99              :    *  probably wrong.  (Most of the member functions are likely to be
+     100              :    *  right, but the int_type and state_type typedefs, and the eof()
+     101              :    *  member function, are likely to be wrong.)  The reason this class
+     102              :    *  exists is so users can specialize it.  Classes in namespace std
+     103              :    *  may not be specialized for fundamental types, but classes in
+     104              :    *  namespace __gnu_cxx may be.
+     105              :    *
+     106              :    *  See https://gcc.gnu.org/onlinedocs/libstdc++/manual/strings.html#strings.string.character_types
+     107              :    *  for advice on how to make use of this class for @a unusual character
+     108              :    *  types. Also, check out include/ext/pod_char_traits.h.  
+     109              :    */
+     110              :   template<typename _CharT>
+     111              :     struct char_traits
+     112              :     {
+     113              :       typedef _CharT                                    char_type;
+     114              :       typedef typename _Char_types<_CharT>::int_type    int_type;
+     115              : #if _GLIBCXX_HOSTED
+     116              :       typedef typename _Char_types<_CharT>::pos_type    pos_type;
+     117              :       typedef typename _Char_types<_CharT>::off_type    off_type;
+     118              :       typedef typename _Char_types<_CharT>::state_type  state_type;
+     119              : #endif // HOSTED
+     120              : #if __cpp_lib_three_way_comparison
+     121              :       using comparison_category = std::strong_ordering;
+     122              : #endif
+     123              : 
+     124              :       static _GLIBCXX14_CONSTEXPR void
+     125              :       assign(char_type& __c1, const char_type& __c2)
+     126              :       {
+     127              : #if __cpp_constexpr_dynamic_alloc
+     128              :         if (std::__is_constant_evaluated())
+     129              :           std::construct_at(__builtin_addressof(__c1), __c2);
+     130              :         else
+     131              : #endif
+     132              :         __c1 = __c2;
+     133              :       }
+     134              : 
+     135              :       static _GLIBCXX_CONSTEXPR bool
+     136            0 :       eq(const char_type& __c1, const char_type& __c2)
+     137            0 :       { return __c1 == __c2; }
+     138              : 
+     139              :       static _GLIBCXX_CONSTEXPR bool
+     140              :       lt(const char_type& __c1, const char_type& __c2)
+     141              :       { return __c1 < __c2; }
+     142              : 
+     143              :       static _GLIBCXX14_CONSTEXPR int
+     144              :       compare(const char_type* __s1, const char_type* __s2, std::size_t __n);
+     145              : 
+     146              :       static _GLIBCXX14_CONSTEXPR std::size_t
+     147              :       length(const char_type* __s);
+     148              : 
+     149              :       static _GLIBCXX14_CONSTEXPR const char_type*
+     150              :       find(const char_type* __s, std::size_t __n, const char_type& __a);
+     151              : 
+     152              :       static _GLIBCXX20_CONSTEXPR char_type*
+     153              :       move(char_type* __s1, const char_type* __s2, std::size_t __n);
+     154              : 
+     155              :       static _GLIBCXX20_CONSTEXPR char_type*
+     156              :       copy(char_type* __s1, const char_type* __s2, std::size_t __n);
+     157              : 
+     158              :       static _GLIBCXX20_CONSTEXPR char_type*
+     159              :       assign(char_type* __s, std::size_t __n, char_type __a);
+     160              : 
+     161              :       static _GLIBCXX_CONSTEXPR char_type
+     162              :       to_char_type(const int_type& __c)
+     163              :       { return static_cast<char_type>(__c); }
+     164              : 
+     165              :       static _GLIBCXX_CONSTEXPR int_type
+     166              :       to_int_type(const char_type& __c)
+     167              :       { return static_cast<int_type>(__c); }
+     168              : 
+     169              :       static _GLIBCXX_CONSTEXPR bool
+     170              :       eq_int_type(const int_type& __c1, const int_type& __c2)
+     171              :       { return __c1 == __c2; }
+     172              : 
+     173              : #ifdef _GLIBCXX_STDIO_EOF
+     174              :       static _GLIBCXX_CONSTEXPR int_type
+     175              :       eof()
+     176              :       { return static_cast<int_type>(_GLIBCXX_STDIO_EOF); }
+     177              : 
+     178              :       static _GLIBCXX_CONSTEXPR int_type
+     179              :       not_eof(const int_type& __c)
+     180              :       { return !eq_int_type(__c, eof()) ? __c : to_int_type(char_type()); }
+     181              : #endif // defined(_GLIBCXX_STDIO_EOF)
+     182              :     };
+     183              : 
+     184              :   template<typename _CharT>
+     185              :     _GLIBCXX14_CONSTEXPR int
+     186              :     char_traits<_CharT>::
+     187              :     compare(const char_type* __s1, const char_type* __s2, std::size_t __n)
+     188              :     {
+     189              :       for (std::size_t __i = 0; __i < __n; ++__i)
+     190              :         if (lt(__s1[__i], __s2[__i]))
+     191              :           return -1;
+     192              :         else if (lt(__s2[__i], __s1[__i]))
+     193              :           return 1;
+     194              :       return 0;
+     195              :     }
+     196              : 
+     197              :   template<typename _CharT>
+     198              :     _GLIBCXX14_CONSTEXPR std::size_t
+     199            0 :     char_traits<_CharT>::
+     200              :     length(const char_type* __p)
+     201              :     {
+     202            0 :       std::size_t __i = 0;
+     203            0 :       while (!eq(__p[__i], char_type()))
+     204            0 :         ++__i;
+     205            0 :       return __i;
+     206              :     }
+     207              : 
+     208              :   template<typename _CharT>
+     209              :     _GLIBCXX14_CONSTEXPR const typename char_traits<_CharT>::char_type*
+     210            0 :     char_traits<_CharT>::
+     211              :     find(const char_type* __s, std::size_t __n, const char_type& __a)
+     212              :     {
+     213            0 :       for (std::size_t __i = 0; __i < __n; ++__i)
+     214            0 :         if (eq(__s[__i], __a))
+     215            0 :           return __s + __i;
+     216            0 :       return 0;
+     217              :     }
+     218              : 
+     219              :   template<typename _CharT>
+     220              :     _GLIBCXX20_CONSTEXPR
+     221              :     typename char_traits<_CharT>::char_type*
+     222              :     char_traits<_CharT>::
+     223              :     move(char_type* __s1, const char_type* __s2, std::size_t __n)
+     224              :     {
+     225              :       if (__n == 0)
+     226              :         return __s1;
+     227              : #if __cplusplus >= 202002L
+     228              :       if (std::__is_constant_evaluated())
+     229              :         {
+     230              :           // Use __builtin_constant_p to avoid comparing unrelated pointers.
+     231              :           if (__builtin_constant_p(__s2 < __s1)
+     232              :                 && __s1 > __s2 && __s1 < (__s2 + __n))
+     233              :             {
+     234              :               do
+     235              :                 {
+     236              :                   --__n;
+     237              :                   assign(__s1[__n], __s2[__n]);
+     238              :                 }
+     239              :               while (__n > 0);
+     240              :             }
+     241              :           else
+     242              :             copy(__s1, __s2, __n);
+     243              :           return __s1;
+     244              :         }
+     245              : #endif
+     246              :       __builtin_memmove(__s1, __s2, __n * sizeof(char_type));
+     247              :       return __s1;
+     248              :     }
+     249              : 
+     250              :   template<typename _CharT>
+     251              :     _GLIBCXX20_CONSTEXPR
+     252              :     typename char_traits<_CharT>::char_type*
+     253              :     char_traits<_CharT>::
+     254              :     copy(char_type* __s1, const char_type* __s2, std::size_t __n)
+     255              :     {
+     256              :       if (__n == 0)
+     257              :         return __s1;
+     258              : #if __cplusplus >= 202002L
+     259              :       if (std::__is_constant_evaluated())
+     260              :         {
+     261              :           for (std::size_t __i = 0; __i < __n; ++__i)
+     262              :             std::construct_at(__s1 + __i, __s2[__i]);
+     263              :           return __s1;
+     264              :         }
+     265              : #endif
+     266              :       __builtin_memcpy(__s1, __s2, __n * sizeof(char_type));
+     267              :       return __s1;
+     268              :     }
+     269              : 
+     270              :   template<typename _CharT>
+     271              :     _GLIBCXX20_CONSTEXPR
+     272              :     typename char_traits<_CharT>::char_type*
+     273              :     char_traits<_CharT>::
+     274              :     assign(char_type* __s, std::size_t __n, char_type __a)
+     275              :     {
+     276              : #if __cplusplus >= 202002L
+     277              :       if (std::__is_constant_evaluated())
+     278              :         {
+     279              :           for (std::size_t __i = 0; __i < __n; ++__i)
+     280              :             std::construct_at(__s + __i, __a);
+     281              :           return __s;
+     282              :         }
+     283              : #endif
+     284              : 
+     285              :       if _GLIBCXX17_CONSTEXPR (sizeof(_CharT) == 1 && __is_trivial(_CharT))
+     286              :         {
+     287              :           if (__n)
+     288              :             {
+     289              :               unsigned char __c;
+     290              :               __builtin_memcpy(&__c, __builtin_addressof(__a), 1);
+     291              :               __builtin_memset(__s, __c, __n);
+     292              :             }
+     293              :         }
+     294              :       else
+     295              :         {
+     296              :           for (std::size_t __i = 0; __i < __n; ++__i)
+     297              :             __s[__i] = __a;
+     298              :         }
+     299              :       return __s;
+     300              :     }
+     301              : 
+     302              : _GLIBCXX_END_NAMESPACE_VERSION
+     303              : } // namespace
+     304              : 
+     305              : namespace std _GLIBCXX_VISIBILITY(default)
+     306              : {
+     307              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+     308              : 
+     309              : #ifdef __cpp_lib_is_constant_evaluated
+     310              : // Unofficial macro indicating P1032R1 support in C++20
+     311              : # define __cpp_lib_constexpr_char_traits 201811L
+     312              : #elif __cplusplus >= 201703L && _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED
+     313              : // Unofficial macro indicating P0426R1 support in C++17
+     314              : # define __cpp_lib_constexpr_char_traits 201611L
+     315              : #endif
+     316              : 
+     317              :   // 21.1
+     318              :   /**
+     319              :    *  @brief  Basis for explicit traits specializations.
+     320              :    *
+     321              :    *  @note  For any given actual character type, this definition is
+     322              :    *  probably wrong.  Since this is just a thin wrapper around
+     323              :    *  __gnu_cxx::char_traits, it is possible to achieve a more
+     324              :    *  appropriate definition by specializing __gnu_cxx::char_traits.
+     325              :    *
+     326              :    *  See https://gcc.gnu.org/onlinedocs/libstdc++/manual/strings.html#strings.string.character_types
+     327              :    *  for advice on how to make use of this class for @a unusual character
+     328              :    *  types. Also, check out include/ext/pod_char_traits.h.
+     329              :   */
+     330              :   template<typename _CharT>
+     331              :     struct char_traits : public __gnu_cxx::char_traits<_CharT>
+     332              :     { };
+     333              : 
+     334              : 
+     335              :   /// 21.1.3.1  char_traits specializations
+     336              :   template<>
+     337              :     struct char_traits<char>
+     338              :     {
+     339              :       typedef char              char_type;
+     340              :       typedef int               int_type;
+     341              : #if _GLIBCXX_HOSTED
+     342              :       typedef streampos         pos_type;
+     343              :       typedef streamoff         off_type;
+     344              :       typedef mbstate_t         state_type;
+     345              : #endif // HOSTED
+     346              : #if __cpp_lib_three_way_comparison
+     347              :       using comparison_category = strong_ordering;
+     348              : #endif
+     349              : 
+     350              :       static _GLIBCXX17_CONSTEXPR void
+     351              :       assign(char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT
+     352              :       {
+     353              : #if __cpp_constexpr_dynamic_alloc
+     354              :         if (std::__is_constant_evaluated())
+     355              :           std::construct_at(__builtin_addressof(__c1), __c2);
+     356              :         else
+     357              : #endif
+     358              :         __c1 = __c2;
+     359              :       }
+     360              : 
+     361              :       static _GLIBCXX_CONSTEXPR bool
+     362              :       eq(const char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT
+     363              :       { return __c1 == __c2; }
+     364              : 
+     365              :       static _GLIBCXX_CONSTEXPR bool
+     366            0 :       lt(const char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT
+     367              :       {
+     368              :         // LWG 467.
+     369            0 :         return (static_cast<unsigned char>(__c1)
+     370            0 :                 < static_cast<unsigned char>(__c2));
+     371              :       }
+     372              : 
+     373              :       static _GLIBCXX17_CONSTEXPR int
+     374    355119538 :       compare(const char_type* __s1, const char_type* __s2, size_t __n)
+     375              :       {
+     376    355119538 :         if (__n == 0)
+     377            8 :           return 0;
+     378              : #if __cplusplus >= 201703L
+     379    355119530 :         if (std::__is_constant_evaluated())
+     380              :           {
+     381            0 :             for (size_t __i = 0; __i < __n; ++__i)
+     382            0 :               if (lt(__s1[__i], __s2[__i]))
+     383            0 :                 return -1;
+     384            0 :               else if (lt(__s2[__i], __s1[__i]))
+     385            0 :                 return 1;
+     386            0 :             return 0;
+     387              :           }
+     388              : #endif
+     389    355119530 :         return __builtin_memcmp(__s1, __s2, __n);
+     390              :       }
+     391              : 
+     392              :       static _GLIBCXX17_CONSTEXPR size_t
+     393      2271938 :       length(const char_type* __s)
+     394              :       {
+     395              : #if __cplusplus >= 201703L
+     396      2271938 :         if (std::__is_constant_evaluated())
+     397            0 :           return __gnu_cxx::char_traits<char_type>::length(__s);
+     398              : #endif
+     399      2271938 :         return __builtin_strlen(__s);
+     400              :       }
+     401              : 
+     402              :       static _GLIBCXX17_CONSTEXPR const char_type*
+     403            0 :       find(const char_type* __s, size_t __n, const char_type& __a)
+     404              :       {
+     405            0 :         if (__n == 0)
+     406            0 :           return 0;
+     407              : #if __cplusplus >= 201703L
+     408            0 :         if (std::__is_constant_evaluated())
+     409            0 :           return __gnu_cxx::char_traits<char_type>::find(__s, __n, __a);
+     410              : #endif
+     411            0 :         return static_cast<const char_type*>(__builtin_memchr(__s, __a, __n));
+     412              :       }
+     413              : 
+     414              :       static _GLIBCXX20_CONSTEXPR char_type*
+     415              :       move(char_type* __s1, const char_type* __s2, size_t __n)
+     416              :       {
+     417              :         if (__n == 0)
+     418              :           return __s1;
+     419              : #if __cplusplus >= 202002L
+     420              :         if (std::__is_constant_evaluated())
+     421              :           return __gnu_cxx::char_traits<char_type>::move(__s1, __s2, __n);
+     422              : #endif
+     423              :         return static_cast<char_type*>(__builtin_memmove(__s1, __s2, __n));
+     424              :       }
+     425              : 
+     426              :       static _GLIBCXX20_CONSTEXPR char_type*
+     427            0 :       copy(char_type* __s1, const char_type* __s2, size_t __n)
+     428              :       {
+     429            0 :         if (__n == 0)
+     430            0 :           return __s1;
+     431              : #if __cplusplus >= 202002L
+     432              :         if (std::__is_constant_evaluated())
+     433              :           return __gnu_cxx::char_traits<char_type>::copy(__s1, __s2, __n);
+     434              : #endif
+     435            0 :         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
+     436              :       }
+     437              : 
+     438              :       static _GLIBCXX20_CONSTEXPR char_type*
+     439              :       assign(char_type* __s, size_t __n, char_type __a)
+     440              :       {
+     441              :         if (__n == 0)
+     442              :           return __s;
+     443              : #if __cplusplus >= 202002L
+     444              :         if (std::__is_constant_evaluated())
+     445              :           return __gnu_cxx::char_traits<char_type>::assign(__s, __n, __a);
+     446              : #endif
+     447              :         return static_cast<char_type*>(__builtin_memset(__s, __a, __n));
+     448              :       }
+     449              : 
+     450              :       static _GLIBCXX_CONSTEXPR char_type
+     451           40 :       to_char_type(const int_type& __c) _GLIBCXX_NOEXCEPT
+     452           40 :       { return static_cast<char_type>(__c); }
+     453              : 
+     454              :       // To keep both the byte 0xff and the eof symbol 0xffffffff
+     455              :       // from ending up as 0xffffffff.
+     456              :       static _GLIBCXX_CONSTEXPR int_type
+     457              :       to_int_type(const char_type& __c) _GLIBCXX_NOEXCEPT
+     458              :       { return static_cast<int_type>(static_cast<unsigned char>(__c)); }
+     459              : 
+     460              :       static _GLIBCXX_CONSTEXPR bool
+     461              :       eq_int_type(const int_type& __c1, const int_type& __c2) _GLIBCXX_NOEXCEPT
+     462              :       { return __c1 == __c2; }
+     463              : 
+     464              : #ifdef _GLIBCXX_STDIO_EOF
+     465              :       static _GLIBCXX_CONSTEXPR int_type
+     466              :       eof() _GLIBCXX_NOEXCEPT
+     467              :       { return static_cast<int_type>(_GLIBCXX_STDIO_EOF); }
+     468              : 
+     469              :       static _GLIBCXX_CONSTEXPR int_type
+     470              :       not_eof(const int_type& __c) _GLIBCXX_NOEXCEPT
+     471              :       { return (__c == eof()) ? 0 : __c; }
+     472              : #endif // defined(_GLIBCXX_STDIO_EOF)
+     473              :   };
+     474              : 
+     475              : 
+     476              : #ifdef _GLIBCXX_USE_WCHAR_T
+     477              :   /// 21.1.3.2  char_traits specializations
+     478              :   template<>
+     479              :     struct char_traits<wchar_t>
+     480              :     {
+     481              :       typedef wchar_t           char_type;
+     482              :       typedef wint_t            int_type;
+     483              : #if _GLIBCXX_HOSTED
+     484              :       typedef streamoff         off_type;
+     485              :       typedef wstreampos        pos_type;
+     486              :       typedef mbstate_t         state_type;
+     487              : #endif // HOSTED
+     488              : #if __cpp_lib_three_way_comparison
+     489              :       using comparison_category = strong_ordering;
+     490              : #endif
+     491              : 
+     492              :       static _GLIBCXX17_CONSTEXPR void
+     493              :       assign(char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT
+     494              :       {
+     495              : #if __cpp_constexpr_dynamic_alloc
+     496              :         if (std::__is_constant_evaluated())
+     497              :           std::construct_at(__builtin_addressof(__c1), __c2);
+     498              :         else
+     499              : #endif
+     500              :         __c1 = __c2;
+     501              :       }
+     502              : 
+     503              :       static _GLIBCXX_CONSTEXPR bool
+     504              :       eq(const char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT
+     505              :       { return __c1 == __c2; }
+     506              : 
+     507              :       static _GLIBCXX_CONSTEXPR bool
+     508              :       lt(const char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT
+     509              :       { return __c1 < __c2; }
+     510              : 
+     511              :       static _GLIBCXX17_CONSTEXPR int
+     512              :       compare(const char_type* __s1, const char_type* __s2, size_t __n)
+     513              :       {
+     514              :         if (__n == 0)
+     515              :           return 0;
+     516              : #if __cplusplus >= 201703L
+     517              :         if (std::__is_constant_evaluated())
+     518              :           return __gnu_cxx::char_traits<char_type>::compare(__s1, __s2, __n);
+     519              : #endif
+     520              :         return wmemcmp(__s1, __s2, __n);
+     521              :       }
+     522              : 
+     523              :       static _GLIBCXX17_CONSTEXPR size_t
+     524              :       length(const char_type* __s)
+     525              :       {
+     526              : #if __cplusplus >= 201703L
+     527              :         if (std::__is_constant_evaluated())
+     528              :           return __gnu_cxx::char_traits<char_type>::length(__s);
+     529              : #endif
+     530              :         return wcslen(__s);
+     531              :       }
+     532              : 
+     533              :       static _GLIBCXX17_CONSTEXPR const char_type*
+     534              :       find(const char_type* __s, size_t __n, const char_type& __a)
+     535              :       {
+     536              :         if (__n == 0)
+     537              :           return 0;
+     538              : #if __cplusplus >= 201703L
+     539              :         if (std::__is_constant_evaluated())
+     540              :           return __gnu_cxx::char_traits<char_type>::find(__s, __n, __a);
+     541              : #endif
+     542              :         return wmemchr(__s, __a, __n);
+     543              :       }
+     544              : 
+     545              :       static _GLIBCXX20_CONSTEXPR char_type*
+     546              :       move(char_type* __s1, const char_type* __s2, size_t __n)
+     547              :       {
+     548              :         if (__n == 0)
+     549              :           return __s1;
+     550              : #if __cplusplus >= 202002L
+     551              :         if (std::__is_constant_evaluated())
+     552              :           return __gnu_cxx::char_traits<char_type>::move(__s1, __s2, __n);
+     553              : #endif
+     554              :         return wmemmove(__s1, __s2, __n);
+     555              :       }
+     556              : 
+     557              :       static _GLIBCXX20_CONSTEXPR char_type*
+     558              :       copy(char_type* __s1, const char_type* __s2, size_t __n)
+     559              :       {
+     560              :         if (__n == 0)
+     561              :           return __s1;
+     562              : #if __cplusplus >= 202002L
+     563              :         if (std::__is_constant_evaluated())
+     564              :           return __gnu_cxx::char_traits<char_type>::copy(__s1, __s2, __n);
+     565              : #endif
+     566              :         return wmemcpy(__s1, __s2, __n);
+     567              :       }
+     568              : 
+     569              :       static _GLIBCXX20_CONSTEXPR char_type*
+     570              :       assign(char_type* __s, size_t __n, char_type __a)
+     571              :       {
+     572              :         if (__n == 0)
+     573              :           return __s;
+     574              : #if __cplusplus >= 202002L
+     575              :         if (std::__is_constant_evaluated())
+     576              :           return __gnu_cxx::char_traits<char_type>::assign(__s, __n, __a);
+     577              : #endif
+     578              :         return wmemset(__s, __a, __n);
+     579              :       }
+     580              : 
+     581              :       static _GLIBCXX_CONSTEXPR char_type
+     582              :       to_char_type(const int_type& __c) _GLIBCXX_NOEXCEPT
+     583              :       { return char_type(__c); }
+     584              : 
+     585              :       static _GLIBCXX_CONSTEXPR int_type
+     586              :       to_int_type(const char_type& __c) _GLIBCXX_NOEXCEPT
+     587              :       { return int_type(__c); }
+     588              : 
+     589              :       static _GLIBCXX_CONSTEXPR bool
+     590              :       eq_int_type(const int_type& __c1, const int_type& __c2) _GLIBCXX_NOEXCEPT
+     591              :       { return __c1 == __c2; }
+     592              : 
+     593              : #if _GLIBCXX_HOSTED
+     594              :       static _GLIBCXX_CONSTEXPR int_type
+     595              :       eof() _GLIBCXX_NOEXCEPT
+     596              :       { return static_cast<int_type>(WEOF); }
+     597              : 
+     598              :       static _GLIBCXX_CONSTEXPR int_type
+     599              :       not_eof(const int_type& __c) _GLIBCXX_NOEXCEPT
+     600              :       { return eq_int_type(__c, eof()) ? 0 : __c; }
+     601              : #endif // HOSTED
+     602              :   };
+     603              : #else // _GLIBCXX_USE_WCHAR_T
+     604              :   template<>
+     605              :     struct char_traits<wchar_t> : public __gnu_cxx::char_traits<wchar_t>
+     606              :     { };
+     607              : #endif //_GLIBCXX_USE_WCHAR_T
+     608              : 
+     609              : #ifdef _GLIBCXX_USE_CHAR8_T
+     610              :   template<>
+     611              :     struct char_traits<char8_t>
+     612              :     {
+     613              :       typedef char8_t           char_type;
+     614              :       typedef unsigned int      int_type;
+     615              : #if _GLIBCXX_HOSTED
+     616              :       typedef u8streampos       pos_type;
+     617              :       typedef streamoff         off_type;
+     618              :       typedef mbstate_t         state_type;
+     619              : #endif // HOSTED
+     620              : #if __cpp_lib_three_way_comparison
+     621              :       using comparison_category = strong_ordering;
+     622              : #endif
+     623              : 
+     624              :       static _GLIBCXX17_CONSTEXPR void
+     625              :       assign(char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT
+     626              :       {
+     627              : #if __cpp_constexpr_dynamic_alloc
+     628              :         if (std::__is_constant_evaluated())
+     629              :           std::construct_at(__builtin_addressof(__c1), __c2);
+     630              :         else
+     631              : #endif
+     632              :         __c1 = __c2;
+     633              :       }
+     634              : 
+     635              :       static _GLIBCXX_CONSTEXPR bool
+     636              :       eq(const char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT
+     637              :       { return __c1 == __c2; }
+     638              : 
+     639              :       static _GLIBCXX_CONSTEXPR bool
+     640              :       lt(const char_type& __c1, const char_type& __c2) _GLIBCXX_NOEXCEPT
+     641              :       { return __c1 < __c2; }
+     642              : 
+     643              :       static _GLIBCXX17_CONSTEXPR int
+     644              :       compare(const char_type* __s1, const char_type* __s2, size_t __n)
+     645              :       {
+     646              :         if (__n == 0)
+     647              :           return 0;
+     648              : #if __cplusplus >= 201703L
+     649              :         if (std::__is_constant_evaluated())
+     650              :           return __gnu_cxx::char_traits<char_type>::compare(__s1, __s2, __n);
+     651              : #endif
+     652              :         return __builtin_memcmp(__s1, __s2, __n);
+     653              :       }
+     654              : 
+     655              :       static _GLIBCXX17_CONSTEXPR size_t
+     656              :       length(const char_type* __s)
+     657              :       {
+     658              : #if __cplusplus >= 201703L
+     659              :         if (std::__is_constant_evaluated())
+     660              :           return __gnu_cxx::char_traits<char_type>::length(__s);
+     661              : #endif
+     662              :         size_t __i = 0;
+     663              :         while (!eq(__s[__i], char_type()))
+     664              :           ++__i;
+     665              :         return __i;
+     666              :       }
+     667              : 
+     668              :       static _GLIBCXX17_CONSTEXPR const char_type*
+     669              :       find(const char_type* __s, size_t __n, const char_type& __a)
+     670              :       {
+     671              :         if (__n == 0)
+     672              :           return 0;
+     673              : #if __cplusplus >= 201703L
+     674              :         if (std::__is_constant_evaluated())
+     675              :           return __gnu_cxx::char_traits<char_type>::find(__s, __n, __a);
+     676              : #endif
+     677              :         return static_cast<const char_type*>(__builtin_memchr(__s, __a, __n));
+     678              :       }
+     679              : 
+     680              :       static _GLIBCXX20_CONSTEXPR char_type*
+     681              :       move(char_type* __s1, const char_type* __s2, size_t __n)
+     682              :       {
+     683              :         if (__n == 0)
+     684              :           return __s1;
+     685              : #if __cplusplus >= 202002L
+     686              :         if (std::__is_constant_evaluated())
+     687              :           return __gnu_cxx::char_traits<char_type>::move(__s1, __s2, __n);
+     688              : #endif
+     689              :         return static_cast<char_type*>(__builtin_memmove(__s1, __s2, __n));
+     690              :       }
+     691              : 
+     692              :       static _GLIBCXX20_CONSTEXPR char_type*
+     693              :       copy(char_type* __s1, const char_type* __s2, size_t __n)
+     694              :       {
+     695              :         if (__n == 0)
+     696              :           return __s1;
+     697              : #if __cplusplus >= 202002L
+     698              :         if (std::__is_constant_evaluated())
+     699              :           return __gnu_cxx::char_traits<char_type>::copy(__s1, __s2, __n);
+     700              : #endif
+     701              :         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
+     702              :       }
+     703              : 
+     704              :       static _GLIBCXX20_CONSTEXPR char_type*
+     705              :       assign(char_type* __s, size_t __n, char_type __a)
+     706              :       {
+     707              :         if (__n == 0)
+     708              :           return __s;
+     709              : #if __cplusplus >= 202002L
+     710              :         if (std::__is_constant_evaluated())
+     711              :           return __gnu_cxx::char_traits<char_type>::assign(__s, __n, __a);
+     712              : #endif
+     713              :         return static_cast<char_type*>(__builtin_memset(__s, __a, __n));
+     714              :       }
+     715              : 
+     716              :       static _GLIBCXX_CONSTEXPR char_type
+     717              :       to_char_type(const int_type& __c) _GLIBCXX_NOEXCEPT
+     718              :       { return char_type(__c); }
+     719              : 
+     720              :       static _GLIBCXX_CONSTEXPR int_type
+     721              :       to_int_type(const char_type& __c) _GLIBCXX_NOEXCEPT
+     722              :       { return int_type(__c); }
+     723              : 
+     724              :       static _GLIBCXX_CONSTEXPR bool
+     725              :       eq_int_type(const int_type& __c1, const int_type& __c2) _GLIBCXX_NOEXCEPT
+     726              :       { return __c1 == __c2; }
+     727              : 
+     728              : #if _GLIBCXX_HOSTED
+     729              :       static _GLIBCXX_CONSTEXPR int_type
+     730              :       eof() _GLIBCXX_NOEXCEPT
+     731              :       { return static_cast<int_type>(-1); }
+     732              : 
+     733              :       static _GLIBCXX_CONSTEXPR int_type
+     734              :       not_eof(const int_type& __c) _GLIBCXX_NOEXCEPT
+     735              :       { return eq_int_type(__c, eof()) ? 0 : __c; }
+     736              : #endif // HOSTED
+     737              :     };
+     738              : #endif //_GLIBCXX_USE_CHAR8_T
+     739              : 
+     740              : _GLIBCXX_END_NAMESPACE_VERSION
+     741              : } // namespace
+     742              : 
+     743              : #if __cplusplus >= 201103L
+     744              : 
+     745              : namespace std _GLIBCXX_VISIBILITY(default)
+     746              : {
+     747              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+     748              : 
+     749              :   template<>
+     750              :     struct char_traits<char16_t>
+     751              :     {
+     752              :       typedef char16_t          char_type;
+     753              : #ifdef __UINT_LEAST16_TYPE__
+     754              :       typedef __UINT_LEAST16_TYPE__         int_type;
+     755              : #elif defined _GLIBCXX_USE_C99_STDINT_TR1
+     756              :       typedef uint_least16_t    int_type;
+     757              : #else
+     758              :       typedef make_unsigned<char16_t>::type int_type;
+     759              : #endif
+     760              : #if _GLIBCXX_HOSTED
+     761              :       typedef streamoff         off_type;
+     762              :       typedef u16streampos      pos_type;
+     763              :       typedef mbstate_t         state_type;
+     764              : #endif // HOSTED
+     765              : #if __cpp_lib_three_way_comparison
+     766              :       using comparison_category = strong_ordering;
+     767              : #endif
+     768              : 
+     769              :       static _GLIBCXX17_CONSTEXPR void
+     770              :       assign(char_type& __c1, const char_type& __c2) noexcept
+     771              :       {
+     772              : #if __cpp_constexpr_dynamic_alloc
+     773              :         if (std::__is_constant_evaluated())
+     774              :           std::construct_at(__builtin_addressof(__c1), __c2);
+     775              :         else
+     776              : #endif
+     777              :         __c1 = __c2;
+     778              :       }
+     779              : 
+     780              :       static constexpr bool
+     781              :       eq(const char_type& __c1, const char_type& __c2) noexcept
+     782              :       { return __c1 == __c2; }
+     783              : 
+     784              :       static constexpr bool
+     785              :       lt(const char_type& __c1, const char_type& __c2) noexcept
+     786              :       { return __c1 < __c2; }
+     787              : 
+     788              :       static _GLIBCXX17_CONSTEXPR int
+     789              :       compare(const char_type* __s1, const char_type* __s2, size_t __n)
+     790              :       {
+     791              :         for (size_t __i = 0; __i < __n; ++__i)
+     792              :           if (lt(__s1[__i], __s2[__i]))
+     793              :             return -1;
+     794              :           else if (lt(__s2[__i], __s1[__i]))
+     795              :             return 1;
+     796              :         return 0;
+     797              :       }
+     798              : 
+     799              :       static _GLIBCXX17_CONSTEXPR size_t
+     800              :       length(const char_type* __s)
+     801              :       {
+     802              :         size_t __i = 0;
+     803              :         while (!eq(__s[__i], char_type()))
+     804              :           ++__i;
+     805              :         return __i;
+     806              :       }
+     807              : 
+     808              :       static _GLIBCXX17_CONSTEXPR const char_type*
+     809              :       find(const char_type* __s, size_t __n, const char_type& __a)
+     810              :       {
+     811              :         for (size_t __i = 0; __i < __n; ++__i)
+     812              :           if (eq(__s[__i], __a))
+     813              :             return __s + __i;
+     814              :         return 0;
+     815              :       }
+     816              : 
+     817              :       static _GLIBCXX20_CONSTEXPR char_type*
+     818              :       move(char_type* __s1, const char_type* __s2, size_t __n)
+     819              :       {
+     820              :         if (__n == 0)
+     821              :           return __s1;
+     822              : #if __cplusplus >= 202002L
+     823              :         if (std::__is_constant_evaluated())
+     824              :           return __gnu_cxx::char_traits<char_type>::move(__s1, __s2, __n);
+     825              : #endif
+     826              :         return (static_cast<char_type*>
+     827              :                 (__builtin_memmove(__s1, __s2, __n * sizeof(char_type))));
+     828              :       }
+     829              : 
+     830              :       static _GLIBCXX20_CONSTEXPR char_type*
+     831              :       copy(char_type* __s1, const char_type* __s2, size_t __n)
+     832              :       {
+     833              :         if (__n == 0)
+     834              :           return __s1;
+     835              : #if __cplusplus >= 202002L
+     836              :         if (std::__is_constant_evaluated())
+     837              :           return __gnu_cxx::char_traits<char_type>::copy(__s1, __s2, __n);
+     838              : #endif
+     839              :         return (static_cast<char_type*>
+     840              :                 (__builtin_memcpy(__s1, __s2, __n * sizeof(char_type))));
+     841              :       }
+     842              : 
+     843              :       static _GLIBCXX20_CONSTEXPR char_type*
+     844              :       assign(char_type* __s, size_t __n, char_type __a)
+     845              :       {
+     846              :         for (size_t __i = 0; __i < __n; ++__i)
+     847              :           assign(__s[__i], __a);
+     848              :         return __s;
+     849              :       }
+     850              : 
+     851              :       static constexpr char_type
+     852              :       to_char_type(const int_type& __c) noexcept
+     853              :       { return char_type(__c); }
+     854              : 
+     855              :       static constexpr bool
+     856              :       eq_int_type(const int_type& __c1, const int_type& __c2) noexcept
+     857              :       { return __c1 == __c2; }
+     858              : 
+     859              : #if _GLIBCXX_HOSTED
+     860              :       static constexpr int_type
+     861              :       to_int_type(const char_type& __c) noexcept
+     862              :       { return __c == eof() ? int_type(0xfffd) : int_type(__c); }
+     863              : 
+     864              :       static constexpr int_type
+     865              :       eof() noexcept
+     866              :       { return static_cast<int_type>(-1); }
+     867              : 
+     868              :       static constexpr int_type
+     869              :       not_eof(const int_type& __c) noexcept
+     870              :       { return eq_int_type(__c, eof()) ? 0 : __c; }
+     871              : #else // !HOSTED
+     872              :       static constexpr int_type
+     873              :       to_int_type(const char_type& __c) noexcept
+     874              :       { return int_type(__c); }
+     875              : #endif // !HOSTED
+     876              :     };
+     877              : 
+     878              :   template<>
+     879              :     struct char_traits<char32_t>
+     880              :     {
+     881              :       typedef char32_t          char_type;
+     882              : #ifdef __UINT_LEAST32_TYPE__
+     883              :       typedef __UINT_LEAST32_TYPE__         int_type;
+     884              : #elif defined _GLIBCXX_USE_C99_STDINT_TR1
+     885              :       typedef uint_least32_t    int_type;
+     886              : #else
+     887              :       typedef make_unsigned<char32_t>::type int_type;
+     888              : #endif
+     889              : #if _GLIBCXX_HOSTED
+     890              :       typedef streamoff         off_type;
+     891              :       typedef u32streampos      pos_type;
+     892              :       typedef mbstate_t         state_type;
+     893              : #endif // HOSTED
+     894              : #if __cpp_lib_three_way_comparison
+     895              :       using comparison_category = strong_ordering;
+     896              : #endif
+     897              : 
+     898              :       static _GLIBCXX17_CONSTEXPR void
+     899              :       assign(char_type& __c1, const char_type& __c2) noexcept
+     900              :       {
+     901              : #if __cpp_constexpr_dynamic_alloc
+     902              :         if (std::__is_constant_evaluated())
+     903              :           std::construct_at(__builtin_addressof(__c1), __c2);
+     904              :         else
+     905              : #endif
+     906              :         __c1 = __c2;
+     907              :       }
+     908              : 
+     909              :       static constexpr bool
+     910              :       eq(const char_type& __c1, const char_type& __c2) noexcept
+     911              :       { return __c1 == __c2; }
+     912              : 
+     913              :       static constexpr bool
+     914              :       lt(const char_type& __c1, const char_type& __c2) noexcept
+     915              :       { return __c1 < __c2; }
+     916              : 
+     917              :       static _GLIBCXX17_CONSTEXPR int
+     918              :       compare(const char_type* __s1, const char_type* __s2, size_t __n)
+     919              :       {
+     920              :         for (size_t __i = 0; __i < __n; ++__i)
+     921              :           if (lt(__s1[__i], __s2[__i]))
+     922              :             return -1;
+     923              :           else if (lt(__s2[__i], __s1[__i]))
+     924              :             return 1;
+     925              :         return 0;
+     926              :       }
+     927              : 
+     928              :       static _GLIBCXX17_CONSTEXPR size_t
+     929              :       length(const char_type* __s)
+     930              :       {
+     931              :         size_t __i = 0;
+     932              :         while (!eq(__s[__i], char_type()))
+     933              :           ++__i;
+     934              :         return __i;
+     935              :       }
+     936              : 
+     937              :       static _GLIBCXX17_CONSTEXPR const char_type*
+     938              :       find(const char_type* __s, size_t __n, const char_type& __a)
+     939              :       {
+     940              :         for (size_t __i = 0; __i < __n; ++__i)
+     941              :           if (eq(__s[__i], __a))
+     942              :             return __s + __i;
+     943              :         return 0;
+     944              :       }
+     945              : 
+     946              :       static _GLIBCXX20_CONSTEXPR char_type*
+     947              :       move(char_type* __s1, const char_type* __s2, size_t __n)
+     948              :       {
+     949              :         if (__n == 0)
+     950              :           return __s1;
+     951              : #if __cplusplus >= 202002L
+     952              :         if (std::__is_constant_evaluated())
+     953              :           return __gnu_cxx::char_traits<char_type>::move(__s1, __s2, __n);
+     954              : #endif
+     955              :         return (static_cast<char_type*>
+     956              :                 (__builtin_memmove(__s1, __s2, __n * sizeof(char_type))));
+     957              :       }
+     958              : 
+     959              :       static _GLIBCXX20_CONSTEXPR char_type*
+     960              :       copy(char_type* __s1, const char_type* __s2, size_t __n)
+     961              :       { 
+     962              :         if (__n == 0)
+     963              :           return __s1;
+     964              : #if __cplusplus >= 202002L
+     965              :         if (std::__is_constant_evaluated())
+     966              :           return __gnu_cxx::char_traits<char_type>::copy(__s1, __s2, __n);
+     967              : #endif
+     968              :         return (static_cast<char_type*>
+     969              :                 (__builtin_memcpy(__s1, __s2, __n * sizeof(char_type))));
+     970              :       }
+     971              : 
+     972              :       static _GLIBCXX20_CONSTEXPR char_type*
+     973              :       assign(char_type* __s, size_t __n, char_type __a)
+     974              :       {
+     975              :         for (size_t __i = 0; __i < __n; ++__i)
+     976              :           assign(__s[__i], __a);
+     977              :         return __s;
+     978              :       }
+     979              : 
+     980              :       static constexpr char_type
+     981              :       to_char_type(const int_type& __c) noexcept
+     982              :       { return char_type(__c); }
+     983              : 
+     984              :       static constexpr int_type
+     985              :       to_int_type(const char_type& __c) noexcept
+     986              :       { return int_type(__c); }
+     987              : 
+     988              :       static constexpr bool
+     989              :       eq_int_type(const int_type& __c1, const int_type& __c2) noexcept
+     990              :       { return __c1 == __c2; }
+     991              : 
+     992              : #if _GLIBCXX_HOSTED
+     993              :       static constexpr int_type
+     994              :       eof() noexcept
+     995              :       { return static_cast<int_type>(-1); }
+     996              : 
+     997              :       static constexpr int_type
+     998              :       not_eof(const int_type& __c) noexcept
+     999              :       { return eq_int_type(__c, eof()) ? 0 : __c; }
+    1000              : #endif // HOSTED
+    1001              :     };
+    1002              : 
+    1003              : #if __cpp_lib_three_way_comparison
+    1004              :   namespace __detail
+    1005              :   {
+    1006              :     template<typename _ChTraits>
+    1007              :       constexpr auto
+    1008              :       __char_traits_cmp_cat(int __cmp) noexcept
+    1009              :       {
+    1010              :         if constexpr (requires { typename _ChTraits::comparison_category; })
+    1011              :           {
+    1012              :             using _Cat = typename _ChTraits::comparison_category;
+    1013              :             static_assert( !is_void_v<common_comparison_category_t<_Cat>> );
+    1014              :             return static_cast<_Cat>(__cmp <=> 0);
+    1015              :           }
+    1016              :         else
+    1017              :           return static_cast<weak_ordering>(__cmp <=> 0);
+    1018              :       }
+    1019              :   } // namespace __detail
+    1020              : #endif // C++20
+    1021              : 
+    1022              : #pragma GCC diagnostic pop
+    1023              : 
+    1024              : _GLIBCXX_END_NAMESPACE_VERSION
+    1025              : } // namespace
+    1026              : 
+    1027              : #endif  // C++11
+    1028              : 
+    1029              : #endif // _CHAR_TRAITS_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/charconv.h.func-c.html b/html/usr/include/c++/13/bits/charconv.h.func-c.html new file mode 100644 index 0000000..797f5e6 --- /dev/null +++ b/html/usr/include/c++/13/bits/charconv.h.func-c.html @@ -0,0 +1,131 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/charconv.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - charconv.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:88.5 %2623
Test Date:2024-04-30 13:17:26Functions:66.7 %64
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt8__detail14__to_chars_lenIjEEjT_i478128
_ZNSt8__detail14__to_chars_lenIyEEjT_i0
_ZNSt8__detail14__to_chars_lenImEEjT_i56
_ZNSt8__detail14__to_chars_lenIjEEjT_i478072
_ZNSt8__detail18__to_chars_10_implIjEEvPcjT_478128
_ZNSt8__detail18__to_chars_10_implIyEEvPcjT_0
_ZNSt8__detail18__to_chars_10_implImEEvPcjT_56
_ZNSt8__detail18__to_chars_10_implIjEEvPcjT_478072
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/charconv.h.func.html b/html/usr/include/c++/13/bits/charconv.h.func.html new file mode 100644 index 0000000..2300bb5 --- /dev/null +++ b/html/usr/include/c++/13/bits/charconv.h.func.html @@ -0,0 +1,131 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/charconv.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - charconv.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:88.5 %2623
Test Date:2024-04-30 13:17:26Functions:66.7 %64
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt8__detail14__to_chars_lenIjEEjT_i478128
_ZNSt8__detail14__to_chars_lenIjEEjT_i478072
_ZNSt8__detail14__to_chars_lenImEEjT_i56
_ZNSt8__detail14__to_chars_lenIyEEjT_i0
_ZNSt8__detail18__to_chars_10_implIjEEvPcjT_478128
_ZNSt8__detail18__to_chars_10_implIjEEvPcjT_478072
_ZNSt8__detail18__to_chars_10_implImEEvPcjT_56
_ZNSt8__detail18__to_chars_10_implIyEEvPcjT_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/charconv.h.gcov.html b/html/usr/include/c++/13/bits/charconv.h.gcov.html new file mode 100644 index 0000000..c1ea0b5 --- /dev/null +++ b/html/usr/include/c++/13/bits/charconv.h.gcov.html @@ -0,0 +1,192 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/charconv.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - charconv.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:88.5 %2623
Test Date:2024-04-30 13:17:26Functions:66.7 %64
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Numeric conversions (to_string, to_chars) -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2017-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/charconv.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{charconv}
+      28              :  */
+      29              : 
+      30              : #ifndef _GLIBCXX_CHARCONV_H
+      31              : #define _GLIBCXX_CHARCONV_H 1
+      32              : 
+      33              : #pragma GCC system_header
+      34              : 
+      35              : #if __cplusplus >= 201103L
+      36              : 
+      37              : #include <type_traits>
+      38              : #include <ext/numeric_traits.h>
+      39              : 
+      40              : namespace std _GLIBCXX_VISIBILITY(default)
+      41              : {
+      42              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      43              : namespace __detail
+      44              : {
+      45              : #if __cpp_variable_templates
+      46              :   // This accepts 128-bit integers even in strict mode.
+      47              :   template<typename _Tp>
+      48              :     constexpr bool __integer_to_chars_is_unsigned
+      49              :       = ! __gnu_cxx::__int_traits<_Tp>::__is_signed;
+      50              : #endif
+      51              : 
+      52              :   // Generic implementation for arbitrary bases.
+      53              :   template<typename _Tp>
+      54              :     _GLIBCXX14_CONSTEXPR unsigned
+      55       478128 :     __to_chars_len(_Tp __value, int __base = 10) noexcept
+      56              :     {
+      57              : #if __cpp_variable_templates
+      58              :       static_assert(__integer_to_chars_is_unsigned<_Tp>, "implementation bug");
+      59              : #endif
+      60              : 
+      61       478128 :       unsigned __n = 1;
+      62       478128 :       const unsigned __b2 = __base  * __base;
+      63       478128 :       const unsigned __b3 = __b2 * __base;
+      64       478128 :       const unsigned long __b4 = __b3 * __base;
+      65              :       for (;;)
+      66              :         {
+      67       478128 :           if (__value < (unsigned)__base) return __n;
+      68         1178 :           if (__value < __b2) return __n + 1;
+      69           10 :           if (__value < __b3) return __n + 2;
+      70            0 :           if (__value < __b4) return __n + 3;
+      71            0 :           __value /= __b4;
+      72            0 :           __n += 4;
+      73              :         }
+      74              :     }
+      75              : 
+      76              :   // Write an unsigned integer value to the range [first,first+len).
+      77              :   // The caller is required to provide a buffer of exactly the right size
+      78              :   // (which can be determined by the __to_chars_len function).
+      79              :   template<typename _Tp>
+      80              :     _GLIBCXX23_CONSTEXPR void
+      81       478128 :     __to_chars_10_impl(char* __first, unsigned __len, _Tp __val) noexcept
+      82              :     {
+      83              : #if __cpp_variable_templates
+      84              :       static_assert(__integer_to_chars_is_unsigned<_Tp>, "implementation bug");
+      85              : #endif
+      86              : 
+      87       478128 :       constexpr char __digits[201] =
+      88              :         "0001020304050607080910111213141516171819"
+      89              :         "2021222324252627282930313233343536373839"
+      90              :         "4041424344454647484950515253545556575859"
+      91              :         "6061626364656667686970717273747576777879"
+      92              :         "8081828384858687888990919293949596979899";
+      93       478128 :       unsigned __pos = __len - 1;
+      94       478138 :       while (__val >= 100)
+      95              :         {
+      96           10 :           auto const __num = (__val % 100) * 2;
+      97           10 :           __val /= 100;
+      98           10 :           __first[__pos] = __digits[__num + 1];
+      99           10 :           __first[__pos - 1] = __digits[__num];
+     100           10 :           __pos -= 2;
+     101              :         }
+     102       478128 :       if (__val >= 10)
+     103              :         {
+     104         1168 :           auto const __num = __val * 2;
+     105         1168 :           __first[1] = __digits[__num + 1];
+     106         1168 :           __first[0] = __digits[__num];
+     107              :         }
+     108              :       else
+     109       476960 :         __first[0] = '0' + __val;
+     110       478128 :     }
+     111              : 
+     112              : } // namespace __detail
+     113              : _GLIBCXX_END_NAMESPACE_VERSION
+     114              : } // namespace std
+     115              : #endif // C++11
+     116              : #endif // _GLIBCXX_CHARCONV_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/chrono.h.func-c.html b/html/usr/include/c++/13/bits/chrono.h.func-c.html new file mode 100644 index 0000000..61c9ebe --- /dev/null +++ b/html/usr/include/c++/13/bits/chrono.h.func-c.html @@ -0,0 +1,306 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/chrono.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - chrono.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:55.2 %2916
Test Date:2024-04-30 13:17:26Functions:42.3 %2611
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt6chrono15duration_valuesIlE4zeroEv0
_ZNSt6chrono20__duration_cast_implINS_8durationIlSt5ratioILl1ELl1000EEEES2_ILl1000ELl1EElLb0ELb1EE6__castIlS2_ILl1ELl1EEEES4_RKNS1_IT_T0_EE0
_ZNSt6chrono20__duration_cast_implINS_8durationIlSt5ratioILl1ELl1000000000EEEES2_ILl1000000ELl1EElLb0ELb1EE6__castIlS2_ILl1ELl1000EEEES4_RKNS1_IT_T0_EE0
_ZNSt6chrono20__duration_cast_implINS_8durationIlSt5ratioILl1ELl1000EEEES2_ILl1000ELl1EElLb0ELb1EE6__castIlS2_ILl1ELl1EEEES4_RKNS1_IT_T0_EE0
_ZNSt6chrono8durationIlSt5ratioILl1ELl1000EEE4zeroEv0
_ZNSt6chrono8durationIlSt5ratioILl1ELl1000EEEC2IlS1_ILl1ELl1EEvEERKNS0_IT_T0_EE0
_ZNSt6chronoleIlSt5ratioILl1ELl1000EElS2_EEbRKNS_8durationIT_T0_EERKNS3_IT1_T2_EE0
_ZNSt6chronoltIlSt5ratioILl1ELl1000EElS2_EEbRKNS_8durationIT_T0_EERKNS3_IT1_T2_EE0
_ZNSt6chronomiINS_3_V212steady_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEES6_EENSt11common_typeIJT0_T1_EE4typeERKNS_10time_pointIT_S8_EERKNSC_ISD_S9_EE1782
_ZNSt6chronomiIlSt5ratioILl1ELl1000000000EElS2_EENSt11common_typeIJNS_8durationIT_T0_EENS4_IT1_T2_EEEE4typeERKS7_RKSA_1782
_ZNSt6chronomiIlSt5ratioILl1ELl1000EElS1_ILl1ELl1EEEENSt11common_typeIJNS_8durationIT_T0_EENS5_IT1_T2_EEEE4typeERKS8_RKSB_0
_ZNSt6chronomiIlSt5ratioILl1ELl1000000000EElS2_EENSt11common_typeIJNS_8durationIT_T0_EENS4_IT1_T2_EEEE4typeERKS7_RKSA_1782
_ZNSt6chrono20__duration_cast_implINS_8durationIlSt5ratioILl1ELl1EEEES2_ILl1ELl1000EElLb1ELb0EE6__castIlS5_EES4_RKNS1_IT_T0_EE3564
_ZNSt6chrono20__duration_cast_implINS_8durationIlSt5ratioILl1ELl1EEEES2_ILl1ELl1000EElLb1ELb0EE6__castIlS5_EES4_RKNS1_IT_T0_EE0
_ZNSt6chrono20__duration_cast_implINS_8durationIlSt5ratioILl1ELl1000EEEES2_ILl1ELl1000000EElLb1ELb0EE6__castIlS2_ILl1ELl1000000000EEEES4_RKNS1_IT_T0_EE3564
_ZNSt6chrono8durationIlSt5ratioILl1ELl1EEEC1IlvEERKT_5346
_ZNSt6chrono8durationIlSt5ratioILl1ELl1000EEEC2IjvEERKT_0
_ZNSt6chrono8durationIlSt5ratioILl1ELl1EEEC1IlvEERKT_0
_ZNSt6chrono8durationIlSt5ratioILl1ELl1000000000EEEC1IlvEERKT_1782
_ZNSt6chrono8durationIlSt5ratioILl1ELl1000EEEC2IlvEERKT_3564
_ZNSt6chrono13duration_castINS_8durationIlSt5ratioILl1ELl1000000000EEEElS3_EENSt9enable_ifIXsrNS_13__is_durationIT_EE5valueES7_E4typeERKNS1_IT0_T1_EE5900
_ZNSt6chrono13duration_castINS_8durationIlSt5ratioILl1ELl1000000000EEEElS2_ILl1ELl1000EEEENSt9enable_ifIXsrNS_13__is_durationIT_EE5valueES8_E4typeERKNS1_IT0_T1_EE0
_ZNSt6chrono13duration_castINS_8durationIlSt5ratioILl1ELl1000EEEElS2_ILl1ELl1EEEENSt9enable_ifIXsrNS_13__is_durationIT_EE5valueES8_E4typeERKNS1_IT0_T1_EE0
_ZNSt6chrono13duration_castINS_8durationIlSt5ratioILl1ELl1EEEElS2_ILl1ELl1000EEEENSt9enable_ifIXsrNS_13__is_durationIT_EE5valueES8_E4typeERKNS1_IT0_T1_EE0
_ZNSt6chrono13duration_castINS_8durationIlSt5ratioILl1ELl1000000000EEEElS3_EENSt9enable_ifIXsrNS_13__is_durationIT_EE5valueES7_E4typeERKNS1_IT0_T1_EE2336
_ZNSt6chrono13duration_castINS_8durationIlSt5ratioILl1ELl1000EEEElS2_ILl1ELl1000000000EEEENSt9enable_ifIXsrNS_13__is_durationIT_EE5valueES8_E4typeERKNS1_IT0_T1_EE3564
_ZNKSt6chrono10time_pointINS_3_V212steady_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEE16time_since_epochEv7682
_ZNKSt6chrono10time_pointINS_3_V212steady_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEE16time_since_epochEv3564
_ZNKSt6chrono10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEE16time_since_epochEv4118
_ZNKSt6chrono8durationIlSt5ratioILl1ELl1EEE5countEv13028
_ZNKSt6chrono8durationIlSt5ratioILl1ELl1EEE5countEv0
_ZNKSt6chrono8durationIlSt5ratioILl1ELl1000EEE5countEv3564
_ZNKSt6chrono8durationIlSt5ratioILl1ELl1000000000EEE5countEv9464
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/chrono.h.func.html b/html/usr/include/c++/13/bits/chrono.h.func.html new file mode 100644 index 0000000..1e42664 --- /dev/null +++ b/html/usr/include/c++/13/bits/chrono.h.func.html @@ -0,0 +1,306 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/chrono.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - chrono.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:55.2 %2916
Test Date:2024-04-30 13:17:26Functions:42.3 %2611
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt6chrono10time_pointINS_3_V212steady_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEE16time_since_epochEv7682
_ZNKSt6chrono10time_pointINS_3_V212steady_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEE16time_since_epochEv3564
_ZNKSt6chrono10time_pointINS_3_V212system_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEEE16time_since_epochEv4118
_ZNKSt6chrono8durationIlSt5ratioILl1ELl1EEE5countEv13028
_ZNKSt6chrono8durationIlSt5ratioILl1ELl1000000000EEE5countEv9464
_ZNKSt6chrono8durationIlSt5ratioILl1ELl1000EEE5countEv3564
_ZNKSt6chrono8durationIlSt5ratioILl1ELl1EEE5countEv0
_ZNSt6chrono13duration_castINS_8durationIlSt5ratioILl1ELl1000000000EEEElS3_EENSt9enable_ifIXsrNS_13__is_durationIT_EE5valueES7_E4typeERKNS1_IT0_T1_EE5900
_ZNSt6chrono13duration_castINS_8durationIlSt5ratioILl1ELl1000000000EEEElS2_ILl1ELl1000EEEENSt9enable_ifIXsrNS_13__is_durationIT_EE5valueES8_E4typeERKNS1_IT0_T1_EE0
_ZNSt6chrono13duration_castINS_8durationIlSt5ratioILl1ELl1000000000EEEElS3_EENSt9enable_ifIXsrNS_13__is_durationIT_EE5valueES7_E4typeERKNS1_IT0_T1_EE2336
_ZNSt6chrono13duration_castINS_8durationIlSt5ratioILl1ELl1000EEEElS2_ILl1ELl1000000000EEEENSt9enable_ifIXsrNS_13__is_durationIT_EE5valueES8_E4typeERKNS1_IT0_T1_EE3564
_ZNSt6chrono13duration_castINS_8durationIlSt5ratioILl1ELl1000EEEElS2_ILl1ELl1EEEENSt9enable_ifIXsrNS_13__is_durationIT_EE5valueES8_E4typeERKNS1_IT0_T1_EE0
_ZNSt6chrono13duration_castINS_8durationIlSt5ratioILl1ELl1EEEElS2_ILl1ELl1000EEEENSt9enable_ifIXsrNS_13__is_durationIT_EE5valueES8_E4typeERKNS1_IT0_T1_EE0
_ZNSt6chrono15duration_valuesIlE4zeroEv0
_ZNSt6chrono20__duration_cast_implINS_8durationIlSt5ratioILl1ELl1000EEEES2_ILl1000ELl1EElLb0ELb1EE6__castIlS2_ILl1ELl1EEEES4_RKNS1_IT_T0_EE0
_ZNSt6chrono20__duration_cast_implINS_8durationIlSt5ratioILl1ELl1000000000EEEES2_ILl1000000ELl1EElLb0ELb1EE6__castIlS2_ILl1ELl1000EEEES4_RKNS1_IT_T0_EE0
_ZNSt6chrono20__duration_cast_implINS_8durationIlSt5ratioILl1ELl1000EEEES2_ILl1000ELl1EElLb0ELb1EE6__castIlS2_ILl1ELl1EEEES4_RKNS1_IT_T0_EE0
_ZNSt6chrono20__duration_cast_implINS_8durationIlSt5ratioILl1ELl1EEEES2_ILl1ELl1000EElLb1ELb0EE6__castIlS5_EES4_RKNS1_IT_T0_EE3564
_ZNSt6chrono20__duration_cast_implINS_8durationIlSt5ratioILl1ELl1000EEEES2_ILl1ELl1000000EElLb1ELb0EE6__castIlS2_ILl1ELl1000000000EEEES4_RKNS1_IT_T0_EE3564
_ZNSt6chrono20__duration_cast_implINS_8durationIlSt5ratioILl1ELl1EEEES2_ILl1ELl1000EElLb1ELb0EE6__castIlS5_EES4_RKNS1_IT_T0_EE0
_ZNSt6chrono8durationIlSt5ratioILl1ELl1000EEE4zeroEv0
_ZNSt6chrono8durationIlSt5ratioILl1ELl1000EEEC2IlS1_ILl1ELl1EEvEERKNS0_IT_T0_EE0
_ZNSt6chrono8durationIlSt5ratioILl1ELl1EEEC1IlvEERKT_5346
_ZNSt6chrono8durationIlSt5ratioILl1ELl1000000000EEEC1IlvEERKT_1782
_ZNSt6chrono8durationIlSt5ratioILl1ELl1000EEEC2IjvEERKT_0
_ZNSt6chrono8durationIlSt5ratioILl1ELl1000EEEC2IlvEERKT_3564
_ZNSt6chrono8durationIlSt5ratioILl1ELl1EEEC1IlvEERKT_0
_ZNSt6chronoleIlSt5ratioILl1ELl1000EElS2_EEbRKNS_8durationIT_T0_EERKNS3_IT1_T2_EE0
_ZNSt6chronoltIlSt5ratioILl1ELl1000EElS2_EEbRKNS_8durationIT_T0_EERKNS3_IT1_T2_EE0
_ZNSt6chronomiINS_3_V212steady_clockENS_8durationIlSt5ratioILl1ELl1000000000EEEES6_EENSt11common_typeIJT0_T1_EE4typeERKNS_10time_pointIT_S8_EERKNSC_ISD_S9_EE1782
_ZNSt6chronomiIlSt5ratioILl1ELl1000000000EElS2_EENSt11common_typeIJNS_8durationIT_T0_EENS4_IT1_T2_EEEE4typeERKS7_RKSA_1782
_ZNSt6chronomiIlSt5ratioILl1ELl1000000000EElS2_EENSt11common_typeIJNS_8durationIT_T0_EENS4_IT1_T2_EEEE4typeERKS7_RKSA_1782
_ZNSt6chronomiIlSt5ratioILl1ELl1000EElS1_ILl1ELl1EEEENSt11common_typeIJNS_8durationIT_T0_EENS5_IT1_T2_EEEE4typeERKS8_RKSB_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/chrono.h.gcov.html b/html/usr/include/c++/13/bits/chrono.h.gcov.html new file mode 100644 index 0000000..fd687c2 --- /dev/null +++ b/html/usr/include/c++/13/bits/chrono.h.gcov.html @@ -0,0 +1,1585 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/chrono.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - chrono.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:55.2 %2916
Test Date:2024-04-30 13:17:26Functions:42.3 %2611
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // chrono::duration and chrono::time_point -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2008-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file include/bits/chrono.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{chrono}
+      28              :  */
+      29              : 
+      30              : #ifndef _GLIBCXX_CHRONO_H
+      31              : #define _GLIBCXX_CHRONO_H 1
+      32              : 
+      33              : #pragma GCC system_header
+      34              : 
+      35              : #if __cplusplus >= 201103L
+      36              : 
+      37              : #include <ratio>
+      38              : #include <type_traits>
+      39              : #include <limits>
+      40              : #include <ctime>
+      41              : #include <bits/parse_numbers.h> // for literals support.
+      42              : #if __cplusplus >= 202002L
+      43              : # include <concepts>
+      44              : # include <compare>
+      45              : #endif
+      46              : 
+      47              : namespace std _GLIBCXX_VISIBILITY(default)
+      48              : {
+      49              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      50              : 
+      51              : #if __cplusplus >= 201703L
+      52              :   namespace filesystem { struct __file_clock; };
+      53              : #endif
+      54              : 
+      55              :   namespace chrono
+      56              :   {
+      57              :     /// @addtogroup chrono
+      58              :     /// @{
+      59              : 
+      60              :     /// `chrono::duration` represents a distance between two points in time
+      61              :     template<typename _Rep, typename _Period = ratio<1>>
+      62              :       class duration;
+      63              : 
+      64              :     /// `chrono::time_point` represents a point in time as measured by a clock
+      65              :     template<typename _Clock, typename _Dur = typename _Clock::duration>
+      66              :       class time_point;
+      67              :     /// @}
+      68              :   }
+      69              : 
+      70              :   /// @addtogroup chrono
+      71              :   /// @{
+      72              : 
+      73              :   // 20.11.4.3 specialization of common_type (for duration, sfinae-friendly)
+      74              : 
+      75              :   /// @cond undocumented
+      76              : 
+      77              :   template<typename _CT, typename _Period1, typename _Period2, typename = void>
+      78              :     struct __duration_common_type
+      79              :     { };
+      80              : 
+      81              :   template<typename _CT, typename _Period1, typename _Period2>
+      82              :     struct __duration_common_type<_CT, _Period1, _Period2,
+      83              :                                   __void_t<typename _CT::type>>
+      84              :     {
+      85              :     private:
+      86              :       using __gcd_num = __static_gcd<_Period1::num, _Period2::num>;
+      87              :       using __gcd_den = __static_gcd<_Period1::den, _Period2::den>;
+      88              :       using __cr = typename _CT::type;
+      89              :       using __r = ratio<__gcd_num::value,
+      90              :                         (_Period1::den / __gcd_den::value) * _Period2::den>;
+      91              : 
+      92              :     public:
+      93              :       using type = chrono::duration<__cr, typename __r::type>;
+      94              :     };
+      95              : 
+      96              :   /// @endcond
+      97              : 
+      98              :   /// @{
+      99              :   /// @relates chrono::duration
+     100              : 
+     101              :   /// Specialization of common_type for chrono::duration types.
+     102              :   template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
+     103              :     struct common_type<chrono::duration<_Rep1, _Period1>,
+     104              :                        chrono::duration<_Rep2, _Period2>>
+     105              :     : __duration_common_type<common_type<_Rep1, _Rep2>,
+     106              :                              typename _Period1::type,
+     107              :                              typename _Period2::type>
+     108              :     { };
+     109              : 
+     110              :   /// Specialization of common_type for two identical chrono::duration types.
+     111              :   template<typename _Rep, typename _Period>
+     112              :     struct common_type<chrono::duration<_Rep, _Period>,
+     113              :                        chrono::duration<_Rep, _Period>>
+     114              :     {
+     115              :       using type = chrono::duration<typename common_type<_Rep>::type,
+     116              :                                     typename _Period::type>;
+     117              :     };
+     118              : 
+     119              :   /// Specialization of common_type for one chrono::duration type.
+     120              :   template<typename _Rep, typename _Period>
+     121              :     struct common_type<chrono::duration<_Rep, _Period>>
+     122              :     {
+     123              :       using type = chrono::duration<typename common_type<_Rep>::type,
+     124              :                                     typename _Period::type>;
+     125              :     };
+     126              :   /// @}
+     127              : 
+     128              :   // 20.11.4.3 specialization of common_type (for time_point, sfinae-friendly)
+     129              : 
+     130              :   /// @cond undocumented
+     131              : 
+     132              :   template<typename _CT, typename _Clock, typename = void>
+     133              :     struct __timepoint_common_type
+     134              :     { };
+     135              : 
+     136              :   template<typename _CT, typename _Clock>
+     137              :     struct __timepoint_common_type<_CT, _Clock, __void_t<typename _CT::type>>
+     138              :     {
+     139              :       using type = chrono::time_point<_Clock, typename _CT::type>;
+     140              :     };
+     141              : 
+     142              :   /// @endcond
+     143              : 
+     144              :   /// @{
+     145              :   /// @relates chrono::time_point
+     146              : 
+     147              :   /// Specialization of common_type for chrono::time_point types.
+     148              :   template<typename _Clock, typename _Duration1, typename _Duration2>
+     149              :     struct common_type<chrono::time_point<_Clock, _Duration1>,
+     150              :                        chrono::time_point<_Clock, _Duration2>>
+     151              :     : __timepoint_common_type<common_type<_Duration1, _Duration2>, _Clock>
+     152              :     { };
+     153              : 
+     154              :   /// Specialization of common_type for two identical chrono::time_point types.
+     155              :   template<typename _Clock, typename _Duration>
+     156              :     struct common_type<chrono::time_point<_Clock, _Duration>,
+     157              :                        chrono::time_point<_Clock, _Duration>>
+     158              :     { using type = chrono::time_point<_Clock, _Duration>; };
+     159              : 
+     160              :   /// Specialization of common_type for one chrono::time_point type.
+     161              :   template<typename _Clock, typename _Duration>
+     162              :     struct common_type<chrono::time_point<_Clock, _Duration>>
+     163              :     { using type = chrono::time_point<_Clock, _Duration>; };
+     164              :   /// @}
+     165              : 
+     166              :   /// @} group chrono
+     167              : 
+     168              :   namespace chrono
+     169              :   {
+     170              :     /// @addtogroup chrono
+     171              :     /// @{
+     172              : 
+     173              :     /// @cond undocumented
+     174              : 
+     175              :     // Primary template for duration_cast impl.
+     176              :     template<typename _ToDur, typename _CF, typename _CR,
+     177              :              bool _NumIsOne = false, bool _DenIsOne = false>
+     178              :       struct __duration_cast_impl
+     179              :       {
+     180              :         template<typename _Rep, typename _Period>
+     181              :           static constexpr _ToDur
+     182              :           __cast(const duration<_Rep, _Period>& __d)
+     183              :           {
+     184              :             typedef typename _ToDur::rep                        __to_rep;
+     185              :             return _ToDur(static_cast<__to_rep>(static_cast<_CR>(__d.count())
+     186              :               * static_cast<_CR>(_CF::num)
+     187              :               / static_cast<_CR>(_CF::den)));
+     188              :           }
+     189              :       };
+     190              : 
+     191              :     template<typename _ToDur, typename _CF, typename _CR>
+     192              :       struct __duration_cast_impl<_ToDur, _CF, _CR, true, true>
+     193              :       {
+     194              :         template<typename _Rep, typename _Period>
+     195              :           static constexpr _ToDur
+     196              :           __cast(const duration<_Rep, _Period>& __d)
+     197              :           {
+     198              :             typedef typename _ToDur::rep                        __to_rep;
+     199              :             return _ToDur(static_cast<__to_rep>(__d.count()));
+     200              :           }
+     201              :       };
+     202              : 
+     203              :     template<typename _ToDur, typename _CF, typename _CR>
+     204              :       struct __duration_cast_impl<_ToDur, _CF, _CR, true, false>
+     205              :       {
+     206              :         template<typename _Rep, typename _Period>
+     207              :           static constexpr _ToDur
+     208         3564 :           __cast(const duration<_Rep, _Period>& __d)
+     209              :           {
+     210              :             typedef typename _ToDur::rep                        __to_rep;
+     211         7128 :             return _ToDur(static_cast<__to_rep>(
+     212         3564 :               static_cast<_CR>(__d.count()) / static_cast<_CR>(_CF::den)));
+     213              :           }
+     214              :       };
+     215              : 
+     216              :     template<typename _ToDur, typename _CF, typename _CR>
+     217              :       struct __duration_cast_impl<_ToDur, _CF, _CR, false, true>
+     218              :       {
+     219              :         template<typename _Rep, typename _Period>
+     220              :           static constexpr _ToDur
+     221            0 :           __cast(const duration<_Rep, _Period>& __d)
+     222              :           {
+     223              :             typedef typename _ToDur::rep                        __to_rep;
+     224            0 :             return _ToDur(static_cast<__to_rep>(
+     225            0 :               static_cast<_CR>(__d.count()) * static_cast<_CR>(_CF::num)));
+     226              :           }
+     227              :       };
+     228              : 
+     229              :     template<typename _Tp>
+     230              :       struct __is_duration
+     231              :       : std::false_type
+     232              :       { };
+     233              : 
+     234              :     template<typename _Rep, typename _Period>
+     235              :       struct __is_duration<duration<_Rep, _Period>>
+     236              :       : std::true_type
+     237              :       { };
+     238              : 
+     239              :     template<typename _Tp>
+     240              :       using __enable_if_is_duration
+     241              :         = typename enable_if<__is_duration<_Tp>::value, _Tp>::type;
+     242              : 
+     243              :     template<typename _Tp>
+     244              :       using __disable_if_is_duration
+     245              :         = typename enable_if<!__is_duration<_Tp>::value, _Tp>::type;
+     246              : 
+     247              : #if __cplusplus >= 201703L
+     248              :     template<typename _Tp>
+     249              :       inline constexpr bool __is_duration_v = false;
+     250              :     template<typename _Rep, typename _Period>
+     251              :       inline constexpr bool __is_duration_v<duration<_Rep, _Period>> = true;
+     252              :     template<typename _Tp>
+     253              :       inline constexpr bool __is_time_point_v = false;
+     254              :     template<typename _Clock, typename _Dur>
+     255              :       inline constexpr bool __is_time_point_v<time_point<_Clock, _Dur>> = true;
+     256              : #endif
+     257              : 
+     258              :     /// @endcond
+     259              : 
+     260              :     /** Convert a `duration` to type `ToDur`.
+     261              :      *
+     262              :      * If the duration cannot be represented accurately in the result type,
+     263              :      * returns the result of integer truncation (i.e., rounded towards zero).
+     264              :      *
+     265              :      * @tparam _ToDur The result type must be a `duration`.
+     266              :      * @param __d A duration.
+     267              :      * @return The value of `__d` converted to type `_ToDur`.
+     268              :      * @since C++11
+     269              :      */
+     270              :     template<typename _ToDur, typename _Rep, typename _Period>
+     271              :       _GLIBCXX_NODISCARD
+     272              :       constexpr __enable_if_is_duration<_ToDur>
+     273         5900 :       duration_cast(const duration<_Rep, _Period>& __d)
+     274              :       {
+     275              : #if __cpp_inline_variables && __cpp_if_constexpr
+     276              :         if constexpr (is_same_v<_ToDur, duration<_Rep, _Period>>)
+     277         2336 :           return __d;
+     278              :         else
+     279              :           {
+     280              : #endif
+     281              :           using __to_period = typename _ToDur::period;
+     282              :           using __to_rep = typename _ToDur::rep;
+     283              :           using __cf = ratio_divide<_Period, __to_period>;
+     284              :           using __cr = typename common_type<__to_rep, _Rep, intmax_t>::type;
+     285              :           using __dc = __duration_cast_impl<_ToDur, __cf, __cr,
+     286              :                                             __cf::num == 1, __cf::den == 1>;
+     287         3564 :           return __dc::__cast(__d);
+     288              : #if __cpp_inline_variables && __cpp_if_constexpr
+     289              :           }
+     290              : #endif
+     291              :       }
+     292              : 
+     293              :     /** Trait indicating whether to treat a type as a floating-point type.
+     294              :      *
+     295              :      * The chrono library uses this trait to tell whether a `duration` can
+     296              :      * represent fractional values of the given precision, or only integral
+     297              :      * values.
+     298              :      *
+     299              :      * You should specialize this trait for your own numeric types that are
+     300              :      * used with `duration` and can represent non-integral values.
+     301              :      *
+     302              :      * @since C++11
+     303              :      */
+     304              :     template<typename _Rep>
+     305              :       struct treat_as_floating_point
+     306              :       : is_floating_point<_Rep>
+     307              :       { };
+     308              : 
+     309              : #if __cplusplus > 201402L
+     310              :     template <typename _Rep>
+     311              :       inline constexpr bool treat_as_floating_point_v =
+     312              :         treat_as_floating_point<_Rep>::value;
+     313              : 
+     314              :     template<>
+     315              :       inline constexpr bool treat_as_floating_point_v<int> = false;
+     316              :     template<>
+     317              :       inline constexpr bool treat_as_floating_point_v<long> = false;
+     318              :     template<>
+     319              :       inline constexpr bool treat_as_floating_point_v<long long> = false;
+     320              :     template<>
+     321              :       inline constexpr bool treat_as_floating_point_v<float> = true;
+     322              :     template<>
+     323              :       inline constexpr bool treat_as_floating_point_v<double> = true;
+     324              :     template<>
+     325              :       inline constexpr bool treat_as_floating_point_v<long double> = true;
+     326              : #endif // C++17
+     327              : 
+     328              : #if __cplusplus > 201703L
+     329              : #if __cpp_lib_concepts
+     330              :     template<typename _Tp>
+     331              :       inline constexpr bool is_clock_v = false;
+     332              : 
+     333              :     template<typename _Tp>
+     334              :       requires requires {
+     335              :         typename _Tp::rep;
+     336              :         typename _Tp::period;
+     337              :         typename _Tp::duration;
+     338              :         typename _Tp::time_point::clock;
+     339              :         typename _Tp::time_point::duration;
+     340              :         { &_Tp::is_steady } -> same_as<const bool*>;
+     341              :         { _Tp::now() } -> same_as<typename _Tp::time_point>;
+     342              :         requires same_as<typename _Tp::duration,
+     343              :                          duration<typename _Tp::rep, typename _Tp::period>>;
+     344              :         requires same_as<typename _Tp::time_point::duration,
+     345              :                          typename _Tp::duration>;
+     346              :       }
+     347              :     inline constexpr bool is_clock_v<_Tp> = true;
+     348              : #else
+     349              :     template<typename _Tp, typename = void>
+     350              :       inline constexpr bool is_clock_v = false;
+     351              : 
+     352              :     template<typename _Tp>
+     353              :       inline constexpr bool
+     354              :       is_clock_v<_Tp, void_t<typename _Tp::rep, typename _Tp::period,
+     355              :                              typename _Tp::duration,
+     356              :                              typename _Tp::time_point::duration,
+     357              :                              decltype(_Tp::is_steady),
+     358              :                              decltype(_Tp::now())>>
+     359              :         = __and_v<is_same<typename _Tp::duration,
+     360              :                           duration<typename _Tp::rep, typename _Tp::period>>,
+     361              :                   is_same<typename _Tp::time_point::duration,
+     362              :                           typename _Tp::duration>,
+     363              :                   is_same<decltype(&_Tp::is_steady), const bool*>,
+     364              :                   is_same<decltype(_Tp::now()), typename _Tp::time_point>>;
+     365              : #endif
+     366              : 
+     367              :     template<typename _Tp>
+     368              :       struct is_clock
+     369              :       : bool_constant<is_clock_v<_Tp>>
+     370              :       { };
+     371              : #endif // C++20
+     372              : 
+     373              : #if __cplusplus >= 201703L
+     374              : # define __cpp_lib_chrono 201611L
+     375              : 
+     376              :     /** Convert a `duration` to type `ToDur` and round down.
+     377              :      *
+     378              :      * If the duration cannot be represented exactly in the result type,
+     379              :      * returns the closest value that is less than the argument.
+     380              :      *
+     381              :      * @tparam _ToDur The result type must be a `duration`.
+     382              :      * @param __d A duration.
+     383              :      * @return The value of `__d` converted to type `_ToDur`.
+     384              :      * @since C++17
+     385              :      */
+     386              :     template<typename _ToDur, typename _Rep, typename _Period>
+     387              :       [[nodiscard]] constexpr __enable_if_is_duration<_ToDur>
+     388              :       floor(const duration<_Rep, _Period>& __d)
+     389              :       {
+     390              :         auto __to = chrono::duration_cast<_ToDur>(__d);
+     391              :         if (__to > __d)
+     392              :           return __to - _ToDur{1};
+     393              :         return __to;
+     394              :       }
+     395              : 
+     396              :     /** Convert a `duration` to type `ToDur` and round up.
+     397              :      *
+     398              :      * If the duration cannot be represented exactly in the result type,
+     399              :      * returns the closest value that is greater than the argument.
+     400              :      *
+     401              :      * @tparam _ToDur The result type must be a `duration`.
+     402              :      * @param __d A duration.
+     403              :      * @return The value of `__d` converted to type `_ToDur`.
+     404              :      * @since C++17
+     405              :      */
+     406              :     template<typename _ToDur, typename _Rep, typename _Period>
+     407              :       [[nodiscard]] constexpr __enable_if_is_duration<_ToDur>
+     408              :       ceil(const duration<_Rep, _Period>& __d)
+     409              :       {
+     410              :         auto __to = chrono::duration_cast<_ToDur>(__d);
+     411              :         if (__to < __d)
+     412              :           return __to + _ToDur{1};
+     413              :         return __to;
+     414              :       }
+     415              : 
+     416              :     /** Convert a `duration` to type `ToDur` and round to the closest value.
+     417              :      *
+     418              :      * If the duration cannot be represented exactly in the result type,
+     419              :      * returns the closest value, rounding ties to even.
+     420              :      *
+     421              :      * @tparam _ToDur The result type must be a `duration` with a
+     422              :      *                non-floating-point `rep` type.
+     423              :      * @param __d A duration.
+     424              :      * @return The value of `__d` converted to type `_ToDur`.
+     425              :      * @since C++17
+     426              :      */
+     427              :     template <typename _ToDur, typename _Rep, typename _Period>
+     428              :       [[nodiscard]] constexpr
+     429              :       enable_if_t<
+     430              :         __and_<__is_duration<_ToDur>,
+     431              :                __not_<treat_as_floating_point<typename _ToDur::rep>>>::value,
+     432              :         _ToDur>
+     433              :       round(const duration<_Rep, _Period>& __d)
+     434              :       {
+     435              :         _ToDur __t0 = chrono::floor<_ToDur>(__d);
+     436              :         _ToDur __t1 = __t0 + _ToDur{1};
+     437              :         auto __diff0 = __d - __t0;
+     438              :         auto __diff1 = __t1 - __d;
+     439              :         if (__diff0 == __diff1)
+     440              :           {
+     441              :             if (__t0.count() & 1)
+     442              :               return __t1;
+     443              :             return __t0;
+     444              :           }
+     445              :         else if (__diff0 < __diff1)
+     446              :           return __t0;
+     447              :         return __t1;
+     448              :       }
+     449              : 
+     450              :     /** The absolute (non-negative) value of a duration.
+     451              :      *
+     452              :      * @param __d A duration with a signed `rep` type.
+     453              :      * @return A duration of the same type as the argument, with value |d|.
+     454              :      * @since C++17
+     455              :      */
+     456              :     template<typename _Rep, typename _Period>
+     457              :       [[nodiscard]] constexpr
+     458              :       enable_if_t<numeric_limits<_Rep>::is_signed, duration<_Rep, _Period>>
+     459              :       abs(duration<_Rep, _Period> __d)
+     460              :       {
+     461              :         if (__d >= __d.zero())
+     462              :           return __d;
+     463              :         return -__d;
+     464              :       }
+     465              : 
+     466              :     // Make chrono::ceil<D> also usable as chrono::__detail::ceil<D>.
+     467              :     namespace __detail { using chrono::ceil; }
+     468              : 
+     469              : #else // ! C++17
+     470              : 
+     471              :     // We want to use ceil even when compiling for earlier standards versions.
+     472              :     // C++11 only allows a single statement in a constexpr function, so we
+     473              :     // need to move the comparison into a separate function, __ceil_impl.
+     474              :     namespace __detail
+     475              :     {
+     476              :       template<typename _Tp, typename _Up>
+     477              :         constexpr _Tp
+     478              :         __ceil_impl(const _Tp& __t, const _Up& __u)
+     479              :         {
+     480              :           return (__t < __u) ? (__t + _Tp{1}) : __t;
+     481              :         }
+     482              : 
+     483              :       // C++11-friendly version of std::chrono::ceil<D> for internal use.
+     484              :       template<typename _ToDur, typename _Rep, typename _Period>
+     485              :         constexpr _ToDur
+     486              :         ceil(const duration<_Rep, _Period>& __d)
+     487              :         {
+     488              :           return __detail::__ceil_impl(chrono::duration_cast<_ToDur>(__d), __d);
+     489              :         }
+     490              :     }
+     491              : #endif // C++17
+     492              : 
+     493              :     /// duration_values
+     494              :     template<typename _Rep>
+     495              :       struct duration_values
+     496              :       {
+     497              :         static constexpr _Rep
+     498            0 :         zero() noexcept
+     499            0 :         { return _Rep(0); }
+     500              : 
+     501              :         static constexpr _Rep
+     502              :         max() noexcept
+     503              :         { return numeric_limits<_Rep>::max(); }
+     504              : 
+     505              :         static constexpr _Rep
+     506              :         min() noexcept
+     507              :         { return numeric_limits<_Rep>::lowest(); }
+     508              :       };
+     509              : 
+     510              :     template<typename _Rep, typename _Period>
+     511              :       class duration
+     512              :       {
+     513              :         static_assert(!__is_duration<_Rep>::value,
+     514              :                       "rep cannot be a std::chrono::duration");
+     515              :         static_assert(__is_ratio<_Period>::value,
+     516              :                       "period must be a specialization of std::ratio");
+     517              :         static_assert(_Period::num > 0, "period must be positive");
+     518              : 
+     519              :         template<typename _Rep2>
+     520              :           using __is_float = treat_as_floating_point<_Rep2>;
+     521              : 
+     522              :         static constexpr intmax_t
+     523              :         _S_gcd(intmax_t __m, intmax_t __n) noexcept
+     524              :         {
+     525              :           // Duration only allows positive periods so we don't need to
+     526              :           // handle negative values here (unlike __static_gcd and std::gcd).
+     527              : #if __cplusplus >= 201402L
+     528              :           do
+     529              :             {
+     530              :               intmax_t __rem = __m % __n;
+     531              :               __m = __n;
+     532              :               __n = __rem;
+     533              :             }
+     534              :           while (__n != 0);
+     535              :           return __m;
+     536              : #else
+     537              :           // C++11 doesn't allow loops in constexpr functions, but this
+     538              :           // recursive version can be more expensive to evaluate.
+     539              :           return (__n == 0) ? __m : _S_gcd(__n, __m % __n);
+     540              : #endif
+     541              :         }
+     542              : 
+     543              :         // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     544              :         // 2094. overflow shouldn't participate in overload resolution
+     545              :         // 3090. What is [2094] intended to mean?
+     546              :         // This only produces a valid type if no overflow occurs.
+     547              :         template<typename _R1, typename _R2,
+     548              :                  intmax_t __gcd1 = _S_gcd(_R1::num, _R2::num),
+     549              :                  intmax_t __gcd2 = _S_gcd(_R1::den, _R2::den)>
+     550              :           using __divide = ratio<(_R1::num / __gcd1) * (_R2::den / __gcd2),
+     551              :                                  (_R1::den / __gcd2) * (_R2::num / __gcd1)>;
+     552              : 
+     553              :         // _Period2 is an exact multiple of _Period
+     554              :         template<typename _Period2>
+     555              :           using __is_harmonic
+     556              :             = __bool_constant<__divide<_Period2, _Period>::den == 1>;
+     557              : 
+     558              :       public:
+     559              : 
+     560              :         using rep = _Rep;
+     561              :         using period = typename _Period::type;
+     562              : 
+     563              :         // 20.11.5.1 construction / copy / destroy
+     564              :         constexpr duration() = default;
+     565              : 
+     566              :         duration(const duration&) = default;
+     567              : 
+     568              :         // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     569              :         // 3050. Conversion specification problem in chrono::duration
+     570              :         template<typename _Rep2, typename = _Require<
+     571              :                  is_convertible<const _Rep2&, rep>,
+     572              :                  __or_<__is_float<rep>, __not_<__is_float<_Rep2>>>>>
+     573         5346 :           constexpr explicit duration(const _Rep2& __rep)
+     574         5346 :           : __r(static_cast<rep>(__rep)) { }
+     575              : 
+     576              :         template<typename _Rep2, typename _Period2, typename = _Require<
+     577              :                  is_convertible<const _Rep2&, rep>,
+     578              :                  __or_<__is_float<rep>,
+     579              :                        __and_<__is_harmonic<_Period2>,
+     580              :                               __not_<__is_float<_Rep2>>>>>>
+     581            0 :           constexpr duration(const duration<_Rep2, _Period2>& __d)
+     582            0 :           : __r(duration_cast<duration>(__d).count()) { }
+     583              : 
+     584              :         ~duration() = default;
+     585              :         duration& operator=(const duration&) = default;
+     586              : 
+     587              :         // 20.11.5.2 observer
+     588              :         constexpr rep
+     589        13028 :         count() const
+     590        13028 :         { return __r; }
+     591              : 
+     592              :         // 20.11.5.3 arithmetic
+     593              : 
+     594              :         constexpr duration<typename common_type<rep>::type, period>
+     595              :         operator+() const
+     596              :         { return duration<typename common_type<rep>::type, period>(__r); }
+     597              : 
+     598              :         constexpr duration<typename common_type<rep>::type, period>
+     599              :         operator-() const
+     600              :         { return duration<typename common_type<rep>::type, period>(-__r); }
+     601              : 
+     602              :         _GLIBCXX17_CONSTEXPR duration&
+     603              :         operator++()
+     604              :         {
+     605              :           ++__r;
+     606              :           return *this;
+     607              :         }
+     608              : 
+     609              :         _GLIBCXX17_CONSTEXPR duration
+     610              :         operator++(int)
+     611              :         { return duration(__r++); }
+     612              : 
+     613              :         _GLIBCXX17_CONSTEXPR duration&
+     614              :         operator--()
+     615              :         {
+     616              :           --__r;
+     617              :           return *this;
+     618              :         }
+     619              : 
+     620              :         _GLIBCXX17_CONSTEXPR duration
+     621              :         operator--(int)
+     622              :         { return duration(__r--); }
+     623              : 
+     624              :         _GLIBCXX17_CONSTEXPR duration&
+     625              :         operator+=(const duration& __d)
+     626              :         {
+     627              :           __r += __d.count();
+     628              :           return *this;
+     629              :         }
+     630              : 
+     631              :         _GLIBCXX17_CONSTEXPR duration&
+     632              :         operator-=(const duration& __d)
+     633              :         {
+     634              :           __r -= __d.count();
+     635              :           return *this;
+     636              :         }
+     637              : 
+     638              :         _GLIBCXX17_CONSTEXPR duration&
+     639              :         operator*=(const rep& __rhs)
+     640              :         {
+     641              :           __r *= __rhs;
+     642              :           return *this;
+     643              :         }
+     644              : 
+     645              :         _GLIBCXX17_CONSTEXPR duration&
+     646              :         operator/=(const rep& __rhs)
+     647              :         {
+     648              :           __r /= __rhs;
+     649              :           return *this;
+     650              :         }
+     651              : 
+     652              :         // DR 934.
+     653              :         template<typename _Rep2 = rep>
+     654              :           _GLIBCXX17_CONSTEXPR
+     655              :           __enable_if_t<!treat_as_floating_point<_Rep2>::value, duration&>
+     656              :           operator%=(const rep& __rhs)
+     657              :           {
+     658              :             __r %= __rhs;
+     659              :             return *this;
+     660              :           }
+     661              : 
+     662              :         template<typename _Rep2 = rep>
+     663              :           _GLIBCXX17_CONSTEXPR
+     664              :           __enable_if_t<!treat_as_floating_point<_Rep2>::value, duration&>
+     665              :           operator%=(const duration& __d)
+     666              :           {
+     667              :             __r %= __d.count();
+     668              :             return *this;
+     669              :           }
+     670              : 
+     671              :         // 20.11.5.4 special values
+     672              :         static constexpr duration
+     673            0 :         zero() noexcept
+     674            0 :         { return duration(duration_values<rep>::zero()); }
+     675              : 
+     676              :         static constexpr duration
+     677              :         min() noexcept
+     678              :         { return duration(duration_values<rep>::min()); }
+     679              : 
+     680              :         static constexpr duration
+     681              :         max() noexcept
+     682              :         { return duration(duration_values<rep>::max()); }
+     683              : 
+     684              :       private:
+     685              :         rep __r;
+     686              :       };
+     687              : 
+     688              :     /// @{
+     689              :     /// @relates std::chrono::duration
+     690              : 
+     691              :     /// The sum of two durations.
+     692              :     template<typename _Rep1, typename _Period1,
+     693              :              typename _Rep2, typename _Period2>
+     694              :       constexpr typename common_type<duration<_Rep1, _Period1>,
+     695              :                                      duration<_Rep2, _Period2>>::type
+     696              :       operator+(const duration<_Rep1, _Period1>& __lhs,
+     697              :                 const duration<_Rep2, _Period2>& __rhs)
+     698              :       {
+     699              :         typedef duration<_Rep1, _Period1>                 __dur1;
+     700              :         typedef duration<_Rep2, _Period2>                 __dur2;
+     701              :         typedef typename common_type<__dur1,__dur2>::type __cd;
+     702              :         return __cd(__cd(__lhs).count() + __cd(__rhs).count());
+     703              :       }
+     704              : 
+     705              :     /// The difference between two durations.
+     706              :     template<typename _Rep1, typename _Period1,
+     707              :              typename _Rep2, typename _Period2>
+     708              :       constexpr typename common_type<duration<_Rep1, _Period1>,
+     709              :                                      duration<_Rep2, _Period2>>::type
+     710         1782 :       operator-(const duration<_Rep1, _Period1>& __lhs,
+     711              :                 const duration<_Rep2, _Period2>& __rhs)
+     712              :       {
+     713              :         typedef duration<_Rep1, _Period1>                 __dur1;
+     714              :         typedef duration<_Rep2, _Period2>                 __dur2;
+     715              :         typedef typename common_type<__dur1,__dur2>::type __cd;
+     716         1782 :         return __cd(__cd(__lhs).count() - __cd(__rhs).count());
+     717              :       }
+     718              : 
+     719              :     /// @}
+     720              : 
+     721              :     /// @cond undocumented
+     722              : 
+     723              :     // SFINAE helper to obtain common_type<_Rep1, _Rep2> only if _Rep2
+     724              :     // is implicitly convertible to it.
+     725              :     // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     726              :     // 3050. Conversion specification problem in chrono::duration constructor
+     727              :     template<typename _Rep1, typename _Rep2,
+     728              :              typename _CRep = typename common_type<_Rep1, _Rep2>::type>
+     729              :       using __common_rep_t = typename
+     730              :         enable_if<is_convertible<const _Rep2&, _CRep>::value, _CRep>::type;
+     731              : 
+     732              :     /// @endcond
+     733              : 
+     734              :     /** @{
+     735              :      * Arithmetic operators for chrono::duration
+     736              :      * @relates std::chrono::duration
+     737              :      */
+     738              : 
+     739              :     template<typename _Rep1, typename _Period, typename _Rep2>
+     740              :       constexpr duration<__common_rep_t<_Rep1, _Rep2>, _Period>
+     741              :       operator*(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
+     742              :       {
+     743              :         typedef duration<typename common_type<_Rep1, _Rep2>::type, _Period>
+     744              :           __cd;
+     745              :         return __cd(__cd(__d).count() * __s);
+     746              :       }
+     747              : 
+     748              :     template<typename _Rep1, typename _Rep2, typename _Period>
+     749              :       constexpr duration<__common_rep_t<_Rep2, _Rep1>, _Period>
+     750              :       operator*(const _Rep1& __s, const duration<_Rep2, _Period>& __d)
+     751              :       { return __d * __s; }
+     752              : 
+     753              :     template<typename _Rep1, typename _Period, typename _Rep2>
+     754              :       constexpr
+     755              :       duration<__common_rep_t<_Rep1, __disable_if_is_duration<_Rep2>>, _Period>
+     756              :       operator/(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
+     757              :       {
+     758              :         typedef duration<typename common_type<_Rep1, _Rep2>::type, _Period>
+     759              :           __cd;
+     760              :         return __cd(__cd(__d).count() / __s);
+     761              :       }
+     762              : 
+     763              :     template<typename _Rep1, typename _Period1,
+     764              :              typename _Rep2, typename _Period2>
+     765              :       constexpr typename common_type<_Rep1, _Rep2>::type
+     766              :       operator/(const duration<_Rep1, _Period1>& __lhs,
+     767              :                 const duration<_Rep2, _Period2>& __rhs)
+     768              :       {
+     769              :         typedef duration<_Rep1, _Period1>                 __dur1;
+     770              :         typedef duration<_Rep2, _Period2>                 __dur2;
+     771              :         typedef typename common_type<__dur1,__dur2>::type __cd;
+     772              :         return __cd(__lhs).count() / __cd(__rhs).count();
+     773              :       }
+     774              : 
+     775              :     // DR 934.
+     776              :     template<typename _Rep1, typename _Period, typename _Rep2>
+     777              :       constexpr
+     778              :       duration<__common_rep_t<_Rep1, __disable_if_is_duration<_Rep2>>, _Period>
+     779              :       operator%(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
+     780              :       {
+     781              :         typedef duration<typename common_type<_Rep1, _Rep2>::type, _Period>
+     782              :           __cd;
+     783              :         return __cd(__cd(__d).count() % __s);
+     784              :       }
+     785              : 
+     786              :     template<typename _Rep1, typename _Period1,
+     787              :              typename _Rep2, typename _Period2>
+     788              :       constexpr typename common_type<duration<_Rep1, _Period1>,
+     789              :                                      duration<_Rep2, _Period2>>::type
+     790              :       operator%(const duration<_Rep1, _Period1>& __lhs,
+     791              :                 const duration<_Rep2, _Period2>& __rhs)
+     792              :       {
+     793              :         typedef duration<_Rep1, _Period1>                 __dur1;
+     794              :         typedef duration<_Rep2, _Period2>                 __dur2;
+     795              :         typedef typename common_type<__dur1,__dur2>::type __cd;
+     796              :         return __cd(__cd(__lhs).count() % __cd(__rhs).count());
+     797              :       }
+     798              :     /// @}
+     799              : 
+     800              :     // comparisons
+     801              : 
+     802              :     /** @{
+     803              :      * Comparisons for chrono::duration
+     804              :      * @relates std::chrono::duration
+     805              :      */
+     806              : 
+     807              :     template<typename _Rep1, typename _Period1,
+     808              :              typename _Rep2, typename _Period2>
+     809              :       constexpr bool
+     810              :       operator==(const duration<_Rep1, _Period1>& __lhs,
+     811              :                  const duration<_Rep2, _Period2>& __rhs)
+     812              :       {
+     813              :         typedef duration<_Rep1, _Period1>                 __dur1;
+     814              :         typedef duration<_Rep2, _Period2>                 __dur2;
+     815              :         typedef typename common_type<__dur1,__dur2>::type __ct;
+     816              :         return __ct(__lhs).count() == __ct(__rhs).count();
+     817              :       }
+     818              : 
+     819              :     template<typename _Rep1, typename _Period1,
+     820              :              typename _Rep2, typename _Period2>
+     821              :       constexpr bool
+     822            0 :       operator<(const duration<_Rep1, _Period1>& __lhs,
+     823              :                 const duration<_Rep2, _Period2>& __rhs)
+     824              :       {
+     825              :         typedef duration<_Rep1, _Period1>                 __dur1;
+     826              :         typedef duration<_Rep2, _Period2>                 __dur2;
+     827              :         typedef typename common_type<__dur1,__dur2>::type __ct;
+     828            0 :         return __ct(__lhs).count() < __ct(__rhs).count();
+     829              :       }
+     830              : 
+     831              : #if __cpp_lib_three_way_comparison
+     832              :     template<typename _Rep1, typename _Period1,
+     833              :              typename _Rep2, typename _Period2>
+     834              :       requires three_way_comparable<common_type_t<_Rep1, _Rep2>>
+     835              :       constexpr auto
+     836              :       operator<=>(const duration<_Rep1, _Period1>& __lhs,
+     837              :                   const duration<_Rep2, _Period2>& __rhs)
+     838              :       {
+     839              :         using __ct = common_type_t<duration<_Rep1, _Period1>,
+     840              :                                    duration<_Rep2, _Period2>>;
+     841              :         return __ct(__lhs).count() <=> __ct(__rhs).count();
+     842              :       }
+     843              : #else
+     844              :     template<typename _Rep1, typename _Period1,
+     845              :              typename _Rep2, typename _Period2>
+     846              :       constexpr bool
+     847              :       operator!=(const duration<_Rep1, _Period1>& __lhs,
+     848              :                  const duration<_Rep2, _Period2>& __rhs)
+     849              :       { return !(__lhs == __rhs); }
+     850              : #endif
+     851              : 
+     852              :     template<typename _Rep1, typename _Period1,
+     853              :              typename _Rep2, typename _Period2>
+     854              :       constexpr bool
+     855            0 :       operator<=(const duration<_Rep1, _Period1>& __lhs,
+     856              :                  const duration<_Rep2, _Period2>& __rhs)
+     857            0 :       { return !(__rhs < __lhs); }
+     858              : 
+     859              :     template<typename _Rep1, typename _Period1,
+     860              :              typename _Rep2, typename _Period2>
+     861              :       constexpr bool
+     862              :       operator>(const duration<_Rep1, _Period1>& __lhs,
+     863              :                 const duration<_Rep2, _Period2>& __rhs)
+     864              :       { return __rhs < __lhs; }
+     865              : 
+     866              :     template<typename _Rep1, typename _Period1,
+     867              :              typename _Rep2, typename _Period2>
+     868              :       constexpr bool
+     869              :       operator>=(const duration<_Rep1, _Period1>& __lhs,
+     870              :                  const duration<_Rep2, _Period2>& __rhs)
+     871              :       { return !(__lhs < __rhs); }
+     872              : 
+     873              :     /// @}
+     874              : 
+     875              :     /// @cond undocumented
+     876              : #ifdef _GLIBCXX_USE_C99_STDINT_TR1
+     877              : # define _GLIBCXX_CHRONO_INT64_T int64_t
+     878              : #elif defined __INT64_TYPE__
+     879              : # define _GLIBCXX_CHRONO_INT64_T __INT64_TYPE__
+     880              : #else
+     881              :     static_assert(std::numeric_limits<unsigned long long>::digits >= 64,
+     882              :         "Representation type for nanoseconds must have at least 64 bits");
+     883              : # define _GLIBCXX_CHRONO_INT64_T long long
+     884              : #endif
+     885              :     /// @endcond
+     886              : 
+     887              :     /// nanoseconds
+     888              :     using nanoseconds   = duration<_GLIBCXX_CHRONO_INT64_T, nano>;
+     889              : 
+     890              :     /// microseconds
+     891              :     using microseconds  = duration<_GLIBCXX_CHRONO_INT64_T, micro>;
+     892              : 
+     893              :     /// milliseconds
+     894              :     using milliseconds  = duration<_GLIBCXX_CHRONO_INT64_T, milli>;
+     895              : 
+     896              :     /// seconds
+     897              :     using seconds       = duration<_GLIBCXX_CHRONO_INT64_T>;
+     898              : 
+     899              :     /// minutes
+     900              :     using minutes       = duration<_GLIBCXX_CHRONO_INT64_T, ratio< 60>>;
+     901              : 
+     902              :     /// hours
+     903              :     using hours         = duration<_GLIBCXX_CHRONO_INT64_T, ratio<3600>>;
+     904              : 
+     905              : #if __cplusplus > 201703L
+     906              :     /// days
+     907              :     using days          = duration<_GLIBCXX_CHRONO_INT64_T, ratio<86400>>;
+     908              : 
+     909              :     /// weeks
+     910              :     using weeks         = duration<_GLIBCXX_CHRONO_INT64_T, ratio<604800>>;
+     911              : 
+     912              :     /// years
+     913              :     using years         = duration<_GLIBCXX_CHRONO_INT64_T, ratio<31556952>>;
+     914              : 
+     915              :     /// months
+     916              :     using months        = duration<_GLIBCXX_CHRONO_INT64_T, ratio<2629746>>;
+     917              : #endif // C++20
+     918              : 
+     919              : #undef _GLIBCXX_CHRONO_INT64_T
+     920              : 
+     921              :     template<typename _Clock, typename _Dur>
+     922              :       class time_point
+     923              :       {
+     924              :         static_assert(__is_duration<_Dur>::value,
+     925              :             "duration must be a specialization of std::chrono::duration");
+     926              : 
+     927              :       public:
+     928              :         typedef _Clock                                          clock;
+     929              :         typedef _Dur                                            duration;
+     930              :         typedef typename duration::rep                          rep;
+     931              :         typedef typename duration::period                       period;
+     932              : 
+     933              :         constexpr time_point() : __d(duration::zero())
+     934              :         { }
+     935              : 
+     936              :         constexpr explicit time_point(const duration& __dur)
+     937              :         : __d(__dur)
+     938              :         { }
+     939              : 
+     940              :         // conversions
+     941              :         template<typename _Dur2,
+     942              :                  typename = _Require<is_convertible<_Dur2, _Dur>>>
+     943              :           constexpr time_point(const time_point<clock, _Dur2>& __t)
+     944              :           : __d(__t.time_since_epoch())
+     945              :           { }
+     946              : 
+     947              :         // observer
+     948              :         constexpr duration
+     949         7682 :         time_since_epoch() const
+     950         7682 :         { return __d; }
+     951              : 
+     952              : #if __cplusplus > 201703L
+     953              :         constexpr time_point&
+     954              :         operator++()
+     955              :         {
+     956              :           ++__d;
+     957              :           return *this;
+     958              :         }
+     959              : 
+     960              :         constexpr time_point
+     961              :         operator++(int)
+     962              :         { return time_point{__d++}; }
+     963              : 
+     964              :         constexpr time_point&
+     965              :         operator--()
+     966              :         {
+     967              :           --__d;
+     968              :           return *this;
+     969              :         }
+     970              : 
+     971              :         constexpr time_point
+     972              :         operator--(int)
+     973              :         { return time_point{__d--}; }
+     974              : #endif
+     975              : 
+     976              :         // arithmetic
+     977              :         _GLIBCXX17_CONSTEXPR time_point&
+     978              :         operator+=(const duration& __dur)
+     979              :         {
+     980              :           __d += __dur;
+     981              :           return *this;
+     982              :         }
+     983              : 
+     984              :         _GLIBCXX17_CONSTEXPR time_point&
+     985              :         operator-=(const duration& __dur)
+     986              :         {
+     987              :           __d -= __dur;
+     988              :           return *this;
+     989              :         }
+     990              : 
+     991              :         // special values
+     992              :         static constexpr time_point
+     993              :         min() noexcept
+     994              :         { return time_point(duration::min()); }
+     995              : 
+     996              :         static constexpr time_point
+     997              :         max() noexcept
+     998              :         { return time_point(duration::max()); }
+     999              : 
+    1000              :       private:
+    1001              :         duration __d;
+    1002              :       };
+    1003              : 
+    1004              :     /** Convert a `time_point` to use `duration` type `ToDur`.
+    1005              :      *
+    1006              :      * The result is the same time point as measured by the same clock, but
+    1007              :      * using the specified `duration` to represent the time.
+    1008              :      * If the time point cannot be represented accurately in the result type,
+    1009              :      * returns the result of integer truncation (i.e., rounded towards zero).
+    1010              :      *
+    1011              :      * @tparam _ToDur The `duration` type to use for the result.
+    1012              :      * @param __t A time point.
+    1013              :      * @return The value of `__t` converted to use type `_ToDur`.
+    1014              :      * @since C++11
+    1015              :      */
+    1016              :     template<typename _ToDur, typename _Clock, typename _Dur>
+    1017              :       _GLIBCXX_NODISCARD constexpr
+    1018              :       __enable_if_t<__is_duration<_ToDur>::value, time_point<_Clock, _ToDur>>
+    1019              :       time_point_cast(const time_point<_Clock, _Dur>& __t)
+    1020              :       {
+    1021              :         typedef time_point<_Clock, _ToDur>                        __time_point;
+    1022              :         return __time_point(duration_cast<_ToDur>(__t.time_since_epoch()));
+    1023              :       }
+    1024              : 
+    1025              : #if __cplusplus > 201402L
+    1026              :     /** Convert a `time_point` to type `ToDur` and round down.
+    1027              :      *
+    1028              :      * The result is the same time point as measured by the same clock, but
+    1029              :      * using the specified `duration` to represent the time.
+    1030              :      * If the time point cannot be represented exactly in the result type,
+    1031              :      * returns the closest value that is less than the argument.
+    1032              :      *
+    1033              :      * @tparam _ToDur The `duration` type to use for the result.
+    1034              :      * @param __t A time point.
+    1035              :      * @return The value of `__d` converted to type `_ToDur`.
+    1036              :      * @since C++17
+    1037              :      */
+    1038              :     template<typename _ToDur, typename _Clock, typename _Dur>
+    1039              :       [[nodiscard]] constexpr
+    1040              :       enable_if_t<__is_duration_v<_ToDur>, time_point<_Clock, _ToDur>>
+    1041              :       floor(const time_point<_Clock, _Dur>& __tp)
+    1042              :       {
+    1043              :         return time_point<_Clock, _ToDur>{
+    1044              :             chrono::floor<_ToDur>(__tp.time_since_epoch())};
+    1045              :       }
+    1046              : 
+    1047              :     /** Convert a `time_point` to type `ToDur` and round up.
+    1048              :      *
+    1049              :      * The result is the same time point as measured by the same clock, but
+    1050              :      * using the specified `duration` to represent the time.
+    1051              :      * If the time point cannot be represented exactly in the result type,
+    1052              :      * returns the closest value that is greater than the argument.
+    1053              :      *
+    1054              :      * @tparam _ToDur The `duration` type to use for the result.
+    1055              :      * @param __t A time point.
+    1056              :      * @return The value of `__d` converted to type `_ToDur`.
+    1057              :      * @since C++17
+    1058              :      */
+    1059              :     template<typename _ToDur, typename _Clock, typename _Dur>
+    1060              :       [[nodiscard]] constexpr
+    1061              :       enable_if_t<__is_duration_v<_ToDur>, time_point<_Clock, _ToDur>>
+    1062              :       ceil(const time_point<_Clock, _Dur>& __tp)
+    1063              :       {
+    1064              :         return time_point<_Clock, _ToDur>{
+    1065              :             chrono::ceil<_ToDur>(__tp.time_since_epoch())};
+    1066              :       }
+    1067              : 
+    1068              :     /** Convert a `time_point` to type `ToDur` and round to the closest value.
+    1069              :      *
+    1070              :      * The result is the same time point as measured by the same clock, but
+    1071              :      * using the specified `duration` to represent the time.
+    1072              :      * If the time point cannot be represented exactly in the result type,
+    1073              :      * returns the closest value, rounding ties to even.
+    1074              :      *
+    1075              :      * @tparam _ToDur The `duration` type to use for the result,
+    1076              :      *                which must have a non-floating-point `rep` type.
+    1077              :      * @param __t A time point.
+    1078              :      * @return The value of `__d` converted to type `_ToDur`.
+    1079              :      * @since C++17
+    1080              :      */
+    1081              :     template<typename _ToDur, typename _Clock, typename _Dur>
+    1082              :       [[nodiscard]] constexpr
+    1083              :       enable_if_t<__is_duration_v<_ToDur>
+    1084              :                     && !treat_as_floating_point_v<typename _ToDur::rep>,
+    1085              :                   time_point<_Clock, _ToDur>>
+    1086              :       round(const time_point<_Clock, _Dur>& __tp)
+    1087              :       {
+    1088              :         return time_point<_Clock, _ToDur>{
+    1089              :             chrono::round<_ToDur>(__tp.time_since_epoch())};
+    1090              :       }
+    1091              : #endif // C++17
+    1092              : 
+    1093              :     /// @{
+    1094              :     /// @relates time_point
+    1095              : 
+    1096              :     /// Adjust a time point forwards by the given duration.
+    1097              :     template<typename _Clock, typename _Dur1,
+    1098              :              typename _Rep2, typename _Period2>
+    1099              :       constexpr time_point<_Clock,
+    1100              :         typename common_type<_Dur1, duration<_Rep2, _Period2>>::type>
+    1101              :       operator+(const time_point<_Clock, _Dur1>& __lhs,
+    1102              :                 const duration<_Rep2, _Period2>& __rhs)
+    1103              :       {
+    1104              :         typedef duration<_Rep2, _Period2>                 __dur2;
+    1105              :         typedef typename common_type<_Dur1,__dur2>::type  __ct;
+    1106              :         typedef time_point<_Clock, __ct>                  __time_point;
+    1107              :         return __time_point(__lhs.time_since_epoch() + __rhs);
+    1108              :       }
+    1109              : 
+    1110              :     /// Adjust a time point forwards by the given duration.
+    1111              :     template<typename _Rep1, typename _Period1,
+    1112              :              typename _Clock, typename _Dur2>
+    1113              :       constexpr time_point<_Clock,
+    1114              :         typename common_type<duration<_Rep1, _Period1>, _Dur2>::type>
+    1115              :       operator+(const duration<_Rep1, _Period1>& __lhs,
+    1116              :                 const time_point<_Clock, _Dur2>& __rhs)
+    1117              :       {
+    1118              :         typedef duration<_Rep1, _Period1>                 __dur1;
+    1119              :         typedef typename common_type<__dur1,_Dur2>::type  __ct;
+    1120              :         typedef time_point<_Clock, __ct>                  __time_point;
+    1121              :         return __time_point(__rhs.time_since_epoch() + __lhs);
+    1122              :       }
+    1123              : 
+    1124              :     /// Adjust a time point backwards by the given duration.
+    1125              :     template<typename _Clock, typename _Dur1,
+    1126              :              typename _Rep2, typename _Period2>
+    1127              :       constexpr time_point<_Clock,
+    1128              :         typename common_type<_Dur1, duration<_Rep2, _Period2>>::type>
+    1129              :       operator-(const time_point<_Clock, _Dur1>& __lhs,
+    1130              :                 const duration<_Rep2, _Period2>& __rhs)
+    1131              :       {
+    1132              :         typedef duration<_Rep2, _Period2>                 __dur2;
+    1133              :         typedef typename common_type<_Dur1,__dur2>::type  __ct;
+    1134              :         typedef time_point<_Clock, __ct>                  __time_point;
+    1135              :         return __time_point(__lhs.time_since_epoch() -__rhs);
+    1136              :       }
+    1137              : 
+    1138              :     /// The difference between two time points (as a duration)
+    1139              :     template<typename _Clock, typename _Dur1, typename _Dur2>
+    1140              :       constexpr typename common_type<_Dur1, _Dur2>::type
+    1141         1782 :       operator-(const time_point<_Clock, _Dur1>& __lhs,
+    1142              :                 const time_point<_Clock, _Dur2>& __rhs)
+    1143         1782 :       { return __lhs.time_since_epoch() - __rhs.time_since_epoch(); }
+    1144              :     /// @}
+    1145              : 
+    1146              :     /** @{
+    1147              :      * Comparisons for time_point
+    1148              :      * @relates chrono::time_point
+    1149              :      */
+    1150              : 
+    1151              :     template<typename _Clock, typename _Dur1, typename _Dur2>
+    1152              :       constexpr bool
+    1153              :       operator==(const time_point<_Clock, _Dur1>& __lhs,
+    1154              :                  const time_point<_Clock, _Dur2>& __rhs)
+    1155              :       { return __lhs.time_since_epoch() == __rhs.time_since_epoch(); }
+    1156              : 
+    1157              : #if __cpp_lib_three_way_comparison
+    1158              :     template<typename _Clock, typename _Dur1,
+    1159              :              three_way_comparable_with<_Dur1> _Dur2>
+    1160              :       constexpr auto
+    1161              :       operator<=>(const time_point<_Clock, _Dur1>& __lhs,
+    1162              :                   const time_point<_Clock, _Dur2>& __rhs)
+    1163              :       { return __lhs.time_since_epoch() <=> __rhs.time_since_epoch(); }
+    1164              : #else
+    1165              :     template<typename _Clock, typename _Dur1, typename _Dur2>
+    1166              :       constexpr bool
+    1167              :       operator!=(const time_point<_Clock, _Dur1>& __lhs,
+    1168              :                  const time_point<_Clock, _Dur2>& __rhs)
+    1169              :       { return !(__lhs == __rhs); }
+    1170              : #endif
+    1171              : 
+    1172              :     template<typename _Clock, typename _Dur1, typename _Dur2>
+    1173              :       constexpr bool
+    1174              :       operator<(const time_point<_Clock, _Dur1>& __lhs,
+    1175              :                 const time_point<_Clock, _Dur2>& __rhs)
+    1176              :       { return  __lhs.time_since_epoch() < __rhs.time_since_epoch(); }
+    1177              : 
+    1178              :     template<typename _Clock, typename _Dur1, typename _Dur2>
+    1179              :       constexpr bool
+    1180              :       operator<=(const time_point<_Clock, _Dur1>& __lhs,
+    1181              :                  const time_point<_Clock, _Dur2>& __rhs)
+    1182              :       { return !(__rhs < __lhs); }
+    1183              : 
+    1184              :     template<typename _Clock, typename _Dur1, typename _Dur2>
+    1185              :       constexpr bool
+    1186              :       operator>(const time_point<_Clock, _Dur1>& __lhs,
+    1187              :                 const time_point<_Clock, _Dur2>& __rhs)
+    1188              :       { return __rhs < __lhs; }
+    1189              : 
+    1190              :     template<typename _Clock, typename _Dur1, typename _Dur2>
+    1191              :       constexpr bool
+    1192              :       operator>=(const time_point<_Clock, _Dur1>& __lhs,
+    1193              :                  const time_point<_Clock, _Dur2>& __rhs)
+    1194              :       { return !(__lhs < __rhs); }
+    1195              : 
+    1196              :     /// @}
+    1197              :     /// @} group chrono
+    1198              : 
+    1199              :     // Clocks.
+    1200              : 
+    1201              :     // Why nanosecond resolution as the default?
+    1202              :     // Why have std::system_clock always count in the highest
+    1203              :     // resolution (ie nanoseconds), even if on some OSes the low 3
+    1204              :     // or 9 decimal digits will be always zero? This allows later
+    1205              :     // implementations to change the system_clock::now()
+    1206              :     // implementation any time to provide better resolution without
+    1207              :     // changing function signature or units.
+    1208              : 
+    1209              :     // To support the (forward) evolution of the library's defined
+    1210              :     // clocks, wrap inside inline namespace so that the current
+    1211              :     // defintions of system_clock, steady_clock, and
+    1212              :     // high_resolution_clock types are uniquely mangled. This way, new
+    1213              :     // code can use the latests clocks, while the library can contain
+    1214              :     // compatibility definitions for previous versions.  At some
+    1215              :     // point, when these clocks settle down, the inlined namespaces
+    1216              :     // can be removed.  XXX GLIBCXX_ABI Deprecated
+    1217              : _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2)
+    1218              : 
+    1219              :     /**
+    1220              :      *  @brief System clock.
+    1221              :      *
+    1222              :      *  Time returned represents wall time from the system-wide clock.
+    1223              :      *  @ingroup chrono
+    1224              :     */
+    1225              :     struct system_clock
+    1226              :     {
+    1227              :       typedef chrono::nanoseconds                               duration;
+    1228              :       typedef duration::rep                                     rep;
+    1229              :       typedef duration::period                                  period;
+    1230              :       typedef chrono::time_point<system_clock, duration>  time_point;
+    1231              : 
+    1232              :       static_assert(system_clock::duration::min()
+    1233              :                     < system_clock::duration::zero(),
+    1234              :                     "a clock's minimum duration cannot be less than its epoch");
+    1235              : 
+    1236              :       static constexpr bool is_steady = false;
+    1237              : 
+    1238              :       static time_point
+    1239              :       now() noexcept;
+    1240              : 
+    1241              :       // Map to C API
+    1242              :       static std::time_t
+    1243              :       to_time_t(const time_point& __t) noexcept
+    1244              :       {
+    1245              :         return std::time_t(duration_cast<chrono::seconds>
+    1246              :                            (__t.time_since_epoch()).count());
+    1247              :       }
+    1248              : 
+    1249              :       static time_point
+    1250              :       from_time_t(std::time_t __t) noexcept
+    1251              :       {
+    1252              :         typedef chrono::time_point<system_clock, seconds> __from;
+    1253              :         return time_point_cast<system_clock::duration>
+    1254              :                (__from(chrono::seconds(__t)));
+    1255              :       }
+    1256              :     };
+    1257              : 
+    1258              : 
+    1259              :     /**
+    1260              :      *  @brief Monotonic clock
+    1261              :      *
+    1262              :      *  Time returned has the property of only increasing at a uniform rate.
+    1263              :      *  @ingroup chrono
+    1264              :     */
+    1265              :     struct steady_clock
+    1266              :     {
+    1267              :       typedef chrono::nanoseconds                               duration;
+    1268              :       typedef duration::rep                                     rep;
+    1269              :       typedef duration::period                                  period;
+    1270              :       typedef chrono::time_point<steady_clock, duration>  time_point;
+    1271              : 
+    1272              :       static constexpr bool is_steady = true;
+    1273              : 
+    1274              :       static time_point
+    1275              :       now() noexcept;
+    1276              :     };
+    1277              : 
+    1278              : 
+    1279              :     /**
+    1280              :      *  @brief Highest-resolution clock
+    1281              :      *
+    1282              :      *  This is the clock "with the shortest tick period." Alias to
+    1283              :      *  std::system_clock until higher-than-nanosecond definitions
+    1284              :      *  become feasible.
+    1285              :      *  @ingroup chrono
+    1286              :     */
+    1287              :     using high_resolution_clock = system_clock;
+    1288              : 
+    1289              : _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
+    1290              : 
+    1291              : #if __cplusplus >= 202002L
+    1292              :     /// @addtogroup chrono
+    1293              :     /// @{
+    1294              :     template<typename _Duration>
+    1295              :       using sys_time = time_point<system_clock, _Duration>;
+    1296              :     using sys_seconds = sys_time<seconds>;
+    1297              :     using sys_days = sys_time<days>;
+    1298              : 
+    1299              :     using file_clock = ::std::filesystem::__file_clock;
+    1300              : 
+    1301              :     template<typename _Duration>
+    1302              :       using file_time = time_point<file_clock, _Duration>;
+    1303              : 
+    1304              :     template<> struct is_clock<system_clock> : true_type { };
+    1305              :     template<> struct is_clock<steady_clock> : true_type { };
+    1306              :     template<> struct is_clock<file_clock> : true_type { };
+    1307              : 
+    1308              :     template<> inline constexpr bool is_clock_v<system_clock> = true;
+    1309              :     template<> inline constexpr bool is_clock_v<steady_clock> = true;
+    1310              :     template<> inline constexpr bool is_clock_v<file_clock> = true;
+    1311              :     /// @}
+    1312              : #endif // C++20
+    1313              :   } // namespace chrono
+    1314              : 
+    1315              : #if __cplusplus >= 201402L
+    1316              : #define __cpp_lib_chrono_udls 201304L
+    1317              : 
+    1318              :   inline namespace literals
+    1319              :   {
+    1320              :   /** ISO C++ 2014  namespace for suffixes for duration literals.
+    1321              :    *
+    1322              :    * These suffixes can be used to create `chrono::duration` values with
+    1323              :    * tick periods of hours, minutes, seconds, milliseconds, microseconds
+    1324              :    * or nanoseconds. For example, `std::chrono::seconds(5)` can be written
+    1325              :    * as `5s` after making the suffix visible in the current scope.
+    1326              :    * The suffixes can be made visible by a using-directive or
+    1327              :    * using-declaration such as:
+    1328              :    *  - `using namespace std::chrono_literals;`
+    1329              :    *  - `using namespace std::literals;`
+    1330              :    *  - `using namespace std::chrono;`
+    1331              :    *  - `using namespace std;`
+    1332              :    *  - `using std::chrono_literals::operator""s;`
+    1333              :    *
+    1334              :    * The result of these suffixes on an integer literal is one of the
+    1335              :    * standard typedefs such as `std::chrono::hours`.
+    1336              :    * The result on a floating-point literal is a duration type with the
+    1337              :    * specified tick period and an unspecified floating-point representation,
+    1338              :    * for example `1.5e2ms` might be equivalent to
+    1339              :    * `chrono::duration<long double, chrono::milli>(1.5e2)`.
+    1340              :    *
+    1341              :    * @since C+14
+    1342              :    * @ingroup chrono
+    1343              :    */
+    1344              :   inline namespace chrono_literals
+    1345              :   {
+    1346              :     /// @addtogroup chrono
+    1347              :     /// @{
+    1348              : 
+    1349              : #pragma GCC diagnostic push
+    1350              : #pragma GCC diagnostic ignored "-Wliteral-suffix"
+    1351              :     /// @cond undocumented
+    1352              :     template<typename _Dur, char... _Digits>
+    1353              :       constexpr _Dur __check_overflow()
+    1354              :       {
+    1355              :         using _Val = __parse_int::_Parse_int<_Digits...>;
+    1356              :         constexpr typename _Dur::rep __repval = _Val::value;
+    1357              :         static_assert(__repval >= 0 && __repval == _Val::value,
+    1358              :                       "literal value cannot be represented by duration type");
+    1359              :         return _Dur(__repval);
+    1360              :       }
+    1361              :     /// @endcond
+    1362              : 
+    1363              :     /// Literal suffix for durations representing non-integer hours
+    1364              :     constexpr chrono::duration<long double, ratio<3600,1>>
+    1365              :     operator""h(long double __hours)
+    1366              :     { return chrono::duration<long double, ratio<3600,1>>{__hours}; }
+    1367              : 
+    1368              :     /// Literal suffix for durations of type `std::chrono::hours`
+    1369              :     template <char... _Digits>
+    1370              :       constexpr chrono::hours
+    1371              :       operator""h()
+    1372              :       { return __check_overflow<chrono::hours, _Digits...>(); }
+    1373              : 
+    1374              :     /// Literal suffix for durations representing non-integer minutes
+    1375              :     constexpr chrono::duration<long double, ratio<60,1>>
+    1376              :     operator""min(long double __mins)
+    1377              :     { return chrono::duration<long double, ratio<60,1>>{__mins}; }
+    1378              : 
+    1379              :     /// Literal suffix for durations of type `std::chrono::minutes`
+    1380              :     template <char... _Digits>
+    1381              :       constexpr chrono::minutes
+    1382              :       operator""min()
+    1383              :       { return __check_overflow<chrono::minutes, _Digits...>(); }
+    1384              : 
+    1385              :     /// Literal suffix for durations representing non-integer seconds
+    1386              :     constexpr chrono::duration<long double>
+    1387              :     operator""s(long double __secs)
+    1388              :     { return chrono::duration<long double>{__secs}; }
+    1389              : 
+    1390              :     /// Literal suffix for durations of type `std::chrono::seconds`
+    1391              :     template <char... _Digits>
+    1392              :       constexpr chrono::seconds
+    1393              :       operator""s()
+    1394              :       { return __check_overflow<chrono::seconds, _Digits...>(); }
+    1395              : 
+    1396              :     /// Literal suffix for durations representing non-integer milliseconds
+    1397              :     constexpr chrono::duration<long double, milli>
+    1398              :     operator""ms(long double __msecs)
+    1399              :     { return chrono::duration<long double, milli>{__msecs}; }
+    1400              : 
+    1401              :     /// Literal suffix for durations of type `std::chrono::milliseconds`
+    1402              :     template <char... _Digits>
+    1403              :       constexpr chrono::milliseconds
+    1404              :       operator""ms()
+    1405              :       { return __check_overflow<chrono::milliseconds, _Digits...>(); }
+    1406              : 
+    1407              :     /// Literal suffix for durations representing non-integer microseconds
+    1408              :     constexpr chrono::duration<long double, micro>
+    1409              :     operator""us(long double __usecs)
+    1410              :     { return chrono::duration<long double, micro>{__usecs}; }
+    1411              : 
+    1412              :     /// Literal suffix for durations of type `std::chrono::microseconds`
+    1413              :     template <char... _Digits>
+    1414              :       constexpr chrono::microseconds
+    1415              :       operator""us()
+    1416              :       { return __check_overflow<chrono::microseconds, _Digits...>(); }
+    1417              : 
+    1418              :     /// Literal suffix for durations representing non-integer nanoseconds
+    1419              :     constexpr chrono::duration<long double, nano>
+    1420              :     operator""ns(long double __nsecs)
+    1421              :     { return chrono::duration<long double, nano>{__nsecs}; }
+    1422              : 
+    1423              :     /// Literal suffix for durations of type `std::chrono::nanoseconds`
+    1424              :     template <char... _Digits>
+    1425              :       constexpr chrono::nanoseconds
+    1426              :       operator""ns()
+    1427              :       { return __check_overflow<chrono::nanoseconds, _Digits...>(); }
+    1428              : 
+    1429              : #pragma GCC diagnostic pop
+    1430              :     /// @}
+    1431              :   } // inline namespace chrono_literals
+    1432              :   } // inline namespace literals
+    1433              : 
+    1434              :   namespace chrono
+    1435              :   {
+    1436              :     using namespace literals::chrono_literals;
+    1437              :   } // namespace chrono
+    1438              : #endif // C++14
+    1439              : 
+    1440              : #if __cplusplus >= 201703L
+    1441              :   namespace filesystem
+    1442              :   {
+    1443              :     struct __file_clock
+    1444              :     {
+    1445              :       using duration                  = chrono::nanoseconds;
+    1446              :       using rep                       = duration::rep;
+    1447              :       using period                    = duration::period;
+    1448              :       using time_point                = chrono::time_point<__file_clock>;
+    1449              :       static constexpr bool is_steady = false;
+    1450              : 
+    1451              :       static time_point
+    1452              :       now() noexcept
+    1453              :       { return _S_from_sys(chrono::system_clock::now()); }
+    1454              : 
+    1455              : #if __cplusplus > 201703L
+    1456              :       template<typename _Dur>
+    1457              :         static
+    1458              :         chrono::file_time<common_type_t<_Dur, chrono::seconds>>
+    1459              :         from_sys(const chrono::sys_time<_Dur>& __t) noexcept
+    1460              :         { return _S_from_sys(__t); }
+    1461              : 
+    1462              :       // For internal use only
+    1463              :       template<typename _Dur>
+    1464              :         static
+    1465              :         chrono::sys_time<common_type_t<_Dur, chrono::seconds>>
+    1466              :         to_sys(const chrono::file_time<_Dur>& __t) noexcept
+    1467              :         { return _S_to_sys(__t); }
+    1468              : #endif // C++20
+    1469              : 
+    1470              :     private:
+    1471              :       using __sys_clock = chrono::system_clock;
+    1472              : 
+    1473              :       // This clock's (unspecified) epoch is 2174-01-01 00:00:00 UTC.
+    1474              :       // A signed 64-bit duration with nanosecond resolution gives roughly
+    1475              :       // +/- 292 years, which covers the 1901-2446 date range for ext4.
+    1476              :       static constexpr chrono::seconds _S_epoch_diff{6437664000};
+    1477              : 
+    1478              :     protected:
+    1479              :       // For internal use only
+    1480              :       template<typename _Dur>
+    1481              :         static
+    1482              :         chrono::time_point<__file_clock, common_type_t<_Dur, chrono::seconds>>
+    1483              :         _S_from_sys(const chrono::time_point<__sys_clock, _Dur>& __t) noexcept
+    1484              :         {
+    1485              :           using _CDur = common_type_t<_Dur, chrono::seconds>;
+    1486              :           using __file_time = chrono::time_point<__file_clock, _CDur>;
+    1487              :           return __file_time{__t.time_since_epoch()} - _S_epoch_diff;
+    1488              :         }
+    1489              : 
+    1490              :       // For internal use only
+    1491              :       template<typename _Dur>
+    1492              :         static
+    1493              :         chrono::time_point<__sys_clock, common_type_t<_Dur, chrono::seconds>>
+    1494              :         _S_to_sys(const chrono::time_point<__file_clock, _Dur>& __t) noexcept
+    1495              :         {
+    1496              :           using _CDur = common_type_t<_Dur, chrono::seconds>;
+    1497              :           using __sys_time = chrono::time_point<__sys_clock, _CDur>;
+    1498              :           return __sys_time{__t.time_since_epoch()} + _S_epoch_diff;
+    1499              :         }
+    1500              :     };
+    1501              :   } // namespace filesystem
+    1502              : #endif // C++17
+    1503              : 
+    1504              : _GLIBCXX_END_NAMESPACE_VERSION
+    1505              : } // namespace std
+    1506              : 
+    1507              : #endif // C++11
+    1508              : 
+    1509              : #endif //_GLIBCXX_CHRONO_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/cpp_type_traits.h.func-c.html b/html/usr/include/c++/13/bits/cpp_type_traits.h.func-c.html new file mode 100644 index 0000000..c61f480 --- /dev/null +++ b/html/usr/include/c++/13/bits/cpp_type_traits.h.func-c.html @@ -0,0 +1,348 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/cpp_type_traits.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - cpp_type_traits.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:57.9 %3822
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt12__miter_baseIPcET_S1_935980
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEEET_SJ_0
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEET_SB_0
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEET_S8_0
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEEET_S8_0
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS3_SaIS3_EEEEET_S9_0
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEEET_SA_0
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEET_S7_0
_ZSt12__miter_baseIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_S8_0
_ZSt12__miter_baseIPKcET_S2_0
_ZSt12__miter_baseIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEET_SE_0
_ZSt12__miter_baseIPPN8bayesnet4NodeEET_S4_0
_ZSt12__miter_baseIPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEET_S8_0
_ZSt12__miter_baseIPPlET_S2_0
_ZSt12__miter_baseIPSt6vectorIfSaIfEEET_S4_0
_ZSt12__miter_baseIPcET_S1_0
_ZSt12__miter_baseIPdET_S1_0
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES2_IS4_SaIS4_EEEEET_SA_12
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEET_S8_20
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEEET_SE_72
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEEET_S9_76
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS4_EESt6vectorIS7_SaIS7_EEEEET_SD_120
_ZSt12__miter_baseIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEET_S7_120
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEES6_ISG_SaISG_EEEEET_SL_228
_ZSt12__miter_baseIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_S7_308
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEEET_SD_316
_ZSt12__miter_baseIPSt4pairIfS0_IiiEEET_S4_380
_ZSt12__miter_baseIPKiET_S2_524
_ZSt12__miter_baseIPKdET_S2_812
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEET_S7_908
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEEET_SA_1468
_ZSt12__miter_baseIPiET_S1_4356
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEEET_SB_5144
_ZSt12__miter_baseIPfET_S1_12752
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEEEET_S8_14912
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEET_S8_16412
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEET_S7_25756
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEET_S8_48648
_ZSt12__miter_baseIPKlET_S2_802636
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/cpp_type_traits.h.func.html b/html/usr/include/c++/13/bits/cpp_type_traits.h.func.html new file mode 100644 index 0000000..cb7aee6 --- /dev/null +++ b/html/usr/include/c++/13/bits/cpp_type_traits.h.func.html @@ -0,0 +1,348 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/cpp_type_traits.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - cpp_type_traits.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:57.9 %3822
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt12__miter_baseIPcET_S1_935980
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEEET_SE_72
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEEET_SJ_0
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEEET_SB_5144
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES2_IS4_SaIS4_EEEEET_SA_12
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEET_SB_0
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEET_S8_0
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEET_S8_16412
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEEEET_S8_14912
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEEET_S8_0
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEET_S8_48648
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEET_S8_20
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS3_SaIS3_EEEEET_S9_0
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEES6_ISG_SaISG_EEEEET_SL_228
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEEET_SD_316
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEEET_SA_0
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS4_EESt6vectorIS7_SaIS7_EEEEET_SD_120
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEEET_SA_1468
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEEET_S9_76
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEET_S7_0
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEET_S7_908
_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEET_S7_25756
_ZSt12__miter_baseIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_S8_0
_ZSt12__miter_baseIPKcET_S2_0
_ZSt12__miter_baseIPKdET_S2_812
_ZSt12__miter_baseIPKiET_S2_524
_ZSt12__miter_baseIPKlET_S2_802636
_ZSt12__miter_baseIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_S7_308
_ZSt12__miter_baseIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEET_SE_0
_ZSt12__miter_baseIPPN8bayesnet4NodeEET_S4_0
_ZSt12__miter_baseIPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEET_S8_0
_ZSt12__miter_baseIPPlET_S2_0
_ZSt12__miter_baseIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEET_S7_120
_ZSt12__miter_baseIPSt4pairIfS0_IiiEEET_S4_380
_ZSt12__miter_baseIPSt6vectorIfSaIfEEET_S4_0
_ZSt12__miter_baseIPcET_S1_0
_ZSt12__miter_baseIPdET_S1_0
_ZSt12__miter_baseIPfET_S1_12752
_ZSt12__miter_baseIPiET_S1_4356
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/cpp_type_traits.h.gcov.html b/html/usr/include/c++/13/bits/cpp_type_traits.h.gcov.html new file mode 100644 index 0000000..8e413a3 --- /dev/null +++ b/html/usr/include/c++/13/bits/cpp_type_traits.h.gcov.html @@ -0,0 +1,690 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/cpp_type_traits.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - cpp_type_traits.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:57.9 %3822
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // The  -*- C++ -*- type traits classes for internal use in libstdc++
+       2              : 
+       3              : // Copyright (C) 2000-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/cpp_type_traits.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{ext/type_traits}
+      28              :  */
+      29              : 
+      30              : // Written by Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr>
+      31              : 
+      32              : #ifndef _CPP_TYPE_TRAITS_H
+      33              : #define _CPP_TYPE_TRAITS_H 1
+      34              : 
+      35              : #pragma GCC system_header
+      36              : 
+      37              : #include <bits/c++config.h>
+      38              : 
+      39              : //
+      40              : // This file provides some compile-time information about various types.
+      41              : // These representations were designed, on purpose, to be constant-expressions
+      42              : // and not types as found in <bits/type_traits.h>.  In particular, they
+      43              : // can be used in control structures and the optimizer hopefully will do
+      44              : // the obvious thing.
+      45              : //
+      46              : // Why integral expressions, and not functions nor types?
+      47              : // Firstly, these compile-time entities are used as template-arguments
+      48              : // so function return values won't work:  We need compile-time entities.
+      49              : // We're left with types and constant  integral expressions.
+      50              : // Secondly, from the point of view of ease of use, type-based compile-time
+      51              : // information is -not- *that* convenient.  One has to write lots of
+      52              : // overloaded functions and to hope that the compiler will select the right
+      53              : // one. As a net effect, the overall structure isn't very clear at first
+      54              : // glance.
+      55              : // Thirdly, partial ordering and overload resolution (of function templates)
+      56              : // is highly costly in terms of compiler-resource.  It is a Good Thing to
+      57              : // keep these resource consumption as least as possible.
+      58              : //
+      59              : // See valarray_array.h for a case use.
+      60              : //
+      61              : // -- Gaby (dosreis@cmla.ens-cachan.fr) 2000-03-06.
+      62              : //
+      63              : // Update 2005: types are also provided and <bits/type_traits.h> has been
+      64              : // removed.
+      65              : //
+      66              : 
+      67              : extern "C++" {
+      68              : 
+      69              : namespace std _GLIBCXX_VISIBILITY(default)
+      70              : {
+      71              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      72              : 
+      73              :   struct __true_type { };
+      74              :   struct __false_type { };
+      75              : 
+      76              :   template<bool>
+      77              :     struct __truth_type
+      78              :     { typedef __false_type __type; };
+      79              : 
+      80              :   template<>
+      81              :     struct __truth_type<true>
+      82              :     { typedef __true_type __type; };
+      83              : 
+      84              :   // N.B. The conversions to bool are needed due to the issue
+      85              :   // explained in c++/19404.
+      86              :   template<class _Sp, class _Tp>
+      87              :     struct __traitor
+      88              :     {
+      89              :       enum { __value = bool(_Sp::__value) || bool(_Tp::__value) };
+      90              :       typedef typename __truth_type<__value>::__type __type;
+      91              :     };
+      92              : 
+      93              :   // Compare for equality of types.
+      94              :   template<typename, typename>
+      95              :     struct __are_same
+      96              :     {
+      97              :       enum { __value = 0 };
+      98              :       typedef __false_type __type;
+      99              :     };
+     100              : 
+     101              :   template<typename _Tp>
+     102              :     struct __are_same<_Tp, _Tp>
+     103              :     {
+     104              :       enum { __value = 1 };
+     105              :       typedef __true_type __type;
+     106              :     };
+     107              : 
+     108              :   // Holds if the template-argument is a void type.
+     109              :   template<typename _Tp>
+     110              :     struct __is_void
+     111              :     {
+     112              :       enum { __value = 0 };
+     113              :       typedef __false_type __type;
+     114              :     };
+     115              : 
+     116              :   template<>
+     117              :     struct __is_void<void>
+     118              :     {
+     119              :       enum { __value = 1 };
+     120              :       typedef __true_type __type;
+     121              :     };
+     122              : 
+     123              :   //
+     124              :   // Integer types
+     125              :   //
+     126              :   template<typename _Tp>
+     127              :     struct __is_integer
+     128              :     {
+     129              :       enum { __value = 0 };
+     130              :       typedef __false_type __type;
+     131              :     };
+     132              : 
+     133              :   // Thirteen specializations (yes there are eleven standard integer
+     134              :   // types; <em>long long</em> and <em>unsigned long long</em> are
+     135              :   // supported as extensions).  Up to four target-specific __int<N>
+     136              :   // types are supported as well.
+     137              :   template<>
+     138              :     struct __is_integer<bool>
+     139              :     {
+     140              :       enum { __value = 1 };
+     141              :       typedef __true_type __type;
+     142              :     };
+     143              : 
+     144              :   template<>
+     145              :     struct __is_integer<char>
+     146              :     {
+     147              :       enum { __value = 1 };
+     148              :       typedef __true_type __type;
+     149              :     };
+     150              : 
+     151              :   template<>
+     152              :     struct __is_integer<signed char>
+     153              :     {
+     154              :       enum { __value = 1 };
+     155              :       typedef __true_type __type;
+     156              :     };
+     157              : 
+     158              :   template<>
+     159              :     struct __is_integer<unsigned char>
+     160              :     {
+     161              :       enum { __value = 1 };
+     162              :       typedef __true_type __type;
+     163              :     };
+     164              : 
+     165              : # ifdef __WCHAR_TYPE__
+     166              :   template<>
+     167              :     struct __is_integer<wchar_t>
+     168              :     {
+     169              :       enum { __value = 1 };
+     170              :       typedef __true_type __type;
+     171              :     };
+     172              : # endif
+     173              : 
+     174              : #ifdef _GLIBCXX_USE_CHAR8_T
+     175              :   template<>
+     176              :     struct __is_integer<char8_t>
+     177              :     {
+     178              :       enum { __value = 1 };
+     179              :       typedef __true_type __type;
+     180              :     };
+     181              : #endif
+     182              : 
+     183              : #if __cplusplus >= 201103L
+     184              :   template<>
+     185              :     struct __is_integer<char16_t>
+     186              :     {
+     187              :       enum { __value = 1 };
+     188              :       typedef __true_type __type;
+     189              :     };
+     190              : 
+     191              :   template<>
+     192              :     struct __is_integer<char32_t>
+     193              :     {
+     194              :       enum { __value = 1 };
+     195              :       typedef __true_type __type;
+     196              :     };
+     197              : #endif
+     198              : 
+     199              :   template<>
+     200              :     struct __is_integer<short>
+     201              :     {
+     202              :       enum { __value = 1 };
+     203              :       typedef __true_type __type;
+     204              :     };
+     205              : 
+     206              :   template<>
+     207              :     struct __is_integer<unsigned short>
+     208              :     {
+     209              :       enum { __value = 1 };
+     210              :       typedef __true_type __type;
+     211              :     };
+     212              : 
+     213              :   template<>
+     214              :     struct __is_integer<int>
+     215              :     {
+     216              :       enum { __value = 1 };
+     217              :       typedef __true_type __type;
+     218              :     };
+     219              : 
+     220              :   template<>
+     221              :     struct __is_integer<unsigned int>
+     222              :     {
+     223              :       enum { __value = 1 };
+     224              :       typedef __true_type __type;
+     225              :     };
+     226              : 
+     227              :   template<>
+     228              :     struct __is_integer<long>
+     229              :     {
+     230              :       enum { __value = 1 };
+     231              :       typedef __true_type __type;
+     232              :     };
+     233              : 
+     234              :   template<>
+     235              :     struct __is_integer<unsigned long>
+     236              :     {
+     237              :       enum { __value = 1 };
+     238              :       typedef __true_type __type;
+     239              :     };
+     240              : 
+     241              :   template<>
+     242              :     struct __is_integer<long long>
+     243              :     {
+     244              :       enum { __value = 1 };
+     245              :       typedef __true_type __type;
+     246              :     };
+     247              : 
+     248              :   template<>
+     249              :     struct __is_integer<unsigned long long>
+     250              :     {
+     251              :       enum { __value = 1 };
+     252              :       typedef __true_type __type;
+     253              :     };
+     254              : 
+     255              : #define __INT_N(TYPE)                   \
+     256              :   __extension__                         \
+     257              :   template<>                              \
+     258              :     struct __is_integer<TYPE>             \
+     259              :     {                                   \
+     260              :       enum { __value = 1 };             \
+     261              :       typedef __true_type __type;       \
+     262              :     };                                  \
+     263              :   __extension__                         \
+     264              :   template<>                              \
+     265              :     struct __is_integer<unsigned TYPE>    \
+     266              :     {                                   \
+     267              :       enum { __value = 1 };             \
+     268              :       typedef __true_type __type;       \
+     269              :     };
+     270              : 
+     271              : #ifdef __GLIBCXX_TYPE_INT_N_0
+     272              : __INT_N(__GLIBCXX_TYPE_INT_N_0)
+     273              : #endif
+     274              : #ifdef __GLIBCXX_TYPE_INT_N_1
+     275              : __INT_N(__GLIBCXX_TYPE_INT_N_1)
+     276              : #endif
+     277              : #ifdef __GLIBCXX_TYPE_INT_N_2
+     278              : __INT_N(__GLIBCXX_TYPE_INT_N_2)
+     279              : #endif
+     280              : #ifdef __GLIBCXX_TYPE_INT_N_3
+     281              : __INT_N(__GLIBCXX_TYPE_INT_N_3)
+     282              : #endif
+     283              : 
+     284              : #undef __INT_N
+     285              : 
+     286              :   //
+     287              :   // Floating point types
+     288              :   //
+     289              :   template<typename _Tp>
+     290              :     struct __is_floating
+     291              :     {
+     292              :       enum { __value = 0 };
+     293              :       typedef __false_type __type;
+     294              :     };
+     295              : 
+     296              :   // three specializations (float, double and 'long double')
+     297              :   template<>
+     298              :     struct __is_floating<float>
+     299              :     {
+     300              :       enum { __value = 1 };
+     301              :       typedef __true_type __type;
+     302              :     };
+     303              : 
+     304              :   template<>
+     305              :     struct __is_floating<double>
+     306              :     {
+     307              :       enum { __value = 1 };
+     308              :       typedef __true_type __type;
+     309              :     };
+     310              : 
+     311              :   template<>
+     312              :     struct __is_floating<long double>
+     313              :     {
+     314              :       enum { __value = 1 };
+     315              :       typedef __true_type __type;
+     316              :     };
+     317              : 
+     318              : #ifdef __STDCPP_FLOAT16_T__
+     319              :   template<>
+     320              :     struct __is_floating<_Float16>
+     321              :     {
+     322              :       enum { __value = 1 };
+     323              :       typedef __true_type __type;
+     324              :     };
+     325              : #endif
+     326              : 
+     327              : #ifdef __STDCPP_FLOAT32_T__
+     328              :   template<>
+     329              :     struct __is_floating<_Float32>
+     330              :     {
+     331              :       enum { __value = 1 };
+     332              :       typedef __true_type __type;
+     333              :     };
+     334              : #endif
+     335              : 
+     336              : #ifdef __STDCPP_FLOAT64_T__
+     337              :   template<>
+     338              :     struct __is_floating<_Float64>
+     339              :     {
+     340              :       enum { __value = 1 };
+     341              :       typedef __true_type __type;
+     342              :     };
+     343              : #endif
+     344              : 
+     345              : #ifdef __STDCPP_FLOAT128_T__
+     346              :   template<>
+     347              :     struct __is_floating<_Float128>
+     348              :     {
+     349              :       enum { __value = 1 };
+     350              :       typedef __true_type __type;
+     351              :     };
+     352              : #endif
+     353              : 
+     354              : #ifdef __STDCPP_BFLOAT16_T__
+     355              :   template<>
+     356              :     struct __is_floating<__gnu_cxx::__bfloat16_t>
+     357              :     {
+     358              :       enum { __value = 1 };
+     359              :       typedef __true_type __type;
+     360              :     };
+     361              : #endif
+     362              : 
+     363              :   //
+     364              :   // Pointer types
+     365              :   //
+     366              :   template<typename _Tp>
+     367              :     struct __is_pointer
+     368              :     {
+     369              :       enum { __value = 0 };
+     370              :       typedef __false_type __type;
+     371              :     };
+     372              : 
+     373              :   template<typename _Tp>
+     374              :     struct __is_pointer<_Tp*>
+     375              :     {
+     376              :       enum { __value = 1 };
+     377              :       typedef __true_type __type;
+     378              :     };
+     379              : 
+     380              :   //
+     381              :   // An arithmetic type is an integer type or a floating point type
+     382              :   //
+     383              :   template<typename _Tp>
+     384              :     struct __is_arithmetic
+     385              :     : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> >
+     386              :     { };
+     387              : 
+     388              :   //
+     389              :   // A scalar type is an arithmetic type or a pointer type
+     390              :   // 
+     391              :   template<typename _Tp>
+     392              :     struct __is_scalar
+     393              :     : public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> >
+     394              :     { };
+     395              : 
+     396              :   //
+     397              :   // For use in std::copy and std::find overloads for streambuf iterators.
+     398              :   //
+     399              :   template<typename _Tp>
+     400              :     struct __is_char
+     401              :     {
+     402              :       enum { __value = 0 };
+     403              :       typedef __false_type __type;
+     404              :     };
+     405              : 
+     406              :   template<>
+     407              :     struct __is_char<char>
+     408              :     {
+     409              :       enum { __value = 1 };
+     410              :       typedef __true_type __type;
+     411              :     };
+     412              : 
+     413              : #ifdef __WCHAR_TYPE__
+     414              :   template<>
+     415              :     struct __is_char<wchar_t>
+     416              :     {
+     417              :       enum { __value = 1 };
+     418              :       typedef __true_type __type;
+     419              :     };
+     420              : #endif
+     421              : 
+     422              :   template<typename _Tp>
+     423              :     struct __is_byte
+     424              :     {
+     425              :       enum { __value = 0 };
+     426              :       typedef __false_type __type;
+     427              :     };
+     428              : 
+     429              :   template<>
+     430              :     struct __is_byte<char>
+     431              :     {
+     432              :       enum { __value = 1 };
+     433              :       typedef __true_type __type;
+     434              :     };
+     435              : 
+     436              :   template<>
+     437              :     struct __is_byte<signed char>
+     438              :     {
+     439              :       enum { __value = 1 };
+     440              :       typedef __true_type __type;
+     441              :     };
+     442              : 
+     443              :   template<>
+     444              :     struct __is_byte<unsigned char>
+     445              :     {
+     446              :       enum { __value = 1 };
+     447              :       typedef __true_type __type;
+     448              :     };
+     449              : 
+     450              : #if __cplusplus >= 201703L
+     451              :   enum class byte : unsigned char;
+     452              : 
+     453              :   template<>
+     454              :     struct __is_byte<byte>
+     455              :     {
+     456              :       enum { __value = 1 };
+     457              :       typedef __true_type __type;
+     458              :     };
+     459              : #endif // C++17
+     460              : 
+     461              : #ifdef _GLIBCXX_USE_CHAR8_T
+     462              :   template<>
+     463              :     struct __is_byte<char8_t>
+     464              :     {
+     465              :       enum { __value = 1 };
+     466              :       typedef __true_type __type;
+     467              :     };
+     468              : #endif
+     469              : 
+     470              :   template<typename> struct iterator_traits;
+     471              : 
+     472              :   // A type that is safe for use with memcpy, memmove, memcmp etc.
+     473              :   template<typename _Tp>
+     474              :     struct __is_nonvolatile_trivially_copyable
+     475              :     {
+     476              :       enum { __value = __is_trivially_copyable(_Tp) };
+     477              :     };
+     478              : 
+     479              :   // Cannot use memcpy/memmove/memcmp on volatile types even if they are
+     480              :   // trivially copyable, so ensure __memcpyable<volatile int*, volatile int*>
+     481              :   // and similar will be false.
+     482              :   template<typename _Tp>
+     483              :     struct __is_nonvolatile_trivially_copyable<volatile _Tp>
+     484              :     {
+     485              :       enum { __value = 0 };
+     486              :     };
+     487              : 
+     488              :   // Whether two iterator types can be used with memcpy/memmove.
+     489              :   template<typename _OutputIter, typename _InputIter>
+     490              :     struct __memcpyable
+     491              :     {
+     492              :       enum { __value = 0 };
+     493              :     };
+     494              : 
+     495              :   template<typename _Tp>
+     496              :     struct __memcpyable<_Tp*, _Tp*>
+     497              :     : __is_nonvolatile_trivially_copyable<_Tp>
+     498              :     { };
+     499              : 
+     500              :   template<typename _Tp>
+     501              :     struct __memcpyable<_Tp*, const _Tp*>
+     502              :     : __is_nonvolatile_trivially_copyable<_Tp>
+     503              :     { };
+     504              : 
+     505              :   // Whether two iterator types can be used with memcmp.
+     506              :   // This trait only says it's well-formed to use memcmp, not that it
+     507              :   // gives the right answer for a given algorithm. So for example, std::equal
+     508              :   // needs to add additional checks that the types are integers or pointers,
+     509              :   // because other trivially copyable types can overload operator==.
+     510              :   template<typename _Iter1, typename _Iter2>
+     511              :     struct __memcmpable
+     512              :     {
+     513              :       enum { __value = 0 };
+     514              :     };
+     515              : 
+     516              :   // OK to use memcmp with pointers to trivially copyable types.
+     517              :   template<typename _Tp>
+     518              :     struct __memcmpable<_Tp*, _Tp*>
+     519              :     : __is_nonvolatile_trivially_copyable<_Tp>
+     520              :     { };
+     521              : 
+     522              :   template<typename _Tp>
+     523              :     struct __memcmpable<const _Tp*, _Tp*>
+     524              :     : __is_nonvolatile_trivially_copyable<_Tp>
+     525              :     { };
+     526              : 
+     527              :   template<typename _Tp>
+     528              :     struct __memcmpable<_Tp*, const _Tp*>
+     529              :     : __is_nonvolatile_trivially_copyable<_Tp>
+     530              :     { };
+     531              : 
+     532              :   // Whether memcmp can be used to determine ordering for a type
+     533              :   // e.g. in std::lexicographical_compare or three-way comparisons.
+     534              :   // True for unsigned integer-like types where comparing each byte in turn
+     535              :   // as an unsigned char yields the right result. This is true for all
+     536              :   // unsigned integers on big endian targets, but only unsigned narrow
+     537              :   // character types (and std::byte) on little endian targets.
+     538              :   template<typename _Tp, bool _TreatAsBytes =
+     539              : #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+     540              :         __is_integer<_Tp>::__value
+     541              : #else
+     542              :         __is_byte<_Tp>::__value
+     543              : #endif
+     544              :     >
+     545              :     struct __is_memcmp_ordered
+     546              :     {
+     547              :       static const bool __value = _Tp(-1) > _Tp(1); // is unsigned
+     548              :     };
+     549              : 
+     550              :   template<typename _Tp>
+     551              :     struct __is_memcmp_ordered<_Tp, false>
+     552              :     {
+     553              :       static const bool __value = false;
+     554              :     };
+     555              : 
+     556              :   // Whether two types can be compared using memcmp.
+     557              :   template<typename _Tp, typename _Up, bool = sizeof(_Tp) == sizeof(_Up)>
+     558              :     struct __is_memcmp_ordered_with
+     559              :     {
+     560              :       static const bool __value = __is_memcmp_ordered<_Tp>::__value
+     561              :         && __is_memcmp_ordered<_Up>::__value;
+     562              :     };
+     563              : 
+     564              :   template<typename _Tp, typename _Up>
+     565              :     struct __is_memcmp_ordered_with<_Tp, _Up, false>
+     566              :     {
+     567              :       static const bool __value = false;
+     568              :     };
+     569              : 
+     570              : #if __cplusplus >= 201703L
+     571              : #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+     572              :   // std::byte is not an integer, but it can be compared using memcmp.
+     573              :   template<>
+     574              :     struct __is_memcmp_ordered<std::byte, false>
+     575              :     { static constexpr bool __value = true; };
+     576              : #endif
+     577              : 
+     578              :   // std::byte can only be compared to itself, not to other types.
+     579              :   template<>
+     580              :     struct __is_memcmp_ordered_with<std::byte, std::byte, true>
+     581              :     { static constexpr bool __value = true; };
+     582              : 
+     583              :   template<typename _Tp, bool _SameSize>
+     584              :     struct __is_memcmp_ordered_with<_Tp, std::byte, _SameSize>
+     585              :     { static constexpr bool __value = false; };
+     586              : 
+     587              :   template<typename _Up, bool _SameSize>
+     588              :     struct __is_memcmp_ordered_with<std::byte, _Up, _SameSize>
+     589              :     { static constexpr bool __value = false; };
+     590              : #endif
+     591              : 
+     592              :   //
+     593              :   // Move iterator type
+     594              :   //
+     595              :   template<typename _Tp>
+     596              :     struct __is_move_iterator
+     597              :     {
+     598              :       enum { __value = 0 };
+     599              :       typedef __false_type __type;
+     600              :     };
+     601              : 
+     602              :   // Fallback implementation of the function in bits/stl_iterator.h used to
+     603              :   // remove the move_iterator wrapper.
+     604              :   template<typename _Iterator>
+     605              :     _GLIBCXX20_CONSTEXPR
+     606              :     inline _Iterator
+     607       935980 :     __miter_base(_Iterator __it)
+     608       935980 :     { return __it; }
+     609              : 
+     610              : _GLIBCXX_END_NAMESPACE_VERSION
+     611              : } // namespace
+     612              : } // extern "C++"
+     613              : 
+     614              : #endif //_CPP_TYPE_TRAITS_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/deque.tcc.func-c.html b/html/usr/include/c++/13/bits/deque.tcc.func-c.html new file mode 100644 index 0000000..988998c --- /dev/null +++ b/html/usr/include/c++/13/bits/deque.tcc.func-c.html @@ -0,0 +1,152 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/deque.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - deque.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %490
Test Date:2024-04-30 13:17:26Functions:0.0 %80
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE12emplace_backIJS5_EEERS5_DpOT_0
_ZNSt5dequeIlSaIlEE15_M_pop_back_auxEv0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE15_M_pop_back_auxEv0
_ZNSt5dequeIlSaIlEE15_M_pop_back_auxEv0
_ZNSt5dequeIlSaIlEE16_M_push_back_auxIJRKlEEEvDpOT_0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE16_M_push_back_auxIJRKS5_EEEvDpOT_0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE16_M_push_back_auxIJS5_EEEvDpOT_0
_ZNSt5dequeIlSaIlEE16_M_push_back_auxIJRKlEEEvDpOT_0
_ZNSt5dequeIlSaIlEE17_M_reallocate_mapEmb0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE17_M_reallocate_mapEmb0
_ZNSt5dequeIlSaIlEE17_M_reallocate_mapEmb0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/deque.tcc.func.html b/html/usr/include/c++/13/bits/deque.tcc.func.html new file mode 100644 index 0000000..ae09473 --- /dev/null +++ b/html/usr/include/c++/13/bits/deque.tcc.func.html @@ -0,0 +1,152 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/deque.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - deque.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %490
Test Date:2024-04-30 13:17:26Functions:0.0 %80
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE12emplace_backIJS5_EEERS5_DpOT_0
_ZNSt5dequeIlSaIlEE15_M_pop_back_auxEv0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE15_M_pop_back_auxEv0
_ZNSt5dequeIlSaIlEE15_M_pop_back_auxEv0
_ZNSt5dequeIlSaIlEE16_M_push_back_auxIJRKlEEEvDpOT_0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE16_M_push_back_auxIJRKS5_EEEvDpOT_0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE16_M_push_back_auxIJS5_EEEvDpOT_0
_ZNSt5dequeIlSaIlEE16_M_push_back_auxIJRKlEEEvDpOT_0
_ZNSt5dequeIlSaIlEE17_M_reallocate_mapEmb0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE17_M_reallocate_mapEmb0
_ZNSt5dequeIlSaIlEE17_M_reallocate_mapEmb0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/deque.tcc.gcov.html b/html/usr/include/c++/13/bits/deque.tcc.gcov.html new file mode 100644 index 0000000..e7c9388 --- /dev/null +++ b/html/usr/include/c++/13/bits/deque.tcc.gcov.html @@ -0,0 +1,1445 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/deque.tcc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - deque.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %490
Test Date:2024-04-30 13:17:26Functions:0.0 %80
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Deque implementation (out of line) -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1997
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/deque.tcc
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{deque}
+      54              :  */
+      55              : 
+      56              : #ifndef _DEQUE_TCC
+      57              : #define _DEQUE_TCC 1
+      58              : 
+      59              : #include <bits/stl_algobase.h>
+      60              : 
+      61              : namespace std _GLIBCXX_VISIBILITY(default)
+      62              : {
+      63              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      64              : _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
+      65              : 
+      66              : #if __cplusplus >= 201103L
+      67              :   template <typename _Tp, typename _Alloc>
+      68              :     void
+      69              :     deque<_Tp, _Alloc>::
+      70              :     _M_default_initialize()
+      71              :     {
+      72              :       _Map_pointer __cur;
+      73              :       __try
+      74              :         {
+      75              :           for (__cur = this->_M_impl._M_start._M_node;
+      76              :                __cur < this->_M_impl._M_finish._M_node;
+      77              :                ++__cur)
+      78              :             std::__uninitialized_default_a(*__cur, *__cur + _S_buffer_size(),
+      79              :                                            _M_get_Tp_allocator());
+      80              :           std::__uninitialized_default_a(this->_M_impl._M_finish._M_first,
+      81              :                                          this->_M_impl._M_finish._M_cur,
+      82              :                                          _M_get_Tp_allocator());
+      83              :         }
+      84              :       __catch(...)
+      85              :         {
+      86              :           std::_Destroy(this->_M_impl._M_start, iterator(*__cur, __cur),
+      87              :                         _M_get_Tp_allocator());
+      88              :           __throw_exception_again;
+      89              :         }
+      90              :     }
+      91              : #endif
+      92              : 
+      93              :   template <typename _Tp, typename _Alloc>
+      94              :     deque<_Tp, _Alloc>&
+      95              :     deque<_Tp, _Alloc>::
+      96              :     operator=(const deque& __x)
+      97              :     {
+      98              :       if (std::__addressof(__x) != this)
+      99              :         {
+     100              : #if __cplusplus >= 201103L
+     101              :           if (_Alloc_traits::_S_propagate_on_copy_assign())
+     102              :             {
+     103              :               if (!_Alloc_traits::_S_always_equal()
+     104              :                   && _M_get_Tp_allocator() != __x._M_get_Tp_allocator())
+     105              :                 {
+     106              :                   // Replacement allocator cannot free existing storage,
+     107              :                   // so deallocate everything and take copy of __x's data.
+     108              :                   _M_replace_map(__x, __x.get_allocator());
+     109              :                   std::__alloc_on_copy(_M_get_Tp_allocator(),
+     110              :                                        __x._M_get_Tp_allocator());
+     111              :                   return *this;
+     112              :                 }
+     113              :               std::__alloc_on_copy(_M_get_Tp_allocator(),
+     114              :                                    __x._M_get_Tp_allocator());
+     115              :             }
+     116              : #endif
+     117              :           const size_type __len = size();
+     118              :           if (__len >= __x.size())
+     119              :             _M_erase_at_end(std::copy(__x.begin(), __x.end(),
+     120              :                                       this->_M_impl._M_start));
+     121              :           else
+     122              :             {
+     123              :               const_iterator __mid = __x.begin() + difference_type(__len);
+     124              :               std::copy(__x.begin(), __mid, this->_M_impl._M_start);
+     125              :               _M_range_insert_aux(this->_M_impl._M_finish, __mid, __x.end(),
+     126              :                                   std::random_access_iterator_tag());
+     127              :             }
+     128              :         }
+     129              :       return *this;
+     130              :     }
+     131              : 
+     132              : #if __cplusplus >= 201103L
+     133              :   template<typename _Tp, typename _Alloc>
+     134              :     template<typename... _Args>
+     135              : #if __cplusplus > 201402L
+     136              :       typename deque<_Tp, _Alloc>::reference
+     137              : #else
+     138              :       void
+     139              : #endif
+     140              :       deque<_Tp, _Alloc>::
+     141              :       emplace_front(_Args&&... __args)
+     142              :       {
+     143              :         if (this->_M_impl._M_start._M_cur != this->_M_impl._M_start._M_first)
+     144              :           {
+     145              :             _Alloc_traits::construct(this->_M_impl,
+     146              :                                      this->_M_impl._M_start._M_cur - 1,
+     147              :                                      std::forward<_Args>(__args)...);
+     148              :             --this->_M_impl._M_start._M_cur;
+     149              :           }
+     150              :         else
+     151              :           _M_push_front_aux(std::forward<_Args>(__args)...);
+     152              : #if __cplusplus > 201402L
+     153              :         return front();
+     154              : #endif
+     155              :       }
+     156              : 
+     157              :   template<typename _Tp, typename _Alloc>
+     158              :     template<typename... _Args>
+     159              : #if __cplusplus > 201402L
+     160              :       typename deque<_Tp, _Alloc>::reference
+     161              : #else
+     162              :       void
+     163              : #endif
+     164            0 :       deque<_Tp, _Alloc>::
+     165              :       emplace_back(_Args&&... __args)
+     166              :       {
+     167            0 :         if (this->_M_impl._M_finish._M_cur
+     168            0 :             != this->_M_impl._M_finish._M_last - 1)
+     169              :           {
+     170            0 :             _Alloc_traits::construct(this->_M_impl,
+     171              :                                      this->_M_impl._M_finish._M_cur,
+     172              :                                      std::forward<_Args>(__args)...);
+     173            0 :             ++this->_M_impl._M_finish._M_cur;
+     174              :           }
+     175              :         else
+     176            0 :           _M_push_back_aux(std::forward<_Args>(__args)...);
+     177              : #if __cplusplus > 201402L
+     178            0 :         return back();
+     179              : #endif
+     180              :       }
+     181              : #endif
+     182              : 
+     183              : #if __cplusplus >= 201103L
+     184              :   template<typename _Tp, typename _Alloc>
+     185              :     template<typename... _Args>
+     186              :       typename deque<_Tp, _Alloc>::iterator
+     187              :       deque<_Tp, _Alloc>::
+     188              :       emplace(const_iterator __position, _Args&&... __args)
+     189              :       {
+     190              :         if (__position._M_cur == this->_M_impl._M_start._M_cur)
+     191              :           {
+     192              :             emplace_front(std::forward<_Args>(__args)...);
+     193              :             return this->_M_impl._M_start;
+     194              :           }
+     195              :         else if (__position._M_cur == this->_M_impl._M_finish._M_cur)
+     196              :           {
+     197              :             emplace_back(std::forward<_Args>(__args)...);
+     198              :             iterator __tmp = this->_M_impl._M_finish;
+     199              :             --__tmp;
+     200              :             return __tmp;
+     201              :           }
+     202              :         else
+     203              :           return _M_insert_aux(__position._M_const_cast(),
+     204              :                                std::forward<_Args>(__args)...);
+     205              :       }
+     206              : #endif
+     207              : 
+     208              :   template <typename _Tp, typename _Alloc>
+     209              :     typename deque<_Tp, _Alloc>::iterator
+     210              :     deque<_Tp, _Alloc>::
+     211              : #if __cplusplus >= 201103L
+     212              :     insert(const_iterator __position, const value_type& __x)
+     213              : #else
+     214              :     insert(iterator __position, const value_type& __x)
+     215              : #endif
+     216              :     {
+     217              :       if (__position._M_cur == this->_M_impl._M_start._M_cur)
+     218              :         {
+     219              :           push_front(__x);
+     220              :           return this->_M_impl._M_start;
+     221              :         }
+     222              :       else if (__position._M_cur == this->_M_impl._M_finish._M_cur)
+     223              :         {
+     224              :           push_back(__x);
+     225              :           iterator __tmp = this->_M_impl._M_finish;
+     226              :           --__tmp;
+     227              :           return __tmp;
+     228              :         }
+     229              :       else
+     230              :         return _M_insert_aux(__position._M_const_cast(), __x);
+     231              :    }
+     232              : 
+     233              :   template <typename _Tp, typename _Alloc>
+     234              :     typename deque<_Tp, _Alloc>::iterator
+     235              :     deque<_Tp, _Alloc>::
+     236              :     _M_erase(iterator __position)
+     237              :     {
+     238              :       iterator __next = __position;
+     239              :       ++__next;
+     240              :       const difference_type __index = __position - begin();
+     241              :       if (static_cast<size_type>(__index) < (size() >> 1))
+     242              :         {
+     243              :           if (__position != begin())
+     244              :             _GLIBCXX_MOVE_BACKWARD3(begin(), __position, __next);
+     245              :           pop_front();
+     246              :         }
+     247              :       else
+     248              :         {
+     249              :           if (__next != end())
+     250              :             _GLIBCXX_MOVE3(__next, end(), __position);
+     251              :           pop_back();
+     252              :         }
+     253              :       return begin() + __index;
+     254              :     }
+     255              : 
+     256              :   template <typename _Tp, typename _Alloc>
+     257              :     typename deque<_Tp, _Alloc>::iterator
+     258              :     deque<_Tp, _Alloc>::
+     259              :     _M_erase(iterator __first, iterator __last)
+     260              :     {
+     261              :       if (__first == __last)
+     262              :         return __first;
+     263              :       else if (__first == begin() && __last == end())
+     264              :         {
+     265              :           clear();
+     266              :           return end();
+     267              :         }
+     268              :       else
+     269              :         {
+     270              :           const difference_type __n = __last - __first;
+     271              :           const difference_type __elems_before = __first - begin();
+     272              :           if (static_cast<size_type>(__elems_before) <= (size() - __n) / 2)
+     273              :             {
+     274              :               if (__first != begin())
+     275              :                 _GLIBCXX_MOVE_BACKWARD3(begin(), __first, __last);
+     276              :               _M_erase_at_begin(begin() + __n);
+     277              :             }
+     278              :           else
+     279              :             {
+     280              :               if (__last != end())
+     281              :                 _GLIBCXX_MOVE3(__last, end(), __first);
+     282              :               _M_erase_at_end(end() - __n);
+     283              :             }
+     284              :           return begin() + __elems_before;
+     285              :         }
+     286              :     }
+     287              : 
+     288              :   template <typename _Tp, class _Alloc>
+     289              :     template <typename _InputIterator>
+     290              :       void
+     291              :       deque<_Tp, _Alloc>::
+     292              :       _M_assign_aux(_InputIterator __first, _InputIterator __last,
+     293              :                     std::input_iterator_tag)
+     294              :       {
+     295              :         iterator __cur = begin();
+     296              :         for (; __first != __last && __cur != end(); ++__cur, (void)++__first)
+     297              :           *__cur = *__first;
+     298              :         if (__first == __last)
+     299              :           _M_erase_at_end(__cur);
+     300              :         else
+     301              :           _M_range_insert_aux(end(), __first, __last,
+     302              :                               std::__iterator_category(__first));
+     303              :       }
+     304              : 
+     305              :   template <typename _Tp, typename _Alloc>
+     306              :     void
+     307              :     deque<_Tp, _Alloc>::
+     308              :     _M_fill_insert(iterator __pos, size_type __n, const value_type& __x)
+     309              :     {
+     310              :       if (__pos._M_cur == this->_M_impl._M_start._M_cur)
+     311              :         {
+     312              :           iterator __new_start = _M_reserve_elements_at_front(__n);
+     313              :           __try
+     314              :             {
+     315              :               std::__uninitialized_fill_a(__new_start, this->_M_impl._M_start,
+     316              :                                           __x, _M_get_Tp_allocator());
+     317              :               this->_M_impl._M_start = __new_start;
+     318              :             }
+     319              :           __catch(...)
+     320              :             {
+     321              :               _M_destroy_nodes(__new_start._M_node,
+     322              :                                this->_M_impl._M_start._M_node);
+     323              :               __throw_exception_again;
+     324              :             }
+     325              :         }
+     326              :       else if (__pos._M_cur == this->_M_impl._M_finish._M_cur)
+     327              :         {
+     328              :           iterator __new_finish = _M_reserve_elements_at_back(__n);
+     329              :           __try
+     330              :             {
+     331              :               std::__uninitialized_fill_a(this->_M_impl._M_finish,
+     332              :                                           __new_finish, __x,
+     333              :                                           _M_get_Tp_allocator());
+     334              :               this->_M_impl._M_finish = __new_finish;
+     335              :             }
+     336              :           __catch(...)
+     337              :             {
+     338              :               _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,
+     339              :                                __new_finish._M_node + 1);
+     340              :               __throw_exception_again;
+     341              :             }
+     342              :         }
+     343              :       else
+     344              :         _M_insert_aux(__pos, __n, __x);
+     345              :     }
+     346              : 
+     347              : #if __cplusplus >= 201103L
+     348              :   template <typename _Tp, typename _Alloc>
+     349              :     void
+     350              :     deque<_Tp, _Alloc>::
+     351              :     _M_default_append(size_type __n)
+     352              :     {
+     353              :       if (__n)
+     354              :         {
+     355              :           iterator __new_finish = _M_reserve_elements_at_back(__n);
+     356              :           __try
+     357              :             {
+     358              :               std::__uninitialized_default_a(this->_M_impl._M_finish,
+     359              :                                              __new_finish,
+     360              :                                              _M_get_Tp_allocator());
+     361              :               this->_M_impl._M_finish = __new_finish;
+     362              :             }
+     363              :           __catch(...)
+     364              :             {
+     365              :               _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,
+     366              :                                __new_finish._M_node + 1);
+     367              :               __throw_exception_again;
+     368              :             }
+     369              :         }
+     370              :     }
+     371              : 
+     372              :   template <typename _Tp, typename _Alloc>
+     373              :     bool
+     374              :     deque<_Tp, _Alloc>::
+     375              :     _M_shrink_to_fit()
+     376              :     {
+     377              :       const difference_type __front_capacity
+     378              :         = (this->_M_impl._M_start._M_cur - this->_M_impl._M_start._M_first);
+     379              :       if (__front_capacity == 0)
+     380              :         return false;
+     381              : 
+     382              :       const difference_type __back_capacity
+     383              :         = (this->_M_impl._M_finish._M_last - this->_M_impl._M_finish._M_cur);
+     384              :       if (__front_capacity + __back_capacity < _S_buffer_size())
+     385              :         return false;
+     386              : 
+     387              :       return std::__shrink_to_fit_aux<deque>::_S_do_it(*this);
+     388              :     }
+     389              : #endif
+     390              : 
+     391              :   template <typename _Tp, typename _Alloc>
+     392              :     void
+     393              :     deque<_Tp, _Alloc>::
+     394              :     _M_fill_initialize(const value_type& __value)
+     395              :     {
+     396              :       _Map_pointer __cur;
+     397              :       __try
+     398              :         {
+     399              :           for (__cur = this->_M_impl._M_start._M_node;
+     400              :                __cur < this->_M_impl._M_finish._M_node;
+     401              :                ++__cur)
+     402              :             std::__uninitialized_fill_a(*__cur, *__cur + _S_buffer_size(),
+     403              :                                         __value, _M_get_Tp_allocator());
+     404              :           std::__uninitialized_fill_a(this->_M_impl._M_finish._M_first,
+     405              :                                       this->_M_impl._M_finish._M_cur,
+     406              :                                       __value, _M_get_Tp_allocator());
+     407              :         }
+     408              :       __catch(...)
+     409              :         {
+     410              :           std::_Destroy(this->_M_impl._M_start, iterator(*__cur, __cur),
+     411              :                         _M_get_Tp_allocator());
+     412              :           __throw_exception_again;
+     413              :         }
+     414              :     }
+     415              : 
+     416              :   template <typename _Tp, typename _Alloc>
+     417              :     template <typename _InputIterator>
+     418              :       void
+     419              :       deque<_Tp, _Alloc>::
+     420              :       _M_range_initialize(_InputIterator __first, _InputIterator __last,
+     421              :                           std::input_iterator_tag)
+     422              :       {
+     423              :         this->_M_initialize_map(0);
+     424              :         __try
+     425              :           {
+     426              :             for (; __first != __last; ++__first)
+     427              : #if __cplusplus >= 201103L
+     428              :               emplace_back(*__first);
+     429              : #else
+     430              :               push_back(*__first);
+     431              : #endif
+     432              :           }
+     433              :         __catch(...)
+     434              :           {
+     435              :             clear();
+     436              :             __throw_exception_again;
+     437              :           }
+     438              :       }
+     439              : 
+     440              :   template <typename _Tp, typename _Alloc>
+     441              :     template <typename _ForwardIterator>
+     442              :       void
+     443              :       deque<_Tp, _Alloc>::
+     444              :       _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last,
+     445              :                           std::forward_iterator_tag)
+     446              :       {
+     447              :         const size_type __n = std::distance(__first, __last);
+     448              :         this->_M_initialize_map(_S_check_init_len(__n, _M_get_Tp_allocator()));
+     449              : 
+     450              :         _Map_pointer __cur_node;
+     451              :         __try
+     452              :           {
+     453              :             for (__cur_node = this->_M_impl._M_start._M_node;
+     454              :                  __cur_node < this->_M_impl._M_finish._M_node;
+     455              :                  ++__cur_node)
+     456              :               {
+     457              :                 if (__n < _S_buffer_size())
+     458              :                   __builtin_unreachable(); // See PR 100516
+     459              : 
+     460              :                 _ForwardIterator __mid = __first;
+     461              :                 std::advance(__mid, _S_buffer_size());
+     462              :                 std::__uninitialized_copy_a(__first, __mid, *__cur_node,
+     463              :                                             _M_get_Tp_allocator());
+     464              :                 __first = __mid;
+     465              :               }
+     466              :             std::__uninitialized_copy_a(__first, __last,
+     467              :                                         this->_M_impl._M_finish._M_first,
+     468              :                                         _M_get_Tp_allocator());
+     469              :           }
+     470              :         __catch(...)
+     471              :           {
+     472              :             std::_Destroy(this->_M_impl._M_start,
+     473              :                           iterator(*__cur_node, __cur_node),
+     474              :                           _M_get_Tp_allocator());
+     475              :             __throw_exception_again;
+     476              :           }
+     477              :       }
+     478              : 
+     479              :   // Called only if _M_impl._M_finish._M_cur == _M_impl._M_finish._M_last - 1.
+     480              :   template<typename _Tp, typename _Alloc>
+     481              : #if __cplusplus >= 201103L
+     482              :     template<typename... _Args>
+     483              :       void
+     484            0 :       deque<_Tp, _Alloc>::
+     485              :       _M_push_back_aux(_Args&&... __args)
+     486              : #else
+     487              :       void
+     488              :       deque<_Tp, _Alloc>::
+     489              :       _M_push_back_aux(const value_type& __t)
+     490              : #endif
+     491              :       {
+     492            0 :         if (size() == max_size())
+     493            0 :           __throw_length_error(
+     494              :               __N("cannot create std::deque larger than max_size()"));
+     495              : 
+     496            0 :         _M_reserve_map_at_back();
+     497            0 :         *(this->_M_impl._M_finish._M_node + 1) = this->_M_allocate_node();
+     498              :         __try
+     499              :           {
+     500              : #if __cplusplus >= 201103L
+     501            0 :             _Alloc_traits::construct(this->_M_impl,
+     502              :                                      this->_M_impl._M_finish._M_cur,
+     503              :                                      std::forward<_Args>(__args)...);
+     504              : #else
+     505              :             this->_M_impl.construct(this->_M_impl._M_finish._M_cur, __t);
+     506              : #endif
+     507            0 :             this->_M_impl._M_finish._M_set_node(this->_M_impl._M_finish._M_node
+     508              :                                                 + 1);
+     509            0 :             this->_M_impl._M_finish._M_cur = this->_M_impl._M_finish._M_first;
+     510              :           }
+     511              :         __catch(...)
+     512              :           {
+     513              :             _M_deallocate_node(*(this->_M_impl._M_finish._M_node + 1));
+     514              :             __throw_exception_again;
+     515              :           }
+     516            0 :       }
+     517              : 
+     518              :   // Called only if _M_impl._M_start._M_cur == _M_impl._M_start._M_first.
+     519              :   template<typename _Tp, typename _Alloc>
+     520              : #if __cplusplus >= 201103L
+     521              :     template<typename... _Args>
+     522              :       void
+     523              :       deque<_Tp, _Alloc>::
+     524              :       _M_push_front_aux(_Args&&... __args)
+     525              : #else
+     526              :       void
+     527              :       deque<_Tp, _Alloc>::
+     528              :       _M_push_front_aux(const value_type& __t)
+     529              : #endif
+     530              :       {
+     531              :         if (size() == max_size())
+     532              :           __throw_length_error(
+     533              :               __N("cannot create std::deque larger than max_size()"));
+     534              : 
+     535              :         _M_reserve_map_at_front();
+     536              :         *(this->_M_impl._M_start._M_node - 1) = this->_M_allocate_node();
+     537              :         __try
+     538              :           {
+     539              :             this->_M_impl._M_start._M_set_node(this->_M_impl._M_start._M_node
+     540              :                                                - 1);
+     541              :             this->_M_impl._M_start._M_cur = this->_M_impl._M_start._M_last - 1;
+     542              : #if __cplusplus >= 201103L
+     543              :             _Alloc_traits::construct(this->_M_impl,
+     544              :                                      this->_M_impl._M_start._M_cur,
+     545              :                                      std::forward<_Args>(__args)...);
+     546              : #else
+     547              :             this->_M_impl.construct(this->_M_impl._M_start._M_cur, __t);
+     548              : #endif
+     549              :           }
+     550              :         __catch(...)
+     551              :           {
+     552              :             ++this->_M_impl._M_start;
+     553              :             _M_deallocate_node(*(this->_M_impl._M_start._M_node - 1));
+     554              :             __throw_exception_again;
+     555              :           }
+     556              :       }
+     557              : 
+     558              :   // Called only if _M_impl._M_finish._M_cur == _M_impl._M_finish._M_first.
+     559              :   template <typename _Tp, typename _Alloc>
+     560            0 :     void deque<_Tp, _Alloc>::
+     561              :     _M_pop_back_aux()
+     562              :     {
+     563            0 :       _M_deallocate_node(this->_M_impl._M_finish._M_first);
+     564            0 :       this->_M_impl._M_finish._M_set_node(this->_M_impl._M_finish._M_node - 1);
+     565            0 :       this->_M_impl._M_finish._M_cur = this->_M_impl._M_finish._M_last - 1;
+     566            0 :       _Alloc_traits::destroy(_M_get_Tp_allocator(),
+     567              :                              this->_M_impl._M_finish._M_cur);
+     568            0 :     }
+     569              : 
+     570              :   // Called only if _M_impl._M_start._M_cur == _M_impl._M_start._M_last - 1.
+     571              :   // Note that if the deque has at least one element (a precondition for this
+     572              :   // member function), and if
+     573              :   //   _M_impl._M_start._M_cur == _M_impl._M_start._M_last,
+     574              :   // then the deque must have at least two nodes.
+     575              :   template <typename _Tp, typename _Alloc>
+     576              :     void deque<_Tp, _Alloc>::
+     577              :     _M_pop_front_aux()
+     578              :     {
+     579              :       _Alloc_traits::destroy(_M_get_Tp_allocator(),
+     580              :                              this->_M_impl._M_start._M_cur);
+     581              :       _M_deallocate_node(this->_M_impl._M_start._M_first);
+     582              :       this->_M_impl._M_start._M_set_node(this->_M_impl._M_start._M_node + 1);
+     583              :       this->_M_impl._M_start._M_cur = this->_M_impl._M_start._M_first;
+     584              :     }
+     585              : 
+     586              :   template <typename _Tp, typename _Alloc>
+     587              :     template <typename _InputIterator>
+     588              :       void
+     589              :       deque<_Tp, _Alloc>::
+     590              :       _M_range_insert_aux(iterator __pos,
+     591              :                           _InputIterator __first, _InputIterator __last,
+     592              :                           std::input_iterator_tag)
+     593              :       { std::copy(__first, __last, std::inserter(*this, __pos)); }
+     594              : 
+     595              :   template <typename _Tp, typename _Alloc>
+     596              :     template <typename _ForwardIterator>
+     597              :       void
+     598              :       deque<_Tp, _Alloc>::
+     599              :       _M_range_insert_aux(iterator __pos,
+     600              :                           _ForwardIterator __first, _ForwardIterator __last,
+     601              :                           std::forward_iterator_tag)
+     602              :       {
+     603              :         const size_type __n = std::distance(__first, __last);
+     604              :         if (__pos._M_cur == this->_M_impl._M_start._M_cur)
+     605              :           {
+     606              :             iterator __new_start = _M_reserve_elements_at_front(__n);
+     607              :             __try
+     608              :               {
+     609              :                 std::__uninitialized_copy_a(__first, __last, __new_start,
+     610              :                                             _M_get_Tp_allocator());
+     611              :                 this->_M_impl._M_start = __new_start;
+     612              :               }
+     613              :             __catch(...)
+     614              :               {
+     615              :                 _M_destroy_nodes(__new_start._M_node,
+     616              :                                  this->_M_impl._M_start._M_node);
+     617              :                 __throw_exception_again;
+     618              :               }
+     619              :           }
+     620              :         else if (__pos._M_cur == this->_M_impl._M_finish._M_cur)
+     621              :           {
+     622              :             iterator __new_finish = _M_reserve_elements_at_back(__n);
+     623              :             __try
+     624              :               {
+     625              :                 std::__uninitialized_copy_a(__first, __last,
+     626              :                                             this->_M_impl._M_finish,
+     627              :                                             _M_get_Tp_allocator());
+     628              :                 this->_M_impl._M_finish = __new_finish;
+     629              :               }
+     630              :             __catch(...)
+     631              :               {
+     632              :                 _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,
+     633              :                                  __new_finish._M_node + 1);
+     634              :                 __throw_exception_again;
+     635              :               }
+     636              :           }
+     637              :         else
+     638              :           _M_insert_aux(__pos, __first, __last, __n);
+     639              :       }
+     640              : 
+     641              :   template<typename _Tp, typename _Alloc>
+     642              : #if __cplusplus >= 201103L
+     643              :     template<typename... _Args>
+     644              :       typename deque<_Tp, _Alloc>::iterator
+     645              :       deque<_Tp, _Alloc>::
+     646              :       _M_insert_aux(iterator __pos, _Args&&... __args)
+     647              :       {
+     648              :         value_type __x_copy(std::forward<_Args>(__args)...); // XXX copy
+     649              : #else
+     650              :     typename deque<_Tp, _Alloc>::iterator
+     651              :       deque<_Tp, _Alloc>::
+     652              :       _M_insert_aux(iterator __pos, const value_type& __x)
+     653              :       {
+     654              :         value_type __x_copy = __x; // XXX copy
+     655              : #endif
+     656              :         difference_type __index = __pos - this->_M_impl._M_start;
+     657              :         if (static_cast<size_type>(__index) < size() / 2)
+     658              :           {
+     659              :             push_front(_GLIBCXX_MOVE(front()));
+     660              :             iterator __front1 = this->_M_impl._M_start;
+     661              :             ++__front1;
+     662              :             iterator __front2 = __front1;
+     663              :             ++__front2;
+     664              :             __pos = this->_M_impl._M_start + __index;
+     665              :             iterator __pos1 = __pos;
+     666              :             ++__pos1;
+     667              :             _GLIBCXX_MOVE3(__front2, __pos1, __front1);
+     668              :           }
+     669              :         else
+     670              :           {
+     671              :             push_back(_GLIBCXX_MOVE(back()));
+     672              :             iterator __back1 = this->_M_impl._M_finish;
+     673              :             --__back1;
+     674              :             iterator __back2 = __back1;
+     675              :             --__back2;
+     676              :             __pos = this->_M_impl._M_start + __index;
+     677              :             _GLIBCXX_MOVE_BACKWARD3(__pos, __back2, __back1);
+     678              :           }
+     679              :         *__pos = _GLIBCXX_MOVE(__x_copy);
+     680              :         return __pos;
+     681              :       }
+     682              : 
+     683              :   template <typename _Tp, typename _Alloc>
+     684              :     void
+     685              :     deque<_Tp, _Alloc>::
+     686              :     _M_insert_aux(iterator __pos, size_type __n, const value_type& __x)
+     687              :     {
+     688              :       const difference_type __elems_before = __pos - this->_M_impl._M_start;
+     689              :       const size_type __length = this->size();
+     690              :       value_type __x_copy = __x;
+     691              :       if (__elems_before < difference_type(__length / 2))
+     692              :         {
+     693              :           iterator __new_start = _M_reserve_elements_at_front(__n);
+     694              :           iterator __old_start = this->_M_impl._M_start;
+     695              :           __pos = this->_M_impl._M_start + __elems_before;
+     696              :           __try
+     697              :             {
+     698              :               if (__elems_before >= difference_type(__n))
+     699              :                 {
+     700              :                   iterator __start_n = (this->_M_impl._M_start
+     701              :                                         + difference_type(__n));
+     702              :                   std::__uninitialized_move_a(this->_M_impl._M_start,
+     703              :                                               __start_n, __new_start,
+     704              :                                               _M_get_Tp_allocator());
+     705              :                   this->_M_impl._M_start = __new_start;
+     706              :                   _GLIBCXX_MOVE3(__start_n, __pos, __old_start);
+     707              :                   std::fill(__pos - difference_type(__n), __pos, __x_copy);
+     708              :                 }
+     709              :               else
+     710              :                 {
+     711              :                   std::__uninitialized_move_fill(this->_M_impl._M_start,
+     712              :                                                  __pos, __new_start,
+     713              :                                                  this->_M_impl._M_start,
+     714              :                                                  __x_copy,
+     715              :                                                  _M_get_Tp_allocator());
+     716              :                   this->_M_impl._M_start = __new_start;
+     717              :                   std::fill(__old_start, __pos, __x_copy);
+     718              :                 }
+     719              :             }
+     720              :           __catch(...)
+     721              :             {
+     722              :               _M_destroy_nodes(__new_start._M_node,
+     723              :                                this->_M_impl._M_start._M_node);
+     724              :               __throw_exception_again;
+     725              :             }
+     726              :         }
+     727              :       else
+     728              :         {
+     729              :           iterator __new_finish = _M_reserve_elements_at_back(__n);
+     730              :           iterator __old_finish = this->_M_impl._M_finish;
+     731              :           const difference_type __elems_after =
+     732              :             difference_type(__length) - __elems_before;
+     733              :           __pos = this->_M_impl._M_finish - __elems_after;
+     734              :           __try
+     735              :             {
+     736              :               if (__elems_after > difference_type(__n))
+     737              :                 {
+     738              :                   iterator __finish_n = (this->_M_impl._M_finish
+     739              :                                          - difference_type(__n));
+     740              :                   std::__uninitialized_move_a(__finish_n,
+     741              :                                               this->_M_impl._M_finish,
+     742              :                                               this->_M_impl._M_finish,
+     743              :                                               _M_get_Tp_allocator());
+     744              :                   this->_M_impl._M_finish = __new_finish;
+     745              :                   _GLIBCXX_MOVE_BACKWARD3(__pos, __finish_n, __old_finish);
+     746              :                   std::fill(__pos, __pos + difference_type(__n), __x_copy);
+     747              :                 }
+     748              :               else
+     749              :                 {
+     750              :                   std::__uninitialized_fill_move(this->_M_impl._M_finish,
+     751              :                                                  __pos + difference_type(__n),
+     752              :                                                  __x_copy, __pos,
+     753              :                                                  this->_M_impl._M_finish,
+     754              :                                                  _M_get_Tp_allocator());
+     755              :                   this->_M_impl._M_finish = __new_finish;
+     756              :                   std::fill(__pos, __old_finish, __x_copy);
+     757              :                 }
+     758              :             }
+     759              :           __catch(...)
+     760              :             {
+     761              :               _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,
+     762              :                                __new_finish._M_node + 1);
+     763              :               __throw_exception_again;
+     764              :             }
+     765              :         }
+     766              :     }
+     767              : 
+     768              :   template <typename _Tp, typename _Alloc>
+     769              :     template <typename _ForwardIterator>
+     770              :       void
+     771              :       deque<_Tp, _Alloc>::
+     772              :       _M_insert_aux(iterator __pos,
+     773              :                     _ForwardIterator __first, _ForwardIterator __last,
+     774              :                     size_type __n)
+     775              :       {
+     776              :         const difference_type __elemsbefore = __pos - this->_M_impl._M_start;
+     777              :         const size_type __length = size();
+     778              :         if (static_cast<size_type>(__elemsbefore) < __length / 2)
+     779              :           {
+     780              :             iterator __new_start = _M_reserve_elements_at_front(__n);
+     781              :             iterator __old_start = this->_M_impl._M_start;
+     782              :             __pos = this->_M_impl._M_start + __elemsbefore;
+     783              :             __try
+     784              :               {
+     785              :                 if (__elemsbefore >= difference_type(__n))
+     786              :                   {
+     787              :                     iterator __start_n = (this->_M_impl._M_start
+     788              :                                           + difference_type(__n));
+     789              :                     std::__uninitialized_move_a(this->_M_impl._M_start,
+     790              :                                                 __start_n, __new_start,
+     791              :                                                 _M_get_Tp_allocator());
+     792              :                     this->_M_impl._M_start = __new_start;
+     793              :                     _GLIBCXX_MOVE3(__start_n, __pos, __old_start);
+     794              :                     std::copy(__first, __last, __pos - difference_type(__n));
+     795              :                   }
+     796              :                 else
+     797              :                   {
+     798              :                     _ForwardIterator __mid = __first;
+     799              :                     std::advance(__mid, difference_type(__n) - __elemsbefore);
+     800              :                     std::__uninitialized_move_copy(this->_M_impl._M_start,
+     801              :                                                    __pos, __first, __mid,
+     802              :                                                    __new_start,
+     803              :                                                    _M_get_Tp_allocator());
+     804              :                     this->_M_impl._M_start = __new_start;
+     805              :                     std::copy(__mid, __last, __old_start);
+     806              :                   }
+     807              :               }
+     808              :             __catch(...)
+     809              :               {
+     810              :                 _M_destroy_nodes(__new_start._M_node,
+     811              :                                  this->_M_impl._M_start._M_node);
+     812              :                 __throw_exception_again;
+     813              :               }
+     814              :           }
+     815              :         else
+     816              :         {
+     817              :           iterator __new_finish = _M_reserve_elements_at_back(__n);
+     818              :           iterator __old_finish = this->_M_impl._M_finish;
+     819              :           const difference_type __elemsafter =
+     820              :             difference_type(__length) - __elemsbefore;
+     821              :           __pos = this->_M_impl._M_finish - __elemsafter;
+     822              :           __try
+     823              :             {
+     824              :               if (__elemsafter > difference_type(__n))
+     825              :                 {
+     826              :                   iterator __finish_n = (this->_M_impl._M_finish
+     827              :                                          - difference_type(__n));
+     828              :                   std::__uninitialized_move_a(__finish_n,
+     829              :                                               this->_M_impl._M_finish,
+     830              :                                               this->_M_impl._M_finish,
+     831              :                                               _M_get_Tp_allocator());
+     832              :                   this->_M_impl._M_finish = __new_finish;
+     833              :                   _GLIBCXX_MOVE_BACKWARD3(__pos, __finish_n, __old_finish);
+     834              :                   std::copy(__first, __last, __pos);
+     835              :                 }
+     836              :               else
+     837              :                 {
+     838              :                   _ForwardIterator __mid = __first;
+     839              :                   std::advance(__mid, __elemsafter);
+     840              :                   std::__uninitialized_copy_move(__mid, __last, __pos,
+     841              :                                                  this->_M_impl._M_finish,
+     842              :                                                  this->_M_impl._M_finish,
+     843              :                                                  _M_get_Tp_allocator());
+     844              :                   this->_M_impl._M_finish = __new_finish;
+     845              :                   std::copy(__first, __mid, __pos);
+     846              :                 }
+     847              :             }
+     848              :           __catch(...)
+     849              :             {
+     850              :               _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,
+     851              :                                __new_finish._M_node + 1);
+     852              :               __throw_exception_again;
+     853              :             }
+     854              :         }
+     855              :       }
+     856              : 
+     857              :    template<typename _Tp, typename _Alloc>
+     858              :      void
+     859              :      deque<_Tp, _Alloc>::
+     860              :      _M_destroy_data_aux(iterator __first, iterator __last)
+     861              :      {
+     862              :        for (_Map_pointer __node = __first._M_node + 1;
+     863              :             __node < __last._M_node; ++__node)
+     864              :          std::_Destroy(*__node, *__node + _S_buffer_size(),
+     865              :                        _M_get_Tp_allocator());
+     866              : 
+     867              :        if (__first._M_node != __last._M_node)
+     868              :          {
+     869              :            std::_Destroy(__first._M_cur, __first._M_last,
+     870              :                          _M_get_Tp_allocator());
+     871              :            std::_Destroy(__last._M_first, __last._M_cur,
+     872              :                          _M_get_Tp_allocator());
+     873              :          }
+     874              :        else
+     875              :          std::_Destroy(__first._M_cur, __last._M_cur,
+     876              :                        _M_get_Tp_allocator());
+     877              :      }
+     878              : 
+     879              :   template <typename _Tp, typename _Alloc>
+     880              :     void
+     881              :     deque<_Tp, _Alloc>::
+     882              :     _M_new_elements_at_front(size_type __new_elems)
+     883              :     {
+     884              :       if (this->max_size() - this->size() < __new_elems)
+     885              :         __throw_length_error(__N("deque::_M_new_elements_at_front"));
+     886              : 
+     887              :       const size_type __new_nodes = ((__new_elems + _S_buffer_size() - 1)
+     888              :                                      / _S_buffer_size());
+     889              :       _M_reserve_map_at_front(__new_nodes);
+     890              :       size_type __i;
+     891              :       __try
+     892              :         {
+     893              :           for (__i = 1; __i <= __new_nodes; ++__i)
+     894              :             *(this->_M_impl._M_start._M_node - __i) = this->_M_allocate_node();
+     895              :         }
+     896              :       __catch(...)
+     897              :         {
+     898              :           for (size_type __j = 1; __j < __i; ++__j)
+     899              :             _M_deallocate_node(*(this->_M_impl._M_start._M_node - __j));
+     900              :           __throw_exception_again;
+     901              :         }
+     902              :     }
+     903              : 
+     904              :   template <typename _Tp, typename _Alloc>
+     905              :     void
+     906              :     deque<_Tp, _Alloc>::
+     907              :     _M_new_elements_at_back(size_type __new_elems)
+     908              :     {
+     909              :       if (this->max_size() - this->size() < __new_elems)
+     910              :         __throw_length_error(__N("deque::_M_new_elements_at_back"));
+     911              : 
+     912              :       const size_type __new_nodes = ((__new_elems + _S_buffer_size() - 1)
+     913              :                                      / _S_buffer_size());
+     914              :       _M_reserve_map_at_back(__new_nodes);
+     915              :       size_type __i;
+     916              :       __try
+     917              :         {
+     918              :           for (__i = 1; __i <= __new_nodes; ++__i)
+     919              :             *(this->_M_impl._M_finish._M_node + __i) = this->_M_allocate_node();
+     920              :         }
+     921              :       __catch(...)
+     922              :         {
+     923              :           for (size_type __j = 1; __j < __i; ++__j)
+     924              :             _M_deallocate_node(*(this->_M_impl._M_finish._M_node + __j));
+     925              :           __throw_exception_again;
+     926              :         }
+     927              :     }
+     928              : 
+     929              :   template <typename _Tp, typename _Alloc>
+     930              :     void
+     931            0 :     deque<_Tp, _Alloc>::
+     932              :     _M_reallocate_map(size_type __nodes_to_add, bool __add_at_front)
+     933              :     {
+     934            0 :       const size_type __old_num_nodes
+     935            0 :         = this->_M_impl._M_finish._M_node - this->_M_impl._M_start._M_node + 1;
+     936            0 :       const size_type __new_num_nodes = __old_num_nodes + __nodes_to_add;
+     937              : 
+     938              :       _Map_pointer __new_nstart;
+     939            0 :       if (this->_M_impl._M_map_size > 2 * __new_num_nodes)
+     940              :         {
+     941            0 :           __new_nstart = this->_M_impl._M_map + (this->_M_impl._M_map_size
+     942            0 :                                          - __new_num_nodes) / 2
+     943            0 :                          + (__add_at_front ? __nodes_to_add : 0);
+     944            0 :           if (__new_nstart < this->_M_impl._M_start._M_node)
+     945            0 :             std::copy(this->_M_impl._M_start._M_node,
+     946            0 :                       this->_M_impl._M_finish._M_node + 1,
+     947              :                       __new_nstart);
+     948              :           else
+     949            0 :             std::copy_backward(this->_M_impl._M_start._M_node,
+     950            0 :                                this->_M_impl._M_finish._M_node + 1,
+     951            0 :                                __new_nstart + __old_num_nodes);
+     952              :         }
+     953              :       else
+     954              :         {
+     955            0 :           size_type __new_map_size = this->_M_impl._M_map_size
+     956            0 :                                      + std::max(this->_M_impl._M_map_size,
+     957              :                                                 __nodes_to_add) + 2;
+     958              : 
+     959            0 :           _Map_pointer __new_map = this->_M_allocate_map(__new_map_size);
+     960            0 :           __new_nstart = __new_map + (__new_map_size - __new_num_nodes) / 2
+     961            0 :                          + (__add_at_front ? __nodes_to_add : 0);
+     962            0 :           std::copy(this->_M_impl._M_start._M_node,
+     963            0 :                     this->_M_impl._M_finish._M_node + 1,
+     964              :                     __new_nstart);
+     965            0 :           _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size);
+     966              : 
+     967            0 :           this->_M_impl._M_map = __new_map;
+     968            0 :           this->_M_impl._M_map_size = __new_map_size;
+     969              :         }
+     970              : 
+     971            0 :       this->_M_impl._M_start._M_set_node(__new_nstart);
+     972            0 :       this->_M_impl._M_finish._M_set_node(__new_nstart + __old_num_nodes - 1);
+     973            0 :     }
+     974              : 
+     975              : _GLIBCXX_END_NAMESPACE_CONTAINER
+     976              : 
+     977              :   // Overload for deque::iterators, exploiting the "segmented-iterator
+     978              :   // optimization".
+     979              :   template<typename _Tp, typename _VTp>
+     980              :     void
+     981              :     __fill_a1(const _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*>& __first,
+     982              :               const _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*>& __last,
+     983              :               const _VTp& __value)
+     984              :     {
+     985              :       typedef _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*> _Iter;
+     986              :       if (__first._M_node != __last._M_node)
+     987              :         {
+     988              :           std::__fill_a1(__first._M_cur, __first._M_last, __value);
+     989              : 
+     990              :           for (typename _Iter::_Map_pointer __node = __first._M_node + 1;
+     991              :                __node < __last._M_node; ++__node)
+     992              :             std::__fill_a1(*__node, *__node + _Iter::_S_buffer_size(), __value);
+     993              : 
+     994              :           std::__fill_a1(__last._M_first, __last._M_cur, __value);
+     995              :         }
+     996              :       else
+     997              :         std::__fill_a1(__first._M_cur, __last._M_cur, __value);
+     998              :     }
+     999              : 
+    1000              :   template<bool _IsMove,
+    1001              :            typename _Tp, typename _Ref, typename _Ptr, typename _OI>
+    1002              :     _OI
+    1003              :     __copy_move_dit(_GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr> __first,
+    1004              :                     _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr> __last,
+    1005              :                     _OI __result)
+    1006              :     {
+    1007              :       typedef _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr> _Iter;
+    1008              :       if (__first._M_node != __last._M_node)
+    1009              :         {
+    1010              :           __result
+    1011              :             = std::__copy_move_a1<_IsMove>(__first._M_cur, __first._M_last,
+    1012              :                                            __result);
+    1013              : 
+    1014              :           for (typename _Iter::_Map_pointer __node = __first._M_node + 1;
+    1015              :                __node != __last._M_node; ++__node)
+    1016              :             __result
+    1017              :               = std::__copy_move_a1<_IsMove>(*__node,
+    1018              :                                              *__node + _Iter::_S_buffer_size(),
+    1019              :                                              __result);
+    1020              : 
+    1021              :           return std::__copy_move_a1<_IsMove>(__last._M_first, __last._M_cur,
+    1022              :                                               __result);
+    1023              :         }
+    1024              : 
+    1025              :       return std::__copy_move_a1<_IsMove>(__first._M_cur, __last._M_cur,
+    1026              :                                           __result);
+    1027              :     }
+    1028              : 
+    1029              :   template<bool _IsMove,
+    1030              :            typename _Tp, typename _Ref, typename _Ptr, typename _OI>
+    1031              :     _OI
+    1032              :     __copy_move_a1(_GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr> __first,
+    1033              :                    _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr> __last,
+    1034              :                    _OI __result)
+    1035              :     { return __copy_move_dit<_IsMove>(__first, __last, __result); }
+    1036              : 
+    1037              :   template<bool _IsMove,
+    1038              :            typename _ITp, typename _IRef, typename _IPtr, typename _OTp>
+    1039              :     _GLIBCXX_STD_C::_Deque_iterator<_OTp, _OTp&, _OTp*>
+    1040              :     __copy_move_a1(_GLIBCXX_STD_C::_Deque_iterator<_ITp, _IRef, _IPtr> __first,
+    1041              :                    _GLIBCXX_STD_C::_Deque_iterator<_ITp, _IRef, _IPtr> __last,
+    1042              :                    _GLIBCXX_STD_C::_Deque_iterator<_OTp, _OTp&, _OTp*> __result)
+    1043              :     { return __copy_move_dit<_IsMove>(__first, __last, __result); }
+    1044              : 
+    1045              :   template<bool _IsMove, typename _II, typename _Tp>
+    1046              :     typename __gnu_cxx::__enable_if<
+    1047              :       __is_random_access_iter<_II>::__value,
+    1048              :       _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type
+    1049              :     __copy_move_a1(_II __first, _II __last,
+    1050              :                    _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*> __result)
+    1051              :     {
+    1052              :       typedef _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*> _Iter;
+    1053              :       typedef typename _Iter::difference_type difference_type;
+    1054              : 
+    1055              :       difference_type __len = __last - __first;
+    1056              :       while (__len > 0)
+    1057              :         {
+    1058              :           const difference_type __clen
+    1059              :             = std::min(__len, __result._M_last - __result._M_cur);
+    1060              :           std::__copy_move_a1<_IsMove>(__first, __first + __clen,
+    1061              :                                        __result._M_cur);
+    1062              : 
+    1063              :           __first += __clen;
+    1064              :           __result += __clen;
+    1065              :           __len -= __clen;
+    1066              :         }
+    1067              : 
+    1068              :       return __result;
+    1069              :     }
+    1070              : 
+    1071              :   template<bool _IsMove, typename _CharT>
+    1072              :     typename __gnu_cxx::__enable_if<
+    1073              :       __is_char<_CharT>::__value,
+    1074              :       _GLIBCXX_STD_C::_Deque_iterator<_CharT, _CharT&, _CharT*> >::__type
+    1075              :     __copy_move_a2(
+    1076              :         istreambuf_iterator<_CharT, char_traits<_CharT> > __first,
+    1077              :         istreambuf_iterator<_CharT, char_traits<_CharT> > __last,
+    1078              :         _GLIBCXX_STD_C::_Deque_iterator<_CharT, _CharT&, _CharT*> __result)
+    1079              :     {
+    1080              :       if (__first == __last)
+    1081              :         return __result;
+    1082              : 
+    1083              :       for (;;)
+    1084              :         {
+    1085              :           const std::ptrdiff_t __len = __result._M_last - __result._M_cur;
+    1086              :           const std::ptrdiff_t __nb
+    1087              :             = std::__copy_n_a(__first, __len, __result._M_cur, false)
+    1088              :             - __result._M_cur;
+    1089              :           __result += __nb;
+    1090              : 
+    1091              :           if (__nb != __len)
+    1092              :             break;
+    1093              :         }
+    1094              : 
+    1095              :       return __result;
+    1096              :     }
+    1097              : 
+    1098              :   template<typename _CharT, typename _Size>
+    1099              :     typename __gnu_cxx::__enable_if<
+    1100              :       __is_char<_CharT>::__value,
+    1101              :       _GLIBCXX_STD_C::_Deque_iterator<_CharT, _CharT&, _CharT*> >::__type
+    1102              :     __copy_n_a(
+    1103              :       istreambuf_iterator<_CharT, char_traits<_CharT> > __it, _Size __size,
+    1104              :       _GLIBCXX_STD_C::_Deque_iterator<_CharT, _CharT&, _CharT*> __result,
+    1105              :       bool __strict)
+    1106              :     {
+    1107              :       if (__size == 0)
+    1108              :         return __result;
+    1109              : 
+    1110              :       do
+    1111              :         {
+    1112              :           const _Size __len
+    1113              :             = std::min<_Size>(__result._M_last - __result._M_cur, __size);
+    1114              :           std::__copy_n_a(__it, __len, __result._M_cur, __strict);
+    1115              :           __result += __len;
+    1116              :           __size -= __len;
+    1117              :         }
+    1118              :       while (__size != 0);
+    1119              :       return __result;
+    1120              :     }
+    1121              : 
+    1122              :   template<bool _IsMove,
+    1123              :            typename _Tp, typename _Ref, typename _Ptr, typename _OI>
+    1124              :     _OI
+    1125              :     __copy_move_backward_dit(
+    1126              :                 _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr> __first,
+    1127              :                 _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr> __last,
+    1128              :                 _OI __result)
+    1129              :     {
+    1130              :       typedef _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr> _Iter;
+    1131              :       if (__first._M_node != __last._M_node)
+    1132              :         {
+    1133              :           __result = std::__copy_move_backward_a1<_IsMove>(
+    1134              :                 __last._M_first, __last._M_cur, __result);
+    1135              : 
+    1136              :           for (typename _Iter::_Map_pointer __node = __last._M_node - 1;
+    1137              :                __node != __first._M_node; --__node)
+    1138              :             __result = std::__copy_move_backward_a1<_IsMove>(
+    1139              :                 *__node, *__node + _Iter::_S_buffer_size(), __result);
+    1140              : 
+    1141              :           return std::__copy_move_backward_a1<_IsMove>(
+    1142              :                         __first._M_cur, __first._M_last, __result);
+    1143              :         }
+    1144              : 
+    1145              :       return std::__copy_move_backward_a1<_IsMove>(
+    1146              :                 __first._M_cur, __last._M_cur, __result);
+    1147              :     }
+    1148              : 
+    1149              :   template<bool _IsMove,
+    1150              :            typename _Tp, typename _Ref, typename _Ptr, typename _OI>
+    1151              :     _OI
+    1152              :     __copy_move_backward_a1(
+    1153              :                 _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr> __first,
+    1154              :                 _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr> __last,
+    1155              :                 _OI __result)
+    1156              :     { return __copy_move_backward_dit<_IsMove>(__first, __last, __result); }
+    1157              : 
+    1158              :   template<bool _IsMove,
+    1159              :            typename _ITp, typename _IRef, typename _IPtr, typename _OTp>
+    1160              :     _GLIBCXX_STD_C::_Deque_iterator<_OTp, _OTp&, _OTp*>
+    1161              :     __copy_move_backward_a1(
+    1162              :                 _GLIBCXX_STD_C::_Deque_iterator<_ITp, _IRef, _IPtr> __first,
+    1163              :                 _GLIBCXX_STD_C::_Deque_iterator<_ITp, _IRef, _IPtr> __last,
+    1164              :                 _GLIBCXX_STD_C::_Deque_iterator<_OTp, _OTp&, _OTp*> __result)
+    1165              :     { return __copy_move_backward_dit<_IsMove>(__first, __last, __result); }
+    1166              : 
+    1167              :   template<bool _IsMove, typename _II, typename _Tp>
+    1168              :     typename __gnu_cxx::__enable_if<
+    1169              :       __is_random_access_iter<_II>::__value,
+    1170              :       _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type
+    1171              :     __copy_move_backward_a1(_II __first, _II __last,
+    1172              :                 _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*> __result)
+    1173              :     {
+    1174              :       typedef _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*> _Iter;
+    1175              :       typedef typename _Iter::difference_type difference_type;
+    1176              : 
+    1177              :       difference_type __len = __last - __first;
+    1178              :       while (__len > 0)
+    1179              :         {
+    1180              :           difference_type __rlen = __result._M_cur - __result._M_first;
+    1181              :           _Tp* __rend = __result._M_cur;
+    1182              :           if (!__rlen)
+    1183              :             {
+    1184              :               __rlen = _Iter::_S_buffer_size();
+    1185              :               __rend = *(__result._M_node - 1) + __rlen;
+    1186              :             }
+    1187              : 
+    1188              :           const difference_type __clen = std::min(__len, __rlen);
+    1189              :           std::__copy_move_backward_a1<_IsMove>(__last - __clen, __last, __rend);
+    1190              : 
+    1191              :           __last -= __clen;
+    1192              :           __result -= __clen;
+    1193              :           __len -= __clen;
+    1194              :         }
+    1195              : 
+    1196              :       return __result;
+    1197              :     }
+    1198              : 
+    1199              :   template<typename _Tp, typename _Ref, typename _Ptr, typename _II>
+    1200              :     bool
+    1201              :     __equal_dit(
+    1202              :         const _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr>& __first1,
+    1203              :         const _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr>& __last1,
+    1204              :         _II __first2)
+    1205              :     {
+    1206              :       typedef _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr> _Iter;
+    1207              :       if (__first1._M_node != __last1._M_node)
+    1208              :         {
+    1209              :           if (!std::__equal_aux1(__first1._M_cur, __first1._M_last, __first2))
+    1210              :             return false;
+    1211              : 
+    1212              :           __first2 += __first1._M_last - __first1._M_cur;
+    1213              :           for (typename _Iter::_Map_pointer __node = __first1._M_node + 1;
+    1214              :                __node != __last1._M_node;
+    1215              :                __first2 += _Iter::_S_buffer_size(), ++__node)
+    1216              :             if (!std::__equal_aux1(*__node, *__node + _Iter::_S_buffer_size(),
+    1217              :                                   __first2))
+    1218              :               return false;
+    1219              : 
+    1220              :           return std::__equal_aux1(__last1._M_first, __last1._M_cur, __first2);
+    1221              :         }
+    1222              : 
+    1223              :       return std::__equal_aux1(__first1._M_cur, __last1._M_cur, __first2);
+    1224              :     }
+    1225              : 
+    1226              :   template<typename _Tp, typename _Ref, typename _Ptr, typename _II>
+    1227              :     typename __gnu_cxx::__enable_if<
+    1228              :       __is_random_access_iter<_II>::__value, bool>::__type
+    1229              :     __equal_aux1(_GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr> __first1,
+    1230              :                  _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr> __last1,
+    1231              :                  _II __first2)
+    1232              :     { return std::__equal_dit(__first1, __last1, __first2); }
+    1233              : 
+    1234              :   template<typename _Tp1, typename _Ref1, typename _Ptr1,
+    1235              :            typename _Tp2, typename _Ref2, typename _Ptr2>
+    1236              :     bool
+    1237              :     __equal_aux1(_GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref1, _Ptr1> __first1,
+    1238              :                  _GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref1, _Ptr1> __last1,
+    1239              :                  _GLIBCXX_STD_C::_Deque_iterator<_Tp2, _Ref2, _Ptr2> __first2)
+    1240              :     { return std::__equal_dit(__first1, __last1, __first2); }
+    1241              : 
+    1242              :   template<typename _II, typename _Tp, typename _Ref, typename _Ptr>
+    1243              :     typename __gnu_cxx::__enable_if<
+    1244              :       __is_random_access_iter<_II>::__value, bool>::__type
+    1245              :     __equal_aux1(_II __first1, _II __last1,
+    1246              :                 _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr> __first2)
+    1247              :     {
+    1248              :       typedef _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr> _Iter;
+    1249              :       typedef typename _Iter::difference_type difference_type;
+    1250              : 
+    1251              :       difference_type __len = __last1 - __first1;
+    1252              :       while (__len > 0)
+    1253              :         {
+    1254              :           const difference_type __clen
+    1255              :             = std::min(__len, __first2._M_last - __first2._M_cur);
+    1256              :           if (!std::__equal_aux1(__first1, __first1 + __clen, __first2._M_cur))
+    1257              :             return false;
+    1258              : 
+    1259              :           __first1 += __clen;
+    1260              :           __len -= __clen;
+    1261              :           __first2 += __clen;
+    1262              :         }
+    1263              : 
+    1264              :       return true;
+    1265              :     }
+    1266              : 
+    1267              :   template<typename _Tp1, typename _Ref, typename _Ptr, typename _Tp2>
+    1268              :     int
+    1269              :     __lex_cmp_dit(
+    1270              :         _GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref, _Ptr> __first1,
+    1271              :         _GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref, _Ptr> __last1,
+    1272              :         const _Tp2* __first2, const _Tp2* __last2)
+    1273              :     {
+    1274              :       const bool __simple =
+    1275              :         (__is_memcmp_ordered_with<_Tp1, _Tp2>::__value
+    1276              :          && __is_pointer<_Ptr>::__value
+    1277              : #if __cplusplus > 201703L && __cpp_lib_concepts
+    1278              :          // For C++20 iterator_traits<volatile T*>::value_type is non-volatile
+    1279              :          // so __is_byte<T> could be true, but we can't use memcmp with
+    1280              :          // volatile data.
+    1281              :          && !is_volatile_v<_Tp1>
+    1282              :          && !is_volatile_v<_Tp2>
+    1283              : #endif
+    1284              :          );
+    1285              :       typedef std::__lexicographical_compare<__simple> _Lc;
+    1286              : 
+    1287              :       while (__first1._M_node != __last1._M_node)
+    1288              :         {
+    1289              :           const ptrdiff_t __len1 = __first1._M_last - __first1._M_cur;
+    1290              :           const ptrdiff_t __len2 = __last2 - __first2;
+    1291              :           const ptrdiff_t __len = std::min(__len1, __len2);
+    1292              :           // if __len1 > __len2 this will return a positive value:
+    1293              :           if (int __ret = _Lc::__3way(__first1._M_cur, __first1._M_last,
+    1294              :                                       __first2, __first2 + __len))
+    1295              :             return __ret;
+    1296              : 
+    1297              :           __first1 += __len;
+    1298              :           __first2 += __len;
+    1299              :         }
+    1300              :       return _Lc::__3way(__first1._M_cur, __last1._M_cur,
+    1301              :                          __first2, __last2);
+    1302              :     }
+    1303              : 
+    1304              :   template<typename _Tp1, typename _Ref1, typename _Ptr1,
+    1305              :            typename _Tp2>
+    1306              :     inline bool
+    1307              :     __lexicographical_compare_aux1(
+    1308              :         _GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref1, _Ptr1> __first1,
+    1309              :         _GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref1, _Ptr1> __last1,
+    1310              :         _Tp2* __first2, _Tp2* __last2)
+    1311              :     { return std::__lex_cmp_dit(__first1, __last1, __first2, __last2) < 0; }
+    1312              : 
+    1313              :   template<typename _Tp1,
+    1314              :            typename _Tp2, typename _Ref2, typename _Ptr2>
+    1315              :     inline  bool
+    1316              :     __lexicographical_compare_aux1(_Tp1* __first1, _Tp1* __last1,
+    1317              :         _GLIBCXX_STD_C::_Deque_iterator<_Tp2, _Ref2, _Ptr2> __first2,
+    1318              :         _GLIBCXX_STD_C::_Deque_iterator<_Tp2, _Ref2, _Ptr2> __last2)
+    1319              :     { return std::__lex_cmp_dit(__first2, __last2, __first1, __last1) > 0; }
+    1320              : 
+    1321              :   template<typename _Tp1, typename _Ref1, typename _Ptr1,
+    1322              :            typename _Tp2, typename _Ref2, typename _Ptr2>
+    1323              :     inline bool
+    1324              :     __lexicographical_compare_aux1(
+    1325              :                 _GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref1, _Ptr1> __first1,
+    1326              :                 _GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref1, _Ptr1> __last1,
+    1327              :                 _GLIBCXX_STD_C::_Deque_iterator<_Tp2, _Ref2, _Ptr2> __first2,
+    1328              :                 _GLIBCXX_STD_C::_Deque_iterator<_Tp2, _Ref2, _Ptr2> __last2)
+    1329              :     {
+    1330              :       const bool __simple =
+    1331              :         (__is_memcmp_ordered_with<_Tp1, _Tp2>::__value
+    1332              :          && __is_pointer<_Ptr1>::__value
+    1333              :          && __is_pointer<_Ptr2>::__value
+    1334              : #if __cplusplus > 201703L && __cpp_lib_concepts
+    1335              :          // For C++20 iterator_traits<volatile T*>::value_type is non-volatile
+    1336              :          // so __is_byte<T> could be true, but we can't use memcmp with
+    1337              :          // volatile data.
+    1338              :          && !is_volatile_v<_Tp1>
+    1339              :          && !is_volatile_v<_Tp2>
+    1340              : #endif
+    1341              :          );
+    1342              :       typedef std::__lexicographical_compare<__simple> _Lc;
+    1343              : 
+    1344              :       while (__first1 != __last1)
+    1345              :         {
+    1346              :           const ptrdiff_t __len2 = __first2._M_node == __last2._M_node
+    1347              :             ? __last2._M_cur - __first2._M_cur
+    1348              :             : __first2._M_last - __first2._M_cur;
+    1349              :           if (__len2 == 0)
+    1350              :             return false;
+    1351              :           const ptrdiff_t __len1 = __first1._M_node == __last1._M_node
+    1352              :             ? __last1._M_cur - __first1._M_cur
+    1353              :             : __first1._M_last - __first1._M_cur;
+    1354              :           const ptrdiff_t __len = std::min(__len1, __len2);
+    1355              :           if (int __ret = _Lc::__3way(__first1._M_cur, __first1._M_cur + __len,
+    1356              :                                       __first2._M_cur, __first2._M_cur + __len))
+    1357              :             return __ret < 0;
+    1358              : 
+    1359              :           __first1 += __len;
+    1360              :           __first2 += __len;
+    1361              :         }
+    1362              : 
+    1363              :       return __last2 != __first2;
+    1364              :     }
+    1365              : 
+    1366              : _GLIBCXX_END_NAMESPACE_VERSION
+    1367              : } // namespace std
+    1368              : 
+    1369              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/exception.h.func-c.html b/html/usr/include/c++/13/bits/exception.h.func-c.html new file mode 100644 index 0000000..820d10b --- /dev/null +++ b/html/usr/include/c++/13/bits/exception.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/exception.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - exception.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %10
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt9exceptionC2Ev0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/exception.h.func.html b/html/usr/include/c++/13/bits/exception.h.func.html new file mode 100644 index 0000000..a2fc61b --- /dev/null +++ b/html/usr/include/c++/13/bits/exception.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/exception.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - exception.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %10
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt9exceptionC2Ev0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/exception.h.gcov.html b/html/usr/include/c++/13/bits/exception.h.gcov.html new file mode 100644 index 0000000..4ed7b61 --- /dev/null +++ b/html/usr/include/c++/13/bits/exception.h.gcov.html @@ -0,0 +1,159 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/exception.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - exception.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %10
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Exception Handling support header for -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2016-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of GCC.
+       6              : //
+       7              : // GCC is free software; you can redistribute it and/or modify
+       8              : // it under the terms of the GNU General Public License as published by
+       9              : // the Free Software Foundation; either version 3, or (at your option)
+      10              : // any later version.
+      11              : //
+      12              : // GCC is distributed in the hope that it will be useful,
+      13              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      14              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      15              : // GNU General Public License for more details.
+      16              : //
+      17              : // Under Section 7 of GPL version 3, you are granted additional
+      18              : // permissions described in the GCC Runtime Library Exception, version
+      19              : // 3.1, as published by the Free Software Foundation.
+      20              : 
+      21              : // You should have received a copy of the GNU General Public License and
+      22              : // a copy of the GCC Runtime Library Exception along with this program;
+      23              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      24              : // <http://www.gnu.org/licenses/>.
+      25              : 
+      26              : /** @file bits/exception.h
+      27              :  *  This is an internal header file, included by other library headers.
+      28              :  *  Do not attempt to use it directly.
+      29              :  */
+      30              : 
+      31              : #ifndef __EXCEPTION_H
+      32              : #define __EXCEPTION_H 1
+      33              : 
+      34              : #pragma GCC system_header
+      35              : 
+      36              : #include <bits/c++config.h>
+      37              : 
+      38              : extern "C++" {
+      39              : 
+      40              : namespace std _GLIBCXX_VISIBILITY(default)
+      41              : {
+      42              :   /**
+      43              :    * @defgroup exceptions Exceptions
+      44              :    * @ingroup diagnostics
+      45              :    * @since C++98
+      46              :    *
+      47              :    * Classes and functions for reporting errors via exceptions.
+      48              :    * @{
+      49              :    */
+      50              : 
+      51              :   /**
+      52              :    *  @brief Base class for all library exceptions.
+      53              :    *
+      54              :    *  This is the base class for all exceptions thrown by the standard
+      55              :    *  library, and by certain language expressions.  You are free to derive
+      56              :    *  your own %exception classes, or use a different hierarchy, or to
+      57              :    *  throw non-class data (e.g., fundamental types).
+      58              :    */
+      59              :   class exception
+      60              :   {
+      61              :   public:
+      62            0 :     exception() _GLIBCXX_NOTHROW { }
+      63              :     virtual ~exception() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
+      64              : #if __cplusplus >= 201103L
+      65              :     exception(const exception&) = default;
+      66              :     exception& operator=(const exception&) = default;
+      67              :     exception(exception&&) = default;
+      68              :     exception& operator=(exception&&) = default;
+      69              : #endif
+      70              : 
+      71              :     /** Returns a C-style character string describing the general cause
+      72              :      *  of the current error.  */
+      73              :     virtual const char*
+      74              :     what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
+      75              :   };
+      76              : 
+      77              :   /// @}
+      78              : 
+      79              : } // namespace std
+      80              : 
+      81              : }
+      82              : 
+      83              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/functional_hash.h.func-c.html b/html/usr/include/c++/13/bits/functional_hash.h.func-c.html new file mode 100644 index 0000000..b903a00 --- /dev/null +++ b/html/usr/include/c++/13/bits/functional_hash.h.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/functional_hash.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - functional_hash.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %33
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt10_Hash_impl4hashEPKvmm66742
_ZNKSt4hashIiEclEi6061478
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/functional_hash.h.func.html b/html/usr/include/c++/13/bits/functional_hash.h.func.html new file mode 100644 index 0000000..54b42cd --- /dev/null +++ b/html/usr/include/c++/13/bits/functional_hash.h.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/functional_hash.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - functional_hash.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %33
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt4hashIiEclEi6061478
_ZNSt10_Hash_impl4hashEPKvmm66742
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/functional_hash.h.gcov.html b/html/usr/include/c++/13/bits/functional_hash.h.gcov.html new file mode 100644 index 0000000..ef00419 --- /dev/null +++ b/html/usr/include/c++/13/bits/functional_hash.h.gcov.html @@ -0,0 +1,381 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/functional_hash.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - functional_hash.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %33
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // functional_hash.h header -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2007-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/functional_hash.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{functional}
+      28              :  */
+      29              : 
+      30              : #ifndef _FUNCTIONAL_HASH_H
+      31              : #define _FUNCTIONAL_HASH_H 1
+      32              : 
+      33              : #pragma GCC system_header
+      34              : 
+      35              : #include <type_traits>
+      36              : #include <bits/hash_bytes.h>
+      37              : 
+      38              : namespace std _GLIBCXX_VISIBILITY(default)
+      39              : {
+      40              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      41              : 
+      42              :   /** @defgroup hashes Hashes
+      43              :    *  @ingroup functors
+      44              :    *
+      45              :    *   Hashing functors taking a variable type and returning a @c std::size_t.
+      46              :    *
+      47              :    *  @{
+      48              :    */
+      49              : 
+      50              :   template<typename _Result, typename _Arg>
+      51              :     struct __hash_base
+      52              :     {
+      53              :       typedef _Result     result_type _GLIBCXX17_DEPRECATED;
+      54              :       typedef _Arg      argument_type _GLIBCXX17_DEPRECATED;
+      55              :     };
+      56              : 
+      57              :   /// Primary class template hash.
+      58              :   template<typename _Tp>
+      59              :     struct hash;
+      60              : 
+      61              :   template<typename _Tp, typename = void>
+      62              :     struct __poison_hash
+      63              :     {
+      64              :       static constexpr bool __enable_hash_call = false;
+      65              :     private:
+      66              :       // Private rather than deleted to be non-trivially-copyable.
+      67              :       __poison_hash(__poison_hash&&);
+      68              :       ~__poison_hash();
+      69              :     };
+      70              : 
+      71              :   template<typename _Tp>
+      72              :     struct __poison_hash<_Tp, __void_t<decltype(hash<_Tp>()(declval<_Tp>()))>>
+      73              :     {
+      74              :       static constexpr bool __enable_hash_call = true;
+      75              :     };
+      76              : 
+      77              :   // Helper struct for SFINAE-poisoning non-enum types.
+      78              :   template<typename _Tp, bool = is_enum<_Tp>::value>
+      79              :     struct __hash_enum
+      80              :     {
+      81              :     private:
+      82              :       // Private rather than deleted to be non-trivially-copyable.
+      83              :       __hash_enum(__hash_enum&&);
+      84              :       ~__hash_enum();
+      85              :     };
+      86              : 
+      87              :   // Helper struct for hash with enum types.
+      88              :   template<typename _Tp>
+      89              :     struct __hash_enum<_Tp, true> : public __hash_base<size_t, _Tp>
+      90              :     {
+      91              :       size_t
+      92              :       operator()(_Tp __val) const noexcept
+      93              :       {
+      94              :        using __type = typename underlying_type<_Tp>::type;
+      95              :        return hash<__type>{}(static_cast<__type>(__val));
+      96              :       }
+      97              :     };
+      98              : 
+      99              :   /// Primary class template hash, usable for enum types only.
+     100              :   // Use with non-enum types still SFINAES.
+     101              :   template<typename _Tp>
+     102              :     struct hash : __hash_enum<_Tp>
+     103              :     { };
+     104              : 
+     105              :   /// Partial specializations for pointer types.
+     106              :   template<typename _Tp>
+     107              :     struct hash<_Tp*> : public __hash_base<size_t, _Tp*>
+     108              :     {
+     109              :       size_t
+     110              :       operator()(_Tp* __p) const noexcept
+     111              :       { return reinterpret_cast<size_t>(__p); }
+     112              :     };
+     113              : 
+     114              :   // Explicit specializations for integer types.
+     115              : #define _Cxx_hashtable_define_trivial_hash(_Tp)         \
+     116              :   template<>                                              \
+     117              :     struct hash<_Tp> : public __hash_base<size_t, _Tp>  \
+     118              :     {                                                   \
+     119              :       size_t                                            \
+     120              :       operator()(_Tp __val) const noexcept              \
+     121              :       { return static_cast<size_t>(__val); }            \
+     122              :     };
+     123              : 
+     124              :   /// Explicit specialization for bool.
+     125              :   _Cxx_hashtable_define_trivial_hash(bool)
+     126              : 
+     127              :   /// Explicit specialization for char.
+     128              :   _Cxx_hashtable_define_trivial_hash(char)
+     129              : 
+     130              :   /// Explicit specialization for signed char.
+     131              :   _Cxx_hashtable_define_trivial_hash(signed char)
+     132              : 
+     133              :   /// Explicit specialization for unsigned char.
+     134              :   _Cxx_hashtable_define_trivial_hash(unsigned char)
+     135              : 
+     136              :   /// Explicit specialization for wchar_t.
+     137              :   _Cxx_hashtable_define_trivial_hash(wchar_t)
+     138              : 
+     139              : #ifdef _GLIBCXX_USE_CHAR8_T
+     140              :   /// Explicit specialization for char8_t.
+     141              :   _Cxx_hashtable_define_trivial_hash(char8_t)
+     142              : #endif
+     143              : 
+     144              :   /// Explicit specialization for char16_t.
+     145              :   _Cxx_hashtable_define_trivial_hash(char16_t)
+     146              : 
+     147              :   /// Explicit specialization for char32_t.
+     148              :   _Cxx_hashtable_define_trivial_hash(char32_t)
+     149              : 
+     150              :   /// Explicit specialization for short.
+     151              :   _Cxx_hashtable_define_trivial_hash(short)
+     152              : 
+     153              :   /// Explicit specialization for int.
+     154      6061478 :   _Cxx_hashtable_define_trivial_hash(int)
+     155              : 
+     156              :   /// Explicit specialization for long.
+     157              :   _Cxx_hashtable_define_trivial_hash(long)
+     158              : 
+     159              :   /// Explicit specialization for long long.
+     160              :   _Cxx_hashtable_define_trivial_hash(long long)
+     161              : 
+     162              :   /// Explicit specialization for unsigned short.
+     163              :   _Cxx_hashtable_define_trivial_hash(unsigned short)
+     164              : 
+     165              :   /// Explicit specialization for unsigned int.
+     166              :   _Cxx_hashtable_define_trivial_hash(unsigned int)
+     167              : 
+     168              :   /// Explicit specialization for unsigned long.
+     169              :   _Cxx_hashtable_define_trivial_hash(unsigned long)
+     170              : 
+     171              :   /// Explicit specialization for unsigned long long.
+     172              :   _Cxx_hashtable_define_trivial_hash(unsigned long long)
+     173              : 
+     174              : #ifdef __GLIBCXX_TYPE_INT_N_0
+     175              :   __extension__
+     176              :   _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_0)
+     177              :   __extension__
+     178              :   _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_0 unsigned)
+     179              : #endif
+     180              : #ifdef __GLIBCXX_TYPE_INT_N_1
+     181              :   __extension__
+     182              :   _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_1)
+     183              :   __extension__
+     184              :   _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_1 unsigned)
+     185              : #endif
+     186              : #ifdef __GLIBCXX_TYPE_INT_N_2
+     187              :   __extension__
+     188              :   _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_2)
+     189              :   __extension__
+     190              :   _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_2 unsigned)
+     191              : #endif
+     192              : #ifdef __GLIBCXX_TYPE_INT_N_3
+     193              :   __extension__
+     194              :   _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_3)
+     195              :   __extension__
+     196              :   _Cxx_hashtable_define_trivial_hash(__GLIBCXX_TYPE_INT_N_3 unsigned)
+     197              : #endif
+     198              : 
+     199              : #undef _Cxx_hashtable_define_trivial_hash
+     200              : 
+     201              :   struct _Hash_impl
+     202              :   {
+     203              :     static size_t
+     204        66742 :     hash(const void* __ptr, size_t __clength,
+     205              :          size_t __seed = static_cast<size_t>(0xc70f6907UL))
+     206        66742 :     { return _Hash_bytes(__ptr, __clength, __seed); }
+     207              : 
+     208              :     template<typename _Tp>
+     209              :       static size_t
+     210              :       hash(const _Tp& __val)
+     211              :       { return hash(&__val, sizeof(__val)); }
+     212              : 
+     213              :     template<typename _Tp>
+     214              :       static size_t
+     215              :       __hash_combine(const _Tp& __val, size_t __hash)
+     216              :       { return hash(&__val, sizeof(__val), __hash); }
+     217              :   };
+     218              : 
+     219              :   // A hash function similar to FNV-1a (see PR59406 for how it differs).
+     220              :   struct _Fnv_hash_impl
+     221              :   {
+     222              :     static size_t
+     223              :     hash(const void* __ptr, size_t __clength,
+     224              :          size_t __seed = static_cast<size_t>(2166136261UL))
+     225              :     { return _Fnv_hash_bytes(__ptr, __clength, __seed); }
+     226              : 
+     227              :     template<typename _Tp>
+     228              :       static size_t
+     229              :       hash(const _Tp& __val)
+     230              :       { return hash(&__val, sizeof(__val)); }
+     231              : 
+     232              :     template<typename _Tp>
+     233              :       static size_t
+     234              :       __hash_combine(const _Tp& __val, size_t __hash)
+     235              :       { return hash(&__val, sizeof(__val), __hash); }
+     236              :   };
+     237              : 
+     238              :   /// Specialization for float.
+     239              :   template<>
+     240              :     struct hash<float> : public __hash_base<size_t, float>
+     241              :     {
+     242              :       size_t
+     243              :       operator()(float __val) const noexcept
+     244              :       {
+     245              :         // 0 and -0 both hash to zero.
+     246              :         return __val != 0.0f ? std::_Hash_impl::hash(__val) : 0;
+     247              :       }
+     248              :     };
+     249              : 
+     250              :   /// Specialization for double.
+     251              :   template<>
+     252              :     struct hash<double> : public __hash_base<size_t, double>
+     253              :     {
+     254              :       size_t
+     255              :       operator()(double __val) const noexcept
+     256              :       {
+     257              :         // 0 and -0 both hash to zero.
+     258              :         return __val != 0.0 ? std::_Hash_impl::hash(__val) : 0;
+     259              :       }
+     260              :     };
+     261              : 
+     262              :   /// Specialization for long double.
+     263              :   template<>
+     264              :     struct hash<long double>
+     265              :     : public __hash_base<size_t, long double>
+     266              :     {
+     267              :       _GLIBCXX_PURE size_t
+     268              :       operator()(long double __val) const noexcept;
+     269              :     };
+     270              : 
+     271              : #if __cplusplus >= 201703L
+     272              :   template<>
+     273              :     struct hash<nullptr_t> : public __hash_base<size_t, nullptr_t>
+     274              :     {
+     275              :       size_t
+     276              :       operator()(nullptr_t) const noexcept
+     277              :       { return 0; }
+     278              :     };
+     279              : #endif
+     280              : 
+     281              :   /// @} group hashes
+     282              : 
+     283              :   /** Hint about performance of hash functions.
+     284              :    *
+     285              :    * If a given hash function object is not fast, the hash-based containers
+     286              :    * will cache the hash code.
+     287              :    * The default behavior is to consider that hashers are fast unless specified
+     288              :    * otherwise.
+     289              :    *
+     290              :    * Users can specialize this for their own hash functions in order to force
+     291              :    * caching of hash codes in unordered containers. Specializing this trait
+     292              :    * affects the ABI of the unordered containers, so use it carefully.
+     293              :    */
+     294              :   template<typename _Hash>
+     295              :     struct __is_fast_hash : public std::true_type
+     296              :     { };
+     297              : 
+     298              :   template<>
+     299              :     struct __is_fast_hash<hash<long double>> : public std::false_type
+     300              :     { };
+     301              : 
+     302              : _GLIBCXX_END_NAMESPACE_VERSION
+     303              : } // namespace
+     304              : 
+     305              : #endif // _FUNCTIONAL_HASH_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/hashtable.h.func-c.html b/html/usr/include/c++/13/bits/hashtable.h.func-c.html new file mode 100644 index 0000000..d08a22d --- /dev/null +++ b/html/usr/include/c++/13/bits/hashtable.h.func-c.html @@ -0,0 +1,747 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/hashtable.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - hashtable.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:90.8 %228207
Test Date:2024-04-30 13:17:26Functions:100.0 %7676
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE10_M_emplaceIJS5_EEESt4pairINS7_14_Node_iteratorIS5_Lb1ELb1EEEbESt17integral_constantIbLb1EEDpOT_30
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE7emplaceIJS5_EEESt4pairINS7_14_Node_iteratorIS5_Lb1ELb1EEEbEDpOT_30
_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE15_M_find_node_trIS5_EEPNS7_10_Hash_nodeIS5_Lb1EEEmRKT_m2832
_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE22_M_find_before_node_trIS5_EEPNS7_15_Hash_node_baseEmRKT_m2832
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE19_M_find_before_nodeERKS5_30520
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE22_M_remove_bucket_beginEmPNS7_10_Hash_nodeIS5_Lb1EEEm30520
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE5eraseERKS5_30520
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE8_M_eraseESt17integral_constantIbLb1EERKS5_30520
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE8_M_eraseEmPNS7_15_Hash_node_baseEPNS7_10_Hash_nodeIS5_Lb1EEE30520
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE4findERKS5_41704
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE12_Scoped_nodeC2EPNS7_10_Hash_nodeIS5_Lb1EEEPNS7_16_Hashtable_allocISaISL_EEE61162
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE14_S_forward_keyERKS5_61166
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE16_M_insert_uniqueIRKS5_SL_NS7_10_AllocNodeISaINS7_10_Hash_nodeIS5_Lb1EEEEEEEESt4pairINS7_14_Node_iteratorIS5_Lb1ELb1EEEbEOT_OT0_RKT1_61166
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE20_M_insert_unique_auxIRKS5_NS7_10_AllocNodeISaINS7_10_Hash_nodeIS5_Lb1EEEEEEEESt4pairINS7_14_Node_iteratorIS5_Lb1ELb1EEEbEOT_RKT0_61166
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE9_M_insertIRKS5_NS7_10_AllocNodeISaINS7_10_Hash_nodeIS5_Lb1EEEEEEEESt4pairINS7_14_Node_iteratorIS5_Lb1ELb1EEEbEOT_RKT0_St17integral_constantIbLb1EE61166
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE13_M_rehash_auxEmSt17integral_constantIbLb1EE116628
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE13_M_rehash_auxEmSt17integral_constantIbLb1EE15146
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE13_M_rehash_auxEmSt17integral_constantIbLb1EE50006
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE13_M_rehash_auxEmSt17integral_constantIbLb1EE51476
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE19_M_allocate_bucketsEm116628
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE19_M_allocate_bucketsEm15146
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE19_M_allocate_bucketsEm50006
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE19_M_allocate_bucketsEm51476
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE9_M_rehashEmRKm116628
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE9_M_rehashEmRKm15146
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE9_M_rehashEmRKm50006
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE9_M_rehashEmRKm51476
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE5clearEv123656
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE5clearEv14836
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE5clearEv49902
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE5clearEv58918
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEEC2Ev123656
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEEC2Ev14836
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEEC2Ev49902
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEEC2Ev58918
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEED2Ev123656
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEED2Ev14836
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEED2Ev49902
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEED2Ev58918
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE5beginEv153448
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE5beginEv58918
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE5beginEv94530
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE15_M_bucket_indexERKNS4_16_Hash_node_valueIS2_Lb0EEE184146
_ZNKSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE15_M_bucket_indexERKNSC_16_Hash_node_valueISA_Lb0EEE44950
_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE15_M_bucket_indexERKNS7_16_Hash_node_valueIS5_Lb1EEE50624
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE15_M_bucket_indexERKNS4_16_Hash_node_valueIS2_Lb0EEE88572
_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE4sizeEv194614
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE22__small_size_thresholdEv194614
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE12_Scoped_nodeC2IJS5_EEEPNS7_16_Hashtable_allocISaINS7_10_Hash_nodeIS5_Lb1EEEEEEDpOT_198996
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE12_Scoped_nodeC2IJS5_EEEPNS7_16_Hashtable_allocISaINS7_10_Hash_nodeIS5_Lb1EEEEEEDpOT_30
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE12_Scoped_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS1_EESP_IJEEEEEPNSC_16_Hashtable_allocISaINSC_10_Hash_nodeISA_Lb0EEEEEEDpOT_7442
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE12_Scoped_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJOiEESP_IJEEEEEPNSC_16_Hashtable_allocISaINSC_10_Hash_nodeISA_Lb0EEEEEEDpOT_51476
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE12_Scoped_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJOiEESL_IJEEEEEPNS4_16_Hashtable_allocISaINS4_10_Hash_nodeIS2_Lb0EEEEEEDpOT_140048
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_uses_single_bucketEPPNS4_15_Hash_node_baseE240284
_ZNKSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_uses_single_bucketEPPNSC_15_Hash_node_baseE29982
_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE21_M_uses_single_bucketEPPNS7_15_Hash_node_baseE99908
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_uses_single_bucketEPPNS4_15_Hash_node_baseE110394
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_deallocate_bucketsEPPNS4_15_Hash_node_baseEm240284
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_deallocate_bucketsEPPNSC_15_Hash_node_baseEm29982
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE21_M_deallocate_bucketsEPPNS7_15_Hash_node_baseEm99908
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_deallocate_bucketsEPPNS4_15_Hash_node_baseEm110394
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_deallocate_bucketsEv240284
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_deallocate_bucketsEv29982
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE21_M_deallocate_bucketsEv99908
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_deallocate_bucketsEv110394
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE12_Scoped_nodeD2Ev260158
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE12_Scoped_nodeD2Ev58918
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE12_Scoped_nodeD2Ev61192
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE12_Scoped_nodeD2Ev140048
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_insert_unique_nodeEmmPNS4_10_Hash_nodeIS2_Lb0EEEm260158
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_insert_unique_nodeEmmPNSC_10_Hash_nodeISA_Lb0EEEm58918
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE21_M_insert_unique_nodeEmmPNS7_10_Hash_nodeIS5_Lb1EEEm61192
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_insert_unique_nodeEmmPNS4_10_Hash_nodeIS2_Lb0EEEm140048
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE22_M_insert_bucket_beginEmPNS4_10_Hash_nodeIS2_Lb0EEE260158
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE22_M_insert_bucket_beginEmPNSC_10_Hash_nodeISA_Lb0EEE58918
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE22_M_insert_bucket_beginEmPNS7_10_Hash_nodeIS5_Lb1EEE61192
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE22_M_insert_bucket_beginEmPNS4_10_Hash_nodeIS2_Lb0EEE140048
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE3endEv284938
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE3endEv58918
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE3endEv226020
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE8_M_beginEv393732
_ZNKSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE8_M_beginEv29982
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE8_M_beginEv169312
_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE8_M_beginEv194438
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE12_M_find_nodeEmRS1_m5928642
_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE12_M_find_nodeEmRKS5_m5548
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE12_M_find_nodeEmRS1_m2932088
_ZNKSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE12_M_find_nodeEmRS1_m2991006
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE19_M_find_before_nodeEmRS1_m5928688
_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE19_M_find_before_nodeEmRKS5_m5594
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE19_M_find_before_nodeEmRS1_m2932088
_ZNKSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE19_M_find_before_nodeEmRS1_m2991006
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE15_M_bucket_indexEm6106460
_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE15_M_bucket_indexEm116744
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE15_M_bucket_indexEm2983564
_ZNKSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE15_M_bucket_indexEm3006152
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/hashtable.h.func.html b/html/usr/include/c++/13/bits/hashtable.h.func.html new file mode 100644 index 0000000..a150a17 --- /dev/null +++ b/html/usr/include/c++/13/bits/hashtable.h.func.html @@ -0,0 +1,747 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/hashtable.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - hashtable.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:90.8 %228207
Test Date:2024-04-30 13:17:26Functions:100.0 %7676
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE15_M_find_node_trIS5_EEPNS7_10_Hash_nodeIS5_Lb1EEEmRKT_m2832
_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE22_M_find_before_node_trIS5_EEPNS7_15_Hash_node_baseEmRKT_m2832
_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE4sizeEv194614
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE12_M_find_nodeEmRS1_m5928642
_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE12_M_find_nodeEmRKS5_m5548
_ZNKSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE12_M_find_nodeEmRS1_m2991006
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE12_M_find_nodeEmRS1_m2932088
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE15_M_bucket_indexERKNS4_16_Hash_node_valueIS2_Lb0EEE184146
_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE15_M_bucket_indexERKNS7_16_Hash_node_valueIS5_Lb1EEE50624
_ZNKSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE15_M_bucket_indexERKNSC_16_Hash_node_valueISA_Lb0EEE44950
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE15_M_bucket_indexERKNS4_16_Hash_node_valueIS2_Lb0EEE88572
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE15_M_bucket_indexEm6106460
_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE15_M_bucket_indexEm116744
_ZNKSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE15_M_bucket_indexEm3006152
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE15_M_bucket_indexEm2983564
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE19_M_find_before_nodeEmRS1_m5928688
_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE19_M_find_before_nodeEmRKS5_m5594
_ZNKSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE19_M_find_before_nodeEmRS1_m2991006
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE19_M_find_before_nodeEmRS1_m2932088
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_uses_single_bucketEPPNS4_15_Hash_node_baseE240284
_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE21_M_uses_single_bucketEPPNS7_15_Hash_node_baseE99908
_ZNKSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_uses_single_bucketEPPNSC_15_Hash_node_baseE29982
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_uses_single_bucketEPPNS4_15_Hash_node_baseE110394
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE8_M_beginEv393732
_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE8_M_beginEv194438
_ZNKSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE8_M_beginEv29982
_ZNKSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE8_M_beginEv169312
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE10_M_emplaceIJS5_EEESt4pairINS7_14_Node_iteratorIS5_Lb1ELb1EEEbESt17integral_constantIbLb1EEDpOT_30
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE12_Scoped_nodeC2EPNS7_10_Hash_nodeIS5_Lb1EEEPNS7_16_Hashtable_allocISaISL_EEE61162
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE12_Scoped_nodeC2IJS5_EEEPNS7_16_Hashtable_allocISaINS7_10_Hash_nodeIS5_Lb1EEEEEEDpOT_198996
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE12_Scoped_nodeC2IJS5_EEEPNS7_16_Hashtable_allocISaINS7_10_Hash_nodeIS5_Lb1EEEEEEDpOT_30
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE12_Scoped_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJOiEESP_IJEEEEEPNSC_16_Hashtable_allocISaINSC_10_Hash_nodeISA_Lb0EEEEEEDpOT_51476
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE12_Scoped_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS1_EESP_IJEEEEEPNSC_16_Hashtable_allocISaINSC_10_Hash_nodeISA_Lb0EEEEEEDpOT_7442
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE12_Scoped_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJOiEESL_IJEEEEEPNS4_16_Hashtable_allocISaINS4_10_Hash_nodeIS2_Lb0EEEEEEDpOT_140048
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE14_S_forward_keyERKS5_61166
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE16_M_insert_uniqueIRKS5_SL_NS7_10_AllocNodeISaINS7_10_Hash_nodeIS5_Lb1EEEEEEEESt4pairINS7_14_Node_iteratorIS5_Lb1ELb1EEEbEOT_OT0_RKT1_61166
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE19_M_find_before_nodeERKS5_30520
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE20_M_insert_unique_auxIRKS5_NS7_10_AllocNodeISaINS7_10_Hash_nodeIS5_Lb1EEEEEEEESt4pairINS7_14_Node_iteratorIS5_Lb1ELb1EEEbEOT_RKT0_61166
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE22_M_remove_bucket_beginEmPNS7_10_Hash_nodeIS5_Lb1EEEm30520
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE22__small_size_thresholdEv194614
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE4findERKS5_41704
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE5eraseERKS5_30520
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE7emplaceIJS5_EEESt4pairINS7_14_Node_iteratorIS5_Lb1ELb1EEEbEDpOT_30
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE8_M_eraseESt17integral_constantIbLb1EERKS5_30520
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE8_M_eraseEmPNS7_15_Hash_node_baseEPNS7_10_Hash_nodeIS5_Lb1EEE30520
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE9_M_insertIRKS5_NS7_10_AllocNodeISaINS7_10_Hash_nodeIS5_Lb1EEEEEEEESt4pairINS7_14_Node_iteratorIS5_Lb1ELb1EEEbEOT_RKT0_St17integral_constantIbLb1EE61166
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE12_Scoped_nodeD2Ev260158
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE12_Scoped_nodeD2Ev61192
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE12_Scoped_nodeD2Ev58918
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE12_Scoped_nodeD2Ev140048
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE13_M_rehash_auxEmSt17integral_constantIbLb1EE116628
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE13_M_rehash_auxEmSt17integral_constantIbLb1EE50006
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE13_M_rehash_auxEmSt17integral_constantIbLb1EE15146
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE13_M_rehash_auxEmSt17integral_constantIbLb1EE51476
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE19_M_allocate_bucketsEm116628
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE19_M_allocate_bucketsEm50006
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE19_M_allocate_bucketsEm15146
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE19_M_allocate_bucketsEm51476
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_deallocate_bucketsEPPNS4_15_Hash_node_baseEm240284
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE21_M_deallocate_bucketsEPPNS7_15_Hash_node_baseEm99908
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_deallocate_bucketsEPPNSC_15_Hash_node_baseEm29982
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_deallocate_bucketsEPPNS4_15_Hash_node_baseEm110394
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_deallocate_bucketsEv240284
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE21_M_deallocate_bucketsEv99908
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_deallocate_bucketsEv29982
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_deallocate_bucketsEv110394
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_insert_unique_nodeEmmPNS4_10_Hash_nodeIS2_Lb0EEEm260158
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE21_M_insert_unique_nodeEmmPNS7_10_Hash_nodeIS5_Lb1EEEm61192
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_insert_unique_nodeEmmPNSC_10_Hash_nodeISA_Lb0EEEm58918
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE21_M_insert_unique_nodeEmmPNS4_10_Hash_nodeIS2_Lb0EEEm140048
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE22_M_insert_bucket_beginEmPNS4_10_Hash_nodeIS2_Lb0EEE260158
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE22_M_insert_bucket_beginEmPNS7_10_Hash_nodeIS5_Lb1EEE61192
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE22_M_insert_bucket_beginEmPNSC_10_Hash_nodeISA_Lb0EEE58918
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE22_M_insert_bucket_beginEmPNS4_10_Hash_nodeIS2_Lb0EEE140048
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE3endEv284938
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE3endEv226020
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE3endEv58918
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE5beginEv153448
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE5beginEv94530
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE5beginEv58918
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE5clearEv123656
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE5clearEv49902
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE5clearEv14836
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE5clearEv58918
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE9_M_rehashEmRKm116628
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE9_M_rehashEmRKm50006
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEE9_M_rehashEmRKm15146
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE9_M_rehashEmRKm51476
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEEC2Ev123656
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEEC2Ev49902
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEEC2Ev14836
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEEC2Ev58918
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEED2Ev123656
_ZNSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEED2Ev49902
_ZNSt10_HashtableIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEESaISA_ENSt8__detail10_Select1stES6_S4_NSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb0ELb0ELb1EEEED2Ev14836
_ZNSt10_HashtableIiSt4pairIKidESaIS2_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEED2Ev58918
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/hashtable.h.gcov.html b/html/usr/include/c++/13/bits/hashtable.h.gcov.html new file mode 100644 index 0000000..adc5e6d --- /dev/null +++ b/html/usr/include/c++/13/bits/hashtable.h.gcov.html @@ -0,0 +1,2800 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/hashtable.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - hashtable.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:90.8 %228207
Test Date:2024-04-30 13:17:26Functions:100.0 %7676
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // hashtable.h header -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2007-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/hashtable.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{unordered_map, unordered_set}
+      28              :  */
+      29              : 
+      30              : #ifndef _HASHTABLE_H
+      31              : #define _HASHTABLE_H 1
+      32              : 
+      33              : #pragma GCC system_header
+      34              : 
+      35              : #include <bits/hashtable_policy.h>
+      36              : #include <bits/enable_special_members.h>
+      37              : #include <bits/stl_function.h> // __has_is_transparent_t
+      38              : #if __cplusplus > 201402L
+      39              : # include <bits/node_handle.h>
+      40              : #endif
+      41              : 
+      42              : namespace std _GLIBCXX_VISIBILITY(default)
+      43              : {
+      44              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      45              : /// @cond undocumented
+      46              : 
+      47              :   template<typename _Tp, typename _Hash>
+      48              :     using __cache_default
+      49              :       =  __not_<__and_<// Do not cache for fast hasher.
+      50              :                        __is_fast_hash<_Hash>,
+      51              :                        // Mandatory to have erase not throwing.
+      52              :                        __is_nothrow_invocable<const _Hash&, const _Tp&>>>;
+      53              : 
+      54              :   // Helper to conditionally delete the default constructor.
+      55              :   // The _Hash_node_base type is used to distinguish this specialization
+      56              :   // from any other potentially-overlapping subobjects of the hashtable.
+      57              :   template<typename _Equal, typename _Hash, typename _Allocator>
+      58              :     using _Hashtable_enable_default_ctor
+      59              :       = _Enable_default_constructor<__and_<is_default_constructible<_Equal>,
+      60              :                                        is_default_constructible<_Hash>,
+      61              :                                        is_default_constructible<_Allocator>>{},
+      62              :                                     __detail::_Hash_node_base>;
+      63              : 
+      64              :   /**
+      65              :    *  Primary class template _Hashtable.
+      66              :    *
+      67              :    *  @ingroup hashtable-detail
+      68              :    *
+      69              :    *  @tparam _Value  CopyConstructible type.
+      70              :    *
+      71              :    *  @tparam _Key    CopyConstructible type.
+      72              :    *
+      73              :    *  @tparam _Alloc  An allocator type
+      74              :    *  ([lib.allocator.requirements]) whose _Alloc::value_type is
+      75              :    *  _Value.  As a conforming extension, we allow for
+      76              :    *  _Alloc::value_type != _Value.
+      77              :    *
+      78              :    *  @tparam _ExtractKey  Function object that takes an object of type
+      79              :    *  _Value and returns a value of type _Key.
+      80              :    *
+      81              :    *  @tparam _Equal  Function object that takes two objects of type k
+      82              :    *  and returns a bool-like value that is true if the two objects
+      83              :    *  are considered equal.
+      84              :    *
+      85              :    *  @tparam _Hash  The hash function. A unary function object with
+      86              :    *  argument type _Key and result type size_t. Return values should
+      87              :    *  be distributed over the entire range [0, numeric_limits<size_t>:::max()].
+      88              :    *
+      89              :    *  @tparam _RangeHash  The range-hashing function (in the terminology of
+      90              :    *  Tavori and Dreizin).  A binary function object whose argument
+      91              :    *  types and result type are all size_t.  Given arguments r and N,
+      92              :    *  the return value is in the range [0, N).
+      93              :    *
+      94              :    *  @tparam _Unused  Not used.
+      95              :    *
+      96              :    *  @tparam _RehashPolicy  Policy class with three members, all of
+      97              :    *  which govern the bucket count. _M_next_bkt(n) returns a bucket
+      98              :    *  count no smaller than n.  _M_bkt_for_elements(n) returns a
+      99              :    *  bucket count appropriate for an element count of n.
+     100              :    *  _M_need_rehash(n_bkt, n_elt, n_ins) determines whether, if the
+     101              :    *  current bucket count is n_bkt and the current element count is
+     102              :    *  n_elt, we need to increase the bucket count for n_ins insertions.
+     103              :    *  If so, returns make_pair(true, n), where n is the new bucket count. If
+     104              :    *  not, returns make_pair(false, <anything>)
+     105              :    *
+     106              :    *  @tparam _Traits  Compile-time class with three boolean
+     107              :    *  std::integral_constant members:  __cache_hash_code, __constant_iterators,
+     108              :    *   __unique_keys.
+     109              :    *
+     110              :    *  Each _Hashtable data structure has:
+     111              :    *
+     112              :    *  - _Bucket[]       _M_buckets
+     113              :    *  - _Hash_node_base _M_before_begin
+     114              :    *  - size_type       _M_bucket_count
+     115              :    *  - size_type       _M_element_count
+     116              :    *
+     117              :    *  with _Bucket being _Hash_node_base* and _Hash_node containing:
+     118              :    *
+     119              :    *  - _Hash_node*   _M_next
+     120              :    *  - Tp            _M_value
+     121              :    *  - size_t        _M_hash_code if cache_hash_code is true
+     122              :    *
+     123              :    *  In terms of Standard containers the hashtable is like the aggregation of:
+     124              :    *
+     125              :    *  - std::forward_list<_Node> containing the elements
+     126              :    *  - std::vector<std::forward_list<_Node>::iterator> representing the buckets
+     127              :    *
+     128              :    *  The non-empty buckets contain the node before the first node in the
+     129              :    *  bucket. This design makes it possible to implement something like a
+     130              :    *  std::forward_list::insert_after on container insertion and
+     131              :    *  std::forward_list::erase_after on container erase
+     132              :    *  calls. _M_before_begin is equivalent to
+     133              :    *  std::forward_list::before_begin. Empty buckets contain
+     134              :    *  nullptr.  Note that one of the non-empty buckets contains
+     135              :    *  &_M_before_begin which is not a dereferenceable node so the
+     136              :    *  node pointer in a bucket shall never be dereferenced, only its
+     137              :    *  next node can be.
+     138              :    *
+     139              :    *  Walking through a bucket's nodes requires a check on the hash code to
+     140              :    *  see if each node is still in the bucket. Such a design assumes a
+     141              :    *  quite efficient hash functor and is one of the reasons it is
+     142              :    *  highly advisable to set __cache_hash_code to true.
+     143              :    *
+     144              :    *  The container iterators are simply built from nodes. This way
+     145              :    *  incrementing the iterator is perfectly efficient independent of
+     146              :    *  how many empty buckets there are in the container.
+     147              :    *
+     148              :    *  On insert we compute the element's hash code and use it to find the
+     149              :    *  bucket index. If the element must be inserted in an empty bucket
+     150              :    *  we add it at the beginning of the singly linked list and make the
+     151              :    *  bucket point to _M_before_begin. The bucket that used to point to
+     152              :    *  _M_before_begin, if any, is updated to point to its new before
+     153              :    *  begin node.
+     154              :    *
+     155              :    *  On erase, the simple iterator design requires using the hash
+     156              :    *  functor to get the index of the bucket to update. For this
+     157              :    *  reason, when __cache_hash_code is set to false the hash functor must
+     158              :    *  not throw and this is enforced by a static assertion.
+     159              :    *
+     160              :    *  Functionality is implemented by decomposition into base classes,
+     161              :    *  where the derived _Hashtable class is used in _Map_base,
+     162              :    *  _Insert, _Rehash_base, and _Equality base classes to access the
+     163              :    *  "this" pointer. _Hashtable_base is used in the base classes as a
+     164              :    *  non-recursive, fully-completed-type so that detailed nested type
+     165              :    *  information, such as iterator type and node type, can be
+     166              :    *  used. This is similar to the "Curiously Recurring Template
+     167              :    *  Pattern" (CRTP) technique, but uses a reconstructed, not
+     168              :    *  explicitly passed, template pattern.
+     169              :    *
+     170              :    *  Base class templates are: 
+     171              :    *    - __detail::_Hashtable_base
+     172              :    *    - __detail::_Map_base
+     173              :    *    - __detail::_Insert
+     174              :    *    - __detail::_Rehash_base
+     175              :    *    - __detail::_Equality
+     176              :    */
+     177              :   template<typename _Key, typename _Value, typename _Alloc,
+     178              :            typename _ExtractKey, typename _Equal,
+     179              :            typename _Hash, typename _RangeHash, typename _Unused,
+     180              :            typename _RehashPolicy, typename _Traits>
+     181              :     class _Hashtable
+     182              :     : public __detail::_Hashtable_base<_Key, _Value, _ExtractKey, _Equal,
+     183              :                                        _Hash, _RangeHash, _Unused, _Traits>,
+     184              :       public __detail::_Map_base<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+     185              :                                  _Hash, _RangeHash, _Unused,
+     186              :                                  _RehashPolicy, _Traits>,
+     187              :       public __detail::_Insert<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+     188              :                                _Hash, _RangeHash, _Unused,
+     189              :                                _RehashPolicy, _Traits>,
+     190              :       public __detail::_Rehash_base<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+     191              :                                     _Hash, _RangeHash, _Unused,
+     192              :                                     _RehashPolicy, _Traits>,
+     193              :       public __detail::_Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+     194              :                                  _Hash, _RangeHash, _Unused,
+     195              :                                  _RehashPolicy, _Traits>,
+     196              :       private __detail::_Hashtable_alloc<
+     197              :         __alloc_rebind<_Alloc,
+     198              :                        __detail::_Hash_node<_Value,
+     199              :                                             _Traits::__hash_cached::value>>>,
+     200              :       private _Hashtable_enable_default_ctor<_Equal, _Hash, _Alloc>
+     201              :     {
+     202              :       static_assert(is_same<typename remove_cv<_Value>::type, _Value>::value,
+     203              :           "unordered container must have a non-const, non-volatile value_type");
+     204              : #if __cplusplus > 201703L || defined __STRICT_ANSI__
+     205              :       static_assert(is_same<typename _Alloc::value_type, _Value>{},
+     206              :           "unordered container must have the same value_type as its allocator");
+     207              : #endif
+     208              : 
+     209              :       using __traits_type = _Traits;
+     210              :       using __hash_cached = typename __traits_type::__hash_cached;
+     211              :       using __constant_iterators = typename __traits_type::__constant_iterators;
+     212              :       using __node_type = __detail::_Hash_node<_Value, __hash_cached::value>;
+     213              :       using __node_alloc_type = __alloc_rebind<_Alloc, __node_type>;
+     214              : 
+     215              :       using __hashtable_alloc = __detail::_Hashtable_alloc<__node_alloc_type>;
+     216              : 
+     217              :       using __node_value_type =
+     218              :         __detail::_Hash_node_value<_Value, __hash_cached::value>;
+     219              :       using __node_ptr = typename __hashtable_alloc::__node_ptr;
+     220              :       using __value_alloc_traits =
+     221              :         typename __hashtable_alloc::__value_alloc_traits;
+     222              :       using __node_alloc_traits =
+     223              :         typename __hashtable_alloc::__node_alloc_traits;
+     224              :       using __node_base = typename __hashtable_alloc::__node_base;
+     225              :       using __node_base_ptr = typename __hashtable_alloc::__node_base_ptr;
+     226              :       using __buckets_ptr = typename __hashtable_alloc::__buckets_ptr;
+     227              : 
+     228              :       using __insert_base = __detail::_Insert<_Key, _Value, _Alloc, _ExtractKey,
+     229              :                                               _Equal, _Hash,
+     230              :                                               _RangeHash, _Unused,
+     231              :                                               _RehashPolicy, _Traits>;
+     232              :       using __enable_default_ctor
+     233              :         = _Hashtable_enable_default_ctor<_Equal, _Hash, _Alloc>;
+     234              : 
+     235              :     public:
+     236              :       typedef _Key                                              key_type;
+     237              :       typedef _Value                                            value_type;
+     238              :       typedef _Alloc                                            allocator_type;
+     239              :       typedef _Equal                                            key_equal;
+     240              : 
+     241              :       // mapped_type, if present, comes from _Map_base.
+     242              :       // hasher, if present, comes from _Hash_code_base/_Hashtable_base.
+     243              :       typedef typename __value_alloc_traits::pointer            pointer;
+     244              :       typedef typename __value_alloc_traits::const_pointer      const_pointer;
+     245              :       typedef value_type&                                   reference;
+     246              :       typedef const value_type&                                     const_reference;
+     247              : 
+     248              :       using iterator = typename __insert_base::iterator;
+     249              : 
+     250              :       using const_iterator = typename __insert_base::const_iterator;
+     251              : 
+     252              :       using local_iterator = __detail::_Local_iterator<key_type, _Value,
+     253              :                         _ExtractKey, _Hash, _RangeHash, _Unused,
+     254              :                                              __constant_iterators::value,
+     255              :                                              __hash_cached::value>;
+     256              : 
+     257              :       using const_local_iterator = __detail::_Local_const_iterator<
+     258              :                         key_type, _Value,
+     259              :                         _ExtractKey, _Hash, _RangeHash, _Unused,
+     260              :                         __constant_iterators::value, __hash_cached::value>;
+     261              : 
+     262              :     private:
+     263              :       using __rehash_type = _RehashPolicy;
+     264              :       using __rehash_state = typename __rehash_type::_State;
+     265              : 
+     266              :       using __unique_keys = typename __traits_type::__unique_keys;
+     267              : 
+     268              :       using __hashtable_base = __detail::
+     269              :         _Hashtable_base<_Key, _Value, _ExtractKey,
+     270              :                         _Equal, _Hash, _RangeHash, _Unused, _Traits>;
+     271              : 
+     272              :       using __hash_code_base =  typename __hashtable_base::__hash_code_base;
+     273              :       using __hash_code =  typename __hashtable_base::__hash_code;
+     274              :       using __ireturn_type = typename __insert_base::__ireturn_type;
+     275              : 
+     276              :       using __map_base = __detail::_Map_base<_Key, _Value, _Alloc, _ExtractKey,
+     277              :                                              _Equal, _Hash, _RangeHash, _Unused,
+     278              :                                              _RehashPolicy, _Traits>;
+     279              : 
+     280              :       using __rehash_base = __detail::_Rehash_base<_Key, _Value, _Alloc,
+     281              :                                                    _ExtractKey, _Equal,
+     282              :                                                    _Hash, _RangeHash, _Unused,
+     283              :                                                    _RehashPolicy, _Traits>;
+     284              : 
+     285              :       using __eq_base = __detail::_Equality<_Key, _Value, _Alloc, _ExtractKey,
+     286              :                                             _Equal, _Hash, _RangeHash, _Unused,
+     287              :                                             _RehashPolicy, _Traits>;
+     288              : 
+     289              :       using __reuse_or_alloc_node_gen_t =
+     290              :         __detail::_ReuseOrAllocNode<__node_alloc_type>;
+     291              :       using __alloc_node_gen_t =
+     292              :         __detail::_AllocNode<__node_alloc_type>;
+     293              :       using __node_builder_t =
+     294              :         __detail::_NodeBuilder<_ExtractKey>;
+     295              : 
+     296              :       // Simple RAII type for managing a node containing an element
+     297              :       struct _Scoped_node
+     298              :       {
+     299              :         // Take ownership of a node with a constructed element.
+     300        61162 :         _Scoped_node(__node_ptr __n, __hashtable_alloc* __h)
+     301        61162 :         : _M_h(__h), _M_node(__n) { }
+     302              : 
+     303              :         // Allocate a node and construct an element within it.
+     304              :         template<typename... _Args>
+     305       198996 :           _Scoped_node(__hashtable_alloc* __h, _Args&&... __args)
+     306       198996 :           : _M_h(__h),
+     307       198996 :             _M_node(__h->_M_allocate_node(std::forward<_Args>(__args)...))
+     308       198996 :           { }
+     309              : 
+     310              :         // Destroy element and deallocate node.
+     311       260158 :         ~_Scoped_node() { if (_M_node) _M_h->_M_deallocate_node(_M_node); };
+     312              : 
+     313              :         _Scoped_node(const _Scoped_node&) = delete;
+     314              :         _Scoped_node& operator=(const _Scoped_node&) = delete;
+     315              : 
+     316              :         __hashtable_alloc* _M_h;
+     317              :         __node_ptr _M_node;
+     318              :       };
+     319              : 
+     320              :       template<typename _Ht>
+     321              :         static constexpr
+     322              :         __conditional_t<std::is_lvalue_reference<_Ht>::value,
+     323              :                         const value_type&, value_type&&>
+     324              :         __fwd_value_for(value_type& __val) noexcept
+     325              :         { return std::move(__val); }
+     326              : 
+     327              :       // Compile-time diagnostics.
+     328              : 
+     329              :       // _Hash_code_base has everything protected, so use this derived type to
+     330              :       // access it.
+     331              :       struct __hash_code_base_access : __hash_code_base
+     332              :       { using __hash_code_base::_M_bucket_index; };
+     333              : 
+     334              :       // To get bucket index we need _RangeHash not to throw.
+     335              :       static_assert(is_nothrow_default_constructible<_RangeHash>::value,
+     336              :                     "Functor used to map hash code to bucket index"
+     337              :                     " must be nothrow default constructible");
+     338              :       static_assert(noexcept(
+     339              :         std::declval<const _RangeHash&>()((std::size_t)0, (std::size_t)0)),
+     340              :                     "Functor used to map hash code to bucket index must be"
+     341              :                     " noexcept");
+     342              : 
+     343              :       // To compute bucket index we also need _ExtratKey not to throw.
+     344              :       static_assert(is_nothrow_default_constructible<_ExtractKey>::value,
+     345              :                     "_ExtractKey must be nothrow default constructible");
+     346              :       static_assert(noexcept(
+     347              :         std::declval<const _ExtractKey&>()(std::declval<_Value>())),
+     348              :                     "_ExtractKey functor must be noexcept invocable");
+     349              : 
+     350              :       template<typename _Keya, typename _Valuea, typename _Alloca,
+     351              :                typename _ExtractKeya, typename _Equala,
+     352              :                typename _Hasha, typename _RangeHasha, typename _Unuseda,
+     353              :                typename _RehashPolicya, typename _Traitsa,
+     354              :                bool _Unique_keysa>
+     355              :         friend struct __detail::_Map_base;
+     356              : 
+     357              :       template<typename _Keya, typename _Valuea, typename _Alloca,
+     358              :                typename _ExtractKeya, typename _Equala,
+     359              :                typename _Hasha, typename _RangeHasha, typename _Unuseda,
+     360              :                typename _RehashPolicya, typename _Traitsa>
+     361              :         friend struct __detail::_Insert_base;
+     362              : 
+     363              :       template<typename _Keya, typename _Valuea, typename _Alloca,
+     364              :                typename _ExtractKeya, typename _Equala,
+     365              :                typename _Hasha, typename _RangeHasha, typename _Unuseda,
+     366              :                typename _RehashPolicya, typename _Traitsa,
+     367              :                bool _Constant_iteratorsa>
+     368              :         friend struct __detail::_Insert;
+     369              : 
+     370              :       template<typename _Keya, typename _Valuea, typename _Alloca,
+     371              :                typename _ExtractKeya, typename _Equala,
+     372              :                typename _Hasha, typename _RangeHasha, typename _Unuseda,
+     373              :                typename _RehashPolicya, typename _Traitsa,
+     374              :                bool _Unique_keysa>
+     375              :         friend struct __detail::_Equality;
+     376              : 
+     377              :     public:
+     378              :       using size_type = typename __hashtable_base::size_type;
+     379              :       using difference_type = typename __hashtable_base::difference_type;
+     380              : 
+     381              : #if __cplusplus > 201402L
+     382              :       using node_type = _Node_handle<_Key, _Value, __node_alloc_type>;
+     383              :       using insert_return_type = _Node_insert_return<iterator, node_type>;
+     384              : #endif
+     385              : 
+     386              :     private:
+     387              :       __buckets_ptr             _M_buckets              = &_M_single_bucket;
+     388              :       size_type                 _M_bucket_count         = 1;
+     389              :       __node_base               _M_before_begin;
+     390              :       size_type                 _M_element_count        = 0;
+     391              :       _RehashPolicy             _M_rehash_policy;
+     392              : 
+     393              :       // A single bucket used when only need for 1 bucket. Especially
+     394              :       // interesting in move semantic to leave hashtable with only 1 bucket
+     395              :       // which is not allocated so that we can have those operations noexcept
+     396              :       // qualified.
+     397              :       // Note that we can't leave hashtable with 0 bucket without adding
+     398              :       // numerous checks in the code to avoid 0 modulus.
+     399              :       __node_base_ptr           _M_single_bucket        = nullptr;
+     400              : 
+     401              :       void
+     402              :       _M_update_bbegin()
+     403              :       {
+     404              :         if (_M_begin())
+     405              :           _M_buckets[_M_bucket_index(*_M_begin())] = &_M_before_begin;
+     406              :       }
+     407              : 
+     408              :       void
+     409              :       _M_update_bbegin(__node_ptr __n)
+     410              :       {
+     411              :         _M_before_begin._M_nxt = __n;
+     412              :         _M_update_bbegin();
+     413              :       }
+     414              : 
+     415              :       bool
+     416       240284 :       _M_uses_single_bucket(__buckets_ptr __bkts) const
+     417       240284 :       { return __builtin_expect(__bkts == &_M_single_bucket, false); }
+     418              : 
+     419              :       bool
+     420              :       _M_uses_single_bucket() const
+     421              :       { return _M_uses_single_bucket(_M_buckets); }
+     422              : 
+     423              :       static constexpr size_t
+     424       194614 :       __small_size_threshold() noexcept
+     425              :       {
+     426              :         return
+     427       194614 :           __detail::_Hashtable_hash_traits<_Hash>::__small_size_threshold();
+     428              :       }
+     429              : 
+     430              :       __hashtable_alloc&
+     431              :       _M_base_alloc() { return *this; }
+     432              : 
+     433              :       __buckets_ptr
+     434       116628 :       _M_allocate_buckets(size_type __bkt_count)
+     435              :       {
+     436       116628 :         if (__builtin_expect(__bkt_count == 1, false))
+     437              :           {
+     438            0 :             _M_single_bucket = nullptr;
+     439            0 :             return &_M_single_bucket;
+     440              :           }
+     441              : 
+     442       116628 :         return __hashtable_alloc::_M_allocate_buckets(__bkt_count);
+     443              :       }
+     444              : 
+     445              :       void
+     446       240284 :       _M_deallocate_buckets(__buckets_ptr __bkts, size_type __bkt_count)
+     447              :       {
+     448       240284 :         if (_M_uses_single_bucket(__bkts))
+     449       123658 :           return;
+     450              : 
+     451       116626 :         __hashtable_alloc::_M_deallocate_buckets(__bkts, __bkt_count);
+     452              :       }
+     453              : 
+     454              :       void
+     455       240284 :       _M_deallocate_buckets()
+     456       240284 :       { _M_deallocate_buckets(_M_buckets, _M_bucket_count); }
+     457              : 
+     458              :       // Gets bucket begin, deals with the fact that non-empty buckets contain
+     459              :       // their before begin node.
+     460              :       __node_ptr
+     461              :       _M_bucket_begin(size_type __bkt) const;
+     462              : 
+     463              :       __node_ptr
+     464       393732 :       _M_begin() const
+     465       393732 :       { return static_cast<__node_ptr>(_M_before_begin._M_nxt); }
+     466              : 
+     467              :       // Assign *this using another _Hashtable instance. Whether elements
+     468              :       // are copied or moved depends on the _Ht reference.
+     469              :       template<typename _Ht>
+     470              :         void
+     471              :         _M_assign_elements(_Ht&&);
+     472              : 
+     473              :       template<typename _Ht, typename _NodeGenerator>
+     474              :         void
+     475              :         _M_assign(_Ht&&, const _NodeGenerator&);
+     476              : 
+     477              :       void
+     478              :       _M_move_assign(_Hashtable&&, true_type);
+     479              : 
+     480              :       void
+     481              :       _M_move_assign(_Hashtable&&, false_type);
+     482              : 
+     483              :       void
+     484              :       _M_reset() noexcept;
+     485              : 
+     486              :       _Hashtable(const _Hash& __h, const _Equal& __eq,
+     487              :                  const allocator_type& __a)
+     488              :       : __hashtable_base(__h, __eq),
+     489              :         __hashtable_alloc(__node_alloc_type(__a)),
+     490              :         __enable_default_ctor(_Enable_default_constructor_tag{})
+     491              :       { }
+     492              : 
+     493              :       template<bool _No_realloc = true>
+     494              :         static constexpr bool
+     495              :         _S_nothrow_move()
+     496              :         {
+     497              : #if __cplusplus <= 201402L
+     498              :           return __and_<__bool_constant<_No_realloc>,
+     499              :                         is_nothrow_copy_constructible<_Hash>,
+     500              :                         is_nothrow_copy_constructible<_Equal>>::value;
+     501              : #else
+     502              :           if constexpr (_No_realloc)
+     503              :             if constexpr (is_nothrow_copy_constructible<_Hash>())
+     504              :               return is_nothrow_copy_constructible<_Equal>();
+     505              :           return false;
+     506              : #endif
+     507              :         }
+     508              : 
+     509              :       _Hashtable(_Hashtable&& __ht, __node_alloc_type&& __a,
+     510              :                  true_type /* alloc always equal */)
+     511              :         noexcept(_S_nothrow_move());
+     512              : 
+     513              :       _Hashtable(_Hashtable&&, __node_alloc_type&&,
+     514              :                  false_type /* alloc always equal */);
+     515              : 
+     516              :       template<typename _InputIterator>
+     517              :         _Hashtable(_InputIterator __first, _InputIterator __last,
+     518              :                    size_type __bkt_count_hint,
+     519              :                    const _Hash&, const _Equal&, const allocator_type&,
+     520              :                    true_type __uks);
+     521              : 
+     522              :       template<typename _InputIterator>
+     523              :         _Hashtable(_InputIterator __first, _InputIterator __last,
+     524              :                    size_type __bkt_count_hint,
+     525              :                    const _Hash&, const _Equal&, const allocator_type&,
+     526              :                    false_type __uks);
+     527              : 
+     528              :     public:
+     529              :       // Constructor, destructor, assignment, swap
+     530       123656 :       _Hashtable() = default;
+     531              : 
+     532              :       _Hashtable(const _Hashtable&);
+     533              : 
+     534              :       _Hashtable(const _Hashtable&, const allocator_type&);
+     535              : 
+     536              :       explicit
+     537              :       _Hashtable(size_type __bkt_count_hint,
+     538              :                  const _Hash& __hf = _Hash(),
+     539              :                  const key_equal& __eql = key_equal(),
+     540              :                  const allocator_type& __a = allocator_type());
+     541              : 
+     542              :       // Use delegating constructors.
+     543              :       _Hashtable(_Hashtable&& __ht)
+     544              :         noexcept(_S_nothrow_move())
+     545              :       : _Hashtable(std::move(__ht), std::move(__ht._M_node_allocator()),
+     546              :                    true_type{})
+     547              :       { }
+     548              : 
+     549              :       _Hashtable(_Hashtable&& __ht, const allocator_type& __a)
+     550              :         noexcept(_S_nothrow_move<__node_alloc_traits::_S_always_equal()>())
+     551              :       : _Hashtable(std::move(__ht), __node_alloc_type(__a),
+     552              :                    typename __node_alloc_traits::is_always_equal{})
+     553              :       { }
+     554              : 
+     555              :       explicit
+     556              :       _Hashtable(const allocator_type& __a)
+     557              :       : __hashtable_alloc(__node_alloc_type(__a)),
+     558              :         __enable_default_ctor(_Enable_default_constructor_tag{})
+     559              :       { }
+     560              : 
+     561              :       template<typename _InputIterator>
+     562              :         _Hashtable(_InputIterator __f, _InputIterator __l,
+     563              :                    size_type __bkt_count_hint = 0,
+     564              :                    const _Hash& __hf = _Hash(),
+     565              :                    const key_equal& __eql = key_equal(),
+     566              :                    const allocator_type& __a = allocator_type())
+     567              :         : _Hashtable(__f, __l, __bkt_count_hint, __hf, __eql, __a,
+     568              :                      __unique_keys{})
+     569              :         { }
+     570              : 
+     571              :       _Hashtable(initializer_list<value_type> __l,
+     572              :                  size_type __bkt_count_hint = 0,
+     573              :                  const _Hash& __hf = _Hash(),
+     574              :                  const key_equal& __eql = key_equal(),
+     575              :                  const allocator_type& __a = allocator_type())
+     576              :       : _Hashtable(__l.begin(), __l.end(), __bkt_count_hint,
+     577              :                    __hf, __eql, __a, __unique_keys{})
+     578              :       { }
+     579              : 
+     580              :       _Hashtable&
+     581              :       operator=(const _Hashtable& __ht);
+     582              : 
+     583              :       _Hashtable&
+     584              :       operator=(_Hashtable&& __ht)
+     585              :       noexcept(__node_alloc_traits::_S_nothrow_move()
+     586              :                && is_nothrow_move_assignable<_Hash>::value
+     587              :                && is_nothrow_move_assignable<_Equal>::value)
+     588              :       {
+     589              :         constexpr bool __move_storage =
+     590              :           __node_alloc_traits::_S_propagate_on_move_assign()
+     591              :           || __node_alloc_traits::_S_always_equal();
+     592              :         _M_move_assign(std::move(__ht), __bool_constant<__move_storage>());
+     593              :         return *this;
+     594              :       }
+     595              : 
+     596              :       _Hashtable&
+     597              :       operator=(initializer_list<value_type> __l)
+     598              :       {
+     599              :         __reuse_or_alloc_node_gen_t __roan(_M_begin(), *this);
+     600              :         _M_before_begin._M_nxt = nullptr;
+     601              :         clear();
+     602              : 
+     603              :         // We consider that all elements of __l are going to be inserted.
+     604              :         auto __l_bkt_count = _M_rehash_policy._M_bkt_for_elements(__l.size());
+     605              : 
+     606              :         // Do not shrink to keep potential user reservation.
+     607              :         if (_M_bucket_count < __l_bkt_count)
+     608              :           rehash(__l_bkt_count);
+     609              : 
+     610              :         this->_M_insert_range(__l.begin(), __l.end(), __roan, __unique_keys{});
+     611              :         return *this;
+     612              :       }
+     613              : 
+     614              :       ~_Hashtable() noexcept;
+     615              : 
+     616              :       void
+     617              :       swap(_Hashtable&)
+     618              :       noexcept(__and_<__is_nothrow_swappable<_Hash>,
+     619              :                       __is_nothrow_swappable<_Equal>>::value);
+     620              : 
+     621              :       // Basic container operations
+     622              :       iterator
+     623       153448 :       begin() noexcept
+     624       153448 :       { return iterator(_M_begin()); }
+     625              : 
+     626              :       const_iterator
+     627              :       begin() const noexcept
+     628              :       { return const_iterator(_M_begin()); }
+     629              : 
+     630              :       iterator
+     631       284938 :       end() noexcept
+     632       284938 :       { return iterator(nullptr); }
+     633              : 
+     634              :       const_iterator
+     635              :       end() const noexcept
+     636              :       { return const_iterator(nullptr); }
+     637              : 
+     638              :       const_iterator
+     639              :       cbegin() const noexcept
+     640              :       { return const_iterator(_M_begin()); }
+     641              : 
+     642              :       const_iterator
+     643              :       cend() const noexcept
+     644              :       { return const_iterator(nullptr); }
+     645              : 
+     646              :       size_type
+     647       194614 :       size() const noexcept
+     648       194614 :       { return _M_element_count; }
+     649              : 
+     650              :       _GLIBCXX_NODISCARD bool
+     651              :       empty() const noexcept
+     652              :       { return size() == 0; }
+     653              : 
+     654              :       allocator_type
+     655              :       get_allocator() const noexcept
+     656              :       { return allocator_type(this->_M_node_allocator()); }
+     657              : 
+     658              :       size_type
+     659              :       max_size() const noexcept
+     660              :       { return __node_alloc_traits::max_size(this->_M_node_allocator()); }
+     661              : 
+     662              :       // Observers
+     663              :       key_equal
+     664              :       key_eq() const
+     665              :       { return this->_M_eq(); }
+     666              : 
+     667              :       // hash_function, if present, comes from _Hash_code_base.
+     668              : 
+     669              :       // Bucket operations
+     670              :       size_type
+     671              :       bucket_count() const noexcept
+     672              :       { return _M_bucket_count; }
+     673              : 
+     674              :       size_type
+     675              :       max_bucket_count() const noexcept
+     676              :       { return max_size(); }
+     677              : 
+     678              :       size_type
+     679              :       bucket_size(size_type __bkt) const
+     680              :       { return std::distance(begin(__bkt), end(__bkt)); }
+     681              : 
+     682              :       size_type
+     683              :       bucket(const key_type& __k) const
+     684              :       { return _M_bucket_index(this->_M_hash_code(__k)); }
+     685              : 
+     686              :       local_iterator
+     687              :       begin(size_type __bkt)
+     688              :       {
+     689              :         return local_iterator(*this, _M_bucket_begin(__bkt),
+     690              :                               __bkt, _M_bucket_count);
+     691              :       }
+     692              : 
+     693              :       local_iterator
+     694              :       end(size_type __bkt)
+     695              :       { return local_iterator(*this, nullptr, __bkt, _M_bucket_count); }
+     696              : 
+     697              :       const_local_iterator
+     698              :       begin(size_type __bkt) const
+     699              :       {
+     700              :         return const_local_iterator(*this, _M_bucket_begin(__bkt),
+     701              :                                     __bkt, _M_bucket_count);
+     702              :       }
+     703              : 
+     704              :       const_local_iterator
+     705              :       end(size_type __bkt) const
+     706              :       { return const_local_iterator(*this, nullptr, __bkt, _M_bucket_count); }
+     707              : 
+     708              :       // DR 691.
+     709              :       const_local_iterator
+     710              :       cbegin(size_type __bkt) const
+     711              :       {
+     712              :         return const_local_iterator(*this, _M_bucket_begin(__bkt),
+     713              :                                     __bkt, _M_bucket_count);
+     714              :       }
+     715              : 
+     716              :       const_local_iterator
+     717              :       cend(size_type __bkt) const
+     718              :       { return const_local_iterator(*this, nullptr, __bkt, _M_bucket_count); }
+     719              : 
+     720              :       float
+     721              :       load_factor() const noexcept
+     722              :       {
+     723              :         return static_cast<float>(size()) / static_cast<float>(bucket_count());
+     724              :       }
+     725              : 
+     726              :       // max_load_factor, if present, comes from _Rehash_base.
+     727              : 
+     728              :       // Generalization of max_load_factor.  Extension, not found in
+     729              :       // TR1.  Only useful if _RehashPolicy is something other than
+     730              :       // the default.
+     731              :       const _RehashPolicy&
+     732              :       __rehash_policy() const
+     733              :       { return _M_rehash_policy; }
+     734              : 
+     735              :       void
+     736              :       __rehash_policy(const _RehashPolicy& __pol)
+     737              :       { _M_rehash_policy = __pol; }
+     738              : 
+     739              :       // Lookup.
+     740              :       iterator
+     741              :       find(const key_type& __k);
+     742              : 
+     743              :       const_iterator
+     744              :       find(const key_type& __k) const;
+     745              : 
+     746              :       size_type
+     747              :       count(const key_type& __k) const;
+     748              : 
+     749              :       std::pair<iterator, iterator>
+     750              :       equal_range(const key_type& __k);
+     751              : 
+     752              :       std::pair<const_iterator, const_iterator>
+     753              :       equal_range(const key_type& __k) const;
+     754              : 
+     755              : #if __cplusplus >= 202002L
+     756              : #define __cpp_lib_generic_unordered_lookup 201811L
+     757              : 
+     758              :       template<typename _Kt,
+     759              :                typename = __has_is_transparent_t<_Hash, _Kt>,
+     760              :                typename = __has_is_transparent_t<_Equal, _Kt>>
+     761              :         iterator
+     762              :         _M_find_tr(const _Kt& __k);
+     763              : 
+     764              :       template<typename _Kt,
+     765              :                typename = __has_is_transparent_t<_Hash, _Kt>,
+     766              :                typename = __has_is_transparent_t<_Equal, _Kt>>
+     767              :         const_iterator
+     768              :         _M_find_tr(const _Kt& __k) const;
+     769              : 
+     770              :       template<typename _Kt,
+     771              :                typename = __has_is_transparent_t<_Hash, _Kt>,
+     772              :                typename = __has_is_transparent_t<_Equal, _Kt>>
+     773              :         size_type
+     774              :         _M_count_tr(const _Kt& __k) const;
+     775              : 
+     776              :       template<typename _Kt,
+     777              :                typename = __has_is_transparent_t<_Hash, _Kt>,
+     778              :                typename = __has_is_transparent_t<_Equal, _Kt>>
+     779              :         pair<iterator, iterator>
+     780              :         _M_equal_range_tr(const _Kt& __k);
+     781              : 
+     782              :       template<typename _Kt,
+     783              :                typename = __has_is_transparent_t<_Hash, _Kt>,
+     784              :                typename = __has_is_transparent_t<_Equal, _Kt>>
+     785              :         pair<const_iterator, const_iterator>
+     786              :         _M_equal_range_tr(const _Kt& __k) const;
+     787              : #endif // C++20
+     788              : 
+     789              :     private:
+     790              :       // Bucket index computation helpers.
+     791              :       size_type
+     792       184146 :       _M_bucket_index(const __node_value_type& __n) const noexcept
+     793       184146 :       { return __hash_code_base::_M_bucket_index(__n, _M_bucket_count); }
+     794              : 
+     795              :       size_type
+     796      6106460 :       _M_bucket_index(__hash_code __c) const
+     797      6106460 :       { return __hash_code_base::_M_bucket_index(__c, _M_bucket_count); }
+     798              : 
+     799              :       __node_base_ptr
+     800              :       _M_find_before_node(const key_type&);
+     801              : 
+     802              :       // Find and insert helper functions and types
+     803              :       // Find the node before the one matching the criteria.
+     804              :       __node_base_ptr
+     805              :       _M_find_before_node(size_type, const key_type&, __hash_code) const;
+     806              : 
+     807              :       template<typename _Kt>
+     808              :         __node_base_ptr
+     809              :         _M_find_before_node_tr(size_type, const _Kt&, __hash_code) const;
+     810              : 
+     811              :       __node_ptr
+     812      5928642 :       _M_find_node(size_type __bkt, const key_type& __key,
+     813              :                    __hash_code __c) const
+     814              :       {
+     815      5928642 :         __node_base_ptr __before_n = _M_find_before_node(__bkt, __key, __c);
+     816      5928642 :         if (__before_n)
+     817      5724128 :           return static_cast<__node_ptr>(__before_n->_M_nxt);
+     818       204514 :         return nullptr;
+     819              :       }
+     820              : 
+     821              :       template<typename _Kt>
+     822              :         __node_ptr
+     823         2832 :         _M_find_node_tr(size_type __bkt, const _Kt& __key,
+     824              :                         __hash_code __c) const
+     825              :         {
+     826         2832 :           auto __before_n = _M_find_before_node_tr(__bkt, __key, __c);
+     827         2832 :           if (__before_n)
+     828            2 :             return static_cast<__node_ptr>(__before_n->_M_nxt);
+     829         2830 :           return nullptr;
+     830              :         }
+     831              : 
+     832              :       // Insert a node at the beginning of a bucket.
+     833              :       void
+     834              :       _M_insert_bucket_begin(size_type, __node_ptr);
+     835              : 
+     836              :       // Remove the bucket first node
+     837              :       void
+     838              :       _M_remove_bucket_begin(size_type __bkt, __node_ptr __next_n,
+     839              :                              size_type __next_bkt);
+     840              : 
+     841              :       // Get the node before __n in the bucket __bkt
+     842              :       __node_base_ptr
+     843              :       _M_get_previous_node(size_type __bkt, __node_ptr __n);
+     844              : 
+     845              :       pair<const_iterator, __hash_code>
+     846              :       _M_compute_hash_code(const_iterator __hint, const key_type& __k) const;
+     847              : 
+     848              :       // Insert node __n with hash code __code, in bucket __bkt if no
+     849              :       // rehash (assumes no element with same key already present).
+     850              :       // Takes ownership of __n if insertion succeeds, throws otherwise.
+     851              :       iterator
+     852              :       _M_insert_unique_node(size_type __bkt, __hash_code,
+     853              :                             __node_ptr __n, size_type __n_elt = 1);
+     854              : 
+     855              :       // Insert node __n with key __k and hash code __code.
+     856              :       // Takes ownership of __n if insertion succeeds, throws otherwise.
+     857              :       iterator
+     858              :       _M_insert_multi_node(__node_ptr __hint,
+     859              :                            __hash_code __code, __node_ptr __n);
+     860              : 
+     861              :       template<typename... _Args>
+     862              :         std::pair<iterator, bool>
+     863              :         _M_emplace(true_type __uks, _Args&&... __args);
+     864              : 
+     865              :       template<typename... _Args>
+     866              :         iterator
+     867              :         _M_emplace(false_type __uks, _Args&&... __args)
+     868              :         { return _M_emplace(cend(), __uks, std::forward<_Args>(__args)...); }
+     869              : 
+     870              :       // Emplace with hint, useless when keys are unique.
+     871              :       template<typename... _Args>
+     872              :         iterator
+     873              :         _M_emplace(const_iterator, true_type __uks, _Args&&... __args)
+     874              :         { return _M_emplace(__uks, std::forward<_Args>(__args)...).first; }
+     875              : 
+     876              :       template<typename... _Args>
+     877              :         iterator
+     878              :         _M_emplace(const_iterator, false_type __uks, _Args&&... __args);
+     879              : 
+     880              :       template<typename _Kt, typename _Arg, typename _NodeGenerator>
+     881              :         std::pair<iterator, bool>
+     882              :         _M_insert_unique(_Kt&&, _Arg&&, const _NodeGenerator&);
+     883              : 
+     884              :       template<typename _Kt>
+     885              :         static __conditional_t<
+     886              :           __and_<__is_nothrow_invocable<_Hash&, const key_type&>,
+     887              :                  __not_<__is_nothrow_invocable<_Hash&, _Kt>>>::value,
+     888              :           key_type, _Kt&&>
+     889              :         _S_forward_key(_Kt&& __k)
+     890              :         { return std::forward<_Kt>(__k); }
+     891              : 
+     892              :       static const key_type&
+     893        61166 :       _S_forward_key(const key_type& __k)
+     894        61166 :       { return __k; }
+     895              : 
+     896              :       static key_type&&
+     897              :       _S_forward_key(key_type&& __k)
+     898              :       { return std::move(__k); }
+     899              : 
+     900              :       template<typename _Arg, typename _NodeGenerator>
+     901              :         std::pair<iterator, bool>
+     902        61166 :         _M_insert_unique_aux(_Arg&& __arg, const _NodeGenerator& __node_gen)
+     903              :         {
+     904       122332 :           return _M_insert_unique(
+     905       122332 :             _S_forward_key(_ExtractKey{}(std::forward<_Arg>(__arg))),
+     906       122332 :             std::forward<_Arg>(__arg), __node_gen);
+     907              :         }
+     908              : 
+     909              :       template<typename _Arg, typename _NodeGenerator>
+     910              :         std::pair<iterator, bool>
+     911        61166 :         _M_insert(_Arg&& __arg, const _NodeGenerator& __node_gen,
+     912              :                   true_type /* __uks */)
+     913              :         {
+     914              :           using __to_value
+     915              :             = __detail::_ConvertToValueType<_ExtractKey, value_type>;
+     916       122332 :           return _M_insert_unique_aux(
+     917       122332 :             __to_value{}(std::forward<_Arg>(__arg)), __node_gen);
+     918              :         }
+     919              : 
+     920              :       template<typename _Arg, typename _NodeGenerator>
+     921              :         iterator
+     922              :         _M_insert(_Arg&& __arg, const _NodeGenerator& __node_gen,
+     923              :                   false_type __uks)
+     924              :         {
+     925              :           using __to_value
+     926              :             = __detail::_ConvertToValueType<_ExtractKey, value_type>;
+     927              :           return _M_insert(cend(),
+     928              :             __to_value{}(std::forward<_Arg>(__arg)), __node_gen, __uks);
+     929              :         }
+     930              : 
+     931              :       // Insert with hint, not used when keys are unique.
+     932              :       template<typename _Arg, typename _NodeGenerator>
+     933              :         iterator
+     934              :         _M_insert(const_iterator, _Arg&& __arg,
+     935              :                   const _NodeGenerator& __node_gen, true_type __uks)
+     936              :         {
+     937              :           return
+     938              :             _M_insert(std::forward<_Arg>(__arg), __node_gen, __uks).first;
+     939              :         }
+     940              : 
+     941              :       // Insert with hint when keys are not unique.
+     942              :       template<typename _Arg, typename _NodeGenerator>
+     943              :         iterator
+     944              :         _M_insert(const_iterator, _Arg&&,
+     945              :                   const _NodeGenerator&, false_type __uks);
+     946              : 
+     947              :       size_type
+     948              :       _M_erase(true_type __uks, const key_type&);
+     949              : 
+     950              :       size_type
+     951              :       _M_erase(false_type __uks, const key_type&);
+     952              : 
+     953              :       iterator
+     954              :       _M_erase(size_type __bkt, __node_base_ptr __prev_n, __node_ptr __n);
+     955              : 
+     956              :     public:
+     957              :       // Emplace
+     958              :       template<typename... _Args>
+     959              :         __ireturn_type
+     960           30 :         emplace(_Args&&... __args)
+     961           30 :         { return _M_emplace(__unique_keys{}, std::forward<_Args>(__args)...); }
+     962              : 
+     963              :       template<typename... _Args>
+     964              :         iterator
+     965              :         emplace_hint(const_iterator __hint, _Args&&... __args)
+     966              :         {
+     967              :           return _M_emplace(__hint, __unique_keys{},
+     968              :                             std::forward<_Args>(__args)...);
+     969              :         }
+     970              : 
+     971              :       // Insert member functions via inheritance.
+     972              : 
+     973              :       // Erase
+     974              :       iterator
+     975              :       erase(const_iterator);
+     976              : 
+     977              :       // LWG 2059.
+     978              :       iterator
+     979              :       erase(iterator __it)
+     980              :       { return erase(const_iterator(__it)); }
+     981              : 
+     982              :       size_type
+     983        30520 :       erase(const key_type& __k)
+     984        30520 :       { return _M_erase(__unique_keys{}, __k); }
+     985              : 
+     986              :       iterator
+     987              :       erase(const_iterator, const_iterator);
+     988              : 
+     989              :       void
+     990              :       clear() noexcept;
+     991              : 
+     992              :       // Set number of buckets keeping it appropriate for container's number
+     993              :       // of elements.
+     994              :       void rehash(size_type __bkt_count);
+     995              : 
+     996              :       // DR 1189.
+     997              :       // reserve, if present, comes from _Rehash_base.
+     998              : 
+     999              : #if __cplusplus > 201402L
+    1000              :       /// Re-insert an extracted node into a container with unique keys.
+    1001              :       insert_return_type
+    1002              :       _M_reinsert_node(node_type&& __nh)
+    1003              :       {
+    1004              :         insert_return_type __ret;
+    1005              :         if (__nh.empty())
+    1006              :           __ret.position = end();
+    1007              :         else
+    1008              :           {
+    1009              :             __glibcxx_assert(get_allocator() == __nh.get_allocator());
+    1010              : 
+    1011              :             const key_type& __k = __nh._M_key();
+    1012              :             __hash_code __code = this->_M_hash_code(__k);
+    1013              :             size_type __bkt = _M_bucket_index(__code);
+    1014              :             if (__node_ptr __n = _M_find_node(__bkt, __k, __code))
+    1015              :               {
+    1016              :                 __ret.node = std::move(__nh);
+    1017              :                 __ret.position = iterator(__n);
+    1018              :                 __ret.inserted = false;
+    1019              :               }
+    1020              :             else
+    1021              :               {
+    1022              :                 __ret.position
+    1023              :                   = _M_insert_unique_node(__bkt, __code, __nh._M_ptr);
+    1024              :                 __nh._M_ptr = nullptr;
+    1025              :                 __ret.inserted = true;
+    1026              :               }
+    1027              :           }
+    1028              :         return __ret;
+    1029              :       }
+    1030              : 
+    1031              :       /// Re-insert an extracted node into a container with equivalent keys.
+    1032              :       iterator
+    1033              :       _M_reinsert_node_multi(const_iterator __hint, node_type&& __nh)
+    1034              :       {
+    1035              :         if (__nh.empty())
+    1036              :           return end();
+    1037              : 
+    1038              :         __glibcxx_assert(get_allocator() == __nh.get_allocator());
+    1039              : 
+    1040              :         const key_type& __k = __nh._M_key();
+    1041              :         auto __code = this->_M_hash_code(__k);
+    1042              :         auto __ret
+    1043              :           = _M_insert_multi_node(__hint._M_cur, __code, __nh._M_ptr);
+    1044              :         __nh._M_ptr = nullptr;
+    1045              :         return __ret;
+    1046              :       }
+    1047              : 
+    1048              :     private:
+    1049              :       node_type
+    1050              :       _M_extract_node(size_t __bkt, __node_base_ptr __prev_n)
+    1051              :       {
+    1052              :         __node_ptr __n = static_cast<__node_ptr>(__prev_n->_M_nxt);
+    1053              :         if (__prev_n == _M_buckets[__bkt])
+    1054              :           _M_remove_bucket_begin(__bkt, __n->_M_next(),
+    1055              :              __n->_M_nxt ? _M_bucket_index(*__n->_M_next()) : 0);
+    1056              :         else if (__n->_M_nxt)
+    1057              :           {
+    1058              :             size_type __next_bkt = _M_bucket_index(*__n->_M_next());
+    1059              :             if (__next_bkt != __bkt)
+    1060              :               _M_buckets[__next_bkt] = __prev_n;
+    1061              :           }
+    1062              : 
+    1063              :         __prev_n->_M_nxt = __n->_M_nxt;
+    1064              :         __n->_M_nxt = nullptr;
+    1065              :         --_M_element_count;
+    1066              :         return { __n, this->_M_node_allocator() };
+    1067              :       }
+    1068              : 
+    1069              :       // Only use the possibly cached node's hash code if its hash function
+    1070              :       // _H2 matches _Hash and is stateless. Otherwise recompute it using _Hash.
+    1071              :       template<typename _H2>
+    1072              :         __hash_code
+    1073              :         _M_src_hash_code(const _H2&, const key_type& __k,
+    1074              :                          const __node_value_type& __src_n) const
+    1075              :         {
+    1076              :           if constexpr (std::is_same_v<_H2, _Hash>)
+    1077              :             if constexpr (std::is_empty_v<_Hash>)
+    1078              :               return this->_M_hash_code(__src_n);
+    1079              : 
+    1080              :           return this->_M_hash_code(__k);
+    1081              :         }
+    1082              : 
+    1083              :     public:
+    1084              :       // Extract a node.
+    1085              :       node_type
+    1086              :       extract(const_iterator __pos)
+    1087              :       {
+    1088              :         size_t __bkt = _M_bucket_index(*__pos._M_cur);
+    1089              :         return _M_extract_node(__bkt,
+    1090              :                                _M_get_previous_node(__bkt, __pos._M_cur));
+    1091              :       }
+    1092              : 
+    1093              :       /// Extract a node.
+    1094              :       node_type
+    1095              :       extract(const _Key& __k)
+    1096              :       {
+    1097              :         node_type __nh;
+    1098              :         __hash_code __code = this->_M_hash_code(__k);
+    1099              :         std::size_t __bkt = _M_bucket_index(__code);
+    1100              :         if (__node_base_ptr __prev_node = _M_find_before_node(__bkt, __k, __code))
+    1101              :           __nh = _M_extract_node(__bkt, __prev_node);
+    1102              :         return __nh;
+    1103              :       }
+    1104              : 
+    1105              :       /// Merge from a compatible container into one with unique keys.
+    1106              :       template<typename _Compatible_Hashtable>
+    1107              :         void
+    1108              :         _M_merge_unique(_Compatible_Hashtable& __src)
+    1109              :         {
+    1110              :           static_assert(is_same_v<typename _Compatible_Hashtable::node_type,
+    1111              :               node_type>, "Node types are compatible");
+    1112              :           __glibcxx_assert(get_allocator() == __src.get_allocator());
+    1113              : 
+    1114              :           auto __n_elt = __src.size();
+    1115              :           for (auto __i = __src.cbegin(), __end = __src.cend(); __i != __end;)
+    1116              :             {
+    1117              :               auto __pos = __i++;
+    1118              :               const key_type& __k = _ExtractKey{}(*__pos);
+    1119              :               __hash_code __code
+    1120              :                 = _M_src_hash_code(__src.hash_function(), __k, *__pos._M_cur);
+    1121              :               size_type __bkt = _M_bucket_index(__code);
+    1122              :               if (_M_find_node(__bkt, __k, __code) == nullptr)
+    1123              :                 {
+    1124              :                   auto __nh = __src.extract(__pos);
+    1125              :                   _M_insert_unique_node(__bkt, __code, __nh._M_ptr, __n_elt);
+    1126              :                   __nh._M_ptr = nullptr;
+    1127              :                   __n_elt = 1;
+    1128              :                 }
+    1129              :               else if (__n_elt != 1)
+    1130              :                 --__n_elt;
+    1131              :             }
+    1132              :         }
+    1133              : 
+    1134              :       /// Merge from a compatible container into one with equivalent keys.
+    1135              :       template<typename _Compatible_Hashtable>
+    1136              :         void
+    1137              :         _M_merge_multi(_Compatible_Hashtable& __src)
+    1138              :         {
+    1139              :           static_assert(is_same_v<typename _Compatible_Hashtable::node_type,
+    1140              :               node_type>, "Node types are compatible");
+    1141              :           __glibcxx_assert(get_allocator() == __src.get_allocator());
+    1142              : 
+    1143              :           __node_ptr __hint = nullptr;
+    1144              :           this->reserve(size() + __src.size());
+    1145              :           for (auto __i = __src.cbegin(), __end = __src.cend(); __i != __end;)
+    1146              :             {
+    1147              :               auto __pos = __i++;
+    1148              :               const key_type& __k = _ExtractKey{}(*__pos);
+    1149              :               __hash_code __code
+    1150              :                 = _M_src_hash_code(__src.hash_function(), __k, *__pos._M_cur);
+    1151              :               auto __nh = __src.extract(__pos);
+    1152              :               __hint = _M_insert_multi_node(__hint, __code, __nh._M_ptr)._M_cur;
+    1153              :               __nh._M_ptr = nullptr;
+    1154              :             }
+    1155              :         }
+    1156              : #endif // C++17
+    1157              : 
+    1158              :     private:
+    1159              :       // Helper rehash method used when keys are unique.
+    1160              :       void _M_rehash_aux(size_type __bkt_count, true_type __uks);
+    1161              : 
+    1162              :       // Helper rehash method used when keys can be non-unique.
+    1163              :       void _M_rehash_aux(size_type __bkt_count, false_type __uks);
+    1164              : 
+    1165              :       // Unconditionally change size of bucket array to n, restore
+    1166              :       // hash policy state to __state on exception.
+    1167              :       void _M_rehash(size_type __bkt_count, const __rehash_state& __state);
+    1168              :     };
+    1169              : 
+    1170              :   // Definitions of class template _Hashtable's out-of-line member functions.
+    1171              :   template<typename _Key, typename _Value, typename _Alloc,
+    1172              :            typename _ExtractKey, typename _Equal,
+    1173              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1174              :            typename _RehashPolicy, typename _Traits>
+    1175              :     auto
+    1176              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1177              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1178              :     _M_bucket_begin(size_type __bkt) const
+    1179              :     -> __node_ptr
+    1180              :     {
+    1181              :       __node_base_ptr __n = _M_buckets[__bkt];
+    1182              :       return __n ? static_cast<__node_ptr>(__n->_M_nxt) : nullptr;
+    1183              :     }
+    1184              : 
+    1185              :   template<typename _Key, typename _Value, typename _Alloc,
+    1186              :            typename _ExtractKey, typename _Equal,
+    1187              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1188              :            typename _RehashPolicy, typename _Traits>
+    1189              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1190              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1191              :     _Hashtable(size_type __bkt_count_hint,
+    1192              :                const _Hash& __h, const _Equal& __eq, const allocator_type& __a)
+    1193              :     : _Hashtable(__h, __eq, __a)
+    1194              :     {
+    1195              :       auto __bkt_count = _M_rehash_policy._M_next_bkt(__bkt_count_hint);
+    1196              :       if (__bkt_count > _M_bucket_count)
+    1197              :         {
+    1198              :           _M_buckets = _M_allocate_buckets(__bkt_count);
+    1199              :           _M_bucket_count = __bkt_count;
+    1200              :         }
+    1201              :     }
+    1202              : 
+    1203              :   template<typename _Key, typename _Value, typename _Alloc,
+    1204              :            typename _ExtractKey, typename _Equal,
+    1205              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1206              :            typename _RehashPolicy, typename _Traits>
+    1207              :     template<typename _InputIterator>
+    1208              :       _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1209              :                  _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1210              :       _Hashtable(_InputIterator __f, _InputIterator __l,
+    1211              :                  size_type __bkt_count_hint,
+    1212              :                  const _Hash& __h, const _Equal& __eq,
+    1213              :                  const allocator_type& __a, true_type /* __uks */)
+    1214              :       : _Hashtable(__bkt_count_hint, __h, __eq, __a)
+    1215              :       { this->insert(__f, __l); }
+    1216              : 
+    1217              :   template<typename _Key, typename _Value, typename _Alloc,
+    1218              :            typename _ExtractKey, typename _Equal,
+    1219              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1220              :            typename _RehashPolicy, typename _Traits>
+    1221              :     template<typename _InputIterator>
+    1222              :       _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1223              :                  _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1224              :       _Hashtable(_InputIterator __f, _InputIterator __l,
+    1225              :                  size_type __bkt_count_hint,
+    1226              :                  const _Hash& __h, const _Equal& __eq,
+    1227              :                  const allocator_type& __a, false_type __uks)
+    1228              :       : _Hashtable(__h, __eq, __a)
+    1229              :       {
+    1230              :         auto __nb_elems = __detail::__distance_fw(__f, __l);
+    1231              :         auto __bkt_count =
+    1232              :           _M_rehash_policy._M_next_bkt(
+    1233              :             std::max(_M_rehash_policy._M_bkt_for_elements(__nb_elems),
+    1234              :                      __bkt_count_hint));
+    1235              : 
+    1236              :         if (__bkt_count > _M_bucket_count)
+    1237              :           {
+    1238              :             _M_buckets = _M_allocate_buckets(__bkt_count);
+    1239              :             _M_bucket_count = __bkt_count;
+    1240              :           }
+    1241              : 
+    1242              :         __alloc_node_gen_t __node_gen(*this);
+    1243              :         for (; __f != __l; ++__f)
+    1244              :           _M_insert(*__f, __node_gen, __uks);
+    1245              :       }
+    1246              : 
+    1247              :   template<typename _Key, typename _Value, typename _Alloc,
+    1248              :            typename _ExtractKey, typename _Equal,
+    1249              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1250              :            typename _RehashPolicy, typename _Traits>
+    1251              :     auto
+    1252              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1253              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1254              :     operator=(const _Hashtable& __ht)
+    1255              :     -> _Hashtable&
+    1256              :     {
+    1257              :       if (&__ht == this)
+    1258              :         return *this;
+    1259              : 
+    1260              :       if (__node_alloc_traits::_S_propagate_on_copy_assign())
+    1261              :         {
+    1262              :           auto& __this_alloc = this->_M_node_allocator();
+    1263              :           auto& __that_alloc = __ht._M_node_allocator();
+    1264              :           if (!__node_alloc_traits::_S_always_equal()
+    1265              :               && __this_alloc != __that_alloc)
+    1266              :             {
+    1267              :               // Replacement allocator cannot free existing storage.
+    1268              :               this->_M_deallocate_nodes(_M_begin());
+    1269              :               _M_before_begin._M_nxt = nullptr;
+    1270              :               _M_deallocate_buckets();
+    1271              :               _M_buckets = nullptr;
+    1272              :               std::__alloc_on_copy(__this_alloc, __that_alloc);
+    1273              :               __hashtable_base::operator=(__ht);
+    1274              :               _M_bucket_count = __ht._M_bucket_count;
+    1275              :               _M_element_count = __ht._M_element_count;
+    1276              :               _M_rehash_policy = __ht._M_rehash_policy;
+    1277              :               __alloc_node_gen_t __alloc_node_gen(*this);
+    1278              :               __try
+    1279              :                 {
+    1280              :                   _M_assign(__ht, __alloc_node_gen);
+    1281              :                 }
+    1282              :               __catch(...)
+    1283              :                 {
+    1284              :                   // _M_assign took care of deallocating all memory. Now we
+    1285              :                   // must make sure this instance remains in a usable state.
+    1286              :                   _M_reset();
+    1287              :                   __throw_exception_again;
+    1288              :                 }
+    1289              :               return *this;
+    1290              :             }
+    1291              :           std::__alloc_on_copy(__this_alloc, __that_alloc);
+    1292              :         }
+    1293              : 
+    1294              :       // Reuse allocated buckets and nodes.
+    1295              :       _M_assign_elements(__ht);
+    1296              :       return *this;
+    1297              :     }
+    1298              : 
+    1299              :   template<typename _Key, typename _Value, typename _Alloc,
+    1300              :            typename _ExtractKey, typename _Equal,
+    1301              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1302              :            typename _RehashPolicy, typename _Traits>
+    1303              :     template<typename _Ht>
+    1304              :       void
+    1305              :       _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1306              :                  _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1307              :       _M_assign_elements(_Ht&& __ht)
+    1308              :       {
+    1309              :         __buckets_ptr __former_buckets = nullptr;
+    1310              :         std::size_t __former_bucket_count = _M_bucket_count;
+    1311              :         const __rehash_state& __former_state = _M_rehash_policy._M_state();
+    1312              : 
+    1313              :         if (_M_bucket_count != __ht._M_bucket_count)
+    1314              :           {
+    1315              :             __former_buckets = _M_buckets;
+    1316              :             _M_buckets = _M_allocate_buckets(__ht._M_bucket_count);
+    1317              :             _M_bucket_count = __ht._M_bucket_count;
+    1318              :           }
+    1319              :         else
+    1320              :           __builtin_memset(_M_buckets, 0,
+    1321              :                            _M_bucket_count * sizeof(__node_base_ptr));
+    1322              : 
+    1323              :         __try
+    1324              :           {
+    1325              :             __hashtable_base::operator=(std::forward<_Ht>(__ht));
+    1326              :             _M_element_count = __ht._M_element_count;
+    1327              :             _M_rehash_policy = __ht._M_rehash_policy;
+    1328              :             __reuse_or_alloc_node_gen_t __roan(_M_begin(), *this);
+    1329              :             _M_before_begin._M_nxt = nullptr;
+    1330              :             _M_assign(std::forward<_Ht>(__ht), __roan);
+    1331              :             if (__former_buckets)
+    1332              :               _M_deallocate_buckets(__former_buckets, __former_bucket_count);
+    1333              :           }
+    1334              :         __catch(...)
+    1335              :           {
+    1336              :             if (__former_buckets)
+    1337              :               {
+    1338              :                 // Restore previous buckets.
+    1339              :                 _M_deallocate_buckets();
+    1340              :                 _M_rehash_policy._M_reset(__former_state);
+    1341              :                 _M_buckets = __former_buckets;
+    1342              :                 _M_bucket_count = __former_bucket_count;
+    1343              :               }
+    1344              :             __builtin_memset(_M_buckets, 0,
+    1345              :                              _M_bucket_count * sizeof(__node_base_ptr));
+    1346              :             __throw_exception_again;
+    1347              :           }
+    1348              :       }
+    1349              : 
+    1350              :   template<typename _Key, typename _Value, typename _Alloc,
+    1351              :            typename _ExtractKey, typename _Equal,
+    1352              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1353              :            typename _RehashPolicy, typename _Traits>
+    1354              :     template<typename _Ht, typename _NodeGenerator>
+    1355              :       void
+    1356              :       _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1357              :                  _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1358              :       _M_assign(_Ht&& __ht, const _NodeGenerator& __node_gen)
+    1359              :       {
+    1360              :         __buckets_ptr __buckets = nullptr;
+    1361              :         if (!_M_buckets)
+    1362              :           _M_buckets = __buckets = _M_allocate_buckets(_M_bucket_count);
+    1363              : 
+    1364              :         __try
+    1365              :           {
+    1366              :             if (!__ht._M_before_begin._M_nxt)
+    1367              :               return;
+    1368              : 
+    1369              :             // First deal with the special first node pointed to by
+    1370              :             // _M_before_begin.
+    1371              :             __node_ptr __ht_n = __ht._M_begin();
+    1372              :             __node_ptr __this_n
+    1373              :               = __node_gen(__fwd_value_for<_Ht>(__ht_n->_M_v()));
+    1374              :             this->_M_copy_code(*__this_n, *__ht_n);
+    1375              :             _M_update_bbegin(__this_n);
+    1376              : 
+    1377              :             // Then deal with other nodes.
+    1378              :             __node_ptr __prev_n = __this_n;
+    1379              :             for (__ht_n = __ht_n->_M_next(); __ht_n; __ht_n = __ht_n->_M_next())
+    1380              :               {
+    1381              :                 __this_n = __node_gen(__fwd_value_for<_Ht>(__ht_n->_M_v()));
+    1382              :                 __prev_n->_M_nxt = __this_n;
+    1383              :                 this->_M_copy_code(*__this_n, *__ht_n);
+    1384              :                 size_type __bkt = _M_bucket_index(*__this_n);
+    1385              :                 if (!_M_buckets[__bkt])
+    1386              :                   _M_buckets[__bkt] = __prev_n;
+    1387              :                 __prev_n = __this_n;
+    1388              :               }
+    1389              :           }
+    1390              :         __catch(...)
+    1391              :           {
+    1392              :             clear();
+    1393              :             if (__buckets)
+    1394              :               _M_deallocate_buckets();
+    1395              :             __throw_exception_again;
+    1396              :           }
+    1397              :       }
+    1398              : 
+    1399              :   template<typename _Key, typename _Value, typename _Alloc,
+    1400              :            typename _ExtractKey, typename _Equal,
+    1401              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1402              :            typename _RehashPolicy, typename _Traits>
+    1403              :     void
+    1404              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1405              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1406              :     _M_reset() noexcept
+    1407              :     {
+    1408              :       _M_rehash_policy._M_reset();
+    1409              :       _M_bucket_count = 1;
+    1410              :       _M_single_bucket = nullptr;
+    1411              :       _M_buckets = &_M_single_bucket;
+    1412              :       _M_before_begin._M_nxt = nullptr;
+    1413              :       _M_element_count = 0;
+    1414              :     }
+    1415              : 
+    1416              :   template<typename _Key, typename _Value, typename _Alloc,
+    1417              :            typename _ExtractKey, typename _Equal,
+    1418              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1419              :            typename _RehashPolicy, typename _Traits>
+    1420              :     void
+    1421              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1422              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1423              :     _M_move_assign(_Hashtable&& __ht, true_type)
+    1424              :     {
+    1425              :       if (__builtin_expect(std::__addressof(__ht) == this, false))
+    1426              :         return;
+    1427              : 
+    1428              :       this->_M_deallocate_nodes(_M_begin());
+    1429              :       _M_deallocate_buckets();
+    1430              :       __hashtable_base::operator=(std::move(__ht));
+    1431              :       _M_rehash_policy = __ht._M_rehash_policy;
+    1432              :       if (!__ht._M_uses_single_bucket())
+    1433              :         _M_buckets = __ht._M_buckets;
+    1434              :       else
+    1435              :         {
+    1436              :           _M_buckets = &_M_single_bucket;
+    1437              :           _M_single_bucket = __ht._M_single_bucket;
+    1438              :         }
+    1439              : 
+    1440              :       _M_bucket_count = __ht._M_bucket_count;
+    1441              :       _M_before_begin._M_nxt = __ht._M_before_begin._M_nxt;
+    1442              :       _M_element_count = __ht._M_element_count;
+    1443              :       std::__alloc_on_move(this->_M_node_allocator(), __ht._M_node_allocator());
+    1444              : 
+    1445              :       // Fix bucket containing the _M_before_begin pointer that can't be moved.
+    1446              :       _M_update_bbegin();
+    1447              :       __ht._M_reset();
+    1448              :     }
+    1449              : 
+    1450              :   template<typename _Key, typename _Value, typename _Alloc,
+    1451              :            typename _ExtractKey, typename _Equal,
+    1452              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1453              :            typename _RehashPolicy, typename _Traits>
+    1454              :     void
+    1455              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1456              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1457              :     _M_move_assign(_Hashtable&& __ht, false_type)
+    1458              :     {
+    1459              :       if (__ht._M_node_allocator() == this->_M_node_allocator())
+    1460              :         _M_move_assign(std::move(__ht), true_type{});
+    1461              :       else
+    1462              :         {
+    1463              :           // Can't move memory, move elements then.
+    1464              :           _M_assign_elements(std::move(__ht));
+    1465              :           __ht.clear();
+    1466              :         }
+    1467              :     }
+    1468              : 
+    1469              :   template<typename _Key, typename _Value, typename _Alloc,
+    1470              :            typename _ExtractKey, typename _Equal,
+    1471              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1472              :            typename _RehashPolicy, typename _Traits>
+    1473              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1474              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1475              :     _Hashtable(const _Hashtable& __ht)
+    1476              :     : __hashtable_base(__ht),
+    1477              :       __map_base(__ht),
+    1478              :       __rehash_base(__ht),
+    1479              :       __hashtable_alloc(
+    1480              :         __node_alloc_traits::_S_select_on_copy(__ht._M_node_allocator())),
+    1481              :       __enable_default_ctor(__ht),
+    1482              :       _M_buckets(nullptr),
+    1483              :       _M_bucket_count(__ht._M_bucket_count),
+    1484              :       _M_element_count(__ht._M_element_count),
+    1485              :       _M_rehash_policy(__ht._M_rehash_policy)
+    1486              :     {
+    1487              :       __alloc_node_gen_t __alloc_node_gen(*this);
+    1488              :       _M_assign(__ht, __alloc_node_gen);
+    1489              :     }
+    1490              : 
+    1491              :   template<typename _Key, typename _Value, typename _Alloc,
+    1492              :            typename _ExtractKey, typename _Equal,
+    1493              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1494              :            typename _RehashPolicy, typename _Traits>
+    1495              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1496              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1497              :     _Hashtable(_Hashtable&& __ht, __node_alloc_type&& __a,
+    1498              :                true_type /* alloc always equal */)
+    1499              :     noexcept(_S_nothrow_move())
+    1500              :     : __hashtable_base(__ht),
+    1501              :       __map_base(__ht),
+    1502              :       __rehash_base(__ht),
+    1503              :       __hashtable_alloc(std::move(__a)),
+    1504              :       __enable_default_ctor(__ht),
+    1505              :       _M_buckets(__ht._M_buckets),
+    1506              :       _M_bucket_count(__ht._M_bucket_count),
+    1507              :       _M_before_begin(__ht._M_before_begin._M_nxt),
+    1508              :       _M_element_count(__ht._M_element_count),
+    1509              :       _M_rehash_policy(__ht._M_rehash_policy)
+    1510              :     {
+    1511              :       // Update buckets if __ht is using its single bucket.
+    1512              :       if (__ht._M_uses_single_bucket())
+    1513              :         {
+    1514              :           _M_buckets = &_M_single_bucket;
+    1515              :           _M_single_bucket = __ht._M_single_bucket;
+    1516              :         }
+    1517              : 
+    1518              :       // Fix bucket containing the _M_before_begin pointer that can't be moved.
+    1519              :       _M_update_bbegin();
+    1520              : 
+    1521              :       __ht._M_reset();
+    1522              :     }
+    1523              : 
+    1524              :   template<typename _Key, typename _Value, typename _Alloc,
+    1525              :            typename _ExtractKey, typename _Equal,
+    1526              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1527              :            typename _RehashPolicy, typename _Traits>
+    1528              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1529              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1530              :     _Hashtable(const _Hashtable& __ht, const allocator_type& __a)
+    1531              :     : __hashtable_base(__ht),
+    1532              :       __map_base(__ht),
+    1533              :       __rehash_base(__ht),
+    1534              :       __hashtable_alloc(__node_alloc_type(__a)),
+    1535              :       __enable_default_ctor(__ht),
+    1536              :       _M_buckets(),
+    1537              :       _M_bucket_count(__ht._M_bucket_count),
+    1538              :       _M_element_count(__ht._M_element_count),
+    1539              :       _M_rehash_policy(__ht._M_rehash_policy)
+    1540              :     {
+    1541              :       __alloc_node_gen_t __alloc_node_gen(*this);
+    1542              :       _M_assign(__ht, __alloc_node_gen);
+    1543              :     }
+    1544              : 
+    1545              :   template<typename _Key, typename _Value, typename _Alloc,
+    1546              :            typename _ExtractKey, typename _Equal,
+    1547              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1548              :            typename _RehashPolicy, typename _Traits>
+    1549              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1550              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1551              :     _Hashtable(_Hashtable&& __ht, __node_alloc_type&& __a,
+    1552              :                false_type /* alloc always equal */)
+    1553              :     : __hashtable_base(__ht),
+    1554              :       __map_base(__ht),
+    1555              :       __rehash_base(__ht),
+    1556              :       __hashtable_alloc(std::move(__a)),
+    1557              :       __enable_default_ctor(__ht),
+    1558              :       _M_buckets(nullptr),
+    1559              :       _M_bucket_count(__ht._M_bucket_count),
+    1560              :       _M_element_count(__ht._M_element_count),
+    1561              :       _M_rehash_policy(__ht._M_rehash_policy)
+    1562              :     {
+    1563              :       if (__ht._M_node_allocator() == this->_M_node_allocator())
+    1564              :         {
+    1565              :           if (__ht._M_uses_single_bucket())
+    1566              :             {
+    1567              :               _M_buckets = &_M_single_bucket;
+    1568              :               _M_single_bucket = __ht._M_single_bucket;
+    1569              :             }
+    1570              :           else
+    1571              :             _M_buckets = __ht._M_buckets;
+    1572              : 
+    1573              :           // Fix bucket containing the _M_before_begin pointer that can't be
+    1574              :           // moved.
+    1575              :           _M_update_bbegin(__ht._M_begin());
+    1576              : 
+    1577              :           __ht._M_reset();
+    1578              :         }
+    1579              :       else
+    1580              :         {
+    1581              :           __alloc_node_gen_t __alloc_gen(*this);
+    1582              : 
+    1583              :           using _Fwd_Ht = __conditional_t<
+    1584              :             __move_if_noexcept_cond<value_type>::value,
+    1585              :             const _Hashtable&, _Hashtable&&>;
+    1586              :           _M_assign(std::forward<_Fwd_Ht>(__ht), __alloc_gen);
+    1587              :           __ht.clear();
+    1588              :         }
+    1589              :     }
+    1590              : 
+    1591              :   template<typename _Key, typename _Value, typename _Alloc,
+    1592              :            typename _ExtractKey, typename _Equal,
+    1593              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1594              :            typename _RehashPolicy, typename _Traits>
+    1595       123656 :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1596              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1597              :     ~_Hashtable() noexcept
+    1598              :     {
+    1599              :       // Getting a bucket index from a node shall not throw because it is used
+    1600              :       // in methods (erase, swap...) that shall not throw. Need a complete
+    1601              :       // type to check this, so do it in the destructor not at class scope.
+    1602              :       static_assert(noexcept(declval<const __hash_code_base_access&>()
+    1603              :                         ._M_bucket_index(declval<const __node_value_type&>(),
+    1604              :                                          (std::size_t)0)),
+    1605              :                     "Cache the hash code or qualify your functors involved"
+    1606              :                     " in hash code and bucket index computation with noexcept");
+    1607              : 
+    1608       123656 :       clear();
+    1609       123656 :       _M_deallocate_buckets();
+    1610       123656 :     }
+    1611              : 
+    1612              :   template<typename _Key, typename _Value, typename _Alloc,
+    1613              :            typename _ExtractKey, typename _Equal,
+    1614              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1615              :            typename _RehashPolicy, typename _Traits>
+    1616              :     void
+    1617              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1618              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1619              :     swap(_Hashtable& __x)
+    1620              :     noexcept(__and_<__is_nothrow_swappable<_Hash>,
+    1621              :                         __is_nothrow_swappable<_Equal>>::value)
+    1622              :     {
+    1623              :       // The only base class with member variables is hash_code_base.
+    1624              :       // We define _Hash_code_base::_M_swap because different
+    1625              :       // specializations have different members.
+    1626              :       this->_M_swap(__x);
+    1627              : 
+    1628              :       std::__alloc_on_swap(this->_M_node_allocator(), __x._M_node_allocator());
+    1629              :       std::swap(_M_rehash_policy, __x._M_rehash_policy);
+    1630              : 
+    1631              :       // Deal properly with potentially moved instances.
+    1632              :       if (this->_M_uses_single_bucket())
+    1633              :         {
+    1634              :           if (!__x._M_uses_single_bucket())
+    1635              :             {
+    1636              :               _M_buckets = __x._M_buckets;
+    1637              :               __x._M_buckets = &__x._M_single_bucket;
+    1638              :             }
+    1639              :         }
+    1640              :       else if (__x._M_uses_single_bucket())
+    1641              :         {
+    1642              :           __x._M_buckets = _M_buckets;
+    1643              :           _M_buckets = &_M_single_bucket;
+    1644              :         }       
+    1645              :       else
+    1646              :         std::swap(_M_buckets, __x._M_buckets);
+    1647              : 
+    1648              :       std::swap(_M_bucket_count, __x._M_bucket_count);
+    1649              :       std::swap(_M_before_begin._M_nxt, __x._M_before_begin._M_nxt);
+    1650              :       std::swap(_M_element_count, __x._M_element_count);
+    1651              :       std::swap(_M_single_bucket, __x._M_single_bucket);
+    1652              : 
+    1653              :       // Fix buckets containing the _M_before_begin pointers that can't be
+    1654              :       // swapped.
+    1655              :       _M_update_bbegin();
+    1656              :       __x._M_update_bbegin();
+    1657              :     }
+    1658              : 
+    1659              :   template<typename _Key, typename _Value, typename _Alloc,
+    1660              :            typename _ExtractKey, typename _Equal,
+    1661              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1662              :            typename _RehashPolicy, typename _Traits>
+    1663              :     auto
+    1664        41704 :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1665              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1666              :     find(const key_type& __k)
+    1667              :     -> iterator
+    1668              :     {
+    1669        41704 :       if (size() <= __small_size_threshold())
+    1670              :         {
+    1671        69624 :           for (auto __it = begin(); __it != end(); ++__it)
+    1672        33476 :             if (this->_M_key_equals(__k, *__it._M_cur))
+    1673            8 :               return __it;
+    1674        36148 :           return end();
+    1675              :         }
+    1676              : 
+    1677         5548 :       __hash_code __code = this->_M_hash_code(__k);
+    1678         5548 :       std::size_t __bkt = _M_bucket_index(__code);
+    1679         5548 :       return iterator(_M_find_node(__bkt, __k, __code));
+    1680              :     }
+    1681              : 
+    1682              :   template<typename _Key, typename _Value, typename _Alloc,
+    1683              :            typename _ExtractKey, typename _Equal,
+    1684              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1685              :            typename _RehashPolicy, typename _Traits>
+    1686              :     auto
+    1687              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1688              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1689              :     find(const key_type& __k) const
+    1690              :     -> const_iterator
+    1691              :     {
+    1692              :       if (size() <= __small_size_threshold())
+    1693              :         {
+    1694              :           for (auto __it = begin(); __it != end(); ++__it)
+    1695              :             if (this->_M_key_equals(__k, *__it._M_cur))
+    1696              :               return __it;
+    1697              :           return end();
+    1698              :         }
+    1699              : 
+    1700              :       __hash_code __code = this->_M_hash_code(__k);
+    1701              :       std::size_t __bkt = _M_bucket_index(__code);
+    1702              :       return const_iterator(_M_find_node(__bkt, __k, __code));
+    1703              :     }
+    1704              : 
+    1705              : #if __cplusplus > 201703L
+    1706              :   template<typename _Key, typename _Value, typename _Alloc,
+    1707              :            typename _ExtractKey, typename _Equal,
+    1708              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1709              :            typename _RehashPolicy, typename _Traits>
+    1710              :     template<typename _Kt, typename, typename>
+    1711              :       auto
+    1712              :       _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1713              :                  _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1714              :       _M_find_tr(const _Kt& __k)
+    1715              :       -> iterator
+    1716              :       {
+    1717              :         __hash_code __code = this->_M_hash_code_tr(__k);
+    1718              :         std::size_t __bkt = _M_bucket_index(__code);
+    1719              :         return iterator(_M_find_node_tr(__bkt, __k, __code));
+    1720              :       }
+    1721              : 
+    1722              :   template<typename _Key, typename _Value, typename _Alloc,
+    1723              :            typename _ExtractKey, typename _Equal,
+    1724              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1725              :            typename _RehashPolicy, typename _Traits>
+    1726              :     template<typename _Kt, typename, typename>
+    1727              :       auto
+    1728              :       _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1729              :                  _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1730              :       _M_find_tr(const _Kt& __k) const
+    1731              :       -> const_iterator
+    1732              :       {
+    1733              :         __hash_code __code = this->_M_hash_code_tr(__k);
+    1734              :         std::size_t __bkt = _M_bucket_index(__code);
+    1735              :         return const_iterator(_M_find_node_tr(__bkt, __k, __code));
+    1736              :       }
+    1737              : #endif
+    1738              : 
+    1739              :   template<typename _Key, typename _Value, typename _Alloc,
+    1740              :            typename _ExtractKey, typename _Equal,
+    1741              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1742              :            typename _RehashPolicy, typename _Traits>
+    1743              :     auto
+    1744              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1745              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1746              :     count(const key_type& __k) const
+    1747              :     -> size_type
+    1748              :     {
+    1749              :       auto __it = find(__k);
+    1750              :       if (!__it._M_cur)
+    1751              :         return 0;
+    1752              : 
+    1753              :       if (__unique_keys::value)
+    1754              :         return 1;
+    1755              : 
+    1756              :       // All equivalent values are next to each other, if we find a
+    1757              :       // non-equivalent value after an equivalent one it means that we won't
+    1758              :       // find any new equivalent value.
+    1759              :       size_type __result = 1;
+    1760              :       for (auto __ref = __it++;
+    1761              :            __it._M_cur && this->_M_node_equals(*__ref._M_cur, *__it._M_cur);
+    1762              :            ++__it)
+    1763              :         ++__result;
+    1764              : 
+    1765              :       return __result;
+    1766              :     }
+    1767              : 
+    1768              : #if __cplusplus > 201703L
+    1769              :   template<typename _Key, typename _Value, typename _Alloc,
+    1770              :            typename _ExtractKey, typename _Equal,
+    1771              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1772              :            typename _RehashPolicy, typename _Traits>
+    1773              :     template<typename _Kt, typename, typename>
+    1774              :       auto
+    1775              :       _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1776              :                  _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1777              :       _M_count_tr(const _Kt& __k) const
+    1778              :       -> size_type
+    1779              :       {
+    1780              :         __hash_code __code = this->_M_hash_code_tr(__k);
+    1781              :         std::size_t __bkt = _M_bucket_index(__code);
+    1782              :         auto __n = _M_find_node_tr(__bkt, __k, __code);
+    1783              :         if (!__n)
+    1784              :           return 0;
+    1785              : 
+    1786              :         // All equivalent values are next to each other, if we find a
+    1787              :         // non-equivalent value after an equivalent one it means that we won't
+    1788              :         // find any new equivalent value.
+    1789              :         iterator __it(__n);
+    1790              :         size_type __result = 1;
+    1791              :         for (++__it;
+    1792              :              __it._M_cur && this->_M_equals_tr(__k, __code, *__it._M_cur);
+    1793              :              ++__it)
+    1794              :           ++__result;
+    1795              : 
+    1796              :         return __result;
+    1797              :       }
+    1798              : #endif
+    1799              : 
+    1800              :   template<typename _Key, typename _Value, typename _Alloc,
+    1801              :            typename _ExtractKey, typename _Equal,
+    1802              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1803              :            typename _RehashPolicy, typename _Traits>
+    1804              :     auto
+    1805              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1806              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1807              :     equal_range(const key_type& __k)
+    1808              :     -> pair<iterator, iterator>
+    1809              :     {
+    1810              :       auto __ite = find(__k);
+    1811              :       if (!__ite._M_cur)
+    1812              :         return { __ite, __ite };
+    1813              : 
+    1814              :       auto __beg = __ite++;
+    1815              :       if (__unique_keys::value)
+    1816              :         return { __beg, __ite };
+    1817              : 
+    1818              :       // All equivalent values are next to each other, if we find a
+    1819              :       // non-equivalent value after an equivalent one it means that we won't
+    1820              :       // find any new equivalent value.
+    1821              :       while (__ite._M_cur && this->_M_node_equals(*__beg._M_cur, *__ite._M_cur))
+    1822              :         ++__ite;
+    1823              : 
+    1824              :       return { __beg, __ite };
+    1825              :     }
+    1826              : 
+    1827              :   template<typename _Key, typename _Value, typename _Alloc,
+    1828              :            typename _ExtractKey, typename _Equal,
+    1829              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1830              :            typename _RehashPolicy, typename _Traits>
+    1831              :     auto
+    1832              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1833              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1834              :     equal_range(const key_type& __k) const
+    1835              :     -> pair<const_iterator, const_iterator>
+    1836              :     {
+    1837              :       auto __ite = find(__k);
+    1838              :       if (!__ite._M_cur)
+    1839              :         return { __ite, __ite };
+    1840              : 
+    1841              :       auto __beg = __ite++;
+    1842              :       if (__unique_keys::value)
+    1843              :         return { __beg, __ite };
+    1844              : 
+    1845              :       // All equivalent values are next to each other, if we find a
+    1846              :       // non-equivalent value after an equivalent one it means that we won't
+    1847              :       // find any new equivalent value.
+    1848              :       while (__ite._M_cur && this->_M_node_equals(*__beg._M_cur, *__ite._M_cur))
+    1849              :         ++__ite;
+    1850              : 
+    1851              :       return { __beg, __ite };
+    1852              :     }
+    1853              : 
+    1854              : #if __cplusplus > 201703L
+    1855              :   template<typename _Key, typename _Value, typename _Alloc,
+    1856              :            typename _ExtractKey, typename _Equal,
+    1857              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1858              :            typename _RehashPolicy, typename _Traits>
+    1859              :     template<typename _Kt, typename, typename>
+    1860              :       auto
+    1861              :       _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1862              :                  _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1863              :       _M_equal_range_tr(const _Kt& __k)
+    1864              :       -> pair<iterator, iterator>
+    1865              :       {
+    1866              :         __hash_code __code = this->_M_hash_code_tr(__k);
+    1867              :         std::size_t __bkt = _M_bucket_index(__code);
+    1868              :         auto __n = _M_find_node_tr(__bkt, __k, __code);
+    1869              :         iterator __ite(__n);
+    1870              :         if (!__n)
+    1871              :           return { __ite, __ite };
+    1872              : 
+    1873              :         // All equivalent values are next to each other, if we find a
+    1874              :         // non-equivalent value after an equivalent one it means that we won't
+    1875              :         // find any new equivalent value.
+    1876              :         auto __beg = __ite++;
+    1877              :         while (__ite._M_cur && this->_M_equals_tr(__k, __code, *__ite._M_cur))
+    1878              :           ++__ite;
+    1879              : 
+    1880              :         return { __beg, __ite };
+    1881              :       }
+    1882              : 
+    1883              :   template<typename _Key, typename _Value, typename _Alloc,
+    1884              :            typename _ExtractKey, typename _Equal,
+    1885              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1886              :            typename _RehashPolicy, typename _Traits>
+    1887              :     template<typename _Kt, typename, typename>
+    1888              :       auto
+    1889              :       _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1890              :                  _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1891              :       _M_equal_range_tr(const _Kt& __k) const
+    1892              :       -> pair<const_iterator, const_iterator>
+    1893              :       {
+    1894              :         __hash_code __code = this->_M_hash_code_tr(__k);
+    1895              :         std::size_t __bkt = _M_bucket_index(__code);
+    1896              :         auto __n = _M_find_node_tr(__bkt, __k, __code);
+    1897              :         const_iterator __ite(__n);
+    1898              :         if (!__n)
+    1899              :           return { __ite, __ite };
+    1900              : 
+    1901              :         // All equivalent values are next to each other, if we find a
+    1902              :         // non-equivalent value after an equivalent one it means that we won't
+    1903              :         // find any new equivalent value.
+    1904              :         auto __beg = __ite++;
+    1905              :         while (__ite._M_cur && this->_M_equals_tr(__k, __code, *__ite._M_cur))
+    1906              :           ++__ite;
+    1907              : 
+    1908              :         return { __beg, __ite };
+    1909              :       }
+    1910              : #endif
+    1911              : 
+    1912              :   // Find the node before the one whose key compares equal to k.
+    1913              :   // Return nullptr if no node is found.
+    1914              :   template<typename _Key, typename _Value, typename _Alloc,
+    1915              :            typename _ExtractKey, typename _Equal,
+    1916              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1917              :            typename _RehashPolicy, typename _Traits>
+    1918              :     auto
+    1919        30520 :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1920              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1921              :     _M_find_before_node(const key_type& __k)
+    1922              :     -> __node_base_ptr
+    1923              :     {
+    1924        30520 :       __node_base_ptr __prev_p = &_M_before_begin;
+    1925        30520 :       if (!__prev_p->_M_nxt)
+    1926            0 :         return nullptr;
+    1927              : 
+    1928        30520 :       for (__node_ptr __p = static_cast<__node_ptr>(__prev_p->_M_nxt);
+    1929        30568 :            __p != nullptr;
+    1930           48 :            __p = __p->_M_next())
+    1931              :         {
+    1932        30568 :           if (this->_M_key_equals(__k, *__p))
+    1933        30520 :             return __prev_p;
+    1934              : 
+    1935           48 :           __prev_p = __p;
+    1936              :         }
+    1937              : 
+    1938            0 :       return nullptr;
+    1939              :     }
+    1940              : 
+    1941              :   // Find the node before the one whose key compares equal to k in the bucket
+    1942              :   // bkt. Return nullptr if no node is found.
+    1943              :   template<typename _Key, typename _Value, typename _Alloc,
+    1944              :            typename _ExtractKey, typename _Equal,
+    1945              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1946              :            typename _RehashPolicy, typename _Traits>
+    1947              :     auto
+    1948      5928688 :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1949              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1950              :     _M_find_before_node(size_type __bkt, const key_type& __k,
+    1951              :                         __hash_code __code) const
+    1952              :     -> __node_base_ptr
+    1953              :     {
+    1954      5928688 :       __node_base_ptr __prev_p = _M_buckets[__bkt];
+    1955      5928688 :       if (!__prev_p)
+    1956       201034 :         return nullptr;
+    1957              : 
+    1958      5727654 :       for (__node_ptr __p = static_cast<__node_ptr>(__prev_p->_M_nxt);;
+    1959         1966 :            __p = __p->_M_next())
+    1960              :         {
+    1961      5729620 :           if (this->_M_equals(__k, __code, *__p))
+    1962      5724128 :             return __prev_p;
+    1963              : 
+    1964         5492 :           if (!__p->_M_nxt || _M_bucket_index(*__p->_M_next()) != __bkt)
+    1965         3526 :             break;
+    1966         1966 :           __prev_p = __p;
+    1967              :         }
+    1968              : 
+    1969         3526 :       return nullptr;
+    1970              :     }
+    1971              : 
+    1972              :   template<typename _Key, typename _Value, typename _Alloc,
+    1973              :            typename _ExtractKey, typename _Equal,
+    1974              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1975              :            typename _RehashPolicy, typename _Traits>
+    1976              :     template<typename _Kt>
+    1977              :       auto
+    1978         2832 :       _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1979              :                  _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    1980              :       _M_find_before_node_tr(size_type __bkt, const _Kt& __k,
+    1981              :                              __hash_code __code) const
+    1982              :       -> __node_base_ptr
+    1983              :       {
+    1984         2832 :         __node_base_ptr __prev_p = _M_buckets[__bkt];
+    1985         2832 :         if (!__prev_p)
+    1986         1376 :           return nullptr;
+    1987              : 
+    1988         1456 :         for (__node_ptr __p = static_cast<__node_ptr>(__prev_p->_M_nxt);;
+    1989          564 :              __p = __p->_M_next())
+    1990              :           {
+    1991         2020 :             if (this->_M_equals_tr(__k, __code, *__p))
+    1992            2 :               return __prev_p;
+    1993              : 
+    1994         2018 :             if (!__p->_M_nxt || _M_bucket_index(*__p->_M_next()) != __bkt)
+    1995         1454 :               break;
+    1996          564 :             __prev_p = __p;
+    1997              :           }
+    1998              : 
+    1999         1454 :         return nullptr;
+    2000              :       }
+    2001              : 
+    2002              :   template<typename _Key, typename _Value, typename _Alloc,
+    2003              :            typename _ExtractKey, typename _Equal,
+    2004              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2005              :            typename _RehashPolicy, typename _Traits>
+    2006              :     void
+    2007       260158 :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2008              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2009              :     _M_insert_bucket_begin(size_type __bkt, __node_ptr __node)
+    2010              :     {
+    2011       260158 :       if (_M_buckets[__bkt])
+    2012              :         {
+    2013              :           // Bucket is not empty, we just need to insert the new node
+    2014              :           // after the bucket before begin.
+    2015         3210 :           __node->_M_nxt = _M_buckets[__bkt]->_M_nxt;
+    2016         3210 :           _M_buckets[__bkt]->_M_nxt = __node;
+    2017              :         }
+    2018              :       else
+    2019              :         {
+    2020              :           // The bucket is empty, the new node is inserted at the
+    2021              :           // beginning of the singly-linked list and the bucket will
+    2022              :           // contain _M_before_begin pointer.
+    2023       256948 :           __node->_M_nxt = _M_before_begin._M_nxt;
+    2024       256948 :           _M_before_begin._M_nxt = __node;
+    2025              : 
+    2026       256948 :           if (__node->_M_nxt)
+    2027              :             // We must update former begin bucket that is pointing to
+    2028              :             // _M_before_begin.
+    2029       140732 :             _M_buckets[_M_bucket_index(*__node->_M_next())] = __node;
+    2030              : 
+    2031       256948 :           _M_buckets[__bkt] = &_M_before_begin;
+    2032              :         }
+    2033       260158 :     }
+    2034              : 
+    2035              :   template<typename _Key, typename _Value, typename _Alloc,
+    2036              :            typename _ExtractKey, typename _Equal,
+    2037              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2038              :            typename _RehashPolicy, typename _Traits>
+    2039              :     void
+    2040        30520 :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2041              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2042              :     _M_remove_bucket_begin(size_type __bkt, __node_ptr __next,
+    2043              :                            size_type __next_bkt)
+    2044              :     {
+    2045        30520 :       if (!__next || __next_bkt != __bkt)
+    2046              :         {
+    2047              :           // Bucket is now empty
+    2048              :           // First update next bucket if any
+    2049        30108 :           if (__next)
+    2050         5166 :             _M_buckets[__next_bkt] = _M_buckets[__bkt];
+    2051              : 
+    2052              :           // Second update before begin node if necessary
+    2053        30108 :           if (&_M_before_begin == _M_buckets[__bkt])
+    2054        30108 :             _M_before_begin._M_nxt = __next;
+    2055        30108 :           _M_buckets[__bkt] = nullptr;
+    2056              :         }
+    2057        30520 :     }
+    2058              : 
+    2059              :   template<typename _Key, typename _Value, typename _Alloc,
+    2060              :            typename _ExtractKey, typename _Equal,
+    2061              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2062              :            typename _RehashPolicy, typename _Traits>
+    2063              :     auto
+    2064              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2065              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2066              :     _M_get_previous_node(size_type __bkt, __node_ptr __n)
+    2067              :     -> __node_base_ptr
+    2068              :     {
+    2069              :       __node_base_ptr __prev_n = _M_buckets[__bkt];
+    2070              :       while (__prev_n->_M_nxt != __n)
+    2071              :         __prev_n = __prev_n->_M_nxt;
+    2072              :       return __prev_n;
+    2073              :     }
+    2074              : 
+    2075              :   template<typename _Key, typename _Value, typename _Alloc,
+    2076              :            typename _ExtractKey, typename _Equal,
+    2077              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2078              :            typename _RehashPolicy, typename _Traits>
+    2079              :     template<typename... _Args>
+    2080              :       auto
+    2081           30 :       _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2082              :                  _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2083              :       _M_emplace(true_type /* __uks */, _Args&&... __args)
+    2084              :       -> pair<iterator, bool>
+    2085              :       {
+    2086              :         // First build the node to get access to the hash code
+    2087           30 :         _Scoped_node __node { this, std::forward<_Args>(__args)...  };
+    2088           60 :         const key_type& __k = _ExtractKey{}(__node._M_node->_M_v());
+    2089           30 :         if (size() <= __small_size_threshold())
+    2090              :           {
+    2091           62 :             for (auto __it = begin(); __it != end(); ++__it)
+    2092           32 :               if (this->_M_key_equals(__k, *__it._M_cur))
+    2093              :                 // There is already an equivalent node, no insertion
+    2094            0 :                 return { __it, false };
+    2095              :           }
+    2096              : 
+    2097           30 :         __hash_code __code = this->_M_hash_code(__k);
+    2098           30 :         size_type __bkt = _M_bucket_index(__code);
+    2099           30 :         if (size() > __small_size_threshold())
+    2100            0 :           if (__node_ptr __p = _M_find_node(__bkt, __k, __code))
+    2101              :             // There is already an equivalent node, no insertion
+    2102            0 :             return { iterator(__p), false };
+    2103              : 
+    2104              :         // Insert the node
+    2105           30 :         auto __pos = _M_insert_unique_node(__bkt, __code, __node._M_node);
+    2106           30 :         __node._M_node = nullptr;
+    2107           30 :         return { __pos, true };
+    2108           30 :       }
+    2109              : 
+    2110              :   template<typename _Key, typename _Value, typename _Alloc,
+    2111              :            typename _ExtractKey, typename _Equal,
+    2112              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2113              :            typename _RehashPolicy, typename _Traits>
+    2114              :     template<typename... _Args>
+    2115              :       auto
+    2116              :       _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2117              :                  _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2118              :       _M_emplace(const_iterator __hint, false_type /* __uks */,
+    2119              :                  _Args&&... __args)
+    2120              :       -> iterator
+    2121              :       {
+    2122              :         // First build the node to get its hash code.
+    2123              :         _Scoped_node __node { this, std::forward<_Args>(__args)...  };
+    2124              :         const key_type& __k = _ExtractKey{}(__node._M_node->_M_v());
+    2125              : 
+    2126              :         auto __res = this->_M_compute_hash_code(__hint, __k);
+    2127              :         auto __pos
+    2128              :           = _M_insert_multi_node(__res.first._M_cur, __res.second,
+    2129              :                                  __node._M_node);
+    2130              :         __node._M_node = nullptr;
+    2131              :         return __pos;
+    2132              :       }
+    2133              : 
+    2134              :   template<typename _Key, typename _Value, typename _Alloc,
+    2135              :            typename _ExtractKey, typename _Equal,
+    2136              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2137              :            typename _RehashPolicy, typename _Traits>
+    2138              :     auto
+    2139              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2140              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2141              :     _M_compute_hash_code(const_iterator __hint, const key_type& __k) const
+    2142              :     -> pair<const_iterator, __hash_code>
+    2143              :     {
+    2144              :       if (size() <= __small_size_threshold())
+    2145              :         {
+    2146              :           if (__hint != cend())
+    2147              :             {
+    2148              :               for (auto __it = __hint; __it != cend(); ++__it)
+    2149              :                 if (this->_M_key_equals(__k, *__it._M_cur))
+    2150              :                   return { __it, this->_M_hash_code(*__it._M_cur) };
+    2151              :             }
+    2152              : 
+    2153              :           for (auto __it = cbegin(); __it != __hint; ++__it)
+    2154              :             if (this->_M_key_equals(__k, *__it._M_cur))
+    2155              :               return { __it, this->_M_hash_code(*__it._M_cur) };
+    2156              :         }
+    2157              : 
+    2158              :       return { __hint, this->_M_hash_code(__k) };
+    2159              :     }
+    2160              : 
+    2161              :   template<typename _Key, typename _Value, typename _Alloc,
+    2162              :            typename _ExtractKey, typename _Equal,
+    2163              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2164              :            typename _RehashPolicy, typename _Traits>
+    2165              :     auto
+    2166       260158 :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2167              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2168              :     _M_insert_unique_node(size_type __bkt, __hash_code __code,
+    2169              :                           __node_ptr __node, size_type __n_elt)
+    2170              :     -> iterator
+    2171              :     {
+    2172       260158 :       const __rehash_state& __saved_state = _M_rehash_policy._M_state();
+    2173              :       std::pair<bool, std::size_t> __do_rehash
+    2174       260158 :         = _M_rehash_policy._M_need_rehash(_M_bucket_count, _M_element_count,
+    2175              :                                           __n_elt);
+    2176              : 
+    2177       260158 :       if (__do_rehash.first)
+    2178              :         {
+    2179       116624 :           _M_rehash(__do_rehash.second, __saved_state);
+    2180       116624 :           __bkt = _M_bucket_index(__code);
+    2181              :         }
+    2182              : 
+    2183       260158 :       this->_M_store_code(*__node, __code);
+    2184              : 
+    2185              :       // Always insert at the beginning of the bucket.
+    2186       260158 :       _M_insert_bucket_begin(__bkt, __node);
+    2187       260158 :       ++_M_element_count;
+    2188       260158 :       return iterator(__node);
+    2189              :     }
+    2190              : 
+    2191              :   template<typename _Key, typename _Value, typename _Alloc,
+    2192              :            typename _ExtractKey, typename _Equal,
+    2193              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2194              :            typename _RehashPolicy, typename _Traits>
+    2195              :     auto
+    2196              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2197              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2198              :     _M_insert_multi_node(__node_ptr __hint,
+    2199              :                          __hash_code __code, __node_ptr __node)
+    2200              :     -> iterator
+    2201              :     {
+    2202              :       const __rehash_state& __saved_state = _M_rehash_policy._M_state();
+    2203              :       std::pair<bool, std::size_t> __do_rehash
+    2204              :         = _M_rehash_policy._M_need_rehash(_M_bucket_count, _M_element_count, 1);
+    2205              : 
+    2206              :       if (__do_rehash.first)
+    2207              :         _M_rehash(__do_rehash.second, __saved_state);
+    2208              : 
+    2209              :       this->_M_store_code(*__node, __code);
+    2210              :       const key_type& __k = _ExtractKey{}(__node->_M_v());
+    2211              :       size_type __bkt = _M_bucket_index(__code);
+    2212              : 
+    2213              :       // Find the node before an equivalent one or use hint if it exists and
+    2214              :       // if it is equivalent.
+    2215              :       __node_base_ptr __prev
+    2216              :         = __builtin_expect(__hint != nullptr, false)
+    2217              :           && this->_M_equals(__k, __code, *__hint)
+    2218              :             ? __hint
+    2219              :             : _M_find_before_node(__bkt, __k, __code);
+    2220              : 
+    2221              :       if (__prev)
+    2222              :         {
+    2223              :           // Insert after the node before the equivalent one.
+    2224              :           __node->_M_nxt = __prev->_M_nxt;
+    2225              :           __prev->_M_nxt = __node;
+    2226              :           if (__builtin_expect(__prev == __hint, false))
+    2227              :             // hint might be the last bucket node, in this case we need to
+    2228              :             // update next bucket.
+    2229              :             if (__node->_M_nxt
+    2230              :                 && !this->_M_equals(__k, __code, *__node->_M_next()))
+    2231              :               {
+    2232              :                 size_type __next_bkt = _M_bucket_index(*__node->_M_next());
+    2233              :                 if (__next_bkt != __bkt)
+    2234              :                   _M_buckets[__next_bkt] = __node;
+    2235              :               }
+    2236              :         }
+    2237              :       else
+    2238              :         // The inserted node has no equivalent in the hashtable. We must
+    2239              :         // insert the new node at the beginning of the bucket to preserve
+    2240              :         // equivalent elements' relative positions.
+    2241              :         _M_insert_bucket_begin(__bkt, __node);
+    2242              :       ++_M_element_count;
+    2243              :       return iterator(__node);
+    2244              :     }
+    2245              : 
+    2246              :   // Insert v if no element with its key is already present.
+    2247              :   template<typename _Key, typename _Value, typename _Alloc,
+    2248              :            typename _ExtractKey, typename _Equal,
+    2249              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2250              :            typename _RehashPolicy, typename _Traits>
+    2251              :     template<typename _Kt, typename _Arg, typename _NodeGenerator>
+    2252              :       auto
+    2253        61166 :       _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2254              :                  _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2255              :       _M_insert_unique(_Kt&& __k, _Arg&& __v,
+    2256              :                        const _NodeGenerator& __node_gen)
+    2257              :       -> pair<iterator, bool>
+    2258              :       {
+    2259        61166 :         if (size() <= __small_size_threshold())
+    2260        78472 :           for (auto __it = begin(); __it != end(); ++__it)
+    2261        20140 :             if (this->_M_key_equals_tr(__k, *__it._M_cur))
+    2262            2 :               return { __it, false };
+    2263              : 
+    2264        61164 :         __hash_code __code = this->_M_hash_code_tr(__k);
+    2265        61164 :         size_type __bkt = _M_bucket_index(__code);
+    2266              : 
+    2267        61164 :         if (size() > __small_size_threshold())
+    2268         2832 :           if (__node_ptr __node = _M_find_node_tr(__bkt, __k, __code))
+    2269            2 :             return { iterator(__node), false };
+    2270              : 
+    2271        61162 :         _Scoped_node __node {
+    2272              :           __node_builder_t::_S_build(std::forward<_Kt>(__k),
+    2273              :                                      std::forward<_Arg>(__v),
+    2274              :                                      __node_gen),
+    2275              :           this
+    2276              :         };
+    2277              :         auto __pos
+    2278        61162 :           = _M_insert_unique_node(__bkt, __code, __node._M_node);
+    2279        61162 :         __node._M_node = nullptr;
+    2280        61162 :         return { __pos, true };
+    2281        61162 :       }
+    2282              : 
+    2283              :   // Insert v unconditionally.
+    2284              :   template<typename _Key, typename _Value, typename _Alloc,
+    2285              :            typename _ExtractKey, typename _Equal,
+    2286              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2287              :            typename _RehashPolicy, typename _Traits>
+    2288              :     template<typename _Arg, typename _NodeGenerator>
+    2289              :       auto
+    2290              :       _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2291              :                  _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2292              :       _M_insert(const_iterator __hint, _Arg&& __v,
+    2293              :                 const _NodeGenerator& __node_gen,
+    2294              :                 false_type /* __uks */)
+    2295              :       -> iterator
+    2296              :       {
+    2297              :         // First allocate new node so that we don't do anything if it throws.
+    2298              :         _Scoped_node __node{ __node_gen(std::forward<_Arg>(__v)), this };
+    2299              : 
+    2300              :         // Second compute the hash code so that we don't rehash if it throws.
+    2301              :         auto __res = this->_M_compute_hash_code(
+    2302              :           __hint, _ExtractKey{}(__node._M_node->_M_v()));
+    2303              : 
+    2304              :         auto __pos
+    2305              :           = _M_insert_multi_node(__res.first._M_cur, __res.second,
+    2306              :                                  __node._M_node);
+    2307              :         __node._M_node = nullptr;
+    2308              :         return __pos;
+    2309              :       }
+    2310              : 
+    2311              :   template<typename _Key, typename _Value, typename _Alloc,
+    2312              :            typename _ExtractKey, typename _Equal,
+    2313              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2314              :            typename _RehashPolicy, typename _Traits>
+    2315              :     auto
+    2316              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2317              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2318              :     erase(const_iterator __it)
+    2319              :     -> iterator
+    2320              :     {
+    2321              :       __node_ptr __n = __it._M_cur;
+    2322              :       std::size_t __bkt = _M_bucket_index(*__n);
+    2323              : 
+    2324              :       // Look for previous node to unlink it from the erased one, this
+    2325              :       // is why we need buckets to contain the before begin to make
+    2326              :       // this search fast.
+    2327              :       __node_base_ptr __prev_n = _M_get_previous_node(__bkt, __n);
+    2328              :       return _M_erase(__bkt, __prev_n, __n);
+    2329              :     }
+    2330              : 
+    2331              :   template<typename _Key, typename _Value, typename _Alloc,
+    2332              :            typename _ExtractKey, typename _Equal,
+    2333              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2334              :            typename _RehashPolicy, typename _Traits>
+    2335              :     auto
+    2336        30520 :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2337              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2338              :     _M_erase(size_type __bkt, __node_base_ptr __prev_n, __node_ptr __n)
+    2339              :     -> iterator
+    2340              :     {
+    2341        30520 :       if (__prev_n == _M_buckets[__bkt])
+    2342        30520 :         _M_remove_bucket_begin(__bkt, __n->_M_next(),
+    2343        30520 :           __n->_M_nxt ? _M_bucket_index(*__n->_M_next()) : 0);
+    2344            0 :       else if (__n->_M_nxt)
+    2345              :         {
+    2346            0 :           size_type __next_bkt = _M_bucket_index(*__n->_M_next());
+    2347            0 :           if (__next_bkt != __bkt)
+    2348            0 :             _M_buckets[__next_bkt] = __prev_n;
+    2349              :         }
+    2350              : 
+    2351        30520 :       __prev_n->_M_nxt = __n->_M_nxt;
+    2352        30520 :       iterator __result(__n->_M_next());
+    2353        30520 :       this->_M_deallocate_node(__n);
+    2354        30520 :       --_M_element_count;
+    2355              : 
+    2356        30520 :       return __result;
+    2357              :     }
+    2358              : 
+    2359              :   template<typename _Key, typename _Value, typename _Alloc,
+    2360              :            typename _ExtractKey, typename _Equal,
+    2361              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2362              :            typename _RehashPolicy, typename _Traits>
+    2363              :     auto
+    2364        30520 :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2365              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2366              :     _M_erase(true_type /* __uks */, const key_type& __k)
+    2367              :     -> size_type
+    2368              :     {
+    2369              :       __node_base_ptr __prev_n;
+    2370              :       __node_ptr __n;
+    2371              :       std::size_t __bkt;
+    2372        30520 :       if (size() <= __small_size_threshold())
+    2373              :         {
+    2374        30520 :           __prev_n = _M_find_before_node(__k);
+    2375        30520 :           if (!__prev_n)
+    2376            0 :             return 0;
+    2377              : 
+    2378              :           // We found a matching node, erase it.
+    2379        30520 :           __n = static_cast<__node_ptr>(__prev_n->_M_nxt);
+    2380        30520 :           __bkt = _M_bucket_index(*__n);
+    2381              :         }
+    2382              :       else
+    2383              :         {
+    2384            0 :           __hash_code __code = this->_M_hash_code(__k);
+    2385            0 :           __bkt = _M_bucket_index(__code);
+    2386              : 
+    2387              :           // Look for the node before the first matching node.
+    2388            0 :           __prev_n = _M_find_before_node(__bkt, __k, __code);
+    2389            0 :           if (!__prev_n)
+    2390            0 :             return 0;
+    2391              : 
+    2392              :           // We found a matching node, erase it.
+    2393            0 :           __n = static_cast<__node_ptr>(__prev_n->_M_nxt);
+    2394              :         }
+    2395              : 
+    2396        30520 :       _M_erase(__bkt, __prev_n, __n);
+    2397        30520 :       return 1;
+    2398              :     }
+    2399              : 
+    2400              :   template<typename _Key, typename _Value, typename _Alloc,
+    2401              :            typename _ExtractKey, typename _Equal,
+    2402              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2403              :            typename _RehashPolicy, typename _Traits>
+    2404              :     auto
+    2405              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2406              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2407              :     _M_erase(false_type /* __uks */, const key_type& __k)
+    2408              :     -> size_type
+    2409              :     {
+    2410              :       std::size_t __bkt;
+    2411              :       __node_base_ptr __prev_n;
+    2412              :       __node_ptr __n;
+    2413              :       if (size() <= __small_size_threshold())
+    2414              :         {
+    2415              :           __prev_n = _M_find_before_node(__k);
+    2416              :           if (!__prev_n)
+    2417              :             return 0;
+    2418              : 
+    2419              :           // We found a matching node, erase it.
+    2420              :           __n = static_cast<__node_ptr>(__prev_n->_M_nxt);
+    2421              :           __bkt = _M_bucket_index(*__n);
+    2422              :         }
+    2423              :       else
+    2424              :         {
+    2425              :           __hash_code __code = this->_M_hash_code(__k);
+    2426              :           __bkt = _M_bucket_index(__code);
+    2427              : 
+    2428              :           // Look for the node before the first matching node.
+    2429              :           __prev_n = _M_find_before_node(__bkt, __k, __code);
+    2430              :           if (!__prev_n)
+    2431              :             return 0;
+    2432              : 
+    2433              :           __n = static_cast<__node_ptr>(__prev_n->_M_nxt);
+    2434              :         }
+    2435              : 
+    2436              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    2437              :       // 526. Is it undefined if a function in the standard changes
+    2438              :       // in parameters?
+    2439              :       // We use one loop to find all matching nodes and another to deallocate
+    2440              :       // them so that the key stays valid during the first loop. It might be
+    2441              :       // invalidated indirectly when destroying nodes.
+    2442              :       __node_ptr __n_last = __n->_M_next();
+    2443              :       while (__n_last && this->_M_node_equals(*__n, *__n_last))
+    2444              :         __n_last = __n_last->_M_next();
+    2445              : 
+    2446              :       std::size_t __n_last_bkt = __n_last ? _M_bucket_index(*__n_last) : __bkt;
+    2447              : 
+    2448              :       // Deallocate nodes.
+    2449              :       size_type __result = 0;
+    2450              :       do
+    2451              :         {
+    2452              :           __node_ptr __p = __n->_M_next();
+    2453              :           this->_M_deallocate_node(__n);
+    2454              :           __n = __p;
+    2455              :           ++__result;
+    2456              :         }
+    2457              :       while (__n != __n_last);
+    2458              : 
+    2459              :       _M_element_count -= __result;
+    2460              :       if (__prev_n == _M_buckets[__bkt])
+    2461              :         _M_remove_bucket_begin(__bkt, __n_last, __n_last_bkt);
+    2462              :       else if (__n_last_bkt != __bkt)
+    2463              :         _M_buckets[__n_last_bkt] = __prev_n;
+    2464              :       __prev_n->_M_nxt = __n_last;
+    2465              :       return __result;
+    2466              :     }
+    2467              : 
+    2468              :   template<typename _Key, typename _Value, typename _Alloc,
+    2469              :            typename _ExtractKey, typename _Equal,
+    2470              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2471              :            typename _RehashPolicy, typename _Traits>
+    2472              :     auto
+    2473              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2474              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2475              :     erase(const_iterator __first, const_iterator __last)
+    2476              :     -> iterator
+    2477              :     {
+    2478              :       __node_ptr __n = __first._M_cur;
+    2479              :       __node_ptr __last_n = __last._M_cur;
+    2480              :       if (__n == __last_n)
+    2481              :         return iterator(__n);
+    2482              : 
+    2483              :       std::size_t __bkt = _M_bucket_index(*__n);
+    2484              : 
+    2485              :       __node_base_ptr __prev_n = _M_get_previous_node(__bkt, __n);
+    2486              :       bool __is_bucket_begin = __n == _M_bucket_begin(__bkt);
+    2487              :       std::size_t __n_bkt = __bkt;
+    2488              :       for (;;)
+    2489              :         {
+    2490              :           do
+    2491              :             {
+    2492              :               __node_ptr __tmp = __n;
+    2493              :               __n = __n->_M_next();
+    2494              :               this->_M_deallocate_node(__tmp);
+    2495              :               --_M_element_count;
+    2496              :               if (!__n)
+    2497              :                 break;
+    2498              :               __n_bkt = _M_bucket_index(*__n);
+    2499              :             }
+    2500              :           while (__n != __last_n && __n_bkt == __bkt);
+    2501              :           if (__is_bucket_begin)
+    2502              :             _M_remove_bucket_begin(__bkt, __n, __n_bkt);
+    2503              :           if (__n == __last_n)
+    2504              :             break;
+    2505              :           __is_bucket_begin = true;
+    2506              :           __bkt = __n_bkt;
+    2507              :         }
+    2508              : 
+    2509              :       if (__n && (__n_bkt != __bkt || __is_bucket_begin))
+    2510              :         _M_buckets[__n_bkt] = __prev_n;
+    2511              :       __prev_n->_M_nxt = __n;
+    2512              :       return iterator(__n);
+    2513              :     }
+    2514              : 
+    2515              :   template<typename _Key, typename _Value, typename _Alloc,
+    2516              :            typename _ExtractKey, typename _Equal,
+    2517              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2518              :            typename _RehashPolicy, typename _Traits>
+    2519              :     void
+    2520       123656 :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2521              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2522              :     clear() noexcept
+    2523              :     {
+    2524       123656 :       this->_M_deallocate_nodes(_M_begin());
+    2525       123656 :       __builtin_memset(_M_buckets, 0,
+    2526       123656 :                        _M_bucket_count * sizeof(__node_base_ptr));
+    2527       123656 :       _M_element_count = 0;
+    2528       123656 :       _M_before_begin._M_nxt = nullptr;
+    2529       123656 :     }
+    2530              : 
+    2531              :   template<typename _Key, typename _Value, typename _Alloc,
+    2532              :            typename _ExtractKey, typename _Equal,
+    2533              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2534              :            typename _RehashPolicy, typename _Traits>
+    2535              :     void
+    2536              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2537              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2538              :     rehash(size_type __bkt_count)
+    2539              :     {
+    2540              :       const __rehash_state& __saved_state = _M_rehash_policy._M_state();
+    2541              :       __bkt_count
+    2542              :         = std::max(_M_rehash_policy._M_bkt_for_elements(_M_element_count + 1),
+    2543              :                    __bkt_count);
+    2544              :       __bkt_count = _M_rehash_policy._M_next_bkt(__bkt_count);
+    2545              : 
+    2546              :       if (__bkt_count != _M_bucket_count)
+    2547              :         _M_rehash(__bkt_count, __saved_state);
+    2548              :       else
+    2549              :         // No rehash, restore previous state to keep it consistent with
+    2550              :         // container state.
+    2551              :         _M_rehash_policy._M_reset(__saved_state);
+    2552              :     }
+    2553              : 
+    2554              :   template<typename _Key, typename _Value, typename _Alloc,
+    2555              :            typename _ExtractKey, typename _Equal,
+    2556              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2557              :            typename _RehashPolicy, typename _Traits>
+    2558              :     void
+    2559       116628 :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2560              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2561              :     _M_rehash(size_type __bkt_count, const __rehash_state& __state)
+    2562              :     {
+    2563              :       __try
+    2564              :         {
+    2565       116628 :           _M_rehash_aux(__bkt_count, __unique_keys{});
+    2566              :         }
+    2567            0 :       __catch(...)
+    2568              :         {
+    2569              :           // A failure here means that buckets allocation failed.  We only
+    2570              :           // have to restore hash policy previous state.
+    2571            0 :           _M_rehash_policy._M_reset(__state);
+    2572            0 :           __throw_exception_again;
+    2573              :         }
+    2574       116628 :     }
+    2575              : 
+    2576              :   // Rehash when there is no equivalent elements.
+    2577              :   template<typename _Key, typename _Value, typename _Alloc,
+    2578              :            typename _ExtractKey, typename _Equal,
+    2579              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2580              :            typename _RehashPolicy, typename _Traits>
+    2581              :     void
+    2582       116628 :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2583              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2584              :     _M_rehash_aux(size_type __bkt_count, true_type /* __uks */)
+    2585              :     {
+    2586       116628 :       __buckets_ptr __new_buckets = _M_allocate_buckets(__bkt_count);
+    2587       116628 :       __node_ptr __p = _M_begin();
+    2588       116628 :       _M_before_begin._M_nxt = nullptr;
+    2589       116628 :       std::size_t __bbegin_bkt = 0;
+    2590       125964 :       while (__p)
+    2591              :         {
+    2592         9336 :           __node_ptr __next = __p->_M_next();
+    2593              :           std::size_t __bkt
+    2594         9336 :             = __hash_code_base::_M_bucket_index(*__p, __bkt_count);
+    2595         9336 :           if (!__new_buckets[__bkt])
+    2596              :             {
+    2597         8344 :               __p->_M_nxt = _M_before_begin._M_nxt;
+    2598         8344 :               _M_before_begin._M_nxt = __p;
+    2599         8344 :               __new_buckets[__bkt] = &_M_before_begin;
+    2600         8344 :               if (__p->_M_nxt)
+    2601         7932 :                 __new_buckets[__bbegin_bkt] = __p;
+    2602         8344 :               __bbegin_bkt = __bkt;
+    2603              :             }
+    2604              :           else
+    2605              :             {
+    2606          992 :               __p->_M_nxt = __new_buckets[__bkt]->_M_nxt;
+    2607          992 :               __new_buckets[__bkt]->_M_nxt = __p;
+    2608              :             }
+    2609              : 
+    2610         9336 :           __p = __next;
+    2611              :         }
+    2612              : 
+    2613       116628 :       _M_deallocate_buckets();
+    2614       116628 :       _M_bucket_count = __bkt_count;
+    2615       116628 :       _M_buckets = __new_buckets;
+    2616       116628 :     }
+    2617              : 
+    2618              :   // Rehash when there can be equivalent elements, preserve their relative
+    2619              :   // order.
+    2620              :   template<typename _Key, typename _Value, typename _Alloc,
+    2621              :            typename _ExtractKey, typename _Equal,
+    2622              :            typename _Hash, typename _RangeHash, typename _Unused,
+    2623              :            typename _RehashPolicy, typename _Traits>
+    2624              :     void
+    2625              :     _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    2626              :                _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::
+    2627              :     _M_rehash_aux(size_type __bkt_count, false_type /* __uks */)
+    2628              :     {
+    2629              :       __buckets_ptr __new_buckets = _M_allocate_buckets(__bkt_count);
+    2630              :       __node_ptr __p = _M_begin();
+    2631              :       _M_before_begin._M_nxt = nullptr;
+    2632              :       std::size_t __bbegin_bkt = 0;
+    2633              :       std::size_t __prev_bkt = 0;
+    2634              :       __node_ptr __prev_p = nullptr;
+    2635              :       bool __check_bucket = false;
+    2636              : 
+    2637              :       while (__p)
+    2638              :         {
+    2639              :           __node_ptr __next = __p->_M_next();
+    2640              :           std::size_t __bkt
+    2641              :             = __hash_code_base::_M_bucket_index(*__p, __bkt_count);
+    2642              : 
+    2643              :           if (__prev_p && __prev_bkt == __bkt)
+    2644              :             {
+    2645              :               // Previous insert was already in this bucket, we insert after
+    2646              :               // the previously inserted one to preserve equivalent elements
+    2647              :               // relative order.
+    2648              :               __p->_M_nxt = __prev_p->_M_nxt;
+    2649              :               __prev_p->_M_nxt = __p;
+    2650              : 
+    2651              :               // Inserting after a node in a bucket require to check that we
+    2652              :               // haven't change the bucket last node, in this case next
+    2653              :               // bucket containing its before begin node must be updated. We
+    2654              :               // schedule a check as soon as we move out of the sequence of
+    2655              :               // equivalent nodes to limit the number of checks.
+    2656              :               __check_bucket = true;
+    2657              :             }
+    2658              :           else
+    2659              :             {
+    2660              :               if (__check_bucket)
+    2661              :                 {
+    2662              :                   // Check if we shall update the next bucket because of
+    2663              :                   // insertions into __prev_bkt bucket.
+    2664              :                   if (__prev_p->_M_nxt)
+    2665              :                     {
+    2666              :                       std::size_t __next_bkt
+    2667              :                         = __hash_code_base::_M_bucket_index(
+    2668              :                           *__prev_p->_M_next(), __bkt_count);
+    2669              :                       if (__next_bkt != __prev_bkt)
+    2670              :                         __new_buckets[__next_bkt] = __prev_p;
+    2671              :                     }
+    2672              :                   __check_bucket = false;
+    2673              :                 }
+    2674              : 
+    2675              :               if (!__new_buckets[__bkt])
+    2676              :                 {
+    2677              :                   __p->_M_nxt = _M_before_begin._M_nxt;
+    2678              :                   _M_before_begin._M_nxt = __p;
+    2679              :                   __new_buckets[__bkt] = &_M_before_begin;
+    2680              :                   if (__p->_M_nxt)
+    2681              :                     __new_buckets[__bbegin_bkt] = __p;
+    2682              :                   __bbegin_bkt = __bkt;
+    2683              :                 }
+    2684              :               else
+    2685              :                 {
+    2686              :                   __p->_M_nxt = __new_buckets[__bkt]->_M_nxt;
+    2687              :                   __new_buckets[__bkt]->_M_nxt = __p;
+    2688              :                 }
+    2689              :             }
+    2690              :           __prev_p = __p;
+    2691              :           __prev_bkt = __bkt;
+    2692              :           __p = __next;
+    2693              :         }
+    2694              : 
+    2695              :       if (__check_bucket && __prev_p->_M_nxt)
+    2696              :         {
+    2697              :           std::size_t __next_bkt
+    2698              :             = __hash_code_base::_M_bucket_index(*__prev_p->_M_next(),
+    2699              :                                                 __bkt_count);
+    2700              :           if (__next_bkt != __prev_bkt)
+    2701              :             __new_buckets[__next_bkt] = __prev_p;
+    2702              :         }
+    2703              : 
+    2704              :       _M_deallocate_buckets();
+    2705              :       _M_bucket_count = __bkt_count;
+    2706              :       _M_buckets = __new_buckets;
+    2707              :     }
+    2708              : 
+    2709              : #if __cplusplus > 201402L
+    2710              :   template<typename, typename, typename> class _Hash_merge_helper { };
+    2711              : #endif // C++17
+    2712              : 
+    2713              : #if __cpp_deduction_guides >= 201606
+    2714              :   // Used to constrain deduction guides
+    2715              :   template<typename _Hash>
+    2716              :     using _RequireNotAllocatorOrIntegral
+    2717              :       = __enable_if_t<!__or_<is_integral<_Hash>, __is_allocator<_Hash>>::value>;
+    2718              : #endif
+    2719              : 
+    2720              : /// @endcond
+    2721              : _GLIBCXX_END_NAMESPACE_VERSION
+    2722              : } // namespace std
+    2723              : 
+    2724              : #endif // _HASHTABLE_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/hashtable_policy.h.func-c.html b/html/usr/include/c++/13/bits/hashtable_policy.h.func-c.html new file mode 100644 index 0000000..6bada85 --- /dev/null +++ b/html/usr/include/c++/13/bits/hashtable_policy.h.func-c.html @@ -0,0 +1,1111 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/hashtable_policy.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - hashtable_policy.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:95.3 %149142
Test Date:2024-04-30 13:17:26Functions:99.1 %115114
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt8__detail20_Prime_rehash_policy8_M_resetEm0
_ZNKSt8__detail15_Hashtable_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt8equal_toIS6_ESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb1ELb1ELb1EEEE12_M_equals_trIS6_EEbRKT_mRKNS_16_Hash_node_valueIS6_Lb1EEE2020
_ZNSt8__detail15_Hashtable_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt8equal_toIS6_ESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb1ELb1ELb1EEEE9_S_equalsEmRKNS_21_Hash_node_code_cacheILb1EEE6036
_ZNKSt8__detail15_Hashtable_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt8equal_toIS6_ESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb1ELb1ELb1EEEE16_M_key_equals_trIS6_EEbRKT_RKNS_16_Hash_node_valueIS6_Lb1EEE20142
_ZNSt8__detaileqERKNS_19_Node_iterator_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEES9_36122
_ZNKSt8__detail15_Hash_code_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb1EE15_M_bucket_indexERKNS_16_Hash_node_valueIS6_Lb1EEEm55098
_ZNSt8__detail9_Map_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEESaISB_ENS_10_Select1stES7_S5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_20_Prime_rehash_policyENS_17_Hashtable_traitsILb0ELb0ELb1EEELb1EEixERS2_58918
_ZNSt8__detail10_AllocNodeISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEEC2ERNS_16_Hashtable_allocIS9_EE61064
_ZNSt8__detail12_Insert_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_SaIS6_ENS_9_IdentityESt8equal_toIS6_ESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_20_Prime_rehash_policyENS_17_Hashtable_traitsILb1ELb1ELb1EEEE20_M_conjure_hashtableEv61064
_ZNSt8__detail12_Insert_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_SaIS6_ENS_9_IdentityESt8equal_toIS6_ESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_20_Prime_rehash_policyENS_17_Hashtable_traitsILb1ELb1ELb1EEEE6insertERKS6_61064
_ZNKSt8__detail10_AllocNodeISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEEclIJRKS7_EEEPS8_DpOT_61162
_ZNSt8__detail12_NodeBuilderINS_9_IdentityEE8_S_buildIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESB_NS_10_AllocNodeISaINS_10_Hash_nodeIS9_Lb1EEEEEEEEPNT1_11__node_typeEOT_OT0_RKSH_61162
_ZNKSt8__detail15_Hash_code_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb1EE15_M_hash_code_trIS6_EEmRKT_61164
_ZNKSt8__detail19_ConvertToValueTypeINS_9_IdentityENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEclIRKS7_EEOT_SD_61166
_ZNKSt8__detail15_Hash_code_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb1EE13_M_store_codeERNS_21_Hash_node_code_cacheILb1EEEm61192
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE21_M_deallocate_bucketsEPPNS_15_Hash_node_baseEm116626
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEE21_M_deallocate_bucketsEPPNS_15_Hash_node_baseEm15146
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEE21_M_deallocate_bucketsEPPNS_15_Hash_node_baseEm50004
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE21_M_deallocate_bucketsEPPNS_15_Hash_node_baseEm51476
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE19_M_allocate_bucketsEm116628
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEE19_M_allocate_bucketsEm15146
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEE19_M_allocate_bucketsEm50006
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE19_M_allocate_bucketsEm51476
_ZNSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EEC2Ev123656
_ZNSt8__detail15_Hash_code_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EEC2Ev14836
_ZNSt8__detail15_Hash_code_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb1EEC2Ev49902
_ZNSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EEC2Ev58918
_ZNSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEEC2Ev123656
_ZNSt8__detail15_Hashtable_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES7_S5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEEC2Ev14836
_ZNSt8__detail15_Hashtable_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt8equal_toIS6_ESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb1ELb1ELb1EEEEC2Ev49902
_ZNSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEEC2Ev58918
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE19_M_deallocate_nodesEPS5_123656
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEE19_M_deallocate_nodesEPSD_14836
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEE19_M_deallocate_nodesEPS8_49902
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE19_M_deallocate_nodesEPS5_58918
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEEC2Ev123656
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEEC2Ev14836
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEEC2Ev49902
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEEC2Ev58918
_ZNSt8__detail20_Prime_rehash_policyC2Ef123656
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE15_M_bucket_indexERKNS_16_Hash_node_valueIS3_Lb0EEEm138384
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE15_M_bucket_indexERKNS_16_Hash_node_valueISB_Lb0EEEm49812
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE15_M_bucket_indexERKNS_16_Hash_node_valueIS3_Lb0EEEm88572
_ZNKSt8__detail14_Node_iteratorISt4pairIKidELb0ELb0EEdeEv140078
_ZNKSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEdeEv30
_ZNKSt8__detail14_Node_iteratorISt4pairIKidELb0ELb0EEdeEv140048
_ZNKSt8__detail9_IdentityclIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEOT_SA_145414
_ZNKSt8__detail9_IdentityclIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEOT_SA_30
_ZNKSt8__detail9_IdentityclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEOT_SB_145384
_ZNSt8__detail14_Node_iteratorISt4pairIKidELb0ELb0EEppEv193746
_ZNSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEppEv53698
_ZNSt8__detail14_Node_iteratorISt4pairIKidELb0ELb0EEppEv140048
_ZNSt8__detail19_Node_iterator_baseISt4pairIKidELb0EE7_M_incrEv193746
_ZNSt8__detail19_Node_iterator_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EE7_M_incrEv53698
_ZNSt8__detail19_Node_iterator_baseISt4pairIKidELb0EE7_M_incrEv140048
_ZNSt8__detail22_Hashtable_hash_traitsISt4hashINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE22__small_size_thresholdEv194614
_ZNKSt8__detail14_Node_iteratorISt4pairIKidELb0ELb0EEptEv198966
_ZNKSt8__detail14_Node_iteratorISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEELb0ELb0EEptEv58918
_ZNKSt8__detail14_Node_iteratorISt4pairIKidELb0ELb0EEptEv140048
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE13_M_store_codeERNS_21_Hash_node_code_cacheILb0EEEm198966
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE13_M_store_codeERNS_21_Hash_node_code_cacheILb0EEEm58918
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE13_M_store_codeERNS_21_Hash_node_code_cacheILb0EEEm140048
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE18_M_deallocate_nodeEPS5_260060
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEE18_M_deallocate_nodeEPSD_58918
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEE18_M_deallocate_nodeEPS8_61094
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE18_M_deallocate_nodeEPS5_140048
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE22_M_deallocate_node_ptrEPS5_260060
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEE22_M_deallocate_node_ptrEPSD_58918
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEE22_M_deallocate_node_ptrEPS8_61094
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE22_M_deallocate_node_ptrEPS5_140048
_ZNKSt8__detail20_Prime_rehash_policy8_M_stateEv260158
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEE16_M_allocate_nodeIJS7_EEEPS8_DpOT_260158
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEE16_M_allocate_nodeIJS7_EEEPS8_DpOT_30
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEE16_M_allocate_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS3_EESK_IJEEEEEPSD_DpOT_7442
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEE16_M_allocate_nodeIJRKSt21piecewise_construct_tSt5tupleIJOiEESK_IJEEEEEPSD_DpOT_51476
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEE16_M_allocate_nodeIJRKS7_EEEPS8_DpOT_61162
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE16_M_allocate_nodeIJRKSt21piecewise_construct_tSt5tupleIJOiEESC_IJEEEEEPS5_DpOT_140048
_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKidELb0EEES6_352786
_ZNSt8__detailneERKNS_19_Node_iterator_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEES9_153820
_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKidELb0EEES6_198966
_ZNSt8__detail21_Hashtable_ebo_helperILi1ESt4hashIiELb1EEC2Ev370968
_ZNSt8__detail21_Hashtable_ebo_helperILi0ESaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEELb1EEC2Ev14836
_ZNSt8__detail21_Hashtable_ebo_helperILi0ESaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEELb1EEC2Ev49902
_ZNSt8__detail21_Hashtable_ebo_helperILi0ESt8equal_toINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEELb1EEC2Ev49902
_ZNSt8__detail21_Hashtable_ebo_helperILi1ESt4hashINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEELb1EEC2Ev49902
_ZNSt8__detail21_Hashtable_ebo_helperILi0ESaINS_10_Hash_nodeISt4pairIKidELb0EEEELb1EEC2Ev58918
_ZNSt8__detail21_Hashtable_ebo_helperILi0ESt8equal_toIiELb1EEC2Ev73754
_ZNSt8__detail21_Hashtable_ebo_helperILi1ESt4hashIiELb1EEC2Ev73754
_ZNSt8__detail15_Hash_node_baseC2Ev383814
_ZNKSt8__detail10_Hash_nodeISt4pairIKidELb0EE7_M_nextEv649866
_ZNKSt8__detail10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEELb0EE7_M_nextEv109566
_ZNKSt8__detail10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EE7_M_nextEv171632
_ZNKSt8__detail10_Hash_nodeISt4pairIKidELb0EE7_M_nextEv368668
_ZNSt8__detail14_Node_iteratorISt4pairIKidELb0ELb0EEC2EPNS_10_Hash_nodeIS3_Lb0EEE734614
_ZNSt8__detail14_Node_iteratorISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEELb0ELb0EEC2EPNS_10_Hash_nodeISB_Lb0EEE58918
_ZNSt8__detail14_Node_iteratorISt4pairIKidELb0ELb0EEC2EPNS_10_Hash_nodeIS3_Lb0EEE257884
_ZNSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEC2EPNS_10_Hash_nodeIS6_Lb1EEE417812
_ZNSt8__detail19_Node_iterator_baseISt4pairIKidELb0EEC2EPNS_10_Hash_nodeIS3_Lb0EEE734614
_ZNSt8__detail19_Node_iterator_baseISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEELb0EEC2EPNS_10_Hash_nodeISB_Lb0EEE58918
_ZNSt8__detail19_Node_iterator_baseISt4pairIKidELb0EEC2EPNS_10_Hash_nodeIS3_Lb0EEE257884
_ZNSt8__detail19_Node_iterator_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEC2EPNS_10_Hash_nodeIS6_Lb1EEE417812
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE17_M_node_allocatorEv1273690
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEE17_M_node_allocatorEv265964
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEE17_M_node_allocatorEv344582
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE17_M_node_allocatorEv663144
_ZNSt8__detail21_Hashtable_ebo_helperILi0ESaINS_10_Hash_nodeISt4pairIKidELb0EEEELb1EE6_M_getEv1273690
_ZNSt8__detail21_Hashtable_ebo_helperILi0ESaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEELb1EE6_M_getEv265964
_ZNSt8__detail21_Hashtable_ebo_helperILi0ESaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEELb1EE6_M_getEv344582
_ZNSt8__detail21_Hashtable_ebo_helperILi0ESaINS_10_Hash_nodeISt4pairIKidELb0EEEELb1EE6_M_getEv663144
_ZNSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE9_S_equalsEmRKNS_21_Hash_node_code_cacheILb0EEE5725604
_ZNSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE9_S_equalsEmRKNS_21_Hash_node_code_cacheILb0EEE2792040
_ZNSt8__detail15_Hashtable_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES7_S5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE9_S_equalsEmRKNS_21_Hash_node_code_cacheILb0EEE2933564
_ZNKSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE9_M_equalsERS2_mRKNS_16_Hash_node_valueIS3_Lb0EEE5729620
_ZNKSt8__detail15_Hashtable_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt8equal_toIS6_ESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb1ELb1ELb1EEEE9_M_equalsERKS6_mRKNS_16_Hash_node_valueIS6_Lb1EEE4016
_ZNKSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE9_M_equalsERS2_mRKNS_16_Hash_node_valueIS3_Lb0EEE2792040
_ZNKSt8__detail15_Hashtable_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES7_S5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE9_M_equalsERS2_mRKNS_16_Hash_node_valueISB_Lb0EEE2933564
_ZNKSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE13_M_key_equalsERS2_RKNS_16_Hash_node_valueIS3_Lb0EEE5789680
_ZNKSt8__detail15_Hashtable_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt8equal_toIS6_ESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb1ELb1ELb1EEEE13_M_key_equalsERKS6_RKNS_16_Hash_node_valueIS6_Lb1EEE64076
_ZNKSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE13_M_key_equalsERS2_RKNS_16_Hash_node_valueIS3_Lb0EEE2792040
_ZNKSt8__detail15_Hashtable_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES7_S5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE13_M_key_equalsERS2_RKNS_16_Hash_node_valueISB_Lb0EEE2933564
_ZNKSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE5_M_eqEv5809822
_ZNKSt8__detail15_Hashtable_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt8equal_toIS6_ESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb1ELb1ELb1EEEE5_M_eqEv84218
_ZNKSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE5_M_eqEv2792040
_ZNKSt8__detail15_Hashtable_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES7_S5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE5_M_eqEv2933564
_ZNKSt8__detail10_Select1stclIRKSt4pairIKidEEEONS0_10__1st_typeIT_E4typeEOS8_5863988
_ZNKSt8__detail10_Select1stclIRKSt4pairIKidEEEONS0_10__1st_typeIT_E4typeEOS8_2880612
_ZNKSt8__detail10_Select1stclIRKSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEEEEONS0_10__1st_typeIT_E4typeEOSG_2983376
_ZNSt8__detail9_Map_baseIiSt4pairIKidESaIS3_ENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_20_Prime_rehash_policyENS_17_Hashtable_traitsILb0ELb0ELb1EEELb1EEixEOi5864176
_ZNSt8__detail9_Map_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEESaISB_ENS_10_Select1stES7_S5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_20_Prime_rehash_policyENS_17_Hashtable_traitsILb0ELb0ELb1EEELb1EEixEOi2932088
_ZNSt8__detail9_Map_baseIiSt4pairIKidESaIS3_ENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_20_Prime_rehash_policyENS_17_Hashtable_traitsILb0ELb0ELb1EEELb1EEixEOi2932088
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE12_M_hash_codeERS2_6067056
_ZNKSt8__detail15_Hash_code_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb1EE12_M_hash_codeERKS6_5578
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE12_M_hash_codeERS2_3020660
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE12_M_hash_codeERS2_3040818
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE15_M_bucket_indexEmm6106460
_ZNKSt8__detail15_Hash_code_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb1EE15_M_bucket_indexEmm116744
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE15_M_bucket_indexEmm2983564
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE15_M_bucket_indexEmm3006152
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE7_M_hashEv6128220
_ZNKSt8__detail15_Hash_code_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb1EE7_M_hashEv66742
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE7_M_hashEv3020660
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE7_M_hashEv3040818
_ZNKSt8__detail18_Mod_range_hashingclEmm6299942
_ZNKSt8__detail21_Hashtable_ebo_helperILi1ESt4hashIiELb1EE7_M_cgetEv11938042
_ZNKSt8__detail21_Hashtable_ebo_helperILi1ESt4hashINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEELb1EE7_M_cgetEv66742
_ZNKSt8__detail21_Hashtable_ebo_helperILi0ESt8equal_toINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEELb1EE7_M_cgetEv84218
_ZNKSt8__detail21_Hashtable_ebo_helperILi0ESt8equal_toIiELb1EE7_M_cgetEv5725604
_ZNKSt8__detail21_Hashtable_ebo_helperILi1ESt4hashIiELb1EE7_M_cgetEv6061478
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/hashtable_policy.h.func.html b/html/usr/include/c++/13/bits/hashtable_policy.h.func.html new file mode 100644 index 0000000..9994f53 --- /dev/null +++ b/html/usr/include/c++/13/bits/hashtable_policy.h.func.html @@ -0,0 +1,1111 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/hashtable_policy.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - hashtable_policy.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:95.3 %149142
Test Date:2024-04-30 13:17:26Functions:99.1 %115114
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt8__detail10_AllocNodeISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEEclIJRKS7_EEEPS8_DpOT_61162
_ZNKSt8__detail10_Hash_nodeISt4pairIKidELb0EE7_M_nextEv649866
_ZNKSt8__detail10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EE7_M_nextEv171632
_ZNKSt8__detail10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEELb0EE7_M_nextEv109566
_ZNKSt8__detail10_Hash_nodeISt4pairIKidELb0EE7_M_nextEv368668
_ZNKSt8__detail10_Select1stclIRKSt4pairIKidEEEONS0_10__1st_typeIT_E4typeEOS8_5863988
_ZNKSt8__detail10_Select1stclIRKSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEEEEONS0_10__1st_typeIT_E4typeEOSG_2983376
_ZNKSt8__detail10_Select1stclIRKSt4pairIKidEEEONS0_10__1st_typeIT_E4typeEOS8_2880612
_ZNKSt8__detail14_Node_iteratorISt4pairIKidELb0ELb0EEdeEv140078
_ZNKSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEdeEv30
_ZNKSt8__detail14_Node_iteratorISt4pairIKidELb0ELb0EEdeEv140048
_ZNKSt8__detail14_Node_iteratorISt4pairIKidELb0ELb0EEptEv198966
_ZNKSt8__detail14_Node_iteratorISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEELb0ELb0EEptEv58918
_ZNKSt8__detail14_Node_iteratorISt4pairIKidELb0ELb0EEptEv140048
_ZNKSt8__detail15_Hash_code_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb1EE13_M_store_codeERNS_21_Hash_node_code_cacheILb1EEEm61192
_ZNKSt8__detail15_Hash_code_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb1EE15_M_bucket_indexERKNS_16_Hash_node_valueIS6_Lb1EEEm55098
_ZNKSt8__detail15_Hash_code_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb1EE15_M_hash_code_trIS6_EEmRKT_61164
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE12_M_hash_codeERS2_6067056
_ZNKSt8__detail15_Hash_code_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb1EE12_M_hash_codeERKS6_5578
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE12_M_hash_codeERS2_3040818
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE12_M_hash_codeERS2_3020660
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE13_M_store_codeERNS_21_Hash_node_code_cacheILb0EEEm198966
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE13_M_store_codeERNS_21_Hash_node_code_cacheILb0EEEm58918
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE13_M_store_codeERNS_21_Hash_node_code_cacheILb0EEEm140048
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE15_M_bucket_indexERKNS_16_Hash_node_valueIS3_Lb0EEEm138384
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE15_M_bucket_indexERKNS_16_Hash_node_valueISB_Lb0EEEm49812
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE15_M_bucket_indexERKNS_16_Hash_node_valueIS3_Lb0EEEm88572
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE15_M_bucket_indexEmm6106460
_ZNKSt8__detail15_Hash_code_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb1EE15_M_bucket_indexEmm116744
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE15_M_bucket_indexEmm3006152
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE15_M_bucket_indexEmm2983564
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE7_M_hashEv6128220
_ZNKSt8__detail15_Hash_code_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb1EE7_M_hashEv66742
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE7_M_hashEv3040818
_ZNKSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EE7_M_hashEv3020660
_ZNKSt8__detail15_Hashtable_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt8equal_toIS6_ESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb1ELb1ELb1EEEE12_M_equals_trIS6_EEbRKT_mRKNS_16_Hash_node_valueIS6_Lb1EEE2020
_ZNKSt8__detail15_Hashtable_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt8equal_toIS6_ESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb1ELb1ELb1EEEE16_M_key_equals_trIS6_EEbRKT_RKNS_16_Hash_node_valueIS6_Lb1EEE20142
_ZNKSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE13_M_key_equalsERS2_RKNS_16_Hash_node_valueIS3_Lb0EEE5789680
_ZNKSt8__detail15_Hashtable_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt8equal_toIS6_ESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb1ELb1ELb1EEEE13_M_key_equalsERKS6_RKNS_16_Hash_node_valueIS6_Lb1EEE64076
_ZNKSt8__detail15_Hashtable_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES7_S5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE13_M_key_equalsERS2_RKNS_16_Hash_node_valueISB_Lb0EEE2933564
_ZNKSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE13_M_key_equalsERS2_RKNS_16_Hash_node_valueIS3_Lb0EEE2792040
_ZNKSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE5_M_eqEv5809822
_ZNKSt8__detail15_Hashtable_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt8equal_toIS6_ESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb1ELb1ELb1EEEE5_M_eqEv84218
_ZNKSt8__detail15_Hashtable_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES7_S5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE5_M_eqEv2933564
_ZNKSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE5_M_eqEv2792040
_ZNKSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE9_M_equalsERS2_mRKNS_16_Hash_node_valueIS3_Lb0EEE5729620
_ZNKSt8__detail15_Hashtable_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt8equal_toIS6_ESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb1ELb1ELb1EEEE9_M_equalsERKS6_mRKNS_16_Hash_node_valueIS6_Lb1EEE4016
_ZNKSt8__detail15_Hashtable_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES7_S5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE9_M_equalsERS2_mRKNS_16_Hash_node_valueISB_Lb0EEE2933564
_ZNKSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE9_M_equalsERS2_mRKNS_16_Hash_node_valueIS3_Lb0EEE2792040
_ZNKSt8__detail18_Mod_range_hashingclEmm6299942
_ZNKSt8__detail19_ConvertToValueTypeINS_9_IdentityENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEclIRKS7_EEOT_SD_61166
_ZNKSt8__detail20_Prime_rehash_policy8_M_stateEv260158
_ZNKSt8__detail21_Hashtable_ebo_helperILi1ESt4hashIiELb1EE7_M_cgetEv11938042
_ZNKSt8__detail21_Hashtable_ebo_helperILi0ESt8equal_toINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEELb1EE7_M_cgetEv84218
_ZNKSt8__detail21_Hashtable_ebo_helperILi0ESt8equal_toIiELb1EE7_M_cgetEv5725604
_ZNKSt8__detail21_Hashtable_ebo_helperILi1ESt4hashINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEELb1EE7_M_cgetEv66742
_ZNKSt8__detail21_Hashtable_ebo_helperILi1ESt4hashIiELb1EE7_M_cgetEv6061478
_ZNKSt8__detail9_IdentityclIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEOT_SA_145414
_ZNKSt8__detail9_IdentityclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEOT_SB_145384
_ZNKSt8__detail9_IdentityclIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEOT_SA_30
_ZNSt8__detail10_AllocNodeISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEEC2ERNS_16_Hashtable_allocIS9_EE61064
_ZNSt8__detail12_Insert_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_SaIS6_ENS_9_IdentityESt8equal_toIS6_ESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_20_Prime_rehash_policyENS_17_Hashtable_traitsILb1ELb1ELb1EEEE20_M_conjure_hashtableEv61064
_ZNSt8__detail12_Insert_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_SaIS6_ENS_9_IdentityESt8equal_toIS6_ESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_20_Prime_rehash_policyENS_17_Hashtable_traitsILb1ELb1ELb1EEEE6insertERKS6_61064
_ZNSt8__detail12_NodeBuilderINS_9_IdentityEE8_S_buildIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESB_NS_10_AllocNodeISaINS_10_Hash_nodeIS9_Lb1EEEEEEEEPNT1_11__node_typeEOT_OT0_RKSH_61162
_ZNSt8__detail14_Node_iteratorISt4pairIKidELb0ELb0EEC2EPNS_10_Hash_nodeIS3_Lb0EEE734614
_ZNSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEC2EPNS_10_Hash_nodeIS6_Lb1EEE417812
_ZNSt8__detail14_Node_iteratorISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEELb0ELb0EEC2EPNS_10_Hash_nodeISB_Lb0EEE58918
_ZNSt8__detail14_Node_iteratorISt4pairIKidELb0ELb0EEC2EPNS_10_Hash_nodeIS3_Lb0EEE257884
_ZNSt8__detail14_Node_iteratorISt4pairIKidELb0ELb0EEppEv193746
_ZNSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEppEv53698
_ZNSt8__detail14_Node_iteratorISt4pairIKidELb0ELb0EEppEv140048
_ZNSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EEC2Ev123656
_ZNSt8__detail15_Hash_code_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb1EEC2Ev49902
_ZNSt8__detail15_Hash_code_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EEC2Ev14836
_ZNSt8__detail15_Hash_code_baseIiSt4pairIKidENS_10_Select1stESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashELb0EEC2Ev58918
_ZNSt8__detail15_Hash_node_baseC2Ev383814
_ZNSt8__detail15_Hashtable_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt8equal_toIS6_ESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb1ELb1ELb1EEEE9_S_equalsEmRKNS_21_Hash_node_code_cacheILb1EEE6036
_ZNSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE9_S_equalsEmRKNS_21_Hash_node_code_cacheILb0EEE5725604
_ZNSt8__detail15_Hashtable_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES7_S5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE9_S_equalsEmRKNS_21_Hash_node_code_cacheILb0EEE2933564
_ZNSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEE9_S_equalsEmRKNS_21_Hash_node_code_cacheILb0EEE2792040
_ZNSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEEC2Ev123656
_ZNSt8__detail15_Hashtable_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_NS_9_IdentityESt8equal_toIS6_ESt4hashIS6_ENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb1ELb1ELb1EEEEC2Ev49902
_ZNSt8__detail15_Hashtable_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEENS_10_Select1stES7_S5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEEC2Ev14836
_ZNSt8__detail15_Hashtable_baseIiSt4pairIKidENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_17_Hashtable_traitsILb0ELb0ELb1EEEEC2Ev58918
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEE16_M_allocate_nodeIJS7_EEEPS8_DpOT_260158
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEE16_M_allocate_nodeIJRKS7_EEEPS8_DpOT_61162
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEE16_M_allocate_nodeIJS7_EEEPS8_DpOT_30
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEE16_M_allocate_nodeIJRKSt21piecewise_construct_tSt5tupleIJOiEESK_IJEEEEEPSD_DpOT_51476
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEE16_M_allocate_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS3_EESK_IJEEEEEPSD_DpOT_7442
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE16_M_allocate_nodeIJRKSt21piecewise_construct_tSt5tupleIJOiEESC_IJEEEEEPS5_DpOT_140048
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE17_M_node_allocatorEv1273690
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEE17_M_node_allocatorEv344582
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEE17_M_node_allocatorEv265964
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE17_M_node_allocatorEv663144
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE18_M_deallocate_nodeEPS5_260060
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEE18_M_deallocate_nodeEPS8_61094
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEE18_M_deallocate_nodeEPSD_58918
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE18_M_deallocate_nodeEPS5_140048
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE19_M_allocate_bucketsEm116628
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEE19_M_allocate_bucketsEm50006
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEE19_M_allocate_bucketsEm15146
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE19_M_allocate_bucketsEm51476
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE19_M_deallocate_nodesEPS5_123656
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEE19_M_deallocate_nodesEPS8_49902
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEE19_M_deallocate_nodesEPSD_14836
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE19_M_deallocate_nodesEPS5_58918
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE21_M_deallocate_bucketsEPPNS_15_Hash_node_baseEm116626
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEE21_M_deallocate_bucketsEPPNS_15_Hash_node_baseEm50004
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEE21_M_deallocate_bucketsEPPNS_15_Hash_node_baseEm15146
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE21_M_deallocate_bucketsEPPNS_15_Hash_node_baseEm51476
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE22_M_deallocate_node_ptrEPS5_260060
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEE22_M_deallocate_node_ptrEPS8_61094
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEE22_M_deallocate_node_ptrEPSD_58918
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEE22_M_deallocate_node_ptrEPS5_140048
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEEC2Ev123656
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEEC2Ev49902
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEEC2Ev14836
_ZNSt8__detail16_Hashtable_allocISaINS_10_Hash_nodeISt4pairIKidELb0EEEEEC2Ev58918
_ZNSt8__detail19_Node_iterator_baseISt4pairIKidELb0EE7_M_incrEv193746
_ZNSt8__detail19_Node_iterator_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EE7_M_incrEv53698
_ZNSt8__detail19_Node_iterator_baseISt4pairIKidELb0EE7_M_incrEv140048
_ZNSt8__detail19_Node_iterator_baseISt4pairIKidELb0EEC2EPNS_10_Hash_nodeIS3_Lb0EEE734614
_ZNSt8__detail19_Node_iterator_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEC2EPNS_10_Hash_nodeIS6_Lb1EEE417812
_ZNSt8__detail19_Node_iterator_baseISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEELb0EEC2EPNS_10_Hash_nodeISB_Lb0EEE58918
_ZNSt8__detail19_Node_iterator_baseISt4pairIKidELb0EEC2EPNS_10_Hash_nodeIS3_Lb0EEE257884
_ZNSt8__detail20_Prime_rehash_policy8_M_resetEm0
_ZNSt8__detail20_Prime_rehash_policyC2Ef123656
_ZNSt8__detail21_Hashtable_ebo_helperILi0ESaINS_10_Hash_nodeISt4pairIKidELb0EEEELb1EE6_M_getEv1273690
_ZNSt8__detail21_Hashtable_ebo_helperILi0ESaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEELb1EE6_M_getEv344582
_ZNSt8__detail21_Hashtable_ebo_helperILi0ESaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEELb1EE6_M_getEv265964
_ZNSt8__detail21_Hashtable_ebo_helperILi0ESaINS_10_Hash_nodeISt4pairIKidELb0EEEELb1EE6_M_getEv663144
_ZNSt8__detail21_Hashtable_ebo_helperILi1ESt4hashIiELb1EEC2Ev370968
_ZNSt8__detail21_Hashtable_ebo_helperILi0ESaINS_10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEELb1EEC2Ev49902
_ZNSt8__detail21_Hashtable_ebo_helperILi0ESaINS_10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEELb1EEC2Ev14836
_ZNSt8__detail21_Hashtable_ebo_helperILi0ESaINS_10_Hash_nodeISt4pairIKidELb0EEEELb1EEC2Ev58918
_ZNSt8__detail21_Hashtable_ebo_helperILi0ESt8equal_toINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEELb1EEC2Ev49902
_ZNSt8__detail21_Hashtable_ebo_helperILi0ESt8equal_toIiELb1EEC2Ev73754
_ZNSt8__detail21_Hashtable_ebo_helperILi1ESt4hashINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEELb1EEC2Ev49902
_ZNSt8__detail21_Hashtable_ebo_helperILi1ESt4hashIiELb1EEC2Ev73754
_ZNSt8__detail22_Hashtable_hash_traitsISt4hashINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE22__small_size_thresholdEv194614
_ZNSt8__detail9_Map_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEESaISB_ENS_10_Select1stES7_S5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_20_Prime_rehash_policyENS_17_Hashtable_traitsILb0ELb0ELb1EEELb1EEixERS2_58918
_ZNSt8__detail9_Map_baseIiSt4pairIKidESaIS3_ENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_20_Prime_rehash_policyENS_17_Hashtable_traitsILb0ELb0ELb1EEELb1EEixEOi5864176
_ZNSt8__detail9_Map_baseIiSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEESaISB_ENS_10_Select1stES7_S5_NS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_20_Prime_rehash_policyENS_17_Hashtable_traitsILb0ELb0ELb1EEELb1EEixEOi2932088
_ZNSt8__detail9_Map_baseIiSt4pairIKidESaIS3_ENS_10_Select1stESt8equal_toIiESt4hashIiENS_18_Mod_range_hashingENS_20_Default_ranged_hashENS_20_Prime_rehash_policyENS_17_Hashtable_traitsILb0ELb0ELb1EEELb1EEixEOi2932088
_ZNSt8__detaileqERKNS_19_Node_iterator_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEES9_36122
_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKidELb0EEES6_352786
_ZNSt8__detailneERKNS_19_Node_iterator_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEES9_153820
_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKidELb0EEES6_198966
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/hashtable_policy.h.gcov.html b/html/usr/include/c++/13/bits/hashtable_policy.h.gcov.html new file mode 100644 index 0000000..8e4ddee --- /dev/null +++ b/html/usr/include/c++/13/bits/hashtable_policy.h.gcov.html @@ -0,0 +1,2144 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/hashtable_policy.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - hashtable_policy.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:95.3 %149142
Test Date:2024-04-30 13:17:26Functions:99.1 %115114
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Internal policy header for unordered_set and unordered_map -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2010-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/hashtable_policy.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly.
+      28              :  *  @headername{unordered_map,unordered_set}
+      29              :  */
+      30              : 
+      31              : #ifndef _HASHTABLE_POLICY_H
+      32              : #define _HASHTABLE_POLICY_H 1
+      33              : 
+      34              : #include <tuple>          // for std::tuple, std::forward_as_tuple
+      35              : #include <bits/functional_hash.h> // for __is_fast_hash
+      36              : #include <bits/stl_algobase.h>    // for std::min, std::is_permutation.
+      37              : #include <bits/stl_pair.h>        // for std::pair
+      38              : #include <ext/aligned_buffer.h>   // for __gnu_cxx::__aligned_buffer
+      39              : #include <ext/alloc_traits.h>     // for std::__alloc_rebind
+      40              : #include <ext/numeric_traits.h>   // for __gnu_cxx::__int_traits
+      41              : 
+      42              : namespace std _GLIBCXX_VISIBILITY(default)
+      43              : {
+      44              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      45              : /// @cond undocumented
+      46              : 
+      47              :   template<typename _Key, typename _Value, typename _Alloc,
+      48              :            typename _ExtractKey, typename _Equal,
+      49              :            typename _Hash, typename _RangeHash, typename _Unused,
+      50              :            typename _RehashPolicy, typename _Traits>
+      51              :     class _Hashtable;
+      52              : 
+      53              : namespace __detail
+      54              : {
+      55              :   /**
+      56              :    *  @defgroup hashtable-detail Base and Implementation Classes
+      57              :    *  @ingroup unordered_associative_containers
+      58              :    *  @{
+      59              :    */
+      60              :   template<typename _Key, typename _Value, typename _ExtractKey,
+      61              :            typename _Equal, typename _Hash, typename _RangeHash,
+      62              :            typename _Unused, typename _Traits>
+      63              :     struct _Hashtable_base;
+      64              : 
+      65              :   // Helper function: return distance(first, last) for forward
+      66              :   // iterators, or 0/1 for input iterators.
+      67              :   template<typename _Iterator>
+      68              :     inline typename std::iterator_traits<_Iterator>::difference_type
+      69              :     __distance_fw(_Iterator __first, _Iterator __last,
+      70              :                   std::input_iterator_tag)
+      71              :     { return __first != __last ? 1 : 0; }
+      72              : 
+      73              :   template<typename _Iterator>
+      74              :     inline typename std::iterator_traits<_Iterator>::difference_type
+      75              :     __distance_fw(_Iterator __first, _Iterator __last,
+      76              :                   std::forward_iterator_tag)
+      77              :     { return std::distance(__first, __last); }
+      78              : 
+      79              :   template<typename _Iterator>
+      80              :     inline typename std::iterator_traits<_Iterator>::difference_type
+      81              :     __distance_fw(_Iterator __first, _Iterator __last)
+      82              :     { return __distance_fw(__first, __last,
+      83              :                            std::__iterator_category(__first)); }
+      84              : 
+      85              :   struct _Identity
+      86              :   {
+      87              :     template<typename _Tp>
+      88              :       _Tp&&
+      89       145414 :       operator()(_Tp&& __x) const noexcept
+      90       145414 :       { return std::forward<_Tp>(__x); }
+      91              :   };
+      92              : 
+      93              :   struct _Select1st
+      94              :   {
+      95              :     template<typename _Pair>
+      96              :       struct __1st_type;
+      97              : 
+      98              :     template<typename _Tp, typename _Up>
+      99              :       struct __1st_type<pair<_Tp, _Up>>
+     100              :       { using type = _Tp; };
+     101              : 
+     102              :     template<typename _Tp, typename _Up>
+     103              :       struct __1st_type<const pair<_Tp, _Up>>
+     104              :       { using type = const _Tp; };
+     105              : 
+     106              :     template<typename _Pair>
+     107              :       struct __1st_type<_Pair&>
+     108              :       { using type = typename __1st_type<_Pair>::type&; };
+     109              : 
+     110              :     template<typename _Tp>
+     111              :       typename __1st_type<_Tp>::type&&
+     112      5863988 :       operator()(_Tp&& __x) const noexcept
+     113      5863988 :       { return std::forward<_Tp>(__x).first; }
+     114              :   };
+     115              : 
+     116              :   template<typename _ExKey, typename _Value>
+     117              :     struct _ConvertToValueType;
+     118              : 
+     119              :   template<typename _Value>
+     120              :     struct _ConvertToValueType<_Identity, _Value>
+     121              :     {
+     122              :       template<typename _Kt>
+     123              :         constexpr _Kt&&
+     124        61166 :         operator()(_Kt&& __k) const noexcept
+     125        61166 :         { return std::forward<_Kt>(__k); }
+     126              :     };
+     127              : 
+     128              :   template<typename _Value>
+     129              :     struct _ConvertToValueType<_Select1st, _Value>
+     130              :     {
+     131              :       constexpr _Value&&
+     132              :       operator()(_Value&& __x) const noexcept
+     133              :       { return std::move(__x); }
+     134              : 
+     135              :       constexpr const _Value&
+     136              :       operator()(const _Value& __x) const noexcept
+     137              :       { return __x; }
+     138              : 
+     139              :       template<typename _Kt, typename _Val>
+     140              :         constexpr std::pair<_Kt, _Val>&&
+     141              :         operator()(std::pair<_Kt, _Val>&& __x) const noexcept
+     142              :         { return std::move(__x); }
+     143              : 
+     144              :       template<typename _Kt, typename _Val>
+     145              :         constexpr const std::pair<_Kt, _Val>&
+     146              :         operator()(const std::pair<_Kt, _Val>& __x) const noexcept
+     147              :         { return __x; }
+     148              :     };
+     149              : 
+     150              :   template<typename _ExKey>
+     151              :     struct _NodeBuilder;
+     152              : 
+     153              :   template<>
+     154              :     struct _NodeBuilder<_Select1st>
+     155              :     {
+     156              :       template<typename _Kt, typename _Arg, typename _NodeGenerator>
+     157              :         static auto
+     158              :         _S_build(_Kt&& __k, _Arg&& __arg, const _NodeGenerator& __node_gen)
+     159              :         -> typename _NodeGenerator::__node_type*
+     160              :         {
+     161              :           return __node_gen(std::forward<_Kt>(__k),
+     162              :                             std::forward<_Arg>(__arg).second);
+     163              :         }
+     164              :     };
+     165              : 
+     166              :   template<>
+     167              :     struct _NodeBuilder<_Identity>
+     168              :     {
+     169              :       template<typename _Kt, typename _Arg, typename _NodeGenerator>
+     170              :         static auto
+     171        61162 :         _S_build(_Kt&& __k, _Arg&&, const _NodeGenerator& __node_gen)
+     172              :         -> typename _NodeGenerator::__node_type*
+     173        61162 :         { return __node_gen(std::forward<_Kt>(__k)); }
+     174              :     };
+     175              : 
+     176              :   template<typename _NodeAlloc>
+     177              :     struct _Hashtable_alloc;
+     178              : 
+     179              :   // Functor recycling a pool of nodes and using allocation once the pool is
+     180              :   // empty.
+     181              :   template<typename _NodeAlloc>
+     182              :     struct _ReuseOrAllocNode
+     183              :     {
+     184              :     private:
+     185              :       using __node_alloc_type = _NodeAlloc;
+     186              :       using __hashtable_alloc = _Hashtable_alloc<__node_alloc_type>;
+     187              :       using __node_alloc_traits =
+     188              :         typename __hashtable_alloc::__node_alloc_traits;
+     189              : 
+     190              :     public:
+     191              :       using __node_type = typename __hashtable_alloc::__node_type;
+     192              : 
+     193              :       _ReuseOrAllocNode(__node_type* __nodes, __hashtable_alloc& __h)
+     194              :       : _M_nodes(__nodes), _M_h(__h) { }
+     195              :       _ReuseOrAllocNode(const _ReuseOrAllocNode&) = delete;
+     196              : 
+     197              :       ~_ReuseOrAllocNode()
+     198              :       { _M_h._M_deallocate_nodes(_M_nodes); }
+     199              : 
+     200              :       template<typename... _Args>
+     201              :         __node_type*
+     202              :         operator()(_Args&&... __args) const
+     203              :         {
+     204              :           if (_M_nodes)
+     205              :             {
+     206              :               __node_type* __node = _M_nodes;
+     207              :               _M_nodes = _M_nodes->_M_next();
+     208              :               __node->_M_nxt = nullptr;
+     209              :               auto& __a = _M_h._M_node_allocator();
+     210              :               __node_alloc_traits::destroy(__a, __node->_M_valptr());
+     211              :               __try
+     212              :                 {
+     213              :                   __node_alloc_traits::construct(__a, __node->_M_valptr(),
+     214              :                                                  std::forward<_Args>(__args)...);
+     215              :                 }
+     216              :               __catch(...)
+     217              :                 {
+     218              :                   _M_h._M_deallocate_node_ptr(__node);
+     219              :                   __throw_exception_again;
+     220              :                 }
+     221              :               return __node;
+     222              :             }
+     223              :           return _M_h._M_allocate_node(std::forward<_Args>(__args)...);
+     224              :         }
+     225              : 
+     226              :     private:
+     227              :       mutable __node_type* _M_nodes;
+     228              :       __hashtable_alloc& _M_h;
+     229              :     };
+     230              : 
+     231              :   // Functor similar to the previous one but without any pool of nodes to
+     232              :   // recycle.
+     233              :   template<typename _NodeAlloc>
+     234              :     struct _AllocNode
+     235              :     {
+     236              :     private:
+     237              :       using __hashtable_alloc = _Hashtable_alloc<_NodeAlloc>;
+     238              : 
+     239              :     public:
+     240              :       using __node_type = typename __hashtable_alloc::__node_type;
+     241              : 
+     242        61064 :       _AllocNode(__hashtable_alloc& __h)
+     243        61064 :       : _M_h(__h) { }
+     244              : 
+     245              :       template<typename... _Args>
+     246              :         __node_type*
+     247        61162 :         operator()(_Args&&... __args) const
+     248        61162 :         { return _M_h._M_allocate_node(std::forward<_Args>(__args)...); }
+     249              : 
+     250              :     private:
+     251              :       __hashtable_alloc& _M_h;
+     252              :     };
+     253              : 
+     254              :   // Auxiliary types used for all instantiations of _Hashtable nodes
+     255              :   // and iterators.
+     256              : 
+     257              :   /**
+     258              :    *  struct _Hashtable_traits
+     259              :    *
+     260              :    *  Important traits for hash tables.
+     261              :    *
+     262              :    *  @tparam _Cache_hash_code  Boolean value. True if the value of
+     263              :    *  the hash function is stored along with the value. This is a
+     264              :    *  time-space tradeoff.  Storing it may improve lookup speed by
+     265              :    *  reducing the number of times we need to call the _Hash or _Equal
+     266              :    *  functors.
+     267              :    *
+     268              :    *  @tparam _Constant_iterators  Boolean value. True if iterator and
+     269              :    *  const_iterator are both constant iterator types. This is true
+     270              :    *  for unordered_set and unordered_multiset, false for
+     271              :    *  unordered_map and unordered_multimap.
+     272              :    *
+     273              :    *  @tparam _Unique_keys  Boolean value. True if the return value
+     274              :    *  of _Hashtable::count(k) is always at most one, false if it may
+     275              :    *  be an arbitrary number. This is true for unordered_set and
+     276              :    *  unordered_map, false for unordered_multiset and
+     277              :    *  unordered_multimap.
+     278              :    */
+     279              :   template<bool _Cache_hash_code, bool _Constant_iterators, bool _Unique_keys>
+     280              :     struct _Hashtable_traits
+     281              :     {
+     282              :       using __hash_cached = __bool_constant<_Cache_hash_code>;
+     283              :       using __constant_iterators = __bool_constant<_Constant_iterators>;
+     284              :       using __unique_keys = __bool_constant<_Unique_keys>;
+     285              :     };
+     286              : 
+     287              :   /**
+     288              :    *  struct _Hashtable_hash_traits
+     289              :    *
+     290              :    *  Important traits for hash tables depending on associated hasher.
+     291              :    *
+     292              :    */
+     293              :   template<typename _Hash>
+     294              :     struct _Hashtable_hash_traits
+     295              :     {
+     296              :       static constexpr std::size_t
+     297       194614 :       __small_size_threshold() noexcept
+     298       194614 :       { return std::__is_fast_hash<_Hash>::value ? 0 : 20; }
+     299              :     };
+     300              : 
+     301              :   /**
+     302              :    *  struct _Hash_node_base
+     303              :    *
+     304              :    *  Nodes, used to wrap elements stored in the hash table.  A policy
+     305              :    *  template parameter of class template _Hashtable controls whether
+     306              :    *  nodes also store a hash code. In some cases (e.g. strings) this
+     307              :    *  may be a performance win.
+     308              :    */
+     309              :   struct _Hash_node_base
+     310              :   {
+     311              :     _Hash_node_base* _M_nxt;
+     312              : 
+     313       383814 :     _Hash_node_base() noexcept : _M_nxt() { }
+     314              : 
+     315              :     _Hash_node_base(_Hash_node_base* __next) noexcept : _M_nxt(__next) { }
+     316              :   };
+     317              : 
+     318              :   /**
+     319              :    *  struct _Hash_node_value_base
+     320              :    *
+     321              :    *  Node type with the value to store.
+     322              :    */
+     323              :   template<typename _Value>
+     324              :     struct _Hash_node_value_base
+     325              :     {
+     326              :       typedef _Value value_type;
+     327              : 
+     328              :       __gnu_cxx::__aligned_buffer<_Value> _M_storage;
+     329              : 
+     330              :       [[__gnu__::__always_inline__]]
+     331              :       _Value*
+     332              :       _M_valptr() noexcept
+     333      6583420 :       { return _M_storage._M_ptr(); }
+     334              : 
+     335              :       [[__gnu__::__always_inline__]]
+     336              :       const _Value*
+     337              :       _M_valptr() const noexcept
+     338      5948206 :       { return _M_storage._M_ptr(); }
+     339              : 
+     340              :       [[__gnu__::__always_inline__]]
+     341              :       _Value&
+     342              :       _M_v() noexcept
+     343      5864236 :       { return *_M_valptr(); }
+     344              : 
+     345              :       [[__gnu__::__always_inline__]]
+     346              :       const _Value&
+     347              :       _M_v() const noexcept
+     348      5948206 :       { return *_M_valptr(); }
+     349              :     };
+     350              : 
+     351              :   /**
+     352              :    *  Primary template struct _Hash_node_code_cache.
+     353              :    */
+     354              :   template<bool _Cache_hash_code>
+     355              :     struct _Hash_node_code_cache
+     356              :     { };
+     357              : 
+     358              :   /**
+     359              :    *  Specialization for node with cache, struct _Hash_node_code_cache.
+     360              :    */
+     361              :   template<>
+     362              :     struct _Hash_node_code_cache<true>
+     363              :     { std::size_t  _M_hash_code; };
+     364              : 
+     365              :   template<typename _Value, bool _Cache_hash_code>
+     366              :     struct _Hash_node_value
+     367              :     : _Hash_node_value_base<_Value>
+     368              :     , _Hash_node_code_cache<_Cache_hash_code>
+     369              :     { };
+     370              : 
+     371              :   /**
+     372              :    *  Primary template struct _Hash_node.
+     373              :    */
+     374              :   template<typename _Value, bool _Cache_hash_code>
+     375              :     struct _Hash_node
+     376              :     : _Hash_node_base
+     377              :     , _Hash_node_value<_Value, _Cache_hash_code>
+     378              :     {
+     379              :       _Hash_node*
+     380       649866 :       _M_next() const noexcept
+     381       649866 :       { return static_cast<_Hash_node*>(this->_M_nxt); }
+     382              :     };
+     383              : 
+     384              :   /// Base class for node iterators.
+     385              :   template<typename _Value, bool _Cache_hash_code>
+     386              :     struct _Node_iterator_base
+     387              :     {
+     388              :       using __node_type = _Hash_node<_Value, _Cache_hash_code>;
+     389              : 
+     390              :       __node_type* _M_cur;
+     391              : 
+     392              :       _Node_iterator_base() : _M_cur(nullptr) { }
+     393       734614 :       _Node_iterator_base(__node_type* __p) noexcept
+     394       734614 :       : _M_cur(__p) { }
+     395              : 
+     396              :       void
+     397       193746 :       _M_incr() noexcept
+     398       193746 :       { _M_cur = _M_cur->_M_next(); }
+     399              : 
+     400              :       friend bool
+     401        36122 :       operator==(const _Node_iterator_base& __x, const _Node_iterator_base& __y)
+     402              :       noexcept
+     403        36122 :       { return __x._M_cur == __y._M_cur; }
+     404              : 
+     405              : #if __cpp_impl_three_way_comparison < 201907L
+     406              :       friend bool
+     407       352786 :       operator!=(const _Node_iterator_base& __x, const _Node_iterator_base& __y)
+     408              :       noexcept
+     409       352786 :       { return __x._M_cur != __y._M_cur; }
+     410              : #endif
+     411              :     };
+     412              : 
+     413              :   /// Node iterators, used to iterate through all the hashtable.
+     414              :   template<typename _Value, bool __constant_iterators, bool __cache>
+     415              :     struct _Node_iterator
+     416              :     : public _Node_iterator_base<_Value, __cache>
+     417              :     {
+     418              :     private:
+     419              :       using __base_type = _Node_iterator_base<_Value, __cache>;
+     420              :       using __node_type = typename __base_type::__node_type;
+     421              : 
+     422              :     public:
+     423              :       using value_type = _Value;
+     424              :       using difference_type = std::ptrdiff_t;
+     425              :       using iterator_category = std::forward_iterator_tag;
+     426              : 
+     427              :       using pointer = __conditional_t<__constant_iterators,
+     428              :                                       const value_type*, value_type*>;
+     429              : 
+     430              :       using reference = __conditional_t<__constant_iterators,
+     431              :                                         const value_type&, value_type&>;
+     432              : 
+     433              :       _Node_iterator() = default;
+     434              : 
+     435              :       explicit
+     436       734614 :       _Node_iterator(__node_type* __p) noexcept
+     437       734614 :       : __base_type(__p) { }
+     438              : 
+     439              :       reference
+     440       140078 :       operator*() const noexcept
+     441       280156 :       { return this->_M_cur->_M_v(); }
+     442              : 
+     443              :       pointer
+     444       198966 :       operator->() const noexcept
+     445       397932 :       { return this->_M_cur->_M_valptr(); }
+     446              : 
+     447              :       _Node_iterator&
+     448       193746 :       operator++() noexcept
+     449              :       {
+     450       193746 :         this->_M_incr();
+     451       193746 :         return *this;
+     452              :       }
+     453              : 
+     454              :       _Node_iterator
+     455              :       operator++(int) noexcept
+     456              :       {
+     457              :         _Node_iterator __tmp(*this);
+     458              :         this->_M_incr();
+     459              :         return __tmp;
+     460              :       }
+     461              :     };
+     462              : 
+     463              :   /// Node const_iterators, used to iterate through all the hashtable.
+     464              :   template<typename _Value, bool __constant_iterators, bool __cache>
+     465              :     struct _Node_const_iterator
+     466              :     : public _Node_iterator_base<_Value, __cache>
+     467              :     {
+     468              :     private:
+     469              :       using __base_type = _Node_iterator_base<_Value, __cache>;
+     470              :       using __node_type = typename __base_type::__node_type;
+     471              : 
+     472              :     public:
+     473              :       typedef _Value                                    value_type;
+     474              :       typedef std::ptrdiff_t                            difference_type;
+     475              :       typedef std::forward_iterator_tag                 iterator_category;
+     476              : 
+     477              :       typedef const value_type*                         pointer;
+     478              :       typedef const value_type&                             reference;
+     479              : 
+     480              :       _Node_const_iterator() = default;
+     481              : 
+     482              :       explicit
+     483              :       _Node_const_iterator(__node_type* __p) noexcept
+     484              :       : __base_type(__p) { }
+     485              : 
+     486              :       _Node_const_iterator(const _Node_iterator<_Value, __constant_iterators,
+     487              :                            __cache>& __x) noexcept
+     488              :       : __base_type(__x._M_cur) { }
+     489              : 
+     490              :       reference
+     491              :       operator*() const noexcept
+     492              :       { return this->_M_cur->_M_v(); }
+     493              : 
+     494              :       pointer
+     495              :       operator->() const noexcept
+     496              :       { return this->_M_cur->_M_valptr(); }
+     497              : 
+     498              :       _Node_const_iterator&
+     499              :       operator++() noexcept
+     500              :       {
+     501              :         this->_M_incr();
+     502              :         return *this;
+     503              :       }
+     504              : 
+     505              :       _Node_const_iterator
+     506              :       operator++(int) noexcept
+     507              :       {
+     508              :         _Node_const_iterator __tmp(*this);
+     509              :         this->_M_incr();
+     510              :         return __tmp;
+     511              :       }
+     512              :     };
+     513              : 
+     514              :   // Many of class template _Hashtable's template parameters are policy
+     515              :   // classes.  These are defaults for the policies.
+     516              : 
+     517              :   /// Default range hashing function: use division to fold a large number
+     518              :   /// into the range [0, N).
+     519              :   struct _Mod_range_hashing
+     520              :   {
+     521              :     typedef std::size_t first_argument_type;
+     522              :     typedef std::size_t second_argument_type;
+     523              :     typedef std::size_t result_type;
+     524              : 
+     525              :     result_type
+     526      6299942 :     operator()(first_argument_type __num,
+     527              :                second_argument_type __den) const noexcept
+     528      6299942 :     { return __num % __den; }
+     529              :   };
+     530              : 
+     531              :   /// Default ranged hash function H.  In principle it should be a
+     532              :   /// function object composed from objects of type H1 and H2 such that
+     533              :   /// h(k, N) = h2(h1(k), N), but that would mean making extra copies of
+     534              :   /// h1 and h2.  So instead we'll just use a tag to tell class template
+     535              :   /// hashtable to do that composition.
+     536              :   struct _Default_ranged_hash { };
+     537              : 
+     538              :   /// Default value for rehash policy.  Bucket size is (usually) the
+     539              :   /// smallest prime that keeps the load factor small enough.
+     540              :   struct _Prime_rehash_policy
+     541              :   {
+     542              :     using __has_load_factor = true_type;
+     543              : 
+     544       123656 :     _Prime_rehash_policy(float __z = 1.0) noexcept
+     545       123656 :     : _M_max_load_factor(__z), _M_next_resize(0) { }
+     546              : 
+     547              :     float
+     548              :     max_load_factor() const noexcept
+     549              :     { return _M_max_load_factor; }
+     550              : 
+     551              :     // Return a bucket size no smaller than n.
+     552              :     std::size_t
+     553              :     _M_next_bkt(std::size_t __n) const;
+     554              : 
+     555              :     // Return a bucket count appropriate for n elements
+     556              :     std::size_t
+     557              :     _M_bkt_for_elements(std::size_t __n) const
+     558              :     { return __builtin_ceil(__n / (double)_M_max_load_factor); }
+     559              : 
+     560              :     // __n_bkt is current bucket count, __n_elt is current element count,
+     561              :     // and __n_ins is number of elements to be inserted.  Do we need to
+     562              :     // increase bucket count?  If so, return make_pair(true, n), where n
+     563              :     // is the new bucket count.  If not, return make_pair(false, 0).
+     564              :     std::pair<bool, std::size_t>
+     565              :     _M_need_rehash(std::size_t __n_bkt, std::size_t __n_elt,
+     566              :                    std::size_t __n_ins) const;
+     567              : 
+     568              :     typedef std::size_t _State;
+     569              : 
+     570              :     _State
+     571       260158 :     _M_state() const
+     572       260158 :     { return _M_next_resize; }
+     573              : 
+     574              :     void
+     575              :     _M_reset() noexcept
+     576              :     { _M_next_resize = 0; }
+     577              : 
+     578              :     void
+     579            0 :     _M_reset(_State __state)
+     580            0 :     { _M_next_resize = __state; }
+     581              : 
+     582              :     static const std::size_t _S_growth_factor = 2;
+     583              : 
+     584              :     float               _M_max_load_factor;
+     585              :     mutable std::size_t _M_next_resize;
+     586              :   };
+     587              : 
+     588              :   /// Range hashing function assuming that second arg is a power of 2.
+     589              :   struct _Mask_range_hashing
+     590              :   {
+     591              :     typedef std::size_t first_argument_type;
+     592              :     typedef std::size_t second_argument_type;
+     593              :     typedef std::size_t result_type;
+     594              : 
+     595              :     result_type
+     596              :     operator()(first_argument_type __num,
+     597              :                second_argument_type __den) const noexcept
+     598              :     { return __num & (__den - 1); }
+     599              :   };
+     600              : 
+     601              :   /// Compute closest power of 2 not less than __n
+     602              :   inline std::size_t
+     603              :   __clp2(std::size_t __n) noexcept
+     604              :   {
+     605              :     using __gnu_cxx::__int_traits;
+     606              :     // Equivalent to return __n ? std::bit_ceil(__n) : 0;
+     607              :     if (__n < 2)
+     608              :       return __n;
+     609              :     const unsigned __lz = sizeof(size_t) > sizeof(long)
+     610              :       ? __builtin_clzll(__n - 1ull)
+     611              :       : __builtin_clzl(__n - 1ul);
+     612              :     // Doing two shifts avoids undefined behaviour when __lz == 0.
+     613              :     return (size_t(1) << (__int_traits<size_t>::__digits - __lz - 1)) << 1;
+     614              :   }
+     615              : 
+     616              :   /// Rehash policy providing power of 2 bucket numbers. Avoids modulo
+     617              :   /// operations.
+     618              :   struct _Power2_rehash_policy
+     619              :   {
+     620              :     using __has_load_factor = true_type;
+     621              : 
+     622              :     _Power2_rehash_policy(float __z = 1.0) noexcept
+     623              :     : _M_max_load_factor(__z), _M_next_resize(0) { }
+     624              : 
+     625              :     float
+     626              :     max_load_factor() const noexcept
+     627              :     { return _M_max_load_factor; }
+     628              : 
+     629              :     // Return a bucket size no smaller than n (as long as n is not above the
+     630              :     // highest power of 2).
+     631              :     std::size_t
+     632              :     _M_next_bkt(std::size_t __n) noexcept
+     633              :     {
+     634              :       if (__n == 0)
+     635              :         // Special case on container 1st initialization with 0 bucket count
+     636              :         // hint. We keep _M_next_resize to 0 to make sure that next time we
+     637              :         // want to add an element allocation will take place.
+     638              :         return 1;
+     639              : 
+     640              :       const auto __max_width = std::min<size_t>(sizeof(size_t), 8);
+     641              :       const auto __max_bkt = size_t(1) << (__max_width * __CHAR_BIT__ - 1);
+     642              :       std::size_t __res = __clp2(__n);
+     643              : 
+     644              :       if (__res == 0)
+     645              :         __res = __max_bkt;
+     646              :       else if (__res == 1)
+     647              :         // If __res is 1 we force it to 2 to make sure there will be an
+     648              :         // allocation so that nothing need to be stored in the initial
+     649              :         // single bucket
+     650              :         __res = 2;
+     651              : 
+     652              :       if (__res == __max_bkt)
+     653              :         // Set next resize to the max value so that we never try to rehash again
+     654              :         // as we already reach the biggest possible bucket number.
+     655              :         // Note that it might result in max_load_factor not being respected.
+     656              :         _M_next_resize = size_t(-1);
+     657              :       else
+     658              :         _M_next_resize
+     659              :           = __builtin_floor(__res * (double)_M_max_load_factor);
+     660              : 
+     661              :       return __res;
+     662              :     }
+     663              : 
+     664              :     // Return a bucket count appropriate for n elements
+     665              :     std::size_t
+     666              :     _M_bkt_for_elements(std::size_t __n) const noexcept
+     667              :     { return __builtin_ceil(__n / (double)_M_max_load_factor); }
+     668              : 
+     669              :     // __n_bkt is current bucket count, __n_elt is current element count,
+     670              :     // and __n_ins is number of elements to be inserted.  Do we need to
+     671              :     // increase bucket count?  If so, return make_pair(true, n), where n
+     672              :     // is the new bucket count.  If not, return make_pair(false, 0).
+     673              :     std::pair<bool, std::size_t>
+     674              :     _M_need_rehash(std::size_t __n_bkt, std::size_t __n_elt,
+     675              :                    std::size_t __n_ins) noexcept
+     676              :     {
+     677              :       if (__n_elt + __n_ins > _M_next_resize)
+     678              :         {
+     679              :           // If _M_next_resize is 0 it means that we have nothing allocated so
+     680              :           // far and that we start inserting elements. In this case we start
+     681              :           // with an initial bucket size of 11.
+     682              :           double __min_bkts
+     683              :             = std::max<std::size_t>(__n_elt + __n_ins, _M_next_resize ? 0 : 11)
+     684              :               / (double)_M_max_load_factor;
+     685              :           if (__min_bkts >= __n_bkt)
+     686              :             return { true,
+     687              :               _M_next_bkt(std::max<std::size_t>(__builtin_floor(__min_bkts) + 1,
+     688              :                                                 __n_bkt * _S_growth_factor)) };
+     689              : 
+     690              :           _M_next_resize
+     691              :             = __builtin_floor(__n_bkt * (double)_M_max_load_factor);
+     692              :           return { false, 0 };
+     693              :         }
+     694              :       else
+     695              :         return { false, 0 };
+     696              :     }
+     697              : 
+     698              :     typedef std::size_t _State;
+     699              : 
+     700              :     _State
+     701              :     _M_state() const noexcept
+     702              :     { return _M_next_resize; }
+     703              : 
+     704              :     void
+     705              :     _M_reset() noexcept
+     706              :     { _M_next_resize = 0; }
+     707              : 
+     708              :     void
+     709              :     _M_reset(_State __state) noexcept
+     710              :     { _M_next_resize = __state; }
+     711              : 
+     712              :     static const std::size_t _S_growth_factor = 2;
+     713              : 
+     714              :     float       _M_max_load_factor;
+     715              :     std::size_t _M_next_resize;
+     716              :   };
+     717              : 
+     718              :   // Base classes for std::_Hashtable.  We define these base classes
+     719              :   // because in some cases we want to do different things depending on
+     720              :   // the value of a policy class.  In some cases the policy class
+     721              :   // affects which member functions and nested typedefs are defined;
+     722              :   // we handle that by specializing base class templates.  Several of
+     723              :   // the base class templates need to access other members of class
+     724              :   // template _Hashtable, so we use a variant of the "Curiously
+     725              :   // Recurring Template Pattern" (CRTP) technique.
+     726              : 
+     727              :   /**
+     728              :    *  Primary class template _Map_base.
+     729              :    *
+     730              :    *  If the hashtable has a value type of the form pair<const T1, T2> and
+     731              :    *  a key extraction policy (_ExtractKey) that returns the first part
+     732              :    *  of the pair, the hashtable gets a mapped_type typedef.  If it
+     733              :    *  satisfies those criteria and also has unique keys, then it also
+     734              :    *  gets an operator[].
+     735              :    */
+     736              :   template<typename _Key, typename _Value, typename _Alloc,
+     737              :            typename _ExtractKey, typename _Equal,
+     738              :            typename _Hash, typename _RangeHash, typename _Unused,
+     739              :            typename _RehashPolicy, typename _Traits,
+     740              :            bool _Unique_keys = _Traits::__unique_keys::value>
+     741              :     struct _Map_base { };
+     742              : 
+     743              :   /// Partial specialization, __unique_keys set to false, std::pair value type.
+     744              :   template<typename _Key, typename _Val, typename _Alloc, typename _Equal,
+     745              :            typename _Hash, typename _RangeHash, typename _Unused,
+     746              :            typename _RehashPolicy, typename _Traits>
+     747              :     struct _Map_base<_Key, pair<const _Key, _Val>, _Alloc, _Select1st, _Equal,
+     748              :                      _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, false>
+     749              :     {
+     750              :       using mapped_type = _Val;
+     751              :     };
+     752              : 
+     753              :   /// Partial specialization, __unique_keys set to true.
+     754              :   template<typename _Key, typename _Val, typename _Alloc, typename _Equal,
+     755              :            typename _Hash, typename _RangeHash, typename _Unused,
+     756              :            typename _RehashPolicy, typename _Traits>
+     757              :     struct _Map_base<_Key, pair<const _Key, _Val>, _Alloc, _Select1st, _Equal,
+     758              :                      _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true>
+     759              :     {
+     760              :     private:
+     761              :       using __hashtable_base = _Hashtable_base<_Key, pair<const _Key, _Val>,
+     762              :                                                _Select1st, _Equal, _Hash,
+     763              :                                                _RangeHash, _Unused,
+     764              :                                                _Traits>;
+     765              : 
+     766              :       using __hashtable = _Hashtable<_Key, pair<const _Key, _Val>, _Alloc,
+     767              :                                      _Select1st, _Equal, _Hash, _RangeHash,
+     768              :                                      _Unused, _RehashPolicy, _Traits>;
+     769              : 
+     770              :       using __hash_code = typename __hashtable_base::__hash_code;
+     771              : 
+     772              :     public:
+     773              :       using key_type = typename __hashtable_base::key_type;
+     774              :       using mapped_type = _Val;
+     775              : 
+     776              :       mapped_type&
+     777              :       operator[](const key_type& __k);
+     778              : 
+     779              :       mapped_type&
+     780              :       operator[](key_type&& __k);
+     781              : 
+     782              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     783              :       // DR 761. unordered_map needs an at() member function.
+     784              :       mapped_type&
+     785              :       at(const key_type& __k)
+     786              :       {
+     787              :         auto __ite = static_cast<__hashtable*>(this)->find(__k);
+     788              :         if (!__ite._M_cur)
+     789              :           __throw_out_of_range(__N("unordered_map::at"));
+     790              :         return __ite->second;
+     791              :       }
+     792              : 
+     793              :       const mapped_type&
+     794              :       at(const key_type& __k) const
+     795              :       {
+     796              :         auto __ite = static_cast<const __hashtable*>(this)->find(__k);
+     797              :         if (!__ite._M_cur)
+     798              :           __throw_out_of_range(__N("unordered_map::at"));
+     799              :         return __ite->second;
+     800              :       }
+     801              :     };
+     802              : 
+     803              :   template<typename _Key, typename _Val, typename _Alloc, typename _Equal,
+     804              :            typename _Hash, typename _RangeHash, typename _Unused,
+     805              :            typename _RehashPolicy, typename _Traits>
+     806              :     auto
+     807        58918 :     _Map_base<_Key, pair<const _Key, _Val>, _Alloc, _Select1st, _Equal,
+     808              :               _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true>::
+     809              :     operator[](const key_type& __k)
+     810              :     -> mapped_type&
+     811              :     {
+     812        58918 :       __hashtable* __h = static_cast<__hashtable*>(this);
+     813        58918 :       __hash_code __code = __h->_M_hash_code(__k);
+     814        58918 :       std::size_t __bkt = __h->_M_bucket_index(__code);
+     815        58918 :       if (auto __node = __h->_M_find_node(__bkt, __k, __code))
+     816       102952 :         return __node->_M_v().second;
+     817              : 
+     818         7442 :       typename __hashtable::_Scoped_node __node {
+     819              :         __h,
+     820              :         std::piecewise_construct,
+     821         7442 :         std::tuple<const key_type&>(__k),
+     822            0 :         std::tuple<>()
+     823              :       };
+     824              :       auto __pos
+     825         7442 :         = __h->_M_insert_unique_node(__bkt, __code, __node._M_node);
+     826         7442 :       __node._M_node = nullptr;
+     827         7442 :       return __pos->second;
+     828         7442 :     }
+     829              : 
+     830              :   template<typename _Key, typename _Val, typename _Alloc, typename _Equal,
+     831              :            typename _Hash, typename _RangeHash, typename _Unused,
+     832              :            typename _RehashPolicy, typename _Traits>
+     833              :     auto
+     834      5864176 :     _Map_base<_Key, pair<const _Key, _Val>, _Alloc, _Select1st, _Equal,
+     835              :               _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true>::
+     836              :     operator[](key_type&& __k)
+     837              :     -> mapped_type&
+     838              :     {
+     839      5864176 :       __hashtable* __h = static_cast<__hashtable*>(this);
+     840      5864176 :       __hash_code __code = __h->_M_hash_code(__k);
+     841      5864176 :       std::size_t __bkt = __h->_M_bucket_index(__code);
+     842      5864176 :       if (auto __node = __h->_M_find_node(__bkt, __k, __code))
+     843     11345304 :         return __node->_M_v().second;
+     844              : 
+     845       191524 :       typename __hashtable::_Scoped_node __node {
+     846              :         __h,
+     847              :         std::piecewise_construct,
+     848       191524 :         std::forward_as_tuple(std::move(__k)),
+     849            0 :         std::tuple<>()
+     850              :       };
+     851              :       auto __pos
+     852       191524 :         = __h->_M_insert_unique_node(__bkt, __code, __node._M_node);
+     853       191524 :       __node._M_node = nullptr;
+     854       191524 :       return __pos->second;
+     855       191524 :     }
+     856              : 
+     857              :   // Partial specialization for unordered_map<const T, U>, see PR 104174.
+     858              :   template<typename _Key, typename _Val, typename _Alloc, typename _Equal,
+     859              :            typename _Hash, typename _RangeHash, typename _Unused,
+     860              :            typename _RehashPolicy, typename _Traits, bool __uniq>
+     861              :     struct _Map_base<const _Key, pair<const _Key, _Val>,
+     862              :                      _Alloc, _Select1st, _Equal, _Hash,
+     863              :                      _RangeHash, _Unused, _RehashPolicy, _Traits, __uniq>
+     864              :     : _Map_base<_Key, pair<const _Key, _Val>, _Alloc, _Select1st, _Equal, _Hash,
+     865              :                 _RangeHash, _Unused, _RehashPolicy, _Traits, __uniq>
+     866              :     { };
+     867              : 
+     868              :   /**
+     869              :    *  Primary class template _Insert_base.
+     870              :    *
+     871              :    *  Defines @c insert member functions appropriate to all _Hashtables.
+     872              :    */
+     873              :   template<typename _Key, typename _Value, typename _Alloc,
+     874              :            typename _ExtractKey, typename _Equal,
+     875              :            typename _Hash, typename _RangeHash, typename _Unused,
+     876              :            typename _RehashPolicy, typename _Traits>
+     877              :     struct _Insert_base
+     878              :     {
+     879              :     protected:
+     880              :       using __hashtable_base = _Hashtable_base<_Key, _Value, _ExtractKey,
+     881              :                                                _Equal, _Hash, _RangeHash,
+     882              :                                                _Unused, _Traits>;
+     883              : 
+     884              :       using __hashtable = _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+     885              :                                      _Hash, _RangeHash,
+     886              :                                      _Unused, _RehashPolicy, _Traits>;
+     887              : 
+     888              :       using __hash_cached = typename _Traits::__hash_cached;
+     889              :       using __constant_iterators = typename _Traits::__constant_iterators;
+     890              : 
+     891              :       using __hashtable_alloc = _Hashtable_alloc<
+     892              :         __alloc_rebind<_Alloc, _Hash_node<_Value,
+     893              :                                           __hash_cached::value>>>;
+     894              : 
+     895              :       using value_type = typename __hashtable_base::value_type;
+     896              :       using size_type = typename __hashtable_base::size_type;
+     897              : 
+     898              :       using __unique_keys = typename _Traits::__unique_keys;
+     899              :       using __node_alloc_type = typename __hashtable_alloc::__node_alloc_type;
+     900              :       using __node_gen_type = _AllocNode<__node_alloc_type>;
+     901              : 
+     902              :       __hashtable&
+     903        61064 :       _M_conjure_hashtable()
+     904        61064 :       { return *(static_cast<__hashtable*>(this)); }
+     905              : 
+     906              :       template<typename _InputIterator, typename _NodeGetter>
+     907              :         void
+     908              :         _M_insert_range(_InputIterator __first, _InputIterator __last,
+     909              :                         const _NodeGetter&, true_type __uks);
+     910              : 
+     911              :       template<typename _InputIterator, typename _NodeGetter>
+     912              :         void
+     913              :         _M_insert_range(_InputIterator __first, _InputIterator __last,
+     914              :                         const _NodeGetter&, false_type __uks);
+     915              : 
+     916              :     public:
+     917              :       using iterator = _Node_iterator<_Value, __constant_iterators::value,
+     918              :                                       __hash_cached::value>;
+     919              : 
+     920              :       using const_iterator = _Node_const_iterator<_Value,
+     921              :                                                   __constant_iterators::value,
+     922              :                                                   __hash_cached::value>;
+     923              : 
+     924              :       using __ireturn_type = __conditional_t<__unique_keys::value,
+     925              :                                              std::pair<iterator, bool>,
+     926              :                                              iterator>;
+     927              : 
+     928              :       __ireturn_type
+     929        61064 :       insert(const value_type& __v)
+     930              :       {
+     931        61064 :         __hashtable& __h = _M_conjure_hashtable();
+     932        61064 :         __node_gen_type __node_gen(__h);
+     933       122128 :         return __h._M_insert(__v, __node_gen, __unique_keys{});
+     934              :       }
+     935              : 
+     936              :       iterator
+     937              :       insert(const_iterator __hint, const value_type& __v)
+     938              :       {
+     939              :         __hashtable& __h = _M_conjure_hashtable();
+     940              :         __node_gen_type __node_gen(__h);        
+     941              :         return __h._M_insert(__hint, __v, __node_gen, __unique_keys{});
+     942              :       }
+     943              : 
+     944              :       template<typename _KType, typename... _Args>
+     945              :         std::pair<iterator, bool>
+     946              :         try_emplace(const_iterator, _KType&& __k, _Args&&... __args)
+     947              :         {
+     948              :           __hashtable& __h = _M_conjure_hashtable();
+     949              :           auto __code = __h._M_hash_code(__k);
+     950              :           std::size_t __bkt = __h._M_bucket_index(__code);
+     951              :           if (auto __node = __h._M_find_node(__bkt, __k, __code))
+     952              :             return { iterator(__node), false };
+     953              : 
+     954              :           typename __hashtable::_Scoped_node __node {
+     955              :             &__h,
+     956              :             std::piecewise_construct,
+     957              :             std::forward_as_tuple(std::forward<_KType>(__k)),
+     958              :             std::forward_as_tuple(std::forward<_Args>(__args)...)
+     959              :             };
+     960              :           auto __it
+     961              :             = __h._M_insert_unique_node(__bkt, __code, __node._M_node);
+     962              :           __node._M_node = nullptr;
+     963              :           return { __it, true };
+     964              :         }
+     965              : 
+     966              :       void
+     967              :       insert(initializer_list<value_type> __l)
+     968              :       { this->insert(__l.begin(), __l.end()); }
+     969              : 
+     970              :       template<typename _InputIterator>
+     971              :         void
+     972              :         insert(_InputIterator __first, _InputIterator __last)
+     973              :         {
+     974              :           __hashtable& __h = _M_conjure_hashtable();
+     975              :           __node_gen_type __node_gen(__h);
+     976              :           return _M_insert_range(__first, __last, __node_gen, __unique_keys{});
+     977              :         }
+     978              :     };
+     979              : 
+     980              :   template<typename _Key, typename _Value, typename _Alloc,
+     981              :            typename _ExtractKey, typename _Equal,
+     982              :            typename _Hash, typename _RangeHash, typename _Unused,
+     983              :            typename _RehashPolicy, typename _Traits>
+     984              :     template<typename _InputIterator, typename _NodeGetter>
+     985              :       void
+     986              :       _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+     987              :                    _Hash, _RangeHash, _Unused,
+     988              :                    _RehashPolicy, _Traits>::
+     989              :       _M_insert_range(_InputIterator __first, _InputIterator __last,
+     990              :                       const _NodeGetter& __node_gen, true_type __uks)
+     991              :       {
+     992              :         __hashtable& __h = _M_conjure_hashtable();
+     993              :         for (; __first != __last; ++__first)
+     994              :           __h._M_insert(*__first, __node_gen, __uks);
+     995              :       }
+     996              : 
+     997              :   template<typename _Key, typename _Value, typename _Alloc,
+     998              :            typename _ExtractKey, typename _Equal,
+     999              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1000              :            typename _RehashPolicy, typename _Traits>
+    1001              :     template<typename _InputIterator, typename _NodeGetter>
+    1002              :       void
+    1003              :       _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1004              :                    _Hash, _RangeHash, _Unused,
+    1005              :                    _RehashPolicy, _Traits>::
+    1006              :       _M_insert_range(_InputIterator __first, _InputIterator __last,
+    1007              :                       const _NodeGetter& __node_gen, false_type __uks)
+    1008              :       {
+    1009              :         using __rehash_type = typename __hashtable::__rehash_type;
+    1010              :         using __rehash_state = typename __hashtable::__rehash_state;
+    1011              :         using pair_type = std::pair<bool, std::size_t>;
+    1012              : 
+    1013              :         size_type __n_elt = __detail::__distance_fw(__first, __last);
+    1014              :         if (__n_elt == 0)
+    1015              :           return;
+    1016              : 
+    1017              :         __hashtable& __h = _M_conjure_hashtable();
+    1018              :         __rehash_type& __rehash = __h._M_rehash_policy;
+    1019              :         const __rehash_state& __saved_state = __rehash._M_state();
+    1020              :         pair_type __do_rehash = __rehash._M_need_rehash(__h._M_bucket_count,
+    1021              :                                                         __h._M_element_count,
+    1022              :                                                         __n_elt);
+    1023              : 
+    1024              :         if (__do_rehash.first)
+    1025              :           __h._M_rehash(__do_rehash.second, __saved_state);
+    1026              : 
+    1027              :         for (; __first != __last; ++__first)
+    1028              :           __h._M_insert(*__first, __node_gen, __uks);
+    1029              :       }
+    1030              : 
+    1031              :   /**
+    1032              :    *  Primary class template _Insert.
+    1033              :    *
+    1034              :    *  Defines @c insert member functions that depend on _Hashtable policies,
+    1035              :    *  via partial specializations.
+    1036              :    */
+    1037              :   template<typename _Key, typename _Value, typename _Alloc,
+    1038              :            typename _ExtractKey, typename _Equal,
+    1039              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1040              :            typename _RehashPolicy, typename _Traits,
+    1041              :            bool _Constant_iterators = _Traits::__constant_iterators::value>
+    1042              :     struct _Insert;
+    1043              : 
+    1044              :   /// Specialization.
+    1045              :   template<typename _Key, typename _Value, typename _Alloc,
+    1046              :            typename _ExtractKey, typename _Equal,
+    1047              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1048              :            typename _RehashPolicy, typename _Traits>
+    1049              :     struct _Insert<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1050              :                    _Hash, _RangeHash, _Unused,
+    1051              :                    _RehashPolicy, _Traits, true>
+    1052              :     : public _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1053              :                           _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>
+    1054              :     {
+    1055              :       using __base_type = _Insert_base<_Key, _Value, _Alloc, _ExtractKey,
+    1056              :                                        _Equal, _Hash, _RangeHash, _Unused,
+    1057              :                                        _RehashPolicy, _Traits>;
+    1058              : 
+    1059              :       using value_type = typename __base_type::value_type;
+    1060              :       using iterator = typename __base_type::iterator;
+    1061              :       using const_iterator =  typename __base_type::const_iterator;
+    1062              :       using __ireturn_type = typename __base_type::__ireturn_type;
+    1063              : 
+    1064              :       using __unique_keys = typename __base_type::__unique_keys;
+    1065              :       using __hashtable = typename __base_type::__hashtable;
+    1066              :       using __node_gen_type = typename __base_type::__node_gen_type;
+    1067              : 
+    1068              :       using __base_type::insert;
+    1069              : 
+    1070              :       __ireturn_type
+    1071              :       insert(value_type&& __v)
+    1072              :       {
+    1073              :         __hashtable& __h = this->_M_conjure_hashtable();
+    1074              :         __node_gen_type __node_gen(__h);
+    1075              :         return __h._M_insert(std::move(__v), __node_gen, __unique_keys{});
+    1076              :       }
+    1077              : 
+    1078              :       iterator
+    1079              :       insert(const_iterator __hint, value_type&& __v)
+    1080              :       {
+    1081              :         __hashtable& __h = this->_M_conjure_hashtable();
+    1082              :         __node_gen_type __node_gen(__h);
+    1083              :         return __h._M_insert(__hint, std::move(__v), __node_gen,
+    1084              :                              __unique_keys{});
+    1085              :       }
+    1086              :     };
+    1087              : 
+    1088              :   /// Specialization.
+    1089              :   template<typename _Key, typename _Value, typename _Alloc,
+    1090              :            typename _ExtractKey, typename _Equal,
+    1091              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1092              :            typename _RehashPolicy, typename _Traits>
+    1093              :     struct _Insert<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1094              :                    _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, false>
+    1095              :     : public _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1096              :                           _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>
+    1097              :     {
+    1098              :       using __base_type = _Insert_base<_Key, _Value, _Alloc, _ExtractKey,
+    1099              :                                        _Equal, _Hash, _RangeHash, _Unused,
+    1100              :                                        _RehashPolicy, _Traits>;
+    1101              :       using value_type = typename __base_type::value_type;
+    1102              :       using iterator = typename __base_type::iterator;
+    1103              :       using const_iterator =  typename __base_type::const_iterator;
+    1104              : 
+    1105              :       using __unique_keys = typename __base_type::__unique_keys;
+    1106              :       using __hashtable = typename __base_type::__hashtable;
+    1107              :       using __ireturn_type = typename __base_type::__ireturn_type;
+    1108              : 
+    1109              :       using __base_type::insert;
+    1110              : 
+    1111              :       template<typename _Pair>
+    1112              :         using __is_cons = std::is_constructible<value_type, _Pair&&>;
+    1113              : 
+    1114              :       template<typename _Pair>
+    1115              :         using _IFcons = std::enable_if<__is_cons<_Pair>::value>;
+    1116              : 
+    1117              :       template<typename _Pair>
+    1118              :         using _IFconsp = typename _IFcons<_Pair>::type;
+    1119              : 
+    1120              :       template<typename _Pair, typename = _IFconsp<_Pair>>
+    1121              :         __ireturn_type
+    1122              :         insert(_Pair&& __v)
+    1123              :         {
+    1124              :           __hashtable& __h = this->_M_conjure_hashtable();
+    1125              :           return __h._M_emplace(__unique_keys{}, std::forward<_Pair>(__v));
+    1126              :         }
+    1127              : 
+    1128              :       template<typename _Pair, typename = _IFconsp<_Pair>>
+    1129              :         iterator
+    1130              :         insert(const_iterator __hint, _Pair&& __v)
+    1131              :         {
+    1132              :           __hashtable& __h = this->_M_conjure_hashtable();
+    1133              :           return __h._M_emplace(__hint, __unique_keys{},
+    1134              :                                 std::forward<_Pair>(__v));
+    1135              :         }
+    1136              :    };
+    1137              : 
+    1138              :   template<typename _Policy>
+    1139              :     using __has_load_factor = typename _Policy::__has_load_factor;
+    1140              : 
+    1141              :   /**
+    1142              :    *  Primary class template  _Rehash_base.
+    1143              :    *
+    1144              :    *  Give hashtable the max_load_factor functions and reserve iff the
+    1145              :    *  rehash policy supports it.
+    1146              :   */
+    1147              :   template<typename _Key, typename _Value, typename _Alloc,
+    1148              :            typename _ExtractKey, typename _Equal,
+    1149              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1150              :            typename _RehashPolicy, typename _Traits,
+    1151              :            typename =
+    1152              :              __detected_or_t<false_type, __has_load_factor, _RehashPolicy>>
+    1153              :     struct _Rehash_base;
+    1154              : 
+    1155              :   /// Specialization when rehash policy doesn't provide load factor management.
+    1156              :   template<typename _Key, typename _Value, typename _Alloc,
+    1157              :            typename _ExtractKey, typename _Equal,
+    1158              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1159              :            typename _RehashPolicy, typename _Traits>
+    1160              :     struct _Rehash_base<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1161              :                         _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits,
+    1162              :                         false_type /* Has load factor */>
+    1163              :     {
+    1164              :     };
+    1165              : 
+    1166              :   /// Specialization when rehash policy provide load factor management.
+    1167              :   template<typename _Key, typename _Value, typename _Alloc,
+    1168              :            typename _ExtractKey, typename _Equal,
+    1169              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1170              :            typename _RehashPolicy, typename _Traits>
+    1171              :     struct _Rehash_base<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1172              :                         _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits,
+    1173              :                         true_type /* Has load factor */>
+    1174              :     {
+    1175              :     private:
+    1176              :       using __hashtable = _Hashtable<_Key, _Value, _Alloc, _ExtractKey,
+    1177              :                                      _Equal, _Hash, _RangeHash, _Unused,
+    1178              :                                      _RehashPolicy, _Traits>;
+    1179              : 
+    1180              :     public:
+    1181              :       float
+    1182              :       max_load_factor() const noexcept
+    1183              :       {
+    1184              :         const __hashtable* __this = static_cast<const __hashtable*>(this);
+    1185              :         return __this->__rehash_policy().max_load_factor();
+    1186              :       }
+    1187              : 
+    1188              :       void
+    1189              :       max_load_factor(float __z)
+    1190              :       {
+    1191              :         __hashtable* __this = static_cast<__hashtable*>(this);
+    1192              :         __this->__rehash_policy(_RehashPolicy(__z));
+    1193              :       }
+    1194              : 
+    1195              :       void
+    1196              :       reserve(std::size_t __n)
+    1197              :       {
+    1198              :         __hashtable* __this = static_cast<__hashtable*>(this);
+    1199              :         __this->rehash(__this->__rehash_policy()._M_bkt_for_elements(__n));
+    1200              :       }
+    1201              :     };
+    1202              : 
+    1203              :   /**
+    1204              :    *  Primary class template _Hashtable_ebo_helper.
+    1205              :    *
+    1206              :    *  Helper class using EBO when it is not forbidden (the type is not
+    1207              :    *  final) and when it is worth it (the type is empty.)
+    1208              :    */
+    1209              :   template<int _Nm, typename _Tp,
+    1210              :            bool __use_ebo = !__is_final(_Tp) && __is_empty(_Tp)>
+    1211              :     struct _Hashtable_ebo_helper;
+    1212              : 
+    1213              :   /// Specialization using EBO.
+    1214              :   template<int _Nm, typename _Tp>
+    1215              :     struct _Hashtable_ebo_helper<_Nm, _Tp, true>
+    1216              :     : private _Tp
+    1217              :     {
+    1218       370968 :       _Hashtable_ebo_helper() noexcept(noexcept(_Tp())) : _Tp() { }
+    1219              : 
+    1220              :       template<typename _OtherTp>
+    1221              :         _Hashtable_ebo_helper(_OtherTp&& __tp)
+    1222              :         : _Tp(std::forward<_OtherTp>(__tp))
+    1223              :         { }
+    1224              : 
+    1225     11938042 :       const _Tp& _M_cget() const { return static_cast<const _Tp&>(*this); }
+    1226      1273690 :       _Tp& _M_get() { return static_cast<_Tp&>(*this); }
+    1227              :     };
+    1228              : 
+    1229              :   /// Specialization not using EBO.
+    1230              :   template<int _Nm, typename _Tp>
+    1231              :     struct _Hashtable_ebo_helper<_Nm, _Tp, false>
+    1232              :     {
+    1233              :       _Hashtable_ebo_helper() = default;
+    1234              : 
+    1235              :       template<typename _OtherTp>
+    1236              :         _Hashtable_ebo_helper(_OtherTp&& __tp)
+    1237              :         : _M_tp(std::forward<_OtherTp>(__tp))
+    1238              :         { }
+    1239              : 
+    1240              :       const _Tp& _M_cget() const { return _M_tp; }
+    1241              :       _Tp& _M_get() { return _M_tp; }
+    1242              : 
+    1243              :     private:
+    1244              :       _Tp _M_tp{};
+    1245              :     };
+    1246              : 
+    1247              :   /**
+    1248              :    *  Primary class template _Local_iterator_base.
+    1249              :    *
+    1250              :    *  Base class for local iterators, used to iterate within a bucket
+    1251              :    *  but not between buckets.
+    1252              :    */
+    1253              :   template<typename _Key, typename _Value, typename _ExtractKey,
+    1254              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1255              :            bool __cache_hash_code>
+    1256              :     struct _Local_iterator_base;
+    1257              : 
+    1258              :   /**
+    1259              :    *  Primary class template _Hash_code_base.
+    1260              :    *
+    1261              :    *  Encapsulates two policy issues that aren't quite orthogonal.
+    1262              :    *   (1) the difference between using a ranged hash function and using
+    1263              :    *       the combination of a hash function and a range-hashing function.
+    1264              :    *       In the former case we don't have such things as hash codes, so
+    1265              :    *       we have a dummy type as placeholder.
+    1266              :    *   (2) Whether or not we cache hash codes.  Caching hash codes is
+    1267              :    *       meaningless if we have a ranged hash function.
+    1268              :    *
+    1269              :    *  We also put the key extraction objects here, for convenience.
+    1270              :    *  Each specialization derives from one or more of the template
+    1271              :    *  parameters to benefit from Ebo. This is important as this type
+    1272              :    *  is inherited in some cases by the _Local_iterator_base type used
+    1273              :    *  to implement local_iterator and const_local_iterator. As with
+    1274              :    *  any iterator type we prefer to make it as small as possible.
+    1275              :    */
+    1276              :   template<typename _Key, typename _Value, typename _ExtractKey,
+    1277              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1278              :            bool __cache_hash_code>
+    1279              :     struct _Hash_code_base
+    1280              :     : private _Hashtable_ebo_helper<1, _Hash>
+    1281              :     {
+    1282              :     private:
+    1283              :       using __ebo_hash = _Hashtable_ebo_helper<1, _Hash>;
+    1284              : 
+    1285              :       // Gives the local iterator implementation access to _M_bucket_index().
+    1286              :       friend struct _Local_iterator_base<_Key, _Value, _ExtractKey,
+    1287              :                                          _Hash, _RangeHash, _Unused, false>;
+    1288              : 
+    1289              :     public:
+    1290              :       typedef _Hash                                     hasher;
+    1291              : 
+    1292              :       hasher
+    1293              :       hash_function() const
+    1294              :       { return _M_hash(); }
+    1295              : 
+    1296              :     protected:
+    1297              :       typedef std::size_t                               __hash_code;
+    1298              : 
+    1299              :       // We need the default constructor for the local iterators and _Hashtable
+    1300              :       // default constructor.
+    1301       123656 :       _Hash_code_base() = default;
+    1302              : 
+    1303              :       _Hash_code_base(const _Hash& __hash) : __ebo_hash(__hash) { }
+    1304              : 
+    1305              :       __hash_code
+    1306      6067056 :       _M_hash_code(const _Key& __k) const
+    1307              :       {
+    1308              :         static_assert(__is_invocable<const _Hash&, const _Key&>{},
+    1309              :             "hash function must be invocable with an argument of key type");
+    1310      6067056 :         return _M_hash()(__k);
+    1311              :       }
+    1312              : 
+    1313              :       template<typename _Kt>
+    1314              :         __hash_code
+    1315        61164 :         _M_hash_code_tr(const _Kt& __k) const
+    1316              :         {
+    1317              :           static_assert(__is_invocable<const _Hash&, const _Kt&>{},
+    1318              :             "hash function must be invocable with an argument of key type");
+    1319        61164 :           return _M_hash()(__k);
+    1320              :         }
+    1321              : 
+    1322              :       __hash_code
+    1323              :       _M_hash_code(const _Hash_node_value<_Value, false>& __n) const
+    1324              :       { return _M_hash_code(_ExtractKey{}(__n._M_v())); }
+    1325              : 
+    1326              :       __hash_code
+    1327              :       _M_hash_code(const _Hash_node_value<_Value, true>& __n) const
+    1328              :       { return __n._M_hash_code; }
+    1329              : 
+    1330              :       std::size_t
+    1331      6106460 :       _M_bucket_index(__hash_code __c, std::size_t __bkt_count) const
+    1332      6106460 :       { return _RangeHash{}(__c, __bkt_count); }
+    1333              : 
+    1334              :       std::size_t
+    1335       138384 :       _M_bucket_index(const _Hash_node_value<_Value, false>& __n,
+    1336              :                       std::size_t __bkt_count) const
+    1337              :         noexcept( noexcept(declval<const _Hash&>()(declval<const _Key&>()))
+    1338              :                   && noexcept(declval<const _RangeHash&>()((__hash_code)0,
+    1339              :                                                            (std::size_t)0)) )
+    1340              :       {
+    1341       415152 :         return _RangeHash{}(_M_hash_code(_ExtractKey{}(__n._M_v())),
+    1342       138384 :                             __bkt_count);
+    1343              :       }
+    1344              : 
+    1345              :       std::size_t
+    1346        55098 :       _M_bucket_index(const _Hash_node_value<_Value, true>& __n,
+    1347              :                       std::size_t __bkt_count) const
+    1348              :         noexcept( noexcept(declval<const _RangeHash&>()((__hash_code)0,
+    1349              :                                                         (std::size_t)0)) )
+    1350        55098 :       { return _RangeHash{}(__n._M_hash_code, __bkt_count); }
+    1351              : 
+    1352              :       void
+    1353       198966 :       _M_store_code(_Hash_node_code_cache<false>&, __hash_code) const
+    1354       198966 :       { }
+    1355              : 
+    1356              :       void
+    1357              :       _M_copy_code(_Hash_node_code_cache<false>&,
+    1358              :                    const _Hash_node_code_cache<false>&) const
+    1359              :       { }
+    1360              : 
+    1361              :       void
+    1362        61192 :       _M_store_code(_Hash_node_code_cache<true>& __n, __hash_code __c) const
+    1363        61192 :       { __n._M_hash_code = __c; }
+    1364              : 
+    1365              :       void
+    1366              :       _M_copy_code(_Hash_node_code_cache<true>& __to,
+    1367              :                    const _Hash_node_code_cache<true>& __from) const
+    1368              :       { __to._M_hash_code = __from._M_hash_code; }
+    1369              : 
+    1370              :       void
+    1371              :       _M_swap(_Hash_code_base& __x)
+    1372              :       { std::swap(__ebo_hash::_M_get(), __x.__ebo_hash::_M_get()); }
+    1373              : 
+    1374              :       const _Hash&
+    1375      6128220 :       _M_hash() const { return __ebo_hash::_M_cget(); }
+    1376              :     };
+    1377              : 
+    1378              :   /// Partial specialization used when nodes contain a cached hash code.
+    1379              :   template<typename _Key, typename _Value, typename _ExtractKey,
+    1380              :            typename _Hash, typename _RangeHash, typename _Unused>
+    1381              :     struct _Local_iterator_base<_Key, _Value, _ExtractKey,
+    1382              :                                 _Hash, _RangeHash, _Unused, true>
+    1383              :     : public _Node_iterator_base<_Value, true>
+    1384              :     {
+    1385              :     protected:
+    1386              :       using __base_node_iter = _Node_iterator_base<_Value, true>;
+    1387              :       using __hash_code_base = _Hash_code_base<_Key, _Value, _ExtractKey,
+    1388              :                                               _Hash, _RangeHash, _Unused, true>;
+    1389              : 
+    1390              :       _Local_iterator_base() = default;
+    1391              :       _Local_iterator_base(const __hash_code_base&,
+    1392              :                            _Hash_node<_Value, true>* __p,
+    1393              :                            std::size_t __bkt, std::size_t __bkt_count)
+    1394              :       : __base_node_iter(__p), _M_bucket(__bkt), _M_bucket_count(__bkt_count)
+    1395              :       { }
+    1396              : 
+    1397              :       void
+    1398              :       _M_incr()
+    1399              :       {
+    1400              :         __base_node_iter::_M_incr();
+    1401              :         if (this->_M_cur)
+    1402              :           {
+    1403              :             std::size_t __bkt
+    1404              :               = _RangeHash{}(this->_M_cur->_M_hash_code, _M_bucket_count);
+    1405              :             if (__bkt != _M_bucket)
+    1406              :               this->_M_cur = nullptr;
+    1407              :           }
+    1408              :       }
+    1409              : 
+    1410              :       std::size_t _M_bucket;
+    1411              :       std::size_t _M_bucket_count;
+    1412              : 
+    1413              :     public:
+    1414              :       std::size_t
+    1415              :       _M_get_bucket() const { return _M_bucket; }  // for debug mode
+    1416              :     };
+    1417              : 
+    1418              :   // Uninitialized storage for a _Hash_code_base.
+    1419              :   // This type is DefaultConstructible and Assignable even if the
+    1420              :   // _Hash_code_base type isn't, so that _Local_iterator_base<..., false>
+    1421              :   // can be DefaultConstructible and Assignable.
+    1422              :   template<typename _Tp, bool _IsEmpty = std::is_empty<_Tp>::value>
+    1423              :     struct _Hash_code_storage
+    1424              :     {
+    1425              :       __gnu_cxx::__aligned_buffer<_Tp> _M_storage;
+    1426              : 
+    1427              :       _Tp*
+    1428              :       _M_h() { return _M_storage._M_ptr(); }
+    1429              : 
+    1430              :       const _Tp*
+    1431              :       _M_h() const { return _M_storage._M_ptr(); }
+    1432              :     };
+    1433              : 
+    1434              :   // Empty partial specialization for empty _Hash_code_base types.
+    1435              :   template<typename _Tp>
+    1436              :     struct _Hash_code_storage<_Tp, true>
+    1437              :     {
+    1438              :       static_assert( std::is_empty<_Tp>::value, "Type must be empty" );
+    1439              : 
+    1440              :       // As _Tp is an empty type there will be no bytes written/read through
+    1441              :       // the cast pointer, so no strict-aliasing violation.
+    1442              :       _Tp*
+    1443              :       _M_h() { return reinterpret_cast<_Tp*>(this); }
+    1444              : 
+    1445              :       const _Tp*
+    1446              :       _M_h() const { return reinterpret_cast<const _Tp*>(this); }
+    1447              :     };
+    1448              : 
+    1449              :   template<typename _Key, typename _Value, typename _ExtractKey,
+    1450              :            typename _Hash, typename _RangeHash, typename _Unused>
+    1451              :     using __hash_code_for_local_iter
+    1452              :       = _Hash_code_storage<_Hash_code_base<_Key, _Value, _ExtractKey,
+    1453              :                                            _Hash, _RangeHash, _Unused, false>>;
+    1454              : 
+    1455              :   // Partial specialization used when hash codes are not cached
+    1456              :   template<typename _Key, typename _Value, typename _ExtractKey,
+    1457              :            typename _Hash, typename _RangeHash, typename _Unused>
+    1458              :     struct _Local_iterator_base<_Key, _Value, _ExtractKey,
+    1459              :                                 _Hash, _RangeHash, _Unused, false>
+    1460              :     : __hash_code_for_local_iter<_Key, _Value, _ExtractKey, _Hash, _RangeHash,
+    1461              :                                  _Unused>
+    1462              :     , _Node_iterator_base<_Value, false>
+    1463              :     {
+    1464              :     protected:
+    1465              :       using __hash_code_base = _Hash_code_base<_Key, _Value, _ExtractKey,
+    1466              :                                              _Hash, _RangeHash, _Unused, false>;
+    1467              :       using __node_iter_base = _Node_iterator_base<_Value, false>;
+    1468              : 
+    1469              :       _Local_iterator_base() : _M_bucket_count(-1) { }
+    1470              : 
+    1471              :       _Local_iterator_base(const __hash_code_base& __base,
+    1472              :                            _Hash_node<_Value, false>* __p,
+    1473              :                            std::size_t __bkt, std::size_t __bkt_count)
+    1474              :       : __node_iter_base(__p), _M_bucket(__bkt), _M_bucket_count(__bkt_count)
+    1475              :       { _M_init(__base); }
+    1476              : 
+    1477              :       ~_Local_iterator_base()
+    1478              :       {
+    1479              :         if (_M_bucket_count != size_t(-1))
+    1480              :           _M_destroy();
+    1481              :       }
+    1482              : 
+    1483              :       _Local_iterator_base(const _Local_iterator_base& __iter)
+    1484              :       : __node_iter_base(__iter._M_cur), _M_bucket(__iter._M_bucket)
+    1485              :       , _M_bucket_count(__iter._M_bucket_count)
+    1486              :       {
+    1487              :         if (_M_bucket_count != size_t(-1))
+    1488              :           _M_init(*__iter._M_h());
+    1489              :       }
+    1490              : 
+    1491              :       _Local_iterator_base&
+    1492              :       operator=(const _Local_iterator_base& __iter)
+    1493              :       {
+    1494              :         if (_M_bucket_count != -1)
+    1495              :           _M_destroy();
+    1496              :         this->_M_cur = __iter._M_cur;
+    1497              :         _M_bucket = __iter._M_bucket;
+    1498              :         _M_bucket_count = __iter._M_bucket_count;
+    1499              :         if (_M_bucket_count != -1)
+    1500              :           _M_init(*__iter._M_h());
+    1501              :         return *this;
+    1502              :       }
+    1503              : 
+    1504              :       void
+    1505              :       _M_incr()
+    1506              :       {
+    1507              :         __node_iter_base::_M_incr();
+    1508              :         if (this->_M_cur)
+    1509              :           {
+    1510              :             std::size_t __bkt = this->_M_h()->_M_bucket_index(*this->_M_cur,
+    1511              :                                                               _M_bucket_count);
+    1512              :             if (__bkt != _M_bucket)
+    1513              :               this->_M_cur = nullptr;
+    1514              :           }
+    1515              :       }
+    1516              : 
+    1517              :       std::size_t _M_bucket;
+    1518              :       std::size_t _M_bucket_count;
+    1519              : 
+    1520              :       void
+    1521              :       _M_init(const __hash_code_base& __base)
+    1522              :       { ::new(this->_M_h()) __hash_code_base(__base); }
+    1523              : 
+    1524              :       void
+    1525              :       _M_destroy() { this->_M_h()->~__hash_code_base(); }
+    1526              : 
+    1527              :     public:
+    1528              :       std::size_t
+    1529              :       _M_get_bucket() const { return _M_bucket; }  // for debug mode
+    1530              :     };
+    1531              : 
+    1532              :   /// local iterators
+    1533              :   template<typename _Key, typename _Value, typename _ExtractKey,
+    1534              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1535              :            bool __constant_iterators, bool __cache>
+    1536              :     struct _Local_iterator
+    1537              :     : public _Local_iterator_base<_Key, _Value, _ExtractKey,
+    1538              :                                   _Hash, _RangeHash, _Unused, __cache>
+    1539              :     {
+    1540              :     private:
+    1541              :       using __base_type = _Local_iterator_base<_Key, _Value, _ExtractKey,
+    1542              :                                            _Hash, _RangeHash, _Unused, __cache>;
+    1543              :       using __hash_code_base = typename __base_type::__hash_code_base;
+    1544              : 
+    1545              :     public:
+    1546              :       using value_type = _Value;
+    1547              :       using pointer = __conditional_t<__constant_iterators,
+    1548              :                                       const value_type*, value_type*>;
+    1549              :       using reference = __conditional_t<__constant_iterators,
+    1550              :                                         const value_type&, value_type&>;
+    1551              :       using difference_type = ptrdiff_t;
+    1552              :       using iterator_category = forward_iterator_tag;
+    1553              : 
+    1554              :       _Local_iterator() = default;
+    1555              : 
+    1556              :       _Local_iterator(const __hash_code_base& __base,
+    1557              :                       _Hash_node<_Value, __cache>* __n,
+    1558              :                       std::size_t __bkt, std::size_t __bkt_count)
+    1559              :       : __base_type(__base, __n, __bkt, __bkt_count)
+    1560              :       { }
+    1561              : 
+    1562              :       reference
+    1563              :       operator*() const
+    1564              :       { return this->_M_cur->_M_v(); }
+    1565              : 
+    1566              :       pointer
+    1567              :       operator->() const
+    1568              :       { return this->_M_cur->_M_valptr(); }
+    1569              : 
+    1570              :       _Local_iterator&
+    1571              :       operator++()
+    1572              :       {
+    1573              :         this->_M_incr();
+    1574              :         return *this;
+    1575              :       }
+    1576              : 
+    1577              :       _Local_iterator
+    1578              :       operator++(int)
+    1579              :       {
+    1580              :         _Local_iterator __tmp(*this);
+    1581              :         this->_M_incr();
+    1582              :         return __tmp;
+    1583              :       }
+    1584              :     };
+    1585              : 
+    1586              :   /// local const_iterators
+    1587              :   template<typename _Key, typename _Value, typename _ExtractKey,
+    1588              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1589              :            bool __constant_iterators, bool __cache>
+    1590              :     struct _Local_const_iterator
+    1591              :     : public _Local_iterator_base<_Key, _Value, _ExtractKey,
+    1592              :                                   _Hash, _RangeHash, _Unused, __cache>
+    1593              :     {
+    1594              :     private:
+    1595              :       using __base_type = _Local_iterator_base<_Key, _Value, _ExtractKey,
+    1596              :                                            _Hash, _RangeHash, _Unused, __cache>;
+    1597              :       using __hash_code_base = typename __base_type::__hash_code_base;
+    1598              : 
+    1599              :     public:
+    1600              :       typedef _Value                                    value_type;
+    1601              :       typedef const value_type*                         pointer;
+    1602              :       typedef const value_type&                             reference;
+    1603              :       typedef std::ptrdiff_t                            difference_type;
+    1604              :       typedef std::forward_iterator_tag                 iterator_category;
+    1605              : 
+    1606              :       _Local_const_iterator() = default;
+    1607              : 
+    1608              :       _Local_const_iterator(const __hash_code_base& __base,
+    1609              :                             _Hash_node<_Value, __cache>* __n,
+    1610              :                             std::size_t __bkt, std::size_t __bkt_count)
+    1611              :       : __base_type(__base, __n, __bkt, __bkt_count)
+    1612              :       { }
+    1613              : 
+    1614              :       _Local_const_iterator(const _Local_iterator<_Key, _Value, _ExtractKey,
+    1615              :                                                   _Hash, _RangeHash, _Unused,
+    1616              :                                                   __constant_iterators,
+    1617              :                                                   __cache>& __x)
+    1618              :       : __base_type(__x)
+    1619              :       { }
+    1620              : 
+    1621              :       reference
+    1622              :       operator*() const
+    1623              :       { return this->_M_cur->_M_v(); }
+    1624              : 
+    1625              :       pointer
+    1626              :       operator->() const
+    1627              :       { return this->_M_cur->_M_valptr(); }
+    1628              : 
+    1629              :       _Local_const_iterator&
+    1630              :       operator++()
+    1631              :       {
+    1632              :         this->_M_incr();
+    1633              :         return *this;
+    1634              :       }
+    1635              : 
+    1636              :       _Local_const_iterator
+    1637              :       operator++(int)
+    1638              :       {
+    1639              :         _Local_const_iterator __tmp(*this);
+    1640              :         this->_M_incr();
+    1641              :         return __tmp;
+    1642              :       }
+    1643              :     };
+    1644              : 
+    1645              :   /**
+    1646              :    *  Primary class template _Hashtable_base.
+    1647              :    *
+    1648              :    *  Helper class adding management of _Equal functor to
+    1649              :    *  _Hash_code_base type.
+    1650              :    *
+    1651              :    *  Base class templates are:
+    1652              :    *    - __detail::_Hash_code_base
+    1653              :    *    - __detail::_Hashtable_ebo_helper
+    1654              :    */
+    1655              :   template<typename _Key, typename _Value, typename _ExtractKey,
+    1656              :            typename _Equal, typename _Hash, typename _RangeHash,
+    1657              :            typename _Unused, typename _Traits>
+    1658              :     struct _Hashtable_base
+    1659              :     : public _Hash_code_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash,
+    1660              :                              _Unused, _Traits::__hash_cached::value>,
+    1661              :       private _Hashtable_ebo_helper<0, _Equal>
+    1662              :     {
+    1663              :     public:
+    1664              :       typedef _Key                                      key_type;
+    1665              :       typedef _Value                                    value_type;
+    1666              :       typedef _Equal                                    key_equal;
+    1667              :       typedef std::size_t                               size_type;
+    1668              :       typedef std::ptrdiff_t                            difference_type;
+    1669              : 
+    1670              :       using __traits_type = _Traits;
+    1671              :       using __hash_cached = typename __traits_type::__hash_cached;
+    1672              : 
+    1673              :       using __hash_code_base = _Hash_code_base<_Key, _Value, _ExtractKey,
+    1674              :                                                _Hash, _RangeHash, _Unused,
+    1675              :                                                __hash_cached::value>;
+    1676              : 
+    1677              :       using __hash_code = typename __hash_code_base::__hash_code;
+    1678              : 
+    1679              :     private:
+    1680              :       using _EqualEBO = _Hashtable_ebo_helper<0, _Equal>;
+    1681              : 
+    1682              :       static bool
+    1683      5725604 :       _S_equals(__hash_code, const _Hash_node_code_cache<false>&)
+    1684      5725604 :       { return true; }
+    1685              : 
+    1686              :       static bool
+    1687              :       _S_node_equals(const _Hash_node_code_cache<false>&,
+    1688              :                      const _Hash_node_code_cache<false>&)
+    1689              :       { return true; }
+    1690              : 
+    1691              :       static bool
+    1692         6036 :       _S_equals(__hash_code __c, const _Hash_node_code_cache<true>& __n)
+    1693         6036 :       { return __c == __n._M_hash_code; }
+    1694              : 
+    1695              :       static bool
+    1696              :       _S_node_equals(const _Hash_node_code_cache<true>& __lhn,
+    1697              :                      const _Hash_node_code_cache<true>& __rhn)
+    1698              :       { return __lhn._M_hash_code == __rhn._M_hash_code; }
+    1699              : 
+    1700              :     protected:
+    1701       123656 :       _Hashtable_base() = default;
+    1702              : 
+    1703              :       _Hashtable_base(const _Hash& __hash, const _Equal& __eq)
+    1704              :       : __hash_code_base(__hash), _EqualEBO(__eq)
+    1705              :       { }
+    1706              : 
+    1707              :       bool
+    1708      5789680 :       _M_key_equals(const _Key& __k,
+    1709              :                     const _Hash_node_value<_Value,
+    1710              :                                            __hash_cached::value>& __n) const
+    1711              :       {
+    1712              :         static_assert(__is_invocable<const _Equal&, const _Key&, const _Key&>{},
+    1713              :           "key equality predicate must be invocable with two arguments of "
+    1714              :           "key type");
+    1715     11579360 :         return _M_eq()(__k, _ExtractKey{}(__n._M_v()));
+    1716              :       }
+    1717              : 
+    1718              :       template<typename _Kt>
+    1719              :         bool
+    1720        20142 :         _M_key_equals_tr(const _Kt& __k,
+    1721              :                          const _Hash_node_value<_Value,
+    1722              :                                              __hash_cached::value>& __n) const
+    1723              :         {
+    1724              :           static_assert(
+    1725              :             __is_invocable<const _Equal&, const _Kt&, const _Key&>{},
+    1726              :             "key equality predicate must be invocable with two arguments of "
+    1727              :             "key type");
+    1728        40284 :           return _M_eq()(__k, _ExtractKey{}(__n._M_v()));
+    1729              :         }
+    1730              : 
+    1731              :       bool
+    1732      5729620 :       _M_equals(const _Key& __k, __hash_code __c,
+    1733              :                 const _Hash_node_value<_Value, __hash_cached::value>& __n) const
+    1734      5729620 :       { return _S_equals(__c, __n) && _M_key_equals(__k, __n); }
+    1735              : 
+    1736              :       template<typename _Kt>
+    1737              :         bool
+    1738         2020 :         _M_equals_tr(const _Kt& __k, __hash_code __c,
+    1739              :                      const _Hash_node_value<_Value,
+    1740              :                                             __hash_cached::value>& __n) const
+    1741         2020 :         { return _S_equals(__c, __n) && _M_key_equals_tr(__k, __n); }
+    1742              : 
+    1743              :       bool
+    1744              :       _M_node_equals(
+    1745              :         const _Hash_node_value<_Value, __hash_cached::value>& __lhn,
+    1746              :         const _Hash_node_value<_Value, __hash_cached::value>& __rhn) const
+    1747              :       {
+    1748              :         return _S_node_equals(__lhn, __rhn)
+    1749              :           && _M_key_equals(_ExtractKey{}(__lhn._M_v()), __rhn);
+    1750              :       }
+    1751              : 
+    1752              :       void
+    1753              :       _M_swap(_Hashtable_base& __x)
+    1754              :       {
+    1755              :         __hash_code_base::_M_swap(__x);
+    1756              :         std::swap(_EqualEBO::_M_get(), __x._EqualEBO::_M_get());
+    1757              :       }
+    1758              : 
+    1759              :       const _Equal&
+    1760      5809822 :       _M_eq() const { return _EqualEBO::_M_cget(); }
+    1761              :     };
+    1762              : 
+    1763              :   /**
+    1764              :    *  Primary class template  _Equality.
+    1765              :    *
+    1766              :    *  This is for implementing equality comparison for unordered
+    1767              :    *  containers, per N3068, by John Lakos and Pablo Halpern.
+    1768              :    *  Algorithmically, we follow closely the reference implementations
+    1769              :    *  therein.
+    1770              :    */
+    1771              :   template<typename _Key, typename _Value, typename _Alloc,
+    1772              :            typename _ExtractKey, typename _Equal,
+    1773              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1774              :            typename _RehashPolicy, typename _Traits,
+    1775              :            bool _Unique_keys = _Traits::__unique_keys::value>
+    1776              :     struct _Equality;
+    1777              : 
+    1778              :   /// unordered_map and unordered_set specializations.
+    1779              :   template<typename _Key, typename _Value, typename _Alloc,
+    1780              :            typename _ExtractKey, typename _Equal,
+    1781              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1782              :            typename _RehashPolicy, typename _Traits>
+    1783              :     struct _Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1784              :                      _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true>
+    1785              :     {
+    1786              :       using __hashtable = _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1787              :                                      _Hash, _RangeHash, _Unused,
+    1788              :                                      _RehashPolicy, _Traits>;
+    1789              : 
+    1790              :       bool
+    1791              :       _M_equal(const __hashtable&) const;
+    1792              :     };
+    1793              : 
+    1794              :   template<typename _Key, typename _Value, typename _Alloc,
+    1795              :            typename _ExtractKey, typename _Equal,
+    1796              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1797              :            typename _RehashPolicy, typename _Traits>
+    1798              :     bool
+    1799              :     _Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1800              :               _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, true>::
+    1801              :     _M_equal(const __hashtable& __other) const
+    1802              :     {
+    1803              :       using __node_type = typename __hashtable::__node_type;
+    1804              :       const __hashtable* __this = static_cast<const __hashtable*>(this);
+    1805              :       if (__this->size() != __other.size())
+    1806              :         return false;
+    1807              : 
+    1808              :       for (auto __itx = __this->begin(); __itx != __this->end(); ++__itx)
+    1809              :         {
+    1810              :           std::size_t __ybkt = __other._M_bucket_index(*__itx._M_cur);
+    1811              :           auto __prev_n = __other._M_buckets[__ybkt];
+    1812              :           if (!__prev_n)
+    1813              :             return false;
+    1814              : 
+    1815              :           for (__node_type* __n = static_cast<__node_type*>(__prev_n->_M_nxt);;
+    1816              :                __n = __n->_M_next())
+    1817              :             {
+    1818              :               if (__n->_M_v() == *__itx)
+    1819              :                 break;
+    1820              : 
+    1821              :               if (!__n->_M_nxt
+    1822              :                   || __other._M_bucket_index(*__n->_M_next()) != __ybkt)
+    1823              :                 return false;
+    1824              :             }
+    1825              :         }
+    1826              : 
+    1827              :       return true;
+    1828              :     }
+    1829              : 
+    1830              :   /// unordered_multiset and unordered_multimap specializations.
+    1831              :   template<typename _Key, typename _Value, typename _Alloc,
+    1832              :            typename _ExtractKey, typename _Equal,
+    1833              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1834              :            typename _RehashPolicy, typename _Traits>
+    1835              :     struct _Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1836              :                      _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, false>
+    1837              :     {
+    1838              :       using __hashtable = _Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1839              :                                      _Hash, _RangeHash, _Unused,
+    1840              :                                      _RehashPolicy, _Traits>;
+    1841              : 
+    1842              :       bool
+    1843              :       _M_equal(const __hashtable&) const;
+    1844              :     };
+    1845              : 
+    1846              :   template<typename _Key, typename _Value, typename _Alloc,
+    1847              :            typename _ExtractKey, typename _Equal,
+    1848              :            typename _Hash, typename _RangeHash, typename _Unused,
+    1849              :            typename _RehashPolicy, typename _Traits>
+    1850              :     bool
+    1851              :     _Equality<_Key, _Value, _Alloc, _ExtractKey, _Equal,
+    1852              :               _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits, false>::
+    1853              :     _M_equal(const __hashtable& __other) const
+    1854              :     {
+    1855              :       using __node_type = typename __hashtable::__node_type;
+    1856              :       const __hashtable* __this = static_cast<const __hashtable*>(this);
+    1857              :       if (__this->size() != __other.size())
+    1858              :         return false;
+    1859              : 
+    1860              :       for (auto __itx = __this->begin(); __itx != __this->end();)
+    1861              :         {
+    1862              :           std::size_t __x_count = 1;
+    1863              :           auto __itx_end = __itx;
+    1864              :           for (++__itx_end; __itx_end != __this->end()
+    1865              :                  && __this->key_eq()(_ExtractKey{}(*__itx),
+    1866              :                                      _ExtractKey{}(*__itx_end));
+    1867              :                ++__itx_end)
+    1868              :             ++__x_count;
+    1869              : 
+    1870              :           std::size_t __ybkt = __other._M_bucket_index(*__itx._M_cur);
+    1871              :           auto __y_prev_n = __other._M_buckets[__ybkt];
+    1872              :           if (!__y_prev_n)
+    1873              :             return false;
+    1874              : 
+    1875              :           __node_type* __y_n = static_cast<__node_type*>(__y_prev_n->_M_nxt);
+    1876              :           for (;;)
+    1877              :             {
+    1878              :               if (__this->key_eq()(_ExtractKey{}(__y_n->_M_v()),
+    1879              :                                    _ExtractKey{}(*__itx)))
+    1880              :                 break;
+    1881              : 
+    1882              :               auto __y_ref_n = __y_n;
+    1883              :               for (__y_n = __y_n->_M_next(); __y_n; __y_n = __y_n->_M_next())
+    1884              :                 if (!__other._M_node_equals(*__y_ref_n, *__y_n))
+    1885              :                   break;
+    1886              : 
+    1887              :               if (!__y_n || __other._M_bucket_index(*__y_n) != __ybkt)
+    1888              :                 return false;
+    1889              :             }
+    1890              : 
+    1891              :           typename __hashtable::const_iterator __ity(__y_n);
+    1892              :           for (auto __ity_end = __ity; __ity_end != __other.end(); ++__ity_end)
+    1893              :             if (--__x_count == 0)
+    1894              :               break;
+    1895              : 
+    1896              :           if (__x_count != 0)
+    1897              :             return false;
+    1898              : 
+    1899              :           if (!std::is_permutation(__itx, __itx_end, __ity))
+    1900              :             return false;
+    1901              : 
+    1902              :           __itx = __itx_end;
+    1903              :         }
+    1904              :       return true;
+    1905              :     }
+    1906              : 
+    1907              :   /**
+    1908              :    * This type deals with all allocation and keeps an allocator instance
+    1909              :    * through inheritance to benefit from EBO when possible.
+    1910              :    */
+    1911              :   template<typename _NodeAlloc>
+    1912              :     struct _Hashtable_alloc : private _Hashtable_ebo_helper<0, _NodeAlloc>
+    1913              :     {
+    1914              :     private:
+    1915              :       using __ebo_node_alloc = _Hashtable_ebo_helper<0, _NodeAlloc>;
+    1916              : 
+    1917              :       template<typename>
+    1918              :         struct __get_value_type;
+    1919              :       template<typename _Val, bool _Cache_hash_code>
+    1920              :         struct __get_value_type<_Hash_node<_Val, _Cache_hash_code>>
+    1921              :         { using type = _Val; };
+    1922              : 
+    1923              :     public:
+    1924              :       using __node_type = typename _NodeAlloc::value_type;
+    1925              :       using __node_alloc_type = _NodeAlloc;
+    1926              :       // Use __gnu_cxx to benefit from _S_always_equal and al.
+    1927              :       using __node_alloc_traits = __gnu_cxx::__alloc_traits<__node_alloc_type>;
+    1928              : 
+    1929              :       using __value_alloc_traits = typename __node_alloc_traits::template
+    1930              :         rebind_traits<typename __get_value_type<__node_type>::type>;
+    1931              : 
+    1932              :       using __node_ptr = __node_type*;
+    1933              :       using __node_base = _Hash_node_base;
+    1934              :       using __node_base_ptr = __node_base*;
+    1935              :       using __buckets_alloc_type =
+    1936              :         __alloc_rebind<__node_alloc_type, __node_base_ptr>;
+    1937              :       using __buckets_alloc_traits = std::allocator_traits<__buckets_alloc_type>;
+    1938              :       using __buckets_ptr = __node_base_ptr*;
+    1939              : 
+    1940       123656 :       _Hashtable_alloc() = default;
+    1941              :       _Hashtable_alloc(const _Hashtable_alloc&) = default;
+    1942              :       _Hashtable_alloc(_Hashtable_alloc&&) = default;
+    1943              : 
+    1944              :       template<typename _Alloc>
+    1945              :         _Hashtable_alloc(_Alloc&& __a)
+    1946              :         : __ebo_node_alloc(std::forward<_Alloc>(__a))
+    1947              :         { }
+    1948              : 
+    1949              :       __node_alloc_type&
+    1950      1273690 :       _M_node_allocator()
+    1951      1273690 :       { return __ebo_node_alloc::_M_get(); }
+    1952              : 
+    1953              :       const __node_alloc_type&
+    1954              :       _M_node_allocator() const
+    1955              :       { return __ebo_node_alloc::_M_cget(); }
+    1956              : 
+    1957              :       // Allocate a node and construct an element within it.
+    1958              :       template<typename... _Args>
+    1959              :         __node_ptr
+    1960              :         _M_allocate_node(_Args&&... __args);
+    1961              : 
+    1962              :       // Destroy the element within a node and deallocate the node.
+    1963              :       void
+    1964              :       _M_deallocate_node(__node_ptr __n);
+    1965              : 
+    1966              :       // Deallocate a node.
+    1967              :       void
+    1968              :       _M_deallocate_node_ptr(__node_ptr __n);
+    1969              : 
+    1970              :       // Deallocate the linked list of nodes pointed to by __n.
+    1971              :       // The elements within the nodes are destroyed.
+    1972              :       void
+    1973              :       _M_deallocate_nodes(__node_ptr __n);
+    1974              : 
+    1975              :       __buckets_ptr
+    1976              :       _M_allocate_buckets(std::size_t __bkt_count);
+    1977              : 
+    1978              :       void
+    1979              :       _M_deallocate_buckets(__buckets_ptr, std::size_t __bkt_count);
+    1980              :     };
+    1981              : 
+    1982              :   // Definitions of class template _Hashtable_alloc's out-of-line member
+    1983              :   // functions.
+    1984              :   template<typename _NodeAlloc>
+    1985              :     template<typename... _Args>
+    1986              :       auto
+    1987       260158 :       _Hashtable_alloc<_NodeAlloc>::_M_allocate_node(_Args&&... __args)
+    1988              :       -> __node_ptr
+    1989              :       {
+    1990       260158 :         auto __nptr = __node_alloc_traits::allocate(_M_node_allocator(), 1);
+    1991       260158 :         __node_ptr __n = std::__to_address(__nptr);
+    1992              :         __try
+    1993              :           {
+    1994       260158 :             ::new ((void*)__n) __node_type;
+    1995       520316 :             __node_alloc_traits::construct(_M_node_allocator(),
+    1996              :                                            __n->_M_valptr(),
+    1997              :                                            std::forward<_Args>(__args)...);
+    1998       260158 :             return __n;
+    1999              :           }
+    2000            0 :         __catch(...)
+    2001              :           {
+    2002            0 :             __node_alloc_traits::deallocate(_M_node_allocator(), __nptr, 1);
+    2003            0 :             __throw_exception_again;
+    2004              :           }
+    2005              :       }
+    2006              : 
+    2007              :   template<typename _NodeAlloc>
+    2008              :     void
+    2009       260060 :     _Hashtable_alloc<_NodeAlloc>::_M_deallocate_node(__node_ptr __n)
+    2010              :     {
+    2011       520120 :       __node_alloc_traits::destroy(_M_node_allocator(), __n->_M_valptr());
+    2012       260060 :       _M_deallocate_node_ptr(__n);
+    2013       260060 :     }
+    2014              : 
+    2015              :   template<typename _NodeAlloc>
+    2016              :     void
+    2017       260060 :     _Hashtable_alloc<_NodeAlloc>::_M_deallocate_node_ptr(__node_ptr __n)
+    2018              :     {
+    2019              :       typedef typename __node_alloc_traits::pointer _Ptr;
+    2020       260060 :       auto __ptr = std::pointer_traits<_Ptr>::pointer_to(*__n);
+    2021       260060 :       __n->~__node_type();
+    2022       260060 :       __node_alloc_traits::deallocate(_M_node_allocator(), __ptr, 1);
+    2023       260060 :     }
+    2024              : 
+    2025              :   template<typename _NodeAlloc>
+    2026              :     void
+    2027       123656 :     _Hashtable_alloc<_NodeAlloc>::_M_deallocate_nodes(__node_ptr __n)
+    2028              :     {
+    2029       353196 :       while (__n)
+    2030              :         {
+    2031       229540 :           __node_ptr __tmp = __n;
+    2032       229540 :           __n = __n->_M_next();
+    2033       229540 :           _M_deallocate_node(__tmp);
+    2034              :         }
+    2035       123656 :     }
+    2036              : 
+    2037              :   template<typename _NodeAlloc>
+    2038              :     auto
+    2039       116628 :     _Hashtable_alloc<_NodeAlloc>::_M_allocate_buckets(std::size_t __bkt_count)
+    2040              :     -> __buckets_ptr
+    2041              :     {
+    2042       116628 :       __buckets_alloc_type __alloc(_M_node_allocator());
+    2043              : 
+    2044       116628 :       auto __ptr = __buckets_alloc_traits::allocate(__alloc, __bkt_count);
+    2045       116628 :       __buckets_ptr __p = std::__to_address(__ptr);
+    2046       116628 :       __builtin_memset(__p, 0, __bkt_count * sizeof(__node_base_ptr));
+    2047       233256 :       return __p;
+    2048              :     }
+    2049              : 
+    2050              :   template<typename _NodeAlloc>
+    2051              :     void
+    2052       116626 :     _Hashtable_alloc<_NodeAlloc>::
+    2053              :     _M_deallocate_buckets(__buckets_ptr __bkts,
+    2054              :                           std::size_t __bkt_count)
+    2055              :     {
+    2056              :       typedef typename __buckets_alloc_traits::pointer _Ptr;
+    2057       116626 :       auto __ptr = std::pointer_traits<_Ptr>::pointer_to(*__bkts);
+    2058       116626 :       __buckets_alloc_type __alloc(_M_node_allocator());
+    2059              :       __buckets_alloc_traits::deallocate(__alloc, __ptr, __bkt_count);
+    2060       116626 :     }
+    2061              : 
+    2062              :  ///@} hashtable-detail
+    2063              : } // namespace __detail
+    2064              : /// @endcond
+    2065              : _GLIBCXX_END_NAMESPACE_VERSION
+    2066              : } // namespace std
+    2067              : 
+    2068              : #endif // _HASHTABLE_POLICY_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/index-sort-f.html b/html/usr/include/c++/13/bits/index-sort-f.html new file mode 100644 index 0000000..f50dba3 --- /dev/null +++ b/html/usr/include/c++/13/bits/index-sort-f.html @@ -0,0 +1,933 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bitsCoverageTotalHit
Test:coverage.infoLines:50.5 %52022628
Test Date:2024-04-30 13:17:26Functions:63.1 %62383938
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
exception.h +
0.0%
+
0.0 %10.0 %1
this_thread_sleep.h +
0.0%
+
0.0 %90.0 %1
locale_classes.tcc +
0.0%
+
0.0 %100.0 %2
regex_error.h +
0.0%
+
0.0 %50.0 %2
regex_automaton.tcc +
0.0%
+
0.0 %490.0 %3
locale_facets.h +
0.0%
+
0.0 %180.0 %5
regex_constants.h +
0.0%
+
0.0 %140.0 %7
regex_scanner.h +
0.0%
+
0.0 %350.0 %7
deque.tcc +
0.0%
+
0.0 %490.0 %8
ios_base.h +
0.0%
+
0.0 %210.0 %8
regex_scanner.tcc +
0.0%
+
0.0 %2230.0 %9
regex.tcc +
0.0%
+
0.0 %1930.0 %11
stl_stack.h +
0.0%
+
0.0 %130.0 %11
regex_executor.h +
0.0%
+
0.0 %700.0 %25
regex_automaton.h +
0.0%
+
0.0 %1170.0 %32
stl_heap.h +
0.0%
+
0.0 %480.0 %35
regex_executor.tcc +
0.0%
+
0.0 %2370.0 %37
regex_compiler.tcc +
0.0%
+
0.0 %3040.0 %52
regex.h +
0.0%
+
0.0 %1370.0 %53
stl_deque.h +
0.0%
+
0.0 %1370.0 %72
regex_compiler.h +
0.0%
+
0.0 %1280.0 %94
std_function.h +
0.0%
+
0.0 %1020.0 %233
alloc_traits.h +
92.9%92.9%
+
92.9 %1413-
allocator.h +
80.0%80.0%
+
80.0 %54-
range_access.h +
100.0%
+
100.0 %22-
stl_iterator_base_types.h +
100.0%
+
100.0 %11-
invoke.h +
62.5%62.5%
+
62.5 %8522.7 %4410
char_traits.h +
23.8%23.8%
+
23.8 %421033.3 %93
shared_ptr_base.h +
62.8%62.8%
+
62.8 %1378641.5 %8234
chrono.h +
55.2%55.2%
+
55.2 %291642.3 %2611
shared_ptr.h +
55.6%55.6%
+
55.6 %181042.9 %219
stl_iterator_base_funcs.h +
84.0%84.0%
+
84.0 %252150.0 %105
cpp_type_traits.h +
100.0%
+
100.0 %2257.9 %3822
stl_algobase.h +
73.1%73.1%
+
73.1 %21615859.3 %435258
allocated_ptr.h +
100.0%
+
100.0 %131361.5 %138
move.h +
100.0%
+
100.0 %131361.7 %470290
stl_algo.h +
52.1%52.1%
+
52.1 %40321062.2 %14892
stl_iterator.h +
90.9%90.9%
+
90.9 %777062.8 %430270
unique_ptr.h +
98.7%98.7%
+
98.7 %767563.6 %332211
charconv.h +
88.5%88.5%
+
88.5 %262366.7 %64
basic_string.tcc +
100.0%
+
100.0 %121266.7 %96
stl_vector.h +
90.3%90.3%
+
90.3 %24822466.7 %1031688
vector.tcc +
64.4%64.4%
+
64.4 %23315069.5 %9566
stl_construct.h +
100.0%
+
100.0 %141469.5 %13191
stl_uninitialized.h +
88.5%88.5%
+
88.5 %786970.0 %277194
predefined_ops.h +
72.9%72.9%
+
72.9 %594371.3 %10172
atomic_base.h +
81.0%81.0%
+
81.0 %211771.4 %75
new_allocator.h +
80.0%80.0%
+
80.0 %151273.0 %196143
std_mutex.h +
78.6%78.6%
+
78.6 %141175.0 %86
basic_string.h +
74.8%74.8%
+
74.8 %1078080.0 %3024
std_thread.h +
93.1%93.1%
+
93.1 %292783.7 %4336
stl_tree.h +
91.7%91.7%
+
91.7 %45842085.8 %846726
uniform_int_dist.h +
75.6%75.6%
+
75.6 %413187.5 %87
stl_pair.h +
71.4%71.4%
+
71.4 %423088.8 %179159
ptr_traits.h +
100.0%
+
100.0 %4490.0 %109
stl_map.h +
96.2%96.2%
+
96.2 %797690.6 %139126
stl_function.h +
100.0%
+
100.0 %151596.7 %6058
hashtable_policy.h +
95.3%95.3%
+
95.3 %14914299.1 %115114
list.tcc +
44.4%44.4%
+
44.4 %94100.0 %11
std_abs.h +
100.0%
+
100.0 %22100.0 %11
functional_hash.h +
100.0%
+
100.0 %33100.0 %22
stl_numeric.h +
100.0%
+
100.0 %99100.0 %22
random.tcc +
100.0%
+
100.0 %4040100.0 %33
unordered_map.h +
100.0%
+
100.0 %99100.0 %77
unordered_set.h +
100.0%
+
100.0 %1313100.0 %77
random.h +
100.0%
+
100.0 %1515100.0 %99
stl_tempbuf.h +
85.7%85.7%
+
85.7 %4942100.0 %99
stl_list.h +
100.0%
+
100.0 %6969100.0 %2929
stl_bvector.h +
95.5%95.5%
+
95.5 %111106100.0 %3535
hashtable.h +
90.8%90.8%
+
90.8 %228207100.0 %7676
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/index-sort-l.html b/html/usr/include/c++/13/bits/index-sort-l.html new file mode 100644 index 0000000..d6beee8 --- /dev/null +++ b/html/usr/include/c++/13/bits/index-sort-l.html @@ -0,0 +1,933 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bitsCoverageTotalHit
Test:coverage.infoLines:50.5 %52022628
Test Date:2024-04-30 13:17:26Functions:63.1 %62383938
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
exception.h +
0.0%
+
0.0 %10.0 %1
regex_error.h +
0.0%
+
0.0 %50.0 %2
this_thread_sleep.h +
0.0%
+
0.0 %90.0 %1
locale_classes.tcc +
0.0%
+
0.0 %100.0 %2
stl_stack.h +
0.0%
+
0.0 %130.0 %11
regex_constants.h +
0.0%
+
0.0 %140.0 %7
locale_facets.h +
0.0%
+
0.0 %180.0 %5
ios_base.h +
0.0%
+
0.0 %210.0 %8
regex_scanner.h +
0.0%
+
0.0 %350.0 %7
stl_heap.h +
0.0%
+
0.0 %480.0 %35
deque.tcc +
0.0%
+
0.0 %490.0 %8
regex_automaton.tcc +
0.0%
+
0.0 %490.0 %3
regex_executor.h +
0.0%
+
0.0 %700.0 %25
std_function.h +
0.0%
+
0.0 %1020.0 %233
regex_automaton.h +
0.0%
+
0.0 %1170.0 %32
regex_compiler.h +
0.0%
+
0.0 %1280.0 %94
regex.h +
0.0%
+
0.0 %1370.0 %53
stl_deque.h +
0.0%
+
0.0 %1370.0 %72
regex.tcc +
0.0%
+
0.0 %1930.0 %11
regex_scanner.tcc +
0.0%
+
0.0 %2230.0 %9
regex_executor.tcc +
0.0%
+
0.0 %2370.0 %37
regex_compiler.tcc +
0.0%
+
0.0 %3040.0 %52
char_traits.h +
23.8%23.8%
+
23.8 %421033.3 %93
list.tcc +
44.4%44.4%
+
44.4 %94100.0 %11
stl_algo.h +
52.1%52.1%
+
52.1 %40321062.2 %14892
chrono.h +
55.2%55.2%
+
55.2 %291642.3 %2611
shared_ptr.h +
55.6%55.6%
+
55.6 %181042.9 %219
invoke.h +
62.5%62.5%
+
62.5 %8522.7 %4410
shared_ptr_base.h +
62.8%62.8%
+
62.8 %1378641.5 %8234
vector.tcc +
64.4%64.4%
+
64.4 %23315069.5 %9566
stl_pair.h +
71.4%71.4%
+
71.4 %423088.8 %179159
predefined_ops.h +
72.9%72.9%
+
72.9 %594371.3 %10172
stl_algobase.h +
73.1%73.1%
+
73.1 %21615859.3 %435258
basic_string.h +
74.8%74.8%
+
74.8 %1078080.0 %3024
uniform_int_dist.h +
75.6%75.6%
+
75.6 %413187.5 %87
std_mutex.h +
78.6%78.6%
+
78.6 %141175.0 %86
allocator.h +
80.0%80.0%
+
80.0 %54-
new_allocator.h +
80.0%80.0%
+
80.0 %151273.0 %196143
atomic_base.h +
81.0%81.0%
+
81.0 %211771.4 %75
stl_iterator_base_funcs.h +
84.0%84.0%
+
84.0 %252150.0 %105
stl_tempbuf.h +
85.7%85.7%
+
85.7 %4942100.0 %99
charconv.h +
88.5%88.5%
+
88.5 %262366.7 %64
stl_uninitialized.h +
88.5%88.5%
+
88.5 %786970.0 %277194
stl_vector.h +
90.3%90.3%
+
90.3 %24822466.7 %1031688
hashtable.h +
90.8%90.8%
+
90.8 %228207100.0 %7676
stl_iterator.h +
90.9%90.9%
+
90.9 %777062.8 %430270
stl_tree.h +
91.7%91.7%
+
91.7 %45842085.8 %846726
alloc_traits.h +
92.9%92.9%
+
92.9 %1413-
std_thread.h +
93.1%93.1%
+
93.1 %292783.7 %4336
hashtable_policy.h +
95.3%95.3%
+
95.3 %14914299.1 %115114
stl_bvector.h +
95.5%95.5%
+
95.5 %111106100.0 %3535
stl_map.h +
96.2%96.2%
+
96.2 %797690.6 %139126
unique_ptr.h +
98.7%98.7%
+
98.7 %767563.6 %332211
stl_iterator_base_types.h +
100.0%
+
100.0 %11-
cpp_type_traits.h +
100.0%
+
100.0 %2257.9 %3822
range_access.h +
100.0%
+
100.0 %22-
std_abs.h +
100.0%
+
100.0 %22100.0 %11
functional_hash.h +
100.0%
+
100.0 %33100.0 %22
ptr_traits.h +
100.0%
+
100.0 %4490.0 %109
stl_numeric.h +
100.0%
+
100.0 %99100.0 %22
unordered_map.h +
100.0%
+
100.0 %99100.0 %77
basic_string.tcc +
100.0%
+
100.0 %121266.7 %96
allocated_ptr.h +
100.0%
+
100.0 %131361.5 %138
move.h +
100.0%
+
100.0 %131361.7 %470290
unordered_set.h +
100.0%
+
100.0 %1313100.0 %77
stl_construct.h +
100.0%
+
100.0 %141469.5 %13191
random.h +
100.0%
+
100.0 %1515100.0 %99
stl_function.h +
100.0%
+
100.0 %151596.7 %6058
random.tcc +
100.0%
+
100.0 %4040100.0 %33
stl_list.h +
100.0%
+
100.0 %6969100.0 %2929
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/index.html b/html/usr/include/c++/13/bits/index.html new file mode 100644 index 0000000..8059411 --- /dev/null +++ b/html/usr/include/c++/13/bits/index.html @@ -0,0 +1,933 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bitsCoverageTotalHit
Test:coverage.infoLines:50.5 %52022628
Test Date:2024-04-30 13:17:26Functions:63.1 %62383938
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
alloc_traits.h +
92.9%92.9%
+
92.9 %1413-
allocated_ptr.h +
100.0%
+
100.0 %131361.5 %138
allocator.h +
80.0%80.0%
+
80.0 %54-
atomic_base.h +
81.0%81.0%
+
81.0 %211771.4 %75
basic_string.h +
74.8%74.8%
+
74.8 %1078080.0 %3024
basic_string.tcc +
100.0%
+
100.0 %121266.7 %96
char_traits.h +
23.8%23.8%
+
23.8 %421033.3 %93
charconv.h +
88.5%88.5%
+
88.5 %262366.7 %64
chrono.h +
55.2%55.2%
+
55.2 %291642.3 %2611
cpp_type_traits.h +
100.0%
+
100.0 %2257.9 %3822
deque.tcc +
0.0%
+
0.0 %490.0 %8
exception.h +
0.0%
+
0.0 %10.0 %1
functional_hash.h +
100.0%
+
100.0 %33100.0 %22
hashtable.h +
90.8%90.8%
+
90.8 %228207100.0 %7676
hashtable_policy.h +
95.3%95.3%
+
95.3 %14914299.1 %115114
invoke.h +
62.5%62.5%
+
62.5 %8522.7 %4410
ios_base.h +
0.0%
+
0.0 %210.0 %8
list.tcc +
44.4%44.4%
+
44.4 %94100.0 %11
locale_classes.tcc +
0.0%
+
0.0 %100.0 %2
locale_facets.h +
0.0%
+
0.0 %180.0 %5
move.h +
100.0%
+
100.0 %131361.7 %470290
new_allocator.h +
80.0%80.0%
+
80.0 %151273.0 %196143
predefined_ops.h +
72.9%72.9%
+
72.9 %594371.3 %10172
ptr_traits.h +
100.0%
+
100.0 %4490.0 %109
random.h +
100.0%
+
100.0 %1515100.0 %99
random.tcc +
100.0%
+
100.0 %4040100.0 %33
range_access.h +
100.0%
+
100.0 %22-
regex.h +
0.0%
+
0.0 %1370.0 %53
regex.tcc +
0.0%
+
0.0 %1930.0 %11
regex_automaton.h +
0.0%
+
0.0 %1170.0 %32
regex_automaton.tcc +
0.0%
+
0.0 %490.0 %3
regex_compiler.h +
0.0%
+
0.0 %1280.0 %94
regex_compiler.tcc +
0.0%
+
0.0 %3040.0 %52
regex_constants.h +
0.0%
+
0.0 %140.0 %7
regex_error.h +
0.0%
+
0.0 %50.0 %2
regex_executor.h +
0.0%
+
0.0 %700.0 %25
regex_executor.tcc +
0.0%
+
0.0 %2370.0 %37
regex_scanner.h +
0.0%
+
0.0 %350.0 %7
regex_scanner.tcc +
0.0%
+
0.0 %2230.0 %9
shared_ptr.h +
55.6%55.6%
+
55.6 %181042.9 %219
shared_ptr_base.h +
62.8%62.8%
+
62.8 %1378641.5 %8234
std_abs.h +
100.0%
+
100.0 %22100.0 %11
std_function.h +
0.0%
+
0.0 %1020.0 %233
std_mutex.h +
78.6%78.6%
+
78.6 %141175.0 %86
std_thread.h +
93.1%93.1%
+
93.1 %292783.7 %4336
stl_algo.h +
52.1%52.1%
+
52.1 %40321062.2 %14892
stl_algobase.h +
73.1%73.1%
+
73.1 %21615859.3 %435258
stl_bvector.h +
95.5%95.5%
+
95.5 %111106100.0 %3535
stl_construct.h +
100.0%
+
100.0 %141469.5 %13191
stl_deque.h +
0.0%
+
0.0 %1370.0 %72
stl_function.h +
100.0%
+
100.0 %151596.7 %6058
stl_heap.h +
0.0%
+
0.0 %480.0 %35
stl_iterator.h +
90.9%90.9%
+
90.9 %777062.8 %430270
stl_iterator_base_funcs.h +
84.0%84.0%
+
84.0 %252150.0 %105
stl_iterator_base_types.h +
100.0%
+
100.0 %11-
stl_list.h +
100.0%
+
100.0 %6969100.0 %2929
stl_map.h +
96.2%96.2%
+
96.2 %797690.6 %139126
stl_numeric.h +
100.0%
+
100.0 %99100.0 %22
stl_pair.h +
71.4%71.4%
+
71.4 %423088.8 %179159
stl_stack.h +
0.0%
+
0.0 %130.0 %11
stl_tempbuf.h +
85.7%85.7%
+
85.7 %4942100.0 %99
stl_tree.h +
91.7%91.7%
+
91.7 %45842085.8 %846726
stl_uninitialized.h +
88.5%88.5%
+
88.5 %786970.0 %277194
stl_vector.h +
90.3%90.3%
+
90.3 %24822466.7 %1031688
this_thread_sleep.h +
0.0%
+
0.0 %90.0 %1
uniform_int_dist.h +
75.6%75.6%
+
75.6 %413187.5 %87
unique_ptr.h +
98.7%98.7%
+
98.7 %767563.6 %332211
unordered_map.h +
100.0%
+
100.0 %99100.0 %77
unordered_set.h +
100.0%
+
100.0 %1313100.0 %77
vector.tcc +
64.4%64.4%
+
64.4 %23315069.5 %9566
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/invoke.h.func-c.html b/html/usr/include/c++/13/bits/invoke.h.func-c.html new file mode 100644 index 0000000..5cb8c2b --- /dev/null +++ b/html/usr/include/c++/13/bits/invoke.h.func-c.html @@ -0,0 +1,404 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/invoke.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - invoke.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:62.5 %85
Test Date:2024-04-30 13:17:26Functions:22.7 %4410
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt10__invoke_rIbRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt13__invoke_implIvZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_JEET_St14__invoke_otherOT0_DpOT1_1605734
_ZSt13__invoke_implIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIvZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_JEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIvZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_JEET_St14__invoke_otherOT0_DpOT1_122
_ZSt13__invoke_implIvZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_JEET_St14__invoke_otherOT0_DpOT1_536
_ZSt13__invoke_implIvZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_JEET_St14__invoke_otherOT0_DpOT1_734
_ZSt13__invoke_implIvZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_JEET_St14__invoke_otherOT0_DpOT1_14194
_ZSt13__invoke_implIvZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_JEET_St14__invoke_otherOT0_DpOT1_1590148
_ZSt8__invokeIZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_JEENSt15__invoke_resultIT_JDpT0_EE4typeEOS5_DpOS6_1605734
_ZSt8__invokeIZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_JEENSt15__invoke_resultIT_JDpT0_EE4typeEOS5_DpOS6_0
_ZSt8__invokeIZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_JEENSt15__invoke_resultIT_JDpT0_EE4typeEOSA_DpOSB_122
_ZSt8__invokeIZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_JEENSt15__invoke_resultIT_JDpT0_EE4typeEOS7_DpOS8_536
_ZSt8__invokeIZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_JEENSt15__invoke_resultIT_JDpT0_EE4typeEOS7_DpOS8_734
_ZSt8__invokeIZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_JEENSt15__invoke_resultIT_JDpT0_EE4typeEOSR_DpOSS_14194
_ZSt8__invokeIZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_JEENSt15__invoke_resultIT_JDpT0_EE4typeEOSJ_DpOSK_1590148
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/invoke.h.func.html b/html/usr/include/c++/13/bits/invoke.h.func.html new file mode 100644 index 0000000..7563501 --- /dev/null +++ b/html/usr/include/c++/13/bits/invoke.h.func.html @@ -0,0 +1,404 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/invoke.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - invoke.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:62.5 %85
Test Date:2024-04-30 13:17:26Functions:22.7 %4410
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt10__invoke_rIbRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt10__invoke_rIbRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEJcEENSt9enable_ifIX16is_invocable_r_vIT_T0_DpT1_EES8_E4typeEOS9_DpOSA_0
_ZSt13__invoke_implIvZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_JEET_St14__invoke_otherOT0_DpOT1_1605734
_ZSt13__invoke_implIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIbRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEJcEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIvZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_JEET_St14__invoke_otherOT0_DpOT1_0
_ZSt13__invoke_implIvZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_JEET_St14__invoke_otherOT0_DpOT1_14194
_ZSt13__invoke_implIvZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_JEET_St14__invoke_otherOT0_DpOT1_1590148
_ZSt13__invoke_implIvZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_JEET_St14__invoke_otherOT0_DpOT1_734
_ZSt13__invoke_implIvZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_JEET_St14__invoke_otherOT0_DpOT1_122
_ZSt13__invoke_implIvZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_JEET_St14__invoke_otherOT0_DpOT1_536
_ZSt8__invokeIZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_JEENSt15__invoke_resultIT_JDpT0_EE4typeEOS5_DpOS6_1605734
_ZSt8__invokeIZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_JEENSt15__invoke_resultIT_JDpT0_EE4typeEOS5_DpOS6_0
_ZSt8__invokeIZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_JEENSt15__invoke_resultIT_JDpT0_EE4typeEOSR_DpOSS_14194
_ZSt8__invokeIZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_JEENSt15__invoke_resultIT_JDpT0_EE4typeEOSJ_DpOSK_1590148
_ZSt8__invokeIZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_JEENSt15__invoke_resultIT_JDpT0_EE4typeEOS7_DpOS8_734
_ZSt8__invokeIZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_JEENSt15__invoke_resultIT_JDpT0_EE4typeEOSA_DpOSB_122
_ZSt8__invokeIZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_JEENSt15__invoke_resultIT_JDpT0_EE4typeEOS7_DpOS8_536
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/invoke.h.gcov.html b/html/usr/include/c++/13/bits/invoke.h.gcov.html new file mode 100644 index 0000000..64763a0 --- /dev/null +++ b/html/usr/include/c++/13/bits/invoke.h.gcov.html @@ -0,0 +1,236 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/invoke.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - invoke.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:62.5 %85
Test Date:2024-04-30 13:17:26Functions:22.7 %4410
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Implementation of INVOKE -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2016-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file include/bits/invoke.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{functional}
+      28              :  */
+      29              : 
+      30              : #ifndef _GLIBCXX_INVOKE_H
+      31              : #define _GLIBCXX_INVOKE_H 1
+      32              : 
+      33              : #pragma GCC system_header
+      34              : 
+      35              : #if __cplusplus < 201103L
+      36              : # include <bits/c++0x_warning.h>
+      37              : #else
+      38              : 
+      39              : #include <type_traits>
+      40              : #include <bits/move.h> // forward
+      41              : 
+      42              : namespace std _GLIBCXX_VISIBILITY(default)
+      43              : {
+      44              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      45              : 
+      46              :   /**
+      47              :    *  @addtogroup utilities
+      48              :    *  @{
+      49              :    */
+      50              : 
+      51              :   // Used by __invoke_impl instead of std::forward<_Tp> so that a
+      52              :   // reference_wrapper is converted to an lvalue-reference.
+      53              :   template<typename _Tp, typename _Up = typename __inv_unwrap<_Tp>::type>
+      54              :     constexpr _Up&&
+      55              :     __invfwd(typename remove_reference<_Tp>::type& __t) noexcept
+      56              :     { return static_cast<_Up&&>(__t); }
+      57              : 
+      58              :   template<typename _Res, typename _Fn, typename... _Args>
+      59              :     constexpr _Res
+      60      1605734 :     __invoke_impl(__invoke_other, _Fn&& __f, _Args&&... __args)
+      61      1605734 :     { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); }
+      62              : 
+      63              :   template<typename _Res, typename _MemFun, typename _Tp, typename... _Args>
+      64              :     constexpr _Res
+      65              :     __invoke_impl(__invoke_memfun_ref, _MemFun&& __f, _Tp&& __t,
+      66              :                   _Args&&... __args)
+      67              :     { return (__invfwd<_Tp>(__t).*__f)(std::forward<_Args>(__args)...); }
+      68              : 
+      69              :   template<typename _Res, typename _MemFun, typename _Tp, typename... _Args>
+      70              :     constexpr _Res
+      71              :     __invoke_impl(__invoke_memfun_deref, _MemFun&& __f, _Tp&& __t,
+      72              :                   _Args&&... __args)
+      73              :     {
+      74              :       return ((*std::forward<_Tp>(__t)).*__f)(std::forward<_Args>(__args)...);
+      75              :     }
+      76              : 
+      77              :   template<typename _Res, typename _MemPtr, typename _Tp>
+      78              :     constexpr _Res
+      79              :     __invoke_impl(__invoke_memobj_ref, _MemPtr&& __f, _Tp&& __t)
+      80              :     { return __invfwd<_Tp>(__t).*__f; }
+      81              : 
+      82              :   template<typename _Res, typename _MemPtr, typename _Tp>
+      83              :     constexpr _Res
+      84              :     __invoke_impl(__invoke_memobj_deref, _MemPtr&& __f, _Tp&& __t)
+      85              :     { return (*std::forward<_Tp>(__t)).*__f; }
+      86              : 
+      87              :   /// Invoke a callable object.
+      88              :   template<typename _Callable, typename... _Args>
+      89              :     constexpr typename __invoke_result<_Callable, _Args...>::type
+      90      1605734 :     __invoke(_Callable&& __fn, _Args&&... __args)
+      91              :     noexcept(__is_nothrow_invocable<_Callable, _Args...>::value)
+      92              :     {
+      93              :       using __result = __invoke_result<_Callable, _Args...>;
+      94              :       using __type = typename __result::type;
+      95              :       using __tag = typename __result::__invoke_type;
+      96      1605734 :       return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn),
+      97      1605734 :                                         std::forward<_Args>(__args)...);
+      98              :     }
+      99              : 
+     100              : #if __cplusplus >= 201703L
+     101              :   // INVOKE<R>: Invoke a callable object and convert the result to R.
+     102              :   template<typename _Res, typename _Callable, typename... _Args>
+     103              :     constexpr enable_if_t<is_invocable_r_v<_Res, _Callable, _Args...>, _Res>
+     104            0 :     __invoke_r(_Callable&& __fn, _Args&&... __args)
+     105              :     noexcept(is_nothrow_invocable_r_v<_Res, _Callable, _Args...>)
+     106              :     {
+     107              :       using __result = __invoke_result<_Callable, _Args...>;
+     108              :       using __type = typename __result::type;
+     109              :       using __tag = typename __result::__invoke_type;
+     110              :       if constexpr (is_void_v<_Res>)
+     111              :         std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn),
+     112              :                                         std::forward<_Args>(__args)...);
+     113              :       else
+     114            0 :         return std::__invoke_impl<__type>(__tag{},
+     115              :                                           std::forward<_Callable>(__fn),
+     116            0 :                                           std::forward<_Args>(__args)...);
+     117              :     }
+     118              : #else // C++11 or C++14
+     119              :   // This is a non-SFINAE-friendly std::invoke_r<R>(fn, args...) for C++11/14.
+     120              :   // It's used in std::function, std::bind, and std::packaged_task. Only
+     121              :   // std::function is constrained on is_invocable_r, but that is checked on
+     122              :   // construction so doesn't need to be checked again when calling __invoke_r.
+     123              :   // Consequently, these __invoke_r overloads do not check for invocable
+     124              :   // arguments, nor check that the invoke result is convertible to R.
+     125              : 
+     126              :   // INVOKE<R>: Invoke a callable object and convert the result to R.
+     127              :   template<typename _Res, typename _Callable, typename... _Args>
+     128              :     constexpr __enable_if_t<!is_void<_Res>::value, _Res>
+     129              :     __invoke_r(_Callable&& __fn, _Args&&... __args)
+     130              :     {
+     131              :       using __result = __invoke_result<_Callable, _Args...>;
+     132              :       using __type = typename __result::type;
+     133              : #if __has_builtin(__reference_converts_from_temporary)
+     134              :       static_assert(!__reference_converts_from_temporary(_Res, __type),
+     135              :                     "INVOKE<R> must not create a dangling reference");
+     136              : #endif
+     137              :       using __tag = typename __result::__invoke_type;
+     138              :       return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn),
+     139              :                                         std::forward<_Args>(__args)...);
+     140              :     }
+     141              : 
+     142              :   // INVOKE<R> when R is cv void
+     143              :   template<typename _Res, typename _Callable, typename... _Args>
+     144              :     _GLIBCXX14_CONSTEXPR __enable_if_t<is_void<_Res>::value, _Res>
+     145              :     __invoke_r(_Callable&& __fn, _Args&&... __args)
+     146              :     {
+     147              :       using __result = __invoke_result<_Callable, _Args...>;
+     148              :       using __type = typename __result::type;
+     149              :       using __tag = typename __result::__invoke_type;
+     150              :       std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn),
+     151              :                                  std::forward<_Args>(__args)...);
+     152              :     }
+     153              : #endif // C++11 or C++14
+     154              : 
+     155              : _GLIBCXX_END_NAMESPACE_VERSION
+     156              : } // namespace std
+     157              : 
+     158              : #endif // C++11
+     159              : 
+     160              : #endif // _GLIBCXX_INVOKE_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/ios_base.h.func-c.html b/html/usr/include/c++/13/bits/ios_base.h.func-c.html new file mode 100644 index 0000000..fb3efdb --- /dev/null +++ b/html/usr/include/c++/13/bits/ios_base.h.func-c.html @@ -0,0 +1,131 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/ios_base.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - ios_base.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %210
Test Date:2024-04-30 13:17:26Functions:0.0 %80
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt8ios_base4setfESt13_Ios_FmtflagsS0_0
_ZSt3hexRSt8ios_base0
_ZSt3octRSt8ios_base0
_ZStaNRSt13_Ios_FmtflagsS_0
_ZStanSt13_Ios_FmtflagsS_0
_ZStcoSt13_Ios_Fmtflags0
_ZStoRRSt13_Ios_FmtflagsS_0
_ZStorSt13_Ios_FmtflagsS_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/ios_base.h.func.html b/html/usr/include/c++/13/bits/ios_base.h.func.html new file mode 100644 index 0000000..82c410b --- /dev/null +++ b/html/usr/include/c++/13/bits/ios_base.h.func.html @@ -0,0 +1,131 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/ios_base.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - ios_base.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %210
Test Date:2024-04-30 13:17:26Functions:0.0 %80
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt8ios_base4setfESt13_Ios_FmtflagsS0_0
_ZSt3hexRSt8ios_base0
_ZSt3octRSt8ios_base0
_ZStaNRSt13_Ios_FmtflagsS_0
_ZStanSt13_Ios_FmtflagsS_0
_ZStcoSt13_Ios_Fmtflags0
_ZStoRRSt13_Ios_FmtflagsS_0
_ZStorSt13_Ios_FmtflagsS_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/ios_base.h.gcov.html b/html/usr/include/c++/13/bits/ios_base.h.gcov.html new file mode 100644 index 0000000..ed070ac --- /dev/null +++ b/html/usr/include/c++/13/bits/ios_base.h.gcov.html @@ -0,0 +1,1198 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/ios_base.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - ios_base.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %210
Test Date:2024-04-30 13:17:26Functions:0.0 %80
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Iostreams base classes -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 1997-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/ios_base.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{ios}
+      28              :  */
+      29              : 
+      30              : //
+      31              : // ISO C++ 14882: 27.4  Iostreams base classes
+      32              : //
+      33              : 
+      34              : #ifndef _IOS_BASE_H
+      35              : #define _IOS_BASE_H 1
+      36              : 
+      37              : #pragma GCC system_header
+      38              : 
+      39              : #include <ext/atomicity.h>
+      40              : #include <bits/localefwd.h>
+      41              : #include <bits/locale_classes.h>
+      42              : 
+      43              : #if __cplusplus < 201103L
+      44              : # include <stdexcept>
+      45              : #else
+      46              : # include <system_error>
+      47              : #endif
+      48              : 
+      49              : namespace std _GLIBCXX_VISIBILITY(default)
+      50              : {
+      51              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      52              : 
+      53              :   // The following definitions of bitmask types are enums, not ints,
+      54              :   // as permitted (but not required) in the standard, in order to provide
+      55              :   // better type safety in iostream calls.  A side effect is that in C++98
+      56              :   // expressions involving them are not compile-time constants.
+      57              :   enum _Ios_Fmtflags 
+      58              :     { 
+      59              :       _S_boolalpha      = 1L << 0,
+      60              :       _S_dec            = 1L << 1,
+      61              :       _S_fixed          = 1L << 2,
+      62              :       _S_hex            = 1L << 3,
+      63              :       _S_internal       = 1L << 4,
+      64              :       _S_left           = 1L << 5,
+      65              :       _S_oct            = 1L << 6,
+      66              :       _S_right          = 1L << 7,
+      67              :       _S_scientific     = 1L << 8,
+      68              :       _S_showbase       = 1L << 9,
+      69              :       _S_showpoint      = 1L << 10,
+      70              :       _S_showpos        = 1L << 11,
+      71              :       _S_skipws         = 1L << 12,
+      72              :       _S_unitbuf        = 1L << 13,
+      73              :       _S_uppercase      = 1L << 14,
+      74              :       _S_adjustfield    = _S_left | _S_right | _S_internal,
+      75              :       _S_basefield      = _S_dec | _S_oct | _S_hex,
+      76              :       _S_floatfield     = _S_scientific | _S_fixed,
+      77              :       _S_ios_fmtflags_end = 1L << 16,
+      78              :       _S_ios_fmtflags_max = __INT_MAX__,
+      79              :       _S_ios_fmtflags_min = ~__INT_MAX__
+      80              :     };
+      81              : 
+      82              :   inline _GLIBCXX_CONSTEXPR _Ios_Fmtflags
+      83            0 :   operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
+      84            0 :   { return _Ios_Fmtflags(static_cast<int>(__a) & static_cast<int>(__b)); }
+      85              : 
+      86              :   inline _GLIBCXX_CONSTEXPR _Ios_Fmtflags
+      87            0 :   operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
+      88            0 :   { return _Ios_Fmtflags(static_cast<int>(__a) | static_cast<int>(__b)); }
+      89              : 
+      90              :   inline _GLIBCXX_CONSTEXPR _Ios_Fmtflags
+      91              :   operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
+      92              :   { return _Ios_Fmtflags(static_cast<int>(__a) ^ static_cast<int>(__b)); }
+      93              : 
+      94              :   inline _GLIBCXX_CONSTEXPR _Ios_Fmtflags
+      95            0 :   operator~(_Ios_Fmtflags __a)
+      96            0 :   { return _Ios_Fmtflags(~static_cast<int>(__a)); }
+      97              : 
+      98              :   inline const _Ios_Fmtflags&
+      99            0 :   operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
+     100            0 :   { return __a = __a | __b; }
+     101              : 
+     102              :   inline const _Ios_Fmtflags&
+     103            0 :   operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
+     104            0 :   { return __a = __a & __b; }
+     105              : 
+     106              :   inline const _Ios_Fmtflags&
+     107              :   operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
+     108              :   { return __a = __a ^ __b; }
+     109              : 
+     110              : 
+     111              :   enum _Ios_Openmode 
+     112              :     { 
+     113              :       _S_app            = 1L << 0,
+     114              :       _S_ate            = 1L << 1,
+     115              :       _S_bin            = 1L << 2,
+     116              :       _S_in             = 1L << 3,
+     117              :       _S_out            = 1L << 4,
+     118              :       _S_trunc          = 1L << 5,
+     119              :       _S_noreplace      = 1L << 6,
+     120              :       _S_ios_openmode_end = 1L << 16,
+     121              :       _S_ios_openmode_max = __INT_MAX__,
+     122              :       _S_ios_openmode_min = ~__INT_MAX__
+     123              :     };
+     124              : 
+     125              :   inline _GLIBCXX_CONSTEXPR _Ios_Openmode
+     126              :   operator&(_Ios_Openmode __a, _Ios_Openmode __b)
+     127              :   { return _Ios_Openmode(static_cast<int>(__a) & static_cast<int>(__b)); }
+     128              : 
+     129              :   inline _GLIBCXX_CONSTEXPR _Ios_Openmode
+     130              :   operator|(_Ios_Openmode __a, _Ios_Openmode __b)
+     131              :   { return _Ios_Openmode(static_cast<int>(__a) | static_cast<int>(__b)); }
+     132              : 
+     133              :   inline _GLIBCXX_CONSTEXPR _Ios_Openmode
+     134              :   operator^(_Ios_Openmode __a, _Ios_Openmode __b)
+     135              :   { return _Ios_Openmode(static_cast<int>(__a) ^ static_cast<int>(__b)); }
+     136              : 
+     137              :   inline _GLIBCXX_CONSTEXPR _Ios_Openmode
+     138              :   operator~(_Ios_Openmode __a)
+     139              :   { return _Ios_Openmode(~static_cast<int>(__a)); }
+     140              : 
+     141              :   inline const _Ios_Openmode&
+     142              :   operator|=(_Ios_Openmode& __a, _Ios_Openmode __b)
+     143              :   { return __a = __a | __b; }
+     144              : 
+     145              :   inline const _Ios_Openmode&
+     146              :   operator&=(_Ios_Openmode& __a, _Ios_Openmode __b)
+     147              :   { return __a = __a & __b; }
+     148              : 
+     149              :   inline const _Ios_Openmode&
+     150              :   operator^=(_Ios_Openmode& __a, _Ios_Openmode __b)
+     151              :   { return __a = __a ^ __b; }
+     152              : 
+     153              : 
+     154              :   enum _Ios_Iostate
+     155              :     { 
+     156              :       _S_goodbit                = 0,
+     157              :       _S_badbit                 = 1L << 0,
+     158              :       _S_eofbit                 = 1L << 1,
+     159              :       _S_failbit                = 1L << 2,
+     160              :       _S_ios_iostate_end = 1L << 16,
+     161              :       _S_ios_iostate_max = __INT_MAX__,
+     162              :       _S_ios_iostate_min = ~__INT_MAX__
+     163              :     };
+     164              : 
+     165              :   inline _GLIBCXX_CONSTEXPR _Ios_Iostate
+     166              :   operator&(_Ios_Iostate __a, _Ios_Iostate __b)
+     167              :   { return _Ios_Iostate(static_cast<int>(__a) & static_cast<int>(__b)); }
+     168              : 
+     169              :   inline _GLIBCXX_CONSTEXPR _Ios_Iostate
+     170              :   operator|(_Ios_Iostate __a, _Ios_Iostate __b)
+     171              :   { return _Ios_Iostate(static_cast<int>(__a) | static_cast<int>(__b)); }
+     172              : 
+     173              :   inline _GLIBCXX_CONSTEXPR _Ios_Iostate
+     174              :   operator^(_Ios_Iostate __a, _Ios_Iostate __b)
+     175              :   { return _Ios_Iostate(static_cast<int>(__a) ^ static_cast<int>(__b)); }
+     176              : 
+     177              :   inline _GLIBCXX_CONSTEXPR _Ios_Iostate
+     178              :   operator~(_Ios_Iostate __a)
+     179              :   { return _Ios_Iostate(~static_cast<int>(__a)); }
+     180              : 
+     181              :   inline const _Ios_Iostate&
+     182              :   operator|=(_Ios_Iostate& __a, _Ios_Iostate __b)
+     183              :   { return __a = __a | __b; }
+     184              : 
+     185              :   inline const _Ios_Iostate&
+     186              :   operator&=(_Ios_Iostate& __a, _Ios_Iostate __b)
+     187              :   { return __a = __a & __b; }
+     188              : 
+     189              :   inline const  _Ios_Iostate&
+     190              :   operator^=(_Ios_Iostate& __a, _Ios_Iostate __b)
+     191              :   { return __a = __a ^ __b; }
+     192              : 
+     193              : 
+     194              :   enum _Ios_Seekdir 
+     195              :     { 
+     196              :       _S_beg = 0,
+     197              :       _S_cur = _GLIBCXX_STDIO_SEEK_CUR,
+     198              :       _S_end = _GLIBCXX_STDIO_SEEK_END,
+     199              :       _S_ios_seekdir_end = 1L << 16 
+     200              :     };
+     201              : 
+     202              : #if __cplusplus >= 201103L
+     203              :   /// I/O error code
+     204              :   enum class io_errc { stream = 1 };
+     205              : 
+     206              :   template <> struct is_error_code_enum<io_errc> : public true_type { };
+     207              : 
+     208              :   [[__nodiscard__, __gnu__::__const__]]
+     209              :   const error_category&
+     210              :   iostream_category() noexcept;
+     211              : 
+     212              :   [[__nodiscard__]]
+     213              :   inline error_code
+     214              :   make_error_code(io_errc __e) noexcept
+     215              :   { return error_code(static_cast<int>(__e), iostream_category()); }
+     216              : 
+     217              :   [[__nodiscard__]]
+     218              :   inline error_condition
+     219              :   make_error_condition(io_errc __e) noexcept
+     220              :   { return error_condition(static_cast<int>(__e), iostream_category()); }
+     221              : #endif
+     222              : 
+     223              :   // 27.4.2  Class ios_base
+     224              :   /**
+     225              :    *  @brief  The base of the I/O class hierarchy.
+     226              :    *  @ingroup io
+     227              :    *
+     228              :    *  This class defines everything that can be defined about I/O that does
+     229              :    *  not depend on the type of characters being input or output.  Most
+     230              :    *  people will only see @c ios_base when they need to specify the full
+     231              :    *  name of the various I/O flags (e.g., the openmodes).
+     232              :   */
+     233              :   class ios_base
+     234              :   {
+     235              : #if _GLIBCXX_USE_CXX11_ABI
+     236              : #if __cplusplus < 201103L
+     237              :     // Type that is layout-compatible with std::system_error
+     238              :     struct system_error : std::runtime_error
+     239              :     {
+     240              :       // Type that is layout-compatible with std::error_code
+     241              :       struct error_code
+     242              :       {
+     243              :         error_code() { }
+     244              :       private:
+     245              :         int             _M_value;
+     246              :         const void*     _M_cat;
+     247              :       } _M_code;
+     248              :     };
+     249              : #endif
+     250              : #endif
+     251              :   public:
+     252              : 
+     253              :     /** 
+     254              :      *  @brief These are thrown to indicate problems with io.
+     255              :      *  @ingroup exceptions
+     256              :      *
+     257              :      *  27.4.2.1.1  Class ios_base::failure
+     258              :      */
+     259              : #if _GLIBCXX_USE_CXX11_ABI
+     260              :     class _GLIBCXX_ABI_TAG_CXX11 failure : public system_error
+     261              :     {
+     262              :     public:
+     263              :       explicit
+     264              :       failure(const string& __str);
+     265              : 
+     266              : #if __cplusplus >= 201103L
+     267              :       explicit
+     268              :       failure(const string&, const error_code&);
+     269              : 
+     270              :       explicit
+     271              :       failure(const char*, const error_code& = io_errc::stream);
+     272              : #endif
+     273              : 
+     274              :       virtual
+     275              :       ~failure() throw();
+     276              : 
+     277              :       virtual const char*
+     278              :       what() const throw();
+     279              :     };
+     280              : #else
+     281              :     class failure : public exception
+     282              :     {
+     283              :     public:
+     284              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     285              :       // 48.  Use of non-existent exception constructor
+     286              :       explicit
+     287              :       failure(const string& __str) throw();
+     288              : 
+     289              :       // This declaration is not useless:
+     290              :       // http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Vague-Linkage.html
+     291              :       virtual
+     292              :       ~failure() throw();
+     293              : 
+     294              :       virtual const char*
+     295              :       what() const throw();
+     296              : 
+     297              : #if __cplusplus >= 201103L
+     298              :       // Define the new members required by C++11,
+     299              :       // even though the error_code cannot be stored.
+     300              : 
+     301              :       explicit
+     302              :       failure(const string& __s, const error_code&) noexcept
+     303              :       : failure(__s)
+     304              :       { }
+     305              : 
+     306              :       explicit
+     307              :       failure(const char* __s, const error_code& = error_code{})
+     308              :       : failure(string(__s))
+     309              :       { }
+     310              : 
+     311              :       // Stand-in for system_error::code() but returning by value.
+     312              :       error_code code() const noexcept { return error_code{}; }
+     313              : #endif
+     314              : 
+     315              :     private:
+     316              :       string _M_msg;
+     317              :     };
+     318              : #endif
+     319              : 
+     320              :     // 27.4.2.1.2  Type ios_base::fmtflags
+     321              :     /**
+     322              :      *  @brief This is a bitmask type.
+     323              :      *
+     324              :      *  @c @a _Ios_Fmtflags is implementation-defined, but it is valid to
+     325              :      *  perform bitwise operations on these values and expect the Right
+     326              :      *  Thing to happen.  Defined objects of type fmtflags are:
+     327              :      *  - boolalpha
+     328              :      *  - dec
+     329              :      *  - fixed
+     330              :      *  - hex
+     331              :      *  - internal
+     332              :      *  - left
+     333              :      *  - oct
+     334              :      *  - right
+     335              :      *  - scientific
+     336              :      *  - showbase
+     337              :      *  - showpoint
+     338              :      *  - showpos
+     339              :      *  - skipws
+     340              :      *  - unitbuf
+     341              :      *  - uppercase
+     342              :      *  - adjustfield
+     343              :      *  - basefield
+     344              :      *  - floatfield
+     345              :     */
+     346              :     typedef _Ios_Fmtflags fmtflags;
+     347              : 
+     348              :     /// Insert/extract @c bool in alphabetic rather than numeric format.
+     349              :     static const fmtflags boolalpha =   _S_boolalpha;
+     350              : 
+     351              :     /// Converts integer input or generates integer output in decimal base.
+     352              :     static const fmtflags dec =         _S_dec;
+     353              : 
+     354              :     /// Generate floating-point output in fixed-point notation.
+     355              :     static const fmtflags fixed =       _S_fixed;
+     356              : 
+     357              :     /// Converts integer input or generates integer output in hexadecimal base.
+     358              :     static const fmtflags hex =         _S_hex;
+     359              : 
+     360              :     /// Adds fill characters at a designated internal point in certain
+     361              :     /// generated output, or identical to @c right if no such point is
+     362              :     /// designated.
+     363              :     static const fmtflags internal =    _S_internal;
+     364              : 
+     365              :     /// Adds fill characters on the right (final positions) of certain
+     366              :     /// generated output.  (I.e., the thing you print is flush left.)
+     367              :     static const fmtflags left =        _S_left;
+     368              : 
+     369              :     /// Converts integer input or generates integer output in octal base.
+     370              :     static const fmtflags oct =         _S_oct;
+     371              : 
+     372              :     /// Adds fill characters on the left (initial positions) of certain
+     373              :     /// generated output.  (I.e., the thing you print is flush right.)
+     374              :     static const fmtflags right =       _S_right;
+     375              : 
+     376              :     /// Generates floating-point output in scientific notation.
+     377              :     static const fmtflags scientific =  _S_scientific;
+     378              : 
+     379              :     /// Generates a prefix indicating the numeric base of generated integer
+     380              :     /// output.
+     381              :     static const fmtflags showbase =    _S_showbase;
+     382              : 
+     383              :     /// Generates a decimal-point character unconditionally in generated
+     384              :     /// floating-point output.
+     385              :     static const fmtflags showpoint =   _S_showpoint;
+     386              : 
+     387              :     /// Generates a + sign in non-negative generated numeric output.
+     388              :     static const fmtflags showpos =     _S_showpos;
+     389              : 
+     390              :     /// Skips leading white space before certain input operations.
+     391              :     static const fmtflags skipws =      _S_skipws;
+     392              : 
+     393              :     /// Flushes output after each output operation.
+     394              :     static const fmtflags unitbuf =     _S_unitbuf;
+     395              : 
+     396              :     /// Replaces certain lowercase letters with their uppercase equivalents
+     397              :     /// in generated output.
+     398              :     static const fmtflags uppercase =   _S_uppercase;
+     399              : 
+     400              :     /// A mask of left|right|internal.  Useful for the 2-arg form of @c setf.
+     401              :     static const fmtflags adjustfield = _S_adjustfield;
+     402              : 
+     403              :     /// A mask of dec|oct|hex.  Useful for the 2-arg form of @c setf.
+     404              :     static const fmtflags basefield =   _S_basefield;
+     405              : 
+     406              :     /// A mask of scientific|fixed.  Useful for the 2-arg form of @c setf.
+     407              :     static const fmtflags floatfield =  _S_floatfield;
+     408              : 
+     409              :     // 27.4.2.1.3  Type ios_base::iostate
+     410              :     /**
+     411              :      *  @brief This is a bitmask type.
+     412              :      *
+     413              :      *  @c @a _Ios_Iostate is implementation-defined, but it is valid to
+     414              :      *  perform bitwise operations on these values and expect the Right
+     415              :      *  Thing to happen.  Defined objects of type iostate are:
+     416              :      *  - badbit
+     417              :      *  - eofbit
+     418              :      *  - failbit
+     419              :      *  - goodbit
+     420              :     */
+     421              :     typedef _Ios_Iostate iostate;
+     422              : 
+     423              :     /// Indicates a loss of integrity in an input or output sequence (such
+     424              :     /// as an irrecoverable read error from a file).
+     425              :     static const iostate badbit =       _S_badbit;
+     426              : 
+     427              :     /// Indicates that an input operation reached the end of an input sequence.
+     428              :     static const iostate eofbit =       _S_eofbit;
+     429              : 
+     430              :     /// Indicates that an input operation failed to read the expected
+     431              :     /// characters, or that an output operation failed to generate the
+     432              :     /// desired characters.
+     433              :     static const iostate failbit =      _S_failbit;
+     434              : 
+     435              :     /// Indicates all is well.
+     436              :     static const iostate goodbit =      _S_goodbit;
+     437              : 
+     438              :     // 27.4.2.1.4  Type ios_base::openmode
+     439              :     /**
+     440              :      *  @brief This is a bitmask type.
+     441              :      *
+     442              :      *  @c @a _Ios_Openmode is implementation-defined, but it is valid to
+     443              :      *  perform bitwise operations on these values and expect the Right
+     444              :      *  Thing to happen.  Defined objects of type openmode are:
+     445              :      *  - app
+     446              :      *  - ate
+     447              :      *  - binary
+     448              :      *  - in
+     449              :      *  - out
+     450              :      *  - trunc
+     451              :     */
+     452              :     typedef _Ios_Openmode openmode;
+     453              : 
+     454              :     /// Seek to end before each write.
+     455              :     static const openmode app =         _S_app;
+     456              : 
+     457              :     /// Open and seek to end immediately after opening.
+     458              :     static const openmode ate =         _S_ate;
+     459              : 
+     460              :     /// Perform input and output in binary mode (as opposed to text mode).
+     461              :     /// This is probably not what you think it is; see
+     462              :     /// https://gcc.gnu.org/onlinedocs/libstdc++/manual/fstreams.html#std.io.filestreams.binary
+     463              :     static const openmode binary =      _S_bin;
+     464              : 
+     465              :     /// Open for input.  Default for @c ifstream and fstream.
+     466              :     static const openmode in =          _S_in;
+     467              : 
+     468              :     /// Open for output.  Default for @c ofstream and fstream.
+     469              :     static const openmode out =         _S_out;
+     470              : 
+     471              :     /// Truncate an existing stream when opening.  Default for @c ofstream.
+     472              :     static const openmode trunc =       _S_trunc;
+     473              : 
+     474              :     static const openmode __noreplace = _S_noreplace;
+     475              : 
+     476              : #if __cplusplus >= 202100L
+     477              : #define __cpp_lib_ios_noreplace 202207L
+     478              :     /// Open a file in exclusive mode.
+     479              :     static const openmode noreplace =   _S_noreplace;
+     480              : #endif
+     481              : 
+     482              :     // 27.4.2.1.5  Type ios_base::seekdir
+     483              :     /**
+     484              :      *  @brief This is an enumerated type.
+     485              :      *
+     486              :      *  @c @a _Ios_Seekdir is implementation-defined.  Defined values
+     487              :      *  of type seekdir are:
+     488              :      *  - beg
+     489              :      *  - cur, equivalent to @c SEEK_CUR in the C standard library.
+     490              :      *  - end, equivalent to @c SEEK_END in the C standard library.
+     491              :     */
+     492              :     typedef _Ios_Seekdir seekdir;
+     493              : 
+     494              :     /// Request a seek relative to the beginning of the stream.
+     495              :     static const seekdir beg =          _S_beg;
+     496              : 
+     497              :     /// Request a seek relative to the current position within the sequence.
+     498              :     static const seekdir cur =          _S_cur;
+     499              : 
+     500              :     /// Request a seek relative to the current end of the sequence.
+     501              :     static const seekdir end =          _S_end;
+     502              : 
+     503              : #if __cplusplus <= 201402L
+     504              :     // Annex D.6 (removed in C++17)
+     505              :     typedef int io_state
+     506              :       _GLIBCXX_DEPRECATED_SUGGEST("std::iostate");
+     507              :     typedef int open_mode
+     508              :       _GLIBCXX_DEPRECATED_SUGGEST("std::openmode");
+     509              :     typedef int seek_dir
+     510              :       _GLIBCXX_DEPRECATED_SUGGEST("std::seekdir");
+     511              : 
+     512              :     typedef std::streampos streampos
+     513              :       _GLIBCXX_DEPRECATED_SUGGEST("std::streampos");
+     514              :     typedef std::streamoff streamoff
+     515              :       _GLIBCXX_DEPRECATED_SUGGEST("std::streamoff");
+     516              : #endif
+     517              : 
+     518              :     // Callbacks;
+     519              :     /**
+     520              :      *  @brief  The set of events that may be passed to an event callback.
+     521              :      *
+     522              :      *  erase_event is used during ~ios() and copyfmt().  imbue_event is used
+     523              :      *  during imbue().  copyfmt_event is used during copyfmt().
+     524              :     */
+     525              :     enum event
+     526              :     {
+     527              :       erase_event,
+     528              :       imbue_event,
+     529              :       copyfmt_event
+     530              :     };
+     531              : 
+     532              :     /**
+     533              :      *  @brief  The type of an event callback function.
+     534              :      *  @param  __e  One of the members of the event enum.
+     535              :      *  @param  __b  Reference to the ios_base object.
+     536              :      *  @param  __i  The integer provided when the callback was registered.
+     537              :      *
+     538              :      *  Event callbacks are user defined functions that get called during
+     539              :      *  several ios_base and basic_ios functions, specifically imbue(),
+     540              :      *  copyfmt(), and ~ios().
+     541              :     */
+     542              :     typedef void (*event_callback) (event __e, ios_base& __b, int __i);
+     543              : 
+     544              :     /**
+     545              :      *  @brief  Add the callback __fn with parameter __index.
+     546              :      *  @param  __fn  The function to add.
+     547              :      *  @param  __index  The integer to pass to the function when invoked.
+     548              :      *
+     549              :      *  Registers a function as an event callback with an integer parameter to
+     550              :      *  be passed to the function when invoked.  Multiple copies of the
+     551              :      *  function are allowed.  If there are multiple callbacks, they are
+     552              :      *  invoked in the order they were registered.
+     553              :     */
+     554              :     void
+     555              :     register_callback(event_callback __fn, int __index);
+     556              : 
+     557              :   protected:
+     558              :     streamsize          _M_precision;
+     559              :     streamsize          _M_width;
+     560              :     fmtflags            _M_flags;
+     561              :     iostate             _M_exception;
+     562              :     iostate             _M_streambuf_state;
+     563              : 
+     564              :     // 27.4.2.6  Members for callbacks
+     565              :     // 27.4.2.6  ios_base callbacks
+     566              :     struct _Callback_list
+     567              :     {
+     568              :       // Data Members
+     569              :       _Callback_list*           _M_next;
+     570              :       ios_base::event_callback  _M_fn;
+     571              :       int                       _M_index;
+     572              :       _Atomic_word              _M_refcount;  // 0 means one reference.
+     573              : 
+     574              :       _Callback_list(ios_base::event_callback __fn, int __index,
+     575              :                      _Callback_list* __cb)
+     576              :       : _M_next(__cb), _M_fn(__fn), _M_index(__index), _M_refcount(0) { }
+     577              : 
+     578              :       void
+     579              :       _M_add_reference() { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
+     580              : 
+     581              :       // 0 => OK to delete.
+     582              :       int
+     583              :       _M_remove_reference() 
+     584              :       {
+     585              :         // Be race-detector-friendly.  For more info see bits/c++config.
+     586              :         _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_refcount);
+     587              :         int __res = __gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1);
+     588              :         if (__res == 0)
+     589              :           {
+     590              :             _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_refcount);
+     591              :           }
+     592              :         return __res;
+     593              :       }
+     594              :     };
+     595              : 
+     596              :      _Callback_list*    _M_callbacks;
+     597              : 
+     598              :     void
+     599              :     _M_call_callbacks(event __ev) throw();
+     600              : 
+     601              :     void
+     602              :     _M_dispose_callbacks(void) throw();
+     603              : 
+     604              :     // 27.4.2.5  Members for iword/pword storage
+     605              :     struct _Words
+     606              :     {
+     607              :       void*     _M_pword;
+     608              :       long      _M_iword;
+     609              :       _Words() : _M_pword(0), _M_iword(0) { }
+     610              :     };
+     611              : 
+     612              :     // Only for failed iword/pword calls.
+     613              :     _Words              _M_word_zero;
+     614              : 
+     615              :     // Guaranteed storage.
+     616              :     // The first 5 iword and pword slots are reserved for internal use.
+     617              :     enum { _S_local_word_size = 8 };
+     618              :     _Words              _M_local_word[_S_local_word_size];
+     619              : 
+     620              :     // Allocated storage.
+     621              :     int                 _M_word_size;
+     622              :     _Words*             _M_word;
+     623              : 
+     624              :     _Words&
+     625              :     _M_grow_words(int __index, bool __iword);
+     626              : 
+     627              :     // Members for locale and locale caching.
+     628              :     locale              _M_ios_locale;
+     629              : 
+     630              :     void
+     631              :     _M_init() throw();
+     632              : 
+     633              :   public:
+     634              : 
+     635              :     // 27.4.2.1.6  Class ios_base::Init
+     636              :     // Used to initialize standard streams. In theory, g++ could use
+     637              :     // -finit-priority to order this stuff correctly without going
+     638              :     // through these machinations.
+     639              :     class Init
+     640              :     {
+     641              :       friend class ios_base;
+     642              :     public:
+     643              :       Init();
+     644              :       ~Init();
+     645              : 
+     646              : #if __cplusplus >= 201103L
+     647              :       Init(const Init&) = default;
+     648              :       Init& operator=(const Init&) = default;
+     649              : #endif
+     650              : 
+     651              :     private:
+     652              :       static _Atomic_word       _S_refcount;
+     653              :       static bool               _S_synced_with_stdio;
+     654              :     };
+     655              : 
+     656              :     // [27.4.2.2] fmtflags state functions
+     657              :     /**
+     658              :      *  @brief  Access to format flags.
+     659              :      *  @return  The format control flags for both input and output.
+     660              :     */
+     661              :     fmtflags
+     662              :     flags() const
+     663              :     { return _M_flags; }
+     664              : 
+     665              :     /**
+     666              :      *  @brief  Setting new format flags all at once.
+     667              :      *  @param  __fmtfl  The new flags to set.
+     668              :      *  @return  The previous format control flags.
+     669              :      *
+     670              :      *  This function overwrites all the format flags with @a __fmtfl.
+     671              :     */
+     672              :     fmtflags
+     673              :     flags(fmtflags __fmtfl)
+     674              :     {
+     675              :       fmtflags __old = _M_flags;
+     676              :       _M_flags = __fmtfl;
+     677              :       return __old;
+     678              :     }
+     679              : 
+     680              :     /**
+     681              :      *  @brief  Setting new format flags.
+     682              :      *  @param  __fmtfl  Additional flags to set.
+     683              :      *  @return  The previous format control flags.
+     684              :      *
+     685              :      *  This function sets additional flags in format control.  Flags that
+     686              :      *  were previously set remain set.
+     687              :     */
+     688              :     fmtflags
+     689              :     setf(fmtflags __fmtfl)
+     690              :     {
+     691              :       fmtflags __old = _M_flags;
+     692              :       _M_flags |= __fmtfl;
+     693              :       return __old;
+     694              :     }
+     695              : 
+     696              :     /**
+     697              :      *  @brief  Setting new format flags.
+     698              :      *  @param  __fmtfl  Additional flags to set.
+     699              :      *  @param  __mask  The flags mask for @a fmtfl.
+     700              :      *  @return  The previous format control flags.
+     701              :      *
+     702              :      *  This function clears @a mask in the format flags, then sets
+     703              :      *  @a fmtfl @c & @a mask.  An example mask is @c ios_base::adjustfield.
+     704              :     */
+     705              :     fmtflags
+     706            0 :     setf(fmtflags __fmtfl, fmtflags __mask)
+     707              :     {
+     708            0 :       fmtflags __old = _M_flags;
+     709            0 :       _M_flags &= ~__mask;
+     710            0 :       _M_flags |= (__fmtfl & __mask);
+     711            0 :       return __old;
+     712              :     }
+     713              : 
+     714              :     /**
+     715              :      *  @brief  Clearing format flags.
+     716              :      *  @param  __mask  The flags to unset.
+     717              :      *
+     718              :      *  This function clears @a __mask in the format flags.
+     719              :     */
+     720              :     void
+     721              :     unsetf(fmtflags __mask)
+     722              :     { _M_flags &= ~__mask; }
+     723              : 
+     724              :     /**
+     725              :      *  @brief  Flags access.
+     726              :      *  @return  The precision to generate on certain output operations.
+     727              :      *
+     728              :      *  Be careful if you try to give a definition of @a precision here; see
+     729              :      *  DR 189.
+     730              :     */
+     731              :     streamsize
+     732              :     precision() const
+     733              :     { return _M_precision; }
+     734              : 
+     735              :     /**
+     736              :      *  @brief  Changing flags.
+     737              :      *  @param  __prec  The new precision value.
+     738              :      *  @return  The previous value of precision().
+     739              :     */
+     740              :     streamsize
+     741              :     precision(streamsize __prec)
+     742              :     {
+     743              :       streamsize __old = _M_precision;
+     744              :       _M_precision = __prec;
+     745              :       return __old;
+     746              :     }
+     747              : 
+     748              :     /**
+     749              :      *  @brief  Flags access.
+     750              :      *  @return  The minimum field width to generate on output operations.
+     751              :      *
+     752              :      *  <em>Minimum field width</em> refers to the number of characters.
+     753              :     */
+     754              :     streamsize
+     755              :     width() const
+     756              :     { return _M_width; }
+     757              : 
+     758              :     /**
+     759              :      *  @brief  Changing flags.
+     760              :      *  @param  __wide  The new width value.
+     761              :      *  @return  The previous value of width().
+     762              :     */
+     763              :     streamsize
+     764              :     width(streamsize __wide)
+     765              :     {
+     766              :       streamsize __old = _M_width;
+     767              :       _M_width = __wide;
+     768              :       return __old;
+     769              :     }
+     770              : 
+     771              :     // [27.4.2.4] ios_base static members
+     772              :     /**
+     773              :      *  @brief  Interaction with the standard C I/O objects.
+     774              :      *  @param  __sync  Whether to synchronize or not.
+     775              :      *  @return  True if the standard streams were previously synchronized.
+     776              :      *
+     777              :      *  The synchronization referred to is @e only that between the standard
+     778              :      *  C facilities (e.g., stdout) and the standard C++ objects (e.g.,
+     779              :      *  cout).  User-declared streams are unaffected.  See
+     780              :      *  https://gcc.gnu.org/onlinedocs/libstdc++/manual/fstreams.html#std.io.filestreams.binary
+     781              :     */
+     782              :     static bool
+     783              :     sync_with_stdio(bool __sync = true);
+     784              : 
+     785              :     // [27.4.2.3] ios_base locale functions
+     786              :     /**
+     787              :      *  @brief  Setting a new locale.
+     788              :      *  @param  __loc  The new locale.
+     789              :      *  @return  The previous locale.
+     790              :      *
+     791              :      *  Sets the new locale for this stream, and then invokes each callback
+     792              :      *  with imbue_event.
+     793              :     */
+     794              :     locale
+     795              :     imbue(const locale& __loc) throw();
+     796              : 
+     797              :     /**
+     798              :      *  @brief  Locale access
+     799              :      *  @return  A copy of the current locale.
+     800              :      *
+     801              :      *  If @c imbue(loc) has previously been called, then this function
+     802              :      *  returns @c loc.  Otherwise, it returns a copy of @c std::locale(),
+     803              :      *  the global C++ locale.
+     804              :     */
+     805              :     locale
+     806              :     getloc() const
+     807              :     { return _M_ios_locale; }
+     808              : 
+     809              :     /**
+     810              :      *  @brief  Locale access
+     811              :      *  @return  A reference to the current locale.
+     812              :      *
+     813              :      *  Like getloc above, but returns a reference instead of
+     814              :      *  generating a copy.
+     815              :     */
+     816              :     const locale&
+     817              :     _M_getloc() const
+     818              :     { return _M_ios_locale; }
+     819              : 
+     820              :     // [27.4.2.5] ios_base storage functions
+     821              :     /**
+     822              :      *  @brief  Access to unique indices.
+     823              :      *  @return  An integer different from all previous calls.
+     824              :      *
+     825              :      *  This function returns a unique integer every time it is called.  It
+     826              :      *  can be used for any purpose, but is primarily intended to be a unique
+     827              :      *  index for the iword and pword functions.  The expectation is that an
+     828              :      *  application calls xalloc in order to obtain an index in the iword and
+     829              :      *  pword arrays that can be used without fear of conflict.
+     830              :      *
+     831              :      *  The implementation maintains a static variable that is incremented and
+     832              :      *  returned on each invocation.  xalloc is guaranteed to return an index
+     833              :      *  that is safe to use in the iword and pword arrays.
+     834              :     */
+     835              :     static int
+     836              :     xalloc() throw();
+     837              : 
+     838              :     /**
+     839              :      *  @brief  Access to integer array.
+     840              :      *  @param  __ix  Index into the array.
+     841              :      *  @return  A reference to an integer associated with the index.
+     842              :      *
+     843              :      *  The iword function provides access to an array of integers that can be
+     844              :      *  used for any purpose.  The array grows as required to hold the
+     845              :      *  supplied index.  All integers in the array are initialized to 0.
+     846              :      *
+     847              :      *  The implementation reserves several indices.  You should use xalloc to
+     848              :      *  obtain an index that is safe to use.  Also note that since the array
+     849              :      *  can grow dynamically, it is not safe to hold onto the reference.
+     850              :     */
+     851              :     long&
+     852              :     iword(int __ix)
+     853              :     {
+     854              :       _Words& __word = ((unsigned)__ix < (unsigned)_M_word_size)
+     855              :                         ? _M_word[__ix] : _M_grow_words(__ix, true);
+     856              :       return __word._M_iword;
+     857              :     }
+     858              : 
+     859              :     /**
+     860              :      *  @brief  Access to void pointer array.
+     861              :      *  @param  __ix  Index into the array.
+     862              :      *  @return  A reference to a void* associated with the index.
+     863              :      *
+     864              :      *  The pword function provides access to an array of pointers that can be
+     865              :      *  used for any purpose.  The array grows as required to hold the
+     866              :      *  supplied index.  All pointers in the array are initialized to 0.
+     867              :      *
+     868              :      *  The implementation reserves several indices.  You should use xalloc to
+     869              :      *  obtain an index that is safe to use.  Also note that since the array
+     870              :      *  can grow dynamically, it is not safe to hold onto the reference.
+     871              :     */
+     872              :     void*&
+     873              :     pword(int __ix)
+     874              :     {
+     875              :       _Words& __word = ((unsigned)__ix < (unsigned)_M_word_size)
+     876              :                         ? _M_word[__ix] : _M_grow_words(__ix, false);
+     877              :       return __word._M_pword;
+     878              :     }
+     879              : 
+     880              :     // Destructor
+     881              :     /**
+     882              :      *  Invokes each callback with erase_event.  Destroys local storage.
+     883              :      *
+     884              :      *  Note that the ios_base object for the standard streams never gets
+     885              :      *  destroyed.  As a result, any callbacks registered with the standard
+     886              :      *  streams will not get invoked with erase_event (unless copyfmt is
+     887              :      *  used).
+     888              :     */
+     889              :     virtual ~ios_base();
+     890              : 
+     891              :   protected:
+     892              :     ios_base() throw ();
+     893              : 
+     894              : #if __cplusplus < 201103L
+     895              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     896              :   // 50.  Copy constructor and assignment operator of ios_base
+     897              :   private:
+     898              :     ios_base(const ios_base&);
+     899              : 
+     900              :     ios_base&
+     901              :     operator=(const ios_base&);
+     902              : #else
+     903              :   public:
+     904              :     ios_base(const ios_base&) = delete;
+     905              : 
+     906              :     ios_base&
+     907              :     operator=(const ios_base&) = delete;
+     908              : 
+     909              :   protected:
+     910              :     void
+     911              :     _M_move(ios_base&) noexcept;
+     912              : 
+     913              :     void
+     914              :     _M_swap(ios_base& __rhs) noexcept;
+     915              : #endif
+     916              :   };
+     917              : 
+     918              :   // [27.4.5.1] fmtflags manipulators
+     919              :   /// Calls base.setf(ios_base::boolalpha).
+     920              :   inline ios_base&
+     921              :   boolalpha(ios_base& __base)
+     922              :   {
+     923              :     __base.setf(ios_base::boolalpha);
+     924              :     return __base;
+     925              :   }
+     926              : 
+     927              :   /// Calls base.unsetf(ios_base::boolalpha).
+     928              :   inline ios_base&
+     929              :   noboolalpha(ios_base& __base)
+     930              :   {
+     931              :     __base.unsetf(ios_base::boolalpha);
+     932              :     return __base;
+     933              :   }
+     934              : 
+     935              :   /// Calls base.setf(ios_base::showbase).
+     936              :   inline ios_base&
+     937              :   showbase(ios_base& __base)
+     938              :   {
+     939              :     __base.setf(ios_base::showbase);
+     940              :     return __base;
+     941              :   }
+     942              : 
+     943              :   /// Calls base.unsetf(ios_base::showbase).
+     944              :   inline ios_base&
+     945              :   noshowbase(ios_base& __base)
+     946              :   {
+     947              :     __base.unsetf(ios_base::showbase);
+     948              :     return __base;
+     949              :   }
+     950              : 
+     951              :   /// Calls base.setf(ios_base::showpoint).
+     952              :   inline ios_base&
+     953              :   showpoint(ios_base& __base)
+     954              :   {
+     955              :     __base.setf(ios_base::showpoint);
+     956              :     return __base;
+     957              :   }
+     958              : 
+     959              :   /// Calls base.unsetf(ios_base::showpoint).
+     960              :   inline ios_base&
+     961              :   noshowpoint(ios_base& __base)
+     962              :   {
+     963              :     __base.unsetf(ios_base::showpoint);
+     964              :     return __base;
+     965              :   }
+     966              : 
+     967              :   /// Calls base.setf(ios_base::showpos).
+     968              :   inline ios_base&
+     969              :   showpos(ios_base& __base)
+     970              :   {
+     971              :     __base.setf(ios_base::showpos);
+     972              :     return __base;
+     973              :   }
+     974              : 
+     975              :   /// Calls base.unsetf(ios_base::showpos).
+     976              :   inline ios_base&
+     977              :   noshowpos(ios_base& __base)
+     978              :   {
+     979              :     __base.unsetf(ios_base::showpos);
+     980              :     return __base;
+     981              :   }
+     982              : 
+     983              :   /// Calls base.setf(ios_base::skipws).
+     984              :   inline ios_base&
+     985              :   skipws(ios_base& __base)
+     986              :   {
+     987              :     __base.setf(ios_base::skipws);
+     988              :     return __base;
+     989              :   }
+     990              : 
+     991              :   /// Calls base.unsetf(ios_base::skipws).
+     992              :   inline ios_base&
+     993              :   noskipws(ios_base& __base)
+     994              :   {
+     995              :     __base.unsetf(ios_base::skipws);
+     996              :     return __base;
+     997              :   }
+     998              : 
+     999              :   /// Calls base.setf(ios_base::uppercase).
+    1000              :   inline ios_base&
+    1001              :   uppercase(ios_base& __base)
+    1002              :   {
+    1003              :     __base.setf(ios_base::uppercase);
+    1004              :     return __base;
+    1005              :   }
+    1006              : 
+    1007              :   /// Calls base.unsetf(ios_base::uppercase).
+    1008              :   inline ios_base&
+    1009              :   nouppercase(ios_base& __base)
+    1010              :   {
+    1011              :     __base.unsetf(ios_base::uppercase);
+    1012              :     return __base;
+    1013              :   }
+    1014              : 
+    1015              :   /// Calls base.setf(ios_base::unitbuf).
+    1016              :   inline ios_base&
+    1017              :   unitbuf(ios_base& __base)
+    1018              :   {
+    1019              :      __base.setf(ios_base::unitbuf);
+    1020              :      return __base;
+    1021              :   }
+    1022              : 
+    1023              :   /// Calls base.unsetf(ios_base::unitbuf).
+    1024              :   inline ios_base&
+    1025              :   nounitbuf(ios_base& __base)
+    1026              :   {
+    1027              :      __base.unsetf(ios_base::unitbuf);
+    1028              :      return __base;
+    1029              :   }
+    1030              : 
+    1031              :   // [27.4.5.2] adjustfield manipulators
+    1032              :   /// Calls base.setf(ios_base::internal, ios_base::adjustfield).
+    1033              :   inline ios_base&
+    1034              :   internal(ios_base& __base)
+    1035              :   {
+    1036              :      __base.setf(ios_base::internal, ios_base::adjustfield);
+    1037              :      return __base;
+    1038              :   }
+    1039              : 
+    1040              :   /// Calls base.setf(ios_base::left, ios_base::adjustfield).
+    1041              :   inline ios_base&
+    1042              :   left(ios_base& __base)
+    1043              :   {
+    1044              :     __base.setf(ios_base::left, ios_base::adjustfield);
+    1045              :     return __base;
+    1046              :   }
+    1047              : 
+    1048              :   /// Calls base.setf(ios_base::right, ios_base::adjustfield).
+    1049              :   inline ios_base&
+    1050              :   right(ios_base& __base)
+    1051              :   {
+    1052              :     __base.setf(ios_base::right, ios_base::adjustfield);
+    1053              :     return __base;
+    1054              :   }
+    1055              : 
+    1056              :   // [27.4.5.3] basefield manipulators
+    1057              :   /// Calls base.setf(ios_base::dec, ios_base::basefield).
+    1058              :   inline ios_base&
+    1059              :   dec(ios_base& __base)
+    1060              :   {
+    1061              :     __base.setf(ios_base::dec, ios_base::basefield);
+    1062              :     return __base;
+    1063              :   }
+    1064              : 
+    1065              :   /// Calls base.setf(ios_base::hex, ios_base::basefield).
+    1066              :   inline ios_base&
+    1067            0 :   hex(ios_base& __base)
+    1068              :   {
+    1069            0 :     __base.setf(ios_base::hex, ios_base::basefield);
+    1070            0 :     return __base;
+    1071              :   }
+    1072              : 
+    1073              :   /// Calls base.setf(ios_base::oct, ios_base::basefield).
+    1074              :   inline ios_base&
+    1075            0 :   oct(ios_base& __base)
+    1076              :   {
+    1077            0 :     __base.setf(ios_base::oct, ios_base::basefield);
+    1078            0 :     return __base;
+    1079              :   }
+    1080              : 
+    1081              :   // [27.4.5.4] floatfield manipulators
+    1082              :   /// Calls base.setf(ios_base::fixed, ios_base::floatfield).
+    1083              :   inline ios_base&
+    1084              :   fixed(ios_base& __base)
+    1085              :   {
+    1086              :     __base.setf(ios_base::fixed, ios_base::floatfield);
+    1087              :     return __base;
+    1088              :   }
+    1089              : 
+    1090              :   /// Calls base.setf(ios_base::scientific, ios_base::floatfield).
+    1091              :   inline ios_base&
+    1092              :   scientific(ios_base& __base)
+    1093              :   {
+    1094              :     __base.setf(ios_base::scientific, ios_base::floatfield);
+    1095              :     return __base;
+    1096              :   }
+    1097              : 
+    1098              : #if __cplusplus >= 201103L
+    1099              :   // New C++11 floatfield manipulators
+    1100              : 
+    1101              :   /// Calls
+    1102              :   /// base.setf(ios_base::fixed|ios_base::scientific, ios_base::floatfield)
+    1103              :   inline ios_base&
+    1104              :   hexfloat(ios_base& __base)
+    1105              :   {
+    1106              :     __base.setf(ios_base::fixed | ios_base::scientific, ios_base::floatfield);
+    1107              :     return __base;
+    1108              :   }
+    1109              : 
+    1110              :   /// Calls @c base.unsetf(ios_base::floatfield)
+    1111              :   inline ios_base&
+    1112              :   defaultfloat(ios_base& __base)
+    1113              :   {
+    1114              :     __base.unsetf(ios_base::floatfield);
+    1115              :     return __base;
+    1116              :   }
+    1117              : #endif
+    1118              : 
+    1119              : _GLIBCXX_END_NAMESPACE_VERSION
+    1120              : } // namespace
+    1121              : 
+    1122              : #endif /* _IOS_BASE_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/list.tcc.func-c.html b/html/usr/include/c++/13/bits/list.tcc.func-c.html new file mode 100644 index 0000000..4869b6e --- /dev/null +++ b/html/usr/include/c++/13/bits/list.tcc.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/list.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - list.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:44.4 %94
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt7__cxx1110_List_baseIiSaIiEE8_M_clearEv58
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/list.tcc.func.html b/html/usr/include/c++/13/bits/list.tcc.func.html new file mode 100644 index 0000000..afe6100 --- /dev/null +++ b/html/usr/include/c++/13/bits/list.tcc.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/list.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - list.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:44.4 %94
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt7__cxx1110_List_baseIiSaIiEE8_M_clearEv58
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/list.tcc.gcov.html b/html/usr/include/c++/13/bits/list.tcc.gcov.html new file mode 100644 index 0000000..5e33bbd --- /dev/null +++ b/html/usr/include/c++/13/bits/list.tcc.gcov.html @@ -0,0 +1,745 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/list.tcc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - list.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:44.4 %94
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // List implementation (out of line) -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1996,1997
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/list.tcc
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{list}
+      54              :  */
+      55              : 
+      56              : #ifndef _LIST_TCC
+      57              : #define _LIST_TCC 1
+      58              : 
+      59              : namespace std _GLIBCXX_VISIBILITY(default)
+      60              : {
+      61              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      62              : _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
+      63              : 
+      64              :   template<typename _Tp, typename _Alloc>
+      65              :     void
+      66           58 :     _List_base<_Tp, _Alloc>::
+      67              :     _M_clear() _GLIBCXX_NOEXCEPT
+      68              :     {
+      69              :       typedef _List_node<_Tp>  _Node;
+      70           58 :       __detail::_List_node_base* __cur = _M_impl._M_node._M_next;
+      71           58 :       while (__cur != &_M_impl._M_node)
+      72              :         {
+      73            0 :           _Node* __tmp = static_cast<_Node*>(__cur);
+      74            0 :           __cur = __tmp->_M_next;
+      75            0 :           _Tp* __val = __tmp->_M_valptr();
+      76              : #if __cplusplus >= 201103L
+      77            0 :           _Node_alloc_traits::destroy(_M_get_Node_allocator(), __val);
+      78              : #else
+      79              :           _Tp_alloc_type(_M_get_Node_allocator()).destroy(__val);
+      80              : #endif
+      81            0 :           _M_put_node(__tmp);
+      82              :         }
+      83           58 :     }
+      84              : 
+      85              : #if __cplusplus >= 201103L
+      86              :   template<typename _Tp, typename _Alloc>
+      87              :     template<typename... _Args>
+      88              :       typename list<_Tp, _Alloc>::iterator
+      89              :       list<_Tp, _Alloc>::
+      90              :       emplace(const_iterator __position, _Args&&... __args)
+      91              :       {
+      92              :         _Node* __tmp = _M_create_node(std::forward<_Args>(__args)...);
+      93              :         __tmp->_M_hook(__position._M_const_cast()._M_node);
+      94              :         this->_M_inc_size(1);
+      95              :         return iterator(__tmp);
+      96              :       }
+      97              : #endif
+      98              : 
+      99              :   template<typename _Tp, typename _Alloc>
+     100              :     typename list<_Tp, _Alloc>::iterator
+     101              :     list<_Tp, _Alloc>::
+     102              : #if __cplusplus >= 201103L
+     103              :     insert(const_iterator __position, const value_type& __x)
+     104              : #else
+     105              :     insert(iterator __position, const value_type& __x)
+     106              : #endif
+     107              :     {
+     108              :       _Node* __tmp = _M_create_node(__x);
+     109              :       __tmp->_M_hook(__position._M_const_cast()._M_node);
+     110              :       this->_M_inc_size(1);
+     111              :       return iterator(__tmp);
+     112              :     }
+     113              : 
+     114              : #if __cplusplus >= 201103L
+     115              :   template<typename _Tp, typename _Alloc>
+     116              :     typename list<_Tp, _Alloc>::iterator
+     117              :     list<_Tp, _Alloc>::
+     118              :     insert(const_iterator __position, size_type __n, const value_type& __x)
+     119              :     {
+     120              :       if (__n)
+     121              :         {
+     122              :           list __tmp(__n, __x, get_allocator());
+     123              :           iterator __it = __tmp.begin();
+     124              :           splice(__position, __tmp);
+     125              :           return __it;
+     126              :         }
+     127              :       return __position._M_const_cast();
+     128              :     }
+     129              : 
+     130              :   template<typename _Tp, typename _Alloc>
+     131              :     template<typename _InputIterator, typename>
+     132              :       typename list<_Tp, _Alloc>::iterator
+     133              :       list<_Tp, _Alloc>::
+     134              :       insert(const_iterator __position, _InputIterator __first,
+     135              :              _InputIterator __last)
+     136              :       {
+     137              :         list __tmp(__first, __last, get_allocator());
+     138              :         if (!__tmp.empty())
+     139              :           {
+     140              :             iterator __it = __tmp.begin();
+     141              :             splice(__position, __tmp);
+     142              :             return __it;
+     143              :           }
+     144              :         return __position._M_const_cast();
+     145              :       }
+     146              : #endif
+     147              : 
+     148              :   template<typename _Tp, typename _Alloc>
+     149              :     typename list<_Tp, _Alloc>::iterator
+     150              :     list<_Tp, _Alloc>::
+     151              : #if __cplusplus >= 201103L
+     152              :     erase(const_iterator __position) noexcept
+     153              : #else
+     154              :     erase(iterator __position)
+     155              : #endif
+     156              :     {
+     157              :       iterator __ret = iterator(__position._M_node->_M_next);
+     158              :       _M_erase(__position._M_const_cast());
+     159              :       return __ret;
+     160              :     }
+     161              : 
+     162              :   // Return a const_iterator indicating the position to start inserting or
+     163              :   // erasing elements (depending whether the list is growing or shrinking),
+     164              :   // and set __new_size to the number of new elements that must be appended.
+     165              :   // Equivalent to the following, but performed optimally:
+     166              :   // if (__new_size < size()) {
+     167              :   //   __new_size = 0;
+     168              :   //   return std::next(begin(), __new_size);
+     169              :   // } else {
+     170              :   //   __newsize -= size();
+     171              :   //   return end();
+     172              :   // }
+     173              :   template<typename _Tp, typename _Alloc>
+     174              :     typename list<_Tp, _Alloc>::const_iterator
+     175              :     list<_Tp, _Alloc>::
+     176              :     _M_resize_pos(size_type& __new_size) const
+     177              :     {
+     178              :       const_iterator __i;
+     179              : #if _GLIBCXX_USE_CXX11_ABI
+     180              :       const size_type __len = size();
+     181              :       if (__new_size < __len)
+     182              :         {
+     183              :           if (__new_size <= __len / 2)
+     184              :             {
+     185              :               __i = begin();
+     186              :               std::advance(__i, __new_size);
+     187              :             }
+     188              :           else
+     189              :             {
+     190              :               __i = end();
+     191              :               ptrdiff_t __num_erase = __len - __new_size;
+     192              :               std::advance(__i, -__num_erase);
+     193              :             }
+     194              :           __new_size = 0;
+     195              :           return __i;
+     196              :         }
+     197              :       else
+     198              :         __i = end();
+     199              : #else
+     200              :       size_type __len = 0;
+     201              :       for (__i = begin(); __i != end() && __len < __new_size; ++__i, ++__len)
+     202              :         ;
+     203              : #endif
+     204              :       __new_size -= __len;
+     205              :       return __i;
+     206              :     }
+     207              : 
+     208              : #if __cplusplus >= 201103L
+     209              :   template<typename _Tp, typename _Alloc>
+     210              :     void
+     211              :     list<_Tp, _Alloc>::
+     212              :     _M_default_append(size_type __n)
+     213              :     {
+     214              :       size_type __i = 0;
+     215              :       __try
+     216              :         {
+     217              :           for (; __i < __n; ++__i)
+     218              :             emplace_back();
+     219              :         }
+     220              :       __catch(...)
+     221              :         {
+     222              :           for (; __i; --__i)
+     223              :             pop_back();
+     224              :           __throw_exception_again;
+     225              :         }
+     226              :     }
+     227              : 
+     228              :   template<typename _Tp, typename _Alloc>
+     229              :     void
+     230              :     list<_Tp, _Alloc>::
+     231              :     resize(size_type __new_size)
+     232              :     {
+     233              :       const_iterator __i = _M_resize_pos(__new_size);
+     234              :       if (__new_size)
+     235              :         _M_default_append(__new_size);
+     236              :       else
+     237              :         erase(__i, end());
+     238              :     }
+     239              : 
+     240              :   template<typename _Tp, typename _Alloc>
+     241              :     void
+     242              :     list<_Tp, _Alloc>::
+     243              :     resize(size_type __new_size, const value_type& __x)
+     244              :     {
+     245              :       const_iterator __i = _M_resize_pos(__new_size);
+     246              :       if (__new_size)
+     247              :         insert(end(), __new_size, __x);
+     248              :       else
+     249              :         erase(__i, end());
+     250              :     }
+     251              : #else
+     252              :   template<typename _Tp, typename _Alloc>
+     253              :     void
+     254              :     list<_Tp, _Alloc>::
+     255              :     resize(size_type __new_size, value_type __x)
+     256              :     {
+     257              :       const_iterator __i = _M_resize_pos(__new_size);
+     258              :       if (__new_size)
+     259              :         insert(end(), __new_size, __x);
+     260              :       else
+     261              :         erase(__i._M_const_cast(), end());
+     262              :     }
+     263              : #endif
+     264              : 
+     265              :   template<typename _Tp, typename _Alloc>
+     266              :     list<_Tp, _Alloc>&
+     267              :     list<_Tp, _Alloc>::
+     268              :     operator=(const list& __x)
+     269              :     {
+     270              :       if (this != std::__addressof(__x))
+     271              :         {
+     272              : #if __cplusplus >= 201103L
+     273              :           if (_Node_alloc_traits::_S_propagate_on_copy_assign())
+     274              :             {
+     275              :               auto& __this_alloc = this->_M_get_Node_allocator();
+     276              :               auto& __that_alloc = __x._M_get_Node_allocator();
+     277              :               if (!_Node_alloc_traits::_S_always_equal()
+     278              :                   && __this_alloc != __that_alloc)
+     279              :                 {
+     280              :                   // replacement allocator cannot free existing storage
+     281              :                   clear();
+     282              :                 }
+     283              :               std::__alloc_on_copy(__this_alloc, __that_alloc);
+     284              :             }
+     285              : #endif
+     286              :           _M_assign_dispatch(__x.begin(), __x.end(), __false_type());
+     287              :         }
+     288              :       return *this;
+     289              :     }
+     290              : 
+     291              :   template<typename _Tp, typename _Alloc>
+     292              :     void
+     293              :     list<_Tp, _Alloc>::
+     294              :     _M_fill_assign(size_type __n, const value_type& __val)
+     295              :     {
+     296              :       iterator __i = begin();
+     297              :       for (; __i != end() && __n > 0; ++__i, --__n)
+     298              :         *__i = __val;
+     299              :       if (__n > 0)
+     300              :         insert(end(), __n, __val);
+     301              :       else
+     302              :         erase(__i, end());
+     303              :     }
+     304              : 
+     305              :   template<typename _Tp, typename _Alloc>
+     306              :     template <typename _InputIterator>
+     307              :       void
+     308              :       list<_Tp, _Alloc>::
+     309              :       _M_assign_dispatch(_InputIterator __first2, _InputIterator __last2,
+     310              :                          __false_type)
+     311              :       {
+     312              :         iterator __first1 = begin();
+     313              :         iterator __last1 = end();
+     314              :         for (; __first1 != __last1 && __first2 != __last2;
+     315              :              ++__first1, (void)++__first2)
+     316              :           *__first1 = *__first2;
+     317              :         if (__first2 == __last2)
+     318              :           erase(__first1, __last1);
+     319              :         else
+     320              :           insert(__last1, __first2, __last2);
+     321              :       }
+     322              : 
+     323              : #if __cplusplus > 201703L
+     324              : # define _GLIBCXX20_ONLY(__expr) __expr
+     325              : #else
+     326              : # define _GLIBCXX20_ONLY(__expr)
+     327              : #endif
+     328              : 
+     329              :   template<typename _Tp, typename _Alloc>
+     330              :     typename list<_Tp, _Alloc>::__remove_return_type
+     331              :     list<_Tp, _Alloc>::
+     332              :     remove(const value_type& __value)
+     333              :     {
+     334              : #if !_GLIBCXX_USE_CXX11_ABI
+     335              :       size_type __removed __attribute__((__unused__)) = 0;
+     336              : #endif
+     337              :       list __to_destroy(get_allocator());
+     338              :       iterator __first = begin();
+     339              :       iterator __last = end();
+     340              :       while (__first != __last)
+     341              :         {
+     342              :           iterator __next = __first;
+     343              :           ++__next;
+     344              :           if (*__first == __value)
+     345              :             {
+     346              :               // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     347              :               // 526. Is it undefined if a function in the standard changes
+     348              :               // in parameters?
+     349              :               __to_destroy.splice(__to_destroy.begin(), *this, __first);
+     350              : #if !_GLIBCXX_USE_CXX11_ABI
+     351              :               _GLIBCXX20_ONLY( __removed++ );
+     352              : #endif
+     353              :             }
+     354              : 
+     355              :           __first = __next;
+     356              :         }
+     357              : 
+     358              : #if !_GLIBCXX_USE_CXX11_ABI
+     359              :         return _GLIBCXX20_ONLY( __removed );
+     360              : #else
+     361              :         return _GLIBCXX20_ONLY( __to_destroy.size() );
+     362              : #endif
+     363              :     }
+     364              : 
+     365              :   template<typename _Tp, typename _Alloc>
+     366              :     typename list<_Tp, _Alloc>::__remove_return_type
+     367              :     list<_Tp, _Alloc>::
+     368              :     unique()
+     369              :     {
+     370              :       iterator __first = begin();
+     371              :       iterator __last = end();
+     372              :       if (__first == __last)
+     373              :         return _GLIBCXX20_ONLY( 0 );
+     374              : #if !_GLIBCXX_USE_CXX11_ABI
+     375              :       size_type __removed __attribute__((__unused__)) = 0;
+     376              : #endif
+     377              :       list __to_destroy(get_allocator());
+     378              :       iterator __next = __first;
+     379              :       while (++__next != __last)
+     380              :         {
+     381              :           if (*__first == *__next)
+     382              :             {
+     383              :               __to_destroy.splice(__to_destroy.begin(), *this, __next);
+     384              : #if !_GLIBCXX_USE_CXX11_ABI
+     385              :               _GLIBCXX20_ONLY( __removed++ );
+     386              : #endif
+     387              :             }
+     388              :           else
+     389              :             __first = __next;
+     390              :           __next = __first;
+     391              :         }
+     392              : 
+     393              : #if !_GLIBCXX_USE_CXX11_ABI
+     394              :       return _GLIBCXX20_ONLY( __removed );
+     395              : #else
+     396              :       return _GLIBCXX20_ONLY( __to_destroy.size() );
+     397              : #endif
+     398              :     }
+     399              : 
+     400              :   template<typename _Tp, typename _Alloc>
+     401              :     void
+     402              :     list<_Tp, _Alloc>::
+     403              : #if __cplusplus >= 201103L
+     404              :     merge(list&& __x)
+     405              : #else
+     406              :     merge(list& __x)
+     407              : #endif
+     408              :     {
+     409              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     410              :       // 300. list::merge() specification incomplete
+     411              :       if (this != std::__addressof(__x))
+     412              :         {
+     413              :           _M_check_equal_allocators(__x);
+     414              : 
+     415              :           iterator __first1 = begin();
+     416              :           iterator __last1 = end();
+     417              :           iterator __first2 = __x.begin();
+     418              :           iterator __last2 = __x.end();
+     419              : 
+     420              :           const _Finalize_merge __fin(*this, __x, __first2);
+     421              : 
+     422              :           while (__first1 != __last1 && __first2 != __last2)
+     423              :             if (*__first2 < *__first1)
+     424              :               {
+     425              :                 iterator __next = __first2;
+     426              :                 _M_transfer(__first1, __first2, ++__next);
+     427              :                 __first2 = __next;
+     428              :               }
+     429              :             else
+     430              :               ++__first1;
+     431              :           if (__first2 != __last2)
+     432              :             {
+     433              :               _M_transfer(__last1, __first2, __last2);
+     434              :               __first2 = __last2;
+     435              :             }
+     436              :         }
+     437              :     }
+     438              : 
+     439              :   template<typename _Tp, typename _Alloc>
+     440              :     template <typename _StrictWeakOrdering>
+     441              :       void
+     442              :       list<_Tp, _Alloc>::
+     443              : #if __cplusplus >= 201103L
+     444              :       merge(list&& __x, _StrictWeakOrdering __comp)
+     445              : #else
+     446              :       merge(list& __x, _StrictWeakOrdering __comp)
+     447              : #endif
+     448              :       {
+     449              :         // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     450              :         // 300. list::merge() specification incomplete
+     451              :         if (this != std::__addressof(__x))
+     452              :           {
+     453              :             _M_check_equal_allocators(__x);
+     454              : 
+     455              :             iterator __first1 = begin();
+     456              :             iterator __last1 = end();
+     457              :             iterator __first2 = __x.begin();
+     458              :             iterator __last2 = __x.end();
+     459              : 
+     460              :             const _Finalize_merge __fin(*this, __x, __first2);
+     461              : 
+     462              :             while (__first1 != __last1 && __first2 != __last2)
+     463              :               if (__comp(*__first2, *__first1))
+     464              :                 {
+     465              :                   iterator __next = __first2;
+     466              :                   _M_transfer(__first1, __first2, ++__next);
+     467              :                   __first2 = __next;
+     468              :                 }
+     469              :               else
+     470              :                 ++__first1;
+     471              :             if (__first2 != __last2)
+     472              :               {
+     473              :                 _M_transfer(__last1, __first2, __last2);
+     474              :                 __first2 = __last2;
+     475              :               }
+     476              :           }
+     477              :       }
+     478              : 
+     479              :   template<typename _Tp, typename _Alloc>
+     480              :     void
+     481              :     list<_Tp, _Alloc>::
+     482              :     sort()
+     483              :     {
+     484              :       // Do nothing if the list has length 0 or 1.
+     485              :       if (this->_M_impl._M_node._M_next != &this->_M_impl._M_node
+     486              :           && this->_M_impl._M_node._M_next->_M_next != &this->_M_impl._M_node)
+     487              :       {
+     488              :         using __detail::_Scratch_list;
+     489              :         // The algorithm used here is largely unchanged from the SGI STL
+     490              :         // and is described in The C++ Standard Template Library by Plauger,
+     491              :         // Stepanov, Lee, Musser.
+     492              :         // Each element of *this is spliced out and merged into one of the
+     493              :         // sorted lists in __tmp, then all the lists in __tmp are merged
+     494              :         // together and then swapped back into *this.
+     495              :         // Because all nodes end up back in *this we do not need to update
+     496              :         // this->size() while nodes are temporarily moved out.
+     497              :         _Scratch_list __carry;
+     498              :         _Scratch_list __tmp[64];
+     499              :         _Scratch_list* __fill = __tmp;
+     500              :         _Scratch_list* __counter;
+     501              : 
+     502              :         _Scratch_list::_Ptr_cmp<iterator, void> __ptr_comp;
+     503              : 
+     504              :         __try
+     505              :           {
+     506              :             do
+     507              :               {
+     508              :                 __carry._M_take_one(begin()._M_node);
+     509              : 
+     510              :                 for(__counter = __tmp;
+     511              :                     __counter != __fill && !__counter->empty();
+     512              :                     ++__counter)
+     513              :                   {
+     514              : 
+     515              :                     __counter->merge(__carry, __ptr_comp);
+     516              :                     __carry.swap(*__counter);
+     517              :                   }
+     518              :                 __carry.swap(*__counter);
+     519              :                 if (__counter == __fill)
+     520              :                   ++__fill;
+     521              :               }
+     522              :             while ( !empty() );
+     523              : 
+     524              :             for (__counter = __tmp + 1; __counter != __fill; ++__counter)
+     525              :               __counter->merge(__counter[-1], __ptr_comp);
+     526              :             __fill[-1].swap(this->_M_impl._M_node);
+     527              :           }
+     528              :         __catch(...)
+     529              :           {
+     530              :             // Move all nodes back into *this.
+     531              :             __carry._M_put_all(end()._M_node);
+     532              :             for (int __i = 0; __i < sizeof(__tmp)/sizeof(__tmp[0]); ++__i)
+     533              :               __tmp[__i]._M_put_all(end()._M_node);
+     534              :             __throw_exception_again;
+     535              :           }
+     536              :       }
+     537              :     }
+     538              : 
+     539              :   template<typename _Tp, typename _Alloc>
+     540              :     template <typename _Predicate>
+     541              :       typename list<_Tp, _Alloc>::__remove_return_type
+     542              :       list<_Tp, _Alloc>::
+     543              :       remove_if(_Predicate __pred)
+     544              :       {
+     545              : #if !_GLIBCXX_USE_CXX11_ABI
+     546              :         size_type __removed __attribute__((__unused__)) = 0;
+     547              : #endif
+     548              :         list __to_destroy(get_allocator());
+     549              :         iterator __first = begin();
+     550              :         iterator __last = end();
+     551              :         while (__first != __last)
+     552              :           {
+     553              :             iterator __next = __first;
+     554              :             ++__next;
+     555              :             if (__pred(*__first))
+     556              :               {
+     557              :                 __to_destroy.splice(__to_destroy.begin(), *this, __first);
+     558              : #if !_GLIBCXX_USE_CXX11_ABI
+     559              :                 _GLIBCXX20_ONLY( __removed++ );
+     560              : #endif
+     561              :               }
+     562              :             __first = __next;
+     563              :           }
+     564              : 
+     565              : #if !_GLIBCXX_USE_CXX11_ABI
+     566              :         return _GLIBCXX20_ONLY( __removed );
+     567              : #else
+     568              :         return _GLIBCXX20_ONLY( __to_destroy.size() );
+     569              : #endif
+     570              :       }
+     571              : 
+     572              :   template<typename _Tp, typename _Alloc>
+     573              :     template <typename _BinaryPredicate>
+     574              :       typename list<_Tp, _Alloc>::__remove_return_type
+     575              :       list<_Tp, _Alloc>::
+     576              :       unique(_BinaryPredicate __binary_pred)
+     577              :       {
+     578              :         iterator __first = begin();
+     579              :         iterator __last = end();
+     580              :         if (__first == __last)
+     581              :           return _GLIBCXX20_ONLY(0);
+     582              : #if !_GLIBCXX_USE_CXX11_ABI
+     583              :         size_type __removed __attribute__((__unused__)) = 0;
+     584              : #endif
+     585              :         list __to_destroy(get_allocator());
+     586              :         iterator __next = __first;
+     587              :         while (++__next != __last)
+     588              :           {
+     589              :             if (__binary_pred(*__first, *__next))
+     590              :               {
+     591              :                 __to_destroy.splice(__to_destroy.begin(), *this, __next);
+     592              : #if !_GLIBCXX_USE_CXX11_ABI
+     593              :                 _GLIBCXX20_ONLY( __removed++ );
+     594              : #endif
+     595              :               }
+     596              :             else
+     597              :               __first = __next;
+     598              :             __next = __first;
+     599              :           }
+     600              : 
+     601              : #if !_GLIBCXX_USE_CXX11_ABI
+     602              :         return _GLIBCXX20_ONLY( __removed );
+     603              : #else
+     604              :         return _GLIBCXX20_ONLY( __to_destroy.size() );
+     605              : #endif
+     606              :       }
+     607              : 
+     608              : #undef _GLIBCXX20_ONLY
+     609              : 
+     610              :   template<typename _Tp, typename _Alloc>
+     611              :     template <typename _StrictWeakOrdering>
+     612              :       void
+     613              :       list<_Tp, _Alloc>::
+     614              :       sort(_StrictWeakOrdering __comp)
+     615              :       {
+     616              :         // Do nothing if the list has length 0 or 1.
+     617              :         if (this->_M_impl._M_node._M_next != &this->_M_impl._M_node
+     618              :             && this->_M_impl._M_node._M_next->_M_next != &this->_M_impl._M_node)
+     619              :         {
+     620              :           using __detail::_Scratch_list;
+     621              :           _Scratch_list __carry;
+     622              :           _Scratch_list __tmp[64];
+     623              :           _Scratch_list* __fill = __tmp;
+     624              :           _Scratch_list* __counter;
+     625              : 
+     626              :         _Scratch_list::_Ptr_cmp<iterator, _StrictWeakOrdering> __ptr_comp
+     627              :           = { __comp };
+     628              : 
+     629              :           __try
+     630              :             {
+     631              :               do
+     632              :                 {
+     633              :                   __carry._M_take_one(begin()._M_node);
+     634              : 
+     635              :                   for(__counter = __tmp;
+     636              :                       __counter != __fill && !__counter->empty();
+     637              :                       ++__counter)
+     638              :                     {
+     639              : 
+     640              :                       __counter->merge(__carry, __ptr_comp);
+     641              :                       __carry.swap(*__counter);
+     642              :                     }
+     643              :                   __carry.swap(*__counter);
+     644              :                   if (__counter == __fill)
+     645              :                     ++__fill;
+     646              :                 }
+     647              :               while ( !empty() );
+     648              : 
+     649              :               for (__counter = __tmp + 1; __counter != __fill; ++__counter)
+     650              :                 __counter->merge(__counter[-1], __ptr_comp);
+     651              :               __fill[-1].swap(this->_M_impl._M_node);
+     652              :             }
+     653              :           __catch(...)
+     654              :             {
+     655              :               // Move all nodes back into *this.
+     656              :               __carry._M_put_all(end()._M_node);
+     657              :               for (size_t __i = 0; __i < sizeof(__tmp)/sizeof(__tmp[0]); ++__i)
+     658              :                 __tmp[__i]._M_put_all(end()._M_node);
+     659              :               __throw_exception_again;
+     660              :             }
+     661              :         }
+     662              :       }
+     663              : 
+     664              : _GLIBCXX_END_NAMESPACE_CONTAINER
+     665              : _GLIBCXX_END_NAMESPACE_VERSION
+     666              : } // namespace std
+     667              : 
+     668              : #endif /* _LIST_TCC */
+     669              : 
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/locale_classes.tcc.func-c.html b/html/usr/include/c++/13/bits/locale_classes.tcc.func-c.html new file mode 100644 index 0000000..35a9102 --- /dev/null +++ b/html/usr/include/c++/13/bits/locale_classes.tcc.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/locale_classes.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - locale_classes.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %100
Test Date:2024-04-30 13:17:26Functions:0.0 %20
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt15__try_use_facetIKSt5ctypeIcEEPKT_RKSt6locale0
_ZSt9use_facetIKSt5ctypeIcEERKT_RKSt6locale0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/locale_classes.tcc.func.html b/html/usr/include/c++/13/bits/locale_classes.tcc.func.html new file mode 100644 index 0000000..01c5fe6 --- /dev/null +++ b/html/usr/include/c++/13/bits/locale_classes.tcc.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/locale_classes.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - locale_classes.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %100
Test Date:2024-04-30 13:17:26Functions:0.0 %20
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt15__try_use_facetIKSt5ctypeIcEEPKT_RKSt6locale0
_ZSt9use_facetIKSt5ctypeIcEERKT_RKSt6locale0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/locale_classes.tcc.gcov.html b/html/usr/include/c++/13/bits/locale_classes.tcc.gcov.html new file mode 100644 index 0000000..3fdb367 --- /dev/null +++ b/html/usr/include/c++/13/bits/locale_classes.tcc.gcov.html @@ -0,0 +1,443 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/locale_classes.tcc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - locale_classes.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %100
Test Date:2024-04-30 13:17:26Functions:0.0 %20
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Locale support -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2007-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/locale_classes.tcc
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{locale}
+      28              :  */
+      29              : 
+      30              : //
+      31              : // ISO C++ 14882: 22.1  Locales
+      32              : //
+      33              : 
+      34              : #ifndef _LOCALE_CLASSES_TCC
+      35              : #define _LOCALE_CLASSES_TCC 1
+      36              : 
+      37              : #pragma GCC system_header
+      38              : 
+      39              : namespace std _GLIBCXX_VISIBILITY(default)
+      40              : {
+      41              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      42              : 
+      43              :   template<typename _Facet>
+      44              :     locale::
+      45              :     locale(const locale& __other, _Facet* __f)
+      46              :     {
+      47              :       _M_impl = new _Impl(*__other._M_impl, 1);
+      48              : 
+      49              :       __try
+      50              :         { _M_impl->_M_install_facet(&_Facet::id, __f); }
+      51              :       __catch(...)
+      52              :         {
+      53              :           _M_impl->_M_remove_reference();
+      54              :           __throw_exception_again;
+      55              :         }
+      56              :       delete [] _M_impl->_M_names[0];
+      57              :       _M_impl->_M_names[0] = 0;   // Unnamed.
+      58              :     }
+      59              : 
+      60              :   template<typename _Facet>
+      61              :     locale
+      62              :     locale::
+      63              :     combine(const locale& __other) const
+      64              :     {
+      65              :       _Impl* __tmp = new _Impl(*_M_impl, 1);
+      66              :       __try
+      67              :         {
+      68              :           __tmp->_M_replace_facet(__other._M_impl, &_Facet::id);
+      69              :         }
+      70              :       __catch(...)
+      71              :         {
+      72              :           __tmp->_M_remove_reference();
+      73              :           __throw_exception_again;
+      74              :         }
+      75              :       return locale(__tmp);
+      76              :     }
+      77              : 
+      78              :   template<typename _CharT, typename _Traits, typename _Alloc>
+      79              :     bool
+      80              :     locale::
+      81              :     operator()(const basic_string<_CharT, _Traits, _Alloc>& __s1,
+      82              :                const basic_string<_CharT, _Traits, _Alloc>& __s2) const
+      83              :     {
+      84              :       typedef std::collate<_CharT> __collate_type;
+      85              :       const __collate_type& __collate = use_facet<__collate_type>(*this);
+      86              :       return (__collate.compare(__s1.data(), __s1.data() + __s1.length(),
+      87              :                                 __s2.data(), __s2.data() + __s2.length()) < 0);
+      88              :     }
+      89              : 
+      90              :   template<typename _Facet>
+      91              :     inline const _Facet*
+      92            0 :     __try_use_facet(const locale& __loc) _GLIBCXX_NOTHROW
+      93              :     {
+      94            0 :       const size_t __i = _Facet::id._M_id();
+      95            0 :       const locale::facet** __facets = __loc._M_impl->_M_facets;
+      96              : 
+      97              :       // We know these standard facets are always installed in every locale
+      98              :       // so dynamic_cast always succeeds, just use static_cast instead.
+      99              : #define _GLIBCXX_STD_FACET(...) \
+     100              :       if _GLIBCXX17_CONSTEXPR (__is_same(_Facet, __VA_ARGS__)) \
+     101              :         return static_cast<const _Facet*>(__facets[__i])
+     102              : 
+     103              :       _GLIBCXX_STD_FACET(ctype<char>);
+     104              :       _GLIBCXX_STD_FACET(num_get<char>);
+     105              :       _GLIBCXX_STD_FACET(num_put<char>);
+     106              :       _GLIBCXX_STD_FACET(codecvt<char, char, mbstate_t>);
+     107              :       _GLIBCXX_STD_FACET(collate<char>);
+     108              :       _GLIBCXX_STD_FACET(moneypunct<char>);
+     109              :       _GLIBCXX_STD_FACET(moneypunct<char, true>);
+     110              :       _GLIBCXX_STD_FACET(money_get<char>);
+     111              :       _GLIBCXX_STD_FACET(money_put<char>);
+     112              :       _GLIBCXX_STD_FACET(numpunct<char>);
+     113              :       _GLIBCXX_STD_FACET(time_get<char>);
+     114              :       _GLIBCXX_STD_FACET(time_put<char>);
+     115              :       _GLIBCXX_STD_FACET(messages<char>);
+     116              : 
+     117              : #ifdef _GLIBCXX_USE_WCHAR_T
+     118              :       _GLIBCXX_STD_FACET(ctype<wchar_t>);
+     119              :       _GLIBCXX_STD_FACET(num_get<wchar_t>);
+     120              :       _GLIBCXX_STD_FACET(num_put<wchar_t>);
+     121              :       _GLIBCXX_STD_FACET(codecvt<wchar_t, char, mbstate_t>);
+     122              :       _GLIBCXX_STD_FACET(collate<wchar_t>);
+     123              :       _GLIBCXX_STD_FACET(moneypunct<wchar_t>);
+     124              :       _GLIBCXX_STD_FACET(moneypunct<wchar_t, true>);
+     125              :       _GLIBCXX_STD_FACET(money_get<wchar_t>);
+     126              :       _GLIBCXX_STD_FACET(money_put<wchar_t>);
+     127              :       _GLIBCXX_STD_FACET(numpunct<wchar_t>);
+     128              :       _GLIBCXX_STD_FACET(time_get<wchar_t>);
+     129              :       _GLIBCXX_STD_FACET(time_put<wchar_t>);
+     130              :       _GLIBCXX_STD_FACET(messages<wchar_t>);
+     131              : #endif
+     132              : #if __cplusplus >= 201103L
+     133              :       _GLIBCXX_STD_FACET(codecvt<char16_t, char, mbstate_t>);
+     134              :       _GLIBCXX_STD_FACET(codecvt<char32_t, char, mbstate_t>);
+     135              : #endif
+     136              : 
+     137              : #undef _GLIBCXX_STD_FACET
+     138              : 
+     139            0 :       if (__i >= __loc._M_impl->_M_facets_size || !__facets[__i])
+     140            0 :         return 0;
+     141              : 
+     142              : #if __cpp_rtti
+     143            0 :       return dynamic_cast<const _Facet*>(__facets[__i]);
+     144              : #else
+     145              :       return static_cast<const _Facet*>(__facets[__i]);
+     146              : #endif
+     147              :     }
+     148              : 
+     149              :   /**
+     150              :    *  @brief  Test for the presence of a facet.
+     151              :    *  @ingroup locales
+     152              :    *
+     153              :    *  has_facet tests the locale argument for the presence of the facet type
+     154              :    *  provided as the template parameter.  Facets derived from the facet
+     155              :    *  parameter will also return true.
+     156              :    *
+     157              :    *  @tparam  _Facet  The facet type to test the presence of.
+     158              :    *  @param  __loc  The locale to test.
+     159              :    *  @return  true if @p __loc contains a facet of type _Facet, else false.
+     160              :   */
+     161              :   template<typename _Facet>
+     162              :     inline bool
+     163              :     has_facet(const locale& __loc) throw()
+     164              :     {
+     165              : #if __cplusplus >= 201103L
+     166              :       static_assert(__is_base_of(locale::facet, _Facet),
+     167              :                     "template argument must be derived from locale::facet");
+     168              : #else
+     169              :       (void) static_cast<const _Facet*>(static_cast<const locale::facet*>(0));
+     170              : #endif
+     171              :       return std::__try_use_facet<_Facet>(__loc) != 0;
+     172              :     }
+     173              : 
+     174              :   /**
+     175              :    *  @brief  Return a facet.
+     176              :    *  @ingroup locales
+     177              :    *
+     178              :    *  use_facet looks for and returns a reference to a facet of type Facet
+     179              :    *  where Facet is the template parameter.  If has_facet(locale) is true,
+     180              :    *  there is a suitable facet to return.  It throws std::bad_cast if the
+     181              :    *  locale doesn't contain a facet of type Facet.
+     182              :    *
+     183              :    *  @tparam  _Facet  The facet type to access.
+     184              :    *  @param  __loc  The locale to use.
+     185              :    *  @return  Reference to facet of type Facet.
+     186              :    *  @throw  std::bad_cast if @p __loc doesn't contain a facet of type _Facet.
+     187              :   */
+     188              : #pragma GCC diagnostic push
+     189              : #pragma GCC diagnostic ignored "-Wdangling-reference"
+     190              :   template<typename _Facet>
+     191              :     inline const _Facet&
+     192            0 :     use_facet(const locale& __loc)
+     193              :     {
+     194              : #if __cplusplus >= 201103L
+     195              :       static_assert(__is_base_of(locale::facet, _Facet),
+     196              :                     "template argument must be derived from locale::facet");
+     197              : #else
+     198              :       (void) static_cast<const _Facet*>(static_cast<const locale::facet*>(0));
+     199              : #endif
+     200            0 :       if (const _Facet* __f = std::__try_use_facet<_Facet>(__loc))
+     201            0 :         return *__f;
+     202            0 :       __throw_bad_cast();
+     203              :     }
+     204              : #pragma GCC diagnostic pop
+     205              : 
+     206              : 
+     207              :   // Generic version does nothing.
+     208              :   template<typename _CharT>
+     209              :     int
+     210              :     collate<_CharT>::_M_compare(const _CharT*, const _CharT*) const throw ()
+     211              :     { return 0; }
+     212              : 
+     213              :   // Generic version does nothing.
+     214              :   template<typename _CharT>
+     215              :     size_t
+     216              :     collate<_CharT>::_M_transform(_CharT*, const _CharT*, size_t) const throw ()
+     217              :     { return 0; }
+     218              : 
+     219              :   template<typename _CharT>
+     220              :     int
+     221              :     collate<_CharT>::
+     222              :     do_compare(const _CharT* __lo1, const _CharT* __hi1,
+     223              :                const _CharT* __lo2, const _CharT* __hi2) const
+     224              :     {
+     225              :       // strcoll assumes zero-terminated strings so we make a copy
+     226              :       // and then put a zero at the end.
+     227              :       const string_type __one(__lo1, __hi1);
+     228              :       const string_type __two(__lo2, __hi2);
+     229              : 
+     230              :       const _CharT* __p = __one.c_str();
+     231              :       const _CharT* __pend = __one.data() + __one.length();
+     232              :       const _CharT* __q = __two.c_str();
+     233              :       const _CharT* __qend = __two.data() + __two.length();
+     234              : 
+     235              :       // strcoll stops when it sees a nul character so we break
+     236              :       // the strings into zero-terminated substrings and pass those
+     237              :       // to strcoll.
+     238              :       for (;;)
+     239              :         {
+     240              :           const int __res = _M_compare(__p, __q);
+     241              :           if (__res)
+     242              :             return __res;
+     243              : 
+     244              :           __p += char_traits<_CharT>::length(__p);
+     245              :           __q += char_traits<_CharT>::length(__q);
+     246              :           if (__p == __pend && __q == __qend)
+     247              :             return 0;
+     248              :           else if (__p == __pend)
+     249              :             return -1;
+     250              :           else if (__q == __qend)
+     251              :             return 1;
+     252              : 
+     253              :           __p++;
+     254              :           __q++;
+     255              :         }
+     256              :     }
+     257              : 
+     258              :   template<typename _CharT>
+     259              :     typename collate<_CharT>::string_type
+     260              :     collate<_CharT>::
+     261              :     do_transform(const _CharT* __lo, const _CharT* __hi) const
+     262              :     {
+     263              :       string_type __ret;
+     264              : 
+     265              :       // strxfrm assumes zero-terminated strings so we make a copy
+     266              :       const string_type __str(__lo, __hi);
+     267              : 
+     268              :       const _CharT* __p = __str.c_str();
+     269              :       const _CharT* __pend = __str.data() + __str.length();
+     270              : 
+     271              :       size_t __len = (__hi - __lo) * 2;
+     272              : 
+     273              :       _CharT* __c = new _CharT[__len];
+     274              : 
+     275              :       __try
+     276              :         {
+     277              :           // strxfrm stops when it sees a nul character so we break
+     278              :           // the string into zero-terminated substrings and pass those
+     279              :           // to strxfrm.
+     280              :           for (;;)
+     281              :             {
+     282              :               // First try a buffer perhaps big enough.
+     283              :               size_t __res = _M_transform(__c, __p, __len);
+     284              :               // If the buffer was not large enough, try again with the
+     285              :               // correct size.
+     286              :               if (__res >= __len)
+     287              :                 {
+     288              :                   __len = __res + 1;
+     289              :                   delete [] __c, __c = 0;
+     290              :                   __c = new _CharT[__len];
+     291              :                   __res = _M_transform(__c, __p, __len);
+     292              :                 }
+     293              : 
+     294              :               __ret.append(__c, __res);
+     295              :               __p += char_traits<_CharT>::length(__p);
+     296              :               if (__p == __pend)
+     297              :                 break;
+     298              : 
+     299              :               __p++;
+     300              :               __ret.push_back(_CharT());
+     301              :             }
+     302              :         }
+     303              :       __catch(...)
+     304              :         {
+     305              :           delete [] __c;
+     306              :           __throw_exception_again;
+     307              :         }
+     308              : 
+     309              :       delete [] __c;
+     310              : 
+     311              :       return __ret;
+     312              :     }
+     313              : 
+     314              :   template<typename _CharT>
+     315              :     long
+     316              :     collate<_CharT>::
+     317              :     do_hash(const _CharT* __lo, const _CharT* __hi) const
+     318              :     {
+     319              :       unsigned long __val = 0;
+     320              :       for (; __lo < __hi; ++__lo)
+     321              :         __val =
+     322              :           *__lo + ((__val << 7)
+     323              :                    | (__val >> (__gnu_cxx::__numeric_traits<unsigned long>::
+     324              :                                 __digits - 7)));
+     325              :       return static_cast<long>(__val);
+     326              :     }
+     327              : 
+     328              :   // Inhibit implicit instantiations for required instantiations,
+     329              :   // which are defined via explicit instantiations elsewhere.
+     330              : #if _GLIBCXX_EXTERN_TEMPLATE
+     331              :   extern template class collate<char>;
+     332              :   extern template class collate_byname<char>;
+     333              : 
+     334              :   extern template
+     335              :     const collate<char>*
+     336              :     __try_use_facet<collate<char> >(const locale&) _GLIBCXX_NOTHROW;
+     337              : 
+     338              :   extern template
+     339              :     const collate<char>&
+     340              :     use_facet<collate<char> >(const locale&);
+     341              : 
+     342              :   extern template
+     343              :     bool
+     344              :     has_facet<collate<char> >(const locale&);
+     345              : 
+     346              : #ifdef _GLIBCXX_USE_WCHAR_T
+     347              :   extern template class collate<wchar_t>;
+     348              :   extern template class collate_byname<wchar_t>;
+     349              : 
+     350              :   extern template
+     351              :     const collate<wchar_t>*
+     352              :     __try_use_facet<collate<wchar_t> >(const locale&) _GLIBCXX_NOTHROW;
+     353              : 
+     354              :   extern template
+     355              :     const collate<wchar_t>&
+     356              :     use_facet<collate<wchar_t> >(const locale&);
+     357              : 
+     358              :   extern template
+     359              :     bool
+     360              :     has_facet<collate<wchar_t> >(const locale&);
+     361              : #endif
+     362              : #endif
+     363              : 
+     364              : _GLIBCXX_END_NAMESPACE_VERSION
+     365              : } // namespace std
+     366              : 
+     367              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/locale_facets.h.func-c.html b/html/usr/include/c++/13/bits/locale_facets.h.func-c.html new file mode 100644 index 0000000..6ea63e1 --- /dev/null +++ b/html/usr/include/c++/13/bits/locale_facets.h.func-c.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/locale_facets.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - locale_facets.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %180
Test Date:2024-04-30 13:17:26Functions:0.0 %50
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt5ctypeIcE5widenEc0
_ZNKSt5ctypeIcE6narrowEcc0
_ZNKSt5ctypeIcE7tolowerEPcPKc0
_ZNKSt5ctypeIcE7tolowerEc0
_ZNKSt5ctypeIcE7toupperEc0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/locale_facets.h.func.html b/html/usr/include/c++/13/bits/locale_facets.h.func.html new file mode 100644 index 0000000..e48cfb4 --- /dev/null +++ b/html/usr/include/c++/13/bits/locale_facets.h.func.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/locale_facets.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - locale_facets.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %180
Test Date:2024-04-30 13:17:26Functions:0.0 %50
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt5ctypeIcE5widenEc0
_ZNKSt5ctypeIcE6narrowEcc0
_ZNKSt5ctypeIcE7tolowerEPcPKc0
_ZNKSt5ctypeIcE7tolowerEc0
_ZNKSt5ctypeIcE7toupperEc0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/locale_facets.h.gcov.html b/html/usr/include/c++/13/bits/locale_facets.h.gcov.html new file mode 100644 index 0000000..0bca26e --- /dev/null +++ b/html/usr/include/c++/13/bits/locale_facets.h.gcov.html @@ -0,0 +1,2765 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/locale_facets.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - locale_facets.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %180
Test Date:2024-04-30 13:17:26Functions:0.0 %50
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Locale support -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 1997-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/locale_facets.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{locale}
+      28              :  */
+      29              : 
+      30              : //
+      31              : // ISO C++ 14882: 22.1  Locales
+      32              : //
+      33              : 
+      34              : #ifndef _LOCALE_FACETS_H
+      35              : #define _LOCALE_FACETS_H 1
+      36              : 
+      37              : #pragma GCC system_header
+      38              : 
+      39              : #include <cwctype>        // For wctype_t
+      40              : #include <cctype>
+      41              : #include <bits/ctype_base.h>
+      42              : #include <iosfwd>
+      43              : #include <bits/ios_base.h>  // For ios_base, ios_base::iostate
+      44              : #include <streambuf>
+      45              : #include <bits/cpp_type_traits.h>
+      46              : #include <ext/type_traits.h>
+      47              : #include <ext/numeric_traits.h>
+      48              : #include <bits/streambuf_iterator.h>
+      49              : 
+      50              : namespace std _GLIBCXX_VISIBILITY(default)
+      51              : {
+      52              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      53              : 
+      54              : // Number of standard facets (for narrow characters only)
+      55              : #define  _GLIBCXX_NUM_FACETS 14
+      56              : 
+      57              : // Number of duplicated facets for cxx11 ABI
+      58              : #define  _GLIBCXX_NUM_CXX11_FACETS (_GLIBCXX_USE_DUAL_ABI ? 8 : 0)
+      59              : 
+      60              : // codecvt<char16_t> and codecvt<char32_t>
+      61              : #ifdef _GLIBCXX_USE_CHAR8_T
+      62              : # define _GLIBCXX_NUM_UNICODE_FACETS 4
+      63              : #else
+      64              : # define _GLIBCXX_NUM_UNICODE_FACETS 2
+      65              : #endif
+      66              : 
+      67              : // Facets duplicated for alt128 long double format
+      68              : // num_get, num_put, money_get, money_put (+ cxx11 money_get, money_put)
+      69              : #define _GLIBCXX_NUM_LBDL_ALT128_FACETS (4 + (_GLIBCXX_USE_DUAL_ABI ? 2 : 0))
+      70              : 
+      71              :   // Convert string to numeric value of type _Tp and store results.
+      72              :   // NB: This is specialized for all required types, there is no
+      73              :   // generic definition.
+      74              :   template<typename _Tp>
+      75              :     void
+      76              :     __convert_to_v(const char*, _Tp&, ios_base::iostate&,
+      77              :                    const __c_locale&) throw();
+      78              : 
+      79              :   // Explicit specializations for required types.
+      80              :   template<>
+      81              :     void
+      82              :     __convert_to_v(const char*, float&, ios_base::iostate&,
+      83              :                    const __c_locale&) throw();
+      84              : 
+      85              :   template<>
+      86              :     void
+      87              :     __convert_to_v(const char*, double&, ios_base::iostate&,
+      88              :                    const __c_locale&) throw();
+      89              : 
+      90              :   template<>
+      91              :     void
+      92              :     __convert_to_v(const char*, long double&, ios_base::iostate&,
+      93              :                    const __c_locale&) throw();
+      94              : 
+      95              :   // NB: __pad is a struct, rather than a function, so it can be
+      96              :   // partially-specialized.
+      97              :   template<typename _CharT, typename _Traits>
+      98              :     struct __pad
+      99              :     {
+     100              :       static void
+     101              :       _S_pad(ios_base& __io, _CharT __fill, _CharT* __news,
+     102              :              const _CharT* __olds, streamsize __newlen, streamsize __oldlen);
+     103              :     };
+     104              : 
+     105              :   // Used by both numeric and monetary facets.
+     106              :   // Inserts "group separator" characters into an array of characters.
+     107              :   // It's recursive, one iteration per group.  It moves the characters
+     108              :   // in the buffer this way: "xxxx12345" -> "12,345xxx".  Call this
+     109              :   // only with __gsize != 0.
+     110              :   template<typename _CharT>
+     111              :     _CharT*
+     112              :     __add_grouping(_CharT* __s, _CharT __sep,
+     113              :                    const char* __gbeg, size_t __gsize,
+     114              :                    const _CharT* __first, const _CharT* __last);
+     115              : 
+     116              :   // This template permits specializing facet output code for
+     117              :   // ostreambuf_iterator.  For ostreambuf_iterator, sputn is
+     118              :   // significantly more efficient than incrementing iterators.
+     119              :   template<typename _CharT>
+     120              :     inline
+     121              :     ostreambuf_iterator<_CharT>
+     122              :     __write(ostreambuf_iterator<_CharT> __s, const _CharT* __ws, int __len)
+     123              :     {
+     124              :       __s._M_put(__ws, __len);
+     125              :       return __s;
+     126              :     }
+     127              : 
+     128              :   // This is the unspecialized form of the template.
+     129              :   template<typename _CharT, typename _OutIter>
+     130              :     inline
+     131              :     _OutIter
+     132              :     __write(_OutIter __s, const _CharT* __ws, int __len)
+     133              :     {
+     134              :       for (int __j = 0; __j < __len; __j++, ++__s)
+     135              :         *__s = __ws[__j];
+     136              :       return __s;
+     137              :     }
+     138              : 
+     139              : 
+     140              :   // 22.2.1.1  Template class ctype
+     141              :   // Include host and configuration specific ctype enums for ctype_base.
+     142              : 
+     143              :   /**
+     144              :    *  @brief  Common base for ctype facet
+     145              :    *
+     146              :    *  This template class provides implementations of the public functions
+     147              :    *  that forward to the protected virtual functions.
+     148              :    *
+     149              :    *  This template also provides abstract stubs for the protected virtual
+     150              :    *  functions.
+     151              :   */
+     152              :   template<typename _CharT>
+     153              :     class __ctype_abstract_base : public locale::facet, public ctype_base
+     154              :     {
+     155              :     public:
+     156              :       // Types:
+     157              :       /// Typedef for the template parameter
+     158              :       typedef _CharT char_type;
+     159              : 
+     160              :       /**
+     161              :        *  @brief  Test char_type classification.
+     162              :        *
+     163              :        *  This function finds a mask M for @a __c and compares it to
+     164              :        *  mask @a __m.  It does so by returning the value of
+     165              :        *  ctype<char_type>::do_is().
+     166              :        *
+     167              :        *  @param __c  The char_type to compare the mask of.
+     168              :        *  @param __m  The mask to compare against.
+     169              :        *  @return  (M & __m) != 0.
+     170              :       */
+     171              :       bool
+     172              :       is(mask __m, char_type __c) const
+     173              :       { return this->do_is(__m, __c); }
+     174              : 
+     175              :       /**
+     176              :        *  @brief  Return a mask array.
+     177              :        *
+     178              :        *  This function finds the mask for each char_type in the range [lo,hi)
+     179              :        *  and successively writes it to vec.  vec must have as many elements
+     180              :        *  as the char array.  It does so by returning the value of
+     181              :        *  ctype<char_type>::do_is().
+     182              :        *
+     183              :        *  @param __lo  Pointer to start of range.
+     184              :        *  @param __hi  Pointer to end of range.
+     185              :        *  @param __vec  Pointer to an array of mask storage.
+     186              :        *  @return  @a __hi.
+     187              :       */
+     188              :       const char_type*
+     189              :       is(const char_type *__lo, const char_type *__hi, mask *__vec) const
+     190              :       { return this->do_is(__lo, __hi, __vec); }
+     191              : 
+     192              :       /**
+     193              :        *  @brief  Find char_type matching a mask
+     194              :        *
+     195              :        *  This function searches for and returns the first char_type c in
+     196              :        *  [lo,hi) for which is(m,c) is true.  It does so by returning
+     197              :        *  ctype<char_type>::do_scan_is().
+     198              :        *
+     199              :        *  @param __m  The mask to compare against.
+     200              :        *  @param __lo  Pointer to start of range.
+     201              :        *  @param __hi  Pointer to end of range.
+     202              :        *  @return  Pointer to matching char_type if found, else @a __hi.
+     203              :       */
+     204              :       const char_type*
+     205              :       scan_is(mask __m, const char_type* __lo, const char_type* __hi) const
+     206              :       { return this->do_scan_is(__m, __lo, __hi); }
+     207              : 
+     208              :       /**
+     209              :        *  @brief  Find char_type not matching a mask
+     210              :        *
+     211              :        *  This function searches for and returns the first char_type c in
+     212              :        *  [lo,hi) for which is(m,c) is false.  It does so by returning
+     213              :        *  ctype<char_type>::do_scan_not().
+     214              :        *
+     215              :        *  @param __m  The mask to compare against.
+     216              :        *  @param __lo  Pointer to first char in range.
+     217              :        *  @param __hi  Pointer to end of range.
+     218              :        *  @return  Pointer to non-matching char if found, else @a __hi.
+     219              :       */
+     220              :       const char_type*
+     221              :       scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
+     222              :       { return this->do_scan_not(__m, __lo, __hi); }
+     223              : 
+     224              :       /**
+     225              :        *  @brief  Convert to uppercase.
+     226              :        *
+     227              :        *  This function converts the argument to uppercase if possible.
+     228              :        *  If not possible (for example, '2'), returns the argument.  It does
+     229              :        *  so by returning ctype<char_type>::do_toupper().
+     230              :        *
+     231              :        *  @param __c  The char_type to convert.
+     232              :        *  @return  The uppercase char_type if convertible, else @a __c.
+     233              :       */
+     234              :       char_type
+     235              :       toupper(char_type __c) const
+     236              :       { return this->do_toupper(__c); }
+     237              : 
+     238              :       /**
+     239              :        *  @brief  Convert array to uppercase.
+     240              :        *
+     241              :        *  This function converts each char_type in the range [lo,hi) to
+     242              :        *  uppercase if possible.  Other elements remain untouched.  It does so
+     243              :        *  by returning ctype<char_type>:: do_toupper(lo, hi).
+     244              :        *
+     245              :        *  @param __lo  Pointer to start of range.
+     246              :        *  @param __hi  Pointer to end of range.
+     247              :        *  @return  @a __hi.
+     248              :       */
+     249              :       const char_type*
+     250              :       toupper(char_type *__lo, const char_type* __hi) const
+     251              :       { return this->do_toupper(__lo, __hi); }
+     252              : 
+     253              :       /**
+     254              :        *  @brief  Convert to lowercase.
+     255              :        *
+     256              :        *  This function converts the argument to lowercase if possible.  If
+     257              :        *  not possible (for example, '2'), returns the argument.  It does so
+     258              :        *  by returning ctype<char_type>::do_tolower(c).
+     259              :        *
+     260              :        *  @param __c  The char_type to convert.
+     261              :        *  @return  The lowercase char_type if convertible, else @a __c.
+     262              :       */
+     263              :       char_type
+     264              :       tolower(char_type __c) const
+     265              :       { return this->do_tolower(__c); }
+     266              : 
+     267              :       /**
+     268              :        *  @brief  Convert array to lowercase.
+     269              :        *
+     270              :        *  This function converts each char_type in the range [__lo,__hi) to
+     271              :        *  lowercase if possible.  Other elements remain untouched.  It does so
+     272              :        *  by returning ctype<char_type>:: do_tolower(__lo, __hi).
+     273              :        *
+     274              :        *  @param __lo  Pointer to start of range.
+     275              :        *  @param __hi  Pointer to end of range.
+     276              :        *  @return  @a __hi.
+     277              :       */
+     278              :       const char_type*
+     279              :       tolower(char_type* __lo, const char_type* __hi) const
+     280              :       { return this->do_tolower(__lo, __hi); }
+     281              : 
+     282              :       /**
+     283              :        *  @brief  Widen char to char_type
+     284              :        *
+     285              :        *  This function converts the char argument to char_type using the
+     286              :        *  simplest reasonable transformation.  It does so by returning
+     287              :        *  ctype<char_type>::do_widen(c).
+     288              :        *
+     289              :        *  Note: this is not what you want for codepage conversions.  See
+     290              :        *  codecvt for that.
+     291              :        *
+     292              :        *  @param __c  The char to convert.
+     293              :        *  @return  The converted char_type.
+     294              :       */
+     295              :       char_type
+     296              :       widen(char __c) const
+     297              :       { return this->do_widen(__c); }
+     298              : 
+     299              :       /**
+     300              :        *  @brief  Widen array to char_type
+     301              :        *
+     302              :        *  This function converts each char in the input to char_type using the
+     303              :        *  simplest reasonable transformation.  It does so by returning
+     304              :        *  ctype<char_type>::do_widen(c).
+     305              :        *
+     306              :        *  Note: this is not what you want for codepage conversions.  See
+     307              :        *  codecvt for that.
+     308              :        *
+     309              :        *  @param __lo  Pointer to start of range.
+     310              :        *  @param __hi  Pointer to end of range.
+     311              :        *  @param __to  Pointer to the destination array.
+     312              :        *  @return  @a __hi.
+     313              :       */
+     314              :       const char*
+     315              :       widen(const char* __lo, const char* __hi, char_type* __to) const
+     316              :       { return this->do_widen(__lo, __hi, __to); }
+     317              : 
+     318              :       /**
+     319              :        *  @brief  Narrow char_type to char
+     320              :        *
+     321              :        *  This function converts the char_type to char using the simplest
+     322              :        *  reasonable transformation.  If the conversion fails, dfault is
+     323              :        *  returned instead.  It does so by returning
+     324              :        *  ctype<char_type>::do_narrow(__c).
+     325              :        *
+     326              :        *  Note: this is not what you want for codepage conversions.  See
+     327              :        *  codecvt for that.
+     328              :        *
+     329              :        *  @param __c  The char_type to convert.
+     330              :        *  @param __dfault  Char to return if conversion fails.
+     331              :        *  @return  The converted char.
+     332              :       */
+     333              :       char
+     334              :       narrow(char_type __c, char __dfault) const
+     335              :       { return this->do_narrow(__c, __dfault); }
+     336              : 
+     337              :       /**
+     338              :        *  @brief  Narrow array to char array
+     339              :        *
+     340              :        *  This function converts each char_type in the input to char using the
+     341              :        *  simplest reasonable transformation and writes the results to the
+     342              :        *  destination array.  For any char_type in the input that cannot be
+     343              :        *  converted, @a dfault is used instead.  It does so by returning
+     344              :        *  ctype<char_type>::do_narrow(__lo, __hi, __dfault, __to).
+     345              :        *
+     346              :        *  Note: this is not what you want for codepage conversions.  See
+     347              :        *  codecvt for that.
+     348              :        *
+     349              :        *  @param __lo  Pointer to start of range.
+     350              :        *  @param __hi  Pointer to end of range.
+     351              :        *  @param __dfault  Char to use if conversion fails.
+     352              :        *  @param __to  Pointer to the destination array.
+     353              :        *  @return  @a __hi.
+     354              :       */
+     355              :       const char_type*
+     356              :       narrow(const char_type* __lo, const char_type* __hi,
+     357              :               char __dfault, char* __to) const
+     358              :       { return this->do_narrow(__lo, __hi, __dfault, __to); }
+     359              : 
+     360              :     protected:
+     361              :       explicit
+     362              :       __ctype_abstract_base(size_t __refs = 0): facet(__refs) { }
+     363              : 
+     364              :       virtual
+     365              :       ~__ctype_abstract_base() { }
+     366              : 
+     367              :       /**
+     368              :        *  @brief  Test char_type classification.
+     369              :        *
+     370              :        *  This function finds a mask M for @a c and compares it to mask @a m.
+     371              :        *
+     372              :        *  do_is() is a hook for a derived facet to change the behavior of
+     373              :        *  classifying.  do_is() must always return the same result for the
+     374              :        *  same input.
+     375              :        *
+     376              :        *  @param __c  The char_type to find the mask of.
+     377              :        *  @param __m  The mask to compare against.
+     378              :        *  @return  (M & __m) != 0.
+     379              :       */
+     380              :       virtual bool
+     381              :       do_is(mask __m, char_type __c) const = 0;
+     382              : 
+     383              :       /**
+     384              :        *  @brief  Return a mask array.
+     385              :        *
+     386              :        *  This function finds the mask for each char_type in the range [lo,hi)
+     387              :        *  and successively writes it to vec.  vec must have as many elements
+     388              :        *  as the input.
+     389              :        *
+     390              :        *  do_is() is a hook for a derived facet to change the behavior of
+     391              :        *  classifying.  do_is() must always return the same result for the
+     392              :        *  same input.
+     393              :        *
+     394              :        *  @param __lo  Pointer to start of range.
+     395              :        *  @param __hi  Pointer to end of range.
+     396              :        *  @param __vec  Pointer to an array of mask storage.
+     397              :        *  @return  @a __hi.
+     398              :       */
+     399              :       virtual const char_type*
+     400              :       do_is(const char_type* __lo, const char_type* __hi,
+     401              :             mask* __vec) const = 0;
+     402              : 
+     403              :       /**
+     404              :        *  @brief  Find char_type matching mask
+     405              :        *
+     406              :        *  This function searches for and returns the first char_type c in
+     407              :        *  [__lo,__hi) for which is(__m,c) is true.
+     408              :        *
+     409              :        *  do_scan_is() is a hook for a derived facet to change the behavior of
+     410              :        *  match searching.  do_is() must always return the same result for the
+     411              :        *  same input.
+     412              :        *
+     413              :        *  @param __m  The mask to compare against.
+     414              :        *  @param __lo  Pointer to start of range.
+     415              :        *  @param __hi  Pointer to end of range.
+     416              :        *  @return  Pointer to a matching char_type if found, else @a __hi.
+     417              :       */
+     418              :       virtual const char_type*
+     419              :       do_scan_is(mask __m, const char_type* __lo,
+     420              :                  const char_type* __hi) const = 0;
+     421              : 
+     422              :       /**
+     423              :        *  @brief  Find char_type not matching mask
+     424              :        *
+     425              :        *  This function searches for and returns a pointer to the first
+     426              :        *  char_type c of [lo,hi) for which is(m,c) is false.
+     427              :        *
+     428              :        *  do_scan_is() is a hook for a derived facet to change the behavior of
+     429              :        *  match searching.  do_is() must always return the same result for the
+     430              :        *  same input.
+     431              :        *
+     432              :        *  @param __m  The mask to compare against.
+     433              :        *  @param __lo  Pointer to start of range.
+     434              :        *  @param __hi  Pointer to end of range.
+     435              :        *  @return  Pointer to a non-matching char_type if found, else @a __hi.
+     436              :       */
+     437              :       virtual const char_type*
+     438              :       do_scan_not(mask __m, const char_type* __lo,
+     439              :                   const char_type* __hi) const = 0;
+     440              : 
+     441              :       /**
+     442              :        *  @brief  Convert to uppercase.
+     443              :        *
+     444              :        *  This virtual function converts the char_type argument to uppercase
+     445              :        *  if possible.  If not possible (for example, '2'), returns the
+     446              :        *  argument.
+     447              :        *
+     448              :        *  do_toupper() is a hook for a derived facet to change the behavior of
+     449              :        *  uppercasing.  do_toupper() must always return the same result for
+     450              :        *  the same input.
+     451              :        *
+     452              :        *  @param __c  The char_type to convert.
+     453              :        *  @return  The uppercase char_type if convertible, else @a __c.
+     454              :       */
+     455              :       virtual char_type
+     456              :       do_toupper(char_type __c) const = 0;
+     457              : 
+     458              :       /**
+     459              :        *  @brief  Convert array to uppercase.
+     460              :        *
+     461              :        *  This virtual function converts each char_type in the range [__lo,__hi)
+     462              :        *  to uppercase if possible.  Other elements remain untouched.
+     463              :        *
+     464              :        *  do_toupper() is a hook for a derived facet to change the behavior of
+     465              :        *  uppercasing.  do_toupper() must always return the same result for
+     466              :        *  the same input.
+     467              :        *
+     468              :        *  @param __lo  Pointer to start of range.
+     469              :        *  @param __hi  Pointer to end of range.
+     470              :        *  @return  @a __hi.
+     471              :       */
+     472              :       virtual const char_type*
+     473              :       do_toupper(char_type* __lo, const char_type* __hi) const = 0;
+     474              : 
+     475              :       /**
+     476              :        *  @brief  Convert to lowercase.
+     477              :        *
+     478              :        *  This virtual function converts the argument to lowercase if
+     479              :        *  possible.  If not possible (for example, '2'), returns the argument.
+     480              :        *
+     481              :        *  do_tolower() is a hook for a derived facet to change the behavior of
+     482              :        *  lowercasing.  do_tolower() must always return the same result for
+     483              :        *  the same input.
+     484              :        *
+     485              :        *  @param __c  The char_type to convert.
+     486              :        *  @return  The lowercase char_type if convertible, else @a __c.
+     487              :       */
+     488              :       virtual char_type
+     489              :       do_tolower(char_type __c) const = 0;
+     490              : 
+     491              :       /**
+     492              :        *  @brief  Convert array to lowercase.
+     493              :        *
+     494              :        *  This virtual function converts each char_type in the range [__lo,__hi)
+     495              :        *  to lowercase if possible.  Other elements remain untouched.
+     496              :        *
+     497              :        *  do_tolower() is a hook for a derived facet to change the behavior of
+     498              :        *  lowercasing.  do_tolower() must always return the same result for
+     499              :        *  the same input.
+     500              :        *
+     501              :        *  @param __lo  Pointer to start of range.
+     502              :        *  @param __hi  Pointer to end of range.
+     503              :        *  @return  @a __hi.
+     504              :       */
+     505              :       virtual const char_type*
+     506              :       do_tolower(char_type* __lo, const char_type* __hi) const = 0;
+     507              : 
+     508              :       /**
+     509              :        *  @brief  Widen char
+     510              :        *
+     511              :        *  This virtual function converts the char to char_type using the
+     512              :        *  simplest reasonable transformation.
+     513              :        *
+     514              :        *  do_widen() is a hook for a derived facet to change the behavior of
+     515              :        *  widening.  do_widen() must always return the same result for the
+     516              :        *  same input.
+     517              :        *
+     518              :        *  Note: this is not what you want for codepage conversions.  See
+     519              :        *  codecvt for that.
+     520              :        *
+     521              :        *  @param __c  The char to convert.
+     522              :        *  @return  The converted char_type
+     523              :       */
+     524              :       virtual char_type
+     525              :       do_widen(char __c) const = 0;
+     526              : 
+     527              :       /**
+     528              :        *  @brief  Widen char array
+     529              :        *
+     530              :        *  This function converts each char in the input to char_type using the
+     531              :        *  simplest reasonable transformation.
+     532              :        *
+     533              :        *  do_widen() is a hook for a derived facet to change the behavior of
+     534              :        *  widening.  do_widen() must always return the same result for the
+     535              :        *  same input.
+     536              :        *
+     537              :        *  Note: this is not what you want for codepage conversions.  See
+     538              :        *  codecvt for that.
+     539              :        *
+     540              :        *  @param __lo  Pointer to start range.
+     541              :        *  @param __hi  Pointer to end of range.
+     542              :        *  @param __to  Pointer to the destination array.
+     543              :        *  @return  @a __hi.
+     544              :       */
+     545              :       virtual const char*
+     546              :       do_widen(const char* __lo, const char* __hi, char_type* __to) const = 0;
+     547              : 
+     548              :       /**
+     549              :        *  @brief  Narrow char_type to char
+     550              :        *
+     551              :        *  This virtual function converts the argument to char using the
+     552              :        *  simplest reasonable transformation.  If the conversion fails, dfault
+     553              :        *  is returned instead.
+     554              :        *
+     555              :        *  do_narrow() is a hook for a derived facet to change the behavior of
+     556              :        *  narrowing.  do_narrow() must always return the same result for the
+     557              :        *  same input.
+     558              :        *
+     559              :        *  Note: this is not what you want for codepage conversions.  See
+     560              :        *  codecvt for that.
+     561              :        *
+     562              :        *  @param __c  The char_type to convert.
+     563              :        *  @param __dfault  Char to return if conversion fails.
+     564              :        *  @return  The converted char.
+     565              :       */
+     566              :       virtual char
+     567              :       do_narrow(char_type __c, char __dfault) const = 0;
+     568              : 
+     569              :       /**
+     570              :        *  @brief  Narrow char_type array to char
+     571              :        *
+     572              :        *  This virtual function converts each char_type in the range
+     573              :        *  [__lo,__hi) to char using the simplest reasonable
+     574              :        *  transformation and writes the results to the destination
+     575              :        *  array.  For any element in the input that cannot be
+     576              :        *  converted, @a __dfault is used instead.
+     577              :        *
+     578              :        *  do_narrow() is a hook for a derived facet to change the behavior of
+     579              :        *  narrowing.  do_narrow() must always return the same result for the
+     580              :        *  same input.
+     581              :        *
+     582              :        *  Note: this is not what you want for codepage conversions.  See
+     583              :        *  codecvt for that.
+     584              :        *
+     585              :        *  @param __lo  Pointer to start of range.
+     586              :        *  @param __hi  Pointer to end of range.
+     587              :        *  @param __dfault  Char to use if conversion fails.
+     588              :        *  @param __to  Pointer to the destination array.
+     589              :        *  @return  @a __hi.
+     590              :       */
+     591              :       virtual const char_type*
+     592              :       do_narrow(const char_type* __lo, const char_type* __hi,
+     593              :                 char __dfault, char* __to) const = 0;
+     594              :     };
+     595              : 
+     596              :   /**
+     597              :    *  @brief  Primary class template ctype facet.
+     598              :    *  @ingroup locales
+     599              :    *
+     600              :    *  This template class defines classification and conversion functions for
+     601              :    *  character sets.  It wraps cctype functionality.  Ctype gets used by
+     602              :    *  streams for many I/O operations.
+     603              :    *
+     604              :    *  This template provides the protected virtual functions the developer
+     605              :    *  will have to replace in a derived class or specialization to make a
+     606              :    *  working facet.  The public functions that access them are defined in
+     607              :    *  __ctype_abstract_base, to allow for implementation flexibility.  See
+     608              :    *  ctype<wchar_t> for an example.  The functions are documented in
+     609              :    *  __ctype_abstract_base.
+     610              :    *
+     611              :    *  Note: implementations are provided for all the protected virtual
+     612              :    *  functions, but will likely not be useful.
+     613              :   */
+     614              :   template<typename _CharT>
+     615              :     class ctype : public __ctype_abstract_base<_CharT>
+     616              :     {
+     617              :     public:
+     618              :       // Types:
+     619              :       typedef _CharT                    char_type;
+     620              :       typedef typename __ctype_abstract_base<_CharT>::mask mask;
+     621              : 
+     622              :       /// The facet id for ctype<char_type>
+     623              :       static locale::id                 id;
+     624              : 
+     625              :       explicit
+     626              :       ctype(size_t __refs = 0) : __ctype_abstract_base<_CharT>(__refs) { }
+     627              : 
+     628              :    protected:
+     629              :       virtual
+     630              :       ~ctype();
+     631              : 
+     632              :       virtual bool
+     633              :       do_is(mask __m, char_type __c) const;
+     634              : 
+     635              :       virtual const char_type*
+     636              :       do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const;
+     637              : 
+     638              :       virtual const char_type*
+     639              :       do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const;
+     640              : 
+     641              :       virtual const char_type*
+     642              :       do_scan_not(mask __m, const char_type* __lo,
+     643              :                   const char_type* __hi) const;
+     644              : 
+     645              :       virtual char_type
+     646              :       do_toupper(char_type __c) const;
+     647              : 
+     648              :       virtual const char_type*
+     649              :       do_toupper(char_type* __lo, const char_type* __hi) const;
+     650              : 
+     651              :       virtual char_type
+     652              :       do_tolower(char_type __c) const;
+     653              : 
+     654              :       virtual const char_type*
+     655              :       do_tolower(char_type* __lo, const char_type* __hi) const;
+     656              : 
+     657              :       virtual char_type
+     658              :       do_widen(char __c) const;
+     659              : 
+     660              :       virtual const char*
+     661              :       do_widen(const char* __lo, const char* __hi, char_type* __dest) const;
+     662              : 
+     663              :       virtual char
+     664              :       do_narrow(char_type, char __dfault) const;
+     665              : 
+     666              :       virtual const char_type*
+     667              :       do_narrow(const char_type* __lo, const char_type* __hi,
+     668              :                 char __dfault, char* __to) const;
+     669              :     };
+     670              : 
+     671              :   template<typename _CharT>
+     672              :     locale::id ctype<_CharT>::id;
+     673              : 
+     674              :   // Incomplete to provide a compile time diagnostics for common misuse
+     675              :   // of [locale.convenience] functions with basic_string as a character type.
+     676              :   template<typename _CharT, typename _Traits, typename _Alloc>
+     677              :     class ctype<basic_string<_CharT, _Traits, _Alloc> >;
+     678              : 
+     679              :   /**
+     680              :    *  @brief  The ctype<char> specialization.
+     681              :    *  @ingroup locales
+     682              :    *
+     683              :    *  This class defines classification and conversion functions for
+     684              :    *  the char type.  It gets used by char streams for many I/O
+     685              :    *  operations.  The char specialization provides a number of
+     686              :    *  optimizations as well.
+     687              :   */
+     688              :   template<>
+     689              :     class ctype<char> : public locale::facet, public ctype_base
+     690              :     {
+     691              :     public:
+     692              :       // Types:
+     693              :       /// Typedef for the template parameter char.
+     694              :       typedef char              char_type;
+     695              : 
+     696              :     protected:
+     697              :       // Data Members:
+     698              :       __c_locale                _M_c_locale_ctype;
+     699              :       bool                      _M_del;
+     700              :       __to_type                 _M_toupper;
+     701              :       __to_type                 _M_tolower;
+     702              :       const mask*               _M_table;
+     703              :       mutable char              _M_widen_ok;
+     704              :       mutable char              _M_widen[1 + static_cast<unsigned char>(-1)];
+     705              :       mutable char              _M_narrow[1 + static_cast<unsigned char>(-1)];
+     706              :       mutable char              _M_narrow_ok;   // 0 uninitialized, 1 init,
+     707              :                                                 // 2 memcpy can't be used
+     708              : 
+     709              :     public:
+     710              :       /// The facet id for ctype<char>
+     711              :       static locale::id        id;
+     712              :       /// The size of the mask table.  It is SCHAR_MAX + 1.
+     713              :       static const size_t      table_size = 1 + static_cast<unsigned char>(-1);
+     714              : 
+     715              :       /**
+     716              :        *  @brief  Constructor performs initialization.
+     717              :        *
+     718              :        *  This is the constructor provided by the standard.
+     719              :        *
+     720              :        *  @param __table If non-zero, table is used as the per-char mask.
+     721              :        *               Else classic_table() is used.
+     722              :        *  @param __del   If true, passes ownership of table to this facet.
+     723              :        *  @param __refs  Passed to the base facet class.
+     724              :       */
+     725              :       explicit
+     726              :       ctype(const mask* __table = 0, bool __del = false, size_t __refs = 0);
+     727              : 
+     728              :       /**
+     729              :        *  @brief  Constructor performs static initialization.
+     730              :        *
+     731              :        *  This constructor is used to construct the initial C locale facet.
+     732              :        *
+     733              :        *  @param __cloc  Handle to C locale data.
+     734              :        *  @param __table If non-zero, table is used as the per-char mask.
+     735              :        *  @param __del   If true, passes ownership of table to this facet.
+     736              :        *  @param __refs  Passed to the base facet class.
+     737              :       */
+     738              :       explicit
+     739              :       ctype(__c_locale __cloc, const mask* __table = 0, bool __del = false,
+     740              :             size_t __refs = 0);
+     741              : 
+     742              :       /**
+     743              :        *  @brief  Test char classification.
+     744              :        *
+     745              :        *  This function compares the mask table[c] to @a __m.
+     746              :        *
+     747              :        *  @param __c  The char to compare the mask of.
+     748              :        *  @param __m  The mask to compare against.
+     749              :        *  @return  True if __m & table[__c] is true, false otherwise.
+     750              :       */
+     751              :       inline bool
+     752              :       is(mask __m, char __c) const;
+     753              : 
+     754              :       /**
+     755              :        *  @brief  Return a mask array.
+     756              :        *
+     757              :        *  This function finds the mask for each char in the range [lo, hi) and
+     758              :        *  successively writes it to vec.  vec must have as many elements as
+     759              :        *  the char array.
+     760              :        *
+     761              :        *  @param __lo  Pointer to start of range.
+     762              :        *  @param __hi  Pointer to end of range.
+     763              :        *  @param __vec  Pointer to an array of mask storage.
+     764              :        *  @return  @a __hi.
+     765              :       */
+     766              :       inline const char*
+     767              :       is(const char* __lo, const char* __hi, mask* __vec) const;
+     768              : 
+     769              :       /**
+     770              :        *  @brief  Find char matching a mask
+     771              :        *
+     772              :        *  This function searches for and returns the first char in [lo,hi) for
+     773              :        *  which is(m,char) is true.
+     774              :        *
+     775              :        *  @param __m  The mask to compare against.
+     776              :        *  @param __lo  Pointer to start of range.
+     777              :        *  @param __hi  Pointer to end of range.
+     778              :        *  @return  Pointer to a matching char if found, else @a __hi.
+     779              :       */
+     780              :       inline const char*
+     781              :       scan_is(mask __m, const char* __lo, const char* __hi) const;
+     782              : 
+     783              :       /**
+     784              :        *  @brief  Find char not matching a mask
+     785              :        *
+     786              :        *  This function searches for and returns a pointer to the first char
+     787              :        *  in [__lo,__hi) for which is(m,char) is false.
+     788              :        *
+     789              :        *  @param __m  The mask to compare against.
+     790              :        *  @param __lo  Pointer to start of range.
+     791              :        *  @param __hi  Pointer to end of range.
+     792              :        *  @return  Pointer to a non-matching char if found, else @a __hi.
+     793              :       */
+     794              :       inline const char*
+     795              :       scan_not(mask __m, const char* __lo, const char* __hi) const;
+     796              : 
+     797              :       /**
+     798              :        *  @brief  Convert to uppercase.
+     799              :        *
+     800              :        *  This function converts the char argument to uppercase if possible.
+     801              :        *  If not possible (for example, '2'), returns the argument.
+     802              :        *
+     803              :        *  toupper() acts as if it returns ctype<char>::do_toupper(c).
+     804              :        *  do_toupper() must always return the same result for the same input.
+     805              :        *
+     806              :        *  @param __c  The char to convert.
+     807              :        *  @return  The uppercase char if convertible, else @a __c.
+     808              :       */
+     809              :       char_type
+     810            0 :       toupper(char_type __c) const
+     811            0 :       { return this->do_toupper(__c); }
+     812              : 
+     813              :       /**
+     814              :        *  @brief  Convert array to uppercase.
+     815              :        *
+     816              :        *  This function converts each char in the range [__lo,__hi) to uppercase
+     817              :        *  if possible.  Other chars remain untouched.
+     818              :        *
+     819              :        *  toupper() acts as if it returns ctype<char>:: do_toupper(__lo, __hi).
+     820              :        *  do_toupper() must always return the same result for the same input.
+     821              :        *
+     822              :        *  @param __lo  Pointer to first char in range.
+     823              :        *  @param __hi  Pointer to end of range.
+     824              :        *  @return  @a __hi.
+     825              :       */
+     826              :       const char_type*
+     827              :       toupper(char_type *__lo, const char_type* __hi) const
+     828              :       { return this->do_toupper(__lo, __hi); }
+     829              : 
+     830              :       /**
+     831              :        *  @brief  Convert to lowercase.
+     832              :        *
+     833              :        *  This function converts the char argument to lowercase if possible.
+     834              :        *  If not possible (for example, '2'), returns the argument.
+     835              :        *
+     836              :        *  tolower() acts as if it returns ctype<char>::do_tolower(__c).
+     837              :        *  do_tolower() must always return the same result for the same input.
+     838              :        *
+     839              :        *  @param __c  The char to convert.
+     840              :        *  @return  The lowercase char if convertible, else @a __c.
+     841              :       */
+     842              :       char_type
+     843            0 :       tolower(char_type __c) const
+     844            0 :       { return this->do_tolower(__c); }
+     845              : 
+     846              :       /**
+     847              :        *  @brief  Convert array to lowercase.
+     848              :        *
+     849              :        *  This function converts each char in the range [lo,hi) to lowercase
+     850              :        *  if possible.  Other chars remain untouched.
+     851              :        *
+     852              :        *  tolower() acts as if it returns ctype<char>:: do_tolower(__lo, __hi).
+     853              :        *  do_tolower() must always return the same result for the same input.
+     854              :        *
+     855              :        *  @param __lo  Pointer to first char in range.
+     856              :        *  @param __hi  Pointer to end of range.
+     857              :        *  @return  @a __hi.
+     858              :       */
+     859              :       const char_type*
+     860            0 :       tolower(char_type* __lo, const char_type* __hi) const
+     861            0 :       { return this->do_tolower(__lo, __hi); }
+     862              : 
+     863              :       /**
+     864              :        *  @brief  Widen char
+     865              :        *
+     866              :        *  This function converts the char to char_type using the simplest
+     867              :        *  reasonable transformation.  For an underived ctype<char> facet, the
+     868              :        *  argument will be returned unchanged.
+     869              :        *
+     870              :        *  This function works as if it returns ctype<char>::do_widen(c).
+     871              :        *  do_widen() must always return the same result for the same input.
+     872              :        *
+     873              :        *  Note: this is not what you want for codepage conversions.  See
+     874              :        *  codecvt for that.
+     875              :        *
+     876              :        *  @param __c  The char to convert.
+     877              :        *  @return  The converted character.
+     878              :       */
+     879              :       char_type
+     880            0 :       widen(char __c) const
+     881              :       {
+     882            0 :         if (_M_widen_ok)
+     883            0 :           return _M_widen[static_cast<unsigned char>(__c)];
+     884            0 :         this->_M_widen_init();
+     885            0 :         return this->do_widen(__c);
+     886              :       }
+     887              : 
+     888              :       /**
+     889              :        *  @brief  Widen char array
+     890              :        *
+     891              :        *  This function converts each char in the input to char using the
+     892              :        *  simplest reasonable transformation.  For an underived ctype<char>
+     893              :        *  facet, the argument will be copied unchanged.
+     894              :        *
+     895              :        *  This function works as if it returns ctype<char>::do_widen(c).
+     896              :        *  do_widen() must always return the same result for the same input.
+     897              :        *
+     898              :        *  Note: this is not what you want for codepage conversions.  See
+     899              :        *  codecvt for that.
+     900              :        *
+     901              :        *  @param __lo  Pointer to first char in range.
+     902              :        *  @param __hi  Pointer to end of range.
+     903              :        *  @param __to  Pointer to the destination array.
+     904              :        *  @return  @a __hi.
+     905              :       */
+     906              :       const char*
+     907              :       widen(const char* __lo, const char* __hi, char_type* __to) const
+     908              :       {
+     909              :         if (_M_widen_ok == 1)
+     910              :           {
+     911              :             if (__builtin_expect(__hi != __lo, true))
+     912              :               __builtin_memcpy(__to, __lo, __hi - __lo);
+     913              :             return __hi;
+     914              :           }
+     915              :         if (!_M_widen_ok)
+     916              :           _M_widen_init();
+     917              :         return this->do_widen(__lo, __hi, __to);
+     918              :       }
+     919              : 
+     920              :       /**
+     921              :        *  @brief  Narrow char
+     922              :        *
+     923              :        *  This function converts the char to char using the simplest
+     924              :        *  reasonable transformation.  If the conversion fails, dfault is
+     925              :        *  returned instead.  For an underived ctype<char> facet, @a c
+     926              :        *  will be returned unchanged.
+     927              :        *
+     928              :        *  This function works as if it returns ctype<char>::do_narrow(c).
+     929              :        *  do_narrow() must always return the same result for the same input.
+     930              :        *
+     931              :        *  Note: this is not what you want for codepage conversions.  See
+     932              :        *  codecvt for that.
+     933              :        *
+     934              :        *  @param __c  The char to convert.
+     935              :        *  @param __dfault  Char to return if conversion fails.
+     936              :        *  @return  The converted character.
+     937              :       */
+     938              :       char
+     939            0 :       narrow(char_type __c, char __dfault) const
+     940              :       {
+     941            0 :         if (_M_narrow[static_cast<unsigned char>(__c)])
+     942            0 :           return _M_narrow[static_cast<unsigned char>(__c)];
+     943            0 :         const char __t = do_narrow(__c, __dfault);
+     944            0 :         if (__t != __dfault)
+     945            0 :           _M_narrow[static_cast<unsigned char>(__c)] = __t;
+     946            0 :         return __t;
+     947              :       }
+     948              : 
+     949              :       /**
+     950              :        *  @brief  Narrow char array
+     951              :        *
+     952              :        *  This function converts each char in the input to char using the
+     953              :        *  simplest reasonable transformation and writes the results to the
+     954              :        *  destination array.  For any char in the input that cannot be
+     955              :        *  converted, @a dfault is used instead.  For an underived ctype<char>
+     956              :        *  facet, the argument will be copied unchanged.
+     957              :        *
+     958              :        *  This function works as if it returns ctype<char>::do_narrow(lo, hi,
+     959              :        *  dfault, to).  do_narrow() must always return the same result for the
+     960              :        *  same input.
+     961              :        *
+     962              :        *  Note: this is not what you want for codepage conversions.  See
+     963              :        *  codecvt for that.
+     964              :        *
+     965              :        *  @param __lo  Pointer to start of range.
+     966              :        *  @param __hi  Pointer to end of range.
+     967              :        *  @param __dfault  Char to use if conversion fails.
+     968              :        *  @param __to  Pointer to the destination array.
+     969              :        *  @return  @a __hi.
+     970              :       */
+     971              :       const char_type*
+     972              :       narrow(const char_type* __lo, const char_type* __hi,
+     973              :              char __dfault, char* __to) const
+     974              :       {
+     975              :         if (__builtin_expect(_M_narrow_ok == 1, true))
+     976              :           {
+     977              :             if (__builtin_expect(__hi != __lo, true))
+     978              :               __builtin_memcpy(__to, __lo, __hi - __lo);
+     979              :             return __hi;
+     980              :           }
+     981              :         if (!_M_narrow_ok)
+     982              :           _M_narrow_init();
+     983              :         return this->do_narrow(__lo, __hi, __dfault, __to);
+     984              :       }
+     985              : 
+     986              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     987              :       // DR 695. ctype<char>::classic_table() not accessible.
+     988              :       /// Returns a pointer to the mask table provided to the constructor, or
+     989              :       /// the default from classic_table() if none was provided.
+     990              :       const mask*
+     991              :       table() const throw()
+     992              :       { return _M_table; }
+     993              : 
+     994              :       /// Returns a pointer to the C locale mask table.
+     995              :       static const mask*
+     996              :       classic_table() throw();
+     997              :     protected:
+     998              : 
+     999              :       /**
+    1000              :        *  @brief  Destructor.
+    1001              :        *
+    1002              :        *  This function deletes table() if @a del was true in the
+    1003              :        *  constructor.
+    1004              :       */
+    1005              :       virtual
+    1006              :       ~ctype();
+    1007              : 
+    1008              :       /**
+    1009              :        *  @brief  Convert to uppercase.
+    1010              :        *
+    1011              :        *  This virtual function converts the char argument to uppercase if
+    1012              :        *  possible.  If not possible (for example, '2'), returns the argument.
+    1013              :        *
+    1014              :        *  do_toupper() is a hook for a derived facet to change the behavior of
+    1015              :        *  uppercasing.  do_toupper() must always return the same result for
+    1016              :        *  the same input.
+    1017              :        *
+    1018              :        *  @param __c  The char to convert.
+    1019              :        *  @return  The uppercase char if convertible, else @a __c.
+    1020              :       */
+    1021              :       virtual char_type
+    1022              :       do_toupper(char_type __c) const;
+    1023              : 
+    1024              :       /**
+    1025              :        *  @brief  Convert array to uppercase.
+    1026              :        *
+    1027              :        *  This virtual function converts each char in the range [lo,hi) to
+    1028              :        *  uppercase if possible.  Other chars remain untouched.
+    1029              :        *
+    1030              :        *  do_toupper() is a hook for a derived facet to change the behavior of
+    1031              :        *  uppercasing.  do_toupper() must always return the same result for
+    1032              :        *  the same input.
+    1033              :        *
+    1034              :        *  @param __lo  Pointer to start of range.
+    1035              :        *  @param __hi  Pointer to end of range.
+    1036              :        *  @return  @a __hi.
+    1037              :       */
+    1038              :       virtual const char_type*
+    1039              :       do_toupper(char_type* __lo, const char_type* __hi) const;
+    1040              : 
+    1041              :       /**
+    1042              :        *  @brief  Convert to lowercase.
+    1043              :        *
+    1044              :        *  This virtual function converts the char argument to lowercase if
+    1045              :        *  possible.  If not possible (for example, '2'), returns the argument.
+    1046              :        *
+    1047              :        *  do_tolower() is a hook for a derived facet to change the behavior of
+    1048              :        *  lowercasing.  do_tolower() must always return the same result for
+    1049              :        *  the same input.
+    1050              :        *
+    1051              :        *  @param __c  The char to convert.
+    1052              :        *  @return  The lowercase char if convertible, else @a __c.
+    1053              :       */
+    1054              :       virtual char_type
+    1055              :       do_tolower(char_type __c) const;
+    1056              : 
+    1057              :       /**
+    1058              :        *  @brief  Convert array to lowercase.
+    1059              :        *
+    1060              :        *  This virtual function converts each char in the range [lo,hi) to
+    1061              :        *  lowercase if possible.  Other chars remain untouched.
+    1062              :        *
+    1063              :        *  do_tolower() is a hook for a derived facet to change the behavior of
+    1064              :        *  lowercasing.  do_tolower() must always return the same result for
+    1065              :        *  the same input.
+    1066              :        *
+    1067              :        *  @param __lo  Pointer to first char in range.
+    1068              :        *  @param __hi  Pointer to end of range.
+    1069              :        *  @return  @a __hi.
+    1070              :       */
+    1071              :       virtual const char_type*
+    1072              :       do_tolower(char_type* __lo, const char_type* __hi) const;
+    1073              : 
+    1074              :       /**
+    1075              :        *  @brief  Widen char
+    1076              :        *
+    1077              :        *  This virtual function converts the char to char using the simplest
+    1078              :        *  reasonable transformation.  For an underived ctype<char> facet, the
+    1079              :        *  argument will be returned unchanged.
+    1080              :        *
+    1081              :        *  do_widen() is a hook for a derived facet to change the behavior of
+    1082              :        *  widening.  do_widen() must always return the same result for the
+    1083              :        *  same input.
+    1084              :        *
+    1085              :        *  Note: this is not what you want for codepage conversions.  See
+    1086              :        *  codecvt for that.
+    1087              :        *
+    1088              :        *  @param __c  The char to convert.
+    1089              :        *  @return  The converted character.
+    1090              :       */
+    1091              :       virtual char_type
+    1092              :       do_widen(char __c) const
+    1093              :       { return __c; }
+    1094              : 
+    1095              :       /**
+    1096              :        *  @brief  Widen char array
+    1097              :        *
+    1098              :        *  This function converts each char in the range [lo,hi) to char using
+    1099              :        *  the simplest reasonable transformation.  For an underived
+    1100              :        *  ctype<char> facet, the argument will be copied unchanged.
+    1101              :        *
+    1102              :        *  do_widen() is a hook for a derived facet to change the behavior of
+    1103              :        *  widening.  do_widen() must always return the same result for the
+    1104              :        *  same input.
+    1105              :        *
+    1106              :        *  Note: this is not what you want for codepage conversions.  See
+    1107              :        *  codecvt for that.
+    1108              :        *
+    1109              :        *  @param __lo  Pointer to start of range.
+    1110              :        *  @param __hi  Pointer to end of range.
+    1111              :        *  @param __to  Pointer to the destination array.
+    1112              :        *  @return  @a __hi.
+    1113              :       */
+    1114              :       virtual const char*
+    1115              :       do_widen(const char* __lo, const char* __hi, char_type* __to) const
+    1116              :       {
+    1117              :         if (__builtin_expect(__hi != __lo, true))
+    1118              :           __builtin_memcpy(__to, __lo, __hi - __lo);
+    1119              :         return __hi;
+    1120              :       }
+    1121              : 
+    1122              :       /**
+    1123              :        *  @brief  Narrow char
+    1124              :        *
+    1125              :        *  This virtual function converts the char to char using the simplest
+    1126              :        *  reasonable transformation.  If the conversion fails, dfault is
+    1127              :        *  returned instead.  For an underived ctype<char> facet, @a c will be
+    1128              :        *  returned unchanged.
+    1129              :        *
+    1130              :        *  do_narrow() is a hook for a derived facet to change the behavior of
+    1131              :        *  narrowing.  do_narrow() must always return the same result for the
+    1132              :        *  same input.
+    1133              :        *
+    1134              :        *  Note: this is not what you want for codepage conversions.  See
+    1135              :        *  codecvt for that.
+    1136              :        *
+    1137              :        *  @param __c  The char to convert.
+    1138              :        *  @param __dfault  Char to return if conversion fails.
+    1139              :        *  @return  The converted char.
+    1140              :       */
+    1141              :       virtual char
+    1142              :       do_narrow(char_type __c, char __dfault __attribute__((__unused__))) const
+    1143              :       { return __c; }
+    1144              : 
+    1145              :       /**
+    1146              :        *  @brief  Narrow char array to char array
+    1147              :        *
+    1148              :        *  This virtual function converts each char in the range [lo,hi) to
+    1149              :        *  char using the simplest reasonable transformation and writes the
+    1150              :        *  results to the destination array.  For any char in the input that
+    1151              :        *  cannot be converted, @a dfault is used instead.  For an underived
+    1152              :        *  ctype<char> facet, the argument will be copied unchanged.
+    1153              :        *
+    1154              :        *  do_narrow() is a hook for a derived facet to change the behavior of
+    1155              :        *  narrowing.  do_narrow() must always return the same result for the
+    1156              :        *  same input.
+    1157              :        *
+    1158              :        *  Note: this is not what you want for codepage conversions.  See
+    1159              :        *  codecvt for that.
+    1160              :        *
+    1161              :        *  @param __lo  Pointer to start of range.
+    1162              :        *  @param __hi  Pointer to end of range.
+    1163              :        *  @param __dfault  Char to use if conversion fails.
+    1164              :        *  @param __to  Pointer to the destination array.
+    1165              :        *  @return  @a __hi.
+    1166              :       */
+    1167              :       virtual const char_type*
+    1168              :       do_narrow(const char_type* __lo, const char_type* __hi,
+    1169              :                 char __dfault __attribute__((__unused__)), char* __to) const
+    1170              :       {
+    1171              :         if (__builtin_expect(__hi != __lo, true))
+    1172              :           __builtin_memcpy(__to, __lo, __hi - __lo);
+    1173              :         return __hi;
+    1174              :       }
+    1175              : 
+    1176              :     private:
+    1177              :       void _M_narrow_init() const;
+    1178              :       void _M_widen_init() const;
+    1179              :     };
+    1180              : 
+    1181              : #ifdef _GLIBCXX_USE_WCHAR_T
+    1182              :   /**
+    1183              :    *  @brief  The ctype<wchar_t> specialization.
+    1184              :    *  @ingroup locales
+    1185              :    *
+    1186              :    *  This class defines classification and conversion functions for the
+    1187              :    *  wchar_t type.  It gets used by wchar_t streams for many I/O operations.
+    1188              :    *  The wchar_t specialization provides a number of optimizations as well.
+    1189              :    *
+    1190              :    *  ctype<wchar_t> inherits its public methods from
+    1191              :    *  __ctype_abstract_base<wchar_t>.
+    1192              :   */
+    1193              :   template<>
+    1194              :     class ctype<wchar_t> : public __ctype_abstract_base<wchar_t>
+    1195              :     {
+    1196              :     public:
+    1197              :       // Types:
+    1198              :       /// Typedef for the template parameter wchar_t.
+    1199              :       typedef wchar_t           char_type;
+    1200              :       typedef wctype_t          __wmask_type;
+    1201              : 
+    1202              :     protected:
+    1203              :       __c_locale                _M_c_locale_ctype;
+    1204              : 
+    1205              :       // Pre-computed narrowed and widened chars.
+    1206              :       bool                      _M_narrow_ok;
+    1207              :       char                      _M_narrow[128];
+    1208              :       wint_t                    _M_widen[1 + static_cast<unsigned char>(-1)];
+    1209              : 
+    1210              :       // Pre-computed elements for do_is.
+    1211              :       mask                      _M_bit[16];
+    1212              :       __wmask_type              _M_wmask[16];
+    1213              : 
+    1214              :     public:
+    1215              :       // Data Members:
+    1216              :       /// The facet id for ctype<wchar_t>
+    1217              :       static locale::id         id;
+    1218              : 
+    1219              :       /**
+    1220              :        *  @brief  Constructor performs initialization.
+    1221              :        *
+    1222              :        *  This is the constructor provided by the standard.
+    1223              :        *
+    1224              :        *  @param __refs  Passed to the base facet class.
+    1225              :       */
+    1226              :       explicit
+    1227              :       ctype(size_t __refs = 0);
+    1228              : 
+    1229              :       /**
+    1230              :        *  @brief  Constructor performs static initialization.
+    1231              :        *
+    1232              :        *  This constructor is used to construct the initial C locale facet.
+    1233              :        *
+    1234              :        *  @param __cloc  Handle to C locale data.
+    1235              :        *  @param __refs  Passed to the base facet class.
+    1236              :       */
+    1237              :       explicit
+    1238              :       ctype(__c_locale __cloc, size_t __refs = 0);
+    1239              : 
+    1240              :     protected:
+    1241              :       __wmask_type
+    1242              :       _M_convert_to_wmask(const mask __m) const throw();
+    1243              : 
+    1244              :       /// Destructor
+    1245              :       virtual
+    1246              :       ~ctype();
+    1247              : 
+    1248              :       /**
+    1249              :        *  @brief  Test wchar_t classification.
+    1250              :        *
+    1251              :        *  This function finds a mask M for @a c and compares it to mask @a m.
+    1252              :        *
+    1253              :        *  do_is() is a hook for a derived facet to change the behavior of
+    1254              :        *  classifying.  do_is() must always return the same result for the
+    1255              :        *  same input.
+    1256              :        *
+    1257              :        *  @param __c  The wchar_t to find the mask of.
+    1258              :        *  @param __m  The mask to compare against.
+    1259              :        *  @return  (M & __m) != 0.
+    1260              :       */
+    1261              :       virtual bool
+    1262              :       do_is(mask __m, char_type __c) const;
+    1263              : 
+    1264              :       /**
+    1265              :        *  @brief  Return a mask array.
+    1266              :        *
+    1267              :        *  This function finds the mask for each wchar_t in the range [lo,hi)
+    1268              :        *  and successively writes it to vec.  vec must have as many elements
+    1269              :        *  as the input.
+    1270              :        *
+    1271              :        *  do_is() is a hook for a derived facet to change the behavior of
+    1272              :        *  classifying.  do_is() must always return the same result for the
+    1273              :        *  same input.
+    1274              :        *
+    1275              :        *  @param __lo  Pointer to start of range.
+    1276              :        *  @param __hi  Pointer to end of range.
+    1277              :        *  @param __vec  Pointer to an array of mask storage.
+    1278              :        *  @return  @a __hi.
+    1279              :       */
+    1280              :       virtual const char_type*
+    1281              :       do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const;
+    1282              : 
+    1283              :       /**
+    1284              :        *  @brief  Find wchar_t matching mask
+    1285              :        *
+    1286              :        *  This function searches for and returns the first wchar_t c in
+    1287              :        *  [__lo,__hi) for which is(__m,c) is true.
+    1288              :        *
+    1289              :        *  do_scan_is() is a hook for a derived facet to change the behavior of
+    1290              :        *  match searching.  do_is() must always return the same result for the
+    1291              :        *  same input.
+    1292              :        *
+    1293              :        *  @param __m  The mask to compare against.
+    1294              :        *  @param __lo  Pointer to start of range.
+    1295              :        *  @param __hi  Pointer to end of range.
+    1296              :        *  @return  Pointer to a matching wchar_t if found, else @a __hi.
+    1297              :       */
+    1298              :       virtual const char_type*
+    1299              :       do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const;
+    1300              : 
+    1301              :       /**
+    1302              :        *  @brief  Find wchar_t not matching mask
+    1303              :        *
+    1304              :        *  This function searches for and returns a pointer to the first
+    1305              :        *  wchar_t c of [__lo,__hi) for which is(__m,c) is false.
+    1306              :        *
+    1307              :        *  do_scan_is() is a hook for a derived facet to change the behavior of
+    1308              :        *  match searching.  do_is() must always return the same result for the
+    1309              :        *  same input.
+    1310              :        *
+    1311              :        *  @param __m  The mask to compare against.
+    1312              :        *  @param __lo  Pointer to start of range.
+    1313              :        *  @param __hi  Pointer to end of range.
+    1314              :        *  @return  Pointer to a non-matching wchar_t if found, else @a __hi.
+    1315              :       */
+    1316              :       virtual const char_type*
+    1317              :       do_scan_not(mask __m, const char_type* __lo,
+    1318              :                   const char_type* __hi) const;
+    1319              : 
+    1320              :       /**
+    1321              :        *  @brief  Convert to uppercase.
+    1322              :        *
+    1323              :        *  This virtual function converts the wchar_t argument to uppercase if
+    1324              :        *  possible.  If not possible (for example, '2'), returns the argument.
+    1325              :        *
+    1326              :        *  do_toupper() is a hook for a derived facet to change the behavior of
+    1327              :        *  uppercasing.  do_toupper() must always return the same result for
+    1328              :        *  the same input.
+    1329              :        *
+    1330              :        *  @param __c  The wchar_t to convert.
+    1331              :        *  @return  The uppercase wchar_t if convertible, else @a __c.
+    1332              :       */
+    1333              :       virtual char_type
+    1334              :       do_toupper(char_type __c) const;
+    1335              : 
+    1336              :       /**
+    1337              :        *  @brief  Convert array to uppercase.
+    1338              :        *
+    1339              :        *  This virtual function converts each wchar_t in the range [lo,hi) to
+    1340              :        *  uppercase if possible.  Other elements remain untouched.
+    1341              :        *
+    1342              :        *  do_toupper() is a hook for a derived facet to change the behavior of
+    1343              :        *  uppercasing.  do_toupper() must always return the same result for
+    1344              :        *  the same input.
+    1345              :        *
+    1346              :        *  @param __lo  Pointer to start of range.
+    1347              :        *  @param __hi  Pointer to end of range.
+    1348              :        *  @return  @a __hi.
+    1349              :       */
+    1350              :       virtual const char_type*
+    1351              :       do_toupper(char_type* __lo, const char_type* __hi) const;
+    1352              : 
+    1353              :       /**
+    1354              :        *  @brief  Convert to lowercase.
+    1355              :        *
+    1356              :        *  This virtual function converts the argument to lowercase if
+    1357              :        *  possible.  If not possible (for example, '2'), returns the argument.
+    1358              :        *
+    1359              :        *  do_tolower() is a hook for a derived facet to change the behavior of
+    1360              :        *  lowercasing.  do_tolower() must always return the same result for
+    1361              :        *  the same input.
+    1362              :        *
+    1363              :        *  @param __c  The wchar_t to convert.
+    1364              :        *  @return  The lowercase wchar_t if convertible, else @a __c.
+    1365              :       */
+    1366              :       virtual char_type
+    1367              :       do_tolower(char_type __c) const;
+    1368              : 
+    1369              :       /**
+    1370              :        *  @brief  Convert array to lowercase.
+    1371              :        *
+    1372              :        *  This virtual function converts each wchar_t in the range [lo,hi) to
+    1373              :        *  lowercase if possible.  Other elements remain untouched.
+    1374              :        *
+    1375              :        *  do_tolower() is a hook for a derived facet to change the behavior of
+    1376              :        *  lowercasing.  do_tolower() must always return the same result for
+    1377              :        *  the same input.
+    1378              :        *
+    1379              :        *  @param __lo  Pointer to start of range.
+    1380              :        *  @param __hi  Pointer to end of range.
+    1381              :        *  @return  @a __hi.
+    1382              :       */
+    1383              :       virtual const char_type*
+    1384              :       do_tolower(char_type* __lo, const char_type* __hi) const;
+    1385              : 
+    1386              :       /**
+    1387              :        *  @brief  Widen char to wchar_t
+    1388              :        *
+    1389              :        *  This virtual function converts the char to wchar_t using the
+    1390              :        *  simplest reasonable transformation.  For an underived ctype<wchar_t>
+    1391              :        *  facet, the argument will be cast to wchar_t.
+    1392              :        *
+    1393              :        *  do_widen() is a hook for a derived facet to change the behavior of
+    1394              :        *  widening.  do_widen() must always return the same result for the
+    1395              :        *  same input.
+    1396              :        *
+    1397              :        *  Note: this is not what you want for codepage conversions.  See
+    1398              :        *  codecvt for that.
+    1399              :        *
+    1400              :        *  @param __c  The char to convert.
+    1401              :        *  @return  The converted wchar_t.
+    1402              :       */
+    1403              :       virtual char_type
+    1404              :       do_widen(char __c) const;
+    1405              : 
+    1406              :       /**
+    1407              :        *  @brief  Widen char array to wchar_t array
+    1408              :        *
+    1409              :        *  This function converts each char in the input to wchar_t using the
+    1410              :        *  simplest reasonable transformation.  For an underived ctype<wchar_t>
+    1411              :        *  facet, the argument will be copied, casting each element to wchar_t.
+    1412              :        *
+    1413              :        *  do_widen() is a hook for a derived facet to change the behavior of
+    1414              :        *  widening.  do_widen() must always return the same result for the
+    1415              :        *  same input.
+    1416              :        *
+    1417              :        *  Note: this is not what you want for codepage conversions.  See
+    1418              :        *  codecvt for that.
+    1419              :        *
+    1420              :        *  @param __lo  Pointer to start range.
+    1421              :        *  @param __hi  Pointer to end of range.
+    1422              :        *  @param __to  Pointer to the destination array.
+    1423              :        *  @return  @a __hi.
+    1424              :       */
+    1425              :       virtual const char*
+    1426              :       do_widen(const char* __lo, const char* __hi, char_type* __to) const;
+    1427              : 
+    1428              :       /**
+    1429              :        *  @brief  Narrow wchar_t to char
+    1430              :        *
+    1431              :        *  This virtual function converts the argument to char using
+    1432              :        *  the simplest reasonable transformation.  If the conversion
+    1433              :        *  fails, dfault is returned instead.  For an underived
+    1434              :        *  ctype<wchar_t> facet, @a c will be cast to char and
+    1435              :        *  returned.
+    1436              :        *
+    1437              :        *  do_narrow() is a hook for a derived facet to change the
+    1438              :        *  behavior of narrowing.  do_narrow() must always return the
+    1439              :        *  same result for the same input.
+    1440              :        *
+    1441              :        *  Note: this is not what you want for codepage conversions.  See
+    1442              :        *  codecvt for that.
+    1443              :        *
+    1444              :        *  @param __c  The wchar_t to convert.
+    1445              :        *  @param __dfault  Char to return if conversion fails.
+    1446              :        *  @return  The converted char.
+    1447              :       */
+    1448              :       virtual char
+    1449              :       do_narrow(char_type __c, char __dfault) const;
+    1450              : 
+    1451              :       /**
+    1452              :        *  @brief  Narrow wchar_t array to char array
+    1453              :        *
+    1454              :        *  This virtual function converts each wchar_t in the range [lo,hi) to
+    1455              :        *  char using the simplest reasonable transformation and writes the
+    1456              :        *  results to the destination array.  For any wchar_t in the input that
+    1457              :        *  cannot be converted, @a dfault is used instead.  For an underived
+    1458              :        *  ctype<wchar_t> facet, the argument will be copied, casting each
+    1459              :        *  element to char.
+    1460              :        *
+    1461              :        *  do_narrow() is a hook for a derived facet to change the behavior of
+    1462              :        *  narrowing.  do_narrow() must always return the same result for the
+    1463              :        *  same input.
+    1464              :        *
+    1465              :        *  Note: this is not what you want for codepage conversions.  See
+    1466              :        *  codecvt for that.
+    1467              :        *
+    1468              :        *  @param __lo  Pointer to start of range.
+    1469              :        *  @param __hi  Pointer to end of range.
+    1470              :        *  @param __dfault  Char to use if conversion fails.
+    1471              :        *  @param __to  Pointer to the destination array.
+    1472              :        *  @return  @a __hi.
+    1473              :       */
+    1474              :       virtual const char_type*
+    1475              :       do_narrow(const char_type* __lo, const char_type* __hi,
+    1476              :                 char __dfault, char* __to) const;
+    1477              : 
+    1478              :       // For use at construction time only.
+    1479              :       void
+    1480              :       _M_initialize_ctype() throw();
+    1481              :     };
+    1482              : #endif //_GLIBCXX_USE_WCHAR_T
+    1483              : 
+    1484              :   /// class ctype_byname [22.2.1.2].
+    1485              :   template<typename _CharT>
+    1486              :     class ctype_byname : public ctype<_CharT>
+    1487              :     {
+    1488              :     public:
+    1489              :       typedef typename ctype<_CharT>::mask  mask;
+    1490              : 
+    1491              :       explicit
+    1492              :       ctype_byname(const char* __s, size_t __refs = 0);
+    1493              : 
+    1494              : #if __cplusplus >= 201103L
+    1495              :       explicit
+    1496              :       ctype_byname(const string& __s, size_t __refs = 0)
+    1497              :       : ctype_byname(__s.c_str(), __refs) { }
+    1498              : #endif
+    1499              : 
+    1500              :     protected:
+    1501              :       virtual
+    1502              :       ~ctype_byname() { }
+    1503              :     };
+    1504              : 
+    1505              :   /// 22.2.1.4  Class ctype_byname specializations.
+    1506              :   template<>
+    1507              :     class ctype_byname<char> : public ctype<char>
+    1508              :     {
+    1509              :     public:
+    1510              :       explicit
+    1511              :       ctype_byname(const char* __s, size_t __refs = 0);
+    1512              : 
+    1513              : #if __cplusplus >= 201103L
+    1514              :       explicit
+    1515              :       ctype_byname(const string& __s, size_t __refs = 0);
+    1516              : #endif
+    1517              : 
+    1518              :     protected:
+    1519              :       virtual
+    1520              :       ~ctype_byname();
+    1521              :     };
+    1522              : 
+    1523              : #ifdef _GLIBCXX_USE_WCHAR_T
+    1524              :   template<>
+    1525              :     class ctype_byname<wchar_t> : public ctype<wchar_t>
+    1526              :     {
+    1527              :     public:
+    1528              :       explicit
+    1529              :       ctype_byname(const char* __s, size_t __refs = 0);
+    1530              : 
+    1531              : #if __cplusplus >= 201103L
+    1532              :       explicit
+    1533              :       ctype_byname(const string& __s, size_t __refs = 0);
+    1534              : #endif
+    1535              : 
+    1536              :     protected:
+    1537              :       virtual
+    1538              :       ~ctype_byname();
+    1539              :     };
+    1540              : #endif
+    1541              : 
+    1542              : _GLIBCXX_END_NAMESPACE_VERSION
+    1543              : } // namespace
+    1544              : 
+    1545              : // Include host and configuration specific ctype inlines.
+    1546              : #include <bits/ctype_inline.h>
+    1547              : 
+    1548              : namespace std _GLIBCXX_VISIBILITY(default)
+    1549              : {
+    1550              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+    1551              : 
+    1552              :   // 22.2.2  The numeric category.
+    1553              :   class __num_base
+    1554              :   {
+    1555              :   public:
+    1556              :     // NB: Code depends on the order of _S_atoms_out elements.
+    1557              :     // Below are the indices into _S_atoms_out.
+    1558              :     enum
+    1559              :       {
+    1560              :         _S_ominus,
+    1561              :         _S_oplus,
+    1562              :         _S_ox,
+    1563              :         _S_oX,
+    1564              :         _S_odigits,
+    1565              :         _S_odigits_end = _S_odigits + 16,
+    1566              :         _S_oudigits = _S_odigits_end,
+    1567              :         _S_oudigits_end = _S_oudigits + 16,
+    1568              :         _S_oe = _S_odigits + 14,  // For scientific notation, 'e'
+    1569              :         _S_oE = _S_oudigits + 14, // For scientific notation, 'E'
+    1570              :         _S_oend = _S_oudigits_end
+    1571              :       };
+    1572              : 
+    1573              :     // A list of valid numeric literals for output.  This array
+    1574              :     // contains chars that will be passed through the current locale's
+    1575              :     // ctype<_CharT>.widen() and then used to render numbers.
+    1576              :     // For the standard "C" locale, this is
+    1577              :     // "-+xX0123456789abcdef0123456789ABCDEF".
+    1578              :     static const char* _S_atoms_out;
+    1579              : 
+    1580              :     // String literal of acceptable (narrow) input, for num_get.
+    1581              :     // "-+xX0123456789abcdefABCDEF"
+    1582              :     static const char* _S_atoms_in;
+    1583              : 
+    1584              :     enum
+    1585              :     {
+    1586              :       _S_iminus,
+    1587              :       _S_iplus,
+    1588              :       _S_ix,
+    1589              :       _S_iX,
+    1590              :       _S_izero,
+    1591              :       _S_ie = _S_izero + 14,
+    1592              :       _S_iE = _S_izero + 20,
+    1593              :       _S_iend = 26
+    1594              :     };
+    1595              : 
+    1596              :     // num_put
+    1597              :     // Construct and return valid scanf format for floating point types.
+    1598              :     static void
+    1599              :     _S_format_float(const ios_base& __io, char* __fptr, char __mod) throw();
+    1600              :   };
+    1601              : 
+    1602              :   template<typename _CharT>
+    1603              :     struct __numpunct_cache : public locale::facet
+    1604              :     {
+    1605              :       const char*                       _M_grouping;
+    1606              :       size_t                            _M_grouping_size;
+    1607              :       bool                              _M_use_grouping;
+    1608              :       const _CharT*                     _M_truename;
+    1609              :       size_t                            _M_truename_size;
+    1610              :       const _CharT*                     _M_falsename;
+    1611              :       size_t                            _M_falsename_size;
+    1612              :       _CharT                            _M_decimal_point;
+    1613              :       _CharT                            _M_thousands_sep;
+    1614              : 
+    1615              :       // A list of valid numeric literals for output: in the standard
+    1616              :       // "C" locale, this is "-+xX0123456789abcdef0123456789ABCDEF".
+    1617              :       // This array contains the chars after having been passed
+    1618              :       // through the current locale's ctype<_CharT>.widen().
+    1619              :       _CharT                            _M_atoms_out[__num_base::_S_oend];
+    1620              : 
+    1621              :       // A list of valid numeric literals for input: in the standard
+    1622              :       // "C" locale, this is "-+xX0123456789abcdefABCDEF"
+    1623              :       // This array contains the chars after having been passed
+    1624              :       // through the current locale's ctype<_CharT>.widen().
+    1625              :       _CharT                            _M_atoms_in[__num_base::_S_iend];
+    1626              : 
+    1627              :       bool                              _M_allocated;
+    1628              : 
+    1629              :       __numpunct_cache(size_t __refs = 0)
+    1630              :       : facet(__refs), _M_grouping(0), _M_grouping_size(0),
+    1631              :         _M_use_grouping(false),
+    1632              :         _M_truename(0), _M_truename_size(0), _M_falsename(0),
+    1633              :         _M_falsename_size(0), _M_decimal_point(_CharT()),
+    1634              :         _M_thousands_sep(_CharT()), _M_allocated(false)
+    1635              :         { }
+    1636              : 
+    1637              :       ~__numpunct_cache();
+    1638              : 
+    1639              :       void
+    1640              :       _M_cache(const locale& __loc);
+    1641              : 
+    1642              :     private:
+    1643              :       __numpunct_cache&
+    1644              :       operator=(const __numpunct_cache&);
+    1645              : 
+    1646              :       explicit
+    1647              :       __numpunct_cache(const __numpunct_cache&);
+    1648              :     };
+    1649              : 
+    1650              :   template<typename _CharT>
+    1651              :     __numpunct_cache<_CharT>::~__numpunct_cache()
+    1652              :     {
+    1653              :       if (_M_allocated)
+    1654              :         {
+    1655              :           delete [] _M_grouping;
+    1656              :           delete [] _M_truename;
+    1657              :           delete [] _M_falsename;
+    1658              :         }
+    1659              :     }
+    1660              : 
+    1661              : _GLIBCXX_BEGIN_NAMESPACE_CXX11
+    1662              : 
+    1663              :   /**
+    1664              :    *  @brief  Primary class template numpunct.
+    1665              :    *  @ingroup locales
+    1666              :    *
+    1667              :    *  This facet stores several pieces of information related to printing and
+    1668              :    *  scanning numbers, such as the decimal point character.  It takes a
+    1669              :    *  template parameter specifying the char type.  The numpunct facet is
+    1670              :    *  used by streams for many I/O operations involving numbers.
+    1671              :    *
+    1672              :    *  The numpunct template uses protected virtual functions to provide the
+    1673              :    *  actual results.  The public accessors forward the call to the virtual
+    1674              :    *  functions.  These virtual functions are hooks for developers to
+    1675              :    *  implement the behavior they require from a numpunct facet.
+    1676              :   */
+    1677              :   template<typename _CharT>
+    1678              :     class numpunct : public locale::facet
+    1679              :     {
+    1680              :     public:
+    1681              :       // Types:
+    1682              :       ///@{
+    1683              :       /// Public typedefs
+    1684              :       typedef _CharT                    char_type;
+    1685              :       typedef basic_string<_CharT>        string_type;
+    1686              :       ///@}
+    1687              :       typedef __numpunct_cache<_CharT>  __cache_type;
+    1688              : 
+    1689              :     protected:
+    1690              :       __cache_type*                     _M_data;
+    1691              : 
+    1692              :     public:
+    1693              :       /// Numpunct facet id.
+    1694              :       static locale::id                 id;
+    1695              : 
+    1696              :       /**
+    1697              :        *  @brief  Numpunct constructor.
+    1698              :        *
+    1699              :        *  @param  __refs  Refcount to pass to the base class.
+    1700              :        */
+    1701              :       explicit
+    1702              :       numpunct(size_t __refs = 0)
+    1703              :       : facet(__refs), _M_data(0)
+    1704              :       { _M_initialize_numpunct(); }
+    1705              : 
+    1706              :       /**
+    1707              :        *  @brief  Internal constructor.  Not for general use.
+    1708              :        *
+    1709              :        *  This is a constructor for use by the library itself to set up the
+    1710              :        *  predefined locale facets.
+    1711              :        *
+    1712              :        *  @param  __cache  __numpunct_cache object.
+    1713              :        *  @param  __refs  Refcount to pass to the base class.
+    1714              :        */
+    1715              :       explicit
+    1716              :       numpunct(__cache_type* __cache, size_t __refs = 0)
+    1717              :       : facet(__refs), _M_data(__cache)
+    1718              :       { _M_initialize_numpunct(); }
+    1719              : 
+    1720              :       /**
+    1721              :        *  @brief  Internal constructor.  Not for general use.
+    1722              :        *
+    1723              :        *  This is a constructor for use by the library itself to set up new
+    1724              :        *  locales.
+    1725              :        *
+    1726              :        *  @param  __cloc  The C locale.
+    1727              :        *  @param  __refs  Refcount to pass to the base class.
+    1728              :        */
+    1729              :       explicit
+    1730              :       numpunct(__c_locale __cloc, size_t __refs = 0)
+    1731              :       : facet(__refs), _M_data(0)
+    1732              :       { _M_initialize_numpunct(__cloc); }
+    1733              : 
+    1734              :       /**
+    1735              :        *  @brief  Return decimal point character.
+    1736              :        *
+    1737              :        *  This function returns a char_type to use as a decimal point.  It
+    1738              :        *  does so by returning returning
+    1739              :        *  numpunct<char_type>::do_decimal_point().
+    1740              :        *
+    1741              :        *  @return  @a char_type representing a decimal point.
+    1742              :       */
+    1743              :       char_type
+    1744              :       decimal_point() const
+    1745              :       { return this->do_decimal_point(); }
+    1746              : 
+    1747              :       /**
+    1748              :        *  @brief  Return thousands separator character.
+    1749              :        *
+    1750              :        *  This function returns a char_type to use as a thousands
+    1751              :        *  separator.  It does so by returning returning
+    1752              :        *  numpunct<char_type>::do_thousands_sep().
+    1753              :        *
+    1754              :        *  @return  char_type representing a thousands separator.
+    1755              :       */
+    1756              :       char_type
+    1757              :       thousands_sep() const
+    1758              :       { return this->do_thousands_sep(); }
+    1759              : 
+    1760              :       /**
+    1761              :        *  @brief  Return grouping specification.
+    1762              :        *
+    1763              :        *  This function returns a string representing groupings for the
+    1764              :        *  integer part of a number.  Groupings indicate where thousands
+    1765              :        *  separators should be inserted in the integer part of a number.
+    1766              :        *
+    1767              :        *  Each char in the return string is interpret as an integer
+    1768              :        *  rather than a character.  These numbers represent the number
+    1769              :        *  of digits in a group.  The first char in the string
+    1770              :        *  represents the number of digits in the least significant
+    1771              :        *  group.  If a char is negative, it indicates an unlimited
+    1772              :        *  number of digits for the group.  If more chars from the
+    1773              :        *  string are required to group a number, the last char is used
+    1774              :        *  repeatedly.
+    1775              :        *
+    1776              :        *  For example, if the grouping() returns "\003\002" and is
+    1777              :        *  applied to the number 123456789, this corresponds to
+    1778              :        *  12,34,56,789.  Note that if the string was "32", this would
+    1779              :        *  put more than 50 digits into the least significant group if
+    1780              :        *  the character set is ASCII.
+    1781              :        *
+    1782              :        *  The string is returned by calling
+    1783              :        *  numpunct<char_type>::do_grouping().
+    1784              :        *
+    1785              :        *  @return  string representing grouping specification.
+    1786              :       */
+    1787              :       string
+    1788              :       grouping() const
+    1789              :       { return this->do_grouping(); }
+    1790              : 
+    1791              :       /**
+    1792              :        *  @brief  Return string representation of bool true.
+    1793              :        *
+    1794              :        *  This function returns a string_type containing the text
+    1795              :        *  representation for true bool variables.  It does so by calling
+    1796              :        *  numpunct<char_type>::do_truename().
+    1797              :        *
+    1798              :        *  @return  string_type representing printed form of true.
+    1799              :       */
+    1800              :       string_type
+    1801              :       truename() const
+    1802              :       { return this->do_truename(); }
+    1803              : 
+    1804              :       /**
+    1805              :        *  @brief  Return string representation of bool false.
+    1806              :        *
+    1807              :        *  This function returns a string_type containing the text
+    1808              :        *  representation for false bool variables.  It does so by calling
+    1809              :        *  numpunct<char_type>::do_falsename().
+    1810              :        *
+    1811              :        *  @return  string_type representing printed form of false.
+    1812              :       */
+    1813              :       string_type
+    1814              :       falsename() const
+    1815              :       { return this->do_falsename(); }
+    1816              : 
+    1817              :     protected:
+    1818              :       /// Destructor.
+    1819              :       virtual
+    1820              :       ~numpunct();
+    1821              : 
+    1822              :       /**
+    1823              :        *  @brief  Return decimal point character.
+    1824              :        *
+    1825              :        *  Returns a char_type to use as a decimal point.  This function is a
+    1826              :        *  hook for derived classes to change the value returned.
+    1827              :        *
+    1828              :        *  @return  @a char_type representing a decimal point.
+    1829              :       */
+    1830              :       virtual char_type
+    1831              :       do_decimal_point() const
+    1832              :       { return _M_data->_M_decimal_point; }
+    1833              : 
+    1834              :       /**
+    1835              :        *  @brief  Return thousands separator character.
+    1836              :        *
+    1837              :        *  Returns a char_type to use as a thousands separator.  This function
+    1838              :        *  is a hook for derived classes to change the value returned.
+    1839              :        *
+    1840              :        *  @return  @a char_type representing a thousands separator.
+    1841              :       */
+    1842              :       virtual char_type
+    1843              :       do_thousands_sep() const
+    1844              :       { return _M_data->_M_thousands_sep; }
+    1845              : 
+    1846              :       /**
+    1847              :        *  @brief  Return grouping specification.
+    1848              :        *
+    1849              :        *  Returns a string representing groupings for the integer part of a
+    1850              :        *  number.  This function is a hook for derived classes to change the
+    1851              :        *  value returned.  @see grouping() for details.
+    1852              :        *
+    1853              :        *  @return  String representing grouping specification.
+    1854              :       */
+    1855              :       virtual string
+    1856              :       do_grouping() const
+    1857              :       { return _M_data->_M_grouping; }
+    1858              : 
+    1859              :       /**
+    1860              :        *  @brief  Return string representation of bool true.
+    1861              :        *
+    1862              :        *  Returns a string_type containing the text representation for true
+    1863              :        *  bool variables.  This function is a hook for derived classes to
+    1864              :        *  change the value returned.
+    1865              :        *
+    1866              :        *  @return  string_type representing printed form of true.
+    1867              :       */
+    1868              :       virtual string_type
+    1869              :       do_truename() const
+    1870              :       { return _M_data->_M_truename; }
+    1871              : 
+    1872              :       /**
+    1873              :        *  @brief  Return string representation of bool false.
+    1874              :        *
+    1875              :        *  Returns a string_type containing the text representation for false
+    1876              :        *  bool variables.  This function is a hook for derived classes to
+    1877              :        *  change the value returned.
+    1878              :        *
+    1879              :        *  @return  string_type representing printed form of false.
+    1880              :       */
+    1881              :       virtual string_type
+    1882              :       do_falsename() const
+    1883              :       { return _M_data->_M_falsename; }
+    1884              : 
+    1885              :       // For use at construction time only.
+    1886              :       void
+    1887              :       _M_initialize_numpunct(__c_locale __cloc = 0);
+    1888              :     };
+    1889              : 
+    1890              :   template<typename _CharT>
+    1891              :     locale::id numpunct<_CharT>::id;
+    1892              : 
+    1893              :   template<>
+    1894              :     numpunct<char>::~numpunct();
+    1895              : 
+    1896              :   template<>
+    1897              :     void
+    1898              :     numpunct<char>::_M_initialize_numpunct(__c_locale __cloc);
+    1899              : 
+    1900              : #ifdef _GLIBCXX_USE_WCHAR_T
+    1901              :   template<>
+    1902              :     numpunct<wchar_t>::~numpunct();
+    1903              : 
+    1904              :   template<>
+    1905              :     void
+    1906              :     numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc);
+    1907              : #endif
+    1908              : 
+    1909              :   /// class numpunct_byname [22.2.3.2].
+    1910              :   template<typename _CharT>
+    1911              :     class numpunct_byname : public numpunct<_CharT>
+    1912              :     {
+    1913              :     public:
+    1914              :       typedef _CharT                    char_type;
+    1915              :       typedef basic_string<_CharT>        string_type;
+    1916              : 
+    1917              :       explicit
+    1918              :       numpunct_byname(const char* __s, size_t __refs = 0)
+    1919              :       : numpunct<_CharT>(__refs)
+    1920              :       {
+    1921              :         if (__builtin_strcmp(__s, "C") != 0
+    1922              :             && __builtin_strcmp(__s, "POSIX") != 0)
+    1923              :           {
+    1924              :             __c_locale __tmp;
+    1925              :             this->_S_create_c_locale(__tmp, __s);
+    1926              :             this->_M_initialize_numpunct(__tmp);
+    1927              :             this->_S_destroy_c_locale(__tmp);
+    1928              :           }
+    1929              :       }
+    1930              : 
+    1931              : #if __cplusplus >= 201103L
+    1932              :       explicit
+    1933              :       numpunct_byname(const string& __s, size_t __refs = 0)
+    1934              :       : numpunct_byname(__s.c_str(), __refs) { }
+    1935              : #endif
+    1936              : 
+    1937              :     protected:
+    1938              :       virtual
+    1939              :       ~numpunct_byname() { }
+    1940              :     };
+    1941              : 
+    1942              : _GLIBCXX_END_NAMESPACE_CXX11
+    1943              : 
+    1944              : _GLIBCXX_BEGIN_NAMESPACE_LDBL
+    1945              : 
+    1946              :   /**
+    1947              :    *  @brief  Primary class template num_get.
+    1948              :    *  @ingroup locales
+    1949              :    *
+    1950              :    *  This facet encapsulates the code to parse and return a number
+    1951              :    *  from a string.  It is used by the istream numeric extraction
+    1952              :    *  operators.
+    1953              :    *
+    1954              :    *  The num_get template uses protected virtual functions to provide the
+    1955              :    *  actual results.  The public accessors forward the call to the virtual
+    1956              :    *  functions.  These virtual functions are hooks for developers to
+    1957              :    *  implement the behavior they require from the num_get facet.
+    1958              :   */
+    1959              :   template<typename _CharT, typename _InIter>
+    1960              :     class num_get : public locale::facet
+    1961              :     {
+    1962              :     public:
+    1963              :       // Types:
+    1964              :       ///@{
+    1965              :       /// Public typedefs
+    1966              :       typedef _CharT                    char_type;
+    1967              :       typedef _InIter                   iter_type;
+    1968              :       ///@}
+    1969              : 
+    1970              :       /// Numpunct facet id.
+    1971              :       static locale::id                 id;
+    1972              : 
+    1973              :       /**
+    1974              :        *  @brief  Constructor performs initialization.
+    1975              :        *
+    1976              :        *  This is the constructor provided by the standard.
+    1977              :        *
+    1978              :        *  @param __refs  Passed to the base facet class.
+    1979              :       */
+    1980              :       explicit
+    1981              :       num_get(size_t __refs = 0) : facet(__refs) { }
+    1982              : 
+    1983              :       /**
+    1984              :        *  @brief  Numeric parsing.
+    1985              :        *
+    1986              :        *  Parses the input stream into the bool @a v.  It does so by calling
+    1987              :        *  num_get::do_get().
+    1988              :        *
+    1989              :        *  If ios_base::boolalpha is set, attempts to read
+    1990              :        *  ctype<CharT>::truename() or ctype<CharT>::falsename().  Sets
+    1991              :        *  @a v to true or false if successful.  Sets err to
+    1992              :        *  ios_base::failbit if reading the string fails.  Sets err to
+    1993              :        *  ios_base::eofbit if the stream is emptied.
+    1994              :        *
+    1995              :        *  If ios_base::boolalpha is not set, proceeds as with reading a long,
+    1996              :        *  except if the value is 1, sets @a v to true, if the value is 0, sets
+    1997              :        *  @a v to false, and otherwise set err to ios_base::failbit.
+    1998              :        *
+    1999              :        *  @param  __in  Start of input stream.
+    2000              :        *  @param  __end  End of input stream.
+    2001              :        *  @param  __io  Source of locale and flags.
+    2002              :        *  @param  __err  Error flags to set.
+    2003              :        *  @param  __v  Value to format and insert.
+    2004              :        *  @return  Iterator after reading.
+    2005              :       */
+    2006              :       iter_type
+    2007              :       get(iter_type __in, iter_type __end, ios_base& __io,
+    2008              :           ios_base::iostate& __err, bool& __v) const
+    2009              :       { return this->do_get(__in, __end, __io, __err, __v); }
+    2010              : 
+    2011              :       ///@{
+    2012              :       /**
+    2013              :        *  @brief  Numeric parsing.
+    2014              :        *
+    2015              :        *  Parses the input stream into the integral variable @a v.  It does so
+    2016              :        *  by calling num_get::do_get().
+    2017              :        *
+    2018              :        *  Parsing is affected by the flag settings in @a io.
+    2019              :        *
+    2020              :        *  The basic parse is affected by the value of io.flags() &
+    2021              :        *  ios_base::basefield.  If equal to ios_base::oct, parses like the
+    2022              :        *  scanf %o specifier.  Else if equal to ios_base::hex, parses like %X
+    2023              :        *  specifier.  Else if basefield equal to 0, parses like the %i
+    2024              :        *  specifier.  Otherwise, parses like %d for signed and %u for unsigned
+    2025              :        *  types.  The matching type length modifier is also used.
+    2026              :        *
+    2027              :        *  Digit grouping is interpreted according to
+    2028              :        *  numpunct::grouping() and numpunct::thousands_sep().  If the
+    2029              :        *  pattern of digit groups isn't consistent, sets err to
+    2030              :        *  ios_base::failbit.
+    2031              :        *
+    2032              :        *  If parsing the string yields a valid value for @a v, @a v is set.
+    2033              :        *  Otherwise, sets err to ios_base::failbit and leaves @a v unaltered.
+    2034              :        *  Sets err to ios_base::eofbit if the stream is emptied.
+    2035              :        *
+    2036              :        *  @param  __in  Start of input stream.
+    2037              :        *  @param  __end  End of input stream.
+    2038              :        *  @param  __io  Source of locale and flags.
+    2039              :        *  @param  __err  Error flags to set.
+    2040              :        *  @param  __v  Value to format and insert.
+    2041              :        *  @return  Iterator after reading.
+    2042              :       */
+    2043              :       iter_type
+    2044              :       get(iter_type __in, iter_type __end, ios_base& __io,
+    2045              :           ios_base::iostate& __err, long& __v) const
+    2046              :       { return this->do_get(__in, __end, __io, __err, __v); }
+    2047              : 
+    2048              :       iter_type
+    2049              :       get(iter_type __in, iter_type __end, ios_base& __io,
+    2050              :           ios_base::iostate& __err, unsigned short& __v) const
+    2051              :       { return this->do_get(__in, __end, __io, __err, __v); }
+    2052              : 
+    2053              :       iter_type
+    2054              :       get(iter_type __in, iter_type __end, ios_base& __io,
+    2055              :           ios_base::iostate& __err, unsigned int& __v)   const
+    2056              :       { return this->do_get(__in, __end, __io, __err, __v); }
+    2057              : 
+    2058              :       iter_type
+    2059              :       get(iter_type __in, iter_type __end, ios_base& __io,
+    2060              :           ios_base::iostate& __err, unsigned long& __v)  const
+    2061              :       { return this->do_get(__in, __end, __io, __err, __v); }
+    2062              : 
+    2063              : #ifdef _GLIBCXX_USE_LONG_LONG
+    2064              :       iter_type
+    2065              :       get(iter_type __in, iter_type __end, ios_base& __io,
+    2066              :           ios_base::iostate& __err, long long& __v) const
+    2067              :       { return this->do_get(__in, __end, __io, __err, __v); }
+    2068              : 
+    2069              :       iter_type
+    2070              :       get(iter_type __in, iter_type __end, ios_base& __io,
+    2071              :           ios_base::iostate& __err, unsigned long long& __v)  const
+    2072              :       { return this->do_get(__in, __end, __io, __err, __v); }
+    2073              : #endif
+    2074              :       ///@}
+    2075              : 
+    2076              :       ///@{
+    2077              :       /**
+    2078              :        *  @brief  Numeric parsing.
+    2079              :        *
+    2080              :        *  Parses the input stream into the integral variable @a v.  It does so
+    2081              :        *  by calling num_get::do_get().
+    2082              :        *
+    2083              :        *  The input characters are parsed like the scanf %g specifier.  The
+    2084              :        *  matching type length modifier is also used.
+    2085              :        *
+    2086              :        *  The decimal point character used is numpunct::decimal_point().
+    2087              :        *  Digit grouping is interpreted according to
+    2088              :        *  numpunct::grouping() and numpunct::thousands_sep().  If the
+    2089              :        *  pattern of digit groups isn't consistent, sets err to
+    2090              :        *  ios_base::failbit.
+    2091              :        *
+    2092              :        *  If parsing the string yields a valid value for @a v, @a v is set.
+    2093              :        *  Otherwise, sets err to ios_base::failbit and leaves @a v unaltered.
+    2094              :        *  Sets err to ios_base::eofbit if the stream is emptied.
+    2095              :        *
+    2096              :        *  @param  __in  Start of input stream.
+    2097              :        *  @param  __end  End of input stream.
+    2098              :        *  @param  __io  Source of locale and flags.
+    2099              :        *  @param  __err  Error flags to set.
+    2100              :        *  @param  __v  Value to format and insert.
+    2101              :        *  @return  Iterator after reading.
+    2102              :       */
+    2103              :       iter_type
+    2104              :       get(iter_type __in, iter_type __end, ios_base& __io,
+    2105              :           ios_base::iostate& __err, float& __v) const
+    2106              :       { return this->do_get(__in, __end, __io, __err, __v); }
+    2107              : 
+    2108              :       iter_type
+    2109              :       get(iter_type __in, iter_type __end, ios_base& __io,
+    2110              :           ios_base::iostate& __err, double& __v) const
+    2111              :       { return this->do_get(__in, __end, __io, __err, __v); }
+    2112              : 
+    2113              :       iter_type
+    2114              :       get(iter_type __in, iter_type __end, ios_base& __io,
+    2115              :           ios_base::iostate& __err, long double& __v) const
+    2116              :       { return this->do_get(__in, __end, __io, __err, __v); }
+    2117              :       ///@}
+    2118              : 
+    2119              :       /**
+    2120              :        *  @brief  Numeric parsing.
+    2121              :        *
+    2122              :        *  Parses the input stream into the pointer variable @a v.  It does so
+    2123              :        *  by calling num_get::do_get().
+    2124              :        *
+    2125              :        *  The input characters are parsed like the scanf %p specifier.
+    2126              :        *
+    2127              :        *  Digit grouping is interpreted according to
+    2128              :        *  numpunct::grouping() and numpunct::thousands_sep().  If the
+    2129              :        *  pattern of digit groups isn't consistent, sets err to
+    2130              :        *  ios_base::failbit.
+    2131              :        *
+    2132              :        *  Note that the digit grouping effect for pointers is a bit ambiguous
+    2133              :        *  in the standard and shouldn't be relied on.  See DR 344.
+    2134              :        *
+    2135              :        *  If parsing the string yields a valid value for @a v, @a v is set.
+    2136              :        *  Otherwise, sets err to ios_base::failbit and leaves @a v unaltered.
+    2137              :        *  Sets err to ios_base::eofbit if the stream is emptied.
+    2138              :        *
+    2139              :        *  @param  __in  Start of input stream.
+    2140              :        *  @param  __end  End of input stream.
+    2141              :        *  @param  __io  Source of locale and flags.
+    2142              :        *  @param  __err  Error flags to set.
+    2143              :        *  @param  __v  Value to format and insert.
+    2144              :        *  @return  Iterator after reading.
+    2145              :       */
+    2146              :       iter_type
+    2147              :       get(iter_type __in, iter_type __end, ios_base& __io,
+    2148              :           ios_base::iostate& __err, void*& __v) const
+    2149              :       { return this->do_get(__in, __end, __io, __err, __v); }
+    2150              : 
+    2151              :     protected:
+    2152              :       /// Destructor.
+    2153              :       virtual ~num_get() { }
+    2154              : 
+    2155              :       _GLIBCXX_DEFAULT_ABI_TAG
+    2156              :       iter_type
+    2157              :       _M_extract_float(iter_type, iter_type, ios_base&, ios_base::iostate&,
+    2158              :                        string&) const;
+    2159              : 
+    2160              :       template<typename _ValueT>
+    2161              :         _GLIBCXX_DEFAULT_ABI_TAG
+    2162              :         iter_type
+    2163              :         _M_extract_int(iter_type, iter_type, ios_base&, ios_base::iostate&,
+    2164              :                        _ValueT&) const;
+    2165              : 
+    2166              :       template<typename _CharT2>
+    2167              :       typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, int>::__type
+    2168              :         _M_find(const _CharT2*, size_t __len, _CharT2 __c) const
+    2169              :         {
+    2170              :           int __ret = -1;
+    2171              :           if (__len <= 10)
+    2172              :             {
+    2173              :               if (__c >= _CharT2('0') && __c < _CharT2(_CharT2('0') + __len))
+    2174              :                 __ret = __c - _CharT2('0');
+    2175              :             }
+    2176              :           else
+    2177              :             {
+    2178              :               if (__c >= _CharT2('0') && __c <= _CharT2('9'))
+    2179              :                 __ret = __c - _CharT2('0');
+    2180              :               else if (__c >= _CharT2('a') && __c <= _CharT2('f'))
+    2181              :                 __ret = 10 + (__c - _CharT2('a'));
+    2182              :               else if (__c >= _CharT2('A') && __c <= _CharT2('F'))
+    2183              :                 __ret = 10 + (__c - _CharT2('A'));
+    2184              :             }
+    2185              :           return __ret;
+    2186              :         }
+    2187              : 
+    2188              :       template<typename _CharT2>
+    2189              :       typename __gnu_cxx::__enable_if<!__is_char<_CharT2>::__value,
+    2190              :                                       int>::__type
+    2191              :         _M_find(const _CharT2* __zero, size_t __len, _CharT2 __c) const
+    2192              :         {
+    2193              :           int __ret = -1;
+    2194              :           const char_type* __q = char_traits<_CharT2>::find(__zero, __len, __c);
+    2195              :           if (__q)
+    2196              :             {
+    2197              :               __ret = __q - __zero;
+    2198              :               if (__ret > 15)
+    2199              :                 __ret -= 6;
+    2200              :             }
+    2201              :           return __ret;
+    2202              :         }
+    2203              : 
+    2204              :       ///@{
+    2205              :       /**
+    2206              :        *  @brief  Numeric parsing.
+    2207              :        *
+    2208              :        *  Parses the input stream into the variable @a v.  This function is a
+    2209              :        *  hook for derived classes to change the value returned.  @see get()
+    2210              :        *  for more details.
+    2211              :        *
+    2212              :        *  @param  __beg  Start of input stream.
+    2213              :        *  @param  __end  End of input stream.
+    2214              :        *  @param  __io  Source of locale and flags.
+    2215              :        *  @param  __err  Error flags to set.
+    2216              :        *  @param  __v  Value to format and insert.
+    2217              :        *  @return  Iterator after reading.
+    2218              :       */
+    2219              :       virtual iter_type
+    2220              :       do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, bool&) const;
+    2221              : 
+    2222              :       virtual iter_type
+    2223              :       do_get(iter_type __beg, iter_type __end, ios_base& __io,
+    2224              :              ios_base::iostate& __err, long& __v) const
+    2225              :       { return _M_extract_int(__beg, __end, __io, __err, __v); }
+    2226              : 
+    2227              :       virtual iter_type
+    2228              :       do_get(iter_type __beg, iter_type __end, ios_base& __io,
+    2229              :              ios_base::iostate& __err, unsigned short& __v) const
+    2230              :       { return _M_extract_int(__beg, __end, __io, __err, __v); }
+    2231              : 
+    2232              :       virtual iter_type
+    2233              :       do_get(iter_type __beg, iter_type __end, ios_base& __io,
+    2234              :              ios_base::iostate& __err, unsigned int& __v) const
+    2235              :       { return _M_extract_int(__beg, __end, __io, __err, __v); }
+    2236              : 
+    2237              :       virtual iter_type
+    2238              :       do_get(iter_type __beg, iter_type __end, ios_base& __io,
+    2239              :              ios_base::iostate& __err, unsigned long& __v) const
+    2240              :       { return _M_extract_int(__beg, __end, __io, __err, __v); }
+    2241              : 
+    2242              : #ifdef _GLIBCXX_USE_LONG_LONG
+    2243              :       virtual iter_type
+    2244              :       do_get(iter_type __beg, iter_type __end, ios_base& __io,
+    2245              :              ios_base::iostate& __err, long long& __v) const
+    2246              :       { return _M_extract_int(__beg, __end, __io, __err, __v); }
+    2247              : 
+    2248              :       virtual iter_type
+    2249              :       do_get(iter_type __beg, iter_type __end, ios_base& __io,
+    2250              :              ios_base::iostate& __err, unsigned long long& __v) const
+    2251              :       { return _M_extract_int(__beg, __end, __io, __err, __v); }
+    2252              : #endif
+    2253              : 
+    2254              :       virtual iter_type
+    2255              :       do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, float&) const;
+    2256              : 
+    2257              :       virtual iter_type
+    2258              :       do_get(iter_type, iter_type, ios_base&, ios_base::iostate&,
+    2259              :              double&) const;
+    2260              : 
+    2261              :       // XXX GLIBCXX_ABI Deprecated
+    2262              : #if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
+    2263              :       // For __gnu_cxx_ldbl128::num_get and __gnu_cxx_ieee128::num_get
+    2264              :       // this entry in the vtable is for a 64-bit "long double" with the
+    2265              :       // same format as double. This keeps the vtable layout consistent
+    2266              :       // with std::num_get (visible when -mlong-double-64 is used).
+    2267              :       virtual iter_type
+    2268              :       __do_get(iter_type, iter_type, ios_base&, ios_base::iostate&,
+    2269              :                double&) const;
+    2270              : #else
+    2271              :       virtual iter_type
+    2272              :       do_get(iter_type, iter_type, ios_base&, ios_base::iostate&,
+    2273              :              long double&) const;
+    2274              : #endif
+    2275              : 
+    2276              :       virtual iter_type
+    2277              :       do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, void*&) const;
+    2278              : 
+    2279              :       // XXX GLIBCXX_ABI Deprecated
+    2280              : #if defined _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT \
+    2281              :       && defined __LONG_DOUBLE_IEEE128__
+    2282              :       // For __gnu_cxx_ieee128::num_get this entry in the vtable is for
+    2283              :       // the non-IEEE 128-bit "long double" (aka "double double"). This
+    2284              :       // is consistent with __gnu_cxx_ldbl128::num_get (-mabi=ibmlongdouble)
+    2285              :       virtual iter_type
+    2286              :       __do_get(iter_type, iter_type, ios_base&, ios_base::iostate&,
+    2287              :                __ibm128&) const;
+    2288              : #endif
+    2289              : 
+    2290              :       // XXX GLIBCXX_ABI Deprecated
+    2291              : #if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
+    2292              :       // For __gnu_cxx_ldbl128::num_get and __gnu_cxx_ieee128::num_get
+    2293              :       // this entry in the vtable is for the 128-bit "long double" type.
+    2294              :       virtual iter_type
+    2295              :       do_get(iter_type, iter_type, ios_base&, ios_base::iostate&,
+    2296              :              long double&) const;
+    2297              : #endif
+    2298              :       ///@}
+    2299              :     };
+    2300              : 
+    2301              :   template<typename _CharT, typename _InIter>
+    2302              :     locale::id num_get<_CharT, _InIter>::id;
+    2303              : 
+    2304              : 
+    2305              :   /**
+    2306              :    *  @brief  Primary class template num_put.
+    2307              :    *  @ingroup locales
+    2308              :    *
+    2309              :    *  This facet encapsulates the code to convert a number to a string.  It is
+    2310              :    *  used by the ostream numeric insertion operators.
+    2311              :    *
+    2312              :    *  The num_put template uses protected virtual functions to provide the
+    2313              :    *  actual results.  The public accessors forward the call to the virtual
+    2314              :    *  functions.  These virtual functions are hooks for developers to
+    2315              :    *  implement the behavior they require from the num_put facet.
+    2316              :   */
+    2317              :   template<typename _CharT, typename _OutIter>
+    2318              :     class num_put : public locale::facet
+    2319              :     {
+    2320              :     public:
+    2321              :       // Types:
+    2322              :       ///@{
+    2323              :       /// Public typedefs
+    2324              :       typedef _CharT            char_type;
+    2325              :       typedef _OutIter          iter_type;
+    2326              :       ///@}
+    2327              : 
+    2328              :       /// Numpunct facet id.
+    2329              :       static locale::id         id;
+    2330              : 
+    2331              :       /**
+    2332              :        *  @brief  Constructor performs initialization.
+    2333              :        *
+    2334              :        *  This is the constructor provided by the standard.
+    2335              :        *
+    2336              :        *  @param __refs  Passed to the base facet class.
+    2337              :       */
+    2338              :       explicit
+    2339              :       num_put(size_t __refs = 0) : facet(__refs) { }
+    2340              : 
+    2341              :       /**
+    2342              :        *  @brief  Numeric formatting.
+    2343              :        *
+    2344              :        *  Formats the boolean @a v and inserts it into a stream.  It does so
+    2345              :        *  by calling num_put::do_put().
+    2346              :        *
+    2347              :        *  If ios_base::boolalpha is set, writes ctype<CharT>::truename() or
+    2348              :        *  ctype<CharT>::falsename().  Otherwise formats @a v as an int.
+    2349              :        *
+    2350              :        *  @param  __s  Stream to write to.
+    2351              :        *  @param  __io  Source of locale and flags.
+    2352              :        *  @param  __fill  Char_type to use for filling.
+    2353              :        *  @param  __v  Value to format and insert.
+    2354              :        *  @return  Iterator after writing.
+    2355              :       */
+    2356              :       iter_type
+    2357              :       put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const
+    2358              :       { return this->do_put(__s, __io, __fill, __v); }
+    2359              : 
+    2360              :       ///@{
+    2361              :       /**
+    2362              :        *  @brief  Numeric formatting.
+    2363              :        *
+    2364              :        *  Formats the integral value @a v and inserts it into a
+    2365              :        *  stream.  It does so by calling num_put::do_put().
+    2366              :        *
+    2367              :        *  Formatting is affected by the flag settings in @a io.
+    2368              :        *
+    2369              :        *  The basic format is affected by the value of io.flags() &
+    2370              :        *  ios_base::basefield.  If equal to ios_base::oct, formats like the
+    2371              :        *  printf %o specifier.  Else if equal to ios_base::hex, formats like
+    2372              :        *  %x or %X with ios_base::uppercase unset or set respectively.
+    2373              :        *  Otherwise, formats like %d, %ld, %lld for signed and %u, %lu, %llu
+    2374              :        *  for unsigned values.  Note that if both oct and hex are set, neither
+    2375              :        *  will take effect.
+    2376              :        *
+    2377              :        *  If ios_base::showpos is set, '+' is output before positive values.
+    2378              :        *  If ios_base::showbase is set, '0' precedes octal values (except 0)
+    2379              :        *  and '0[xX]' precedes hex values.
+    2380              :        *
+    2381              :        *  The decimal point character used is numpunct::decimal_point().
+    2382              :        *  Thousands separators are inserted according to
+    2383              :        *  numpunct::grouping() and numpunct::thousands_sep().
+    2384              :        *
+    2385              :        *  If io.width() is non-zero, enough @a fill characters are inserted to
+    2386              :        *  make the result at least that wide.  If
+    2387              :        *  (io.flags() & ios_base::adjustfield) == ios_base::left, result is
+    2388              :        *  padded at the end.  If ios_base::internal, then padding occurs
+    2389              :        *  immediately after either a '+' or '-' or after '0x' or '0X'.
+    2390              :        *  Otherwise, padding occurs at the beginning.
+    2391              :        *
+    2392              :        *  @param  __s  Stream to write to.
+    2393              :        *  @param  __io  Source of locale and flags.
+    2394              :        *  @param  __fill  Char_type to use for filling.
+    2395              :        *  @param  __v  Value to format and insert.
+    2396              :        *  @return  Iterator after writing.
+    2397              :       */
+    2398              :       iter_type
+    2399              :       put(iter_type __s, ios_base& __io, char_type __fill, long __v) const
+    2400              :       { return this->do_put(__s, __io, __fill, __v); }
+    2401              : 
+    2402              :       iter_type
+    2403              :       put(iter_type __s, ios_base& __io, char_type __fill,
+    2404              :           unsigned long __v) const
+    2405              :       { return this->do_put(__s, __io, __fill, __v); }
+    2406              : 
+    2407              : #ifdef _GLIBCXX_USE_LONG_LONG
+    2408              :       iter_type
+    2409              :       put(iter_type __s, ios_base& __io, char_type __fill, long long __v) const
+    2410              :       { return this->do_put(__s, __io, __fill, __v); }
+    2411              : 
+    2412              :       iter_type
+    2413              :       put(iter_type __s, ios_base& __io, char_type __fill,
+    2414              :           unsigned long long __v) const
+    2415              :       { return this->do_put(__s, __io, __fill, __v); }
+    2416              : #endif
+    2417              :       ///@}
+    2418              : 
+    2419              :       ///@{
+    2420              :       /**
+    2421              :        *  @brief  Numeric formatting.
+    2422              :        *
+    2423              :        *  Formats the floating point value @a v and inserts it into a stream.
+    2424              :        *  It does so by calling num_put::do_put().
+    2425              :        *
+    2426              :        *  Formatting is affected by the flag settings in @a io.
+    2427              :        *
+    2428              :        *  The basic format is affected by the value of io.flags() &
+    2429              :        *  ios_base::floatfield.  If equal to ios_base::fixed, formats like the
+    2430              :        *  printf %f specifier.  Else if equal to ios_base::scientific, formats
+    2431              :        *  like %e or %E with ios_base::uppercase unset or set respectively.
+    2432              :        *  Otherwise, formats like %g or %G depending on uppercase.  Note that
+    2433              :        *  if both fixed and scientific are set, the effect will also be like
+    2434              :        *  %g or %G.
+    2435              :        *
+    2436              :        *  The output precision is given by io.precision().  This precision is
+    2437              :        *  capped at numeric_limits::digits10 + 2 (different for double and
+    2438              :        *  long double).  The default precision is 6.
+    2439              :        *
+    2440              :        *  If ios_base::showpos is set, '+' is output before positive values.
+    2441              :        *  If ios_base::showpoint is set, a decimal point will always be
+    2442              :        *  output.
+    2443              :        *
+    2444              :        *  The decimal point character used is numpunct::decimal_point().
+    2445              :        *  Thousands separators are inserted according to
+    2446              :        *  numpunct::grouping() and numpunct::thousands_sep().
+    2447              :        *
+    2448              :        *  If io.width() is non-zero, enough @a fill characters are inserted to
+    2449              :        *  make the result at least that wide.  If
+    2450              :        *  (io.flags() & ios_base::adjustfield) == ios_base::left, result is
+    2451              :        *  padded at the end.  If ios_base::internal, then padding occurs
+    2452              :        *  immediately after either a '+' or '-' or after '0x' or '0X'.
+    2453              :        *  Otherwise, padding occurs at the beginning.
+    2454              :        *
+    2455              :        *  @param  __s  Stream to write to.
+    2456              :        *  @param  __io  Source of locale and flags.
+    2457              :        *  @param  __fill  Char_type to use for filling.
+    2458              :        *  @param  __v  Value to format and insert.
+    2459              :        *  @return  Iterator after writing.
+    2460              :       */
+    2461              :       iter_type
+    2462              :       put(iter_type __s, ios_base& __io, char_type __fill, double __v) const
+    2463              :       { return this->do_put(__s, __io, __fill, __v); }
+    2464              : 
+    2465              :       iter_type
+    2466              :       put(iter_type __s, ios_base& __io, char_type __fill,
+    2467              :           long double __v) const
+    2468              :       { return this->do_put(__s, __io, __fill, __v); }
+    2469              :       ///@}
+    2470              : 
+    2471              :       /**
+    2472              :        *  @brief  Numeric formatting.
+    2473              :        *
+    2474              :        *  Formats the pointer value @a v and inserts it into a stream.  It
+    2475              :        *  does so by calling num_put::do_put().
+    2476              :        *
+    2477              :        *  This function formats @a v as an unsigned long with ios_base::hex
+    2478              :        *  and ios_base::showbase set.
+    2479              :        *
+    2480              :        *  @param  __s  Stream to write to.
+    2481              :        *  @param  __io  Source of locale and flags.
+    2482              :        *  @param  __fill  Char_type to use for filling.
+    2483              :        *  @param  __v  Value to format and insert.
+    2484              :        *  @return  Iterator after writing.
+    2485              :       */
+    2486              :       iter_type
+    2487              :       put(iter_type __s, ios_base& __io, char_type __fill,
+    2488              :           const void* __v) const
+    2489              :       { return this->do_put(__s, __io, __fill, __v); }
+    2490              : 
+    2491              :     protected:
+    2492              :       template<typename _ValueT>
+    2493              :         iter_type
+    2494              :         _M_insert_float(iter_type, ios_base& __io, char_type __fill,
+    2495              :                         char __mod, _ValueT __v) const;
+    2496              : 
+    2497              :       void
+    2498              :       _M_group_float(const char* __grouping, size_t __grouping_size,
+    2499              :                      char_type __sep, const char_type* __p, char_type* __new,
+    2500              :                      char_type* __cs, int& __len) const;
+    2501              : 
+    2502              :       template<typename _ValueT>
+    2503              :         iter_type
+    2504              :         _M_insert_int(iter_type, ios_base& __io, char_type __fill,
+    2505              :                       _ValueT __v) const;
+    2506              : 
+    2507              :       void
+    2508              :       _M_group_int(const char* __grouping, size_t __grouping_size,
+    2509              :                    char_type __sep, ios_base& __io, char_type* __new,
+    2510              :                    char_type* __cs, int& __len) const;
+    2511              : 
+    2512              :       void
+    2513              :       _M_pad(char_type __fill, streamsize __w, ios_base& __io,
+    2514              :              char_type* __new, const char_type* __cs, int& __len) const;
+    2515              : 
+    2516              :       /// Destructor.
+    2517              :       virtual
+    2518              :       ~num_put() { }
+    2519              : 
+    2520              :       ///@{
+    2521              :       /**
+    2522              :        *  @brief  Numeric formatting.
+    2523              :        *
+    2524              :        *  These functions do the work of formatting numeric values and
+    2525              :        *  inserting them into a stream. This function is a hook for derived
+    2526              :        *  classes to change the value returned.
+    2527              :        *
+    2528              :        *  @param  __s  Stream to write to.
+    2529              :        *  @param  __io  Source of locale and flags.
+    2530              :        *  @param  __fill  Char_type to use for filling.
+    2531              :        *  @param  __v  Value to format and insert.
+    2532              :        *  @return  Iterator after writing.
+    2533              :       */
+    2534              :       virtual iter_type
+    2535              :       do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const;
+    2536              : 
+    2537              :       virtual iter_type
+    2538              :       do_put(iter_type __s, ios_base& __io, char_type __fill, long __v) const
+    2539              :       { return _M_insert_int(__s, __io, __fill, __v); }
+    2540              : 
+    2541              :       virtual iter_type
+    2542              :       do_put(iter_type __s, ios_base& __io, char_type __fill,
+    2543              :              unsigned long __v) const
+    2544              :       { return _M_insert_int(__s, __io, __fill, __v); }
+    2545              : 
+    2546              : #ifdef _GLIBCXX_USE_LONG_LONG
+    2547              :       virtual iter_type
+    2548              :       do_put(iter_type __s, ios_base& __io, char_type __fill,
+    2549              :              long long __v) const
+    2550              :       { return _M_insert_int(__s, __io, __fill, __v); }
+    2551              : 
+    2552              :       virtual iter_type
+    2553              :       do_put(iter_type __s, ios_base& __io, char_type __fill,
+    2554              :              unsigned long long __v) const
+    2555              :       { return _M_insert_int(__s, __io, __fill, __v); }
+    2556              : #endif
+    2557              : 
+    2558              :       virtual iter_type
+    2559              :       do_put(iter_type, ios_base&, char_type, double) const;
+    2560              : 
+    2561              :       // XXX GLIBCXX_ABI Deprecated
+    2562              : #if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
+    2563              :       virtual iter_type
+    2564              :       __do_put(iter_type, ios_base&, char_type, double) const;
+    2565              : #else
+    2566              :       virtual iter_type
+    2567              :       do_put(iter_type, ios_base&, char_type, long double) const;
+    2568              : #endif
+    2569              : 
+    2570              :       virtual iter_type
+    2571              :       do_put(iter_type, ios_base&, char_type, const void*) const;
+    2572              : 
+    2573              :       // XXX GLIBCXX_ABI Deprecated
+    2574              : #if defined _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT \
+    2575              :       && defined __LONG_DOUBLE_IEEE128__
+    2576              :       virtual iter_type
+    2577              :       __do_put(iter_type, ios_base&, char_type, __ibm128) const;
+    2578              : #endif
+    2579              : 
+    2580              :       // XXX GLIBCXX_ABI Deprecated
+    2581              : #if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
+    2582              :       virtual iter_type
+    2583              :       do_put(iter_type, ios_base&, char_type, long double) const;
+    2584              : #endif
+    2585              :       ///@}
+    2586              :     };
+    2587              : 
+    2588              :   template <typename _CharT, typename _OutIter>
+    2589              :     locale::id num_put<_CharT, _OutIter>::id;
+    2590              : 
+    2591              : _GLIBCXX_END_NAMESPACE_LDBL
+    2592              : 
+    2593              :   // Subclause convenience interfaces, inlines.
+    2594              :   // NB: These are inline because, when used in a loop, some compilers
+    2595              :   // can hoist the body out of the loop; then it's just as fast as the
+    2596              :   // C is*() function.
+    2597              : 
+    2598              :   /// Convenience interface to ctype.is(ctype_base::space, __c).
+    2599              :   template<typename _CharT>
+    2600              :     inline bool
+    2601              :     isspace(_CharT __c, const locale& __loc)
+    2602              :     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::space, __c); }
+    2603              : 
+    2604              :   /// Convenience interface to ctype.is(ctype_base::print, __c).
+    2605              :   template<typename _CharT>
+    2606              :     inline bool
+    2607              :     isprint(_CharT __c, const locale& __loc)
+    2608              :     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::print, __c); }
+    2609              : 
+    2610              :   /// Convenience interface to ctype.is(ctype_base::cntrl, __c).
+    2611              :   template<typename _CharT>
+    2612              :     inline bool
+    2613              :     iscntrl(_CharT __c, const locale& __loc)
+    2614              :     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::cntrl, __c); }
+    2615              : 
+    2616              :   /// Convenience interface to ctype.is(ctype_base::upper, __c).
+    2617              :   template<typename _CharT>
+    2618              :     inline bool
+    2619              :     isupper(_CharT __c, const locale& __loc)
+    2620              :     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::upper, __c); }
+    2621              : 
+    2622              :   /// Convenience interface to ctype.is(ctype_base::lower, __c).
+    2623              :   template<typename _CharT>
+    2624              :     inline bool
+    2625              :     islower(_CharT __c, const locale& __loc)
+    2626              :     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::lower, __c); }
+    2627              : 
+    2628              :   /// Convenience interface to ctype.is(ctype_base::alpha, __c).
+    2629              :   template<typename _CharT>
+    2630              :     inline bool
+    2631              :     isalpha(_CharT __c, const locale& __loc)
+    2632              :     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alpha, __c); }
+    2633              : 
+    2634              :   /// Convenience interface to ctype.is(ctype_base::digit, __c).
+    2635              :   template<typename _CharT>
+    2636              :     inline bool
+    2637              :     isdigit(_CharT __c, const locale& __loc)
+    2638              :     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::digit, __c); }
+    2639              : 
+    2640              :   /// Convenience interface to ctype.is(ctype_base::punct, __c).
+    2641              :   template<typename _CharT>
+    2642              :     inline bool
+    2643              :     ispunct(_CharT __c, const locale& __loc)
+    2644              :     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::punct, __c); }
+    2645              : 
+    2646              :   /// Convenience interface to ctype.is(ctype_base::xdigit, __c).
+    2647              :   template<typename _CharT>
+    2648              :     inline bool
+    2649              :     isxdigit(_CharT __c, const locale& __loc)
+    2650              :     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::xdigit, __c); }
+    2651              : 
+    2652              :   /// Convenience interface to ctype.is(ctype_base::alnum, __c).
+    2653              :   template<typename _CharT>
+    2654              :     inline bool
+    2655              :     isalnum(_CharT __c, const locale& __loc)
+    2656              :     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alnum, __c); }
+    2657              : 
+    2658              :   /// Convenience interface to ctype.is(ctype_base::graph, __c).
+    2659              :   template<typename _CharT>
+    2660              :     inline bool
+    2661              :     isgraph(_CharT __c, const locale& __loc)
+    2662              :     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::graph, __c); }
+    2663              : 
+    2664              : #if __cplusplus >= 201103L
+    2665              :   /// Convenience interface to ctype.is(ctype_base::blank, __c).
+    2666              :   template<typename _CharT>
+    2667              :     inline bool
+    2668              :     isblank(_CharT __c, const locale& __loc)
+    2669              :     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::blank, __c); }
+    2670              : #endif
+    2671              : 
+    2672              :   /// Convenience interface to ctype.toupper(__c).
+    2673              :   template<typename _CharT>
+    2674              :     inline _CharT
+    2675              :     toupper(_CharT __c, const locale& __loc)
+    2676              :     { return use_facet<ctype<_CharT> >(__loc).toupper(__c); }
+    2677              : 
+    2678              :   /// Convenience interface to ctype.tolower(__c).
+    2679              :   template<typename _CharT>
+    2680              :     inline _CharT
+    2681              :     tolower(_CharT __c, const locale& __loc)
+    2682              :     { return use_facet<ctype<_CharT> >(__loc).tolower(__c); }
+    2683              : 
+    2684              : _GLIBCXX_END_NAMESPACE_VERSION
+    2685              : } // namespace std
+    2686              : 
+    2687              : # include <bits/locale_facets.tcc>
+    2688              : 
+    2689              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/move.h.func-c.html b/html/usr/include/c++/13/bits/move.h.func-c.html new file mode 100644 index 0000000..c42b654 --- /dev/null +++ b/html/usr/include/c++/13/bits/move.h.func-c.html @@ -0,0 +1,3400 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/move.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - move.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1313
Test Date:2024-04-30 13:17:26Functions:61.7 %470290
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt4swapIcENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS4_ESt18is_move_assignableIS4_EEE5valueEvE4typeERS4_SE_1567088
_ZSt4swapIPFbRKSt9_Any_dataOcEENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleISA_ESt18is_move_assignableISA_EEE5valueEvE4typeERSA_SK_0
_ZSt4swapIPFbRSt9_Any_dataRKS0_St18_Manager_operationEENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleISB_ESt18is_move_assignableISB_EEE5valueEvE4typeERSB_SL_0
_ZSt4swapIPKN6loguru11EcEntryBaseEENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS8_ESt18is_move_assignableIS8_EEE5valueEvE4typeERS8_SI_0
_ZSt4swapIPKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleISC_ESt18is_move_assignableISC_EEE5valueEvE4typeERSC_SM_0
_ZSt4swapISt6localeENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS5_ESt18is_move_assignableIS5_EEE5valueEvE4typeERS5_SF_0
_ZSt4swapISt9_Any_dataENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS5_ESt18is_move_assignableIS5_EEE5valueEvE4typeERS5_SF_0
_ZSt4swapIcENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS4_ESt18is_move_assignableIS4_EEE5valueEvE4typeERS4_SE_0
_ZSt4swapIlENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS4_ESt18is_move_assignableIS4_EEE5valueEvE4typeERS4_SE_0
_ZSt4swapIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE10json_valueEENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleISK_ESt18is_move_assignableISK_EEE5valueEvE4typeERSK_SU_2
_ZSt4swapIN8nlohmann16json_abi_v3_11_36detail7value_tEENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS8_ESt18is_move_assignableIS8_EEE5valueEvE4typeERS8_SI_2
_ZSt4swapIfENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS4_ESt18is_move_assignableIS4_EEE5valueEvE4typeERS4_SE_28
_ZSt4swapIdENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS4_ESt18is_move_assignableIS4_EEE5valueEvE4typeERS4_SE_3238
_ZSt4swapIiENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS4_ESt18is_move_assignableIS4_EEE5valueEvE4typeERS4_SE_83908
_ZSt4swapINSt6thread2idEENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS6_ESt18is_move_assignableIS6_EEE5valueEvE4typeERS6_SG_1479910
_ZSt9addressofIN2at6TensorEEPT_RS2_106071838
_ZSt9addressofINSt8__detail10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEPT_RSE_58918
_ZSt9addressofINSt8__detail10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEPT_RS9_61094
_ZSt9addressofIPNSt8__detail15_Hash_node_baseEEPT_RS3_116626
_ZSt9addressofINSt8__detail10_Hash_nodeISt4pairIKidELb0EEEEPT_RS6_140048
_ZSt9addressofIN6caffe28TypeMetaEEPT_RS2_418776
_ZSt9addressofIN2at6TensorEEPT_RS2_105276376
_ZSt11__addressofIdEPT_RS0_587049110
_ZSt11__addressofIKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEPT_RS7_0
_ZSt11__addressofIKSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEEPT_RSH_0
_ZSt11__addressofIKcEPT_RS1_0
_ZSt11__addressofIN3c107complexIdEEEPT_RS3_0
_ZSt11__addressofIN3c108optionalIN2at6TensorEEEEPT_RS5_0
_ZSt11__addressofINSt7__cxx1112regex_traitsIcE10_RegexMaskEEPT_RS4_0
_ZSt11__addressofINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEEPT_RSD_0
_ZSt11__addressofINSt8__detail6_StateIcEEEPT_RS3_0
_ZSt11__addressofISaISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEEPT_RSC_0
_ZSt11__addressofISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EEEPT_RS7_0
_ZSt11__addressofISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEEPT_RSD_0
_ZSt11__addressofISt4pairIccEEPT_RS2_0
_ZSt11__addressofISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEEEPT_RSI_0
_ZSt11__addressofIdEPT_RS0_0
_ZSt11__addressofIKSt6vectorIS0_IfSaIfEESaIS2_EEEPT_RS6_6
_ZSt11__addressofIKSt6vectorIPN8bayesnet4NodeESaIS3_EEEPT_RS7_8
_ZSt11__addressofIKSt6vectorIdSaIdEEEPT_RS4_14
_ZSt11__addressofIN5Catch10Generators16GeneratorWrapperIPKcEEEPT_RS6_40
_ZSt11__addressofISaISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEEPT_RSH_40
_ZSt11__addressofISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEPT_RS8_48
_ZSt11__addressofISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEEPT_RSH_114
_ZSt11__addressofIfEPT_RS0_218
_ZSt11__addressofIN6loguru8CallbackEEPT_RS2_232
_ZSt11__addressofISaISt10_List_nodeIiEEEPT_RS3_376
_ZSt11__addressofISt4pairIifEEPT_RS2_474
_ZSt11__addressofIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEEPT_RSF_496
_ZSt11__addressofIKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS6_St6vectorIiSaIiEEESt10_Select1stISC_ESt4lessIS6_ESaISC_EEEPT_RSK_644
_ZSt11__addressofIKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EEEPT_RSA_760
_ZSt11__addressofISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EEEPT_RS9_1240
_ZSt11__addressofISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEEPT_RS6_2250
_ZSt11__addressofIiEPT_RS0_3492
_ZSt11__addressofIKSt6vectorIfSaIfEEEPT_RS4_3728
_ZSt11__addressofISt6vectorIfSaIfEEEPT_RS3_4420
_ZSt11__addressofImEPT_RS0_6138
_ZSt11__addressofISt4pairIfS0_IiiEEEPT_RS3_7134
_ZSt11__addressofIKSt6vectorIiSaIiEEEPT_RS4_8332
_ZSt11__addressofISt4pairIiiEEPT_RS2_11616
_ZSt11__addressofISt6vectorIlSaIlEEEPT_RS3_14194
_ZSt11__addressofISt6vectorIiSaIiEEEPT_RS3_17510
_ZSt11__addressofISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEPT_RS8_47460
_ZSt11__addressofINSt8__detail10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEPT_RSE_58918
_ZSt11__addressofINSt8__detail10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEPT_RS9_61094
_ZSt11__addressofIPNSt8__detail15_Hash_node_baseEEPT_RS3_116626
_ZSt11__addressofINSt8__detail10_Hash_nodeISt4pairIKidELb0EEEEPT_RS6_140048
_ZSt11__addressofISt6vectorIdSaIdEEEPT_RS3_148464
_ZSt11__addressofIN6caffe28TypeMetaEEPT_RS2_418776
_ZSt11__addressofINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEPT_RS6_1378488
_ZSt11__addressofISt6threadEPT_RS1_6041288
_ZSt11__addressofIN3c104ListINS0_8optionalIN2at6TensorEEEEEEPT_RS7_31802436
_ZSt11__addressofIN3c106SymIntEEPT_RS2_32008884
_ZSt11__addressofIN2at6TensorEEPT_RS2_105277132
_ZSt11__addressofIN3c106IValueEEPT_RS2_409465972
_ZSt7forwardIbEOT_RNSt16remove_referenceIS0_E4typeE1452065534
_ZSt7forwardIDnEOT_RNSt16remove_referenceIS0_E4typeE0
_ZSt7forwardIN3c106DeviceEEOT_RNSt16remove_referenceIS2_E4typeE0
_ZSt7forwardIN3c106SymIntEEOT_RNSt16remove_referenceIS2_E4typeE0
_ZSt7forwardIN3c107complexIdEEEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIN3c108optionalIN2at6TensorEEEEOT_RNSt16remove_referenceIS5_E4typeE0
_ZSt7forwardINSt7__cxx1112regex_traitsIcE10_RegexMaskEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail6_StateIcEEEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardIOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEOT_RNSt16remove_referenceIS9_E4typeE0
_ZSt7forwardIPKcEOT_RNSt16remove_referenceIS2_E4typeE0
_ZSt7forwardIPN3c1010TensorImplEEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIPSt4pairIfS0_IiiEEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardIRA25_KcEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRA29_KcEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRA30_KcEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRA39_KcEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRA3_KcEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRA51_KcEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRA52_KcEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRKN3c1012MemoryFormatEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardIRKN3c106DeviceEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardIRKN3c106LayoutEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardIRKN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEEOT_RNSt16remove_referenceIS9_E4typeE0
_ZSt7forwardIRKNSt7__cxx1112regex_traitsIcE10_RegexMaskEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardIRKNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEEOT_RNSt16remove_referenceISF_E4typeE0
_ZSt7forwardIRKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKPKN6loguru11EcEntryBaseEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardIRKSt4pairIccEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardIRKSt6localeEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEEOT_RNSt16remove_referenceISJ_E4typeE0
_ZSt7forwardIRKSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEEOT_RNSt16remove_referenceISI_E4typeE0
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJEEEPT_DpOT0_EUlPSH_E_EOSI_RNSt16remove_referenceISI_E4typeE0
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_EOSK_RNSt16remove_referenceISK_E4typeE0
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJEEEPT_DpOT0_EUlPSH_E_EOSI_RNSt16remove_referenceISI_E4typeE0
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_EOSK_RNSt16remove_referenceISK_E4typeE0
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA1_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE0
_ZSt7forwardIRKbEOT_RNSt16remove_referenceIS2_E4typeE0
_ZSt7forwardIRNSt15regex_constants18syntax_option_typeEEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEEOT_RNSt16remove_referenceISE_E4typeE0
_ZSt7forwardIRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRPKcEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRPN3c1021AutogradMetaInterfaceEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardIRPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEEOT_RNSt16remove_referenceIS9_E4typeE0
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKllEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRSt6vectorIfSaIfEEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardISt14default_deleteIN5torch8autograd12AutogradMetaEEEOT_RNSt16remove_referenceIS5_E4typeE0
_ZSt7forwardISt4pairIccEEOT_RNSt16remove_referenceIS2_E4typeE0
_ZSt7forwardISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEEEOT_RNSt16remove_referenceISI_E4typeE0
_ZSt7forwardISt5tupleIJOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EEEEOT_RNSt16remove_referenceISB_E4typeE0
_ZSt7forwardISt5tupleIJRKlEEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardIZN3c1017device_or_defaultENS0_8optionalINS0_6DeviceEEEEUlvE_EOT_RNSt16remove_referenceIS5_E4typeE0
_ZSt7forwardIZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_EOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardIcEOT_RNSt16remove_referenceIS0_E4typeE0
_ZSt7forwardINSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEEEOT_RNSt16remove_referenceIS9_E4typeE2
_ZSt7forwardIRfEOT_RNSt16remove_referenceIS1_E4typeE2
_ZSt7forwardIRA1_KcEOT_RNSt16remove_referenceIS3_E4typeE4
_ZSt7forwardISt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEEOT_RNSt16remove_referenceISE_E4typeE4
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA2_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE6
_ZSt7forwardIRN8bayesnet4NodeEEOT_RNSt16remove_referenceIS3_E4typeE10
_ZSt7forwardIRA11_KcEOT_RNSt16remove_referenceIS3_E4typeE12
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA15_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE12
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA17_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE12
_ZSt7forwardIRKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEOT_RNSt16remove_referenceISA_E4typeE24
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA4_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE30
_ZSt7forwardIPN8bayesnet3KDBEEOT_RNSt16remove_referenceIS3_E4typeE32
_ZSt7forwardIPN8bayesnet4AODEEEOT_RNSt16remove_referenceIS3_E4typeE32
_ZSt7forwardIPN8bayesnet5KDBLdEEOT_RNSt16remove_referenceIS3_E4typeE32
_ZSt7forwardIPN8bayesnet5TANLdEEOT_RNSt16remove_referenceIS3_E4typeE32
_ZSt7forwardIPN8bayesnet6AODELdEEOT_RNSt16remove_referenceIS3_E4typeE32
_ZSt7forwardIPN8bayesnet7SPODELdEEOT_RNSt16remove_referenceIS3_E4typeE32
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_IdSaIdEESaISB_EEEEEOT_RNSt16remove_referenceISI_E4typeE32
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKS1_IiiEdEEEOT_RNSt16remove_referenceIS8_E4typeE32
_ZSt7forwardIRSt6vectorIS0_IdSaIdEESaIS2_EEEOT_RNSt16remove_referenceIS6_E4typeE32
_ZSt7forwardIPN8bayesnet3TANEEOT_RNSt16remove_referenceIS3_E4typeE40
_ZSt7forwardIPN8bayesnet5SPODEEEOT_RNSt16remove_referenceIS3_E4typeE40
_ZSt7forwardIPN8bayesnet9BoostAODEEEOT_RNSt16remove_referenceIS3_E4typeE48
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA12_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE48
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA5_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE48
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA6_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE48
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEEEOT_RNSt16remove_referenceISM_E4typeE50
_ZSt7forwardIRKPKcEOT_RNSt16remove_referenceIS4_E4typeE52
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA16_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE54
_ZSt7forwardIRPSt4pairIfS0_IiiEEEOT_RNSt16remove_referenceIS5_E4typeE58
_ZSt7forwardIRA2_KcEOT_RNSt16remove_referenceIS3_E4typeE60
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEEOT_RNSt16remove_referenceISG_E4typeE64
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA13_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE72
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA10_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE78
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ES1_ISt6vectorIiSaIiEESA_IdSaIdEEEEEEOT_RNSt16remove_referenceISK_E4typeE80
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEEOT_RNSt16remove_referenceISG_E4typeE90
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_IiSt6vectorIiSaIiEEEEEEOT_RNSt16remove_referenceISH_E4typeE96
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEEOT_RNSt16remove_referenceISD_E4typeE98
_ZSt7forwardIRN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEEOT_RNSt16remove_referenceISG_E4typeE110
_ZSt7forwardIRKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEEOT_RNSt16remove_referenceISH_E4typeE114
_ZSt7forwardIRDnEOT_RNSt16remove_referenceIS1_E4typeE116
_ZSt7forwardIN5Catch10Generators16GeneratorWrapperIPKcEEEOT_RNSt16remove_referenceIS6_E4typeE120
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJEEEPT_DpOT0_EUlPSM_E_EOSN_RNSt16remove_referenceISN_E4typeE150
_ZSt7forwardIRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEEOT_RNSt16remove_referenceISO_E4typeE156
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJRKSM_EEEPT_DpOT0_EUlPSM_E_EOSP_RNSt16remove_referenceISP_E4typeE156
_ZSt7forwardIRA7_KcEOT_RNSt16remove_referenceIS3_E4typeE160
_ZSt7forwardIRA8_KcEOT_RNSt16remove_referenceIS3_E4typeE160
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS1_IiiESaISB_EEEEEOT_RNSt16remove_referenceISI_E4typeE160
_ZSt7forwardIRA15_KcEOT_RNSt16remove_referenceIS3_E4typeE190
_ZSt7forwardISt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEEEOT_RNSt16remove_referenceISK_E4typeE208
_ZSt7forwardIRKSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEEOT_RNSt16remove_referenceISG_E4typeE224
_ZSt7forwardIRSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEEEOT_RNSt16remove_referenceISL_E4typeE226
_ZSt7forwardIRKN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEEOT_RNSt16remove_referenceISK_E4typeE236
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKiSt6vectorIiSaIiEEEEEOT_RNSt16remove_referenceISA_E4typeE250
_ZSt7forwardIRKmEOT_RNSt16remove_referenceIS2_E4typeE260
_ZSt7forwardIN6loguru8CallbackEEOT_RNSt16remove_referenceIS2_E4typeE274
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRKSA_EEEPT_DpOT0_EUlPSA_E_EOSI_RNSt16remove_referenceISI_E4typeE282
_ZSt7forwardIRA17_KcEOT_RNSt16remove_referenceIS3_E4typeE286
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEEOT_RNSt16remove_referenceISG_E4typeE286
_ZSt7forwardIRA16_KcEOT_RNSt16remove_referenceIS3_E4typeE290
_ZSt7forwardIRPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEEOT_RNSt16remove_referenceISO_E4typeE306
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJPKNS1_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSH_E_EOSN_RNSt16remove_referenceISN_E4typeE342
_ZSt7forwardIRPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEEOT_RNSt16remove_referenceISJ_E4typeE342
_ZSt7forwardIRA9_KcEOT_RNSt16remove_referenceIS3_E4typeE410
_ZSt7forwardIRA12_KcEOT_RNSt16remove_referenceIS3_E4typeE416
_ZSt7forwardISt14default_deleteIN8bayesnet7SPODELdEEEOT_RNSt16remove_referenceIS4_E4typeE444
_ZSt7forwardIRA4_KcEOT_RNSt16remove_referenceIS3_E4typeE448
_ZSt7forwardIRSt6vectorIiSaIiEEEOT_RNSt16remove_referenceIS4_E4typeE500
_ZSt7forwardIRA13_KcEOT_RNSt16remove_referenceIS3_E4typeE520
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EfEEEOT_RNSt16remove_referenceISE_E4typeE544
_ZSt7forwardIRPN8bayesnet10ClassifierEEOT_RNSt16remove_referenceIS4_E4typeE594
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISB_EEEEEOT_RNSt16remove_referenceISJ_E4typeE600
_ZSt7forwardIRKSt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEEOT_RNSt16remove_referenceISI_E4typeE672
_ZSt7forwardIPKN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEEOT_RNSt16remove_referenceISK_E4typeE684
_ZSt7forwardIRPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEOT_RNSt16remove_referenceIS8_E4typeE690
_ZSt7forwardIRKSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEOT_RNSt16remove_referenceISK_E4typeE708
_ZSt7forwardIRA5_KcEOT_RNSt16remove_referenceIS3_E4typeE764
_ZSt7forwardIRA10_KcEOT_RNSt16remove_referenceIS3_E4typeE822
_ZSt7forwardIRN2at6TensorEEOT_RNSt16remove_referenceIS3_E4typeE858
_ZSt7forwardISt4pairIifEEOT_RNSt16remove_referenceIS2_E4typeE866
_ZSt7forwardIRKSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEEOT_RNSt16remove_referenceISF_E4typeE896
_ZSt7forwardIRKSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEOT_RNSt16remove_referenceISB_E4typeE938
_ZSt7forwardISt14default_deleteIN8bayesnet10ClassifierEEEOT_RNSt16remove_referenceIS4_E4typeE1032
_ZSt7forwardISt14default_deleteIN8bayesnet5SPODEEEEOT_RNSt16remove_referenceIS4_E4typeE1032
_ZSt7forwardIZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_EOT_RNSt16remove_referenceIS9_E4typeE1098
_ZSt7forwardIN8nlohmann16json_abi_v3_11_36detail17json_default_baseEEOT_RNSt16remove_referenceIS4_E4typeE1184
_ZSt7forwardIRKSt4pairIfS0_IiiEEEOT_RNSt16remove_referenceIS5_E4typeE1482
_ZSt7forwardIRA6_KcEOT_RNSt16remove_referenceIS3_E4typeE1700
_ZSt7forwardIRKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEOT_RNSt16remove_referenceISA_E4typeE1760
_ZSt7forwardIRKSt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEEOT_RNSt16remove_referenceISG_E4typeE1792
_ZSt7forwardIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEEOT_RNSt16remove_referenceISF_E4typeE2088
_ZSt7forwardIRKSt6vectorIfSaIfEEEOT_RNSt16remove_referenceIS5_E4typeE2210
_ZSt7forwardIRKSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEOT_RNSt16remove_referenceISE_E4typeE2240
_ZSt7forwardISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEEOT_RNSt16remove_referenceIS6_E4typeE3266
_ZSt7forwardIRlEOT_RNSt16remove_referenceIS1_E4typeE3312
_ZSt7forwardIRdEOT_RNSt16remove_referenceIS1_E4typeE4120
_ZSt7forwardISt6vectorIiSaIiEEEOT_RNSt16remove_referenceIS3_E4typeE4364
_ZSt7forwardIRKSt4pairIiiEEOT_RNSt16remove_referenceIS4_E4typeE4674
_ZSt7forwardIZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EOT_RNSt16remove_referenceIS6_E4typeE4824
_ZSt7forwardIRKdEOT_RNSt16remove_referenceIS2_E4typeE5072
_ZSt7forwardIRKSt6vectorIiSaIiEEEOT_RNSt16remove_referenceIS5_E4typeE5242
_ZSt7forwardIRiEOT_RNSt16remove_referenceIS1_E4typeE5362
_ZSt7forwardIZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EOT_RNSt16remove_referenceIS6_E4typeE6606
_ZSt7forwardIRKSt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEEOT_RNSt16remove_referenceISC_E4typeE8064
_ZSt7forwardISt4pairIfS0_IiiEEEOT_RNSt16remove_referenceIS3_E4typeE8298
_ZSt7forwardIRKSt6vectorIdSaIdEEEOT_RNSt16remove_referenceIS5_E4typeE11540
_ZSt7forwardISt14default_deleteIN8bayesnet4NodeEEEOT_RNSt16remove_referenceIS4_E4typeE13380
_ZSt7forwardIRKlEOT_RNSt16remove_referenceIS2_E4typeE14194
_ZSt7forwardIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEOT_RNSt16remove_referenceIS7_E4typeE14510
_ZSt7forwardIdEOT_RNSt16remove_referenceIS0_E4typeE17240
_ZSt7forwardIfEOT_RNSt16remove_referenceIS0_E4typeE27218
_ZSt7forwardIRKN2at6TensorEEOT_RNSt16remove_referenceIS4_E4typeE31316
_ZSt7forwardISt5tupleIJRKiEEEOT_RNSt16remove_referenceIS4_E4typeE35876
_ZSt7forwardISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEOT_RNSt16remove_referenceIS8_E4typeE45506
_ZSt7forwardIRNSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEEEOT_RNSt16remove_referenceISA_E4typeE61194
_ZSt7forwardIRKSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEOT_RNSt16remove_referenceISE_E4typeE84816
_ZSt7forwardIRKPN8bayesnet4NodeEEOT_RNSt16remove_referenceIS5_E4typeE130148
_ZSt7forwardISt6vectorIdSaIdEEEOT_RNSt16remove_referenceIS3_E4typeE149652
_ZSt7forwardIlEOT_RNSt16remove_referenceIS0_E4typeE160310
_ZSt7forwardIZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_EOT_RNSt16remove_referenceISQ_E4typeE173694
_ZSt7forwardIOiEOT_RNSt16remove_referenceIS1_E4typeE191524
_ZSt7forwardImEOT_RNSt16remove_referenceIS0_E4typeE381168
_ZSt7forwardIRN3c1010ScalarTypeEEOT_RNSt16remove_referenceIS3_E4typeE395952
_ZSt7forwardIRKN3c1010DeviceTypeEEOT_RNSt16remove_referenceIS4_E4typeE401318
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEEOT_RNSt16remove_referenceISD_E4typeE402966
_ZSt7forwardIRKN6caffe28TypeMetaEEOT_RNSt16remove_referenceIS4_E4typeE418776
_ZSt7forwardIN3c1010ScalarTypeEEOT_RNSt16remove_referenceIS2_E4typeE441600
_ZSt7forwardIRjEOT_RNSt16remove_referenceIS1_E4typeE757564
_ZSt7forwardISt5tupleIJOiEEEOT_RNSt16remove_referenceIS3_E4typeE766096
_ZSt7forwardIOSt4pairIiiEEOT_RNSt16remove_referenceIS3_E4typeE1347666
_ZSt7forwardIONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEOT_RNSt16remove_referenceIS7_E4typeE1590166
_ZSt7forwardIRKiEOT_RNSt16remove_referenceIS2_E4typeE2805040
_ZSt7forwardIRKSt4pairIKidEEOT_RNSt16remove_referenceIS5_E4typeE2880612
_ZSt7forwardISt6threadEOT_RNSt16remove_referenceIS1_E4typeE2962050
_ZSt7forwardIRKSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEEEOT_RNSt16remove_referenceISD_E4typeE2983376
_ZSt7forwardISt4pairIiiEEOT_RNSt16remove_referenceIS2_E4typeE5410182
_ZSt7forwardIiEOT_RNSt16remove_referenceIS0_E4typeE5536610
_ZSt7forwardINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEOT_RNSt16remove_referenceIS6_E4typeE6747318
_ZSt7forwardIRPSt18_Rb_tree_node_baseEOT_RNSt16remove_referenceIS3_E4typeE7107656
_ZSt7forwardIRbEOT_RNSt16remove_referenceIS1_E4typeE7950224
_ZSt7forwardIbEOT_RNSt16remove_referenceIS0_E4typeE8010638
_ZSt7forwardISt5tupleIJOSt4pairIiiEEEEOT_RNSt16remove_referenceIS5_E4typeE8085996
_ZSt7forwardISt5tupleIJONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEOT_RNSt16remove_referenceIS9_E4typeE9540996
_ZSt7forwardIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEOT_RNSt16remove_referenceIS8_E4typeE9955126
_ZSt7forwardIZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_EOT_RNSt16remove_referenceISI_E4typeE20314404
_ZSt7forwardISt5tupleIJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEOT_RNSt16remove_referenceISA_E4typeE52488840
_ZSt7forwardIRKSt21piecewise_construct_tEOT_RNSt16remove_referenceIS3_E4typeE71023524
_ZSt7forwardISt5tupleIJEEEOT_RNSt16remove_referenceIS2_E4typeE71023524
_ZSt7forwardIRKN3c104Type24SingletonOrSharedTypePtrIS1_EEEOT_RNSt16remove_referenceIS6_E4typeE73850848
_ZSt7forwardISt6vectorIN3c106IValueESaIS2_EEEOT_RNSt16remove_referenceIS5_E4typeE73850848
_ZSt7forwardIN6caffe28TypeMetaEEOT_RNSt16remove_referenceIS2_E4typeE91030286
_ZSt7forwardIN2at6TensorEEOT_RNSt16remove_referenceIS2_E4typeE105276376
_ZSt7forwardIRKSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEOT_RNSt16remove_referenceISB_E4typeE181273728
_ZSt7forwardIN3c106IValueEEOT_RNSt16remove_referenceIS2_E4typeE623791812
_ZSt4moveIRbEONSt16remove_referenceIT_E4typeEOS2_1779966736
_ZSt4moveIRN3c107complexIdEEEONSt16remove_referenceIT_E4typeEOS5_0
_ZSt4moveIRN5Catch10Generators16GeneratorWrapperIPKcEEEONSt16remove_referenceIT_E4typeEOS8_0
_ZSt4moveIRN9__gnu_cxx5__ops15_Iter_less_iterEEONSt16remove_referenceIT_E4typeEOS5_0
_ZSt4moveIRNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS4_EE12_Vector_implEEONSt16remove_referenceIT_E4typeEOSA_0
_ZSt4moveIRNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EE12_Vector_implEEONSt16remove_referenceIT_E4typeEOSJ_0
_ZSt4moveIRNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESaIS8_EE12_Vector_implEEONSt16remove_referenceIT_E4typeEOSE_0
_ZSt4moveIRNSt12_Vector_baseISt4pairIccESaIS2_EE12_Vector_implEEONSt16remove_referenceIT_E4typeEOS8_0
_ZSt4moveIRNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISF_EEESaISI_EE12_Vector_implEEONSt16remove_referenceIT_E4typeEOSO_0
_ZSt4moveIRNSt12_Vector_baseIcSaIcEE12_Vector_implEEONSt16remove_referenceIT_E4typeEOS6_0
_ZSt4moveIRNSt7__cxx1112regex_traitsIcE10_RegexMaskEEONSt16remove_referenceIT_E4typeEOS6_0
_ZSt4moveIRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEONSt16remove_referenceIT_E4typeEOS8_0
_ZSt4moveIRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEONSt16remove_referenceIT_E4typeEOS8_0
_ZSt4moveIRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEONSt16remove_referenceIT_E4typeEOS8_0
_ZSt4moveIRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEONSt16remove_referenceIT_E4typeEOS8_0
_ZSt4moveIRNSt8__detail6_StateIcEEEONSt16remove_referenceIT_E4typeEOS5_0
_ZSt4moveIRNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEEONSt16remove_referenceIT_E4typeEOS8_0
_ZSt4moveIRPFbRKSt9_Any_dataOcEEONSt16remove_referenceIT_E4typeEOS8_0
_ZSt4moveIRPFbRSt9_Any_dataRKS0_St18_Manager_operationEEONSt16remove_referenceIT_E4typeEOS9_0
_ZSt4moveIRPKN6loguru11EcEntryBaseEEONSt16remove_referenceIT_E4typeEOS6_0
_ZSt4moveIRPKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEONSt16remove_referenceIT_E4typeEOSA_0
_ZSt4moveIRPN3c1021AutogradMetaInterfaceEEONSt16remove_referenceIT_E4typeEOS5_0
_ZSt4moveIRPN5torch8autograd12AutogradMetaEEONSt16remove_referenceIT_E4typeEOS6_0
_ZSt4moveIRPN5torch8autograd15FunctionPreHookEEONSt16remove_referenceIT_E4typeEOS6_0
_ZSt4moveIRPN5torch8autograd22PostAccumulateGradHookEEONSt16remove_referenceIT_E4typeEOS6_0
_ZSt4moveIRPN8bayesnet5SPODEEEONSt16remove_referenceIT_E4typeEOS5_0
_ZSt4moveIRPN8bayesnet7SPODELdEEONSt16remove_referenceIT_E4typeEOS5_0
_ZSt4moveIRPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEEONSt16remove_referenceIT_E4typeEOSA_0
_ZSt4moveIRPNSt6thread6_StateEEONSt16remove_referenceIT_E4typeEOS5_0
_ZSt4moveIRPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEEONSt16remove_referenceIT_E4typeEOSP_0
_ZSt4moveIRPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEEONSt16remove_referenceIT_E4typeEOSK_0
_ZSt4moveIRSaINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEEEONSt16remove_referenceIT_E4typeEOSG_0
_ZSt4moveIRSaIcEEONSt16remove_referenceIT_E4typeEOS3_0
_ZSt4moveIRSt10shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEEONSt16remove_referenceIT_E4typeEOSB_0
_ZSt4moveIRSt10shared_ptrIN5torch8autograd4NodeEEEONSt16remove_referenceIT_E4typeEOS7_0
_ZSt4moveIRSt10shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEEONSt16remove_referenceIT_E4typeEOSA_0
_ZSt4moveIRSt12__shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EEEONSt16remove_referenceIT_E4typeEOSD_0
_ZSt4moveIRSt4pairIccEEONSt16remove_referenceIT_E4typeEOS4_0
_ZSt4moveIRSt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEEEONSt16remove_referenceIT_E4typeEOSK_0
_ZSt4moveIRSt5tupleIJZN6loguruL11log_messageEiRNS1_7MessageEbbEUlvE_EEEONSt16remove_referenceIT_E4typeEOS8_0
_ZSt4moveIRSt6localeEONSt16remove_referenceIT_E4typeEOS3_0
_ZSt4moveIRSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEEONSt16remove_referenceIT_E4typeEOSI_0
_ZSt4moveIRSt6vectorISt4pairIlS0_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EEEONSt16remove_referenceIT_E4typeEOSM_0
_ZSt4moveIRSt8functionIFbcEEEONSt16remove_referenceIT_E4typeEOS5_0
_ZSt4moveIRSt9_Any_dataEONSt16remove_referenceIT_E4typeEOS3_0
_ZSt4moveIRZN6loguru15remove_callbackEPKcEUlRKNS0_8CallbackEE_EONSt16remove_referenceIT_E4typeEOS9_0
_ZSt4moveIRbEONSt16remove_referenceIT_E4typeEOS2_0
_ZSt4moveIRcEONSt16remove_referenceIT_E4typeEOS2_0
_ZSt4moveIRNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EE12_Vector_implEEONSt16remove_referenceIT_E4typeEOSC_4
_ZSt4moveIRSt10shared_ptrIN3c1010TensorTypeEEEONSt16remove_referenceIT_E4typeEOS6_4
_ZSt4moveIRN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE10json_valueEEONSt16remove_referenceIT_E4typeEOSI_6
_ZSt4moveIRN8nlohmann16json_abi_v3_11_36detail7value_tEEONSt16remove_referenceIT_E4typeEOS6_6
_ZSt4moveIRSt10shared_ptrIN3c104TypeEEEONSt16remove_referenceIT_E4typeEOS6_6
_ZSt4moveIRN8nlohmann16json_abi_v3_11_36detail9iter_implINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEEONSt16remove_referenceIT_E4typeEOSK_8
_ZSt4moveIRSaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_IdSaIdEESaISB_EEEEEEONSt16remove_referenceIT_E4typeEOSJ_8
_ZSt4moveIRSaISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ES1_ISt6vectorIiSaIiEESA_IdSaIdEEEEEEEONSt16remove_referenceIT_E4typeEOSL_8
_ZSt4moveIRNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS6_EE12_Vector_implEEONSt16remove_referenceIT_E4typeEOSC_16
_ZSt4moveIRSt10shared_ptrIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEEONSt16remove_referenceIT_E4typeEOSF_20
_ZSt4moveIRSaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_IiSt6vectorIiSaIiEEEEEEEONSt16remove_referenceIT_E4typeEOSI_32
_ZSt4moveIRSaISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EfEEEEONSt16remove_referenceIT_E4typeEOSF_32
_ZSt4moveIRSaISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS1_IiiESaISB_EEEEEEONSt16remove_referenceIT_E4typeEOSJ_32
_ZSt4moveIRSaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEEEONSt16remove_referenceIT_E4typeEOSE_34
_ZSt4moveIRSaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEEEONSt16remove_referenceIT_E4typeEOSH_40
_ZSt4moveIRSt10shared_ptrIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEEEEONSt16remove_referenceIT_E4typeEOS9_40
_ZSt4moveIRN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEONSt16remove_referenceIS9_E4typeEOS9_88
_ZSt4moveIRN6loguru8CallbackEEONSt16remove_referenceIT_E4typeEOS4_108
_ZSt4moveIRSt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS3_IiSaIiEESaIS5_EEEUlvE_EEEONSt16remove_referenceIT_E4typeEOSD_122
_ZSt4moveIRZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EONSt16remove_referenceIS6_E4typeEOS6_140
_ZSt4moveIRN9__gnu_cxx5__ops15_Iter_comp_iterISt4lessIdEEEEONSt16remove_referenceIT_E4typeEOS8_218
_ZSt4moveIRN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEONSt16remove_referenceIT_E4typeEOSD_218
_ZSt4moveIRSt4pairIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEONSt16remove_referenceIT_E4typeEOSL_220
_ZSt4moveIRSaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEEEONSt16remove_referenceIT_E4typeEOSH_224
_ZSt4moveIRSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEONSt16remove_referenceIT_E4typeEOSA_224
_ZSt4moveIRSt4pairIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERDnEEONSt16remove_referenceIT_E4typeEOSC_232
_ZSt4moveIRSaISt6vectorIiSaIiEEEEONSt16remove_referenceIT_E4typeEOS6_252
_ZSt4moveIRSt6vectorIS0_IiSaIiEESaIS2_EEEONSt16remove_referenceIT_E4typeEOS7_252
_ZSt4moveIRN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EEEONSt16remove_referenceIT_E4typeEOSC_268
_ZSt4moveIRSt11_Tuple_implILm1EJdbEEEONSt16remove_referenceIT_E4typeEOS4_286
_ZSt4moveIRSt11_Tuple_implILm2EJbEEEONSt16remove_referenceIT_E4typeEOS4_286
_ZSt4moveIRSt5tupleIJRN2at6TensorEdbEEEONSt16remove_referenceIT_E4typeEOS7_286
_ZSt4moveIRSt4lessIdEEONSt16remove_referenceIT_E4typeEOS4_294
_ZSt4moveIRZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EONSt16remove_referenceIT_E4typeEOS9_294
_ZSt4moveIRZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EONSt16remove_referenceIT_E4typeEOS8_384
_ZSt4moveIRZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEEUlT_E_EONSt16remove_referenceIS6_E4typeEOS6_428
_ZSt4moveIRSt4pairISt6vectorIiSaIiEES3_EEONSt16remove_referenceIT_E4typeEOS7_500
_ZSt4moveIRN2at8indexing5SliceEEONSt16remove_referenceIT_E4typeEOS5_510
_ZSt4moveIRSt5tupleIJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EEEONSt16remove_referenceIT_E4typeEOSA_536
_ZSt4moveIRZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEC4ESt16initializer_listINS1_6detail8json_refISE_EEEbNSG_7value_tEEUlRKSI_E_EONSt16remove_referenceIT_E4typeEOSQ_656
_ZSt4moveIRSaINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEONSt16remove_referenceIT_E4typeEOS9_674
_ZSt4moveIRSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EEEONSt16remove_referenceIT_E4typeEOSB_674
_ZSt4moveIRN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEONSt16remove_referenceIS5_E4typeEOS5_700
_ZSt4moveIRSt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EEEONSt16remove_referenceIT_E4typeEOSA_734
_ZSt4moveIRSt4pairIifEEONSt16remove_referenceIT_E4typeEOS4_758
_ZSt4moveIRPN8bayesnet10ClassifierEEONSt16remove_referenceIT_E4typeEOS5_774
_ZSt4moveIRZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EONSt16remove_referenceIS2_E4typeEOS2_816
_ZSt4moveIRSaIdEEONSt16remove_referenceIT_E4typeEOS3_916
_ZSt4moveIRN3c108optionalINS0_6SymIntEEEEONSt16remove_referenceIT_E4typeEOS6_1020
_ZSt4moveIRN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE4dataEEONSt16remove_referenceIT_E4typeEOSI_1184
_ZSt4moveIRSt5tupleIJPN8bayesnet10ClassifierESt14default_deleteIS2_EEEEONSt16remove_referenceIT_E4typeEOS9_1210
_ZSt4moveIRPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEONSt16remove_referenceIT_E4typeEOS9_1398
_ZSt4moveIRN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEEONSt16remove_referenceIT_E4typeEOSH_1782
_ZSt4moveIRSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEEONSt16remove_referenceIT_E4typeEOS8_2752
_ZSt4moveIRSaIiEEONSt16remove_referenceIT_E4typeEOS3_3726
_ZSt4moveIRNSt12_Vector_baseIiSaIiEE12_Vector_implEEONSt16remove_referenceIT_E4typeEOS6_3864
_ZSt4moveIRPiEONSt16remove_referenceIT_E4typeEOS3_4000
_ZSt4moveIRN9__gnu_cxx5__ops15_Iter_comp_iterISt7greaterIdEEEEONSt16remove_referenceIT_E4typeEOS8_4120
_ZSt4moveIRN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEONSt16remove_referenceIT_E4typeEOSD_4120
_ZSt4moveIRSt7greaterIdEEONSt16remove_referenceIT_E4typeEOS4_4504
_ZSt4moveIRZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EONSt16remove_referenceIT_E4typeEOS9_4504
_ZSt4moveIRSt6vectorIiSaIiEEEONSt16remove_referenceIT_E4typeEOS5_5658
_ZSt4moveIRSt4pairIfS0_IiiEEEONSt16remove_referenceIT_E4typeEOS5_13002
_ZSt4moveIRPN8bayesnet4NodeEEONSt16remove_referenceIT_E4typeEOS5_13386
_ZSt4moveIRSt5tupleIJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS9_ESaISt4pairIKS9_SC_EEERKN2at6TensorEEUlvE_EEEONSt16remove_referenceIT_E4typeEOSU_14194
_ZSt4moveIRfEONSt16remove_referenceIT_E4typeEOS2_17050
_ZSt4moveIRSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEONSt16remove_referenceIT_E4typeEOSA_22298
_ZSt4moveIRdEONSt16remove_referenceIT_E4typeEOS2_35002
_ZSt4moveIRSt6vectorIdSaIdEEEONSt16remove_referenceIT_E4typeEOS5_62836
_ZSt4moveIRlEONSt16remove_referenceIT_E4typeEOS2_66914
_ZSt4moveIRNSt12_Vector_baseIdSaIdEE12_Vector_implEEONSt16remove_referenceIT_E4typeEOS6_123840
_ZSt4moveIRSt4pairIiiEEONSt16remove_referenceIT_E4typeEOS4_1354224
_ZSt4moveIRSt6threadEONSt16remove_referenceIT_E4typeEOS3_1479910
_ZSt4moveIRSt5tupleIJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS9_ESaISt4pairIKS9_iEEEEUlvE_EEEONSt16remove_referenceIT_E4typeEOSM_1590148
_ZSt4moveIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEONSt16remove_referenceIT_E4typeEOS8_1778414
_ZSt4moveIRN3c1013intrusive_ptrINS0_10TensorImplENS0_19UndefinedTensorImplEEEEONSt16remove_referenceIT_E4typeEOS7_2223080
_ZSt4moveIRNSt6thread2idEEONSt16remove_referenceIT_E4typeEOS4_4439730
_ZSt4moveIRiEONSt16remove_referenceIT_E4typeEOS2_8014322
_ZSt4moveIRN3c106SymIntEEONSt16remove_referenceIT_E4typeEOS4_36172536
_ZSt4moveIRN3c1013intrusive_ptrINS0_6detail8ListImplENS2_34intrusive_target_default_null_typeIS3_EEEEEONSt16remove_referenceIT_E4typeEOS9_36925424
_ZSt4moveIRNSt12_Vector_baseIN3c106IValueESaIS2_EE12_Vector_implEEONSt16remove_referenceIT_E4typeEOS8_73850848
_ZSt4moveIRN3c108ArrayRefIiEEEONSt16remove_referenceIT_E4typeEOS5_90628968
_ZSt4moveIRN2at10TensorBaseEEONSt16remove_referenceIT_E4typeEOS4_210552752
_ZSt4moveIRN3c108optionalIN2at6TensorEEEEONSt16remove_referenceIT_E4typeEOS7_269379284
_ZSt4moveIRN3c106IValueEEONSt16remove_referenceIT_E4typeEOS4_518622192
_ZSt4moveIRN2at6TensorEEONSt16remove_referenceIT_E4typeEOS4_522529172
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/move.h.func.html b/html/usr/include/c++/13/bits/move.h.func.html new file mode 100644 index 0000000..e12e068 --- /dev/null +++ b/html/usr/include/c++/13/bits/move.h.func.html @@ -0,0 +1,3400 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/move.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - move.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1313
Test Date:2024-04-30 13:17:26Functions:61.7 %470290
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt11__addressofIdEPT_RS0_587049110
_ZSt11__addressofIKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEPT_RS7_0
_ZSt11__addressofIKNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEPT_RS7_0
_ZSt11__addressofIKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EEEPT_RSA_760
_ZSt11__addressofIKSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEEPT_RSH_0
_ZSt11__addressofIKSt6vectorIPN8bayesnet4NodeESaIS3_EEEPT_RS7_8
_ZSt11__addressofIKSt6vectorIS0_IfSaIfEESaIS2_EEEPT_RS6_6
_ZSt11__addressofIKSt6vectorIdSaIdEEEPT_RS4_14
_ZSt11__addressofIKSt6vectorIfSaIfEEEPT_RS4_3728
_ZSt11__addressofIKSt6vectorIiSaIiEEEPT_RS4_8332
_ZSt11__addressofIKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS6_St6vectorIiSaIiEEESt10_Select1stISC_ESt4lessIS6_ESaISC_EEEPT_RSK_644
_ZSt11__addressofIKcEPT_RS1_0
_ZSt11__addressofIN2at6TensorEEPT_RS2_105277132
_ZSt11__addressofIN3c104ListINS0_8optionalIN2at6TensorEEEEEEPT_RS7_31802436
_ZSt11__addressofIN3c106IValueEEPT_RS2_409465972
_ZSt11__addressofIN3c106SymIntEEPT_RS2_32008884
_ZSt11__addressofIN3c107complexIdEEEPT_RS3_0
_ZSt11__addressofIN3c108optionalIN2at6TensorEEEEPT_RS5_0
_ZSt11__addressofIN5Catch10Generators16GeneratorWrapperIPKcEEEPT_RS6_40
_ZSt11__addressofIN6caffe28TypeMetaEEPT_RS2_418776
_ZSt11__addressofIN6loguru8CallbackEEPT_RS2_232
_ZSt11__addressofIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEEPT_RSF_496
_ZSt11__addressofINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEPT_RS6_1378488
_ZSt11__addressofINSt7__cxx1112regex_traitsIcE10_RegexMaskEEPT_RS4_0
_ZSt11__addressofINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEEPT_RSD_0
_ZSt11__addressofINSt8__detail10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEPT_RS9_61094
_ZSt11__addressofINSt8__detail10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEPT_RSE_58918
_ZSt11__addressofINSt8__detail10_Hash_nodeISt4pairIKidELb0EEEEPT_RS6_140048
_ZSt11__addressofINSt8__detail6_StateIcEEEPT_RS3_0
_ZSt11__addressofIPNSt8__detail15_Hash_node_baseEEPT_RS3_116626
_ZSt11__addressofISaISt10_List_nodeIiEEEPT_RS3_376
_ZSt11__addressofISaISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEEPT_RSH_40
_ZSt11__addressofISaISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEEPT_RSC_0
_ZSt11__addressofISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EEEPT_RS7_0
_ZSt11__addressofISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEEPT_RS6_2250
_ZSt11__addressofISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEEPT_RSD_0
_ZSt11__addressofISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEPT_RS8_47460
_ZSt11__addressofISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEPT_RS8_48
_ZSt11__addressofISt4pairIccEEPT_RS2_0
_ZSt11__addressofISt4pairIfS0_IiiEEEPT_RS3_7134
_ZSt11__addressofISt4pairIifEEPT_RS2_474
_ZSt11__addressofISt4pairIiiEEPT_RS2_11616
_ZSt11__addressofISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEEEPT_RSI_0
_ZSt11__addressofISt6threadEPT_RS1_6041288
_ZSt11__addressofISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEEPT_RSH_114
_ZSt11__addressofISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EEEPT_RS9_1240
_ZSt11__addressofISt6vectorIdSaIdEEEPT_RS3_148464
_ZSt11__addressofISt6vectorIfSaIfEEEPT_RS3_4420
_ZSt11__addressofISt6vectorIiSaIiEEEPT_RS3_17510
_ZSt11__addressofISt6vectorIlSaIlEEEPT_RS3_14194
_ZSt11__addressofIdEPT_RS0_0
_ZSt11__addressofIfEPT_RS0_218
_ZSt11__addressofIiEPT_RS0_3492
_ZSt11__addressofImEPT_RS0_6138
_ZSt4moveIRbEONSt16remove_referenceIT_E4typeEOS2_1779966736
_ZSt4moveIRN2at10TensorBaseEEONSt16remove_referenceIT_E4typeEOS4_210552752
_ZSt4moveIRN2at6TensorEEONSt16remove_referenceIT_E4typeEOS4_522529172
_ZSt4moveIRN2at8indexing5SliceEEONSt16remove_referenceIT_E4typeEOS5_510
_ZSt4moveIRN3c1013intrusive_ptrINS0_10TensorImplENS0_19UndefinedTensorImplEEEEONSt16remove_referenceIT_E4typeEOS7_2223080
_ZSt4moveIRN3c1013intrusive_ptrINS0_6detail8ListImplENS2_34intrusive_target_default_null_typeIS3_EEEEEONSt16remove_referenceIT_E4typeEOS9_36925424
_ZSt4moveIRN3c106IValueEEONSt16remove_referenceIT_E4typeEOS4_518622192
_ZSt4moveIRN3c106SymIntEEONSt16remove_referenceIT_E4typeEOS4_36172536
_ZSt4moveIRN3c107complexIdEEEONSt16remove_referenceIT_E4typeEOS5_0
_ZSt4moveIRN3c108ArrayRefIiEEEONSt16remove_referenceIT_E4typeEOS5_90628968
_ZSt4moveIRN3c108optionalIN2at6TensorEEEEONSt16remove_referenceIT_E4typeEOS7_269379284
_ZSt4moveIRN3c108optionalINS0_6SymIntEEEEONSt16remove_referenceIT_E4typeEOS6_1020
_ZSt4moveIRN5Catch10Generators16GeneratorWrapperIPKcEEEONSt16remove_referenceIT_E4typeEOS8_0
_ZSt4moveIRN6loguru8CallbackEEONSt16remove_referenceIT_E4typeEOS4_108
_ZSt4moveIRN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE10json_valueEEONSt16remove_referenceIT_E4typeEOSI_6
_ZSt4moveIRN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE4dataEEONSt16remove_referenceIT_E4typeEOSI_1184
_ZSt4moveIRN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEEONSt16remove_referenceIT_E4typeEOSH_1782
_ZSt4moveIRN8nlohmann16json_abi_v3_11_36detail7value_tEEONSt16remove_referenceIT_E4typeEOS6_6
_ZSt4moveIRN8nlohmann16json_abi_v3_11_36detail9iter_implINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEEONSt16remove_referenceIT_E4typeEOSK_8
_ZSt4moveIRN9__gnu_cxx5__ops15_Iter_comp_iterISt4lessIdEEEEONSt16remove_referenceIT_E4typeEOS8_218
_ZSt4moveIRN9__gnu_cxx5__ops15_Iter_comp_iterISt7greaterIdEEEEONSt16remove_referenceIT_E4typeEOS8_4120
_ZSt4moveIRN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEONSt16remove_referenceIS9_E4typeEOS9_88
_ZSt4moveIRN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEONSt16remove_referenceIS5_E4typeEOS5_700
_ZSt4moveIRN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEONSt16remove_referenceIT_E4typeEOSD_4120
_ZSt4moveIRN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEONSt16remove_referenceIT_E4typeEOSD_218
_ZSt4moveIRN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EEEONSt16remove_referenceIT_E4typeEOSC_268
_ZSt4moveIRN9__gnu_cxx5__ops15_Iter_less_iterEEONSt16remove_referenceIT_E4typeEOS5_0
_ZSt4moveIRNSt12_Vector_baseIN3c106IValueESaIS2_EE12_Vector_implEEONSt16remove_referenceIT_E4typeEOS8_73850848
_ZSt4moveIRNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS6_EE12_Vector_implEEONSt16remove_referenceIT_E4typeEOSC_16
_ZSt4moveIRNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EE12_Vector_implEEONSt16remove_referenceIT_E4typeEOSC_4
_ZSt4moveIRNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS4_EE12_Vector_implEEONSt16remove_referenceIT_E4typeEOSA_0
_ZSt4moveIRNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EE12_Vector_implEEONSt16remove_referenceIT_E4typeEOSJ_0
_ZSt4moveIRNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESaIS8_EE12_Vector_implEEONSt16remove_referenceIT_E4typeEOSE_0
_ZSt4moveIRNSt12_Vector_baseISt4pairIccESaIS2_EE12_Vector_implEEONSt16remove_referenceIT_E4typeEOS8_0
_ZSt4moveIRNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISF_EEESaISI_EE12_Vector_implEEONSt16remove_referenceIT_E4typeEOSO_0
_ZSt4moveIRNSt12_Vector_baseIcSaIcEE12_Vector_implEEONSt16remove_referenceIT_E4typeEOS6_0
_ZSt4moveIRNSt12_Vector_baseIdSaIdEE12_Vector_implEEONSt16remove_referenceIT_E4typeEOS6_123840
_ZSt4moveIRNSt12_Vector_baseIiSaIiEE12_Vector_implEEONSt16remove_referenceIT_E4typeEOS6_3864
_ZSt4moveIRNSt6thread2idEEONSt16remove_referenceIT_E4typeEOS4_4439730
_ZSt4moveIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEONSt16remove_referenceIT_E4typeEOS8_1778414
_ZSt4moveIRNSt7__cxx1112regex_traitsIcE10_RegexMaskEEONSt16remove_referenceIT_E4typeEOS6_0
_ZSt4moveIRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEONSt16remove_referenceIT_E4typeEOS8_0
_ZSt4moveIRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEONSt16remove_referenceIT_E4typeEOS8_0
_ZSt4moveIRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEONSt16remove_referenceIT_E4typeEOS8_0
_ZSt4moveIRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEONSt16remove_referenceIT_E4typeEOS8_0
_ZSt4moveIRNSt8__detail6_StateIcEEEONSt16remove_referenceIT_E4typeEOS5_0
_ZSt4moveIRNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEEONSt16remove_referenceIT_E4typeEOS8_0
_ZSt4moveIRPFbRKSt9_Any_dataOcEEONSt16remove_referenceIT_E4typeEOS8_0
_ZSt4moveIRPFbRSt9_Any_dataRKS0_St18_Manager_operationEEONSt16remove_referenceIT_E4typeEOS9_0
_ZSt4moveIRPKN6loguru11EcEntryBaseEEONSt16remove_referenceIT_E4typeEOS6_0
_ZSt4moveIRPKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEONSt16remove_referenceIT_E4typeEOSA_0
_ZSt4moveIRPN3c1021AutogradMetaInterfaceEEONSt16remove_referenceIT_E4typeEOS5_0
_ZSt4moveIRPN5torch8autograd12AutogradMetaEEONSt16remove_referenceIT_E4typeEOS6_0
_ZSt4moveIRPN5torch8autograd15FunctionPreHookEEONSt16remove_referenceIT_E4typeEOS6_0
_ZSt4moveIRPN5torch8autograd22PostAccumulateGradHookEEONSt16remove_referenceIT_E4typeEOS6_0
_ZSt4moveIRPN8bayesnet10ClassifierEEONSt16remove_referenceIT_E4typeEOS5_774
_ZSt4moveIRPN8bayesnet4NodeEEONSt16remove_referenceIT_E4typeEOS5_13386
_ZSt4moveIRPN8bayesnet5SPODEEEONSt16remove_referenceIT_E4typeEOS5_0
_ZSt4moveIRPN8bayesnet7SPODELdEEONSt16remove_referenceIT_E4typeEOS5_0
_ZSt4moveIRPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEEONSt16remove_referenceIT_E4typeEOSA_0
_ZSt4moveIRPNSt6thread6_StateEEONSt16remove_referenceIT_E4typeEOS5_0
_ZSt4moveIRPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEONSt16remove_referenceIT_E4typeEOS9_1398
_ZSt4moveIRPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEEONSt16remove_referenceIT_E4typeEOSP_0
_ZSt4moveIRPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEEONSt16remove_referenceIT_E4typeEOSK_0
_ZSt4moveIRPiEONSt16remove_referenceIT_E4typeEOS3_4000
_ZSt4moveIRSaINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEONSt16remove_referenceIT_E4typeEOS9_674
_ZSt4moveIRSaINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEEEONSt16remove_referenceIT_E4typeEOSG_0
_ZSt4moveIRSaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEEEONSt16remove_referenceIT_E4typeEOSH_40
_ZSt4moveIRSaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_IiSt6vectorIiSaIiEEEEEEEONSt16remove_referenceIT_E4typeEOSI_32
_ZSt4moveIRSaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_IdSaIdEESaISB_EEEEEEONSt16remove_referenceIT_E4typeEOSJ_8
_ZSt4moveIRSaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEEEONSt16remove_referenceIT_E4typeEOSH_224
_ZSt4moveIRSaISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEEEONSt16remove_referenceIT_E4typeEOSE_34
_ZSt4moveIRSaISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ES1_ISt6vectorIiSaIiEESA_IdSaIdEEEEEEEONSt16remove_referenceIT_E4typeEOSL_8
_ZSt4moveIRSaISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EfEEEEONSt16remove_referenceIT_E4typeEOSF_32
_ZSt4moveIRSaISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS1_IiiESaISB_EEEEEEONSt16remove_referenceIT_E4typeEOSJ_32
_ZSt4moveIRSaISt6vectorIiSaIiEEEEONSt16remove_referenceIT_E4typeEOS6_252
_ZSt4moveIRSaIcEEONSt16remove_referenceIT_E4typeEOS3_0
_ZSt4moveIRSaIdEEONSt16remove_referenceIT_E4typeEOS3_916
_ZSt4moveIRSaIiEEONSt16remove_referenceIT_E4typeEOS3_3726
_ZSt4moveIRSt10shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEEONSt16remove_referenceIT_E4typeEOSB_0
_ZSt4moveIRSt10shared_ptrIN3c1010TensorTypeEEEONSt16remove_referenceIT_E4typeEOS6_4
_ZSt4moveIRSt10shared_ptrIN3c104TypeEEEONSt16remove_referenceIT_E4typeEOS6_6
_ZSt4moveIRSt10shared_ptrIN5torch8autograd4NodeEEEONSt16remove_referenceIT_E4typeEOS7_0
_ZSt4moveIRSt10shared_ptrIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEEONSt16remove_referenceIT_E4typeEOSF_20
_ZSt4moveIRSt10shared_ptrIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEEEEONSt16remove_referenceIT_E4typeEOS9_40
_ZSt4moveIRSt10shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEEONSt16remove_referenceIT_E4typeEOSA_0
_ZSt4moveIRSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEEONSt16remove_referenceIT_E4typeEOS8_2752
_ZSt4moveIRSt11_Tuple_implILm1EJdbEEEONSt16remove_referenceIT_E4typeEOS4_286
_ZSt4moveIRSt11_Tuple_implILm2EJbEEEONSt16remove_referenceIT_E4typeEOS4_286
_ZSt4moveIRSt12__shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EEEONSt16remove_referenceIT_E4typeEOSD_0
_ZSt4moveIRSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEONSt16remove_referenceIT_E4typeEOSA_224
_ZSt4moveIRSt4lessIdEEONSt16remove_referenceIT_E4typeEOS4_294
_ZSt4moveIRSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEONSt16remove_referenceIT_E4typeEOSA_22298
_ZSt4moveIRSt4pairIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERDnEEONSt16remove_referenceIT_E4typeEOSC_232
_ZSt4moveIRSt4pairIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEONSt16remove_referenceIT_E4typeEOSL_220
_ZSt4moveIRSt4pairISt6vectorIiSaIiEES3_EEONSt16remove_referenceIT_E4typeEOS7_500
_ZSt4moveIRSt4pairIccEEONSt16remove_referenceIT_E4typeEOS4_0
_ZSt4moveIRSt4pairIfS0_IiiEEEONSt16remove_referenceIT_E4typeEOS5_13002
_ZSt4moveIRSt4pairIifEEONSt16remove_referenceIT_E4typeEOS4_758
_ZSt4moveIRSt4pairIiiEEONSt16remove_referenceIT_E4typeEOS4_1354224
_ZSt4moveIRSt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEEEONSt16remove_referenceIT_E4typeEOSK_0
_ZSt4moveIRSt5tupleIJPN8bayesnet10ClassifierESt14default_deleteIS2_EEEEONSt16remove_referenceIT_E4typeEOS9_1210
_ZSt4moveIRSt5tupleIJRN2at6TensorEdbEEEONSt16remove_referenceIT_E4typeEOS7_286
_ZSt4moveIRSt5tupleIJZN6loguruL11log_messageEiRNS1_7MessageEbbEUlvE_EEEONSt16remove_referenceIT_E4typeEOS8_0
_ZSt4moveIRSt5tupleIJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS9_ESaISt4pairIKS9_SC_EEERKN2at6TensorEEUlvE_EEEONSt16remove_referenceIT_E4typeEOSU_14194
_ZSt4moveIRSt5tupleIJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS9_ESaISt4pairIKS9_iEEEEUlvE_EEEONSt16remove_referenceIT_E4typeEOSM_1590148
_ZSt4moveIRSt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EEEONSt16remove_referenceIT_E4typeEOSA_734
_ZSt4moveIRSt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS3_IiSaIiEESaIS5_EEEUlvE_EEEONSt16remove_referenceIT_E4typeEOSD_122
_ZSt4moveIRSt5tupleIJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EEEONSt16remove_referenceIT_E4typeEOSA_536
_ZSt4moveIRSt6localeEONSt16remove_referenceIT_E4typeEOS3_0
_ZSt4moveIRSt6threadEONSt16remove_referenceIT_E4typeEOS3_1479910
_ZSt4moveIRSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EEEONSt16remove_referenceIT_E4typeEOSB_674
_ZSt4moveIRSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEEONSt16remove_referenceIT_E4typeEOSI_0
_ZSt4moveIRSt6vectorIS0_IiSaIiEESaIS2_EEEONSt16remove_referenceIT_E4typeEOS7_252
_ZSt4moveIRSt6vectorISt4pairIlS0_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EEEONSt16remove_referenceIT_E4typeEOSM_0
_ZSt4moveIRSt6vectorIdSaIdEEEONSt16remove_referenceIT_E4typeEOS5_62836
_ZSt4moveIRSt6vectorIiSaIiEEEONSt16remove_referenceIT_E4typeEOS5_5658
_ZSt4moveIRSt7greaterIdEEONSt16remove_referenceIT_E4typeEOS4_4504
_ZSt4moveIRSt8functionIFbcEEEONSt16remove_referenceIT_E4typeEOS5_0
_ZSt4moveIRSt9_Any_dataEONSt16remove_referenceIT_E4typeEOS3_0
_ZSt4moveIRZN6loguru15remove_callbackEPKcEUlRKNS0_8CallbackEE_EONSt16remove_referenceIT_E4typeEOS9_0
_ZSt4moveIRZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EONSt16remove_referenceIS6_E4typeEOS6_140
_ZSt4moveIRZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EONSt16remove_referenceIS2_E4typeEOS2_816
_ZSt4moveIRZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EONSt16remove_referenceIT_E4typeEOS9_4504
_ZSt4moveIRZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EONSt16remove_referenceIT_E4typeEOS9_294
_ZSt4moveIRZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EONSt16remove_referenceIT_E4typeEOS8_384
_ZSt4moveIRZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEEUlT_E_EONSt16remove_referenceIS6_E4typeEOS6_428
_ZSt4moveIRZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEC4ESt16initializer_listINS1_6detail8json_refISE_EEEbNSG_7value_tEEUlRKSI_E_EONSt16remove_referenceIT_E4typeEOSQ_656
_ZSt4moveIRbEONSt16remove_referenceIT_E4typeEOS2_0
_ZSt4moveIRcEONSt16remove_referenceIT_E4typeEOS2_0
_ZSt4moveIRdEONSt16remove_referenceIT_E4typeEOS2_35002
_ZSt4moveIRfEONSt16remove_referenceIT_E4typeEOS2_17050
_ZSt4moveIRiEONSt16remove_referenceIT_E4typeEOS2_8014322
_ZSt4moveIRlEONSt16remove_referenceIT_E4typeEOS2_66914
_ZSt4swapIcENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS4_ESt18is_move_assignableIS4_EEE5valueEvE4typeERS4_SE_1567088
_ZSt4swapIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE10json_valueEENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleISK_ESt18is_move_assignableISK_EEE5valueEvE4typeERSK_SU_2
_ZSt4swapIN8nlohmann16json_abi_v3_11_36detail7value_tEENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS8_ESt18is_move_assignableIS8_EEE5valueEvE4typeERS8_SI_2
_ZSt4swapINSt6thread2idEENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS6_ESt18is_move_assignableIS6_EEE5valueEvE4typeERS6_SG_1479910
_ZSt4swapIPFbRKSt9_Any_dataOcEENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleISA_ESt18is_move_assignableISA_EEE5valueEvE4typeERSA_SK_0
_ZSt4swapIPFbRSt9_Any_dataRKS0_St18_Manager_operationEENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleISB_ESt18is_move_assignableISB_EEE5valueEvE4typeERSB_SL_0
_ZSt4swapIPKN6loguru11EcEntryBaseEENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS8_ESt18is_move_assignableIS8_EEE5valueEvE4typeERS8_SI_0
_ZSt4swapIPKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleISC_ESt18is_move_assignableISC_EEE5valueEvE4typeERSC_SM_0
_ZSt4swapISt6localeENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS5_ESt18is_move_assignableIS5_EEE5valueEvE4typeERS5_SF_0
_ZSt4swapISt9_Any_dataENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS5_ESt18is_move_assignableIS5_EEE5valueEvE4typeERS5_SF_0
_ZSt4swapIcENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS4_ESt18is_move_assignableIS4_EEE5valueEvE4typeERS4_SE_0
_ZSt4swapIdENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS4_ESt18is_move_assignableIS4_EEE5valueEvE4typeERS4_SE_3238
_ZSt4swapIfENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS4_ESt18is_move_assignableIS4_EEE5valueEvE4typeERS4_SE_28
_ZSt4swapIiENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS4_ESt18is_move_assignableIS4_EEE5valueEvE4typeERS4_SE_83908
_ZSt4swapIlENSt9enable_ifIXsrSt6__and_IJSt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS4_ESt18is_move_assignableIS4_EEE5valueEvE4typeERS4_SE_0
_ZSt7forwardIbEOT_RNSt16remove_referenceIS0_E4typeE1452065534
_ZSt7forwardIDnEOT_RNSt16remove_referenceIS0_E4typeE0
_ZSt7forwardIN2at6TensorEEOT_RNSt16remove_referenceIS2_E4typeE105276376
_ZSt7forwardIN3c1010ScalarTypeEEOT_RNSt16remove_referenceIS2_E4typeE441600
_ZSt7forwardIN3c106DeviceEEOT_RNSt16remove_referenceIS2_E4typeE0
_ZSt7forwardIN3c106IValueEEOT_RNSt16remove_referenceIS2_E4typeE623791812
_ZSt7forwardIN3c106SymIntEEOT_RNSt16remove_referenceIS2_E4typeE0
_ZSt7forwardIN3c107complexIdEEEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIN3c108optionalIN2at6TensorEEEEOT_RNSt16remove_referenceIS5_E4typeE0
_ZSt7forwardIN5Catch10Generators16GeneratorWrapperIPKcEEEOT_RNSt16remove_referenceIS6_E4typeE120
_ZSt7forwardIN6caffe28TypeMetaEEOT_RNSt16remove_referenceIS2_E4typeE91030286
_ZSt7forwardIN6loguru8CallbackEEOT_RNSt16remove_referenceIS2_E4typeE274
_ZSt7forwardIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEEOT_RNSt16remove_referenceISF_E4typeE2088
_ZSt7forwardIN8nlohmann16json_abi_v3_11_36detail17json_default_baseEEOT_RNSt16remove_referenceIS4_E4typeE1184
_ZSt7forwardINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEOT_RNSt16remove_referenceIS6_E4typeE6747318
_ZSt7forwardINSt7__cxx1112regex_traitsIcE10_RegexMaskEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEEEOT_RNSt16remove_referenceIS9_E4typeE2
_ZSt7forwardINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardINSt8__detail6_StateIcEEEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardIONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEOT_RNSt16remove_referenceIS7_E4typeE1590166
_ZSt7forwardIOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEOT_RNSt16remove_referenceIS9_E4typeE0
_ZSt7forwardIOSt4pairIiiEEOT_RNSt16remove_referenceIS3_E4typeE1347666
_ZSt7forwardIOiEOT_RNSt16remove_referenceIS1_E4typeE191524
_ZSt7forwardIPKN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEEOT_RNSt16remove_referenceISK_E4typeE684
_ZSt7forwardIPKcEOT_RNSt16remove_referenceIS2_E4typeE0
_ZSt7forwardIPN3c1010TensorImplEEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIPN8bayesnet3KDBEEOT_RNSt16remove_referenceIS3_E4typeE32
_ZSt7forwardIPN8bayesnet3TANEEOT_RNSt16remove_referenceIS3_E4typeE40
_ZSt7forwardIPN8bayesnet4AODEEEOT_RNSt16remove_referenceIS3_E4typeE32
_ZSt7forwardIPN8bayesnet5KDBLdEEOT_RNSt16remove_referenceIS3_E4typeE32
_ZSt7forwardIPN8bayesnet5SPODEEEOT_RNSt16remove_referenceIS3_E4typeE40
_ZSt7forwardIPN8bayesnet5TANLdEEOT_RNSt16remove_referenceIS3_E4typeE32
_ZSt7forwardIPN8bayesnet6AODELdEEOT_RNSt16remove_referenceIS3_E4typeE32
_ZSt7forwardIPN8bayesnet7SPODELdEEOT_RNSt16remove_referenceIS3_E4typeE32
_ZSt7forwardIPN8bayesnet9BoostAODEEEOT_RNSt16remove_referenceIS3_E4typeE48
_ZSt7forwardIPSt4pairIfS0_IiiEEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardIRA10_KcEOT_RNSt16remove_referenceIS3_E4typeE822
_ZSt7forwardIRA11_KcEOT_RNSt16remove_referenceIS3_E4typeE12
_ZSt7forwardIRA12_KcEOT_RNSt16remove_referenceIS3_E4typeE416
_ZSt7forwardIRA13_KcEOT_RNSt16remove_referenceIS3_E4typeE520
_ZSt7forwardIRA15_KcEOT_RNSt16remove_referenceIS3_E4typeE190
_ZSt7forwardIRA16_KcEOT_RNSt16remove_referenceIS3_E4typeE290
_ZSt7forwardIRA17_KcEOT_RNSt16remove_referenceIS3_E4typeE286
_ZSt7forwardIRA1_KcEOT_RNSt16remove_referenceIS3_E4typeE4
_ZSt7forwardIRA25_KcEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRA29_KcEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRA2_KcEOT_RNSt16remove_referenceIS3_E4typeE60
_ZSt7forwardIRA30_KcEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRA39_KcEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRA3_KcEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRA4_KcEOT_RNSt16remove_referenceIS3_E4typeE448
_ZSt7forwardIRA51_KcEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRA52_KcEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRA5_KcEOT_RNSt16remove_referenceIS3_E4typeE764
_ZSt7forwardIRA6_KcEOT_RNSt16remove_referenceIS3_E4typeE1700
_ZSt7forwardIRA7_KcEOT_RNSt16remove_referenceIS3_E4typeE160
_ZSt7forwardIRA8_KcEOT_RNSt16remove_referenceIS3_E4typeE160
_ZSt7forwardIRA9_KcEOT_RNSt16remove_referenceIS3_E4typeE410
_ZSt7forwardIRDnEOT_RNSt16remove_referenceIS1_E4typeE116
_ZSt7forwardIRKN2at6TensorEEOT_RNSt16remove_referenceIS4_E4typeE31316
_ZSt7forwardIRKN3c1010DeviceTypeEEOT_RNSt16remove_referenceIS4_E4typeE401318
_ZSt7forwardIRKN3c1012MemoryFormatEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardIRKN3c104Type24SingletonOrSharedTypePtrIS1_EEEOT_RNSt16remove_referenceIS6_E4typeE73850848
_ZSt7forwardIRKN3c106DeviceEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardIRKN3c106LayoutEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardIRKN6caffe28TypeMetaEEOT_RNSt16remove_referenceIS4_E4typeE418776
_ZSt7forwardIRKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEEOT_RNSt16remove_referenceISH_E4typeE114
_ZSt7forwardIRKN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEEOT_RNSt16remove_referenceIS9_E4typeE0
_ZSt7forwardIRKN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEEOT_RNSt16remove_referenceISK_E4typeE236
_ZSt7forwardIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEOT_RNSt16remove_referenceIS8_E4typeE9955126
_ZSt7forwardIRKNSt7__cxx1112regex_traitsIcE10_RegexMaskEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardIRKNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEEOT_RNSt16remove_referenceISF_E4typeE0
_ZSt7forwardIRKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEEOT_RNSt16remove_referenceIS8_E4typeE0
_ZSt7forwardIRKPKN6loguru11EcEntryBaseEEOT_RNSt16remove_referenceIS6_E4typeE0
_ZSt7forwardIRKPKcEOT_RNSt16remove_referenceIS4_E4typeE52
_ZSt7forwardIRKPN8bayesnet4NodeEEOT_RNSt16remove_referenceIS5_E4typeE130148
_ZSt7forwardIRKSt21piecewise_construct_tEOT_RNSt16remove_referenceIS3_E4typeE71023524
_ZSt7forwardIRKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEEOT_RNSt16remove_referenceISO_E4typeE156
_ZSt7forwardIRKSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEOT_RNSt16remove_referenceISK_E4typeE708
_ZSt7forwardIRKSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEOT_RNSt16remove_referenceISE_E4typeE2240
_ZSt7forwardIRKSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEEOT_RNSt16remove_referenceISF_E4typeE896
_ZSt7forwardIRKSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEEOT_RNSt16remove_referenceISG_E4typeE224
_ZSt7forwardIRKSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEOT_RNSt16remove_referenceISE_E4typeE84816
_ZSt7forwardIRKSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEOT_RNSt16remove_referenceISB_E4typeE938
_ZSt7forwardIRKSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEOT_RNSt16remove_referenceISB_E4typeE181273728
_ZSt7forwardIRKSt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEEOT_RNSt16remove_referenceISI_E4typeE672
_ZSt7forwardIRKSt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEEOT_RNSt16remove_referenceISC_E4typeE8064
_ZSt7forwardIRKSt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEEOT_RNSt16remove_referenceISG_E4typeE1792
_ZSt7forwardIRKSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS0_IS1_dEEEEEOT_RNSt16remove_referenceISD_E4typeE2983376
_ZSt7forwardIRKSt4pairIKidEEOT_RNSt16remove_referenceIS5_E4typeE2880612
_ZSt7forwardIRKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEOT_RNSt16remove_referenceISA_E4typeE1760
_ZSt7forwardIRKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEOT_RNSt16remove_referenceISA_E4typeE24
_ZSt7forwardIRKSt4pairIccEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardIRKSt4pairIfS0_IiiEEEOT_RNSt16remove_referenceIS5_E4typeE1482
_ZSt7forwardIRKSt4pairIiiEEOT_RNSt16remove_referenceIS4_E4typeE4674
_ZSt7forwardIRKSt6localeEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEEOT_RNSt16remove_referenceISJ_E4typeE0
_ZSt7forwardIRKSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEEOT_RNSt16remove_referenceISI_E4typeE0
_ZSt7forwardIRKSt6vectorIdSaIdEEEOT_RNSt16remove_referenceIS5_E4typeE11540
_ZSt7forwardIRKSt6vectorIfSaIfEEEOT_RNSt16remove_referenceIS5_E4typeE2210
_ZSt7forwardIRKSt6vectorIiSaIiEEEOT_RNSt16remove_referenceIS5_E4typeE5242
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJEEEPT_DpOT0_EUlPSH_E_EOSI_RNSt16remove_referenceISI_E4typeE0
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_EOSK_RNSt16remove_referenceISK_E4typeE0
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJEEEPT_DpOT0_EUlPSM_E_EOSN_RNSt16remove_referenceISN_E4typeE150
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJRKSM_EEEPT_DpOT0_EUlPSM_E_EOSP_RNSt16remove_referenceISP_E4typeE156
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJEEEPT_DpOT0_EUlPSH_E_EOSI_RNSt16remove_referenceISI_E4typeE0
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJPKNS1_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSH_E_EOSN_RNSt16remove_referenceISN_E4typeE342
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_EOSK_RNSt16remove_referenceISK_E4typeE0
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA10_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE78
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA12_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE48
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA13_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE72
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA15_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE12
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA16_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE54
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA17_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE12
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA1_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE0
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA2_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE6
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA4_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE30
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA5_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE48
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA6_KcEEEPT_DpOT0_EUlPSA_E_EOSJ_RNSt16remove_referenceISJ_E4typeE48
_ZSt7forwardIRKZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRKSA_EEEPT_DpOT0_EUlPSA_E_EOSI_RNSt16remove_referenceISI_E4typeE282
_ZSt7forwardIRKbEOT_RNSt16remove_referenceIS2_E4typeE0
_ZSt7forwardIRKdEOT_RNSt16remove_referenceIS2_E4typeE5072
_ZSt7forwardIRKiEOT_RNSt16remove_referenceIS2_E4typeE2805040
_ZSt7forwardIRKlEOT_RNSt16remove_referenceIS2_E4typeE14194
_ZSt7forwardIRKmEOT_RNSt16remove_referenceIS2_E4typeE260
_ZSt7forwardIRN2at6TensorEEOT_RNSt16remove_referenceIS3_E4typeE858
_ZSt7forwardIRN3c1010ScalarTypeEEOT_RNSt16remove_referenceIS3_E4typeE395952
_ZSt7forwardIRN8bayesnet4NodeEEOT_RNSt16remove_referenceIS3_E4typeE10
_ZSt7forwardIRN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEEOT_RNSt16remove_referenceISG_E4typeE110
_ZSt7forwardIRNSt15regex_constants18syntax_option_typeEEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEOT_RNSt16remove_referenceIS7_E4typeE14510
_ZSt7forwardIRNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEEOT_RNSt16remove_referenceISE_E4typeE0
_ZSt7forwardIRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEEEOT_RNSt16remove_referenceISA_E4typeE61194
_ZSt7forwardIRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRPKcEOT_RNSt16remove_referenceIS3_E4typeE0
_ZSt7forwardIRPN3c1021AutogradMetaInterfaceEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardIRPN8bayesnet10ClassifierEEOT_RNSt16remove_referenceIS4_E4typeE594
_ZSt7forwardIRPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEEOT_RNSt16remove_referenceIS9_E4typeE0
_ZSt7forwardIRPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEOT_RNSt16remove_referenceIS8_E4typeE690
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEEEOT_RNSt16remove_referenceISM_E4typeE50
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEEOT_RNSt16remove_referenceISG_E4typeE90
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEEOT_RNSt16remove_referenceISG_E4typeE64
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_IiSt6vectorIiSaIiEEEEEEOT_RNSt16remove_referenceISH_E4typeE96
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISB_EEEEEOT_RNSt16remove_referenceISJ_E4typeE600
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_IdSaIdEESaISB_EEEEEOT_RNSt16remove_referenceISI_E4typeE32
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEEOT_RNSt16remove_referenceISG_E4typeE286
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEEOT_RNSt16remove_referenceISD_E4typeE98
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEEOT_RNSt16remove_referenceISD_E4typeE402966
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ES1_ISt6vectorIiSaIiEESA_IdSaIdEEEEEEOT_RNSt16remove_referenceISK_E4typeE80
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EfEEEOT_RNSt16remove_referenceISE_E4typeE544
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS1_IiiESaISB_EEEEEOT_RNSt16remove_referenceISI_E4typeE160
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKS1_IiiEdEEEOT_RNSt16remove_referenceIS8_E4typeE32
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKiSt6vectorIiSaIiEEEEEOT_RNSt16remove_referenceISA_E4typeE250
_ZSt7forwardIRPSt13_Rb_tree_nodeISt4pairIKllEEEOT_RNSt16remove_referenceIS7_E4typeE0
_ZSt7forwardIRPSt18_Rb_tree_node_baseEOT_RNSt16remove_referenceIS3_E4typeE7107656
_ZSt7forwardIRPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEEOT_RNSt16remove_referenceISO_E4typeE306
_ZSt7forwardIRPSt4pairIfS0_IiiEEEOT_RNSt16remove_referenceIS5_E4typeE58
_ZSt7forwardIRPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEEOT_RNSt16remove_referenceISJ_E4typeE342
_ZSt7forwardIRSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEEEOT_RNSt16remove_referenceISL_E4typeE226
_ZSt7forwardIRSt6vectorIS0_IdSaIdEESaIS2_EEEOT_RNSt16remove_referenceIS6_E4typeE32
_ZSt7forwardIRSt6vectorIfSaIfEEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardIRSt6vectorIiSaIiEEEOT_RNSt16remove_referenceIS4_E4typeE500
_ZSt7forwardIRbEOT_RNSt16remove_referenceIS1_E4typeE7950224
_ZSt7forwardIRdEOT_RNSt16remove_referenceIS1_E4typeE4120
_ZSt7forwardIRfEOT_RNSt16remove_referenceIS1_E4typeE2
_ZSt7forwardIRiEOT_RNSt16remove_referenceIS1_E4typeE5362
_ZSt7forwardIRjEOT_RNSt16remove_referenceIS1_E4typeE757564
_ZSt7forwardIRlEOT_RNSt16remove_referenceIS1_E4typeE3312
_ZSt7forwardISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEEOT_RNSt16remove_referenceIS6_E4typeE3266
_ZSt7forwardISt14default_deleteIN5torch8autograd12AutogradMetaEEEOT_RNSt16remove_referenceIS5_E4typeE0
_ZSt7forwardISt14default_deleteIN8bayesnet10ClassifierEEEOT_RNSt16remove_referenceIS4_E4typeE1032
_ZSt7forwardISt14default_deleteIN8bayesnet4NodeEEEOT_RNSt16remove_referenceIS4_E4typeE13380
_ZSt7forwardISt14default_deleteIN8bayesnet5SPODEEEEOT_RNSt16remove_referenceIS4_E4typeE1032
_ZSt7forwardISt14default_deleteIN8bayesnet7SPODELdEEEOT_RNSt16remove_referenceIS4_E4typeE444
_ZSt7forwardISt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEEEOT_RNSt16remove_referenceISK_E4typeE208
_ZSt7forwardISt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEEOT_RNSt16remove_referenceISE_E4typeE4
_ZSt7forwardISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEOT_RNSt16remove_referenceIS8_E4typeE45506
_ZSt7forwardISt4pairIccEEOT_RNSt16remove_referenceIS2_E4typeE0
_ZSt7forwardISt4pairIfS0_IiiEEEOT_RNSt16remove_referenceIS3_E4typeE8298
_ZSt7forwardISt4pairIifEEOT_RNSt16remove_referenceIS2_E4typeE866
_ZSt7forwardISt4pairIiiEEOT_RNSt16remove_referenceIS2_E4typeE5410182
_ZSt7forwardISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEEEOT_RNSt16remove_referenceISI_E4typeE0
_ZSt7forwardISt5tupleIJEEEOT_RNSt16remove_referenceIS2_E4typeE71023524
_ZSt7forwardISt5tupleIJONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEOT_RNSt16remove_referenceIS9_E4typeE9540996
_ZSt7forwardISt5tupleIJOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EEEEOT_RNSt16remove_referenceISB_E4typeE0
_ZSt7forwardISt5tupleIJOSt4pairIiiEEEEOT_RNSt16remove_referenceIS5_E4typeE8085996
_ZSt7forwardISt5tupleIJOiEEEOT_RNSt16remove_referenceIS3_E4typeE766096
_ZSt7forwardISt5tupleIJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEOT_RNSt16remove_referenceISA_E4typeE52488840
_ZSt7forwardISt5tupleIJRKiEEEOT_RNSt16remove_referenceIS4_E4typeE35876
_ZSt7forwardISt5tupleIJRKlEEEOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardISt6threadEOT_RNSt16remove_referenceIS1_E4typeE2962050
_ZSt7forwardISt6vectorIN3c106IValueESaIS2_EEEOT_RNSt16remove_referenceIS5_E4typeE73850848
_ZSt7forwardISt6vectorIdSaIdEEEOT_RNSt16remove_referenceIS3_E4typeE149652
_ZSt7forwardISt6vectorIiSaIiEEEOT_RNSt16remove_referenceIS3_E4typeE4364
_ZSt7forwardIZN3c1017device_or_defaultENS0_8optionalINS0_6DeviceEEEEUlvE_EOT_RNSt16remove_referenceIS5_E4typeE0
_ZSt7forwardIZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_EOT_RNSt16remove_referenceIS4_E4typeE0
_ZSt7forwardIZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_EOT_RNSt16remove_referenceISQ_E4typeE173694
_ZSt7forwardIZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_EOT_RNSt16remove_referenceISI_E4typeE20314404
_ZSt7forwardIZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EOT_RNSt16remove_referenceIS6_E4typeE6606
_ZSt7forwardIZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_EOT_RNSt16remove_referenceIS9_E4typeE1098
_ZSt7forwardIZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EOT_RNSt16remove_referenceIS6_E4typeE4824
_ZSt7forwardIbEOT_RNSt16remove_referenceIS0_E4typeE8010638
_ZSt7forwardIcEOT_RNSt16remove_referenceIS0_E4typeE0
_ZSt7forwardIdEOT_RNSt16remove_referenceIS0_E4typeE17240
_ZSt7forwardIfEOT_RNSt16remove_referenceIS0_E4typeE27218
_ZSt7forwardIiEOT_RNSt16remove_referenceIS0_E4typeE5536610
_ZSt7forwardIlEOT_RNSt16remove_referenceIS0_E4typeE160310
_ZSt7forwardImEOT_RNSt16remove_referenceIS0_E4typeE381168
_ZSt9addressofIN2at6TensorEEPT_RS2_106071838
_ZSt9addressofIN2at6TensorEEPT_RS2_105276376
_ZSt9addressofIN6caffe28TypeMetaEEPT_RS2_418776
_ZSt9addressofINSt8__detail10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEPT_RS9_61094
_ZSt9addressofINSt8__detail10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEPT_RSE_58918
_ZSt9addressofINSt8__detail10_Hash_nodeISt4pairIKidELb0EEEEPT_RS6_140048
_ZSt9addressofIPNSt8__detail15_Hash_node_baseEEPT_RS3_116626
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/move.h.gcov.html b/html/usr/include/c++/13/bits/move.h.gcov.html new file mode 100644 index 0000000..576300b --- /dev/null +++ b/html/usr/include/c++/13/bits/move.h.gcov.html @@ -0,0 +1,300 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/move.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - move.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1313
Test Date:2024-04-30 13:17:26Functions:61.7 %470290
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Move, forward and identity for C++11 + swap -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2007-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/move.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{utility}
+      28              :  */
+      29              : 
+      30              : #ifndef _MOVE_H
+      31              : #define _MOVE_H 1
+      32              : 
+      33              : #include <bits/c++config.h>
+      34              : #if __cplusplus < 201103L
+      35              : # include <bits/concept_check.h>
+      36              : #else
+      37              : # include <type_traits> // Brings in std::declval too.
+      38              : #endif
+      39              : 
+      40              : namespace std _GLIBCXX_VISIBILITY(default)
+      41              : {
+      42              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      43              : 
+      44              :   // Used, in C++03 mode too, by allocators, etc.
+      45              :   /**
+      46              :    *  @brief Same as C++11 std::addressof
+      47              :    *  @ingroup utilities
+      48              :    */
+      49              :   template<typename _Tp>
+      50              :     inline _GLIBCXX_CONSTEXPR _Tp*
+      51    587049110 :     __addressof(_Tp& __r) _GLIBCXX_NOEXCEPT
+      52    587049110 :     { return __builtin_addressof(__r); }
+      53              : 
+      54              : #if __cplusplus >= 201103L
+      55              : 
+      56              :   /**
+      57              :    *  @addtogroup utilities
+      58              :    *  @{
+      59              :    */
+      60              : 
+      61              :   /**
+      62              :    *  @brief  Forward an lvalue.
+      63              :    *  @return The parameter cast to the specified type.
+      64              :    *
+      65              :    *  This function is used to implement "perfect forwarding".
+      66              :    */
+      67              :   template<typename _Tp>
+      68              :     _GLIBCXX_NODISCARD
+      69              :     constexpr _Tp&&
+      70   1452065534 :     forward(typename std::remove_reference<_Tp>::type& __t) noexcept
+      71   1452065534 :     { return static_cast<_Tp&&>(__t); }
+      72              : 
+      73              :   /**
+      74              :    *  @brief  Forward an rvalue.
+      75              :    *  @return The parameter cast to the specified type.
+      76              :    *
+      77              :    *  This function is used to implement "perfect forwarding".
+      78              :    */
+      79              :   template<typename _Tp>
+      80              :     _GLIBCXX_NODISCARD
+      81              :     constexpr _Tp&&
+      82              :     forward(typename std::remove_reference<_Tp>::type&& __t) noexcept
+      83              :     {
+      84              :       static_assert(!std::is_lvalue_reference<_Tp>::value,
+      85              :           "std::forward must not be used to convert an rvalue to an lvalue");
+      86              :       return static_cast<_Tp&&>(__t);
+      87              :     }
+      88              : 
+      89              :   /**
+      90              :    *  @brief  Convert a value to an rvalue.
+      91              :    *  @param  __t  A thing of arbitrary type.
+      92              :    *  @return The parameter cast to an rvalue-reference to allow moving it.
+      93              :   */
+      94              :   template<typename _Tp>
+      95              :     _GLIBCXX_NODISCARD
+      96              :     constexpr typename std::remove_reference<_Tp>::type&&
+      97   1779966736 :     move(_Tp&& __t) noexcept
+      98   1779966736 :     { return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); }
+      99              : 
+     100              : 
+     101              :   template<typename _Tp>
+     102              :     struct __move_if_noexcept_cond
+     103              :     : public __and_<__not_<is_nothrow_move_constructible<_Tp>>,
+     104              :                     is_copy_constructible<_Tp>>::type { };
+     105              : 
+     106              :   /**
+     107              :    *  @brief  Conditionally convert a value to an rvalue.
+     108              :    *  @param  __x  A thing of arbitrary type.
+     109              :    *  @return The parameter, possibly cast to an rvalue-reference.
+     110              :    *
+     111              :    *  Same as std::move unless the type's move constructor could throw and the
+     112              :    *  type is copyable, in which case an lvalue-reference is returned instead.
+     113              :    */
+     114              :   template<typename _Tp>
+     115              :     _GLIBCXX_NODISCARD
+     116              :     constexpr
+     117              :     __conditional_t<__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&>
+     118              :     move_if_noexcept(_Tp& __x) noexcept
+     119              :     { return std::move(__x); }
+     120              : 
+     121              :   // declval, from type_traits.
+     122              : 
+     123              : #if __cplusplus > 201402L
+     124              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     125              :   // 2296. std::addressof should be constexpr
+     126              : # define __cpp_lib_addressof_constexpr 201603L
+     127              : #endif
+     128              :   /**
+     129              :    *  @brief Returns the actual address of the object or function
+     130              :    *         referenced by r, even in the presence of an overloaded
+     131              :    *         operator&.
+     132              :    *  @param  __r  Reference to an object or function.
+     133              :    *  @return   The actual address.
+     134              :   */
+     135              :   template<typename _Tp>
+     136              :     _GLIBCXX_NODISCARD
+     137              :     inline _GLIBCXX17_CONSTEXPR _Tp*
+     138    106071838 :     addressof(_Tp& __r) noexcept
+     139    106071838 :     { return std::__addressof(__r); }
+     140              : 
+     141              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     142              :   // 2598. addressof works on temporaries
+     143              :   template<typename _Tp>
+     144              :     const _Tp* addressof(const _Tp&&) = delete;
+     145              : 
+     146              :   // C++11 version of std::exchange for internal use.
+     147              :   template <typename _Tp, typename _Up = _Tp>
+     148              :     _GLIBCXX20_CONSTEXPR
+     149              :     inline _Tp
+     150              :     __exchange(_Tp& __obj, _Up&& __new_val)
+     151              :     {
+     152              :       _Tp __old_val = std::move(__obj);
+     153              :       __obj = std::forward<_Up>(__new_val);
+     154              :       return __old_val;
+     155              :     }
+     156              : 
+     157              :   /// @} group utilities
+     158              : 
+     159              : #define _GLIBCXX_FWDREF(_Tp) _Tp&&
+     160              : #define _GLIBCXX_MOVE(__val) std::move(__val)
+     161              : #define _GLIBCXX_FORWARD(_Tp, __val) std::forward<_Tp>(__val)
+     162              : #else
+     163              : #define _GLIBCXX_FWDREF(_Tp) const _Tp&
+     164              : #define _GLIBCXX_MOVE(__val) (__val)
+     165              : #define _GLIBCXX_FORWARD(_Tp, __val) (__val)
+     166              : #endif
+     167              : 
+     168              :   /**
+     169              :    *  @addtogroup utilities
+     170              :    *  @{
+     171              :    */
+     172              : 
+     173              :   /**
+     174              :    *  @brief Swaps two values.
+     175              :    *  @param  __a  A thing of arbitrary type.
+     176              :    *  @param  __b  Another thing of arbitrary type.
+     177              :    *  @return   Nothing.
+     178              :   */
+     179              :   template<typename _Tp>
+     180              :     _GLIBCXX20_CONSTEXPR
+     181              :     inline
+     182              : #if __cplusplus >= 201103L
+     183              :     typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>,
+     184              :                               is_move_constructible<_Tp>,
+     185              :                               is_move_assignable<_Tp>>::value>::type
+     186              : #else
+     187              :     void
+     188              : #endif
+     189      1567088 :     swap(_Tp& __a, _Tp& __b)
+     190              :     _GLIBCXX_NOEXCEPT_IF(__and_<is_nothrow_move_constructible<_Tp>,
+     191              :                                 is_nothrow_move_assignable<_Tp>>::value)
+     192              :     {
+     193              : #if __cplusplus < 201103L
+     194              :       // concept requirements
+     195              :       __glibcxx_function_requires(_SGIAssignableConcept<_Tp>)
+     196              : #endif
+     197      1567088 :       _Tp __tmp = _GLIBCXX_MOVE(__a);
+     198      1567088 :       __a = _GLIBCXX_MOVE(__b);
+     199      1567088 :       __b = _GLIBCXX_MOVE(__tmp);
+     200      1567088 :     }
+     201              : 
+     202              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     203              :   // DR 809. std::swap should be overloaded for array types.
+     204              :   /// Swap the contents of two arrays.
+     205              :   template<typename _Tp, size_t _Nm>
+     206              :     _GLIBCXX20_CONSTEXPR
+     207              :     inline
+     208              : #if __cplusplus >= 201103L
+     209              :     typename enable_if<__is_swappable<_Tp>::value>::type
+     210              : #else
+     211              :     void
+     212              : #endif
+     213              :     swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
+     214              :     _GLIBCXX_NOEXCEPT_IF(__is_nothrow_swappable<_Tp>::value)
+     215              :     {
+     216              :       for (size_t __n = 0; __n < _Nm; ++__n)
+     217              :         swap(__a[__n], __b[__n]);
+     218              :     }
+     219              : 
+     220              :   /// @} group utilities
+     221              : _GLIBCXX_END_NAMESPACE_VERSION
+     222              : } // namespace
+     223              : 
+     224              : #endif /* _MOVE_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/new_allocator.h.func-c.html b/html/usr/include/c++/13/bits/new_allocator.h.func-c.html new file mode 100644 index 0000000..eccde90 --- /dev/null +++ b/html/usr/include/c++/13/bits/new_allocator.h.func-c.html @@ -0,0 +1,1468 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/new_allocator.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - new_allocator.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:80.0 %1512
Test Date:2024-04-30 13:17:26Functions:73.0 %196143
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt15__new_allocatorIcE8allocateEmPKv150488702
_ZNSt15__new_allocatorIN3c106SymIntEE8allocateEmPKv0
_ZNSt15__new_allocatorIN3c107complexIdEEE8allocateEmPKv0
_ZNSt15__new_allocatorIN3c108optionalIN2at6TensorEEEE8allocateEmPKv0
_ZNSt15__new_allocatorIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEE8allocateEmPKv0
_ZNSt15__new_allocatorINSt7__cxx1112regex_traitsIcE10_RegexMaskEE8allocateEmPKv0
_ZNSt15__new_allocatorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEE8allocateEmPKv0
_ZNSt15__new_allocatorINSt8__detail6_StateIcEEE8allocateEmPKv0
_ZNSt15__new_allocatorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEE8allocateEmPKv0
_ZNSt15__new_allocatorIPKN6loguru11EcEntryBaseEE8allocateEmPKv0
_ZNSt15__new_allocatorIPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEE8allocateEmPKv0
_ZNSt15__new_allocatorIPlE8allocateEmPKv0
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKllEEE8allocateEmPKv0
_ZNSt15__new_allocatorISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEE8allocateEmPKv0
_ZNSt15__new_allocatorISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEE8allocateEmPKv0
_ZNSt15__new_allocatorISt4pairIccEE8allocateEmPKv0
_ZNSt15__new_allocatorISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEEE8allocateEmPKv0
_ZNSt15__new_allocatorIcE8allocateEmPKv0
_ZNSt15__new_allocatorIhE8allocateEmPKv0
_ZNSt15__new_allocatorIN5Catch10Generators16GeneratorWrapperIPKcEEE8allocateEmPKv8
_ZNSt15__new_allocatorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE8allocateEmPKv8
_ZNSt15__new_allocatorIN6loguru8CallbackEE8allocateEmPKv12
_ZNSt15__new_allocatorISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEE8allocateEmPKv20
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_IdSaIdEESaISB_EEEEE8allocateEmPKv32
_ZNSt15__new_allocatorISt4pairIifEE8allocateEmPKv94
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ES1_ISt6vectorIiSaIiEESA_IdSaIdEEEEEE8allocateEmPKv96
_ZNSt15__new_allocatorISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEE8allocateEmPKv102
_ZNSt15__new_allocatorISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEE8allocateEmPKv114
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_IiSt6vectorIiSaIiEEEEEE8allocateEmPKv128
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEE8allocateEmPKv134
_ZNSt15__new_allocatorISt6vectorIfSaIfEEE8allocateEmPKv218
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEEE8allocateEmPKv228
_ZNSt15__new_allocatorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEE8allocateEmPKv240
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS1_IiiESaISB_EEEEE8allocateEmPKv256
_ZNSt15__new_allocatorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEE8allocateEmPKv278
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEE8allocateEmPKv320
_ZNSt15__new_allocatorISt10_List_nodeIiEE8allocateEmPKv376
_ZNSt15__new_allocatorIN2at6TensorEE8allocateEmPKv378
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_IiiEdEEE8allocateEmPKv584
_ZNSt15__new_allocatorISt4pairIfS0_IiiEEE8allocateEmPKv642
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEE8allocateEmPKv848
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKiSt6vectorIiSaIiEEEEE8allocateEmPKv1018
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EfEEE8allocateEmPKv1152
_ZNSt15__new_allocatorISt6vectorIiSaIiEEE8allocateEmPKv1186
_ZNSt15__new_allocatorISt6vectorIdSaIdEEE8allocateEmPKv1390
_ZNSt15__new_allocatorISt4pairIiiEE8allocateEmPKv2012
_ZNSt15__new_allocatorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EE8allocateEmPKv2298
_ZNSt15__new_allocatorIfE8allocateEmPKv10466
_ZNSt15__new_allocatorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE8allocateEmPKv11870
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISB_EEEEE8allocateEmPKv13380
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEE8allocateEmPKv16516
_ZNSt15__new_allocatorIPN8bayesnet4NodeEE8allocateEmPKv32620
_ZNSt15__new_allocatorImE8allocateEmPKv41554
_ZNSt15__new_allocatorINSt8__detail10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEE8allocateEmPKv58918
_ZNSt15__new_allocatorINSt8__detail10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEE8allocateEmPKv61192
_ZNSt15__new_allocatorIPNSt8__detail15_Hash_node_baseEE8allocateEmPKv116628
_ZNSt15__new_allocatorINSt8__detail10_Hash_nodeISt4pairIKidELb0EEEE8allocateEmPKv140048
_ZNSt15__new_allocatorIdE8allocateEmPKv436042
_ZNSt15__new_allocatorIlE8allocateEmPKv439466
_ZNSt15__new_allocatorISt6threadE8allocateEmPKv1236832
_ZNSt15__new_allocatorIiE8allocateEmPKv2155620
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEE8allocateEmPKv40533758
_ZNSt15__new_allocatorIN3c106IValueEE8allocateEmPKv105169620
_ZNSt15__new_allocatorIbED2Ev238094076
_ZNSt15__new_allocatorIN3c107complexIdEEED2Ev0
_ZNSt15__new_allocatorIN3c108optionalIN2at6TensorEEEED2Ev0
_ZNSt15__new_allocatorIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEED2Ev0
_ZNSt15__new_allocatorINSt7__cxx1112regex_traitsIcE10_RegexMaskEED2Ev0
_ZNSt15__new_allocatorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEED2Ev0
_ZNSt15__new_allocatorINSt8__detail6_StateIcEEED2Ev0
_ZNSt15__new_allocatorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEED2Ev0
_ZNSt15__new_allocatorIPKN6loguru11EcEntryBaseEED2Ev0
_ZNSt15__new_allocatorIPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEED2Ev0
_ZNSt15__new_allocatorIPlED2Ev0
_ZNSt15__new_allocatorISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EEED2Ev0
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKllEEED2Ev0
_ZNSt15__new_allocatorISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEED2Ev0
_ZNSt15__new_allocatorISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEED2Ev0
_ZNSt15__new_allocatorISt4pairIccEED2Ev0
_ZNSt15__new_allocatorISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEEED2Ev0
_ZNSt15__new_allocatorIhED2Ev0
_ZNSt15__new_allocatorIN6loguru8CallbackEED2Ev2
_ZNSt15__new_allocatorIN5Catch10Generators16GeneratorWrapperIPKcEEED2Ev16
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_IdSaIdEESaISB_EEEEED2Ev16
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ES1_ISt6vectorIiSaIiEESA_IdSaIdEEEEEED2Ev16
_ZNSt15__new_allocatorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEED2Ev16
_ZNSt15__new_allocatorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEED2Ev16
_ZNSt15__new_allocatorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEED2Ev24
_ZNSt15__new_allocatorISt4pairIifEED2Ev26
_ZNSt15__new_allocatorISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEED2Ev40
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_IiiEdEEED2Ev44
_ZNSt15__new_allocatorISt10_List_nodeIiEED2Ev58
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_IiSt6vectorIiSaIiEEEEEED2Ev64
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EfEEED2Ev64
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS1_IiiESaISB_EEEEED2Ev64
_ZNSt15__new_allocatorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEED2Ev64
_ZNSt15__new_allocatorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEED2Ev64
_ZNSt15__new_allocatorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEED2Ev64
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEED2Ev68
_ZNSt15__new_allocatorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEED2Ev68
_ZNSt15__new_allocatorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEED2Ev70
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEED2Ev80
_ZNSt15__new_allocatorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEED2Ev80
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEED2Ev100
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEEED2Ev154
_ZNSt15__new_allocatorISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEED2Ev204
_ZNSt15__new_allocatorISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEED2Ev228
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKiSt6vectorIiSaIiEEEEED2Ev250
_ZNSt15__new_allocatorISt4pairIfS0_IiiEEED2Ev348
_ZNSt15__new_allocatorIN2at6TensorEED2Ev378
_ZNSt15__new_allocatorISt6vectorIdSaIdEEED2Ev432
_ZNSt15__new_allocatorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEED2Ev558
_ZNSt15__new_allocatorIbED2Ev966
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEED2Ev1150
_ZNSt15__new_allocatorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EED2Ev1534
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISB_EEEEED2Ev1542
_ZNSt15__new_allocatorISt6vectorIfSaIfEEED2Ev1952
_ZNSt15__new_allocatorISt4pairIiiEED2Ev2008
_ZNSt15__new_allocatorISt6vectorIiSaIiEEED2Ev2130
_ZNSt15__new_allocatorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEED2Ev14334
_ZNSt15__new_allocatorINSt8__detail10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEED2Ev14836
_ZNSt15__new_allocatorIfED2Ev18582
_ZNSt15__new_allocatorImED2Ev19196
_ZNSt15__new_allocatorIPN8bayesnet4NodeEED2Ev31912
_ZNSt15__new_allocatorINSt8__detail10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEED2Ev49902
_ZNSt15__new_allocatorINSt8__detail10_Hash_nodeISt4pairIKidELb0EEEED2Ev58918
_ZNSt15__new_allocatorIPNSt8__detail15_Hash_node_baseEED2Ev233254
_ZNSt15__new_allocatorISt6threadED2Ev402810
_ZNSt15__new_allocatorIcED2Ev494374
_ZNSt15__new_allocatorIlED2Ev1217366
_ZNSt15__new_allocatorIdED2Ev1361700
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEED2Ev3583262
_ZNSt15__new_allocatorIiED2Ev6284804
_ZNSt15__new_allocatorIN3c106IValueEED2Ev110776272
_ZNSt15__new_allocatorIN3c106SymIntEED2Ev113517596
_ZNSt15__new_allocatorIcE10deallocateEPcm263968424
_ZNSt15__new_allocatorIN3c107complexIdEEE10deallocateEPS2_m0
_ZNSt15__new_allocatorIN3c108optionalIN2at6TensorEEEE10deallocateEPS4_m0
_ZNSt15__new_allocatorIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEE10deallocateEPS6_m0
_ZNSt15__new_allocatorINSt7__cxx1112regex_traitsIcE10_RegexMaskEE10deallocateEPS3_m0
_ZNSt15__new_allocatorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEE10deallocateEPSC_m0
_ZNSt15__new_allocatorINSt8__detail6_StateIcEEE10deallocateEPS2_m0
_ZNSt15__new_allocatorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEE10deallocateEPS5_m0
_ZNSt15__new_allocatorIPKN6loguru11EcEntryBaseEE10deallocateEPS3_m0
_ZNSt15__new_allocatorIPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEE10deallocateEPS6_m0
_ZNSt15__new_allocatorIPlE10deallocateEPS0_m0
_ZNSt15__new_allocatorISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EEE10deallocateEPS6_m0
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKllEEE10deallocateEPS4_m0
_ZNSt15__new_allocatorISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEE10deallocateEPSA_m0
_ZNSt15__new_allocatorISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEE10deallocateEPSC_m0
_ZNSt15__new_allocatorISt4pairIccEE10deallocateEPS1_m0
_ZNSt15__new_allocatorISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEEE10deallocateEPSH_m0
_ZNSt15__new_allocatorIcE10deallocateEPcm0
_ZNSt15__new_allocatorIhE10deallocateEPhm0
_ZNSt15__new_allocatorIN5Catch10Generators16GeneratorWrapperIPKcEEE10deallocateEPS5_m8
_ZNSt15__new_allocatorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE10deallocateEPS7_m8
_ZNSt15__new_allocatorIN6loguru8CallbackEE10deallocateEPS1_m12
_ZNSt15__new_allocatorISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEE10deallocateEPSF_m20
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_IdSaIdEESaISB_EEEEE10deallocateEPSF_m32
_ZNSt15__new_allocatorISt4pairIifEE10deallocateEPS1_m94
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ES1_ISt6vectorIiSaIiEESA_IdSaIdEEEEEE10deallocateEPSH_m96
_ZNSt15__new_allocatorISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEE10deallocateEPSL_m102
_ZNSt15__new_allocatorISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEE10deallocateEPSG_m114
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_IiSt6vectorIiSaIiEEEEEE10deallocateEPSE_m128
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEE10deallocateEPSA_m134
_ZNSt15__new_allocatorISt6vectorIfSaIfEEE10deallocateEPS2_m218
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEEE10deallocateEPSJ_m228
_ZNSt15__new_allocatorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEE10deallocateEPS5_m240
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS1_IiiESaISB_EEEEE10deallocateEPSF_m256
_ZNSt15__new_allocatorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEE10deallocateEPSE_m278
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEE10deallocateEPSD_m320
_ZNSt15__new_allocatorISt10_List_nodeIiEE10deallocateEPS1_m376
_ZNSt15__new_allocatorIN2at6TensorEE10deallocateEPS1_m378
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_IiiEdEEE10deallocateEPS5_m584
_ZNSt15__new_allocatorISt4pairIfS0_IiiEEE10deallocateEPS2_m642
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEE10deallocateEPSD_m848
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKiSt6vectorIiSaIiEEEEE10deallocateEPS7_m1018
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EfEEE10deallocateEPSB_m1152
_ZNSt15__new_allocatorISt6vectorIiSaIiEEE10deallocateEPS2_m1186
_ZNSt15__new_allocatorISt6vectorIdSaIdEEE10deallocateEPS2_m1390
_ZNSt15__new_allocatorISt4pairIiiEE10deallocateEPS1_m2012
_ZNSt15__new_allocatorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EE10deallocateEPS7_m2298
_ZNSt15__new_allocatorIfE10deallocateEPfm10450
_ZNSt15__new_allocatorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE10deallocateEPS5_m11480
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISB_EEEEE10deallocateEPSG_m13380
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEE10deallocateEPSD_m16516
_ZNSt15__new_allocatorIPN8bayesnet4NodeEE10deallocateEPS2_m32620
_ZNSt15__new_allocatorImE10deallocateEPmm41546
_ZNSt15__new_allocatorINSt8__detail10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEE10deallocateEPSD_m58918
_ZNSt15__new_allocatorINSt8__detail10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEE10deallocateEPS8_m61094
_ZNSt15__new_allocatorIPNSt8__detail15_Hash_node_baseEE10deallocateEPS2_m116626
_ZNSt15__new_allocatorINSt8__detail10_Hash_nodeISt4pairIKidELb0EEEE10deallocateEPS5_m140048
_ZNSt15__new_allocatorIdE10deallocateEPdm436042
_ZNSt15__new_allocatorIlE10deallocateEPlm439466
_ZNSt15__new_allocatorISt6threadE10deallocateEPS0_m1236832
_ZNSt15__new_allocatorIiE10deallocateEPim2118260
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEE10deallocateEPSA_m40533758
_ZNSt15__new_allocatorIN3c106IValueEE10deallocateEPS1_m105169620
_ZNSt15__new_allocatorIN3c106SymIntEE10deallocateEPS1_m113517596
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/new_allocator.h.func.html b/html/usr/include/c++/13/bits/new_allocator.h.func.html new file mode 100644 index 0000000..dd06273 --- /dev/null +++ b/html/usr/include/c++/13/bits/new_allocator.h.func.html @@ -0,0 +1,1468 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/new_allocator.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - new_allocator.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:80.0 %1512
Test Date:2024-04-30 13:17:26Functions:73.0 %196143
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt15__new_allocatorIbED2Ev238094076
_ZNSt15__new_allocatorIN2at6TensorEED2Ev378
_ZNSt15__new_allocatorIN3c106IValueEED2Ev110776272
_ZNSt15__new_allocatorIN3c106SymIntEED2Ev113517596
_ZNSt15__new_allocatorIN3c107complexIdEEED2Ev0
_ZNSt15__new_allocatorIN3c108optionalIN2at6TensorEEEED2Ev0
_ZNSt15__new_allocatorIN5Catch10Generators16GeneratorWrapperIPKcEEED2Ev16
_ZNSt15__new_allocatorIN6loguru8CallbackEED2Ev2
_ZNSt15__new_allocatorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEED2Ev558
_ZNSt15__new_allocatorIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEED2Ev0
_ZNSt15__new_allocatorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEED2Ev14334
_ZNSt15__new_allocatorINSt7__cxx1112regex_traitsIcE10_RegexMaskEED2Ev0
_ZNSt15__new_allocatorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEED2Ev0
_ZNSt15__new_allocatorINSt8__detail10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEED2Ev49902
_ZNSt15__new_allocatorINSt8__detail10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEED2Ev14836
_ZNSt15__new_allocatorINSt8__detail10_Hash_nodeISt4pairIKidELb0EEEED2Ev58918
_ZNSt15__new_allocatorINSt8__detail6_StateIcEEED2Ev0
_ZNSt15__new_allocatorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEED2Ev0
_ZNSt15__new_allocatorIPKN6loguru11EcEntryBaseEED2Ev0
_ZNSt15__new_allocatorIPN8bayesnet4NodeEED2Ev31912
_ZNSt15__new_allocatorIPNSt8__detail15_Hash_node_baseEED2Ev233254
_ZNSt15__new_allocatorIPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEED2Ev0
_ZNSt15__new_allocatorIPlED2Ev0
_ZNSt15__new_allocatorISt10_List_nodeIiEED2Ev58
_ZNSt15__new_allocatorISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EEED2Ev0
_ZNSt15__new_allocatorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEED2Ev70
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEEED2Ev154
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEED2Ev100
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEED2Ev80
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_IiSt6vectorIiSaIiEEEEEED2Ev64
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISB_EEEEED2Ev1542
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_IdSaIdEESaISB_EEEEED2Ev16
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEED2Ev1150
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEED2Ev68
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEED2Ev3583262
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ES1_ISt6vectorIiSaIiEESA_IdSaIdEEEEEED2Ev16
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EfEEED2Ev64
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS1_IiiESaISB_EEEEED2Ev64
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_IiiEdEEED2Ev44
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKiSt6vectorIiSaIiEEEEED2Ev250
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKllEEED2Ev0
_ZNSt15__new_allocatorISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEED2Ev40
_ZNSt15__new_allocatorISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEED2Ev0
_ZNSt15__new_allocatorISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEED2Ev204
_ZNSt15__new_allocatorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEED2Ev80
_ZNSt15__new_allocatorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEED2Ev64
_ZNSt15__new_allocatorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEED2Ev16
_ZNSt15__new_allocatorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEED2Ev68
_ZNSt15__new_allocatorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEED2Ev16
_ZNSt15__new_allocatorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEED2Ev64
_ZNSt15__new_allocatorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEED2Ev64
_ZNSt15__new_allocatorISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEED2Ev0
_ZNSt15__new_allocatorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EED2Ev1534
_ZNSt15__new_allocatorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEED2Ev24
_ZNSt15__new_allocatorISt4pairIccEED2Ev0
_ZNSt15__new_allocatorISt4pairIfS0_IiiEEED2Ev348
_ZNSt15__new_allocatorISt4pairIifEED2Ev26
_ZNSt15__new_allocatorISt4pairIiiEED2Ev2008
_ZNSt15__new_allocatorISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEEED2Ev0
_ZNSt15__new_allocatorISt6threadED2Ev402810
_ZNSt15__new_allocatorISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEED2Ev228
_ZNSt15__new_allocatorISt6vectorIdSaIdEEED2Ev432
_ZNSt15__new_allocatorISt6vectorIfSaIfEEED2Ev1952
_ZNSt15__new_allocatorISt6vectorIiSaIiEEED2Ev2130
_ZNSt15__new_allocatorIbED2Ev966
_ZNSt15__new_allocatorIcED2Ev494374
_ZNSt15__new_allocatorIdED2Ev1361700
_ZNSt15__new_allocatorIfED2Ev18582
_ZNSt15__new_allocatorIhED2Ev0
_ZNSt15__new_allocatorIiED2Ev6284804
_ZNSt15__new_allocatorIlED2Ev1217366
_ZNSt15__new_allocatorImED2Ev19196
_ZNSt15__new_allocatorIcE10deallocateEPcm263968424
_ZNSt15__new_allocatorIN2at6TensorEE10deallocateEPS1_m378
_ZNSt15__new_allocatorIN3c106IValueEE10deallocateEPS1_m105169620
_ZNSt15__new_allocatorIN3c106SymIntEE10deallocateEPS1_m113517596
_ZNSt15__new_allocatorIN3c107complexIdEEE10deallocateEPS2_m0
_ZNSt15__new_allocatorIN3c108optionalIN2at6TensorEEEE10deallocateEPS4_m0
_ZNSt15__new_allocatorIN5Catch10Generators16GeneratorWrapperIPKcEEE10deallocateEPS5_m8
_ZNSt15__new_allocatorIN6loguru8CallbackEE10deallocateEPS1_m12
_ZNSt15__new_allocatorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEE10deallocateEPSE_m278
_ZNSt15__new_allocatorIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEE10deallocateEPS6_m0
_ZNSt15__new_allocatorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE10deallocateEPS5_m11480
_ZNSt15__new_allocatorINSt7__cxx1112regex_traitsIcE10_RegexMaskEE10deallocateEPS3_m0
_ZNSt15__new_allocatorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEE10deallocateEPSC_m0
_ZNSt15__new_allocatorINSt8__detail10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEE10deallocateEPS8_m61094
_ZNSt15__new_allocatorINSt8__detail10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEE10deallocateEPSD_m58918
_ZNSt15__new_allocatorINSt8__detail10_Hash_nodeISt4pairIKidELb0EEEE10deallocateEPS5_m140048
_ZNSt15__new_allocatorINSt8__detail6_StateIcEEE10deallocateEPS2_m0
_ZNSt15__new_allocatorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEE10deallocateEPS5_m0
_ZNSt15__new_allocatorIPKN6loguru11EcEntryBaseEE10deallocateEPS3_m0
_ZNSt15__new_allocatorIPN8bayesnet4NodeEE10deallocateEPS2_m32620
_ZNSt15__new_allocatorIPNSt8__detail15_Hash_node_baseEE10deallocateEPS2_m116626
_ZNSt15__new_allocatorIPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEE10deallocateEPS6_m0
_ZNSt15__new_allocatorIPlE10deallocateEPS0_m0
_ZNSt15__new_allocatorISt10_List_nodeIiEE10deallocateEPS1_m376
_ZNSt15__new_allocatorISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EEE10deallocateEPS6_m0
_ZNSt15__new_allocatorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEE10deallocateEPS5_m240
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEEE10deallocateEPSJ_m228
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEE10deallocateEPSD_m848
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEE10deallocateEPSD_m320
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_IiSt6vectorIiSaIiEEEEEE10deallocateEPSE_m128
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISB_EEEEE10deallocateEPSG_m13380
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_IdSaIdEESaISB_EEEEE10deallocateEPSF_m32
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEE10deallocateEPSD_m16516
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEE10deallocateEPSA_m134
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEE10deallocateEPSA_m40533758
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ES1_ISt6vectorIiSaIiEESA_IdSaIdEEEEEE10deallocateEPSH_m96
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EfEEE10deallocateEPSB_m1152
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS1_IiiESaISB_EEEEE10deallocateEPSF_m256
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_IiiEdEEE10deallocateEPS5_m584
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKiSt6vectorIiSaIiEEEEE10deallocateEPS7_m1018
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKllEEE10deallocateEPS4_m0
_ZNSt15__new_allocatorISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEE10deallocateEPSF_m20
_ZNSt15__new_allocatorISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEE10deallocateEPSA_m0
_ZNSt15__new_allocatorISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEE10deallocateEPSL_m102
_ZNSt15__new_allocatorISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEE10deallocateEPSC_m0
_ZNSt15__new_allocatorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EE10deallocateEPS7_m2298
_ZNSt15__new_allocatorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE10deallocateEPS7_m8
_ZNSt15__new_allocatorISt4pairIccEE10deallocateEPS1_m0
_ZNSt15__new_allocatorISt4pairIfS0_IiiEEE10deallocateEPS2_m642
_ZNSt15__new_allocatorISt4pairIifEE10deallocateEPS1_m94
_ZNSt15__new_allocatorISt4pairIiiEE10deallocateEPS1_m2012
_ZNSt15__new_allocatorISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEEE10deallocateEPSH_m0
_ZNSt15__new_allocatorISt6threadE10deallocateEPS0_m1236832
_ZNSt15__new_allocatorISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEE10deallocateEPSG_m114
_ZNSt15__new_allocatorISt6vectorIdSaIdEEE10deallocateEPS2_m1390
_ZNSt15__new_allocatorISt6vectorIfSaIfEEE10deallocateEPS2_m218
_ZNSt15__new_allocatorISt6vectorIiSaIiEEE10deallocateEPS2_m1186
_ZNSt15__new_allocatorIcE10deallocateEPcm0
_ZNSt15__new_allocatorIdE10deallocateEPdm436042
_ZNSt15__new_allocatorIfE10deallocateEPfm10450
_ZNSt15__new_allocatorIhE10deallocateEPhm0
_ZNSt15__new_allocatorIiE10deallocateEPim2118260
_ZNSt15__new_allocatorIlE10deallocateEPlm439466
_ZNSt15__new_allocatorImE10deallocateEPmm41546
_ZNSt15__new_allocatorIcE8allocateEmPKv150488702
_ZNSt15__new_allocatorIN2at6TensorEE8allocateEmPKv378
_ZNSt15__new_allocatorIN3c106IValueEE8allocateEmPKv105169620
_ZNSt15__new_allocatorIN3c106SymIntEE8allocateEmPKv0
_ZNSt15__new_allocatorIN3c107complexIdEEE8allocateEmPKv0
_ZNSt15__new_allocatorIN3c108optionalIN2at6TensorEEEE8allocateEmPKv0
_ZNSt15__new_allocatorIN5Catch10Generators16GeneratorWrapperIPKcEEE8allocateEmPKv8
_ZNSt15__new_allocatorIN6loguru8CallbackEE8allocateEmPKv12
_ZNSt15__new_allocatorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEE8allocateEmPKv278
_ZNSt15__new_allocatorIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEE8allocateEmPKv0
_ZNSt15__new_allocatorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE8allocateEmPKv11870
_ZNSt15__new_allocatorINSt7__cxx1112regex_traitsIcE10_RegexMaskEE8allocateEmPKv0
_ZNSt15__new_allocatorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEE8allocateEmPKv0
_ZNSt15__new_allocatorINSt8__detail10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEE8allocateEmPKv61192
_ZNSt15__new_allocatorINSt8__detail10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEE8allocateEmPKv58918
_ZNSt15__new_allocatorINSt8__detail10_Hash_nodeISt4pairIKidELb0EEEE8allocateEmPKv140048
_ZNSt15__new_allocatorINSt8__detail6_StateIcEEE8allocateEmPKv0
_ZNSt15__new_allocatorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEE8allocateEmPKv0
_ZNSt15__new_allocatorIPKN6loguru11EcEntryBaseEE8allocateEmPKv0
_ZNSt15__new_allocatorIPN8bayesnet4NodeEE8allocateEmPKv32620
_ZNSt15__new_allocatorIPNSt8__detail15_Hash_node_baseEE8allocateEmPKv116628
_ZNSt15__new_allocatorIPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEE8allocateEmPKv0
_ZNSt15__new_allocatorIPlE8allocateEmPKv0
_ZNSt15__new_allocatorISt10_List_nodeIiEE8allocateEmPKv376
_ZNSt15__new_allocatorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEE8allocateEmPKv240
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEEE8allocateEmPKv228
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEE8allocateEmPKv848
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEE8allocateEmPKv320
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_IiSt6vectorIiSaIiEEEEEE8allocateEmPKv128
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISB_EEEEE8allocateEmPKv13380
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_IdSaIdEESaISB_EEEEE8allocateEmPKv32
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEE8allocateEmPKv16516
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEE8allocateEmPKv134
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEE8allocateEmPKv40533758
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ES1_ISt6vectorIiSaIiEESA_IdSaIdEEEEEE8allocateEmPKv96
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EfEEE8allocateEmPKv1152
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS1_IiiESaISB_EEEEE8allocateEmPKv256
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKS1_IiiEdEEE8allocateEmPKv584
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKiSt6vectorIiSaIiEEEEE8allocateEmPKv1018
_ZNSt15__new_allocatorISt13_Rb_tree_nodeISt4pairIKllEEE8allocateEmPKv0
_ZNSt15__new_allocatorISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEE8allocateEmPKv20
_ZNSt15__new_allocatorISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEE8allocateEmPKv0
_ZNSt15__new_allocatorISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEE8allocateEmPKv102
_ZNSt15__new_allocatorISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEE8allocateEmPKv0
_ZNSt15__new_allocatorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EE8allocateEmPKv2298
_ZNSt15__new_allocatorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE8allocateEmPKv8
_ZNSt15__new_allocatorISt4pairIccEE8allocateEmPKv0
_ZNSt15__new_allocatorISt4pairIfS0_IiiEEE8allocateEmPKv642
_ZNSt15__new_allocatorISt4pairIifEE8allocateEmPKv94
_ZNSt15__new_allocatorISt4pairIiiEE8allocateEmPKv2012
_ZNSt15__new_allocatorISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEEE8allocateEmPKv0
_ZNSt15__new_allocatorISt6threadE8allocateEmPKv1236832
_ZNSt15__new_allocatorISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEE8allocateEmPKv114
_ZNSt15__new_allocatorISt6vectorIdSaIdEEE8allocateEmPKv1390
_ZNSt15__new_allocatorISt6vectorIfSaIfEEE8allocateEmPKv218
_ZNSt15__new_allocatorISt6vectorIiSaIiEEE8allocateEmPKv1186
_ZNSt15__new_allocatorIcE8allocateEmPKv0
_ZNSt15__new_allocatorIdE8allocateEmPKv436042
_ZNSt15__new_allocatorIfE8allocateEmPKv10466
_ZNSt15__new_allocatorIhE8allocateEmPKv0
_ZNSt15__new_allocatorIiE8allocateEmPKv2155620
_ZNSt15__new_allocatorIlE8allocateEmPKv439466
_ZNSt15__new_allocatorImE8allocateEmPKv41554
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/new_allocator.h.gcov.html b/html/usr/include/c++/13/bits/new_allocator.h.gcov.html new file mode 100644 index 0000000..f56861d --- /dev/null +++ b/html/usr/include/c++/13/bits/new_allocator.h.gcov.html @@ -0,0 +1,319 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/new_allocator.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - new_allocator.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:80.0 %1512
Test Date:2024-04-30 13:17:26Functions:73.0 %196143
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Allocator that wraps operator new -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/new_allocator.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{memory}
+      28              :  */
+      29              : 
+      30              : #ifndef _STD_NEW_ALLOCATOR_H
+      31              : #define _STD_NEW_ALLOCATOR_H 1
+      32              : 
+      33              : #include <bits/c++config.h>
+      34              : #include <new>
+      35              : #include <bits/functexcept.h>
+      36              : #include <bits/move.h>
+      37              : #if __cplusplus >= 201103L
+      38              : #include <type_traits>
+      39              : #endif
+      40              : 
+      41              : namespace std _GLIBCXX_VISIBILITY(default)
+      42              : {
+      43              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      44              : 
+      45              :   /**
+      46              :    * @brief  An allocator that uses global `new`, as per C++03 [20.4.1].
+      47              :    * @ingroup allocators
+      48              :    *
+      49              :    * This is precisely the allocator defined in the C++ Standard.
+      50              :    *   - all allocation calls `operator new`
+      51              :    *   - all deallocation calls `operator delete`
+      52              :    *
+      53              :    * This is the default base-class implementation of `std::allocator`,
+      54              :    * and is also the base-class of the `__gnu_cxx::new_allocator` extension.
+      55              :    * You should use either `std::allocator` or `__gnu_cxx::new_allocator`
+      56              :    * instead of using this directly.
+      57              :    *
+      58              :    * @tparam  _Tp  Type of allocated object.
+      59              :    *
+      60              :    * @headerfile memory
+      61              :    */
+      62              :   template<typename _Tp>
+      63              :     class __new_allocator
+      64              :     {
+      65              :     public:
+      66              :       typedef _Tp        value_type;
+      67              :       typedef std::size_t     size_type;
+      68              :       typedef std::ptrdiff_t  difference_type;
+      69              : #if __cplusplus <= 201703L
+      70              :       typedef _Tp*       pointer;
+      71              :       typedef const _Tp* const_pointer;
+      72              :       typedef _Tp&       reference;
+      73              :       typedef const _Tp& const_reference;
+      74              : 
+      75              :       template<typename _Tp1>
+      76              :         struct rebind
+      77              :         { typedef __new_allocator<_Tp1> other; };
+      78              : #endif
+      79              : 
+      80              : #if __cplusplus >= 201103L
+      81              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+      82              :       // 2103. propagate_on_container_move_assignment
+      83              :       typedef std::true_type propagate_on_container_move_assignment;
+      84              : #endif
+      85              : 
+      86              :       __attribute__((__always_inline__))
+      87              :       _GLIBCXX20_CONSTEXPR
+      88     39483536 :       __new_allocator() _GLIBCXX_USE_NOEXCEPT { }
+      89              : 
+      90              :       __attribute__((__always_inline__))
+      91              :       _GLIBCXX20_CONSTEXPR
+      92     46076150 :       __new_allocator(const __new_allocator&) _GLIBCXX_USE_NOEXCEPT { }
+      93              : 
+      94              :       template<typename _Tp1>
+      95              :         __attribute__((__always_inline__))
+      96              :         _GLIBCXX20_CONSTEXPR
+      97              :         __new_allocator(const __new_allocator<_Tp1>&) _GLIBCXX_USE_NOEXCEPT { }
+      98              : 
+      99              : #if __cplusplus >= 201103L
+     100              :       __new_allocator& operator=(const __new_allocator&) = default;
+     101              : #endif
+     102              : 
+     103              : #if __cplusplus <= 201703L
+     104    238094076 :       ~__new_allocator() _GLIBCXX_USE_NOEXCEPT { }
+     105              : 
+     106              :       pointer
+     107              :       address(reference __x) const _GLIBCXX_NOEXCEPT
+     108              :       { return std::__addressof(__x); }
+     109              : 
+     110              :       const_pointer
+     111              :       address(const_reference __x) const _GLIBCXX_NOEXCEPT
+     112              :       { return std::__addressof(__x); }
+     113              : #endif
+     114              : 
+     115              : #if __has_builtin(__builtin_operator_new) >= 201802L
+     116              : # define _GLIBCXX_OPERATOR_NEW __builtin_operator_new
+     117              : # define _GLIBCXX_OPERATOR_DELETE __builtin_operator_delete
+     118              : #else
+     119              : # define _GLIBCXX_OPERATOR_NEW ::operator new
+     120              : # define _GLIBCXX_OPERATOR_DELETE ::operator delete
+     121              : #endif
+     122              : 
+     123              :       // NB: __n is permitted to be 0.  The C++ standard says nothing
+     124              :       // about what the return value is when __n == 0.
+     125              :       _GLIBCXX_NODISCARD _Tp*
+     126    150488702 :       allocate(size_type __n, const void* = static_cast<const void*>(0))
+     127              :       {
+     128              : #if __cplusplus >= 201103L
+     129              :         // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     130              :         // 3308. std::allocator<void>().allocate(n)
+     131              :         static_assert(sizeof(_Tp) != 0, "cannot allocate incomplete types");
+     132              : #endif
+     133              : 
+     134    150488702 :         if (__builtin_expect(__n > this->_M_max_size(), false))
+     135              :           {
+     136              :             // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     137              :             // 3190. allocator::allocate sometimes returns too little storage
+     138            0 :             if (__n > (std::size_t(-1) / sizeof(_Tp)))
+     139            0 :               std::__throw_bad_array_new_length();
+     140            0 :             std::__throw_bad_alloc();
+     141              :           }
+     142              : 
+     143              : #if __cpp_aligned_new
+     144              :         if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
+     145              :           {
+     146              :             std::align_val_t __al = std::align_val_t(alignof(_Tp));
+     147              :             return static_cast<_Tp*>(_GLIBCXX_OPERATOR_NEW(__n * sizeof(_Tp),
+     148              :                                                            __al));
+     149              :           }
+     150              : #endif
+     151    150488702 :         return static_cast<_Tp*>(_GLIBCXX_OPERATOR_NEW(__n * sizeof(_Tp)));
+     152              :       }
+     153              : 
+     154              :       // __p is not permitted to be a null pointer.
+     155              :       void
+     156    263968424 :       deallocate(_Tp* __p, size_type __n __attribute__ ((__unused__)))
+     157              :       {
+     158              : #if __cpp_sized_deallocation
+     159              : # define _GLIBCXX_SIZED_DEALLOC(p, n) (p), (n) * sizeof(_Tp)
+     160              : #else
+     161              : # define _GLIBCXX_SIZED_DEALLOC(p, n) (p)
+     162              : #endif
+     163              : 
+     164              : #if __cpp_aligned_new
+     165              :         if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__)
+     166              :           {
+     167              :             _GLIBCXX_OPERATOR_DELETE(_GLIBCXX_SIZED_DEALLOC(__p, __n),
+     168              :                                      std::align_val_t(alignof(_Tp)));
+     169              :             return;
+     170              :           }
+     171              : #endif
+     172    263968424 :         _GLIBCXX_OPERATOR_DELETE(_GLIBCXX_SIZED_DEALLOC(__p, __n));
+     173              :       }
+     174              : 
+     175              : #undef _GLIBCXX_SIZED_DEALLOC
+     176              : #undef _GLIBCXX_OPERATOR_DELETE
+     177              : #undef _GLIBCXX_OPERATOR_NEW
+     178              : 
+     179              : #if __cplusplus <= 201703L
+     180              :       __attribute__((__always_inline__))
+     181              :       size_type
+     182              :       max_size() const _GLIBCXX_USE_NOEXCEPT
+     183    216018506 :       { return _M_max_size(); }
+     184              : 
+     185              : #if __cplusplus >= 201103L
+     186              :       template<typename _Up, typename... _Args>
+     187              :         __attribute__((__always_inline__))
+     188              :         void
+     189              :         construct(_Up* __p, _Args&&... __args)
+     190              :         noexcept(std::is_nothrow_constructible<_Up, _Args...>::value)
+     191    253267982 :         { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
+     192              : 
+     193              :       template<typename _Up>
+     194              :         __attribute__((__always_inline__))
+     195              :         void
+     196              :         destroy(_Up* __p)
+     197              :         noexcept(std::is_nothrow_destructible<_Up>::value)
+     198    143934368 :         { __p->~_Up(); }
+     199              : #else
+     200              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     201              :       // 402. wrong new expression in [some_] allocator::construct
+     202              :       __attribute__((__always_inline__))
+     203              :       void
+     204              :       construct(pointer __p, const _Tp& __val)
+     205              :       { ::new((void *)__p) _Tp(__val); }
+     206              : 
+     207              :       __attribute__((__always_inline__))
+     208              :       void
+     209              :       destroy(pointer __p) { __p->~_Tp(); }
+     210              : #endif
+     211              : #endif // ! C++20
+     212              : 
+     213              :       template<typename _Up>
+     214              :         friend __attribute__((__always_inline__)) _GLIBCXX20_CONSTEXPR bool
+     215              :         operator==(const __new_allocator&, const __new_allocator<_Up>&)
+     216              :         _GLIBCXX_NOTHROW
+     217              :         { return true; }
+     218              : 
+     219              : #if __cpp_impl_three_way_comparison < 201907L
+     220              :       template<typename _Up>
+     221              :         friend __attribute__((__always_inline__)) _GLIBCXX20_CONSTEXPR bool
+     222              :         operator!=(const __new_allocator&, const __new_allocator<_Up>&)
+     223              :         _GLIBCXX_NOTHROW
+     224              :         { return false; }
+     225              : #endif
+     226              : 
+     227              :     private:
+     228              :       __attribute__((__always_inline__))
+     229              :       _GLIBCXX_CONSTEXPR size_type
+     230              :       _M_max_size() const _GLIBCXX_USE_NOEXCEPT
+     231              :       {
+     232              : #if __PTRDIFF_MAX__ < __SIZE_MAX__
+     233    366507208 :         return std::size_t(__PTRDIFF_MAX__) / sizeof(_Tp);
+     234              : #else
+     235              :         return std::size_t(-1) / sizeof(_Tp);
+     236              : #endif
+     237              :       }
+     238              :     };
+     239              : 
+     240              : _GLIBCXX_END_NAMESPACE_VERSION
+     241              : } // namespace
+     242              : 
+     243              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/predefined_ops.h.func-c.html b/html/usr/include/c++/13/bits/predefined_ops.h.func-c.html new file mode 100644 index 0000000..3f42555 --- /dev/null +++ b/html/usr/include/c++/13/bits/predefined_ops.h.func-c.html @@ -0,0 +1,894 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/predefined_ops.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - predefined_ops.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:72.9 %5943
Test Date:2024-04-30 13:17:26Functions:71.3 %10172
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN9__gnu_cxx5__ops14_Iter_comp_valISt4lessIdEEC2EONS0_15_Iter_comp_iterIS3_EE0
_ZN9__gnu_cxx5__ops14_Iter_comp_valISt4lessIdEEC2EONS0_15_Iter_comp_iterIS3_EE0
_ZN9__gnu_cxx5__ops14_Iter_comp_valISt7greaterIdEEC2EONS0_15_Iter_comp_iterIS3_EE0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EC2EONS0_15_Iter_comp_iterISE_EE0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EC2EONS0_15_Iter_comp_iterISA_EE0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EC2EONS0_15_Iter_comp_iterIS8_EE0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EC2EONS0_15_Iter_comp_iterIS8_EE0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EC2EONS0_15_Iter_comp_iterIS7_EE0
_ZN9__gnu_cxx5__ops14_Iter_comp_valISt4lessIdEEclINS_17__normal_iteratorIPdSt6vectorIdSaIdEEEEdEEbT_RT0_0
_ZN9__gnu_cxx5__ops14_Iter_comp_valISt4lessIdEEclINS_17__normal_iteratorIPdSt6vectorIdSaIdEEEEdEEbT_RT0_0
_ZN9__gnu_cxx5__ops14_Iter_comp_valISt7greaterIdEEclINS_17__normal_iteratorIPdSt6vectorIdSaIdEEEEdEEbT_RT0_0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EclINS_17__normal_iteratorIPSt4pairIifESt6vectorISJ_SaISJ_EEEESJ_EEbS8_RSB_0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EclINS_17__normal_iteratorIPSt4pairIfSE_IiiEESt6vectorISG_SaISG_EEEEKSG_EEbS4_RS7_0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EclINS_17__normal_iteratorIPiSt6vectorIiSaIiEEEEiEEbT_RT0_0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EclINS_17__normal_iteratorIPiSt6vectorIiSaIiEEEEiEEbT_RT0_0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EclINS_17__normal_iteratorIPiS3_IiSaIiEEEEiEEbT_RT0_0
_ZN9__gnu_cxx5__ops14_Iter_less_valC2ENS0_15_Iter_less_iterE0
_ZN9__gnu_cxx5__ops15__iter_comp_valIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EENS0_14_Iter_comp_valIS4_EENS0_15_Iter_comp_iterIS4_EE0
_ZN9__gnu_cxx5__ops15__iter_less_valEv0
_ZNK9__gnu_cxx5__ops14_Iter_less_valclINS_17__normal_iteratorIPcSt6vectorIcSaIcEEEEcEEbT_RT0_0
_ZNK9__gnu_cxx5__ops14_Iter_less_valclINS_17__normal_iteratorIPKcSt6vectorIcSaIcEEEES4_EEbT_RT0_0
_ZNK9__gnu_cxx5__ops14_Iter_less_valclINS_17__normal_iteratorIPcSt6vectorIcSaIcEEEEcEEbT_RT0_0
_ZNK9__gnu_cxx5__ops14_Val_less_iterclIcNS_17__normal_iteratorIPcSt6vectorIcSaIcEEEEEEbRT_T0_0
_ZNK9__gnu_cxx5__ops19_Iter_equal_to_iterclINS_17__normal_iteratorIPcSt6vectorIcSaIcEEEES8_EEbT_T0_0
_ZN9__gnu_cxx5__ops20__iter_equal_to_iterEv96
_ZN9__gnu_cxx5__ops12_Iter_negateIZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEC4ESt16initializer_listINS3_6detail8json_refISG_EEEbNSI_7value_tEEUlRKSK_E_EC2ESP_164
_ZN9__gnu_cxx5__ops8__negateIZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEC4ESt16initializer_listINS3_6detail8json_refISG_EEEbNSI_7value_tEEUlRKSK_E_EENS0_12_Iter_negateIT_EENS0_10_Iter_predISR_EE164
_ZN9__gnu_cxx5__ops12_Iter_negateIZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEC4ESt16initializer_listINS3_6detail8json_refISG_EEEbNSI_7value_tEEUlRKSK_E_EclIPSN_EEbT_224
_ZN9__gnu_cxx5__ops10_Iter_predIZN6loguru15remove_callbackEPKcEUlRKNS2_8CallbackEE_EC2ES8_378
_ZN9__gnu_cxx5__ops10_Iter_predIZN6loguru15remove_callbackEPKcEUlRKNS2_8CallbackEE_EC2ES8_0
_ZN9__gnu_cxx5__ops10_Iter_predIZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEC4ESt16initializer_listINS3_6detail8json_refISG_EEEbNSI_7value_tEEUlRKSK_E_EC2ESP_164
_ZN9__gnu_cxx5__ops10_Iter_predIZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEEUlT_E_EC2ES9_214
_ZN9__gnu_cxx5__ops11__pred_iterIZN6loguru15remove_callbackEPKcEUlRKNS2_8CallbackEE_EENS0_10_Iter_predIT_EESA_378
_ZN9__gnu_cxx5__ops11__pred_iterIZN6loguru15remove_callbackEPKcEUlRKNS2_8CallbackEE_EENS0_10_Iter_predIT_EESA_0
_ZN9__gnu_cxx5__ops11__pred_iterIZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEC4ESt16initializer_listINS3_6detail8json_refISG_EEEbNSI_7value_tEEUlRKSK_E_EENS0_10_Iter_predIT_EESR_164
_ZN9__gnu_cxx5__ops11__pred_iterIZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEEUlT_E_EENS0_10_Iter_predIS8_EES8_214
_ZN9__gnu_cxx5__ops15_Iter_comp_iterISt4lessIdEEC2ES3_602
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EC2ESE_26
_ZN9__gnu_cxx5__ops15_Iter_comp_iterISt4lessIdEEC2ES3_38
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EC2ES8_38
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EC2ESA_58
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EC2ES7_58
_ZN9__gnu_cxx5__ops15_Iter_comp_iterISt7greaterIdEEC2ES3_192
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EC2ES8_192
_ZN9__gnu_cxx5__ops16__iter_comp_iterISt4lessIdEEENS0_15_Iter_comp_iterIT_EES5_602
_ZN9__gnu_cxx5__ops16__iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EENS0_15_Iter_comp_iterIS8_EES8_26
_ZN9__gnu_cxx5__ops16__iter_comp_iterISt4lessIdEEENS0_15_Iter_comp_iterIT_EES5_38
_ZN9__gnu_cxx5__ops16__iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EENS0_15_Iter_comp_iterIT_EESA_38
_ZN9__gnu_cxx5__ops16__iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EENS0_15_Iter_comp_iterIS4_EES4_58
_ZN9__gnu_cxx5__ops16__iter_comp_iterIZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EENS0_15_Iter_comp_iterIT_EES9_58
_ZN9__gnu_cxx5__ops16__iter_comp_iterISt7greaterIdEEENS0_15_Iter_comp_iterIT_EES5_192
_ZN9__gnu_cxx5__ops16__iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EENS0_15_Iter_comp_iterIT_EESA_192
_ZN9__gnu_cxx5__ops15__val_comp_iterENS0_15_Iter_less_iterE4846
_ZN9__gnu_cxx5__ops10_Iter_predIZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEEUlT_E_EclINS_17__normal_iteratorIPiSt6vectorIiSaIiEEEEEEbS8_4850
_ZN9__gnu_cxx5__ops10_Iter_predIZN6loguru15remove_callbackEPKcEUlRKNS2_8CallbackEE_EclINS_17__normal_iteratorIPS5_St6vectorIS5_SaIS5_EEEEEEbT_0
_ZN9__gnu_cxx5__ops10_Iter_predIZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEEUlT_E_EclINS_17__normal_iteratorIPiSt6vectorIiSaIiEEEEEEbS8_4850
_ZN9__gnu_cxx5__ops14_Val_comp_iterISt4lessIdEEC2EONS0_15_Iter_comp_iterIS3_EE9732
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EC2EONS0_15_Iter_comp_iterISE_EE88
_ZN9__gnu_cxx5__ops14_Val_comp_iterISt4lessIdEEC2EONS0_15_Iter_comp_iterIS3_EE218
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EC2EONS0_15_Iter_comp_iterIS8_EE218
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EC2EONS0_15_Iter_comp_iterIS7_EE268
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EC2EONS0_15_Iter_comp_iterISA_EE700
_ZN9__gnu_cxx5__ops14_Val_comp_iterISt7greaterIdEEC2EONS0_15_Iter_comp_iterIS3_EE4120
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EC2EONS0_15_Iter_comp_iterIS8_EE4120
_ZN9__gnu_cxx5__ops15__val_comp_iterISt4lessIdEEENS0_14_Val_comp_iterIT_EENS0_15_Iter_comp_iterIS5_EE9732
_ZN9__gnu_cxx5__ops15__val_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EENS0_14_Val_comp_iterIS8_EENS0_15_Iter_comp_iterIS8_EE88
_ZN9__gnu_cxx5__ops15__val_comp_iterISt4lessIdEEENS0_14_Val_comp_iterIT_EENS0_15_Iter_comp_iterIS5_EE218
_ZN9__gnu_cxx5__ops15__val_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EENS0_14_Val_comp_iterIT_EENS0_15_Iter_comp_iterISA_EE218
_ZN9__gnu_cxx5__ops15__val_comp_iterIZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EENS0_14_Val_comp_iterIT_EENS0_15_Iter_comp_iterIS9_EE268
_ZN9__gnu_cxx5__ops15__val_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EENS0_14_Val_comp_iterIS4_EENS0_15_Iter_comp_iterIS4_EE700
_ZN9__gnu_cxx5__ops15__val_comp_iterISt7greaterIdEEENS0_14_Val_comp_iterIT_EENS0_15_Iter_comp_iterIS5_EE4120
_ZN9__gnu_cxx5__ops15__val_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EENS0_14_Val_comp_iterIT_EENS0_15_Iter_comp_iterISA_EE4120
_ZN9__gnu_cxx5__ops16__iter_less_iterEv12252
_ZN9__gnu_cxx5__ops14_Val_comp_iterISt4lessIdEEclIdNS_17__normal_iteratorIPdSt6vectorIdSaIdEEEEEEbRT_T0_31568
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EclIKSt4pairIfSD_IiiEENS_17__normal_iteratorIPSF_St6vectorISF_SaISF_EEEEEEbRS4_S7_0
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EclISt4pairIifENS_17__normal_iteratorIPSI_St6vectorISI_SaISI_EEEEEEbRS8_SB_198
_ZN9__gnu_cxx5__ops14_Val_comp_iterISt4lessIdEEclIdNS_17__normal_iteratorIPdSt6vectorIdSaIdEEEEEEbRT_T0_638
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EclIiNS_17__normal_iteratorIPiSt6vectorIiSaIiEEEEEEbRT_T0_638
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EclIiNS_17__normal_iteratorIPiS3_IiSaIiEEEEEEbRT_T0_782
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EclISt4pairIfSD_IiiEENS_17__normal_iteratorIPSF_St6vectorISF_SaISF_EEEEEEbRS4_S7_1336
_ZN9__gnu_cxx5__ops14_Val_comp_iterISt7greaterIdEEclIdNS_17__normal_iteratorIPdSt6vectorIdSaIdEEEEEEbRT_T0_13988
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EclIiNS_17__normal_iteratorIPiSt6vectorIiSaIiEEEEEEbRT_T0_13988
_ZN9__gnu_cxx5__ops15_Iter_comp_iterISt4lessIdEEclINS_17__normal_iteratorIPdSt6vectorIdSaIdEEEESB_EEbT_T0_40936
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EclINS_17__normal_iteratorIPSt4pairIifESt6vectorISJ_SaISJ_EEEESO_EEbS8_SB_126
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EclIPSt4pairIfSD_IiiEENS_17__normal_iteratorISG_St6vectorISF_SaISF_EEEEEEbS4_S7_240
_ZN9__gnu_cxx5__ops15_Iter_comp_iterISt4lessIdEEclINS_17__normal_iteratorIPdSt6vectorIdSaIdEEEESB_EEbT_T0_268
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EclINS_17__normal_iteratorIPiSt6vectorIiSaIiEEEESG_EEbT_T0_268
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EclIPSt4pairIfSD_IiiEESG_EEbS4_S7_312
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EclINS_17__normal_iteratorIPiS3_IiSaIiEEEESE_EEbT_T0_352
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EclINS_17__normal_iteratorIPSt4pairIfSE_IiiEESt6vectorISG_SaISG_EEEESH_EEbS4_S7_842
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EclINS_17__normal_iteratorIPSt4pairIfSE_IiiEESt6vectorISG_SaISG_EEEESL_EEbS4_S7_1696
_ZN9__gnu_cxx5__ops15_Iter_comp_iterISt7greaterIdEEclINS_17__normal_iteratorIPdSt6vectorIdSaIdEEEESB_EEbT_T0_18416
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EclINS_17__normal_iteratorIPiSt6vectorIiSaIiEEEESG_EEbT_T0_18416
_ZNK9__gnu_cxx5__ops15_Iter_less_iterclINS_17__normal_iteratorIPcSt6vectorIcSaIcEEEES8_EEbT_T0_831452
_ZNK9__gnu_cxx5__ops15_Iter_less_iterclINS_17__normal_iteratorIPcSt6vectorIcSaIcEEEES8_EEbT_T0_0
_ZNK9__gnu_cxx5__ops15_Iter_less_iterclINS_17__normal_iteratorIPdSt6vectorIdSaIdEEEES8_EEbT_T0_20904
_ZNK9__gnu_cxx5__ops15_Iter_less_iterclINS_17__normal_iteratorIPiSt6vectorIiSaIiEEEES8_EEbT_T0_810548
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKcEC2ERS2_9580198
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKcEC2ERS2_0
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKPN8bayesnet4NodeEEC2ERS5_12
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEEEC2ERSH_18
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKiEC2ERS2_5554
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ERS8_9574614
_ZN9__gnu_cxx5__ops17__iter_equals_valIKcEENS0_16_Iter_equals_valIT_EERS4_9580198
_ZN9__gnu_cxx5__ops17__iter_equals_valIKcEENS0_16_Iter_equals_valIT_EERS4_0
_ZN9__gnu_cxx5__ops17__iter_equals_valIKPN8bayesnet4NodeEEENS0_16_Iter_equals_valIT_EERS7_12
_ZN9__gnu_cxx5__ops17__iter_equals_valIKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEEEENS0_16_Iter_equals_valIT_EERSJ_18
_ZN9__gnu_cxx5__ops17__iter_equals_valIKiEENS0_16_Iter_equals_valIT_EERS4_5554
_ZN9__gnu_cxx5__ops17__iter_equals_valIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENS0_16_Iter_equals_valIT_EERSA_9574614
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKcEclIPS2_EEbT_847577424
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKcEclIPS2_EEbT_0
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKPN8bayesnet4NodeEEclINS_17__normal_iteratorIPS4_St6vectorIS4_SaIS4_EEEEEEbT_18
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEEEclINS_17__normal_iteratorIPSC_S6_ISC_SaISC_EEEEEEbT_38
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKiEclISt14_List_iteratorIiEEEbT_200
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKiEclINS_17__normal_iteratorIPiSt6vectorIiSaIiEEEEEEbT_19728
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEclINS_17__normal_iteratorIPS7_St6vectorIS7_SaIS7_EEEEEEbT_1880464
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEclINS_17__normal_iteratorIPS8_St6vectorIS7_SaIS7_EEEEEEbT_845676976
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/predefined_ops.h.func.html b/html/usr/include/c++/13/bits/predefined_ops.h.func.html new file mode 100644 index 0000000..2016ea1 --- /dev/null +++ b/html/usr/include/c++/13/bits/predefined_ops.h.func.html @@ -0,0 +1,894 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/predefined_ops.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - predefined_ops.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:72.9 %5943
Test Date:2024-04-30 13:17:26Functions:71.3 %10172
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN9__gnu_cxx5__ops10_Iter_predIZN6loguru15remove_callbackEPKcEUlRKNS2_8CallbackEE_EC2ES8_378
_ZN9__gnu_cxx5__ops10_Iter_predIZN6loguru15remove_callbackEPKcEUlRKNS2_8CallbackEE_EC2ES8_0
_ZN9__gnu_cxx5__ops10_Iter_predIZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEEUlT_E_EC2ES9_214
_ZN9__gnu_cxx5__ops10_Iter_predIZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEC4ESt16initializer_listINS3_6detail8json_refISG_EEEbNSI_7value_tEEUlRKSK_E_EC2ESP_164
_ZN9__gnu_cxx5__ops10_Iter_predIZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEEUlT_E_EclINS_17__normal_iteratorIPiSt6vectorIiSaIiEEEEEEbS8_4850
_ZN9__gnu_cxx5__ops10_Iter_predIZN6loguru15remove_callbackEPKcEUlRKNS2_8CallbackEE_EclINS_17__normal_iteratorIPS5_St6vectorIS5_SaIS5_EEEEEEbT_0
_ZN9__gnu_cxx5__ops10_Iter_predIZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEEUlT_E_EclINS_17__normal_iteratorIPiSt6vectorIiSaIiEEEEEEbS8_4850
_ZN9__gnu_cxx5__ops11__pred_iterIZN6loguru15remove_callbackEPKcEUlRKNS2_8CallbackEE_EENS0_10_Iter_predIT_EESA_378
_ZN9__gnu_cxx5__ops11__pred_iterIZN6loguru15remove_callbackEPKcEUlRKNS2_8CallbackEE_EENS0_10_Iter_predIT_EESA_0
_ZN9__gnu_cxx5__ops11__pred_iterIZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEEUlT_E_EENS0_10_Iter_predIS8_EES8_214
_ZN9__gnu_cxx5__ops11__pred_iterIZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEC4ESt16initializer_listINS3_6detail8json_refISG_EEEbNSI_7value_tEEUlRKSK_E_EENS0_10_Iter_predIT_EESR_164
_ZN9__gnu_cxx5__ops12_Iter_negateIZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEC4ESt16initializer_listINS3_6detail8json_refISG_EEEbNSI_7value_tEEUlRKSK_E_EC2ESP_164
_ZN9__gnu_cxx5__ops12_Iter_negateIZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEC4ESt16initializer_listINS3_6detail8json_refISG_EEEbNSI_7value_tEEUlRKSK_E_EclIPSN_EEbT_224
_ZN9__gnu_cxx5__ops14_Iter_comp_valISt4lessIdEEC2EONS0_15_Iter_comp_iterIS3_EE0
_ZN9__gnu_cxx5__ops14_Iter_comp_valISt4lessIdEEC2EONS0_15_Iter_comp_iterIS3_EE0
_ZN9__gnu_cxx5__ops14_Iter_comp_valISt7greaterIdEEC2EONS0_15_Iter_comp_iterIS3_EE0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EC2EONS0_15_Iter_comp_iterISE_EE0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EC2EONS0_15_Iter_comp_iterISA_EE0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EC2EONS0_15_Iter_comp_iterIS8_EE0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EC2EONS0_15_Iter_comp_iterIS8_EE0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EC2EONS0_15_Iter_comp_iterIS7_EE0
_ZN9__gnu_cxx5__ops14_Iter_comp_valISt4lessIdEEclINS_17__normal_iteratorIPdSt6vectorIdSaIdEEEEdEEbT_RT0_0
_ZN9__gnu_cxx5__ops14_Iter_comp_valISt4lessIdEEclINS_17__normal_iteratorIPdSt6vectorIdSaIdEEEEdEEbT_RT0_0
_ZN9__gnu_cxx5__ops14_Iter_comp_valISt7greaterIdEEclINS_17__normal_iteratorIPdSt6vectorIdSaIdEEEEdEEbT_RT0_0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EclINS_17__normal_iteratorIPSt4pairIifESt6vectorISJ_SaISJ_EEEESJ_EEbS8_RSB_0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EclINS_17__normal_iteratorIPSt4pairIfSE_IiiEESt6vectorISG_SaISG_EEEEKSG_EEbS4_RS7_0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EclINS_17__normal_iteratorIPiSt6vectorIiSaIiEEEEiEEbT_RT0_0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EclINS_17__normal_iteratorIPiSt6vectorIiSaIiEEEEiEEbT_RT0_0
_ZN9__gnu_cxx5__ops14_Iter_comp_valIZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EclINS_17__normal_iteratorIPiS3_IiSaIiEEEEiEEbT_RT0_0
_ZN9__gnu_cxx5__ops14_Iter_less_valC2ENS0_15_Iter_less_iterE0
_ZN9__gnu_cxx5__ops14_Val_comp_iterISt4lessIdEEC2EONS0_15_Iter_comp_iterIS3_EE9732
_ZN9__gnu_cxx5__ops14_Val_comp_iterISt4lessIdEEC2EONS0_15_Iter_comp_iterIS3_EE218
_ZN9__gnu_cxx5__ops14_Val_comp_iterISt7greaterIdEEC2EONS0_15_Iter_comp_iterIS3_EE4120
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EC2EONS0_15_Iter_comp_iterISE_EE88
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EC2EONS0_15_Iter_comp_iterISA_EE700
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EC2EONS0_15_Iter_comp_iterIS8_EE4120
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EC2EONS0_15_Iter_comp_iterIS8_EE218
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EC2EONS0_15_Iter_comp_iterIS7_EE268
_ZN9__gnu_cxx5__ops14_Val_comp_iterISt4lessIdEEclIdNS_17__normal_iteratorIPdSt6vectorIdSaIdEEEEEEbRT_T0_31568
_ZN9__gnu_cxx5__ops14_Val_comp_iterISt4lessIdEEclIdNS_17__normal_iteratorIPdSt6vectorIdSaIdEEEEEEbRT_T0_638
_ZN9__gnu_cxx5__ops14_Val_comp_iterISt7greaterIdEEclIdNS_17__normal_iteratorIPdSt6vectorIdSaIdEEEEEEbRT_T0_13988
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EclISt4pairIifENS_17__normal_iteratorIPSI_St6vectorISI_SaISI_EEEEEEbRS8_SB_198
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EclIKSt4pairIfSD_IiiEENS_17__normal_iteratorIPSF_St6vectorISF_SaISF_EEEEEEbRS4_S7_0
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EclISt4pairIfSD_IiiEENS_17__normal_iteratorIPSF_St6vectorISF_SaISF_EEEEEEbRS4_S7_1336
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EclIiNS_17__normal_iteratorIPiSt6vectorIiSaIiEEEEEEbRT_T0_13988
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EclIiNS_17__normal_iteratorIPiSt6vectorIiSaIiEEEEEEbRT_T0_638
_ZN9__gnu_cxx5__ops14_Val_comp_iterIZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EclIiNS_17__normal_iteratorIPiS3_IiSaIiEEEEEEbRT_T0_782
_ZN9__gnu_cxx5__ops15_Iter_comp_iterISt4lessIdEEC2ES3_602
_ZN9__gnu_cxx5__ops15_Iter_comp_iterISt4lessIdEEC2ES3_38
_ZN9__gnu_cxx5__ops15_Iter_comp_iterISt7greaterIdEEC2ES3_192
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EC2ESE_26
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EC2ESA_58
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EC2ES8_192
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EC2ES8_38
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EC2ES7_58
_ZN9__gnu_cxx5__ops15_Iter_comp_iterISt4lessIdEEclINS_17__normal_iteratorIPdSt6vectorIdSaIdEEEESB_EEbT_T0_40936
_ZN9__gnu_cxx5__ops15_Iter_comp_iterISt4lessIdEEclINS_17__normal_iteratorIPdSt6vectorIdSaIdEEEESB_EEbT_T0_268
_ZN9__gnu_cxx5__ops15_Iter_comp_iterISt7greaterIdEEclINS_17__normal_iteratorIPdSt6vectorIdSaIdEEEESB_EEbT_T0_18416
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EclINS_17__normal_iteratorIPSt4pairIifESt6vectorISJ_SaISJ_EEEESO_EEbS8_SB_126
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EclINS_17__normal_iteratorIPSt4pairIfSE_IiiEESt6vectorISG_SaISG_EEEESH_EEbS4_S7_842
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EclINS_17__normal_iteratorIPSt4pairIfSE_IiiEESt6vectorISG_SaISG_EEEESL_EEbS4_S7_1696
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EclIPSt4pairIfSD_IiiEENS_17__normal_iteratorISG_St6vectorISF_SaISF_EEEEEEbS4_S7_240
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EclIPSt4pairIfSD_IiiEESG_EEbS4_S7_312
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EclINS_17__normal_iteratorIPiSt6vectorIiSaIiEEEESG_EEbT_T0_18416
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EclINS_17__normal_iteratorIPiSt6vectorIiSaIiEEEESG_EEbT_T0_268
_ZN9__gnu_cxx5__ops15_Iter_comp_iterIZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EclINS_17__normal_iteratorIPiS3_IiSaIiEEEESE_EEbT_T0_352
_ZN9__gnu_cxx5__ops15__iter_comp_valIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EENS0_14_Iter_comp_valIS4_EENS0_15_Iter_comp_iterIS4_EE0
_ZN9__gnu_cxx5__ops15__iter_less_valEv0
_ZN9__gnu_cxx5__ops15__val_comp_iterENS0_15_Iter_less_iterE4846
_ZN9__gnu_cxx5__ops15__val_comp_iterISt4lessIdEEENS0_14_Val_comp_iterIT_EENS0_15_Iter_comp_iterIS5_EE9732
_ZN9__gnu_cxx5__ops15__val_comp_iterISt4lessIdEEENS0_14_Val_comp_iterIT_EENS0_15_Iter_comp_iterIS5_EE218
_ZN9__gnu_cxx5__ops15__val_comp_iterISt7greaterIdEEENS0_14_Val_comp_iterIT_EENS0_15_Iter_comp_iterIS5_EE4120
_ZN9__gnu_cxx5__ops15__val_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EENS0_14_Val_comp_iterIS8_EENS0_15_Iter_comp_iterIS8_EE88
_ZN9__gnu_cxx5__ops15__val_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EENS0_14_Val_comp_iterIS4_EENS0_15_Iter_comp_iterIS4_EE700
_ZN9__gnu_cxx5__ops15__val_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EENS0_14_Val_comp_iterIT_EENS0_15_Iter_comp_iterISA_EE4120
_ZN9__gnu_cxx5__ops15__val_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EENS0_14_Val_comp_iterIT_EENS0_15_Iter_comp_iterISA_EE218
_ZN9__gnu_cxx5__ops15__val_comp_iterIZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EENS0_14_Val_comp_iterIT_EENS0_15_Iter_comp_iterIS9_EE268
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKcEC2ERS2_9580198
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEEEC2ERSH_18
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ERS8_9574614
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKPN8bayesnet4NodeEEC2ERS5_12
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKcEC2ERS2_0
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKiEC2ERS2_5554
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKcEclIPS2_EEbT_847577424
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEEEclINS_17__normal_iteratorIPSC_S6_ISC_SaISC_EEEEEEbT_38
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEclINS_17__normal_iteratorIPS7_St6vectorIS7_SaIS7_EEEEEEbT_1880464
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEclINS_17__normal_iteratorIPS8_St6vectorIS7_SaIS7_EEEEEEbT_845676976
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKPN8bayesnet4NodeEEclINS_17__normal_iteratorIPS4_St6vectorIS4_SaIS4_EEEEEEbT_18
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKcEclIPS2_EEbT_0
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKiEclINS_17__normal_iteratorIPiSt6vectorIiSaIiEEEEEEbT_19728
_ZN9__gnu_cxx5__ops16_Iter_equals_valIKiEclISt14_List_iteratorIiEEEbT_200
_ZN9__gnu_cxx5__ops16__iter_comp_iterISt4lessIdEEENS0_15_Iter_comp_iterIT_EES5_602
_ZN9__gnu_cxx5__ops16__iter_comp_iterISt4lessIdEEENS0_15_Iter_comp_iterIT_EES5_38
_ZN9__gnu_cxx5__ops16__iter_comp_iterISt7greaterIdEEENS0_15_Iter_comp_iterIT_EES5_192
_ZN9__gnu_cxx5__ops16__iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EENS0_15_Iter_comp_iterIS8_EES8_26
_ZN9__gnu_cxx5__ops16__iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EENS0_15_Iter_comp_iterIS4_EES4_58
_ZN9__gnu_cxx5__ops16__iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EENS0_15_Iter_comp_iterIT_EESA_192
_ZN9__gnu_cxx5__ops16__iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EENS0_15_Iter_comp_iterIT_EESA_38
_ZN9__gnu_cxx5__ops16__iter_comp_iterIZN8bayesnet7argsortERSt6vectorIdSaIdEEEUliiE_EENS0_15_Iter_comp_iterIT_EES9_58
_ZN9__gnu_cxx5__ops16__iter_less_iterEv12252
_ZN9__gnu_cxx5__ops17__iter_equals_valIKcEENS0_16_Iter_equals_valIT_EERS4_9580198
_ZN9__gnu_cxx5__ops17__iter_equals_valIKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEEEENS0_16_Iter_equals_valIT_EERSJ_18
_ZN9__gnu_cxx5__ops17__iter_equals_valIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENS0_16_Iter_equals_valIT_EERSA_9574614
_ZN9__gnu_cxx5__ops17__iter_equals_valIKPN8bayesnet4NodeEEENS0_16_Iter_equals_valIT_EERS7_12
_ZN9__gnu_cxx5__ops17__iter_equals_valIKcEENS0_16_Iter_equals_valIT_EERS4_0
_ZN9__gnu_cxx5__ops17__iter_equals_valIKiEENS0_16_Iter_equals_valIT_EERS4_5554
_ZN9__gnu_cxx5__ops20__iter_equal_to_iterEv96
_ZN9__gnu_cxx5__ops8__negateIZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEC4ESt16initializer_listINS3_6detail8json_refISG_EEEbNSI_7value_tEEUlRKSK_E_EENS0_12_Iter_negateIT_EENS0_10_Iter_predISR_EE164
_ZNK9__gnu_cxx5__ops14_Iter_less_valclINS_17__normal_iteratorIPcSt6vectorIcSaIcEEEEcEEbT_RT0_0
_ZNK9__gnu_cxx5__ops14_Iter_less_valclINS_17__normal_iteratorIPKcSt6vectorIcSaIcEEEES4_EEbT_RT0_0
_ZNK9__gnu_cxx5__ops14_Iter_less_valclINS_17__normal_iteratorIPcSt6vectorIcSaIcEEEEcEEbT_RT0_0
_ZNK9__gnu_cxx5__ops14_Val_less_iterclIcNS_17__normal_iteratorIPcSt6vectorIcSaIcEEEEEEbRT_T0_0
_ZNK9__gnu_cxx5__ops15_Iter_less_iterclINS_17__normal_iteratorIPcSt6vectorIcSaIcEEEES8_EEbT_T0_831452
_ZNK9__gnu_cxx5__ops15_Iter_less_iterclINS_17__normal_iteratorIPcSt6vectorIcSaIcEEEES8_EEbT_T0_0
_ZNK9__gnu_cxx5__ops15_Iter_less_iterclINS_17__normal_iteratorIPdSt6vectorIdSaIdEEEES8_EEbT_T0_20904
_ZNK9__gnu_cxx5__ops15_Iter_less_iterclINS_17__normal_iteratorIPiSt6vectorIiSaIiEEEES8_EEbT_T0_810548
_ZNK9__gnu_cxx5__ops19_Iter_equal_to_iterclINS_17__normal_iteratorIPcSt6vectorIcSaIcEEEES8_EEbT_T0_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/predefined_ops.h.gcov.html b/html/usr/include/c++/13/bits/predefined_ops.h.gcov.html new file mode 100644 index 0000000..41daa0e --- /dev/null +++ b/html/usr/include/c++/13/bits/predefined_ops.h.gcov.html @@ -0,0 +1,483 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/predefined_ops.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - predefined_ops.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:72.9 %5943
Test Date:2024-04-30 13:17:26Functions:71.3 %10172
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Default predicates for internal use -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2013-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file predefined_ops.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  You should not attempt to use it directly. @headername{algorithm}
+      28              :  */
+      29              : 
+      30              : #ifndef _GLIBCXX_PREDEFINED_OPS_H
+      31              : #define _GLIBCXX_PREDEFINED_OPS_H       1
+      32              : 
+      33              : #include <bits/move.h>
+      34              : 
+      35              : namespace __gnu_cxx
+      36              : {
+      37              : namespace __ops
+      38              : {
+      39              :   struct _Iter_less_iter
+      40              :   {
+      41              :     template<typename _Iterator1, typename _Iterator2>
+      42              :       _GLIBCXX14_CONSTEXPR
+      43              :       bool
+      44       831452 :       operator()(_Iterator1 __it1, _Iterator2 __it2) const
+      45       831452 :       { return *__it1 < *__it2; }
+      46              :   };
+      47              : 
+      48              :   _GLIBCXX14_CONSTEXPR
+      49              :   inline _Iter_less_iter
+      50        12252 :   __iter_less_iter()
+      51        12252 :   { return _Iter_less_iter(); }
+      52              : 
+      53              :   struct _Iter_less_val
+      54              :   {
+      55              : #if __cplusplus >= 201103L
+      56              :     constexpr _Iter_less_val() = default;
+      57              : #else
+      58              :     _Iter_less_val() { }
+      59              : #endif
+      60              : 
+      61              :     _GLIBCXX20_CONSTEXPR
+      62              :     explicit
+      63            0 :     _Iter_less_val(_Iter_less_iter) { }
+      64              : 
+      65              :     template<typename _Iterator, typename _Value>
+      66              :       _GLIBCXX20_CONSTEXPR
+      67              :       bool
+      68            0 :       operator()(_Iterator __it, _Value& __val) const
+      69            0 :       { return *__it < __val; }
+      70              :   };
+      71              : 
+      72              :   _GLIBCXX20_CONSTEXPR
+      73              :   inline _Iter_less_val
+      74            0 :   __iter_less_val()
+      75            0 :   { return _Iter_less_val(); }
+      76              : 
+      77              :   _GLIBCXX20_CONSTEXPR
+      78              :   inline _Iter_less_val
+      79              :   __iter_comp_val(_Iter_less_iter)
+      80              :   { return _Iter_less_val(); }
+      81              : 
+      82              :   struct _Val_less_iter
+      83              :   {
+      84              : #if __cplusplus >= 201103L
+      85              :     constexpr _Val_less_iter() = default;
+      86              : #else
+      87              :     _Val_less_iter() { }
+      88              : #endif
+      89              : 
+      90              :     _GLIBCXX20_CONSTEXPR
+      91              :     explicit
+      92              :     _Val_less_iter(_Iter_less_iter) { }
+      93              : 
+      94              :     template<typename _Value, typename _Iterator>
+      95              :       _GLIBCXX20_CONSTEXPR
+      96              :       bool
+      97            0 :       operator()(_Value& __val, _Iterator __it) const
+      98            0 :       { return __val < *__it; }
+      99              :   };
+     100              : 
+     101              :   _GLIBCXX20_CONSTEXPR
+     102              :   inline _Val_less_iter
+     103              :   __val_less_iter()
+     104              :   { return _Val_less_iter(); }
+     105              : 
+     106              :   _GLIBCXX20_CONSTEXPR
+     107              :   inline _Val_less_iter
+     108         4846 :   __val_comp_iter(_Iter_less_iter)
+     109         4846 :   { return _Val_less_iter(); }
+     110              : 
+     111              :   struct _Iter_equal_to_iter
+     112              :   {
+     113              :     template<typename _Iterator1, typename _Iterator2>
+     114              :       _GLIBCXX20_CONSTEXPR
+     115              :       bool
+     116            0 :       operator()(_Iterator1 __it1, _Iterator2 __it2) const
+     117            0 :       { return *__it1 == *__it2; }
+     118              :   };
+     119              : 
+     120              :   _GLIBCXX20_CONSTEXPR
+     121              :   inline _Iter_equal_to_iter
+     122           96 :   __iter_equal_to_iter()
+     123           96 :   { return _Iter_equal_to_iter(); }
+     124              : 
+     125              :   struct _Iter_equal_to_val
+     126              :   {
+     127              :     template<typename _Iterator, typename _Value>
+     128              :       _GLIBCXX20_CONSTEXPR
+     129              :       bool
+     130              :       operator()(_Iterator __it, _Value& __val) const
+     131              :       { return *__it == __val; }
+     132              :   };
+     133              : 
+     134              :   _GLIBCXX20_CONSTEXPR
+     135              :   inline _Iter_equal_to_val
+     136              :   __iter_equal_to_val()
+     137              :   { return _Iter_equal_to_val(); }
+     138              : 
+     139              :   _GLIBCXX20_CONSTEXPR
+     140              :   inline _Iter_equal_to_val
+     141              :   __iter_comp_val(_Iter_equal_to_iter)
+     142              :   { return _Iter_equal_to_val(); }
+     143              : 
+     144              :   template<typename _Compare>
+     145              :     struct _Iter_comp_iter
+     146              :     {
+     147              :       _Compare _M_comp;
+     148              : 
+     149              :       explicit _GLIBCXX14_CONSTEXPR
+     150          602 :       _Iter_comp_iter(_Compare __comp)
+     151          602 :         : _M_comp(_GLIBCXX_MOVE(__comp))
+     152          602 :       { }
+     153              : 
+     154              :       template<typename _Iterator1, typename _Iterator2>
+     155              :         _GLIBCXX14_CONSTEXPR
+     156              :         bool
+     157        40936 :         operator()(_Iterator1 __it1, _Iterator2 __it2)
+     158        40936 :         { return bool(_M_comp(*__it1, *__it2)); }
+     159              :     };
+     160              : 
+     161              :   template<typename _Compare>
+     162              :     _GLIBCXX14_CONSTEXPR
+     163              :     inline _Iter_comp_iter<_Compare>
+     164          602 :     __iter_comp_iter(_Compare __comp)
+     165          602 :     { return _Iter_comp_iter<_Compare>(_GLIBCXX_MOVE(__comp)); }
+     166              : 
+     167              :   template<typename _Compare>
+     168              :     struct _Iter_comp_val
+     169              :     {
+     170              :       _Compare _M_comp;
+     171              : 
+     172              :       _GLIBCXX20_CONSTEXPR
+     173              :       explicit
+     174              :       _Iter_comp_val(_Compare __comp)
+     175              :         : _M_comp(_GLIBCXX_MOVE(__comp))
+     176              :       { }
+     177              : 
+     178              :       _GLIBCXX20_CONSTEXPR
+     179              :       explicit
+     180              :       _Iter_comp_val(const _Iter_comp_iter<_Compare>& __comp)
+     181              :         : _M_comp(__comp._M_comp)
+     182              :       { }
+     183              : 
+     184              : #if __cplusplus >= 201103L
+     185              :       _GLIBCXX20_CONSTEXPR
+     186              :       explicit
+     187            0 :       _Iter_comp_val(_Iter_comp_iter<_Compare>&& __comp)
+     188            0 :         : _M_comp(std::move(__comp._M_comp))
+     189            0 :       { }
+     190              : #endif
+     191              : 
+     192              :       template<typename _Iterator, typename _Value>
+     193              :         _GLIBCXX20_CONSTEXPR
+     194              :         bool
+     195            0 :         operator()(_Iterator __it, _Value& __val)
+     196            0 :         { return bool(_M_comp(*__it, __val)); }
+     197              :     };
+     198              : 
+     199              :   template<typename _Compare>
+     200              :     _GLIBCXX20_CONSTEXPR
+     201              :     inline _Iter_comp_val<_Compare>
+     202              :     __iter_comp_val(_Compare __comp)
+     203              :     { return _Iter_comp_val<_Compare>(_GLIBCXX_MOVE(__comp)); }
+     204              : 
+     205              :   template<typename _Compare>
+     206              :     _GLIBCXX20_CONSTEXPR
+     207              :     inline _Iter_comp_val<_Compare>
+     208            0 :     __iter_comp_val(_Iter_comp_iter<_Compare> __comp)
+     209            0 :     { return _Iter_comp_val<_Compare>(_GLIBCXX_MOVE(__comp)); }
+     210              : 
+     211              :   template<typename _Compare>
+     212              :     struct _Val_comp_iter
+     213              :     {
+     214              :       _Compare _M_comp;
+     215              : 
+     216              :       _GLIBCXX20_CONSTEXPR
+     217              :       explicit
+     218              :       _Val_comp_iter(_Compare __comp)
+     219              :         : _M_comp(_GLIBCXX_MOVE(__comp))
+     220              :       { }
+     221              : 
+     222              :       _GLIBCXX20_CONSTEXPR
+     223              :       explicit
+     224              :       _Val_comp_iter(const _Iter_comp_iter<_Compare>& __comp)
+     225              :         : _M_comp(__comp._M_comp)
+     226              :       { }
+     227              : 
+     228              : #if __cplusplus >= 201103L
+     229              :       _GLIBCXX20_CONSTEXPR
+     230              :       explicit
+     231         9732 :       _Val_comp_iter(_Iter_comp_iter<_Compare>&& __comp)
+     232         9732 :         : _M_comp(std::move(__comp._M_comp))
+     233         9732 :       { }
+     234              : #endif
+     235              : 
+     236              :       template<typename _Value, typename _Iterator>
+     237              :         _GLIBCXX20_CONSTEXPR
+     238              :         bool
+     239        31568 :         operator()(_Value& __val, _Iterator __it)
+     240        31568 :         { return bool(_M_comp(__val, *__it)); }
+     241              :     };
+     242              : 
+     243              :   template<typename _Compare>
+     244              :     _GLIBCXX20_CONSTEXPR
+     245              :     inline _Val_comp_iter<_Compare>
+     246              :     __val_comp_iter(_Compare __comp)
+     247              :     { return _Val_comp_iter<_Compare>(_GLIBCXX_MOVE(__comp)); }
+     248              : 
+     249              :   template<typename _Compare>
+     250              :     _GLIBCXX20_CONSTEXPR
+     251              :     inline _Val_comp_iter<_Compare>
+     252         9732 :     __val_comp_iter(_Iter_comp_iter<_Compare> __comp)
+     253         9732 :     { return _Val_comp_iter<_Compare>(_GLIBCXX_MOVE(__comp)); }
+     254              : 
+     255              :   template<typename _Value>
+     256              :     struct _Iter_equals_val
+     257              :     {
+     258              :       _Value& _M_value;
+     259              : 
+     260              :       _GLIBCXX20_CONSTEXPR
+     261              :       explicit
+     262      9580198 :       _Iter_equals_val(_Value& __value)
+     263      9580198 :         : _M_value(__value)
+     264      9580198 :       { }
+     265              : 
+     266              :       template<typename _Iterator>
+     267              :         _GLIBCXX20_CONSTEXPR
+     268              :         bool
+     269    847577424 :         operator()(_Iterator __it)
+     270    847577424 :         { return *__it == _M_value; }
+     271              :     };
+     272              : 
+     273              :   template<typename _Value>
+     274              :     _GLIBCXX20_CONSTEXPR
+     275              :     inline _Iter_equals_val<_Value>
+     276      9580198 :     __iter_equals_val(_Value& __val)
+     277      9580198 :     { return _Iter_equals_val<_Value>(__val); }
+     278              : 
+     279              :   template<typename _Iterator1>
+     280              :     struct _Iter_equals_iter
+     281              :     {
+     282              :       _Iterator1 _M_it1;
+     283              : 
+     284              :       _GLIBCXX20_CONSTEXPR
+     285              :       explicit
+     286              :       _Iter_equals_iter(_Iterator1 __it1)
+     287              :         : _M_it1(__it1)
+     288              :       { }
+     289              : 
+     290              :       template<typename _Iterator2>
+     291              :         _GLIBCXX20_CONSTEXPR
+     292              :         bool
+     293              :         operator()(_Iterator2 __it2)
+     294              :         { return *__it2 == *_M_it1; }
+     295              :     };
+     296              : 
+     297              :   template<typename _Iterator>
+     298              :     _GLIBCXX20_CONSTEXPR
+     299              :     inline _Iter_equals_iter<_Iterator>
+     300              :     __iter_comp_iter(_Iter_equal_to_iter, _Iterator __it)
+     301              :     { return _Iter_equals_iter<_Iterator>(__it); }
+     302              : 
+     303              :   template<typename _Predicate>
+     304              :     struct _Iter_pred
+     305              :     {
+     306              :       _Predicate _M_pred;
+     307              : 
+     308              :       _GLIBCXX20_CONSTEXPR
+     309              :       explicit
+     310          378 :       _Iter_pred(_Predicate __pred)
+     311          378 :         : _M_pred(_GLIBCXX_MOVE(__pred))
+     312          378 :       { }
+     313              : 
+     314              :       template<typename _Iterator>
+     315              :         _GLIBCXX20_CONSTEXPR
+     316              :         bool
+     317         4850 :         operator()(_Iterator __it)
+     318         4850 :         { return bool(_M_pred(*__it)); }
+     319              :     };
+     320              : 
+     321              :   template<typename _Predicate>
+     322              :     _GLIBCXX20_CONSTEXPR
+     323              :     inline _Iter_pred<_Predicate>
+     324          378 :     __pred_iter(_Predicate __pred)
+     325          378 :     { return _Iter_pred<_Predicate>(_GLIBCXX_MOVE(__pred)); }
+     326              : 
+     327              :   template<typename _Compare, typename _Value>
+     328              :     struct _Iter_comp_to_val
+     329              :     {
+     330              :       _Compare _M_comp;
+     331              :       _Value& _M_value;
+     332              : 
+     333              :       _GLIBCXX20_CONSTEXPR
+     334              :       _Iter_comp_to_val(_Compare __comp, _Value& __value)
+     335              :         : _M_comp(_GLIBCXX_MOVE(__comp)), _M_value(__value)
+     336              :       { }
+     337              : 
+     338              :       template<typename _Iterator>
+     339              :         _GLIBCXX20_CONSTEXPR
+     340              :         bool
+     341              :         operator()(_Iterator __it)
+     342              :         { return bool(_M_comp(*__it, _M_value)); }
+     343              :     };
+     344              : 
+     345              :   template<typename _Compare, typename _Value>
+     346              :     _Iter_comp_to_val<_Compare, _Value>
+     347              :     _GLIBCXX20_CONSTEXPR
+     348              :     __iter_comp_val(_Compare __comp, _Value &__val)
+     349              :     {
+     350              :       return _Iter_comp_to_val<_Compare, _Value>(_GLIBCXX_MOVE(__comp), __val);
+     351              :     }
+     352              : 
+     353              :   template<typename _Compare, typename _Iterator1>
+     354              :     struct _Iter_comp_to_iter
+     355              :     {
+     356              :       _Compare _M_comp;
+     357              :       _Iterator1 _M_it1;
+     358              : 
+     359              :       _GLIBCXX20_CONSTEXPR
+     360              :       _Iter_comp_to_iter(_Compare __comp, _Iterator1 __it1)
+     361              :         : _M_comp(_GLIBCXX_MOVE(__comp)), _M_it1(__it1)
+     362              :       { }
+     363              : 
+     364              :       template<typename _Iterator2>
+     365              :         _GLIBCXX20_CONSTEXPR
+     366              :         bool
+     367              :         operator()(_Iterator2 __it2)
+     368              :         { return bool(_M_comp(*__it2, *_M_it1)); }
+     369              :     };
+     370              : 
+     371              :   template<typename _Compare, typename _Iterator>
+     372              :     _GLIBCXX20_CONSTEXPR
+     373              :     inline _Iter_comp_to_iter<_Compare, _Iterator>
+     374              :     __iter_comp_iter(_Iter_comp_iter<_Compare> __comp, _Iterator __it)
+     375              :     {
+     376              :       return _Iter_comp_to_iter<_Compare, _Iterator>(
+     377              :           _GLIBCXX_MOVE(__comp._M_comp), __it);
+     378              :     }
+     379              : 
+     380              :   template<typename _Predicate>
+     381              :     struct _Iter_negate
+     382              :     {
+     383              :       _Predicate _M_pred;
+     384              : 
+     385              :       _GLIBCXX20_CONSTEXPR
+     386              :       explicit
+     387          164 :       _Iter_negate(_Predicate __pred)
+     388          164 :         : _M_pred(_GLIBCXX_MOVE(__pred))
+     389          164 :       { }
+     390              : 
+     391              :       template<typename _Iterator>
+     392              :         _GLIBCXX20_CONSTEXPR
+     393              :         bool
+     394          224 :         operator()(_Iterator __it)
+     395          224 :         { return !bool(_M_pred(*__it)); }
+     396              :     };
+     397              : 
+     398              :   template<typename _Predicate>
+     399              :     _GLIBCXX20_CONSTEXPR
+     400              :     inline _Iter_negate<_Predicate>
+     401          164 :     __negate(_Iter_pred<_Predicate> __pred)
+     402          164 :     { return _Iter_negate<_Predicate>(_GLIBCXX_MOVE(__pred._M_pred)); }
+     403              : 
+     404              : } // namespace __ops
+     405              : } // namespace __gnu_cxx
+     406              : 
+     407              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/ptr_traits.h.func-c.html b/html/usr/include/c++/13/bits/ptr_traits.h.func-c.html new file mode 100644 index 0000000..c5f7ba1 --- /dev/null +++ b/html/usr/include/c++/13/bits/ptr_traits.h.func-c.html @@ -0,0 +1,159 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/ptr_traits.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - ptr_traits.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %44
Test Date:2024-04-30 13:17:26Functions:90.0 %109
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt19__ptr_traits_ptr_toIPPNSt8__detail15_Hash_node_baseES2_Lb0EE10pointer_toERS2_376686
_ZNSt19__ptr_traits_ptr_toIPNSt8__detail10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEESD_Lb0EE10pointer_toERSD_58918
_ZNSt19__ptr_traits_ptr_toIPNSt8__detail10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEES8_Lb0EE10pointer_toERS8_61094
_ZNSt19__ptr_traits_ptr_toIPPNSt8__detail15_Hash_node_baseES2_Lb0EE10pointer_toERS2_116626
_ZNSt19__ptr_traits_ptr_toIPNSt8__detail10_Hash_nodeISt4pairIKidELb0EEES5_Lb0EE10pointer_toERS5_140048
_ZSt12__to_addressIPNSt8__detail15_Hash_node_baseEEPT_S4_376806
_ZSt12__to_addressISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEPT_SC_0
_ZSt12__to_addressISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEPT_SH_20
_ZSt12__to_addressINSt8__detail10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEPT_SF_58918
_ZSt12__to_addressINSt8__detail10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEPT_SA_61192
_ZSt12__to_addressIPNSt8__detail15_Hash_node_baseEEPT_S4_116628
_ZSt12__to_addressINSt8__detail10_Hash_nodeISt4pairIKidELb0EEEEPT_S7_140048
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/ptr_traits.h.func.html b/html/usr/include/c++/13/bits/ptr_traits.h.func.html new file mode 100644 index 0000000..df19a29 --- /dev/null +++ b/html/usr/include/c++/13/bits/ptr_traits.h.func.html @@ -0,0 +1,159 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/ptr_traits.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - ptr_traits.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %44
Test Date:2024-04-30 13:17:26Functions:90.0 %109
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt19__ptr_traits_ptr_toIPPNSt8__detail15_Hash_node_baseES2_Lb0EE10pointer_toERS2_376686
_ZNSt19__ptr_traits_ptr_toIPNSt8__detail10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEES8_Lb0EE10pointer_toERS8_61094
_ZNSt19__ptr_traits_ptr_toIPNSt8__detail10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEESD_Lb0EE10pointer_toERSD_58918
_ZNSt19__ptr_traits_ptr_toIPNSt8__detail10_Hash_nodeISt4pairIKidELb0EEES5_Lb0EE10pointer_toERS5_140048
_ZNSt19__ptr_traits_ptr_toIPPNSt8__detail15_Hash_node_baseES2_Lb0EE10pointer_toERS2_116626
_ZSt12__to_addressIPNSt8__detail15_Hash_node_baseEEPT_S4_376806
_ZSt12__to_addressINSt8__detail10_Hash_nodeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1EEEEPT_SA_61192
_ZSt12__to_addressINSt8__detail10_Hash_nodeISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS2_IS3_dEEEELb0EEEEPT_SF_58918
_ZSt12__to_addressINSt8__detail10_Hash_nodeISt4pairIKidELb0EEEEPT_S7_140048
_ZSt12__to_addressIPNSt8__detail15_Hash_node_baseEEPT_S4_116628
_ZSt12__to_addressISt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEPT_SH_20
_ZSt12__to_addressISt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEEPT_SC_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/ptr_traits.h.gcov.html b/html/usr/include/c++/13/bits/ptr_traits.h.gcov.html new file mode 100644 index 0000000..b8c7dbf --- /dev/null +++ b/html/usr/include/c++/13/bits/ptr_traits.h.gcov.html @@ -0,0 +1,347 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/ptr_traits.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - ptr_traits.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %44
Test Date:2024-04-30 13:17:26Functions:90.0 %109
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Pointer Traits -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2011-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/ptr_traits.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{memory}
+      28              :  */
+      29              : 
+      30              : #ifndef _PTR_TRAITS_H
+      31              : #define _PTR_TRAITS_H 1
+      32              : 
+      33              : #if __cplusplus >= 201103L
+      34              : 
+      35              : #include <bits/move.h>
+      36              : 
+      37              : /* Duplicate definition with unique_ptr.h.  */
+      38              : #if __cplusplus > 202002L && defined(__cpp_constexpr_dynamic_alloc)
+      39              : # define __cpp_lib_constexpr_memory 202202L
+      40              : #elif __cplusplus > 201703L
+      41              : # define __cpp_lib_constexpr_memory 201811L
+      42              : #endif
+      43              : 
+      44              : #if __cplusplus > 201703L
+      45              : #include <concepts>
+      46              : namespace __gnu_debug { struct _Safe_iterator_base; }
+      47              : #endif
+      48              : 
+      49              : namespace std _GLIBCXX_VISIBILITY(default)
+      50              : {
+      51              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      52              : 
+      53              :   /// @cond undocumented
+      54              : 
+      55              :   class __undefined;
+      56              : 
+      57              :   // For a specialization `SomeTemplate<T, Types...>` the member `type` is T,
+      58              :   // otherwise `type` is `__undefined`.
+      59              :   template<typename _Tp>
+      60              :     struct __get_first_arg
+      61              :     { using type = __undefined; };
+      62              : 
+      63              :   template<template<typename, typename...> class _SomeTemplate, typename _Tp,
+      64              :            typename... _Types>
+      65              :     struct __get_first_arg<_SomeTemplate<_Tp, _Types...>>
+      66              :     { using type = _Tp; };
+      67              : 
+      68              :   // For a specialization `SomeTemplate<T, Args...>` and a type `U` the member
+      69              :   // `type` is `SomeTemplate<U, Args...>`, otherwise there is no member `type`.
+      70              :   template<typename _Tp, typename _Up>
+      71              :     struct __replace_first_arg
+      72              :     { };
+      73              : 
+      74              :   template<template<typename, typename...> class _SomeTemplate, typename _Up,
+      75              :            typename _Tp, typename... _Types>
+      76              :     struct __replace_first_arg<_SomeTemplate<_Tp, _Types...>, _Up>
+      77              :     { using type = _SomeTemplate<_Up, _Types...>; };
+      78              : 
+      79              :   // Detect the element type of a pointer-like type.
+      80              :   template<typename _Ptr, typename = void>
+      81              :     struct __ptr_traits_elem : __get_first_arg<_Ptr>
+      82              :     { };
+      83              : 
+      84              :   // Use _Ptr::element_type if is a valid type.
+      85              : #if __cpp_concepts
+      86              :   template<typename _Ptr> requires requires { typename _Ptr::element_type; }
+      87              :     struct __ptr_traits_elem<_Ptr, void>
+      88              :     { using type = typename _Ptr::element_type; };
+      89              : #else
+      90              :   template<typename _Ptr>
+      91              :     struct __ptr_traits_elem<_Ptr, __void_t<typename _Ptr::element_type>>
+      92              :     { using type = typename _Ptr::element_type; };
+      93              : #endif
+      94              : 
+      95              :   template<typename _Ptr>
+      96              :     using __ptr_traits_elem_t = typename __ptr_traits_elem<_Ptr>::type;
+      97              : 
+      98              :   /// @endcond
+      99              : 
+     100              :   // Define pointer_traits<P>::pointer_to.
+     101              :   template<typename _Ptr, typename _Elt, bool = is_void<_Elt>::value>
+     102              :     struct __ptr_traits_ptr_to
+     103              :     {
+     104              :       using pointer = _Ptr;
+     105              :       using element_type = _Elt;
+     106              : 
+     107              :       /**
+     108              :        *  @brief  Obtain a pointer to an object
+     109              :        *  @param  __r  A reference to an object of type `element_type`
+     110              :        *  @return `pointer::pointer_to(__r)`
+     111              :        *  @pre `pointer::pointer_to(__r)` is a valid expression.
+     112              :       */
+     113              :       static pointer
+     114              :       pointer_to(element_type& __r)
+     115              : #if __cpp_lib_concepts
+     116              :       requires requires {
+     117              :         { pointer::pointer_to(__r) } -> convertible_to<pointer>;
+     118              :       }
+     119              : #endif
+     120              :       { return pointer::pointer_to(__r); }
+     121              :     };
+     122              : 
+     123              :   // Do not define pointer_traits<P>::pointer_to if element type is void.
+     124              :   template<typename _Ptr, typename _Elt>
+     125              :     struct __ptr_traits_ptr_to<_Ptr, _Elt, true>
+     126              :     { };
+     127              : 
+     128              :   // Partial specialization defining pointer_traits<T*>::pointer_to(T&).
+     129              :   template<typename _Tp>
+     130              :     struct __ptr_traits_ptr_to<_Tp*, _Tp, false>
+     131              :     {
+     132              :       using pointer = _Tp*;
+     133              :       using element_type = _Tp;
+     134              : 
+     135              :       /**
+     136              :        *  @brief  Obtain a pointer to an object
+     137              :        *  @param  __r  A reference to an object of type `element_type`
+     138              :        *  @return `addressof(__r)`
+     139              :       */
+     140              :       static _GLIBCXX20_CONSTEXPR pointer
+     141       376686 :       pointer_to(element_type& __r) noexcept
+     142       376686 :       { return std::addressof(__r); }
+     143              :     };
+     144              : 
+     145              :   template<typename _Ptr, typename _Elt>
+     146              :     struct __ptr_traits_impl : __ptr_traits_ptr_to<_Ptr, _Elt>
+     147              :     {
+     148              :     private:
+     149              :       template<typename _Tp>
+     150              :         using __diff_t = typename _Tp::difference_type;
+     151              : 
+     152              :       template<typename _Tp, typename _Up>
+     153              :         using __rebind = __type_identity<typename _Tp::template rebind<_Up>>;
+     154              : 
+     155              :     public:
+     156              :       /// The pointer type.
+     157              :       using pointer = _Ptr;
+     158              : 
+     159              :       /// The type pointed to.
+     160              :       using element_type = _Elt;
+     161              : 
+     162              :       /// The type used to represent the difference between two pointers.
+     163              :       using difference_type = __detected_or_t<ptrdiff_t, __diff_t, _Ptr>;
+     164              : 
+     165              :       /// A pointer to a different type.
+     166              :       template<typename _Up>
+     167              :         using rebind = typename __detected_or_t<__replace_first_arg<_Ptr, _Up>,
+     168              :                                                 __rebind, _Ptr, _Up>::type;
+     169              :     };
+     170              : 
+     171              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     172              :   // 3545. std::pointer_traits should be SFINAE-friendly
+     173              :   template<typename _Ptr>
+     174              :     struct __ptr_traits_impl<_Ptr, __undefined>
+     175              :     { };
+     176              : 
+     177              :   /**
+     178              :    * @brief  Uniform interface to all pointer-like types
+     179              :    * @headerfile memory
+     180              :    * @ingroup pointer_abstractions
+     181              :    * @since C++11
+     182              :   */
+     183              :   template<typename _Ptr>
+     184              :     struct pointer_traits : __ptr_traits_impl<_Ptr, __ptr_traits_elem_t<_Ptr>>
+     185              :     { };
+     186              : 
+     187              :   /**
+     188              :    * @brief  Partial specialization for built-in pointers.
+     189              :    * @headerfile memory
+     190              :    * @ingroup pointer_abstractions
+     191              :    * @since C++11
+     192              :   */
+     193              :   template<typename _Tp>
+     194              :     struct pointer_traits<_Tp*> : __ptr_traits_ptr_to<_Tp*, _Tp>
+     195              :     {
+     196              :       /// The pointer type
+     197              :       typedef _Tp* pointer;
+     198              :       /// The type pointed to
+     199              :       typedef _Tp  element_type;
+     200              :       /// Type used to represent the difference between two pointers
+     201              :       typedef ptrdiff_t difference_type;
+     202              :       /// A pointer to a different type.
+     203              :       template<typename _Up> using rebind = _Up*;
+     204              :     };
+     205              : 
+     206              :   /// Convenience alias for rebinding pointers.
+     207              :   template<typename _Ptr, typename _Tp>
+     208              :     using __ptr_rebind = typename pointer_traits<_Ptr>::template rebind<_Tp>;
+     209              : 
+     210              :   template<typename _Tp>
+     211              :     constexpr _Tp*
+     212       376806 :     __to_address(_Tp* __ptr) noexcept
+     213              :     {
+     214              :       static_assert(!std::is_function<_Tp>::value, "not a function pointer");
+     215       376806 :       return __ptr;
+     216              :     }
+     217              : 
+     218              : #if __cplusplus <= 201703L
+     219              :   template<typename _Ptr>
+     220              :     constexpr typename std::pointer_traits<_Ptr>::element_type*
+     221              :     __to_address(const _Ptr& __ptr)
+     222              :     { return std::__to_address(__ptr.operator->()); }
+     223              : #else
+     224              :   template<typename _Ptr>
+     225              :     constexpr auto
+     226              :     __to_address(const _Ptr& __ptr) noexcept
+     227              :     -> decltype(std::pointer_traits<_Ptr>::to_address(__ptr))
+     228              :     { return std::pointer_traits<_Ptr>::to_address(__ptr); }
+     229              : 
+     230              :   template<typename _Ptr, typename... _None>
+     231              :     constexpr auto
+     232              :     __to_address(const _Ptr& __ptr, _None...) noexcept
+     233              :     {
+     234              :       if constexpr (is_base_of_v<__gnu_debug::_Safe_iterator_base, _Ptr>)
+     235              :         return std::__to_address(__ptr.base().operator->());
+     236              :       else
+     237              :         return std::__to_address(__ptr.operator->());
+     238              :     }
+     239              : 
+     240              : #define __cpp_lib_to_address 201711L
+     241              : 
+     242              :   /**
+     243              :    * @brief Obtain address referenced by a pointer to an object
+     244              :    * @param __ptr A pointer to an object
+     245              :    * @return @c __ptr
+     246              :    * @ingroup pointer_abstractions
+     247              :   */
+     248              :   template<typename _Tp>
+     249              :     constexpr _Tp*
+     250              :     to_address(_Tp* __ptr) noexcept
+     251              :     { return std::__to_address(__ptr); }
+     252              : 
+     253              :   /**
+     254              :    * @brief Obtain address referenced by a pointer to an object
+     255              :    * @param __ptr A pointer to an object
+     256              :    * @return @c pointer_traits<_Ptr>::to_address(__ptr) if that expression is
+     257              :              well-formed, otherwise @c to_address(__ptr.operator->())
+     258              :    * @ingroup pointer_abstractions
+     259              :   */
+     260              :   template<typename _Ptr>
+     261              :     constexpr auto
+     262              :     to_address(const _Ptr& __ptr) noexcept
+     263              :     { return std::__to_address(__ptr); }
+     264              : #endif // C++2a
+     265              : 
+     266              : _GLIBCXX_END_NAMESPACE_VERSION
+     267              : } // namespace std
+     268              : 
+     269              : #endif
+     270              : 
+     271              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/random.h.func-c.html b/html/usr/include/c++/13/bits/random.h.func-c.html new file mode 100644 index 0000000..a9d1b7e --- /dev/null +++ b/html/usr/include/c++/13/bits/random.h.func-c.html @@ -0,0 +1,152 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/random.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - random.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1515
Test Date:2024-04-30 13:17:26Functions:100.0 %99
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt13random_deviceclEv2
_ZNSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEC2Ev250
_ZNSt13random_deviceC2Ev252
_ZNSt13random_deviceD2Ev252
_ZNSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEC2Em542
_ZNSt8__detail4_ModImLm624ELm1ELm0ELb1ELb1EE6__calcEm675874
_ZNSt8__detail4_ModImLm624ELm1ELm0ELb1ELb1EE6__calcEm337666
_ZNSt8__detail4_ModImLm4294967296ELm1ELm0ELb1ELb1EE6__calcEm338208
_ZNSt8__detail5__modImLm624ELm1ELm0EEET_S1_675874
_ZNSt8__detail5__modImLm624ELm1ELm0EEET_S1_337666
_ZNSt8__detail5__modImLm4294967296ELm1ELm0EEET_S1_338208
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/random.h.func.html b/html/usr/include/c++/13/bits/random.h.func.html new file mode 100644 index 0000000..48ebe71 --- /dev/null +++ b/html/usr/include/c++/13/bits/random.h.func.html @@ -0,0 +1,152 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/random.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - random.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1515
Test Date:2024-04-30 13:17:26Functions:100.0 %99
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt13random_deviceC2Ev252
_ZNSt13random_deviceD2Ev252
_ZNSt13random_deviceclEv2
_ZNSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEC2Em542
_ZNSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEC2Ev250
_ZNSt8__detail4_ModImLm624ELm1ELm0ELb1ELb1EE6__calcEm675874
_ZNSt8__detail4_ModImLm4294967296ELm1ELm0ELb1ELb1EE6__calcEm338208
_ZNSt8__detail4_ModImLm624ELm1ELm0ELb1ELb1EE6__calcEm337666
_ZNSt8__detail5__modImLm624ELm1ELm0EEET_S1_675874
_ZNSt8__detail5__modImLm4294967296ELm1ELm0EEET_S1_338208
_ZNSt8__detail5__modImLm624ELm1ELm0EEET_S1_337666
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/random.h.gcov.html b/html/usr/include/c++/13/bits/random.h.gcov.html new file mode 100644 index 0000000..85012b1 --- /dev/null +++ b/html/usr/include/c++/13/bits/random.h.gcov.html @@ -0,0 +1,6380 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/random.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - random.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1515
Test Date:2024-04-30 13:17:26Functions:100.0 %99
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // random number generation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2009-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /**
+      26              :  * @file bits/random.h
+      27              :  *  This is an internal header file, included by other library headers.
+      28              :  *  Do not attempt to use it directly. @headername{random}
+      29              :  */
+      30              : 
+      31              : #ifndef _RANDOM_H
+      32              : #define _RANDOM_H 1
+      33              : 
+      34              : #include <vector>
+      35              : #include <bits/uniform_int_dist.h>
+      36              : 
+      37              : namespace std _GLIBCXX_VISIBILITY(default)
+      38              : {
+      39              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      40              : 
+      41              :   // [26.4] Random number generation
+      42              : 
+      43              :   /**
+      44              :    * @defgroup random Random Number Generation
+      45              :    * @ingroup numerics
+      46              :    *
+      47              :    * A facility for generating random numbers on selected distributions.
+      48              :    * @{
+      49              :    */
+      50              : 
+      51              :   // std::uniform_random_bit_generator is defined in <bits/uniform_int_dist.h>
+      52              : 
+      53              :   /**
+      54              :    * @brief A function template for converting the output of a (integral)
+      55              :    * uniform random number generator to a floatng point result in the range
+      56              :    * [0-1).
+      57              :    */
+      58              :   template<typename _RealType, size_t __bits,
+      59              :            typename _UniformRandomNumberGenerator>
+      60              :     _RealType
+      61              :     generate_canonical(_UniformRandomNumberGenerator& __g);
+      62              : 
+      63              :   /// @cond undocumented
+      64              :   // Implementation-space details.
+      65              :   namespace __detail
+      66              :   {
+      67              :     template<typename _UIntType, size_t __w,
+      68              :              bool = __w < static_cast<size_t>
+      69              :                           (std::numeric_limits<_UIntType>::digits)>
+      70              :       struct _Shift
+      71              :       { static constexpr _UIntType __value = 0; };
+      72              : 
+      73              :     template<typename _UIntType, size_t __w>
+      74              :       struct _Shift<_UIntType, __w, true>
+      75              :       { static constexpr _UIntType __value = _UIntType(1) << __w; };
+      76              : 
+      77              :     template<int __s,
+      78              :              int __which = ((__s <= __CHAR_BIT__ * sizeof (int))
+      79              :                             + (__s <= __CHAR_BIT__ * sizeof (long))
+      80              :                             + (__s <= __CHAR_BIT__ * sizeof (long long))
+      81              :                             /* assume long long no bigger than __int128 */
+      82              :                             + (__s <= 128))>
+      83              :       struct _Select_uint_least_t
+      84              :       {
+      85              :         static_assert(__which < 0, /* needs to be dependent */
+      86              :                       "sorry, would be too much trouble for a slow result");
+      87              :       };
+      88              : 
+      89              :     template<int __s>
+      90              :       struct _Select_uint_least_t<__s, 4>
+      91              :       { using type = unsigned int; };
+      92              : 
+      93              :     template<int __s>
+      94              :       struct _Select_uint_least_t<__s, 3>
+      95              :       { using type = unsigned long; };
+      96              : 
+      97              :     template<int __s>
+      98              :       struct _Select_uint_least_t<__s, 2>
+      99              :       { using type = unsigned long long; };
+     100              : 
+     101              : #if __SIZEOF_INT128__ > __SIZEOF_LONG_LONG__
+     102              :     template<int __s>
+     103              :       struct _Select_uint_least_t<__s, 1>
+     104              :       { __extension__ using type = unsigned __int128; };
+     105              : #endif
+     106              : 
+     107              :     // Assume a != 0, a < m, c < m, x < m.
+     108              :     template<typename _Tp, _Tp __m, _Tp __a, _Tp __c,
+     109              :              bool __big_enough = (!(__m & (__m - 1))
+     110              :                                   || (_Tp(-1) - __c) / __a >= __m - 1),
+     111              :              bool __schrage_ok = __m % __a < __m / __a>
+     112              :       struct _Mod
+     113              :       {
+     114              :         static _Tp
+     115              :         __calc(_Tp __x)
+     116              :         {
+     117              :           using _Tp2
+     118              :             = typename _Select_uint_least_t<std::__lg(__a)
+     119              :                                             + std::__lg(__m) + 2>::type;
+     120              :           return static_cast<_Tp>((_Tp2(__a) * __x + __c) % __m);
+     121              :         }
+     122              :       };
+     123              : 
+     124              :     // Schrage.
+     125              :     template<typename _Tp, _Tp __m, _Tp __a, _Tp __c>
+     126              :       struct _Mod<_Tp, __m, __a, __c, false, true>
+     127              :       {
+     128              :         static _Tp
+     129              :         __calc(_Tp __x);
+     130              :       };
+     131              : 
+     132              :     // Special cases:
+     133              :     // - for m == 2^n or m == 0, unsigned integer overflow is safe.
+     134              :     // - a * (m - 1) + c fits in _Tp, there is no overflow.
+     135              :     template<typename _Tp, _Tp __m, _Tp __a, _Tp __c, bool __s>
+     136              :       struct _Mod<_Tp, __m, __a, __c, true, __s>
+     137              :       {
+     138              :         static _Tp
+     139       675874 :         __calc(_Tp __x)
+     140              :         {
+     141       675874 :           _Tp __res = __a * __x + __c;
+     142              :           if (__m)
+     143       675874 :             __res %= __m;
+     144       675874 :           return __res;
+     145              :         }
+     146              :       };
+     147              : 
+     148              :     template<typename _Tp, _Tp __m, _Tp __a = 1, _Tp __c = 0>
+     149              :       inline _Tp
+     150       675874 :       __mod(_Tp __x)
+     151              :       {
+     152              :         if _GLIBCXX17_CONSTEXPR (__a == 0)
+     153              :           return __c;
+     154              :         else
+     155              :           {
+     156              :             // _Mod must not be instantiated with a == 0
+     157       675874 :             constexpr _Tp __a1 = __a ? __a : 1;
+     158       675874 :             return _Mod<_Tp, __m, __a1, __c>::__calc(__x);
+     159              :           }
+     160              :       }
+     161              : 
+     162              :     /*
+     163              :      * An adaptor class for converting the output of any Generator into
+     164              :      * the input for a specific Distribution.
+     165              :      */
+     166              :     template<typename _Engine, typename _DInputType>
+     167              :       struct _Adaptor
+     168              :       {
+     169              :         static_assert(std::is_floating_point<_DInputType>::value,
+     170              :                       "template argument must be a floating point type");
+     171              : 
+     172              :       public:
+     173              :         _Adaptor(_Engine& __g)
+     174              :         : _M_g(__g) { }
+     175              : 
+     176              :         _DInputType
+     177              :         min() const
+     178              :         { return _DInputType(0); }
+     179              : 
+     180              :         _DInputType
+     181              :         max() const
+     182              :         { return _DInputType(1); }
+     183              : 
+     184              :         /*
+     185              :          * Converts a value generated by the adapted random number generator
+     186              :          * into a value in the input domain for the dependent random number
+     187              :          * distribution.
+     188              :          */
+     189              :         _DInputType
+     190              :         operator()()
+     191              :         {
+     192              :           return std::generate_canonical<_DInputType,
+     193              :                                     std::numeric_limits<_DInputType>::digits,
+     194              :                                     _Engine>(_M_g);
+     195              :         }
+     196              : 
+     197              :       private:
+     198              :         _Engine& _M_g;
+     199              :       };
+     200              : 
+     201              :     // Detect whether a template argument _Sseq is a valid seed sequence for
+     202              :     // a random number engine _Engine with result type _Res.
+     203              :     // Used to constrain _Engine::_Engine(_Sseq&) and _Engine::seed(_Sseq&)
+     204              :     // as required by [rand.eng.general].
+     205              : 
+     206              :     template<typename _Sseq>
+     207              :       using __seed_seq_generate_t = decltype(
+     208              :           std::declval<_Sseq&>().generate(std::declval<uint_least32_t*>(),
+     209              :                                           std::declval<uint_least32_t*>()));
+     210              : 
+     211              :     template<typename _Sseq, typename _Engine, typename _Res,
+     212              :              typename _GenerateCheck = __seed_seq_generate_t<_Sseq>>
+     213              :       using _If_seed_seq_for = _Require<
+     214              :         __not_<is_same<__remove_cvref_t<_Sseq>, _Engine>>,
+     215              :         is_unsigned<typename _Sseq::result_type>,
+     216              :         __not_<is_convertible<_Sseq, _Res>>
+     217              :       >;
+     218              : 
+     219              :   } // namespace __detail
+     220              :   /// @endcond
+     221              : 
+     222              :   /**
+     223              :    * @addtogroup random_generators Random Number Generators
+     224              :    * @ingroup random
+     225              :    *
+     226              :    * These classes define objects which provide random or pseudorandom
+     227              :    * numbers, either from a discrete or a continuous interval.  The
+     228              :    * random number generator supplied as a part of this library are
+     229              :    * all uniform random number generators which provide a sequence of
+     230              :    * random number uniformly distributed over their range.
+     231              :    *
+     232              :    * A number generator is a function object with an operator() that
+     233              :    * takes zero arguments and returns a number.
+     234              :    *
+     235              :    * A compliant random number generator must satisfy the following
+     236              :    * requirements.  <table border=1 cellpadding=10 cellspacing=0>
+     237              :    * <caption align=top>Random Number Generator Requirements</caption>
+     238              :    * <tr><td>To be documented.</td></tr> </table>
+     239              :    *
+     240              :    * @{
+     241              :    */
+     242              : 
+     243              :   /**
+     244              :    * @brief A model of a linear congruential random number generator.
+     245              :    *
+     246              :    * A random number generator that produces pseudorandom numbers via
+     247              :    * linear function:
+     248              :    * @f[
+     249              :    *     x_{i+1}\leftarrow(ax_{i} + c) \bmod m 
+     250              :    * @f]
+     251              :    *
+     252              :    * The template parameter @p _UIntType must be an unsigned integral type
+     253              :    * large enough to store values up to (__m-1). If the template parameter
+     254              :    * @p __m is 0, the modulus @p __m used is
+     255              :    * std::numeric_limits<_UIntType>::max() plus 1. Otherwise, the template
+     256              :    * parameters @p __a and @p __c must be less than @p __m.
+     257              :    *
+     258              :    * The size of the state is @f$1@f$.
+     259              :    *
+     260              :    * @headerfile random
+     261              :    * @since C++11
+     262              :    */
+     263              :   template<typename _UIntType, _UIntType __a, _UIntType __c, _UIntType __m>
+     264              :     class linear_congruential_engine
+     265              :     {
+     266              :       static_assert(std::is_unsigned<_UIntType>::value,
+     267              :                     "result_type must be an unsigned integral type");
+     268              :       static_assert(__m == 0u || (__a < __m && __c < __m),
+     269              :                     "template argument substituting __m out of bounds");
+     270              : 
+     271              :       template<typename _Sseq>
+     272              :         using _If_seed_seq
+     273              :           = __detail::_If_seed_seq_for<_Sseq, linear_congruential_engine,
+     274              :                                        _UIntType>;
+     275              : 
+     276              :     public:
+     277              :       /** The type of the generated random value. */
+     278              :       typedef _UIntType result_type;
+     279              : 
+     280              :       /** The multiplier. */
+     281              :       static constexpr result_type multiplier   = __a;
+     282              :       /** An increment. */
+     283              :       static constexpr result_type increment    = __c;
+     284              :       /** The modulus. */
+     285              :       static constexpr result_type modulus      = __m;
+     286              :       static constexpr result_type default_seed = 1u;
+     287              : 
+     288              :       /**
+     289              :        * @brief Constructs a %linear_congruential_engine random number
+     290              :        *        generator engine with seed 1.
+     291              :        */
+     292              :       linear_congruential_engine() : linear_congruential_engine(default_seed)
+     293              :       { }
+     294              : 
+     295              :       /**
+     296              :        * @brief Constructs a %linear_congruential_engine random number
+     297              :        *        generator engine with seed @p __s.  The default seed value
+     298              :        *        is 1.
+     299              :        *
+     300              :        * @param __s The initial seed value.
+     301              :        */
+     302              :       explicit
+     303              :       linear_congruential_engine(result_type __s)
+     304              :       { seed(__s); }
+     305              : 
+     306              :       /**
+     307              :        * @brief Constructs a %linear_congruential_engine random number
+     308              :        *        generator engine seeded from the seed sequence @p __q.
+     309              :        *
+     310              :        * @param __q the seed sequence.
+     311              :        */
+     312              :       template<typename _Sseq, typename = _If_seed_seq<_Sseq>>
+     313              :         explicit
+     314              :         linear_congruential_engine(_Sseq& __q)
+     315              :         { seed(__q); }
+     316              : 
+     317              :       /**
+     318              :        * @brief Reseeds the %linear_congruential_engine random number generator
+     319              :        *        engine sequence to the seed @p __s.
+     320              :        *
+     321              :        * @param __s The new seed.
+     322              :        */
+     323              :       void
+     324              :       seed(result_type __s = default_seed);
+     325              : 
+     326              :       /**
+     327              :        * @brief Reseeds the %linear_congruential_engine random number generator
+     328              :        *        engine
+     329              :        * sequence using values from the seed sequence @p __q.
+     330              :        *
+     331              :        * @param __q the seed sequence.
+     332              :        */
+     333              :       template<typename _Sseq>
+     334              :         _If_seed_seq<_Sseq>
+     335              :         seed(_Sseq& __q);
+     336              : 
+     337              :       /**
+     338              :        * @brief Gets the smallest possible value in the output range.
+     339              :        *
+     340              :        * The minimum depends on the @p __c parameter: if it is zero, the
+     341              :        * minimum generated must be > 0, otherwise 0 is allowed.
+     342              :        */
+     343              :       static constexpr result_type
+     344              :       min()
+     345              :       { return __c == 0u ? 1u : 0u; }
+     346              : 
+     347              :       /**
+     348              :        * @brief Gets the largest possible value in the output range.
+     349              :        */
+     350              :       static constexpr result_type
+     351              :       max()
+     352              :       { return __m - 1u; }
+     353              : 
+     354              :       /**
+     355              :        * @brief Discard a sequence of random numbers.
+     356              :        */
+     357              :       void
+     358              :       discard(unsigned long long __z)
+     359              :       {
+     360              :         for (; __z != 0ULL; --__z)
+     361              :           (*this)();
+     362              :       }
+     363              : 
+     364              :       /**
+     365              :        * @brief Gets the next random number in the sequence.
+     366              :        */
+     367              :       result_type
+     368              :       operator()()
+     369              :       {
+     370              :         _M_x = __detail::__mod<_UIntType, __m, __a, __c>(_M_x);
+     371              :         return _M_x;
+     372              :       }
+     373              : 
+     374              :       /**
+     375              :        * @brief Compares two linear congruential random number generator
+     376              :        * objects of the same type for equality.
+     377              :        *
+     378              :        * @param __lhs A linear congruential random number generator object.
+     379              :        * @param __rhs Another linear congruential random number generator
+     380              :        *              object.
+     381              :        *
+     382              :        * @returns true if the infinite sequences of generated values
+     383              :        *          would be equal, false otherwise.
+     384              :        */
+     385              :       friend bool
+     386              :       operator==(const linear_congruential_engine& __lhs,
+     387              :                  const linear_congruential_engine& __rhs)
+     388              :       { return __lhs._M_x == __rhs._M_x; }
+     389              : 
+     390              :       /**
+     391              :        * @brief Writes the textual representation of the state x(i) of x to
+     392              :        *        @p __os.
+     393              :        *
+     394              :        * @param __os  The output stream.
+     395              :        * @param __lcr A % linear_congruential_engine random number generator.
+     396              :        * @returns __os.
+     397              :        */
+     398              :       template<typename _UIntType1, _UIntType1 __a1, _UIntType1 __c1,
+     399              :                _UIntType1 __m1, typename _CharT, typename _Traits>
+     400              :         friend std::basic_ostream<_CharT, _Traits>&
+     401              :         operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+     402              :                    const std::linear_congruential_engine<_UIntType1,
+     403              :                    __a1, __c1, __m1>& __lcr);
+     404              : 
+     405              :       /**
+     406              :        * @brief Sets the state of the engine by reading its textual
+     407              :        *        representation from @p __is.
+     408              :        *
+     409              :        * The textual representation must have been previously written using
+     410              :        * an output stream whose imbued locale and whose type's template
+     411              :        * specialization arguments _CharT and _Traits were the same as those
+     412              :        * of @p __is.
+     413              :        *
+     414              :        * @param __is  The input stream.
+     415              :        * @param __lcr A % linear_congruential_engine random number generator.
+     416              :        * @returns __is.
+     417              :        */
+     418              :       template<typename _UIntType1, _UIntType1 __a1, _UIntType1 __c1,
+     419              :                _UIntType1 __m1, typename _CharT, typename _Traits>
+     420              :         friend std::basic_istream<_CharT, _Traits>&
+     421              :         operator>>(std::basic_istream<_CharT, _Traits>& __is,
+     422              :                    std::linear_congruential_engine<_UIntType1, __a1,
+     423              :                    __c1, __m1>& __lcr);
+     424              : 
+     425              :     private:
+     426              :       _UIntType _M_x;
+     427              :     };
+     428              : 
+     429              : #if __cpp_impl_three_way_comparison < 201907L
+     430              :   /**
+     431              :    * @brief Compares two linear congruential random number generator
+     432              :    * objects of the same type for inequality.
+     433              :    *
+     434              :    * @param __lhs A linear congruential random number generator object.
+     435              :    * @param __rhs Another linear congruential random number generator
+     436              :    *              object.
+     437              :    *
+     438              :    * @returns true if the infinite sequences of generated values
+     439              :    *          would be different, false otherwise.
+     440              :    */
+     441              :   template<typename _UIntType, _UIntType __a, _UIntType __c, _UIntType __m>
+     442              :     inline bool
+     443              :     operator!=(const std::linear_congruential_engine<_UIntType, __a,
+     444              :                __c, __m>& __lhs,
+     445              :                const std::linear_congruential_engine<_UIntType, __a,
+     446              :                __c, __m>& __rhs)
+     447              :     { return !(__lhs == __rhs); }
+     448              : #endif
+     449              : 
+     450              :   /**
+     451              :    * A generalized feedback shift register discrete random number generator.
+     452              :    *
+     453              :    * This algorithm avoids multiplication and division and is designed to be
+     454              :    * friendly to a pipelined architecture.  If the parameters are chosen
+     455              :    * correctly, this generator will produce numbers with a very long period and
+     456              :    * fairly good apparent entropy, although still not cryptographically strong.
+     457              :    *
+     458              :    * The best way to use this generator is with the predefined mt19937 class.
+     459              :    *
+     460              :    * This algorithm was originally invented by Makoto Matsumoto and
+     461              :    * Takuji Nishimura.
+     462              :    *
+     463              :    * @tparam __w  Word size, the number of bits in each element of 
+     464              :    *              the state vector.
+     465              :    * @tparam __n  The degree of recursion.
+     466              :    * @tparam __m  The period parameter.
+     467              :    * @tparam __r  The separation point bit index.
+     468              :    * @tparam __a  The last row of the twist matrix.
+     469              :    * @tparam __u  The first right-shift tempering matrix parameter.
+     470              :    * @tparam __d  The first right-shift tempering matrix mask.
+     471              :    * @tparam __s  The first left-shift tempering matrix parameter.
+     472              :    * @tparam __b  The first left-shift tempering matrix mask.
+     473              :    * @tparam __t  The second left-shift tempering matrix parameter.
+     474              :    * @tparam __c  The second left-shift tempering matrix mask.
+     475              :    * @tparam __l  The second right-shift tempering matrix parameter.
+     476              :    * @tparam __f  Initialization multiplier.
+     477              :    *
+     478              :    * @headerfile random
+     479              :    * @since C++11
+     480              :    */
+     481              :   template<typename _UIntType, size_t __w,
+     482              :            size_t __n, size_t __m, size_t __r,
+     483              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     484              :            _UIntType __b, size_t __t,
+     485              :            _UIntType __c, size_t __l, _UIntType __f>
+     486              :     class mersenne_twister_engine
+     487              :     {
+     488              :       static_assert(std::is_unsigned<_UIntType>::value,
+     489              :                     "result_type must be an unsigned integral type");
+     490              :       static_assert(1u <= __m && __m <= __n,
+     491              :                     "template argument substituting __m out of bounds");
+     492              :       static_assert(__r <= __w, "template argument substituting "
+     493              :                     "__r out of bound");
+     494              :       static_assert(__u <= __w, "template argument substituting "
+     495              :                     "__u out of bound");
+     496              :       static_assert(__s <= __w, "template argument substituting "
+     497              :                     "__s out of bound");
+     498              :       static_assert(__t <= __w, "template argument substituting "
+     499              :                     "__t out of bound");
+     500              :       static_assert(__l <= __w, "template argument substituting "
+     501              :                     "__l out of bound");
+     502              :       static_assert(__w <= std::numeric_limits<_UIntType>::digits,
+     503              :                     "template argument substituting __w out of bound");
+     504              :       static_assert(__a <= (__detail::_Shift<_UIntType, __w>::__value - 1),
+     505              :                     "template argument substituting __a out of bound");
+     506              :       static_assert(__b <= (__detail::_Shift<_UIntType, __w>::__value - 1),
+     507              :                     "template argument substituting __b out of bound");
+     508              :       static_assert(__c <= (__detail::_Shift<_UIntType, __w>::__value - 1),
+     509              :                     "template argument substituting __c out of bound");
+     510              :       static_assert(__d <= (__detail::_Shift<_UIntType, __w>::__value - 1),
+     511              :                     "template argument substituting __d out of bound");
+     512              :       static_assert(__f <= (__detail::_Shift<_UIntType, __w>::__value - 1),
+     513              :                     "template argument substituting __f out of bound");
+     514              : 
+     515              :       template<typename _Sseq>
+     516              :         using _If_seed_seq
+     517              :           = __detail::_If_seed_seq_for<_Sseq, mersenne_twister_engine,
+     518              :                                        _UIntType>;
+     519              : 
+     520              :     public:
+     521              :       /** The type of the generated random value. */
+     522              :       typedef _UIntType result_type;
+     523              : 
+     524              :       // parameter values
+     525              :       static constexpr size_t      word_size                 = __w;
+     526              :       static constexpr size_t      state_size                = __n;
+     527              :       static constexpr size_t      shift_size                = __m;
+     528              :       static constexpr size_t      mask_bits                 = __r;
+     529              :       static constexpr result_type xor_mask                  = __a;
+     530              :       static constexpr size_t      tempering_u               = __u;
+     531              :       static constexpr result_type tempering_d               = __d;
+     532              :       static constexpr size_t      tempering_s               = __s;
+     533              :       static constexpr result_type tempering_b               = __b;
+     534              :       static constexpr size_t      tempering_t               = __t;
+     535              :       static constexpr result_type tempering_c               = __c;
+     536              :       static constexpr size_t      tempering_l               = __l;
+     537              :       static constexpr result_type initialization_multiplier = __f;
+     538              :       static constexpr result_type default_seed = 5489u;
+     539              : 
+     540              :       // constructors and member functions
+     541              : 
+     542          250 :       mersenne_twister_engine() : mersenne_twister_engine(default_seed) { }
+     543              : 
+     544              :       explicit
+     545          542 :       mersenne_twister_engine(result_type __sd)
+     546          542 :       { seed(__sd); }
+     547              : 
+     548              :       /**
+     549              :        * @brief Constructs a %mersenne_twister_engine random number generator
+     550              :        *        engine seeded from the seed sequence @p __q.
+     551              :        *
+     552              :        * @param __q the seed sequence.
+     553              :        */
+     554              :       template<typename _Sseq, typename = _If_seed_seq<_Sseq>>
+     555              :         explicit
+     556              :         mersenne_twister_engine(_Sseq& __q)
+     557              :         { seed(__q); }
+     558              : 
+     559              :       void
+     560              :       seed(result_type __sd = default_seed);
+     561              : 
+     562              :       template<typename _Sseq>
+     563              :         _If_seed_seq<_Sseq>
+     564              :         seed(_Sseq& __q);
+     565              : 
+     566              :       /**
+     567              :        * @brief Gets the smallest possible value in the output range.
+     568              :        */
+     569              :       static constexpr result_type
+     570              :       min()
+     571              :       { return 0; }
+     572              : 
+     573              :       /**
+     574              :        * @brief Gets the largest possible value in the output range.
+     575              :        */
+     576              :       static constexpr result_type
+     577              :       max()
+     578              :       { return __detail::_Shift<_UIntType, __w>::__value - 1; }
+     579              : 
+     580              :       /**
+     581              :        * @brief Discard a sequence of random numbers.
+     582              :        */
+     583              :       void
+     584              :       discard(unsigned long long __z);
+     585              : 
+     586              :       result_type
+     587              :       operator()();
+     588              : 
+     589              :       /**
+     590              :        * @brief Compares two % mersenne_twister_engine random number generator
+     591              :        *        objects of the same type for equality.
+     592              :        *
+     593              :        * @param __lhs A % mersenne_twister_engine random number generator
+     594              :        *              object.
+     595              :        * @param __rhs Another % mersenne_twister_engine random number
+     596              :        *              generator object.
+     597              :        *
+     598              :        * @returns true if the infinite sequences of generated values
+     599              :        *          would be equal, false otherwise.
+     600              :        */
+     601              :       friend bool
+     602              :       operator==(const mersenne_twister_engine& __lhs,
+     603              :                  const mersenne_twister_engine& __rhs)
+     604              :       { return (std::equal(__lhs._M_x, __lhs._M_x + state_size, __rhs._M_x)
+     605              :                 && __lhs._M_p == __rhs._M_p); }
+     606              : 
+     607              :       /**
+     608              :        * @brief Inserts the current state of a % mersenne_twister_engine
+     609              :        *        random number generator engine @p __x into the output stream
+     610              :        *        @p __os.
+     611              :        *
+     612              :        * @param __os An output stream.
+     613              :        * @param __x  A % mersenne_twister_engine random number generator
+     614              :        *             engine.
+     615              :        *
+     616              :        * @returns The output stream with the state of @p __x inserted or in
+     617              :        * an error state.
+     618              :        */
+     619              :       template<typename _UIntType1,
+     620              :                size_t __w1, size_t __n1,
+     621              :                size_t __m1, size_t __r1,
+     622              :                _UIntType1 __a1, size_t __u1,
+     623              :                _UIntType1 __d1, size_t __s1,
+     624              :                _UIntType1 __b1, size_t __t1,
+     625              :                _UIntType1 __c1, size_t __l1, _UIntType1 __f1,
+     626              :                typename _CharT, typename _Traits>
+     627              :         friend std::basic_ostream<_CharT, _Traits>&
+     628              :         operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+     629              :                    const std::mersenne_twister_engine<_UIntType1, __w1, __n1,
+     630              :                    __m1, __r1, __a1, __u1, __d1, __s1, __b1, __t1, __c1,
+     631              :                    __l1, __f1>& __x);
+     632              : 
+     633              :       /**
+     634              :        * @brief Extracts the current state of a % mersenne_twister_engine
+     635              :        *        random number generator engine @p __x from the input stream
+     636              :        *        @p __is.
+     637              :        *
+     638              :        * @param __is An input stream.
+     639              :        * @param __x  A % mersenne_twister_engine random number generator
+     640              :        *             engine.
+     641              :        *
+     642              :        * @returns The input stream with the state of @p __x extracted or in
+     643              :        * an error state.
+     644              :        */
+     645              :       template<typename _UIntType1,
+     646              :                size_t __w1, size_t __n1,
+     647              :                size_t __m1, size_t __r1,
+     648              :                _UIntType1 __a1, size_t __u1,
+     649              :                _UIntType1 __d1, size_t __s1,
+     650              :                _UIntType1 __b1, size_t __t1,
+     651              :                _UIntType1 __c1, size_t __l1, _UIntType1 __f1,
+     652              :                typename _CharT, typename _Traits>
+     653              :         friend std::basic_istream<_CharT, _Traits>&
+     654              :         operator>>(std::basic_istream<_CharT, _Traits>& __is,
+     655              :                    std::mersenne_twister_engine<_UIntType1, __w1, __n1, __m1,
+     656              :                    __r1, __a1, __u1, __d1, __s1, __b1, __t1, __c1,
+     657              :                    __l1, __f1>& __x);
+     658              : 
+     659              :     private:
+     660              :       void _M_gen_rand();
+     661              : 
+     662              :       _UIntType _M_x[state_size];
+     663              :       size_t    _M_p;
+     664              :     };
+     665              : 
+     666              : #if __cpp_impl_three_way_comparison < 201907L
+     667              :   /**
+     668              :    * @brief Compares two % mersenne_twister_engine random number generator
+     669              :    *        objects of the same type for inequality.
+     670              :    *
+     671              :    * @param __lhs A % mersenne_twister_engine random number generator
+     672              :    *              object.
+     673              :    * @param __rhs Another % mersenne_twister_engine random number
+     674              :    *              generator object.
+     675              :    *
+     676              :    * @returns true if the infinite sequences of generated values
+     677              :    *          would be different, false otherwise.
+     678              :    */
+     679              :   template<typename _UIntType, size_t __w,
+     680              :            size_t __n, size_t __m, size_t __r,
+     681              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     682              :            _UIntType __b, size_t __t,
+     683              :            _UIntType __c, size_t __l, _UIntType __f>
+     684              :     inline bool
+     685              :     operator!=(const std::mersenne_twister_engine<_UIntType, __w, __n, __m,
+     686              :                __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>& __lhs,
+     687              :                const std::mersenne_twister_engine<_UIntType, __w, __n, __m,
+     688              :                __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>& __rhs)
+     689              :     { return !(__lhs == __rhs); }
+     690              : #endif
+     691              : 
+     692              :   /**
+     693              :    * @brief The Marsaglia-Zaman generator.
+     694              :    *
+     695              :    * This is a model of a Generalized Fibonacci discrete random number
+     696              :    * generator, sometimes referred to as the SWC generator.
+     697              :    *
+     698              :    * A discrete random number generator that produces pseudorandom
+     699              :    * numbers using:
+     700              :    * @f[
+     701              :    *     x_{i}\leftarrow(x_{i - s} - x_{i - r} - carry_{i-1}) \bmod m 
+     702              :    * @f]
+     703              :    *
+     704              :    * The size of the state is @f$r@f$
+     705              :    * and the maximum period of the generator is @f$(m^r - m^s - 1)@f$.
+     706              :    *
+     707              :    * @headerfile random
+     708              :    * @since C++11
+     709              :    */
+     710              :   template<typename _UIntType, size_t __w, size_t __s, size_t __r>
+     711              :     class subtract_with_carry_engine
+     712              :     {
+     713              :       static_assert(std::is_unsigned<_UIntType>::value,
+     714              :                     "result_type must be an unsigned integral type");
+     715              :       static_assert(0u < __s && __s < __r,
+     716              :                     "0 < s < r");
+     717              :       static_assert(0u < __w && __w <= std::numeric_limits<_UIntType>::digits,
+     718              :                     "template argument substituting __w out of bounds");
+     719              : 
+     720              :       template<typename _Sseq>
+     721              :         using _If_seed_seq
+     722              :           = __detail::_If_seed_seq_for<_Sseq, subtract_with_carry_engine,
+     723              :                                        _UIntType>;
+     724              : 
+     725              :     public:
+     726              :       /** The type of the generated random value. */
+     727              :       typedef _UIntType result_type;
+     728              : 
+     729              :       // parameter values
+     730              :       static constexpr size_t      word_size    = __w;
+     731              :       static constexpr size_t      short_lag    = __s;
+     732              :       static constexpr size_t      long_lag     = __r;
+     733              :       static constexpr uint_least32_t default_seed = 19780503u;
+     734              : 
+     735              :       subtract_with_carry_engine() : subtract_with_carry_engine(0u)
+     736              :       { }
+     737              : 
+     738              :       /**
+     739              :        * @brief Constructs an explicitly seeded %subtract_with_carry_engine
+     740              :        *        random number generator.
+     741              :        */
+     742              :       explicit
+     743              :       subtract_with_carry_engine(result_type __sd)
+     744              :       { seed(__sd); }
+     745              : 
+     746              :       /**
+     747              :        * @brief Constructs a %subtract_with_carry_engine random number engine
+     748              :        *        seeded from the seed sequence @p __q.
+     749              :        *
+     750              :        * @param __q the seed sequence.
+     751              :        */
+     752              :       template<typename _Sseq, typename = _If_seed_seq<_Sseq>>
+     753              :         explicit
+     754              :         subtract_with_carry_engine(_Sseq& __q)
+     755              :         { seed(__q); }
+     756              : 
+     757              :       /**
+     758              :        * @brief Seeds the initial state @f$x_0@f$ of the random number
+     759              :        *        generator.
+     760              :        *
+     761              :        * N1688[4.19] modifies this as follows.  If @p __value == 0,
+     762              :        * sets value to 19780503.  In any case, with a linear
+     763              :        * congruential generator lcg(i) having parameters @f$ m_{lcg} =
+     764              :        * 2147483563, a_{lcg} = 40014, c_{lcg} = 0, and lcg(0) = value
+     765              :        * @f$, sets @f$ x_{-r} \dots x_{-1} @f$ to @f$ lcg(1) \bmod m
+     766              :        * \dots lcg(r) \bmod m @f$ respectively.  If @f$ x_{-1} = 0 @f$
+     767              :        * set carry to 1, otherwise sets carry to 0.
+     768              :        */
+     769              :       void
+     770              :       seed(result_type __sd = 0u);
+     771              : 
+     772              :       /**
+     773              :        * @brief Seeds the initial state @f$x_0@f$ of the
+     774              :        * % subtract_with_carry_engine random number generator.
+     775              :        */
+     776              :       template<typename _Sseq>
+     777              :         _If_seed_seq<_Sseq>
+     778              :         seed(_Sseq& __q);
+     779              : 
+     780              :       /**
+     781              :        * @brief Gets the inclusive minimum value of the range of random
+     782              :        * integers returned by this generator.
+     783              :        */
+     784              :       static constexpr result_type
+     785              :       min()
+     786              :       { return 0; }
+     787              : 
+     788              :       /**
+     789              :        * @brief Gets the inclusive maximum value of the range of random
+     790              :        * integers returned by this generator.
+     791              :        */
+     792              :       static constexpr result_type
+     793              :       max()
+     794              :       { return __detail::_Shift<_UIntType, __w>::__value - 1; }
+     795              : 
+     796              :       /**
+     797              :        * @brief Discard a sequence of random numbers.
+     798              :        */
+     799              :       void
+     800              :       discard(unsigned long long __z)
+     801              :       {
+     802              :         for (; __z != 0ULL; --__z)
+     803              :           (*this)();
+     804              :       }
+     805              : 
+     806              :       /**
+     807              :        * @brief Gets the next random number in the sequence.
+     808              :        */
+     809              :       result_type
+     810              :       operator()();
+     811              : 
+     812              :       /**
+     813              :        * @brief Compares two % subtract_with_carry_engine random number
+     814              :        *        generator objects of the same type for equality.
+     815              :        *
+     816              :        * @param __lhs A % subtract_with_carry_engine random number generator
+     817              :        *              object.
+     818              :        * @param __rhs Another % subtract_with_carry_engine random number
+     819              :        *              generator object.
+     820              :        *
+     821              :        * @returns true if the infinite sequences of generated values
+     822              :        *          would be equal, false otherwise.
+     823              :       */
+     824              :       friend bool
+     825              :       operator==(const subtract_with_carry_engine& __lhs,
+     826              :                  const subtract_with_carry_engine& __rhs)
+     827              :       { return (std::equal(__lhs._M_x, __lhs._M_x + long_lag, __rhs._M_x)
+     828              :                 && __lhs._M_carry == __rhs._M_carry
+     829              :                 && __lhs._M_p == __rhs._M_p); }
+     830              : 
+     831              :       /**
+     832              :        * @brief Inserts the current state of a % subtract_with_carry_engine
+     833              :        *        random number generator engine @p __x into the output stream
+     834              :        *        @p __os.
+     835              :        *
+     836              :        * @param __os An output stream.
+     837              :        * @param __x  A % subtract_with_carry_engine random number generator
+     838              :        *             engine.
+     839              :        *
+     840              :        * @returns The output stream with the state of @p __x inserted or in
+     841              :        * an error state.
+     842              :        */
+     843              :       template<typename _UIntType1, size_t __w1, size_t __s1, size_t __r1,
+     844              :                typename _CharT, typename _Traits>
+     845              :         friend std::basic_ostream<_CharT, _Traits>&
+     846              :         operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+     847              :                    const std::subtract_with_carry_engine<_UIntType1, __w1,
+     848              :                    __s1, __r1>& __x);
+     849              : 
+     850              :       /**
+     851              :        * @brief Extracts the current state of a % subtract_with_carry_engine
+     852              :        *        random number generator engine @p __x from the input stream
+     853              :        *        @p __is.
+     854              :        *
+     855              :        * @param __is An input stream.
+     856              :        * @param __x  A % subtract_with_carry_engine random number generator
+     857              :        *             engine.
+     858              :        *
+     859              :        * @returns The input stream with the state of @p __x extracted or in
+     860              :        * an error state.
+     861              :        */
+     862              :       template<typename _UIntType1, size_t __w1, size_t __s1, size_t __r1,
+     863              :                typename _CharT, typename _Traits>
+     864              :         friend std::basic_istream<_CharT, _Traits>&
+     865              :         operator>>(std::basic_istream<_CharT, _Traits>& __is,
+     866              :                    std::subtract_with_carry_engine<_UIntType1, __w1,
+     867              :                    __s1, __r1>& __x);
+     868              : 
+     869              :     private:
+     870              :       /// The state of the generator.  This is a ring buffer.
+     871              :       _UIntType  _M_x[long_lag];
+     872              :       _UIntType  _M_carry;              ///< The carry
+     873              :       size_t     _M_p;                  ///< Current index of x(i - r).
+     874              :     };
+     875              : 
+     876              : #if __cpp_impl_three_way_comparison < 201907L
+     877              :   /**
+     878              :    * @brief Compares two % subtract_with_carry_engine random number
+     879              :    *        generator objects of the same type for inequality.
+     880              :    *
+     881              :    * @param __lhs A % subtract_with_carry_engine random number generator
+     882              :    *              object.
+     883              :    * @param __rhs Another % subtract_with_carry_engine random number
+     884              :    *              generator object.
+     885              :    *
+     886              :    * @returns true if the infinite sequences of generated values
+     887              :    *          would be different, false otherwise.
+     888              :    */
+     889              :   template<typename _UIntType, size_t __w, size_t __s, size_t __r>
+     890              :     inline bool
+     891              :     operator!=(const std::subtract_with_carry_engine<_UIntType, __w,
+     892              :                __s, __r>& __lhs,
+     893              :                const std::subtract_with_carry_engine<_UIntType, __w,
+     894              :                __s, __r>& __rhs)
+     895              :     { return !(__lhs == __rhs); }
+     896              : #endif
+     897              : 
+     898              :   /**
+     899              :    * Produces random numbers from some base engine by discarding blocks of
+     900              :    * data.
+     901              :    *
+     902              :    * @pre @f$ 0 \leq r \leq p @f$
+     903              :    *
+     904              :    * @headerfile random
+     905              :    * @since C++11
+     906              :    */
+     907              :   template<typename _RandomNumberEngine, size_t __p, size_t __r>
+     908              :     class discard_block_engine
+     909              :     {
+     910              :       static_assert(1 <= __r && __r <= __p,
+     911              :                     "template argument substituting __r out of bounds");
+     912              : 
+     913              :     public:
+     914              :       /** The type of the generated random value. */
+     915              :       typedef typename _RandomNumberEngine::result_type result_type;
+     916              : 
+     917              :       template<typename _Sseq>
+     918              :         using _If_seed_seq
+     919              :           = __detail::_If_seed_seq_for<_Sseq, discard_block_engine,
+     920              :                                        result_type>;
+     921              : 
+     922              :       // parameter values
+     923              :       static constexpr size_t block_size = __p;
+     924              :       static constexpr size_t used_block = __r;
+     925              : 
+     926              :       /**
+     927              :        * @brief Constructs a default %discard_block_engine engine.
+     928              :        *
+     929              :        * The underlying engine is default constructed as well.
+     930              :        */
+     931              :       discard_block_engine()
+     932              :       : _M_b(), _M_n(0) { }
+     933              : 
+     934              :       /**
+     935              :        * @brief Copy constructs a %discard_block_engine engine.
+     936              :        *
+     937              :        * Copies an existing base class random number generator.
+     938              :        * @param __rng An existing (base class) engine object.
+     939              :        */
+     940              :       explicit
+     941              :       discard_block_engine(const _RandomNumberEngine& __rng)
+     942              :       : _M_b(__rng), _M_n(0) { }
+     943              : 
+     944              :       /**
+     945              :        * @brief Move constructs a %discard_block_engine engine.
+     946              :        *
+     947              :        * Copies an existing base class random number generator.
+     948              :        * @param __rng An existing (base class) engine object.
+     949              :        */
+     950              :       explicit
+     951              :       discard_block_engine(_RandomNumberEngine&& __rng)
+     952              :       : _M_b(std::move(__rng)), _M_n(0) { }
+     953              : 
+     954              :       /**
+     955              :        * @brief Seed constructs a %discard_block_engine engine.
+     956              :        *
+     957              :        * Constructs the underlying generator engine seeded with @p __s.
+     958              :        * @param __s A seed value for the base class engine.
+     959              :        */
+     960              :       explicit
+     961              :       discard_block_engine(result_type __s)
+     962              :       : _M_b(__s), _M_n(0) { }
+     963              : 
+     964              :       /**
+     965              :        * @brief Generator construct a %discard_block_engine engine.
+     966              :        *
+     967              :        * @param __q A seed sequence.
+     968              :        */
+     969              :       template<typename _Sseq, typename = _If_seed_seq<_Sseq>>
+     970              :         explicit
+     971              :         discard_block_engine(_Sseq& __q)
+     972              :         : _M_b(__q), _M_n(0)
+     973              :         { }
+     974              : 
+     975              :       /**
+     976              :        * @brief Reseeds the %discard_block_engine object with the default
+     977              :        *        seed for the underlying base class generator engine.
+     978              :        */
+     979              :       void
+     980              :       seed()
+     981              :       {
+     982              :         _M_b.seed();
+     983              :         _M_n = 0;
+     984              :       }
+     985              : 
+     986              :       /**
+     987              :        * @brief Reseeds the %discard_block_engine object with the default
+     988              :        *        seed for the underlying base class generator engine.
+     989              :        */
+     990              :       void
+     991              :       seed(result_type __s)
+     992              :       {
+     993              :         _M_b.seed(__s);
+     994              :         _M_n = 0;
+     995              :       }
+     996              : 
+     997              :       /**
+     998              :        * @brief Reseeds the %discard_block_engine object with the given seed
+     999              :        *        sequence.
+    1000              :        * @param __q A seed generator function.
+    1001              :        */
+    1002              :       template<typename _Sseq>
+    1003              :         _If_seed_seq<_Sseq>
+    1004              :         seed(_Sseq& __q)
+    1005              :         {
+    1006              :           _M_b.seed(__q);
+    1007              :           _M_n = 0;
+    1008              :         }
+    1009              : 
+    1010              :       /**
+    1011              :        * @brief Gets a const reference to the underlying generator engine
+    1012              :        *        object.
+    1013              :        */
+    1014              :       const _RandomNumberEngine&
+    1015              :       base() const noexcept
+    1016              :       { return _M_b; }
+    1017              : 
+    1018              :       /**
+    1019              :        * @brief Gets the minimum value in the generated random number range.
+    1020              :        */
+    1021              :       static constexpr result_type
+    1022              :       min()
+    1023              :       { return _RandomNumberEngine::min(); }
+    1024              : 
+    1025              :       /**
+    1026              :        * @brief Gets the maximum value in the generated random number range.
+    1027              :        */
+    1028              :       static constexpr result_type
+    1029              :       max()
+    1030              :       { return _RandomNumberEngine::max(); }
+    1031              : 
+    1032              :       /**
+    1033              :        * @brief Discard a sequence of random numbers.
+    1034              :        */
+    1035              :       void
+    1036              :       discard(unsigned long long __z)
+    1037              :       {
+    1038              :         for (; __z != 0ULL; --__z)
+    1039              :           (*this)();
+    1040              :       }
+    1041              : 
+    1042              :       /**
+    1043              :        * @brief Gets the next value in the generated random number sequence.
+    1044              :        */
+    1045              :       result_type
+    1046              :       operator()();
+    1047              : 
+    1048              :       /**
+    1049              :        * @brief Compares two %discard_block_engine random number generator
+    1050              :        *        objects of the same type for equality.
+    1051              :        *
+    1052              :        * @param __lhs A %discard_block_engine random number generator object.
+    1053              :        * @param __rhs Another %discard_block_engine random number generator
+    1054              :        *              object.
+    1055              :        *
+    1056              :        * @returns true if the infinite sequences of generated values
+    1057              :        *          would be equal, false otherwise.
+    1058              :        */
+    1059              :       friend bool
+    1060              :       operator==(const discard_block_engine& __lhs,
+    1061              :                  const discard_block_engine& __rhs)
+    1062              :       { return __lhs._M_b == __rhs._M_b && __lhs._M_n == __rhs._M_n; }
+    1063              : 
+    1064              :       /**
+    1065              :        * @brief Inserts the current state of a %discard_block_engine random
+    1066              :        *        number generator engine @p __x into the output stream
+    1067              :        *        @p __os.
+    1068              :        *
+    1069              :        * @param __os An output stream.
+    1070              :        * @param __x  A %discard_block_engine random number generator engine.
+    1071              :        *
+    1072              :        * @returns The output stream with the state of @p __x inserted or in
+    1073              :        * an error state.
+    1074              :        */
+    1075              :       template<typename _RandomNumberEngine1, size_t __p1, size_t __r1,
+    1076              :                typename _CharT, typename _Traits>
+    1077              :         friend std::basic_ostream<_CharT, _Traits>&
+    1078              :         operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    1079              :                    const std::discard_block_engine<_RandomNumberEngine1,
+    1080              :                    __p1, __r1>& __x);
+    1081              : 
+    1082              :       /**
+    1083              :        * @brief Extracts the current state of a % subtract_with_carry_engine
+    1084              :        *        random number generator engine @p __x from the input stream
+    1085              :        *        @p __is.
+    1086              :        *
+    1087              :        * @param __is An input stream.
+    1088              :        * @param __x  A %discard_block_engine random number generator engine.
+    1089              :        *
+    1090              :        * @returns The input stream with the state of @p __x extracted or in
+    1091              :        * an error state.
+    1092              :        */
+    1093              :       template<typename _RandomNumberEngine1, size_t __p1, size_t __r1,
+    1094              :                typename _CharT, typename _Traits>
+    1095              :         friend std::basic_istream<_CharT, _Traits>&
+    1096              :         operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    1097              :                    std::discard_block_engine<_RandomNumberEngine1,
+    1098              :                    __p1, __r1>& __x);
+    1099              : 
+    1100              :     private:
+    1101              :       _RandomNumberEngine _M_b;
+    1102              :       size_t _M_n;
+    1103              :     };
+    1104              : 
+    1105              : #if __cpp_impl_three_way_comparison < 201907L
+    1106              :   /**
+    1107              :    * @brief Compares two %discard_block_engine random number generator
+    1108              :    *        objects of the same type for inequality.
+    1109              :    *
+    1110              :    * @param __lhs A %discard_block_engine random number generator object.
+    1111              :    * @param __rhs Another %discard_block_engine random number generator
+    1112              :    *              object.
+    1113              :    *
+    1114              :    * @returns true if the infinite sequences of generated values
+    1115              :    *          would be different, false otherwise.
+    1116              :    */
+    1117              :   template<typename _RandomNumberEngine, size_t __p, size_t __r>
+    1118              :     inline bool
+    1119              :     operator!=(const std::discard_block_engine<_RandomNumberEngine, __p,
+    1120              :                __r>& __lhs,
+    1121              :                const std::discard_block_engine<_RandomNumberEngine, __p,
+    1122              :                __r>& __rhs)
+    1123              :     { return !(__lhs == __rhs); }
+    1124              : #endif
+    1125              : 
+    1126              :   /**
+    1127              :    * Produces random numbers by combining random numbers from some base
+    1128              :    * engine to produce random numbers with a specified number of bits @p __w.
+    1129              :    *
+    1130              :    * @headerfile random
+    1131              :    * @since C++11
+    1132              :    */
+    1133              :   template<typename _RandomNumberEngine, size_t __w, typename _UIntType>
+    1134              :     class independent_bits_engine
+    1135              :     {
+    1136              :       static_assert(std::is_unsigned<_UIntType>::value,
+    1137              :                     "result_type must be an unsigned integral type");
+    1138              :       static_assert(0u < __w && __w <= std::numeric_limits<_UIntType>::digits,
+    1139              :                     "template argument substituting __w out of bounds");
+    1140              : 
+    1141              :       template<typename _Sseq>
+    1142              :         using _If_seed_seq
+    1143              :           = __detail::_If_seed_seq_for<_Sseq, independent_bits_engine,
+    1144              :                                        _UIntType>;
+    1145              : 
+    1146              :     public:
+    1147              :       /** The type of the generated random value. */
+    1148              :       typedef _UIntType result_type;
+    1149              : 
+    1150              :       /**
+    1151              :        * @brief Constructs a default %independent_bits_engine engine.
+    1152              :        *
+    1153              :        * The underlying engine is default constructed as well.
+    1154              :        */
+    1155              :       independent_bits_engine()
+    1156              :       : _M_b() { }
+    1157              : 
+    1158              :       /**
+    1159              :        * @brief Copy constructs a %independent_bits_engine engine.
+    1160              :        *
+    1161              :        * Copies an existing base class random number generator.
+    1162              :        * @param __rng An existing (base class) engine object.
+    1163              :        */
+    1164              :       explicit
+    1165              :       independent_bits_engine(const _RandomNumberEngine& __rng)
+    1166              :       : _M_b(__rng) { }
+    1167              : 
+    1168              :       /**
+    1169              :        * @brief Move constructs a %independent_bits_engine engine.
+    1170              :        *
+    1171              :        * Copies an existing base class random number generator.
+    1172              :        * @param __rng An existing (base class) engine object.
+    1173              :        */
+    1174              :       explicit
+    1175              :       independent_bits_engine(_RandomNumberEngine&& __rng)
+    1176              :       : _M_b(std::move(__rng)) { }
+    1177              : 
+    1178              :       /**
+    1179              :        * @brief Seed constructs a %independent_bits_engine engine.
+    1180              :        *
+    1181              :        * Constructs the underlying generator engine seeded with @p __s.
+    1182              :        * @param __s A seed value for the base class engine.
+    1183              :        */
+    1184              :       explicit
+    1185              :       independent_bits_engine(result_type __s)
+    1186              :       : _M_b(__s) { }
+    1187              : 
+    1188              :       /**
+    1189              :        * @brief Generator construct a %independent_bits_engine engine.
+    1190              :        *
+    1191              :        * @param __q A seed sequence.
+    1192              :        */
+    1193              :       template<typename _Sseq, typename = _If_seed_seq<_Sseq>>
+    1194              :         explicit
+    1195              :         independent_bits_engine(_Sseq& __q)
+    1196              :         : _M_b(__q)
+    1197              :         { }
+    1198              : 
+    1199              :       /**
+    1200              :        * @brief Reseeds the %independent_bits_engine object with the default
+    1201              :        *        seed for the underlying base class generator engine.
+    1202              :        */
+    1203              :       void
+    1204              :       seed()
+    1205              :       { _M_b.seed(); }
+    1206              : 
+    1207              :       /**
+    1208              :        * @brief Reseeds the %independent_bits_engine object with the default
+    1209              :        *        seed for the underlying base class generator engine.
+    1210              :        */
+    1211              :       void
+    1212              :       seed(result_type __s)
+    1213              :       { _M_b.seed(__s); }
+    1214              : 
+    1215              :       /**
+    1216              :        * @brief Reseeds the %independent_bits_engine object with the given
+    1217              :        *        seed sequence.
+    1218              :        * @param __q A seed generator function.
+    1219              :        */
+    1220              :       template<typename _Sseq>
+    1221              :         _If_seed_seq<_Sseq>
+    1222              :         seed(_Sseq& __q)
+    1223              :         { _M_b.seed(__q); }
+    1224              : 
+    1225              :       /**
+    1226              :        * @brief Gets a const reference to the underlying generator engine
+    1227              :        *        object.
+    1228              :        */
+    1229              :       const _RandomNumberEngine&
+    1230              :       base() const noexcept
+    1231              :       { return _M_b; }
+    1232              : 
+    1233              :       /**
+    1234              :        * @brief Gets the minimum value in the generated random number range.
+    1235              :        */
+    1236              :       static constexpr result_type
+    1237              :       min()
+    1238              :       { return 0U; }
+    1239              : 
+    1240              :       /**
+    1241              :        * @brief Gets the maximum value in the generated random number range.
+    1242              :        */
+    1243              :       static constexpr result_type
+    1244              :       max()
+    1245              :       { return __detail::_Shift<_UIntType, __w>::__value - 1; }
+    1246              : 
+    1247              :       /**
+    1248              :        * @brief Discard a sequence of random numbers.
+    1249              :        */
+    1250              :       void
+    1251              :       discard(unsigned long long __z)
+    1252              :       {
+    1253              :         for (; __z != 0ULL; --__z)
+    1254              :           (*this)();
+    1255              :       }
+    1256              : 
+    1257              :       /**
+    1258              :        * @brief Gets the next value in the generated random number sequence.
+    1259              :        */
+    1260              :       result_type
+    1261              :       operator()();
+    1262              : 
+    1263              :       /**
+    1264              :        * @brief Compares two %independent_bits_engine random number generator
+    1265              :        * objects of the same type for equality.
+    1266              :        *
+    1267              :        * @param __lhs A %independent_bits_engine random number generator
+    1268              :        *              object.
+    1269              :        * @param __rhs Another %independent_bits_engine random number generator
+    1270              :        *              object.
+    1271              :        *
+    1272              :        * @returns true if the infinite sequences of generated values
+    1273              :        *          would be equal, false otherwise.
+    1274              :        */
+    1275              :       friend bool
+    1276              :       operator==(const independent_bits_engine& __lhs,
+    1277              :                  const independent_bits_engine& __rhs)
+    1278              :       { return __lhs._M_b == __rhs._M_b; }
+    1279              : 
+    1280              :       /**
+    1281              :        * @brief Extracts the current state of a % subtract_with_carry_engine
+    1282              :        *        random number generator engine @p __x from the input stream
+    1283              :        *        @p __is.
+    1284              :        *
+    1285              :        * @param __is An input stream.
+    1286              :        * @param __x  A %independent_bits_engine random number generator
+    1287              :        *             engine.
+    1288              :        *
+    1289              :        * @returns The input stream with the state of @p __x extracted or in
+    1290              :        *          an error state.
+    1291              :        */
+    1292              :       template<typename _CharT, typename _Traits>
+    1293              :         friend std::basic_istream<_CharT, _Traits>&
+    1294              :         operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    1295              :                    std::independent_bits_engine<_RandomNumberEngine,
+    1296              :                    __w, _UIntType>& __x)
+    1297              :         {
+    1298              :           __is >> __x._M_b;
+    1299              :           return __is;
+    1300              :         }
+    1301              : 
+    1302              :     private:
+    1303              :       _RandomNumberEngine _M_b;
+    1304              :     };
+    1305              : 
+    1306              : #if __cpp_impl_three_way_comparison < 201907L
+    1307              :   /**
+    1308              :    * @brief Compares two %independent_bits_engine random number generator
+    1309              :    * objects of the same type for inequality.
+    1310              :    *
+    1311              :    * @param __lhs A %independent_bits_engine random number generator
+    1312              :    *              object.
+    1313              :    * @param __rhs Another %independent_bits_engine random number generator
+    1314              :    *              object.
+    1315              :    *
+    1316              :    * @returns true if the infinite sequences of generated values
+    1317              :    *          would be different, false otherwise.
+    1318              :    */
+    1319              :   template<typename _RandomNumberEngine, size_t __w, typename _UIntType>
+    1320              :     inline bool
+    1321              :     operator!=(const std::independent_bits_engine<_RandomNumberEngine, __w,
+    1322              :                _UIntType>& __lhs,
+    1323              :                const std::independent_bits_engine<_RandomNumberEngine, __w,
+    1324              :                _UIntType>& __rhs)
+    1325              :     { return !(__lhs == __rhs); }
+    1326              : #endif
+    1327              : 
+    1328              :   /**
+    1329              :    * @brief Inserts the current state of a %independent_bits_engine random
+    1330              :    *        number generator engine @p __x into the output stream @p __os.
+    1331              :    *
+    1332              :    * @param __os An output stream.
+    1333              :    * @param __x  A %independent_bits_engine random number generator engine.
+    1334              :    *
+    1335              :    * @returns The output stream with the state of @p __x inserted or in
+    1336              :    *          an error state.
+    1337              :    */
+    1338              :   template<typename _RandomNumberEngine, size_t __w, typename _UIntType,
+    1339              :            typename _CharT, typename _Traits>
+    1340              :     std::basic_ostream<_CharT, _Traits>&
+    1341              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    1342              :                const std::independent_bits_engine<_RandomNumberEngine,
+    1343              :                __w, _UIntType>& __x)
+    1344              :     {
+    1345              :       __os << __x.base();
+    1346              :       return __os;
+    1347              :     }
+    1348              : 
+    1349              : 
+    1350              :   /**
+    1351              :    * @brief Produces random numbers by reordering random numbers from some
+    1352              :    * base engine.
+    1353              :    *
+    1354              :    * The values from the base engine are stored in a sequence of size @p __k
+    1355              :    * and shuffled by an algorithm that depends on those values.
+    1356              :    *
+    1357              :    * @headerfile random
+    1358              :    * @since C++11
+    1359              :    */
+    1360              :   template<typename _RandomNumberEngine, size_t __k>
+    1361              :     class shuffle_order_engine
+    1362              :     {
+    1363              :       static_assert(1u <= __k, "template argument substituting "
+    1364              :                     "__k out of bound");
+    1365              : 
+    1366              :     public:
+    1367              :       /** The type of the generated random value. */
+    1368              :       typedef typename _RandomNumberEngine::result_type result_type;
+    1369              : 
+    1370              :       template<typename _Sseq>
+    1371              :         using _If_seed_seq
+    1372              :           = __detail::_If_seed_seq_for<_Sseq, shuffle_order_engine,
+    1373              :                                        result_type>;
+    1374              : 
+    1375              :       static constexpr size_t table_size = __k;
+    1376              : 
+    1377              :       /**
+    1378              :        * @brief Constructs a default %shuffle_order_engine engine.
+    1379              :        *
+    1380              :        * The underlying engine is default constructed as well.
+    1381              :        */
+    1382              :       shuffle_order_engine()
+    1383              :       : _M_b()
+    1384              :       { _M_initialize(); }
+    1385              : 
+    1386              :       /**
+    1387              :        * @brief Copy constructs a %shuffle_order_engine engine.
+    1388              :        *
+    1389              :        * Copies an existing base class random number generator.
+    1390              :        * @param __rng An existing (base class) engine object.
+    1391              :        */
+    1392              :       explicit
+    1393              :       shuffle_order_engine(const _RandomNumberEngine& __rng)
+    1394              :       : _M_b(__rng)
+    1395              :       { _M_initialize(); }
+    1396              : 
+    1397              :       /**
+    1398              :        * @brief Move constructs a %shuffle_order_engine engine.
+    1399              :        *
+    1400              :        * Copies an existing base class random number generator.
+    1401              :        * @param __rng An existing (base class) engine object.
+    1402              :        */
+    1403              :       explicit
+    1404              :       shuffle_order_engine(_RandomNumberEngine&& __rng)
+    1405              :       : _M_b(std::move(__rng))
+    1406              :       { _M_initialize(); }
+    1407              : 
+    1408              :       /**
+    1409              :        * @brief Seed constructs a %shuffle_order_engine engine.
+    1410              :        *
+    1411              :        * Constructs the underlying generator engine seeded with @p __s.
+    1412              :        * @param __s A seed value for the base class engine.
+    1413              :        */
+    1414              :       explicit
+    1415              :       shuffle_order_engine(result_type __s)
+    1416              :       : _M_b(__s)
+    1417              :       { _M_initialize(); }
+    1418              : 
+    1419              :       /**
+    1420              :        * @brief Generator construct a %shuffle_order_engine engine.
+    1421              :        *
+    1422              :        * @param __q A seed sequence.
+    1423              :        */
+    1424              :       template<typename _Sseq, typename = _If_seed_seq<_Sseq>>
+    1425              :         explicit
+    1426              :         shuffle_order_engine(_Sseq& __q)
+    1427              :         : _M_b(__q)
+    1428              :         { _M_initialize(); }
+    1429              : 
+    1430              :       /**
+    1431              :        * @brief Reseeds the %shuffle_order_engine object with the default seed
+    1432              :                 for the underlying base class generator engine.
+    1433              :        */
+    1434              :       void
+    1435              :       seed()
+    1436              :       {
+    1437              :         _M_b.seed();
+    1438              :         _M_initialize();
+    1439              :       }
+    1440              : 
+    1441              :       /**
+    1442              :        * @brief Reseeds the %shuffle_order_engine object with the default seed
+    1443              :        *        for the underlying base class generator engine.
+    1444              :        */
+    1445              :       void
+    1446              :       seed(result_type __s)
+    1447              :       {
+    1448              :         _M_b.seed(__s);
+    1449              :         _M_initialize();
+    1450              :       }
+    1451              : 
+    1452              :       /**
+    1453              :        * @brief Reseeds the %shuffle_order_engine object with the given seed
+    1454              :        *        sequence.
+    1455              :        * @param __q A seed generator function.
+    1456              :        */
+    1457              :       template<typename _Sseq>
+    1458              :         _If_seed_seq<_Sseq>
+    1459              :         seed(_Sseq& __q)
+    1460              :         {
+    1461              :           _M_b.seed(__q);
+    1462              :           _M_initialize();
+    1463              :         }
+    1464              : 
+    1465              :       /**
+    1466              :        * Gets a const reference to the underlying generator engine object.
+    1467              :        */
+    1468              :       const _RandomNumberEngine&
+    1469              :       base() const noexcept
+    1470              :       { return _M_b; }
+    1471              : 
+    1472              :       /**
+    1473              :        * Gets the minimum value in the generated random number range.
+    1474              :        */
+    1475              :       static constexpr result_type
+    1476              :       min()
+    1477              :       { return _RandomNumberEngine::min(); }
+    1478              : 
+    1479              :       /**
+    1480              :        * Gets the maximum value in the generated random number range.
+    1481              :        */
+    1482              :       static constexpr result_type
+    1483              :       max()
+    1484              :       { return _RandomNumberEngine::max(); }
+    1485              : 
+    1486              :       /**
+    1487              :        * Discard a sequence of random numbers.
+    1488              :        */
+    1489              :       void
+    1490              :       discard(unsigned long long __z)
+    1491              :       {
+    1492              :         for (; __z != 0ULL; --__z)
+    1493              :           (*this)();
+    1494              :       }
+    1495              : 
+    1496              :       /**
+    1497              :        * Gets the next value in the generated random number sequence.
+    1498              :        */
+    1499              :       result_type
+    1500              :       operator()();
+    1501              : 
+    1502              :       /**
+    1503              :        * Compares two %shuffle_order_engine random number generator objects
+    1504              :        * of the same type for equality.
+    1505              :        *
+    1506              :        * @param __lhs A %shuffle_order_engine random number generator object.
+    1507              :        * @param __rhs Another %shuffle_order_engine random number generator
+    1508              :        *              object.
+    1509              :        *
+    1510              :        * @returns true if the infinite sequences of generated values
+    1511              :        *          would be equal, false otherwise.
+    1512              :       */
+    1513              :       friend bool
+    1514              :       operator==(const shuffle_order_engine& __lhs,
+    1515              :                  const shuffle_order_engine& __rhs)
+    1516              :       { return (__lhs._M_b == __rhs._M_b
+    1517              :                 && std::equal(__lhs._M_v, __lhs._M_v + __k, __rhs._M_v)
+    1518              :                 && __lhs._M_y == __rhs._M_y); }
+    1519              : 
+    1520              :       /**
+    1521              :        * @brief Inserts the current state of a %shuffle_order_engine random
+    1522              :        *        number generator engine @p __x into the output stream
+    1523              :         @p __os.
+    1524              :        *
+    1525              :        * @param __os An output stream.
+    1526              :        * @param __x  A %shuffle_order_engine random number generator engine.
+    1527              :        *
+    1528              :        * @returns The output stream with the state of @p __x inserted or in
+    1529              :        * an error state.
+    1530              :        */
+    1531              :       template<typename _RandomNumberEngine1, size_t __k1,
+    1532              :                typename _CharT, typename _Traits>
+    1533              :         friend std::basic_ostream<_CharT, _Traits>&
+    1534              :         operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    1535              :                    const std::shuffle_order_engine<_RandomNumberEngine1,
+    1536              :                    __k1>& __x);
+    1537              : 
+    1538              :       /**
+    1539              :        * @brief Extracts the current state of a % subtract_with_carry_engine
+    1540              :        *        random number generator engine @p __x from the input stream
+    1541              :        *        @p __is.
+    1542              :        *
+    1543              :        * @param __is An input stream.
+    1544              :        * @param __x  A %shuffle_order_engine random number generator engine.
+    1545              :        *
+    1546              :        * @returns The input stream with the state of @p __x extracted or in
+    1547              :        * an error state.
+    1548              :        */
+    1549              :       template<typename _RandomNumberEngine1, size_t __k1,
+    1550              :                typename _CharT, typename _Traits>
+    1551              :         friend std::basic_istream<_CharT, _Traits>&
+    1552              :         operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    1553              :                    std::shuffle_order_engine<_RandomNumberEngine1, __k1>& __x);
+    1554              : 
+    1555              :     private:
+    1556              :       void _M_initialize()
+    1557              :       {
+    1558              :         for (size_t __i = 0; __i < __k; ++__i)
+    1559              :           _M_v[__i] = _M_b();
+    1560              :         _M_y = _M_b();
+    1561              :       }
+    1562              : 
+    1563              :       _RandomNumberEngine _M_b;
+    1564              :       result_type _M_v[__k];
+    1565              :       result_type _M_y;
+    1566              :     };
+    1567              : 
+    1568              : #if __cpp_impl_three_way_comparison < 201907L
+    1569              :   /**
+    1570              :    * Compares two %shuffle_order_engine random number generator objects
+    1571              :    * of the same type for inequality.
+    1572              :    *
+    1573              :    * @param __lhs A %shuffle_order_engine random number generator object.
+    1574              :    * @param __rhs Another %shuffle_order_engine random number generator
+    1575              :    *              object.
+    1576              :    *
+    1577              :    * @returns true if the infinite sequences of generated values
+    1578              :    *          would be different, false otherwise.
+    1579              :    */
+    1580              :   template<typename _RandomNumberEngine, size_t __k>
+    1581              :     inline bool
+    1582              :     operator!=(const std::shuffle_order_engine<_RandomNumberEngine,
+    1583              :                __k>& __lhs,
+    1584              :                const std::shuffle_order_engine<_RandomNumberEngine,
+    1585              :                __k>& __rhs)
+    1586              :     { return !(__lhs == __rhs); }
+    1587              : #endif
+    1588              : 
+    1589              :   /**
+    1590              :    * The classic Minimum Standard rand0 of Lewis, Goodman, and Miller.
+    1591              :    */
+    1592              :   typedef linear_congruential_engine<uint_fast32_t, 16807UL, 0UL, 2147483647UL>
+    1593              :   minstd_rand0;
+    1594              : 
+    1595              :   /**
+    1596              :    * An alternative LCR (Lehmer Generator function).
+    1597              :    */
+    1598              :   typedef linear_congruential_engine<uint_fast32_t, 48271UL, 0UL, 2147483647UL>
+    1599              :   minstd_rand;
+    1600              : 
+    1601              :   /**
+    1602              :    * The classic Mersenne Twister.
+    1603              :    *
+    1604              :    * Reference:
+    1605              :    * M. Matsumoto and T. Nishimura, Mersenne Twister: A 623-Dimensionally
+    1606              :    * Equidistributed Uniform Pseudo-Random Number Generator, ACM Transactions
+    1607              :    * on Modeling and Computer Simulation, Vol. 8, No. 1, January 1998, pp 3-30.
+    1608              :    */
+    1609              :   typedef mersenne_twister_engine<
+    1610              :     uint_fast32_t,
+    1611              :     32, 624, 397, 31,
+    1612              :     0x9908b0dfUL, 11,
+    1613              :     0xffffffffUL, 7,
+    1614              :     0x9d2c5680UL, 15,
+    1615              :     0xefc60000UL, 18, 1812433253UL> mt19937;
+    1616              : 
+    1617              :   /**
+    1618              :    * An alternative Mersenne Twister.
+    1619              :    */
+    1620              :   typedef mersenne_twister_engine<
+    1621              :     uint_fast64_t,
+    1622              :     64, 312, 156, 31,
+    1623              :     0xb5026f5aa96619e9ULL, 29,
+    1624              :     0x5555555555555555ULL, 17,
+    1625              :     0x71d67fffeda60000ULL, 37,
+    1626              :     0xfff7eee000000000ULL, 43,
+    1627              :     6364136223846793005ULL> mt19937_64;
+    1628              : 
+    1629              :   typedef subtract_with_carry_engine<uint_fast32_t, 24, 10, 24>
+    1630              :     ranlux24_base;
+    1631              : 
+    1632              :   typedef subtract_with_carry_engine<uint_fast64_t, 48, 5, 12>
+    1633              :     ranlux48_base;
+    1634              : 
+    1635              :   typedef discard_block_engine<ranlux24_base, 223, 23> ranlux24;
+    1636              : 
+    1637              :   typedef discard_block_engine<ranlux48_base, 389, 11> ranlux48;
+    1638              : 
+    1639              :   typedef shuffle_order_engine<minstd_rand0, 256> knuth_b;
+    1640              : 
+    1641              :   typedef minstd_rand0 default_random_engine;
+    1642              : 
+    1643              :   /**
+    1644              :    * A standard interface to a platform-specific non-deterministic
+    1645              :    * random number generator (if any are available).
+    1646              :    *
+    1647              :    * @headerfile random
+    1648              :    * @since C++11
+    1649              :    */
+    1650              :   class random_device
+    1651              :   {
+    1652              :   public:
+    1653              :     /** The type of the generated random value. */
+    1654              :     typedef unsigned int result_type;
+    1655              : 
+    1656              :     // constructors, destructors and member functions
+    1657              : 
+    1658          756 :     random_device() { _M_init("default"); }
+    1659              : 
+    1660              :     explicit
+    1661              :     random_device(const std::string& __token) { _M_init(__token); }
+    1662              : 
+    1663          252 :     ~random_device()
+    1664          252 :     { _M_fini(); }
+    1665              : 
+    1666              :     static constexpr result_type
+    1667              :     min()
+    1668              :     { return std::numeric_limits<result_type>::min(); }
+    1669              : 
+    1670              :     static constexpr result_type
+    1671              :     max()
+    1672              :     { return std::numeric_limits<result_type>::max(); }
+    1673              : 
+    1674              :     double
+    1675              :     entropy() const noexcept
+    1676              :     { return this->_M_getentropy(); }
+    1677              : 
+    1678              :     result_type
+    1679            2 :     operator()()
+    1680            2 :     { return this->_M_getval(); }
+    1681              : 
+    1682              :     // No copy functions.
+    1683              :     random_device(const random_device&) = delete;
+    1684              :     void operator=(const random_device&) = delete;
+    1685              : 
+    1686              :   private:
+    1687              : 
+    1688              :     void _M_init(const std::string& __token);
+    1689              :     void _M_init_pretr1(const std::string& __token);
+    1690              :     void _M_fini();
+    1691              : 
+    1692              :     result_type _M_getval();
+    1693              :     result_type _M_getval_pretr1();
+    1694              :     double _M_getentropy() const noexcept;
+    1695              : 
+    1696              :     void _M_init(const char*, size_t); // not exported from the shared library
+    1697              : 
+    1698              :     __extension__ union
+    1699              :     {
+    1700              :       struct
+    1701              :       {
+    1702              :         void*      _M_file;
+    1703              :         result_type (*_M_func)(void*);
+    1704              :         int _M_fd;
+    1705              :       };
+    1706              :       mt19937    _M_mt;
+    1707              :     };
+    1708              :   };
+    1709              : 
+    1710              :   /// @} group random_generators
+    1711              : 
+    1712              :   /**
+    1713              :    * @addtogroup random_distributions Random Number Distributions
+    1714              :    * @ingroup random
+    1715              :    * @{
+    1716              :    */
+    1717              : 
+    1718              :   /**
+    1719              :    * @addtogroup random_distributions_uniform Uniform Distributions
+    1720              :    * @ingroup random_distributions
+    1721              :    * @{
+    1722              :    */
+    1723              : 
+    1724              :   // std::uniform_int_distribution is defined in <bits/uniform_int_dist.h>
+    1725              : 
+    1726              : #if __cpp_impl_three_way_comparison < 201907L
+    1727              :   /**
+    1728              :    * @brief Return true if two uniform integer distributions have
+    1729              :    *        different parameters.
+    1730              :    */
+    1731              :   template<typename _IntType>
+    1732              :     inline bool
+    1733              :     operator!=(const std::uniform_int_distribution<_IntType>& __d1,
+    1734              :                const std::uniform_int_distribution<_IntType>& __d2)
+    1735              :     { return !(__d1 == __d2); }
+    1736              : #endif
+    1737              : 
+    1738              :   /**
+    1739              :    * @brief Inserts a %uniform_int_distribution random number
+    1740              :    *        distribution @p __x into the output stream @p os.
+    1741              :    *
+    1742              :    * @param __os An output stream.
+    1743              :    * @param __x  A %uniform_int_distribution random number distribution.
+    1744              :    *
+    1745              :    * @returns The output stream with the state of @p __x inserted or in
+    1746              :    * an error state.
+    1747              :    */
+    1748              :   template<typename _IntType, typename _CharT, typename _Traits>
+    1749              :     std::basic_ostream<_CharT, _Traits>&
+    1750              :     operator<<(std::basic_ostream<_CharT, _Traits>&,
+    1751              :                const std::uniform_int_distribution<_IntType>&);
+    1752              : 
+    1753              :   /**
+    1754              :    * @brief Extracts a %uniform_int_distribution random number distribution
+    1755              :    * @p __x from the input stream @p __is.
+    1756              :    *
+    1757              :    * @param __is An input stream.
+    1758              :    * @param __x  A %uniform_int_distribution random number generator engine.
+    1759              :    *
+    1760              :    * @returns The input stream with @p __x extracted or in an error state.
+    1761              :    */
+    1762              :   template<typename _IntType, typename _CharT, typename _Traits>
+    1763              :     std::basic_istream<_CharT, _Traits>&
+    1764              :     operator>>(std::basic_istream<_CharT, _Traits>&,
+    1765              :                std::uniform_int_distribution<_IntType>&);
+    1766              : 
+    1767              : 
+    1768              :   /**
+    1769              :    * @brief Uniform continuous distribution for random numbers.
+    1770              :    *
+    1771              :    * A continuous random distribution on the range [min, max) with equal
+    1772              :    * probability throughout the range.  The URNG should be real-valued and
+    1773              :    * deliver number in the range [0, 1).
+    1774              :    *
+    1775              :    * @headerfile random
+    1776              :    * @since C++11
+    1777              :    */
+    1778              :   template<typename _RealType = double>
+    1779              :     class uniform_real_distribution
+    1780              :     {
+    1781              :       static_assert(std::is_floating_point<_RealType>::value,
+    1782              :                     "result_type must be a floating point type");
+    1783              : 
+    1784              :     public:
+    1785              :       /** The type of the range of the distribution. */
+    1786              :       typedef _RealType result_type;
+    1787              : 
+    1788              :       /** Parameter type. */
+    1789              :       struct param_type
+    1790              :       {
+    1791              :         typedef uniform_real_distribution<_RealType> distribution_type;
+    1792              : 
+    1793              :         param_type() : param_type(0) { }
+    1794              : 
+    1795              :         explicit
+    1796              :         param_type(_RealType __a, _RealType __b = _RealType(1))
+    1797              :         : _M_a(__a), _M_b(__b)
+    1798              :         {
+    1799              :           __glibcxx_assert(_M_a <= _M_b);
+    1800              :         }
+    1801              : 
+    1802              :         result_type
+    1803              :         a() const
+    1804              :         { return _M_a; }
+    1805              : 
+    1806              :         result_type
+    1807              :         b() const
+    1808              :         { return _M_b; }
+    1809              : 
+    1810              :         friend bool
+    1811              :         operator==(const param_type& __p1, const param_type& __p2)
+    1812              :         { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; }
+    1813              : 
+    1814              : #if __cpp_impl_three_way_comparison < 201907L
+    1815              :         friend bool
+    1816              :         operator!=(const param_type& __p1, const param_type& __p2)
+    1817              :         { return !(__p1 == __p2); }
+    1818              : #endif
+    1819              : 
+    1820              :       private:
+    1821              :         _RealType _M_a;
+    1822              :         _RealType _M_b;
+    1823              :       };
+    1824              : 
+    1825              :     public:
+    1826              :       /**
+    1827              :        * @brief Constructs a uniform_real_distribution object.
+    1828              :        *
+    1829              :        * The lower bound is set to 0.0 and the upper bound to 1.0
+    1830              :        */
+    1831              :       uniform_real_distribution() : uniform_real_distribution(0.0) { }
+    1832              : 
+    1833              :       /**
+    1834              :        * @brief Constructs a uniform_real_distribution object.
+    1835              :        *
+    1836              :        * @param __a [IN]  The lower bound of the distribution.
+    1837              :        * @param __b [IN]  The upper bound of the distribution.
+    1838              :        */
+    1839              :       explicit
+    1840              :       uniform_real_distribution(_RealType __a, _RealType __b = _RealType(1))
+    1841              :       : _M_param(__a, __b)
+    1842              :       { }
+    1843              : 
+    1844              :       explicit
+    1845              :       uniform_real_distribution(const param_type& __p)
+    1846              :       : _M_param(__p)
+    1847              :       { }
+    1848              : 
+    1849              :       /**
+    1850              :        * @brief Resets the distribution state.
+    1851              :        *
+    1852              :        * Does nothing for the uniform real distribution.
+    1853              :        */
+    1854              :       void
+    1855              :       reset() { }
+    1856              : 
+    1857              :       result_type
+    1858              :       a() const
+    1859              :       { return _M_param.a(); }
+    1860              : 
+    1861              :       result_type
+    1862              :       b() const
+    1863              :       { return _M_param.b(); }
+    1864              : 
+    1865              :       /**
+    1866              :        * @brief Returns the parameter set of the distribution.
+    1867              :        */
+    1868              :       param_type
+    1869              :       param() const
+    1870              :       { return _M_param; }
+    1871              : 
+    1872              :       /**
+    1873              :        * @brief Sets the parameter set of the distribution.
+    1874              :        * @param __param The new parameter set of the distribution.
+    1875              :        */
+    1876              :       void
+    1877              :       param(const param_type& __param)
+    1878              :       { _M_param = __param; }
+    1879              : 
+    1880              :       /**
+    1881              :        * @brief Returns the inclusive lower bound of the distribution range.
+    1882              :        */
+    1883              :       result_type
+    1884              :       min() const
+    1885              :       { return this->a(); }
+    1886              : 
+    1887              :       /**
+    1888              :        * @brief Returns the inclusive upper bound of the distribution range.
+    1889              :        */
+    1890              :       result_type
+    1891              :       max() const
+    1892              :       { return this->b(); }
+    1893              : 
+    1894              :       /**
+    1895              :        * @brief Generating functions.
+    1896              :        */
+    1897              :       template<typename _UniformRandomNumberGenerator>
+    1898              :         result_type
+    1899              :         operator()(_UniformRandomNumberGenerator& __urng)
+    1900              :         { return this->operator()(__urng, _M_param); }
+    1901              : 
+    1902              :       template<typename _UniformRandomNumberGenerator>
+    1903              :         result_type
+    1904              :         operator()(_UniformRandomNumberGenerator& __urng,
+    1905              :                    const param_type& __p)
+    1906              :         {
+    1907              :           __detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
+    1908              :             __aurng(__urng);
+    1909              :           return (__aurng() * (__p.b() - __p.a())) + __p.a();
+    1910              :         }
+    1911              : 
+    1912              :       template<typename _ForwardIterator,
+    1913              :                typename _UniformRandomNumberGenerator>
+    1914              :         void
+    1915              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    1916              :                    _UniformRandomNumberGenerator& __urng)
+    1917              :         { this->__generate(__f, __t, __urng, _M_param); }
+    1918              : 
+    1919              :       template<typename _ForwardIterator,
+    1920              :                typename _UniformRandomNumberGenerator>
+    1921              :         void
+    1922              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    1923              :                    _UniformRandomNumberGenerator& __urng,
+    1924              :                    const param_type& __p)
+    1925              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    1926              : 
+    1927              :       template<typename _UniformRandomNumberGenerator>
+    1928              :         void
+    1929              :         __generate(result_type* __f, result_type* __t,
+    1930              :                    _UniformRandomNumberGenerator& __urng,
+    1931              :                    const param_type& __p)
+    1932              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    1933              : 
+    1934              :       /**
+    1935              :        * @brief Return true if two uniform real distributions have
+    1936              :        *        the same parameters.
+    1937              :        */
+    1938              :       friend bool
+    1939              :       operator==(const uniform_real_distribution& __d1,
+    1940              :                  const uniform_real_distribution& __d2)
+    1941              :       { return __d1._M_param == __d2._M_param; }
+    1942              : 
+    1943              :     private:
+    1944              :       template<typename _ForwardIterator,
+    1945              :                typename _UniformRandomNumberGenerator>
+    1946              :         void
+    1947              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    1948              :                         _UniformRandomNumberGenerator& __urng,
+    1949              :                         const param_type& __p);
+    1950              : 
+    1951              :       param_type _M_param;
+    1952              :     };
+    1953              : 
+    1954              : #if __cpp_impl_three_way_comparison < 201907L
+    1955              :   /**
+    1956              :    * @brief Return true if two uniform real distributions have
+    1957              :    *        different parameters.
+    1958              :    */
+    1959              :   template<typename _IntType>
+    1960              :     inline bool
+    1961              :     operator!=(const std::uniform_real_distribution<_IntType>& __d1,
+    1962              :                const std::uniform_real_distribution<_IntType>& __d2)
+    1963              :     { return !(__d1 == __d2); }
+    1964              : #endif
+    1965              : 
+    1966              :   /**
+    1967              :    * @brief Inserts a %uniform_real_distribution random number
+    1968              :    *        distribution @p __x into the output stream @p __os.
+    1969              :    *
+    1970              :    * @param __os An output stream.
+    1971              :    * @param __x  A %uniform_real_distribution random number distribution.
+    1972              :    *
+    1973              :    * @returns The output stream with the state of @p __x inserted or in
+    1974              :    *          an error state.
+    1975              :    */
+    1976              :   template<typename _RealType, typename _CharT, typename _Traits>
+    1977              :     std::basic_ostream<_CharT, _Traits>&
+    1978              :     operator<<(std::basic_ostream<_CharT, _Traits>&,
+    1979              :                const std::uniform_real_distribution<_RealType>&);
+    1980              : 
+    1981              :   /**
+    1982              :    * @brief Extracts a %uniform_real_distribution random number distribution
+    1983              :    * @p __x from the input stream @p __is.
+    1984              :    *
+    1985              :    * @param __is An input stream.
+    1986              :    * @param __x  A %uniform_real_distribution random number generator engine.
+    1987              :    *
+    1988              :    * @returns The input stream with @p __x extracted or in an error state.
+    1989              :    */
+    1990              :   template<typename _RealType, typename _CharT, typename _Traits>
+    1991              :     std::basic_istream<_CharT, _Traits>&
+    1992              :     operator>>(std::basic_istream<_CharT, _Traits>&,
+    1993              :                std::uniform_real_distribution<_RealType>&);
+    1994              : 
+    1995              :   /// @} group random_distributions_uniform
+    1996              : 
+    1997              :   /**
+    1998              :    * @addtogroup random_distributions_normal Normal Distributions
+    1999              :    * @ingroup random_distributions
+    2000              :    * @{
+    2001              :    */
+    2002              : 
+    2003              :   /**
+    2004              :    * @brief A normal continuous distribution for random numbers.
+    2005              :    *
+    2006              :    * The formula for the normal probability density function is
+    2007              :    * @f[
+    2008              :    *     p(x|\mu,\sigma) = \frac{1}{\sigma \sqrt{2 \pi}}
+    2009              :    *            e^{- \frac{{x - \mu}^ {2}}{2 \sigma ^ {2}} } 
+    2010              :    * @f]
+    2011              :    *
+    2012              :    * @headerfile random
+    2013              :    * @since C++11
+    2014              :    */
+    2015              :   template<typename _RealType = double>
+    2016              :     class normal_distribution
+    2017              :     {
+    2018              :       static_assert(std::is_floating_point<_RealType>::value,
+    2019              :                     "result_type must be a floating point type");
+    2020              : 
+    2021              :     public:
+    2022              :       /** The type of the range of the distribution. */
+    2023              :       typedef _RealType result_type;
+    2024              : 
+    2025              :       /** Parameter type. */
+    2026              :       struct param_type
+    2027              :       {
+    2028              :         typedef normal_distribution<_RealType> distribution_type;
+    2029              : 
+    2030              :         param_type() : param_type(0.0) { }
+    2031              : 
+    2032              :         explicit
+    2033              :         param_type(_RealType __mean, _RealType __stddev = _RealType(1))
+    2034              :         : _M_mean(__mean), _M_stddev(__stddev)
+    2035              :         {
+    2036              :           __glibcxx_assert(_M_stddev > _RealType(0));
+    2037              :         }
+    2038              : 
+    2039              :         _RealType
+    2040              :         mean() const
+    2041              :         { return _M_mean; }
+    2042              : 
+    2043              :         _RealType
+    2044              :         stddev() const
+    2045              :         { return _M_stddev; }
+    2046              : 
+    2047              :         friend bool
+    2048              :         operator==(const param_type& __p1, const param_type& __p2)
+    2049              :         { return (__p1._M_mean == __p2._M_mean
+    2050              :                   && __p1._M_stddev == __p2._M_stddev); }
+    2051              : 
+    2052              : #if __cpp_impl_three_way_comparison < 201907L
+    2053              :         friend bool
+    2054              :         operator!=(const param_type& __p1, const param_type& __p2)
+    2055              :         { return !(__p1 == __p2); }
+    2056              : #endif
+    2057              : 
+    2058              :       private:
+    2059              :         _RealType _M_mean;
+    2060              :         _RealType _M_stddev;
+    2061              :       };
+    2062              : 
+    2063              :     public:
+    2064              :       normal_distribution() : normal_distribution(0.0) { }
+    2065              : 
+    2066              :       /**
+    2067              :        * Constructs a normal distribution with parameters @f$mean@f$ and
+    2068              :        * standard deviation.
+    2069              :        */
+    2070              :       explicit
+    2071              :       normal_distribution(result_type __mean,
+    2072              :                           result_type __stddev = result_type(1))
+    2073              :       : _M_param(__mean, __stddev)
+    2074              :       { }
+    2075              : 
+    2076              :       explicit
+    2077              :       normal_distribution(const param_type& __p)
+    2078              :       : _M_param(__p)
+    2079              :       { }
+    2080              : 
+    2081              :       /**
+    2082              :        * @brief Resets the distribution state.
+    2083              :        */
+    2084              :       void
+    2085              :       reset()
+    2086              :       { _M_saved_available = false; }
+    2087              : 
+    2088              :       /**
+    2089              :        * @brief Returns the mean of the distribution.
+    2090              :        */
+    2091              :       _RealType
+    2092              :       mean() const
+    2093              :       { return _M_param.mean(); }
+    2094              : 
+    2095              :       /**
+    2096              :        * @brief Returns the standard deviation of the distribution.
+    2097              :        */
+    2098              :       _RealType
+    2099              :       stddev() const
+    2100              :       { return _M_param.stddev(); }
+    2101              : 
+    2102              :       /**
+    2103              :        * @brief Returns the parameter set of the distribution.
+    2104              :        */
+    2105              :       param_type
+    2106              :       param() const
+    2107              :       { return _M_param; }
+    2108              : 
+    2109              :       /**
+    2110              :        * @brief Sets the parameter set of the distribution.
+    2111              :        * @param __param The new parameter set of the distribution.
+    2112              :        */
+    2113              :       void
+    2114              :       param(const param_type& __param)
+    2115              :       { _M_param = __param; }
+    2116              : 
+    2117              :       /**
+    2118              :        * @brief Returns the greatest lower bound value of the distribution.
+    2119              :        */
+    2120              :       result_type
+    2121              :       min() const
+    2122              :       { return std::numeric_limits<result_type>::lowest(); }
+    2123              : 
+    2124              :       /**
+    2125              :        * @brief Returns the least upper bound value of the distribution.
+    2126              :        */
+    2127              :       result_type
+    2128              :       max() const
+    2129              :       { return std::numeric_limits<result_type>::max(); }
+    2130              : 
+    2131              :       /**
+    2132              :        * @brief Generating functions.
+    2133              :        */
+    2134              :       template<typename _UniformRandomNumberGenerator>
+    2135              :         result_type
+    2136              :         operator()(_UniformRandomNumberGenerator& __urng)
+    2137              :         { return this->operator()(__urng, _M_param); }
+    2138              : 
+    2139              :       template<typename _UniformRandomNumberGenerator>
+    2140              :         result_type
+    2141              :         operator()(_UniformRandomNumberGenerator& __urng,
+    2142              :                    const param_type& __p);
+    2143              : 
+    2144              :       template<typename _ForwardIterator,
+    2145              :                typename _UniformRandomNumberGenerator>
+    2146              :         void
+    2147              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    2148              :                    _UniformRandomNumberGenerator& __urng)
+    2149              :         { this->__generate(__f, __t, __urng, _M_param); }
+    2150              : 
+    2151              :       template<typename _ForwardIterator,
+    2152              :                typename _UniformRandomNumberGenerator>
+    2153              :         void
+    2154              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    2155              :                    _UniformRandomNumberGenerator& __urng,
+    2156              :                    const param_type& __p)
+    2157              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    2158              : 
+    2159              :       template<typename _UniformRandomNumberGenerator>
+    2160              :         void
+    2161              :         __generate(result_type* __f, result_type* __t,
+    2162              :                    _UniformRandomNumberGenerator& __urng,
+    2163              :                    const param_type& __p)
+    2164              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    2165              : 
+    2166              :       /**
+    2167              :        * @brief Return true if two normal distributions have
+    2168              :        *        the same parameters and the sequences that would
+    2169              :        *        be generated are equal.
+    2170              :        */
+    2171              :       template<typename _RealType1>
+    2172              :         friend bool
+    2173              :         operator==(const std::normal_distribution<_RealType1>& __d1,
+    2174              :                    const std::normal_distribution<_RealType1>& __d2);
+    2175              : 
+    2176              :       /**
+    2177              :        * @brief Inserts a %normal_distribution random number distribution
+    2178              :        * @p __x into the output stream @p __os.
+    2179              :        *
+    2180              :        * @param __os An output stream.
+    2181              :        * @param __x  A %normal_distribution random number distribution.
+    2182              :        *
+    2183              :        * @returns The output stream with the state of @p __x inserted or in
+    2184              :        * an error state.
+    2185              :        */
+    2186              :       template<typename _RealType1, typename _CharT, typename _Traits>
+    2187              :         friend std::basic_ostream<_CharT, _Traits>&
+    2188              :         operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    2189              :                    const std::normal_distribution<_RealType1>& __x);
+    2190              : 
+    2191              :       /**
+    2192              :        * @brief Extracts a %normal_distribution random number distribution
+    2193              :        * @p __x from the input stream @p __is.
+    2194              :        *
+    2195              :        * @param __is An input stream.
+    2196              :        * @param __x  A %normal_distribution random number generator engine.
+    2197              :        *
+    2198              :        * @returns The input stream with @p __x extracted or in an error
+    2199              :        *          state.
+    2200              :        */
+    2201              :       template<typename _RealType1, typename _CharT, typename _Traits>
+    2202              :         friend std::basic_istream<_CharT, _Traits>&
+    2203              :         operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    2204              :                    std::normal_distribution<_RealType1>& __x);
+    2205              : 
+    2206              :     private:
+    2207              :       template<typename _ForwardIterator,
+    2208              :                typename _UniformRandomNumberGenerator>
+    2209              :         void
+    2210              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    2211              :                         _UniformRandomNumberGenerator& __urng,
+    2212              :                         const param_type& __p);
+    2213              : 
+    2214              :       param_type  _M_param;
+    2215              :       result_type _M_saved = 0;
+    2216              :       bool        _M_saved_available = false;
+    2217              :     };
+    2218              : 
+    2219              : #if __cpp_impl_three_way_comparison < 201907L
+    2220              :   /**
+    2221              :    * @brief Return true if two normal distributions are different.
+    2222              :    */
+    2223              :   template<typename _RealType>
+    2224              :     inline bool
+    2225              :     operator!=(const std::normal_distribution<_RealType>& __d1,
+    2226              :                const std::normal_distribution<_RealType>& __d2)
+    2227              :     { return !(__d1 == __d2); }
+    2228              : #endif
+    2229              : 
+    2230              :   /**
+    2231              :    * @brief A lognormal_distribution random number distribution.
+    2232              :    *
+    2233              :    * The formula for the normal probability mass function is
+    2234              :    * @f[
+    2235              :    *     p(x|m,s) = \frac{1}{sx\sqrt{2\pi}}
+    2236              :    *                \exp{-\frac{(\ln{x} - m)^2}{2s^2}} 
+    2237              :    * @f]
+    2238              :    *
+    2239              :    * @headerfile random
+    2240              :    * @since C++11
+    2241              :    */
+    2242              :   template<typename _RealType = double>
+    2243              :     class lognormal_distribution
+    2244              :     {
+    2245              :       static_assert(std::is_floating_point<_RealType>::value,
+    2246              :                     "result_type must be a floating point type");
+    2247              : 
+    2248              :     public:
+    2249              :       /** The type of the range of the distribution. */
+    2250              :       typedef _RealType result_type;
+    2251              : 
+    2252              :       /** Parameter type. */
+    2253              :       struct param_type
+    2254              :       {
+    2255              :         typedef lognormal_distribution<_RealType> distribution_type;
+    2256              : 
+    2257              :         param_type() : param_type(0.0) { }
+    2258              : 
+    2259              :         explicit
+    2260              :         param_type(_RealType __m, _RealType __s = _RealType(1))
+    2261              :         : _M_m(__m), _M_s(__s)
+    2262              :         { }
+    2263              : 
+    2264              :         _RealType
+    2265              :         m() const
+    2266              :         { return _M_m; }
+    2267              : 
+    2268              :         _RealType
+    2269              :         s() const
+    2270              :         { return _M_s; }
+    2271              : 
+    2272              :         friend bool
+    2273              :         operator==(const param_type& __p1, const param_type& __p2)
+    2274              :         { return __p1._M_m == __p2._M_m && __p1._M_s == __p2._M_s; }
+    2275              : 
+    2276              : #if __cpp_impl_three_way_comparison < 201907L
+    2277              :         friend bool
+    2278              :         operator!=(const param_type& __p1, const param_type& __p2)
+    2279              :         { return !(__p1 == __p2); }
+    2280              : #endif
+    2281              : 
+    2282              :       private:
+    2283              :         _RealType _M_m;
+    2284              :         _RealType _M_s;
+    2285              :       };
+    2286              : 
+    2287              :       lognormal_distribution() : lognormal_distribution(0.0) { }
+    2288              : 
+    2289              :       explicit
+    2290              :       lognormal_distribution(_RealType __m, _RealType __s = _RealType(1))
+    2291              :       : _M_param(__m, __s), _M_nd()
+    2292              :       { }
+    2293              : 
+    2294              :       explicit
+    2295              :       lognormal_distribution(const param_type& __p)
+    2296              :       : _M_param(__p), _M_nd()
+    2297              :       { }
+    2298              : 
+    2299              :       /**
+    2300              :        * Resets the distribution state.
+    2301              :        */
+    2302              :       void
+    2303              :       reset()
+    2304              :       { _M_nd.reset(); }
+    2305              : 
+    2306              :       /**
+    2307              :        *
+    2308              :        */
+    2309              :       _RealType
+    2310              :       m() const
+    2311              :       { return _M_param.m(); }
+    2312              : 
+    2313              :       _RealType
+    2314              :       s() const
+    2315              :       { return _M_param.s(); }
+    2316              : 
+    2317              :       /**
+    2318              :        * @brief Returns the parameter set of the distribution.
+    2319              :        */
+    2320              :       param_type
+    2321              :       param() const
+    2322              :       { return _M_param; }
+    2323              : 
+    2324              :       /**
+    2325              :        * @brief Sets the parameter set of the distribution.
+    2326              :        * @param __param The new parameter set of the distribution.
+    2327              :        */
+    2328              :       void
+    2329              :       param(const param_type& __param)
+    2330              :       { _M_param = __param; }
+    2331              : 
+    2332              :       /**
+    2333              :        * @brief Returns the greatest lower bound value of the distribution.
+    2334              :        */
+    2335              :       result_type
+    2336              :       min() const
+    2337              :       { return result_type(0); }
+    2338              : 
+    2339              :       /**
+    2340              :        * @brief Returns the least upper bound value of the distribution.
+    2341              :        */
+    2342              :       result_type
+    2343              :       max() const
+    2344              :       { return std::numeric_limits<result_type>::max(); }
+    2345              : 
+    2346              :       /**
+    2347              :        * @brief Generating functions.
+    2348              :        */
+    2349              :       template<typename _UniformRandomNumberGenerator>
+    2350              :         result_type
+    2351              :         operator()(_UniformRandomNumberGenerator& __urng)
+    2352              :         { return this->operator()(__urng, _M_param); }
+    2353              : 
+    2354              :       template<typename _UniformRandomNumberGenerator>
+    2355              :         result_type
+    2356              :         operator()(_UniformRandomNumberGenerator& __urng,
+    2357              :                    const param_type& __p)
+    2358              :         { return std::exp(__p.s() * _M_nd(__urng) + __p.m()); }
+    2359              : 
+    2360              :       template<typename _ForwardIterator,
+    2361              :                typename _UniformRandomNumberGenerator>
+    2362              :         void
+    2363              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    2364              :                    _UniformRandomNumberGenerator& __urng)
+    2365              :         { this->__generate(__f, __t, __urng, _M_param); }
+    2366              : 
+    2367              :       template<typename _ForwardIterator,
+    2368              :                typename _UniformRandomNumberGenerator>
+    2369              :         void
+    2370              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    2371              :                    _UniformRandomNumberGenerator& __urng,
+    2372              :                    const param_type& __p)
+    2373              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    2374              : 
+    2375              :       template<typename _UniformRandomNumberGenerator>
+    2376              :         void
+    2377              :         __generate(result_type* __f, result_type* __t,
+    2378              :                    _UniformRandomNumberGenerator& __urng,
+    2379              :                    const param_type& __p)
+    2380              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    2381              : 
+    2382              :       /**
+    2383              :        * @brief Return true if two lognormal distributions have
+    2384              :        *        the same parameters and the sequences that would
+    2385              :        *        be generated are equal.
+    2386              :        */
+    2387              :       friend bool
+    2388              :       operator==(const lognormal_distribution& __d1,
+    2389              :                  const lognormal_distribution& __d2)
+    2390              :       { return (__d1._M_param == __d2._M_param
+    2391              :                 && __d1._M_nd == __d2._M_nd); }
+    2392              : 
+    2393              :       /**
+    2394              :        * @brief Inserts a %lognormal_distribution random number distribution
+    2395              :        * @p __x into the output stream @p __os.
+    2396              :        *
+    2397              :        * @param __os An output stream.
+    2398              :        * @param __x  A %lognormal_distribution random number distribution.
+    2399              :        *
+    2400              :        * @returns The output stream with the state of @p __x inserted or in
+    2401              :        * an error state.
+    2402              :        */
+    2403              :       template<typename _RealType1, typename _CharT, typename _Traits>
+    2404              :         friend std::basic_ostream<_CharT, _Traits>&
+    2405              :         operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    2406              :                    const std::lognormal_distribution<_RealType1>& __x);
+    2407              : 
+    2408              :       /**
+    2409              :        * @brief Extracts a %lognormal_distribution random number distribution
+    2410              :        * @p __x from the input stream @p __is.
+    2411              :        *
+    2412              :        * @param __is An input stream.
+    2413              :        * @param __x A %lognormal_distribution random number
+    2414              :        *            generator engine.
+    2415              :        *
+    2416              :        * @returns The input stream with @p __x extracted or in an error state.
+    2417              :        */
+    2418              :       template<typename _RealType1, typename _CharT, typename _Traits>
+    2419              :         friend std::basic_istream<_CharT, _Traits>&
+    2420              :         operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    2421              :                    std::lognormal_distribution<_RealType1>& __x);
+    2422              : 
+    2423              :     private:
+    2424              :       template<typename _ForwardIterator,
+    2425              :                typename _UniformRandomNumberGenerator>
+    2426              :         void
+    2427              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    2428              :                         _UniformRandomNumberGenerator& __urng,
+    2429              :                         const param_type& __p);
+    2430              : 
+    2431              :       param_type _M_param;
+    2432              : 
+    2433              :       std::normal_distribution<result_type> _M_nd;
+    2434              :     };
+    2435              : 
+    2436              : #if __cpp_impl_three_way_comparison < 201907L
+    2437              :   /**
+    2438              :    * @brief Return true if two lognormal distributions are different.
+    2439              :    */
+    2440              :   template<typename _RealType>
+    2441              :     inline bool
+    2442              :     operator!=(const std::lognormal_distribution<_RealType>& __d1,
+    2443              :                const std::lognormal_distribution<_RealType>& __d2)
+    2444              :     { return !(__d1 == __d2); }
+    2445              : #endif
+    2446              : 
+    2447              :   /// @} group random_distributions_normal
+    2448              : 
+    2449              :   /**
+    2450              :    * @addtogroup random_distributions_poisson Poisson Distributions
+    2451              :    * @ingroup random_distributions
+    2452              :    * @{
+    2453              :    */
+    2454              : 
+    2455              :   /**
+    2456              :    * @brief A gamma continuous distribution for random numbers.
+    2457              :    *
+    2458              :    * The formula for the gamma probability density function is:
+    2459              :    * @f[
+    2460              :    *     p(x|\alpha,\beta) = \frac{1}{\beta\Gamma(\alpha)}
+    2461              :    *                         (x/\beta)^{\alpha - 1} e^{-x/\beta} 
+    2462              :    * @f]
+    2463              :    *
+    2464              :    * @headerfile random
+    2465              :    * @since C++11
+    2466              :    */
+    2467              :   template<typename _RealType = double>
+    2468              :     class gamma_distribution
+    2469              :     {
+    2470              :       static_assert(std::is_floating_point<_RealType>::value,
+    2471              :                     "result_type must be a floating point type");
+    2472              : 
+    2473              :     public:
+    2474              :       /** The type of the range of the distribution. */
+    2475              :       typedef _RealType result_type;
+    2476              : 
+    2477              :       /** Parameter type. */
+    2478              :       struct param_type
+    2479              :       {
+    2480              :         typedef gamma_distribution<_RealType> distribution_type;
+    2481              :         friend class gamma_distribution<_RealType>;
+    2482              : 
+    2483              :         param_type() : param_type(1.0) { }
+    2484              : 
+    2485              :         explicit
+    2486              :         param_type(_RealType __alpha_val, _RealType __beta_val = _RealType(1))
+    2487              :         : _M_alpha(__alpha_val), _M_beta(__beta_val)
+    2488              :         {
+    2489              :           __glibcxx_assert(_M_alpha > _RealType(0));
+    2490              :           _M_initialize();
+    2491              :         }
+    2492              : 
+    2493              :         _RealType
+    2494              :         alpha() const
+    2495              :         { return _M_alpha; }
+    2496              : 
+    2497              :         _RealType
+    2498              :         beta() const
+    2499              :         { return _M_beta; }
+    2500              : 
+    2501              :         friend bool
+    2502              :         operator==(const param_type& __p1, const param_type& __p2)
+    2503              :         { return (__p1._M_alpha == __p2._M_alpha
+    2504              :                   && __p1._M_beta == __p2._M_beta); }
+    2505              : 
+    2506              : #if __cpp_impl_three_way_comparison < 201907L
+    2507              :         friend bool
+    2508              :         operator!=(const param_type& __p1, const param_type& __p2)
+    2509              :         { return !(__p1 == __p2); }
+    2510              : #endif
+    2511              : 
+    2512              :       private:
+    2513              :         void
+    2514              :         _M_initialize();
+    2515              : 
+    2516              :         _RealType _M_alpha;
+    2517              :         _RealType _M_beta;
+    2518              : 
+    2519              :         _RealType _M_malpha, _M_a2;
+    2520              :       };
+    2521              : 
+    2522              :     public:
+    2523              :       /**
+    2524              :        * @brief Constructs a gamma distribution with parameters 1 and 1.
+    2525              :        */
+    2526              :       gamma_distribution() : gamma_distribution(1.0) { }
+    2527              : 
+    2528              :       /**
+    2529              :        * @brief Constructs a gamma distribution with parameters
+    2530              :        * @f$\alpha@f$ and @f$\beta@f$.
+    2531              :        */
+    2532              :       explicit
+    2533              :       gamma_distribution(_RealType __alpha_val,
+    2534              :                          _RealType __beta_val = _RealType(1))
+    2535              :       : _M_param(__alpha_val, __beta_val), _M_nd()
+    2536              :       { }
+    2537              : 
+    2538              :       explicit
+    2539              :       gamma_distribution(const param_type& __p)
+    2540              :       : _M_param(__p), _M_nd()
+    2541              :       { }
+    2542              : 
+    2543              :       /**
+    2544              :        * @brief Resets the distribution state.
+    2545              :        */
+    2546              :       void
+    2547              :       reset()
+    2548              :       { _M_nd.reset(); }
+    2549              : 
+    2550              :       /**
+    2551              :        * @brief Returns the @f$\alpha@f$ of the distribution.
+    2552              :        */
+    2553              :       _RealType
+    2554              :       alpha() const
+    2555              :       { return _M_param.alpha(); }
+    2556              : 
+    2557              :       /**
+    2558              :        * @brief Returns the @f$\beta@f$ of the distribution.
+    2559              :        */
+    2560              :       _RealType
+    2561              :       beta() const
+    2562              :       { return _M_param.beta(); }
+    2563              : 
+    2564              :       /**
+    2565              :        * @brief Returns the parameter set of the distribution.
+    2566              :        */
+    2567              :       param_type
+    2568              :       param() const
+    2569              :       { return _M_param; }
+    2570              : 
+    2571              :       /**
+    2572              :        * @brief Sets the parameter set of the distribution.
+    2573              :        * @param __param The new parameter set of the distribution.
+    2574              :        */
+    2575              :       void
+    2576              :       param(const param_type& __param)
+    2577              :       { _M_param = __param; }
+    2578              : 
+    2579              :       /**
+    2580              :        * @brief Returns the greatest lower bound value of the distribution.
+    2581              :        */
+    2582              :       result_type
+    2583              :       min() const
+    2584              :       { return result_type(0); }
+    2585              : 
+    2586              :       /**
+    2587              :        * @brief Returns the least upper bound value of the distribution.
+    2588              :        */
+    2589              :       result_type
+    2590              :       max() const
+    2591              :       { return std::numeric_limits<result_type>::max(); }
+    2592              : 
+    2593              :       /**
+    2594              :        * @brief Generating functions.
+    2595              :        */
+    2596              :       template<typename _UniformRandomNumberGenerator>
+    2597              :         result_type
+    2598              :         operator()(_UniformRandomNumberGenerator& __urng)
+    2599              :         { return this->operator()(__urng, _M_param); }
+    2600              : 
+    2601              :       template<typename _UniformRandomNumberGenerator>
+    2602              :         result_type
+    2603              :         operator()(_UniformRandomNumberGenerator& __urng,
+    2604              :                    const param_type& __p);
+    2605              : 
+    2606              :       template<typename _ForwardIterator,
+    2607              :                typename _UniformRandomNumberGenerator>
+    2608              :         void
+    2609              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    2610              :                    _UniformRandomNumberGenerator& __urng)
+    2611              :         { this->__generate(__f, __t, __urng, _M_param); }
+    2612              : 
+    2613              :       template<typename _ForwardIterator,
+    2614              :                typename _UniformRandomNumberGenerator>
+    2615              :         void
+    2616              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    2617              :                    _UniformRandomNumberGenerator& __urng,
+    2618              :                    const param_type& __p)
+    2619              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    2620              : 
+    2621              :       template<typename _UniformRandomNumberGenerator>
+    2622              :         void
+    2623              :         __generate(result_type* __f, result_type* __t,
+    2624              :                    _UniformRandomNumberGenerator& __urng,
+    2625              :                    const param_type& __p)
+    2626              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    2627              : 
+    2628              :       /**
+    2629              :        * @brief Return true if two gamma distributions have the same
+    2630              :        *        parameters and the sequences that would be generated
+    2631              :        *        are equal.
+    2632              :        */
+    2633              :       friend bool
+    2634              :       operator==(const gamma_distribution& __d1,
+    2635              :                  const gamma_distribution& __d2)
+    2636              :       { return (__d1._M_param == __d2._M_param
+    2637              :                 && __d1._M_nd == __d2._M_nd); }
+    2638              : 
+    2639              :       /**
+    2640              :        * @brief Inserts a %gamma_distribution random number distribution
+    2641              :        * @p __x into the output stream @p __os.
+    2642              :        *
+    2643              :        * @param __os An output stream.
+    2644              :        * @param __x  A %gamma_distribution random number distribution.
+    2645              :        *
+    2646              :        * @returns The output stream with the state of @p __x inserted or in
+    2647              :        * an error state.
+    2648              :        */
+    2649              :       template<typename _RealType1, typename _CharT, typename _Traits>
+    2650              :         friend std::basic_ostream<_CharT, _Traits>&
+    2651              :         operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    2652              :                    const std::gamma_distribution<_RealType1>& __x);
+    2653              : 
+    2654              :       /**
+    2655              :        * @brief Extracts a %gamma_distribution random number distribution
+    2656              :        * @p __x from the input stream @p __is.
+    2657              :        *
+    2658              :        * @param __is An input stream.
+    2659              :        * @param __x  A %gamma_distribution random number generator engine.
+    2660              :        *
+    2661              :        * @returns The input stream with @p __x extracted or in an error state.
+    2662              :        */
+    2663              :       template<typename _RealType1, typename _CharT, typename _Traits>
+    2664              :         friend std::basic_istream<_CharT, _Traits>&
+    2665              :         operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    2666              :                    std::gamma_distribution<_RealType1>& __x);
+    2667              : 
+    2668              :     private:
+    2669              :       template<typename _ForwardIterator,
+    2670              :                typename _UniformRandomNumberGenerator>
+    2671              :         void
+    2672              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    2673              :                         _UniformRandomNumberGenerator& __urng,
+    2674              :                         const param_type& __p);
+    2675              : 
+    2676              :       param_type _M_param;
+    2677              : 
+    2678              :       std::normal_distribution<result_type> _M_nd;
+    2679              :     };
+    2680              : 
+    2681              : #if __cpp_impl_three_way_comparison < 201907L
+    2682              :   /**
+    2683              :    * @brief Return true if two gamma distributions are different.
+    2684              :    */
+    2685              :    template<typename _RealType>
+    2686              :      inline bool
+    2687              :      operator!=(const std::gamma_distribution<_RealType>& __d1,
+    2688              :                 const std::gamma_distribution<_RealType>& __d2)
+    2689              :      { return !(__d1 == __d2); }
+    2690              : #endif
+    2691              : 
+    2692              :   /// @} group random_distributions_poisson
+    2693              : 
+    2694              :   /**
+    2695              :    * @addtogroup random_distributions_normal Normal Distributions
+    2696              :    * @ingroup random_distributions
+    2697              :    * @{
+    2698              :    */
+    2699              : 
+    2700              :   /**
+    2701              :    * @brief A chi_squared_distribution random number distribution.
+    2702              :    *
+    2703              :    * The formula for the normal probability mass function is
+    2704              :    * @f$p(x|n) = \frac{x^{(n/2) - 1}e^{-x/2}}{\Gamma(n/2) 2^{n/2}}@f$
+    2705              :    *
+    2706              :    * @headerfile random
+    2707              :    * @since C++11
+    2708              :    */
+    2709              :   template<typename _RealType = double>
+    2710              :     class chi_squared_distribution
+    2711              :     {
+    2712              :       static_assert(std::is_floating_point<_RealType>::value,
+    2713              :                     "result_type must be a floating point type");
+    2714              : 
+    2715              :     public:
+    2716              :       /** The type of the range of the distribution. */
+    2717              :       typedef _RealType result_type;
+    2718              : 
+    2719              :       /** Parameter type. */
+    2720              :       struct param_type
+    2721              :       {
+    2722              :         typedef chi_squared_distribution<_RealType> distribution_type;
+    2723              : 
+    2724              :         param_type() : param_type(1) { }
+    2725              : 
+    2726              :         explicit
+    2727              :         param_type(_RealType __n)
+    2728              :         : _M_n(__n)
+    2729              :         { }
+    2730              : 
+    2731              :         _RealType
+    2732              :         n() const
+    2733              :         { return _M_n; }
+    2734              : 
+    2735              :         friend bool
+    2736              :         operator==(const param_type& __p1, const param_type& __p2)
+    2737              :         { return __p1._M_n == __p2._M_n; }
+    2738              : 
+    2739              : #if __cpp_impl_three_way_comparison < 201907L
+    2740              :         friend bool
+    2741              :         operator!=(const param_type& __p1, const param_type& __p2)
+    2742              :         { return !(__p1 == __p2); }
+    2743              : #endif
+    2744              : 
+    2745              :       private:
+    2746              :         _RealType _M_n;
+    2747              :       };
+    2748              : 
+    2749              :       chi_squared_distribution() : chi_squared_distribution(1) { }
+    2750              : 
+    2751              :       explicit
+    2752              :       chi_squared_distribution(_RealType __n)
+    2753              :       : _M_param(__n), _M_gd(__n / 2)
+    2754              :       { }
+    2755              : 
+    2756              :       explicit
+    2757              :       chi_squared_distribution(const param_type& __p)
+    2758              :       : _M_param(__p), _M_gd(__p.n() / 2)
+    2759              :       { }
+    2760              : 
+    2761              :       /**
+    2762              :        * @brief Resets the distribution state.
+    2763              :        */
+    2764              :       void
+    2765              :       reset()
+    2766              :       { _M_gd.reset(); }
+    2767              : 
+    2768              :       /**
+    2769              :        *
+    2770              :        */
+    2771              :       _RealType
+    2772              :       n() const
+    2773              :       { return _M_param.n(); }
+    2774              : 
+    2775              :       /**
+    2776              :        * @brief Returns the parameter set of the distribution.
+    2777              :        */
+    2778              :       param_type
+    2779              :       param() const
+    2780              :       { return _M_param; }
+    2781              : 
+    2782              :       /**
+    2783              :        * @brief Sets the parameter set of the distribution.
+    2784              :        * @param __param The new parameter set of the distribution.
+    2785              :        */
+    2786              :       void
+    2787              :       param(const param_type& __param)
+    2788              :       {
+    2789              :         _M_param = __param;
+    2790              :         typedef typename std::gamma_distribution<result_type>::param_type
+    2791              :           param_type;
+    2792              :         _M_gd.param(param_type{__param.n() / 2});
+    2793              :       }
+    2794              : 
+    2795              :       /**
+    2796              :        * @brief Returns the greatest lower bound value of the distribution.
+    2797              :        */
+    2798              :       result_type
+    2799              :       min() const
+    2800              :       { return result_type(0); }
+    2801              : 
+    2802              :       /**
+    2803              :        * @brief Returns the least upper bound value of the distribution.
+    2804              :        */
+    2805              :       result_type
+    2806              :       max() const
+    2807              :       { return std::numeric_limits<result_type>::max(); }
+    2808              : 
+    2809              :       /**
+    2810              :        * @brief Generating functions.
+    2811              :        */
+    2812              :       template<typename _UniformRandomNumberGenerator>
+    2813              :         result_type
+    2814              :         operator()(_UniformRandomNumberGenerator& __urng)
+    2815              :         { return 2 * _M_gd(__urng); }
+    2816              : 
+    2817              :       template<typename _UniformRandomNumberGenerator>
+    2818              :         result_type
+    2819              :         operator()(_UniformRandomNumberGenerator& __urng,
+    2820              :                    const param_type& __p)
+    2821              :         {
+    2822              :           typedef typename std::gamma_distribution<result_type>::param_type
+    2823              :             param_type;
+    2824              :           return 2 * _M_gd(__urng, param_type(__p.n() / 2));
+    2825              :         }
+    2826              : 
+    2827              :       template<typename _ForwardIterator,
+    2828              :                typename _UniformRandomNumberGenerator>
+    2829              :         void
+    2830              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    2831              :                    _UniformRandomNumberGenerator& __urng)
+    2832              :         { this->__generate_impl(__f, __t, __urng); }
+    2833              : 
+    2834              :       template<typename _ForwardIterator,
+    2835              :                typename _UniformRandomNumberGenerator>
+    2836              :         void
+    2837              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    2838              :                    _UniformRandomNumberGenerator& __urng,
+    2839              :                    const param_type& __p)
+    2840              :         { typename std::gamma_distribution<result_type>::param_type
+    2841              :             __p2(__p.n() / 2);
+    2842              :           this->__generate_impl(__f, __t, __urng, __p2); }
+    2843              : 
+    2844              :       template<typename _UniformRandomNumberGenerator>
+    2845              :         void
+    2846              :         __generate(result_type* __f, result_type* __t,
+    2847              :                    _UniformRandomNumberGenerator& __urng)
+    2848              :         { this->__generate_impl(__f, __t, __urng); }
+    2849              : 
+    2850              :       template<typename _UniformRandomNumberGenerator>
+    2851              :         void
+    2852              :         __generate(result_type* __f, result_type* __t,
+    2853              :                    _UniformRandomNumberGenerator& __urng,
+    2854              :                    const param_type& __p)
+    2855              :         { typename std::gamma_distribution<result_type>::param_type
+    2856              :             __p2(__p.n() / 2);
+    2857              :           this->__generate_impl(__f, __t, __urng, __p2); }
+    2858              : 
+    2859              :       /**
+    2860              :        * @brief Return true if two Chi-squared distributions have
+    2861              :        *        the same parameters and the sequences that would be
+    2862              :        *        generated are equal.
+    2863              :        */
+    2864              :       friend bool
+    2865              :       operator==(const chi_squared_distribution& __d1,
+    2866              :                  const chi_squared_distribution& __d2)
+    2867              :       { return __d1._M_param == __d2._M_param && __d1._M_gd == __d2._M_gd; }
+    2868              : 
+    2869              :       /**
+    2870              :        * @brief Inserts a %chi_squared_distribution random number distribution
+    2871              :        * @p __x into the output stream @p __os.
+    2872              :        *
+    2873              :        * @param __os An output stream.
+    2874              :        * @param __x  A %chi_squared_distribution random number distribution.
+    2875              :        *
+    2876              :        * @returns The output stream with the state of @p __x inserted or in
+    2877              :        * an error state.
+    2878              :        */
+    2879              :       template<typename _RealType1, typename _CharT, typename _Traits>
+    2880              :         friend std::basic_ostream<_CharT, _Traits>&
+    2881              :         operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    2882              :                    const std::chi_squared_distribution<_RealType1>& __x);
+    2883              : 
+    2884              :       /**
+    2885              :        * @brief Extracts a %chi_squared_distribution random number distribution
+    2886              :        * @p __x from the input stream @p __is.
+    2887              :        *
+    2888              :        * @param __is An input stream.
+    2889              :        * @param __x A %chi_squared_distribution random number
+    2890              :        *            generator engine.
+    2891              :        *
+    2892              :        * @returns The input stream with @p __x extracted or in an error state.
+    2893              :        */
+    2894              :       template<typename _RealType1, typename _CharT, typename _Traits>
+    2895              :         friend std::basic_istream<_CharT, _Traits>&
+    2896              :         operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    2897              :                    std::chi_squared_distribution<_RealType1>& __x);
+    2898              : 
+    2899              :     private:
+    2900              :       template<typename _ForwardIterator,
+    2901              :                typename _UniformRandomNumberGenerator>
+    2902              :         void
+    2903              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    2904              :                         _UniformRandomNumberGenerator& __urng);
+    2905              : 
+    2906              :       template<typename _ForwardIterator,
+    2907              :                typename _UniformRandomNumberGenerator>
+    2908              :         void
+    2909              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    2910              :                         _UniformRandomNumberGenerator& __urng,
+    2911              :                         const typename
+    2912              :                         std::gamma_distribution<result_type>::param_type& __p);
+    2913              : 
+    2914              :       param_type _M_param;
+    2915              : 
+    2916              :       std::gamma_distribution<result_type> _M_gd;
+    2917              :     };
+    2918              : 
+    2919              : #if __cpp_impl_three_way_comparison < 201907L
+    2920              :   /**
+    2921              :    * @brief Return true if two Chi-squared distributions are different.
+    2922              :    */
+    2923              :   template<typename _RealType>
+    2924              :     inline bool
+    2925              :     operator!=(const std::chi_squared_distribution<_RealType>& __d1,
+    2926              :                const std::chi_squared_distribution<_RealType>& __d2)
+    2927              :     { return !(__d1 == __d2); }
+    2928              : #endif
+    2929              : 
+    2930              :   /**
+    2931              :    * @brief A cauchy_distribution random number distribution.
+    2932              :    *
+    2933              :    * The formula for the normal probability mass function is
+    2934              :    * @f$p(x|a,b) = (\pi b (1 + (\frac{x-a}{b})^2))^{-1}@f$
+    2935              :    *
+    2936              :    * @headerfile random
+    2937              :    * @since C++11
+    2938              :    */
+    2939              :   template<typename _RealType = double>
+    2940              :     class cauchy_distribution
+    2941              :     {
+    2942              :       static_assert(std::is_floating_point<_RealType>::value,
+    2943              :                     "result_type must be a floating point type");
+    2944              : 
+    2945              :     public:
+    2946              :       /** The type of the range of the distribution. */
+    2947              :       typedef _RealType result_type;
+    2948              : 
+    2949              :       /** Parameter type. */
+    2950              :       struct param_type
+    2951              :       {
+    2952              :         typedef cauchy_distribution<_RealType> distribution_type;
+    2953              : 
+    2954              :         param_type() : param_type(0) { }
+    2955              : 
+    2956              :         explicit
+    2957              :         param_type(_RealType __a, _RealType __b = _RealType(1))
+    2958              :         : _M_a(__a), _M_b(__b)
+    2959              :         { }
+    2960              : 
+    2961              :         _RealType
+    2962              :         a() const
+    2963              :         { return _M_a; }
+    2964              : 
+    2965              :         _RealType
+    2966              :         b() const
+    2967              :         { return _M_b; }
+    2968              : 
+    2969              :         friend bool
+    2970              :         operator==(const param_type& __p1, const param_type& __p2)
+    2971              :         { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; }
+    2972              : 
+    2973              : #if __cpp_impl_three_way_comparison < 201907L
+    2974              :         friend bool
+    2975              :         operator!=(const param_type& __p1, const param_type& __p2)
+    2976              :         { return !(__p1 == __p2); }
+    2977              : #endif
+    2978              : 
+    2979              :       private:
+    2980              :         _RealType _M_a;
+    2981              :         _RealType _M_b;
+    2982              :       };
+    2983              : 
+    2984              :       cauchy_distribution() : cauchy_distribution(0.0) { }
+    2985              : 
+    2986              :       explicit
+    2987              :       cauchy_distribution(_RealType __a, _RealType __b = 1.0)
+    2988              :       : _M_param(__a, __b)
+    2989              :       { }
+    2990              : 
+    2991              :       explicit
+    2992              :       cauchy_distribution(const param_type& __p)
+    2993              :       : _M_param(__p)
+    2994              :       { }
+    2995              : 
+    2996              :       /**
+    2997              :        * @brief Resets the distribution state.
+    2998              :        */
+    2999              :       void
+    3000              :       reset()
+    3001              :       { }
+    3002              : 
+    3003              :       /**
+    3004              :        *
+    3005              :        */
+    3006              :       _RealType
+    3007              :       a() const
+    3008              :       { return _M_param.a(); }
+    3009              : 
+    3010              :       _RealType
+    3011              :       b() const
+    3012              :       { return _M_param.b(); }
+    3013              : 
+    3014              :       /**
+    3015              :        * @brief Returns the parameter set of the distribution.
+    3016              :        */
+    3017              :       param_type
+    3018              :       param() const
+    3019              :       { return _M_param; }
+    3020              : 
+    3021              :       /**
+    3022              :        * @brief Sets the parameter set of the distribution.
+    3023              :        * @param __param The new parameter set of the distribution.
+    3024              :        */
+    3025              :       void
+    3026              :       param(const param_type& __param)
+    3027              :       { _M_param = __param; }
+    3028              : 
+    3029              :       /**
+    3030              :        * @brief Returns the greatest lower bound value of the distribution.
+    3031              :        */
+    3032              :       result_type
+    3033              :       min() const
+    3034              :       { return std::numeric_limits<result_type>::lowest(); }
+    3035              : 
+    3036              :       /**
+    3037              :        * @brief Returns the least upper bound value of the distribution.
+    3038              :        */
+    3039              :       result_type
+    3040              :       max() const
+    3041              :       { return std::numeric_limits<result_type>::max(); }
+    3042              : 
+    3043              :       /**
+    3044              :        * @brief Generating functions.
+    3045              :        */
+    3046              :       template<typename _UniformRandomNumberGenerator>
+    3047              :         result_type
+    3048              :         operator()(_UniformRandomNumberGenerator& __urng)
+    3049              :         { return this->operator()(__urng, _M_param); }
+    3050              : 
+    3051              :       template<typename _UniformRandomNumberGenerator>
+    3052              :         result_type
+    3053              :         operator()(_UniformRandomNumberGenerator& __urng,
+    3054              :                    const param_type& __p);
+    3055              : 
+    3056              :       template<typename _ForwardIterator,
+    3057              :                typename _UniformRandomNumberGenerator>
+    3058              :         void
+    3059              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    3060              :                    _UniformRandomNumberGenerator& __urng)
+    3061              :         { this->__generate(__f, __t, __urng, _M_param); }
+    3062              : 
+    3063              :       template<typename _ForwardIterator,
+    3064              :                typename _UniformRandomNumberGenerator>
+    3065              :         void
+    3066              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    3067              :                    _UniformRandomNumberGenerator& __urng,
+    3068              :                    const param_type& __p)
+    3069              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    3070              : 
+    3071              :       template<typename _UniformRandomNumberGenerator>
+    3072              :         void
+    3073              :         __generate(result_type* __f, result_type* __t,
+    3074              :                    _UniformRandomNumberGenerator& __urng,
+    3075              :                    const param_type& __p)
+    3076              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    3077              : 
+    3078              :       /**
+    3079              :        * @brief Return true if two Cauchy distributions have
+    3080              :        *        the same parameters.
+    3081              :        */
+    3082              :       friend bool
+    3083              :       operator==(const cauchy_distribution& __d1,
+    3084              :                  const cauchy_distribution& __d2)
+    3085              :       { return __d1._M_param == __d2._M_param; }
+    3086              : 
+    3087              :     private:
+    3088              :       template<typename _ForwardIterator,
+    3089              :                typename _UniformRandomNumberGenerator>
+    3090              :         void
+    3091              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    3092              :                         _UniformRandomNumberGenerator& __urng,
+    3093              :                         const param_type& __p);
+    3094              : 
+    3095              :       param_type _M_param;
+    3096              :     };
+    3097              : 
+    3098              : #if __cpp_impl_three_way_comparison < 201907L
+    3099              :   /**
+    3100              :    * @brief Return true if two Cauchy distributions have
+    3101              :    *        different parameters.
+    3102              :    */
+    3103              :   template<typename _RealType>
+    3104              :     inline bool
+    3105              :     operator!=(const std::cauchy_distribution<_RealType>& __d1,
+    3106              :                const std::cauchy_distribution<_RealType>& __d2)
+    3107              :     { return !(__d1 == __d2); }
+    3108              : #endif
+    3109              : 
+    3110              :   /**
+    3111              :    * @brief Inserts a %cauchy_distribution random number distribution
+    3112              :    * @p __x into the output stream @p __os.
+    3113              :    *
+    3114              :    * @param __os An output stream.
+    3115              :    * @param __x  A %cauchy_distribution random number distribution.
+    3116              :    *
+    3117              :    * @returns The output stream with the state of @p __x inserted or in
+    3118              :    * an error state.
+    3119              :    */
+    3120              :   template<typename _RealType, typename _CharT, typename _Traits>
+    3121              :     std::basic_ostream<_CharT, _Traits>&
+    3122              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    3123              :                const std::cauchy_distribution<_RealType>& __x);
+    3124              : 
+    3125              :   /**
+    3126              :    * @brief Extracts a %cauchy_distribution random number distribution
+    3127              :    * @p __x from the input stream @p __is.
+    3128              :    *
+    3129              :    * @param __is An input stream.
+    3130              :    * @param __x A %cauchy_distribution random number
+    3131              :    *            generator engine.
+    3132              :    *
+    3133              :    * @returns The input stream with @p __x extracted or in an error state.
+    3134              :    */
+    3135              :   template<typename _RealType, typename _CharT, typename _Traits>
+    3136              :     std::basic_istream<_CharT, _Traits>&
+    3137              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    3138              :                std::cauchy_distribution<_RealType>& __x);
+    3139              : 
+    3140              : 
+    3141              :   /**
+    3142              :    * @brief A fisher_f_distribution random number distribution.
+    3143              :    *
+    3144              :    * The formula for the normal probability mass function is
+    3145              :    * @f[
+    3146              :    *     p(x|m,n) = \frac{\Gamma((m+n)/2)}{\Gamma(m/2)\Gamma(n/2)}
+    3147              :    *                (\frac{m}{n})^{m/2} x^{(m/2)-1}
+    3148              :    *                (1 + \frac{mx}{n})^{-(m+n)/2} 
+    3149              :    * @f]
+    3150              :    *
+    3151              :    * @headerfile random
+    3152              :    * @since C++11
+    3153              :    */
+    3154              :   template<typename _RealType = double>
+    3155              :     class fisher_f_distribution
+    3156              :     {
+    3157              :       static_assert(std::is_floating_point<_RealType>::value,
+    3158              :                     "result_type must be a floating point type");
+    3159              : 
+    3160              :     public:
+    3161              :       /** The type of the range of the distribution. */
+    3162              :       typedef _RealType result_type;
+    3163              : 
+    3164              :       /** Parameter type. */
+    3165              :       struct param_type
+    3166              :       {
+    3167              :         typedef fisher_f_distribution<_RealType> distribution_type;
+    3168              : 
+    3169              :         param_type() : param_type(1) { }
+    3170              : 
+    3171              :         explicit
+    3172              :         param_type(_RealType __m, _RealType __n = _RealType(1))
+    3173              :         : _M_m(__m), _M_n(__n)
+    3174              :         { }
+    3175              : 
+    3176              :         _RealType
+    3177              :         m() const
+    3178              :         { return _M_m; }
+    3179              : 
+    3180              :         _RealType
+    3181              :         n() const
+    3182              :         { return _M_n; }
+    3183              : 
+    3184              :         friend bool
+    3185              :         operator==(const param_type& __p1, const param_type& __p2)
+    3186              :         { return __p1._M_m == __p2._M_m && __p1._M_n == __p2._M_n; }
+    3187              : 
+    3188              : #if __cpp_impl_three_way_comparison < 201907L
+    3189              :         friend bool
+    3190              :         operator!=(const param_type& __p1, const param_type& __p2)
+    3191              :         { return !(__p1 == __p2); }
+    3192              : #endif
+    3193              : 
+    3194              :       private:
+    3195              :         _RealType _M_m;
+    3196              :         _RealType _M_n;
+    3197              :       };
+    3198              : 
+    3199              :       fisher_f_distribution() : fisher_f_distribution(1.0) { }
+    3200              : 
+    3201              :       explicit
+    3202              :       fisher_f_distribution(_RealType __m,
+    3203              :                             _RealType __n = _RealType(1))
+    3204              :       : _M_param(__m, __n), _M_gd_x(__m / 2), _M_gd_y(__n / 2)
+    3205              :       { }
+    3206              : 
+    3207              :       explicit
+    3208              :       fisher_f_distribution(const param_type& __p)
+    3209              :       : _M_param(__p), _M_gd_x(__p.m() / 2), _M_gd_y(__p.n() / 2)
+    3210              :       { }
+    3211              : 
+    3212              :       /**
+    3213              :        * @brief Resets the distribution state.
+    3214              :        */
+    3215              :       void
+    3216              :       reset()
+    3217              :       {
+    3218              :         _M_gd_x.reset();
+    3219              :         _M_gd_y.reset();
+    3220              :       }
+    3221              : 
+    3222              :       /**
+    3223              :        *
+    3224              :        */
+    3225              :       _RealType
+    3226              :       m() const
+    3227              :       { return _M_param.m(); }
+    3228              : 
+    3229              :       _RealType
+    3230              :       n() const
+    3231              :       { return _M_param.n(); }
+    3232              : 
+    3233              :       /**
+    3234              :        * @brief Returns the parameter set of the distribution.
+    3235              :        */
+    3236              :       param_type
+    3237              :       param() const
+    3238              :       { return _M_param; }
+    3239              : 
+    3240              :       /**
+    3241              :        * @brief Sets the parameter set of the distribution.
+    3242              :        * @param __param The new parameter set of the distribution.
+    3243              :        */
+    3244              :       void
+    3245              :       param(const param_type& __param)
+    3246              :       { _M_param = __param; }
+    3247              : 
+    3248              :       /**
+    3249              :        * @brief Returns the greatest lower bound value of the distribution.
+    3250              :        */
+    3251              :       result_type
+    3252              :       min() const
+    3253              :       { return result_type(0); }
+    3254              : 
+    3255              :       /**
+    3256              :        * @brief Returns the least upper bound value of the distribution.
+    3257              :        */
+    3258              :       result_type
+    3259              :       max() const
+    3260              :       { return std::numeric_limits<result_type>::max(); }
+    3261              : 
+    3262              :       /**
+    3263              :        * @brief Generating functions.
+    3264              :        */
+    3265              :       template<typename _UniformRandomNumberGenerator>
+    3266              :         result_type
+    3267              :         operator()(_UniformRandomNumberGenerator& __urng)
+    3268              :         { return (_M_gd_x(__urng) * n()) / (_M_gd_y(__urng) * m()); }
+    3269              : 
+    3270              :       template<typename _UniformRandomNumberGenerator>
+    3271              :         result_type
+    3272              :         operator()(_UniformRandomNumberGenerator& __urng,
+    3273              :                    const param_type& __p)
+    3274              :         {
+    3275              :           typedef typename std::gamma_distribution<result_type>::param_type
+    3276              :             param_type;
+    3277              :           return ((_M_gd_x(__urng, param_type(__p.m() / 2)) * n())
+    3278              :                   / (_M_gd_y(__urng, param_type(__p.n() / 2)) * m()));
+    3279              :         }
+    3280              : 
+    3281              :       template<typename _ForwardIterator,
+    3282              :                typename _UniformRandomNumberGenerator>
+    3283              :         void
+    3284              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    3285              :                    _UniformRandomNumberGenerator& __urng)
+    3286              :         { this->__generate_impl(__f, __t, __urng); }
+    3287              : 
+    3288              :       template<typename _ForwardIterator,
+    3289              :                typename _UniformRandomNumberGenerator>
+    3290              :         void
+    3291              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    3292              :                    _UniformRandomNumberGenerator& __urng,
+    3293              :                    const param_type& __p)
+    3294              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    3295              : 
+    3296              :       template<typename _UniformRandomNumberGenerator>
+    3297              :         void
+    3298              :         __generate(result_type* __f, result_type* __t,
+    3299              :                    _UniformRandomNumberGenerator& __urng)
+    3300              :         { this->__generate_impl(__f, __t, __urng); }
+    3301              : 
+    3302              :       template<typename _UniformRandomNumberGenerator>
+    3303              :         void
+    3304              :         __generate(result_type* __f, result_type* __t,
+    3305              :                    _UniformRandomNumberGenerator& __urng,
+    3306              :                    const param_type& __p)
+    3307              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    3308              : 
+    3309              :       /**
+    3310              :        * @brief Return true if two Fisher f distributions have
+    3311              :        *        the same parameters and the sequences that would
+    3312              :        *        be generated are equal.
+    3313              :        */
+    3314              :       friend bool
+    3315              :       operator==(const fisher_f_distribution& __d1,
+    3316              :                  const fisher_f_distribution& __d2)
+    3317              :       { return (__d1._M_param == __d2._M_param
+    3318              :                 && __d1._M_gd_x == __d2._M_gd_x
+    3319              :                 && __d1._M_gd_y == __d2._M_gd_y); }
+    3320              : 
+    3321              :       /**
+    3322              :        * @brief Inserts a %fisher_f_distribution random number distribution
+    3323              :        * @p __x into the output stream @p __os.
+    3324              :        *
+    3325              :        * @param __os An output stream.
+    3326              :        * @param __x  A %fisher_f_distribution random number distribution.
+    3327              :        *
+    3328              :        * @returns The output stream with the state of @p __x inserted or in
+    3329              :        * an error state.
+    3330              :        */
+    3331              :       template<typename _RealType1, typename _CharT, typename _Traits>
+    3332              :         friend std::basic_ostream<_CharT, _Traits>&
+    3333              :         operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    3334              :                    const std::fisher_f_distribution<_RealType1>& __x);
+    3335              : 
+    3336              :       /**
+    3337              :        * @brief Extracts a %fisher_f_distribution random number distribution
+    3338              :        * @p __x from the input stream @p __is.
+    3339              :        *
+    3340              :        * @param __is An input stream.
+    3341              :        * @param __x A %fisher_f_distribution random number
+    3342              :        *            generator engine.
+    3343              :        *
+    3344              :        * @returns The input stream with @p __x extracted or in an error state.
+    3345              :        */
+    3346              :       template<typename _RealType1, typename _CharT, typename _Traits>
+    3347              :         friend std::basic_istream<_CharT, _Traits>&
+    3348              :         operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    3349              :                    std::fisher_f_distribution<_RealType1>& __x);
+    3350              : 
+    3351              :     private:
+    3352              :       template<typename _ForwardIterator,
+    3353              :                typename _UniformRandomNumberGenerator>
+    3354              :         void
+    3355              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    3356              :                         _UniformRandomNumberGenerator& __urng);
+    3357              : 
+    3358              :       template<typename _ForwardIterator,
+    3359              :                typename _UniformRandomNumberGenerator>
+    3360              :         void
+    3361              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    3362              :                         _UniformRandomNumberGenerator& __urng,
+    3363              :                         const param_type& __p);
+    3364              : 
+    3365              :       param_type _M_param;
+    3366              : 
+    3367              :       std::gamma_distribution<result_type> _M_gd_x, _M_gd_y;
+    3368              :     };
+    3369              : 
+    3370              : #if __cpp_impl_three_way_comparison < 201907L
+    3371              :   /**
+    3372              :    * @brief Return true if two Fisher f distributions are different.
+    3373              :    */
+    3374              :   template<typename _RealType>
+    3375              :     inline bool
+    3376              :     operator!=(const std::fisher_f_distribution<_RealType>& __d1,
+    3377              :                const std::fisher_f_distribution<_RealType>& __d2)
+    3378              :     { return !(__d1 == __d2); }
+    3379              : #endif
+    3380              : 
+    3381              :   /**
+    3382              :    * @brief A student_t_distribution random number distribution.
+    3383              :    *
+    3384              :    * The formula for the normal probability mass function is:
+    3385              :    * @f[
+    3386              :    *     p(x|n) = \frac{1}{\sqrt(n\pi)} \frac{\Gamma((n+1)/2)}{\Gamma(n/2)}
+    3387              :    *              (1 + \frac{x^2}{n}) ^{-(n+1)/2} 
+    3388              :    * @f]
+    3389              :    *
+    3390              :    * @headerfile random
+    3391              :    * @since C++11
+    3392              :    */
+    3393              :   template<typename _RealType = double>
+    3394              :     class student_t_distribution
+    3395              :     {
+    3396              :       static_assert(std::is_floating_point<_RealType>::value,
+    3397              :                     "result_type must be a floating point type");
+    3398              : 
+    3399              :     public:
+    3400              :       /** The type of the range of the distribution. */
+    3401              :       typedef _RealType result_type;
+    3402              : 
+    3403              :       /** Parameter type. */
+    3404              :       struct param_type
+    3405              :       {
+    3406              :         typedef student_t_distribution<_RealType> distribution_type;
+    3407              : 
+    3408              :         param_type() : param_type(1) { }
+    3409              : 
+    3410              :         explicit
+    3411              :         param_type(_RealType __n)
+    3412              :         : _M_n(__n)
+    3413              :         { }
+    3414              : 
+    3415              :         _RealType
+    3416              :         n() const
+    3417              :         { return _M_n; }
+    3418              : 
+    3419              :         friend bool
+    3420              :         operator==(const param_type& __p1, const param_type& __p2)
+    3421              :         { return __p1._M_n == __p2._M_n; }
+    3422              : 
+    3423              : #if __cpp_impl_three_way_comparison < 201907L
+    3424              :         friend bool
+    3425              :         operator!=(const param_type& __p1, const param_type& __p2)
+    3426              :         { return !(__p1 == __p2); }
+    3427              : #endif
+    3428              : 
+    3429              :       private:
+    3430              :         _RealType _M_n;
+    3431              :       };
+    3432              : 
+    3433              :       student_t_distribution() : student_t_distribution(1.0) { }
+    3434              : 
+    3435              :       explicit
+    3436              :       student_t_distribution(_RealType __n)
+    3437              :       : _M_param(__n), _M_nd(), _M_gd(__n / 2, 2)
+    3438              :       { }
+    3439              : 
+    3440              :       explicit
+    3441              :       student_t_distribution(const param_type& __p)
+    3442              :       : _M_param(__p), _M_nd(), _M_gd(__p.n() / 2, 2)
+    3443              :       { }
+    3444              : 
+    3445              :       /**
+    3446              :        * @brief Resets the distribution state.
+    3447              :        */
+    3448              :       void
+    3449              :       reset()
+    3450              :       {
+    3451              :         _M_nd.reset();
+    3452              :         _M_gd.reset();
+    3453              :       }
+    3454              : 
+    3455              :       /**
+    3456              :        *
+    3457              :        */
+    3458              :       _RealType
+    3459              :       n() const
+    3460              :       { return _M_param.n(); }
+    3461              : 
+    3462              :       /**
+    3463              :        * @brief Returns the parameter set of the distribution.
+    3464              :        */
+    3465              :       param_type
+    3466              :       param() const
+    3467              :       { return _M_param; }
+    3468              : 
+    3469              :       /**
+    3470              :        * @brief Sets the parameter set of the distribution.
+    3471              :        * @param __param The new parameter set of the distribution.
+    3472              :        */
+    3473              :       void
+    3474              :       param(const param_type& __param)
+    3475              :       { _M_param = __param; }
+    3476              : 
+    3477              :       /**
+    3478              :        * @brief Returns the greatest lower bound value of the distribution.
+    3479              :        */
+    3480              :       result_type
+    3481              :       min() const
+    3482              :       { return std::numeric_limits<result_type>::lowest(); }
+    3483              : 
+    3484              :       /**
+    3485              :        * @brief Returns the least upper bound value of the distribution.
+    3486              :        */
+    3487              :       result_type
+    3488              :       max() const
+    3489              :       { return std::numeric_limits<result_type>::max(); }
+    3490              : 
+    3491              :       /**
+    3492              :        * @brief Generating functions.
+    3493              :        */
+    3494              :       template<typename _UniformRandomNumberGenerator>
+    3495              :         result_type
+    3496              :         operator()(_UniformRandomNumberGenerator& __urng)
+    3497              :         { return _M_nd(__urng) * std::sqrt(n() / _M_gd(__urng)); }
+    3498              : 
+    3499              :       template<typename _UniformRandomNumberGenerator>
+    3500              :         result_type
+    3501              :         operator()(_UniformRandomNumberGenerator& __urng,
+    3502              :                    const param_type& __p)
+    3503              :         {
+    3504              :           typedef typename std::gamma_distribution<result_type>::param_type
+    3505              :             param_type;
+    3506              :         
+    3507              :           const result_type __g = _M_gd(__urng, param_type(__p.n() / 2, 2));
+    3508              :           return _M_nd(__urng) * std::sqrt(__p.n() / __g);
+    3509              :         }
+    3510              : 
+    3511              :       template<typename _ForwardIterator,
+    3512              :                typename _UniformRandomNumberGenerator>
+    3513              :         void
+    3514              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    3515              :                    _UniformRandomNumberGenerator& __urng)
+    3516              :         { this->__generate_impl(__f, __t, __urng); }
+    3517              : 
+    3518              :       template<typename _ForwardIterator,
+    3519              :                typename _UniformRandomNumberGenerator>
+    3520              :         void
+    3521              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    3522              :                    _UniformRandomNumberGenerator& __urng,
+    3523              :                    const param_type& __p)
+    3524              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    3525              : 
+    3526              :       template<typename _UniformRandomNumberGenerator>
+    3527              :         void
+    3528              :         __generate(result_type* __f, result_type* __t,
+    3529              :                    _UniformRandomNumberGenerator& __urng)
+    3530              :         { this->__generate_impl(__f, __t, __urng); }
+    3531              : 
+    3532              :       template<typename _UniformRandomNumberGenerator>
+    3533              :         void
+    3534              :         __generate(result_type* __f, result_type* __t,
+    3535              :                    _UniformRandomNumberGenerator& __urng,
+    3536              :                    const param_type& __p)
+    3537              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    3538              : 
+    3539              :       /**
+    3540              :        * @brief Return true if two Student t distributions have
+    3541              :        *        the same parameters and the sequences that would
+    3542              :        *        be generated are equal.
+    3543              :        */
+    3544              :       friend bool
+    3545              :       operator==(const student_t_distribution& __d1,
+    3546              :                  const student_t_distribution& __d2)
+    3547              :       { return (__d1._M_param == __d2._M_param
+    3548              :                 && __d1._M_nd == __d2._M_nd && __d1._M_gd == __d2._M_gd); }
+    3549              : 
+    3550              :       /**
+    3551              :        * @brief Inserts a %student_t_distribution random number distribution
+    3552              :        * @p __x into the output stream @p __os.
+    3553              :        *
+    3554              :        * @param __os An output stream.
+    3555              :        * @param __x  A %student_t_distribution random number distribution.
+    3556              :        *
+    3557              :        * @returns The output stream with the state of @p __x inserted or in
+    3558              :        * an error state.
+    3559              :        */
+    3560              :       template<typename _RealType1, typename _CharT, typename _Traits>
+    3561              :         friend std::basic_ostream<_CharT, _Traits>&
+    3562              :         operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    3563              :                    const std::student_t_distribution<_RealType1>& __x);
+    3564              : 
+    3565              :       /**
+    3566              :        * @brief Extracts a %student_t_distribution random number distribution
+    3567              :        * @p __x from the input stream @p __is.
+    3568              :        *
+    3569              :        * @param __is An input stream.
+    3570              :        * @param __x A %student_t_distribution random number
+    3571              :        *            generator engine.
+    3572              :        *
+    3573              :        * @returns The input stream with @p __x extracted or in an error state.
+    3574              :        */
+    3575              :       template<typename _RealType1, typename _CharT, typename _Traits>
+    3576              :         friend std::basic_istream<_CharT, _Traits>&
+    3577              :         operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    3578              :                    std::student_t_distribution<_RealType1>& __x);
+    3579              : 
+    3580              :     private:
+    3581              :       template<typename _ForwardIterator,
+    3582              :                typename _UniformRandomNumberGenerator>
+    3583              :         void
+    3584              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    3585              :                         _UniformRandomNumberGenerator& __urng);
+    3586              :       template<typename _ForwardIterator,
+    3587              :                typename _UniformRandomNumberGenerator>
+    3588              :         void
+    3589              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    3590              :                         _UniformRandomNumberGenerator& __urng,
+    3591              :                         const param_type& __p);
+    3592              : 
+    3593              :       param_type _M_param;
+    3594              : 
+    3595              :       std::normal_distribution<result_type> _M_nd;
+    3596              :       std::gamma_distribution<result_type> _M_gd;
+    3597              :     };
+    3598              : 
+    3599              : #if __cpp_impl_three_way_comparison < 201907L
+    3600              :   /**
+    3601              :    * @brief Return true if two Student t distributions are different.
+    3602              :    */
+    3603              :   template<typename _RealType>
+    3604              :     inline bool
+    3605              :     operator!=(const std::student_t_distribution<_RealType>& __d1,
+    3606              :                const std::student_t_distribution<_RealType>& __d2)
+    3607              :     { return !(__d1 == __d2); }
+    3608              : #endif
+    3609              : 
+    3610              :   /// @} group random_distributions_normal
+    3611              : 
+    3612              :   /**
+    3613              :    * @addtogroup random_distributions_bernoulli Bernoulli Distributions
+    3614              :    * @ingroup random_distributions
+    3615              :    * @{
+    3616              :    */
+    3617              : 
+    3618              :   /**
+    3619              :    * @brief A Bernoulli random number distribution.
+    3620              :    *
+    3621              :    * Generates a sequence of true and false values with likelihood @f$p@f$
+    3622              :    * that true will come up and @f$(1 - p)@f$ that false will appear.
+    3623              :    *
+    3624              :    * @headerfile random
+    3625              :    * @since C++11
+    3626              :    */
+    3627              :   class bernoulli_distribution
+    3628              :   {
+    3629              :   public:
+    3630              :     /** The type of the range of the distribution. */
+    3631              :     typedef bool result_type;
+    3632              : 
+    3633              :     /** Parameter type. */
+    3634              :     struct param_type
+    3635              :     {
+    3636              :       typedef bernoulli_distribution distribution_type;
+    3637              : 
+    3638              :       param_type() : param_type(0.5) { }
+    3639              : 
+    3640              :       explicit
+    3641              :       param_type(double __p)
+    3642              :       : _M_p(__p)
+    3643              :       {
+    3644              :         __glibcxx_assert((_M_p >= 0.0) && (_M_p <= 1.0));
+    3645              :       }
+    3646              : 
+    3647              :       double
+    3648              :       p() const
+    3649              :       { return _M_p; }
+    3650              : 
+    3651              :       friend bool
+    3652              :       operator==(const param_type& __p1, const param_type& __p2)
+    3653              :       { return __p1._M_p == __p2._M_p; }
+    3654              : 
+    3655              : #if __cpp_impl_three_way_comparison < 201907L
+    3656              :       friend bool
+    3657              :       operator!=(const param_type& __p1, const param_type& __p2)
+    3658              :       { return !(__p1 == __p2); }
+    3659              : #endif
+    3660              : 
+    3661              :     private:
+    3662              :       double _M_p;
+    3663              :     };
+    3664              : 
+    3665              :   public:
+    3666              :     /**
+    3667              :      * @brief Constructs a Bernoulli distribution with likelihood 0.5.
+    3668              :      */
+    3669              :     bernoulli_distribution() : bernoulli_distribution(0.5) { }
+    3670              : 
+    3671              :     /**
+    3672              :      * @brief Constructs a Bernoulli distribution with likelihood @p p.
+    3673              :      *
+    3674              :      * @param __p  [IN]  The likelihood of a true result being returned.
+    3675              :      *                   Must be in the interval @f$[0, 1]@f$.
+    3676              :      */
+    3677              :     explicit
+    3678              :     bernoulli_distribution(double __p)
+    3679              :     : _M_param(__p)
+    3680              :     { }
+    3681              : 
+    3682              :     explicit
+    3683              :     bernoulli_distribution(const param_type& __p)
+    3684              :     : _M_param(__p)
+    3685              :     { }
+    3686              : 
+    3687              :     /**
+    3688              :      * @brief Resets the distribution state.
+    3689              :      *
+    3690              :      * Does nothing for a Bernoulli distribution.
+    3691              :      */
+    3692              :     void
+    3693              :     reset() { }
+    3694              : 
+    3695              :     /**
+    3696              :      * @brief Returns the @p p parameter of the distribution.
+    3697              :      */
+    3698              :     double
+    3699              :     p() const
+    3700              :     { return _M_param.p(); }
+    3701              : 
+    3702              :     /**
+    3703              :      * @brief Returns the parameter set of the distribution.
+    3704              :      */
+    3705              :     param_type
+    3706              :     param() const
+    3707              :     { return _M_param; }
+    3708              : 
+    3709              :     /**
+    3710              :      * @brief Sets the parameter set of the distribution.
+    3711              :      * @param __param The new parameter set of the distribution.
+    3712              :      */
+    3713              :     void
+    3714              :     param(const param_type& __param)
+    3715              :     { _M_param = __param; }
+    3716              : 
+    3717              :     /**
+    3718              :      * @brief Returns the greatest lower bound value of the distribution.
+    3719              :      */
+    3720              :     result_type
+    3721              :     min() const
+    3722              :     { return std::numeric_limits<result_type>::min(); }
+    3723              : 
+    3724              :     /**
+    3725              :      * @brief Returns the least upper bound value of the distribution.
+    3726              :      */
+    3727              :     result_type
+    3728              :     max() const
+    3729              :     { return std::numeric_limits<result_type>::max(); }
+    3730              : 
+    3731              :     /**
+    3732              :      * @brief Generating functions.
+    3733              :      */
+    3734              :     template<typename _UniformRandomNumberGenerator>
+    3735              :       result_type
+    3736              :       operator()(_UniformRandomNumberGenerator& __urng)
+    3737              :       { return this->operator()(__urng, _M_param); }
+    3738              : 
+    3739              :     template<typename _UniformRandomNumberGenerator>
+    3740              :       result_type
+    3741              :       operator()(_UniformRandomNumberGenerator& __urng,
+    3742              :                  const param_type& __p)
+    3743              :       {
+    3744              :         __detail::_Adaptor<_UniformRandomNumberGenerator, double>
+    3745              :           __aurng(__urng);
+    3746              :         if ((__aurng() - __aurng.min())
+    3747              :              < __p.p() * (__aurng.max() - __aurng.min()))
+    3748              :           return true;
+    3749              :         return false;
+    3750              :       }
+    3751              : 
+    3752              :     template<typename _ForwardIterator,
+    3753              :              typename _UniformRandomNumberGenerator>
+    3754              :       void
+    3755              :       __generate(_ForwardIterator __f, _ForwardIterator __t,
+    3756              :                  _UniformRandomNumberGenerator& __urng)
+    3757              :       { this->__generate(__f, __t, __urng, _M_param); }
+    3758              : 
+    3759              :     template<typename _ForwardIterator,
+    3760              :              typename _UniformRandomNumberGenerator>
+    3761              :       void
+    3762              :       __generate(_ForwardIterator __f, _ForwardIterator __t,
+    3763              :                  _UniformRandomNumberGenerator& __urng, const param_type& __p)
+    3764              :       { this->__generate_impl(__f, __t, __urng, __p); }
+    3765              : 
+    3766              :     template<typename _UniformRandomNumberGenerator>
+    3767              :       void
+    3768              :       __generate(result_type* __f, result_type* __t,
+    3769              :                  _UniformRandomNumberGenerator& __urng,
+    3770              :                  const param_type& __p)
+    3771              :       { this->__generate_impl(__f, __t, __urng, __p); }
+    3772              : 
+    3773              :     /**
+    3774              :      * @brief Return true if two Bernoulli distributions have
+    3775              :      *        the same parameters.
+    3776              :      */
+    3777              :     friend bool
+    3778              :     operator==(const bernoulli_distribution& __d1,
+    3779              :                const bernoulli_distribution& __d2)
+    3780              :     { return __d1._M_param == __d2._M_param; }
+    3781              : 
+    3782              :   private:
+    3783              :     template<typename _ForwardIterator,
+    3784              :              typename _UniformRandomNumberGenerator>
+    3785              :       void
+    3786              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    3787              :                       _UniformRandomNumberGenerator& __urng,
+    3788              :                       const param_type& __p);
+    3789              : 
+    3790              :     param_type _M_param;
+    3791              :   };
+    3792              : 
+    3793              : #if __cpp_impl_three_way_comparison < 201907L
+    3794              :   /**
+    3795              :    * @brief Return true if two Bernoulli distributions have
+    3796              :    *        different parameters.
+    3797              :    */
+    3798              :   inline bool
+    3799              :   operator!=(const std::bernoulli_distribution& __d1,
+    3800              :              const std::bernoulli_distribution& __d2)
+    3801              :   { return !(__d1 == __d2); }
+    3802              : #endif
+    3803              : 
+    3804              :   /**
+    3805              :    * @brief Inserts a %bernoulli_distribution random number distribution
+    3806              :    * @p __x into the output stream @p __os.
+    3807              :    *
+    3808              :    * @param __os An output stream.
+    3809              :    * @param __x  A %bernoulli_distribution random number distribution.
+    3810              :    *
+    3811              :    * @returns The output stream with the state of @p __x inserted or in
+    3812              :    * an error state.
+    3813              :    */
+    3814              :   template<typename _CharT, typename _Traits>
+    3815              :     std::basic_ostream<_CharT, _Traits>&
+    3816              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    3817              :                const std::bernoulli_distribution& __x);
+    3818              : 
+    3819              :   /**
+    3820              :    * @brief Extracts a %bernoulli_distribution random number distribution
+    3821              :    * @p __x from the input stream @p __is.
+    3822              :    *
+    3823              :    * @param __is An input stream.
+    3824              :    * @param __x  A %bernoulli_distribution random number generator engine.
+    3825              :    *
+    3826              :    * @returns The input stream with @p __x extracted or in an error state.
+    3827              :    */
+    3828              :   template<typename _CharT, typename _Traits>
+    3829              :     inline std::basic_istream<_CharT, _Traits>&
+    3830              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    3831              :                std::bernoulli_distribution& __x)
+    3832              :     {
+    3833              :       double __p;
+    3834              :       if (__is >> __p)
+    3835              :         __x.param(bernoulli_distribution::param_type(__p));
+    3836              :       return __is;
+    3837              :     }
+    3838              : 
+    3839              : 
+    3840              :   /**
+    3841              :    * @brief A discrete binomial random number distribution.
+    3842              :    *
+    3843              :    * The formula for the binomial probability density function is
+    3844              :    * @f$p(i|t,p) = \binom{t}{i} p^i (1 - p)^{t - i}@f$ where @f$t@f$
+    3845              :    * and @f$p@f$ are the parameters of the distribution.
+    3846              :    *
+    3847              :    * @headerfile random
+    3848              :    * @since C++11
+    3849              :    */
+    3850              :   template<typename _IntType = int>
+    3851              :     class binomial_distribution
+    3852              :     {
+    3853              :       static_assert(std::is_integral<_IntType>::value,
+    3854              :                     "result_type must be an integral type");
+    3855              : 
+    3856              :     public:
+    3857              :       /** The type of the range of the distribution. */
+    3858              :       typedef _IntType result_type;
+    3859              : 
+    3860              :       /** Parameter type. */
+    3861              :       struct param_type
+    3862              :       {
+    3863              :         typedef binomial_distribution<_IntType> distribution_type;
+    3864              :         friend class binomial_distribution<_IntType>;
+    3865              : 
+    3866              :         param_type() : param_type(1) { }
+    3867              : 
+    3868              :         explicit
+    3869              :         param_type(_IntType __t, double __p = 0.5)
+    3870              :         : _M_t(__t), _M_p(__p)
+    3871              :         {
+    3872              :           __glibcxx_assert((_M_t >= _IntType(0))
+    3873              :                                 && (_M_p >= 0.0)
+    3874              :                                 && (_M_p <= 1.0));
+    3875              :           _M_initialize();
+    3876              :         }
+    3877              : 
+    3878              :         _IntType
+    3879              :         t() const
+    3880              :         { return _M_t; }
+    3881              : 
+    3882              :         double
+    3883              :         p() const
+    3884              :         { return _M_p; }
+    3885              : 
+    3886              :         friend bool
+    3887              :         operator==(const param_type& __p1, const param_type& __p2)
+    3888              :         { return __p1._M_t == __p2._M_t && __p1._M_p == __p2._M_p; }
+    3889              : 
+    3890              : #if __cpp_impl_three_way_comparison < 201907L
+    3891              :         friend bool
+    3892              :         operator!=(const param_type& __p1, const param_type& __p2)
+    3893              :         { return !(__p1 == __p2); }
+    3894              : #endif
+    3895              : 
+    3896              :       private:
+    3897              :         void
+    3898              :         _M_initialize();
+    3899              : 
+    3900              :         _IntType _M_t;
+    3901              :         double _M_p;
+    3902              : 
+    3903              :         double _M_q;
+    3904              : #if _GLIBCXX_USE_C99_MATH_TR1
+    3905              :         double _M_d1, _M_d2, _M_s1, _M_s2, _M_c,
+    3906              :                _M_a1, _M_a123, _M_s, _M_lf, _M_lp1p;
+    3907              : #endif
+    3908              :         bool   _M_easy;
+    3909              :       };
+    3910              : 
+    3911              :       // constructors and member functions
+    3912              : 
+    3913              :       binomial_distribution() : binomial_distribution(1) { }
+    3914              : 
+    3915              :       explicit
+    3916              :       binomial_distribution(_IntType __t, double __p = 0.5)
+    3917              :       : _M_param(__t, __p), _M_nd()
+    3918              :       { }
+    3919              : 
+    3920              :       explicit
+    3921              :       binomial_distribution(const param_type& __p)
+    3922              :       : _M_param(__p), _M_nd()
+    3923              :       { }
+    3924              : 
+    3925              :       /**
+    3926              :        * @brief Resets the distribution state.
+    3927              :        */
+    3928              :       void
+    3929              :       reset()
+    3930              :       { _M_nd.reset(); }
+    3931              : 
+    3932              :       /**
+    3933              :        * @brief Returns the distribution @p t parameter.
+    3934              :        */
+    3935              :       _IntType
+    3936              :       t() const
+    3937              :       { return _M_param.t(); }
+    3938              : 
+    3939              :       /**
+    3940              :        * @brief Returns the distribution @p p parameter.
+    3941              :        */
+    3942              :       double
+    3943              :       p() const
+    3944              :       { return _M_param.p(); }
+    3945              : 
+    3946              :       /**
+    3947              :        * @brief Returns the parameter set of the distribution.
+    3948              :        */
+    3949              :       param_type
+    3950              :       param() const
+    3951              :       { return _M_param; }
+    3952              : 
+    3953              :       /**
+    3954              :        * @brief Sets the parameter set of the distribution.
+    3955              :        * @param __param The new parameter set of the distribution.
+    3956              :        */
+    3957              :       void
+    3958              :       param(const param_type& __param)
+    3959              :       { _M_param = __param; }
+    3960              : 
+    3961              :       /**
+    3962              :        * @brief Returns the greatest lower bound value of the distribution.
+    3963              :        */
+    3964              :       result_type
+    3965              :       min() const
+    3966              :       { return 0; }
+    3967              : 
+    3968              :       /**
+    3969              :        * @brief Returns the least upper bound value of the distribution.
+    3970              :        */
+    3971              :       result_type
+    3972              :       max() const
+    3973              :       { return _M_param.t(); }
+    3974              : 
+    3975              :       /**
+    3976              :        * @brief Generating functions.
+    3977              :        */
+    3978              :       template<typename _UniformRandomNumberGenerator>
+    3979              :         result_type
+    3980              :         operator()(_UniformRandomNumberGenerator& __urng)
+    3981              :         { return this->operator()(__urng, _M_param); }
+    3982              : 
+    3983              :       template<typename _UniformRandomNumberGenerator>
+    3984              :         result_type
+    3985              :         operator()(_UniformRandomNumberGenerator& __urng,
+    3986              :                    const param_type& __p);
+    3987              : 
+    3988              :       template<typename _ForwardIterator,
+    3989              :                typename _UniformRandomNumberGenerator>
+    3990              :         void
+    3991              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    3992              :                    _UniformRandomNumberGenerator& __urng)
+    3993              :         { this->__generate(__f, __t, __urng, _M_param); }
+    3994              : 
+    3995              :       template<typename _ForwardIterator,
+    3996              :                typename _UniformRandomNumberGenerator>
+    3997              :         void
+    3998              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    3999              :                    _UniformRandomNumberGenerator& __urng,
+    4000              :                    const param_type& __p)
+    4001              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    4002              : 
+    4003              :       template<typename _UniformRandomNumberGenerator>
+    4004              :         void
+    4005              :         __generate(result_type* __f, result_type* __t,
+    4006              :                    _UniformRandomNumberGenerator& __urng,
+    4007              :                    const param_type& __p)
+    4008              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    4009              : 
+    4010              :       /**
+    4011              :        * @brief Return true if two binomial distributions have
+    4012              :        *        the same parameters and the sequences that would
+    4013              :        *        be generated are equal.
+    4014              :        */
+    4015              :         friend bool
+    4016              :         operator==(const binomial_distribution& __d1,
+    4017              :                    const binomial_distribution& __d2)
+    4018              : #ifdef _GLIBCXX_USE_C99_MATH_TR1
+    4019              :         { return __d1._M_param == __d2._M_param && __d1._M_nd == __d2._M_nd; }
+    4020              : #else
+    4021              :         { return __d1._M_param == __d2._M_param; }
+    4022              : #endif
+    4023              : 
+    4024              :       /**
+    4025              :        * @brief Inserts a %binomial_distribution random number distribution
+    4026              :        * @p __x into the output stream @p __os.
+    4027              :        *
+    4028              :        * @param __os An output stream.
+    4029              :        * @param __x  A %binomial_distribution random number distribution.
+    4030              :        *
+    4031              :        * @returns The output stream with the state of @p __x inserted or in
+    4032              :        * an error state.
+    4033              :        */
+    4034              :       template<typename _IntType1,
+    4035              :                typename _CharT, typename _Traits>
+    4036              :         friend std::basic_ostream<_CharT, _Traits>&
+    4037              :         operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    4038              :                    const std::binomial_distribution<_IntType1>& __x);
+    4039              : 
+    4040              :       /**
+    4041              :        * @brief Extracts a %binomial_distribution random number distribution
+    4042              :        * @p __x from the input stream @p __is.
+    4043              :        *
+    4044              :        * @param __is An input stream.
+    4045              :        * @param __x  A %binomial_distribution random number generator engine.
+    4046              :        *
+    4047              :        * @returns The input stream with @p __x extracted or in an error
+    4048              :        *          state.
+    4049              :        */
+    4050              :       template<typename _IntType1,
+    4051              :                typename _CharT, typename _Traits>
+    4052              :         friend std::basic_istream<_CharT, _Traits>&
+    4053              :         operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    4054              :                    std::binomial_distribution<_IntType1>& __x);
+    4055              : 
+    4056              :     private:
+    4057              :       template<typename _ForwardIterator,
+    4058              :                typename _UniformRandomNumberGenerator>
+    4059              :         void
+    4060              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    4061              :                         _UniformRandomNumberGenerator& __urng,
+    4062              :                         const param_type& __p);
+    4063              : 
+    4064              :       template<typename _UniformRandomNumberGenerator>
+    4065              :         result_type
+    4066              :         _M_waiting(_UniformRandomNumberGenerator& __urng,
+    4067              :                    _IntType __t, double __q);
+    4068              : 
+    4069              :       param_type _M_param;
+    4070              : 
+    4071              :       // NB: Unused when _GLIBCXX_USE_C99_MATH_TR1 is undefined.
+    4072              :       std::normal_distribution<double> _M_nd;
+    4073              :     };
+    4074              : 
+    4075              : #if __cpp_impl_three_way_comparison < 201907L
+    4076              :   /**
+    4077              :    * @brief Return true if two binomial distributions are different.
+    4078              :    */
+    4079              :   template<typename _IntType>
+    4080              :     inline bool
+    4081              :     operator!=(const std::binomial_distribution<_IntType>& __d1,
+    4082              :                const std::binomial_distribution<_IntType>& __d2)
+    4083              :     { return !(__d1 == __d2); }
+    4084              : #endif
+    4085              : 
+    4086              :   /**
+    4087              :    * @brief A discrete geometric random number distribution.
+    4088              :    *
+    4089              :    * The formula for the geometric probability density function is
+    4090              :    * @f$p(i|p) = p(1 - p)^{i}@f$ where @f$p@f$ is the parameter of the
+    4091              :    * distribution.
+    4092              :    *
+    4093              :    * @headerfile random
+    4094              :    * @since C++11
+    4095              :    */
+    4096              :   template<typename _IntType = int>
+    4097              :     class geometric_distribution
+    4098              :     {
+    4099              :       static_assert(std::is_integral<_IntType>::value,
+    4100              :                     "result_type must be an integral type");
+    4101              : 
+    4102              :     public:
+    4103              :       /** The type of the range of the distribution. */
+    4104              :       typedef _IntType  result_type;
+    4105              : 
+    4106              :       /** Parameter type. */
+    4107              :       struct param_type
+    4108              :       {
+    4109              :         typedef geometric_distribution<_IntType> distribution_type;
+    4110              :         friend class geometric_distribution<_IntType>;
+    4111              : 
+    4112              :         param_type() : param_type(0.5) { }
+    4113              : 
+    4114              :         explicit
+    4115              :         param_type(double __p)
+    4116              :         : _M_p(__p)
+    4117              :         {
+    4118              :           __glibcxx_assert((_M_p > 0.0) && (_M_p < 1.0));
+    4119              :           _M_initialize();
+    4120              :         }
+    4121              : 
+    4122              :         double
+    4123              :         p() const
+    4124              :         { return _M_p; }
+    4125              : 
+    4126              :         friend bool
+    4127              :         operator==(const param_type& __p1, const param_type& __p2)
+    4128              :         { return __p1._M_p == __p2._M_p; }
+    4129              : 
+    4130              : #if __cpp_impl_three_way_comparison < 201907L
+    4131              :         friend bool
+    4132              :         operator!=(const param_type& __p1, const param_type& __p2)
+    4133              :         { return !(__p1 == __p2); }
+    4134              : #endif
+    4135              : 
+    4136              :       private:
+    4137              :         void
+    4138              :         _M_initialize()
+    4139              :         { _M_log_1_p = std::log(1.0 - _M_p); }
+    4140              : 
+    4141              :         double _M_p;
+    4142              : 
+    4143              :         double _M_log_1_p;
+    4144              :       };
+    4145              : 
+    4146              :       // constructors and member functions
+    4147              : 
+    4148              :       geometric_distribution() : geometric_distribution(0.5) { }
+    4149              : 
+    4150              :       explicit
+    4151              :       geometric_distribution(double __p)
+    4152              :       : _M_param(__p)
+    4153              :       { }
+    4154              : 
+    4155              :       explicit
+    4156              :       geometric_distribution(const param_type& __p)
+    4157              :       : _M_param(__p)
+    4158              :       { }
+    4159              : 
+    4160              :       /**
+    4161              :        * @brief Resets the distribution state.
+    4162              :        *
+    4163              :        * Does nothing for the geometric distribution.
+    4164              :        */
+    4165              :       void
+    4166              :       reset() { }
+    4167              : 
+    4168              :       /**
+    4169              :        * @brief Returns the distribution parameter @p p.
+    4170              :        */
+    4171              :       double
+    4172              :       p() const
+    4173              :       { return _M_param.p(); }
+    4174              : 
+    4175              :       /**
+    4176              :        * @brief Returns the parameter set of the distribution.
+    4177              :        */
+    4178              :       param_type
+    4179              :       param() const
+    4180              :       { return _M_param; }
+    4181              : 
+    4182              :       /**
+    4183              :        * @brief Sets the parameter set of the distribution.
+    4184              :        * @param __param The new parameter set of the distribution.
+    4185              :        */
+    4186              :       void
+    4187              :       param(const param_type& __param)
+    4188              :       { _M_param = __param; }
+    4189              : 
+    4190              :       /**
+    4191              :        * @brief Returns the greatest lower bound value of the distribution.
+    4192              :        */
+    4193              :       result_type
+    4194              :       min() const
+    4195              :       { return 0; }
+    4196              : 
+    4197              :       /**
+    4198              :        * @brief Returns the least upper bound value of the distribution.
+    4199              :        */
+    4200              :       result_type
+    4201              :       max() const
+    4202              :       { return std::numeric_limits<result_type>::max(); }
+    4203              : 
+    4204              :       /**
+    4205              :        * @brief Generating functions.
+    4206              :        */
+    4207              :       template<typename _UniformRandomNumberGenerator>
+    4208              :         result_type
+    4209              :         operator()(_UniformRandomNumberGenerator& __urng)
+    4210              :         { return this->operator()(__urng, _M_param); }
+    4211              : 
+    4212              :       template<typename _UniformRandomNumberGenerator>
+    4213              :         result_type
+    4214              :         operator()(_UniformRandomNumberGenerator& __urng,
+    4215              :                    const param_type& __p);
+    4216              : 
+    4217              :       template<typename _ForwardIterator,
+    4218              :                typename _UniformRandomNumberGenerator>
+    4219              :         void
+    4220              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    4221              :                    _UniformRandomNumberGenerator& __urng)
+    4222              :         { this->__generate(__f, __t, __urng, _M_param); }
+    4223              : 
+    4224              :       template<typename _ForwardIterator,
+    4225              :                typename _UniformRandomNumberGenerator>
+    4226              :         void
+    4227              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    4228              :                    _UniformRandomNumberGenerator& __urng,
+    4229              :                    const param_type& __p)
+    4230              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    4231              : 
+    4232              :       template<typename _UniformRandomNumberGenerator>
+    4233              :         void
+    4234              :         __generate(result_type* __f, result_type* __t,
+    4235              :                    _UniformRandomNumberGenerator& __urng,
+    4236              :                    const param_type& __p)
+    4237              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    4238              : 
+    4239              :       /**
+    4240              :        * @brief Return true if two geometric distributions have
+    4241              :        *        the same parameters.
+    4242              :        */
+    4243              :       friend bool
+    4244              :       operator==(const geometric_distribution& __d1,
+    4245              :                  const geometric_distribution& __d2)
+    4246              :       { return __d1._M_param == __d2._M_param; }
+    4247              : 
+    4248              :     private:
+    4249              :       template<typename _ForwardIterator,
+    4250              :                typename _UniformRandomNumberGenerator>
+    4251              :         void
+    4252              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    4253              :                         _UniformRandomNumberGenerator& __urng,
+    4254              :                         const param_type& __p);
+    4255              : 
+    4256              :       param_type _M_param;
+    4257              :     };
+    4258              : 
+    4259              : #if __cpp_impl_three_way_comparison < 201907L
+    4260              :   /**
+    4261              :    * @brief Return true if two geometric distributions have
+    4262              :    *        different parameters.
+    4263              :    */
+    4264              :   template<typename _IntType>
+    4265              :     inline bool
+    4266              :     operator!=(const std::geometric_distribution<_IntType>& __d1,
+    4267              :                const std::geometric_distribution<_IntType>& __d2)
+    4268              :     { return !(__d1 == __d2); }
+    4269              : #endif
+    4270              : 
+    4271              :   /**
+    4272              :    * @brief Inserts a %geometric_distribution random number distribution
+    4273              :    * @p __x into the output stream @p __os.
+    4274              :    *
+    4275              :    * @param __os An output stream.
+    4276              :    * @param __x  A %geometric_distribution random number distribution.
+    4277              :    *
+    4278              :    * @returns The output stream with the state of @p __x inserted or in
+    4279              :    * an error state.
+    4280              :    */
+    4281              :   template<typename _IntType,
+    4282              :            typename _CharT, typename _Traits>
+    4283              :     std::basic_ostream<_CharT, _Traits>&
+    4284              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    4285              :                const std::geometric_distribution<_IntType>& __x);
+    4286              : 
+    4287              :   /**
+    4288              :    * @brief Extracts a %geometric_distribution random number distribution
+    4289              :    * @p __x from the input stream @p __is.
+    4290              :    *
+    4291              :    * @param __is An input stream.
+    4292              :    * @param __x  A %geometric_distribution random number generator engine.
+    4293              :    *
+    4294              :    * @returns The input stream with @p __x extracted or in an error state.
+    4295              :    */
+    4296              :   template<typename _IntType,
+    4297              :            typename _CharT, typename _Traits>
+    4298              :     std::basic_istream<_CharT, _Traits>&
+    4299              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    4300              :                std::geometric_distribution<_IntType>& __x);
+    4301              : 
+    4302              : 
+    4303              :   /**
+    4304              :    * @brief A negative_binomial_distribution random number distribution.
+    4305              :    *
+    4306              :    * The formula for the negative binomial probability mass function is
+    4307              :    * @f$p(i) = \binom{n}{i} p^i (1 - p)^{t - i}@f$ where @f$t@f$
+    4308              :    * and @f$p@f$ are the parameters of the distribution.
+    4309              :    *
+    4310              :    * @headerfile random
+    4311              :    * @since C++11
+    4312              :    */
+    4313              :   template<typename _IntType = int>
+    4314              :     class negative_binomial_distribution
+    4315              :     {
+    4316              :       static_assert(std::is_integral<_IntType>::value,
+    4317              :                     "result_type must be an integral type");
+    4318              : 
+    4319              :     public:
+    4320              :       /** The type of the range of the distribution. */
+    4321              :       typedef _IntType result_type;
+    4322              : 
+    4323              :       /** Parameter type. */
+    4324              :       struct param_type
+    4325              :       {
+    4326              :         typedef negative_binomial_distribution<_IntType> distribution_type;
+    4327              : 
+    4328              :         param_type() : param_type(1) { }
+    4329              : 
+    4330              :         explicit
+    4331              :         param_type(_IntType __k, double __p = 0.5)
+    4332              :         : _M_k(__k), _M_p(__p)
+    4333              :         {
+    4334              :           __glibcxx_assert((_M_k > 0) && (_M_p > 0.0) && (_M_p <= 1.0));
+    4335              :         }
+    4336              : 
+    4337              :         _IntType
+    4338              :         k() const
+    4339              :         { return _M_k; }
+    4340              : 
+    4341              :         double
+    4342              :         p() const
+    4343              :         { return _M_p; }
+    4344              : 
+    4345              :         friend bool
+    4346              :         operator==(const param_type& __p1, const param_type& __p2)
+    4347              :         { return __p1._M_k == __p2._M_k && __p1._M_p == __p2._M_p; }
+    4348              : 
+    4349              : #if __cpp_impl_three_way_comparison < 201907L
+    4350              :         friend bool
+    4351              :         operator!=(const param_type& __p1, const param_type& __p2)
+    4352              :         { return !(__p1 == __p2); }
+    4353              : #endif
+    4354              : 
+    4355              :       private:
+    4356              :         _IntType _M_k;
+    4357              :         double _M_p;
+    4358              :       };
+    4359              : 
+    4360              :       negative_binomial_distribution() : negative_binomial_distribution(1) { }
+    4361              : 
+    4362              :       explicit
+    4363              :       negative_binomial_distribution(_IntType __k, double __p = 0.5)
+    4364              :       : _M_param(__k, __p), _M_gd(__k, (1.0 - __p) / __p)
+    4365              :       { }
+    4366              : 
+    4367              :       explicit
+    4368              :       negative_binomial_distribution(const param_type& __p)
+    4369              :       : _M_param(__p), _M_gd(__p.k(), (1.0 - __p.p()) / __p.p())
+    4370              :       { }
+    4371              : 
+    4372              :       /**
+    4373              :        * @brief Resets the distribution state.
+    4374              :        */
+    4375              :       void
+    4376              :       reset()
+    4377              :       { _M_gd.reset(); }
+    4378              : 
+    4379              :       /**
+    4380              :        * @brief Return the @f$k@f$ parameter of the distribution.
+    4381              :        */
+    4382              :       _IntType
+    4383              :       k() const
+    4384              :       { return _M_param.k(); }
+    4385              : 
+    4386              :       /**
+    4387              :        * @brief Return the @f$p@f$ parameter of the distribution.
+    4388              :        */
+    4389              :       double
+    4390              :       p() const
+    4391              :       { return _M_param.p(); }
+    4392              : 
+    4393              :       /**
+    4394              :        * @brief Returns the parameter set of the distribution.
+    4395              :        */
+    4396              :       param_type
+    4397              :       param() const
+    4398              :       { return _M_param; }
+    4399              : 
+    4400              :       /**
+    4401              :        * @brief Sets the parameter set of the distribution.
+    4402              :        * @param __param The new parameter set of the distribution.
+    4403              :        */
+    4404              :       void
+    4405              :       param(const param_type& __param)
+    4406              :       { _M_param = __param; }
+    4407              : 
+    4408              :       /**
+    4409              :        * @brief Returns the greatest lower bound value of the distribution.
+    4410              :        */
+    4411              :       result_type
+    4412              :       min() const
+    4413              :       { return result_type(0); }
+    4414              : 
+    4415              :       /**
+    4416              :        * @brief Returns the least upper bound value of the distribution.
+    4417              :        */
+    4418              :       result_type
+    4419              :       max() const
+    4420              :       { return std::numeric_limits<result_type>::max(); }
+    4421              : 
+    4422              :       /**
+    4423              :        * @brief Generating functions.
+    4424              :        */
+    4425              :       template<typename _UniformRandomNumberGenerator>
+    4426              :         result_type
+    4427              :         operator()(_UniformRandomNumberGenerator& __urng);
+    4428              : 
+    4429              :       template<typename _UniformRandomNumberGenerator>
+    4430              :         result_type
+    4431              :         operator()(_UniformRandomNumberGenerator& __urng,
+    4432              :                    const param_type& __p);
+    4433              : 
+    4434              :       template<typename _ForwardIterator,
+    4435              :                typename _UniformRandomNumberGenerator>
+    4436              :         void
+    4437              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    4438              :                    _UniformRandomNumberGenerator& __urng)
+    4439              :         { this->__generate_impl(__f, __t, __urng); }
+    4440              : 
+    4441              :       template<typename _ForwardIterator,
+    4442              :                typename _UniformRandomNumberGenerator>
+    4443              :         void
+    4444              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    4445              :                    _UniformRandomNumberGenerator& __urng,
+    4446              :                    const param_type& __p)
+    4447              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    4448              : 
+    4449              :       template<typename _UniformRandomNumberGenerator>
+    4450              :         void
+    4451              :         __generate(result_type* __f, result_type* __t,
+    4452              :                    _UniformRandomNumberGenerator& __urng)
+    4453              :         { this->__generate_impl(__f, __t, __urng); }
+    4454              : 
+    4455              :       template<typename _UniformRandomNumberGenerator>
+    4456              :         void
+    4457              :         __generate(result_type* __f, result_type* __t,
+    4458              :                    _UniformRandomNumberGenerator& __urng,
+    4459              :                    const param_type& __p)
+    4460              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    4461              : 
+    4462              :       /**
+    4463              :        * @brief Return true if two negative binomial distributions have
+    4464              :        *        the same parameters and the sequences that would be
+    4465              :        *        generated are equal.
+    4466              :        */
+    4467              :       friend bool
+    4468              :       operator==(const negative_binomial_distribution& __d1,
+    4469              :                  const negative_binomial_distribution& __d2)
+    4470              :       { return __d1._M_param == __d2._M_param && __d1._M_gd == __d2._M_gd; }
+    4471              : 
+    4472              :       /**
+    4473              :        * @brief Inserts a %negative_binomial_distribution random
+    4474              :        *        number distribution @p __x into the output stream @p __os.
+    4475              :        *
+    4476              :        * @param __os An output stream.
+    4477              :        * @param __x  A %negative_binomial_distribution random number
+    4478              :        *             distribution.
+    4479              :        *
+    4480              :        * @returns The output stream with the state of @p __x inserted or in
+    4481              :        *          an error state.
+    4482              :        */
+    4483              :       template<typename _IntType1, typename _CharT, typename _Traits>
+    4484              :         friend std::basic_ostream<_CharT, _Traits>&
+    4485              :         operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    4486              :                    const std::negative_binomial_distribution<_IntType1>& __x);
+    4487              : 
+    4488              :       /**
+    4489              :        * @brief Extracts a %negative_binomial_distribution random number
+    4490              :        *        distribution @p __x from the input stream @p __is.
+    4491              :        *
+    4492              :        * @param __is An input stream.
+    4493              :        * @param __x A %negative_binomial_distribution random number
+    4494              :        *            generator engine.
+    4495              :        *
+    4496              :        * @returns The input stream with @p __x extracted or in an error state.
+    4497              :        */
+    4498              :       template<typename _IntType1, typename _CharT, typename _Traits>
+    4499              :         friend std::basic_istream<_CharT, _Traits>&
+    4500              :         operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    4501              :                    std::negative_binomial_distribution<_IntType1>& __x);
+    4502              : 
+    4503              :     private:
+    4504              :       template<typename _ForwardIterator,
+    4505              :                typename _UniformRandomNumberGenerator>
+    4506              :         void
+    4507              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    4508              :                         _UniformRandomNumberGenerator& __urng);
+    4509              :       template<typename _ForwardIterator,
+    4510              :                typename _UniformRandomNumberGenerator>
+    4511              :         void
+    4512              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    4513              :                         _UniformRandomNumberGenerator& __urng,
+    4514              :                         const param_type& __p);
+    4515              : 
+    4516              :       param_type _M_param;
+    4517              : 
+    4518              :       std::gamma_distribution<double> _M_gd;
+    4519              :     };
+    4520              : 
+    4521              : #if __cpp_impl_three_way_comparison < 201907L
+    4522              :   /**
+    4523              :    * @brief Return true if two negative binomial distributions are different.
+    4524              :    */
+    4525              :   template<typename _IntType>
+    4526              :     inline bool
+    4527              :     operator!=(const std::negative_binomial_distribution<_IntType>& __d1,
+    4528              :                const std::negative_binomial_distribution<_IntType>& __d2)
+    4529              :     { return !(__d1 == __d2); }
+    4530              : #endif
+    4531              : 
+    4532              :   /// @} group random_distributions_bernoulli
+    4533              : 
+    4534              :   /**
+    4535              :    * @addtogroup random_distributions_poisson Poisson Distributions
+    4536              :    * @ingroup random_distributions
+    4537              :    * @{
+    4538              :    */
+    4539              : 
+    4540              :   /**
+    4541              :    * @brief A discrete Poisson random number distribution.
+    4542              :    *
+    4543              :    * The formula for the Poisson probability density function is
+    4544              :    * @f$p(i|\mu) = \frac{\mu^i}{i!} e^{-\mu}@f$ where @f$\mu@f$ is the
+    4545              :    * parameter of the distribution.
+    4546              :    *
+    4547              :    * @headerfile random
+    4548              :    * @since C++11
+    4549              :    */
+    4550              :   template<typename _IntType = int>
+    4551              :     class poisson_distribution
+    4552              :     {
+    4553              :       static_assert(std::is_integral<_IntType>::value,
+    4554              :                     "result_type must be an integral type");
+    4555              : 
+    4556              :     public:
+    4557              :       /** The type of the range of the distribution. */
+    4558              :       typedef _IntType  result_type;
+    4559              : 
+    4560              :       /** Parameter type. */
+    4561              :       struct param_type
+    4562              :       {
+    4563              :         typedef poisson_distribution<_IntType> distribution_type;
+    4564              :         friend class poisson_distribution<_IntType>;
+    4565              : 
+    4566              :         param_type() : param_type(1.0) { }
+    4567              : 
+    4568              :         explicit
+    4569              :         param_type(double __mean)
+    4570              :         : _M_mean(__mean)
+    4571              :         {
+    4572              :           __glibcxx_assert(_M_mean > 0.0);
+    4573              :           _M_initialize();
+    4574              :         }
+    4575              : 
+    4576              :         double
+    4577              :         mean() const
+    4578              :         { return _M_mean; }
+    4579              : 
+    4580              :         friend bool
+    4581              :         operator==(const param_type& __p1, const param_type& __p2)
+    4582              :         { return __p1._M_mean == __p2._M_mean; }
+    4583              : 
+    4584              : #if __cpp_impl_three_way_comparison < 201907L
+    4585              :         friend bool
+    4586              :         operator!=(const param_type& __p1, const param_type& __p2)
+    4587              :         { return !(__p1 == __p2); }
+    4588              : #endif
+    4589              : 
+    4590              :       private:
+    4591              :         // Hosts either log(mean) or the threshold of the simple method.
+    4592              :         void
+    4593              :         _M_initialize();
+    4594              : 
+    4595              :         double _M_mean;
+    4596              : 
+    4597              :         double _M_lm_thr;
+    4598              : #if _GLIBCXX_USE_C99_MATH_TR1
+    4599              :         double _M_lfm, _M_sm, _M_d, _M_scx, _M_1cx, _M_c2b, _M_cb;
+    4600              : #endif
+    4601              :       };
+    4602              : 
+    4603              :       // constructors and member functions
+    4604              : 
+    4605              :       poisson_distribution() : poisson_distribution(1.0) { }
+    4606              : 
+    4607              :       explicit
+    4608              :       poisson_distribution(double __mean)
+    4609              :       : _M_param(__mean), _M_nd()
+    4610              :       { }
+    4611              : 
+    4612              :       explicit
+    4613              :       poisson_distribution(const param_type& __p)
+    4614              :       : _M_param(__p), _M_nd()
+    4615              :       { }
+    4616              : 
+    4617              :       /**
+    4618              :        * @brief Resets the distribution state.
+    4619              :        */
+    4620              :       void
+    4621              :       reset()
+    4622              :       { _M_nd.reset(); }
+    4623              : 
+    4624              :       /**
+    4625              :        * @brief Returns the distribution parameter @p mean.
+    4626              :        */
+    4627              :       double
+    4628              :       mean() const
+    4629              :       { return _M_param.mean(); }
+    4630              : 
+    4631              :       /**
+    4632              :        * @brief Returns the parameter set of the distribution.
+    4633              :        */
+    4634              :       param_type
+    4635              :       param() const
+    4636              :       { return _M_param; }
+    4637              : 
+    4638              :       /**
+    4639              :        * @brief Sets the parameter set of the distribution.
+    4640              :        * @param __param The new parameter set of the distribution.
+    4641              :        */
+    4642              :       void
+    4643              :       param(const param_type& __param)
+    4644              :       { _M_param = __param; }
+    4645              : 
+    4646              :       /**
+    4647              :        * @brief Returns the greatest lower bound value of the distribution.
+    4648              :        */
+    4649              :       result_type
+    4650              :       min() const
+    4651              :       { return 0; }
+    4652              : 
+    4653              :       /**
+    4654              :        * @brief Returns the least upper bound value of the distribution.
+    4655              :        */
+    4656              :       result_type
+    4657              :       max() const
+    4658              :       { return std::numeric_limits<result_type>::max(); }
+    4659              : 
+    4660              :       /**
+    4661              :        * @brief Generating functions.
+    4662              :        */
+    4663              :       template<typename _UniformRandomNumberGenerator>
+    4664              :         result_type
+    4665              :         operator()(_UniformRandomNumberGenerator& __urng)
+    4666              :         { return this->operator()(__urng, _M_param); }
+    4667              : 
+    4668              :       template<typename _UniformRandomNumberGenerator>
+    4669              :         result_type
+    4670              :         operator()(_UniformRandomNumberGenerator& __urng,
+    4671              :                    const param_type& __p);
+    4672              : 
+    4673              :       template<typename _ForwardIterator,
+    4674              :                typename _UniformRandomNumberGenerator>
+    4675              :         void
+    4676              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    4677              :                    _UniformRandomNumberGenerator& __urng)
+    4678              :         { this->__generate(__f, __t, __urng, _M_param); }
+    4679              : 
+    4680              :       template<typename _ForwardIterator,
+    4681              :                typename _UniformRandomNumberGenerator>
+    4682              :         void
+    4683              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    4684              :                    _UniformRandomNumberGenerator& __urng,
+    4685              :                    const param_type& __p)
+    4686              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    4687              : 
+    4688              :       template<typename _UniformRandomNumberGenerator>
+    4689              :         void
+    4690              :         __generate(result_type* __f, result_type* __t,
+    4691              :                    _UniformRandomNumberGenerator& __urng,
+    4692              :                    const param_type& __p)
+    4693              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    4694              : 
+    4695              :        /**
+    4696              :         * @brief Return true if two Poisson distributions have the same
+    4697              :         *        parameters and the sequences that would be generated
+    4698              :         *        are equal.
+    4699              :         */
+    4700              :       friend bool
+    4701              :       operator==(const poisson_distribution& __d1,
+    4702              :                  const poisson_distribution& __d2)
+    4703              : #ifdef _GLIBCXX_USE_C99_MATH_TR1
+    4704              :       { return __d1._M_param == __d2._M_param && __d1._M_nd == __d2._M_nd; }
+    4705              : #else
+    4706              :       { return __d1._M_param == __d2._M_param; }
+    4707              : #endif
+    4708              : 
+    4709              :       /**
+    4710              :        * @brief Inserts a %poisson_distribution random number distribution
+    4711              :        * @p __x into the output stream @p __os.
+    4712              :        *
+    4713              :        * @param __os An output stream.
+    4714              :        * @param __x  A %poisson_distribution random number distribution.
+    4715              :        *
+    4716              :        * @returns The output stream with the state of @p __x inserted or in
+    4717              :        * an error state.
+    4718              :        */
+    4719              :       template<typename _IntType1, typename _CharT, typename _Traits>
+    4720              :         friend std::basic_ostream<_CharT, _Traits>&
+    4721              :         operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    4722              :                    const std::poisson_distribution<_IntType1>& __x);
+    4723              : 
+    4724              :       /**
+    4725              :        * @brief Extracts a %poisson_distribution random number distribution
+    4726              :        * @p __x from the input stream @p __is.
+    4727              :        *
+    4728              :        * @param __is An input stream.
+    4729              :        * @param __x  A %poisson_distribution random number generator engine.
+    4730              :        *
+    4731              :        * @returns The input stream with @p __x extracted or in an error
+    4732              :        *          state.
+    4733              :        */
+    4734              :       template<typename _IntType1, typename _CharT, typename _Traits>
+    4735              :         friend std::basic_istream<_CharT, _Traits>&
+    4736              :         operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    4737              :                    std::poisson_distribution<_IntType1>& __x);
+    4738              : 
+    4739              :     private:
+    4740              :       template<typename _ForwardIterator,
+    4741              :                typename _UniformRandomNumberGenerator>
+    4742              :         void
+    4743              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    4744              :                         _UniformRandomNumberGenerator& __urng,
+    4745              :                         const param_type& __p);
+    4746              : 
+    4747              :       param_type _M_param;
+    4748              : 
+    4749              :       // NB: Unused when _GLIBCXX_USE_C99_MATH_TR1 is undefined.
+    4750              :       std::normal_distribution<double> _M_nd;
+    4751              :     };
+    4752              : 
+    4753              : #if __cpp_impl_three_way_comparison < 201907L
+    4754              :   /**
+    4755              :    * @brief Return true if two Poisson distributions are different.
+    4756              :    */
+    4757              :   template<typename _IntType>
+    4758              :     inline bool
+    4759              :     operator!=(const std::poisson_distribution<_IntType>& __d1,
+    4760              :                const std::poisson_distribution<_IntType>& __d2)
+    4761              :     { return !(__d1 == __d2); }
+    4762              : #endif
+    4763              : 
+    4764              :   /**
+    4765              :    * @brief An exponential continuous distribution for random numbers.
+    4766              :    *
+    4767              :    * The formula for the exponential probability density function is
+    4768              :    * @f$p(x|\lambda) = \lambda e^{-\lambda x}@f$.
+    4769              :    *
+    4770              :    * <table border=1 cellpadding=10 cellspacing=0>
+    4771              :    * <caption align=top>Distribution Statistics</caption>
+    4772              :    * <tr><td>Mean</td><td>@f$\frac{1}{\lambda}@f$</td></tr>
+    4773              :    * <tr><td>Median</td><td>@f$\frac{\ln 2}{\lambda}@f$</td></tr>
+    4774              :    * <tr><td>Mode</td><td>@f$zero@f$</td></tr>
+    4775              :    * <tr><td>Range</td><td>@f$[0, \infty]@f$</td></tr>
+    4776              :    * <tr><td>Standard Deviation</td><td>@f$\frac{1}{\lambda}@f$</td></tr>
+    4777              :    * </table>
+    4778              :    *
+    4779              :    * @headerfile random
+    4780              :    * @since C++11
+    4781              :    */
+    4782              :   template<typename _RealType = double>
+    4783              :     class exponential_distribution
+    4784              :     {
+    4785              :       static_assert(std::is_floating_point<_RealType>::value,
+    4786              :                     "result_type must be a floating point type");
+    4787              : 
+    4788              :     public:
+    4789              :       /** The type of the range of the distribution. */
+    4790              :       typedef _RealType result_type;
+    4791              : 
+    4792              :       /** Parameter type. */
+    4793              :       struct param_type
+    4794              :       {
+    4795              :         typedef exponential_distribution<_RealType> distribution_type;
+    4796              : 
+    4797              :         param_type() : param_type(1.0) { }
+    4798              : 
+    4799              :         explicit
+    4800              :         param_type(_RealType __lambda)
+    4801              :         : _M_lambda(__lambda)
+    4802              :         {
+    4803              :           __glibcxx_assert(_M_lambda > _RealType(0));
+    4804              :         }
+    4805              : 
+    4806              :         _RealType
+    4807              :         lambda() const
+    4808              :         { return _M_lambda; }
+    4809              : 
+    4810              :         friend bool
+    4811              :         operator==(const param_type& __p1, const param_type& __p2)
+    4812              :         { return __p1._M_lambda == __p2._M_lambda; }
+    4813              : 
+    4814              : #if __cpp_impl_three_way_comparison < 201907L
+    4815              :         friend bool
+    4816              :         operator!=(const param_type& __p1, const param_type& __p2)
+    4817              :         { return !(__p1 == __p2); }
+    4818              : #endif
+    4819              : 
+    4820              :       private:
+    4821              :         _RealType _M_lambda;
+    4822              :       };
+    4823              : 
+    4824              :     public:
+    4825              :       /**
+    4826              :        * @brief Constructs an exponential distribution with inverse scale
+    4827              :        *        parameter 1.0
+    4828              :        */
+    4829              :       exponential_distribution() : exponential_distribution(1.0) { }
+    4830              : 
+    4831              :       /**
+    4832              :        * @brief Constructs an exponential distribution with inverse scale
+    4833              :        *        parameter @f$\lambda@f$.
+    4834              :        */
+    4835              :       explicit
+    4836              :       exponential_distribution(_RealType __lambda)
+    4837              :       : _M_param(__lambda)
+    4838              :       { }
+    4839              : 
+    4840              :       explicit
+    4841              :       exponential_distribution(const param_type& __p)
+    4842              :       : _M_param(__p)
+    4843              :       { }
+    4844              : 
+    4845              :       /**
+    4846              :        * @brief Resets the distribution state.
+    4847              :        *
+    4848              :        * Has no effect on exponential distributions.
+    4849              :        */
+    4850              :       void
+    4851              :       reset() { }
+    4852              : 
+    4853              :       /**
+    4854              :        * @brief Returns the inverse scale parameter of the distribution.
+    4855              :        */
+    4856              :       _RealType
+    4857              :       lambda() const
+    4858              :       { return _M_param.lambda(); }
+    4859              : 
+    4860              :       /**
+    4861              :        * @brief Returns the parameter set of the distribution.
+    4862              :        */
+    4863              :       param_type
+    4864              :       param() const
+    4865              :       { return _M_param; }
+    4866              : 
+    4867              :       /**
+    4868              :        * @brief Sets the parameter set of the distribution.
+    4869              :        * @param __param The new parameter set of the distribution.
+    4870              :        */
+    4871              :       void
+    4872              :       param(const param_type& __param)
+    4873              :       { _M_param = __param; }
+    4874              : 
+    4875              :       /**
+    4876              :        * @brief Returns the greatest lower bound value of the distribution.
+    4877              :        */
+    4878              :       result_type
+    4879              :       min() const
+    4880              :       { return result_type(0); }
+    4881              : 
+    4882              :       /**
+    4883              :        * @brief Returns the least upper bound value of the distribution.
+    4884              :        */
+    4885              :       result_type
+    4886              :       max() const
+    4887              :       { return std::numeric_limits<result_type>::max(); }
+    4888              : 
+    4889              :       /**
+    4890              :        * @brief Generating functions.
+    4891              :        */
+    4892              :       template<typename _UniformRandomNumberGenerator>
+    4893              :         result_type
+    4894              :         operator()(_UniformRandomNumberGenerator& __urng)
+    4895              :         { return this->operator()(__urng, _M_param); }
+    4896              : 
+    4897              :       template<typename _UniformRandomNumberGenerator>
+    4898              :         result_type
+    4899              :         operator()(_UniformRandomNumberGenerator& __urng,
+    4900              :                    const param_type& __p)
+    4901              :         {
+    4902              :           __detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
+    4903              :             __aurng(__urng);
+    4904              :           return -std::log(result_type(1) - __aurng()) / __p.lambda();
+    4905              :         }
+    4906              : 
+    4907              :       template<typename _ForwardIterator,
+    4908              :                typename _UniformRandomNumberGenerator>
+    4909              :         void
+    4910              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    4911              :                    _UniformRandomNumberGenerator& __urng)
+    4912              :         { this->__generate(__f, __t, __urng, _M_param); }
+    4913              : 
+    4914              :       template<typename _ForwardIterator,
+    4915              :                typename _UniformRandomNumberGenerator>
+    4916              :         void
+    4917              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    4918              :                    _UniformRandomNumberGenerator& __urng,
+    4919              :                    const param_type& __p)
+    4920              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    4921              : 
+    4922              :       template<typename _UniformRandomNumberGenerator>
+    4923              :         void
+    4924              :         __generate(result_type* __f, result_type* __t,
+    4925              :                    _UniformRandomNumberGenerator& __urng,
+    4926              :                    const param_type& __p)
+    4927              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    4928              : 
+    4929              :       /**
+    4930              :        * @brief Return true if two exponential distributions have the same
+    4931              :        *        parameters.
+    4932              :        */
+    4933              :       friend bool
+    4934              :       operator==(const exponential_distribution& __d1,
+    4935              :                  const exponential_distribution& __d2)
+    4936              :       { return __d1._M_param == __d2._M_param; }
+    4937              : 
+    4938              :     private:
+    4939              :       template<typename _ForwardIterator,
+    4940              :                typename _UniformRandomNumberGenerator>
+    4941              :         void
+    4942              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    4943              :                         _UniformRandomNumberGenerator& __urng,
+    4944              :                         const param_type& __p);
+    4945              : 
+    4946              :       param_type _M_param;
+    4947              :     };
+    4948              : 
+    4949              : #if __cpp_impl_three_way_comparison < 201907L
+    4950              :   /**
+    4951              :    * @brief Return true if two exponential distributions have different
+    4952              :    *        parameters.
+    4953              :    */
+    4954              :   template<typename _RealType>
+    4955              :     inline bool
+    4956              :     operator!=(const std::exponential_distribution<_RealType>& __d1,
+    4957              :                const std::exponential_distribution<_RealType>& __d2)
+    4958              :     { return !(__d1 == __d2); }
+    4959              : #endif
+    4960              : 
+    4961              :   /**
+    4962              :    * @brief Inserts a %exponential_distribution random number distribution
+    4963              :    * @p __x into the output stream @p __os.
+    4964              :    *
+    4965              :    * @param __os An output stream.
+    4966              :    * @param __x  A %exponential_distribution random number distribution.
+    4967              :    *
+    4968              :    * @returns The output stream with the state of @p __x inserted or in
+    4969              :    * an error state.
+    4970              :    */
+    4971              :   template<typename _RealType, typename _CharT, typename _Traits>
+    4972              :     std::basic_ostream<_CharT, _Traits>&
+    4973              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    4974              :                const std::exponential_distribution<_RealType>& __x);
+    4975              : 
+    4976              :   /**
+    4977              :    * @brief Extracts a %exponential_distribution random number distribution
+    4978              :    * @p __x from the input stream @p __is.
+    4979              :    *
+    4980              :    * @param __is An input stream.
+    4981              :    * @param __x A %exponential_distribution random number
+    4982              :    *            generator engine.
+    4983              :    *
+    4984              :    * @returns The input stream with @p __x extracted or in an error state.
+    4985              :    */
+    4986              :   template<typename _RealType, typename _CharT, typename _Traits>
+    4987              :     std::basic_istream<_CharT, _Traits>&
+    4988              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    4989              :                std::exponential_distribution<_RealType>& __x);
+    4990              : 
+    4991              : 
+    4992              :   /**
+    4993              :    * @brief A weibull_distribution random number distribution.
+    4994              :    *
+    4995              :    * The formula for the normal probability density function is:
+    4996              :    * @f[
+    4997              :    *     p(x|\alpha,\beta) = \frac{\alpha}{\beta} (\frac{x}{\beta})^{\alpha-1}
+    4998              :    *                         \exp{(-(\frac{x}{\beta})^\alpha)} 
+    4999              :    * @f]
+    5000              :    *
+    5001              :    * @headerfile random
+    5002              :    * @since C++11
+    5003              :    */
+    5004              :   template<typename _RealType = double>
+    5005              :     class weibull_distribution
+    5006              :     {
+    5007              :       static_assert(std::is_floating_point<_RealType>::value,
+    5008              :                     "result_type must be a floating point type");
+    5009              : 
+    5010              :     public:
+    5011              :       /** The type of the range of the distribution. */
+    5012              :       typedef _RealType result_type;
+    5013              : 
+    5014              :       /** Parameter type. */
+    5015              :       struct param_type
+    5016              :       {
+    5017              :         typedef weibull_distribution<_RealType> distribution_type;
+    5018              : 
+    5019              :         param_type() : param_type(1.0) { }
+    5020              : 
+    5021              :         explicit
+    5022              :         param_type(_RealType __a, _RealType __b = _RealType(1.0))
+    5023              :         : _M_a(__a), _M_b(__b)
+    5024              :         { }
+    5025              : 
+    5026              :         _RealType
+    5027              :         a() const
+    5028              :         { return _M_a; }
+    5029              : 
+    5030              :         _RealType
+    5031              :         b() const
+    5032              :         { return _M_b; }
+    5033              : 
+    5034              :         friend bool
+    5035              :         operator==(const param_type& __p1, const param_type& __p2)
+    5036              :         { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; }
+    5037              : 
+    5038              : #if __cpp_impl_three_way_comparison < 201907L
+    5039              :         friend bool
+    5040              :         operator!=(const param_type& __p1, const param_type& __p2)
+    5041              :         { return !(__p1 == __p2); }
+    5042              : #endif
+    5043              : 
+    5044              :       private:
+    5045              :         _RealType _M_a;
+    5046              :         _RealType _M_b;
+    5047              :       };
+    5048              : 
+    5049              :       weibull_distribution() : weibull_distribution(1.0) { }
+    5050              : 
+    5051              :       explicit
+    5052              :       weibull_distribution(_RealType __a, _RealType __b = _RealType(1))
+    5053              :       : _M_param(__a, __b)
+    5054              :       { }
+    5055              : 
+    5056              :       explicit
+    5057              :       weibull_distribution(const param_type& __p)
+    5058              :       : _M_param(__p)
+    5059              :       { }
+    5060              : 
+    5061              :       /**
+    5062              :        * @brief Resets the distribution state.
+    5063              :        */
+    5064              :       void
+    5065              :       reset()
+    5066              :       { }
+    5067              : 
+    5068              :       /**
+    5069              :        * @brief Return the @f$a@f$ parameter of the distribution.
+    5070              :        */
+    5071              :       _RealType
+    5072              :       a() const
+    5073              :       { return _M_param.a(); }
+    5074              : 
+    5075              :       /**
+    5076              :        * @brief Return the @f$b@f$ parameter of the distribution.
+    5077              :        */
+    5078              :       _RealType
+    5079              :       b() const
+    5080              :       { return _M_param.b(); }
+    5081              : 
+    5082              :       /**
+    5083              :        * @brief Returns the parameter set of the distribution.
+    5084              :        */
+    5085              :       param_type
+    5086              :       param() const
+    5087              :       { return _M_param; }
+    5088              : 
+    5089              :       /**
+    5090              :        * @brief Sets the parameter set of the distribution.
+    5091              :        * @param __param The new parameter set of the distribution.
+    5092              :        */
+    5093              :       void
+    5094              :       param(const param_type& __param)
+    5095              :       { _M_param = __param; }
+    5096              : 
+    5097              :       /**
+    5098              :        * @brief Returns the greatest lower bound value of the distribution.
+    5099              :        */
+    5100              :       result_type
+    5101              :       min() const
+    5102              :       { return result_type(0); }
+    5103              : 
+    5104              :       /**
+    5105              :        * @brief Returns the least upper bound value of the distribution.
+    5106              :        */
+    5107              :       result_type
+    5108              :       max() const
+    5109              :       { return std::numeric_limits<result_type>::max(); }
+    5110              : 
+    5111              :       /**
+    5112              :        * @brief Generating functions.
+    5113              :        */
+    5114              :       template<typename _UniformRandomNumberGenerator>
+    5115              :         result_type
+    5116              :         operator()(_UniformRandomNumberGenerator& __urng)
+    5117              :         { return this->operator()(__urng, _M_param); }
+    5118              : 
+    5119              :       template<typename _UniformRandomNumberGenerator>
+    5120              :         result_type
+    5121              :         operator()(_UniformRandomNumberGenerator& __urng,
+    5122              :                    const param_type& __p);
+    5123              : 
+    5124              :       template<typename _ForwardIterator,
+    5125              :                typename _UniformRandomNumberGenerator>
+    5126              :         void
+    5127              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    5128              :                    _UniformRandomNumberGenerator& __urng)
+    5129              :         { this->__generate(__f, __t, __urng, _M_param); }
+    5130              : 
+    5131              :       template<typename _ForwardIterator,
+    5132              :                typename _UniformRandomNumberGenerator>
+    5133              :         void
+    5134              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    5135              :                    _UniformRandomNumberGenerator& __urng,
+    5136              :                    const param_type& __p)
+    5137              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    5138              : 
+    5139              :       template<typename _UniformRandomNumberGenerator>
+    5140              :         void
+    5141              :         __generate(result_type* __f, result_type* __t,
+    5142              :                    _UniformRandomNumberGenerator& __urng,
+    5143              :                    const param_type& __p)
+    5144              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    5145              : 
+    5146              :       /**
+    5147              :        * @brief Return true if two Weibull distributions have the same
+    5148              :        *        parameters.
+    5149              :        */
+    5150              :       friend bool
+    5151              :       operator==(const weibull_distribution& __d1,
+    5152              :                  const weibull_distribution& __d2)
+    5153              :       { return __d1._M_param == __d2._M_param; }
+    5154              : 
+    5155              :     private:
+    5156              :       template<typename _ForwardIterator,
+    5157              :                typename _UniformRandomNumberGenerator>
+    5158              :         void
+    5159              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    5160              :                         _UniformRandomNumberGenerator& __urng,
+    5161              :                         const param_type& __p);
+    5162              : 
+    5163              :       param_type _M_param;
+    5164              :     };
+    5165              : 
+    5166              : #if __cpp_impl_three_way_comparison < 201907L
+    5167              :    /**
+    5168              :     * @brief Return true if two Weibull distributions have different
+    5169              :     *        parameters.
+    5170              :     */
+    5171              :   template<typename _RealType>
+    5172              :     inline bool
+    5173              :     operator!=(const std::weibull_distribution<_RealType>& __d1,
+    5174              :                const std::weibull_distribution<_RealType>& __d2)
+    5175              :     { return !(__d1 == __d2); }
+    5176              : #endif
+    5177              : 
+    5178              :   /**
+    5179              :    * @brief Inserts a %weibull_distribution random number distribution
+    5180              :    * @p __x into the output stream @p __os.
+    5181              :    *
+    5182              :    * @param __os An output stream.
+    5183              :    * @param __x  A %weibull_distribution random number distribution.
+    5184              :    *
+    5185              :    * @returns The output stream with the state of @p __x inserted or in
+    5186              :    * an error state.
+    5187              :    */
+    5188              :   template<typename _RealType, typename _CharT, typename _Traits>
+    5189              :     std::basic_ostream<_CharT, _Traits>&
+    5190              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    5191              :                const std::weibull_distribution<_RealType>& __x);
+    5192              : 
+    5193              :   /**
+    5194              :    * @brief Extracts a %weibull_distribution random number distribution
+    5195              :    * @p __x from the input stream @p __is.
+    5196              :    *
+    5197              :    * @param __is An input stream.
+    5198              :    * @param __x A %weibull_distribution random number
+    5199              :    *            generator engine.
+    5200              :    *
+    5201              :    * @returns The input stream with @p __x extracted or in an error state.
+    5202              :    */
+    5203              :   template<typename _RealType, typename _CharT, typename _Traits>
+    5204              :     std::basic_istream<_CharT, _Traits>&
+    5205              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    5206              :                std::weibull_distribution<_RealType>& __x);
+    5207              : 
+    5208              : 
+    5209              :   /**
+    5210              :    * @brief A extreme_value_distribution random number distribution.
+    5211              :    *
+    5212              :    * The formula for the normal probability mass function is
+    5213              :    * @f[
+    5214              :    *     p(x|a,b) = \frac{1}{b}
+    5215              :    *                \exp( \frac{a-x}{b} - \exp(\frac{a-x}{b})) 
+    5216              :    * @f]
+    5217              :    *
+    5218              :    * @headerfile random
+    5219              :    * @since C++11
+    5220              :    */
+    5221              :   template<typename _RealType = double>
+    5222              :     class extreme_value_distribution
+    5223              :     {
+    5224              :       static_assert(std::is_floating_point<_RealType>::value,
+    5225              :                     "result_type must be a floating point type");
+    5226              : 
+    5227              :     public:
+    5228              :       /** The type of the range of the distribution. */
+    5229              :       typedef _RealType result_type;
+    5230              : 
+    5231              :       /** Parameter type. */
+    5232              :       struct param_type
+    5233              :       {
+    5234              :         typedef extreme_value_distribution<_RealType> distribution_type;
+    5235              : 
+    5236              :         param_type() : param_type(0.0) { }
+    5237              : 
+    5238              :         explicit
+    5239              :         param_type(_RealType __a, _RealType __b = _RealType(1.0))
+    5240              :         : _M_a(__a), _M_b(__b)
+    5241              :         { }
+    5242              : 
+    5243              :         _RealType
+    5244              :         a() const
+    5245              :         { return _M_a; }
+    5246              : 
+    5247              :         _RealType
+    5248              :         b() const
+    5249              :         { return _M_b; }
+    5250              : 
+    5251              :         friend bool
+    5252              :         operator==(const param_type& __p1, const param_type& __p2)
+    5253              :         { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; }
+    5254              : 
+    5255              : #if __cpp_impl_three_way_comparison < 201907L
+    5256              :         friend bool
+    5257              :         operator!=(const param_type& __p1, const param_type& __p2)
+    5258              :         { return !(__p1 == __p2); }
+    5259              : #endif
+    5260              : 
+    5261              :       private:
+    5262              :         _RealType _M_a;
+    5263              :         _RealType _M_b;
+    5264              :       };
+    5265              : 
+    5266              :       extreme_value_distribution() : extreme_value_distribution(0.0) { }
+    5267              : 
+    5268              :       explicit
+    5269              :       extreme_value_distribution(_RealType __a, _RealType __b = _RealType(1))
+    5270              :       : _M_param(__a, __b)
+    5271              :       { }
+    5272              : 
+    5273              :       explicit
+    5274              :       extreme_value_distribution(const param_type& __p)
+    5275              :       : _M_param(__p)
+    5276              :       { }
+    5277              : 
+    5278              :       /**
+    5279              :        * @brief Resets the distribution state.
+    5280              :        */
+    5281              :       void
+    5282              :       reset()
+    5283              :       { }
+    5284              : 
+    5285              :       /**
+    5286              :        * @brief Return the @f$a@f$ parameter of the distribution.
+    5287              :        */
+    5288              :       _RealType
+    5289              :       a() const
+    5290              :       { return _M_param.a(); }
+    5291              : 
+    5292              :       /**
+    5293              :        * @brief Return the @f$b@f$ parameter of the distribution.
+    5294              :        */
+    5295              :       _RealType
+    5296              :       b() const
+    5297              :       { return _M_param.b(); }
+    5298              : 
+    5299              :       /**
+    5300              :        * @brief Returns the parameter set of the distribution.
+    5301              :        */
+    5302              :       param_type
+    5303              :       param() const
+    5304              :       { return _M_param; }
+    5305              : 
+    5306              :       /**
+    5307              :        * @brief Sets the parameter set of the distribution.
+    5308              :        * @param __param The new parameter set of the distribution.
+    5309              :        */
+    5310              :       void
+    5311              :       param(const param_type& __param)
+    5312              :       { _M_param = __param; }
+    5313              : 
+    5314              :       /**
+    5315              :        * @brief Returns the greatest lower bound value of the distribution.
+    5316              :        */
+    5317              :       result_type
+    5318              :       min() const
+    5319              :       { return std::numeric_limits<result_type>::lowest(); }
+    5320              : 
+    5321              :       /**
+    5322              :        * @brief Returns the least upper bound value of the distribution.
+    5323              :        */
+    5324              :       result_type
+    5325              :       max() const
+    5326              :       { return std::numeric_limits<result_type>::max(); }
+    5327              : 
+    5328              :       /**
+    5329              :        * @brief Generating functions.
+    5330              :        */
+    5331              :       template<typename _UniformRandomNumberGenerator>
+    5332              :         result_type
+    5333              :         operator()(_UniformRandomNumberGenerator& __urng)
+    5334              :         { return this->operator()(__urng, _M_param); }
+    5335              : 
+    5336              :       template<typename _UniformRandomNumberGenerator>
+    5337              :         result_type
+    5338              :         operator()(_UniformRandomNumberGenerator& __urng,
+    5339              :                    const param_type& __p);
+    5340              : 
+    5341              :       template<typename _ForwardIterator,
+    5342              :                typename _UniformRandomNumberGenerator>
+    5343              :         void
+    5344              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    5345              :                    _UniformRandomNumberGenerator& __urng)
+    5346              :         { this->__generate(__f, __t, __urng, _M_param); }
+    5347              : 
+    5348              :       template<typename _ForwardIterator,
+    5349              :                typename _UniformRandomNumberGenerator>
+    5350              :         void
+    5351              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    5352              :                    _UniformRandomNumberGenerator& __urng,
+    5353              :                    const param_type& __p)
+    5354              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    5355              : 
+    5356              :       template<typename _UniformRandomNumberGenerator>
+    5357              :         void
+    5358              :         __generate(result_type* __f, result_type* __t,
+    5359              :                    _UniformRandomNumberGenerator& __urng,
+    5360              :                    const param_type& __p)
+    5361              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    5362              : 
+    5363              :       /**
+    5364              :        * @brief Return true if two extreme value distributions have the same
+    5365              :        *        parameters.
+    5366              :        */
+    5367              :       friend bool
+    5368              :       operator==(const extreme_value_distribution& __d1,
+    5369              :                  const extreme_value_distribution& __d2)
+    5370              :       { return __d1._M_param == __d2._M_param; }
+    5371              : 
+    5372              :     private:
+    5373              :       template<typename _ForwardIterator,
+    5374              :                typename _UniformRandomNumberGenerator>
+    5375              :         void
+    5376              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    5377              :                         _UniformRandomNumberGenerator& __urng,
+    5378              :                         const param_type& __p);
+    5379              : 
+    5380              :       param_type _M_param;
+    5381              :     };
+    5382              : 
+    5383              : #if __cpp_impl_three_way_comparison < 201907L
+    5384              :   /**
+    5385              :     * @brief Return true if two extreme value distributions have different
+    5386              :     *        parameters.
+    5387              :    */
+    5388              :   template<typename _RealType>
+    5389              :     inline bool
+    5390              :     operator!=(const std::extreme_value_distribution<_RealType>& __d1,
+    5391              :                const std::extreme_value_distribution<_RealType>& __d2)
+    5392              :     { return !(__d1 == __d2); }
+    5393              : #endif
+    5394              : 
+    5395              :   /**
+    5396              :    * @brief Inserts a %extreme_value_distribution random number distribution
+    5397              :    * @p __x into the output stream @p __os.
+    5398              :    *
+    5399              :    * @param __os An output stream.
+    5400              :    * @param __x  A %extreme_value_distribution random number distribution.
+    5401              :    *
+    5402              :    * @returns The output stream with the state of @p __x inserted or in
+    5403              :    * an error state.
+    5404              :    */
+    5405              :   template<typename _RealType, typename _CharT, typename _Traits>
+    5406              :     std::basic_ostream<_CharT, _Traits>&
+    5407              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    5408              :                const std::extreme_value_distribution<_RealType>& __x);
+    5409              : 
+    5410              :   /**
+    5411              :    * @brief Extracts a %extreme_value_distribution random number
+    5412              :    *        distribution @p __x from the input stream @p __is.
+    5413              :    *
+    5414              :    * @param __is An input stream.
+    5415              :    * @param __x A %extreme_value_distribution random number
+    5416              :    *            generator engine.
+    5417              :    *
+    5418              :    * @returns The input stream with @p __x extracted or in an error state.
+    5419              :    */
+    5420              :   template<typename _RealType, typename _CharT, typename _Traits>
+    5421              :     std::basic_istream<_CharT, _Traits>&
+    5422              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    5423              :                std::extreme_value_distribution<_RealType>& __x);
+    5424              : 
+    5425              :   /// @} group random_distributions_poisson
+    5426              : 
+    5427              :   /**
+    5428              :    * @addtogroup random_distributions_sampling Sampling Distributions
+    5429              :    * @ingroup random_distributions
+    5430              :    * @{
+    5431              :    */
+    5432              : 
+    5433              :   /**
+    5434              :    * @brief A discrete_distribution random number distribution.
+    5435              :    *
+    5436              :    * This distribution produces random numbers @f$ i, 0 \leq i < n @f$,
+    5437              :    * distributed according to the probability mass function
+    5438              :    * @f$ p(i | p_0, ..., p_{n-1}) = p_i @f$.
+    5439              :    *
+    5440              :    * @headerfile random
+    5441              :    * @since C++11
+    5442              :    */
+    5443              :   template<typename _IntType = int>
+    5444              :     class discrete_distribution
+    5445              :     {
+    5446              :       static_assert(std::is_integral<_IntType>::value,
+    5447              :                     "result_type must be an integral type");
+    5448              : 
+    5449              :     public:
+    5450              :       /** The type of the range of the distribution. */
+    5451              :       typedef _IntType result_type;
+    5452              : 
+    5453              :       /** Parameter type. */
+    5454              :       struct param_type
+    5455              :       {
+    5456              :         typedef discrete_distribution<_IntType> distribution_type;
+    5457              :         friend class discrete_distribution<_IntType>;
+    5458              : 
+    5459              :         param_type()
+    5460              :         : _M_prob(), _M_cp()
+    5461              :         { }
+    5462              : 
+    5463              :         template<typename _InputIterator>
+    5464              :           param_type(_InputIterator __wbegin,
+    5465              :                      _InputIterator __wend)
+    5466              :           : _M_prob(__wbegin, __wend), _M_cp()
+    5467              :           { _M_initialize(); }
+    5468              : 
+    5469              :         param_type(initializer_list<double> __wil)
+    5470              :         : _M_prob(__wil.begin(), __wil.end()), _M_cp()
+    5471              :         { _M_initialize(); }
+    5472              : 
+    5473              :         template<typename _Func>
+    5474              :           param_type(size_t __nw, double __xmin, double __xmax,
+    5475              :                      _Func __fw);
+    5476              : 
+    5477              :         // See: http://cpp-next.com/archive/2010/10/implicit-move-must-go/
+    5478              :         param_type(const param_type&) = default;
+    5479              :         param_type& operator=(const param_type&) = default;
+    5480              : 
+    5481              :         std::vector<double>
+    5482              :         probabilities() const
+    5483              :         { return _M_prob.empty() ? std::vector<double>(1, 1.0) : _M_prob; }
+    5484              : 
+    5485              :         friend bool
+    5486              :         operator==(const param_type& __p1, const param_type& __p2)
+    5487              :         { return __p1._M_prob == __p2._M_prob; }
+    5488              : 
+    5489              : #if __cpp_impl_three_way_comparison < 201907L
+    5490              :         friend bool
+    5491              :         operator!=(const param_type& __p1, const param_type& __p2)
+    5492              :         { return !(__p1 == __p2); }
+    5493              : #endif
+    5494              : 
+    5495              :       private:
+    5496              :         void
+    5497              :         _M_initialize();
+    5498              : 
+    5499              :         std::vector<double> _M_prob;
+    5500              :         std::vector<double> _M_cp;
+    5501              :       };
+    5502              : 
+    5503              :       discrete_distribution()
+    5504              :       : _M_param()
+    5505              :       { }
+    5506              : 
+    5507              :       template<typename _InputIterator>
+    5508              :         discrete_distribution(_InputIterator __wbegin,
+    5509              :                               _InputIterator __wend)
+    5510              :         : _M_param(__wbegin, __wend)
+    5511              :         { }
+    5512              : 
+    5513              :       discrete_distribution(initializer_list<double> __wl)
+    5514              :       : _M_param(__wl)
+    5515              :       { }
+    5516              : 
+    5517              :       template<typename _Func>
+    5518              :         discrete_distribution(size_t __nw, double __xmin, double __xmax,
+    5519              :                               _Func __fw)
+    5520              :         : _M_param(__nw, __xmin, __xmax, __fw)
+    5521              :         { }
+    5522              : 
+    5523              :       explicit
+    5524              :       discrete_distribution(const param_type& __p)
+    5525              :       : _M_param(__p)
+    5526              :       { }
+    5527              : 
+    5528              :       /**
+    5529              :        * @brief Resets the distribution state.
+    5530              :        */
+    5531              :       void
+    5532              :       reset()
+    5533              :       { }
+    5534              : 
+    5535              :       /**
+    5536              :        * @brief Returns the probabilities of the distribution.
+    5537              :        */
+    5538              :       std::vector<double>
+    5539              :       probabilities() const
+    5540              :       {
+    5541              :         return _M_param._M_prob.empty()
+    5542              :           ? std::vector<double>(1, 1.0) : _M_param._M_prob;
+    5543              :       }
+    5544              : 
+    5545              :       /**
+    5546              :        * @brief Returns the parameter set of the distribution.
+    5547              :        */
+    5548              :       param_type
+    5549              :       param() const
+    5550              :       { return _M_param; }
+    5551              : 
+    5552              :       /**
+    5553              :        * @brief Sets the parameter set of the distribution.
+    5554              :        * @param __param The new parameter set of the distribution.
+    5555              :        */
+    5556              :       void
+    5557              :       param(const param_type& __param)
+    5558              :       { _M_param = __param; }
+    5559              : 
+    5560              :       /**
+    5561              :        * @brief Returns the greatest lower bound value of the distribution.
+    5562              :        */
+    5563              :       result_type
+    5564              :       min() const
+    5565              :       { return result_type(0); }
+    5566              : 
+    5567              :       /**
+    5568              :        * @brief Returns the least upper bound value of the distribution.
+    5569              :        */
+    5570              :       result_type
+    5571              :       max() const
+    5572              :       {
+    5573              :         return _M_param._M_prob.empty()
+    5574              :           ? result_type(0) : result_type(_M_param._M_prob.size() - 1);
+    5575              :       }
+    5576              : 
+    5577              :       /**
+    5578              :        * @brief Generating functions.
+    5579              :        */
+    5580              :       template<typename _UniformRandomNumberGenerator>
+    5581              :         result_type
+    5582              :         operator()(_UniformRandomNumberGenerator& __urng)
+    5583              :         { return this->operator()(__urng, _M_param); }
+    5584              : 
+    5585              :       template<typename _UniformRandomNumberGenerator>
+    5586              :         result_type
+    5587              :         operator()(_UniformRandomNumberGenerator& __urng,
+    5588              :                    const param_type& __p);
+    5589              : 
+    5590              :       template<typename _ForwardIterator,
+    5591              :                typename _UniformRandomNumberGenerator>
+    5592              :         void
+    5593              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    5594              :                    _UniformRandomNumberGenerator& __urng)
+    5595              :         { this->__generate(__f, __t, __urng, _M_param); }
+    5596              : 
+    5597              :       template<typename _ForwardIterator,
+    5598              :                typename _UniformRandomNumberGenerator>
+    5599              :         void
+    5600              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    5601              :                    _UniformRandomNumberGenerator& __urng,
+    5602              :                    const param_type& __p)
+    5603              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    5604              : 
+    5605              :       template<typename _UniformRandomNumberGenerator>
+    5606              :         void
+    5607              :         __generate(result_type* __f, result_type* __t,
+    5608              :                    _UniformRandomNumberGenerator& __urng,
+    5609              :                    const param_type& __p)
+    5610              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    5611              : 
+    5612              :       /**
+    5613              :        * @brief Return true if two discrete distributions have the same
+    5614              :        *        parameters.
+    5615              :        */
+    5616              :       friend bool
+    5617              :       operator==(const discrete_distribution& __d1,
+    5618              :                  const discrete_distribution& __d2)
+    5619              :       { return __d1._M_param == __d2._M_param; }
+    5620              : 
+    5621              :       /**
+    5622              :        * @brief Inserts a %discrete_distribution random number distribution
+    5623              :        * @p __x into the output stream @p __os.
+    5624              :        *
+    5625              :        * @param __os An output stream.
+    5626              :        * @param __x  A %discrete_distribution random number distribution.
+    5627              :        *
+    5628              :        * @returns The output stream with the state of @p __x inserted or in
+    5629              :        * an error state.
+    5630              :        */
+    5631              :       template<typename _IntType1, typename _CharT, typename _Traits>
+    5632              :         friend std::basic_ostream<_CharT, _Traits>&
+    5633              :         operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    5634              :                    const std::discrete_distribution<_IntType1>& __x);
+    5635              : 
+    5636              :       /**
+    5637              :        * @brief Extracts a %discrete_distribution random number distribution
+    5638              :        * @p __x from the input stream @p __is.
+    5639              :        *
+    5640              :        * @param __is An input stream.
+    5641              :        * @param __x A %discrete_distribution random number
+    5642              :        *            generator engine.
+    5643              :        *
+    5644              :        * @returns The input stream with @p __x extracted or in an error
+    5645              :        *          state.
+    5646              :        */
+    5647              :       template<typename _IntType1, typename _CharT, typename _Traits>
+    5648              :         friend std::basic_istream<_CharT, _Traits>&
+    5649              :         operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    5650              :                    std::discrete_distribution<_IntType1>& __x);
+    5651              : 
+    5652              :     private:
+    5653              :       template<typename _ForwardIterator,
+    5654              :                typename _UniformRandomNumberGenerator>
+    5655              :         void
+    5656              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    5657              :                         _UniformRandomNumberGenerator& __urng,
+    5658              :                         const param_type& __p);
+    5659              : 
+    5660              :       param_type _M_param;
+    5661              :     };
+    5662              : 
+    5663              : #if __cpp_impl_three_way_comparison < 201907L
+    5664              :   /**
+    5665              :     * @brief Return true if two discrete distributions have different
+    5666              :     *        parameters.
+    5667              :     */
+    5668              :   template<typename _IntType>
+    5669              :     inline bool
+    5670              :     operator!=(const std::discrete_distribution<_IntType>& __d1,
+    5671              :                const std::discrete_distribution<_IntType>& __d2)
+    5672              :     { return !(__d1 == __d2); }
+    5673              : #endif
+    5674              : 
+    5675              :   /**
+    5676              :    * @brief A piecewise_constant_distribution random number distribution.
+    5677              :    *
+    5678              :    * This distribution produces random numbers @f$ x, b_0 \leq x < b_n @f$,
+    5679              :    * uniformly distributed over each subinterval @f$ [b_i, b_{i+1}) @f$
+    5680              :    * according to the probability mass function
+    5681              :    * @f[
+    5682              :    *   p(x | b_0, ..., b_n, \rho_0, ..., \rho_{n-1})
+    5683              :    *     = \rho_i \cdot \frac{b_{i+1} - x}{b_{i+1} - b_i}
+    5684              :    *       + \rho_{i+1} \cdot \frac{ x - b_i}{b_{i+1} - b_i}
+    5685              :    * @f]
+    5686              :    * for @f$ b_i \leq x < b_{i+1} @f$.
+    5687              :    *
+    5688              :    * @headerfile random
+    5689              :    * @since C++11
+    5690              :    */
+    5691              :   template<typename _RealType = double>
+    5692              :     class piecewise_constant_distribution
+    5693              :     {
+    5694              :       static_assert(std::is_floating_point<_RealType>::value,
+    5695              :                     "result_type must be a floating point type");
+    5696              : 
+    5697              :     public:
+    5698              :       /** The type of the range of the distribution. */
+    5699              :       typedef _RealType result_type;
+    5700              : 
+    5701              :       /** Parameter type. */
+    5702              :       struct param_type
+    5703              :       {
+    5704              :         typedef piecewise_constant_distribution<_RealType> distribution_type;
+    5705              :         friend class piecewise_constant_distribution<_RealType>;
+    5706              : 
+    5707              :         param_type()
+    5708              :         : _M_int(), _M_den(), _M_cp()
+    5709              :         { }
+    5710              : 
+    5711              :         template<typename _InputIteratorB, typename _InputIteratorW>
+    5712              :           param_type(_InputIteratorB __bfirst,
+    5713              :                      _InputIteratorB __bend,
+    5714              :                      _InputIteratorW __wbegin);
+    5715              : 
+    5716              :         template<typename _Func>
+    5717              :           param_type(initializer_list<_RealType> __bi, _Func __fw);
+    5718              : 
+    5719              :         template<typename _Func>
+    5720              :           param_type(size_t __nw, _RealType __xmin, _RealType __xmax,
+    5721              :                      _Func __fw);
+    5722              : 
+    5723              :         // See: http://cpp-next.com/archive/2010/10/implicit-move-must-go/
+    5724              :         param_type(const param_type&) = default;
+    5725              :         param_type& operator=(const param_type&) = default;
+    5726              : 
+    5727              :         std::vector<_RealType>
+    5728              :         intervals() const
+    5729              :         {
+    5730              :           if (_M_int.empty())
+    5731              :             {
+    5732              :               std::vector<_RealType> __tmp(2);
+    5733              :               __tmp[1] = _RealType(1);
+    5734              :               return __tmp;
+    5735              :             }
+    5736              :           else
+    5737              :             return _M_int;
+    5738              :         }
+    5739              : 
+    5740              :         std::vector<double>
+    5741              :         densities() const
+    5742              :         { return _M_den.empty() ? std::vector<double>(1, 1.0) : _M_den; }
+    5743              : 
+    5744              :         friend bool
+    5745              :         operator==(const param_type& __p1, const param_type& __p2)
+    5746              :         { return __p1._M_int == __p2._M_int && __p1._M_den == __p2._M_den; }
+    5747              : 
+    5748              : #if __cpp_impl_three_way_comparison < 201907L
+    5749              :         friend bool
+    5750              :         operator!=(const param_type& __p1, const param_type& __p2)
+    5751              :         { return !(__p1 == __p2); }
+    5752              : #endif
+    5753              : 
+    5754              :       private:
+    5755              :         void
+    5756              :         _M_initialize();
+    5757              : 
+    5758              :         std::vector<_RealType> _M_int;
+    5759              :         std::vector<double> _M_den;
+    5760              :         std::vector<double> _M_cp;
+    5761              :       };
+    5762              : 
+    5763              :       piecewise_constant_distribution()
+    5764              :       : _M_param()
+    5765              :       { }
+    5766              : 
+    5767              :       template<typename _InputIteratorB, typename _InputIteratorW>
+    5768              :         piecewise_constant_distribution(_InputIteratorB __bfirst,
+    5769              :                                         _InputIteratorB __bend,
+    5770              :                                         _InputIteratorW __wbegin)
+    5771              :         : _M_param(__bfirst, __bend, __wbegin)
+    5772              :         { }
+    5773              : 
+    5774              :       template<typename _Func>
+    5775              :         piecewise_constant_distribution(initializer_list<_RealType> __bl,
+    5776              :                                         _Func __fw)
+    5777              :         : _M_param(__bl, __fw)
+    5778              :         { }
+    5779              : 
+    5780              :       template<typename _Func>
+    5781              :         piecewise_constant_distribution(size_t __nw,
+    5782              :                                         _RealType __xmin, _RealType __xmax,
+    5783              :                                         _Func __fw)
+    5784              :         : _M_param(__nw, __xmin, __xmax, __fw)
+    5785              :         { }
+    5786              : 
+    5787              :       explicit
+    5788              :       piecewise_constant_distribution(const param_type& __p)
+    5789              :       : _M_param(__p)
+    5790              :       { }
+    5791              : 
+    5792              :       /**
+    5793              :        * @brief Resets the distribution state.
+    5794              :        */
+    5795              :       void
+    5796              :       reset()
+    5797              :       { }
+    5798              : 
+    5799              :       /**
+    5800              :        * @brief Returns a vector of the intervals.
+    5801              :        */
+    5802              :       std::vector<_RealType>
+    5803              :       intervals() const
+    5804              :       {
+    5805              :         if (_M_param._M_int.empty())
+    5806              :           {
+    5807              :             std::vector<_RealType> __tmp(2);
+    5808              :             __tmp[1] = _RealType(1);
+    5809              :             return __tmp;
+    5810              :           }
+    5811              :         else
+    5812              :           return _M_param._M_int;
+    5813              :       }
+    5814              : 
+    5815              :       /**
+    5816              :        * @brief Returns a vector of the probability densities.
+    5817              :        */
+    5818              :       std::vector<double>
+    5819              :       densities() const
+    5820              :       {
+    5821              :         return _M_param._M_den.empty()
+    5822              :           ? std::vector<double>(1, 1.0) : _M_param._M_den;
+    5823              :       }
+    5824              : 
+    5825              :       /**
+    5826              :        * @brief Returns the parameter set of the distribution.
+    5827              :        */
+    5828              :       param_type
+    5829              :       param() const
+    5830              :       { return _M_param; }
+    5831              : 
+    5832              :       /**
+    5833              :        * @brief Sets the parameter set of the distribution.
+    5834              :        * @param __param The new parameter set of the distribution.
+    5835              :        */
+    5836              :       void
+    5837              :       param(const param_type& __param)
+    5838              :       { _M_param = __param; }
+    5839              : 
+    5840              :       /**
+    5841              :        * @brief Returns the greatest lower bound value of the distribution.
+    5842              :        */
+    5843              :       result_type
+    5844              :       min() const
+    5845              :       {
+    5846              :         return _M_param._M_int.empty()
+    5847              :           ? result_type(0) : _M_param._M_int.front();
+    5848              :       }
+    5849              : 
+    5850              :       /**
+    5851              :        * @brief Returns the least upper bound value of the distribution.
+    5852              :        */
+    5853              :       result_type
+    5854              :       max() const
+    5855              :       {
+    5856              :         return _M_param._M_int.empty()
+    5857              :           ? result_type(1) : _M_param._M_int.back();
+    5858              :       }
+    5859              : 
+    5860              :       /**
+    5861              :        * @brief Generating functions.
+    5862              :        */
+    5863              :       template<typename _UniformRandomNumberGenerator>
+    5864              :         result_type
+    5865              :         operator()(_UniformRandomNumberGenerator& __urng)
+    5866              :         { return this->operator()(__urng, _M_param); }
+    5867              : 
+    5868              :       template<typename _UniformRandomNumberGenerator>
+    5869              :         result_type
+    5870              :         operator()(_UniformRandomNumberGenerator& __urng,
+    5871              :                    const param_type& __p);
+    5872              : 
+    5873              :       template<typename _ForwardIterator,
+    5874              :                typename _UniformRandomNumberGenerator>
+    5875              :         void
+    5876              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    5877              :                    _UniformRandomNumberGenerator& __urng)
+    5878              :         { this->__generate(__f, __t, __urng, _M_param); }
+    5879              : 
+    5880              :       template<typename _ForwardIterator,
+    5881              :                typename _UniformRandomNumberGenerator>
+    5882              :         void
+    5883              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    5884              :                    _UniformRandomNumberGenerator& __urng,
+    5885              :                    const param_type& __p)
+    5886              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    5887              : 
+    5888              :       template<typename _UniformRandomNumberGenerator>
+    5889              :         void
+    5890              :         __generate(result_type* __f, result_type* __t,
+    5891              :                    _UniformRandomNumberGenerator& __urng,
+    5892              :                    const param_type& __p)
+    5893              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    5894              : 
+    5895              :       /**
+    5896              :        * @brief Return true if two piecewise constant distributions have the
+    5897              :        *        same parameters.
+    5898              :        */
+    5899              :       friend bool
+    5900              :       operator==(const piecewise_constant_distribution& __d1,
+    5901              :                  const piecewise_constant_distribution& __d2)
+    5902              :       { return __d1._M_param == __d2._M_param; }
+    5903              : 
+    5904              :       /**
+    5905              :        * @brief Inserts a %piecewise_constant_distribution random
+    5906              :        *        number distribution @p __x into the output stream @p __os.
+    5907              :        *
+    5908              :        * @param __os An output stream.
+    5909              :        * @param __x  A %piecewise_constant_distribution random number
+    5910              :        *             distribution.
+    5911              :        *
+    5912              :        * @returns The output stream with the state of @p __x inserted or in
+    5913              :        * an error state.
+    5914              :        */
+    5915              :       template<typename _RealType1, typename _CharT, typename _Traits>
+    5916              :         friend std::basic_ostream<_CharT, _Traits>&
+    5917              :         operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    5918              :                    const std::piecewise_constant_distribution<_RealType1>& __x);
+    5919              : 
+    5920              :       /**
+    5921              :        * @brief Extracts a %piecewise_constant_distribution random
+    5922              :        *        number distribution @p __x from the input stream @p __is.
+    5923              :        *
+    5924              :        * @param __is An input stream.
+    5925              :        * @param __x A %piecewise_constant_distribution random number
+    5926              :        *            generator engine.
+    5927              :        *
+    5928              :        * @returns The input stream with @p __x extracted or in an error
+    5929              :        *          state.
+    5930              :        */
+    5931              :       template<typename _RealType1, typename _CharT, typename _Traits>
+    5932              :         friend std::basic_istream<_CharT, _Traits>&
+    5933              :         operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    5934              :                    std::piecewise_constant_distribution<_RealType1>& __x);
+    5935              : 
+    5936              :     private:
+    5937              :       template<typename _ForwardIterator,
+    5938              :                typename _UniformRandomNumberGenerator>
+    5939              :         void
+    5940              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    5941              :                         _UniformRandomNumberGenerator& __urng,
+    5942              :                         const param_type& __p);
+    5943              : 
+    5944              :       param_type _M_param;
+    5945              :     };
+    5946              : 
+    5947              : #if __cpp_impl_three_way_comparison < 201907L
+    5948              :   /**
+    5949              :     * @brief Return true if two piecewise constant distributions have 
+    5950              :     *        different parameters.
+    5951              :    */
+    5952              :   template<typename _RealType>
+    5953              :     inline bool
+    5954              :     operator!=(const std::piecewise_constant_distribution<_RealType>& __d1,
+    5955              :                const std::piecewise_constant_distribution<_RealType>& __d2)
+    5956              :     { return !(__d1 == __d2); }
+    5957              : #endif
+    5958              : 
+    5959              :   /**
+    5960              :    * @brief A piecewise_linear_distribution random number distribution.
+    5961              :    *
+    5962              :    * This distribution produces random numbers @f$ x, b_0 \leq x < b_n @f$,
+    5963              :    * distributed over each subinterval @f$ [b_i, b_{i+1}) @f$
+    5964              :    * according to the probability mass function
+    5965              :    * @f$ p(x | b_0, ..., b_n, \rho_0, ..., \rho_n) = \rho_i @f$,
+    5966              :    * for @f$ b_i \leq x < b_{i+1} @f$.
+    5967              :    *
+    5968              :    * @headerfile random
+    5969              :    * @since C++11
+    5970              :    */
+    5971              :   template<typename _RealType = double>
+    5972              :     class piecewise_linear_distribution
+    5973              :     {
+    5974              :       static_assert(std::is_floating_point<_RealType>::value,
+    5975              :                     "result_type must be a floating point type");
+    5976              : 
+    5977              :     public:
+    5978              :       /** The type of the range of the distribution. */
+    5979              :       typedef _RealType result_type;
+    5980              : 
+    5981              :       /** Parameter type. */
+    5982              :       struct param_type
+    5983              :       {
+    5984              :         typedef piecewise_linear_distribution<_RealType> distribution_type;
+    5985              :         friend class piecewise_linear_distribution<_RealType>;
+    5986              : 
+    5987              :         param_type()
+    5988              :         : _M_int(), _M_den(), _M_cp(), _M_m()
+    5989              :         { }
+    5990              : 
+    5991              :         template<typename _InputIteratorB, typename _InputIteratorW>
+    5992              :           param_type(_InputIteratorB __bfirst,
+    5993              :                      _InputIteratorB __bend,
+    5994              :                      _InputIteratorW __wbegin);
+    5995              : 
+    5996              :         template<typename _Func>
+    5997              :           param_type(initializer_list<_RealType> __bl, _Func __fw);
+    5998              : 
+    5999              :         template<typename _Func>
+    6000              :           param_type(size_t __nw, _RealType __xmin, _RealType __xmax,
+    6001              :                      _Func __fw);
+    6002              : 
+    6003              :         // See: http://cpp-next.com/archive/2010/10/implicit-move-must-go/
+    6004              :         param_type(const param_type&) = default;
+    6005              :         param_type& operator=(const param_type&) = default;
+    6006              : 
+    6007              :         std::vector<_RealType>
+    6008              :         intervals() const
+    6009              :         {
+    6010              :           if (_M_int.empty())
+    6011              :             {
+    6012              :               std::vector<_RealType> __tmp(2);
+    6013              :               __tmp[1] = _RealType(1);
+    6014              :               return __tmp;
+    6015              :             }
+    6016              :           else
+    6017              :             return _M_int;
+    6018              :         }
+    6019              : 
+    6020              :         std::vector<double>
+    6021              :         densities() const
+    6022              :         { return _M_den.empty() ? std::vector<double>(2, 1.0) : _M_den; }
+    6023              : 
+    6024              :         friend bool
+    6025              :         operator==(const param_type& __p1, const param_type& __p2)
+    6026              :         { return __p1._M_int == __p2._M_int && __p1._M_den == __p2._M_den; }
+    6027              : 
+    6028              : #if __cpp_impl_three_way_comparison < 201907L
+    6029              :         friend bool
+    6030              :         operator!=(const param_type& __p1, const param_type& __p2)
+    6031              :         { return !(__p1 == __p2); }
+    6032              : #endif
+    6033              : 
+    6034              :       private:
+    6035              :         void
+    6036              :         _M_initialize();
+    6037              : 
+    6038              :         std::vector<_RealType> _M_int;
+    6039              :         std::vector<double> _M_den;
+    6040              :         std::vector<double> _M_cp;
+    6041              :         std::vector<double> _M_m;
+    6042              :       };
+    6043              : 
+    6044              :       piecewise_linear_distribution()
+    6045              :       : _M_param()
+    6046              :       { }
+    6047              : 
+    6048              :       template<typename _InputIteratorB, typename _InputIteratorW>
+    6049              :         piecewise_linear_distribution(_InputIteratorB __bfirst,
+    6050              :                                       _InputIteratorB __bend,
+    6051              :                                       _InputIteratorW __wbegin)
+    6052              :         : _M_param(__bfirst, __bend, __wbegin)
+    6053              :         { }
+    6054              : 
+    6055              :       template<typename _Func>
+    6056              :         piecewise_linear_distribution(initializer_list<_RealType> __bl,
+    6057              :                                       _Func __fw)
+    6058              :         : _M_param(__bl, __fw)
+    6059              :         { }
+    6060              : 
+    6061              :       template<typename _Func>
+    6062              :         piecewise_linear_distribution(size_t __nw,
+    6063              :                                       _RealType __xmin, _RealType __xmax,
+    6064              :                                       _Func __fw)
+    6065              :         : _M_param(__nw, __xmin, __xmax, __fw)
+    6066              :         { }
+    6067              : 
+    6068              :       explicit
+    6069              :       piecewise_linear_distribution(const param_type& __p)
+    6070              :       : _M_param(__p)
+    6071              :       { }
+    6072              : 
+    6073              :       /**
+    6074              :        * Resets the distribution state.
+    6075              :        */
+    6076              :       void
+    6077              :       reset()
+    6078              :       { }
+    6079              : 
+    6080              :       /**
+    6081              :        * @brief Return the intervals of the distribution.
+    6082              :        */
+    6083              :       std::vector<_RealType>
+    6084              :       intervals() const
+    6085              :       {
+    6086              :         if (_M_param._M_int.empty())
+    6087              :           {
+    6088              :             std::vector<_RealType> __tmp(2);
+    6089              :             __tmp[1] = _RealType(1);
+    6090              :             return __tmp;
+    6091              :           }
+    6092              :         else
+    6093              :           return _M_param._M_int;
+    6094              :       }
+    6095              : 
+    6096              :       /**
+    6097              :        * @brief Return a vector of the probability densities of the
+    6098              :        *        distribution.
+    6099              :        */
+    6100              :       std::vector<double>
+    6101              :       densities() const
+    6102              :       {
+    6103              :         return _M_param._M_den.empty()
+    6104              :           ? std::vector<double>(2, 1.0) : _M_param._M_den;
+    6105              :       }
+    6106              : 
+    6107              :       /**
+    6108              :        * @brief Returns the parameter set of the distribution.
+    6109              :        */
+    6110              :       param_type
+    6111              :       param() const
+    6112              :       { return _M_param; }
+    6113              : 
+    6114              :       /**
+    6115              :        * @brief Sets the parameter set of the distribution.
+    6116              :        * @param __param The new parameter set of the distribution.
+    6117              :        */
+    6118              :       void
+    6119              :       param(const param_type& __param)
+    6120              :       { _M_param = __param; }
+    6121              : 
+    6122              :       /**
+    6123              :        * @brief Returns the greatest lower bound value of the distribution.
+    6124              :        */
+    6125              :       result_type
+    6126              :       min() const
+    6127              :       {
+    6128              :         return _M_param._M_int.empty()
+    6129              :           ? result_type(0) : _M_param._M_int.front();
+    6130              :       }
+    6131              : 
+    6132              :       /**
+    6133              :        * @brief Returns the least upper bound value of the distribution.
+    6134              :        */
+    6135              :       result_type
+    6136              :       max() const
+    6137              :       {
+    6138              :         return _M_param._M_int.empty()
+    6139              :           ? result_type(1) : _M_param._M_int.back();
+    6140              :       }
+    6141              : 
+    6142              :       /**
+    6143              :        * @brief Generating functions.
+    6144              :        */
+    6145              :       template<typename _UniformRandomNumberGenerator>
+    6146              :         result_type
+    6147              :         operator()(_UniformRandomNumberGenerator& __urng)
+    6148              :         { return this->operator()(__urng, _M_param); }
+    6149              : 
+    6150              :       template<typename _UniformRandomNumberGenerator>
+    6151              :         result_type
+    6152              :         operator()(_UniformRandomNumberGenerator& __urng,
+    6153              :                    const param_type& __p);
+    6154              : 
+    6155              :       template<typename _ForwardIterator,
+    6156              :                typename _UniformRandomNumberGenerator>
+    6157              :         void
+    6158              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    6159              :                    _UniformRandomNumberGenerator& __urng)
+    6160              :         { this->__generate(__f, __t, __urng, _M_param); }
+    6161              : 
+    6162              :       template<typename _ForwardIterator,
+    6163              :                typename _UniformRandomNumberGenerator>
+    6164              :         void
+    6165              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+    6166              :                    _UniformRandomNumberGenerator& __urng,
+    6167              :                    const param_type& __p)
+    6168              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    6169              : 
+    6170              :       template<typename _UniformRandomNumberGenerator>
+    6171              :         void
+    6172              :         __generate(result_type* __f, result_type* __t,
+    6173              :                    _UniformRandomNumberGenerator& __urng,
+    6174              :                    const param_type& __p)
+    6175              :         { this->__generate_impl(__f, __t, __urng, __p); }
+    6176              : 
+    6177              :       /**
+    6178              :        * @brief Return true if two piecewise linear distributions have the
+    6179              :        *        same parameters.
+    6180              :        */
+    6181              :       friend bool
+    6182              :       operator==(const piecewise_linear_distribution& __d1,
+    6183              :                  const piecewise_linear_distribution& __d2)
+    6184              :       { return __d1._M_param == __d2._M_param; }
+    6185              : 
+    6186              :       /**
+    6187              :        * @brief Inserts a %piecewise_linear_distribution random number
+    6188              :        *        distribution @p __x into the output stream @p __os.
+    6189              :        *
+    6190              :        * @param __os An output stream.
+    6191              :        * @param __x  A %piecewise_linear_distribution random number
+    6192              :        *             distribution.
+    6193              :        *
+    6194              :        * @returns The output stream with the state of @p __x inserted or in
+    6195              :        *          an error state.
+    6196              :        */
+    6197              :       template<typename _RealType1, typename _CharT, typename _Traits>
+    6198              :         friend std::basic_ostream<_CharT, _Traits>&
+    6199              :         operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    6200              :                    const std::piecewise_linear_distribution<_RealType1>& __x);
+    6201              : 
+    6202              :       /**
+    6203              :        * @brief Extracts a %piecewise_linear_distribution random number
+    6204              :        *        distribution @p __x from the input stream @p __is.
+    6205              :        *
+    6206              :        * @param __is An input stream.
+    6207              :        * @param __x  A %piecewise_linear_distribution random number
+    6208              :        *             generator engine.
+    6209              :        *
+    6210              :        * @returns The input stream with @p __x extracted or in an error
+    6211              :        *          state.
+    6212              :        */
+    6213              :       template<typename _RealType1, typename _CharT, typename _Traits>
+    6214              :         friend std::basic_istream<_CharT, _Traits>&
+    6215              :         operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    6216              :                    std::piecewise_linear_distribution<_RealType1>& __x);
+    6217              : 
+    6218              :     private:
+    6219              :       template<typename _ForwardIterator,
+    6220              :                typename _UniformRandomNumberGenerator>
+    6221              :         void
+    6222              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    6223              :                         _UniformRandomNumberGenerator& __urng,
+    6224              :                         const param_type& __p);
+    6225              : 
+    6226              :       param_type _M_param;
+    6227              :     };
+    6228              : 
+    6229              : #if __cpp_impl_three_way_comparison < 201907L
+    6230              :   /**
+    6231              :     * @brief Return true if two piecewise linear distributions have
+    6232              :     *        different parameters.
+    6233              :    */
+    6234              :   template<typename _RealType>
+    6235              :     inline bool
+    6236              :     operator!=(const std::piecewise_linear_distribution<_RealType>& __d1,
+    6237              :                const std::piecewise_linear_distribution<_RealType>& __d2)
+    6238              :     { return !(__d1 == __d2); }
+    6239              : #endif
+    6240              : 
+    6241              :   /// @} group random_distributions_sampling
+    6242              : 
+    6243              :   /// @} *group random_distributions
+    6244              : 
+    6245              :   /**
+    6246              :    * @addtogroup random_utilities Random Number Utilities
+    6247              :    * @ingroup random
+    6248              :    * @{
+    6249              :    */
+    6250              : 
+    6251              :   /**
+    6252              :    * @brief The seed_seq class generates sequences of seeds for random
+    6253              :    *        number generators.
+    6254              :    *
+    6255              :    * @headerfile random
+    6256              :    * @since C++11
+    6257              :    */
+    6258              :   class seed_seq
+    6259              :   {
+    6260              :   public:
+    6261              :     /** The type of the seed vales. */
+    6262              :     typedef uint_least32_t result_type;
+    6263              : 
+    6264              :     /** Default constructor. */
+    6265              :     seed_seq() noexcept
+    6266              :     : _M_v()
+    6267              :     { }
+    6268              : 
+    6269              :     template<typename _IntType, typename = _Require<is_integral<_IntType>>>
+    6270              :       seed_seq(std::initializer_list<_IntType> __il);
+    6271              : 
+    6272              :     template<typename _InputIterator>
+    6273              :       seed_seq(_InputIterator __begin, _InputIterator __end);
+    6274              : 
+    6275              :     // generating functions
+    6276              :     template<typename _RandomAccessIterator>
+    6277              :       void
+    6278              :       generate(_RandomAccessIterator __begin, _RandomAccessIterator __end);
+    6279              : 
+    6280              :     // property functions
+    6281              :     size_t size() const noexcept
+    6282              :     { return _M_v.size(); }
+    6283              : 
+    6284              :     template<typename _OutputIterator>
+    6285              :       void
+    6286              :       param(_OutputIterator __dest) const
+    6287              :       { std::copy(_M_v.begin(), _M_v.end(), __dest); }
+    6288              : 
+    6289              :     // no copy functions
+    6290              :     seed_seq(const seed_seq&) = delete;
+    6291              :     seed_seq& operator=(const seed_seq&) = delete;
+    6292              : 
+    6293              :   private:
+    6294              :     std::vector<result_type> _M_v;
+    6295              :   };
+    6296              : 
+    6297              :   /// @} group random_utilities
+    6298              : 
+    6299              :   /// @} group random
+    6300              : 
+    6301              : _GLIBCXX_END_NAMESPACE_VERSION
+    6302              : } // namespace std
+    6303              : 
+    6304              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/random.tcc.func-c.html b/html/usr/include/c++/13/bits/random.tcc.func-c.html new file mode 100644 index 0000000..9c0b9eb --- /dev/null +++ b/html/usr/include/c++/13/bits/random.tcc.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/random.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - random.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %4040
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EE11_M_gen_randEv260
_ZNSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EE4seedEm542
_ZNSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEclEv40674
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/random.tcc.func.html b/html/usr/include/c++/13/bits/random.tcc.func.html new file mode 100644 index 0000000..805f6be --- /dev/null +++ b/html/usr/include/c++/13/bits/random.tcc.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/random.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - random.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %4040
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EE11_M_gen_randEv260
_ZNSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EE4seedEm542
_ZNSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEclEv40674
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/random.tcc.gcov.html b/html/usr/include/c++/13/bits/random.tcc.gcov.html new file mode 100644 index 0000000..4d72401 --- /dev/null +++ b/html/usr/include/c++/13/bits/random.tcc.gcov.html @@ -0,0 +1,3462 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/random.tcc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - random.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %4040
Test Date:2024-04-30 13:17:26Functions:100.0 %33
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // random number generation (out of line) -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2009-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/random.tcc
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{random}
+      28              :  */
+      29              : 
+      30              : #ifndef _RANDOM_TCC
+      31              : #define _RANDOM_TCC 1
+      32              : 
+      33              : #include <numeric> // std::accumulate and std::partial_sum
+      34              : 
+      35              : namespace std _GLIBCXX_VISIBILITY(default)
+      36              : {
+      37              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      38              : 
+      39              :   /// @cond undocumented
+      40              :   // (Further) implementation-space details.
+      41              :   namespace __detail
+      42              :   {
+      43              :     // General case for x = (ax + c) mod m -- use Schrage's algorithm
+      44              :     // to avoid integer overflow.
+      45              :     //
+      46              :     // Preconditions:  a > 0, m > 0.
+      47              :     //
+      48              :     // Note: only works correctly for __m % __a < __m / __a.
+      49              :     template<typename _Tp, _Tp __m, _Tp __a, _Tp __c>
+      50              :       _Tp
+      51              :       _Mod<_Tp, __m, __a, __c, false, true>::
+      52              :       __calc(_Tp __x)
+      53              :       {
+      54              :         if (__a == 1)
+      55              :           __x %= __m;
+      56              :         else
+      57              :           {
+      58              :             static const _Tp __q = __m / __a;
+      59              :             static const _Tp __r = __m % __a;
+      60              : 
+      61              :             _Tp __t1 = __a * (__x % __q);
+      62              :             _Tp __t2 = __r * (__x / __q);
+      63              :             if (__t1 >= __t2)
+      64              :               __x = __t1 - __t2;
+      65              :             else
+      66              :               __x = __m - __t2 + __t1;
+      67              :           }
+      68              : 
+      69              :         if (__c != 0)
+      70              :           {
+      71              :             const _Tp __d = __m - __x;
+      72              :             if (__d > __c)
+      73              :               __x += __c;
+      74              :             else
+      75              :               __x = __c - __d;
+      76              :           }
+      77              :         return __x;
+      78              :       }
+      79              : 
+      80              :     template<typename _InputIterator, typename _OutputIterator,
+      81              :              typename _Tp>
+      82              :       _OutputIterator
+      83              :       __normalize(_InputIterator __first, _InputIterator __last,
+      84              :                   _OutputIterator __result, const _Tp& __factor)
+      85              :       {
+      86              :         for (; __first != __last; ++__first, ++__result)
+      87              :           *__result = *__first / __factor;
+      88              :         return __result;
+      89              :       }
+      90              : 
+      91              :   } // namespace __detail
+      92              :   /// @endcond
+      93              : 
+      94              : #if ! __cpp_inline_variables
+      95              :   template<typename _UIntType, _UIntType __a, _UIntType __c, _UIntType __m>
+      96              :     constexpr _UIntType
+      97              :     linear_congruential_engine<_UIntType, __a, __c, __m>::multiplier;
+      98              : 
+      99              :   template<typename _UIntType, _UIntType __a, _UIntType __c, _UIntType __m>
+     100              :     constexpr _UIntType
+     101              :     linear_congruential_engine<_UIntType, __a, __c, __m>::increment;
+     102              : 
+     103              :   template<typename _UIntType, _UIntType __a, _UIntType __c, _UIntType __m>
+     104              :     constexpr _UIntType
+     105              :     linear_congruential_engine<_UIntType, __a, __c, __m>::modulus;
+     106              : 
+     107              :   template<typename _UIntType, _UIntType __a, _UIntType __c, _UIntType __m>
+     108              :     constexpr _UIntType
+     109              :     linear_congruential_engine<_UIntType, __a, __c, __m>::default_seed;
+     110              : #endif
+     111              : 
+     112              :   /**
+     113              :    * Seeds the LCR with integral value @p __s, adjusted so that the
+     114              :    * ring identity is never a member of the convergence set.
+     115              :    */
+     116              :   template<typename _UIntType, _UIntType __a, _UIntType __c, _UIntType __m>
+     117              :     void
+     118              :     linear_congruential_engine<_UIntType, __a, __c, __m>::
+     119              :     seed(result_type __s)
+     120              :     {
+     121              :       if ((__detail::__mod<_UIntType, __m>(__c) == 0)
+     122              :           && (__detail::__mod<_UIntType, __m>(__s) == 0))
+     123              :         _M_x = 1;
+     124              :       else
+     125              :         _M_x = __detail::__mod<_UIntType, __m>(__s);
+     126              :     }
+     127              : 
+     128              :   /**
+     129              :    * Seeds the LCR engine with a value generated by @p __q.
+     130              :    */
+     131              :   template<typename _UIntType, _UIntType __a, _UIntType __c, _UIntType __m>
+     132              :     template<typename _Sseq>
+     133              :       auto
+     134              :       linear_congruential_engine<_UIntType, __a, __c, __m>::
+     135              :       seed(_Sseq& __q)
+     136              :       -> _If_seed_seq<_Sseq>
+     137              :       {
+     138              :         const _UIntType __k0 = __m == 0 ? std::numeric_limits<_UIntType>::digits
+     139              :                                         : std::__lg(__m);
+     140              :         const _UIntType __k = (__k0 + 31) / 32;
+     141              :         uint_least32_t __arr[__k + 3];
+     142              :         __q.generate(__arr + 0, __arr + __k + 3);
+     143              :         _UIntType __factor = 1u;
+     144              :         _UIntType __sum = 0u;
+     145              :         for (size_t __j = 0; __j < __k; ++__j)
+     146              :           {
+     147              :             __sum += __arr[__j + 3] * __factor;
+     148              :             __factor *= __detail::_Shift<_UIntType, 32>::__value;
+     149              :           }
+     150              :         seed(__sum);
+     151              :       }
+     152              : 
+     153              :   template<typename _UIntType, _UIntType __a, _UIntType __c, _UIntType __m,
+     154              :            typename _CharT, typename _Traits>
+     155              :     std::basic_ostream<_CharT, _Traits>&
+     156              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+     157              :                const linear_congruential_engine<_UIntType,
+     158              :                                                 __a, __c, __m>& __lcr)
+     159              :     {
+     160              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+     161              : 
+     162              :       const typename __ios_base::fmtflags __flags = __os.flags();
+     163              :       const _CharT __fill = __os.fill();
+     164              :       __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left);
+     165              :       __os.fill(__os.widen(' '));
+     166              : 
+     167              :       __os << __lcr._M_x;
+     168              : 
+     169              :       __os.flags(__flags);
+     170              :       __os.fill(__fill);
+     171              :       return __os;
+     172              :     }
+     173              : 
+     174              :   template<typename _UIntType, _UIntType __a, _UIntType __c, _UIntType __m,
+     175              :            typename _CharT, typename _Traits>
+     176              :     std::basic_istream<_CharT, _Traits>&
+     177              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+     178              :                linear_congruential_engine<_UIntType, __a, __c, __m>& __lcr)
+     179              :     {
+     180              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+     181              : 
+     182              :       const typename __ios_base::fmtflags __flags = __is.flags();
+     183              :       __is.flags(__ios_base::dec);
+     184              : 
+     185              :       __is >> __lcr._M_x;
+     186              : 
+     187              :       __is.flags(__flags);
+     188              :       return __is;
+     189              :     }
+     190              : 
+     191              : #if ! __cpp_inline_variables
+     192              :   template<typename _UIntType,
+     193              :            size_t __w, size_t __n, size_t __m, size_t __r,
+     194              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     195              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     196              :            _UIntType __f>
+     197              :     constexpr size_t
+     198              :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     199              :                             __s, __b, __t, __c, __l, __f>::word_size;
+     200              : 
+     201              :   template<typename _UIntType,
+     202              :            size_t __w, size_t __n, size_t __m, size_t __r,
+     203              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     204              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     205              :            _UIntType __f>
+     206              :     constexpr size_t
+     207              :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     208              :                             __s, __b, __t, __c, __l, __f>::state_size;
+     209              : 
+     210              :   template<typename _UIntType,
+     211              :            size_t __w, size_t __n, size_t __m, size_t __r,
+     212              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     213              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     214              :            _UIntType __f>
+     215              :     constexpr size_t
+     216              :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     217              :                             __s, __b, __t, __c, __l, __f>::shift_size;
+     218              : 
+     219              :   template<typename _UIntType,
+     220              :            size_t __w, size_t __n, size_t __m, size_t __r,
+     221              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     222              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     223              :            _UIntType __f>
+     224              :     constexpr size_t
+     225              :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     226              :                             __s, __b, __t, __c, __l, __f>::mask_bits;
+     227              : 
+     228              :   template<typename _UIntType,
+     229              :            size_t __w, size_t __n, size_t __m, size_t __r,
+     230              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     231              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     232              :            _UIntType __f>
+     233              :     constexpr _UIntType
+     234              :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     235              :                             __s, __b, __t, __c, __l, __f>::xor_mask;
+     236              : 
+     237              :   template<typename _UIntType,
+     238              :            size_t __w, size_t __n, size_t __m, size_t __r,
+     239              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     240              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     241              :            _UIntType __f>
+     242              :     constexpr size_t
+     243              :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     244              :                             __s, __b, __t, __c, __l, __f>::tempering_u;
+     245              :    
+     246              :   template<typename _UIntType,
+     247              :            size_t __w, size_t __n, size_t __m, size_t __r,
+     248              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     249              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     250              :            _UIntType __f>
+     251              :     constexpr _UIntType
+     252              :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     253              :                             __s, __b, __t, __c, __l, __f>::tempering_d;
+     254              : 
+     255              :   template<typename _UIntType,
+     256              :            size_t __w, size_t __n, size_t __m, size_t __r,
+     257              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     258              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     259              :            _UIntType __f>
+     260              :     constexpr size_t
+     261              :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     262              :                             __s, __b, __t, __c, __l, __f>::tempering_s;
+     263              : 
+     264              :   template<typename _UIntType,
+     265              :            size_t __w, size_t __n, size_t __m, size_t __r,
+     266              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     267              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     268              :            _UIntType __f>
+     269              :     constexpr _UIntType
+     270              :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     271              :                             __s, __b, __t, __c, __l, __f>::tempering_b;
+     272              : 
+     273              :   template<typename _UIntType,
+     274              :            size_t __w, size_t __n, size_t __m, size_t __r,
+     275              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     276              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     277              :            _UIntType __f>
+     278              :     constexpr size_t
+     279              :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     280              :                             __s, __b, __t, __c, __l, __f>::tempering_t;
+     281              : 
+     282              :   template<typename _UIntType,
+     283              :            size_t __w, size_t __n, size_t __m, size_t __r,
+     284              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     285              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     286              :            _UIntType __f>
+     287              :     constexpr _UIntType
+     288              :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     289              :                             __s, __b, __t, __c, __l, __f>::tempering_c;
+     290              : 
+     291              :   template<typename _UIntType,
+     292              :            size_t __w, size_t __n, size_t __m, size_t __r,
+     293              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     294              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     295              :            _UIntType __f>
+     296              :     constexpr size_t
+     297              :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     298              :                             __s, __b, __t, __c, __l, __f>::tempering_l;
+     299              : 
+     300              :   template<typename _UIntType,
+     301              :            size_t __w, size_t __n, size_t __m, size_t __r,
+     302              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     303              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     304              :            _UIntType __f>
+     305              :     constexpr _UIntType
+     306              :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     307              :                             __s, __b, __t, __c, __l, __f>::
+     308              :                                               initialization_multiplier;
+     309              : 
+     310              :   template<typename _UIntType,
+     311              :            size_t __w, size_t __n, size_t __m, size_t __r,
+     312              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     313              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     314              :            _UIntType __f>
+     315              :     constexpr _UIntType
+     316              :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     317              :                             __s, __b, __t, __c, __l, __f>::default_seed;
+     318              : #endif
+     319              : 
+     320              :   template<typename _UIntType,
+     321              :            size_t __w, size_t __n, size_t __m, size_t __r,
+     322              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     323              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     324              :            _UIntType __f>
+     325              :     void
+     326          542 :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     327              :                             __s, __b, __t, __c, __l, __f>::
+     328              :     seed(result_type __sd)
+     329              :     {
+     330          542 :       _M_x[0] = __detail::__mod<_UIntType,
+     331          542 :         __detail::_Shift<_UIntType, __w>::__value>(__sd);
+     332              : 
+     333       338208 :       for (size_t __i = 1; __i < state_size; ++__i)
+     334              :         {
+     335       337666 :           _UIntType __x = _M_x[__i - 1];
+     336       337666 :           __x ^= __x >> (__w - 2);
+     337       337666 :           __x *= __f;
+     338       337666 :           __x += __detail::__mod<_UIntType, __n>(__i);
+     339       337666 :           _M_x[__i] = __detail::__mod<_UIntType,
+     340       337666 :             __detail::_Shift<_UIntType, __w>::__value>(__x);
+     341              :         }
+     342          542 :       _M_p = state_size;
+     343          542 :     }
+     344              : 
+     345              :   template<typename _UIntType,
+     346              :            size_t __w, size_t __n, size_t __m, size_t __r,
+     347              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     348              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     349              :            _UIntType __f>
+     350              :     template<typename _Sseq>
+     351              :       auto
+     352              :       mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     353              :                               __s, __b, __t, __c, __l, __f>::
+     354              :       seed(_Sseq& __q)
+     355              :       -> _If_seed_seq<_Sseq>
+     356              :       {
+     357              :         const _UIntType __upper_mask = (~_UIntType()) << __r;
+     358              :         const size_t __k = (__w + 31) / 32;
+     359              :         uint_least32_t __arr[__n * __k];
+     360              :         __q.generate(__arr + 0, __arr + __n * __k);
+     361              : 
+     362              :         bool __zero = true;
+     363              :         for (size_t __i = 0; __i < state_size; ++__i)
+     364              :           {
+     365              :             _UIntType __factor = 1u;
+     366              :             _UIntType __sum = 0u;
+     367              :             for (size_t __j = 0; __j < __k; ++__j)
+     368              :               {
+     369              :                 __sum += __arr[__k * __i + __j] * __factor;
+     370              :                 __factor *= __detail::_Shift<_UIntType, 32>::__value;
+     371              :               }
+     372              :             _M_x[__i] = __detail::__mod<_UIntType,
+     373              :               __detail::_Shift<_UIntType, __w>::__value>(__sum);
+     374              : 
+     375              :             if (__zero)
+     376              :               {
+     377              :                 if (__i == 0)
+     378              :                   {
+     379              :                     if ((_M_x[0] & __upper_mask) != 0u)
+     380              :                       __zero = false;
+     381              :                   }
+     382              :                 else if (_M_x[__i] != 0u)
+     383              :                   __zero = false;
+     384              :               }
+     385              :           }
+     386              :         if (__zero)
+     387              :           _M_x[0] = __detail::_Shift<_UIntType, __w - 1>::__value;
+     388              :         _M_p = state_size;
+     389              :       }
+     390              : 
+     391              :   template<typename _UIntType, size_t __w,
+     392              :            size_t __n, size_t __m, size_t __r,
+     393              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     394              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     395              :            _UIntType __f>
+     396              :     void
+     397          260 :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     398              :                             __s, __b, __t, __c, __l, __f>::
+     399              :     _M_gen_rand(void)
+     400              :     {
+     401          260 :       const _UIntType __upper_mask = (~_UIntType()) << __r;
+     402          260 :       const _UIntType __lower_mask = ~__upper_mask;
+     403              : 
+     404        59280 :       for (size_t __k = 0; __k < (__n - __m); ++__k)
+     405              :         {
+     406        59020 :           _UIntType __y = ((_M_x[__k] & __upper_mask)
+     407        59020 :                            | (_M_x[__k + 1] & __lower_mask));
+     408       118040 :           _M_x[__k] = (_M_x[__k + __m] ^ (__y >> 1)
+     409        59020 :                        ^ ((__y & 0x01) ? __a : 0));
+     410              :         }
+     411              : 
+     412       103220 :       for (size_t __k = (__n - __m); __k < (__n - 1); ++__k)
+     413              :         {
+     414       102960 :           _UIntType __y = ((_M_x[__k] & __upper_mask)
+     415       102960 :                            | (_M_x[__k + 1] & __lower_mask));
+     416       205920 :           _M_x[__k] = (_M_x[__k + (__m - __n)] ^ (__y >> 1)
+     417       102960 :                        ^ ((__y & 0x01) ? __a : 0));
+     418              :         }
+     419              : 
+     420          260 :       _UIntType __y = ((_M_x[__n - 1] & __upper_mask)
+     421          260 :                        | (_M_x[0] & __lower_mask));
+     422          520 :       _M_x[__n - 1] = (_M_x[__m - 1] ^ (__y >> 1)
+     423          260 :                        ^ ((__y & 0x01) ? __a : 0));
+     424          260 :       _M_p = 0;
+     425          260 :     }
+     426              : 
+     427              :   template<typename _UIntType, size_t __w,
+     428              :            size_t __n, size_t __m, size_t __r,
+     429              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     430              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     431              :            _UIntType __f>
+     432              :     void
+     433              :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     434              :                             __s, __b, __t, __c, __l, __f>::
+     435              :     discard(unsigned long long __z)
+     436              :     {
+     437              :       while (__z > state_size - _M_p)
+     438              :         {
+     439              :           __z -= state_size - _M_p;
+     440              :           _M_gen_rand();
+     441              :         }
+     442              :       _M_p += __z;
+     443              :     }
+     444              : 
+     445              :   template<typename _UIntType, size_t __w,
+     446              :            size_t __n, size_t __m, size_t __r,
+     447              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     448              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     449              :            _UIntType __f>
+     450              :     typename
+     451              :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     452              :                             __s, __b, __t, __c, __l, __f>::result_type
+     453        40674 :     mersenne_twister_engine<_UIntType, __w, __n, __m, __r, __a, __u, __d,
+     454              :                             __s, __b, __t, __c, __l, __f>::
+     455              :     operator()()
+     456              :     {
+     457              :       // Reload the vector - cost is O(n) amortized over n calls.
+     458        40674 :       if (_M_p >= state_size)
+     459          260 :         _M_gen_rand();
+     460              : 
+     461              :       // Calculate o(x(i)).
+     462        40674 :       result_type __z = _M_x[_M_p++];
+     463        40674 :       __z ^= (__z >> __u) & __d;
+     464        40674 :       __z ^= (__z << __s) & __b;
+     465        40674 :       __z ^= (__z << __t) & __c;
+     466        40674 :       __z ^= (__z >> __l);
+     467              : 
+     468        40674 :       return __z;
+     469              :     }
+     470              : 
+     471              :   template<typename _UIntType, size_t __w,
+     472              :            size_t __n, size_t __m, size_t __r,
+     473              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     474              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     475              :            _UIntType __f, typename _CharT, typename _Traits>
+     476              :     std::basic_ostream<_CharT, _Traits>&
+     477              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+     478              :                const mersenne_twister_engine<_UIntType, __w, __n, __m,
+     479              :                __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>& __x)
+     480              :     {
+     481              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+     482              : 
+     483              :       const typename __ios_base::fmtflags __flags = __os.flags();
+     484              :       const _CharT __fill = __os.fill();
+     485              :       const _CharT __space = __os.widen(' ');
+     486              :       __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left);
+     487              :       __os.fill(__space);
+     488              : 
+     489              :       for (size_t __i = 0; __i < __n; ++__i)
+     490              :         __os << __x._M_x[__i] << __space;
+     491              :       __os << __x._M_p;
+     492              : 
+     493              :       __os.flags(__flags);
+     494              :       __os.fill(__fill);
+     495              :       return __os;
+     496              :     }
+     497              : 
+     498              :   template<typename _UIntType, size_t __w,
+     499              :            size_t __n, size_t __m, size_t __r,
+     500              :            _UIntType __a, size_t __u, _UIntType __d, size_t __s,
+     501              :            _UIntType __b, size_t __t, _UIntType __c, size_t __l,
+     502              :            _UIntType __f, typename _CharT, typename _Traits>
+     503              :     std::basic_istream<_CharT, _Traits>&
+     504              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+     505              :                mersenne_twister_engine<_UIntType, __w, __n, __m,
+     506              :                __r, __a, __u, __d, __s, __b, __t, __c, __l, __f>& __x)
+     507              :     {
+     508              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+     509              : 
+     510              :       const typename __ios_base::fmtflags __flags = __is.flags();
+     511              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+     512              : 
+     513              :       for (size_t __i = 0; __i < __n; ++__i)
+     514              :         __is >> __x._M_x[__i];
+     515              :       __is >> __x._M_p;
+     516              : 
+     517              :       __is.flags(__flags);
+     518              :       return __is;
+     519              :     }
+     520              : 
+     521              : #if ! __cpp_inline_variables
+     522              :   template<typename _UIntType, size_t __w, size_t __s, size_t __r>
+     523              :     constexpr size_t
+     524              :     subtract_with_carry_engine<_UIntType, __w, __s, __r>::word_size;
+     525              : 
+     526              :   template<typename _UIntType, size_t __w, size_t __s, size_t __r>
+     527              :     constexpr size_t
+     528              :     subtract_with_carry_engine<_UIntType, __w, __s, __r>::short_lag;
+     529              : 
+     530              :   template<typename _UIntType, size_t __w, size_t __s, size_t __r>
+     531              :     constexpr size_t
+     532              :     subtract_with_carry_engine<_UIntType, __w, __s, __r>::long_lag;
+     533              : 
+     534              :   template<typename _UIntType, size_t __w, size_t __s, size_t __r>
+     535              :     constexpr uint_least32_t
+     536              :     subtract_with_carry_engine<_UIntType, __w, __s, __r>::default_seed;
+     537              : #endif
+     538              : 
+     539              :   template<typename _UIntType, size_t __w, size_t __s, size_t __r>
+     540              :     void
+     541              :     subtract_with_carry_engine<_UIntType, __w, __s, __r>::
+     542              :     seed(result_type __value)
+     543              :     {
+     544              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     545              :       // 3809. Is std::subtract_with_carry_engine<uint16_t> supposed to work?
+     546              :       // 4014. LWG 3809 changes behavior of some existing code
+     547              :       std::linear_congruential_engine<uint_least32_t, 40014u, 0u, 2147483563u>
+     548              :         __lcg(__value == 0u ? default_seed : __value % 2147483563u);
+     549              : 
+     550              :       const size_t __n = (__w + 31) / 32;
+     551              : 
+     552              :       for (size_t __i = 0; __i < long_lag; ++__i)
+     553              :         {
+     554              :           _UIntType __sum = 0u;
+     555              :           _UIntType __factor = 1u;
+     556              :           for (size_t __j = 0; __j < __n; ++__j)
+     557              :             {
+     558              :               __sum += __detail::__mod<uint_least32_t,
+     559              :                        __detail::_Shift<uint_least32_t, 32>::__value>
+     560              :                          (__lcg()) * __factor;
+     561              :               __factor *= __detail::_Shift<_UIntType, 32>::__value;
+     562              :             }
+     563              :           _M_x[__i] = __detail::__mod<_UIntType,
+     564              :             __detail::_Shift<_UIntType, __w>::__value>(__sum);
+     565              :         }
+     566              :       _M_carry = (_M_x[long_lag - 1] == 0) ? 1 : 0;
+     567              :       _M_p = 0;
+     568              :     }
+     569              : 
+     570              :   template<typename _UIntType, size_t __w, size_t __s, size_t __r>
+     571              :     template<typename _Sseq>
+     572              :       auto
+     573              :       subtract_with_carry_engine<_UIntType, __w, __s, __r>::
+     574              :       seed(_Sseq& __q)
+     575              :       -> _If_seed_seq<_Sseq>
+     576              :       {
+     577              :         const size_t __k = (__w + 31) / 32;
+     578              :         uint_least32_t __arr[__r * __k];
+     579              :         __q.generate(__arr + 0, __arr + __r * __k);
+     580              : 
+     581              :         for (size_t __i = 0; __i < long_lag; ++__i)
+     582              :           {
+     583              :             _UIntType __sum = 0u;
+     584              :             _UIntType __factor = 1u;
+     585              :             for (size_t __j = 0; __j < __k; ++__j)
+     586              :               {
+     587              :                 __sum += __arr[__k * __i + __j] * __factor;
+     588              :                 __factor *= __detail::_Shift<_UIntType, 32>::__value;
+     589              :               }
+     590              :             _M_x[__i] = __detail::__mod<_UIntType,
+     591              :               __detail::_Shift<_UIntType, __w>::__value>(__sum);
+     592              :           }
+     593              :         _M_carry = (_M_x[long_lag - 1] == 0) ? 1 : 0;
+     594              :         _M_p = 0;
+     595              :       }
+     596              : 
+     597              :   template<typename _UIntType, size_t __w, size_t __s, size_t __r>
+     598              :     typename subtract_with_carry_engine<_UIntType, __w, __s, __r>::
+     599              :              result_type
+     600              :     subtract_with_carry_engine<_UIntType, __w, __s, __r>::
+     601              :     operator()()
+     602              :     {
+     603              :       // Derive short lag index from current index.
+     604              :       long __ps = _M_p - short_lag;
+     605              :       if (__ps < 0)
+     606              :         __ps += long_lag;
+     607              : 
+     608              :       // Calculate new x(i) without overflow or division.
+     609              :       // NB: Thanks to the requirements for _UIntType, _M_x[_M_p] + _M_carry
+     610              :       // cannot overflow.
+     611              :       _UIntType __xi;
+     612              :       if (_M_x[__ps] >= _M_x[_M_p] + _M_carry)
+     613              :         {
+     614              :           __xi = _M_x[__ps] - _M_x[_M_p] - _M_carry;
+     615              :           _M_carry = 0;
+     616              :         }
+     617              :       else
+     618              :         {
+     619              :           __xi = (__detail::_Shift<_UIntType, __w>::__value
+     620              :                   - _M_x[_M_p] - _M_carry + _M_x[__ps]);
+     621              :           _M_carry = 1;
+     622              :         }
+     623              :       _M_x[_M_p] = __xi;
+     624              : 
+     625              :       // Adjust current index to loop around in ring buffer.
+     626              :       if (++_M_p >= long_lag)
+     627              :         _M_p = 0;
+     628              : 
+     629              :       return __xi;
+     630              :     }
+     631              : 
+     632              :   template<typename _UIntType, size_t __w, size_t __s, size_t __r,
+     633              :            typename _CharT, typename _Traits>
+     634              :     std::basic_ostream<_CharT, _Traits>&
+     635              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+     636              :                const subtract_with_carry_engine<_UIntType,
+     637              :                                                 __w, __s, __r>& __x)
+     638              :     {
+     639              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+     640              : 
+     641              :       const typename __ios_base::fmtflags __flags = __os.flags();
+     642              :       const _CharT __fill = __os.fill();
+     643              :       const _CharT __space = __os.widen(' ');
+     644              :       __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left);
+     645              :       __os.fill(__space);
+     646              : 
+     647              :       for (size_t __i = 0; __i < __r; ++__i)
+     648              :         __os << __x._M_x[__i] << __space;
+     649              :       __os << __x._M_carry << __space << __x._M_p;
+     650              : 
+     651              :       __os.flags(__flags);
+     652              :       __os.fill(__fill);
+     653              :       return __os;
+     654              :     }
+     655              : 
+     656              :   template<typename _UIntType, size_t __w, size_t __s, size_t __r,
+     657              :            typename _CharT, typename _Traits>
+     658              :     std::basic_istream<_CharT, _Traits>&
+     659              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+     660              :                subtract_with_carry_engine<_UIntType, __w, __s, __r>& __x)
+     661              :     {
+     662              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+     663              : 
+     664              :       const typename __ios_base::fmtflags __flags = __is.flags();
+     665              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+     666              : 
+     667              :       for (size_t __i = 0; __i < __r; ++__i)
+     668              :         __is >> __x._M_x[__i];
+     669              :       __is >> __x._M_carry;
+     670              :       __is >> __x._M_p;
+     671              : 
+     672              :       __is.flags(__flags);
+     673              :       return __is;
+     674              :     }
+     675              : 
+     676              : #if ! __cpp_inline_variables
+     677              :   template<typename _RandomNumberEngine, size_t __p, size_t __r>
+     678              :     constexpr size_t
+     679              :     discard_block_engine<_RandomNumberEngine, __p, __r>::block_size;
+     680              : 
+     681              :   template<typename _RandomNumberEngine, size_t __p, size_t __r>
+     682              :     constexpr size_t
+     683              :     discard_block_engine<_RandomNumberEngine, __p, __r>::used_block;
+     684              : #endif
+     685              : 
+     686              :   template<typename _RandomNumberEngine, size_t __p, size_t __r>
+     687              :     typename discard_block_engine<_RandomNumberEngine,
+     688              :                            __p, __r>::result_type
+     689              :     discard_block_engine<_RandomNumberEngine, __p, __r>::
+     690              :     operator()()
+     691              :     {
+     692              :       if (_M_n >= used_block)
+     693              :         {
+     694              :           _M_b.discard(block_size - _M_n);
+     695              :           _M_n = 0;
+     696              :         }
+     697              :       ++_M_n;
+     698              :       return _M_b();
+     699              :     }
+     700              : 
+     701              :   template<typename _RandomNumberEngine, size_t __p, size_t __r,
+     702              :            typename _CharT, typename _Traits>
+     703              :     std::basic_ostream<_CharT, _Traits>&
+     704              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+     705              :                const discard_block_engine<_RandomNumberEngine,
+     706              :                __p, __r>& __x)
+     707              :     {
+     708              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+     709              : 
+     710              :       const typename __ios_base::fmtflags __flags = __os.flags();
+     711              :       const _CharT __fill = __os.fill();
+     712              :       const _CharT __space = __os.widen(' ');
+     713              :       __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left);
+     714              :       __os.fill(__space);
+     715              : 
+     716              :       __os << __x.base() << __space << __x._M_n;
+     717              : 
+     718              :       __os.flags(__flags);
+     719              :       __os.fill(__fill);
+     720              :       return __os;
+     721              :     }
+     722              : 
+     723              :   template<typename _RandomNumberEngine, size_t __p, size_t __r,
+     724              :            typename _CharT, typename _Traits>
+     725              :     std::basic_istream<_CharT, _Traits>&
+     726              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+     727              :                discard_block_engine<_RandomNumberEngine, __p, __r>& __x)
+     728              :     {
+     729              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+     730              : 
+     731              :       const typename __ios_base::fmtflags __flags = __is.flags();
+     732              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+     733              : 
+     734              :       __is >> __x._M_b >> __x._M_n;
+     735              : 
+     736              :       __is.flags(__flags);
+     737              :       return __is;
+     738              :     }
+     739              : 
+     740              : 
+     741              :   template<typename _RandomNumberEngine, size_t __w, typename _UIntType>
+     742              :     typename independent_bits_engine<_RandomNumberEngine, __w, _UIntType>::
+     743              :       result_type
+     744              :     independent_bits_engine<_RandomNumberEngine, __w, _UIntType>::
+     745              :     operator()()
+     746              :     {
+     747              :       typedef typename _RandomNumberEngine::result_type _Eresult_type;
+     748              :       const _Eresult_type __r
+     749              :         = (_M_b.max() - _M_b.min() < std::numeric_limits<_Eresult_type>::max()
+     750              :            ? _M_b.max() - _M_b.min() + 1 : 0);
+     751              :       const unsigned __edig = std::numeric_limits<_Eresult_type>::digits;
+     752              :       const unsigned __m = __r ? std::__lg(__r) : __edig;
+     753              : 
+     754              :       typedef typename std::common_type<_Eresult_type, result_type>::type
+     755              :         __ctype;
+     756              :       const unsigned __cdig = std::numeric_limits<__ctype>::digits;
+     757              : 
+     758              :       unsigned __n, __n0;
+     759              :       __ctype __s0, __s1, __y0, __y1;
+     760              : 
+     761              :       for (size_t __i = 0; __i < 2; ++__i)
+     762              :         {
+     763              :           __n = (__w + __m - 1) / __m + __i;
+     764              :           __n0 = __n - __w % __n;
+     765              :           const unsigned __w0 = __w / __n;  // __w0 <= __m
+     766              : 
+     767              :           __s0 = 0;
+     768              :           __s1 = 0;
+     769              :           if (__w0 < __cdig)
+     770              :             {
+     771              :               __s0 = __ctype(1) << __w0;
+     772              :               __s1 = __s0 << 1;
+     773              :             }
+     774              : 
+     775              :           __y0 = 0;
+     776              :           __y1 = 0;
+     777              :           if (__r)
+     778              :             {
+     779              :               __y0 = __s0 * (__r / __s0);
+     780              :               if (__s1)
+     781              :                 __y1 = __s1 * (__r / __s1);
+     782              : 
+     783              :               if (__r - __y0 <= __y0 / __n)
+     784              :                 break;
+     785              :             }
+     786              :           else
+     787              :             break;
+     788              :         }
+     789              : 
+     790              :       result_type __sum = 0;
+     791              :       for (size_t __k = 0; __k < __n0; ++__k)
+     792              :         {
+     793              :           __ctype __u;
+     794              :           do
+     795              :             __u = _M_b() - _M_b.min();
+     796              :           while (__y0 && __u >= __y0);
+     797              :           __sum = __s0 * __sum + (__s0 ? __u % __s0 : __u);
+     798              :         }
+     799              :       for (size_t __k = __n0; __k < __n; ++__k)
+     800              :         {
+     801              :           __ctype __u;
+     802              :           do
+     803              :             __u = _M_b() - _M_b.min();
+     804              :           while (__y1 && __u >= __y1);
+     805              :           __sum = __s1 * __sum + (__s1 ? __u % __s1 : __u);
+     806              :         }
+     807              :       return __sum;
+     808              :     }
+     809              : 
+     810              : #if ! __cpp_inline_variables
+     811              :   template<typename _RandomNumberEngine, size_t __k>
+     812              :     constexpr size_t
+     813              :     shuffle_order_engine<_RandomNumberEngine, __k>::table_size;
+     814              : #endif
+     815              : 
+     816              :   namespace __detail
+     817              :   {
+     818              :     // Determine whether an integer is representable as double.
+     819              :     template<typename _Tp>
+     820              :       constexpr bool
+     821              :       __representable_as_double(_Tp __x) noexcept
+     822              :       {
+     823              :         static_assert(numeric_limits<_Tp>::is_integer, "");
+     824              :         static_assert(!numeric_limits<_Tp>::is_signed, "");
+     825              :         // All integers <= 2^53 are representable.
+     826              :         return (__x <= (1ull << __DBL_MANT_DIG__))
+     827              :           // Between 2^53 and 2^54 only even numbers are representable.
+     828              :           || (!(__x & 1) && __detail::__representable_as_double(__x >> 1));
+     829              :       }
+     830              : 
+     831              :     // Determine whether x+1 is representable as double.
+     832              :     template<typename _Tp>
+     833              :       constexpr bool
+     834              :       __p1_representable_as_double(_Tp __x) noexcept
+     835              :       {
+     836              :         static_assert(numeric_limits<_Tp>::is_integer, "");
+     837              :         static_assert(!numeric_limits<_Tp>::is_signed, "");
+     838              :         return numeric_limits<_Tp>::digits < __DBL_MANT_DIG__
+     839              :           || (bool(__x + 1u) // return false if x+1 wraps around to zero
+     840              :               && __detail::__representable_as_double(__x + 1u));
+     841              :       }
+     842              :   }
+     843              : 
+     844              :   template<typename _RandomNumberEngine, size_t __k>
+     845              :     typename shuffle_order_engine<_RandomNumberEngine, __k>::result_type
+     846              :     shuffle_order_engine<_RandomNumberEngine, __k>::
+     847              :     operator()()
+     848              :     {
+     849              :       constexpr result_type __range = max() - min();
+     850              :       size_t __j = __k;
+     851              :       const result_type __y = _M_y - min();
+     852              :       // Avoid using slower long double arithmetic if possible.
+     853              :       if _GLIBCXX17_CONSTEXPR (__detail::__p1_representable_as_double(__range))
+     854              :         __j *= __y / (__range + 1.0);
+     855              :       else
+     856              :         __j *= __y / (__range + 1.0L);
+     857              :       _M_y = _M_v[__j];
+     858              :       _M_v[__j] = _M_b();
+     859              : 
+     860              :       return _M_y;
+     861              :     }
+     862              : 
+     863              :   template<typename _RandomNumberEngine, size_t __k,
+     864              :            typename _CharT, typename _Traits>
+     865              :     std::basic_ostream<_CharT, _Traits>&
+     866              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+     867              :                const shuffle_order_engine<_RandomNumberEngine, __k>& __x)
+     868              :     {
+     869              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+     870              : 
+     871              :       const typename __ios_base::fmtflags __flags = __os.flags();
+     872              :       const _CharT __fill = __os.fill();
+     873              :       const _CharT __space = __os.widen(' ');
+     874              :       __os.flags(__ios_base::dec | __ios_base::fixed | __ios_base::left);
+     875              :       __os.fill(__space);
+     876              : 
+     877              :       __os << __x.base();
+     878              :       for (size_t __i = 0; __i < __k; ++__i)
+     879              :         __os << __space << __x._M_v[__i];
+     880              :       __os << __space << __x._M_y;
+     881              : 
+     882              :       __os.flags(__flags);
+     883              :       __os.fill(__fill);
+     884              :       return __os;
+     885              :     }
+     886              : 
+     887              :   template<typename _RandomNumberEngine, size_t __k,
+     888              :            typename _CharT, typename _Traits>
+     889              :     std::basic_istream<_CharT, _Traits>&
+     890              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+     891              :                shuffle_order_engine<_RandomNumberEngine, __k>& __x)
+     892              :     {
+     893              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+     894              : 
+     895              :       const typename __ios_base::fmtflags __flags = __is.flags();
+     896              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+     897              : 
+     898              :       __is >> __x._M_b;
+     899              :       for (size_t __i = 0; __i < __k; ++__i)
+     900              :         __is >> __x._M_v[__i];
+     901              :       __is >> __x._M_y;
+     902              : 
+     903              :       __is.flags(__flags);
+     904              :       return __is;
+     905              :     }
+     906              : 
+     907              : 
+     908              :   template<typename _IntType, typename _CharT, typename _Traits>
+     909              :     std::basic_ostream<_CharT, _Traits>&
+     910              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+     911              :                const uniform_int_distribution<_IntType>& __x)
+     912              :     {
+     913              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+     914              : 
+     915              :       const typename __ios_base::fmtflags __flags = __os.flags();
+     916              :       const _CharT __fill = __os.fill();
+     917              :       const _CharT __space = __os.widen(' ');
+     918              :       __os.flags(__ios_base::scientific | __ios_base::left);
+     919              :       __os.fill(__space);
+     920              : 
+     921              :       __os << __x.a() << __space << __x.b();
+     922              : 
+     923              :       __os.flags(__flags);
+     924              :       __os.fill(__fill);
+     925              :       return __os;
+     926              :     }
+     927              : 
+     928              :   template<typename _IntType, typename _CharT, typename _Traits>
+     929              :     std::basic_istream<_CharT, _Traits>&
+     930              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+     931              :                uniform_int_distribution<_IntType>& __x)
+     932              :     {
+     933              :       using param_type
+     934              :         = typename uniform_int_distribution<_IntType>::param_type;
+     935              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+     936              : 
+     937              :       const typename __ios_base::fmtflags __flags = __is.flags();
+     938              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+     939              : 
+     940              :       _IntType __a, __b;
+     941              :       if (__is >> __a >> __b)
+     942              :         __x.param(param_type(__a, __b));
+     943              : 
+     944              :       __is.flags(__flags);
+     945              :       return __is;
+     946              :     }
+     947              : 
+     948              : 
+     949              :   template<typename _RealType>
+     950              :     template<typename _ForwardIterator,
+     951              :              typename _UniformRandomNumberGenerator>
+     952              :       void
+     953              :       uniform_real_distribution<_RealType>::
+     954              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+     955              :                       _UniformRandomNumberGenerator& __urng,
+     956              :                       const param_type& __p)
+     957              :       {
+     958              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+     959              :         __detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
+     960              :           __aurng(__urng);
+     961              :         auto __range = __p.b() - __p.a();
+     962              :         while (__f != __t)
+     963              :           *__f++ = __aurng() * __range + __p.a();
+     964              :       }
+     965              : 
+     966              :   template<typename _RealType, typename _CharT, typename _Traits>
+     967              :     std::basic_ostream<_CharT, _Traits>&
+     968              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+     969              :                const uniform_real_distribution<_RealType>& __x)
+     970              :     {
+     971              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+     972              : 
+     973              :       const typename __ios_base::fmtflags __flags = __os.flags();
+     974              :       const _CharT __fill = __os.fill();
+     975              :       const std::streamsize __precision = __os.precision();
+     976              :       const _CharT __space = __os.widen(' ');
+     977              :       __os.flags(__ios_base::scientific | __ios_base::left);
+     978              :       __os.fill(__space);
+     979              :       __os.precision(std::numeric_limits<_RealType>::max_digits10);
+     980              : 
+     981              :       __os << __x.a() << __space << __x.b();
+     982              : 
+     983              :       __os.flags(__flags);
+     984              :       __os.fill(__fill);
+     985              :       __os.precision(__precision);
+     986              :       return __os;
+     987              :     }
+     988              : 
+     989              :   template<typename _RealType, typename _CharT, typename _Traits>
+     990              :     std::basic_istream<_CharT, _Traits>&
+     991              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+     992              :                uniform_real_distribution<_RealType>& __x)
+     993              :     {
+     994              :       using param_type
+     995              :         = typename uniform_real_distribution<_RealType>::param_type;
+     996              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+     997              : 
+     998              :       const typename __ios_base::fmtflags __flags = __is.flags();
+     999              :       __is.flags(__ios_base::skipws);
+    1000              : 
+    1001              :       _RealType __a, __b;
+    1002              :       if (__is >> __a >> __b)
+    1003              :         __x.param(param_type(__a, __b));
+    1004              : 
+    1005              :       __is.flags(__flags);
+    1006              :       return __is;
+    1007              :     }
+    1008              : 
+    1009              : 
+    1010              :   template<typename _ForwardIterator,
+    1011              :            typename _UniformRandomNumberGenerator>
+    1012              :     void
+    1013              :     std::bernoulli_distribution::
+    1014              :     __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    1015              :                     _UniformRandomNumberGenerator& __urng,
+    1016              :                     const param_type& __p)
+    1017              :     {
+    1018              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    1019              :       __detail::_Adaptor<_UniformRandomNumberGenerator, double>
+    1020              :         __aurng(__urng);
+    1021              :       auto __limit = __p.p() * (__aurng.max() - __aurng.min());
+    1022              : 
+    1023              :       while (__f != __t)
+    1024              :         *__f++ = (__aurng() - __aurng.min()) < __limit;
+    1025              :     }
+    1026              : 
+    1027              :   template<typename _CharT, typename _Traits>
+    1028              :     std::basic_ostream<_CharT, _Traits>&
+    1029              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    1030              :                const bernoulli_distribution& __x)
+    1031              :     {
+    1032              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+    1033              : 
+    1034              :       const typename __ios_base::fmtflags __flags = __os.flags();
+    1035              :       const _CharT __fill = __os.fill();
+    1036              :       const std::streamsize __precision = __os.precision();
+    1037              :       __os.flags(__ios_base::scientific | __ios_base::left);
+    1038              :       __os.fill(__os.widen(' '));
+    1039              :       __os.precision(std::numeric_limits<double>::max_digits10);
+    1040              : 
+    1041              :       __os << __x.p();
+    1042              : 
+    1043              :       __os.flags(__flags);
+    1044              :       __os.fill(__fill);
+    1045              :       __os.precision(__precision);
+    1046              :       return __os;
+    1047              :     }
+    1048              : 
+    1049              : 
+    1050              :   template<typename _IntType>
+    1051              :     template<typename _UniformRandomNumberGenerator>
+    1052              :       typename geometric_distribution<_IntType>::result_type
+    1053              :       geometric_distribution<_IntType>::
+    1054              :       operator()(_UniformRandomNumberGenerator& __urng,
+    1055              :                  const param_type& __param)
+    1056              :       {
+    1057              :         // About the epsilon thing see this thread:
+    1058              :         // http://gcc.gnu.org/ml/gcc-patches/2006-10/msg00971.html
+    1059              :         const double __naf =
+    1060              :           (1 - std::numeric_limits<double>::epsilon()) / 2;
+    1061              :         // The largest _RealType convertible to _IntType.
+    1062              :         const double __thr =
+    1063              :           std::numeric_limits<_IntType>::max() + __naf;
+    1064              :         __detail::_Adaptor<_UniformRandomNumberGenerator, double>
+    1065              :           __aurng(__urng);
+    1066              : 
+    1067              :         double __cand;
+    1068              :         do
+    1069              :           __cand = std::floor(std::log(1.0 - __aurng()) / __param._M_log_1_p);
+    1070              :         while (__cand >= __thr);
+    1071              : 
+    1072              :         return result_type(__cand + __naf);
+    1073              :       }
+    1074              : 
+    1075              :   template<typename _IntType>
+    1076              :     template<typename _ForwardIterator,
+    1077              :              typename _UniformRandomNumberGenerator>
+    1078              :       void
+    1079              :       geometric_distribution<_IntType>::
+    1080              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    1081              :                       _UniformRandomNumberGenerator& __urng,
+    1082              :                       const param_type& __param)
+    1083              :       {
+    1084              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    1085              :         // About the epsilon thing see this thread:
+    1086              :         // http://gcc.gnu.org/ml/gcc-patches/2006-10/msg00971.html
+    1087              :         const double __naf =
+    1088              :           (1 - std::numeric_limits<double>::epsilon()) / 2;
+    1089              :         // The largest _RealType convertible to _IntType.
+    1090              :         const double __thr =
+    1091              :           std::numeric_limits<_IntType>::max() + __naf;
+    1092              :         __detail::_Adaptor<_UniformRandomNumberGenerator, double>
+    1093              :           __aurng(__urng);
+    1094              : 
+    1095              :         while (__f != __t)
+    1096              :           {
+    1097              :             double __cand;
+    1098              :             do
+    1099              :               __cand = std::floor(std::log(1.0 - __aurng())
+    1100              :                                   / __param._M_log_1_p);
+    1101              :             while (__cand >= __thr);
+    1102              : 
+    1103              :             *__f++ = __cand + __naf;
+    1104              :           }
+    1105              :       }
+    1106              : 
+    1107              :   template<typename _IntType,
+    1108              :            typename _CharT, typename _Traits>
+    1109              :     std::basic_ostream<_CharT, _Traits>&
+    1110              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    1111              :                const geometric_distribution<_IntType>& __x)
+    1112              :     {
+    1113              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+    1114              : 
+    1115              :       const typename __ios_base::fmtflags __flags = __os.flags();
+    1116              :       const _CharT __fill = __os.fill();
+    1117              :       const std::streamsize __precision = __os.precision();
+    1118              :       __os.flags(__ios_base::scientific | __ios_base::left);
+    1119              :       __os.fill(__os.widen(' '));
+    1120              :       __os.precision(std::numeric_limits<double>::max_digits10);
+    1121              : 
+    1122              :       __os << __x.p();
+    1123              : 
+    1124              :       __os.flags(__flags);
+    1125              :       __os.fill(__fill);
+    1126              :       __os.precision(__precision);
+    1127              :       return __os;
+    1128              :     }
+    1129              : 
+    1130              :   template<typename _IntType,
+    1131              :            typename _CharT, typename _Traits>
+    1132              :     std::basic_istream<_CharT, _Traits>&
+    1133              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    1134              :                geometric_distribution<_IntType>& __x)
+    1135              :     {
+    1136              :       using param_type = typename geometric_distribution<_IntType>::param_type;
+    1137              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+    1138              : 
+    1139              :       const typename __ios_base::fmtflags __flags = __is.flags();
+    1140              :       __is.flags(__ios_base::skipws);
+    1141              : 
+    1142              :       double __p;
+    1143              :       if (__is >> __p)
+    1144              :         __x.param(param_type(__p));
+    1145              : 
+    1146              :       __is.flags(__flags);
+    1147              :       return __is;
+    1148              :     }
+    1149              : 
+    1150              :   // This is Leger's algorithm, also in Devroye, Ch. X, Example 1.5.
+    1151              :   template<typename _IntType>
+    1152              :     template<typename _UniformRandomNumberGenerator>
+    1153              :       typename negative_binomial_distribution<_IntType>::result_type
+    1154              :       negative_binomial_distribution<_IntType>::
+    1155              :       operator()(_UniformRandomNumberGenerator& __urng)
+    1156              :       {
+    1157              :         const double __y = _M_gd(__urng);
+    1158              : 
+    1159              :         // XXX Is the constructor too slow?
+    1160              :         std::poisson_distribution<result_type> __poisson(__y);
+    1161              :         return __poisson(__urng);
+    1162              :       }
+    1163              : 
+    1164              :   template<typename _IntType>
+    1165              :     template<typename _UniformRandomNumberGenerator>
+    1166              :       typename negative_binomial_distribution<_IntType>::result_type
+    1167              :       negative_binomial_distribution<_IntType>::
+    1168              :       operator()(_UniformRandomNumberGenerator& __urng,
+    1169              :                  const param_type& __p)
+    1170              :       {
+    1171              :         typedef typename std::gamma_distribution<double>::param_type
+    1172              :           param_type;
+    1173              :         
+    1174              :         const double __y =
+    1175              :           _M_gd(__urng, param_type(__p.k(), (1.0 - __p.p()) / __p.p()));
+    1176              : 
+    1177              :         std::poisson_distribution<result_type> __poisson(__y);
+    1178              :         return __poisson(__urng);
+    1179              :       }
+    1180              : 
+    1181              :   template<typename _IntType>
+    1182              :     template<typename _ForwardIterator,
+    1183              :              typename _UniformRandomNumberGenerator>
+    1184              :       void
+    1185              :       negative_binomial_distribution<_IntType>::
+    1186              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    1187              :                       _UniformRandomNumberGenerator& __urng)
+    1188              :       {
+    1189              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    1190              :         while (__f != __t)
+    1191              :           {
+    1192              :             const double __y = _M_gd(__urng);
+    1193              : 
+    1194              :             // XXX Is the constructor too slow?
+    1195              :             std::poisson_distribution<result_type> __poisson(__y);
+    1196              :             *__f++ = __poisson(__urng);
+    1197              :           }
+    1198              :       }
+    1199              : 
+    1200              :   template<typename _IntType>
+    1201              :     template<typename _ForwardIterator,
+    1202              :              typename _UniformRandomNumberGenerator>
+    1203              :       void
+    1204              :       negative_binomial_distribution<_IntType>::
+    1205              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    1206              :                       _UniformRandomNumberGenerator& __urng,
+    1207              :                       const param_type& __p)
+    1208              :       {
+    1209              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    1210              :         typename std::gamma_distribution<result_type>::param_type
+    1211              :           __p2(__p.k(), (1.0 - __p.p()) / __p.p());
+    1212              : 
+    1213              :         while (__f != __t)
+    1214              :           {
+    1215              :             const double __y = _M_gd(__urng, __p2);
+    1216              : 
+    1217              :             std::poisson_distribution<result_type> __poisson(__y);
+    1218              :             *__f++ = __poisson(__urng);
+    1219              :           }
+    1220              :       }
+    1221              : 
+    1222              :   template<typename _IntType, typename _CharT, typename _Traits>
+    1223              :     std::basic_ostream<_CharT, _Traits>&
+    1224              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    1225              :                const negative_binomial_distribution<_IntType>& __x)
+    1226              :     {
+    1227              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+    1228              : 
+    1229              :       const typename __ios_base::fmtflags __flags = __os.flags();
+    1230              :       const _CharT __fill = __os.fill();
+    1231              :       const std::streamsize __precision = __os.precision();
+    1232              :       const _CharT __space = __os.widen(' ');
+    1233              :       __os.flags(__ios_base::scientific | __ios_base::left);
+    1234              :       __os.fill(__os.widen(' '));
+    1235              :       __os.precision(std::numeric_limits<double>::max_digits10);
+    1236              : 
+    1237              :       __os << __x.k() << __space << __x.p()
+    1238              :            << __space << __x._M_gd;
+    1239              : 
+    1240              :       __os.flags(__flags);
+    1241              :       __os.fill(__fill);
+    1242              :       __os.precision(__precision);
+    1243              :       return __os;
+    1244              :     }
+    1245              : 
+    1246              :   template<typename _IntType, typename _CharT, typename _Traits>
+    1247              :     std::basic_istream<_CharT, _Traits>&
+    1248              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    1249              :                negative_binomial_distribution<_IntType>& __x)
+    1250              :     {
+    1251              :       using param_type
+    1252              :         = typename negative_binomial_distribution<_IntType>::param_type;
+    1253              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+    1254              : 
+    1255              :       const typename __ios_base::fmtflags __flags = __is.flags();
+    1256              :       __is.flags(__ios_base::skipws);
+    1257              : 
+    1258              :       _IntType __k;
+    1259              :       double __p;
+    1260              :       if (__is >> __k >> __p >> __x._M_gd)
+    1261              :         __x.param(param_type(__k, __p));
+    1262              : 
+    1263              :       __is.flags(__flags);
+    1264              :       return __is;
+    1265              :     }
+    1266              : 
+    1267              : 
+    1268              :   template<typename _IntType>
+    1269              :     void
+    1270              :     poisson_distribution<_IntType>::param_type::
+    1271              :     _M_initialize()
+    1272              :     {
+    1273              : #if _GLIBCXX_USE_C99_MATH_TR1
+    1274              :       if (_M_mean >= 12)
+    1275              :         {
+    1276              :           const double __m = std::floor(_M_mean);
+    1277              :           _M_lm_thr = std::log(_M_mean);
+    1278              :           _M_lfm = std::lgamma(__m + 1);
+    1279              :           _M_sm = std::sqrt(__m);
+    1280              : 
+    1281              :           const double __pi_4 = 0.7853981633974483096156608458198757L;
+    1282              :           const double __dx = std::sqrt(2 * __m * std::log(32 * __m
+    1283              :                                                               / __pi_4));
+    1284              :           _M_d = std::round(std::max<double>(6.0, std::min(__m, __dx)));
+    1285              :           const double __cx = 2 * __m + _M_d;
+    1286              :           _M_scx = std::sqrt(__cx / 2);
+    1287              :           _M_1cx = 1 / __cx;
+    1288              : 
+    1289              :           _M_c2b = std::sqrt(__pi_4 * __cx) * std::exp(_M_1cx);
+    1290              :           _M_cb = 2 * __cx * std::exp(-_M_d * _M_1cx * (1 + _M_d / 2))
+    1291              :                 / _M_d;
+    1292              :         }
+    1293              :       else
+    1294              : #endif
+    1295              :         _M_lm_thr = std::exp(-_M_mean);
+    1296              :       }
+    1297              : 
+    1298              :   /**
+    1299              :    * A rejection algorithm when mean >= 12 and a simple method based
+    1300              :    * upon the multiplication of uniform random variates otherwise.
+    1301              :    * NB: The former is available only if _GLIBCXX_USE_C99_MATH_TR1
+    1302              :    * is defined.
+    1303              :    *
+    1304              :    * Reference:
+    1305              :    * Devroye, L. Non-Uniform Random Variates Generation. Springer-Verlag,
+    1306              :    * New York, 1986, Ch. X, Sects. 3.3 & 3.4 (+ Errata!).
+    1307              :    */
+    1308              :   template<typename _IntType>
+    1309              :     template<typename _UniformRandomNumberGenerator>
+    1310              :       typename poisson_distribution<_IntType>::result_type
+    1311              :       poisson_distribution<_IntType>::
+    1312              :       operator()(_UniformRandomNumberGenerator& __urng,
+    1313              :                  const param_type& __param)
+    1314              :       {
+    1315              :         __detail::_Adaptor<_UniformRandomNumberGenerator, double>
+    1316              :           __aurng(__urng);
+    1317              : #if _GLIBCXX_USE_C99_MATH_TR1
+    1318              :         if (__param.mean() >= 12)
+    1319              :           {
+    1320              :             double __x;
+    1321              : 
+    1322              :             // See comments above...
+    1323              :             const double __naf =
+    1324              :               (1 - std::numeric_limits<double>::epsilon()) / 2;
+    1325              :             const double __thr =
+    1326              :               std::numeric_limits<_IntType>::max() + __naf;
+    1327              : 
+    1328              :             const double __m = std::floor(__param.mean());
+    1329              :             // sqrt(pi / 2)
+    1330              :             const double __spi_2 = 1.2533141373155002512078826424055226L;
+    1331              :             const double __c1 = __param._M_sm * __spi_2;
+    1332              :             const double __c2 = __param._M_c2b + __c1;
+    1333              :             const double __c3 = __c2 + 1;
+    1334              :             const double __c4 = __c3 + 1;
+    1335              :             // 1 / 78
+    1336              :             const double __178 = 0.0128205128205128205128205128205128L;
+    1337              :             // e^(1 / 78)
+    1338              :             const double __e178 = 1.0129030479320018583185514777512983L;
+    1339              :             const double __c5 = __c4 + __e178;
+    1340              :             const double __c = __param._M_cb + __c5;
+    1341              :             const double __2cx = 2 * (2 * __m + __param._M_d);
+    1342              : 
+    1343              :             bool __reject = true;
+    1344              :             do
+    1345              :               {
+    1346              :                 const double __u = __c * __aurng();
+    1347              :                 const double __e = -std::log(1.0 - __aurng());
+    1348              : 
+    1349              :                 double __w = 0.0;
+    1350              : 
+    1351              :                 if (__u <= __c1)
+    1352              :                   {
+    1353              :                     const double __n = _M_nd(__urng);
+    1354              :                     const double __y = -std::abs(__n) * __param._M_sm - 1;
+    1355              :                     __x = std::floor(__y);
+    1356              :                     __w = -__n * __n / 2;
+    1357              :                     if (__x < -__m)
+    1358              :                       continue;
+    1359              :                   }
+    1360              :                 else if (__u <= __c2)
+    1361              :                   {
+    1362              :                     const double __n = _M_nd(__urng);
+    1363              :                     const double __y = 1 + std::abs(__n) * __param._M_scx;
+    1364              :                     __x = std::ceil(__y);
+    1365              :                     __w = __y * (2 - __y) * __param._M_1cx;
+    1366              :                     if (__x > __param._M_d)
+    1367              :                       continue;
+    1368              :                   }
+    1369              :                 else if (__u <= __c3)
+    1370              :                   // NB: This case not in the book, nor in the Errata,
+    1371              :                   // but should be ok...
+    1372              :                   __x = -1;
+    1373              :                 else if (__u <= __c4)
+    1374              :                   __x = 0;
+    1375              :                 else if (__u <= __c5)
+    1376              :                   {
+    1377              :                     __x = 1;
+    1378              :                     // Only in the Errata, see libstdc++/83237.
+    1379              :                     __w = __178;
+    1380              :                   }
+    1381              :                 else
+    1382              :                   {
+    1383              :                     const double __v = -std::log(1.0 - __aurng());
+    1384              :                     const double __y = __param._M_d
+    1385              :                                      + __v * __2cx / __param._M_d;
+    1386              :                     __x = std::ceil(__y);
+    1387              :                     __w = -__param._M_d * __param._M_1cx * (1 + __y / 2);
+    1388              :                   }
+    1389              : 
+    1390              :                 __reject = (__w - __e - __x * __param._M_lm_thr
+    1391              :                             > __param._M_lfm - std::lgamma(__x + __m + 1));
+    1392              : 
+    1393              :                 __reject |= __x + __m >= __thr;
+    1394              : 
+    1395              :               } while (__reject);
+    1396              : 
+    1397              :             return result_type(__x + __m + __naf);
+    1398              :           }
+    1399              :         else
+    1400              : #endif
+    1401              :           {
+    1402              :             _IntType     __x = 0;
+    1403              :             double __prod = 1.0;
+    1404              : 
+    1405              :             do
+    1406              :               {
+    1407              :                 __prod *= __aurng();
+    1408              :                 __x += 1;
+    1409              :               }
+    1410              :             while (__prod > __param._M_lm_thr);
+    1411              : 
+    1412              :             return __x - 1;
+    1413              :           }
+    1414              :       }
+    1415              : 
+    1416              :   template<typename _IntType>
+    1417              :     template<typename _ForwardIterator,
+    1418              :              typename _UniformRandomNumberGenerator>
+    1419              :       void
+    1420              :       poisson_distribution<_IntType>::
+    1421              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    1422              :                       _UniformRandomNumberGenerator& __urng,
+    1423              :                       const param_type& __param)
+    1424              :       {
+    1425              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    1426              :         // We could duplicate everything from operator()...
+    1427              :         while (__f != __t)
+    1428              :           *__f++ = this->operator()(__urng, __param);
+    1429              :       }
+    1430              : 
+    1431              :   template<typename _IntType,
+    1432              :            typename _CharT, typename _Traits>
+    1433              :     std::basic_ostream<_CharT, _Traits>&
+    1434              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    1435              :                const poisson_distribution<_IntType>& __x)
+    1436              :     {
+    1437              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+    1438              : 
+    1439              :       const typename __ios_base::fmtflags __flags = __os.flags();
+    1440              :       const _CharT __fill = __os.fill();
+    1441              :       const std::streamsize __precision = __os.precision();
+    1442              :       const _CharT __space = __os.widen(' ');
+    1443              :       __os.flags(__ios_base::scientific | __ios_base::left);
+    1444              :       __os.fill(__space);
+    1445              :       __os.precision(std::numeric_limits<double>::max_digits10);
+    1446              : 
+    1447              :       __os << __x.mean() << __space << __x._M_nd;
+    1448              : 
+    1449              :       __os.flags(__flags);
+    1450              :       __os.fill(__fill);
+    1451              :       __os.precision(__precision);
+    1452              :       return __os;
+    1453              :     }
+    1454              : 
+    1455              :   template<typename _IntType,
+    1456              :            typename _CharT, typename _Traits>
+    1457              :     std::basic_istream<_CharT, _Traits>&
+    1458              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    1459              :                poisson_distribution<_IntType>& __x)
+    1460              :     {
+    1461              :       using param_type = typename poisson_distribution<_IntType>::param_type;
+    1462              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+    1463              : 
+    1464              :       const typename __ios_base::fmtflags __flags = __is.flags();
+    1465              :       __is.flags(__ios_base::skipws);
+    1466              : 
+    1467              :       double __mean;
+    1468              :       if (__is >> __mean >> __x._M_nd)
+    1469              :         __x.param(param_type(__mean));
+    1470              : 
+    1471              :       __is.flags(__flags);
+    1472              :       return __is;
+    1473              :     }
+    1474              : 
+    1475              : 
+    1476              :   template<typename _IntType>
+    1477              :     void
+    1478              :     binomial_distribution<_IntType>::param_type::
+    1479              :     _M_initialize()
+    1480              :     {
+    1481              :       const double __p12 = _M_p <= 0.5 ? _M_p : 1.0 - _M_p;
+    1482              : 
+    1483              :       _M_easy = true;
+    1484              : 
+    1485              : #if _GLIBCXX_USE_C99_MATH_TR1
+    1486              :       if (_M_t * __p12 >= 8)
+    1487              :         {
+    1488              :           _M_easy = false;
+    1489              :           const double __np = std::floor(_M_t * __p12);
+    1490              :           const double __pa = __np / _M_t;
+    1491              :           const double __1p = 1 - __pa;
+    1492              : 
+    1493              :           const double __pi_4 = 0.7853981633974483096156608458198757L;
+    1494              :           const double __d1x =
+    1495              :             std::sqrt(__np * __1p * std::log(32 * __np
+    1496              :                                              / (81 * __pi_4 * __1p)));
+    1497              :           _M_d1 = std::round(std::max<double>(1.0, __d1x));
+    1498              :           const double __d2x =
+    1499              :             std::sqrt(__np * __1p * std::log(32 * _M_t * __1p
+    1500              :                                              / (__pi_4 * __pa)));
+    1501              :           _M_d2 = std::round(std::max<double>(1.0, __d2x));
+    1502              : 
+    1503              :           // sqrt(pi / 2)
+    1504              :           const double __spi_2 = 1.2533141373155002512078826424055226L;
+    1505              :           _M_s1 = std::sqrt(__np * __1p) * (1 + _M_d1 / (4 * __np));
+    1506              :           _M_s2 = std::sqrt(__np * __1p) * (1 + _M_d2 / (4 * _M_t * __1p));
+    1507              :           _M_c = 2 * _M_d1 / __np;
+    1508              :           _M_a1 = std::exp(_M_c) * _M_s1 * __spi_2;
+    1509              :           const double __a12 = _M_a1 + _M_s2 * __spi_2;
+    1510              :           const double __s1s = _M_s1 * _M_s1;
+    1511              :           _M_a123 = __a12 + (std::exp(_M_d1 / (_M_t * __1p))
+    1512              :                              * 2 * __s1s / _M_d1
+    1513              :                              * std::exp(-_M_d1 * _M_d1 / (2 * __s1s)));
+    1514              :           const double __s2s = _M_s2 * _M_s2;
+    1515              :           _M_s = (_M_a123 + 2 * __s2s / _M_d2
+    1516              :                   * std::exp(-_M_d2 * _M_d2 / (2 * __s2s)));
+    1517              :           _M_lf = (std::lgamma(__np + 1)
+    1518              :                    + std::lgamma(_M_t - __np + 1));
+    1519              :           _M_lp1p = std::log(__pa / __1p);
+    1520              : 
+    1521              :           _M_q = -std::log(1 - (__p12 - __pa) / __1p);
+    1522              :         }
+    1523              :       else
+    1524              : #endif
+    1525              :         _M_q = -std::log(1 - __p12);
+    1526              :     }
+    1527              : 
+    1528              :   template<typename _IntType>
+    1529              :     template<typename _UniformRandomNumberGenerator>
+    1530              :       typename binomial_distribution<_IntType>::result_type
+    1531              :       binomial_distribution<_IntType>::
+    1532              :       _M_waiting(_UniformRandomNumberGenerator& __urng,
+    1533              :                  _IntType __t, double __q)
+    1534              :       {
+    1535              :         _IntType __x = 0;
+    1536              :         double __sum = 0.0;
+    1537              :         __detail::_Adaptor<_UniformRandomNumberGenerator, double>
+    1538              :           __aurng(__urng);
+    1539              : 
+    1540              :         do
+    1541              :           {
+    1542              :             if (__t == __x)
+    1543              :               return __x;
+    1544              :             const double __e = -std::log(1.0 - __aurng());
+    1545              :             __sum += __e / (__t - __x);
+    1546              :             __x += 1;
+    1547              :           }
+    1548              :         while (__sum <= __q);
+    1549              : 
+    1550              :         return __x - 1;
+    1551              :       }
+    1552              : 
+    1553              :   /**
+    1554              :    * A rejection algorithm when t * p >= 8 and a simple waiting time
+    1555              :    * method - the second in the referenced book - otherwise.
+    1556              :    * NB: The former is available only if _GLIBCXX_USE_C99_MATH_TR1
+    1557              :    * is defined.
+    1558              :    *
+    1559              :    * Reference:
+    1560              :    * Devroye, L. Non-Uniform Random Variates Generation. Springer-Verlag,
+    1561              :    * New York, 1986, Ch. X, Sect. 4 (+ Errata!).
+    1562              :    */
+    1563              :   template<typename _IntType>
+    1564              :     template<typename _UniformRandomNumberGenerator>
+    1565              :       typename binomial_distribution<_IntType>::result_type
+    1566              :       binomial_distribution<_IntType>::
+    1567              :       operator()(_UniformRandomNumberGenerator& __urng,
+    1568              :                  const param_type& __param)
+    1569              :       {
+    1570              :         result_type __ret;
+    1571              :         const _IntType __t = __param.t();
+    1572              :         const double __p = __param.p();
+    1573              :         const double __p12 = __p <= 0.5 ? __p : 1.0 - __p;
+    1574              :         __detail::_Adaptor<_UniformRandomNumberGenerator, double>
+    1575              :           __aurng(__urng);
+    1576              : 
+    1577              : #if _GLIBCXX_USE_C99_MATH_TR1
+    1578              :         if (!__param._M_easy)
+    1579              :           {
+    1580              :             double __x;
+    1581              : 
+    1582              :             // See comments above...
+    1583              :             const double __naf =
+    1584              :               (1 - std::numeric_limits<double>::epsilon()) / 2;
+    1585              :             const double __thr =
+    1586              :               std::numeric_limits<_IntType>::max() + __naf;
+    1587              : 
+    1588              :             const double __np = std::floor(__t * __p12);
+    1589              : 
+    1590              :             // sqrt(pi / 2)
+    1591              :             const double __spi_2 = 1.2533141373155002512078826424055226L;
+    1592              :             const double __a1 = __param._M_a1;
+    1593              :             const double __a12 = __a1 + __param._M_s2 * __spi_2;
+    1594              :             const double __a123 = __param._M_a123;
+    1595              :             const double __s1s = __param._M_s1 * __param._M_s1;
+    1596              :             const double __s2s = __param._M_s2 * __param._M_s2;
+    1597              : 
+    1598              :             bool __reject;
+    1599              :             do
+    1600              :               {
+    1601              :                 const double __u = __param._M_s * __aurng();
+    1602              : 
+    1603              :                 double __v;
+    1604              : 
+    1605              :                 if (__u <= __a1)
+    1606              :                   {
+    1607              :                     const double __n = _M_nd(__urng);
+    1608              :                     const double __y = __param._M_s1 * std::abs(__n);
+    1609              :                     __reject = __y >= __param._M_d1;
+    1610              :                     if (!__reject)
+    1611              :                       {
+    1612              :                         const double __e = -std::log(1.0 - __aurng());
+    1613              :                         __x = std::floor(__y);
+    1614              :                         __v = -__e - __n * __n / 2 + __param._M_c;
+    1615              :                       }
+    1616              :                   }
+    1617              :                 else if (__u <= __a12)
+    1618              :                   {
+    1619              :                     const double __n = _M_nd(__urng);
+    1620              :                     const double __y = __param._M_s2 * std::abs(__n);
+    1621              :                     __reject = __y >= __param._M_d2;
+    1622              :                     if (!__reject)
+    1623              :                       {
+    1624              :                         const double __e = -std::log(1.0 - __aurng());
+    1625              :                         __x = std::floor(-__y);
+    1626              :                         __v = -__e - __n * __n / 2;
+    1627              :                       }
+    1628              :                   }
+    1629              :                 else if (__u <= __a123)
+    1630              :                   {
+    1631              :                     const double __e1 = -std::log(1.0 - __aurng());
+    1632              :                     const double __e2 = -std::log(1.0 - __aurng());
+    1633              : 
+    1634              :                     const double __y = __param._M_d1
+    1635              :                                      + 2 * __s1s * __e1 / __param._M_d1;
+    1636              :                     __x = std::floor(__y);
+    1637              :                     __v = (-__e2 + __param._M_d1 * (1 / (__t - __np)
+    1638              :                                                     -__y / (2 * __s1s)));
+    1639              :                     __reject = false;
+    1640              :                   }
+    1641              :                 else
+    1642              :                   {
+    1643              :                     const double __e1 = -std::log(1.0 - __aurng());
+    1644              :                     const double __e2 = -std::log(1.0 - __aurng());
+    1645              : 
+    1646              :                     const double __y = __param._M_d2
+    1647              :                                      + 2 * __s2s * __e1 / __param._M_d2;
+    1648              :                     __x = std::floor(-__y);
+    1649              :                     __v = -__e2 - __param._M_d2 * __y / (2 * __s2s);
+    1650              :                     __reject = false;
+    1651              :                   }
+    1652              : 
+    1653              :                 __reject = __reject || __x < -__np || __x > __t - __np;
+    1654              :                 if (!__reject)
+    1655              :                   {
+    1656              :                     const double __lfx =
+    1657              :                       std::lgamma(__np + __x + 1)
+    1658              :                       + std::lgamma(__t - (__np + __x) + 1);
+    1659              :                     __reject = __v > __param._M_lf - __lfx
+    1660              :                              + __x * __param._M_lp1p;
+    1661              :                   }
+    1662              : 
+    1663              :                 __reject |= __x + __np >= __thr;
+    1664              :               }
+    1665              :             while (__reject);
+    1666              : 
+    1667              :             __x += __np + __naf;
+    1668              : 
+    1669              :             const _IntType __z = _M_waiting(__urng, __t - _IntType(__x),
+    1670              :                                             __param._M_q);
+    1671              :             __ret = _IntType(__x) + __z;
+    1672              :           }
+    1673              :         else
+    1674              : #endif
+    1675              :           __ret = _M_waiting(__urng, __t, __param._M_q);
+    1676              : 
+    1677              :         if (__p12 != __p)
+    1678              :           __ret = __t - __ret;
+    1679              :         return __ret;
+    1680              :       }
+    1681              : 
+    1682              :   template<typename _IntType>
+    1683              :     template<typename _ForwardIterator,
+    1684              :              typename _UniformRandomNumberGenerator>
+    1685              :       void
+    1686              :       binomial_distribution<_IntType>::
+    1687              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    1688              :                       _UniformRandomNumberGenerator& __urng,
+    1689              :                       const param_type& __param)
+    1690              :       {
+    1691              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    1692              :         // We could duplicate everything from operator()...
+    1693              :         while (__f != __t)
+    1694              :           *__f++ = this->operator()(__urng, __param);
+    1695              :       }
+    1696              : 
+    1697              :   template<typename _IntType,
+    1698              :            typename _CharT, typename _Traits>
+    1699              :     std::basic_ostream<_CharT, _Traits>&
+    1700              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    1701              :                const binomial_distribution<_IntType>& __x)
+    1702              :     {
+    1703              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+    1704              : 
+    1705              :       const typename __ios_base::fmtflags __flags = __os.flags();
+    1706              :       const _CharT __fill = __os.fill();
+    1707              :       const std::streamsize __precision = __os.precision();
+    1708              :       const _CharT __space = __os.widen(' ');
+    1709              :       __os.flags(__ios_base::scientific | __ios_base::left);
+    1710              :       __os.fill(__space);
+    1711              :       __os.precision(std::numeric_limits<double>::max_digits10);
+    1712              : 
+    1713              :       __os << __x.t() << __space << __x.p()
+    1714              :            << __space << __x._M_nd;
+    1715              : 
+    1716              :       __os.flags(__flags);
+    1717              :       __os.fill(__fill);
+    1718              :       __os.precision(__precision);
+    1719              :       return __os;
+    1720              :     }
+    1721              : 
+    1722              :   template<typename _IntType,
+    1723              :            typename _CharT, typename _Traits>
+    1724              :     std::basic_istream<_CharT, _Traits>&
+    1725              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    1726              :                binomial_distribution<_IntType>& __x)
+    1727              :     {
+    1728              :       using param_type = typename binomial_distribution<_IntType>::param_type;
+    1729              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+    1730              : 
+    1731              :       const typename __ios_base::fmtflags __flags = __is.flags();
+    1732              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+    1733              : 
+    1734              :       _IntType __t;
+    1735              :       double __p;
+    1736              :       if (__is >> __t >> __p >> __x._M_nd)
+    1737              :         __x.param(param_type(__t, __p));
+    1738              : 
+    1739              :       __is.flags(__flags);
+    1740              :       return __is;
+    1741              :     }
+    1742              : 
+    1743              : 
+    1744              :   template<typename _RealType>
+    1745              :     template<typename _ForwardIterator,
+    1746              :              typename _UniformRandomNumberGenerator>
+    1747              :       void
+    1748              :       std::exponential_distribution<_RealType>::
+    1749              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    1750              :                       _UniformRandomNumberGenerator& __urng,
+    1751              :                       const param_type& __p)
+    1752              :       {
+    1753              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    1754              :         __detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
+    1755              :           __aurng(__urng);
+    1756              :         while (__f != __t)
+    1757              :           *__f++ = -std::log(result_type(1) - __aurng()) / __p.lambda();
+    1758              :       }
+    1759              : 
+    1760              :   template<typename _RealType, typename _CharT, typename _Traits>
+    1761              :     std::basic_ostream<_CharT, _Traits>&
+    1762              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    1763              :                const exponential_distribution<_RealType>& __x)
+    1764              :     {
+    1765              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+    1766              : 
+    1767              :       const typename __ios_base::fmtflags __flags = __os.flags();
+    1768              :       const _CharT __fill = __os.fill();
+    1769              :       const std::streamsize __precision = __os.precision();
+    1770              :       __os.flags(__ios_base::scientific | __ios_base::left);
+    1771              :       __os.fill(__os.widen(' '));
+    1772              :       __os.precision(std::numeric_limits<_RealType>::max_digits10);
+    1773              : 
+    1774              :       __os << __x.lambda();
+    1775              : 
+    1776              :       __os.flags(__flags);
+    1777              :       __os.fill(__fill);
+    1778              :       __os.precision(__precision);
+    1779              :       return __os;
+    1780              :     }
+    1781              : 
+    1782              :   template<typename _RealType, typename _CharT, typename _Traits>
+    1783              :     std::basic_istream<_CharT, _Traits>&
+    1784              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    1785              :                exponential_distribution<_RealType>& __x)
+    1786              :     {
+    1787              :       using param_type
+    1788              :         = typename exponential_distribution<_RealType>::param_type;
+    1789              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+    1790              : 
+    1791              :       const typename __ios_base::fmtflags __flags = __is.flags();
+    1792              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+    1793              : 
+    1794              :       _RealType __lambda;
+    1795              :       if (__is >> __lambda)
+    1796              :         __x.param(param_type(__lambda));
+    1797              : 
+    1798              :       __is.flags(__flags);
+    1799              :       return __is;
+    1800              :     }
+    1801              : 
+    1802              : 
+    1803              :   /**
+    1804              :    * Polar method due to Marsaglia.
+    1805              :    *
+    1806              :    * Devroye, L. Non-Uniform Random Variates Generation. Springer-Verlag,
+    1807              :    * New York, 1986, Ch. V, Sect. 4.4.
+    1808              :    */
+    1809              :   template<typename _RealType>
+    1810              :     template<typename _UniformRandomNumberGenerator>
+    1811              :       typename normal_distribution<_RealType>::result_type
+    1812              :       normal_distribution<_RealType>::
+    1813              :       operator()(_UniformRandomNumberGenerator& __urng,
+    1814              :                  const param_type& __param)
+    1815              :       {
+    1816              :         result_type __ret;
+    1817              :         __detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
+    1818              :           __aurng(__urng);
+    1819              : 
+    1820              :         if (_M_saved_available)
+    1821              :           {
+    1822              :             _M_saved_available = false;
+    1823              :             __ret = _M_saved;
+    1824              :           }
+    1825              :         else
+    1826              :           {
+    1827              :             result_type __x, __y, __r2;
+    1828              :             do
+    1829              :               {
+    1830              :                 __x = result_type(2.0) * __aurng() - 1.0;
+    1831              :                 __y = result_type(2.0) * __aurng() - 1.0;
+    1832              :                 __r2 = __x * __x + __y * __y;
+    1833              :               }
+    1834              :             while (__r2 > 1.0 || __r2 == 0.0);
+    1835              : 
+    1836              :             const result_type __mult = std::sqrt(-2 * std::log(__r2) / __r2);
+    1837              :             _M_saved = __x * __mult;
+    1838              :             _M_saved_available = true;
+    1839              :             __ret = __y * __mult;
+    1840              :           }
+    1841              : 
+    1842              :         __ret = __ret * __param.stddev() + __param.mean();
+    1843              :         return __ret;
+    1844              :       }
+    1845              : 
+    1846              :   template<typename _RealType>
+    1847              :     template<typename _ForwardIterator,
+    1848              :              typename _UniformRandomNumberGenerator>
+    1849              :       void
+    1850              :       normal_distribution<_RealType>::
+    1851              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    1852              :                       _UniformRandomNumberGenerator& __urng,
+    1853              :                       const param_type& __param)
+    1854              :       {
+    1855              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    1856              : 
+    1857              :         if (__f == __t)
+    1858              :           return;
+    1859              : 
+    1860              :         if (_M_saved_available)
+    1861              :           {
+    1862              :             _M_saved_available = false;
+    1863              :             *__f++ = _M_saved * __param.stddev() + __param.mean();
+    1864              : 
+    1865              :             if (__f == __t)
+    1866              :               return;
+    1867              :           }
+    1868              : 
+    1869              :         __detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
+    1870              :           __aurng(__urng);
+    1871              : 
+    1872              :         while (__f + 1 < __t)
+    1873              :           {
+    1874              :             result_type __x, __y, __r2;
+    1875              :             do
+    1876              :               {
+    1877              :                 __x = result_type(2.0) * __aurng() - 1.0;
+    1878              :                 __y = result_type(2.0) * __aurng() - 1.0;
+    1879              :                 __r2 = __x * __x + __y * __y;
+    1880              :               }
+    1881              :             while (__r2 > 1.0 || __r2 == 0.0);
+    1882              : 
+    1883              :             const result_type __mult = std::sqrt(-2 * std::log(__r2) / __r2);
+    1884              :             *__f++ = __y * __mult * __param.stddev() + __param.mean();
+    1885              :             *__f++ = __x * __mult * __param.stddev() + __param.mean();
+    1886              :           }
+    1887              : 
+    1888              :         if (__f != __t)
+    1889              :           {
+    1890              :             result_type __x, __y, __r2;
+    1891              :             do
+    1892              :               {
+    1893              :                 __x = result_type(2.0) * __aurng() - 1.0;
+    1894              :                 __y = result_type(2.0) * __aurng() - 1.0;
+    1895              :                 __r2 = __x * __x + __y * __y;
+    1896              :               }
+    1897              :             while (__r2 > 1.0 || __r2 == 0.0);
+    1898              : 
+    1899              :             const result_type __mult = std::sqrt(-2 * std::log(__r2) / __r2);
+    1900              :             _M_saved = __x * __mult;
+    1901              :             _M_saved_available = true;
+    1902              :             *__f = __y * __mult * __param.stddev() + __param.mean();
+    1903              :           }
+    1904              :       }
+    1905              : 
+    1906              :   template<typename _RealType>
+    1907              :     bool
+    1908              :     operator==(const std::normal_distribution<_RealType>& __d1,
+    1909              :                const std::normal_distribution<_RealType>& __d2)
+    1910              :     {
+    1911              :       if (__d1._M_param == __d2._M_param
+    1912              :           && __d1._M_saved_available == __d2._M_saved_available)
+    1913              :         return __d1._M_saved_available ? __d1._M_saved == __d2._M_saved : true;
+    1914              :       else
+    1915              :         return false;
+    1916              :     }
+    1917              : 
+    1918              :   template<typename _RealType, typename _CharT, typename _Traits>
+    1919              :     std::basic_ostream<_CharT, _Traits>&
+    1920              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    1921              :                const normal_distribution<_RealType>& __x)
+    1922              :     {
+    1923              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+    1924              : 
+    1925              :       const typename __ios_base::fmtflags __flags = __os.flags();
+    1926              :       const _CharT __fill = __os.fill();
+    1927              :       const std::streamsize __precision = __os.precision();
+    1928              :       const _CharT __space = __os.widen(' ');
+    1929              :       __os.flags(__ios_base::scientific | __ios_base::left);
+    1930              :       __os.fill(__space);
+    1931              :       __os.precision(std::numeric_limits<_RealType>::max_digits10);
+    1932              : 
+    1933              :       __os << __x.mean() << __space << __x.stddev()
+    1934              :            << __space << __x._M_saved_available;
+    1935              :       if (__x._M_saved_available)
+    1936              :         __os << __space << __x._M_saved;
+    1937              : 
+    1938              :       __os.flags(__flags);
+    1939              :       __os.fill(__fill);
+    1940              :       __os.precision(__precision);
+    1941              :       return __os;
+    1942              :     }
+    1943              : 
+    1944              :   template<typename _RealType, typename _CharT, typename _Traits>
+    1945              :     std::basic_istream<_CharT, _Traits>&
+    1946              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    1947              :                normal_distribution<_RealType>& __x)
+    1948              :     {
+    1949              :       using param_type = typename normal_distribution<_RealType>::param_type;
+    1950              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+    1951              : 
+    1952              :       const typename __ios_base::fmtflags __flags = __is.flags();
+    1953              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+    1954              : 
+    1955              :       double __mean, __stddev;
+    1956              :       bool __saved_avail;
+    1957              :       if (__is >> __mean >> __stddev >> __saved_avail)
+    1958              :         {
+    1959              :           if (!__saved_avail || (__is >> __x._M_saved))
+    1960              :             {
+    1961              :               __x._M_saved_available = __saved_avail;
+    1962              :               __x.param(param_type(__mean, __stddev));
+    1963              :             }
+    1964              :         }
+    1965              : 
+    1966              :       __is.flags(__flags);
+    1967              :       return __is;
+    1968              :     }
+    1969              : 
+    1970              : 
+    1971              :   template<typename _RealType>
+    1972              :     template<typename _ForwardIterator,
+    1973              :              typename _UniformRandomNumberGenerator>
+    1974              :       void
+    1975              :       lognormal_distribution<_RealType>::
+    1976              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    1977              :                       _UniformRandomNumberGenerator& __urng,
+    1978              :                       const param_type& __p)
+    1979              :       {
+    1980              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    1981              :           while (__f != __t)
+    1982              :             *__f++ = std::exp(__p.s() * _M_nd(__urng) + __p.m());
+    1983              :       }
+    1984              : 
+    1985              :   template<typename _RealType, typename _CharT, typename _Traits>
+    1986              :     std::basic_ostream<_CharT, _Traits>&
+    1987              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    1988              :                const lognormal_distribution<_RealType>& __x)
+    1989              :     {
+    1990              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+    1991              : 
+    1992              :       const typename __ios_base::fmtflags __flags = __os.flags();
+    1993              :       const _CharT __fill = __os.fill();
+    1994              :       const std::streamsize __precision = __os.precision();
+    1995              :       const _CharT __space = __os.widen(' ');
+    1996              :       __os.flags(__ios_base::scientific | __ios_base::left);
+    1997              :       __os.fill(__space);
+    1998              :       __os.precision(std::numeric_limits<_RealType>::max_digits10);
+    1999              : 
+    2000              :       __os << __x.m() << __space << __x.s()
+    2001              :            << __space << __x._M_nd;
+    2002              : 
+    2003              :       __os.flags(__flags);
+    2004              :       __os.fill(__fill);
+    2005              :       __os.precision(__precision);
+    2006              :       return __os;
+    2007              :     }
+    2008              : 
+    2009              :   template<typename _RealType, typename _CharT, typename _Traits>
+    2010              :     std::basic_istream<_CharT, _Traits>&
+    2011              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    2012              :                lognormal_distribution<_RealType>& __x)
+    2013              :     {
+    2014              :       using param_type
+    2015              :         = typename lognormal_distribution<_RealType>::param_type;
+    2016              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+    2017              : 
+    2018              :       const typename __ios_base::fmtflags __flags = __is.flags();
+    2019              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+    2020              : 
+    2021              :       _RealType __m, __s;
+    2022              :       if (__is >> __m >> __s >> __x._M_nd)
+    2023              :         __x.param(param_type(__m, __s));
+    2024              : 
+    2025              :       __is.flags(__flags);
+    2026              :       return __is;
+    2027              :     }
+    2028              : 
+    2029              :   template<typename _RealType>
+    2030              :     template<typename _ForwardIterator,
+    2031              :              typename _UniformRandomNumberGenerator>
+    2032              :       void
+    2033              :       std::chi_squared_distribution<_RealType>::
+    2034              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    2035              :                       _UniformRandomNumberGenerator& __urng)
+    2036              :       {
+    2037              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2038              :         while (__f != __t)
+    2039              :           *__f++ = 2 * _M_gd(__urng);
+    2040              :       }
+    2041              : 
+    2042              :   template<typename _RealType>
+    2043              :     template<typename _ForwardIterator,
+    2044              :              typename _UniformRandomNumberGenerator>
+    2045              :       void
+    2046              :       std::chi_squared_distribution<_RealType>::
+    2047              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    2048              :                       _UniformRandomNumberGenerator& __urng,
+    2049              :                       const typename
+    2050              :                       std::gamma_distribution<result_type>::param_type& __p)
+    2051              :       {
+    2052              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2053              :         while (__f != __t)
+    2054              :           *__f++ = 2 * _M_gd(__urng, __p);
+    2055              :       }
+    2056              : 
+    2057              :   template<typename _RealType, typename _CharT, typename _Traits>
+    2058              :     std::basic_ostream<_CharT, _Traits>&
+    2059              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    2060              :                const chi_squared_distribution<_RealType>& __x)
+    2061              :     {
+    2062              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+    2063              : 
+    2064              :       const typename __ios_base::fmtflags __flags = __os.flags();
+    2065              :       const _CharT __fill = __os.fill();
+    2066              :       const std::streamsize __precision = __os.precision();
+    2067              :       const _CharT __space = __os.widen(' ');
+    2068              :       __os.flags(__ios_base::scientific | __ios_base::left);
+    2069              :       __os.fill(__space);
+    2070              :       __os.precision(std::numeric_limits<_RealType>::max_digits10);
+    2071              : 
+    2072              :       __os << __x.n() << __space << __x._M_gd;
+    2073              : 
+    2074              :       __os.flags(__flags);
+    2075              :       __os.fill(__fill);
+    2076              :       __os.precision(__precision);
+    2077              :       return __os;
+    2078              :     }
+    2079              : 
+    2080              :   template<typename _RealType, typename _CharT, typename _Traits>
+    2081              :     std::basic_istream<_CharT, _Traits>&
+    2082              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    2083              :                chi_squared_distribution<_RealType>& __x)
+    2084              :     {
+    2085              :       using param_type
+    2086              :         = typename chi_squared_distribution<_RealType>::param_type;
+    2087              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+    2088              : 
+    2089              :       const typename __ios_base::fmtflags __flags = __is.flags();
+    2090              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+    2091              : 
+    2092              :       _RealType __n;
+    2093              :       if (__is >> __n >> __x._M_gd)
+    2094              :         __x.param(param_type(__n));
+    2095              : 
+    2096              :       __is.flags(__flags);
+    2097              :       return __is;
+    2098              :     }
+    2099              : 
+    2100              : 
+    2101              :   template<typename _RealType>
+    2102              :     template<typename _UniformRandomNumberGenerator>
+    2103              :       typename cauchy_distribution<_RealType>::result_type
+    2104              :       cauchy_distribution<_RealType>::
+    2105              :       operator()(_UniformRandomNumberGenerator& __urng,
+    2106              :                  const param_type& __p)
+    2107              :       {
+    2108              :         __detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
+    2109              :           __aurng(__urng);
+    2110              :         _RealType __u;
+    2111              :         do
+    2112              :           __u = __aurng();
+    2113              :         while (__u == 0.5);
+    2114              : 
+    2115              :         const _RealType __pi = 3.1415926535897932384626433832795029L;
+    2116              :         return __p.a() + __p.b() * std::tan(__pi * __u);
+    2117              :       }
+    2118              : 
+    2119              :   template<typename _RealType>
+    2120              :     template<typename _ForwardIterator,
+    2121              :              typename _UniformRandomNumberGenerator>
+    2122              :       void
+    2123              :       cauchy_distribution<_RealType>::
+    2124              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    2125              :                       _UniformRandomNumberGenerator& __urng,
+    2126              :                       const param_type& __p)
+    2127              :       {
+    2128              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2129              :         const _RealType __pi = 3.1415926535897932384626433832795029L;
+    2130              :         __detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
+    2131              :           __aurng(__urng);
+    2132              :         while (__f != __t)
+    2133              :           {
+    2134              :             _RealType __u;
+    2135              :             do
+    2136              :               __u = __aurng();
+    2137              :             while (__u == 0.5);
+    2138              : 
+    2139              :             *__f++ = __p.a() + __p.b() * std::tan(__pi * __u);
+    2140              :           }
+    2141              :       }
+    2142              : 
+    2143              :   template<typename _RealType, typename _CharT, typename _Traits>
+    2144              :     std::basic_ostream<_CharT, _Traits>&
+    2145              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    2146              :                const cauchy_distribution<_RealType>& __x)
+    2147              :     {
+    2148              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+    2149              : 
+    2150              :       const typename __ios_base::fmtflags __flags = __os.flags();
+    2151              :       const _CharT __fill = __os.fill();
+    2152              :       const std::streamsize __precision = __os.precision();
+    2153              :       const _CharT __space = __os.widen(' ');
+    2154              :       __os.flags(__ios_base::scientific | __ios_base::left);
+    2155              :       __os.fill(__space);
+    2156              :       __os.precision(std::numeric_limits<_RealType>::max_digits10);
+    2157              : 
+    2158              :       __os << __x.a() << __space << __x.b();
+    2159              : 
+    2160              :       __os.flags(__flags);
+    2161              :       __os.fill(__fill);
+    2162              :       __os.precision(__precision);
+    2163              :       return __os;
+    2164              :     }
+    2165              : 
+    2166              :   template<typename _RealType, typename _CharT, typename _Traits>
+    2167              :     std::basic_istream<_CharT, _Traits>&
+    2168              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    2169              :                cauchy_distribution<_RealType>& __x)
+    2170              :     {
+    2171              :       using param_type = typename cauchy_distribution<_RealType>::param_type;
+    2172              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+    2173              : 
+    2174              :       const typename __ios_base::fmtflags __flags = __is.flags();
+    2175              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+    2176              : 
+    2177              :       _RealType __a, __b;
+    2178              :       if (__is >> __a >> __b)
+    2179              :         __x.param(param_type(__a, __b));
+    2180              : 
+    2181              :       __is.flags(__flags);
+    2182              :       return __is;
+    2183              :     }
+    2184              : 
+    2185              : 
+    2186              :   template<typename _RealType>
+    2187              :     template<typename _ForwardIterator,
+    2188              :              typename _UniformRandomNumberGenerator>
+    2189              :       void
+    2190              :       std::fisher_f_distribution<_RealType>::
+    2191              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    2192              :                       _UniformRandomNumberGenerator& __urng)
+    2193              :       {
+    2194              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2195              :         while (__f != __t)
+    2196              :           *__f++ = ((_M_gd_x(__urng) * n()) / (_M_gd_y(__urng) * m()));
+    2197              :       }
+    2198              : 
+    2199              :   template<typename _RealType>
+    2200              :     template<typename _ForwardIterator,
+    2201              :              typename _UniformRandomNumberGenerator>
+    2202              :       void
+    2203              :       std::fisher_f_distribution<_RealType>::
+    2204              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    2205              :                       _UniformRandomNumberGenerator& __urng,
+    2206              :                       const param_type& __p)
+    2207              :       {
+    2208              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2209              :         typedef typename std::gamma_distribution<result_type>::param_type
+    2210              :           param_type;
+    2211              :         param_type __p1(__p.m() / 2);
+    2212              :         param_type __p2(__p.n() / 2);
+    2213              :         while (__f != __t)
+    2214              :           *__f++ = ((_M_gd_x(__urng, __p1) * n())
+    2215              :                     / (_M_gd_y(__urng, __p2) * m()));
+    2216              :       }
+    2217              : 
+    2218              :   template<typename _RealType, typename _CharT, typename _Traits>
+    2219              :     std::basic_ostream<_CharT, _Traits>&
+    2220              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    2221              :                const fisher_f_distribution<_RealType>& __x)
+    2222              :     {
+    2223              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+    2224              : 
+    2225              :       const typename __ios_base::fmtflags __flags = __os.flags();
+    2226              :       const _CharT __fill = __os.fill();
+    2227              :       const std::streamsize __precision = __os.precision();
+    2228              :       const _CharT __space = __os.widen(' ');
+    2229              :       __os.flags(__ios_base::scientific | __ios_base::left);
+    2230              :       __os.fill(__space);
+    2231              :       __os.precision(std::numeric_limits<_RealType>::max_digits10);
+    2232              : 
+    2233              :       __os << __x.m() << __space << __x.n()
+    2234              :            << __space << __x._M_gd_x << __space << __x._M_gd_y;
+    2235              : 
+    2236              :       __os.flags(__flags);
+    2237              :       __os.fill(__fill);
+    2238              :       __os.precision(__precision);
+    2239              :       return __os;
+    2240              :     }
+    2241              : 
+    2242              :   template<typename _RealType, typename _CharT, typename _Traits>
+    2243              :     std::basic_istream<_CharT, _Traits>&
+    2244              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    2245              :                fisher_f_distribution<_RealType>& __x)
+    2246              :     {
+    2247              :       using param_type
+    2248              :         = typename fisher_f_distribution<_RealType>::param_type;
+    2249              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+    2250              : 
+    2251              :       const typename __ios_base::fmtflags __flags = __is.flags();
+    2252              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+    2253              : 
+    2254              :       _RealType __m, __n;
+    2255              :       if (__is >> __m >> __n >> __x._M_gd_x >> __x._M_gd_y)
+    2256              :         __x.param(param_type(__m, __n));
+    2257              : 
+    2258              :       __is.flags(__flags);
+    2259              :       return __is;
+    2260              :     }
+    2261              : 
+    2262              : 
+    2263              :   template<typename _RealType>
+    2264              :     template<typename _ForwardIterator,
+    2265              :              typename _UniformRandomNumberGenerator>
+    2266              :       void
+    2267              :       std::student_t_distribution<_RealType>::
+    2268              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    2269              :                       _UniformRandomNumberGenerator& __urng)
+    2270              :       {
+    2271              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2272              :         while (__f != __t)
+    2273              :           *__f++ = _M_nd(__urng) * std::sqrt(n() / _M_gd(__urng));
+    2274              :       }
+    2275              : 
+    2276              :   template<typename _RealType>
+    2277              :     template<typename _ForwardIterator,
+    2278              :              typename _UniformRandomNumberGenerator>
+    2279              :       void
+    2280              :       std::student_t_distribution<_RealType>::
+    2281              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    2282              :                       _UniformRandomNumberGenerator& __urng,
+    2283              :                       const param_type& __p)
+    2284              :       {
+    2285              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2286              :         typename std::gamma_distribution<result_type>::param_type
+    2287              :           __p2(__p.n() / 2, 2);
+    2288              :         while (__f != __t)
+    2289              :           *__f++ =  _M_nd(__urng) * std::sqrt(__p.n() / _M_gd(__urng, __p2));
+    2290              :       }
+    2291              : 
+    2292              :   template<typename _RealType, typename _CharT, typename _Traits>
+    2293              :     std::basic_ostream<_CharT, _Traits>&
+    2294              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    2295              :                const student_t_distribution<_RealType>& __x)
+    2296              :     {
+    2297              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+    2298              : 
+    2299              :       const typename __ios_base::fmtflags __flags = __os.flags();
+    2300              :       const _CharT __fill = __os.fill();
+    2301              :       const std::streamsize __precision = __os.precision();
+    2302              :       const _CharT __space = __os.widen(' ');
+    2303              :       __os.flags(__ios_base::scientific | __ios_base::left);
+    2304              :       __os.fill(__space);
+    2305              :       __os.precision(std::numeric_limits<_RealType>::max_digits10);
+    2306              : 
+    2307              :       __os << __x.n() << __space << __x._M_nd << __space << __x._M_gd;
+    2308              : 
+    2309              :       __os.flags(__flags);
+    2310              :       __os.fill(__fill);
+    2311              :       __os.precision(__precision);
+    2312              :       return __os;
+    2313              :     }
+    2314              : 
+    2315              :   template<typename _RealType, typename _CharT, typename _Traits>
+    2316              :     std::basic_istream<_CharT, _Traits>&
+    2317              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    2318              :                student_t_distribution<_RealType>& __x)
+    2319              :     {
+    2320              :       using param_type
+    2321              :         = typename student_t_distribution<_RealType>::param_type;
+    2322              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+    2323              : 
+    2324              :       const typename __ios_base::fmtflags __flags = __is.flags();
+    2325              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+    2326              : 
+    2327              :       _RealType __n;
+    2328              :       if (__is >> __n >> __x._M_nd >> __x._M_gd)
+    2329              :         __x.param(param_type(__n));
+    2330              : 
+    2331              :       __is.flags(__flags);
+    2332              :       return __is;
+    2333              :     }
+    2334              : 
+    2335              : 
+    2336              :   template<typename _RealType>
+    2337              :     void
+    2338              :     gamma_distribution<_RealType>::param_type::
+    2339              :     _M_initialize()
+    2340              :     {
+    2341              :       _M_malpha = _M_alpha < 1.0 ? _M_alpha + _RealType(1.0) : _M_alpha;
+    2342              : 
+    2343              :       const _RealType __a1 = _M_malpha - _RealType(1.0) / _RealType(3.0);
+    2344              :       _M_a2 = _RealType(1.0) / std::sqrt(_RealType(9.0) * __a1);
+    2345              :     }
+    2346              : 
+    2347              :   /**
+    2348              :    * Marsaglia, G. and Tsang, W. W.
+    2349              :    * "A Simple Method for Generating Gamma Variables"
+    2350              :    * ACM Transactions on Mathematical Software, 26, 3, 363-372, 2000.
+    2351              :    */
+    2352              :   template<typename _RealType>
+    2353              :     template<typename _UniformRandomNumberGenerator>
+    2354              :       typename gamma_distribution<_RealType>::result_type
+    2355              :       gamma_distribution<_RealType>::
+    2356              :       operator()(_UniformRandomNumberGenerator& __urng,
+    2357              :                  const param_type& __param)
+    2358              :       {
+    2359              :         __detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
+    2360              :           __aurng(__urng);
+    2361              : 
+    2362              :         result_type __u, __v, __n;
+    2363              :         const result_type __a1 = (__param._M_malpha
+    2364              :                                   - _RealType(1.0) / _RealType(3.0));
+    2365              : 
+    2366              :         do
+    2367              :           {
+    2368              :             do
+    2369              :               {
+    2370              :                 __n = _M_nd(__urng);
+    2371              :                 __v = result_type(1.0) + __param._M_a2 * __n; 
+    2372              :               }
+    2373              :             while (__v <= 0.0);
+    2374              : 
+    2375              :             __v = __v * __v * __v;
+    2376              :             __u = __aurng();
+    2377              :           }
+    2378              :         while (__u > result_type(1.0) - 0.0331 * __n * __n * __n * __n
+    2379              :                && (std::log(__u) > (0.5 * __n * __n + __a1
+    2380              :                                     * (1.0 - __v + std::log(__v)))));
+    2381              : 
+    2382              :         if (__param.alpha() == __param._M_malpha)
+    2383              :           return __a1 * __v * __param.beta();
+    2384              :         else
+    2385              :           {
+    2386              :             do
+    2387              :               __u = __aurng();
+    2388              :             while (__u == 0.0);
+    2389              :             
+    2390              :             return (std::pow(__u, result_type(1.0) / __param.alpha())
+    2391              :                     * __a1 * __v * __param.beta());
+    2392              :           }
+    2393              :       }
+    2394              : 
+    2395              :   template<typename _RealType>
+    2396              :     template<typename _ForwardIterator,
+    2397              :              typename _UniformRandomNumberGenerator>
+    2398              :       void
+    2399              :       gamma_distribution<_RealType>::
+    2400              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    2401              :                       _UniformRandomNumberGenerator& __urng,
+    2402              :                       const param_type& __param)
+    2403              :       {
+    2404              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2405              :         __detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
+    2406              :           __aurng(__urng);
+    2407              : 
+    2408              :         result_type __u, __v, __n;
+    2409              :         const result_type __a1 = (__param._M_malpha
+    2410              :                                   - _RealType(1.0) / _RealType(3.0));
+    2411              : 
+    2412              :         if (__param.alpha() == __param._M_malpha)
+    2413              :           while (__f != __t)
+    2414              :             {
+    2415              :               do
+    2416              :                 {
+    2417              :                   do
+    2418              :                     {
+    2419              :                       __n = _M_nd(__urng);
+    2420              :                       __v = result_type(1.0) + __param._M_a2 * __n;
+    2421              :                     }
+    2422              :                   while (__v <= 0.0);
+    2423              : 
+    2424              :                   __v = __v * __v * __v;
+    2425              :                   __u = __aurng();
+    2426              :                 }
+    2427              :               while (__u > result_type(1.0) - 0.0331 * __n * __n * __n * __n
+    2428              :                      && (std::log(__u) > (0.5 * __n * __n + __a1
+    2429              :                                           * (1.0 - __v + std::log(__v)))));
+    2430              : 
+    2431              :               *__f++ = __a1 * __v * __param.beta();
+    2432              :             }
+    2433              :         else
+    2434              :           while (__f != __t)
+    2435              :             {
+    2436              :               do
+    2437              :                 {
+    2438              :                   do
+    2439              :                     {
+    2440              :                       __n = _M_nd(__urng);
+    2441              :                       __v = result_type(1.0) + __param._M_a2 * __n;
+    2442              :                     }
+    2443              :                   while (__v <= 0.0);
+    2444              : 
+    2445              :                   __v = __v * __v * __v;
+    2446              :                   __u = __aurng();
+    2447              :                 }
+    2448              :               while (__u > result_type(1.0) - 0.0331 * __n * __n * __n * __n
+    2449              :                      && (std::log(__u) > (0.5 * __n * __n + __a1
+    2450              :                                           * (1.0 - __v + std::log(__v)))));
+    2451              : 
+    2452              :               do
+    2453              :                 __u = __aurng();
+    2454              :               while (__u == 0.0);
+    2455              : 
+    2456              :               *__f++ = (std::pow(__u, result_type(1.0) / __param.alpha())
+    2457              :                         * __a1 * __v * __param.beta());
+    2458              :             }
+    2459              :       }
+    2460              : 
+    2461              :   template<typename _RealType, typename _CharT, typename _Traits>
+    2462              :     std::basic_ostream<_CharT, _Traits>&
+    2463              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    2464              :                const gamma_distribution<_RealType>& __x)
+    2465              :     {
+    2466              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+    2467              : 
+    2468              :       const typename __ios_base::fmtflags __flags = __os.flags();
+    2469              :       const _CharT __fill = __os.fill();
+    2470              :       const std::streamsize __precision = __os.precision();
+    2471              :       const _CharT __space = __os.widen(' ');
+    2472              :       __os.flags(__ios_base::scientific | __ios_base::left);
+    2473              :       __os.fill(__space);
+    2474              :       __os.precision(std::numeric_limits<_RealType>::max_digits10);
+    2475              : 
+    2476              :       __os << __x.alpha() << __space << __x.beta()
+    2477              :            << __space << __x._M_nd;
+    2478              : 
+    2479              :       __os.flags(__flags);
+    2480              :       __os.fill(__fill);
+    2481              :       __os.precision(__precision);
+    2482              :       return __os;
+    2483              :     }
+    2484              : 
+    2485              :   template<typename _RealType, typename _CharT, typename _Traits>
+    2486              :     std::basic_istream<_CharT, _Traits>&
+    2487              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    2488              :                gamma_distribution<_RealType>& __x)
+    2489              :     {
+    2490              :       using param_type = typename gamma_distribution<_RealType>::param_type;
+    2491              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+    2492              : 
+    2493              :       const typename __ios_base::fmtflags __flags = __is.flags();
+    2494              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+    2495              : 
+    2496              :       _RealType __alpha_val, __beta_val;
+    2497              :       if (__is >> __alpha_val >> __beta_val >> __x._M_nd)
+    2498              :         __x.param(param_type(__alpha_val, __beta_val));
+    2499              : 
+    2500              :       __is.flags(__flags);
+    2501              :       return __is;
+    2502              :     }
+    2503              : 
+    2504              : 
+    2505              :   template<typename _RealType>
+    2506              :     template<typename _UniformRandomNumberGenerator>
+    2507              :       typename weibull_distribution<_RealType>::result_type
+    2508              :       weibull_distribution<_RealType>::
+    2509              :       operator()(_UniformRandomNumberGenerator& __urng,
+    2510              :                  const param_type& __p)
+    2511              :       {
+    2512              :         __detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
+    2513              :           __aurng(__urng);
+    2514              :         return __p.b() * std::pow(-std::log(result_type(1) - __aurng()),
+    2515              :                                   result_type(1) / __p.a());
+    2516              :       }
+    2517              : 
+    2518              :   template<typename _RealType>
+    2519              :     template<typename _ForwardIterator,
+    2520              :              typename _UniformRandomNumberGenerator>
+    2521              :       void
+    2522              :       weibull_distribution<_RealType>::
+    2523              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    2524              :                       _UniformRandomNumberGenerator& __urng,
+    2525              :                       const param_type& __p)
+    2526              :       {
+    2527              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2528              :         __detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
+    2529              :           __aurng(__urng);
+    2530              :         auto __inv_a = result_type(1) / __p.a();
+    2531              : 
+    2532              :         while (__f != __t)
+    2533              :           *__f++ = __p.b() * std::pow(-std::log(result_type(1) - __aurng()),
+    2534              :                                       __inv_a);
+    2535              :       }
+    2536              : 
+    2537              :   template<typename _RealType, typename _CharT, typename _Traits>
+    2538              :     std::basic_ostream<_CharT, _Traits>&
+    2539              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    2540              :                const weibull_distribution<_RealType>& __x)
+    2541              :     {
+    2542              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+    2543              : 
+    2544              :       const typename __ios_base::fmtflags __flags = __os.flags();
+    2545              :       const _CharT __fill = __os.fill();
+    2546              :       const std::streamsize __precision = __os.precision();
+    2547              :       const _CharT __space = __os.widen(' ');
+    2548              :       __os.flags(__ios_base::scientific | __ios_base::left);
+    2549              :       __os.fill(__space);
+    2550              :       __os.precision(std::numeric_limits<_RealType>::max_digits10);
+    2551              : 
+    2552              :       __os << __x.a() << __space << __x.b();
+    2553              : 
+    2554              :       __os.flags(__flags);
+    2555              :       __os.fill(__fill);
+    2556              :       __os.precision(__precision);
+    2557              :       return __os;
+    2558              :     }
+    2559              : 
+    2560              :   template<typename _RealType, typename _CharT, typename _Traits>
+    2561              :     std::basic_istream<_CharT, _Traits>&
+    2562              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    2563              :                weibull_distribution<_RealType>& __x)
+    2564              :     {
+    2565              :       using param_type = typename weibull_distribution<_RealType>::param_type;
+    2566              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+    2567              : 
+    2568              :       const typename __ios_base::fmtflags __flags = __is.flags();
+    2569              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+    2570              : 
+    2571              :       _RealType __a, __b;
+    2572              :       if (__is >> __a >> __b)
+    2573              :         __x.param(param_type(__a, __b));
+    2574              : 
+    2575              :       __is.flags(__flags);
+    2576              :       return __is;
+    2577              :     }
+    2578              : 
+    2579              : 
+    2580              :   template<typename _RealType>
+    2581              :     template<typename _UniformRandomNumberGenerator>
+    2582              :       typename extreme_value_distribution<_RealType>::result_type
+    2583              :       extreme_value_distribution<_RealType>::
+    2584              :       operator()(_UniformRandomNumberGenerator& __urng,
+    2585              :                  const param_type& __p)
+    2586              :       {
+    2587              :         __detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
+    2588              :           __aurng(__urng);
+    2589              :         return __p.a() - __p.b() * std::log(-std::log(result_type(1)
+    2590              :                                                       - __aurng()));
+    2591              :       }
+    2592              : 
+    2593              :   template<typename _RealType>
+    2594              :     template<typename _ForwardIterator,
+    2595              :              typename _UniformRandomNumberGenerator>
+    2596              :       void
+    2597              :       extreme_value_distribution<_RealType>::
+    2598              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    2599              :                       _UniformRandomNumberGenerator& __urng,
+    2600              :                       const param_type& __p)
+    2601              :       {
+    2602              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2603              :         __detail::_Adaptor<_UniformRandomNumberGenerator, result_type>
+    2604              :           __aurng(__urng);
+    2605              : 
+    2606              :         while (__f != __t)
+    2607              :           *__f++ = __p.a() - __p.b() * std::log(-std::log(result_type(1)
+    2608              :                                                           - __aurng()));
+    2609              :       }
+    2610              : 
+    2611              :   template<typename _RealType, typename _CharT, typename _Traits>
+    2612              :     std::basic_ostream<_CharT, _Traits>&
+    2613              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    2614              :                const extreme_value_distribution<_RealType>& __x)
+    2615              :     {
+    2616              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+    2617              : 
+    2618              :       const typename __ios_base::fmtflags __flags = __os.flags();
+    2619              :       const _CharT __fill = __os.fill();
+    2620              :       const std::streamsize __precision = __os.precision();
+    2621              :       const _CharT __space = __os.widen(' ');
+    2622              :       __os.flags(__ios_base::scientific | __ios_base::left);
+    2623              :       __os.fill(__space);
+    2624              :       __os.precision(std::numeric_limits<_RealType>::max_digits10);
+    2625              : 
+    2626              :       __os << __x.a() << __space << __x.b();
+    2627              : 
+    2628              :       __os.flags(__flags);
+    2629              :       __os.fill(__fill);
+    2630              :       __os.precision(__precision);
+    2631              :       return __os;
+    2632              :     }
+    2633              : 
+    2634              :   template<typename _RealType, typename _CharT, typename _Traits>
+    2635              :     std::basic_istream<_CharT, _Traits>&
+    2636              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    2637              :                extreme_value_distribution<_RealType>& __x)
+    2638              :     {
+    2639              :       using param_type
+    2640              :         = typename extreme_value_distribution<_RealType>::param_type;
+    2641              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+    2642              : 
+    2643              :       const typename __ios_base::fmtflags __flags = __is.flags();
+    2644              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+    2645              : 
+    2646              :       _RealType __a, __b;
+    2647              :       if (__is >> __a >> __b)
+    2648              :         __x.param(param_type(__a, __b));
+    2649              : 
+    2650              :       __is.flags(__flags);
+    2651              :       return __is;
+    2652              :     }
+    2653              : 
+    2654              : 
+    2655              :   template<typename _IntType>
+    2656              :     void
+    2657              :     discrete_distribution<_IntType>::param_type::
+    2658              :     _M_initialize()
+    2659              :     {
+    2660              :       if (_M_prob.size() < 2)
+    2661              :         {
+    2662              :           _M_prob.clear();
+    2663              :           return;
+    2664              :         }
+    2665              : 
+    2666              :       const double __sum = std::accumulate(_M_prob.begin(),
+    2667              :                                            _M_prob.end(), 0.0);
+    2668              :       __glibcxx_assert(__sum > 0);
+    2669              :       // Now normalize the probabilites.
+    2670              :       __detail::__normalize(_M_prob.begin(), _M_prob.end(), _M_prob.begin(),
+    2671              :                             __sum);
+    2672              :       // Accumulate partial sums.
+    2673              :       _M_cp.reserve(_M_prob.size());
+    2674              :       std::partial_sum(_M_prob.begin(), _M_prob.end(),
+    2675              :                        std::back_inserter(_M_cp));
+    2676              :       // Make sure the last cumulative probability is one.
+    2677              :       _M_cp[_M_cp.size() - 1] = 1.0;
+    2678              :     }
+    2679              : 
+    2680              :   template<typename _IntType>
+    2681              :     template<typename _Func>
+    2682              :       discrete_distribution<_IntType>::param_type::
+    2683              :       param_type(size_t __nw, double __xmin, double __xmax, _Func __fw)
+    2684              :       : _M_prob(), _M_cp()
+    2685              :       {
+    2686              :         const size_t __n = __nw == 0 ? 1 : __nw;
+    2687              :         const double __delta = (__xmax - __xmin) / __n;
+    2688              : 
+    2689              :         _M_prob.reserve(__n);
+    2690              :         for (size_t __k = 0; __k < __nw; ++__k)
+    2691              :           _M_prob.push_back(__fw(__xmin + __k * __delta + 0.5 * __delta));
+    2692              : 
+    2693              :         _M_initialize();
+    2694              :       }
+    2695              : 
+    2696              :   template<typename _IntType>
+    2697              :     template<typename _UniformRandomNumberGenerator>
+    2698              :       typename discrete_distribution<_IntType>::result_type
+    2699              :       discrete_distribution<_IntType>::
+    2700              :       operator()(_UniformRandomNumberGenerator& __urng,
+    2701              :                  const param_type& __param)
+    2702              :       {
+    2703              :         if (__param._M_cp.empty())
+    2704              :           return result_type(0);
+    2705              : 
+    2706              :         __detail::_Adaptor<_UniformRandomNumberGenerator, double>
+    2707              :           __aurng(__urng);
+    2708              : 
+    2709              :         const double __p = __aurng();
+    2710              :         auto __pos = std::lower_bound(__param._M_cp.begin(),
+    2711              :                                       __param._M_cp.end(), __p);
+    2712              : 
+    2713              :         return __pos - __param._M_cp.begin();
+    2714              :       }
+    2715              : 
+    2716              :   template<typename _IntType>
+    2717              :     template<typename _ForwardIterator,
+    2718              :              typename _UniformRandomNumberGenerator>
+    2719              :       void
+    2720              :       discrete_distribution<_IntType>::
+    2721              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    2722              :                       _UniformRandomNumberGenerator& __urng,
+    2723              :                       const param_type& __param)
+    2724              :       {
+    2725              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2726              : 
+    2727              :         if (__param._M_cp.empty())
+    2728              :           {
+    2729              :             while (__f != __t)
+    2730              :               *__f++ = result_type(0);
+    2731              :             return;
+    2732              :           }
+    2733              : 
+    2734              :         __detail::_Adaptor<_UniformRandomNumberGenerator, double>
+    2735              :           __aurng(__urng);
+    2736              : 
+    2737              :         while (__f != __t)
+    2738              :           {
+    2739              :             const double __p = __aurng();
+    2740              :             auto __pos = std::lower_bound(__param._M_cp.begin(),
+    2741              :                                           __param._M_cp.end(), __p);
+    2742              : 
+    2743              :             *__f++ = __pos - __param._M_cp.begin();
+    2744              :           }
+    2745              :       }
+    2746              : 
+    2747              :   template<typename _IntType, typename _CharT, typename _Traits>
+    2748              :     std::basic_ostream<_CharT, _Traits>&
+    2749              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    2750              :                const discrete_distribution<_IntType>& __x)
+    2751              :     {
+    2752              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+    2753              : 
+    2754              :       const typename __ios_base::fmtflags __flags = __os.flags();
+    2755              :       const _CharT __fill = __os.fill();
+    2756              :       const std::streamsize __precision = __os.precision();
+    2757              :       const _CharT __space = __os.widen(' ');
+    2758              :       __os.flags(__ios_base::scientific | __ios_base::left);
+    2759              :       __os.fill(__space);
+    2760              :       __os.precision(std::numeric_limits<double>::max_digits10);
+    2761              : 
+    2762              :       std::vector<double> __prob = __x.probabilities();
+    2763              :       __os << __prob.size();
+    2764              :       for (auto __dit = __prob.begin(); __dit != __prob.end(); ++__dit)
+    2765              :         __os << __space << *__dit;
+    2766              : 
+    2767              :       __os.flags(__flags);
+    2768              :       __os.fill(__fill);
+    2769              :       __os.precision(__precision);
+    2770              :       return __os;
+    2771              :     }
+    2772              : 
+    2773              : namespace __detail
+    2774              : {
+    2775              :   template<typename _ValT, typename _CharT, typename _Traits>
+    2776              :     basic_istream<_CharT, _Traits>&
+    2777              :     __extract_params(basic_istream<_CharT, _Traits>& __is,
+    2778              :                      vector<_ValT>& __vals, size_t __n)
+    2779              :     {
+    2780              :       __vals.reserve(__n);
+    2781              :       while (__n--)
+    2782              :         {
+    2783              :           _ValT __val;
+    2784              :           if (__is >> __val)
+    2785              :             __vals.push_back(__val);
+    2786              :           else
+    2787              :             break;
+    2788              :         }
+    2789              :       return __is;
+    2790              :     }
+    2791              : } // namespace __detail
+    2792              : 
+    2793              :   template<typename _IntType, typename _CharT, typename _Traits>
+    2794              :     std::basic_istream<_CharT, _Traits>&
+    2795              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    2796              :                discrete_distribution<_IntType>& __x)
+    2797              :     {
+    2798              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+    2799              : 
+    2800              :       const typename __ios_base::fmtflags __flags = __is.flags();
+    2801              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+    2802              : 
+    2803              :       size_t __n;
+    2804              :       if (__is >> __n)
+    2805              :         {
+    2806              :           std::vector<double> __prob_vec;
+    2807              :           if (__detail::__extract_params(__is, __prob_vec, __n))
+    2808              :             __x.param({__prob_vec.begin(), __prob_vec.end()});
+    2809              :         }
+    2810              : 
+    2811              :       __is.flags(__flags);
+    2812              :       return __is;
+    2813              :     }
+    2814              : 
+    2815              : 
+    2816              :   template<typename _RealType>
+    2817              :     void
+    2818              :     piecewise_constant_distribution<_RealType>::param_type::
+    2819              :     _M_initialize()
+    2820              :     {
+    2821              :       if (_M_int.size() < 2
+    2822              :           || (_M_int.size() == 2
+    2823              :               && _M_int[0] == _RealType(0)
+    2824              :               && _M_int[1] == _RealType(1)))
+    2825              :         {
+    2826              :           _M_int.clear();
+    2827              :           _M_den.clear();
+    2828              :           return;
+    2829              :         }
+    2830              : 
+    2831              :       const double __sum = std::accumulate(_M_den.begin(),
+    2832              :                                            _M_den.end(), 0.0);
+    2833              :       __glibcxx_assert(__sum > 0);
+    2834              : 
+    2835              :       __detail::__normalize(_M_den.begin(), _M_den.end(), _M_den.begin(),
+    2836              :                             __sum);
+    2837              : 
+    2838              :       _M_cp.reserve(_M_den.size());
+    2839              :       std::partial_sum(_M_den.begin(), _M_den.end(),
+    2840              :                        std::back_inserter(_M_cp));
+    2841              : 
+    2842              :       // Make sure the last cumulative probability is one.
+    2843              :       _M_cp[_M_cp.size() - 1] = 1.0;
+    2844              : 
+    2845              :       for (size_t __k = 0; __k < _M_den.size(); ++__k)
+    2846              :         _M_den[__k] /= _M_int[__k + 1] - _M_int[__k];
+    2847              :     }
+    2848              : 
+    2849              :   template<typename _RealType>
+    2850              :     template<typename _InputIteratorB, typename _InputIteratorW>
+    2851              :       piecewise_constant_distribution<_RealType>::param_type::
+    2852              :       param_type(_InputIteratorB __bbegin,
+    2853              :                  _InputIteratorB __bend,
+    2854              :                  _InputIteratorW __wbegin)
+    2855              :       : _M_int(), _M_den(), _M_cp()
+    2856              :       {
+    2857              :         if (__bbegin != __bend)
+    2858              :           {
+    2859              :             for (;;)
+    2860              :               {
+    2861              :                 _M_int.push_back(*__bbegin);
+    2862              :                 ++__bbegin;
+    2863              :                 if (__bbegin == __bend)
+    2864              :                   break;
+    2865              : 
+    2866              :                 _M_den.push_back(*__wbegin);
+    2867              :                 ++__wbegin;
+    2868              :               }
+    2869              :           }
+    2870              : 
+    2871              :         _M_initialize();
+    2872              :       }
+    2873              : 
+    2874              :   template<typename _RealType>
+    2875              :     template<typename _Func>
+    2876              :       piecewise_constant_distribution<_RealType>::param_type::
+    2877              :       param_type(initializer_list<_RealType> __bl, _Func __fw)
+    2878              :       : _M_int(), _M_den(), _M_cp()
+    2879              :       {
+    2880              :         _M_int.reserve(__bl.size());
+    2881              :         for (auto __biter = __bl.begin(); __biter != __bl.end(); ++__biter)
+    2882              :           _M_int.push_back(*__biter);
+    2883              : 
+    2884              :         _M_den.reserve(_M_int.size() - 1);
+    2885              :         for (size_t __k = 0; __k < _M_int.size() - 1; ++__k)
+    2886              :           _M_den.push_back(__fw(0.5 * (_M_int[__k + 1] + _M_int[__k])));
+    2887              : 
+    2888              :         _M_initialize();
+    2889              :       }
+    2890              : 
+    2891              :   template<typename _RealType>
+    2892              :     template<typename _Func>
+    2893              :       piecewise_constant_distribution<_RealType>::param_type::
+    2894              :       param_type(size_t __nw, _RealType __xmin, _RealType __xmax, _Func __fw)
+    2895              :       : _M_int(), _M_den(), _M_cp()
+    2896              :       {
+    2897              :         const size_t __n = __nw == 0 ? 1 : __nw;
+    2898              :         const _RealType __delta = (__xmax - __xmin) / __n;
+    2899              : 
+    2900              :         _M_int.reserve(__n + 1);
+    2901              :         for (size_t __k = 0; __k <= __nw; ++__k)
+    2902              :           _M_int.push_back(__xmin + __k * __delta);
+    2903              : 
+    2904              :         _M_den.reserve(__n);
+    2905              :         for (size_t __k = 0; __k < __nw; ++__k)
+    2906              :           _M_den.push_back(__fw(_M_int[__k] + 0.5 * __delta));
+    2907              : 
+    2908              :         _M_initialize();
+    2909              :       }
+    2910              : 
+    2911              :   template<typename _RealType>
+    2912              :     template<typename _UniformRandomNumberGenerator>
+    2913              :       typename piecewise_constant_distribution<_RealType>::result_type
+    2914              :       piecewise_constant_distribution<_RealType>::
+    2915              :       operator()(_UniformRandomNumberGenerator& __urng,
+    2916              :                  const param_type& __param)
+    2917              :       {
+    2918              :         __detail::_Adaptor<_UniformRandomNumberGenerator, double>
+    2919              :           __aurng(__urng);
+    2920              : 
+    2921              :         const double __p = __aurng();
+    2922              :         if (__param._M_cp.empty())
+    2923              :           return __p;
+    2924              : 
+    2925              :         auto __pos = std::lower_bound(__param._M_cp.begin(),
+    2926              :                                       __param._M_cp.end(), __p);
+    2927              :         const size_t __i = __pos - __param._M_cp.begin();
+    2928              : 
+    2929              :         const double __pref = __i > 0 ? __param._M_cp[__i - 1] : 0.0;
+    2930              : 
+    2931              :         return __param._M_int[__i] + (__p - __pref) / __param._M_den[__i];
+    2932              :       }
+    2933              : 
+    2934              :   template<typename _RealType>
+    2935              :     template<typename _ForwardIterator,
+    2936              :              typename _UniformRandomNumberGenerator>
+    2937              :       void
+    2938              :       piecewise_constant_distribution<_RealType>::
+    2939              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    2940              :                       _UniformRandomNumberGenerator& __urng,
+    2941              :                       const param_type& __param)
+    2942              :       {
+    2943              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2944              :         __detail::_Adaptor<_UniformRandomNumberGenerator, double>
+    2945              :           __aurng(__urng);
+    2946              : 
+    2947              :         if (__param._M_cp.empty())
+    2948              :           {
+    2949              :             while (__f != __t)
+    2950              :               *__f++ = __aurng();
+    2951              :             return;
+    2952              :           }
+    2953              : 
+    2954              :         while (__f != __t)
+    2955              :           {
+    2956              :             const double __p = __aurng();
+    2957              : 
+    2958              :             auto __pos = std::lower_bound(__param._M_cp.begin(),
+    2959              :                                           __param._M_cp.end(), __p);
+    2960              :             const size_t __i = __pos - __param._M_cp.begin();
+    2961              : 
+    2962              :             const double __pref = __i > 0 ? __param._M_cp[__i - 1] : 0.0;
+    2963              : 
+    2964              :             *__f++ = (__param._M_int[__i]
+    2965              :                       + (__p - __pref) / __param._M_den[__i]);
+    2966              :           }
+    2967              :       }
+    2968              : 
+    2969              :   template<typename _RealType, typename _CharT, typename _Traits>
+    2970              :     std::basic_ostream<_CharT, _Traits>&
+    2971              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    2972              :                const piecewise_constant_distribution<_RealType>& __x)
+    2973              :     {
+    2974              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+    2975              : 
+    2976              :       const typename __ios_base::fmtflags __flags = __os.flags();
+    2977              :       const _CharT __fill = __os.fill();
+    2978              :       const std::streamsize __precision = __os.precision();
+    2979              :       const _CharT __space = __os.widen(' ');
+    2980              :       __os.flags(__ios_base::scientific | __ios_base::left);
+    2981              :       __os.fill(__space);
+    2982              :       __os.precision(std::numeric_limits<_RealType>::max_digits10);
+    2983              : 
+    2984              :       std::vector<_RealType> __int = __x.intervals();
+    2985              :       __os << __int.size() - 1;
+    2986              : 
+    2987              :       for (auto __xit = __int.begin(); __xit != __int.end(); ++__xit)
+    2988              :         __os << __space << *__xit;
+    2989              : 
+    2990              :       std::vector<double> __den = __x.densities();
+    2991              :       for (auto __dit = __den.begin(); __dit != __den.end(); ++__dit)
+    2992              :         __os << __space << *__dit;
+    2993              : 
+    2994              :       __os.flags(__flags);
+    2995              :       __os.fill(__fill);
+    2996              :       __os.precision(__precision);
+    2997              :       return __os;
+    2998              :     }
+    2999              : 
+    3000              :   template<typename _RealType, typename _CharT, typename _Traits>
+    3001              :     std::basic_istream<_CharT, _Traits>&
+    3002              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    3003              :                piecewise_constant_distribution<_RealType>& __x)
+    3004              :     {
+    3005              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+    3006              : 
+    3007              :       const typename __ios_base::fmtflags __flags = __is.flags();
+    3008              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+    3009              : 
+    3010              :       size_t __n;
+    3011              :       if (__is >> __n)
+    3012              :         {
+    3013              :           std::vector<_RealType> __int_vec;
+    3014              :           if (__detail::__extract_params(__is, __int_vec, __n + 1))
+    3015              :             {
+    3016              :               std::vector<double> __den_vec;
+    3017              :               if (__detail::__extract_params(__is, __den_vec, __n))
+    3018              :                 {
+    3019              :                   __x.param({ __int_vec.begin(), __int_vec.end(),
+    3020              :                               __den_vec.begin() });
+    3021              :                 }
+    3022              :             }
+    3023              :         }
+    3024              : 
+    3025              :       __is.flags(__flags);
+    3026              :       return __is;
+    3027              :     }
+    3028              : 
+    3029              : 
+    3030              :   template<typename _RealType>
+    3031              :     void
+    3032              :     piecewise_linear_distribution<_RealType>::param_type::
+    3033              :     _M_initialize()
+    3034              :     {
+    3035              :       if (_M_int.size() < 2
+    3036              :           || (_M_int.size() == 2
+    3037              :               && _M_int[0] == _RealType(0)
+    3038              :               && _M_int[1] == _RealType(1)
+    3039              :               && _M_den[0] == _M_den[1]))
+    3040              :         {
+    3041              :           _M_int.clear();
+    3042              :           _M_den.clear();
+    3043              :           return;
+    3044              :         }
+    3045              : 
+    3046              :       double __sum = 0.0;
+    3047              :       _M_cp.reserve(_M_int.size() - 1);
+    3048              :       _M_m.reserve(_M_int.size() - 1);
+    3049              :       for (size_t __k = 0; __k < _M_int.size() - 1; ++__k)
+    3050              :         {
+    3051              :           const _RealType __delta = _M_int[__k + 1] - _M_int[__k];
+    3052              :           __sum += 0.5 * (_M_den[__k + 1] + _M_den[__k]) * __delta;
+    3053              :           _M_cp.push_back(__sum);
+    3054              :           _M_m.push_back((_M_den[__k + 1] - _M_den[__k]) / __delta);
+    3055              :         }
+    3056              :       __glibcxx_assert(__sum > 0);
+    3057              : 
+    3058              :       //  Now normalize the densities...
+    3059              :       __detail::__normalize(_M_den.begin(), _M_den.end(), _M_den.begin(),
+    3060              :                             __sum);
+    3061              :       //  ... and partial sums... 
+    3062              :       __detail::__normalize(_M_cp.begin(), _M_cp.end(), _M_cp.begin(), __sum);
+    3063              :       //  ... and slopes.
+    3064              :       __detail::__normalize(_M_m.begin(), _M_m.end(), _M_m.begin(), __sum);
+    3065              : 
+    3066              :       //  Make sure the last cumulative probablility is one.
+    3067              :       _M_cp[_M_cp.size() - 1] = 1.0;
+    3068              :      }
+    3069              : 
+    3070              :   template<typename _RealType>
+    3071              :     template<typename _InputIteratorB, typename _InputIteratorW>
+    3072              :       piecewise_linear_distribution<_RealType>::param_type::
+    3073              :       param_type(_InputIteratorB __bbegin,
+    3074              :                  _InputIteratorB __bend,
+    3075              :                  _InputIteratorW __wbegin)
+    3076              :       : _M_int(), _M_den(), _M_cp(), _M_m()
+    3077              :       {
+    3078              :         for (; __bbegin != __bend; ++__bbegin, ++__wbegin)
+    3079              :           {
+    3080              :             _M_int.push_back(*__bbegin);
+    3081              :             _M_den.push_back(*__wbegin);
+    3082              :           }
+    3083              : 
+    3084              :         _M_initialize();
+    3085              :       }
+    3086              : 
+    3087              :   template<typename _RealType>
+    3088              :     template<typename _Func>
+    3089              :       piecewise_linear_distribution<_RealType>::param_type::
+    3090              :       param_type(initializer_list<_RealType> __bl, _Func __fw)
+    3091              :       : _M_int(), _M_den(), _M_cp(), _M_m()
+    3092              :       {
+    3093              :         _M_int.reserve(__bl.size());
+    3094              :         _M_den.reserve(__bl.size());
+    3095              :         for (auto __biter = __bl.begin(); __biter != __bl.end(); ++__biter)
+    3096              :           {
+    3097              :             _M_int.push_back(*__biter);
+    3098              :             _M_den.push_back(__fw(*__biter));
+    3099              :           }
+    3100              : 
+    3101              :         _M_initialize();
+    3102              :       }
+    3103              : 
+    3104              :   template<typename _RealType>
+    3105              :     template<typename _Func>
+    3106              :       piecewise_linear_distribution<_RealType>::param_type::
+    3107              :       param_type(size_t __nw, _RealType __xmin, _RealType __xmax, _Func __fw)
+    3108              :       : _M_int(), _M_den(), _M_cp(), _M_m()
+    3109              :       {
+    3110              :         const size_t __n = __nw == 0 ? 1 : __nw;
+    3111              :         const _RealType __delta = (__xmax - __xmin) / __n;
+    3112              : 
+    3113              :         _M_int.reserve(__n + 1);
+    3114              :         _M_den.reserve(__n + 1);
+    3115              :         for (size_t __k = 0; __k <= __nw; ++__k)
+    3116              :           {
+    3117              :             _M_int.push_back(__xmin + __k * __delta);
+    3118              :             _M_den.push_back(__fw(_M_int[__k] + __delta));
+    3119              :           }
+    3120              : 
+    3121              :         _M_initialize();
+    3122              :       }
+    3123              : 
+    3124              :   template<typename _RealType>
+    3125              :     template<typename _UniformRandomNumberGenerator>
+    3126              :       typename piecewise_linear_distribution<_RealType>::result_type
+    3127              :       piecewise_linear_distribution<_RealType>::
+    3128              :       operator()(_UniformRandomNumberGenerator& __urng,
+    3129              :                  const param_type& __param)
+    3130              :       {
+    3131              :         __detail::_Adaptor<_UniformRandomNumberGenerator, double>
+    3132              :           __aurng(__urng);
+    3133              : 
+    3134              :         const double __p = __aurng();
+    3135              :         if (__param._M_cp.empty())
+    3136              :           return __p;
+    3137              : 
+    3138              :         auto __pos = std::lower_bound(__param._M_cp.begin(),
+    3139              :                                       __param._M_cp.end(), __p);
+    3140              :         const size_t __i = __pos - __param._M_cp.begin();
+    3141              : 
+    3142              :         const double __pref = __i > 0 ? __param._M_cp[__i - 1] : 0.0;
+    3143              : 
+    3144              :         const double __a = 0.5 * __param._M_m[__i];
+    3145              :         const double __b = __param._M_den[__i];
+    3146              :         const double __cm = __p - __pref;
+    3147              : 
+    3148              :         _RealType __x = __param._M_int[__i];
+    3149              :         if (__a == 0)
+    3150              :           __x += __cm / __b;
+    3151              :         else
+    3152              :           {
+    3153              :             const double __d = __b * __b + 4.0 * __a * __cm;
+    3154              :             __x += 0.5 * (std::sqrt(__d) - __b) / __a;
+    3155              :           }
+    3156              : 
+    3157              :         return __x;
+    3158              :       }
+    3159              : 
+    3160              :   template<typename _RealType>
+    3161              :     template<typename _ForwardIterator,
+    3162              :              typename _UniformRandomNumberGenerator>
+    3163              :       void
+    3164              :       piecewise_linear_distribution<_RealType>::
+    3165              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+    3166              :                       _UniformRandomNumberGenerator& __urng,
+    3167              :                       const param_type& __param)
+    3168              :       {
+    3169              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    3170              :         // We could duplicate everything from operator()...
+    3171              :         while (__f != __t)
+    3172              :           *__f++ = this->operator()(__urng, __param);
+    3173              :       }
+    3174              : 
+    3175              :   template<typename _RealType, typename _CharT, typename _Traits>
+    3176              :     std::basic_ostream<_CharT, _Traits>&
+    3177              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    3178              :                const piecewise_linear_distribution<_RealType>& __x)
+    3179              :     {
+    3180              :       using __ios_base = typename basic_ostream<_CharT, _Traits>::ios_base;
+    3181              : 
+    3182              :       const typename __ios_base::fmtflags __flags = __os.flags();
+    3183              :       const _CharT __fill = __os.fill();
+    3184              :       const std::streamsize __precision = __os.precision();
+    3185              :       const _CharT __space = __os.widen(' ');
+    3186              :       __os.flags(__ios_base::scientific | __ios_base::left);
+    3187              :       __os.fill(__space);
+    3188              :       __os.precision(std::numeric_limits<_RealType>::max_digits10);
+    3189              : 
+    3190              :       std::vector<_RealType> __int = __x.intervals();
+    3191              :       __os << __int.size() - 1;
+    3192              : 
+    3193              :       for (auto __xit = __int.begin(); __xit != __int.end(); ++__xit)
+    3194              :         __os << __space << *__xit;
+    3195              : 
+    3196              :       std::vector<double> __den = __x.densities();
+    3197              :       for (auto __dit = __den.begin(); __dit != __den.end(); ++__dit)
+    3198              :         __os << __space << *__dit;
+    3199              : 
+    3200              :       __os.flags(__flags);
+    3201              :       __os.fill(__fill);
+    3202              :       __os.precision(__precision);
+    3203              :       return __os;
+    3204              :     }
+    3205              : 
+    3206              :   template<typename _RealType, typename _CharT, typename _Traits>
+    3207              :     std::basic_istream<_CharT, _Traits>&
+    3208              :     operator>>(std::basic_istream<_CharT, _Traits>& __is,
+    3209              :                piecewise_linear_distribution<_RealType>& __x)
+    3210              :     {
+    3211              :       using __ios_base = typename basic_istream<_CharT, _Traits>::ios_base;
+    3212              : 
+    3213              :       const typename __ios_base::fmtflags __flags = __is.flags();
+    3214              :       __is.flags(__ios_base::dec | __ios_base::skipws);
+    3215              : 
+    3216              :       size_t __n;
+    3217              :       if (__is >> __n)
+    3218              :         {
+    3219              :           vector<_RealType> __int_vec;
+    3220              :           if (__detail::__extract_params(__is, __int_vec, __n + 1))
+    3221              :             {
+    3222              :               vector<double> __den_vec;
+    3223              :               if (__detail::__extract_params(__is, __den_vec, __n + 1))
+    3224              :                 {
+    3225              :                   __x.param({ __int_vec.begin(), __int_vec.end(),
+    3226              :                               __den_vec.begin() });
+    3227              :                 }
+    3228              :             }
+    3229              :         }
+    3230              :       __is.flags(__flags);
+    3231              :       return __is;
+    3232              :     }
+    3233              : 
+    3234              : 
+    3235              :   template<typename _IntType, typename>
+    3236              :     seed_seq::seed_seq(std::initializer_list<_IntType> __il)
+    3237              :     {
+    3238              :       _M_v.reserve(__il.size());
+    3239              :       for (auto __iter = __il.begin(); __iter != __il.end(); ++__iter)
+    3240              :         _M_v.push_back(__detail::__mod<result_type,
+    3241              :                        __detail::_Shift<result_type, 32>::__value>(*__iter));
+    3242              :     }
+    3243              : 
+    3244              :   template<typename _InputIterator>
+    3245              :     seed_seq::seed_seq(_InputIterator __begin, _InputIterator __end)
+    3246              :     {
+    3247              :       if _GLIBCXX17_CONSTEXPR (__is_random_access_iter<_InputIterator>::value)
+    3248              :         _M_v.reserve(std::distance(__begin, __end));
+    3249              : 
+    3250              :       for (_InputIterator __iter = __begin; __iter != __end; ++__iter)
+    3251              :         _M_v.push_back(__detail::__mod<result_type,
+    3252              :                        __detail::_Shift<result_type, 32>::__value>(*__iter));
+    3253              :     }
+    3254              : 
+    3255              :   template<typename _RandomAccessIterator>
+    3256              :     void
+    3257              :     seed_seq::generate(_RandomAccessIterator __begin,
+    3258              :                        _RandomAccessIterator __end)
+    3259              :     {
+    3260              :       typedef typename iterator_traits<_RandomAccessIterator>::value_type
+    3261              :         _Type;
+    3262              : 
+    3263              :       if (__begin == __end)
+    3264              :         return;
+    3265              : 
+    3266              :       std::fill(__begin, __end, _Type(0x8b8b8b8bu));
+    3267              : 
+    3268              :       const size_t __n = __end - __begin;
+    3269              :       const size_t __s = _M_v.size();
+    3270              :       const size_t __t = (__n >= 623) ? 11
+    3271              :                        : (__n >=  68) ? 7
+    3272              :                        : (__n >=  39) ? 5
+    3273              :                        : (__n >=   7) ? 3
+    3274              :                        : (__n - 1) / 2;
+    3275              :       const size_t __p = (__n - __t) / 2;
+    3276              :       const size_t __q = __p + __t;
+    3277              :       const size_t __m = std::max(size_t(__s + 1), __n);
+    3278              : 
+    3279              : #ifndef __UINT32_TYPE__
+    3280              :       struct _Up
+    3281              :       {
+    3282              :         _Up(uint_least32_t v) : _M_v(v & 0xffffffffu) { }
+    3283              : 
+    3284              :         operator uint_least32_t() const { return _M_v; }
+    3285              : 
+    3286              :         uint_least32_t _M_v;
+    3287              :       };
+    3288              :       using uint32_t = _Up;
+    3289              : #endif
+    3290              : 
+    3291              :       // k == 0, every element in [begin,end) equals 0x8b8b8b8bu
+    3292              :         {
+    3293              :           uint32_t __r1 = 1371501266u;
+    3294              :           uint32_t __r2 = __r1 + __s;
+    3295              :           __begin[__p] += __r1;
+    3296              :           __begin[__q] = (uint32_t)__begin[__q] + __r2;
+    3297              :           __begin[0] = __r2;
+    3298              :         }
+    3299              : 
+    3300              :       for (size_t __k = 1; __k <= __s; ++__k)
+    3301              :         {
+    3302              :           const size_t __kn = __k % __n;
+    3303              :           const size_t __kpn = (__k + __p) % __n;
+    3304              :           const size_t __kqn = (__k + __q) % __n;
+    3305              :           uint32_t __arg = (__begin[__kn]
+    3306              :                             ^ __begin[__kpn]
+    3307              :                             ^ __begin[(__k - 1) % __n]);
+    3308              :           uint32_t __r1 = 1664525u * (__arg ^ (__arg >> 27));
+    3309              :           uint32_t __r2 = __r1 + (uint32_t)__kn + _M_v[__k - 1];
+    3310              :           __begin[__kpn] = (uint32_t)__begin[__kpn] + __r1;
+    3311              :           __begin[__kqn] = (uint32_t)__begin[__kqn] + __r2;
+    3312              :           __begin[__kn] = __r2;
+    3313              :         }
+    3314              : 
+    3315              :       for (size_t __k = __s + 1; __k < __m; ++__k)
+    3316              :         {
+    3317              :           const size_t __kn = __k % __n;
+    3318              :           const size_t __kpn = (__k + __p) % __n;
+    3319              :           const size_t __kqn = (__k + __q) % __n;
+    3320              :           uint32_t __arg = (__begin[__kn]
+    3321              :                                  ^ __begin[__kpn]
+    3322              :                                  ^ __begin[(__k - 1) % __n]);
+    3323              :           uint32_t __r1 = 1664525u * (__arg ^ (__arg >> 27));
+    3324              :           uint32_t __r2 = __r1 + (uint32_t)__kn;
+    3325              :           __begin[__kpn] = (uint32_t)__begin[__kpn] + __r1;
+    3326              :           __begin[__kqn] = (uint32_t)__begin[__kqn] + __r2;
+    3327              :           __begin[__kn] = __r2;
+    3328              :         }
+    3329              : 
+    3330              :       for (size_t __k = __m; __k < __m + __n; ++__k)
+    3331              :         {
+    3332              :           const size_t __kn = __k % __n;
+    3333              :           const size_t __kpn = (__k + __p) % __n;
+    3334              :           const size_t __kqn = (__k + __q) % __n;
+    3335              :           uint32_t __arg = (__begin[__kn]
+    3336              :                             + __begin[__kpn]
+    3337              :                             + __begin[(__k - 1) % __n]);
+    3338              :           uint32_t __r3 = 1566083941u * (__arg ^ (__arg >> 27));
+    3339              :           uint32_t __r4 = __r3 - __kn;
+    3340              :           __begin[__kpn] ^= __r3;
+    3341              :           __begin[__kqn] ^= __r4;
+    3342              :           __begin[__kn] = __r4;
+    3343              :         }
+    3344              :     }
+    3345              : 
+    3346              :   template<typename _RealType, size_t __bits,
+    3347              :            typename _UniformRandomNumberGenerator>
+    3348              :     _RealType
+    3349              :     generate_canonical(_UniformRandomNumberGenerator& __urng)
+    3350              :     {
+    3351              :       static_assert(std::is_floating_point<_RealType>::value,
+    3352              :                     "template argument must be a floating point type");
+    3353              : 
+    3354              :       const size_t __b
+    3355              :         = std::min(static_cast<size_t>(std::numeric_limits<_RealType>::digits),
+    3356              :                    __bits);
+    3357              :       const long double __r = static_cast<long double>(__urng.max())
+    3358              :                             - static_cast<long double>(__urng.min()) + 1.0L;
+    3359              :       const size_t __log2r = std::log(__r) / std::log(2.0L);
+    3360              :       const size_t __m = std::max<size_t>(1UL,
+    3361              :                                           (__b + __log2r - 1UL) / __log2r);
+    3362              :       _RealType __ret;
+    3363              :       _RealType __sum = _RealType(0);
+    3364              :       _RealType __tmp = _RealType(1);
+    3365              :       for (size_t __k = __m; __k != 0; --__k)
+    3366              :         {
+    3367              :           __sum += _RealType(__urng() - __urng.min()) * __tmp;
+    3368              :           __tmp *= __r;
+    3369              :         }
+    3370              :       __ret = __sum / __tmp;
+    3371              :       if (__builtin_expect(__ret >= _RealType(1), 0))
+    3372              :         {
+    3373              : #if _GLIBCXX_USE_C99_MATH_TR1
+    3374              :           __ret = std::nextafter(_RealType(1), _RealType(0));
+    3375              : #else
+    3376              :           __ret = _RealType(1)
+    3377              :             - std::numeric_limits<_RealType>::epsilon() / _RealType(2);
+    3378              : #endif
+    3379              :         }
+    3380              :       return __ret;
+    3381              :     }
+    3382              : 
+    3383              : _GLIBCXX_END_NAMESPACE_VERSION
+    3384              : } // namespace
+    3385              : 
+    3386              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/range_access.h.func-c.html b/html/usr/include/c++/13/bits/range_access.h.func-c.html new file mode 100644 index 0000000..3a5faef --- /dev/null +++ b/html/usr/include/c++/13/bits/range_access.h.func-c.html @@ -0,0 +1,75 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/range_access.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - range_access.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:-00
+
+ +
+ + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/range_access.h.func.html b/html/usr/include/c++/13/bits/range_access.h.func.html new file mode 100644 index 0000000..b221a79 --- /dev/null +++ b/html/usr/include/c++/13/bits/range_access.h.func.html @@ -0,0 +1,75 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/range_access.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - range_access.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:-00
+
+ +
+ + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/range_access.h.gcov.html b/html/usr/include/c++/13/bits/range_access.h.gcov.html new file mode 100644 index 0000000..ea06fb8 --- /dev/null +++ b/html/usr/include/c++/13/bits/range_access.h.gcov.html @@ -0,0 +1,450 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/range_access.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - range_access.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:-00
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Range access functions for containers -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2010-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/range_access.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{iterator}
+      28              :  */
+      29              : 
+      30              : #ifndef _GLIBCXX_RANGE_ACCESS_H
+      31              : #define _GLIBCXX_RANGE_ACCESS_H 1
+      32              : 
+      33              : #pragma GCC system_header
+      34              : 
+      35              : #if __cplusplus >= 201103L
+      36              : #include <initializer_list>
+      37              : #include <type_traits>        // common_type_t, make_signed_t
+      38              : #include <bits/stl_iterator.h> // reverse_iterator
+      39              : 
+      40              : namespace std _GLIBCXX_VISIBILITY(default)
+      41              : {
+      42              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      43              : 
+      44              :   /**
+      45              :    *  @brief  Return an iterator pointing to the first element of
+      46              :    *          the container.
+      47              :    *  @param  __cont  Container.
+      48              :    */
+      49              :   template<typename _Container>
+      50              :     [[__nodiscard__, __gnu__::__always_inline__]]
+      51              :     inline _GLIBCXX17_CONSTEXPR auto
+      52              :     begin(_Container& __cont) -> decltype(__cont.begin())
+      53         6682 :     { return __cont.begin(); }
+      54              : 
+      55              :   /**
+      56              :    *  @brief  Return an iterator pointing to the first element of
+      57              :    *          the const container.
+      58              :    *  @param  __cont  Container.
+      59              :    */
+      60              :   template<typename _Container>
+      61              :     [[__nodiscard__, __gnu__::__always_inline__]]
+      62              :     inline _GLIBCXX17_CONSTEXPR auto
+      63              :     begin(const _Container& __cont) -> decltype(__cont.begin())
+      64              :     { return __cont.begin(); }
+      65              : 
+      66              :   /**
+      67              :    *  @brief  Return an iterator pointing to one past the last element of
+      68              :    *          the container.
+      69              :    *  @param  __cont  Container.
+      70              :    */
+      71              :   template<typename _Container>
+      72              :     [[__nodiscard__, __gnu__::__always_inline__]]
+      73              :     inline _GLIBCXX17_CONSTEXPR auto
+      74              :     end(_Container& __cont) -> decltype(__cont.end())
+      75         6896 :     { return __cont.end(); }
+      76              : 
+      77              :   /**
+      78              :    *  @brief  Return an iterator pointing to one past the last element of
+      79              :    *          the const container.
+      80              :    *  @param  __cont  Container.
+      81              :    */
+      82              :   template<typename _Container>
+      83              :     [[__nodiscard__, __gnu__::__always_inline__]]
+      84              :     inline _GLIBCXX17_CONSTEXPR auto
+      85              :     end(const _Container& __cont) -> decltype(__cont.end())
+      86              :     { return __cont.end(); }
+      87              : 
+      88              :   /**
+      89              :    *  @brief  Return an iterator pointing to the first element of the array.
+      90              :    *  @param  __arr  Array.
+      91              :    */
+      92              :   template<typename _Tp, size_t _Nm>
+      93              :     [[__nodiscard__, __gnu__::__always_inline__]]
+      94              :     inline _GLIBCXX14_CONSTEXPR _Tp*
+      95              :     begin(_Tp (&__arr)[_Nm]) noexcept
+      96              :     { return __arr; }
+      97              : 
+      98              :   /**
+      99              :    *  @brief  Return an iterator pointing to one past the last element
+     100              :    *          of the array.
+     101              :    *  @param  __arr  Array.
+     102              :    */
+     103              :   template<typename _Tp, size_t _Nm>
+     104              :     [[__nodiscard__, __gnu__::__always_inline__]]
+     105              :     inline _GLIBCXX14_CONSTEXPR _Tp*
+     106              :     end(_Tp (&__arr)[_Nm]) noexcept
+     107              :     { return __arr + _Nm; }
+     108              : 
+     109              : #if __cplusplus >= 201402L
+     110              : 
+     111              :   template<typename _Tp> class valarray;
+     112              :   // These overloads must be declared for cbegin and cend to use them.
+     113              :   template<typename _Tp> _Tp* begin(valarray<_Tp>&) noexcept;
+     114              :   template<typename _Tp> const _Tp* begin(const valarray<_Tp>&) noexcept;
+     115              :   template<typename _Tp> _Tp* end(valarray<_Tp>&) noexcept;
+     116              :   template<typename _Tp> const _Tp* end(const valarray<_Tp>&) noexcept;
+     117              : 
+     118              :   /**
+     119              :    *  @brief  Return an iterator pointing to the first element of
+     120              :    *          the const container.
+     121              :    *  @param  __cont  Container.
+     122              :    */
+     123              :   template<typename _Container>
+     124              :     [[__nodiscard__, __gnu__::__always_inline__]]
+     125              :     constexpr auto
+     126              :     cbegin(const _Container& __cont) noexcept(noexcept(std::begin(__cont)))
+     127              :       -> decltype(std::begin(__cont))
+     128              :     { return std::begin(__cont); }
+     129              : 
+     130              :   /**
+     131              :    *  @brief  Return an iterator pointing to one past the last element of
+     132              :    *          the const container.
+     133              :    *  @param  __cont  Container.
+     134              :    */
+     135              :   template<typename _Container>
+     136              :     [[__nodiscard__, __gnu__::__always_inline__]]
+     137              :     constexpr auto
+     138              :     cend(const _Container& __cont) noexcept(noexcept(std::end(__cont)))
+     139              :       -> decltype(std::end(__cont))
+     140              :     { return std::end(__cont); }
+     141              : 
+     142              :   /**
+     143              :    *  @brief  Return a reverse iterator pointing to the last element of
+     144              :    *          the container.
+     145              :    *  @param  __cont  Container.
+     146              :    */
+     147              :   template<typename _Container>
+     148              :     [[__nodiscard__, __gnu__::__always_inline__]]
+     149              :     inline _GLIBCXX17_CONSTEXPR auto
+     150              :     rbegin(_Container& __cont) -> decltype(__cont.rbegin())
+     151              :     { return __cont.rbegin(); }
+     152              : 
+     153              :   /**
+     154              :    *  @brief  Return a reverse iterator pointing to the last element of
+     155              :    *          the const container.
+     156              :    *  @param  __cont  Container.
+     157              :    */
+     158              :   template<typename _Container>
+     159              :     [[__nodiscard__, __gnu__::__always_inline__]]
+     160              :     inline _GLIBCXX17_CONSTEXPR auto
+     161              :     rbegin(const _Container& __cont) -> decltype(__cont.rbegin())
+     162              :     { return __cont.rbegin(); }
+     163              : 
+     164              :   /**
+     165              :    *  @brief  Return a reverse iterator pointing one past the first element of
+     166              :    *          the container.
+     167              :    *  @param  __cont  Container.
+     168              :    */
+     169              :   template<typename _Container>
+     170              :     [[__nodiscard__, __gnu__::__always_inline__]]
+     171              :     inline _GLIBCXX17_CONSTEXPR auto
+     172              :     rend(_Container& __cont) -> decltype(__cont.rend())
+     173              :     { return __cont.rend(); }
+     174              : 
+     175              :   /**
+     176              :    *  @brief  Return a reverse iterator pointing one past the first element of
+     177              :    *          the const container.
+     178              :    *  @param  __cont  Container.
+     179              :    */
+     180              :   template<typename _Container>
+     181              :     [[__nodiscard__, __gnu__::__always_inline__]]
+     182              :     inline _GLIBCXX17_CONSTEXPR auto
+     183              :     rend(const _Container& __cont) -> decltype(__cont.rend())
+     184              :     { return __cont.rend(); }
+     185              : 
+     186              :   /**
+     187              :    *  @brief  Return a reverse iterator pointing to the last element of
+     188              :    *          the array.
+     189              :    *  @param  __arr  Array.
+     190              :    */
+     191              :   template<typename _Tp, size_t _Nm>
+     192              :     [[__nodiscard__]]
+     193              :     inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Tp*>
+     194              :     rbegin(_Tp (&__arr)[_Nm]) noexcept
+     195              :     { return reverse_iterator<_Tp*>(__arr + _Nm); }
+     196              : 
+     197              :   /**
+     198              :    *  @brief  Return a reverse iterator pointing one past the first element of
+     199              :    *          the array.
+     200              :    *  @param  __arr  Array.
+     201              :    */
+     202              :   template<typename _Tp, size_t _Nm>
+     203              :     [[__nodiscard__]]
+     204              :     inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Tp*>
+     205              :     rend(_Tp (&__arr)[_Nm]) noexcept
+     206              :     { return reverse_iterator<_Tp*>(__arr); }
+     207              : 
+     208              :   /**
+     209              :    *  @brief  Return a reverse iterator pointing to the last element of
+     210              :    *          the initializer_list.
+     211              :    *  @param  __il  initializer_list.
+     212              :    */
+     213              :   template<typename _Tp>
+     214              :     [[__nodiscard__]]
+     215              :     inline _GLIBCXX17_CONSTEXPR reverse_iterator<const _Tp*>
+     216              :     rbegin(initializer_list<_Tp> __il) noexcept
+     217              :     { return reverse_iterator<const _Tp*>(__il.end()); }
+     218              : 
+     219              :   /**
+     220              :    *  @brief  Return a reverse iterator pointing one past the first element of
+     221              :    *          the initializer_list.
+     222              :    *  @param  __il  initializer_list.
+     223              :    */
+     224              :   template<typename _Tp>
+     225              :     [[__nodiscard__]]
+     226              :     inline _GLIBCXX17_CONSTEXPR reverse_iterator<const _Tp*>
+     227              :     rend(initializer_list<_Tp> __il) noexcept
+     228              :     { return reverse_iterator<const _Tp*>(__il.begin()); }
+     229              : 
+     230              :   /**
+     231              :    *  @brief  Return a reverse iterator pointing to the last element of
+     232              :    *          the const container.
+     233              :    *  @param  __cont  Container.
+     234              :    */
+     235              :   template<typename _Container>
+     236              :     [[__nodiscard__, __gnu__::__always_inline__]]
+     237              :     inline _GLIBCXX17_CONSTEXPR auto
+     238              :     crbegin(const _Container& __cont) -> decltype(std::rbegin(__cont))
+     239              :     { return std::rbegin(__cont); }
+     240              : 
+     241              :   /**
+     242              :    *  @brief  Return a reverse iterator pointing one past the first element of
+     243              :    *          the const container.
+     244              :    *  @param  __cont  Container.
+     245              :    */
+     246              :   template<typename _Container>
+     247              :     [[__nodiscard__, __gnu__::__always_inline__]]
+     248              :     inline _GLIBCXX17_CONSTEXPR auto
+     249              :     crend(const _Container& __cont) -> decltype(std::rend(__cont))
+     250              :     { return std::rend(__cont); }
+     251              : 
+     252              : #endif // C++14
+     253              : 
+     254              : #if __cplusplus >= 201703L
+     255              : #define __cpp_lib_nonmember_container_access 201411L
+     256              : 
+     257              :   /**
+     258              :    *  @brief  Return the size of a container.
+     259              :    *  @param  __cont  Container.
+     260              :    */
+     261              :   template <typename _Container>
+     262              :     [[nodiscard, __gnu__::__always_inline__]]
+     263              :     constexpr auto
+     264              :     size(const _Container& __cont) noexcept(noexcept(__cont.size()))
+     265              :     -> decltype(__cont.size())
+     266              :     { return __cont.size(); }
+     267              : 
+     268              :   /**
+     269              :    *  @brief  Return the size of an array.
+     270              :    */
+     271              :   template <typename _Tp, size_t _Nm>
+     272              :     [[nodiscard, __gnu__::__always_inline__]]
+     273              :     constexpr size_t
+     274              :     size(const _Tp (&)[_Nm]) noexcept
+     275              :     { return _Nm; }
+     276              : 
+     277              :   /**
+     278              :    *  @brief  Return whether a container is empty.
+     279              :    *  @param  __cont  Container.
+     280              :    */
+     281              :   template <typename _Container>
+     282              :     [[nodiscard, __gnu__::__always_inline__]]
+     283              :     constexpr auto
+     284              :     empty(const _Container& __cont) noexcept(noexcept(__cont.empty()))
+     285              :     -> decltype(__cont.empty())
+     286              :     { return __cont.empty(); }
+     287              : 
+     288              :   /**
+     289              :    *  @brief  Return whether an array is empty (always false).
+     290              :    */
+     291              :   template <typename _Tp, size_t _Nm>
+     292              :     [[nodiscard, __gnu__::__always_inline__]]
+     293              :     constexpr bool
+     294              :     empty(const _Tp (&)[_Nm]) noexcept
+     295              :     { return false; }
+     296              : 
+     297              :   /**
+     298              :    *  @brief  Return whether an initializer_list is empty.
+     299              :    *  @param  __il  Initializer list.
+     300              :    */
+     301              :   template <typename _Tp>
+     302              :     [[nodiscard, __gnu__::__always_inline__]]
+     303              :     constexpr bool
+     304              :     empty(initializer_list<_Tp> __il) noexcept
+     305              :     { return __il.size() == 0;}
+     306              : 
+     307              :   /**
+     308              :    *  @brief  Return the data pointer of a container.
+     309              :    *  @param  __cont  Container.
+     310              :    */
+     311              :   template <typename _Container>
+     312              :     [[nodiscard, __gnu__::__always_inline__]]
+     313              :     constexpr auto
+     314              :     data(_Container& __cont) noexcept(noexcept(__cont.data()))
+     315              :     -> decltype(__cont.data())
+     316              :     { return __cont.data(); }
+     317              : 
+     318              :   /**
+     319              :    *  @brief  Return the data pointer of a const container.
+     320              :    *  @param  __cont  Container.
+     321              :    */
+     322              :   template <typename _Container>
+     323              :     [[nodiscard, __gnu__::__always_inline__]]
+     324              :     constexpr auto
+     325              :     data(const _Container& __cont) noexcept(noexcept(__cont.data()))
+     326              :     -> decltype(__cont.data())
+     327              :     { return __cont.data(); }
+     328              : 
+     329              :   /**
+     330              :    *  @brief  Return the data pointer of an array.
+     331              :    *  @param  __array  Array.
+     332              :    */
+     333              :   template <typename _Tp, size_t _Nm>
+     334              :     [[nodiscard, __gnu__::__always_inline__]]
+     335              :     constexpr _Tp*
+     336              :     data(_Tp (&__array)[_Nm]) noexcept
+     337              :     { return __array; }
+     338              : 
+     339              :   /**
+     340              :    *  @brief  Return the data pointer of an initializer list.
+     341              :    *  @param  __il  Initializer list.
+     342              :    */
+     343              :   template <typename _Tp>
+     344              :     [[nodiscard, __gnu__::__always_inline__]]
+     345              :     constexpr const _Tp*
+     346              :     data(initializer_list<_Tp> __il) noexcept
+     347              :     { return __il.begin(); }
+     348              : 
+     349              : #if __cplusplus > 201703L
+     350              : #define __cpp_lib_ssize 201902L
+     351              :   template<typename _Container>
+     352              :     [[nodiscard, __gnu__::__always_inline__]]
+     353              :     constexpr auto
+     354              :     ssize(const _Container& __cont)
+     355              :     noexcept(noexcept(__cont.size()))
+     356              :     -> common_type_t<ptrdiff_t, make_signed_t<decltype(__cont.size())>>
+     357              :     {
+     358              :       using type = make_signed_t<decltype(__cont.size())>;
+     359              :       return static_cast<common_type_t<ptrdiff_t, type>>(__cont.size());
+     360              :     }
+     361              : 
+     362              :   template<typename _Tp, ptrdiff_t _Num>
+     363              :     [[nodiscard, __gnu__::__always_inline__]]
+     364              :     constexpr ptrdiff_t
+     365              :     ssize(const _Tp (&)[_Num]) noexcept
+     366              :     { return _Num; }
+     367              : #endif // C++20
+     368              : 
+     369              : #endif // C++17
+     370              : _GLIBCXX_END_NAMESPACE_VERSION
+     371              : } // namespace
+     372              : 
+     373              : #endif // C++11
+     374              : #endif // _GLIBCXX_RANGE_ACCESS_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex.h.func-c.html b/html/usr/include/c++/13/bits/regex.h.func-c.html new file mode 100644 index 0000000..a4a1f32 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex.h.func-c.html @@ -0,0 +1,460 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %1370
Test Date:2024-04-30 13:17:26Functions:0.0 %530
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt7__cxx1111basic_regexIcNS_12regex_traitsIcEEE5flagsEv0
_ZNKSt7__cxx1112regex_traitsIcE10_RegexMaskanES2_0
_ZNKSt7__cxx1112regex_traitsIcE10_RegexMaskeqES2_0
_ZNKSt7__cxx1112regex_traitsIcE10_RegexMaskneES2_0
_ZNKSt7__cxx1112regex_traitsIcE10_RegexMaskorES2_0
_ZNKSt7__cxx1112regex_traitsIcE16translate_nocaseEc0
_ZNKSt7__cxx1112regex_traitsIcE17transform_primaryIPcEENS_12basic_stringIcSt11char_traitsIcESaIcEEET_S9_0
_ZNKSt7__cxx1112regex_traitsIcE17transform_primaryIPKcEENS_12basic_stringIcSt11char_traitsIcESaIcEEET_SA_0
_ZNKSt7__cxx1112regex_traitsIcE17transform_primaryIPcEENS_12basic_stringIcSt11char_traitsIcESaIcEEET_S9_0
_ZNKSt7__cxx1112regex_traitsIcE6getlocEv0
_ZNKSt7__cxx1112regex_traitsIcE9transformIPcEENS_12basic_stringIcSt11char_traitsIcESaIcEEET_S9_0
_ZNKSt7__cxx1112regex_traitsIcE9transformIN9__gnu_cxx17__normal_iteratorIPcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESA_T_SC_0
_ZNKSt7__cxx1112regex_traitsIcE9transformIPcEENS_12basic_stringIcSt11char_traitsIcESaIcEEET_S9_0
_ZNKSt7__cxx1112regex_traitsIcE9translateEc0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE16_M_unmatched_subEv0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE4sizeEv0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE5emptyEv0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE5readyEv0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE6prefixEv0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE6suffixEv0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE9_M_prefixEv0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE9_M_suffixEv0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEEixEm0
_ZNKSt7__cxx1114regex_iteratorIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEcNS_12regex_traitsIcEEEneERKSD_0
_ZNKSt7__cxx1114regex_iteratorIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEcNS_12regex_traitsIcEEEptEv0
_ZNKSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEE13__string_view7compareESC_0
_ZNKSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEE6_M_strISA_EENSt9enable_ifIXsrNSt8__detail20__is_contiguous_iterIT_EE5valueENSB_13__string_viewEE4typeEv0
_ZNKSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEE7compareERKSB_0
_ZNSt7__cxx1111basic_regexIcNS_12regex_traitsIcEEE10_M_compileEPKcS5_NSt15regex_constants18syntax_option_typeE0
_ZNSt7__cxx1111basic_regexIcNS_12regex_traitsIcEEEC2EPKcNSt15regex_constants18syntax_option_typeE0
_ZNSt7__cxx1111basic_regexIcNS_12regex_traitsIcEEED2Ev0
_ZNSt7__cxx1112regex_traitsIcE10_RegexMaskC2Eth0
_ZNSt7__cxx1112regex_traitsIcE10_RegexMaskoRES2_0
_ZNSt7__cxx1112regex_traitsIcE5imbueESt6locale0
_ZNSt7__cxx1112regex_traitsIcE6lengthEPKc0
_ZNSt7__cxx1112regex_traitsIcEC2Ev0
_ZNSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE25_M_establish_failed_matchESA_0
_ZNSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE9_M_prefixEv0
_ZNSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE9_M_resizeEj0
_ZNSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE9_M_suffixEv0
_ZNSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEEC2ERKSD_0
_ZNSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEEC2Ev0
_ZNSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEED2Ev0
_ZNSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEEaSERKSE_0
_ZNSt7__cxx1114regex_iteratorIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEcNS_12regex_traitsIcEEEC2ESA_SA_RKNS_11basic_regexIcSC_EENSt15regex_constants15match_flag_typeE0
_ZNSt7__cxx1114regex_iteratorIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEcNS_12regex_traitsIcEEEC2Ev0
_ZNSt7__cxx1114regex_iteratorIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEcNS_12regex_traitsIcEEED2Ev0
_ZNSt7__cxx1114regex_iteratorIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEcNS_12regex_traitsIcEEEaSERKSD_0
_ZNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEE13__string_viewC2ES4_m0
_ZNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEE13__string_viewC2Ev0
_ZNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEEC2Ev0
_ZNSt7__cxx11eqIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEbRKNS_9sub_matchIT_EESF_0
_ZSt12regex_searchIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS4_9sub_matchISA_EEEcNS4_12regex_traitsIcEEEbT_SG_RNS4_13match_resultsISG_T0_EERKNS4_11basic_regexIT1_T2_EENSt15regex_constants15match_flag_typeE0
_ZSt13regex_replaceINSt7__cxx1112regex_traitsIcEEcSt11char_traitsIcESaIcES4_S5_ENS0_12basic_stringIT0_T1_T2_EERKSA_RKNS0_11basic_regexIS7_T_EERKNS6_IS7_T3_T4_EENSt15regex_constants15match_flag_typeE0
_ZSt13regex_replaceISt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEN9__gnu_cxx17__normal_iteratorIPKcS6_EENS1_12regex_traitsIcEEcS4_S5_ET_SF_T0_SG_RKNS1_11basic_regexIT2_T1_EERKNS2_ISI_T3_T4_EENSt15regex_constants15match_flag_typeE0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex.h.func.html b/html/usr/include/c++/13/bits/regex.h.func.html new file mode 100644 index 0000000..0e63264 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex.h.func.html @@ -0,0 +1,460 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %1370
Test Date:2024-04-30 13:17:26Functions:0.0 %530
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt7__cxx1111basic_regexIcNS_12regex_traitsIcEEE5flagsEv0
_ZNKSt7__cxx1112regex_traitsIcE10_RegexMaskanES2_0
_ZNKSt7__cxx1112regex_traitsIcE10_RegexMaskeqES2_0
_ZNKSt7__cxx1112regex_traitsIcE10_RegexMaskneES2_0
_ZNKSt7__cxx1112regex_traitsIcE10_RegexMaskorES2_0
_ZNKSt7__cxx1112regex_traitsIcE16translate_nocaseEc0
_ZNKSt7__cxx1112regex_traitsIcE17transform_primaryIPcEENS_12basic_stringIcSt11char_traitsIcESaIcEEET_S9_0
_ZNKSt7__cxx1112regex_traitsIcE17transform_primaryIPKcEENS_12basic_stringIcSt11char_traitsIcESaIcEEET_SA_0
_ZNKSt7__cxx1112regex_traitsIcE17transform_primaryIPcEENS_12basic_stringIcSt11char_traitsIcESaIcEEET_S9_0
_ZNKSt7__cxx1112regex_traitsIcE6getlocEv0
_ZNKSt7__cxx1112regex_traitsIcE9transformIPcEENS_12basic_stringIcSt11char_traitsIcESaIcEEET_S9_0
_ZNKSt7__cxx1112regex_traitsIcE9transformIN9__gnu_cxx17__normal_iteratorIPcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESA_T_SC_0
_ZNKSt7__cxx1112regex_traitsIcE9transformIPcEENS_12basic_stringIcSt11char_traitsIcESaIcEEET_S9_0
_ZNKSt7__cxx1112regex_traitsIcE9translateEc0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE16_M_unmatched_subEv0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE4sizeEv0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE5emptyEv0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE5readyEv0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE6prefixEv0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE6suffixEv0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE9_M_prefixEv0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE9_M_suffixEv0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEEixEm0
_ZNKSt7__cxx1114regex_iteratorIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEcNS_12regex_traitsIcEEEneERKSD_0
_ZNKSt7__cxx1114regex_iteratorIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEcNS_12regex_traitsIcEEEptEv0
_ZNKSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEE13__string_view7compareESC_0
_ZNKSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEE6_M_strISA_EENSt9enable_ifIXsrNSt8__detail20__is_contiguous_iterIT_EE5valueENSB_13__string_viewEE4typeEv0
_ZNKSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEE7compareERKSB_0
_ZNSt7__cxx1111basic_regexIcNS_12regex_traitsIcEEE10_M_compileEPKcS5_NSt15regex_constants18syntax_option_typeE0
_ZNSt7__cxx1111basic_regexIcNS_12regex_traitsIcEEEC2EPKcNSt15regex_constants18syntax_option_typeE0
_ZNSt7__cxx1111basic_regexIcNS_12regex_traitsIcEEED2Ev0
_ZNSt7__cxx1112regex_traitsIcE10_RegexMaskC2Eth0
_ZNSt7__cxx1112regex_traitsIcE10_RegexMaskoRES2_0
_ZNSt7__cxx1112regex_traitsIcE5imbueESt6locale0
_ZNSt7__cxx1112regex_traitsIcE6lengthEPKc0
_ZNSt7__cxx1112regex_traitsIcEC2Ev0
_ZNSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE25_M_establish_failed_matchESA_0
_ZNSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE9_M_prefixEv0
_ZNSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE9_M_resizeEj0
_ZNSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE9_M_suffixEv0
_ZNSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEEC2ERKSD_0
_ZNSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEEC2Ev0
_ZNSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEED2Ev0
_ZNSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEEaSERKSE_0
_ZNSt7__cxx1114regex_iteratorIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEcNS_12regex_traitsIcEEEC2ESA_SA_RKNS_11basic_regexIcSC_EENSt15regex_constants15match_flag_typeE0
_ZNSt7__cxx1114regex_iteratorIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEcNS_12regex_traitsIcEEEC2Ev0
_ZNSt7__cxx1114regex_iteratorIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEcNS_12regex_traitsIcEEED2Ev0
_ZNSt7__cxx1114regex_iteratorIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEcNS_12regex_traitsIcEEEaSERKSD_0
_ZNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEE13__string_viewC2ES4_m0
_ZNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEE13__string_viewC2Ev0
_ZNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEEC2Ev0
_ZNSt7__cxx11eqIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEbRKNS_9sub_matchIT_EESF_0
_ZSt12regex_searchIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS4_9sub_matchISA_EEEcNS4_12regex_traitsIcEEEbT_SG_RNS4_13match_resultsISG_T0_EERKNS4_11basic_regexIT1_T2_EENSt15regex_constants15match_flag_typeE0
_ZSt13regex_replaceINSt7__cxx1112regex_traitsIcEEcSt11char_traitsIcESaIcES4_S5_ENS0_12basic_stringIT0_T1_T2_EERKSA_RKNS0_11basic_regexIS7_T_EERKNS6_IS7_T3_T4_EENSt15regex_constants15match_flag_typeE0
_ZSt13regex_replaceISt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEN9__gnu_cxx17__normal_iteratorIPKcS6_EENS1_12regex_traitsIcEEcS4_S5_ET_SF_T0_SG_RKNS1_11basic_regexIT2_T1_EERKNS2_ISI_T3_T4_EENSt15regex_constants15match_flag_typeE0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex.h.gcov.html b/html/usr/include/c++/13/bits/regex.h.gcov.html new file mode 100644 index 0000000..e631471 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex.h.gcov.html @@ -0,0 +1,3188 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %1370
Test Date:2024-04-30 13:17:26Functions:0.0 %530
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // class template regex -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2010-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /**
+      26              :  *  @file bits/regex.h
+      27              :  *  This is an internal header file, included by other library headers.
+      28              :  *  Do not attempt to use it directly. @headername{regex}
+      29              :  */
+      30              : 
+      31              : #if __cplusplus >= 202002L
+      32              : # include <bits/iterator_concepts.h>      // std::default_sentinel_t
+      33              : #endif
+      34              : 
+      35              : namespace std _GLIBCXX_VISIBILITY(default)
+      36              : {
+      37              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      38              : _GLIBCXX_BEGIN_NAMESPACE_CXX11
+      39              :   template<typename, typename>
+      40              :     class basic_regex;
+      41              : 
+      42              :   template<typename _Bi_iter, typename _Alloc>
+      43              :     class match_results;
+      44              : 
+      45              : _GLIBCXX_END_NAMESPACE_CXX11
+      46              : 
+      47              : namespace __detail
+      48              : {
+      49              :   enum class _RegexExecutorPolicy : int { _S_auto, _S_alternate };
+      50              : 
+      51              :   template<typename _BiIter, typename _Alloc,
+      52              :            typename _CharT, typename _TraitsT>
+      53              :     bool
+      54              :     __regex_algo_impl(_BiIter __s, _BiIter __e,
+      55              :                       match_results<_BiIter, _Alloc>&      __m,
+      56              :                       const basic_regex<_CharT, _TraitsT>& __re,
+      57              :                       regex_constants::match_flag_type     __flags,
+      58              :                       _RegexExecutorPolicy                 __policy,
+      59              :                       bool                                 __match_mode);
+      60              : 
+      61              :   template<typename, typename, typename, bool>
+      62              :     class _Executor;
+      63              : 
+      64              :   template<typename _Tp>
+      65              :     struct __is_contiguous_iter : false_type { };
+      66              : 
+      67              :   template<typename _Tp>
+      68              :     struct __is_contiguous_iter<_Tp*> : true_type { };
+      69              : 
+      70              :   template<typename _Tp, typename _Cont>
+      71              :     struct __is_contiguous_iter<__gnu_cxx::__normal_iterator<_Tp*, _Cont>>
+      72              :     : true_type { };
+      73              : }
+      74              : 
+      75              : _GLIBCXX_BEGIN_NAMESPACE_CXX11
+      76              : 
+      77              :   /**
+      78              :    * @addtogroup regex
+      79              :    * @{
+      80              :    */
+      81              : 
+      82              :   /**
+      83              :    * @brief Describes aspects of a regular expression.
+      84              :    *
+      85              :    * A regular expression traits class that satisfies the requirements of
+      86              :    * section [28.7].
+      87              :    *
+      88              :    * The class %regex is parameterized around a set of related types and
+      89              :    * functions used to complete the definition of its semantics.  This class
+      90              :    * satisfies the requirements of such a traits class.
+      91              :    *
+      92              :    * @headerfile regex
+      93              :    * @since C++11
+      94              :    */
+      95              :   template<typename _Ch_type>
+      96              :     class regex_traits
+      97              :     {
+      98              :     public:
+      99              :       typedef _Ch_type                          char_type;
+     100              :       typedef std::basic_string<char_type>        string_type;
+     101              :       typedef std::locale                       locale_type;
+     102              : 
+     103              :     private:
+     104              :       struct _RegexMask
+     105              :         {
+     106              :           typedef std::ctype_base::mask _BaseType;
+     107              :           _BaseType _M_base;
+     108              :           unsigned char _M_extended;
+     109              :           static constexpr unsigned char _S_under = 1 << 0;
+     110              :           static constexpr unsigned char _S_valid_mask = 0x1;
+     111              : 
+     112            0 :           constexpr _RegexMask(_BaseType __base = 0,
+     113              :                                unsigned char __extended = 0)
+     114            0 :           : _M_base(__base), _M_extended(__extended)
+     115            0 :           { }
+     116              : 
+     117              :           constexpr _RegexMask
+     118            0 :           operator&(_RegexMask __other) const
+     119              :           {
+     120            0 :             return _RegexMask(_M_base & __other._M_base,
+     121            0 :                               _M_extended & __other._M_extended);
+     122              :           }
+     123              : 
+     124              :           constexpr _RegexMask
+     125            0 :           operator|(_RegexMask __other) const
+     126              :           {
+     127            0 :             return _RegexMask(_M_base | __other._M_base,
+     128            0 :                               _M_extended | __other._M_extended);
+     129              :           }
+     130              : 
+     131              :           constexpr _RegexMask
+     132              :           operator^(_RegexMask __other) const
+     133              :           {
+     134              :             return _RegexMask(_M_base ^ __other._M_base,
+     135              :                               _M_extended ^ __other._M_extended);
+     136              :           }
+     137              : 
+     138              :           constexpr _RegexMask
+     139              :           operator~() const
+     140              :           { return _RegexMask(~_M_base, ~_M_extended); }
+     141              : 
+     142              :           _RegexMask&
+     143              :           operator&=(_RegexMask __other)
+     144              :           { return *this = (*this) & __other; }
+     145              : 
+     146              :           _RegexMask&
+     147            0 :           operator|=(_RegexMask __other)
+     148            0 :           { return *this = (*this) | __other; }
+     149              : 
+     150              :           _RegexMask&
+     151              :           operator^=(_RegexMask __other)
+     152              :           { return *this = (*this) ^ __other; }
+     153              : 
+     154              :           constexpr bool
+     155            0 :           operator==(_RegexMask __other) const
+     156              :           {
+     157            0 :             return (_M_extended & _S_valid_mask)
+     158            0 :                    == (__other._M_extended & _S_valid_mask)
+     159            0 :                      && _M_base == __other._M_base;
+     160              :           }
+     161              : 
+     162              : #if __cpp_impl_three_way_comparison < 201907L
+     163              :           constexpr bool
+     164            0 :           operator!=(_RegexMask __other) const
+     165            0 :           { return !((*this) == __other); }
+     166              : #endif
+     167              :         };
+     168              : 
+     169              :     public:
+     170              :       typedef _RegexMask char_class_type;
+     171              : 
+     172              :     public:
+     173              :       /**
+     174              :        * @brief Constructs a default traits object.
+     175              :        */
+     176            0 :       regex_traits() { }
+     177              : 
+     178              :       /**
+     179              :        * @brief Gives the length of a C-style string starting at @p __p.
+     180              :        *
+     181              :        * @param __p a pointer to the start of a character sequence.
+     182              :        *
+     183              :        * @returns the number of characters between @p *__p and the first
+     184              :        * default-initialized value of type @p char_type.  In other words, uses
+     185              :        * the C-string algorithm for determining the length of a sequence of
+     186              :        * characters.
+     187              :        */
+     188              :       static std::size_t
+     189            0 :       length(const char_type* __p)
+     190            0 :       { return string_type::traits_type::length(__p); }
+     191              : 
+     192              :       /**
+     193              :        * @brief Performs the identity translation.
+     194              :        *
+     195              :        * @param __c A character to the locale-specific character set.
+     196              :        *
+     197              :        * @returns __c.
+     198              :        */
+     199              :       char_type
+     200            0 :       translate(char_type __c) const
+     201            0 :       { return __c; }
+     202              : 
+     203              :       /**
+     204              :        * @brief Translates a character into a case-insensitive equivalent.
+     205              :        *
+     206              :        * @param __c A character to the locale-specific character set.
+     207              :        *
+     208              :        * @returns the locale-specific lower-case equivalent of __c.
+     209              :        * @throws std::bad_cast if the imbued locale does not support the ctype
+     210              :        *         facet.
+     211              :        */
+     212              :       char_type
+     213            0 :       translate_nocase(char_type __c) const
+     214              :       {
+     215              :         typedef std::ctype<char_type> __ctype_type;
+     216            0 :         const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
+     217            0 :         return __fctyp.tolower(__c);
+     218              :       }
+     219              : 
+     220              :       /**
+     221              :        * @brief Gets a sort key for a character sequence.
+     222              :        *
+     223              :        * @param __first beginning of the character sequence.
+     224              :        * @param __last  one-past-the-end of the character sequence.
+     225              :        *
+     226              :        * Returns a sort key for the character sequence designated by the
+     227              :        * iterator range [F1, F2) such that if the character sequence [G1, G2)
+     228              :        * sorts before the character sequence [H1, H2) then
+     229              :        * v.transform(G1, G2) < v.transform(H1, H2).
+     230              :        *
+     231              :        * What this really does is provide a more efficient way to compare a
+     232              :        * string to multiple other strings in locales with fancy collation
+     233              :        * rules and equivalence classes.
+     234              :        *
+     235              :        * @returns a locale-specific sort key equivalent to the input range.
+     236              :        *
+     237              :        * @throws std::bad_cast if the current locale does not have a collate
+     238              :        *         facet.
+     239              :        */
+     240              :       template<typename _Fwd_iter>
+     241              :         string_type
+     242            0 :         transform(_Fwd_iter __first, _Fwd_iter __last) const
+     243              :         {
+     244              :           typedef std::collate<char_type> __collate_type;
+     245            0 :           const __collate_type& __fclt(use_facet<__collate_type>(_M_locale));
+     246            0 :           string_type __s(__first, __last);
+     247            0 :           return __fclt.transform(__s.data(), __s.data() + __s.size());
+     248            0 :         }
+     249              : 
+     250              :       /**
+     251              :        * @brief Gets a sort key for a character sequence, independent of case.
+     252              :        *
+     253              :        * @param __first beginning of the character sequence.
+     254              :        * @param __last  one-past-the-end of the character sequence.
+     255              :        *
+     256              :        * Effects: if typeid(use_facet<collate<_Ch_type> >) ==
+     257              :        * typeid(collate_byname<_Ch_type>) and the form of the sort key
+     258              :        * returned by collate_byname<_Ch_type>::transform(__first, __last)
+     259              :        * is known and can be converted into a primary sort key
+     260              :        * then returns that key, otherwise returns an empty string.
+     261              :        *
+     262              :        * @todo Implement this function correctly.
+     263              :        */
+     264              :       template<typename _Fwd_iter>
+     265              :         string_type
+     266            0 :         transform_primary(_Fwd_iter __first, _Fwd_iter __last) const
+     267              :         {
+     268              :           // TODO : this is not entirely correct.
+     269              :           // This function requires extra support from the platform.
+     270              :           //
+     271              :           // Read http://gcc.gnu.org/ml/libstdc++/2013-09/msg00117.html and
+     272              :           // http://www.open-std.org/Jtc1/sc22/wg21/docs/papers/2003/n1429.htm
+     273              :           // for details.
+     274              :           typedef std::ctype<char_type> __ctype_type;
+     275            0 :           const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
+     276            0 :           _GLIBCXX_STD_C::vector<char_type> __s(__first, __last);
+     277            0 :           __fctyp.tolower(__s.data(), __s.data() + __s.size());
+     278            0 :           return this->transform(__s.data(), __s.data() + __s.size());
+     279            0 :         }
+     280              : 
+     281              :       /**
+     282              :        * @brief Gets a collation element by name.
+     283              :        *
+     284              :        * @param __first beginning of the collation element name.
+     285              :        * @param __last  one-past-the-end of the collation element name.
+     286              :        *
+     287              :        * @returns a sequence of one or more characters that represents the
+     288              :        * collating element consisting of the character sequence designated by
+     289              :        * the iterator range [__first, __last). Returns an empty string if the
+     290              :        * character sequence is not a valid collating element.
+     291              :        */
+     292              :       template<typename _Fwd_iter>
+     293              :         string_type
+     294              :         lookup_collatename(_Fwd_iter __first, _Fwd_iter __last) const;
+     295              : 
+     296              :       /**
+     297              :        * @brief Maps one or more characters to a named character
+     298              :        *        classification.
+     299              :        *
+     300              :        * @param __first beginning of the character sequence.
+     301              :        * @param __last  one-past-the-end of the character sequence.
+     302              :        * @param __icase ignores the case of the classification name.
+     303              :        *
+     304              :        * @returns an unspecified value that represents the character
+     305              :        * classification named by the character sequence designated by
+     306              :        * the iterator range [__first, __last). If @p icase is true,
+     307              :        * the returned mask identifies the classification regardless of
+     308              :        * the case of the characters to be matched (for example,
+     309              :        * [[:lower:]] is the same as [[:alpha:]]), otherwise a
+     310              :        * case-dependent classification is returned.  The value
+     311              :        * returned shall be independent of the case of the characters
+     312              :        * in the character sequence. If the name is not recognized then
+     313              :        * returns a value that compares equal to 0.
+     314              :        *
+     315              :        * At least the following names (or their wide-character equivalent) are
+     316              :        * supported.
+     317              :        * - d
+     318              :        * - w
+     319              :        * - s
+     320              :        * - alnum
+     321              :        * - alpha
+     322              :        * - blank
+     323              :        * - cntrl
+     324              :        * - digit
+     325              :        * - graph
+     326              :        * - lower
+     327              :        * - print
+     328              :        * - punct
+     329              :        * - space
+     330              :        * - upper
+     331              :        * - xdigit
+     332              :        */
+     333              :       template<typename _Fwd_iter>
+     334              :         char_class_type
+     335              :         lookup_classname(_Fwd_iter __first, _Fwd_iter __last,
+     336              :                          bool __icase = false) const;
+     337              : 
+     338              :       /**
+     339              :        * @brief Determines if @p c is a member of an identified class.
+     340              :        *
+     341              :        * @param __c a character.
+     342              :        * @param __f a class type (as returned from lookup_classname).
+     343              :        *
+     344              :        * @returns true if the character @p __c is a member of the classification
+     345              :        * represented by @p __f, false otherwise.
+     346              :        *
+     347              :        * @throws std::bad_cast if the current locale does not have a ctype
+     348              :        *         facet.
+     349              :        */
+     350              :       bool
+     351              :       isctype(_Ch_type __c, char_class_type __f) const;
+     352              : 
+     353              :       /**
+     354              :        * @brief Converts a digit to an int.
+     355              :        *
+     356              :        * @param __ch    a character representing a digit.
+     357              :        * @param __radix the radix if the numeric conversion (limited to 8, 10,
+     358              :        *              or 16).
+     359              :        *
+     360              :        * @returns the value represented by the digit __ch in base radix if the
+     361              :        * character __ch is a valid digit in base radix; otherwise returns -1.
+     362              :        */
+     363              :       int
+     364              :       value(_Ch_type __ch, int __radix) const;
+     365              : 
+     366              :       /**
+     367              :        * @brief Imbues the regex_traits object with a copy of a new locale.
+     368              :        *
+     369              :        * @param __loc A locale.
+     370              :        *
+     371              :        * @returns a copy of the previous locale in use by the regex_traits
+     372              :        *          object.
+     373              :        *
+     374              :        * @note Calling imbue with a different locale than the one currently in
+     375              :        *       use invalidates all cached data held by *this.
+     376              :        */
+     377              :       locale_type
+     378            0 :       imbue(locale_type __loc)
+     379              :       {
+     380            0 :         std::swap(_M_locale, __loc);
+     381            0 :         return __loc;
+     382              :       }
+     383              : 
+     384              :       /**
+     385              :        * @brief Gets a copy of the current locale in use by the regex_traits
+     386              :        * object.
+     387              :        */
+     388              :       locale_type
+     389            0 :       getloc() const
+     390            0 :       { return _M_locale; }
+     391              : 
+     392              :     protected:
+     393              :       locale_type _M_locale;
+     394              :     };
+     395              : 
+     396              :   // [7.8] Class basic_regex
+     397              :   /**
+     398              :    * @brief A regular expression
+     399              :    *
+     400              :    * Specializations of this class template represent regular expressions
+     401              :    * constructed from sequences of character type `_Ch_type`.
+     402              :    * Use the `std::regex` typedef for `std::basic_regex<char>`.
+     403              :    *
+     404              :    * A character sequence passed to the constructor will be parsed according
+     405              :    * to the chosen grammar, and used to create a state machine representing
+     406              :    * the regular expression. The regex object can then be passed to algorithms
+     407              :    * such as `std::regex_match` to match sequences of characters.
+     408              :    *
+     409              :    * The `syntax_option_type` flag passed to the constructor selects from
+     410              :    * one of the supported regular expression grammars. The default is
+     411              :    * `ECMAScript` and the others are `basic`, `extended`, `awk`, `grep`, and
+     412              :    * `egrep`, which are variations on POSIX regular expressions.
+     413              :    *
+     414              :    * @headerfile regex
+     415              :    * @since C++11
+     416              :    */
+     417              :   template<typename _Ch_type, typename _Rx_traits = regex_traits<_Ch_type>>
+     418              :     class basic_regex
+     419              :     {
+     420              :     public:
+     421              :       static_assert(is_same<_Ch_type, typename _Rx_traits::char_type>::value,
+     422              :                     "regex traits class must have the same char_type");
+     423              : 
+     424              :       // types:
+     425              :       typedef _Ch_type                            value_type;
+     426              :       typedef _Rx_traits                          traits_type;
+     427              :       typedef typename traits_type::string_type   string_type;
+     428              :       typedef regex_constants::syntax_option_type flag_type;
+     429              :       typedef typename traits_type::locale_type   locale_type;
+     430              : 
+     431              :       /**
+     432              :        * @name Constants
+     433              :        * std [28.8.1](1)
+     434              :        */
+     435              :       ///@{
+     436              :       static constexpr flag_type icase = regex_constants::icase;
+     437              :       static constexpr flag_type nosubs = regex_constants::nosubs;
+     438              :       static constexpr flag_type optimize = regex_constants::optimize;
+     439              :       static constexpr flag_type collate = regex_constants::collate;
+     440              :       static constexpr flag_type ECMAScript = regex_constants::ECMAScript;
+     441              :       static constexpr flag_type basic = regex_constants::basic;
+     442              :       static constexpr flag_type extended = regex_constants::extended;
+     443              :       static constexpr flag_type awk = regex_constants::awk;
+     444              :       static constexpr flag_type grep = regex_constants::grep;
+     445              :       static constexpr flag_type egrep = regex_constants::egrep;
+     446              : #if __cplusplus >= 201703L || !defined __STRICT_ANSI__
+     447              :       static constexpr flag_type multiline = regex_constants::multiline;
+     448              : #endif
+     449              :       ///@}
+     450              : 
+     451              :       // [7.8.2] construct/copy/destroy
+     452              :       /**
+     453              :        * Constructs a basic regular expression that does not match any
+     454              :        * character sequence.
+     455              :        */
+     456              :       basic_regex() noexcept
+     457              :       : _M_flags(ECMAScript), _M_loc(), _M_automaton(nullptr)
+     458              :       { }
+     459              : 
+     460              :       /**
+     461              :        * @brief Constructs a basic regular expression from the
+     462              :        * sequence [__p, __p + char_traits<_Ch_type>::length(__p))
+     463              :        * interpreted according to the flags in @p __f.
+     464              :        *
+     465              :        * @param __p A pointer to the start of a C-style null-terminated string
+     466              :        *          containing a regular expression.
+     467              :        * @param __f Flags indicating the syntax rules and options.
+     468              :        *
+     469              :        * @throws regex_error if @p __p is not a valid regular expression.
+     470              :        */
+     471              :       explicit
+     472            0 :       basic_regex(const _Ch_type* __p, flag_type __f = ECMAScript)
+     473            0 :       { _M_compile(__p, __p + _Rx_traits::length(__p), __f); }
+     474              : 
+     475              :       /**
+     476              :        * @brief Constructs a basic regular expression from the sequence
+     477              :        * [p, p + len) interpreted according to the flags in @p f.
+     478              :        *
+     479              :        * @param __p   A pointer to the start of a string containing a regular
+     480              :        *              expression.
+     481              :        * @param __len The length of the string containing the regular
+     482              :        *              expression.
+     483              :        * @param __f   Flags indicating the syntax rules and options.
+     484              :        *
+     485              :        * @throws regex_error if @p __p is not a valid regular expression.
+     486              :        */
+     487              :       basic_regex(const _Ch_type* __p, std::size_t __len,
+     488              :                   flag_type __f = ECMAScript)
+     489              :       {
+     490              :         __glibcxx_requires_string_len(__p, __len);
+     491              :         _M_compile(__p, __p + __len, __f);
+     492              :       }
+     493              : 
+     494              :       /**
+     495              :        * @brief Copy-constructs a basic regular expression.
+     496              :        *
+     497              :        * @param __rhs A @p regex object.
+     498              :        */
+     499              :       basic_regex(const basic_regex& __rhs) = default;
+     500              : 
+     501              :       /**
+     502              :        * @brief Move-constructs a basic regular expression.
+     503              :        *
+     504              :        * @param __rhs A @p regex object.
+     505              :        */
+     506              :       basic_regex(basic_regex&& __rhs) noexcept = default;
+     507              : 
+     508              :       /**
+     509              :        * @brief Constructs a basic regular expression from the string
+     510              :        * @p s interpreted according to the flags in @p f.
+     511              :        *
+     512              :        * @param __s A string containing a regular expression.
+     513              :        * @param __f Flags indicating the syntax rules and options.
+     514              :        *
+     515              :        * @throws regex_error if @p __s is not a valid regular expression.
+     516              :        */
+     517              :       template<typename _Ch_traits, typename _Ch_alloc>
+     518              :         explicit
+     519              :         basic_regex(const std::basic_string<_Ch_type, _Ch_traits,
+     520              :                                             _Ch_alloc>& __s,
+     521              :                     flag_type __f = ECMAScript)
+     522              :         { _M_compile(__s.data(), __s.data() + __s.size(), __f); }
+     523              : 
+     524              :       /**
+     525              :        * @brief Constructs a basic regular expression from the range
+     526              :        * [first, last) interpreted according to the flags in @p f.
+     527              :        *
+     528              :        * @param __first The start of a range containing a valid regular
+     529              :        *                expression.
+     530              :        * @param __last  The end of a range containing a valid regular
+     531              :        *                expression.
+     532              :        * @param __f     The format flags of the regular expression.
+     533              :        *
+     534              :        * @throws regex_error if @p [__first, __last) is not a valid regular
+     535              :        *         expression.
+     536              :        */
+     537              :       template<typename _FwdIter>
+     538              :         basic_regex(_FwdIter __first, _FwdIter __last,
+     539              :                     flag_type __f = ECMAScript)
+     540              :         { this->assign(__first, __last, __f); }
+     541              : 
+     542              :       /**
+     543              :        * @brief Constructs a basic regular expression from an initializer list.
+     544              :        *
+     545              :        * @param __l  The initializer list.
+     546              :        * @param __f  The format flags of the regular expression.
+     547              :        *
+     548              :        * @throws regex_error if @p __l is not a valid regular expression.
+     549              :        */
+     550              :       basic_regex(initializer_list<_Ch_type> __l, flag_type __f = ECMAScript)
+     551              :       { _M_compile(__l.begin(), __l.end(), __f); }
+     552              : 
+     553              :       /**
+     554              :        * @brief Destroys a basic regular expression.
+     555              :        */
+     556            0 :       ~basic_regex()
+     557            0 :       { }
+     558              : 
+     559              :       /**
+     560              :        * @brief Assigns one regular expression to another.
+     561              :        */
+     562              :       basic_regex&
+     563              :       operator=(const basic_regex&) = default;
+     564              : 
+     565              :       /**
+     566              :        * @brief Move-assigns one regular expression to another.
+     567              :        */
+     568              :       basic_regex&
+     569              :       operator=(basic_regex&&) = default;
+     570              : 
+     571              :       /**
+     572              :        * @brief Replaces a regular expression with a new one constructed from
+     573              :        * a C-style null-terminated string.
+     574              :        *
+     575              :        * @param __p A pointer to the start of a null-terminated C-style string
+     576              :        *        containing a regular expression.
+     577              :        */
+     578              :       basic_regex&
+     579              :       operator=(const _Ch_type* __p)
+     580              :       { return this->assign(__p); }
+     581              : 
+     582              :       /**
+     583              :        * @brief Replaces a regular expression with a new one constructed from
+     584              :        * an initializer list.
+     585              :        *
+     586              :        * @param __l  The initializer list.
+     587              :        *
+     588              :        * @throws regex_error if @p __l is not a valid regular expression.
+     589              :        */
+     590              :       basic_regex&
+     591              :       operator=(initializer_list<_Ch_type> __l)
+     592              :       { return this->assign(__l); }
+     593              : 
+     594              :       /**
+     595              :        * @brief Replaces a regular expression with a new one constructed from
+     596              :        * a string.
+     597              :        *
+     598              :        * @param __s A pointer to a string containing a regular expression.
+     599              :        */
+     600              :       template<typename _Ch_traits, typename _Alloc>
+     601              :         basic_regex&
+     602              :         operator=(const basic_string<_Ch_type, _Ch_traits, _Alloc>& __s)
+     603              :         { return this->assign(__s); }
+     604              : 
+     605              :       // [7.8.3] assign
+     606              :       /**
+     607              :        * @brief Assigns one regular expression to another.
+     608              :        *
+     609              :        * @param __rhs Another regular expression object.
+     610              :        */
+     611              :       basic_regex&
+     612              :       assign(const basic_regex& __rhs) noexcept
+     613              :       { return *this = __rhs; }
+     614              : 
+     615              :       /**
+     616              :        * @brief Move-assigns one regular expression to another.
+     617              :        *
+     618              :        * @param __rhs Another regular expression object.
+     619              :        */
+     620              :       basic_regex&
+     621              :       assign(basic_regex&& __rhs) noexcept
+     622              :       { return *this = std::move(__rhs); }
+     623              : 
+     624              :       /**
+     625              :        * @brief Assigns a new regular expression to a regex object from a
+     626              :        * C-style null-terminated string containing a regular expression
+     627              :        * pattern.
+     628              :        *
+     629              :        * @param __p     A pointer to a C-style null-terminated string containing
+     630              :        *              a regular expression pattern.
+     631              :        * @param __flags Syntax option flags.
+     632              :        *
+     633              :        * @throws regex_error if __p does not contain a valid regular
+     634              :        * expression pattern interpreted according to @p __flags.  If
+     635              :        * regex_error is thrown, *this remains unchanged.
+     636              :        */
+     637              :       basic_regex&
+     638              :       assign(const _Ch_type* __p, flag_type __flags = ECMAScript)
+     639              :       {
+     640              :         _M_compile(__p, __p + _Rx_traits::length(__p), __flags);
+     641              :         return *this;
+     642              :       }
+     643              : 
+     644              :       /**
+     645              :        * @brief Assigns a new regular expression to a regex object from a
+     646              :        * C-style string containing a regular expression pattern.
+     647              :        *
+     648              :        * @param __p     A pointer to a C-style string containing a
+     649              :        *                regular expression pattern.
+     650              :        * @param __len   The length of the regular expression pattern string.
+     651              :        * @param __flags Syntax option flags.
+     652              :        *
+     653              :        * @throws regex_error if p does not contain a valid regular
+     654              :        * expression pattern interpreted according to @p __flags.  If
+     655              :        * regex_error is thrown, *this remains unchanged.
+     656              :        */
+     657              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     658              :       // 3296. Inconsistent default argument for basic_regex<>::assign
+     659              :       basic_regex&
+     660              :       assign(const _Ch_type* __p, size_t __len, flag_type __flags = ECMAScript)
+     661              :       {
+     662              :         _M_compile(__p, __p + __len, __flags);
+     663              :         return *this;
+     664              :       }
+     665              : 
+     666              :       /**
+     667              :        * @brief Assigns a new regular expression to a regex object from a
+     668              :        * string containing a regular expression pattern.
+     669              :        *
+     670              :        * @param __s     A string containing a regular expression pattern.
+     671              :        * @param __flags Syntax option flags.
+     672              :        *
+     673              :        * @throws regex_error if __s does not contain a valid regular
+     674              :        * expression pattern interpreted according to @p __flags.  If
+     675              :        * regex_error is thrown, *this remains unchanged.
+     676              :        */
+     677              :       template<typename _Ch_traits, typename _Alloc>
+     678              :         basic_regex&
+     679              :         assign(const basic_string<_Ch_type, _Ch_traits, _Alloc>& __s,
+     680              :                flag_type __flags = ECMAScript)
+     681              :         {
+     682              :           _M_compile(__s.data(), __s.data() + __s.size(), __flags);
+     683              :           return *this;
+     684              :         }
+     685              : 
+     686              :       /**
+     687              :        * @brief Assigns a new regular expression to a regex object.
+     688              :        *
+     689              :        * @param __first The start of a range containing a valid regular
+     690              :        *                expression.
+     691              :        * @param __last  The end of a range containing a valid regular
+     692              :        *                expression.
+     693              :        * @param __flags Syntax option flags.
+     694              :        *
+     695              :        * @throws regex_error if p does not contain a valid regular
+     696              :        * expression pattern interpreted according to @p __flags.  If
+     697              :        * regex_error is thrown, the object remains unchanged.
+     698              :        */
+     699              :       template<typename _InputIterator>
+     700              :         basic_regex&
+     701              :         assign(_InputIterator __first, _InputIterator __last,
+     702              :                flag_type __flags = ECMAScript)
+     703              :         {
+     704              : #if __cpp_if_constexpr >= 201606L
+     705              :           using _ValT = typename iterator_traits<_InputIterator>::value_type;
+     706              :           if constexpr (__detail::__is_contiguous_iter<_InputIterator>::value
+     707              :                         && is_same_v<_ValT, value_type>)
+     708              :             {
+     709              :               __glibcxx_requires_valid_range(__first, __last);
+     710              :               if constexpr (is_pointer_v<_InputIterator>)
+     711              :                 _M_compile(__first, __last, __flags);
+     712              :               else // __normal_iterator<_T*, C>
+     713              :                 _M_compile(__first.base(), __last.base(), __flags);
+     714              :             }
+     715              :           else
+     716              : #endif
+     717              :           this->assign(string_type(__first, __last), __flags);
+     718              :           return *this;
+     719              :         }
+     720              : 
+     721              :       /**
+     722              :        * @brief Assigns a new regular expression to a regex object.
+     723              :        *
+     724              :        * @param __l     An initializer list representing a regular expression.
+     725              :        * @param __flags Syntax option flags.
+     726              :        *
+     727              :        * @throws regex_error if @p __l does not contain a valid
+     728              :        * regular expression pattern interpreted according to @p
+     729              :        * __flags.  If regex_error is thrown, the object remains
+     730              :        * unchanged.
+     731              :        */
+     732              :       basic_regex&
+     733              :       assign(initializer_list<_Ch_type> __l, flag_type __flags = ECMAScript)
+     734              :       {
+     735              :         _M_compile(__l.begin(), __l.end(), __flags);
+     736              :         return *this;
+     737              :       }
+     738              : 
+     739              :       // [7.8.4] const operations
+     740              :       /**
+     741              :        * @brief Gets the number of marked subexpressions within the regular
+     742              :        * expression.
+     743              :        */
+     744              :       unsigned int
+     745              :       mark_count() const noexcept
+     746              :       {
+     747              :         if (_M_automaton)
+     748              :           return _M_automaton->_M_sub_count() - 1;
+     749              :         return 0;
+     750              :       }
+     751              : 
+     752              :       /**
+     753              :        * @brief Gets the flags used to construct the regular expression
+     754              :        * or in the last call to assign().
+     755              :        */
+     756              :       flag_type
+     757            0 :       flags() const noexcept
+     758            0 :       { return _M_flags; }
+     759              : 
+     760              :       // [7.8.5] locale
+     761              :       /**
+     762              :        * @brief Imbues the regular expression object with the given locale.
+     763              :        *
+     764              :        * @param __loc A locale.
+     765              :        */
+     766              :       locale_type
+     767              :       imbue(locale_type __loc)
+     768              :       {
+     769              :         std::swap(__loc, _M_loc);
+     770              :         _M_automaton.reset();
+     771              :         return __loc;
+     772              :       }
+     773              : 
+     774              :       /**
+     775              :        * @brief Gets the locale currently imbued in the regular expression
+     776              :        *        object.
+     777              :        */
+     778              :       locale_type
+     779              :       getloc() const noexcept
+     780              :       { return _M_loc; }
+     781              : 
+     782              :       // [7.8.6] swap
+     783              :       /**
+     784              :        * @brief Swaps the contents of two regular expression objects.
+     785              :        *
+     786              :        * @param __rhs Another regular expression object.
+     787              :        */
+     788              :       void
+     789              :       swap(basic_regex& __rhs) noexcept
+     790              :       {
+     791              :         std::swap(_M_flags, __rhs._M_flags);
+     792              :         std::swap(_M_loc, __rhs._M_loc);
+     793              :         std::swap(_M_automaton, __rhs._M_automaton);
+     794              :       }
+     795              : 
+     796              : #ifdef _GLIBCXX_DEBUG
+     797              :       void
+     798              :       _M_dot(std::ostream& __ostr)
+     799              :       { _M_automaton->_M_dot(__ostr); }
+     800              : #endif
+     801              : 
+     802              :     private:
+     803              :       typedef std::shared_ptr<const __detail::_NFA<_Rx_traits>> _AutomatonPtr;
+     804              : 
+     805              :       void
+     806            0 :       _M_compile(const _Ch_type* __first, const _Ch_type* __last,
+     807              :                  flag_type __f)
+     808              :       {
+     809            0 :         __detail::_Compiler<_Rx_traits> __c(__first, __last, _M_loc, __f);
+     810            0 :         _M_automaton = __c._M_get_nfa();
+     811            0 :         _M_flags = __f;
+     812            0 :       }
+     813              : 
+     814              :       template<typename _Bp, typename _Ap, typename _Cp, typename _Rp>
+     815              :         friend bool
+     816              :         __detail::__regex_algo_impl(_Bp, _Bp, match_results<_Bp, _Ap>&,
+     817              :                                     const basic_regex<_Cp, _Rp>&,
+     818              :                                     regex_constants::match_flag_type,
+     819              :                                     __detail::_RegexExecutorPolicy, bool);
+     820              : 
+     821              :       template<typename, typename, typename, bool>
+     822              :         friend class __detail::_Executor;
+     823              : 
+     824              :       flag_type         _M_flags;
+     825              :       locale_type       _M_loc;
+     826              :       _AutomatonPtr     _M_automaton;
+     827              :     };
+     828              : 
+     829              : #if ! __cpp_inline_variables
+     830              :   template<typename _Ch, typename _Tr>
+     831              :     constexpr regex_constants::syntax_option_type
+     832              :     basic_regex<_Ch, _Tr>::icase;
+     833              : 
+     834              :   template<typename _Ch, typename _Tr>
+     835              :     constexpr regex_constants::syntax_option_type
+     836              :     basic_regex<_Ch, _Tr>::nosubs;
+     837              : 
+     838              :   template<typename _Ch, typename _Tr>
+     839              :     constexpr regex_constants::syntax_option_type
+     840              :     basic_regex<_Ch, _Tr>::optimize;
+     841              : 
+     842              :   template<typename _Ch, typename _Tr>
+     843              :     constexpr regex_constants::syntax_option_type
+     844              :     basic_regex<_Ch, _Tr>::collate;
+     845              : 
+     846              :   template<typename _Ch, typename _Tr>
+     847              :     constexpr regex_constants::syntax_option_type
+     848              :     basic_regex<_Ch, _Tr>::ECMAScript;
+     849              : 
+     850              :   template<typename _Ch, typename _Tr>
+     851              :     constexpr regex_constants::syntax_option_type
+     852              :     basic_regex<_Ch, _Tr>::basic;
+     853              : 
+     854              :   template<typename _Ch, typename _Tr>
+     855              :     constexpr regex_constants::syntax_option_type
+     856              :     basic_regex<_Ch, _Tr>::extended;
+     857              : 
+     858              :   template<typename _Ch, typename _Tr>
+     859              :     constexpr regex_constants::syntax_option_type
+     860              :     basic_regex<_Ch, _Tr>::awk;
+     861              : 
+     862              :   template<typename _Ch, typename _Tr>
+     863              :     constexpr regex_constants::syntax_option_type
+     864              :     basic_regex<_Ch, _Tr>::grep;
+     865              : 
+     866              :   template<typename _Ch, typename _Tr>
+     867              :     constexpr regex_constants::syntax_option_type
+     868              :     basic_regex<_Ch, _Tr>::egrep;
+     869              : #endif // ! C++17
+     870              : 
+     871              : #if __cpp_deduction_guides >= 201606
+     872              :   template<typename _ForwardIterator>
+     873              :     basic_regex(_ForwardIterator, _ForwardIterator,
+     874              :                 regex_constants::syntax_option_type = {})
+     875              :       -> basic_regex<typename iterator_traits<_ForwardIterator>::value_type>;
+     876              : #endif
+     877              : 
+     878              :   /** @brief Standard regular expressions. */
+     879              :   typedef basic_regex<char>    regex;
+     880              : 
+     881              : #ifdef _GLIBCXX_USE_WCHAR_T
+     882              :   /** @brief Standard wide-character regular expressions. */
+     883              :   typedef basic_regex<wchar_t> wregex;
+     884              : #endif
+     885              : 
+     886              : 
+     887              :   // [7.8.6] basic_regex swap
+     888              :   /**
+     889              :    * @brief Swaps the contents of two regular expression objects.
+     890              :    * @param __lhs First regular expression.
+     891              :    * @param __rhs Second regular expression.
+     892              :    * @relates basic_regex
+     893              :    */
+     894              :   template<typename _Ch_type, typename _Rx_traits>
+     895              :     inline void
+     896              :     swap(basic_regex<_Ch_type, _Rx_traits>& __lhs,
+     897              :          basic_regex<_Ch_type, _Rx_traits>& __rhs) noexcept
+     898              :     { __lhs.swap(__rhs); }
+     899              : 
+     900              : 
+     901              :   // C++11 28.9 [re.submatch] Class template sub_match
+     902              :   /**
+     903              :    * A sequence of characters matched by a particular marked sub-expression.
+     904              :    *
+     905              :    * An object of this class is essentially a pair of iterators marking a
+     906              :    * matched subexpression within a regular expression pattern match. Such
+     907              :    * objects can be converted to and compared with std::basic_string objects
+     908              :    * of the same character type as the pattern matched by the regular
+     909              :    * expression.
+     910              :    *
+     911              :    * A `sub_match<Iter>` has a public base class of type `pair<Iter, Iter>`,
+     912              :    * so inherits pair's data members named `first` and `second`.
+     913              :    * The iterators that make up the pair are the usual half-open interval
+     914              :    * referencing the actual original pattern matched.
+     915              :    *
+     916              :    * @headerfile regex
+     917              :    * @since C++11
+     918              :    */
+     919              :   template<typename _BiIter>
+     920              :     class sub_match
+     921              :     /// @cond undocumented
+     922              :     : public std::pair<_BiIter, _BiIter>
+     923              :     /// @endcond
+     924              :     {
+     925              :       typedef iterator_traits<_BiIter>                    __iter_traits;
+     926              :         
+     927              :     public:
+     928              :       typedef typename __iter_traits::value_type        value_type;
+     929              :       typedef typename __iter_traits::difference_type   difference_type;
+     930              :       typedef _BiIter                                   iterator;
+     931              :       typedef basic_string<value_type>                    string_type;
+     932              : 
+     933              :       _GLIBCXX_DOXYGEN_ONLY(iterator first; iterator second;)
+     934              : 
+     935              :       bool matched;
+     936              : 
+     937            0 :       constexpr sub_match() noexcept : matched() { }
+     938              : 
+     939              :       /// Gets the length of the matching sequence.
+     940              :       difference_type
+     941              :       length() const noexcept
+     942              :       { return this->matched ? std::distance(this->first, this->second) : 0; }
+     943              : 
+     944              :       /**
+     945              :        * @brief Gets the matching sequence as a string.
+     946              :        *
+     947              :        * @returns the matching sequence as a string.
+     948              :        *
+     949              :        * This is the implicit conversion operator.  It is identical to the
+     950              :        * str() member function except that it will want to pop up in
+     951              :        * unexpected places and cause a great deal of confusion and cursing
+     952              :        * from the unwary.
+     953              :        */
+     954              :       operator string_type() const
+     955              :       { return str(); }
+     956              : 
+     957              :       /**
+     958              :        * @brief Gets the matching sequence as a string.
+     959              :        *
+     960              :        * @returns the matching sequence as a string.
+     961              :        */
+     962              :       string_type
+     963              :       str() const
+     964              :       {
+     965              :         return this->matched
+     966              :           ? string_type(this->first, this->second)
+     967              :           : string_type();
+     968              :       }
+     969              : 
+     970              :       /**
+     971              :        * @brief Compares this and another matched sequence.
+     972              :        *
+     973              :        * @param __s Another matched sequence to compare to this one.
+     974              :        *
+     975              :        * @retval negative  This matched sequence will collate before `__s`.
+     976              :        * @retval zero      This matched sequence is equivalent to `__s`.
+     977              :        * @retval positive  This matched sequence will collate after `__s`.
+     978              :        */
+     979              :       int
+     980            0 :       compare(const sub_match& __s) const
+     981            0 :       { return this->_M_str().compare(__s._M_str()); }
+     982              : 
+     983              :       /**
+     984              :        * @{
+     985              :        * @brief Compares this `sub_match` to a string.
+     986              :        *
+     987              :        * @param __s A string to compare to this `sub_match`.
+     988              :        *
+     989              :        * @retval negative  This matched sequence will collate before `__s`.
+     990              :        * @retval zero      This matched sequence is equivalent to `__s`.
+     991              :        * @retval positive  This matched sequence will collate after `__s`.
+     992              :        */
+     993              :       int
+     994              :       compare(const string_type& __s) const
+     995              :       { return this->_M_str().compare(__s); }
+     996              : 
+     997              :       int
+     998              :       compare(const value_type* __s) const
+     999              :       { return this->_M_str().compare(__s); }
+    1000              :       /// @}
+    1001              : 
+    1002              :       /// @cond undocumented
+    1003              :       // Non-standard, used by comparison operators
+    1004              :       int
+    1005              :       _M_compare(const value_type* __s, size_t __n) const
+    1006              :       { return this->_M_str().compare({__s, __n}); }
+    1007              :       /// @endcond
+    1008              : 
+    1009              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1010              :       // 3204. sub_match::swap only swaps the base class
+    1011              :       /// Swap the values of two sub_match objects.
+    1012              :       void
+    1013              :       swap(sub_match& __s) noexcept(__is_nothrow_swappable<_BiIter>::value)
+    1014              :       {
+    1015              :         this->pair<_BiIter, _BiIter>::swap(__s);
+    1016              :         std::swap(matched, __s.matched);
+    1017              :       }
+    1018              : 
+    1019              :     private:
+    1020              :       // Simplified basic_string_view for C++11
+    1021              :       struct __string_view
+    1022              :       {
+    1023              :         using traits_type = typename string_type::traits_type;
+    1024              : 
+    1025            0 :         __string_view() = default;
+    1026              : 
+    1027            0 :         __string_view(const value_type* __s, size_t __n) noexcept
+    1028            0 :         : _M_data(__s), _M_len(__n) { }
+    1029              : 
+    1030              :         __string_view(const value_type* __s) noexcept
+    1031              :         : _M_data(__s), _M_len(traits_type::length(__s)) { }
+    1032              : 
+    1033              :         __string_view(const string_type& __s) noexcept
+    1034              :         : _M_data(__s.data()), _M_len(__s.length()) { }
+    1035              : 
+    1036              :         int
+    1037            0 :         compare(__string_view __s) const noexcept
+    1038              :         {
+    1039            0 :           if (const size_t __n = std::min(_M_len, __s._M_len))
+    1040            0 :             if (int __ret = traits_type::compare(_M_data, __s._M_data, __n))
+    1041            0 :               return __ret;
+    1042              :           using __limits = __gnu_cxx::__int_traits<int>;
+    1043            0 :           const difference_type __diff = _M_len - __s._M_len;
+    1044            0 :           if (__diff > __limits::__max)
+    1045            0 :             return __limits::__max;
+    1046            0 :           if (__diff < __limits::__min)
+    1047            0 :             return __limits::__min;
+    1048            0 :           return static_cast<int>(__diff);
+    1049              :         }
+    1050              : 
+    1051              :       private:
+    1052              :         const value_type* _M_data = nullptr;
+    1053              :         size_t _M_len = 0;
+    1054              :       };
+    1055              : 
+    1056              :       // Create a __string_view over the iterator range.
+    1057              :       template<typename _Iter = _BiIter>
+    1058              :         __enable_if_t<__detail::__is_contiguous_iter<_Iter>::value,
+    1059              :                       __string_view>
+    1060            0 :         _M_str() const noexcept
+    1061              :         {
+    1062            0 :           if (this->matched)
+    1063            0 :             if (size_t __len = this->second - this->first)
+    1064            0 :               return { std::__addressof(*this->first), __len };
+    1065            0 :           return {};
+    1066              :         }
+    1067              : 
+    1068              :       // Create a temporary string that can be converted to __string_view.
+    1069              :       template<typename _Iter = _BiIter>
+    1070              :         __enable_if_t<!__detail::__is_contiguous_iter<_Iter>::value,
+    1071              :                       string_type>
+    1072              :         _M_str() const
+    1073              :         { return str(); }
+    1074              :     };
+    1075              : 
+    1076              : 
+    1077              :   /** @brief Standard regex submatch over a C-style null-terminated string. */
+    1078              :   typedef sub_match<const char*>       csub_match;
+    1079              : 
+    1080              :   /** @brief Standard regex submatch over a standard string. */
+    1081              :   typedef sub_match<string::const_iterator>  ssub_match;
+    1082              : 
+    1083              : #ifdef _GLIBCXX_USE_WCHAR_T
+    1084              :   /** @brief Regex submatch over a C-style null-terminated wide string. */
+    1085              :   typedef sub_match<const wchar_t*>         wcsub_match;
+    1086              : 
+    1087              :   /** @brief Regex submatch over a standard wide string. */
+    1088              :   typedef sub_match<wstring::const_iterator> wssub_match;
+    1089              : #endif
+    1090              : 
+    1091              :   // [7.9.2] sub_match non-member operators
+    1092              : 
+    1093              :   /// @relates sub_match @{
+    1094              : 
+    1095              :   /**
+    1096              :    * @brief Tests the equivalence of two regular expression submatches.
+    1097              :    * @param __lhs First regular expression submatch.
+    1098              :    * @param __rhs Second regular expression submatch.
+    1099              :    * @returns true if @a __lhs  is equivalent to @a __rhs, false otherwise.
+    1100              :    */
+    1101              :   template<typename _BiIter>
+    1102              :     inline bool
+    1103            0 :     operator==(const sub_match<_BiIter>& __lhs, const sub_match<_BiIter>& __rhs)
+    1104            0 :     { return __lhs.compare(__rhs) == 0; }
+    1105              : 
+    1106              : #if __cpp_lib_three_way_comparison
+    1107              :   /**
+    1108              :    * @brief Three-way comparison of two regular expression submatches.
+    1109              :    * @param __lhs First regular expression submatch.
+    1110              :    * @param __rhs Second regular expression submatch.
+    1111              :    * @returns A value indicating whether `__lhs` is less than, equal to,
+    1112              :    *          greater than, or incomparable with `__rhs`.
+    1113              :    */
+    1114              :   template<typename _BiIter>
+    1115              :     inline auto
+    1116              :     operator<=>(const sub_match<_BiIter>& __lhs,
+    1117              :                 const sub_match<_BiIter>& __rhs)
+    1118              :     noexcept(__detail::__is_contiguous_iter<_BiIter>::value)
+    1119              :     {
+    1120              :       using _Tr = char_traits<typename iterator_traits<_BiIter>::value_type>;
+    1121              :       return __detail::__char_traits_cmp_cat<_Tr>(__lhs.compare(__rhs));
+    1122              :     }
+    1123              : #else
+    1124              :   /**
+    1125              :    * @brief Tests the inequivalence of two regular expression submatches.
+    1126              :    * @param __lhs First regular expression submatch.
+    1127              :    * @param __rhs Second regular expression submatch.
+    1128              :    * @returns true if @a __lhs  is not equivalent to @a __rhs, false otherwise.
+    1129              :    */
+    1130              :   template<typename _BiIter>
+    1131              :     inline bool
+    1132              :     operator!=(const sub_match<_BiIter>& __lhs, const sub_match<_BiIter>& __rhs)
+    1133              :     { return __lhs.compare(__rhs) != 0; }
+    1134              : 
+    1135              :   /**
+    1136              :    * @brief Tests the ordering of two regular expression submatches.
+    1137              :    * @param __lhs First regular expression submatch.
+    1138              :    * @param __rhs Second regular expression submatch.
+    1139              :    * @returns true if @a __lhs precedes @a __rhs, false otherwise.
+    1140              :    */
+    1141              :   template<typename _BiIter>
+    1142              :     inline bool
+    1143              :     operator<(const sub_match<_BiIter>& __lhs, const sub_match<_BiIter>& __rhs)
+    1144              :     { return __lhs.compare(__rhs) < 0; }
+    1145              : 
+    1146              :   /**
+    1147              :    * @brief Tests the ordering of two regular expression submatches.
+    1148              :    * @param __lhs First regular expression submatch.
+    1149              :    * @param __rhs Second regular expression submatch.
+    1150              :    * @returns true if @a __lhs does not succeed @a __rhs, false otherwise.
+    1151              :    */
+    1152              :   template<typename _BiIter>
+    1153              :     inline bool
+    1154              :     operator<=(const sub_match<_BiIter>& __lhs, const sub_match<_BiIter>& __rhs)
+    1155              :     { return __lhs.compare(__rhs) <= 0; }
+    1156              : 
+    1157              :   /**
+    1158              :    * @brief Tests the ordering of two regular expression submatches.
+    1159              :    * @param __lhs First regular expression submatch.
+    1160              :    * @param __rhs Second regular expression submatch.
+    1161              :    * @returns true if @a __lhs does not precede @a __rhs, false otherwise.
+    1162              :    */
+    1163              :   template<typename _BiIter>
+    1164              :     inline bool
+    1165              :     operator>=(const sub_match<_BiIter>& __lhs, const sub_match<_BiIter>& __rhs)
+    1166              :     { return __lhs.compare(__rhs) >= 0; }
+    1167              : 
+    1168              :   /**
+    1169              :    * @brief Tests the ordering of two regular expression submatches.
+    1170              :    * @param __lhs First regular expression submatch.
+    1171              :    * @param __rhs Second regular expression submatch.
+    1172              :    * @returns true if @a __lhs succeeds @a __rhs, false otherwise.
+    1173              :    */
+    1174              :   template<typename _BiIter>
+    1175              :     inline bool
+    1176              :     operator>(const sub_match<_BiIter>& __lhs, const sub_match<_BiIter>& __rhs)
+    1177              :     { return __lhs.compare(__rhs) > 0; }
+    1178              : #endif // three-way comparison
+    1179              : 
+    1180              :   /// @cond undocumented
+    1181              : 
+    1182              :   // Alias for a basic_string that can be compared to a sub_match.
+    1183              :   template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+    1184              :     using __sub_match_string = basic_string<
+    1185              :                               typename iterator_traits<_Bi_iter>::value_type,
+    1186              :                               _Ch_traits, _Ch_alloc>;
+    1187              :   /// @endcond
+    1188              : 
+    1189              : #if ! __cpp_lib_three_way_comparison
+    1190              :   /**
+    1191              :    * @brief Tests the equivalence of a string and a regular expression
+    1192              :    *        submatch.
+    1193              :    * @param __lhs A string.
+    1194              :    * @param __rhs A regular expression submatch.
+    1195              :    * @returns true if @a __lhs  is equivalent to @a __rhs, false otherwise.
+    1196              :    */
+    1197              :   template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+    1198              :     inline bool
+    1199              :     operator==(const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs,
+    1200              :                const sub_match<_Bi_iter>& __rhs)
+    1201              :     { return __rhs._M_compare(__lhs.data(), __lhs.size()) == 0; }
+    1202              : 
+    1203              :   /**
+    1204              :    * @brief Tests the inequivalence of a string and a regular expression
+    1205              :    *        submatch.
+    1206              :    * @param __lhs A string.
+    1207              :    * @param __rhs A regular expression submatch.
+    1208              :    * @returns true if @a __lhs  is not equivalent to @a __rhs, false otherwise.
+    1209              :    */
+    1210              :   template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+    1211              :     inline bool
+    1212              :     operator!=(const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs,
+    1213              :                const sub_match<_Bi_iter>& __rhs)
+    1214              :     { return !(__lhs == __rhs); }
+    1215              : 
+    1216              :   /**
+    1217              :    * @brief Tests the ordering of a string and a regular expression submatch.
+    1218              :    * @param __lhs A string.
+    1219              :    * @param __rhs A regular expression submatch.
+    1220              :    * @returns true if @a __lhs precedes @a __rhs, false otherwise.
+    1221              :    */
+    1222              :   template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+    1223              :     inline bool
+    1224              :     operator<(const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs,
+    1225              :               const sub_match<_Bi_iter>& __rhs)
+    1226              :     { return __rhs._M_compare(__lhs.data(), __lhs.size()) > 0; }
+    1227              : 
+    1228              :   /**
+    1229              :    * @brief Tests the ordering of a string and a regular expression submatch.
+    1230              :    * @param __lhs A string.
+    1231              :    * @param __rhs A regular expression submatch.
+    1232              :    * @returns true if @a __lhs succeeds @a __rhs, false otherwise.
+    1233              :    */
+    1234              :   template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+    1235              :     inline bool
+    1236              :     operator>(const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs,
+    1237              :               const sub_match<_Bi_iter>& __rhs)
+    1238              :     { return __rhs < __lhs; }
+    1239              : 
+    1240              :   /**
+    1241              :    * @brief Tests the ordering of a string and a regular expression submatch.
+    1242              :    * @param __lhs A string.
+    1243              :    * @param __rhs A regular expression submatch.
+    1244              :    * @returns true if @a __lhs does not precede @a __rhs, false otherwise.
+    1245              :    */
+    1246              :   template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+    1247              :     inline bool
+    1248              :     operator>=(const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs,
+    1249              :                const sub_match<_Bi_iter>& __rhs)
+    1250              :     { return !(__lhs < __rhs); }
+    1251              : 
+    1252              :   /**
+    1253              :    * @brief Tests the ordering of a string and a regular expression submatch.
+    1254              :    * @param __lhs A string.
+    1255              :    * @param __rhs A regular expression submatch.
+    1256              :    * @returns true if @a __lhs does not succeed @a __rhs, false otherwise.
+    1257              :    */
+    1258              :   template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+    1259              :     inline bool
+    1260              :     operator<=(const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs,
+    1261              :                const sub_match<_Bi_iter>& __rhs)
+    1262              :     { return !(__rhs < __lhs); }
+    1263              : #endif // three-way comparison
+    1264              : 
+    1265              :   /**
+    1266              :    * @brief Tests the equivalence of a regular expression submatch and a
+    1267              :    *        string.
+    1268              :    * @param __lhs A regular expression submatch.
+    1269              :    * @param __rhs A string.
+    1270              :    * @returns true if @a __lhs is equivalent to @a __rhs, false otherwise.
+    1271              :    */
+    1272              :   template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+    1273              :     inline bool
+    1274              :     operator==(const sub_match<_Bi_iter>& __lhs,
+    1275              :                const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __rhs)
+    1276              :     { return __lhs._M_compare(__rhs.data(), __rhs.size()) == 0; }
+    1277              : 
+    1278              : #if __cpp_lib_three_way_comparison
+    1279              :   /**
+    1280              :    * @brief Three-way comparison of a regular expression submatch and a string.
+    1281              :    * @param __lhs A regular expression submatch.
+    1282              :    * @param __rhs A string.
+    1283              :    * @returns A value indicating whether `__lhs` is less than, equal to,
+    1284              :    *          greater than, or incomparable with `__rhs`.
+    1285              :    */
+    1286              :   template<typename _Bi_iter, typename _Ch_traits, typename _Alloc>
+    1287              :     inline auto
+    1288              :     operator<=>(const sub_match<_Bi_iter>& __lhs,
+    1289              :                 const __sub_match_string<_Bi_iter, _Ch_traits, _Alloc>& __rhs)
+    1290              :     noexcept(__detail::__is_contiguous_iter<_Bi_iter>::value)
+    1291              :     {
+    1292              :       return __detail::__char_traits_cmp_cat<_Ch_traits>(
+    1293              :           __lhs._M_compare(__rhs.data(), __rhs.size()));
+    1294              :     }
+    1295              : #else
+    1296              :   /**
+    1297              :    * @brief Tests the inequivalence of a regular expression submatch and a
+    1298              :    *        string.
+    1299              :    * @param __lhs A regular expression submatch.
+    1300              :    * @param __rhs A string.
+    1301              :    * @returns true if @a __lhs is not equivalent to @a __rhs, false otherwise.
+    1302              :    */
+    1303              :   template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+    1304              :     inline bool
+    1305              :     operator!=(const sub_match<_Bi_iter>& __lhs,
+    1306              :                const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __rhs)
+    1307              :     { return !(__lhs == __rhs); }
+    1308              : 
+    1309              :   /**
+    1310              :    * @brief Tests the ordering of a regular expression submatch and a string.
+    1311              :    * @param __lhs A regular expression submatch.
+    1312              :    * @param __rhs A string.
+    1313              :    * @returns true if @a __lhs precedes @a __rhs, false otherwise.
+    1314              :    */
+    1315              :   template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+    1316              :     inline bool
+    1317              :     operator<(const sub_match<_Bi_iter>& __lhs,
+    1318              :               const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __rhs)
+    1319              :     { return __lhs._M_compare(__rhs.data(), __rhs.size()) < 0; }
+    1320              : 
+    1321              :   /**
+    1322              :    * @brief Tests the ordering of a regular expression submatch and a string.
+    1323              :    * @param __lhs A regular expression submatch.
+    1324              :    * @param __rhs A string.
+    1325              :    * @returns true if @a __lhs succeeds @a __rhs, false otherwise.
+    1326              :    */
+    1327              :   template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+    1328              :     inline bool
+    1329              :     operator>(const sub_match<_Bi_iter>& __lhs,
+    1330              :               const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __rhs)
+    1331              :     { return __rhs < __lhs; }
+    1332              : 
+    1333              :   /**
+    1334              :    * @brief Tests the ordering of a regular expression submatch and a string.
+    1335              :    * @param __lhs A regular expression submatch.
+    1336              :    * @param __rhs A string.
+    1337              :    * @returns true if @a __lhs does not precede @a __rhs, false otherwise.
+    1338              :    */
+    1339              :   template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+    1340              :     inline bool
+    1341              :     operator>=(const sub_match<_Bi_iter>& __lhs,
+    1342              :                const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __rhs)
+    1343              :     { return !(__lhs < __rhs); }
+    1344              : 
+    1345              :   /**
+    1346              :    * @brief Tests the ordering of a regular expression submatch and a string.
+    1347              :    * @param __lhs A regular expression submatch.
+    1348              :    * @param __rhs A string.
+    1349              :    * @returns true if @a __lhs does not succeed @a __rhs, false otherwise.
+    1350              :    */
+    1351              :   template<typename _Bi_iter, typename _Ch_traits, typename _Ch_alloc>
+    1352              :     inline bool
+    1353              :     operator<=(const sub_match<_Bi_iter>& __lhs,
+    1354              :                const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __rhs)
+    1355              :     { return !(__rhs < __lhs); }
+    1356              : 
+    1357              :   /**
+    1358              :    * @brief Tests the equivalence of a C string and a regular expression
+    1359              :    *        submatch.
+    1360              :    * @param __lhs A null-terminated string.
+    1361              :    * @param __rhs A regular expression submatch.
+    1362              :    * @returns true if @a __lhs  is equivalent to @a __rhs, false otherwise.
+    1363              :    */
+    1364              :   template<typename _Bi_iter>
+    1365              :     inline bool
+    1366              :     operator==(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
+    1367              :                const sub_match<_Bi_iter>& __rhs)
+    1368              :     { return __rhs.compare(__lhs) == 0; }
+    1369              : 
+    1370              :   /**
+    1371              :    * @brief Tests the inequivalence of a C string and a regular
+    1372              :    *        expression submatch.
+    1373              :    * @param __lhs A null-terminated string.
+    1374              :    * @param __rhs A regular expression submatch.
+    1375              :    * @returns true if @a __lhs is not equivalent to @a __rhs, false otherwise.
+    1376              :    */
+    1377              :   template<typename _Bi_iter>
+    1378              :     inline bool
+    1379              :     operator!=(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
+    1380              :                const sub_match<_Bi_iter>& __rhs)
+    1381              :     { return !(__lhs == __rhs); }
+    1382              : 
+    1383              :   /**
+    1384              :    * @brief Tests the ordering of a C string and a regular expression submatch.
+    1385              :    * @param __lhs A null-terminated string.
+    1386              :    * @param __rhs A regular expression submatch.
+    1387              :    * @returns true if @a __lhs precedes @a __rhs, false otherwise.
+    1388              :    */
+    1389              :   template<typename _Bi_iter>
+    1390              :     inline bool
+    1391              :     operator<(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
+    1392              :               const sub_match<_Bi_iter>& __rhs)
+    1393              :     { return __rhs.compare(__lhs) > 0; }
+    1394              : 
+    1395              :   /**
+    1396              :    * @brief Tests the ordering of a C string and a regular expression submatch.
+    1397              :    * @param __lhs A null-terminated string.
+    1398              :    * @param __rhs A regular expression submatch.
+    1399              :    * @returns true if @a __lhs succeeds @a __rhs, false otherwise.
+    1400              :    */
+    1401              :   template<typename _Bi_iter>
+    1402              :     inline bool
+    1403              :     operator>(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
+    1404              :               const sub_match<_Bi_iter>& __rhs)
+    1405              :     { return __rhs < __lhs; }
+    1406              : 
+    1407              :   /**
+    1408              :    * @brief Tests the ordering of a C string and a regular expression submatch.
+    1409              :    * @param __lhs A null-terminated string.
+    1410              :    * @param __rhs A regular expression submatch.
+    1411              :    * @returns true if @a __lhs does not precede @a __rhs, false otherwise.
+    1412              :    */
+    1413              :   template<typename _Bi_iter>
+    1414              :     inline bool
+    1415              :     operator>=(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
+    1416              :                const sub_match<_Bi_iter>& __rhs)
+    1417              :     { return !(__lhs < __rhs); }
+    1418              : 
+    1419              :   /**
+    1420              :    * @brief Tests the ordering of a C string and a regular expression submatch.
+    1421              :    * @param __lhs A null-terminated string.
+    1422              :    * @param __rhs A regular expression submatch.
+    1423              :    * @returns true if @a __lhs does not succeed @a __rhs, false otherwise.
+    1424              :    */
+    1425              :   template<typename _Bi_iter>
+    1426              :     inline bool
+    1427              :     operator<=(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
+    1428              :                const sub_match<_Bi_iter>& __rhs)
+    1429              :     { return !(__rhs < __lhs); }
+    1430              : #endif // three-way comparison
+    1431              : 
+    1432              :   /**
+    1433              :    * @brief Tests the equivalence of a regular expression submatch and a C
+    1434              :    *        string.
+    1435              :    * @param __lhs A regular expression submatch.
+    1436              :    * @param __rhs A null-terminated string.
+    1437              :    * @returns true if @a __lhs  is equivalent to @a __rhs, false otherwise.
+    1438              :    */
+    1439              :   template<typename _Bi_iter>
+    1440              :     inline bool
+    1441              :     operator==(const sub_match<_Bi_iter>& __lhs,
+    1442              :                typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+    1443              :     { return __lhs.compare(__rhs) == 0; }
+    1444              : 
+    1445              : #if __cpp_lib_three_way_comparison
+    1446              :   /**
+    1447              :    * @brief Three-way comparison of a regular expression submatch and a C
+    1448              :    *        string.
+    1449              :    * @param __lhs A regular expression submatch.
+    1450              :    * @param __rhs A null-terminated string.
+    1451              :    * @returns A value indicating whether `__lhs` is less than, equal to,
+    1452              :    *          greater than, or incomparable with `__rhs`.
+    1453              :    */
+    1454              :   template<typename _Bi_iter>
+    1455              :     inline auto
+    1456              :     operator<=>(const sub_match<_Bi_iter>& __lhs,
+    1457              :                 typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+    1458              :     noexcept(__detail::__is_contiguous_iter<_Bi_iter>::value)
+    1459              :     {
+    1460              :       using _Tr = char_traits<typename iterator_traits<_Bi_iter>::value_type>;
+    1461              :       return __detail::__char_traits_cmp_cat<_Tr>(__lhs.compare(__rhs));
+    1462              :     }
+    1463              : #else
+    1464              :   /**
+    1465              :    * @brief Tests the inequivalence of a regular expression submatch and a
+    1466              :    *        string.
+    1467              :    * @param __lhs A regular expression submatch.
+    1468              :    * @param __rhs A null-terminated string.
+    1469              :    * @returns true if @a __lhs is not equivalent to @a __rhs, false otherwise.
+    1470              :    */
+    1471              :   template<typename _Bi_iter>
+    1472              :     inline bool
+    1473              :     operator!=(const sub_match<_Bi_iter>& __lhs,
+    1474              :                typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+    1475              :     { return !(__lhs == __rhs); }
+    1476              : 
+    1477              :   /**
+    1478              :    * @brief Tests the ordering of a regular expression submatch and a C string.
+    1479              :    * @param __lhs A regular expression submatch.
+    1480              :    * @param __rhs A null-terminated string.
+    1481              :    * @returns true if @a __lhs precedes @a __rhs, false otherwise.
+    1482              :    */
+    1483              :   template<typename _Bi_iter>
+    1484              :     inline bool
+    1485              :     operator<(const sub_match<_Bi_iter>& __lhs,
+    1486              :               typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+    1487              :     { return __lhs.compare(__rhs) < 0; }
+    1488              : 
+    1489              :   /**
+    1490              :    * @brief Tests the ordering of a regular expression submatch and a C string.
+    1491              :    * @param __lhs A regular expression submatch.
+    1492              :    * @param __rhs A null-terminated string.
+    1493              :    * @returns true if @a __lhs succeeds @a __rhs, false otherwise.
+    1494              :    */
+    1495              :   template<typename _Bi_iter>
+    1496              :     inline bool
+    1497              :     operator>(const sub_match<_Bi_iter>& __lhs,
+    1498              :               typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+    1499              :     { return __rhs < __lhs; }
+    1500              : 
+    1501              :   /**
+    1502              :    * @brief Tests the ordering of a regular expression submatch and a C string.
+    1503              :    * @param __lhs A regular expression submatch.
+    1504              :    * @param __rhs A null-terminated string.
+    1505              :    * @returns true if @a __lhs does not precede @a __rhs, false otherwise.
+    1506              :    */
+    1507              :   template<typename _Bi_iter>
+    1508              :     inline bool
+    1509              :     operator>=(const sub_match<_Bi_iter>& __lhs,
+    1510              :                typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+    1511              :     { return !(__lhs < __rhs); }
+    1512              : 
+    1513              :   /**
+    1514              :    * @brief Tests the ordering of a regular expression submatch and a C string.
+    1515              :    * @param __lhs A regular expression submatch.
+    1516              :    * @param __rhs A null-terminated string.
+    1517              :    * @returns true if @a __lhs does not succeed @a __rhs, false otherwise.
+    1518              :    */
+    1519              :   template<typename _Bi_iter>
+    1520              :     inline bool
+    1521              :     operator<=(const sub_match<_Bi_iter>& __lhs,
+    1522              :                typename iterator_traits<_Bi_iter>::value_type const* __rhs)
+    1523              :     { return !(__rhs < __lhs); }
+    1524              : 
+    1525              :   /**
+    1526              :    * @brief Tests the equivalence of a character and a regular expression
+    1527              :    *        submatch.
+    1528              :    * @param __lhs A character.
+    1529              :    * @param __rhs A regular expression submatch.
+    1530              :    * @returns true if @a __lhs is equivalent to @a __rhs, false otherwise.
+    1531              :    */
+    1532              :   template<typename _Bi_iter>
+    1533              :     inline bool
+    1534              :     operator==(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
+    1535              :                const sub_match<_Bi_iter>& __rhs)
+    1536              :     { return __rhs._M_compare(std::__addressof(__lhs), 1) == 0; }
+    1537              : 
+    1538              :   /**
+    1539              :    * @brief Tests the inequivalence of a character and a regular expression
+    1540              :    *        submatch.
+    1541              :    * @param __lhs A character.
+    1542              :    * @param __rhs A regular expression submatch.
+    1543              :    * @returns true if @a __lhs is not equivalent to @a __rhs, false otherwise.
+    1544              :    */
+    1545              :   template<typename _Bi_iter>
+    1546              :     inline bool
+    1547              :     operator!=(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
+    1548              :                const sub_match<_Bi_iter>& __rhs)
+    1549              :     { return !(__lhs == __rhs); }
+    1550              : 
+    1551              :   /**
+    1552              :    * @brief Tests the ordering of a character and a regular expression
+    1553              :    *        submatch.
+    1554              :    * @param __lhs A character.
+    1555              :    * @param __rhs A regular expression submatch.
+    1556              :    * @returns true if @a __lhs precedes @a __rhs, false otherwise.
+    1557              :    */
+    1558              :   template<typename _Bi_iter>
+    1559              :     inline bool
+    1560              :     operator<(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
+    1561              :               const sub_match<_Bi_iter>& __rhs)
+    1562              :     { return __rhs._M_compare(std::__addressof(__lhs), 1) > 0; }
+    1563              : 
+    1564              :   /**
+    1565              :    * @brief Tests the ordering of a character and a regular expression
+    1566              :    *        submatch.
+    1567              :    * @param __lhs A character.
+    1568              :    * @param __rhs A regular expression submatch.
+    1569              :    * @returns true if @a __lhs succeeds @a __rhs, false otherwise.
+    1570              :    */
+    1571              :   template<typename _Bi_iter>
+    1572              :     inline bool
+    1573              :     operator>(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
+    1574              :               const sub_match<_Bi_iter>& __rhs)
+    1575              :     { return __rhs < __lhs; }
+    1576              : 
+    1577              :   /**
+    1578              :    * @brief Tests the ordering of a character and a regular expression
+    1579              :    *        submatch.
+    1580              :    * @param __lhs A character.
+    1581              :    * @param __rhs A regular expression submatch.
+    1582              :    * @returns true if @a __lhs does not precede @a __rhs, false otherwise.
+    1583              :    */
+    1584              :   template<typename _Bi_iter>
+    1585              :     inline bool
+    1586              :     operator>=(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
+    1587              :                const sub_match<_Bi_iter>& __rhs)
+    1588              :     { return !(__lhs < __rhs); }
+    1589              : 
+    1590              :   /**
+    1591              :    * @brief Tests the ordering of a character and a regular expression
+    1592              :    *        submatch.
+    1593              :    * @param __lhs A character.
+    1594              :    * @param __rhs A regular expression submatch.
+    1595              :    * @returns true if @a __lhs does not succeed @a __rhs, false otherwise.
+    1596              :    */
+    1597              :   template<typename _Bi_iter>
+    1598              :     inline bool
+    1599              :     operator<=(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
+    1600              :                const sub_match<_Bi_iter>& __rhs)
+    1601              :     { return !(__rhs < __lhs); }
+    1602              : #endif // three-way comparison
+    1603              : 
+    1604              :   /**
+    1605              :    * @brief Tests the equivalence of a regular expression submatch and a
+    1606              :    *        character.
+    1607              :    * @param __lhs A regular expression submatch.
+    1608              :    * @param __rhs A character.
+    1609              :    * @returns true if @a __lhs  is equivalent to @a __rhs, false otherwise.
+    1610              :    */
+    1611              :   template<typename _Bi_iter>
+    1612              :     inline bool
+    1613              :     operator==(const sub_match<_Bi_iter>& __lhs,
+    1614              :                typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+    1615              :     { return __lhs._M_compare(std::__addressof(__rhs), 1) == 0; }
+    1616              : 
+    1617              : #if __cpp_lib_three_way_comparison
+    1618              :   /**
+    1619              :    * @brief Three-way comparison of a regular expression submatch and a
+    1620              :    *        character.
+    1621              :    * @param __lhs A regular expression submatch.
+    1622              :    * @param __rhs A character.
+    1623              :    * @returns A value indicating whether `__lhs` is less than, equal to,
+    1624              :    *          greater than, or incomparable with `__rhs`.
+    1625              :    */
+    1626              : 
+    1627              :   template<typename _Bi_iter>
+    1628              :     inline auto
+    1629              :     operator<=>(const sub_match<_Bi_iter>& __lhs,
+    1630              :                 typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+    1631              :     noexcept(__detail::__is_contiguous_iter<_Bi_iter>::value)
+    1632              :     {
+    1633              :       using _Tr = char_traits<typename iterator_traits<_Bi_iter>::value_type>;
+    1634              :       return __detail::__char_traits_cmp_cat<_Tr>(
+    1635              :           __lhs._M_compare(std::__addressof(__rhs), 1));
+    1636              :     }
+    1637              : #else
+    1638              :   /**
+    1639              :    * @brief Tests the inequivalence of a regular expression submatch and a
+    1640              :    *        character.
+    1641              :    * @param __lhs A regular expression submatch.
+    1642              :    * @param __rhs A character.
+    1643              :    * @returns true if @a __lhs is not equivalent to @a __rhs, false otherwise.
+    1644              :    */
+    1645              :   template<typename _Bi_iter>
+    1646              :     inline bool
+    1647              :     operator!=(const sub_match<_Bi_iter>& __lhs,
+    1648              :                typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+    1649              :     { return !(__lhs == __rhs); }
+    1650              : 
+    1651              :   /**
+    1652              :    * @brief Tests the ordering of a regular expression submatch and a
+    1653              :    *        character.
+    1654              :    * @param __lhs A regular expression submatch.
+    1655              :    * @param __rhs A character.
+    1656              :    * @returns true if @a __lhs precedes @a __rhs, false otherwise.
+    1657              :    */
+    1658              :   template<typename _Bi_iter>
+    1659              :     inline bool
+    1660              :     operator<(const sub_match<_Bi_iter>& __lhs,
+    1661              :               typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+    1662              :     { return __lhs._M_compare(std::__addressof(__rhs), 1) < 0; }
+    1663              : 
+    1664              :   /**
+    1665              :    * @brief Tests the ordering of a regular expression submatch and a
+    1666              :    *        character.
+    1667              :    * @param __lhs A regular expression submatch.
+    1668              :    * @param __rhs A character.
+    1669              :    * @returns true if @a __lhs succeeds @a __rhs, false otherwise.
+    1670              :    */
+    1671              :   template<typename _Bi_iter>
+    1672              :     inline bool
+    1673              :     operator>(const sub_match<_Bi_iter>& __lhs,
+    1674              :               typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+    1675              :     { return __rhs < __lhs; }
+    1676              : 
+    1677              :   /**
+    1678              :    * @brief Tests the ordering of a regular expression submatch and a
+    1679              :    *        character.
+    1680              :    * @param __lhs A regular expression submatch.
+    1681              :    * @param __rhs A character.
+    1682              :    * @returns true if @a __lhs does not precede @a __rhs, false otherwise.
+    1683              :    */
+    1684              :   template<typename _Bi_iter>
+    1685              :     inline bool
+    1686              :     operator>=(const sub_match<_Bi_iter>& __lhs,
+    1687              :                typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+    1688              :     { return !(__lhs < __rhs); }
+    1689              : 
+    1690              :   /**
+    1691              :    * @brief Tests the ordering of a regular expression submatch and a
+    1692              :    *        character.
+    1693              :    * @param __lhs A regular expression submatch.
+    1694              :    * @param __rhs A character.
+    1695              :    * @returns true if @a __lhs does not succeed @a __rhs, false otherwise.
+    1696              :    */
+    1697              :   template<typename _Bi_iter>
+    1698              :     inline bool
+    1699              :     operator<=(const sub_match<_Bi_iter>& __lhs,
+    1700              :                typename iterator_traits<_Bi_iter>::value_type const& __rhs)
+    1701              :     { return !(__rhs < __lhs); }
+    1702              : #endif // three-way comparison
+    1703              : 
+    1704              :   /**
+    1705              :    * @brief Inserts a matched string into an output stream.
+    1706              :    *
+    1707              :    * @param __os The output stream.
+    1708              :    * @param __m  A submatch string.
+    1709              :    *
+    1710              :    * @returns the output stream with the submatch string inserted.
+    1711              :    */
+    1712              :   template<typename _Ch_type, typename _Ch_traits, typename _Bi_iter>
+    1713              :     inline
+    1714              :     basic_ostream<_Ch_type, _Ch_traits>&
+    1715              :     operator<<(basic_ostream<_Ch_type, _Ch_traits>& __os,
+    1716              :                const sub_match<_Bi_iter>& __m)
+    1717              :     { return __os << __m.str(); }
+    1718              : 
+    1719              :   /// @} relates sub_match
+    1720              : 
+    1721              :   // [7.10] Class template match_results
+    1722              : 
+    1723              :   /**
+    1724              :    * @brief The results of a match or search operation.
+    1725              :    *
+    1726              :    * A collection of character sequences representing the result of a regular
+    1727              :    * expression match.  Storage for the collection is allocated and freed as
+    1728              :    * necessary by the member functions of class template match_results.
+    1729              :    *
+    1730              :    * This class satisfies the Sequence requirements, with the exception that
+    1731              :    * only the operations defined for a const-qualified Sequence are supported.
+    1732              :    *
+    1733              :    * The sub_match object stored at index 0 represents sub-expression 0, i.e.
+    1734              :    * the whole match. In this case the %sub_match member matched is always true.
+    1735              :    * The sub_match object stored at index n denotes what matched the marked
+    1736              :    * sub-expression n within the matched expression. If the sub-expression n
+    1737              :    * participated in a regular expression match then the %sub_match member
+    1738              :    * matched evaluates to true, and members first and second denote the range
+    1739              :    * of characters [first, second) which formed that match. Otherwise matched
+    1740              :    * is false, and members first and second point to the end of the sequence
+    1741              :    * that was searched.
+    1742              :    *
+    1743              :    * @headerfile regex
+    1744              :    * @since C++11
+    1745              :    */
+    1746              :   template<typename _Bi_iter,
+    1747              :            typename _Alloc = allocator<sub_match<_Bi_iter> > >
+    1748              :     class match_results
+    1749              :     : private std::vector<sub_match<_Bi_iter>, _Alloc>
+    1750              :     {
+    1751              :     private:
+    1752              :       /*
+    1753              :        * The vector base is empty if this does not represent a match (!ready());
+    1754              :        * Otherwise if it's a match failure, it contains 3 elements:
+    1755              :        * [0] unmatched
+    1756              :        * [1] prefix
+    1757              :        * [2] suffix
+    1758              :        * Otherwise it contains n+4 elements where n is the number of marked
+    1759              :        * sub-expressions:
+    1760              :        * [0] entire match
+    1761              :        * [1] 1st marked subexpression
+    1762              :        * ...
+    1763              :        * [n] nth marked subexpression
+    1764              :        * [n+1] unmatched
+    1765              :        * [n+2] prefix
+    1766              :        * [n+3] suffix
+    1767              :        */
+    1768              :       typedef std::vector<sub_match<_Bi_iter>, _Alloc>     _Base_type;
+    1769              :       // In debug mode _Base_type is the debug vector, this is the unsafe one:
+    1770              :       typedef _GLIBCXX_STD_C::vector<sub_match<_Bi_iter>, _Alloc> _Unchecked;
+    1771              :       typedef std::iterator_traits<_Bi_iter>                 __iter_traits;
+    1772              :       typedef regex_constants::match_flag_type             match_flag_type;
+    1773              : 
+    1774              :     public:
+    1775              :       /**
+    1776              :        * @name 28.10 Public Types
+    1777              :        */
+    1778              :       ///@{
+    1779              :       typedef sub_match<_Bi_iter>                    value_type;
+    1780              :       typedef const value_type&                                const_reference;
+    1781              :       typedef value_type&                              reference;
+    1782              :       typedef typename _Base_type::const_iterator          const_iterator;
+    1783              :       typedef const_iterator                               iterator;
+    1784              :       typedef typename __iter_traits::difference_type      difference_type;
+    1785              :       typedef typename allocator_traits<_Alloc>::size_type size_type;
+    1786              :       typedef _Alloc                                       allocator_type;
+    1787              :       typedef typename __iter_traits::value_type           char_type;
+    1788              :       typedef std::basic_string<char_type>                   string_type;
+    1789              :       ///@}
+    1790              : 
+    1791              :     public:
+    1792              :       /**
+    1793              :        * @name 28.10.1 Construction, Copying, and Destruction
+    1794              :        */
+    1795              :       ///@{
+    1796              : 
+    1797              :       /**
+    1798              :        * @brief Constructs a default %match_results container.
+    1799              :        * @post size() returns 0 and str() returns an empty string.
+    1800              :        */
+    1801            0 :       match_results() : match_results(_Alloc()) { }
+    1802              : 
+    1803              :       /**
+    1804              :        * @brief Constructs a default %match_results container.
+    1805              :        * @post size() returns 0 and str() returns an empty string.
+    1806              :        */
+    1807              :       explicit
+    1808            0 :       match_results(const _Alloc& __a) noexcept
+    1809            0 :       : _Base_type(__a)
+    1810            0 :       { }
+    1811              : 
+    1812              :       /**
+    1813              :        * @brief Copy constructs a %match_results.
+    1814              :        */
+    1815              :       match_results(const match_results&) = default;
+    1816              : 
+    1817              :       /**
+    1818              :        * @brief Move constructs a %match_results.
+    1819              :        */
+    1820              :       match_results(match_results&&) noexcept = default;
+    1821              : 
+    1822              :       /**
+    1823              :        * @brief Assigns rhs to *this.
+    1824              :        */
+    1825              :       match_results&
+    1826            0 :       operator=(const match_results&) = default;
+    1827              : 
+    1828              :       /**
+    1829              :        * @brief Move-assigns rhs to *this.
+    1830              :        */
+    1831              :       match_results&
+    1832              :       operator=(match_results&&) = default;
+    1833              : 
+    1834              :       /**
+    1835              :        * @brief Destroys a %match_results object.
+    1836              :        */
+    1837            0 :       ~match_results() = default;
+    1838              : 
+    1839              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1840              :       // 2195. Missing constructors for match_results
+    1841              : 
+    1842              :       match_results(const match_results& __m, const _Alloc& __a)
+    1843              :       : _Base_type(__m, __a) { }
+    1844              : 
+    1845              :       match_results(match_results&& __m, const _Alloc& __a)
+    1846              :       noexcept(noexcept(_Base_type(std::move(__m), __a)))
+    1847              :       : _Base_type(std::move(__m), __a) { }
+    1848              : 
+    1849              :       ///@}
+    1850              : 
+    1851              :       // 28.10.2, state:
+    1852              :       /**
+    1853              :        * @brief Indicates if the %match_results is ready.
+    1854              :        * @retval true   The object has a fully-established result state.
+    1855              :        * @retval false  The object is not ready.
+    1856              :        */
+    1857            0 :       bool ready() const noexcept { return !_Unchecked::empty(); }
+    1858              : 
+    1859              :       /**
+    1860              :        * @name 28.10.2 Size
+    1861              :        */
+    1862              :       ///@{
+    1863              : 
+    1864              :       /**
+    1865              :        * @brief Gets the number of matches and submatches.
+    1866              :        *
+    1867              :        * The number of matches for a given regular expression will be either 0
+    1868              :        * if there was no match or mark_count() + 1 if a match was successful.
+    1869              :        * Some matches may be empty.
+    1870              :        *
+    1871              :        * @returns the number of matches found.
+    1872              :        */
+    1873              :       size_type
+    1874            0 :       size() const noexcept
+    1875            0 :       { return _Unchecked::empty() ? 0 : _Unchecked::size() - 3; }
+    1876              : 
+    1877              :       size_type
+    1878              :       max_size() const noexcept
+    1879              :       { return _Unchecked::max_size() - 3; }
+    1880              : 
+    1881              :       /**
+    1882              :        * @brief Indicates if the %match_results contains no results.
+    1883              :        * @retval true The %match_results object is empty.
+    1884              :        * @retval false The %match_results object is not empty.
+    1885              :        */
+    1886              :       _GLIBCXX_NODISCARD bool
+    1887            0 :       empty() const noexcept
+    1888            0 :       { return _Unchecked::size() <= 3; }
+    1889              : 
+    1890              :       ///@}
+    1891              : 
+    1892              :       /**
+    1893              :        * @name 28.10.4 Element Access
+    1894              :        */
+    1895              :       ///@{
+    1896              : 
+    1897              :       /**
+    1898              :        * @brief Gets the length of the indicated submatch.
+    1899              :        * @param __sub indicates the submatch.
+    1900              :        * @pre   ready() == true
+    1901              :        *
+    1902              :        * This function returns the length of the indicated submatch, or the
+    1903              :        * length of the entire match if @p __sub is zero (the default).
+    1904              :        */
+    1905              :       difference_type
+    1906              :       length(size_type __sub = 0) const
+    1907              :       { return (*this)[__sub].length(); }
+    1908              : 
+    1909              :       /**
+    1910              :        * @brief Gets the offset of the beginning of the indicated submatch.
+    1911              :        * @param __sub indicates the submatch.
+    1912              :        * @pre   ready() == true
+    1913              :        *
+    1914              :        * This function returns the offset from the beginning of the target
+    1915              :        * sequence to the beginning of the submatch, unless the value of @p __sub
+    1916              :        * is zero (the default), in which case this function returns the offset
+    1917              :        * from the beginning of the target sequence to the beginning of the
+    1918              :        * match.
+    1919              :        */
+    1920              :       difference_type
+    1921              :       position(size_type __sub = 0) const
+    1922              :       { return std::distance(_M_begin, (*this)[__sub].first); }
+    1923              : 
+    1924              :       /**
+    1925              :        * @brief Gets the match or submatch converted to a string type.
+    1926              :        * @param __sub indicates the submatch.
+    1927              :        * @pre   ready() == true
+    1928              :        *
+    1929              :        * This function gets the submatch (or match, if @p __sub is
+    1930              :        * zero) extracted from the target range and converted to the
+    1931              :        * associated string type.
+    1932              :        */
+    1933              :       string_type
+    1934              :       str(size_type __sub = 0) const
+    1935              :       { return string_type((*this)[__sub]); }
+    1936              : 
+    1937              :       /**
+    1938              :        * @brief Gets a %sub_match reference for the match or submatch.
+    1939              :        * @param __sub indicates the submatch.
+    1940              :        * @pre   ready() == true
+    1941              :        *
+    1942              :        * This function gets a reference to the indicated submatch, or
+    1943              :        * the entire match if @p __sub is zero.
+    1944              :        *
+    1945              :        * If @p __sub >= size() then this function returns a %sub_match with a
+    1946              :        * special value indicating no submatch.
+    1947              :        */
+    1948              :       const_reference
+    1949            0 :       operator[](size_type __sub) const
+    1950              :       {
+    1951            0 :         __glibcxx_assert( ready() );
+    1952            0 :         return __sub < size()
+    1953            0 :                ? _Unchecked::operator[](__sub)
+    1954            0 :                : _M_unmatched_sub();
+    1955              :       }
+    1956              : 
+    1957              :       /**
+    1958              :        * @brief Gets a %sub_match representing the match prefix.
+    1959              :        * @pre   ready() == true
+    1960              :        *
+    1961              :        * This function gets a reference to a %sub_match object representing the
+    1962              :        * part of the target range between the start of the target range and the
+    1963              :        * start of the match.
+    1964              :        */
+    1965              :       const_reference
+    1966            0 :       prefix() const
+    1967              :       {
+    1968            0 :         __glibcxx_assert( ready() );
+    1969            0 :         return !empty() ? _M_prefix() : _M_unmatched_sub();
+    1970              :       }
+    1971              : 
+    1972              :       /**
+    1973              :        * @brief Gets a %sub_match representing the match suffix.
+    1974              :        * @pre   ready() == true
+    1975              :        *
+    1976              :        * This function gets a reference to a %sub_match object representing the
+    1977              :        * part of the target range between the end of the match and the end of
+    1978              :        * the target range.
+    1979              :        */
+    1980              :       const_reference
+    1981            0 :       suffix() const
+    1982              :       {
+    1983            0 :         __glibcxx_assert( ready() );
+    1984            0 :         return !empty() ? _M_suffix() : _M_unmatched_sub();
+    1985              :       }
+    1986              : 
+    1987              :       /**
+    1988              :        * @brief Gets an iterator to the start of the %sub_match collection.
+    1989              :        */
+    1990              :       const_iterator
+    1991              :       begin() const noexcept
+    1992              :       { return _Base_type::begin(); }
+    1993              : 
+    1994              :       /**
+    1995              :        * @brief Gets an iterator to the start of the %sub_match collection.
+    1996              :        */
+    1997              :       const_iterator
+    1998              :       cbegin() const noexcept
+    1999              :       { return this->begin(); }
+    2000              : 
+    2001              :       /**
+    2002              :        * @brief Gets an iterator to one-past-the-end of the collection.
+    2003              :        */
+    2004              :       const_iterator
+    2005              :       end() const noexcept
+    2006              :       { return _Base_type::end() - (_Base_type::empty() ? 0 : 3); }
+    2007              : 
+    2008              :       /**
+    2009              :        * @brief Gets an iterator to one-past-the-end of the collection.
+    2010              :        */
+    2011              :       const_iterator
+    2012              :       cend() const noexcept
+    2013              :       { return this->end(); }
+    2014              : 
+    2015              :       ///@}
+    2016              : 
+    2017              :       /**
+    2018              :        * @name 28.10.5 Formatting
+    2019              :        *
+    2020              :        * These functions perform formatted substitution of the matched
+    2021              :        * character sequences into their target.  The format specifiers and
+    2022              :        * escape sequences accepted by these functions are determined by
+    2023              :        * their @p flags parameter as documented above.
+    2024              :        */
+    2025              :        ///@{
+    2026              : 
+    2027              :       /**
+    2028              :        * @pre   ready() == true
+    2029              :        */
+    2030              :       template<typename _Out_iter>
+    2031              :         _Out_iter
+    2032              :         format(_Out_iter __out, const char_type* __fmt_first,
+    2033              :                const char_type* __fmt_last,
+    2034              :                match_flag_type __flags = regex_constants::format_default) const;
+    2035              : 
+    2036              :       /**
+    2037              :        * @pre   ready() == true
+    2038              :        */
+    2039              :       template<typename _Out_iter, typename _St, typename _Sa>
+    2040              :         _Out_iter
+    2041              :         format(_Out_iter __out, const basic_string<char_type, _St, _Sa>& __fmt,
+    2042              :                match_flag_type __flags = regex_constants::format_default) const
+    2043              :         {
+    2044              :           return format(__out, __fmt.data(), __fmt.data() + __fmt.size(),
+    2045              :                         __flags);
+    2046              :         }
+    2047              : 
+    2048              :       /**
+    2049              :        * @pre   ready() == true
+    2050              :        */
+    2051              :       template<typename _St, typename _Sa>
+    2052              :         basic_string<char_type, _St, _Sa>
+    2053              :         format(const basic_string<char_type, _St, _Sa>& __fmt,
+    2054              :                match_flag_type __flags = regex_constants::format_default) const
+    2055              :         {
+    2056              :           basic_string<char_type, _St, _Sa> __result;
+    2057              :           format(std::back_inserter(__result), __fmt, __flags);
+    2058              :           return __result;
+    2059              :         }
+    2060              : 
+    2061              :       /**
+    2062              :        * @pre   ready() == true
+    2063              :        */
+    2064              :       string_type
+    2065              :       format(const char_type* __fmt,
+    2066              :              match_flag_type __flags = regex_constants::format_default) const
+    2067              :       {
+    2068              :         string_type __result;
+    2069              :         format(std::back_inserter(__result),
+    2070              :                __fmt,
+    2071              :                __fmt + char_traits<char_type>::length(__fmt),
+    2072              :                __flags);
+    2073              :         return __result;
+    2074              :       }
+    2075              : 
+    2076              :       ///@}
+    2077              : 
+    2078              :       /**
+    2079              :        * @name 28.10.6 Allocator
+    2080              :        */
+    2081              :       ///@{
+    2082              : 
+    2083              :       /**
+    2084              :        * @brief Gets a copy of the allocator.
+    2085              :        */
+    2086              :       allocator_type
+    2087              :       get_allocator() const noexcept
+    2088              :       { return _Base_type::get_allocator(); }
+    2089              : 
+    2090              :       ///@}
+    2091              : 
+    2092              :       /**
+    2093              :        * @name 28.10.7 Swap
+    2094              :        */
+    2095              :        ///@{
+    2096              : 
+    2097              :       /**
+    2098              :        * @brief Swaps the contents of two match_results.
+    2099              :        */
+    2100              :       void
+    2101              :       swap(match_results& __that) noexcept
+    2102              :       {
+    2103              :         using std::swap;
+    2104              :         _Base_type::swap(__that);
+    2105              :         swap(_M_begin, __that._M_begin);
+    2106              :       }
+    2107              :       ///@}
+    2108              : 
+    2109              :     private:
+    2110              :       template<typename, typename, typename>
+    2111              :         friend class regex_iterator;
+    2112              : 
+    2113              :       /// @cond undocumented
+    2114              : 
+    2115              :       template<typename, typename, typename, bool>
+    2116              :         friend class __detail::_Executor;
+    2117              : 
+    2118              :       template<typename _Bp, typename _Ap, typename _Cp, typename _Rp>
+    2119              :         friend bool
+    2120              :         __detail::__regex_algo_impl(_Bp, _Bp, match_results<_Bp, _Ap>&,
+    2121              :                                     const basic_regex<_Cp, _Rp>&,
+    2122              :                                     regex_constants::match_flag_type,
+    2123              :                                     __detail::_RegexExecutorPolicy, bool);
+    2124              : 
+    2125              :       // Reset contents to __size unmatched sub_match objects
+    2126              :       // (plus additional objects for prefix, suffix and unmatched sub).
+    2127              :       void
+    2128            0 :       _M_resize(unsigned int __size)
+    2129            0 :       { _Unchecked::assign(__size + 3, sub_match<_Bi_iter>{}); }
+    2130              : 
+    2131              :       // Set state to a failed match for the given past-the-end iterator.
+    2132              :       void
+    2133            0 :       _M_establish_failed_match(_Bi_iter __end)
+    2134              :       {
+    2135            0 :         sub_match<_Bi_iter> __sm;
+    2136            0 :         __sm.first = __sm.second = __end;
+    2137            0 :         _Unchecked::assign(3, __sm);
+    2138            0 :       }
+    2139              : 
+    2140              :       const_reference
+    2141            0 :       _M_unmatched_sub() const
+    2142            0 :       { return _Unchecked::operator[](_Unchecked::size() - 3); }
+    2143              : 
+    2144              :       sub_match<_Bi_iter>&
+    2145              :       _M_unmatched_sub()
+    2146              :       { return _Unchecked::operator[](_Unchecked::size() - 3); }
+    2147              : 
+    2148              :       const_reference
+    2149            0 :       _M_prefix() const
+    2150            0 :       { return _Unchecked::operator[](_Unchecked::size() - 2); }
+    2151              : 
+    2152              :       sub_match<_Bi_iter>&
+    2153            0 :       _M_prefix()
+    2154            0 :       { return _Unchecked::operator[](_Unchecked::size() - 2); }
+    2155              : 
+    2156              :       const_reference
+    2157            0 :       _M_suffix() const
+    2158            0 :       { return _Unchecked::operator[](_Unchecked::size() - 1); }
+    2159              : 
+    2160              :       sub_match<_Bi_iter>&
+    2161            0 :       _M_suffix()
+    2162            0 :       { return _Unchecked::operator[](_Unchecked::size() - 1); }
+    2163              : 
+    2164              :       _Bi_iter _M_begin {};
+    2165              :       /// @endcond
+    2166              :     };
+    2167              : 
+    2168              :   typedef match_results<const char*>               cmatch;
+    2169              :   typedef match_results<string::const_iterator>    smatch;
+    2170              : #ifdef _GLIBCXX_USE_WCHAR_T
+    2171              :   typedef match_results<const wchar_t*>            wcmatch;
+    2172              :   typedef match_results<wstring::const_iterator> wsmatch;
+    2173              : #endif
+    2174              : 
+    2175              :   // match_results comparisons
+    2176              : 
+    2177              :   /**
+    2178              :    * @brief Compares two match_results for equality.
+    2179              :    * @returns true if the two objects refer to the same match,
+    2180              :    *          false otherwise.
+    2181              :    *
+    2182              :    * @relates match_results
+    2183              :    */
+    2184              :   template<typename _Bi_iter, typename _Alloc>
+    2185              :     inline bool
+    2186              :     operator==(const match_results<_Bi_iter, _Alloc>& __m1,
+    2187              :                const match_results<_Bi_iter, _Alloc>& __m2)
+    2188              :     {
+    2189              :       if (__m1.ready() != __m2.ready())
+    2190              :         return false;
+    2191              :       if (!__m1.ready())  // both are not ready
+    2192              :         return true;
+    2193              :       if (__m1.empty() != __m2.empty())
+    2194              :         return false;
+    2195              :       if (__m1.empty())   // both are empty
+    2196              :         return true;
+    2197              :       return __m1.prefix() == __m2.prefix()
+    2198              :         && __m1.size() == __m2.size()
+    2199              :         && std::equal(__m1.begin(), __m1.end(), __m2.begin())
+    2200              :         && __m1.suffix() == __m2.suffix();
+    2201              :     }
+    2202              : 
+    2203              : #if ! __cpp_lib_three_way_comparison
+    2204              :   /**
+    2205              :    * @brief Compares two match_results for inequality.
+    2206              :    * @returns true if the two objects do not refer to the same match,
+    2207              :    *          false otherwise.
+    2208              :    *
+    2209              :    * @relates match_results
+    2210              :    */
+    2211              :   template<typename _Bi_iter, class _Alloc>
+    2212              :     inline bool
+    2213              :     operator!=(const match_results<_Bi_iter, _Alloc>& __m1,
+    2214              :                const match_results<_Bi_iter, _Alloc>& __m2)
+    2215              :     { return !(__m1 == __m2); }
+    2216              : #endif
+    2217              : 
+    2218              :   // [7.10.6] match_results swap
+    2219              :   /**
+    2220              :    * @brief Swaps two match results.
+    2221              :    * @param __lhs A match result.
+    2222              :    * @param __rhs A match result.
+    2223              :    *
+    2224              :    * The contents of the two match_results objects are swapped.
+    2225              :    *
+    2226              :    * @relates match_results
+    2227              :    */
+    2228              :   template<typename _Bi_iter, typename _Alloc>
+    2229              :     inline void
+    2230              :     swap(match_results<_Bi_iter, _Alloc>& __lhs,
+    2231              :          match_results<_Bi_iter, _Alloc>& __rhs) noexcept
+    2232              :     { __lhs.swap(__rhs); }
+    2233              : 
+    2234              : _GLIBCXX_END_NAMESPACE_CXX11
+    2235              : 
+    2236              :   // [28.11.2] Function template regex_match
+    2237              :   /**
+    2238              :    * @name Matching, Searching, and Replacing
+    2239              :    *
+    2240              :    * @{
+    2241              :    */
+    2242              : 
+    2243              :   /**
+    2244              :    * @brief Determines if there is a match between the regular expression @p e
+    2245              :    * and all of the character sequence [first, last).
+    2246              :    *
+    2247              :    * @param __s     Start of the character sequence to match.
+    2248              :    * @param __e     One-past-the-end of the character sequence to match.
+    2249              :    * @param __m     The match results.
+    2250              :    * @param __re    The regular expression.
+    2251              :    * @param __flags Controls how the regular expression is matched.
+    2252              :    *
+    2253              :    * @retval true  A match exists.
+    2254              :    * @retval false Otherwise.
+    2255              :    *
+    2256              :    * @throws an exception of type regex_error.
+    2257              :    */
+    2258              :   template<typename _Bi_iter, typename _Alloc,
+    2259              :            typename _Ch_type, typename _Rx_traits>
+    2260              :     inline bool
+    2261              :     regex_match(_Bi_iter                                 __s,
+    2262              :                 _Bi_iter                                 __e,
+    2263              :                 match_results<_Bi_iter, _Alloc>&       __m,
+    2264              :                 const basic_regex<_Ch_type, _Rx_traits>& __re,
+    2265              :                 regex_constants::match_flag_type         __flags
+    2266              :                                = regex_constants::match_default)
+    2267              :     {
+    2268              :       return __detail::__regex_algo_impl(__s, __e, __m, __re, __flags,
+    2269              :         __detail::_RegexExecutorPolicy::_S_auto, true);
+    2270              :     }
+    2271              : 
+    2272              :   /**
+    2273              :    * @brief Indicates if there is a match between the regular expression @p e
+    2274              :    * and all of the character sequence [first, last).
+    2275              :    *
+    2276              :    * @param __first Beginning of the character sequence to match.
+    2277              :    * @param __last  One-past-the-end of the character sequence to match.
+    2278              :    * @param __re    The regular expression.
+    2279              :    * @param __flags Controls how the regular expression is matched.
+    2280              :    *
+    2281              :    * @retval true  A match exists.
+    2282              :    * @retval false Otherwise.
+    2283              :    *
+    2284              :    * @throws an exception of type regex_error.
+    2285              :    */
+    2286              :   template<typename _Bi_iter, typename _Ch_type, typename _Rx_traits>
+    2287              :     inline bool
+    2288              :     regex_match(_Bi_iter __first, _Bi_iter __last,
+    2289              :                 const basic_regex<_Ch_type, _Rx_traits>& __re,
+    2290              :                 regex_constants::match_flag_type __flags
+    2291              :                 = regex_constants::match_default)
+    2292              :     {
+    2293              :       match_results<_Bi_iter> __what;
+    2294              :       return regex_match(__first, __last, __what, __re, __flags);
+    2295              :     }
+    2296              : 
+    2297              :   /**
+    2298              :    * @brief Determines if there is a match between the regular expression @p e
+    2299              :    * and a C-style null-terminated string.
+    2300              :    *
+    2301              :    * @param __s  The C-style null-terminated string to match.
+    2302              :    * @param __m  The match results.
+    2303              :    * @param __re The regular expression.
+    2304              :    * @param __f  Controls how the regular expression is matched.
+    2305              :    *
+    2306              :    * @retval true  A match exists.
+    2307              :    * @retval false Otherwise.
+    2308              :    *
+    2309              :    * @throws an exception of type regex_error.
+    2310              :    */
+    2311              :   template<typename _Ch_type, typename _Alloc, typename _Rx_traits>
+    2312              :     inline bool
+    2313              :     regex_match(const _Ch_type* __s,
+    2314              :                 match_results<const _Ch_type*, _Alloc>& __m,
+    2315              :                 const basic_regex<_Ch_type, _Rx_traits>& __re,
+    2316              :                 regex_constants::match_flag_type __f
+    2317              :                 = regex_constants::match_default)
+    2318              :     { return regex_match(__s, __s + _Rx_traits::length(__s), __m, __re, __f); }
+    2319              : 
+    2320              :   /**
+    2321              :    * @brief Determines if there is a match between the regular expression @p e
+    2322              :    * and a string.
+    2323              :    *
+    2324              :    * @param __s     The string to match.
+    2325              :    * @param __m     The match results.
+    2326              :    * @param __re    The regular expression.
+    2327              :    * @param __flags Controls how the regular expression is matched.
+    2328              :    *
+    2329              :    * @retval true  A match exists.
+    2330              :    * @retval false Otherwise.
+    2331              :    *
+    2332              :    * @throws an exception of type regex_error.
+    2333              :    */
+    2334              :   template<typename _Ch_traits, typename _Ch_alloc,
+    2335              :            typename _Alloc, typename _Ch_type, typename _Rx_traits>
+    2336              :     inline bool
+    2337              :     regex_match(const basic_string<_Ch_type, _Ch_traits, _Ch_alloc>& __s,
+    2338              :                 match_results<typename basic_string<_Ch_type,
+    2339              :                 _Ch_traits, _Ch_alloc>::const_iterator, _Alloc>& __m,
+    2340              :                 const basic_regex<_Ch_type, _Rx_traits>& __re,
+    2341              :                 regex_constants::match_flag_type __flags
+    2342              :                 = regex_constants::match_default)
+    2343              :     { return regex_match(__s.begin(), __s.end(), __m, __re, __flags); }
+    2344              : 
+    2345              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    2346              :   // 2329. regex_match() with match_results should forbid temporary strings
+    2347              :   /// Prevent unsafe attempts to get match_results from a temporary string.
+    2348              :   template<typename _Ch_traits, typename _Ch_alloc,
+    2349              :            typename _Alloc, typename _Ch_type, typename _Rx_traits>
+    2350              :     bool
+    2351              :     regex_match(const basic_string<_Ch_type, _Ch_traits, _Ch_alloc>&&,
+    2352              :                 match_results<typename basic_string<_Ch_type,
+    2353              :                 _Ch_traits, _Ch_alloc>::const_iterator, _Alloc>&,
+    2354              :                 const basic_regex<_Ch_type, _Rx_traits>&,
+    2355              :                 regex_constants::match_flag_type
+    2356              :                 = regex_constants::match_default) = delete;
+    2357              : 
+    2358              :   /**
+    2359              :    * @brief Indicates if there is a match between the regular expression @p e
+    2360              :    * and a C-style null-terminated string.
+    2361              :    *
+    2362              :    * @param __s  The C-style null-terminated string to match.
+    2363              :    * @param __re The regular expression.
+    2364              :    * @param __f  Controls how the regular expression is matched.
+    2365              :    *
+    2366              :    * @retval true  A match exists.
+    2367              :    * @retval false Otherwise.
+    2368              :    *
+    2369              :    * @throws an exception of type regex_error.
+    2370              :    */
+    2371              :   template<typename _Ch_type, class _Rx_traits>
+    2372              :     inline bool
+    2373              :     regex_match(const _Ch_type* __s,
+    2374              :                 const basic_regex<_Ch_type, _Rx_traits>& __re,
+    2375              :                 regex_constants::match_flag_type __f
+    2376              :                 = regex_constants::match_default)
+    2377              :     { return regex_match(__s, __s + _Rx_traits::length(__s), __re, __f); }
+    2378              : 
+    2379              :   /**
+    2380              :    * @brief Indicates if there is a match between the regular expression @p e
+    2381              :    * and a string.
+    2382              :    *
+    2383              :    * @param __s     [IN] The string to match.
+    2384              :    * @param __re    [IN] The regular expression.
+    2385              :    * @param __flags [IN] Controls how the regular expression is matched.
+    2386              :    *
+    2387              :    * @retval true  A match exists.
+    2388              :    * @retval false Otherwise.
+    2389              :    *
+    2390              :    * @throws an exception of type regex_error.
+    2391              :    */
+    2392              :   template<typename _Ch_traits, typename _Str_allocator,
+    2393              :            typename _Ch_type, typename _Rx_traits>
+    2394              :     inline bool
+    2395              :     regex_match(const basic_string<_Ch_type, _Ch_traits, _Str_allocator>& __s,
+    2396              :                 const basic_regex<_Ch_type, _Rx_traits>& __re,
+    2397              :                 regex_constants::match_flag_type __flags
+    2398              :                 = regex_constants::match_default)
+    2399              :     { return regex_match(__s.begin(), __s.end(), __re, __flags); }
+    2400              : 
+    2401              :   // [7.11.3] Function template regex_search
+    2402              :   /**
+    2403              :    * Searches for a regular expression within a range.
+    2404              :    * @param __s     [IN]  The start of the string to search.
+    2405              :    * @param __e     [IN]  One-past-the-end of the string to search.
+    2406              :    * @param __m     [OUT] The match results.
+    2407              :    * @param __re    [IN]  The regular expression to search for.
+    2408              :    * @param __flags [IN]  Search policy flags.
+    2409              :    * @retval true  A match was found within the string.
+    2410              :    * @retval false No match was found within the string, the content of %m is
+    2411              :    *               undefined.
+    2412              :    *
+    2413              :    * @throws an exception of type regex_error.
+    2414              :    */
+    2415              :   template<typename _Bi_iter, typename _Alloc,
+    2416              :            typename _Ch_type, typename _Rx_traits>
+    2417              :     inline bool
+    2418            0 :     regex_search(_Bi_iter __s, _Bi_iter __e,
+    2419              :                  match_results<_Bi_iter, _Alloc>& __m,
+    2420              :                  const basic_regex<_Ch_type, _Rx_traits>& __re,
+    2421              :                  regex_constants::match_flag_type __flags
+    2422              :                  = regex_constants::match_default)
+    2423              :     {
+    2424            0 :       return __detail::__regex_algo_impl(__s, __e, __m, __re, __flags,
+    2425            0 :         __detail::_RegexExecutorPolicy::_S_auto, false);
+    2426              :     }
+    2427              : 
+    2428              :   /**
+    2429              :    * Searches for a regular expression within a range.
+    2430              :    * @param __first [IN]  The start of the string to search.
+    2431              :    * @param __last  [IN]  One-past-the-end of the string to search.
+    2432              :    * @param __re    [IN]  The regular expression to search for.
+    2433              :    * @param __flags [IN]  Search policy flags.
+    2434              :    * @retval true  A match was found within the string.
+    2435              :    * @retval false No match was found within the string.
+    2436              :    *
+    2437              :    * @throws an exception of type regex_error.
+    2438              :    */
+    2439              :   template<typename _Bi_iter, typename _Ch_type, typename _Rx_traits>
+    2440              :     inline bool
+    2441              :     regex_search(_Bi_iter __first, _Bi_iter __last,
+    2442              :                  const basic_regex<_Ch_type, _Rx_traits>& __re,
+    2443              :                  regex_constants::match_flag_type __flags
+    2444              :                  = regex_constants::match_default)
+    2445              :     {
+    2446              :       match_results<_Bi_iter> __what;
+    2447              :       return regex_search(__first, __last, __what, __re, __flags);
+    2448              :     }
+    2449              : 
+    2450              :   /**
+    2451              :    * @brief Searches for a regular expression within a C-string.
+    2452              :    * @param __s [IN]  A C-string to search for the regex.
+    2453              :    * @param __m [OUT] The set of regex matches.
+    2454              :    * @param __e [IN]  The regex to search for in @p s.
+    2455              :    * @param __f [IN]  The search flags.
+    2456              :    * @retval true  A match was found within the string.
+    2457              :    * @retval false No match was found within the string, the content of %m is
+    2458              :    *               undefined.
+    2459              :    *
+    2460              :    * @throws an exception of type regex_error.
+    2461              :    */
+    2462              :   template<typename _Ch_type, class _Alloc, class _Rx_traits>
+    2463              :     inline bool
+    2464              :     regex_search(const _Ch_type* __s,
+    2465              :                  match_results<const _Ch_type*, _Alloc>& __m,
+    2466              :                  const basic_regex<_Ch_type, _Rx_traits>& __e,
+    2467              :                  regex_constants::match_flag_type __f
+    2468              :                  = regex_constants::match_default)
+    2469              :     { return regex_search(__s, __s + _Rx_traits::length(__s), __m, __e, __f); }
+    2470              : 
+    2471              :   /**
+    2472              :    * @brief Searches for a regular expression within a C-string.
+    2473              :    * @param __s [IN]  The C-string to search.
+    2474              :    * @param __e [IN]  The regular expression to search for.
+    2475              :    * @param __f [IN]  Search policy flags.
+    2476              :    * @retval true  A match was found within the string.
+    2477              :    * @retval false No match was found within the string.
+    2478              :    *
+    2479              :    * @throws an exception of type regex_error.
+    2480              :    */
+    2481              :   template<typename _Ch_type, typename _Rx_traits>
+    2482              :     inline bool
+    2483              :     regex_search(const _Ch_type* __s,
+    2484              :                  const basic_regex<_Ch_type, _Rx_traits>& __e,
+    2485              :                  regex_constants::match_flag_type __f
+    2486              :                  = regex_constants::match_default)
+    2487              :     { return regex_search(__s, __s + _Rx_traits::length(__s), __e, __f); }
+    2488              : 
+    2489              :   /**
+    2490              :    * @brief Searches for a regular expression within a string.
+    2491              :    * @param __s     [IN]  The string to search.
+    2492              :    * @param __e     [IN]  The regular expression to search for.
+    2493              :    * @param __flags [IN]  Search policy flags.
+    2494              :    * @retval true  A match was found within the string.
+    2495              :    * @retval false No match was found within the string.
+    2496              :    *
+    2497              :    * @throws an exception of type regex_error.
+    2498              :    */
+    2499              :   template<typename _Ch_traits, typename _String_allocator,
+    2500              :            typename _Ch_type, typename _Rx_traits>
+    2501              :     inline bool
+    2502              :     regex_search(const basic_string<_Ch_type, _Ch_traits,
+    2503              :                  _String_allocator>& __s,
+    2504              :                  const basic_regex<_Ch_type, _Rx_traits>& __e,
+    2505              :                  regex_constants::match_flag_type __flags
+    2506              :                  = regex_constants::match_default)
+    2507              :     { return regex_search(__s.begin(), __s.end(), __e, __flags); }
+    2508              : 
+    2509              :   /**
+    2510              :    * @brief Searches for a regular expression within a string.
+    2511              :    * @param __s [IN]  A C++ string to search for the regex.
+    2512              :    * @param __m [OUT] The set of regex matches.
+    2513              :    * @param __e [IN]  The regex to search for in @p s.
+    2514              :    * @param __f [IN]  The search flags.
+    2515              :    * @retval true  A match was found within the string.
+    2516              :    * @retval false No match was found within the string, the content of %m is
+    2517              :    *               undefined.
+    2518              :    *
+    2519              :    * @throws an exception of type regex_error.
+    2520              :    */
+    2521              :   template<typename _Ch_traits, typename _Ch_alloc,
+    2522              :            typename _Alloc, typename _Ch_type,
+    2523              :            typename _Rx_traits>
+    2524              :     inline bool
+    2525              :     regex_search(const basic_string<_Ch_type, _Ch_traits, _Ch_alloc>& __s,
+    2526              :                  match_results<typename basic_string<_Ch_type,
+    2527              :                  _Ch_traits, _Ch_alloc>::const_iterator, _Alloc>& __m,
+    2528              :                  const basic_regex<_Ch_type, _Rx_traits>& __e,
+    2529              :                  regex_constants::match_flag_type __f
+    2530              :                  = regex_constants::match_default)
+    2531              :     { return regex_search(__s.begin(), __s.end(), __m, __e, __f); }
+    2532              : 
+    2533              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    2534              :   // 2329. regex_search() with match_results should forbid temporary strings
+    2535              :   /// Prevent unsafe attempts to get match_results from a temporary string.
+    2536              :   template<typename _Ch_traits, typename _Ch_alloc,
+    2537              :            typename _Alloc, typename _Ch_type,
+    2538              :            typename _Rx_traits>
+    2539              :     bool
+    2540              :     regex_search(const basic_string<_Ch_type, _Ch_traits, _Ch_alloc>&&,
+    2541              :                  match_results<typename basic_string<_Ch_type,
+    2542              :                  _Ch_traits, _Ch_alloc>::const_iterator, _Alloc>&,
+    2543              :                  const basic_regex<_Ch_type, _Rx_traits>&,
+    2544              :                  regex_constants::match_flag_type
+    2545              :                  = regex_constants::match_default) = delete;
+    2546              : 
+    2547              :   // std [28.11.4] Function template regex_replace
+    2548              : 
+    2549              :   /// @cond undocumented
+    2550              :   template<typename _Out_iter, typename _Bi_iter,
+    2551              :            typename _Rx_traits, typename _Ch_type>
+    2552              :     _Out_iter
+    2553              :     __regex_replace(_Out_iter __out, _Bi_iter __first, _Bi_iter __last,
+    2554              :                     const basic_regex<_Ch_type, _Rx_traits>& __e,
+    2555              :                     const _Ch_type* __fmt, size_t __len,
+    2556              :                     regex_constants::match_flag_type __flags);
+    2557              :   /// @endcond
+    2558              : 
+    2559              :   /**
+    2560              :    * @brief Search for a regular expression within a range for multiple times,
+    2561              :    and replace the matched parts through filling a format string.
+    2562              :    * @param __out   [OUT] The output iterator.
+    2563              :    * @param __first [IN]  The start of the string to search.
+    2564              :    * @param __last  [IN]  One-past-the-end of the string to search.
+    2565              :    * @param __e     [IN]  The regular expression to search for.
+    2566              :    * @param __fmt   [IN]  The format string.
+    2567              :    * @param __flags [IN]  Search and replace policy flags.
+    2568              :    *
+    2569              :    * @returns __out
+    2570              :    * @throws an exception of type regex_error.
+    2571              :    */
+    2572              :   template<typename _Out_iter, typename _Bi_iter,
+    2573              :            typename _Rx_traits, typename _Ch_type,
+    2574              :            typename _St, typename _Sa>
+    2575              :     inline _Out_iter
+    2576            0 :     regex_replace(_Out_iter __out, _Bi_iter __first, _Bi_iter __last,
+    2577              :                   const basic_regex<_Ch_type, _Rx_traits>& __e,
+    2578              :                   const basic_string<_Ch_type, _St, _Sa>& __fmt,
+    2579              :                   regex_constants::match_flag_type __flags
+    2580              :                   = regex_constants::match_default)
+    2581              :     {
+    2582            0 :       return std::__regex_replace(__out, __first, __last, __e, __fmt.c_str(),
+    2583            0 :                                   __fmt.length(), __flags);
+    2584              :     }
+    2585              : 
+    2586              :   /**
+    2587              :    * @brief Search for a regular expression within a range for multiple times,
+    2588              :    and replace the matched parts through filling a format C-string.
+    2589              :    * @param __out   [OUT] The output iterator.
+    2590              :    * @param __first [IN]  The start of the string to search.
+    2591              :    * @param __last  [IN]  One-past-the-end of the string to search.
+    2592              :    * @param __e     [IN]  The regular expression to search for.
+    2593              :    * @param __fmt   [IN]  The format C-string.
+    2594              :    * @param __flags [IN]  Search and replace policy flags.
+    2595              :    *
+    2596              :    * @returns __out
+    2597              :    * @throws an exception of type regex_error.
+    2598              :    */
+    2599              :   template<typename _Out_iter, typename _Bi_iter,
+    2600              :            typename _Rx_traits, typename _Ch_type>
+    2601              :     _Out_iter
+    2602              :     regex_replace(_Out_iter __out, _Bi_iter __first, _Bi_iter __last,
+    2603              :                   const basic_regex<_Ch_type, _Rx_traits>& __e,
+    2604              :                   const _Ch_type* __fmt,
+    2605              :                   regex_constants::match_flag_type __flags
+    2606              :                   = regex_constants::match_default)
+    2607              :     {
+    2608              :       return std::__regex_replace(__out, __first, __last, __e, __fmt,
+    2609              :                                   char_traits<_Ch_type>::length(__fmt),
+    2610              :                                   __flags);
+    2611              :     }
+    2612              : 
+    2613              : 
+    2614              :   /**
+    2615              :    * @brief Search for a regular expression within a string for multiple times,
+    2616              :    and replace the matched parts through filling a format string.
+    2617              :    * @param __s     [IN] The string to search and replace.
+    2618              :    * @param __e     [IN] The regular expression to search for.
+    2619              :    * @param __fmt   [IN] The format string.
+    2620              :    * @param __flags [IN] Search and replace policy flags.
+    2621              :    *
+    2622              :    * @returns The string after replacing.
+    2623              :    * @throws an exception of type regex_error.
+    2624              :    */
+    2625              :   template<typename _Rx_traits, typename _Ch_type,
+    2626              :            typename _St, typename _Sa, typename _Fst, typename _Fsa>
+    2627              :     inline basic_string<_Ch_type, _St, _Sa>
+    2628            0 :     regex_replace(const basic_string<_Ch_type, _St, _Sa>& __s,
+    2629              :                   const basic_regex<_Ch_type, _Rx_traits>& __e,
+    2630              :                   const basic_string<_Ch_type, _Fst, _Fsa>& __fmt,
+    2631              :                   regex_constants::match_flag_type __flags
+    2632              :                   = regex_constants::match_default)
+    2633              :     {
+    2634            0 :       basic_string<_Ch_type, _St, _Sa> __result;
+    2635            0 :       regex_replace(std::back_inserter(__result),
+    2636              :                     __s.begin(), __s.end(), __e, __fmt, __flags);
+    2637            0 :       return __result;
+    2638            0 :     }
+    2639              : 
+    2640              :   /**
+    2641              :    * @brief Search for a regular expression within a string for multiple times,
+    2642              :    and replace the matched parts through filling a format C-string.
+    2643              :    * @param __s     [IN] The string to search and replace.
+    2644              :    * @param __e     [IN] The regular expression to search for.
+    2645              :    * @param __fmt   [IN] The format C-string.
+    2646              :    * @param __flags [IN] Search and replace policy flags.
+    2647              :    *
+    2648              :    * @returns The string after replacing.
+    2649              :    * @throws an exception of type regex_error.
+    2650              :    */
+    2651              :   template<typename _Rx_traits, typename _Ch_type,
+    2652              :            typename _St, typename _Sa>
+    2653              :     inline basic_string<_Ch_type, _St, _Sa>
+    2654              :     regex_replace(const basic_string<_Ch_type, _St, _Sa>& __s,
+    2655              :                   const basic_regex<_Ch_type, _Rx_traits>& __e,
+    2656              :                   const _Ch_type* __fmt,
+    2657              :                   regex_constants::match_flag_type __flags
+    2658              :                   = regex_constants::match_default)
+    2659              :     {
+    2660              :       basic_string<_Ch_type, _St, _Sa> __result;
+    2661              :       regex_replace(std::back_inserter(__result),
+    2662              :                     __s.begin(), __s.end(), __e, __fmt, __flags);
+    2663              :       return __result;
+    2664              :     }
+    2665              : 
+    2666              :   /**
+    2667              :    * @brief Search for a regular expression within a C-string for multiple
+    2668              :    times, and replace the matched parts through filling a format string.
+    2669              :    * @param __s     [IN] The C-string to search and replace.
+    2670              :    * @param __e     [IN] The regular expression to search for.
+    2671              :    * @param __fmt   [IN] The format string.
+    2672              :    * @param __flags [IN] Search and replace policy flags.
+    2673              :    *
+    2674              :    * @returns The string after replacing.
+    2675              :    * @throws an exception of type regex_error.
+    2676              :    */
+    2677              :   template<typename _Rx_traits, typename _Ch_type,
+    2678              :            typename _St, typename _Sa>
+    2679              :     inline basic_string<_Ch_type>
+    2680              :     regex_replace(const _Ch_type* __s,
+    2681              :                   const basic_regex<_Ch_type, _Rx_traits>& __e,
+    2682              :                   const basic_string<_Ch_type, _St, _Sa>& __fmt,
+    2683              :                   regex_constants::match_flag_type __flags
+    2684              :                   = regex_constants::match_default)
+    2685              :     {
+    2686              :       basic_string<_Ch_type> __result;
+    2687              :       regex_replace(std::back_inserter(__result), __s,
+    2688              :                     __s + char_traits<_Ch_type>::length(__s),
+    2689              :                     __e, __fmt, __flags);
+    2690              :       return __result;
+    2691              :     }
+    2692              : 
+    2693              :   /**
+    2694              :    * @brief Search for a regular expression within a C-string for multiple
+    2695              :    times, and replace the matched parts through filling a format C-string.
+    2696              :    * @param __s     [IN] The C-string to search and replace.
+    2697              :    * @param __e     [IN] The regular expression to search for.
+    2698              :    * @param __fmt   [IN] The format C-string.
+    2699              :    * @param __flags [IN] Search and replace policy flags.
+    2700              :    *
+    2701              :    * @returns The string after replacing.
+    2702              :    * @throws an exception of type regex_error.
+    2703              :    */
+    2704              :   template<typename _Rx_traits, typename _Ch_type>
+    2705              :     inline basic_string<_Ch_type>
+    2706              :     regex_replace(const _Ch_type* __s,
+    2707              :                   const basic_regex<_Ch_type, _Rx_traits>& __e,
+    2708              :                   const _Ch_type* __fmt,
+    2709              :                   regex_constants::match_flag_type __flags
+    2710              :                   = regex_constants::match_default)
+    2711              :     {
+    2712              :       basic_string<_Ch_type> __result;
+    2713              :       regex_replace(std::back_inserter(__result), __s,
+    2714              :                     __s + char_traits<_Ch_type>::length(__s),
+    2715              :                     __e, __fmt, __flags);
+    2716              :       return __result;
+    2717              :     }
+    2718              : 
+    2719              :   /// @}
+    2720              : 
+    2721              : _GLIBCXX_BEGIN_NAMESPACE_CXX11
+    2722              : 
+    2723              :   // std [28.12] Class template regex_iterator
+    2724              :   /**
+    2725              :    * An iterator adaptor that will provide repeated calls of regex_search over
+    2726              :    * a range until no more matches remain.
+    2727              :    *
+    2728              :    * @headerfile regex
+    2729              :    * @since C++11
+    2730              :    */
+    2731              :   template<typename _Bi_iter,
+    2732              :            typename _Ch_type = typename iterator_traits<_Bi_iter>::value_type,
+    2733              :            typename _Rx_traits = regex_traits<_Ch_type> >
+    2734              :     class regex_iterator
+    2735              :     {
+    2736              :     public:
+    2737              :       typedef basic_regex<_Ch_type, _Rx_traits>  regex_type;
+    2738              :       typedef match_results<_Bi_iter>         value_type;
+    2739              :       typedef std::ptrdiff_t                 difference_type;
+    2740              :       typedef const value_type*           pointer;
+    2741              :       typedef const value_type&               reference;
+    2742              :       typedef std::forward_iterator_tag   iterator_category;
+    2743              : 
+    2744              :       /**
+    2745              :        * @brief Provides a singular iterator, useful for indicating
+    2746              :        * one-past-the-end of a range.
+    2747              :        */
+    2748            0 :       regex_iterator() = default;
+    2749              : 
+    2750              :       /**
+    2751              :        * Constructs a %regex_iterator...
+    2752              :        * @param __a  [IN] The start of a text range to search.
+    2753              :        * @param __b  [IN] One-past-the-end of the text range to search.
+    2754              :        * @param __re [IN] The regular expression to match.
+    2755              :        * @param __m  [IN] Policy flags for match rules.
+    2756              :        */
+    2757            0 :       regex_iterator(_Bi_iter __a, _Bi_iter __b, const regex_type& __re,
+    2758              :                      regex_constants::match_flag_type __m
+    2759              :                      = regex_constants::match_default)
+    2760            0 :       : _M_begin(__a), _M_end(__b), _M_pregex(&__re), _M_flags(__m), _M_match()
+    2761              :       {
+    2762            0 :         if (!regex_search(_M_begin, _M_end, _M_match, *_M_pregex, _M_flags))
+    2763            0 :           *this = regex_iterator();
+    2764            0 :       }
+    2765              : 
+    2766              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    2767              :       // 2332. regex_iterator should forbid temporary regexes
+    2768              :       regex_iterator(_Bi_iter, _Bi_iter, const regex_type&&,
+    2769              :                      regex_constants::match_flag_type
+    2770              :                      = regex_constants::match_default) = delete;
+    2771              : 
+    2772              :       /// Copy constructs a %regex_iterator.
+    2773              :       regex_iterator(const regex_iterator&) = default;
+    2774              : 
+    2775              :       /// Copy assigns one %regex_iterator to another.
+    2776              :       regex_iterator&
+    2777            0 :       operator=(const regex_iterator&) = default;
+    2778              : 
+    2779            0 :       ~regex_iterator() = default;
+    2780              : 
+    2781              :       /**
+    2782              :        * @brief Tests the equivalence of two regex iterators.
+    2783              :        */
+    2784              :       bool
+    2785              :       operator==(const regex_iterator&) const noexcept;
+    2786              : 
+    2787              : #if __cplusplus >= 202002L
+    2788              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    2789              :       // 3719. Directory iterators should be usable with default sentinel
+    2790              :       bool operator==(default_sentinel_t) const noexcept
+    2791              :       { return _M_pregex == nullptr; }
+    2792              : #endif
+    2793              : 
+    2794              : #if __cpp_impl_three_way_comparison < 201907L
+    2795              :       /**
+    2796              :        * @brief Tests the inequivalence of two regex iterators.
+    2797              :        */
+    2798              :       bool
+    2799            0 :       operator!=(const regex_iterator& __rhs) const noexcept
+    2800            0 :       { return !(*this == __rhs); }
+    2801              : #endif
+    2802              : 
+    2803              :       /**
+    2804              :        * @brief Dereferences a %regex_iterator.
+    2805              :        */
+    2806              :       const value_type&
+    2807              :       operator*() const noexcept
+    2808              :       { return _M_match; }
+    2809              : 
+    2810              :       /**
+    2811              :        * @brief Selects a %regex_iterator member.
+    2812              :        */
+    2813              :       const value_type*
+    2814            0 :       operator->() const noexcept
+    2815            0 :       { return &_M_match; }
+    2816              : 
+    2817              :       /**
+    2818              :        * @brief Increments a %regex_iterator.
+    2819              :        */
+    2820              :       regex_iterator&
+    2821              :       operator++();
+    2822              : 
+    2823              :       /**
+    2824              :        * @brief Postincrements a %regex_iterator.
+    2825              :        */
+    2826              :       regex_iterator
+    2827              :       operator++(int)
+    2828              :       {
+    2829              :         auto __tmp = *this;
+    2830              :         ++(*this);
+    2831              :         return __tmp;
+    2832              :       }
+    2833              : 
+    2834              :     private:
+    2835              :       _Bi_iter                          _M_begin {};
+    2836              :       _Bi_iter                          _M_end {};
+    2837              :       const regex_type*                 _M_pregex = nullptr;
+    2838              :       regex_constants::match_flag_type  _M_flags {};
+    2839              :       match_results<_Bi_iter>             _M_match;
+    2840              :     };
+    2841              : 
+    2842              :   typedef regex_iterator<const char*>                     cregex_iterator;
+    2843              :   typedef regex_iterator<string::const_iterator>  sregex_iterator;
+    2844              : #ifdef _GLIBCXX_USE_WCHAR_T
+    2845              :   typedef regex_iterator<const wchar_t*>          wcregex_iterator;
+    2846              :   typedef regex_iterator<wstring::const_iterator> wsregex_iterator;
+    2847              : #endif
+    2848              : 
+    2849              :   // [7.12.2] Class template regex_token_iterator
+    2850              :   /**
+    2851              :    * Iterates over submatches in a range (or @a splits a text string).
+    2852              :    *
+    2853              :    * The purpose of this iterator is to enumerate all, or all specified,
+    2854              :    * matches of a regular expression within a text range.  The dereferenced
+    2855              :    * value of an iterator of this class is a std::sub_match object.
+    2856              :    *
+    2857              :    * @headerfile regex
+    2858              :    * @since C++11
+    2859              :    */
+    2860              :   template<typename _Bi_iter,
+    2861              :            typename _Ch_type = typename iterator_traits<_Bi_iter>::value_type,
+    2862              :            typename _Rx_traits = regex_traits<_Ch_type> >
+    2863              :     class regex_token_iterator
+    2864              :     {
+    2865              :     public:
+    2866              :       typedef basic_regex<_Ch_type, _Rx_traits>   regex_type;
+    2867              :       typedef sub_match<_Bi_iter>         value_type;
+    2868              :       typedef std::ptrdiff_t                    difference_type;
+    2869              :       typedef const value_type*                 pointer;
+    2870              :       typedef const value_type&                     reference;
+    2871              :       typedef std::forward_iterator_tag         iterator_category;
+    2872              : 
+    2873              :     public:
+    2874              :       /**
+    2875              :        * @brief Default constructs a %regex_token_iterator.
+    2876              :        *
+    2877              :        * A default-constructed %regex_token_iterator is a singular iterator
+    2878              :        * that will compare equal to the one-past-the-end value for any
+    2879              :        * iterator of the same type.
+    2880              :        */
+    2881              :       regex_token_iterator()
+    2882              :       : _M_position(), _M_subs(), _M_suffix(), _M_n(0), _M_result(nullptr),
+    2883              :       _M_has_m1(false)
+    2884              :       { }
+    2885              : 
+    2886              :       /**
+    2887              :        * Constructs a %regex_token_iterator...
+    2888              :        * @param __a          [IN] The start of the text to search.
+    2889              :        * @param __b          [IN] One-past-the-end of the text to search.
+    2890              :        * @param __re         [IN] The regular expression to search for.
+    2891              :        * @param __submatch   [IN] Which submatch to return.  There are some
+    2892              :        *                        special values for this parameter:
+    2893              :        *                        - -1 each enumerated subexpression does NOT
+    2894              :        *                          match the regular expression (aka field
+    2895              :        *                          splitting)
+    2896              :        *                        - 0 the entire string matching the
+    2897              :        *                          subexpression is returned for each match
+    2898              :        *                          within the text.
+    2899              :        *                        - >0 enumerates only the indicated
+    2900              :        *                          subexpression from a match within the text.
+    2901              :        * @param __m          [IN] Policy flags for match rules.
+    2902              :        */
+    2903              :       regex_token_iterator(_Bi_iter __a, _Bi_iter __b, const regex_type& __re,
+    2904              :                            int __submatch = 0,
+    2905              :                            regex_constants::match_flag_type __m
+    2906              :                            = regex_constants::match_default)
+    2907              :       : _M_position(__a, __b, __re, __m), _M_subs(1, __submatch), _M_n(0)
+    2908              :       { _M_init(__a, __b); }
+    2909              : 
+    2910              :       /**
+    2911              :        * Constructs a %regex_token_iterator...
+    2912              :        * @param __a          [IN] The start of the text to search.
+    2913              :        * @param __b          [IN] One-past-the-end of the text to search.
+    2914              :        * @param __re         [IN] The regular expression to search for.
+    2915              :        * @param __submatches [IN] A list of subexpressions to return for each
+    2916              :        *                          regular expression match within the text.
+    2917              :        * @param __m          [IN] Policy flags for match rules.
+    2918              :        */
+    2919              :       regex_token_iterator(_Bi_iter __a, _Bi_iter __b,
+    2920              :                            const regex_type& __re,
+    2921              :                            const std::vector<int>& __submatches,
+    2922              :                            regex_constants::match_flag_type __m
+    2923              :                              = regex_constants::match_default)
+    2924              :       : _M_position(__a, __b, __re, __m), _M_subs(__submatches), _M_n(0)
+    2925              :       { _M_init(__a, __b); }
+    2926              : 
+    2927              :       /**
+    2928              :        * Constructs a %regex_token_iterator...
+    2929              :        * @param __a          [IN] The start of the text to search.
+    2930              :        * @param __b          [IN] One-past-the-end of the text to search.
+    2931              :        * @param __re         [IN] The regular expression to search for.
+    2932              :        * @param __submatches [IN] A list of subexpressions to return for each
+    2933              :        *                          regular expression match within the text.
+    2934              :        * @param __m          [IN] Policy flags for match rules.
+    2935              :        */
+    2936              :       regex_token_iterator(_Bi_iter __a, _Bi_iter __b,
+    2937              :                            const regex_type& __re,
+    2938              :                            initializer_list<int> __submatches,
+    2939              :                            regex_constants::match_flag_type __m
+    2940              :                              = regex_constants::match_default)
+    2941              :       : _M_position(__a, __b, __re, __m), _M_subs(__submatches), _M_n(0)
+    2942              :       { _M_init(__a, __b); }
+    2943              : 
+    2944              :       /**
+    2945              :        * Constructs a %regex_token_iterator...
+    2946              :        * @param __a          [IN] The start of the text to search.
+    2947              :        * @param __b          [IN] One-past-the-end of the text to search.
+    2948              :        * @param __re         [IN] The regular expression to search for.
+    2949              :        * @param __submatches [IN] A list of subexpressions to return for each
+    2950              :        *                          regular expression match within the text.
+    2951              :        * @param __m          [IN] Policy flags for match rules.
+    2952              :        */
+    2953              :       template<std::size_t _Nm>
+    2954              :         regex_token_iterator(_Bi_iter __a, _Bi_iter __b,
+    2955              :                              const regex_type& __re,
+    2956              :                              const int (&__submatches)[_Nm],
+    2957              :                              regex_constants::match_flag_type __m
+    2958              :                              = regex_constants::match_default)
+    2959              :       : _M_position(__a, __b, __re, __m),
+    2960              :       _M_subs(__submatches, __submatches + _Nm), _M_n(0)
+    2961              :       { _M_init(__a, __b); }
+    2962              : 
+    2963              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    2964              :       // 2332. regex_token_iterator should forbid temporary regexes
+    2965              :       regex_token_iterator(_Bi_iter, _Bi_iter, const regex_type&&, int = 0,
+    2966              :                            regex_constants::match_flag_type =
+    2967              :                            regex_constants::match_default) = delete;
+    2968              :       regex_token_iterator(_Bi_iter, _Bi_iter, const regex_type&&,
+    2969              :                            const std::vector<int>&,
+    2970              :                            regex_constants::match_flag_type =
+    2971              :                            regex_constants::match_default) = delete;
+    2972              :       regex_token_iterator(_Bi_iter, _Bi_iter, const regex_type&&,
+    2973              :                            initializer_list<int>,
+    2974              :                            regex_constants::match_flag_type =
+    2975              :                            regex_constants::match_default) = delete;
+    2976              :       template <std::size_t _Nm>
+    2977              :         regex_token_iterator(_Bi_iter, _Bi_iter, const regex_type&&,
+    2978              :                              const int (&)[_Nm],
+    2979              :                              regex_constants::match_flag_type =
+    2980              :                              regex_constants::match_default) = delete;
+    2981              : 
+    2982              :       /**
+    2983              :        * @brief Copy constructs a %regex_token_iterator.
+    2984              :        * @param __rhs [IN] A %regex_token_iterator to copy.
+    2985              :        */
+    2986              :       regex_token_iterator(const regex_token_iterator& __rhs)
+    2987              :       : _M_position(__rhs._M_position), _M_subs(__rhs._M_subs),
+    2988              :       _M_suffix(__rhs._M_suffix), _M_n(__rhs._M_n), _M_has_m1(__rhs._M_has_m1)
+    2989              :       { _M_normalize_result(); }
+    2990              : 
+    2991              :       /**
+    2992              :        * @brief Assigns a %regex_token_iterator to another.
+    2993              :        * @param __rhs [IN] A %regex_token_iterator to copy.
+    2994              :        */
+    2995              :       regex_token_iterator&
+    2996              :       operator=(const regex_token_iterator& __rhs);
+    2997              : 
+    2998              :       /**
+    2999              :        * @brief Compares a %regex_token_iterator to another for equality.
+    3000              :        */
+    3001              :       bool
+    3002              :       operator==(const regex_token_iterator& __rhs) const;
+    3003              : 
+    3004              : #if __cplusplus >= 202002L
+    3005              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    3006              :       // 3719. Directory iterators should be usable with default sentinel
+    3007              :       bool operator==(default_sentinel_t) const noexcept
+    3008              :       { return _M_end_of_seq(); }
+    3009              : #endif
+    3010              : 
+    3011              : #if __cpp_impl_three_way_comparison < 201907L
+    3012              :       /**
+    3013              :        * @brief Compares a %regex_token_iterator to another for inequality.
+    3014              :        */
+    3015              :       bool
+    3016              :       operator!=(const regex_token_iterator& __rhs) const
+    3017              :       { return !(*this == __rhs); }
+    3018              : #endif
+    3019              : 
+    3020              :       /**
+    3021              :        * @brief Dereferences a %regex_token_iterator.
+    3022              :        */
+    3023              :       const value_type&
+    3024              :       operator*() const
+    3025              :       { return *_M_result; }
+    3026              : 
+    3027              :       /**
+    3028              :        * @brief Selects a %regex_token_iterator member.
+    3029              :        */
+    3030              :       const value_type*
+    3031              :       operator->() const
+    3032              :       { return _M_result; }
+    3033              : 
+    3034              :       /**
+    3035              :        * @brief Increments a %regex_token_iterator.
+    3036              :        */
+    3037              :       regex_token_iterator&
+    3038              :       operator++();
+    3039              : 
+    3040              :       /**
+    3041              :        * @brief Postincrements a %regex_token_iterator.
+    3042              :        */
+    3043              :       regex_token_iterator
+    3044              :       operator++(int)
+    3045              :       {
+    3046              :         auto __tmp = *this;
+    3047              :         ++(*this);
+    3048              :         return __tmp;
+    3049              :       }
+    3050              : 
+    3051              :     private:
+    3052              :       typedef regex_iterator<_Bi_iter, _Ch_type, _Rx_traits> _Position;
+    3053              : 
+    3054              :       void
+    3055              :       _M_init(_Bi_iter __a, _Bi_iter __b);
+    3056              : 
+    3057              :       const value_type&
+    3058              :       _M_current_match() const
+    3059              :       {
+    3060              :         if (_M_subs[_M_n] == -1)
+    3061              :           return (*_M_position).prefix();
+    3062              :         else
+    3063              :           return (*_M_position)[_M_subs[_M_n]];
+    3064              :       }
+    3065              : 
+    3066              :       constexpr bool
+    3067              :       _M_end_of_seq() const noexcept
+    3068              :       { return _M_result == nullptr; }
+    3069              : 
+    3070              :       // [28.12.2.2.4]
+    3071              :       void
+    3072              :       _M_normalize_result()
+    3073              :       {
+    3074              :         if (_M_position != _Position())
+    3075              :           _M_result = &_M_current_match();
+    3076              :         else if (_M_has_m1)
+    3077              :           _M_result = &_M_suffix;
+    3078              :         else
+    3079              :           _M_result = nullptr;
+    3080              :       }
+    3081              : 
+    3082              :       _Position         _M_position;
+    3083              :       std::vector<int>    _M_subs;
+    3084              :       value_type        _M_suffix;
+    3085              :       std::size_t       _M_n;
+    3086              :       const value_type* _M_result;
+    3087              : 
+    3088              :       // Show whether _M_subs contains -1
+    3089              :       bool              _M_has_m1;
+    3090              :     };
+    3091              : 
+    3092              :   /** @brief Token iterator for C-style NULL-terminated strings. */
+    3093              :   typedef regex_token_iterator<const char*>               cregex_token_iterator;
+    3094              : 
+    3095              :   /** @brief Token iterator for standard strings. */
+    3096              :   typedef regex_token_iterator<string::const_iterator>    sregex_token_iterator;
+    3097              : 
+    3098              : #ifdef _GLIBCXX_USE_WCHAR_T
+    3099              :   /** @brief Token iterator for C-style NULL-terminated wide strings. */
+    3100              :   typedef regex_token_iterator<const wchar_t*>            wcregex_token_iterator;
+    3101              : 
+    3102              :   /** @brief Token iterator for standard wide-character strings. */
+    3103              :   typedef regex_token_iterator<wstring::const_iterator> wsregex_token_iterator;
+    3104              : #endif
+    3105              : 
+    3106              :   ///@} // group regex
+    3107              : 
+    3108              : _GLIBCXX_END_NAMESPACE_CXX11
+    3109              : _GLIBCXX_END_NAMESPACE_VERSION
+    3110              : } // namespace
+    3111              : 
+    3112              : #include <bits/regex.tcc>
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex.tcc.func-c.html b/html/usr/include/c++/13/bits/regex.tcc.func-c.html new file mode 100644 index 0000000..d88e0cd --- /dev/null +++ b/html/usr/include/c++/13/bits/regex.tcc.func-c.html @@ -0,0 +1,152 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %1930
Test Date:2024-04-30 13:17:26Functions:0.0 %110
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt7__cxx1112regex_traitsIcE16lookup_classnameIPKcEENS1_10_RegexMaskET_S6_b0
_ZNKSt7__cxx1112regex_traitsIcE18lookup_collatenameIPKcEENS_12basic_stringIcSt11char_traitsIcESaIcEEET_SA_0
_ZNKSt7__cxx1112regex_traitsIcE5valueEci0
_ZNKSt7__cxx1112regex_traitsIcE7isctypeEcNS1_10_RegexMaskE0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE6formatISt20back_insert_iteratorIS9_EEET_SI_S4_S4_NSt15regex_constants15match_flag_typeE0
_ZNKSt7__cxx1114regex_iteratorIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEcNS_12regex_traitsIcEEEeqERKSD_0
_ZNSt7__cxx1114regex_iteratorIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEcNS_12regex_traitsIcEEEppEv0
_ZNSt8__detail17__regex_algo_implIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEEcNS5_12regex_traitsIcEEEEbT_SH_RNS5_13match_resultsISH_T0_EERKNS5_11basic_regexIT1_T2_EENSt15regex_constants15match_flag_typeENS_20_RegexExecutorPolicyEb0
_ZSt15__regex_replaceISt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEN9__gnu_cxx17__normal_iteratorIPKcS6_EENS1_12regex_traitsIcEEcET_SF_T0_SG_RKNS1_11basic_regexIT2_T1_EEPKSI_mNSt15regex_constants15match_flag_typeE0
_ZZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE6formatISt20back_insert_iteratorIS9_EEET_SI_S4_S4_NSt15regex_constants15match_flag_typeEENKUlcE_clEc0
_ZZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE6formatISt20back_insert_iteratorIS9_EEET_SI_S4_S4_NSt15regex_constants15match_flag_typeEENKUlmE_clEm0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex.tcc.func.html b/html/usr/include/c++/13/bits/regex.tcc.func.html new file mode 100644 index 0000000..da0cae8 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex.tcc.func.html @@ -0,0 +1,152 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %1930
Test Date:2024-04-30 13:17:26Functions:0.0 %110
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt7__cxx1112regex_traitsIcE16lookup_classnameIPKcEENS1_10_RegexMaskET_S6_b0
_ZNKSt7__cxx1112regex_traitsIcE18lookup_collatenameIPKcEENS_12basic_stringIcSt11char_traitsIcESaIcEEET_SA_0
_ZNKSt7__cxx1112regex_traitsIcE5valueEci0
_ZNKSt7__cxx1112regex_traitsIcE7isctypeEcNS1_10_RegexMaskE0
_ZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE6formatISt20back_insert_iteratorIS9_EEET_SI_S4_S4_NSt15regex_constants15match_flag_typeE0
_ZNKSt7__cxx1114regex_iteratorIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEcNS_12regex_traitsIcEEEeqERKSD_0
_ZNSt7__cxx1114regex_iteratorIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEEcNS_12regex_traitsIcEEEppEv0
_ZNSt8__detail17__regex_algo_implIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEEcNS5_12regex_traitsIcEEEEbT_SH_RNS5_13match_resultsISH_T0_EERKNS5_11basic_regexIT1_T2_EENSt15regex_constants15match_flag_typeENS_20_RegexExecutorPolicyEb0
_ZSt15__regex_replaceISt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEN9__gnu_cxx17__normal_iteratorIPKcS6_EENS1_12regex_traitsIcEEcET_SF_T0_SG_RKNS1_11basic_regexIT2_T1_EEPKSI_mNSt15regex_constants15match_flag_typeE0
_ZZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE6formatISt20back_insert_iteratorIS9_EEET_SI_S4_S4_NSt15regex_constants15match_flag_typeEENKUlcE_clEc0
_ZZNKSt7__cxx1113match_resultsIN9__gnu_cxx17__normal_iteratorIPKcNS_12basic_stringIcSt11char_traitsIcESaIcEEEEESaINS_9sub_matchISA_EEEE6formatISt20back_insert_iteratorIS9_EEET_SI_S4_S4_NSt15regex_constants15match_flag_typeEENKUlmE_clEm0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex.tcc.gcov.html b/html/usr/include/c++/13/bits/regex.tcc.gcov.html new file mode 100644 index 0000000..a49eeab --- /dev/null +++ b/html/usr/include/c++/13/bits/regex.tcc.gcov.html @@ -0,0 +1,743 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex.tcc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %1930
Test Date:2024-04-30 13:17:26Functions:0.0 %110
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // class template regex -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2013-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /**
+      26              :  *  @file bits/regex.tcc
+      27              :  *  This is an internal header file, included by other library headers.
+      28              :  *  Do not attempt to use it directly. @headername{regex}
+      29              :  */
+      30              : 
+      31              : namespace std _GLIBCXX_VISIBILITY(default)
+      32              : {
+      33              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      34              : 
+      35              : namespace __detail
+      36              : {
+      37              :   /// @cond undocumented
+      38              : 
+      39              :   // Result of merging regex_match and regex_search.
+      40              :   //
+      41              :   // __policy now can be _S_auto (auto dispatch) and _S_alternate (use
+      42              :   // the other one if possible, for test purpose).
+      43              :   //
+      44              :   // That __match_mode is true means regex_match, else regex_search.
+      45              :   template<typename _BiIter, typename _Alloc,
+      46              :            typename _CharT, typename _TraitsT>
+      47              :     bool
+      48            0 :     __regex_algo_impl(_BiIter                              __s,
+      49              :                       _BiIter                              __e,
+      50              :                       match_results<_BiIter, _Alloc>&      __m,
+      51              :                       const basic_regex<_CharT, _TraitsT>& __re,
+      52              :                       regex_constants::match_flag_type     __flags,
+      53              :                       _RegexExecutorPolicy                 __policy,
+      54              :                       bool                                 __match_mode)
+      55              :     {
+      56            0 :       if (__re._M_automaton == nullptr)
+      57            0 :         return false;
+      58              : 
+      59            0 :       typename match_results<_BiIter, _Alloc>::_Unchecked& __res = __m;
+      60            0 :       __m._M_begin = __s;
+      61            0 :       __m._M_resize(__re._M_automaton->_M_sub_count());
+      62              : 
+      63              :       bool __ret;
+      64            0 :       if ((__re.flags() & regex_constants::__polynomial)
+      65            0 :           || (__policy == _RegexExecutorPolicy::_S_alternate
+      66            0 :               && !__re._M_automaton->_M_has_backref))
+      67              :         {
+      68              :           _Executor<_BiIter, _Alloc, _TraitsT, false>
+      69            0 :             __executor(__s, __e, __res, __re, __flags);
+      70            0 :           if (__match_mode)
+      71            0 :             __ret = __executor._M_match();
+      72              :           else
+      73            0 :             __ret = __executor._M_search();
+      74            0 :         }
+      75              :       else
+      76              :         {
+      77              :           _Executor<_BiIter, _Alloc, _TraitsT, true>
+      78            0 :             __executor(__s, __e, __res, __re, __flags);
+      79            0 :           if (__match_mode)
+      80            0 :             __ret = __executor._M_match();
+      81              :           else
+      82            0 :             __ret = __executor._M_search();
+      83            0 :         }
+      84            0 :       if (__ret)
+      85              :         {
+      86            0 :           for (auto& __it : __res)
+      87            0 :             if (!__it.matched)
+      88            0 :               __it.first = __it.second = __e;
+      89            0 :           auto& __pre = __m._M_prefix();
+      90            0 :           auto& __suf = __m._M_suffix();
+      91            0 :           if (__match_mode)
+      92              :             {
+      93            0 :               __pre.matched = false;
+      94            0 :               __pre.first = __s;
+      95            0 :               __pre.second = __s;
+      96            0 :               __suf.matched = false;
+      97            0 :               __suf.first = __e;
+      98            0 :               __suf.second = __e;
+      99              :             }
+     100              :           else
+     101              :             {
+     102            0 :               __pre.first = __s;
+     103            0 :               __pre.second = __res[0].first;
+     104            0 :               __pre.matched = (__pre.first != __pre.second);
+     105            0 :               __suf.first = __res[0].second;
+     106            0 :               __suf.second = __e;
+     107            0 :               __suf.matched = (__suf.first != __suf.second);
+     108              :             }
+     109              :         }
+     110              :       else
+     111              :         {
+     112            0 :           __m._M_establish_failed_match(__e);
+     113              :         }
+     114            0 :       return __ret;
+     115              :     }
+     116              :   /// @endcond
+     117              : } // namespace __detail
+     118              : 
+     119              :   template<typename _Ch_type>
+     120              :   template<typename _Fwd_iter>
+     121              :     typename regex_traits<_Ch_type>::string_type
+     122            0 :     regex_traits<_Ch_type>::
+     123              :     lookup_collatename(_Fwd_iter __first, _Fwd_iter __last) const
+     124              :     {
+     125              :       typedef std::ctype<char_type> __ctype_type;
+     126            0 :       const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
+     127              : 
+     128              :       static const char* __collatenames[] =
+     129              :         {
+     130              :           "NUL",
+     131              :           "SOH",
+     132              :           "STX",
+     133              :           "ETX",
+     134              :           "EOT",
+     135              :           "ENQ",
+     136              :           "ACK",
+     137              :           "alert",
+     138              :           "backspace",
+     139              :           "tab",
+     140              :           "newline",
+     141              :           "vertical-tab",
+     142              :           "form-feed",
+     143              :           "carriage-return",
+     144              :           "SO",
+     145              :           "SI",
+     146              :           "DLE",
+     147              :           "DC1",
+     148              :           "DC2",
+     149              :           "DC3",
+     150              :           "DC4",
+     151              :           "NAK",
+     152              :           "SYN",
+     153              :           "ETB",
+     154              :           "CAN",
+     155              :           "EM",
+     156              :           "SUB",
+     157              :           "ESC",
+     158              :           "IS4",
+     159              :           "IS3",
+     160              :           "IS2",
+     161              :           "IS1",
+     162              :           "space",
+     163              :           "exclamation-mark",
+     164              :           "quotation-mark",
+     165              :           "number-sign",
+     166              :           "dollar-sign",
+     167              :           "percent-sign",
+     168              :           "ampersand",
+     169              :           "apostrophe",
+     170              :           "left-parenthesis",
+     171              :           "right-parenthesis",
+     172              :           "asterisk",
+     173              :           "plus-sign",
+     174              :           "comma",
+     175              :           "hyphen",
+     176              :           "period",
+     177              :           "slash",
+     178              :           "zero",
+     179              :           "one",
+     180              :           "two",
+     181              :           "three",
+     182              :           "four",
+     183              :           "five",
+     184              :           "six",
+     185              :           "seven",
+     186              :           "eight",
+     187              :           "nine",
+     188              :           "colon",
+     189              :           "semicolon",
+     190              :           "less-than-sign",
+     191              :           "equals-sign",
+     192              :           "greater-than-sign",
+     193              :           "question-mark",
+     194              :           "commercial-at",
+     195              :           "A",
+     196              :           "B",
+     197              :           "C",
+     198              :           "D",
+     199              :           "E",
+     200              :           "F",
+     201              :           "G",
+     202              :           "H",
+     203              :           "I",
+     204              :           "J",
+     205              :           "K",
+     206              :           "L",
+     207              :           "M",
+     208              :           "N",
+     209              :           "O",
+     210              :           "P",
+     211              :           "Q",
+     212              :           "R",
+     213              :           "S",
+     214              :           "T",
+     215              :           "U",
+     216              :           "V",
+     217              :           "W",
+     218              :           "X",
+     219              :           "Y",
+     220              :           "Z",
+     221              :           "left-square-bracket",
+     222              :           "backslash",
+     223              :           "right-square-bracket",
+     224              :           "circumflex",
+     225              :           "underscore",
+     226              :           "grave-accent",
+     227              :           "a",
+     228              :           "b",
+     229              :           "c",
+     230              :           "d",
+     231              :           "e",
+     232              :           "f",
+     233              :           "g",
+     234              :           "h",
+     235              :           "i",
+     236              :           "j",
+     237              :           "k",
+     238              :           "l",
+     239              :           "m",
+     240              :           "n",
+     241              :           "o",
+     242              :           "p",
+     243              :           "q",
+     244              :           "r",
+     245              :           "s",
+     246              :           "t",
+     247              :           "u",
+     248              :           "v",
+     249              :           "w",
+     250              :           "x",
+     251              :           "y",
+     252              :           "z",
+     253              :           "left-curly-bracket",
+     254              :           "vertical-line",
+     255              :           "right-curly-bracket",
+     256              :           "tilde",
+     257              :           "DEL",
+     258              :         };
+     259              : 
+     260            0 :       string __s;
+     261            0 :       for (; __first != __last; ++__first)
+     262            0 :         __s += __fctyp.narrow(*__first, 0);
+     263              : 
+     264            0 :       for (const auto& __it : __collatenames)
+     265            0 :         if (__s == __it)
+     266            0 :           return string_type(1, __fctyp.widen(
+     267            0 :             static_cast<char>(&__it - __collatenames)));
+     268              : 
+     269              :       // TODO Add digraph support:
+     270              :       // http://boost.sourceforge.net/libs/regex/doc/collating_names.html
+     271              : 
+     272            0 :       return string_type();
+     273            0 :     }
+     274              : 
+     275              :   template<typename _Ch_type>
+     276              :   template<typename _Fwd_iter>
+     277              :     typename regex_traits<_Ch_type>::char_class_type
+     278            0 :     regex_traits<_Ch_type>::
+     279              :     lookup_classname(_Fwd_iter __first, _Fwd_iter __last, bool __icase) const
+     280              :     {
+     281              :       typedef std::ctype<char_type> __ctype_type;
+     282            0 :       const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
+     283              : 
+     284              :       // Mappings from class name to class mask.
+     285              :       static const pair<const char*, char_class_type> __classnames[] =
+     286              :       {
+     287              :         {"d", ctype_base::digit},
+     288              :         {"w", {ctype_base::alnum, _RegexMask::_S_under}},
+     289              :         {"s", ctype_base::space},
+     290              :         {"alnum", ctype_base::alnum},
+     291              :         {"alpha", ctype_base::alpha},
+     292              :         {"blank", ctype_base::blank},
+     293              :         {"cntrl", ctype_base::cntrl},
+     294              :         {"digit", ctype_base::digit},
+     295              :         {"graph", ctype_base::graph},
+     296              :         {"lower", ctype_base::lower},
+     297              :         {"print", ctype_base::print},
+     298              :         {"punct", ctype_base::punct},
+     299              :         {"space", ctype_base::space},
+     300              :         {"upper", ctype_base::upper},
+     301              :         {"xdigit", ctype_base::xdigit},
+     302              :       };
+     303              : 
+     304            0 :       string __s;
+     305            0 :       for (; __first != __last; ++__first)
+     306            0 :         __s += __fctyp.narrow(__fctyp.tolower(*__first), 0);
+     307              : 
+     308            0 :       for (const auto& __it : __classnames)
+     309            0 :         if (__s == __it.first)
+     310              :           {
+     311            0 :             if (__icase
+     312            0 :                 && ((__it.second
+     313            0 :                      & (ctype_base::lower | ctype_base::upper)) != 0))
+     314            0 :               return ctype_base::alpha;
+     315            0 :             return __it.second;
+     316              :           }
+     317            0 :       return 0;
+     318            0 :     }
+     319              : 
+     320              :   template<typename _Ch_type>
+     321              :     bool
+     322            0 :     regex_traits<_Ch_type>::
+     323              :     isctype(_Ch_type __c, char_class_type __f) const
+     324              :     {
+     325              :       typedef std::ctype<char_type> __ctype_type;
+     326            0 :       const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
+     327              : 
+     328            0 :       return __fctyp.is(__f._M_base, __c)
+     329              :         // [[:w:]]
+     330            0 :         || ((__f._M_extended & _RegexMask::_S_under)
+     331            0 :             && __c == __fctyp.widen('_'));
+     332              :     }
+     333              : 
+     334              :   template<typename _Ch_type>
+     335              :     int
+     336            0 :     regex_traits<_Ch_type>::
+     337              :     value(_Ch_type __ch, int __radix) const
+     338              :     {
+     339            0 :       std::basic_istringstream<char_type> __is(string_type(1, __ch));
+     340              :       long __v;
+     341            0 :       if (__radix == 8)
+     342            0 :         __is >> std::oct;
+     343            0 :       else if (__radix == 16)
+     344            0 :         __is >> std::hex;
+     345            0 :       __is >> __v;
+     346            0 :       return __is.fail() ? -1 : __v;
+     347            0 :     }
+     348              : 
+     349              :   template<typename _Bi_iter, typename _Alloc>
+     350              :   template<typename _Out_iter>
+     351              :     _Out_iter
+     352            0 :     match_results<_Bi_iter, _Alloc>::
+     353              :     format(_Out_iter __out,
+     354              :            const match_results<_Bi_iter, _Alloc>::char_type* __fmt_first,
+     355              :            const match_results<_Bi_iter, _Alloc>::char_type* __fmt_last,
+     356              :            match_flag_type __flags) const
+     357              :     {
+     358            0 :       __glibcxx_assert( ready() );
+     359            0 :       regex_traits<char_type> __traits;
+     360              :       typedef std::ctype<char_type> __ctype_type;
+     361              :       const __ctype_type&
+     362            0 :         __fctyp(use_facet<__ctype_type>(__traits.getloc()));
+     363              : 
+     364            0 :       auto __output = [&](size_t __idx)
+     365              :         {
+     366            0 :           auto& __sub = (*this)[__idx];
+     367            0 :           if (__sub.matched)
+     368            0 :             __out = std::copy(__sub.first, __sub.second, __out);
+     369              :         };
+     370              : 
+     371            0 :       if (__flags & regex_constants::format_sed)
+     372              :         {
+     373            0 :           bool __escaping = false;
+     374            0 :           for (; __fmt_first != __fmt_last; __fmt_first++)
+     375              :             {
+     376            0 :               if (__escaping)
+     377              :                 {
+     378            0 :                   __escaping = false;
+     379            0 :                   if (__fctyp.is(__ctype_type::digit, *__fmt_first))
+     380            0 :                     __output(__traits.value(*__fmt_first, 10));
+     381              :                   else
+     382            0 :                     *__out++ = *__fmt_first;
+     383            0 :                   continue;
+     384              :                 }
+     385            0 :               if (*__fmt_first == '\\')
+     386              :                 {
+     387            0 :                   __escaping = true;
+     388            0 :                   continue;
+     389              :                 }
+     390            0 :               if (*__fmt_first == '&')
+     391              :                 {
+     392            0 :                   __output(0);
+     393            0 :                   continue;
+     394              :                 }
+     395            0 :               *__out++ = *__fmt_first;
+     396              :             }
+     397            0 :           if (__escaping)
+     398            0 :             *__out++ = '\\';
+     399              :         }
+     400              :       else
+     401              :         {
+     402            0 :           while (1)
+     403              :             {
+     404            0 :               auto __next = std::find(__fmt_first, __fmt_last, '$');
+     405            0 :               if (__next == __fmt_last)
+     406            0 :                 break;
+     407              : 
+     408            0 :               __out = std::copy(__fmt_first, __next, __out);
+     409              : 
+     410            0 :               auto __eat = [&](char __ch) -> bool
+     411              :                 {
+     412            0 :                   if (*__next == __ch)
+     413              :                     {
+     414            0 :                       ++__next;
+     415            0 :                       return true;
+     416              :                     }
+     417            0 :                   return false;
+     418              :                 };
+     419              : 
+     420            0 :               if (++__next == __fmt_last)
+     421            0 :                 *__out++ = '$';
+     422            0 :               else if (__eat('$'))
+     423            0 :                 *__out++ = '$';
+     424            0 :               else if (__eat('&'))
+     425            0 :                 __output(0);
+     426            0 :               else if (__eat('`'))
+     427              :                 {
+     428            0 :                   auto& __sub = _M_prefix();
+     429            0 :                   if (__sub.matched)
+     430            0 :                     __out = std::copy(__sub.first, __sub.second, __out);
+     431              :                 }
+     432            0 :               else if (__eat('\''))
+     433              :                 {
+     434            0 :                   auto& __sub = _M_suffix();
+     435            0 :                   if (__sub.matched)
+     436            0 :                     __out = std::copy(__sub.first, __sub.second, __out);
+     437              :                 }
+     438            0 :               else if (__fctyp.is(__ctype_type::digit, *__next))
+     439              :                 {
+     440            0 :                   long __num = __traits.value(*__next, 10);
+     441            0 :                   if (++__next != __fmt_last
+     442            0 :                       && __fctyp.is(__ctype_type::digit, *__next))
+     443              :                     {
+     444            0 :                       __num *= 10;
+     445            0 :                       __num += __traits.value(*__next++, 10);
+     446              :                     }
+     447            0 :                   if (0 <= __num && __num < this->size())
+     448            0 :                     __output(__num);
+     449              :                 }
+     450              :               else
+     451            0 :                 *__out++ = '$';
+     452            0 :               __fmt_first = __next;
+     453              :             }
+     454            0 :           __out = std::copy(__fmt_first, __fmt_last, __out);
+     455              :         }
+     456            0 :       return __out;
+     457            0 :     }
+     458              : 
+     459              :   template<typename _Out_iter, typename _Bi_iter,
+     460              :            typename _Rx_traits, typename _Ch_type>
+     461              :     _Out_iter
+     462            0 :     __regex_replace(_Out_iter __out, _Bi_iter __first, _Bi_iter __last,
+     463              :                     const basic_regex<_Ch_type, _Rx_traits>& __e,
+     464              :                     const _Ch_type* __fmt, size_t __len,
+     465              :                     regex_constants::match_flag_type __flags)
+     466              :     {
+     467              :       typedef regex_iterator<_Bi_iter, _Ch_type, _Rx_traits> _IterT;
+     468            0 :       _IterT __i(__first, __last, __e, __flags);
+     469            0 :       _IterT __end;
+     470            0 :       if (__i == __end)
+     471              :         {
+     472            0 :           if (!(__flags & regex_constants::format_no_copy))
+     473            0 :             __out = std::copy(__first, __last, __out);
+     474              :         }
+     475              :       else
+     476              :         {
+     477            0 :           sub_match<_Bi_iter> __last;
+     478            0 :           for (; __i != __end; ++__i)
+     479              :             {
+     480            0 :               if (!(__flags & regex_constants::format_no_copy))
+     481            0 :                 __out = std::copy(__i->prefix().first, __i->prefix().second,
+     482              :                                   __out);
+     483            0 :               __out = __i->format(__out, __fmt, __fmt + __len, __flags);
+     484            0 :               __last = __i->suffix();
+     485            0 :               if (__flags & regex_constants::format_first_only)
+     486            0 :                 break;
+     487              :             }
+     488            0 :           if (!(__flags & regex_constants::format_no_copy))
+     489            0 :             __out = std::copy(__last.first, __last.second, __out);
+     490              :         }
+     491            0 :       return __out;
+     492            0 :     }
+     493              : 
+     494              :   template<typename _Bi_iter,
+     495              :            typename _Ch_type,
+     496              :            typename _Rx_traits>
+     497              :     bool
+     498            0 :     regex_iterator<_Bi_iter, _Ch_type, _Rx_traits>::
+     499              :     operator==(const regex_iterator& __rhs) const noexcept
+     500              :     {
+     501            0 :       if (_M_pregex == nullptr && __rhs._M_pregex == nullptr)
+     502            0 :         return true;
+     503            0 :       return _M_pregex == __rhs._M_pregex
+     504            0 :           && _M_begin == __rhs._M_begin
+     505            0 :           && _M_end == __rhs._M_end
+     506            0 :           && _M_flags == __rhs._M_flags
+     507            0 :           && _M_match[0] == __rhs._M_match[0];
+     508              :     }
+     509              : 
+     510              :   template<typename _Bi_iter,
+     511              :            typename _Ch_type,
+     512              :            typename _Rx_traits>
+     513              :     regex_iterator<_Bi_iter, _Ch_type, _Rx_traits>&
+     514            0 :     regex_iterator<_Bi_iter, _Ch_type, _Rx_traits>::
+     515              :     operator++()
+     516              :     {
+     517              :       // In all cases in which the call to regex_search returns true,
+     518              :       // match.prefix().first shall be equal to the previous value of
+     519              :       // match[0].second, and for each index i in the half-open range
+     520              :       // [0, match.size()) for which match[i].matched is true,
+     521              :       // match[i].position() shall return distance(begin, match[i].first).
+     522              :       // [28.12.1.4.5]
+     523            0 :       if (_M_match[0].matched)
+     524              :         {
+     525            0 :           auto __start = _M_match[0].second;
+     526            0 :           auto __prefix_first = _M_match[0].second;
+     527            0 :           if (_M_match[0].first == _M_match[0].second)
+     528              :             {
+     529            0 :               if (__start == _M_end)
+     530              :                 {
+     531            0 :                   _M_pregex = nullptr;
+     532            0 :                   return *this;
+     533              :                 }
+     534              :               else
+     535              :                 {
+     536            0 :                   if (regex_search(__start, _M_end, _M_match, *_M_pregex,
+     537              :                                    _M_flags
+     538              :                                    | regex_constants::match_not_null
+     539              :                                    | regex_constants::match_continuous))
+     540              :                     {
+     541            0 :                       __glibcxx_assert(_M_match[0].matched);
+     542            0 :                       auto& __prefix = _M_match._M_prefix();
+     543            0 :                       __prefix.first = __prefix_first;
+     544            0 :                       __prefix.matched = __prefix.first != __prefix.second;
+     545              :                       // [28.12.1.4.5]
+     546            0 :                       _M_match._M_begin = _M_begin;
+     547            0 :                       return *this;
+     548              :                     }
+     549              :                   else
+     550            0 :                     ++__start;
+     551              :                 }
+     552              :             }
+     553            0 :           _M_flags |= regex_constants::match_prev_avail;
+     554            0 :           if (regex_search(__start, _M_end, _M_match, *_M_pregex, _M_flags))
+     555              :             {
+     556            0 :               __glibcxx_assert(_M_match[0].matched);
+     557            0 :               auto& __prefix = _M_match._M_prefix();
+     558            0 :               __prefix.first = __prefix_first;
+     559            0 :               __prefix.matched = __prefix.first != __prefix.second;
+     560              :               // [28.12.1.4.5]
+     561            0 :               _M_match._M_begin = _M_begin;
+     562              :             }
+     563              :           else
+     564            0 :             _M_pregex = nullptr;
+     565              :         }
+     566            0 :       return *this;
+     567              :     }
+     568              : 
+     569              :   template<typename _Bi_iter,
+     570              :            typename _Ch_type,
+     571              :            typename _Rx_traits>
+     572              :     regex_token_iterator<_Bi_iter, _Ch_type, _Rx_traits>&
+     573              :     regex_token_iterator<_Bi_iter, _Ch_type, _Rx_traits>::
+     574              :     operator=(const regex_token_iterator& __rhs)
+     575              :     {
+     576              :       _M_position = __rhs._M_position;
+     577              :       _M_subs = __rhs._M_subs;
+     578              :       _M_n = __rhs._M_n;
+     579              :       _M_suffix = __rhs._M_suffix;
+     580              :       _M_has_m1 = __rhs._M_has_m1;
+     581              :       _M_normalize_result();
+     582              :       return *this;
+     583              :     }
+     584              : 
+     585              :   template<typename _Bi_iter,
+     586              :            typename _Ch_type,
+     587              :            typename _Rx_traits>
+     588              :     bool
+     589              :     regex_token_iterator<_Bi_iter, _Ch_type, _Rx_traits>::
+     590              :     operator==(const regex_token_iterator& __rhs) const
+     591              :     {
+     592              :       if (_M_end_of_seq() && __rhs._M_end_of_seq())
+     593              :         return true;
+     594              :       if (_M_suffix.matched && __rhs._M_suffix.matched
+     595              :           && _M_suffix == __rhs._M_suffix)
+     596              :         return true;
+     597              :       if (_M_end_of_seq() || _M_suffix.matched
+     598              :           || __rhs._M_end_of_seq() || __rhs._M_suffix.matched)
+     599              :         return false;
+     600              :       return _M_position == __rhs._M_position
+     601              :         && _M_n == __rhs._M_n
+     602              :         && _M_subs == __rhs._M_subs;
+     603              :     }
+     604              : 
+     605              :   template<typename _Bi_iter,
+     606              :            typename _Ch_type,
+     607              :            typename _Rx_traits>
+     608              :     regex_token_iterator<_Bi_iter, _Ch_type, _Rx_traits>&
+     609              :     regex_token_iterator<_Bi_iter, _Ch_type, _Rx_traits>::
+     610              :     operator++()
+     611              :     {
+     612              :       _Position __prev = _M_position;
+     613              :       if (_M_suffix.matched)
+     614              :         *this = regex_token_iterator();
+     615              :       else if (_M_n + 1 < _M_subs.size())
+     616              :         {
+     617              :           _M_n++;
+     618              :           _M_result = &_M_current_match();
+     619              :         }
+     620              :       else
+     621              :         {
+     622              :           _M_n = 0;
+     623              :           ++_M_position;
+     624              :           if (_M_position != _Position())
+     625              :             _M_result = &_M_current_match();
+     626              :           else if (_M_has_m1 && __prev->suffix().length() != 0)
+     627              :             {
+     628              :               _M_suffix.matched = true;
+     629              :               _M_suffix.first = __prev->suffix().first;
+     630              :               _M_suffix.second = __prev->suffix().second;
+     631              :               _M_result = &_M_suffix;
+     632              :             }
+     633              :           else
+     634              :             *this = regex_token_iterator();
+     635              :         }
+     636              :       return *this;
+     637              :     }
+     638              : 
+     639              :   template<typename _Bi_iter,
+     640              :            typename _Ch_type,
+     641              :            typename _Rx_traits>
+     642              :     void
+     643              :     regex_token_iterator<_Bi_iter, _Ch_type, _Rx_traits>::
+     644              :     _M_init(_Bi_iter __a, _Bi_iter __b)
+     645              :     {
+     646              :       _M_has_m1 = false;
+     647              :       for (auto __it : _M_subs)
+     648              :         if (__it == -1)
+     649              :           {
+     650              :             _M_has_m1 = true;
+     651              :             break;
+     652              :           }
+     653              :       if (_M_position != _Position())
+     654              :         _M_result = &_M_current_match();
+     655              :       else if (_M_has_m1)
+     656              :         {
+     657              :           _M_suffix.matched = true;
+     658              :           _M_suffix.first = __a;
+     659              :           _M_suffix.second = __b;
+     660              :           _M_result = &_M_suffix;
+     661              :         }
+     662              :       else
+     663              :         _M_result = nullptr;
+     664              :     }
+     665              : 
+     666              : _GLIBCXX_END_NAMESPACE_VERSION
+     667              : } // namespace
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_automaton.h.func-c.html b/html/usr/include/c++/13/bits/regex_automaton.h.func-c.html new file mode 100644 index 0000000..60c5a5e --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_automaton.h.func-c.html @@ -0,0 +1,299 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_automaton.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_automaton.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %1170
Test Date:2024-04-30 13:17:26Functions:0.0 %320
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt8__detail11_State_base10_M_has_altEv0
_ZNKSt8__detail6_StateIcE10_M_matchesEc0
_ZNKSt8__detail6_StateIcE14_M_get_matcherEv0
_ZNKSt8__detail6_StateIcE9_M_opcodeEv0
_ZNKSt8__detail9_NFA_base10_M_optionsEv0
_ZNKSt8__detail9_NFA_base12_M_sub_countEv0
_ZNKSt8__detail9_NFA_base8_M_startEv0
_ZNSt8__detail11_State_baseC2ENS_7_OpcodeE0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE13_M_insert_altEllb0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE15_M_insert_dummyEv0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE15_M_insert_stateENS_6_StateIcEE0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE16_M_insert_acceptEv0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE16_M_insert_repeatEllb0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE17_M_insert_matcherESt8functionIFbcEE0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE18_M_insert_line_endEv0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE19_M_insert_lookaheadElb0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE20_M_insert_line_beginEv0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE20_M_insert_word_boundEb0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE21_M_insert_subexpr_endEv0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE23_M_insert_subexpr_beginEv0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEC2ERKSt6localeNSt15regex_constants18syntax_option_typeE0
_ZNSt8__detail6_StateIcE14_M_get_matcherEv0
_ZNSt8__detail6_StateIcEC2ENS_7_OpcodeE0
_ZNSt8__detail6_StateIcEC2EOS1_0
_ZNSt8__detail6_StateIcEC2ERKS1_0
_ZNSt8__detail6_StateIcED2Ev0
_ZNSt8__detail9_NFA_baseC2ENSt15regex_constants18syntax_option_typeE0
_ZNSt8__detail9_NFA_baseD2Ev0
_ZNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEE9_M_appendERKS4_0
_ZNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEE9_M_appendEl0
_ZNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEC2ERNS_4_NFAIS3_EEl0
_ZNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEC2ERNS_4_NFAIS3_EEll0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_automaton.h.func.html b/html/usr/include/c++/13/bits/regex_automaton.h.func.html new file mode 100644 index 0000000..f67819b --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_automaton.h.func.html @@ -0,0 +1,299 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_automaton.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_automaton.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %1170
Test Date:2024-04-30 13:17:26Functions:0.0 %320
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt8__detail11_State_base10_M_has_altEv0
_ZNKSt8__detail6_StateIcE10_M_matchesEc0
_ZNKSt8__detail6_StateIcE14_M_get_matcherEv0
_ZNKSt8__detail6_StateIcE9_M_opcodeEv0
_ZNKSt8__detail9_NFA_base10_M_optionsEv0
_ZNKSt8__detail9_NFA_base12_M_sub_countEv0
_ZNKSt8__detail9_NFA_base8_M_startEv0
_ZNSt8__detail11_State_baseC2ENS_7_OpcodeE0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE13_M_insert_altEllb0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE15_M_insert_dummyEv0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE15_M_insert_stateENS_6_StateIcEE0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE16_M_insert_acceptEv0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE16_M_insert_repeatEllb0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE17_M_insert_matcherESt8functionIFbcEE0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE18_M_insert_line_endEv0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE19_M_insert_lookaheadElb0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE20_M_insert_line_beginEv0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE20_M_insert_word_boundEb0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE21_M_insert_subexpr_endEv0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE23_M_insert_subexpr_beginEv0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEC2ERKSt6localeNSt15regex_constants18syntax_option_typeE0
_ZNSt8__detail6_StateIcE14_M_get_matcherEv0
_ZNSt8__detail6_StateIcEC2ENS_7_OpcodeE0
_ZNSt8__detail6_StateIcEC2EOS1_0
_ZNSt8__detail6_StateIcEC2ERKS1_0
_ZNSt8__detail6_StateIcED2Ev0
_ZNSt8__detail9_NFA_baseC2ENSt15regex_constants18syntax_option_typeE0
_ZNSt8__detail9_NFA_baseD2Ev0
_ZNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEE9_M_appendERKS4_0
_ZNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEE9_M_appendEl0
_ZNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEC2ERNS_4_NFAIS3_EEl0
_ZNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEC2ERNS_4_NFAIS3_EEll0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_automaton.h.gcov.html b/html/usr/include/c++/13/bits/regex_automaton.h.gcov.html new file mode 100644 index 0000000..0ae39df --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_automaton.h.gcov.html @@ -0,0 +1,476 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_automaton.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_automaton.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %1170
Test Date:2024-04-30 13:17:26Functions:0.0 %320
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // class template regex -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2013-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /**
+      26              :  *  @file bits/regex_automaton.h
+      27              :  *  This is an internal header file, included by other library headers.
+      28              :  *  Do not attempt to use it directly. @headername{regex}
+      29              :  */
+      30              : 
+      31              : // This macro defines the maximal state number a NFA can have.
+      32              : #ifndef _GLIBCXX_REGEX_STATE_LIMIT
+      33              : #define _GLIBCXX_REGEX_STATE_LIMIT 100000
+      34              : #endif
+      35              : 
+      36              : namespace std _GLIBCXX_VISIBILITY(default)
+      37              : {
+      38              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      39              : 
+      40              : namespace __detail
+      41              : {
+      42              :   /**
+      43              :    *  @defgroup regex-detail Base and Implementation Classes
+      44              :    *  @ingroup regex
+      45              :    *  @{
+      46              :    */
+      47              : 
+      48              :   typedef long _StateIdT;
+      49              :   _GLIBCXX17_INLINE constexpr _StateIdT _S_invalid_state_id  = -1;
+      50              : 
+      51              :   template<typename _CharT>
+      52              :     using _Matcher = std::function<bool (_CharT)>;
+      53              : 
+      54              :   /// Operation codes that define the type of transitions within the base NFA
+      55              :   /// that represents the regular expression.
+      56              :   enum _Opcode : int
+      57              :   {
+      58              :       _S_opcode_unknown,
+      59              :       _S_opcode_alternative,
+      60              :       _S_opcode_repeat,
+      61              :       _S_opcode_backref,
+      62              :       _S_opcode_line_begin_assertion,
+      63              :       _S_opcode_line_end_assertion,
+      64              :       _S_opcode_word_boundary,
+      65              :       _S_opcode_subexpr_lookahead,
+      66              :       _S_opcode_subexpr_begin,
+      67              :       _S_opcode_subexpr_end,
+      68              :       _S_opcode_dummy,
+      69              :       _S_opcode_match,
+      70              :       _S_opcode_accept,
+      71              :   };
+      72              : 
+      73              :   struct _State_base
+      74              :   {
+      75              :   protected:
+      76              :     _Opcode      _M_opcode;           // type of outgoing transition
+      77              : 
+      78              :   public:
+      79              :     _StateIdT    _M_next;             // outgoing transition
+      80              :     union // Since they are mutually exclusive.
+      81              :     {
+      82              :       size_t _M_subexpr;        // for _S_opcode_subexpr_*
+      83              :       size_t _M_backref_index;  // for _S_opcode_backref
+      84              :       struct
+      85              :       {
+      86              :         // for _S_opcode_alternative, _S_opcode_repeat and
+      87              :         // _S_opcode_subexpr_lookahead
+      88              :         _StateIdT  _M_alt;
+      89              :         // for _S_opcode_word_boundary or _S_opcode_subexpr_lookahead or
+      90              :         // quantifiers (ungreedy if set true)
+      91              :         bool       _M_neg;
+      92              :       };
+      93              :       // For _S_opcode_match
+      94              :       __gnu_cxx::__aligned_membuf<_Matcher<char>> _M_matcher_storage;
+      95              :     };
+      96              : 
+      97              :   protected:
+      98            0 :     explicit _State_base(_Opcode __opcode) noexcept
+      99            0 :     : _M_opcode(__opcode), _M_next(_S_invalid_state_id)
+     100            0 :     { }
+     101              : 
+     102              :   public:
+     103              :     bool
+     104            0 :     _M_has_alt() const noexcept
+     105              :     {
+     106            0 :       return _M_opcode == _S_opcode_alternative
+     107            0 :         || _M_opcode == _S_opcode_repeat
+     108            0 :         || _M_opcode == _S_opcode_subexpr_lookahead;
+     109              :     }
+     110              : 
+     111              : #ifdef _GLIBCXX_DEBUG
+     112              :     std::ostream&
+     113              :     _M_print(std::ostream& __ostr) const;
+     114              : 
+     115              :     // Prints graphviz dot commands for state.
+     116              :     std::ostream&
+     117              :     _M_dot(std::ostream& __ostr, _StateIdT __id) const;
+     118              : #endif
+     119              :   };
+     120              : 
+     121              :   template<typename _Char_type>
+     122              :     struct _State : _State_base
+     123              :     {
+     124              :       typedef _Matcher<_Char_type> _MatcherT;
+     125              :       static_assert(sizeof(_MatcherT) == sizeof(_Matcher<char>),
+     126              :                     "std::function<bool(T)> has the same size as "
+     127              :                     "std::function<bool(char)>");
+     128              :       static_assert(alignof(_MatcherT) == alignof(_Matcher<char>),
+     129              :                     "std::function<bool(T)> has the same alignment as "
+     130              :                     "std::function<bool(char)>");
+     131              : 
+     132              :       explicit
+     133            0 :       _State(_Opcode __opcode) noexcept : _State_base(__opcode)
+     134              :       {
+     135            0 :         if (_M_opcode() == _S_opcode_match)
+     136            0 :           new (this->_M_matcher_storage._M_addr()) _MatcherT();
+     137            0 :       }
+     138              : 
+     139            0 :       _State(const _State& __rhs) : _State_base(__rhs)
+     140              :       {
+     141            0 :         if (__rhs._M_opcode() == _S_opcode_match)
+     142            0 :           new (this->_M_matcher_storage._M_addr())
+     143            0 :             _MatcherT(__rhs._M_get_matcher());
+     144            0 :       }
+     145              : 
+     146            0 :       _State(_State&& __rhs) noexcept : _State_base(__rhs)
+     147              :       {
+     148            0 :         if (__rhs._M_opcode() == _S_opcode_match)
+     149            0 :           new (this->_M_matcher_storage._M_addr())
+     150            0 :             _MatcherT(std::move(__rhs._M_get_matcher()));
+     151            0 :       }
+     152              : 
+     153              :       _State&
+     154              :       operator=(const _State&) = delete;
+     155              : 
+     156            0 :       ~_State()
+     157              :       {
+     158            0 :         if (_M_opcode() == _S_opcode_match)
+     159            0 :           _M_get_matcher().~_MatcherT();
+     160            0 :       }
+     161              : 
+     162              :       // Since correct ctor and dtor rely on _M_opcode, it's better not to
+     163              :       // change it over time.
+     164              :       _Opcode
+     165            0 :       _M_opcode() const noexcept
+     166            0 :       { return _State_base::_M_opcode; }
+     167              : 
+     168              :       bool
+     169            0 :       _M_matches(_Char_type __char) const
+     170            0 :       { return _M_get_matcher()(__char); }
+     171              : 
+     172              :       _MatcherT&
+     173            0 :       _M_get_matcher() noexcept
+     174            0 :       { return *static_cast<_MatcherT*>(this->_M_matcher_storage._M_addr()); }
+     175              : 
+     176              :       const _MatcherT&
+     177            0 :       _M_get_matcher() const noexcept
+     178              :       {
+     179              :         return *static_cast<const _MatcherT*>(
+     180            0 :             this->_M_matcher_storage._M_addr());
+     181              :       }
+     182              :     };
+     183              : 
+     184              :   struct _NFA_base
+     185              :   {
+     186              :     typedef regex_constants::syntax_option_type _FlagT;
+     187              : 
+     188              :     explicit
+     189            0 :     _NFA_base(_FlagT __f) noexcept
+     190            0 :     : _M_flags(__f), _M_start_state(0), _M_subexpr_count(0),
+     191            0 :     _M_has_backref(false)
+     192            0 :     { }
+     193              : 
+     194              :     _NFA_base(_NFA_base&&) = default;
+     195              : 
+     196              :   protected:
+     197            0 :     ~_NFA_base() = default;
+     198              : 
+     199              :   public:
+     200              :     _FlagT
+     201            0 :     _M_options() const noexcept
+     202            0 :     { return _M_flags; }
+     203              : 
+     204              :     _StateIdT
+     205            0 :     _M_start() const noexcept
+     206            0 :     { return _M_start_state; }
+     207              : 
+     208              :     size_t
+     209            0 :     _M_sub_count() const noexcept
+     210            0 :     { return _M_subexpr_count; }
+     211              : 
+     212              :     _GLIBCXX_STD_C::vector<size_t> _M_paren_stack;
+     213              :     _FlagT                    _M_flags;
+     214              :     _StateIdT                 _M_start_state;
+     215              :     size_t                    _M_subexpr_count;
+     216              :     bool                      _M_has_backref;
+     217              :   };
+     218              : 
+     219              :   template<typename _TraitsT>
+     220              :     struct _NFA
+     221              :     : _NFA_base, _GLIBCXX_STD_C::vector<_State<typename _TraitsT::char_type>>
+     222              :     {
+     223              :       typedef typename _TraitsT::char_type      _Char_type;
+     224              :       typedef _State<_Char_type>          _StateT;
+     225              :       typedef _Matcher<_Char_type>                _MatcherT;
+     226              : 
+     227            0 :       _NFA(const typename _TraitsT::locale_type& __loc, _FlagT __flags)
+     228            0 :       : _NFA_base(__flags)
+     229            0 :       { _M_traits.imbue(__loc); }
+     230              : 
+     231              :       // for performance reasons _NFA objects should only be moved not copied
+     232              :       _NFA(const _NFA&) = delete;
+     233              :       _NFA(_NFA&&) = default;
+     234              : 
+     235              :       _StateIdT
+     236            0 :       _M_insert_accept()
+     237              :       {
+     238            0 :         auto __ret = _M_insert_state(_StateT(_S_opcode_accept));
+     239            0 :         return __ret;
+     240              :       }
+     241              : 
+     242              :       _StateIdT
+     243            0 :       _M_insert_alt(_StateIdT __next, _StateIdT __alt,
+     244              :                     bool __neg __attribute__((__unused__)))
+     245              :       {
+     246            0 :         _StateT __tmp(_S_opcode_alternative);
+     247              :         // It labels every quantifier to make greedy comparison easier in BFS
+     248              :         // approach.
+     249            0 :         __tmp._M_next = __next;
+     250            0 :         __tmp._M_alt = __alt;
+     251            0 :         return _M_insert_state(std::move(__tmp));
+     252            0 :       }
+     253              : 
+     254              :       _StateIdT
+     255            0 :       _M_insert_repeat(_StateIdT __next, _StateIdT __alt, bool __neg)
+     256              :       {
+     257            0 :         _StateT __tmp(_S_opcode_repeat);
+     258              :         // It labels every quantifier to make greedy comparison easier in BFS
+     259              :         // approach.
+     260            0 :         __tmp._M_next = __next;
+     261            0 :         __tmp._M_alt = __alt;
+     262            0 :         __tmp._M_neg = __neg;
+     263            0 :         return _M_insert_state(std::move(__tmp));
+     264            0 :       }
+     265              : 
+     266              :       _StateIdT
+     267            0 :       _M_insert_matcher(_MatcherT __m)
+     268              :       {
+     269            0 :         _StateT __tmp(_S_opcode_match);
+     270            0 :         __tmp._M_get_matcher() = std::move(__m);
+     271            0 :         return _M_insert_state(std::move(__tmp));
+     272            0 :       }
+     273              : 
+     274              :       _StateIdT
+     275            0 :       _M_insert_subexpr_begin()
+     276              :       {
+     277            0 :         auto __id = this->_M_subexpr_count++;
+     278            0 :         this->_M_paren_stack.push_back(__id);
+     279            0 :         _StateT __tmp(_S_opcode_subexpr_begin);
+     280            0 :         __tmp._M_subexpr = __id;
+     281            0 :         return _M_insert_state(std::move(__tmp));
+     282            0 :       }
+     283              : 
+     284              :       _StateIdT
+     285            0 :       _M_insert_subexpr_end()
+     286              :       {
+     287            0 :         _StateT __tmp(_S_opcode_subexpr_end);
+     288            0 :         __tmp._M_subexpr = this->_M_paren_stack.back();
+     289            0 :         this->_M_paren_stack.pop_back();
+     290            0 :         return _M_insert_state(std::move(__tmp));
+     291            0 :       }
+     292              : 
+     293              :       _StateIdT
+     294              :       _M_insert_backref(size_t __index);
+     295              : 
+     296              :       _StateIdT
+     297            0 :       _M_insert_line_begin()
+     298            0 :       { return _M_insert_state(_StateT(_S_opcode_line_begin_assertion)); }
+     299              : 
+     300              :       _StateIdT
+     301            0 :       _M_insert_line_end()
+     302            0 :       { return _M_insert_state(_StateT(_S_opcode_line_end_assertion)); }
+     303              : 
+     304              :       _StateIdT
+     305            0 :       _M_insert_word_bound(bool __neg)
+     306              :       {
+     307            0 :         _StateT __tmp(_S_opcode_word_boundary);
+     308            0 :         __tmp._M_neg = __neg;
+     309            0 :         return _M_insert_state(std::move(__tmp));
+     310            0 :       }
+     311              : 
+     312              :       _StateIdT
+     313            0 :       _M_insert_lookahead(_StateIdT __alt, bool __neg)
+     314              :       {
+     315            0 :         _StateT __tmp(_S_opcode_subexpr_lookahead);
+     316            0 :         __tmp._M_alt = __alt;
+     317            0 :         __tmp._M_neg = __neg;
+     318            0 :         return _M_insert_state(std::move(__tmp));
+     319            0 :       }
+     320              : 
+     321              :       _StateIdT
+     322            0 :       _M_insert_dummy()
+     323            0 :       { return _M_insert_state(_StateT(_S_opcode_dummy)); }
+     324              : 
+     325              :       _StateIdT
+     326            0 :       _M_insert_state(_StateT __s)
+     327              :       {
+     328            0 :         this->push_back(std::move(__s));
+     329            0 :         if (this->size() > _GLIBCXX_REGEX_STATE_LIMIT)
+     330            0 :           __throw_regex_error(
+     331              :             regex_constants::error_space,
+     332              :             "Number of NFA states exceeds limit. Please use shorter regex "
+     333              :             "string, or use smaller brace expression, or make "
+     334              :             "_GLIBCXX_REGEX_STATE_LIMIT larger.");
+     335            0 :         return this->size() - 1;
+     336              :       }
+     337              : 
+     338              :       // Eliminate dummy node in this NFA to make it compact.
+     339              :       void
+     340              :       _M_eliminate_dummy();
+     341              : 
+     342              : #ifdef _GLIBCXX_DEBUG
+     343              :       std::ostream&
+     344              :       _M_dot(std::ostream& __ostr) const;
+     345              : #endif
+     346              :     public:
+     347              :       _TraitsT                  _M_traits;
+     348              :     };
+     349              : 
+     350              :   /// Describes a sequence of one or more %_State, its current start
+     351              :   /// and end(s).  This structure contains fragments of an NFA during
+     352              :   /// construction.
+     353              :   template<typename _TraitsT>
+     354              :     class _StateSeq
+     355              :     {
+     356              :     public:
+     357              :       typedef _NFA<_TraitsT> _RegexT;
+     358              : 
+     359              :     public:
+     360            0 :       _StateSeq(_RegexT& __nfa, _StateIdT __s)
+     361            0 :       : _M_nfa(__nfa), _M_start(__s), _M_end(__s)
+     362            0 :       { }
+     363              : 
+     364            0 :       _StateSeq(_RegexT& __nfa, _StateIdT __s, _StateIdT __end)
+     365            0 :       : _M_nfa(__nfa), _M_start(__s), _M_end(__end)
+     366            0 :       { }
+     367              : 
+     368              :       // Append a state on *this and change *this to the new sequence.
+     369              :       void
+     370            0 :       _M_append(_StateIdT __id)
+     371              :       {
+     372            0 :         _M_nfa[_M_end]._M_next = __id;
+     373            0 :         _M_end = __id;
+     374            0 :       }
+     375              : 
+     376              :       // Append a sequence on *this and change *this to the new sequence.
+     377              :       void
+     378            0 :       _M_append(const _StateSeq& __s)
+     379              :       {
+     380            0 :         _M_nfa[_M_end]._M_next = __s._M_start;
+     381            0 :         _M_end = __s._M_end;
+     382            0 :       }
+     383              : 
+     384              :       // Clones an entire sequence.
+     385              :       _StateSeq
+     386              :       _M_clone();
+     387              : 
+     388              :     public:
+     389              :       _RegexT&  _M_nfa;
+     390              :       _StateIdT _M_start;
+     391              :       _StateIdT _M_end;
+     392              :     };
+     393              : 
+     394              :  ///@} regex-detail
+     395              : } // namespace __detail
+     396              : 
+     397              : _GLIBCXX_END_NAMESPACE_VERSION
+     398              : } // namespace std
+     399              : 
+     400              : #include <bits/regex_automaton.tcc>
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_automaton.tcc.func-c.html b/html/usr/include/c++/13/bits/regex_automaton.tcc.func-c.html new file mode 100644 index 0000000..591404c --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_automaton.tcc.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_automaton.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_automaton.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %490
Test Date:2024-04-30 13:17:26Functions:0.0 %30
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE17_M_insert_backrefEm0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE18_M_eliminate_dummyEv0
_ZNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEE8_M_cloneEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_automaton.tcc.func.html b/html/usr/include/c++/13/bits/regex_automaton.tcc.func.html new file mode 100644 index 0000000..8b332bc --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_automaton.tcc.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_automaton.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_automaton.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %490
Test Date:2024-04-30 13:17:26Functions:0.0 %30
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE17_M_insert_backrefEm0
_ZNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEE18_M_eliminate_dummyEv0
_ZNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEE8_M_cloneEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_automaton.tcc.gcov.html b/html/usr/include/c++/13/bits/regex_automaton.tcc.gcov.html new file mode 100644 index 0000000..2234774 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_automaton.tcc.gcov.html @@ -0,0 +1,308 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_automaton.tcc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_automaton.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %490
Test Date:2024-04-30 13:17:26Functions:0.0 %30
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // class template regex -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2013-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /**
+      26              :  *  @file bits/regex_automaton.tcc
+      27              :  *  This is an internal header file, included by other library headers.
+      28              :  *  Do not attempt to use it directly. @headername{regex}
+      29              :  */
+      30              : 
+      31              : namespace std _GLIBCXX_VISIBILITY(default)
+      32              : {
+      33              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      34              : 
+      35              : namespace __detail
+      36              : {
+      37              : #ifdef _GLIBCXX_DEBUG
+      38              :   inline std::ostream&
+      39              :   _State_base::_M_print(std::ostream& __ostr) const
+      40              :   {
+      41              :     switch (_M_opcode)
+      42              :     {
+      43              :       case _S_opcode_alternative:
+      44              :       case _S_opcode_repeat:
+      45              :         __ostr << "alt next=" << _M_next << " alt=" << _M_alt;
+      46              :         break;
+      47              :       case _S_opcode_subexpr_begin:
+      48              :         __ostr << "subexpr begin next=" << _M_next << " index=" << _M_subexpr;
+      49              :         break;
+      50              :       case _S_opcode_subexpr_end:
+      51              :         __ostr << "subexpr end next=" << _M_next << " index=" << _M_subexpr;
+      52              :         break;
+      53              :       case _S_opcode_backref:
+      54              :         __ostr << "backref next=" << _M_next << " index=" << _M_backref_index;
+      55              :         break;
+      56              :       case _S_opcode_match:
+      57              :         __ostr << "match next=" << _M_next;
+      58              :         break;
+      59              :       case _S_opcode_accept:
+      60              :         __ostr << "accept next=" << _M_next;
+      61              :         break;
+      62              :       default:
+      63              :         __ostr << "unknown next=" << _M_next;
+      64              :         break;
+      65              :     }
+      66              :     return __ostr;
+      67              :   }
+      68              : 
+      69              :   // Prints graphviz dot commands for state.
+      70              :   inline std::ostream&
+      71              :   _State_base::_M_dot(std::ostream& __ostr, _StateIdT __id) const
+      72              :   {
+      73              :     switch (_M_opcode)
+      74              :     {
+      75              :       case _S_opcode_alternative:
+      76              :       case _S_opcode_repeat:
+      77              :         __ostr << __id << " [label=\"" << __id << "\\nALT\"];\n"
+      78              :                << __id << " -> " << _M_next
+      79              :                << " [label=\"next\", tailport=\"s\"];\n"
+      80              :                << __id << " -> " << _M_alt
+      81              :                << " [label=\"alt\", tailport=\"n\"];\n";
+      82              :         break;
+      83              :       case _S_opcode_backref:
+      84              :         __ostr << __id << " [label=\"" << __id << "\\nBACKREF "
+      85              :                << _M_subexpr << "\"];\n"
+      86              :                << __id << " -> " << _M_next << " [label=\"<match>\"];\n";
+      87              :         break;
+      88              :       case _S_opcode_line_begin_assertion:
+      89              :         __ostr << __id << " [label=\"" << __id << "\\nLINE_BEGIN \"];\n"
+      90              :                << __id << " -> " << _M_next << " [label=\"epsilon\"];\n";
+      91              :         break;
+      92              :       case _S_opcode_line_end_assertion:
+      93              :         __ostr << __id << " [label=\"" << __id << "\\nLINE_END \"];\n"
+      94              :                << __id << " -> " << _M_next << " [label=\"epsilon\"];\n";
+      95              :         break;
+      96              :       case _S_opcode_word_boundary:
+      97              :         __ostr << __id << " [label=\"" << __id << "\\nWORD_BOUNDRY "
+      98              :                << _M_neg << "\"];\n"
+      99              :                << __id << " -> " << _M_next << " [label=\"epsilon\"];\n";
+     100              :         break;
+     101              :       case _S_opcode_subexpr_lookahead:
+     102              :         __ostr << __id << " [label=\"" << __id << "\\nLOOK_AHEAD\"];\n"
+     103              :                << __id << " -> " << _M_next
+     104              :                << " [label=\"epsilon\", tailport=\"s\"];\n"
+     105              :                << __id << " -> " << _M_alt
+     106              :                << " [label=\"<assert>\", tailport=\"n\"];\n";
+     107              :         break;
+     108              :       case _S_opcode_subexpr_begin:
+     109              :         __ostr << __id << " [label=\"" << __id << "\\nSBEGIN "
+     110              :                << _M_subexpr << "\"];\n"
+     111              :                << __id << " -> " << _M_next << " [label=\"epsilon\"];\n";
+     112              :         break;
+     113              :       case _S_opcode_subexpr_end:
+     114              :         __ostr << __id << " [label=\"" << __id << "\\nSEND "
+     115              :                << _M_subexpr << "\"];\n"
+     116              :                << __id << " -> " << _M_next << " [label=\"epsilon\"];\n";
+     117              :         break;
+     118              :       case _S_opcode_dummy:
+     119              :         break;
+     120              :       case _S_opcode_match:
+     121              :         __ostr << __id << " [label=\"" << __id << "\\nMATCH\"];\n"
+     122              :                << __id << " -> " << _M_next << " [label=\"<match>\"];\n";
+     123              :         break;
+     124              :       case _S_opcode_accept:
+     125              :         __ostr << __id << " [label=\"" << __id << "\\nACC\"];\n" ;
+     126              :         break;
+     127              :       default:
+     128              :         _GLIBCXX_DEBUG_ASSERT(false);
+     129              :         break;
+     130              :     }
+     131              :     return __ostr;
+     132              :   }
+     133              : 
+     134              :   template<typename _TraitsT>
+     135              :     std::ostream&
+     136              :     _NFA<_TraitsT>::_M_dot(std::ostream& __ostr) const
+     137              :     {
+     138              :       __ostr << "digraph _Nfa {\n"
+     139              :                 "  rankdir=LR;\n";
+     140              :       for (size_t __i = 0; __i < this->size(); ++__i)
+     141              :         (*this)[__i]._M_dot(__ostr, __i);
+     142              :       __ostr << "}\n";
+     143              :       return __ostr;
+     144              :     }
+     145              : #endif
+     146              : 
+     147              :   template<typename _TraitsT>
+     148              :     _StateIdT
+     149            0 :     _NFA<_TraitsT>::_M_insert_backref(size_t __index)
+     150              :     {
+     151            0 :       if (this->_M_flags & regex_constants::__polynomial)
+     152            0 :         __throw_regex_error(regex_constants::error_complexity,
+     153              :                             "Unexpected back-reference in polynomial mode.");
+     154              :       // To figure out whether a backref is valid, a stack is used to store
+     155              :       // unfinished sub-expressions. For example, when parsing
+     156              :       // "(a(b)(c\\1(d)))" at '\\1', _M_subexpr_count is 3, indicating that 3
+     157              :       // sub expressions are parsed or partially parsed(in the stack), aka,
+     158              :       // "(a..", "(b)" and "(c..").
+     159              :       // _M_paren_stack is {1, 3}, for incomplete "(a.." and "(c..". At this
+     160              :       // time, "\\2" is valid, but "\\1" and "\\3" are not.
+     161            0 :       if (__index >= _M_subexpr_count)
+     162            0 :         __throw_regex_error(
+     163              :           regex_constants::error_backref,
+     164              :           "Back-reference index exceeds current sub-expression count.");
+     165            0 :       for (auto __it : this->_M_paren_stack)
+     166            0 :         if (__index == __it)
+     167            0 :           __throw_regex_error(
+     168              :             regex_constants::error_backref,
+     169              :             "Back-reference referred to an opened sub-expression.");
+     170            0 :       this->_M_has_backref = true;
+     171            0 :       _StateT __tmp(_S_opcode_backref);
+     172            0 :       __tmp._M_backref_index = __index;
+     173            0 :       return _M_insert_state(std::move(__tmp));
+     174            0 :     }
+     175              : 
+     176              :   template<typename _TraitsT>
+     177              :     void
+     178            0 :     _NFA<_TraitsT>::_M_eliminate_dummy()
+     179              :     {
+     180            0 :       for (auto& __it : *this)
+     181              :         {
+     182            0 :           while (__it._M_next >= 0 && (*this)[__it._M_next]._M_opcode()
+     183              :                  == _S_opcode_dummy)
+     184            0 :             __it._M_next = (*this)[__it._M_next]._M_next;
+     185            0 :           if (__it._M_has_alt())
+     186            0 :             while (__it._M_alt >= 0 && (*this)[__it._M_alt]._M_opcode()
+     187              :                    == _S_opcode_dummy)
+     188            0 :               __it._M_alt = (*this)[__it._M_alt]._M_next;
+     189              :         }
+     190            0 :     }
+     191              : 
+     192              :   // Just apply DFS on the sequence and re-link their links.
+     193              :   template<typename _TraitsT>
+     194              :     _StateSeq<_TraitsT>
+     195            0 :     _StateSeq<_TraitsT>::_M_clone()
+     196              :     {
+     197            0 :       _GLIBCXX_STD_C::map<_StateIdT, _StateIdT> __m;
+     198            0 :       std::stack<_StateIdT, _GLIBCXX_STD_C::deque<_StateIdT>> __stack;
+     199            0 :       __stack.push(_M_start);
+     200            0 :       while (!__stack.empty())
+     201              :         {
+     202            0 :           auto __u = __stack.top();
+     203            0 :           __stack.pop();
+     204            0 :           auto __dup = _M_nfa[__u];
+     205              :           // _M_insert_state() never return -1
+     206            0 :           auto __id = _M_nfa._M_insert_state(std::move(__dup));
+     207            0 :           __m[__u] = __id;
+     208            0 :           if (__dup._M_has_alt())
+     209            0 :             if (__dup._M_alt != _S_invalid_state_id
+     210            0 :                 && __m.count(__dup._M_alt) == 0)
+     211            0 :               __stack.push(__dup._M_alt);
+     212            0 :           if (__u == _M_end)
+     213            0 :             continue;
+     214            0 :           if (__dup._M_next != _S_invalid_state_id
+     215            0 :               && __m.count(__dup._M_next) == 0)
+     216            0 :             __stack.push(__dup._M_next);
+     217              :         }
+     218            0 :       for (auto __it : __m)
+     219              :         {
+     220            0 :           auto __v = __it.second;
+     221            0 :           auto& __ref = _M_nfa[__v];
+     222            0 :           if (__ref._M_next != _S_invalid_state_id)
+     223            0 :             __ref._M_next = __m.find(__ref._M_next)->second;
+     224            0 :           if (__ref._M_has_alt() && __ref._M_alt != _S_invalid_state_id)
+     225            0 :             __ref._M_alt = __m.find(__ref._M_alt)->second;
+     226              :         }
+     227            0 :       return _StateSeq(_M_nfa, __m[_M_start], __m[_M_end]);
+     228            0 :     }
+     229              : } // namespace __detail
+     230              : 
+     231              : _GLIBCXX_END_NAMESPACE_VERSION
+     232              : } // namespace
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_compiler.h.func-c.html b/html/usr/include/c++/13/bits/regex_compiler.h.func-c.html new file mode 100644 index 0000000..43d2381 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_compiler.h.func-c.html @@ -0,0 +1,880 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_compiler.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_compiler.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %1280
Test Date:2024-04-30 13:17:26Functions:0.0 %940
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEclEc0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEclEc0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEclEc0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEclEc0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEclEc0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEclEc0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEclEc0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEclEc0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEclEc0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEclEc0
_ZNKSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEclEc0
_ZNKSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEclEc0
_ZNKSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEclEc0
_ZNKSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEclEc0
_ZNKSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEclEc0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEclEc0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEclEc0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEclEc0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEclEc0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEclEc0
_ZNKSt8__detail16_RegexTranslatorINSt7__cxx1112regex_traitsIcEELb0ELb0EE12_M_transformEc0
_ZNKSt8__detail16_RegexTranslatorINSt7__cxx1112regex_traitsIcEELb0ELb0EE12_M_translateEc0
_ZNKSt8__detail16_RegexTranslatorINSt7__cxx1112regex_traitsIcEELb0ELb0EE14_M_match_rangeEccc0
_ZNKSt8__detail16_RegexTranslatorINSt7__cxx1112regex_traitsIcEELb1ELb0EE12_M_transformEc0
_ZNKSt8__detail16_RegexTranslatorINSt7__cxx1112regex_traitsIcEELb1ELb0EE14_M_match_rangeEccc0
_ZNKSt8__detail16_RegexTranslatorINSt7__cxx1112regex_traitsIcEELb1ELb1EE14_M_match_rangeERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEESB_SB_0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb0ELb1EE12_M_transformEc0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb0ELb1EE12_M_transformEc0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb1ELb1EE12_M_transformEc0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb0ELb1EE12_M_translateEc0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb0ELb1EE12_M_translateEc0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb1ELb0EE12_M_translateEc0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb1ELb1EE12_M_translateEc0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb0ELb1EE14_M_match_rangeERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEESB_SB_0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb1ELb0EE17_M_in_range_icaseEccc0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb1ELb0EE17_M_in_range_icaseEccc0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb1ELb1EE17_M_in_range_icaseEccc0
_ZNKSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE13_BracketState10_M_is_charEv0
_ZNKSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE13_BracketState11_M_is_classEv0
_ZNKSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE13_BracketState3getEv0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEC2ERKS3_0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEC2ERKS3_0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEC2ERKS3_0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEC2ERKS3_0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEC2ERKS3_0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEC2ERKS3_0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEC2ERKS3_0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEC2ERKS3_0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEC2ERKS3_0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEC2ERKS3_0
_ZNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEC2EcRKS3_0
_ZNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEC2EcRKS3_0
_ZNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEC2EcRKS3_0
_ZNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEC2EcRKS3_0
_ZNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEC2EcRKS3_0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE11_M_add_charEc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE11_M_add_charEc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE11_M_add_charEc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE11_M_add_charEc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE11_M_add_charEc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE13_M_make_cacheESt17integral_constantIbLb1EE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE13_M_make_cacheESt17integral_constantIbLb1EE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE13_M_make_cacheESt17integral_constantIbLb1EE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE13_M_make_cacheESt17integral_constantIbLb1EE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE13_M_make_cacheESt17integral_constantIbLb1EE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE13_M_make_rangeEcc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE13_M_make_rangeEcc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE13_M_make_rangeEcc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE13_M_make_rangeEcc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE13_M_make_rangeEcc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE22_M_add_character_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEEb0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE22_M_add_character_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEEb0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE22_M_add_character_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEEb0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE22_M_add_character_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEEb0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE22_M_add_character_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEEb0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE22_M_add_collate_elementERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE22_M_add_collate_elementERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE22_M_add_collate_elementERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE22_M_add_collate_elementERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE22_M_add_collate_elementERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE24_M_add_equivalence_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE24_M_add_equivalence_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE24_M_add_equivalence_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE24_M_add_equivalence_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE24_M_add_equivalence_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE8_M_readyEv0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE8_M_readyEv0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE8_M_readyEv0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE8_M_readyEv0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE8_M_readyEv0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEC2EbRKS3_0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEC2EbRKS3_0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEC2EbRKS3_0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEC2EbRKS3_0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEC2EbRKS3_0
_ZNSt8__detail16_RegexTranslatorINSt7__cxx1112regex_traitsIcEELb0ELb0EEC2ERKS3_0
_ZNSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb0ELb1EEC2ERKS3_0
_ZNSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb0ELb1EEC2ERKS3_0
_ZNSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb1ELb0EEC2ERKS3_0
_ZNSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb1ELb1EEC2ERKS3_0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE10_M_get_nfaEv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE11_S_validateENSt15regex_constants18syntax_option_typeE0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE13_BracketState3setEc0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE13_BracketState5resetENS5_5_TypeE0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE6_M_popEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_compiler.h.func.html b/html/usr/include/c++/13/bits/regex_compiler.h.func.html new file mode 100644 index 0000000..26f78d1 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_compiler.h.func.html @@ -0,0 +1,880 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_compiler.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_compiler.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %1280
Test Date:2024-04-30 13:17:26Functions:0.0 %940
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEclEc0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEclEc0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEclEc0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEclEc0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEclEc0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEclEc0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEclEc0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEclEc0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEclEc0
_ZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEclEc0
_ZNKSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEclEc0
_ZNKSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEclEc0
_ZNKSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEclEc0
_ZNKSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEclEc0
_ZNKSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEclEc0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE8_M_applyEcSt17integral_constantIbLb1EE0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEclEc0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEclEc0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEclEc0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEclEc0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEclEc0
_ZNKSt8__detail16_RegexTranslatorINSt7__cxx1112regex_traitsIcEELb0ELb0EE12_M_transformEc0
_ZNKSt8__detail16_RegexTranslatorINSt7__cxx1112regex_traitsIcEELb0ELb0EE12_M_translateEc0
_ZNKSt8__detail16_RegexTranslatorINSt7__cxx1112regex_traitsIcEELb0ELb0EE14_M_match_rangeEccc0
_ZNKSt8__detail16_RegexTranslatorINSt7__cxx1112regex_traitsIcEELb1ELb0EE12_M_transformEc0
_ZNKSt8__detail16_RegexTranslatorINSt7__cxx1112regex_traitsIcEELb1ELb0EE14_M_match_rangeEccc0
_ZNKSt8__detail16_RegexTranslatorINSt7__cxx1112regex_traitsIcEELb1ELb1EE14_M_match_rangeERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEESB_SB_0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb0ELb1EE12_M_transformEc0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb0ELb1EE12_M_transformEc0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb1ELb1EE12_M_transformEc0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb0ELb1EE12_M_translateEc0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb0ELb1EE12_M_translateEc0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb1ELb0EE12_M_translateEc0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb1ELb1EE12_M_translateEc0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb0ELb1EE14_M_match_rangeERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEESB_SB_0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb1ELb0EE17_M_in_range_icaseEccc0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb1ELb0EE17_M_in_range_icaseEccc0
_ZNKSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb1ELb1EE17_M_in_range_icaseEccc0
_ZNKSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE13_BracketState10_M_is_charEv0
_ZNKSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE13_BracketState11_M_is_classEv0
_ZNKSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE13_BracketState3getEv0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEC2ERKS3_0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEC2ERKS3_0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEC2ERKS3_0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEC2ERKS3_0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEC2ERKS3_0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEC2ERKS3_0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEC2ERKS3_0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEC2ERKS3_0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEC2ERKS3_0
_ZNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEC2ERKS3_0
_ZNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEC2EcRKS3_0
_ZNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEC2EcRKS3_0
_ZNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEC2EcRKS3_0
_ZNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEC2EcRKS3_0
_ZNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEC2EcRKS3_0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE11_M_add_charEc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE11_M_add_charEc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE11_M_add_charEc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE11_M_add_charEc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE11_M_add_charEc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE13_M_make_cacheESt17integral_constantIbLb1EE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE13_M_make_cacheESt17integral_constantIbLb1EE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE13_M_make_cacheESt17integral_constantIbLb1EE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE13_M_make_cacheESt17integral_constantIbLb1EE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE13_M_make_cacheESt17integral_constantIbLb1EE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE13_M_make_rangeEcc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE13_M_make_rangeEcc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE13_M_make_rangeEcc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE13_M_make_rangeEcc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE13_M_make_rangeEcc0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE22_M_add_character_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEEb0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE22_M_add_character_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEEb0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE22_M_add_character_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEEb0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE22_M_add_character_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEEb0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE22_M_add_character_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEEb0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE22_M_add_collate_elementERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE22_M_add_collate_elementERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE22_M_add_collate_elementERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE22_M_add_collate_elementERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE22_M_add_collate_elementERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE24_M_add_equivalence_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE24_M_add_equivalence_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE24_M_add_equivalence_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE24_M_add_equivalence_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE24_M_add_equivalence_classERKNS1_12basic_stringIcSt11char_traitsIcESaIcEEE0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE8_M_readyEv0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE8_M_readyEv0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE8_M_readyEv0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE8_M_readyEv0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE8_M_readyEv0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEC2EbRKS3_0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEC2EbRKS3_0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEC2EbRKS3_0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEC2EbRKS3_0
_ZNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEC2EbRKS3_0
_ZNSt8__detail16_RegexTranslatorINSt7__cxx1112regex_traitsIcEELb0ELb0EEC2ERKS3_0
_ZNSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb0ELb1EEC2ERKS3_0
_ZNSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb0ELb1EEC2ERKS3_0
_ZNSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb1ELb0EEC2ERKS3_0
_ZNSt8__detail20_RegexTranslatorBaseINSt7__cxx1112regex_traitsIcEELb1ELb1EEC2ERKS3_0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE10_M_get_nfaEv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE11_S_validateENSt15regex_constants18syntax_option_typeE0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE13_BracketState3setEc0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE13_BracketState5resetENS5_5_TypeE0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE6_M_popEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_compiler.h.gcov.html b/html/usr/include/c++/13/bits/regex_compiler.h.gcov.html new file mode 100644 index 0000000..697f9d9 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_compiler.h.gcov.html @@ -0,0 +1,647 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_compiler.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_compiler.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %1280
Test Date:2024-04-30 13:17:26Functions:0.0 %940
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // class template regex -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2010-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /**
+      26              :  *  @file bits/regex_compiler.h
+      27              :  *  This is an internal header file, included by other library headers.
+      28              :  *  Do not attempt to use it directly. @headername{regex}
+      29              :  */
+      30              : 
+      31              : namespace std _GLIBCXX_VISIBILITY(default)
+      32              : {
+      33              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      34              : _GLIBCXX_BEGIN_NAMESPACE_CXX11
+      35              : 
+      36              :   template<typename>
+      37              :     class regex_traits;
+      38              : 
+      39              : _GLIBCXX_END_NAMESPACE_CXX11
+      40              : 
+      41              : namespace __detail
+      42              : {
+      43              :   /**
+      44              :    * @addtogroup regex-detail
+      45              :    * @{
+      46              :    */
+      47              : 
+      48              :   template<typename, bool, bool>
+      49              :     struct _BracketMatcher;
+      50              : 
+      51              :   /**
+      52              :    * @brief Builds an NFA from an input iterator range.
+      53              :    *
+      54              :    * The %_TraitsT type should fulfill requirements [28.3].
+      55              :    */
+      56              :   template<typename _TraitsT>
+      57              :     class _Compiler
+      58              :     {
+      59              :     public:
+      60              :       typedef typename _TraitsT::char_type        _CharT;
+      61              :       typedef _NFA<_TraitsT>                        _RegexT;
+      62              :       typedef regex_constants::syntax_option_type _FlagT;
+      63              : 
+      64              :       _Compiler(const _CharT* __b, const _CharT* __e,
+      65              :                 const typename _TraitsT::locale_type& __traits, _FlagT __flags);
+      66              : 
+      67              :       shared_ptr<const _RegexT>
+      68            0 :       _M_get_nfa() noexcept
+      69            0 :       { return std::move(_M_nfa); }
+      70              : 
+      71              :     private:
+      72              :       typedef _Scanner<_CharT>               _ScannerT;
+      73              :       typedef typename _TraitsT::string_type _StringT;
+      74              :       typedef typename _ScannerT::_TokenT    _TokenT;
+      75              :       typedef _StateSeq<_TraitsT>            _StateSeqT;
+      76              :       typedef std::stack<_StateSeqT>         _StackT;
+      77              :       typedef std::ctype<_CharT>             _CtypeT;
+      78              : 
+      79              :       // accepts a specific token or returns false.
+      80              :       bool
+      81              :       _M_match_token(_TokenT __token);
+      82              : 
+      83              :       void
+      84              :       _M_disjunction();
+      85              : 
+      86              :       void
+      87              :       _M_alternative();
+      88              : 
+      89              :       bool
+      90              :       _M_term();
+      91              : 
+      92              :       bool
+      93              :       _M_assertion();
+      94              : 
+      95              :       bool
+      96              :       _M_quantifier();
+      97              : 
+      98              :       bool
+      99              :       _M_atom();
+     100              : 
+     101              :       bool
+     102              :       _M_bracket_expression();
+     103              : 
+     104              :       template<bool __icase, bool __collate>
+     105              :         void
+     106              :         _M_insert_any_matcher_ecma();
+     107              : 
+     108              :       template<bool __icase, bool __collate>
+     109              :         void
+     110              :         _M_insert_any_matcher_posix();
+     111              : 
+     112              :       template<bool __icase, bool __collate>
+     113              :         void
+     114              :         _M_insert_char_matcher();
+     115              : 
+     116              :       template<bool __icase, bool __collate>
+     117              :         void
+     118              :         _M_insert_character_class_matcher();
+     119              : 
+     120              :       template<bool __icase, bool __collate>
+     121              :         void
+     122              :         _M_insert_bracket_matcher(bool __neg);
+     123              : 
+     124              :       // Cache of the last atom seen in a bracketed range expression.
+     125              :       struct _BracketState
+     126              :       {
+     127              :         enum class _Type : char { _None, _Char, _Class } _M_type = _Type::_None;
+     128              :         _CharT _M_char = _CharT();
+     129              : 
+     130              :         void
+     131            0 :         set(_CharT __c) noexcept { _M_type = _Type::_Char; _M_char = __c; }
+     132              : 
+     133              :         _GLIBCXX_NODISCARD _CharT
+     134            0 :         get() const noexcept { return _M_char; }
+     135              : 
+     136              :         void
+     137            0 :         reset(_Type __t = _Type::_None) noexcept { _M_type = __t; }
+     138              : 
+     139              :         explicit operator bool() const noexcept
+     140              :         { return _M_type != _Type::_None; }
+     141              : 
+     142              :         // Previous token was a single character.
+     143              :         _GLIBCXX_NODISCARD bool
+     144            0 :         _M_is_char() const noexcept { return _M_type == _Type::_Char; }
+     145              : 
+     146              :         // Previous token was a character class, equivalent class,
+     147              :         // collating symbol etc.
+     148              :         _GLIBCXX_NODISCARD bool
+     149            0 :         _M_is_class() const noexcept { return _M_type == _Type::_Class; }
+     150              :       };
+     151              : 
+     152              :       template<bool __icase, bool __collate>
+     153              :         using _BracketMatcher
+     154              :           = std::__detail::_BracketMatcher<_TraitsT, __icase, __collate>;
+     155              : 
+     156              :       // Returns true if successfully parsed one term and should continue
+     157              :       // compiling a bracket expression.
+     158              :       // Returns false if the compiler should move on.
+     159              :       template<bool __icase, bool __collate>
+     160              :         bool
+     161              :         _M_expression_term(_BracketState& __last_char,
+     162              :                            _BracketMatcher<__icase, __collate>& __matcher);
+     163              : 
+     164              :       int
+     165              :       _M_cur_int_value(int __radix);
+     166              : 
+     167              :       bool
+     168              :       _M_try_char();
+     169              : 
+     170              :       _StateSeqT
+     171            0 :       _M_pop()
+     172              :       {
+     173            0 :         auto ret = _M_stack.top();
+     174            0 :         _M_stack.pop();
+     175            0 :         return ret;
+     176              :       }
+     177              : 
+     178              :       static _FlagT
+     179            0 :       _S_validate(_FlagT __f)
+     180              :       {
+     181              :         using namespace regex_constants;
+     182            0 :         switch (__f & (ECMAScript|basic|extended|awk|grep|egrep))
+     183              :           {
+     184            0 :           case ECMAScript:
+     185              :           case basic:
+     186              :           case extended:
+     187              :           case awk:
+     188              :           case grep:
+     189              :           case egrep:
+     190            0 :             return __f;
+     191            0 :           case _FlagT(0):
+     192            0 :             return __f | ECMAScript;
+     193            0 :           default:
+     194            0 :             std::__throw_regex_error(_S_grammar, "conflicting grammar options");
+     195              :           }
+     196              :       }
+     197              : 
+     198              :       _FlagT              _M_flags;
+     199              :       _ScannerT           _M_scanner;
+     200              :       shared_ptr<_RegexT> _M_nfa;
+     201              :       _StringT            _M_value;
+     202              :       _StackT             _M_stack;
+     203              :       const _TraitsT&     _M_traits;
+     204              :       const _CtypeT&      _M_ctype;
+     205              :     };
+     206              : 
+     207              :   // [28.13.14]
+     208              :   template<typename _TraitsT, bool __icase, bool __collate>
+     209              :     class _RegexTranslatorBase
+     210              :     {
+     211              :     public:
+     212              :       typedef typename _TraitsT::char_type            _CharT;
+     213              :       typedef typename _TraitsT::string_type          _StringT;
+     214              :       typedef _StringT _StrTransT;
+     215              : 
+     216              :       explicit
+     217            0 :       _RegexTranslatorBase(const _TraitsT& __traits)
+     218            0 :       : _M_traits(__traits)
+     219            0 :       { }
+     220              : 
+     221              :       _CharT
+     222            0 :       _M_translate(_CharT __ch) const
+     223              :       {
+     224              :         if _GLIBCXX17_CONSTEXPR (__icase)
+     225            0 :           return _M_traits.translate_nocase(__ch);
+     226              :         else if _GLIBCXX17_CONSTEXPR (__collate)
+     227            0 :           return _M_traits.translate(__ch);
+     228              :         else
+     229              :           return __ch;
+     230              :       }
+     231              : 
+     232              :       _StrTransT
+     233            0 :       _M_transform(_CharT __ch) const
+     234              :       {
+     235            0 :         _StrTransT __str(1, __ch);
+     236            0 :         return _M_traits.transform(__str.begin(), __str.end());
+     237            0 :       }
+     238              : 
+     239              :       // See LWG 523. It's not efficiently implementable when _TraitsT is not
+     240              :       // std::regex_traits<>, and __collate is true. See specializations for
+     241              :       // implementations of other cases.
+     242              :       bool
+     243            0 :       _M_match_range(const _StrTransT& __first, const _StrTransT& __last,
+     244              :                      const _StrTransT& __s) const
+     245            0 :       { return __first <= __s && __s <= __last; }
+     246              : 
+     247              :     protected:
+     248            0 :       bool _M_in_range_icase(_CharT __first, _CharT __last, _CharT __ch) const
+     249              :       {
+     250              :         typedef std::ctype<_CharT> __ctype_type;
+     251            0 :         const auto& __fctyp = use_facet<__ctype_type>(this->_M_traits.getloc());
+     252            0 :         auto __lower = __fctyp.tolower(__ch);
+     253            0 :         auto __upper = __fctyp.toupper(__ch);
+     254            0 :         return (__first <= __lower && __lower <= __last)
+     255            0 :           || (__first <= __upper && __upper <= __last);
+     256              :       }
+     257              : 
+     258              :       const _TraitsT& _M_traits;
+     259              :     };
+     260              : 
+     261              :   template<typename _TraitsT, bool __icase, bool __collate>
+     262              :     class _RegexTranslator
+     263              :     : public _RegexTranslatorBase<_TraitsT, __icase, __collate>
+     264              :     {
+     265              :     public:
+     266              :       typedef _RegexTranslatorBase<_TraitsT, __icase, __collate> _Base;
+     267              :       using _Base::_Base;
+     268              :     };
+     269              : 
+     270              :   template<typename _TraitsT, bool __icase>
+     271              :     class _RegexTranslator<_TraitsT, __icase, false>
+     272              :     : public _RegexTranslatorBase<_TraitsT, __icase, false>
+     273              :     {
+     274              :     public:
+     275              :       typedef _RegexTranslatorBase<_TraitsT, __icase, false> _Base;
+     276              :       typedef typename _Base::_CharT _CharT;
+     277              :       typedef _CharT _StrTransT;
+     278              : 
+     279              :       using _Base::_Base;
+     280              : 
+     281              :       _StrTransT
+     282            0 :       _M_transform(_CharT __ch) const
+     283            0 :       { return __ch; }
+     284              : 
+     285              :       bool
+     286            0 :       _M_match_range(_CharT __first, _CharT __last, _CharT __ch) const
+     287              :       {
+     288              :         if _GLIBCXX17_CONSTEXPR (!__icase)
+     289              :           return __first <= __ch && __ch <= __last;
+     290              :         else
+     291            0 :           return this->_M_in_range_icase(__first, __last, __ch);
+     292              :       }
+     293              :     };
+     294              : 
+     295              :   template<typename _CharType>
+     296              :     class _RegexTranslator<std::regex_traits<_CharType>, true, true>
+     297              :     : public _RegexTranslatorBase<std::regex_traits<_CharType>, true, true>
+     298              :     {
+     299              :     public:
+     300              :       typedef _RegexTranslatorBase<std::regex_traits<_CharType>, true, true>
+     301              :         _Base;
+     302              :       typedef typename _Base::_CharT _CharT;
+     303              :       typedef typename _Base::_StrTransT _StrTransT;
+     304              : 
+     305              :       using _Base::_Base;
+     306              : 
+     307              :       bool
+     308            0 :       _M_match_range(const _StrTransT& __first, const _StrTransT& __last,
+     309              :                      const _StrTransT& __str) const
+     310              :       {
+     311            0 :         __glibcxx_assert(__first.size() == 1);
+     312            0 :         __glibcxx_assert(__last.size() == 1);
+     313            0 :         __glibcxx_assert(__str.size() == 1);
+     314            0 :         return this->_M_in_range_icase(__first[0], __last[0], __str[0]);
+     315              :       }
+     316              :     };
+     317              : 
+     318              :   template<typename _TraitsT>
+     319              :     class _RegexTranslator<_TraitsT, false, false>
+     320              :     {
+     321              :     public:
+     322              :       typedef typename _TraitsT::char_type _CharT;
+     323              :       typedef _CharT                       _StrTransT;
+     324              : 
+     325              :       explicit
+     326            0 :       _RegexTranslator(const _TraitsT&)
+     327            0 :       { }
+     328              : 
+     329              :       _CharT
+     330            0 :       _M_translate(_CharT __ch) const
+     331            0 :       { return __ch; }
+     332              : 
+     333              :       _StrTransT
+     334            0 :       _M_transform(_CharT __ch) const
+     335            0 :       { return __ch; }
+     336              : 
+     337              :       bool
+     338            0 :       _M_match_range(_CharT __first, _CharT __last, _CharT __ch) const
+     339            0 :       { return __first <= __ch && __ch <= __last; }
+     340              :     };
+     341              : 
+     342              :   template<typename _TraitsT, bool __is_ecma, bool __icase, bool __collate>
+     343              :     struct _AnyMatcher;
+     344              : 
+     345              :   template<typename _TraitsT, bool __icase, bool __collate>
+     346              :     struct _AnyMatcher<_TraitsT, false, __icase, __collate>
+     347              :     {
+     348              :       typedef _RegexTranslator<_TraitsT, __icase, __collate> _TransT;
+     349              :       typedef typename _TransT::_CharT                       _CharT;
+     350              : 
+     351              :       explicit
+     352            0 :       _AnyMatcher(const _TraitsT& __traits)
+     353            0 :       : _M_translator(__traits)
+     354            0 :       { }
+     355              : 
+     356              :       bool
+     357            0 :       operator()(_CharT __ch) const
+     358              :       {
+     359            0 :         static auto __nul = _M_translator._M_translate('\0');
+     360            0 :         return _M_translator._M_translate(__ch) != __nul;
+     361              :       }
+     362              : 
+     363              :       _TransT _M_translator;
+     364              :     };
+     365              : 
+     366              :   template<typename _TraitsT, bool __icase, bool __collate>
+     367              :     struct _AnyMatcher<_TraitsT, true, __icase, __collate>
+     368              :     {
+     369              :       typedef _RegexTranslator<_TraitsT, __icase, __collate> _TransT;
+     370              :       typedef typename _TransT::_CharT                       _CharT;
+     371              : 
+     372              :       explicit
+     373            0 :       _AnyMatcher(const _TraitsT& __traits)
+     374            0 :       : _M_translator(__traits)
+     375            0 :       { }
+     376              : 
+     377              :       bool
+     378            0 :       operator()(_CharT __ch) const
+     379            0 :       { return _M_apply(__ch, typename is_same<_CharT, char>::type()); }
+     380              : 
+     381              :       bool
+     382            0 :       _M_apply(_CharT __ch, true_type) const
+     383              :       {
+     384            0 :         auto __c = _M_translator._M_translate(__ch);
+     385            0 :         auto __n = _M_translator._M_translate('\n');
+     386            0 :         auto __r = _M_translator._M_translate('\r');
+     387            0 :         return __c != __n && __c != __r;
+     388              :       }
+     389              : 
+     390              :       bool
+     391              :       _M_apply(_CharT __ch, false_type) const
+     392              :       {
+     393              :         auto __c = _M_translator._M_translate(__ch);
+     394              :         auto __n = _M_translator._M_translate('\n');
+     395              :         auto __r = _M_translator._M_translate('\r');
+     396              :         auto __u2028 = _M_translator._M_translate(u'\u2028');
+     397              :         auto __u2029 = _M_translator._M_translate(u'\u2029');
+     398              :         return __c != __n && __c != __r && __c != __u2028 && __c != __u2029;
+     399              :       }
+     400              : 
+     401              :       _TransT _M_translator;
+     402              :     };
+     403              : 
+     404              :   template<typename _TraitsT, bool __icase, bool __collate>
+     405              :     struct _CharMatcher
+     406              :     {
+     407              :       typedef _RegexTranslator<_TraitsT, __icase, __collate> _TransT;
+     408              :       typedef typename _TransT::_CharT                       _CharT;
+     409              : 
+     410            0 :       _CharMatcher(_CharT __ch, const _TraitsT& __traits)
+     411            0 :       : _M_translator(__traits), _M_ch(_M_translator._M_translate(__ch))
+     412            0 :       { }
+     413              : 
+     414              :       bool
+     415            0 :       operator()(_CharT __ch) const
+     416            0 :       { return _M_ch == _M_translator._M_translate(__ch); }
+     417              : 
+     418              :       _TransT _M_translator;
+     419              :       _CharT  _M_ch;
+     420              :     };
+     421              : 
+     422              :   /// Matches a character range (bracket expression)
+     423              :   template<typename _TraitsT, bool __icase, bool __collate>
+     424              :     struct _BracketMatcher
+     425              :     {
+     426              :     public:
+     427              :       typedef _RegexTranslator<_TraitsT, __icase, __collate> _TransT;
+     428              :       typedef typename _TransT::_CharT                       _CharT;
+     429              :       typedef typename _TransT::_StrTransT                   _StrTransT;
+     430              :       typedef typename _TraitsT::string_type                 _StringT;
+     431              :       typedef typename _TraitsT::char_class_type             _CharClassT;
+     432              : 
+     433              :     public:
+     434            0 :       _BracketMatcher(bool __is_non_matching,
+     435              :                       const _TraitsT& __traits)
+     436            0 :       : _M_class_set(0), _M_translator(__traits), _M_traits(__traits),
+     437            0 :       _M_is_non_matching(__is_non_matching)
+     438            0 :       { }
+     439              : 
+     440              :       bool
+     441            0 :       operator()(_CharT __ch) const
+     442              :       {
+     443              :         _GLIBCXX_DEBUG_ASSERT(_M_is_ready);
+     444            0 :         return _M_apply(__ch, _UseCache());
+     445              :       }
+     446              : 
+     447              :       void
+     448            0 :       _M_add_char(_CharT __c)
+     449              :       {
+     450            0 :         _M_char_set.push_back(_M_translator._M_translate(__c));
+     451              :         _GLIBCXX_DEBUG_ONLY(_M_is_ready = false);
+     452            0 :       }
+     453              : 
+     454              :       _StringT
+     455            0 :       _M_add_collate_element(const _StringT& __s)
+     456              :       {
+     457            0 :         auto __st = _M_traits.lookup_collatename(__s.data(),
+     458            0 :                                                  __s.data() + __s.size());
+     459            0 :         if (__st.empty())
+     460            0 :           __throw_regex_error(regex_constants::error_collate,
+     461              :                               "Invalid collate element.");
+     462            0 :         _M_char_set.push_back(_M_translator._M_translate(__st[0]));
+     463              :         _GLIBCXX_DEBUG_ONLY(_M_is_ready = false);
+     464            0 :         return __st;
+     465            0 :       }
+     466              : 
+     467              :       void
+     468            0 :       _M_add_equivalence_class(const _StringT& __s)
+     469              :       {
+     470            0 :         auto __st = _M_traits.lookup_collatename(__s.data(),
+     471            0 :                                                  __s.data() + __s.size());
+     472            0 :         if (__st.empty())
+     473            0 :           __throw_regex_error(regex_constants::error_collate,
+     474              :                               "Invalid equivalence class.");
+     475            0 :         __st = _M_traits.transform_primary(__st.data(),
+     476            0 :                                            __st.data() + __st.size());
+     477            0 :         _M_equiv_set.push_back(__st);
+     478              :         _GLIBCXX_DEBUG_ONLY(_M_is_ready = false);
+     479            0 :       }
+     480              : 
+     481              :       // __neg should be true for \D, \S and \W only.
+     482              :       void
+     483            0 :       _M_add_character_class(const _StringT& __s, bool __neg)
+     484              :       {
+     485            0 :         auto __mask = _M_traits.lookup_classname(__s.data(),
+     486            0 :                                                  __s.data() + __s.size(),
+     487              :                                                  __icase);
+     488            0 :         if (__mask == 0)
+     489            0 :           __throw_regex_error(regex_constants::error_collate,
+     490              :                               "Invalid character class.");
+     491            0 :         if (!__neg)
+     492            0 :           _M_class_set |= __mask;
+     493              :         else
+     494            0 :           _M_neg_class_set.push_back(__mask);
+     495              :         _GLIBCXX_DEBUG_ONLY(_M_is_ready = false);
+     496            0 :       }
+     497              : 
+     498              :       void
+     499            0 :       _M_make_range(_CharT __l, _CharT __r)
+     500              :       {
+     501            0 :         if (__l > __r)
+     502            0 :           __throw_regex_error(regex_constants::error_range,
+     503              :                               "Invalid range in bracket expression.");
+     504            0 :         _M_range_set.push_back(make_pair(_M_translator._M_transform(__l),
+     505            0 :                                          _M_translator._M_transform(__r)));
+     506              :         _GLIBCXX_DEBUG_ONLY(_M_is_ready = false);
+     507            0 :       }
+     508              : 
+     509              :       void
+     510            0 :       _M_ready()
+     511              :       {
+     512            0 :         std::sort(_M_char_set.begin(), _M_char_set.end());
+     513            0 :         auto __end = std::unique(_M_char_set.begin(), _M_char_set.end());
+     514            0 :         _M_char_set.erase(__end, _M_char_set.end());
+     515            0 :         _M_make_cache(_UseCache());
+     516              :         _GLIBCXX_DEBUG_ONLY(_M_is_ready = true);
+     517            0 :       }
+     518              : 
+     519              :     private:
+     520              :       // Currently we only use the cache for char
+     521              :       using _UseCache = typename std::is_same<_CharT, char>::type;
+     522              : 
+     523              :       static constexpr size_t
+     524              :       _S_cache_size =
+     525              :         1ul << (sizeof(_CharT) * __CHAR_BIT__ * int(_UseCache::value));
+     526              : 
+     527              :       struct _Dummy { };
+     528              :       using _CacheT = std::__conditional_t<_UseCache::value,
+     529              :                                            std::bitset<_S_cache_size>,
+     530              :                                            _Dummy>;
+     531              :       using _UnsignedCharT = typename std::make_unsigned<_CharT>::type;
+     532              : 
+     533              :       bool
+     534              :       _M_apply(_CharT __ch, false_type) const;
+     535              : 
+     536              :       bool
+     537            0 :       _M_apply(_CharT __ch, true_type) const
+     538            0 :       { return _M_cache[static_cast<_UnsignedCharT>(__ch)]; }
+     539              : 
+     540              :       void
+     541            0 :       _M_make_cache(true_type)
+     542              :       {
+     543            0 :         for (unsigned __i = 0; __i < _M_cache.size(); __i++)
+     544            0 :           _M_cache[__i] = _M_apply(static_cast<_CharT>(__i), false_type());
+     545            0 :       }
+     546              : 
+     547              :       void
+     548              :       _M_make_cache(false_type)
+     549              :       { }
+     550              : 
+     551              :     private:
+     552              :       _GLIBCXX_STD_C::vector<_CharT>            _M_char_set;
+     553              :       _GLIBCXX_STD_C::vector<_StringT>          _M_equiv_set;
+     554              :       _GLIBCXX_STD_C::vector<pair<_StrTransT, _StrTransT>> _M_range_set;
+     555              :       _GLIBCXX_STD_C::vector<_CharClassT>       _M_neg_class_set;
+     556              :       _CharClassT                               _M_class_set;
+     557              :       _TransT                                   _M_translator;
+     558              :       const _TraitsT&                           _M_traits;
+     559              :       bool                                      _M_is_non_matching;
+     560              :       _CacheT                                   _M_cache;
+     561              : #ifdef _GLIBCXX_DEBUG
+     562              :       bool                                      _M_is_ready = false;
+     563              : #endif
+     564              :     };
+     565              : 
+     566              :  ///@} regex-detail
+     567              : } // namespace __detail
+     568              : _GLIBCXX_END_NAMESPACE_VERSION
+     569              : } // namespace std
+     570              : 
+     571              : #include <bits/regex_compiler.tcc>
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_compiler.tcc.func-c.html b/html/usr/include/c++/13/bits/regex_compiler.tcc.func-c.html new file mode 100644 index 0000000..7f6b0b6 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_compiler.tcc.func-c.html @@ -0,0 +1,509 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_compiler.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_compiler.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %3040
Test Date:2024-04-30 13:17:26Functions:0.0 %520
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE8_M_applyEcSt17integral_constantIbLb0EE0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE8_M_applyEcSt17integral_constantIbLb0EE0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE8_M_applyEcSt17integral_constantIbLb0EE0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE8_M_applyEcSt17integral_constantIbLb0EE0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE8_M_applyEcSt17integral_constantIbLb0EE0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE11_M_try_charEv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE12_M_assertionEv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE13_M_quantifierEv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE14_M_alternativeEv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE14_M_disjunctionEv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE14_M_match_tokenENS_12_ScannerBase7_TokenTE0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE16_M_cur_int_valueEi0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb0ELb0EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEE0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb0ELb0EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEE0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb0ELb1EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEE0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb1ELb0EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEE0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb1ELb1EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEE0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE21_M_bracket_expressionEv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE22_M_insert_char_matcherILb0ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE22_M_insert_char_matcherILb0ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE22_M_insert_char_matcherILb0ELb1EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE22_M_insert_char_matcherILb1ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE22_M_insert_char_matcherILb1ELb1EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE25_M_insert_bracket_matcherILb0ELb0EEEvb0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE25_M_insert_bracket_matcherILb0ELb0EEEvb0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE25_M_insert_bracket_matcherILb0ELb1EEEvb0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE25_M_insert_bracket_matcherILb1ELb0EEEvb0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE25_M_insert_bracket_matcherILb1ELb1EEEvb0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE26_M_insert_any_matcher_ecmaILb0ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE26_M_insert_any_matcher_ecmaILb0ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE26_M_insert_any_matcher_ecmaILb0ELb1EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE26_M_insert_any_matcher_ecmaILb1ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE26_M_insert_any_matcher_ecmaILb1ELb1EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE27_M_insert_any_matcher_posixILb0ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE27_M_insert_any_matcher_posixILb0ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE27_M_insert_any_matcher_posixILb0ELb1EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE27_M_insert_any_matcher_posixILb1ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE27_M_insert_any_matcher_posixILb1ELb1EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE33_M_insert_character_class_matcherILb0ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE33_M_insert_character_class_matcherILb0ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE33_M_insert_character_class_matcherILb0ELb1EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE33_M_insert_character_class_matcherILb1ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE33_M_insert_character_class_matcherILb1ELb1EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE7_M_atomEv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE7_M_termEv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEEC2EPKcS6_RKSt6localeNSt15regex_constants18syntax_option_typeE0
_ZZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE8_M_applyEcSt17integral_constantIbLb0EEENKUlvE_clEv0
_ZZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE8_M_applyEcSt17integral_constantIbLb0EEENKUlvE_clEv0
_ZZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE8_M_applyEcSt17integral_constantIbLb0EEENKUlvE_clEv0
_ZZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE8_M_applyEcSt17integral_constantIbLb0EEENKUlvE_clEv0
_ZZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE8_M_applyEcSt17integral_constantIbLb0EEENKUlvE_clEv0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE13_M_quantifierEvENKUlvE_clEv0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb0ELb0EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlcE_clEc0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb0ELb0EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlcE_clEc0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb0ELb1EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlcE_clEc0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb1ELb0EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlcE_clEc0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb1ELb1EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlcE_clEc0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb0ELb0EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlvE_clEv0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb0ELb0EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlvE_clEv0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb0ELb1EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlvE_clEv0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb1ELb0EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlvE_clEv0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb1ELb1EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlvE_clEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_compiler.tcc.func.html b/html/usr/include/c++/13/bits/regex_compiler.tcc.func.html new file mode 100644 index 0000000..2ae5459 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_compiler.tcc.func.html @@ -0,0 +1,509 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_compiler.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_compiler.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %3040
Test Date:2024-04-30 13:17:26Functions:0.0 %520
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE8_M_applyEcSt17integral_constantIbLb0EE0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE8_M_applyEcSt17integral_constantIbLb0EE0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE8_M_applyEcSt17integral_constantIbLb0EE0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE8_M_applyEcSt17integral_constantIbLb0EE0
_ZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE8_M_applyEcSt17integral_constantIbLb0EE0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE11_M_try_charEv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE12_M_assertionEv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE13_M_quantifierEv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE14_M_alternativeEv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE14_M_disjunctionEv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE14_M_match_tokenENS_12_ScannerBase7_TokenTE0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE16_M_cur_int_valueEi0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb0ELb0EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEE0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb0ELb0EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEE0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb0ELb1EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEE0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb1ELb0EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEE0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb1ELb1EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEE0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE21_M_bracket_expressionEv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE22_M_insert_char_matcherILb0ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE22_M_insert_char_matcherILb0ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE22_M_insert_char_matcherILb0ELb1EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE22_M_insert_char_matcherILb1ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE22_M_insert_char_matcherILb1ELb1EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE25_M_insert_bracket_matcherILb0ELb0EEEvb0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE25_M_insert_bracket_matcherILb0ELb0EEEvb0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE25_M_insert_bracket_matcherILb0ELb1EEEvb0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE25_M_insert_bracket_matcherILb1ELb0EEEvb0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE25_M_insert_bracket_matcherILb1ELb1EEEvb0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE26_M_insert_any_matcher_ecmaILb0ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE26_M_insert_any_matcher_ecmaILb0ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE26_M_insert_any_matcher_ecmaILb0ELb1EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE26_M_insert_any_matcher_ecmaILb1ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE26_M_insert_any_matcher_ecmaILb1ELb1EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE27_M_insert_any_matcher_posixILb0ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE27_M_insert_any_matcher_posixILb0ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE27_M_insert_any_matcher_posixILb0ELb1EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE27_M_insert_any_matcher_posixILb1ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE27_M_insert_any_matcher_posixILb1ELb1EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE33_M_insert_character_class_matcherILb0ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE33_M_insert_character_class_matcherILb0ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE33_M_insert_character_class_matcherILb0ELb1EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE33_M_insert_character_class_matcherILb1ELb0EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE33_M_insert_character_class_matcherILb1ELb1EEEvv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE7_M_atomEv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE7_M_termEv0
_ZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEEC2EPKcS6_RKSt6localeNSt15regex_constants18syntax_option_typeE0
_ZZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE8_M_applyEcSt17integral_constantIbLb0EEENKUlvE_clEv0
_ZZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EE8_M_applyEcSt17integral_constantIbLb0EEENKUlvE_clEv0
_ZZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EE8_M_applyEcSt17integral_constantIbLb0EEENKUlvE_clEv0
_ZZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EE8_M_applyEcSt17integral_constantIbLb0EEENKUlvE_clEv0
_ZZNKSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EE8_M_applyEcSt17integral_constantIbLb0EEENKUlvE_clEv0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE13_M_quantifierEvENKUlvE_clEv0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb0ELb0EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlcE_clEc0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb0ELb0EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlcE_clEc0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb0ELb1EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlcE_clEc0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb1ELb0EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlcE_clEc0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb1ELb1EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlcE_clEc0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb0ELb0EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlvE_clEv0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb0ELb0EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlvE_clEv0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb0ELb1EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlvE_clEv0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb1ELb0EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlvE_clEv0
_ZZNSt8__detail9_CompilerINSt7__cxx1112regex_traitsIcEEE18_M_expression_termILb1ELb1EEEbRNS4_13_BracketStateERNS_15_BracketMatcherIS3_XT_EXT0_EEEENKUlvE_clEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_compiler.tcc.gcov.html b/html/usr/include/c++/13/bits/regex_compiler.tcc.gcov.html new file mode 100644 index 0000000..194279a --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_compiler.tcc.gcov.html @@ -0,0 +1,700 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_compiler.tcc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_compiler.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %3040
Test Date:2024-04-30 13:17:26Functions:0.0 %520
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // class template regex -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2013-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /**
+      26              :  *  @file bits/regex_compiler.tcc
+      27              :  *  This is an internal header file, included by other library headers.
+      28              :  *  Do not attempt to use it directly. @headername{regex}
+      29              :  */
+      30              : 
+      31              : // FIXME make comments doxygen format.
+      32              : 
+      33              : /*
+      34              : // This compiler refers to "Regular Expression Matching Can Be Simple And Fast"
+      35              : // (http://swtch.com/~rsc/regexp/regexp1.html),
+      36              : // but doesn't strictly follow it.
+      37              : //
+      38              : // When compiling, states are *chained* instead of tree- or graph-constructed.
+      39              : // It's more like structured programs: there's if statement and loop statement.
+      40              : //
+      41              : // For alternative structure (say "a|b"), aka "if statement", two branches
+      42              : // should be constructed. However, these two shall merge to an "end_tag" at
+      43              : // the end of this operator:
+      44              : //
+      45              : //                branch1
+      46              : //              /        \
+      47              : // => begin_tag            end_tag =>
+      48              : //              \        /
+      49              : //                branch2
+      50              : //
+      51              : // This is the difference between this implementation and that in Russ's
+      52              : // article.
+      53              : //
+      54              : // That's why we introduced dummy node here ------ "end_tag" is a dummy node.
+      55              : // All dummy nodes will be eliminated at the end of compilation.
+      56              : */
+      57              : 
+      58              : namespace std _GLIBCXX_VISIBILITY(default)
+      59              : {
+      60              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      61              : 
+      62              : namespace __detail
+      63              : {
+      64              :   template<typename _TraitsT>
+      65            0 :     _Compiler<_TraitsT>::
+      66              :     _Compiler(const _CharT* __b, const _CharT* __e,
+      67              :               const typename _TraitsT::locale_type& __loc, _FlagT __flags)
+      68            0 :     : _M_flags(_S_validate(__flags)),
+      69            0 :       _M_scanner(__b, __e, _M_flags, __loc),
+      70            0 :       _M_nfa(make_shared<_RegexT>(__loc, _M_flags)),
+      71            0 :       _M_traits(_M_nfa->_M_traits),
+      72            0 :       _M_ctype(std::use_facet<_CtypeT>(__loc))
+      73              :     {
+      74            0 :       _StateSeqT __r(*_M_nfa, _M_nfa->_M_start());
+      75            0 :       __r._M_append(_M_nfa->_M_insert_subexpr_begin());
+      76            0 :       this->_M_disjunction();
+      77            0 :       if (!_M_match_token(_ScannerT::_S_token_eof))
+      78            0 :         __throw_regex_error(regex_constants::error_paren);
+      79            0 :       __r._M_append(_M_pop());
+      80            0 :       __glibcxx_assert(_M_stack.empty());
+      81            0 :       __r._M_append(_M_nfa->_M_insert_subexpr_end());
+      82            0 :       __r._M_append(_M_nfa->_M_insert_accept());
+      83            0 :       _M_nfa->_M_eliminate_dummy();
+      84            0 :     }
+      85              : 
+      86              :   template<typename _TraitsT>
+      87              :     void
+      88            0 :     _Compiler<_TraitsT>::
+      89              :     _M_disjunction()
+      90              :     {
+      91            0 :       this->_M_alternative();
+      92            0 :       while (_M_match_token(_ScannerT::_S_token_or))
+      93              :         {
+      94            0 :           _StateSeqT __alt1 = _M_pop();
+      95            0 :           this->_M_alternative();
+      96            0 :           _StateSeqT __alt2 = _M_pop();
+      97            0 :           auto __end = _M_nfa->_M_insert_dummy();
+      98            0 :           __alt1._M_append(__end);
+      99            0 :           __alt2._M_append(__end);
+     100              :           // __alt2 is state._M_next, __alt1 is state._M_alt. The executor
+     101              :           // executes _M_alt before _M_next, as well as executing left
+     102              :           // alternative before right one.
+     103            0 :           _M_stack.push(_StateSeqT(*_M_nfa,
+     104            0 :                                    _M_nfa->_M_insert_alt(
+     105              :                                      __alt2._M_start, __alt1._M_start, false),
+     106              :                                    __end));
+     107              :         }
+     108            0 :     }
+     109              : 
+     110              :   template<typename _TraitsT>
+     111              :     void
+     112            0 :     _Compiler<_TraitsT>::
+     113              :     _M_alternative()
+     114              :     {
+     115            0 :       if (this->_M_term())
+     116              :         {
+     117            0 :           _StateSeqT __re = _M_pop();
+     118            0 :           this->_M_alternative();
+     119            0 :           __re._M_append(_M_pop());
+     120            0 :           _M_stack.push(__re);
+     121              :         }
+     122              :       else
+     123            0 :         _M_stack.push(_StateSeqT(*_M_nfa, _M_nfa->_M_insert_dummy()));
+     124            0 :     }
+     125              : 
+     126              :   template<typename _TraitsT>
+     127              :     bool
+     128            0 :     _Compiler<_TraitsT>::
+     129              :     _M_term()
+     130              :     {
+     131            0 :       if (this->_M_assertion())
+     132            0 :         return true;
+     133            0 :       if (this->_M_atom())
+     134              :         {
+     135            0 :           while (this->_M_quantifier())
+     136              :             ;
+     137            0 :           return true;
+     138              :         }
+     139            0 :       return false;
+     140              :     }
+     141              : 
+     142              :   template<typename _TraitsT>
+     143              :     bool
+     144            0 :     _Compiler<_TraitsT>::
+     145              :     _M_assertion()
+     146              :     {
+     147            0 :       if (_M_match_token(_ScannerT::_S_token_line_begin))
+     148            0 :         _M_stack.push(_StateSeqT(*_M_nfa, _M_nfa->_M_insert_line_begin()));
+     149            0 :       else if (_M_match_token(_ScannerT::_S_token_line_end))
+     150            0 :         _M_stack.push(_StateSeqT(*_M_nfa, _M_nfa->_M_insert_line_end()));
+     151            0 :       else if (_M_match_token(_ScannerT::_S_token_word_bound))
+     152              :         // _M_value[0] == 'n' means it's negative, say "not word boundary".
+     153            0 :         _M_stack.push(_StateSeqT(*_M_nfa, _M_nfa->
+     154            0 :               _M_insert_word_bound(_M_value[0] == 'n')));
+     155            0 :       else if (_M_match_token(_ScannerT::_S_token_subexpr_lookahead_begin))
+     156              :         {
+     157            0 :           auto __neg = _M_value[0] == 'n';
+     158            0 :           this->_M_disjunction();
+     159            0 :           if (!_M_match_token(_ScannerT::_S_token_subexpr_end))
+     160            0 :             __throw_regex_error(regex_constants::error_paren);
+     161            0 :           auto __tmp = _M_pop();
+     162            0 :           __tmp._M_append(_M_nfa->_M_insert_accept());
+     163            0 :           _M_stack.push(
+     164            0 :               _StateSeqT(
+     165            0 :                 *_M_nfa,
+     166            0 :                 _M_nfa->_M_insert_lookahead(__tmp._M_start, __neg)));
+     167              :         }
+     168              :       else
+     169            0 :         return false;
+     170            0 :       return true;
+     171              :     }
+     172              : 
+     173              :   template<typename _TraitsT>
+     174              :     bool
+     175            0 :     _Compiler<_TraitsT>::
+     176              :     _M_quantifier()
+     177              :     {
+     178            0 :       bool __neg = (_M_flags & regex_constants::ECMAScript);
+     179            0 :       auto __init = [this, &__neg]()
+     180              :         {
+     181            0 :           if (_M_stack.empty())
+     182            0 :             __throw_regex_error(regex_constants::error_badrepeat);
+     183            0 :           __neg = __neg && _M_match_token(_ScannerT::_S_token_opt);
+     184              :         };
+     185            0 :       if (_M_match_token(_ScannerT::_S_token_closure0))
+     186              :         {
+     187            0 :           __init();
+     188            0 :           auto __e = _M_pop();
+     189            0 :           _StateSeqT __r(*_M_nfa,
+     190            0 :                          _M_nfa->_M_insert_repeat(_S_invalid_state_id,
+     191              :                                                   __e._M_start, __neg));
+     192            0 :           __e._M_append(__r);
+     193            0 :           _M_stack.push(__r);
+     194              :         }
+     195            0 :       else if (_M_match_token(_ScannerT::_S_token_closure1))
+     196              :         {
+     197            0 :           __init();
+     198            0 :           auto __e = _M_pop();
+     199            0 :           __e._M_append(_M_nfa->_M_insert_repeat(_S_invalid_state_id,
+     200              :                                                  __e._M_start, __neg));
+     201            0 :           _M_stack.push(__e);
+     202              :         }
+     203            0 :       else if (_M_match_token(_ScannerT::_S_token_opt))
+     204              :         {
+     205            0 :           __init();
+     206            0 :           auto __e = _M_pop();
+     207            0 :           auto __end = _M_nfa->_M_insert_dummy();
+     208            0 :           _StateSeqT __r(*_M_nfa,
+     209            0 :                          _M_nfa->_M_insert_repeat(_S_invalid_state_id,
+     210              :                                                   __e._M_start, __neg));
+     211            0 :           __e._M_append(__end);
+     212            0 :           __r._M_append(__end);
+     213            0 :           _M_stack.push(__r);
+     214              :         }
+     215            0 :       else if (_M_match_token(_ScannerT::_S_token_interval_begin))
+     216              :         {
+     217            0 :           if (_M_stack.empty())
+     218            0 :             __throw_regex_error(regex_constants::error_badrepeat);
+     219            0 :           if (!_M_match_token(_ScannerT::_S_token_dup_count))
+     220            0 :             __throw_regex_error(regex_constants::error_badbrace);
+     221            0 :           _StateSeqT __r(_M_pop());
+     222            0 :           _StateSeqT __e(*_M_nfa, _M_nfa->_M_insert_dummy());
+     223            0 :           long __min_rep = _M_cur_int_value(10);
+     224            0 :           bool __infi = false;
+     225            0 :           long __n = 0;
+     226              : 
+     227              :           // {3
+     228            0 :           if (_M_match_token(_ScannerT::_S_token_comma))
+     229              :             {
+     230            0 :               if (_M_match_token(_ScannerT::_S_token_dup_count)) // {3,7}
+     231            0 :                 __n = _M_cur_int_value(10) - __min_rep;
+     232              :               else
+     233            0 :                 __infi = true;
+     234              :             }
+     235            0 :           if (!_M_match_token(_ScannerT::_S_token_interval_end))
+     236            0 :             __throw_regex_error(regex_constants::error_brace);
+     237              : 
+     238            0 :           __neg = __neg && _M_match_token(_ScannerT::_S_token_opt);
+     239              : 
+     240            0 :           for (long __i = 0; __i < __min_rep; ++__i)
+     241            0 :             __e._M_append(__r._M_clone());
+     242              : 
+     243            0 :           if (__infi)
+     244              :             {
+     245            0 :               auto __tmp = __r._M_clone();
+     246            0 :               _StateSeqT __s(*_M_nfa,
+     247            0 :                              _M_nfa->_M_insert_repeat(_S_invalid_state_id,
+     248              :                                                       __tmp._M_start, __neg));
+     249            0 :               __tmp._M_append(__s);
+     250            0 :               __e._M_append(__s);
+     251              :             }
+     252              :           else
+     253              :             {
+     254            0 :               if (__n < 0)
+     255            0 :                 __throw_regex_error(regex_constants::error_badbrace);
+     256            0 :               auto __end = _M_nfa->_M_insert_dummy();
+     257              :               // _M_alt is the "match more" branch, and _M_next is the
+     258              :               // "match less" one. Switch _M_alt and _M_next of all created
+     259              :               // nodes. This is a hack but IMO works well.
+     260            0 :               std::stack<_StateIdT> __stack;
+     261            0 :               for (long __i = 0; __i < __n; ++__i)
+     262              :                 {
+     263            0 :                   auto __tmp = __r._M_clone();
+     264            0 :                   auto __alt = _M_nfa->_M_insert_repeat(__tmp._M_start,
+     265              :                                                         __end, __neg);
+     266            0 :                   __stack.push(__alt);
+     267            0 :                   __e._M_append(_StateSeqT(*_M_nfa, __alt, __tmp._M_end));
+     268              :                 }
+     269            0 :               __e._M_append(__end);
+     270            0 :               while (!__stack.empty())
+     271              :                 {
+     272            0 :                   auto& __tmp = (*_M_nfa)[__stack.top()];
+     273            0 :                   __stack.pop();
+     274            0 :                   std::swap(__tmp._M_next, __tmp._M_alt);
+     275              :                 }
+     276            0 :             }
+     277            0 :           _M_stack.push(__e);
+     278              :         }
+     279              :       else
+     280            0 :         return false;
+     281            0 :       return true;
+     282              :     }
+     283              : 
+     284              : #define __INSERT_REGEX_MATCHER(__func, ...)\
+     285              :         do {\
+     286              :           if (!(_M_flags & regex_constants::icase))\
+     287              :             if (!(_M_flags & regex_constants::collate))\
+     288              :               __func<false, false>(__VA_ARGS__);\
+     289              :             else\
+     290              :               __func<false, true>(__VA_ARGS__);\
+     291              :           else\
+     292              :             if (!(_M_flags & regex_constants::collate))\
+     293              :               __func<true, false>(__VA_ARGS__);\
+     294              :             else\
+     295              :               __func<true, true>(__VA_ARGS__);\
+     296              :         } while (false)
+     297              : 
+     298              :   template<typename _TraitsT>
+     299              :     bool
+     300            0 :     _Compiler<_TraitsT>::
+     301              :     _M_atom()
+     302              :     {
+     303            0 :       if (_M_match_token(_ScannerT::_S_token_anychar))
+     304              :         {
+     305            0 :           if (!(_M_flags & regex_constants::ECMAScript))
+     306            0 :             __INSERT_REGEX_MATCHER(_M_insert_any_matcher_posix);
+     307              :           else
+     308            0 :             __INSERT_REGEX_MATCHER(_M_insert_any_matcher_ecma);
+     309              :         }
+     310            0 :       else if (_M_try_char())
+     311            0 :         __INSERT_REGEX_MATCHER(_M_insert_char_matcher);
+     312            0 :       else if (_M_match_token(_ScannerT::_S_token_backref))
+     313            0 :         _M_stack.push(_StateSeqT(*_M_nfa, _M_nfa->
+     314            0 :                                  _M_insert_backref(_M_cur_int_value(10))));
+     315            0 :       else if (_M_match_token(_ScannerT::_S_token_quoted_class))
+     316            0 :         __INSERT_REGEX_MATCHER(_M_insert_character_class_matcher);
+     317            0 :       else if (_M_match_token(_ScannerT::_S_token_subexpr_no_group_begin))
+     318              :         {
+     319            0 :           _StateSeqT __r(*_M_nfa, _M_nfa->_M_insert_dummy());
+     320            0 :           this->_M_disjunction();
+     321            0 :           if (!_M_match_token(_ScannerT::_S_token_subexpr_end))
+     322            0 :             __throw_regex_error(regex_constants::error_paren);
+     323            0 :           __r._M_append(_M_pop());
+     324            0 :           _M_stack.push(__r);
+     325              :         }
+     326            0 :       else if (_M_match_token(_ScannerT::_S_token_subexpr_begin))
+     327              :         {
+     328            0 :           _StateSeqT __r(*_M_nfa, _M_nfa->_M_insert_subexpr_begin());
+     329            0 :           this->_M_disjunction();
+     330            0 :           if (!_M_match_token(_ScannerT::_S_token_subexpr_end))
+     331            0 :             __throw_regex_error(regex_constants::error_paren);
+     332            0 :           __r._M_append(_M_pop());
+     333            0 :           __r._M_append(_M_nfa->_M_insert_subexpr_end());
+     334            0 :           _M_stack.push(__r);
+     335              :         }
+     336            0 :       else if (!_M_bracket_expression())
+     337            0 :         return false;
+     338            0 :       return true;
+     339              :     }
+     340              : 
+     341              :   template<typename _TraitsT>
+     342              :     bool
+     343            0 :     _Compiler<_TraitsT>::
+     344              :     _M_bracket_expression()
+     345              :     {
+     346              :       bool __neg =
+     347            0 :         _M_match_token(_ScannerT::_S_token_bracket_neg_begin);
+     348            0 :       if (!(__neg || _M_match_token(_ScannerT::_S_token_bracket_begin)))
+     349            0 :         return false;
+     350            0 :       __INSERT_REGEX_MATCHER(_M_insert_bracket_matcher, __neg);
+     351            0 :       return true;
+     352              :     }
+     353              : #undef __INSERT_REGEX_MATCHER
+     354              : 
+     355              :   template<typename _TraitsT>
+     356              :   template<bool __icase, bool __collate>
+     357              :     void
+     358            0 :     _Compiler<_TraitsT>::
+     359              :     _M_insert_any_matcher_ecma()
+     360              :     {
+     361            0 :       _M_stack.push(_StateSeqT(*_M_nfa,
+     362            0 :         _M_nfa->_M_insert_matcher
+     363            0 :           (_AnyMatcher<_TraitsT, true, __icase, __collate>
+     364              :             (_M_traits))));
+     365            0 :     }
+     366              : 
+     367              :   template<typename _TraitsT>
+     368              :   template<bool __icase, bool __collate>
+     369              :     void
+     370            0 :     _Compiler<_TraitsT>::
+     371              :     _M_insert_any_matcher_posix()
+     372              :     {
+     373            0 :       _M_stack.push(_StateSeqT(*_M_nfa,
+     374            0 :         _M_nfa->_M_insert_matcher
+     375            0 :           (_AnyMatcher<_TraitsT, false, __icase, __collate>
+     376              :             (_M_traits))));
+     377            0 :     }
+     378              : 
+     379              :   template<typename _TraitsT>
+     380              :   template<bool __icase, bool __collate>
+     381              :     void
+     382            0 :     _Compiler<_TraitsT>::
+     383              :     _M_insert_char_matcher()
+     384              :     {
+     385            0 :       _M_stack.push(_StateSeqT(*_M_nfa,
+     386            0 :         _M_nfa->_M_insert_matcher
+     387            0 :           (_CharMatcher<_TraitsT, __icase, __collate>
+     388            0 :             (_M_value[0], _M_traits))));
+     389            0 :     }
+     390              : 
+     391              :   template<typename _TraitsT>
+     392              :   template<bool __icase, bool __collate>
+     393              :     void
+     394            0 :     _Compiler<_TraitsT>::
+     395              :     _M_insert_character_class_matcher()
+     396              :     {
+     397            0 :       __glibcxx_assert(_M_value.size() == 1);
+     398            0 :       _BracketMatcher<__icase, __collate> __matcher
+     399            0 :         (_M_ctype.is(_CtypeT::upper, _M_value[0]), _M_traits);
+     400            0 :       __matcher._M_add_character_class(_M_value, false);
+     401            0 :       __matcher._M_ready();
+     402            0 :       _M_stack.push(_StateSeqT(*_M_nfa,
+     403            0 :         _M_nfa->_M_insert_matcher(std::move(__matcher))));
+     404            0 :     }
+     405              : 
+     406              :   template<typename _TraitsT>
+     407              :   template<bool __icase, bool __collate>
+     408              :     void
+     409            0 :     _Compiler<_TraitsT>::
+     410              :     _M_insert_bracket_matcher(bool __neg)
+     411              :     {
+     412            0 :       _BracketMatcher<__icase, __collate> __matcher(__neg, _M_traits);
+     413            0 :       _BracketState __last_char;
+     414            0 :       if (_M_try_char())
+     415            0 :         __last_char.set(_M_value[0]);
+     416            0 :       else if (_M_match_token(_ScannerT::_S_token_bracket_dash))
+     417              :         // Dash as first character is a normal character.
+     418            0 :         __last_char.set('-');
+     419            0 :       while (_M_expression_term(__last_char, __matcher))
+     420              :         ;
+     421            0 :       if (__last_char._M_is_char())
+     422            0 :         __matcher._M_add_char(__last_char.get());
+     423            0 :       __matcher._M_ready();
+     424            0 :       _M_stack.push(_StateSeqT(
+     425            0 :                       *_M_nfa,
+     426            0 :                       _M_nfa->_M_insert_matcher(std::move(__matcher))));
+     427            0 :     }
+     428              : 
+     429              :   template<typename _TraitsT>
+     430              :   template<bool __icase, bool __collate>
+     431              :     bool
+     432            0 :     _Compiler<_TraitsT>::
+     433              :     _M_expression_term(_BracketState& __last_char,
+     434              :                        _BracketMatcher<__icase, __collate>& __matcher)
+     435              :     {
+     436            0 :       if (_M_match_token(_ScannerT::_S_token_bracket_end))
+     437            0 :         return false;
+     438              : 
+     439              :       // Add any previously cached char into the matcher and update cache.
+     440            0 :       const auto __push_char = [&](_CharT __ch)
+     441              :       {
+     442            0 :         if (__last_char._M_is_char())
+     443            0 :           __matcher._M_add_char(__last_char.get());
+     444            0 :         __last_char.set(__ch);
+     445              :       };
+     446              :       // Add any previously cached char into the matcher and update cache.
+     447            0 :       const auto __push_class = [&]
+     448              :       {
+     449            0 :         if (__last_char._M_is_char())
+     450            0 :           __matcher._M_add_char(__last_char.get());
+     451              :         // We don't cache anything here, just record that the last thing
+     452              :         // processed was a character class (or similar).
+     453            0 :         __last_char.reset(_BracketState::_Type::_Class);
+     454              :       };
+     455              : 
+     456            0 :       if (_M_match_token(_ScannerT::_S_token_collsymbol))
+     457              :         {
+     458            0 :           auto __symbol = __matcher._M_add_collate_element(_M_value);
+     459            0 :           if (__symbol.size() == 1)
+     460            0 :             __push_char(__symbol[0]);
+     461              :           else
+     462            0 :             __push_class();
+     463            0 :         }
+     464            0 :       else if (_M_match_token(_ScannerT::_S_token_equiv_class_name))
+     465              :         {
+     466            0 :           __push_class();
+     467            0 :           __matcher._M_add_equivalence_class(_M_value);
+     468              :         }
+     469            0 :       else if (_M_match_token(_ScannerT::_S_token_char_class_name))
+     470              :         {
+     471            0 :           __push_class();
+     472            0 :           __matcher._M_add_character_class(_M_value, false);
+     473              :         }
+     474            0 :       else if (_M_try_char())
+     475            0 :         __push_char(_M_value[0]);
+     476              :       // POSIX doesn't allow '-' as a start-range char (say [a-z--0]),
+     477              :       // except when the '-' is the first or last character in the bracket
+     478              :       // expression ([--0]). ECMAScript treats all '-' after a range as a
+     479              :       // normal character. Also see above, where _M_expression_term gets called.
+     480              :       //
+     481              :       // As a result, POSIX rejects [-----], but ECMAScript doesn't.
+     482              :       // Boost (1.57.0) always uses POSIX style even in its ECMAScript syntax.
+     483              :       // Clang (3.5) always uses ECMAScript style even in its POSIX syntax.
+     484              :       //
+     485              :       // It turns out that no one reads BNFs ;)
+     486            0 :       else if (_M_match_token(_ScannerT::_S_token_bracket_dash))
+     487              :         {
+     488            0 :           if (_M_match_token(_ScannerT::_S_token_bracket_end))
+     489              :             {
+     490              :               // For "-]" the dash is a literal character.
+     491            0 :               __push_char('-');
+     492            0 :               return false;
+     493              :             }
+     494            0 :           else if (__last_char._M_is_class())
+     495              :             {
+     496              :               // "\\w-" is invalid, start of range must be a single char.
+     497            0 :               __throw_regex_error(regex_constants::error_range,
+     498              :                                   "Invalid start of '[x-x]' range in "
+     499              :                                   "regular expression");
+     500              :             }
+     501            0 :           else if (__last_char._M_is_char())
+     502              :             {
+     503            0 :               if (_M_try_char())
+     504              :                 {
+     505              :                   // "x-y"
+     506            0 :                   __matcher._M_make_range(__last_char.get(), _M_value[0]);
+     507            0 :                   __last_char.reset();
+     508              :                 }
+     509            0 :               else if (_M_match_token(_ScannerT::_S_token_bracket_dash))
+     510              :                 {
+     511              :                   // "x--"
+     512            0 :                   __matcher._M_make_range(__last_char.get(), '-');
+     513            0 :                   __last_char.reset();
+     514              :                 }
+     515              :               else
+     516            0 :                 __throw_regex_error(regex_constants::error_range,
+     517              :                                     "Invalid end of '[x-x]' range in "
+     518              :                                     "regular expression");
+     519              :             }
+     520            0 :           else if (_M_flags & regex_constants::ECMAScript)
+     521              :             {
+     522              :               // A dash that is not part of an existing range. Might be the
+     523              :               // start of a new range, or might just be a literal '-' char.
+     524              :               // Only ECMAScript allows that in the middle of a bracket expr.
+     525            0 :               __push_char('-');
+     526              :             }
+     527              :           else
+     528            0 :             __throw_regex_error(regex_constants::error_range,
+     529              :                                 "Invalid location of '-' within '[...]' in "
+     530              :                                 "POSIX regular expression");
+     531              :         }
+     532            0 :       else if (_M_match_token(_ScannerT::_S_token_quoted_class))
+     533              :         {
+     534            0 :           __push_class();
+     535            0 :           __matcher._M_add_character_class(_M_value,
+     536            0 :                                            _M_ctype.is(_CtypeT::upper,
+     537            0 :                                                        _M_value[0]));
+     538              :         }
+     539              :       else
+     540            0 :         __throw_regex_error(regex_constants::error_brack,
+     541              :                             "Unexpected character within '[...]' in "
+     542              :                             "regular expression");
+     543            0 :       return true;
+     544              :     }
+     545              : 
+     546              :   template<typename _TraitsT>
+     547              :     bool
+     548            0 :     _Compiler<_TraitsT>::
+     549              :     _M_try_char()
+     550              :     {
+     551            0 :       bool __is_char = false;
+     552            0 :       if (_M_match_token(_ScannerT::_S_token_oct_num))
+     553              :         {
+     554            0 :           __is_char = true;
+     555            0 :           _M_value.assign(1, _M_cur_int_value(8));
+     556              :         }
+     557            0 :       else if (_M_match_token(_ScannerT::_S_token_hex_num))
+     558              :         {
+     559            0 :           __is_char = true;
+     560            0 :           _M_value.assign(1, _M_cur_int_value(16));
+     561              :         }
+     562            0 :       else if (_M_match_token(_ScannerT::_S_token_ord_char))
+     563            0 :         __is_char = true;
+     564            0 :       return __is_char;
+     565              :     }
+     566              : 
+     567              :   template<typename _TraitsT>
+     568              :     bool
+     569            0 :     _Compiler<_TraitsT>::
+     570              :     _M_match_token(_TokenT __token)
+     571              :     {
+     572            0 :       if (__token == _M_scanner._M_get_token())
+     573              :         {
+     574            0 :           _M_value = _M_scanner._M_get_value();
+     575            0 :           _M_scanner._M_advance();
+     576            0 :           return true;
+     577              :         }
+     578            0 :       return false;
+     579              :     }
+     580              : 
+     581              :   template<typename _TraitsT>
+     582              :     int
+     583            0 :     _Compiler<_TraitsT>::
+     584              :     _M_cur_int_value(int __radix)
+     585              :     {
+     586            0 :       int __v = 0;
+     587            0 :       for (_CharT __c : _M_value)
+     588            0 :         if (__builtin_mul_overflow(__v, __radix, &__v)
+     589            0 :             || __builtin_add_overflow(__v, _M_traits.value(__c, __radix), &__v))
+     590            0 :             std::__throw_regex_error(regex_constants::error_backref,
+     591              :                                      "invalid back reference");
+     592            0 :       return __v;
+     593              :     }
+     594              : 
+     595              :   template<typename _TraitsT, bool __icase, bool __collate>
+     596              :     bool
+     597            0 :     _BracketMatcher<_TraitsT, __icase, __collate>::
+     598              :     _M_apply(_CharT __ch, false_type) const
+     599              :     {
+     600            0 :       return [this, __ch]
+     601              :       {
+     602            0 :         if (std::binary_search(_M_char_set.begin(), _M_char_set.end(),
+     603            0 :                                _M_translator._M_translate(__ch)))
+     604            0 :           return true;
+     605            0 :         auto __s = _M_translator._M_transform(__ch);
+     606            0 :         for (auto& __it : _M_range_set)
+     607            0 :           if (_M_translator._M_match_range(__it.first, __it.second, __s))
+     608            0 :             return true;
+     609            0 :         if (_M_traits.isctype(__ch, _M_class_set))
+     610            0 :           return true;
+     611            0 :         if (std::find(_M_equiv_set.begin(), _M_equiv_set.end(),
+     612            0 :                       _M_traits.transform_primary(&__ch, &__ch+1))
+     613            0 :             != _M_equiv_set.end())
+     614            0 :           return true;
+     615            0 :         for (auto& __it : _M_neg_class_set)
+     616            0 :           if (!_M_traits.isctype(__ch, __it))
+     617            0 :             return true;
+     618            0 :         return false;
+     619            0 :       }() ^ _M_is_non_matching;
+     620              :     }
+     621              : } // namespace __detail
+     622              : 
+     623              : _GLIBCXX_END_NAMESPACE_VERSION
+     624              : } // namespace
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_constants.h.func-c.html b/html/usr/include/c++/13/bits/regex_constants.h.func-c.html new file mode 100644 index 0000000..ee7e1f8 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_constants.h.func-c.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_constants.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_constants.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %140
Test Date:2024-04-30 13:17:26Functions:0.0 %70
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt15regex_constantsaNERNS_15match_flag_typeES0_0
_ZNSt15regex_constantsanENS_15match_flag_typeES0_0
_ZNSt15regex_constantsanENS_18syntax_option_typeES0_0
_ZNSt15regex_constantscoENS_15match_flag_typeE0
_ZNSt15regex_constantsoRERNS_15match_flag_typeES0_0
_ZNSt15regex_constantsorENS_15match_flag_typeES0_0
_ZNSt15regex_constantsorENS_18syntax_option_typeES0_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_constants.h.func.html b/html/usr/include/c++/13/bits/regex_constants.h.func.html new file mode 100644 index 0000000..2216c70 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_constants.h.func.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_constants.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_constants.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %140
Test Date:2024-04-30 13:17:26Functions:0.0 %70
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt15regex_constantsaNERNS_15match_flag_typeES0_0
_ZNSt15regex_constantsanENS_15match_flag_typeES0_0
_ZNSt15regex_constantsanENS_18syntax_option_typeES0_0
_ZNSt15regex_constantscoENS_15match_flag_typeE0
_ZNSt15regex_constantsoRERNS_15match_flag_typeES0_0
_ZNSt15regex_constantsorENS_15match_flag_typeES0_0
_ZNSt15regex_constantsorENS_18syntax_option_typeES0_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_constants.h.gcov.html b/html/usr/include/c++/13/bits/regex_constants.h.gcov.html new file mode 100644 index 0000000..924d1b9 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_constants.h.gcov.html @@ -0,0 +1,492 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_constants.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_constants.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %140
Test Date:2024-04-30 13:17:26Functions:0.0 %70
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Namespace std::regex_constants -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2010-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /**
+      26              :  *  @file bits/regex_constants.h
+      27              :  *  @brief Constant definitions for the std regex library.
+      28              :  *
+      29              :  *  This is an internal header file, included by other library headers.
+      30              :  *  Do not attempt to use it directly. @headername{regex}
+      31              :  */
+      32              : 
+      33              : namespace std _GLIBCXX_VISIBILITY(default)
+      34              : {
+      35              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      36              : 
+      37              : /**
+      38              :  * @defgroup regex Regular Expressions
+      39              :  *
+      40              :  * A facility for performing regular expression pattern matching.
+      41              :  *
+      42              :  * @since C++11
+      43              :  *
+      44              :  * @{
+      45              :  */
+      46              : 
+      47              : /**
+      48              :  * @namespace std::regex_constants
+      49              :  * @brief ISO C++ 2011 namespace for options and flags used with std::regex
+      50              :  */
+      51              : namespace regex_constants
+      52              : {
+      53              :   /**
+      54              :    * @name 5.1 Regular Expression Syntax Options
+      55              :    */
+      56              :   ///@{
+      57              : 
+      58              :   /**
+      59              :    * @brief This is a bitmask type indicating how to interpret the regex.
+      60              :    *
+      61              :    * The @c syntax_option_type is implementation defined but it is valid to
+      62              :    * perform bitwise operations on these values and expect the right thing to
+      63              :    * happen.
+      64              :    *
+      65              :    * A valid value of type syntax_option_type shall have exactly one of the
+      66              :    * elements @c ECMAScript, @c basic, @c extended, @c awk, @c grep, @c egrep
+      67              :    * %set.
+      68              :    */
+      69              :   enum syntax_option_type : unsigned int
+      70              :   {
+      71              :     _S_icase            = 1 << 0,
+      72              :     _S_nosubs           = 1 << 1,
+      73              :     _S_optimize         = 1 << 2,
+      74              :     _S_collate          = 1 << 3,
+      75              :     _S_ECMAScript       = 1 << 4,
+      76              :     _S_basic            = 1 << 5,
+      77              :     _S_extended         = 1 << 6,
+      78              :     _S_awk              = 1 << 7,
+      79              :     _S_grep             = 1 << 8,
+      80              :     _S_egrep            = 1 << 9,
+      81              :     _S_polynomial       = 1 << 10,
+      82              :     _S_multiline        = 1 << 11
+      83              :   };
+      84              : 
+      85              :   /**
+      86              :    * Specifies that the matching of regular expressions against a character
+      87              :    * sequence shall be performed without regard to case.
+      88              :    */
+      89              :   _GLIBCXX17_INLINE constexpr syntax_option_type icase = _S_icase;
+      90              : 
+      91              :   /**
+      92              :    * Specifies that when a regular expression is matched against a character
+      93              :    * container sequence, no sub-expression matches are to be stored in the
+      94              :    * supplied match_results structure.
+      95              :    */
+      96              :   _GLIBCXX17_INLINE constexpr syntax_option_type nosubs = _S_nosubs;
+      97              : 
+      98              :   /**
+      99              :    * Specifies that the regular expression engine should pay more attention to
+     100              :    * the speed with which regular expressions are matched, and less to the
+     101              :    * speed with which regular expression objects are constructed. Otherwise
+     102              :    * it has no detectable effect on the program output.
+     103              :    */
+     104              :   _GLIBCXX17_INLINE constexpr syntax_option_type optimize = _S_optimize;
+     105              : 
+     106              :   /**
+     107              :    * Specifies that character ranges of the form [a-b] should be locale
+     108              :    * sensitive.
+     109              :    */
+     110              :   _GLIBCXX17_INLINE constexpr syntax_option_type collate = _S_collate;
+     111              : 
+     112              :   /**
+     113              :    * Specifies that the grammar recognized by the regular expression engine is
+     114              :    * that used by ECMAScript in ECMA-262 [Ecma International, ECMAScript
+     115              :    * Language Specification, Standard Ecma-262, third edition, 1999], as
+     116              :    * modified in section [28.13].  This grammar is similar to that defined
+     117              :    * in the PERL scripting language but extended with elements found in the
+     118              :    * POSIX regular expression grammar.
+     119              :    */
+     120              :   _GLIBCXX17_INLINE constexpr syntax_option_type ECMAScript = _S_ECMAScript;
+     121              : 
+     122              :   /**
+     123              :    * Specifies that the grammar recognized by the regular expression engine is
+     124              :    * that used by POSIX basic regular expressions in IEEE Std 1003.1-2001,
+     125              :    * Portable Operating System Interface (POSIX), Base Definitions and
+     126              :    * Headers, Section 9, Regular Expressions [IEEE, Information Technology --
+     127              :    * Portable Operating System Interface (POSIX), IEEE Standard 1003.1-2001].
+     128              :    */
+     129              :   _GLIBCXX17_INLINE constexpr syntax_option_type basic = _S_basic;
+     130              : 
+     131              :   /**
+     132              :    * Specifies that the grammar recognized by the regular expression engine is
+     133              :    * that used by POSIX extended regular expressions in IEEE Std 1003.1-2001,
+     134              :    * Portable Operating System Interface (POSIX), Base Definitions and
+     135              :    * Headers, Section 9, Regular Expressions.
+     136              :    */
+     137              :   _GLIBCXX17_INLINE constexpr syntax_option_type extended = _S_extended;
+     138              : 
+     139              :   /**
+     140              :    * Specifies that the grammar recognized by the regular expression engine is
+     141              :    * that used by POSIX utility awk in IEEE Std 1003.1-2001.  This option is
+     142              :    * identical to syntax_option_type extended, except that C-style escape
+     143              :    * sequences are supported.  These sequences are:
+     144              :    * \\\\, \\a, \\b, \\f, \\n, \\r, \\t , \\v, \\&apos,, &apos,,
+     145              :    * and \\ddd (where ddd is one, two, or three octal digits).
+     146              :    */
+     147              :   _GLIBCXX17_INLINE constexpr syntax_option_type awk = _S_awk;
+     148              : 
+     149              :   /**
+     150              :    * Specifies that the grammar recognized by the regular expression engine is
+     151              :    * that used by POSIX utility grep in IEEE Std 1003.1-2001.  This option is
+     152              :    * identical to syntax_option_type basic, except that newlines are treated
+     153              :    * as whitespace.
+     154              :    */
+     155              :   _GLIBCXX17_INLINE constexpr syntax_option_type grep = _S_grep;
+     156              : 
+     157              :   /**
+     158              :    * Specifies that the grammar recognized by the regular expression engine is
+     159              :    * that used by POSIX utility grep when given the -E option in
+     160              :    * IEEE Std 1003.1-2001.  This option is identical to syntax_option_type
+     161              :    * extended, except that newlines are treated as whitespace.
+     162              :    */
+     163              :   _GLIBCXX17_INLINE constexpr syntax_option_type egrep = _S_egrep;
+     164              : 
+     165              : #if __cplusplus >= 201703L || !defined __STRICT_ANSI__
+     166              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     167              :   // 2503. multiline option should be added to syntax_option_type
+     168              :   /**
+     169              :    * Specifies that the `^` anchor matches at the beginning of a line,
+     170              :    * and the `$` anchor matches at the end of a line, not only at the
+     171              :    * beginning/end of the input.
+     172              :    * Valid for the ECMAScript syntax, ignored otherwise.
+     173              :    * @since C++17
+     174              :    */
+     175              :   _GLIBCXX17_INLINE constexpr syntax_option_type multiline = _S_multiline;
+     176              : #endif
+     177              : 
+     178              :   /// Extension: Equivalent to regex_constants::multiline for C++11 and C++14.
+     179              :   _GLIBCXX17_INLINE constexpr syntax_option_type __multiline = _S_multiline;
+     180              : 
+     181              :   /**
+     182              :    * Extension: Ensure both space complexity of compiled regex and
+     183              :    * time complexity execution are not exponential.
+     184              :    * If specified in a regex with back-references, the exception
+     185              :    * regex_constants::error_complexity will be thrown.
+     186              :    */
+     187              :   _GLIBCXX17_INLINE constexpr syntax_option_type __polynomial = _S_polynomial;
+     188              : 
+     189              :   constexpr inline syntax_option_type
+     190            0 :   operator&(syntax_option_type __a, syntax_option_type __b)
+     191              :   {
+     192              :     return (syntax_option_type)(static_cast<unsigned int>(__a)
+     193            0 :                                 & static_cast<unsigned int>(__b));
+     194              :   }
+     195              : 
+     196              :   constexpr inline syntax_option_type
+     197            0 :   operator|(syntax_option_type __a, syntax_option_type __b)
+     198              :   {
+     199              :     return (syntax_option_type)(static_cast<unsigned int>(__a)
+     200            0 :                                 | static_cast<unsigned int>(__b));
+     201              :   }
+     202              : 
+     203              :   constexpr inline syntax_option_type
+     204              :   operator^(syntax_option_type __a, syntax_option_type __b)
+     205              :   {
+     206              :     return (syntax_option_type)(static_cast<unsigned int>(__a)
+     207              :                                 ^ static_cast<unsigned int>(__b));
+     208              :   }
+     209              : 
+     210              :   constexpr inline syntax_option_type
+     211              :   operator~(syntax_option_type __a)
+     212              :   { return (syntax_option_type)(~static_cast<unsigned int>(__a)); }
+     213              : 
+     214              :   _GLIBCXX14_CONSTEXPR
+     215              :   inline syntax_option_type&
+     216              :   operator&=(syntax_option_type& __a, syntax_option_type __b)
+     217              :   { return __a = __a & __b; }
+     218              : 
+     219              :   _GLIBCXX14_CONSTEXPR
+     220              :   inline syntax_option_type&
+     221              :   operator|=(syntax_option_type& __a, syntax_option_type __b)
+     222              :   { return __a = __a | __b; }
+     223              : 
+     224              :   _GLIBCXX14_CONSTEXPR
+     225              :   inline syntax_option_type&
+     226              :   operator^=(syntax_option_type& __a, syntax_option_type __b)
+     227              :   { return __a = __a ^ __b; }
+     228              : 
+     229              :   ///@}
+     230              : 
+     231              :   /**
+     232              :    * @name 5.2 Matching Rules
+     233              :    *
+     234              :    * Matching a regular expression against a sequence of characters [first,
+     235              :    * last) proceeds according to the rules of the grammar specified for the
+     236              :    * regular expression object, modified according to the effects listed
+     237              :    * below for any bitmask elements set.
+     238              :    *
+     239              :    */
+     240              :   ///@{
+     241              : 
+     242              :   /**
+     243              :    * @brief This is a bitmask type indicating regex matching rules.
+     244              :    *
+     245              :    * The @c match_flag_type is implementation defined but it is valid to
+     246              :    * perform bitwise operations on these values and expect the right thing to
+     247              :    * happen.
+     248              :    */
+     249              :   enum match_flag_type : unsigned int
+     250              :   {
+     251              :     _S_default,
+     252              :     _S_not_bol          = 1 << 0,
+     253              :     _S_not_eol          = 1 << 1,
+     254              :     _S_not_bow          = 1 << 2,
+     255              :     _S_not_eow          = 1 << 3,
+     256              :     _S_any              = 1 << 4,
+     257              :     _S_not_null         = 1 << 5,
+     258              :     _S_continuous       = 1 << 6,
+     259              :     _S_prev_avail       = 1 << 7,
+     260              :     _S_sed              = 1 << 8,
+     261              :     _S_no_copy          = 1 << 9,
+     262              :     _S_first_only       = 1 << 10,
+     263              :     _S_match_flag_last  = 1 << 11
+     264              :   };
+     265              : 
+     266              :   /**
+     267              :    * The default matching rules.
+     268              :    */
+     269              :   _GLIBCXX17_INLINE constexpr match_flag_type match_default = _S_default;
+     270              : 
+     271              :   /**
+     272              :    * The first character in the sequence [first, last) is treated as though it
+     273              :    * is not at the beginning of a line, so the character (^) in the regular
+     274              :    * expression shall not match [first, first).
+     275              :    */
+     276              :   _GLIBCXX17_INLINE constexpr match_flag_type match_not_bol = _S_not_bol;
+     277              : 
+     278              :   /**
+     279              :    * The last character in the sequence [first, last) is treated as though it
+     280              :    * is not at the end of a line, so the character ($) in the regular
+     281              :    * expression shall not match [last, last).
+     282              :    */
+     283              :   _GLIBCXX17_INLINE constexpr match_flag_type match_not_eol = _S_not_eol;
+     284              : 
+     285              :   /**
+     286              :    * The expression \\b is not matched against the sub-sequence
+     287              :    * [first,first).
+     288              :    */
+     289              :   _GLIBCXX17_INLINE constexpr match_flag_type match_not_bow = _S_not_bow;
+     290              : 
+     291              :   /**
+     292              :    * The expression \\b should not be matched against the sub-sequence
+     293              :    * [last,last).
+     294              :    */
+     295              :   _GLIBCXX17_INLINE constexpr match_flag_type match_not_eow = _S_not_eow;
+     296              : 
+     297              :   /**
+     298              :    * If more than one match is possible then any match is an acceptable
+     299              :    * result.
+     300              :    */
+     301              :   _GLIBCXX17_INLINE constexpr match_flag_type match_any = _S_any;
+     302              : 
+     303              :   /**
+     304              :    * The expression does not match an empty sequence.
+     305              :    */
+     306              :   _GLIBCXX17_INLINE constexpr match_flag_type match_not_null = _S_not_null;
+     307              : 
+     308              :   /**
+     309              :    * The expression only matches a sub-sequence that begins at first .
+     310              :    */
+     311              :   _GLIBCXX17_INLINE constexpr match_flag_type match_continuous = _S_continuous;
+     312              : 
+     313              :   /**
+     314              :    * `--first` is a valid iterator position.  When this flag is set then the
+     315              :    * flags `match_not_bol` and `match_not_bow` are ignored by the algorithms
+     316              :    * `regex_match`, `regex_search`, and `regex_replace`, and by the iterators
+     317              :    * `regex_iterator` and `regex_token_iterator`.
+     318              :    */
+     319              :   _GLIBCXX17_INLINE constexpr match_flag_type match_prev_avail = _S_prev_avail;
+     320              : 
+     321              :   /**
+     322              :    * When a regular expression match is to be replaced by a new string, the
+     323              :    * new string is constructed using the rules used by the ECMAScript replace
+     324              :    * function in ECMA- 262 [Ecma International, ECMAScript Language
+     325              :    * Specification, Standard Ecma-262, third edition, 1999], part 15.5.4.11
+     326              :    * String.prototype.replace. In addition, during search and replace
+     327              :    * operations all non-overlapping occurrences of the regular expression
+     328              :    * are located and replaced, and sections of the input that did not match
+     329              :    * the expression are copied unchanged to the output string.
+     330              :    *
+     331              :    * Format strings (from ECMA-262 [15.5.4.11]):
+     332              :    * @li $$  The dollar-sign itself ($)
+     333              :    * @li $&  The matched substring.
+     334              :    * @li $`  The portion of @a string that precedes the matched substring.
+     335              :    *         This would be match_results::prefix().
+     336              :    * @li $'  The portion of @a string that follows the matched substring.
+     337              :    *         This would be match_results::suffix().
+     338              :    * @li $n  The nth capture, where n is in [1,9] and $n is not followed by a
+     339              :    *         decimal digit.  If n <= match_results::size() and the nth capture
+     340              :    *         is undefined, use the empty string instead.  If n >
+     341              :    *         match_results::size(), the result is implementation-defined.
+     342              :    * @li $nn The nnth capture, where nn is a two-digit decimal number on
+     343              :    *         [01, 99].  If nn <= match_results::size() and the nth capture is
+     344              :    *         undefined, use the empty string instead. If
+     345              :    *         nn > match_results::size(), the result is implementation-defined.
+     346              :    */
+     347              :   _GLIBCXX17_INLINE constexpr match_flag_type format_default = _S_default;
+     348              : 
+     349              :   /**
+     350              :    * When a regular expression match is to be replaced by a new string, the
+     351              :    * new string is constructed using the rules used by the POSIX sed utility
+     352              :    * in IEEE Std 1003.1- 2001 [IEEE, Information Technology -- Portable
+     353              :    * Operating System Interface (POSIX), IEEE Standard 1003.1-2001].
+     354              :    */
+     355              :   _GLIBCXX17_INLINE constexpr match_flag_type format_sed = _S_sed;
+     356              : 
+     357              :   /**
+     358              :    * During a search and replace operation, sections of the character
+     359              :    * container sequence being searched that do not match the regular
+     360              :    * expression shall not be copied to the output string.
+     361              :    */
+     362              :   _GLIBCXX17_INLINE constexpr match_flag_type format_no_copy = _S_no_copy;
+     363              : 
+     364              :   /**
+     365              :    * When specified during a search and replace operation, only the first
+     366              :    * occurrence of the regular expression shall be replaced.
+     367              :    */
+     368              :   _GLIBCXX17_INLINE constexpr match_flag_type format_first_only = _S_first_only;
+     369              : 
+     370              :   constexpr inline match_flag_type
+     371            0 :   operator&(match_flag_type __a, match_flag_type __b)
+     372              :   {
+     373              :     return (match_flag_type)(static_cast<unsigned int>(__a)
+     374            0 :                                 & static_cast<unsigned int>(__b));
+     375              :   }
+     376              : 
+     377              :   constexpr inline match_flag_type
+     378            0 :   operator|(match_flag_type __a, match_flag_type __b)
+     379              :   {
+     380              :     return (match_flag_type)(static_cast<unsigned int>(__a)
+     381            0 :                                 | static_cast<unsigned int>(__b));
+     382              :   }
+     383              : 
+     384              :   constexpr inline match_flag_type
+     385              :   operator^(match_flag_type __a, match_flag_type __b)
+     386              :   {
+     387              :     return (match_flag_type)(static_cast<unsigned int>(__a)
+     388              :                                 ^ static_cast<unsigned int>(__b));
+     389              :   }
+     390              : 
+     391              :   constexpr inline match_flag_type
+     392            0 :   operator~(match_flag_type __a)
+     393            0 :   { return (match_flag_type)(~static_cast<unsigned int>(__a)); }
+     394              : 
+     395              :   _GLIBCXX14_CONSTEXPR
+     396              :   inline match_flag_type&
+     397            0 :   operator&=(match_flag_type& __a, match_flag_type __b)
+     398            0 :   { return __a = __a & __b; }
+     399              : 
+     400              :   _GLIBCXX14_CONSTEXPR
+     401              :   inline match_flag_type&
+     402            0 :   operator|=(match_flag_type& __a, match_flag_type __b)
+     403            0 :   { return __a = __a | __b; }
+     404              : 
+     405              :   _GLIBCXX14_CONSTEXPR
+     406              :   inline match_flag_type&
+     407              :   operator^=(match_flag_type& __a, match_flag_type __b)
+     408              :   { return __a = __a ^ __b; }
+     409              : 
+     410              :   ///@}
+     411              : } // namespace regex_constants
+     412              : /// @} group regex
+     413              : 
+     414              : _GLIBCXX_END_NAMESPACE_VERSION
+     415              : } // namespace std
+     416              : 
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_error.h.func-c.html b/html/usr/include/c++/13/bits/regex_error.h.func-c.html new file mode 100644 index 0000000..71692b8 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_error.h.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_error.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_error.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %50
Test Date:2024-04-30 13:17:26Functions:0.0 %20
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt11regex_errorC2ENSt15regex_constants10error_typeEPKc0
_ZSt19__throw_regex_errorNSt15regex_constants10error_typeEPKc0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_error.h.func.html b/html/usr/include/c++/13/bits/regex_error.h.func.html new file mode 100644 index 0000000..87cf764 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_error.h.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_error.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_error.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %50
Test Date:2024-04-30 13:17:26Functions:0.0 %20
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt11regex_errorC2ENSt15regex_constants10error_typeEPKc0
_ZSt19__throw_regex_errorNSt15regex_constants10error_typeEPKc0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_error.h.gcov.html b/html/usr/include/c++/13/bits/regex_error.h.gcov.html new file mode 100644 index 0000000..6485d14 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_error.h.gcov.html @@ -0,0 +1,268 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_error.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_error.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %50
Test Date:2024-04-30 13:17:26Functions:0.0 %20
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Errors for std::regex -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2010-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /**
+      26              :  * @file bits/regex_error.h
+      27              :  * @brief Error and exception objects for the std regex library.
+      28              :  *
+      29              :  *  This is an internal header file, included by other library headers.
+      30              :  *  Do not attempt to use it directly. @headername{regex}
+      31              :  */
+      32              : 
+      33              : namespace std _GLIBCXX_VISIBILITY(default)
+      34              : {
+      35              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      36              : 
+      37              : /**
+      38              :  * @addtogroup regex
+      39              :  * @{
+      40              :  */
+      41              : 
+      42              : namespace regex_constants
+      43              : {
+      44              :   /**
+      45              :    * @name 5.3 Error Types
+      46              :    */
+      47              :   ///@{
+      48              : 
+      49              :   enum error_type
+      50              :     {
+      51              :       _S_error_collate, // XXX should have been a non-zero value
+      52              :       _S_error_ctype,
+      53              :       _S_error_escape,
+      54              :       _S_error_backref,
+      55              :       _S_error_brack,
+      56              :       _S_error_paren,
+      57              :       _S_error_brace,
+      58              :       _S_error_badbrace,
+      59              :       _S_error_range,
+      60              :       _S_error_space,
+      61              :       _S_error_badrepeat,
+      62              :       _S_error_complexity,
+      63              :       _S_error_stack,
+      64              :       _S_null,
+      65              :       _S_grammar
+      66              :     };
+      67              : 
+      68              :   /** The expression contained an invalid collating element name. */
+      69              :   _GLIBCXX17_INLINE constexpr error_type error_collate(_S_error_collate);
+      70              : 
+      71              :   /** The expression contained an invalid character class name. */
+      72              :   _GLIBCXX17_INLINE constexpr error_type error_ctype(_S_error_ctype);
+      73              : 
+      74              :   /**
+      75              :    * The expression contained an invalid escaped character, or a trailing
+      76              :    * escape.
+      77              :    */
+      78              :   _GLIBCXX17_INLINE constexpr error_type error_escape(_S_error_escape);
+      79              : 
+      80              :   /** The expression contained an invalid back reference. */
+      81              :   _GLIBCXX17_INLINE constexpr error_type error_backref(_S_error_backref);
+      82              : 
+      83              :   /** The expression contained mismatched [ and ]. */
+      84              :   _GLIBCXX17_INLINE constexpr error_type error_brack(_S_error_brack);
+      85              : 
+      86              :   /** The expression contained mismatched ( and ). */
+      87              :   _GLIBCXX17_INLINE constexpr error_type error_paren(_S_error_paren);
+      88              : 
+      89              :   /** The expression contained mismatched { and } */
+      90              :   _GLIBCXX17_INLINE constexpr error_type error_brace(_S_error_brace);
+      91              : 
+      92              :   /** The expression contained an invalid range in a {} expression. */
+      93              :   _GLIBCXX17_INLINE constexpr error_type error_badbrace(_S_error_badbrace);
+      94              : 
+      95              :   /**
+      96              :    * The expression contained an invalid character range,
+      97              :    * such as [b-a] in most encodings.
+      98              :    */
+      99              :   _GLIBCXX17_INLINE constexpr error_type error_range(_S_error_range);
+     100              : 
+     101              :   /**
+     102              :    * There was insufficient memory to convert the expression into a
+     103              :    * finite state machine.
+     104              :    */
+     105              :   _GLIBCXX17_INLINE constexpr error_type error_space(_S_error_space);
+     106              : 
+     107              :   /**
+     108              :    * One of <em>*?+{</em> was not preceded by a valid regular expression.
+     109              :    */
+     110              :   _GLIBCXX17_INLINE constexpr error_type error_badrepeat(_S_error_badrepeat);
+     111              : 
+     112              :   /**
+     113              :    * The complexity of an attempted match against a regular expression
+     114              :    * exceeded a pre-set level.
+     115              :    */
+     116              :   _GLIBCXX17_INLINE constexpr error_type error_complexity(_S_error_complexity);
+     117              : 
+     118              :   /**
+     119              :    * There was insufficient memory to determine whether the
+     120              :    * regular expression could match the specified character sequence.
+     121              :    */
+     122              :   _GLIBCXX17_INLINE constexpr error_type error_stack(_S_error_stack);
+     123              : 
+     124              :   ///@}
+     125              : } // namespace regex_constants
+     126              : 
+     127              :   // [7.8] Class regex_error
+     128              :   /**
+     129              :    * @brief A regular expression exception class.
+     130              :    * @ingroup exceptions
+     131              :    *
+     132              :    * The regular expression library throws objects of this class on error.
+     133              :    *
+     134              :    * @headerfile regex
+     135              :    * @since C++11
+     136              :    */
+     137              :   class regex_error : public std::runtime_error
+     138              :   {
+     139              :     using error_type = regex_constants::error_type;
+     140              : 
+     141              :     error_type _M_code;
+     142              : 
+     143              :   public:
+     144              :     /**
+     145              :      * @brief Constructs a regex_error object.
+     146              :      *
+     147              :      * @param __ecode the regex error code.
+     148              :      */
+     149              :     explicit
+     150              :     regex_error(error_type __ecode);
+     151              : 
+     152              :     virtual ~regex_error() throw();
+     153              : 
+     154              :     /**
+     155              :      * @brief Gets the regex error code.
+     156              :      *
+     157              :      * @returns the regex error code.
+     158              :      */
+     159              :     regex_constants::error_type
+     160              :     code() const noexcept
+     161              :     { return _M_code; }
+     162              : 
+     163              :   private:
+     164              :     /// @cond undocumented
+     165            0 :     regex_error(error_type __ecode, const char* __what)
+     166            0 :     : std::runtime_error(__what), _M_code(__ecode)
+     167            0 :     { }
+     168              : 
+     169              :     [[__noreturn__]]
+     170              :     friend void
+     171            0 :     __throw_regex_error(error_type __ecode __attribute__((__unused__)),
+     172              :                         const char* __what __attribute__((__unused__)))
+     173            0 :     { _GLIBCXX_THROW_OR_ABORT(regex_error(__ecode, __what)); }
+     174              :     /// @endcond
+     175              :   };
+     176              : 
+     177              :   /// @cond undocumented
+     178              : 
+     179              :   [[__noreturn__]]
+     180              :   void
+     181              :   __throw_regex_error(regex_constants::error_type __ecode);
+     182              : 
+     183              :   [[__noreturn__]]
+     184              :   inline void
+     185              :   __throw_regex_error(regex_constants::error_type __ecode, const char* __what);
+     186              : 
+     187              :   /// @endcond
+     188              : 
+     189              :   ///@} // group regex
+     190              : 
+     191              : _GLIBCXX_END_NAMESPACE_VERSION
+     192              : } // namespace std
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_executor.h.func-c.html b/html/usr/include/c++/13/bits/regex_executor.h.func-c.html new file mode 100644 index 0000000..69e72a4 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_executor.h.func-c.html @@ -0,0 +1,313 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_executor.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_executor.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %700
Test Date:2024-04-30 13:17:26Functions:0.0 %250
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE10_M_is_wordEc0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE10_M_is_wordEc0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE10_M_is_wordEc0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE11_M_at_beginEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE11_M_at_beginEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE11_M_at_beginEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE18_M_match_multilineEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE18_M_match_multilineEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE18_M_match_multilineEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE21_M_is_line_terminatorEc0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE21_M_is_line_terminatorEc0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE21_M_is_line_terminatorEc0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE9_M_at_endEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE9_M_at_endEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE9_M_at_endEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE11_State_infoISt17integral_constantIbLb1EESt6vectorISD_SE_EE10_M_visitedEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE11_State_infoISt17integral_constantIbLb0EESt6vectorISD_SE_EE10_M_visitedEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE11_State_infoISt17integral_constantIbLb0EESt6vectorISD_SE_EE8_M_queueElRKSM_0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE11_State_infoISt17integral_constantIbLb0EESt6vectorISD_SE_EEC2Elm0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE11_State_infoISt17integral_constantIbLb0EESt6vectorISD_SE_EED2Ev0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE20_M_search_from_firstEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE20_M_search_from_firstEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE20_M_search_from_firstEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE7_M_mainENSH_11_Match_modeE0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE7_M_mainENSH_11_Match_modeE0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE7_M_mainENSH_11_Match_modeE0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE8_M_matchEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE8_M_matchEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE8_M_matchEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EEC2ESB_SB_RSt6vectorISD_SE_ERKNS5_11basic_regexIcSG_EENSt15regex_constants15match_flag_typeE0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EEC2ESB_SB_RSt6vectorISD_SE_ERKNS5_11basic_regexIcSG_EENSt15regex_constants15match_flag_typeE0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EEC2ESB_SB_RSt6vectorISD_SE_ERKNS5_11basic_regexIcSG_EENSt15regex_constants15match_flag_typeE0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE11_State_infoISt17integral_constantIbLb1EESt6vectorISD_SE_EE14_M_get_sol_posEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE11_State_infoISt17integral_constantIbLb1EESt6vectorISD_SE_EEC2Elm0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_executor.h.func.html b/html/usr/include/c++/13/bits/regex_executor.h.func.html new file mode 100644 index 0000000..b555dc3 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_executor.h.func.html @@ -0,0 +1,313 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_executor.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_executor.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %700
Test Date:2024-04-30 13:17:26Functions:0.0 %250
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE10_M_is_wordEc0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE10_M_is_wordEc0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE10_M_is_wordEc0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE11_M_at_beginEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE11_M_at_beginEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE11_M_at_beginEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE18_M_match_multilineEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE18_M_match_multilineEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE18_M_match_multilineEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE21_M_is_line_terminatorEc0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE21_M_is_line_terminatorEc0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE21_M_is_line_terminatorEc0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE9_M_at_endEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE9_M_at_endEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE9_M_at_endEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE11_State_infoISt17integral_constantIbLb1EESt6vectorISD_SE_EE10_M_visitedEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE11_State_infoISt17integral_constantIbLb0EESt6vectorISD_SE_EE10_M_visitedEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE11_State_infoISt17integral_constantIbLb0EESt6vectorISD_SE_EE8_M_queueElRKSM_0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE11_State_infoISt17integral_constantIbLb0EESt6vectorISD_SE_EEC2Elm0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE11_State_infoISt17integral_constantIbLb0EESt6vectorISD_SE_EED2Ev0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE20_M_search_from_firstEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE20_M_search_from_firstEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE20_M_search_from_firstEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE7_M_mainENSH_11_Match_modeE0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE7_M_mainENSH_11_Match_modeE0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE7_M_mainENSH_11_Match_modeE0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE8_M_matchEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE8_M_matchEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE8_M_matchEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EEC2ESB_SB_RSt6vectorISD_SE_ERKNS5_11basic_regexIcSG_EENSt15regex_constants15match_flag_typeE0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EEC2ESB_SB_RSt6vectorISD_SE_ERKNS5_11basic_regexIcSG_EENSt15regex_constants15match_flag_typeE0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EEC2ESB_SB_RSt6vectorISD_SE_ERKNS5_11basic_regexIcSG_EENSt15regex_constants15match_flag_typeE0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE11_State_infoISt17integral_constantIbLb1EESt6vectorISD_SE_EE14_M_get_sol_posEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE11_State_infoISt17integral_constantIbLb1EESt6vectorISD_SE_EEC2Elm0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_executor.h.gcov.html b/html/usr/include/c++/13/bits/regex_executor.h.gcov.html new file mode 100644 index 0000000..0f05007 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_executor.h.gcov.html @@ -0,0 +1,388 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_executor.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_executor.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %700
Test Date:2024-04-30 13:17:26Functions:0.0 %250
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // class template regex -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2013-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /**
+      26              :  *  @file bits/regex_executor.h
+      27              :  *  This is an internal header file, included by other library headers.
+      28              :  *  Do not attempt to use it directly. @headername{regex}
+      29              :  */
+      30              : 
+      31              : // FIXME convert comments to doxygen format.
+      32              : 
+      33              : namespace std _GLIBCXX_VISIBILITY(default)
+      34              : {
+      35              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      36              : 
+      37              : namespace __detail
+      38              : {
+      39              :   /**
+      40              :    * @addtogroup regex-detail
+      41              :    * @{
+      42              :    */
+      43              : 
+      44              :   /**
+      45              :    * @brief Takes a regex and an input string and does the matching.
+      46              :    *
+      47              :    * The %_Executor class has two modes: DFS mode and BFS mode, controlled
+      48              :    * by the template parameter %__dfs_mode.
+      49              :    */
+      50              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+      51              :            bool __dfs_mode>
+      52              :     class _Executor
+      53              :     {
+      54              :       using __search_mode = integral_constant<bool, __dfs_mode>;
+      55              :       using __dfs = true_type;
+      56              :       using __bfs = false_type;
+      57              : 
+      58              :       enum class _Match_mode : unsigned char { _Exact, _Prefix };
+      59              : 
+      60              :     public:
+      61              :       typedef typename iterator_traits<_BiIter>::value_type _CharT;
+      62              :       typedef basic_regex<_CharT, _TraitsT>                 _RegexT;
+      63              :       typedef _GLIBCXX_STD_C::vector<sub_match<_BiIter>, _Alloc> _ResultsVec;
+      64              :       typedef regex_constants::match_flag_type              _FlagT;
+      65              :       typedef typename _TraitsT::char_class_type            _ClassT;
+      66              :       typedef _NFA<_TraitsT>                                _NFAT;
+      67              : 
+      68              :     public:
+      69            0 :       _Executor(_BiIter         __begin,
+      70              :                 _BiIter         __end,
+      71              :                 _ResultsVec&    __results,
+      72              :                 const _RegexT&  __re,
+      73              :                 _FlagT          __flags)
+      74            0 :       : _M_cur_results(__results.get_allocator()),
+      75            0 :         _M_begin(__begin),
+      76            0 :         _M_end(__end),
+      77            0 :         _M_re(__re),
+      78            0 :         _M_nfa(*__re._M_automaton),
+      79            0 :         _M_results(__results),
+      80            0 :         _M_rep_count(_M_nfa.size()),
+      81            0 :         _M_states(_M_nfa._M_start(), _M_nfa.size()),
+      82            0 :         _M_flags(__flags)
+      83              :       {
+      84              :         using namespace regex_constants;
+      85            0 :         if (__flags & match_prev_avail) // ignore not_bol and not_bow
+      86            0 :           _M_flags &= ~(match_not_bol | match_not_bow);
+      87            0 :       }
+      88              : 
+      89              :       // Set matched when string exactly matches the pattern.
+      90              :       bool
+      91            0 :       _M_match()
+      92              :       {
+      93            0 :         _M_current = _M_begin;
+      94            0 :         return _M_main(_Match_mode::_Exact);
+      95              :       }
+      96              : 
+      97              :       // Set matched when some prefix of the string matches the pattern.
+      98              :       bool
+      99            0 :       _M_search_from_first()
+     100              :       {
+     101            0 :         _M_current = _M_begin;
+     102            0 :         return _M_main(_Match_mode::_Prefix);
+     103              :       }
+     104              : 
+     105              :       bool
+     106              :       _M_search();
+     107              : 
+     108              :     private:
+     109              :       void
+     110              :       _M_rep_once_more(_Match_mode __match_mode, _StateIdT);
+     111              : 
+     112              :       void
+     113              :       _M_handle_repeat(_Match_mode, _StateIdT);
+     114              : 
+     115              :       void
+     116              :       _M_handle_subexpr_begin(_Match_mode, _StateIdT);
+     117              : 
+     118              :       void
+     119              :       _M_handle_subexpr_end(_Match_mode, _StateIdT);
+     120              : 
+     121              :       void
+     122              :       _M_handle_line_begin_assertion(_Match_mode, _StateIdT);
+     123              : 
+     124              :       void
+     125              :       _M_handle_line_end_assertion(_Match_mode, _StateIdT);
+     126              : 
+     127              :       void
+     128              :       _M_handle_word_boundary(_Match_mode, _StateIdT);
+     129              : 
+     130              :       void
+     131              :       _M_handle_subexpr_lookahead(_Match_mode, _StateIdT);
+     132              : 
+     133              :       void
+     134              :       _M_handle_match(_Match_mode, _StateIdT);
+     135              : 
+     136              :       void
+     137              :       _M_handle_backref(_Match_mode, _StateIdT);
+     138              : 
+     139              :       void
+     140              :       _M_handle_accept(_Match_mode, _StateIdT);
+     141              : 
+     142              :       void
+     143              :       _M_handle_alternative(_Match_mode, _StateIdT);
+     144              : 
+     145              :       void
+     146              :       _M_dfs(_Match_mode __match_mode, _StateIdT __start);
+     147              : 
+     148              :       bool
+     149            0 :       _M_main(_Match_mode __match_mode)
+     150            0 :       { return _M_main_dispatch(__match_mode, __search_mode{}); }
+     151              : 
+     152              :       bool
+     153              :       _M_main_dispatch(_Match_mode __match_mode, __dfs);
+     154              : 
+     155              :       bool
+     156              :       _M_main_dispatch(_Match_mode __match_mode, __bfs);
+     157              : 
+     158              :       bool
+     159            0 :       _M_is_word(_CharT __ch) const
+     160              :       {
+     161              :         static const _CharT __s[2] = { 'w' };
+     162            0 :         return _M_re._M_automaton->_M_traits.isctype
+     163            0 :           (__ch, _M_re._M_automaton->_M_traits.lookup_classname(__s, __s+1));
+     164              :       }
+     165              : 
+     166              :       bool
+     167            0 :       _M_at_begin() const
+     168              :       {
+     169            0 :         if (_M_current == _M_begin)
+     170              :           {
+     171              :             // match_not_bol means ^ does not match [_M_begin,_M_begin)
+     172            0 :             if (_M_flags & regex_constants::match_not_bol)
+     173            0 :               return false;
+     174              :             // match_prev_avail means _M_begin is not the start of the input.
+     175            0 :             if (_M_flags & regex_constants::match_prev_avail)
+     176              :               {
+     177              :                 // For ECMAScript multiline matches, check if the previous
+     178              :                 // character is a line terminator.
+     179            0 :                 if (_M_match_multiline())
+     180            0 :                   return _M_is_line_terminator(*std::prev(_M_current));
+     181              :                 else
+     182            0 :                   return false;
+     183              :               }
+     184              :             else // ^ matches at _M_begin
+     185            0 :               return true;
+     186              :           }
+     187            0 :         else if (_M_match_multiline())
+     188            0 :           return _M_is_line_terminator(*std::prev(_M_current));
+     189              :         else
+     190            0 :           return false;
+     191              :       }
+     192              : 
+     193              :       bool
+     194            0 :       _M_at_end() const
+     195              :       {
+     196            0 :         if (_M_current == _M_end)
+     197            0 :           return !(_M_flags & regex_constants::match_not_eol);
+     198            0 :         else if (_M_match_multiline())
+     199            0 :           return _M_is_line_terminator(*_M_current);
+     200              :         else
+     201            0 :           return false;
+     202              :       }
+     203              : 
+     204              :       bool
+     205              :       _M_word_boundary() const;
+     206              : 
+     207              :       bool
+     208              :       _M_lookahead(_StateIdT __next);
+     209              : 
+     210              :       bool
+     211            0 :       _M_is_line_terminator(_CharT __c) const
+     212              :       {
+     213            0 :         const auto& __traits = _M_re._M_automaton->_M_traits;
+     214            0 :         const auto& __ct = use_facet<ctype<_CharT>>(__traits.getloc());
+     215            0 :         const char __n{ __ct.narrow(__c, ' ') };
+     216            0 :         if (__n == '\n')
+     217            0 :           return true;
+     218            0 :         if (_M_re._M_automaton->_M_options() & regex_constants::ECMAScript)
+     219              :           {
+     220            0 :             if (__n == '\r')
+     221            0 :               return true;
+     222              :             // FIXME: U+2028 (line separator) and U+2029 (paragraph separator)
+     223              :           }
+     224            0 :         return false;
+     225              :       }
+     226              : 
+     227              :       bool
+     228            0 :       _M_match_multiline() const noexcept
+     229              :       {
+     230            0 :         constexpr auto __m
+     231              :           = regex_constants::ECMAScript | regex_constants::__multiline;
+     232            0 :         return (_M_re._M_automaton->_M_options() & __m) == __m;
+     233              :       }
+     234              : 
+     235              :        // Holds additional information used in BFS-mode.
+     236              :       template<typename _SearchMode, typename _ResultsVec>
+     237              :         struct _State_info;
+     238              : 
+     239              :       template<typename _ResultsVec>
+     240              :         struct _State_info<__bfs, _ResultsVec>
+     241              :         {
+     242              :           explicit
+     243            0 :           _State_info(_StateIdT __start, size_t __n)
+     244            0 :           : _M_visited_states(new bool[__n]()), _M_start(__start)
+     245            0 :           { }
+     246              : 
+     247            0 :           ~_State_info() { delete[] _M_visited_states; }
+     248              : 
+     249              :           _State_info(const _State_info&) = delete;
+     250              :           _State_info& operator=(const _State_info&) = delete;
+     251              : 
+     252            0 :           bool _M_visited(_StateIdT __i)
+     253              :           {
+     254            0 :             if (_M_visited_states[__i])
+     255            0 :               return true;
+     256            0 :             _M_visited_states[__i] = true;
+     257            0 :             return false;
+     258              :           }
+     259              : 
+     260            0 :           void _M_queue(_StateIdT __i, const _ResultsVec& __res)
+     261            0 :           { _M_match_queue.emplace_back(__i, __res); }
+     262              : 
+     263              :           // Dummy implementations for BFS mode.
+     264              :           _BiIter* _M_get_sol_pos() { return nullptr; }
+     265              : 
+     266              :           // Saves states that need to be considered for the next character.
+     267              :           _GLIBCXX_STD_C::vector<pair<_StateIdT, _ResultsVec>> _M_match_queue;
+     268              :           // Indicates which states are already visited.
+     269              :           bool*     _M_visited_states;
+     270              :           // To record current solution.
+     271              :           _StateIdT _M_start;
+     272              :         };
+     273              : 
+     274              :       template<typename _ResultsVec>
+     275              :         struct _State_info<__dfs, _ResultsVec>
+     276              :         {
+     277              :           explicit
+     278            0 :           _State_info(_StateIdT __start, size_t) : _M_start(__start)
+     279            0 :           { }
+     280              : 
+     281              :           // Dummy implementations for DFS mode.
+     282            0 :           bool _M_visited(_StateIdT) const { return false; }
+     283              :           void _M_queue(_StateIdT, const _ResultsVec&) { }
+     284              : 
+     285            0 :           _BiIter* _M_get_sol_pos() { return &_M_sol_pos; }
+     286              : 
+     287              :           // To record current solution.
+     288              :           _StateIdT _M_start;
+     289              :           _BiIter   _M_sol_pos;
+     290              :         };
+     291              : 
+     292              :     public:
+     293              :       _ResultsVec                                           _M_cur_results;
+     294              :       _BiIter                                               _M_current;
+     295              :       _BiIter                                               _M_begin;
+     296              :       const _BiIter                                         _M_end;
+     297              :       const _RegexT&                                        _M_re;
+     298              :       const _NFAT&                                          _M_nfa;
+     299              :       _ResultsVec&                                          _M_results;
+     300              :       _GLIBCXX_STD_C::vector<pair<_BiIter, int>>            _M_rep_count;
+     301              :       _State_info<__search_mode, _ResultsVec>                 _M_states;
+     302              :       _FlagT                                                _M_flags;
+     303              :       // Do we have a solution so far?
+     304              :       bool                                                  _M_has_sol;
+     305              :     };
+     306              : 
+     307              :  ///@} regex-detail
+     308              : } // namespace __detail
+     309              : _GLIBCXX_END_NAMESPACE_VERSION
+     310              : } // namespace std
+     311              : 
+     312              : #include <bits/regex_executor.tcc>
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_executor.tcc.func-c.html b/html/usr/include/c++/13/bits/regex_executor.tcc.func-c.html new file mode 100644 index 0000000..f9ba9c6 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_executor.tcc.func-c.html @@ -0,0 +1,446 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_executor.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_executor.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %2370
Test Date:2024-04-30 13:17:26Functions:0.0 %370
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE16_M_word_boundaryEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE16_M_word_boundaryEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE16_M_word_boundaryEv0
_ZNSt8__detail16_Backref_matcherIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENS5_12regex_traitsIcEEE8_M_applyESB_SB_SB_SB_0
_ZNSt8__detail16_Backref_matcherIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENS5_12regex_traitsIcEEEC2EbRKSD_0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE12_M_lookaheadEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE12_M_lookaheadEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE12_M_lookaheadEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE15_M_handle_matchENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE15_M_handle_matchENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE15_M_handle_matchENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE16_M_handle_acceptENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE16_M_handle_acceptENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE16_M_handle_acceptENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE16_M_handle_repeatENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE16_M_handle_repeatENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE16_M_handle_repeatENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE16_M_main_dispatchENSH_11_Match_modeESt17integral_constantIbLb0EE0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE16_M_rep_once_moreENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE16_M_rep_once_moreENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE16_M_rep_once_moreENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE17_M_handle_backrefENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE17_M_handle_backrefENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE17_M_handle_backrefENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE21_M_handle_alternativeENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE21_M_handle_alternativeENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE21_M_handle_alternativeENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE21_M_handle_subexpr_endENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE21_M_handle_subexpr_endENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE21_M_handle_subexpr_endENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE23_M_handle_subexpr_beginENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE23_M_handle_subexpr_beginENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE23_M_handle_subexpr_beginENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE23_M_handle_word_boundaryENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE23_M_handle_word_boundaryENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE23_M_handle_word_boundaryENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE27_M_handle_subexpr_lookaheadENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE27_M_handle_subexpr_lookaheadENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE27_M_handle_subexpr_lookaheadENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE28_M_handle_line_end_assertionENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE28_M_handle_line_end_assertionENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE28_M_handle_line_end_assertionENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE30_M_handle_line_begin_assertionENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE30_M_handle_line_begin_assertionENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE30_M_handle_line_begin_assertionENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE6_M_dfsENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE6_M_dfsENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE6_M_dfsENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE9_M_searchEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE9_M_searchEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE9_M_searchEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE16_M_main_dispatchENSH_11_Match_modeESt17integral_constantIbLb1EE0
_ZZNSt8__detail16_Backref_matcherIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENS5_12regex_traitsIcEEE8_M_applyESB_SB_SB_SB_ENKUlccE_clEcc0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_executor.tcc.func.html b/html/usr/include/c++/13/bits/regex_executor.tcc.func.html new file mode 100644 index 0000000..a48a32d --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_executor.tcc.func.html @@ -0,0 +1,446 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_executor.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_executor.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %2370
Test Date:2024-04-30 13:17:26Functions:0.0 %370
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE16_M_word_boundaryEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE16_M_word_boundaryEv0
_ZNKSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE16_M_word_boundaryEv0
_ZNSt8__detail16_Backref_matcherIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENS5_12regex_traitsIcEEE8_M_applyESB_SB_SB_SB_0
_ZNSt8__detail16_Backref_matcherIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENS5_12regex_traitsIcEEEC2EbRKSD_0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE12_M_lookaheadEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE12_M_lookaheadEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE12_M_lookaheadEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE15_M_handle_matchENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE15_M_handle_matchENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE15_M_handle_matchENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE16_M_handle_acceptENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE16_M_handle_acceptENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE16_M_handle_acceptENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE16_M_handle_repeatENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE16_M_handle_repeatENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE16_M_handle_repeatENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE16_M_main_dispatchENSH_11_Match_modeESt17integral_constantIbLb0EE0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE16_M_rep_once_moreENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE16_M_rep_once_moreENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE16_M_rep_once_moreENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE17_M_handle_backrefENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE17_M_handle_backrefENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE17_M_handle_backrefENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE21_M_handle_alternativeENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE21_M_handle_alternativeENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE21_M_handle_alternativeENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE21_M_handle_subexpr_endENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE21_M_handle_subexpr_endENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE21_M_handle_subexpr_endENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE23_M_handle_subexpr_beginENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE23_M_handle_subexpr_beginENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE23_M_handle_subexpr_beginENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE23_M_handle_word_boundaryENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE23_M_handle_word_boundaryENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE23_M_handle_word_boundaryENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE27_M_handle_subexpr_lookaheadENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE27_M_handle_subexpr_lookaheadENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE27_M_handle_subexpr_lookaheadENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE28_M_handle_line_end_assertionENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE28_M_handle_line_end_assertionENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE28_M_handle_line_end_assertionENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE30_M_handle_line_begin_assertionENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE30_M_handle_line_begin_assertionENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE30_M_handle_line_begin_assertionENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE6_M_dfsENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE6_M_dfsENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE6_M_dfsENSH_11_Match_modeEl0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE9_M_searchEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb0EE9_M_searchEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE9_M_searchEv0
_ZNSt8__detail9_ExecutorIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaINS5_9sub_matchISB_EEENS5_12regex_traitsIcEELb1EE16_M_main_dispatchENSH_11_Match_modeESt17integral_constantIbLb1EE0
_ZZNSt8__detail16_Backref_matcherIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENS5_12regex_traitsIcEEE8_M_applyESB_SB_SB_SB_ENKUlccE_clEcc0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_executor.tcc.gcov.html b/html/usr/include/c++/13/bits/regex_executor.tcc.gcov.html new file mode 100644 index 0000000..62c2d8b --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_executor.tcc.gcov.html @@ -0,0 +1,645 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_executor.tcc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_executor.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %2370
Test Date:2024-04-30 13:17:26Functions:0.0 %370
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // class template regex -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2013-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /**
+      26              :  *  @file bits/regex_executor.tcc
+      27              :  *  This is an internal header file, included by other library headers.
+      28              :  *  Do not attempt to use it directly. @headername{regex}
+      29              :  */
+      30              : 
+      31              : namespace std _GLIBCXX_VISIBILITY(default)
+      32              : {
+      33              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      34              : 
+      35              : namespace __detail
+      36              : {
+      37              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+      38              :            bool __dfs_mode>
+      39            0 :     bool _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
+      40              :     _M_search()
+      41              :     {
+      42            0 :       if (_M_search_from_first())
+      43            0 :         return true;
+      44            0 :       if (_M_flags & regex_constants::match_continuous)
+      45            0 :         return false;
+      46            0 :       _M_flags |= regex_constants::match_prev_avail;
+      47            0 :       while (_M_begin != _M_end)
+      48              :         {
+      49            0 :           ++_M_begin;
+      50            0 :           if (_M_search_from_first())
+      51            0 :             return true;
+      52              :         }
+      53            0 :       return false;
+      54              :     }
+      55              : 
+      56              :   // The _M_main function operates in different modes, DFS mode or BFS mode,
+      57              :   // indicated by template parameter __dfs_mode, and dispatches to one of the
+      58              :   // _M_main_dispatch overloads.
+      59              :   //
+      60              :   // ------------------------------------------------------------
+      61              :   //
+      62              :   // DFS mode:
+      63              :   //
+      64              :   // It applies a Depth-First-Search (aka backtracking) on given NFA and input
+      65              :   // string.
+      66              :   // At the very beginning the executor stands in the start state, then it
+      67              :   // tries every possible state transition in current state recursively. Some
+      68              :   // state transitions consume input string, say, a single-char-matcher or a
+      69              :   // back-reference matcher; some don't, like assertion or other anchor nodes.
+      70              :   // When the input is exhausted and/or the current state is an accepting
+      71              :   // state, the whole executor returns true.
+      72              :   //
+      73              :   // TODO: This approach is exponentially slow for certain input.
+      74              :   //       Try to compile the NFA to a DFA.
+      75              :   //
+      76              :   // Time complexity: \Omega(match_length), O(2^(_M_nfa.size()))
+      77              :   // Space complexity: \theta(match_results.size() + match_length)
+      78              :   //
+      79              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+      80              :            bool __dfs_mode>
+      81            0 :     bool _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
+      82              :     _M_main_dispatch(_Match_mode __match_mode, __dfs)
+      83              :     {
+      84            0 :       _M_has_sol = false;
+      85            0 :       *_M_states._M_get_sol_pos() = _BiIter();
+      86            0 :       _M_cur_results = _M_results;
+      87            0 :       _M_dfs(__match_mode, _M_states._M_start);
+      88            0 :       return _M_has_sol;
+      89              :     }
+      90              : 
+      91              :   // ------------------------------------------------------------
+      92              :   //
+      93              :   // BFS mode:
+      94              :   //
+      95              :   // Russ Cox's article (http://swtch.com/~rsc/regexp/regexp1.html)
+      96              :   // explained this algorithm clearly.
+      97              :   //
+      98              :   // It first computes epsilon closure (states that can be achieved without
+      99              :   // consuming characters) for every state that's still matching,
+     100              :   // using the same DFS algorithm, but doesn't re-enter states (using
+     101              :   // _M_states._M_visited to check), nor follow _S_opcode_match.
+     102              :   //
+     103              :   // Then apply DFS using every _S_opcode_match (in _M_states._M_match_queue)
+     104              :   // as the start state.
+     105              :   //
+     106              :   // It significantly reduces potential duplicate states, so has a better
+     107              :   // upper bound; but it requires more overhead.
+     108              :   //
+     109              :   // Time complexity: \Omega(match_length * match_results.size())
+     110              :   //                  O(match_length * _M_nfa.size() * match_results.size())
+     111              :   // Space complexity: \Omega(_M_nfa.size() + match_results.size())
+     112              :   //                   O(_M_nfa.size() * match_results.size())
+     113              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+     114              :            bool __dfs_mode>
+     115            0 :     bool _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
+     116              :     _M_main_dispatch(_Match_mode __match_mode, __bfs)
+     117              :     {
+     118            0 :       _M_states._M_queue(_M_states._M_start, _M_results);
+     119            0 :       bool __ret = false;
+     120            0 :       while (1)
+     121              :         {
+     122            0 :           _M_has_sol = false;
+     123            0 :           if (_M_states._M_match_queue.empty())
+     124            0 :             break;
+     125            0 :           std::fill_n(_M_states._M_visited_states, _M_nfa.size(), false);
+     126            0 :           auto __old_queue = std::move(_M_states._M_match_queue);
+     127            0 :           auto __alloc = _M_cur_results.get_allocator();
+     128            0 :           for (auto& __task : __old_queue)
+     129              :             {
+     130            0 :               _M_cur_results = _ResultsVec(std::move(__task.second), __alloc);
+     131            0 :               _M_dfs(__match_mode, __task.first);
+     132              :             }
+     133            0 :           if (__match_mode == _Match_mode::_Prefix)
+     134            0 :             __ret |= _M_has_sol;
+     135            0 :           if (_M_current == _M_end)
+     136            0 :             break;
+     137            0 :           ++_M_current;
+     138              :         }
+     139            0 :       if (__match_mode == _Match_mode::_Exact)
+     140            0 :         __ret = _M_has_sol;
+     141            0 :       _M_states._M_match_queue.clear();
+     142            0 :       return __ret;
+     143              :     }
+     144              : 
+     145              :   // Return whether now match the given sub-NFA.
+     146              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+     147              :            bool __dfs_mode>
+     148            0 :     bool _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
+     149              :     _M_lookahead(_StateIdT __next)
+     150              :     {
+     151              :       // Backreferences may refer to captured content.
+     152              :       // We may want to make this faster by not copying,
+     153              :       // but let's not be clever prematurely.
+     154            0 :       _ResultsVec __what(_M_cur_results);
+     155            0 :       _Executor __sub(_M_current, _M_end, __what, _M_re, _M_flags);
+     156            0 :       __sub._M_states._M_start = __next;
+     157            0 :       if (__sub._M_search_from_first())
+     158              :         {
+     159            0 :           for (size_t __i = 0; __i < __what.size(); __i++)
+     160            0 :             if (__what[__i].matched)
+     161            0 :               _M_cur_results[__i] = __what[__i];
+     162            0 :           return true;
+     163              :         }
+     164            0 :       return false;
+     165            0 :     }
+     166              : 
+     167              :   // __rep_count records how many times (__rep_count.second)
+     168              :   // this node is visited under certain input iterator
+     169              :   // (__rep_count.first). This prevent the executor from entering
+     170              :   // infinite loop by refusing to continue when it's already been
+     171              :   // visited more than twice. It's `twice` instead of `once` because
+     172              :   // we need to spare one more time for potential group capture.
+     173              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+     174              :            bool __dfs_mode>
+     175            0 :     void _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
+     176              :     _M_rep_once_more(_Match_mode __match_mode, _StateIdT __i)
+     177              :     {
+     178            0 :       const auto& __state = _M_nfa[__i];
+     179            0 :       auto& __rep_count = _M_rep_count[__i];
+     180            0 :       if (__rep_count.second == 0 || __rep_count.first != _M_current)
+     181              :         {
+     182            0 :           auto __back = __rep_count;
+     183            0 :           __rep_count.first = _M_current;
+     184            0 :           __rep_count.second = 1;
+     185            0 :           _M_dfs(__match_mode, __state._M_alt);
+     186            0 :           __rep_count = __back;
+     187              :         }
+     188              :       else
+     189              :         {
+     190            0 :           if (__rep_count.second < 2)
+     191              :             {
+     192            0 :               __rep_count.second++;
+     193            0 :               _M_dfs(__match_mode, __state._M_alt);
+     194            0 :               __rep_count.second--;
+     195              :             }
+     196              :         }
+     197            0 :     }
+     198              : 
+     199              :   // _M_alt branch is "match once more", while _M_next is "get me out
+     200              :   // of this quantifier". Executing _M_next first or _M_alt first don't
+     201              :   // mean the same thing, and we need to choose the correct order under
+     202              :   // given greedy mode.
+     203              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+     204              :            bool __dfs_mode>
+     205            0 :     void _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
+     206              :     _M_handle_repeat(_Match_mode __match_mode, _StateIdT __i)
+     207              :     {
+     208            0 :       const auto& __state = _M_nfa[__i];
+     209              : 
+     210              :       // Greedy.
+     211            0 :       if (!__state._M_neg)
+     212              :         {
+     213            0 :           _M_rep_once_more(__match_mode, __i);
+     214              :           // If it's DFS executor and already accepted, we're done.
+     215            0 :           if (!__dfs_mode || !_M_has_sol)
+     216            0 :             _M_dfs(__match_mode, __state._M_next);
+     217              :         }
+     218              :       else // Non-greedy mode
+     219              :         {
+     220              :           if (__dfs_mode)
+     221              :             {
+     222              :               // vice-versa.
+     223            0 :               _M_dfs(__match_mode, __state._M_next);
+     224            0 :               if (!_M_has_sol)
+     225            0 :                 _M_rep_once_more(__match_mode, __i);
+     226              :             }
+     227              :           else
+     228              :             {
+     229              :               // DON'T attempt anything, because there's already another
+     230              :               // state with higher priority accepted. This state cannot
+     231              :               // be better by attempting its next node.
+     232            0 :               if (!_M_has_sol)
+     233              :                 {
+     234            0 :                   _M_dfs(__match_mode, __state._M_next);
+     235              :                   // DON'T attempt anything if it's already accepted. An
+     236              :                   // accepted state *must* be better than a solution that
+     237              :                   // matches a non-greedy quantifier one more time.
+     238            0 :                   if (!_M_has_sol)
+     239            0 :                     _M_rep_once_more(__match_mode, __i);
+     240              :                 }
+     241              :             }
+     242              :         }
+     243            0 :     }
+     244              : 
+     245              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+     246              :            bool __dfs_mode>
+     247            0 :     void _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
+     248              :     _M_handle_subexpr_begin(_Match_mode __match_mode, _StateIdT __i)
+     249              :     {
+     250            0 :       const auto& __state = _M_nfa[__i];
+     251              : 
+     252            0 :       auto& __res = _M_cur_results[__state._M_subexpr];
+     253            0 :       auto __back = __res.first;
+     254            0 :       __res.first = _M_current;
+     255            0 :       _M_dfs(__match_mode, __state._M_next);
+     256            0 :       __res.first = __back;
+     257            0 :     }
+     258              : 
+     259              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+     260              :            bool __dfs_mode>
+     261            0 :     void _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
+     262              :     _M_handle_subexpr_end(_Match_mode __match_mode, _StateIdT __i)
+     263              :     {
+     264            0 :       const auto& __state = _M_nfa[__i];
+     265              : 
+     266            0 :       auto& __res = _M_cur_results[__state._M_subexpr];
+     267            0 :       auto __back = __res;
+     268            0 :       __res.second = _M_current;
+     269            0 :       __res.matched = true;
+     270            0 :       _M_dfs(__match_mode, __state._M_next);
+     271            0 :       __res = __back;
+     272            0 :     }
+     273              : 
+     274              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+     275              :            bool __dfs_mode>
+     276            0 :     inline void _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
+     277              :     _M_handle_line_begin_assertion(_Match_mode __match_mode, _StateIdT __i)
+     278              :     {
+     279            0 :       const auto& __state = _M_nfa[__i];
+     280            0 :       if (_M_at_begin())
+     281            0 :         _M_dfs(__match_mode, __state._M_next);
+     282            0 :     }
+     283              : 
+     284              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+     285              :            bool __dfs_mode>
+     286            0 :     inline void _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
+     287              :     _M_handle_line_end_assertion(_Match_mode __match_mode, _StateIdT __i)
+     288              :     {
+     289            0 :       const auto& __state = _M_nfa[__i];
+     290            0 :       if (_M_at_end())
+     291            0 :         _M_dfs(__match_mode, __state._M_next);
+     292            0 :     }
+     293              : 
+     294              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+     295              :            bool __dfs_mode>
+     296            0 :     inline void _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
+     297              :     _M_handle_word_boundary(_Match_mode __match_mode, _StateIdT __i)
+     298              :     {
+     299            0 :       const auto& __state = _M_nfa[__i];
+     300            0 :       if (_M_word_boundary() == !__state._M_neg)
+     301            0 :         _M_dfs(__match_mode, __state._M_next);
+     302            0 :     }
+     303              : 
+     304              :   // Here __state._M_alt offers a single start node for a sub-NFA.
+     305              :   // We recursively invoke our algorithm to match the sub-NFA.
+     306              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+     307              :            bool __dfs_mode>
+     308            0 :     void _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
+     309              :     _M_handle_subexpr_lookahead(_Match_mode __match_mode, _StateIdT __i)
+     310              :     {
+     311            0 :       const auto& __state = _M_nfa[__i];
+     312            0 :       if (_M_lookahead(__state._M_alt) == !__state._M_neg)
+     313            0 :         _M_dfs(__match_mode, __state._M_next);
+     314            0 :     }
+     315              : 
+     316              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+     317              :            bool __dfs_mode>
+     318            0 :     void _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
+     319              :     _M_handle_match(_Match_mode __match_mode, _StateIdT __i)
+     320              :     {
+     321            0 :       const auto& __state = _M_nfa[__i];
+     322              : 
+     323            0 :       if (_M_current == _M_end)
+     324            0 :         return;
+     325              :       if (__dfs_mode)
+     326              :         {
+     327            0 :           if (__state._M_matches(*_M_current))
+     328              :             {
+     329            0 :               ++_M_current;
+     330            0 :               _M_dfs(__match_mode, __state._M_next);
+     331            0 :               --_M_current;
+     332              :             }
+     333              :         }
+     334              :       else
+     335            0 :         if (__state._M_matches(*_M_current))
+     336            0 :           _M_states._M_queue(__state._M_next, _M_cur_results);
+     337              :     }
+     338              : 
+     339              :   template<typename _BiIter, typename _TraitsT>
+     340              :     struct _Backref_matcher
+     341              :     {
+     342              :       _Backref_matcher(bool /* __icase */, const _TraitsT& __traits)
+     343              :       : _M_traits(__traits) { }
+     344              : 
+     345              :       bool
+     346              :       _M_apply(_BiIter __expected_begin,
+     347              :                _BiIter __expected_end, _BiIter __actual_begin,
+     348              :                _BiIter __actual_end)
+     349              :       {
+     350              :         return _M_traits.transform(__expected_begin, __expected_end)
+     351              :             == _M_traits.transform(__actual_begin, __actual_end);
+     352              :       }
+     353              : 
+     354              :       const _TraitsT& _M_traits;
+     355              :     };
+     356              : 
+     357              :   template<typename _BiIter, typename _CharT>
+     358              :     struct _Backref_matcher<_BiIter, std::regex_traits<_CharT>>
+     359              :     {
+     360              :       using _TraitsT = std::regex_traits<_CharT>;
+     361            0 :       _Backref_matcher(bool __icase, const _TraitsT& __traits)
+     362            0 :       : _M_icase(__icase), _M_traits(__traits) { }
+     363              : 
+     364              :       bool
+     365            0 :       _M_apply(_BiIter __expected_begin,
+     366              :                _BiIter __expected_end, _BiIter __actual_begin,
+     367              :                _BiIter __actual_end)
+     368              :       {
+     369            0 :         if (!_M_icase)
+     370            0 :           return _GLIBCXX_STD_A::__equal4(__expected_begin, __expected_end,
+     371            0 :                                __actual_begin, __actual_end);
+     372              :         typedef std::ctype<_CharT> __ctype_type;
+     373            0 :         const auto& __fctyp = use_facet<__ctype_type>(_M_traits.getloc());
+     374            0 :         return _GLIBCXX_STD_A::__equal4(__expected_begin, __expected_end,
+     375              :                              __actual_begin, __actual_end,
+     376            0 :                              [this, &__fctyp](_CharT __lhs, _CharT __rhs)
+     377              :                              {
+     378            0 :                                return __fctyp.tolower(__lhs)
+     379            0 :                                  == __fctyp.tolower(__rhs);
+     380            0 :                              });
+     381              :       }
+     382              : 
+     383              :       bool _M_icase;
+     384              :       const _TraitsT& _M_traits;
+     385              :     };
+     386              : 
+     387              :   // First fetch the matched result from _M_cur_results as __submatch;
+     388              :   // then compare it with
+     389              :   // (_M_current, _M_current + (__submatch.second - __submatch.first)).
+     390              :   // If matched, keep going; else just return and try another state.
+     391              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+     392              :            bool __dfs_mode>
+     393            0 :     void _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
+     394              :     _M_handle_backref(_Match_mode __match_mode, _StateIdT __i)
+     395              :     {
+     396            0 :       __glibcxx_assert(__dfs_mode);
+     397              : 
+     398            0 :       const auto& __state = _M_nfa[__i];
+     399            0 :       auto& __submatch = _M_cur_results[__state._M_backref_index];
+     400            0 :       if (!__submatch.matched)
+     401            0 :         return;
+     402            0 :       auto __last = _M_current;
+     403            0 :       for (auto __tmp = __submatch.first;
+     404            0 :            __last != _M_end && __tmp != __submatch.second;
+     405            0 :            ++__tmp)
+     406            0 :         ++__last;
+     407            0 :       if (_Backref_matcher<_BiIter, _TraitsT>(
+     408            0 :               _M_re.flags() & regex_constants::icase,
+     409            0 :               _M_re._M_automaton->_M_traits)._M_apply(
+     410              :                   __submatch.first, __submatch.second, _M_current, __last))
+     411              :         {
+     412            0 :           if (__last != _M_current)
+     413              :             {
+     414            0 :               auto __backup = _M_current;
+     415            0 :               _M_current = __last;
+     416            0 :               _M_dfs(__match_mode, __state._M_next);
+     417            0 :               _M_current = __backup;
+     418              :             }
+     419              :           else
+     420            0 :             _M_dfs(__match_mode, __state._M_next);
+     421              :         }
+     422              :     }
+     423              : 
+     424              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+     425              :            bool __dfs_mode>
+     426            0 :     void _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
+     427              :     _M_handle_accept(_Match_mode __match_mode, _StateIdT)
+     428              :     {
+     429              :       if _GLIBCXX17_CONSTEXPR (__dfs_mode)
+     430              :         {
+     431            0 :           __glibcxx_assert(!_M_has_sol);
+     432            0 :           if (__match_mode == _Match_mode::_Exact)
+     433            0 :             _M_has_sol = _M_current == _M_end;
+     434              :           else
+     435            0 :             _M_has_sol = true;
+     436            0 :           if (_M_current == _M_begin
+     437            0 :               && (_M_flags & regex_constants::match_not_null))
+     438            0 :             _M_has_sol = false;
+     439            0 :           if (_M_has_sol)
+     440              :             {
+     441            0 :               if (_M_nfa._M_flags & regex_constants::ECMAScript)
+     442            0 :                 _M_results = _M_cur_results;
+     443              :               else // POSIX
+     444              :                 {
+     445            0 :                   __glibcxx_assert(_M_states._M_get_sol_pos());
+     446              :                   // Here's POSIX's logic: match the longest one. However
+     447              :                   // we never know which one (lhs or rhs of "|") is longer
+     448              :                   // unless we try both of them and compare the results.
+     449              :                   // The member variable _M_sol_pos records the end
+     450              :                   // position of the last successful match. It's better
+     451              :                   // to be larger, because POSIX regex is always greedy.
+     452              :                   // TODO: This could be slow.
+     453            0 :                   if (*_M_states._M_get_sol_pos() == _BiIter()
+     454            0 :                       || std::distance(_M_begin,
+     455            0 :                                        *_M_states._M_get_sol_pos())
+     456            0 :                          < std::distance(_M_begin, _M_current))
+     457              :                     {
+     458            0 :                       *_M_states._M_get_sol_pos() = _M_current;
+     459            0 :                       _M_results = _M_cur_results;
+     460              :                     }
+     461              :                 }
+     462              :             }
+     463              :         }
+     464              :       else
+     465              :         {
+     466            0 :           if (_M_current == _M_begin
+     467            0 :               && (_M_flags & regex_constants::match_not_null))
+     468            0 :             return;
+     469            0 :           if (__match_mode == _Match_mode::_Prefix || _M_current == _M_end)
+     470            0 :             if (!_M_has_sol)
+     471              :               {
+     472            0 :                 _M_has_sol = true;
+     473            0 :                 _M_results = _M_cur_results;
+     474              :               }
+     475              :         }
+     476            0 :     }
+     477              : 
+     478              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+     479              :            bool __dfs_mode>
+     480            0 :     void _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
+     481              :     _M_handle_alternative(_Match_mode __match_mode, _StateIdT __i)
+     482              :     {
+     483            0 :       const auto& __state = _M_nfa[__i];
+     484              : 
+     485            0 :       if (_M_nfa._M_flags & regex_constants::ECMAScript)
+     486              :         {
+     487              :           // TODO: Fix BFS support. It is wrong.
+     488            0 :           _M_dfs(__match_mode, __state._M_alt);
+     489              :           // Pick lhs if it matches. Only try rhs if it doesn't.
+     490            0 :           if (!_M_has_sol)
+     491            0 :             _M_dfs(__match_mode, __state._M_next);
+     492              :         }
+     493              :       else
+     494              :         {
+     495              :           // Try both and compare the result.
+     496              :           // See "case _S_opcode_accept:" handling above.
+     497            0 :           _M_dfs(__match_mode, __state._M_alt);
+     498            0 :           auto __has_sol = _M_has_sol;
+     499            0 :           _M_has_sol = false;
+     500            0 :           _M_dfs(__match_mode, __state._M_next);
+     501            0 :           _M_has_sol |= __has_sol;
+     502              :         }
+     503            0 :     }
+     504              : 
+     505              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+     506              :            bool __dfs_mode>
+     507            0 :     void _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
+     508              :     _M_dfs(_Match_mode __match_mode, _StateIdT __i)
+     509              :     {
+     510            0 :       if (_M_states._M_visited(__i))
+     511            0 :         return;
+     512              : 
+     513            0 :       switch (_M_nfa[__i]._M_opcode())
+     514              :         {
+     515            0 :         case _S_opcode_repeat:
+     516            0 :           _M_handle_repeat(__match_mode, __i); break;
+     517            0 :         case _S_opcode_subexpr_begin:
+     518            0 :           _M_handle_subexpr_begin(__match_mode, __i); break;
+     519            0 :         case _S_opcode_subexpr_end:
+     520            0 :           _M_handle_subexpr_end(__match_mode, __i); break;
+     521            0 :         case _S_opcode_line_begin_assertion:
+     522            0 :           _M_handle_line_begin_assertion(__match_mode, __i); break;
+     523            0 :         case _S_opcode_line_end_assertion:
+     524            0 :           _M_handle_line_end_assertion(__match_mode, __i); break;
+     525            0 :         case _S_opcode_word_boundary:
+     526            0 :           _M_handle_word_boundary(__match_mode, __i); break;
+     527            0 :         case _S_opcode_subexpr_lookahead:
+     528            0 :           _M_handle_subexpr_lookahead(__match_mode, __i); break;
+     529            0 :         case _S_opcode_match:
+     530            0 :           _M_handle_match(__match_mode, __i); break;
+     531            0 :         case _S_opcode_backref:
+     532            0 :           _M_handle_backref(__match_mode, __i); break;
+     533            0 :         case _S_opcode_accept:
+     534            0 :           _M_handle_accept(__match_mode, __i); break;
+     535            0 :         case _S_opcode_alternative:
+     536            0 :           _M_handle_alternative(__match_mode, __i); break;
+     537            0 :         default:
+     538            0 :           __glibcxx_assert(false);
+     539              :         }
+     540              :     }
+     541              : 
+     542              :   // Return whether now is at some word boundary.
+     543              :   template<typename _BiIter, typename _Alloc, typename _TraitsT,
+     544              :            bool __dfs_mode>
+     545            0 :     bool _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
+     546              :     _M_word_boundary() const
+     547              :     {
+     548            0 :       if (_M_current == _M_begin && (_M_flags & regex_constants::match_not_bow))
+     549            0 :         return false;
+     550            0 :       if (_M_current == _M_end && (_M_flags & regex_constants::match_not_eow))
+     551            0 :         return false;
+     552              : 
+     553            0 :       bool __left_is_word = false;
+     554            0 :       if (_M_current != _M_begin
+     555            0 :           || (_M_flags & regex_constants::match_prev_avail))
+     556              :         {
+     557            0 :           auto __prev = _M_current;
+     558            0 :           if (_M_is_word(*std::prev(__prev)))
+     559            0 :             __left_is_word = true;
+     560              :         }
+     561            0 :       bool __right_is_word =
+     562            0 :         _M_current != _M_end && _M_is_word(*_M_current);
+     563              : 
+     564            0 :       return __left_is_word != __right_is_word;
+     565              :     }
+     566              : } // namespace __detail
+     567              : 
+     568              : _GLIBCXX_END_NAMESPACE_VERSION
+     569              : } // namespace
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_scanner.h.func-c.html b/html/usr/include/c++/13/bits/regex_scanner.h.func-c.html new file mode 100644 index 0000000..1141495 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_scanner.h.func-c.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_scanner.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_scanner.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %350
Test Date:2024-04-30 13:17:26Functions:0.0 %70
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt8__detail12_ScannerBase10_M_is_ecmaEv0
_ZNKSt8__detail12_ScannerBase11_M_is_basicEv0
_ZNKSt8__detail12_ScannerBase9_M_is_awkEv0
_ZNKSt8__detail8_ScannerIcE12_M_get_tokenEv0
_ZNKSt8__detail8_ScannerIcE12_M_get_valueB5cxx11Ev0
_ZNSt8__detail12_ScannerBase14_M_find_escapeEc0
_ZNSt8__detail12_ScannerBaseC2ENSt15regex_constants18syntax_option_typeE0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_scanner.h.func.html b/html/usr/include/c++/13/bits/regex_scanner.h.func.html new file mode 100644 index 0000000..a70f011 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_scanner.h.func.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_scanner.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_scanner.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %350
Test Date:2024-04-30 13:17:26Functions:0.0 %70
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt8__detail12_ScannerBase10_M_is_ecmaEv0
_ZNKSt8__detail12_ScannerBase11_M_is_basicEv0
_ZNKSt8__detail12_ScannerBase9_M_is_awkEv0
_ZNKSt8__detail8_ScannerIcE12_M_get_tokenEv0
_ZNKSt8__detail8_ScannerIcE12_M_get_valueB5cxx11Ev0
_ZNSt8__detail12_ScannerBase14_M_find_escapeEc0
_ZNSt8__detail12_ScannerBaseC2ENSt15regex_constants18syntax_option_typeE0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_scanner.h.gcov.html b/html/usr/include/c++/13/bits/regex_scanner.h.gcov.html new file mode 100644 index 0000000..c625e8a --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_scanner.h.gcov.html @@ -0,0 +1,347 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_scanner.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_scanner.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %350
Test Date:2024-04-30 13:17:26Functions:0.0 %70
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // class template regex -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2013-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /**
+      26              :  *  @file bits/regex_scanner.h
+      27              :  *  This is an internal header file, included by other library headers.
+      28              :  *  Do not attempt to use it directly. @headername{regex}
+      29              :  */
+      30              : 
+      31              : namespace std _GLIBCXX_VISIBILITY(default)
+      32              : {
+      33              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      34              : 
+      35              : namespace __detail
+      36              : {
+      37              :   /**
+      38              :    * @addtogroup regex-detail
+      39              :    * @{
+      40              :    */
+      41              : 
+      42              :   struct _ScannerBase
+      43              :   {
+      44              :   public:
+      45              :     /// Token types returned from the scanner.
+      46              :     enum _TokenT : unsigned
+      47              :     {
+      48              :       _S_token_anychar,
+      49              :       _S_token_ord_char,
+      50              :       _S_token_oct_num,
+      51              :       _S_token_hex_num,
+      52              :       _S_token_backref,
+      53              :       _S_token_subexpr_begin,
+      54              :       _S_token_subexpr_no_group_begin,
+      55              :       _S_token_subexpr_lookahead_begin, // neg if _M_value[0] == 'n'
+      56              :       _S_token_subexpr_end,
+      57              :       _S_token_bracket_begin,
+      58              :       _S_token_bracket_neg_begin,
+      59              :       _S_token_bracket_end,
+      60              :       _S_token_interval_begin,
+      61              :       _S_token_interval_end,
+      62              :       _S_token_quoted_class,
+      63              :       _S_token_char_class_name,
+      64              :       _S_token_collsymbol,
+      65              :       _S_token_equiv_class_name,
+      66              :       _S_token_opt,
+      67              :       _S_token_or,
+      68              :       _S_token_closure0,
+      69              :       _S_token_closure1,
+      70              :       _S_token_line_begin,
+      71              :       _S_token_line_end,
+      72              :       _S_token_word_bound, // neg if _M_value[0] == 'n'
+      73              :       _S_token_comma,
+      74              :       _S_token_dup_count,
+      75              :       _S_token_eof,
+      76              :       _S_token_bracket_dash,
+      77              :       _S_token_unknown = -1u
+      78              :     };
+      79              : 
+      80              :   protected:
+      81              :     typedef regex_constants::syntax_option_type _FlagT;
+      82              : 
+      83              :     enum _StateT
+      84              :     {
+      85              :       _S_state_normal,
+      86              :       _S_state_in_brace,
+      87              :       _S_state_in_bracket,
+      88              :     };
+      89              : 
+      90              :   protected:
+      91            0 :     _ScannerBase(_FlagT __flags)
+      92            0 :     : _M_state(_S_state_normal),
+      93            0 :     _M_flags(__flags),
+      94            0 :     _M_escape_tbl(_M_is_ecma()
+      95            0 :                   ? _M_ecma_escape_tbl
+      96              :                   : _M_awk_escape_tbl),
+      97            0 :     _M_spec_char(_M_is_ecma()
+      98            0 :                  ? _M_ecma_spec_char
+      99            0 :                  : _M_flags & regex_constants::basic
+     100            0 :                  ? _M_basic_spec_char
+     101            0 :                  : _M_flags & regex_constants::extended
+     102            0 :                  ? _M_extended_spec_char
+     103            0 :                  : _M_flags & regex_constants::grep
+     104            0 :                  ?  ".[\\*^$\n"
+     105            0 :                  : _M_flags & regex_constants::egrep
+     106            0 :                  ? ".[\\()*+?{|^$\n"
+     107            0 :                  : _M_flags & regex_constants::awk
+     108            0 :                  ? _M_extended_spec_char
+     109              :                  : nullptr),
+     110            0 :     _M_at_bracket_start(false)
+     111            0 :     { __glibcxx_assert(_M_spec_char); }
+     112              : 
+     113              :   protected:
+     114              :     const char*
+     115            0 :     _M_find_escape(char __c)
+     116              :     {
+     117            0 :       auto __it = _M_escape_tbl;
+     118            0 :       for (; __it->first != '\0'; ++__it)
+     119            0 :         if (__it->first == __c)
+     120            0 :           return &__it->second;
+     121            0 :       return nullptr;
+     122              :     }
+     123              : 
+     124              :     bool
+     125            0 :     _M_is_ecma() const
+     126            0 :     { return _M_flags & regex_constants::ECMAScript; }
+     127              : 
+     128              :     bool
+     129            0 :     _M_is_basic() const
+     130            0 :     { return _M_flags & (regex_constants::basic | regex_constants::grep); }
+     131              : 
+     132              :     bool
+     133              :     _M_is_extended() const
+     134              :     {
+     135              :       return _M_flags & (regex_constants::extended
+     136              :                          | regex_constants::egrep
+     137              :                          | regex_constants::awk);
+     138              :     }
+     139              : 
+     140              :     bool
+     141              :     _M_is_grep() const
+     142              :     { return _M_flags & (regex_constants::grep | regex_constants::egrep); }
+     143              : 
+     144              :     bool
+     145            0 :     _M_is_awk() const
+     146            0 :     { return _M_flags & regex_constants::awk; }
+     147              : 
+     148              :   protected:
+     149              :     // TODO: Make them static in the next abi change.
+     150              :     const std::pair<char, _TokenT> _M_token_tbl[9] =
+     151              :       {
+     152              :         {'^', _S_token_line_begin},
+     153              :         {'$', _S_token_line_end},
+     154              :         {'.', _S_token_anychar},
+     155              :         {'*', _S_token_closure0},
+     156              :         {'+', _S_token_closure1},
+     157              :         {'?', _S_token_opt},
+     158              :         {'|', _S_token_or},
+     159              :         {'\n', _S_token_or}, // grep and egrep
+     160              :         {'\0', _S_token_or},
+     161              :       };
+     162              :     const std::pair<char, char> _M_ecma_escape_tbl[8] =
+     163              :       {
+     164              :         {'0', '\0'},
+     165              :         {'b', '\b'},
+     166              :         {'f', '\f'},
+     167              :         {'n', '\n'},
+     168              :         {'r', '\r'},
+     169              :         {'t', '\t'},
+     170              :         {'v', '\v'},
+     171              :         {'\0', '\0'},
+     172              :       };
+     173              :     const std::pair<char, char> _M_awk_escape_tbl[11] =
+     174              :       {
+     175              :         {'"', '"'},
+     176              :         {'/', '/'},
+     177              :         {'\\', '\\'},
+     178              :         {'a', '\a'},
+     179              :         {'b', '\b'},
+     180              :         {'f', '\f'},
+     181              :         {'n', '\n'},
+     182              :         {'r', '\r'},
+     183              :         {'t', '\t'},
+     184              :         {'v', '\v'},
+     185              :         {'\0', '\0'},
+     186              :       };
+     187              :     const char* _M_ecma_spec_char = "^$\\.*+?()[]{}|";
+     188              :     const char* _M_basic_spec_char = ".[\\*^$";
+     189              :     const char* _M_extended_spec_char = ".[\\()*+?{|^$";
+     190              : 
+     191              :     _StateT                       _M_state;
+     192              :     _FlagT                        _M_flags;
+     193              :     _TokenT                       _M_token;
+     194              :     const std::pair<char, char>*  _M_escape_tbl;
+     195              :     const char*                   _M_spec_char;
+     196              :     bool                          _M_at_bracket_start;
+     197              :   };
+     198              : 
+     199              :   /**
+     200              :    * @brief Scans an input range for regex tokens.
+     201              :    *
+     202              :    * The %_Scanner class interprets the regular expression pattern in
+     203              :    * the input range passed to its constructor as a sequence of parse
+     204              :    * tokens passed to the regular expression compiler.  The sequence
+     205              :    * of tokens provided depends on the flag settings passed to the
+     206              :    * constructor: different regular expression grammars will interpret
+     207              :    * the same input pattern in syntactically different ways.
+     208              :    */
+     209              :   template<typename _CharT>
+     210              :     class _Scanner
+     211              :     : public _ScannerBase
+     212              :     {
+     213              :     public:
+     214              :       typedef std::basic_string<_CharT>                           _StringT;
+     215              :       typedef regex_constants::syntax_option_type                 _FlagT;
+     216              :       typedef const std::ctype<_CharT>                            _CtypeT;
+     217              : 
+     218              :       _Scanner(const _CharT* __begin, const _CharT* __end,
+     219              :                _FlagT __flags, std::locale __loc);
+     220              : 
+     221              :       void
+     222              :       _M_advance();
+     223              : 
+     224              :       _TokenT
+     225            0 :       _M_get_token() const noexcept
+     226            0 :       { return _M_token; }
+     227              : 
+     228              :       const _StringT&
+     229            0 :       _M_get_value() const noexcept
+     230            0 :       { return _M_value; }
+     231              : 
+     232              : #ifdef _GLIBCXX_DEBUG
+     233              :       std::ostream&
+     234              :       _M_print(std::ostream&);
+     235              : #endif
+     236              : 
+     237              :     private:
+     238              :       void
+     239              :       _M_scan_normal();
+     240              : 
+     241              :       void
+     242              :       _M_scan_in_bracket();
+     243              : 
+     244              :       void
+     245              :       _M_scan_in_brace();
+     246              : 
+     247              :       void
+     248              :       _M_eat_escape_ecma();
+     249              : 
+     250              :       void
+     251              :       _M_eat_escape_posix();
+     252              : 
+     253              :       void
+     254              :       _M_eat_escape_awk();
+     255              : 
+     256              :       void
+     257              :       _M_eat_class(char);
+     258              : 
+     259              :       const _CharT*                 _M_current;
+     260              :       const _CharT*                 _M_end;
+     261              :       _CtypeT&                      _M_ctype;
+     262              :       _StringT                      _M_value;
+     263              :       void (_Scanner::* _M_eat_escape)();
+     264              :     };
+     265              : 
+     266              :  ///@} regex-detail
+     267              : } // namespace __detail
+     268              : _GLIBCXX_END_NAMESPACE_VERSION
+     269              : } // namespace std
+     270              : 
+     271              : #include <bits/regex_scanner.tcc>
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_scanner.tcc.func-c.html b/html/usr/include/c++/13/bits/regex_scanner.tcc.func-c.html new file mode 100644 index 0000000..9dbc954 --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_scanner.tcc.func-c.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_scanner.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_scanner.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %2230
Test Date:2024-04-30 13:17:26Functions:0.0 %90
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt8__detail8_ScannerIcE10_M_advanceEv0
_ZNSt8__detail8_ScannerIcE12_M_eat_classEc0
_ZNSt8__detail8_ScannerIcE14_M_scan_normalEv0
_ZNSt8__detail8_ScannerIcE16_M_scan_in_braceEv0
_ZNSt8__detail8_ScannerIcE17_M_eat_escape_awkEv0
_ZNSt8__detail8_ScannerIcE18_M_eat_escape_ecmaEv0
_ZNSt8__detail8_ScannerIcE18_M_scan_in_bracketEv0
_ZNSt8__detail8_ScannerIcE19_M_eat_escape_posixEv0
_ZNSt8__detail8_ScannerIcEC2EPKcS3_NSt15regex_constants18syntax_option_typeESt6locale0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_scanner.tcc.func.html b/html/usr/include/c++/13/bits/regex_scanner.tcc.func.html new file mode 100644 index 0000000..810bacb --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_scanner.tcc.func.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_scanner.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_scanner.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %2230
Test Date:2024-04-30 13:17:26Functions:0.0 %90
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt8__detail8_ScannerIcE10_M_advanceEv0
_ZNSt8__detail8_ScannerIcE12_M_eat_classEc0
_ZNSt8__detail8_ScannerIcE14_M_scan_normalEv0
_ZNSt8__detail8_ScannerIcE16_M_scan_in_braceEv0
_ZNSt8__detail8_ScannerIcE17_M_eat_escape_awkEv0
_ZNSt8__detail8_ScannerIcE18_M_eat_escape_ecmaEv0
_ZNSt8__detail8_ScannerIcE18_M_scan_in_bracketEv0
_ZNSt8__detail8_ScannerIcE19_M_eat_escape_posixEv0
_ZNSt8__detail8_ScannerIcEC2EPKcS3_NSt15regex_constants18syntax_option_typeESt6locale0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/regex_scanner.tcc.gcov.html b/html/usr/include/c++/13/bits/regex_scanner.tcc.gcov.html new file mode 100644 index 0000000..a08498e --- /dev/null +++ b/html/usr/include/c++/13/bits/regex_scanner.tcc.gcov.html @@ -0,0 +1,660 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/regex_scanner.tcc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - regex_scanner.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %2230
Test Date:2024-04-30 13:17:26Functions:0.0 %90
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // class template regex -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2013-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /**
+      26              :  *  @file bits/regex_scanner.tcc
+      27              :  *  This is an internal header file, included by other library headers.
+      28              :  *  Do not attempt to use it directly. @headername{regex}
+      29              :  */
+      30              : 
+      31              : // FIXME make comments doxygen format.
+      32              : 
+      33              : // N3376 specified 6 regex styles: ECMAScript, basic, extended, grep, egrep
+      34              : // and awk
+      35              : // 1) grep is basic except '\n' is treated as '|'
+      36              : // 2) egrep is extended except '\n' is treated as '|'
+      37              : // 3) awk is extended except special escaping rules, and there's no
+      38              : //    back-reference.
+      39              : //
+      40              : // References:
+      41              : //
+      42              : // ECMAScript: ECMA-262 15.10
+      43              : //
+      44              : // basic, extended:
+      45              : // http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html
+      46              : //
+      47              : // awk: http://pubs.opengroup.org/onlinepubs/000095399/utilities/awk.html
+      48              : 
+      49              : namespace std _GLIBCXX_VISIBILITY(default)
+      50              : {
+      51              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      52              : 
+      53              : namespace __detail
+      54              : {
+      55              :   template<typename _CharT>
+      56            0 :     _Scanner<_CharT>::
+      57              :     _Scanner(const _CharT* __begin, const _CharT* __end,
+      58              :              _FlagT __flags, std::locale __loc)
+      59              :     : _ScannerBase(__flags),
+      60            0 :       _M_current(__begin), _M_end(__end),
+      61            0 :       _M_ctype(std::use_facet<_CtypeT>(__loc)),
+      62            0 :       _M_eat_escape(_M_is_ecma()
+      63            0 :                     ? &_Scanner::_M_eat_escape_ecma
+      64            0 :                     : &_Scanner::_M_eat_escape_posix)
+      65            0 :     { _M_advance(); }
+      66              : 
+      67              :   template<typename _CharT>
+      68              :     void
+      69            0 :     _Scanner<_CharT>::
+      70              :     _M_advance()
+      71              :     {
+      72            0 :       if (_M_current == _M_end)
+      73              :         {
+      74            0 :           _M_token = _S_token_eof;
+      75            0 :           return;
+      76              :         }
+      77              : 
+      78            0 :       if (_M_state == _S_state_normal)
+      79            0 :         _M_scan_normal();
+      80            0 :       else if (_M_state == _S_state_in_bracket)
+      81            0 :         _M_scan_in_bracket();
+      82            0 :       else if (_M_state == _S_state_in_brace)
+      83            0 :         _M_scan_in_brace();
+      84              :       else
+      85              :         {
+      86            0 :           __glibcxx_assert(!"unexpected state while processing regex");
+      87              :         }
+      88              :     }
+      89              : 
+      90              :   // Differences between styles:
+      91              :   // 1) "\(", "\)", "\{" in basic. It's not escaping.
+      92              :   // 2) "(?:", "(?=", "(?!" in ECMAScript.
+      93              :   template<typename _CharT>
+      94              :     void
+      95            0 :     _Scanner<_CharT>::
+      96              :     _M_scan_normal()
+      97              :     {
+      98            0 :       auto __c = *_M_current++;
+      99              : 
+     100            0 :       if (__builtin_strchr(_M_spec_char, _M_ctype.narrow(__c, ' ')) == nullptr)
+     101              :         {
+     102            0 :           _M_token = _S_token_ord_char;
+     103            0 :           _M_value.assign(1, __c);
+     104            0 :           return;
+     105              :         }
+     106            0 :       if (__c == '\\')
+     107              :         {
+     108            0 :           if (_M_current == _M_end)
+     109            0 :             __throw_regex_error(
+     110              :               regex_constants::error_escape,
+     111              :               "Invalid escape at end of regular expression");
+     112              : 
+     113            0 :           if (!_M_is_basic()
+     114            0 :               || (*_M_current != '('
+     115            0 :                   && *_M_current != ')'
+     116            0 :                   && *_M_current != '{'))
+     117              :             {
+     118            0 :               (this->*_M_eat_escape)();
+     119            0 :               return;
+     120              :             }
+     121            0 :           __c = *_M_current++;
+     122              :         }
+     123            0 :       if (__c == '(')
+     124              :         {
+     125            0 :           if (_M_is_ecma() && *_M_current == '?')
+     126              :             {
+     127            0 :               if (++_M_current == _M_end)
+     128            0 :                 __throw_regex_error(regex_constants::error_paren);
+     129              : 
+     130            0 :               if (*_M_current == ':')
+     131              :                 {
+     132            0 :                   ++_M_current;
+     133            0 :                   _M_token = _S_token_subexpr_no_group_begin;
+     134              :                 }
+     135            0 :               else if (*_M_current == '=')
+     136              :                 {
+     137            0 :                   ++_M_current;
+     138            0 :                   _M_token = _S_token_subexpr_lookahead_begin;
+     139            0 :                   _M_value.assign(1, 'p');
+     140              :                 }
+     141            0 :               else if (*_M_current == '!')
+     142              :                 {
+     143            0 :                   ++_M_current;
+     144            0 :                   _M_token = _S_token_subexpr_lookahead_begin;
+     145            0 :                   _M_value.assign(1, 'n');
+     146              :                 }
+     147              :               else
+     148            0 :                 __throw_regex_error(regex_constants::error_paren,
+     149              :                                     "Invalid '(?...)' zero-width assertion "
+     150              :                                     "in regular expression");
+     151              :             }
+     152            0 :           else if (_M_flags & regex_constants::nosubs)
+     153            0 :             _M_token = _S_token_subexpr_no_group_begin;
+     154              :           else
+     155            0 :             _M_token = _S_token_subexpr_begin;
+     156              :         }
+     157            0 :       else if (__c == ')')
+     158            0 :         _M_token = _S_token_subexpr_end;
+     159            0 :       else if (__c == '[')
+     160              :         {
+     161            0 :           _M_state = _S_state_in_bracket;
+     162            0 :           _M_at_bracket_start = true;
+     163            0 :           if (_M_current != _M_end && *_M_current == '^')
+     164              :             {
+     165            0 :               _M_token = _S_token_bracket_neg_begin;
+     166            0 :               ++_M_current;
+     167              :             }
+     168              :           else
+     169            0 :             _M_token = _S_token_bracket_begin;
+     170              :         }
+     171            0 :       else if (__c == '{')
+     172              :         {
+     173            0 :           _M_state = _S_state_in_brace;
+     174            0 :           _M_token = _S_token_interval_begin;
+     175              :         }
+     176            0 :       else if (__builtin_expect(__c == _CharT(0), false))
+     177              :         {
+     178            0 :           if (!_M_is_ecma())
+     179            0 :             __throw_regex_error(regex_constants::_S_null);
+     180            0 :           _M_token = _S_token_ord_char;
+     181            0 :           _M_value.assign(1, __c);
+     182              :         }
+     183            0 :       else if (__c != ']' && __c != '}')
+     184              :         {
+     185            0 :           auto __it = _M_token_tbl;
+     186            0 :           auto __narrowc = _M_ctype.narrow(__c, '\0');
+     187            0 :           for (; __it->first != '\0'; ++__it)
+     188            0 :             if (__it->first == __narrowc)
+     189              :               {
+     190            0 :                 _M_token = __it->second;
+     191            0 :                 return;
+     192              :               }
+     193            0 :           __glibcxx_assert(!"unexpected special character in regex");
+     194            0 :         }
+     195              :       else
+     196              :         {
+     197            0 :           _M_token = _S_token_ord_char;
+     198            0 :           _M_value.assign(1, __c);
+     199              :         }
+     200              :     }
+     201              : 
+     202              :   // Differences between styles:
+     203              :   // 1) different semantics of "[]" and "[^]".
+     204              :   // 2) Escaping in bracket expr.
+     205              :   template<typename _CharT>
+     206              :     void
+     207            0 :     _Scanner<_CharT>::
+     208              :     _M_scan_in_bracket()
+     209              :     {
+     210            0 :       if (_M_current == _M_end)
+     211            0 :         __throw_regex_error(regex_constants::error_brack);
+     212              : 
+     213            0 :       auto __c = *_M_current++;
+     214              : 
+     215            0 :       if (__c == '-')
+     216            0 :         _M_token = _S_token_bracket_dash;
+     217            0 :       else if (__c == '[')
+     218              :         {
+     219            0 :           if (_M_current == _M_end)
+     220            0 :             __throw_regex_error(regex_constants::error_brack,
+     221              :                                 "Incomplete '[[' character class in "
+     222              :                                 "regular expression");
+     223              : 
+     224            0 :           if (*_M_current == '.')
+     225              :             {
+     226            0 :               _M_token = _S_token_collsymbol;
+     227            0 :               _M_eat_class(*_M_current++);
+     228              :             }
+     229            0 :           else if (*_M_current == ':')
+     230              :             {
+     231            0 :               _M_token = _S_token_char_class_name;
+     232            0 :               _M_eat_class(*_M_current++);
+     233              :             }
+     234            0 :           else if (*_M_current == '=')
+     235              :             {
+     236            0 :               _M_token = _S_token_equiv_class_name;
+     237            0 :               _M_eat_class(*_M_current++);
+     238              :             }
+     239              :           else
+     240              :             {
+     241            0 :               _M_token = _S_token_ord_char;
+     242            0 :               _M_value.assign(1, __c);
+     243              :             }
+     244              :         }
+     245              :       // In POSIX, when encountering "[]" or "[^]", the ']' is interpreted
+     246              :       // literally. So "[]]" and "[^]]" are valid regexes. See the testcases
+     247              :       // `.../empty_range.cc`.
+     248            0 :       else if (__c == ']' && (_M_is_ecma() || !_M_at_bracket_start))
+     249              :         {
+     250            0 :           _M_token = _S_token_bracket_end;
+     251            0 :           _M_state = _S_state_normal;
+     252              :         }
+     253              :       // ECMAScript and awk permits escaping in bracket.
+     254            0 :       else if (__c == '\\' && (_M_is_ecma() || _M_is_awk()))
+     255            0 :         (this->*_M_eat_escape)();
+     256              :       else
+     257              :         {
+     258            0 :           _M_token = _S_token_ord_char;
+     259            0 :           _M_value.assign(1, __c);
+     260              :         }
+     261            0 :       _M_at_bracket_start = false;
+     262            0 :     }
+     263              : 
+     264              :   // Differences between styles:
+     265              :   // 1) "\}" in basic style.
+     266              :   template<typename _CharT>
+     267              :     void
+     268            0 :     _Scanner<_CharT>::
+     269              :     _M_scan_in_brace()
+     270              :     {
+     271            0 :       if (_M_current == _M_end)
+     272            0 :         __throw_regex_error(regex_constants::error_brace);
+     273              : 
+     274            0 :       auto __c = *_M_current++;
+     275              : 
+     276            0 :       if (_M_ctype.is(_CtypeT::digit, __c))
+     277              :         {
+     278            0 :           _M_token = _S_token_dup_count;
+     279            0 :           _M_value.assign(1, __c);
+     280            0 :           while (_M_current != _M_end
+     281            0 :                  && _M_ctype.is(_CtypeT::digit, *_M_current))
+     282            0 :             _M_value += *_M_current++;
+     283              :         }
+     284            0 :       else if (__c == ',')
+     285            0 :         _M_token = _S_token_comma;
+     286              :       // basic use \}.
+     287            0 :       else if (_M_is_basic())
+     288              :         {
+     289            0 :           if (__c == '\\' && _M_current != _M_end && *_M_current == '}')
+     290              :             {
+     291            0 :               _M_state = _S_state_normal;
+     292            0 :               _M_token = _S_token_interval_end;
+     293            0 :               ++_M_current;
+     294              :             }
+     295              :           else
+     296            0 :             __throw_regex_error(regex_constants::error_badbrace);
+     297              :         }
+     298            0 :       else if (__c == '}')
+     299              :         {
+     300            0 :           _M_state = _S_state_normal;
+     301            0 :           _M_token = _S_token_interval_end;
+     302              :         }
+     303              :       else
+     304            0 :         __throw_regex_error(regex_constants::error_badbrace);
+     305            0 :     }
+     306              : 
+     307              :   template<typename _CharT>
+     308              :     void
+     309            0 :     _Scanner<_CharT>::
+     310              :     _M_eat_escape_ecma()
+     311              :     {
+     312            0 :       if (_M_current == _M_end)
+     313            0 :         __throw_regex_error(regex_constants::error_escape);
+     314              : 
+     315            0 :       auto __c = *_M_current++;
+     316            0 :       auto __pos = _M_find_escape(_M_ctype.narrow(__c, '\0'));
+     317              : 
+     318            0 :       if (__pos != nullptr && (__c != 'b' || _M_state == _S_state_in_bracket))
+     319              :         {
+     320            0 :           _M_token = _S_token_ord_char;
+     321            0 :           _M_value.assign(1, *__pos);
+     322              :         }
+     323            0 :       else if (__c == 'b')
+     324              :         {
+     325            0 :           _M_token = _S_token_word_bound;
+     326            0 :           _M_value.assign(1, 'p');
+     327              :         }
+     328            0 :       else if (__c == 'B')
+     329              :         {
+     330            0 :           _M_token = _S_token_word_bound;
+     331            0 :           _M_value.assign(1, 'n');
+     332              :         }
+     333              :       // N3376 28.13
+     334            0 :       else if (__c == 'd'
+     335            0 :                || __c == 'D'
+     336            0 :                || __c == 's'
+     337            0 :                || __c == 'S'
+     338            0 :                || __c == 'w'
+     339            0 :                || __c == 'W')
+     340              :         {
+     341            0 :           _M_token = _S_token_quoted_class;
+     342            0 :           _M_value.assign(1, __c);
+     343              :         }
+     344            0 :       else if (__c == 'c')
+     345              :         {
+     346            0 :           if (_M_current == _M_end)
+     347            0 :             __throw_regex_error(regex_constants::error_escape,
+     348              :                                 "invalid '\\cX' control character in "
+     349              :                                 "regular expression");
+     350            0 :           _M_token = _S_token_ord_char;
+     351            0 :           _M_value.assign(1, *_M_current++);
+     352              :         }
+     353            0 :       else if (__c == 'x' || __c == 'u')
+     354              :         {
+     355            0 :           _M_value.clear();
+     356            0 :           const int __n = __c == 'x' ? 2 : 4;
+     357            0 :           for (int __i = 0; __i < __n; __i++)
+     358              :             {
+     359            0 :               if (_M_current == _M_end
+     360            0 :                   || !_M_ctype.is(_CtypeT::xdigit, *_M_current))
+     361            0 :                 __throw_regex_error(regex_constants::error_escape,
+     362              :                                     __n == 2
+     363              :                                     ? "Invalid '\\xNN' control character in "
+     364              :                                       "regular expression"
+     365              :                                     : "Invalid '\\uNNNN' control character in "
+     366              :                                       "regular expression");
+     367            0 :               _M_value += *_M_current++;
+     368              :             }
+     369            0 :           _M_token = _S_token_hex_num;
+     370            0 :         }
+     371              :       // ECMAScript recognizes multi-digit back-references.
+     372            0 :       else if (_M_ctype.is(_CtypeT::digit, __c))
+     373              :         {
+     374            0 :           _M_value.assign(1, __c);
+     375            0 :           while (_M_current != _M_end
+     376            0 :                  && _M_ctype.is(_CtypeT::digit, *_M_current))
+     377            0 :             _M_value += *_M_current++;
+     378            0 :           _M_token = _S_token_backref;
+     379              :         }
+     380              :       else
+     381              :         {
+     382            0 :           _M_token = _S_token_ord_char;
+     383            0 :           _M_value.assign(1, __c);
+     384              :         }
+     385            0 :     }
+     386              : 
+     387              :   // Differences between styles:
+     388              :   // 1) Extended doesn't support backref, but basic does.
+     389              :   template<typename _CharT>
+     390              :     void
+     391            0 :     _Scanner<_CharT>::
+     392              :     _M_eat_escape_posix()
+     393              :     {
+     394            0 :       if (_M_current == _M_end)
+     395            0 :         __throw_regex_error(regex_constants::error_escape);
+     396              : 
+     397            0 :       auto __c = *_M_current;
+     398            0 :       auto __pos = __builtin_strchr(_M_spec_char, _M_ctype.narrow(__c, '\0'));
+     399              : 
+     400            0 :       if (__pos != nullptr && *__pos != '\0')
+     401              :         {
+     402            0 :           _M_token = _S_token_ord_char;
+     403            0 :           _M_value.assign(1, __c);
+     404              :         }
+     405              :       // We MUST judge awk before handling backrefs. There's no backref in awk.
+     406            0 :       else if (_M_is_awk())
+     407              :         {
+     408            0 :           _M_eat_escape_awk();
+     409            0 :           return;
+     410              :         }
+     411            0 :       else if (_M_is_basic() && _M_ctype.is(_CtypeT::digit, __c) && __c != '0')
+     412              :         {
+     413            0 :           _M_token = _S_token_backref;
+     414            0 :           _M_value.assign(1, __c);
+     415              :         }
+     416              :       else
+     417              :         {
+     418              : #ifdef __STRICT_ANSI__
+     419              :           // POSIX says it is undefined to escape ordinary characters
+     420            0 :           __throw_regex_error(regex_constants::error_escape);
+     421              : #else
+     422              :           _M_token = _S_token_ord_char;
+     423              :           _M_value.assign(1, __c);
+     424              : #endif
+     425              :         }
+     426            0 :       ++_M_current;
+     427              :     }
+     428              : 
+     429              :   template<typename _CharT>
+     430              :     void
+     431            0 :     _Scanner<_CharT>::
+     432              :     _M_eat_escape_awk()
+     433              :     {
+     434            0 :       auto __c = *_M_current++;
+     435            0 :       auto __pos = _M_find_escape(_M_ctype.narrow(__c, '\0'));
+     436              : 
+     437            0 :       if (__pos != nullptr)
+     438              :         {
+     439            0 :           _M_token = _S_token_ord_char;
+     440            0 :           _M_value.assign(1, *__pos);
+     441              :         }
+     442              :       // \ddd for oct representation
+     443            0 :       else if (_M_ctype.is(_CtypeT::digit, __c)
+     444            0 :                && __c != '8'
+     445            0 :                && __c != '9')
+     446              :         {
+     447            0 :           _M_value.assign(1,  __c);
+     448            0 :           for (int __i = 0;
+     449              :                __i < 2
+     450            0 :                && _M_current != _M_end
+     451            0 :                && _M_ctype.is(_CtypeT::digit, *_M_current)
+     452            0 :                && *_M_current != '8'
+     453            0 :                && *_M_current != '9';
+     454              :                __i++)
+     455            0 :             _M_value += *_M_current++;
+     456            0 :           _M_token = _S_token_oct_num;
+     457            0 :           return;
+     458              :         }
+     459              :       else
+     460            0 :         __throw_regex_error(regex_constants::error_escape);
+     461              :     }
+     462              : 
+     463              :   // Eats a character class or throws an exception.
+     464              :   // __ch could be ':', '.' or '=', _M_current is the char after ']' when
+     465              :   // returning.
+     466              :   template<typename _CharT>
+     467              :     void
+     468            0 :     _Scanner<_CharT>::
+     469              :     _M_eat_class(char __ch)
+     470              :     {
+     471            0 :       for (_M_value.clear(); _M_current != _M_end && *_M_current != __ch;)
+     472            0 :         _M_value += *_M_current++;
+     473            0 :       if (_M_current == _M_end
+     474            0 :           || *_M_current++ != __ch
+     475            0 :           || _M_current == _M_end // skip __ch
+     476            0 :           || *_M_current++ != ']') // skip ']'
+     477              :         {
+     478            0 :           __throw_regex_error(__ch == ':' ? regex_constants::error_ctype
+     479              :                                           : regex_constants::error_collate);
+     480              :         }
+     481            0 :     }
+     482              : 
+     483              : #ifdef _GLIBCXX_DEBUG
+     484              :   template<typename _CharT>
+     485              :     std::ostream&
+     486              :     _Scanner<_CharT>::
+     487              :     _M_print(std::ostream& __ostr)
+     488              :     {
+     489              :       switch (_M_token)
+     490              :       {
+     491              :       case _S_token_anychar:
+     492              :         __ostr << "any-character\n";
+     493              :         break;
+     494              :       case _S_token_backref:
+     495              :         __ostr << "backref\n";
+     496              :         break;
+     497              :       case _S_token_bracket_begin:
+     498              :         __ostr << "bracket-begin\n";
+     499              :         break;
+     500              :       case _S_token_bracket_neg_begin:
+     501              :         __ostr << "bracket-neg-begin\n";
+     502              :         break;
+     503              :       case _S_token_bracket_end:
+     504              :         __ostr << "bracket-end\n";
+     505              :         break;
+     506              :       case _S_token_char_class_name:
+     507              :         __ostr << "char-class-name \"" << _M_value << "\"\n";
+     508              :         break;
+     509              :       case _S_token_closure0:
+     510              :         __ostr << "closure0\n";
+     511              :         break;
+     512              :       case _S_token_closure1:
+     513              :         __ostr << "closure1\n";
+     514              :         break;
+     515              :       case _S_token_collsymbol:
+     516              :         __ostr << "collsymbol \"" << _M_value << "\"\n";
+     517              :         break;
+     518              :       case _S_token_comma:
+     519              :         __ostr << "comma\n";
+     520              :         break;
+     521              :       case _S_token_dup_count:
+     522              :         __ostr << "dup count: " << _M_value << "\n";
+     523              :         break;
+     524              :       case _S_token_eof:
+     525              :         __ostr << "EOF\n";
+     526              :         break;
+     527              :       case _S_token_equiv_class_name:
+     528              :         __ostr << "equiv-class-name \"" << _M_value << "\"\n";
+     529              :         break;
+     530              :       case _S_token_interval_begin:
+     531              :         __ostr << "interval begin\n";
+     532              :         break;
+     533              :       case _S_token_interval_end:
+     534              :         __ostr << "interval end\n";
+     535              :         break;
+     536              :       case _S_token_line_begin:
+     537              :         __ostr << "line begin\n";
+     538              :         break;
+     539              :       case _S_token_line_end:
+     540              :         __ostr << "line end\n";
+     541              :         break;
+     542              :       case _S_token_opt:
+     543              :         __ostr << "opt\n";
+     544              :         break;
+     545              :       case _S_token_or:
+     546              :         __ostr << "or\n";
+     547              :         break;
+     548              :       case _S_token_ord_char:
+     549              :         __ostr << "ordinary character: \"" << _M_value << "\"\n";
+     550              :         break;
+     551              :       case _S_token_subexpr_begin:
+     552              :         __ostr << "subexpr begin\n";
+     553              :         break;
+     554              :       case _S_token_subexpr_no_group_begin:
+     555              :         __ostr << "no grouping subexpr begin\n";
+     556              :         break;
+     557              :       case _S_token_subexpr_lookahead_begin:
+     558              :         __ostr << "lookahead subexpr begin\n";
+     559              :         break;
+     560              :       case _S_token_subexpr_end:
+     561              :         __ostr << "subexpr end\n";
+     562              :         break;
+     563              :       case _S_token_unknown:
+     564              :         __ostr << "-- unknown token --\n";
+     565              :         break;
+     566              :       case _S_token_oct_num:
+     567              :         __ostr << "oct number " << _M_value << "\n";
+     568              :         break;
+     569              :       case _S_token_hex_num:
+     570              :         __ostr << "hex number " << _M_value << "\n";
+     571              :         break;
+     572              :       case _S_token_quoted_class:
+     573              :         __ostr << "quoted class " << "\\" << _M_value << "\n";
+     574              :         break;
+     575              :       default:
+     576              :         _GLIBCXX_DEBUG_ASSERT(false);
+     577              :       }
+     578              :       return __ostr;
+     579              :     }
+     580              : #endif
+     581              : 
+     582              : } // namespace __detail
+     583              : _GLIBCXX_END_NAMESPACE_VERSION
+     584              : } // namespace
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/shared_ptr.h.func-c.html b/html/usr/include/c++/13/bits/shared_ptr.h.func-c.html new file mode 100644 index 0000000..06a580c --- /dev/null +++ b/html/usr/include/c++/13/bits/shared_ptr.h.func-c.html @@ -0,0 +1,264 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/shared_ptr.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - shared_ptr.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:55.6 %1810
Test Date:2024-04-30 13:17:26Functions:42.9 %219
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt10shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEaSEOS7_0
_ZNSt10shared_ptrIN5torch8autograd4NodeEEC2EDn0
_ZNSt10shared_ptrIN5torch8autograd4NodeEEC2Ev0
_ZNSt10shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEC2Ev0
_ZNSt10shared_ptrIN5torch8autograd11ForwardGradEEC2Ev0
_ZNSt10shared_ptrIN5torch8autograd4NodeEEC2Ev0
_ZNSt10shared_ptrISt6vectorISt8functionIFN2at10TensorBaseERKS3_EESaIS7_EEEC2Ev0
_ZNSt8weak_ptrIN5torch8autograd4NodeEEC2Ev0
_ZSteqIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEbRKSt10shared_ptrIT_EDn0
_ZNSt10shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEC2ISaIvEJRKSt6localeRNSt15regex_constants18syntax_option_typeEEEESt20_Sp_alloc_shared_tagIT_EDpOT0_20
_ZNSt10shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEC2ISaIvEJRKSt6localeRNSt15regex_constants18syntax_option_typeEEEESt20_Sp_alloc_shared_tagIT_EDpOT0_0
_ZNSt10shared_ptrIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEC2ISaIvEJRS9_EEESt20_Sp_alloc_shared_tagIT_EDpOT0_20
_ZSt11make_sharedINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEJRKSt6localeRNSt15regex_constants18syntax_option_typeEEESt10shared_ptrINSt9enable_ifIXntsrSt8is_arrayIT_E5valueESF_E4typeEEDpOT0_20
_ZSt11make_sharedINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEJRKSt6localeRNSt15regex_constants18syntax_option_typeEEESt10shared_ptrINSt9enable_ifIXntsrSt8is_arrayIT_E5valueESF_E4typeEEDpOT0_0
_ZSt11make_sharedIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEJRS9_EESt10shared_ptrINSt9enable_ifIXntsrSt8is_arrayIT_E5valueESF_E4typeEEDpOT0_20
_ZNSt10shared_ptrIN3c104TypeEEC2EOS2_22
_ZNSt10shared_ptrIN5torch8autograd4NodeEEC2EOS3_0
_ZNSt10shared_ptrIN3c104TypeEEC2EOS2_2
_ZNSt10shared_ptrIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEEEC2EOS5_20
_ZNSt10shared_ptrIN3c104TypeEEC2INS0_10TensorTypeEvEEOS_IT_E22
_ZNSt10shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEC2IS5_vEEOS_IT_E0
_ZNSt10shared_ptrIN3c104TypeEEC2INS0_10TensorTypeEvEEOS_IT_E2
_ZNSt10shared_ptrIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEEEC2INS2_21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvEEOS_IT_E20
_ZNSt10shared_ptrIN3c104TypeEEC2ERKS2_36925448
_ZNSt10shared_ptrIN3c1010TensorTypeEEC2ERKS2_4
_ZNSt10shared_ptrIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEEEC2ERKS5_20
_ZNSt10shared_ptrIN3c104TypeEEC2ERKS2_36925424
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/shared_ptr.h.func.html b/html/usr/include/c++/13/bits/shared_ptr.h.func.html new file mode 100644 index 0000000..f0bfe1a --- /dev/null +++ b/html/usr/include/c++/13/bits/shared_ptr.h.func.html @@ -0,0 +1,264 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/shared_ptr.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - shared_ptr.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:55.6 %1810
Test Date:2024-04-30 13:17:26Functions:42.9 %219
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt10shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEaSEOS7_0
_ZNSt10shared_ptrIN3c104TypeEEC2EOS2_22
_ZNSt10shared_ptrIN3c104TypeEEC2EOS2_2
_ZNSt10shared_ptrIN5torch8autograd4NodeEEC2EOS3_0
_ZNSt10shared_ptrIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEEEC2EOS5_20
_ZNSt10shared_ptrIN3c104TypeEEC2ERKS2_36925448
_ZNSt10shared_ptrIN3c1010TensorTypeEEC2ERKS2_4
_ZNSt10shared_ptrIN3c104TypeEEC2ERKS2_36925424
_ZNSt10shared_ptrIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEEEC2ERKS5_20
_ZNSt10shared_ptrIN3c104TypeEEC2INS0_10TensorTypeEvEEOS_IT_E22
_ZNSt10shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEC2IS5_vEEOS_IT_E0
_ZNSt10shared_ptrIN3c104TypeEEC2INS0_10TensorTypeEvEEOS_IT_E2
_ZNSt10shared_ptrIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEEEC2INS2_21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvEEOS_IT_E20
_ZNSt10shared_ptrIN5torch8autograd4NodeEEC2EDn0
_ZNSt10shared_ptrIN5torch8autograd4NodeEEC2Ev0
_ZNSt10shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEC2Ev0
_ZNSt10shared_ptrIN5torch8autograd11ForwardGradEEC2Ev0
_ZNSt10shared_ptrIN5torch8autograd4NodeEEC2Ev0
_ZNSt10shared_ptrISt6vectorISt8functionIFN2at10TensorBaseERKS3_EESaIS7_EEEC2Ev0
_ZNSt10shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEC2ISaIvEJRKSt6localeRNSt15regex_constants18syntax_option_typeEEEESt20_Sp_alloc_shared_tagIT_EDpOT0_20
_ZNSt10shared_ptrIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEC2ISaIvEJRS9_EEESt20_Sp_alloc_shared_tagIT_EDpOT0_20
_ZNSt10shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEC2ISaIvEJRKSt6localeRNSt15regex_constants18syntax_option_typeEEEESt20_Sp_alloc_shared_tagIT_EDpOT0_0
_ZNSt8weak_ptrIN5torch8autograd4NodeEEC2Ev0
_ZSt11make_sharedINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEJRKSt6localeRNSt15regex_constants18syntax_option_typeEEESt10shared_ptrINSt9enable_ifIXntsrSt8is_arrayIT_E5valueESF_E4typeEEDpOT0_20
_ZSt11make_sharedIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEJRS9_EESt10shared_ptrINSt9enable_ifIXntsrSt8is_arrayIT_E5valueESF_E4typeEEDpOT0_20
_ZSt11make_sharedINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEJRKSt6localeRNSt15regex_constants18syntax_option_typeEEESt10shared_ptrINSt9enable_ifIXntsrSt8is_arrayIT_E5valueESF_E4typeEEDpOT0_0
_ZSteqIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEbRKSt10shared_ptrIT_EDn0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/shared_ptr.h.gcov.html b/html/usr/include/c++/13/bits/shared_ptr.h.gcov.html new file mode 100644 index 0000000..eea8069 --- /dev/null +++ b/html/usr/include/c++/13/bits/shared_ptr.h.gcov.html @@ -0,0 +1,1266 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/shared_ptr.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - shared_ptr.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:55.6 %1810
Test Date:2024-04-30 13:17:26Functions:42.9 %219
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // shared_ptr and weak_ptr implementation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2007-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : // GCC Note: Based on files from version 1.32.0 of the Boost library.
+      26              : 
+      27              : //  shared_count.hpp
+      28              : //  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+      29              : 
+      30              : //  shared_ptr.hpp
+      31              : //  Copyright (C) 1998, 1999 Greg Colvin and Beman Dawes.
+      32              : //  Copyright (C) 2001, 2002, 2003 Peter Dimov
+      33              : 
+      34              : //  weak_ptr.hpp
+      35              : //  Copyright (C) 2001, 2002, 2003 Peter Dimov
+      36              : 
+      37              : //  enable_shared_from_this.hpp
+      38              : //  Copyright (C) 2002 Peter Dimov
+      39              : 
+      40              : // Distributed under the Boost Software License, Version 1.0. (See
+      41              : // accompanying file LICENSE_1_0.txt or copy at
+      42              : // http://www.boost.org/LICENSE_1_0.txt)
+      43              : 
+      44              : /** @file
+      45              :  *  This is an internal header file, included by other library headers.
+      46              :  *  Do not attempt to use it directly. @headername{memory}
+      47              :  */
+      48              : 
+      49              : #ifndef _SHARED_PTR_H
+      50              : #define _SHARED_PTR_H 1
+      51              : 
+      52              : #include <iosfwd>                   // std::basic_ostream
+      53              : #include <bits/shared_ptr_base.h>
+      54              : 
+      55              : namespace std _GLIBCXX_VISIBILITY(default)
+      56              : {
+      57              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      58              : 
+      59              :   /**
+      60              :    * @addtogroup pointer_abstractions
+      61              :    * @{
+      62              :    */
+      63              : 
+      64              :   // 20.7.2.2.11 shared_ptr I/O
+      65              : 
+      66              :   /// Write the stored pointer to an ostream.
+      67              :   /// @relates shared_ptr
+      68              :   template<typename _Ch, typename _Tr, typename _Tp, _Lock_policy _Lp>
+      69              :     inline std::basic_ostream<_Ch, _Tr>&
+      70              :     operator<<(std::basic_ostream<_Ch, _Tr>& __os,
+      71              :                const __shared_ptr<_Tp, _Lp>& __p)
+      72              :     {
+      73              :       __os << __p.get();
+      74              :       return __os;
+      75              :     }
+      76              : 
+      77              :   template<typename _Del, typename _Tp, _Lock_policy _Lp>
+      78              :     inline _Del*
+      79              :     get_deleter(const __shared_ptr<_Tp, _Lp>& __p) noexcept
+      80              :     {
+      81              : #if __cpp_rtti
+      82              :       return static_cast<_Del*>(__p._M_get_deleter(typeid(_Del)));
+      83              : #else
+      84              :       return 0;
+      85              : #endif
+      86              :     }
+      87              : 
+      88              :   /// 20.7.2.2.10 shared_ptr get_deleter
+      89              : 
+      90              :   /// If `__p` has a deleter of type `_Del`, return a pointer to it.
+      91              :   /// @relates shared_ptr
+      92              :   template<typename _Del, typename _Tp>
+      93              :     inline _Del*
+      94              :     get_deleter(const shared_ptr<_Tp>& __p) noexcept
+      95              :     {
+      96              : #if __cpp_rtti
+      97              :       return static_cast<_Del*>(__p._M_get_deleter(typeid(_Del)));
+      98              : #else
+      99              :       return 0;
+     100              : #endif
+     101              :     }
+     102              : 
+     103              :   /// @cond undocumented
+     104              : 
+     105              :   // Constraint for overloads taking non-array types.
+     106              : #if __cpp_concepts && __cpp_lib_type_trait_variable_templates
+     107              :   template<typename _Tp>
+     108              :     requires (!is_array_v<_Tp>)
+     109              :     using _NonArray = _Tp;
+     110              : #else
+     111              :   template<typename _Tp>
+     112              :     using _NonArray = __enable_if_t<!is_array<_Tp>::value, _Tp>;
+     113              : #endif
+     114              : 
+     115              : #if __cpp_lib_shared_ptr_arrays >= 201707L
+     116              :   // Constraint for overloads taking array types with unknown bound, U[].
+     117              : #if __cpp_concepts
+     118              :   template<typename _Tp>
+     119              :     requires is_array_v<_Tp> && (extent_v<_Tp> == 0)
+     120              :     using _UnboundedArray = _Tp;
+     121              : #else
+     122              :   template<typename _Tp>
+     123              :     using _UnboundedArray
+     124              :       = __enable_if_t<__is_array_unknown_bounds<_Tp>::value, _Tp>;
+     125              : #endif
+     126              : 
+     127              :   // Constraint for overloads taking array types with known bound, U[N].
+     128              : #if __cpp_concepts
+     129              :   template<typename _Tp>
+     130              :     requires (extent_v<_Tp> != 0)
+     131              :     using _BoundedArray = _Tp;
+     132              : #else
+     133              :   template<typename _Tp>
+     134              :     using _BoundedArray
+     135              :       = __enable_if_t<__is_array_known_bounds<_Tp>::value, _Tp>;
+     136              : #endif
+     137              : 
+     138              : #if __cpp_lib_smart_ptr_for_overwrite
+     139              :   // Constraint for overloads taking either non-array or bounded array, U[N].
+     140              : #if __cpp_concepts
+     141              :   template<typename _Tp>
+     142              :     requires (!is_array_v<_Tp>) || (extent_v<_Tp> != 0)
+     143              :     using _NotUnboundedArray = _Tp;
+     144              : #else
+     145              :   template<typename _Tp>
+     146              :     using _NotUnboundedArray
+     147              :       = __enable_if_t<!__is_array_unknown_bounds<_Tp>::value, _Tp>;
+     148              : #endif
+     149              : #endif // smart_ptr_for_overwrite
+     150              : #endif // shared_ptr_arrays
+     151              : 
+     152              :   /// @endcond
+     153              : 
+     154              :   /**
+     155              :    *  @brief  A smart pointer with reference-counted copy semantics.
+     156              :    *  @headerfile memory
+     157              :    *  @since C++11
+     158              :    *
+     159              :    * A `shared_ptr` object is either empty or _owns_ a pointer passed
+     160              :    * to the constructor. Copies of a `shared_ptr` share ownership of
+     161              :    * the same pointer. When the last `shared_ptr` that owns the pointer
+     162              :    * is destroyed or reset, the owned pointer is freed (either by `delete`
+     163              :    * or by invoking a custom deleter that was passed to the constructor).
+     164              :    *
+     165              :    * A `shared_ptr` also stores another pointer, which is usually
+     166              :    * (but not always) the same pointer as it owns. The stored pointer
+     167              :    * can be retrieved by calling the `get()` member function.
+     168              :    *
+     169              :    * The equality and relational operators for `shared_ptr` only compare
+     170              :    * the stored pointer returned by `get()`, not the owned pointer.
+     171              :    * To test whether two `shared_ptr` objects share ownership of the same
+     172              :    * pointer see `std::shared_ptr::owner_before` and `std::owner_less`.
+     173              :   */
+     174              :   template<typename _Tp>
+     175              :     class shared_ptr : public __shared_ptr<_Tp>
+     176              :     {
+     177              :       template<typename... _Args>
+     178              :         using _Constructible = typename enable_if<
+     179              :           is_constructible<__shared_ptr<_Tp>, _Args...>::value
+     180              :         >::type;
+     181              : 
+     182              :       template<typename _Arg>
+     183              :         using _Assignable = typename enable_if<
+     184              :           is_assignable<__shared_ptr<_Tp>&, _Arg>::value, shared_ptr&
+     185              :         >::type;
+     186              : 
+     187              :     public:
+     188              : 
+     189              :       /// The type pointed to by the stored pointer, remove_extent_t<_Tp>
+     190              :       using element_type = typename __shared_ptr<_Tp>::element_type;
+     191              : 
+     192              : #if __cplusplus >= 201703L
+     193              : # define __cpp_lib_shared_ptr_weak_type 201606L
+     194              :       /// The corresponding weak_ptr type for this shared_ptr
+     195              :       /// @since C++17
+     196              :       using weak_type = weak_ptr<_Tp>;
+     197              : #endif
+     198              :       /**
+     199              :        *  @brief  Construct an empty %shared_ptr.
+     200              :        *  @post   use_count()==0 && get()==0
+     201              :        */
+     202            0 :       constexpr shared_ptr() noexcept : __shared_ptr<_Tp>() { }
+     203              : 
+     204     36925448 :       shared_ptr(const shared_ptr&) noexcept = default; ///< Copy constructor
+     205              : 
+     206              :       /**
+     207              :        *  @brief  Construct a %shared_ptr that owns the pointer @a __p.
+     208              :        *  @param  __p  A pointer that is convertible to element_type*.
+     209              :        *  @post   use_count() == 1 && get() == __p
+     210              :        *  @throw  std::bad_alloc, in which case @c delete @a __p is called.
+     211              :        */
+     212              :       template<typename _Yp, typename = _Constructible<_Yp*>>
+     213              :         explicit
+     214              :         shared_ptr(_Yp* __p) : __shared_ptr<_Tp>(__p) { }
+     215              : 
+     216              :       /**
+     217              :        *  @brief  Construct a %shared_ptr that owns the pointer @a __p
+     218              :        *          and the deleter @a __d.
+     219              :        *  @param  __p  A pointer.
+     220              :        *  @param  __d  A deleter.
+     221              :        *  @post   use_count() == 1 && get() == __p
+     222              :        *  @throw  std::bad_alloc, in which case @a __d(__p) is called.
+     223              :        *
+     224              :        *  Requirements: _Deleter's copy constructor and destructor must
+     225              :        *  not throw
+     226              :        *
+     227              :        *  __shared_ptr will release __p by calling __d(__p)
+     228              :        */
+     229              :       template<typename _Yp, typename _Deleter,
+     230              :                typename = _Constructible<_Yp*, _Deleter>>
+     231              :         shared_ptr(_Yp* __p, _Deleter __d)
+     232              :         : __shared_ptr<_Tp>(__p, std::move(__d)) { }
+     233              : 
+     234              :       /**
+     235              :        *  @brief  Construct a %shared_ptr that owns a null pointer
+     236              :        *          and the deleter @a __d.
+     237              :        *  @param  __p  A null pointer constant.
+     238              :        *  @param  __d  A deleter.
+     239              :        *  @post   use_count() == 1 && get() == __p
+     240              :        *  @throw  std::bad_alloc, in which case @a __d(__p) is called.
+     241              :        *
+     242              :        *  Requirements: _Deleter's copy constructor and destructor must
+     243              :        *  not throw
+     244              :        *
+     245              :        *  The last owner will call __d(__p)
+     246              :        */
+     247              :       template<typename _Deleter>
+     248              :         shared_ptr(nullptr_t __p, _Deleter __d)
+     249              :         : __shared_ptr<_Tp>(__p, std::move(__d)) { }
+     250              : 
+     251              :       /**
+     252              :        *  @brief  Construct a %shared_ptr that owns the pointer @a __p
+     253              :        *          and the deleter @a __d.
+     254              :        *  @param  __p  A pointer.
+     255              :        *  @param  __d  A deleter.
+     256              :        *  @param  __a  An allocator.
+     257              :        *  @post   use_count() == 1 && get() == __p
+     258              :        *  @throw  std::bad_alloc, in which case @a __d(__p) is called.
+     259              :        *
+     260              :        *  Requirements: _Deleter's copy constructor and destructor must
+     261              :        *  not throw _Alloc's copy constructor and destructor must not
+     262              :        *  throw.
+     263              :        *
+     264              :        *  __shared_ptr will release __p by calling __d(__p)
+     265              :        */
+     266              :       template<typename _Yp, typename _Deleter, typename _Alloc,
+     267              :                typename = _Constructible<_Yp*, _Deleter, _Alloc>>
+     268              :         shared_ptr(_Yp* __p, _Deleter __d, _Alloc __a)
+     269              :         : __shared_ptr<_Tp>(__p, std::move(__d), std::move(__a)) { }
+     270              : 
+     271              :       /**
+     272              :        *  @brief  Construct a %shared_ptr that owns a null pointer
+     273              :        *          and the deleter @a __d.
+     274              :        *  @param  __p  A null pointer constant.
+     275              :        *  @param  __d  A deleter.
+     276              :        *  @param  __a  An allocator.
+     277              :        *  @post   use_count() == 1 && get() == __p
+     278              :        *  @throw  std::bad_alloc, in which case @a __d(__p) is called.
+     279              :        *
+     280              :        *  Requirements: _Deleter's copy constructor and destructor must
+     281              :        *  not throw _Alloc's copy constructor and destructor must not
+     282              :        *  throw.
+     283              :        *
+     284              :        *  The last owner will call __d(__p)
+     285              :        */
+     286              :       template<typename _Deleter, typename _Alloc>
+     287              :         shared_ptr(nullptr_t __p, _Deleter __d, _Alloc __a)
+     288              :         : __shared_ptr<_Tp>(__p, std::move(__d), std::move(__a)) { }
+     289              : 
+     290              :       // Aliasing constructor
+     291              : 
+     292              :       /**
+     293              :        *  @brief  Constructs a `shared_ptr` instance that stores `__p`
+     294              :        *          and shares ownership with `__r`.
+     295              :        *  @param  __r  A `shared_ptr`.
+     296              :        *  @param  __p  A pointer that will remain valid while `*__r` is valid.
+     297              :        *  @post   `get() == __p && use_count() == __r.use_count()`
+     298              :        *
+     299              :        *  This can be used to construct a `shared_ptr` to a sub-object
+     300              :        *  of an object managed by an existing `shared_ptr`. The complete
+     301              :        *  object will remain valid while any `shared_ptr` owns it, even
+     302              :        *  if they don't store a pointer to the complete object.
+     303              :        *
+     304              :        * @code
+     305              :        * shared_ptr<pair<int,int>> pii(new pair<int,int>());
+     306              :        * shared_ptr<int> pi(pii, &pii->first);
+     307              :        * assert(pii.use_count() == 2);
+     308              :        * @endcode
+     309              :        */
+     310              :       template<typename _Yp>
+     311              :         shared_ptr(const shared_ptr<_Yp>& __r, element_type* __p) noexcept
+     312              :         : __shared_ptr<_Tp>(__r, __p) { }
+     313              : 
+     314              : #if __cplusplus > 201703L
+     315              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     316              :       // 2996. Missing rvalue overloads for shared_ptr operations
+     317              :       /**
+     318              :        *  @brief  Constructs a `shared_ptr` instance that stores `__p`
+     319              :        *          and shares ownership with `__r`.
+     320              :        *  @param  __r  A `shared_ptr`.
+     321              :        *  @param  __p  A pointer that will remain valid while `*__r` is valid.
+     322              :        *  @post   `get() == __p && !__r.use_count() && !__r.get()`
+     323              :        *  @since C++17
+     324              :        *
+     325              :        *  This can be used to construct a `shared_ptr` to a sub-object
+     326              :        *  of an object managed by an existing `shared_ptr`. The complete
+     327              :        *  object will remain valid while any `shared_ptr` owns it, even
+     328              :        *  if they don't store a pointer to the complete object.
+     329              :        *
+     330              :        * @code
+     331              :        * shared_ptr<pair<int,int>> pii(new pair<int,int>());
+     332              :        * shared_ptr<int> pi1(pii, &pii->first);
+     333              :        * assert(pii.use_count() == 2);
+     334              :        * shared_ptr<int> pi2(std::move(pii), &pii->second);
+     335              :        * assert(pii.use_count() == 0);
+     336              :        * @endcode
+     337              :        */
+     338              :       template<typename _Yp>
+     339              :         shared_ptr(shared_ptr<_Yp>&& __r, element_type* __p) noexcept
+     340              :         : __shared_ptr<_Tp>(std::move(__r), __p) { }
+     341              : #endif
+     342              :       /**
+     343              :        *  @brief  If @a __r is empty, constructs an empty %shared_ptr;
+     344              :        *          otherwise construct a %shared_ptr that shares ownership
+     345              :        *          with @a __r.
+     346              :        *  @param  __r  A %shared_ptr.
+     347              :        *  @post   get() == __r.get() && use_count() == __r.use_count()
+     348              :        */
+     349              :       template<typename _Yp,
+     350              :                typename = _Constructible<const shared_ptr<_Yp>&>>
+     351              :         shared_ptr(const shared_ptr<_Yp>& __r) noexcept
+     352              :         : __shared_ptr<_Tp>(__r) { }
+     353              : 
+     354              :       /**
+     355              :        *  @brief  Move-constructs a %shared_ptr instance from @a __r.
+     356              :        *  @param  __r  A %shared_ptr rvalue.
+     357              :        *  @post   *this contains the old value of @a __r, @a __r is empty.
+     358              :        */
+     359           22 :       shared_ptr(shared_ptr&& __r) noexcept
+     360           22 :       : __shared_ptr<_Tp>(std::move(__r)) { }
+     361              : 
+     362              :       /**
+     363              :        *  @brief  Move-constructs a %shared_ptr instance from @a __r.
+     364              :        *  @param  __r  A %shared_ptr rvalue.
+     365              :        *  @post   *this contains the old value of @a __r, @a __r is empty.
+     366              :        */
+     367              :       template<typename _Yp, typename = _Constructible<shared_ptr<_Yp>>>
+     368           22 :         shared_ptr(shared_ptr<_Yp>&& __r) noexcept
+     369           22 :         : __shared_ptr<_Tp>(std::move(__r)) { }
+     370              : 
+     371              :       /**
+     372              :        *  @brief  Constructs a %shared_ptr that shares ownership with @a __r
+     373              :        *          and stores a copy of the pointer stored in @a __r.
+     374              :        *  @param  __r  A weak_ptr.
+     375              :        *  @post   use_count() == __r.use_count()
+     376              :        *  @throw  bad_weak_ptr when __r.expired(),
+     377              :        *          in which case the constructor has no effect.
+     378              :        */
+     379              :       template<typename _Yp, typename = _Constructible<const weak_ptr<_Yp>&>>
+     380              :         explicit shared_ptr(const weak_ptr<_Yp>& __r)
+     381              :         : __shared_ptr<_Tp>(__r) { }
+     382              : 
+     383              : #if _GLIBCXX_USE_DEPRECATED
+     384              : #pragma GCC diagnostic push
+     385              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+     386              :       template<typename _Yp, typename = _Constructible<auto_ptr<_Yp>>>
+     387              :         shared_ptr(auto_ptr<_Yp>&& __r);
+     388              : #pragma GCC diagnostic pop
+     389              : #endif
+     390              : 
+     391              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     392              :       // 2399. shared_ptr's constructor from unique_ptr should be constrained
+     393              :       template<typename _Yp, typename _Del,
+     394              :                typename = _Constructible<unique_ptr<_Yp, _Del>>>
+     395              :         shared_ptr(unique_ptr<_Yp, _Del>&& __r)
+     396              :         : __shared_ptr<_Tp>(std::move(__r)) { }
+     397              : 
+     398              : #if __cplusplus <= 201402L && _GLIBCXX_USE_DEPRECATED
+     399              :       // This non-standard constructor exists to support conversions that
+     400              :       // were possible in C++11 and C++14 but are ill-formed in C++17.
+     401              :       // If an exception is thrown this constructor has no effect.
+     402              :       template<typename _Yp, typename _Del,
+     403              :                 _Constructible<unique_ptr<_Yp, _Del>, __sp_array_delete>* = 0>
+     404              :         shared_ptr(unique_ptr<_Yp, _Del>&& __r)
+     405              :         : __shared_ptr<_Tp>(std::move(__r), __sp_array_delete()) { }
+     406              : #endif
+     407              : 
+     408              :       /**
+     409              :        *  @brief  Construct an empty %shared_ptr.
+     410              :        *  @post   use_count() == 0 && get() == nullptr
+     411              :        */
+     412            0 :       constexpr shared_ptr(nullptr_t) noexcept : shared_ptr() { }
+     413              : 
+     414              :       shared_ptr& operator=(const shared_ptr&) noexcept = default;
+     415              : 
+     416              :       template<typename _Yp>
+     417              :         _Assignable<const shared_ptr<_Yp>&>
+     418              :         operator=(const shared_ptr<_Yp>& __r) noexcept
+     419              :         {
+     420              :           this->__shared_ptr<_Tp>::operator=(__r);
+     421              :           return *this;
+     422              :         }
+     423              : 
+     424              : #if _GLIBCXX_USE_DEPRECATED
+     425              : #pragma GCC diagnostic push
+     426              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+     427              :       template<typename _Yp>
+     428              :         _Assignable<auto_ptr<_Yp>>
+     429              :         operator=(auto_ptr<_Yp>&& __r)
+     430              :         {
+     431              :           this->__shared_ptr<_Tp>::operator=(std::move(__r));
+     432              :           return *this;
+     433              :         }
+     434              : #pragma GCC diagnostic pop
+     435              : #endif
+     436              : 
+     437              :       shared_ptr&
+     438            0 :       operator=(shared_ptr&& __r) noexcept
+     439              :       {
+     440            0 :         this->__shared_ptr<_Tp>::operator=(std::move(__r));
+     441            0 :         return *this;
+     442              :       }
+     443              : 
+     444              :       template<class _Yp>
+     445              :         _Assignable<shared_ptr<_Yp>>
+     446              :         operator=(shared_ptr<_Yp>&& __r) noexcept
+     447              :         {
+     448              :           this->__shared_ptr<_Tp>::operator=(std::move(__r));
+     449              :           return *this;
+     450              :         }
+     451              : 
+     452              :       template<typename _Yp, typename _Del>
+     453              :         _Assignable<unique_ptr<_Yp, _Del>>
+     454              :         operator=(unique_ptr<_Yp, _Del>&& __r)
+     455              :         {
+     456              :           this->__shared_ptr<_Tp>::operator=(std::move(__r));
+     457              :           return *this;
+     458              :         }
+     459              : 
+     460              :     private:
+     461              :       // This constructor is non-standard, it is used by allocate_shared.
+     462              :       template<typename _Alloc, typename... _Args>
+     463           20 :         shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args)
+     464           20 :         : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...)
+     465           20 :         { }
+     466              : 
+     467              :       template<typename _Yp, typename _Alloc, typename... _Args>
+     468              :         friend shared_ptr<_NonArray<_Yp>>
+     469              :         allocate_shared(const _Alloc&, _Args&&...);
+     470              : 
+     471              :       template<typename _Yp, typename... _Args>
+     472              :         friend shared_ptr<_NonArray<_Yp>>
+     473              :         make_shared(_Args&&...);
+     474              : 
+     475              : #if __cpp_lib_shared_ptr_arrays >= 201707L
+     476              :       // This constructor is non-standard, it is used by allocate_shared<T[]>.
+     477              :       template<typename _Alloc, typename _Init = const remove_extent_t<_Tp>*>
+     478              :         shared_ptr(const _Sp_counted_array_base<_Alloc>& __a,
+     479              :                    _Init __init = nullptr)
+     480              :         : __shared_ptr<_Tp>(__a, __init)
+     481              :         { }
+     482              : 
+     483              :       template<typename _Yp, typename _Alloc>
+     484              :         friend shared_ptr<_UnboundedArray<_Yp>>
+     485              :         allocate_shared(const _Alloc&, size_t);
+     486              : 
+     487              :       template<typename _Yp>
+     488              :         friend shared_ptr<_UnboundedArray<_Yp>>
+     489              :         make_shared(size_t);
+     490              : 
+     491              :       template<typename _Yp, typename _Alloc>
+     492              :         friend shared_ptr<_UnboundedArray<_Yp>>
+     493              :         allocate_shared(const _Alloc&, size_t, const remove_extent_t<_Yp>&);
+     494              : 
+     495              :       template<typename _Yp>
+     496              :         friend shared_ptr<_UnboundedArray<_Yp>>
+     497              :         make_shared(size_t, const remove_extent_t<_Yp>&);
+     498              : 
+     499              :       template<typename _Yp, typename _Alloc>
+     500              :         friend shared_ptr<_BoundedArray<_Yp>>
+     501              :         allocate_shared(const _Alloc&);
+     502              : 
+     503              :       template<typename _Yp>
+     504              :         friend shared_ptr<_BoundedArray<_Yp>>
+     505              :         make_shared();
+     506              : 
+     507              :       template<typename _Yp, typename _Alloc>
+     508              :         friend shared_ptr<_BoundedArray<_Yp>>
+     509              :         allocate_shared(const _Alloc&, const remove_extent_t<_Yp>&);
+     510              : 
+     511              :       template<typename _Yp>
+     512              :         friend shared_ptr<_BoundedArray<_Yp>>
+     513              :         make_shared(const remove_extent_t<_Yp>&);
+     514              : 
+     515              : #if __cpp_lib_smart_ptr_for_overwrite
+     516              :       template<typename _Yp, typename _Alloc>
+     517              :         friend shared_ptr<_NotUnboundedArray<_Yp>>
+     518              :         allocate_shared_for_overwrite(const _Alloc&);
+     519              : 
+     520              :       template<typename _Yp>
+     521              :         friend shared_ptr<_NotUnboundedArray<_Yp>>
+     522              :         make_shared_for_overwrite();
+     523              : 
+     524              :       template<typename _Yp, typename _Alloc>
+     525              :         friend shared_ptr<_UnboundedArray<_Yp>>
+     526              :         allocate_shared_for_overwrite(const _Alloc&, size_t);
+     527              : 
+     528              :       template<typename _Yp>
+     529              :         friend shared_ptr<_UnboundedArray<_Yp>>
+     530              :         make_shared_for_overwrite(size_t);
+     531              : #endif
+     532              : #endif
+     533              : 
+     534              :       // This constructor is non-standard, it is used by weak_ptr::lock().
+     535              :       shared_ptr(const weak_ptr<_Tp>& __r, std::nothrow_t) noexcept
+     536              :       : __shared_ptr<_Tp>(__r, std::nothrow) { }
+     537              : 
+     538              :       friend class weak_ptr<_Tp>;
+     539              :     };
+     540              : 
+     541              : #if __cpp_deduction_guides >= 201606
+     542              :   template<typename _Tp>
+     543              :     shared_ptr(weak_ptr<_Tp>) ->  shared_ptr<_Tp>;
+     544              :   template<typename _Tp, typename _Del>
+     545              :     shared_ptr(unique_ptr<_Tp, _Del>) ->  shared_ptr<_Tp>;
+     546              : #endif
+     547              : 
+     548              :   // 20.7.2.2.7 shared_ptr comparisons
+     549              : 
+     550              :   /// @relates shared_ptr @{
+     551              : 
+     552              :   /// Equality operator for shared_ptr objects, compares the stored pointers
+     553              :   template<typename _Tp, typename _Up>
+     554              :     _GLIBCXX_NODISCARD inline bool
+     555              :     operator==(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
+     556              :     { return __a.get() == __b.get(); }
+     557              : 
+     558              :   /// shared_ptr comparison with nullptr
+     559              :   template<typename _Tp>
+     560              :     _GLIBCXX_NODISCARD inline bool
+     561            0 :     operator==(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+     562            0 :     { return !__a; }
+     563              : 
+     564              : #ifdef __cpp_lib_three_way_comparison
+     565              :   template<typename _Tp, typename _Up>
+     566              :     inline strong_ordering
+     567              :     operator<=>(const shared_ptr<_Tp>& __a,
+     568              :                 const shared_ptr<_Up>& __b) noexcept
+     569              :     { return compare_three_way()(__a.get(), __b.get()); }
+     570              : 
+     571              :   template<typename _Tp>
+     572              :     inline strong_ordering
+     573              :     operator<=>(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+     574              :     {
+     575              :       using pointer = typename shared_ptr<_Tp>::element_type*;
+     576              :       return compare_three_way()(__a.get(), static_cast<pointer>(nullptr));
+     577              :     }
+     578              : #else
+     579              :   /// shared_ptr comparison with nullptr
+     580              :   template<typename _Tp>
+     581              :     _GLIBCXX_NODISCARD inline bool
+     582              :     operator==(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
+     583              :     { return !__a; }
+     584              : 
+     585              :   /// Inequality operator for shared_ptr objects, compares the stored pointers
+     586              :   template<typename _Tp, typename _Up>
+     587              :     _GLIBCXX_NODISCARD inline bool
+     588              :     operator!=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
+     589              :     { return __a.get() != __b.get(); }
+     590              : 
+     591              :   /// shared_ptr comparison with nullptr
+     592              :   template<typename _Tp>
+     593              :     _GLIBCXX_NODISCARD inline bool
+     594              :     operator!=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+     595              :     { return (bool)__a; }
+     596              : 
+     597              :   /// shared_ptr comparison with nullptr
+     598              :   template<typename _Tp>
+     599              :     _GLIBCXX_NODISCARD inline bool
+     600              :     operator!=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
+     601              :     { return (bool)__a; }
+     602              : 
+     603              :   /// Relational operator for shared_ptr objects, compares the stored pointers
+     604              :   template<typename _Tp, typename _Up>
+     605              :     _GLIBCXX_NODISCARD inline bool
+     606              :     operator<(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
+     607              :     {
+     608              :       using _Tp_elt = typename shared_ptr<_Tp>::element_type;
+     609              :       using _Up_elt = typename shared_ptr<_Up>::element_type;
+     610              :       using _Vp = typename common_type<_Tp_elt*, _Up_elt*>::type;
+     611              :       return less<_Vp>()(__a.get(), __b.get());
+     612              :     }
+     613              : 
+     614              :   /// shared_ptr comparison with nullptr
+     615              :   template<typename _Tp>
+     616              :     _GLIBCXX_NODISCARD inline bool
+     617              :     operator<(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+     618              :     {
+     619              :       using _Tp_elt = typename shared_ptr<_Tp>::element_type;
+     620              :       return less<_Tp_elt*>()(__a.get(), nullptr);
+     621              :     }
+     622              : 
+     623              :   /// shared_ptr comparison with nullptr
+     624              :   template<typename _Tp>
+     625              :     _GLIBCXX_NODISCARD inline bool
+     626              :     operator<(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
+     627              :     {
+     628              :       using _Tp_elt = typename shared_ptr<_Tp>::element_type;
+     629              :       return less<_Tp_elt*>()(nullptr, __a.get());
+     630              :     }
+     631              : 
+     632              :   /// Relational operator for shared_ptr objects, compares the stored pointers
+     633              :   template<typename _Tp, typename _Up>
+     634              :     _GLIBCXX_NODISCARD inline bool
+     635              :     operator<=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
+     636              :     { return !(__b < __a); }
+     637              : 
+     638              :   /// shared_ptr comparison with nullptr
+     639              :   template<typename _Tp>
+     640              :     _GLIBCXX_NODISCARD inline bool
+     641              :     operator<=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+     642              :     { return !(nullptr < __a); }
+     643              : 
+     644              :   /// shared_ptr comparison with nullptr
+     645              :   template<typename _Tp>
+     646              :     _GLIBCXX_NODISCARD inline bool
+     647              :     operator<=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
+     648              :     { return !(__a < nullptr); }
+     649              : 
+     650              :   /// Relational operator for shared_ptr objects, compares the stored pointers
+     651              :   template<typename _Tp, typename _Up>
+     652              :     _GLIBCXX_NODISCARD inline bool
+     653              :     operator>(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
+     654              :     { return (__b < __a); }
+     655              : 
+     656              :   /// shared_ptr comparison with nullptr
+     657              :   template<typename _Tp>
+     658              :     _GLIBCXX_NODISCARD inline bool
+     659              :     operator>(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+     660              :     { return nullptr < __a; }
+     661              : 
+     662              :   /// shared_ptr comparison with nullptr
+     663              :   template<typename _Tp>
+     664              :     _GLIBCXX_NODISCARD inline bool
+     665              :     operator>(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
+     666              :     { return __a < nullptr; }
+     667              : 
+     668              :   /// Relational operator for shared_ptr objects, compares the stored pointers
+     669              :   template<typename _Tp, typename _Up>
+     670              :     _GLIBCXX_NODISCARD inline bool
+     671              :     operator>=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
+     672              :     { return !(__a < __b); }
+     673              : 
+     674              :   /// shared_ptr comparison with nullptr
+     675              :   template<typename _Tp>
+     676              :     _GLIBCXX_NODISCARD inline bool
+     677              :     operator>=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+     678              :     { return !(__a < nullptr); }
+     679              : 
+     680              :   /// shared_ptr comparison with nullptr
+     681              :   template<typename _Tp>
+     682              :     _GLIBCXX_NODISCARD inline bool
+     683              :     operator>=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
+     684              :     { return !(nullptr < __a); }
+     685              : #endif
+     686              : 
+     687              :   // 20.7.2.2.8 shared_ptr specialized algorithms.
+     688              : 
+     689              :   /// Swap overload for shared_ptr
+     690              :   template<typename _Tp>
+     691              :     inline void
+     692              :     swap(shared_ptr<_Tp>& __a, shared_ptr<_Tp>& __b) noexcept
+     693              :     { __a.swap(__b); }
+     694              : 
+     695              :   // 20.7.2.2.9 shared_ptr casts.
+     696              : 
+     697              :   /// Convert type of `shared_ptr`, via `static_cast`
+     698              :   template<typename _Tp, typename _Up>
+     699              :     inline shared_ptr<_Tp>
+     700              :     static_pointer_cast(const shared_ptr<_Up>& __r) noexcept
+     701              :     {
+     702              :       using _Sp = shared_ptr<_Tp>;
+     703              :       return _Sp(__r, static_cast<typename _Sp::element_type*>(__r.get()));
+     704              :     }
+     705              : 
+     706              :   /// Convert type of `shared_ptr`, via `const_cast`
+     707              :   template<typename _Tp, typename _Up>
+     708              :     inline shared_ptr<_Tp>
+     709              :     const_pointer_cast(const shared_ptr<_Up>& __r) noexcept
+     710              :     {
+     711              :       using _Sp = shared_ptr<_Tp>;
+     712              :       return _Sp(__r, const_cast<typename _Sp::element_type*>(__r.get()));
+     713              :     }
+     714              : 
+     715              :   /// Convert type of `shared_ptr`, via `dynamic_cast`
+     716              :   template<typename _Tp, typename _Up>
+     717              :     inline shared_ptr<_Tp>
+     718              :     dynamic_pointer_cast(const shared_ptr<_Up>& __r) noexcept
+     719              :     {
+     720              :       using _Sp = shared_ptr<_Tp>;
+     721              :       if (auto* __p = dynamic_cast<typename _Sp::element_type*>(__r.get()))
+     722              :         return _Sp(__r, __p);
+     723              :       return _Sp();
+     724              :     }
+     725              : 
+     726              : #if __cplusplus >= 201703L
+     727              :   /// Convert type of `shared_ptr`, via `reinterpret_cast`
+     728              :   /// @since C++17
+     729              :   template<typename _Tp, typename _Up>
+     730              :     inline shared_ptr<_Tp>
+     731              :     reinterpret_pointer_cast(const shared_ptr<_Up>& __r) noexcept
+     732              :     {
+     733              :       using _Sp = shared_ptr<_Tp>;
+     734              :       return _Sp(__r, reinterpret_cast<typename _Sp::element_type*>(__r.get()));
+     735              :     }
+     736              : 
+     737              : #if __cplusplus > 201703L
+     738              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     739              :   // 2996. Missing rvalue overloads for shared_ptr operations
+     740              : 
+     741              :   /// Convert type of `shared_ptr` rvalue, via `static_cast`
+     742              :   /// @since C++20
+     743              :   template<typename _Tp, typename _Up>
+     744              :     inline shared_ptr<_Tp>
+     745              :     static_pointer_cast(shared_ptr<_Up>&& __r) noexcept
+     746              :     {
+     747              :       using _Sp = shared_ptr<_Tp>;
+     748              :       return _Sp(std::move(__r),
+     749              :                  static_cast<typename _Sp::element_type*>(__r.get()));
+     750              :     }
+     751              : 
+     752              :   /// Convert type of `shared_ptr` rvalue, via `const_cast`
+     753              :   /// @since C++20
+     754              :   template<typename _Tp, typename _Up>
+     755              :     inline shared_ptr<_Tp>
+     756              :     const_pointer_cast(shared_ptr<_Up>&& __r) noexcept
+     757              :     {
+     758              :       using _Sp = shared_ptr<_Tp>;
+     759              :       return _Sp(std::move(__r),
+     760              :                  const_cast<typename _Sp::element_type*>(__r.get()));
+     761              :     }
+     762              : 
+     763              :   /// Convert type of `shared_ptr` rvalue, via `dynamic_cast`
+     764              :   /// @since C++20
+     765              :   template<typename _Tp, typename _Up>
+     766              :     inline shared_ptr<_Tp>
+     767              :     dynamic_pointer_cast(shared_ptr<_Up>&& __r) noexcept
+     768              :     {
+     769              :       using _Sp = shared_ptr<_Tp>;
+     770              :       if (auto* __p = dynamic_cast<typename _Sp::element_type*>(__r.get()))
+     771              :         return _Sp(std::move(__r), __p);
+     772              :       return _Sp();
+     773              :     }
+     774              : 
+     775              :   /// Convert type of `shared_ptr` rvalue, via `reinterpret_cast`
+     776              :   /// @since C++20
+     777              :   template<typename _Tp, typename _Up>
+     778              :     inline shared_ptr<_Tp>
+     779              :     reinterpret_pointer_cast(shared_ptr<_Up>&& __r) noexcept
+     780              :     {
+     781              :       using _Sp = shared_ptr<_Tp>;
+     782              :       return _Sp(std::move(__r),
+     783              :                  reinterpret_cast<typename _Sp::element_type*>(__r.get()));
+     784              :     }
+     785              : #endif // C++20
+     786              : #endif // C++17
+     787              : 
+     788              :   /// @}
+     789              : 
+     790              :   /**
+     791              :    * @brief  A non-owning observer for a pointer owned by a shared_ptr
+     792              :    * @headerfile memory
+     793              :    * @since C++11
+     794              :    *
+     795              :    * A weak_ptr provides a safe alternative to a raw pointer when you want
+     796              :    * a non-owning reference to an object that is managed by a shared_ptr.
+     797              :    *
+     798              :    * Unlike a raw pointer, a weak_ptr can be converted to a new shared_ptr
+     799              :    * that shares ownership with every other shared_ptr that already owns
+     800              :    * the pointer. In other words you can upgrade from a non-owning "weak"
+     801              :    * reference to an owning shared_ptr, without having access to any of
+     802              :    * the existing shared_ptr objects.
+     803              :    *
+     804              :    * Also unlike a raw pointer, a weak_ptr does not become "dangling" after
+     805              :    * the object it points to has been destroyed. Instead, a weak_ptr
+     806              :    * becomes _expired_ and can no longer be converted to a shared_ptr that
+     807              :    * owns the freed pointer, so you cannot accidentally access the pointed-to
+     808              :    * object after it has been destroyed.
+     809              :    */
+     810              :   template<typename _Tp>
+     811              :     class weak_ptr : public __weak_ptr<_Tp>
+     812              :     {
+     813              :       template<typename _Arg>
+     814              :         using _Constructible = typename enable_if<
+     815              :           is_constructible<__weak_ptr<_Tp>, _Arg>::value
+     816              :         >::type;
+     817              : 
+     818              :       template<typename _Arg>
+     819              :         using _Assignable = typename enable_if<
+     820              :           is_assignable<__weak_ptr<_Tp>&, _Arg>::value, weak_ptr&
+     821              :         >::type;
+     822              : 
+     823              :     public:
+     824            0 :       constexpr weak_ptr() noexcept = default;
+     825              : 
+     826              :       template<typename _Yp,
+     827              :                typename = _Constructible<const shared_ptr<_Yp>&>>
+     828              :         weak_ptr(const shared_ptr<_Yp>& __r) noexcept
+     829              :         : __weak_ptr<_Tp>(__r) { }
+     830              : 
+     831              :       weak_ptr(const weak_ptr&) noexcept = default;
+     832              : 
+     833              :       template<typename _Yp, typename = _Constructible<const weak_ptr<_Yp>&>>
+     834              :         weak_ptr(const weak_ptr<_Yp>& __r) noexcept
+     835              :         : __weak_ptr<_Tp>(__r) { }
+     836              : 
+     837              :       weak_ptr(weak_ptr&&) noexcept = default;
+     838              : 
+     839              :       template<typename _Yp, typename = _Constructible<weak_ptr<_Yp>>>
+     840              :         weak_ptr(weak_ptr<_Yp>&& __r) noexcept
+     841              :         : __weak_ptr<_Tp>(std::move(__r)) { }
+     842              : 
+     843              :       weak_ptr&
+     844              :       operator=(const weak_ptr& __r) noexcept = default;
+     845              : 
+     846              :       template<typename _Yp>
+     847              :         _Assignable<const weak_ptr<_Yp>&>
+     848              :         operator=(const weak_ptr<_Yp>& __r) noexcept
+     849              :         {
+     850              :           this->__weak_ptr<_Tp>::operator=(__r);
+     851              :           return *this;
+     852              :         }
+     853              : 
+     854              :       template<typename _Yp>
+     855              :         _Assignable<const shared_ptr<_Yp>&>
+     856              :         operator=(const shared_ptr<_Yp>& __r) noexcept
+     857              :         {
+     858              :           this->__weak_ptr<_Tp>::operator=(__r);
+     859              :           return *this;
+     860              :         }
+     861              : 
+     862              :       weak_ptr&
+     863              :       operator=(weak_ptr&& __r) noexcept = default;
+     864              : 
+     865              :       template<typename _Yp>
+     866              :         _Assignable<weak_ptr<_Yp>>
+     867              :         operator=(weak_ptr<_Yp>&& __r) noexcept
+     868              :         {
+     869              :           this->__weak_ptr<_Tp>::operator=(std::move(__r));
+     870              :           return *this;
+     871              :         }
+     872              : 
+     873              :       shared_ptr<_Tp>
+     874              :       lock() const noexcept
+     875              :       { return shared_ptr<_Tp>(*this, std::nothrow); }
+     876              :     };
+     877              : 
+     878              : #if __cpp_deduction_guides >= 201606
+     879              :   template<typename _Tp>
+     880              :     weak_ptr(shared_ptr<_Tp>) ->  weak_ptr<_Tp>;
+     881              : #endif
+     882              : 
+     883              :   // 20.7.2.3.6 weak_ptr specialized algorithms.
+     884              :   /// Swap overload for weak_ptr
+     885              :   /// @relates weak_ptr
+     886              :   template<typename _Tp>
+     887              :     inline void
+     888              :     swap(weak_ptr<_Tp>& __a, weak_ptr<_Tp>& __b) noexcept
+     889              :     { __a.swap(__b); }
+     890              : 
+     891              : 
+     892              :   /// Primary template owner_less
+     893              :   template<typename _Tp = void>
+     894              :     struct owner_less;
+     895              : 
+     896              :   /// Void specialization of owner_less compares either shared_ptr or weak_ptr
+     897              :   template<>
+     898              :     struct owner_less<void> : _Sp_owner_less<void, void>
+     899              :     { };
+     900              : 
+     901              :   /// Partial specialization of owner_less for shared_ptr.
+     902              :   template<typename _Tp>
+     903              :     struct owner_less<shared_ptr<_Tp>>
+     904              :     : public _Sp_owner_less<shared_ptr<_Tp>, weak_ptr<_Tp>>
+     905              :     { };
+     906              : 
+     907              :   /// Partial specialization of owner_less for weak_ptr.
+     908              :   template<typename _Tp>
+     909              :     struct owner_less<weak_ptr<_Tp>>
+     910              :     : public _Sp_owner_less<weak_ptr<_Tp>, shared_ptr<_Tp>>
+     911              :     { };
+     912              : 
+     913              :   /**
+     914              :    * @brief Base class allowing use of the member function `shared_from_this`.
+     915              :    * @headerfile memory
+     916              :    * @since C++11
+     917              :    */
+     918              :   template<typename _Tp>
+     919              :     class enable_shared_from_this
+     920              :     {
+     921              :     protected:
+     922              :       constexpr enable_shared_from_this() noexcept { }
+     923              : 
+     924              :       enable_shared_from_this(const enable_shared_from_this&) noexcept { }
+     925              : 
+     926              :       enable_shared_from_this&
+     927              :       operator=(const enable_shared_from_this&) noexcept
+     928              :       { return *this; }
+     929              : 
+     930              :       ~enable_shared_from_this() { }
+     931              : 
+     932              :     public:
+     933              :       shared_ptr<_Tp>
+     934              :       shared_from_this()
+     935              :       { return shared_ptr<_Tp>(this->_M_weak_this); }
+     936              : 
+     937              :       shared_ptr<const _Tp>
+     938              :       shared_from_this() const
+     939              :       { return shared_ptr<const _Tp>(this->_M_weak_this); }
+     940              : 
+     941              : #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
+     942              : #define __cpp_lib_enable_shared_from_this 201603L
+     943              :       /** @{
+     944              :        * Get a `weak_ptr` referring to the object that has `*this` as its base.
+     945              :        * @since C++17
+     946              :        */
+     947              :       weak_ptr<_Tp>
+     948              :       weak_from_this() noexcept
+     949              :       { return this->_M_weak_this; }
+     950              : 
+     951              :       weak_ptr<const _Tp>
+     952              :       weak_from_this() const noexcept
+     953              :       { return this->_M_weak_this; }
+     954              :       /// @}
+     955              : #endif
+     956              : 
+     957              :     private:
+     958              :       template<typename _Tp1>
+     959              :         void
+     960              :         _M_weak_assign(_Tp1* __p, const __shared_count<>& __n) const noexcept
+     961              :         { _M_weak_this._M_assign(__p, __n); }
+     962              : 
+     963              :       // Found by ADL when this is an associated class.
+     964              :       friend const enable_shared_from_this*
+     965              :       __enable_shared_from_this_base(const __shared_count<>&,
+     966              :                                      const enable_shared_from_this* __p)
+     967              :       { return __p; }
+     968              : 
+     969              :       template<typename, _Lock_policy>
+     970              :         friend class __shared_ptr;
+     971              : 
+     972              :       mutable weak_ptr<_Tp>  _M_weak_this;
+     973              :     };
+     974              : 
+     975              :   /// @relates shared_ptr @{
+     976              : 
+     977              :   /**
+     978              :    *  @brief  Create an object that is owned by a shared_ptr.
+     979              :    *  @param  __a     An allocator.
+     980              :    *  @param  __args  Arguments for the @a _Tp object's constructor.
+     981              :    *  @return A shared_ptr that owns the newly created object.
+     982              :    *  @throw  An exception thrown from @a _Alloc::allocate or from the
+     983              :    *          constructor of @a _Tp.
+     984              :    *
+     985              :    *  A copy of @a __a will be used to allocate memory for the shared_ptr
+     986              :    *  and the new object.
+     987              :    */
+     988              :   template<typename _Tp, typename _Alloc, typename... _Args>
+     989              :     inline shared_ptr<_NonArray<_Tp>>
+     990              :     allocate_shared(const _Alloc& __a, _Args&&... __args)
+     991              :     {
+     992              :       return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a},
+     993              :                              std::forward<_Args>(__args)...);
+     994              :     }
+     995              : 
+     996              :   /**
+     997              :    *  @brief  Create an object that is owned by a shared_ptr.
+     998              :    *  @param  __args  Arguments for the @a _Tp object's constructor.
+     999              :    *  @return A shared_ptr that owns the newly created object.
+    1000              :    *  @throw  std::bad_alloc, or an exception thrown from the
+    1001              :    *          constructor of @a _Tp.
+    1002              :    */
+    1003              :   template<typename _Tp, typename... _Args>
+    1004              :     inline shared_ptr<_NonArray<_Tp>>
+    1005           20 :     make_shared(_Args&&... __args)
+    1006              :     {
+    1007              :       using _Alloc = allocator<void>;
+    1008              :       _Alloc __a;
+    1009              :       return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a},
+    1010           40 :                              std::forward<_Args>(__args)...);
+    1011              :     }
+    1012              : 
+    1013              : #if __cpp_lib_shared_ptr_arrays >= 201707L
+    1014              :   /// @cond undocumented
+    1015              :   template<typename _Tp, typename _Alloc = allocator<void>>
+    1016              :     auto
+    1017              :     __make_shared_arr_tag(size_t __n, const _Alloc& __a = _Alloc()) noexcept
+    1018              :     {
+    1019              :       using _Up = remove_all_extents_t<_Tp>;
+    1020              :       using _UpAlloc = __alloc_rebind<_Alloc, _Up>;
+    1021              :       size_t __s = sizeof(remove_extent_t<_Tp>) / sizeof(_Up);
+    1022              :       if (__builtin_mul_overflow(__s, __n, &__n))
+    1023              :         std::__throw_bad_array_new_length();
+    1024              :       return _Sp_counted_array_base<_UpAlloc>{_UpAlloc(__a), __n};
+    1025              :     }
+    1026              :   /// @endcond
+    1027              : 
+    1028              :   template<typename _Tp, typename _Alloc>
+    1029              :     inline shared_ptr<_UnboundedArray<_Tp>>
+    1030              :     allocate_shared(const _Alloc& __a, size_t __n)
+    1031              :     {
+    1032              :       return shared_ptr<_Tp>(std::__make_shared_arr_tag<_Tp>(__n, __a));
+    1033              :     }
+    1034              : 
+    1035              :   template<typename _Tp>
+    1036              :     inline shared_ptr<_UnboundedArray<_Tp>>
+    1037              :     make_shared(size_t __n)
+    1038              :     {
+    1039              :       return shared_ptr<_Tp>(std::__make_shared_arr_tag<_Tp>(__n));
+    1040              :     }
+    1041              : 
+    1042              :   template<typename _Tp, typename _Alloc>
+    1043              :     inline shared_ptr<_UnboundedArray<_Tp>>
+    1044              :     allocate_shared(const _Alloc& __a, size_t __n,
+    1045              :                     const remove_extent_t<_Tp>& __u)
+    1046              :     {
+    1047              :       return shared_ptr<_Tp>(std::__make_shared_arr_tag<_Tp>(__n, __a),
+    1048              :                              std::__addressof(__u));
+    1049              :     }
+    1050              : 
+    1051              :   template<typename _Tp>
+    1052              :     inline shared_ptr<_UnboundedArray<_Tp>>
+    1053              :     make_shared(size_t __n, const remove_extent_t<_Tp>& __u)
+    1054              :     {
+    1055              :       return shared_ptr<_Tp>(std::__make_shared_arr_tag<_Tp>(__n),
+    1056              :                              std::__addressof(__u));
+    1057              :     }
+    1058              : 
+    1059              :   /// @cond undocumented
+    1060              :   template<typename _Tp, typename _Alloc = allocator<void>>
+    1061              :     auto
+    1062              :     __make_shared_arrN_tag(const _Alloc& __a = _Alloc()) noexcept
+    1063              :     {
+    1064              :       using _Up = remove_all_extents_t<_Tp>;
+    1065              :       using _UpAlloc = __alloc_rebind<_Alloc, _Up>;
+    1066              :       size_t __n = sizeof(_Tp) / sizeof(_Up);
+    1067              :       return _Sp_counted_array_base<_UpAlloc>{_UpAlloc(__a), __n};
+    1068              :     }
+    1069              :   /// @endcond
+    1070              : 
+    1071              :   template<typename _Tp, typename _Alloc>
+    1072              :     inline shared_ptr<_BoundedArray<_Tp>>
+    1073              :     allocate_shared(const _Alloc& __a)
+    1074              :     {
+    1075              :       return shared_ptr<_Tp>(std::__make_shared_arrN_tag<_Tp>(__a));
+    1076              :     }
+    1077              : 
+    1078              :   template<typename _Tp>
+    1079              :     inline shared_ptr<_BoundedArray<_Tp>>
+    1080              :     make_shared()
+    1081              :     {
+    1082              :       return shared_ptr<_Tp>(std::__make_shared_arrN_tag<_Tp>());
+    1083              :     }
+    1084              : 
+    1085              :   template<typename _Tp, typename _Alloc>
+    1086              :     inline shared_ptr<_BoundedArray<_Tp>>
+    1087              :     allocate_shared(const _Alloc& __a, const remove_extent_t<_Tp>& __u)
+    1088              :     {
+    1089              :       return shared_ptr<_Tp>(std::__make_shared_arrN_tag<_Tp>(__a),
+    1090              :                              std::__addressof(__u));
+    1091              :     }
+    1092              : 
+    1093              :   template<typename _Tp>
+    1094              :     inline shared_ptr<_BoundedArray<_Tp>>
+    1095              :     make_shared(const remove_extent_t<_Tp>& __u)
+    1096              :     {
+    1097              :       return shared_ptr<_Tp>(std::__make_shared_arrN_tag<_Tp>(),
+    1098              :                              std::__addressof(__u));
+    1099              :     }
+    1100              : 
+    1101              : #if __cpp_lib_smart_ptr_for_overwrite
+    1102              :   template<typename _Tp, typename _Alloc>
+    1103              :     inline shared_ptr<_NotUnboundedArray<_Tp>>
+    1104              :     allocate_shared_for_overwrite(const _Alloc& __a)
+    1105              :     {
+    1106              :       if constexpr (is_array_v<_Tp>)
+    1107              :         return shared_ptr<_Tp>(std::__make_shared_arrN_tag<_Tp>(__a),
+    1108              :                                _Sp_overwrite_tag{});
+    1109              :       else
+    1110              :         {
+    1111              :           // Rebind the allocator to _Sp_overwrite_tag, so that the
+    1112              :           // relevant _Sp_counted_ptr_inplace specialization is used.
+    1113              :           using _Alloc2 = __alloc_rebind<_Alloc, _Sp_overwrite_tag>;
+    1114              :           _Alloc2 __a2 = __a;
+    1115              :           return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc2>{__a2});
+    1116              :         }
+    1117              :     }
+    1118              : 
+    1119              :   template<typename _Tp>
+    1120              :     inline shared_ptr<_NotUnboundedArray<_Tp>>
+    1121              :     make_shared_for_overwrite()
+    1122              :     {
+    1123              :       if constexpr (is_array_v<_Tp>)
+    1124              :         return shared_ptr<_Tp>(std::__make_shared_arrN_tag<_Tp>(),
+    1125              :                                _Sp_overwrite_tag{});
+    1126              :       else
+    1127              :         {
+    1128              :           using _Alloc = allocator<_Sp_overwrite_tag>;
+    1129              :           return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{{}});
+    1130              :         }
+    1131              :     }
+    1132              : 
+    1133              :   template<typename _Tp, typename _Alloc>
+    1134              :     inline shared_ptr<_UnboundedArray<_Tp>>
+    1135              :     allocate_shared_for_overwrite(const _Alloc& __a, size_t __n)
+    1136              :     {
+    1137              :       return shared_ptr<_Tp>(std::__make_shared_arr_tag<_Tp>(__n, __a),
+    1138              :                              _Sp_overwrite_tag{});
+    1139              :     }
+    1140              : 
+    1141              :   template<typename _Tp>
+    1142              :     inline shared_ptr<_UnboundedArray<_Tp>>
+    1143              :     make_shared_for_overwrite(size_t __n)
+    1144              :     {
+    1145              :       return shared_ptr<_Tp>(std::__make_shared_arr_tag<_Tp>(__n),
+    1146              :                              _Sp_overwrite_tag{});
+    1147              :     }
+    1148              : #endif // smart_ptr_for_overwrite
+    1149              : #endif // shared_ptr_arrays
+    1150              : 
+    1151              :   /// std::hash specialization for shared_ptr.
+    1152              :   template<typename _Tp>
+    1153              :     struct hash<shared_ptr<_Tp>>
+    1154              :     : public __hash_base<size_t, shared_ptr<_Tp>>
+    1155              :     {
+    1156              :       size_t
+    1157              :       operator()(const shared_ptr<_Tp>& __s) const noexcept
+    1158              :       {
+    1159              :         return std::hash<typename shared_ptr<_Tp>::element_type*>()(__s.get());
+    1160              :       }
+    1161              :     };
+    1162              : 
+    1163              :   /// @} relates shared_ptr
+    1164              :   /// @} group pointer_abstractions
+    1165              : 
+    1166              : #if __cplusplus >= 201703L
+    1167              :   namespace __detail::__variant
+    1168              :   {
+    1169              :     template<typename> struct _Never_valueless_alt; // see <variant>
+    1170              : 
+    1171              :     // Provide the strong exception-safety guarantee when emplacing a
+    1172              :     // shared_ptr into a variant.
+    1173              :     template<typename _Tp>
+    1174              :       struct _Never_valueless_alt<std::shared_ptr<_Tp>>
+    1175              :       : std::true_type
+    1176              :       { };
+    1177              : 
+    1178              :     // Provide the strong exception-safety guarantee when emplacing a
+    1179              :     // weak_ptr into a variant.
+    1180              :     template<typename _Tp>
+    1181              :       struct _Never_valueless_alt<std::weak_ptr<_Tp>>
+    1182              :       : std::true_type
+    1183              :       { };
+    1184              :   }  // namespace __detail::__variant
+    1185              : #endif // C++17
+    1186              : 
+    1187              : _GLIBCXX_END_NAMESPACE_VERSION
+    1188              : } // namespace
+    1189              : 
+    1190              : #endif // _SHARED_PTR_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/shared_ptr_base.h.func-c.html b/html/usr/include/c++/13/bits/shared_ptr_base.h.func-c.html new file mode 100644 index 0000000..901a282 --- /dev/null +++ b/html/usr/include/c++/13/bits/shared_ptr_base.h.func-c.html @@ -0,0 +1,803 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/shared_ptr_base.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - shared_ptr_base.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:62.8 %13786
Test Date:2024-04-30 13:17:26Functions:41.5 %8234
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt12__shared_ptrIN5torch8autograd4NodeELN9__gnu_cxx12_Lock_policyE2EEcvbEv0
_ZNKSt12__shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EEcvbEv0
_ZNKSt12__shared_ptrIN5torch8autograd4NodeELN9__gnu_cxx12_Lock_policyE2EEcvbEv0
_ZNKSt19__shared_ptr_accessINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEdeEv0
_ZNKSt19__shared_ptr_accessIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEdeEv0
_ZNKSt19__shared_ptr_accessINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEdeEv0
_ZNSt10__weak_ptrIN5torch8autograd4NodeELN9__gnu_cxx12_Lock_policyE2EEC2Ev0
_ZNSt10__weak_ptrIN5torch8autograd4NodeELN9__gnu_cxx12_Lock_policyE2EED2Ev0
_ZNSt12__shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EE4swapERS9_0
_ZNSt12__shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EEaSEOS9_0
_ZNSt12__shared_ptrIN5torch8autograd4NodeELN9__gnu_cxx12_Lock_policyE2EEC2Ev0
_ZNSt12__shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EEC2Ev0
_ZNSt12__shared_ptrIN5torch8autograd11ForwardGradELN9__gnu_cxx12_Lock_policyE2EEC2Ev0
_ZNSt12__shared_ptrIN5torch8autograd4NodeELN9__gnu_cxx12_Lock_policyE2EEC2Ev0
_ZNSt12__shared_ptrISt6vectorISt8functionIFN2at10TensorBaseERKS3_EESaIS7_EELN9__gnu_cxx12_Lock_policyE2EEC2Ev0
_ZNSt12__weak_countILN9__gnu_cxx12_Lock_policyE2EEC2Ev0
_ZNSt12__weak_countILN9__gnu_cxx12_Lock_policyE2EED2Ev0
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE10_M_destroyEv0
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE15_M_weak_releaseEv0
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE19_M_release_last_useEv0
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE24_M_release_last_use_coldEv0
_ZNSt19_Sp_make_shared_tag5_S_tiEv0
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE14_M_get_deleterERKSt9type_info0
_ZNSt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE14_M_get_deleterERKSt9type_info0
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE14_M_get_deleterERKSt9type_info0
_ZNSt12__shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EE31_M_enable_shared_from_this_withIS5_S5_EENSt9enable_ifIXntsrNS8_15__has_esft_baseIT0_vEE5valueEvE4typeEPT_20
_ZNSt12__shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EE31_M_enable_shared_from_this_withIS5_S5_EENSt9enable_ifIXntsrNS8_15__has_esft_baseIT0_vEE5valueEvE4typeEPT_0
_ZNSt12__shared_ptrIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEELN9__gnu_cxx12_Lock_policyE2EE31_M_enable_shared_from_this_withISA_SA_EENSt9enable_ifIXntsrNSD_15__has_esft_baseIT0_vEE5valueEvE4typeEPT_20
_ZNSt12__shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EEC2ISaIvEJRKSt6localeRNSt15regex_constants18syntax_option_typeEEEESt20_Sp_alloc_shared_tagIT_EDpOT0_20
_ZNSt12__shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EEC2ISaIvEJRKSt6localeRNSt15regex_constants18syntax_option_typeEEEESt20_Sp_alloc_shared_tagIT_EDpOT0_0
_ZNSt12__shared_ptrIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEELN9__gnu_cxx12_Lock_policyE2EEC2ISaIvEJRS9_EEESt20_Sp_alloc_shared_tagIT_EDpOT0_20
_ZNSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EEC2INSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvEJRKSt6localeRNSt15regex_constants18syntax_option_typeEEEERPT_St20_Sp_alloc_shared_tagIT0_EDpOT1_20
_ZNSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EEC2INSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvEJRKSt6localeRNSt15regex_constants18syntax_option_typeEEEERPT_St20_Sp_alloc_shared_tagIT0_EDpOT1_0
_ZNSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EEC2IN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvEJRSD_EEERPT_St20_Sp_alloc_shared_tagIT0_EDpOT1_20
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE10_M_destroyEv20
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE10_M_destroyEv0
_ZNSt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE10_M_destroyEv20
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv20
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv0
_ZNSt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv20
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE5_ImplC2ES6_20
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE5_ImplC2ES6_0
_ZNSt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE5_ImplC2ESB_20
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEC2IJRKSt6localeRNSt15regex_constants18syntax_option_typeEEEES6_DpOT_20
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEC2IJRKSt6localeRNSt15regex_constants18syntax_option_typeEEEES6_DpOT_0
_ZNSt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEC2IJRS9_EEESB_DpOT_20
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EED0Ev20
_ZNSt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EED0Ev0
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EED0Ev0
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EED2Ev0
_ZNSt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EED2Ev20
_ZNSt12__shared_ptrIN3c104TypeELN9__gnu_cxx12_Lock_policyE2EEC2EOS4_22
_ZNSt12__shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EEC2EOS9_0
_ZNSt12__shared_ptrIN5torch8autograd4NodeELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_0
_ZNSt12__shared_ptrIN3c104TypeELN9__gnu_cxx12_Lock_policyE2EEC2EOS4_2
_ZNSt12__shared_ptrIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEELN9__gnu_cxx12_Lock_policyE2EEC2EOS7_20
_ZNSt12__shared_ptrIN3c104TypeELN9__gnu_cxx12_Lock_policyE2EEC2INS0_10TensorTypeEvEEOS_IT_LS3_2EE22
_ZNSt12__shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EEC2IS5_vEEOS_IT_LS8_2EE0
_ZNSt12__shared_ptrIN3c104TypeELN9__gnu_cxx12_Lock_policyE2EEC2INS0_10TensorTypeEvEEOS_IT_LS3_2EE2
_ZNSt12__shared_ptrIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEELN9__gnu_cxx12_Lock_policyE2EEC2INS2_21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvEEOS_IT_LS6_2EE20
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE5_Impl8_M_allocEv40
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE5_Impl8_M_allocEv0
_ZNSt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE5_Impl8_M_allocEv40
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE6_M_ptrEv60
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE6_M_ptrEv0
_ZNSt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE6_M_ptrEv60
_ZNSt14_Sp_ebo_helperILi0ESaIvELb1EEC2ERKS0_100
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EEC2Ev100
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EED0Ev100
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EED0Ev0
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EED2Ev100
_ZNKSt12__shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EE3getEv192
_ZNKSt12__shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EE3getEv0
_ZNKSt12__shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EE3getEv0
_ZNKSt12__shared_ptrIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEELN9__gnu_cxx12_Lock_policyE2EE3getEv192
_ZNKSt19__shared_ptr_accessINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EE6_M_getEv192
_ZNKSt19__shared_ptr_accessIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EE6_M_getEv0
_ZNKSt19__shared_ptr_accessINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EE6_M_getEv0
_ZNKSt19__shared_ptr_accessIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EE6_M_getEv192
_ZNKSt19__shared_ptr_accessINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv192
_ZNKSt19__shared_ptr_accessIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv0
_ZNKSt19__shared_ptr_accessINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv0
_ZNKSt19__shared_ptr_accessIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv192
_ZNSt14_Sp_ebo_helperILi0ESaIvELb1EE6_S_getERS1_200
_ZNSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE7_M_swapERS2_470
_ZNSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EEC2Ev470
_ZNSt12__shared_ptrIN3c104TypeELN9__gnu_cxx12_Lock_policyE2EEC2ERKS4_36925448
_ZNSt12__shared_ptrIN3c1010TensorTypeELN9__gnu_cxx12_Lock_policyE2EEC2ERKS4_4
_ZNSt12__shared_ptrIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEELN9__gnu_cxx12_Lock_policyE2EEC2ERKS7_20
_ZNSt12__shared_ptrIN3c104TypeELN9__gnu_cxx12_Lock_policyE2EEC2ERKS4_36925424
_ZNSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EEC2ERKS2_36925482
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE15_M_add_ref_copyEv36925486
_ZNSt12__shared_ptrIN3c104TypeELN9__gnu_cxx12_Lock_policyE2EED2Ev36925514
_ZNSt12__shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EED2Ev0
_ZNSt12__shared_ptrIN5torch8autograd11ForwardGradELN9__gnu_cxx12_Lock_policyE2EED2Ev0
_ZNSt12__shared_ptrIN5torch8autograd4NodeELN9__gnu_cxx12_Lock_policyE2EED2Ev0
_ZNSt12__shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EED2Ev0
_ZNSt12__shared_ptrISt6vectorISt8functionIFN2at10TensorBaseERKS3_EESaIS7_EELN9__gnu_cxx12_Lock_policyE2EED2Ev0
_ZNSt12__shared_ptrIN3c1010TensorTypeELN9__gnu_cxx12_Lock_policyE2EED2Ev4
_ZNSt12__shared_ptrIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEELN9__gnu_cxx12_Lock_policyE2EED2Ev20
_ZNSt12__shared_ptrIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEELN9__gnu_cxx12_Lock_policyE2EED2Ev60
_ZNSt12__shared_ptrIN3c104TypeELN9__gnu_cxx12_Lock_policyE2EED2Ev36925430
_ZNSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EED2Ev36926054
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE10_M_releaseEv37662316
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/shared_ptr_base.h.func.html b/html/usr/include/c++/13/bits/shared_ptr_base.h.func.html new file mode 100644 index 0000000..652b5a5 --- /dev/null +++ b/html/usr/include/c++/13/bits/shared_ptr_base.h.func.html @@ -0,0 +1,803 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/shared_ptr_base.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - shared_ptr_base.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:62.8 %13786
Test Date:2024-04-30 13:17:26Functions:41.5 %8234
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt12__shared_ptrIN5torch8autograd4NodeELN9__gnu_cxx12_Lock_policyE2EEcvbEv0
_ZNKSt12__shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EEcvbEv0
_ZNKSt12__shared_ptrIN5torch8autograd4NodeELN9__gnu_cxx12_Lock_policyE2EEcvbEv0
_ZNKSt12__shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EE3getEv192
_ZNKSt12__shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EE3getEv0
_ZNKSt12__shared_ptrIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEELN9__gnu_cxx12_Lock_policyE2EE3getEv192
_ZNKSt12__shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EE3getEv0
_ZNKSt19__shared_ptr_accessINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EE6_M_getEv192
_ZNKSt19__shared_ptr_accessIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EE6_M_getEv0
_ZNKSt19__shared_ptr_accessIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EE6_M_getEv192
_ZNKSt19__shared_ptr_accessINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EE6_M_getEv0
_ZNKSt19__shared_ptr_accessINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEdeEv0
_ZNKSt19__shared_ptr_accessIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEdeEv0
_ZNKSt19__shared_ptr_accessINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEdeEv0
_ZNKSt19__shared_ptr_accessINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv192
_ZNKSt19__shared_ptr_accessIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv0
_ZNKSt19__shared_ptr_accessIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv192
_ZNKSt19__shared_ptr_accessINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2ELb0ELb0EEptEv0
_ZNSt10__weak_ptrIN5torch8autograd4NodeELN9__gnu_cxx12_Lock_policyE2EEC2Ev0
_ZNSt10__weak_ptrIN5torch8autograd4NodeELN9__gnu_cxx12_Lock_policyE2EED2Ev0
_ZNSt12__shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EE4swapERS9_0
_ZNSt12__shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EEaSEOS9_0
_ZNSt12__shared_ptrIN3c104TypeELN9__gnu_cxx12_Lock_policyE2EEC2EOS4_22
_ZNSt12__shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EEC2EOS9_0
_ZNSt12__shared_ptrIN3c104TypeELN9__gnu_cxx12_Lock_policyE2EEC2EOS4_2
_ZNSt12__shared_ptrIN5torch8autograd4NodeELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_0
_ZNSt12__shared_ptrIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEELN9__gnu_cxx12_Lock_policyE2EEC2EOS7_20
_ZNSt12__shared_ptrIN3c104TypeELN9__gnu_cxx12_Lock_policyE2EEC2ERKS4_36925448
_ZNSt12__shared_ptrIN3c1010TensorTypeELN9__gnu_cxx12_Lock_policyE2EEC2ERKS4_4
_ZNSt12__shared_ptrIN3c104TypeELN9__gnu_cxx12_Lock_policyE2EEC2ERKS4_36925424
_ZNSt12__shared_ptrIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEELN9__gnu_cxx12_Lock_policyE2EEC2ERKS7_20
_ZNSt12__shared_ptrIN3c104TypeELN9__gnu_cxx12_Lock_policyE2EEC2INS0_10TensorTypeEvEEOS_IT_LS3_2EE22
_ZNSt12__shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EEC2IS5_vEEOS_IT_LS8_2EE0
_ZNSt12__shared_ptrIN3c104TypeELN9__gnu_cxx12_Lock_policyE2EEC2INS0_10TensorTypeEvEEOS_IT_LS3_2EE2
_ZNSt12__shared_ptrIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEELN9__gnu_cxx12_Lock_policyE2EEC2INS2_21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvEEOS_IT_LS6_2EE20
_ZNSt12__shared_ptrIN3c104TypeELN9__gnu_cxx12_Lock_policyE2EED2Ev36925514
_ZNSt12__shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EED2Ev0
_ZNSt12__shared_ptrIN3c1010TensorTypeELN9__gnu_cxx12_Lock_policyE2EED2Ev4
_ZNSt12__shared_ptrIN3c104TypeELN9__gnu_cxx12_Lock_policyE2EED2Ev36925430
_ZNSt12__shared_ptrIN5torch8autograd11ForwardGradELN9__gnu_cxx12_Lock_policyE2EED2Ev0
_ZNSt12__shared_ptrIN5torch8autograd4NodeELN9__gnu_cxx12_Lock_policyE2EED2Ev0
_ZNSt12__shared_ptrIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEELN9__gnu_cxx12_Lock_policyE2EED2Ev20
_ZNSt12__shared_ptrIN8nlohmann16json_abi_v3_11_36detail23output_adapter_protocolIcEELN9__gnu_cxx12_Lock_policyE2EED2Ev60
_ZNSt12__shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EED2Ev0
_ZNSt12__shared_ptrISt6vectorISt8functionIFN2at10TensorBaseERKS3_EESaIS7_EELN9__gnu_cxx12_Lock_policyE2EED2Ev0
_ZNSt12__shared_ptrIN5torch8autograd4NodeELN9__gnu_cxx12_Lock_policyE2EEC2Ev0
_ZNSt12__shared_ptrIKNSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EEC2Ev0
_ZNSt12__shared_ptrIN5torch8autograd11ForwardGradELN9__gnu_cxx12_Lock_policyE2EEC2Ev0
_ZNSt12__shared_ptrIN5torch8autograd4NodeELN9__gnu_cxx12_Lock_policyE2EEC2Ev0
_ZNSt12__shared_ptrISt6vectorISt8functionIFN2at10TensorBaseERKS3_EESaIS7_EELN9__gnu_cxx12_Lock_policyE2EEC2Ev0
_ZNSt12__shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EE31_M_enable_shared_from_this_withIS5_S5_EENSt9enable_ifIXntsrNS8_15__has_esft_baseIT0_vEE5valueEvE4typeEPT_20
_ZNSt12__shared_ptrIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEELN9__gnu_cxx12_Lock_policyE2EE31_M_enable_shared_from_this_withISA_SA_EENSt9enable_ifIXntsrNSD_15__has_esft_baseIT0_vEE5valueEvE4typeEPT_20
_ZNSt12__shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EE31_M_enable_shared_from_this_withIS5_S5_EENSt9enable_ifIXntsrNS8_15__has_esft_baseIT0_vEE5valueEvE4typeEPT_0
_ZNSt12__shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EEC2ISaIvEJRKSt6localeRNSt15regex_constants18syntax_option_typeEEEESt20_Sp_alloc_shared_tagIT_EDpOT0_20
_ZNSt12__shared_ptrIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEELN9__gnu_cxx12_Lock_policyE2EEC2ISaIvEJRS9_EEESt20_Sp_alloc_shared_tagIT_EDpOT0_20
_ZNSt12__shared_ptrINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEELN9__gnu_cxx12_Lock_policyE2EEC2ISaIvEJRKSt6localeRNSt15regex_constants18syntax_option_typeEEEESt20_Sp_alloc_shared_tagIT_EDpOT0_0
_ZNSt12__weak_countILN9__gnu_cxx12_Lock_policyE2EEC2Ev0
_ZNSt12__weak_countILN9__gnu_cxx12_Lock_policyE2EED2Ev0
_ZNSt14_Sp_ebo_helperILi0ESaIvELb1EE6_S_getERS1_200
_ZNSt14_Sp_ebo_helperILi0ESaIvELb1EEC2ERKS0_100
_ZNSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE7_M_swapERS2_470
_ZNSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EEC2ERKS2_36925482
_ZNSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EEC2Ev470
_ZNSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EEC2INSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvEJRKSt6localeRNSt15regex_constants18syntax_option_typeEEEERPT_St20_Sp_alloc_shared_tagIT0_EDpOT1_20
_ZNSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EEC2IN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvEJRSD_EEERPT_St20_Sp_alloc_shared_tagIT0_EDpOT1_20
_ZNSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EEC2INSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvEJRKSt6localeRNSt15regex_constants18syntax_option_typeEEEERPT_St20_Sp_alloc_shared_tagIT0_EDpOT1_0
_ZNSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EED2Ev36926054
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE10_M_destroyEv0
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE10_M_releaseEv37662316
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE15_M_add_ref_copyEv36925486
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE15_M_weak_releaseEv0
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE19_M_release_last_useEv0
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE24_M_release_last_use_coldEv0
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EEC2Ev100
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EED0Ev100
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EED0Ev0
_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EED2Ev100
_ZNSt19_Sp_make_shared_tag5_S_tiEv0
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE10_M_destroyEv20
_ZNSt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE10_M_destroyEv20
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE10_M_destroyEv0
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv20
_ZNSt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv20
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv0
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE14_M_get_deleterERKSt9type_info0
_ZNSt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE14_M_get_deleterERKSt9type_info0
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE14_M_get_deleterERKSt9type_info0
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE5_Impl8_M_allocEv40
_ZNSt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE5_Impl8_M_allocEv40
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE5_Impl8_M_allocEv0
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE5_ImplC2ES6_20
_ZNSt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE5_ImplC2ESB_20
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE5_ImplC2ES6_0
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE6_M_ptrEv60
_ZNSt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE6_M_ptrEv60
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EE6_M_ptrEv0
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEC2IJRKSt6localeRNSt15regex_constants18syntax_option_typeEEEES6_DpOT_20
_ZNSt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEC2IJRS9_EEESB_DpOT_20
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EEC2IJRKSt6localeRNSt15regex_constants18syntax_option_typeEEEES6_DpOT_0
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EED0Ev20
_ZNSt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EED0Ev0
_ZNSt23_Sp_counted_ptr_inplaceIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESaIvELN9__gnu_cxx12_Lock_policyE2EED2Ev20
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EED0Ev0
_ZNSt23_Sp_counted_ptr_inplaceINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEESaIvELN9__gnu_cxx12_Lock_policyE2EED2Ev0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/shared_ptr_base.h.gcov.html b/html/usr/include/c++/13/bits/shared_ptr_base.h.gcov.html new file mode 100644 index 0000000..2c2921a --- /dev/null +++ b/html/usr/include/c++/13/bits/shared_ptr_base.h.gcov.html @@ -0,0 +1,2334 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/shared_ptr_base.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - shared_ptr_base.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:62.8 %13786
Test Date:2024-04-30 13:17:26Functions:41.5 %8234
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // shared_ptr and weak_ptr implementation details -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2007-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : // GCC Note: Based on files from version 1.32.0 of the Boost library.
+      26              : 
+      27              : //  shared_count.hpp
+      28              : //  Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+      29              : 
+      30              : //  shared_ptr.hpp
+      31              : //  Copyright (C) 1998, 1999 Greg Colvin and Beman Dawes.
+      32              : //  Copyright (C) 2001, 2002, 2003 Peter Dimov
+      33              : 
+      34              : //  weak_ptr.hpp
+      35              : //  Copyright (C) 2001, 2002, 2003 Peter Dimov
+      36              : 
+      37              : //  enable_shared_from_this.hpp
+      38              : //  Copyright (C) 2002 Peter Dimov
+      39              : 
+      40              : // Distributed under the Boost Software License, Version 1.0. (See
+      41              : // accompanying file LICENSE_1_0.txt or copy at
+      42              : // http://www.boost.org/LICENSE_1_0.txt)
+      43              : 
+      44              : /** @file bits/shared_ptr_base.h
+      45              :  *  This is an internal header file, included by other library headers.
+      46              :  *  Do not attempt to use it directly. @headername{memory}
+      47              :  */
+      48              : 
+      49              : #ifndef _SHARED_PTR_BASE_H
+      50              : #define _SHARED_PTR_BASE_H 1
+      51              : 
+      52              : #include <typeinfo>
+      53              : #include <bits/allocated_ptr.h>
+      54              : #include <bits/allocator.h>
+      55              : #include <bits/exception_defines.h>
+      56              : #include <bits/functional_hash.h>
+      57              : #include <bits/refwrap.h>
+      58              : #include <bits/stl_function.h>  // std::less
+      59              : #include <bits/unique_ptr.h>
+      60              : #include <ext/aligned_buffer.h>
+      61              : #include <ext/atomicity.h>
+      62              : #include <ext/concurrence.h>
+      63              : #if __cplusplus >= 202002L
+      64              : # include <bit>          // __bit_floor
+      65              : # include <compare>
+      66              : # include <bits/align.h> // std::align
+      67              : # include <bits/stl_uninitialized.h>
+      68              : #endif
+      69              : 
+      70              : namespace std _GLIBCXX_VISIBILITY(default)
+      71              : {
+      72              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      73              : 
+      74              : #if _GLIBCXX_USE_DEPRECATED
+      75              : #pragma GCC diagnostic push
+      76              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+      77              :   template<typename> class auto_ptr;
+      78              : #pragma GCC diagnostic pop
+      79              : #endif
+      80              : 
+      81              :  /**
+      82              :    *  @brief  Exception possibly thrown by @c shared_ptr.
+      83              :    *  @ingroup exceptions
+      84              :    */
+      85              :   class bad_weak_ptr : public std::exception
+      86              :   {
+      87              :   public:
+      88              :     virtual char const* what() const noexcept;
+      89              : 
+      90              :     virtual ~bad_weak_ptr() noexcept;
+      91              :   };
+      92              : 
+      93              :   // Substitute for bad_weak_ptr object in the case of -fno-exceptions.
+      94              :   inline void
+      95              :   __throw_bad_weak_ptr()
+      96              :   { _GLIBCXX_THROW_OR_ABORT(bad_weak_ptr()); }
+      97              : 
+      98              :   using __gnu_cxx::_Lock_policy;
+      99              :   using __gnu_cxx::__default_lock_policy;
+     100              :   using __gnu_cxx::_S_single;
+     101              :   using __gnu_cxx::_S_mutex;
+     102              :   using __gnu_cxx::_S_atomic;
+     103              : 
+     104              :   // Empty helper class except when the template argument is _S_mutex.
+     105              :   template<_Lock_policy _Lp>
+     106              :     class _Mutex_base
+     107              :     {
+     108              :     protected:
+     109              :       // The atomic policy uses fully-fenced builtins, single doesn't care.
+     110              :       enum { _S_need_barriers = 0 };
+     111              :     };
+     112              : 
+     113              :   template<>
+     114              :     class _Mutex_base<_S_mutex>
+     115              :     : public __gnu_cxx::__mutex
+     116              :     {
+     117              :     protected:
+     118              :       // This policy is used when atomic builtins are not available.
+     119              :       // The replacement atomic operations might not have the necessary
+     120              :       // memory barriers.
+     121              :       enum { _S_need_barriers = 1 };
+     122              :     };
+     123              : 
+     124              :   template<_Lock_policy _Lp = __default_lock_policy>
+     125              :     class _Sp_counted_base
+     126              :     : public _Mutex_base<_Lp>
+     127              :     {
+     128              :     public:
+     129          100 :       _Sp_counted_base() noexcept
+     130          100 :       : _M_use_count(1), _M_weak_count(1) { }
+     131              : 
+     132              :       virtual
+     133          100 :       ~_Sp_counted_base() noexcept
+     134          100 :       { }
+     135              : 
+     136              :       // Called when _M_use_count drops to zero, to release the resources
+     137              :       // managed by *this.
+     138              :       virtual void
+     139              :       _M_dispose() noexcept = 0;
+     140              : 
+     141              :       // Called when _M_weak_count drops to zero.
+     142              :       virtual void
+     143            0 :       _M_destroy() noexcept
+     144            0 :       { delete this; }
+     145              : 
+     146              :       virtual void*
+     147              :       _M_get_deleter(const std::type_info&) noexcept = 0;
+     148              : 
+     149              :       // Increment the use count (used when the count is greater than zero).
+     150              :       void
+     151     36925486 :       _M_add_ref_copy()
+     152     36925486 :       { __gnu_cxx::__atomic_add_dispatch(&_M_use_count, 1); }
+     153              : 
+     154              :       // Increment the use count if it is non-zero, throw otherwise.
+     155              :       void
+     156              :       _M_add_ref_lock()
+     157              :       {
+     158              :         if (!_M_add_ref_lock_nothrow())
+     159              :           __throw_bad_weak_ptr();
+     160              :       }
+     161              : 
+     162              :       // Increment the use count if it is non-zero.
+     163              :       bool
+     164              :       _M_add_ref_lock_nothrow() noexcept;
+     165              : 
+     166              :       // Decrement the use count.
+     167              :       void
+     168              :       _M_release() noexcept;
+     169              : 
+     170              :       // Called by _M_release() when the use count reaches zero.
+     171              :       void
+     172            0 :       _M_release_last_use() noexcept
+     173              :       {
+     174              :         _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_use_count);
+     175            0 :         _M_dispose();
+     176              :         // There must be a memory barrier between dispose() and destroy()
+     177              :         // to ensure that the effects of dispose() are observed in the
+     178              :         // thread that runs destroy().
+     179              :         // See http://gcc.gnu.org/ml/libstdc++/2005-11/msg00136.html
+     180              :         if (_Mutex_base<_Lp>::_S_need_barriers)
+     181              :           {
+     182              :             __atomic_thread_fence (__ATOMIC_ACQ_REL);
+     183              :           }
+     184              : 
+     185              :         // Be race-detector-friendly.  For more info see bits/c++config.
+     186              :         _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_weak_count);
+     187            0 :         if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count,
+     188            0 :                                                    -1) == 1)
+     189              :           {
+     190              :             _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_weak_count);
+     191            0 :             _M_destroy();
+     192              :           }
+     193            0 :       }
+     194              : 
+     195              :       // As above, but 'noinline' to reduce code size on the cold path.
+     196              :       __attribute__((__noinline__))
+     197              :       void
+     198            0 :       _M_release_last_use_cold() noexcept
+     199            0 :       { _M_release_last_use(); }
+     200              : 
+     201              :       // Increment the weak count.
+     202              :       void
+     203              :       _M_weak_add_ref() noexcept
+     204              :       { __gnu_cxx::__atomic_add_dispatch(&_M_weak_count, 1); }
+     205              : 
+     206              :       // Decrement the weak count.
+     207              :       void
+     208            0 :       _M_weak_release() noexcept
+     209              :       {
+     210              :         // Be race-detector-friendly. For more info see bits/c++config.
+     211              :         _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_weak_count);
+     212            0 :         if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, -1) == 1)
+     213              :           {
+     214              :             _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_weak_count);
+     215              :             if (_Mutex_base<_Lp>::_S_need_barriers)
+     216              :               {
+     217              :                 // See _M_release(),
+     218              :                 // destroy() must observe results of dispose()
+     219              :                 __atomic_thread_fence (__ATOMIC_ACQ_REL);
+     220              :               }
+     221            0 :             _M_destroy();
+     222              :           }
+     223            0 :       }
+     224              : 
+     225              :       long
+     226              :       _M_get_use_count() const noexcept
+     227              :       {
+     228              :         // No memory barrier is used here so there is no synchronization
+     229              :         // with other threads.
+     230              :         return __atomic_load_n(&_M_use_count, __ATOMIC_RELAXED);
+     231              :       }
+     232              : 
+     233              :     private:
+     234              :       _Sp_counted_base(_Sp_counted_base const&) = delete;
+     235              :       _Sp_counted_base& operator=(_Sp_counted_base const&) = delete;
+     236              : 
+     237              :       _Atomic_word  _M_use_count;     // #shared
+     238              :       _Atomic_word  _M_weak_count;    // #weak + (#shared != 0)
+     239              :     };
+     240              : 
+     241              :   template<>
+     242              :     inline bool
+     243              :     _Sp_counted_base<_S_single>::
+     244              :     _M_add_ref_lock_nothrow() noexcept
+     245              :     {
+     246              :       if (_M_use_count == 0)
+     247              :         return false;
+     248              :       ++_M_use_count;
+     249              :       return true;
+     250              :     }
+     251              : 
+     252              :   template<>
+     253              :     inline bool
+     254              :     _Sp_counted_base<_S_mutex>::
+     255              :     _M_add_ref_lock_nothrow() noexcept
+     256              :     {
+     257              :       __gnu_cxx::__scoped_lock sentry(*this);
+     258              :       if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0)
+     259              :         {
+     260              :           _M_use_count = 0;
+     261              :           return false;
+     262              :         }
+     263              :       return true;
+     264              :     }
+     265              : 
+     266              :   template<>
+     267              :     inline bool
+     268              :     _Sp_counted_base<_S_atomic>::
+     269              :     _M_add_ref_lock_nothrow() noexcept
+     270              :     {
+     271              :       // Perform lock-free add-if-not-zero operation.
+     272              :       _Atomic_word __count = _M_get_use_count();
+     273              :       do
+     274              :         {
+     275              :           if (__count == 0)
+     276              :             return false;
+     277              :           // Replace the current counter value with the old value + 1, as
+     278              :           // long as it's not changed meanwhile.
+     279              :         }
+     280              :       while (!__atomic_compare_exchange_n(&_M_use_count, &__count, __count + 1,
+     281              :                                           true, __ATOMIC_ACQ_REL,
+     282              :                                           __ATOMIC_RELAXED));
+     283              :       return true;
+     284              :     }
+     285              : 
+     286              :   template<>
+     287              :     inline void
+     288              :     _Sp_counted_base<_S_single>::_M_add_ref_copy()
+     289              :     { ++_M_use_count; }
+     290              : 
+     291              :   template<>
+     292              :     inline void
+     293              :     _Sp_counted_base<_S_single>::_M_release() noexcept
+     294              :     {
+     295              :       if (--_M_use_count == 0)
+     296              :         {
+     297              :           _M_dispose();
+     298              :           if (--_M_weak_count == 0)
+     299              :             _M_destroy();
+     300              :         }
+     301              :     }
+     302              : 
+     303              :   template<>
+     304              :     inline void
+     305              :     _Sp_counted_base<_S_mutex>::_M_release() noexcept
+     306              :     {
+     307              :       // Be race-detector-friendly.  For more info see bits/c++config.
+     308              :       _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_use_count);
+     309              :       if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1)
+     310              :         {
+     311              :           _M_release_last_use();
+     312              :         }
+     313              :     }
+     314              : 
+     315              :   template<>
+     316              :     inline void
+     317     37662316 :     _Sp_counted_base<_S_atomic>::_M_release() noexcept
+     318              :     {
+     319              :       _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_use_count);
+     320              : #if ! _GLIBCXX_TSAN
+     321     37662316 :       constexpr bool __lock_free
+     322              :         = __atomic_always_lock_free(sizeof(long long), 0)
+     323              :         && __atomic_always_lock_free(sizeof(_Atomic_word), 0);
+     324     37662316 :       constexpr bool __double_word
+     325              :         = sizeof(long long) == 2 * sizeof(_Atomic_word);
+     326              :       // The ref-count members follow the vptr, so are aligned to
+     327              :       // alignof(void*).
+     328     37662316 :       constexpr bool __aligned = __alignof(long long) <= alignof(void*);
+     329              :       if _GLIBCXX17_CONSTEXPR (__lock_free && __double_word && __aligned)
+     330              :         {
+     331     37662316 :           constexpr int __wordbits = __CHAR_BIT__ * sizeof(_Atomic_word);
+     332     37662316 :           constexpr int __shiftbits = __double_word ? __wordbits : 0;
+     333     37662316 :           constexpr long long __unique_ref = 1LL + (1LL << __shiftbits);
+     334     37662316 :           auto __both_counts = reinterpret_cast<long long*>(&_M_use_count);
+     335              : 
+     336              :           _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_weak_count);
+     337     37662316 :           if (__atomic_load_n(__both_counts, __ATOMIC_ACQUIRE) == __unique_ref)
+     338              :             {
+     339              :               // Both counts are 1, so there are no weak references and
+     340              :               // we are releasing the last strong reference. No other
+     341              :               // threads can observe the effects of this _M_release()
+     342              :               // call (e.g. calling use_count()) without a data race.
+     343        37468 :               _M_weak_count = _M_use_count = 0;
+     344              :               _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_use_count);
+     345              :               _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_weak_count);
+     346        37468 :               _M_dispose();
+     347        37468 :               _M_destroy();
+     348        37468 :               return;
+     349              :             }
+     350     75249696 :           if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1)
+     351            0 :             [[__unlikely__]]
+     352              :             {
+     353            0 :               _M_release_last_use_cold();
+     354            0 :               return;
+     355              :             }
+     356              :         }
+     357              :       else
+     358              : #endif
+     359              :       if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1)
+     360              :         {
+     361              :           _M_release_last_use();
+     362              :         }
+     363              :     }
+     364              : 
+     365              :   template<>
+     366              :     inline void
+     367              :     _Sp_counted_base<_S_single>::_M_weak_add_ref() noexcept
+     368              :     { ++_M_weak_count; }
+     369              : 
+     370              :   template<>
+     371              :     inline void
+     372              :     _Sp_counted_base<_S_single>::_M_weak_release() noexcept
+     373              :     {
+     374              :       if (--_M_weak_count == 0)
+     375              :         _M_destroy();
+     376              :     }
+     377              : 
+     378              :   template<>
+     379              :     inline long
+     380              :     _Sp_counted_base<_S_single>::_M_get_use_count() const noexcept
+     381              :     { return _M_use_count; }
+     382              : 
+     383              : 
+     384              :   // Forward declarations.
+     385              :   template<typename _Tp, _Lock_policy _Lp = __default_lock_policy>
+     386              :     class __shared_ptr;
+     387              : 
+     388              :   template<typename _Tp, _Lock_policy _Lp = __default_lock_policy>
+     389              :     class __weak_ptr;
+     390              : 
+     391              :   template<typename _Tp, _Lock_policy _Lp = __default_lock_policy>
+     392              :     class __enable_shared_from_this;
+     393              : 
+     394              :   template<typename _Tp>
+     395              :     class shared_ptr;
+     396              : 
+     397              :   template<typename _Tp>
+     398              :     class weak_ptr;
+     399              : 
+     400              :   template<typename _Tp>
+     401              :     struct owner_less;
+     402              : 
+     403              :   template<typename _Tp>
+     404              :     class enable_shared_from_this;
+     405              : 
+     406              :   template<_Lock_policy _Lp = __default_lock_policy>
+     407              :     class __weak_count;
+     408              : 
+     409              :   template<_Lock_policy _Lp = __default_lock_policy>
+     410              :     class __shared_count;
+     411              : 
+     412              : #if __cplusplus >= 202002L
+     413              :   template<typename>
+     414              :     class _Sp_atomic;
+     415              : #endif
+     416              : 
+     417              :   // Counted ptr with no deleter or allocator support
+     418              :   template<typename _Ptr, _Lock_policy _Lp>
+     419              :     class _Sp_counted_ptr final : public _Sp_counted_base<_Lp>
+     420              :     {
+     421              :     public:
+     422              :       explicit
+     423              :       _Sp_counted_ptr(_Ptr __p) noexcept
+     424              :       : _M_ptr(__p) { }
+     425              : 
+     426              :       virtual void
+     427              :       _M_dispose() noexcept
+     428              :       { delete _M_ptr; }
+     429              : 
+     430              :       virtual void
+     431              :       _M_destroy() noexcept
+     432              :       { delete this; }
+     433              : 
+     434              :       virtual void*
+     435              :       _M_get_deleter(const std::type_info&) noexcept
+     436              :       { return nullptr; }
+     437              : 
+     438              :       _Sp_counted_ptr(const _Sp_counted_ptr&) = delete;
+     439              :       _Sp_counted_ptr& operator=(const _Sp_counted_ptr&) = delete;
+     440              : 
+     441              :     private:
+     442              :       _Ptr             _M_ptr;
+     443              :     };
+     444              : 
+     445              :   template<>
+     446              :     inline void
+     447              :     _Sp_counted_ptr<nullptr_t, _S_single>::_M_dispose() noexcept { }
+     448              : 
+     449              :   template<>
+     450              :     inline void
+     451              :     _Sp_counted_ptr<nullptr_t, _S_mutex>::_M_dispose() noexcept { }
+     452              : 
+     453              :   template<>
+     454              :     inline void
+     455              :     _Sp_counted_ptr<nullptr_t, _S_atomic>::_M_dispose() noexcept { }
+     456              : 
+     457              :   // FIXME: once __has_cpp_attribute(__no_unique_address__)) is true for
+     458              :   // all supported compilers we can greatly simplify _Sp_ebo_helper.
+     459              :   // N.B. unconditionally applying the attribute could change layout for
+     460              :   // final types, which currently cannot use EBO so have a unique address.
+     461              : 
+     462              :   template<int _Nm, typename _Tp,
+     463              :            bool __use_ebo = !__is_final(_Tp) && __is_empty(_Tp)>
+     464              :     struct _Sp_ebo_helper;
+     465              : 
+     466              :   /// Specialization using EBO.
+     467              :   template<int _Nm, typename _Tp>
+     468              :     struct _Sp_ebo_helper<_Nm, _Tp, true> : private _Tp
+     469              :     {
+     470          100 :       explicit _Sp_ebo_helper(const _Tp& __tp) : _Tp(__tp) { }
+     471              :       explicit _Sp_ebo_helper(_Tp&& __tp) : _Tp(std::move(__tp)) { }
+     472              : 
+     473              :       static _Tp&
+     474          200 :       _S_get(_Sp_ebo_helper& __eboh) { return static_cast<_Tp&>(__eboh); }
+     475              :     };
+     476              : 
+     477              :   /// Specialization not using EBO.
+     478              :   template<int _Nm, typename _Tp>
+     479              :     struct _Sp_ebo_helper<_Nm, _Tp, false>
+     480              :     {
+     481              :       explicit _Sp_ebo_helper(const _Tp& __tp) : _M_tp(__tp) { }
+     482              :       explicit _Sp_ebo_helper(_Tp&& __tp) : _M_tp(std::move(__tp)) { }
+     483              : 
+     484              :       static _Tp&
+     485              :       _S_get(_Sp_ebo_helper& __eboh)
+     486              :       { return __eboh._M_tp; }
+     487              : 
+     488              :     private:
+     489              :       _Tp _M_tp;
+     490              :     };
+     491              : 
+     492              :   // Support for custom deleter and/or allocator
+     493              :   template<typename _Ptr, typename _Deleter, typename _Alloc, _Lock_policy _Lp>
+     494              :     class _Sp_counted_deleter final : public _Sp_counted_base<_Lp>
+     495              :     {
+     496              :       class _Impl : _Sp_ebo_helper<0, _Deleter>, _Sp_ebo_helper<1, _Alloc>
+     497              :       {
+     498              :         typedef _Sp_ebo_helper<0, _Deleter>       _Del_base;
+     499              :         typedef _Sp_ebo_helper<1, _Alloc> _Alloc_base;
+     500              : 
+     501              :       public:
+     502              :         _Impl(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept
+     503              :         : _Del_base(std::move(__d)), _Alloc_base(__a), _M_ptr(__p)
+     504              :         { }
+     505              : 
+     506              :         _Deleter& _M_del() noexcept { return _Del_base::_S_get(*this); }
+     507              :         _Alloc& _M_alloc() noexcept { return _Alloc_base::_S_get(*this); }
+     508              : 
+     509              :         _Ptr _M_ptr;
+     510              :       };
+     511              : 
+     512              :     public:
+     513              :       using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_deleter>;
+     514              : 
+     515              :       // __d(__p) must not throw.
+     516              :       _Sp_counted_deleter(_Ptr __p, _Deleter __d) noexcept
+     517              :       : _M_impl(__p, std::move(__d), _Alloc()) { }
+     518              : 
+     519              :       // __d(__p) must not throw.
+     520              :       _Sp_counted_deleter(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept
+     521              :       : _M_impl(__p, std::move(__d), __a) { }
+     522              : 
+     523              :       ~_Sp_counted_deleter() noexcept { }
+     524              : 
+     525              :       virtual void
+     526              :       _M_dispose() noexcept
+     527              :       { _M_impl._M_del()(_M_impl._M_ptr); }
+     528              : 
+     529              :       virtual void
+     530              :       _M_destroy() noexcept
+     531              :       {
+     532              :         __allocator_type __a(_M_impl._M_alloc());
+     533              :         __allocated_ptr<__allocator_type> __guard_ptr{ __a, this };
+     534              :         this->~_Sp_counted_deleter();
+     535              :       }
+     536              : 
+     537              :       virtual void*
+     538              :       _M_get_deleter(const type_info& __ti [[__gnu__::__unused__]]) noexcept
+     539              :       {
+     540              : #if __cpp_rtti
+     541              :         // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     542              :         // 2400. shared_ptr's get_deleter() should use addressof()
+     543              :         return __ti == typeid(_Deleter)
+     544              :           ? std::__addressof(_M_impl._M_del())
+     545              :           : nullptr;
+     546              : #else
+     547              :         return nullptr;
+     548              : #endif
+     549              :       }
+     550              : 
+     551              :     private:
+     552              :       _Impl _M_impl;
+     553              :     };
+     554              : 
+     555              :   // helpers for make_shared / allocate_shared
+     556              : 
+     557              :   struct _Sp_make_shared_tag
+     558              :   {
+     559              :   private:
+     560              :     template<typename _Tp, typename _Alloc, _Lock_policy _Lp>
+     561              :       friend class _Sp_counted_ptr_inplace;
+     562              : 
+     563              :     static const type_info&
+     564            0 :     _S_ti() noexcept _GLIBCXX_VISIBILITY(default)
+     565              :     {
+     566              :       alignas(type_info) static constexpr char __tag[sizeof(type_info)] = { };
+     567            0 :       return reinterpret_cast<const type_info&>(__tag);
+     568              :     }
+     569              : 
+     570              :     static bool _S_eq(const type_info&) noexcept;
+     571              :   };
+     572              : 
+     573              :   template<typename _Alloc>
+     574              :     struct _Sp_alloc_shared_tag
+     575              :     {
+     576              :       const _Alloc& _M_a;
+     577              :     };
+     578              : 
+     579              :   template<typename _Tp, typename _Alloc, _Lock_policy _Lp>
+     580              :     class _Sp_counted_ptr_inplace final : public _Sp_counted_base<_Lp>
+     581              :     {
+     582              :       class _Impl : _Sp_ebo_helper<0, _Alloc>
+     583              :       {
+     584              :         typedef _Sp_ebo_helper<0, _Alloc> _A_base;
+     585              : 
+     586              :       public:
+     587           20 :         explicit _Impl(_Alloc __a) noexcept : _A_base(__a) { }
+     588              : 
+     589           40 :         _Alloc& _M_alloc() noexcept { return _A_base::_S_get(*this); }
+     590              : 
+     591              :         __gnu_cxx::__aligned_buffer<_Tp> _M_storage;
+     592              :       };
+     593              : 
+     594              :     public:
+     595              :       using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_ptr_inplace>;
+     596              : 
+     597              :       // Alloc parameter is not a reference so doesn't alias anything in __args
+     598              :       template<typename... _Args>
+     599           20 :         _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
+     600           20 :         : _M_impl(__a)
+     601              :         {
+     602              :           // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     603              :           // 2070.  allocate_shared should use allocator_traits<A>::construct
+     604           20 :           allocator_traits<_Alloc>::construct(__a, _M_ptr(),
+     605              :               std::forward<_Args>(__args)...); // might throw
+     606           20 :         }
+     607              : 
+     608           20 :       ~_Sp_counted_ptr_inplace() noexcept { }
+     609              : 
+     610              :       virtual void
+     611           20 :       _M_dispose() noexcept
+     612              :       {
+     613           20 :         allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr());
+     614           20 :       }
+     615              : 
+     616              :       // Override because the allocator needs to know the dynamic type
+     617              :       virtual void
+     618           20 :       _M_destroy() noexcept
+     619              :       {
+     620           20 :         __allocator_type __a(_M_impl._M_alloc());
+     621           20 :         __allocated_ptr<__allocator_type> __guard_ptr{ __a, this };
+     622           20 :         this->~_Sp_counted_ptr_inplace();
+     623           20 :       }
+     624              : 
+     625              :     private:
+     626              :       friend class __shared_count<_Lp>; // To be able to call _M_ptr().
+     627              : 
+     628              :       // No longer used, but code compiled against old libstdc++ headers
+     629              :       // might still call it from __shared_ptr ctor to get the pointer out.
+     630              :       virtual void*
+     631            0 :       _M_get_deleter(const std::type_info& __ti) noexcept override
+     632              :       {
+     633            0 :         auto __ptr = const_cast<typename remove_cv<_Tp>::type*>(_M_ptr());
+     634              :         // Check for the fake type_info first, so we don't try to access it
+     635              :         // as a real type_info object. Otherwise, check if it's the real
+     636              :         // type_info for this class. With RTTI enabled we can check directly,
+     637              :         // or call a library function to do it.
+     638            0 :         if (&__ti == &_Sp_make_shared_tag::_S_ti()
+     639            0 :             ||
+     640              : #if __cpp_rtti
+     641            0 :             __ti == typeid(_Sp_make_shared_tag)
+     642              : #else
+     643              :             _Sp_make_shared_tag::_S_eq(__ti)
+     644              : #endif
+     645              :            )
+     646            0 :           return __ptr;
+     647            0 :         return nullptr;
+     648              :       }
+     649              : 
+     650           60 :       _Tp* _M_ptr() noexcept { return _M_impl._M_storage._M_ptr(); }
+     651              : 
+     652              :       _Impl _M_impl;
+     653              :     };
+     654              : 
+     655              : #if __cplusplus >= 202002L
+     656              : # define __cpp_lib_smart_ptr_for_overwrite 202002L
+     657              :   struct _Sp_overwrite_tag { };
+     658              : 
+     659              :   // Partial specialization used for make_shared_for_overwrite<non-array>().
+     660              :   // This partial specialization is used when the allocator's value type
+     661              :   // is the special _Sp_overwrite_tag type.
+     662              : #if __cpp_concepts
+     663              :   template<typename _Tp, typename _Alloc, _Lock_policy _Lp>
+     664              :     requires is_same_v<typename _Alloc::value_type, _Sp_overwrite_tag>
+     665              :     class _Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp> final
+     666              : #else
+     667              :   template<typename _Tp, template<typename> class _Alloc, _Lock_policy _Lp>
+     668              :     class _Sp_counted_ptr_inplace<_Tp, _Alloc<_Sp_overwrite_tag>, _Lp> final
+     669              : #endif
+     670              :     : public _Sp_counted_base<_Lp>
+     671              :     {
+     672              :       [[no_unique_address]] _Alloc _M_alloc;
+     673              : 
+     674              :       union {
+     675              :         _Tp _M_obj;
+     676              :         char _M_unused;
+     677              :       };
+     678              : 
+     679              :       friend class __shared_count<_Lp>; // To be able to call _M_ptr().
+     680              : 
+     681              :       _Tp* _M_ptr() noexcept { return std::__addressof(_M_obj); }
+     682              : 
+     683              :     public:
+     684              :       using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_ptr_inplace>;
+     685              : 
+     686              :       _Sp_counted_ptr_inplace(const _Alloc& __a)
+     687              :       : _M_alloc(__a)
+     688              :       {
+     689              :         ::new((void*)_M_ptr()) _Tp; // default-initialized, for overwrite.
+     690              :       }
+     691              : 
+     692              :       ~_Sp_counted_ptr_inplace() noexcept { }
+     693              : 
+     694              :       virtual void
+     695              :       _M_dispose() noexcept
+     696              :       {
+     697              :         _M_obj.~_Tp();
+     698              :       }
+     699              : 
+     700              :       // Override because the allocator needs to know the dynamic type
+     701              :       virtual void
+     702              :       _M_destroy() noexcept
+     703              :       {
+     704              :         using pointer = typename allocator_traits<__allocator_type>::pointer;
+     705              :         __allocator_type __a(_M_alloc);
+     706              :         auto __p = pointer_traits<pointer>::pointer_to(*this);
+     707              :         __allocated_ptr<__allocator_type> __guard_ptr{ __a, __p };
+     708              :         this->~_Sp_counted_ptr_inplace();
+     709              :       }
+     710              : 
+     711              :       void*
+     712              :       _M_get_deleter(const std::type_info&) noexcept override
+     713              :       { return nullptr; }
+     714              :     };
+     715              : #endif // C++20
+     716              : 
+     717              : #if __cplusplus <= 201703L
+     718              : # define __cpp_lib_shared_ptr_arrays 201611L
+     719              : #else
+     720              : # define __cpp_lib_shared_ptr_arrays 201707L
+     721              : 
+     722              :   struct _Sp_overwrite_tag;
+     723              : 
+     724              :   // For make_shared<T[]>, make_shared<T[N]>, allocate_shared<T[]> etc.
+     725              :   template<typename _Alloc>
+     726              :     struct _Sp_counted_array_base
+     727              :     {
+     728              :       [[no_unique_address]] _Alloc _M_alloc{};
+     729              :       size_t _M_n = 0;
+     730              :       bool _M_overwrite = false;
+     731              : 
+     732              :       typename allocator_traits<_Alloc>::pointer
+     733              :       _M_alloc_array(size_t __tail)
+     734              :       {
+     735              :         return allocator_traits<_Alloc>::allocate(_M_alloc, _M_n + __tail);
+     736              :       }
+     737              : 
+     738              :       void
+     739              :       _M_dealloc_array(typename allocator_traits<_Alloc>::pointer __p,
+     740              :                        size_t __tail)
+     741              :       {
+     742              :         allocator_traits<_Alloc>::deallocate(_M_alloc, __p, _M_n + __tail);
+     743              :       }
+     744              : 
+     745              :       // Init the array elements
+     746              :       template<typename _Init>
+     747              :         void
+     748              :         _M_init(typename allocator_traits<_Alloc>::value_type* __p,
+     749              :                 _Init __init)
+     750              :         {
+     751              :           using _Tp = remove_pointer_t<_Init>;
+     752              :           using _Up = typename allocator_traits<_Alloc>::value_type;
+     753              : 
+     754              :           if constexpr (is_same_v<_Init, _Sp_overwrite_tag>)
+     755              :             {
+     756              :               std::uninitialized_default_construct_n(__p, _M_n);
+     757              :               _M_overwrite = true;
+     758              :             }
+     759              :           else if (__init == nullptr)
+     760              :             std::__uninitialized_default_n_a(__p, _M_n, _M_alloc);
+     761              :           else if constexpr (!is_array_v<_Tp>)
+     762              :             std::__uninitialized_fill_n_a(__p, _M_n, *__init, _M_alloc);
+     763              :           else
+     764              :             {
+     765              : #pragma GCC diagnostic push
+     766              : #pragma GCC diagnostic ignored "-Wunused-local-typedefs"
+     767              :               struct _Iter
+     768              :               {
+     769              :                 using value_type = _Up;
+     770              :                 using difference_type = ptrdiff_t;
+     771              :                 using pointer = const _Up*;
+     772              :                 using reference = const _Up&;
+     773              :                 using iterator_category = forward_iterator_tag;
+     774              : 
+     775              :                 const _Up* _M_p;
+     776              :                 size_t _M_len;
+     777              :                 size_t _M_pos;
+     778              : 
+     779              :                 _Iter& operator++() { ++_M_pos; return *this; }
+     780              :                 _Iter operator++(int) { auto __i(*this); ++_M_pos; return __i; }
+     781              : 
+     782              :                 reference operator*() const { return _M_p[_M_pos % _M_len]; }
+     783              :                 pointer operator->() const { return _M_p + (_M_pos % _M_len); }
+     784              : 
+     785              :                 bool operator==(const _Iter& __i) const
+     786              :                 { return _M_pos == __i._M_pos; }
+     787              :               };
+     788              : #pragma GCC diagnostic pop
+     789              : 
+     790              :               _Iter __first{_S_first_elem(__init), sizeof(_Tp) / sizeof(_Up)};
+     791              :               _Iter __last = __first;
+     792              :               __last._M_pos = _M_n;
+     793              :               std::__uninitialized_copy_a(__first, __last, __p, _M_alloc);
+     794              :             }
+     795              :         }
+     796              : 
+     797              :     protected:
+     798              :       // Destroy the array elements
+     799              :       void
+     800              :       _M_dispose_array(typename allocator_traits<_Alloc>::value_type* __p)
+     801              :       {
+     802              :         if (_M_overwrite)
+     803              :           std::destroy_n(__p, _M_n);
+     804              :         else
+     805              :           {
+     806              :             size_t __n = _M_n;
+     807              :             while (__n--)
+     808              :               allocator_traits<_Alloc>::destroy(_M_alloc, __p + __n);
+     809              :           }
+     810              :       }
+     811              : 
+     812              :     private:
+     813              :       template<typename _Tp>
+     814              :         static _Tp*
+     815              :         _S_first_elem(_Tp* __p) { return __p; }
+     816              : 
+     817              :       template<typename _Tp, size_t _Nm>
+     818              :         static auto
+     819              :         _S_first_elem(_Tp (*__p)[_Nm]) { return _S_first_elem(*__p); }
+     820              :     };
+     821              : 
+     822              :   // Control block for make_shared<T[]>, make_shared<T[N]> etc. that will be
+     823              :   // placed into unused memory at the end of the array.
+     824              :   template<typename _Alloc, _Lock_policy _Lp>
+     825              :     class _Sp_counted_array final
+     826              :     : public _Sp_counted_base<_Lp>, _Sp_counted_array_base<_Alloc>
+     827              :     {
+     828              :       using pointer = typename allocator_traits<_Alloc>::pointer;
+     829              : 
+     830              :       pointer _M_alloc_ptr;
+     831              : 
+     832              :       auto _M_ptr() const noexcept { return std::to_address(_M_alloc_ptr); }
+     833              : 
+     834              :       friend class __shared_count<_Lp>; // To be able to call _M_ptr().
+     835              : 
+     836              :     public:
+     837              :       _Sp_counted_array(const _Sp_counted_array_base<_Alloc>& __a,
+     838              :                         pointer __p) noexcept
+     839              :       : _Sp_counted_array_base<_Alloc>(__a), _M_alloc_ptr(__p)
+     840              :       { }
+     841              : 
+     842              :       ~_Sp_counted_array() = default;
+     843              : 
+     844              :       virtual void
+     845              :       _M_dispose() noexcept
+     846              :       {
+     847              :         if (this->_M_n)
+     848              :           this->_M_dispose_array(_M_ptr());
+     849              :       }
+     850              : 
+     851              :       // Override because the allocator needs to know the dynamic type
+     852              :       virtual void
+     853              :       _M_destroy() noexcept
+     854              :       {
+     855              :         _Sp_counted_array_base<_Alloc> __a = *this;
+     856              :         pointer __p = _M_alloc_ptr;
+     857              :         this->~_Sp_counted_array();
+     858              :         __a._M_dealloc_array(__p, _S_tail());
+     859              :       }
+     860              : 
+     861              :       // Returns the number of additional array elements that must be
+     862              :       // allocated in order to store a _Sp_counted_array at the end.
+     863              :       static constexpr size_t
+     864              :       _S_tail()
+     865              :       {
+     866              :         // The array elemenent type.
+     867              :         using _Tp = typename allocator_traits<_Alloc>::value_type;
+     868              : 
+     869              :         // The space needed to store a _Sp_counted_array object.
+     870              :         size_t __bytes = sizeof(_Sp_counted_array);
+     871              : 
+     872              :         // Add any padding needed for manual alignment within the buffer.
+     873              :         if constexpr (alignof(_Tp) < alignof(_Sp_counted_array))
+     874              :           __bytes += alignof(_Sp_counted_array) - alignof(_Tp);
+     875              : 
+     876              :         return (__bytes + sizeof(_Tp) - 1) / sizeof(_Tp);
+     877              :       }
+     878              : 
+     879              :       void*
+     880              :       _M_get_deleter(const std::type_info&) noexcept override
+     881              :       { return nullptr; }
+     882              :     };
+     883              : #endif // C++20
+     884              : 
+     885              :   // The default deleter for shared_ptr<T[]> and shared_ptr<T[N]>.
+     886              :   struct __sp_array_delete
+     887              :   {
+     888              :     template<typename _Yp>
+     889              :       void operator()(_Yp* __p) const { delete[] __p; }
+     890              :   };
+     891              : 
+     892              :   template<_Lock_policy _Lp>
+     893              :     class __shared_count
+     894              :     {
+     895              :       // Prevent _Sp_alloc_shared_tag from matching the shared_ptr(P, D) ctor.
+     896              :       template<typename _Tp>
+     897              :         struct __not_alloc_shared_tag { using type = void; };
+     898              : 
+     899              :       template<typename _Tp>
+     900              :         struct __not_alloc_shared_tag<_Sp_alloc_shared_tag<_Tp>> { };
+     901              : 
+     902              : #if __cpp_lib_shared_ptr_arrays >= 201707L
+     903              :       template<typename _Alloc>
+     904              :         struct __not_alloc_shared_tag<_Sp_counted_array_base<_Alloc>> { };
+     905              : #endif
+     906              : 
+     907              :     public:
+     908          470 :       constexpr __shared_count() noexcept : _M_pi(0)
+     909          470 :       { }
+     910              : 
+     911              :       template<typename _Ptr>
+     912              :         explicit
+     913              :         __shared_count(_Ptr __p) : _M_pi(0)
+     914              :         {
+     915              :           __try
+     916              :             {
+     917              :               _M_pi = new _Sp_counted_ptr<_Ptr, _Lp>(__p);
+     918              :             }
+     919              :           __catch(...)
+     920              :             {
+     921              :               delete __p;
+     922              :               __throw_exception_again;
+     923              :             }
+     924              :         }
+     925              : 
+     926              :       template<typename _Ptr>
+     927              :         __shared_count(_Ptr __p, /* is_array = */ false_type)
+     928              :         : __shared_count(__p)
+     929              :         { }
+     930              : 
+     931              :       template<typename _Ptr>
+     932              :         __shared_count(_Ptr __p, /* is_array = */ true_type)
+     933              :         : __shared_count(__p, __sp_array_delete{}, allocator<void>())
+     934              :         { }
+     935              : 
+     936              :       template<typename _Ptr, typename _Deleter,
+     937              :                typename = typename __not_alloc_shared_tag<_Deleter>::type>
+     938              :         __shared_count(_Ptr __p, _Deleter __d)
+     939              :         : __shared_count(__p, std::move(__d), allocator<void>())
+     940              :         { }
+     941              : 
+     942              :       template<typename _Ptr, typename _Deleter, typename _Alloc,
+     943              :                typename = typename __not_alloc_shared_tag<_Deleter>::type>
+     944              :         __shared_count(_Ptr __p, _Deleter __d, _Alloc __a) : _M_pi(0)
+     945              :         {
+     946              :           typedef _Sp_counted_deleter<_Ptr, _Deleter, _Alloc, _Lp> _Sp_cd_type;
+     947              :           __try
+     948              :             {
+     949              :               typename _Sp_cd_type::__allocator_type __a2(__a);
+     950              :               auto __guard = std::__allocate_guarded(__a2);
+     951              :               _Sp_cd_type* __mem = __guard.get();
+     952              :               ::new (__mem) _Sp_cd_type(__p, std::move(__d), std::move(__a));
+     953              :               _M_pi = __mem;
+     954              :               __guard = nullptr;
+     955              :             }
+     956              :           __catch(...)
+     957              :             {
+     958              :               __d(__p); // Call _Deleter on __p.
+     959              :               __throw_exception_again;
+     960              :             }
+     961              :         }
+     962              : 
+     963              :       template<typename _Tp, typename _Alloc, typename... _Args>
+     964           20 :         __shared_count(_Tp*& __p, _Sp_alloc_shared_tag<_Alloc> __a,
+     965              :                        _Args&&... __args)
+     966              :         {
+     967              :           typedef _Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp> _Sp_cp_type;
+     968           20 :           typename _Sp_cp_type::__allocator_type __a2(__a._M_a);
+     969           20 :           auto __guard = std::__allocate_guarded(__a2);
+     970           20 :           _Sp_cp_type* __mem = __guard.get();
+     971           20 :           auto __pi = ::new (__mem)
+     972              :             _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...);
+     973           20 :           __guard = nullptr;
+     974           20 :           _M_pi = __pi;
+     975           20 :           __p = __pi->_M_ptr();
+     976           40 :         }
+     977              : 
+     978              : #if __cpp_lib_shared_ptr_arrays >= 201707L
+     979              :       template<typename _Tp, typename _Alloc, typename _Init>
+     980              :         __shared_count(_Tp*& __p, const _Sp_counted_array_base<_Alloc>& __a,
+     981              :                        _Init __init)
+     982              :         {
+     983              :           using _Up = remove_all_extents_t<_Tp>;
+     984              :           static_assert(is_same_v<_Up, typename _Alloc::value_type>);
+     985              : 
+     986              :           using _Sp_ca_type = _Sp_counted_array<_Alloc, _Lp>;
+     987              :           const size_t __tail = _Sp_ca_type::_S_tail();
+     988              : 
+     989              :           struct _Guarded_ptr : _Sp_counted_array_base<_Alloc>
+     990              :           {
+     991              :             typename allocator_traits<_Alloc>::pointer _M_ptr;
+     992              : 
+     993              :             _Guarded_ptr(_Sp_counted_array_base<_Alloc> __a)
+     994              :             : _Sp_counted_array_base<_Alloc>(__a),
+     995              :               _M_ptr(this->_M_alloc_array(_Sp_ca_type::_S_tail()))
+     996              :             { }
+     997              : 
+     998              :             ~_Guarded_ptr()
+     999              :             {
+    1000              :               if (_M_ptr)
+    1001              :                 this->_M_dealloc_array(_M_ptr, _Sp_ca_type::_S_tail());
+    1002              :             }
+    1003              :           };
+    1004              : 
+    1005              :           _Guarded_ptr __guard{__a};
+    1006              :           _Up* const __raw = std::to_address(__guard._M_ptr);
+    1007              :           __guard._M_init(__raw, __init); // might throw
+    1008              : 
+    1009              :           void* __c = __raw + __a._M_n;
+    1010              :           if constexpr (alignof(_Up) < alignof(_Sp_ca_type))
+    1011              :             {
+    1012              :               size_t __space = sizeof(_Up) * __tail;
+    1013              :               __c = std::align(alignof(_Sp_ca_type), sizeof(_Sp_ca_type),
+    1014              :                                __c, __space);
+    1015              :             }
+    1016              :           auto __pi = ::new(__c) _Sp_ca_type(__guard, __guard._M_ptr);
+    1017              :           __guard._M_ptr = nullptr;
+    1018              :           _M_pi = __pi;
+    1019              :           __p = reinterpret_cast<_Tp*>(__raw);
+    1020              :         }
+    1021              : #endif
+    1022              : 
+    1023              : #if _GLIBCXX_USE_DEPRECATED
+    1024              : #pragma GCC diagnostic push
+    1025              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+    1026              :       // Special case for auto_ptr<_Tp> to provide the strong guarantee.
+    1027              :       template<typename _Tp>
+    1028              :         explicit
+    1029              :         __shared_count(std::auto_ptr<_Tp>&& __r);
+    1030              : #pragma GCC diagnostic pop
+    1031              : #endif
+    1032              : 
+    1033              :       // Special case for unique_ptr<_Tp,_Del> to provide the strong guarantee.
+    1034              :       template<typename _Tp, typename _Del>
+    1035              :         explicit
+    1036              :         __shared_count(std::unique_ptr<_Tp, _Del>&& __r) : _M_pi(0)
+    1037              :         {
+    1038              :           // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1039              :           // 2415. Inconsistency between unique_ptr and shared_ptr
+    1040              :           if (__r.get() == nullptr)
+    1041              :             return;
+    1042              : 
+    1043              :           using _Ptr = typename unique_ptr<_Tp, _Del>::pointer;
+    1044              :           using _Del2 = __conditional_t<is_reference<_Del>::value,
+    1045              :               reference_wrapper<typename remove_reference<_Del>::type>,
+    1046              :               _Del>;
+    1047              :           using _Sp_cd_type
+    1048              :             = _Sp_counted_deleter<_Ptr, _Del2, allocator<void>, _Lp>;
+    1049              :           using _Alloc = allocator<_Sp_cd_type>;
+    1050              :           using _Alloc_traits = allocator_traits<_Alloc>;
+    1051              :           _Alloc __a;
+    1052              :           _Sp_cd_type* __mem = _Alloc_traits::allocate(__a, 1);
+    1053              :           // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1054              :           // 3548. shared_ptr construction from unique_ptr should move
+    1055              :           // (not copy) the deleter
+    1056              :           _Alloc_traits::construct(__a, __mem, __r.release(),
+    1057              :                                    std::forward<_Del>(__r.get_deleter()));
+    1058              :           _M_pi = __mem;
+    1059              :         }
+    1060              : 
+    1061              :       // Throw bad_weak_ptr when __r._M_get_use_count() == 0.
+    1062              :       explicit __shared_count(const __weak_count<_Lp>& __r);
+    1063              : 
+    1064              :       // Does not throw if __r._M_get_use_count() == 0, caller must check.
+    1065              :       explicit
+    1066              :       __shared_count(const __weak_count<_Lp>& __r, std::nothrow_t) noexcept;
+    1067              : 
+    1068     36926054 :       ~__shared_count() noexcept
+    1069              :       {
+    1070     36926054 :         if (_M_pi != nullptr)
+    1071     36925586 :           _M_pi->_M_release();
+    1072     36926054 :       }
+    1073              : 
+    1074     36925482 :       __shared_count(const __shared_count& __r) noexcept
+    1075     36925482 :       : _M_pi(__r._M_pi)
+    1076              :       {
+    1077     36925482 :         if (_M_pi != nullptr)
+    1078     36925482 :           _M_pi->_M_add_ref_copy();
+    1079     36925482 :       }
+    1080              : 
+    1081              :       __shared_count&
+    1082              :       operator=(const __shared_count& __r) noexcept
+    1083              :       {
+    1084              :         _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
+    1085              :         if (__tmp != _M_pi)
+    1086              :           {
+    1087              :             if (__tmp != nullptr)
+    1088              :               __tmp->_M_add_ref_copy();
+    1089              :             if (_M_pi != nullptr)
+    1090              :               _M_pi->_M_release();
+    1091              :             _M_pi = __tmp;
+    1092              :           }
+    1093              :         return *this;
+    1094              :       }
+    1095              : 
+    1096              :       void
+    1097          470 :       _M_swap(__shared_count& __r) noexcept
+    1098              :       {
+    1099          470 :         _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
+    1100          470 :         __r._M_pi = _M_pi;
+    1101          470 :         _M_pi = __tmp;
+    1102          470 :       }
+    1103              : 
+    1104              :       long
+    1105              :       _M_get_use_count() const noexcept
+    1106              :       { return _M_pi ? _M_pi->_M_get_use_count() : 0; }
+    1107              : 
+    1108              :       bool
+    1109              :       _M_unique() const noexcept
+    1110              :       { return this->_M_get_use_count() == 1; }
+    1111              : 
+    1112              :       void*
+    1113              :       _M_get_deleter(const std::type_info& __ti) const noexcept
+    1114              :       { return _M_pi ? _M_pi->_M_get_deleter(__ti) : nullptr; }
+    1115              : 
+    1116              :       bool
+    1117              :       _M_less(const __shared_count& __rhs) const noexcept
+    1118              :       { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }
+    1119              : 
+    1120              :       bool
+    1121              :       _M_less(const __weak_count<_Lp>& __rhs) const noexcept
+    1122              :       { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }
+    1123              : 
+    1124              :       // Friend function injected into enclosing namespace and found by ADL
+    1125              :       friend inline bool
+    1126              :       operator==(const __shared_count& __a, const __shared_count& __b) noexcept
+    1127              :       { return __a._M_pi == __b._M_pi; }
+    1128              : 
+    1129              :     private:
+    1130              :       friend class __weak_count<_Lp>;
+    1131              : #if __cplusplus >= 202002L
+    1132              :       template<typename> friend class _Sp_atomic;
+    1133              : #endif
+    1134              : 
+    1135              :       _Sp_counted_base<_Lp>*  _M_pi;
+    1136              :     };
+    1137              : 
+    1138              : 
+    1139              :   template<_Lock_policy _Lp>
+    1140              :     class __weak_count
+    1141              :     {
+    1142              :     public:
+    1143            0 :       constexpr __weak_count() noexcept : _M_pi(nullptr)
+    1144            0 :       { }
+    1145              : 
+    1146              :       __weak_count(const __shared_count<_Lp>& __r) noexcept
+    1147              :       : _M_pi(__r._M_pi)
+    1148              :       {
+    1149              :         if (_M_pi != nullptr)
+    1150              :           _M_pi->_M_weak_add_ref();
+    1151              :       }
+    1152              : 
+    1153              :       __weak_count(const __weak_count& __r) noexcept
+    1154              :       : _M_pi(__r._M_pi)
+    1155              :       {
+    1156              :         if (_M_pi != nullptr)
+    1157              :           _M_pi->_M_weak_add_ref();
+    1158              :       }
+    1159              : 
+    1160              :       __weak_count(__weak_count&& __r) noexcept
+    1161              :       : _M_pi(__r._M_pi)
+    1162              :       { __r._M_pi = nullptr; }
+    1163              : 
+    1164            0 :       ~__weak_count() noexcept
+    1165              :       {
+    1166            0 :         if (_M_pi != nullptr)
+    1167            0 :           _M_pi->_M_weak_release();
+    1168            0 :       }
+    1169              : 
+    1170              :       __weak_count&
+    1171              :       operator=(const __shared_count<_Lp>& __r) noexcept
+    1172              :       {
+    1173              :         _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
+    1174              :         if (__tmp != nullptr)
+    1175              :           __tmp->_M_weak_add_ref();
+    1176              :         if (_M_pi != nullptr)
+    1177              :           _M_pi->_M_weak_release();
+    1178              :         _M_pi = __tmp;
+    1179              :         return *this;
+    1180              :       }
+    1181              : 
+    1182              :       __weak_count&
+    1183              :       operator=(const __weak_count& __r) noexcept
+    1184              :       {
+    1185              :         _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
+    1186              :         if (__tmp != nullptr)
+    1187              :           __tmp->_M_weak_add_ref();
+    1188              :         if (_M_pi != nullptr)
+    1189              :           _M_pi->_M_weak_release();
+    1190              :         _M_pi = __tmp;
+    1191              :         return *this;
+    1192              :       }
+    1193              : 
+    1194              :       __weak_count&
+    1195              :       operator=(__weak_count&& __r) noexcept
+    1196              :       {
+    1197              :         if (_M_pi != nullptr)
+    1198              :           _M_pi->_M_weak_release();
+    1199              :         _M_pi = __r._M_pi;
+    1200              :         __r._M_pi = nullptr;
+    1201              :         return *this;
+    1202              :       }
+    1203              : 
+    1204              :       void
+    1205              :       _M_swap(__weak_count& __r) noexcept
+    1206              :       {
+    1207              :         _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
+    1208              :         __r._M_pi = _M_pi;
+    1209              :         _M_pi = __tmp;
+    1210              :       }
+    1211              : 
+    1212              :       long
+    1213              :       _M_get_use_count() const noexcept
+    1214              :       { return _M_pi != nullptr ? _M_pi->_M_get_use_count() : 0; }
+    1215              : 
+    1216              :       bool
+    1217              :       _M_less(const __weak_count& __rhs) const noexcept
+    1218              :       { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }
+    1219              : 
+    1220              :       bool
+    1221              :       _M_less(const __shared_count<_Lp>& __rhs) const noexcept
+    1222              :       { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }
+    1223              : 
+    1224              :       // Friend function injected into enclosing namespace and found by ADL
+    1225              :       friend inline bool
+    1226              :       operator==(const __weak_count& __a, const __weak_count& __b) noexcept
+    1227              :       { return __a._M_pi == __b._M_pi; }
+    1228              : 
+    1229              :     private:
+    1230              :       friend class __shared_count<_Lp>;
+    1231              : #if __cplusplus >= 202002L
+    1232              :       template<typename> friend class _Sp_atomic;
+    1233              : #endif
+    1234              : 
+    1235              :       _Sp_counted_base<_Lp>*  _M_pi;
+    1236              :     };
+    1237              : 
+    1238              :   // Now that __weak_count is defined we can define this constructor:
+    1239              :   template<_Lock_policy _Lp>
+    1240              :     inline
+    1241              :     __shared_count<_Lp>::__shared_count(const __weak_count<_Lp>& __r)
+    1242              :     : _M_pi(__r._M_pi)
+    1243              :     {
+    1244              :       if (_M_pi == nullptr || !_M_pi->_M_add_ref_lock_nothrow())
+    1245              :         __throw_bad_weak_ptr();
+    1246              :     }
+    1247              : 
+    1248              :   // Now that __weak_count is defined we can define this constructor:
+    1249              :   template<_Lock_policy _Lp>
+    1250              :     inline
+    1251              :     __shared_count<_Lp>::
+    1252              :     __shared_count(const __weak_count<_Lp>& __r, std::nothrow_t) noexcept
+    1253              :     : _M_pi(__r._M_pi)
+    1254              :     {
+    1255              :       if (_M_pi && !_M_pi->_M_add_ref_lock_nothrow())
+    1256              :         _M_pi = nullptr;
+    1257              :     }
+    1258              : 
+    1259              :   // Helper traits for shared_ptr of array:
+    1260              : 
+    1261              :   // A pointer type Y* is said to be compatible with a pointer type T* when
+    1262              :   // either Y* is convertible to T* or Y is U[N] and T is U cv [].
+    1263              :   template<typename _Yp_ptr, typename _Tp_ptr>
+    1264              :     struct __sp_compatible_with
+    1265              :     : false_type
+    1266              :     { };
+    1267              : 
+    1268              :   template<typename _Yp, typename _Tp>
+    1269              :     struct __sp_compatible_with<_Yp*, _Tp*>
+    1270              :     : is_convertible<_Yp*, _Tp*>::type
+    1271              :     { };
+    1272              : 
+    1273              :   template<typename _Up, size_t _Nm>
+    1274              :     struct __sp_compatible_with<_Up(*)[_Nm], _Up(*)[]>
+    1275              :     : true_type
+    1276              :     { };
+    1277              : 
+    1278              :   template<typename _Up, size_t _Nm>
+    1279              :     struct __sp_compatible_with<_Up(*)[_Nm], const _Up(*)[]>
+    1280              :     : true_type
+    1281              :     { };
+    1282              : 
+    1283              :   template<typename _Up, size_t _Nm>
+    1284              :     struct __sp_compatible_with<_Up(*)[_Nm], volatile _Up(*)[]>
+    1285              :     : true_type
+    1286              :     { };
+    1287              : 
+    1288              :   template<typename _Up, size_t _Nm>
+    1289              :     struct __sp_compatible_with<_Up(*)[_Nm], const volatile _Up(*)[]>
+    1290              :     : true_type
+    1291              :     { };
+    1292              : 
+    1293              :   // Test conversion from Y(*)[N] to U(*)[N] without forming invalid type Y[N].
+    1294              :   template<typename _Up, size_t _Nm, typename _Yp, typename = void>
+    1295              :     struct __sp_is_constructible_arrN
+    1296              :     : false_type
+    1297              :     { };
+    1298              : 
+    1299              :   template<typename _Up, size_t _Nm, typename _Yp>
+    1300              :     struct __sp_is_constructible_arrN<_Up, _Nm, _Yp, __void_t<_Yp[_Nm]>>
+    1301              :     : is_convertible<_Yp(*)[_Nm], _Up(*)[_Nm]>::type
+    1302              :     { };
+    1303              : 
+    1304              :   // Test conversion from Y(*)[] to U(*)[] without forming invalid type Y[].
+    1305              :   template<typename _Up, typename _Yp, typename = void>
+    1306              :     struct __sp_is_constructible_arr
+    1307              :     : false_type
+    1308              :     { };
+    1309              : 
+    1310              :   template<typename _Up, typename _Yp>
+    1311              :     struct __sp_is_constructible_arr<_Up, _Yp, __void_t<_Yp[]>>
+    1312              :     : is_convertible<_Yp(*)[], _Up(*)[]>::type
+    1313              :     { };
+    1314              : 
+    1315              :   // Trait to check if shared_ptr<T> can be constructed from Y*.
+    1316              :   template<typename _Tp, typename _Yp>
+    1317              :     struct __sp_is_constructible;
+    1318              : 
+    1319              :   // When T is U[N], Y(*)[N] shall be convertible to T*;
+    1320              :   template<typename _Up, size_t _Nm, typename _Yp>
+    1321              :     struct __sp_is_constructible<_Up[_Nm], _Yp>
+    1322              :     : __sp_is_constructible_arrN<_Up, _Nm, _Yp>::type
+    1323              :     { };
+    1324              : 
+    1325              :   // when T is U[], Y(*)[] shall be convertible to T*;
+    1326              :   template<typename _Up, typename _Yp>
+    1327              :     struct __sp_is_constructible<_Up[], _Yp>
+    1328              :     : __sp_is_constructible_arr<_Up, _Yp>::type
+    1329              :     { };
+    1330              : 
+    1331              :   // otherwise, Y* shall be convertible to T*.
+    1332              :   template<typename _Tp, typename _Yp>
+    1333              :     struct __sp_is_constructible
+    1334              :     : is_convertible<_Yp*, _Tp*>::type
+    1335              :     { };
+    1336              : 
+    1337              : 
+    1338              :   // Define operator* and operator-> for shared_ptr<T>.
+    1339              :   template<typename _Tp, _Lock_policy _Lp,
+    1340              :            bool = is_array<_Tp>::value, bool = is_void<_Tp>::value>
+    1341              :     class __shared_ptr_access
+    1342              :     {
+    1343              :     public:
+    1344              :       using element_type = _Tp;
+    1345              : 
+    1346              :       element_type&
+    1347            0 :       operator*() const noexcept
+    1348              :       {
+    1349            0 :         __glibcxx_assert(_M_get() != nullptr);
+    1350            0 :         return *_M_get();
+    1351              :       }
+    1352              : 
+    1353              :       element_type*
+    1354          192 :       operator->() const noexcept
+    1355              :       {
+    1356              :         _GLIBCXX_DEBUG_PEDASSERT(_M_get() != nullptr);
+    1357          192 :         return _M_get();
+    1358              :       }
+    1359              : 
+    1360              :     private:
+    1361              :       element_type*
+    1362          192 :       _M_get() const noexcept
+    1363          192 :       { return static_cast<const __shared_ptr<_Tp, _Lp>*>(this)->get(); }
+    1364              :     };
+    1365              : 
+    1366              :   // Define operator-> for shared_ptr<cv void>.
+    1367              :   template<typename _Tp, _Lock_policy _Lp>
+    1368              :     class __shared_ptr_access<_Tp, _Lp, false, true>
+    1369              :     {
+    1370              :     public:
+    1371              :       using element_type = _Tp;
+    1372              : 
+    1373              :       element_type*
+    1374              :       operator->() const noexcept
+    1375              :       {
+    1376              :         auto __ptr = static_cast<const __shared_ptr<_Tp, _Lp>*>(this)->get();
+    1377              :         _GLIBCXX_DEBUG_PEDASSERT(__ptr != nullptr);
+    1378              :         return __ptr;
+    1379              :       }
+    1380              :     };
+    1381              : 
+    1382              :   // Define operator[] for shared_ptr<T[]> and shared_ptr<T[N]>.
+    1383              :   template<typename _Tp, _Lock_policy _Lp>
+    1384              :     class __shared_ptr_access<_Tp, _Lp, true, false>
+    1385              :     {
+    1386              :     public:
+    1387              :       using element_type = typename remove_extent<_Tp>::type;
+    1388              : 
+    1389              : #if __cplusplus <= 201402L
+    1390              :       [[__deprecated__("shared_ptr<T[]>::operator* is absent from C++17")]]
+    1391              :       element_type&
+    1392              :       operator*() const noexcept
+    1393              :       {
+    1394              :         __glibcxx_assert(_M_get() != nullptr);
+    1395              :         return *_M_get();
+    1396              :       }
+    1397              : 
+    1398              :       [[__deprecated__("shared_ptr<T[]>::operator-> is absent from C++17")]]
+    1399              :       element_type*
+    1400              :       operator->() const noexcept
+    1401              :       {
+    1402              :         _GLIBCXX_DEBUG_PEDASSERT(_M_get() != nullptr);
+    1403              :         return _M_get();
+    1404              :       }
+    1405              : #endif
+    1406              : 
+    1407              :       element_type&
+    1408              :       operator[](ptrdiff_t __i) const noexcept
+    1409              :       {
+    1410              :         __glibcxx_assert(_M_get() != nullptr);
+    1411              :         __glibcxx_assert(!extent<_Tp>::value || __i < extent<_Tp>::value);
+    1412              :         return _M_get()[__i];
+    1413              :       }
+    1414              : 
+    1415              :     private:
+    1416              :       element_type*
+    1417              :       _M_get() const noexcept
+    1418              :       { return static_cast<const __shared_ptr<_Tp, _Lp>*>(this)->get(); }
+    1419              :     };
+    1420              : 
+    1421              :   template<typename _Tp, _Lock_policy _Lp>
+    1422              :     class __shared_ptr
+    1423              :     : public __shared_ptr_access<_Tp, _Lp>
+    1424              :     {
+    1425              :     public:
+    1426              :       using element_type = typename remove_extent<_Tp>::type;
+    1427              : 
+    1428              :     private:
+    1429              :       // Constraint for taking ownership of a pointer of type _Yp*:
+    1430              :       template<typename _Yp>
+    1431              :         using _SafeConv
+    1432              :           = typename enable_if<__sp_is_constructible<_Tp, _Yp>::value>::type;
+    1433              : 
+    1434              :       // Constraint for construction from shared_ptr and weak_ptr:
+    1435              :       template<typename _Yp, typename _Res = void>
+    1436              :         using _Compatible = typename
+    1437              :           enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type;
+    1438              : 
+    1439              :       // Constraint for assignment from shared_ptr and weak_ptr:
+    1440              :       template<typename _Yp>
+    1441              :         using _Assignable = _Compatible<_Yp, __shared_ptr&>;
+    1442              : 
+    1443              :       // Constraint for construction from unique_ptr:
+    1444              :       template<typename _Yp, typename _Del, typename _Res = void,
+    1445              :                typename _Ptr = typename unique_ptr<_Yp, _Del>::pointer>
+    1446              :         using _UniqCompatible = __enable_if_t<__and_<
+    1447              :           __sp_compatible_with<_Yp*, _Tp*>,
+    1448              :           is_convertible<_Ptr, element_type*>,
+    1449              :           is_move_constructible<_Del>
+    1450              :           >::value, _Res>;
+    1451              : 
+    1452              :       // Constraint for assignment from unique_ptr:
+    1453              :       template<typename _Yp, typename _Del>
+    1454              :         using _UniqAssignable = _UniqCompatible<_Yp, _Del, __shared_ptr&>;
+    1455              : 
+    1456              :     public:
+    1457              : 
+    1458              : #if __cplusplus > 201402L
+    1459              :       using weak_type = __weak_ptr<_Tp, _Lp>;
+    1460              : #endif
+    1461              : 
+    1462            0 :       constexpr __shared_ptr() noexcept
+    1463            0 :       : _M_ptr(0), _M_refcount()
+    1464            0 :       { }
+    1465              : 
+    1466              :       template<typename _Yp, typename = _SafeConv<_Yp>>
+    1467              :         explicit
+    1468              :         __shared_ptr(_Yp* __p)
+    1469              :         : _M_ptr(__p), _M_refcount(__p, typename is_array<_Tp>::type())
+    1470              :         {
+    1471              :           static_assert( !is_void<_Yp>::value, "incomplete type" );
+    1472              :           static_assert( sizeof(_Yp) > 0, "incomplete type" );
+    1473              :           _M_enable_shared_from_this_with(__p);
+    1474              :         }
+    1475              : 
+    1476              :       template<typename _Yp, typename _Deleter, typename = _SafeConv<_Yp>>
+    1477              :         __shared_ptr(_Yp* __p, _Deleter __d)
+    1478              :         : _M_ptr(__p), _M_refcount(__p, std::move(__d))
+    1479              :         {
+    1480              :           static_assert(__is_invocable<_Deleter&, _Yp*&>::value,
+    1481              :               "deleter expression d(p) is well-formed");
+    1482              :           _M_enable_shared_from_this_with(__p);
+    1483              :         }
+    1484              : 
+    1485              :       template<typename _Yp, typename _Deleter, typename _Alloc,
+    1486              :                typename = _SafeConv<_Yp>>
+    1487              :         __shared_ptr(_Yp* __p, _Deleter __d, _Alloc __a)
+    1488              :         : _M_ptr(__p), _M_refcount(__p, std::move(__d), std::move(__a))
+    1489              :         {
+    1490              :           static_assert(__is_invocable<_Deleter&, _Yp*&>::value,
+    1491              :               "deleter expression d(p) is well-formed");
+    1492              :           _M_enable_shared_from_this_with(__p);
+    1493              :         }
+    1494              : 
+    1495              :       template<typename _Deleter>
+    1496              :         __shared_ptr(nullptr_t __p, _Deleter __d)
+    1497              :         : _M_ptr(0), _M_refcount(__p, std::move(__d))
+    1498              :         { }
+    1499              : 
+    1500              :       template<typename _Deleter, typename _Alloc>
+    1501              :         __shared_ptr(nullptr_t __p, _Deleter __d, _Alloc __a)
+    1502              :         : _M_ptr(0), _M_refcount(__p, std::move(__d), std::move(__a))
+    1503              :         { }
+    1504              : 
+    1505              :       // Aliasing constructor
+    1506              :       template<typename _Yp>
+    1507              :         __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r,
+    1508              :                      element_type* __p) noexcept
+    1509              :         : _M_ptr(__p), _M_refcount(__r._M_refcount) // never throws
+    1510              :         { }
+    1511              : 
+    1512              :       // Aliasing constructor
+    1513              :       template<typename _Yp>
+    1514              :         __shared_ptr(__shared_ptr<_Yp, _Lp>&& __r,
+    1515              :                      element_type* __p) noexcept
+    1516              :         : _M_ptr(__p), _M_refcount()
+    1517              :         {
+    1518              :           _M_refcount._M_swap(__r._M_refcount);
+    1519              :           __r._M_ptr = nullptr;
+    1520              :         }
+    1521              : 
+    1522     36925448 :       __shared_ptr(const __shared_ptr&) noexcept = default;
+    1523              :       __shared_ptr& operator=(const __shared_ptr&) noexcept = default;
+    1524     36925514 :       ~__shared_ptr() = default;
+    1525              : 
+    1526              :       template<typename _Yp, typename = _Compatible<_Yp>>
+    1527              :         __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept
+    1528              :         : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount)
+    1529              :         { }
+    1530              : 
+    1531           22 :       __shared_ptr(__shared_ptr&& __r) noexcept
+    1532           22 :       : _M_ptr(__r._M_ptr), _M_refcount()
+    1533              :       {
+    1534           22 :         _M_refcount._M_swap(__r._M_refcount);
+    1535           22 :         __r._M_ptr = nullptr;
+    1536           22 :       }
+    1537              : 
+    1538              :       template<typename _Yp, typename = _Compatible<_Yp>>
+    1539           22 :         __shared_ptr(__shared_ptr<_Yp, _Lp>&& __r) noexcept
+    1540           22 :         : _M_ptr(__r._M_ptr), _M_refcount()
+    1541              :         {
+    1542           22 :           _M_refcount._M_swap(__r._M_refcount);
+    1543           22 :           __r._M_ptr = nullptr;
+    1544           22 :         }
+    1545              : 
+    1546              :       template<typename _Yp, typename = _Compatible<_Yp>>
+    1547              :         explicit __shared_ptr(const __weak_ptr<_Yp, _Lp>& __r)
+    1548              :         : _M_refcount(__r._M_refcount) // may throw
+    1549              :         {
+    1550              :           // It is now safe to copy __r._M_ptr, as
+    1551              :           // _M_refcount(__r._M_refcount) did not throw.
+    1552              :           _M_ptr = __r._M_ptr;
+    1553              :         }
+    1554              : 
+    1555              :       // If an exception is thrown this constructor has no effect.
+    1556              :       template<typename _Yp, typename _Del,
+    1557              :                typename = _UniqCompatible<_Yp, _Del>>
+    1558              :         __shared_ptr(unique_ptr<_Yp, _Del>&& __r)
+    1559              :         : _M_ptr(__r.get()), _M_refcount()
+    1560              :         {
+    1561              :           auto __raw = __to_address(__r.get());
+    1562              :           _M_refcount = __shared_count<_Lp>(std::move(__r));
+    1563              :           _M_enable_shared_from_this_with(__raw);
+    1564              :         }
+    1565              : 
+    1566              : #if __cplusplus <= 201402L && _GLIBCXX_USE_DEPRECATED
+    1567              :     protected:
+    1568              :       // If an exception is thrown this constructor has no effect.
+    1569              :       template<typename _Tp1, typename _Del,
+    1570              :                typename enable_if<__and_<
+    1571              :                  __not_<is_array<_Tp>>, is_array<_Tp1>,
+    1572              :                  is_convertible<typename unique_ptr<_Tp1, _Del>::pointer, _Tp*>
+    1573              :                >::value, bool>::type = true>
+    1574              :         __shared_ptr(unique_ptr<_Tp1, _Del>&& __r, __sp_array_delete)
+    1575              :         : _M_ptr(__r.get()), _M_refcount()
+    1576              :         {
+    1577              :           auto __raw = __to_address(__r.get());
+    1578              :           _M_refcount = __shared_count<_Lp>(std::move(__r));
+    1579              :           _M_enable_shared_from_this_with(__raw);
+    1580              :         }
+    1581              :     public:
+    1582              : #endif
+    1583              : 
+    1584              : #if _GLIBCXX_USE_DEPRECATED
+    1585              : #pragma GCC diagnostic push
+    1586              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+    1587              :       // Postcondition: use_count() == 1 and __r.get() == 0
+    1588              :       template<typename _Yp, typename = _Compatible<_Yp>>
+    1589              :         __shared_ptr(auto_ptr<_Yp>&& __r);
+    1590              : #pragma GCC diagnostic pop
+    1591              : #endif
+    1592              : 
+    1593              :       constexpr __shared_ptr(nullptr_t) noexcept : __shared_ptr() { }
+    1594              : 
+    1595              :       template<typename _Yp>
+    1596              :         _Assignable<_Yp>
+    1597              :         operator=(const __shared_ptr<_Yp, _Lp>& __r) noexcept
+    1598              :         {
+    1599              :           _M_ptr = __r._M_ptr;
+    1600              :           _M_refcount = __r._M_refcount; // __shared_count::op= doesn't throw
+    1601              :           return *this;
+    1602              :         }
+    1603              : 
+    1604              : #if _GLIBCXX_USE_DEPRECATED
+    1605              : #pragma GCC diagnostic push
+    1606              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+    1607              :       template<typename _Yp>
+    1608              :         _Assignable<_Yp>
+    1609              :         operator=(auto_ptr<_Yp>&& __r)
+    1610              :         {
+    1611              :           __shared_ptr(std::move(__r)).swap(*this);
+    1612              :           return *this;
+    1613              :         }
+    1614              : #pragma GCC diagnostic pop
+    1615              : #endif
+    1616              : 
+    1617              :       __shared_ptr&
+    1618            0 :       operator=(__shared_ptr&& __r) noexcept
+    1619              :       {
+    1620            0 :         __shared_ptr(std::move(__r)).swap(*this);
+    1621            0 :         return *this;
+    1622              :       }
+    1623              : 
+    1624              :       template<class _Yp>
+    1625              :         _Assignable<_Yp>
+    1626              :         operator=(__shared_ptr<_Yp, _Lp>&& __r) noexcept
+    1627              :         {
+    1628              :           __shared_ptr(std::move(__r)).swap(*this);
+    1629              :           return *this;
+    1630              :         }
+    1631              : 
+    1632              :       template<typename _Yp, typename _Del>
+    1633              :         _UniqAssignable<_Yp, _Del>
+    1634              :         operator=(unique_ptr<_Yp, _Del>&& __r)
+    1635              :         {
+    1636              :           __shared_ptr(std::move(__r)).swap(*this);
+    1637              :           return *this;
+    1638              :         }
+    1639              : 
+    1640              :       void
+    1641              :       reset() noexcept
+    1642              :       { __shared_ptr().swap(*this); }
+    1643              : 
+    1644              :       template<typename _Yp>
+    1645              :         _SafeConv<_Yp>
+    1646              :         reset(_Yp* __p) // _Yp must be complete.
+    1647              :         {
+    1648              :           // Catch self-reset errors.
+    1649              :           __glibcxx_assert(__p == nullptr || __p != _M_ptr);
+    1650              :           __shared_ptr(__p).swap(*this);
+    1651              :         }
+    1652              : 
+    1653              :       template<typename _Yp, typename _Deleter>
+    1654              :         _SafeConv<_Yp>
+    1655              :         reset(_Yp* __p, _Deleter __d)
+    1656              :         { __shared_ptr(__p, std::move(__d)).swap(*this); }
+    1657              : 
+    1658              :       template<typename _Yp, typename _Deleter, typename _Alloc>
+    1659              :         _SafeConv<_Yp>
+    1660              :         reset(_Yp* __p, _Deleter __d, _Alloc __a)
+    1661              :         { __shared_ptr(__p, std::move(__d), std::move(__a)).swap(*this); }
+    1662              : 
+    1663              :       /// Return the stored pointer.
+    1664              :       element_type*
+    1665          192 :       get() const noexcept
+    1666          192 :       { return _M_ptr; }
+    1667              : 
+    1668              :       /// Return true if the stored pointer is not null.
+    1669            0 :       explicit operator bool() const noexcept
+    1670            0 :       { return _M_ptr != nullptr; }
+    1671              : 
+    1672              :       /// Return true if use_count() == 1.
+    1673              :       bool
+    1674              :       unique() const noexcept
+    1675              :       { return _M_refcount._M_unique(); }
+    1676              : 
+    1677              :       /// If *this owns a pointer, return the number of owners, otherwise zero.
+    1678              :       long
+    1679              :       use_count() const noexcept
+    1680              :       { return _M_refcount._M_get_use_count(); }
+    1681              : 
+    1682              :       /// Exchange both the owned pointer and the stored pointer.
+    1683              :       void
+    1684            0 :       swap(__shared_ptr<_Tp, _Lp>& __other) noexcept
+    1685              :       {
+    1686            0 :         std::swap(_M_ptr, __other._M_ptr);
+    1687            0 :         _M_refcount._M_swap(__other._M_refcount);
+    1688            0 :       }
+    1689              : 
+    1690              :       /** @brief Define an ordering based on ownership.
+    1691              :        *
+    1692              :        * This function defines a strict weak ordering between two shared_ptr
+    1693              :        * or weak_ptr objects, such that one object is less than the other
+    1694              :        * unless they share ownership of the same pointer, or are both empty.
+    1695              :        * @{
+    1696              :       */
+    1697              :       template<typename _Tp1>
+    1698              :         bool
+    1699              :         owner_before(__shared_ptr<_Tp1, _Lp> const& __rhs) const noexcept
+    1700              :         { return _M_refcount._M_less(__rhs._M_refcount); }
+    1701              : 
+    1702              :       template<typename _Tp1>
+    1703              :         bool
+    1704              :         owner_before(__weak_ptr<_Tp1, _Lp> const& __rhs) const noexcept
+    1705              :         { return _M_refcount._M_less(__rhs._M_refcount); }
+    1706              :       /// @}
+    1707              : 
+    1708              :     protected:
+    1709              :       // This constructor is non-standard, it is used by allocate_shared.
+    1710              :       template<typename _Alloc, typename... _Args>
+    1711           20 :         __shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args)
+    1712           20 :         : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...)
+    1713           20 :         { _M_enable_shared_from_this_with(_M_ptr); }
+    1714              : 
+    1715              :       template<typename _Tp1, _Lock_policy _Lp1, typename _Alloc,
+    1716              :                typename... _Args>
+    1717              :         friend __shared_ptr<_Tp1, _Lp1>
+    1718              :         __allocate_shared(const _Alloc& __a, _Args&&... __args);
+    1719              : 
+    1720              : #if __cpp_lib_shared_ptr_arrays >= 201707L
+    1721              :       // This constructor is non-standard, it is used by allocate_shared<T[]>.
+    1722              :       template<typename _Alloc, typename _Init = const remove_extent_t<_Tp>*>
+    1723              :         __shared_ptr(const _Sp_counted_array_base<_Alloc>& __a,
+    1724              :                      _Init __init = nullptr)
+    1725              :         : _M_ptr(), _M_refcount(_M_ptr, __a, __init)
+    1726              :         { }
+    1727              : #endif
+    1728              : 
+    1729              :       // This constructor is used by __weak_ptr::lock() and
+    1730              :       // shared_ptr::shared_ptr(const weak_ptr&, std::nothrow_t).
+    1731              :       __shared_ptr(const __weak_ptr<_Tp, _Lp>& __r, std::nothrow_t) noexcept
+    1732              :       : _M_refcount(__r._M_refcount, std::nothrow)
+    1733              :       {
+    1734              :         _M_ptr = _M_refcount._M_get_use_count() ? __r._M_ptr : nullptr;
+    1735              :       }
+    1736              : 
+    1737              :       friend class __weak_ptr<_Tp, _Lp>;
+    1738              : 
+    1739              :     private:
+    1740              : 
+    1741              :       template<typename _Yp>
+    1742              :         using __esft_base_t = decltype(__enable_shared_from_this_base(
+    1743              :               std::declval<const __shared_count<_Lp>&>(),
+    1744              :               std::declval<_Yp*>()));
+    1745              : 
+    1746              :       // Detect an accessible and unambiguous enable_shared_from_this base.
+    1747              :       template<typename _Yp, typename = void>
+    1748              :         struct __has_esft_base
+    1749              :         : false_type { };
+    1750              : 
+    1751              :       template<typename _Yp>
+    1752              :         struct __has_esft_base<_Yp, __void_t<__esft_base_t<_Yp>>>
+    1753              :         : __not_<is_array<_Tp>> { }; // No enable shared_from_this for arrays
+    1754              : 
+    1755              :       template<typename _Yp, typename _Yp2 = typename remove_cv<_Yp>::type>
+    1756              :         typename enable_if<__has_esft_base<_Yp2>::value>::type
+    1757              :         _M_enable_shared_from_this_with(_Yp* __p) noexcept
+    1758              :         {
+    1759              :           if (auto __base = __enable_shared_from_this_base(_M_refcount, __p))
+    1760              :             __base->_M_weak_assign(const_cast<_Yp2*>(__p), _M_refcount);
+    1761              :         }
+    1762              : 
+    1763              :       template<typename _Yp, typename _Yp2 = typename remove_cv<_Yp>::type>
+    1764              :         typename enable_if<!__has_esft_base<_Yp2>::value>::type
+    1765           20 :         _M_enable_shared_from_this_with(_Yp*) noexcept
+    1766           20 :         { }
+    1767              : 
+    1768              :       void*
+    1769              :       _M_get_deleter(const std::type_info& __ti) const noexcept
+    1770              :       { return _M_refcount._M_get_deleter(__ti); }
+    1771              : 
+    1772              :       template<typename _Tp1, _Lock_policy _Lp1> friend class __shared_ptr;
+    1773              :       template<typename _Tp1, _Lock_policy _Lp1> friend class __weak_ptr;
+    1774              : 
+    1775              :       template<typename _Del, typename _Tp1, _Lock_policy _Lp1>
+    1776              :         friend _Del* get_deleter(const __shared_ptr<_Tp1, _Lp1>&) noexcept;
+    1777              : 
+    1778              :       template<typename _Del, typename _Tp1>
+    1779              :         friend _Del* get_deleter(const shared_ptr<_Tp1>&) noexcept;
+    1780              : 
+    1781              : #if __cplusplus >= 202002L
+    1782              :       friend _Sp_atomic<shared_ptr<_Tp>>;
+    1783              : #endif
+    1784              : 
+    1785              :       element_type*        _M_ptr;         // Contained pointer.
+    1786              :       __shared_count<_Lp>  _M_refcount;    // Reference counter.
+    1787              :     };
+    1788              : 
+    1789              : 
+    1790              :   // 20.7.2.2.7 shared_ptr comparisons
+    1791              :   template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
+    1792              :     inline bool
+    1793              :     operator==(const __shared_ptr<_Tp1, _Lp>& __a,
+    1794              :                const __shared_ptr<_Tp2, _Lp>& __b) noexcept
+    1795              :     { return __a.get() == __b.get(); }
+    1796              : 
+    1797              :   template<typename _Tp, _Lock_policy _Lp>
+    1798              :     inline bool
+    1799              :     operator==(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+    1800              :     { return !__a; }
+    1801              : 
+    1802              : #ifdef __cpp_lib_three_way_comparison
+    1803              :   template<typename _Tp, typename _Up, _Lock_policy _Lp>
+    1804              :     inline strong_ordering
+    1805              :     operator<=>(const __shared_ptr<_Tp, _Lp>& __a,
+    1806              :                 const __shared_ptr<_Up, _Lp>& __b) noexcept
+    1807              :     { return compare_three_way()(__a.get(), __b.get()); }
+    1808              : 
+    1809              :   template<typename _Tp, _Lock_policy _Lp>
+    1810              :     inline strong_ordering
+    1811              :     operator<=>(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+    1812              :     {
+    1813              :       using pointer = typename __shared_ptr<_Tp, _Lp>::element_type*;
+    1814              :       return compare_three_way()(__a.get(), static_cast<pointer>(nullptr));
+    1815              :     }
+    1816              : #else
+    1817              :   template<typename _Tp, _Lock_policy _Lp>
+    1818              :     inline bool
+    1819              :     operator==(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
+    1820              :     { return !__a; }
+    1821              : 
+    1822              :   template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
+    1823              :     inline bool
+    1824              :     operator!=(const __shared_ptr<_Tp1, _Lp>& __a,
+    1825              :                const __shared_ptr<_Tp2, _Lp>& __b) noexcept
+    1826              :     { return __a.get() != __b.get(); }
+    1827              : 
+    1828              :   template<typename _Tp, _Lock_policy _Lp>
+    1829              :     inline bool
+    1830              :     operator!=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+    1831              :     { return (bool)__a; }
+    1832              : 
+    1833              :   template<typename _Tp, _Lock_policy _Lp>
+    1834              :     inline bool
+    1835              :     operator!=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
+    1836              :     { return (bool)__a; }
+    1837              : 
+    1838              :   template<typename _Tp, typename _Up, _Lock_policy _Lp>
+    1839              :     inline bool
+    1840              :     operator<(const __shared_ptr<_Tp, _Lp>& __a,
+    1841              :               const __shared_ptr<_Up, _Lp>& __b) noexcept
+    1842              :     {
+    1843              :       using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type;
+    1844              :       using _Up_elt = typename __shared_ptr<_Up, _Lp>::element_type;
+    1845              :       using _Vp = typename common_type<_Tp_elt*, _Up_elt*>::type;
+    1846              :       return less<_Vp>()(__a.get(), __b.get());
+    1847              :     }
+    1848              : 
+    1849              :   template<typename _Tp, _Lock_policy _Lp>
+    1850              :     inline bool
+    1851              :     operator<(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+    1852              :     {
+    1853              :       using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type;
+    1854              :       return less<_Tp_elt*>()(__a.get(), nullptr);
+    1855              :     }
+    1856              : 
+    1857              :   template<typename _Tp, _Lock_policy _Lp>
+    1858              :     inline bool
+    1859              :     operator<(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
+    1860              :     {
+    1861              :       using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type;
+    1862              :       return less<_Tp_elt*>()(nullptr, __a.get());
+    1863              :     }
+    1864              : 
+    1865              :   template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
+    1866              :     inline bool
+    1867              :     operator<=(const __shared_ptr<_Tp1, _Lp>& __a,
+    1868              :                const __shared_ptr<_Tp2, _Lp>& __b) noexcept
+    1869              :     { return !(__b < __a); }
+    1870              : 
+    1871              :   template<typename _Tp, _Lock_policy _Lp>
+    1872              :     inline bool
+    1873              :     operator<=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+    1874              :     { return !(nullptr < __a); }
+    1875              : 
+    1876              :   template<typename _Tp, _Lock_policy _Lp>
+    1877              :     inline bool
+    1878              :     operator<=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
+    1879              :     { return !(__a < nullptr); }
+    1880              : 
+    1881              :   template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
+    1882              :     inline bool
+    1883              :     operator>(const __shared_ptr<_Tp1, _Lp>& __a,
+    1884              :               const __shared_ptr<_Tp2, _Lp>& __b) noexcept
+    1885              :     { return (__b < __a); }
+    1886              : 
+    1887              :   template<typename _Tp, _Lock_policy _Lp>
+    1888              :     inline bool
+    1889              :     operator>(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+    1890              :     { return nullptr < __a; }
+    1891              : 
+    1892              :   template<typename _Tp, _Lock_policy _Lp>
+    1893              :     inline bool
+    1894              :     operator>(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
+    1895              :     { return __a < nullptr; }
+    1896              : 
+    1897              :   template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
+    1898              :     inline bool
+    1899              :     operator>=(const __shared_ptr<_Tp1, _Lp>& __a,
+    1900              :                const __shared_ptr<_Tp2, _Lp>& __b) noexcept
+    1901              :     { return !(__a < __b); }
+    1902              : 
+    1903              :   template<typename _Tp, _Lock_policy _Lp>
+    1904              :     inline bool
+    1905              :     operator>=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+    1906              :     { return !(__a < nullptr); }
+    1907              : 
+    1908              :   template<typename _Tp, _Lock_policy _Lp>
+    1909              :     inline bool
+    1910              :     operator>=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
+    1911              :     { return !(nullptr < __a); }
+    1912              : #endif // three-way comparison
+    1913              : 
+    1914              :   // 20.7.2.2.8 shared_ptr specialized algorithms.
+    1915              :   template<typename _Tp, _Lock_policy _Lp>
+    1916              :     inline void
+    1917              :     swap(__shared_ptr<_Tp, _Lp>& __a, __shared_ptr<_Tp, _Lp>& __b) noexcept
+    1918              :     { __a.swap(__b); }
+    1919              : 
+    1920              :   // 20.7.2.2.9 shared_ptr casts
+    1921              : 
+    1922              :   // The seemingly equivalent code:
+    1923              :   // shared_ptr<_Tp, _Lp>(static_cast<_Tp*>(__r.get()))
+    1924              :   // will eventually result in undefined behaviour, attempting to
+    1925              :   // delete the same object twice.
+    1926              :   /// static_pointer_cast
+    1927              :   template<typename _Tp, typename _Tp1, _Lock_policy _Lp>
+    1928              :     inline __shared_ptr<_Tp, _Lp>
+    1929              :     static_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
+    1930              :     {
+    1931              :       using _Sp = __shared_ptr<_Tp, _Lp>;
+    1932              :       return _Sp(__r, static_cast<typename _Sp::element_type*>(__r.get()));
+    1933              :     }
+    1934              : 
+    1935              :   // The seemingly equivalent code:
+    1936              :   // shared_ptr<_Tp, _Lp>(const_cast<_Tp*>(__r.get()))
+    1937              :   // will eventually result in undefined behaviour, attempting to
+    1938              :   // delete the same object twice.
+    1939              :   /// const_pointer_cast
+    1940              :   template<typename _Tp, typename _Tp1, _Lock_policy _Lp>
+    1941              :     inline __shared_ptr<_Tp, _Lp>
+    1942              :     const_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
+    1943              :     {
+    1944              :       using _Sp = __shared_ptr<_Tp, _Lp>;
+    1945              :       return _Sp(__r, const_cast<typename _Sp::element_type*>(__r.get()));
+    1946              :     }
+    1947              : 
+    1948              :   // The seemingly equivalent code:
+    1949              :   // shared_ptr<_Tp, _Lp>(dynamic_cast<_Tp*>(__r.get()))
+    1950              :   // will eventually result in undefined behaviour, attempting to
+    1951              :   // delete the same object twice.
+    1952              :   /// dynamic_pointer_cast
+    1953              :   template<typename _Tp, typename _Tp1, _Lock_policy _Lp>
+    1954              :     inline __shared_ptr<_Tp, _Lp>
+    1955              :     dynamic_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
+    1956              :     {
+    1957              :       using _Sp = __shared_ptr<_Tp, _Lp>;
+    1958              :       if (auto* __p = dynamic_cast<typename _Sp::element_type*>(__r.get()))
+    1959              :         return _Sp(__r, __p);
+    1960              :       return _Sp();
+    1961              :     }
+    1962              : 
+    1963              : #if __cplusplus > 201402L
+    1964              :   template<typename _Tp, typename _Tp1, _Lock_policy _Lp>
+    1965              :     inline __shared_ptr<_Tp, _Lp>
+    1966              :     reinterpret_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
+    1967              :     {
+    1968              :       using _Sp = __shared_ptr<_Tp, _Lp>;
+    1969              :       return _Sp(__r, reinterpret_cast<typename _Sp::element_type*>(__r.get()));
+    1970              :     }
+    1971              : #endif
+    1972              : 
+    1973              :   template<typename _Tp, _Lock_policy _Lp>
+    1974              :     class __weak_ptr
+    1975              :     {
+    1976              :       template<typename _Yp, typename _Res = void>
+    1977              :         using _Compatible = typename
+    1978              :           enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type;
+    1979              : 
+    1980              :       // Constraint for assignment from shared_ptr and weak_ptr:
+    1981              :       template<typename _Yp>
+    1982              :         using _Assignable = _Compatible<_Yp, __weak_ptr&>;
+    1983              : 
+    1984              :     public:
+    1985              :       using element_type = typename remove_extent<_Tp>::type;
+    1986              : 
+    1987            0 :       constexpr __weak_ptr() noexcept
+    1988            0 :       : _M_ptr(nullptr), _M_refcount()
+    1989            0 :       { }
+    1990              : 
+    1991              :       __weak_ptr(const __weak_ptr&) noexcept = default;
+    1992              : 
+    1993            0 :       ~__weak_ptr() = default;
+    1994              : 
+    1995              :       // The "obvious" converting constructor implementation:
+    1996              :       //
+    1997              :       //  template<typename _Tp1>
+    1998              :       //    __weak_ptr(const __weak_ptr<_Tp1, _Lp>& __r)
+    1999              :       //    : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) // never throws
+    2000              :       //    { }
+    2001              :       //
+    2002              :       // has a serious problem.
+    2003              :       //
+    2004              :       //  __r._M_ptr may already have been invalidated. The _M_ptr(__r._M_ptr)
+    2005              :       //  conversion may require access to *__r._M_ptr (virtual inheritance).
+    2006              :       //
+    2007              :       // It is not possible to avoid spurious access violations since
+    2008              :       // in multithreaded programs __r._M_ptr may be invalidated at any point.
+    2009              :       template<typename _Yp, typename = _Compatible<_Yp>>
+    2010              :         __weak_ptr(const __weak_ptr<_Yp, _Lp>& __r) noexcept
+    2011              :         : _M_refcount(__r._M_refcount)
+    2012              :         { _M_ptr = __r.lock().get(); }
+    2013              : 
+    2014              :       template<typename _Yp, typename = _Compatible<_Yp>>
+    2015              :         __weak_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept
+    2016              :         : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount)
+    2017              :         { }
+    2018              : 
+    2019              :       __weak_ptr(__weak_ptr&& __r) noexcept
+    2020              :       : _M_ptr(__r._M_ptr), _M_refcount(std::move(__r._M_refcount))
+    2021              :       { __r._M_ptr = nullptr; }
+    2022              : 
+    2023              :       template<typename _Yp, typename = _Compatible<_Yp>>
+    2024              :         __weak_ptr(__weak_ptr<_Yp, _Lp>&& __r) noexcept
+    2025              :         : _M_ptr(__r.lock().get()), _M_refcount(std::move(__r._M_refcount))
+    2026              :         { __r._M_ptr = nullptr; }
+    2027              : 
+    2028              :       __weak_ptr&
+    2029              :       operator=(const __weak_ptr& __r) noexcept = default;
+    2030              : 
+    2031              :       template<typename _Yp>
+    2032              :         _Assignable<_Yp>
+    2033              :         operator=(const __weak_ptr<_Yp, _Lp>& __r) noexcept
+    2034              :         {
+    2035              :           _M_ptr = __r.lock().get();
+    2036              :           _M_refcount = __r._M_refcount;
+    2037              :           return *this;
+    2038              :         }
+    2039              : 
+    2040              :       template<typename _Yp>
+    2041              :         _Assignable<_Yp>
+    2042              :         operator=(const __shared_ptr<_Yp, _Lp>& __r) noexcept
+    2043              :         {
+    2044              :           _M_ptr = __r._M_ptr;
+    2045              :           _M_refcount = __r._M_refcount;
+    2046              :           return *this;
+    2047              :         }
+    2048              : 
+    2049              :       __weak_ptr&
+    2050              :       operator=(__weak_ptr&& __r) noexcept
+    2051              :       {
+    2052              :         __weak_ptr(std::move(__r)).swap(*this);
+    2053              :         return *this;
+    2054              :       }
+    2055              : 
+    2056              :       template<typename _Yp>
+    2057              :         _Assignable<_Yp>
+    2058              :         operator=(__weak_ptr<_Yp, _Lp>&& __r) noexcept
+    2059              :         {
+    2060              :           _M_ptr = __r.lock().get();
+    2061              :           _M_refcount = std::move(__r._M_refcount);
+    2062              :           __r._M_ptr = nullptr;
+    2063              :           return *this;
+    2064              :         }
+    2065              : 
+    2066              :       __shared_ptr<_Tp, _Lp>
+    2067              :       lock() const noexcept
+    2068              :       { return __shared_ptr<element_type, _Lp>(*this, std::nothrow); }
+    2069              : 
+    2070              :       long
+    2071              :       use_count() const noexcept
+    2072              :       { return _M_refcount._M_get_use_count(); }
+    2073              : 
+    2074              :       bool
+    2075              :       expired() const noexcept
+    2076              :       { return _M_refcount._M_get_use_count() == 0; }
+    2077              : 
+    2078              :       template<typename _Tp1>
+    2079              :         bool
+    2080              :         owner_before(const __shared_ptr<_Tp1, _Lp>& __rhs) const noexcept
+    2081              :         { return _M_refcount._M_less(__rhs._M_refcount); }
+    2082              : 
+    2083              :       template<typename _Tp1>
+    2084              :         bool
+    2085              :         owner_before(const __weak_ptr<_Tp1, _Lp>& __rhs) const noexcept
+    2086              :         { return _M_refcount._M_less(__rhs._M_refcount); }
+    2087              : 
+    2088              :       void
+    2089              :       reset() noexcept
+    2090              :       { __weak_ptr().swap(*this); }
+    2091              : 
+    2092              :       void
+    2093              :       swap(__weak_ptr& __s) noexcept
+    2094              :       {
+    2095              :         std::swap(_M_ptr, __s._M_ptr);
+    2096              :         _M_refcount._M_swap(__s._M_refcount);
+    2097              :       }
+    2098              : 
+    2099              :     private:
+    2100              :       // Used by __enable_shared_from_this.
+    2101              :       void
+    2102              :       _M_assign(_Tp* __ptr, const __shared_count<_Lp>& __refcount) noexcept
+    2103              :       {
+    2104              :         if (use_count() == 0)
+    2105              :           {
+    2106              :             _M_ptr = __ptr;
+    2107              :             _M_refcount = __refcount;
+    2108              :           }
+    2109              :       }
+    2110              : 
+    2111              :       template<typename _Tp1, _Lock_policy _Lp1> friend class __shared_ptr;
+    2112              :       template<typename _Tp1, _Lock_policy _Lp1> friend class __weak_ptr;
+    2113              :       friend class __enable_shared_from_this<_Tp, _Lp>;
+    2114              :       friend class enable_shared_from_this<_Tp>;
+    2115              : #if __cplusplus >= 202002L
+    2116              :       friend _Sp_atomic<weak_ptr<_Tp>>;
+    2117              : #endif
+    2118              : 
+    2119              :       element_type*      _M_ptr;         // Contained pointer.
+    2120              :       __weak_count<_Lp>  _M_refcount;    // Reference counter.
+    2121              :     };
+    2122              : 
+    2123              :   // 20.7.2.3.6 weak_ptr specialized algorithms.
+    2124              :   template<typename _Tp, _Lock_policy _Lp>
+    2125              :     inline void
+    2126              :     swap(__weak_ptr<_Tp, _Lp>& __a, __weak_ptr<_Tp, _Lp>& __b) noexcept
+    2127              :     { __a.swap(__b); }
+    2128              : 
+    2129              : #pragma GCC diagnostic push
+    2130              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+    2131              :   template<typename _Tp, typename _Tp1>
+    2132              :     struct _Sp_owner_less : public binary_function<_Tp, _Tp, bool>
+    2133              :     {
+    2134              :       bool
+    2135              :       operator()(const _Tp& __lhs, const _Tp& __rhs) const noexcept
+    2136              :       { return __lhs.owner_before(__rhs); }
+    2137              : 
+    2138              :       bool
+    2139              :       operator()(const _Tp& __lhs, const _Tp1& __rhs) const noexcept
+    2140              :       { return __lhs.owner_before(__rhs); }
+    2141              : 
+    2142              :       bool
+    2143              :       operator()(const _Tp1& __lhs, const _Tp& __rhs) const noexcept
+    2144              :       { return __lhs.owner_before(__rhs); }
+    2145              :     };
+    2146              : #pragma GCC diagnostic pop
+    2147              : 
+    2148              :   template<>
+    2149              :     struct _Sp_owner_less<void, void>
+    2150              :     {
+    2151              :       template<typename _Tp, typename _Up>
+    2152              :         auto
+    2153              :         operator()(const _Tp& __lhs, const _Up& __rhs) const noexcept
+    2154              :         -> decltype(__lhs.owner_before(__rhs))
+    2155              :         { return __lhs.owner_before(__rhs); }
+    2156              : 
+    2157              :       using is_transparent = void;
+    2158              :     };
+    2159              : 
+    2160              :   template<typename _Tp, _Lock_policy _Lp>
+    2161              :     struct owner_less<__shared_ptr<_Tp, _Lp>>
+    2162              :     : public _Sp_owner_less<__shared_ptr<_Tp, _Lp>, __weak_ptr<_Tp, _Lp>>
+    2163              :     { };
+    2164              : 
+    2165              :   template<typename _Tp, _Lock_policy _Lp>
+    2166              :     struct owner_less<__weak_ptr<_Tp, _Lp>>
+    2167              :     : public _Sp_owner_less<__weak_ptr<_Tp, _Lp>, __shared_ptr<_Tp, _Lp>>
+    2168              :     { };
+    2169              : 
+    2170              : 
+    2171              :   template<typename _Tp, _Lock_policy _Lp>
+    2172              :     class __enable_shared_from_this
+    2173              :     {
+    2174              :     protected:
+    2175              :       constexpr __enable_shared_from_this() noexcept { }
+    2176              : 
+    2177              :       __enable_shared_from_this(const __enable_shared_from_this&) noexcept { }
+    2178              : 
+    2179              :       __enable_shared_from_this&
+    2180              :       operator=(const __enable_shared_from_this&) noexcept
+    2181              :       { return *this; }
+    2182              : 
+    2183              :       ~__enable_shared_from_this() { }
+    2184              : 
+    2185              :     public:
+    2186              :       __shared_ptr<_Tp, _Lp>
+    2187              :       shared_from_this()
+    2188              :       { return __shared_ptr<_Tp, _Lp>(this->_M_weak_this); }
+    2189              : 
+    2190              :       __shared_ptr<const _Tp, _Lp>
+    2191              :       shared_from_this() const
+    2192              :       { return __shared_ptr<const _Tp, _Lp>(this->_M_weak_this); }
+    2193              : 
+    2194              : #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
+    2195              :       __weak_ptr<_Tp, _Lp>
+    2196              :       weak_from_this() noexcept
+    2197              :       { return this->_M_weak_this; }
+    2198              : 
+    2199              :       __weak_ptr<const _Tp, _Lp>
+    2200              :       weak_from_this() const noexcept
+    2201              :       { return this->_M_weak_this; }
+    2202              : #endif
+    2203              : 
+    2204              :     private:
+    2205              :       template<typename _Tp1>
+    2206              :         void
+    2207              :         _M_weak_assign(_Tp1* __p, const __shared_count<_Lp>& __n) const noexcept
+    2208              :         { _M_weak_this._M_assign(__p, __n); }
+    2209              : 
+    2210              :       friend const __enable_shared_from_this*
+    2211              :       __enable_shared_from_this_base(const __shared_count<_Lp>&,
+    2212              :                                      const __enable_shared_from_this* __p)
+    2213              :       { return __p; }
+    2214              : 
+    2215              :       template<typename, _Lock_policy>
+    2216              :         friend class __shared_ptr;
+    2217              : 
+    2218              :       mutable __weak_ptr<_Tp, _Lp>  _M_weak_this;
+    2219              :     };
+    2220              : 
+    2221              :   template<typename _Tp, _Lock_policy _Lp = __default_lock_policy,
+    2222              :            typename _Alloc, typename... _Args>
+    2223              :     inline __shared_ptr<_Tp, _Lp>
+    2224              :     __allocate_shared(const _Alloc& __a, _Args&&... __args)
+    2225              :     {
+    2226              :       static_assert(!is_array<_Tp>::value, "make_shared<T[]> not supported");
+    2227              : 
+    2228              :       return __shared_ptr<_Tp, _Lp>(_Sp_alloc_shared_tag<_Alloc>{__a},
+    2229              :                                     std::forward<_Args>(__args)...);
+    2230              :     }
+    2231              : 
+    2232              :   template<typename _Tp, _Lock_policy _Lp = __default_lock_policy,
+    2233              :            typename... _Args>
+    2234              :     inline __shared_ptr<_Tp, _Lp>
+    2235              :     __make_shared(_Args&&... __args)
+    2236              :     {
+    2237              :       typedef typename std::remove_const<_Tp>::type _Tp_nc;
+    2238              :       return std::__allocate_shared<_Tp, _Lp>(std::allocator<_Tp_nc>(),
+    2239              :                                               std::forward<_Args>(__args)...);
+    2240              :     }
+    2241              : 
+    2242              :   /// std::hash specialization for __shared_ptr.
+    2243              :   template<typename _Tp, _Lock_policy _Lp>
+    2244              :     struct hash<__shared_ptr<_Tp, _Lp>>
+    2245              :     : public __hash_base<size_t, __shared_ptr<_Tp, _Lp>>
+    2246              :     {
+    2247              :       size_t
+    2248              :       operator()(const __shared_ptr<_Tp, _Lp>& __s) const noexcept
+    2249              :       {
+    2250              :         return hash<typename __shared_ptr<_Tp, _Lp>::element_type*>()(
+    2251              :             __s.get());
+    2252              :       }
+    2253              :     };
+    2254              : 
+    2255              : _GLIBCXX_END_NAMESPACE_VERSION
+    2256              : } // namespace
+    2257              : 
+    2258              : #endif // _SHARED_PTR_BASE_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/std_abs.h.func-c.html b/html/usr/include/c++/13/bits/std_abs.h.func-c.html new file mode 100644 index 0000000..227a370 --- /dev/null +++ b/html/usr/include/c++/13/bits/std_abs.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/std_abs.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - std_abs.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt3absd34
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/std_abs.h.func.html b/html/usr/include/c++/13/bits/std_abs.h.func.html new file mode 100644 index 0000000..3bacbac --- /dev/null +++ b/html/usr/include/c++/13/bits/std_abs.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/std_abs.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - std_abs.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt3absd34
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/std_abs.h.gcov.html b/html/usr/include/c++/13/bits/std_abs.h.gcov.html new file mode 100644 index 0000000..27f0d8d --- /dev/null +++ b/html/usr/include/c++/13/bits/std_abs.h.gcov.html @@ -0,0 +1,230 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/std_abs.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - std_abs.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %22
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // -*- C++ -*- C library enhancements header.
+       2              : 
+       3              : // Copyright (C) 2016-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file include/bits/std_abs.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{cmath, cstdlib}
+      28              :  */
+      29              : 
+      30              : #ifndef _GLIBCXX_BITS_STD_ABS_H
+      31              : #define _GLIBCXX_BITS_STD_ABS_H
+      32              : 
+      33              : #pragma GCC system_header
+      34              : 
+      35              : #include <bits/c++config.h>
+      36              : 
+      37              : #define _GLIBCXX_INCLUDE_NEXT_C_HEADERS
+      38              : #include_next <stdlib.h>
+      39              : #ifdef __CORRECT_ISO_CPP_MATH_H_PROTO
+      40              : # include_next <math.h>
+      41              : #endif
+      42              : #undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS
+      43              : 
+      44              : #undef abs
+      45              : 
+      46              : extern "C++"
+      47              : {
+      48              : namespace std _GLIBCXX_VISIBILITY(default)
+      49              : {
+      50              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      51              : 
+      52              :   using ::abs;
+      53              : 
+      54              : #ifndef __CORRECT_ISO_CPP_STDLIB_H_PROTO
+      55              :   inline long
+      56              :   abs(long __i) { return __builtin_labs(__i); }
+      57              : #endif
+      58              : 
+      59              : #ifdef _GLIBCXX_USE_LONG_LONG
+      60              :   inline long long
+      61              :   abs(long long __x) { return __builtin_llabs (__x); }
+      62              : #endif
+      63              : 
+      64              : // _GLIBCXX_RESOLVE_LIB_DEFECTS
+      65              : // 2192. Validity and return type of std::abs(0u) is unclear
+      66              : // 2294. <cstdlib> should declare abs(double)
+      67              : // 2735. std::abs(short), std::abs(signed char) and others should return int
+      68              : 
+      69              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+      70              :   inline _GLIBCXX_CONSTEXPR double
+      71           34 :   abs(double __x)
+      72           34 :   { return __builtin_fabs(__x); }
+      73              : 
+      74              :   inline _GLIBCXX_CONSTEXPR float
+      75              :   abs(float __x)
+      76              :   { return __builtin_fabsf(__x); }
+      77              : 
+      78              :   inline _GLIBCXX_CONSTEXPR long double
+      79              :   abs(long double __x)
+      80              :   { return __builtin_fabsl(__x); }
+      81              : #endif
+      82              : 
+      83              : #if defined(__GLIBCXX_TYPE_INT_N_0)
+      84              :   __extension__ inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_0
+      85              :   abs(__GLIBCXX_TYPE_INT_N_0 __x) { return __x >= 0 ? __x : -__x; }
+      86              : #endif
+      87              : #if defined(__GLIBCXX_TYPE_INT_N_1)
+      88              :   __extension__ inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_1
+      89              :   abs(__GLIBCXX_TYPE_INT_N_1 __x) { return __x >= 0 ? __x : -__x; }
+      90              : #endif
+      91              : #if defined(__GLIBCXX_TYPE_INT_N_2)
+      92              :   __extension__ inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_2
+      93              :   abs(__GLIBCXX_TYPE_INT_N_2 __x) { return __x >= 0 ? __x : -__x; }
+      94              : #endif
+      95              : #if defined(__GLIBCXX_TYPE_INT_N_3)
+      96              :   __extension__ inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_3
+      97              :   abs(__GLIBCXX_TYPE_INT_N_3 __x) { return __x >= 0 ? __x : -__x; }
+      98              : #endif
+      99              : 
+     100              : #if defined(__STDCPP_FLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
+     101              :   constexpr _Float16
+     102              :   abs(_Float16 __x)
+     103              :   { return _Float16(__builtin_fabsf(__x)); }
+     104              : #endif
+     105              : 
+     106              : #if defined(__STDCPP_FLOAT32_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
+     107              :   constexpr _Float32
+     108              :   abs(_Float32 __x)
+     109              :   { return __builtin_fabsf(__x); }
+     110              : #endif
+     111              : 
+     112              : #if defined(__STDCPP_FLOAT64_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64)
+     113              :   constexpr _Float64
+     114              :   abs(_Float64 __x)
+     115              :   { return __builtin_fabs(__x); }
+     116              : #endif
+     117              : 
+     118              : #if defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128)
+     119              :   constexpr _Float128
+     120              :   abs(_Float128 __x)
+     121              :   { return __builtin_fabsl(__x); }
+     122              : #elif defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_HAVE_FLOAT128_MATH)
+     123              :   constexpr _Float128
+     124              :   abs(_Float128 __x)
+     125              :   { return __builtin_fabsf128(__x); }
+     126              : #endif
+     127              : 
+     128              : #if defined(__STDCPP_BFLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
+     129              :   constexpr __gnu_cxx::__bfloat16_t
+     130              :   abs(__gnu_cxx::__bfloat16_t __x)
+     131              :   { return __gnu_cxx::__bfloat16_t(__builtin_fabsf(__x)); }
+     132              : #endif
+     133              : 
+     134              : #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128)
+     135              :   __extension__ inline _GLIBCXX_CONSTEXPR
+     136              :   __float128
+     137              :   abs(__float128 __x)
+     138              :   {
+     139              : #if defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128)
+     140              :     return __builtin_fabsl(__x);
+     141              : #elif defined(_GLIBCXX_HAVE_FLOAT128_MATH)
+     142              :     return __builtin_fabsf128(__x);
+     143              : #else
+     144              :     // Assume that __builtin_signbit works for __float128.
+     145              :     return __builtin_signbit(__x) ? -__x : __x;
+     146              : #endif
+     147              :   }
+     148              : #endif
+     149              : 
+     150              : _GLIBCXX_END_NAMESPACE_VERSION
+     151              : } // namespace
+     152              : } // extern "C++"
+     153              : 
+     154              : #endif // _GLIBCXX_BITS_STD_ABS_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/std_function.h.func-c.html b/html/usr/include/c++/13/bits/std_function.h.func-c.html new file mode 100644 index 0000000..8003da0 --- /dev/null +++ b/html/usr/include/c++/13/bits/std_function.h.func-c.html @@ -0,0 +1,1797 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/std_function.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - std_function.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %1020
Test Date:2024-04-30 13:17:26Functions:0.0 %2330
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt14_Function_base8_M_emptyEv0
_ZNKSt8functionIFbcEEclEc0
_ZNKSt8functionIFbcEEcvbEv0
_ZNKSt9_Any_data9_M_accessEv0
_ZNKSt9_Any_data9_M_accessINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessIPNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessIPNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessIPNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessIPNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEERKT_v0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb0EE0
_ZNSt14_Function_baseC2Ev0
_ZNSt14_Function_baseD2Ev0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt8functionIFbcEE4swapERS1_0
_ZNSt8functionIFbcEEC2EOS1_0
_ZNSt8functionIFbcEEC2ERKS1_0
_ZNSt8functionIFbcEEC2Ev0
_ZNSt8functionIFbcEEC2INSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEvEEOT_0
_ZNSt8functionIFbcEEaSEOS1_0
_ZNSt9_Any_data9_M_accessEv0
_ZNSt9_Any_data9_M_accessIPKSt9type_infoEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPKSt9type_infoEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEERT_v0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/std_function.h.func.html b/html/usr/include/c++/13/bits/std_function.h.func.html new file mode 100644 index 0000000..28e466a --- /dev/null +++ b/html/usr/include/c++/13/bits/std_function.h.func.html @@ -0,0 +1,1797 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/std_function.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - std_function.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %1020
Test Date:2024-04-30 13:17:26Functions:0.0 %2330
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt14_Function_base8_M_emptyEv0
_ZNKSt8functionIFbcEEclEc0
_ZNKSt8functionIFbcEEcvbEv0
_ZNKSt9_Any_data9_M_accessEv0
_ZNKSt9_Any_data9_M_accessINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessIPNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessIPNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessIPNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEERKT_v0
_ZNKSt9_Any_data9_M_accessIPNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEERKT_v0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE14_M_get_pointerERKSt9_Any_data0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE15_M_init_functorIRKS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE15_M_init_functorIS6_EEvRSt9_Any_dataOT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE21_M_not_empty_functionIS6_EEbRKT_0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb1EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE10_M_destroyERSt9_Any_dataSt17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE9_M_createIRKS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb0EE0
_ZNSt14_Function_base13_Base_managerINSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE9_M_createIS6_EEvRSt9_Any_dataOT_St17integral_constantIbLb0EE0
_ZNSt14_Function_baseC2Ev0
_ZNSt14_Function_baseD2Ev0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE10_M_managerERSt9_Any_dataRKS8_St18_Manager_operation0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt17_Function_handlerIFbcENSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEE9_M_invokeERKSt9_Any_dataOc0
_ZNSt8functionIFbcEE4swapERS1_0
_ZNSt8functionIFbcEEC2EOS1_0
_ZNSt8functionIFbcEEC2ERKS1_0
_ZNSt8functionIFbcEEC2Ev0
_ZNSt8functionIFbcEEC2INSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEvEEOT_0
_ZNSt8functionIFbcEEC2INSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEvEEOT_0
_ZNSt8functionIFbcEEaSEOS1_0
_ZNSt9_Any_data9_M_accessEv0
_ZNSt9_Any_data9_M_accessIPKSt9type_infoEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessINSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPKSt9type_infoEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail12_CharMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb0ELb1EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb0EEEEERT_v0
_ZNSt9_Any_data9_M_accessIPNSt8__detail15_BracketMatcherINSt7__cxx1112regex_traitsIcEELb1ELb1EEEEERT_v0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/std_function.h.gcov.html b/html/usr/include/c++/13/bits/std_function.h.gcov.html new file mode 100644 index 0000000..235a8c4 --- /dev/null +++ b/html/usr/include/c++/13/bits/std_function.h.gcov.html @@ -0,0 +1,873 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/std_function.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - std_function.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %1020
Test Date:2024-04-30 13:17:26Functions:0.0 %2330
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Implementation of std::function -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2004-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file include/bits/std_function.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{functional}
+      28              :  */
+      29              : 
+      30              : #ifndef _GLIBCXX_STD_FUNCTION_H
+      31              : #define _GLIBCXX_STD_FUNCTION_H 1
+      32              : 
+      33              : #pragma GCC system_header
+      34              : 
+      35              : #if __cplusplus < 201103L
+      36              : # include <bits/c++0x_warning.h>
+      37              : #else
+      38              : 
+      39              : #include <new>                // placement new
+      40              : #include <typeinfo>           // typeid
+      41              : #include <bits/invoke.h>      // __invoke_r
+      42              : #include <bits/refwrap.h>     // ref wrapper, _Maybe_unary_or_binary_function
+      43              : #include <bits/functexcept.h> // __throw_bad_function_call
+      44              : 
+      45              : namespace std _GLIBCXX_VISIBILITY(default)
+      46              : {
+      47              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      48              : 
+      49              :   /**
+      50              :    *  @brief Exception class thrown when class template function's
+      51              :    *  operator() is called with an empty target.
+      52              :    *  @ingroup exceptions
+      53              :    */
+      54              :   class bad_function_call : public std::exception
+      55              :   {
+      56              :   public:
+      57              :     virtual ~bad_function_call() noexcept;
+      58              : 
+      59              :     const char* what() const noexcept;
+      60              :   };
+      61              : 
+      62              :   /**
+      63              :    *  Trait identifying "location-invariant" types, meaning that the
+      64              :    *  address of the object (or any of its members) will not escape.
+      65              :    *  Trivially copyable types are location-invariant and users can
+      66              :    *  specialize this trait for other types.
+      67              :    */
+      68              :   template<typename _Tp>
+      69              :     struct __is_location_invariant
+      70              :     : is_trivially_copyable<_Tp>::type
+      71              :     { };
+      72              : 
+      73              :   class _Undefined_class;
+      74              : 
+      75              :   union _Nocopy_types
+      76              :   {
+      77              :     void*       _M_object;
+      78              :     const void* _M_const_object;
+      79              :     void (*_M_function_pointer)();
+      80              :     void (_Undefined_class::*_M_member_pointer)();
+      81              :   };
+      82              : 
+      83              :   union [[gnu::may_alias]] _Any_data
+      84              :   {
+      85            0 :     void*       _M_access()       noexcept { return &_M_pod_data[0]; }
+      86            0 :     const void* _M_access() const noexcept { return &_M_pod_data[0]; }
+      87              : 
+      88              :     template<typename _Tp>
+      89              :       _Tp&
+      90            0 :       _M_access() noexcept
+      91            0 :       { return *static_cast<_Tp*>(_M_access()); }
+      92              : 
+      93              :     template<typename _Tp>
+      94              :       const _Tp&
+      95            0 :       _M_access() const noexcept
+      96            0 :       { return *static_cast<const _Tp*>(_M_access()); }
+      97              : 
+      98              :     _Nocopy_types _M_unused;
+      99              :     char _M_pod_data[sizeof(_Nocopy_types)];
+     100              :   };
+     101              : 
+     102              :   enum _Manager_operation
+     103              :   {
+     104              :     __get_type_info,
+     105              :     __get_functor_ptr,
+     106              :     __clone_functor,
+     107              :     __destroy_functor
+     108              :   };
+     109              : 
+     110              :   template<typename _Signature>
+     111              :     class function;
+     112              : 
+     113              :   /// Base class of all polymorphic function object wrappers.
+     114              :   class _Function_base
+     115              :   {
+     116              :   public:
+     117              :     static const size_t _M_max_size = sizeof(_Nocopy_types);
+     118              :     static const size_t _M_max_align = __alignof__(_Nocopy_types);
+     119              : 
+     120              :     template<typename _Functor>
+     121              :       class _Base_manager
+     122              :       {
+     123              :       protected:
+     124              :         static const bool __stored_locally =
+     125              :         (__is_location_invariant<_Functor>::value
+     126              :          && sizeof(_Functor) <= _M_max_size
+     127              :          && __alignof__(_Functor) <= _M_max_align
+     128              :          && (_M_max_align % __alignof__(_Functor) == 0));
+     129              : 
+     130              :         using _Local_storage = integral_constant<bool, __stored_locally>;
+     131              : 
+     132              :         // Retrieve a pointer to the function object
+     133              :         static _Functor*
+     134            0 :         _M_get_pointer(const _Any_data& __source) noexcept
+     135              :         {
+     136              :           if _GLIBCXX17_CONSTEXPR (__stored_locally)
+     137              :             {
+     138            0 :               const _Functor& __f = __source._M_access<_Functor>();
+     139            0 :               return const_cast<_Functor*>(std::__addressof(__f));
+     140              :             }
+     141              :           else // have stored a pointer
+     142            0 :             return __source._M_access<_Functor*>();
+     143              :         }
+     144              : 
+     145              :       private:
+     146              :         // Construct a location-invariant function object that fits within
+     147              :         // an _Any_data structure.
+     148              :         template<typename _Fn>
+     149              :           static void
+     150            0 :           _M_create(_Any_data& __dest, _Fn&& __f, true_type)
+     151              :           {
+     152            0 :             ::new (__dest._M_access()) _Functor(std::forward<_Fn>(__f));
+     153            0 :           }
+     154              : 
+     155              :         // Construct a function object on the heap and store a pointer.
+     156              :         template<typename _Fn>
+     157              :           static void
+     158            0 :           _M_create(_Any_data& __dest, _Fn&& __f, false_type)
+     159              :           {
+     160            0 :             __dest._M_access<_Functor*>()
+     161            0 :               = new _Functor(std::forward<_Fn>(__f));
+     162            0 :           }
+     163              : 
+     164              :         // Destroy an object stored in the internal buffer.
+     165              :         static void
+     166            0 :         _M_destroy(_Any_data& __victim, true_type)
+     167              :         {
+     168            0 :           __victim._M_access<_Functor>().~_Functor();
+     169            0 :         }
+     170              : 
+     171              :         // Destroy an object located on the heap.
+     172              :         static void
+     173            0 :         _M_destroy(_Any_data& __victim, false_type)
+     174              :         {
+     175            0 :           delete __victim._M_access<_Functor*>();
+     176            0 :         }
+     177              : 
+     178              :       public:
+     179              :         static bool
+     180            0 :         _M_manager(_Any_data& __dest, const _Any_data& __source,
+     181              :                    _Manager_operation __op)
+     182              :         {
+     183            0 :           switch (__op)
+     184              :             {
+     185            0 :             case __get_type_info:
+     186              : #if __cpp_rtti
+     187            0 :               __dest._M_access<const type_info*>() = &typeid(_Functor);
+     188              : #else
+     189              :               __dest._M_access<const type_info*>() = nullptr;
+     190              : #endif
+     191            0 :               break;
+     192              : 
+     193            0 :             case __get_functor_ptr:
+     194            0 :               __dest._M_access<_Functor*>() = _M_get_pointer(__source);
+     195            0 :               break;
+     196              : 
+     197            0 :             case __clone_functor:
+     198            0 :               _M_init_functor(__dest,
+     199            0 :                   *const_cast<const _Functor*>(_M_get_pointer(__source)));
+     200            0 :               break;
+     201              : 
+     202            0 :             case __destroy_functor:
+     203            0 :               _M_destroy(__dest, _Local_storage());
+     204            0 :               break;
+     205              :             }
+     206            0 :           return false;
+     207              :         }
+     208              : 
+     209              :         template<typename _Fn>
+     210              :           static void
+     211            0 :           _M_init_functor(_Any_data& __functor, _Fn&& __f)
+     212              :           noexcept(__and_<_Local_storage,
+     213              :                           is_nothrow_constructible<_Functor, _Fn>>::value)
+     214              :           {
+     215            0 :             _M_create(__functor, std::forward<_Fn>(__f), _Local_storage());
+     216            0 :           }
+     217              : 
+     218              :         template<typename _Signature>
+     219              :           static bool
+     220              :           _M_not_empty_function(const function<_Signature>& __f) noexcept
+     221              :           { return static_cast<bool>(__f); }
+     222              : 
+     223              :         template<typename _Tp>
+     224              :           static bool
+     225              :           _M_not_empty_function(_Tp* __fp) noexcept
+     226              :           { return __fp != nullptr; }
+     227              : 
+     228              :         template<typename _Class, typename _Tp>
+     229              :           static bool
+     230              :           _M_not_empty_function(_Tp _Class::* __mp) noexcept
+     231              :           { return __mp != nullptr; }
+     232              : 
+     233              :         template<typename _Tp>
+     234              :           static bool
+     235            0 :           _M_not_empty_function(const _Tp&) noexcept
+     236            0 :           { return true; }
+     237              :       };
+     238              : 
+     239            0 :     _Function_base() = default;
+     240              : 
+     241            0 :     ~_Function_base()
+     242              :     {
+     243            0 :       if (_M_manager)
+     244            0 :         _M_manager(_M_functor, _M_functor, __destroy_functor);
+     245            0 :     }
+     246              : 
+     247            0 :     bool _M_empty() const { return !_M_manager; }
+     248              : 
+     249              :     using _Manager_type
+     250              :       = bool (*)(_Any_data&, const _Any_data&, _Manager_operation);
+     251              : 
+     252              :     _Any_data     _M_functor{};
+     253              :     _Manager_type _M_manager{};
+     254              :   };
+     255              : 
+     256              :   template<typename _Signature, typename _Functor>
+     257              :     class _Function_handler;
+     258              : 
+     259              :   template<typename _Res, typename _Functor, typename... _ArgTypes>
+     260              :     class _Function_handler<_Res(_ArgTypes...), _Functor>
+     261              :     : public _Function_base::_Base_manager<_Functor>
+     262              :     {
+     263              :       using _Base = _Function_base::_Base_manager<_Functor>;
+     264              : 
+     265              :     public:
+     266              :       static bool
+     267            0 :       _M_manager(_Any_data& __dest, const _Any_data& __source,
+     268              :                  _Manager_operation __op)
+     269              :       {
+     270            0 :         switch (__op)
+     271              :           {
+     272              : #if __cpp_rtti
+     273            0 :           case __get_type_info:
+     274            0 :             __dest._M_access<const type_info*>() = &typeid(_Functor);
+     275            0 :             break;
+     276              : #endif
+     277            0 :           case __get_functor_ptr:
+     278            0 :             __dest._M_access<_Functor*>() = _Base::_M_get_pointer(__source);
+     279            0 :             break;
+     280              : 
+     281            0 :           default:
+     282            0 :             _Base::_M_manager(__dest, __source, __op);
+     283              :           }
+     284            0 :         return false;
+     285              :       }
+     286              : 
+     287              :       static _Res
+     288            0 :       _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args)
+     289              :       {
+     290            0 :         return std::__invoke_r<_Res>(*_Base::_M_get_pointer(__functor),
+     291            0 :                                      std::forward<_ArgTypes>(__args)...);
+     292              :       }
+     293              : 
+     294              :       template<typename _Fn>
+     295              :         static constexpr bool
+     296              :         _S_nothrow_init() noexcept
+     297              :         {
+     298              :           return __and_<typename _Base::_Local_storage,
+     299              :                         is_nothrow_constructible<_Functor, _Fn>>::value;
+     300              :         }
+     301              :     };
+     302              : 
+     303              :   // Specialization for invalid types
+     304              :   template<>
+     305              :     class _Function_handler<void, void>
+     306              :     {
+     307              :     public:
+     308              :       static bool
+     309              :       _M_manager(_Any_data&, const _Any_data&, _Manager_operation)
+     310              :       { return false; }
+     311              :     };
+     312              : 
+     313              :   // Avoids instantiating ill-formed specializations of _Function_handler
+     314              :   // in std::function<_Signature>::target<_Functor>().
+     315              :   // e.g. _Function_handler<Sig, void()> and _Function_handler<Sig, void>
+     316              :   // would be ill-formed.
+     317              :   template<typename _Signature, typename _Functor,
+     318              :            bool __valid = is_object<_Functor>::value>
+     319              :     struct _Target_handler
+     320              :     : _Function_handler<_Signature, typename remove_cv<_Functor>::type>
+     321              :     { };
+     322              : 
+     323              :   template<typename _Signature, typename _Functor>
+     324              :     struct _Target_handler<_Signature, _Functor, false>
+     325              :     : _Function_handler<void, void>
+     326              :     { };
+     327              : 
+     328              :   /**
+     329              :    *  @brief Polymorphic function wrapper.
+     330              :    *  @ingroup functors
+     331              :    *  @since C++11
+     332              :    */
+     333              :   template<typename _Res, typename... _ArgTypes>
+     334              :     class function<_Res(_ArgTypes...)>
+     335              :     : public _Maybe_unary_or_binary_function<_Res, _ArgTypes...>,
+     336              :       private _Function_base
+     337              :     {
+     338              :       // Equivalent to std::decay_t except that it produces an invalid type
+     339              :       // if the decayed type is the current specialization of std::function.
+     340              :       template<typename _Func,
+     341              :                bool _Self = is_same<__remove_cvref_t<_Func>, function>::value>
+     342              :         using _Decay_t
+     343              :           = typename __enable_if_t<!_Self, decay<_Func>>::type;
+     344              : 
+     345              :       template<typename _Func,
+     346              :                typename _DFunc = _Decay_t<_Func>,
+     347              :                typename _Res2 = __invoke_result<_DFunc&, _ArgTypes...>>
+     348              :         struct _Callable
+     349              :         : __is_invocable_impl<_Res2, _Res>::type
+     350              :         { };
+     351              : 
+     352              :       template<typename _Cond, typename _Tp = void>
+     353              :         using _Requires = __enable_if_t<_Cond::value, _Tp>;
+     354              : 
+     355              :       template<typename _Functor>
+     356              :         using _Handler
+     357              :           = _Function_handler<_Res(_ArgTypes...), __decay_t<_Functor>>;
+     358              : 
+     359              :     public:
+     360              :       typedef _Res result_type;
+     361              : 
+     362              :       // [3.7.2.1] construct/copy/destroy
+     363              : 
+     364              :       /**
+     365              :        *  @brief Default construct creates an empty function call wrapper.
+     366              :        *  @post `!(bool)*this`
+     367              :        */
+     368            0 :       function() noexcept
+     369            0 :       : _Function_base() { }
+     370              : 
+     371              :       /**
+     372              :        *  @brief Creates an empty function call wrapper.
+     373              :        *  @post @c !(bool)*this
+     374              :        */
+     375              :       function(nullptr_t) noexcept
+     376              :       : _Function_base() { }
+     377              : 
+     378              :       /**
+     379              :        *  @brief %Function copy constructor.
+     380              :        *  @param __x A %function object with identical call signature.
+     381              :        *  @post `bool(*this) == bool(__x)`
+     382              :        *
+     383              :        *  The newly-created %function contains a copy of the target of
+     384              :        *  `__x` (if it has one).
+     385              :        */
+     386            0 :       function(const function& __x)
+     387            0 :       : _Function_base()
+     388              :       {
+     389            0 :         if (static_cast<bool>(__x))
+     390              :           {
+     391            0 :             __x._M_manager(_M_functor, __x._M_functor, __clone_functor);
+     392            0 :             _M_invoker = __x._M_invoker;
+     393            0 :             _M_manager = __x._M_manager;
+     394              :           }
+     395            0 :       }
+     396              : 
+     397              :       /**
+     398              :        *  @brief %Function move constructor.
+     399              :        *  @param __x A %function object rvalue with identical call signature.
+     400              :        *
+     401              :        *  The newly-created %function contains the target of `__x`
+     402              :        *  (if it has one).
+     403              :        */
+     404            0 :       function(function&& __x) noexcept
+     405            0 :       : _Function_base(), _M_invoker(__x._M_invoker)
+     406              :       {
+     407            0 :         if (static_cast<bool>(__x))
+     408              :           {
+     409            0 :             _M_functor = __x._M_functor;
+     410            0 :             _M_manager = __x._M_manager;
+     411            0 :             __x._M_manager = nullptr;
+     412            0 :             __x._M_invoker = nullptr;
+     413              :           }
+     414            0 :       }
+     415              : 
+     416              :       /**
+     417              :        *  @brief Builds a %function that targets a copy of the incoming
+     418              :        *  function object.
+     419              :        *  @param __f A %function object that is callable with parameters of
+     420              :        *  type `ArgTypes...` and returns a value convertible to `Res`.
+     421              :        *
+     422              :        *  The newly-created %function object will target a copy of
+     423              :        *  `__f`. If `__f` is `reference_wrapper<F>`, then this function
+     424              :        *  object will contain a reference to the function object `__f.get()`.
+     425              :        *  If `__f` is a null function pointer, null pointer-to-member, or
+     426              :        *  empty `std::function`, the newly-created object will be empty.
+     427              :        *
+     428              :        *  If `__f` is a non-null function pointer or an object of type
+     429              :        *  `reference_wrapper<F>`, this function will not throw.
+     430              :        */
+     431              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     432              :       // 2774. std::function construction vs assignment
+     433              :       template<typename _Functor,
+     434              :                typename _Constraints = _Requires<_Callable<_Functor>>>
+     435            0 :         function(_Functor&& __f)
+     436              :         noexcept(_Handler<_Functor>::template _S_nothrow_init<_Functor>())
+     437            0 :         : _Function_base()
+     438              :         {
+     439              :           static_assert(is_copy_constructible<__decay_t<_Functor>>::value,
+     440              :               "std::function target must be copy-constructible");
+     441              :           static_assert(is_constructible<__decay_t<_Functor>, _Functor>::value,
+     442              :               "std::function target must be constructible from the "
+     443              :               "constructor argument");
+     444              : 
+     445              :           using _My_handler = _Handler<_Functor>;
+     446              : 
+     447            0 :           if (_My_handler::_M_not_empty_function(__f))
+     448              :             {
+     449            0 :               _My_handler::_M_init_functor(_M_functor,
+     450              :                                            std::forward<_Functor>(__f));
+     451            0 :               _M_invoker = &_My_handler::_M_invoke;
+     452            0 :               _M_manager = &_My_handler::_M_manager;
+     453              :             }
+     454            0 :         }
+     455              : 
+     456              :       /**
+     457              :        *  @brief Function assignment operator.
+     458              :        *  @param __x A %function with identical call signature.
+     459              :        *  @post `(bool)*this == (bool)x`
+     460              :        *  @returns `*this`
+     461              :        *
+     462              :        *  The target of `__x` is copied to `*this`. If `__x` has no
+     463              :        *  target, then `*this` will be empty.
+     464              :        *
+     465              :        *  If `__x` targets a function pointer or a reference to a function
+     466              :        *  object, then this operation will not throw an exception.
+     467              :        */
+     468              :       function&
+     469              :       operator=(const function& __x)
+     470              :       {
+     471              :         function(__x).swap(*this);
+     472              :         return *this;
+     473              :       }
+     474              : 
+     475              :       /**
+     476              :        *  @brief Function move-assignment operator.
+     477              :        *  @param __x A %function rvalue with identical call signature.
+     478              :        *  @returns `*this`
+     479              :        *
+     480              :        *  The target of `__x` is moved to `*this`. If `__x` has no
+     481              :        *  target, then `*this` will be empty.
+     482              :        *
+     483              :        *  If `__x` targets a function pointer or a reference to a function
+     484              :        *  object, then this operation will not throw an exception.
+     485              :        */
+     486              :       function&
+     487            0 :       operator=(function&& __x) noexcept
+     488              :       {
+     489            0 :         function(std::move(__x)).swap(*this);
+     490            0 :         return *this;
+     491              :       }
+     492              : 
+     493              :       /**
+     494              :        *  @brief Function assignment to empty.
+     495              :        *  @post `!(bool)*this`
+     496              :        *  @returns `*this`
+     497              :        *
+     498              :        *  The target of `*this` is deallocated, leaving it empty.
+     499              :        */
+     500              :       function&
+     501              :       operator=(nullptr_t) noexcept
+     502              :       {
+     503              :         if (_M_manager)
+     504              :           {
+     505              :             _M_manager(_M_functor, _M_functor, __destroy_functor);
+     506              :             _M_manager = nullptr;
+     507              :             _M_invoker = nullptr;
+     508              :           }
+     509              :         return *this;
+     510              :       }
+     511              : 
+     512              :       /**
+     513              :        *  @brief Function assignment to a new target.
+     514              :        *  @param __f  A function object that is callable with parameters of
+     515              :        *              type  `_ArgTypes...` and returns a value convertible
+     516              :        *              to `_Res`.
+     517              :        *  @return `*this`
+     518              :        *  @since C++11
+     519              :        *
+     520              :        *  This function object wrapper will target a copy of `__f`. If `__f`
+     521              :        *  is `reference_wrapper<F>`, then this function object will contain
+     522              :        *  a reference to the function object `__f.get()`. If `__f` is a null
+     523              :        *  function pointer or null pointer-to-member, this object will be
+     524              :        *  empty.
+     525              :        *
+     526              :        *  If `__f` is a non-null function pointer or an object of type
+     527              :        *  `reference_wrapper<F>`, this function will not throw.
+     528              :        */
+     529              :       template<typename _Functor>
+     530              :         _Requires<_Callable<_Functor>, function&>
+     531              :         operator=(_Functor&& __f)
+     532              :         noexcept(_Handler<_Functor>::template _S_nothrow_init<_Functor>())
+     533              :         {
+     534              :           function(std::forward<_Functor>(__f)).swap(*this);
+     535              :           return *this;
+     536              :         }
+     537              : 
+     538              :       /// @overload
+     539              :       template<typename _Functor>
+     540              :         function&
+     541              :         operator=(reference_wrapper<_Functor> __f) noexcept
+     542              :         {
+     543              :           function(__f).swap(*this);
+     544              :           return *this;
+     545              :         }
+     546              : 
+     547              :       // [3.7.2.2] function modifiers
+     548              : 
+     549              :       /**
+     550              :        *  @brief Swap the targets of two %function objects.
+     551              :        *  @param __x A %function with identical call signature.
+     552              :        *
+     553              :        *  Swap the targets of `this` function object and `__f`.
+     554              :        *  This function will not throw exceptions.
+     555              :        */
+     556            0 :       void swap(function& __x) noexcept
+     557              :       {
+     558            0 :         std::swap(_M_functor, __x._M_functor);
+     559            0 :         std::swap(_M_manager, __x._M_manager);
+     560            0 :         std::swap(_M_invoker, __x._M_invoker);
+     561            0 :       }
+     562              : 
+     563              :       // [3.7.2.3] function capacity
+     564              : 
+     565              :       /**
+     566              :        *  @brief Determine if the %function wrapper has a target.
+     567              :        *
+     568              :        *  @return `true` when this function object contains a target,
+     569              :        *  or `false` when it is empty.
+     570              :        *
+     571              :        *  This function will not throw exceptions.
+     572              :        */
+     573            0 :       explicit operator bool() const noexcept
+     574            0 :       { return !_M_empty(); }
+     575              : 
+     576              :       // [3.7.2.4] function invocation
+     577              : 
+     578              :       /**
+     579              :        *  @brief Invokes the function targeted by `*this`.
+     580              :        *  @returns the result of the target.
+     581              :        *  @throws `bad_function_call` when `!(bool)*this`
+     582              :        *
+     583              :        *  The function call operator invokes the target function object
+     584              :        *  stored by `this`.
+     585              :        */
+     586              :       _Res
+     587            0 :       operator()(_ArgTypes... __args) const
+     588              :       {
+     589            0 :         if (_M_empty())
+     590            0 :           __throw_bad_function_call();
+     591            0 :         return _M_invoker(_M_functor, std::forward<_ArgTypes>(__args)...);
+     592              :       }
+     593              : 
+     594              : #if __cpp_rtti
+     595              :       // [3.7.2.5] function target access
+     596              :       /**
+     597              :        *  @brief Determine the type of the target of this function object
+     598              :        *  wrapper.
+     599              :        *
+     600              :        *  @returns the type identifier of the target function object, or
+     601              :        *  `typeid(void)` if `!(bool)*this`.
+     602              :        *
+     603              :        *  This function will not throw exceptions.
+     604              :        */
+     605              :       const type_info&
+     606              :       target_type() const noexcept
+     607              :       {
+     608              :         if (_M_manager)
+     609              :           {
+     610              :             _Any_data __typeinfo_result;
+     611              :             _M_manager(__typeinfo_result, _M_functor, __get_type_info);
+     612              :             if (auto __ti =  __typeinfo_result._M_access<const type_info*>())
+     613              :               return *__ti;
+     614              :           }
+     615              :         return typeid(void);
+     616              :       }
+     617              : #endif
+     618              : 
+     619              :       /**
+     620              :        *  @brief Access the stored target function object.
+     621              :        *
+     622              :        *  @return Returns a pointer to the stored target function object,
+     623              :        *  if `typeid(_Functor).equals(target_type())`; otherwise, a null
+     624              :        *  pointer.
+     625              :        *
+     626              :        * This function does not throw exceptions.
+     627              :        *
+     628              :        * @{
+     629              :        */
+     630              :       template<typename _Functor>
+     631              :         _Functor*
+     632              :         target() noexcept
+     633              :         {
+     634              :           const function* __const_this = this;
+     635              :           const _Functor* __func = __const_this->template target<_Functor>();
+     636              :           // If is_function_v<_Functor> is true then const_cast<_Functor*>
+     637              :           // would be ill-formed, so use *const_cast<_Functor**> instead.
+     638              :           return *const_cast<_Functor**>(&__func);
+     639              :         }
+     640              : 
+     641              :       template<typename _Functor>
+     642              :         const _Functor*
+     643              :         target() const noexcept
+     644              :         {
+     645              :           if _GLIBCXX17_CONSTEXPR (is_object<_Functor>::value)
+     646              :             {
+     647              :               // For C++11 and C++14 if-constexpr is not used above, so
+     648              :               // _Target_handler avoids ill-formed _Function_handler types.
+     649              :               using _Handler = _Target_handler<_Res(_ArgTypes...), _Functor>;
+     650              : 
+     651              :               if (_M_manager == &_Handler::_M_manager
+     652              : #if __cpp_rtti
+     653              :                   || (_M_manager && typeid(_Functor) == target_type())
+     654              : #endif
+     655              :                  )
+     656              :                 {
+     657              :                   _Any_data __ptr;
+     658              :                   _M_manager(__ptr, _M_functor, __get_functor_ptr);
+     659              :                   return __ptr._M_access<const _Functor*>();
+     660              :                 }
+     661              :             }
+     662              :           return nullptr;
+     663              :         }
+     664              :       /// @}
+     665              : 
+     666              :     private:
+     667              :       using _Invoker_type = _Res (*)(const _Any_data&, _ArgTypes&&...);
+     668              :       _Invoker_type _M_invoker = nullptr;
+     669              :     };
+     670              : 
+     671              : #if __cpp_deduction_guides >= 201606
+     672              :   template<typename>
+     673              :     struct __function_guide_helper
+     674              :     { };
+     675              : 
+     676              :   template<typename _Res, typename _Tp, bool _Nx, typename... _Args>
+     677              :     struct __function_guide_helper<
+     678              :       _Res (_Tp::*) (_Args...) noexcept(_Nx)
+     679              :     >
+     680              :     { using type = _Res(_Args...); };
+     681              : 
+     682              :   template<typename _Res, typename _Tp, bool _Nx, typename... _Args>
+     683              :     struct __function_guide_helper<
+     684              :       _Res (_Tp::*) (_Args...) & noexcept(_Nx)
+     685              :     >
+     686              :     { using type = _Res(_Args...); };
+     687              : 
+     688              :   template<typename _Res, typename _Tp, bool _Nx, typename... _Args>
+     689              :     struct __function_guide_helper<
+     690              :       _Res (_Tp::*) (_Args...) const noexcept(_Nx)
+     691              :     >
+     692              :     { using type = _Res(_Args...); };
+     693              : 
+     694              :   template<typename _Res, typename _Tp, bool _Nx, typename... _Args>
+     695              :     struct __function_guide_helper<
+     696              :       _Res (_Tp::*) (_Args...) const & noexcept(_Nx)
+     697              :     >
+     698              :     { using type = _Res(_Args...); };
+     699              : 
+     700              : #if __cpp_static_call_operator >= 202207L && __cpp_concepts >= 202002L
+     701              :   template<typename _StaticCallOp>
+     702              :     struct __function_guide_static_helper
+     703              :     { };
+     704              : 
+     705              :   template<typename _Res, bool _Nx, typename... _Args>
+     706              :     struct __function_guide_static_helper<_Res (*) (_Args...) noexcept(_Nx)>
+     707              :     { using type = _Res(_Args...); };
+     708              : 
+     709              :   template<typename _Fn, typename _Op>
+     710              :     using __function_guide_t = typename __conditional_t<
+     711              :       requires (_Fn& __f) { (void) __f.operator(); },
+     712              :       __function_guide_static_helper<_Op>,
+     713              :       __function_guide_helper<_Op>>::type;
+     714              : #else
+     715              :   template<typename _Fn, typename _Op>
+     716              :     using __function_guide_t = typename __function_guide_helper<_Op>::type;
+     717              : #endif
+     718              : 
+     719              :   template<typename _Res, typename... _ArgTypes>
+     720              :     function(_Res(*)(_ArgTypes...)) -> function<_Res(_ArgTypes...)>;
+     721              : 
+     722              :   template<typename _Fn, typename _Signature
+     723              :              = __function_guide_t<_Fn, decltype(&_Fn::operator())>>
+     724              :     function(_Fn) -> function<_Signature>;
+     725              : #endif
+     726              : 
+     727              :   // [20.7.15.2.6] null pointer comparisons
+     728              : 
+     729              :   /**
+     730              :    *  @brief Test whether a polymorphic function object wrapper is empty.
+     731              :    *  @returns `true` if the wrapper has no target, `false` otherwise
+     732              :    *
+     733              :    *  This function will not throw exceptions.
+     734              :    */
+     735              :   template<typename _Res, typename... _Args>
+     736              :     inline bool
+     737              :     operator==(const function<_Res(_Args...)>& __f, nullptr_t) noexcept
+     738              :     { return !static_cast<bool>(__f); }
+     739              : 
+     740              : #if __cpp_impl_three_way_comparison < 201907L
+     741              :   /// @overload
+     742              :   template<typename _Res, typename... _Args>
+     743              :     inline bool
+     744              :     operator==(nullptr_t, const function<_Res(_Args...)>& __f) noexcept
+     745              :     { return !static_cast<bool>(__f); }
+     746              : 
+     747              :   /**
+     748              :    *  @brief Test whether a polymorphic function object wrapper is non-empty.
+     749              :    *  @returns `false` if the wrapper has no target, `true` otherwise
+     750              :    *
+     751              :    *  This function will not throw exceptions.
+     752              :    */
+     753              :   template<typename _Res, typename... _Args>
+     754              :     inline bool
+     755              :     operator!=(const function<_Res(_Args...)>& __f, nullptr_t) noexcept
+     756              :     { return static_cast<bool>(__f); }
+     757              : 
+     758              :   /// @overload
+     759              :   template<typename _Res, typename... _Args>
+     760              :     inline bool
+     761              :     operator!=(nullptr_t, const function<_Res(_Args...)>& __f) noexcept
+     762              :     { return static_cast<bool>(__f); }
+     763              : #endif
+     764              : 
+     765              :   // [20.7.15.2.7] specialized algorithms
+     766              : 
+     767              :   /**
+     768              :    *  @brief Swap the targets of two polymorphic function object wrappers.
+     769              :    *
+     770              :    *  This function will not throw exceptions.
+     771              :    */
+     772              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     773              :   // 2062. Effect contradictions w/o no-throw guarantee of std::function swaps
+     774              :   template<typename _Res, typename... _Args>
+     775              :     inline void
+     776              :     swap(function<_Res(_Args...)>& __x, function<_Res(_Args...)>& __y) noexcept
+     777              :     { __x.swap(__y); }
+     778              : 
+     779              : #if __cplusplus >= 201703L
+     780              :   namespace __detail::__variant
+     781              :   {
+     782              :     template<typename> struct _Never_valueless_alt; // see <variant>
+     783              : 
+     784              :     // Provide the strong exception-safety guarantee when emplacing a
+     785              :     // function into a variant.
+     786              :     template<typename _Signature>
+     787              :       struct _Never_valueless_alt<std::function<_Signature>>
+     788              :       : std::true_type
+     789              :       { };
+     790              :   }  // namespace __detail::__variant
+     791              : #endif // C++17
+     792              : 
+     793              : _GLIBCXX_END_NAMESPACE_VERSION
+     794              : } // namespace std
+     795              : 
+     796              : #endif // C++11
+     797              : #endif // _GLIBCXX_STD_FUNCTION_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/std_mutex.h.func-c.html b/html/usr/include/c++/13/bits/std_mutex.h.func-c.html new file mode 100644 index 0000000..7c6be3d --- /dev/null +++ b/html/usr/include/c++/13/bits/std_mutex.h.func-c.html @@ -0,0 +1,145 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/std_mutex.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - std_mutex.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:78.6 %1411
Test Date:2024-04-30 13:17:26Functions:75.0 %86
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt12__mutex_baseC2Ev0
_ZNSt5mutexC2Ev0
_ZNSt5mutex4lockEv1591540
_ZNSt5mutex6unlockEv1591540
_ZNSt10lock_guardISt5mutexEC2ERS0_1595104
_ZNSt10lock_guardISt15recursive_mutexEC2ERS0_3564
_ZNSt10lock_guardISt5mutexEC2ERS0_1591540
_ZNSt10lock_guardISt5mutexED2Ev1595104
_ZNSt10lock_guardISt15recursive_mutexED2Ev3564
_ZNSt10lock_guardISt5mutexED2Ev1591540
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/std_mutex.h.func.html b/html/usr/include/c++/13/bits/std_mutex.h.func.html new file mode 100644 index 0000000..484beb9 --- /dev/null +++ b/html/usr/include/c++/13/bits/std_mutex.h.func.html @@ -0,0 +1,145 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/std_mutex.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - std_mutex.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:78.6 %1411
Test Date:2024-04-30 13:17:26Functions:75.0 %86
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt10lock_guardISt5mutexEC2ERS0_1595104
_ZNSt10lock_guardISt15recursive_mutexEC2ERS0_3564
_ZNSt10lock_guardISt5mutexEC2ERS0_1591540
_ZNSt10lock_guardISt5mutexED2Ev1595104
_ZNSt10lock_guardISt15recursive_mutexED2Ev3564
_ZNSt10lock_guardISt5mutexED2Ev1591540
_ZNSt12__mutex_baseC2Ev0
_ZNSt5mutex4lockEv1591540
_ZNSt5mutex6unlockEv1591540
_ZNSt5mutexC2Ev0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/std_mutex.h.gcov.html b/html/usr/include/c++/13/bits/std_mutex.h.gcov.html new file mode 100644 index 0000000..196231f --- /dev/null +++ b/html/usr/include/c++/13/bits/std_mutex.h.gcov.html @@ -0,0 +1,344 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/std_mutex.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - std_mutex.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:78.6 %1411
Test Date:2024-04-30 13:17:26Functions:75.0 %86
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // std::mutex implementation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2003-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/std_mutex.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{mutex}
+      28              :  */
+      29              : 
+      30              : #ifndef _GLIBCXX_MUTEX_H
+      31              : #define _GLIBCXX_MUTEX_H 1
+      32              : 
+      33              : #pragma GCC system_header
+      34              : 
+      35              : #if __cplusplus < 201103L
+      36              : # include <bits/c++0x_warning.h>
+      37              : #else
+      38              : 
+      39              : #include <errno.h> // EBUSY
+      40              : #include <bits/functexcept.h>
+      41              : #include <bits/gthr.h>
+      42              : 
+      43              : namespace std _GLIBCXX_VISIBILITY(default)
+      44              : {
+      45              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      46              : 
+      47              :   /**
+      48              :    * @defgroup mutexes Mutexes
+      49              :    * @ingroup concurrency
+      50              :    *
+      51              :    * Classes for mutex support.
+      52              :    * @{
+      53              :    */
+      54              : 
+      55              : #ifdef _GLIBCXX_HAS_GTHREADS
+      56              :   /// @cond undocumented
+      57              : 
+      58              :   // Common base class for std::mutex and std::timed_mutex
+      59              :   class __mutex_base
+      60              :   {
+      61              :   protected:
+      62              :     typedef __gthread_mutex_t                   __native_type;
+      63              : 
+      64              : #ifdef __GTHREAD_MUTEX_INIT
+      65              :     __native_type  _M_mutex = __GTHREAD_MUTEX_INIT;
+      66              : 
+      67            0 :     constexpr __mutex_base() noexcept = default;
+      68              : #else
+      69              :     __native_type  _M_mutex;
+      70              : 
+      71              :     __mutex_base() noexcept
+      72              :     {
+      73              :       // XXX EAGAIN, ENOMEM, EPERM, EBUSY(may), EINVAL(may)
+      74              :       __GTHREAD_MUTEX_INIT_FUNCTION(&_M_mutex);
+      75              :     }
+      76              : 
+      77              :     ~__mutex_base() noexcept { __gthread_mutex_destroy(&_M_mutex); }
+      78              : #endif
+      79              : 
+      80              :     __mutex_base(const __mutex_base&) = delete;
+      81              :     __mutex_base& operator=(const __mutex_base&) = delete;
+      82              :   };
+      83              :   /// @endcond
+      84              : 
+      85              :   /** The standard mutex type.
+      86              :    *
+      87              :    * A simple, non-recursive, non-timed mutex.
+      88              :    *
+      89              :    * Do not call `lock()` and `unlock()` directly, use a scoped lock type
+      90              :    * such as `std::unique_lock`, `std::lock_guard`, or (since C++17)
+      91              :    * `std::scoped_lock`.
+      92              :    *
+      93              :    * @headerfile mutex
+      94              :    * @since C++11
+      95              :    */
+      96              :   class mutex : private __mutex_base
+      97              :   {
+      98              :   public:
+      99              :     typedef __native_type*                      native_handle_type;
+     100              : 
+     101              : #ifdef __GTHREAD_MUTEX_INIT
+     102              :     constexpr
+     103              : #endif
+     104            0 :     mutex() noexcept = default;
+     105              :     ~mutex() = default;
+     106              : 
+     107              :     mutex(const mutex&) = delete;
+     108              :     mutex& operator=(const mutex&) = delete;
+     109              : 
+     110              :     void
+     111      1591540 :     lock()
+     112              :     {
+     113      1591540 :       int __e = __gthread_mutex_lock(&_M_mutex);
+     114              : 
+     115              :       // EINVAL, EAGAIN, EBUSY, EINVAL, EDEADLK(may)
+     116      1591540 :       if (__e)
+     117            0 :         __throw_system_error(__e);
+     118      1591540 :     }
+     119              : 
+     120              :     _GLIBCXX_NODISCARD
+     121              :     bool
+     122              :     try_lock() noexcept
+     123              :     {
+     124              :       // XXX EINVAL, EAGAIN, EBUSY
+     125              :       return !__gthread_mutex_trylock(&_M_mutex);
+     126              :     }
+     127              : 
+     128              :     void
+     129      1591540 :     unlock()
+     130              :     {
+     131              :       // XXX EINVAL, EAGAIN, EPERM
+     132      1591540 :       __gthread_mutex_unlock(&_M_mutex);
+     133      1591540 :     }
+     134              : 
+     135              :     native_handle_type
+     136              :     native_handle() noexcept
+     137              :     { return &_M_mutex; }
+     138              :   };
+     139              : 
+     140              :   /// @cond undocumented
+     141              : 
+     142              :   // Implementation details for std::condition_variable
+     143              :   class __condvar
+     144              :   {
+     145              :     using timespec = __gthread_time_t;
+     146              : 
+     147              :   public:
+     148              :     __condvar() noexcept
+     149              :     {
+     150              : #ifndef __GTHREAD_COND_INIT
+     151              :       __GTHREAD_COND_INIT_FUNCTION(&_M_cond);
+     152              : #endif
+     153              :     }
+     154              : 
+     155              :     ~__condvar()
+     156              :     {
+     157              :       int __e __attribute__((__unused__)) = __gthread_cond_destroy(&_M_cond);
+     158              :       __glibcxx_assert(__e != EBUSY); // threads are still blocked
+     159              :     }
+     160              : 
+     161              :     __condvar(const __condvar&) = delete;
+     162              :     __condvar& operator=(const __condvar&) = delete;
+     163              : 
+     164              :     __gthread_cond_t* native_handle() noexcept { return &_M_cond; }
+     165              : 
+     166              :     // Expects: Calling thread has locked __m.
+     167              :     void
+     168              :     wait(mutex& __m)
+     169              :     {
+     170              :       int __e __attribute__((__unused__))
+     171              :         = __gthread_cond_wait(&_M_cond, __m.native_handle());
+     172              :       __glibcxx_assert(__e == 0);
+     173              :     }
+     174              : 
+     175              :     void
+     176              :     wait_until(mutex& __m, timespec& __abs_time)
+     177              :     {
+     178              :       __gthread_cond_timedwait(&_M_cond, __m.native_handle(), &__abs_time);
+     179              :     }
+     180              : 
+     181              : #ifdef _GLIBCXX_USE_PTHREAD_COND_CLOCKWAIT
+     182              :     void
+     183              :     wait_until(mutex& __m, clockid_t __clock, timespec& __abs_time)
+     184              :     {
+     185              :       pthread_cond_clockwait(&_M_cond, __m.native_handle(), __clock,
+     186              :                              &__abs_time);
+     187              :     }
+     188              : #endif
+     189              : 
+     190              :     void
+     191              :     notify_one() noexcept
+     192              :     {
+     193              :       int __e __attribute__((__unused__)) = __gthread_cond_signal(&_M_cond);
+     194              :       __glibcxx_assert(__e == 0);
+     195              :     }
+     196              : 
+     197              :     void
+     198              :     notify_all() noexcept
+     199              :     {
+     200              :       int __e __attribute__((__unused__)) = __gthread_cond_broadcast(&_M_cond);
+     201              :       __glibcxx_assert(__e == 0);
+     202              :     }
+     203              : 
+     204              :   protected:
+     205              : #ifdef __GTHREAD_COND_INIT
+     206              :     __gthread_cond_t _M_cond = __GTHREAD_COND_INIT;
+     207              : #else
+     208              :     __gthread_cond_t _M_cond;
+     209              : #endif
+     210              :   };
+     211              :   /// @endcond
+     212              : 
+     213              : #endif // _GLIBCXX_HAS_GTHREADS
+     214              : 
+     215              :   /// Do not acquire ownership of the mutex.
+     216              :   struct defer_lock_t { explicit defer_lock_t() = default; };
+     217              : 
+     218              :   /// Try to acquire ownership of the mutex without blocking.
+     219              :   struct try_to_lock_t { explicit try_to_lock_t() = default; };
+     220              : 
+     221              :   /// Assume the calling thread has already obtained mutex ownership
+     222              :   /// and manage it.
+     223              :   struct adopt_lock_t { explicit adopt_lock_t() = default; };
+     224              : 
+     225              :   /// Tag used to prevent a scoped lock from acquiring ownership of a mutex.
+     226              :   _GLIBCXX17_INLINE constexpr defer_lock_t      defer_lock { };
+     227              : 
+     228              :   /// Tag used to prevent a scoped lock from blocking if a mutex is locked.
+     229              :   _GLIBCXX17_INLINE constexpr try_to_lock_t     try_to_lock { };
+     230              : 
+     231              :   /// Tag used to make a scoped lock take ownership of a locked mutex.
+     232              :   _GLIBCXX17_INLINE constexpr adopt_lock_t      adopt_lock { };
+     233              : 
+     234              :   /** @brief A simple scoped lock type.
+     235              :    *
+     236              :    * A lock_guard controls mutex ownership within a scope, releasing
+     237              :    * ownership in the destructor.
+     238              :    *
+     239              :    * @headerfile mutex
+     240              :    * @since C++11
+     241              :    */
+     242              :   template<typename _Mutex>
+     243              :     class lock_guard
+     244              :     {
+     245              :     public:
+     246              :       typedef _Mutex mutex_type;
+     247              : 
+     248      1595104 :       explicit lock_guard(mutex_type& __m) : _M_device(__m)
+     249      1595104 :       { _M_device.lock(); }
+     250              : 
+     251              :       lock_guard(mutex_type& __m, adopt_lock_t) noexcept : _M_device(__m)
+     252              :       { } // calling thread owns mutex
+     253              : 
+     254      1595104 :       ~lock_guard()
+     255      1595104 :       { _M_device.unlock(); }
+     256              : 
+     257              :       lock_guard(const lock_guard&) = delete;
+     258              :       lock_guard& operator=(const lock_guard&) = delete;
+     259              : 
+     260              :     private:
+     261              :       mutex_type&  _M_device;
+     262              :     };
+     263              : 
+     264              :   /// @} group mutexes
+     265              : _GLIBCXX_END_NAMESPACE_VERSION
+     266              : } // namespace
+     267              : #endif // C++11
+     268              : #endif // _GLIBCXX_MUTEX_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/std_thread.h.func-c.html b/html/usr/include/c++/13/bits/std_thread.h.func-c.html new file mode 100644 index 0000000..5e247d8 --- /dev/null +++ b/html/usr/include/c++/13/bits/std_thread.h.func-c.html @@ -0,0 +1,418 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/std_thread.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - std_thread.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:93.1 %2927
Test Date:2024-04-30 13:17:26Functions:83.7 %4336
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt6thread24_M_thread_deps_never_runEv0
_ZNSt6thread4swapERS_1479910
_ZNSt6threadC2EOS_1479910
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS3_7MessageEbbEUlvE_EEEEE6_M_runEv1605734
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS3_7MessageEbbEUlvE_EEEEE6_M_runEv0
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS5_IiSaIiEESaIS7_EEEUlvE_EEEEE6_M_runEv122
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EEEEE6_M_runEv536
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EEEEE6_M_runEv734
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessISB_ESaISt4pairIKSB_SE_EEERKN2at6TensorEEUlvE_EEEEE6_M_runEv14194
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessISB_ESaISt4pairIKSB_iEEEEUlvE_EEEEE6_M_runEv1590148
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS3_7MessageEbbEUlvE_EEEEEC2IJS6_EEEDpOT_1605734
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS3_7MessageEbbEUlvE_EEEEEC2IJS6_EEEDpOT_0
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS5_IiSaIiEESaIS7_EEEUlvE_EEEEEC2IJSB_EEEDpOT_122
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EEEEEC2IJS8_EEEDpOT_536
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EEEEEC2IJS8_EEEDpOT_734
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessISB_ESaISt4pairIKSB_SE_EEERKN2at6TensorEEUlvE_EEEEEC2IJSS_EEEDpOT_14194
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessISB_ESaISt4pairIKSB_iEEEEUlvE_EEEEEC2IJSK_EEEDpOT_1590148
_ZNSt6thread8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS2_7MessageEbbEUlvE_EEE9_M_invokeIJLm0EEEEvSt12_Index_tupleIJXspT_EEE1605734
_ZNSt6thread8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS2_7MessageEbbEUlvE_EEE9_M_invokeIJLm0EEEEvSt12_Index_tupleIJXspT_EEE0
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS4_IiSaIiEESaIS6_EEEUlvE_EEE9_M_invokeIJLm0EEEEvSt12_Index_tupleIJXspT_EEE122
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EEE9_M_invokeIJLm0EEEEvSt12_Index_tupleIJXspT_EEE536
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EEE9_M_invokeIJLm0EEEEvSt12_Index_tupleIJXspT_EEE734
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessISA_ESaISt4pairIKSA_SD_EEERKN2at6TensorEEUlvE_EEE9_M_invokeIJLm0EEEEvSt12_Index_tupleIJXspT_EEE14194
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessISA_ESaISt4pairIKSA_iEEEEUlvE_EEE9_M_invokeIJLm0EEEEvSt12_Index_tupleIJXspT_EEE1590148
_ZNSt6thread8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS2_7MessageEbbEUlvE_EEEC2IJS5_EEEDpOT_1605734
_ZNSt6thread8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS2_7MessageEbbEUlvE_EEEC2IJS5_EEEDpOT_0
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS4_IiSaIiEESaIS6_EEEUlvE_EEEC2IJSA_EEEDpOT_122
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EEEC2IJS7_EEEDpOT_536
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EEEC2IJS7_EEEDpOT_734
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessISA_ESaISt4pairIKSA_SD_EEERKN2at6TensorEEUlvE_EEEC2IJSR_EEEDpOT_14194
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessISA_ESaISt4pairIKSA_iEEEEUlvE_EEEC2IJSJ_EEEDpOT_1590148
_ZNSt6thread8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS2_7MessageEbbEUlvE_EEEclEv1605734
_ZNSt6thread8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS2_7MessageEbbEUlvE_EEEclEv0
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS4_IiSaIiEESaIS6_EEEUlvE_EEEclEv122
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EEEclEv536
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EEEclEv734
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessISA_ESaISt4pairIKSA_SD_EEERKN2at6TensorEEUlvE_EEEclEv14194
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessISA_ESaISt4pairIKSA_iEEEEUlvE_EEEclEv1590148
_ZNSt6threadC2IZN6loguruL11log_messageEiRNS1_7MessageEbbEUlvE_JEvEEOT_DpOT0_1605734
_ZNSt6threadC2IZN6loguruL11log_messageEiRNS1_7MessageEbbEUlvE_JEvEEOT_DpOT0_0
_ZNSt6threadC2IZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS3_IiSaIiEESaIS5_EEEUlvE_JEvEEOT_DpOT0_122
_ZNSt6threadC2IZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_JEvEEOT_DpOT0_536
_ZNSt6threadC2IZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_JEvEEOT_DpOT0_734
_ZNSt6threadC2IZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS9_ESaISt4pairIKS9_SC_EEERKN2at6TensorEEUlvE_JEvEEOT_DpOT0_14194
_ZNSt6threadC2IZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS9_ESaISt4pairIKS9_iEEEEUlvE_JEvEEOT_DpOT0_1590148
_ZNKSt6thread8joinableEv3085644
_ZNSt6threadD2Ev3085644
_ZSteqNSt6thread2idES0_3085644
_ZNSt6thread2idC2Ev6171288
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/std_thread.h.func.html b/html/usr/include/c++/13/bits/std_thread.h.func.html new file mode 100644 index 0000000..e6b33d4 --- /dev/null +++ b/html/usr/include/c++/13/bits/std_thread.h.func.html @@ -0,0 +1,418 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/std_thread.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - std_thread.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:93.1 %2927
Test Date:2024-04-30 13:17:26Functions:83.7 %4336
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt6thread8joinableEv3085644
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS3_7MessageEbbEUlvE_EEEEE6_M_runEv1605734
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS3_7MessageEbbEUlvE_EEEEE6_M_runEv0
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessISB_ESaISt4pairIKSB_SE_EEERKN2at6TensorEEUlvE_EEEEE6_M_runEv14194
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessISB_ESaISt4pairIKSB_iEEEEUlvE_EEEEE6_M_runEv1590148
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EEEEE6_M_runEv734
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS5_IiSaIiEESaIS7_EEEUlvE_EEEEE6_M_runEv122
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EEEEE6_M_runEv536
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS3_7MessageEbbEUlvE_EEEEEC2IJS6_EEEDpOT_1605734
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS3_7MessageEbbEUlvE_EEEEEC2IJS6_EEEDpOT_0
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessISB_ESaISt4pairIKSB_SE_EEERKN2at6TensorEEUlvE_EEEEEC2IJSS_EEEDpOT_14194
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessISB_ESaISt4pairIKSB_iEEEEUlvE_EEEEEC2IJSK_EEEDpOT_1590148
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EEEEEC2IJS8_EEEDpOT_734
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS5_IiSaIiEESaIS7_EEEUlvE_EEEEEC2IJSB_EEEDpOT_122
_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EEEEEC2IJS8_EEEDpOT_536
_ZNSt6thread24_M_thread_deps_never_runEv0
_ZNSt6thread2idC2Ev6171288
_ZNSt6thread4swapERS_1479910
_ZNSt6thread8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS2_7MessageEbbEUlvE_EEE9_M_invokeIJLm0EEEEvSt12_Index_tupleIJXspT_EEE1605734
_ZNSt6thread8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS2_7MessageEbbEUlvE_EEE9_M_invokeIJLm0EEEEvSt12_Index_tupleIJXspT_EEE0
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessISA_ESaISt4pairIKSA_SD_EEERKN2at6TensorEEUlvE_EEE9_M_invokeIJLm0EEEEvSt12_Index_tupleIJXspT_EEE14194
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessISA_ESaISt4pairIKSA_iEEEEUlvE_EEE9_M_invokeIJLm0EEEEvSt12_Index_tupleIJXspT_EEE1590148
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EEE9_M_invokeIJLm0EEEEvSt12_Index_tupleIJXspT_EEE734
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS4_IiSaIiEESaIS6_EEEUlvE_EEE9_M_invokeIJLm0EEEEvSt12_Index_tupleIJXspT_EEE122
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EEE9_M_invokeIJLm0EEEEvSt12_Index_tupleIJXspT_EEE536
_ZNSt6thread8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS2_7MessageEbbEUlvE_EEEC2IJS5_EEEDpOT_1605734
_ZNSt6thread8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS2_7MessageEbbEUlvE_EEEC2IJS5_EEEDpOT_0
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessISA_ESaISt4pairIKSA_SD_EEERKN2at6TensorEEUlvE_EEEC2IJSR_EEEDpOT_14194
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessISA_ESaISt4pairIKSA_iEEEEUlvE_EEEC2IJSJ_EEEDpOT_1590148
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EEEC2IJS7_EEEDpOT_734
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS4_IiSaIiEESaIS6_EEEUlvE_EEEC2IJSA_EEEDpOT_122
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EEEC2IJS7_EEEDpOT_536
_ZNSt6thread8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS2_7MessageEbbEUlvE_EEEclEv1605734
_ZNSt6thread8_InvokerISt5tupleIJZN6loguruL11log_messageEiRNS2_7MessageEbbEUlvE_EEEclEv0
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessISA_ESaISt4pairIKSA_SD_EEERKN2at6TensorEEUlvE_EEEclEv14194
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessISA_ESaISt4pairIKSA_iEEEEUlvE_EEEclEv1590148
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EEEclEv734
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS4_IiSaIiEESaIS6_EEEUlvE_EEEclEv122
_ZNSt6thread8_InvokerISt5tupleIJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EEEclEv536
_ZNSt6threadC2EOS_1479910
_ZNSt6threadC2IZN6loguruL11log_messageEiRNS1_7MessageEbbEUlvE_JEvEEOT_DpOT0_1605734
_ZNSt6threadC2IZN6loguruL11log_messageEiRNS1_7MessageEbbEUlvE_JEvEEOT_DpOT0_0
_ZNSt6threadC2IZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS9_ESaISt4pairIKS9_SC_EEERKN2at6TensorEEUlvE_JEvEEOT_DpOT0_14194
_ZNSt6threadC2IZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS9_ESaISt4pairIKS9_iEEEEUlvE_JEvEEOT_DpOT0_1590148
_ZNSt6threadC2IZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_JEvEEOT_DpOT0_734
_ZNSt6threadC2IZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS3_IiSaIiEESaIS5_EEEUlvE_JEvEEOT_DpOT0_122
_ZNSt6threadC2IZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_JEvEEOT_DpOT0_536
_ZNSt6threadD2Ev3085644
_ZSteqNSt6thread2idES0_3085644
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/std_thread.h.gcov.html b/html/usr/include/c++/13/bits/std_thread.h.gcov.html new file mode 100644 index 0000000..401b5cd --- /dev/null +++ b/html/usr/include/c++/13/bits/std_thread.h.gcov.html @@ -0,0 +1,454 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/std_thread.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - std_thread.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:93.1 %2927
Test Date:2024-04-30 13:17:26Functions:83.7 %4336
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // std::thread declarations -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2008-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/std_thread.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{thread}
+      28              :  */
+      29              : 
+      30              : #ifndef _GLIBCXX_THREAD_H
+      31              : #define _GLIBCXX_THREAD_H 1
+      32              : 
+      33              : #pragma GCC system_header
+      34              : 
+      35              : #if __cplusplus >= 201103L
+      36              : #include <bits/c++config.h>
+      37              : 
+      38              : #include <iosfwd>         // std::basic_ostream
+      39              : #include <tuple>          // std::tuple
+      40              : #include <bits/functional_hash.h> // std::hash
+      41              : #include <bits/invoke.h>  // std::__invoke
+      42              : #include <bits/refwrap.h>       // not required, but helpful to users
+      43              : #include <bits/unique_ptr.h>      // std::unique_ptr
+      44              : 
+      45              : #ifdef _GLIBCXX_HAS_GTHREADS
+      46              : # include <bits/gthr.h>
+      47              : #else
+      48              : # include <errno.h>
+      49              : # include <bits/functexcept.h>
+      50              : #endif
+      51              : 
+      52              : namespace std _GLIBCXX_VISIBILITY(default)
+      53              : {
+      54              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      55              : 
+      56              :   /** @addtogroup threads
+      57              :    *  @{
+      58              :    */
+      59              : 
+      60              :   /** A std::thread represents a new thread of execution.
+      61              :    *
+      62              :    * The default constructor creates an object that does not own a thread.
+      63              :    * The `thread(F&&, Args&&...)` constructor invokes a callable in a new
+      64              :    * thread, and owns that new thread. A `std::thread` that owns a thread
+      65              :    * is *joinable*. Joining a thread waits for it to finish executing,
+      66              :    * which happens when the callable running in that thread returns.
+      67              :    *
+      68              :    * A `std::thread` cannot be copied, but can be moved. Moving a joinable
+      69              :    * object transfers ownership of its thread to another object.
+      70              :    *
+      71              :    * A joinable `std::thread` must be explicitly joined (or detached) before
+      72              :    * it is destroyed or assigned to. Attempting to destroy a joinable thread
+      73              :    * will terminate the whole process.
+      74              :    *
+      75              :    * @headerfile thread
+      76              :    * @since C++11
+      77              :    */
+      78              :   class thread
+      79              :   {
+      80              :   public:
+      81              : #ifdef _GLIBCXX_HAS_GTHREADS
+      82              :     using native_handle_type = __gthread_t;
+      83              : #else
+      84              :     using native_handle_type = int;
+      85              : #endif
+      86              : 
+      87              :     /** A std::thread::id is a unique identifier for a thread.
+      88              :      *
+      89              :      * @headerfile thread
+      90              :      * @since C++11
+      91              :      */
+      92              :     class id
+      93              :     {
+      94              :       native_handle_type        _M_thread;
+      95              : 
+      96              :     public:
+      97      6171288 :       id() noexcept : _M_thread() { }
+      98              : 
+      99              :       explicit
+     100              :       id(native_handle_type __id) : _M_thread(__id) { }
+     101              : 
+     102              :     private:
+     103              :       friend class thread;
+     104              :       friend struct hash<id>;
+     105              : 
+     106              :       friend bool
+     107              :       operator==(id __x, id __y) noexcept;
+     108              : 
+     109              : #if __cpp_lib_three_way_comparison
+     110              :       friend strong_ordering
+     111              :       operator<=>(id __x, id __y) noexcept;
+     112              : #else
+     113              :       friend bool
+     114              :       operator<(id __x, id __y) noexcept;
+     115              : #endif
+     116              : 
+     117              :       template<class _CharT, class _Traits>
+     118              :         friend basic_ostream<_CharT, _Traits>&
+     119              :         operator<<(basic_ostream<_CharT, _Traits>& __out, id __id);
+     120              :     };
+     121              : 
+     122              :   private:
+     123              :     id                          _M_id;
+     124              : 
+     125              :     // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     126              :     // 2097.  packaged_task constructors should be constrained
+     127              :     // 3039. Unnecessary decay in thread and packaged_task
+     128              :     template<typename _Tp>
+     129              :       using __not_same = __not_<is_same<__remove_cvref_t<_Tp>, thread>>;
+     130              : 
+     131              :   public:
+     132              :     thread() noexcept = default;
+     133              : 
+     134              : #ifdef _GLIBCXX_HAS_GTHREADS
+     135              :   private:
+     136              :     // This adds to user code that creates std:thread objects (because
+     137              :     // it is called by the template ctor below) strong references to
+     138              :     // pthread_create and pthread_join, which ensures they are both
+     139              :     // linked in even during static linking.  We can't depend on
+     140              :     // gthread calls to bring them in, because those may use weak
+     141              :     // references.
+     142              :     static void
+     143            0 :     _M_thread_deps_never_run() {
+     144              : #ifdef GTHR_ACTIVE_PROXY
+     145              :       reinterpret_cast<void (*)(void)>(&pthread_create)();
+     146              :       reinterpret_cast<void (*)(void)>(&pthread_join)();
+     147              : #endif
+     148            0 :     }
+     149              : 
+     150              :   public:
+     151              :     template<typename _Callable, typename... _Args,
+     152              :              typename = _Require<__not_same<_Callable>>>
+     153              :       explicit
+     154      1605734 :       thread(_Callable&& __f, _Args&&... __args)
+     155      1605734 :       {
+     156              :         static_assert( __is_invocable<typename decay<_Callable>::type,
+     157              :                                       typename decay<_Args>::type...>::value,
+     158              :           "std::thread arguments must be invocable after conversion to rvalues"
+     159              :           );
+     160              : 
+     161              :         using _Wrapper = _Call_wrapper<_Callable, _Args...>;
+     162              :         // Create a call wrapper with DECAY_COPY(__f) as its target object
+     163              :         // and DECAY_COPY(__args)... as its bound argument entities.
+     164      1605734 :         _M_start_thread(_State_ptr(new _State_impl<_Wrapper>(
+     165              :               std::forward<_Callable>(__f), std::forward<_Args>(__args)...)),
+     166              :             _M_thread_deps_never_run);
+     167      1605734 :       }
+     168              : #endif // _GLIBCXX_HAS_GTHREADS
+     169              : 
+     170      3085644 :     ~thread()
+     171              :     {
+     172      3085644 :       if (joinable())
+     173              :         std::__terminate();
+     174      3085644 :     }
+     175              : 
+     176              :     thread(const thread&) = delete;
+     177              : 
+     178      1479910 :     thread(thread&& __t) noexcept
+     179      1479910 :     { swap(__t); }
+     180              : 
+     181              :     thread& operator=(const thread&) = delete;
+     182              : 
+     183              :     thread& operator=(thread&& __t) noexcept
+     184              :     {
+     185              :       if (joinable())
+     186              :         std::__terminate();
+     187              :       swap(__t);
+     188              :       return *this;
+     189              :     }
+     190              : 
+     191              :     void
+     192      1479910 :     swap(thread& __t) noexcept
+     193      1479910 :     { std::swap(_M_id, __t._M_id); }
+     194              : 
+     195              :     bool
+     196      3085644 :     joinable() const noexcept
+     197      3085644 :     { return !(_M_id == id()); }
+     198              : 
+     199              :     void
+     200              :     join();
+     201              : 
+     202              :     void
+     203              :     detach();
+     204              : 
+     205              :     id
+     206              :     get_id() const noexcept
+     207              :     { return _M_id; }
+     208              : 
+     209              :     /** @pre thread is joinable
+     210              :      */
+     211              :     native_handle_type
+     212              :     native_handle()
+     213              :     { return _M_id._M_thread; }
+     214              : 
+     215              :     // Returns a value that hints at the number of hardware thread contexts.
+     216              :     static unsigned int
+     217              :     hardware_concurrency() noexcept;
+     218              : 
+     219              : #ifdef _GLIBCXX_HAS_GTHREADS
+     220              : #ifndef _GLIBCXX_THREAD_IMPL
+     221              :   private:
+     222              : #endif
+     223              :     // Abstract base class for types that wrap arbitrary functors to be
+     224              :     // invoked in the new thread of execution.
+     225              :     struct _State
+     226              :     {
+     227              :       virtual ~_State();
+     228              :       virtual void _M_run() = 0;
+     229              :     };
+     230              :     using _State_ptr = unique_ptr<_State>;
+     231              : 
+     232              :   private:
+     233              :     template<typename _Callable>
+     234              :       struct _State_impl : public _State
+     235              :       {
+     236              :         _Callable               _M_func;
+     237              : 
+     238              :         template<typename... _Args>
+     239      1605734 :           _State_impl(_Args&&... __args)
+     240      1605734 :           : _M_func(std::forward<_Args>(__args)...)
+     241      1605734 :           { }
+     242              : 
+     243              :         void
+     244      1605734 :         _M_run() { _M_func(); }
+     245              :       };
+     246              : 
+     247              :     void
+     248              :     _M_start_thread(_State_ptr, void (*)());
+     249              : 
+     250              : #if _GLIBCXX_THREAD_ABI_COMPAT
+     251              :   public:
+     252              :     struct _Impl_base;
+     253              :     typedef shared_ptr<_Impl_base>        __shared_base_type;
+     254              :     struct _Impl_base
+     255              :     {
+     256              :       __shared_base_type        _M_this_ptr;
+     257              :       virtual ~_Impl_base() = default;
+     258              :       virtual void _M_run() = 0;
+     259              :     };
+     260              : 
+     261              :   private:
+     262              :     void
+     263              :     _M_start_thread(__shared_base_type, void (*)());
+     264              : 
+     265              :     void
+     266              :     _M_start_thread(__shared_base_type);
+     267              : #endif
+     268              : 
+     269              :   private:
+     270              :     // A call wrapper that does INVOKE(forwarded tuple elements...)
+     271              :     template<typename _Tuple>
+     272              :       struct _Invoker
+     273              :       {
+     274              :         template<typename... _Args>
+     275              :           explicit
+     276      1605734 :           _Invoker(_Args&&... __args)
+     277      1605734 :           : _M_t(std::forward<_Args>(__args)...)
+     278      1605734 :           { }
+     279              : 
+     280              :         _Tuple _M_t;
+     281              : 
+     282              :         template<typename>
+     283              :           struct __result;
+     284              :         template<typename _Fn, typename... _Args>
+     285              :           struct __result<tuple<_Fn, _Args...>>
+     286              :           : __invoke_result<_Fn, _Args...>
+     287              :           { };
+     288              : 
+     289              :         template<size_t... _Ind>
+     290              :           typename __result<_Tuple>::type
+     291      1605734 :           _M_invoke(_Index_tuple<_Ind...>)
+     292      1605734 :           { return std::__invoke(std::get<_Ind>(std::move(_M_t))...); }
+     293              : 
+     294              :         typename __result<_Tuple>::type
+     295      1605734 :         operator()()
+     296              :         {
+     297              :           using _Indices
+     298              :             = typename _Build_index_tuple<tuple_size<_Tuple>::value>::__type;
+     299      1605734 :           return _M_invoke(_Indices());
+     300              :         }
+     301              :       };
+     302              : 
+     303              :   public:
+     304              :     /// @cond undocumented
+     305              :     template<typename... _Tp>
+     306              :       using _Call_wrapper = _Invoker<tuple<typename decay<_Tp>::type...>>;
+     307              :     /// @endcond
+     308              : #endif // _GLIBCXX_HAS_GTHREADS
+     309              :   };
+     310              : 
+     311              : #ifndef _GLIBCXX_HAS_GTHREADS
+     312              :   inline void thread::join() { std::__throw_system_error(EINVAL); }
+     313              :   inline void thread::detach() { std::__throw_system_error(EINVAL); }
+     314              :   inline unsigned int thread::hardware_concurrency() noexcept { return 0; }
+     315              : #endif
+     316              : 
+     317              :   /// @relates std::thread
+     318              :   inline void
+     319              :   swap(thread& __x, thread& __y) noexcept
+     320              :   { __x.swap(__y); }
+     321              : 
+     322              :   /// @relates std::thread::id
+     323              :   inline bool
+     324      3085644 :   operator==(thread::id __x, thread::id __y) noexcept
+     325              :   {
+     326              :     // pthread_equal is undefined if either thread ID is not valid, so we
+     327              :     // can't safely use __gthread_equal on default-constructed values (nor
+     328              :     // the non-zero value returned by this_thread::get_id() for
+     329              :     // single-threaded programs using GNU libc). Assume EqualityComparable.
+     330      3085644 :     return __x._M_thread == __y._M_thread;
+     331              :   }
+     332              : 
+     333              :   // N.B. other comparison operators are defined in <thread>
+     334              : 
+     335              :   // DR 889.
+     336              :   /// std::hash specialization for thread::id.
+     337              :   template<>
+     338              :     struct hash<thread::id>
+     339              :     : public __hash_base<size_t, thread::id>
+     340              :     {
+     341              :       size_t
+     342              :       operator()(const thread::id& __id) const noexcept
+     343              :       { return std::_Hash_impl::hash(__id._M_thread); }
+     344              :     };
+     345              : 
+     346              :   namespace this_thread
+     347              :   {
+     348              :     /// The unique identifier of the current thread.
+     349              :     inline thread::id
+     350              :     get_id() noexcept
+     351              :     {
+     352              : #ifndef _GLIBCXX_HAS_GTHREADS
+     353              :       return thread::id(1);
+     354              : #elif defined _GLIBCXX_NATIVE_THREAD_ID
+     355              :       return thread::id(_GLIBCXX_NATIVE_THREAD_ID);
+     356              : #else
+     357              :       return thread::id(__gthread_self());
+     358              : #endif
+     359              :     }
+     360              : 
+     361              :     /// Allow the implementation to schedule a different thread.
+     362              :     inline void
+     363              :     yield() noexcept
+     364              :     {
+     365              : #if defined _GLIBCXX_HAS_GTHREADS && defined _GLIBCXX_USE_SCHED_YIELD
+     366              :       __gthread_yield();
+     367              : #endif
+     368              :     }
+     369              : 
+     370              :   } // namespace this_thread
+     371              : 
+     372              :   /// @}
+     373              : 
+     374              : _GLIBCXX_END_NAMESPACE_VERSION
+     375              : } // namespace
+     376              : #endif // C++11
+     377              : 
+     378              : #endif // _GLIBCXX_THREAD_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_algo.h.func-c.html b/html/usr/include/c++/13/bits/stl_algo.h.func-c.html new file mode 100644 index 0000000..177ac36 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_algo.h.func-c.html @@ -0,0 +1,1244 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_algo.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_algo.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:52.1 %403210
Test Date:2024-04-30 13:17:26Functions:62.2 %14892
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt3_V26rotateIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS3_IiiEESt6vectorIS5_SaIS5_EEEEEET_SB_SB_SB_0
_ZNSt3_V28__rotateIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS3_IiiEESt6vectorIS5_SaIS5_EEEEEET_SB_SB_SB_St26random_access_iterator_tag0
_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_S9_T0_0
_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_SH_SK_0
_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_S9_T0_0
_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_SC_T0_0
_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_SC_T0_0
_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_SH_T0_0
_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_SH_T0_0
_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_SF_T0_0
_ZSt13__upper_boundIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES4_NS0_5__ops14_Val_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEESE_SE_SE_SJ_T1_0
_ZSt13binary_searchIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEcEbT_S8_RKT0_0
_ZSt14__partial_sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_S9_T0_0
_ZSt14__partial_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_SH_SK_0
_ZSt14__partial_sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_S9_T0_0
_ZSt14__partial_sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_SC_T0_0
_ZSt14__partial_sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_SC_T0_0
_ZSt14__partial_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_SH_T0_0
_ZSt14__partial_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_SH_T0_0
_ZSt14__partial_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_SF_T0_0
_ZSt15__adjacent_findIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops19_Iter_equal_to_iterEET_S9_S9_T0_0
_ZSt17__rotate_adaptiveIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_lET_SA_SA_SA_T1_SB_T0_SB_0
_ZSt21__inplace_stable_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_0
_ZSt22__merge_without_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEElNS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SE_SH_SH_T1_0
_ZSt23__merge_adaptive_resizeIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEElS5_NS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SE_SH_SH_T1_SH_T2_0
_ZSt29__stable_sort_adaptive_resizeIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_lNS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_T1_T2_0
_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEvT_S7_0
_ZSt6uniqueIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEET_S7_S7_0
_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS3_SaIS3_EEEEZNS2_15remove_callbackEPKcEUlRKS3_E_ET_SE_SE_T0_0
_ZSt7reverseIN9__gnu_cxx17__normal_iteratorIPPKN6loguru11EcEntryBaseESt6vectorIS5_SaIS5_EEEEEvT_SB_0
_ZSt8__uniqueIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops19_Iter_equal_to_iterEET_S9_S9_T0_0
_ZSt9__reverseIN9__gnu_cxx17__normal_iteratorIPPKN6loguru11EcEntryBaseESt6vectorIS5_SaIS5_EEEEEvT_SB_St26random_access_iterator_tag0
_ZSt30__move_merge_adaptive_backwardIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_S9_NS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_SH_T1_T2_12
_ZSt26__unguarded_insertion_sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_T0_28
_ZSt26__unguarded_insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_SK_0
_ZSt26__unguarded_insertion_sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_T0_0
_ZSt26__unguarded_insertion_sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_T0_0
_ZSt26__unguarded_insertion_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_T0_0
_ZSt26__unguarded_insertion_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_T0_0
_ZSt26__unguarded_insertion_sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_T0_14
_ZSt26__unguarded_insertion_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_T0_14
_ZSt21__move_merge_adaptiveIPSt4pairIfS0_IiiEEN9__gnu_cxx17__normal_iteratorIS3_St6vectorIS2_SaIS2_EEEES9_NS4_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_SH_T1_T2_46
_ZSt11stable_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEEZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EvSC_SC_SF_58
_ZSt13__stable_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_58
_ZSt16__merge_adaptiveIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEElS5_NS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SE_SH_SH_T1_T2_58
_ZSt22__stable_sort_adaptiveIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_NS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SE_SH_T1_58
_ZSt22__chunk_insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEElNS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_T1_116
_ZSt24__merge_sort_with_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_NS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_T1_116
_ZSt17__merge_sort_loopIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_lNS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_T1_T2_144
_ZSt17__merge_sort_loopIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_lNS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_T1_T2_72
_ZSt17__merge_sort_loopIPSt4pairIfS0_IiiEEN9__gnu_cxx17__normal_iteratorIS3_St6vectorIS2_SaIS2_EEEElNS4_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_T1_T2_72
_ZSt11find_if_notIPKN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEZNSG_C4ESt16initializer_listISH_EbNS2_7value_tEEUlRSI_E_ET_SP_SP_T0_164
_ZSt13__find_if_notIPKN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEN9__gnu_cxx5__ops10_Iter_predIZNSG_C4ESt16initializer_listISH_EbNS2_7value_tEEUlRSI_E_EEET_ST_ST_T0_164
_ZSt6all_ofIPKN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEZNSG_C4ESt16initializer_listISH_EbNS2_7value_tEEUlRSI_E_EbT_SP_T0_164
_ZSt12__move_mergeIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_NS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEESH_SE_SE_SE_SE_SH_T1_192
_ZSt12__move_mergeIPSt4pairIfS0_IiiEEN9__gnu_cxx17__normal_iteratorIS3_St6vectorIS2_SaIS2_EEEENS4_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEESH_SE_SE_SE_SE_SH_T1_72
_ZSt12__move_mergeIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_NS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEESH_SE_SE_SE_SE_SH_T1_120
_ZSt9remove_ifIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEEUlT_E_ESD_SD_SD_T0_214
_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_T0_544
_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_T0_0
_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_SK_26
_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_T0_38
_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_T0_38
_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_T0_58
_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_T0_192
_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_T0_192
_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEESt4lessIdEEvT_S9_T0_544
_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEEZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EvSF_SF_SI_26
_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEESt4lessIdEEvT_S9_T0_38
_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EvT_SE_T0_38
_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EvT_SC_T0_58
_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEESt7greaterIdEEvT_S9_T0_192
_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EvT_SE_T0_192
_ZSt6__sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_T0_544
_ZSt6__sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_T0_0
_ZSt6__sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_SK_26
_ZSt6__sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_T0_38
_ZSt6__sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_T0_38
_ZSt6__sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_T0_58
_ZSt6__sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_T0_192
_ZSt6__sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_T0_192
_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEET_S9_S9_S9_T0_644
_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEESH_SH_SH_SH_SK_0
_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEET_S9_S9_S9_T0_0
_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEET_SC_SC_SC_T0_0
_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEET_SH_SH_SH_T0_0
_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEET_SF_SF_SF_T0_0
_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEET_SC_SC_SC_T0_322
_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEET_SH_SH_SH_T0_322
_ZSt22__move_median_to_firstIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_S9_S9_T0_644
_ZSt22__move_median_to_firstIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_SH_SH_SK_0
_ZSt22__move_median_to_firstIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_S9_S9_T0_0
_ZSt22__move_median_to_firstIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_SC_SC_T0_0
_ZSt22__move_median_to_firstIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_SH_SH_T0_0
_ZSt22__move_median_to_firstIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_SF_SF_T0_0
_ZSt22__move_median_to_firstIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_SC_SC_T0_322
_ZSt22__move_median_to_firstIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_SH_SH_T0_322
_ZSt27__unguarded_partition_pivotIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEET_S9_S9_T0_644
_ZSt27__unguarded_partition_pivotIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEESH_SH_SH_SK_0
_ZSt27__unguarded_partition_pivotIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEET_S9_S9_T0_0
_ZSt27__unguarded_partition_pivotIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEET_SC_SC_T0_0
_ZSt27__unguarded_partition_pivotIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEET_SH_SH_T0_0
_ZSt27__unguarded_partition_pivotIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEET_SF_SF_T0_0
_ZSt27__unguarded_partition_pivotIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEET_SC_SC_T0_322
_ZSt27__unguarded_partition_pivotIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEET_SH_SH_T0_322
_ZSt8for_eachIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEEZN8bayesnet7Network9setStatesERKSt3mapIS7_S9_IiSaIiEESt4lessIS7_ESaISt4pairIKS7_SH_EEEEUlRSL_E_ET0_T_SU_ST_684
_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_T0_780
_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_T0_0
_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_SK_26
_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_T0_38
_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_T0_38
_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_T0_58
_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_T0_192
_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_T0_192
_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_236
_ZSt6removeIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_962
_ZSt6removeIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEES4_ET_SA_SA_RKT0_12
_ZSt6removeIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_56
_ZSt6removeIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEES7_ET_SD_SD_RKT0_894
_ZSt7shuffleIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEERSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEEvT_SA_OT0_1040
_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEElNS0_5__ops15_Iter_less_iterEEvT_S9_T0_T1_1188
_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEElNS0_5__ops15_Iter_less_iterEEvT_S9_T0_T1_0
_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEElNS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_SK_T1_26
_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEElNS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_T0_T1_38
_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEElNS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_T0_T1_38
_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEElNS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_T0_T1_58
_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEElNS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_T0_T1_514
_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEElNS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_T0_T1_514
_ZSt11max_elementIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEET_S7_S7_8910
_ZSt11max_elementIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEET_S7_S7_2184
_ZSt11max_elementIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEET_S7_S7_6726
_ZSt13__max_elementIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_less_iterEET_S9_S9_T0_8910
_ZSt13__max_elementIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_less_iterEET_S9_S9_T0_2184
_ZSt13__max_elementIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_less_iterEET_S9_S9_T0_6726
_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops14_Val_less_iterEEvT_T0_9732
_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops14_Val_less_iterEEvT_T0_0
_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops14_Val_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SK_88
_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops14_Val_comp_iterISt4lessIdEEEEvT_T0_218
_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops14_Val_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_T0_218
_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops14_Val_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_T0_268
_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEENS0_5__ops14_Val_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SH_700
_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops14_Val_comp_iterISt7greaterIdEEEEvT_T0_4120
_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops14_Val_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_T0_4120
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES6_S6_ZZN8bayesnet8Ensemble21predict_average_probaERS3_IS3_IiSaIiEESaISA_EEENKUlvE_clEvEUlddE_ET1_T_SH_T0_SG_T2_24060
_ZSt22__gen_two_uniform_intsImRSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEESt4pairIT_S4_ES4_S4_OT0_39996
_ZSt4findIPKccET_S2_S2_RKT0_9579236
_ZSt4findIPKccET_S2_S2_RKT0_0
_ZSt4findIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS9_S7_blmdSaNSE_14adl_serializerES9_IhSaIhEEvEEET_SL_SL_RKT0_18
_ZSt4findISt14_List_iteratorIiEiET_S2_S2_RKT0_318
_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_5180
_ZSt4findIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEES7_ET_SD_SD_RKT0_35106
_ZSt4findIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEES7_ET_SE_SE_RKT0_9538614
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES6_ZN8bayesnet8Ensemble21predict_average_probaERS3_IS3_IiSaIiEESaISA_EEEUldE_ET0_T_SG_SF_T1_32223752
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIS6_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISG_EEEZL22CATCH2_INTERNAL_TEST_2vEUlRKT_E0_ET0_SK_SK_SO_T1_10
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIS6_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISG_EEEZL22CATCH2_INTERNAL_TEST_2vEUlRKT_E1_ET0_SK_SK_SO_T1_10
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIS6_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISG_EEEZL22CATCH2_INTERNAL_TEST_2vEUlRKT_E2_ET0_SK_SK_SO_T1_10
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIS6_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISG_EEEZL22CATCH2_INTERNAL_TEST_2vEUlRKT_E3_ET0_SK_SK_SO_T1_10
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIS6_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISG_EEEZL22CATCH2_INTERNAL_TEST_2vEUlRKT_E4_ET0_SK_SK_SO_T1_10
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIS6_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISG_EEEZL22CATCH2_INTERNAL_TEST_2vEUlRKT_E_ET0_SK_SK_SO_T1_10
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESt6vectorIS9_SaIS9_EEEESt20back_insert_iteratorISB_IS8_SaIS8_EEEZN11RawDatasets11loadDatasetERKS8_bEUlRKT_E_ET0_SM_SM_SQ_T1_212
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIS6_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISG_EEEZNS3_5graphERKSG_EUlRKT_E_ET0_SM_SM_SQ_T1_306
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEESt20back_insert_iteratorIS9_IiSaIiEEEZN8bayesnet8Proposal27localDiscretizationProposalERKSt3mapIS7_SF_St4lessIS7_ESaISt4pairIKS7_SF_EEERNSH_7NetworkEEUlRKT_E0_ET0_SV_SV_SZ_T1_662
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIS6_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISG_EEEZNS2_8Proposal27localDiscretizationProposalERKSt3mapISG_S6_IiSaIiEESt4lessISG_ESaISt4pairIKSG_SN_EEERNS2_7NetworkEEUlRKT_E_ET0_SZ_SZ_S13_T1_662
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES6_ZN8bayesnet8Ensemble21predict_average_probaERS3_IS3_IiSaIiEESaISA_EEEUldE_ET0_T_SG_SF_T1_3340
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIS6_IlSaIlEEEZNS3_10computeCPTERKN2at6TensorERKS6_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISN_EEdSH_EUlRKT_E_ET0_SS_SS_SW_T1_14194
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES6_ZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessISF_ESaISt4pairIKSF_iEEEEUlRKdE_ET0_T_SS_SR_T1_401880
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIN3c104ListINSB_8optionalIN2at6TensorEEEEEEZNS3_14getFactorValueERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessISP_ESaISt4pairIKSP_iEEEEUlRKT_E_ET0_SY_SY_S12_T1_31802436
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_algo.h.func.html b/html/usr/include/c++/13/bits/stl_algo.h.func.html new file mode 100644 index 0000000..6add24f --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_algo.h.func.html @@ -0,0 +1,1244 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_algo.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_algo.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:52.1 %403210
Test Date:2024-04-30 13:17:26Functions:62.2 %14892
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt3_V26rotateIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS3_IiiEESt6vectorIS5_SaIS5_EEEEEET_SB_SB_SB_0
_ZNSt3_V28__rotateIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS3_IiiEESt6vectorIS5_SaIS5_EEEEEET_SB_SB_SB_St26random_access_iterator_tag0
_ZSt11find_if_notIPKN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEZNSG_C4ESt16initializer_listISH_EbNS2_7value_tEEUlRSI_E_ET_SP_SP_T0_164
_ZSt11max_elementIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEET_S7_S7_8910
_ZSt11max_elementIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEET_S7_S7_6726
_ZSt11max_elementIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEET_S7_S7_2184
_ZSt11stable_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEEZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EvSC_SC_SF_58
_ZSt12__move_mergeIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_NS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEESH_SE_SE_SE_SE_SH_T1_192
_ZSt12__move_mergeIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_NS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEESH_SE_SE_SE_SE_SH_T1_120
_ZSt12__move_mergeIPSt4pairIfS0_IiiEEN9__gnu_cxx17__normal_iteratorIS3_St6vectorIS2_SaIS2_EEEENS4_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEESH_SE_SE_SE_SE_SH_T1_72
_ZSt13__find_if_notIPKN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEN9__gnu_cxx5__ops10_Iter_predIZNSG_C4ESt16initializer_listISH_EbNS2_7value_tEEUlRSI_E_EEET_ST_ST_T0_164
_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_S9_T0_0
_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_SH_SK_0
_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_S9_T0_0
_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_SC_T0_0
_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_SC_T0_0
_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_SH_T0_0
_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_SH_T0_0
_ZSt13__heap_selectIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_SF_T0_0
_ZSt13__max_elementIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_less_iterEET_S9_S9_T0_8910
_ZSt13__max_elementIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_less_iterEET_S9_S9_T0_6726
_ZSt13__max_elementIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_less_iterEET_S9_S9_T0_2184
_ZSt13__stable_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_58
_ZSt13__upper_boundIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES4_NS0_5__ops14_Val_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEESE_SE_SE_SJ_T1_0
_ZSt13binary_searchIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEcEbT_S8_RKT0_0
_ZSt14__partial_sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_S9_T0_0
_ZSt14__partial_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_SH_SK_0
_ZSt14__partial_sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_S9_T0_0
_ZSt14__partial_sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_SC_T0_0
_ZSt14__partial_sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_SC_T0_0
_ZSt14__partial_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_SH_T0_0
_ZSt14__partial_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_SH_T0_0
_ZSt14__partial_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_SF_T0_0
_ZSt15__adjacent_findIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops19_Iter_equal_to_iterEET_S9_S9_T0_0
_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_T0_780
_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_236
_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_SK_26
_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_T0_0
_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_T0_38
_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_T0_192
_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_T0_192
_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_T0_38
_ZSt16__insertion_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_T0_58
_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEElNS0_5__ops15_Iter_less_iterEEvT_S9_T0_T1_1188
_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEElNS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_SK_T1_26
_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEElNS0_5__ops15_Iter_less_iterEEvT_S9_T0_T1_0
_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEElNS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_T0_T1_38
_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEElNS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_T0_T1_514
_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEElNS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_T0_T1_514
_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEElNS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_T0_T1_38
_ZSt16__introsort_loopIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEElNS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_T0_T1_58
_ZSt16__merge_adaptiveIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEElS5_NS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SE_SH_SH_T1_T2_58
_ZSt17__merge_sort_loopIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_lNS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_T1_T2_144
_ZSt17__merge_sort_loopIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_lNS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_T1_T2_72
_ZSt17__merge_sort_loopIPSt4pairIfS0_IiiEEN9__gnu_cxx17__normal_iteratorIS3_St6vectorIS2_SaIS2_EEEElNS4_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_T1_T2_72
_ZSt17__rotate_adaptiveIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_lET_SA_SA_SA_T1_SB_T0_SB_0
_ZSt21__inplace_stable_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_0
_ZSt21__move_merge_adaptiveIPSt4pairIfS0_IiiEEN9__gnu_cxx17__normal_iteratorIS3_St6vectorIS2_SaIS2_EEEES9_NS4_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_SH_T1_T2_46
_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEET_S9_S9_S9_T0_644
_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEESH_SH_SH_SH_SK_0
_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEET_S9_S9_S9_T0_0
_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEET_SC_SC_SC_T0_0
_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEET_SC_SC_SC_T0_322
_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEET_SH_SH_SH_T0_322
_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEET_SH_SH_SH_T0_0
_ZSt21__unguarded_partitionIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEET_SF_SF_SF_T0_0
_ZSt22__chunk_insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEElNS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_T1_116
_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_T0_544
_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_SK_26
_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_T0_0
_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_T0_38
_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_T0_192
_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_T0_192
_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_T0_38
_ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_T0_58
_ZSt22__gen_two_uniform_intsImRSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEESt4pairIT_S4_ES4_S4_OT0_39996
_ZSt22__merge_without_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEElNS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SE_SH_SH_T1_0
_ZSt22__move_median_to_firstIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_S9_S9_T0_644
_ZSt22__move_median_to_firstIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_SH_SH_SK_0
_ZSt22__move_median_to_firstIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_S9_S9_T0_0
_ZSt22__move_median_to_firstIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_SC_SC_T0_0
_ZSt22__move_median_to_firstIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_SC_SC_T0_322
_ZSt22__move_median_to_firstIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_SH_SH_T0_322
_ZSt22__move_median_to_firstIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_SH_SH_T0_0
_ZSt22__move_median_to_firstIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_SF_SF_T0_0
_ZSt22__stable_sort_adaptiveIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_NS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SE_SH_T1_58
_ZSt23__merge_adaptive_resizeIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEElS5_NS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SE_SH_SH_T1_SH_T2_0
_ZSt24__merge_sort_with_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_NS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_T1_116
_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops14_Val_less_iterEEvT_T0_9732
_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEENS0_5__ops14_Val_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SH_700
_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops14_Val_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SK_88
_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops14_Val_less_iterEEvT_T0_0
_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops14_Val_comp_iterISt4lessIdEEEEvT_T0_218
_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops14_Val_comp_iterISt7greaterIdEEEEvT_T0_4120
_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops14_Val_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_T0_4120
_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops14_Val_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_T0_218
_ZSt25__unguarded_linear_insertIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops14_Val_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_T0_268
_ZSt26__unguarded_insertion_sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_T0_28
_ZSt26__unguarded_insertion_sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_SK_0
_ZSt26__unguarded_insertion_sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_T0_0
_ZSt26__unguarded_insertion_sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_T0_0
_ZSt26__unguarded_insertion_sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_T0_14
_ZSt26__unguarded_insertion_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_T0_14
_ZSt26__unguarded_insertion_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_T0_0
_ZSt26__unguarded_insertion_sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_T0_0
_ZSt27__unguarded_partition_pivotIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEET_S9_S9_T0_644
_ZSt27__unguarded_partition_pivotIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEESH_SH_SH_SK_0
_ZSt27__unguarded_partition_pivotIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEET_S9_S9_T0_0
_ZSt27__unguarded_partition_pivotIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEET_SC_SC_T0_0
_ZSt27__unguarded_partition_pivotIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEET_SC_SC_T0_322
_ZSt27__unguarded_partition_pivotIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEET_SH_SH_T0_322
_ZSt27__unguarded_partition_pivotIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEET_SH_SH_T0_0
_ZSt27__unguarded_partition_pivotIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEET_SF_SF_T0_0
_ZSt29__stable_sort_adaptive_resizeIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_lNS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_T1_T2_0
_ZSt30__move_merge_adaptive_backwardIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_S9_NS0_5__ops15_Iter_comp_iterIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEEvSE_SE_SH_SH_T1_T2_12
_ZSt4findIPKccET_S2_S2_RKT0_9579236
_ZSt4findIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEES7_ET_SE_SE_RKT0_9538614
_ZSt4findIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS9_S7_blmdSaNSE_14adl_serializerES9_IhSaIhEEvEEET_SL_SL_RKT0_18
_ZSt4findIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEES7_ET_SD_SD_RKT0_35106
_ZSt4findIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_5180
_ZSt4findIPKccET_S2_S2_RKT0_0
_ZSt4findISt14_List_iteratorIiEiET_S2_S2_RKT0_318
_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEEvT_S7_0
_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEESt4lessIdEEvT_S9_T0_544
_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEEZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EvSF_SF_SI_26
_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEESt4lessIdEEvT_S9_T0_38
_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEESt7greaterIdEEvT_S9_T0_192
_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EvT_SE_T0_192
_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EvT_SE_T0_38
_ZSt4sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EvT_SC_T0_58
_ZSt6__sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_T0_544
_ZSt6__sortIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_SK_26
_ZSt6__sortIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_T0_0
_ZSt6__sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_T0_38
_ZSt6__sortIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_T0_192
_ZSt6__sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_T0_192
_ZSt6__sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_T0_38
_ZSt6__sortIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_T0_58
_ZSt6all_ofIPKN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEZNSG_C4ESt16initializer_listISH_EbNS2_7value_tEEUlRSI_E_EbT_SP_T0_164
_ZSt6removeIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_962
_ZSt6removeIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEES7_ET_SD_SD_RKT0_894
_ZSt6removeIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEES4_ET_SA_SA_RKT0_12
_ZSt6removeIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiET_S7_S7_RKT0_56
_ZSt6uniqueIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEEET_S7_S7_0
_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS3_SaIS3_EEEEZNS2_15remove_callbackEPKcEUlRKS3_E_ET_SE_SE_T0_0
_ZSt7reverseIN9__gnu_cxx17__normal_iteratorIPPKN6loguru11EcEntryBaseESt6vectorIS5_SaIS5_EEEEEvT_SB_0
_ZSt7shuffleIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEERSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEEvT_SA_OT0_1040
_ZSt8__uniqueIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops19_Iter_equal_to_iterEET_S9_S9_T0_0
_ZSt8for_eachIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEEZN8bayesnet7Network9setStatesERKSt3mapIS7_S9_IiSaIiEESt4lessIS7_ESaISt4pairIKS7_SH_EEEEUlRSL_E_ET0_T_SU_ST_684
_ZSt9__reverseIN9__gnu_cxx17__normal_iteratorIPPKN6loguru11EcEntryBaseESt6vectorIS5_SaIS5_EEEEEvT_SB_St26random_access_iterator_tag0
_ZSt9remove_ifIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEEUlT_E_ESD_SD_SD_T0_214
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES6_S6_ZZN8bayesnet8Ensemble21predict_average_probaERS3_IS3_IiSaIiEESaISA_EEENKUlvE_clEvEUlddE_ET1_T_SH_T0_SG_T2_24060
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES6_ZN8bayesnet8Ensemble21predict_average_probaERS3_IS3_IiSaIiEESaISA_EEEUldE_ET0_T_SG_SF_T1_32223752
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEESt20back_insert_iteratorIS9_IiSaIiEEEZN8bayesnet8Proposal27localDiscretizationProposalERKSt3mapIS7_SF_St4lessIS7_ESaISt4pairIKS7_SF_EEERNSH_7NetworkEEUlRKT_E0_ET0_SV_SV_SZ_T1_662
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIN3c104ListINSB_8optionalIN2at6TensorEEEEEEZNS3_14getFactorValueERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessISP_ESaISt4pairIKSP_iEEEEUlRKT_E_ET0_SY_SY_S12_T1_31802436
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIS6_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISG_EEEZL22CATCH2_INTERNAL_TEST_2vEUlRKT_E0_ET0_SK_SK_SO_T1_10
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIS6_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISG_EEEZL22CATCH2_INTERNAL_TEST_2vEUlRKT_E1_ET0_SK_SK_SO_T1_10
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIS6_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISG_EEEZL22CATCH2_INTERNAL_TEST_2vEUlRKT_E2_ET0_SK_SK_SO_T1_10
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIS6_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISG_EEEZL22CATCH2_INTERNAL_TEST_2vEUlRKT_E3_ET0_SK_SK_SO_T1_10
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIS6_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISG_EEEZL22CATCH2_INTERNAL_TEST_2vEUlRKT_E4_ET0_SK_SK_SO_T1_10
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIS6_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISG_EEEZL22CATCH2_INTERNAL_TEST_2vEUlRKT_E_ET0_SK_SK_SO_T1_10
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIS6_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISG_EEEZNS2_8Proposal27localDiscretizationProposalERKSt3mapISG_S6_IiSaIiEESt4lessISG_ESaISt4pairIKSG_SN_EEERNS2_7NetworkEEUlRKT_E_ET0_SZ_SZ_S13_T1_662
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIS6_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISG_EEEZNS3_5graphERKSG_EUlRKT_E_ET0_SM_SM_SQ_T1_306
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEESt20back_insert_iteratorIS6_IlSaIlEEEZNS3_10computeCPTERKN2at6TensorERKS6_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISN_EEdSH_EUlRKT_E_ET0_SS_SS_SW_T1_14194
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESt6vectorIS9_SaIS9_EEEESt20back_insert_iteratorISB_IS8_SaIS8_EEEZN11RawDatasets11loadDatasetERKS8_bEUlRKT_E_ET0_SM_SM_SQ_T1_212
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES6_ZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessISF_ESaISt4pairIKSF_iEEEEUlRKdE_ET0_T_SS_SR_T1_401880
_ZSt9transformIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES6_ZN8bayesnet8Ensemble21predict_average_probaERS3_IS3_IiSaIiEESaISA_EEEUldE_ET0_T_SG_SF_T1_3340
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_algo.h.gcov.html b/html/usr/include/c++/13/bits/stl_algo.h.gcov.html new file mode 100644 index 0000000..2a3dcbc --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_algo.h.gcov.html @@ -0,0 +1,6021 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_algo.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_algo.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:52.1 %403210
Test Date:2024-04-30 13:17:26Functions:62.2 %14892
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Algorithm implementation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1996
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/stl_algo.h
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{algorithm}
+      54              :  */
+      55              : 
+      56              : #ifndef _STL_ALGO_H
+      57              : #define _STL_ALGO_H 1
+      58              : 
+      59              : #include <bits/algorithmfwd.h>
+      60              : #include <bits/stl_algobase.h>
+      61              : #include <bits/stl_heap.h>
+      62              : #include <bits/predefined_ops.h>
+      63              : 
+      64              : #if __cplusplus >= 201103L
+      65              : #include <bits/uniform_int_dist.h>
+      66              : #endif
+      67              : 
+      68              : #if _GLIBCXX_HOSTED
+      69              : # include <bits/stl_tempbuf.h>  // for _Temporary_buffer
+      70              : # if (__cplusplus <= 201103L || _GLIBCXX_USE_DEPRECATED)
+      71              : #  include <cstdlib>           // for rand
+      72              : # endif
+      73              : #endif
+      74              : 
+      75              : // See concept_check.h for the __glibcxx_*_requires macros.
+      76              : 
+      77              : namespace std _GLIBCXX_VISIBILITY(default)
+      78              : {
+      79              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      80              : 
+      81              :   /// Swaps the median value of *__a, *__b and *__c under __comp to *__result
+      82              :   template<typename _Iterator, typename _Compare>
+      83              :     _GLIBCXX20_CONSTEXPR
+      84              :     void
+      85          644 :     __move_median_to_first(_Iterator __result,_Iterator __a, _Iterator __b,
+      86              :                            _Iterator __c, _Compare __comp)
+      87              :     {
+      88          644 :       if (__comp(__a, __b))
+      89              :         {
+      90          404 :           if (__comp(__b, __c))
+      91          200 :             std::iter_swap(__result, __b);
+      92          204 :           else if (__comp(__a, __c))
+      93          160 :             std::iter_swap(__result, __c);
+      94              :           else
+      95           44 :             std::iter_swap(__result, __a);
+      96              :         }
+      97          240 :       else if (__comp(__a, __c))
+      98          112 :         std::iter_swap(__result, __a);
+      99          128 :       else if (__comp(__b, __c))
+     100           56 :         std::iter_swap(__result, __c);
+     101              :       else
+     102           72 :         std::iter_swap(__result, __b);
+     103          644 :     }
+     104              : 
+     105              :   /// Provided for stable_partition to use.
+     106              :   template<typename _InputIterator, typename _Predicate>
+     107              :     _GLIBCXX20_CONSTEXPR
+     108              :     inline _InputIterator
+     109          164 :     __find_if_not(_InputIterator __first, _InputIterator __last,
+     110              :                   _Predicate __pred)
+     111              :     {
+     112          164 :       return std::__find_if(__first, __last,
+     113              :                             __gnu_cxx::__ops::__negate(__pred),
+     114          328 :                             std::__iterator_category(__first));
+     115              :     }
+     116              : 
+     117              :   /// Like find_if_not(), but uses and updates a count of the
+     118              :   /// remaining range length instead of comparing against an end
+     119              :   /// iterator.
+     120              :   template<typename _InputIterator, typename _Predicate, typename _Distance>
+     121              :     _GLIBCXX20_CONSTEXPR
+     122              :     _InputIterator
+     123              :     __find_if_not_n(_InputIterator __first, _Distance& __len, _Predicate __pred)
+     124              :     {
+     125              :       for (; __len; --__len,  (void) ++__first)
+     126              :         if (!__pred(__first))
+     127              :           break;
+     128              :       return __first;
+     129              :     }
+     130              : 
+     131              :   // set_difference
+     132              :   // set_intersection
+     133              :   // set_symmetric_difference
+     134              :   // set_union
+     135              :   // for_each
+     136              :   // find
+     137              :   // find_if
+     138              :   // find_first_of
+     139              :   // adjacent_find
+     140              :   // count
+     141              :   // count_if
+     142              :   // search
+     143              : 
+     144              :   template<typename _ForwardIterator1, typename _ForwardIterator2,
+     145              :            typename _BinaryPredicate>
+     146              :     _GLIBCXX20_CONSTEXPR
+     147              :     _ForwardIterator1
+     148              :     __search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+     149              :              _ForwardIterator2 __first2, _ForwardIterator2 __last2,
+     150              :              _BinaryPredicate  __predicate)
+     151              :     {
+     152              :       // Test for empty ranges
+     153              :       if (__first1 == __last1 || __first2 == __last2)
+     154              :         return __first1;
+     155              : 
+     156              :       // Test for a pattern of length 1.
+     157              :       _ForwardIterator2 __p1(__first2);
+     158              :       if (++__p1 == __last2)
+     159              :         return std::__find_if(__first1, __last1,
+     160              :                 __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2));
+     161              : 
+     162              :       // General case.
+     163              :       _ForwardIterator1 __current = __first1;
+     164              : 
+     165              :       for (;;)
+     166              :         {
+     167              :           __first1 =
+     168              :             std::__find_if(__first1, __last1,
+     169              :                 __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2));
+     170              : 
+     171              :           if (__first1 == __last1)
+     172              :             return __last1;
+     173              : 
+     174              :           _ForwardIterator2 __p = __p1;
+     175              :           __current = __first1;
+     176              :           if (++__current == __last1)
+     177              :             return __last1;
+     178              : 
+     179              :           while (__predicate(__current, __p))
+     180              :             {
+     181              :               if (++__p == __last2)
+     182              :                 return __first1;
+     183              :               if (++__current == __last1)
+     184              :                 return __last1;
+     185              :             }
+     186              :           ++__first1;
+     187              :         }
+     188              :       return __first1;
+     189              :     }
+     190              : 
+     191              :   // search_n
+     192              : 
+     193              :   /**
+     194              :    *  This is an helper function for search_n overloaded for forward iterators.
+     195              :   */
+     196              :   template<typename _ForwardIterator, typename _Integer,
+     197              :            typename _UnaryPredicate>
+     198              :     _GLIBCXX20_CONSTEXPR
+     199              :     _ForwardIterator
+     200              :     __search_n_aux(_ForwardIterator __first, _ForwardIterator __last,
+     201              :                    _Integer __count, _UnaryPredicate __unary_pred,
+     202              :                    std::forward_iterator_tag)
+     203              :     {
+     204              :       __first = std::__find_if(__first, __last, __unary_pred);
+     205              :       while (__first != __last)
+     206              :         {
+     207              :           typename iterator_traits<_ForwardIterator>::difference_type
+     208              :             __n = __count;
+     209              :           _ForwardIterator __i = __first;
+     210              :           ++__i;
+     211              :           while (__i != __last && __n != 1 && __unary_pred(__i))
+     212              :             {
+     213              :               ++__i;
+     214              :               --__n;
+     215              :             }
+     216              :           if (__n == 1)
+     217              :             return __first;
+     218              :           if (__i == __last)
+     219              :             return __last;
+     220              :           __first = std::__find_if(++__i, __last, __unary_pred);
+     221              :         }
+     222              :       return __last;
+     223              :     }
+     224              : 
+     225              :   /**
+     226              :    *  This is an helper function for search_n overloaded for random access
+     227              :    *  iterators.
+     228              :   */
+     229              :   template<typename _RandomAccessIter, typename _Integer,
+     230              :            typename _UnaryPredicate>
+     231              :     _GLIBCXX20_CONSTEXPR
+     232              :     _RandomAccessIter
+     233              :     __search_n_aux(_RandomAccessIter __first, _RandomAccessIter __last,
+     234              :                    _Integer __count, _UnaryPredicate __unary_pred,
+     235              :                    std::random_access_iterator_tag)
+     236              :     {
+     237              :       typedef typename std::iterator_traits<_RandomAccessIter>::difference_type
+     238              :         _DistanceType;
+     239              : 
+     240              :       _DistanceType __tailSize = __last - __first;
+     241              :       _DistanceType __remainder = __count;
+     242              : 
+     243              :       while (__remainder <= __tailSize) // the main loop...
+     244              :         {
+     245              :           __first += __remainder;
+     246              :           __tailSize -= __remainder;
+     247              :           // __first here is always pointing to one past the last element of
+     248              :           // next possible match.
+     249              :           _RandomAccessIter __backTrack = __first; 
+     250              :           while (__unary_pred(--__backTrack))
+     251              :             {
+     252              :               if (--__remainder == 0)
+     253              :                 return (__first - __count); // Success
+     254              :             }
+     255              :           __remainder = __count + 1 - (__first - __backTrack);
+     256              :         }
+     257              :       return __last; // Failure
+     258              :     }
+     259              : 
+     260              :   template<typename _ForwardIterator, typename _Integer,
+     261              :            typename _UnaryPredicate>
+     262              :     _GLIBCXX20_CONSTEXPR
+     263              :     _ForwardIterator
+     264              :     __search_n(_ForwardIterator __first, _ForwardIterator __last,
+     265              :                _Integer __count,
+     266              :                _UnaryPredicate __unary_pred)
+     267              :     {
+     268              :       if (__count <= 0)
+     269              :         return __first;
+     270              : 
+     271              :       if (__count == 1)
+     272              :         return std::__find_if(__first, __last, __unary_pred);
+     273              : 
+     274              :       return std::__search_n_aux(__first, __last, __count, __unary_pred,
+     275              :                                  std::__iterator_category(__first));
+     276              :     }
+     277              : 
+     278              :   // find_end for forward iterators.
+     279              :   template<typename _ForwardIterator1, typename _ForwardIterator2,
+     280              :            typename _BinaryPredicate>
+     281              :     _GLIBCXX20_CONSTEXPR
+     282              :     _ForwardIterator1
+     283              :     __find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+     284              :                _ForwardIterator2 __first2, _ForwardIterator2 __last2,
+     285              :                forward_iterator_tag, forward_iterator_tag,
+     286              :                _BinaryPredicate __comp)
+     287              :     {
+     288              :       if (__first2 == __last2)
+     289              :         return __last1;
+     290              : 
+     291              :       _ForwardIterator1 __result = __last1;
+     292              :       while (1)
+     293              :         {
+     294              :           _ForwardIterator1 __new_result
+     295              :             = std::__search(__first1, __last1, __first2, __last2, __comp);
+     296              :           if (__new_result == __last1)
+     297              :             return __result;
+     298              :           else
+     299              :             {
+     300              :               __result = __new_result;
+     301              :               __first1 = __new_result;
+     302              :               ++__first1;
+     303              :             }
+     304              :         }
+     305              :     }
+     306              : 
+     307              :   // find_end for bidirectional iterators (much faster).
+     308              :   template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
+     309              :            typename _BinaryPredicate>
+     310              :     _GLIBCXX20_CONSTEXPR
+     311              :     _BidirectionalIterator1
+     312              :     __find_end(_BidirectionalIterator1 __first1,
+     313              :                _BidirectionalIterator1 __last1,
+     314              :                _BidirectionalIterator2 __first2,
+     315              :                _BidirectionalIterator2 __last2,
+     316              :                bidirectional_iterator_tag, bidirectional_iterator_tag,
+     317              :                _BinaryPredicate __comp)
+     318              :     {
+     319              :       // concept requirements
+     320              :       __glibcxx_function_requires(_BidirectionalIteratorConcept<
+     321              :                                   _BidirectionalIterator1>)
+     322              :       __glibcxx_function_requires(_BidirectionalIteratorConcept<
+     323              :                                   _BidirectionalIterator2>)
+     324              : 
+     325              :       typedef reverse_iterator<_BidirectionalIterator1> _RevIterator1;
+     326              :       typedef reverse_iterator<_BidirectionalIterator2> _RevIterator2;
+     327              : 
+     328              :       _RevIterator1 __rlast1(__first1);
+     329              :       _RevIterator2 __rlast2(__first2);
+     330              :       _RevIterator1 __rresult = std::__search(_RevIterator1(__last1), __rlast1,
+     331              :                                               _RevIterator2(__last2), __rlast2,
+     332              :                                               __comp);
+     333              : 
+     334              :       if (__rresult == __rlast1)
+     335              :         return __last1;
+     336              :       else
+     337              :         {
+     338              :           _BidirectionalIterator1 __result = __rresult.base();
+     339              :           std::advance(__result, -std::distance(__first2, __last2));
+     340              :           return __result;
+     341              :         }
+     342              :     }
+     343              : 
+     344              :   /**
+     345              :    *  @brief  Find last matching subsequence in a sequence.
+     346              :    *  @ingroup non_mutating_algorithms
+     347              :    *  @param  __first1  Start of range to search.
+     348              :    *  @param  __last1   End of range to search.
+     349              :    *  @param  __first2  Start of sequence to match.
+     350              :    *  @param  __last2   End of sequence to match.
+     351              :    *  @return   The last iterator @c i in the range
+     352              :    *  @p [__first1,__last1-(__last2-__first2)) such that @c *(i+N) ==
+     353              :    *  @p *(__first2+N) for each @c N in the range @p
+     354              :    *  [0,__last2-__first2), or @p __last1 if no such iterator exists.
+     355              :    *
+     356              :    *  Searches the range @p [__first1,__last1) for a sub-sequence that
+     357              :    *  compares equal value-by-value with the sequence given by @p
+     358              :    *  [__first2,__last2) and returns an iterator to the __first
+     359              :    *  element of the sub-sequence, or @p __last1 if the sub-sequence
+     360              :    *  is not found.  The sub-sequence will be the last such
+     361              :    *  subsequence contained in [__first1,__last1).
+     362              :    *
+     363              :    *  Because the sub-sequence must lie completely within the range @p
+     364              :    *  [__first1,__last1) it must start at a position less than @p
+     365              :    *  __last1-(__last2-__first2) where @p __last2-__first2 is the
+     366              :    *  length of the sub-sequence.  This means that the returned
+     367              :    *  iterator @c i will be in the range @p
+     368              :    *  [__first1,__last1-(__last2-__first2))
+     369              :   */
+     370              :   template<typename _ForwardIterator1, typename _ForwardIterator2>
+     371              :     _GLIBCXX20_CONSTEXPR
+     372              :     inline _ForwardIterator1
+     373              :     find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+     374              :              _ForwardIterator2 __first2, _ForwardIterator2 __last2)
+     375              :     {
+     376              :       // concept requirements
+     377              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator1>)
+     378              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator2>)
+     379              :       __glibcxx_function_requires(_EqualOpConcept<
+     380              :             typename iterator_traits<_ForwardIterator1>::value_type,
+     381              :             typename iterator_traits<_ForwardIterator2>::value_type>)
+     382              :       __glibcxx_requires_valid_range(__first1, __last1);
+     383              :       __glibcxx_requires_valid_range(__first2, __last2);
+     384              : 
+     385              :       return std::__find_end(__first1, __last1, __first2, __last2,
+     386              :                              std::__iterator_category(__first1),
+     387              :                              std::__iterator_category(__first2),
+     388              :                              __gnu_cxx::__ops::__iter_equal_to_iter());
+     389              :     }
+     390              : 
+     391              :   /**
+     392              :    *  @brief  Find last matching subsequence in a sequence using a predicate.
+     393              :    *  @ingroup non_mutating_algorithms
+     394              :    *  @param  __first1  Start of range to search.
+     395              :    *  @param  __last1   End of range to search.
+     396              :    *  @param  __first2  Start of sequence to match.
+     397              :    *  @param  __last2   End of sequence to match.
+     398              :    *  @param  __comp    The predicate to use.
+     399              :    *  @return The last iterator @c i in the range @p
+     400              :    *  [__first1,__last1-(__last2-__first2)) such that @c
+     401              :    *  predicate(*(i+N), @p (__first2+N)) is true for each @c N in the
+     402              :    *  range @p [0,__last2-__first2), or @p __last1 if no such iterator
+     403              :    *  exists.
+     404              :    *
+     405              :    *  Searches the range @p [__first1,__last1) for a sub-sequence that
+     406              :    *  compares equal value-by-value with the sequence given by @p
+     407              :    *  [__first2,__last2) using comp as a predicate and returns an
+     408              :    *  iterator to the first element of the sub-sequence, or @p __last1
+     409              :    *  if the sub-sequence is not found.  The sub-sequence will be the
+     410              :    *  last such subsequence contained in [__first,__last1).
+     411              :    *
+     412              :    *  Because the sub-sequence must lie completely within the range @p
+     413              :    *  [__first1,__last1) it must start at a position less than @p
+     414              :    *  __last1-(__last2-__first2) where @p __last2-__first2 is the
+     415              :    *  length of the sub-sequence.  This means that the returned
+     416              :    *  iterator @c i will be in the range @p
+     417              :    *  [__first1,__last1-(__last2-__first2))
+     418              :   */
+     419              :   template<typename _ForwardIterator1, typename _ForwardIterator2,
+     420              :            typename _BinaryPredicate>
+     421              :     _GLIBCXX20_CONSTEXPR
+     422              :     inline _ForwardIterator1
+     423              :     find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+     424              :              _ForwardIterator2 __first2, _ForwardIterator2 __last2,
+     425              :              _BinaryPredicate __comp)
+     426              :     {
+     427              :       // concept requirements
+     428              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator1>)
+     429              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator2>)
+     430              :       __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
+     431              :             typename iterator_traits<_ForwardIterator1>::value_type,
+     432              :             typename iterator_traits<_ForwardIterator2>::value_type>)
+     433              :       __glibcxx_requires_valid_range(__first1, __last1);
+     434              :       __glibcxx_requires_valid_range(__first2, __last2);
+     435              : 
+     436              :       return std::__find_end(__first1, __last1, __first2, __last2,
+     437              :                              std::__iterator_category(__first1),
+     438              :                              std::__iterator_category(__first2),
+     439              :                              __gnu_cxx::__ops::__iter_comp_iter(__comp));
+     440              :     }
+     441              : 
+     442              : #if __cplusplus >= 201103L
+     443              :   /**
+     444              :    *  @brief  Checks that a predicate is true for all the elements
+     445              :    *          of a sequence.
+     446              :    *  @ingroup non_mutating_algorithms
+     447              :    *  @param  __first   An input iterator.
+     448              :    *  @param  __last    An input iterator.
+     449              :    *  @param  __pred    A predicate.
+     450              :    *  @return  True if the check is true, false otherwise.
+     451              :    *
+     452              :    *  Returns true if @p __pred is true for each element in the range
+     453              :    *  @p [__first,__last), and false otherwise.
+     454              :   */
+     455              :   template<typename _InputIterator, typename _Predicate>
+     456              :     _GLIBCXX20_CONSTEXPR
+     457              :     inline bool
+     458          164 :     all_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
+     459          164 :     { return __last == std::find_if_not(__first, __last, __pred); }
+     460              : 
+     461              :   /**
+     462              :    *  @brief  Checks that a predicate is false for all the elements
+     463              :    *          of a sequence.
+     464              :    *  @ingroup non_mutating_algorithms
+     465              :    *  @param  __first   An input iterator.
+     466              :    *  @param  __last    An input iterator.
+     467              :    *  @param  __pred    A predicate.
+     468              :    *  @return  True if the check is true, false otherwise.
+     469              :    *
+     470              :    *  Returns true if @p __pred is false for each element in the range
+     471              :    *  @p [__first,__last), and false otherwise.
+     472              :   */
+     473              :   template<typename _InputIterator, typename _Predicate>
+     474              :     _GLIBCXX20_CONSTEXPR
+     475              :     inline bool
+     476              :     none_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
+     477              :     { return __last == _GLIBCXX_STD_A::find_if(__first, __last, __pred); }
+     478              : 
+     479              :   /**
+     480              :    *  @brief  Checks that a predicate is true for at least one element
+     481              :    *          of a sequence.
+     482              :    *  @ingroup non_mutating_algorithms
+     483              :    *  @param  __first   An input iterator.
+     484              :    *  @param  __last    An input iterator.
+     485              :    *  @param  __pred    A predicate.
+     486              :    *  @return  True if the check is true, false otherwise.
+     487              :    *
+     488              :    *  Returns true if an element exists in the range @p
+     489              :    *  [__first,__last) such that @p __pred is true, and false
+     490              :    *  otherwise.
+     491              :   */
+     492              :   template<typename _InputIterator, typename _Predicate>
+     493              :     _GLIBCXX20_CONSTEXPR
+     494              :     inline bool
+     495              :     any_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
+     496              :     { return !std::none_of(__first, __last, __pred); }
+     497              : 
+     498              :   /**
+     499              :    *  @brief  Find the first element in a sequence for which a
+     500              :    *          predicate is false.
+     501              :    *  @ingroup non_mutating_algorithms
+     502              :    *  @param  __first  An input iterator.
+     503              :    *  @param  __last   An input iterator.
+     504              :    *  @param  __pred   A predicate.
+     505              :    *  @return   The first iterator @c i in the range @p [__first,__last)
+     506              :    *  such that @p __pred(*i) is false, or @p __last if no such iterator exists.
+     507              :   */
+     508              :   template<typename _InputIterator, typename _Predicate>
+     509              :     _GLIBCXX20_CONSTEXPR
+     510              :     inline _InputIterator
+     511          164 :     find_if_not(_InputIterator __first, _InputIterator __last,
+     512              :                 _Predicate __pred)
+     513              :     {
+     514              :       // concept requirements
+     515              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+     516              :       __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
+     517              :               typename iterator_traits<_InputIterator>::value_type>)
+     518              :       __glibcxx_requires_valid_range(__first, __last);
+     519          164 :       return std::__find_if_not(__first, __last,
+     520          164 :                                 __gnu_cxx::__ops::__pred_iter(__pred));
+     521              :     }
+     522              : 
+     523              :   /**
+     524              :    *  @brief  Checks whether the sequence is partitioned.
+     525              :    *  @ingroup mutating_algorithms
+     526              :    *  @param  __first  An input iterator.
+     527              :    *  @param  __last   An input iterator.
+     528              :    *  @param  __pred   A predicate.
+     529              :    *  @return  True if the range @p [__first,__last) is partioned by @p __pred,
+     530              :    *  i.e. if all elements that satisfy @p __pred appear before those that
+     531              :    *  do not.
+     532              :   */
+     533              :   template<typename _InputIterator, typename _Predicate>
+     534              :     _GLIBCXX20_CONSTEXPR
+     535              :     inline bool
+     536              :     is_partitioned(_InputIterator __first, _InputIterator __last,
+     537              :                    _Predicate __pred)
+     538              :     {
+     539              :       __first = std::find_if_not(__first, __last, __pred);
+     540              :       if (__first == __last)
+     541              :         return true;
+     542              :       ++__first;
+     543              :       return std::none_of(__first, __last, __pred);
+     544              :     }
+     545              : 
+     546              :   /**
+     547              :    *  @brief  Find the partition point of a partitioned range.
+     548              :    *  @ingroup mutating_algorithms
+     549              :    *  @param  __first   An iterator.
+     550              :    *  @param  __last    Another iterator.
+     551              :    *  @param  __pred    A predicate.
+     552              :    *  @return  An iterator @p mid such that @p all_of(__first, mid, __pred)
+     553              :    *           and @p none_of(mid, __last, __pred) are both true.
+     554              :   */
+     555              :   template<typename _ForwardIterator, typename _Predicate>
+     556              :     _GLIBCXX20_CONSTEXPR
+     557              :     _ForwardIterator
+     558              :     partition_point(_ForwardIterator __first, _ForwardIterator __last,
+     559              :                     _Predicate __pred)
+     560              :     {
+     561              :       // concept requirements
+     562              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+     563              :       __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
+     564              :               typename iterator_traits<_ForwardIterator>::value_type>)
+     565              : 
+     566              :       // A specific debug-mode test will be necessary...
+     567              :       __glibcxx_requires_valid_range(__first, __last);
+     568              : 
+     569              :       typedef typename iterator_traits<_ForwardIterator>::difference_type
+     570              :         _DistanceType;
+     571              : 
+     572              :       _DistanceType __len = std::distance(__first, __last);
+     573              : 
+     574              :       while (__len > 0)
+     575              :         {
+     576              :           _DistanceType __half = __len >> 1;
+     577              :           _ForwardIterator __middle = __first;
+     578              :           std::advance(__middle, __half);
+     579              :           if (__pred(*__middle))
+     580              :             {
+     581              :               __first = __middle;
+     582              :               ++__first;
+     583              :               __len = __len - __half - 1;
+     584              :             }
+     585              :           else
+     586              :             __len = __half;
+     587              :         }
+     588              :       return __first;
+     589              :     }
+     590              : #endif
+     591              : 
+     592              :   template<typename _InputIterator, typename _OutputIterator,
+     593              :            typename _Predicate>
+     594              :     _GLIBCXX20_CONSTEXPR
+     595              :     _OutputIterator
+     596              :     __remove_copy_if(_InputIterator __first, _InputIterator __last,
+     597              :                      _OutputIterator __result, _Predicate __pred)
+     598              :     {
+     599              :       for (; __first != __last; ++__first)
+     600              :         if (!__pred(__first))
+     601              :           {
+     602              :             *__result = *__first;
+     603              :             ++__result;
+     604              :           }
+     605              :       return __result;
+     606              :     }
+     607              : 
+     608              :   /**
+     609              :    *  @brief Copy a sequence, removing elements of a given value.
+     610              :    *  @ingroup mutating_algorithms
+     611              :    *  @param  __first   An input iterator.
+     612              :    *  @param  __last    An input iterator.
+     613              :    *  @param  __result  An output iterator.
+     614              :    *  @param  __value   The value to be removed.
+     615              :    *  @return   An iterator designating the end of the resulting sequence.
+     616              :    *
+     617              :    *  Copies each element in the range @p [__first,__last) not equal
+     618              :    *  to @p __value to the range beginning at @p __result.
+     619              :    *  remove_copy() is stable, so the relative order of elements that
+     620              :    *  are copied is unchanged.
+     621              :   */
+     622              :   template<typename _InputIterator, typename _OutputIterator, typename _Tp>
+     623              :     _GLIBCXX20_CONSTEXPR
+     624              :     inline _OutputIterator
+     625              :     remove_copy(_InputIterator __first, _InputIterator __last,
+     626              :                 _OutputIterator __result, const _Tp& __value)
+     627              :     {
+     628              :       // concept requirements
+     629              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+     630              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+     631              :             typename iterator_traits<_InputIterator>::value_type>)
+     632              :       __glibcxx_function_requires(_EqualOpConcept<
+     633              :             typename iterator_traits<_InputIterator>::value_type, _Tp>)
+     634              :       __glibcxx_requires_valid_range(__first, __last);
+     635              : 
+     636              :       return std::__remove_copy_if(__first, __last, __result,
+     637              :         __gnu_cxx::__ops::__iter_equals_val(__value));
+     638              :     }
+     639              : 
+     640              :   /**
+     641              :    *  @brief Copy a sequence, removing elements for which a predicate is true.
+     642              :    *  @ingroup mutating_algorithms
+     643              :    *  @param  __first   An input iterator.
+     644              :    *  @param  __last    An input iterator.
+     645              :    *  @param  __result  An output iterator.
+     646              :    *  @param  __pred    A predicate.
+     647              :    *  @return   An iterator designating the end of the resulting sequence.
+     648              :    *
+     649              :    *  Copies each element in the range @p [__first,__last) for which
+     650              :    *  @p __pred returns false to the range beginning at @p __result.
+     651              :    *
+     652              :    *  remove_copy_if() is stable, so the relative order of elements that are
+     653              :    *  copied is unchanged.
+     654              :   */
+     655              :   template<typename _InputIterator, typename _OutputIterator,
+     656              :            typename _Predicate>
+     657              :     _GLIBCXX20_CONSTEXPR
+     658              :     inline _OutputIterator
+     659              :     remove_copy_if(_InputIterator __first, _InputIterator __last,
+     660              :                    _OutputIterator __result, _Predicate __pred)
+     661              :     {
+     662              :       // concept requirements
+     663              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+     664              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+     665              :             typename iterator_traits<_InputIterator>::value_type>)
+     666              :       __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
+     667              :             typename iterator_traits<_InputIterator>::value_type>)
+     668              :       __glibcxx_requires_valid_range(__first, __last);
+     669              : 
+     670              :       return std::__remove_copy_if(__first, __last, __result,
+     671              :                                    __gnu_cxx::__ops::__pred_iter(__pred));
+     672              :     }
+     673              : 
+     674              : #if __cplusplus >= 201103L
+     675              :   /**
+     676              :    *  @brief Copy the elements of a sequence for which a predicate is true.
+     677              :    *  @ingroup mutating_algorithms
+     678              :    *  @param  __first   An input iterator.
+     679              :    *  @param  __last    An input iterator.
+     680              :    *  @param  __result  An output iterator.
+     681              :    *  @param  __pred    A predicate.
+     682              :    *  @return   An iterator designating the end of the resulting sequence.
+     683              :    *
+     684              :    *  Copies each element in the range @p [__first,__last) for which
+     685              :    *  @p __pred returns true to the range beginning at @p __result.
+     686              :    *
+     687              :    *  copy_if() is stable, so the relative order of elements that are
+     688              :    *  copied is unchanged.
+     689              :   */
+     690              :   template<typename _InputIterator, typename _OutputIterator,
+     691              :            typename _Predicate>
+     692              :     _GLIBCXX20_CONSTEXPR
+     693              :     _OutputIterator
+     694              :     copy_if(_InputIterator __first, _InputIterator __last,
+     695              :             _OutputIterator __result, _Predicate __pred)
+     696              :     {
+     697              :       // concept requirements
+     698              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+     699              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+     700              :             typename iterator_traits<_InputIterator>::value_type>)
+     701              :       __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
+     702              :             typename iterator_traits<_InputIterator>::value_type>)
+     703              :       __glibcxx_requires_valid_range(__first, __last);
+     704              : 
+     705              :       for (; __first != __last; ++__first)
+     706              :         if (__pred(*__first))
+     707              :           {
+     708              :             *__result = *__first;
+     709              :             ++__result;
+     710              :           }
+     711              :       return __result;
+     712              :     }
+     713              : 
+     714              :   template<typename _InputIterator, typename _Size, typename _OutputIterator>
+     715              :     _GLIBCXX20_CONSTEXPR
+     716              :     _OutputIterator
+     717              :     __copy_n(_InputIterator __first, _Size __n,
+     718              :              _OutputIterator __result, input_iterator_tag)
+     719              :     {
+     720              :       return std::__niter_wrap(__result,
+     721              :                                __copy_n_a(__first, __n,
+     722              :                                           std::__niter_base(__result), true));
+     723              :     }
+     724              : 
+     725              :   template<typename _RandomAccessIterator, typename _Size,
+     726              :            typename _OutputIterator>
+     727              :     _GLIBCXX20_CONSTEXPR
+     728              :     inline _OutputIterator
+     729              :     __copy_n(_RandomAccessIterator __first, _Size __n,
+     730              :              _OutputIterator __result, random_access_iterator_tag)
+     731              :     { return std::copy(__first, __first + __n, __result); }
+     732              : 
+     733              :   /**
+     734              :    *  @brief Copies the range [first,first+n) into [result,result+n).
+     735              :    *  @ingroup mutating_algorithms
+     736              :    *  @param  __first  An input iterator.
+     737              :    *  @param  __n      The number of elements to copy.
+     738              :    *  @param  __result An output iterator.
+     739              :    *  @return  result+n.
+     740              :    *
+     741              :    *  This inline function will boil down to a call to @c memmove whenever
+     742              :    *  possible.  Failing that, if random access iterators are passed, then the
+     743              :    *  loop count will be known (and therefore a candidate for compiler
+     744              :    *  optimizations such as unrolling).
+     745              :   */
+     746              :   template<typename _InputIterator, typename _Size, typename _OutputIterator>
+     747              :     _GLIBCXX20_CONSTEXPR
+     748              :     inline _OutputIterator
+     749              :     copy_n(_InputIterator __first, _Size __n, _OutputIterator __result)
+     750              :     {
+     751              :       // concept requirements
+     752              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+     753              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+     754              :             typename iterator_traits<_InputIterator>::value_type>)
+     755              : 
+     756              :       const auto __n2 = std::__size_to_integer(__n);
+     757              :       if (__n2 <= 0)
+     758              :         return __result;
+     759              : 
+     760              :       __glibcxx_requires_can_increment(__first, __n2);
+     761              :       __glibcxx_requires_can_increment(__result, __n2);
+     762              : 
+     763              :       return std::__copy_n(__first, __n2, __result,
+     764              :                            std::__iterator_category(__first));
+     765              :     }
+     766              : 
+     767              :   /**
+     768              :    *  @brief Copy the elements of a sequence to separate output sequences
+     769              :    *         depending on the truth value of a predicate.
+     770              :    *  @ingroup mutating_algorithms
+     771              :    *  @param  __first   An input iterator.
+     772              :    *  @param  __last    An input iterator.
+     773              :    *  @param  __out_true   An output iterator.
+     774              :    *  @param  __out_false  An output iterator.
+     775              :    *  @param  __pred    A predicate.
+     776              :    *  @return   A pair designating the ends of the resulting sequences.
+     777              :    *
+     778              :    *  Copies each element in the range @p [__first,__last) for which
+     779              :    *  @p __pred returns true to the range beginning at @p out_true
+     780              :    *  and each element for which @p __pred returns false to @p __out_false.
+     781              :   */
+     782              :   template<typename _InputIterator, typename _OutputIterator1,
+     783              :            typename _OutputIterator2, typename _Predicate>
+     784              :     _GLIBCXX20_CONSTEXPR
+     785              :     pair<_OutputIterator1, _OutputIterator2>
+     786              :     partition_copy(_InputIterator __first, _InputIterator __last,
+     787              :                    _OutputIterator1 __out_true, _OutputIterator2 __out_false,
+     788              :                    _Predicate __pred)
+     789              :     {
+     790              :       // concept requirements
+     791              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+     792              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator1,
+     793              :             typename iterator_traits<_InputIterator>::value_type>)
+     794              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator2,
+     795              :             typename iterator_traits<_InputIterator>::value_type>)
+     796              :       __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
+     797              :             typename iterator_traits<_InputIterator>::value_type>)
+     798              :       __glibcxx_requires_valid_range(__first, __last);
+     799              :       
+     800              :       for (; __first != __last; ++__first)
+     801              :         if (__pred(*__first))
+     802              :           {
+     803              :             *__out_true = *__first;
+     804              :             ++__out_true;
+     805              :           }
+     806              :         else
+     807              :           {
+     808              :             *__out_false = *__first;
+     809              :             ++__out_false;
+     810              :           }
+     811              : 
+     812              :       return pair<_OutputIterator1, _OutputIterator2>(__out_true, __out_false);
+     813              :     }
+     814              : #endif // C++11
+     815              : 
+     816              :   /**
+     817              :    *  @brief Remove elements from a sequence.
+     818              :    *  @ingroup mutating_algorithms
+     819              :    *  @param  __first  An input iterator.
+     820              :    *  @param  __last   An input iterator.
+     821              :    *  @param  __value  The value to be removed.
+     822              :    *  @return   An iterator designating the end of the resulting sequence.
+     823              :    *
+     824              :    *  All elements equal to @p __value are removed from the range
+     825              :    *  @p [__first,__last).
+     826              :    *
+     827              :    *  remove() is stable, so the relative order of elements that are
+     828              :    *  not removed is unchanged.
+     829              :    *
+     830              :    *  Elements between the end of the resulting sequence and @p __last
+     831              :    *  are still present, but their value is unspecified.
+     832              :   */
+     833              :   template<typename _ForwardIterator, typename _Tp>
+     834              :     _GLIBCXX20_CONSTEXPR
+     835              :     inline _ForwardIterator
+     836          962 :     remove(_ForwardIterator __first, _ForwardIterator __last,
+     837              :            const _Tp& __value)
+     838              :     {
+     839              :       // concept requirements
+     840              :       __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
+     841              :                                   _ForwardIterator>)
+     842              :       __glibcxx_function_requires(_EqualOpConcept<
+     843              :             typename iterator_traits<_ForwardIterator>::value_type, _Tp>)
+     844              :       __glibcxx_requires_valid_range(__first, __last);
+     845              : 
+     846          962 :       return std::__remove_if(__first, __last,
+     847          962 :                 __gnu_cxx::__ops::__iter_equals_val(__value));
+     848              :     }
+     849              : 
+     850              :   /**
+     851              :    *  @brief Remove elements from a sequence using a predicate.
+     852              :    *  @ingroup mutating_algorithms
+     853              :    *  @param  __first  A forward iterator.
+     854              :    *  @param  __last   A forward iterator.
+     855              :    *  @param  __pred   A predicate.
+     856              :    *  @return   An iterator designating the end of the resulting sequence.
+     857              :    *
+     858              :    *  All elements for which @p __pred returns true are removed from the range
+     859              :    *  @p [__first,__last).
+     860              :    *
+     861              :    *  remove_if() is stable, so the relative order of elements that are
+     862              :    *  not removed is unchanged.
+     863              :    *
+     864              :    *  Elements between the end of the resulting sequence and @p __last
+     865              :    *  are still present, but their value is unspecified.
+     866              :   */
+     867              :   template<typename _ForwardIterator, typename _Predicate>
+     868              :     _GLIBCXX20_CONSTEXPR
+     869              :     inline _ForwardIterator
+     870          214 :     remove_if(_ForwardIterator __first, _ForwardIterator __last,
+     871              :               _Predicate __pred)
+     872              :     {
+     873              :       // concept requirements
+     874              :       __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
+     875              :                                   _ForwardIterator>)
+     876              :       __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
+     877              :             typename iterator_traits<_ForwardIterator>::value_type>)
+     878              :       __glibcxx_requires_valid_range(__first, __last);
+     879              : 
+     880          214 :       return std::__remove_if(__first, __last,
+     881          214 :                               __gnu_cxx::__ops::__pred_iter(__pred));
+     882              :     }
+     883              : 
+     884              :   template<typename _ForwardIterator, typename _BinaryPredicate>
+     885              :     _GLIBCXX20_CONSTEXPR
+     886              :     _ForwardIterator
+     887            0 :     __adjacent_find(_ForwardIterator __first, _ForwardIterator __last,
+     888              :                     _BinaryPredicate __binary_pred)
+     889              :     {
+     890            0 :       if (__first == __last)
+     891            0 :         return __last;
+     892            0 :       _ForwardIterator __next = __first;
+     893            0 :       while (++__next != __last)
+     894              :         {
+     895            0 :           if (__binary_pred(__first, __next))
+     896            0 :             return __first;
+     897            0 :           __first = __next;
+     898              :         }
+     899            0 :       return __last;
+     900              :     }
+     901              : 
+     902              :   template<typename _ForwardIterator, typename _BinaryPredicate>
+     903              :     _GLIBCXX20_CONSTEXPR
+     904              :     _ForwardIterator
+     905            0 :     __unique(_ForwardIterator __first, _ForwardIterator __last,
+     906              :              _BinaryPredicate __binary_pred)
+     907              :     {
+     908              :       // Skip the beginning, if already unique.
+     909            0 :       __first = std::__adjacent_find(__first, __last, __binary_pred);
+     910            0 :       if (__first == __last)
+     911            0 :         return __last;
+     912              : 
+     913              :       // Do the real copy work.
+     914            0 :       _ForwardIterator __dest = __first;
+     915            0 :       ++__first;
+     916            0 :       while (++__first != __last)
+     917            0 :         if (!__binary_pred(__dest, __first))
+     918            0 :           *++__dest = _GLIBCXX_MOVE(*__first);
+     919            0 :       return ++__dest;
+     920              :     }
+     921              : 
+     922              :   /**
+     923              :    *  @brief Remove consecutive duplicate values from a sequence.
+     924              :    *  @ingroup mutating_algorithms
+     925              :    *  @param  __first  A forward iterator.
+     926              :    *  @param  __last   A forward iterator.
+     927              :    *  @return  An iterator designating the end of the resulting sequence.
+     928              :    *
+     929              :    *  Removes all but the first element from each group of consecutive
+     930              :    *  values that compare equal.
+     931              :    *  unique() is stable, so the relative order of elements that are
+     932              :    *  not removed is unchanged.
+     933              :    *  Elements between the end of the resulting sequence and @p __last
+     934              :    *  are still present, but their value is unspecified.
+     935              :   */
+     936              :   template<typename _ForwardIterator>
+     937              :     _GLIBCXX20_CONSTEXPR
+     938              :     inline _ForwardIterator
+     939            0 :     unique(_ForwardIterator __first, _ForwardIterator __last)
+     940              :     {
+     941              :       // concept requirements
+     942              :       __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
+     943              :                                   _ForwardIterator>)
+     944              :       __glibcxx_function_requires(_EqualityComparableConcept<
+     945              :                      typename iterator_traits<_ForwardIterator>::value_type>)
+     946              :       __glibcxx_requires_valid_range(__first, __last);
+     947              : 
+     948            0 :       return std::__unique(__first, __last,
+     949            0 :                            __gnu_cxx::__ops::__iter_equal_to_iter());
+     950              :     }
+     951              : 
+     952              :   /**
+     953              :    *  @brief Remove consecutive values from a sequence using a predicate.
+     954              :    *  @ingroup mutating_algorithms
+     955              :    *  @param  __first        A forward iterator.
+     956              :    *  @param  __last         A forward iterator.
+     957              :    *  @param  __binary_pred  A binary predicate.
+     958              :    *  @return  An iterator designating the end of the resulting sequence.
+     959              :    *
+     960              :    *  Removes all but the first element from each group of consecutive
+     961              :    *  values for which @p __binary_pred returns true.
+     962              :    *  unique() is stable, so the relative order of elements that are
+     963              :    *  not removed is unchanged.
+     964              :    *  Elements between the end of the resulting sequence and @p __last
+     965              :    *  are still present, but their value is unspecified.
+     966              :   */
+     967              :   template<typename _ForwardIterator, typename _BinaryPredicate>
+     968              :     _GLIBCXX20_CONSTEXPR
+     969              :     inline _ForwardIterator
+     970              :     unique(_ForwardIterator __first, _ForwardIterator __last,
+     971              :            _BinaryPredicate __binary_pred)
+     972              :     {
+     973              :       // concept requirements
+     974              :       __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
+     975              :                                   _ForwardIterator>)
+     976              :       __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
+     977              :                 typename iterator_traits<_ForwardIterator>::value_type,
+     978              :                 typename iterator_traits<_ForwardIterator>::value_type>)
+     979              :       __glibcxx_requires_valid_range(__first, __last);
+     980              : 
+     981              :       return std::__unique(__first, __last,
+     982              :                            __gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
+     983              :     }
+     984              : 
+     985              :   /**
+     986              :    *  This is an uglified
+     987              :    *  unique_copy(_InputIterator, _InputIterator, _OutputIterator,
+     988              :    *              _BinaryPredicate)
+     989              :    *  overloaded for forward iterators and output iterator as result.
+     990              :   */
+     991              :   template<typename _ForwardIterator, typename _OutputIterator,
+     992              :            typename _BinaryPredicate>
+     993              :     _GLIBCXX20_CONSTEXPR
+     994              :     _OutputIterator
+     995              :     __unique_copy(_ForwardIterator __first, _ForwardIterator __last,
+     996              :                   _OutputIterator __result, _BinaryPredicate __binary_pred,
+     997              :                   forward_iterator_tag, output_iterator_tag)
+     998              :     {
+     999              :       // concept requirements -- iterators already checked
+    1000              :       __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
+    1001              :           typename iterator_traits<_ForwardIterator>::value_type,
+    1002              :           typename iterator_traits<_ForwardIterator>::value_type>)
+    1003              : 
+    1004              :       _ForwardIterator __next = __first;
+    1005              :       *__result = *__first;
+    1006              :       while (++__next != __last)
+    1007              :         if (!__binary_pred(__first, __next))
+    1008              :           {
+    1009              :             __first = __next;
+    1010              :             *++__result = *__first;
+    1011              :           }
+    1012              :       return ++__result;
+    1013              :     }
+    1014              : 
+    1015              :   /**
+    1016              :    *  This is an uglified
+    1017              :    *  unique_copy(_InputIterator, _InputIterator, _OutputIterator,
+    1018              :    *              _BinaryPredicate)
+    1019              :    *  overloaded for input iterators and output iterator as result.
+    1020              :   */
+    1021              :   template<typename _InputIterator, typename _OutputIterator,
+    1022              :            typename _BinaryPredicate>
+    1023              :     _GLIBCXX20_CONSTEXPR
+    1024              :     _OutputIterator
+    1025              :     __unique_copy(_InputIterator __first, _InputIterator __last,
+    1026              :                   _OutputIterator __result, _BinaryPredicate __binary_pred,
+    1027              :                   input_iterator_tag, output_iterator_tag)
+    1028              :     {
+    1029              :       // concept requirements -- iterators already checked
+    1030              :       __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
+    1031              :           typename iterator_traits<_InputIterator>::value_type,
+    1032              :           typename iterator_traits<_InputIterator>::value_type>)
+    1033              : 
+    1034              :       typename iterator_traits<_InputIterator>::value_type __value = *__first;
+    1035              :       __decltype(__gnu_cxx::__ops::__iter_comp_val(__binary_pred))
+    1036              :         __rebound_pred
+    1037              :         = __gnu_cxx::__ops::__iter_comp_val(__binary_pred);
+    1038              :       *__result = __value;
+    1039              :       while (++__first != __last)
+    1040              :         if (!__rebound_pred(__first, __value))
+    1041              :           {
+    1042              :             __value = *__first;
+    1043              :             *++__result = __value;
+    1044              :           }
+    1045              :       return ++__result;
+    1046              :     }
+    1047              : 
+    1048              :   /**
+    1049              :    *  This is an uglified
+    1050              :    *  unique_copy(_InputIterator, _InputIterator, _OutputIterator,
+    1051              :    *              _BinaryPredicate)
+    1052              :    *  overloaded for input iterators and forward iterator as result.
+    1053              :   */
+    1054              :   template<typename _InputIterator, typename _ForwardIterator,
+    1055              :            typename _BinaryPredicate>
+    1056              :     _GLIBCXX20_CONSTEXPR
+    1057              :     _ForwardIterator
+    1058              :     __unique_copy(_InputIterator __first, _InputIterator __last,
+    1059              :                   _ForwardIterator __result, _BinaryPredicate __binary_pred,
+    1060              :                   input_iterator_tag, forward_iterator_tag)
+    1061              :     {
+    1062              :       // concept requirements -- iterators already checked
+    1063              :       __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
+    1064              :           typename iterator_traits<_ForwardIterator>::value_type,
+    1065              :           typename iterator_traits<_InputIterator>::value_type>)
+    1066              :       *__result = *__first;
+    1067              :       while (++__first != __last)
+    1068              :         if (!__binary_pred(__result, __first))
+    1069              :           *++__result = *__first;
+    1070              :       return ++__result;
+    1071              :     }
+    1072              : 
+    1073              :   /**
+    1074              :    *  This is an uglified reverse(_BidirectionalIterator,
+    1075              :    *                              _BidirectionalIterator)
+    1076              :    *  overloaded for bidirectional iterators.
+    1077              :   */
+    1078              :   template<typename _BidirectionalIterator>
+    1079              :     _GLIBCXX20_CONSTEXPR
+    1080              :     void
+    1081              :     __reverse(_BidirectionalIterator __first, _BidirectionalIterator __last,
+    1082              :               bidirectional_iterator_tag)
+    1083              :     {
+    1084              :       while (true)
+    1085              :         if (__first == __last || __first == --__last)
+    1086              :           return;
+    1087              :         else
+    1088              :           {
+    1089              :             std::iter_swap(__first, __last);
+    1090              :             ++__first;
+    1091              :           }
+    1092              :     }
+    1093              : 
+    1094              :   /**
+    1095              :    *  This is an uglified reverse(_BidirectionalIterator,
+    1096              :    *                              _BidirectionalIterator)
+    1097              :    *  overloaded for random access iterators.
+    1098              :   */
+    1099              :   template<typename _RandomAccessIterator>
+    1100              :     _GLIBCXX20_CONSTEXPR
+    1101              :     void
+    1102            0 :     __reverse(_RandomAccessIterator __first, _RandomAccessIterator __last,
+    1103              :               random_access_iterator_tag)
+    1104              :     {
+    1105            0 :       if (__first == __last)
+    1106            0 :         return;
+    1107            0 :       --__last;
+    1108            0 :       while (__first < __last)
+    1109              :         {
+    1110            0 :           std::iter_swap(__first, __last);
+    1111            0 :           ++__first;
+    1112            0 :           --__last;
+    1113              :         }
+    1114              :     }
+    1115              : 
+    1116              :   /**
+    1117              :    *  @brief Reverse a sequence.
+    1118              :    *  @ingroup mutating_algorithms
+    1119              :    *  @param  __first  A bidirectional iterator.
+    1120              :    *  @param  __last   A bidirectional iterator.
+    1121              :    *  @return   reverse() returns no value.
+    1122              :    *
+    1123              :    *  Reverses the order of the elements in the range @p [__first,__last),
+    1124              :    *  so that the first element becomes the last etc.
+    1125              :    *  For every @c i such that @p 0<=i<=(__last-__first)/2), @p reverse()
+    1126              :    *  swaps @p *(__first+i) and @p *(__last-(i+1))
+    1127              :   */
+    1128              :   template<typename _BidirectionalIterator>
+    1129              :     _GLIBCXX20_CONSTEXPR
+    1130              :     inline void
+    1131            0 :     reverse(_BidirectionalIterator __first, _BidirectionalIterator __last)
+    1132              :     {
+    1133              :       // concept requirements
+    1134              :       __glibcxx_function_requires(_Mutable_BidirectionalIteratorConcept<
+    1135              :                                   _BidirectionalIterator>)
+    1136              :       __glibcxx_requires_valid_range(__first, __last);
+    1137            0 :       std::__reverse(__first, __last, std::__iterator_category(__first));
+    1138            0 :     }
+    1139              : 
+    1140              :   /**
+    1141              :    *  @brief Copy a sequence, reversing its elements.
+    1142              :    *  @ingroup mutating_algorithms
+    1143              :    *  @param  __first   A bidirectional iterator.
+    1144              :    *  @param  __last    A bidirectional iterator.
+    1145              :    *  @param  __result  An output iterator.
+    1146              :    *  @return  An iterator designating the end of the resulting sequence.
+    1147              :    *
+    1148              :    *  Copies the elements in the range @p [__first,__last) to the
+    1149              :    *  range @p [__result,__result+(__last-__first)) such that the
+    1150              :    *  order of the elements is reversed.  For every @c i such that @p
+    1151              :    *  0<=i<=(__last-__first), @p reverse_copy() performs the
+    1152              :    *  assignment @p *(__result+(__last-__first)-1-i) = *(__first+i).
+    1153              :    *  The ranges @p [__first,__last) and @p
+    1154              :    *  [__result,__result+(__last-__first)) must not overlap.
+    1155              :   */
+    1156              :   template<typename _BidirectionalIterator, typename _OutputIterator>
+    1157              :     _GLIBCXX20_CONSTEXPR
+    1158              :     _OutputIterator
+    1159              :     reverse_copy(_BidirectionalIterator __first, _BidirectionalIterator __last,
+    1160              :                  _OutputIterator __result)
+    1161              :     {
+    1162              :       // concept requirements
+    1163              :       __glibcxx_function_requires(_BidirectionalIteratorConcept<
+    1164              :                                   _BidirectionalIterator>)
+    1165              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    1166              :                 typename iterator_traits<_BidirectionalIterator>::value_type>)
+    1167              :       __glibcxx_requires_valid_range(__first, __last);
+    1168              : 
+    1169              :       while (__first != __last)
+    1170              :         {
+    1171              :           --__last;
+    1172              :           *__result = *__last;
+    1173              :           ++__result;
+    1174              :         }
+    1175              :       return __result;
+    1176              :     }
+    1177              : 
+    1178              :   /**
+    1179              :    *  This is a helper function for the rotate algorithm specialized on RAIs.
+    1180              :    *  It returns the greatest common divisor of two integer values.
+    1181              :   */
+    1182              :   template<typename _EuclideanRingElement>
+    1183              :     _GLIBCXX20_CONSTEXPR
+    1184              :     _EuclideanRingElement
+    1185              :     __gcd(_EuclideanRingElement __m, _EuclideanRingElement __n)
+    1186              :     {
+    1187              :       while (__n != 0)
+    1188              :         {
+    1189              :           _EuclideanRingElement __t = __m % __n;
+    1190              :           __m = __n;
+    1191              :           __n = __t;
+    1192              :         }
+    1193              :       return __m;
+    1194              :     }
+    1195              : 
+    1196              : _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2)
+    1197              : 
+    1198              :   /// This is a helper function for the rotate algorithm.
+    1199              :   template<typename _ForwardIterator>
+    1200              :     _GLIBCXX20_CONSTEXPR
+    1201              :     _ForwardIterator
+    1202              :     __rotate(_ForwardIterator __first,
+    1203              :              _ForwardIterator __middle,
+    1204              :              _ForwardIterator __last,
+    1205              :              forward_iterator_tag)
+    1206              :     {
+    1207              :       if (__first == __middle)
+    1208              :         return __last;
+    1209              :       else if (__last == __middle)
+    1210              :         return __first;
+    1211              : 
+    1212              :       _ForwardIterator __first2 = __middle;
+    1213              :       do
+    1214              :         {
+    1215              :           std::iter_swap(__first, __first2);
+    1216              :           ++__first;
+    1217              :           ++__first2;
+    1218              :           if (__first == __middle)
+    1219              :             __middle = __first2;
+    1220              :         }
+    1221              :       while (__first2 != __last);
+    1222              : 
+    1223              :       _ForwardIterator __ret = __first;
+    1224              : 
+    1225              :       __first2 = __middle;
+    1226              : 
+    1227              :       while (__first2 != __last)
+    1228              :         {
+    1229              :           std::iter_swap(__first, __first2);
+    1230              :           ++__first;
+    1231              :           ++__first2;
+    1232              :           if (__first == __middle)
+    1233              :             __middle = __first2;
+    1234              :           else if (__first2 == __last)
+    1235              :             __first2 = __middle;
+    1236              :         }
+    1237              :       return __ret;
+    1238              :     }
+    1239              : 
+    1240              :    /// This is a helper function for the rotate algorithm.
+    1241              :   template<typename _BidirectionalIterator>
+    1242              :     _GLIBCXX20_CONSTEXPR
+    1243              :     _BidirectionalIterator
+    1244              :     __rotate(_BidirectionalIterator __first,
+    1245              :              _BidirectionalIterator __middle,
+    1246              :              _BidirectionalIterator __last,
+    1247              :               bidirectional_iterator_tag)
+    1248              :     {
+    1249              :       // concept requirements
+    1250              :       __glibcxx_function_requires(_Mutable_BidirectionalIteratorConcept<
+    1251              :                                   _BidirectionalIterator>)
+    1252              : 
+    1253              :       if (__first == __middle)
+    1254              :         return __last;
+    1255              :       else if (__last == __middle)
+    1256              :         return __first;
+    1257              : 
+    1258              :       std::__reverse(__first,  __middle, bidirectional_iterator_tag());
+    1259              :       std::__reverse(__middle, __last,   bidirectional_iterator_tag());
+    1260              : 
+    1261              :       while (__first != __middle && __middle != __last)
+    1262              :         {
+    1263              :           std::iter_swap(__first, --__last);
+    1264              :           ++__first;
+    1265              :         }
+    1266              : 
+    1267              :       if (__first == __middle)
+    1268              :         {
+    1269              :           std::__reverse(__middle, __last,   bidirectional_iterator_tag());
+    1270              :           return __last;
+    1271              :         }
+    1272              :       else
+    1273              :         {
+    1274              :           std::__reverse(__first,  __middle, bidirectional_iterator_tag());
+    1275              :           return __first;
+    1276              :         }
+    1277              :     }
+    1278              : 
+    1279              :   /// This is a helper function for the rotate algorithm.
+    1280              :   template<typename _RandomAccessIterator>
+    1281              :     _GLIBCXX20_CONSTEXPR
+    1282              :     _RandomAccessIterator
+    1283            0 :     __rotate(_RandomAccessIterator __first,
+    1284              :              _RandomAccessIterator __middle,
+    1285              :              _RandomAccessIterator __last,
+    1286              :              random_access_iterator_tag)
+    1287              :     {
+    1288              :       // concept requirements
+    1289              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+    1290              :                                   _RandomAccessIterator>)
+    1291              : 
+    1292            0 :       if (__first == __middle)
+    1293            0 :         return __last;
+    1294            0 :       else if (__last == __middle)
+    1295            0 :         return __first;
+    1296              : 
+    1297              :       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+    1298              :         _Distance;
+    1299              :       typedef typename iterator_traits<_RandomAccessIterator>::value_type
+    1300              :         _ValueType;
+    1301              : 
+    1302            0 :       _Distance __n = __last   - __first;
+    1303            0 :       _Distance __k = __middle - __first;
+    1304              : 
+    1305            0 :       if (__k == __n - __k)
+    1306              :         {
+    1307            0 :           std::swap_ranges(__first, __middle, __middle);
+    1308            0 :           return __middle;
+    1309              :         }
+    1310              : 
+    1311            0 :       _RandomAccessIterator __p = __first;
+    1312            0 :       _RandomAccessIterator __ret = __first + (__last - __middle);
+    1313              : 
+    1314            0 :       for (;;)
+    1315              :         {
+    1316            0 :           if (__k < __n - __k)
+    1317              :             {
+    1318              :               if (__is_pod(_ValueType) && __k == 1)
+    1319              :                 {
+    1320              :                   _ValueType __t = _GLIBCXX_MOVE(*__p);
+    1321              :                   _GLIBCXX_MOVE3(__p + 1, __p + __n, __p);
+    1322              :                   *(__p + __n - 1) = _GLIBCXX_MOVE(__t);
+    1323              :                   return __ret;
+    1324              :                 }
+    1325            0 :               _RandomAccessIterator __q = __p + __k;
+    1326            0 :               for (_Distance __i = 0; __i < __n - __k; ++ __i)
+    1327              :                 {
+    1328            0 :                   std::iter_swap(__p, __q);
+    1329            0 :                   ++__p;
+    1330            0 :                   ++__q;
+    1331              :                 }
+    1332            0 :               __n %= __k;
+    1333            0 :               if (__n == 0)
+    1334            0 :                 return __ret;
+    1335            0 :               std::swap(__n, __k);
+    1336            0 :               __k = __n - __k;
+    1337              :             }
+    1338              :           else
+    1339              :             {
+    1340            0 :               __k = __n - __k;
+    1341              :               if (__is_pod(_ValueType) && __k == 1)
+    1342              :                 {
+    1343              :                   _ValueType __t = _GLIBCXX_MOVE(*(__p + __n - 1));
+    1344              :                   _GLIBCXX_MOVE_BACKWARD3(__p, __p + __n - 1, __p + __n);
+    1345              :                   *__p = _GLIBCXX_MOVE(__t);
+    1346              :                   return __ret;
+    1347              :                 }
+    1348            0 :               _RandomAccessIterator __q = __p + __n;
+    1349            0 :               __p = __q - __k;
+    1350            0 :               for (_Distance __i = 0; __i < __n - __k; ++ __i)
+    1351              :                 {
+    1352            0 :                   --__p;
+    1353            0 :                   --__q;
+    1354            0 :                   std::iter_swap(__p, __q);
+    1355              :                 }
+    1356            0 :               __n %= __k;
+    1357            0 :               if (__n == 0)
+    1358            0 :                 return __ret;
+    1359            0 :               std::swap(__n, __k);
+    1360              :             }
+    1361              :         }
+    1362              :     }
+    1363              : 
+    1364              :    // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1365              :    // DR 488. rotate throws away useful information
+    1366              :   /**
+    1367              :    *  @brief Rotate the elements of a sequence.
+    1368              :    *  @ingroup mutating_algorithms
+    1369              :    *  @param  __first   A forward iterator.
+    1370              :    *  @param  __middle  A forward iterator.
+    1371              :    *  @param  __last    A forward iterator.
+    1372              :    *  @return  first + (last - middle).
+    1373              :    *
+    1374              :    *  Rotates the elements of the range @p [__first,__last) by 
+    1375              :    *  @p (__middle - __first) positions so that the element at @p __middle
+    1376              :    *  is moved to @p __first, the element at @p __middle+1 is moved to
+    1377              :    *  @p __first+1 and so on for each element in the range
+    1378              :    *  @p [__first,__last).
+    1379              :    *
+    1380              :    *  This effectively swaps the ranges @p [__first,__middle) and
+    1381              :    *  @p [__middle,__last).
+    1382              :    *
+    1383              :    *  Performs
+    1384              :    *   @p *(__first+(n+(__last-__middle))%(__last-__first))=*(__first+n)
+    1385              :    *  for each @p n in the range @p [0,__last-__first).
+    1386              :   */
+    1387              :   template<typename _ForwardIterator>
+    1388              :     _GLIBCXX20_CONSTEXPR
+    1389              :     inline _ForwardIterator
+    1390            0 :     rotate(_ForwardIterator __first, _ForwardIterator __middle,
+    1391              :            _ForwardIterator __last)
+    1392              :     {
+    1393              :       // concept requirements
+    1394              :       __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
+    1395              :                                   _ForwardIterator>)
+    1396              :       __glibcxx_requires_valid_range(__first, __middle);
+    1397              :       __glibcxx_requires_valid_range(__middle, __last);
+    1398              : 
+    1399            0 :       return std::__rotate(__first, __middle, __last,
+    1400            0 :                            std::__iterator_category(__first));
+    1401              :     }
+    1402              : 
+    1403              : _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
+    1404              : 
+    1405              :   /**
+    1406              :    *  @brief Copy a sequence, rotating its elements.
+    1407              :    *  @ingroup mutating_algorithms
+    1408              :    *  @param  __first   A forward iterator.
+    1409              :    *  @param  __middle  A forward iterator.
+    1410              :    *  @param  __last    A forward iterator.
+    1411              :    *  @param  __result  An output iterator.
+    1412              :    *  @return   An iterator designating the end of the resulting sequence.
+    1413              :    *
+    1414              :    *  Copies the elements of the range @p [__first,__last) to the
+    1415              :    *  range beginning at @result, rotating the copied elements by 
+    1416              :    *  @p (__middle-__first) positions so that the element at @p __middle
+    1417              :    *  is moved to @p __result, the element at @p __middle+1 is moved
+    1418              :    *  to @p __result+1 and so on for each element in the range @p
+    1419              :    *  [__first,__last).
+    1420              :    *
+    1421              :    *  Performs 
+    1422              :    *  @p *(__result+(n+(__last-__middle))%(__last-__first))=*(__first+n)
+    1423              :    *  for each @p n in the range @p [0,__last-__first).
+    1424              :   */
+    1425              :   template<typename _ForwardIterator, typename _OutputIterator>
+    1426              :     _GLIBCXX20_CONSTEXPR
+    1427              :     inline _OutputIterator
+    1428              :     rotate_copy(_ForwardIterator __first, _ForwardIterator __middle,
+    1429              :                 _ForwardIterator __last, _OutputIterator __result)
+    1430              :     {
+    1431              :       // concept requirements
+    1432              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    1433              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    1434              :                 typename iterator_traits<_ForwardIterator>::value_type>)
+    1435              :       __glibcxx_requires_valid_range(__first, __middle);
+    1436              :       __glibcxx_requires_valid_range(__middle, __last);
+    1437              : 
+    1438              :       return std::copy(__first, __middle,
+    1439              :                        std::copy(__middle, __last, __result));
+    1440              :     }
+    1441              : 
+    1442              :   /// This is a helper function...
+    1443              :   template<typename _ForwardIterator, typename _Predicate>
+    1444              :     _GLIBCXX20_CONSTEXPR
+    1445              :     _ForwardIterator
+    1446              :     __partition(_ForwardIterator __first, _ForwardIterator __last,
+    1447              :                 _Predicate __pred, forward_iterator_tag)
+    1448              :     {
+    1449              :       if (__first == __last)
+    1450              :         return __first;
+    1451              : 
+    1452              :       while (__pred(*__first))
+    1453              :         if (++__first == __last)
+    1454              :           return __first;
+    1455              : 
+    1456              :       _ForwardIterator __next = __first;
+    1457              : 
+    1458              :       while (++__next != __last)
+    1459              :         if (__pred(*__next))
+    1460              :           {
+    1461              :             std::iter_swap(__first, __next);
+    1462              :             ++__first;
+    1463              :           }
+    1464              : 
+    1465              :       return __first;
+    1466              :     }
+    1467              : 
+    1468              :   /// This is a helper function...
+    1469              :   template<typename _BidirectionalIterator, typename _Predicate>
+    1470              :     _GLIBCXX20_CONSTEXPR
+    1471              :     _BidirectionalIterator
+    1472              :     __partition(_BidirectionalIterator __first, _BidirectionalIterator __last,
+    1473              :                 _Predicate __pred, bidirectional_iterator_tag)
+    1474              :     {
+    1475              :       while (true)
+    1476              :         {
+    1477              :           while (true)
+    1478              :             if (__first == __last)
+    1479              :               return __first;
+    1480              :             else if (__pred(*__first))
+    1481              :               ++__first;
+    1482              :             else
+    1483              :               break;
+    1484              :           --__last;
+    1485              :           while (true)
+    1486              :             if (__first == __last)
+    1487              :               return __first;
+    1488              :             else if (!bool(__pred(*__last)))
+    1489              :               --__last;
+    1490              :             else
+    1491              :               break;
+    1492              :           std::iter_swap(__first, __last);
+    1493              :           ++__first;
+    1494              :         }
+    1495              :     }
+    1496              : 
+    1497              : #if _GLIBCXX_HOSTED
+    1498              :   // partition
+    1499              : 
+    1500              :   /// This is a helper function...
+    1501              :   /// Requires __first != __last and !__pred(__first)
+    1502              :   /// and __len == distance(__first, __last).
+    1503              :   ///
+    1504              :   /// !__pred(__first) allows us to guarantee that we don't
+    1505              :   /// move-assign an element onto itself.
+    1506              :   template<typename _ForwardIterator, typename _Pointer, typename _Predicate,
+    1507              :            typename _Distance>
+    1508              :     _ForwardIterator
+    1509              :     __stable_partition_adaptive(_ForwardIterator __first,
+    1510              :                                 _ForwardIterator __last,
+    1511              :                                 _Predicate __pred, _Distance __len,
+    1512              :                                 _Pointer __buffer,
+    1513              :                                 _Distance __buffer_size)
+    1514              :     {
+    1515              :       if (__len == 1)
+    1516              :         return __first;
+    1517              : 
+    1518              :       if (__len <= __buffer_size)
+    1519              :         {
+    1520              :           _ForwardIterator __result1 = __first;
+    1521              :           _Pointer __result2 = __buffer;
+    1522              : 
+    1523              :           // The precondition guarantees that !__pred(__first), so
+    1524              :           // move that element to the buffer before starting the loop.
+    1525              :           // This ensures that we only call __pred once per element.
+    1526              :           *__result2 = _GLIBCXX_MOVE(*__first);
+    1527              :           ++__result2;
+    1528              :           ++__first;
+    1529              :           for (; __first != __last; ++__first)
+    1530              :             if (__pred(__first))
+    1531              :               {
+    1532              :                 *__result1 = _GLIBCXX_MOVE(*__first);
+    1533              :                 ++__result1;
+    1534              :               }
+    1535              :             else
+    1536              :               {
+    1537              :                 *__result2 = _GLIBCXX_MOVE(*__first);
+    1538              :                 ++__result2;
+    1539              :               }
+    1540              : 
+    1541              :           _GLIBCXX_MOVE3(__buffer, __result2, __result1);
+    1542              :           return __result1;
+    1543              :         }
+    1544              : 
+    1545              :       _ForwardIterator __middle = __first;
+    1546              :       std::advance(__middle, __len / 2);
+    1547              :       _ForwardIterator __left_split =
+    1548              :         std::__stable_partition_adaptive(__first, __middle, __pred,
+    1549              :                                          __len / 2, __buffer,
+    1550              :                                          __buffer_size);
+    1551              : 
+    1552              :       // Advance past true-predicate values to satisfy this
+    1553              :       // function's preconditions.
+    1554              :       _Distance __right_len = __len - __len / 2;
+    1555              :       _ForwardIterator __right_split =
+    1556              :         std::__find_if_not_n(__middle, __right_len, __pred);
+    1557              : 
+    1558              :       if (__right_len)
+    1559              :         __right_split =
+    1560              :           std::__stable_partition_adaptive(__right_split, __last, __pred,
+    1561              :                                            __right_len,
+    1562              :                                            __buffer, __buffer_size);
+    1563              : 
+    1564              :       return std::rotate(__left_split, __middle, __right_split);
+    1565              :     }
+    1566              : 
+    1567              :   template<typename _ForwardIterator, typename _Predicate>
+    1568              :     _ForwardIterator
+    1569              :     __stable_partition(_ForwardIterator __first, _ForwardIterator __last,
+    1570              :                        _Predicate __pred)
+    1571              :     {
+    1572              :       __first = std::__find_if_not(__first, __last, __pred);
+    1573              : 
+    1574              :       if (__first == __last)
+    1575              :         return __first;
+    1576              : 
+    1577              :       typedef typename iterator_traits<_ForwardIterator>::value_type
+    1578              :         _ValueType;
+    1579              :       typedef typename iterator_traits<_ForwardIterator>::difference_type
+    1580              :         _DistanceType;
+    1581              : 
+    1582              :       _Temporary_buffer<_ForwardIterator, _ValueType>
+    1583              :         __buf(__first, std::distance(__first, __last));
+    1584              :       return
+    1585              :         std::__stable_partition_adaptive(__first, __last, __pred,
+    1586              :                                          _DistanceType(__buf.requested_size()),
+    1587              :                                          __buf.begin(),
+    1588              :                                          _DistanceType(__buf.size()));
+    1589              :     }
+    1590              : 
+    1591              :   /**
+    1592              :    *  @brief Move elements for which a predicate is true to the beginning
+    1593              :    *         of a sequence, preserving relative ordering.
+    1594              :    *  @ingroup mutating_algorithms
+    1595              :    *  @param  __first   A forward iterator.
+    1596              :    *  @param  __last    A forward iterator.
+    1597              :    *  @param  __pred    A predicate functor.
+    1598              :    *  @return  An iterator @p middle such that @p __pred(i) is true for each
+    1599              :    *  iterator @p i in the range @p [first,middle) and false for each @p i
+    1600              :    *  in the range @p [middle,last).
+    1601              :    *
+    1602              :    *  Performs the same function as @p partition() with the additional
+    1603              :    *  guarantee that the relative ordering of elements in each group is
+    1604              :    *  preserved, so any two elements @p x and @p y in the range
+    1605              :    *  @p [__first,__last) such that @p __pred(x)==__pred(y) will have the same
+    1606              :    *  relative ordering after calling @p stable_partition().
+    1607              :   */
+    1608              :   template<typename _ForwardIterator, typename _Predicate>
+    1609              :     inline _ForwardIterator
+    1610              :     stable_partition(_ForwardIterator __first, _ForwardIterator __last,
+    1611              :                      _Predicate __pred)
+    1612              :     {
+    1613              :       // concept requirements
+    1614              :       __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
+    1615              :                                   _ForwardIterator>)
+    1616              :       __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
+    1617              :             typename iterator_traits<_ForwardIterator>::value_type>)
+    1618              :       __glibcxx_requires_valid_range(__first, __last);
+    1619              : 
+    1620              :       return std::__stable_partition(__first, __last,
+    1621              :                                      __gnu_cxx::__ops::__pred_iter(__pred));
+    1622              :     }
+    1623              : #endif // HOSTED
+    1624              : 
+    1625              :   /// @cond undocumented
+    1626              : 
+    1627              :   /// This is a helper function for the sort routines.
+    1628              :   template<typename _RandomAccessIterator, typename _Compare>
+    1629              :     _GLIBCXX20_CONSTEXPR
+    1630              :     void
+    1631            0 :     __heap_select(_RandomAccessIterator __first,
+    1632              :                   _RandomAccessIterator __middle,
+    1633              :                   _RandomAccessIterator __last, _Compare __comp)
+    1634              :     {
+    1635            0 :       std::__make_heap(__first, __middle, __comp);
+    1636            0 :       for (_RandomAccessIterator __i = __middle; __i < __last; ++__i)
+    1637            0 :         if (__comp(__i, __first))
+    1638            0 :           std::__pop_heap(__first, __middle, __i, __comp);
+    1639            0 :     }
+    1640              : 
+    1641              :   // partial_sort
+    1642              : 
+    1643              :   template<typename _InputIterator, typename _RandomAccessIterator,
+    1644              :            typename _Compare>
+    1645              :     _GLIBCXX20_CONSTEXPR
+    1646              :     _RandomAccessIterator
+    1647              :     __partial_sort_copy(_InputIterator __first, _InputIterator __last,
+    1648              :                         _RandomAccessIterator __result_first,
+    1649              :                         _RandomAccessIterator __result_last,
+    1650              :                         _Compare __comp)
+    1651              :     {
+    1652              :       typedef typename iterator_traits<_InputIterator>::value_type
+    1653              :         _InputValueType;
+    1654              :       typedef iterator_traits<_RandomAccessIterator> _RItTraits;
+    1655              :       typedef typename _RItTraits::difference_type _DistanceType;
+    1656              : 
+    1657              :       if (__result_first == __result_last)
+    1658              :         return __result_last;
+    1659              :       _RandomAccessIterator __result_real_last = __result_first;
+    1660              :       while (__first != __last && __result_real_last != __result_last)
+    1661              :         {
+    1662              :           *__result_real_last = *__first;
+    1663              :           ++__result_real_last;
+    1664              :           ++__first;
+    1665              :         }
+    1666              :       
+    1667              :       std::__make_heap(__result_first, __result_real_last, __comp);
+    1668              :       while (__first != __last)
+    1669              :         {
+    1670              :           if (__comp(__first, __result_first))
+    1671              :             std::__adjust_heap(__result_first, _DistanceType(0),
+    1672              :                                _DistanceType(__result_real_last
+    1673              :                                              - __result_first),
+    1674              :                                _InputValueType(*__first), __comp);
+    1675              :           ++__first;
+    1676              :         }
+    1677              :       std::__sort_heap(__result_first, __result_real_last, __comp);
+    1678              :       return __result_real_last;
+    1679              :     }
+    1680              : 
+    1681              :   /// @endcond
+    1682              : 
+    1683              :   /**
+    1684              :    *  @brief Copy the smallest elements of a sequence.
+    1685              :    *  @ingroup sorting_algorithms
+    1686              :    *  @param  __first   An iterator.
+    1687              :    *  @param  __last    Another iterator.
+    1688              :    *  @param  __result_first   A random-access iterator.
+    1689              :    *  @param  __result_last    Another random-access iterator.
+    1690              :    *  @return   An iterator indicating the end of the resulting sequence.
+    1691              :    *
+    1692              :    *  Copies and sorts the smallest `N` values from the range
+    1693              :    *  `[__first, __last)` to the range beginning at `__result_first`, where
+    1694              :    *  the number of elements to be copied, `N`, is the smaller of
+    1695              :    *  `(__last - __first)` and `(__result_last - __result_first)`.
+    1696              :    *  After the sort if `i` and `j` are iterators in the range
+    1697              :    *  `[__result_first,__result_first + N)` such that `i` precedes `j` then
+    1698              :    *  `*j < *i` is false.
+    1699              :    *  The value returned is `__result_first + N`.
+    1700              :   */
+    1701              :   template<typename _InputIterator, typename _RandomAccessIterator>
+    1702              :     _GLIBCXX20_CONSTEXPR
+    1703              :     inline _RandomAccessIterator
+    1704              :     partial_sort_copy(_InputIterator __first, _InputIterator __last,
+    1705              :                       _RandomAccessIterator __result_first,
+    1706              :                       _RandomAccessIterator __result_last)
+    1707              :     {
+    1708              : #ifdef _GLIBCXX_CONCEPT_CHECKS
+    1709              :       typedef typename iterator_traits<_InputIterator>::value_type
+    1710              :         _InputValueType;
+    1711              :       typedef typename iterator_traits<_RandomAccessIterator>::value_type
+    1712              :         _OutputValueType;
+    1713              : #endif
+    1714              : 
+    1715              :       // concept requirements
+    1716              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+    1717              :       __glibcxx_function_requires(_ConvertibleConcept<_InputValueType,
+    1718              :                                   _OutputValueType>)
+    1719              :       __glibcxx_function_requires(_LessThanOpConcept<_InputValueType,
+    1720              :                                                      _OutputValueType>)
+    1721              :       __glibcxx_function_requires(_LessThanComparableConcept<_OutputValueType>)
+    1722              :       __glibcxx_requires_valid_range(__first, __last);
+    1723              :       __glibcxx_requires_irreflexive(__first, __last);
+    1724              :       __glibcxx_requires_valid_range(__result_first, __result_last);
+    1725              : 
+    1726              :       return std::__partial_sort_copy(__first, __last,
+    1727              :                                       __result_first, __result_last,
+    1728              :                                       __gnu_cxx::__ops::__iter_less_iter());
+    1729              :     }
+    1730              : 
+    1731              :   /**
+    1732              :    *  @brief Copy the smallest elements of a sequence using a predicate for
+    1733              :    *         comparison.
+    1734              :    *  @ingroup sorting_algorithms
+    1735              :    *  @param  __first   An input iterator.
+    1736              :    *  @param  __last    Another input iterator.
+    1737              :    *  @param  __result_first   A random-access iterator.
+    1738              :    *  @param  __result_last    Another random-access iterator.
+    1739              :    *  @param  __comp    A comparison functor.
+    1740              :    *  @return   An iterator indicating the end of the resulting sequence.
+    1741              :    *
+    1742              :    *  Copies and sorts the smallest `N` values from the range
+    1743              :    *  `[__first, __last)` to the range beginning at `result_first`, where
+    1744              :    *  the number of elements to be copied, `N`, is the smaller of
+    1745              :    *  `(__last - __first)` and `(__result_last - __result_first)`.
+    1746              :    *  After the sort if `i` and `j` are iterators in the range
+    1747              :    *  `[__result_first, __result_first + N)` such that `i` precedes `j` then
+    1748              :    *  `__comp(*j, *i)` is false.
+    1749              :    *  The value returned is `__result_first + N`.
+    1750              :   */
+    1751              :   template<typename _InputIterator, typename _RandomAccessIterator,
+    1752              :            typename _Compare>
+    1753              :     _GLIBCXX20_CONSTEXPR
+    1754              :     inline _RandomAccessIterator
+    1755              :     partial_sort_copy(_InputIterator __first, _InputIterator __last,
+    1756              :                       _RandomAccessIterator __result_first,
+    1757              :                       _RandomAccessIterator __result_last,
+    1758              :                       _Compare __comp)
+    1759              :     {
+    1760              : #ifdef _GLIBCXX_CONCEPT_CHECKS
+    1761              :       typedef typename iterator_traits<_InputIterator>::value_type
+    1762              :         _InputValueType;
+    1763              :       typedef typename iterator_traits<_RandomAccessIterator>::value_type
+    1764              :         _OutputValueType;
+    1765              : #endif
+    1766              : 
+    1767              :       // concept requirements
+    1768              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+    1769              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+    1770              :                                   _RandomAccessIterator>)
+    1771              :       __glibcxx_function_requires(_ConvertibleConcept<_InputValueType,
+    1772              :                                   _OutputValueType>)
+    1773              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    1774              :                                   _InputValueType, _OutputValueType>)
+    1775              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    1776              :                                   _OutputValueType, _OutputValueType>)
+    1777              :       __glibcxx_requires_valid_range(__first, __last);
+    1778              :       __glibcxx_requires_irreflexive_pred(__first, __last, __comp);
+    1779              :       __glibcxx_requires_valid_range(__result_first, __result_last);
+    1780              : 
+    1781              :       return std::__partial_sort_copy(__first, __last,
+    1782              :                                       __result_first, __result_last,
+    1783              :                                 __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    1784              :     }
+    1785              : 
+    1786              :   /// @cond undocumented
+    1787              : 
+    1788              :   /// This is a helper function for the sort routine.
+    1789              :   template<typename _RandomAccessIterator, typename _Compare>
+    1790              :     _GLIBCXX20_CONSTEXPR
+    1791              :     void
+    1792         9732 :     __unguarded_linear_insert(_RandomAccessIterator __last,
+    1793              :                               _Compare __comp)
+    1794              :     {
+    1795              :       typename iterator_traits<_RandomAccessIterator>::value_type
+    1796         9732 :         __val = _GLIBCXX_MOVE(*__last);
+    1797         9732 :       _RandomAccessIterator __next = __last;
+    1798         9732 :       --__next;
+    1799        31568 :       while (__comp(__val, __next))
+    1800              :         {
+    1801        21836 :           *__last = _GLIBCXX_MOVE(*__next);
+    1802        21836 :           __last = __next;
+    1803        21836 :           --__next;
+    1804              :         }
+    1805         9732 :       *__last = _GLIBCXX_MOVE(__val);
+    1806         9732 :     }
+    1807              : 
+    1808              :   /// This is a helper function for the sort routine.
+    1809              :   template<typename _RandomAccessIterator, typename _Compare>
+    1810              :     _GLIBCXX20_CONSTEXPR
+    1811              :     void
+    1812          780 :     __insertion_sort(_RandomAccessIterator __first,
+    1813              :                      _RandomAccessIterator __last, _Compare __comp)
+    1814              :     {
+    1815          780 :       if (__first == __last) return;
+    1816              : 
+    1817         6038 :       for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
+    1818              :         {
+    1819         5282 :           if (__comp(__i, __first))
+    1820              :             {
+    1821              :               typename iterator_traits<_RandomAccessIterator>::value_type
+    1822         1150 :                 __val = _GLIBCXX_MOVE(*__i);
+    1823         1150 :               _GLIBCXX_MOVE_BACKWARD3(__first, __i, __i + 1);
+    1824         1150 :               *__first = _GLIBCXX_MOVE(__val);
+    1825              :             }
+    1826              :           else
+    1827         4132 :             std::__unguarded_linear_insert(__i,
+    1828            0 :                                 __gnu_cxx::__ops::__val_comp_iter(__comp));
+    1829              :         }
+    1830              :     }
+    1831              : 
+    1832              :   /// This is a helper function for the sort routine.
+    1833              :   template<typename _RandomAccessIterator, typename _Compare>
+    1834              :     _GLIBCXX20_CONSTEXPR
+    1835              :     inline void
+    1836           28 :     __unguarded_insertion_sort(_RandomAccessIterator __first,
+    1837              :                                _RandomAccessIterator __last, _Compare __comp)
+    1838              :     {
+    1839         5628 :       for (_RandomAccessIterator __i = __first; __i != __last; ++__i)
+    1840         5600 :         std::__unguarded_linear_insert(__i,
+    1841            0 :                                 __gnu_cxx::__ops::__val_comp_iter(__comp));
+    1842           28 :     }
+    1843              : 
+    1844              :   /**
+    1845              :    *  @doctodo
+    1846              :    *  This controls some aspect of the sort routines.
+    1847              :   */
+    1848              :   enum { _S_threshold = 16 };
+    1849              : 
+    1850              :   /// This is a helper function for the sort routine.
+    1851              :   template<typename _RandomAccessIterator, typename _Compare>
+    1852              :     _GLIBCXX20_CONSTEXPR
+    1853              :     void
+    1854          544 :     __final_insertion_sort(_RandomAccessIterator __first,
+    1855              :                            _RandomAccessIterator __last, _Compare __comp)
+    1856              :     {
+    1857          544 :       if (__last - __first > int(_S_threshold))
+    1858              :         {
+    1859           28 :           std::__insertion_sort(__first, __first + int(_S_threshold), __comp);
+    1860           28 :           std::__unguarded_insertion_sort(__first + int(_S_threshold), __last,
+    1861              :                                           __comp);
+    1862              :         }
+    1863              :       else
+    1864          516 :         std::__insertion_sort(__first, __last, __comp);
+    1865          544 :     }
+    1866              : 
+    1867              :   /// This is a helper function...
+    1868              :   template<typename _RandomAccessIterator, typename _Compare>
+    1869              :     _GLIBCXX20_CONSTEXPR
+    1870              :     _RandomAccessIterator
+    1871         6476 :     __unguarded_partition(_RandomAccessIterator __first,
+    1872              :                           _RandomAccessIterator __last,
+    1873              :                           _RandomAccessIterator __pivot, _Compare __comp)
+    1874              :     {
+    1875              :       while (true)
+    1876              :         {
+    1877        15276 :           while (__comp(__first, __pivot))
+    1878         8800 :             ++__first;
+    1879         6476 :           --__last;
+    1880        16608 :           while (__comp(__pivot, __last))
+    1881        10132 :             --__last;
+    1882         6476 :           if (!(__first < __last))
+    1883          644 :             return __first;
+    1884         5832 :           std::iter_swap(__first, __last);
+    1885         5832 :           ++__first;
+    1886              :         }
+    1887              :     }
+    1888              : 
+    1889              :   /// This is a helper function...
+    1890              :   template<typename _RandomAccessIterator, typename _Compare>
+    1891              :     _GLIBCXX20_CONSTEXPR
+    1892              :     inline _RandomAccessIterator
+    1893          644 :     __unguarded_partition_pivot(_RandomAccessIterator __first,
+    1894              :                                 _RandomAccessIterator __last, _Compare __comp)
+    1895              :     {
+    1896          644 :       _RandomAccessIterator __mid = __first + (__last - __first) / 2;
+    1897          644 :       std::__move_median_to_first(__first, __first + 1, __mid, __last - 1,
+    1898              :                                   __comp);
+    1899         1288 :       return std::__unguarded_partition(__first + 1, __last, __first, __comp);
+    1900              :     }
+    1901              : 
+    1902              :   template<typename _RandomAccessIterator, typename _Compare>
+    1903              :     _GLIBCXX20_CONSTEXPR
+    1904              :     inline void
+    1905            0 :     __partial_sort(_RandomAccessIterator __first,
+    1906              :                    _RandomAccessIterator __middle,
+    1907              :                    _RandomAccessIterator __last,
+    1908              :                    _Compare __comp)
+    1909              :     {
+    1910            0 :       std::__heap_select(__first, __middle, __last, __comp);
+    1911            0 :       std::__sort_heap(__first, __middle, __comp);
+    1912            0 :     }
+    1913              : 
+    1914              :   /// This is a helper function for the sort routine.
+    1915              :   template<typename _RandomAccessIterator, typename _Size, typename _Compare>
+    1916              :     _GLIBCXX20_CONSTEXPR
+    1917              :     void
+    1918         1188 :     __introsort_loop(_RandomAccessIterator __first,
+    1919              :                      _RandomAccessIterator __last,
+    1920              :                      _Size __depth_limit, _Compare __comp)
+    1921              :     {
+    1922         1832 :       while (__last - __first > int(_S_threshold))
+    1923              :         {
+    1924          644 :           if (__depth_limit == 0)
+    1925              :             {
+    1926            0 :               std::__partial_sort(__first, __last, __last, __comp);
+    1927            0 :               return;
+    1928              :             }
+    1929          644 :           --__depth_limit;
+    1930              :           _RandomAccessIterator __cut =
+    1931          644 :             std::__unguarded_partition_pivot(__first, __last, __comp);
+    1932          644 :           std::__introsort_loop(__cut, __last, __depth_limit, __comp);
+    1933          644 :           __last = __cut;
+    1934              :         }
+    1935              :     }
+    1936              : 
+    1937              :   // sort
+    1938              : 
+    1939              :   template<typename _RandomAccessIterator, typename _Compare>
+    1940              :     _GLIBCXX20_CONSTEXPR
+    1941              :     inline void
+    1942          544 :     __sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
+    1943              :            _Compare __comp)
+    1944              :     {
+    1945          544 :       if (__first != __last)
+    1946              :         {
+    1947          544 :           std::__introsort_loop(__first, __last,
+    1948          544 :                                 std::__lg(__last - __first) * 2,
+    1949              :                                 __comp);
+    1950          544 :           std::__final_insertion_sort(__first, __last, __comp);
+    1951              :         }
+    1952          544 :     }
+    1953              : 
+    1954              :   template<typename _RandomAccessIterator, typename _Size, typename _Compare>
+    1955              :     _GLIBCXX20_CONSTEXPR
+    1956              :     void
+    1957              :     __introselect(_RandomAccessIterator __first, _RandomAccessIterator __nth,
+    1958              :                   _RandomAccessIterator __last, _Size __depth_limit,
+    1959              :                   _Compare __comp)
+    1960              :     {
+    1961              :       while (__last - __first > 3)
+    1962              :         {
+    1963              :           if (__depth_limit == 0)
+    1964              :             {
+    1965              :               std::__heap_select(__first, __nth + 1, __last, __comp);
+    1966              :               // Place the nth largest element in its final position.
+    1967              :               std::iter_swap(__first, __nth);
+    1968              :               return;
+    1969              :             }
+    1970              :           --__depth_limit;
+    1971              :           _RandomAccessIterator __cut =
+    1972              :             std::__unguarded_partition_pivot(__first, __last, __comp);
+    1973              :           if (__cut <= __nth)
+    1974              :             __first = __cut;
+    1975              :           else
+    1976              :             __last = __cut;
+    1977              :         }
+    1978              :       std::__insertion_sort(__first, __last, __comp);
+    1979              :     }
+    1980              : 
+    1981              :   /// @endcond
+    1982              : 
+    1983              :   // nth_element
+    1984              : 
+    1985              :   // lower_bound moved to stl_algobase.h
+    1986              : 
+    1987              :   /**
+    1988              :    *  @brief Finds the first position in which `__val` could be inserted
+    1989              :    *         without changing the ordering.
+    1990              :    *  @ingroup binary_search_algorithms
+    1991              :    *  @param  __first   An iterator to the start of a sorted range.
+    1992              :    *  @param  __last    A past-the-end iterator for the sorted range.
+    1993              :    *  @param  __val     The search term.
+    1994              :    *  @param  __comp    A functor to use for comparisons.
+    1995              :    *  @return An iterator pointing to the first element _not less than_
+    1996              :    *           `__val`, or `end()` if every element is less than `__val`.
+    1997              :    *  @ingroup binary_search_algorithms
+    1998              :    *
+    1999              :    *  The comparison function should have the same effects on ordering as
+    2000              :    *  the function used for the initial sort.
+    2001              :   */
+    2002              :   template<typename _ForwardIterator, typename _Tp, typename _Compare>
+    2003              :     _GLIBCXX20_CONSTEXPR
+    2004              :     inline _ForwardIterator
+    2005              :     lower_bound(_ForwardIterator __first, _ForwardIterator __last,
+    2006              :                 const _Tp& __val, _Compare __comp)
+    2007              :     {
+    2008              :       // concept requirements
+    2009              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2010              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    2011              :         typename iterator_traits<_ForwardIterator>::value_type, _Tp>)
+    2012              :       __glibcxx_requires_partitioned_lower_pred(__first, __last,
+    2013              :                                                 __val, __comp);
+    2014              : 
+    2015              :       return std::__lower_bound(__first, __last, __val,
+    2016              :                                 __gnu_cxx::__ops::__iter_comp_val(__comp));
+    2017              :     }
+    2018              : 
+    2019              :   template<typename _ForwardIterator, typename _Tp, typename _Compare>
+    2020              :     _GLIBCXX20_CONSTEXPR
+    2021              :     _ForwardIterator
+    2022            0 :     __upper_bound(_ForwardIterator __first, _ForwardIterator __last,
+    2023              :                   const _Tp& __val, _Compare __comp)
+    2024              :     {
+    2025              :       typedef typename iterator_traits<_ForwardIterator>::difference_type
+    2026              :         _DistanceType;
+    2027              : 
+    2028            0 :       _DistanceType __len = std::distance(__first, __last);
+    2029              : 
+    2030            0 :       while (__len > 0)
+    2031              :         {
+    2032            0 :           _DistanceType __half = __len >> 1;
+    2033            0 :           _ForwardIterator __middle = __first;
+    2034              :           std::advance(__middle, __half);
+    2035            0 :           if (__comp(__val, __middle))
+    2036            0 :             __len = __half;
+    2037              :           else
+    2038              :             {
+    2039            0 :               __first = __middle;
+    2040            0 :               ++__first;
+    2041            0 :               __len = __len - __half - 1;
+    2042              :             }
+    2043              :         }
+    2044            0 :       return __first;
+    2045              :     }
+    2046              : 
+    2047              :   /**
+    2048              :    *  @brief Finds the last position in which @p __val could be inserted
+    2049              :    *         without changing the ordering.
+    2050              :    *  @ingroup binary_search_algorithms
+    2051              :    *  @param  __first   An iterator.
+    2052              :    *  @param  __last    Another iterator.
+    2053              :    *  @param  __val     The search term.
+    2054              :    *  @return  An iterator pointing to the first element greater than @p __val,
+    2055              :    *           or end() if no elements are greater than @p __val.
+    2056              :    *  @ingroup binary_search_algorithms
+    2057              :   */
+    2058              :   template<typename _ForwardIterator, typename _Tp>
+    2059              :     _GLIBCXX20_CONSTEXPR
+    2060              :     inline _ForwardIterator
+    2061              :     upper_bound(_ForwardIterator __first, _ForwardIterator __last,
+    2062              :                 const _Tp& __val)
+    2063              :     {
+    2064              :       // concept requirements
+    2065              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2066              :       __glibcxx_function_requires(_LessThanOpConcept<
+    2067              :         _Tp, typename iterator_traits<_ForwardIterator>::value_type>)
+    2068              :       __glibcxx_requires_partitioned_upper(__first, __last, __val);
+    2069              : 
+    2070              :       return std::__upper_bound(__first, __last, __val,
+    2071              :                                 __gnu_cxx::__ops::__val_less_iter());
+    2072              :     }
+    2073              : 
+    2074              :   /**
+    2075              :    *  @brief Finds the last position in which @p __val could be inserted
+    2076              :    *         without changing the ordering.
+    2077              :    *  @ingroup binary_search_algorithms
+    2078              :    *  @param  __first   An iterator.
+    2079              :    *  @param  __last    Another iterator.
+    2080              :    *  @param  __val     The search term.
+    2081              :    *  @param  __comp    A functor to use for comparisons.
+    2082              :    *  @return  An iterator pointing to the first element greater than @p __val,
+    2083              :    *           or end() if no elements are greater than @p __val.
+    2084              :    *  @ingroup binary_search_algorithms
+    2085              :    *
+    2086              :    *  The comparison function should have the same effects on ordering as
+    2087              :    *  the function used for the initial sort.
+    2088              :   */
+    2089              :   template<typename _ForwardIterator, typename _Tp, typename _Compare>
+    2090              :     _GLIBCXX20_CONSTEXPR
+    2091              :     inline _ForwardIterator
+    2092              :     upper_bound(_ForwardIterator __first, _ForwardIterator __last,
+    2093              :                 const _Tp& __val, _Compare __comp)
+    2094              :     {
+    2095              :       // concept requirements
+    2096              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2097              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    2098              :         _Tp, typename iterator_traits<_ForwardIterator>::value_type>)
+    2099              :       __glibcxx_requires_partitioned_upper_pred(__first, __last,
+    2100              :                                                 __val, __comp);
+    2101              : 
+    2102              :       return std::__upper_bound(__first, __last, __val,
+    2103              :                                 __gnu_cxx::__ops::__val_comp_iter(__comp));
+    2104              :     }
+    2105              : 
+    2106              :   template<typename _ForwardIterator, typename _Tp,
+    2107              :            typename _CompareItTp, typename _CompareTpIt>
+    2108              :     _GLIBCXX20_CONSTEXPR
+    2109              :     pair<_ForwardIterator, _ForwardIterator>
+    2110              :     __equal_range(_ForwardIterator __first, _ForwardIterator __last,
+    2111              :                   const _Tp& __val,
+    2112              :                   _CompareItTp __comp_it_val, _CompareTpIt __comp_val_it)
+    2113              :     {
+    2114              :       typedef typename iterator_traits<_ForwardIterator>::difference_type
+    2115              :         _DistanceType;
+    2116              : 
+    2117              :       _DistanceType __len = std::distance(__first, __last);
+    2118              : 
+    2119              :       while (__len > 0)
+    2120              :         {
+    2121              :           _DistanceType __half = __len >> 1;
+    2122              :           _ForwardIterator __middle = __first;
+    2123              :           std::advance(__middle, __half);
+    2124              :           if (__comp_it_val(__middle, __val))
+    2125              :             {
+    2126              :               __first = __middle;
+    2127              :               ++__first;
+    2128              :               __len = __len - __half - 1;
+    2129              :             }
+    2130              :           else if (__comp_val_it(__val, __middle))
+    2131              :             __len = __half;
+    2132              :           else
+    2133              :             {
+    2134              :               _ForwardIterator __left
+    2135              :                 = std::__lower_bound(__first, __middle, __val, __comp_it_val);
+    2136              :               std::advance(__first, __len);
+    2137              :               _ForwardIterator __right
+    2138              :                 = std::__upper_bound(++__middle, __first, __val, __comp_val_it);
+    2139              :               return pair<_ForwardIterator, _ForwardIterator>(__left, __right);
+    2140              :             }
+    2141              :         }
+    2142              :       return pair<_ForwardIterator, _ForwardIterator>(__first, __first);
+    2143              :     }
+    2144              : 
+    2145              :   /**
+    2146              :    *  @brief Finds the largest subrange in which @p __val could be inserted
+    2147              :    *         at any place in it without changing the ordering.
+    2148              :    *  @ingroup binary_search_algorithms
+    2149              :    *  @param  __first   An iterator.
+    2150              :    *  @param  __last    Another iterator.
+    2151              :    *  @param  __val     The search term.
+    2152              :    *  @return  An pair of iterators defining the subrange.
+    2153              :    *  @ingroup binary_search_algorithms
+    2154              :    *
+    2155              :    *  This is equivalent to
+    2156              :    *  @code
+    2157              :    *    std::make_pair(lower_bound(__first, __last, __val),
+    2158              :    *                   upper_bound(__first, __last, __val))
+    2159              :    *  @endcode
+    2160              :    *  but does not actually call those functions.
+    2161              :   */
+    2162              :   template<typename _ForwardIterator, typename _Tp>
+    2163              :     _GLIBCXX20_CONSTEXPR
+    2164              :     inline pair<_ForwardIterator, _ForwardIterator>
+    2165              :     equal_range(_ForwardIterator __first, _ForwardIterator __last,
+    2166              :                 const _Tp& __val)
+    2167              :     {
+    2168              :       // concept requirements
+    2169              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2170              :       __glibcxx_function_requires(_LessThanOpConcept<
+    2171              :         typename iterator_traits<_ForwardIterator>::value_type, _Tp>)
+    2172              :       __glibcxx_function_requires(_LessThanOpConcept<
+    2173              :         _Tp, typename iterator_traits<_ForwardIterator>::value_type>)
+    2174              :       __glibcxx_requires_partitioned_lower(__first, __last, __val);
+    2175              :       __glibcxx_requires_partitioned_upper(__first, __last, __val);
+    2176              : 
+    2177              :       return std::__equal_range(__first, __last, __val,
+    2178              :                                 __gnu_cxx::__ops::__iter_less_val(),
+    2179              :                                 __gnu_cxx::__ops::__val_less_iter());
+    2180              :     }
+    2181              : 
+    2182              :   /**
+    2183              :    *  @brief Finds the largest subrange in which @p __val could be inserted
+    2184              :    *         at any place in it without changing the ordering.
+    2185              :    *  @param  __first   An iterator.
+    2186              :    *  @param  __last    Another iterator.
+    2187              :    *  @param  __val     The search term.
+    2188              :    *  @param  __comp    A functor to use for comparisons.
+    2189              :    *  @return  An pair of iterators defining the subrange.
+    2190              :    *  @ingroup binary_search_algorithms
+    2191              :    *
+    2192              :    *  This is equivalent to
+    2193              :    *  @code
+    2194              :    *    std::make_pair(lower_bound(__first, __last, __val, __comp),
+    2195              :    *                   upper_bound(__first, __last, __val, __comp))
+    2196              :    *  @endcode
+    2197              :    *  but does not actually call those functions.
+    2198              :   */
+    2199              :   template<typename _ForwardIterator, typename _Tp, typename _Compare>
+    2200              :     _GLIBCXX20_CONSTEXPR
+    2201              :     inline pair<_ForwardIterator, _ForwardIterator>
+    2202              :     equal_range(_ForwardIterator __first, _ForwardIterator __last,
+    2203              :                 const _Tp& __val, _Compare __comp)
+    2204              :     {
+    2205              :       // concept requirements
+    2206              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2207              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    2208              :         typename iterator_traits<_ForwardIterator>::value_type, _Tp>)
+    2209              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    2210              :         _Tp, typename iterator_traits<_ForwardIterator>::value_type>)
+    2211              :       __glibcxx_requires_partitioned_lower_pred(__first, __last,
+    2212              :                                                 __val, __comp);
+    2213              :       __glibcxx_requires_partitioned_upper_pred(__first, __last,
+    2214              :                                                 __val, __comp);
+    2215              : 
+    2216              :       return std::__equal_range(__first, __last, __val,
+    2217              :                                 __gnu_cxx::__ops::__iter_comp_val(__comp),
+    2218              :                                 __gnu_cxx::__ops::__val_comp_iter(__comp));
+    2219              :     }
+    2220              : 
+    2221              :   /**
+    2222              :    *  @brief Determines whether an element exists in a range.
+    2223              :    *  @ingroup binary_search_algorithms
+    2224              :    *  @param  __first   An iterator.
+    2225              :    *  @param  __last    Another iterator.
+    2226              :    *  @param  __val     The search term.
+    2227              :    *  @return True if @p __val (or its equivalent) is in [@p
+    2228              :    *  __first,@p __last ].
+    2229              :    *
+    2230              :    *  Note that this does not actually return an iterator to @p __val.  For
+    2231              :    *  that, use std::find or a container's specialized find member functions.
+    2232              :   */
+    2233              :   template<typename _ForwardIterator, typename _Tp>
+    2234              :     _GLIBCXX20_CONSTEXPR
+    2235              :     bool
+    2236            0 :     binary_search(_ForwardIterator __first, _ForwardIterator __last,
+    2237              :                   const _Tp& __val)
+    2238              :     {
+    2239              :       // concept requirements
+    2240              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2241              :       __glibcxx_function_requires(_LessThanOpConcept<
+    2242              :         _Tp, typename iterator_traits<_ForwardIterator>::value_type>)
+    2243              :       __glibcxx_requires_partitioned_lower(__first, __last, __val);
+    2244              :       __glibcxx_requires_partitioned_upper(__first, __last, __val);
+    2245              : 
+    2246              :       _ForwardIterator __i
+    2247            0 :         = std::__lower_bound(__first, __last, __val,
+    2248            0 :                              __gnu_cxx::__ops::__iter_less_val());
+    2249            0 :       return __i != __last && !(__val < *__i);
+    2250              :     }
+    2251              : 
+    2252              :   /**
+    2253              :    *  @brief Determines whether an element exists in a range.
+    2254              :    *  @ingroup binary_search_algorithms
+    2255              :    *  @param  __first   An iterator.
+    2256              :    *  @param  __last    Another iterator.
+    2257              :    *  @param  __val     The search term.
+    2258              :    *  @param  __comp    A functor to use for comparisons.
+    2259              :    *  @return  True if @p __val (or its equivalent) is in @p [__first,__last].
+    2260              :    *
+    2261              :    *  Note that this does not actually return an iterator to @p __val.  For
+    2262              :    *  that, use std::find or a container's specialized find member functions.
+    2263              :    *
+    2264              :    *  The comparison function should have the same effects on ordering as
+    2265              :    *  the function used for the initial sort.
+    2266              :   */
+    2267              :   template<typename _ForwardIterator, typename _Tp, typename _Compare>
+    2268              :     _GLIBCXX20_CONSTEXPR
+    2269              :     bool
+    2270              :     binary_search(_ForwardIterator __first, _ForwardIterator __last,
+    2271              :                   const _Tp& __val, _Compare __comp)
+    2272              :     {
+    2273              :       // concept requirements
+    2274              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    2275              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    2276              :         _Tp, typename iterator_traits<_ForwardIterator>::value_type>)
+    2277              :       __glibcxx_requires_partitioned_lower_pred(__first, __last,
+    2278              :                                                 __val, __comp);
+    2279              :       __glibcxx_requires_partitioned_upper_pred(__first, __last,
+    2280              :                                                 __val, __comp);
+    2281              : 
+    2282              :       _ForwardIterator __i
+    2283              :         = std::__lower_bound(__first, __last, __val,
+    2284              :                              __gnu_cxx::__ops::__iter_comp_val(__comp));
+    2285              :       return __i != __last && !bool(__comp(__val, *__i));
+    2286              :     }
+    2287              : 
+    2288              :   // merge
+    2289              : 
+    2290              :   /// This is a helper function for the __merge_adaptive routines.
+    2291              :   template<typename _InputIterator1, typename _InputIterator2,
+    2292              :            typename _OutputIterator, typename _Compare>
+    2293              :     void
+    2294           46 :     __move_merge_adaptive(_InputIterator1 __first1, _InputIterator1 __last1,
+    2295              :                           _InputIterator2 __first2, _InputIterator2 __last2,
+    2296              :                           _OutputIterator __result, _Compare __comp)
+    2297              :     {
+    2298          888 :       while (__first1 != __last1 && __first2 != __last2)
+    2299              :         {
+    2300          842 :           if (__comp(__first2, __first1))
+    2301              :             {
+    2302          450 :               *__result = _GLIBCXX_MOVE(*__first2);
+    2303          450 :               ++__first2;
+    2304              :             }
+    2305              :           else
+    2306              :             {
+    2307          392 :               *__result = _GLIBCXX_MOVE(*__first1);
+    2308          392 :               ++__first1;
+    2309              :             }
+    2310          842 :           ++__result;
+    2311              :         }
+    2312           46 :       if (__first1 != __last1)
+    2313           46 :         _GLIBCXX_MOVE3(__first1, __last1, __result);
+    2314           46 :     }
+    2315              : 
+    2316              :   /// This is a helper function for the __merge_adaptive routines.
+    2317              :   template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
+    2318              :            typename _BidirectionalIterator3, typename _Compare>
+    2319              :     void
+    2320           12 :     __move_merge_adaptive_backward(_BidirectionalIterator1 __first1,
+    2321              :                                    _BidirectionalIterator1 __last1,
+    2322              :                                    _BidirectionalIterator2 __first2,
+    2323              :                                    _BidirectionalIterator2 __last2,
+    2324              :                                    _BidirectionalIterator3 __result,
+    2325              :                                    _Compare __comp)
+    2326              :     {
+    2327           12 :       if (__first1 == __last1)
+    2328              :         {
+    2329            0 :           _GLIBCXX_MOVE_BACKWARD3(__first2, __last2, __result);
+    2330            0 :           return;
+    2331              :         }
+    2332           12 :       else if (__first2 == __last2)
+    2333            0 :         return;
+    2334              : 
+    2335           12 :       --__last1;
+    2336           12 :       --__last2;
+    2337              :       while (true)
+    2338              :         {
+    2339          240 :           if (__comp(__last2, __last1))
+    2340              :             {
+    2341          120 :               *--__result = _GLIBCXX_MOVE(*__last1);
+    2342          120 :               if (__first1 == __last1)
+    2343              :                 {
+    2344            0 :                   _GLIBCXX_MOVE_BACKWARD3(__first2, ++__last2, __result);
+    2345            0 :                   return;
+    2346              :                 }
+    2347          120 :               --__last1;
+    2348              :             }
+    2349              :           else
+    2350              :             {
+    2351          120 :               *--__result = _GLIBCXX_MOVE(*__last2);
+    2352          120 :               if (__first2 == __last2)
+    2353           12 :                 return;
+    2354          108 :               --__last2;
+    2355              :             }
+    2356              :         }
+    2357              :     }
+    2358              : 
+    2359              :   /// This is a helper function for the merge routines.
+    2360              :   template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
+    2361              :            typename _Distance>
+    2362              :     _BidirectionalIterator1
+    2363            0 :     __rotate_adaptive(_BidirectionalIterator1 __first,
+    2364              :                       _BidirectionalIterator1 __middle,
+    2365              :                       _BidirectionalIterator1 __last,
+    2366              :                       _Distance __len1, _Distance __len2,
+    2367              :                       _BidirectionalIterator2 __buffer,
+    2368              :                       _Distance __buffer_size)
+    2369              :     {
+    2370              :       _BidirectionalIterator2 __buffer_end;
+    2371            0 :       if (__len1 > __len2 && __len2 <= __buffer_size)
+    2372              :         {
+    2373            0 :           if (__len2)
+    2374              :             {
+    2375            0 :               __buffer_end = _GLIBCXX_MOVE3(__middle, __last, __buffer);
+    2376            0 :               _GLIBCXX_MOVE_BACKWARD3(__first, __middle, __last);
+    2377            0 :               return _GLIBCXX_MOVE3(__buffer, __buffer_end, __first);
+    2378              :             }
+    2379              :           else
+    2380            0 :             return __first;
+    2381              :         }
+    2382            0 :       else if (__len1 <= __buffer_size)
+    2383              :         {
+    2384            0 :           if (__len1)
+    2385              :             {
+    2386            0 :               __buffer_end = _GLIBCXX_MOVE3(__first, __middle, __buffer);
+    2387            0 :               _GLIBCXX_MOVE3(__middle, __last, __first);
+    2388            0 :               return _GLIBCXX_MOVE_BACKWARD3(__buffer, __buffer_end, __last);
+    2389              :             }
+    2390              :           else
+    2391            0 :             return __last;
+    2392              :         }
+    2393              :       else
+    2394            0 :         return std::rotate(__first, __middle, __last);
+    2395              :     }
+    2396              : 
+    2397              :   /// This is a helper function for the merge routines.
+    2398              :   template<typename _BidirectionalIterator, typename _Distance,
+    2399              :            typename _Pointer, typename _Compare>
+    2400              :     void
+    2401           58 :     __merge_adaptive(_BidirectionalIterator __first,
+    2402              :                      _BidirectionalIterator __middle,
+    2403              :                      _BidirectionalIterator __last,
+    2404              :                      _Distance __len1, _Distance __len2,
+    2405              :                      _Pointer __buffer, _Compare __comp)
+    2406              :     {
+    2407           58 :       if (__len1 <= __len2)
+    2408              :         {
+    2409           46 :           _Pointer __buffer_end = _GLIBCXX_MOVE3(__first, __middle, __buffer);
+    2410           46 :           std::__move_merge_adaptive(__buffer, __buffer_end, __middle, __last,
+    2411              :                                      __first, __comp);
+    2412              :         }
+    2413              :       else
+    2414              :         {
+    2415           12 :           _Pointer __buffer_end = _GLIBCXX_MOVE3(__middle, __last, __buffer);
+    2416           12 :           std::__move_merge_adaptive_backward(__first, __middle, __buffer,
+    2417              :                                               __buffer_end, __last, __comp);
+    2418              :         }
+    2419           58 :     }
+    2420              : 
+    2421              :   template<typename _BidirectionalIterator, typename _Distance,
+    2422              :            typename _Pointer, typename _Compare>
+    2423              :     void
+    2424            0 :     __merge_adaptive_resize(_BidirectionalIterator __first,
+    2425              :                             _BidirectionalIterator __middle,
+    2426              :                             _BidirectionalIterator __last,
+    2427              :                             _Distance __len1, _Distance __len2,
+    2428              :                             _Pointer __buffer, _Distance __buffer_size,
+    2429              :                             _Compare __comp)
+    2430              :     {
+    2431            0 :       if (__len1 <= __buffer_size || __len2 <= __buffer_size)
+    2432            0 :         std::__merge_adaptive(__first, __middle, __last,
+    2433              :                               __len1, __len2, __buffer, __comp);
+    2434              :       else
+    2435              :         {
+    2436            0 :           _BidirectionalIterator __first_cut = __first;
+    2437            0 :           _BidirectionalIterator __second_cut = __middle;
+    2438            0 :           _Distance __len11 = 0;
+    2439            0 :           _Distance __len22 = 0;
+    2440            0 :           if (__len1 > __len2)
+    2441              :             {
+    2442            0 :               __len11 = __len1 / 2;
+    2443              :               std::advance(__first_cut, __len11);
+    2444              :               __second_cut
+    2445            0 :                 = std::__lower_bound(__middle, __last, *__first_cut,
+    2446              :                                      __gnu_cxx::__ops::__iter_comp_val(__comp));
+    2447            0 :               __len22 = std::distance(__middle, __second_cut);
+    2448              :             }
+    2449              :           else
+    2450              :             {
+    2451            0 :               __len22 = __len2 / 2;
+    2452              :               std::advance(__second_cut, __len22);
+    2453              :               __first_cut
+    2454            0 :                 = std::__upper_bound(__first, __middle, *__second_cut,
+    2455              :                                      __gnu_cxx::__ops::__val_comp_iter(__comp));
+    2456            0 :               __len11 = std::distance(__first, __first_cut);
+    2457              :             }
+    2458              : 
+    2459              :           _BidirectionalIterator __new_middle
+    2460            0 :             = std::__rotate_adaptive(__first_cut, __middle, __second_cut,
+    2461              :                                      _Distance(__len1 - __len11), __len22,
+    2462              :                                      __buffer, __buffer_size);
+    2463            0 :           std::__merge_adaptive_resize(__first, __first_cut, __new_middle,
+    2464              :                                        __len11, __len22,
+    2465              :                                        __buffer, __buffer_size, __comp);
+    2466            0 :           std::__merge_adaptive_resize(__new_middle, __second_cut, __last,
+    2467              :                                        _Distance(__len1 - __len11),
+    2468              :                                        _Distance(__len2 - __len22),
+    2469              :                                        __buffer, __buffer_size, __comp);
+    2470              :         }
+    2471            0 :     }
+    2472              : 
+    2473              :   /// This is a helper function for the merge routines.
+    2474              :   template<typename _BidirectionalIterator, typename _Distance,
+    2475              :            typename _Compare>
+    2476              :     void
+    2477            0 :     __merge_without_buffer(_BidirectionalIterator __first,
+    2478              :                            _BidirectionalIterator __middle,
+    2479              :                            _BidirectionalIterator __last,
+    2480              :                            _Distance __len1, _Distance __len2,
+    2481              :                            _Compare __comp)
+    2482              :     {
+    2483            0 :       if (__len1 == 0 || __len2 == 0)
+    2484            0 :         return;
+    2485              : 
+    2486            0 :       if (__len1 + __len2 == 2)
+    2487              :         {
+    2488            0 :           if (__comp(__middle, __first))
+    2489            0 :             std::iter_swap(__first, __middle);
+    2490            0 :           return;
+    2491              :         }
+    2492              : 
+    2493            0 :       _BidirectionalIterator __first_cut = __first;
+    2494            0 :       _BidirectionalIterator __second_cut = __middle;
+    2495            0 :       _Distance __len11 = 0;
+    2496            0 :       _Distance __len22 = 0;
+    2497            0 :       if (__len1 > __len2)
+    2498              :         {
+    2499            0 :           __len11 = __len1 / 2;
+    2500              :           std::advance(__first_cut, __len11);
+    2501              :           __second_cut
+    2502            0 :             = std::__lower_bound(__middle, __last, *__first_cut,
+    2503              :                                  __gnu_cxx::__ops::__iter_comp_val(__comp));
+    2504            0 :           __len22 = std::distance(__middle, __second_cut);
+    2505              :         }
+    2506              :       else
+    2507              :         {
+    2508            0 :           __len22 = __len2 / 2;
+    2509              :           std::advance(__second_cut, __len22);
+    2510              :           __first_cut
+    2511            0 :             = std::__upper_bound(__first, __middle, *__second_cut,
+    2512              :                                  __gnu_cxx::__ops::__val_comp_iter(__comp));
+    2513            0 :           __len11 = std::distance(__first, __first_cut);
+    2514              :         }
+    2515              : 
+    2516              :       _BidirectionalIterator __new_middle
+    2517            0 :         = std::rotate(__first_cut, __middle, __second_cut);
+    2518            0 :       std::__merge_without_buffer(__first, __first_cut, __new_middle,
+    2519              :                                   __len11, __len22, __comp);
+    2520            0 :       std::__merge_without_buffer(__new_middle, __second_cut, __last,
+    2521              :                                   __len1 - __len11, __len2 - __len22, __comp);
+    2522              :     }
+    2523              : 
+    2524              :   template<typename _BidirectionalIterator, typename _Compare>
+    2525              :     void
+    2526              :     __inplace_merge(_BidirectionalIterator __first,
+    2527              :                     _BidirectionalIterator __middle,
+    2528              :                     _BidirectionalIterator __last,
+    2529              :                     _Compare __comp)
+    2530              :     {
+    2531              :       typedef typename iterator_traits<_BidirectionalIterator>::value_type
+    2532              :           _ValueType;
+    2533              :       typedef typename iterator_traits<_BidirectionalIterator>::difference_type
+    2534              :           _DistanceType;
+    2535              : 
+    2536              :       if (__first == __middle || __middle == __last)
+    2537              :         return;
+    2538              : 
+    2539              :       const _DistanceType __len1 = std::distance(__first, __middle);
+    2540              :       const _DistanceType __len2 = std::distance(__middle, __last);
+    2541              : 
+    2542              : #if _GLIBCXX_HOSTED
+    2543              :       typedef _Temporary_buffer<_BidirectionalIterator, _ValueType> _TmpBuf;
+    2544              :       // __merge_adaptive will use a buffer for the smaller of
+    2545              :       // [first,middle) and [middle,last).
+    2546              :       _TmpBuf __buf(__first, std::min(__len1, __len2));
+    2547              : 
+    2548              :       if (__builtin_expect(__buf.size() == __buf.requested_size(), true))
+    2549              :         std::__merge_adaptive
+    2550              :           (__first, __middle, __last, __len1, __len2, __buf.begin(), __comp);
+    2551              :       else if (__builtin_expect(__buf.begin() == 0, false))
+    2552              :         std::__merge_without_buffer
+    2553              :           (__first, __middle, __last, __len1, __len2, __comp);
+    2554              :       else
+    2555              :         std::__merge_adaptive_resize
+    2556              :           (__first, __middle, __last, __len1, __len2, __buf.begin(),
+    2557              :            _DistanceType(__buf.size()), __comp);
+    2558              : #else
+    2559              :       std::__merge_without_buffer
+    2560              :         (__first, __middle, __last, __len1, __len2, __comp);
+    2561              : #endif
+    2562              :     }
+    2563              : 
+    2564              :   /**
+    2565              :    *  @brief Merges two sorted ranges in place.
+    2566              :    *  @ingroup sorting_algorithms
+    2567              :    *  @param  __first   An iterator.
+    2568              :    *  @param  __middle  Another iterator.
+    2569              :    *  @param  __last    Another iterator.
+    2570              :    *  @return  Nothing.
+    2571              :    *
+    2572              :    *  Merges two sorted and consecutive ranges, [__first,__middle) and
+    2573              :    *  [__middle,__last), and puts the result in [__first,__last).  The
+    2574              :    *  output will be sorted.  The sort is @e stable, that is, for
+    2575              :    *  equivalent elements in the two ranges, elements from the first
+    2576              :    *  range will always come before elements from the second.
+    2577              :    *
+    2578              :    *  If enough additional memory is available, this takes (__last-__first)-1
+    2579              :    *  comparisons.  Otherwise an NlogN algorithm is used, where N is
+    2580              :    *  distance(__first,__last).
+    2581              :   */
+    2582              :   template<typename _BidirectionalIterator>
+    2583              :     inline void
+    2584              :     inplace_merge(_BidirectionalIterator __first,
+    2585              :                   _BidirectionalIterator __middle,
+    2586              :                   _BidirectionalIterator __last)
+    2587              :     {
+    2588              :       // concept requirements
+    2589              :       __glibcxx_function_requires(_Mutable_BidirectionalIteratorConcept<
+    2590              :             _BidirectionalIterator>)
+    2591              :       __glibcxx_function_requires(_LessThanComparableConcept<
+    2592              :             typename iterator_traits<_BidirectionalIterator>::value_type>)
+    2593              :       __glibcxx_requires_sorted(__first, __middle);
+    2594              :       __glibcxx_requires_sorted(__middle, __last);
+    2595              :       __glibcxx_requires_irreflexive(__first, __last);
+    2596              : 
+    2597              :       std::__inplace_merge(__first, __middle, __last,
+    2598              :                            __gnu_cxx::__ops::__iter_less_iter());
+    2599              :     }
+    2600              : 
+    2601              :   /**
+    2602              :    *  @brief Merges two sorted ranges in place.
+    2603              :    *  @ingroup sorting_algorithms
+    2604              :    *  @param  __first   An iterator.
+    2605              :    *  @param  __middle  Another iterator.
+    2606              :    *  @param  __last    Another iterator.
+    2607              :    *  @param  __comp    A functor to use for comparisons.
+    2608              :    *  @return  Nothing.
+    2609              :    *
+    2610              :    *  Merges two sorted and consecutive ranges, [__first,__middle) and
+    2611              :    *  [middle,last), and puts the result in [__first,__last).  The output will
+    2612              :    *  be sorted.  The sort is @e stable, that is, for equivalent
+    2613              :    *  elements in the two ranges, elements from the first range will always
+    2614              :    *  come before elements from the second.
+    2615              :    *
+    2616              :    *  If enough additional memory is available, this takes (__last-__first)-1
+    2617              :    *  comparisons.  Otherwise an NlogN algorithm is used, where N is
+    2618              :    *  distance(__first,__last).
+    2619              :    *
+    2620              :    *  The comparison function should have the same effects on ordering as
+    2621              :    *  the function used for the initial sort.
+    2622              :   */
+    2623              :   template<typename _BidirectionalIterator, typename _Compare>
+    2624              :     inline void
+    2625              :     inplace_merge(_BidirectionalIterator __first,
+    2626              :                   _BidirectionalIterator __middle,
+    2627              :                   _BidirectionalIterator __last,
+    2628              :                   _Compare __comp)
+    2629              :     {
+    2630              :       // concept requirements
+    2631              :       __glibcxx_function_requires(_Mutable_BidirectionalIteratorConcept<
+    2632              :             _BidirectionalIterator>)
+    2633              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    2634              :             typename iterator_traits<_BidirectionalIterator>::value_type,
+    2635              :             typename iterator_traits<_BidirectionalIterator>::value_type>)
+    2636              :       __glibcxx_requires_sorted_pred(__first, __middle, __comp);
+    2637              :       __glibcxx_requires_sorted_pred(__middle, __last, __comp);
+    2638              :       __glibcxx_requires_irreflexive_pred(__first, __last, __comp);
+    2639              : 
+    2640              :       std::__inplace_merge(__first, __middle, __last,
+    2641              :                            __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    2642              :     }
+    2643              : 
+    2644              : 
+    2645              :   /// This is a helper function for the __merge_sort_loop routines.
+    2646              :   template<typename _InputIterator, typename _OutputIterator,
+    2647              :            typename _Compare>
+    2648              :     _OutputIterator
+    2649          192 :     __move_merge(_InputIterator __first1, _InputIterator __last1,
+    2650              :                  _InputIterator __first2, _InputIterator __last2,
+    2651              :                  _OutputIterator __result, _Compare __comp)
+    2652              :     {
+    2653         1260 :       while (__first1 != __last1 && __first2 != __last2)
+    2654              :         {
+    2655         1068 :           if (__comp(__first2, __first1))
+    2656              :             {
+    2657          468 :               *__result = _GLIBCXX_MOVE(*__first2);
+    2658          468 :               ++__first2;
+    2659              :             }
+    2660              :           else
+    2661              :             {
+    2662          600 :               *__result = _GLIBCXX_MOVE(*__first1);
+    2663          600 :               ++__first1;
+    2664              :             }
+    2665         1068 :           ++__result;
+    2666              :         }
+    2667          192 :       return _GLIBCXX_MOVE3(__first2, __last2,
+    2668              :                             _GLIBCXX_MOVE3(__first1, __last1,
+    2669              :                                            __result));
+    2670              :     }
+    2671              : 
+    2672              :   template<typename _RandomAccessIterator1, typename _RandomAccessIterator2,
+    2673              :            typename _Distance, typename _Compare>
+    2674              :     void
+    2675          144 :     __merge_sort_loop(_RandomAccessIterator1 __first,
+    2676              :                       _RandomAccessIterator1 __last,
+    2677              :                       _RandomAccessIterator2 __result, _Distance __step_size,
+    2678              :                       _Compare __comp)
+    2679              :     {
+    2680          144 :       const _Distance __two_step = 2 * __step_size;
+    2681              : 
+    2682          192 :       while (__last - __first >= __two_step)
+    2683              :         {
+    2684           48 :           __result = std::__move_merge(__first, __first + __step_size,
+    2685            0 :                                        __first + __step_size,
+    2686            0 :                                        __first + __two_step,
+    2687              :                                        __result, __comp);
+    2688           48 :           __first += __two_step;
+    2689              :         }
+    2690          144 :       __step_size = std::min(_Distance(__last - __first), __step_size);
+    2691              : 
+    2692          144 :       std::__move_merge(__first, __first + __step_size,
+    2693           72 :                         __first + __step_size, __last, __result, __comp);
+    2694          144 :     }
+    2695              : 
+    2696              :   template<typename _RandomAccessIterator, typename _Distance,
+    2697              :            typename _Compare>
+    2698              :     _GLIBCXX20_CONSTEXPR
+    2699              :     void
+    2700          116 :     __chunk_insertion_sort(_RandomAccessIterator __first,
+    2701              :                            _RandomAccessIterator __last,
+    2702              :                            _Distance __chunk_size, _Compare __comp)
+    2703              :     {
+    2704          236 :       while (__last - __first >= __chunk_size)
+    2705              :         {
+    2706          120 :           std::__insertion_sort(__first, __first + __chunk_size, __comp);
+    2707          120 :           __first += __chunk_size;
+    2708              :         }
+    2709          116 :       std::__insertion_sort(__first, __last, __comp);
+    2710          116 :     }
+    2711              : 
+    2712              :   enum { _S_chunk_size = 7 };
+    2713              : 
+    2714              :   template<typename _RandomAccessIterator, typename _Pointer, typename _Compare>
+    2715              :     void
+    2716          116 :     __merge_sort_with_buffer(_RandomAccessIterator __first,
+    2717              :                              _RandomAccessIterator __last,
+    2718              :                              _Pointer __buffer, _Compare __comp)
+    2719              :     {
+    2720              :       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+    2721              :         _Distance;
+    2722              : 
+    2723          116 :       const _Distance __len = __last - __first;
+    2724          116 :       const _Pointer __buffer_last = __buffer + __len;
+    2725              : 
+    2726          116 :       _Distance __step_size = _S_chunk_size;
+    2727          116 :       std::__chunk_insertion_sort(__first, __last, __step_size, __comp);
+    2728              : 
+    2729          188 :       while (__step_size < __len)
+    2730              :         {
+    2731           72 :           std::__merge_sort_loop(__first, __last, __buffer,
+    2732              :                                  __step_size, __comp);
+    2733           72 :           __step_size *= 2;
+    2734           72 :           std::__merge_sort_loop(__buffer, __buffer_last, __first,
+    2735              :                                  __step_size, __comp);
+    2736           72 :           __step_size *= 2;
+    2737              :         }
+    2738          116 :     }
+    2739              : 
+    2740              :   template<typename _RandomAccessIterator, typename _Pointer, typename _Compare>
+    2741              :     void
+    2742           58 :     __stable_sort_adaptive(_RandomAccessIterator __first,
+    2743              :                            _RandomAccessIterator __middle,
+    2744              :                            _RandomAccessIterator __last,
+    2745              :                            _Pointer __buffer, _Compare __comp)
+    2746              :     {
+    2747           58 :       std::__merge_sort_with_buffer(__first, __middle, __buffer, __comp);
+    2748           58 :       std::__merge_sort_with_buffer(__middle, __last, __buffer, __comp);
+    2749              : 
+    2750           58 :       std::__merge_adaptive(__first, __middle, __last,
+    2751              :                             __middle - __first, __last - __middle,
+    2752              :                             __buffer, __comp);
+    2753           58 :     }
+    2754              : 
+    2755              :   template<typename _RandomAccessIterator, typename _Pointer,
+    2756              :            typename _Distance, typename _Compare>
+    2757              :     void
+    2758            0 :     __stable_sort_adaptive_resize(_RandomAccessIterator __first,
+    2759              :                                   _RandomAccessIterator __last,
+    2760              :                                   _Pointer __buffer, _Distance __buffer_size,
+    2761              :                                   _Compare __comp)
+    2762              :     {
+    2763            0 :       const _Distance __len = (__last - __first + 1) / 2;
+    2764            0 :       const _RandomAccessIterator __middle = __first + __len;
+    2765            0 :       if (__len > __buffer_size)
+    2766              :         {
+    2767            0 :           std::__stable_sort_adaptive_resize(__first, __middle, __buffer,
+    2768              :                                              __buffer_size, __comp);
+    2769            0 :           std::__stable_sort_adaptive_resize(__middle, __last, __buffer,
+    2770              :                                              __buffer_size, __comp);
+    2771            0 :           std::__merge_adaptive_resize(__first, __middle, __last,
+    2772            0 :                                        _Distance(__middle - __first),
+    2773            0 :                                        _Distance(__last - __middle),
+    2774              :                                        __buffer, __buffer_size,
+    2775              :                                        __comp);
+    2776              :         }
+    2777              :       else
+    2778            0 :         std::__stable_sort_adaptive(__first, __middle, __last,
+    2779              :                                     __buffer, __comp);
+    2780            0 :     }
+    2781              : 
+    2782              :   /// This is a helper function for the stable sorting routines.
+    2783              :   template<typename _RandomAccessIterator, typename _Compare>
+    2784              :     void
+    2785            0 :     __inplace_stable_sort(_RandomAccessIterator __first,
+    2786              :                           _RandomAccessIterator __last, _Compare __comp)
+    2787              :     {
+    2788            0 :       if (__last - __first < 15)
+    2789              :         {
+    2790            0 :           std::__insertion_sort(__first, __last, __comp);
+    2791            0 :           return;
+    2792              :         }
+    2793            0 :       _RandomAccessIterator __middle = __first + (__last - __first) / 2;
+    2794            0 :       std::__inplace_stable_sort(__first, __middle, __comp);
+    2795            0 :       std::__inplace_stable_sort(__middle, __last, __comp);
+    2796            0 :       std::__merge_without_buffer(__first, __middle, __last,
+    2797              :                                   __middle - __first,
+    2798              :                                   __last - __middle,
+    2799              :                                   __comp);
+    2800              :     }
+    2801              : 
+    2802              :   // stable_sort
+    2803              : 
+    2804              :   // Set algorithms: includes, set_union, set_intersection, set_difference,
+    2805              :   // set_symmetric_difference.  All of these algorithms have the precondition
+    2806              :   // that their input ranges are sorted and the postcondition that their output
+    2807              :   // ranges are sorted.
+    2808              : 
+    2809              :   template<typename _InputIterator1, typename _InputIterator2,
+    2810              :            typename _Compare>
+    2811              :     _GLIBCXX20_CONSTEXPR
+    2812              :     bool
+    2813              :     __includes(_InputIterator1 __first1, _InputIterator1 __last1,
+    2814              :                _InputIterator2 __first2, _InputIterator2 __last2,
+    2815              :                _Compare __comp)
+    2816              :     {
+    2817              :       while (__first1 != __last1 && __first2 != __last2)
+    2818              :         {
+    2819              :           if (__comp(__first2, __first1))
+    2820              :             return false;
+    2821              :           if (!__comp(__first1, __first2))
+    2822              :             ++__first2;
+    2823              :           ++__first1;
+    2824              :         }
+    2825              : 
+    2826              :       return __first2 == __last2;
+    2827              :     }
+    2828              : 
+    2829              :   /**
+    2830              :    *  @brief Determines whether all elements of a sequence exists in a range.
+    2831              :    *  @param  __first1  Start of search range.
+    2832              :    *  @param  __last1   End of search range.
+    2833              :    *  @param  __first2  Start of sequence
+    2834              :    *  @param  __last2   End of sequence.
+    2835              :    *  @return  True if each element in [__first2,__last2) is contained in order
+    2836              :    *  within [__first1,__last1).  False otherwise.
+    2837              :    *  @ingroup set_algorithms
+    2838              :    *
+    2839              :    *  This operation expects both [__first1,__last1) and
+    2840              :    *  [__first2,__last2) to be sorted.  Searches for the presence of
+    2841              :    *  each element in [__first2,__last2) within [__first1,__last1).
+    2842              :    *  The iterators over each range only move forward, so this is a
+    2843              :    *  linear algorithm.  If an element in [__first2,__last2) is not
+    2844              :    *  found before the search iterator reaches @p __last2, false is
+    2845              :    *  returned.
+    2846              :   */
+    2847              :   template<typename _InputIterator1, typename _InputIterator2>
+    2848              :     _GLIBCXX20_CONSTEXPR
+    2849              :     inline bool
+    2850              :     includes(_InputIterator1 __first1, _InputIterator1 __last1,
+    2851              :              _InputIterator2 __first2, _InputIterator2 __last2)
+    2852              :     {
+    2853              :       // concept requirements
+    2854              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+    2855              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+    2856              :       __glibcxx_function_requires(_LessThanOpConcept<
+    2857              :             typename iterator_traits<_InputIterator1>::value_type,
+    2858              :             typename iterator_traits<_InputIterator2>::value_type>)
+    2859              :       __glibcxx_function_requires(_LessThanOpConcept<
+    2860              :             typename iterator_traits<_InputIterator2>::value_type,
+    2861              :             typename iterator_traits<_InputIterator1>::value_type>)
+    2862              :       __glibcxx_requires_sorted_set(__first1, __last1, __first2);
+    2863              :       __glibcxx_requires_sorted_set(__first2, __last2, __first1);
+    2864              :       __glibcxx_requires_irreflexive2(__first1, __last1);
+    2865              :       __glibcxx_requires_irreflexive2(__first2, __last2);
+    2866              : 
+    2867              :       return std::__includes(__first1, __last1, __first2, __last2,
+    2868              :                              __gnu_cxx::__ops::__iter_less_iter());
+    2869              :     }
+    2870              : 
+    2871              :   /**
+    2872              :    *  @brief Determines whether all elements of a sequence exists in a range
+    2873              :    *  using comparison.
+    2874              :    *  @ingroup set_algorithms
+    2875              :    *  @param  __first1  Start of search range.
+    2876              :    *  @param  __last1   End of search range.
+    2877              :    *  @param  __first2  Start of sequence
+    2878              :    *  @param  __last2   End of sequence.
+    2879              :    *  @param  __comp    Comparison function to use.
+    2880              :    *  @return True if each element in [__first2,__last2) is contained
+    2881              :    *  in order within [__first1,__last1) according to comp.  False
+    2882              :    *  otherwise.  @ingroup set_algorithms
+    2883              :    *
+    2884              :    *  This operation expects both [__first1,__last1) and
+    2885              :    *  [__first2,__last2) to be sorted.  Searches for the presence of
+    2886              :    *  each element in [__first2,__last2) within [__first1,__last1),
+    2887              :    *  using comp to decide.  The iterators over each range only move
+    2888              :    *  forward, so this is a linear algorithm.  If an element in
+    2889              :    *  [__first2,__last2) is not found before the search iterator
+    2890              :    *  reaches @p __last2, false is returned.
+    2891              :   */
+    2892              :   template<typename _InputIterator1, typename _InputIterator2,
+    2893              :            typename _Compare>
+    2894              :     _GLIBCXX20_CONSTEXPR
+    2895              :     inline bool
+    2896              :     includes(_InputIterator1 __first1, _InputIterator1 __last1,
+    2897              :              _InputIterator2 __first2, _InputIterator2 __last2,
+    2898              :              _Compare __comp)
+    2899              :     {
+    2900              :       // concept requirements
+    2901              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+    2902              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+    2903              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    2904              :             typename iterator_traits<_InputIterator1>::value_type,
+    2905              :             typename iterator_traits<_InputIterator2>::value_type>)
+    2906              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    2907              :             typename iterator_traits<_InputIterator2>::value_type,
+    2908              :             typename iterator_traits<_InputIterator1>::value_type>)
+    2909              :       __glibcxx_requires_sorted_set_pred(__first1, __last1, __first2, __comp);
+    2910              :       __glibcxx_requires_sorted_set_pred(__first2, __last2, __first1, __comp);
+    2911              :       __glibcxx_requires_irreflexive_pred2(__first1, __last1, __comp);
+    2912              :       __glibcxx_requires_irreflexive_pred2(__first2, __last2, __comp);
+    2913              : 
+    2914              :       return std::__includes(__first1, __last1, __first2, __last2,
+    2915              :                              __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    2916              :     }
+    2917              : 
+    2918              :   // nth_element
+    2919              :   // merge
+    2920              :   // set_difference
+    2921              :   // set_intersection
+    2922              :   // set_union
+    2923              :   // stable_sort
+    2924              :   // set_symmetric_difference
+    2925              :   // min_element
+    2926              :   // max_element
+    2927              : 
+    2928              :   template<typename _BidirectionalIterator, typename _Compare>
+    2929              :     _GLIBCXX20_CONSTEXPR
+    2930              :     bool
+    2931              :     __next_permutation(_BidirectionalIterator __first,
+    2932              :                        _BidirectionalIterator __last, _Compare __comp)
+    2933              :     {
+    2934              :       if (__first == __last)
+    2935              :         return false;
+    2936              :       _BidirectionalIterator __i = __first;
+    2937              :       ++__i;
+    2938              :       if (__i == __last)
+    2939              :         return false;
+    2940              :       __i = __last;
+    2941              :       --__i;
+    2942              : 
+    2943              :       for(;;)
+    2944              :         {
+    2945              :           _BidirectionalIterator __ii = __i;
+    2946              :           --__i;
+    2947              :           if (__comp(__i, __ii))
+    2948              :             {
+    2949              :               _BidirectionalIterator __j = __last;
+    2950              :               while (!__comp(__i, --__j))
+    2951              :                 {}
+    2952              :               std::iter_swap(__i, __j);
+    2953              :               std::__reverse(__ii, __last,
+    2954              :                              std::__iterator_category(__first));
+    2955              :               return true;
+    2956              :             }
+    2957              :           if (__i == __first)
+    2958              :             {
+    2959              :               std::__reverse(__first, __last,
+    2960              :                              std::__iterator_category(__first));
+    2961              :               return false;
+    2962              :             }
+    2963              :         }
+    2964              :     }
+    2965              : 
+    2966              :   /**
+    2967              :    *  @brief  Permute range into the next @e dictionary ordering.
+    2968              :    *  @ingroup sorting_algorithms
+    2969              :    *  @param  __first  Start of range.
+    2970              :    *  @param  __last   End of range.
+    2971              :    *  @return  False if wrapped to first permutation, true otherwise.
+    2972              :    *
+    2973              :    *  Treats all permutations of the range as a set of @e dictionary sorted
+    2974              :    *  sequences.  Permutes the current sequence into the next one of this set.
+    2975              :    *  Returns true if there are more sequences to generate.  If the sequence
+    2976              :    *  is the largest of the set, the smallest is generated and false returned.
+    2977              :   */
+    2978              :   template<typename _BidirectionalIterator>
+    2979              :     _GLIBCXX20_CONSTEXPR
+    2980              :     inline bool
+    2981              :     next_permutation(_BidirectionalIterator __first,
+    2982              :                      _BidirectionalIterator __last)
+    2983              :     {
+    2984              :       // concept requirements
+    2985              :       __glibcxx_function_requires(_BidirectionalIteratorConcept<
+    2986              :                                   _BidirectionalIterator>)
+    2987              :       __glibcxx_function_requires(_LessThanComparableConcept<
+    2988              :             typename iterator_traits<_BidirectionalIterator>::value_type>)
+    2989              :       __glibcxx_requires_valid_range(__first, __last);
+    2990              :       __glibcxx_requires_irreflexive(__first, __last);
+    2991              : 
+    2992              :       return std::__next_permutation
+    2993              :         (__first, __last, __gnu_cxx::__ops::__iter_less_iter());
+    2994              :     }
+    2995              : 
+    2996              :   /**
+    2997              :    *  @brief  Permute range into the next @e dictionary ordering using
+    2998              :    *          comparison functor.
+    2999              :    *  @ingroup sorting_algorithms
+    3000              :    *  @param  __first  Start of range.
+    3001              :    *  @param  __last   End of range.
+    3002              :    *  @param  __comp   A comparison functor.
+    3003              :    *  @return  False if wrapped to first permutation, true otherwise.
+    3004              :    *
+    3005              :    *  Treats all permutations of the range [__first,__last) as a set of
+    3006              :    *  @e dictionary sorted sequences ordered by @p __comp.  Permutes the current
+    3007              :    *  sequence into the next one of this set.  Returns true if there are more
+    3008              :    *  sequences to generate.  If the sequence is the largest of the set, the
+    3009              :    *  smallest is generated and false returned.
+    3010              :   */
+    3011              :   template<typename _BidirectionalIterator, typename _Compare>
+    3012              :     _GLIBCXX20_CONSTEXPR
+    3013              :     inline bool
+    3014              :     next_permutation(_BidirectionalIterator __first,
+    3015              :                      _BidirectionalIterator __last, _Compare __comp)
+    3016              :     {
+    3017              :       // concept requirements
+    3018              :       __glibcxx_function_requires(_BidirectionalIteratorConcept<
+    3019              :                                   _BidirectionalIterator>)
+    3020              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    3021              :             typename iterator_traits<_BidirectionalIterator>::value_type,
+    3022              :             typename iterator_traits<_BidirectionalIterator>::value_type>)
+    3023              :       __glibcxx_requires_valid_range(__first, __last);
+    3024              :       __glibcxx_requires_irreflexive_pred(__first, __last, __comp);
+    3025              : 
+    3026              :       return std::__next_permutation
+    3027              :         (__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    3028              :     }
+    3029              : 
+    3030              :   template<typename _BidirectionalIterator, typename _Compare>
+    3031              :     _GLIBCXX20_CONSTEXPR
+    3032              :     bool
+    3033              :     __prev_permutation(_BidirectionalIterator __first,
+    3034              :                        _BidirectionalIterator __last, _Compare __comp)
+    3035              :     {
+    3036              :       if (__first == __last)
+    3037              :         return false;
+    3038              :       _BidirectionalIterator __i = __first;
+    3039              :       ++__i;
+    3040              :       if (__i == __last)
+    3041              :         return false;
+    3042              :       __i = __last;
+    3043              :       --__i;
+    3044              : 
+    3045              :       for(;;)
+    3046              :         {
+    3047              :           _BidirectionalIterator __ii = __i;
+    3048              :           --__i;
+    3049              :           if (__comp(__ii, __i))
+    3050              :             {
+    3051              :               _BidirectionalIterator __j = __last;
+    3052              :               while (!__comp(--__j, __i))
+    3053              :                 {}
+    3054              :               std::iter_swap(__i, __j);
+    3055              :               std::__reverse(__ii, __last,
+    3056              :                              std::__iterator_category(__first));
+    3057              :               return true;
+    3058              :             }
+    3059              :           if (__i == __first)
+    3060              :             {
+    3061              :               std::__reverse(__first, __last,
+    3062              :                              std::__iterator_category(__first));
+    3063              :               return false;
+    3064              :             }
+    3065              :         }
+    3066              :     }
+    3067              : 
+    3068              :   /**
+    3069              :    *  @brief  Permute range into the previous @e dictionary ordering.
+    3070              :    *  @ingroup sorting_algorithms
+    3071              :    *  @param  __first  Start of range.
+    3072              :    *  @param  __last   End of range.
+    3073              :    *  @return  False if wrapped to last permutation, true otherwise.
+    3074              :    *
+    3075              :    *  Treats all permutations of the range as a set of @e dictionary sorted
+    3076              :    *  sequences.  Permutes the current sequence into the previous one of this
+    3077              :    *  set.  Returns true if there are more sequences to generate.  If the
+    3078              :    *  sequence is the smallest of the set, the largest is generated and false
+    3079              :    *  returned.
+    3080              :   */
+    3081              :   template<typename _BidirectionalIterator>
+    3082              :     _GLIBCXX20_CONSTEXPR
+    3083              :     inline bool
+    3084              :     prev_permutation(_BidirectionalIterator __first,
+    3085              :                      _BidirectionalIterator __last)
+    3086              :     {
+    3087              :       // concept requirements
+    3088              :       __glibcxx_function_requires(_BidirectionalIteratorConcept<
+    3089              :                                   _BidirectionalIterator>)
+    3090              :       __glibcxx_function_requires(_LessThanComparableConcept<
+    3091              :             typename iterator_traits<_BidirectionalIterator>::value_type>)
+    3092              :       __glibcxx_requires_valid_range(__first, __last);
+    3093              :       __glibcxx_requires_irreflexive(__first, __last);
+    3094              : 
+    3095              :       return std::__prev_permutation(__first, __last,
+    3096              :                                      __gnu_cxx::__ops::__iter_less_iter());
+    3097              :     }
+    3098              : 
+    3099              :   /**
+    3100              :    *  @brief  Permute range into the previous @e dictionary ordering using
+    3101              :    *          comparison functor.
+    3102              :    *  @ingroup sorting_algorithms
+    3103              :    *  @param  __first  Start of range.
+    3104              :    *  @param  __last   End of range.
+    3105              :    *  @param  __comp   A comparison functor.
+    3106              :    *  @return  False if wrapped to last permutation, true otherwise.
+    3107              :    *
+    3108              :    *  Treats all permutations of the range [__first,__last) as a set of
+    3109              :    *  @e dictionary sorted sequences ordered by @p __comp.  Permutes the current
+    3110              :    *  sequence into the previous one of this set.  Returns true if there are
+    3111              :    *  more sequences to generate.  If the sequence is the smallest of the set,
+    3112              :    *  the largest is generated and false returned.
+    3113              :   */
+    3114              :   template<typename _BidirectionalIterator, typename _Compare>
+    3115              :     _GLIBCXX20_CONSTEXPR
+    3116              :     inline bool
+    3117              :     prev_permutation(_BidirectionalIterator __first,
+    3118              :                      _BidirectionalIterator __last, _Compare __comp)
+    3119              :     {
+    3120              :       // concept requirements
+    3121              :       __glibcxx_function_requires(_BidirectionalIteratorConcept<
+    3122              :                                   _BidirectionalIterator>)
+    3123              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    3124              :             typename iterator_traits<_BidirectionalIterator>::value_type,
+    3125              :             typename iterator_traits<_BidirectionalIterator>::value_type>)
+    3126              :       __glibcxx_requires_valid_range(__first, __last);
+    3127              :       __glibcxx_requires_irreflexive_pred(__first, __last, __comp);
+    3128              : 
+    3129              :       return std::__prev_permutation(__first, __last,
+    3130              :                                 __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    3131              :     }
+    3132              : 
+    3133              :   // replace
+    3134              :   // replace_if
+    3135              : 
+    3136              :   template<typename _InputIterator, typename _OutputIterator,
+    3137              :            typename _Predicate, typename _Tp>
+    3138              :     _GLIBCXX20_CONSTEXPR
+    3139              :     _OutputIterator
+    3140              :     __replace_copy_if(_InputIterator __first, _InputIterator __last,
+    3141              :                       _OutputIterator __result,
+    3142              :                       _Predicate __pred, const _Tp& __new_value)
+    3143              :     {
+    3144              :       for (; __first != __last; ++__first, (void)++__result)
+    3145              :         if (__pred(__first))
+    3146              :           *__result = __new_value;
+    3147              :         else
+    3148              :           *__result = *__first;
+    3149              :       return __result;
+    3150              :     }
+    3151              : 
+    3152              :   /**
+    3153              :    *  @brief Copy a sequence, replacing each element of one value with another
+    3154              :    *         value.
+    3155              :    *  @param  __first      An input iterator.
+    3156              :    *  @param  __last       An input iterator.
+    3157              :    *  @param  __result     An output iterator.
+    3158              :    *  @param  __old_value  The value to be replaced.
+    3159              :    *  @param  __new_value  The replacement value.
+    3160              :    *  @return   The end of the output sequence, @p result+(last-first).
+    3161              :    *
+    3162              :    *  Copies each element in the input range @p [__first,__last) to the
+    3163              :    *  output range @p [__result,__result+(__last-__first)) replacing elements
+    3164              :    *  equal to @p __old_value with @p __new_value.
+    3165              :   */
+    3166              :   template<typename _InputIterator, typename _OutputIterator, typename _Tp>
+    3167              :     _GLIBCXX20_CONSTEXPR
+    3168              :     inline _OutputIterator
+    3169              :     replace_copy(_InputIterator __first, _InputIterator __last,
+    3170              :                  _OutputIterator __result,
+    3171              :                  const _Tp& __old_value, const _Tp& __new_value)
+    3172              :     {
+    3173              :       // concept requirements
+    3174              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+    3175              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    3176              :             typename iterator_traits<_InputIterator>::value_type>)
+    3177              :       __glibcxx_function_requires(_EqualOpConcept<
+    3178              :             typename iterator_traits<_InputIterator>::value_type, _Tp>)
+    3179              :       __glibcxx_requires_valid_range(__first, __last);
+    3180              : 
+    3181              :       return std::__replace_copy_if(__first, __last, __result,
+    3182              :                         __gnu_cxx::__ops::__iter_equals_val(__old_value),
+    3183              :                                               __new_value);
+    3184              :     }
+    3185              : 
+    3186              :   /**
+    3187              :    *  @brief Copy a sequence, replacing each value for which a predicate
+    3188              :    *         returns true with another value.
+    3189              :    *  @ingroup mutating_algorithms
+    3190              :    *  @param  __first      An input iterator.
+    3191              :    *  @param  __last       An input iterator.
+    3192              :    *  @param  __result     An output iterator.
+    3193              :    *  @param  __pred       A predicate.
+    3194              :    *  @param  __new_value  The replacement value.
+    3195              :    *  @return   The end of the output sequence, @p __result+(__last-__first).
+    3196              :    *
+    3197              :    *  Copies each element in the range @p [__first,__last) to the range
+    3198              :    *  @p [__result,__result+(__last-__first)) replacing elements for which
+    3199              :    *  @p __pred returns true with @p __new_value.
+    3200              :   */
+    3201              :   template<typename _InputIterator, typename _OutputIterator,
+    3202              :            typename _Predicate, typename _Tp>
+    3203              :     _GLIBCXX20_CONSTEXPR
+    3204              :     inline _OutputIterator
+    3205              :     replace_copy_if(_InputIterator __first, _InputIterator __last,
+    3206              :                     _OutputIterator __result,
+    3207              :                     _Predicate __pred, const _Tp& __new_value)
+    3208              :     {
+    3209              :       // concept requirements
+    3210              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+    3211              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    3212              :             typename iterator_traits<_InputIterator>::value_type>)
+    3213              :       __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
+    3214              :             typename iterator_traits<_InputIterator>::value_type>)
+    3215              :       __glibcxx_requires_valid_range(__first, __last);
+    3216              : 
+    3217              :       return std::__replace_copy_if(__first, __last, __result,
+    3218              :                                 __gnu_cxx::__ops::__pred_iter(__pred),
+    3219              :                                               __new_value);
+    3220              :     }
+    3221              : 
+    3222              : #if __cplusplus >= 201103L
+    3223              :   /**
+    3224              :    *  @brief  Determines whether the elements of a sequence are sorted.
+    3225              :    *  @ingroup sorting_algorithms
+    3226              :    *  @param  __first   An iterator.
+    3227              :    *  @param  __last    Another iterator.
+    3228              :    *  @return  True if the elements are sorted, false otherwise.
+    3229              :   */
+    3230              :   template<typename _ForwardIterator>
+    3231              :     _GLIBCXX20_CONSTEXPR
+    3232              :     inline bool
+    3233              :     is_sorted(_ForwardIterator __first, _ForwardIterator __last)
+    3234              :     { return std::is_sorted_until(__first, __last) == __last; }
+    3235              : 
+    3236              :   /**
+    3237              :    *  @brief  Determines whether the elements of a sequence are sorted
+    3238              :    *          according to a comparison functor.
+    3239              :    *  @ingroup sorting_algorithms
+    3240              :    *  @param  __first   An iterator.
+    3241              :    *  @param  __last    Another iterator.
+    3242              :    *  @param  __comp    A comparison functor.
+    3243              :    *  @return  True if the elements are sorted, false otherwise.
+    3244              :   */
+    3245              :   template<typename _ForwardIterator, typename _Compare>
+    3246              :     _GLIBCXX20_CONSTEXPR
+    3247              :     inline bool
+    3248              :     is_sorted(_ForwardIterator __first, _ForwardIterator __last,
+    3249              :               _Compare __comp)
+    3250              :     { return std::is_sorted_until(__first, __last, __comp) == __last; }
+    3251              : 
+    3252              :   template<typename _ForwardIterator, typename _Compare>
+    3253              :     _GLIBCXX20_CONSTEXPR
+    3254              :     _ForwardIterator
+    3255              :     __is_sorted_until(_ForwardIterator __first, _ForwardIterator __last,
+    3256              :                       _Compare __comp)
+    3257              :     {
+    3258              :       if (__first == __last)
+    3259              :         return __last;
+    3260              : 
+    3261              :       _ForwardIterator __next = __first;
+    3262              :       for (++__next; __next != __last; __first = __next, (void)++__next)
+    3263              :         if (__comp(__next, __first))
+    3264              :           return __next;
+    3265              :       return __next;
+    3266              :     }
+    3267              : 
+    3268              :   /**
+    3269              :    *  @brief  Determines the end of a sorted sequence.
+    3270              :    *  @ingroup sorting_algorithms
+    3271              :    *  @param  __first   An iterator.
+    3272              :    *  @param  __last    Another iterator.
+    3273              :    *  @return  An iterator pointing to the last iterator i in [__first, __last)
+    3274              :    *           for which the range [__first, i) is sorted.
+    3275              :   */
+    3276              :   template<typename _ForwardIterator>
+    3277              :     _GLIBCXX20_CONSTEXPR
+    3278              :     inline _ForwardIterator
+    3279              :     is_sorted_until(_ForwardIterator __first, _ForwardIterator __last)
+    3280              :     {
+    3281              :       // concept requirements
+    3282              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    3283              :       __glibcxx_function_requires(_LessThanComparableConcept<
+    3284              :             typename iterator_traits<_ForwardIterator>::value_type>)
+    3285              :       __glibcxx_requires_valid_range(__first, __last);
+    3286              :       __glibcxx_requires_irreflexive(__first, __last);
+    3287              : 
+    3288              :       return std::__is_sorted_until(__first, __last,
+    3289              :                                     __gnu_cxx::__ops::__iter_less_iter());
+    3290              :     }
+    3291              : 
+    3292              :   /**
+    3293              :    *  @brief  Determines the end of a sorted sequence using comparison functor.
+    3294              :    *  @ingroup sorting_algorithms
+    3295              :    *  @param  __first   An iterator.
+    3296              :    *  @param  __last    Another iterator.
+    3297              :    *  @param  __comp    A comparison functor.
+    3298              :    *  @return  An iterator pointing to the last iterator i in [__first, __last)
+    3299              :    *           for which the range [__first, i) is sorted.
+    3300              :   */
+    3301              :   template<typename _ForwardIterator, typename _Compare>
+    3302              :     _GLIBCXX20_CONSTEXPR
+    3303              :     inline _ForwardIterator
+    3304              :     is_sorted_until(_ForwardIterator __first, _ForwardIterator __last,
+    3305              :                     _Compare __comp)
+    3306              :     {
+    3307              :       // concept requirements
+    3308              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    3309              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    3310              :             typename iterator_traits<_ForwardIterator>::value_type,
+    3311              :             typename iterator_traits<_ForwardIterator>::value_type>)
+    3312              :       __glibcxx_requires_valid_range(__first, __last);
+    3313              :       __glibcxx_requires_irreflexive_pred(__first, __last, __comp);
+    3314              : 
+    3315              :       return std::__is_sorted_until(__first, __last,
+    3316              :                                     __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    3317              :     }
+    3318              : 
+    3319              :   /**
+    3320              :    *  @brief  Determines min and max at once as an ordered pair.
+    3321              :    *  @ingroup sorting_algorithms
+    3322              :    *  @param  __a  A thing of arbitrary type.
+    3323              :    *  @param  __b  Another thing of arbitrary type.
+    3324              :    *  @return A pair(__b, __a) if __b is smaller than __a, pair(__a,
+    3325              :    *  __b) otherwise.
+    3326              :   */
+    3327              :   template<typename _Tp>
+    3328              :     _GLIBCXX14_CONSTEXPR
+    3329              :     inline pair<const _Tp&, const _Tp&>
+    3330              :     minmax(const _Tp& __a, const _Tp& __b)
+    3331              :     {
+    3332              :       // concept requirements
+    3333              :       __glibcxx_function_requires(_LessThanComparableConcept<_Tp>)
+    3334              : 
+    3335              :       return __b < __a ? pair<const _Tp&, const _Tp&>(__b, __a)
+    3336              :                        : pair<const _Tp&, const _Tp&>(__a, __b);
+    3337              :     }
+    3338              : 
+    3339              :   /**
+    3340              :    *  @brief  Determines min and max at once as an ordered pair.
+    3341              :    *  @ingroup sorting_algorithms
+    3342              :    *  @param  __a  A thing of arbitrary type.
+    3343              :    *  @param  __b  Another thing of arbitrary type.
+    3344              :    *  @param  __comp  A @link comparison_functors comparison functor @endlink.
+    3345              :    *  @return A pair(__b, __a) if __b is smaller than __a, pair(__a,
+    3346              :    *  __b) otherwise.
+    3347              :   */
+    3348              :   template<typename _Tp, typename _Compare>
+    3349              :     _GLIBCXX14_CONSTEXPR
+    3350              :     inline pair<const _Tp&, const _Tp&>
+    3351              :     minmax(const _Tp& __a, const _Tp& __b, _Compare __comp)
+    3352              :     {
+    3353              :       return __comp(__b, __a) ? pair<const _Tp&, const _Tp&>(__b, __a)
+    3354              :                               : pair<const _Tp&, const _Tp&>(__a, __b);
+    3355              :     }
+    3356              : 
+    3357              :   template<typename _ForwardIterator, typename _Compare>
+    3358              :     _GLIBCXX14_CONSTEXPR
+    3359              :     pair<_ForwardIterator, _ForwardIterator>
+    3360              :     __minmax_element(_ForwardIterator __first, _ForwardIterator __last,
+    3361              :                      _Compare __comp)
+    3362              :     {
+    3363              :       _ForwardIterator __next = __first;
+    3364              :       if (__first == __last
+    3365              :           || ++__next == __last)
+    3366              :         return std::make_pair(__first, __first);
+    3367              : 
+    3368              :       _ForwardIterator __min{}, __max{};
+    3369              :       if (__comp(__next, __first))
+    3370              :         {
+    3371              :           __min = __next;
+    3372              :           __max = __first;
+    3373              :         }
+    3374              :       else
+    3375              :         {
+    3376              :           __min = __first;
+    3377              :           __max = __next;
+    3378              :         }
+    3379              : 
+    3380              :       __first = __next;
+    3381              :       ++__first;
+    3382              : 
+    3383              :       while (__first != __last)
+    3384              :         {
+    3385              :           __next = __first;
+    3386              :           if (++__next == __last)
+    3387              :             {
+    3388              :               if (__comp(__first, __min))
+    3389              :                 __min = __first;
+    3390              :               else if (!__comp(__first, __max))
+    3391              :                 __max = __first;
+    3392              :               break;
+    3393              :             }
+    3394              : 
+    3395              :           if (__comp(__next, __first))
+    3396              :             {
+    3397              :               if (__comp(__next, __min))
+    3398              :                 __min = __next;
+    3399              :               if (!__comp(__first, __max))
+    3400              :                 __max = __first;
+    3401              :             }
+    3402              :           else
+    3403              :             {
+    3404              :               if (__comp(__first, __min))
+    3405              :                 __min = __first;
+    3406              :               if (!__comp(__next, __max))
+    3407              :                 __max = __next;
+    3408              :             }
+    3409              : 
+    3410              :           __first = __next;
+    3411              :           ++__first;
+    3412              :         }
+    3413              : 
+    3414              :       return std::make_pair(__min, __max);
+    3415              :     }
+    3416              : 
+    3417              :   /**
+    3418              :    *  @brief  Return a pair of iterators pointing to the minimum and maximum
+    3419              :    *          elements in a range.
+    3420              :    *  @ingroup sorting_algorithms
+    3421              :    *  @param  __first  Start of range.
+    3422              :    *  @param  __last   End of range.
+    3423              :    *  @return  make_pair(m, M), where m is the first iterator i in 
+    3424              :    *           [__first, __last) such that no other element in the range is
+    3425              :    *           smaller, and where M is the last iterator i in [__first, __last)
+    3426              :    *           such that no other element in the range is larger.
+    3427              :   */
+    3428              :   template<typename _ForwardIterator>
+    3429              :     _GLIBCXX14_CONSTEXPR
+    3430              :     inline pair<_ForwardIterator, _ForwardIterator>
+    3431              :     minmax_element(_ForwardIterator __first, _ForwardIterator __last)
+    3432              :     {
+    3433              :       // concept requirements
+    3434              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    3435              :       __glibcxx_function_requires(_LessThanComparableConcept<
+    3436              :             typename iterator_traits<_ForwardIterator>::value_type>)
+    3437              :       __glibcxx_requires_valid_range(__first, __last);
+    3438              :       __glibcxx_requires_irreflexive(__first, __last);
+    3439              : 
+    3440              :       return std::__minmax_element(__first, __last,
+    3441              :                                    __gnu_cxx::__ops::__iter_less_iter());
+    3442              :     }
+    3443              : 
+    3444              :   /**
+    3445              :    *  @brief  Return a pair of iterators pointing to the minimum and maximum
+    3446              :    *          elements in a range.
+    3447              :    *  @ingroup sorting_algorithms
+    3448              :    *  @param  __first  Start of range.
+    3449              :    *  @param  __last   End of range.
+    3450              :    *  @param  __comp   Comparison functor.
+    3451              :    *  @return  make_pair(m, M), where m is the first iterator i in 
+    3452              :    *           [__first, __last) such that no other element in the range is
+    3453              :    *           smaller, and where M is the last iterator i in [__first, __last)
+    3454              :    *           such that no other element in the range is larger.
+    3455              :   */
+    3456              :   template<typename _ForwardIterator, typename _Compare>
+    3457              :     _GLIBCXX14_CONSTEXPR
+    3458              :     inline pair<_ForwardIterator, _ForwardIterator>
+    3459              :     minmax_element(_ForwardIterator __first, _ForwardIterator __last,
+    3460              :                    _Compare __comp)
+    3461              :     {
+    3462              :       // concept requirements
+    3463              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    3464              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    3465              :             typename iterator_traits<_ForwardIterator>::value_type,
+    3466              :             typename iterator_traits<_ForwardIterator>::value_type>)
+    3467              :       __glibcxx_requires_valid_range(__first, __last);
+    3468              :       __glibcxx_requires_irreflexive_pred(__first, __last, __comp);
+    3469              : 
+    3470              :       return std::__minmax_element(__first, __last,
+    3471              :                                    __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    3472              :     }
+    3473              : 
+    3474              :   template<typename _Tp>
+    3475              :     _GLIBCXX14_CONSTEXPR
+    3476              :     inline pair<_Tp, _Tp>
+    3477              :     minmax(initializer_list<_Tp> __l)
+    3478              :     {
+    3479              :       __glibcxx_requires_irreflexive(__l.begin(), __l.end());
+    3480              :       pair<const _Tp*, const _Tp*> __p =
+    3481              :         std::__minmax_element(__l.begin(), __l.end(),
+    3482              :                               __gnu_cxx::__ops::__iter_less_iter());
+    3483              :       return std::make_pair(*__p.first, *__p.second);
+    3484              :     }
+    3485              : 
+    3486              :   template<typename _Tp, typename _Compare>
+    3487              :     _GLIBCXX14_CONSTEXPR
+    3488              :     inline pair<_Tp, _Tp>
+    3489              :     minmax(initializer_list<_Tp> __l, _Compare __comp)
+    3490              :     {
+    3491              :       __glibcxx_requires_irreflexive_pred(__l.begin(), __l.end(), __comp);
+    3492              :       pair<const _Tp*, const _Tp*> __p =
+    3493              :         std::__minmax_element(__l.begin(), __l.end(),
+    3494              :                               __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    3495              :       return std::make_pair(*__p.first, *__p.second);
+    3496              :     }
+    3497              : 
+    3498              :   /**
+    3499              :    *  @brief  Checks whether a permutation of the second sequence is equal
+    3500              :    *          to the first sequence.
+    3501              :    *  @ingroup non_mutating_algorithms
+    3502              :    *  @param  __first1  Start of first range.
+    3503              :    *  @param  __last1   End of first range.
+    3504              :    *  @param  __first2  Start of second range.
+    3505              :    *  @param  __pred    A binary predicate.
+    3506              :    *  @return true if there exists a permutation of the elements in
+    3507              :    *          the range [__first2, __first2 + (__last1 - __first1)),
+    3508              :    *          beginning with ForwardIterator2 begin, such that
+    3509              :    *          equal(__first1, __last1, __begin, __pred) returns true;
+    3510              :    *          otherwise, returns false.
+    3511              :   */
+    3512              :   template<typename _ForwardIterator1, typename _ForwardIterator2,
+    3513              :            typename _BinaryPredicate>
+    3514              :     _GLIBCXX20_CONSTEXPR
+    3515              :     inline bool
+    3516              :     is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+    3517              :                    _ForwardIterator2 __first2, _BinaryPredicate __pred)
+    3518              :     {
+    3519              :       // concept requirements
+    3520              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator1>)
+    3521              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator2>)
+    3522              :       __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
+    3523              :             typename iterator_traits<_ForwardIterator1>::value_type,
+    3524              :             typename iterator_traits<_ForwardIterator2>::value_type>)
+    3525              :       __glibcxx_requires_valid_range(__first1, __last1);
+    3526              : 
+    3527              :       return std::__is_permutation(__first1, __last1, __first2,
+    3528              :                                    __gnu_cxx::__ops::__iter_comp_iter(__pred));
+    3529              :     }
+    3530              : 
+    3531              : #if __cplusplus > 201103L
+    3532              :   template<typename _ForwardIterator1, typename _ForwardIterator2,
+    3533              :            typename _BinaryPredicate>
+    3534              :     _GLIBCXX20_CONSTEXPR
+    3535              :     bool
+    3536              :     __is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+    3537              :                      _ForwardIterator2 __first2, _ForwardIterator2 __last2,
+    3538              :                      _BinaryPredicate __pred)
+    3539              :     {
+    3540              :       using _Cat1
+    3541              :         = typename iterator_traits<_ForwardIterator1>::iterator_category;
+    3542              :       using _Cat2
+    3543              :         = typename iterator_traits<_ForwardIterator2>::iterator_category;
+    3544              :       using _It1_is_RA = is_same<_Cat1, random_access_iterator_tag>;
+    3545              :       using _It2_is_RA = is_same<_Cat2, random_access_iterator_tag>;
+    3546              :       constexpr bool __ra_iters = _It1_is_RA() && _It2_is_RA();
+    3547              :       if (__ra_iters)
+    3548              :         {
+    3549              :           auto __d1 = std::distance(__first1, __last1);
+    3550              :           auto __d2 = std::distance(__first2, __last2);
+    3551              :           if (__d1 != __d2)
+    3552              :             return false;
+    3553              :         }
+    3554              : 
+    3555              :       // Efficiently compare identical prefixes:  O(N) if sequences
+    3556              :       // have the same elements in the same order.
+    3557              :       for (; __first1 != __last1 && __first2 != __last2;
+    3558              :           ++__first1, (void)++__first2)
+    3559              :         if (!__pred(__first1, __first2))
+    3560              :           break;
+    3561              : 
+    3562              :       if (__ra_iters)
+    3563              :         {
+    3564              :           if (__first1 == __last1)
+    3565              :             return true;
+    3566              :         }
+    3567              :       else
+    3568              :         {
+    3569              :           auto __d1 = std::distance(__first1, __last1);
+    3570              :           auto __d2 = std::distance(__first2, __last2);
+    3571              :           if (__d1 == 0 && __d2 == 0)
+    3572              :             return true;
+    3573              :           if (__d1 != __d2)
+    3574              :             return false;
+    3575              :         }
+    3576              : 
+    3577              :       for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan)
+    3578              :         {
+    3579              :           if (__scan != std::__find_if(__first1, __scan,
+    3580              :                         __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)))
+    3581              :             continue; // We've seen this one before.
+    3582              : 
+    3583              :           auto __matches = std::__count_if(__first2, __last2,
+    3584              :                 __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan));
+    3585              :           if (0 == __matches
+    3586              :               || std::__count_if(__scan, __last1,
+    3587              :                         __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))
+    3588              :               != __matches)
+    3589              :             return false;
+    3590              :         }
+    3591              :       return true;
+    3592              :     }
+    3593              : 
+    3594              :   /**
+    3595              :    *  @brief  Checks whether a permutaion of the second sequence is equal
+    3596              :    *          to the first sequence.
+    3597              :    *  @ingroup non_mutating_algorithms
+    3598              :    *  @param  __first1  Start of first range.
+    3599              :    *  @param  __last1   End of first range.
+    3600              :    *  @param  __first2  Start of second range.
+    3601              :    *  @param  __last2   End of first range.
+    3602              :    *  @return true if there exists a permutation of the elements in the range
+    3603              :    *          [__first2, __last2), beginning with ForwardIterator2 begin,
+    3604              :    *          such that equal(__first1, __last1, begin) returns true;
+    3605              :    *          otherwise, returns false.
+    3606              :   */
+    3607              :   template<typename _ForwardIterator1, typename _ForwardIterator2>
+    3608              :     _GLIBCXX20_CONSTEXPR
+    3609              :     inline bool
+    3610              :     is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+    3611              :                    _ForwardIterator2 __first2, _ForwardIterator2 __last2)
+    3612              :     {
+    3613              :       __glibcxx_requires_valid_range(__first1, __last1);
+    3614              :       __glibcxx_requires_valid_range(__first2, __last2);
+    3615              : 
+    3616              :       return
+    3617              :         std::__is_permutation(__first1, __last1, __first2, __last2,
+    3618              :                               __gnu_cxx::__ops::__iter_equal_to_iter());
+    3619              :     }
+    3620              : 
+    3621              :   /**
+    3622              :    *  @brief  Checks whether a permutation of the second sequence is equal
+    3623              :    *          to the first sequence.
+    3624              :    *  @ingroup non_mutating_algorithms
+    3625              :    *  @param  __first1  Start of first range.
+    3626              :    *  @param  __last1   End of first range.
+    3627              :    *  @param  __first2  Start of second range.
+    3628              :    *  @param  __last2   End of first range.
+    3629              :    *  @param  __pred    A binary predicate.
+    3630              :    *  @return true if there exists a permutation of the elements in the range
+    3631              :    *          [__first2, __last2), beginning with ForwardIterator2 begin,
+    3632              :    *          such that equal(__first1, __last1, __begin, __pred) returns true;
+    3633              :    *          otherwise, returns false.
+    3634              :   */
+    3635              :   template<typename _ForwardIterator1, typename _ForwardIterator2,
+    3636              :            typename _BinaryPredicate>
+    3637              :     _GLIBCXX20_CONSTEXPR
+    3638              :     inline bool
+    3639              :     is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+    3640              :                    _ForwardIterator2 __first2, _ForwardIterator2 __last2,
+    3641              :                    _BinaryPredicate __pred)
+    3642              :     {
+    3643              :       __glibcxx_requires_valid_range(__first1, __last1);
+    3644              :       __glibcxx_requires_valid_range(__first2, __last2);
+    3645              : 
+    3646              :       return std::__is_permutation(__first1, __last1, __first2, __last2,
+    3647              :                                    __gnu_cxx::__ops::__iter_comp_iter(__pred));
+    3648              :     }
+    3649              : 
+    3650              : #if __cplusplus >= 201703L
+    3651              : 
+    3652              : #define __cpp_lib_clamp 201603L
+    3653              : 
+    3654              :   /**
+    3655              :    *  @brief  Returns the value clamped between lo and hi.
+    3656              :    *  @ingroup sorting_algorithms
+    3657              :    *  @param  __val  A value of arbitrary type.
+    3658              :    *  @param  __lo   A lower limit of arbitrary type.
+    3659              :    *  @param  __hi   An upper limit of arbitrary type.
+    3660              :    *  @retval `__lo` if `__val < __lo`
+    3661              :    *  @retval `__hi` if `__hi < __val`
+    3662              :    *  @retval `__val` otherwise.
+    3663              :    *  @pre `_Tp` is LessThanComparable and `(__hi < __lo)` is false.
+    3664              :    */
+    3665              :   template<typename _Tp>
+    3666              :     constexpr const _Tp&
+    3667              :     clamp(const _Tp& __val, const _Tp& __lo, const _Tp& __hi)
+    3668              :     {
+    3669              :       __glibcxx_assert(!(__hi < __lo));
+    3670              :       return std::min(std::max(__val, __lo), __hi);
+    3671              :     }
+    3672              : 
+    3673              :   /**
+    3674              :    *  @brief  Returns the value clamped between lo and hi.
+    3675              :    *  @ingroup sorting_algorithms
+    3676              :    *  @param  __val   A value of arbitrary type.
+    3677              :    *  @param  __lo    A lower limit of arbitrary type.
+    3678              :    *  @param  __hi    An upper limit of arbitrary type.
+    3679              :    *  @param  __comp  A comparison functor.
+    3680              :    *  @retval `__lo` if `__comp(__val, __lo)`
+    3681              :    *  @retval `__hi` if `__comp(__hi, __val)`
+    3682              :    *  @retval `__val` otherwise.
+    3683              :    *  @pre `__comp(__hi, __lo)` is false.
+    3684              :    */
+    3685              :   template<typename _Tp, typename _Compare>
+    3686              :     constexpr const _Tp&
+    3687              :     clamp(const _Tp& __val, const _Tp& __lo, const _Tp& __hi, _Compare __comp)
+    3688              :     {
+    3689              :       __glibcxx_assert(!__comp(__hi, __lo));
+    3690              :       return std::min(std::max(__val, __lo, __comp), __hi, __comp);
+    3691              :     }
+    3692              : #endif // C++17
+    3693              : #endif // C++14
+    3694              : 
+    3695              : #ifdef _GLIBCXX_USE_C99_STDINT_TR1
+    3696              :   /**
+    3697              :    *  @brief Generate two uniformly distributed integers using a
+    3698              :    *         single distribution invocation.
+    3699              :    *  @param  __b0    The upper bound for the first integer.
+    3700              :    *  @param  __b1    The upper bound for the second integer.
+    3701              :    *  @param  __g     A UniformRandomBitGenerator.
+    3702              :    *  @return  A pair (i, j) with i and j uniformly distributed
+    3703              :    *           over [0, __b0) and [0, __b1), respectively.
+    3704              :    *
+    3705              :    *  Requires: __b0 * __b1 <= __g.max() - __g.min().
+    3706              :    *
+    3707              :    *  Using uniform_int_distribution with a range that is very
+    3708              :    *  small relative to the range of the generator ends up wasting
+    3709              :    *  potentially expensively generated randomness, since
+    3710              :    *  uniform_int_distribution does not store leftover randomness
+    3711              :    *  between invocations.
+    3712              :    *
+    3713              :    *  If we know we want two integers in ranges that are sufficiently
+    3714              :    *  small, we can compose the ranges, use a single distribution
+    3715              :    *  invocation, and significantly reduce the waste.
+    3716              :   */
+    3717              :   template<typename _IntType, typename _UniformRandomBitGenerator>
+    3718              :     pair<_IntType, _IntType>
+    3719        39996 :     __gen_two_uniform_ints(_IntType __b0, _IntType __b1,
+    3720              :                            _UniformRandomBitGenerator&& __g)
+    3721              :     {
+    3722              :       _IntType __x
+    3723        39996 :         = uniform_int_distribution<_IntType>{0, (__b0 * __b1) - 1}(__g);
+    3724        39996 :       return std::make_pair(__x / __b1, __x % __b1);
+    3725              :     }
+    3726              : 
+    3727              :   /**
+    3728              :    *  @brief Shuffle the elements of a sequence using a uniform random
+    3729              :    *         number generator.
+    3730              :    *  @ingroup mutating_algorithms
+    3731              :    *  @param  __first   A forward iterator.
+    3732              :    *  @param  __last    A forward iterator.
+    3733              :    *  @param  __g       A UniformRandomNumberGenerator (26.5.1.3).
+    3734              :    *  @return  Nothing.
+    3735              :    *
+    3736              :    *  Reorders the elements in the range @p [__first,__last) using @p __g to
+    3737              :    *  provide random numbers.
+    3738              :   */
+    3739              :   template<typename _RandomAccessIterator,
+    3740              :            typename _UniformRandomNumberGenerator>
+    3741              :     void
+    3742         1040 :     shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
+    3743              :             _UniformRandomNumberGenerator&& __g)
+    3744              :     {
+    3745              :       // concept requirements
+    3746              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+    3747              :             _RandomAccessIterator>)
+    3748              :       __glibcxx_requires_valid_range(__first, __last);
+    3749              : 
+    3750         1040 :       if (__first == __last)
+    3751         1040 :         return;
+    3752              : 
+    3753              :       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+    3754              :         _DistanceType;
+    3755              : 
+    3756              :       typedef typename std::make_unsigned<_DistanceType>::type __ud_type;
+    3757              :       typedef typename std::uniform_int_distribution<__ud_type> __distr_type;
+    3758              :       typedef typename __distr_type::param_type __p_type;
+    3759              : 
+    3760              :       typedef typename remove_reference<_UniformRandomNumberGenerator>::type
+    3761              :         _Gen;
+    3762              :       typedef typename common_type<typename _Gen::result_type, __ud_type>::type
+    3763              :         __uc_type;
+    3764              : 
+    3765         1040 :       const __uc_type __urngrange = __g.max() - __g.min();
+    3766         1040 :       const __uc_type __urange = __uc_type(__last - __first);
+    3767              : 
+    3768         1040 :       if (__urngrange / __urange >= __urange)
+    3769              :         // I.e. (__urngrange >= __urange * __urange) but without wrap issues.
+    3770              :       {
+    3771         1040 :         _RandomAccessIterator __i = __first + 1;
+    3772              : 
+    3773              :         // Since we know the range isn't empty, an even number of elements
+    3774              :         // means an uneven number of elements /to swap/, in which case we
+    3775              :         // do the first one up front:
+    3776              : 
+    3777         1040 :         if ((__urange % 2) == 0)
+    3778              :         {
+    3779          678 :           __distr_type __d{0, 1};
+    3780          678 :           std::iter_swap(__i++, __first + __d(__g));
+    3781              :         }
+    3782              : 
+    3783              :         // Now we know that __last - __i is even, so we do the rest in pairs,
+    3784              :         // using a single distribution invocation to produce swap positions
+    3785              :         // for two successive elements at a time:
+    3786              : 
+    3787        41036 :         while (__i != __last)
+    3788              :         {
+    3789        39996 :           const __uc_type __swap_range = __uc_type(__i - __first) + 1;
+    3790              : 
+    3791              :           const pair<__uc_type, __uc_type> __pospos =
+    3792        39996 :             __gen_two_uniform_ints(__swap_range, __swap_range + 1, __g);
+    3793              : 
+    3794        39996 :           std::iter_swap(__i++, __first + __pospos.first);
+    3795        39996 :           std::iter_swap(__i++, __first + __pospos.second);
+    3796              :         }
+    3797              : 
+    3798         1040 :         return;
+    3799              :       }
+    3800              : 
+    3801            0 :       __distr_type __d;
+    3802              : 
+    3803            0 :       for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
+    3804            0 :         std::iter_swap(__i, __first + __d(__g, __p_type(0, __i - __first)));
+    3805              :     }
+    3806              : #endif // USE C99_STDINT
+    3807              : 
+    3808              : #endif // C++11
+    3809              : 
+    3810              : _GLIBCXX_BEGIN_NAMESPACE_ALGO
+    3811              : 
+    3812              :   /**
+    3813              :    *  @brief Apply a function to every element of a sequence.
+    3814              :    *  @ingroup non_mutating_algorithms
+    3815              :    *  @param  __first  An input iterator.
+    3816              :    *  @param  __last   An input iterator.
+    3817              :    *  @param  __f      A unary function object.
+    3818              :    *  @return   @p __f
+    3819              :    *
+    3820              :    *  Applies the function object @p __f to each element in the range
+    3821              :    *  @p [first,last).  @p __f must not modify the order of the sequence.
+    3822              :    *  If @p __f has a return value it is ignored.
+    3823              :   */
+    3824              :   template<typename _InputIterator, typename _Function>
+    3825              :     _GLIBCXX20_CONSTEXPR
+    3826              :     _Function
+    3827          684 :     for_each(_InputIterator __first, _InputIterator __last, _Function __f)
+    3828              :     {
+    3829              :       // concept requirements
+    3830              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+    3831              :       __glibcxx_requires_valid_range(__first, __last);
+    3832        14878 :       for (; __first != __last; ++__first)
+    3833        14194 :         __f(*__first);
+    3834          684 :       return __f; // N.B. [alg.foreach] says std::move(f) but it's redundant.
+    3835              :     }
+    3836              : 
+    3837              : #if __cplusplus >= 201703L
+    3838              :   /**
+    3839              :    *  @brief Apply a function to every element of a sequence.
+    3840              :    *  @ingroup non_mutating_algorithms
+    3841              :    *  @param  __first  An input iterator.
+    3842              :    *  @param  __n      A value convertible to an integer.
+    3843              :    *  @param  __f      A unary function object.
+    3844              :    *  @return   `__first+__n`
+    3845              :    *
+    3846              :    *  Applies the function object `__f` to each element in the range
+    3847              :    *  `[first, first+n)`.  `__f` must not modify the order of the sequence.
+    3848              :    *  If `__f` has a return value it is ignored.
+    3849              :   */
+    3850              :   template<typename _InputIterator, typename _Size, typename _Function>
+    3851              :     _GLIBCXX20_CONSTEXPR
+    3852              :     _InputIterator
+    3853              :     for_each_n(_InputIterator __first, _Size __n, _Function __f)
+    3854              :     {
+    3855              :       auto __n2 = std::__size_to_integer(__n);
+    3856              :       using _Cat = typename iterator_traits<_InputIterator>::iterator_category;
+    3857              :       if constexpr (is_base_of_v<random_access_iterator_tag, _Cat>)
+    3858              :         {
+    3859              :           if (__n2 <= 0)
+    3860              :             return __first;
+    3861              :           auto __last = __first + __n2;
+    3862              :           std::for_each(__first, __last, std::move(__f));
+    3863              :           return __last;
+    3864              :         }
+    3865              :       else
+    3866              :         {
+    3867              :           while (__n2-->0)
+    3868              :             {
+    3869              :               __f(*__first);
+    3870              :               ++__first;
+    3871              :             }
+    3872              :           return __first;
+    3873              :         }
+    3874              :     }
+    3875              : #endif // C++17
+    3876              : 
+    3877              :   /**
+    3878              :    *  @brief Find the first occurrence of a value in a sequence.
+    3879              :    *  @ingroup non_mutating_algorithms
+    3880              :    *  @param  __first  An input iterator.
+    3881              :    *  @param  __last   An input iterator.
+    3882              :    *  @param  __val    The value to find.
+    3883              :    *  @return   The first iterator @c i in the range @p [__first,__last)
+    3884              :    *  such that @c *i == @p __val, or @p __last if no such iterator exists.
+    3885              :   */
+    3886              :   template<typename _InputIterator, typename _Tp>
+    3887              :     _GLIBCXX20_CONSTEXPR
+    3888              :     inline _InputIterator
+    3889      9579236 :     find(_InputIterator __first, _InputIterator __last,
+    3890              :          const _Tp& __val)
+    3891              :     {
+    3892              :       // concept requirements
+    3893              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+    3894              :       __glibcxx_function_requires(_EqualOpConcept<
+    3895              :                 typename iterator_traits<_InputIterator>::value_type, _Tp>)
+    3896              :       __glibcxx_requires_valid_range(__first, __last);
+    3897      9579236 :       return std::__find_if(__first, __last,
+    3898      9579236 :                             __gnu_cxx::__ops::__iter_equals_val(__val));
+    3899              :     }
+    3900              : 
+    3901              :   /**
+    3902              :    *  @brief Find the first element in a sequence for which a
+    3903              :    *         predicate is true.
+    3904              :    *  @ingroup non_mutating_algorithms
+    3905              :    *  @param  __first  An input iterator.
+    3906              :    *  @param  __last   An input iterator.
+    3907              :    *  @param  __pred   A predicate.
+    3908              :    *  @return   The first iterator @c i in the range @p [__first,__last)
+    3909              :    *  such that @p __pred(*i) is true, or @p __last if no such iterator exists.
+    3910              :   */
+    3911              :   template<typename _InputIterator, typename _Predicate>
+    3912              :     _GLIBCXX20_CONSTEXPR
+    3913              :     inline _InputIterator
+    3914            0 :     find_if(_InputIterator __first, _InputIterator __last,
+    3915              :             _Predicate __pred)
+    3916              :     {
+    3917              :       // concept requirements
+    3918              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+    3919              :       __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
+    3920              :               typename iterator_traits<_InputIterator>::value_type>)
+    3921              :       __glibcxx_requires_valid_range(__first, __last);
+    3922              : 
+    3923            0 :       return std::__find_if(__first, __last,
+    3924            0 :                             __gnu_cxx::__ops::__pred_iter(__pred));
+    3925              :     }
+    3926              : 
+    3927              :   /**
+    3928              :    *  @brief  Find element from a set in a sequence.
+    3929              :    *  @ingroup non_mutating_algorithms
+    3930              :    *  @param  __first1  Start of range to search.
+    3931              :    *  @param  __last1   End of range to search.
+    3932              :    *  @param  __first2  Start of match candidates.
+    3933              :    *  @param  __last2   End of match candidates.
+    3934              :    *  @return   The first iterator @c i in the range
+    3935              :    *  @p [__first1,__last1) such that @c *i == @p *(i2) such that i2 is an
+    3936              :    *  iterator in [__first2,__last2), or @p __last1 if no such iterator exists.
+    3937              :    *
+    3938              :    *  Searches the range @p [__first1,__last1) for an element that is
+    3939              :    *  equal to some element in the range [__first2,__last2).  If
+    3940              :    *  found, returns an iterator in the range [__first1,__last1),
+    3941              :    *  otherwise returns @p __last1.
+    3942              :   */
+    3943              :   template<typename _InputIterator, typename _ForwardIterator>
+    3944              :     _GLIBCXX20_CONSTEXPR
+    3945              :     _InputIterator
+    3946              :     find_first_of(_InputIterator __first1, _InputIterator __last1,
+    3947              :                   _ForwardIterator __first2, _ForwardIterator __last2)
+    3948              :     {
+    3949              :       // concept requirements
+    3950              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+    3951              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    3952              :       __glibcxx_function_requires(_EqualOpConcept<
+    3953              :             typename iterator_traits<_InputIterator>::value_type,
+    3954              :             typename iterator_traits<_ForwardIterator>::value_type>)
+    3955              :       __glibcxx_requires_valid_range(__first1, __last1);
+    3956              :       __glibcxx_requires_valid_range(__first2, __last2);
+    3957              : 
+    3958              :       for (; __first1 != __last1; ++__first1)
+    3959              :         for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter)
+    3960              :           if (*__first1 == *__iter)
+    3961              :             return __first1;
+    3962              :       return __last1;
+    3963              :     }
+    3964              : 
+    3965              :   /**
+    3966              :    *  @brief  Find element from a set in a sequence using a predicate.
+    3967              :    *  @ingroup non_mutating_algorithms
+    3968              :    *  @param  __first1  Start of range to search.
+    3969              :    *  @param  __last1   End of range to search.
+    3970              :    *  @param  __first2  Start of match candidates.
+    3971              :    *  @param  __last2   End of match candidates.
+    3972              :    *  @param  __comp    Predicate to use.
+    3973              :    *  @return   The first iterator @c i in the range
+    3974              :    *  @p [__first1,__last1) such that @c comp(*i, @p *(i2)) is true
+    3975              :    *  and i2 is an iterator in [__first2,__last2), or @p __last1 if no
+    3976              :    *  such iterator exists.
+    3977              :    *
+    3978              : 
+    3979              :    *  Searches the range @p [__first1,__last1) for an element that is
+    3980              :    *  equal to some element in the range [__first2,__last2).  If
+    3981              :    *  found, returns an iterator in the range [__first1,__last1),
+    3982              :    *  otherwise returns @p __last1.
+    3983              :   */
+    3984              :   template<typename _InputIterator, typename _ForwardIterator,
+    3985              :            typename _BinaryPredicate>
+    3986              :     _GLIBCXX20_CONSTEXPR
+    3987              :     _InputIterator
+    3988              :     find_first_of(_InputIterator __first1, _InputIterator __last1,
+    3989              :                   _ForwardIterator __first2, _ForwardIterator __last2,
+    3990              :                   _BinaryPredicate __comp)
+    3991              :     {
+    3992              :       // concept requirements
+    3993              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+    3994              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    3995              :       __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
+    3996              :             typename iterator_traits<_InputIterator>::value_type,
+    3997              :             typename iterator_traits<_ForwardIterator>::value_type>)
+    3998              :       __glibcxx_requires_valid_range(__first1, __last1);
+    3999              :       __glibcxx_requires_valid_range(__first2, __last2);
+    4000              : 
+    4001              :       for (; __first1 != __last1; ++__first1)
+    4002              :         for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter)
+    4003              :           if (__comp(*__first1, *__iter))
+    4004              :             return __first1;
+    4005              :       return __last1;
+    4006              :     }
+    4007              : 
+    4008              :   /**
+    4009              :    *  @brief Find two adjacent values in a sequence that are equal.
+    4010              :    *  @ingroup non_mutating_algorithms
+    4011              :    *  @param  __first  A forward iterator.
+    4012              :    *  @param  __last   A forward iterator.
+    4013              :    *  @return   The first iterator @c i such that @c i and @c i+1 are both
+    4014              :    *  valid iterators in @p [__first,__last) and such that @c *i == @c *(i+1),
+    4015              :    *  or @p __last if no such iterator exists.
+    4016              :   */
+    4017              :   template<typename _ForwardIterator>
+    4018              :     _GLIBCXX20_CONSTEXPR
+    4019              :     inline _ForwardIterator
+    4020              :     adjacent_find(_ForwardIterator __first, _ForwardIterator __last)
+    4021              :     {
+    4022              :       // concept requirements
+    4023              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    4024              :       __glibcxx_function_requires(_EqualityComparableConcept<
+    4025              :             typename iterator_traits<_ForwardIterator>::value_type>)
+    4026              :       __glibcxx_requires_valid_range(__first, __last);
+    4027              : 
+    4028              :       return std::__adjacent_find(__first, __last,
+    4029              :                                   __gnu_cxx::__ops::__iter_equal_to_iter());
+    4030              :     }
+    4031              : 
+    4032              :   /**
+    4033              :    *  @brief Find two adjacent values in a sequence using a predicate.
+    4034              :    *  @ingroup non_mutating_algorithms
+    4035              :    *  @param  __first         A forward iterator.
+    4036              :    *  @param  __last          A forward iterator.
+    4037              :    *  @param  __binary_pred   A binary predicate.
+    4038              :    *  @return   The first iterator @c i such that @c i and @c i+1 are both
+    4039              :    *  valid iterators in @p [__first,__last) and such that
+    4040              :    *  @p __binary_pred(*i,*(i+1)) is true, or @p __last if no such iterator
+    4041              :    *  exists.
+    4042              :   */
+    4043              :   template<typename _ForwardIterator, typename _BinaryPredicate>
+    4044              :     _GLIBCXX20_CONSTEXPR
+    4045              :     inline _ForwardIterator
+    4046              :     adjacent_find(_ForwardIterator __first, _ForwardIterator __last,
+    4047              :                   _BinaryPredicate __binary_pred)
+    4048              :     {
+    4049              :       // concept requirements
+    4050              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    4051              :       __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
+    4052              :             typename iterator_traits<_ForwardIterator>::value_type,
+    4053              :             typename iterator_traits<_ForwardIterator>::value_type>)
+    4054              :       __glibcxx_requires_valid_range(__first, __last);
+    4055              : 
+    4056              :       return std::__adjacent_find(__first, __last,
+    4057              :                         __gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
+    4058              :     }
+    4059              : 
+    4060              :   /**
+    4061              :    *  @brief Count the number of copies of a value in a sequence.
+    4062              :    *  @ingroup non_mutating_algorithms
+    4063              :    *  @param  __first  An input iterator.
+    4064              :    *  @param  __last   An input iterator.
+    4065              :    *  @param  __value  The value to be counted.
+    4066              :    *  @return   The number of iterators @c i in the range @p [__first,__last)
+    4067              :    *  for which @c *i == @p __value
+    4068              :   */
+    4069              :   template<typename _InputIterator, typename _Tp>
+    4070              :     _GLIBCXX20_CONSTEXPR
+    4071              :     inline typename iterator_traits<_InputIterator>::difference_type
+    4072              :     count(_InputIterator __first, _InputIterator __last, const _Tp& __value)
+    4073              :     {
+    4074              :       // concept requirements
+    4075              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+    4076              :       __glibcxx_function_requires(_EqualOpConcept<
+    4077              :             typename iterator_traits<_InputIterator>::value_type, _Tp>)
+    4078              :       __glibcxx_requires_valid_range(__first, __last);
+    4079              : 
+    4080              :       return std::__count_if(__first, __last,
+    4081              :                              __gnu_cxx::__ops::__iter_equals_val(__value));
+    4082              :     }
+    4083              : 
+    4084              :   /**
+    4085              :    *  @brief Count the elements of a sequence for which a predicate is true.
+    4086              :    *  @ingroup non_mutating_algorithms
+    4087              :    *  @param  __first  An input iterator.
+    4088              :    *  @param  __last   An input iterator.
+    4089              :    *  @param  __pred   A predicate.
+    4090              :    *  @return   The number of iterators @c i in the range @p [__first,__last)
+    4091              :    *  for which @p __pred(*i) is true.
+    4092              :   */
+    4093              :   template<typename _InputIterator, typename _Predicate>
+    4094              :     _GLIBCXX20_CONSTEXPR
+    4095              :     inline typename iterator_traits<_InputIterator>::difference_type
+    4096              :     count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred)
+    4097              :     {
+    4098              :       // concept requirements
+    4099              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+    4100              :       __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
+    4101              :             typename iterator_traits<_InputIterator>::value_type>)
+    4102              :       __glibcxx_requires_valid_range(__first, __last);
+    4103              : 
+    4104              :       return std::__count_if(__first, __last,
+    4105              :                              __gnu_cxx::__ops::__pred_iter(__pred));
+    4106              :     }
+    4107              : 
+    4108              :   /**
+    4109              :    *  @brief Search a sequence for a matching sub-sequence.
+    4110              :    *  @ingroup non_mutating_algorithms
+    4111              :    *  @param  __first1  A forward iterator.
+    4112              :    *  @param  __last1   A forward iterator.
+    4113              :    *  @param  __first2  A forward iterator.
+    4114              :    *  @param  __last2   A forward iterator.
+    4115              :    *  @return The first iterator @c i in the range @p
+    4116              :    *  [__first1,__last1-(__last2-__first2)) such that @c *(i+N) == @p
+    4117              :    *  *(__first2+N) for each @c N in the range @p
+    4118              :    *  [0,__last2-__first2), or @p __last1 if no such iterator exists.
+    4119              :    *
+    4120              :    *  Searches the range @p [__first1,__last1) for a sub-sequence that
+    4121              :    *  compares equal value-by-value with the sequence given by @p
+    4122              :    *  [__first2,__last2) and returns an iterator to the first element
+    4123              :    *  of the sub-sequence, or @p __last1 if the sub-sequence is not
+    4124              :    *  found.
+    4125              :    *
+    4126              :    *  Because the sub-sequence must lie completely within the range @p
+    4127              :    *  [__first1,__last1) it must start at a position less than @p
+    4128              :    *  __last1-(__last2-__first2) where @p __last2-__first2 is the
+    4129              :    *  length of the sub-sequence.
+    4130              :    *
+    4131              :    *  This means that the returned iterator @c i will be in the range
+    4132              :    *  @p [__first1,__last1-(__last2-__first2))
+    4133              :   */
+    4134              :   template<typename _ForwardIterator1, typename _ForwardIterator2>
+    4135              :     _GLIBCXX20_CONSTEXPR
+    4136              :     inline _ForwardIterator1
+    4137              :     search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+    4138              :            _ForwardIterator2 __first2, _ForwardIterator2 __last2)
+    4139              :     {
+    4140              :       // concept requirements
+    4141              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator1>)
+    4142              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator2>)
+    4143              :       __glibcxx_function_requires(_EqualOpConcept<
+    4144              :             typename iterator_traits<_ForwardIterator1>::value_type,
+    4145              :             typename iterator_traits<_ForwardIterator2>::value_type>)
+    4146              :       __glibcxx_requires_valid_range(__first1, __last1);
+    4147              :       __glibcxx_requires_valid_range(__first2, __last2);
+    4148              : 
+    4149              :       return std::__search(__first1, __last1, __first2, __last2,
+    4150              :                            __gnu_cxx::__ops::__iter_equal_to_iter());
+    4151              :     }
+    4152              : 
+    4153              :   /**
+    4154              :    *  @brief Search a sequence for a matching sub-sequence using a predicate.
+    4155              :    *  @ingroup non_mutating_algorithms
+    4156              :    *  @param  __first1     A forward iterator.
+    4157              :    *  @param  __last1      A forward iterator.
+    4158              :    *  @param  __first2     A forward iterator.
+    4159              :    *  @param  __last2      A forward iterator.
+    4160              :    *  @param  __predicate  A binary predicate.
+    4161              :    *  @return   The first iterator @c i in the range
+    4162              :    *  @p [__first1,__last1-(__last2-__first2)) such that
+    4163              :    *  @p __predicate(*(i+N),*(__first2+N)) is true for each @c N in the range
+    4164              :    *  @p [0,__last2-__first2), or @p __last1 if no such iterator exists.
+    4165              :    *
+    4166              :    *  Searches the range @p [__first1,__last1) for a sub-sequence that
+    4167              :    *  compares equal value-by-value with the sequence given by @p
+    4168              :    *  [__first2,__last2), using @p __predicate to determine equality,
+    4169              :    *  and returns an iterator to the first element of the
+    4170              :    *  sub-sequence, or @p __last1 if no such iterator exists.
+    4171              :    *
+    4172              :    *  @see search(_ForwardIter1, _ForwardIter1, _ForwardIter2, _ForwardIter2)
+    4173              :   */
+    4174              :   template<typename _ForwardIterator1, typename _ForwardIterator2,
+    4175              :            typename _BinaryPredicate>
+    4176              :     _GLIBCXX20_CONSTEXPR
+    4177              :     inline _ForwardIterator1
+    4178              :     search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+    4179              :            _ForwardIterator2 __first2, _ForwardIterator2 __last2,
+    4180              :            _BinaryPredicate  __predicate)
+    4181              :     {
+    4182              :       // concept requirements
+    4183              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator1>)
+    4184              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator2>)
+    4185              :       __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
+    4186              :             typename iterator_traits<_ForwardIterator1>::value_type,
+    4187              :             typename iterator_traits<_ForwardIterator2>::value_type>)
+    4188              :       __glibcxx_requires_valid_range(__first1, __last1);
+    4189              :       __glibcxx_requires_valid_range(__first2, __last2);
+    4190              : 
+    4191              :       return std::__search(__first1, __last1, __first2, __last2,
+    4192              :                            __gnu_cxx::__ops::__iter_comp_iter(__predicate));
+    4193              :     }
+    4194              : 
+    4195              :   /**
+    4196              :    *  @brief Search a sequence for a number of consecutive values.
+    4197              :    *  @ingroup non_mutating_algorithms
+    4198              :    *  @param  __first  A forward iterator.
+    4199              :    *  @param  __last   A forward iterator.
+    4200              :    *  @param  __count  The number of consecutive values.
+    4201              :    *  @param  __val    The value to find.
+    4202              :    *  @return The first iterator @c i in the range @p
+    4203              :    *  [__first,__last-__count) such that @c *(i+N) == @p __val for
+    4204              :    *  each @c N in the range @p [0,__count), or @p __last if no such
+    4205              :    *  iterator exists.
+    4206              :    *
+    4207              :    *  Searches the range @p [__first,__last) for @p count consecutive elements
+    4208              :    *  equal to @p __val.
+    4209              :   */
+    4210              :   template<typename _ForwardIterator, typename _Integer, typename _Tp>
+    4211              :     _GLIBCXX20_CONSTEXPR
+    4212              :     inline _ForwardIterator
+    4213              :     search_n(_ForwardIterator __first, _ForwardIterator __last,
+    4214              :              _Integer __count, const _Tp& __val)
+    4215              :     {
+    4216              :       // concept requirements
+    4217              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    4218              :       __glibcxx_function_requires(_EqualOpConcept<
+    4219              :             typename iterator_traits<_ForwardIterator>::value_type, _Tp>)
+    4220              :       __glibcxx_requires_valid_range(__first, __last);
+    4221              : 
+    4222              :       return std::__search_n(__first, __last, __count,
+    4223              :                              __gnu_cxx::__ops::__iter_equals_val(__val));
+    4224              :     }
+    4225              : 
+    4226              : 
+    4227              :   /**
+    4228              :    *  @brief Search a sequence for a number of consecutive values using a
+    4229              :    *         predicate.
+    4230              :    *  @ingroup non_mutating_algorithms
+    4231              :    *  @param  __first        A forward iterator.
+    4232              :    *  @param  __last         A forward iterator.
+    4233              :    *  @param  __count        The number of consecutive values.
+    4234              :    *  @param  __val          The value to find.
+    4235              :    *  @param  __binary_pred  A binary predicate.
+    4236              :    *  @return The first iterator @c i in the range @p
+    4237              :    *  [__first,__last-__count) such that @p
+    4238              :    *  __binary_pred(*(i+N),__val) is true for each @c N in the range
+    4239              :    *  @p [0,__count), or @p __last if no such iterator exists.
+    4240              :    *
+    4241              :    *  Searches the range @p [__first,__last) for @p __count
+    4242              :    *  consecutive elements for which the predicate returns true.
+    4243              :   */
+    4244              :   template<typename _ForwardIterator, typename _Integer, typename _Tp,
+    4245              :            typename _BinaryPredicate>
+    4246              :     _GLIBCXX20_CONSTEXPR
+    4247              :     inline _ForwardIterator
+    4248              :     search_n(_ForwardIterator __first, _ForwardIterator __last,
+    4249              :              _Integer __count, const _Tp& __val,
+    4250              :              _BinaryPredicate __binary_pred)
+    4251              :     {
+    4252              :       // concept requirements
+    4253              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    4254              :       __glibcxx_function_requires(_BinaryPredicateConcept<_BinaryPredicate,
+    4255              :             typename iterator_traits<_ForwardIterator>::value_type, _Tp>)
+    4256              :       __glibcxx_requires_valid_range(__first, __last);
+    4257              : 
+    4258              :       return std::__search_n(__first, __last, __count,
+    4259              :                 __gnu_cxx::__ops::__iter_comp_val(__binary_pred, __val));
+    4260              :     }
+    4261              : 
+    4262              : #if __cplusplus >= 201703L
+    4263              :   /** @brief Search a sequence using a Searcher object.
+    4264              :    *
+    4265              :    *  @param  __first        A forward iterator.
+    4266              :    *  @param  __last         A forward iterator.
+    4267              :    *  @param  __searcher     A callable object.
+    4268              :    *  @return @p __searcher(__first,__last).first
+    4269              :   */
+    4270              :   template<typename _ForwardIterator, typename _Searcher>
+    4271              :     _GLIBCXX20_CONSTEXPR
+    4272              :     inline _ForwardIterator
+    4273              :     search(_ForwardIterator __first, _ForwardIterator __last,
+    4274              :            const _Searcher& __searcher)
+    4275              :     { return __searcher(__first, __last).first; }
+    4276              : #endif
+    4277              : 
+    4278              :   /**
+    4279              :    *  @brief Perform an operation on a sequence.
+    4280              :    *  @ingroup mutating_algorithms
+    4281              :    *  @param  __first     An input iterator.
+    4282              :    *  @param  __last      An input iterator.
+    4283              :    *  @param  __result    An output iterator.
+    4284              :    *  @param  __unary_op  A unary operator.
+    4285              :    *  @return   An output iterator equal to @p __result+(__last-__first).
+    4286              :    *
+    4287              :    *  Applies the operator to each element in the input range and assigns
+    4288              :    *  the results to successive elements of the output sequence.
+    4289              :    *  Evaluates @p *(__result+N)=unary_op(*(__first+N)) for each @c N in the
+    4290              :    *  range @p [0,__last-__first).
+    4291              :    *
+    4292              :    *  @p unary_op must not alter its argument.
+    4293              :   */
+    4294              :   template<typename _InputIterator, typename _OutputIterator,
+    4295              :            typename _UnaryOperation>
+    4296              :     _GLIBCXX20_CONSTEXPR
+    4297              :     _OutputIterator
+    4298     32223752 :     transform(_InputIterator __first, _InputIterator __last,
+    4299              :               _OutputIterator __result, _UnaryOperation __unary_op)
+    4300              :     {
+    4301              :       // concept requirements
+    4302              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+    4303              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    4304              :             // "the type returned by a _UnaryOperation"
+    4305              :             __typeof__(__unary_op(*__first))>)
+    4306              :       __glibcxx_requires_valid_range(__first, __last);
+    4307              : 
+    4308     92687554 :       for (; __first != __last; ++__first, (void)++__result)
+    4309     60463802 :         *__result = __unary_op(*__first);
+    4310     32223752 :       return __result;
+    4311              :     }
+    4312              : 
+    4313              :   /**
+    4314              :    *  @brief Perform an operation on corresponding elements of two sequences.
+    4315              :    *  @ingroup mutating_algorithms
+    4316              :    *  @param  __first1     An input iterator.
+    4317              :    *  @param  __last1      An input iterator.
+    4318              :    *  @param  __first2     An input iterator.
+    4319              :    *  @param  __result     An output iterator.
+    4320              :    *  @param  __binary_op  A binary operator.
+    4321              :    *  @return   An output iterator equal to @p result+(last-first).
+    4322              :    *
+    4323              :    *  Applies the operator to the corresponding elements in the two
+    4324              :    *  input ranges and assigns the results to successive elements of the
+    4325              :    *  output sequence.
+    4326              :    *  Evaluates @p
+    4327              :    *  *(__result+N)=__binary_op(*(__first1+N),*(__first2+N)) for each
+    4328              :    *  @c N in the range @p [0,__last1-__first1).
+    4329              :    *
+    4330              :    *  @p binary_op must not alter either of its arguments.
+    4331              :   */
+    4332              :   template<typename _InputIterator1, typename _InputIterator2,
+    4333              :            typename _OutputIterator, typename _BinaryOperation>
+    4334              :     _GLIBCXX20_CONSTEXPR
+    4335              :     _OutputIterator
+    4336        24060 :     transform(_InputIterator1 __first1, _InputIterator1 __last1,
+    4337              :               _InputIterator2 __first2, _OutputIterator __result,
+    4338              :               _BinaryOperation __binary_op)
+    4339              :     {
+    4340              :       // concept requirements
+    4341              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+    4342              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+    4343              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    4344              :             // "the type returned by a _BinaryOperation"
+    4345              :             __typeof__(__binary_op(*__first1,*__first2))>)
+    4346              :       __glibcxx_requires_valid_range(__first1, __last1);
+    4347              : 
+    4348       154020 :       for (; __first1 != __last1; ++__first1, (void)++__first2, ++__result)
+    4349       129960 :         *__result = __binary_op(*__first1, *__first2);
+    4350        24060 :       return __result;
+    4351              :     }
+    4352              : 
+    4353              :   /**
+    4354              :    *  @brief Replace each occurrence of one value in a sequence with another
+    4355              :    *         value.
+    4356              :    *  @ingroup mutating_algorithms
+    4357              :    *  @param  __first      A forward iterator.
+    4358              :    *  @param  __last       A forward iterator.
+    4359              :    *  @param  __old_value  The value to be replaced.
+    4360              :    *  @param  __new_value  The replacement value.
+    4361              :    *  @return   replace() returns no value.
+    4362              :    *
+    4363              :    *  For each iterator `i` in the range `[__first,__last)` if
+    4364              :    *  `*i == __old_value` then the assignment `*i = __new_value` is performed.
+    4365              :   */
+    4366              :   template<typename _ForwardIterator, typename _Tp>
+    4367              :     _GLIBCXX20_CONSTEXPR
+    4368              :     void
+    4369              :     replace(_ForwardIterator __first, _ForwardIterator __last,
+    4370              :             const _Tp& __old_value, const _Tp& __new_value)
+    4371              :     {
+    4372              :       // concept requirements
+    4373              :       __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
+    4374              :                                   _ForwardIterator>)
+    4375              :       __glibcxx_function_requires(_EqualOpConcept<
+    4376              :             typename iterator_traits<_ForwardIterator>::value_type, _Tp>)
+    4377              :       __glibcxx_function_requires(_ConvertibleConcept<_Tp,
+    4378              :             typename iterator_traits<_ForwardIterator>::value_type>)
+    4379              :       __glibcxx_requires_valid_range(__first, __last);
+    4380              : 
+    4381              :       for (; __first != __last; ++__first)
+    4382              :         if (*__first == __old_value)
+    4383              :           *__first = __new_value;
+    4384              :     }
+    4385              : 
+    4386              :   /**
+    4387              :    *  @brief Replace each value in a sequence for which a predicate returns
+    4388              :    *         true with another value.
+    4389              :    *  @ingroup mutating_algorithms
+    4390              :    *  @param  __first      A forward iterator.
+    4391              :    *  @param  __last       A forward iterator.
+    4392              :    *  @param  __pred       A predicate.
+    4393              :    *  @param  __new_value  The replacement value.
+    4394              :    *  @return   replace_if() returns no value.
+    4395              :    *
+    4396              :    *  For each iterator `i` in the range `[__first,__last)` if `__pred(*i)`
+    4397              :    *  is true then the assignment `*i = __new_value` is performed.
+    4398              :   */
+    4399              :   template<typename _ForwardIterator, typename _Predicate, typename _Tp>
+    4400              :     _GLIBCXX20_CONSTEXPR
+    4401              :     void
+    4402              :     replace_if(_ForwardIterator __first, _ForwardIterator __last,
+    4403              :                _Predicate __pred, const _Tp& __new_value)
+    4404              :     {
+    4405              :       // concept requirements
+    4406              :       __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
+    4407              :                                   _ForwardIterator>)
+    4408              :       __glibcxx_function_requires(_ConvertibleConcept<_Tp,
+    4409              :             typename iterator_traits<_ForwardIterator>::value_type>)
+    4410              :       __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
+    4411              :             typename iterator_traits<_ForwardIterator>::value_type>)
+    4412              :       __glibcxx_requires_valid_range(__first, __last);
+    4413              : 
+    4414              :       for (; __first != __last; ++__first)
+    4415              :         if (__pred(*__first))
+    4416              :           *__first = __new_value;
+    4417              :     }
+    4418              : 
+    4419              :   /**
+    4420              :    *  @brief Assign the result of a function object to each value in a
+    4421              :    *         sequence.
+    4422              :    *  @ingroup mutating_algorithms
+    4423              :    *  @param  __first  A forward iterator.
+    4424              :    *  @param  __last   A forward iterator.
+    4425              :    *  @param  __gen    A function object callable with no arguments.
+    4426              :    *  @return   generate() returns no value.
+    4427              :    *
+    4428              :    *  Performs the assignment `*i = __gen()` for each `i` in the range
+    4429              :    *  `[__first, __last)`.
+    4430              :   */
+    4431              :   template<typename _ForwardIterator, typename _Generator>
+    4432              :     _GLIBCXX20_CONSTEXPR
+    4433              :     void
+    4434              :     generate(_ForwardIterator __first, _ForwardIterator __last,
+    4435              :              _Generator __gen)
+    4436              :     {
+    4437              :       // concept requirements
+    4438              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    4439              :       __glibcxx_function_requires(_GeneratorConcept<_Generator,
+    4440              :             typename iterator_traits<_ForwardIterator>::value_type>)
+    4441              :       __glibcxx_requires_valid_range(__first, __last);
+    4442              : 
+    4443              :       for (; __first != __last; ++__first)
+    4444              :         *__first = __gen();
+    4445              :     }
+    4446              : 
+    4447              :   /**
+    4448              :    *  @brief Assign the result of a function object to each value in a
+    4449              :    *         sequence.
+    4450              :    *  @ingroup mutating_algorithms
+    4451              :    *  @param  __first  A forward iterator.
+    4452              :    *  @param  __n      The length of the sequence.
+    4453              :    *  @param  __gen    A function object callable with no arguments.
+    4454              :    *  @return   The end of the sequence, i.e., `__first + __n`
+    4455              :    *
+    4456              :    *  Performs the assignment `*i = __gen()` for each `i` in the range
+    4457              :    *  `[__first, __first + __n)`.
+    4458              :    *
+    4459              :    * If `__n` is negative, the function does nothing and returns `__first`.
+    4460              :   */
+    4461              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    4462              :   // DR 865. More algorithms that throw away information
+    4463              :   // DR 426. search_n(), fill_n(), and generate_n() with negative n
+    4464              :   template<typename _OutputIterator, typename _Size, typename _Generator>
+    4465              :     _GLIBCXX20_CONSTEXPR
+    4466              :     _OutputIterator
+    4467              :     generate_n(_OutputIterator __first, _Size __n, _Generator __gen)
+    4468              :     {
+    4469              :       // concept requirements
+    4470              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    4471              :             // "the type returned by a _Generator"
+    4472              :             __typeof__(__gen())>)
+    4473              : 
+    4474              :       typedef __decltype(std::__size_to_integer(__n)) _IntSize;
+    4475              :       for (_IntSize __niter = std::__size_to_integer(__n);
+    4476              :            __niter > 0; --__niter, (void) ++__first)
+    4477              :         *__first = __gen();
+    4478              :       return __first;
+    4479              :     }
+    4480              : 
+    4481              :   /**
+    4482              :    *  @brief Copy a sequence, removing consecutive duplicate values.
+    4483              :    *  @ingroup mutating_algorithms
+    4484              :    *  @param  __first   An input iterator.
+    4485              :    *  @param  __last    An input iterator.
+    4486              :    *  @param  __result  An output iterator.
+    4487              :    *  @return   An iterator designating the end of the resulting sequence.
+    4488              :    *
+    4489              :    *  Copies each element in the range `[__first, __last)` to the range
+    4490              :    *  beginning at `__result`, except that only the first element is copied
+    4491              :    *  from groups of consecutive elements that compare equal.
+    4492              :    *  `unique_copy()` is stable, so the relative order of elements that are
+    4493              :    *  copied is unchanged.
+    4494              :    */
+    4495              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    4496              :   // DR 241. Does unique_copy() require CopyConstructible and Assignable?
+    4497              :   // DR 538. 241 again: Does unique_copy() require CopyConstructible and
+    4498              :   // Assignable?
+    4499              :   template<typename _InputIterator, typename _OutputIterator>
+    4500              :     _GLIBCXX20_CONSTEXPR
+    4501              :     inline _OutputIterator
+    4502              :     unique_copy(_InputIterator __first, _InputIterator __last,
+    4503              :                 _OutputIterator __result)
+    4504              :     {
+    4505              :       // concept requirements
+    4506              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+    4507              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    4508              :             typename iterator_traits<_InputIterator>::value_type>)
+    4509              :       __glibcxx_function_requires(_EqualityComparableConcept<
+    4510              :             typename iterator_traits<_InputIterator>::value_type>)
+    4511              :       __glibcxx_requires_valid_range(__first, __last);
+    4512              : 
+    4513              :       if (__first == __last)
+    4514              :         return __result;
+    4515              :       return std::__unique_copy(__first, __last, __result,
+    4516              :                                 __gnu_cxx::__ops::__iter_equal_to_iter(),
+    4517              :                                 std::__iterator_category(__first),
+    4518              :                                 std::__iterator_category(__result));
+    4519              :     }
+    4520              : 
+    4521              :   /**
+    4522              :    *  @brief Copy a sequence, removing consecutive values using a predicate.
+    4523              :    *  @ingroup mutating_algorithms
+    4524              :    *  @param  __first        An input iterator.
+    4525              :    *  @param  __last         An input iterator.
+    4526              :    *  @param  __result       An output iterator.
+    4527              :    *  @param  __binary_pred  A binary predicate.
+    4528              :    *  @return   An iterator designating the end of the resulting sequence.
+    4529              :    *
+    4530              :    *  Copies each element in the range `[__first, __last)` to the range
+    4531              :    *  beginning at `__result`, except that only the first element is copied
+    4532              :    *  from groups of consecutive elements for which `__binary_pred` returns
+    4533              :    *  true.
+    4534              :    *  `unique_copy()` is stable, so the relative order of elements that are
+    4535              :    *  copied is unchanged.
+    4536              :    */
+    4537              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    4538              :   // DR 241. Does unique_copy() require CopyConstructible and Assignable?
+    4539              :   template<typename _InputIterator, typename _OutputIterator,
+    4540              :            typename _BinaryPredicate>
+    4541              :     _GLIBCXX20_CONSTEXPR
+    4542              :     inline _OutputIterator
+    4543              :     unique_copy(_InputIterator __first, _InputIterator __last,
+    4544              :                 _OutputIterator __result,
+    4545              :                 _BinaryPredicate __binary_pred)
+    4546              :     {
+    4547              :       // concept requirements -- predicates checked later
+    4548              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+    4549              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    4550              :             typename iterator_traits<_InputIterator>::value_type>)
+    4551              :       __glibcxx_requires_valid_range(__first, __last);
+    4552              : 
+    4553              :       if (__first == __last)
+    4554              :         return __result;
+    4555              :       return std::__unique_copy(__first, __last, __result,
+    4556              :                         __gnu_cxx::__ops::__iter_comp_iter(__binary_pred),
+    4557              :                                 std::__iterator_category(__first),
+    4558              :                                 std::__iterator_category(__result));
+    4559              :     }
+    4560              : 
+    4561              : #if __cplusplus <= 201103L || _GLIBCXX_USE_DEPRECATED
+    4562              : #if _GLIBCXX_HOSTED
+    4563              :   /**
+    4564              :    *  @brief Randomly shuffle the elements of a sequence.
+    4565              :    *  @ingroup mutating_algorithms
+    4566              :    *  @param  __first   A forward iterator.
+    4567              :    *  @param  __last    A forward iterator.
+    4568              :    *  @return  Nothing.
+    4569              :    *
+    4570              :    *  Reorder the elements in the range `[__first, __last)` using a random
+    4571              :    *  distribution, so that every possible ordering of the sequence is
+    4572              :    *  equally likely.
+    4573              :    *
+    4574              :    *  @deprecated
+    4575              :    *  Since C++17, `std::random_shuffle` is not part of the C++ standard.
+    4576              :    *  Use `std::shuffle` instead, which was introduced in C++11.
+    4577              :   */
+    4578              :   template<typename _RandomAccessIterator>
+    4579              :     _GLIBCXX14_DEPRECATED_SUGGEST("std::shuffle")
+    4580              :     inline void
+    4581              :     random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last)
+    4582              :     {
+    4583              :       // concept requirements
+    4584              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+    4585              :             _RandomAccessIterator>)
+    4586              :       __glibcxx_requires_valid_range(__first, __last);
+    4587              : 
+    4588              :       if (__first != __last)
+    4589              :         for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
+    4590              :           {
+    4591              :             // XXX rand() % N is not uniformly distributed
+    4592              :             _RandomAccessIterator __j = __first
+    4593              :                                         + std::rand() % ((__i - __first) + 1);
+    4594              :             if (__i != __j)
+    4595              :               std::iter_swap(__i, __j);
+    4596              :           }
+    4597              :     }
+    4598              : 
+    4599              :   /**
+    4600              :    *  @brief Shuffle the elements of a sequence using a random number
+    4601              :    *         generator.
+    4602              :    *  @ingroup mutating_algorithms
+    4603              :    *  @param  __first   A forward iterator.
+    4604              :    *  @param  __last    A forward iterator.
+    4605              :    *  @param  __rand    The RNG functor or function.
+    4606              :    *  @return  Nothing.
+    4607              :    *
+    4608              :    *  Reorders the elements in the range `[__first, __last)` using `__rand`
+    4609              :    *  to provide a random distribution. Calling `__rand(N)` for a positive
+    4610              :    *  integer `N` should return a randomly chosen integer from the
+    4611              :    *  range `[0, N)`.
+    4612              :    *
+    4613              :    *  @deprecated
+    4614              :    *  Since C++17, `std::random_shuffle` is not part of the C++ standard.
+    4615              :    *  Use `std::shuffle` instead, which was introduced in C++11.
+    4616              :   */
+    4617              :   template<typename _RandomAccessIterator, typename _RandomNumberGenerator>
+    4618              :     _GLIBCXX14_DEPRECATED_SUGGEST("std::shuffle")
+    4619              :     void
+    4620              :     random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
+    4621              : #if __cplusplus >= 201103L
+    4622              :                    _RandomNumberGenerator&& __rand)
+    4623              : #else
+    4624              :                    _RandomNumberGenerator& __rand)
+    4625              : #endif
+    4626              :     {
+    4627              :       // concept requirements
+    4628              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+    4629              :             _RandomAccessIterator>)
+    4630              :       __glibcxx_requires_valid_range(__first, __last);
+    4631              : 
+    4632              :       if (__first == __last)
+    4633              :         return;
+    4634              :       for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
+    4635              :         {
+    4636              :           _RandomAccessIterator __j = __first + __rand((__i - __first) + 1);
+    4637              :           if (__i != __j)
+    4638              :             std::iter_swap(__i, __j);
+    4639              :         }
+    4640              :     }
+    4641              : #endif // HOSTED
+    4642              : #endif // <= C++11 || USE_DEPRECATED
+    4643              : 
+    4644              :   /**
+    4645              :    *  @brief Move elements for which a predicate is true to the beginning
+    4646              :    *         of a sequence.
+    4647              :    *  @ingroup mutating_algorithms
+    4648              :    *  @param  __first   A forward iterator.
+    4649              :    *  @param  __last    A forward iterator.
+    4650              :    *  @param  __pred    A predicate functor.
+    4651              :    *  @return  An iterator `middle` such that `__pred(i)` is true for each
+    4652              :    *  iterator `i` in the range `[__first, middle)` and false for each `i`
+    4653              :    *  in the range `[middle, __last)`.
+    4654              :    *
+    4655              :    *  `__pred` must not modify its operand. `partition()` does not preserve
+    4656              :    *  the relative ordering of elements in each group, use
+    4657              :    *  `stable_partition()` if this is needed.
+    4658              :   */
+    4659              :   template<typename _ForwardIterator, typename _Predicate>
+    4660              :     _GLIBCXX20_CONSTEXPR
+    4661              :     inline _ForwardIterator
+    4662              :     partition(_ForwardIterator __first, _ForwardIterator __last,
+    4663              :               _Predicate   __pred)
+    4664              :     {
+    4665              :       // concept requirements
+    4666              :       __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
+    4667              :                                   _ForwardIterator>)
+    4668              :       __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,
+    4669              :             typename iterator_traits<_ForwardIterator>::value_type>)
+    4670              :       __glibcxx_requires_valid_range(__first, __last);
+    4671              : 
+    4672              :       return std::__partition(__first, __last, __pred,
+    4673              :                               std::__iterator_category(__first));
+    4674              :     }
+    4675              : 
+    4676              : 
+    4677              :   /**
+    4678              :    *  @brief Sort the smallest elements of a sequence.
+    4679              :    *  @ingroup sorting_algorithms
+    4680              :    *  @param  __first   An iterator.
+    4681              :    *  @param  __middle  Another iterator.
+    4682              :    *  @param  __last    Another iterator.
+    4683              :    *  @return  Nothing.
+    4684              :    *
+    4685              :    *  Sorts the smallest `(__middle - __first)` elements in the range
+    4686              :    *  `[first, last)` and moves them to the range `[__first, __middle)`. The
+    4687              :    *  order of the remaining elements in the range `[__middle, __last)` is
+    4688              :    *  unspecified.
+    4689              :    *  After the sort if `i` and `j` are iterators in the range
+    4690              :    *  `[__first, __middle)` such that `i` precedes `j` and `k` is an iterator
+    4691              :    *  in the range `[__middle, __last)` then `*j < *i` and `*k < *i` are
+    4692              :    *  both false.
+    4693              :   */
+    4694              :   template<typename _RandomAccessIterator>
+    4695              :     _GLIBCXX20_CONSTEXPR
+    4696              :     inline void
+    4697              :     partial_sort(_RandomAccessIterator __first,
+    4698              :                  _RandomAccessIterator __middle,
+    4699              :                  _RandomAccessIterator __last)
+    4700              :     {
+    4701              :       // concept requirements
+    4702              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+    4703              :             _RandomAccessIterator>)
+    4704              :       __glibcxx_function_requires(_LessThanComparableConcept<
+    4705              :             typename iterator_traits<_RandomAccessIterator>::value_type>)
+    4706              :       __glibcxx_requires_valid_range(__first, __middle);
+    4707              :       __glibcxx_requires_valid_range(__middle, __last);
+    4708              :       __glibcxx_requires_irreflexive(__first, __last);
+    4709              : 
+    4710              :       std::__partial_sort(__first, __middle, __last,
+    4711              :                           __gnu_cxx::__ops::__iter_less_iter());
+    4712              :     }
+    4713              : 
+    4714              :   /**
+    4715              :    *  @brief Sort the smallest elements of a sequence using a predicate
+    4716              :    *         for comparison.
+    4717              :    *  @ingroup sorting_algorithms
+    4718              :    *  @param  __first   An iterator.
+    4719              :    *  @param  __middle  Another iterator.
+    4720              :    *  @param  __last    Another iterator.
+    4721              :    *  @param  __comp    A comparison functor.
+    4722              :    *  @return  Nothing.
+    4723              :    *
+    4724              :    *  Sorts the smallest `(__middle - __first)` elements in the range
+    4725              :    *  `[__first, __last)` and moves them to the range `[__first, __middle)`.
+    4726              :    *  The order of the remaining elements in the range `[__middle, __last)` is
+    4727              :    *  unspecified.
+    4728              :    *  After the sort if `i` and `j` are iterators in the range
+    4729              :    *  `[__first, __middle)` such that `i` precedes `j` and `k` is an iterator
+    4730              :    *  in the range `[__middle, __last)` then `*__comp(j, *i)` and
+    4731              :    *  `__comp(*k, *i)` are both false.
+    4732              :   */
+    4733              :   template<typename _RandomAccessIterator, typename _Compare>
+    4734              :     _GLIBCXX20_CONSTEXPR
+    4735              :     inline void
+    4736              :     partial_sort(_RandomAccessIterator __first,
+    4737              :                  _RandomAccessIterator __middle,
+    4738              :                  _RandomAccessIterator __last,
+    4739              :                  _Compare __comp)
+    4740              :     {
+    4741              :       // concept requirements
+    4742              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+    4743              :             _RandomAccessIterator>)
+    4744              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    4745              :             typename iterator_traits<_RandomAccessIterator>::value_type,
+    4746              :             typename iterator_traits<_RandomAccessIterator>::value_type>)
+    4747              :       __glibcxx_requires_valid_range(__first, __middle);
+    4748              :       __glibcxx_requires_valid_range(__middle, __last);
+    4749              :       __glibcxx_requires_irreflexive_pred(__first, __last, __comp);
+    4750              : 
+    4751              :       std::__partial_sort(__first, __middle, __last,
+    4752              :                           __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    4753              :     }
+    4754              : 
+    4755              :   /**
+    4756              :    *  @brief Sort a sequence just enough to find a particular position.
+    4757              :    *  @ingroup sorting_algorithms
+    4758              :    *  @param  __first   An iterator.
+    4759              :    *  @param  __nth     Another iterator.
+    4760              :    *  @param  __last    Another iterator.
+    4761              :    *  @return  Nothing.
+    4762              :    *
+    4763              :    *  Rearranges the elements in the range `[__first, __last)` so that `*__nth`
+    4764              :    *  is the same element that would have been in that position had the
+    4765              :    *  whole sequence been sorted. The elements either side of `*__nth` are
+    4766              :    *  not completely sorted, but for any iterator `i` in the range
+    4767              :    *  `[__first, __nth)` and any iterator `j` in the range `[__nth, __last)` it
+    4768              :    *  holds that `*j < *i` is false.
+    4769              :   */
+    4770              :   template<typename _RandomAccessIterator>
+    4771              :     _GLIBCXX20_CONSTEXPR
+    4772              :     inline void
+    4773              :     nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth,
+    4774              :                 _RandomAccessIterator __last)
+    4775              :     {
+    4776              :       // concept requirements
+    4777              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+    4778              :                                   _RandomAccessIterator>)
+    4779              :       __glibcxx_function_requires(_LessThanComparableConcept<
+    4780              :             typename iterator_traits<_RandomAccessIterator>::value_type>)
+    4781              :       __glibcxx_requires_valid_range(__first, __nth);
+    4782              :       __glibcxx_requires_valid_range(__nth, __last);
+    4783              :       __glibcxx_requires_irreflexive(__first, __last);
+    4784              : 
+    4785              :       if (__first == __last || __nth == __last)
+    4786              :         return;
+    4787              : 
+    4788              :       std::__introselect(__first, __nth, __last,
+    4789              :                          std::__lg(__last - __first) * 2,
+    4790              :                          __gnu_cxx::__ops::__iter_less_iter());
+    4791              :     }
+    4792              : 
+    4793              :   /**
+    4794              :    *  @brief Sort a sequence just enough to find a particular position
+    4795              :    *         using a predicate for comparison.
+    4796              :    *  @ingroup sorting_algorithms
+    4797              :    *  @param  __first   An iterator.
+    4798              :    *  @param  __nth     Another iterator.
+    4799              :    *  @param  __last    Another iterator.
+    4800              :    *  @param  __comp    A comparison functor.
+    4801              :    *  @return  Nothing.
+    4802              :    *
+    4803              :    *  Rearranges the elements in the range `[__first, __last)` so that `*__nth`
+    4804              :    *  is the same element that would have been in that position had the
+    4805              :    *  whole sequence been sorted. The elements either side of `*__nth` are
+    4806              :    *  not completely sorted, but for any iterator `i` in the range
+    4807              :    *  `[__first, __nth)` and any iterator `j` in the range `[__nth, __last)`
+    4808              :    *  it holds that `__comp(*j, *i)` is false.
+    4809              :   */
+    4810              :   template<typename _RandomAccessIterator, typename _Compare>
+    4811              :     _GLIBCXX20_CONSTEXPR
+    4812              :     inline void
+    4813              :     nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth,
+    4814              :                 _RandomAccessIterator __last, _Compare __comp)
+    4815              :     {
+    4816              :       // concept requirements
+    4817              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+    4818              :                                   _RandomAccessIterator>)
+    4819              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    4820              :             typename iterator_traits<_RandomAccessIterator>::value_type,
+    4821              :             typename iterator_traits<_RandomAccessIterator>::value_type>)
+    4822              :       __glibcxx_requires_valid_range(__first, __nth);
+    4823              :       __glibcxx_requires_valid_range(__nth, __last);
+    4824              :       __glibcxx_requires_irreflexive_pred(__first, __last, __comp);
+    4825              : 
+    4826              :       if (__first == __last || __nth == __last)
+    4827              :         return;
+    4828              : 
+    4829              :       std::__introselect(__first, __nth, __last,
+    4830              :                          std::__lg(__last - __first) * 2,
+    4831              :                          __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    4832              :     }
+    4833              : 
+    4834              :   /**
+    4835              :    *  @brief Sort the elements of a sequence.
+    4836              :    *  @ingroup sorting_algorithms
+    4837              :    *  @param  __first   An iterator.
+    4838              :    *  @param  __last    Another iterator.
+    4839              :    *  @return  Nothing.
+    4840              :    *
+    4841              :    *  Sorts the elements in the range `[__first, __last)` in ascending order,
+    4842              :    *  such that for each iterator `i` in the range `[__first, __last - 1)`,
+    4843              :    *  `*(i+1) < *i` is false.
+    4844              :    *
+    4845              :    *  The relative ordering of equivalent elements is not preserved, use
+    4846              :    *  `stable_sort()` if this is needed.
+    4847              :   */
+    4848              :   template<typename _RandomAccessIterator>
+    4849              :     _GLIBCXX20_CONSTEXPR
+    4850              :     inline void
+    4851            0 :     sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
+    4852              :     {
+    4853              :       // concept requirements
+    4854              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+    4855              :             _RandomAccessIterator>)
+    4856              :       __glibcxx_function_requires(_LessThanComparableConcept<
+    4857              :             typename iterator_traits<_RandomAccessIterator>::value_type>)
+    4858              :       __glibcxx_requires_valid_range(__first, __last);
+    4859              :       __glibcxx_requires_irreflexive(__first, __last);
+    4860              : 
+    4861            0 :       std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
+    4862            0 :     }
+    4863              : 
+    4864              :   /**
+    4865              :    *  @brief Sort the elements of a sequence using a predicate for comparison.
+    4866              :    *  @ingroup sorting_algorithms
+    4867              :    *  @param  __first   An iterator.
+    4868              :    *  @param  __last    Another iterator.
+    4869              :    *  @param  __comp    A comparison functor.
+    4870              :    *  @return  Nothing.
+    4871              :    *
+    4872              :    *  Sorts the elements in the range `[__first, __last)` in ascending order,
+    4873              :    *  such that `__comp(*(i+1), *i)` is false for every iterator `i` in the
+    4874              :    *  range `[__first, __last - 1)`.
+    4875              :    *
+    4876              :    *  The relative ordering of equivalent elements is not preserved, use
+    4877              :    *  `stable_sort()` if this is needed.
+    4878              :   */
+    4879              :   template<typename _RandomAccessIterator, typename _Compare>
+    4880              :     _GLIBCXX20_CONSTEXPR
+    4881              :     inline void
+    4882          544 :     sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
+    4883              :          _Compare __comp)
+    4884              :     {
+    4885              :       // concept requirements
+    4886              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+    4887              :             _RandomAccessIterator>)
+    4888              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    4889              :             typename iterator_traits<_RandomAccessIterator>::value_type,
+    4890              :             typename iterator_traits<_RandomAccessIterator>::value_type>)
+    4891              :       __glibcxx_requires_valid_range(__first, __last);
+    4892              :       __glibcxx_requires_irreflexive_pred(__first, __last, __comp);
+    4893              : 
+    4894          544 :       std::__sort(__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    4895          544 :     }
+    4896              : 
+    4897              :   template<typename _InputIterator1, typename _InputIterator2,
+    4898              :            typename _OutputIterator, typename _Compare>
+    4899              :     _GLIBCXX20_CONSTEXPR
+    4900              :     _OutputIterator
+    4901              :     __merge(_InputIterator1 __first1, _InputIterator1 __last1,
+    4902              :             _InputIterator2 __first2, _InputIterator2 __last2,
+    4903              :             _OutputIterator __result, _Compare __comp)
+    4904              :     {
+    4905              :       while (__first1 != __last1 && __first2 != __last2)
+    4906              :         {
+    4907              :           if (__comp(__first2, __first1))
+    4908              :             {
+    4909              :               *__result = *__first2;
+    4910              :               ++__first2;
+    4911              :             }
+    4912              :           else
+    4913              :             {
+    4914              :               *__result = *__first1;
+    4915              :               ++__first1;
+    4916              :             }
+    4917              :           ++__result;
+    4918              :         }
+    4919              :       return std::copy(__first2, __last2,
+    4920              :                        std::copy(__first1, __last1, __result));
+    4921              :     }
+    4922              : 
+    4923              :   /**
+    4924              :    *  @brief Merges two sorted ranges.
+    4925              :    *  @ingroup sorting_algorithms
+    4926              :    *  @param  __first1  An iterator.
+    4927              :    *  @param  __first2  Another iterator.
+    4928              :    *  @param  __last1   Another iterator.
+    4929              :    *  @param  __last2   Another iterator.
+    4930              :    *  @param  __result  An iterator pointing to the end of the merged range.
+    4931              :    *  @return   An output iterator equal to @p __result + (__last1 - __first1)
+    4932              :    *            + (__last2 - __first2).
+    4933              :    *
+    4934              :    *  Merges the ranges @p [__first1,__last1) and @p [__first2,__last2) into
+    4935              :    *  the sorted range @p [__result, __result + (__last1-__first1) +
+    4936              :    *  (__last2-__first2)).  Both input ranges must be sorted, and the
+    4937              :    *  output range must not overlap with either of the input ranges.
+    4938              :    *  The sort is @e stable, that is, for equivalent elements in the
+    4939              :    *  two ranges, elements from the first range will always come
+    4940              :    *  before elements from the second.
+    4941              :   */
+    4942              :   template<typename _InputIterator1, typename _InputIterator2,
+    4943              :            typename _OutputIterator>
+    4944              :     _GLIBCXX20_CONSTEXPR
+    4945              :     inline _OutputIterator
+    4946              :     merge(_InputIterator1 __first1, _InputIterator1 __last1,
+    4947              :           _InputIterator2 __first2, _InputIterator2 __last2,
+    4948              :           _OutputIterator __result)
+    4949              :     {
+    4950              :       // concept requirements
+    4951              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+    4952              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+    4953              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    4954              :             typename iterator_traits<_InputIterator1>::value_type>)
+    4955              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    4956              :             typename iterator_traits<_InputIterator2>::value_type>)
+    4957              :       __glibcxx_function_requires(_LessThanOpConcept<
+    4958              :             typename iterator_traits<_InputIterator2>::value_type,
+    4959              :             typename iterator_traits<_InputIterator1>::value_type>)    
+    4960              :       __glibcxx_requires_sorted_set(__first1, __last1, __first2);
+    4961              :       __glibcxx_requires_sorted_set(__first2, __last2, __first1);
+    4962              :       __glibcxx_requires_irreflexive2(__first1, __last1);
+    4963              :       __glibcxx_requires_irreflexive2(__first2, __last2);
+    4964              : 
+    4965              :       return _GLIBCXX_STD_A::__merge(__first1, __last1,
+    4966              :                                      __first2, __last2, __result,
+    4967              :                                      __gnu_cxx::__ops::__iter_less_iter());
+    4968              :     }
+    4969              : 
+    4970              :   /**
+    4971              :    *  @brief Merges two sorted ranges.
+    4972              :    *  @ingroup sorting_algorithms
+    4973              :    *  @param  __first1  An iterator.
+    4974              :    *  @param  __first2  Another iterator.
+    4975              :    *  @param  __last1   Another iterator.
+    4976              :    *  @param  __last2   Another iterator.
+    4977              :    *  @param  __result  An iterator pointing to the end of the merged range.
+    4978              :    *  @param  __comp    A functor to use for comparisons.
+    4979              :    *  @return   An output iterator equal to @p __result + (__last1 - __first1)
+    4980              :    *            + (__last2 - __first2).
+    4981              :    *
+    4982              :    *  Merges the ranges @p [__first1,__last1) and @p [__first2,__last2) into
+    4983              :    *  the sorted range @p [__result, __result + (__last1-__first1) +
+    4984              :    *  (__last2-__first2)).  Both input ranges must be sorted, and the
+    4985              :    *  output range must not overlap with either of the input ranges.
+    4986              :    *  The sort is @e stable, that is, for equivalent elements in the
+    4987              :    *  two ranges, elements from the first range will always come
+    4988              :    *  before elements from the second.
+    4989              :    *
+    4990              :    *  The comparison function should have the same effects on ordering as
+    4991              :    *  the function used for the initial sort.
+    4992              :   */
+    4993              :   template<typename _InputIterator1, typename _InputIterator2,
+    4994              :            typename _OutputIterator, typename _Compare>
+    4995              :     _GLIBCXX20_CONSTEXPR
+    4996              :     inline _OutputIterator
+    4997              :     merge(_InputIterator1 __first1, _InputIterator1 __last1,
+    4998              :           _InputIterator2 __first2, _InputIterator2 __last2,
+    4999              :           _OutputIterator __result, _Compare __comp)
+    5000              :     {
+    5001              :       // concept requirements
+    5002              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+    5003              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+    5004              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    5005              :             typename iterator_traits<_InputIterator1>::value_type>)
+    5006              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    5007              :             typename iterator_traits<_InputIterator2>::value_type>)
+    5008              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    5009              :             typename iterator_traits<_InputIterator2>::value_type,
+    5010              :             typename iterator_traits<_InputIterator1>::value_type>)
+    5011              :       __glibcxx_requires_sorted_set_pred(__first1, __last1, __first2, __comp);
+    5012              :       __glibcxx_requires_sorted_set_pred(__first2, __last2, __first1, __comp);
+    5013              :       __glibcxx_requires_irreflexive_pred2(__first1, __last1, __comp);
+    5014              :       __glibcxx_requires_irreflexive_pred2(__first2, __last2, __comp);
+    5015              : 
+    5016              :       return _GLIBCXX_STD_A::__merge(__first1, __last1,
+    5017              :                                 __first2, __last2, __result,
+    5018              :                                 __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    5019              :     }
+    5020              : 
+    5021              :   template<typename _RandomAccessIterator, typename _Compare>
+    5022              :     inline void
+    5023           58 :     __stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
+    5024              :                   _Compare __comp)
+    5025              :     {
+    5026              :       typedef typename iterator_traits<_RandomAccessIterator>::value_type
+    5027              :         _ValueType;
+    5028              :       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+    5029              :         _DistanceType;
+    5030              : 
+    5031           58 :       if (__first == __last)
+    5032            0 :         return;
+    5033              : 
+    5034              : #if _GLIBCXX_HOSTED
+    5035              :       typedef _Temporary_buffer<_RandomAccessIterator, _ValueType> _TmpBuf;
+    5036              :       // __stable_sort_adaptive sorts the range in two halves,
+    5037              :       // so the buffer only needs to fit half the range at once.
+    5038           58 :       _TmpBuf __buf(__first, (__last - __first + 1) / 2);
+    5039              : 
+    5040           58 :       if (__builtin_expect(__buf.requested_size() == __buf.size(), true))
+    5041          116 :         std::__stable_sort_adaptive(__first,
+    5042           58 :                                     __first + _DistanceType(__buf.size()),
+    5043              :                                     __last, __buf.begin(), __comp);
+    5044            0 :       else if (__builtin_expect(__buf.begin() == 0, false))
+    5045            0 :         std::__inplace_stable_sort(__first, __last, __comp);
+    5046              :       else
+    5047            0 :         std::__stable_sort_adaptive_resize(__first, __last, __buf.begin(),
+    5048            0 :                                            _DistanceType(__buf.size()), __comp);
+    5049              : #else
+    5050              :       std::__inplace_stable_sort(__first, __last, __comp);
+    5051              : #endif
+    5052           58 :     }
+    5053              : 
+    5054              :   /**
+    5055              :    *  @brief Sort the elements of a sequence, preserving the relative order
+    5056              :    *         of equivalent elements.
+    5057              :    *  @ingroup sorting_algorithms
+    5058              :    *  @param  __first   An iterator.
+    5059              :    *  @param  __last    Another iterator.
+    5060              :    *  @return  Nothing.
+    5061              :    *
+    5062              :    *  Sorts the elements in the range @p [__first,__last) in ascending order,
+    5063              :    *  such that for each iterator @p i in the range @p [__first,__last-1),
+    5064              :    *  @p *(i+1)<*i is false.
+    5065              :    *
+    5066              :    *  The relative ordering of equivalent elements is preserved, so any two
+    5067              :    *  elements @p x and @p y in the range @p [__first,__last) such that
+    5068              :    *  @p x<y is false and @p y<x is false will have the same relative
+    5069              :    *  ordering after calling @p stable_sort().
+    5070              :   */
+    5071              :   template<typename _RandomAccessIterator>
+    5072              :     inline void
+    5073              :     stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
+    5074              :     {
+    5075              :       // concept requirements
+    5076              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+    5077              :             _RandomAccessIterator>)
+    5078              :       __glibcxx_function_requires(_LessThanComparableConcept<
+    5079              :             typename iterator_traits<_RandomAccessIterator>::value_type>)
+    5080              :       __glibcxx_requires_valid_range(__first, __last);
+    5081              :       __glibcxx_requires_irreflexive(__first, __last);
+    5082              : 
+    5083              :       _GLIBCXX_STD_A::__stable_sort(__first, __last,
+    5084              :                                     __gnu_cxx::__ops::__iter_less_iter());
+    5085              :     }
+    5086              : 
+    5087              :   /**
+    5088              :    *  @brief Sort the elements of a sequence using a predicate for comparison,
+    5089              :    *         preserving the relative order of equivalent elements.
+    5090              :    *  @ingroup sorting_algorithms
+    5091              :    *  @param  __first   An iterator.
+    5092              :    *  @param  __last    Another iterator.
+    5093              :    *  @param  __comp    A comparison functor.
+    5094              :    *  @return  Nothing.
+    5095              :    *
+    5096              :    *  Sorts the elements in the range @p [__first,__last) in ascending order,
+    5097              :    *  such that for each iterator @p i in the range @p [__first,__last-1),
+    5098              :    *  @p __comp(*(i+1),*i) is false.
+    5099              :    *
+    5100              :    *  The relative ordering of equivalent elements is preserved, so any two
+    5101              :    *  elements @p x and @p y in the range @p [__first,__last) such that
+    5102              :    *  @p __comp(x,y) is false and @p __comp(y,x) is false will have the same
+    5103              :    *  relative ordering after calling @p stable_sort().
+    5104              :   */
+    5105              :   template<typename _RandomAccessIterator, typename _Compare>
+    5106              :     inline void
+    5107           58 :     stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
+    5108              :                 _Compare __comp)
+    5109              :     {
+    5110              :       // concept requirements
+    5111              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+    5112              :             _RandomAccessIterator>)
+    5113              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    5114              :             typename iterator_traits<_RandomAccessIterator>::value_type,
+    5115              :             typename iterator_traits<_RandomAccessIterator>::value_type>)
+    5116              :       __glibcxx_requires_valid_range(__first, __last);
+    5117              :       __glibcxx_requires_irreflexive_pred(__first, __last, __comp);
+    5118              : 
+    5119           58 :       _GLIBCXX_STD_A::__stable_sort(__first, __last,
+    5120              :                                     __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    5121           58 :     }
+    5122              : 
+    5123              :   template<typename _InputIterator1, typename _InputIterator2,
+    5124              :            typename _OutputIterator,
+    5125              :            typename _Compare>
+    5126              :     _GLIBCXX20_CONSTEXPR
+    5127              :     _OutputIterator
+    5128              :     __set_union(_InputIterator1 __first1, _InputIterator1 __last1,
+    5129              :                 _InputIterator2 __first2, _InputIterator2 __last2,
+    5130              :                 _OutputIterator __result, _Compare __comp)
+    5131              :     {
+    5132              :       while (__first1 != __last1 && __first2 != __last2)
+    5133              :         {
+    5134              :           if (__comp(__first1, __first2))
+    5135              :             {
+    5136              :               *__result = *__first1;
+    5137              :               ++__first1;
+    5138              :             }
+    5139              :           else if (__comp(__first2, __first1))
+    5140              :             {
+    5141              :               *__result = *__first2;
+    5142              :               ++__first2;
+    5143              :             }
+    5144              :           else
+    5145              :             {
+    5146              :               *__result = *__first1;
+    5147              :               ++__first1;
+    5148              :               ++__first2;
+    5149              :             }
+    5150              :           ++__result;
+    5151              :         }
+    5152              :       return std::copy(__first2, __last2,
+    5153              :                        std::copy(__first1, __last1, __result));
+    5154              :     }
+    5155              : 
+    5156              :   /**
+    5157              :    *  @brief Return the union of two sorted ranges.
+    5158              :    *  @ingroup set_algorithms
+    5159              :    *  @param  __first1  Start of first range.
+    5160              :    *  @param  __last1   End of first range.
+    5161              :    *  @param  __first2  Start of second range.
+    5162              :    *  @param  __last2   End of second range.
+    5163              :    *  @param  __result  Start of output range.
+    5164              :    *  @return  End of the output range.
+    5165              :    *  @ingroup set_algorithms
+    5166              :    *
+    5167              :    *  This operation iterates over both ranges, copying elements present in
+    5168              :    *  each range in order to the output range.  Iterators increment for each
+    5169              :    *  range.  When the current element of one range is less than the other,
+    5170              :    *  that element is copied and the iterator advanced.  If an element is
+    5171              :    *  contained in both ranges, the element from the first range is copied and
+    5172              :    *  both ranges advance.  The output range may not overlap either input
+    5173              :    *  range.
+    5174              :   */
+    5175              :   template<typename _InputIterator1, typename _InputIterator2,
+    5176              :            typename _OutputIterator>
+    5177              :     _GLIBCXX20_CONSTEXPR
+    5178              :     inline _OutputIterator
+    5179              :     set_union(_InputIterator1 __first1, _InputIterator1 __last1,
+    5180              :               _InputIterator2 __first2, _InputIterator2 __last2,
+    5181              :               _OutputIterator __result)
+    5182              :     {
+    5183              :       // concept requirements
+    5184              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+    5185              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+    5186              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    5187              :             typename iterator_traits<_InputIterator1>::value_type>)
+    5188              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    5189              :             typename iterator_traits<_InputIterator2>::value_type>)
+    5190              :       __glibcxx_function_requires(_LessThanOpConcept<
+    5191              :             typename iterator_traits<_InputIterator1>::value_type,
+    5192              :             typename iterator_traits<_InputIterator2>::value_type>)
+    5193              :       __glibcxx_function_requires(_LessThanOpConcept<
+    5194              :             typename iterator_traits<_InputIterator2>::value_type,
+    5195              :             typename iterator_traits<_InputIterator1>::value_type>)
+    5196              :       __glibcxx_requires_sorted_set(__first1, __last1, __first2);
+    5197              :       __glibcxx_requires_sorted_set(__first2, __last2, __first1);
+    5198              :       __glibcxx_requires_irreflexive2(__first1, __last1);
+    5199              :       __glibcxx_requires_irreflexive2(__first2, __last2);
+    5200              : 
+    5201              :       return _GLIBCXX_STD_A::__set_union(__first1, __last1,
+    5202              :                                 __first2, __last2, __result,
+    5203              :                                 __gnu_cxx::__ops::__iter_less_iter());
+    5204              :     }
+    5205              : 
+    5206              :   /**
+    5207              :    *  @brief Return the union of two sorted ranges using a comparison functor.
+    5208              :    *  @ingroup set_algorithms
+    5209              :    *  @param  __first1  Start of first range.
+    5210              :    *  @param  __last1   End of first range.
+    5211              :    *  @param  __first2  Start of second range.
+    5212              :    *  @param  __last2   End of second range.
+    5213              :    *  @param  __result  Start of output range.
+    5214              :    *  @param  __comp    The comparison functor.
+    5215              :    *  @return  End of the output range.
+    5216              :    *  @ingroup set_algorithms
+    5217              :    *
+    5218              :    *  This operation iterates over both ranges, copying elements present in
+    5219              :    *  each range in order to the output range.  Iterators increment for each
+    5220              :    *  range.  When the current element of one range is less than the other
+    5221              :    *  according to @p __comp, that element is copied and the iterator advanced.
+    5222              :    *  If an equivalent element according to @p __comp is contained in both
+    5223              :    *  ranges, the element from the first range is copied and both ranges
+    5224              :    *  advance.  The output range may not overlap either input range.
+    5225              :   */
+    5226              :   template<typename _InputIterator1, typename _InputIterator2,
+    5227              :            typename _OutputIterator, typename _Compare>
+    5228              :     _GLIBCXX20_CONSTEXPR
+    5229              :     inline _OutputIterator
+    5230              :     set_union(_InputIterator1 __first1, _InputIterator1 __last1,
+    5231              :               _InputIterator2 __first2, _InputIterator2 __last2,
+    5232              :               _OutputIterator __result, _Compare __comp)
+    5233              :     {
+    5234              :       // concept requirements
+    5235              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+    5236              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+    5237              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    5238              :             typename iterator_traits<_InputIterator1>::value_type>)
+    5239              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    5240              :             typename iterator_traits<_InputIterator2>::value_type>)
+    5241              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    5242              :             typename iterator_traits<_InputIterator1>::value_type,
+    5243              :             typename iterator_traits<_InputIterator2>::value_type>)
+    5244              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    5245              :             typename iterator_traits<_InputIterator2>::value_type,
+    5246              :             typename iterator_traits<_InputIterator1>::value_type>)
+    5247              :       __glibcxx_requires_sorted_set_pred(__first1, __last1, __first2, __comp);
+    5248              :       __glibcxx_requires_sorted_set_pred(__first2, __last2, __first1, __comp);
+    5249              :       __glibcxx_requires_irreflexive_pred2(__first1, __last1, __comp);
+    5250              :       __glibcxx_requires_irreflexive_pred2(__first2, __last2, __comp);
+    5251              : 
+    5252              :       return _GLIBCXX_STD_A::__set_union(__first1, __last1,
+    5253              :                                 __first2, __last2, __result,
+    5254              :                                 __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    5255              :     }
+    5256              : 
+    5257              :   template<typename _InputIterator1, typename _InputIterator2,
+    5258              :            typename _OutputIterator,
+    5259              :            typename _Compare>
+    5260              :     _GLIBCXX20_CONSTEXPR
+    5261              :     _OutputIterator
+    5262              :     __set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
+    5263              :                        _InputIterator2 __first2, _InputIterator2 __last2,
+    5264              :                        _OutputIterator __result, _Compare __comp)
+    5265              :     {
+    5266              :       while (__first1 != __last1 && __first2 != __last2)
+    5267              :         if (__comp(__first1, __first2))
+    5268              :           ++__first1;
+    5269              :         else if (__comp(__first2, __first1))
+    5270              :           ++__first2;
+    5271              :         else
+    5272              :           {
+    5273              :             *__result = *__first1;
+    5274              :             ++__first1;
+    5275              :             ++__first2;
+    5276              :             ++__result;
+    5277              :           }
+    5278              :       return __result;
+    5279              :     }
+    5280              : 
+    5281              :   /**
+    5282              :    *  @brief Return the intersection of two sorted ranges.
+    5283              :    *  @ingroup set_algorithms
+    5284              :    *  @param  __first1  Start of first range.
+    5285              :    *  @param  __last1   End of first range.
+    5286              :    *  @param  __first2  Start of second range.
+    5287              :    *  @param  __last2   End of second range.
+    5288              :    *  @param  __result  Start of output range.
+    5289              :    *  @return  End of the output range.
+    5290              :    *  @ingroup set_algorithms
+    5291              :    *
+    5292              :    *  This operation iterates over both ranges, copying elements present in
+    5293              :    *  both ranges in order to the output range.  Iterators increment for each
+    5294              :    *  range.  When the current element of one range is less than the other,
+    5295              :    *  that iterator advances.  If an element is contained in both ranges, the
+    5296              :    *  element from the first range is copied and both ranges advance.  The
+    5297              :    *  output range may not overlap either input range.
+    5298              :   */
+    5299              :   template<typename _InputIterator1, typename _InputIterator2,
+    5300              :            typename _OutputIterator>
+    5301              :     _GLIBCXX20_CONSTEXPR
+    5302              :     inline _OutputIterator
+    5303              :     set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
+    5304              :                      _InputIterator2 __first2, _InputIterator2 __last2,
+    5305              :                      _OutputIterator __result)
+    5306              :     {
+    5307              :       // concept requirements
+    5308              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+    5309              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+    5310              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    5311              :             typename iterator_traits<_InputIterator1>::value_type>)
+    5312              :       __glibcxx_function_requires(_LessThanOpConcept<
+    5313              :             typename iterator_traits<_InputIterator1>::value_type,
+    5314              :             typename iterator_traits<_InputIterator2>::value_type>)
+    5315              :       __glibcxx_function_requires(_LessThanOpConcept<
+    5316              :             typename iterator_traits<_InputIterator2>::value_type,
+    5317              :             typename iterator_traits<_InputIterator1>::value_type>)
+    5318              :       __glibcxx_requires_sorted_set(__first1, __last1, __first2);
+    5319              :       __glibcxx_requires_sorted_set(__first2, __last2, __first1);
+    5320              :       __glibcxx_requires_irreflexive2(__first1, __last1);
+    5321              :       __glibcxx_requires_irreflexive2(__first2, __last2);
+    5322              : 
+    5323              :       return _GLIBCXX_STD_A::__set_intersection(__first1, __last1,
+    5324              :                                      __first2, __last2, __result,
+    5325              :                                      __gnu_cxx::__ops::__iter_less_iter());
+    5326              :     }
+    5327              : 
+    5328              :   /**
+    5329              :    *  @brief Return the intersection of two sorted ranges using comparison
+    5330              :    *  functor.
+    5331              :    *  @ingroup set_algorithms
+    5332              :    *  @param  __first1  Start of first range.
+    5333              :    *  @param  __last1   End of first range.
+    5334              :    *  @param  __first2  Start of second range.
+    5335              :    *  @param  __last2   End of second range.
+    5336              :    *  @param  __result  Start of output range.
+    5337              :    *  @param  __comp    The comparison functor.
+    5338              :    *  @return  End of the output range.
+    5339              :    *  @ingroup set_algorithms
+    5340              :    *
+    5341              :    *  This operation iterates over both ranges, copying elements present in
+    5342              :    *  both ranges in order to the output range.  Iterators increment for each
+    5343              :    *  range.  When the current element of one range is less than the other
+    5344              :    *  according to @p __comp, that iterator advances.  If an element is
+    5345              :    *  contained in both ranges according to @p __comp, the element from the
+    5346              :    *  first range is copied and both ranges advance.  The output range may not
+    5347              :    *  overlap either input range.
+    5348              :   */
+    5349              :   template<typename _InputIterator1, typename _InputIterator2,
+    5350              :            typename _OutputIterator, typename _Compare>
+    5351              :     _GLIBCXX20_CONSTEXPR
+    5352              :     inline _OutputIterator
+    5353              :     set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
+    5354              :                      _InputIterator2 __first2, _InputIterator2 __last2,
+    5355              :                      _OutputIterator __result, _Compare __comp)
+    5356              :     {
+    5357              :       // concept requirements
+    5358              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+    5359              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+    5360              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    5361              :             typename iterator_traits<_InputIterator1>::value_type>)
+    5362              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    5363              :             typename iterator_traits<_InputIterator1>::value_type,
+    5364              :             typename iterator_traits<_InputIterator2>::value_type>)
+    5365              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    5366              :             typename iterator_traits<_InputIterator2>::value_type,
+    5367              :             typename iterator_traits<_InputIterator1>::value_type>)
+    5368              :       __glibcxx_requires_sorted_set_pred(__first1, __last1, __first2, __comp);
+    5369              :       __glibcxx_requires_sorted_set_pred(__first2, __last2, __first1, __comp);
+    5370              :       __glibcxx_requires_irreflexive_pred2(__first1, __last1, __comp);
+    5371              :       __glibcxx_requires_irreflexive_pred2(__first2, __last2, __comp);
+    5372              : 
+    5373              :       return _GLIBCXX_STD_A::__set_intersection(__first1, __last1,
+    5374              :                                 __first2, __last2, __result,
+    5375              :                                 __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    5376              :     }
+    5377              : 
+    5378              :   template<typename _InputIterator1, typename _InputIterator2,
+    5379              :            typename _OutputIterator,
+    5380              :            typename _Compare>
+    5381              :     _GLIBCXX20_CONSTEXPR
+    5382              :     _OutputIterator
+    5383              :     __set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
+    5384              :                      _InputIterator2 __first2, _InputIterator2 __last2,
+    5385              :                      _OutputIterator __result, _Compare __comp)
+    5386              :     {
+    5387              :       while (__first1 != __last1 && __first2 != __last2)
+    5388              :         if (__comp(__first1, __first2))
+    5389              :           {
+    5390              :             *__result = *__first1;
+    5391              :             ++__first1;
+    5392              :             ++__result;
+    5393              :           }
+    5394              :         else if (__comp(__first2, __first1))
+    5395              :           ++__first2;
+    5396              :         else
+    5397              :           {
+    5398              :             ++__first1;
+    5399              :             ++__first2;
+    5400              :           }
+    5401              :       return std::copy(__first1, __last1, __result);
+    5402              :     }
+    5403              : 
+    5404              :   /**
+    5405              :    *  @brief Return the difference of two sorted ranges.
+    5406              :    *  @ingroup set_algorithms
+    5407              :    *  @param  __first1  Start of first range.
+    5408              :    *  @param  __last1   End of first range.
+    5409              :    *  @param  __first2  Start of second range.
+    5410              :    *  @param  __last2   End of second range.
+    5411              :    *  @param  __result  Start of output range.
+    5412              :    *  @return  End of the output range.
+    5413              :    *  @ingroup set_algorithms
+    5414              :    *
+    5415              :    *  This operation iterates over both ranges, copying elements present in
+    5416              :    *  the first range but not the second in order to the output range.
+    5417              :    *  Iterators increment for each range.  When the current element of the
+    5418              :    *  first range is less than the second, that element is copied and the
+    5419              :    *  iterator advances.  If the current element of the second range is less,
+    5420              :    *  the iterator advances, but no element is copied.  If an element is
+    5421              :    *  contained in both ranges, no elements are copied and both ranges
+    5422              :    *  advance.  The output range may not overlap either input range.
+    5423              :   */
+    5424              :   template<typename _InputIterator1, typename _InputIterator2,
+    5425              :            typename _OutputIterator>
+    5426              :     _GLIBCXX20_CONSTEXPR
+    5427              :     inline _OutputIterator
+    5428              :     set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
+    5429              :                    _InputIterator2 __first2, _InputIterator2 __last2,
+    5430              :                    _OutputIterator __result)
+    5431              :     {
+    5432              :       // concept requirements
+    5433              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+    5434              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+    5435              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    5436              :             typename iterator_traits<_InputIterator1>::value_type>)
+    5437              :       __glibcxx_function_requires(_LessThanOpConcept<
+    5438              :             typename iterator_traits<_InputIterator1>::value_type,
+    5439              :             typename iterator_traits<_InputIterator2>::value_type>)
+    5440              :       __glibcxx_function_requires(_LessThanOpConcept<
+    5441              :             typename iterator_traits<_InputIterator2>::value_type,
+    5442              :             typename iterator_traits<_InputIterator1>::value_type>)    
+    5443              :       __glibcxx_requires_sorted_set(__first1, __last1, __first2);
+    5444              :       __glibcxx_requires_sorted_set(__first2, __last2, __first1);
+    5445              :       __glibcxx_requires_irreflexive2(__first1, __last1);
+    5446              :       __glibcxx_requires_irreflexive2(__first2, __last2);
+    5447              : 
+    5448              :       return _GLIBCXX_STD_A::__set_difference(__first1, __last1,
+    5449              :                                    __first2, __last2, __result,
+    5450              :                                    __gnu_cxx::__ops::__iter_less_iter());
+    5451              :     }
+    5452              : 
+    5453              :   /**
+    5454              :    *  @brief  Return the difference of two sorted ranges using comparison
+    5455              :    *  functor.
+    5456              :    *  @ingroup set_algorithms
+    5457              :    *  @param  __first1  Start of first range.
+    5458              :    *  @param  __last1   End of first range.
+    5459              :    *  @param  __first2  Start of second range.
+    5460              :    *  @param  __last2   End of second range.
+    5461              :    *  @param  __result  Start of output range.
+    5462              :    *  @param  __comp    The comparison functor.
+    5463              :    *  @return  End of the output range.
+    5464              :    *  @ingroup set_algorithms
+    5465              :    *
+    5466              :    *  This operation iterates over both ranges, copying elements present in
+    5467              :    *  the first range but not the second in order to the output range.
+    5468              :    *  Iterators increment for each range.  When the current element of the
+    5469              :    *  first range is less than the second according to @p __comp, that element
+    5470              :    *  is copied and the iterator advances.  If the current element of the
+    5471              :    *  second range is less, no element is copied and the iterator advances.
+    5472              :    *  If an element is contained in both ranges according to @p __comp, no
+    5473              :    *  elements are copied and both ranges advance.  The output range may not
+    5474              :    *  overlap either input range.
+    5475              :   */
+    5476              :   template<typename _InputIterator1, typename _InputIterator2,
+    5477              :            typename _OutputIterator, typename _Compare>
+    5478              :     _GLIBCXX20_CONSTEXPR
+    5479              :     inline _OutputIterator
+    5480              :     set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
+    5481              :                    _InputIterator2 __first2, _InputIterator2 __last2,
+    5482              :                    _OutputIterator __result, _Compare __comp)
+    5483              :     {
+    5484              :       // concept requirements
+    5485              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+    5486              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+    5487              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    5488              :             typename iterator_traits<_InputIterator1>::value_type>)
+    5489              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    5490              :             typename iterator_traits<_InputIterator1>::value_type,
+    5491              :             typename iterator_traits<_InputIterator2>::value_type>)
+    5492              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    5493              :             typename iterator_traits<_InputIterator2>::value_type,
+    5494              :             typename iterator_traits<_InputIterator1>::value_type>)
+    5495              :       __glibcxx_requires_sorted_set_pred(__first1, __last1, __first2, __comp);
+    5496              :       __glibcxx_requires_sorted_set_pred(__first2, __last2, __first1, __comp);
+    5497              :       __glibcxx_requires_irreflexive_pred2(__first1, __last1, __comp);
+    5498              :       __glibcxx_requires_irreflexive_pred2(__first2, __last2, __comp);
+    5499              : 
+    5500              :       return _GLIBCXX_STD_A::__set_difference(__first1, __last1,
+    5501              :                                    __first2, __last2, __result,
+    5502              :                                    __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    5503              :     }
+    5504              : 
+    5505              :   template<typename _InputIterator1, typename _InputIterator2,
+    5506              :            typename _OutputIterator,
+    5507              :            typename _Compare>
+    5508              :     _GLIBCXX20_CONSTEXPR
+    5509              :     _OutputIterator
+    5510              :     __set_symmetric_difference(_InputIterator1 __first1,
+    5511              :                                _InputIterator1 __last1,
+    5512              :                                _InputIterator2 __first2,
+    5513              :                                _InputIterator2 __last2,
+    5514              :                                _OutputIterator __result,
+    5515              :                                _Compare __comp)
+    5516              :     {
+    5517              :       while (__first1 != __last1 && __first2 != __last2)
+    5518              :         if (__comp(__first1, __first2))
+    5519              :           {
+    5520              :             *__result = *__first1;
+    5521              :             ++__first1;
+    5522              :             ++__result;
+    5523              :           }
+    5524              :         else if (__comp(__first2, __first1))
+    5525              :           {
+    5526              :             *__result = *__first2;
+    5527              :             ++__first2;
+    5528              :             ++__result;
+    5529              :           }
+    5530              :         else
+    5531              :           {
+    5532              :             ++__first1;
+    5533              :             ++__first2;
+    5534              :           }
+    5535              :       return std::copy(__first2, __last2, 
+    5536              :                        std::copy(__first1, __last1, __result));
+    5537              :     }
+    5538              : 
+    5539              :   /**
+    5540              :    *  @brief  Return the symmetric difference of two sorted ranges.
+    5541              :    *  @ingroup set_algorithms
+    5542              :    *  @param  __first1  Start of first range.
+    5543              :    *  @param  __last1   End of first range.
+    5544              :    *  @param  __first2  Start of second range.
+    5545              :    *  @param  __last2   End of second range.
+    5546              :    *  @param  __result  Start of output range.
+    5547              :    *  @return  End of the output range.
+    5548              :    *  @ingroup set_algorithms
+    5549              :    *
+    5550              :    *  This operation iterates over both ranges, copying elements present in
+    5551              :    *  one range but not the other in order to the output range.  Iterators
+    5552              :    *  increment for each range.  When the current element of one range is less
+    5553              :    *  than the other, that element is copied and the iterator advances.  If an
+    5554              :    *  element is contained in both ranges, no elements are copied and both
+    5555              :    *  ranges advance.  The output range may not overlap either input range.
+    5556              :   */
+    5557              :   template<typename _InputIterator1, typename _InputIterator2,
+    5558              :            typename _OutputIterator>
+    5559              :     _GLIBCXX20_CONSTEXPR
+    5560              :     inline _OutputIterator
+    5561              :     set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1,
+    5562              :                              _InputIterator2 __first2, _InputIterator2 __last2,
+    5563              :                              _OutputIterator __result)
+    5564              :     {
+    5565              :       // concept requirements
+    5566              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+    5567              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+    5568              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    5569              :             typename iterator_traits<_InputIterator1>::value_type>)
+    5570              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    5571              :             typename iterator_traits<_InputIterator2>::value_type>)
+    5572              :       __glibcxx_function_requires(_LessThanOpConcept<
+    5573              :             typename iterator_traits<_InputIterator1>::value_type,
+    5574              :             typename iterator_traits<_InputIterator2>::value_type>)
+    5575              :       __glibcxx_function_requires(_LessThanOpConcept<
+    5576              :             typename iterator_traits<_InputIterator2>::value_type,
+    5577              :             typename iterator_traits<_InputIterator1>::value_type>)    
+    5578              :       __glibcxx_requires_sorted_set(__first1, __last1, __first2);
+    5579              :       __glibcxx_requires_sorted_set(__first2, __last2, __first1);
+    5580              :       __glibcxx_requires_irreflexive2(__first1, __last1);
+    5581              :       __glibcxx_requires_irreflexive2(__first2, __last2);
+    5582              : 
+    5583              :       return _GLIBCXX_STD_A::__set_symmetric_difference(__first1, __last1,
+    5584              :                                         __first2, __last2, __result,
+    5585              :                                         __gnu_cxx::__ops::__iter_less_iter());
+    5586              :     }
+    5587              : 
+    5588              :   /**
+    5589              :    *  @brief  Return the symmetric difference of two sorted ranges using
+    5590              :    *  comparison functor.
+    5591              :    *  @ingroup set_algorithms
+    5592              :    *  @param  __first1  Start of first range.
+    5593              :    *  @param  __last1   End of first range.
+    5594              :    *  @param  __first2  Start of second range.
+    5595              :    *  @param  __last2   End of second range.
+    5596              :    *  @param  __result  Start of output range.
+    5597              :    *  @param  __comp    The comparison functor.
+    5598              :    *  @return  End of the output range.
+    5599              :    *  @ingroup set_algorithms
+    5600              :    *
+    5601              :    *  This operation iterates over both ranges, copying elements present in
+    5602              :    *  one range but not the other in order to the output range.  Iterators
+    5603              :    *  increment for each range.  When the current element of one range is less
+    5604              :    *  than the other according to @p comp, that element is copied and the
+    5605              :    *  iterator advances.  If an element is contained in both ranges according
+    5606              :    *  to @p __comp, no elements are copied and both ranges advance.  The output
+    5607              :    *  range may not overlap either input range.
+    5608              :   */
+    5609              :   template<typename _InputIterator1, typename _InputIterator2,
+    5610              :            typename _OutputIterator, typename _Compare>
+    5611              :     _GLIBCXX20_CONSTEXPR
+    5612              :     inline _OutputIterator
+    5613              :     set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1,
+    5614              :                              _InputIterator2 __first2, _InputIterator2 __last2,
+    5615              :                              _OutputIterator __result,
+    5616              :                              _Compare __comp)
+    5617              :     {
+    5618              :       // concept requirements
+    5619              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+    5620              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+    5621              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    5622              :             typename iterator_traits<_InputIterator1>::value_type>)
+    5623              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+    5624              :             typename iterator_traits<_InputIterator2>::value_type>)
+    5625              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    5626              :             typename iterator_traits<_InputIterator1>::value_type,
+    5627              :             typename iterator_traits<_InputIterator2>::value_type>)
+    5628              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    5629              :             typename iterator_traits<_InputIterator2>::value_type,
+    5630              :             typename iterator_traits<_InputIterator1>::value_type>)
+    5631              :       __glibcxx_requires_sorted_set_pred(__first1, __last1, __first2, __comp);
+    5632              :       __glibcxx_requires_sorted_set_pred(__first2, __last2, __first1, __comp);
+    5633              :       __glibcxx_requires_irreflexive_pred2(__first1, __last1, __comp);
+    5634              :       __glibcxx_requires_irreflexive_pred2(__first2, __last2, __comp);
+    5635              : 
+    5636              :       return _GLIBCXX_STD_A::__set_symmetric_difference(__first1, __last1,
+    5637              :                                 __first2, __last2, __result,
+    5638              :                                 __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    5639              :     }
+    5640              : 
+    5641              :   template<typename _ForwardIterator, typename _Compare>
+    5642              :     _GLIBCXX14_CONSTEXPR
+    5643              :     _ForwardIterator
+    5644              :     __min_element(_ForwardIterator __first, _ForwardIterator __last,
+    5645              :                   _Compare __comp)
+    5646              :     {
+    5647              :       if (__first == __last)
+    5648              :         return __first;
+    5649              :       _ForwardIterator __result = __first;
+    5650              :       while (++__first != __last)
+    5651              :         if (__comp(__first, __result))
+    5652              :           __result = __first;
+    5653              :       return __result;
+    5654              :     }
+    5655              : 
+    5656              :   /**
+    5657              :    *  @brief  Return the minimum element in a range.
+    5658              :    *  @ingroup sorting_algorithms
+    5659              :    *  @param  __first  Start of range.
+    5660              :    *  @param  __last   End of range.
+    5661              :    *  @return  Iterator referencing the first instance of the smallest value.
+    5662              :   */
+    5663              :   template<typename _ForwardIterator>
+    5664              :     _GLIBCXX14_CONSTEXPR
+    5665              :     _ForwardIterator
+    5666              :     inline min_element(_ForwardIterator __first, _ForwardIterator __last)
+    5667              :     {
+    5668              :       // concept requirements
+    5669              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    5670              :       __glibcxx_function_requires(_LessThanComparableConcept<
+    5671              :             typename iterator_traits<_ForwardIterator>::value_type>)
+    5672              :       __glibcxx_requires_valid_range(__first, __last);
+    5673              :       __glibcxx_requires_irreflexive(__first, __last);
+    5674              : 
+    5675              :       return _GLIBCXX_STD_A::__min_element(__first, __last,
+    5676              :                                 __gnu_cxx::__ops::__iter_less_iter());
+    5677              :     }
+    5678              : 
+    5679              :   /**
+    5680              :    *  @brief  Return the minimum element in a range using comparison functor.
+    5681              :    *  @ingroup sorting_algorithms
+    5682              :    *  @param  __first  Start of range.
+    5683              :    *  @param  __last   End of range.
+    5684              :    *  @param  __comp   Comparison functor.
+    5685              :    *  @return  Iterator referencing the first instance of the smallest value
+    5686              :    *  according to __comp.
+    5687              :   */
+    5688              :   template<typename _ForwardIterator, typename _Compare>
+    5689              :     _GLIBCXX14_CONSTEXPR
+    5690              :     inline _ForwardIterator
+    5691              :     min_element(_ForwardIterator __first, _ForwardIterator __last,
+    5692              :                 _Compare __comp)
+    5693              :     {
+    5694              :       // concept requirements
+    5695              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    5696              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    5697              :             typename iterator_traits<_ForwardIterator>::value_type,
+    5698              :             typename iterator_traits<_ForwardIterator>::value_type>)
+    5699              :       __glibcxx_requires_valid_range(__first, __last);
+    5700              :       __glibcxx_requires_irreflexive_pred(__first, __last, __comp);
+    5701              : 
+    5702              :       return _GLIBCXX_STD_A::__min_element(__first, __last,
+    5703              :                                 __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    5704              :     }
+    5705              : 
+    5706              :   template<typename _ForwardIterator, typename _Compare>
+    5707              :     _GLIBCXX14_CONSTEXPR
+    5708              :     _ForwardIterator
+    5709         8910 :     __max_element(_ForwardIterator __first, _ForwardIterator __last,
+    5710              :                   _Compare __comp)
+    5711              :     {
+    5712         8910 :       if (__first == __last) return __first;
+    5713         8910 :       _ForwardIterator __result = __first;
+    5714       840362 :       while (++__first != __last)
+    5715       831452 :         if (__comp(__result, __first))
+    5716         9654 :           __result = __first;
+    5717         8910 :       return __result;
+    5718              :     }
+    5719              : 
+    5720              :   /**
+    5721              :    *  @brief  Return the maximum element in a range.
+    5722              :    *  @ingroup sorting_algorithms
+    5723              :    *  @param  __first  Start of range.
+    5724              :    *  @param  __last   End of range.
+    5725              :    *  @return  Iterator referencing the first instance of the largest value.
+    5726              :   */
+    5727              :   template<typename _ForwardIterator>
+    5728              :     _GLIBCXX14_CONSTEXPR
+    5729              :     inline _ForwardIterator
+    5730         8910 :     max_element(_ForwardIterator __first, _ForwardIterator __last)
+    5731              :     {
+    5732              :       // concept requirements
+    5733              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    5734              :       __glibcxx_function_requires(_LessThanComparableConcept<
+    5735              :             typename iterator_traits<_ForwardIterator>::value_type>)
+    5736              :       __glibcxx_requires_valid_range(__first, __last);
+    5737              :       __glibcxx_requires_irreflexive(__first, __last);
+    5738              : 
+    5739         8910 :       return _GLIBCXX_STD_A::__max_element(__first, __last,
+    5740        17820 :                                 __gnu_cxx::__ops::__iter_less_iter());
+    5741              :     }
+    5742              : 
+    5743              :   /**
+    5744              :    *  @brief  Return the maximum element in a range using comparison functor.
+    5745              :    *  @ingroup sorting_algorithms
+    5746              :    *  @param  __first  Start of range.
+    5747              :    *  @param  __last   End of range.
+    5748              :    *  @param  __comp   Comparison functor.
+    5749              :    *  @return  Iterator referencing the first instance of the largest value
+    5750              :    *  according to __comp.
+    5751              :   */
+    5752              :   template<typename _ForwardIterator, typename _Compare>
+    5753              :     _GLIBCXX14_CONSTEXPR
+    5754              :     inline _ForwardIterator
+    5755              :     max_element(_ForwardIterator __first, _ForwardIterator __last,
+    5756              :                 _Compare __comp)
+    5757              :     {
+    5758              :       // concept requirements
+    5759              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    5760              :       __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
+    5761              :             typename iterator_traits<_ForwardIterator>::value_type,
+    5762              :             typename iterator_traits<_ForwardIterator>::value_type>)
+    5763              :       __glibcxx_requires_valid_range(__first, __last);
+    5764              :       __glibcxx_requires_irreflexive_pred(__first, __last, __comp);
+    5765              : 
+    5766              :       return _GLIBCXX_STD_A::__max_element(__first, __last,
+    5767              :                                 __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    5768              :     }
+    5769              : 
+    5770              : #if __cplusplus >= 201103L
+    5771              :   // N2722 + DR 915.
+    5772              :   template<typename _Tp>
+    5773              :     _GLIBCXX14_CONSTEXPR
+    5774              :     inline _Tp
+    5775              :     min(initializer_list<_Tp> __l)
+    5776              :     {
+    5777              :       __glibcxx_requires_irreflexive(__l.begin(), __l.end());
+    5778              :       return *_GLIBCXX_STD_A::__min_element(__l.begin(), __l.end(),
+    5779              :           __gnu_cxx::__ops::__iter_less_iter());
+    5780              :     }
+    5781              : 
+    5782              :   template<typename _Tp, typename _Compare>
+    5783              :     _GLIBCXX14_CONSTEXPR
+    5784              :     inline _Tp
+    5785              :     min(initializer_list<_Tp> __l, _Compare __comp)
+    5786              :     {
+    5787              :       __glibcxx_requires_irreflexive_pred(__l.begin(), __l.end(), __comp);
+    5788              :       return *_GLIBCXX_STD_A::__min_element(__l.begin(), __l.end(),
+    5789              :           __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    5790              :     }
+    5791              : 
+    5792              :   template<typename _Tp>
+    5793              :     _GLIBCXX14_CONSTEXPR
+    5794              :     inline _Tp
+    5795              :     max(initializer_list<_Tp> __l)
+    5796              :     {
+    5797              :       __glibcxx_requires_irreflexive(__l.begin(), __l.end());
+    5798              :       return *_GLIBCXX_STD_A::__max_element(__l.begin(), __l.end(),
+    5799              :           __gnu_cxx::__ops::__iter_less_iter());
+    5800              :     }
+    5801              : 
+    5802              :   template<typename _Tp, typename _Compare>
+    5803              :     _GLIBCXX14_CONSTEXPR
+    5804              :     inline _Tp
+    5805              :     max(initializer_list<_Tp> __l, _Compare __comp)
+    5806              :     {
+    5807              :       __glibcxx_requires_irreflexive_pred(__l.begin(), __l.end(), __comp);
+    5808              :       return *_GLIBCXX_STD_A::__max_element(__l.begin(), __l.end(),
+    5809              :           __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    5810              :     }
+    5811              : #endif // C++11
+    5812              : 
+    5813              : #if __cplusplus >= 201402L
+    5814              :   /// Reservoir sampling algorithm.
+    5815              :   template<typename _InputIterator, typename _RandomAccessIterator,
+    5816              :            typename _Size, typename _UniformRandomBitGenerator>
+    5817              :     _RandomAccessIterator
+    5818              :     __sample(_InputIterator __first, _InputIterator __last, input_iterator_tag,
+    5819              :              _RandomAccessIterator __out, random_access_iterator_tag,
+    5820              :              _Size __n, _UniformRandomBitGenerator&& __g)
+    5821              :     {
+    5822              :       using __distrib_type = uniform_int_distribution<_Size>;
+    5823              :       using __param_type = typename __distrib_type::param_type;
+    5824              :       __distrib_type __d{};
+    5825              :       _Size __sample_sz = 0;
+    5826              :       while (__first != __last && __sample_sz != __n)
+    5827              :         {
+    5828              :           __out[__sample_sz++] = *__first;
+    5829              :           ++__first;
+    5830              :         }
+    5831              :       for (auto __pop_sz = __sample_sz; __first != __last;
+    5832              :           ++__first, (void) ++__pop_sz)
+    5833              :         {
+    5834              :           const auto __k = __d(__g, __param_type{0, __pop_sz});
+    5835              :           if (__k < __n)
+    5836              :             __out[__k] = *__first;
+    5837              :         }
+    5838              :       return __out + __sample_sz;
+    5839              :     }
+    5840              : 
+    5841              :   /// Selection sampling algorithm.
+    5842              :   template<typename _ForwardIterator, typename _OutputIterator, typename _Cat,
+    5843              :            typename _Size, typename _UniformRandomBitGenerator>
+    5844              :     _OutputIterator
+    5845              :     __sample(_ForwardIterator __first, _ForwardIterator __last,
+    5846              :              forward_iterator_tag,
+    5847              :              _OutputIterator __out, _Cat,
+    5848              :              _Size __n, _UniformRandomBitGenerator&& __g)
+    5849              :     {
+    5850              :       using __distrib_type = uniform_int_distribution<_Size>;
+    5851              :       using __param_type = typename __distrib_type::param_type;
+    5852              :       using _USize = make_unsigned_t<_Size>;
+    5853              :       using _Gen = remove_reference_t<_UniformRandomBitGenerator>;
+    5854              :       using __uc_type = common_type_t<typename _Gen::result_type, _USize>;
+    5855              : 
+    5856              :       if (__first == __last)
+    5857              :         return __out;
+    5858              : 
+    5859              :       __distrib_type __d{};
+    5860              :       _Size __unsampled_sz = std::distance(__first, __last);
+    5861              :       __n = std::min(__n, __unsampled_sz);
+    5862              : 
+    5863              :       // If possible, we use __gen_two_uniform_ints to efficiently produce
+    5864              :       // two random numbers using a single distribution invocation:
+    5865              : 
+    5866              :       const __uc_type __urngrange = __g.max() - __g.min();
+    5867              :       if (__urngrange / __uc_type(__unsampled_sz) >= __uc_type(__unsampled_sz))
+    5868              :         // I.e. (__urngrange >= __unsampled_sz * __unsampled_sz) but without
+    5869              :         // wrapping issues.
+    5870              :         {
+    5871              :           while (__n != 0 && __unsampled_sz >= 2)
+    5872              :             {
+    5873              :               const pair<_Size, _Size> __p =
+    5874              :                 __gen_two_uniform_ints(__unsampled_sz, __unsampled_sz - 1, __g);
+    5875              : 
+    5876              :               --__unsampled_sz;
+    5877              :               if (__p.first < __n)
+    5878              :                 {
+    5879              :                   *__out++ = *__first;
+    5880              :                   --__n;
+    5881              :                 }
+    5882              : 
+    5883              :               ++__first;
+    5884              : 
+    5885              :               if (__n == 0) break;
+    5886              : 
+    5887              :               --__unsampled_sz;
+    5888              :               if (__p.second < __n)
+    5889              :                 {
+    5890              :                   *__out++ = *__first;
+    5891              :                   --__n;
+    5892              :                 }
+    5893              : 
+    5894              :               ++__first;
+    5895              :             }
+    5896              :         }
+    5897              : 
+    5898              :       // The loop above is otherwise equivalent to this one-at-a-time version:
+    5899              : 
+    5900              :       for (; __n != 0; ++__first)
+    5901              :         if (__d(__g, __param_type{0, --__unsampled_sz}) < __n)
+    5902              :           {
+    5903              :             *__out++ = *__first;
+    5904              :             --__n;
+    5905              :           }
+    5906              :       return __out;
+    5907              :     }
+    5908              : 
+    5909              : #if __cplusplus > 201402L
+    5910              : #define __cpp_lib_sample 201603L
+    5911              :   /// Take a random sample from a population.
+    5912              :   template<typename _PopulationIterator, typename _SampleIterator,
+    5913              :            typename _Distance, typename _UniformRandomBitGenerator>
+    5914              :     _SampleIterator
+    5915              :     sample(_PopulationIterator __first, _PopulationIterator __last,
+    5916              :            _SampleIterator __out, _Distance __n,
+    5917              :            _UniformRandomBitGenerator&& __g)
+    5918              :     {
+    5919              :       using __pop_cat = typename
+    5920              :         std::iterator_traits<_PopulationIterator>::iterator_category;
+    5921              :       using __samp_cat = typename
+    5922              :         std::iterator_traits<_SampleIterator>::iterator_category;
+    5923              : 
+    5924              :       static_assert(
+    5925              :           __or_<is_convertible<__pop_cat, forward_iterator_tag>,
+    5926              :                 is_convertible<__samp_cat, random_access_iterator_tag>>::value,
+    5927              :           "output range must use a RandomAccessIterator when input range"
+    5928              :           " does not meet the ForwardIterator requirements");
+    5929              : 
+    5930              :       static_assert(is_integral<_Distance>::value,
+    5931              :                     "sample size must be an integer type");
+    5932              : 
+    5933              :       typename iterator_traits<_PopulationIterator>::difference_type __d = __n;
+    5934              :       return _GLIBCXX_STD_A::
+    5935              :         __sample(__first, __last, __pop_cat{}, __out, __samp_cat{}, __d,
+    5936              :                  std::forward<_UniformRandomBitGenerator>(__g));
+    5937              :     }
+    5938              : #endif // C++17
+    5939              : #endif // C++14
+    5940              : 
+    5941              : _GLIBCXX_END_NAMESPACE_ALGO
+    5942              : _GLIBCXX_END_NAMESPACE_VERSION
+    5943              : } // namespace std
+    5944              : 
+    5945              : #endif /* _STL_ALGO_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_algobase.h.func-c.html b/html/usr/include/c++/13/bits/stl_algobase.h.func-c.html new file mode 100644 index 0000000..f2789f8 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_algobase.h.func-c.html @@ -0,0 +1,3379 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_algobase.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_algobase.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:73.1 %216158
Test Date:2024-04-30 13:17:26Functions:59.3 %435258
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt11swap_rangesIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES9_ET0_T_SB_SA_0
_ZSt13__lower_boundIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEcNS0_5__ops14_Iter_less_valEET_SA_SA_RKT0_T1_0
_ZSt13__lower_boundIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEcNS0_5__ops14_Iter_less_valEET_SA_SA_RKT0_T1_0
_ZSt13__lower_boundIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES4_NS0_5__ops14_Iter_comp_valIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEESE_SE_SE_SJ_T1_0
_ZSt13copy_backwardIPPlS1_ET0_T_S3_S2_0
_ZSt13copy_backwardIPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES7_ET0_T_S9_S8_0
_ZSt13copy_backwardIPPlS1_ET0_T_S3_S2_0
_ZSt4fillIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEESC_EvT_SI_RKT0_0
_ZSt5equalIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESA_ZNSt8__detail16_Backref_matcherISA_NS4_12regex_traitsIcEEE8_M_applyESA_SA_SA_SA_EUlccE_EbT_SH_T0_T1_0
_ZSt8__equal4IN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESA_EbT_SB_T0_SC_0
_ZSt8__equal4IN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESA_ZNSt8__detail16_Backref_matcherISA_NS4_12regex_traitsIcEEE8_M_applyESA_SA_SA_SA_EUlccE_EbT_SH_T0_SI_T1_0
_ZSt9__fill_a1IPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESC_ENS2_11__enable_ifIXntsrSt11__is_scalarIT0_E7__valueEvE6__typeET_SK_RKSG_0
_ZSt9__fill_a1IPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EESC_EvNS3_IT_T0_EESJ_RKT1_0
_ZNSt7__equalILb1EE5equalIcEEbPKT_S4_S4_44
_ZNSt7__equalILb1EE5equalIcEEbPKT_S4_S4_0
_ZNSt7__equalILb1EE5equalIhEEbPKT_S4_S4_0
_ZNSt7__equalILb1EE5equalIiEEbPKT_S4_S4_44
_ZSt8__memcmpIccEiPKT_PKT0_m44
_ZSt8__memcmpIccEiPKT_PKT0_m0
_ZSt8__memcmpIhhEiPKT_PKT0_m0
_ZSt8__memcmpIiiEiPKT_PKT0_m44
_ZNSt7__equalILb0EE5equalIPKSt4pairIiiES5_EEbT_S6_T0_116
_ZNSt7__equalILb0EE5equalIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEESI_EEbT_SJ_T0_0
_ZNSt7__equalILb0EE5equalISt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS9_blmdSaNSC_14adl_serializerESF_IhSaIhEEvEEEESL_EEbT_SM_T0_0
_ZNSt7__equalILb0EE5equalIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESB_EEbT_SC_T0_16
_ZNSt7__equalILb0EE5equalIPKSt4pairIiiES5_EEbT_S6_T0_32
_ZNSt7__equalILb0EE5equalIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_EEbT_SA_T0_68
_ZSt11__equal_auxIN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEES7_EbT_S8_T0_160
_ZSt11__equal_auxIN9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEES6_ISG_SaISG_EEEESL_EbT_SM_T0_0
_ZSt11__equal_auxIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESA_EbT_SB_T0_0
_ZSt11__equal_auxIN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEES7_EbT_S8_T0_0
_ZSt11__equal_auxISt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEESJ_EbT_SK_T0_0
_ZSt11__equal_auxIN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESt6vectorIS9_SaIS9_EEEESF_EbT_SG_T0_16
_ZSt11__equal_auxIN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS3_SaIS3_EEEES9_EbT_SA_T0_32
_ZSt11__equal_auxIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEES7_EbT_S8_T0_44
_ZSt11__equal_auxIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEESD_EbT_SE_T0_68
_ZSt12__equal_aux1IPKcS1_EbT_S2_T0_160
_ZSt12__equal_aux1IPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESG_EbT_SH_T0_0
_ZSt12__equal_aux1IPKcS1_EbT_S2_T0_0
_ZSt12__equal_aux1IPKhS1_EbT_S2_T0_0
_ZSt12__equal_aux1ISt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEESJ_EbT_SK_T0_0
_ZSt12__equal_aux1IPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES9_EbT_SA_T0_16
_ZSt12__equal_aux1IPKSt4pairIiiES3_EbT_S4_T0_32
_ZSt12__equal_aux1IPKiS1_EbT_S2_T0_44
_ZSt12__equal_aux1IPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EbT_S8_T0_68
_ZSt5equalIN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEES7_EbT_S8_T0_160
_ZSt5equalIN9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEES6_ISG_SaISG_EEEESL_EbT_SM_T0_0
_ZSt5equalIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESA_EbT_SB_T0_0
_ZSt5equalIN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEES7_EbT_S8_T0_0
_ZSt5equalISt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEESJ_EbT_SK_T0_0
_ZSt5equalIN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESt6vectorIS9_SaIS9_EEEESF_EbT_SG_T0_16
_ZSt5equalIN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS3_SaIS3_EEEES9_EbT_SA_T0_32
_ZSt5equalIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEES7_EbT_S8_T0_44
_ZSt5equalIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEESD_EbT_SE_T0_68
_ZSt9__find_ifISt14_List_iteratorIiEN9__gnu_cxx5__ops16_Iter_equals_valIKiEEET_S7_S7_T0_St18input_iterator_tag318
_ZNSt20__copy_move_backwardILb1ELb0ESt26random_access_iterator_tagE13__copy_move_bIPSt4pairIifES5_EET0_T_S7_S6_460
_ZNSt20__copy_move_backwardILb1ELb0ESt26random_access_iterator_tagE13__copy_move_bIPSt4pairIifES5_EET0_T_S7_S6_38
_ZNSt20__copy_move_backwardILb1ELb0ESt26random_access_iterator_tagE13__copy_move_bIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS5_EES9_EET0_T_SB_SA_60
_ZNSt20__copy_move_backwardILb1ELb0ESt26random_access_iterator_tagE13__copy_move_bIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_EET0_T_SB_SA_122
_ZNSt20__copy_move_backwardILb1ELb0ESt26random_access_iterator_tagE13__copy_move_bIPSt4pairIfS3_IiiEES6_EET0_T_S8_S7_240
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE12__assign_oneIccEEvPT_PT0_756
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE12__assign_oneIPN8bayesnet4NodeES5_EEvPT_PT0_0
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE12__assign_oneIccEEvPT_PT0_0
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE12__assign_oneIddEEvPT_PT0_122
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE12__assign_oneIiiEEvPT_PT0_634
_ZNSt20__copy_move_backwardILb1ELb1ESt26random_access_iterator_tagE13__copy_move_bIccEEPT0_PT_S6_S4_928
_ZNSt20__copy_move_backwardILb0ELb1ESt26random_access_iterator_tagE13__copy_move_bIPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES9_EEPT0_PT_SD_SB_0
_ZNSt20__copy_move_backwardILb0ELb1ESt26random_access_iterator_tagE13__copy_move_bIPlS3_EEPT0_PT_S7_S5_0
_ZNSt20__copy_move_backwardILb1ELb1ESt26random_access_iterator_tagE13__copy_move_bIccEEPT0_PT_S6_S4_0
_ZNSt20__copy_move_backwardILb1ELb1ESt26random_access_iterator_tagE13__copy_move_bIddEEPT0_PT_S6_S4_394
_ZNSt20__copy_move_backwardILb1ELb1ESt26random_access_iterator_tagE13__copy_move_bIiiEEPT0_PT_S6_S4_534
_ZSt11__remove_ifIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops16_Iter_equals_valIKiEEET_SB_SB_T0_1176
_ZSt11__remove_ifIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEENS0_5__ops16_Iter_equals_valIKS4_EEET_SE_SE_T0_12
_ZSt11__remove_ifIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops16_Iter_equals_valIKiEEET_SB_SB_T0_56
_ZSt11__remove_ifIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops10_Iter_predIZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEEUlT_E_EEESF_SF_SF_T0_214
_ZSt11__remove_ifIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS0_5__ops16_Iter_equals_valIKS7_EEET_SH_SH_T0_894
_ZSt13move_backwardIPiS0_ET0_T_S2_S1_1388
_ZSt13move_backwardIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEES6_ET0_T_S8_S7_0
_ZSt13move_backwardIPSt4pairIfS0_IiiEEN9__gnu_cxx17__normal_iteratorIS3_St6vectorIS2_SaIS2_EEEEET0_T_SB_SA_0
_ZSt13move_backwardIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEES8_ET0_T_SA_S9_38
_ZSt13move_backwardIPiS0_ET0_T_S2_S1_56
_ZSt13move_backwardIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EES6_ET0_T_S8_S7_60
_ZSt13move_backwardIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET0_T_S8_S7_122
_ZSt13move_backwardIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES9_ET0_T_SB_SA_240
_ZSt13move_backwardIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES6_ET0_T_S8_S7_394
_ZSt13move_backwardIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES6_ET0_T_S8_S7_478
_ZSt22__copy_move_backward_aILb1EPiS0_ET1_T0_S2_S1_1388
_ZSt22__copy_move_backward_aILb0EPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES7_ET1_T0_S9_S8_0
_ZSt22__copy_move_backward_aILb0EPPlS1_ET1_T0_S3_S2_0
_ZSt22__copy_move_backward_aILb1EN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEES6_ET1_T0_S8_S7_0
_ZSt22__copy_move_backward_aILb1EPSt4pairIfS0_IiiEEN9__gnu_cxx17__normal_iteratorIS3_St6vectorIS2_SaIS2_EEEEET1_T0_SB_SA_0
_ZSt22__copy_move_backward_aILb1EN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEES8_ET1_T0_SA_S9_38
_ZSt22__copy_move_backward_aILb1EPiS0_ET1_T0_S2_S1_56
_ZSt22__copy_move_backward_aILb1EPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EES6_ET1_T0_S8_S7_60
_ZSt22__copy_move_backward_aILb1EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET1_T0_S8_S7_122
_ZSt22__copy_move_backward_aILb1EN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES9_ET1_T0_SB_SA_240
_ZSt22__copy_move_backward_aILb1EN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES6_ET1_T0_S8_S7_394
_ZSt22__copy_move_backward_aILb1EN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES6_ET1_T0_S8_S7_478
_ZSt23__copy_move_backward_a1ILb1EPcS0_ET1_T0_S2_S1_1388
_ZSt23__copy_move_backward_a1ILb0EPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES7_ET1_T0_S9_S8_0
_ZSt23__copy_move_backward_a1ILb0EPPlS1_ET1_T0_S3_S2_0
_ZSt23__copy_move_backward_a1ILb1EPcS0_ET1_T0_S2_S1_0
_ZSt23__copy_move_backward_a1ILb1EPSt4pairIifES2_ET1_T0_S4_S3_38
_ZSt23__copy_move_backward_a1ILb1EPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EES6_ET1_T0_S8_S7_60
_ZSt23__copy_move_backward_a1ILb1EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET1_T0_S8_S7_122
_ZSt23__copy_move_backward_a1ILb1EPSt4pairIfS0_IiiEES3_ET1_T0_S5_S4_240
_ZSt23__copy_move_backward_a1ILb1EPdS0_ET1_T0_S2_S1_394
_ZSt23__copy_move_backward_a1ILb1EPiS0_ET1_T0_S2_S1_534
_ZSt23__copy_move_backward_a2ILb1EPcS0_ET1_T0_S2_S1_1388
_ZSt23__copy_move_backward_a2ILb0EPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES7_ET1_T0_S9_S8_0
_ZSt23__copy_move_backward_a2ILb0EPPlS1_ET1_T0_S3_S2_0
_ZSt23__copy_move_backward_a2ILb1EPcS0_ET1_T0_S2_S1_0
_ZSt23__copy_move_backward_a2ILb1EPSt4pairIifES2_ET1_T0_S4_S3_38
_ZSt23__copy_move_backward_a2ILb1EPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EES6_ET1_T0_S8_S7_60
_ZSt23__copy_move_backward_a2ILb1EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET1_T0_S8_S7_122
_ZSt23__copy_move_backward_a2ILb1EPSt4pairIfS0_IiiEES3_ET1_T0_S5_S4_240
_ZSt23__copy_move_backward_a2ILb1EPdS0_ET1_T0_S2_S1_394
_ZSt23__copy_move_backward_a2ILb1EPiS0_ET1_T0_S2_S1_534
_ZSt4__lgIlET_S0_3724
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPfPdEET0_T_S6_S5_3824
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPKNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEPSF_EET0_T_SK_SJ_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPKcSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEET0_T_SE_SD_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESG_EET0_T_SI_SH_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPSt6vectorIfSaIfEES6_EET0_T_S8_S7_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPKSt6vectorIfSaIfEEPS5_EET0_T_SA_S9_6
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS8_EET0_T_SD_SC_36
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_EET0_T_SB_SA_190
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPfPdEET0_T_S6_S5_3592
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE8__copy_mIPSt4pairIfS3_IiiEES6_EET0_T_S8_S7_5688
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE8__copy_mIPN6loguru8CallbackES5_EET0_T_S7_S6_0
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE8__copy_mIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_EET0_T_SB_SA_0
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE8__copy_mIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS5_EES9_EET0_T_SB_SA_60
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE8__copy_mIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS4_14adl_serializerES7_IhSaIhEEvEESt20back_insert_iteratorIS7_ISH_SaISH_EEEEET0_T_SO_SN_114
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE8__copy_mIPSt4pairIfS3_IiiEES6_EET0_T_S8_S7_684
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE8__copy_mIPiSt20back_insert_iteratorISt6vectorIiSaIiEEEEET0_T_SA_S9_4830
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEES6_ET0_T_S8_S7_11084
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS3_SaIS3_EEEES8_ET0_T_SA_S9_0
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEESC_ET0_T_SE_SD_0
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEES9_ET0_T_SB_SA_0
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEES6_ET0_T_S8_S7_0
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES6_ET0_T_S8_S7_40
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS4_EESt6vectorIS7_SaIS7_EEEESC_ET0_T_SE_SD_60
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEES6_ISG_SaISG_EEEESt20back_insert_iteratorISJ_EET0_T_SO_SN_114
_ZSt4moveIPSt4pairIfS0_IiiEEN9__gnu_cxx17__normal_iteratorIS3_St6vectorIS2_SaIS2_EEEEET0_T_SB_SA_190
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES9_ET0_T_SB_SA_196
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_ET0_T_SB_SA_298
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEESt20back_insert_iteratorIS5_EET0_T_SA_S9_4830
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES6_ET0_T_S8_S7_5356
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEES2_ET_S7_T0_14646
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS3_SaIS3_EEEES4_ET_S9_T0_0
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEESD_ET_SI_T0_0
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEES2_ET_S7_T0_0
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPSt6vectorIfSaIfEES2_IS4_SaIS4_EEEES5_ET_S9_T0_6
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEES5_ET_SA_T0_8
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEES4_ET_S9_T0_38
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS4_EESt6vectorIS7_SaIS7_EEEES8_ET_SD_T0_60
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEES8_ET_SD_T0_194
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES2_ET_S7_T0_436
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_ET_SA_T0_626
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPfSt6vectorIfSaIfEEEES2_ET_S7_T0_4474
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES2_ET_S7_T0_8804
_ZSt9iter_swapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEES6_EvT_T0_87146
_ZSt9iter_swapIN9__gnu_cxx17__normal_iteratorIPPKN6loguru11EcEntryBaseESt6vectorIS5_SaIS5_EEEESA_EvT_T0_0
_ZSt9iter_swapIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES9_EvT_T0_0
_ZSt9iter_swapIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEES8_EvT_T0_0
_ZSt9iter_swapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEES6_EvT_T0_0
_ZSt9iter_swapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES6_EvT_T0_3238
_ZSt9iter_swapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES6_EvT_T0_83908
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIccEEvPT_PT0_402458
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIPN8bayesnet4NodeES5_EEvPT_PT0_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES9_EEvPT_PT0_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIPlS3_EEvPT_PT0_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIcKcEEvPT_PT0_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIccEEvPT_PT0_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIddEEvPT_PT0_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIffEEvPT_PT0_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIhKhEEvPT_PT0_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIiiEEvPT_PT0_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIdKdEEvPT_PT0_4
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIiKiEEvPT_PT0_364
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIPN8bayesnet4NodeEKS5_EEvPT_PT0_372
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIfKfEEvPT_PT0_398
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIlKlEEvPT_PT0_401320
_ZSt12__niter_wrapIPcET_RKS1_S1_455158
_ZSt12__niter_wrapIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEET_RKSE_SE_0
_ZSt12__niter_wrapIPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEET_RKS8_S8_0
_ZSt12__niter_wrapIPPlET_RKS2_S2_0
_ZSt12__niter_wrapIPSt6vectorIfSaIfEEET_RKS4_S4_0
_ZSt12__niter_wrapIPcET_RKS1_S1_0
_ZSt12__niter_wrapIPhET_RKS1_S1_0
_ZSt12__niter_wrapISt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEET_RKS8_S8_0
_ZSt12__niter_wrapIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEET_RKS7_S7_60
_ZSt12__niter_wrapISt20back_insert_iteratorISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES1_IhSaIhEEvEESaISF_EEEET_RKSJ_SJ_114
_ZSt12__niter_wrapIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_RKS7_S7_154
_ZSt12__niter_wrapIPSt4pairIfS0_IiiEEET_RKS4_S4_298
_ZSt12__niter_wrapIPPN8bayesnet4NodeEET_RKS4_S4_2564
_ZSt12__niter_wrapISt20back_insert_iteratorISt6vectorIiSaIiEEEET_RKS5_S5_4830
_ZSt12__niter_wrapIPfET_RKS1_S1_7580
_ZSt12__niter_wrapIPdET_RKS1_S1_12222
_ZSt12__niter_wrapIPiET_RKS1_S1_26008
_ZSt12__niter_wrapIPlET_RKS1_S1_401328
_ZSt4copyIPfPdET0_T_S3_S2_455518
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEENS1_IPSC_SH_EEET0_T_SM_SL_0
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESt20back_insert_iteratorIS9_EET0_T_SE_SD_0
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEPcET0_T_SA_S9_0
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEEPhET0_T_SA_S9_0
_ZSt4copyIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS5_ET0_T_SA_S9_0
_ZSt4copyIPKcPcET0_T_S4_S3_0
_ZSt4copyIPKcSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEET0_T_SB_SA_0
_ZSt4copyIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESD_ET0_T_SF_SE_0
_ZSt4copyIPPN8bayesnet4NodeES3_ET0_T_S5_S4_0
_ZSt4copyIPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES7_ET0_T_S9_S8_0
_ZSt4copyIPPlS1_ET0_T_S3_S2_0
_ZSt4copyIPSt6vectorIfSaIfEES3_ET0_T_S5_S4_0
_ZSt4copyIPcS0_ET0_T_S2_S1_0
_ZSt4copyIPdS0_ET0_T_S2_S1_0
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEENS1_IPdS6_EEET0_T_SB_SA_2
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES2_IS4_SaIS4_EEEENS1_IPS4_S8_EEET0_T_SD_SC_6
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEENS1_IPS4_S9_EEET0_T_SE_SD_8
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEPlET0_T_SA_S9_10
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES2_ET0_T_S8_S7_20
_ZSt4copyIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET0_T_S8_S7_32
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS1_IPS7_SC_EEET0_T_SH_SG_36
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEESC_ET0_T_SE_SD_158
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES6_ET0_T_S8_S7_244
_ZSt4copyIPKiPiET0_T_S4_S3_262
_ZSt4copyIPiS0_ET0_T_S2_S1_366
_ZSt4copyIPKdPdET0_T_S4_S3_406
_ZSt4copyISt13move_iteratorIPiES1_ET0_T_S4_S3_1756
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES2_ET0_T_S8_S7_1970
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEEPS4_ET0_T_SD_SC_2564
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEEENS1_IPfS6_EEET0_T_SB_SA_2660
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEENS1_IPiS6_EEET0_T_SB_SA_2726
_ZSt4copyIPfS0_ET0_T_S2_S1_2784
_ZSt4copyIPfPdET0_T_S3_S2_3592
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEEEPfET0_T_SA_S9_4796
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEPdET0_T_SA_S9_8204
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEPiET0_T_SA_S9_21598
_ZSt4copyIPKlPlET0_T_S4_S3_401318
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIccEEPT0_PT_S6_S4_457090
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIKccEEPT0_PT_S7_S5_0
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIKhhEEPT0_PT_S7_S5_0
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIPN8bayesnet4NodeES5_EEPT0_PT_S9_S7_0
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES9_EEPT0_PT_SD_SB_0
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIPlS3_EEPT0_PT_S7_S5_0
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIccEEPT0_PT_S6_S4_0
_ZNSt11__copy_moveILb1ELb1ESt26random_access_iterator_tagE8__copy_mIPN8bayesnet4NodeES5_EEPT0_PT_S9_S7_0
_ZNSt11__copy_moveILb1ELb1ESt26random_access_iterator_tagE8__copy_mIccEEPT0_PT_S6_S4_0
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIddEEPT0_PT_S6_S4_20
_ZNSt11__copy_moveILb1ELb1ESt26random_access_iterator_tagE8__copy_mIddEEPT0_PT_S6_S4_40
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIKPN8bayesnet4NodeES5_EEPT0_PT_SA_S8_2572
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIiiEEPT0_PT_S6_S4_2580
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIffEEPT0_PT_S6_S4_2784
_ZNSt11__copy_moveILb1ELb1ESt26random_access_iterator_tagE8__copy_mIiiEEPT0_PT_S6_S4_7112
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIKffEEPT0_PT_S7_S5_7456
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIKddEEPT0_PT_S7_S5_8612
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIKiiEEPT0_PT_S7_S5_24586
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIKllEEPT0_PT_S7_S5_401328
_ZSt13__copy_move_aILb0EPfPdET1_T0_S3_S2_466602
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEENS1_IPSC_SH_EEET1_T0_SM_SL_0
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESt20back_insert_iteratorIS9_EET1_T0_SE_SD_0
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEPcET1_T0_SA_S9_0
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEEPhET1_T0_SA_S9_0
_ZSt13__copy_move_aILb0EPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS5_ET1_T0_SA_S9_0
_ZSt13__copy_move_aILb0EPKcPcET1_T0_S4_S3_0
_ZSt13__copy_move_aILb0EPKcSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEET1_T0_SB_SA_0
_ZSt13__copy_move_aILb0EPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESD_ET1_T0_SF_SE_0
_ZSt13__copy_move_aILb0EPPN8bayesnet4NodeES3_ET1_T0_S5_S4_0
_ZSt13__copy_move_aILb0EPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES7_ET1_T0_S9_S8_0
_ZSt13__copy_move_aILb0EPPlS1_ET1_T0_S3_S2_0
_ZSt13__copy_move_aILb0EPSt6vectorIfSaIfEES3_ET1_T0_S5_S4_0
_ZSt13__copy_move_aILb0EPcS0_ET1_T0_S2_S1_0
_ZSt13__copy_move_aILb0EPdS0_ET1_T0_S2_S1_0
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS3_SaIS3_EEEES8_ET1_T0_SA_S9_0
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEESC_ET1_T0_SE_SD_0
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEES9_ET1_T0_SB_SA_0
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEES6_ET1_T0_S8_S7_0
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEENS1_IPdS6_EEET1_T0_SB_SA_2
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES2_IS4_SaIS4_EEEENS1_IPS4_S8_EEET1_T0_SD_SC_6
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEENS1_IPS4_S9_EEET1_T0_SE_SD_8
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEPlET1_T0_SA_S9_10
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES2_ET1_T0_S8_S7_20
_ZSt13__copy_move_aILb0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET1_T0_S8_S7_32
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS1_IPS7_SC_EEET1_T0_SH_SG_36
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES6_ET1_T0_S8_S7_40
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS4_EESt6vectorIS7_SaIS7_EEEESC_ET1_T0_SE_SD_60
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEES6_ISG_SaISG_EEEESt20back_insert_iteratorISJ_EET1_T0_SO_SN_114
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEESC_ET1_T0_SE_SD_158
_ZSt13__copy_move_aILb1EPSt4pairIfS0_IiiEEN9__gnu_cxx17__normal_iteratorIS3_St6vectorIS2_SaIS2_EEEEET1_T0_SB_SA_190
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES9_ET1_T0_SB_SA_196
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES6_ET1_T0_S8_S7_244
_ZSt13__copy_move_aILb0EPKiPiET1_T0_S4_S3_262
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_ET1_T0_SB_SA_298
_ZSt13__copy_move_aILb0EPiS0_ET1_T0_S2_S1_366
_ZSt13__copy_move_aILb0EPKdPdET1_T0_S4_S3_406
_ZSt13__copy_move_aILb1EPiS0_ET1_T0_S2_S1_1756
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES2_ET1_T0_S8_S7_1970
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEEPS4_ET1_T0_SD_SC_2564
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEEENS1_IPfS6_EEET1_T0_SB_SA_2660
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEENS1_IPiS6_EEET1_T0_SB_SA_2726
_ZSt13__copy_move_aILb0EPfS0_ET1_T0_S2_S1_2784
_ZSt13__copy_move_aILb0EPfPdET1_T0_S3_S2_3592
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEEEPfET1_T0_SA_S9_4796
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEESt20back_insert_iteratorIS5_EET1_T0_SA_S9_4830
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES6_ET1_T0_S8_S7_5356
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEPdET1_T0_SA_S9_8204
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEPiET1_T0_SA_S9_21598
_ZSt13__copy_move_aILb0EPKlPlET1_T0_S4_S3_401318
_ZSt14__copy_move_a1ILb0EPfPdET1_T0_S3_S2_466602
_ZSt14__copy_move_a1ILb0EPKNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEPSC_ET1_T0_SH_SG_0
_ZSt14__copy_move_a1ILb0EPKcPcET1_T0_S4_S3_0
_ZSt14__copy_move_a1ILb0EPKcSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEET1_T0_SB_SA_0
_ZSt14__copy_move_a1ILb0EPKhPhET1_T0_S4_S3_0
_ZSt14__copy_move_a1ILb0EPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESD_ET1_T0_SF_SE_0
_ZSt14__copy_move_a1ILb0EPPN8bayesnet4NodeES3_ET1_T0_S5_S4_0
_ZSt14__copy_move_a1ILb0EPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES7_ET1_T0_S9_S8_0
_ZSt14__copy_move_a1ILb0EPPlS1_ET1_T0_S3_S2_0
_ZSt14__copy_move_a1ILb0EPSt6vectorIfSaIfEES3_ET1_T0_S5_S4_0
_ZSt14__copy_move_a1ILb0EPcS0_ET1_T0_S2_S1_0
_ZSt14__copy_move_a1ILb1EPN6loguru8CallbackES2_ET1_T0_S4_S3_0
_ZSt14__copy_move_a1ILb1EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET1_T0_S8_S7_0
_ZSt14__copy_move_a1ILb1EPPN8bayesnet4NodeES3_ET1_T0_S5_S4_0
_ZSt14__copy_move_a1ILb1EPcS0_ET1_T0_S2_S1_0
_ZSt14__copy_move_a1ILb0EPKSt6vectorIfSaIfEEPS2_ET1_T0_S7_S6_6
_ZSt14__copy_move_a1ILb0EPdS0_ET1_T0_S2_S1_20
_ZSt14__copy_move_a1ILb0EPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS5_ET1_T0_SA_S9_36
_ZSt14__copy_move_a1ILb1EPdS0_ET1_T0_S2_S1_40
_ZSt14__copy_move_a1ILb1EPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EES6_ET1_T0_S8_S7_60
_ZSt14__copy_move_a1ILb1EPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESt20back_insert_iteratorIS4_ISE_SaISE_EEEET1_T0_SL_SK_114
_ZSt14__copy_move_a1ILb0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET1_T0_S8_S7_190
_ZSt14__copy_move_a1ILb1EPSt4pairIfS0_IiiEES3_ET1_T0_S5_S4_684
_ZSt14__copy_move_a1ILb0EPKPN8bayesnet4NodeEPS2_ET1_T0_S7_S6_2572
_ZSt14__copy_move_a1ILb0EPiS0_ET1_T0_S2_S1_2580
_ZSt14__copy_move_a1ILb0EPfS0_ET1_T0_S2_S1_2784
_ZSt14__copy_move_a1ILb0EPfPdET1_T0_S3_S2_3592
_ZSt14__copy_move_a1ILb1EPiSt20back_insert_iteratorISt6vectorIiSaIiEEEET1_T0_S7_S6_4830
_ZSt14__copy_move_a1ILb1EPiS0_ET1_T0_S2_S1_7112
_ZSt14__copy_move_a1ILb0EPKfPfET1_T0_S4_S3_7456
_ZSt14__copy_move_a1ILb0EPKdPdET1_T0_S4_S3_8612
_ZSt14__copy_move_a1ILb0EPKiPiET1_T0_S4_S3_24586
_ZSt14__copy_move_a1ILb0EPKlPlET1_T0_S4_S3_401328
_ZSt14__copy_move_a2ILb0EPfPdET1_T0_S3_S2_466602
_ZSt14__copy_move_a2ILb0EPKNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEPSC_ET1_T0_SH_SG_0
_ZSt14__copy_move_a2ILb0EPKcPcET1_T0_S4_S3_0
_ZSt14__copy_move_a2ILb0EPKcSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEET1_T0_SB_SA_0
_ZSt14__copy_move_a2ILb0EPKhPhET1_T0_S4_S3_0
_ZSt14__copy_move_a2ILb0EPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESD_ET1_T0_SF_SE_0
_ZSt14__copy_move_a2ILb0EPPN8bayesnet4NodeES3_ET1_T0_S5_S4_0
_ZSt14__copy_move_a2ILb0EPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES7_ET1_T0_S9_S8_0
_ZSt14__copy_move_a2ILb0EPPlS1_ET1_T0_S3_S2_0
_ZSt14__copy_move_a2ILb0EPSt6vectorIfSaIfEES3_ET1_T0_S5_S4_0
_ZSt14__copy_move_a2ILb0EPcS0_ET1_T0_S2_S1_0
_ZSt14__copy_move_a2ILb1EPN6loguru8CallbackES2_ET1_T0_S4_S3_0
_ZSt14__copy_move_a2ILb1EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET1_T0_S8_S7_0
_ZSt14__copy_move_a2ILb1EPPN8bayesnet4NodeES3_ET1_T0_S5_S4_0
_ZSt14__copy_move_a2ILb1EPcS0_ET1_T0_S2_S1_0
_ZSt14__copy_move_a2ILb0EPKSt6vectorIfSaIfEEPS2_ET1_T0_S7_S6_6
_ZSt14__copy_move_a2ILb0EPdS0_ET1_T0_S2_S1_20
_ZSt14__copy_move_a2ILb0EPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS5_ET1_T0_SA_S9_36
_ZSt14__copy_move_a2ILb1EPdS0_ET1_T0_S2_S1_40
_ZSt14__copy_move_a2ILb1EPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EES6_ET1_T0_S8_S7_60
_ZSt14__copy_move_a2ILb1EPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESt20back_insert_iteratorIS4_ISE_SaISE_EEEET1_T0_SL_SK_114
_ZSt14__copy_move_a2ILb0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET1_T0_S8_S7_190
_ZSt14__copy_move_a2ILb1EPSt4pairIfS0_IiiEES3_ET1_T0_S5_S4_684
_ZSt14__copy_move_a2ILb0EPKPN8bayesnet4NodeEPS2_ET1_T0_S7_S6_2572
_ZSt14__copy_move_a2ILb0EPiS0_ET1_T0_S2_S1_2580
_ZSt14__copy_move_a2ILb0EPfS0_ET1_T0_S2_S1_2784
_ZSt14__copy_move_a2ILb0EPfPdET1_T0_S3_S2_3592
_ZSt14__copy_move_a2ILb1EPiSt20back_insert_iteratorISt6vectorIiSaIiEEEET1_T0_S7_S6_4830
_ZSt14__copy_move_a2ILb1EPiS0_ET1_T0_S2_S1_7112
_ZSt14__copy_move_a2ILb0EPKfPfET1_T0_S4_S3_7456
_ZSt14__copy_move_a2ILb0EPKdPdET1_T0_S4_S3_8612
_ZSt14__copy_move_a2ILb0EPKiPiET1_T0_S4_S3_24586
_ZSt14__copy_move_a2ILb0EPKlPlET1_T0_S4_S3_401328
_ZSt8__fill_aIPbbEvT_S1_RKT0_2496136
_ZSt8__fill_aIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEESC_EvT_SI_RKT0_0
_ZSt8__fill_aIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESC_EvT_SE_RKT0_0
_ZSt8__fill_aIPbbEvT_S1_RKT0_0
_ZSt8__fill_aIPffEvT_S1_RKT0_218
_ZSt8__fill_aIPddEvT_S1_RKT0_422682
_ZSt8__fill_aIPiiEvT_S1_RKT0_2073236
_ZSt9__fill_a1IPbbEN9__gnu_cxx11__enable_ifIXsrSt11__is_scalarIT0_E7__valueEvE6__typeET_S8_RKS4_2496136
_ZSt9__fill_a1IPbbEN9__gnu_cxx11__enable_ifIXsrSt11__is_scalarIT0_E7__valueEvE6__typeET_S8_RKS4_0
_ZSt9__fill_a1IPffEN9__gnu_cxx11__enable_ifIXsrSt11__is_scalarIT0_E7__valueEvE6__typeET_S8_RKS4_218
_ZSt9__fill_a1IPddEN9__gnu_cxx11__enable_ifIXsrSt11__is_scalarIT0_E7__valueEvE6__typeET_S8_RKS4_422682
_ZSt9__fill_a1IPiiEN9__gnu_cxx11__enable_ifIXsrSt11__is_scalarIT0_E7__valueEvE6__typeET_S8_RKS4_2073236
_ZSt10__fill_n_aIPbmbET_S1_T0_RKT1_St26random_access_iterator_tag2496282
_ZSt10__fill_n_aIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEmSC_ET_SE_T0_RKT1_St26random_access_iterator_tag0
_ZSt10__fill_n_aIPbmbET_S1_T0_RKT1_St26random_access_iterator_tag0
_ZSt10__fill_n_aIPfmfET_S1_T0_RKT1_St26random_access_iterator_tag218
_ZSt10__fill_n_aIPdmdET_S1_T0_RKT1_St26random_access_iterator_tag422682
_ZSt10__fill_n_aIPimiET_S1_T0_RKT1_St26random_access_iterator_tag2073382
_ZSt6fill_nIPbmbET_S1_T0_RKT1_2496282
_ZSt6fill_nIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEmSC_ET_SE_T0_RKT1_0
_ZSt6fill_nIPbmbET_S1_T0_RKT1_0
_ZSt6fill_nIPfmfET_S1_T0_RKT1_218
_ZSt6fill_nIPdmdET_S1_T0_RKT1_422682
_ZSt6fill_nIPimiET_S1_T0_RKT1_2073382
_ZSt17__size_to_integerm2499522
_ZSt9__find_ifIPKcN9__gnu_cxx5__ops16_Iter_equals_valIS0_EEET_S6_S6_T0_St26random_access_iterator_tag9580258
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predIZNS2_15remove_callbackEPKcEUlRKS3_E_EEET_SH_SH_T0_St26random_access_iterator_tag0
_ZSt9__find_ifIPKcN9__gnu_cxx5__ops16_Iter_equals_valIS0_EEET_S6_S6_T0_St26random_access_iterator_tag0
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEENS0_5__ops16_Iter_equals_valIKS4_EEET_SE_SE_T0_St26random_access_iterator_tag12
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS0_5__ops16_Iter_equals_valIKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS9_S7_blmdSaNSG_14adl_serializerES9_IhSaIhEEvEEEEET_SP_SP_T0_St26random_access_iterator_tag18
_ZSt9__find_ifIPKN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEN9__gnu_cxx5__ops12_Iter_negateIZNSG_C4ESt16initializer_listISH_EbNS2_7value_tEEUlRSI_E_EEET_ST_ST_T0_St26random_access_iterator_tag164
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops10_Iter_predIZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEEUlT_E_EEESF_SF_SF_T0_St26random_access_iterator_tag214
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops16_Iter_equals_valIKiEEET_SB_SB_T0_St26random_access_iterator_tag5236
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS0_5__ops16_Iter_equals_valIKS7_EEET_SH_SH_T0_St26random_access_iterator_tag36000
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS0_5__ops16_Iter_equals_valIS8_EEET_SH_SH_T0_St26random_access_iterator_tag9538614
_ZSt9__find_ifIPKcN9__gnu_cxx5__ops16_Iter_equals_valIS0_EEET_S6_S6_T0_9580412
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predIZNS2_15remove_callbackEPKcEUlRKS3_E_EEET_SH_SH_T0_0
_ZSt9__find_ifIPKcN9__gnu_cxx5__ops16_Iter_equals_valIS0_EEET_S6_S6_T0_0
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEENS0_5__ops16_Iter_equals_valIKS4_EEET_SE_SE_T0_12
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS0_5__ops16_Iter_equals_valIKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS9_S7_blmdSaNSG_14adl_serializerES9_IhSaIhEEvEEEEET_SP_SP_T0_18
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops10_Iter_predIZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEEUlT_E_EEESF_SF_SF_T0_214
_ZSt9__find_ifISt14_List_iteratorIiEN9__gnu_cxx5__ops16_Iter_equals_valIKiEEET_S7_S7_T0_318
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops16_Iter_equals_valIKiEEET_SB_SB_T0_5236
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS0_5__ops16_Iter_equals_valIKS7_EEET_SH_SH_T0_36000
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS0_5__ops16_Iter_equals_valIS8_EEET_SH_SH_T0_9538614
_ZSt3maxIdERKT_S2_S2_106551826
_ZSt3maxIdERKT_S2_S2_16
_ZSt3maxIiERKT_S2_S2_552
_ZSt3maxImERKT_S2_S2_106551258
_ZSt3minIiERKT_S2_S2_216077218
_ZSt3minIiERKT_S2_S2_174
_ZSt3minIjERKT_S2_S2_25378
_ZSt3minIlERKT_S2_S2_32296
_ZSt3minImERKT_S2_S2_216019370
_ZSt12__niter_baseIPcET_S1_641112812
_ZSt12__niter_baseIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_S8_0
_ZSt12__niter_baseIPKcET_S2_0
_ZSt12__niter_baseIPN3c106SymIntEET_S3_0
_ZSt12__niter_baseIPN3c107complexIdEEET_S4_0
_ZSt12__niter_baseIPN3c108optionalIN2at6TensorEEEET_S6_0
_ZSt12__niter_baseIPNSt7__cxx1112regex_traitsIcE10_RegexMaskEET_S5_0
_ZSt12__niter_baseIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEET_SE_0
_ZSt12__niter_baseIPNSt8__detail6_StateIcEEET_S4_0
_ZSt12__niter_baseIPPKN6loguru11EcEntryBaseEET_S5_0
_ZSt12__niter_baseIPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEET_S8_0
_ZSt12__niter_baseIPPlET_S2_0
_ZSt12__niter_baseIPSt4pairIccEET_S3_0
_ZSt12__niter_baseIPSt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEEET_SJ_0
_ZSt12__niter_baseIPSt6vectorIfSaIfEEET_S4_0
_ZSt12__niter_baseIPcET_S1_0
_ZSt12__niter_baseIPhET_S1_0
_ZSt12__niter_baseISt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEET_S8_0
_ZSt12__niter_baseISt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEEET_SK_0
_ZSt12__niter_baseIPN5Catch10Generators16GeneratorWrapperIPKcEEET_S7_24
_ZSt12__niter_baseIPN6loguru8CallbackEET_S3_72
_ZSt12__niter_baseISt20back_insert_iteratorISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES1_IhSaIhEEvEESaISF_EEEET_SJ_114
_ZSt12__niter_baseIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEET_SG_498
_ZSt12__niter_baseIPKiET_S2_524
_ZSt12__niter_baseIPSt4pairIifEET_S3_564
_ZSt12__niter_baseIPKdET_S2_812
_ZSt12__niter_baseIPN2at6TensorEET_S3_1134
_ZSt12__niter_baseIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEET_S7_1620
_ZSt12__niter_baseIPSt4pairIfS0_IiiEEET_S4_3834
_ZSt12__niter_baseIPSt6vectorIiSaIiEEET_S4_4788
_ZSt12__niter_baseISt20back_insert_iteratorISt6vectorIiSaIiEEEET_S5_4830
_ZSt12__niter_baseIPSt4pairIiiEET_S3_7332
_ZSt12__niter_baseIPSt6vectorIdSaIdEEET_S4_7632
_ZSt12__niter_baseIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EET_S9_12468
_ZSt12__niter_baseIPdET_S1_19146
_ZSt12__niter_baseIPfET_S1_37012
_ZSt12__niter_baseIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_S7_51366
_ZSt12__niter_baseIPPN8bayesnet4NodeEET_S4_184268
_ZSt12__niter_baseIPiET_S1_374254
_ZSt12__niter_baseIPmET_S1_529016
_ZSt12__niter_baseIPlET_S1_630156
_ZSt12__niter_baseIPKlET_S2_802636
_ZSt12__niter_baseIPSt6threadET_S2_7420992
_ZSt12__niter_baseIPN3c106IValueEET_S3_631017720
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_algobase.h.func.html b/html/usr/include/c++/13/bits/stl_algobase.h.func.html new file mode 100644 index 0000000..63146e5 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_algobase.h.func.html @@ -0,0 +1,3379 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_algobase.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_algobase.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:73.1 %216158
Test Date:2024-04-30 13:17:26Functions:59.3 %435258
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIccEEvPT_PT0_402458
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIPN8bayesnet4NodeEKS5_EEvPT_PT0_372
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIPN8bayesnet4NodeES5_EEvPT_PT0_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES9_EEvPT_PT0_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIPlS3_EEvPT_PT0_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIcKcEEvPT_PT0_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIccEEvPT_PT0_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIdKdEEvPT_PT0_4
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIddEEvPT_PT0_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIfKfEEvPT_PT0_398
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIffEEvPT_PT0_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIhKhEEvPT_PT0_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIiKiEEvPT_PT0_364
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIiiEEvPT_PT0_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE12__assign_oneIlKlEEvPT_PT0_401320
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPfPdEET0_T_S6_S5_3824
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS8_EET0_T_SD_SC_36
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPKNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEPSF_EET0_T_SK_SJ_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPKSt6vectorIfSaIfEEPS5_EET0_T_SA_S9_6
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPKcSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEET0_T_SE_SD_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_EET0_T_SB_SA_190
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESG_EET0_T_SI_SH_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPSt6vectorIfSaIfEES6_EET0_T_S8_S7_0
_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mIPfPdEET0_T_S6_S5_3592
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIccEEPT0_PT_S6_S4_457090
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIKPN8bayesnet4NodeES5_EEPT0_PT_SA_S8_2572
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIKccEEPT0_PT_S7_S5_0
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIKddEEPT0_PT_S7_S5_8612
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIKffEEPT0_PT_S7_S5_7456
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIKhhEEPT0_PT_S7_S5_0
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIKiiEEPT0_PT_S7_S5_24586
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIKllEEPT0_PT_S7_S5_401328
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIPN8bayesnet4NodeES5_EEPT0_PT_S9_S7_0
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES9_EEPT0_PT_SD_SB_0
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIPlS3_EEPT0_PT_S7_S5_0
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIccEEPT0_PT_S6_S4_0
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIddEEPT0_PT_S6_S4_20
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIffEEPT0_PT_S6_S4_2784
_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIiiEEPT0_PT_S6_S4_2580
_ZNSt11__copy_moveILb1ELb1ESt26random_access_iterator_tagE8__copy_mIPN8bayesnet4NodeES5_EEPT0_PT_S9_S7_0
_ZNSt11__copy_moveILb1ELb1ESt26random_access_iterator_tagE8__copy_mIccEEPT0_PT_S6_S4_0
_ZNSt11__copy_moveILb1ELb1ESt26random_access_iterator_tagE8__copy_mIddEEPT0_PT_S6_S4_40
_ZNSt11__copy_moveILb1ELb1ESt26random_access_iterator_tagE8__copy_mIiiEEPT0_PT_S6_S4_7112
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE12__assign_oneIccEEvPT_PT0_756
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE12__assign_oneIPN8bayesnet4NodeES5_EEvPT_PT0_0
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE12__assign_oneIccEEvPT_PT0_0
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE12__assign_oneIddEEvPT_PT0_122
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE12__assign_oneIiiEEvPT_PT0_634
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE8__copy_mIPSt4pairIfS3_IiiEES6_EET0_T_S8_S7_5688
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE8__copy_mIPN6loguru8CallbackES5_EET0_T_S7_S6_0
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE8__copy_mIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS4_14adl_serializerES7_IhSaIhEEvEESt20back_insert_iteratorIS7_ISH_SaISH_EEEEET0_T_SO_SN_114
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE8__copy_mIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_EET0_T_SB_SA_0
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE8__copy_mIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS5_EES9_EET0_T_SB_SA_60
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE8__copy_mIPSt4pairIfS3_IiiEES6_EET0_T_S8_S7_684
_ZNSt11__copy_moveILb1ELb0ESt26random_access_iterator_tagE8__copy_mIPiSt20back_insert_iteratorISt6vectorIiSaIiEEEEET0_T_SA_S9_4830
_ZNSt20__copy_move_backwardILb1ELb0ESt26random_access_iterator_tagE13__copy_move_bIPSt4pairIifES5_EET0_T_S7_S6_460
_ZNSt20__copy_move_backwardILb1ELb0ESt26random_access_iterator_tagE13__copy_move_bIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_EET0_T_SB_SA_122
_ZNSt20__copy_move_backwardILb1ELb0ESt26random_access_iterator_tagE13__copy_move_bIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS5_EES9_EET0_T_SB_SA_60
_ZNSt20__copy_move_backwardILb1ELb0ESt26random_access_iterator_tagE13__copy_move_bIPSt4pairIfS3_IiiEES6_EET0_T_S8_S7_240
_ZNSt20__copy_move_backwardILb1ELb0ESt26random_access_iterator_tagE13__copy_move_bIPSt4pairIifES5_EET0_T_S7_S6_38
_ZNSt20__copy_move_backwardILb1ELb1ESt26random_access_iterator_tagE13__copy_move_bIccEEPT0_PT_S6_S4_928
_ZNSt20__copy_move_backwardILb0ELb1ESt26random_access_iterator_tagE13__copy_move_bIPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES9_EEPT0_PT_SD_SB_0
_ZNSt20__copy_move_backwardILb0ELb1ESt26random_access_iterator_tagE13__copy_move_bIPlS3_EEPT0_PT_S7_S5_0
_ZNSt20__copy_move_backwardILb1ELb1ESt26random_access_iterator_tagE13__copy_move_bIccEEPT0_PT_S6_S4_0
_ZNSt20__copy_move_backwardILb1ELb1ESt26random_access_iterator_tagE13__copy_move_bIddEEPT0_PT_S6_S4_394
_ZNSt20__copy_move_backwardILb1ELb1ESt26random_access_iterator_tagE13__copy_move_bIiiEEPT0_PT_S6_S4_534
_ZNSt7__equalILb0EE5equalIPKSt4pairIiiES5_EEbT_S6_T0_116
_ZNSt7__equalILb0EE5equalIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEESI_EEbT_SJ_T0_0
_ZNSt7__equalILb0EE5equalIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_EEbT_SA_T0_68
_ZNSt7__equalILb0EE5equalIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESB_EEbT_SC_T0_16
_ZNSt7__equalILb0EE5equalIPKSt4pairIiiES5_EEbT_S6_T0_32
_ZNSt7__equalILb0EE5equalISt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS9_blmdSaNSC_14adl_serializerESF_IhSaIhEEvEEEESL_EEbT_SM_T0_0
_ZNSt7__equalILb1EE5equalIcEEbPKT_S4_S4_44
_ZNSt7__equalILb1EE5equalIcEEbPKT_S4_S4_0
_ZNSt7__equalILb1EE5equalIhEEbPKT_S4_S4_0
_ZNSt7__equalILb1EE5equalIiEEbPKT_S4_S4_44
_ZSt10__fill_n_aIPbmbET_S1_T0_RKT1_St26random_access_iterator_tag2496282
_ZSt10__fill_n_aIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEmSC_ET_SE_T0_RKT1_St26random_access_iterator_tag0
_ZSt10__fill_n_aIPbmbET_S1_T0_RKT1_St26random_access_iterator_tag0
_ZSt10__fill_n_aIPdmdET_S1_T0_RKT1_St26random_access_iterator_tag422682
_ZSt10__fill_n_aIPfmfET_S1_T0_RKT1_St26random_access_iterator_tag218
_ZSt10__fill_n_aIPimiET_S1_T0_RKT1_St26random_access_iterator_tag2073382
_ZSt11__equal_auxIN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEES7_EbT_S8_T0_160
_ZSt11__equal_auxIN9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEES6_ISG_SaISG_EEEESL_EbT_SM_T0_0
_ZSt11__equal_auxIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEESD_EbT_SE_T0_68
_ZSt11__equal_auxIN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESt6vectorIS9_SaIS9_EEEESF_EbT_SG_T0_16
_ZSt11__equal_auxIN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS3_SaIS3_EEEES9_EbT_SA_T0_32
_ZSt11__equal_auxIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESA_EbT_SB_T0_0
_ZSt11__equal_auxIN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEES7_EbT_S8_T0_0
_ZSt11__equal_auxIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEES7_EbT_S8_T0_44
_ZSt11__equal_auxISt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEESJ_EbT_SK_T0_0
_ZSt11__remove_ifIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops16_Iter_equals_valIKiEEET_SB_SB_T0_1176
_ZSt11__remove_ifIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS0_5__ops16_Iter_equals_valIKS7_EEET_SH_SH_T0_894
_ZSt11__remove_ifIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEENS0_5__ops16_Iter_equals_valIKS4_EEET_SE_SE_T0_12
_ZSt11__remove_ifIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops10_Iter_predIZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEEUlT_E_EEESF_SF_SF_T0_214
_ZSt11__remove_ifIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops16_Iter_equals_valIKiEEET_SB_SB_T0_56
_ZSt11swap_rangesIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES9_ET0_T_SB_SA_0
_ZSt12__equal_aux1IPKcS1_EbT_S2_T0_160
_ZSt12__equal_aux1IPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESG_EbT_SH_T0_0
_ZSt12__equal_aux1IPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EbT_S8_T0_68
_ZSt12__equal_aux1IPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES9_EbT_SA_T0_16
_ZSt12__equal_aux1IPKSt4pairIiiES3_EbT_S4_T0_32
_ZSt12__equal_aux1IPKcS1_EbT_S2_T0_0
_ZSt12__equal_aux1IPKhS1_EbT_S2_T0_0
_ZSt12__equal_aux1IPKiS1_EbT_S2_T0_44
_ZSt12__equal_aux1ISt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEESJ_EbT_SK_T0_0
_ZSt12__niter_baseIPcET_S1_641112812
_ZSt12__niter_baseIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_S8_0
_ZSt12__niter_baseIPKcET_S2_0
_ZSt12__niter_baseIPKdET_S2_812
_ZSt12__niter_baseIPKiET_S2_524
_ZSt12__niter_baseIPKlET_S2_802636
_ZSt12__niter_baseIPN2at6TensorEET_S3_1134
_ZSt12__niter_baseIPN3c106IValueEET_S3_631017720
_ZSt12__niter_baseIPN3c106SymIntEET_S3_0
_ZSt12__niter_baseIPN3c107complexIdEEET_S4_0
_ZSt12__niter_baseIPN3c108optionalIN2at6TensorEEEET_S6_0
_ZSt12__niter_baseIPN5Catch10Generators16GeneratorWrapperIPKcEEET_S7_24
_ZSt12__niter_baseIPN6loguru8CallbackEET_S3_72
_ZSt12__niter_baseIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEET_SG_498
_ZSt12__niter_baseIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_S7_51366
_ZSt12__niter_baseIPNSt7__cxx1112regex_traitsIcE10_RegexMaskEET_S5_0
_ZSt12__niter_baseIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEET_SE_0
_ZSt12__niter_baseIPNSt8__detail6_StateIcEEET_S4_0
_ZSt12__niter_baseIPPKN6loguru11EcEntryBaseEET_S5_0
_ZSt12__niter_baseIPPN8bayesnet4NodeEET_S4_184268
_ZSt12__niter_baseIPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEET_S8_0
_ZSt12__niter_baseIPPlET_S2_0
_ZSt12__niter_baseIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEET_S7_1620
_ZSt12__niter_baseIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EET_S9_12468
_ZSt12__niter_baseIPSt4pairIccEET_S3_0
_ZSt12__niter_baseIPSt4pairIfS0_IiiEEET_S4_3834
_ZSt12__niter_baseIPSt4pairIifEET_S3_564
_ZSt12__niter_baseIPSt4pairIiiEET_S3_7332
_ZSt12__niter_baseIPSt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEEET_SJ_0
_ZSt12__niter_baseIPSt6threadET_S2_7420992
_ZSt12__niter_baseIPSt6vectorIdSaIdEEET_S4_7632
_ZSt12__niter_baseIPSt6vectorIfSaIfEEET_S4_0
_ZSt12__niter_baseIPSt6vectorIiSaIiEEET_S4_4788
_ZSt12__niter_baseIPcET_S1_0
_ZSt12__niter_baseIPdET_S1_19146
_ZSt12__niter_baseIPfET_S1_37012
_ZSt12__niter_baseIPhET_S1_0
_ZSt12__niter_baseIPiET_S1_374254
_ZSt12__niter_baseIPlET_S1_630156
_ZSt12__niter_baseIPmET_S1_529016
_ZSt12__niter_baseISt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEET_S8_0
_ZSt12__niter_baseISt20back_insert_iteratorISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES1_IhSaIhEEvEESaISF_EEEET_SJ_114
_ZSt12__niter_baseISt20back_insert_iteratorISt6vectorIiSaIiEEEET_S5_4830
_ZSt12__niter_baseISt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEEET_SK_0
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEES2_ET_S7_T0_14646
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS3_SaIS3_EEEES4_ET_S9_T0_0
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEES8_ET_SD_T0_194
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEESD_ET_SI_T0_0
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEES5_ET_SA_T0_8
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS4_EESt6vectorIS7_SaIS7_EEEES8_ET_SD_T0_60
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_ET_SA_T0_626
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEES4_ET_S9_T0_38
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPSt6vectorIfSaIfEES2_IS4_SaIS4_EEEES5_ET_S9_T0_6
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEES2_ET_S7_T0_0
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES2_ET_S7_T0_436
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPfSt6vectorIfSaIfEEEES2_ET_S7_T0_4474
_ZSt12__niter_wrapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES2_ET_S7_T0_8804
_ZSt12__niter_wrapIPcET_RKS1_S1_455158
_ZSt12__niter_wrapIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_RKS7_S7_154
_ZSt12__niter_wrapIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEET_RKSE_SE_0
_ZSt12__niter_wrapIPPN8bayesnet4NodeEET_RKS4_S4_2564
_ZSt12__niter_wrapIPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEEET_RKS8_S8_0
_ZSt12__niter_wrapIPPlET_RKS2_S2_0
_ZSt12__niter_wrapIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEET_RKS7_S7_60
_ZSt12__niter_wrapIPSt4pairIfS0_IiiEEET_RKS4_S4_298
_ZSt12__niter_wrapIPSt6vectorIfSaIfEEET_RKS4_S4_0
_ZSt12__niter_wrapIPcET_RKS1_S1_0
_ZSt12__niter_wrapIPdET_RKS1_S1_12222
_ZSt12__niter_wrapIPfET_RKS1_S1_7580
_ZSt12__niter_wrapIPhET_RKS1_S1_0
_ZSt12__niter_wrapIPiET_RKS1_S1_26008
_ZSt12__niter_wrapIPlET_RKS1_S1_401328
_ZSt12__niter_wrapISt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEET_RKS8_S8_0
_ZSt12__niter_wrapISt20back_insert_iteratorISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES1_IhSaIhEEvEESaISF_EEEET_RKSJ_SJ_114
_ZSt12__niter_wrapISt20back_insert_iteratorISt6vectorIiSaIiEEEET_RKS5_S5_4830
_ZSt13__copy_move_aILb0EPfPdET1_T0_S3_S2_466602
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS1_IPS7_SC_EEET1_T0_SH_SG_36
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEENS1_IPSC_SH_EEET1_T0_SM_SL_0
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEENS1_IPS4_S9_EEET1_T0_SE_SD_8
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEEPS4_ET1_T0_SD_SC_2564
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES2_IS4_SaIS4_EEEENS1_IPS4_S8_EEET1_T0_SD_SC_6
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESt20back_insert_iteratorIS9_EET1_T0_SE_SD_0
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEPcET1_T0_SA_S9_0
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEENS1_IPdS6_EEET1_T0_SB_SA_2
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEPdET1_T0_SA_S9_8204
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEEENS1_IPfS6_EEET1_T0_SB_SA_2660
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEEEPfET1_T0_SA_S9_4796
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEEPhET1_T0_SA_S9_0
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEENS1_IPiS6_EEET1_T0_SB_SA_2726
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEPiET1_T0_SA_S9_21598
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEPlET1_T0_SA_S9_10
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEESC_ET1_T0_SE_SD_158
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES2_ET1_T0_S8_S7_20
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES2_ET1_T0_S8_S7_1970
_ZSt13__copy_move_aILb0EN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES6_ET1_T0_S8_S7_244
_ZSt13__copy_move_aILb0EPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS5_ET1_T0_SA_S9_0
_ZSt13__copy_move_aILb0EPKcPcET1_T0_S4_S3_0
_ZSt13__copy_move_aILb0EPKcSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEET1_T0_SB_SA_0
_ZSt13__copy_move_aILb0EPKdPdET1_T0_S4_S3_406
_ZSt13__copy_move_aILb0EPKiPiET1_T0_S4_S3_262
_ZSt13__copy_move_aILb0EPKlPlET1_T0_S4_S3_401318
_ZSt13__copy_move_aILb0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET1_T0_S8_S7_32
_ZSt13__copy_move_aILb0EPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESD_ET1_T0_SF_SE_0
_ZSt13__copy_move_aILb0EPPN8bayesnet4NodeES3_ET1_T0_S5_S4_0
_ZSt13__copy_move_aILb0EPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES7_ET1_T0_S9_S8_0
_ZSt13__copy_move_aILb0EPPlS1_ET1_T0_S3_S2_0
_ZSt13__copy_move_aILb0EPSt6vectorIfSaIfEES3_ET1_T0_S5_S4_0
_ZSt13__copy_move_aILb0EPcS0_ET1_T0_S2_S1_0
_ZSt13__copy_move_aILb0EPdS0_ET1_T0_S2_S1_0
_ZSt13__copy_move_aILb0EPfPdET1_T0_S3_S2_3592
_ZSt13__copy_move_aILb0EPfS0_ET1_T0_S2_S1_2784
_ZSt13__copy_move_aILb0EPiS0_ET1_T0_S2_S1_366
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS3_SaIS3_EEEES8_ET1_T0_SA_S9_0
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEES6_ISG_SaISG_EEEESt20back_insert_iteratorISJ_EET1_T0_SO_SN_114
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEESC_ET1_T0_SE_SD_0
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEES9_ET1_T0_SB_SA_0
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS4_EESt6vectorIS7_SaIS7_EEEESC_ET1_T0_SE_SD_60
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_ET1_T0_SB_SA_298
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES9_ET1_T0_SB_SA_196
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEES6_ET1_T0_S8_S7_0
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES6_ET1_T0_S8_S7_40
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES6_ET1_T0_S8_S7_5356
_ZSt13__copy_move_aILb1EN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEESt20back_insert_iteratorIS5_EET1_T0_SA_S9_4830
_ZSt13__copy_move_aILb1EPSt4pairIfS0_IiiEEN9__gnu_cxx17__normal_iteratorIS3_St6vectorIS2_SaIS2_EEEEET1_T0_SB_SA_190
_ZSt13__copy_move_aILb1EPiS0_ET1_T0_S2_S1_1756
_ZSt13__lower_boundIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEcNS0_5__ops14_Iter_less_valEET_SA_SA_RKT0_T1_0
_ZSt13__lower_boundIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEcNS0_5__ops14_Iter_less_valEET_SA_SA_RKT0_T1_0
_ZSt13__lower_boundIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES4_NS0_5__ops14_Iter_comp_valIZN8bayesnet5Graph17kruskal_algorithmEvEUlRKT_RKT0_E_EEESE_SE_SE_SJ_T1_0
_ZSt13copy_backwardIPPlS1_ET0_T_S3_S2_0
_ZSt13copy_backwardIPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES7_ET0_T_S9_S8_0
_ZSt13copy_backwardIPPlS1_ET0_T_S3_S2_0
_ZSt13move_backwardIPiS0_ET0_T_S2_S1_1388
_ZSt13move_backwardIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES9_ET0_T_SB_SA_240
_ZSt13move_backwardIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEES8_ET0_T_SA_S9_38
_ZSt13move_backwardIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEES6_ET0_T_S8_S7_0
_ZSt13move_backwardIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES6_ET0_T_S8_S7_394
_ZSt13move_backwardIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES6_ET0_T_S8_S7_478
_ZSt13move_backwardIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET0_T_S8_S7_122
_ZSt13move_backwardIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EES6_ET0_T_S8_S7_60
_ZSt13move_backwardIPSt4pairIfS0_IiiEEN9__gnu_cxx17__normal_iteratorIS3_St6vectorIS2_SaIS2_EEEEET0_T_SB_SA_0
_ZSt13move_backwardIPiS0_ET0_T_S2_S1_56
_ZSt14__copy_move_a1ILb0EPfPdET1_T0_S3_S2_466602
_ZSt14__copy_move_a1ILb0EPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS5_ET1_T0_SA_S9_36
_ZSt14__copy_move_a1ILb0EPKNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEPSC_ET1_T0_SH_SG_0
_ZSt14__copy_move_a1ILb0EPKPN8bayesnet4NodeEPS2_ET1_T0_S7_S6_2572
_ZSt14__copy_move_a1ILb0EPKSt6vectorIfSaIfEEPS2_ET1_T0_S7_S6_6
_ZSt14__copy_move_a1ILb0EPKcPcET1_T0_S4_S3_0
_ZSt14__copy_move_a1ILb0EPKcSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEET1_T0_SB_SA_0
_ZSt14__copy_move_a1ILb0EPKdPdET1_T0_S4_S3_8612
_ZSt14__copy_move_a1ILb0EPKfPfET1_T0_S4_S3_7456
_ZSt14__copy_move_a1ILb0EPKhPhET1_T0_S4_S3_0
_ZSt14__copy_move_a1ILb0EPKiPiET1_T0_S4_S3_24586
_ZSt14__copy_move_a1ILb0EPKlPlET1_T0_S4_S3_401328
_ZSt14__copy_move_a1ILb0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET1_T0_S8_S7_190
_ZSt14__copy_move_a1ILb0EPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESD_ET1_T0_SF_SE_0
_ZSt14__copy_move_a1ILb0EPPN8bayesnet4NodeES3_ET1_T0_S5_S4_0
_ZSt14__copy_move_a1ILb0EPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES7_ET1_T0_S9_S8_0
_ZSt14__copy_move_a1ILb0EPPlS1_ET1_T0_S3_S2_0
_ZSt14__copy_move_a1ILb0EPSt6vectorIfSaIfEES3_ET1_T0_S5_S4_0
_ZSt14__copy_move_a1ILb0EPcS0_ET1_T0_S2_S1_0
_ZSt14__copy_move_a1ILb0EPdS0_ET1_T0_S2_S1_20
_ZSt14__copy_move_a1ILb0EPfPdET1_T0_S3_S2_3592
_ZSt14__copy_move_a1ILb0EPfS0_ET1_T0_S2_S1_2784
_ZSt14__copy_move_a1ILb0EPiS0_ET1_T0_S2_S1_2580
_ZSt14__copy_move_a1ILb1EPN6loguru8CallbackES2_ET1_T0_S4_S3_0
_ZSt14__copy_move_a1ILb1EPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESt20back_insert_iteratorIS4_ISE_SaISE_EEEET1_T0_SL_SK_114
_ZSt14__copy_move_a1ILb1EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET1_T0_S8_S7_0
_ZSt14__copy_move_a1ILb1EPPN8bayesnet4NodeES3_ET1_T0_S5_S4_0
_ZSt14__copy_move_a1ILb1EPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EES6_ET1_T0_S8_S7_60
_ZSt14__copy_move_a1ILb1EPSt4pairIfS0_IiiEES3_ET1_T0_S5_S4_684
_ZSt14__copy_move_a1ILb1EPcS0_ET1_T0_S2_S1_0
_ZSt14__copy_move_a1ILb1EPdS0_ET1_T0_S2_S1_40
_ZSt14__copy_move_a1ILb1EPiS0_ET1_T0_S2_S1_7112
_ZSt14__copy_move_a1ILb1EPiSt20back_insert_iteratorISt6vectorIiSaIiEEEET1_T0_S7_S6_4830
_ZSt14__copy_move_a2ILb0EPfPdET1_T0_S3_S2_466602
_ZSt14__copy_move_a2ILb0EPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS5_ET1_T0_SA_S9_36
_ZSt14__copy_move_a2ILb0EPKNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEPSC_ET1_T0_SH_SG_0
_ZSt14__copy_move_a2ILb0EPKPN8bayesnet4NodeEPS2_ET1_T0_S7_S6_2572
_ZSt14__copy_move_a2ILb0EPKSt6vectorIfSaIfEEPS2_ET1_T0_S7_S6_6
_ZSt14__copy_move_a2ILb0EPKcPcET1_T0_S4_S3_0
_ZSt14__copy_move_a2ILb0EPKcSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEET1_T0_SB_SA_0
_ZSt14__copy_move_a2ILb0EPKdPdET1_T0_S4_S3_8612
_ZSt14__copy_move_a2ILb0EPKfPfET1_T0_S4_S3_7456
_ZSt14__copy_move_a2ILb0EPKhPhET1_T0_S4_S3_0
_ZSt14__copy_move_a2ILb0EPKiPiET1_T0_S4_S3_24586
_ZSt14__copy_move_a2ILb0EPKlPlET1_T0_S4_S3_401328
_ZSt14__copy_move_a2ILb0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET1_T0_S8_S7_190
_ZSt14__copy_move_a2ILb0EPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESD_ET1_T0_SF_SE_0
_ZSt14__copy_move_a2ILb0EPPN8bayesnet4NodeES3_ET1_T0_S5_S4_0
_ZSt14__copy_move_a2ILb0EPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES7_ET1_T0_S9_S8_0
_ZSt14__copy_move_a2ILb0EPPlS1_ET1_T0_S3_S2_0
_ZSt14__copy_move_a2ILb0EPSt6vectorIfSaIfEES3_ET1_T0_S5_S4_0
_ZSt14__copy_move_a2ILb0EPcS0_ET1_T0_S2_S1_0
_ZSt14__copy_move_a2ILb0EPdS0_ET1_T0_S2_S1_20
_ZSt14__copy_move_a2ILb0EPfPdET1_T0_S3_S2_3592
_ZSt14__copy_move_a2ILb0EPfS0_ET1_T0_S2_S1_2784
_ZSt14__copy_move_a2ILb0EPiS0_ET1_T0_S2_S1_2580
_ZSt14__copy_move_a2ILb1EPN6loguru8CallbackES2_ET1_T0_S4_S3_0
_ZSt14__copy_move_a2ILb1EPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESt20back_insert_iteratorIS4_ISE_SaISE_EEEET1_T0_SL_SK_114
_ZSt14__copy_move_a2ILb1EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET1_T0_S8_S7_0
_ZSt14__copy_move_a2ILb1EPPN8bayesnet4NodeES3_ET1_T0_S5_S4_0
_ZSt14__copy_move_a2ILb1EPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EES6_ET1_T0_S8_S7_60
_ZSt14__copy_move_a2ILb1EPSt4pairIfS0_IiiEES3_ET1_T0_S5_S4_684
_ZSt14__copy_move_a2ILb1EPcS0_ET1_T0_S2_S1_0
_ZSt14__copy_move_a2ILb1EPdS0_ET1_T0_S2_S1_40
_ZSt14__copy_move_a2ILb1EPiS0_ET1_T0_S2_S1_7112
_ZSt14__copy_move_a2ILb1EPiSt20back_insert_iteratorISt6vectorIiSaIiEEEET1_T0_S7_S6_4830
_ZSt17__size_to_integerm2499522
_ZSt22__copy_move_backward_aILb1EPiS0_ET1_T0_S2_S1_1388
_ZSt22__copy_move_backward_aILb0EPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES7_ET1_T0_S9_S8_0
_ZSt22__copy_move_backward_aILb0EPPlS1_ET1_T0_S3_S2_0
_ZSt22__copy_move_backward_aILb1EN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES9_ET1_T0_SB_SA_240
_ZSt22__copy_move_backward_aILb1EN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEES8_ET1_T0_SA_S9_38
_ZSt22__copy_move_backward_aILb1EN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEES6_ET1_T0_S8_S7_0
_ZSt22__copy_move_backward_aILb1EN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES6_ET1_T0_S8_S7_394
_ZSt22__copy_move_backward_aILb1EN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES6_ET1_T0_S8_S7_478
_ZSt22__copy_move_backward_aILb1EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET1_T0_S8_S7_122
_ZSt22__copy_move_backward_aILb1EPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EES6_ET1_T0_S8_S7_60
_ZSt22__copy_move_backward_aILb1EPSt4pairIfS0_IiiEEN9__gnu_cxx17__normal_iteratorIS3_St6vectorIS2_SaIS2_EEEEET1_T0_SB_SA_0
_ZSt22__copy_move_backward_aILb1EPiS0_ET1_T0_S2_S1_56
_ZSt23__copy_move_backward_a1ILb1EPcS0_ET1_T0_S2_S1_1388
_ZSt23__copy_move_backward_a1ILb0EPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES7_ET1_T0_S9_S8_0
_ZSt23__copy_move_backward_a1ILb0EPPlS1_ET1_T0_S3_S2_0
_ZSt23__copy_move_backward_a1ILb1EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET1_T0_S8_S7_122
_ZSt23__copy_move_backward_a1ILb1EPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EES6_ET1_T0_S8_S7_60
_ZSt23__copy_move_backward_a1ILb1EPSt4pairIfS0_IiiEES3_ET1_T0_S5_S4_240
_ZSt23__copy_move_backward_a1ILb1EPSt4pairIifES2_ET1_T0_S4_S3_38
_ZSt23__copy_move_backward_a1ILb1EPcS0_ET1_T0_S2_S1_0
_ZSt23__copy_move_backward_a1ILb1EPdS0_ET1_T0_S2_S1_394
_ZSt23__copy_move_backward_a1ILb1EPiS0_ET1_T0_S2_S1_534
_ZSt23__copy_move_backward_a2ILb1EPcS0_ET1_T0_S2_S1_1388
_ZSt23__copy_move_backward_a2ILb0EPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES7_ET1_T0_S9_S8_0
_ZSt23__copy_move_backward_a2ILb0EPPlS1_ET1_T0_S3_S2_0
_ZSt23__copy_move_backward_a2ILb1EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET1_T0_S8_S7_122
_ZSt23__copy_move_backward_a2ILb1EPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EES6_ET1_T0_S8_S7_60
_ZSt23__copy_move_backward_a2ILb1EPSt4pairIfS0_IiiEES3_ET1_T0_S5_S4_240
_ZSt23__copy_move_backward_a2ILb1EPSt4pairIifES2_ET1_T0_S4_S3_38
_ZSt23__copy_move_backward_a2ILb1EPcS0_ET1_T0_S2_S1_0
_ZSt23__copy_move_backward_a2ILb1EPdS0_ET1_T0_S2_S1_394
_ZSt23__copy_move_backward_a2ILb1EPiS0_ET1_T0_S2_S1_534
_ZSt3maxIdERKT_S2_S2_106551826
_ZSt3maxIdERKT_S2_S2_16
_ZSt3maxIiERKT_S2_S2_552
_ZSt3maxImERKT_S2_S2_106551258
_ZSt3minIiERKT_S2_S2_216077218
_ZSt3minIiERKT_S2_S2_174
_ZSt3minIjERKT_S2_S2_25378
_ZSt3minIlERKT_S2_S2_32296
_ZSt3minImERKT_S2_S2_216019370
_ZSt4__lgIlET_S0_3724
_ZSt4copyIPfPdET0_T_S3_S2_455518
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS1_IPS7_SC_EEET0_T_SH_SG_36
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEENS1_IPSC_SH_EEET0_T_SM_SL_0
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEENS1_IPS4_S9_EEET0_T_SE_SD_8
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEEPS4_ET0_T_SD_SC_2564
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES2_IS4_SaIS4_EEEENS1_IPS4_S8_EEET0_T_SD_SC_6
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESt20back_insert_iteratorIS9_EET0_T_SE_SD_0
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEPcET0_T_SA_S9_0
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEENS1_IPdS6_EEET0_T_SB_SA_2
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEPdET0_T_SA_S9_8204
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEEENS1_IPfS6_EEET0_T_SB_SA_2660
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEEEPfET0_T_SA_S9_4796
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEEPhET0_T_SA_S9_0
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEENS1_IPiS6_EEET0_T_SB_SA_2726
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEPiET0_T_SA_S9_21598
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEPlET0_T_SA_S9_10
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEESC_ET0_T_SE_SD_158
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES2_ET0_T_S8_S7_20
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES2_ET0_T_S8_S7_1970
_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES6_ET0_T_S8_S7_244
_ZSt4copyIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS5_ET0_T_SA_S9_0
_ZSt4copyIPKcPcET0_T_S4_S3_0
_ZSt4copyIPKcSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEET0_T_SB_SA_0
_ZSt4copyIPKdPdET0_T_S4_S3_406
_ZSt4copyIPKiPiET0_T_S4_S3_262
_ZSt4copyIPKlPlET0_T_S4_S3_401318
_ZSt4copyIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET0_T_S8_S7_32
_ZSt4copyIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESD_ET0_T_SF_SE_0
_ZSt4copyIPPN8bayesnet4NodeES3_ET0_T_S5_S4_0
_ZSt4copyIPPNSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEES7_ET0_T_S9_S8_0
_ZSt4copyIPPlS1_ET0_T_S3_S2_0
_ZSt4copyIPSt6vectorIfSaIfEES3_ET0_T_S5_S4_0
_ZSt4copyIPcS0_ET0_T_S2_S1_0
_ZSt4copyIPdS0_ET0_T_S2_S1_0
_ZSt4copyIPfPdET0_T_S3_S2_3592
_ZSt4copyIPfS0_ET0_T_S2_S1_2784
_ZSt4copyIPiS0_ET0_T_S2_S1_366
_ZSt4copyISt13move_iteratorIPiES1_ET0_T_S4_S3_1756
_ZSt4fillIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEESC_EvT_SI_RKT0_0
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEES6_ET0_T_S8_S7_11084
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS3_SaIS3_EEEES8_ET0_T_SA_S9_0
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEES6_ISG_SaISG_EEEESt20back_insert_iteratorISJ_EET0_T_SO_SN_114
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEESC_ET0_T_SE_SD_0
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEES9_ET0_T_SB_SA_0
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS4_EESt6vectorIS7_SaIS7_EEEESC_ET0_T_SE_SD_60
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES5_ET0_T_SB_SA_298
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES9_ET0_T_SB_SA_196
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEES6_ET0_T_S8_S7_0
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES6_ET0_T_S8_S7_40
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES6_ET0_T_S8_S7_5356
_ZSt4moveIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEESt20back_insert_iteratorIS5_EET0_T_SA_S9_4830
_ZSt4moveIPSt4pairIfS0_IiiEEN9__gnu_cxx17__normal_iteratorIS3_St6vectorIS2_SaIS2_EEEEET0_T_SB_SA_190
_ZSt5equalIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESA_ZNSt8__detail16_Backref_matcherISA_NS4_12regex_traitsIcEEE8_M_applyESA_SA_SA_SA_EUlccE_EbT_SH_T0_T1_0
_ZSt5equalIN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEES7_EbT_S8_T0_160
_ZSt5equalIN9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEES6_ISG_SaISG_EEEESL_EbT_SM_T0_0
_ZSt5equalIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEESD_EbT_SE_T0_68
_ZSt5equalIN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESt6vectorIS9_SaIS9_EEEESF_EbT_SG_T0_16
_ZSt5equalIN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS3_SaIS3_EEEES9_EbT_SA_T0_32
_ZSt5equalIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESA_EbT_SB_T0_0
_ZSt5equalIN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEES7_EbT_S8_T0_0
_ZSt5equalIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEES7_EbT_S8_T0_44
_ZSt5equalISt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEESJ_EbT_SK_T0_0
_ZSt6fill_nIPbmbET_S1_T0_RKT1_2496282
_ZSt6fill_nIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEmSC_ET_SE_T0_RKT1_0
_ZSt6fill_nIPbmbET_S1_T0_RKT1_0
_ZSt6fill_nIPdmdET_S1_T0_RKT1_422682
_ZSt6fill_nIPfmfET_S1_T0_RKT1_218
_ZSt6fill_nIPimiET_S1_T0_RKT1_2073382
_ZSt8__equal4IN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESA_EbT_SB_T0_SC_0
_ZSt8__equal4IN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESA_ZNSt8__detail16_Backref_matcherISA_NS4_12regex_traitsIcEEE8_M_applyESA_SA_SA_SA_EUlccE_EbT_SH_T0_SI_T1_0
_ZSt8__fill_aIPbbEvT_S1_RKT0_2496136
_ZSt8__fill_aIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEESC_EvT_SI_RKT0_0
_ZSt8__fill_aIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESC_EvT_SE_RKT0_0
_ZSt8__fill_aIPbbEvT_S1_RKT0_0
_ZSt8__fill_aIPddEvT_S1_RKT0_422682
_ZSt8__fill_aIPffEvT_S1_RKT0_218
_ZSt8__fill_aIPiiEvT_S1_RKT0_2073236
_ZSt8__memcmpIccEiPKT_PKT0_m44
_ZSt8__memcmpIccEiPKT_PKT0_m0
_ZSt8__memcmpIhhEiPKT_PKT0_m0
_ZSt8__memcmpIiiEiPKT_PKT0_m44
_ZSt9__fill_a1IPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESC_ENS2_11__enable_ifIXntsrSt11__is_scalarIT0_E7__valueEvE6__typeET_SK_RKSG_0
_ZSt9__fill_a1IPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EESC_EvNS3_IT_T0_EESJ_RKT1_0
_ZSt9__fill_a1IPbbEN9__gnu_cxx11__enable_ifIXsrSt11__is_scalarIT0_E7__valueEvE6__typeET_S8_RKS4_2496136
_ZSt9__fill_a1IPbbEN9__gnu_cxx11__enable_ifIXsrSt11__is_scalarIT0_E7__valueEvE6__typeET_S8_RKS4_0
_ZSt9__fill_a1IPddEN9__gnu_cxx11__enable_ifIXsrSt11__is_scalarIT0_E7__valueEvE6__typeET_S8_RKS4_422682
_ZSt9__fill_a1IPffEN9__gnu_cxx11__enable_ifIXsrSt11__is_scalarIT0_E7__valueEvE6__typeET_S8_RKS4_218
_ZSt9__fill_a1IPiiEN9__gnu_cxx11__enable_ifIXsrSt11__is_scalarIT0_E7__valueEvE6__typeET_S8_RKS4_2073236
_ZSt9__find_ifIPKcN9__gnu_cxx5__ops16_Iter_equals_valIS0_EEET_S6_S6_T0_9580412
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS0_5__ops16_Iter_equals_valIS8_EEET_SH_SH_T0_9538614
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predIZNS2_15remove_callbackEPKcEUlRKS3_E_EEET_SH_SH_T0_0
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS0_5__ops16_Iter_equals_valIKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS9_S7_blmdSaNSG_14adl_serializerES9_IhSaIhEEvEEEEET_SP_SP_T0_18
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS0_5__ops16_Iter_equals_valIKS7_EEET_SH_SH_T0_36000
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEENS0_5__ops16_Iter_equals_valIKS4_EEET_SE_SE_T0_12
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops10_Iter_predIZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEEUlT_E_EEESF_SF_SF_T0_214
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops16_Iter_equals_valIKiEEET_SB_SB_T0_5236
_ZSt9__find_ifIPKcN9__gnu_cxx5__ops16_Iter_equals_valIS0_EEET_S6_S6_T0_0
_ZSt9__find_ifISt14_List_iteratorIiEN9__gnu_cxx5__ops16_Iter_equals_valIKiEEET_S7_S7_T0_318
_ZSt9__find_ifIPKcN9__gnu_cxx5__ops16_Iter_equals_valIS0_EEET_S6_S6_T0_St26random_access_iterator_tag9580258
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS0_5__ops16_Iter_equals_valIS8_EEET_SH_SH_T0_St26random_access_iterator_tag9538614
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS3_SaIS3_EEEENS0_5__ops10_Iter_predIZNS2_15remove_callbackEPKcEUlRKS3_E_EEET_SH_SH_T0_St26random_access_iterator_tag0
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS0_5__ops16_Iter_equals_valIKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS9_S7_blmdSaNSG_14adl_serializerES9_IhSaIhEEvEEEEET_SP_SP_T0_St26random_access_iterator_tag18
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS0_5__ops16_Iter_equals_valIKS7_EEET_SH_SH_T0_St26random_access_iterator_tag36000
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEENS0_5__ops16_Iter_equals_valIKS4_EEET_SE_SE_T0_St26random_access_iterator_tag12
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops10_Iter_predIZN8bayesnet9BoostAODE10trainModelERKN2at6TensorEEUlT_E_EEESF_SF_SF_T0_St26random_access_iterator_tag214
_ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops16_Iter_equals_valIKiEEET_SB_SB_T0_St26random_access_iterator_tag5236
_ZSt9__find_ifIPKN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEN9__gnu_cxx5__ops12_Iter_negateIZNSG_C4ESt16initializer_listISH_EbNS2_7value_tEEUlRSI_E_EEET_ST_ST_T0_St26random_access_iterator_tag164
_ZSt9__find_ifIPKcN9__gnu_cxx5__ops16_Iter_equals_valIS0_EEET_S6_S6_T0_St26random_access_iterator_tag0
_ZSt9__find_ifISt14_List_iteratorIiEN9__gnu_cxx5__ops16_Iter_equals_valIKiEEET_S7_S7_T0_St18input_iterator_tag318
_ZSt9iter_swapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEES6_EvT_T0_87146
_ZSt9iter_swapIN9__gnu_cxx17__normal_iteratorIPPKN6loguru11EcEntryBaseESt6vectorIS5_SaIS5_EEEESA_EvT_T0_0
_ZSt9iter_swapIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES9_EvT_T0_0
_ZSt9iter_swapIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEES8_EvT_T0_0
_ZSt9iter_swapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEES6_EvT_T0_0
_ZSt9iter_swapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES6_EvT_T0_3238
_ZSt9iter_swapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES6_EvT_T0_83908
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_algobase.h.gcov.html b/html/usr/include/c++/13/bits/stl_algobase.h.gcov.html new file mode 100644 index 0000000..51f1800 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_algobase.h.gcov.html @@ -0,0 +1,2309 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_algobase.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_algobase.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:73.1 %216158
Test Date:2024-04-30 13:17:26Functions:59.3 %435258
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Core algorithmic facilities -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1996-1998
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/stl_algobase.h
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{algorithm}
+      54              :  */
+      55              : 
+      56              : #ifndef _STL_ALGOBASE_H
+      57              : #define _STL_ALGOBASE_H 1
+      58              : 
+      59              : #include <bits/c++config.h>
+      60              : #include <bits/functexcept.h>
+      61              : #include <bits/cpp_type_traits.h>
+      62              : #include <ext/type_traits.h>
+      63              : #include <ext/numeric_traits.h>
+      64              : #include <bits/stl_pair.h>
+      65              : #include <bits/stl_iterator_base_types.h>
+      66              : #include <bits/stl_iterator_base_funcs.h>
+      67              : #include <bits/stl_iterator.h>
+      68              : #include <bits/concept_check.h>
+      69              : #include <debug/debug.h>
+      70              : #include <bits/move.h> // For std::swap
+      71              : #include <bits/predefined_ops.h>
+      72              : #if __cplusplus >= 201103L
+      73              : # include <type_traits>
+      74              : #endif
+      75              : #if __cplusplus >= 201402L
+      76              : # include <bit> // std::__bit_width
+      77              : #endif
+      78              : #if __cplusplus >= 202002L
+      79              : # include <compare>
+      80              : #endif
+      81              : 
+      82              : namespace std _GLIBCXX_VISIBILITY(default)
+      83              : {
+      84              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      85              : 
+      86              :   /*
+      87              :    * A constexpr wrapper for __builtin_memcmp.
+      88              :    * @param __num The number of elements of type _Tp (not bytes).
+      89              :    */
+      90              :   template<typename _Tp, typename _Up>
+      91              :     _GLIBCXX14_CONSTEXPR
+      92              :     inline int
+      93           44 :     __memcmp(const _Tp* __first1, const _Up* __first2, size_t __num)
+      94              :     {
+      95              : #if __cplusplus >= 201103L
+      96              :       static_assert(sizeof(_Tp) == sizeof(_Up), "can be compared with memcmp");
+      97              : #endif
+      98              : #ifdef __cpp_lib_is_constant_evaluated
+      99              :       if (std::is_constant_evaluated())
+     100              :         {
+     101              :           for(; __num > 0; ++__first1, ++__first2, --__num)
+     102              :             if (*__first1 != *__first2)
+     103              :               return *__first1 < *__first2 ? -1 : 1;
+     104              :           return 0;
+     105              :         }
+     106              :       else
+     107              : #endif
+     108           44 :         return __builtin_memcmp(__first1, __first2, sizeof(_Tp) * __num);
+     109              :     }
+     110              : 
+     111              : #if __cplusplus < 201103L
+     112              :   // See http://gcc.gnu.org/ml/libstdc++/2004-08/msg00167.html: in a
+     113              :   // nutshell, we are partially implementing the resolution of DR 187,
+     114              :   // when it's safe, i.e., the value_types are equal.
+     115              :   template<bool _BoolType>
+     116              :     struct __iter_swap
+     117              :     {
+     118              :       template<typename _ForwardIterator1, typename _ForwardIterator2>
+     119              :         static void
+     120              :         iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b)
+     121              :         {
+     122              :           typedef typename iterator_traits<_ForwardIterator1>::value_type
+     123              :             _ValueType1;
+     124              :           _ValueType1 __tmp = *__a;
+     125              :           *__a = *__b;
+     126              :           *__b = __tmp;
+     127              :         }
+     128              :     };
+     129              : 
+     130              :   template<>
+     131              :     struct __iter_swap<true>
+     132              :     {
+     133              :       template<typename _ForwardIterator1, typename _ForwardIterator2>
+     134              :         static void
+     135              :         iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b)
+     136              :         {
+     137              :           swap(*__a, *__b);
+     138              :         }
+     139              :     };
+     140              : #endif // C++03
+     141              : 
+     142              :   /**
+     143              :    *  @brief Swaps the contents of two iterators.
+     144              :    *  @ingroup mutating_algorithms
+     145              :    *  @param  __a  An iterator.
+     146              :    *  @param  __b  Another iterator.
+     147              :    *  @return   Nothing.
+     148              :    *
+     149              :    *  This function swaps the values pointed to by two iterators, not the
+     150              :    *  iterators themselves.
+     151              :   */
+     152              :   template<typename _ForwardIterator1, typename _ForwardIterator2>
+     153              :     _GLIBCXX20_CONSTEXPR
+     154              :     inline void
+     155        87146 :     iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b)
+     156              :     {
+     157              :       // concept requirements
+     158              :       __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
+     159              :                                   _ForwardIterator1>)
+     160              :       __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
+     161              :                                   _ForwardIterator2>)
+     162              : 
+     163              : #if __cplusplus < 201103L
+     164              :       typedef typename iterator_traits<_ForwardIterator1>::value_type
+     165              :         _ValueType1;
+     166              :       typedef typename iterator_traits<_ForwardIterator2>::value_type
+     167              :         _ValueType2;
+     168              : 
+     169              :       __glibcxx_function_requires(_ConvertibleConcept<_ValueType1,
+     170              :                                   _ValueType2>)
+     171              :       __glibcxx_function_requires(_ConvertibleConcept<_ValueType2,
+     172              :                                   _ValueType1>)
+     173              : 
+     174              :       typedef typename iterator_traits<_ForwardIterator1>::reference
+     175              :         _ReferenceType1;
+     176              :       typedef typename iterator_traits<_ForwardIterator2>::reference
+     177              :         _ReferenceType2;
+     178              :       std::__iter_swap<__are_same<_ValueType1, _ValueType2>::__value
+     179              :         && __are_same<_ValueType1&, _ReferenceType1>::__value
+     180              :         && __are_same<_ValueType2&, _ReferenceType2>::__value>::
+     181              :         iter_swap(__a, __b);
+     182              : #else
+     183              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     184              :       // 187. iter_swap underspecified
+     185        87146 :       swap(*__a, *__b);
+     186              : #endif
+     187        87146 :     }
+     188              : 
+     189              :   /**
+     190              :    *  @brief Swap the elements of two sequences.
+     191              :    *  @ingroup mutating_algorithms
+     192              :    *  @param  __first1  A forward iterator.
+     193              :    *  @param  __last1   A forward iterator.
+     194              :    *  @param  __first2  A forward iterator.
+     195              :    *  @return   An iterator equal to @p first2+(last1-first1).
+     196              :    *
+     197              :    *  Swaps each element in the range @p [first1,last1) with the
+     198              :    *  corresponding element in the range @p [first2,(last1-first1)).
+     199              :    *  The ranges must not overlap.
+     200              :   */
+     201              :   template<typename _ForwardIterator1, typename _ForwardIterator2>
+     202              :     _GLIBCXX20_CONSTEXPR
+     203              :     _ForwardIterator2
+     204            0 :     swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+     205              :                 _ForwardIterator2 __first2)
+     206              :     {
+     207              :       // concept requirements
+     208              :       __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
+     209              :                                   _ForwardIterator1>)
+     210              :       __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
+     211              :                                   _ForwardIterator2>)
+     212              :       __glibcxx_requires_valid_range(__first1, __last1);
+     213              : 
+     214            0 :       for (; __first1 != __last1; ++__first1, (void)++__first2)
+     215            0 :         std::iter_swap(__first1, __first2);
+     216            0 :       return __first2;
+     217              :     }
+     218              : 
+     219              :   /**
+     220              :    *  @brief This does what you think it does.
+     221              :    *  @ingroup sorting_algorithms
+     222              :    *  @param  __a  A thing of arbitrary type.
+     223              :    *  @param  __b  Another thing of arbitrary type.
+     224              :    *  @return   The lesser of the parameters.
+     225              :    *
+     226              :    *  This is the simple classic generic implementation.  It will work on
+     227              :    *  temporary expressions, since they are only evaluated once, unlike a
+     228              :    *  preprocessor macro.
+     229              :   */
+     230              :   template<typename _Tp>
+     231              :     _GLIBCXX14_CONSTEXPR
+     232              :     inline const _Tp&
+     233    216077218 :     min(const _Tp& __a, const _Tp& __b)
+     234              :     {
+     235              :       // concept requirements
+     236              :       __glibcxx_function_requires(_LessThanComparableConcept<_Tp>)
+     237              :       //return __b < __a ? __b : __a;
+     238    216077218 :       if (__b < __a)
+     239        20152 :         return __b;
+     240    216057066 :       return __a;
+     241              :     }
+     242              : 
+     243              :   /**
+     244              :    *  @brief This does what you think it does.
+     245              :    *  @ingroup sorting_algorithms
+     246              :    *  @param  __a  A thing of arbitrary type.
+     247              :    *  @param  __b  Another thing of arbitrary type.
+     248              :    *  @return   The greater of the parameters.
+     249              :    *
+     250              :    *  This is the simple classic generic implementation.  It will work on
+     251              :    *  temporary expressions, since they are only evaluated once, unlike a
+     252              :    *  preprocessor macro.
+     253              :   */
+     254              :   template<typename _Tp>
+     255              :     _GLIBCXX14_CONSTEXPR
+     256              :     inline const _Tp&
+     257    106551826 :     max(const _Tp& __a, const _Tp& __b)
+     258              :     {
+     259              :       // concept requirements
+     260              :       __glibcxx_function_requires(_LessThanComparableConcept<_Tp>)
+     261              :       //return  __a < __b ? __b : __a;
+     262    106551826 :       if (__a < __b)
+     263     37402074 :         return __b;
+     264     69149752 :       return __a;
+     265              :     }
+     266              : 
+     267              :   /**
+     268              :    *  @brief This does what you think it does.
+     269              :    *  @ingroup sorting_algorithms
+     270              :    *  @param  __a  A thing of arbitrary type.
+     271              :    *  @param  __b  Another thing of arbitrary type.
+     272              :    *  @param  __comp  A @link comparison_functors comparison functor@endlink.
+     273              :    *  @return   The lesser of the parameters.
+     274              :    *
+     275              :    *  This will work on temporary expressions, since they are only evaluated
+     276              :    *  once, unlike a preprocessor macro.
+     277              :   */
+     278              :   template<typename _Tp, typename _Compare>
+     279              :     _GLIBCXX14_CONSTEXPR
+     280              :     inline const _Tp&
+     281              :     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
+     282              :     {
+     283              :       //return __comp(__b, __a) ? __b : __a;
+     284              :       if (__comp(__b, __a))
+     285              :         return __b;
+     286              :       return __a;
+     287              :     }
+     288              : 
+     289              :   /**
+     290              :    *  @brief This does what you think it does.
+     291              :    *  @ingroup sorting_algorithms
+     292              :    *  @param  __a  A thing of arbitrary type.
+     293              :    *  @param  __b  Another thing of arbitrary type.
+     294              :    *  @param  __comp  A @link comparison_functors comparison functor@endlink.
+     295              :    *  @return   The greater of the parameters.
+     296              :    *
+     297              :    *  This will work on temporary expressions, since they are only evaluated
+     298              :    *  once, unlike a preprocessor macro.
+     299              :   */
+     300              :   template<typename _Tp, typename _Compare>
+     301              :     _GLIBCXX14_CONSTEXPR
+     302              :     inline const _Tp&
+     303              :     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
+     304              :     {
+     305              :       //return __comp(__a, __b) ? __b : __a;
+     306              :       if (__comp(__a, __b))
+     307              :         return __b;
+     308              :       return __a;
+     309              :     }
+     310              : 
+     311              :   // Fallback implementation of the function in bits/stl_iterator.h used to
+     312              :   // remove the __normal_iterator wrapper. See copy, fill, ...
+     313              :   template<typename _Iterator>
+     314              :     _GLIBCXX20_CONSTEXPR
+     315              :     inline _Iterator
+     316    641112812 :     __niter_base(_Iterator __it)
+     317              :     _GLIBCXX_NOEXCEPT_IF(std::is_nothrow_copy_constructible<_Iterator>::value)
+     318    641112812 :     { return __it; }
+     319              : 
+     320              :   template<typename _Ite, typename _Seq>
+     321              :     _Ite
+     322              :     __niter_base(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq,
+     323              :                  std::random_access_iterator_tag>&);
+     324              : 
+     325              :   // Reverse the __niter_base transformation to get a
+     326              :   // __normal_iterator back again (this assumes that __normal_iterator
+     327              :   // is only used to wrap random access iterators, like pointers).
+     328              :   template<typename _From, typename _To>
+     329              :     _GLIBCXX20_CONSTEXPR
+     330              :     inline _From
+     331        14646 :     __niter_wrap(_From __from, _To __res)
+     332        14646 :     { return __from + (__res - std::__niter_base(__from)); }
+     333              : 
+     334              :   // No need to wrap, iterator already has the right type.
+     335              :   template<typename _Iterator>
+     336              :     _GLIBCXX20_CONSTEXPR
+     337              :     inline _Iterator
+     338       455158 :     __niter_wrap(const _Iterator&, _Iterator __res)
+     339       455158 :     { return __res; }
+     340              : 
+     341              :   // All of these auxiliary structs serve two purposes.  (1) Replace
+     342              :   // calls to copy with memmove whenever possible.  (Memmove, not memcpy,
+     343              :   // because the input and output ranges are permitted to overlap.)
+     344              :   // (2) If we're using random access iterators, then write the loop as
+     345              :   // a for loop with an explicit count.
+     346              : 
+     347              :   template<bool _IsMove, bool _IsSimple, typename _Category>
+     348              :     struct __copy_move
+     349              :     {
+     350              :       template<typename _II, typename _OI>
+     351              :         _GLIBCXX20_CONSTEXPR
+     352              :         static _OI
+     353              :         __copy_m(_II __first, _II __last, _OI __result)
+     354              :         {
+     355              :           for (; __first != __last; ++__result, (void)++__first)
+     356              :             *__result = *__first;
+     357              :           return __result;
+     358              :         }
+     359              :     };
+     360              : 
+     361              : #if __cplusplus >= 201103L
+     362              :   template<typename _Category>
+     363              :     struct __copy_move<true, false, _Category>
+     364              :     {
+     365              :       template<typename _II, typename _OI>
+     366              :         _GLIBCXX20_CONSTEXPR
+     367              :         static _OI
+     368              :         __copy_m(_II __first, _II __last, _OI __result)
+     369              :         {
+     370              :           for (; __first != __last; ++__result, (void)++__first)
+     371              :             *__result = std::move(*__first);
+     372              :           return __result;
+     373              :         }
+     374              :     };
+     375              : #endif
+     376              : 
+     377              :   template<>
+     378              :     struct __copy_move<false, false, random_access_iterator_tag>
+     379              :     {
+     380              :       template<typename _II, typename _OI>
+     381              :         _GLIBCXX20_CONSTEXPR
+     382              :         static _OI
+     383         3824 :         __copy_m(_II __first, _II __last, _OI __result)
+     384              :         {
+     385              :           typedef typename iterator_traits<_II>::difference_type _Distance;
+     386        16470 :           for(_Distance __n = __last - __first; __n > 0; --__n)
+     387              :             {
+     388        12646 :               *__result = *__first;
+     389        12646 :               ++__first;
+     390        12646 :               ++__result;
+     391              :             }
+     392         3824 :           return __result;
+     393              :         }
+     394              : 
+     395              :       template<typename _Tp, typename _Up>
+     396              :         static void
+     397       402458 :         __assign_one(_Tp* __to, _Up* __from)
+     398       402458 :         { *__to = *__from; }
+     399              :     };
+     400              : 
+     401              : #if __cplusplus >= 201103L
+     402              :   template<>
+     403              :     struct __copy_move<true, false, random_access_iterator_tag>
+     404              :     {
+     405              :       template<typename _II, typename _OI>
+     406              :         _GLIBCXX20_CONSTEXPR
+     407              :         static _OI
+     408         5688 :         __copy_m(_II __first, _II __last, _OI __result)
+     409              :         {
+     410              :           typedef typename iterator_traits<_II>::difference_type _Distance;
+     411        83316 :           for(_Distance __n = __last - __first; __n > 0; --__n)
+     412              :             {
+     413        77628 :               *__result = std::move(*__first);
+     414        77628 :               ++__first;
+     415        77628 :               ++__result;
+     416              :             }
+     417         5688 :           return __result;
+     418              :         }
+     419              : 
+     420              :       template<typename _Tp, typename _Up>
+     421              :         static void
+     422          756 :         __assign_one(_Tp* __to, _Up* __from)
+     423          756 :         { *__to = std::move(*__from); }
+     424              :     };
+     425              : #endif
+     426              : 
+     427              :   template<bool _IsMove>
+     428              :     struct __copy_move<_IsMove, true, random_access_iterator_tag>
+     429              :     {
+     430              :       template<typename _Tp, typename _Up>
+     431              :         _GLIBCXX20_CONSTEXPR
+     432              :         static _Up*
+     433       457090 :         __copy_m(_Tp* __first, _Tp* __last, _Up* __result)
+     434              :         {
+     435       457090 :           const ptrdiff_t _Num = __last - __first;
+     436       457090 :           if (__builtin_expect(_Num > 1, true))
+     437        52302 :             __builtin_memmove(__result, __first, sizeof(_Tp) * _Num);
+     438       404788 :           else if (_Num == 1)
+     439              :             std::__copy_move<_IsMove, false, random_access_iterator_tag>::
+     440       402934 :               __assign_one(__result, __first);
+     441       457090 :           return __result + _Num;
+     442              :         }
+     443              :     };
+     444              : 
+     445              : _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
+     446              : 
+     447              :   template<typename _Tp, typename _Ref, typename _Ptr>
+     448              :     struct _Deque_iterator;
+     449              : 
+     450              :   struct _Bit_iterator;
+     451              : 
+     452              : _GLIBCXX_END_NAMESPACE_CONTAINER
+     453              : 
+     454              : #if _GLIBCXX_HOSTED
+     455              :   // Helpers for streambuf iterators (either istream or ostream).
+     456              :   // NB: avoid including <iosfwd>, relatively large.
+     457              :   template<typename _CharT>
+     458              :     struct char_traits;
+     459              : 
+     460              :   template<typename _CharT, typename _Traits>
+     461              :     class istreambuf_iterator;
+     462              : 
+     463              :   template<typename _CharT, typename _Traits>
+     464              :     class ostreambuf_iterator;
+     465              : 
+     466              :   template<bool _IsMove, typename _CharT>
+     467              :     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+     468              :              ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type
+     469              :     __copy_move_a2(_CharT*, _CharT*,
+     470              :                    ostreambuf_iterator<_CharT, char_traits<_CharT> >);
+     471              : 
+     472              :   template<bool _IsMove, typename _CharT>
+     473              :     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+     474              :              ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type
+     475              :     __copy_move_a2(const _CharT*, const _CharT*,
+     476              :                    ostreambuf_iterator<_CharT, char_traits<_CharT> >);
+     477              : 
+     478              :   template<bool _IsMove, typename _CharT>
+     479              :     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+     480              :                                     _CharT*>::__type
+     481              :     __copy_move_a2(istreambuf_iterator<_CharT, char_traits<_CharT> >,
+     482              :                    istreambuf_iterator<_CharT, char_traits<_CharT> >, _CharT*);
+     483              : 
+     484              :   template<bool _IsMove, typename _CharT>
+     485              :     typename __gnu_cxx::__enable_if<
+     486              :       __is_char<_CharT>::__value,
+     487              :       _GLIBCXX_STD_C::_Deque_iterator<_CharT, _CharT&, _CharT*> >::__type
+     488              :     __copy_move_a2(
+     489              :         istreambuf_iterator<_CharT, char_traits<_CharT> >,
+     490              :         istreambuf_iterator<_CharT, char_traits<_CharT> >,
+     491              :         _GLIBCXX_STD_C::_Deque_iterator<_CharT, _CharT&, _CharT*>);
+     492              : #endif // HOSTED
+     493              : 
+     494              :   template<bool _IsMove, typename _II, typename _OI>
+     495              :     _GLIBCXX20_CONSTEXPR
+     496              :     inline _OI
+     497       466602 :     __copy_move_a2(_II __first, _II __last, _OI __result)
+     498              :     {
+     499              :       typedef typename iterator_traits<_II>::iterator_category _Category;
+     500              : #ifdef __cpp_lib_is_constant_evaluated
+     501              :       if (std::is_constant_evaluated())
+     502              :         return std::__copy_move<_IsMove, false, _Category>::
+     503              :           __copy_m(__first, __last, __result);
+     504              : #endif
+     505              :       return std::__copy_move<_IsMove, __memcpyable<_OI, _II>::__value,
+     506       466602 :                               _Category>::__copy_m(__first, __last, __result);
+     507              :     }
+     508              : 
+     509              :   template<bool _IsMove,
+     510              :            typename _Tp, typename _Ref, typename _Ptr, typename _OI>
+     511              :     _OI
+     512              :     __copy_move_a1(_GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr>,
+     513              :                    _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr>,
+     514              :                    _OI);
+     515              : 
+     516              :   template<bool _IsMove,
+     517              :            typename _ITp, typename _IRef, typename _IPtr, typename _OTp>
+     518              :     _GLIBCXX_STD_C::_Deque_iterator<_OTp, _OTp&, _OTp*>
+     519              :     __copy_move_a1(_GLIBCXX_STD_C::_Deque_iterator<_ITp, _IRef, _IPtr>,
+     520              :                    _GLIBCXX_STD_C::_Deque_iterator<_ITp, _IRef, _IPtr>,
+     521              :                    _GLIBCXX_STD_C::_Deque_iterator<_OTp, _OTp&, _OTp*>);
+     522              : 
+     523              :   template<bool _IsMove, typename _II, typename _Tp>
+     524              :     typename __gnu_cxx::__enable_if<
+     525              :       __is_random_access_iter<_II>::__value,
+     526              :       _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type
+     527              :     __copy_move_a1(_II, _II, _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*>);
+     528              : 
+     529              :   template<bool _IsMove, typename _II, typename _OI>
+     530              :     _GLIBCXX20_CONSTEXPR
+     531              :     inline _OI
+     532       466602 :     __copy_move_a1(_II __first, _II __last, _OI __result)
+     533       466602 :     { return std::__copy_move_a2<_IsMove>(__first, __last, __result); }
+     534              : 
+     535              :   template<bool _IsMove, typename _II, typename _OI>
+     536              :     _GLIBCXX20_CONSTEXPR
+     537              :     inline _OI
+     538       466602 :     __copy_move_a(_II __first, _II __last, _OI __result)
+     539              :     {
+     540       466602 :       return std::__niter_wrap(__result,
+     541              :                 std::__copy_move_a1<_IsMove>(std::__niter_base(__first),
+     542              :                                              std::__niter_base(__last),
+     543       466602 :                                              std::__niter_base(__result)));
+     544              :     }
+     545              : 
+     546              :   template<bool _IsMove,
+     547              :            typename _Ite, typename _Seq, typename _Cat, typename _OI>
+     548              :     _OI
+     549              :     __copy_move_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&,
+     550              :                   const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&,
+     551              :                   _OI);
+     552              : 
+     553              :   template<bool _IsMove,
+     554              :            typename _II, typename _Ite, typename _Seq, typename _Cat>
+     555              :     __gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>
+     556              :     __copy_move_a(_II, _II,
+     557              :                   const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&);
+     558              : 
+     559              :   template<bool _IsMove,
+     560              :            typename _IIte, typename _ISeq, typename _ICat,
+     561              :            typename _OIte, typename _OSeq, typename _OCat>
+     562              :     ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat>
+     563              :     __copy_move_a(const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&,
+     564              :                   const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&,
+     565              :                   const ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat>&);
+     566              : 
+     567              :   template<typename _InputIterator, typename _Size, typename _OutputIterator>
+     568              :     _GLIBCXX20_CONSTEXPR
+     569              :     _OutputIterator
+     570              :     __copy_n_a(_InputIterator __first, _Size __n, _OutputIterator __result,
+     571              :                bool)
+     572              :     {
+     573              :       if (__n > 0)
+     574              :         {
+     575              :           while (true)
+     576              :             {
+     577              :               *__result = *__first;
+     578              :               ++__result;
+     579              :               if (--__n > 0)
+     580              :                 ++__first;
+     581              :               else
+     582              :                 break;
+     583              :             }
+     584              :         }
+     585              :       return __result;
+     586              :     }
+     587              : 
+     588              : #if _GLIBCXX_HOSTED
+     589              :   template<typename _CharT, typename _Size>
+     590              :     typename __gnu_cxx::__enable_if<
+     591              :       __is_char<_CharT>::__value, _CharT*>::__type
+     592              :     __copy_n_a(istreambuf_iterator<_CharT, char_traits<_CharT> >,
+     593              :                _Size, _CharT*, bool);
+     594              : 
+     595              :   template<typename _CharT, typename _Size>
+     596              :     typename __gnu_cxx::__enable_if<
+     597              :       __is_char<_CharT>::__value,
+     598              :       _GLIBCXX_STD_C::_Deque_iterator<_CharT, _CharT&, _CharT*> >::__type
+     599              :     __copy_n_a(istreambuf_iterator<_CharT, char_traits<_CharT> >, _Size,
+     600              :                _GLIBCXX_STD_C::_Deque_iterator<_CharT, _CharT&, _CharT*>,
+     601              :                bool);
+     602              : #endif
+     603              : 
+     604              :   /**
+     605              :    *  @brief Copies the range [first,last) into result.
+     606              :    *  @ingroup mutating_algorithms
+     607              :    *  @param  __first  An input iterator.
+     608              :    *  @param  __last   An input iterator.
+     609              :    *  @param  __result An output iterator.
+     610              :    *  @return   result + (last - first)
+     611              :    *
+     612              :    *  This inline function will boil down to a call to @c memmove whenever
+     613              :    *  possible.  Failing that, if random access iterators are passed, then the
+     614              :    *  loop count will be known (and therefore a candidate for compiler
+     615              :    *  optimizations such as unrolling).  Result may not be contained within
+     616              :    *  [first,last); the copy_backward function should be used instead.
+     617              :    *
+     618              :    *  Note that the end of the output range is permitted to be contained
+     619              :    *  within [first,last).
+     620              :   */
+     621              :   template<typename _II, typename _OI>
+     622              :     _GLIBCXX20_CONSTEXPR
+     623              :     inline _OI
+     624       455518 :     copy(_II __first, _II __last, _OI __result)
+     625              :     {
+     626              :       // concept requirements
+     627              :       __glibcxx_function_requires(_InputIteratorConcept<_II>)
+     628              :       __glibcxx_function_requires(_OutputIteratorConcept<_OI,
+     629              :             typename iterator_traits<_II>::reference>)
+     630              :       __glibcxx_requires_can_increment_range(__first, __last, __result);
+     631              : 
+     632              :       return std::__copy_move_a<__is_move_iterator<_II>::__value>
+     633       455518 :              (std::__miter_base(__first), std::__miter_base(__last), __result);
+     634              :     }
+     635              : 
+     636              : #if __cplusplus >= 201103L
+     637              :   /**
+     638              :    *  @brief Moves the range [first,last) into result.
+     639              :    *  @ingroup mutating_algorithms
+     640              :    *  @param  __first  An input iterator.
+     641              :    *  @param  __last   An input iterator.
+     642              :    *  @param  __result An output iterator.
+     643              :    *  @return   result + (last - first)
+     644              :    *
+     645              :    *  This inline function will boil down to a call to @c memmove whenever
+     646              :    *  possible.  Failing that, if random access iterators are passed, then the
+     647              :    *  loop count will be known (and therefore a candidate for compiler
+     648              :    *  optimizations such as unrolling).  Result may not be contained within
+     649              :    *  [first,last); the move_backward function should be used instead.
+     650              :    *
+     651              :    *  Note that the end of the output range is permitted to be contained
+     652              :    *  within [first,last).
+     653              :   */
+     654              :   template<typename _II, typename _OI>
+     655              :     _GLIBCXX20_CONSTEXPR
+     656              :     inline _OI
+     657        11084 :     move(_II __first, _II __last, _OI __result)
+     658              :     {
+     659              :       // concept requirements
+     660              :       __glibcxx_function_requires(_InputIteratorConcept<_II>)
+     661              :       __glibcxx_function_requires(_OutputIteratorConcept<_OI,
+     662              :             typename iterator_traits<_II>::value_type&&>)
+     663              :       __glibcxx_requires_can_increment_range(__first, __last, __result);
+     664              : 
+     665        11084 :       return std::__copy_move_a<true>(std::__miter_base(__first),
+     666        11084 :                                       std::__miter_base(__last), __result);
+     667              :     }
+     668              : 
+     669              : #define _GLIBCXX_MOVE3(_Tp, _Up, _Vp) std::move(_Tp, _Up, _Vp)
+     670              : #else
+     671              : #define _GLIBCXX_MOVE3(_Tp, _Up, _Vp) std::copy(_Tp, _Up, _Vp)
+     672              : #endif
+     673              : 
+     674              :   template<bool _IsMove, bool _IsSimple, typename _Category>
+     675              :     struct __copy_move_backward
+     676              :     {
+     677              :       template<typename _BI1, typename _BI2>
+     678              :         _GLIBCXX20_CONSTEXPR
+     679              :         static _BI2
+     680              :         __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
+     681              :         {
+     682              :           while (__first != __last)
+     683              :             *--__result = *--__last;
+     684              :           return __result;
+     685              :         }
+     686              :     };
+     687              : 
+     688              : #if __cplusplus >= 201103L
+     689              :   template<typename _Category>
+     690              :     struct __copy_move_backward<true, false, _Category>
+     691              :     {
+     692              :       template<typename _BI1, typename _BI2>
+     693              :         _GLIBCXX20_CONSTEXPR
+     694              :         static _BI2
+     695              :         __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
+     696              :         {
+     697              :           while (__first != __last)
+     698              :             *--__result = std::move(*--__last);
+     699              :           return __result;
+     700              :         }
+     701              :     };
+     702              : #endif
+     703              : 
+     704              :   template<>
+     705              :     struct __copy_move_backward<false, false, random_access_iterator_tag>
+     706              :     {
+     707              :       template<typename _BI1, typename _BI2>
+     708              :         _GLIBCXX20_CONSTEXPR
+     709              :         static _BI2
+     710              :         __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
+     711              :         {
+     712              :           typename iterator_traits<_BI1>::difference_type
+     713              :             __n = __last - __first;
+     714              :           for (; __n > 0; --__n)
+     715              :             *--__result = *--__last;
+     716              :           return __result;
+     717              :         }
+     718              :     };
+     719              : 
+     720              : #if __cplusplus >= 201103L
+     721              :   template<>
+     722              :     struct __copy_move_backward<true, false, random_access_iterator_tag>
+     723              :     {
+     724              :       template<typename _BI1, typename _BI2>
+     725              :         _GLIBCXX20_CONSTEXPR
+     726              :         static _BI2
+     727          460 :         __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
+     728              :         {
+     729              :           typename iterator_traits<_BI1>::difference_type
+     730          460 :             __n = __last - __first;
+     731         2278 :           for (; __n > 0; --__n)
+     732         1818 :             *--__result = std::move(*--__last);
+     733          460 :           return __result;
+     734              :         }
+     735              :     };
+     736              : #endif
+     737              : 
+     738              :   template<bool _IsMove>
+     739              :     struct __copy_move_backward<_IsMove, true, random_access_iterator_tag>
+     740              :     {
+     741              :       template<typename _Tp, typename _Up>
+     742              :         _GLIBCXX20_CONSTEXPR
+     743              :         static _Up*
+     744          928 :         __copy_move_b(_Tp* __first, _Tp* __last, _Up* __result)
+     745              :         {
+     746          928 :           const ptrdiff_t _Num = __last - __first;
+     747          928 :           if (__builtin_expect(_Num > 1, true))
+     748          596 :             __builtin_memmove(__result - _Num, __first, sizeof(_Tp) * _Num);
+     749          332 :           else if (_Num == 1)
+     750              :             std::__copy_move<_IsMove, false, random_access_iterator_tag>::
+     751          280 :               __assign_one(__result - 1, __first);
+     752          928 :           return __result - _Num;
+     753              :         }
+     754              :     };
+     755              : 
+     756              :   template<bool _IsMove, typename _BI1, typename _BI2>
+     757              :     _GLIBCXX20_CONSTEXPR
+     758              :     inline _BI2
+     759         1388 :     __copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result)
+     760              :     {
+     761              :       typedef typename iterator_traits<_BI1>::iterator_category _Category;
+     762              : #ifdef __cpp_lib_is_constant_evaluated
+     763              :       if (std::is_constant_evaluated())
+     764              :         return std::__copy_move_backward<_IsMove, false, _Category>::
+     765              :           __copy_move_b(__first, __last, __result);
+     766              : #endif
+     767              :       return std::__copy_move_backward<_IsMove,
+     768              :                                        __memcpyable<_BI2, _BI1>::__value,
+     769         1388 :                                        _Category>::__copy_move_b(__first,
+     770              :                                                                  __last,
+     771         1388 :                                                                  __result);
+     772              :     }
+     773              : 
+     774              :   template<bool _IsMove, typename _BI1, typename _BI2>
+     775              :     _GLIBCXX20_CONSTEXPR
+     776              :     inline _BI2
+     777         1388 :     __copy_move_backward_a1(_BI1 __first, _BI1 __last, _BI2 __result)
+     778         1388 :     { return std::__copy_move_backward_a2<_IsMove>(__first, __last, __result); }
+     779              : 
+     780              :   template<bool _IsMove,
+     781              :            typename _Tp, typename _Ref, typename _Ptr, typename _OI>
+     782              :     _OI
+     783              :     __copy_move_backward_a1(_GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr>,
+     784              :                             _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr>,
+     785              :                             _OI);
+     786              : 
+     787              :   template<bool _IsMove,
+     788              :            typename _ITp, typename _IRef, typename _IPtr, typename _OTp>
+     789              :     _GLIBCXX_STD_C::_Deque_iterator<_OTp, _OTp&, _OTp*>
+     790              :     __copy_move_backward_a1(
+     791              :                         _GLIBCXX_STD_C::_Deque_iterator<_ITp, _IRef, _IPtr>,
+     792              :                         _GLIBCXX_STD_C::_Deque_iterator<_ITp, _IRef, _IPtr>,
+     793              :                         _GLIBCXX_STD_C::_Deque_iterator<_OTp, _OTp&, _OTp*>);
+     794              : 
+     795              :   template<bool _IsMove, typename _II, typename _Tp>
+     796              :     typename __gnu_cxx::__enable_if<
+     797              :       __is_random_access_iter<_II>::__value,
+     798              :       _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type
+     799              :     __copy_move_backward_a1(_II, _II,
+     800              :                             _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*>);
+     801              : 
+     802              :   template<bool _IsMove, typename _II, typename _OI>
+     803              :     _GLIBCXX20_CONSTEXPR
+     804              :     inline _OI
+     805         1388 :     __copy_move_backward_a(_II __first, _II __last, _OI __result)
+     806              :     {
+     807         1388 :       return std::__niter_wrap(__result,
+     808              :                 std::__copy_move_backward_a1<_IsMove>
+     809              :                   (std::__niter_base(__first), std::__niter_base(__last),
+     810         1388 :                    std::__niter_base(__result)));
+     811              :     }
+     812              : 
+     813              :   template<bool _IsMove,
+     814              :            typename _Ite, typename _Seq, typename _Cat, typename _OI>
+     815              :     _OI
+     816              :     __copy_move_backward_a(
+     817              :                 const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&,
+     818              :                 const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&,
+     819              :                 _OI);
+     820              : 
+     821              :   template<bool _IsMove,
+     822              :            typename _II, typename _Ite, typename _Seq, typename _Cat>
+     823              :     __gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>
+     824              :     __copy_move_backward_a(_II, _II,
+     825              :                 const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&);
+     826              : 
+     827              :   template<bool _IsMove,
+     828              :            typename _IIte, typename _ISeq, typename _ICat,
+     829              :            typename _OIte, typename _OSeq, typename _OCat>
+     830              :     ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat>
+     831              :     __copy_move_backward_a(
+     832              :                 const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&,
+     833              :                 const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&,
+     834              :                 const ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat>&);
+     835              : 
+     836              :   /**
+     837              :    *  @brief Copies the range [first,last) into result.
+     838              :    *  @ingroup mutating_algorithms
+     839              :    *  @param  __first  A bidirectional iterator.
+     840              :    *  @param  __last   A bidirectional iterator.
+     841              :    *  @param  __result A bidirectional iterator.
+     842              :    *  @return   result - (last - first)
+     843              :    *
+     844              :    *  The function has the same effect as copy, but starts at the end of the
+     845              :    *  range and works its way to the start, returning the start of the result.
+     846              :    *  This inline function will boil down to a call to @c memmove whenever
+     847              :    *  possible.  Failing that, if random access iterators are passed, then the
+     848              :    *  loop count will be known (and therefore a candidate for compiler
+     849              :    *  optimizations such as unrolling).
+     850              :    *
+     851              :    *  Result may not be in the range (first,last].  Use copy instead.  Note
+     852              :    *  that the start of the output range may overlap [first,last).
+     853              :   */
+     854              :   template<typename _BI1, typename _BI2>
+     855              :     _GLIBCXX20_CONSTEXPR
+     856              :     inline _BI2
+     857            0 :     copy_backward(_BI1 __first, _BI1 __last, _BI2 __result)
+     858              :     {
+     859              :       // concept requirements
+     860              :       __glibcxx_function_requires(_BidirectionalIteratorConcept<_BI1>)
+     861              :       __glibcxx_function_requires(_Mutable_BidirectionalIteratorConcept<_BI2>)
+     862              :       __glibcxx_function_requires(_OutputIteratorConcept<_BI2,
+     863              :             typename iterator_traits<_BI1>::reference>)
+     864              :       __glibcxx_requires_can_decrement_range(__first, __last, __result);
+     865              : 
+     866              :       return std::__copy_move_backward_a<__is_move_iterator<_BI1>::__value>
+     867            0 :              (std::__miter_base(__first), std::__miter_base(__last), __result);
+     868              :     }
+     869              : 
+     870              : #if __cplusplus >= 201103L
+     871              :   /**
+     872              :    *  @brief Moves the range [first,last) into result.
+     873              :    *  @ingroup mutating_algorithms
+     874              :    *  @param  __first  A bidirectional iterator.
+     875              :    *  @param  __last   A bidirectional iterator.
+     876              :    *  @param  __result A bidirectional iterator.
+     877              :    *  @return   result - (last - first)
+     878              :    *
+     879              :    *  The function has the same effect as move, but starts at the end of the
+     880              :    *  range and works its way to the start, returning the start of the result.
+     881              :    *  This inline function will boil down to a call to @c memmove whenever
+     882              :    *  possible.  Failing that, if random access iterators are passed, then the
+     883              :    *  loop count will be known (and therefore a candidate for compiler
+     884              :    *  optimizations such as unrolling).
+     885              :    *
+     886              :    *  Result may not be in the range (first,last].  Use move instead.  Note
+     887              :    *  that the start of the output range may overlap [first,last).
+     888              :   */
+     889              :   template<typename _BI1, typename _BI2>
+     890              :     _GLIBCXX20_CONSTEXPR
+     891              :     inline _BI2
+     892         1388 :     move_backward(_BI1 __first, _BI1 __last, _BI2 __result)
+     893              :     {
+     894              :       // concept requirements
+     895              :       __glibcxx_function_requires(_BidirectionalIteratorConcept<_BI1>)
+     896              :       __glibcxx_function_requires(_Mutable_BidirectionalIteratorConcept<_BI2>)
+     897              :       __glibcxx_function_requires(_OutputIteratorConcept<_BI2,
+     898              :             typename iterator_traits<_BI1>::value_type&&>)
+     899              :       __glibcxx_requires_can_decrement_range(__first, __last, __result);
+     900              : 
+     901         1388 :       return std::__copy_move_backward_a<true>(std::__miter_base(__first),
+     902              :                                                std::__miter_base(__last),
+     903         1388 :                                                __result);
+     904              :     }
+     905              : 
+     906              : #define _GLIBCXX_MOVE_BACKWARD3(_Tp, _Up, _Vp) std::move_backward(_Tp, _Up, _Vp)
+     907              : #else
+     908              : #define _GLIBCXX_MOVE_BACKWARD3(_Tp, _Up, _Vp) std::copy_backward(_Tp, _Up, _Vp)
+     909              : #endif
+     910              : 
+     911              :   template<typename _ForwardIterator, typename _Tp>
+     912              :     _GLIBCXX20_CONSTEXPR
+     913              :     inline typename
+     914              :     __gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, void>::__type
+     915            0 :     __fill_a1(_ForwardIterator __first, _ForwardIterator __last,
+     916              :               const _Tp& __value)
+     917              :     {
+     918            0 :       for (; __first != __last; ++__first)
+     919            0 :         *__first = __value;
+     920            0 :     }
+     921              : 
+     922              :   template<typename _ForwardIterator, typename _Tp>
+     923              :     _GLIBCXX20_CONSTEXPR
+     924              :     inline typename
+     925              :     __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, void>::__type
+     926      2496136 :     __fill_a1(_ForwardIterator __first, _ForwardIterator __last,
+     927              :               const _Tp& __value)
+     928              :     {
+     929      2496136 :       const _Tp __tmp = __value;
+     930     19731234 :       for (; __first != __last; ++__first)
+     931     17235098 :         *__first = __tmp;
+     932      2496136 :     }
+     933              : 
+     934              :   // Specialization: for char types we can use memset.
+     935              :   template<typename _Tp>
+     936              :     _GLIBCXX20_CONSTEXPR
+     937              :     inline typename
+     938              :     __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, void>::__type
+     939              :     __fill_a1(_Tp* __first, _Tp* __last, const _Tp& __c)
+     940              :     {
+     941              :       const _Tp __tmp = __c;
+     942              : #if __cpp_lib_is_constant_evaluated
+     943              :       if (std::is_constant_evaluated())
+     944              :         {
+     945              :           for (; __first != __last; ++__first)
+     946              :             *__first = __tmp;
+     947              :           return;
+     948              :         }
+     949              : #endif
+     950              :       if (const size_t __len = __last - __first)
+     951              :         __builtin_memset(__first, static_cast<unsigned char>(__tmp), __len);
+     952              :     }
+     953              : 
+     954              :   template<typename _Ite, typename _Cont, typename _Tp>
+     955              :     _GLIBCXX20_CONSTEXPR
+     956              :     inline void
+     957            0 :     __fill_a1(::__gnu_cxx::__normal_iterator<_Ite, _Cont> __first,
+     958              :               ::__gnu_cxx::__normal_iterator<_Ite, _Cont> __last,
+     959              :               const _Tp& __value)
+     960            0 :     { std::__fill_a1(__first.base(), __last.base(), __value); }
+     961              : 
+     962              :   template<typename _Tp, typename _VTp>
+     963              :     void
+     964              :     __fill_a1(const _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*>&,
+     965              :               const _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Tp&, _Tp*>&,
+     966              :               const _VTp&);
+     967              : 
+     968              :   _GLIBCXX20_CONSTEXPR
+     969              :   void
+     970              :   __fill_a1(_GLIBCXX_STD_C::_Bit_iterator, _GLIBCXX_STD_C::_Bit_iterator,
+     971              :             const bool&);
+     972              : 
+     973              :   template<typename _FIte, typename _Tp>
+     974              :     _GLIBCXX20_CONSTEXPR
+     975              :     inline void
+     976      2496136 :     __fill_a(_FIte __first, _FIte __last, const _Tp& __value)
+     977      2496136 :     { std::__fill_a1(__first, __last, __value); }
+     978              : 
+     979              :   template<typename _Ite, typename _Seq, typename _Cat, typename _Tp>
+     980              :     void
+     981              :     __fill_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&,
+     982              :              const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&,
+     983              :              const _Tp&);
+     984              : 
+     985              :   /**
+     986              :    *  @brief Fills the range [first,last) with copies of value.
+     987              :    *  @ingroup mutating_algorithms
+     988              :    *  @param  __first  A forward iterator.
+     989              :    *  @param  __last   A forward iterator.
+     990              :    *  @param  __value  A reference-to-const of arbitrary type.
+     991              :    *  @return   Nothing.
+     992              :    *
+     993              :    *  This function fills a range with copies of the same value.  For char
+     994              :    *  types filling contiguous areas of memory, this becomes an inline call
+     995              :    *  to @c memset or @c wmemset.
+     996              :   */
+     997              :   template<typename _ForwardIterator, typename _Tp>
+     998              :     _GLIBCXX20_CONSTEXPR
+     999              :     inline void
+    1000            0 :     fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value)
+    1001              :     {
+    1002              :       // concept requirements
+    1003              :       __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
+    1004              :                                   _ForwardIterator>)
+    1005              :       __glibcxx_requires_valid_range(__first, __last);
+    1006              : 
+    1007            0 :       std::__fill_a(__first, __last, __value);
+    1008            0 :     }
+    1009              : 
+    1010              :   // Used by fill_n, generate_n, etc. to convert _Size to an integral type:
+    1011              :   inline _GLIBCXX_CONSTEXPR int
+    1012              :   __size_to_integer(int __n) { return __n; }
+    1013              :   inline _GLIBCXX_CONSTEXPR unsigned
+    1014              :   __size_to_integer(unsigned __n) { return __n; }
+    1015              :   inline _GLIBCXX_CONSTEXPR long
+    1016              :   __size_to_integer(long __n) { return __n; }
+    1017              :   inline _GLIBCXX_CONSTEXPR unsigned long
+    1018      2499522 :   __size_to_integer(unsigned long __n) { return __n; }
+    1019              :   inline _GLIBCXX_CONSTEXPR long long
+    1020              :   __size_to_integer(long long __n) { return __n; }
+    1021              :   inline _GLIBCXX_CONSTEXPR unsigned long long
+    1022              :   __size_to_integer(unsigned long long __n) { return __n; }
+    1023              : 
+    1024              : #if defined(__GLIBCXX_TYPE_INT_N_0)
+    1025              :   __extension__ inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_0
+    1026              :   __size_to_integer(__GLIBCXX_TYPE_INT_N_0 __n) { return __n; }
+    1027              :   __extension__ inline _GLIBCXX_CONSTEXPR unsigned __GLIBCXX_TYPE_INT_N_0
+    1028              :   __size_to_integer(unsigned __GLIBCXX_TYPE_INT_N_0 __n) { return __n; }
+    1029              : #endif
+    1030              : #if defined(__GLIBCXX_TYPE_INT_N_1)
+    1031              :   __extension__ inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_1
+    1032              :   __size_to_integer(__GLIBCXX_TYPE_INT_N_1 __n) { return __n; }
+    1033              :   __extension__ inline _GLIBCXX_CONSTEXPR unsigned __GLIBCXX_TYPE_INT_N_1
+    1034              :   __size_to_integer(unsigned __GLIBCXX_TYPE_INT_N_1 __n) { return __n; }
+    1035              : #endif
+    1036              : #if defined(__GLIBCXX_TYPE_INT_N_2)
+    1037              :   __extension__ inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_2
+    1038              :   __size_to_integer(__GLIBCXX_TYPE_INT_N_2 __n) { return __n; }
+    1039              :   __extension__ inline _GLIBCXX_CONSTEXPR unsigned __GLIBCXX_TYPE_INT_N_2
+    1040              :   __size_to_integer(unsigned __GLIBCXX_TYPE_INT_N_2 __n) { return __n; }
+    1041              : #endif
+    1042              : #if defined(__GLIBCXX_TYPE_INT_N_3)
+    1043              :   __extension__ inline _GLIBCXX_CONSTEXPR unsigned __GLIBCXX_TYPE_INT_N_3
+    1044              :   __size_to_integer(__GLIBCXX_TYPE_INT_N_3 __n) { return __n; }
+    1045              :   __extension__ inline _GLIBCXX_CONSTEXPR __GLIBCXX_TYPE_INT_N_3
+    1046              :   __size_to_integer(unsigned __GLIBCXX_TYPE_INT_N_3 __n) { return __n; }
+    1047              : #endif
+    1048              : 
+    1049              :   inline _GLIBCXX_CONSTEXPR long long
+    1050              :   __size_to_integer(float __n) { return (long long)__n; }
+    1051              :   inline _GLIBCXX_CONSTEXPR long long
+    1052              :   __size_to_integer(double __n) { return (long long)__n; }
+    1053              :   inline _GLIBCXX_CONSTEXPR long long
+    1054              :   __size_to_integer(long double __n) { return (long long)__n; }
+    1055              : #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128)
+    1056              :   __extension__ inline _GLIBCXX_CONSTEXPR long long
+    1057              :   __size_to_integer(__float128 __n) { return (long long)__n; }
+    1058              : #endif
+    1059              : 
+    1060              :   template<typename _OutputIterator, typename _Size, typename _Tp>
+    1061              :     _GLIBCXX20_CONSTEXPR
+    1062              :     inline typename
+    1063              :     __gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, _OutputIterator>::__type
+    1064              :     __fill_n_a1(_OutputIterator __first, _Size __n, const _Tp& __value)
+    1065              :     {
+    1066              :       for (; __n > 0; --__n, (void) ++__first)
+    1067              :         *__first = __value;
+    1068              :       return __first;
+    1069              :     }
+    1070              : 
+    1071              :   template<typename _OutputIterator, typename _Size, typename _Tp>
+    1072              :     _GLIBCXX20_CONSTEXPR
+    1073              :     inline typename
+    1074              :     __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, _OutputIterator>::__type
+    1075              :     __fill_n_a1(_OutputIterator __first, _Size __n, const _Tp& __value)
+    1076              :     {
+    1077              :       const _Tp __tmp = __value;
+    1078              :       for (; __n > 0; --__n, (void) ++__first)
+    1079              :         *__first = __tmp;
+    1080              :       return __first;
+    1081              :     }
+    1082              : 
+    1083              :   template<typename _Ite, typename _Seq, typename _Cat, typename _Size,
+    1084              :            typename _Tp>
+    1085              :     ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>
+    1086              :     __fill_n_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>& __first,
+    1087              :                _Size __n, const _Tp& __value,
+    1088              :                std::input_iterator_tag);
+    1089              : 
+    1090              :   template<typename _OutputIterator, typename _Size, typename _Tp>
+    1091              :     _GLIBCXX20_CONSTEXPR
+    1092              :     inline _OutputIterator
+    1093              :     __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value,
+    1094              :                std::output_iterator_tag)
+    1095              :     {
+    1096              : #if __cplusplus >= 201103L
+    1097              :       static_assert(is_integral<_Size>{}, "fill_n must pass integral size");
+    1098              : #endif
+    1099              :       return __fill_n_a1(__first, __n, __value);
+    1100              :     }
+    1101              : 
+    1102              :   template<typename _OutputIterator, typename _Size, typename _Tp>
+    1103              :     _GLIBCXX20_CONSTEXPR
+    1104              :     inline _OutputIterator
+    1105              :     __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value,
+    1106              :                std::input_iterator_tag)
+    1107              :     {
+    1108              : #if __cplusplus >= 201103L
+    1109              :       static_assert(is_integral<_Size>{}, "fill_n must pass integral size");
+    1110              : #endif
+    1111              :       return __fill_n_a1(__first, __n, __value);
+    1112              :     }
+    1113              : 
+    1114              :   template<typename _OutputIterator, typename _Size, typename _Tp>
+    1115              :     _GLIBCXX20_CONSTEXPR
+    1116              :     inline _OutputIterator
+    1117      2496282 :     __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value,
+    1118              :                std::random_access_iterator_tag)
+    1119              :     {
+    1120              : #if __cplusplus >= 201103L
+    1121              :       static_assert(is_integral<_Size>{}, "fill_n must pass integral size");
+    1122              : #endif
+    1123      2496282 :       if (__n <= 0)
+    1124          146 :         return __first;
+    1125              : 
+    1126              :       __glibcxx_requires_can_increment(__first, __n);
+    1127              : 
+    1128      2496136 :       std::__fill_a(__first, __first + __n, __value);
+    1129      2496136 :       return __first + __n;
+    1130              :     }
+    1131              : 
+    1132              :   /**
+    1133              :    *  @brief Fills the range [first,first+n) with copies of value.
+    1134              :    *  @ingroup mutating_algorithms
+    1135              :    *  @param  __first  An output iterator.
+    1136              :    *  @param  __n      The count of copies to perform.
+    1137              :    *  @param  __value  A reference-to-const of arbitrary type.
+    1138              :    *  @return   The iterator at first+n.
+    1139              :    *
+    1140              :    *  This function fills a range with copies of the same value.  For char
+    1141              :    *  types filling contiguous areas of memory, this becomes an inline call
+    1142              :    *  to @c memset or @c wmemset.
+    1143              :    *
+    1144              :    *  If @p __n is negative, the function does nothing.
+    1145              :   */
+    1146              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1147              :   // DR 865. More algorithms that throw away information
+    1148              :   // DR 426. search_n(), fill_n(), and generate_n() with negative n
+    1149              :   template<typename _OI, typename _Size, typename _Tp>
+    1150              :     _GLIBCXX20_CONSTEXPR
+    1151              :     inline _OI
+    1152      2496282 :     fill_n(_OI __first, _Size __n, const _Tp& __value)
+    1153              :     {
+    1154              :       // concept requirements
+    1155              :       __glibcxx_function_requires(_OutputIteratorConcept<_OI, const _Tp&>)
+    1156              : 
+    1157      2496282 :       return std::__fill_n_a(__first, std::__size_to_integer(__n), __value,
+    1158      4992564 :                                std::__iterator_category(__first));
+    1159              :     }
+    1160              : 
+    1161              :   template<bool _BoolType>
+    1162              :     struct __equal
+    1163              :     {
+    1164              :       template<typename _II1, typename _II2>
+    1165              :         _GLIBCXX20_CONSTEXPR
+    1166              :         static bool
+    1167          116 :         equal(_II1 __first1, _II1 __last1, _II2 __first2)
+    1168              :         {
+    1169          604 :           for (; __first1 != __last1; ++__first1, (void) ++__first2)
+    1170          488 :             if (!(*__first1 == *__first2))
+    1171            0 :               return false;
+    1172          116 :           return true;
+    1173              :         }
+    1174              :     };
+    1175              : 
+    1176              :   template<>
+    1177              :     struct __equal<true>
+    1178              :     {
+    1179              :       template<typename _Tp>
+    1180              :         _GLIBCXX20_CONSTEXPR
+    1181              :         static bool
+    1182           44 :         equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2)
+    1183              :         {
+    1184           44 :           if (const size_t __len = (__last1 - __first1))
+    1185           44 :             return !std::__memcmp(__first1, __first2, __len);
+    1186            0 :           return true;
+    1187              :         }
+    1188              :     };
+    1189              : 
+    1190              :   template<typename _Tp, typename _Ref, typename _Ptr, typename _II>
+    1191              :     typename __gnu_cxx::__enable_if<
+    1192              :       __is_random_access_iter<_II>::__value, bool>::__type
+    1193              :     __equal_aux1(_GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr>,
+    1194              :                  _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr>,
+    1195              :                  _II);
+    1196              : 
+    1197              :   template<typename _Tp1, typename _Ref1, typename _Ptr1,
+    1198              :            typename _Tp2, typename _Ref2, typename _Ptr2>
+    1199              :     bool
+    1200              :     __equal_aux1(_GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref1, _Ptr1>,
+    1201              :                  _GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref1, _Ptr1>,
+    1202              :                  _GLIBCXX_STD_C::_Deque_iterator<_Tp2, _Ref2, _Ptr2>);
+    1203              : 
+    1204              :   template<typename _II, typename _Tp, typename _Ref, typename _Ptr>
+    1205              :     typename __gnu_cxx::__enable_if<
+    1206              :       __is_random_access_iter<_II>::__value, bool>::__type
+    1207              :     __equal_aux1(_II, _II,
+    1208              :                 _GLIBCXX_STD_C::_Deque_iterator<_Tp, _Ref, _Ptr>);
+    1209              : 
+    1210              :   template<typename _II1, typename _II2>
+    1211              :     _GLIBCXX20_CONSTEXPR
+    1212              :     inline bool
+    1213          160 :     __equal_aux1(_II1 __first1, _II1 __last1, _II2 __first2)
+    1214              :     {
+    1215              :       typedef typename iterator_traits<_II1>::value_type _ValueType1;
+    1216          160 :       const bool __simple = ((__is_integer<_ValueType1>::__value
+    1217              :                               || __is_pointer<_ValueType1>::__value)
+    1218              :                              && __memcmpable<_II1, _II2>::__value);
+    1219          160 :       return std::__equal<__simple>::equal(__first1, __last1, __first2);
+    1220              :     }
+    1221              : 
+    1222              :   template<typename _II1, typename _II2>
+    1223              :     _GLIBCXX20_CONSTEXPR
+    1224              :     inline bool
+    1225          160 :     __equal_aux(_II1 __first1, _II1 __last1, _II2 __first2)
+    1226              :     {
+    1227          160 :       return std::__equal_aux1(std::__niter_base(__first1),
+    1228              :                                std::__niter_base(__last1),
+    1229          160 :                                std::__niter_base(__first2));
+    1230              :     }
+    1231              : 
+    1232              :   template<typename _II1, typename _Seq1, typename _Cat1, typename _II2>
+    1233              :     bool
+    1234              :     __equal_aux(const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&,
+    1235              :                 const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&,
+    1236              :                 _II2);
+    1237              : 
+    1238              :   template<typename _II1, typename _II2, typename _Seq2, typename _Cat2>
+    1239              :     bool
+    1240              :     __equal_aux(_II1, _II1,
+    1241              :                 const ::__gnu_debug::_Safe_iterator<_II2, _Seq2, _Cat2>&);
+    1242              : 
+    1243              :   template<typename _II1, typename _Seq1, typename _Cat1,
+    1244              :            typename _II2, typename _Seq2, typename _Cat2>
+    1245              :     bool
+    1246              :     __equal_aux(const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&,
+    1247              :                 const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&,
+    1248              :                 const ::__gnu_debug::_Safe_iterator<_II2, _Seq2, _Cat2>&);
+    1249              : 
+    1250              :   template<typename, typename>
+    1251              :     struct __lc_rai
+    1252              :     {
+    1253              :       template<typename _II1, typename _II2>
+    1254              :         _GLIBCXX20_CONSTEXPR
+    1255              :         static _II1
+    1256              :         __newlast1(_II1, _II1 __last1, _II2, _II2)
+    1257              :         { return __last1; }
+    1258              : 
+    1259              :       template<typename _II>
+    1260              :         _GLIBCXX20_CONSTEXPR
+    1261              :         static bool
+    1262              :         __cnd2(_II __first, _II __last)
+    1263              :         { return __first != __last; }
+    1264              :     };
+    1265              : 
+    1266              :   template<>
+    1267              :     struct __lc_rai<random_access_iterator_tag, random_access_iterator_tag>
+    1268              :     {
+    1269              :       template<typename _RAI1, typename _RAI2>
+    1270              :         _GLIBCXX20_CONSTEXPR
+    1271              :         static _RAI1
+    1272              :         __newlast1(_RAI1 __first1, _RAI1 __last1,
+    1273              :                    _RAI2 __first2, _RAI2 __last2)
+    1274              :         {
+    1275              :           const typename iterator_traits<_RAI1>::difference_type
+    1276              :             __diff1 = __last1 - __first1;
+    1277              :           const typename iterator_traits<_RAI2>::difference_type
+    1278              :             __diff2 = __last2 - __first2;
+    1279              :           return __diff2 < __diff1 ? __first1 + __diff2 : __last1;
+    1280              :         }
+    1281              : 
+    1282              :       template<typename _RAI>
+    1283              :         static _GLIBCXX20_CONSTEXPR bool
+    1284              :         __cnd2(_RAI, _RAI)
+    1285              :         { return true; }
+    1286              :     };
+    1287              : 
+    1288              :   template<typename _II1, typename _II2, typename _Compare>
+    1289              :     _GLIBCXX20_CONSTEXPR
+    1290              :     bool
+    1291              :     __lexicographical_compare_impl(_II1 __first1, _II1 __last1,
+    1292              :                                    _II2 __first2, _II2 __last2,
+    1293              :                                    _Compare __comp)
+    1294              :     {
+    1295              :       typedef typename iterator_traits<_II1>::iterator_category _Category1;
+    1296              :       typedef typename iterator_traits<_II2>::iterator_category _Category2;
+    1297              :       typedef std::__lc_rai<_Category1, _Category2> __rai_type;
+    1298              : 
+    1299              :       __last1 = __rai_type::__newlast1(__first1, __last1, __first2, __last2);
+    1300              :       for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2);
+    1301              :            ++__first1, (void)++__first2)
+    1302              :         {
+    1303              :           if (__comp(__first1, __first2))
+    1304              :             return true;
+    1305              :           if (__comp(__first2, __first1))
+    1306              :             return false;
+    1307              :         }
+    1308              :       return __first1 == __last1 && __first2 != __last2;
+    1309              :     }
+    1310              : 
+    1311              :   template<bool _BoolType>
+    1312              :     struct __lexicographical_compare
+    1313              :     {
+    1314              :       template<typename _II1, typename _II2>
+    1315              :         _GLIBCXX20_CONSTEXPR
+    1316              :         static bool
+    1317              :         __lc(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2)
+    1318              :         {
+    1319              :           using __gnu_cxx::__ops::__iter_less_iter;
+    1320              :           return std::__lexicographical_compare_impl(__first1, __last1,
+    1321              :                                                      __first2, __last2,
+    1322              :                                                      __iter_less_iter());
+    1323              :         }
+    1324              : 
+    1325              :       template<typename _II1, typename _II2>
+    1326              :         _GLIBCXX20_CONSTEXPR
+    1327              :         static int
+    1328              :         __3way(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2)
+    1329              :         {
+    1330              :           while (__first1 != __last1)
+    1331              :             {
+    1332              :               if (__first2 == __last2)
+    1333              :                 return +1;
+    1334              :               if (*__first1 < *__first2)
+    1335              :                 return -1;
+    1336              :               if (*__first2 < *__first1)
+    1337              :                 return +1;
+    1338              :               ++__first1;
+    1339              :               ++__first2;
+    1340              :             }
+    1341              :           return int(__first2 == __last2) - 1;
+    1342              :         }
+    1343              :     };
+    1344              : 
+    1345              :   template<>
+    1346              :     struct __lexicographical_compare<true>
+    1347              :     {
+    1348              :       template<typename _Tp, typename _Up>
+    1349              :         _GLIBCXX20_CONSTEXPR
+    1350              :         static bool
+    1351              :         __lc(const _Tp* __first1, const _Tp* __last1,
+    1352              :              const _Up* __first2, const _Up* __last2)
+    1353              :         { return __3way(__first1, __last1, __first2, __last2) < 0; }
+    1354              : 
+    1355              :       template<typename _Tp, typename _Up>
+    1356              :         _GLIBCXX20_CONSTEXPR
+    1357              :         static ptrdiff_t
+    1358              :         __3way(const _Tp* __first1, const _Tp* __last1,
+    1359              :                const _Up* __first2, const _Up* __last2)
+    1360              :         {
+    1361              :           const size_t __len1 = __last1 - __first1;
+    1362              :           const size_t __len2 = __last2 - __first2;
+    1363              :           if (const size_t __len = std::min(__len1, __len2))
+    1364              :             if (int __result = std::__memcmp(__first1, __first2, __len))
+    1365              :               return __result;
+    1366              :           return ptrdiff_t(__len1 - __len2);
+    1367              :         }
+    1368              :     };
+    1369              : 
+    1370              :   template<typename _II1, typename _II2>
+    1371              :     _GLIBCXX20_CONSTEXPR
+    1372              :     inline bool
+    1373              :     __lexicographical_compare_aux1(_II1 __first1, _II1 __last1,
+    1374              :                                    _II2 __first2, _II2 __last2)
+    1375              :     {
+    1376              :       typedef typename iterator_traits<_II1>::value_type _ValueType1;
+    1377              :       typedef typename iterator_traits<_II2>::value_type _ValueType2;
+    1378              :       const bool __simple =
+    1379              :         (__is_memcmp_ordered_with<_ValueType1, _ValueType2>::__value
+    1380              :          && __is_pointer<_II1>::__value
+    1381              :          && __is_pointer<_II2>::__value
+    1382              : #if __cplusplus > 201703L && __cpp_lib_concepts
+    1383              :          // For C++20 iterator_traits<volatile T*>::value_type is non-volatile
+    1384              :          // so __is_byte<T> could be true, but we can't use memcmp with
+    1385              :          // volatile data.
+    1386              :          && !is_volatile_v<remove_reference_t<iter_reference_t<_II1>>>
+    1387              :          && !is_volatile_v<remove_reference_t<iter_reference_t<_II2>>>
+    1388              : #endif
+    1389              :          );
+    1390              : 
+    1391              :       return std::__lexicographical_compare<__simple>::__lc(__first1, __last1,
+    1392              :                                                             __first2, __last2);
+    1393              :     }
+    1394              : 
+    1395              :   template<typename _Tp1, typename _Ref1, typename _Ptr1,
+    1396              :            typename _Tp2>
+    1397              :     bool
+    1398              :     __lexicographical_compare_aux1(
+    1399              :         _GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref1, _Ptr1>,
+    1400              :         _GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref1, _Ptr1>,
+    1401              :         _Tp2*, _Tp2*);
+    1402              : 
+    1403              :   template<typename _Tp1,
+    1404              :            typename _Tp2, typename _Ref2, typename _Ptr2>
+    1405              :     bool
+    1406              :     __lexicographical_compare_aux1(_Tp1*, _Tp1*,
+    1407              :         _GLIBCXX_STD_C::_Deque_iterator<_Tp2, _Ref2, _Ptr2>,
+    1408              :         _GLIBCXX_STD_C::_Deque_iterator<_Tp2, _Ref2, _Ptr2>);
+    1409              : 
+    1410              :   template<typename _Tp1, typename _Ref1, typename _Ptr1,
+    1411              :            typename _Tp2, typename _Ref2, typename _Ptr2>
+    1412              :     bool
+    1413              :     __lexicographical_compare_aux1(
+    1414              :         _GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref1, _Ptr1>,
+    1415              :         _GLIBCXX_STD_C::_Deque_iterator<_Tp1, _Ref1, _Ptr1>,
+    1416              :         _GLIBCXX_STD_C::_Deque_iterator<_Tp2, _Ref2, _Ptr2>,
+    1417              :         _GLIBCXX_STD_C::_Deque_iterator<_Tp2, _Ref2, _Ptr2>);
+    1418              : 
+    1419              :   template<typename _II1, typename _II2>
+    1420              :     _GLIBCXX20_CONSTEXPR
+    1421              :     inline bool
+    1422              :     __lexicographical_compare_aux(_II1 __first1, _II1 __last1,
+    1423              :                                   _II2 __first2, _II2 __last2)
+    1424              :     {
+    1425              :       return std::__lexicographical_compare_aux1(std::__niter_base(__first1),
+    1426              :                                                  std::__niter_base(__last1),
+    1427              :                                                  std::__niter_base(__first2),
+    1428              :                                                  std::__niter_base(__last2));
+    1429              :     }
+    1430              : 
+    1431              :   template<typename _Iter1, typename _Seq1, typename _Cat1,
+    1432              :            typename _II2>
+    1433              :     bool
+    1434              :     __lexicographical_compare_aux(
+    1435              :                 const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&,
+    1436              :                 const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&,
+    1437              :                 _II2, _II2);
+    1438              : 
+    1439              :   template<typename _II1,
+    1440              :            typename _Iter2, typename _Seq2, typename _Cat2>
+    1441              :     bool
+    1442              :     __lexicographical_compare_aux(
+    1443              :                 _II1, _II1,
+    1444              :                 const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&,
+    1445              :                 const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&);
+    1446              : 
+    1447              :   template<typename _Iter1, typename _Seq1, typename _Cat1,
+    1448              :            typename _Iter2, typename _Seq2, typename _Cat2>
+    1449              :     bool
+    1450              :     __lexicographical_compare_aux(
+    1451              :                 const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&,
+    1452              :                 const ::__gnu_debug::_Safe_iterator<_Iter1, _Seq1, _Cat1>&,
+    1453              :                 const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&,
+    1454              :                 const ::__gnu_debug::_Safe_iterator<_Iter2, _Seq2, _Cat2>&);
+    1455              : 
+    1456              :   template<typename _ForwardIterator, typename _Tp, typename _Compare>
+    1457              :     _GLIBCXX20_CONSTEXPR
+    1458              :     _ForwardIterator
+    1459            0 :     __lower_bound(_ForwardIterator __first, _ForwardIterator __last,
+    1460              :                   const _Tp& __val, _Compare __comp)
+    1461              :     {
+    1462              :       typedef typename iterator_traits<_ForwardIterator>::difference_type
+    1463              :         _DistanceType;
+    1464              : 
+    1465            0 :       _DistanceType __len = std::distance(__first, __last);
+    1466              : 
+    1467            0 :       while (__len > 0)
+    1468              :         {
+    1469            0 :           _DistanceType __half = __len >> 1;
+    1470            0 :           _ForwardIterator __middle = __first;
+    1471              :           std::advance(__middle, __half);
+    1472            0 :           if (__comp(__middle, __val))
+    1473              :             {
+    1474            0 :               __first = __middle;
+    1475            0 :               ++__first;
+    1476            0 :               __len = __len - __half - 1;
+    1477              :             }
+    1478              :           else
+    1479            0 :             __len = __half;
+    1480              :         }
+    1481            0 :       return __first;
+    1482              :     }
+    1483              : 
+    1484              :   /**
+    1485              :    *  @brief Finds the first position in which @a val could be inserted
+    1486              :    *         without changing the ordering.
+    1487              :    *  @param  __first   An iterator.
+    1488              :    *  @param  __last    Another iterator.
+    1489              :    *  @param  __val     The search term.
+    1490              :    *  @return         An iterator pointing to the first element <em>not less
+    1491              :    *                  than</em> @a val, or end() if every element is less than
+    1492              :    *                  @a val.
+    1493              :    *  @ingroup binary_search_algorithms
+    1494              :   */
+    1495              :   template<typename _ForwardIterator, typename _Tp>
+    1496              :     _GLIBCXX20_CONSTEXPR
+    1497              :     inline _ForwardIterator
+    1498              :     lower_bound(_ForwardIterator __first, _ForwardIterator __last,
+    1499              :                 const _Tp& __val)
+    1500              :     {
+    1501              :       // concept requirements
+    1502              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+    1503              :       __glibcxx_function_requires(_LessThanOpConcept<
+    1504              :             typename iterator_traits<_ForwardIterator>::value_type, _Tp>)
+    1505              :       __glibcxx_requires_partitioned_lower(__first, __last, __val);
+    1506              : 
+    1507              :       return std::__lower_bound(__first, __last, __val,
+    1508              :                                 __gnu_cxx::__ops::__iter_less_val());
+    1509              :     }
+    1510              : 
+    1511              :   /// This is a helper function for the sort routines and for random.tcc.
+    1512              :   //  Precondition: __n > 0.
+    1513              :   template<typename _Tp>
+    1514              :     inline _GLIBCXX_CONSTEXPR _Tp
+    1515         3724 :     __lg(_Tp __n)
+    1516              :     {
+    1517              : #if __cplusplus >= 201402L
+    1518         3724 :       return std::__bit_width(make_unsigned_t<_Tp>(__n)) - 1;
+    1519              : #else
+    1520              :       // Use +__n so it promotes to at least int.
+    1521              :       return (sizeof(+__n) * __CHAR_BIT__ - 1)
+    1522              :                - (sizeof(+__n) == sizeof(long long)
+    1523              :                     ? __builtin_clzll(+__n)
+    1524              :                     : (sizeof(+__n) == sizeof(long)
+    1525              :                          ? __builtin_clzl(+__n)
+    1526              :                          : __builtin_clz(+__n)));
+    1527              : #endif
+    1528              :     }
+    1529              : 
+    1530              : _GLIBCXX_BEGIN_NAMESPACE_ALGO
+    1531              : 
+    1532              :   /**
+    1533              :    *  @brief Tests a range for element-wise equality.
+    1534              :    *  @ingroup non_mutating_algorithms
+    1535              :    *  @param  __first1  An input iterator.
+    1536              :    *  @param  __last1   An input iterator.
+    1537              :    *  @param  __first2  An input iterator.
+    1538              :    *  @return   A boolean true or false.
+    1539              :    *
+    1540              :    *  This compares the elements of two ranges using @c == and returns true or
+    1541              :    *  false depending on whether all of the corresponding elements of the
+    1542              :    *  ranges are equal.
+    1543              :   */
+    1544              :   template<typename _II1, typename _II2>
+    1545              :     _GLIBCXX20_CONSTEXPR
+    1546              :     inline bool
+    1547          160 :     equal(_II1 __first1, _II1 __last1, _II2 __first2)
+    1548              :     {
+    1549              :       // concept requirements
+    1550              :       __glibcxx_function_requires(_InputIteratorConcept<_II1>)
+    1551              :       __glibcxx_function_requires(_InputIteratorConcept<_II2>)
+    1552              :       __glibcxx_function_requires(_EqualOpConcept<
+    1553              :             typename iterator_traits<_II1>::value_type,
+    1554              :             typename iterator_traits<_II2>::value_type>)
+    1555              :       __glibcxx_requires_can_increment_range(__first1, __last1, __first2);
+    1556              : 
+    1557          160 :       return std::__equal_aux(__first1, __last1, __first2);
+    1558              :     }
+    1559              : 
+    1560              :   /**
+    1561              :    *  @brief Tests a range for element-wise equality.
+    1562              :    *  @ingroup non_mutating_algorithms
+    1563              :    *  @param  __first1  An input iterator.
+    1564              :    *  @param  __last1   An input iterator.
+    1565              :    *  @param  __first2  An input iterator.
+    1566              :    *  @param __binary_pred A binary predicate @link functors
+    1567              :    *                  functor@endlink.
+    1568              :    *  @return         A boolean true or false.
+    1569              :    *
+    1570              :    *  This compares the elements of two ranges using the binary_pred
+    1571              :    *  parameter, and returns true or
+    1572              :    *  false depending on whether all of the corresponding elements of the
+    1573              :    *  ranges are equal.
+    1574              :   */
+    1575              :   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
+    1576              :     _GLIBCXX20_CONSTEXPR
+    1577              :     inline bool
+    1578            0 :     equal(_IIter1 __first1, _IIter1 __last1,
+    1579              :           _IIter2 __first2, _BinaryPredicate __binary_pred)
+    1580              :     {
+    1581              :       // concept requirements
+    1582              :       __glibcxx_function_requires(_InputIteratorConcept<_IIter1>)
+    1583              :       __glibcxx_function_requires(_InputIteratorConcept<_IIter2>)
+    1584              :       __glibcxx_requires_valid_range(__first1, __last1);
+    1585              : 
+    1586            0 :       for (; __first1 != __last1; ++__first1, (void)++__first2)
+    1587            0 :         if (!bool(__binary_pred(*__first1, *__first2)))
+    1588            0 :           return false;
+    1589            0 :       return true;
+    1590              :     }
+    1591              : 
+    1592              : #if __cplusplus >= 201103L
+    1593              :   // 4-iterator version of std::equal<It1, It2> for use in C++11.
+    1594              :   template<typename _II1, typename _II2>
+    1595              :     _GLIBCXX20_CONSTEXPR
+    1596              :     inline bool
+    1597            0 :     __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2)
+    1598              :     {
+    1599              :       using _RATag = random_access_iterator_tag;
+    1600              :       using _Cat1 = typename iterator_traits<_II1>::iterator_category;
+    1601              :       using _Cat2 = typename iterator_traits<_II2>::iterator_category;
+    1602              :       using _RAIters = __and_<is_same<_Cat1, _RATag>, is_same<_Cat2, _RATag>>;
+    1603            0 :       if (_RAIters())
+    1604              :         {
+    1605            0 :           auto __d1 = std::distance(__first1, __last1);
+    1606            0 :           auto __d2 = std::distance(__first2, __last2);
+    1607            0 :           if (__d1 != __d2)
+    1608            0 :             return false;
+    1609            0 :           return _GLIBCXX_STD_A::equal(__first1, __last1, __first2);
+    1610              :         }
+    1611              : 
+    1612            0 :       for (; __first1 != __last1 && __first2 != __last2;
+    1613            0 :           ++__first1, (void)++__first2)
+    1614            0 :         if (!(*__first1 == *__first2))
+    1615            0 :           return false;
+    1616            0 :       return __first1 == __last1 && __first2 == __last2;
+    1617              :     }
+    1618              : 
+    1619              :   // 4-iterator version of std::equal<It1, It2, BinaryPred> for use in C++11.
+    1620              :   template<typename _II1, typename _II2, typename _BinaryPredicate>
+    1621              :     _GLIBCXX20_CONSTEXPR
+    1622              :     inline bool
+    1623            0 :     __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2,
+    1624              :              _BinaryPredicate __binary_pred)
+    1625              :     {
+    1626              :       using _RATag = random_access_iterator_tag;
+    1627              :       using _Cat1 = typename iterator_traits<_II1>::iterator_category;
+    1628              :       using _Cat2 = typename iterator_traits<_II2>::iterator_category;
+    1629              :       using _RAIters = __and_<is_same<_Cat1, _RATag>, is_same<_Cat2, _RATag>>;
+    1630            0 :       if (_RAIters())
+    1631              :         {
+    1632            0 :           auto __d1 = std::distance(__first1, __last1);
+    1633            0 :           auto __d2 = std::distance(__first2, __last2);
+    1634            0 :           if (__d1 != __d2)
+    1635            0 :             return false;
+    1636            0 :           return _GLIBCXX_STD_A::equal(__first1, __last1, __first2,
+    1637            0 :                                        __binary_pred);
+    1638              :         }
+    1639              : 
+    1640            0 :       for (; __first1 != __last1 && __first2 != __last2;
+    1641            0 :           ++__first1, (void)++__first2)
+    1642            0 :         if (!bool(__binary_pred(*__first1, *__first2)))
+    1643            0 :           return false;
+    1644            0 :       return __first1 == __last1 && __first2 == __last2;
+    1645              :     }
+    1646              : #endif // C++11
+    1647              : 
+    1648              : #if __cplusplus > 201103L
+    1649              : 
+    1650              : #define __cpp_lib_robust_nonmodifying_seq_ops 201304L
+    1651              : 
+    1652              :   /**
+    1653              :    *  @brief Tests a range for element-wise equality.
+    1654              :    *  @ingroup non_mutating_algorithms
+    1655              :    *  @param  __first1  An input iterator.
+    1656              :    *  @param  __last1   An input iterator.
+    1657              :    *  @param  __first2  An input iterator.
+    1658              :    *  @param  __last2   An input iterator.
+    1659              :    *  @return   A boolean true or false.
+    1660              :    *
+    1661              :    *  This compares the elements of two ranges using @c == and returns true or
+    1662              :    *  false depending on whether all of the corresponding elements of the
+    1663              :    *  ranges are equal.
+    1664              :   */
+    1665              :   template<typename _II1, typename _II2>
+    1666              :     _GLIBCXX20_CONSTEXPR
+    1667              :     inline bool
+    1668              :     equal(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2)
+    1669              :     {
+    1670              :       // concept requirements
+    1671              :       __glibcxx_function_requires(_InputIteratorConcept<_II1>)
+    1672              :       __glibcxx_function_requires(_InputIteratorConcept<_II2>)
+    1673              :       __glibcxx_function_requires(_EqualOpConcept<
+    1674              :             typename iterator_traits<_II1>::value_type,
+    1675              :             typename iterator_traits<_II2>::value_type>)
+    1676              :       __glibcxx_requires_valid_range(__first1, __last1);
+    1677              :       __glibcxx_requires_valid_range(__first2, __last2);
+    1678              : 
+    1679              :       return _GLIBCXX_STD_A::__equal4(__first1, __last1, __first2, __last2);
+    1680              :     }
+    1681              : 
+    1682              :   /**
+    1683              :    *  @brief Tests a range for element-wise equality.
+    1684              :    *  @ingroup non_mutating_algorithms
+    1685              :    *  @param  __first1  An input iterator.
+    1686              :    *  @param  __last1   An input iterator.
+    1687              :    *  @param  __first2  An input iterator.
+    1688              :    *  @param  __last2   An input iterator.
+    1689              :    *  @param __binary_pred A binary predicate @link functors
+    1690              :    *                  functor@endlink.
+    1691              :    *  @return         A boolean true or false.
+    1692              :    *
+    1693              :    *  This compares the elements of two ranges using the binary_pred
+    1694              :    *  parameter, and returns true or
+    1695              :    *  false depending on whether all of the corresponding elements of the
+    1696              :    *  ranges are equal.
+    1697              :   */
+    1698              :   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
+    1699              :     _GLIBCXX20_CONSTEXPR
+    1700              :     inline bool
+    1701              :     equal(_IIter1 __first1, _IIter1 __last1,
+    1702              :           _IIter2 __first2, _IIter2 __last2, _BinaryPredicate __binary_pred)
+    1703              :     {
+    1704              :       // concept requirements
+    1705              :       __glibcxx_function_requires(_InputIteratorConcept<_IIter1>)
+    1706              :       __glibcxx_function_requires(_InputIteratorConcept<_IIter2>)
+    1707              :       __glibcxx_requires_valid_range(__first1, __last1);
+    1708              :       __glibcxx_requires_valid_range(__first2, __last2);
+    1709              : 
+    1710              :       return _GLIBCXX_STD_A::__equal4(__first1, __last1, __first2, __last2,
+    1711              :                                       __binary_pred);
+    1712              :     }
+    1713              : #endif // C++14
+    1714              : 
+    1715              :   /**
+    1716              :    *  @brief Performs @b dictionary comparison on ranges.
+    1717              :    *  @ingroup sorting_algorithms
+    1718              :    *  @param  __first1  An input iterator.
+    1719              :    *  @param  __last1   An input iterator.
+    1720              :    *  @param  __first2  An input iterator.
+    1721              :    *  @param  __last2   An input iterator.
+    1722              :    *  @return   A boolean true or false.
+    1723              :    *
+    1724              :    *  <em>Returns true if the sequence of elements defined by the range
+    1725              :    *  [first1,last1) is lexicographically less than the sequence of elements
+    1726              :    *  defined by the range [first2,last2).  Returns false otherwise.</em>
+    1727              :    *  (Quoted from [25.3.8]/1.)  If the iterators are all character pointers,
+    1728              :    *  then this is an inline call to @c memcmp.
+    1729              :   */
+    1730              :   template<typename _II1, typename _II2>
+    1731              :     _GLIBCXX20_CONSTEXPR
+    1732              :     inline bool
+    1733              :     lexicographical_compare(_II1 __first1, _II1 __last1,
+    1734              :                             _II2 __first2, _II2 __last2)
+    1735              :     {
+    1736              : #ifdef _GLIBCXX_CONCEPT_CHECKS
+    1737              :       // concept requirements
+    1738              :       typedef typename iterator_traits<_II1>::value_type _ValueType1;
+    1739              :       typedef typename iterator_traits<_II2>::value_type _ValueType2;
+    1740              : #endif
+    1741              :       __glibcxx_function_requires(_InputIteratorConcept<_II1>)
+    1742              :       __glibcxx_function_requires(_InputIteratorConcept<_II2>)
+    1743              :       __glibcxx_function_requires(_LessThanOpConcept<_ValueType1, _ValueType2>)
+    1744              :       __glibcxx_function_requires(_LessThanOpConcept<_ValueType2, _ValueType1>)
+    1745              :       __glibcxx_requires_valid_range(__first1, __last1);
+    1746              :       __glibcxx_requires_valid_range(__first2, __last2);
+    1747              : 
+    1748              :       return std::__lexicographical_compare_aux(__first1, __last1,
+    1749              :                                                 __first2, __last2);
+    1750              :     }
+    1751              : 
+    1752              :   /**
+    1753              :    *  @brief Performs @b dictionary comparison on ranges.
+    1754              :    *  @ingroup sorting_algorithms
+    1755              :    *  @param  __first1  An input iterator.
+    1756              :    *  @param  __last1   An input iterator.
+    1757              :    *  @param  __first2  An input iterator.
+    1758              :    *  @param  __last2   An input iterator.
+    1759              :    *  @param  __comp  A @link comparison_functors comparison functor@endlink.
+    1760              :    *  @return   A boolean true or false.
+    1761              :    *
+    1762              :    *  The same as the four-parameter @c lexicographical_compare, but uses the
+    1763              :    *  comp parameter instead of @c <.
+    1764              :   */
+    1765              :   template<typename _II1, typename _II2, typename _Compare>
+    1766              :     _GLIBCXX20_CONSTEXPR
+    1767              :     inline bool
+    1768              :     lexicographical_compare(_II1 __first1, _II1 __last1,
+    1769              :                             _II2 __first2, _II2 __last2, _Compare __comp)
+    1770              :     {
+    1771              :       // concept requirements
+    1772              :       __glibcxx_function_requires(_InputIteratorConcept<_II1>)
+    1773              :       __glibcxx_function_requires(_InputIteratorConcept<_II2>)
+    1774              :       __glibcxx_requires_valid_range(__first1, __last1);
+    1775              :       __glibcxx_requires_valid_range(__first2, __last2);
+    1776              : 
+    1777              :       return std::__lexicographical_compare_impl
+    1778              :         (__first1, __last1, __first2, __last2,
+    1779              :          __gnu_cxx::__ops::__iter_comp_iter(__comp));
+    1780              :     }
+    1781              : 
+    1782              : #if __cpp_lib_three_way_comparison
+    1783              :   // Both iterators refer to contiguous ranges of unsigned narrow characters,
+    1784              :   // or std::byte, or big-endian unsigned integers, suitable for comparison
+    1785              :   // using memcmp.
+    1786              :   template<typename _Iter1, typename _Iter2>
+    1787              :     concept __memcmp_ordered_with
+    1788              :       = (__is_memcmp_ordered_with<iter_value_t<_Iter1>,
+    1789              :                                   iter_value_t<_Iter2>>::__value)
+    1790              :           && contiguous_iterator<_Iter1> && contiguous_iterator<_Iter2>;
+    1791              : 
+    1792              :   // Return a struct with two members, initialized to the smaller of x and y
+    1793              :   // (or x if they compare equal) and the result of the comparison x <=> y.
+    1794              :   template<typename _Tp>
+    1795              :     constexpr auto
+    1796              :     __min_cmp(_Tp __x, _Tp __y)
+    1797              :     {
+    1798              :       struct _Res {
+    1799              :         _Tp _M_min;
+    1800              :         decltype(__x <=> __y) _M_cmp;
+    1801              :       };
+    1802              :       auto __c = __x <=> __y;
+    1803              :       if (__c > 0)
+    1804              :         return _Res{__y, __c};
+    1805              :       return _Res{__x, __c};
+    1806              :     }
+    1807              : 
+    1808              :   /**
+    1809              :    *  @brief Performs dictionary comparison on ranges.
+    1810              :    *  @ingroup sorting_algorithms
+    1811              :    *  @param  __first1  An input iterator.
+    1812              :    *  @param  __last1   An input iterator.
+    1813              :    *  @param  __first2  An input iterator.
+    1814              :    *  @param  __last2   An input iterator.
+    1815              :    *  @param  __comp  A @link comparison_functors comparison functor@endlink.
+    1816              :    *  @return   The comparison category that `__comp(*__first1, *__first2)`
+    1817              :    *            returns.
+    1818              :   */
+    1819              :   template<typename _InputIter1, typename _InputIter2, typename _Comp>
+    1820              :     constexpr auto
+    1821              :     lexicographical_compare_three_way(_InputIter1 __first1,
+    1822              :                                       _InputIter1 __last1,
+    1823              :                                       _InputIter2 __first2,
+    1824              :                                       _InputIter2 __last2,
+    1825              :                                       _Comp __comp)
+    1826              :     -> decltype(__comp(*__first1, *__first2))
+    1827              :     {
+    1828              :       // concept requirements
+    1829              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIter1>)
+    1830              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIter2>)
+    1831              :       __glibcxx_requires_valid_range(__first1, __last1);
+    1832              :       __glibcxx_requires_valid_range(__first2, __last2);
+    1833              : 
+    1834              :       using _Cat = decltype(__comp(*__first1, *__first2));
+    1835              :       static_assert(same_as<common_comparison_category_t<_Cat>, _Cat>);
+    1836              : 
+    1837              :       if (!std::__is_constant_evaluated())
+    1838              :         if constexpr (same_as<_Comp, __detail::_Synth3way>
+    1839              :                       || same_as<_Comp, compare_three_way>)
+    1840              :           if constexpr (__memcmp_ordered_with<_InputIter1, _InputIter2>)
+    1841              :             {
+    1842              :               const auto [__len, __lencmp] = _GLIBCXX_STD_A::
+    1843              :                 __min_cmp(__last1 - __first1, __last2 - __first2);
+    1844              :               if (__len)
+    1845              :                 {
+    1846              :                   const auto __blen = __len * sizeof(*__first1);
+    1847              :                   const auto __c
+    1848              :                     = __builtin_memcmp(&*__first1, &*__first2, __blen) <=> 0;
+    1849              :                   if (__c != 0)
+    1850              :                     return __c;
+    1851              :                 }
+    1852              :               return __lencmp;
+    1853              :             }
+    1854              : 
+    1855              :       while (__first1 != __last1)
+    1856              :         {
+    1857              :           if (__first2 == __last2)
+    1858              :             return strong_ordering::greater;
+    1859              :           if (auto __cmp = __comp(*__first1, *__first2); __cmp != 0)
+    1860              :             return __cmp;
+    1861              :           ++__first1;
+    1862              :           ++__first2;
+    1863              :         }
+    1864              :       return (__first2 == __last2) <=> true; // See PR 94006
+    1865              :     }
+    1866              : 
+    1867              :   template<typename _InputIter1, typename _InputIter2>
+    1868              :     constexpr auto
+    1869              :     lexicographical_compare_three_way(_InputIter1 __first1,
+    1870              :                                       _InputIter1 __last1,
+    1871              :                                       _InputIter2 __first2,
+    1872              :                                       _InputIter2 __last2)
+    1873              :     {
+    1874              :       return _GLIBCXX_STD_A::
+    1875              :         lexicographical_compare_three_way(__first1, __last1, __first2, __last2,
+    1876              :                                           compare_three_way{});
+    1877              :     }
+    1878              : #endif // three_way_comparison
+    1879              : 
+    1880              :   template<typename _InputIterator1, typename _InputIterator2,
+    1881              :            typename _BinaryPredicate>
+    1882              :     _GLIBCXX20_CONSTEXPR
+    1883              :     pair<_InputIterator1, _InputIterator2>
+    1884              :     __mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
+    1885              :                _InputIterator2 __first2, _BinaryPredicate __binary_pred)
+    1886              :     {
+    1887              :       while (__first1 != __last1 && __binary_pred(__first1, __first2))
+    1888              :         {
+    1889              :           ++__first1;
+    1890              :           ++__first2;
+    1891              :         }
+    1892              :       return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
+    1893              :     }
+    1894              : 
+    1895              :   /**
+    1896              :    *  @brief Finds the places in ranges which don't match.
+    1897              :    *  @ingroup non_mutating_algorithms
+    1898              :    *  @param  __first1  An input iterator.
+    1899              :    *  @param  __last1   An input iterator.
+    1900              :    *  @param  __first2  An input iterator.
+    1901              :    *  @return   A pair of iterators pointing to the first mismatch.
+    1902              :    *
+    1903              :    *  This compares the elements of two ranges using @c == and returns a pair
+    1904              :    *  of iterators.  The first iterator points into the first range, the
+    1905              :    *  second iterator points into the second range, and the elements pointed
+    1906              :    *  to by the iterators are not equal.
+    1907              :   */
+    1908              :   template<typename _InputIterator1, typename _InputIterator2>
+    1909              :     _GLIBCXX20_CONSTEXPR
+    1910              :     inline pair<_InputIterator1, _InputIterator2>
+    1911              :     mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
+    1912              :              _InputIterator2 __first2)
+    1913              :     {
+    1914              :       // concept requirements
+    1915              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+    1916              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+    1917              :       __glibcxx_function_requires(_EqualOpConcept<
+    1918              :             typename iterator_traits<_InputIterator1>::value_type,
+    1919              :             typename iterator_traits<_InputIterator2>::value_type>)
+    1920              :       __glibcxx_requires_valid_range(__first1, __last1);
+    1921              : 
+    1922              :       return _GLIBCXX_STD_A::__mismatch(__first1, __last1, __first2,
+    1923              :                              __gnu_cxx::__ops::__iter_equal_to_iter());
+    1924              :     }
+    1925              : 
+    1926              :   /**
+    1927              :    *  @brief Finds the places in ranges which don't match.
+    1928              :    *  @ingroup non_mutating_algorithms
+    1929              :    *  @param  __first1  An input iterator.
+    1930              :    *  @param  __last1   An input iterator.
+    1931              :    *  @param  __first2  An input iterator.
+    1932              :    *  @param __binary_pred A binary predicate @link functors
+    1933              :    *         functor@endlink.
+    1934              :    *  @return   A pair of iterators pointing to the first mismatch.
+    1935              :    *
+    1936              :    *  This compares the elements of two ranges using the binary_pred
+    1937              :    *  parameter, and returns a pair
+    1938              :    *  of iterators.  The first iterator points into the first range, the
+    1939              :    *  second iterator points into the second range, and the elements pointed
+    1940              :    *  to by the iterators are not equal.
+    1941              :   */
+    1942              :   template<typename _InputIterator1, typename _InputIterator2,
+    1943              :            typename _BinaryPredicate>
+    1944              :     _GLIBCXX20_CONSTEXPR
+    1945              :     inline pair<_InputIterator1, _InputIterator2>
+    1946              :     mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
+    1947              :              _InputIterator2 __first2, _BinaryPredicate __binary_pred)
+    1948              :     {
+    1949              :       // concept requirements
+    1950              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+    1951              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+    1952              :       __glibcxx_requires_valid_range(__first1, __last1);
+    1953              : 
+    1954              :       return _GLIBCXX_STD_A::__mismatch(__first1, __last1, __first2,
+    1955              :         __gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
+    1956              :     }
+    1957              : 
+    1958              : #if __cplusplus > 201103L
+    1959              : 
+    1960              :   template<typename _InputIterator1, typename _InputIterator2,
+    1961              :            typename _BinaryPredicate>
+    1962              :     _GLIBCXX20_CONSTEXPR
+    1963              :     pair<_InputIterator1, _InputIterator2>
+    1964              :     __mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
+    1965              :                _InputIterator2 __first2, _InputIterator2 __last2,
+    1966              :                _BinaryPredicate __binary_pred)
+    1967              :     {
+    1968              :       while (__first1 != __last1 && __first2 != __last2
+    1969              :              && __binary_pred(__first1, __first2))
+    1970              :         {
+    1971              :           ++__first1;
+    1972              :           ++__first2;
+    1973              :         }
+    1974              :       return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
+    1975              :     }
+    1976              : 
+    1977              :   /**
+    1978              :    *  @brief Finds the places in ranges which don't match.
+    1979              :    *  @ingroup non_mutating_algorithms
+    1980              :    *  @param  __first1  An input iterator.
+    1981              :    *  @param  __last1   An input iterator.
+    1982              :    *  @param  __first2  An input iterator.
+    1983              :    *  @param  __last2   An input iterator.
+    1984              :    *  @return   A pair of iterators pointing to the first mismatch.
+    1985              :    *
+    1986              :    *  This compares the elements of two ranges using @c == and returns a pair
+    1987              :    *  of iterators.  The first iterator points into the first range, the
+    1988              :    *  second iterator points into the second range, and the elements pointed
+    1989              :    *  to by the iterators are not equal.
+    1990              :   */
+    1991              :   template<typename _InputIterator1, typename _InputIterator2>
+    1992              :     _GLIBCXX20_CONSTEXPR
+    1993              :     inline pair<_InputIterator1, _InputIterator2>
+    1994              :     mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
+    1995              :              _InputIterator2 __first2, _InputIterator2 __last2)
+    1996              :     {
+    1997              :       // concept requirements
+    1998              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+    1999              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+    2000              :       __glibcxx_function_requires(_EqualOpConcept<
+    2001              :             typename iterator_traits<_InputIterator1>::value_type,
+    2002              :             typename iterator_traits<_InputIterator2>::value_type>)
+    2003              :       __glibcxx_requires_valid_range(__first1, __last1);
+    2004              :       __glibcxx_requires_valid_range(__first2, __last2);
+    2005              : 
+    2006              :       return _GLIBCXX_STD_A::__mismatch(__first1, __last1, __first2, __last2,
+    2007              :                              __gnu_cxx::__ops::__iter_equal_to_iter());
+    2008              :     }
+    2009              : 
+    2010              :   /**
+    2011              :    *  @brief Finds the places in ranges which don't match.
+    2012              :    *  @ingroup non_mutating_algorithms
+    2013              :    *  @param  __first1  An input iterator.
+    2014              :    *  @param  __last1   An input iterator.
+    2015              :    *  @param  __first2  An input iterator.
+    2016              :    *  @param  __last2   An input iterator.
+    2017              :    *  @param __binary_pred A binary predicate @link functors
+    2018              :    *         functor@endlink.
+    2019              :    *  @return   A pair of iterators pointing to the first mismatch.
+    2020              :    *
+    2021              :    *  This compares the elements of two ranges using the binary_pred
+    2022              :    *  parameter, and returns a pair
+    2023              :    *  of iterators.  The first iterator points into the first range, the
+    2024              :    *  second iterator points into the second range, and the elements pointed
+    2025              :    *  to by the iterators are not equal.
+    2026              :   */
+    2027              :   template<typename _InputIterator1, typename _InputIterator2,
+    2028              :            typename _BinaryPredicate>
+    2029              :     _GLIBCXX20_CONSTEXPR
+    2030              :     inline pair<_InputIterator1, _InputIterator2>
+    2031              :     mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
+    2032              :              _InputIterator2 __first2, _InputIterator2 __last2,
+    2033              :              _BinaryPredicate __binary_pred)
+    2034              :     {
+    2035              :       // concept requirements
+    2036              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+    2037              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+    2038              :       __glibcxx_requires_valid_range(__first1, __last1);
+    2039              :       __glibcxx_requires_valid_range(__first2, __last2);
+    2040              : 
+    2041              :       return _GLIBCXX_STD_A::__mismatch(__first1, __last1, __first2, __last2,
+    2042              :                              __gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
+    2043              :     }
+    2044              : #endif
+    2045              : 
+    2046              : _GLIBCXX_END_NAMESPACE_ALGO
+    2047              : 
+    2048              :   /// This is an overload used by find algos for the Input Iterator case.
+    2049              :   template<typename _InputIterator, typename _Predicate>
+    2050              :     _GLIBCXX20_CONSTEXPR
+    2051              :     inline _InputIterator
+    2052          318 :     __find_if(_InputIterator __first, _InputIterator __last,
+    2053              :               _Predicate __pred, input_iterator_tag)
+    2054              :     {
+    2055          518 :       while (__first != __last && !__pred(__first))
+    2056          200 :         ++__first;
+    2057          318 :       return __first;
+    2058              :     }
+    2059              : 
+    2060              :   /// This is an overload used by find algos for the RAI case.
+    2061              :   template<typename _RandomAccessIterator, typename _Predicate>
+    2062              :     _GLIBCXX20_CONSTEXPR
+    2063              :     _RandomAccessIterator
+    2064      9580258 :     __find_if(_RandomAccessIterator __first, _RandomAccessIterator __last,
+    2065              :               _Predicate __pred, random_access_iterator_tag)
+    2066              :     {
+    2067              :       typename iterator_traits<_RandomAccessIterator>::difference_type
+    2068      9580258 :         __trip_count = (__last - __first) >> 2;
+    2069              : 
+    2070    216179562 :       for (; __trip_count > 0; --__trip_count)
+    2071              :         {
+    2072    211234736 :           if (__pred(__first))
+    2073       747380 :             return __first;
+    2074    210487356 :           ++__first;
+    2075              : 
+    2076    210487356 :           if (__pred(__first))
+    2077       940952 :             return __first;
+    2078    209546404 :           ++__first;
+    2079              : 
+    2080    209546404 :           if (__pred(__first))
+    2081       859296 :             return __first;
+    2082    208687108 :           ++__first;
+    2083              : 
+    2084    208687108 :           if (__pred(__first))
+    2085      2087804 :             return __first;
+    2086    206599304 :           ++__first;
+    2087              :         }
+    2088              : 
+    2089      4944826 :       switch (__last - __first)
+    2090              :         {
+    2091      1197986 :         case 3:
+    2092      1197986 :           if (__pred(__first))
+    2093        70268 :             return __first;
+    2094      1127718 :           ++__first;
+    2095              :           // FALLTHRU
+    2096      1670146 :         case 2:
+    2097      1670146 :           if (__pred(__first))
+    2098       115966 :             return __first;
+    2099      1554180 :           ++__first;
+    2100              :           // FALLTHRU
+    2101      4753436 :         case 1:
+    2102      4753436 :           if (__pred(__first))
+    2103      4740534 :             return __first;
+    2104        12902 :           ++__first;
+    2105              :           // FALLTHRU
+    2106        18058 :         case 0:
+    2107              :         default:
+    2108        18058 :           return __last;
+    2109              :         }
+    2110              :     }
+    2111              : 
+    2112              :   template<typename _Iterator, typename _Predicate>
+    2113              :     _GLIBCXX20_CONSTEXPR
+    2114              :     inline _Iterator
+    2115      9580412 :     __find_if(_Iterator __first, _Iterator __last, _Predicate __pred)
+    2116              :     {
+    2117      9580412 :       return __find_if(__first, __last, __pred,
+    2118      9580412 :                        std::__iterator_category(__first));
+    2119              :     }
+    2120              : 
+    2121              :   template<typename _InputIterator, typename _Predicate>
+    2122              :     _GLIBCXX20_CONSTEXPR
+    2123              :     typename iterator_traits<_InputIterator>::difference_type
+    2124              :     __count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred)
+    2125              :     {
+    2126              :       typename iterator_traits<_InputIterator>::difference_type __n = 0;
+    2127              :       for (; __first != __last; ++__first)
+    2128              :         if (__pred(__first))
+    2129              :           ++__n;
+    2130              :       return __n;
+    2131              :     }
+    2132              : 
+    2133              :   template<typename _ForwardIterator, typename _Predicate>
+    2134              :     _GLIBCXX20_CONSTEXPR
+    2135              :     _ForwardIterator
+    2136         1176 :     __remove_if(_ForwardIterator __first, _ForwardIterator __last,
+    2137              :                 _Predicate __pred)
+    2138              :     {
+    2139         1176 :       __first = std::__find_if(__first, __last, __pred);
+    2140         1176 :       if (__first == __last)
+    2141           32 :         return __first;
+    2142         1144 :       _ForwardIterator __result = __first;
+    2143         1144 :       ++__first;
+    2144         6270 :       for (; __first != __last; ++__first)
+    2145         5126 :         if (!__pred(__first))
+    2146              :           {
+    2147         4472 :             *__result = _GLIBCXX_MOVE(*__first);
+    2148         4472 :             ++__result;
+    2149              :           }
+    2150         1144 :       return __result;
+    2151              :     }
+    2152              : 
+    2153              : #if __cplusplus >= 201103L
+    2154              :   template<typename _ForwardIterator1, typename _ForwardIterator2,
+    2155              :            typename _BinaryPredicate>
+    2156              :     _GLIBCXX20_CONSTEXPR
+    2157              :     bool
+    2158              :     __is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+    2159              :                      _ForwardIterator2 __first2, _BinaryPredicate __pred)
+    2160              :     {
+    2161              :       // Efficiently compare identical prefixes:  O(N) if sequences
+    2162              :       // have the same elements in the same order.
+    2163              :       for (; __first1 != __last1; ++__first1, (void)++__first2)
+    2164              :         if (!__pred(__first1, __first2))
+    2165              :           break;
+    2166              : 
+    2167              :       if (__first1 == __last1)
+    2168              :         return true;
+    2169              : 
+    2170              :       // Establish __last2 assuming equal ranges by iterating over the
+    2171              :       // rest of the list.
+    2172              :       _ForwardIterator2 __last2 = __first2;
+    2173              :       std::advance(__last2, std::distance(__first1, __last1));
+    2174              :       for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan)
+    2175              :         {
+    2176              :           if (__scan != std::__find_if(__first1, __scan,
+    2177              :                           __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)))
+    2178              :             continue; // We've seen this one before.
+    2179              : 
+    2180              :           auto __matches
+    2181              :             = std::__count_if(__first2, __last2,
+    2182              :                         __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan));
+    2183              :           if (0 == __matches ||
+    2184              :               std::__count_if(__scan, __last1,
+    2185              :                         __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))
+    2186              :               != __matches)
+    2187              :             return false;
+    2188              :         }
+    2189              :       return true;
+    2190              :     }
+    2191              : 
+    2192              :   /**
+    2193              :    *  @brief  Checks whether a permutation of the second sequence is equal
+    2194              :    *          to the first sequence.
+    2195              :    *  @ingroup non_mutating_algorithms
+    2196              :    *  @param  __first1  Start of first range.
+    2197              :    *  @param  __last1   End of first range.
+    2198              :    *  @param  __first2  Start of second range.
+    2199              :    *  @return true if there exists a permutation of the elements in the range
+    2200              :    *          [__first2, __first2 + (__last1 - __first1)), beginning with
+    2201              :    *          ForwardIterator2 begin, such that equal(__first1, __last1, begin)
+    2202              :    *          returns true; otherwise, returns false.
+    2203              :   */
+    2204              :   template<typename _ForwardIterator1, typename _ForwardIterator2>
+    2205              :     _GLIBCXX20_CONSTEXPR
+    2206              :     inline bool
+    2207              :     is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+    2208              :                    _ForwardIterator2 __first2)
+    2209              :     {
+    2210              :       // concept requirements
+    2211              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator1>)
+    2212              :       __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator2>)
+    2213              :       __glibcxx_function_requires(_EqualOpConcept<
+    2214              :                 typename iterator_traits<_ForwardIterator1>::value_type,
+    2215              :                 typename iterator_traits<_ForwardIterator2>::value_type>)
+    2216              :       __glibcxx_requires_valid_range(__first1, __last1);
+    2217              : 
+    2218              :       return std::__is_permutation(__first1, __last1, __first2,
+    2219              :                                    __gnu_cxx::__ops::__iter_equal_to_iter());
+    2220              :     }
+    2221              : #endif // C++11
+    2222              : 
+    2223              : _GLIBCXX_END_NAMESPACE_VERSION
+    2224              : } // namespace std
+    2225              : 
+    2226              : // NB: This file is included within many other C++ includes, as a way
+    2227              : // of getting the base algorithms. So, make sure that parallel bits
+    2228              : // come in too if requested.
+    2229              : #ifdef _GLIBCXX_PARALLEL
+    2230              : # include <parallel/algobase.h>
+    2231              : #endif
+    2232              : 
+    2233              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_bvector.h.func-c.html b/html/usr/include/c++/13/bits/stl_bvector.h.func-c.html new file mode 100644 index 0000000..88a24af --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_bvector.h.func-c.html @@ -0,0 +1,320 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_bvector.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_bvector.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:95.5 %111106
Test Date:2024-04-30 13:17:26Functions:100.0 %3535
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt13_Bvector_baseISaIbEE11_M_allocateEm966
_ZNSt13_Bvector_baseISaIbEE13_Bvector_implC2ERKSaImE966
_ZNSt13_Bvector_baseISaIbEE13_M_deallocateEv966
_ZNSt13_Bvector_baseISaIbEE18_Bvector_impl_data8_M_resetEv966
_ZNSt13_Bvector_baseISaIbEEC2ERKS0_966
_ZNSt13_Bvector_baseISaIbEED2Ev966
_ZNSt6vectorIbSaIbEE13_M_initializeEm966
_ZNSt6vectorIbSaIbEE19_M_initialize_valueEb966
_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_966
_ZNSt6vectorIbSaIbEED2Ev966
_ZSt16__fill_bvector_nPmmb966
_ZNSt14_Bit_referenceaSEb1104
_ZNKSt14_Bit_referencecvbEv1454
_ZNKSt6vectorIbSaIbEE14_M_range_checkEm1454
_ZNKSt6vectorIbSaIbEE3endEv1454
_ZNKSt6vectorIbSaIbEE4sizeEv1454
_ZNKSt6vectorIbSaIbEE5beginEv1454
_ZNSt19_Bit_const_iteratorC2EPmj1454
_ZNSt19_Bit_const_iteratorC2ERKSt13_Bit_iterator1454
_ZNSt6vectorIbSaIbEE2atEm1454
_ZStmiRKSt18_Bit_iterator_baseS1_1454
_ZNKSt13_Bvector_baseISaIbEE13_Bvector_impl11_M_end_addrEv1932
_ZNSt13_Bvector_baseISaIbEE18_Bvector_impl_dataC2Ev1932
_ZNSt13_Bvector_baseISaIbEE8_S_nwordEm1932
_ZNKSt13_Bit_iteratordeEv2558
_ZNKSt13_Bit_iteratorixEl2558
_ZNSt14_Bit_referenceC2EPmm2558
_ZNSt6vectorIbSaIbEE5beginEv2558
_ZNSt6vectorIbSaIbEEixEm2558
_ZNSt13_Bit_iteratorC2EPmj3524
_ZNSt13_Bit_iteratorpLEl3524
_ZNSt18_Bit_iterator_base7_M_incrEl3524
_ZStplRKSt13_Bit_iteratorl3524
_ZNSt13_Bit_iteratorC2Ev3864
_ZNSt18_Bit_iterator_baseC2EPmj10296
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_bvector.h.func.html b/html/usr/include/c++/13/bits/stl_bvector.h.func.html new file mode 100644 index 0000000..f952742 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_bvector.h.func.html @@ -0,0 +1,320 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_bvector.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_bvector.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:95.5 %111106
Test Date:2024-04-30 13:17:26Functions:100.0 %3535
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt13_Bit_iteratordeEv2558
_ZNKSt13_Bit_iteratorixEl2558
_ZNKSt13_Bvector_baseISaIbEE13_Bvector_impl11_M_end_addrEv1932
_ZNKSt14_Bit_referencecvbEv1454
_ZNKSt6vectorIbSaIbEE14_M_range_checkEm1454
_ZNKSt6vectorIbSaIbEE3endEv1454
_ZNKSt6vectorIbSaIbEE4sizeEv1454
_ZNKSt6vectorIbSaIbEE5beginEv1454
_ZNSt13_Bit_iteratorC2EPmj3524
_ZNSt13_Bit_iteratorC2Ev3864
_ZNSt13_Bit_iteratorpLEl3524
_ZNSt13_Bvector_baseISaIbEE11_M_allocateEm966
_ZNSt13_Bvector_baseISaIbEE13_Bvector_implC2ERKSaImE966
_ZNSt13_Bvector_baseISaIbEE13_M_deallocateEv966
_ZNSt13_Bvector_baseISaIbEE18_Bvector_impl_data8_M_resetEv966
_ZNSt13_Bvector_baseISaIbEE18_Bvector_impl_dataC2Ev1932
_ZNSt13_Bvector_baseISaIbEE8_S_nwordEm1932
_ZNSt13_Bvector_baseISaIbEEC2ERKS0_966
_ZNSt13_Bvector_baseISaIbEED2Ev966
_ZNSt14_Bit_referenceC2EPmm2558
_ZNSt14_Bit_referenceaSEb1104
_ZNSt18_Bit_iterator_base7_M_incrEl3524
_ZNSt18_Bit_iterator_baseC2EPmj10296
_ZNSt19_Bit_const_iteratorC2EPmj1454
_ZNSt19_Bit_const_iteratorC2ERKSt13_Bit_iterator1454
_ZNSt6vectorIbSaIbEE13_M_initializeEm966
_ZNSt6vectorIbSaIbEE19_M_initialize_valueEb966
_ZNSt6vectorIbSaIbEE2atEm1454
_ZNSt6vectorIbSaIbEE5beginEv2558
_ZNSt6vectorIbSaIbEEC2EmRKbRKS0_966
_ZNSt6vectorIbSaIbEED2Ev966
_ZNSt6vectorIbSaIbEEixEm2558
_ZSt16__fill_bvector_nPmmb966
_ZStmiRKSt18_Bit_iterator_baseS1_1454
_ZStplRKSt13_Bit_iteratorl3524
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_bvector.h.gcov.html b/html/usr/include/c++/13/bits/stl_bvector.h.gcov.html new file mode 100644 index 0000000..d6b9aee --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_bvector.h.gcov.html @@ -0,0 +1,1709 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_bvector.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_bvector.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:95.5 %111106
Test Date:2024-04-30 13:17:26Functions:100.0 %3535
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // vector<bool> specialization -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1996-1999
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/stl_bvector.h
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{vector}
+      54              :  */
+      55              : 
+      56              : #ifndef _STL_BVECTOR_H
+      57              : #define _STL_BVECTOR_H 1
+      58              : 
+      59              : #ifndef _GLIBCXX_ALWAYS_INLINE
+      60              : #define _GLIBCXX_ALWAYS_INLINE inline __attribute__((__always_inline__))
+      61              : #endif
+      62              : 
+      63              : #if __cplusplus >= 201103L
+      64              : #include <initializer_list>
+      65              : #include <bits/functional_hash.h>
+      66              : #endif
+      67              : 
+      68              : namespace std _GLIBCXX_VISIBILITY(default)
+      69              : {
+      70              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      71              : 
+      72              :   typedef unsigned long _Bit_type;
+      73              :   enum { _S_word_bit = int(__CHAR_BIT__ * sizeof(_Bit_type)) };
+      74              : 
+      75              :   __attribute__((__nonnull__))
+      76              :   _GLIBCXX20_CONSTEXPR
+      77              :   void
+      78              :   __fill_bvector_n(_Bit_type*, size_t, bool) _GLIBCXX_NOEXCEPT;
+      79              : 
+      80              : _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
+      81              : 
+      82              :   struct _Bit_reference
+      83              :   {
+      84              :     _Bit_type * _M_p;
+      85              :     _Bit_type _M_mask;
+      86              : 
+      87              :     _GLIBCXX20_CONSTEXPR
+      88         2558 :     _Bit_reference(_Bit_type * __x, _Bit_type __y)
+      89         2558 :     : _M_p(__x), _M_mask(__y) { }
+      90              : 
+      91              :     _GLIBCXX20_CONSTEXPR
+      92              :     _Bit_reference() _GLIBCXX_NOEXCEPT : _M_p(0), _M_mask(0) { }
+      93              : 
+      94              : #if __cplusplus >= 201103L
+      95              :     _Bit_reference(const _Bit_reference&) = default;
+      96              : #endif
+      97              : 
+      98              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+      99         1454 :     operator bool() const _GLIBCXX_NOEXCEPT
+     100         1454 :     { return !!(*_M_p & _M_mask); }
+     101              : 
+     102              :     _GLIBCXX20_CONSTEXPR
+     103              :     _Bit_reference&
+     104         1104 :     operator=(bool __x) _GLIBCXX_NOEXCEPT
+     105              :     {
+     106         1104 :       if (__x)
+     107         1104 :         *_M_p |= _M_mask;
+     108              :       else
+     109            0 :         *_M_p &= ~_M_mask;
+     110         1104 :       return *this;
+     111              :     }
+     112              : 
+     113              : #if __cplusplus > 202002L
+     114              :     constexpr const _Bit_reference&
+     115              :     operator=(bool __x) const noexcept
+     116              :     {
+     117              :       if (__x)
+     118              :         *_M_p |= _M_mask;
+     119              :       else
+     120              :         *_M_p &= ~_M_mask;
+     121              :       return *this;
+     122              :     }
+     123              : #endif // C++23
+     124              : 
+     125              :     _GLIBCXX20_CONSTEXPR
+     126              :     _Bit_reference&
+     127              :     operator=(const _Bit_reference& __x) _GLIBCXX_NOEXCEPT
+     128              :     { return *this = bool(__x); }
+     129              : 
+     130              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     131              :     bool
+     132              :     operator==(const _Bit_reference& __x) const
+     133              :     { return bool(*this) == bool(__x); }
+     134              : 
+     135              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     136              :     bool
+     137              :     operator<(const _Bit_reference& __x) const
+     138              :     { return !bool(*this) && bool(__x); }
+     139              : 
+     140              :     _GLIBCXX20_CONSTEXPR
+     141              :     void
+     142              :     flip() _GLIBCXX_NOEXCEPT
+     143              :     { *_M_p ^= _M_mask; }
+     144              : 
+     145              : #if __cplusplus >= 201103L
+     146              :     _GLIBCXX20_CONSTEXPR
+     147              :     friend void
+     148              :     swap(_Bit_reference __x, _Bit_reference __y) noexcept
+     149              :     {
+     150              :       bool __tmp = __x;
+     151              :       __x = __y;
+     152              :       __y = __tmp;
+     153              :     }
+     154              : 
+     155              :     _GLIBCXX20_CONSTEXPR
+     156              :     friend void
+     157              :     swap(_Bit_reference __x, bool& __y) noexcept
+     158              :     {
+     159              :       bool __tmp = __x;
+     160              :       __x = __y;
+     161              :       __y = __tmp;
+     162              :     }
+     163              : 
+     164              :     _GLIBCXX20_CONSTEXPR
+     165              :     friend void
+     166              :     swap(bool& __x, _Bit_reference __y) noexcept
+     167              :     {
+     168              :       bool __tmp = __x;
+     169              :       __x = __y;
+     170              :       __y = __tmp;
+     171              :     }
+     172              : #endif
+     173              :   };
+     174              : 
+     175              : // Ignore warnings about std::iterator.
+     176              : #pragma GCC diagnostic push
+     177              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+     178              :   struct _Bit_iterator_base
+     179              :   : public std::iterator<std::random_access_iterator_tag, bool>
+     180              :   {
+     181              :     _Bit_type * _M_p;
+     182              :     unsigned int _M_offset;
+     183              : 
+     184              :     _GLIBCXX20_CONSTEXPR _GLIBCXX_ALWAYS_INLINE
+     185              :     void
+     186              :     _M_assume_normalized() const
+     187              :     {
+     188              : #if __has_attribute(__assume__) && !defined(__clang__)
+     189         8990 :       unsigned int __ofst = _M_offset;
+     190         1454 :       __attribute__ ((__assume__ (__ofst < unsigned(_S_word_bit))));
+     191              : #endif
+     192         8990 :     }
+     193              : 
+     194              :     _GLIBCXX20_CONSTEXPR
+     195        10296 :     _Bit_iterator_base(_Bit_type * __x, unsigned int __y)
+     196        10296 :     : _M_p(__x), _M_offset(__y) { }
+     197              : 
+     198              :     _GLIBCXX20_CONSTEXPR
+     199              :     void
+     200              :     _M_bump_up()
+     201              :     {
+     202              :       _M_assume_normalized();
+     203              :       if (_M_offset++ == int(_S_word_bit) - 1)
+     204              :         {
+     205              :           _M_offset = 0;
+     206              :           ++_M_p;
+     207              :         }
+     208              :     }
+     209              : 
+     210              :     _GLIBCXX20_CONSTEXPR
+     211              :     void
+     212              :     _M_bump_down()
+     213              :     {
+     214              :       _M_assume_normalized();
+     215              :       if (_M_offset-- == 0)
+     216              :         {
+     217              :           _M_offset = int(_S_word_bit) - 1;
+     218              :           --_M_p;
+     219              :         }
+     220              :     }
+     221              : 
+     222              :     _GLIBCXX20_CONSTEXPR
+     223              :     void
+     224         3524 :     _M_incr(ptrdiff_t __i)
+     225              :     {
+     226              :       _M_assume_normalized();
+     227         3524 :       difference_type __n = __i + _M_offset;
+     228         3524 :       _M_p += __n / int(_S_word_bit);
+     229         3524 :       __n = __n % int(_S_word_bit);
+     230         3524 :       if (__n < 0)
+     231              :         {
+     232            0 :           __n += int(_S_word_bit);
+     233            0 :           --_M_p;
+     234              :         }
+     235         3524 :       _M_offset = static_cast<unsigned int>(__n);
+     236         3524 :     }
+     237              : 
+     238              :     _GLIBCXX_NODISCARD
+     239              :     friend _GLIBCXX20_CONSTEXPR bool
+     240              :     operator==(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
+     241              :     {
+     242              :       __x._M_assume_normalized();
+     243              :       __y._M_assume_normalized();
+     244              :       return __x._M_p == __y._M_p && __x._M_offset == __y._M_offset;
+     245              :     }
+     246              : 
+     247              : #if __cpp_lib_three_way_comparison
+     248              :     [[nodiscard]]
+     249              :     friend constexpr strong_ordering
+     250              :     operator<=>(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
+     251              :     noexcept
+     252              :     {
+     253              :       __x._M_assume_normalized();
+     254              :       __y._M_assume_normalized();
+     255              :       if (const auto __cmp = __x._M_p <=> __y._M_p; __cmp != 0)
+     256              :         return __cmp;
+     257              :       return __x._M_offset <=> __y._M_offset;
+     258              :     }
+     259              : #else
+     260              :     _GLIBCXX_NODISCARD
+     261              :     friend bool
+     262              :     operator<(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
+     263              :     {
+     264              :       __x._M_assume_normalized();
+     265              :       __y._M_assume_normalized();
+     266              :       return __x._M_p < __y._M_p
+     267              :             || (__x._M_p == __y._M_p && __x._M_offset < __y._M_offset);
+     268              :     }
+     269              : 
+     270              :     _GLIBCXX_NODISCARD
+     271              :     friend bool
+     272              :     operator!=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
+     273              :     { return !(__x == __y); }
+     274              : 
+     275              :     _GLIBCXX_NODISCARD
+     276              :     friend bool
+     277              :     operator>(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
+     278              :     { return __y < __x; }
+     279              : 
+     280              :     _GLIBCXX_NODISCARD
+     281              :     friend bool
+     282              :     operator<=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
+     283              :     { return !(__y < __x); }
+     284              : 
+     285              :     _GLIBCXX_NODISCARD
+     286              :     friend bool
+     287              :     operator>=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
+     288              :     { return !(__x < __y); }
+     289              : #endif // three-way comparison
+     290              : 
+     291              :     friend _GLIBCXX20_CONSTEXPR ptrdiff_t
+     292         1454 :     operator-(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
+     293              :     {
+     294              :       __x._M_assume_normalized();
+     295              :       __y._M_assume_normalized();
+     296         1454 :       return (int(_S_word_bit) * (__x._M_p - __y._M_p)
+     297         1454 :               + __x._M_offset - __y._M_offset);
+     298              :     }
+     299              :   };
+     300              : #pragma GCC diagnostic pop
+     301              : 
+     302              :   struct _Bit_iterator : public _Bit_iterator_base
+     303              :   {
+     304              :     typedef _Bit_reference  reference;
+     305              : #if __cplusplus > 201703L
+     306              :     typedef void            pointer;
+     307              : #else
+     308              :     typedef _Bit_reference* pointer;
+     309              : #endif
+     310              :     typedef _Bit_iterator   iterator;
+     311              : 
+     312              :     _GLIBCXX20_CONSTEXPR
+     313         3864 :     _Bit_iterator() : _Bit_iterator_base(0, 0) { }
+     314              : 
+     315              :     _GLIBCXX20_CONSTEXPR
+     316         3524 :     _Bit_iterator(_Bit_type * __x, unsigned int __y)
+     317         3524 :     : _Bit_iterator_base(__x, __y) { }
+     318              : 
+     319              :     _GLIBCXX20_CONSTEXPR
+     320              :     iterator
+     321              :     _M_const_cast() const
+     322              :     { return *this; }
+     323              : 
+     324              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     325              :     reference
+     326         2558 :     operator*() const
+     327              :     {
+     328         2558 :       _M_assume_normalized();
+     329         2558 :       return reference(_M_p, 1UL << _M_offset);
+     330              :     }
+     331              : 
+     332              :     _GLIBCXX20_CONSTEXPR
+     333              :     iterator&
+     334              :     operator++()
+     335              :     {
+     336              :       _M_bump_up();
+     337              :       return *this;
+     338              :     }
+     339              : 
+     340              :     _GLIBCXX20_CONSTEXPR
+     341              :     iterator
+     342              :     operator++(int)
+     343              :     {
+     344              :       iterator __tmp = *this;
+     345              :       _M_bump_up();
+     346              :       return __tmp;
+     347              :     }
+     348              : 
+     349              :     _GLIBCXX20_CONSTEXPR
+     350              :     iterator&
+     351              :     operator--()
+     352              :     {
+     353              :       _M_bump_down();
+     354              :       return *this;
+     355              :     }
+     356              : 
+     357              :     _GLIBCXX20_CONSTEXPR
+     358              :     iterator
+     359              :     operator--(int)
+     360              :     {
+     361              :       iterator __tmp = *this;
+     362              :       _M_bump_down();
+     363              :       return __tmp;
+     364              :     }
+     365              : 
+     366              :     _GLIBCXX20_CONSTEXPR
+     367              :     iterator&
+     368         3524 :     operator+=(difference_type __i)
+     369              :     {
+     370         3524 :       _M_incr(__i);
+     371         3524 :       return *this;
+     372              :     }
+     373              : 
+     374              :     _GLIBCXX20_CONSTEXPR
+     375              :     iterator&
+     376              :     operator-=(difference_type __i)
+     377              :     {
+     378              :       *this += -__i;
+     379              :       return *this;
+     380              :     }
+     381              : 
+     382              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     383              :     reference
+     384         2558 :     operator[](difference_type __i) const
+     385         2558 :     { return *(*this + __i); }
+     386              : 
+     387              :     _GLIBCXX_NODISCARD
+     388              :     friend _GLIBCXX20_CONSTEXPR iterator
+     389         3524 :     operator+(const iterator& __x, difference_type __n)
+     390              :     {
+     391         3524 :       iterator __tmp = __x;
+     392         3524 :       __tmp += __n;
+     393         3524 :       return __tmp;
+     394              :     }
+     395              : 
+     396              :     _GLIBCXX_NODISCARD
+     397              :     friend _GLIBCXX20_CONSTEXPR iterator
+     398              :     operator+(difference_type __n, const iterator& __x)
+     399              :     { return __x + __n; }
+     400              : 
+     401              :     _GLIBCXX_NODISCARD
+     402              :     friend _GLIBCXX20_CONSTEXPR iterator
+     403              :     operator-(const iterator& __x, difference_type __n)
+     404              :     {
+     405              :       iterator __tmp = __x;
+     406              :       __tmp -= __n;
+     407              :       return __tmp;
+     408              :     }
+     409              :   };
+     410              : 
+     411              :   struct _Bit_const_iterator : public _Bit_iterator_base
+     412              :   {
+     413              :     typedef bool                 reference;
+     414              :     typedef bool                 const_reference;
+     415              : #if __cplusplus > 201703L
+     416              :     typedef void            pointer;
+     417              : #else
+     418              :     typedef const bool*          pointer;
+     419              : #endif
+     420              :     typedef _Bit_const_iterator  const_iterator;
+     421              : 
+     422              :     _GLIBCXX20_CONSTEXPR
+     423              :     _Bit_const_iterator() : _Bit_iterator_base(0, 0) { }
+     424              : 
+     425              :     _GLIBCXX20_CONSTEXPR
+     426         1454 :     _Bit_const_iterator(_Bit_type * __x, unsigned int __y)
+     427         1454 :     : _Bit_iterator_base(__x, __y) { }
+     428              : 
+     429              :     _GLIBCXX20_CONSTEXPR
+     430         1454 :     _Bit_const_iterator(const _Bit_iterator& __x)
+     431         1454 :     : _Bit_iterator_base(__x._M_p, __x._M_offset) { }
+     432              : 
+     433              :     _GLIBCXX20_CONSTEXPR
+     434              :     _Bit_iterator
+     435              :     _M_const_cast() const
+     436              :     { return _Bit_iterator(_M_p, _M_offset); }
+     437              : 
+     438              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     439              :     const_reference
+     440              :     operator*() const
+     441              :     {
+     442              :       _M_assume_normalized();
+     443              :       return _Bit_reference(_M_p, 1UL << _M_offset);
+     444              :     }
+     445              : 
+     446              :     _GLIBCXX20_CONSTEXPR
+     447              :     const_iterator&
+     448              :     operator++()
+     449              :     {
+     450              :       _M_bump_up();
+     451              :       return *this;
+     452              :     }
+     453              : 
+     454              :     _GLIBCXX20_CONSTEXPR
+     455              :     const_iterator
+     456              :     operator++(int)
+     457              :     {
+     458              :       const_iterator __tmp = *this;
+     459              :       _M_bump_up();
+     460              :       return __tmp;
+     461              :     }
+     462              : 
+     463              :     _GLIBCXX20_CONSTEXPR
+     464              :     const_iterator&
+     465              :     operator--()
+     466              :     {
+     467              :       _M_bump_down();
+     468              :       return *this;
+     469              :     }
+     470              : 
+     471              :     _GLIBCXX20_CONSTEXPR
+     472              :     const_iterator
+     473              :     operator--(int)
+     474              :     {
+     475              :       const_iterator __tmp = *this;
+     476              :       _M_bump_down();
+     477              :       return __tmp;
+     478              :     }
+     479              : 
+     480              :     _GLIBCXX20_CONSTEXPR
+     481              :     const_iterator&
+     482              :     operator+=(difference_type __i)
+     483              :     {
+     484              :       _M_incr(__i);
+     485              :       return *this;
+     486              :     }
+     487              : 
+     488              :     _GLIBCXX20_CONSTEXPR
+     489              :     const_iterator&
+     490              :     operator-=(difference_type __i)
+     491              :     {
+     492              :       *this += -__i;
+     493              :       return *this;
+     494              :     }
+     495              : 
+     496              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     497              :     const_reference
+     498              :     operator[](difference_type __i) const
+     499              :     { return *(*this + __i); }
+     500              : 
+     501              :     _GLIBCXX_NODISCARD
+     502              :     friend _GLIBCXX20_CONSTEXPR const_iterator
+     503              :     operator+(const const_iterator& __x, difference_type __n)
+     504              :     {
+     505              :       const_iterator __tmp = __x;
+     506              :       __tmp += __n;
+     507              :       return __tmp;
+     508              :     }
+     509              : 
+     510              :     _GLIBCXX_NODISCARD
+     511              :     friend _GLIBCXX20_CONSTEXPR const_iterator
+     512              :     operator-(const const_iterator& __x, difference_type __n)
+     513              :     {
+     514              :       const_iterator __tmp = __x;
+     515              :       __tmp -= __n;
+     516              :       return __tmp;
+     517              :     }
+     518              : 
+     519              :     _GLIBCXX_NODISCARD
+     520              :     friend _GLIBCXX20_CONSTEXPR const_iterator
+     521              :     operator+(difference_type __n, const const_iterator& __x)
+     522              :     { return __x + __n; }
+     523              :   };
+     524              : 
+     525              :   template<typename _Alloc>
+     526              :     struct _Bvector_base
+     527              :     {
+     528              :       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+     529              :         rebind<_Bit_type>::other _Bit_alloc_type;
+     530              :       typedef typename __gnu_cxx::__alloc_traits<_Bit_alloc_type>
+     531              :         _Bit_alloc_traits;
+     532              :       typedef typename _Bit_alloc_traits::pointer _Bit_pointer;
+     533              : 
+     534              :       struct _Bvector_impl_data
+     535              :       {
+     536              : #if !_GLIBCXX_INLINE_VERSION
+     537              :         _Bit_iterator   _M_start;
+     538              : #else
+     539              :         // We don't need the offset field for the start, it's always zero.
+     540              :         struct {
+     541              :           _Bit_type* _M_p;
+     542              :           // Allow assignment from iterators (assume offset is zero):
+     543              :           _GLIBCXX20_CONSTEXPR
+     544              :           void operator=(_Bit_iterator __it) { _M_p = __it._M_p; }
+     545              :         } _M_start;
+     546              : #endif
+     547              :         _Bit_iterator   _M_finish;
+     548              :         _Bit_pointer    _M_end_of_storage;
+     549              : 
+     550              :         _GLIBCXX20_CONSTEXPR
+     551         1932 :         _Bvector_impl_data() _GLIBCXX_NOEXCEPT
+     552         1932 :         : _M_start(), _M_finish(), _M_end_of_storage()
+     553         1932 :         { }
+     554              : 
+     555              : #if __cplusplus >= 201103L
+     556              :         _Bvector_impl_data(const _Bvector_impl_data&) = default;
+     557              : 
+     558              :         _Bvector_impl_data&
+     559              :         operator=(const _Bvector_impl_data&) = default;
+     560              : 
+     561              :         _GLIBCXX20_CONSTEXPR
+     562              :         _Bvector_impl_data(_Bvector_impl_data&& __x) noexcept
+     563              :         : _Bvector_impl_data(__x)
+     564              :         { __x._M_reset(); }
+     565              : 
+     566              :         _GLIBCXX20_CONSTEXPR
+     567              :         void
+     568              :         _M_move_data(_Bvector_impl_data&& __x) noexcept
+     569              :         {
+     570              :           *this = __x;
+     571              :           __x._M_reset();
+     572              :         }
+     573              : #endif
+     574              : 
+     575              :         _GLIBCXX20_CONSTEXPR
+     576              :         void
+     577          966 :         _M_reset() _GLIBCXX_NOEXCEPT
+     578          966 :         { *this = _Bvector_impl_data(); }
+     579              : 
+     580              :         _GLIBCXX20_CONSTEXPR
+     581              :         void
+     582              :         _M_swap_data(_Bvector_impl_data& __x) _GLIBCXX_NOEXCEPT
+     583              :         {
+     584              :           // Do not use std::swap(_M_start, __x._M_start), etc as it loses
+     585              :           // information used by TBAA.
+     586              :           std::swap(*this, __x);
+     587              :         }
+     588              :       };
+     589              : 
+     590              :       struct _Bvector_impl
+     591              :         : public _Bit_alloc_type, public _Bvector_impl_data
+     592              :       {
+     593              :         _GLIBCXX20_CONSTEXPR
+     594              :         _Bvector_impl() _GLIBCXX_NOEXCEPT_IF(
+     595              :           is_nothrow_default_constructible<_Bit_alloc_type>::value)
+     596              :         : _Bit_alloc_type()
+     597              :         { }
+     598              : 
+     599              :         _GLIBCXX20_CONSTEXPR
+     600          966 :         _Bvector_impl(const _Bit_alloc_type& __a) _GLIBCXX_NOEXCEPT
+     601          966 :         : _Bit_alloc_type(__a)
+     602          966 :         { }
+     603              : 
+     604              : #if __cplusplus >= 201103L
+     605              :         // Not defaulted, to enforce noexcept(true) even when
+     606              :         // !is_nothrow_move_constructible<_Bit_alloc_type>.
+     607              :         _GLIBCXX20_CONSTEXPR
+     608              :         _Bvector_impl(_Bvector_impl&& __x) noexcept
+     609              :         : _Bit_alloc_type(std::move(__x)), _Bvector_impl_data(std::move(__x))
+     610              :         { }
+     611              : 
+     612              :         _GLIBCXX20_CONSTEXPR
+     613              :         _Bvector_impl(_Bit_alloc_type&& __a, _Bvector_impl&& __x) noexcept
+     614              :         : _Bit_alloc_type(std::move(__a)), _Bvector_impl_data(std::move(__x))
+     615              :         { }
+     616              : #endif
+     617              : 
+     618              :         _GLIBCXX20_CONSTEXPR
+     619              :         _Bit_type*
+     620         1932 :         _M_end_addr() const _GLIBCXX_NOEXCEPT
+     621              :         {
+     622         1932 :           if (this->_M_end_of_storage)
+     623         1932 :             return std::__addressof(this->_M_end_of_storage[-1]) + 1;
+     624            0 :           return 0;
+     625              :         }
+     626              :       };
+     627              : 
+     628              :     public:
+     629              :       typedef _Alloc allocator_type;
+     630              : 
+     631              :       _GLIBCXX20_CONSTEXPR
+     632              :       _Bit_alloc_type&
+     633              :       _M_get_Bit_allocator() _GLIBCXX_NOEXCEPT
+     634              :       { return this->_M_impl; }
+     635              : 
+     636              :       _GLIBCXX20_CONSTEXPR
+     637              :       const _Bit_alloc_type&
+     638              :       _M_get_Bit_allocator() const _GLIBCXX_NOEXCEPT
+     639              :       { return this->_M_impl; }
+     640              : 
+     641              :       _GLIBCXX20_CONSTEXPR
+     642              :       allocator_type
+     643              :       get_allocator() const _GLIBCXX_NOEXCEPT
+     644              :       { return allocator_type(_M_get_Bit_allocator()); }
+     645              : 
+     646              : #if __cplusplus >= 201103L
+     647              :       _Bvector_base() = default;
+     648              : #else
+     649              :       _Bvector_base() { }
+     650              : #endif
+     651              : 
+     652              :       _GLIBCXX20_CONSTEXPR
+     653          966 :       _Bvector_base(const allocator_type& __a)
+     654         1932 :       : _M_impl(__a) { }
+     655              : 
+     656              : #if __cplusplus >= 201103L
+     657              :       _Bvector_base(_Bvector_base&&) = default;
+     658              : 
+     659              :       _GLIBCXX20_CONSTEXPR
+     660              :       _Bvector_base(_Bvector_base&& __x, const allocator_type& __a) noexcept
+     661              :       : _M_impl(_Bit_alloc_type(__a), std::move(__x._M_impl))
+     662              :       { }
+     663              : #endif
+     664              : 
+     665              :       _GLIBCXX20_CONSTEXPR
+     666          966 :       ~_Bvector_base()
+     667          966 :       { this->_M_deallocate(); }
+     668              : 
+     669              :     protected:
+     670              :       _Bvector_impl _M_impl;
+     671              : 
+     672              :       _GLIBCXX20_CONSTEXPR
+     673              :       _Bit_pointer
+     674          966 :       _M_allocate(size_t __n)
+     675              :       {
+     676          966 :         _Bit_pointer __p = _Bit_alloc_traits::allocate(_M_impl, _S_nword(__n));
+     677              : #if __cpp_lib_is_constant_evaluated
+     678              :         if (std::is_constant_evaluated())
+     679              :         {
+     680              :           __n = _S_nword(__n);
+     681              :           for (size_t __i = 0; __i < __n; ++__i)
+     682              :             __p[__i] = 0ul;
+     683              :         }
+     684              : #endif
+     685          966 :         return __p;
+     686              :       }
+     687              : 
+     688              :       _GLIBCXX20_CONSTEXPR
+     689              :       void
+     690          966 :       _M_deallocate()
+     691              :       {
+     692          966 :         if (_M_impl._M_start._M_p)
+     693              :           {
+     694          966 :             const size_t __n = _M_impl._M_end_addr() - _M_impl._M_start._M_p;
+     695          966 :             _Bit_alloc_traits::deallocate(_M_impl,
+     696          966 :                                           _M_impl._M_end_of_storage - __n,
+     697              :                                           __n);
+     698          966 :             _M_impl._M_reset();
+     699              :           }
+     700          966 :       }
+     701              : 
+     702              : #if __cplusplus >= 201103L
+     703              :       _GLIBCXX20_CONSTEXPR
+     704              :       void
+     705              :       _M_move_data(_Bvector_base&& __x) noexcept
+     706              :       { _M_impl._M_move_data(std::move(__x._M_impl)); }
+     707              : #endif
+     708              : 
+     709              :       _GLIBCXX_CONSTEXPR
+     710              :       static size_t
+     711         1932 :       _S_nword(size_t __n)
+     712         1932 :       { return (__n + int(_S_word_bit) - 1) / int(_S_word_bit); }
+     713              :     };
+     714              : 
+     715              :   /**
+     716              :    *  @brief  A specialization of vector for booleans which offers fixed time
+     717              :    *  access to individual elements in any order.
+     718              :    *
+     719              :    *  @ingroup sequences
+     720              :    *  @headerfile vector
+     721              :    *  @since C++98
+     722              :    *
+     723              :    *  @tparam _Alloc  Allocator type.
+     724              :    *
+     725              :    *  Note that vector<bool> does not actually meet the requirements for being
+     726              :    *  a container.  This is because the reference and pointer types are not
+     727              :    *  really references and pointers to bool.  See DR96 for details.  @see
+     728              :    *  vector for function documentation.
+     729              :    *
+     730              :    *  In some terminology a %vector can be described as a dynamic
+     731              :    *  C-style array, it offers fast and efficient access to individual
+     732              :    *  elements in any order and saves the user from worrying about
+     733              :    *  memory and size allocation.  Subscripting ( @c [] ) access is
+     734              :    *  also provided as with C-style arrays.
+     735              :   */
+     736              :   template<typename _Alloc>
+     737              :     class vector<bool, _Alloc> : protected _Bvector_base<_Alloc>
+     738              :     {
+     739              :       typedef _Bvector_base<_Alloc>                       _Base;
+     740              :       typedef typename _Base::_Bit_pointer              _Bit_pointer;
+     741              :       typedef typename _Base::_Bit_alloc_traits         _Bit_alloc_traits;
+     742              : 
+     743              : #if __cplusplus >= 201103L
+     744              :       friend struct std::hash<vector>;
+     745              : #endif
+     746              : 
+     747              :     public:
+     748              :       typedef bool                                      value_type;
+     749              :       typedef size_t                                    size_type;
+     750              :       typedef ptrdiff_t                                 difference_type;
+     751              :       typedef _Bit_reference                            reference;
+     752              :       typedef bool                                      const_reference;
+     753              :       typedef _Bit_reference*                           pointer;
+     754              :       typedef const bool*                               const_pointer;
+     755              :       typedef _Bit_iterator                             iterator;
+     756              :       typedef _Bit_const_iterator                       const_iterator;
+     757              :       typedef std::reverse_iterator<const_iterator>       const_reverse_iterator;
+     758              :       typedef std::reverse_iterator<iterator>             reverse_iterator;
+     759              :       typedef _Alloc                                    allocator_type;
+     760              : 
+     761              :       _GLIBCXX20_CONSTEXPR
+     762              :       allocator_type
+     763              :       get_allocator() const
+     764              :       { return _Base::get_allocator(); }
+     765              : 
+     766              :     protected:
+     767              :       using _Base::_M_allocate;
+     768              :       using _Base::_M_deallocate;
+     769              :       using _Base::_S_nword;
+     770              :       using _Base::_M_get_Bit_allocator;
+     771              : 
+     772              :     public:
+     773              : #if __cplusplus >= 201103L
+     774              :       vector() = default;
+     775              : #else
+     776              :       vector() { }
+     777              : #endif
+     778              : 
+     779              :       _GLIBCXX20_CONSTEXPR
+     780              :       explicit
+     781              :       vector(const allocator_type& __a)
+     782              :       : _Base(__a) { }
+     783              : 
+     784              : #if __cplusplus >= 201103L
+     785              :       _GLIBCXX20_CONSTEXPR
+     786              :       explicit
+     787              :       vector(size_type __n, const allocator_type& __a = allocator_type())
+     788              :       : vector(__n, false, __a)
+     789              :       { }
+     790              : 
+     791              :       _GLIBCXX20_CONSTEXPR
+     792          966 :       vector(size_type __n, const bool& __value,
+     793              :              const allocator_type& __a = allocator_type())
+     794              : #else
+     795              :       explicit
+     796              :       vector(size_type __n, const bool& __value = bool(),
+     797              :              const allocator_type& __a = allocator_type())
+     798              : #endif
+     799          966 :       : _Base(__a)
+     800              :       {
+     801          966 :         _M_initialize(__n);
+     802          966 :         _M_initialize_value(__value);
+     803          966 :       }
+     804              : 
+     805              :       _GLIBCXX20_CONSTEXPR
+     806              :       vector(const vector& __x)
+     807              :       : _Base(_Bit_alloc_traits::_S_select_on_copy(__x._M_get_Bit_allocator()))
+     808              :       {
+     809              :         const_iterator __xbegin = __x.begin(), __xend = __x.end();
+     810              :         _M_initialize(__x.size());
+     811              :         _M_copy_aligned(__xbegin, __xend, begin());
+     812              :       }
+     813              : 
+     814              : #if __cplusplus >= 201103L
+     815              :       vector(vector&&) = default;
+     816              : 
+     817              :     private:
+     818              :       _GLIBCXX20_CONSTEXPR
+     819              :       vector(vector&& __x, const allocator_type& __a, true_type) noexcept
+     820              :       : _Base(std::move(__x), __a)
+     821              :       { }
+     822              : 
+     823              :       _GLIBCXX20_CONSTEXPR
+     824              :       vector(vector&& __x, const allocator_type& __a, false_type)
+     825              :       : _Base(__a)
+     826              :       {
+     827              :         if (__x.get_allocator() == __a)
+     828              :           this->_M_move_data(std::move(__x));
+     829              :         else
+     830              :           {
+     831              :             _M_initialize(__x.size());
+     832              :             _M_copy_aligned(__x.begin(), __x.end(), begin());
+     833              :             __x.clear();
+     834              :           }
+     835              :       }
+     836              : 
+     837              :     public:
+     838              :       _GLIBCXX20_CONSTEXPR
+     839              :       vector(vector&& __x, const __type_identity_t<allocator_type>& __a)
+     840              :       noexcept(_Bit_alloc_traits::_S_always_equal())
+     841              :       : vector(std::move(__x), __a,
+     842              :                typename _Bit_alloc_traits::is_always_equal{})
+     843              :       { }
+     844              : 
+     845              :       _GLIBCXX20_CONSTEXPR
+     846              :       vector(const vector& __x, const __type_identity_t<allocator_type>& __a)
+     847              :       : _Base(__a)
+     848              :       {
+     849              :         _M_initialize(__x.size());
+     850              :         _M_copy_aligned(__x.begin(), __x.end(), begin());
+     851              :       }
+     852              : 
+     853              :       _GLIBCXX20_CONSTEXPR
+     854              :       vector(initializer_list<bool> __l,
+     855              :              const allocator_type& __a = allocator_type())
+     856              :       : _Base(__a)
+     857              :       {
+     858              :         _M_initialize_range(__l.begin(), __l.end(),
+     859              :                             random_access_iterator_tag());
+     860              :       }
+     861              : #endif
+     862              : 
+     863              : #if __cplusplus >= 201103L
+     864              :       template<typename _InputIterator,
+     865              :                typename = std::_RequireInputIter<_InputIterator>>
+     866              :         _GLIBCXX20_CONSTEXPR
+     867              :         vector(_InputIterator __first, _InputIterator __last,
+     868              :                const allocator_type& __a = allocator_type())
+     869              :         : _Base(__a)
+     870              :         {
+     871              :           _M_initialize_range(__first, __last,
+     872              :                               std::__iterator_category(__first));
+     873              :         }
+     874              : #else
+     875              :       template<typename _InputIterator>
+     876              :         vector(_InputIterator __first, _InputIterator __last,
+     877              :                const allocator_type& __a = allocator_type())
+     878              :         : _Base(__a)
+     879              :         {
+     880              :           // Check whether it's an integral type. If so, it's not an iterator.
+     881              :           typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+     882              :           _M_initialize_dispatch(__first, __last, _Integral());
+     883              :         }
+     884              : #endif
+     885              : 
+     886              :       _GLIBCXX20_CONSTEXPR
+     887          966 :       ~vector() _GLIBCXX_NOEXCEPT { }
+     888              : 
+     889              :       _GLIBCXX20_CONSTEXPR
+     890              :       vector&
+     891              :       operator=(const vector& __x)
+     892              :       {
+     893              :         if (&__x == this)
+     894              :           return *this;
+     895              : #if __cplusplus >= 201103L
+     896              :         if (_Bit_alloc_traits::_S_propagate_on_copy_assign())
+     897              :           {
+     898              :             if (this->_M_get_Bit_allocator() != __x._M_get_Bit_allocator())
+     899              :               {
+     900              :                 this->_M_deallocate();
+     901              :                 std::__alloc_on_copy(_M_get_Bit_allocator(),
+     902              :                                      __x._M_get_Bit_allocator());
+     903              :                 _M_initialize(__x.size());
+     904              :               }
+     905              :             else
+     906              :               std::__alloc_on_copy(_M_get_Bit_allocator(),
+     907              :                                    __x._M_get_Bit_allocator());
+     908              :           }
+     909              : #endif
+     910              :         if (__x.size() > capacity())
+     911              :           {
+     912              :             this->_M_deallocate();
+     913              :             _M_initialize(__x.size());
+     914              :           }
+     915              :         this->_M_impl._M_finish = _M_copy_aligned(__x.begin(), __x.end(),
+     916              :                                                   begin());
+     917              :         return *this;
+     918              :       }
+     919              : 
+     920              : #if __cplusplus >= 201103L
+     921              :       _GLIBCXX20_CONSTEXPR
+     922              :       vector&
+     923              :       operator=(vector&& __x) noexcept(_Bit_alloc_traits::_S_nothrow_move())
+     924              :       {
+     925              :         if (_Bit_alloc_traits::_S_propagate_on_move_assign()
+     926              :             || this->_M_get_Bit_allocator() == __x._M_get_Bit_allocator())
+     927              :           {
+     928              :             this->_M_deallocate();
+     929              :             this->_M_move_data(std::move(__x));
+     930              :             std::__alloc_on_move(_M_get_Bit_allocator(),
+     931              :                                  __x._M_get_Bit_allocator());
+     932              :           }
+     933              :         else
+     934              :           {
+     935              :             if (__x.size() > capacity())
+     936              :               {
+     937              :                 this->_M_deallocate();
+     938              :                 _M_initialize(__x.size());
+     939              :               }
+     940              :             this->_M_impl._M_finish = _M_copy_aligned(__x.begin(), __x.end(),
+     941              :                                                       begin());
+     942              :             __x.clear();
+     943              :           }
+     944              :         return *this;
+     945              :       }
+     946              : 
+     947              :       _GLIBCXX20_CONSTEXPR
+     948              :       vector&
+     949              :       operator=(initializer_list<bool> __l)
+     950              :       {
+     951              :         this->assign(__l.begin(), __l.end());
+     952              :         return *this;
+     953              :       }
+     954              : #endif
+     955              : 
+     956              :       // assign(), a generalized assignment member function.  Two
+     957              :       // versions: one that takes a count, and one that takes a range.
+     958              :       // The range version is a member template, so we dispatch on whether
+     959              :       // or not the type is an integer.
+     960              :       _GLIBCXX20_CONSTEXPR
+     961              :       void
+     962              :       assign(size_type __n, const bool& __x)
+     963              :       { _M_fill_assign(__n, __x); }
+     964              : 
+     965              : #if __cplusplus >= 201103L
+     966              :       template<typename _InputIterator,
+     967              :                typename = std::_RequireInputIter<_InputIterator>>
+     968              :         _GLIBCXX20_CONSTEXPR
+     969              :         void
+     970              :         assign(_InputIterator __first, _InputIterator __last)
+     971              :         { _M_assign_aux(__first, __last, std::__iterator_category(__first)); }
+     972              : #else
+     973              :       template<typename _InputIterator>
+     974              :         void
+     975              :         assign(_InputIterator __first, _InputIterator __last)
+     976              :         {
+     977              :           // Check whether it's an integral type. If so, it's not an iterator.
+     978              :           typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+     979              :           _M_assign_dispatch(__first, __last, _Integral());
+     980              :         }
+     981              : #endif
+     982              : 
+     983              : #if __cplusplus >= 201103L
+     984              :       _GLIBCXX20_CONSTEXPR
+     985              :       void
+     986              :       assign(initializer_list<bool> __l)
+     987              :       { _M_assign_aux(__l.begin(), __l.end(), random_access_iterator_tag()); }
+     988              : #endif
+     989              : 
+     990              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     991              :       iterator
+     992         2558 :       begin() _GLIBCXX_NOEXCEPT
+     993         2558 :       { return iterator(this->_M_impl._M_start._M_p, 0); }
+     994              : 
+     995              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     996              :       const_iterator
+     997         1454 :       begin() const _GLIBCXX_NOEXCEPT
+     998         1454 :       { return const_iterator(this->_M_impl._M_start._M_p, 0); }
+     999              : 
+    1000              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1001              :       iterator
+    1002              :       end() _GLIBCXX_NOEXCEPT
+    1003              :       { return this->_M_impl._M_finish; }
+    1004              : 
+    1005              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1006              :       const_iterator
+    1007         1454 :       end() const _GLIBCXX_NOEXCEPT
+    1008         1454 :       { return this->_M_impl._M_finish; }
+    1009              : 
+    1010              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1011              :       reverse_iterator
+    1012              :       rbegin() _GLIBCXX_NOEXCEPT
+    1013              :       { return reverse_iterator(end()); }
+    1014              : 
+    1015              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1016              :       const_reverse_iterator
+    1017              :       rbegin() const _GLIBCXX_NOEXCEPT
+    1018              :       { return const_reverse_iterator(end()); }
+    1019              : 
+    1020              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1021              :       reverse_iterator
+    1022              :       rend() _GLIBCXX_NOEXCEPT
+    1023              :       { return reverse_iterator(begin()); }
+    1024              : 
+    1025              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1026              :       const_reverse_iterator
+    1027              :       rend() const _GLIBCXX_NOEXCEPT
+    1028              :       { return const_reverse_iterator(begin()); }
+    1029              : 
+    1030              : #if __cplusplus >= 201103L
+    1031              :       [[__nodiscard__]] _GLIBCXX20_CONSTEXPR
+    1032              :       const_iterator
+    1033              :       cbegin() const noexcept
+    1034              :       { return const_iterator(this->_M_impl._M_start._M_p, 0); }
+    1035              : 
+    1036              :       [[__nodiscard__]] _GLIBCXX20_CONSTEXPR
+    1037              :       const_iterator
+    1038              :       cend() const noexcept
+    1039              :       { return this->_M_impl._M_finish; }
+    1040              : 
+    1041              :       [[__nodiscard__]] _GLIBCXX20_CONSTEXPR
+    1042              :       const_reverse_iterator
+    1043              :       crbegin() const noexcept
+    1044              :       { return const_reverse_iterator(end()); }
+    1045              : 
+    1046              :       [[__nodiscard__]] _GLIBCXX20_CONSTEXPR
+    1047              :       const_reverse_iterator
+    1048              :       crend() const noexcept
+    1049              :       { return const_reverse_iterator(begin()); }
+    1050              : #endif
+    1051              : 
+    1052              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1053              :       size_type
+    1054         1454 :       size() const _GLIBCXX_NOEXCEPT
+    1055         1454 :       { return size_type(end() - begin()); }
+    1056              : 
+    1057              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1058              :       size_type
+    1059              :       max_size() const _GLIBCXX_NOEXCEPT
+    1060              :       {
+    1061              :         const size_type __isize =
+    1062              :           __gnu_cxx::__numeric_traits<difference_type>::__max
+    1063              :           - int(_S_word_bit) + 1;
+    1064              :         const size_type __asize
+    1065              :           = _Bit_alloc_traits::max_size(_M_get_Bit_allocator());
+    1066              :         return (__asize <= __isize / int(_S_word_bit)
+    1067              :                 ? __asize * int(_S_word_bit) : __isize);
+    1068              :       }
+    1069              : 
+    1070              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1071              :       size_type
+    1072              :       capacity() const _GLIBCXX_NOEXCEPT
+    1073              :       { return size_type(const_iterator(this->_M_impl._M_end_addr(), 0)
+    1074              :                          - begin()); }
+    1075              : 
+    1076              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1077              :       bool
+    1078              :       empty() const _GLIBCXX_NOEXCEPT
+    1079              :       { return begin() == end(); }
+    1080              : 
+    1081              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1082              :       reference
+    1083         2558 :       operator[](size_type __n)
+    1084         2558 :       { return begin()[__n]; }
+    1085              : 
+    1086              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1087              :       const_reference
+    1088              :       operator[](size_type __n) const
+    1089              :       { return begin()[__n]; }
+    1090              : 
+    1091              :     protected:
+    1092              :       _GLIBCXX20_CONSTEXPR
+    1093              :       void
+    1094         1454 :       _M_range_check(size_type __n) const
+    1095              :       {
+    1096         1454 :         if (__n >= this->size())
+    1097            0 :           __throw_out_of_range_fmt(__N("vector<bool>::_M_range_check: __n "
+    1098              :                                        "(which is %zu) >= this->size() "
+    1099              :                                        "(which is %zu)"),
+    1100              :                                    __n, this->size());
+    1101         1454 :       }
+    1102              : 
+    1103              :     public:
+    1104              :       _GLIBCXX20_CONSTEXPR
+    1105              :       reference
+    1106         1454 :       at(size_type __n)
+    1107              :       {
+    1108         1454 :         _M_range_check(__n);
+    1109         1454 :         return (*this)[__n];
+    1110              :       }
+    1111              : 
+    1112              :       _GLIBCXX20_CONSTEXPR
+    1113              :       const_reference
+    1114              :       at(size_type __n) const
+    1115              :       {
+    1116              :         _M_range_check(__n);
+    1117              :         return (*this)[__n];
+    1118              :       }
+    1119              : 
+    1120              :       _GLIBCXX20_CONSTEXPR
+    1121              :       void
+    1122              :       reserve(size_type __n)
+    1123              :       {
+    1124              :         if (__n > max_size())
+    1125              :           __throw_length_error(__N("vector::reserve"));
+    1126              :         if (capacity() < __n)
+    1127              :           _M_reallocate(__n);
+    1128              :       }
+    1129              : 
+    1130              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1131              :       reference
+    1132              :       front()
+    1133              :       { return *begin(); }
+    1134              : 
+    1135              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1136              :       const_reference
+    1137              :       front() const
+    1138              :       { return *begin(); }
+    1139              : 
+    1140              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1141              :       reference
+    1142              :       back()
+    1143              :       { return *(end() - 1); }
+    1144              : 
+    1145              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1146              :       const_reference
+    1147              :       back() const
+    1148              :       { return *(end() - 1); }
+    1149              : 
+    1150              :       _GLIBCXX20_CONSTEXPR
+    1151              :       void
+    1152              :       push_back(bool __x)
+    1153              :       {
+    1154              :         if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr())
+    1155              :           *this->_M_impl._M_finish++ = __x;
+    1156              :         else
+    1157              :           _M_insert_aux(end(), __x);
+    1158              :       }
+    1159              : 
+    1160              :       _GLIBCXX20_CONSTEXPR
+    1161              :       void
+    1162              :       swap(vector& __x) _GLIBCXX_NOEXCEPT
+    1163              :       {
+    1164              : #if __cplusplus >= 201103L
+    1165              :         __glibcxx_assert(_Bit_alloc_traits::propagate_on_container_swap::value
+    1166              :                          || _M_get_Bit_allocator() == __x._M_get_Bit_allocator());
+    1167              : #endif
+    1168              :         this->_M_impl._M_swap_data(__x._M_impl);
+    1169              :         _Bit_alloc_traits::_S_on_swap(_M_get_Bit_allocator(),
+    1170              :                                       __x._M_get_Bit_allocator());
+    1171              :       }
+    1172              : 
+    1173              :       // [23.2.5]/1, third-to-last entry in synopsis listing
+    1174              :       _GLIBCXX20_CONSTEXPR
+    1175              :       static void
+    1176              :       swap(reference __x, reference __y) _GLIBCXX_NOEXCEPT
+    1177              :       {
+    1178              :         bool __tmp = __x;
+    1179              :         __x = __y;
+    1180              :         __y = __tmp;
+    1181              :       }
+    1182              : 
+    1183              :       _GLIBCXX20_CONSTEXPR
+    1184              :       iterator
+    1185              : #if __cplusplus >= 201103L
+    1186              :       insert(const_iterator __position, const bool& __x)
+    1187              : #else
+    1188              :       insert(iterator __position, const bool& __x)
+    1189              : #endif
+    1190              :       {
+    1191              :         const difference_type __n = __position - begin();
+    1192              :         if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr()
+    1193              :             && __position == end())
+    1194              :           *this->_M_impl._M_finish++ = __x;
+    1195              :         else
+    1196              :           _M_insert_aux(__position._M_const_cast(), __x);
+    1197              :         return begin() + __n;
+    1198              :       }
+    1199              : 
+    1200              : #if _GLIBCXX_USE_DEPRECATED
+    1201              :       _GLIBCXX_DEPRECATED_SUGGEST("insert(position, false)")
+    1202              :       iterator
+    1203              :       insert(const_iterator __position)
+    1204              :       { return this->insert(__position._M_const_cast(), false); }
+    1205              : #endif
+    1206              : 
+    1207              : #if __cplusplus >= 201103L
+    1208              :       template<typename _InputIterator,
+    1209              :                typename = std::_RequireInputIter<_InputIterator>>
+    1210              :         _GLIBCXX20_CONSTEXPR
+    1211              :         iterator
+    1212              :         insert(const_iterator __position,
+    1213              :                _InputIterator __first, _InputIterator __last)
+    1214              :         {
+    1215              :           difference_type __offset = __position - cbegin();
+    1216              :           _M_insert_range(__position._M_const_cast(),
+    1217              :                           __first, __last,
+    1218              :                           std::__iterator_category(__first));
+    1219              :           return begin() + __offset;
+    1220              :         }
+    1221              : #else
+    1222              :       template<typename _InputIterator>
+    1223              :         void
+    1224              :         insert(iterator __position,
+    1225              :                _InputIterator __first, _InputIterator __last)
+    1226              :         {
+    1227              :           // Check whether it's an integral type. If so, it's not an iterator.
+    1228              :           typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+    1229              :           _M_insert_dispatch(__position, __first, __last, _Integral());
+    1230              :         }
+    1231              : #endif
+    1232              : 
+    1233              : #if __cplusplus >= 201103L
+    1234              :       _GLIBCXX20_CONSTEXPR
+    1235              :       iterator
+    1236              :       insert(const_iterator __position, size_type __n, const bool& __x)
+    1237              :       {
+    1238              :         difference_type __offset = __position - cbegin();
+    1239              :         _M_fill_insert(__position._M_const_cast(), __n, __x);
+    1240              :         return begin() + __offset;
+    1241              :       }
+    1242              : #else
+    1243              :       void
+    1244              :       insert(iterator __position, size_type __n, const bool& __x)
+    1245              :       { _M_fill_insert(__position, __n, __x); }
+    1246              : #endif
+    1247              : 
+    1248              : #if __cplusplus >= 201103L
+    1249              :       _GLIBCXX20_CONSTEXPR
+    1250              :       iterator
+    1251              :       insert(const_iterator __p, initializer_list<bool> __l)
+    1252              :       { return this->insert(__p, __l.begin(), __l.end()); }
+    1253              : #endif
+    1254              : 
+    1255              :       _GLIBCXX20_CONSTEXPR
+    1256              :       void
+    1257              :       pop_back()
+    1258              :       { --this->_M_impl._M_finish; }
+    1259              : 
+    1260              :       _GLIBCXX20_CONSTEXPR
+    1261              :       iterator
+    1262              : #if __cplusplus >= 201103L
+    1263              :       erase(const_iterator __position)
+    1264              : #else
+    1265              :       erase(iterator __position)
+    1266              : #endif
+    1267              :       { return _M_erase(__position._M_const_cast()); }
+    1268              : 
+    1269              :       _GLIBCXX20_CONSTEXPR
+    1270              :       iterator
+    1271              : #if __cplusplus >= 201103L
+    1272              :       erase(const_iterator __first, const_iterator __last)
+    1273              : #else
+    1274              :       erase(iterator __first, iterator __last)
+    1275              : #endif
+    1276              :       { return _M_erase(__first._M_const_cast(), __last._M_const_cast()); }
+    1277              : 
+    1278              :       _GLIBCXX20_CONSTEXPR
+    1279              :       void
+    1280              :       resize(size_type __new_size, bool __x = bool())
+    1281              :       {
+    1282              :         if (__new_size < size())
+    1283              :           _M_erase_at_end(begin() + difference_type(__new_size));
+    1284              :         else
+    1285              :           insert(end(), __new_size - size(), __x);
+    1286              :       }
+    1287              : 
+    1288              : #if __cplusplus >= 201103L
+    1289              :       _GLIBCXX20_CONSTEXPR
+    1290              :       void
+    1291              :       shrink_to_fit()
+    1292              :       { _M_shrink_to_fit(); }
+    1293              : #endif
+    1294              : 
+    1295              :       _GLIBCXX20_CONSTEXPR
+    1296              :       void
+    1297              :       flip() _GLIBCXX_NOEXCEPT
+    1298              :       {
+    1299              :         _Bit_type * const __end = this->_M_impl._M_end_addr();
+    1300              :         for (_Bit_type * __p = this->_M_impl._M_start._M_p; __p != __end; ++__p)
+    1301              :           *__p = ~*__p;
+    1302              :       }
+    1303              : 
+    1304              :       _GLIBCXX20_CONSTEXPR
+    1305              :       void
+    1306              :       clear() _GLIBCXX_NOEXCEPT
+    1307              :       { _M_erase_at_end(begin()); }
+    1308              : 
+    1309              : #if __cplusplus >= 201103L
+    1310              :       template<typename... _Args>
+    1311              : #if __cplusplus > 201402L
+    1312              :         _GLIBCXX20_CONSTEXPR
+    1313              :         reference
+    1314              : #else
+    1315              :         void
+    1316              : #endif
+    1317              :         emplace_back(_Args&&... __args)
+    1318              :         {
+    1319              :           push_back(bool(__args...));
+    1320              : #if __cplusplus > 201402L
+    1321              :           return back();
+    1322              : #endif
+    1323              :         }
+    1324              : 
+    1325              :       template<typename... _Args>
+    1326              :         _GLIBCXX20_CONSTEXPR
+    1327              :         iterator
+    1328              :         emplace(const_iterator __pos, _Args&&... __args)
+    1329              :         { return insert(__pos, bool(__args...)); }
+    1330              : #endif
+    1331              : 
+    1332              :     protected:
+    1333              :       // Precondition: __first._M_offset == 0 && __result._M_offset == 0.
+    1334              :       _GLIBCXX20_CONSTEXPR
+    1335              :       iterator
+    1336              :       _M_copy_aligned(const_iterator __first, const_iterator __last,
+    1337              :                       iterator __result)
+    1338              :       {
+    1339              :         _Bit_type* __q = std::copy(__first._M_p, __last._M_p, __result._M_p);
+    1340              :         return std::copy(const_iterator(__last._M_p, 0), __last,
+    1341              :                          iterator(__q, 0));
+    1342              :       }
+    1343              : 
+    1344              :       _GLIBCXX20_CONSTEXPR
+    1345              :       void
+    1346          966 :       _M_initialize(size_type __n)
+    1347              :       {
+    1348          966 :         if (__n)
+    1349              :           {
+    1350          966 :             _Bit_pointer __q = this->_M_allocate(__n);
+    1351          966 :             this->_M_impl._M_end_of_storage = __q + _S_nword(__n);
+    1352          966 :             iterator __start = iterator(std::__addressof(*__q), 0);
+    1353          966 :             this->_M_impl._M_start = __start;
+    1354          966 :             this->_M_impl._M_finish = __start + difference_type(__n);
+    1355              :           }
+    1356          966 :       }
+    1357              : 
+    1358              :       _GLIBCXX20_CONSTEXPR
+    1359              :       void
+    1360          966 :       _M_initialize_value(bool __x) _GLIBCXX_NOEXCEPT
+    1361              :       {
+    1362          966 :         if (_Bit_type* __p = this->_M_impl._M_start._M_p)
+    1363          966 :           __fill_bvector_n(__p, this->_M_impl._M_end_addr() - __p, __x);
+    1364          966 :       }
+    1365              : 
+    1366              :       _GLIBCXX20_CONSTEXPR
+    1367              :       void
+    1368              :       _M_reallocate(size_type __n);
+    1369              : 
+    1370              : #if __cplusplus >= 201103L
+    1371              :       _GLIBCXX20_CONSTEXPR
+    1372              :       bool
+    1373              :       _M_shrink_to_fit();
+    1374              : #endif
+    1375              : 
+    1376              : #if __cplusplus < 201103L
+    1377              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1378              :       // 438. Ambiguity in the "do the right thing" clause
+    1379              :       template<typename _Integer>
+    1380              :         void
+    1381              :         _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type)
+    1382              :         {
+    1383              :           _M_initialize(static_cast<size_type>(__n));
+    1384              :           _M_initialize_value(__x);
+    1385              :         }
+    1386              : 
+    1387              :       template<typename _InputIterator>
+    1388              :         void
+    1389              :         _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
+    1390              :                                __false_type)
+    1391              :         { _M_initialize_range(__first, __last,
+    1392              :                               std::__iterator_category(__first)); }
+    1393              : #endif
+    1394              : 
+    1395              :       template<typename _InputIterator>
+    1396              :         _GLIBCXX20_CONSTEXPR
+    1397              :         void
+    1398              :         _M_initialize_range(_InputIterator __first, _InputIterator __last,
+    1399              :                             std::input_iterator_tag)
+    1400              :         {
+    1401              :           for (; __first != __last; ++__first)
+    1402              :             push_back(*__first);
+    1403              :         }
+    1404              : 
+    1405              :       template<typename _ForwardIterator>
+    1406              :         _GLIBCXX20_CONSTEXPR
+    1407              :         void
+    1408              :         _M_initialize_range(_ForwardIterator __first, _ForwardIterator __last,
+    1409              :                             std::forward_iterator_tag)
+    1410              :         {
+    1411              :           const size_type __n = std::distance(__first, __last);
+    1412              :           _M_initialize(__n);
+    1413              :           std::copy(__first, __last, begin());
+    1414              :         }
+    1415              : 
+    1416              : #if __cplusplus < 201103L
+    1417              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1418              :       // 438. Ambiguity in the "do the right thing" clause
+    1419              :       template<typename _Integer>
+    1420              :         void
+    1421              :         _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
+    1422              :         { _M_fill_assign(__n, __val); }
+    1423              : 
+    1424              :       template<class _InputIterator>
+    1425              :         void
+    1426              :         _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
+    1427              :                            __false_type)
+    1428              :         { _M_assign_aux(__first, __last, std::__iterator_category(__first)); }
+    1429              : #endif
+    1430              : 
+    1431              :       _GLIBCXX20_CONSTEXPR
+    1432              :       void
+    1433              :       _M_fill_assign(size_t __n, bool __x)
+    1434              :       {
+    1435              :         if (__n > size())
+    1436              :           {
+    1437              :             _M_initialize_value(__x);
+    1438              :             insert(end(), __n - size(), __x);
+    1439              :           }
+    1440              :         else
+    1441              :           {
+    1442              :             _M_erase_at_end(begin() + __n);
+    1443              :             _M_initialize_value(__x);
+    1444              :           }
+    1445              :       }
+    1446              : 
+    1447              :       template<typename _InputIterator>
+    1448              :         _GLIBCXX20_CONSTEXPR
+    1449              :         void
+    1450              :         _M_assign_aux(_InputIterator __first, _InputIterator __last,
+    1451              :                       std::input_iterator_tag)
+    1452              :         {
+    1453              :           iterator __cur = begin();
+    1454              :           for (; __first != __last && __cur != end(); ++__cur, (void)++__first)
+    1455              :             *__cur = *__first;
+    1456              :           if (__first == __last)
+    1457              :             _M_erase_at_end(__cur);
+    1458              :           else
+    1459              :             insert(end(), __first, __last);
+    1460              :         }
+    1461              : 
+    1462              :       template<typename _ForwardIterator>
+    1463              :         _GLIBCXX20_CONSTEXPR
+    1464              :         void
+    1465              :         _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
+    1466              :                       std::forward_iterator_tag)
+    1467              :         {
+    1468              :           const size_type __len = std::distance(__first, __last);
+    1469              :           if (__len < size())
+    1470              :             _M_erase_at_end(std::copy(__first, __last, begin()));
+    1471              :           else
+    1472              :             {
+    1473              :               _ForwardIterator __mid = __first;
+    1474              :               std::advance(__mid, size());
+    1475              :               std::copy(__first, __mid, begin());
+    1476              :               insert(end(), __mid, __last);
+    1477              :             }
+    1478              :         }
+    1479              : 
+    1480              : #if __cplusplus < 201103L
+    1481              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1482              :       // 438. Ambiguity in the "do the right thing" clause
+    1483              :       template<typename _Integer>
+    1484              :         void
+    1485              :         _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __x,
+    1486              :                            __true_type)
+    1487              :         { _M_fill_insert(__pos, __n, __x); }
+    1488              : 
+    1489              :       template<typename _InputIterator>
+    1490              :         void
+    1491              :         _M_insert_dispatch(iterator __pos,
+    1492              :                            _InputIterator __first, _InputIterator __last,
+    1493              :                            __false_type)
+    1494              :         { _M_insert_range(__pos, __first, __last,
+    1495              :                           std::__iterator_category(__first)); }
+    1496              : #endif
+    1497              : 
+    1498              :       _GLIBCXX20_CONSTEXPR
+    1499              :       void
+    1500              :       _M_fill_insert(iterator __position, size_type __n, bool __x);
+    1501              : 
+    1502              :       template<typename _InputIterator>
+    1503              :         _GLIBCXX20_CONSTEXPR
+    1504              :         void
+    1505              :         _M_insert_range(iterator __pos, _InputIterator __first,
+    1506              :                         _InputIterator __last, std::input_iterator_tag)
+    1507              :         {
+    1508              :           for (; __first != __last; ++__first)
+    1509              :             {
+    1510              :               __pos = insert(__pos, *__first);
+    1511              :               ++__pos;
+    1512              :             }
+    1513              :         }
+    1514              : 
+    1515              :       template<typename _ForwardIterator>
+    1516              :         _GLIBCXX20_CONSTEXPR
+    1517              :         void
+    1518              :         _M_insert_range(iterator __position, _ForwardIterator __first,
+    1519              :                         _ForwardIterator __last, std::forward_iterator_tag);
+    1520              : 
+    1521              :       _GLIBCXX20_CONSTEXPR
+    1522              :       void
+    1523              :       _M_insert_aux(iterator __position, bool __x);
+    1524              : 
+    1525              :       _GLIBCXX20_CONSTEXPR
+    1526              :       size_type
+    1527              :       _M_check_len(size_type __n, const char* __s) const
+    1528              :       {
+    1529              :         if (max_size() - size() < __n)
+    1530              :           __throw_length_error(__N(__s));
+    1531              : 
+    1532              :         const size_type __len = size() + std::max(size(), __n);
+    1533              :         return (__len < size() || __len > max_size()) ? max_size() : __len;
+    1534              :       }
+    1535              : 
+    1536              :       _GLIBCXX20_CONSTEXPR
+    1537              :       void
+    1538              :       _M_erase_at_end(iterator __pos)
+    1539              :       { this->_M_impl._M_finish = __pos; }
+    1540              : 
+    1541              :       _GLIBCXX20_CONSTEXPR
+    1542              :       iterator
+    1543              :       _M_erase(iterator __pos);
+    1544              : 
+    1545              :       _GLIBCXX20_CONSTEXPR
+    1546              :       iterator
+    1547              :       _M_erase(iterator __first, iterator __last);
+    1548              : 
+    1549              :     protected:
+    1550              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1551              :       // DR 464. Suggestion for new member functions in standard containers.
+    1552              :       // N.B. DR 464 says nothing about vector<bool> but we need something
+    1553              :       // here due to the using-declaration in __gnu_debug::vector.
+    1554              :       // vector class.
+    1555              : #if __cplusplus >= 201103L
+    1556              :       void data() = delete;
+    1557              : #else
+    1558              :       void data() { }
+    1559              : #endif
+    1560              :     };
+    1561              : 
+    1562              : _GLIBCXX_END_NAMESPACE_CONTAINER
+    1563              : 
+    1564              :   // Fill a partial word.
+    1565              :   _GLIBCXX20_CONSTEXPR
+    1566              :   inline void
+    1567              :   __fill_bvector(_Bit_type* __v, unsigned int __first, unsigned int __last,
+    1568              :                  bool __x) _GLIBCXX_NOEXCEPT
+    1569              :   {
+    1570              :     const _Bit_type __fmask = ~0ul << __first;
+    1571              :     const _Bit_type __lmask = ~0ul >> (_S_word_bit - __last);
+    1572              :     const _Bit_type __mask = __fmask & __lmask;
+    1573              : 
+    1574              :     if (__x)
+    1575              :       *__v |= __mask;
+    1576              :     else
+    1577              :       *__v &= ~__mask;
+    1578              :   }
+    1579              : 
+    1580              :   // Fill N full words, as if using memset, but usable in constant expressions.
+    1581              :   __attribute__((__nonnull__))
+    1582              :   _GLIBCXX20_CONSTEXPR
+    1583              :   inline void
+    1584          966 :   __fill_bvector_n(_Bit_type* __p, size_t __n, bool __x) _GLIBCXX_NOEXCEPT
+    1585              :   {
+    1586              : #if __cpp_lib_is_constant_evaluated
+    1587              :     if (std::is_constant_evaluated())
+    1588              :     {
+    1589              :       for (size_t __i = 0; __i < __n; ++__i)
+    1590              :         __p[__i] = __x ? ~0ul : 0ul;
+    1591              :       return;
+    1592              :     }
+    1593              : #endif
+    1594          966 :     __builtin_memset(__p, __x ? ~0 : 0, __n * sizeof(_Bit_type));
+    1595          966 :   }
+    1596              : 
+    1597              : 
+    1598              :   _GLIBCXX20_CONSTEXPR
+    1599              :   inline void
+    1600              :   __fill_a1(_GLIBCXX_STD_C::_Bit_iterator __first,
+    1601              :             _GLIBCXX_STD_C::_Bit_iterator __last, const bool& __x)
+    1602              :   {
+    1603              :     if (__first._M_p != __last._M_p)
+    1604              :       {
+    1605              :         _Bit_type* __first_p = __first._M_p;
+    1606              :         if (__first._M_offset != 0)
+    1607              :           __fill_bvector(__first_p++, __first._M_offset, _S_word_bit, __x);
+    1608              : 
+    1609              :         __fill_bvector_n(__first_p, __last._M_p - __first_p, __x);
+    1610              : 
+    1611              :         if (__last._M_offset != 0)
+    1612              :           __fill_bvector(__last._M_p, 0, __last._M_offset, __x);
+    1613              :       }
+    1614              :     else if (__first._M_offset != __last._M_offset)
+    1615              :       __fill_bvector(__first._M_p, __first._M_offset, __last._M_offset, __x);
+    1616              :   }
+    1617              : 
+    1618              : #if __cplusplus >= 201103L
+    1619              :   // DR 1182.
+    1620              :   /// std::hash specialization for vector<bool>.
+    1621              :   template<typename _Alloc>
+    1622              :     struct hash<_GLIBCXX_STD_C::vector<bool, _Alloc>>
+    1623              :     : public __hash_base<size_t, _GLIBCXX_STD_C::vector<bool, _Alloc>>
+    1624              :     {
+    1625              :       size_t
+    1626              :       operator()(const _GLIBCXX_STD_C::vector<bool, _Alloc>&) const noexcept;
+    1627              :     };
+    1628              : #endif // C++11
+    1629              : 
+    1630              : _GLIBCXX_END_NAMESPACE_VERSION
+    1631              : } // namespace std
+    1632              : 
+    1633              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_construct.h.func-c.html b/html/usr/include/c++/13/bits/stl_construct.h.func-c.html new file mode 100644 index 0000000..a5d4651 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_construct.h.func-c.html @@ -0,0 +1,1027 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_construct.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_construct.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1414
Test Date:2024-04-30 13:17:26Functions:69.5 %13191
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt10_ConstructIdJEEvPT_DpOT0_394800
_ZSt10_ConstructIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEJRKSE_EEvPT_DpOT0_0
_ZSt10_ConstructINSt7__cxx1112regex_traitsIcE10_RegexMaskEJRKS3_EEvPT_DpOT0_0
_ZSt10_ConstructINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEJRKSC_EEvPT_DpOT0_0
_ZSt10_ConstructINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEJRSC_EEvPT_DpOT0_0
_ZSt10_ConstructINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEJRKSt6localeRNSt15regex_constants18syntax_option_typeEEEvPT_DpOT0_0
_ZSt10_ConstructISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEJEEvPT_DpOT0_0
_ZSt10_ConstructISt4pairIccEJRKS1_EEvPT_DpOT0_0
_ZSt10_ConstructISt6vectorIfSaIfEEJRS2_EEvPT_DpOT0_0
_ZSt10_ConstructIdJEEvPT_DpOT0_0
_ZSt10_ConstructIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEJRS9_EEvPT_DpOT0_20
_ZSt10_ConstructISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEJRKS7_EEvPT_DpOT0_24
_ZSt10_ConstructINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRKPKcEEvPT_DpOT0_50
_ZSt10_ConstructIfJEEvPT_DpOT0_218
_ZSt10_ConstructIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEJRKNS1_6detail8json_refISE_EEEEvPT_DpOT0_236
_ZSt10_ConstructISt4pairIfS0_IiiEEJS2_EEvPT_DpOT0_582
_ZSt10_ConstructISt4pairIfS0_IiiEEJRKS2_EEvPT_DpOT0_636
_ZSt10_ConstructISt6vectorIiSaIiEEJRKS2_EEvPT_DpOT0_1000
_ZSt10_ConstructISt6vectorIiSaIiEEJEEvPT_DpOT0_1250
_ZSt10_ConstructINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRS5_EEvPT_DpOT0_1638
_ZSt10_ConstructISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EJRKS7_EEvPT_DpOT0_1760
_ZSt10_ConstructINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJS5_EEvPT_DpOT0_2100
_ZSt10_ConstructISt6vectorIfSaIfEEJRKS2_EEvPT_DpOT0_2210
_ZSt10_ConstructIiJEEvPT_DpOT0_3380
_ZSt10_ConstructISt6vectorIdSaIdEEJRKS2_EEvPT_DpOT0_4226
_ZSt10_ConstructISt4pairIiiEJRKS1_EEvPT_DpOT0_4674
_ZSt10_ConstructINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRKS5_EEvPT_DpOT0_136588
_ZSt10_ConstructINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJEEvPT_DpOT0_234208
_ZNSt12_Destroy_auxILb1EE9__destroyIPcEEvT_S3_3162606
_ZNSt12_Destroy_auxILb1EE9__destroyIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS3_IPKcNS4_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISE_SaISE_EEEEEEvT_SK_0
_ZNSt12_Destroy_auxILb1EE9__destroyIPN3c107complexIdEEEEvT_S6_0
_ZNSt12_Destroy_auxILb1EE9__destroyIPNSt7__cxx1112regex_traitsIcE10_RegexMaskEEEvT_S7_0
_ZNSt12_Destroy_auxILb1EE9__destroyIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEEEvT_SG_0
_ZNSt12_Destroy_auxILb1EE9__destroyIPPKN6loguru11EcEntryBaseEEEvT_S7_0
_ZNSt12_Destroy_auxILb1EE9__destroyIPSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEEEvT_SG_0
_ZNSt12_Destroy_auxILb1EE9__destroyIPSt4pairIccEEEvT_S5_0
_ZNSt12_Destroy_auxILb1EE9__destroyIPcEEvT_S3_0
_ZNSt12_Destroy_auxILb1EE9__destroyIPhEEvT_S3_0
_ZNSt12_Destroy_auxILb1EE9__destroyIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEEEvT_S9_2
_ZNSt12_Destroy_auxILb1EE9__destroyIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS6_SaIS6_EEEEEEvT_SC_8
_ZNSt12_Destroy_auxILb1EE9__destroyIPSt4pairIifEEEvT_S5_26
_ZNSt12_Destroy_auxILb1EE9__destroyIPSt4pairIfS2_IiiEEEEvT_S6_290
_ZNSt12_Destroy_auxILb1EE9__destroyIPSt4pairIiiEEEvT_S5_1164
_ZNSt12_Destroy_auxILb1EE9__destroyIN9__gnu_cxx17__normal_iteratorIPfSt6vectorIfSaIfEEEEEEvT_S9_2660
_ZNSt12_Destroy_auxILb1EE9__destroyIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEEEvT_S9_2726
_ZNSt12_Destroy_auxILb1EE9__destroyIPfEEvT_S3_12010
_ZNSt12_Destroy_auxILb1EE9__destroyIPPN8bayesnet4NodeEEEvT_S6_29364
_ZNSt12_Destroy_auxILb1EE9__destroyIPmEEvT_S3_48128
_ZNSt12_Destroy_auxILb1EE9__destroyIPlEEvT_S3_415608
_ZNSt12_Destroy_auxILb1EE9__destroyIPdEEvT_S3_499758
_ZNSt12_Destroy_auxILb1EE9__destroyIPiEEvT_S3_2150862
_ZSt8_DestroyISt6threadEvPT_139430162
_ZSt8_DestroyIN3c108optionalIN2at6TensorEEEEvPT_0
_ZSt8_DestroyINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEvPT_0
_ZSt8_DestroyINSt8__detail6_StateIcEEEvPT_0
_ZSt8_DestroyISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EEEvPT_0
_ZSt8_DestroyISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEEEvPT_0
_ZSt8_DestroyIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEvPT_20
_ZSt8_DestroyISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEvPT_24
_ZSt8_DestroyIN5Catch10Generators16GeneratorWrapperIPKcEEEvPT_40
_ZSt8_DestroyIN6loguru8CallbackEEvPT_46
_ZSt8_DestroyIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEEvPT_236
_ZSt8_DestroyISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEEvPT_438
_ZSt8_DestroyIN2at6TensorEEvPT_756
_ZSt8_DestroyISt6vectorIfSaIfEEEvPT_2210
_ZSt8_DestroyISt6vectorIiSaIiEEEvPT_3972
_ZSt8_DestroyISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEvPT_10432
_ZSt8_DestroyISt6vectorIdSaIdEEEvPT_32488
_ZSt8_DestroyINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEvPT_488506
_ZSt8_DestroyISt6threadEvPT_1605734
_ZSt8_DestroyIN3c106SymIntEEvPT_32008884
_ZSt8_DestroyIN3c106IValueEEvPT_105276376
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt6threadEEvT_S4_224712396
_ZNSt12_Destroy_auxILb0EE9__destroyIPN3c108optionalIN2at6TensorEEEEEvT_S8_0
_ZNSt12_Destroy_auxILb0EE9__destroyIPNSt8__detail6_StateIcEEEEvT_S6_0
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS5_EEEEvT_SA_0
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS4_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISG_EEEEEvT_SL_0
_ZNSt12_Destroy_auxILb0EE9__destroyIPN6loguru8CallbackEEEvT_S5_2
_ZNSt12_Destroy_auxILb0EE9__destroyIN9__gnu_cxx17__normal_iteratorIPSt6vectorIfSaIfEES4_IS6_SaIS6_EEEEEEvT_SB_6
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEEvT_SB_8
_ZNSt12_Destroy_auxILb0EE9__destroyIPN5Catch10Generators16GeneratorWrapperIPKcEEEEvT_S9_16
_ZNSt12_Destroy_auxILb0EE9__destroyIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_SaIS9_EEEEEEvT_SF_36
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS4_EEEEvT_S9_84
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt6vectorIdSaIdEEEEvT_S6_260
_ZNSt12_Destroy_auxILb0EE9__destroyIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEEEEvT_SI_330
_ZNSt12_Destroy_auxILb0EE9__destroyIPN2at6TensorEEEvT_S5_378
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt6vectorIiSaIiEEEEvT_S6_1102
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt6vectorIfSaIfEEEEvT_S6_1304
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_EEEvT_SB_1306
_ZNSt12_Destroy_auxILb0EE9__destroyIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvT_S9_10886
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt6threadEEvT_S4_402810
_ZNSt12_Destroy_auxILb0EE9__destroyIPN3c106IValueEEEvT_S5_110776272
_ZNSt12_Destroy_auxILb0EE9__destroyIPN3c106SymIntEEEvT_S5_113517596
_ZSt8_DestroyIPcEvT_S1_227875002
_ZSt8_DestroyIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEEEvT_SI_0
_ZSt8_DestroyIPN3c107complexIdEEEvT_S4_0
_ZSt8_DestroyIPN3c108optionalIN2at6TensorEEEEvT_S6_0
_ZSt8_DestroyIPNSt7__cxx1112regex_traitsIcE10_RegexMaskEEvT_S5_0
_ZSt8_DestroyIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEEvT_SE_0
_ZSt8_DestroyIPNSt8__detail6_StateIcEEEvT_S4_0
_ZSt8_DestroyIPPKN6loguru11EcEntryBaseEEvT_S5_0
_ZSt8_DestroyIPSt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EEEvT_S8_0
_ZSt8_DestroyIPSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEEvT_SE_0
_ZSt8_DestroyIPSt4pairIccEEvT_S3_0
_ZSt8_DestroyIPSt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEEEvT_SJ_0
_ZSt8_DestroyIPcEvT_S1_0
_ZSt8_DestroyIPhEvT_S1_0
_ZSt8_DestroyIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEEvT_S7_2
_ZSt8_DestroyIPN6loguru8CallbackEEvT_S3_2
_ZSt8_DestroyIN9__gnu_cxx17__normal_iteratorIPSt6vectorIfSaIfEES2_IS4_SaIS4_EEEEEvT_S9_6
_ZSt8_DestroyIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEEEvT_SA_8
_ZSt8_DestroyIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEvT_S9_8
_ZSt8_DestroyIPN5Catch10Generators16GeneratorWrapperIPKcEEEvT_S7_16
_ZSt8_DestroyIPSt4pairIifEEvT_S3_26
_ZSt8_DestroyIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEEEvT_SD_36
_ZSt8_DestroyIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEEvT_S7_84
_ZSt8_DestroyIPSt6vectorIdSaIdEEEvT_S4_260
_ZSt8_DestroyIPSt4pairIfS0_IiiEEEvT_S4_290
_ZSt8_DestroyIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEEvT_SG_330
_ZSt8_DestroyIPN2at6TensorEEvT_S3_378
_ZSt8_DestroyIPSt6vectorIiSaIiEEEvT_S4_1102
_ZSt8_DestroyIPSt4pairIiiEEvT_S3_1164
_ZSt8_DestroyIPSt6vectorIfSaIfEEEvT_S4_1304
_ZSt8_DestroyIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEvT_S9_1306
_ZSt8_DestroyIN9__gnu_cxx17__normal_iteratorIPfSt6vectorIfSaIfEEEEEvT_S7_2660
_ZSt8_DestroyIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEEvT_S7_2726
_ZSt8_DestroyIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEvT_S7_10886
_ZSt8_DestroyIPfEvT_S1_12010
_ZSt8_DestroyIPPN8bayesnet4NodeEEvT_S4_29364
_ZSt8_DestroyIPmEvT_S1_48128
_ZSt8_DestroyIPSt6threadEvT_S2_402810
_ZSt8_DestroyIPlEvT_S1_415608
_ZSt8_DestroyIPdEvT_S1_499758
_ZSt8_DestroyIPiEvT_S1_2150862
_ZSt8_DestroyIPN3c106IValueEEvT_S3_110776272
_ZSt8_DestroyIPN3c106SymIntEEvT_S3_113517596
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_construct.h.func.html b/html/usr/include/c++/13/bits/stl_construct.h.func.html new file mode 100644 index 0000000..69ec544 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_construct.h.func.html @@ -0,0 +1,1027 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_construct.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_construct.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1414
Test Date:2024-04-30 13:17:26Functions:69.5 %13191
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt6threadEEvT_S4_224712396
_ZNSt12_Destroy_auxILb0EE9__destroyIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_SaIS9_EEEEEEvT_SF_36
_ZNSt12_Destroy_auxILb0EE9__destroyIN9__gnu_cxx17__normal_iteratorIPSt6vectorIfSaIfEES4_IS6_SaIS6_EEEEEEvT_SB_6
_ZNSt12_Destroy_auxILb0EE9__destroyIPN2at6TensorEEEvT_S5_378
_ZNSt12_Destroy_auxILb0EE9__destroyIPN3c106IValueEEEvT_S5_110776272
_ZNSt12_Destroy_auxILb0EE9__destroyIPN3c106SymIntEEEvT_S5_113517596
_ZNSt12_Destroy_auxILb0EE9__destroyIPN3c108optionalIN2at6TensorEEEEEvT_S8_0
_ZNSt12_Destroy_auxILb0EE9__destroyIPN5Catch10Generators16GeneratorWrapperIPKcEEEEvT_S9_16
_ZNSt12_Destroy_auxILb0EE9__destroyIPN6loguru8CallbackEEEvT_S5_2
_ZNSt12_Destroy_auxILb0EE9__destroyIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEEEEvT_SI_330
_ZNSt12_Destroy_auxILb0EE9__destroyIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvT_S9_10886
_ZNSt12_Destroy_auxILb0EE9__destroyIPNSt8__detail6_StateIcEEEEvT_S6_0
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS5_EEEEvT_SA_0
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS4_EEEEvT_S9_84
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_EEEvT_SB_1306
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEEvT_SB_8
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS4_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISG_EEEEEvT_SL_0
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt6threadEEvT_S4_402810
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt6vectorIdSaIdEEEEvT_S6_260
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt6vectorIfSaIfEEEEvT_S6_1304
_ZNSt12_Destroy_auxILb0EE9__destroyIPSt6vectorIiSaIiEEEEvT_S6_1102
_ZNSt12_Destroy_auxILb1EE9__destroyIPcEEvT_S3_3162606
_ZNSt12_Destroy_auxILb1EE9__destroyIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS3_IPKcNS4_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISE_SaISE_EEEEEEvT_SK_0
_ZNSt12_Destroy_auxILb1EE9__destroyIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS6_SaIS6_EEEEEEvT_SC_8
_ZNSt12_Destroy_auxILb1EE9__destroyIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEEEvT_S9_2
_ZNSt12_Destroy_auxILb1EE9__destroyIN9__gnu_cxx17__normal_iteratorIPfSt6vectorIfSaIfEEEEEEvT_S9_2660
_ZNSt12_Destroy_auxILb1EE9__destroyIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEEEvT_S9_2726
_ZNSt12_Destroy_auxILb1EE9__destroyIPN3c107complexIdEEEEvT_S6_0
_ZNSt12_Destroy_auxILb1EE9__destroyIPNSt7__cxx1112regex_traitsIcE10_RegexMaskEEEvT_S7_0
_ZNSt12_Destroy_auxILb1EE9__destroyIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEEEvT_SG_0
_ZNSt12_Destroy_auxILb1EE9__destroyIPPKN6loguru11EcEntryBaseEEEvT_S7_0
_ZNSt12_Destroy_auxILb1EE9__destroyIPPN8bayesnet4NodeEEEvT_S6_29364
_ZNSt12_Destroy_auxILb1EE9__destroyIPSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEEEvT_SG_0
_ZNSt12_Destroy_auxILb1EE9__destroyIPSt4pairIccEEEvT_S5_0
_ZNSt12_Destroy_auxILb1EE9__destroyIPSt4pairIfS2_IiiEEEEvT_S6_290
_ZNSt12_Destroy_auxILb1EE9__destroyIPSt4pairIifEEEvT_S5_26
_ZNSt12_Destroy_auxILb1EE9__destroyIPSt4pairIiiEEEvT_S5_1164
_ZNSt12_Destroy_auxILb1EE9__destroyIPcEEvT_S3_0
_ZNSt12_Destroy_auxILb1EE9__destroyIPdEEvT_S3_499758
_ZNSt12_Destroy_auxILb1EE9__destroyIPfEEvT_S3_12010
_ZNSt12_Destroy_auxILb1EE9__destroyIPhEEvT_S3_0
_ZNSt12_Destroy_auxILb1EE9__destroyIPiEEvT_S3_2150862
_ZNSt12_Destroy_auxILb1EE9__destroyIPlEEvT_S3_415608
_ZNSt12_Destroy_auxILb1EE9__destroyIPmEEvT_S3_48128
_ZSt10_ConstructIdJEEvPT_DpOT0_394800
_ZSt10_ConstructIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEJRKNS1_6detail8json_refISE_EEEEvPT_DpOT0_236
_ZSt10_ConstructIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEJRKSE_EEvPT_DpOT0_0
_ZSt10_ConstructIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEJRS9_EEvPT_DpOT0_20
_ZSt10_ConstructINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJEEvPT_DpOT0_234208
_ZSt10_ConstructINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRKPKcEEvPT_DpOT0_50
_ZSt10_ConstructINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRKS5_EEvPT_DpOT0_136588
_ZSt10_ConstructINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJRS5_EEvPT_DpOT0_1638
_ZSt10_ConstructINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJS5_EEvPT_DpOT0_2100
_ZSt10_ConstructINSt7__cxx1112regex_traitsIcE10_RegexMaskEJRKS3_EEvPT_DpOT0_0
_ZSt10_ConstructINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEJRKSC_EEvPT_DpOT0_0
_ZSt10_ConstructINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEJRSC_EEvPT_DpOT0_0
_ZSt10_ConstructINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEJRKSt6localeRNSt15regex_constants18syntax_option_typeEEEvPT_DpOT0_0
_ZSt10_ConstructISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEJEEvPT_DpOT0_0
_ZSt10_ConstructISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EJRKS7_EEvPT_DpOT0_1760
_ZSt10_ConstructISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEJRKS7_EEvPT_DpOT0_24
_ZSt10_ConstructISt4pairIccEJRKS1_EEvPT_DpOT0_0
_ZSt10_ConstructISt4pairIfS0_IiiEEJRKS2_EEvPT_DpOT0_636
_ZSt10_ConstructISt4pairIfS0_IiiEEJS2_EEvPT_DpOT0_582
_ZSt10_ConstructISt4pairIiiEJRKS1_EEvPT_DpOT0_4674
_ZSt10_ConstructISt6vectorIdSaIdEEJRKS2_EEvPT_DpOT0_4226
_ZSt10_ConstructISt6vectorIfSaIfEEJRKS2_EEvPT_DpOT0_2210
_ZSt10_ConstructISt6vectorIfSaIfEEJRS2_EEvPT_DpOT0_0
_ZSt10_ConstructISt6vectorIiSaIiEEJEEvPT_DpOT0_1250
_ZSt10_ConstructISt6vectorIiSaIiEEJRKS2_EEvPT_DpOT0_1000
_ZSt10_ConstructIdJEEvPT_DpOT0_0
_ZSt10_ConstructIfJEEvPT_DpOT0_218
_ZSt10_ConstructIiJEEvPT_DpOT0_3380
_ZSt8_DestroyIPcEvT_S1_227875002
_ZSt8_DestroyIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEEEvT_SD_36
_ZSt8_DestroyIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEEEvT_SI_0
_ZSt8_DestroyIN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEEEvT_SA_8
_ZSt8_DestroyIN9__gnu_cxx17__normal_iteratorIPSt6vectorIfSaIfEES2_IS4_SaIS4_EEEEEvT_S9_6
_ZSt8_DestroyIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEEvT_S7_2
_ZSt8_DestroyIN9__gnu_cxx17__normal_iteratorIPfSt6vectorIfSaIfEEEEEvT_S7_2660
_ZSt8_DestroyIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEEvT_S7_2726
_ZSt8_DestroyIPN2at6TensorEEvT_S3_378
_ZSt8_DestroyIPN3c106IValueEEvT_S3_110776272
_ZSt8_DestroyIPN3c106SymIntEEvT_S3_113517596
_ZSt8_DestroyIPN3c107complexIdEEEvT_S4_0
_ZSt8_DestroyIPN3c108optionalIN2at6TensorEEEEvT_S6_0
_ZSt8_DestroyIPN5Catch10Generators16GeneratorWrapperIPKcEEEvT_S7_16
_ZSt8_DestroyIPN6loguru8CallbackEEvT_S3_2
_ZSt8_DestroyIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEEvT_SG_330
_ZSt8_DestroyIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEvT_S7_10886
_ZSt8_DestroyIPNSt7__cxx1112regex_traitsIcE10_RegexMaskEEvT_S5_0
_ZSt8_DestroyIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEEvT_SE_0
_ZSt8_DestroyIPNSt8__detail6_StateIcEEEvT_S4_0
_ZSt8_DestroyIPPKN6loguru11EcEntryBaseEEvT_S5_0
_ZSt8_DestroyIPPN8bayesnet4NodeEEvT_S4_29364
_ZSt8_DestroyIPSt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EEEvT_S8_0
_ZSt8_DestroyIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEEvT_S7_84
_ZSt8_DestroyIPSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEEvT_SE_0
_ZSt8_DestroyIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEvT_S9_1306
_ZSt8_DestroyIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEvT_S9_8
_ZSt8_DestroyIPSt4pairIccEEvT_S3_0
_ZSt8_DestroyIPSt4pairIfS0_IiiEEEvT_S4_290
_ZSt8_DestroyIPSt4pairIifEEvT_S3_26
_ZSt8_DestroyIPSt4pairIiiEEvT_S3_1164
_ZSt8_DestroyIPSt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEEEvT_SJ_0
_ZSt8_DestroyIPSt6threadEvT_S2_402810
_ZSt8_DestroyIPSt6vectorIdSaIdEEEvT_S4_260
_ZSt8_DestroyIPSt6vectorIfSaIfEEEvT_S4_1304
_ZSt8_DestroyIPSt6vectorIiSaIiEEEvT_S4_1102
_ZSt8_DestroyIPcEvT_S1_0
_ZSt8_DestroyIPdEvT_S1_499758
_ZSt8_DestroyIPfEvT_S1_12010
_ZSt8_DestroyIPhEvT_S1_0
_ZSt8_DestroyIPiEvT_S1_2150862
_ZSt8_DestroyIPlEvT_S1_415608
_ZSt8_DestroyIPmEvT_S1_48128
_ZSt8_DestroyISt6threadEvPT_139430162
_ZSt8_DestroyIN2at6TensorEEvPT_756
_ZSt8_DestroyIN3c106IValueEEvPT_105276376
_ZSt8_DestroyIN3c106SymIntEEvPT_32008884
_ZSt8_DestroyIN3c108optionalIN2at6TensorEEEEvPT_0
_ZSt8_DestroyIN5Catch10Generators16GeneratorWrapperIPKcEEEvPT_40
_ZSt8_DestroyIN6loguru8CallbackEEvPT_46
_ZSt8_DestroyIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEEEvPT_236
_ZSt8_DestroyIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEEvPT_20
_ZSt8_DestroyINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEvPT_488506
_ZSt8_DestroyINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEEvPT_0
_ZSt8_DestroyINSt8__detail6_StateIcEEEvPT_0
_ZSt8_DestroyISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EEEvPT_0
_ZSt8_DestroyISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EEEvPT_438
_ZSt8_DestroyISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEvPT_10432
_ZSt8_DestroyISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEvPT_24
_ZSt8_DestroyISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEEEvPT_0
_ZSt8_DestroyISt6threadEvPT_1605734
_ZSt8_DestroyISt6vectorIdSaIdEEEvPT_32488
_ZSt8_DestroyISt6vectorIfSaIfEEEvPT_2210
_ZSt8_DestroyISt6vectorIiSaIiEEEvPT_3972
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_construct.h.gcov.html b/html/usr/include/c++/13/bits/stl_construct.h.gcov.html new file mode 100644 index 0000000..0f5ec41 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_construct.h.gcov.html @@ -0,0 +1,343 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_construct.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_construct.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1414
Test Date:2024-04-30 13:17:26Functions:69.5 %13191
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // nonstandard construct and destroy functions -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1996,1997
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/stl_construct.h
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{memory}
+      54              :  */
+      55              : 
+      56              : #ifndef _STL_CONSTRUCT_H
+      57              : #define _STL_CONSTRUCT_H 1
+      58              : 
+      59              : #include <new>
+      60              : #include <bits/move.h>
+      61              : #include <bits/stl_iterator_base_types.h> // for iterator_traits
+      62              : #include <bits/stl_iterator_base_funcs.h> // for advance
+      63              : 
+      64              : /* This file provides the C++17 functions std::destroy_at, std::destroy, and
+      65              :  * std::destroy_n, and the C++20 function std::construct_at.
+      66              :  * It also provides std::_Construct, std::_Destroy,and std::_Destroy_n functions
+      67              :  * which are defined in all standard modes and so can be used in C++98-14 code.
+      68              :  * The _Destroy functions will dispatch to destroy_at during constant
+      69              :  * evaluation, because calls to that function are intercepted by the compiler
+      70              :  * to allow use in constant expressions.
+      71              :  */
+      72              : 
+      73              : namespace std _GLIBCXX_VISIBILITY(default)
+      74              : {
+      75              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      76              : 
+      77              : #if __cplusplus >= 201703L
+      78              :   template <typename _Tp>
+      79              :     _GLIBCXX20_CONSTEXPR inline void
+      80              :     destroy_at(_Tp* __location)
+      81              :     {
+      82              :       if constexpr (__cplusplus > 201703L && is_array_v<_Tp>)
+      83              :         {
+      84              :           for (auto& __x : *__location)
+      85              :             std::destroy_at(std::__addressof(__x));
+      86              :         }
+      87              :       else
+      88              :         __location->~_Tp();
+      89              :     }
+      90              : 
+      91              : #if __cplusplus >= 202002L
+      92              :   template<typename _Tp, typename... _Args>
+      93              :     constexpr auto
+      94              :     construct_at(_Tp* __location, _Args&&... __args)
+      95              :     noexcept(noexcept(::new((void*)0) _Tp(std::declval<_Args>()...)))
+      96              :     -> decltype(::new((void*)0) _Tp(std::declval<_Args>()...))
+      97              :     { return ::new((void*)__location) _Tp(std::forward<_Args>(__args)...); }
+      98              : #endif // C++20
+      99              : #endif// C++17
+     100              : 
+     101              :   /**
+     102              :    * Constructs an object in existing memory by invoking an allocated
+     103              :    * object's constructor with an initializer.
+     104              :    */
+     105              : #if __cplusplus >= 201103L
+     106              :   template<typename _Tp, typename... _Args>
+     107              :     _GLIBCXX20_CONSTEXPR
+     108              :     inline void
+     109       394800 :     _Construct(_Tp* __p, _Args&&... __args)
+     110              :     {
+     111              : #if __cplusplus >= 202002L
+     112              :       if (std::__is_constant_evaluated())
+     113              :         {
+     114              :           // Allow std::_Construct to be used in constant expressions.
+     115              :           std::construct_at(__p, std::forward<_Args>(__args)...);
+     116              :           return;
+     117              :         }
+     118              : #endif
+     119       394850 :       ::new((void*)__p) _Tp(std::forward<_Args>(__args)...);
+     120       394800 :     }
+     121              : #else
+     122              :   template<typename _T1, typename _T2>
+     123              :     inline void
+     124              :     _Construct(_T1* __p, const _T2& __value)
+     125              :     {
+     126              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     127              :       // 402. wrong new expression in [some_]allocator::construct
+     128              :       ::new(static_cast<void*>(__p)) _T1(__value);
+     129              :     }
+     130              : #endif
+     131              : 
+     132              :   template<typename _T1>
+     133              :     inline void
+     134              :     _Construct_novalue(_T1* __p)
+     135              :     { ::new((void*)__p) _T1; }
+     136              : 
+     137              :   template<typename _ForwardIterator>
+     138              :     _GLIBCXX20_CONSTEXPR void
+     139              :     _Destroy(_ForwardIterator __first, _ForwardIterator __last);
+     140              : 
+     141              :   /**
+     142              :    * Destroy the object pointed to by a pointer type.
+     143              :    */
+     144              :   template<typename _Tp>
+     145              :     _GLIBCXX14_CONSTEXPR inline void
+     146    139430162 :     _Destroy(_Tp* __pointer)
+     147              :     {
+     148              : #if __cplusplus > 201703L
+     149              :       std::destroy_at(__pointer);
+     150              : #else
+     151    139430162 :       __pointer->~_Tp();
+     152              : #endif
+     153    139430162 :     }
+     154              : 
+     155              :   template<bool>
+     156              :     struct _Destroy_aux
+     157              :     {
+     158              :       template<typename _ForwardIterator>
+     159              :         static _GLIBCXX20_CONSTEXPR void
+     160    224712396 :         __destroy(_ForwardIterator __first, _ForwardIterator __last)
+     161              :         {
+     162    364142532 :           for (; __first != __last; ++__first)
+     163    139430136 :             std::_Destroy(std::__addressof(*__first));
+     164    224712396 :         }
+     165              :     };
+     166              : 
+     167              :   template<>
+     168              :     struct _Destroy_aux<true>
+     169              :     {
+     170              :       template<typename _ForwardIterator>
+     171              :         static void
+     172      3162606 :         __destroy(_ForwardIterator, _ForwardIterator) { }
+     173              :     };
+     174              : 
+     175              :   /**
+     176              :    * Destroy a range of objects.  If the value_type of the object has
+     177              :    * a trivial destructor, the compiler should optimize all of this
+     178              :    * away, otherwise the objects' destructors must be invoked.
+     179              :    */
+     180              :   template<typename _ForwardIterator>
+     181              :     _GLIBCXX20_CONSTEXPR inline void
+     182    227875002 :     _Destroy(_ForwardIterator __first, _ForwardIterator __last)
+     183              :     {
+     184              :       typedef typename iterator_traits<_ForwardIterator>::value_type
+     185              :                        _Value_type;
+     186              : #if __cplusplus >= 201103L
+     187              :       // A deleted destructor is trivial, this ensures we reject such types:
+     188              :       static_assert(is_destructible<_Value_type>::value,
+     189              :                     "value type is destructible");
+     190              : #endif
+     191              : #if __cplusplus >= 202002L
+     192              :       if (std::__is_constant_evaluated())
+     193              :         return std::_Destroy_aux<false>::__destroy(__first, __last);
+     194              : #endif
+     195              :       std::_Destroy_aux<__has_trivial_destructor(_Value_type)>::
+     196    227875002 :         __destroy(__first, __last);
+     197    227875002 :     }
+     198              : 
+     199              :   template<bool>
+     200              :     struct _Destroy_n_aux
+     201              :     {
+     202              :       template<typename _ForwardIterator, typename _Size>
+     203              :         static _GLIBCXX20_CONSTEXPR _ForwardIterator
+     204              :         __destroy_n(_ForwardIterator __first, _Size __count)
+     205              :         {
+     206              :           for (; __count > 0; (void)++__first, --__count)
+     207              :             std::_Destroy(std::__addressof(*__first));
+     208              :           return __first;
+     209              :         }
+     210              :     };
+     211              : 
+     212              :   template<>
+     213              :     struct _Destroy_n_aux<true>
+     214              :     {
+     215              :       template<typename _ForwardIterator, typename _Size>
+     216              :         static _ForwardIterator
+     217              :         __destroy_n(_ForwardIterator __first, _Size __count)
+     218              :         {
+     219              :           std::advance(__first, __count);
+     220              :           return __first;
+     221              :         }
+     222              :     };
+     223              : 
+     224              :   /**
+     225              :    * Destroy a range of objects.  If the value_type of the object has
+     226              :    * a trivial destructor, the compiler should optimize all of this
+     227              :    * away, otherwise the objects' destructors must be invoked.
+     228              :    */
+     229              :   template<typename _ForwardIterator, typename _Size>
+     230              :     _GLIBCXX20_CONSTEXPR inline _ForwardIterator
+     231              :     _Destroy_n(_ForwardIterator __first, _Size __count)
+     232              :     {
+     233              :       typedef typename iterator_traits<_ForwardIterator>::value_type
+     234              :                        _Value_type;
+     235              : #if __cplusplus >= 201103L
+     236              :       // A deleted destructor is trivial, this ensures we reject such types:
+     237              :       static_assert(is_destructible<_Value_type>::value,
+     238              :                     "value type is destructible");
+     239              : #endif
+     240              : #if __cplusplus >= 202002L
+     241              :       if (std::__is_constant_evaluated())
+     242              :         return std::_Destroy_n_aux<false>::__destroy_n(__first, __count);
+     243              : #endif
+     244              :       return std::_Destroy_n_aux<__has_trivial_destructor(_Value_type)>::
+     245              :         __destroy_n(__first, __count);
+     246              :     }
+     247              : 
+     248              : #if __cplusplus >= 201703L
+     249              :   template <typename _ForwardIterator>
+     250              :     _GLIBCXX20_CONSTEXPR inline void
+     251              :     destroy(_ForwardIterator __first, _ForwardIterator __last)
+     252              :     {
+     253              :       std::_Destroy(__first, __last);
+     254              :     }
+     255              : 
+     256              :   template <typename _ForwardIterator, typename _Size>
+     257              :     _GLIBCXX20_CONSTEXPR inline _ForwardIterator
+     258              :     destroy_n(_ForwardIterator __first, _Size __count)
+     259              :     {
+     260              :       return std::_Destroy_n(__first, __count);
+     261              :     }
+     262              : #endif // C++17
+     263              : 
+     264              : _GLIBCXX_END_NAMESPACE_VERSION
+     265              : } // namespace std
+     266              : 
+     267              : #endif /* _STL_CONSTRUCT_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_deque.h.func-c.html b/html/usr/include/c++/13/bits/stl_deque.h.func-c.html new file mode 100644 index 0000000..5053da5 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_deque.h.func-c.html @@ -0,0 +1,824 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_deque.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_deque.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %1370
Test Date:2024-04-30 13:17:26Functions:0.0 %720
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt11_Deque_baseIlSaIlEE19_M_get_Tp_allocatorEv0
_ZNKSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE19_M_get_Tp_allocatorEv0
_ZNKSt11_Deque_baseIlSaIlEE19_M_get_Tp_allocatorEv0
_ZNKSt11_Deque_baseIlSaIlEE20_M_get_map_allocatorEv0
_ZNKSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE20_M_get_map_allocatorEv0
_ZNKSt11_Deque_baseIlSaIlEE20_M_get_map_allocatorEv0
_ZNKSt15_Deque_iteratorIlRlPlEdeEv0
_ZNKSt15_Deque_iteratorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEERS5_PS5_EdeEv0
_ZNKSt15_Deque_iteratorIlRlPlEdeEv0
_ZNKSt5dequeIlSaIlEE4sizeEv0
_ZNKSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE4sizeEv0
_ZNKSt5dequeIlSaIlEE4sizeEv0
_ZNKSt5dequeIlSaIlEE5emptyEv0
_ZNKSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE5emptyEv0
_ZNKSt5dequeIlSaIlEE5emptyEv0
_ZNKSt5dequeIlSaIlEE8max_sizeEv0
_ZNKSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE8max_sizeEv0
_ZNKSt5dequeIlSaIlEE8max_sizeEv0
_ZNSt11_Deque_baseIlSaIlEE11_Deque_implC2Ev0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE11_Deque_implC2Ev0
_ZNSt11_Deque_baseIlSaIlEE11_Deque_implC2Ev0
_ZNSt11_Deque_baseIlSaIlEE15_M_allocate_mapEm0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE15_M_allocate_mapEm0
_ZNSt11_Deque_baseIlSaIlEE15_M_allocate_mapEm0
_ZNSt11_Deque_baseIlSaIlEE15_M_create_nodesEPPlS3_0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE15_M_create_nodesEPPS5_S9_0
_ZNSt11_Deque_baseIlSaIlEE15_M_create_nodesEPPlS3_0
_ZNSt11_Deque_baseIlSaIlEE16_Deque_impl_dataC2Ev0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE16_Deque_impl_dataC2Ev0
_ZNSt11_Deque_baseIlSaIlEE16_Deque_impl_dataC2Ev0
_ZNSt11_Deque_baseIlSaIlEE16_M_allocate_nodeEv0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE16_M_allocate_nodeEv0
_ZNSt11_Deque_baseIlSaIlEE16_M_allocate_nodeEv0
_ZNSt11_Deque_baseIlSaIlEE16_M_destroy_nodesEPPlS3_0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE16_M_destroy_nodesEPPS5_S9_0
_ZNSt11_Deque_baseIlSaIlEE16_M_destroy_nodesEPPlS3_0
_ZNSt11_Deque_baseIlSaIlEE17_M_deallocate_mapEPPlm0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE17_M_deallocate_mapEPPS5_m0
_ZNSt11_Deque_baseIlSaIlEE17_M_deallocate_mapEPPlm0
_ZNSt11_Deque_baseIlSaIlEE17_M_initialize_mapEm0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE17_M_initialize_mapEm0
_ZNSt11_Deque_baseIlSaIlEE17_M_initialize_mapEm0
_ZNSt11_Deque_baseIlSaIlEE18_M_deallocate_nodeEPl0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE18_M_deallocate_nodeEPS5_0
_ZNSt11_Deque_baseIlSaIlEE18_M_deallocate_nodeEPl0
_ZNSt11_Deque_baseIlSaIlEE19_M_get_Tp_allocatorEv0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE19_M_get_Tp_allocatorEv0
_ZNSt11_Deque_baseIlSaIlEE19_M_get_Tp_allocatorEv0
_ZNSt11_Deque_baseIlSaIlEEC2Ev0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EEC2Ev0
_ZNSt11_Deque_baseIlSaIlEEC2Ev0
_ZNSt11_Deque_baseIlSaIlEED2Ev0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EED2Ev0
_ZNSt11_Deque_baseIlSaIlEED2Ev0
_ZNSt15_Deque_iteratorIlRlPlE11_M_set_nodeEPS1_0
_ZNSt15_Deque_iteratorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEERS5_PS5_E11_M_set_nodeEPS7_0
_ZNSt15_Deque_iteratorIlRlPlE11_M_set_nodeEPS1_0
_ZNSt15_Deque_iteratorIlRlPlE14_S_buffer_sizeEv0
_ZNSt15_Deque_iteratorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEERS5_PS5_E14_S_buffer_sizeEv0
_ZNSt15_Deque_iteratorIlRlPlE14_S_buffer_sizeEv0
_ZNSt15_Deque_iteratorIlRlPlEC2ERKS2_0
_ZNSt15_Deque_iteratorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEERS5_PS5_EC2ERKS8_0
_ZNSt15_Deque_iteratorIlRlPlEC2ERKS2_0
_ZNSt15_Deque_iteratorIlRlPlEC2Ev0
_ZNSt15_Deque_iteratorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEERS5_PS5_EC2Ev0
_ZNSt15_Deque_iteratorIlRlPlEC2Ev0
_ZNSt15_Deque_iteratorIlRlPlEmmEv0
_ZNSt15_Deque_iteratorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEERS5_PS5_EmmEv0
_ZNSt15_Deque_iteratorIlRlPlEmmEv0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE9push_backEOS5_0
_ZNSt5dequeIlSaIlEE11_S_max_sizeERKS0_0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE11_S_max_sizeERKS6_0
_ZNSt5dequeIlSaIlEE11_S_max_sizeERKS0_0
_ZNSt5dequeIlSaIlEE15_M_destroy_dataESt15_Deque_iteratorIlRlPlES5_RKS0_0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE15_M_destroy_dataESt15_Deque_iteratorIS5_RS5_PS5_ESB_RKS6_0
_ZNSt5dequeIlSaIlEE15_M_destroy_dataESt15_Deque_iteratorIlRlPlES5_RKS0_0
_ZNSt5dequeIlSaIlEE22_M_reserve_map_at_backEm0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE22_M_reserve_map_at_backEm0
_ZNSt5dequeIlSaIlEE22_M_reserve_map_at_backEm0
_ZNSt5dequeIlSaIlEE3endEv0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE3endEv0
_ZNSt5dequeIlSaIlEE3endEv0
_ZNSt5dequeIlSaIlEE4backEv0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE4backEv0
_ZNSt5dequeIlSaIlEE4backEv0
_ZNSt5dequeIlSaIlEE5beginEv0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE5beginEv0
_ZNSt5dequeIlSaIlEE5beginEv0
_ZNSt5dequeIlSaIlEE8pop_backEv0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE8pop_backEv0
_ZNSt5dequeIlSaIlEE8pop_backEv0
_ZNSt5dequeIlSaIlEE9push_backERKl0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE9push_backERKS5_0
_ZNSt5dequeIlSaIlEE9push_backERKl0
_ZNSt5dequeIlSaIlEEC2Ev0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EEC2Ev0
_ZNSt5dequeIlSaIlEEC2Ev0
_ZNSt5dequeIlSaIlEED2Ev0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EED2Ev0
_ZNSt5dequeIlSaIlEED2Ev0
_ZSt16__deque_buf_sizem0
_ZSteqRKSt15_Deque_iteratorIlRlPlES4_0
_ZSteqRKSt15_Deque_iteratorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEERS5_PS5_ESA_0
_ZSteqRKSt15_Deque_iteratorIlRlPlES4_0
_ZStmiRKSt15_Deque_iteratorIlRlPlES4_0
_ZStmiRKSt15_Deque_iteratorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEERS5_PS5_ESA_0
_ZStmiRKSt15_Deque_iteratorIlRlPlES4_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_deque.h.func.html b/html/usr/include/c++/13/bits/stl_deque.h.func.html new file mode 100644 index 0000000..6b1de6b --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_deque.h.func.html @@ -0,0 +1,824 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_deque.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_deque.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %1370
Test Date:2024-04-30 13:17:26Functions:0.0 %720
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt11_Deque_baseIlSaIlEE19_M_get_Tp_allocatorEv0
_ZNKSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE19_M_get_Tp_allocatorEv0
_ZNKSt11_Deque_baseIlSaIlEE19_M_get_Tp_allocatorEv0
_ZNKSt11_Deque_baseIlSaIlEE20_M_get_map_allocatorEv0
_ZNKSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE20_M_get_map_allocatorEv0
_ZNKSt11_Deque_baseIlSaIlEE20_M_get_map_allocatorEv0
_ZNKSt15_Deque_iteratorIlRlPlEdeEv0
_ZNKSt15_Deque_iteratorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEERS5_PS5_EdeEv0
_ZNKSt15_Deque_iteratorIlRlPlEdeEv0
_ZNKSt5dequeIlSaIlEE4sizeEv0
_ZNKSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE4sizeEv0
_ZNKSt5dequeIlSaIlEE4sizeEv0
_ZNKSt5dequeIlSaIlEE5emptyEv0
_ZNKSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE5emptyEv0
_ZNKSt5dequeIlSaIlEE5emptyEv0
_ZNKSt5dequeIlSaIlEE8max_sizeEv0
_ZNKSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE8max_sizeEv0
_ZNKSt5dequeIlSaIlEE8max_sizeEv0
_ZNSt11_Deque_baseIlSaIlEE11_Deque_implC2Ev0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE11_Deque_implC2Ev0
_ZNSt11_Deque_baseIlSaIlEE11_Deque_implC2Ev0
_ZNSt11_Deque_baseIlSaIlEE15_M_allocate_mapEm0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE15_M_allocate_mapEm0
_ZNSt11_Deque_baseIlSaIlEE15_M_allocate_mapEm0
_ZNSt11_Deque_baseIlSaIlEE15_M_create_nodesEPPlS3_0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE15_M_create_nodesEPPS5_S9_0
_ZNSt11_Deque_baseIlSaIlEE15_M_create_nodesEPPlS3_0
_ZNSt11_Deque_baseIlSaIlEE16_Deque_impl_dataC2Ev0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE16_Deque_impl_dataC2Ev0
_ZNSt11_Deque_baseIlSaIlEE16_Deque_impl_dataC2Ev0
_ZNSt11_Deque_baseIlSaIlEE16_M_allocate_nodeEv0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE16_M_allocate_nodeEv0
_ZNSt11_Deque_baseIlSaIlEE16_M_allocate_nodeEv0
_ZNSt11_Deque_baseIlSaIlEE16_M_destroy_nodesEPPlS3_0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE16_M_destroy_nodesEPPS5_S9_0
_ZNSt11_Deque_baseIlSaIlEE16_M_destroy_nodesEPPlS3_0
_ZNSt11_Deque_baseIlSaIlEE17_M_deallocate_mapEPPlm0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE17_M_deallocate_mapEPPS5_m0
_ZNSt11_Deque_baseIlSaIlEE17_M_deallocate_mapEPPlm0
_ZNSt11_Deque_baseIlSaIlEE17_M_initialize_mapEm0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE17_M_initialize_mapEm0
_ZNSt11_Deque_baseIlSaIlEE17_M_initialize_mapEm0
_ZNSt11_Deque_baseIlSaIlEE18_M_deallocate_nodeEPl0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE18_M_deallocate_nodeEPS5_0
_ZNSt11_Deque_baseIlSaIlEE18_M_deallocate_nodeEPl0
_ZNSt11_Deque_baseIlSaIlEE19_M_get_Tp_allocatorEv0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE19_M_get_Tp_allocatorEv0
_ZNSt11_Deque_baseIlSaIlEE19_M_get_Tp_allocatorEv0
_ZNSt11_Deque_baseIlSaIlEEC2Ev0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EEC2Ev0
_ZNSt11_Deque_baseIlSaIlEEC2Ev0
_ZNSt11_Deque_baseIlSaIlEED2Ev0
_ZNSt11_Deque_baseINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EED2Ev0
_ZNSt11_Deque_baseIlSaIlEED2Ev0
_ZNSt15_Deque_iteratorIlRlPlE11_M_set_nodeEPS1_0
_ZNSt15_Deque_iteratorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEERS5_PS5_E11_M_set_nodeEPS7_0
_ZNSt15_Deque_iteratorIlRlPlE11_M_set_nodeEPS1_0
_ZNSt15_Deque_iteratorIlRlPlE14_S_buffer_sizeEv0
_ZNSt15_Deque_iteratorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEERS5_PS5_E14_S_buffer_sizeEv0
_ZNSt15_Deque_iteratorIlRlPlE14_S_buffer_sizeEv0
_ZNSt15_Deque_iteratorIlRlPlEC2ERKS2_0
_ZNSt15_Deque_iteratorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEERS5_PS5_EC2ERKS8_0
_ZNSt15_Deque_iteratorIlRlPlEC2ERKS2_0
_ZNSt15_Deque_iteratorIlRlPlEC2Ev0
_ZNSt15_Deque_iteratorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEERS5_PS5_EC2Ev0
_ZNSt15_Deque_iteratorIlRlPlEC2Ev0
_ZNSt15_Deque_iteratorIlRlPlEmmEv0
_ZNSt15_Deque_iteratorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEERS5_PS5_EmmEv0
_ZNSt15_Deque_iteratorIlRlPlEmmEv0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE9push_backEOS5_0
_ZNSt5dequeIlSaIlEE11_S_max_sizeERKS0_0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE11_S_max_sizeERKS6_0
_ZNSt5dequeIlSaIlEE11_S_max_sizeERKS0_0
_ZNSt5dequeIlSaIlEE15_M_destroy_dataESt15_Deque_iteratorIlRlPlES5_RKS0_0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE15_M_destroy_dataESt15_Deque_iteratorIS5_RS5_PS5_ESB_RKS6_0
_ZNSt5dequeIlSaIlEE15_M_destroy_dataESt15_Deque_iteratorIlRlPlES5_RKS0_0
_ZNSt5dequeIlSaIlEE22_M_reserve_map_at_backEm0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE22_M_reserve_map_at_backEm0
_ZNSt5dequeIlSaIlEE22_M_reserve_map_at_backEm0
_ZNSt5dequeIlSaIlEE3endEv0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE3endEv0
_ZNSt5dequeIlSaIlEE3endEv0
_ZNSt5dequeIlSaIlEE4backEv0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE4backEv0
_ZNSt5dequeIlSaIlEE4backEv0
_ZNSt5dequeIlSaIlEE5beginEv0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE5beginEv0
_ZNSt5dequeIlSaIlEE5beginEv0
_ZNSt5dequeIlSaIlEE8pop_backEv0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE8pop_backEv0
_ZNSt5dequeIlSaIlEE8pop_backEv0
_ZNSt5dequeIlSaIlEE9push_backERKl0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EE9push_backERKS5_0
_ZNSt5dequeIlSaIlEE9push_backERKl0
_ZNSt5dequeIlSaIlEEC2Ev0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EEC2Ev0
_ZNSt5dequeIlSaIlEEC2Ev0
_ZNSt5dequeIlSaIlEED2Ev0
_ZNSt5dequeINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESaIS5_EED2Ev0
_ZNSt5dequeIlSaIlEED2Ev0
_ZSt16__deque_buf_sizem0
_ZSteqRKSt15_Deque_iteratorIlRlPlES4_0
_ZSteqRKSt15_Deque_iteratorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEERS5_PS5_ESA_0
_ZSteqRKSt15_Deque_iteratorIlRlPlES4_0
_ZStmiRKSt15_Deque_iteratorIlRlPlES4_0
_ZStmiRKSt15_Deque_iteratorINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEERS5_PS5_ESA_0
_ZStmiRKSt15_Deque_iteratorIlRlPlES4_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_deque.h.gcov.html b/html/usr/include/c++/13/bits/stl_deque.h.gcov.html new file mode 100644 index 0000000..ae72bbc --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_deque.h.gcov.html @@ -0,0 +1,2461 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_deque.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_deque.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %1370
Test Date:2024-04-30 13:17:26Functions:0.0 %720
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Deque implementation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1997
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/stl_deque.h
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{deque}
+      54              :  */
+      55              : 
+      56              : #ifndef _STL_DEQUE_H
+      57              : #define _STL_DEQUE_H 1
+      58              : 
+      59              : #include <bits/concept_check.h>
+      60              : #include <bits/stl_iterator_base_types.h>
+      61              : #include <bits/stl_iterator_base_funcs.h>
+      62              : #if __cplusplus >= 201103L
+      63              : #include <initializer_list>
+      64              : #include <bits/stl_uninitialized.h> // for __is_bitwise_relocatable
+      65              : #endif
+      66              : #if __cplusplus > 201703L
+      67              : # include <compare>
+      68              : #endif
+      69              : 
+      70              : #include <debug/assertions.h>
+      71              : 
+      72              : namespace std _GLIBCXX_VISIBILITY(default)
+      73              : {
+      74              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      75              : _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
+      76              : 
+      77              :   /**
+      78              :    *  @brief This function controls the size of memory nodes.
+      79              :    *  @param  __size  The size of an element.
+      80              :    *  @return   The number (not byte size) of elements per node.
+      81              :    *
+      82              :    *  This function started off as a compiler kludge from SGI, but
+      83              :    *  seems to be a useful wrapper around a repeated constant
+      84              :    *  expression.  The @b 512 is tunable (and no other code needs to
+      85              :    *  change), but no investigation has been done since inheriting the
+      86              :    *  SGI code.  Touch _GLIBCXX_DEQUE_BUF_SIZE only if you know what
+      87              :    *  you are doing, however: changing it breaks the binary
+      88              :    *  compatibility!!
+      89              :   */
+      90              : 
+      91              : #ifndef _GLIBCXX_DEQUE_BUF_SIZE
+      92              : #define _GLIBCXX_DEQUE_BUF_SIZE 512
+      93              : #endif
+      94              : 
+      95              :   _GLIBCXX_CONSTEXPR inline size_t
+      96            0 :   __deque_buf_size(size_t __size)
+      97              :   { return (__size < _GLIBCXX_DEQUE_BUF_SIZE
+      98            0 :             ? size_t(_GLIBCXX_DEQUE_BUF_SIZE / __size) : size_t(1)); }
+      99              : 
+     100              : 
+     101              :   /**
+     102              :    *  @brief A deque::iterator.
+     103              :    *
+     104              :    *  Quite a bit of intelligence here.  Much of the functionality of
+     105              :    *  deque is actually passed off to this class.  A deque holds two
+     106              :    *  of these internally, marking its valid range.  Access to
+     107              :    *  elements is done as offsets of either of those two, relying on
+     108              :    *  operator overloading in this class.
+     109              :    *
+     110              :    *  All the functions are op overloads except for _M_set_node.
+     111              :   */
+     112              :   template<typename _Tp, typename _Ref, typename _Ptr>
+     113              :     struct _Deque_iterator
+     114              :     {
+     115              : #if __cplusplus < 201103L
+     116              :       typedef _Deque_iterator<_Tp, _Tp&, _Tp*>                   iterator;
+     117              :       typedef _Deque_iterator<_Tp, const _Tp&, const _Tp*> const_iterator;
+     118              :       typedef _Tp*                                         _Elt_pointer;
+     119              :       typedef _Tp**                                        _Map_pointer;
+     120              : #else
+     121              :     private:
+     122              :       template<typename _CvTp>
+     123              :         using __iter = _Deque_iterator<_Tp, _CvTp&, __ptr_rebind<_Ptr, _CvTp>>;
+     124              :     public:
+     125              :       typedef __iter<_Tp>                            iterator;
+     126              :       typedef __iter<const _Tp>                              const_iterator;
+     127              :       typedef __ptr_rebind<_Ptr, _Tp>                        _Elt_pointer;
+     128              :       typedef __ptr_rebind<_Ptr, _Elt_pointer>               _Map_pointer;
+     129              : #endif
+     130              : 
+     131            0 :       static size_t _S_buffer_size() _GLIBCXX_NOEXCEPT
+     132            0 :       { return __deque_buf_size(sizeof(_Tp)); }
+     133              : 
+     134              :       typedef std::random_access_iterator_tag   iterator_category;
+     135              :       typedef _Tp                               value_type;
+     136              :       typedef _Ptr                              pointer;
+     137              :       typedef _Ref                              reference;
+     138              :       typedef size_t                            size_type;
+     139              :       typedef ptrdiff_t                         difference_type;
+     140              :       typedef _Deque_iterator                   _Self;
+     141              : 
+     142              :       _Elt_pointer _M_cur;
+     143              :       _Elt_pointer _M_first;
+     144              :       _Elt_pointer _M_last;
+     145              :       _Map_pointer _M_node;
+     146              : 
+     147              :       _Deque_iterator(_Elt_pointer __x, _Map_pointer __y) _GLIBCXX_NOEXCEPT
+     148              :       : _M_cur(__x), _M_first(*__y),
+     149              :         _M_last(*__y + _S_buffer_size()), _M_node(__y) { }
+     150              : 
+     151            0 :       _Deque_iterator() _GLIBCXX_NOEXCEPT
+     152            0 :       : _M_cur(), _M_first(), _M_last(), _M_node() { }
+     153              : 
+     154              : #if __cplusplus < 201103L
+     155              :       // Conversion from iterator to const_iterator.
+     156              :       _Deque_iterator(const iterator& __x) _GLIBCXX_NOEXCEPT
+     157              :       : _M_cur(__x._M_cur), _M_first(__x._M_first),
+     158              :         _M_last(__x._M_last), _M_node(__x._M_node) { }
+     159              : #else
+     160              :       // Conversion from iterator to const_iterator.
+     161              :       template<typename _Iter,
+     162              :                typename = _Require<is_same<_Self, const_iterator>,
+     163              :                                    is_same<_Iter, iterator>>>
+     164              :        _Deque_iterator(const _Iter& __x) noexcept
+     165              :        : _M_cur(__x._M_cur), _M_first(__x._M_first),
+     166              :          _M_last(__x._M_last), _M_node(__x._M_node) { }
+     167              : 
+     168            0 :       _Deque_iterator(const _Deque_iterator& __x) noexcept
+     169            0 :        : _M_cur(__x._M_cur), _M_first(__x._M_first),
+     170            0 :          _M_last(__x._M_last), _M_node(__x._M_node) { }
+     171              : 
+     172              :       _Deque_iterator& operator=(const _Deque_iterator&) = default;
+     173              : #endif
+     174              : 
+     175              :       iterator
+     176              :       _M_const_cast() const _GLIBCXX_NOEXCEPT
+     177              :       { return iterator(_M_cur, _M_node); }
+     178              : 
+     179              :       _GLIBCXX_NODISCARD
+     180              :       reference
+     181            0 :       operator*() const _GLIBCXX_NOEXCEPT
+     182            0 :       { return *_M_cur; }
+     183              : 
+     184              :       _GLIBCXX_NODISCARD
+     185              :       pointer
+     186              :       operator->() const _GLIBCXX_NOEXCEPT
+     187              :       { return _M_cur; }
+     188              : 
+     189              :       _Self&
+     190              :       operator++() _GLIBCXX_NOEXCEPT
+     191              :       {
+     192              :         ++_M_cur;
+     193              :         if (_M_cur == _M_last)
+     194              :           {
+     195              :             _M_set_node(_M_node + 1);
+     196              :             _M_cur = _M_first;
+     197              :           }
+     198              :         return *this;
+     199              :       }
+     200              : 
+     201              :       _Self
+     202              :       operator++(int) _GLIBCXX_NOEXCEPT
+     203              :       {
+     204              :         _Self __tmp = *this;
+     205              :         ++*this;
+     206              :         return __tmp;
+     207              :       }
+     208              : 
+     209              :       _Self&
+     210            0 :       operator--() _GLIBCXX_NOEXCEPT
+     211              :       {
+     212            0 :         if (_M_cur == _M_first)
+     213              :           {
+     214            0 :             _M_set_node(_M_node - 1);
+     215            0 :             _M_cur = _M_last;
+     216              :           }
+     217            0 :         --_M_cur;
+     218            0 :         return *this;
+     219              :       }
+     220              : 
+     221              :       _Self
+     222              :       operator--(int) _GLIBCXX_NOEXCEPT
+     223              :       {
+     224              :         _Self __tmp = *this;
+     225              :         --*this;
+     226              :         return __tmp;
+     227              :       }
+     228              : 
+     229              :       _Self&
+     230              :       operator+=(difference_type __n) _GLIBCXX_NOEXCEPT
+     231              :       {
+     232              :         const difference_type __offset = __n + (_M_cur - _M_first);
+     233              :         if (__offset >= 0 && __offset < difference_type(_S_buffer_size()))
+     234              :           _M_cur += __n;
+     235              :         else
+     236              :           {
+     237              :             const difference_type __node_offset =
+     238              :               __offset > 0 ? __offset / difference_type(_S_buffer_size())
+     239              :                            : -difference_type((-__offset - 1)
+     240              :                                               / _S_buffer_size()) - 1;
+     241              :             _M_set_node(_M_node + __node_offset);
+     242              :             _M_cur = _M_first + (__offset - __node_offset
+     243              :                                  * difference_type(_S_buffer_size()));
+     244              :           }
+     245              :         return *this;
+     246              :       }
+     247              : 
+     248              :       _Self&
+     249              :       operator-=(difference_type __n) _GLIBCXX_NOEXCEPT
+     250              :       { return *this += -__n; }
+     251              : 
+     252              :       _GLIBCXX_NODISCARD
+     253              :       reference
+     254              :       operator[](difference_type __n) const _GLIBCXX_NOEXCEPT
+     255              :       { return *(*this + __n); }
+     256              : 
+     257              :       /**
+     258              :        *  Prepares to traverse new_node.  Sets everything except
+     259              :        *  _M_cur, which should therefore be set by the caller
+     260              :        *  immediately afterwards, based on _M_first and _M_last.
+     261              :        */
+     262              :       void
+     263            0 :       _M_set_node(_Map_pointer __new_node) _GLIBCXX_NOEXCEPT
+     264              :       {
+     265            0 :         _M_node = __new_node;
+     266            0 :         _M_first = *__new_node;
+     267            0 :         _M_last = _M_first + difference_type(_S_buffer_size());
+     268            0 :       }
+     269              : 
+     270              :       _GLIBCXX_NODISCARD
+     271              :       friend bool
+     272            0 :       operator==(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+     273            0 :       { return __x._M_cur == __y._M_cur; }
+     274              : 
+     275              :       // Note: we also provide overloads whose operands are of the same type in
+     276              :       // order to avoid ambiguous overload resolution when std::rel_ops
+     277              :       // operators are in scope (for additional details, see libstdc++/3628)
+     278              :       template<typename _RefR, typename _PtrR>
+     279              :         _GLIBCXX_NODISCARD
+     280              :         friend bool
+     281              :         operator==(const _Self& __x,
+     282              :                    const _Deque_iterator<_Tp, _RefR, _PtrR>& __y)
+     283              :         _GLIBCXX_NOEXCEPT
+     284              :         { return __x._M_cur == __y._M_cur; }
+     285              : 
+     286              : #if __cpp_lib_three_way_comparison
+     287              :       [[nodiscard]]
+     288              :       friend strong_ordering
+     289              :       operator<=>(const _Self& __x, const _Self& __y) noexcept
+     290              :       {
+     291              :         if (const auto __cmp = __x._M_node <=> __y._M_node; __cmp != 0)
+     292              :           return __cmp;
+     293              :         return __x._M_cur <=> __y._M_cur;
+     294              :       }
+     295              : #else
+     296              :       _GLIBCXX_NODISCARD
+     297              :       friend bool
+     298              :       operator!=(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+     299              :       { return !(__x == __y); }
+     300              : 
+     301              :       template<typename _RefR, typename _PtrR>
+     302              :         _GLIBCXX_NODISCARD
+     303              :         friend bool
+     304              :         operator!=(const _Self& __x,
+     305              :                    const _Deque_iterator<_Tp, _RefR, _PtrR>& __y)
+     306              :         _GLIBCXX_NOEXCEPT
+     307              :         { return !(__x == __y); }
+     308              : 
+     309              :       _GLIBCXX_NODISCARD
+     310              :       friend bool
+     311              :       operator<(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+     312              :       {
+     313              :         return (__x._M_node == __y._M_node)
+     314              :           ? (__x._M_cur < __y._M_cur) : (__x._M_node < __y._M_node);
+     315              :       }
+     316              : 
+     317              :       template<typename _RefR, typename _PtrR>
+     318              :         _GLIBCXX_NODISCARD
+     319              :         friend bool
+     320              :         operator<(const _Self& __x,
+     321              :                   const _Deque_iterator<_Tp, _RefR, _PtrR>& __y)
+     322              :         _GLIBCXX_NOEXCEPT
+     323              :         {
+     324              :           return (__x._M_node == __y._M_node)
+     325              :             ? (__x._M_cur < __y._M_cur) : (__x._M_node < __y._M_node);
+     326              :         }
+     327              : 
+     328              :       _GLIBCXX_NODISCARD
+     329              :       friend bool
+     330              :       operator>(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+     331              :       { return __y < __x; }
+     332              : 
+     333              :       template<typename _RefR, typename _PtrR>
+     334              :         _GLIBCXX_NODISCARD
+     335              :         friend bool
+     336              :         operator>(const _Self& __x,
+     337              :                   const _Deque_iterator<_Tp, _RefR, _PtrR>& __y)
+     338              :         _GLIBCXX_NOEXCEPT
+     339              :         { return __y < __x; }
+     340              : 
+     341              :       _GLIBCXX_NODISCARD
+     342              :       friend bool
+     343              :       operator<=(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+     344              :       { return !(__y < __x); }
+     345              : 
+     346              :       template<typename _RefR, typename _PtrR>
+     347              :         _GLIBCXX_NODISCARD
+     348              :         friend bool
+     349              :         operator<=(const _Self& __x,
+     350              :                    const _Deque_iterator<_Tp, _RefR, _PtrR>& __y)
+     351              :         _GLIBCXX_NOEXCEPT
+     352              :         { return !(__y < __x); }
+     353              : 
+     354              :       _GLIBCXX_NODISCARD
+     355              :       friend bool
+     356              :       operator>=(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+     357              :       { return !(__x < __y); }
+     358              : 
+     359              :       template<typename _RefR, typename _PtrR>
+     360              :         _GLIBCXX_NODISCARD
+     361              :         friend bool
+     362              :         operator>=(const _Self& __x,
+     363              :                    const _Deque_iterator<_Tp, _RefR, _PtrR>& __y)
+     364              :         _GLIBCXX_NOEXCEPT
+     365              :         { return !(__x < __y); }
+     366              : #endif // three-way comparison
+     367              : 
+     368              :       _GLIBCXX_NODISCARD
+     369              :       friend difference_type
+     370            0 :       operator-(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+     371              :       {
+     372            0 :         return difference_type(_S_buffer_size())
+     373            0 :           * (__x._M_node - __y._M_node - bool(__x._M_node))
+     374            0 :           + (__x._M_cur - __x._M_first)
+     375            0 :           + (__y._M_last - __y._M_cur);
+     376              :       }
+     377              : 
+     378              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     379              :       // According to the resolution of DR179 not only the various comparison
+     380              :       // operators but also operator- must accept mixed iterator/const_iterator
+     381              :       // parameters.
+     382              :       template<typename _RefR, typename _PtrR>
+     383              :         _GLIBCXX_NODISCARD
+     384              :         friend difference_type
+     385              :         operator-(const _Self& __x,
+     386              :                   const _Deque_iterator<_Tp, _RefR, _PtrR>& __y)
+     387              :         _GLIBCXX_NOEXCEPT
+     388              :         {
+     389              :           return difference_type(_S_buffer_size())
+     390              :             * (__x._M_node - __y._M_node - bool(__x._M_node))
+     391              :             + (__x._M_cur - __x._M_first)
+     392              :             + (__y._M_last - __y._M_cur);
+     393              :         }
+     394              : 
+     395              :       _GLIBCXX_NODISCARD
+     396              :       friend _Self
+     397              :       operator+(const _Self& __x, difference_type __n) _GLIBCXX_NOEXCEPT
+     398              :       {
+     399              :         _Self __tmp = __x;
+     400              :         __tmp += __n;
+     401              :         return __tmp;
+     402              :       }
+     403              : 
+     404              :       _GLIBCXX_NODISCARD
+     405              :       friend _Self
+     406              :       operator-(const _Self& __x, difference_type __n) _GLIBCXX_NOEXCEPT
+     407              :       {
+     408              :         _Self __tmp = __x;
+     409              :         __tmp -= __n;
+     410              :         return __tmp;
+     411              :       }
+     412              : 
+     413              :       _GLIBCXX_NODISCARD
+     414              :       friend _Self
+     415              :       operator+(difference_type __n, const _Self& __x) _GLIBCXX_NOEXCEPT
+     416              :       { return __x + __n; }
+     417              :     };
+     418              : 
+     419              :   /**
+     420              :    *  Deque base class.  This class provides the unified face for %deque's
+     421              :    *  allocation.  This class's constructor and destructor allocate and
+     422              :    *  deallocate (but do not initialize) storage.  This makes %exception
+     423              :    *  safety easier.
+     424              :    *
+     425              :    *  Nothing in this class ever constructs or destroys an actual Tp element.
+     426              :    *  (Deque handles that itself.)  Only/All memory management is performed
+     427              :    *  here.
+     428              :   */
+     429              :   template<typename _Tp, typename _Alloc>
+     430              :     class _Deque_base
+     431              :     {
+     432              :     protected:
+     433              :       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+     434              :         rebind<_Tp>::other _Tp_alloc_type;
+     435              :       typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type>    _Alloc_traits;
+     436              : 
+     437              : #if __cplusplus < 201103L
+     438              :       typedef _Tp*                                      _Ptr;
+     439              :       typedef const _Tp*                                _Ptr_const;
+     440              : #else
+     441              :       typedef typename _Alloc_traits::pointer           _Ptr;
+     442              :       typedef typename _Alloc_traits::const_pointer     _Ptr_const;
+     443              : #endif
+     444              : 
+     445              :       typedef typename _Alloc_traits::template rebind<_Ptr>::other
+     446              :         _Map_alloc_type;
+     447              :       typedef __gnu_cxx::__alloc_traits<_Map_alloc_type> _Map_alloc_traits;
+     448              : 
+     449              :       typedef _Alloc              allocator_type;
+     450              : 
+     451              :       allocator_type
+     452              :       get_allocator() const _GLIBCXX_NOEXCEPT
+     453              :       { return allocator_type(_M_get_Tp_allocator()); }
+     454              : 
+     455              :       typedef _Deque_iterator<_Tp, _Tp&, _Ptr>          iterator;
+     456              :       typedef _Deque_iterator<_Tp, const _Tp&, _Ptr_const>   const_iterator;
+     457              : 
+     458            0 :       _Deque_base()
+     459            0 :       : _M_impl()
+     460            0 :       { _M_initialize_map(0); }
+     461              : 
+     462              :       _Deque_base(size_t __num_elements)
+     463              :       : _M_impl()
+     464              :       { _M_initialize_map(__num_elements); }
+     465              : 
+     466              :       _Deque_base(const allocator_type& __a, size_t __num_elements)
+     467              :       : _M_impl(__a)
+     468              :       { _M_initialize_map(__num_elements); }
+     469              : 
+     470              :       _Deque_base(const allocator_type& __a)
+     471              :       : _M_impl(__a)
+     472              :       { /* Caller must initialize map. */ }
+     473              : 
+     474              : #if __cplusplus >= 201103L
+     475              :       _Deque_base(_Deque_base&& __x)
+     476              :       : _M_impl(std::move(__x._M_get_Tp_allocator()))
+     477              :       {
+     478              :         _M_initialize_map(0);
+     479              :         if (__x._M_impl._M_map)
+     480              :           this->_M_impl._M_swap_data(__x._M_impl);
+     481              :       }
+     482              : 
+     483              :       _Deque_base(_Deque_base&& __x, const allocator_type& __a)
+     484              :       : _M_impl(std::move(__x._M_impl), _Tp_alloc_type(__a))
+     485              :       { __x._M_initialize_map(0); }
+     486              : 
+     487              :       _Deque_base(_Deque_base&& __x, const allocator_type& __a, size_t __n)
+     488              :       : _M_impl(__a)
+     489              :       {
+     490              :         if (__x.get_allocator() == __a)
+     491              :           {
+     492              :             if (__x._M_impl._M_map)
+     493              :               {
+     494              :                 _M_initialize_map(0);
+     495              :                 this->_M_impl._M_swap_data(__x._M_impl);
+     496              :               }
+     497              :           }
+     498              :         else
+     499              :           {
+     500              :             _M_initialize_map(__n);
+     501              :           }
+     502              :       }
+     503              : #endif
+     504              : 
+     505              :       ~_Deque_base() _GLIBCXX_NOEXCEPT;
+     506              : 
+     507              :       typedef typename iterator::_Map_pointer _Map_pointer;
+     508              : 
+     509              :       struct _Deque_impl_data
+     510              :       {
+     511              :         _Map_pointer _M_map;
+     512              :         size_t _M_map_size;
+     513              :         iterator _M_start;
+     514              :         iterator _M_finish;
+     515              : 
+     516            0 :         _Deque_impl_data() _GLIBCXX_NOEXCEPT
+     517            0 :         : _M_map(), _M_map_size(), _M_start(), _M_finish()
+     518            0 :         { }
+     519              : 
+     520              : #if __cplusplus >= 201103L
+     521              :         _Deque_impl_data(const _Deque_impl_data&) = default;
+     522              :         _Deque_impl_data&
+     523              :         operator=(const _Deque_impl_data&) = default;
+     524              : 
+     525              :         _Deque_impl_data(_Deque_impl_data&& __x) noexcept
+     526              :         : _Deque_impl_data(__x)
+     527              :         { __x = _Deque_impl_data(); }
+     528              : #endif
+     529              : 
+     530              :         void
+     531              :         _M_swap_data(_Deque_impl_data& __x) _GLIBCXX_NOEXCEPT
+     532              :         {
+     533              :           // Do not use std::swap(_M_start, __x._M_start), etc as it loses
+     534              :           // information used by TBAA.
+     535              :           std::swap(*this, __x);
+     536              :         }
+     537              :       };
+     538              : 
+     539              :       // This struct encapsulates the implementation of the std::deque
+     540              :       // standard container and at the same time makes use of the EBO
+     541              :       // for empty allocators.
+     542              :       struct _Deque_impl
+     543              :       : public _Tp_alloc_type, public _Deque_impl_data
+     544              :       {
+     545            0 :         _Deque_impl() _GLIBCXX_NOEXCEPT_IF(
+     546              :           is_nothrow_default_constructible<_Tp_alloc_type>::value)
+     547            0 :         : _Tp_alloc_type()
+     548            0 :         { }
+     549              : 
+     550              :         _Deque_impl(const _Tp_alloc_type& __a) _GLIBCXX_NOEXCEPT
+     551              :         : _Tp_alloc_type(__a)
+     552              :         { }
+     553              : 
+     554              : #if __cplusplus >= 201103L
+     555              :         _Deque_impl(_Deque_impl&&) = default;
+     556              : 
+     557              :         _Deque_impl(_Tp_alloc_type&& __a) noexcept
+     558              :         : _Tp_alloc_type(std::move(__a))
+     559              :         { }
+     560              : 
+     561              :         _Deque_impl(_Deque_impl&& __d, _Tp_alloc_type&& __a)
+     562              :         : _Tp_alloc_type(std::move(__a)), _Deque_impl_data(std::move(__d))
+     563              :         { }
+     564              : #endif
+     565              :       };
+     566              : 
+     567              :       _Tp_alloc_type&
+     568            0 :       _M_get_Tp_allocator() _GLIBCXX_NOEXCEPT
+     569            0 :       { return this->_M_impl; }
+     570              : 
+     571              :       const _Tp_alloc_type&
+     572            0 :       _M_get_Tp_allocator() const _GLIBCXX_NOEXCEPT
+     573            0 :       { return this->_M_impl; }
+     574              : 
+     575              :       _Map_alloc_type
+     576            0 :       _M_get_map_allocator() const _GLIBCXX_NOEXCEPT
+     577            0 :       { return _Map_alloc_type(_M_get_Tp_allocator()); }
+     578              : 
+     579              :       _Ptr
+     580            0 :       _M_allocate_node()
+     581              :       {
+     582              :         typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Traits;
+     583            0 :         return _Traits::allocate(_M_impl, __deque_buf_size(sizeof(_Tp)));
+     584              :       }
+     585              : 
+     586              :       void
+     587            0 :       _M_deallocate_node(_Ptr __p) _GLIBCXX_NOEXCEPT
+     588              :       {
+     589              :         typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Traits;
+     590            0 :         _Traits::deallocate(_M_impl, __p, __deque_buf_size(sizeof(_Tp)));
+     591            0 :       }
+     592              : 
+     593              :       _Map_pointer
+     594            0 :       _M_allocate_map(size_t __n)
+     595              :       {
+     596            0 :         _Map_alloc_type __map_alloc = _M_get_map_allocator();
+     597            0 :         return _Map_alloc_traits::allocate(__map_alloc, __n);
+     598              :       }
+     599              : 
+     600              :       void
+     601            0 :       _M_deallocate_map(_Map_pointer __p, size_t __n) _GLIBCXX_NOEXCEPT
+     602              :       {
+     603            0 :         _Map_alloc_type __map_alloc = _M_get_map_allocator();
+     604              :         _Map_alloc_traits::deallocate(__map_alloc, __p, __n);
+     605            0 :       }
+     606              : 
+     607              :       void _M_initialize_map(size_t);
+     608              :       void _M_create_nodes(_Map_pointer __nstart, _Map_pointer __nfinish);
+     609              :       void _M_destroy_nodes(_Map_pointer __nstart,
+     610              :                             _Map_pointer __nfinish) _GLIBCXX_NOEXCEPT;
+     611              :       enum { _S_initial_map_size = 8 };
+     612              : 
+     613              :       _Deque_impl _M_impl;
+     614              :     };
+     615              : 
+     616              :   template<typename _Tp, typename _Alloc>
+     617            0 :     _Deque_base<_Tp, _Alloc>::
+     618              :     ~_Deque_base() _GLIBCXX_NOEXCEPT
+     619              :     {
+     620            0 :       if (this->_M_impl._M_map)
+     621              :         {
+     622            0 :           _M_destroy_nodes(this->_M_impl._M_start._M_node,
+     623            0 :                            this->_M_impl._M_finish._M_node + 1);
+     624            0 :           _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size);
+     625              :         }
+     626            0 :     }
+     627              : 
+     628              :   /**
+     629              :    *  @brief Layout storage.
+     630              :    *  @param  __num_elements  The count of T's for which to allocate space
+     631              :    *                          at first.
+     632              :    *  @return   Nothing.
+     633              :    *
+     634              :    *  The initial underlying memory layout is a bit complicated...
+     635              :   */
+     636              :   template<typename _Tp, typename _Alloc>
+     637              :     void
+     638            0 :     _Deque_base<_Tp, _Alloc>::
+     639              :     _M_initialize_map(size_t __num_elements)
+     640              :     {
+     641            0 :       const size_t __num_nodes = (__num_elements / __deque_buf_size(sizeof(_Tp))
+     642              :                                   + 1);
+     643              : 
+     644            0 :       this->_M_impl._M_map_size = std::max((size_t) _S_initial_map_size,
+     645            0 :                                            size_t(__num_nodes + 2));
+     646            0 :       this->_M_impl._M_map = _M_allocate_map(this->_M_impl._M_map_size);
+     647              : 
+     648              :       // For "small" maps (needing less than _M_map_size nodes), allocation
+     649              :       // starts in the middle elements and grows outwards.  So nstart may be
+     650              :       // the beginning of _M_map, but for small maps it may be as far in as
+     651              :       // _M_map+3.
+     652              : 
+     653            0 :       _Map_pointer __nstart = (this->_M_impl._M_map
+     654            0 :                                + (this->_M_impl._M_map_size - __num_nodes) / 2);
+     655            0 :       _Map_pointer __nfinish = __nstart + __num_nodes;
+     656              : 
+     657              :       __try
+     658            0 :         { _M_create_nodes(__nstart, __nfinish); }
+     659            0 :       __catch(...)
+     660              :         {
+     661            0 :           _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size);
+     662            0 :           this->_M_impl._M_map = _Map_pointer();
+     663            0 :           this->_M_impl._M_map_size = 0;
+     664            0 :           __throw_exception_again;
+     665              :         }
+     666              : 
+     667            0 :       this->_M_impl._M_start._M_set_node(__nstart);
+     668            0 :       this->_M_impl._M_finish._M_set_node(__nfinish - 1);
+     669            0 :       this->_M_impl._M_start._M_cur = _M_impl._M_start._M_first;
+     670            0 :       this->_M_impl._M_finish._M_cur = (this->_M_impl._M_finish._M_first
+     671            0 :                                         + __num_elements
+     672            0 :                                         % __deque_buf_size(sizeof(_Tp)));
+     673            0 :     }
+     674              : 
+     675              :   template<typename _Tp, typename _Alloc>
+     676              :     void
+     677            0 :     _Deque_base<_Tp, _Alloc>::
+     678              :     _M_create_nodes(_Map_pointer __nstart, _Map_pointer __nfinish)
+     679              :     {
+     680              :       _Map_pointer __cur;
+     681              :       __try
+     682              :         {
+     683            0 :           for (__cur = __nstart; __cur < __nfinish; ++__cur)
+     684            0 :             *__cur = this->_M_allocate_node();
+     685              :         }
+     686            0 :       __catch(...)
+     687              :         {
+     688            0 :           _M_destroy_nodes(__nstart, __cur);
+     689            0 :           __throw_exception_again;
+     690              :         }
+     691            0 :     }
+     692              : 
+     693              :   template<typename _Tp, typename _Alloc>
+     694              :     void
+     695            0 :     _Deque_base<_Tp, _Alloc>::
+     696              :     _M_destroy_nodes(_Map_pointer __nstart,
+     697              :                      _Map_pointer __nfinish) _GLIBCXX_NOEXCEPT
+     698              :     {
+     699            0 :       for (_Map_pointer __n = __nstart; __n < __nfinish; ++__n)
+     700            0 :         _M_deallocate_node(*__n);
+     701            0 :     }
+     702              : 
+     703              :   /**
+     704              :    *  @brief  A standard container using fixed-size memory allocation and
+     705              :    *  constant-time manipulation of elements at either end.
+     706              :    *
+     707              :    *  @ingroup sequences
+     708              :    *
+     709              :    *  @tparam _Tp  Type of element.
+     710              :    *  @tparam _Alloc  Allocator type, defaults to allocator<_Tp>.
+     711              :    *
+     712              :    *  Meets the requirements of a <a href="tables.html#65">container</a>, a
+     713              :    *  <a href="tables.html#66">reversible container</a>, and a
+     714              :    *  <a href="tables.html#67">sequence</a>, including the
+     715              :    *  <a href="tables.html#68">optional sequence requirements</a>.
+     716              :    *
+     717              :    *  In previous HP/SGI versions of deque, there was an extra template
+     718              :    *  parameter so users could control the node size.  This extension turned
+     719              :    *  out to violate the C++ standard (it can be detected using template
+     720              :    *  template parameters), and it was removed.
+     721              :    *
+     722              :    *  Here's how a deque<Tp> manages memory.  Each deque has 4 members:
+     723              :    *
+     724              :    *  - Tp**        _M_map
+     725              :    *  - size_t      _M_map_size
+     726              :    *  - iterator    _M_start, _M_finish
+     727              :    *
+     728              :    *  map_size is at least 8.  %map is an array of map_size
+     729              :    *  pointers-to-@a nodes.  (The name %map has nothing to do with the
+     730              :    *  std::map class, and @b nodes should not be confused with
+     731              :    *  std::list's usage of @a node.)
+     732              :    *
+     733              :    *  A @a node has no specific type name as such, but it is referred
+     734              :    *  to as @a node in this file.  It is a simple array-of-Tp.  If Tp
+     735              :    *  is very large, there will be one Tp element per node (i.e., an
+     736              :    *  @a array of one).  For non-huge Tp's, node size is inversely
+     737              :    *  related to Tp size: the larger the Tp, the fewer Tp's will fit
+     738              :    *  in a node.  The goal here is to keep the total size of a node
+     739              :    *  relatively small and constant over different Tp's, to improve
+     740              :    *  allocator efficiency.
+     741              :    *
+     742              :    *  Not every pointer in the %map array will point to a node.  If
+     743              :    *  the initial number of elements in the deque is small, the
+     744              :    *  /middle/ %map pointers will be valid, and the ones at the edges
+     745              :    *  will be unused.  This same situation will arise as the %map
+     746              :    *  grows: available %map pointers, if any, will be on the ends.  As
+     747              :    *  new nodes are created, only a subset of the %map's pointers need
+     748              :    *  to be copied @a outward.
+     749              :    *
+     750              :    *  Class invariants:
+     751              :    * - For any nonsingular iterator i:
+     752              :    *    - i.node points to a member of the %map array.  (Yes, you read that
+     753              :    *      correctly:  i.node does not actually point to a node.)  The member of
+     754              :    *      the %map array is what actually points to the node.
+     755              :    *    - i.first == *(i.node)    (This points to the node (first Tp element).)
+     756              :    *    - i.last  == i.first + node_size
+     757              :    *    - i.cur is a pointer in the range [i.first, i.last).  NOTE:
+     758              :    *      the implication of this is that i.cur is always a dereferenceable
+     759              :    *      pointer, even if i is a past-the-end iterator.
+     760              :    * - Start and Finish are always nonsingular iterators.  NOTE: this
+     761              :    * means that an empty deque must have one node, a deque with <N
+     762              :    * elements (where N is the node buffer size) must have one node, a
+     763              :    * deque with N through (2N-1) elements must have two nodes, etc.
+     764              :    * - For every node other than start.node and finish.node, every
+     765              :    * element in the node is an initialized object.  If start.node ==
+     766              :    * finish.node, then [start.cur, finish.cur) are initialized
+     767              :    * objects, and the elements outside that range are uninitialized
+     768              :    * storage.  Otherwise, [start.cur, start.last) and [finish.first,
+     769              :    * finish.cur) are initialized objects, and [start.first, start.cur)
+     770              :    * and [finish.cur, finish.last) are uninitialized storage.
+     771              :    * - [%map, %map + map_size) is a valid, non-empty range.
+     772              :    * - [start.node, finish.node] is a valid range contained within
+     773              :    *   [%map, %map + map_size).
+     774              :    * - A pointer in the range [%map, %map + map_size) points to an allocated
+     775              :    *   node if and only if the pointer is in the range
+     776              :    *   [start.node, finish.node].
+     777              :    *
+     778              :    *  Here's the magic:  nothing in deque is @b aware of the discontiguous
+     779              :    *  storage!
+     780              :    *
+     781              :    *  The memory setup and layout occurs in the parent, _Base, and the iterator
+     782              :    *  class is entirely responsible for @a leaping from one node to the next.
+     783              :    *  All the implementation routines for deque itself work only through the
+     784              :    *  start and finish iterators.  This keeps the routines simple and sane,
+     785              :    *  and we can use other standard algorithms as well.
+     786              :   */
+     787              :   template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
+     788              :     class deque : protected _Deque_base<_Tp, _Alloc>
+     789              :     {
+     790              : #ifdef _GLIBCXX_CONCEPT_CHECKS
+     791              :       // concept requirements
+     792              :       typedef typename _Alloc::value_type       _Alloc_value_type;
+     793              : # if __cplusplus < 201103L
+     794              :       __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
+     795              : # endif
+     796              :       __glibcxx_class_requires2(_Tp, _Alloc_value_type, _SameTypeConcept)
+     797              : #endif
+     798              : 
+     799              : #if __cplusplus >= 201103L
+     800              :       static_assert(is_same<typename remove_cv<_Tp>::type, _Tp>::value,
+     801              :           "std::deque must have a non-const, non-volatile value_type");
+     802              : # if __cplusplus > 201703L || defined __STRICT_ANSI__
+     803              :       static_assert(is_same<typename _Alloc::value_type, _Tp>::value,
+     804              :           "std::deque must have the same value_type as its allocator");
+     805              : # endif
+     806              : #endif
+     807              : 
+     808              :       typedef _Deque_base<_Tp, _Alloc>                    _Base;
+     809              :       typedef typename _Base::_Tp_alloc_type            _Tp_alloc_type;
+     810              :       typedef typename _Base::_Alloc_traits             _Alloc_traits;
+     811              :       typedef typename _Base::_Map_pointer              _Map_pointer;
+     812              : 
+     813              :     public:
+     814              :       typedef _Tp                                       value_type;
+     815              :       typedef typename _Alloc_traits::pointer           pointer;
+     816              :       typedef typename _Alloc_traits::const_pointer     const_pointer;
+     817              :       typedef typename _Alloc_traits::reference         reference;
+     818              :       typedef typename _Alloc_traits::const_reference   const_reference;
+     819              :       typedef typename _Base::iterator                  iterator;
+     820              :       typedef typename _Base::const_iterator            const_iterator;
+     821              :       typedef std::reverse_iterator<const_iterator>       const_reverse_iterator;
+     822              :       typedef std::reverse_iterator<iterator>             reverse_iterator;
+     823              :       typedef size_t                                    size_type;
+     824              :       typedef ptrdiff_t                                 difference_type;
+     825              :       typedef _Alloc                                    allocator_type;
+     826              : 
+     827              :     private:
+     828              :       static size_t _S_buffer_size() _GLIBCXX_NOEXCEPT
+     829              :       { return __deque_buf_size(sizeof(_Tp)); }
+     830              : 
+     831              :       // Functions controlling memory layout, and nothing else.
+     832              :       using _Base::_M_initialize_map;
+     833              :       using _Base::_M_create_nodes;
+     834              :       using _Base::_M_destroy_nodes;
+     835              :       using _Base::_M_allocate_node;
+     836              :       using _Base::_M_deallocate_node;
+     837              :       using _Base::_M_allocate_map;
+     838              :       using _Base::_M_deallocate_map;
+     839              :       using _Base::_M_get_Tp_allocator;
+     840              : 
+     841              :       /**
+     842              :        *  A total of four data members accumulated down the hierarchy.
+     843              :        *  May be accessed via _M_impl.*
+     844              :        */
+     845              :       using _Base::_M_impl;
+     846              : 
+     847              :     public:
+     848              :       // [23.2.1.1] construct/copy/destroy
+     849              :       // (assign() and get_allocator() are also listed in this section)
+     850              : 
+     851              :       /**
+     852              :        *  @brief  Creates a %deque with no elements.
+     853              :        */
+     854              : #if __cplusplus >= 201103L
+     855            0 :       deque() = default;
+     856              : #else
+     857              :       deque() { }
+     858              : #endif
+     859              : 
+     860              :       /**
+     861              :        *  @brief  Creates a %deque with no elements.
+     862              :        *  @param  __a  An allocator object.
+     863              :        */
+     864              :       explicit
+     865              :       deque(const allocator_type& __a)
+     866              :       : _Base(__a, 0) { }
+     867              : 
+     868              : #if __cplusplus >= 201103L
+     869              :       /**
+     870              :        *  @brief  Creates a %deque with default constructed elements.
+     871              :        *  @param  __n  The number of elements to initially create.
+     872              :        *  @param  __a  An allocator.
+     873              :        *
+     874              :        *  This constructor fills the %deque with @a n default
+     875              :        *  constructed elements.
+     876              :        */
+     877              :       explicit
+     878              :       deque(size_type __n, const allocator_type& __a = allocator_type())
+     879              :       : _Base(__a, _S_check_init_len(__n, __a))
+     880              :       { _M_default_initialize(); }
+     881              : 
+     882              :       /**
+     883              :        *  @brief  Creates a %deque with copies of an exemplar element.
+     884              :        *  @param  __n  The number of elements to initially create.
+     885              :        *  @param  __value  An element to copy.
+     886              :        *  @param  __a  An allocator.
+     887              :        *
+     888              :        *  This constructor fills the %deque with @a __n copies of @a __value.
+     889              :        */
+     890              :       deque(size_type __n, const value_type& __value,
+     891              :             const allocator_type& __a = allocator_type())
+     892              :       : _Base(__a, _S_check_init_len(__n, __a))
+     893              :       { _M_fill_initialize(__value); }
+     894              : #else
+     895              :       /**
+     896              :        *  @brief  Creates a %deque with copies of an exemplar element.
+     897              :        *  @param  __n  The number of elements to initially create.
+     898              :        *  @param  __value  An element to copy.
+     899              :        *  @param  __a  An allocator.
+     900              :        *
+     901              :        *  This constructor fills the %deque with @a __n copies of @a __value.
+     902              :        */
+     903              :       explicit
+     904              :       deque(size_type __n, const value_type& __value = value_type(),
+     905              :             const allocator_type& __a = allocator_type())
+     906              :       : _Base(__a, _S_check_init_len(__n, __a))
+     907              :       { _M_fill_initialize(__value); }
+     908              : #endif
+     909              : 
+     910              :       /**
+     911              :        *  @brief  %Deque copy constructor.
+     912              :        *  @param  __x  A %deque of identical element and allocator types.
+     913              :        *
+     914              :        *  The newly-created %deque uses a copy of the allocator object used
+     915              :        *  by @a __x (unless the allocator traits dictate a different object).
+     916              :        */
+     917              :       deque(const deque& __x)
+     918              :       : _Base(_Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator()),
+     919              :               __x.size())
+     920              :       { std::__uninitialized_copy_a(__x.begin(), __x.end(),
+     921              :                                     this->_M_impl._M_start,
+     922              :                                     _M_get_Tp_allocator()); }
+     923              : 
+     924              : #if __cplusplus >= 201103L
+     925              :       /**
+     926              :        *  @brief  %Deque move constructor.
+     927              :        *
+     928              :        *  The newly-created %deque contains the exact contents of the
+     929              :        *  moved instance.
+     930              :        *  The contents of the moved instance are a valid, but unspecified
+     931              :        *  %deque.
+     932              :        */
+     933              :       deque(deque&&) = default;
+     934              : 
+     935              :       /// Copy constructor with alternative allocator
+     936              :       deque(const deque& __x, const __type_identity_t<allocator_type>& __a)
+     937              :       : _Base(__a, __x.size())
+     938              :       { std::__uninitialized_copy_a(__x.begin(), __x.end(),
+     939              :                                     this->_M_impl._M_start,
+     940              :                                     _M_get_Tp_allocator()); }
+     941              : 
+     942              :       /// Move constructor with alternative allocator
+     943              :       deque(deque&& __x, const __type_identity_t<allocator_type>& __a)
+     944              :       : deque(std::move(__x), __a, typename _Alloc_traits::is_always_equal{})
+     945              :       { }
+     946              : 
+     947              :     private:
+     948              :       deque(deque&& __x, const allocator_type& __a, true_type)
+     949              :       : _Base(std::move(__x), __a)
+     950              :       { }
+     951              : 
+     952              :       deque(deque&& __x, const allocator_type& __a, false_type)
+     953              :       : _Base(std::move(__x), __a, __x.size())
+     954              :       {
+     955              :         if (__x.get_allocator() != __a && !__x.empty())
+     956              :           {
+     957              :             std::__uninitialized_move_a(__x.begin(), __x.end(),
+     958              :                                         this->_M_impl._M_start,
+     959              :                                         _M_get_Tp_allocator());
+     960              :             __x.clear();
+     961              :           }
+     962              :       }
+     963              : 
+     964              :     public:
+     965              :       /**
+     966              :        *  @brief  Builds a %deque from an initializer list.
+     967              :        *  @param  __l  An initializer_list.
+     968              :        *  @param  __a  An allocator object.
+     969              :        *
+     970              :        *  Create a %deque consisting of copies of the elements in the
+     971              :        *  initializer_list @a __l.
+     972              :        *
+     973              :        *  This will call the element type's copy constructor N times
+     974              :        *  (where N is __l.size()) and do no memory reallocation.
+     975              :        */
+     976              :       deque(initializer_list<value_type> __l,
+     977              :             const allocator_type& __a = allocator_type())
+     978              :       : _Base(__a)
+     979              :       {
+     980              :         _M_range_initialize(__l.begin(), __l.end(),
+     981              :                             random_access_iterator_tag());
+     982              :       }
+     983              : #endif
+     984              : 
+     985              :       /**
+     986              :        *  @brief  Builds a %deque from a range.
+     987              :        *  @param  __first  An input iterator.
+     988              :        *  @param  __last  An input iterator.
+     989              :        *  @param  __a  An allocator object.
+     990              :        *
+     991              :        *  Create a %deque consisting of copies of the elements from [__first,
+     992              :        *  __last).
+     993              :        *
+     994              :        *  If the iterators are forward, bidirectional, or random-access, then
+     995              :        *  this will call the elements' copy constructor N times (where N is
+     996              :        *  distance(__first,__last)) and do no memory reallocation.  But if only
+     997              :        *  input iterators are used, then this will do at most 2N calls to the
+     998              :        *  copy constructor, and logN memory reallocations.
+     999              :        */
+    1000              : #if __cplusplus >= 201103L
+    1001              :       template<typename _InputIterator,
+    1002              :                typename = std::_RequireInputIter<_InputIterator>>
+    1003              :         deque(_InputIterator __first, _InputIterator __last,
+    1004              :               const allocator_type& __a = allocator_type())
+    1005              :         : _Base(__a)
+    1006              :         {
+    1007              :           _M_range_initialize(__first, __last,
+    1008              :                               std::__iterator_category(__first));
+    1009              :         }
+    1010              : #else
+    1011              :       template<typename _InputIterator>
+    1012              :         deque(_InputIterator __first, _InputIterator __last,
+    1013              :               const allocator_type& __a = allocator_type())
+    1014              :         : _Base(__a)
+    1015              :         {
+    1016              :           // Check whether it's an integral type.  If so, it's not an iterator.
+    1017              :           typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+    1018              :           _M_initialize_dispatch(__first, __last, _Integral());
+    1019              :         }
+    1020              : #endif
+    1021              : 
+    1022              :       /**
+    1023              :        *  The dtor only erases the elements, and note that if the elements
+    1024              :        *  themselves are pointers, the pointed-to memory is not touched in any
+    1025              :        *  way.  Managing the pointer is the user's responsibility.
+    1026              :        */
+    1027            0 :       ~deque()
+    1028            0 :       { _M_destroy_data(begin(), end(), _M_get_Tp_allocator()); }
+    1029              : 
+    1030              :       /**
+    1031              :        *  @brief  %Deque assignment operator.
+    1032              :        *  @param  __x  A %deque of identical element and allocator types.
+    1033              :        *
+    1034              :        *  All the elements of @a x are copied.
+    1035              :        *
+    1036              :        *  The newly-created %deque uses a copy of the allocator object used
+    1037              :        *  by @a __x (unless the allocator traits dictate a different object).
+    1038              :        */
+    1039              :       deque&
+    1040              :       operator=(const deque& __x);
+    1041              : 
+    1042              : #if __cplusplus >= 201103L
+    1043              :       /**
+    1044              :        *  @brief  %Deque move assignment operator.
+    1045              :        *  @param  __x  A %deque of identical element and allocator types.
+    1046              :        *
+    1047              :        *  The contents of @a __x are moved into this deque (without copying,
+    1048              :        *  if the allocators permit it).
+    1049              :        *  @a __x is a valid, but unspecified %deque.
+    1050              :        */
+    1051              :       deque&
+    1052              :       operator=(deque&& __x) noexcept(_Alloc_traits::_S_always_equal())
+    1053              :       {
+    1054              :         using __always_equal = typename _Alloc_traits::is_always_equal;
+    1055              :         _M_move_assign1(std::move(__x), __always_equal{});
+    1056              :         return *this;
+    1057              :       }
+    1058              : 
+    1059              :       /**
+    1060              :        *  @brief  Assigns an initializer list to a %deque.
+    1061              :        *  @param  __l  An initializer_list.
+    1062              :        *
+    1063              :        *  This function fills a %deque with copies of the elements in the
+    1064              :        *  initializer_list @a __l.
+    1065              :        *
+    1066              :        *  Note that the assignment completely changes the %deque and that the
+    1067              :        *  resulting %deque's size is the same as the number of elements
+    1068              :        *  assigned.
+    1069              :        */
+    1070              :       deque&
+    1071              :       operator=(initializer_list<value_type> __l)
+    1072              :       {
+    1073              :         _M_assign_aux(__l.begin(), __l.end(),
+    1074              :                       random_access_iterator_tag());
+    1075              :         return *this;
+    1076              :       }
+    1077              : #endif
+    1078              : 
+    1079              :       /**
+    1080              :        *  @brief  Assigns a given value to a %deque.
+    1081              :        *  @param  __n  Number of elements to be assigned.
+    1082              :        *  @param  __val  Value to be assigned.
+    1083              :        *
+    1084              :        *  This function fills a %deque with @a n copies of the given
+    1085              :        *  value.  Note that the assignment completely changes the
+    1086              :        *  %deque and that the resulting %deque's size is the same as
+    1087              :        *  the number of elements assigned.
+    1088              :        */
+    1089              :       void
+    1090              :       assign(size_type __n, const value_type& __val)
+    1091              :       { _M_fill_assign(__n, __val); }
+    1092              : 
+    1093              :       /**
+    1094              :        *  @brief  Assigns a range to a %deque.
+    1095              :        *  @param  __first  An input iterator.
+    1096              :        *  @param  __last   An input iterator.
+    1097              :        *
+    1098              :        *  This function fills a %deque with copies of the elements in the
+    1099              :        *  range [__first,__last).
+    1100              :        *
+    1101              :        *  Note that the assignment completely changes the %deque and that the
+    1102              :        *  resulting %deque's size is the same as the number of elements
+    1103              :        *  assigned.
+    1104              :        */
+    1105              : #if __cplusplus >= 201103L
+    1106              :       template<typename _InputIterator,
+    1107              :                typename = std::_RequireInputIter<_InputIterator>>
+    1108              :         void
+    1109              :         assign(_InputIterator __first, _InputIterator __last)
+    1110              :         { _M_assign_aux(__first, __last, std::__iterator_category(__first)); }
+    1111              : #else
+    1112              :       template<typename _InputIterator>
+    1113              :         void
+    1114              :         assign(_InputIterator __first, _InputIterator __last)
+    1115              :         {
+    1116              :           typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+    1117              :           _M_assign_dispatch(__first, __last, _Integral());
+    1118              :         }
+    1119              : #endif
+    1120              : 
+    1121              : #if __cplusplus >= 201103L
+    1122              :       /**
+    1123              :        *  @brief  Assigns an initializer list to a %deque.
+    1124              :        *  @param  __l  An initializer_list.
+    1125              :        *
+    1126              :        *  This function fills a %deque with copies of the elements in the
+    1127              :        *  initializer_list @a __l.
+    1128              :        *
+    1129              :        *  Note that the assignment completely changes the %deque and that the
+    1130              :        *  resulting %deque's size is the same as the number of elements
+    1131              :        *  assigned.
+    1132              :        */
+    1133              :       void
+    1134              :       assign(initializer_list<value_type> __l)
+    1135              :       { _M_assign_aux(__l.begin(), __l.end(), random_access_iterator_tag()); }
+    1136              : #endif
+    1137              : 
+    1138              :       /// Get a copy of the memory allocation object.
+    1139              :       _GLIBCXX_NODISCARD
+    1140              :       allocator_type
+    1141              :       get_allocator() const _GLIBCXX_NOEXCEPT
+    1142              :       { return _Base::get_allocator(); }
+    1143              : 
+    1144              :       // iterators
+    1145              :       /**
+    1146              :        *  Returns a read/write iterator that points to the first element in the
+    1147              :        *  %deque.  Iteration is done in ordinary element order.
+    1148              :        */
+    1149              :       _GLIBCXX_NODISCARD
+    1150              :       iterator
+    1151            0 :       begin() _GLIBCXX_NOEXCEPT
+    1152            0 :       { return this->_M_impl._M_start; }
+    1153              : 
+    1154              :       /**
+    1155              :        *  Returns a read-only (constant) iterator that points to the first
+    1156              :        *  element in the %deque.  Iteration is done in ordinary element order.
+    1157              :        */
+    1158              :       _GLIBCXX_NODISCARD
+    1159              :       const_iterator
+    1160              :       begin() const _GLIBCXX_NOEXCEPT
+    1161              :       { return this->_M_impl._M_start; }
+    1162              : 
+    1163              :       /**
+    1164              :        *  Returns a read/write iterator that points one past the last
+    1165              :        *  element in the %deque.  Iteration is done in ordinary
+    1166              :        *  element order.
+    1167              :        */
+    1168              :       _GLIBCXX_NODISCARD
+    1169              :       iterator
+    1170            0 :       end() _GLIBCXX_NOEXCEPT
+    1171            0 :       { return this->_M_impl._M_finish; }
+    1172              : 
+    1173              :       /**
+    1174              :        *  Returns a read-only (constant) iterator that points one past
+    1175              :        *  the last element in the %deque.  Iteration is done in
+    1176              :        *  ordinary element order.
+    1177              :        */
+    1178              :       _GLIBCXX_NODISCARD
+    1179              :       const_iterator
+    1180              :       end() const _GLIBCXX_NOEXCEPT
+    1181              :       { return this->_M_impl._M_finish; }
+    1182              : 
+    1183              :       /**
+    1184              :        *  Returns a read/write reverse iterator that points to the
+    1185              :        *  last element in the %deque.  Iteration is done in reverse
+    1186              :        *  element order.
+    1187              :        */
+    1188              :       _GLIBCXX_NODISCARD
+    1189              :       reverse_iterator
+    1190              :       rbegin() _GLIBCXX_NOEXCEPT
+    1191              :       { return reverse_iterator(this->_M_impl._M_finish); }
+    1192              : 
+    1193              :       /**
+    1194              :        *  Returns a read-only (constant) reverse iterator that points
+    1195              :        *  to the last element in the %deque.  Iteration is done in
+    1196              :        *  reverse element order.
+    1197              :        */
+    1198              :       _GLIBCXX_NODISCARD
+    1199              :       const_reverse_iterator
+    1200              :       rbegin() const _GLIBCXX_NOEXCEPT
+    1201              :       { return const_reverse_iterator(this->_M_impl._M_finish); }
+    1202              : 
+    1203              :       /**
+    1204              :        *  Returns a read/write reverse iterator that points to one
+    1205              :        *  before the first element in the %deque.  Iteration is done
+    1206              :        *  in reverse element order.
+    1207              :        */
+    1208              :       _GLIBCXX_NODISCARD
+    1209              :       reverse_iterator
+    1210              :       rend() _GLIBCXX_NOEXCEPT
+    1211              :       { return reverse_iterator(this->_M_impl._M_start); }
+    1212              : 
+    1213              :       /**
+    1214              :        *  Returns a read-only (constant) reverse iterator that points
+    1215              :        *  to one before the first element in the %deque.  Iteration is
+    1216              :        *  done in reverse element order.
+    1217              :        */
+    1218              :       _GLIBCXX_NODISCARD
+    1219              :       const_reverse_iterator
+    1220              :       rend() const _GLIBCXX_NOEXCEPT
+    1221              :       { return const_reverse_iterator(this->_M_impl._M_start); }
+    1222              : 
+    1223              : #if __cplusplus >= 201103L
+    1224              :       /**
+    1225              :        *  Returns a read-only (constant) iterator that points to the first
+    1226              :        *  element in the %deque.  Iteration is done in ordinary element order.
+    1227              :        */
+    1228              :       [[__nodiscard__]]
+    1229              :       const_iterator
+    1230              :       cbegin() const noexcept
+    1231              :       { return this->_M_impl._M_start; }
+    1232              : 
+    1233              :       /**
+    1234              :        *  Returns a read-only (constant) iterator that points one past
+    1235              :        *  the last element in the %deque.  Iteration is done in
+    1236              :        *  ordinary element order.
+    1237              :        */
+    1238              :       [[__nodiscard__]]
+    1239              :       const_iterator
+    1240              :       cend() const noexcept
+    1241              :       { return this->_M_impl._M_finish; }
+    1242              : 
+    1243              :       /**
+    1244              :        *  Returns a read-only (constant) reverse iterator that points
+    1245              :        *  to the last element in the %deque.  Iteration is done in
+    1246              :        *  reverse element order.
+    1247              :        */
+    1248              :       [[__nodiscard__]]
+    1249              :       const_reverse_iterator
+    1250              :       crbegin() const noexcept
+    1251              :       { return const_reverse_iterator(this->_M_impl._M_finish); }
+    1252              : 
+    1253              :       /**
+    1254              :        *  Returns a read-only (constant) reverse iterator that points
+    1255              :        *  to one before the first element in the %deque.  Iteration is
+    1256              :        *  done in reverse element order.
+    1257              :        */
+    1258              :       [[__nodiscard__]]
+    1259              :       const_reverse_iterator
+    1260              :       crend() const noexcept
+    1261              :       { return const_reverse_iterator(this->_M_impl._M_start); }
+    1262              : #endif
+    1263              : 
+    1264              :       // [23.2.1.2] capacity
+    1265              :       /**  Returns the number of elements in the %deque.  */
+    1266              :       _GLIBCXX_NODISCARD
+    1267              :       size_type
+    1268            0 :       size() const _GLIBCXX_NOEXCEPT
+    1269            0 :       { return this->_M_impl._M_finish - this->_M_impl._M_start; }
+    1270              : 
+    1271              :       /**  Returns the size() of the largest possible %deque.  */
+    1272              :       _GLIBCXX_NODISCARD
+    1273              :       size_type
+    1274            0 :       max_size() const _GLIBCXX_NOEXCEPT
+    1275            0 :       { return _S_max_size(_M_get_Tp_allocator()); }
+    1276              : 
+    1277              : #if __cplusplus >= 201103L
+    1278              :       /**
+    1279              :        *  @brief  Resizes the %deque to the specified number of elements.
+    1280              :        *  @param  __new_size  Number of elements the %deque should contain.
+    1281              :        *
+    1282              :        *  This function will %resize the %deque to the specified
+    1283              :        *  number of elements.  If the number is smaller than the
+    1284              :        *  %deque's current size the %deque is truncated, otherwise
+    1285              :        *  default constructed elements are appended.
+    1286              :        */
+    1287              :       void
+    1288              :       resize(size_type __new_size)
+    1289              :       {
+    1290              :         const size_type __len = size();
+    1291              :         if (__new_size > __len)
+    1292              :           _M_default_append(__new_size - __len);
+    1293              :         else if (__new_size < __len)
+    1294              :           _M_erase_at_end(this->_M_impl._M_start
+    1295              :                           + difference_type(__new_size));
+    1296              :       }
+    1297              : 
+    1298              :       /**
+    1299              :        *  @brief  Resizes the %deque to the specified number of elements.
+    1300              :        *  @param  __new_size  Number of elements the %deque should contain.
+    1301              :        *  @param  __x  Data with which new elements should be populated.
+    1302              :        *
+    1303              :        *  This function will %resize the %deque to the specified
+    1304              :        *  number of elements.  If the number is smaller than the
+    1305              :        *  %deque's current size the %deque is truncated, otherwise the
+    1306              :        *  %deque is extended and new elements are populated with given
+    1307              :        *  data.
+    1308              :        */
+    1309              :       void
+    1310              :       resize(size_type __new_size, const value_type& __x)
+    1311              : #else
+    1312              :       /**
+    1313              :        *  @brief  Resizes the %deque to the specified number of elements.
+    1314              :        *  @param  __new_size  Number of elements the %deque should contain.
+    1315              :        *  @param  __x  Data with which new elements should be populated.
+    1316              :        *
+    1317              :        *  This function will %resize the %deque to the specified
+    1318              :        *  number of elements.  If the number is smaller than the
+    1319              :        *  %deque's current size the %deque is truncated, otherwise the
+    1320              :        *  %deque is extended and new elements are populated with given
+    1321              :        *  data.
+    1322              :        */
+    1323              :       void
+    1324              :       resize(size_type __new_size, value_type __x = value_type())
+    1325              : #endif
+    1326              :       {
+    1327              :         const size_type __len = size();
+    1328              :         if (__new_size > __len)
+    1329              :           _M_fill_insert(this->_M_impl._M_finish, __new_size - __len, __x);
+    1330              :         else if (__new_size < __len)
+    1331              :           _M_erase_at_end(this->_M_impl._M_start
+    1332              :                           + difference_type(__new_size));
+    1333              :       }
+    1334              : 
+    1335              : #if __cplusplus >= 201103L
+    1336              :       /**  A non-binding request to reduce memory use.  */
+    1337              :       void
+    1338              :       shrink_to_fit() noexcept
+    1339              :       { _M_shrink_to_fit(); }
+    1340              : #endif
+    1341              : 
+    1342              :       /**
+    1343              :        *  Returns true if the %deque is empty.  (Thus begin() would
+    1344              :        *  equal end().)
+    1345              :        */
+    1346              :       _GLIBCXX_NODISCARD bool
+    1347            0 :       empty() const _GLIBCXX_NOEXCEPT
+    1348            0 :       { return this->_M_impl._M_finish == this->_M_impl._M_start; }
+    1349              : 
+    1350              :       // element access
+    1351              :       /**
+    1352              :        *  @brief Subscript access to the data contained in the %deque.
+    1353              :        *  @param __n The index of the element for which data should be
+    1354              :        *  accessed.
+    1355              :        *  @return  Read/write reference to data.
+    1356              :        *
+    1357              :        *  This operator allows for easy, array-style, data access.
+    1358              :        *  Note that data access with this operator is unchecked and
+    1359              :        *  out_of_range lookups are not defined. (For checked lookups
+    1360              :        *  see at().)
+    1361              :        */
+    1362              :       _GLIBCXX_NODISCARD
+    1363              :       reference
+    1364              :       operator[](size_type __n) _GLIBCXX_NOEXCEPT
+    1365              :       {
+    1366              :         __glibcxx_requires_subscript(__n);
+    1367              :         return this->_M_impl._M_start[difference_type(__n)];
+    1368              :       }
+    1369              : 
+    1370              :       /**
+    1371              :        *  @brief Subscript access to the data contained in the %deque.
+    1372              :        *  @param __n The index of the element for which data should be
+    1373              :        *  accessed.
+    1374              :        *  @return  Read-only (constant) reference to data.
+    1375              :        *
+    1376              :        *  This operator allows for easy, array-style, data access.
+    1377              :        *  Note that data access with this operator is unchecked and
+    1378              :        *  out_of_range lookups are not defined. (For checked lookups
+    1379              :        *  see at().)
+    1380              :        */
+    1381              :       _GLIBCXX_NODISCARD
+    1382              :       const_reference
+    1383              :       operator[](size_type __n) const _GLIBCXX_NOEXCEPT
+    1384              :       {
+    1385              :         __glibcxx_requires_subscript(__n);
+    1386              :         return this->_M_impl._M_start[difference_type(__n)];
+    1387              :       }
+    1388              : 
+    1389              :     protected:
+    1390              :       /// Safety check used only from at().
+    1391              :       void
+    1392              :       _M_range_check(size_type __n) const
+    1393              :       {
+    1394              :         if (__n >= this->size())
+    1395              :           __throw_out_of_range_fmt(__N("deque::_M_range_check: __n "
+    1396              :                                        "(which is %zu)>= this->size() "
+    1397              :                                        "(which is %zu)"),
+    1398              :                                    __n, this->size());
+    1399              :       }
+    1400              : 
+    1401              :     public:
+    1402              :       /**
+    1403              :        *  @brief  Provides access to the data contained in the %deque.
+    1404              :        *  @param __n The index of the element for which data should be
+    1405              :        *  accessed.
+    1406              :        *  @return  Read/write reference to data.
+    1407              :        *  @throw  std::out_of_range  If @a __n is an invalid index.
+    1408              :        *
+    1409              :        *  This function provides for safer data access.  The parameter
+    1410              :        *  is first checked that it is in the range of the deque.  The
+    1411              :        *  function throws out_of_range if the check fails.
+    1412              :        */
+    1413              :       reference
+    1414              :       at(size_type __n)
+    1415              :       {
+    1416              :         _M_range_check(__n);
+    1417              :         return (*this)[__n];
+    1418              :       }
+    1419              : 
+    1420              :       /**
+    1421              :        *  @brief  Provides access to the data contained in the %deque.
+    1422              :        *  @param __n The index of the element for which data should be
+    1423              :        *  accessed.
+    1424              :        *  @return  Read-only (constant) reference to data.
+    1425              :        *  @throw  std::out_of_range  If @a __n is an invalid index.
+    1426              :        *
+    1427              :        *  This function provides for safer data access.  The parameter is first
+    1428              :        *  checked that it is in the range of the deque.  The function throws
+    1429              :        *  out_of_range if the check fails.
+    1430              :        */
+    1431              :       const_reference
+    1432              :       at(size_type __n) const
+    1433              :       {
+    1434              :         _M_range_check(__n);
+    1435              :         return (*this)[__n];
+    1436              :       }
+    1437              : 
+    1438              :       /**
+    1439              :        *  Returns a read/write reference to the data at the first
+    1440              :        *  element of the %deque.
+    1441              :        */
+    1442              :       _GLIBCXX_NODISCARD
+    1443              :       reference
+    1444              :       front() _GLIBCXX_NOEXCEPT
+    1445              :       {
+    1446              :         __glibcxx_requires_nonempty();
+    1447              :         return *begin();
+    1448              :       }
+    1449              : 
+    1450              :       /**
+    1451              :        *  Returns a read-only (constant) reference to the data at the first
+    1452              :        *  element of the %deque.
+    1453              :        */
+    1454              :       _GLIBCXX_NODISCARD
+    1455              :       const_reference
+    1456              :       front() const _GLIBCXX_NOEXCEPT
+    1457              :       {
+    1458              :         __glibcxx_requires_nonempty();
+    1459              :         return *begin();
+    1460              :       }
+    1461              : 
+    1462              :       /**
+    1463              :        *  Returns a read/write reference to the data at the last element of the
+    1464              :        *  %deque.
+    1465              :        */
+    1466              :       _GLIBCXX_NODISCARD
+    1467              :       reference
+    1468            0 :       back() _GLIBCXX_NOEXCEPT
+    1469              :       {
+    1470              :         __glibcxx_requires_nonempty();
+    1471            0 :         iterator __tmp = end();
+    1472            0 :         --__tmp;
+    1473            0 :         return *__tmp;
+    1474              :       }
+    1475              : 
+    1476              :       /**
+    1477              :        *  Returns a read-only (constant) reference to the data at the last
+    1478              :        *  element of the %deque.
+    1479              :        */
+    1480              :       _GLIBCXX_NODISCARD
+    1481              :       const_reference
+    1482              :       back() const _GLIBCXX_NOEXCEPT
+    1483              :       {
+    1484              :         __glibcxx_requires_nonempty();
+    1485              :         const_iterator __tmp = end();
+    1486              :         --__tmp;
+    1487              :         return *__tmp;
+    1488              :       }
+    1489              : 
+    1490              :       // [23.2.1.2] modifiers
+    1491              :       /**
+    1492              :        *  @brief  Add data to the front of the %deque.
+    1493              :        *  @param  __x  Data to be added.
+    1494              :        *
+    1495              :        *  This is a typical stack operation.  The function creates an
+    1496              :        *  element at the front of the %deque and assigns the given
+    1497              :        *  data to it.  Due to the nature of a %deque this operation
+    1498              :        *  can be done in constant time.
+    1499              :        */
+    1500              :       void
+    1501              :       push_front(const value_type& __x)
+    1502              :       {
+    1503              :         if (this->_M_impl._M_start._M_cur != this->_M_impl._M_start._M_first)
+    1504              :           {
+    1505              :             _Alloc_traits::construct(this->_M_impl,
+    1506              :                                      this->_M_impl._M_start._M_cur - 1,
+    1507              :                                      __x);
+    1508              :             --this->_M_impl._M_start._M_cur;
+    1509              :           }
+    1510              :         else
+    1511              :           _M_push_front_aux(__x);
+    1512              :       }
+    1513              : 
+    1514              : #if __cplusplus >= 201103L
+    1515              :       void
+    1516              :       push_front(value_type&& __x)
+    1517              :       { emplace_front(std::move(__x)); }
+    1518              : 
+    1519              :       template<typename... _Args>
+    1520              : #if __cplusplus > 201402L
+    1521              :         reference
+    1522              : #else
+    1523              :         void
+    1524              : #endif
+    1525              :         emplace_front(_Args&&... __args);
+    1526              : #endif
+    1527              : 
+    1528              :       /**
+    1529              :        *  @brief  Add data to the end of the %deque.
+    1530              :        *  @param  __x  Data to be added.
+    1531              :        *
+    1532              :        *  This is a typical stack operation.  The function creates an
+    1533              :        *  element at the end of the %deque and assigns the given data
+    1534              :        *  to it.  Due to the nature of a %deque this operation can be
+    1535              :        *  done in constant time.
+    1536              :        */
+    1537              :       void
+    1538            0 :       push_back(const value_type& __x)
+    1539              :       {
+    1540            0 :         if (this->_M_impl._M_finish._M_cur
+    1541            0 :             != this->_M_impl._M_finish._M_last - 1)
+    1542              :           {
+    1543            0 :             _Alloc_traits::construct(this->_M_impl,
+    1544              :                                      this->_M_impl._M_finish._M_cur, __x);
+    1545            0 :             ++this->_M_impl._M_finish._M_cur;
+    1546              :           }
+    1547              :         else
+    1548            0 :           _M_push_back_aux(__x);
+    1549            0 :       }
+    1550              : 
+    1551              : #if __cplusplus >= 201103L
+    1552              :       void
+    1553            0 :       push_back(value_type&& __x)
+    1554            0 :       { emplace_back(std::move(__x)); }
+    1555              : 
+    1556              :       template<typename... _Args>
+    1557              : #if __cplusplus > 201402L
+    1558              :         reference
+    1559              : #else
+    1560              :         void
+    1561              : #endif
+    1562              :         emplace_back(_Args&&... __args);
+    1563              : #endif
+    1564              : 
+    1565              :       /**
+    1566              :        *  @brief  Removes first element.
+    1567              :        *
+    1568              :        *  This is a typical stack operation.  It shrinks the %deque by one.
+    1569              :        *
+    1570              :        *  Note that no data is returned, and if the first element's data is
+    1571              :        *  needed, it should be retrieved before pop_front() is called.
+    1572              :        */
+    1573              :       void
+    1574              :       pop_front() _GLIBCXX_NOEXCEPT
+    1575              :       {
+    1576              :         __glibcxx_requires_nonempty();
+    1577              :         if (this->_M_impl._M_start._M_cur
+    1578              :             != this->_M_impl._M_start._M_last - 1)
+    1579              :           {
+    1580              :             _Alloc_traits::destroy(_M_get_Tp_allocator(),
+    1581              :                                    this->_M_impl._M_start._M_cur);
+    1582              :             ++this->_M_impl._M_start._M_cur;
+    1583              :           }
+    1584              :         else
+    1585              :           _M_pop_front_aux();
+    1586              :       }
+    1587              : 
+    1588              :       /**
+    1589              :        *  @brief  Removes last element.
+    1590              :        *
+    1591              :        *  This is a typical stack operation.  It shrinks the %deque by one.
+    1592              :        *
+    1593              :        *  Note that no data is returned, and if the last element's data is
+    1594              :        *  needed, it should be retrieved before pop_back() is called.
+    1595              :        */
+    1596              :       void
+    1597            0 :       pop_back() _GLIBCXX_NOEXCEPT
+    1598              :       {
+    1599              :         __glibcxx_requires_nonempty();
+    1600            0 :         if (this->_M_impl._M_finish._M_cur
+    1601            0 :             != this->_M_impl._M_finish._M_first)
+    1602              :           {
+    1603            0 :             --this->_M_impl._M_finish._M_cur;
+    1604            0 :             _Alloc_traits::destroy(_M_get_Tp_allocator(),
+    1605              :                                    this->_M_impl._M_finish._M_cur);
+    1606              :           }
+    1607              :         else
+    1608            0 :           _M_pop_back_aux();
+    1609            0 :       }
+    1610              : 
+    1611              : #if __cplusplus >= 201103L
+    1612              :       /**
+    1613              :        *  @brief  Inserts an object in %deque before specified iterator.
+    1614              :        *  @param  __position  A const_iterator into the %deque.
+    1615              :        *  @param  __args  Arguments.
+    1616              :        *  @return  An iterator that points to the inserted data.
+    1617              :        *
+    1618              :        *  This function will insert an object of type T constructed
+    1619              :        *  with T(std::forward<Args>(args)...) before the specified location.
+    1620              :        */
+    1621              :       template<typename... _Args>
+    1622              :         iterator
+    1623              :         emplace(const_iterator __position, _Args&&... __args);
+    1624              : 
+    1625              :       /**
+    1626              :        *  @brief  Inserts given value into %deque before specified iterator.
+    1627              :        *  @param  __position  A const_iterator into the %deque.
+    1628              :        *  @param  __x  Data to be inserted.
+    1629              :        *  @return  An iterator that points to the inserted data.
+    1630              :        *
+    1631              :        *  This function will insert a copy of the given value before the
+    1632              :        *  specified location.
+    1633              :        */
+    1634              :       iterator
+    1635              :       insert(const_iterator __position, const value_type& __x);
+    1636              : #else
+    1637              :       /**
+    1638              :        *  @brief  Inserts given value into %deque before specified iterator.
+    1639              :        *  @param  __position  An iterator into the %deque.
+    1640              :        *  @param  __x  Data to be inserted.
+    1641              :        *  @return  An iterator that points to the inserted data.
+    1642              :        *
+    1643              :        *  This function will insert a copy of the given value before the
+    1644              :        *  specified location.
+    1645              :        */
+    1646              :       iterator
+    1647              :       insert(iterator __position, const value_type& __x);
+    1648              : #endif
+    1649              : 
+    1650              : #if __cplusplus >= 201103L
+    1651              :       /**
+    1652              :        *  @brief  Inserts given rvalue into %deque before specified iterator.
+    1653              :        *  @param  __position  A const_iterator into the %deque.
+    1654              :        *  @param  __x  Data to be inserted.
+    1655              :        *  @return  An iterator that points to the inserted data.
+    1656              :        *
+    1657              :        *  This function will insert a copy of the given rvalue before the
+    1658              :        *  specified location.
+    1659              :        */
+    1660              :       iterator
+    1661              :       insert(const_iterator __position, value_type&& __x)
+    1662              :       { return emplace(__position, std::move(__x)); }
+    1663              : 
+    1664              :       /**
+    1665              :        *  @brief  Inserts an initializer list into the %deque.
+    1666              :        *  @param  __p  An iterator into the %deque.
+    1667              :        *  @param  __l  An initializer_list.
+    1668              :        *  @return  An iterator that points to the inserted data.
+    1669              :        *
+    1670              :        *  This function will insert copies of the data in the
+    1671              :        *  initializer_list @a __l into the %deque before the location
+    1672              :        *  specified by @a __p.  This is known as <em>list insert</em>.
+    1673              :        */
+    1674              :       iterator
+    1675              :       insert(const_iterator __p, initializer_list<value_type> __l)
+    1676              :       {
+    1677              :         auto __offset = __p - cbegin();
+    1678              :         _M_range_insert_aux(__p._M_const_cast(), __l.begin(), __l.end(),
+    1679              :                             std::random_access_iterator_tag());
+    1680              :         return begin() + __offset;
+    1681              :       }
+    1682              : 
+    1683              :       /**
+    1684              :        *  @brief  Inserts a number of copies of given data into the %deque.
+    1685              :        *  @param  __position  A const_iterator into the %deque.
+    1686              :        *  @param  __n  Number of elements to be inserted.
+    1687              :        *  @param  __x  Data to be inserted.
+    1688              :        *  @return  An iterator that points to the inserted data.
+    1689              :        *
+    1690              :        *  This function will insert a specified number of copies of the given
+    1691              :        *  data before the location specified by @a __position.
+    1692              :        */
+    1693              :       iterator
+    1694              :       insert(const_iterator __position, size_type __n, const value_type& __x)
+    1695              :       {
+    1696              :         difference_type __offset = __position - cbegin();
+    1697              :         _M_fill_insert(__position._M_const_cast(), __n, __x);
+    1698              :         return begin() + __offset;
+    1699              :       }
+    1700              : #else
+    1701              :       /**
+    1702              :        *  @brief  Inserts a number of copies of given data into the %deque.
+    1703              :        *  @param  __position  An iterator into the %deque.
+    1704              :        *  @param  __n  Number of elements to be inserted.
+    1705              :        *  @param  __x  Data to be inserted.
+    1706              :        *
+    1707              :        *  This function will insert a specified number of copies of the given
+    1708              :        *  data before the location specified by @a __position.
+    1709              :        */
+    1710              :       void
+    1711              :       insert(iterator __position, size_type __n, const value_type& __x)
+    1712              :       { _M_fill_insert(__position, __n, __x); }
+    1713              : #endif
+    1714              : 
+    1715              : #if __cplusplus >= 201103L
+    1716              :       /**
+    1717              :        *  @brief  Inserts a range into the %deque.
+    1718              :        *  @param  __position  A const_iterator into the %deque.
+    1719              :        *  @param  __first  An input iterator.
+    1720              :        *  @param  __last   An input iterator.
+    1721              :        *  @return  An iterator that points to the inserted data.
+    1722              :        *
+    1723              :        *  This function will insert copies of the data in the range
+    1724              :        *  [__first,__last) into the %deque before the location specified
+    1725              :        *  by @a __position.  This is known as <em>range insert</em>.
+    1726              :        */
+    1727              :       template<typename _InputIterator,
+    1728              :                typename = std::_RequireInputIter<_InputIterator>>
+    1729              :         iterator
+    1730              :         insert(const_iterator __position, _InputIterator __first,
+    1731              :                _InputIterator __last)
+    1732              :         {
+    1733              :           difference_type __offset = __position - cbegin();
+    1734              :           _M_range_insert_aux(__position._M_const_cast(), __first, __last,
+    1735              :                               std::__iterator_category(__first));
+    1736              :           return begin() + __offset;
+    1737              :         }
+    1738              : #else
+    1739              :       /**
+    1740              :        *  @brief  Inserts a range into the %deque.
+    1741              :        *  @param  __position  An iterator into the %deque.
+    1742              :        *  @param  __first  An input iterator.
+    1743              :        *  @param  __last   An input iterator.
+    1744              :        *
+    1745              :        *  This function will insert copies of the data in the range
+    1746              :        *  [__first,__last) into the %deque before the location specified
+    1747              :        *  by @a __position.  This is known as <em>range insert</em>.
+    1748              :        */
+    1749              :       template<typename _InputIterator>
+    1750              :         void
+    1751              :         insert(iterator __position, _InputIterator __first,
+    1752              :                _InputIterator __last)
+    1753              :         {
+    1754              :           // Check whether it's an integral type.  If so, it's not an iterator.
+    1755              :           typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+    1756              :           _M_insert_dispatch(__position, __first, __last, _Integral());
+    1757              :         }
+    1758              : #endif
+    1759              : 
+    1760              :       /**
+    1761              :        *  @brief  Remove element at given position.
+    1762              :        *  @param  __position  Iterator pointing to element to be erased.
+    1763              :        *  @return  An iterator pointing to the next element (or end()).
+    1764              :        *
+    1765              :        *  This function will erase the element at the given position and thus
+    1766              :        *  shorten the %deque by one.
+    1767              :        *
+    1768              :        *  The user is cautioned that
+    1769              :        *  this function only erases the element, and that if the element is
+    1770              :        *  itself a pointer, the pointed-to memory is not touched in any way.
+    1771              :        *  Managing the pointer is the user's responsibility.
+    1772              :        */
+    1773              :       iterator
+    1774              : #if __cplusplus >= 201103L
+    1775              :       erase(const_iterator __position)
+    1776              : #else
+    1777              :       erase(iterator __position)
+    1778              : #endif
+    1779              :       { return _M_erase(__position._M_const_cast()); }
+    1780              : 
+    1781              :       /**
+    1782              :        *  @brief  Remove a range of elements.
+    1783              :        *  @param  __first  Iterator pointing to the first element to be erased.
+    1784              :        *  @param  __last  Iterator pointing to one past the last element to be
+    1785              :        *                erased.
+    1786              :        *  @return  An iterator pointing to the element pointed to by @a last
+    1787              :        *           prior to erasing (or end()).
+    1788              :        *
+    1789              :        *  This function will erase the elements in the range
+    1790              :        *  [__first,__last) and shorten the %deque accordingly.
+    1791              :        *
+    1792              :        *  The user is cautioned that
+    1793              :        *  this function only erases the elements, and that if the elements
+    1794              :        *  themselves are pointers, the pointed-to memory is not touched in any
+    1795              :        *  way.  Managing the pointer is the user's responsibility.
+    1796              :        */
+    1797              :       iterator
+    1798              : #if __cplusplus >= 201103L
+    1799              :       erase(const_iterator __first, const_iterator __last)
+    1800              : #else
+    1801              :       erase(iterator __first, iterator __last)
+    1802              : #endif
+    1803              :       { return _M_erase(__first._M_const_cast(), __last._M_const_cast()); }
+    1804              : 
+    1805              :       /**
+    1806              :        *  @brief  Swaps data with another %deque.
+    1807              :        *  @param  __x  A %deque of the same element and allocator types.
+    1808              :        *
+    1809              :        *  This exchanges the elements between two deques in constant time.
+    1810              :        *  (Four pointers, so it should be quite fast.)
+    1811              :        *  Note that the global std::swap() function is specialized such that
+    1812              :        *  std::swap(d1,d2) will feed to this function.
+    1813              :        *
+    1814              :        *  Whether the allocators are swapped depends on the allocator traits.
+    1815              :        */
+    1816              :       void
+    1817              :       swap(deque& __x) _GLIBCXX_NOEXCEPT
+    1818              :       {
+    1819              : #if __cplusplus >= 201103L
+    1820              :         __glibcxx_assert(_Alloc_traits::propagate_on_container_swap::value
+    1821              :                          || _M_get_Tp_allocator() == __x._M_get_Tp_allocator());
+    1822              : #endif
+    1823              :         _M_impl._M_swap_data(__x._M_impl);
+    1824              :         _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(),
+    1825              :                                   __x._M_get_Tp_allocator());
+    1826              :       }
+    1827              : 
+    1828              :       /**
+    1829              :        *  Erases all the elements.  Note that this function only erases the
+    1830              :        *  elements, and that if the elements themselves are pointers, the
+    1831              :        *  pointed-to memory is not touched in any way.  Managing the pointer is
+    1832              :        *  the user's responsibility.
+    1833              :        */
+    1834              :       void
+    1835              :       clear() _GLIBCXX_NOEXCEPT
+    1836              :       { _M_erase_at_end(begin()); }
+    1837              : 
+    1838              :     protected:
+    1839              :       // Internal constructor functions follow.
+    1840              : 
+    1841              : #if __cplusplus < 201103L
+    1842              :       // called by the range constructor to implement [23.1.1]/9
+    1843              : 
+    1844              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1845              :       // 438. Ambiguity in the "do the right thing" clause
+    1846              :       template<typename _Integer>
+    1847              :         void
+    1848              :         _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type)
+    1849              :         {
+    1850              :           _M_initialize_map(_S_check_init_len(static_cast<size_type>(__n),
+    1851              :                                               _M_get_Tp_allocator()));
+    1852              :           _M_fill_initialize(__x);
+    1853              :         }
+    1854              : 
+    1855              :       // called by the range constructor to implement [23.1.1]/9
+    1856              :       template<typename _InputIterator>
+    1857              :         void
+    1858              :         _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
+    1859              :                                __false_type)
+    1860              :         {
+    1861              :           _M_range_initialize(__first, __last,
+    1862              :                               std::__iterator_category(__first));
+    1863              :         }
+    1864              : #endif
+    1865              : 
+    1866              :       static size_t
+    1867              :       _S_check_init_len(size_t __n, const allocator_type& __a)
+    1868              :       {
+    1869              :         if (__n > _S_max_size(__a))
+    1870              :           __throw_length_error(
+    1871              :               __N("cannot create std::deque larger than max_size()"));
+    1872              :         return __n;
+    1873              :       }
+    1874              : 
+    1875              :       static size_type
+    1876            0 :       _S_max_size(const _Tp_alloc_type& __a) _GLIBCXX_NOEXCEPT
+    1877              :       {
+    1878            0 :         const size_t __diffmax = __gnu_cxx::__numeric_traits<ptrdiff_t>::__max;
+    1879            0 :         const size_t __allocmax = _Alloc_traits::max_size(__a);
+    1880            0 :         return (std::min)(__diffmax, __allocmax);
+    1881              :       }
+    1882              : 
+    1883              :       // called by the second initialize_dispatch above
+    1884              :       ///@{
+    1885              :       /**
+    1886              :        *  @brief Fills the deque with whatever is in [first,last).
+    1887              :        *  @param  __first  An input iterator.
+    1888              :        *  @param  __last  An input iterator.
+    1889              :        *  @return   Nothing.
+    1890              :        *
+    1891              :        *  If the iterators are actually forward iterators (or better), then the
+    1892              :        *  memory layout can be done all at once.  Else we move forward using
+    1893              :        *  push_back on each value from the iterator.
+    1894              :        */
+    1895              :       template<typename _InputIterator>
+    1896              :         void
+    1897              :         _M_range_initialize(_InputIterator __first, _InputIterator __last,
+    1898              :                             std::input_iterator_tag);
+    1899              : 
+    1900              :       // called by the second initialize_dispatch above
+    1901              :       template<typename _ForwardIterator>
+    1902              :         void
+    1903              :         _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last,
+    1904              :                             std::forward_iterator_tag);
+    1905              :       ///@}
+    1906              : 
+    1907              :       /**
+    1908              :        *  @brief Fills the %deque with copies of value.
+    1909              :        *  @param  __value  Initial value.
+    1910              :        *  @return   Nothing.
+    1911              :        *  @pre _M_start and _M_finish have already been initialized,
+    1912              :        *  but none of the %deque's elements have yet been constructed.
+    1913              :        *
+    1914              :        *  This function is called only when the user provides an explicit size
+    1915              :        *  (with or without an explicit exemplar value).
+    1916              :        */
+    1917              :       void
+    1918              :       _M_fill_initialize(const value_type& __value);
+    1919              : 
+    1920              : #if __cplusplus >= 201103L
+    1921              :       // called by deque(n).
+    1922              :       void
+    1923              :       _M_default_initialize();
+    1924              : #endif
+    1925              : 
+    1926              :       // Internal assign functions follow.  The *_aux functions do the actual
+    1927              :       // assignment work for the range versions.
+    1928              : 
+    1929              : #if __cplusplus < 201103L
+    1930              :       // called by the range assign to implement [23.1.1]/9
+    1931              : 
+    1932              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1933              :       // 438. Ambiguity in the "do the right thing" clause
+    1934              :       template<typename _Integer>
+    1935              :         void
+    1936              :         _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
+    1937              :         { _M_fill_assign(__n, __val); }
+    1938              : 
+    1939              :       // called by the range assign to implement [23.1.1]/9
+    1940              :       template<typename _InputIterator>
+    1941              :         void
+    1942              :         _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
+    1943              :                            __false_type)
+    1944              :         { _M_assign_aux(__first, __last, std::__iterator_category(__first)); }
+    1945              : #endif
+    1946              : 
+    1947              :       // called by the second assign_dispatch above
+    1948              :       template<typename _InputIterator>
+    1949              :         void
+    1950              :         _M_assign_aux(_InputIterator __first, _InputIterator __last,
+    1951              :                       std::input_iterator_tag);
+    1952              : 
+    1953              :       // called by the second assign_dispatch above
+    1954              :       template<typename _ForwardIterator>
+    1955              :         void
+    1956              :         _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
+    1957              :                       std::forward_iterator_tag)
+    1958              :         {
+    1959              :           const size_type __len = std::distance(__first, __last);
+    1960              :           if (__len > size())
+    1961              :             {
+    1962              :               _ForwardIterator __mid = __first;
+    1963              :               std::advance(__mid, size());
+    1964              :               std::copy(__first, __mid, begin());
+    1965              :               _M_range_insert_aux(end(), __mid, __last,
+    1966              :                                   std::__iterator_category(__first));
+    1967              :             }
+    1968              :           else
+    1969              :             _M_erase_at_end(std::copy(__first, __last, begin()));
+    1970              :         }
+    1971              : 
+    1972              :       // Called by assign(n,t), and the range assign when it turns out
+    1973              :       // to be the same thing.
+    1974              :       void
+    1975              :       _M_fill_assign(size_type __n, const value_type& __val)
+    1976              :       {
+    1977              :         if (__n > size())
+    1978              :           {
+    1979              :             std::fill(begin(), end(), __val);
+    1980              :             _M_fill_insert(end(), __n - size(), __val);
+    1981              :           }
+    1982              :         else
+    1983              :           {
+    1984              :             _M_erase_at_end(begin() + difference_type(__n));
+    1985              :             std::fill(begin(), end(), __val);
+    1986              :           }
+    1987              :       }
+    1988              : 
+    1989              :       ///@{
+    1990              :       /// Helper functions for push_* and pop_*.
+    1991              : #if __cplusplus < 201103L
+    1992              :       void _M_push_back_aux(const value_type&);
+    1993              : 
+    1994              :       void _M_push_front_aux(const value_type&);
+    1995              : #else
+    1996              :       template<typename... _Args>
+    1997              :         void _M_push_back_aux(_Args&&... __args);
+    1998              : 
+    1999              :       template<typename... _Args>
+    2000              :         void _M_push_front_aux(_Args&&... __args);
+    2001              : #endif
+    2002              : 
+    2003              :       void _M_pop_back_aux();
+    2004              : 
+    2005              :       void _M_pop_front_aux();
+    2006              :       ///@}
+    2007              : 
+    2008              :       // Internal insert functions follow.  The *_aux functions do the actual
+    2009              :       // insertion work when all shortcuts fail.
+    2010              : 
+    2011              : #if __cplusplus < 201103L
+    2012              :       // called by the range insert to implement [23.1.1]/9
+    2013              : 
+    2014              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    2015              :       // 438. Ambiguity in the "do the right thing" clause
+    2016              :       template<typename _Integer>
+    2017              :         void
+    2018              :         _M_insert_dispatch(iterator __pos,
+    2019              :                            _Integer __n, _Integer __x, __true_type)
+    2020              :         { _M_fill_insert(__pos, __n, __x); }
+    2021              : 
+    2022              :       // called by the range insert to implement [23.1.1]/9
+    2023              :       template<typename _InputIterator>
+    2024              :         void
+    2025              :         _M_insert_dispatch(iterator __pos,
+    2026              :                            _InputIterator __first, _InputIterator __last,
+    2027              :                            __false_type)
+    2028              :         {
+    2029              :           _M_range_insert_aux(__pos, __first, __last,
+    2030              :                               std::__iterator_category(__first));
+    2031              :         }
+    2032              : #endif
+    2033              : 
+    2034              :       // called by the second insert_dispatch above
+    2035              :       template<typename _InputIterator>
+    2036              :         void
+    2037              :         _M_range_insert_aux(iterator __pos, _InputIterator __first,
+    2038              :                             _InputIterator __last, std::input_iterator_tag);
+    2039              : 
+    2040              :       // called by the second insert_dispatch above
+    2041              :       template<typename _ForwardIterator>
+    2042              :         void
+    2043              :         _M_range_insert_aux(iterator __pos, _ForwardIterator __first,
+    2044              :                             _ForwardIterator __last, std::forward_iterator_tag);
+    2045              : 
+    2046              :       // Called by insert(p,n,x), and the range insert when it turns out to be
+    2047              :       // the same thing.  Can use fill functions in optimal situations,
+    2048              :       // otherwise passes off to insert_aux(p,n,x).
+    2049              :       void
+    2050              :       _M_fill_insert(iterator __pos, size_type __n, const value_type& __x);
+    2051              : 
+    2052              :       // called by insert(p,x)
+    2053              : #if __cplusplus < 201103L
+    2054              :       iterator
+    2055              :       _M_insert_aux(iterator __pos, const value_type& __x);
+    2056              : #else
+    2057              :       template<typename... _Args>
+    2058              :         iterator
+    2059              :         _M_insert_aux(iterator __pos, _Args&&... __args);
+    2060              : #endif
+    2061              : 
+    2062              :       // called by insert(p,n,x) via fill_insert
+    2063              :       void
+    2064              :       _M_insert_aux(iterator __pos, size_type __n, const value_type& __x);
+    2065              : 
+    2066              :       // called by range_insert_aux for forward iterators
+    2067              :       template<typename _ForwardIterator>
+    2068              :         void
+    2069              :         _M_insert_aux(iterator __pos,
+    2070              :                       _ForwardIterator __first, _ForwardIterator __last,
+    2071              :                       size_type __n);
+    2072              : 
+    2073              : 
+    2074              :       // Internal erase functions follow.
+    2075              : 
+    2076              :       void
+    2077              :       _M_destroy_data_aux(iterator __first, iterator __last);
+    2078              : 
+    2079              :       // Called by ~deque().
+    2080              :       // NB: Doesn't deallocate the nodes.
+    2081              :       template<typename _Alloc1>
+    2082              :         void
+    2083              :         _M_destroy_data(iterator __first, iterator __last, const _Alloc1&)
+    2084              :         { _M_destroy_data_aux(__first, __last); }
+    2085              : 
+    2086              :       void
+    2087            0 :       _M_destroy_data(iterator __first, iterator __last,
+    2088              :                       const std::allocator<_Tp>&)
+    2089              :       {
+    2090              :         if (!__has_trivial_destructor(value_type))
+    2091              :           _M_destroy_data_aux(__first, __last);
+    2092            0 :       }
+    2093              : 
+    2094              :       // Called by erase(q1, q2).
+    2095              :       void
+    2096              :       _M_erase_at_begin(iterator __pos)
+    2097              :       {
+    2098              :         _M_destroy_data(begin(), __pos, _M_get_Tp_allocator());
+    2099              :         _M_destroy_nodes(this->_M_impl._M_start._M_node, __pos._M_node);
+    2100              :         this->_M_impl._M_start = __pos;
+    2101              :       }
+    2102              : 
+    2103              :       // Called by erase(q1, q2), resize(), clear(), _M_assign_aux,
+    2104              :       // _M_fill_assign, operator=.
+    2105              :       void
+    2106              :       _M_erase_at_end(iterator __pos)
+    2107              :       {
+    2108              :         _M_destroy_data(__pos, end(), _M_get_Tp_allocator());
+    2109              :         _M_destroy_nodes(__pos._M_node + 1,
+    2110              :                          this->_M_impl._M_finish._M_node + 1);
+    2111              :         this->_M_impl._M_finish = __pos;
+    2112              :       }
+    2113              : 
+    2114              :       iterator
+    2115              :       _M_erase(iterator __pos);
+    2116              : 
+    2117              :       iterator
+    2118              :       _M_erase(iterator __first, iterator __last);
+    2119              : 
+    2120              : #if __cplusplus >= 201103L
+    2121              :       // Called by resize(sz).
+    2122              :       void
+    2123              :       _M_default_append(size_type __n);
+    2124              : 
+    2125              :       bool
+    2126              :       _M_shrink_to_fit();
+    2127              : #endif
+    2128              : 
+    2129              :       ///@{
+    2130              :       /// Memory-handling helpers for the previous internal insert functions.
+    2131              :       iterator
+    2132              :       _M_reserve_elements_at_front(size_type __n)
+    2133              :       {
+    2134              :         const size_type __vacancies = this->_M_impl._M_start._M_cur
+    2135              :                                       - this->_M_impl._M_start._M_first;
+    2136              :         if (__n > __vacancies)
+    2137              :           _M_new_elements_at_front(__n - __vacancies);
+    2138              :         return this->_M_impl._M_start - difference_type(__n);
+    2139              :       }
+    2140              : 
+    2141              :       iterator
+    2142              :       _M_reserve_elements_at_back(size_type __n)
+    2143              :       {
+    2144              :         const size_type __vacancies = (this->_M_impl._M_finish._M_last
+    2145              :                                        - this->_M_impl._M_finish._M_cur) - 1;
+    2146              :         if (__n > __vacancies)
+    2147              :           _M_new_elements_at_back(__n - __vacancies);
+    2148              :         return this->_M_impl._M_finish + difference_type(__n);
+    2149              :       }
+    2150              : 
+    2151              :       void
+    2152              :       _M_new_elements_at_front(size_type __new_elements);
+    2153              : 
+    2154              :       void
+    2155              :       _M_new_elements_at_back(size_type __new_elements);
+    2156              :       ///@}
+    2157              : 
+    2158              : 
+    2159              :       ///@{
+    2160              :       /**
+    2161              :        *  @brief Memory-handling helpers for the major %map.
+    2162              :        *
+    2163              :        *  Makes sure the _M_map has space for new nodes.  Does not
+    2164              :        *  actually add the nodes.  Can invalidate _M_map pointers.
+    2165              :        *  (And consequently, %deque iterators.)
+    2166              :        */
+    2167              :       void
+    2168            0 :       _M_reserve_map_at_back(size_type __nodes_to_add = 1)
+    2169              :       {
+    2170            0 :         if (__nodes_to_add + 1 > this->_M_impl._M_map_size
+    2171            0 :             - (this->_M_impl._M_finish._M_node - this->_M_impl._M_map))
+    2172            0 :           _M_reallocate_map(__nodes_to_add, false);
+    2173            0 :       }
+    2174              : 
+    2175              :       void
+    2176              :       _M_reserve_map_at_front(size_type __nodes_to_add = 1)
+    2177              :       {
+    2178              :         if (__nodes_to_add > size_type(this->_M_impl._M_start._M_node
+    2179              :                                        - this->_M_impl._M_map))
+    2180              :           _M_reallocate_map(__nodes_to_add, true);
+    2181              :       }
+    2182              : 
+    2183              :       void
+    2184              :       _M_reallocate_map(size_type __nodes_to_add, bool __add_at_front);
+    2185              :       ///@}
+    2186              : 
+    2187              : #if __cplusplus >= 201103L
+    2188              :       // Constant-time, nothrow move assignment when source object's memory
+    2189              :       // can be moved because the allocators are equal.
+    2190              :       void
+    2191              :       _M_move_assign1(deque&& __x, /* always equal: */ true_type) noexcept
+    2192              :       {
+    2193              :         this->_M_impl._M_swap_data(__x._M_impl);
+    2194              :         __x.clear();
+    2195              :         std::__alloc_on_move(_M_get_Tp_allocator(), __x._M_get_Tp_allocator());
+    2196              :       }
+    2197              : 
+    2198              :       // When the allocators are not equal the operation could throw, because
+    2199              :       // we might need to allocate a new map for __x after moving from it
+    2200              :       // or we might need to allocate new elements for *this.
+    2201              :       void
+    2202              :       _M_move_assign1(deque&& __x, /* always equal: */ false_type)
+    2203              :       {
+    2204              :         if (_M_get_Tp_allocator() == __x._M_get_Tp_allocator())
+    2205              :           return _M_move_assign1(std::move(__x), true_type());
+    2206              : 
+    2207              :         constexpr bool __move_storage =
+    2208              :           _Alloc_traits::_S_propagate_on_move_assign();
+    2209              :         _M_move_assign2(std::move(__x), __bool_constant<__move_storage>());
+    2210              :       }
+    2211              : 
+    2212              :       // Destroy all elements and deallocate all memory, then replace
+    2213              :       // with elements created from __args.
+    2214              :       template<typename... _Args>
+    2215              :       void
+    2216              :       _M_replace_map(_Args&&... __args)
+    2217              :       {
+    2218              :         // Create new data first, so if allocation fails there are no effects.
+    2219              :         deque __newobj(std::forward<_Args>(__args)...);
+    2220              :         // Free existing storage using existing allocator.
+    2221              :         clear();
+    2222              :         _M_deallocate_node(*begin()._M_node); // one node left after clear()
+    2223              :         _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size);
+    2224              :         this->_M_impl._M_map = nullptr;
+    2225              :         this->_M_impl._M_map_size = 0;
+    2226              :         // Take ownership of replacement memory.
+    2227              :         this->_M_impl._M_swap_data(__newobj._M_impl);
+    2228              :       }
+    2229              : 
+    2230              :       // Do move assignment when the allocator propagates.
+    2231              :       void
+    2232              :       _M_move_assign2(deque&& __x, /* propagate: */ true_type)
+    2233              :       {
+    2234              :         // Make a copy of the original allocator state.
+    2235              :         auto __alloc = __x._M_get_Tp_allocator();
+    2236              :         // The allocator propagates so storage can be moved from __x,
+    2237              :         // leaving __x in a valid empty state with a moved-from allocator.
+    2238              :         _M_replace_map(std::move(__x));
+    2239              :         // Move the corresponding allocator state too.
+    2240              :         _M_get_Tp_allocator() = std::move(__alloc);
+    2241              :       }
+    2242              : 
+    2243              :       // Do move assignment when it may not be possible to move source
+    2244              :       // object's memory, resulting in a linear-time operation.
+    2245              :       void
+    2246              :       _M_move_assign2(deque&& __x, /* propagate: */ false_type)
+    2247              :       {
+    2248              :         if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator())
+    2249              :           {
+    2250              :             // The allocators are equal so storage can be moved from __x,
+    2251              :             // leaving __x in a valid empty state with its current allocator.
+    2252              :             _M_replace_map(std::move(__x), __x.get_allocator());
+    2253              :           }
+    2254              :         else
+    2255              :           {
+    2256              :             // The rvalue's allocator cannot be moved and is not equal,
+    2257              :             // so we need to individually move each element.
+    2258              :             _M_assign_aux(std::make_move_iterator(__x.begin()),
+    2259              :                           std::make_move_iterator(__x.end()),
+    2260              :                           std::random_access_iterator_tag());
+    2261              :             __x.clear();
+    2262              :           }
+    2263              :       }
+    2264              : #endif
+    2265              :     };
+    2266              : 
+    2267              : #if __cpp_deduction_guides >= 201606
+    2268              :   template<typename _InputIterator, typename _ValT
+    2269              :              = typename iterator_traits<_InputIterator>::value_type,
+    2270              :            typename _Allocator = allocator<_ValT>,
+    2271              :            typename = _RequireInputIter<_InputIterator>,
+    2272              :            typename = _RequireAllocator<_Allocator>>
+    2273              :     deque(_InputIterator, _InputIterator, _Allocator = _Allocator())
+    2274              :       -> deque<_ValT, _Allocator>;
+    2275              : #endif
+    2276              : 
+    2277              :   /**
+    2278              :    *  @brief  Deque equality comparison.
+    2279              :    *  @param  __x  A %deque.
+    2280              :    *  @param  __y  A %deque of the same type as @a __x.
+    2281              :    *  @return  True iff the size and elements of the deques are equal.
+    2282              :    *
+    2283              :    *  This is an equivalence relation.  It is linear in the size of the
+    2284              :    *  deques.  Deques are considered equivalent if their sizes are equal,
+    2285              :    *  and if corresponding elements compare equal.
+    2286              :   */
+    2287              :   template<typename _Tp, typename _Alloc>
+    2288              :     _GLIBCXX_NODISCARD
+    2289              :     inline bool
+    2290              :     operator==(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y)
+    2291              :     { return __x.size() == __y.size()
+    2292              :              && std::equal(__x.begin(), __x.end(), __y.begin()); }
+    2293              : 
+    2294              : #if __cpp_lib_three_way_comparison
+    2295              :   /**
+    2296              :    *  @brief  Deque ordering relation.
+    2297              :    *  @param  __x  A `deque`.
+    2298              :    *  @param  __y  A `deque` of the same type as `__x`.
+    2299              :    *  @return  A value indicating whether `__x` is less than, equal to,
+    2300              :    *           greater than, or incomparable with `__y`.
+    2301              :    *
+    2302              :    *  See `std::lexicographical_compare_three_way()` for how the determination
+    2303              :    *  is made. This operator is used to synthesize relational operators like
+    2304              :    *  `<` and `>=` etc.
+    2305              :   */
+    2306              :   template<typename _Tp, typename _Alloc>
+    2307              :     [[nodiscard]]
+    2308              :     inline __detail::__synth3way_t<_Tp>
+    2309              :     operator<=>(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y)
+    2310              :     {
+    2311              :       return std::lexicographical_compare_three_way(__x.begin(), __x.end(),
+    2312              :                                                     __y.begin(), __y.end(),
+    2313              :                                                     __detail::__synth3way);
+    2314              :     }
+    2315              : #else
+    2316              :   /**
+    2317              :    *  @brief  Deque ordering relation.
+    2318              :    *  @param  __x  A %deque.
+    2319              :    *  @param  __y  A %deque of the same type as @a __x.
+    2320              :    *  @return  True iff @a x is lexicographically less than @a __y.
+    2321              :    *
+    2322              :    *  This is a total ordering relation.  It is linear in the size of the
+    2323              :    *  deques.  The elements must be comparable with @c <.
+    2324              :    *
+    2325              :    *  See std::lexicographical_compare() for how the determination is made.
+    2326              :   */
+    2327              :   template<typename _Tp, typename _Alloc>
+    2328              :     _GLIBCXX_NODISCARD
+    2329              :     inline bool
+    2330              :     operator<(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y)
+    2331              :     { return std::lexicographical_compare(__x.begin(), __x.end(),
+    2332              :                                           __y.begin(), __y.end()); }
+    2333              : 
+    2334              :   /// Based on operator==
+    2335              :   template<typename _Tp, typename _Alloc>
+    2336              :     _GLIBCXX_NODISCARD
+    2337              :     inline bool
+    2338              :     operator!=(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y)
+    2339              :     { return !(__x == __y); }
+    2340              : 
+    2341              :   /// Based on operator<
+    2342              :   template<typename _Tp, typename _Alloc>
+    2343              :     _GLIBCXX_NODISCARD
+    2344              :     inline bool
+    2345              :     operator>(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y)
+    2346              :     { return __y < __x; }
+    2347              : 
+    2348              :   /// Based on operator<
+    2349              :   template<typename _Tp, typename _Alloc>
+    2350              :     _GLIBCXX_NODISCARD
+    2351              :     inline bool
+    2352              :     operator<=(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y)
+    2353              :     { return !(__y < __x); }
+    2354              : 
+    2355              :   /// Based on operator<
+    2356              :   template<typename _Tp, typename _Alloc>
+    2357              :     _GLIBCXX_NODISCARD
+    2358              :     inline bool
+    2359              :     operator>=(const deque<_Tp, _Alloc>& __x, const deque<_Tp, _Alloc>& __y)
+    2360              :     { return !(__x < __y); }
+    2361              : #endif // three-way comparison
+    2362              : 
+    2363              :   /// See std::deque::swap().
+    2364              :   template<typename _Tp, typename _Alloc>
+    2365              :     inline void
+    2366              :     swap(deque<_Tp,_Alloc>& __x, deque<_Tp,_Alloc>& __y)
+    2367              :     _GLIBCXX_NOEXCEPT_IF(noexcept(__x.swap(__y)))
+    2368              :     { __x.swap(__y); }
+    2369              : 
+    2370              : #undef _GLIBCXX_DEQUE_BUF_SIZE
+    2371              : 
+    2372              : _GLIBCXX_END_NAMESPACE_CONTAINER
+    2373              : 
+    2374              : #if __cplusplus >= 201103L
+    2375              :   // std::allocator is safe, but it is not the only allocator
+    2376              :   // for which this is valid.
+    2377              :   template<class _Tp>
+    2378              :     struct __is_bitwise_relocatable<_GLIBCXX_STD_C::deque<_Tp>>
+    2379              :     : true_type { };
+    2380              : #endif
+    2381              : 
+    2382              : _GLIBCXX_END_NAMESPACE_VERSION
+    2383              : } // namespace std
+    2384              : 
+    2385              : #endif /* _STL_DEQUE_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_function.h.func-c.html b/html/usr/include/c++/13/bits/stl_function.h.func-c.html new file mode 100644 index 0000000..8b9e563 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_function.h.func-c.html @@ -0,0 +1,530 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_function.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_function.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1515
Test Date:2024-04-30 13:17:26Functions:96.7 %6058
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt4plusIvEclIRdS2_EEDTplcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOS3_OS4_1392
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_EEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSA_OSB_1550
_ZNKSt4lessIvEclIRA2_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_2
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_6
_ZNKSt4lessIvEclIRA16_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_18
_ZNKSt4lessIvEclIRA15_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_22
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA16_KcEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_22
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA15_KcEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_26
_ZNKSt4lessIvEclIRA6_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_30
_ZNKSt4lessIvEclIRA12_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_42
_ZNKSt4lessIvEclIRA17_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_42
_ZNKSt4lessIvEclIRA13_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_46
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA13_KcEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_50
_ZNKSt4lessIvEclIRA10_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_54
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA17_KcEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_60
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA12_KcEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_64
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_KcEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_68
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA10_KcEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_116
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_EEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSA_OSB_882
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_EEDcOT_OT0_St17integral_constantIbLb0EE1550
_ZNSt4lessIvE6_S_cmpIRA2_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDcOT_OT0_St17integral_constantIbLb0EE2
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEDcOT_OT0_St17integral_constantIbLb0EE6
_ZNSt4lessIvE6_S_cmpIRA16_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDcOT_OT0_St17integral_constantIbLb0EE18
_ZNSt4lessIvE6_S_cmpIRA15_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDcOT_OT0_St17integral_constantIbLb0EE22
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA16_KcEEDcOT_OT0_St17integral_constantIbLb0EE22
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA15_KcEEDcOT_OT0_St17integral_constantIbLb0EE26
_ZNSt4lessIvE6_S_cmpIRA6_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDcOT_OT0_St17integral_constantIbLb0EE30
_ZNSt4lessIvE6_S_cmpIRA12_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDcOT_OT0_St17integral_constantIbLb0EE42
_ZNSt4lessIvE6_S_cmpIRA17_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDcOT_OT0_St17integral_constantIbLb0EE42
_ZNSt4lessIvE6_S_cmpIRA13_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDcOT_OT0_St17integral_constantIbLb0EE46
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA13_KcEEDcOT_OT0_St17integral_constantIbLb0EE50
_ZNSt4lessIvE6_S_cmpIRA10_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDcOT_OT0_St17integral_constantIbLb0EE54
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA17_KcEEDcOT_OT0_St17integral_constantIbLb0EE60
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA12_KcEEDcOT_OT0_St17integral_constantIbLb0EE64
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_KcEEDcOT_OT0_St17integral_constantIbLb0EE68
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA10_KcEEDcOT_OT0_St17integral_constantIbLb0EE116
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_EEDcOT_OT0_St17integral_constantIbLb0EE882
_ZNKSt7greaterIdEclERKdS2_32404
_ZNKSt8equal_toIiEclERKiS2_5809822
_ZNKSt8equal_toINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEclERKS5_S8_84218
_ZNKSt8equal_toIiEclERKiS2_5725604
_ZNKSt10_Select1stISt4pairIKllEEclERKS2_672342974
_ZNKSt10_Select1stISt4pairIKllEEclERKS2_0
_ZNKSt10_Select1stISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEclERKS8_594
_ZNKSt10_Select1stISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEEclERKSC_632
_ZNKSt10_Select1stISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEEclERKSF_784
_ZNKSt10_Select1stISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEEclERKSD_1232
_ZNKSt10_Select1stISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEEclERKSD_1484
_ZNKSt10_Select1stISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEclERKSH_1550
_ZNKSt10_Select1stISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEclERKSB_1552
_ZNKSt10_Select1stISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEEclERKS9_7806
_ZNKSt10_Select1stISt4pairIKS0_IiiEdEEclERKS3_11800
_ZNKSt10_Select1stISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEclERKSB_14308
_ZNKSt10_Select1stISt4pairIKiSt6vectorIiSaIiEEEEclERKS5_208344
_ZNKSt10_Select1stISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEclERKSB_334818
_ZNKSt10_Select1stISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEclERKSE_1812592
_ZNKSt10_Select1stISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEclERKS8_669945478
_ZNKSt4lessIdEclERKdS2_828354946
_ZNKSt4lessIlEclERKlS2_0
_ZNKSt4lessIdEclERKdS2_906
_ZNKSt4lessISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEclERKS7_SA_1036
_ZNKSt4lessISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEclERKS7_SA_6246
_ZNKSt4lessIiEclERKiS2_25318980
_ZNKSt4lessISt4pairIiiEEclERKS1_S4_48347156
_ZNKSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEclERKS5_S8_754680622
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_function.h.func.html b/html/usr/include/c++/13/bits/stl_function.h.func.html new file mode 100644 index 0000000..e5a0a51 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_function.h.func.html @@ -0,0 +1,530 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_function.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_function.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1515
Test Date:2024-04-30 13:17:26Functions:96.7 %6058
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt10_Select1stISt4pairIKllEEclERKS2_672342974
_ZNKSt10_Select1stISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEclERKSH_1550
_ZNKSt10_Select1stISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEclERKSB_14308
_ZNKSt10_Select1stISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEclERKSB_1552
_ZNKSt10_Select1stISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEEclERKSC_632
_ZNKSt10_Select1stISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEclERKSE_1812592
_ZNKSt10_Select1stISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEEclERKSD_1232
_ZNKSt10_Select1stISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEclERKSB_334818
_ZNKSt10_Select1stISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEclERKS8_594
_ZNKSt10_Select1stISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEclERKS8_669945478
_ZNKSt10_Select1stISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEEclERKSF_784
_ZNKSt10_Select1stISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEEclERKS9_7806
_ZNKSt10_Select1stISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEEclERKSD_1484
_ZNKSt10_Select1stISt4pairIKS0_IiiEdEEclERKS3_11800
_ZNKSt10_Select1stISt4pairIKiSt6vectorIiSaIiEEEEclERKS5_208344
_ZNKSt10_Select1stISt4pairIKllEEclERKS2_0
_ZNKSt4lessIdEclERKdS2_828354946
_ZNKSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEclERKS5_S8_754680622
_ZNKSt4lessISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEclERKS7_SA_6246
_ZNKSt4lessISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEclERKS7_SA_1036
_ZNKSt4lessISt4pairIiiEEclERKS1_S4_48347156
_ZNKSt4lessIdEclERKdS2_906
_ZNKSt4lessIiEclERKiS2_25318980
_ZNKSt4lessIlEclERKlS2_0
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_EEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSA_OSB_1550
_ZNKSt4lessIvEclIRA10_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_54
_ZNKSt4lessIvEclIRA12_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_42
_ZNKSt4lessIvEclIRA13_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_46
_ZNKSt4lessIvEclIRA15_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_22
_ZNKSt4lessIvEclIRA16_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_18
_ZNKSt4lessIvEclIRA17_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_42
_ZNKSt4lessIvEclIRA2_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_2
_ZNKSt4lessIvEclIRA6_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_30
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA10_KcEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_116
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA12_KcEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_64
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA13_KcEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_50
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA15_KcEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_26
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA16_KcEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_22
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA17_KcEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_60
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_6
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_KcEEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSD_OSE_68
_ZNKSt4lessIvEclIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_EEDTltcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOSA_OSB_882
_ZNKSt4plusIvEclIRdS2_EEDTplcl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOS3_OS4_1392
_ZNKSt7greaterIdEclERKdS2_32404
_ZNKSt8equal_toIiEclERKiS2_5809822
_ZNKSt8equal_toINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEclERKS5_S8_84218
_ZNKSt8equal_toIiEclERKiS2_5725604
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_EEDcOT_OT0_St17integral_constantIbLb0EE1550
_ZNSt4lessIvE6_S_cmpIRA10_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDcOT_OT0_St17integral_constantIbLb0EE54
_ZNSt4lessIvE6_S_cmpIRA12_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDcOT_OT0_St17integral_constantIbLb0EE42
_ZNSt4lessIvE6_S_cmpIRA13_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDcOT_OT0_St17integral_constantIbLb0EE46
_ZNSt4lessIvE6_S_cmpIRA15_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDcOT_OT0_St17integral_constantIbLb0EE22
_ZNSt4lessIvE6_S_cmpIRA16_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDcOT_OT0_St17integral_constantIbLb0EE18
_ZNSt4lessIvE6_S_cmpIRA17_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDcOT_OT0_St17integral_constantIbLb0EE42
_ZNSt4lessIvE6_S_cmpIRA2_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDcOT_OT0_St17integral_constantIbLb0EE2
_ZNSt4lessIvE6_S_cmpIRA6_KcRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEDcOT_OT0_St17integral_constantIbLb0EE30
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA10_KcEEDcOT_OT0_St17integral_constantIbLb0EE116
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA12_KcEEDcOT_OT0_St17integral_constantIbLb0EE64
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA13_KcEEDcOT_OT0_St17integral_constantIbLb0EE50
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA15_KcEEDcOT_OT0_St17integral_constantIbLb0EE26
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA16_KcEEDcOT_OT0_St17integral_constantIbLb0EE22
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA17_KcEEDcOT_OT0_St17integral_constantIbLb0EE60
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEDcOT_OT0_St17integral_constantIbLb0EE6
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_KcEEDcOT_OT0_St17integral_constantIbLb0EE68
_ZNSt4lessIvE6_S_cmpIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_EEDcOT_OT0_St17integral_constantIbLb0EE882
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_function.h.gcov.html b/html/usr/include/c++/13/bits/stl_function.h.gcov.html new file mode 100644 index 0000000..43cf0dd --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_function.h.gcov.html @@ -0,0 +1,1517 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_function.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_function.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1515
Test Date:2024-04-30 13:17:26Functions:96.7 %6058
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Functor implementations -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1996-1998
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/stl_function.h
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{functional}
+      54              :  */
+      55              : 
+      56              : #ifndef _STL_FUNCTION_H
+      57              : #define _STL_FUNCTION_H 1
+      58              : 
+      59              : #if __cplusplus > 201103L
+      60              : #include <bits/move.h>
+      61              : #endif
+      62              : 
+      63              : namespace std _GLIBCXX_VISIBILITY(default)
+      64              : {
+      65              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      66              : 
+      67              :   // 20.3.1 base classes
+      68              :   /** @defgroup functors Function Objects
+      69              :    *  @ingroup utilities
+      70              :    *
+      71              :    *  Function objects, or _functors_, are objects with an `operator()`
+      72              :    *  defined and accessible.  They can be passed as arguments to algorithm
+      73              :    *  templates and used in place of a function pointer.  Not only is the
+      74              :    *  resulting expressiveness of the library increased, but the generated
+      75              :    *  code can be more efficient than what you might write by hand.  When we
+      76              :    *  refer to _functors_, then, generally we include function pointers in
+      77              :    *  the description as well.
+      78              :    *
+      79              :    *  Often, functors are only created as temporaries passed to algorithm
+      80              :    *  calls, rather than being created as named variables.
+      81              :    *
+      82              :    *  Two examples taken from the standard itself follow.  To perform a
+      83              :    *  by-element addition of two vectors `a` and `b` containing `double`,
+      84              :    *  and put the result in `a`, use
+      85              :    *  \code
+      86              :    *  transform (a.begin(), a.end(), b.begin(), a.begin(), plus<double>());
+      87              :    *  \endcode
+      88              :    *  To negate every element in `a`, use
+      89              :    *  \code
+      90              :    *  transform(a.begin(), a.end(), a.begin(), negate<double>());
+      91              :    *  \endcode
+      92              :    *  The addition and negation functions will usually be inlined directly.
+      93              :    *
+      94              :    *  An _adaptable function object_ is one which provides nested typedefs
+      95              :    *  `result_type` and either `argument_type` (for a unary function) or
+      96              :    *  `first_argument_type` and `second_argument_type` (for a binary function).
+      97              :    *  Those typedefs are used by function object adaptors such as `bind2nd`.
+      98              :    *  The standard library provides two class templates, `unary_function` and
+      99              :    *  `binary_function`, which define those typedefs and so can be used as
+     100              :    *  base classes of adaptable function objects.
+     101              :    *
+     102              :    *  Since C++11 the use of function object adaptors has been superseded by
+     103              :    *  more powerful tools such as lambda expressions, `function<>`, and more
+     104              :    *  powerful type deduction (using `auto` and `decltype`). The helpers for
+     105              :    *  defining adaptable function objects are deprecated since C++11, and no
+     106              :    *  longer part of the standard library since C++17. However, they are still
+     107              :    *  defined and used by libstdc++ after C++17, as a conforming extension.
+     108              :    *
+     109              :    *  @{
+     110              :    */
+     111              : 
+     112              :   /**
+     113              :    *  Helper for defining adaptable unary function objects.
+     114              :    *  @deprecated Deprecated in C++11, no longer in the standard since C++17.
+     115              :    */
+     116              :   template<typename _Arg, typename _Result>
+     117              :     struct unary_function
+     118              :     {
+     119              :       /// @c argument_type is the type of the argument
+     120              :       typedef _Arg      argument_type;   
+     121              : 
+     122              :       /// @c result_type is the return type
+     123              :       typedef _Result   result_type;  
+     124              :     } _GLIBCXX11_DEPRECATED;
+     125              : 
+     126              :   /**
+     127              :    *  Helper for defining adaptable binary function objects.
+     128              :    *  @deprecated Deprecated in C++11, no longer in the standard since C++17.
+     129              :    */
+     130              :   template<typename _Arg1, typename _Arg2, typename _Result>
+     131              :     struct binary_function
+     132              :     {
+     133              :       /// @c first_argument_type is the type of the first argument
+     134              :       typedef _Arg1     first_argument_type; 
+     135              : 
+     136              :       /// @c second_argument_type is the type of the second argument
+     137              :       typedef _Arg2     second_argument_type;
+     138              : 
+     139              :       /// @c result_type is the return type
+     140              :       typedef _Result   result_type;
+     141              :     } _GLIBCXX11_DEPRECATED;
+     142              :   /** @}  */
+     143              : 
+     144              :   // 20.3.2 arithmetic
+     145              : 
+     146              :   /** @defgroup arithmetic_functors Arithmetic Function Object Classes
+     147              :    *  @ingroup functors
+     148              :    *
+     149              :    *  The library provides function objects for basic arithmetic operations.
+     150              :    *  See the documentation for @link functors function objects @endlink
+     151              :    *  for examples of their use.
+     152              :    *
+     153              :    *  @{
+     154              :    */
+     155              : 
+     156              : #if __cplusplus > 201103L
+     157              :   struct __is_transparent;  // undefined
+     158              : 
+     159              :   template<typename _Tp = void>
+     160              :     struct plus;
+     161              : 
+     162              :   template<typename _Tp = void>
+     163              :     struct minus;
+     164              : 
+     165              :   template<typename _Tp = void>
+     166              :     struct multiplies;
+     167              : 
+     168              :   template<typename _Tp = void>
+     169              :     struct divides;
+     170              : 
+     171              :   template<typename _Tp = void>
+     172              :     struct modulus;
+     173              : 
+     174              :   template<typename _Tp = void>
+     175              :     struct negate;
+     176              : #endif
+     177              : 
+     178              : // Ignore warnings about unary_function and binary_function.
+     179              : #pragma GCC diagnostic push
+     180              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+     181              : 
+     182              :   /// One of the @link arithmetic_functors math functors@endlink.
+     183              :   template<typename _Tp>
+     184              :     struct plus : public binary_function<_Tp, _Tp, _Tp>
+     185              :     {
+     186              :       /// Returns the sum
+     187              :       _GLIBCXX14_CONSTEXPR
+     188              :       _Tp
+     189              :       operator()(const _Tp& __x, const _Tp& __y) const
+     190              :       { return __x + __y; }
+     191              :     };
+     192              : 
+     193              :   /// One of the @link arithmetic_functors math functors@endlink.
+     194              :   template<typename _Tp>
+     195              :     struct minus : public binary_function<_Tp, _Tp, _Tp>
+     196              :     {
+     197              :       _GLIBCXX14_CONSTEXPR
+     198              :       _Tp
+     199              :       operator()(const _Tp& __x, const _Tp& __y) const
+     200              :       { return __x - __y; }
+     201              :     };
+     202              : 
+     203              :   /// One of the @link arithmetic_functors math functors@endlink.
+     204              :   template<typename _Tp>
+     205              :     struct multiplies : public binary_function<_Tp, _Tp, _Tp>
+     206              :     {
+     207              :       _GLIBCXX14_CONSTEXPR
+     208              :       _Tp
+     209              :       operator()(const _Tp& __x, const _Tp& __y) const
+     210              :       { return __x * __y; }
+     211              :     };
+     212              : 
+     213              :   /// One of the @link arithmetic_functors math functors@endlink.
+     214              :   template<typename _Tp>
+     215              :     struct divides : public binary_function<_Tp, _Tp, _Tp>
+     216              :     {
+     217              :       _GLIBCXX14_CONSTEXPR
+     218              :       _Tp
+     219              :       operator()(const _Tp& __x, const _Tp& __y) const
+     220              :       { return __x / __y; }
+     221              :     };
+     222              : 
+     223              :   /// One of the @link arithmetic_functors math functors@endlink.
+     224              :   template<typename _Tp>
+     225              :     struct modulus : public binary_function<_Tp, _Tp, _Tp>
+     226              :     {
+     227              :       _GLIBCXX14_CONSTEXPR
+     228              :       _Tp
+     229              :       operator()(const _Tp& __x, const _Tp& __y) const
+     230              :       { return __x % __y; }
+     231              :     };
+     232              : 
+     233              :   /// One of the @link arithmetic_functors math functors@endlink.
+     234              :   template<typename _Tp>
+     235              :     struct negate : public unary_function<_Tp, _Tp>
+     236              :     {
+     237              :       _GLIBCXX14_CONSTEXPR
+     238              :       _Tp
+     239              :       operator()(const _Tp& __x) const
+     240              :       { return -__x; }
+     241              :     };
+     242              : #pragma GCC diagnostic pop
+     243              : 
+     244              : #if __cplusplus > 201103L
+     245              : 
+     246              : #define __cpp_lib_transparent_operators 201510L
+     247              : 
+     248              :   template<>
+     249              :     struct plus<void>
+     250              :     {
+     251              :       template <typename _Tp, typename _Up>
+     252              :         _GLIBCXX14_CONSTEXPR
+     253              :         auto
+     254         1392 :         operator()(_Tp&& __t, _Up&& __u) const
+     255              :         noexcept(noexcept(std::forward<_Tp>(__t) + std::forward<_Up>(__u)))
+     256              :         -> decltype(std::forward<_Tp>(__t) + std::forward<_Up>(__u))
+     257         1392 :         { return std::forward<_Tp>(__t) + std::forward<_Up>(__u); }
+     258              : 
+     259              :       typedef __is_transparent is_transparent;
+     260              :     };
+     261              : 
+     262              :   /// One of the @link arithmetic_functors math functors@endlink.
+     263              :   template<>
+     264              :     struct minus<void>
+     265              :     {
+     266              :       template <typename _Tp, typename _Up>
+     267              :         _GLIBCXX14_CONSTEXPR
+     268              :         auto
+     269              :         operator()(_Tp&& __t, _Up&& __u) const
+     270              :         noexcept(noexcept(std::forward<_Tp>(__t) - std::forward<_Up>(__u)))
+     271              :         -> decltype(std::forward<_Tp>(__t) - std::forward<_Up>(__u))
+     272              :         { return std::forward<_Tp>(__t) - std::forward<_Up>(__u); }
+     273              : 
+     274              :       typedef __is_transparent is_transparent;
+     275              :     };
+     276              : 
+     277              :   /// One of the @link arithmetic_functors math functors@endlink.
+     278              :   template<>
+     279              :     struct multiplies<void>
+     280              :     {
+     281              :       template <typename _Tp, typename _Up>
+     282              :         _GLIBCXX14_CONSTEXPR
+     283              :         auto
+     284              :         operator()(_Tp&& __t, _Up&& __u) const
+     285              :         noexcept(noexcept(std::forward<_Tp>(__t) * std::forward<_Up>(__u)))
+     286              :         -> decltype(std::forward<_Tp>(__t) * std::forward<_Up>(__u))
+     287              :         { return std::forward<_Tp>(__t) * std::forward<_Up>(__u); }
+     288              : 
+     289              :       typedef __is_transparent is_transparent;
+     290              :     };
+     291              : 
+     292              :   /// One of the @link arithmetic_functors math functors@endlink.
+     293              :   template<>
+     294              :     struct divides<void>
+     295              :     {
+     296              :       template <typename _Tp, typename _Up>
+     297              :         _GLIBCXX14_CONSTEXPR
+     298              :         auto
+     299              :         operator()(_Tp&& __t, _Up&& __u) const
+     300              :         noexcept(noexcept(std::forward<_Tp>(__t) / std::forward<_Up>(__u)))
+     301              :         -> decltype(std::forward<_Tp>(__t) / std::forward<_Up>(__u))
+     302              :         { return std::forward<_Tp>(__t) / std::forward<_Up>(__u); }
+     303              : 
+     304              :       typedef __is_transparent is_transparent;
+     305              :     };
+     306              : 
+     307              :   /// One of the @link arithmetic_functors math functors@endlink.
+     308              :   template<>
+     309              :     struct modulus<void>
+     310              :     {
+     311              :       template <typename _Tp, typename _Up>
+     312              :         _GLIBCXX14_CONSTEXPR
+     313              :         auto
+     314              :         operator()(_Tp&& __t, _Up&& __u) const
+     315              :         noexcept(noexcept(std::forward<_Tp>(__t) % std::forward<_Up>(__u)))
+     316              :         -> decltype(std::forward<_Tp>(__t) % std::forward<_Up>(__u))
+     317              :         { return std::forward<_Tp>(__t) % std::forward<_Up>(__u); }
+     318              : 
+     319              :       typedef __is_transparent is_transparent;
+     320              :     };
+     321              : 
+     322              :   /// One of the @link arithmetic_functors math functors@endlink.
+     323              :   template<>
+     324              :     struct negate<void>
+     325              :     {
+     326              :       template <typename _Tp>
+     327              :         _GLIBCXX14_CONSTEXPR
+     328              :         auto
+     329              :         operator()(_Tp&& __t) const
+     330              :         noexcept(noexcept(-std::forward<_Tp>(__t)))
+     331              :         -> decltype(-std::forward<_Tp>(__t))
+     332              :         { return -std::forward<_Tp>(__t); }
+     333              : 
+     334              :       typedef __is_transparent is_transparent;
+     335              :     };
+     336              : #endif
+     337              :   /** @}  */
+     338              : 
+     339              :   // 20.3.3 comparisons
+     340              :   /** @defgroup comparison_functors Comparison Classes
+     341              :    *  @ingroup functors
+     342              :    *
+     343              :    *  The library provides six wrapper functors for all the basic comparisons
+     344              :    *  in C++, like @c <.
+     345              :    *
+     346              :    *  @{
+     347              :    */
+     348              : #if __cplusplus > 201103L
+     349              :   template<typename _Tp = void>
+     350              :     struct equal_to;
+     351              : 
+     352              :   template<typename _Tp = void>
+     353              :     struct not_equal_to;
+     354              : 
+     355              :   template<typename _Tp = void>
+     356              :     struct greater;
+     357              : 
+     358              :   template<typename _Tp = void>
+     359              :     struct less;
+     360              : 
+     361              :   template<typename _Tp = void>
+     362              :     struct greater_equal;
+     363              : 
+     364              :   template<typename _Tp = void>
+     365              :     struct less_equal;
+     366              : #endif
+     367              : 
+     368              : #pragma GCC diagnostic push
+     369              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+     370              : 
+     371              :   /// One of the @link comparison_functors comparison functors@endlink.
+     372              :   template<typename _Tp>
+     373              :     struct equal_to : public binary_function<_Tp, _Tp, bool>
+     374              :     {
+     375              :       _GLIBCXX14_CONSTEXPR
+     376              :       bool
+     377      5809822 :       operator()(const _Tp& __x, const _Tp& __y) const
+     378      5809822 :       { return __x == __y; }
+     379              :     };
+     380              : 
+     381              :   /// One of the @link comparison_functors comparison functors@endlink.
+     382              :   template<typename _Tp>
+     383              :     struct not_equal_to : public binary_function<_Tp, _Tp, bool>
+     384              :     {
+     385              :       _GLIBCXX14_CONSTEXPR
+     386              :       bool
+     387              :       operator()(const _Tp& __x, const _Tp& __y) const
+     388              :       { return __x != __y; }
+     389              :     };
+     390              : 
+     391              :   /// One of the @link comparison_functors comparison functors@endlink.
+     392              :   template<typename _Tp>
+     393              :     struct greater : public binary_function<_Tp, _Tp, bool>
+     394              :     {
+     395              :       _GLIBCXX14_CONSTEXPR
+     396              :       bool
+     397        32404 :       operator()(const _Tp& __x, const _Tp& __y) const
+     398        32404 :       { return __x > __y; }
+     399              :     };
+     400              : 
+     401              :   /// One of the @link comparison_functors comparison functors@endlink.
+     402              :   template<typename _Tp>
+     403              :     struct less : public binary_function<_Tp, _Tp, bool>
+     404              :     {
+     405              :       _GLIBCXX14_CONSTEXPR
+     406              :       bool
+     407    828354946 :       operator()(const _Tp& __x, const _Tp& __y) const
+     408    828354946 :       { return __x < __y; }
+     409              :     };
+     410              : 
+     411              :   /// One of the @link comparison_functors comparison functors@endlink.
+     412              :   template<typename _Tp>
+     413              :     struct greater_equal : public binary_function<_Tp, _Tp, bool>
+     414              :     {
+     415              :       _GLIBCXX14_CONSTEXPR
+     416              :       bool
+     417              :       operator()(const _Tp& __x, const _Tp& __y) const
+     418              :       { return __x >= __y; }
+     419              :     };
+     420              : 
+     421              :   /// One of the @link comparison_functors comparison functors@endlink.
+     422              :   template<typename _Tp>
+     423              :     struct less_equal : public binary_function<_Tp, _Tp, bool>
+     424              :     {
+     425              :       _GLIBCXX14_CONSTEXPR
+     426              :       bool
+     427              :       operator()(const _Tp& __x, const _Tp& __y) const
+     428              :       { return __x <= __y; }
+     429              :     };
+     430              : 
+     431              :   // Partial specialization of std::greater for pointers.
+     432              :   template<typename _Tp>
+     433              :     struct greater<_Tp*> : public binary_function<_Tp*, _Tp*, bool>
+     434              :     {
+     435              :       _GLIBCXX14_CONSTEXPR bool
+     436              :       operator()(_Tp* __x, _Tp* __y) const _GLIBCXX_NOTHROW
+     437              :       {
+     438              : #if __cplusplus >= 201402L
+     439              :         if (std::__is_constant_evaluated())
+     440              :           return __x > __y;
+     441              : #endif
+     442              :         return (__UINTPTR_TYPE__)__x > (__UINTPTR_TYPE__)__y;
+     443              :       }
+     444              :     };
+     445              : 
+     446              :   // Partial specialization of std::less for pointers.
+     447              :   template<typename _Tp>
+     448              :     struct less<_Tp*> : public binary_function<_Tp*, _Tp*, bool>
+     449              :     {
+     450              :       _GLIBCXX14_CONSTEXPR bool
+     451              :       operator()(_Tp* __x, _Tp* __y) const _GLIBCXX_NOTHROW
+     452              :       {
+     453              : #if __cplusplus >= 201402L
+     454              :         if (std::__is_constant_evaluated())
+     455              :           return __x < __y;
+     456              : #endif
+     457              :         return (__UINTPTR_TYPE__)__x < (__UINTPTR_TYPE__)__y;
+     458              :       }
+     459              :     };
+     460              : 
+     461              :   // Partial specialization of std::greater_equal for pointers.
+     462              :   template<typename _Tp>
+     463              :     struct greater_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool>
+     464              :     {
+     465              :       _GLIBCXX14_CONSTEXPR bool
+     466              :       operator()(_Tp* __x, _Tp* __y) const _GLIBCXX_NOTHROW
+     467              :       {
+     468              : #if __cplusplus >= 201402L
+     469              :         if (std::__is_constant_evaluated())
+     470              :           return __x >= __y;
+     471              : #endif
+     472              :         return (__UINTPTR_TYPE__)__x >= (__UINTPTR_TYPE__)__y;
+     473              :       }
+     474              :     };
+     475              : 
+     476              :   // Partial specialization of std::less_equal for pointers.
+     477              :   template<typename _Tp>
+     478              :     struct less_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool>
+     479              :     {
+     480              :       _GLIBCXX14_CONSTEXPR bool
+     481              :       operator()(_Tp* __x, _Tp* __y) const _GLIBCXX_NOTHROW
+     482              :       {
+     483              : #if __cplusplus >= 201402L
+     484              :         if (std::__is_constant_evaluated())
+     485              :           return __x <= __y;
+     486              : #endif
+     487              :         return (__UINTPTR_TYPE__)__x <= (__UINTPTR_TYPE__)__y;
+     488              :       }
+     489              :     };
+     490              : #pragma GCC diagnostic pop
+     491              : 
+     492              : #if __cplusplus >= 201402L
+     493              :   /// One of the @link comparison_functors comparison functors@endlink.
+     494              :   template<>
+     495              :     struct equal_to<void>
+     496              :     {
+     497              :       template <typename _Tp, typename _Up>
+     498              :         constexpr auto
+     499              :         operator()(_Tp&& __t, _Up&& __u) const
+     500              :         noexcept(noexcept(std::forward<_Tp>(__t) == std::forward<_Up>(__u)))
+     501              :         -> decltype(std::forward<_Tp>(__t) == std::forward<_Up>(__u))
+     502              :         { return std::forward<_Tp>(__t) == std::forward<_Up>(__u); }
+     503              : 
+     504              :       typedef __is_transparent is_transparent;
+     505              :     };
+     506              : 
+     507              :   /// One of the @link comparison_functors comparison functors@endlink.
+     508              :   template<>
+     509              :     struct not_equal_to<void>
+     510              :     {
+     511              :       template <typename _Tp, typename _Up>
+     512              :         constexpr auto
+     513              :         operator()(_Tp&& __t, _Up&& __u) const
+     514              :         noexcept(noexcept(std::forward<_Tp>(__t) != std::forward<_Up>(__u)))
+     515              :         -> decltype(std::forward<_Tp>(__t) != std::forward<_Up>(__u))
+     516              :         { return std::forward<_Tp>(__t) != std::forward<_Up>(__u); }
+     517              : 
+     518              :       typedef __is_transparent is_transparent;
+     519              :     };
+     520              : 
+     521              :   /// One of the @link comparison_functors comparison functors@endlink.
+     522              :   template<>
+     523              :     struct greater<void>
+     524              :     {
+     525              :       template <typename _Tp, typename _Up>
+     526              :         constexpr auto
+     527              :         operator()(_Tp&& __t, _Up&& __u) const
+     528              :         noexcept(noexcept(std::forward<_Tp>(__t) > std::forward<_Up>(__u)))
+     529              :         -> decltype(std::forward<_Tp>(__t) > std::forward<_Up>(__u))
+     530              :         {
+     531              :           return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u),
+     532              :                         __ptr_cmp<_Tp, _Up>{});
+     533              :         }
+     534              : 
+     535              :       template<typename _Tp, typename _Up>
+     536              :         constexpr bool
+     537              :         operator()(_Tp* __t, _Up* __u) const noexcept
+     538              :         { return greater<common_type_t<_Tp*, _Up*>>{}(__t, __u); }
+     539              : 
+     540              :       typedef __is_transparent is_transparent;
+     541              : 
+     542              :     private:
+     543              :       template <typename _Tp, typename _Up>
+     544              :         static constexpr decltype(auto)
+     545              :         _S_cmp(_Tp&& __t, _Up&& __u, false_type)
+     546              :         { return std::forward<_Tp>(__t) > std::forward<_Up>(__u); }
+     547              : 
+     548              :       template <typename _Tp, typename _Up>
+     549              :         static constexpr bool
+     550              :         _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept
+     551              :         {
+     552              :           return greater<const volatile void*>{}(
+     553              :               static_cast<const volatile void*>(std::forward<_Tp>(__t)),
+     554              :               static_cast<const volatile void*>(std::forward<_Up>(__u)));
+     555              :         }
+     556              : 
+     557              :       // True if there is no viable operator> member function.
+     558              :       template<typename _Tp, typename _Up, typename = void>
+     559              :         struct __not_overloaded2 : true_type { };
+     560              : 
+     561              :       // False if we can call T.operator>(U)
+     562              :       template<typename _Tp, typename _Up>
+     563              :         struct __not_overloaded2<_Tp, _Up, __void_t<
+     564              :           decltype(std::declval<_Tp>().operator>(std::declval<_Up>()))>>
+     565              :         : false_type { };
+     566              : 
+     567              :       // True if there is no overloaded operator> for these operands.
+     568              :       template<typename _Tp, typename _Up, typename = void>
+     569              :         struct __not_overloaded : __not_overloaded2<_Tp, _Up> { };
+     570              : 
+     571              :       // False if we can call operator>(T,U)
+     572              :       template<typename _Tp, typename _Up>
+     573              :         struct __not_overloaded<_Tp, _Up, __void_t<
+     574              :           decltype(operator>(std::declval<_Tp>(), std::declval<_Up>()))>>
+     575              :         : false_type { };
+     576              : 
+     577              :       template<typename _Tp, typename _Up>
+     578              :         using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>,
+     579              :               is_convertible<_Tp, const volatile void*>,
+     580              :               is_convertible<_Up, const volatile void*>>;
+     581              :     };
+     582              : 
+     583              :   /// One of the @link comparison_functors comparison functors@endlink.
+     584              :   template<>
+     585              :     struct less<void>
+     586              :     {
+     587              :       template <typename _Tp, typename _Up>
+     588              :         constexpr auto
+     589         1550 :         operator()(_Tp&& __t, _Up&& __u) const
+     590              :         noexcept(noexcept(std::forward<_Tp>(__t) < std::forward<_Up>(__u)))
+     591              :         -> decltype(std::forward<_Tp>(__t) < std::forward<_Up>(__u))
+     592              :         {
+     593         3100 :           return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u),
+     594         2218 :                         __ptr_cmp<_Tp, _Up>{});
+     595              :         }
+     596              : 
+     597              :       template<typename _Tp, typename _Up>
+     598              :         constexpr bool
+     599              :         operator()(_Tp* __t, _Up* __u) const noexcept
+     600              :         { return less<common_type_t<_Tp*, _Up*>>{}(__t, __u); }
+     601              : 
+     602              :       typedef __is_transparent is_transparent;
+     603              : 
+     604              :     private:
+     605              :       template <typename _Tp, typename _Up>
+     606              :         static constexpr decltype(auto)
+     607         1550 :         _S_cmp(_Tp&& __t, _Up&& __u, false_type)
+     608         1550 :         { return std::forward<_Tp>(__t) < std::forward<_Up>(__u); }
+     609              : 
+     610              :       template <typename _Tp, typename _Up>
+     611              :         static constexpr bool
+     612              :         _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept
+     613              :         {
+     614              :           return less<const volatile void*>{}(
+     615              :               static_cast<const volatile void*>(std::forward<_Tp>(__t)),
+     616              :               static_cast<const volatile void*>(std::forward<_Up>(__u)));
+     617              :         }
+     618              : 
+     619              :       // True if there is no viable operator< member function.
+     620              :       template<typename _Tp, typename _Up, typename = void>
+     621              :         struct __not_overloaded2 : true_type { };
+     622              : 
+     623              :       // False if we can call T.operator<(U)
+     624              :       template<typename _Tp, typename _Up>
+     625              :         struct __not_overloaded2<_Tp, _Up, __void_t<
+     626              :           decltype(std::declval<_Tp>().operator<(std::declval<_Up>()))>>
+     627              :         : false_type { };
+     628              : 
+     629              :       // True if there is no overloaded operator< for these operands.
+     630              :       template<typename _Tp, typename _Up, typename = void>
+     631              :         struct __not_overloaded : __not_overloaded2<_Tp, _Up> { };
+     632              : 
+     633              :       // False if we can call operator<(T,U)
+     634              :       template<typename _Tp, typename _Up>
+     635              :         struct __not_overloaded<_Tp, _Up, __void_t<
+     636              :           decltype(operator<(std::declval<_Tp>(), std::declval<_Up>()))>>
+     637              :         : false_type { };
+     638              : 
+     639              :       template<typename _Tp, typename _Up>
+     640              :         using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>,
+     641              :               is_convertible<_Tp, const volatile void*>,
+     642              :               is_convertible<_Up, const volatile void*>>;
+     643              :     };
+     644              : 
+     645              :   /// One of the @link comparison_functors comparison functors@endlink.
+     646              :   template<>
+     647              :     struct greater_equal<void>
+     648              :     {
+     649              :       template <typename _Tp, typename _Up>
+     650              :         constexpr auto
+     651              :         operator()(_Tp&& __t, _Up&& __u) const
+     652              :         noexcept(noexcept(std::forward<_Tp>(__t) >= std::forward<_Up>(__u)))
+     653              :         -> decltype(std::forward<_Tp>(__t) >= std::forward<_Up>(__u))
+     654              :         {
+     655              :           return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u),
+     656              :                         __ptr_cmp<_Tp, _Up>{});
+     657              :         }
+     658              : 
+     659              :       template<typename _Tp, typename _Up>
+     660              :         constexpr bool
+     661              :         operator()(_Tp* __t, _Up* __u) const noexcept
+     662              :         { return greater_equal<common_type_t<_Tp*, _Up*>>{}(__t, __u); }
+     663              : 
+     664              :       typedef __is_transparent is_transparent;
+     665              : 
+     666              :     private:
+     667              :       template <typename _Tp, typename _Up>
+     668              :         static constexpr decltype(auto)
+     669              :         _S_cmp(_Tp&& __t, _Up&& __u, false_type)
+     670              :         { return std::forward<_Tp>(__t) >= std::forward<_Up>(__u); }
+     671              : 
+     672              :       template <typename _Tp, typename _Up>
+     673              :         static constexpr bool
+     674              :         _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept
+     675              :         {
+     676              :           return greater_equal<const volatile void*>{}(
+     677              :               static_cast<const volatile void*>(std::forward<_Tp>(__t)),
+     678              :               static_cast<const volatile void*>(std::forward<_Up>(__u)));
+     679              :         }
+     680              : 
+     681              :       // True if there is no viable operator>= member function.
+     682              :       template<typename _Tp, typename _Up, typename = void>
+     683              :         struct __not_overloaded2 : true_type { };
+     684              : 
+     685              :       // False if we can call T.operator>=(U)
+     686              :       template<typename _Tp, typename _Up>
+     687              :         struct __not_overloaded2<_Tp, _Up, __void_t<
+     688              :           decltype(std::declval<_Tp>().operator>=(std::declval<_Up>()))>>
+     689              :         : false_type { };
+     690              : 
+     691              :       // True if there is no overloaded operator>= for these operands.
+     692              :       template<typename _Tp, typename _Up, typename = void>
+     693              :         struct __not_overloaded : __not_overloaded2<_Tp, _Up> { };
+     694              : 
+     695              :       // False if we can call operator>=(T,U)
+     696              :       template<typename _Tp, typename _Up>
+     697              :         struct __not_overloaded<_Tp, _Up, __void_t<
+     698              :           decltype(operator>=(std::declval<_Tp>(), std::declval<_Up>()))>>
+     699              :         : false_type { };
+     700              : 
+     701              :       template<typename _Tp, typename _Up>
+     702              :         using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>,
+     703              :               is_convertible<_Tp, const volatile void*>,
+     704              :               is_convertible<_Up, const volatile void*>>;
+     705              :     };
+     706              : 
+     707              :   /// One of the @link comparison_functors comparison functors@endlink.
+     708              :   template<>
+     709              :     struct less_equal<void>
+     710              :     {
+     711              :       template <typename _Tp, typename _Up>
+     712              :         constexpr auto
+     713              :         operator()(_Tp&& __t, _Up&& __u) const
+     714              :         noexcept(noexcept(std::forward<_Tp>(__t) <= std::forward<_Up>(__u)))
+     715              :         -> decltype(std::forward<_Tp>(__t) <= std::forward<_Up>(__u))
+     716              :         {
+     717              :           return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u),
+     718              :                         __ptr_cmp<_Tp, _Up>{});
+     719              :         }
+     720              : 
+     721              :       template<typename _Tp, typename _Up>
+     722              :         constexpr bool
+     723              :         operator()(_Tp* __t, _Up* __u) const noexcept
+     724              :         { return less_equal<common_type_t<_Tp*, _Up*>>{}(__t, __u); }
+     725              : 
+     726              :       typedef __is_transparent is_transparent;
+     727              : 
+     728              :     private:
+     729              :       template <typename _Tp, typename _Up>
+     730              :         static constexpr decltype(auto)
+     731              :         _S_cmp(_Tp&& __t, _Up&& __u, false_type)
+     732              :         { return std::forward<_Tp>(__t) <= std::forward<_Up>(__u); }
+     733              : 
+     734              :       template <typename _Tp, typename _Up>
+     735              :         static constexpr bool
+     736              :         _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept
+     737              :         {
+     738              :           return less_equal<const volatile void*>{}(
+     739              :               static_cast<const volatile void*>(std::forward<_Tp>(__t)),
+     740              :               static_cast<const volatile void*>(std::forward<_Up>(__u)));
+     741              :         }
+     742              : 
+     743              :       // True if there is no viable operator<= member function.
+     744              :       template<typename _Tp, typename _Up, typename = void>
+     745              :         struct __not_overloaded2 : true_type { };
+     746              : 
+     747              :       // False if we can call T.operator<=(U)
+     748              :       template<typename _Tp, typename _Up>
+     749              :         struct __not_overloaded2<_Tp, _Up, __void_t<
+     750              :           decltype(std::declval<_Tp>().operator<=(std::declval<_Up>()))>>
+     751              :         : false_type { };
+     752              : 
+     753              :       // True if there is no overloaded operator<= for these operands.
+     754              :       template<typename _Tp, typename _Up, typename = void>
+     755              :         struct __not_overloaded : __not_overloaded2<_Tp, _Up> { };
+     756              : 
+     757              :       // False if we can call operator<=(T,U)
+     758              :       template<typename _Tp, typename _Up>
+     759              :         struct __not_overloaded<_Tp, _Up, __void_t<
+     760              :           decltype(operator<=(std::declval<_Tp>(), std::declval<_Up>()))>>
+     761              :         : false_type { };
+     762              : 
+     763              :       template<typename _Tp, typename _Up>
+     764              :         using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>,
+     765              :               is_convertible<_Tp, const volatile void*>,
+     766              :               is_convertible<_Up, const volatile void*>>;
+     767              :     };
+     768              : #endif // C++14
+     769              :   /** @}  */
+     770              : 
+     771              :   // 20.3.4 logical operations
+     772              :   /** @defgroup logical_functors Boolean Operations Classes
+     773              :    *  @ingroup functors
+     774              :    *
+     775              :    *  The library provides function objects for the logical operations:
+     776              :    *  `&&`, `||`, and `!`.
+     777              :    *
+     778              :    *  @{
+     779              :    */
+     780              : #if __cplusplus > 201103L
+     781              :   template<typename _Tp = void>
+     782              :     struct logical_and;
+     783              : 
+     784              :   template<typename _Tp = void>
+     785              :     struct logical_or;
+     786              : 
+     787              :   template<typename _Tp = void>
+     788              :     struct logical_not;
+     789              : #endif
+     790              : 
+     791              : #pragma GCC diagnostic push
+     792              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+     793              : 
+     794              :   /// One of the @link logical_functors Boolean operations functors@endlink.
+     795              :   template<typename _Tp>
+     796              :     struct logical_and : public binary_function<_Tp, _Tp, bool>
+     797              :     {
+     798              :       _GLIBCXX14_CONSTEXPR
+     799              :       bool
+     800              :       operator()(const _Tp& __x, const _Tp& __y) const
+     801              :       { return __x && __y; }
+     802              :     };
+     803              : 
+     804              :   /// One of the @link logical_functors Boolean operations functors@endlink.
+     805              :   template<typename _Tp>
+     806              :     struct logical_or : public binary_function<_Tp, _Tp, bool>
+     807              :     {
+     808              :       _GLIBCXX14_CONSTEXPR
+     809              :       bool
+     810              :       operator()(const _Tp& __x, const _Tp& __y) const
+     811              :       { return __x || __y; }
+     812              :     };
+     813              : 
+     814              :   /// One of the @link logical_functors Boolean operations functors@endlink.
+     815              :   template<typename _Tp>
+     816              :     struct logical_not : public unary_function<_Tp, bool>
+     817              :     {
+     818              :       _GLIBCXX14_CONSTEXPR
+     819              :       bool
+     820              :       operator()(const _Tp& __x) const
+     821              :       { return !__x; }
+     822              :     };
+     823              : #pragma GCC diagnostic pop
+     824              : 
+     825              : #if __cplusplus > 201103L
+     826              :   /// One of the @link logical_functors Boolean operations functors@endlink.
+     827              :   template<>
+     828              :     struct logical_and<void>
+     829              :     {
+     830              :       template <typename _Tp, typename _Up>
+     831              :         _GLIBCXX14_CONSTEXPR
+     832              :         auto
+     833              :         operator()(_Tp&& __t, _Up&& __u) const
+     834              :         noexcept(noexcept(std::forward<_Tp>(__t) && std::forward<_Up>(__u)))
+     835              :         -> decltype(std::forward<_Tp>(__t) && std::forward<_Up>(__u))
+     836              :         { return std::forward<_Tp>(__t) && std::forward<_Up>(__u); }
+     837              : 
+     838              :       typedef __is_transparent is_transparent;
+     839              :     };
+     840              : 
+     841              :   /// One of the @link logical_functors Boolean operations functors@endlink.
+     842              :   template<>
+     843              :     struct logical_or<void>
+     844              :     {
+     845              :       template <typename _Tp, typename _Up>
+     846              :         _GLIBCXX14_CONSTEXPR
+     847              :         auto
+     848              :         operator()(_Tp&& __t, _Up&& __u) const
+     849              :         noexcept(noexcept(std::forward<_Tp>(__t) || std::forward<_Up>(__u)))
+     850              :         -> decltype(std::forward<_Tp>(__t) || std::forward<_Up>(__u))
+     851              :         { return std::forward<_Tp>(__t) || std::forward<_Up>(__u); }
+     852              : 
+     853              :       typedef __is_transparent is_transparent;
+     854              :     };
+     855              : 
+     856              :   /// One of the @link logical_functors Boolean operations functors@endlink.
+     857              :   template<>
+     858              :     struct logical_not<void>
+     859              :     {
+     860              :       template <typename _Tp>
+     861              :         _GLIBCXX14_CONSTEXPR
+     862              :         auto
+     863              :         operator()(_Tp&& __t) const
+     864              :         noexcept(noexcept(!std::forward<_Tp>(__t)))
+     865              :         -> decltype(!std::forward<_Tp>(__t))
+     866              :         { return !std::forward<_Tp>(__t); }
+     867              : 
+     868              :       typedef __is_transparent is_transparent;
+     869              :     };
+     870              : #endif
+     871              :   /** @}  */
+     872              : 
+     873              : #if __cplusplus > 201103L
+     874              :   template<typename _Tp = void>
+     875              :     struct bit_and;
+     876              : 
+     877              :   template<typename _Tp = void>
+     878              :     struct bit_or;
+     879              : 
+     880              :   template<typename _Tp = void>
+     881              :     struct bit_xor;
+     882              : 
+     883              :   template<typename _Tp = void>
+     884              :     struct bit_not;
+     885              : #endif
+     886              : 
+     887              : #pragma GCC diagnostic push
+     888              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+     889              : 
+     890              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     891              :   // DR 660. Missing Bitwise Operations.
+     892              :   template<typename _Tp>
+     893              :     struct bit_and : public binary_function<_Tp, _Tp, _Tp>
+     894              :     {
+     895              :       _GLIBCXX14_CONSTEXPR
+     896              :       _Tp
+     897              :       operator()(const _Tp& __x, const _Tp& __y) const
+     898              :       { return __x & __y; }
+     899              :     };
+     900              : 
+     901              :   template<typename _Tp>
+     902              :     struct bit_or : public binary_function<_Tp, _Tp, _Tp>
+     903              :     {
+     904              :       _GLIBCXX14_CONSTEXPR
+     905              :       _Tp
+     906              :       operator()(const _Tp& __x, const _Tp& __y) const
+     907              :       { return __x | __y; }
+     908              :     };
+     909              : 
+     910              :   template<typename _Tp>
+     911              :     struct bit_xor : public binary_function<_Tp, _Tp, _Tp>
+     912              :     {
+     913              :       _GLIBCXX14_CONSTEXPR
+     914              :       _Tp
+     915              :       operator()(const _Tp& __x, const _Tp& __y) const
+     916              :       { return __x ^ __y; }
+     917              :     };
+     918              : 
+     919              :   template<typename _Tp>
+     920              :     struct bit_not : public unary_function<_Tp, _Tp>
+     921              :     {
+     922              :     _GLIBCXX14_CONSTEXPR
+     923              :       _Tp
+     924              :       operator()(const _Tp& __x) const
+     925              :       { return ~__x; }
+     926              :     };
+     927              : #pragma GCC diagnostic pop
+     928              : 
+     929              : #if __cplusplus > 201103L
+     930              :   template <>
+     931              :     struct bit_and<void>
+     932              :     {
+     933              :       template <typename _Tp, typename _Up>
+     934              :         _GLIBCXX14_CONSTEXPR
+     935              :         auto
+     936              :         operator()(_Tp&& __t, _Up&& __u) const
+     937              :         noexcept(noexcept(std::forward<_Tp>(__t) & std::forward<_Up>(__u)))
+     938              :         -> decltype(std::forward<_Tp>(__t) & std::forward<_Up>(__u))
+     939              :         { return std::forward<_Tp>(__t) & std::forward<_Up>(__u); }
+     940              : 
+     941              :       typedef __is_transparent is_transparent;
+     942              :     };
+     943              : 
+     944              :   template <>
+     945              :     struct bit_or<void>
+     946              :     {
+     947              :       template <typename _Tp, typename _Up>
+     948              :         _GLIBCXX14_CONSTEXPR
+     949              :         auto
+     950              :         operator()(_Tp&& __t, _Up&& __u) const
+     951              :         noexcept(noexcept(std::forward<_Tp>(__t) | std::forward<_Up>(__u)))
+     952              :         -> decltype(std::forward<_Tp>(__t) | std::forward<_Up>(__u))
+     953              :         { return std::forward<_Tp>(__t) | std::forward<_Up>(__u); }
+     954              : 
+     955              :       typedef __is_transparent is_transparent;
+     956              :     };
+     957              : 
+     958              :   template <>
+     959              :     struct bit_xor<void>
+     960              :     {
+     961              :       template <typename _Tp, typename _Up>
+     962              :         _GLIBCXX14_CONSTEXPR
+     963              :         auto
+     964              :         operator()(_Tp&& __t, _Up&& __u) const
+     965              :         noexcept(noexcept(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u)))
+     966              :         -> decltype(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u))
+     967              :         { return std::forward<_Tp>(__t) ^ std::forward<_Up>(__u); }
+     968              : 
+     969              :       typedef __is_transparent is_transparent;
+     970              :     };
+     971              : 
+     972              :   template <>
+     973              :     struct bit_not<void>
+     974              :     {
+     975              :       template <typename _Tp>
+     976              :         _GLIBCXX14_CONSTEXPR
+     977              :         auto
+     978              :         operator()(_Tp&& __t) const
+     979              :         noexcept(noexcept(~std::forward<_Tp>(__t)))
+     980              :         -> decltype(~std::forward<_Tp>(__t))
+     981              :         { return ~std::forward<_Tp>(__t); }
+     982              : 
+     983              :       typedef __is_transparent is_transparent;
+     984              :     };
+     985              : #endif // C++14
+     986              : 
+     987              : #pragma GCC diagnostic push
+     988              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+     989              : 
+     990              :   // 20.3.5 negators
+     991              :   /** @defgroup negators Negators
+     992              :    *  @ingroup functors
+     993              :    *
+     994              :    *  The function templates `not1` and `not2` are function object adaptors,
+     995              :    *  which each take a predicate functor and wrap it in an instance of
+     996              :    *  `unary_negate` or `binary_negate`, respectively.  Those classes are
+     997              :    *  functors whose `operator()` evaluates the wrapped predicate function
+     998              :    *  and then returns the negation of the result.
+     999              :    *
+    1000              :    *  For example, given a vector of integers and a trivial predicate,
+    1001              :    *  \code
+    1002              :    *  struct IntGreaterThanThree
+    1003              :    *    : public std::unary_function<int, bool>
+    1004              :    *  {
+    1005              :    *      bool operator() (int x) const { return x > 3; }
+    1006              :    *  };
+    1007              :    *
+    1008              :    *  std::find_if (v.begin(), v.end(), not1(IntGreaterThanThree()));
+    1009              :    *  \endcode
+    1010              :    *  The call to `find_if` will locate the first index (i) of `v` for which
+    1011              :    *  `!(v[i] > 3)` is true.
+    1012              :    *
+    1013              :    *  The not1/unary_negate combination works on predicates taking a single
+    1014              :    *  argument.  The not2/binary_negate combination works on predicates taking
+    1015              :    *  two arguments.
+    1016              :    *
+    1017              :    *  @deprecated Deprecated in C++17, no longer in the standard since C++20.
+    1018              :    *  Use `not_fn` instead.
+    1019              :    *
+    1020              :    *  @{
+    1021              :    */
+    1022              :   /// One of the @link negators negation functors@endlink.
+    1023              :   template<typename _Predicate>
+    1024              :     class _GLIBCXX17_DEPRECATED unary_negate
+    1025              :     : public unary_function<typename _Predicate::argument_type, bool>
+    1026              :     {
+    1027              :     protected:
+    1028              :       _Predicate _M_pred;
+    1029              : 
+    1030              :     public:
+    1031              :       _GLIBCXX14_CONSTEXPR
+    1032              :       explicit
+    1033              :       unary_negate(const _Predicate& __x) : _M_pred(__x) { }
+    1034              : 
+    1035              :       _GLIBCXX14_CONSTEXPR
+    1036              :       bool
+    1037              :       operator()(const typename _Predicate::argument_type& __x) const
+    1038              :       { return !_M_pred(__x); }
+    1039              :     };
+    1040              : 
+    1041              :   /// One of the @link negators negation functors@endlink.
+    1042              :   template<typename _Predicate>
+    1043              :     _GLIBCXX17_DEPRECATED_SUGGEST("std::not_fn")
+    1044              :     _GLIBCXX14_CONSTEXPR
+    1045              :     inline unary_negate<_Predicate>
+    1046              :     not1(const _Predicate& __pred)
+    1047              :     { return unary_negate<_Predicate>(__pred); }
+    1048              : 
+    1049              :   /// One of the @link negators negation functors@endlink.
+    1050              :   template<typename _Predicate>
+    1051              :     class _GLIBCXX17_DEPRECATED binary_negate
+    1052              :     : public binary_function<typename _Predicate::first_argument_type,
+    1053              :                              typename _Predicate::second_argument_type, bool>
+    1054              :     {
+    1055              :     protected:
+    1056              :       _Predicate _M_pred;
+    1057              : 
+    1058              :     public:
+    1059              :       _GLIBCXX14_CONSTEXPR
+    1060              :       explicit
+    1061              :       binary_negate(const _Predicate& __x) : _M_pred(__x) { }
+    1062              : 
+    1063              :       _GLIBCXX14_CONSTEXPR
+    1064              :       bool
+    1065              :       operator()(const typename _Predicate::first_argument_type& __x,
+    1066              :                  const typename _Predicate::second_argument_type& __y) const
+    1067              :       { return !_M_pred(__x, __y); }
+    1068              :     };
+    1069              : 
+    1070              :   /// One of the @link negators negation functors@endlink.
+    1071              :   template<typename _Predicate>
+    1072              :     _GLIBCXX17_DEPRECATED_SUGGEST("std::not_fn")
+    1073              :     _GLIBCXX14_CONSTEXPR
+    1074              :     inline binary_negate<_Predicate>
+    1075              :     not2(const _Predicate& __pred)
+    1076              :     { return binary_negate<_Predicate>(__pred); }
+    1077              :   /** @}  */
+    1078              : 
+    1079              :   // 20.3.7 adaptors pointers functions
+    1080              :   /** @defgroup pointer_adaptors Adaptors for pointers to functions
+    1081              :    *  @ingroup functors
+    1082              :    *
+    1083              :    *  The advantage of function objects over pointers to functions is that
+    1084              :    *  the objects in the standard library declare nested typedefs describing
+    1085              :    *  their argument and result types with uniform names (e.g., `result_type`
+    1086              :    *  from the base classes `unary_function` and `binary_function`).
+    1087              :    *  Sometimes those typedefs are required, not just optional.
+    1088              :    *
+    1089              :    *  Adaptors are provided to turn pointers to unary (single-argument) and
+    1090              :    *  binary (double-argument) functions into function objects.  The
+    1091              :    *  long-winded functor `pointer_to_unary_function` is constructed with a
+    1092              :    *  function pointer `f`, and its `operator()` called with argument `x`
+    1093              :    *  returns `f(x)`.  The functor `pointer_to_binary_function` does the same
+    1094              :    *  thing, but with a double-argument `f` and `operator()`.
+    1095              :    *
+    1096              :    *  The function `ptr_fun` takes a pointer-to-function `f` and constructs
+    1097              :    *  an instance of the appropriate functor.
+    1098              :    *
+    1099              :    *  @deprecated Deprecated in C++11, no longer in the standard since C++17.
+    1100              :    *
+    1101              :    *  @{
+    1102              :    */
+    1103              :   /// One of the @link pointer_adaptors adaptors for function pointers@endlink.
+    1104              :   template<typename _Arg, typename _Result>
+    1105              :     class pointer_to_unary_function : public unary_function<_Arg, _Result>
+    1106              :     {
+    1107              :     protected:
+    1108              :       _Result (*_M_ptr)(_Arg);
+    1109              : 
+    1110              :     public:
+    1111              :       pointer_to_unary_function() { }
+    1112              : 
+    1113              :       explicit
+    1114              :       pointer_to_unary_function(_Result (*__x)(_Arg))
+    1115              :       : _M_ptr(__x) { }
+    1116              : 
+    1117              :       _Result
+    1118              :       operator()(_Arg __x) const
+    1119              :       { return _M_ptr(__x); }
+    1120              :     } _GLIBCXX11_DEPRECATED;
+    1121              : 
+    1122              :   /// One of the @link pointer_adaptors adaptors for function pointers@endlink.
+    1123              :   template<typename _Arg, typename _Result>
+    1124              :     _GLIBCXX11_DEPRECATED_SUGGEST("std::function")
+    1125              :     inline pointer_to_unary_function<_Arg, _Result>
+    1126              :     ptr_fun(_Result (*__x)(_Arg))
+    1127              :     { return pointer_to_unary_function<_Arg, _Result>(__x); }
+    1128              : 
+    1129              :   /// One of the @link pointer_adaptors adaptors for function pointers@endlink.
+    1130              :   template<typename _Arg1, typename _Arg2, typename _Result>
+    1131              :     class pointer_to_binary_function
+    1132              :     : public binary_function<_Arg1, _Arg2, _Result>
+    1133              :     {
+    1134              :     protected:
+    1135              :       _Result (*_M_ptr)(_Arg1, _Arg2);
+    1136              : 
+    1137              :     public:
+    1138              :       pointer_to_binary_function() { }
+    1139              : 
+    1140              :       explicit
+    1141              :       pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2))
+    1142              :       : _M_ptr(__x) { }
+    1143              : 
+    1144              :       _Result
+    1145              :       operator()(_Arg1 __x, _Arg2 __y) const
+    1146              :       { return _M_ptr(__x, __y); }
+    1147              :     } _GLIBCXX11_DEPRECATED;
+    1148              : 
+    1149              :   /// One of the @link pointer_adaptors adaptors for function pointers@endlink.
+    1150              :   template<typename _Arg1, typename _Arg2, typename _Result>
+    1151              :     _GLIBCXX11_DEPRECATED_SUGGEST("std::function")
+    1152              :     inline pointer_to_binary_function<_Arg1, _Arg2, _Result>
+    1153              :     ptr_fun(_Result (*__x)(_Arg1, _Arg2))
+    1154              :     { return pointer_to_binary_function<_Arg1, _Arg2, _Result>(__x); }
+    1155              :   /** @}  */
+    1156              : 
+    1157              :   template<typename _Tp>
+    1158              :     struct _Identity
+    1159              :     : public unary_function<_Tp, _Tp>
+    1160              :     {
+    1161              :       _Tp&
+    1162              :       operator()(_Tp& __x) const
+    1163              :       { return __x; }
+    1164              : 
+    1165              :       const _Tp&
+    1166              :       operator()(const _Tp& __x) const
+    1167              :       { return __x; }
+    1168              :     };
+    1169              : 
+    1170              :   // Partial specialization, avoids confusing errors in e.g. std::set<const T>.
+    1171              :   template<typename _Tp> struct _Identity<const _Tp> : _Identity<_Tp> { };
+    1172              : 
+    1173              :   template<typename _Pair>
+    1174              :     struct _Select1st
+    1175              :     : public unary_function<_Pair, typename _Pair::first_type>
+    1176              :     {
+    1177              :       typename _Pair::first_type&
+    1178              :       operator()(_Pair& __x) const
+    1179              :       { return __x.first; }
+    1180              : 
+    1181              :       const typename _Pair::first_type&
+    1182    672342974 :       operator()(const _Pair& __x) const
+    1183    672342974 :       { return __x.first; }
+    1184              : 
+    1185              : #if __cplusplus >= 201103L
+    1186              :       template<typename _Pair2>
+    1187              :         typename _Pair2::first_type&
+    1188              :         operator()(_Pair2& __x) const
+    1189              :         { return __x.first; }
+    1190              : 
+    1191              :       template<typename _Pair2>
+    1192              :         const typename _Pair2::first_type&
+    1193              :         operator()(const _Pair2& __x) const
+    1194              :         { return __x.first; }
+    1195              : #endif
+    1196              :     };
+    1197              : 
+    1198              :   template<typename _Pair>
+    1199              :     struct _Select2nd
+    1200              :     : public unary_function<_Pair, typename _Pair::second_type>
+    1201              :     {
+    1202              :       typename _Pair::second_type&
+    1203              :       operator()(_Pair& __x) const
+    1204              :       { return __x.second; }
+    1205              : 
+    1206              :       const typename _Pair::second_type&
+    1207              :       operator()(const _Pair& __x) const
+    1208              :       { return __x.second; }
+    1209              :     };
+    1210              : 
+    1211              :   // 20.3.8 adaptors pointers members
+    1212              :   /** @defgroup ptrmem_adaptors Adaptors for pointers to members
+    1213              :    *  @ingroup functors
+    1214              :    *
+    1215              :    *  There are a total of 8 = 2^3 function objects in this family.
+    1216              :    *   (1) Member functions taking no arguments vs member functions taking
+    1217              :    *        one argument.
+    1218              :    *   (2) Call through pointer vs call through reference.
+    1219              :    *   (3) Const vs non-const member function.
+    1220              :    *
+    1221              :    *  All of this complexity is in the function objects themselves.  You can
+    1222              :    *   ignore it by using the helper function `mem_fun` and `mem_fun_ref`,
+    1223              :    *   which create whichever type of adaptor is appropriate.
+    1224              :    *
+    1225              :    *  @deprecated Deprecated in C++11, no longer in the standard since C++17.
+    1226              :    *  Use `mem_fn` instead.
+    1227              :    *
+    1228              :    *  @{
+    1229              :    */
+    1230              :   /// One of the @link ptrmem_adaptors adaptors for member pointers@endlink.
+    1231              :   template<typename _Ret, typename _Tp>
+    1232              :     class mem_fun_t : public unary_function<_Tp*, _Ret>
+    1233              :     {
+    1234              :     public:
+    1235              :       explicit
+    1236              :       mem_fun_t(_Ret (_Tp::*__pf)())
+    1237              :       : _M_f(__pf) { }
+    1238              : 
+    1239              :       _Ret
+    1240              :       operator()(_Tp* __p) const
+    1241              :       { return (__p->*_M_f)(); }
+    1242              : 
+    1243              :     private:
+    1244              :       _Ret (_Tp::*_M_f)();
+    1245              :     } _GLIBCXX11_DEPRECATED;
+    1246              : 
+    1247              :   /// One of the @link ptrmem_adaptors adaptors for member pointers@endlink.
+    1248              :   template<typename _Ret, typename _Tp>
+    1249              :     class const_mem_fun_t : public unary_function<const _Tp*, _Ret>
+    1250              :     {
+    1251              :     public:
+    1252              :       explicit
+    1253              :       const_mem_fun_t(_Ret (_Tp::*__pf)() const)
+    1254              :       : _M_f(__pf) { }
+    1255              : 
+    1256              :       _Ret
+    1257              :       operator()(const _Tp* __p) const
+    1258              :       { return (__p->*_M_f)(); }
+    1259              : 
+    1260              :     private:
+    1261              :       _Ret (_Tp::*_M_f)() const;
+    1262              :     } _GLIBCXX11_DEPRECATED;
+    1263              : 
+    1264              :   /// One of the @link ptrmem_adaptors adaptors for member pointers@endlink.
+    1265              :   template<typename _Ret, typename _Tp>
+    1266              :     class mem_fun_ref_t : public unary_function<_Tp, _Ret>
+    1267              :     {
+    1268              :     public:
+    1269              :       explicit
+    1270              :       mem_fun_ref_t(_Ret (_Tp::*__pf)())
+    1271              :       : _M_f(__pf) { }
+    1272              : 
+    1273              :       _Ret
+    1274              :       operator()(_Tp& __r) const
+    1275              :       { return (__r.*_M_f)(); }
+    1276              : 
+    1277              :     private:
+    1278              :       _Ret (_Tp::*_M_f)();
+    1279              :     } _GLIBCXX11_DEPRECATED;
+    1280              : 
+    1281              :   /// One of the @link ptrmem_adaptors adaptors for member pointers@endlink.
+    1282              :   template<typename _Ret, typename _Tp>
+    1283              :     class const_mem_fun_ref_t : public unary_function<_Tp, _Ret>
+    1284              :     {
+    1285              :     public:
+    1286              :       explicit
+    1287              :       const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const)
+    1288              :       : _M_f(__pf) { }
+    1289              : 
+    1290              :       _Ret
+    1291              :       operator()(const _Tp& __r) const
+    1292              :       { return (__r.*_M_f)(); }
+    1293              : 
+    1294              :     private:
+    1295              :       _Ret (_Tp::*_M_f)() const;
+    1296              :     } _GLIBCXX11_DEPRECATED;
+    1297              : 
+    1298              :   /// One of the @link ptrmem_adaptors adaptors for member pointers@endlink.
+    1299              :   template<typename _Ret, typename _Tp, typename _Arg>
+    1300              :     class mem_fun1_t : public binary_function<_Tp*, _Arg, _Ret>
+    1301              :     {
+    1302              :     public:
+    1303              :       explicit
+    1304              :       mem_fun1_t(_Ret (_Tp::*__pf)(_Arg))
+    1305              :       : _M_f(__pf) { }
+    1306              : 
+    1307              :       _Ret
+    1308              :       operator()(_Tp* __p, _Arg __x) const
+    1309              :       { return (__p->*_M_f)(__x); }
+    1310              : 
+    1311              :     private:
+    1312              :       _Ret (_Tp::*_M_f)(_Arg);
+    1313              :     } _GLIBCXX11_DEPRECATED;
+    1314              : 
+    1315              :   /// One of the @link ptrmem_adaptors adaptors for member pointers@endlink.
+    1316              :   template<typename _Ret, typename _Tp, typename _Arg>
+    1317              :     class const_mem_fun1_t : public binary_function<const _Tp*, _Arg, _Ret>
+    1318              :     {
+    1319              :     public:
+    1320              :       explicit
+    1321              :       const_mem_fun1_t(_Ret (_Tp::*__pf)(_Arg) const)
+    1322              :       : _M_f(__pf) { }
+    1323              : 
+    1324              :       _Ret
+    1325              :       operator()(const _Tp* __p, _Arg __x) const
+    1326              :       { return (__p->*_M_f)(__x); }
+    1327              : 
+    1328              :     private:
+    1329              :       _Ret (_Tp::*_M_f)(_Arg) const;
+    1330              :     } _GLIBCXX11_DEPRECATED;
+    1331              : 
+    1332              :   /// One of the @link ptrmem_adaptors adaptors for member pointers@endlink.
+    1333              :   template<typename _Ret, typename _Tp, typename _Arg>
+    1334              :     class mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret>
+    1335              :     {
+    1336              :     public:
+    1337              :       explicit
+    1338              :       mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg))
+    1339              :       : _M_f(__pf) { }
+    1340              : 
+    1341              :       _Ret
+    1342              :       operator()(_Tp& __r, _Arg __x) const
+    1343              :       { return (__r.*_M_f)(__x); }
+    1344              : 
+    1345              :     private:
+    1346              :       _Ret (_Tp::*_M_f)(_Arg);
+    1347              :     } _GLIBCXX11_DEPRECATED;
+    1348              : 
+    1349              :   /// One of the @link ptrmem_adaptors adaptors for member pointers@endlink.
+    1350              :   template<typename _Ret, typename _Tp, typename _Arg>
+    1351              :     class const_mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret>
+    1352              :     {
+    1353              :     public:
+    1354              :       explicit
+    1355              :       const_mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg) const)
+    1356              :       : _M_f(__pf) { }
+    1357              : 
+    1358              :       _Ret
+    1359              :       operator()(const _Tp& __r, _Arg __x) const
+    1360              :       { return (__r.*_M_f)(__x); }
+    1361              : 
+    1362              :     private:
+    1363              :       _Ret (_Tp::*_M_f)(_Arg) const;
+    1364              :     } _GLIBCXX11_DEPRECATED;
+    1365              : 
+    1366              :   // Mem_fun adaptor helper functions.  There are only two:
+    1367              :   // mem_fun and mem_fun_ref.
+    1368              :   template<typename _Ret, typename _Tp>
+    1369              :     _GLIBCXX11_DEPRECATED_SUGGEST("std::mem_fn")
+    1370              :     inline mem_fun_t<_Ret, _Tp>
+    1371              :     mem_fun(_Ret (_Tp::*__f)())
+    1372              :     { return mem_fun_t<_Ret, _Tp>(__f); }
+    1373              : 
+    1374              :   template<typename _Ret, typename _Tp>
+    1375              :     _GLIBCXX11_DEPRECATED_SUGGEST("std::mem_fn")
+    1376              :     inline const_mem_fun_t<_Ret, _Tp>
+    1377              :     mem_fun(_Ret (_Tp::*__f)() const)
+    1378              :     { return const_mem_fun_t<_Ret, _Tp>(__f); }
+    1379              : 
+    1380              :   template<typename _Ret, typename _Tp>
+    1381              :     _GLIBCXX11_DEPRECATED_SUGGEST("std::mem_fn")
+    1382              :     inline mem_fun_ref_t<_Ret, _Tp>
+    1383              :     mem_fun_ref(_Ret (_Tp::*__f)())
+    1384              :     { return mem_fun_ref_t<_Ret, _Tp>(__f); }
+    1385              : 
+    1386              :   template<typename _Ret, typename _Tp>
+    1387              :     _GLIBCXX11_DEPRECATED_SUGGEST("std::mem_fn")
+    1388              :     inline const_mem_fun_ref_t<_Ret, _Tp>
+    1389              :     mem_fun_ref(_Ret (_Tp::*__f)() const)
+    1390              :     { return const_mem_fun_ref_t<_Ret, _Tp>(__f); }
+    1391              : 
+    1392              :   template<typename _Ret, typename _Tp, typename _Arg>
+    1393              :     _GLIBCXX11_DEPRECATED_SUGGEST("std::mem_fn")
+    1394              :     inline mem_fun1_t<_Ret, _Tp, _Arg>
+    1395              :     mem_fun(_Ret (_Tp::*__f)(_Arg))
+    1396              :     { return mem_fun1_t<_Ret, _Tp, _Arg>(__f); }
+    1397              : 
+    1398              :   template<typename _Ret, typename _Tp, typename _Arg>
+    1399              :     _GLIBCXX11_DEPRECATED_SUGGEST("std::mem_fn")
+    1400              :     inline const_mem_fun1_t<_Ret, _Tp, _Arg>
+    1401              :     mem_fun(_Ret (_Tp::*__f)(_Arg) const)
+    1402              :     { return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); }
+    1403              : 
+    1404              :   template<typename _Ret, typename _Tp, typename _Arg>
+    1405              :     _GLIBCXX11_DEPRECATED_SUGGEST("std::mem_fn")
+    1406              :     inline mem_fun1_ref_t<_Ret, _Tp, _Arg>
+    1407              :     mem_fun_ref(_Ret (_Tp::*__f)(_Arg))
+    1408              :     { return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
+    1409              : 
+    1410              :   template<typename _Ret, typename _Tp, typename _Arg>
+    1411              :     _GLIBCXX11_DEPRECATED_SUGGEST("std::mem_fn")
+    1412              :     inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg>
+    1413              :     mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const)
+    1414              :     { return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
+    1415              : #pragma GCC diagnostic pop
+    1416              : 
+    1417              :   /** @}  */
+    1418              : 
+    1419              : #if __cplusplus >= 201402L
+    1420              :   template<typename _Func, typename _SfinaeType, typename = __void_t<>>
+    1421              :     struct __has_is_transparent
+    1422              :     { };
+    1423              : 
+    1424              :   template<typename _Func, typename _SfinaeType>
+    1425              :     struct __has_is_transparent<_Func, _SfinaeType,
+    1426              :                                 __void_t<typename _Func::is_transparent>>
+    1427              :     { typedef void type; };
+    1428              : 
+    1429              :   template<typename _Func, typename _SfinaeType>
+    1430              :     using __has_is_transparent_t
+    1431              :       = typename __has_is_transparent<_Func, _SfinaeType>::type;
+    1432              : #endif
+    1433              : 
+    1434              : _GLIBCXX_END_NAMESPACE_VERSION
+    1435              : } // namespace
+    1436              : 
+    1437              : #if (__cplusplus < 201103L) || _GLIBCXX_USE_DEPRECATED
+    1438              : # include <backward/binders.h>
+    1439              : #endif
+    1440              : 
+    1441              : #endif /* _STL_FUNCTION_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_heap.h.func-c.html b/html/usr/include/c++/13/bits/stl_heap.h.func-c.html new file mode 100644 index 0000000..8bb075f --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_heap.h.func-c.html @@ -0,0 +1,355 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_heap.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_heap.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %480
Test Date:2024-04-30 13:17:26Functions:0.0 %350
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_S9_RT0_0
_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_SH_RSK_0
_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_S9_RT0_0
_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_SC_RT0_0
_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_SC_RT0_0
_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_SH_RT0_0
_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_SH_RT0_0
_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_SF_RT0_0
_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_RT0_0
_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_RSK_0
_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_RT0_0
_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_RT0_0
_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_RT0_0
_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_RT0_0
_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_RT0_0
_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_RT0_0
_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEElcNS0_5__ops14_Iter_less_valEEvT_T0_SA_T1_RT2_0
_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEElS3_NS0_5__ops14_Iter_comp_valIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SK_SK_T1_RT2_0
_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEElcNS0_5__ops14_Iter_less_valEEvT_T0_SA_T1_RT2_0
_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEldNS0_5__ops14_Iter_comp_valISt4lessIdEEEEvT_T0_SD_T1_RT2_0
_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEldNS0_5__ops14_Iter_comp_valISt7greaterIdEEEEvT_T0_SD_T1_RT2_0
_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEliNS0_5__ops14_Iter_comp_valIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_T0_SI_T1_RT2_0
_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEliNS0_5__ops14_Iter_comp_valIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_T0_SI_T1_RT2_0
_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEliNS0_5__ops14_Iter_comp_valIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_T0_SG_T1_RT2_0
_ZSt11__sort_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_RT0_0
_ZSt11__sort_heapIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_RSK_0
_ZSt11__sort_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_RT0_0
_ZSt11__sort_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_RT0_0
_ZSt11__sort_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_RT0_0
_ZSt11__sort_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_RT0_0
_ZSt11__sort_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_RT0_0
_ZSt11__sort_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_RT0_0
_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEElcNS0_5__ops15_Iter_less_iterEEvT_T0_SA_T1_T2_0
_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEElS3_NS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SK_SK_T1_T2_0
_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEElcNS0_5__ops15_Iter_less_iterEEvT_T0_SA_T1_T2_0
_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEldNS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_T0_SD_T1_T2_0
_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEldNS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_T0_SD_T1_T2_0
_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEliNS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_T0_SI_T1_T2_0
_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEliNS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_T0_SI_T1_T2_0
_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEliNS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_T0_SG_T1_T2_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_heap.h.func.html b/html/usr/include/c++/13/bits/stl_heap.h.func.html new file mode 100644 index 0000000..1bc632e --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_heap.h.func.html @@ -0,0 +1,355 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_heap.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_heap.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %480
Test Date:2024-04-30 13:17:26Functions:0.0 %350
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_S9_RT0_0
_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_SH_RSK_0
_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_S9_RT0_0
_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_SC_RT0_0
_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_SC_RT0_0
_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_SH_RT0_0
_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_SH_RT0_0
_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_SF_RT0_0
_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_RT0_0
_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_RSK_0
_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_RT0_0
_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_RT0_0
_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_RT0_0
_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_RT0_0
_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_RT0_0
_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_RT0_0
_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEElcNS0_5__ops14_Iter_less_valEEvT_T0_SA_T1_RT2_0
_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEElS3_NS0_5__ops14_Iter_comp_valIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SK_SK_T1_RT2_0
_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEElcNS0_5__ops14_Iter_less_valEEvT_T0_SA_T1_RT2_0
_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEldNS0_5__ops14_Iter_comp_valISt4lessIdEEEEvT_T0_SD_T1_RT2_0
_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEldNS0_5__ops14_Iter_comp_valISt7greaterIdEEEEvT_T0_SD_T1_RT2_0
_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEliNS0_5__ops14_Iter_comp_valIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_T0_SI_T1_RT2_0
_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEliNS0_5__ops14_Iter_comp_valIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_T0_SI_T1_RT2_0
_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEliNS0_5__ops14_Iter_comp_valIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_T0_SG_T1_RT2_0
_ZSt11__sort_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_RT0_0
_ZSt11__sort_heapIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SH_RSK_0
_ZSt11__sort_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEENS0_5__ops15_Iter_less_iterEEvT_S9_RT0_0
_ZSt11__sort_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_SC_RT0_0
_ZSt11__sort_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEENS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_SC_RT0_0
_ZSt11__sort_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_SH_RT0_0
_ZSt11__sort_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_SH_RT0_0
_ZSt11__sort_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEENS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_SF_RT0_0
_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEElcNS0_5__ops15_Iter_less_iterEEvT_T0_SA_T1_T2_0
_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS3_SaIS3_EEEElS3_NS0_5__ops15_Iter_comp_iterIZN8bayesnet3TAN10buildModelERKN2at6TensorEEUlRKT_RKT0_E_EEEvSH_SK_SK_T1_T2_0
_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEElcNS0_5__ops15_Iter_less_iterEEvT_T0_SA_T1_T2_0
_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEldNS0_5__ops15_Iter_comp_iterISt4lessIdEEEEvT_T0_SD_T1_T2_0
_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEldNS0_5__ops15_Iter_comp_iterISt7greaterIdEEEEvT_T0_SD_T1_T2_0
_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEliNS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE0_EEEvT_T0_SI_T1_T2_0
_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEliNS0_5__ops15_Iter_comp_iterIZN8bayesnet7Metrics19SelectKBestWeightedERKN2at6TensorEbjEUliiE_EEEvT_T0_SI_T1_T2_0
_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEliNS0_5__ops15_Iter_comp_iterIZN8bayesnet7argsortERS3_IdSaIdEEEUliiE_EEEvT_T0_SG_T1_T2_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_heap.h.gcov.html b/html/usr/include/c++/13/bits/stl_heap.h.gcov.html new file mode 100644 index 0000000..77afd09 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_heap.h.gcov.html @@ -0,0 +1,660 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_heap.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_heap.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %480
Test Date:2024-04-30 13:17:26Functions:0.0 %350
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Heap implementation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  * Copyright (c) 1997
+      39              :  * Silicon Graphics Computer Systems, Inc.
+      40              :  *
+      41              :  * Permission to use, copy, modify, distribute and sell this software
+      42              :  * and its documentation for any purpose is hereby granted without fee,
+      43              :  * provided that the above copyright notice appear in all copies and
+      44              :  * that both that copyright notice and this permission notice appear
+      45              :  * in supporting documentation.  Silicon Graphics makes no
+      46              :  * representations about the suitability of this software for any
+      47              :  * purpose.  It is provided "as is" without express or implied warranty.
+      48              :  */
+      49              : 
+      50              : /** @file bits/stl_heap.h
+      51              :  *  This is an internal header file, included by other library headers.
+      52              :  *  Do not attempt to use it directly. @headername{queue}
+      53              :  */
+      54              : 
+      55              : #ifndef _STL_HEAP_H
+      56              : #define _STL_HEAP_H 1
+      57              : 
+      58              : #include <debug/debug.h>
+      59              : #include <bits/move.h>
+      60              : #include <bits/predefined_ops.h>
+      61              : #include <bits/stl_iterator_base_funcs.h>
+      62              : 
+      63              : namespace std _GLIBCXX_VISIBILITY(default)
+      64              : {
+      65              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      66              : 
+      67              :   /**
+      68              :    * @defgroup heap_algorithms Heap
+      69              :    * @ingroup sorting_algorithms
+      70              :    */
+      71              : 
+      72              :   template<typename _RandomAccessIterator, typename _Distance,
+      73              :            typename _Compare>
+      74              :     _GLIBCXX20_CONSTEXPR
+      75              :     _Distance
+      76              :     __is_heap_until(_RandomAccessIterator __first, _Distance __n,
+      77              :                     _Compare& __comp)
+      78              :     {
+      79              :       _Distance __parent = 0;
+      80              :       for (_Distance __child = 1; __child < __n; ++__child)
+      81              :         {
+      82              :           if (__comp(__first + __parent, __first + __child))
+      83              :             return __child;
+      84              :           if ((__child & 1) == 0)
+      85              :             ++__parent;
+      86              :         }
+      87              :       return __n;
+      88              :     }
+      89              : 
+      90              :   // __is_heap, a predicate testing whether or not a range is a heap.
+      91              :   // This function is an extension, not part of the C++ standard.
+      92              :   template<typename _RandomAccessIterator, typename _Distance>
+      93              :     _GLIBCXX20_CONSTEXPR
+      94              :     inline bool
+      95              :     __is_heap(_RandomAccessIterator __first, _Distance __n)
+      96              :     {
+      97              :       __gnu_cxx::__ops::_Iter_less_iter __comp;
+      98              :       return std::__is_heap_until(__first, __n, __comp) == __n;
+      99              :     }
+     100              : 
+     101              :   template<typename _RandomAccessIterator, typename _Compare,
+     102              :            typename _Distance>
+     103              :     _GLIBCXX20_CONSTEXPR
+     104              :     inline bool
+     105              :     __is_heap(_RandomAccessIterator __first, _Compare __comp, _Distance __n)
+     106              :     {
+     107              :       typedef __decltype(__comp) _Cmp;
+     108              :       __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(_GLIBCXX_MOVE(__comp));
+     109              :       return std::__is_heap_until(__first, __n, __cmp) == __n;
+     110              :     }
+     111              : 
+     112              :   template<typename _RandomAccessIterator>
+     113              :     _GLIBCXX20_CONSTEXPR
+     114              :     inline bool
+     115              :     __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
+     116              :     { return std::__is_heap(__first, std::distance(__first, __last)); }
+     117              : 
+     118              :   template<typename _RandomAccessIterator, typename _Compare>
+     119              :     _GLIBCXX20_CONSTEXPR
+     120              :     inline bool
+     121              :     __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+     122              :               _Compare __comp)
+     123              :     {
+     124              :       return std::__is_heap(__first, _GLIBCXX_MOVE(__comp),
+     125              :                             std::distance(__first, __last));
+     126              :     }
+     127              : 
+     128              :   // Heap-manipulation functions: push_heap, pop_heap, make_heap, sort_heap,
+     129              :   // + is_heap and is_heap_until in C++0x.
+     130              : 
+     131              :   template<typename _RandomAccessIterator, typename _Distance, typename _Tp,
+     132              :            typename _Compare>
+     133              :     _GLIBCXX20_CONSTEXPR
+     134              :     void
+     135            0 :     __push_heap(_RandomAccessIterator __first,
+     136              :                 _Distance __holeIndex, _Distance __topIndex, _Tp __value,
+     137              :                 _Compare& __comp)
+     138              :     {
+     139            0 :       _Distance __parent = (__holeIndex - 1) / 2;
+     140            0 :       while (__holeIndex > __topIndex && __comp(__first + __parent, __value))
+     141              :         {
+     142            0 :           *(__first + __holeIndex) = _GLIBCXX_MOVE(*(__first + __parent));
+     143            0 :           __holeIndex = __parent;
+     144            0 :           __parent = (__holeIndex - 1) / 2;
+     145              :         }
+     146            0 :       *(__first + __holeIndex) = _GLIBCXX_MOVE(__value);
+     147            0 :     }
+     148              : 
+     149              :   /**
+     150              :    *  @brief  Push an element onto a heap.
+     151              :    *  @param  __first  Start of heap.
+     152              :    *  @param  __last   End of heap + element.
+     153              :    *  @ingroup heap_algorithms
+     154              :    *
+     155              :    *  This operation pushes the element at last-1 onto the valid heap
+     156              :    *  over the range [__first,__last-1).  After completion,
+     157              :    *  [__first,__last) is a valid heap.
+     158              :   */
+     159              :   template<typename _RandomAccessIterator>
+     160              :     _GLIBCXX20_CONSTEXPR
+     161              :     inline void
+     162              :     push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
+     163              :     {
+     164              :       typedef typename iterator_traits<_RandomAccessIterator>::value_type
+     165              :           _ValueType;
+     166              :       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+     167              :           _DistanceType;
+     168              : 
+     169              :       // concept requirements
+     170              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+     171              :             _RandomAccessIterator>)
+     172              :       __glibcxx_function_requires(_LessThanComparableConcept<_ValueType>)
+     173              :       __glibcxx_requires_valid_range(__first, __last);
+     174              :       __glibcxx_requires_irreflexive(__first, __last);
+     175              :       __glibcxx_requires_heap(__first, __last - 1);
+     176              : 
+     177              :       __gnu_cxx::__ops::_Iter_less_val __comp;
+     178              :       _ValueType __value = _GLIBCXX_MOVE(*(__last - 1));
+     179              :       std::__push_heap(__first, _DistanceType((__last - __first) - 1),
+     180              :                        _DistanceType(0), _GLIBCXX_MOVE(__value), __comp);
+     181              :     }
+     182              : 
+     183              :   /**
+     184              :    *  @brief  Push an element onto a heap using comparison functor.
+     185              :    *  @param  __first  Start of heap.
+     186              :    *  @param  __last   End of heap + element.
+     187              :    *  @param  __comp   Comparison functor.
+     188              :    *  @ingroup heap_algorithms
+     189              :    *
+     190              :    *  This operation pushes the element at __last-1 onto the valid
+     191              :    *  heap over the range [__first,__last-1).  After completion,
+     192              :    *  [__first,__last) is a valid heap.  Compare operations are
+     193              :    *  performed using comp.
+     194              :   */
+     195              :   template<typename _RandomAccessIterator, typename _Compare>
+     196              :     _GLIBCXX20_CONSTEXPR
+     197              :     inline void
+     198              :     push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+     199              :               _Compare __comp)
+     200              :     {
+     201              :       typedef typename iterator_traits<_RandomAccessIterator>::value_type
+     202              :           _ValueType;
+     203              :       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+     204              :           _DistanceType;
+     205              : 
+     206              :       // concept requirements
+     207              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+     208              :             _RandomAccessIterator>)
+     209              :       __glibcxx_requires_valid_range(__first, __last);
+     210              :       __glibcxx_requires_irreflexive_pred(__first, __last, __comp);
+     211              :       __glibcxx_requires_heap_pred(__first, __last - 1, __comp);
+     212              : 
+     213              :       __decltype(__gnu_cxx::__ops::__iter_comp_val(_GLIBCXX_MOVE(__comp)))
+     214              :         __cmp(_GLIBCXX_MOVE(__comp));
+     215              :       _ValueType __value = _GLIBCXX_MOVE(*(__last - 1));
+     216              :       std::__push_heap(__first, _DistanceType((__last - __first) - 1),
+     217              :                        _DistanceType(0), _GLIBCXX_MOVE(__value), __cmp);
+     218              :     }
+     219              : 
+     220              :   template<typename _RandomAccessIterator, typename _Distance,
+     221              :            typename _Tp, typename _Compare>
+     222              :     _GLIBCXX20_CONSTEXPR
+     223              :     void
+     224            0 :     __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
+     225              :                   _Distance __len, _Tp __value, _Compare __comp)
+     226              :     {
+     227            0 :       const _Distance __topIndex = __holeIndex;
+     228            0 :       _Distance __secondChild = __holeIndex;
+     229            0 :       while (__secondChild < (__len - 1) / 2)
+     230              :         {
+     231            0 :           __secondChild = 2 * (__secondChild + 1);
+     232            0 :           if (__comp(__first + __secondChild,
+     233              :                      __first + (__secondChild - 1)))
+     234            0 :             __secondChild--;
+     235            0 :           *(__first + __holeIndex) = _GLIBCXX_MOVE(*(__first + __secondChild));
+     236            0 :           __holeIndex = __secondChild;
+     237              :         }
+     238            0 :       if ((__len & 1) == 0 && __secondChild == (__len - 2) / 2)
+     239              :         {
+     240            0 :           __secondChild = 2 * (__secondChild + 1);
+     241            0 :           *(__first + __holeIndex) = _GLIBCXX_MOVE(*(__first
+     242              :                                                      + (__secondChild - 1)));
+     243            0 :           __holeIndex = __secondChild - 1;
+     244              :         }
+     245              :       __decltype(__gnu_cxx::__ops::__iter_comp_val(_GLIBCXX_MOVE(__comp)))
+     246            0 :         __cmp(_GLIBCXX_MOVE(__comp));
+     247            0 :       std::__push_heap(__first, __holeIndex, __topIndex,
+     248            0 :                        _GLIBCXX_MOVE(__value), __cmp);
+     249            0 :     }
+     250              : 
+     251              :   template<typename _RandomAccessIterator, typename _Compare>
+     252              :     _GLIBCXX20_CONSTEXPR
+     253              :     inline void
+     254            0 :     __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+     255              :                _RandomAccessIterator __result, _Compare& __comp)
+     256              :     {
+     257              :       typedef typename iterator_traits<_RandomAccessIterator>::value_type
+     258              :         _ValueType;
+     259              :       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+     260              :         _DistanceType;
+     261              : 
+     262            0 :       _ValueType __value = _GLIBCXX_MOVE(*__result);
+     263            0 :       *__result = _GLIBCXX_MOVE(*__first);
+     264            0 :       std::__adjust_heap(__first, _DistanceType(0),
+     265            0 :                          _DistanceType(__last - __first),
+     266            0 :                          _GLIBCXX_MOVE(__value), __comp);
+     267            0 :     }
+     268              : 
+     269              :   /**
+     270              :    *  @brief  Pop an element off a heap.
+     271              :    *  @param  __first  Start of heap.
+     272              :    *  @param  __last   End of heap.
+     273              :    *  @pre    [__first, __last) is a valid, non-empty range.
+     274              :    *  @ingroup heap_algorithms
+     275              :    *
+     276              :    *  This operation pops the top of the heap.  The elements __first
+     277              :    *  and __last-1 are swapped and [__first,__last-1) is made into a
+     278              :    *  heap.
+     279              :   */
+     280              :   template<typename _RandomAccessIterator>
+     281              :     _GLIBCXX20_CONSTEXPR
+     282              :     inline void
+     283              :     pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
+     284              :     {
+     285              :       // concept requirements
+     286              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+     287              :             _RandomAccessIterator>)
+     288              :       __glibcxx_function_requires(_LessThanComparableConcept<
+     289              :         typename iterator_traits<_RandomAccessIterator>::value_type>)
+     290              :       __glibcxx_requires_non_empty_range(__first, __last);
+     291              :       __glibcxx_requires_valid_range(__first, __last);
+     292              :       __glibcxx_requires_irreflexive(__first, __last);
+     293              :       __glibcxx_requires_heap(__first, __last);
+     294              : 
+     295              :       if (__last - __first > 1)
+     296              :         {
+     297              :           --__last;
+     298              :           __gnu_cxx::__ops::_Iter_less_iter __comp;
+     299              :           std::__pop_heap(__first, __last, __last, __comp);
+     300              :         }
+     301              :     }
+     302              : 
+     303              :   /**
+     304              :    *  @brief  Pop an element off a heap using comparison functor.
+     305              :    *  @param  __first  Start of heap.
+     306              :    *  @param  __last   End of heap.
+     307              :    *  @param  __comp   Comparison functor to use.
+     308              :    *  @ingroup heap_algorithms
+     309              :    *
+     310              :    *  This operation pops the top of the heap.  The elements __first
+     311              :    *  and __last-1 are swapped and [__first,__last-1) is made into a
+     312              :    *  heap.  Comparisons are made using comp.
+     313              :   */
+     314              :   template<typename _RandomAccessIterator, typename _Compare>
+     315              :     _GLIBCXX20_CONSTEXPR
+     316              :     inline void
+     317              :     pop_heap(_RandomAccessIterator __first,
+     318              :              _RandomAccessIterator __last, _Compare __comp)
+     319              :     {
+     320              :       // concept requirements
+     321              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+     322              :             _RandomAccessIterator>)
+     323              :       __glibcxx_requires_valid_range(__first, __last);
+     324              :       __glibcxx_requires_irreflexive_pred(__first, __last, __comp);
+     325              :       __glibcxx_requires_non_empty_range(__first, __last);
+     326              :       __glibcxx_requires_heap_pred(__first, __last, __comp);
+     327              : 
+     328              :       if (__last - __first > 1)
+     329              :         {
+     330              :           typedef __decltype(__comp) _Cmp;
+     331              :           __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(_GLIBCXX_MOVE(__comp));
+     332              :           --__last;
+     333              :           std::__pop_heap(__first, __last, __last, __cmp);
+     334              :         }
+     335              :     }
+     336              : 
+     337              :   template<typename _RandomAccessIterator, typename _Compare>
+     338              :     _GLIBCXX20_CONSTEXPR
+     339              :     void
+     340            0 :     __make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+     341              :                 _Compare& __comp)
+     342              :     {
+     343              :       typedef typename iterator_traits<_RandomAccessIterator>::value_type
+     344              :           _ValueType;
+     345              :       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+     346              :           _DistanceType;
+     347              : 
+     348            0 :       if (__last - __first < 2)
+     349            0 :         return;
+     350              : 
+     351            0 :       const _DistanceType __len = __last - __first;
+     352            0 :       _DistanceType __parent = (__len - 2) / 2;
+     353            0 :       while (true)
+     354              :         {
+     355            0 :           _ValueType __value = _GLIBCXX_MOVE(*(__first + __parent));
+     356            0 :           std::__adjust_heap(__first, __parent, __len, _GLIBCXX_MOVE(__value),
+     357              :                              __comp);
+     358            0 :           if (__parent == 0)
+     359            0 :             return;
+     360            0 :           __parent--;
+     361              :         }
+     362              :     }
+     363              :   
+     364              :   /**
+     365              :    *  @brief  Construct a heap over a range.
+     366              :    *  @param  __first  Start of heap.
+     367              :    *  @param  __last   End of heap.
+     368              :    *  @ingroup heap_algorithms
+     369              :    *
+     370              :    *  This operation makes the elements in [__first,__last) into a heap.
+     371              :   */
+     372              :   template<typename _RandomAccessIterator>
+     373              :     _GLIBCXX20_CONSTEXPR
+     374              :     inline void
+     375              :     make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
+     376              :     {
+     377              :       // concept requirements
+     378              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+     379              :             _RandomAccessIterator>)
+     380              :       __glibcxx_function_requires(_LessThanComparableConcept<
+     381              :             typename iterator_traits<_RandomAccessIterator>::value_type>)
+     382              :       __glibcxx_requires_valid_range(__first, __last);
+     383              :       __glibcxx_requires_irreflexive(__first, __last);
+     384              : 
+     385              :       __gnu_cxx::__ops::_Iter_less_iter __comp;
+     386              :       std::__make_heap(__first, __last, __comp);
+     387              :     }
+     388              : 
+     389              :   /**
+     390              :    *  @brief  Construct a heap over a range using comparison functor.
+     391              :    *  @param  __first  Start of heap.
+     392              :    *  @param  __last   End of heap.
+     393              :    *  @param  __comp   Comparison functor to use.
+     394              :    *  @ingroup heap_algorithms
+     395              :    *
+     396              :    *  This operation makes the elements in [__first,__last) into a heap.
+     397              :    *  Comparisons are made using __comp.
+     398              :   */
+     399              :   template<typename _RandomAccessIterator, typename _Compare>
+     400              :     _GLIBCXX20_CONSTEXPR
+     401              :     inline void
+     402              :     make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+     403              :               _Compare __comp)
+     404              :     {
+     405              :       // concept requirements
+     406              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+     407              :             _RandomAccessIterator>)
+     408              :       __glibcxx_requires_valid_range(__first, __last);
+     409              :       __glibcxx_requires_irreflexive_pred(__first, __last, __comp);
+     410              : 
+     411              :       typedef __decltype(__comp) _Cmp;
+     412              :       __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(_GLIBCXX_MOVE(__comp));
+     413              :       std::__make_heap(__first, __last, __cmp);
+     414              :     }
+     415              : 
+     416              :   template<typename _RandomAccessIterator, typename _Compare>
+     417              :     _GLIBCXX20_CONSTEXPR
+     418              :     void
+     419            0 :     __sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+     420              :                 _Compare& __comp)
+     421              :     {
+     422            0 :       while (__last - __first > 1)
+     423              :         {
+     424            0 :           --__last;
+     425            0 :           std::__pop_heap(__first, __last, __last, __comp);
+     426              :         }
+     427            0 :     }
+     428              : 
+     429              :   /**
+     430              :    *  @brief  Sort a heap.
+     431              :    *  @param  __first  Start of heap.
+     432              :    *  @param  __last   End of heap.
+     433              :    *  @ingroup heap_algorithms
+     434              :    *
+     435              :    *  This operation sorts the valid heap in the range [__first,__last).
+     436              :   */
+     437              :   template<typename _RandomAccessIterator>
+     438              :     _GLIBCXX20_CONSTEXPR
+     439              :     inline void
+     440              :     sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
+     441              :     {
+     442              :       // concept requirements
+     443              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+     444              :             _RandomAccessIterator>)
+     445              :       __glibcxx_function_requires(_LessThanComparableConcept<
+     446              :             typename iterator_traits<_RandomAccessIterator>::value_type>)
+     447              :       __glibcxx_requires_valid_range(__first, __last);
+     448              :       __glibcxx_requires_irreflexive(__first, __last);
+     449              :       __glibcxx_requires_heap(__first, __last);
+     450              : 
+     451              :       __gnu_cxx::__ops::_Iter_less_iter __comp;
+     452              :       std::__sort_heap(__first, __last, __comp);
+     453              :     }
+     454              : 
+     455              :   /**
+     456              :    *  @brief  Sort a heap using comparison functor.
+     457              :    *  @param  __first  Start of heap.
+     458              :    *  @param  __last   End of heap.
+     459              :    *  @param  __comp   Comparison functor to use.
+     460              :    *  @ingroup heap_algorithms
+     461              :    *
+     462              :    *  This operation sorts the valid heap in the range [__first,__last).
+     463              :    *  Comparisons are made using __comp.
+     464              :   */
+     465              :   template<typename _RandomAccessIterator, typename _Compare>
+     466              :     _GLIBCXX20_CONSTEXPR
+     467              :     inline void
+     468              :     sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+     469              :               _Compare __comp)
+     470              :     {
+     471              :       // concept requirements
+     472              :       __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept<
+     473              :             _RandomAccessIterator>)
+     474              :       __glibcxx_requires_valid_range(__first, __last);
+     475              :       __glibcxx_requires_irreflexive_pred(__first, __last, __comp);
+     476              :       __glibcxx_requires_heap_pred(__first, __last, __comp);
+     477              : 
+     478              :       typedef __decltype(__comp) _Cmp;
+     479              :       __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(_GLIBCXX_MOVE(__comp));
+     480              :       std::__sort_heap(__first, __last, __cmp);
+     481              :     }
+     482              : 
+     483              : #if __cplusplus >= 201103L
+     484              :   /**
+     485              :    *  @brief  Search the end of a heap.
+     486              :    *  @param  __first  Start of range.
+     487              :    *  @param  __last   End of range.
+     488              :    *  @return  An iterator pointing to the first element not in the heap.
+     489              :    *  @ingroup heap_algorithms
+     490              :    *
+     491              :    *  This operation returns the last iterator i in [__first, __last) for which
+     492              :    *  the range [__first, i) is a heap.
+     493              :   */
+     494              :   template<typename _RandomAccessIterator>
+     495              :     _GLIBCXX20_CONSTEXPR
+     496              :     inline _RandomAccessIterator
+     497              :     is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last)
+     498              :     {
+     499              :       // concept requirements
+     500              :       __glibcxx_function_requires(_RandomAccessIteratorConcept<
+     501              :             _RandomAccessIterator>)
+     502              :       __glibcxx_function_requires(_LessThanComparableConcept<
+     503              :             typename iterator_traits<_RandomAccessIterator>::value_type>)
+     504              :       __glibcxx_requires_valid_range(__first, __last);
+     505              :       __glibcxx_requires_irreflexive(__first, __last);
+     506              : 
+     507              :       __gnu_cxx::__ops::_Iter_less_iter __comp;
+     508              :       return __first + 
+     509              :         std::__is_heap_until(__first, std::distance(__first, __last), __comp);
+     510              :     }
+     511              : 
+     512              :   /**
+     513              :    *  @brief  Search the end of a heap using comparison functor.
+     514              :    *  @param  __first  Start of range.
+     515              :    *  @param  __last   End of range.
+     516              :    *  @param  __comp   Comparison functor to use.
+     517              :    *  @return  An iterator pointing to the first element not in the heap.
+     518              :    *  @ingroup heap_algorithms
+     519              :    *
+     520              :    *  This operation returns the last iterator i in [__first, __last) for which
+     521              :    *  the range [__first, i) is a heap.  Comparisons are made using __comp.
+     522              :   */
+     523              :   template<typename _RandomAccessIterator, typename _Compare>
+     524              :     _GLIBCXX20_CONSTEXPR
+     525              :     inline _RandomAccessIterator
+     526              :     is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last,
+     527              :                   _Compare __comp)
+     528              :     {
+     529              :       // concept requirements
+     530              :       __glibcxx_function_requires(_RandomAccessIteratorConcept<
+     531              :             _RandomAccessIterator>)
+     532              :       __glibcxx_requires_valid_range(__first, __last);
+     533              :       __glibcxx_requires_irreflexive_pred(__first, __last, __comp);
+     534              : 
+     535              :       typedef __decltype(__comp) _Cmp;
+     536              :       __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(_GLIBCXX_MOVE(__comp));
+     537              :       return __first
+     538              :         + std::__is_heap_until(__first, std::distance(__first, __last), __cmp);
+     539              :     }
+     540              : 
+     541              :   /**
+     542              :    *  @brief  Determines whether a range is a heap.
+     543              :    *  @param  __first  Start of range.
+     544              :    *  @param  __last   End of range.
+     545              :    *  @return  True if range is a heap, false otherwise.
+     546              :    *  @ingroup heap_algorithms
+     547              :   */
+     548              :   template<typename _RandomAccessIterator>
+     549              :     _GLIBCXX20_CONSTEXPR
+     550              :     inline bool
+     551              :     is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
+     552              :     { return std::is_heap_until(__first, __last) == __last; }
+     553              : 
+     554              :   /**
+     555              :    *  @brief  Determines whether a range is a heap using comparison functor.
+     556              :    *  @param  __first  Start of range.
+     557              :    *  @param  __last   End of range.
+     558              :    *  @param  __comp   Comparison functor to use.
+     559              :    *  @return  True if range is a heap, false otherwise.
+     560              :    *  @ingroup heap_algorithms
+     561              :   */
+     562              :   template<typename _RandomAccessIterator, typename _Compare>
+     563              :     _GLIBCXX20_CONSTEXPR
+     564              :     inline bool
+     565              :     is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+     566              :             _Compare __comp)
+     567              :     {
+     568              :       // concept requirements
+     569              :       __glibcxx_function_requires(_RandomAccessIteratorConcept<
+     570              :             _RandomAccessIterator>)
+     571              :       __glibcxx_requires_valid_range(__first, __last);
+     572              :       __glibcxx_requires_irreflexive_pred(__first, __last, __comp);
+     573              : 
+     574              :       const auto __dist = std::distance(__first, __last);
+     575              :       typedef __decltype(__comp) _Cmp;
+     576              :       __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(_GLIBCXX_MOVE(__comp));
+     577              :       return std::__is_heap_until(__first, __dist, __cmp) == __dist;
+     578              :     }
+     579              : #endif
+     580              : 
+     581              : _GLIBCXX_END_NAMESPACE_VERSION
+     582              : } // namespace
+     583              : 
+     584              : #endif /* _STL_HEAP_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_iterator.h.func-c.html b/html/usr/include/c++/13/bits/stl_iterator.h.func-c.html new file mode 100644 index 0000000..eb47f6e --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_iterator.h.func-c.html @@ -0,0 +1,3267 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_iterator.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_iterator.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:90.9 %7770
Test Date:2024-04-30 13:17:26Functions:62.8 %430270
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS2_SaIS2_EEEptEv0
_ZNSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEaSERKc0
_ZNSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEppEi0
_ZN9__gnu_cxxeqIPKiPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T1_EERKNS7_IT0_S9_EE314
_ZN9__gnu_cxxeqIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS6_St6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T1_EERKNSD_IT0_SF_EE122
_ZN9__gnu_cxxeqIPKiPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T1_EERKNS7_IT0_S9_EE192
_ZN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEC2Ev330
_ZN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2Ev0
_ZN9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEC2Ev16
_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEC2Ev122
_ZN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEC2Ev192
_ZN9__gnu_cxxmiIPKiPiSt6vectorIiSaIiEEEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_17__normal_iteratorIT_T1_EERKNS8_IT0_SA_EE440
_ZN9__gnu_cxxmiIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS6_St6vectorIS6_SaIS6_EEEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_17__normal_iteratorIT_T1_EERKNSE_IT0_SG_EE122
_ZN9__gnu_cxxmiIPKiPiSt6vectorIiSaIiEEEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_17__normal_iteratorIT_T1_EERKNS8_IT0_SA_EE318
_ZSt18make_move_iteratorIPiESt13move_iteratorIT_ES2_804
_ZSt18make_move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESt13move_iteratorIT_ES8_316
_ZSt18make_move_iteratorIPiESt13move_iteratorIT_ES2_488
_ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEixEl1104
_ZNKSt13move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEdeEv2100
_ZNSt13move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEppEv2100
_ZSteqIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEbRKSt13move_iteratorIT_ESB_2638
_ZStneIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEbRKSt13move_iteratorIT_ESB_2638
_ZSt12__miter_baseIPiEDTcl12__miter_basecldtfp_4baseEEESt13move_iteratorIT_E3512
_ZSt32__make_move_if_noexcept_iteratorIiSt13move_iteratorIPiEET0_PT_3784
_ZSt32__make_move_if_noexcept_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13move_iteratorIPS5_EET0_PT_760
_ZSt32__make_move_if_noexcept_iteratorIiSt13move_iteratorIPiEET0_PT_3024
_ZNSt13move_iteratorIPiEC2ES0_4588
_ZNSt13move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ES6_1076
_ZNSt13move_iteratorIPiEC2ES0_3512
_ZN9__gnu_cxxltIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_6476
_ZN9__gnu_cxxltIPPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_0
_ZN9__gnu_cxxltIPSt4pairIifESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_0
_ZN9__gnu_cxxltIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_0
_ZN9__gnu_cxxltIPdSt6vectorIdSaIdEEEEbRKNS_17__normal_iteratorIT_T0_EESA_3238
_ZN9__gnu_cxxltIPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T0_EESA_3238
_ZN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEpLEl6796
_ZN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEpLEl0
_ZN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEpLEl0
_ZN9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEpLEl16
_ZN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEpLEl158
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEpLEl168
_ZN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEpLEl276
_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEpLEl6178
_ZNKSt13move_iteratorIPiE4baseEv8788
_ZNKSt13move_iteratorIPiE4baseEv3512
_ZNKSt13move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE4baseEv5276
_ZN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEC2IPcvEERKNS0_IT_S5_EE16980
_ZN9__gnu_cxx17__normal_iteratorIPKN6loguru8CallbackESt6vectorIS2_SaIS2_EEEC2IPS2_vEERKNS0_IT_S7_EE0
_ZN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEC2IPcvEERKNS0_IT_S5_EE0
_ZN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEC2IPS3_vEERKNS0_IT_S8_EE24
_ZN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEC2IPdvEERKNS0_IT_S5_EE40
_ZN9__gnu_cxx17__normal_iteratorIPKSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEC2IPS6_vEERKNS0_IT_SB_EE180
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEC2IPS3_vEERKNS0_IT_S8_EE318
_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEC2IPS6_vEERKNS0_IT_SB_EE2258
_ZN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEC2IPivEERKNS0_IT_S5_EE14160
_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEmmEv48548
_ZN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEmmEv0
_ZN9__gnu_cxx17__normal_iteratorIPPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEmmEv0
_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEmmEv0
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS2_SaIS2_EEEmmEv198
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEmmEv1708
_ZN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEmmEv22930
_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmmEv23712
_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEppEi80670
_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEplEl125766
_ZNK9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS2_SaIS2_EEEplEl0
_ZNK9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS0_IPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISB_SaISB_EEEplEl0
_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEplEl0
_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIfSaIfEES1_IS3_SaIS3_EEEplEl6
_ZNK9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEplEl32
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS2_SaIS2_EEEplEl102
_ZNK9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEplEl420
_ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEplEl2174
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEplEl2694
_ZNK9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEplEl2800
_ZNK9__gnu_cxx17__normal_iteratorIPfSt6vectorIfSaIfEEEplEl9418
_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEplEl108120
_ZSt12__niter_baseIPcSt6vectorIcSaIcEEET_N9__gnu_cxx17__normal_iteratorIS4_T0_EE147492
_ZSt12__niter_baseIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEES4_ISE_SaISE_EEET_N9__gnu_cxx17__normal_iteratorISJ_T0_EE0
_ZSt12__niter_baseIPKNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEET_NS3_ISI_T0_EE0
_ZSt12__niter_baseIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_N9__gnu_cxx17__normal_iteratorIS8_T0_EE0
_ZSt12__niter_baseIPKcSt6vectorIcSaIcEEET_N9__gnu_cxx17__normal_iteratorIS5_T0_EE0
_ZSt12__niter_baseIPKhSt6vectorIhSaIhEEET_N9__gnu_cxx17__normal_iteratorIS5_T0_EE0
_ZSt12__niter_baseIPN6loguru8CallbackESt6vectorIS1_SaIS1_EEET_N9__gnu_cxx17__normal_iteratorIS6_T0_EE0
_ZSt12__niter_baseIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEET_NS3_ISH_T0_EE0
_ZSt12__niter_baseIPcSt6vectorIcSaIcEEET_N9__gnu_cxx17__normal_iteratorIS4_T0_EE0
_ZSt12__niter_baseIPKSt6vectorIfSaIfEES0_IS2_SaIS2_EEET_N9__gnu_cxx17__normal_iteratorIS7_T0_EE12
_ZSt12__niter_baseIPSt6vectorIfSaIfEES0_IS2_SaIS2_EEET_N9__gnu_cxx17__normal_iteratorIS6_T0_EE12
_ZSt12__niter_baseIPPN8bayesnet4NodeESt6vectorIS2_SaIS2_EEET_N9__gnu_cxx17__normal_iteratorIS7_T0_EE16
_ZSt12__niter_baseIPKlSt6vectorIlSaIlEEET_N9__gnu_cxx17__normal_iteratorIS5_T0_EE20
_ZSt12__niter_baseIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESt6vectorIS7_SaIS7_EEET_N9__gnu_cxx17__normal_iteratorISD_T0_EE48
_ZSt12__niter_baseIPKSt4pairIiiESt6vectorIS1_SaIS1_EEET_N9__gnu_cxx17__normal_iteratorIS7_T0_EE96
_ZSt12__niter_baseIPSt4pairIifESt6vectorIS1_SaIS1_EEET_N9__gnu_cxx17__normal_iteratorIS6_T0_EE152
_ZSt12__niter_baseIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEES4_ISE_SaISE_EEET_N9__gnu_cxx17__normal_iteratorISI_T0_EE228
_ZSt12__niter_baseIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESt6vectorIS5_SaIS5_EEET_N9__gnu_cxx17__normal_iteratorISA_T0_EE240
_ZSt12__niter_baseIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS5_SaIS5_EEET_N9__gnu_cxx17__normal_iteratorISB_T0_EE276
_ZSt12__niter_baseIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS5_SaIS5_EEET_N9__gnu_cxx17__normal_iteratorISA_T0_EE704
_ZSt12__niter_baseIPdSt6vectorIdSaIdEEET_N9__gnu_cxx17__normal_iteratorIS4_T0_EE1780
_ZSt12__niter_baseIPSt4pairIfS0_IiiEESt6vectorIS2_SaIS2_EEET_N9__gnu_cxx17__normal_iteratorIS7_T0_EE2720
_ZSt12__niter_baseIPKPN8bayesnet4NodeESt6vectorIS2_SaIS2_EEET_N9__gnu_cxx17__normal_iteratorIS8_T0_EE5144
_ZSt12__niter_baseIPfSt6vectorIfSaIfEEET_N9__gnu_cxx17__normal_iteratorIS4_T0_EE12576
_ZSt12__niter_baseIPKfSt6vectorIfSaIfEEET_N9__gnu_cxx17__normal_iteratorIS5_T0_EE14912
_ZSt12__niter_baseIPKdSt6vectorIdSaIdEEET_N9__gnu_cxx17__normal_iteratorIS5_T0_EE16412
_ZSt12__niter_baseIPiSt6vectorIiSaIiEEET_N9__gnu_cxx17__normal_iteratorIS4_T0_EE43364
_ZSt12__niter_baseIPKiSt6vectorIiSaIiEEET_N9__gnu_cxx17__normal_iteratorIS5_T0_EE48780
_ZN9__gnu_cxxeqIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_9579084
_ZN9__gnu_cxxeqIPKNSt7__cxx119sub_matchINS_17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEEbRKNS3_IT_T0_EESM_0
_ZN9__gnu_cxxeqIPKPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_0
_ZN9__gnu_cxxeqIPKSt4pairIlSt6vectorINSt7__cxx119sub_matchINS_17__normal_iteratorIPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEES2_ISH_SaISH_EEEEbRKNS5_IT_T0_EESQ_0
_ZN9__gnu_cxxeqIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEbRKNS_17__normal_iteratorIT_T0_EESE_0
_ZN9__gnu_cxxeqIPKhSt6vectorIhSaIhEEEEbRKNS_17__normal_iteratorIT_T0_EESB_0
_ZN9__gnu_cxxeqIPPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_0
_ZN9__gnu_cxxeqIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_0
_ZN9__gnu_cxxeqIPPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_12
_ZN9__gnu_cxxeqIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEEbRKNS_17__normal_iteratorIT_T0_EESO_20
_ZN9__gnu_cxxeqIPSt4pairIifESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_26
_ZN9__gnu_cxxeqIPKSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESH_60
_ZN9__gnu_cxxeqIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_426
_ZN9__gnu_cxxeqIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEEbRKNS_17__normal_iteratorIT_T0_EESP_576
_ZN9__gnu_cxxeqIPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T0_EESA_3782
_ZN9__gnu_cxxeqIPdSt6vectorIdSaIdEEEEbRKNS_17__normal_iteratorIT_T0_EESA_6956
_ZN9__gnu_cxxeqIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_28510
_ZN9__gnu_cxxeqIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESH_9538716
_ZNSt20back_insert_iteratorISt6vectorIiSaIiEEEC2ERS2_31823476
_ZNSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ERS5_0
_ZNSt20back_insert_iteratorISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEEC2ERSG_114
_ZNSt20back_insert_iteratorISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EEEC2ERS8_1240
_ZNSt20back_insert_iteratorISt6vectorIiSaIiEEEC2ERS2_5492
_ZNSt20back_insert_iteratorISt6vectorIlSaIlEEEC2ERS2_14194
_ZNSt20back_insert_iteratorIN3c104ListINS0_8optionalIN2at6TensorEEEEEEC2ERS6_31802436
_ZSt13back_inserterISt6vectorIiSaIiEEESt20back_insert_iteratorIT_ERS4_31823476
_ZSt13back_inserterINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESt20back_insert_iteratorIT_ERS7_0
_ZSt13back_inserterISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEESt20back_insert_iteratorIT_ERSI_114
_ZSt13back_inserterISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EEESt20back_insert_iteratorIT_ERSA_1240
_ZSt13back_inserterISt6vectorIiSaIiEEESt20back_insert_iteratorIT_ERS4_5492
_ZSt13back_inserterISt6vectorIlSaIlEEESt20back_insert_iteratorIT_ERS4_14194
_ZSt13back_inserterIN3c104ListINS0_8optionalIN2at6TensorEEEEEESt20back_insert_iteratorIT_ERS8_31802436
_ZNSt20back_insert_iteratorISt6vectorIiSaIiEEEaSEOi58932390
_ZNSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEaSEOc0
_ZNSt20back_insert_iteratorISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEEaSEOSE_236
_ZNSt20back_insert_iteratorISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EEEaSEOS6_3636
_ZNSt20back_insert_iteratorISt6vectorIlSaIlEEEaSEOl26360
_ZNSt20back_insert_iteratorISt6vectorIiSaIiEEEaSEOi75626
_ZNSt20back_insert_iteratorIN3c104ListINS0_8optionalIN2at6TensorEEEEEEaSEOS5_58826532
_ZNSt20back_insert_iteratorISt6vectorIiSaIiEEEdeEv58932390
_ZNSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEdeEv0
_ZNSt20back_insert_iteratorISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEEdeEv236
_ZNSt20back_insert_iteratorISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EEEdeEv3636
_ZNSt20back_insert_iteratorISt6vectorIlSaIlEEEdeEv26360
_ZNSt20back_insert_iteratorISt6vectorIiSaIiEEEdeEv75626
_ZNSt20back_insert_iteratorIN3c104ListINS0_8optionalIN2at6TensorEEEEEEdeEv58826532
_ZNSt20back_insert_iteratorISt6vectorIiSaIiEEEppEv58932390
_ZNSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEppEv0
_ZNSt20back_insert_iteratorISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEEppEv236
_ZNSt20back_insert_iteratorISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EEEppEv3636
_ZNSt20back_insert_iteratorISt6vectorIlSaIlEEEppEv26360
_ZNSt20back_insert_iteratorISt6vectorIiSaIiEEEppEv75626
_ZNSt20back_insert_iteratorIN3c104ListINS0_8optionalIN2at6TensorEEEEEEppEv58826532
_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEmiEl108541140
_ZNK9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPN3c106SymIntESt6vectorIS2_SaIS2_EEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPN3c107complexIdEESt6vectorIS3_SaIS3_EEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPN3c108optionalIN2at6TensorEEESt6vectorIS5_SaIS5_EEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPNSt8__detail6_StateIcEESt6vectorIS3_SaIS3_EEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIccESt6vectorIS2_SaIS2_EEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIlSt6vectorINSt7__cxx119sub_matchINS0_IPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEES2_ISG_SaISG_EEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPhSt6vectorIhSaIhEEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPN5Catch10Generators16GeneratorWrapperIPKcEESt6vectorIS6_SaIS6_EEEmiEl40
_ZNK9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS2_SaIS2_EEEmiEl46
_ZNK9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEmiEl124
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS2_SaIS2_EEEmiEl152
_ZNK9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEmiEl606
_ZNK9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEmiEl720
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEmiEl1152
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIiiESt6vectorIS2_SaIS2_EEEmiEl2088
_ZNK9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEmiEl5006
_ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEmiEl5756
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEmiEl9300
_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEmiEl24670
_ZNK9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEmiEl40554
_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmiEl1568816
_ZNK9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEmiEl1605734
_ZNK9__gnu_cxx17__normal_iteratorIPN3c106IValueESt6vectorIS2_SaIS2_EEEmiEl105276376
_ZN9__gnu_cxxmiIPcSt6vectorIcSaIcEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS8_SB_131023814
_ZN9__gnu_cxxmiIPKN6loguru8CallbackESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSB_SE_0
_ZN9__gnu_cxxmiIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSC_SF_0
_ZN9__gnu_cxxmiIPKcSt6vectorIcSaIcEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS9_SC_0
_ZN9__gnu_cxxmiIPN2at6TensorESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_0
_ZN9__gnu_cxxmiIPN3c106SymIntESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_0
_ZN9__gnu_cxxmiIPN3c107complexIdEESt6vectorIS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSB_SE_0
_ZN9__gnu_cxxmiIPN3c108optionalIN2at6TensorEEESt6vectorIS5_SaIS5_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSD_SG_0
_ZN9__gnu_cxxmiIPN5Catch10Generators16GeneratorWrapperIPKcEESt6vectorIS6_SaIS6_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSE_SH_0
_ZN9__gnu_cxxmiIPNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS4_SaIS4_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSC_SF_0
_ZN9__gnu_cxxmiIPNSt8__detail6_StateIcEESt6vectorIS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSB_SE_0
_ZN9__gnu_cxxmiIPPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSC_SF_0
_ZN9__gnu_cxxmiIPSt4pairIccESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_0
_ZN9__gnu_cxxmiIPSt4pairIlSt6vectorINSt7__cxx119sub_matchINS_17__normal_iteratorIPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEES2_ISH_SaISH_EEEENS5_IT_T0_E15difference_typeERKSN_SQ_0
_ZN9__gnu_cxxmiIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSB_SE_0
_ZN9__gnu_cxxmiIPcSt6vectorIcSaIcEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS8_SB_0
_ZN9__gnu_cxxmiIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSM_SP_2
_ZN9__gnu_cxxmiIPN6loguru8CallbackESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_12
_ZN9__gnu_cxxmiIPKPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSC_SF_24
_ZN9__gnu_cxxmiIPKdSt6vectorIdSaIdEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS9_SC_40
_ZN9__gnu_cxxmiIPSt4pairIifESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_172
_ZN9__gnu_cxxmiIPKSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSF_SI_180
_ZN9__gnu_cxxmiIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSE_SH_240
_ZN9__gnu_cxxmiIPKSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSC_SF_318
_ZN9__gnu_cxxmiIPSt6vectorIiSaIiEES1_IS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_798
_ZN9__gnu_cxxmiIPSt4pairIiiESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_1222
_ZN9__gnu_cxxmiIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSB_SE_1244
_ZN9__gnu_cxxmiIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_1272
_ZN9__gnu_cxxmiIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSG_SJ_2078
_ZN9__gnu_cxxmiIPdSt6vectorIdSaIdEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS8_SB_10078
_ZN9__gnu_cxxmiIPKiSt6vectorIiSaIiEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS9_SC_14024
_ZN9__gnu_cxxmiIPPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSB_SE_30320
_ZN9__gnu_cxxmiIPlSt6vectorIlSaIlEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS8_SB_38138
_ZN9__gnu_cxxmiIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSE_SH_68546
_ZN9__gnu_cxxmiIPiSt6vectorIiSaIiEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS8_SB_117646
_ZN9__gnu_cxxmiIPmSt6vectorImSaImEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS8_SB_327916
_ZN9__gnu_cxxmiIPSt6threadSt6vectorIS1_SaIS1_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS9_SC_1236832
_ZN9__gnu_cxxmiIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSF_SI_24003092
_ZN9__gnu_cxxmiIPN3c106IValueESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_105169620
_ZN9__gnu_cxxneIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_134563234
_ZN9__gnu_cxxneIPKN3c106IValueESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_0
_ZN9__gnu_cxxneIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEEbRKNS_17__normal_iteratorIT_T0_EESP_0
_ZN9__gnu_cxxneIPKNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_0
_ZN9__gnu_cxxneIPKNSt7__cxx119sub_matchINS_17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEEbRKNS3_IT_T0_EESM_0
_ZN9__gnu_cxxneIPKSt4pairIccESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_0
_ZN9__gnu_cxxneIPKSt6vectorIfSaIfEES1_IS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_0
_ZN9__gnu_cxxneIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEbRKNS_17__normal_iteratorIT_T0_EESE_0
_ZN9__gnu_cxxneIPKcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESB_0
_ZN9__gnu_cxxneIPKhSt6vectorIhSaIhEEEEbRKNS_17__normal_iteratorIT_T0_EESB_0
_ZN9__gnu_cxxneIPNSt7__cxx119sub_matchINS_17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEEbRKNS3_IT_T0_EESL_0
_ZN9__gnu_cxxneIPNSt8__detail6_StateIcEESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_0
_ZN9__gnu_cxxneIPPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_0
_ZN9__gnu_cxxneIPSt4pairIlSt6vectorINSt7__cxx119sub_matchINS_17__normal_iteratorIPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEES2_ISH_SaISH_EEEEbRKNS5_IT_T0_EESP_0
_ZN9__gnu_cxxneIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEbRKNS_17__normal_iteratorIT_T0_EESD_0
_ZN9__gnu_cxxneIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_0
_ZN9__gnu_cxxneIPSt6vectorIfSaIfEES1_IS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_6
_ZN9__gnu_cxxneIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEEbRKNS_17__normal_iteratorIT_T0_EESO_32
_ZN9__gnu_cxxneIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESt6vectorIS8_SaIS8_EEEEbRKNS_17__normal_iteratorIT_T0_EESI_32
_ZN9__gnu_cxxneIPSt4pairIifESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_178
_ZN9__gnu_cxxneIPKiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T0_EESB_192
_ZN9__gnu_cxxneIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_204
_ZN9__gnu_cxxneIPKSt6vectorIdSaIdEES1_IS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_640
_ZN9__gnu_cxxneIPKSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_752
_ZN9__gnu_cxxneIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEEbRKNS_17__normal_iteratorIT_T0_EESJ_1934
_ZN9__gnu_cxxneIPSt4pairIiiESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_2174
_ZN9__gnu_cxxneIPKSt4pairIiiESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_3584
_ZN9__gnu_cxxneIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEEbRKNS_17__normal_iteratorIT_T0_EESI_3774
_ZN9__gnu_cxxneIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_4062
_ZN9__gnu_cxxneIPN6loguru8CallbackESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_50756
_ZN9__gnu_cxxneIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_55394
_ZN9__gnu_cxxneIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESH_384722
_ZN9__gnu_cxxneIPSt6threadSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_2008544
_ZN9__gnu_cxxneIPdSt6vectorIdSaIdEEEEbRKNS_17__normal_iteratorIT_T0_EESA_4191346
_ZN9__gnu_cxxneIPmSt6vectorImSaImEEEEbRKNS_17__normal_iteratorIT_T0_EESA_9805136
_ZN9__gnu_cxxneIPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T0_EESA_12681120
_ZN9__gnu_cxxneIPPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_105368652
_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEC2ERKS1_554159306
_ZN9__gnu_cxx17__normal_iteratorIPKN3c106IValueESt6vectorIS2_SaIS2_EEEC2ERKS4_0
_ZN9__gnu_cxx17__normal_iteratorIPKN6loguru8CallbackESt6vectorIS2_SaIS2_EEEC2ERKS4_0
_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS4_SaIS4_EEEC2ERKS6_0
_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS0_IPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISB_SaISB_EEEC2ERKSD_0
_ZN9__gnu_cxx17__normal_iteratorIPKPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEC2ERKS6_0
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIccESt6vectorIS2_SaIS2_EEEC2ERKS4_0
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIlSt6vectorINSt7__cxx119sub_matchINS0_IPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEES2_ISG_SaISG_EEEC2ERKSI_0
_ZN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEC2ERKS2_0
_ZN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEC2ERKS2_0
_ZN9__gnu_cxx17__normal_iteratorIPN2at6TensorESt6vectorIS2_SaIS2_EEEC2ERKS3_0
_ZN9__gnu_cxx17__normal_iteratorIPN3c106SymIntESt6vectorIS2_SaIS2_EEEC2ERKS3_0
_ZN9__gnu_cxx17__normal_iteratorIPN3c107complexIdEESt6vectorIS3_SaIS3_EEEC2ERKS4_0
_ZN9__gnu_cxx17__normal_iteratorIPN3c108optionalIN2at6TensorEEESt6vectorIS5_SaIS5_EEEC2ERKS6_0
_ZN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS4_SaIS4_EEEC2ERKS5_0
_ZN9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS0_IPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISB_SaISB_EEEC2ERKSC_0
_ZN9__gnu_cxx17__normal_iteratorIPNSt8__detail6_StateIcEESt6vectorIS3_SaIS3_EEEC2ERKS4_0
_ZN9__gnu_cxx17__normal_iteratorIPPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEC2ERKS5_0
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIccESt6vectorIS2_SaIS2_EEEC2ERKS3_0
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIlSt6vectorINSt7__cxx119sub_matchINS0_IPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEES2_ISG_SaISG_EEEC2ERKSH_0
_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEC2ERKS1_0
_ZN9__gnu_cxx17__normal_iteratorIPhSt6vectorIhSaIhEEEC2ERKS1_0
_ZN9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES1_IS3_SaIS3_EEEC2ERKS5_12
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESt6vectorIS8_SaIS8_EEEC2ERKS9_16
_ZN9__gnu_cxx17__normal_iteratorIPSt6vectorIfSaIfEES1_IS3_SaIS3_EEEC2ERKS4_18
_ZN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEC2ERKS2_20
_ZN9__gnu_cxx17__normal_iteratorIPN5Catch10Generators16GeneratorWrapperIPKcEESt6vectorIS6_SaIS6_EEEC2ERKS7_80
_ZN9__gnu_cxx17__normal_iteratorIPKSt6vectorIdSaIdEES1_IS3_SaIS3_EEEC2ERKS5_128
_ZN9__gnu_cxx17__normal_iteratorIPKSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEC2ERKS8_240
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEC2ERKS5_550
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS2_SaIS2_EEEC2ERKS3_646
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEC2ERKSA_900
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS2_SaIS2_EEEC2ERKS4_1120
_ZN9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEC2ERKSH_1152
_ZN9__gnu_cxx17__normal_iteratorIPSt6vectorIiSaIiEES1_IS3_SaIS3_EEEC2ERKS4_1596
_ZN9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEC2ERKSG_1712
_ZN9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEC2ERKS7_2672
_ZN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEC2ERKS5_5156
_ZN9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS2_SaIS2_EEEC2ERKS3_7244
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIiiESt6vectorIS2_SaIS2_EEEC2ERKS3_7296
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEC2ERKS4_7316
_ZN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEC2ERKS2_16452
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEC2ERKS9_23356
_ZN9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEEC2ERKS2_29080
_ZN9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEC2ERKS4_51884
_ZN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEC2ERKS2_63080
_ZN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEC2ERKS7_148754
_ZN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEC2ERKS1_157384
_ZN9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEC2ERKS1_1319680
_ZN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEC2ERKS1_2152686
_ZN9__gnu_cxx17__normal_iteratorIPfSt6vectorIfSaIfEEEC2ERKS1_4376680
_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEC2ERKS1_6222704
_ZN9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEC2ERKS2_6490752
_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEC2ERKS8_38164788
_ZN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEC2ERKS4_74012160
_ZN9__gnu_cxx17__normal_iteratorIPN3c106IValueESt6vectorIS2_SaIS2_EEEC2ERKS3_420891992
_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEE4baseEv774472830
_ZNK9__gnu_cxx17__normal_iteratorIPKN3c106IValueESt6vectorIS2_SaIS2_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKN6loguru8CallbackESt6vectorIS2_SaIS2_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS4_SaIS4_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS0_IPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISB_SaISB_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIccESt6vectorIS2_SaIS2_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIlSt6vectorINSt7__cxx119sub_matchINS0_IPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEES2_ISG_SaISG_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPN2at6TensorESt6vectorIS2_SaIS2_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPN3c106SymIntESt6vectorIS2_SaIS2_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPN3c107complexIdEESt6vectorIS3_SaIS3_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPN3c108optionalIN2at6TensorEEESt6vectorIS5_SaIS5_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPN5Catch10Generators16GeneratorWrapperIPKcEESt6vectorIS6_SaIS6_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS4_SaIS4_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS0_IPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISB_SaISB_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPNSt8__detail6_StateIcEESt6vectorIS3_SaIS3_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIccESt6vectorIS2_SaIS2_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIlSt6vectorINSt7__cxx119sub_matchINS0_IPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEES2_ISG_SaISG_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES1_IS3_SaIS3_EEE4baseEv12
_ZNK9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEE4baseEv20
_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIfSaIfEES1_IS3_SaIS3_EEE4baseEv24
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESt6vectorIS8_SaIS8_EEE4baseEv64
_ZNK9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEE4baseEv340
_ZNK9__gnu_cxx17__normal_iteratorIPKSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEE4baseEv480
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS2_SaIS2_EEE4baseEv1092
_ZNK9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEE4baseEv1152
_ZNK9__gnu_cxx17__normal_iteratorIPKSt6vectorIdSaIdEES1_IS3_SaIS3_EEE4baseEv1280
_ZNK9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEE4baseEv1848
_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEE4baseEv2140
_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIiSaIiEES1_IS3_SaIS3_EEE4baseEv3192
_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEE4baseEv4348
_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEE4baseEv5088
_ZNK9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEE4baseEv5192
_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS2_SaIS2_EEE4baseEv7264
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIiiESt6vectorIS2_SaIS2_EEE4baseEv9236
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEE4baseEv15554
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEE4baseEv15880
_ZNK9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEE4baseEv16492
_ZNK9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEE4baseEv84202
_ZNK9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS2_SaIS2_EEE4baseEv101560
_ZNK9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEE4baseEv152552
_ZNK9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEE4baseEv326626
_ZNK9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEE4baseEv2929008
_ZNK9__gnu_cxx17__normal_iteratorIPfSt6vectorIfSaIfEEE4baseEv5874324
_ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEE4baseEv8427364
_ZNK9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEE4baseEv8964416
_ZNK9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEE4baseEv22341152
_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEE4baseEv25790280
_ZNK9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEE4baseEv67853580
_ZNK9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEE4baseEv210858588
_ZNK9__gnu_cxx17__normal_iteratorIPN3c106IValueESt6vectorIS2_SaIS2_EEE4baseEv420678480
_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEppEv934848992
_ZN9__gnu_cxx17__normal_iteratorIPKN3c106IValueESt6vectorIS2_SaIS2_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS4_SaIS4_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS0_IPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISB_SaISB_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIccESt6vectorIS2_SaIS2_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES1_IS3_SaIS3_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS0_IPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISB_SaISB_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPNSt8__detail6_StateIcEESt6vectorIS3_SaIS3_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIlSt6vectorINSt7__cxx119sub_matchINS0_IPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEES2_ISG_SaISG_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPSt6vectorIfSaIfEES1_IS3_SaIS3_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESt6vectorIS8_SaIS8_EEEppEv24
_ZN9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEppEv74
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS2_SaIS2_EEEppEv126
_ZN9__gnu_cxx17__normal_iteratorIPKSt6vectorIdSaIdEES1_IS3_SaIS3_EEEppEv576
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEppEv636
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEppEv1722
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIiiESt6vectorIS2_SaIS2_EEEppEv1836
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS2_SaIS2_EEEppEv3072
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEppEv3300
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEppEv3490
_ZN9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS2_SaIS2_EEEppEv47192
_ZN9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEppEv1605734
_ZN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEppEv1905664
_ZN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEppEv5233230
_ZN9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEppEv9832066
_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEppEv11298634
_ZN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEppEv68392898
_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEppEv836518718
_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv1068239738
_ZNK9__gnu_cxx17__normal_iteratorIPKN3c106IValueESt6vectorIS2_SaIS2_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS4_SaIS4_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS0_IPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISB_SaISB_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIccESt6vectorIS2_SaIS2_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES1_IS3_SaIS3_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPN3c106SymIntESt6vectorIS2_SaIS2_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPN3c107complexIdEESt6vectorIS3_SaIS3_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPN3c108optionalIN2at6TensorEEESt6vectorIS5_SaIS5_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS0_IPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISB_SaISB_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPNSt8__detail6_StateIcEESt6vectorIS3_SaIS3_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIccESt6vectorIS2_SaIS2_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIlSt6vectorINSt7__cxx119sub_matchINS0_IPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEES2_ISG_SaISG_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIfSaIfEES1_IS3_SaIS3_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPhSt6vectorIhSaIhEEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESt6vectorIS8_SaIS8_EEEdeEv24
_ZNK9__gnu_cxx17__normal_iteratorIPN5Catch10Generators16GeneratorWrapperIPKcEESt6vectorIS6_SaIS6_EEEdeEv40
_ZNK9__gnu_cxx17__normal_iteratorIPKSt6vectorIdSaIdEES1_IS3_SaIS3_EEEdeEv576
_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEdeEv636
_ZNK9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEdeEv680
_ZNK9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEdeEv752
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS2_SaIS2_EEEdeEv1074
_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEdeEv1722
_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS2_SaIS2_EEEdeEv3072
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIiiESt6vectorIS2_SaIS2_EEEdeEv3924
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEdeEv12798
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEdeEv12950
_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEdeEv24670
_ZNK9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEdeEv40554
_ZNK9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS2_SaIS2_EEEdeEv47238
_ZNK9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEdeEv1933102
_ZNK9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEdeEv3211468
_ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEdeEv5329294
_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEdeEv13924002
_ZNK9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEdeEv23964534
_ZNK9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEdeEv68392916
_ZNK9__gnu_cxx17__normal_iteratorIPN3c106IValueESt6vectorIS2_SaIS2_EEEdeEv105276376
_ZNK9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEdeEv846057336
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_iterator.h.func.html b/html/usr/include/c++/13/bits/stl_iterator.h.func.html new file mode 100644 index 0000000..9f40a4b --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_iterator.h.func.html @@ -0,0 +1,3267 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_iterator.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_iterator.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:90.9 %7770
Test Date:2024-04-30 13:17:26Functions:62.8 %430270
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEC2IPcvEERKNS0_IT_S5_EE16980
_ZN9__gnu_cxx17__normal_iteratorIPKN6loguru8CallbackESt6vectorIS2_SaIS2_EEEC2IPS2_vEERKNS0_IT_S7_EE0
_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEC2IPS6_vEERKNS0_IT_SB_EE2258
_ZN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEC2IPS3_vEERKNS0_IT_S8_EE24
_ZN9__gnu_cxx17__normal_iteratorIPKSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEC2IPS6_vEERKNS0_IT_SB_EE180
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEC2IPS3_vEERKNS0_IT_S8_EE318
_ZN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEC2IPcvEERKNS0_IT_S5_EE0
_ZN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEC2IPdvEERKNS0_IT_S5_EE40
_ZN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEC2IPivEERKNS0_IT_S5_EE14160
_ZN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEC2Ev330
_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEC2Ev122
_ZN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2Ev0
_ZN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEC2Ev192
_ZN9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEC2Ev16
_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEC2ERKS1_554159306
_ZN9__gnu_cxx17__normal_iteratorIPKN3c106IValueESt6vectorIS2_SaIS2_EEEC2ERKS4_0
_ZN9__gnu_cxx17__normal_iteratorIPKN6loguru8CallbackESt6vectorIS2_SaIS2_EEEC2ERKS4_0
_ZN9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEC2ERKSH_1152
_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEC2ERKS8_38164788
_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS4_SaIS4_EEEC2ERKS6_0
_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS0_IPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISB_SaISB_EEEC2ERKSD_0
_ZN9__gnu_cxx17__normal_iteratorIPKPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEC2ERKS6_0
_ZN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEC2ERKS5_5156
_ZN9__gnu_cxx17__normal_iteratorIPKSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEC2ERKS8_240
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEC2ERKSA_900
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIccESt6vectorIS2_SaIS2_EEEC2ERKS4_0
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEC2ERKS5_550
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS2_SaIS2_EEEC2ERKS4_1120
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIlSt6vectorINSt7__cxx119sub_matchINS0_IPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEES2_ISG_SaISG_EEEC2ERKSI_0
_ZN9__gnu_cxx17__normal_iteratorIPKSt6vectorIdSaIdEES1_IS3_SaIS3_EEEC2ERKS5_128
_ZN9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES1_IS3_SaIS3_EEEC2ERKS5_12
_ZN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEC2ERKS2_0
_ZN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEC2ERKS2_16452
_ZN9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEEC2ERKS2_29080
_ZN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEC2ERKS2_0
_ZN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEC2ERKS2_63080
_ZN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEC2ERKS2_20
_ZN9__gnu_cxx17__normal_iteratorIPN2at6TensorESt6vectorIS2_SaIS2_EEEC2ERKS3_0
_ZN9__gnu_cxx17__normal_iteratorIPN3c106IValueESt6vectorIS2_SaIS2_EEEC2ERKS3_420891992
_ZN9__gnu_cxx17__normal_iteratorIPN3c106SymIntESt6vectorIS2_SaIS2_EEEC2ERKS3_0
_ZN9__gnu_cxx17__normal_iteratorIPN3c107complexIdEESt6vectorIS3_SaIS3_EEEC2ERKS4_0
_ZN9__gnu_cxx17__normal_iteratorIPN3c108optionalIN2at6TensorEEESt6vectorIS5_SaIS5_EEEC2ERKS6_0
_ZN9__gnu_cxx17__normal_iteratorIPN5Catch10Generators16GeneratorWrapperIPKcEESt6vectorIS6_SaIS6_EEEC2ERKS7_80
_ZN9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS2_SaIS2_EEEC2ERKS3_7244
_ZN9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEC2ERKSG_1712
_ZN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEC2ERKS7_148754
_ZN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS4_SaIS4_EEEC2ERKS5_0
_ZN9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS0_IPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISB_SaISB_EEEC2ERKSC_0
_ZN9__gnu_cxx17__normal_iteratorIPNSt8__detail6_StateIcEESt6vectorIS3_SaIS3_EEEC2ERKS4_0
_ZN9__gnu_cxx17__normal_iteratorIPPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEC2ERKS5_0
_ZN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEC2ERKS4_74012160
_ZN9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEC2ERKS7_2672
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEC2ERKS9_23356
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESt6vectorIS8_SaIS8_EEEC2ERKS9_16
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIccESt6vectorIS2_SaIS2_EEEC2ERKS3_0
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEC2ERKS4_7316
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS2_SaIS2_EEEC2ERKS3_646
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIiiESt6vectorIS2_SaIS2_EEEC2ERKS3_7296
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIlSt6vectorINSt7__cxx119sub_matchINS0_IPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEES2_ISG_SaISG_EEEC2ERKSH_0
_ZN9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEC2ERKS2_6490752
_ZN9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEC2ERKS4_51884
_ZN9__gnu_cxx17__normal_iteratorIPSt6vectorIfSaIfEES1_IS3_SaIS3_EEEC2ERKS4_18
_ZN9__gnu_cxx17__normal_iteratorIPSt6vectorIiSaIiEES1_IS3_SaIS3_EEEC2ERKS4_1596
_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEC2ERKS1_0
_ZN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEC2ERKS1_2152686
_ZN9__gnu_cxx17__normal_iteratorIPfSt6vectorIfSaIfEEEC2ERKS1_4376680
_ZN9__gnu_cxx17__normal_iteratorIPhSt6vectorIhSaIhEEEC2ERKS1_0
_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEC2ERKS1_6222704
_ZN9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEC2ERKS1_157384
_ZN9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEC2ERKS1_1319680
_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEmmEv48548
_ZN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEmmEv0
_ZN9__gnu_cxx17__normal_iteratorIPPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEmmEv0
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEmmEv1708
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS2_SaIS2_EEEmmEv198
_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEmmEv0
_ZN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEmmEv22930
_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmmEv23712
_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEppEv934848992
_ZN9__gnu_cxx17__normal_iteratorIPKN3c106IValueESt6vectorIS2_SaIS2_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEppEv836518718
_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS4_SaIS4_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS0_IPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISB_SaISB_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEppEv1722
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIccESt6vectorIS2_SaIS2_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEppEv636
_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS2_SaIS2_EEEppEv3072
_ZN9__gnu_cxx17__normal_iteratorIPKSt6vectorIdSaIdEES1_IS3_SaIS3_EEEppEv576
_ZN9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES1_IS3_SaIS3_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS2_SaIS2_EEEppEv47192
_ZN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEppEv1905664
_ZN9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS0_IPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISB_SaISB_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPNSt8__detail6_StateIcEESt6vectorIS3_SaIS3_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEppEv68392898
_ZN9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEppEv74
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEppEv3490
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESt6vectorIS8_SaIS8_EEEppEv24
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEppEv3300
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS2_SaIS2_EEEppEv126
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIiiESt6vectorIS2_SaIS2_EEEppEv1836
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIlSt6vectorINSt7__cxx119sub_matchINS0_IPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEES2_ISG_SaISG_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEppEv1605734
_ZN9__gnu_cxx17__normal_iteratorIPSt6vectorIfSaIfEES1_IS3_SaIS3_EEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEppEv0
_ZN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEppEv5233230
_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEppEv11298634
_ZN9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEppEv9832066
_ZN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEpLEl6796
_ZN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEpLEl0
_ZN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEpLEl0
_ZN9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEpLEl16
_ZN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEpLEl158
_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEpLEl168
_ZN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEpLEl276
_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEpLEl6178
_ZN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEppEi80670
_ZN9__gnu_cxxeqIPKiPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T1_EERKNS7_IT0_S9_EE314
_ZN9__gnu_cxxeqIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS6_St6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T1_EERKNSD_IT0_SF_EE122
_ZN9__gnu_cxxeqIPKiPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T1_EERKNS7_IT0_S9_EE192
_ZN9__gnu_cxxeqIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_9579084
_ZN9__gnu_cxxeqIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEEbRKNS_17__normal_iteratorIT_T0_EESP_576
_ZN9__gnu_cxxeqIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESH_9538716
_ZN9__gnu_cxxeqIPKNSt7__cxx119sub_matchINS_17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEEbRKNS3_IT_T0_EESM_0
_ZN9__gnu_cxxeqIPKPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_0
_ZN9__gnu_cxxeqIPKSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESH_60
_ZN9__gnu_cxxeqIPKSt4pairIlSt6vectorINSt7__cxx119sub_matchINS_17__normal_iteratorIPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEES2_ISH_SaISH_EEEEbRKNS5_IT_T0_EESQ_0
_ZN9__gnu_cxxeqIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEbRKNS_17__normal_iteratorIT_T0_EESE_0
_ZN9__gnu_cxxeqIPKhSt6vectorIhSaIhEEEEbRKNS_17__normal_iteratorIT_T0_EESB_0
_ZN9__gnu_cxxeqIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEEbRKNS_17__normal_iteratorIT_T0_EESO_20
_ZN9__gnu_cxxeqIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_28510
_ZN9__gnu_cxxeqIPPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_0
_ZN9__gnu_cxxeqIPPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_12
_ZN9__gnu_cxxeqIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_426
_ZN9__gnu_cxxeqIPSt4pairIifESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_26
_ZN9__gnu_cxxeqIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_0
_ZN9__gnu_cxxeqIPdSt6vectorIdSaIdEEEEbRKNS_17__normal_iteratorIT_T0_EESA_6956
_ZN9__gnu_cxxeqIPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T0_EESA_3782
_ZN9__gnu_cxxltIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_6476
_ZN9__gnu_cxxltIPPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_0
_ZN9__gnu_cxxltIPSt4pairIifESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_0
_ZN9__gnu_cxxltIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_0
_ZN9__gnu_cxxltIPdSt6vectorIdSaIdEEEEbRKNS_17__normal_iteratorIT_T0_EESA_3238
_ZN9__gnu_cxxltIPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T0_EESA_3238
_ZN9__gnu_cxxmiIPKiPiSt6vectorIiSaIiEEEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_17__normal_iteratorIT_T1_EERKNS8_IT0_SA_EE440
_ZN9__gnu_cxxmiIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS6_St6vectorIS6_SaIS6_EEEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_17__normal_iteratorIT_T1_EERKNSE_IT0_SG_EE122
_ZN9__gnu_cxxmiIPKiPiSt6vectorIiSaIiEEEEDTmicldtfp_4baseEcldtfp0_4baseEERKNS_17__normal_iteratorIT_T1_EERKNS8_IT0_SA_EE318
_ZN9__gnu_cxxmiIPcSt6vectorIcSaIcEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS8_SB_131023814
_ZN9__gnu_cxxmiIPKN6loguru8CallbackESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSB_SE_0
_ZN9__gnu_cxxmiIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSF_SI_24003092
_ZN9__gnu_cxxmiIPKPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSC_SF_24
_ZN9__gnu_cxxmiIPKSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSF_SI_180
_ZN9__gnu_cxxmiIPKSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSC_SF_318
_ZN9__gnu_cxxmiIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSC_SF_0
_ZN9__gnu_cxxmiIPKcSt6vectorIcSaIcEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS9_SC_0
_ZN9__gnu_cxxmiIPKdSt6vectorIdSaIdEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS9_SC_40
_ZN9__gnu_cxxmiIPKiSt6vectorIiSaIiEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS9_SC_14024
_ZN9__gnu_cxxmiIPN2at6TensorESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_0
_ZN9__gnu_cxxmiIPN3c106IValueESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_105169620
_ZN9__gnu_cxxmiIPN3c106SymIntESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_0
_ZN9__gnu_cxxmiIPN3c107complexIdEESt6vectorIS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSB_SE_0
_ZN9__gnu_cxxmiIPN3c108optionalIN2at6TensorEEESt6vectorIS5_SaIS5_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSD_SG_0
_ZN9__gnu_cxxmiIPN5Catch10Generators16GeneratorWrapperIPKcEESt6vectorIS6_SaIS6_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSE_SH_0
_ZN9__gnu_cxxmiIPN6loguru8CallbackESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_12
_ZN9__gnu_cxxmiIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSM_SP_2
_ZN9__gnu_cxxmiIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSE_SH_68546
_ZN9__gnu_cxxmiIPNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS4_SaIS4_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSC_SF_0
_ZN9__gnu_cxxmiIPNSt8__detail6_StateIcEESt6vectorIS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSB_SE_0
_ZN9__gnu_cxxmiIPPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSC_SF_0
_ZN9__gnu_cxxmiIPPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSB_SE_30320
_ZN9__gnu_cxxmiIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSE_SH_240
_ZN9__gnu_cxxmiIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSG_SJ_2078
_ZN9__gnu_cxxmiIPSt4pairIccESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_0
_ZN9__gnu_cxxmiIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSB_SE_1244
_ZN9__gnu_cxxmiIPSt4pairIifESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_172
_ZN9__gnu_cxxmiIPSt4pairIiiESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_1222
_ZN9__gnu_cxxmiIPSt4pairIlSt6vectorINSt7__cxx119sub_matchINS_17__normal_iteratorIPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEES2_ISH_SaISH_EEEENS5_IT_T0_E15difference_typeERKSN_SQ_0
_ZN9__gnu_cxxmiIPSt6threadSt6vectorIS1_SaIS1_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS9_SC_1236832
_ZN9__gnu_cxxmiIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_1272
_ZN9__gnu_cxxmiIPSt6vectorIiSaIiEES1_IS3_SaIS3_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_798
_ZN9__gnu_cxxmiIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSB_SE_0
_ZN9__gnu_cxxmiIPcSt6vectorIcSaIcEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS8_SB_0
_ZN9__gnu_cxxmiIPdSt6vectorIdSaIdEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS8_SB_10078
_ZN9__gnu_cxxmiIPiSt6vectorIiSaIiEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS8_SB_117646
_ZN9__gnu_cxxmiIPlSt6vectorIlSaIlEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS8_SB_38138
_ZN9__gnu_cxxmiIPmSt6vectorImSaImEEEENS_17__normal_iteratorIT_T0_E15difference_typeERKS8_SB_327916
_ZN9__gnu_cxxneIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_134563234
_ZN9__gnu_cxxneIPKN3c106IValueESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_0
_ZN9__gnu_cxxneIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEEbRKNS_17__normal_iteratorIT_T0_EESP_0
_ZN9__gnu_cxxneIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESH_384722
_ZN9__gnu_cxxneIPKNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_0
_ZN9__gnu_cxxneIPKNSt7__cxx119sub_matchINS_17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEEbRKNS3_IT_T0_EESM_0
_ZN9__gnu_cxxneIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEEbRKNS_17__normal_iteratorIT_T0_EESJ_1934
_ZN9__gnu_cxxneIPKSt4pairIccESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_0
_ZN9__gnu_cxxneIPKSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_752
_ZN9__gnu_cxxneIPKSt4pairIiiESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_3584
_ZN9__gnu_cxxneIPKSt6vectorIdSaIdEES1_IS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_640
_ZN9__gnu_cxxneIPKSt6vectorIfSaIfEES1_IS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_0
_ZN9__gnu_cxxneIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEbRKNS_17__normal_iteratorIT_T0_EESE_0
_ZN9__gnu_cxxneIPKcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESB_0
_ZN9__gnu_cxxneIPKhSt6vectorIhSaIhEEEEbRKNS_17__normal_iteratorIT_T0_EESB_0
_ZN9__gnu_cxxneIPKiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T0_EESB_192
_ZN9__gnu_cxxneIPN6loguru8CallbackESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_50756
_ZN9__gnu_cxxneIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEEbRKNS_17__normal_iteratorIT_T0_EESO_32
_ZN9__gnu_cxxneIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_55394
_ZN9__gnu_cxxneIPNSt7__cxx119sub_matchINS_17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEEbRKNS3_IT_T0_EESL_0
_ZN9__gnu_cxxneIPNSt8__detail6_StateIcEESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_0
_ZN9__gnu_cxxneIPPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESE_0
_ZN9__gnu_cxxneIPPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_105368652
_ZN9__gnu_cxxneIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_204
_ZN9__gnu_cxxneIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEEbRKNS_17__normal_iteratorIT_T0_EESI_3774
_ZN9__gnu_cxxneIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESt6vectorIS8_SaIS8_EEEEbRKNS_17__normal_iteratorIT_T0_EESI_32
_ZN9__gnu_cxxneIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_4062
_ZN9__gnu_cxxneIPSt4pairIifESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_178
_ZN9__gnu_cxxneIPSt4pairIiiESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_2174
_ZN9__gnu_cxxneIPSt4pairIlSt6vectorINSt7__cxx119sub_matchINS_17__normal_iteratorIPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEES2_ISH_SaISH_EEEEbRKNS5_IT_T0_EESP_0
_ZN9__gnu_cxxneIPSt6threadSt6vectorIS1_SaIS1_EEEEbRKNS_17__normal_iteratorIT_T0_EESB_2008544
_ZN9__gnu_cxxneIPSt6vectorIfSaIfEES1_IS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_6
_ZN9__gnu_cxxneIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEbRKNS_17__normal_iteratorIT_T0_EESD_0
_ZN9__gnu_cxxneIPcSt6vectorIcSaIcEEEEbRKNS_17__normal_iteratorIT_T0_EESA_0
_ZN9__gnu_cxxneIPdSt6vectorIdSaIdEEEEbRKNS_17__normal_iteratorIT_T0_EESA_4191346
_ZN9__gnu_cxxneIPiSt6vectorIiSaIiEEEEbRKNS_17__normal_iteratorIT_T0_EESA_12681120
_ZN9__gnu_cxxneIPmSt6vectorImSaImEEEEbRKNS_17__normal_iteratorIT_T0_EESA_9805136
_ZNK9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS2_SaIS2_EEEptEv0
_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEE4baseEv774472830
_ZNK9__gnu_cxx17__normal_iteratorIPKN3c106IValueESt6vectorIS2_SaIS2_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKN6loguru8CallbackESt6vectorIS2_SaIS2_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEE4baseEv1152
_ZNK9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEE4baseEv67853580
_ZNK9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS4_SaIS4_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS0_IPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISB_SaISB_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEE4baseEv5192
_ZNK9__gnu_cxx17__normal_iteratorIPKSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEE4baseEv480
_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEE4baseEv4348
_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIccESt6vectorIS2_SaIS2_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEE4baseEv2140
_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS2_SaIS2_EEE4baseEv7264
_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIlSt6vectorINSt7__cxx119sub_matchINS0_IPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEES2_ISG_SaISG_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKSt6vectorIdSaIdEES1_IS3_SaIS3_EEE4baseEv1280
_ZNK9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES1_IS3_SaIS3_EEE4baseEv12
_ZNK9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEE4baseEv16492
_ZNK9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEE4baseEv2929008
_ZNK9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEE4baseEv84202
_ZNK9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEE4baseEv20
_ZNK9__gnu_cxx17__normal_iteratorIPN2at6TensorESt6vectorIS2_SaIS2_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPN3c106IValueESt6vectorIS2_SaIS2_EEE4baseEv420678480
_ZNK9__gnu_cxx17__normal_iteratorIPN3c106SymIntESt6vectorIS2_SaIS2_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPN3c107complexIdEESt6vectorIS3_SaIS3_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPN3c108optionalIN2at6TensorEEESt6vectorIS5_SaIS5_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPN5Catch10Generators16GeneratorWrapperIPKcEESt6vectorIS6_SaIS6_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS2_SaIS2_EEE4baseEv101560
_ZNK9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEE4baseEv340
_ZNK9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEE4baseEv326626
_ZNK9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS4_SaIS4_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS0_IPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISB_SaISB_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPNSt8__detail6_StateIcEESt6vectorIS3_SaIS3_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEE4baseEv210858588
_ZNK9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEE4baseEv1848
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEE4baseEv15880
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESt6vectorIS8_SaIS8_EEE4baseEv64
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIccESt6vectorIS2_SaIS2_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEE4baseEv15554
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS2_SaIS2_EEE4baseEv1092
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIiiESt6vectorIS2_SaIS2_EEE4baseEv9236
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIlSt6vectorINSt7__cxx119sub_matchINS0_IPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEES2_ISG_SaISG_EEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEE4baseEv8964416
_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEE4baseEv5088
_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIfSaIfEES1_IS3_SaIS3_EEE4baseEv24
_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIiSaIiEES1_IS3_SaIS3_EEE4baseEv3192
_ZNK9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEE4baseEv0
_ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEE4baseEv8427364
_ZNK9__gnu_cxx17__normal_iteratorIPfSt6vectorIfSaIfEEE4baseEv5874324
_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEE4baseEv25790280
_ZNK9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEE4baseEv152552
_ZNK9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEE4baseEv22341152
_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv1068239738
_ZNK9__gnu_cxx17__normal_iteratorIPKN3c106IValueESt6vectorIS2_SaIS2_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEdeEv846057336
_ZNK9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS4_SaIS4_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS0_IPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISB_SaISB_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEdeEv1722
_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIccESt6vectorIS2_SaIS2_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEdeEv636
_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS2_SaIS2_EEEdeEv3072
_ZNK9__gnu_cxx17__normal_iteratorIPKSt6vectorIdSaIdEES1_IS3_SaIS3_EEEdeEv576
_ZNK9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES1_IS3_SaIS3_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPN3c106IValueESt6vectorIS2_SaIS2_EEEdeEv105276376
_ZNK9__gnu_cxx17__normal_iteratorIPN3c106SymIntESt6vectorIS2_SaIS2_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPN3c107complexIdEESt6vectorIS3_SaIS3_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPN3c108optionalIN2at6TensorEEESt6vectorIS5_SaIS5_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPN5Catch10Generators16GeneratorWrapperIPKcEESt6vectorIS6_SaIS6_EEEdeEv40
_ZNK9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS2_SaIS2_EEEdeEv47238
_ZNK9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEdeEv752
_ZNK9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEdeEv1933102
_ZNK9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS0_IPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISB_SaISB_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPNSt8__detail6_StateIcEESt6vectorIS3_SaIS3_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPPKN6loguru11EcEntryBaseESt6vectorIS4_SaIS4_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEdeEv68392916
_ZNK9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEdeEv680
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEdeEv12798
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESt6vectorIS8_SaIS8_EEEdeEv24
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIccESt6vectorIS2_SaIS2_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEdeEv12950
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS2_SaIS2_EEEdeEv1074
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIiiESt6vectorIS2_SaIS2_EEEdeEv3924
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIlSt6vectorINSt7__cxx119sub_matchINS0_IPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEES2_ISG_SaISG_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEdeEv3211468
_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEdeEv24670
_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIfSaIfEES1_IS3_SaIS3_EEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEdeEv5329294
_ZNK9__gnu_cxx17__normal_iteratorIPhSt6vectorIhSaIhEEEdeEv0
_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEdeEv13924002
_ZNK9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEdeEv40554
_ZNK9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEdeEv23964534
_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEmiEl108541140
_ZNK9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPN3c106IValueESt6vectorIS2_SaIS2_EEEmiEl105276376
_ZNK9__gnu_cxx17__normal_iteratorIPN3c106SymIntESt6vectorIS2_SaIS2_EEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPN3c107complexIdEESt6vectorIS3_SaIS3_EEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPN3c108optionalIN2at6TensorEEESt6vectorIS5_SaIS5_EEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPN5Catch10Generators16GeneratorWrapperIPKcEESt6vectorIS6_SaIS6_EEEmiEl40
_ZNK9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS2_SaIS2_EEEmiEl46
_ZNK9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEvEES5_ISF_SaISF_EEEmiEl720
_ZNK9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEmiEl5006
_ZNK9__gnu_cxx17__normal_iteratorIPNSt8__detail6_StateIcEESt6vectorIS3_SaIS3_EEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEmiEl606
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ESt6vectorIS8_SaIS8_EEEmiEl9300
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIccESt6vectorIS2_SaIS2_EEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEmiEl1152
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS2_SaIS2_EEEmiEl152
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIiiESt6vectorIS2_SaIS2_EEEmiEl2088
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIlSt6vectorINSt7__cxx119sub_matchINS0_IPKcNS3_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEES2_ISG_SaISG_EEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPSt6threadSt6vectorIS1_SaIS1_EEEmiEl1605734
_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEmiEl24670
_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEmiEl5756
_ZNK9__gnu_cxx17__normal_iteratorIPhSt6vectorIhSaIhEEEmiEl0
_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEmiEl1568816
_ZNK9__gnu_cxx17__normal_iteratorIPlSt6vectorIlSaIlEEEmiEl40554
_ZNK9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEmiEl124
_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEplEl125766
_ZNK9__gnu_cxx17__normal_iteratorIPN6loguru8CallbackESt6vectorIS2_SaIS2_EEEplEl0
_ZNK9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_SaIS6_EEEplEl2800
_ZNK9__gnu_cxx17__normal_iteratorIPNSt7__cxx119sub_matchINS0_IPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISB_SaISB_EEEplEl0
_ZNK9__gnu_cxx17__normal_iteratorIPPN8bayesnet4NodeESt6vectorIS3_SaIS3_EEEplEl32
_ZNK9__gnu_cxx17__normal_iteratorIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS3_EESt6vectorIS6_SaIS6_EEEplEl420
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIfS1_IiiEESt6vectorIS3_SaIS3_EEEplEl2694
_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIifESt6vectorIS2_SaIS2_EEEplEl102
_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIfSaIfEES1_IS3_SaIS3_EEEplEl6
_ZNK9__gnu_cxx17__normal_iteratorIPcSt6vectorIcSaIcEEEplEl0
_ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEplEl2174
_ZNK9__gnu_cxx17__normal_iteratorIPfSt6vectorIfSaIfEEEplEl9418
_ZNK9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEplEl108120
_ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEixEl1104
_ZNKSt13move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEdeEv2100
_ZNKSt13move_iteratorIPiE4baseEv8788
_ZNKSt13move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE4baseEv5276
_ZNKSt13move_iteratorIPiE4baseEv3512
_ZNSt13move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEppEv2100
_ZNSt13move_iteratorIPiEC2ES0_4588
_ZNSt13move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ES6_1076
_ZNSt13move_iteratorIPiEC2ES0_3512
_ZNSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEaSERKc0
_ZNSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEppEi0
_ZNSt20back_insert_iteratorISt6vectorIiSaIiEEEC2ERS2_31823476
_ZNSt20back_insert_iteratorIN3c104ListINS0_8optionalIN2at6TensorEEEEEEC2ERS6_31802436
_ZNSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2ERS5_0
_ZNSt20back_insert_iteratorISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEEC2ERSG_114
_ZNSt20back_insert_iteratorISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EEEC2ERS8_1240
_ZNSt20back_insert_iteratorISt6vectorIiSaIiEEEC2ERS2_5492
_ZNSt20back_insert_iteratorISt6vectorIlSaIlEEEC2ERS2_14194
_ZNSt20back_insert_iteratorISt6vectorIiSaIiEEEaSEOi58932390
_ZNSt20back_insert_iteratorIN3c104ListINS0_8optionalIN2at6TensorEEEEEEaSEOS5_58826532
_ZNSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEaSEOc0
_ZNSt20back_insert_iteratorISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEEaSEOSE_236
_ZNSt20back_insert_iteratorISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EEEaSEOS6_3636
_ZNSt20back_insert_iteratorISt6vectorIiSaIiEEEaSEOi75626
_ZNSt20back_insert_iteratorISt6vectorIlSaIlEEEaSEOl26360
_ZNSt20back_insert_iteratorISt6vectorIiSaIiEEEdeEv58932390
_ZNSt20back_insert_iteratorIN3c104ListINS0_8optionalIN2at6TensorEEEEEEdeEv58826532
_ZNSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEdeEv0
_ZNSt20back_insert_iteratorISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEEdeEv236
_ZNSt20back_insert_iteratorISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EEEdeEv3636
_ZNSt20back_insert_iteratorISt6vectorIiSaIiEEEdeEv75626
_ZNSt20back_insert_iteratorISt6vectorIlSaIlEEEdeEv26360
_ZNSt20back_insert_iteratorISt6vectorIiSaIiEEEppEv58932390
_ZNSt20back_insert_iteratorIN3c104ListINS0_8optionalIN2at6TensorEEEEEEppEv58826532
_ZNSt20back_insert_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEppEv0
_ZNSt20back_insert_iteratorISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEEppEv236
_ZNSt20back_insert_iteratorISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EEEppEv3636
_ZNSt20back_insert_iteratorISt6vectorIiSaIiEEEppEv75626
_ZNSt20back_insert_iteratorISt6vectorIlSaIlEEEppEv26360
_ZSt12__miter_baseIPiEDTcl12__miter_basecldtfp_4baseEEESt13move_iteratorIT_E3512
_ZSt12__niter_baseIPcSt6vectorIcSaIcEEET_N9__gnu_cxx17__normal_iteratorIS4_T0_EE147492
_ZSt12__niter_baseIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEES4_ISE_SaISE_EEET_N9__gnu_cxx17__normal_iteratorISJ_T0_EE0
_ZSt12__niter_baseIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS5_SaIS5_EEET_N9__gnu_cxx17__normal_iteratorISB_T0_EE276
_ZSt12__niter_baseIPKNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEET_NS3_ISI_T0_EE0
_ZSt12__niter_baseIPKPN8bayesnet4NodeESt6vectorIS2_SaIS2_EEET_N9__gnu_cxx17__normal_iteratorIS8_T0_EE5144
_ZSt12__niter_baseIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESt6vectorIS7_SaIS7_EEET_N9__gnu_cxx17__normal_iteratorISD_T0_EE48
_ZSt12__niter_baseIPKSt4pairIiiESt6vectorIS1_SaIS1_EEET_N9__gnu_cxx17__normal_iteratorIS7_T0_EE96
_ZSt12__niter_baseIPKSt6vectorIfSaIfEES0_IS2_SaIS2_EEET_N9__gnu_cxx17__normal_iteratorIS7_T0_EE12
_ZSt12__niter_baseIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET_N9__gnu_cxx17__normal_iteratorIS8_T0_EE0
_ZSt12__niter_baseIPKcSt6vectorIcSaIcEEET_N9__gnu_cxx17__normal_iteratorIS5_T0_EE0
_ZSt12__niter_baseIPKdSt6vectorIdSaIdEEET_N9__gnu_cxx17__normal_iteratorIS5_T0_EE16412
_ZSt12__niter_baseIPKfSt6vectorIfSaIfEEET_N9__gnu_cxx17__normal_iteratorIS5_T0_EE14912
_ZSt12__niter_baseIPKhSt6vectorIhSaIhEEET_N9__gnu_cxx17__normal_iteratorIS5_T0_EE0
_ZSt12__niter_baseIPKiSt6vectorIiSaIiEEET_N9__gnu_cxx17__normal_iteratorIS5_T0_EE48780
_ZSt12__niter_baseIPKlSt6vectorIlSaIlEEET_N9__gnu_cxx17__normal_iteratorIS5_T0_EE20
_ZSt12__niter_baseIPN6loguru8CallbackESt6vectorIS1_SaIS1_EEET_N9__gnu_cxx17__normal_iteratorIS6_T0_EE0
_ZSt12__niter_baseIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEES4_ISE_SaISE_EEET_N9__gnu_cxx17__normal_iteratorISI_T0_EE228
_ZSt12__niter_baseIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS5_SaIS5_EEET_N9__gnu_cxx17__normal_iteratorISA_T0_EE704
_ZSt12__niter_baseIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEET_NS3_ISH_T0_EE0
_ZSt12__niter_baseIPPN8bayesnet4NodeESt6vectorIS2_SaIS2_EEET_N9__gnu_cxx17__normal_iteratorIS7_T0_EE16
_ZSt12__niter_baseIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESt6vectorIS5_SaIS5_EEET_N9__gnu_cxx17__normal_iteratorISA_T0_EE240
_ZSt12__niter_baseIPSt4pairIfS0_IiiEESt6vectorIS2_SaIS2_EEET_N9__gnu_cxx17__normal_iteratorIS7_T0_EE2720
_ZSt12__niter_baseIPSt4pairIifESt6vectorIS1_SaIS1_EEET_N9__gnu_cxx17__normal_iteratorIS6_T0_EE152
_ZSt12__niter_baseIPSt6vectorIfSaIfEES0_IS2_SaIS2_EEET_N9__gnu_cxx17__normal_iteratorIS6_T0_EE12
_ZSt12__niter_baseIPcSt6vectorIcSaIcEEET_N9__gnu_cxx17__normal_iteratorIS4_T0_EE0
_ZSt12__niter_baseIPdSt6vectorIdSaIdEEET_N9__gnu_cxx17__normal_iteratorIS4_T0_EE1780
_ZSt12__niter_baseIPfSt6vectorIfSaIfEEET_N9__gnu_cxx17__normal_iteratorIS4_T0_EE12576
_ZSt12__niter_baseIPiSt6vectorIiSaIiEEET_N9__gnu_cxx17__normal_iteratorIS4_T0_EE43364
_ZSt13back_inserterISt6vectorIiSaIiEEESt20back_insert_iteratorIT_ERS4_31823476
_ZSt13back_inserterIN3c104ListINS0_8optionalIN2at6TensorEEEEEESt20back_insert_iteratorIT_ERS8_31802436
_ZSt13back_inserterINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESt20back_insert_iteratorIT_ERS7_0
_ZSt13back_inserterISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEESt20back_insert_iteratorIT_ERSI_114
_ZSt13back_inserterISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS6_EEESt20back_insert_iteratorIT_ERSA_1240
_ZSt13back_inserterISt6vectorIiSaIiEEESt20back_insert_iteratorIT_ERS4_5492
_ZSt13back_inserterISt6vectorIlSaIlEEESt20back_insert_iteratorIT_ERS4_14194
_ZSt18make_move_iteratorIPiESt13move_iteratorIT_ES2_804
_ZSt18make_move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESt13move_iteratorIT_ES8_316
_ZSt18make_move_iteratorIPiESt13move_iteratorIT_ES2_488
_ZSt32__make_move_if_noexcept_iteratorIiSt13move_iteratorIPiEET0_PT_3784
_ZSt32__make_move_if_noexcept_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13move_iteratorIPS5_EET0_PT_760
_ZSt32__make_move_if_noexcept_iteratorIiSt13move_iteratorIPiEET0_PT_3024
_ZSteqIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEbRKSt13move_iteratorIT_ESB_2638
_ZStneIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEbRKSt13move_iteratorIT_ESB_2638
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_iterator.h.gcov.html b/html/usr/include/c++/13/bits/stl_iterator.h.gcov.html new file mode 100644 index 0000000..2faf4c3 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_iterator.h.gcov.html @@ -0,0 +1,3082 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_iterator.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_iterator.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:90.9 %7770
Test Date:2024-04-30 13:17:26Functions:62.8 %430270
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Iterators -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1996-1998
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/stl_iterator.h
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{iterator}
+      54              :  *
+      55              :  *  This file implements reverse_iterator, back_insert_iterator,
+      56              :  *  front_insert_iterator, insert_iterator, __normal_iterator, and their
+      57              :  *  supporting functions and overloaded operators.
+      58              :  */
+      59              : 
+      60              : #ifndef _STL_ITERATOR_H
+      61              : #define _STL_ITERATOR_H 1
+      62              : 
+      63              : #include <bits/cpp_type_traits.h>
+      64              : #include <bits/stl_iterator_base_types.h>
+      65              : #include <ext/type_traits.h>
+      66              : #include <bits/move.h>
+      67              : #include <bits/ptr_traits.h>
+      68              : 
+      69              : #if __cplusplus >= 201103L
+      70              : # include <type_traits>
+      71              : #endif
+      72              : 
+      73              : #if __cplusplus > 201703L
+      74              : # define __cpp_lib_array_constexpr 201811L
+      75              : # define __cpp_lib_constexpr_iterator 201811L
+      76              : #elif __cplusplus == 201703L
+      77              : # define __cpp_lib_array_constexpr 201803L
+      78              : #endif
+      79              : 
+      80              : #if __cplusplus >= 202002L
+      81              : # include <compare>
+      82              : # include <new>
+      83              : # include <bits/exception_defines.h>
+      84              : # include <bits/iterator_concepts.h>
+      85              : # include <bits/stl_construct.h>
+      86              : #endif
+      87              : 
+      88              : namespace std _GLIBCXX_VISIBILITY(default)
+      89              : {
+      90              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      91              : 
+      92              :   /**
+      93              :    * @addtogroup iterators
+      94              :    * @{
+      95              :    */
+      96              : 
+      97              : #if __cpp_lib_concepts
+      98              :   namespace __detail
+      99              :   {
+     100              :     // Weaken iterator_category _Cat to _Limit if it is derived from that,
+     101              :     // otherwise use _Otherwise.
+     102              :     template<typename _Cat, typename _Limit, typename _Otherwise = _Cat>
+     103              :       using __clamp_iter_cat
+     104              :         = __conditional_t<derived_from<_Cat, _Limit>, _Limit, _Otherwise>;
+     105              : 
+     106              :     template<typename _Tp, typename _Up>
+     107              :       concept __different_from
+     108              :         = !same_as<remove_cvref_t<_Tp>, remove_cvref_t<_Up>>;
+     109              :   }
+     110              : #endif
+     111              : 
+     112              : // Ignore warnings about std::iterator.
+     113              : #pragma GCC diagnostic push
+     114              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+     115              : 
+     116              :   // 24.4.1 Reverse iterators
+     117              :   /**
+     118              :    *  Bidirectional and random access iterators have corresponding reverse
+     119              :    *  %iterator adaptors that iterate through the data structure in the
+     120              :    *  opposite direction.  They have the same signatures as the corresponding
+     121              :    *  iterators.  The fundamental relation between a reverse %iterator and its
+     122              :    *  corresponding %iterator @c i is established by the identity:
+     123              :    *  @code
+     124              :    *      &*(reverse_iterator(i)) == &*(i - 1)
+     125              :    *  @endcode
+     126              :    *
+     127              :    *  <em>This mapping is dictated by the fact that while there is always a
+     128              :    *  pointer past the end of an array, there might not be a valid pointer
+     129              :    *  before the beginning of an array.</em> [24.4.1]/1,2
+     130              :    *
+     131              :    *  Reverse iterators can be tricky and surprising at first.  Their
+     132              :    *  semantics make sense, however, and the trickiness is a side effect of
+     133              :    *  the requirement that the iterators must be safe.
+     134              :   */
+     135              :   template<typename _Iterator>
+     136              :     class reverse_iterator
+     137              :     : public iterator<typename iterator_traits<_Iterator>::iterator_category,
+     138              :                       typename iterator_traits<_Iterator>::value_type,
+     139              :                       typename iterator_traits<_Iterator>::difference_type,
+     140              :                       typename iterator_traits<_Iterator>::pointer,
+     141              :                       typename iterator_traits<_Iterator>::reference>
+     142              :     {
+     143              :       template<typename _Iter>
+     144              :         friend class reverse_iterator;
+     145              : 
+     146              : #if __cpp_lib_concepts
+     147              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     148              :       // 3435. three_way_comparable_with<reverse_iterator<int*>, [...]>
+     149              :       template<typename _Iter>
+     150              :         static constexpr bool __convertible = !is_same_v<_Iter, _Iterator>
+     151              :             && convertible_to<const _Iter&, _Iterator>;
+     152              : #endif
+     153              : 
+     154              :     protected:
+     155              :       _Iterator current;
+     156              : 
+     157              :       typedef iterator_traits<_Iterator>          __traits_type;
+     158              : 
+     159              :     public:
+     160              :       typedef _Iterator                                 iterator_type;
+     161              :       typedef typename __traits_type::pointer           pointer;
+     162              : #if ! __cpp_lib_concepts
+     163              :       typedef typename __traits_type::difference_type   difference_type;
+     164              :       typedef typename __traits_type::reference         reference;
+     165              : #else
+     166              :       using iterator_concept
+     167              :         = __conditional_t<random_access_iterator<_Iterator>,
+     168              :                           random_access_iterator_tag,
+     169              :                           bidirectional_iterator_tag>;
+     170              :       using iterator_category
+     171              :         = __detail::__clamp_iter_cat<typename __traits_type::iterator_category,
+     172              :                                      random_access_iterator_tag>;
+     173              :       using value_type = iter_value_t<_Iterator>;
+     174              :       using difference_type = iter_difference_t<_Iterator>;
+     175              :       using reference = iter_reference_t<_Iterator>;
+     176              : #endif
+     177              : 
+     178              :       /**
+     179              :        *  The default constructor value-initializes member @p current.
+     180              :        *  If it is a pointer, that means it is zero-initialized.
+     181              :       */
+     182              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     183              :       // 235 No specification of default ctor for reverse_iterator
+     184              :       // 1012. reverse_iterator default ctor should value initialize
+     185              :       _GLIBCXX17_CONSTEXPR
+     186              :       reverse_iterator()
+     187              :       _GLIBCXX_NOEXCEPT_IF(noexcept(_Iterator()))
+     188              :       : current()
+     189              :       { }
+     190              : 
+     191              :       /**
+     192              :        *  This %iterator will move in the opposite direction that @p x does.
+     193              :       */
+     194              :       explicit _GLIBCXX17_CONSTEXPR
+     195              :       reverse_iterator(iterator_type __x)
+     196              :       _GLIBCXX_NOEXCEPT_IF(noexcept(_Iterator(__x)))
+     197              :       : current(__x)
+     198              :       { }
+     199              : 
+     200              :       /**
+     201              :        *  The copy constructor is normal.
+     202              :       */
+     203              :       _GLIBCXX17_CONSTEXPR
+     204              :       reverse_iterator(const reverse_iterator& __x)
+     205              :       _GLIBCXX_NOEXCEPT_IF(noexcept(_Iterator(__x.current)))
+     206              :       : current(__x.current)
+     207              :       { }
+     208              : 
+     209              : #if __cplusplus >= 201103L
+     210              :       reverse_iterator& operator=(const reverse_iterator&) = default;
+     211              : #endif
+     212              : 
+     213              :       /**
+     214              :        *  A %reverse_iterator across other types can be copied if the
+     215              :        *  underlying %iterator can be converted to the type of @c current.
+     216              :       */
+     217              :       template<typename _Iter>
+     218              : #if __cpp_lib_concepts
+     219              :         requires __convertible<_Iter>
+     220              : #endif
+     221              :         _GLIBCXX17_CONSTEXPR
+     222              :         reverse_iterator(const reverse_iterator<_Iter>& __x)
+     223              :         _GLIBCXX_NOEXCEPT_IF(noexcept(_Iterator(__x.current)))
+     224              :         : current(__x.current)
+     225              :         { }
+     226              : 
+     227              : #if __cplusplus >= 201103L
+     228              :       template<typename _Iter>
+     229              : #if __cpp_lib_concepts
+     230              :         requires __convertible<_Iter>
+     231              :           && assignable_from<_Iterator&, const _Iter&>
+     232              : #endif
+     233              :         _GLIBCXX17_CONSTEXPR
+     234              :         reverse_iterator&
+     235              :         operator=(const reverse_iterator<_Iter>& __x)
+     236              :         _GLIBCXX_NOEXCEPT_IF(noexcept(current = __x.current))
+     237              :         {
+     238              :           current = __x.current;
+     239              :           return *this;
+     240              :         }
+     241              : #endif
+     242              : 
+     243              :       /**
+     244              :        *  @return  @c current, the %iterator used for underlying work.
+     245              :       */
+     246              :       _GLIBCXX_NODISCARD
+     247              :       _GLIBCXX17_CONSTEXPR iterator_type
+     248              :       base() const
+     249              :       _GLIBCXX_NOEXCEPT_IF(noexcept(_Iterator(current)))
+     250              :       { return current; }
+     251              : 
+     252              :       /**
+     253              :        *  @return  A reference to the value at @c --current
+     254              :        *
+     255              :        *  This requires that @c --current is dereferenceable.
+     256              :        *
+     257              :        *  @warning This implementation requires that for an iterator of the
+     258              :        *           underlying iterator type, @c x, a reference obtained by
+     259              :        *           @c *x remains valid after @c x has been modified or
+     260              :        *           destroyed. This is a bug: http://gcc.gnu.org/PR51823
+     261              :       */
+     262              :       _GLIBCXX_NODISCARD
+     263              :       _GLIBCXX17_CONSTEXPR reference
+     264              :       operator*() const
+     265              :       {
+     266              :         _Iterator __tmp = current;
+     267              :         return *--__tmp;
+     268              :       }
+     269              : 
+     270              :       /**
+     271              :        *  @return  A pointer to the value at @c --current
+     272              :        *
+     273              :        *  This requires that @c --current is dereferenceable.
+     274              :       */
+     275              :       _GLIBCXX_NODISCARD
+     276              :       _GLIBCXX17_CONSTEXPR pointer
+     277              :       operator->() const
+     278              : #if __cplusplus > 201703L && __cpp_concepts >= 201907L
+     279              :       requires is_pointer_v<_Iterator>
+     280              :         || requires(const _Iterator __i) { __i.operator->(); }
+     281              : #endif
+     282              :       {
+     283              :         // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     284              :         // 1052. operator-> should also support smart pointers
+     285              :         _Iterator __tmp = current;
+     286              :         --__tmp;
+     287              :         return _S_to_pointer(__tmp);
+     288              :       }
+     289              : 
+     290              :       /**
+     291              :        *  @return  @c *this
+     292              :        *
+     293              :        *  Decrements the underlying iterator.
+     294              :       */
+     295              :       _GLIBCXX17_CONSTEXPR reverse_iterator&
+     296              :       operator++()
+     297              :       {
+     298              :         --current;
+     299              :         return *this;
+     300              :       }
+     301              : 
+     302              :       /**
+     303              :        *  @return  The original value of @c *this
+     304              :        *
+     305              :        *  Decrements the underlying iterator.
+     306              :       */
+     307              :       _GLIBCXX17_CONSTEXPR reverse_iterator
+     308              :       operator++(int)
+     309              :       {
+     310              :         reverse_iterator __tmp = *this;
+     311              :         --current;
+     312              :         return __tmp;
+     313              :       }
+     314              : 
+     315              :       /**
+     316              :        *  @return  @c *this
+     317              :        *
+     318              :        *  Increments the underlying iterator.
+     319              :       */
+     320              :       _GLIBCXX17_CONSTEXPR reverse_iterator&
+     321              :       operator--()
+     322              :       {
+     323              :         ++current;
+     324              :         return *this;
+     325              :       }
+     326              : 
+     327              :       /**
+     328              :        *  @return  A reverse_iterator with the previous value of @c *this
+     329              :        *
+     330              :        *  Increments the underlying iterator.
+     331              :       */
+     332              :       _GLIBCXX17_CONSTEXPR reverse_iterator
+     333              :       operator--(int)
+     334              :       {
+     335              :         reverse_iterator __tmp = *this;
+     336              :         ++current;
+     337              :         return __tmp;
+     338              :       }
+     339              : 
+     340              :       /**
+     341              :        *  @return  A reverse_iterator that refers to @c current - @a __n
+     342              :        *
+     343              :        *  The underlying iterator must be a Random Access Iterator.
+     344              :       */
+     345              :       _GLIBCXX_NODISCARD
+     346              :       _GLIBCXX17_CONSTEXPR reverse_iterator
+     347              :       operator+(difference_type __n) const
+     348              :       { return reverse_iterator(current - __n); }
+     349              : 
+     350              :       /**
+     351              :        *  @return  *this
+     352              :        *
+     353              :        *  Moves the underlying iterator backwards @a __n steps.
+     354              :        *  The underlying iterator must be a Random Access Iterator.
+     355              :       */
+     356              :       _GLIBCXX17_CONSTEXPR reverse_iterator&
+     357              :       operator+=(difference_type __n)
+     358              :       {
+     359              :         current -= __n;
+     360              :         return *this;
+     361              :       }
+     362              : 
+     363              :       /**
+     364              :        *  @return  A reverse_iterator that refers to @c current - @a __n
+     365              :        *
+     366              :        *  The underlying iterator must be a Random Access Iterator.
+     367              :       */
+     368              :       _GLIBCXX_NODISCARD
+     369              :       _GLIBCXX17_CONSTEXPR reverse_iterator
+     370              :       operator-(difference_type __n) const
+     371              :       { return reverse_iterator(current + __n); }
+     372              : 
+     373              :       /**
+     374              :        *  @return  *this
+     375              :        *
+     376              :        *  Moves the underlying iterator forwards @a __n steps.
+     377              :        *  The underlying iterator must be a Random Access Iterator.
+     378              :       */
+     379              :       _GLIBCXX17_CONSTEXPR reverse_iterator&
+     380              :       operator-=(difference_type __n)
+     381              :       {
+     382              :         current += __n;
+     383              :         return *this;
+     384              :       }
+     385              : 
+     386              :       /**
+     387              :        *  @return  The value at @c current - @a __n - 1
+     388              :        *
+     389              :        *  The underlying iterator must be a Random Access Iterator.
+     390              :       */
+     391              :       _GLIBCXX_NODISCARD
+     392              :       _GLIBCXX17_CONSTEXPR reference
+     393              :       operator[](difference_type __n) const
+     394              :       { return *(*this + __n); }
+     395              : 
+     396              : #if __cplusplus > 201703L && __cpp_lib_concepts
+     397              :       [[nodiscard]]
+     398              :       friend constexpr iter_rvalue_reference_t<_Iterator>
+     399              :       iter_move(const reverse_iterator& __i)
+     400              :       noexcept(is_nothrow_copy_constructible_v<_Iterator>
+     401              :                && noexcept(ranges::iter_move(--std::declval<_Iterator&>())))
+     402              :       {
+     403              :         auto __tmp = __i.base();
+     404              :         return ranges::iter_move(--__tmp);
+     405              :       }
+     406              : 
+     407              :       template<indirectly_swappable<_Iterator> _Iter2>
+     408              :         friend constexpr void
+     409              :         iter_swap(const reverse_iterator& __x,
+     410              :                   const reverse_iterator<_Iter2>& __y)
+     411              :         noexcept(is_nothrow_copy_constructible_v<_Iterator>
+     412              :                  && is_nothrow_copy_constructible_v<_Iter2>
+     413              :                  && noexcept(ranges::iter_swap(--std::declval<_Iterator&>(),
+     414              :                                                --std::declval<_Iter2&>())))
+     415              :         {
+     416              :           auto __xtmp = __x.base();
+     417              :           auto __ytmp = __y.base();
+     418              :           ranges::iter_swap(--__xtmp, --__ytmp);
+     419              :         }
+     420              : #endif
+     421              : 
+     422              :     private:
+     423              :       template<typename _Tp>
+     424              :         static _GLIBCXX17_CONSTEXPR _Tp*
+     425              :         _S_to_pointer(_Tp* __p)
+     426              :         { return __p; }
+     427              : 
+     428              :       template<typename _Tp>
+     429              :         static _GLIBCXX17_CONSTEXPR pointer
+     430              :         _S_to_pointer(_Tp __t)
+     431              :         { return __t.operator->(); }
+     432              :     };
+     433              : 
+     434              :   ///@{
+     435              :   /**
+     436              :    *  @param  __x  A %reverse_iterator.
+     437              :    *  @param  __y  A %reverse_iterator.
+     438              :    *  @return  A simple bool.
+     439              :    *
+     440              :    *  Reverse iterators forward comparisons to their underlying base()
+     441              :    *  iterators.
+     442              :    *
+     443              :   */
+     444              : #if __cplusplus <= 201703L || ! defined __cpp_lib_concepts
+     445              :   template<typename _Iterator>
+     446              :     _GLIBCXX_NODISCARD
+     447              :     inline _GLIBCXX17_CONSTEXPR bool
+     448              :     operator==(const reverse_iterator<_Iterator>& __x,
+     449              :                const reverse_iterator<_Iterator>& __y)
+     450              :     { return __x.base() == __y.base(); }
+     451              : 
+     452              :   template<typename _Iterator>
+     453              :     _GLIBCXX_NODISCARD
+     454              :     inline _GLIBCXX17_CONSTEXPR bool
+     455              :     operator<(const reverse_iterator<_Iterator>& __x,
+     456              :               const reverse_iterator<_Iterator>& __y)
+     457              :     { return __y.base() < __x.base(); }
+     458              : 
+     459              :   template<typename _Iterator>
+     460              :     _GLIBCXX_NODISCARD
+     461              :     inline _GLIBCXX17_CONSTEXPR bool
+     462              :     operator!=(const reverse_iterator<_Iterator>& __x,
+     463              :                const reverse_iterator<_Iterator>& __y)
+     464              :     { return !(__x == __y); }
+     465              : 
+     466              :   template<typename _Iterator>
+     467              :     _GLIBCXX_NODISCARD
+     468              :     inline _GLIBCXX17_CONSTEXPR bool
+     469              :     operator>(const reverse_iterator<_Iterator>& __x,
+     470              :               const reverse_iterator<_Iterator>& __y)
+     471              :     { return __y < __x; }
+     472              : 
+     473              :   template<typename _Iterator>
+     474              :     _GLIBCXX_NODISCARD
+     475              :     inline _GLIBCXX17_CONSTEXPR bool
+     476              :     operator<=(const reverse_iterator<_Iterator>& __x,
+     477              :                const reverse_iterator<_Iterator>& __y)
+     478              :     { return !(__y < __x); }
+     479              : 
+     480              :   template<typename _Iterator>
+     481              :     _GLIBCXX_NODISCARD
+     482              :     inline _GLIBCXX17_CONSTEXPR bool
+     483              :     operator>=(const reverse_iterator<_Iterator>& __x,
+     484              :                const reverse_iterator<_Iterator>& __y)
+     485              :     { return !(__x < __y); }
+     486              : 
+     487              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     488              :   // DR 280. Comparison of reverse_iterator to const reverse_iterator.
+     489              : 
+     490              :   template<typename _IteratorL, typename _IteratorR>
+     491              :     _GLIBCXX_NODISCARD
+     492              :     inline _GLIBCXX17_CONSTEXPR bool
+     493              :     operator==(const reverse_iterator<_IteratorL>& __x,
+     494              :                const reverse_iterator<_IteratorR>& __y)
+     495              :     { return __x.base() == __y.base(); }
+     496              : 
+     497              :   template<typename _IteratorL, typename _IteratorR>
+     498              :     _GLIBCXX_NODISCARD
+     499              :     inline _GLIBCXX17_CONSTEXPR bool
+     500              :     operator<(const reverse_iterator<_IteratorL>& __x,
+     501              :               const reverse_iterator<_IteratorR>& __y)
+     502              :     { return __x.base() > __y.base(); }
+     503              : 
+     504              :   template<typename _IteratorL, typename _IteratorR>
+     505              :     _GLIBCXX_NODISCARD
+     506              :     inline _GLIBCXX17_CONSTEXPR bool
+     507              :     operator!=(const reverse_iterator<_IteratorL>& __x,
+     508              :                const reverse_iterator<_IteratorR>& __y)
+     509              :     { return __x.base() != __y.base(); }
+     510              : 
+     511              :   template<typename _IteratorL, typename _IteratorR>
+     512              :     _GLIBCXX_NODISCARD
+     513              :     inline _GLIBCXX17_CONSTEXPR bool
+     514              :     operator>(const reverse_iterator<_IteratorL>& __x,
+     515              :               const reverse_iterator<_IteratorR>& __y)
+     516              :     { return __x.base() < __y.base(); }
+     517              : 
+     518              :   template<typename _IteratorL, typename _IteratorR>
+     519              :     inline _GLIBCXX17_CONSTEXPR bool
+     520              :     operator<=(const reverse_iterator<_IteratorL>& __x,
+     521              :                const reverse_iterator<_IteratorR>& __y)
+     522              :     { return __x.base() >= __y.base(); }
+     523              : 
+     524              :   template<typename _IteratorL, typename _IteratorR>
+     525              :     _GLIBCXX_NODISCARD
+     526              :     inline _GLIBCXX17_CONSTEXPR bool
+     527              :     operator>=(const reverse_iterator<_IteratorL>& __x,
+     528              :                const reverse_iterator<_IteratorR>& __y)
+     529              :     { return __x.base() <= __y.base(); }
+     530              : #else // C++20
+     531              :   template<typename _IteratorL, typename _IteratorR>
+     532              :     [[nodiscard]]
+     533              :     constexpr bool
+     534              :     operator==(const reverse_iterator<_IteratorL>& __x,
+     535              :                const reverse_iterator<_IteratorR>& __y)
+     536              :     requires requires { { __x.base() == __y.base() } -> convertible_to<bool>; }
+     537              :     { return __x.base() == __y.base(); }
+     538              : 
+     539              :   template<typename _IteratorL, typename _IteratorR>
+     540              :     [[nodiscard]]
+     541              :     constexpr bool
+     542              :     operator!=(const reverse_iterator<_IteratorL>& __x,
+     543              :                const reverse_iterator<_IteratorR>& __y)
+     544              :     requires requires { { __x.base() != __y.base() } -> convertible_to<bool>; }
+     545              :     { return __x.base() != __y.base(); }
+     546              : 
+     547              :   template<typename _IteratorL, typename _IteratorR>
+     548              :     [[nodiscard]]
+     549              :     constexpr bool
+     550              :     operator<(const reverse_iterator<_IteratorL>& __x,
+     551              :               const reverse_iterator<_IteratorR>& __y)
+     552              :     requires requires { { __x.base() > __y.base() } -> convertible_to<bool>; }
+     553              :     { return __x.base() > __y.base(); }
+     554              : 
+     555              :   template<typename _IteratorL, typename _IteratorR>
+     556              :     [[nodiscard]]
+     557              :     constexpr bool
+     558              :     operator>(const reverse_iterator<_IteratorL>& __x,
+     559              :               const reverse_iterator<_IteratorR>& __y)
+     560              :     requires requires { { __x.base() < __y.base() } -> convertible_to<bool>; }
+     561              :     { return __x.base() < __y.base(); }
+     562              : 
+     563              :   template<typename _IteratorL, typename _IteratorR>
+     564              :     [[nodiscard]]
+     565              :     constexpr bool
+     566              :     operator<=(const reverse_iterator<_IteratorL>& __x,
+     567              :                const reverse_iterator<_IteratorR>& __y)
+     568              :     requires requires { { __x.base() >= __y.base() } -> convertible_to<bool>; }
+     569              :     { return __x.base() >= __y.base(); }
+     570              : 
+     571              :   template<typename _IteratorL, typename _IteratorR>
+     572              :     [[nodiscard]]
+     573              :     constexpr bool
+     574              :     operator>=(const reverse_iterator<_IteratorL>& __x,
+     575              :                const reverse_iterator<_IteratorR>& __y)
+     576              :     requires requires { { __x.base() <= __y.base() } -> convertible_to<bool>; }
+     577              :     { return __x.base() <= __y.base(); }
+     578              : 
+     579              :   template<typename _IteratorL,
+     580              :            three_way_comparable_with<_IteratorL> _IteratorR>
+     581              :     [[nodiscard]]
+     582              :     constexpr compare_three_way_result_t<_IteratorL, _IteratorR>
+     583              :     operator<=>(const reverse_iterator<_IteratorL>& __x,
+     584              :                 const reverse_iterator<_IteratorR>& __y)
+     585              :     { return __y.base() <=> __x.base(); }
+     586              : 
+     587              :   // Additional, non-standard overloads to avoid ambiguities with greedy,
+     588              :   // unconstrained overloads in associated namespaces.
+     589              : 
+     590              :   template<typename _Iterator>
+     591              :     [[nodiscard]]
+     592              :     constexpr bool
+     593              :     operator==(const reverse_iterator<_Iterator>& __x,
+     594              :                const reverse_iterator<_Iterator>& __y)
+     595              :     requires requires { { __x.base() == __y.base() } -> convertible_to<bool>; }
+     596              :     { return __x.base() == __y.base(); }
+     597              : 
+     598              :   template<three_way_comparable _Iterator>
+     599              :     [[nodiscard]]
+     600              :     constexpr compare_three_way_result_t<_Iterator, _Iterator>
+     601              :     operator<=>(const reverse_iterator<_Iterator>& __x,
+     602              :                 const reverse_iterator<_Iterator>& __y)
+     603              :     { return __y.base() <=> __x.base(); }
+     604              : #endif // C++20
+     605              :   ///@}
+     606              : 
+     607              : #if __cplusplus < 201103L
+     608              :   template<typename _Iterator>
+     609              :     inline typename reverse_iterator<_Iterator>::difference_type
+     610              :     operator-(const reverse_iterator<_Iterator>& __x,
+     611              :               const reverse_iterator<_Iterator>& __y)
+     612              :     { return __y.base() - __x.base(); }
+     613              : 
+     614              :   template<typename _IteratorL, typename _IteratorR>
+     615              :     inline typename reverse_iterator<_IteratorL>::difference_type
+     616              :     operator-(const reverse_iterator<_IteratorL>& __x,
+     617              :               const reverse_iterator<_IteratorR>& __y)
+     618              :     { return __y.base() - __x.base(); }
+     619              : #else
+     620              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     621              :   // DR 685. reverse_iterator/move_iterator difference has invalid signatures
+     622              :   template<typename _IteratorL, typename _IteratorR>
+     623              :     [[__nodiscard__]]
+     624              :     inline _GLIBCXX17_CONSTEXPR auto
+     625              :     operator-(const reverse_iterator<_IteratorL>& __x,
+     626              :               const reverse_iterator<_IteratorR>& __y)
+     627              :     -> decltype(__y.base() - __x.base())
+     628              :     { return __y.base() - __x.base(); }
+     629              : #endif
+     630              : 
+     631              :   template<typename _Iterator>
+     632              :     _GLIBCXX_NODISCARD
+     633              :     inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Iterator>
+     634              :     operator+(typename reverse_iterator<_Iterator>::difference_type __n,
+     635              :               const reverse_iterator<_Iterator>& __x)
+     636              :     { return reverse_iterator<_Iterator>(__x.base() - __n); }
+     637              : 
+     638              : #if __cplusplus >= 201103L
+     639              :   // Same as C++14 make_reverse_iterator but used in C++11 mode too.
+     640              :   template<typename _Iterator>
+     641              :     inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Iterator>
+     642              :     __make_reverse_iterator(_Iterator __i)
+     643              :     { return reverse_iterator<_Iterator>(__i); }
+     644              : 
+     645              : # if __cplusplus >= 201402L
+     646              : #  define __cpp_lib_make_reverse_iterator 201402L
+     647              : 
+     648              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     649              :   // DR 2285. make_reverse_iterator
+     650              :   /// Generator function for reverse_iterator.
+     651              :   template<typename _Iterator>
+     652              :     [[__nodiscard__]]
+     653              :     inline _GLIBCXX17_CONSTEXPR reverse_iterator<_Iterator>
+     654              :     make_reverse_iterator(_Iterator __i)
+     655              :     { return reverse_iterator<_Iterator>(__i); }
+     656              : 
+     657              : #  if __cplusplus > 201703L && defined __cpp_lib_concepts
+     658              :   template<typename _Iterator1, typename _Iterator2>
+     659              :     requires (!sized_sentinel_for<_Iterator1, _Iterator2>)
+     660              :     inline constexpr bool
+     661              :     disable_sized_sentinel_for<reverse_iterator<_Iterator1>,
+     662              :                                reverse_iterator<_Iterator2>> = true;
+     663              : #  endif // C++20
+     664              : # endif // C++14
+     665              : 
+     666              :   template<typename _Iterator>
+     667              :     _GLIBCXX20_CONSTEXPR
+     668              :     auto
+     669              :     __niter_base(reverse_iterator<_Iterator> __it)
+     670              :     -> decltype(__make_reverse_iterator(__niter_base(__it.base())))
+     671              :     { return __make_reverse_iterator(__niter_base(__it.base())); }
+     672              : 
+     673              :   template<typename _Iterator>
+     674              :     struct __is_move_iterator<reverse_iterator<_Iterator> >
+     675              :       : __is_move_iterator<_Iterator>
+     676              :     { };
+     677              : 
+     678              :   template<typename _Iterator>
+     679              :     _GLIBCXX20_CONSTEXPR
+     680              :     auto
+     681              :     __miter_base(reverse_iterator<_Iterator> __it)
+     682              :     -> decltype(__make_reverse_iterator(__miter_base(__it.base())))
+     683              :     { return __make_reverse_iterator(__miter_base(__it.base())); }
+     684              : #endif // C++11
+     685              : 
+     686              :   // 24.4.2.2.1 back_insert_iterator
+     687              :   /**
+     688              :    *  @brief  Turns assignment into insertion.
+     689              :    *
+     690              :    *  These are output iterators, constructed from a container-of-T.
+     691              :    *  Assigning a T to the iterator appends it to the container using
+     692              :    *  push_back.
+     693              :    *
+     694              :    *  Tip:  Using the back_inserter function to create these iterators can
+     695              :    *  save typing.
+     696              :   */
+     697              :   template<typename _Container>
+     698              :     class back_insert_iterator
+     699              :     : public iterator<output_iterator_tag, void, void, void, void>
+     700              :     {
+     701              :     protected:
+     702              :       _Container* container;
+     703              : 
+     704              :     public:
+     705              :       /// A nested typedef for the type of whatever container you used.
+     706              :       typedef _Container          container_type;
+     707              : #if __cplusplus > 201703L
+     708              :       using difference_type = ptrdiff_t;
+     709              : #endif
+     710              : 
+     711              :       /// The only way to create this %iterator is with a container.
+     712              :       explicit _GLIBCXX20_CONSTEXPR
+     713     31823476 :       back_insert_iterator(_Container& __x)
+     714     31823476 :       : container(std::__addressof(__x)) { }
+     715              : 
+     716              :       /**
+     717              :        *  @param  __value  An instance of whatever type
+     718              :        *                 container_type::const_reference is; presumably a
+     719              :        *                 reference-to-const T for container<T>.
+     720              :        *  @return  This %iterator, for chained operations.
+     721              :        *
+     722              :        *  This kind of %iterator doesn't really have a @a position in the
+     723              :        *  container (you can think of the position as being permanently at
+     724              :        *  the end, if you like).  Assigning a value to the %iterator will
+     725              :        *  always append the value to the end of the container.
+     726              :       */
+     727              : #if __cplusplus < 201103L
+     728              :       back_insert_iterator&
+     729              :       operator=(typename _Container::const_reference __value)
+     730              :       {
+     731              :         container->push_back(__value);
+     732              :         return *this;
+     733              :       }
+     734              : #else
+     735              :       _GLIBCXX20_CONSTEXPR
+     736              :       back_insert_iterator&
+     737            0 :       operator=(const typename _Container::value_type& __value)
+     738              :       {
+     739            0 :         container->push_back(__value);
+     740            0 :         return *this;
+     741              :       }
+     742              : 
+     743              :       _GLIBCXX20_CONSTEXPR
+     744              :       back_insert_iterator&
+     745     58932390 :       operator=(typename _Container::value_type&& __value)
+     746              :       {
+     747     58932390 :         container->push_back(std::move(__value));
+     748     58932390 :         return *this;
+     749              :       }
+     750              : #endif
+     751              : 
+     752              :       /// Simply returns *this.
+     753              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     754              :       back_insert_iterator&
+     755     58932390 :       operator*()
+     756     58932390 :       { return *this; }
+     757              : 
+     758              :       /// Simply returns *this.  (This %iterator does not @a move.)
+     759              :       _GLIBCXX20_CONSTEXPR
+     760              :       back_insert_iterator&
+     761     58932390 :       operator++()
+     762     58932390 :       { return *this; }
+     763              : 
+     764              :       /// Simply returns *this.  (This %iterator does not @a move.)
+     765              :       _GLIBCXX20_CONSTEXPR
+     766              :       back_insert_iterator
+     767            0 :       operator++(int)
+     768            0 :       { return *this; }
+     769              :     };
+     770              : 
+     771              :   /**
+     772              :    *  @param  __x  A container of arbitrary type.
+     773              :    *  @return  An instance of back_insert_iterator working on @p __x.
+     774              :    *
+     775              :    *  This wrapper function helps in creating back_insert_iterator instances.
+     776              :    *  Typing the name of the %iterator requires knowing the precise full
+     777              :    *  type of the container, which can be tedious and impedes generic
+     778              :    *  programming.  Using this function lets you take advantage of automatic
+     779              :    *  template parameter deduction, making the compiler match the correct
+     780              :    *  types for you.
+     781              :   */
+     782              :   template<typename _Container>
+     783              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     784              :     inline back_insert_iterator<_Container>
+     785     31823476 :     back_inserter(_Container& __x)
+     786     31823476 :     { return back_insert_iterator<_Container>(__x); }
+     787              : 
+     788              :   /**
+     789              :    *  @brief  Turns assignment into insertion.
+     790              :    *
+     791              :    *  These are output iterators, constructed from a container-of-T.
+     792              :    *  Assigning a T to the iterator prepends it to the container using
+     793              :    *  push_front.
+     794              :    *
+     795              :    *  Tip:  Using the front_inserter function to create these iterators can
+     796              :    *  save typing.
+     797              :   */
+     798              :   template<typename _Container>
+     799              :     class front_insert_iterator
+     800              :     : public iterator<output_iterator_tag, void, void, void, void>
+     801              :     {
+     802              :     protected:
+     803              :       _Container* container;
+     804              : 
+     805              :     public:
+     806              :       /// A nested typedef for the type of whatever container you used.
+     807              :       typedef _Container          container_type;
+     808              : #if __cplusplus > 201703L
+     809              :       using difference_type = ptrdiff_t;
+     810              : #endif
+     811              : 
+     812              :       /// The only way to create this %iterator is with a container.
+     813              :       explicit _GLIBCXX20_CONSTEXPR
+     814              :       front_insert_iterator(_Container& __x)
+     815              :       : container(std::__addressof(__x)) { }
+     816              : 
+     817              :       /**
+     818              :        *  @param  __value  An instance of whatever type
+     819              :        *                 container_type::const_reference is; presumably a
+     820              :        *                 reference-to-const T for container<T>.
+     821              :        *  @return  This %iterator, for chained operations.
+     822              :        *
+     823              :        *  This kind of %iterator doesn't really have a @a position in the
+     824              :        *  container (you can think of the position as being permanently at
+     825              :        *  the front, if you like).  Assigning a value to the %iterator will
+     826              :        *  always prepend the value to the front of the container.
+     827              :       */
+     828              : #if __cplusplus < 201103L
+     829              :       front_insert_iterator&
+     830              :       operator=(typename _Container::const_reference __value)
+     831              :       {
+     832              :         container->push_front(__value);
+     833              :         return *this;
+     834              :       }
+     835              : #else
+     836              :       _GLIBCXX20_CONSTEXPR
+     837              :       front_insert_iterator&
+     838              :       operator=(const typename _Container::value_type& __value)
+     839              :       {
+     840              :         container->push_front(__value);
+     841              :         return *this;
+     842              :       }
+     843              : 
+     844              :       _GLIBCXX20_CONSTEXPR
+     845              :       front_insert_iterator&
+     846              :       operator=(typename _Container::value_type&& __value)
+     847              :       {
+     848              :         container->push_front(std::move(__value));
+     849              :         return *this;
+     850              :       }
+     851              : #endif
+     852              : 
+     853              :       /// Simply returns *this.
+     854              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     855              :       front_insert_iterator&
+     856              :       operator*()
+     857              :       { return *this; }
+     858              : 
+     859              :       /// Simply returns *this.  (This %iterator does not @a move.)
+     860              :       _GLIBCXX20_CONSTEXPR
+     861              :       front_insert_iterator&
+     862              :       operator++()
+     863              :       { return *this; }
+     864              : 
+     865              :       /// Simply returns *this.  (This %iterator does not @a move.)
+     866              :       _GLIBCXX20_CONSTEXPR
+     867              :       front_insert_iterator
+     868              :       operator++(int)
+     869              :       { return *this; }
+     870              :     };
+     871              : 
+     872              :   /**
+     873              :    *  @param  __x  A container of arbitrary type.
+     874              :    *  @return  An instance of front_insert_iterator working on @p x.
+     875              :    *
+     876              :    *  This wrapper function helps in creating front_insert_iterator instances.
+     877              :    *  Typing the name of the %iterator requires knowing the precise full
+     878              :    *  type of the container, which can be tedious and impedes generic
+     879              :    *  programming.  Using this function lets you take advantage of automatic
+     880              :    *  template parameter deduction, making the compiler match the correct
+     881              :    *  types for you.
+     882              :   */
+     883              :   template<typename _Container>
+     884              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     885              :     inline front_insert_iterator<_Container>
+     886              :     front_inserter(_Container& __x)
+     887              :     { return front_insert_iterator<_Container>(__x); }
+     888              : 
+     889              :   /**
+     890              :    *  @brief  Turns assignment into insertion.
+     891              :    *
+     892              :    *  These are output iterators, constructed from a container-of-T.
+     893              :    *  Assigning a T to the iterator inserts it in the container at the
+     894              :    *  %iterator's position, rather than overwriting the value at that
+     895              :    *  position.
+     896              :    *
+     897              :    *  (Sequences will actually insert a @e copy of the value before the
+     898              :    *  %iterator's position.)
+     899              :    *
+     900              :    *  Tip:  Using the inserter function to create these iterators can
+     901              :    *  save typing.
+     902              :   */
+     903              :   template<typename _Container>
+     904              :     class insert_iterator
+     905              :     : public iterator<output_iterator_tag, void, void, void, void>
+     906              :     {
+     907              : #if __cplusplus > 201703L && defined __cpp_lib_concepts
+     908              :       using _Iter = std::__detail::__range_iter_t<_Container>;
+     909              : #else
+     910              :       typedef typename _Container::iterator             _Iter;
+     911              : #endif
+     912              :     protected:
+     913              :       _Container* container;
+     914              :       _Iter iter;
+     915              : 
+     916              :     public:
+     917              :       /// A nested typedef for the type of whatever container you used.
+     918              :       typedef _Container          container_type;
+     919              : 
+     920              : #if __cplusplus > 201703L && defined __cpp_lib_concepts
+     921              :       using difference_type = ptrdiff_t;
+     922              : #endif
+     923              : 
+     924              :       /**
+     925              :        *  The only way to create this %iterator is with a container and an
+     926              :        *  initial position (a normal %iterator into the container).
+     927              :       */
+     928              :       _GLIBCXX20_CONSTEXPR
+     929              :       insert_iterator(_Container& __x, _Iter __i)
+     930              :       : container(std::__addressof(__x)), iter(__i) {}
+     931              : 
+     932              :       /**
+     933              :        *  @param  __value  An instance of whatever type
+     934              :        *                 container_type::const_reference is; presumably a
+     935              :        *                 reference-to-const T for container<T>.
+     936              :        *  @return  This %iterator, for chained operations.
+     937              :        *
+     938              :        *  This kind of %iterator maintains its own position in the
+     939              :        *  container.  Assigning a value to the %iterator will insert the
+     940              :        *  value into the container at the place before the %iterator.
+     941              :        *
+     942              :        *  The position is maintained such that subsequent assignments will
+     943              :        *  insert values immediately after one another.  For example,
+     944              :        *  @code
+     945              :        *     // vector v contains A and Z
+     946              :        *
+     947              :        *     insert_iterator i (v, ++v.begin());
+     948              :        *     i = 1;
+     949              :        *     i = 2;
+     950              :        *     i = 3;
+     951              :        *
+     952              :        *     // vector v contains A, 1, 2, 3, and Z
+     953              :        *  @endcode
+     954              :       */
+     955              : #if __cplusplus < 201103L
+     956              :       insert_iterator&
+     957              :       operator=(typename _Container::const_reference __value)
+     958              :       {
+     959              :         iter = container->insert(iter, __value);
+     960              :         ++iter;
+     961              :         return *this;
+     962              :       }
+     963              : #else
+     964              :       _GLIBCXX20_CONSTEXPR
+     965              :       insert_iterator&
+     966              :       operator=(const typename _Container::value_type& __value)
+     967              :       {
+     968              :         iter = container->insert(iter, __value);
+     969              :         ++iter;
+     970              :         return *this;
+     971              :       }
+     972              : 
+     973              :       _GLIBCXX20_CONSTEXPR
+     974              :       insert_iterator&
+     975              :       operator=(typename _Container::value_type&& __value)
+     976              :       {
+     977              :         iter = container->insert(iter, std::move(__value));
+     978              :         ++iter;
+     979              :         return *this;
+     980              :       }
+     981              : #endif
+     982              : 
+     983              :       /// Simply returns *this.
+     984              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     985              :       insert_iterator&
+     986              :       operator*()
+     987              :       { return *this; }
+     988              : 
+     989              :       /// Simply returns *this.  (This %iterator does not @a move.)
+     990              :       _GLIBCXX20_CONSTEXPR
+     991              :       insert_iterator&
+     992              :       operator++()
+     993              :       { return *this; }
+     994              : 
+     995              :       /// Simply returns *this.  (This %iterator does not @a move.)
+     996              :       _GLIBCXX20_CONSTEXPR
+     997              :       insert_iterator&
+     998              :       operator++(int)
+     999              :       { return *this; }
+    1000              :     };
+    1001              : 
+    1002              : #pragma GCC diagnostic pop
+    1003              : 
+    1004              :   /**
+    1005              :    *  @param __x  A container of arbitrary type.
+    1006              :    *  @param __i  An iterator into the container.
+    1007              :    *  @return  An instance of insert_iterator working on @p __x.
+    1008              :    *
+    1009              :    *  This wrapper function helps in creating insert_iterator instances.
+    1010              :    *  Typing the name of the %iterator requires knowing the precise full
+    1011              :    *  type of the container, which can be tedious and impedes generic
+    1012              :    *  programming.  Using this function lets you take advantage of automatic
+    1013              :    *  template parameter deduction, making the compiler match the correct
+    1014              :    *  types for you.
+    1015              :   */
+    1016              : #if __cplusplus > 201703L && defined __cpp_lib_concepts
+    1017              :   template<typename _Container>
+    1018              :     [[nodiscard]]
+    1019              :     constexpr insert_iterator<_Container>
+    1020              :     inserter(_Container& __x, std::__detail::__range_iter_t<_Container> __i)
+    1021              :     { return insert_iterator<_Container>(__x, __i); }
+    1022              : #else
+    1023              :   template<typename _Container>
+    1024              :     _GLIBCXX_NODISCARD
+    1025              :     inline insert_iterator<_Container>
+    1026              :     inserter(_Container& __x, typename _Container::iterator __i)
+    1027              :     { return insert_iterator<_Container>(__x, __i); }
+    1028              : #endif
+    1029              : 
+    1030              :   /// @} group iterators
+    1031              : 
+    1032              : _GLIBCXX_END_NAMESPACE_VERSION
+    1033              : } // namespace
+    1034              : 
+    1035              : namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+    1036              : {
+    1037              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+    1038              : 
+    1039              :   // This iterator adapter is @a normal in the sense that it does not
+    1040              :   // change the semantics of any of the operators of its iterator
+    1041              :   // parameter.  Its primary purpose is to convert an iterator that is
+    1042              :   // not a class, e.g. a pointer, into an iterator that is a class.
+    1043              :   // The _Container parameter exists solely so that different containers
+    1044              :   // using this template can instantiate different types, even if the
+    1045              :   // _Iterator parameter is the same.
+    1046              :   template<typename _Iterator, typename _Container>
+    1047              :     class __normal_iterator
+    1048              :     {
+    1049              :     protected:
+    1050              :       _Iterator _M_current;
+    1051              : 
+    1052              :       typedef std::iterator_traits<_Iterator>             __traits_type;
+    1053              : 
+    1054              : #if __cplusplus >= 201103L
+    1055              :       template<typename _Iter>
+    1056              :         using __convertible_from
+    1057              :           = std::__enable_if_t<std::is_convertible<_Iter, _Iterator>::value>;
+    1058              : #endif
+    1059              : 
+    1060              :     public:
+    1061              :       typedef _Iterator                                 iterator_type;
+    1062              :       typedef typename __traits_type::iterator_category iterator_category;
+    1063              :       typedef typename __traits_type::value_type        value_type;
+    1064              :       typedef typename __traits_type::difference_type   difference_type;
+    1065              :       typedef typename __traits_type::reference         reference;
+    1066              :       typedef typename __traits_type::pointer           pointer;
+    1067              : 
+    1068              : #if __cplusplus > 201703L && __cpp_lib_concepts
+    1069              :       using iterator_concept = std::__detail::__iter_concept<_Iterator>;
+    1070              : #endif
+    1071              : 
+    1072          330 :       _GLIBCXX_CONSTEXPR __normal_iterator() _GLIBCXX_NOEXCEPT
+    1073          330 :       : _M_current(_Iterator()) { }
+    1074              : 
+    1075              :       explicit _GLIBCXX20_CONSTEXPR
+    1076    554159306 :       __normal_iterator(const _Iterator& __i) _GLIBCXX_NOEXCEPT
+    1077    554159306 :       : _M_current(__i) { }
+    1078              : 
+    1079              :       // Allow iterator to const_iterator conversion
+    1080              : #if __cplusplus >= 201103L
+    1081              :       template<typename _Iter, typename = __convertible_from<_Iter>>
+    1082              :         _GLIBCXX20_CONSTEXPR
+    1083        16980 :         __normal_iterator(const __normal_iterator<_Iter, _Container>& __i)
+    1084              :         noexcept
+    1085              : #else
+    1086              :       // N.B. _Container::pointer is not actually in container requirements,
+    1087              :       // but is present in std::vector and std::basic_string.
+    1088              :       template<typename _Iter>
+    1089              :         __normal_iterator(const __normal_iterator<_Iter,
+    1090              :                           typename __enable_if<
+    1091              :                (std::__are_same<_Iter, typename _Container::pointer>::__value),
+    1092              :                       _Container>::__type>& __i)
+    1093              : #endif
+    1094        16980 :         : _M_current(__i.base()) { }
+    1095              : 
+    1096              :       // Forward iterator requirements
+    1097              :       _GLIBCXX20_CONSTEXPR
+    1098              :       reference
+    1099   1068239738 :       operator*() const _GLIBCXX_NOEXCEPT
+    1100   1068239738 :       { return *_M_current; }
+    1101              : 
+    1102              :       _GLIBCXX20_CONSTEXPR
+    1103              :       pointer
+    1104            0 :       operator->() const _GLIBCXX_NOEXCEPT
+    1105            0 :       { return _M_current; }
+    1106              : 
+    1107              :       _GLIBCXX20_CONSTEXPR
+    1108              :       __normal_iterator&
+    1109    934848992 :       operator++() _GLIBCXX_NOEXCEPT
+    1110              :       {
+    1111    934848992 :         ++_M_current;
+    1112    934848992 :         return *this;
+    1113              :       }
+    1114              : 
+    1115              :       _GLIBCXX20_CONSTEXPR
+    1116              :       __normal_iterator
+    1117        80670 :       operator++(int) _GLIBCXX_NOEXCEPT
+    1118        80670 :       { return __normal_iterator(_M_current++); }
+    1119              : 
+    1120              :       // Bidirectional iterator requirements
+    1121              :       _GLIBCXX20_CONSTEXPR
+    1122              :       __normal_iterator&
+    1123        48548 :       operator--() _GLIBCXX_NOEXCEPT
+    1124              :       {
+    1125        48548 :         --_M_current;
+    1126        48548 :         return *this;
+    1127              :       }
+    1128              : 
+    1129              :       _GLIBCXX20_CONSTEXPR
+    1130              :       __normal_iterator
+    1131              :       operator--(int) _GLIBCXX_NOEXCEPT
+    1132              :       { return __normal_iterator(_M_current--); }
+    1133              : 
+    1134              :       // Random access iterator requirements
+    1135              :       _GLIBCXX20_CONSTEXPR
+    1136              :       reference
+    1137         1104 :       operator[](difference_type __n) const _GLIBCXX_NOEXCEPT
+    1138         1104 :       { return _M_current[__n]; }
+    1139              : 
+    1140              :       _GLIBCXX20_CONSTEXPR
+    1141              :       __normal_iterator&
+    1142         6796 :       operator+=(difference_type __n) _GLIBCXX_NOEXCEPT
+    1143         6796 :       { _M_current += __n; return *this; }
+    1144              : 
+    1145              :       _GLIBCXX20_CONSTEXPR
+    1146              :       __normal_iterator
+    1147       125766 :       operator+(difference_type __n) const _GLIBCXX_NOEXCEPT
+    1148       125766 :       { return __normal_iterator(_M_current + __n); }
+    1149              : 
+    1150              :       _GLIBCXX20_CONSTEXPR
+    1151              :       __normal_iterator&
+    1152              :       operator-=(difference_type __n) _GLIBCXX_NOEXCEPT
+    1153              :       { _M_current -= __n; return *this; }
+    1154              : 
+    1155              :       _GLIBCXX20_CONSTEXPR
+    1156              :       __normal_iterator
+    1157    108541140 :       operator-(difference_type __n) const _GLIBCXX_NOEXCEPT
+    1158    108541140 :       { return __normal_iterator(_M_current - __n); }
+    1159              : 
+    1160              :       _GLIBCXX20_CONSTEXPR
+    1161              :       const _Iterator&
+    1162    774472830 :       base() const _GLIBCXX_NOEXCEPT
+    1163    774472830 :       { return _M_current; }
+    1164              :     };
+    1165              : 
+    1166              :   // Note: In what follows, the left- and right-hand-side iterators are
+    1167              :   // allowed to vary in types (conceptually in cv-qualification) so that
+    1168              :   // comparison between cv-qualified and non-cv-qualified iterators be
+    1169              :   // valid.  However, the greedy and unfriendly operators in std::rel_ops
+    1170              :   // will make overload resolution ambiguous (when in scope) if we don't
+    1171              :   // provide overloads whose operands are of the same type.  Can someone
+    1172              :   // remind me what generic programming is about? -- Gaby
+    1173              : 
+    1174              : #if __cpp_lib_three_way_comparison
+    1175              :   template<typename _IteratorL, typename _IteratorR, typename _Container>
+    1176              :     [[nodiscard]]
+    1177              :     constexpr bool
+    1178              :     operator==(const __normal_iterator<_IteratorL, _Container>& __lhs,
+    1179              :                const __normal_iterator<_IteratorR, _Container>& __rhs)
+    1180              :     noexcept(noexcept(__lhs.base() == __rhs.base()))
+    1181              :     requires requires {
+    1182              :       { __lhs.base() == __rhs.base() } -> std::convertible_to<bool>;
+    1183              :     }
+    1184              :     { return __lhs.base() == __rhs.base(); }
+    1185              : 
+    1186              :   template<typename _IteratorL, typename _IteratorR, typename _Container>
+    1187              :     [[nodiscard]]
+    1188              :     constexpr std::__detail::__synth3way_t<_IteratorR, _IteratorL>
+    1189              :     operator<=>(const __normal_iterator<_IteratorL, _Container>& __lhs,
+    1190              :                 const __normal_iterator<_IteratorR, _Container>& __rhs)
+    1191              :     noexcept(noexcept(std::__detail::__synth3way(__lhs.base(), __rhs.base())))
+    1192              :     { return std::__detail::__synth3way(__lhs.base(), __rhs.base()); }
+    1193              : 
+    1194              :   template<typename _Iterator, typename _Container>
+    1195              :     [[nodiscard]]
+    1196              :     constexpr bool
+    1197              :     operator==(const __normal_iterator<_Iterator, _Container>& __lhs,
+    1198              :                const __normal_iterator<_Iterator, _Container>& __rhs)
+    1199              :     noexcept(noexcept(__lhs.base() == __rhs.base()))
+    1200              :     requires requires {
+    1201              :       { __lhs.base() == __rhs.base() } -> std::convertible_to<bool>;
+    1202              :     }
+    1203              :     { return __lhs.base() == __rhs.base(); }
+    1204              : 
+    1205              :   template<typename _Iterator, typename _Container>
+    1206              :     [[nodiscard]]
+    1207              :     constexpr std::__detail::__synth3way_t<_Iterator>
+    1208              :     operator<=>(const __normal_iterator<_Iterator, _Container>& __lhs,
+    1209              :                 const __normal_iterator<_Iterator, _Container>& __rhs)
+    1210              :     noexcept(noexcept(std::__detail::__synth3way(__lhs.base(), __rhs.base())))
+    1211              :     { return std::__detail::__synth3way(__lhs.base(), __rhs.base()); }
+    1212              : #else
+    1213              :    // Forward iterator requirements
+    1214              :   template<typename _IteratorL, typename _IteratorR, typename _Container>
+    1215              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1216              :     inline bool
+    1217          314 :     operator==(const __normal_iterator<_IteratorL, _Container>& __lhs,
+    1218              :                const __normal_iterator<_IteratorR, _Container>& __rhs)
+    1219              :     _GLIBCXX_NOEXCEPT
+    1220          314 :     { return __lhs.base() == __rhs.base(); }
+    1221              : 
+    1222              :   template<typename _Iterator, typename _Container>
+    1223              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1224              :     inline bool
+    1225      9579084 :     operator==(const __normal_iterator<_Iterator, _Container>& __lhs,
+    1226              :                const __normal_iterator<_Iterator, _Container>& __rhs)
+    1227              :     _GLIBCXX_NOEXCEPT
+    1228      9579084 :     { return __lhs.base() == __rhs.base(); }
+    1229              : 
+    1230              :   template<typename _IteratorL, typename _IteratorR, typename _Container>
+    1231              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1232              :     inline bool
+    1233              :     operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs,
+    1234              :                const __normal_iterator<_IteratorR, _Container>& __rhs)
+    1235              :     _GLIBCXX_NOEXCEPT
+    1236              :     { return __lhs.base() != __rhs.base(); }
+    1237              : 
+    1238              :   template<typename _Iterator, typename _Container>
+    1239              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1240              :     inline bool
+    1241    134563234 :     operator!=(const __normal_iterator<_Iterator, _Container>& __lhs,
+    1242              :                const __normal_iterator<_Iterator, _Container>& __rhs)
+    1243              :     _GLIBCXX_NOEXCEPT
+    1244    134563234 :     { return __lhs.base() != __rhs.base(); }
+    1245              : 
+    1246              :   // Random access iterator requirements
+    1247              :   template<typename _IteratorL, typename _IteratorR, typename _Container>
+    1248              :     _GLIBCXX_NODISCARD
+    1249              :     inline bool
+    1250              :     operator<(const __normal_iterator<_IteratorL, _Container>& __lhs,
+    1251              :               const __normal_iterator<_IteratorR, _Container>& __rhs)
+    1252              :     _GLIBCXX_NOEXCEPT
+    1253              :     { return __lhs.base() < __rhs.base(); }
+    1254              : 
+    1255              :   template<typename _Iterator, typename _Container>
+    1256              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1257              :     inline bool
+    1258         6476 :     operator<(const __normal_iterator<_Iterator, _Container>& __lhs,
+    1259              :               const __normal_iterator<_Iterator, _Container>& __rhs)
+    1260              :     _GLIBCXX_NOEXCEPT
+    1261         6476 :     { return __lhs.base() < __rhs.base(); }
+    1262              : 
+    1263              :   template<typename _IteratorL, typename _IteratorR, typename _Container>
+    1264              :     _GLIBCXX_NODISCARD
+    1265              :     inline bool
+    1266              :     operator>(const __normal_iterator<_IteratorL, _Container>& __lhs,
+    1267              :               const __normal_iterator<_IteratorR, _Container>& __rhs)
+    1268              :     _GLIBCXX_NOEXCEPT
+    1269              :     { return __lhs.base() > __rhs.base(); }
+    1270              : 
+    1271              :   template<typename _Iterator, typename _Container>
+    1272              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1273              :     inline bool
+    1274              :     operator>(const __normal_iterator<_Iterator, _Container>& __lhs,
+    1275              :               const __normal_iterator<_Iterator, _Container>& __rhs)
+    1276              :     _GLIBCXX_NOEXCEPT
+    1277              :     { return __lhs.base() > __rhs.base(); }
+    1278              : 
+    1279              :   template<typename _IteratorL, typename _IteratorR, typename _Container>
+    1280              :     _GLIBCXX_NODISCARD
+    1281              :     inline bool
+    1282              :     operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs,
+    1283              :                const __normal_iterator<_IteratorR, _Container>& __rhs)
+    1284              :     _GLIBCXX_NOEXCEPT
+    1285              :     { return __lhs.base() <= __rhs.base(); }
+    1286              : 
+    1287              :   template<typename _Iterator, typename _Container>
+    1288              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1289              :     inline bool
+    1290              :     operator<=(const __normal_iterator<_Iterator, _Container>& __lhs,
+    1291              :                const __normal_iterator<_Iterator, _Container>& __rhs)
+    1292              :     _GLIBCXX_NOEXCEPT
+    1293              :     { return __lhs.base() <= __rhs.base(); }
+    1294              : 
+    1295              :   template<typename _IteratorL, typename _IteratorR, typename _Container>
+    1296              :     _GLIBCXX_NODISCARD
+    1297              :     inline bool
+    1298              :     operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs,
+    1299              :                const __normal_iterator<_IteratorR, _Container>& __rhs)
+    1300              :     _GLIBCXX_NOEXCEPT
+    1301              :     { return __lhs.base() >= __rhs.base(); }
+    1302              : 
+    1303              :   template<typename _Iterator, typename _Container>
+    1304              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1305              :     inline bool
+    1306              :     operator>=(const __normal_iterator<_Iterator, _Container>& __lhs,
+    1307              :                const __normal_iterator<_Iterator, _Container>& __rhs)
+    1308              :     _GLIBCXX_NOEXCEPT
+    1309              :     { return __lhs.base() >= __rhs.base(); }
+    1310              : #endif // three-way comparison
+    1311              : 
+    1312              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1313              :   // According to the resolution of DR179 not only the various comparison
+    1314              :   // operators but also operator- must accept mixed iterator/const_iterator
+    1315              :   // parameters.
+    1316              :   template<typename _IteratorL, typename _IteratorR, typename _Container>
+    1317              : #if __cplusplus >= 201103L
+    1318              :     // DR 685.
+    1319              :     [[__nodiscard__]] _GLIBCXX20_CONSTEXPR
+    1320              :     inline auto
+    1321          440 :     operator-(const __normal_iterator<_IteratorL, _Container>& __lhs,
+    1322              :               const __normal_iterator<_IteratorR, _Container>& __rhs) noexcept
+    1323              :     -> decltype(__lhs.base() - __rhs.base())
+    1324              : #else
+    1325              :     inline typename __normal_iterator<_IteratorL, _Container>::difference_type
+    1326              :     operator-(const __normal_iterator<_IteratorL, _Container>& __lhs,
+    1327              :               const __normal_iterator<_IteratorR, _Container>& __rhs)
+    1328              : #endif
+    1329          440 :     { return __lhs.base() - __rhs.base(); }
+    1330              : 
+    1331              :   template<typename _Iterator, typename _Container>
+    1332              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1333              :     inline typename __normal_iterator<_Iterator, _Container>::difference_type
+    1334    131023814 :     operator-(const __normal_iterator<_Iterator, _Container>& __lhs,
+    1335              :               const __normal_iterator<_Iterator, _Container>& __rhs)
+    1336              :     _GLIBCXX_NOEXCEPT
+    1337    131023814 :     { return __lhs.base() - __rhs.base(); }
+    1338              : 
+    1339              :   template<typename _Iterator, typename _Container>
+    1340              :     _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1341              :     inline __normal_iterator<_Iterator, _Container>
+    1342              :     operator+(typename __normal_iterator<_Iterator, _Container>::difference_type
+    1343              :               __n, const __normal_iterator<_Iterator, _Container>& __i)
+    1344              :     _GLIBCXX_NOEXCEPT
+    1345              :     { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); }
+    1346              : 
+    1347              : _GLIBCXX_END_NAMESPACE_VERSION
+    1348              : } // namespace
+    1349              : 
+    1350              : namespace std _GLIBCXX_VISIBILITY(default)
+    1351              : {
+    1352              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+    1353              : 
+    1354              :   template<typename _Iterator, typename _Container>
+    1355              :     _GLIBCXX20_CONSTEXPR
+    1356              :     _Iterator
+    1357       147492 :     __niter_base(__gnu_cxx::__normal_iterator<_Iterator, _Container> __it)
+    1358              :     _GLIBCXX_NOEXCEPT_IF(std::is_nothrow_copy_constructible<_Iterator>::value)
+    1359       147492 :     { return __it.base(); }
+    1360              : 
+    1361              : #if __cplusplus >= 201103L
+    1362              : 
+    1363              : #if __cplusplus <= 201703L
+    1364              :   // Need to overload __to_address because the pointer_traits primary template
+    1365              :   // will deduce element_type of __normal_iterator<T*, C> as T* rather than T.
+    1366              :   template<typename _Iterator, typename _Container>
+    1367              :     constexpr auto
+    1368              :     __to_address(const __gnu_cxx::__normal_iterator<_Iterator,
+    1369              :                                                     _Container>& __it) noexcept
+    1370              :     -> decltype(std::__to_address(__it.base()))
+    1371              :     { return std::__to_address(__it.base()); }
+    1372              : #endif
+    1373              : 
+    1374              :   /**
+    1375              :    * @addtogroup iterators
+    1376              :    * @{
+    1377              :    */
+    1378              : 
+    1379              : #if __cplusplus > 201703L && __cpp_lib_concepts
+    1380              :   template<semiregular _Sent>
+    1381              :     class move_sentinel
+    1382              :     {
+    1383              :     public:
+    1384              :       constexpr
+    1385              :       move_sentinel()
+    1386              :       noexcept(is_nothrow_default_constructible_v<_Sent>)
+    1387              :       : _M_last() { }
+    1388              : 
+    1389              :       constexpr explicit
+    1390              :       move_sentinel(_Sent __s)
+    1391              :       noexcept(is_nothrow_move_constructible_v<_Sent>)
+    1392              :       : _M_last(std::move(__s)) { }
+    1393              : 
+    1394              :       template<typename _S2> requires convertible_to<const _S2&, _Sent>
+    1395              :         constexpr
+    1396              :         move_sentinel(const move_sentinel<_S2>& __s)
+    1397              :         noexcept(is_nothrow_constructible_v<_Sent, const _S2&>)
+    1398              :         : _M_last(__s.base())
+    1399              :         { }
+    1400              : 
+    1401              :       template<typename _S2> requires assignable_from<_Sent&, const _S2&>
+    1402              :         constexpr move_sentinel&
+    1403              :         operator=(const move_sentinel<_S2>& __s)
+    1404              :         noexcept(is_nothrow_assignable_v<_Sent, const _S2&>)
+    1405              :         {
+    1406              :           _M_last = __s.base();
+    1407              :           return *this;
+    1408              :         }
+    1409              : 
+    1410              :       [[nodiscard]]
+    1411              :       constexpr _Sent
+    1412              :       base() const
+    1413              :       noexcept(is_nothrow_copy_constructible_v<_Sent>)
+    1414              :       { return _M_last; }
+    1415              : 
+    1416              :     private:
+    1417              :       _Sent _M_last;
+    1418              :     };
+    1419              : #endif // C++20
+    1420              : 
+    1421              :   namespace __detail
+    1422              :   {
+    1423              : #if __cplusplus > 201703L && __cpp_lib_concepts
+    1424              :     template<typename _Iterator>
+    1425              :       struct __move_iter_cat
+    1426              :       { };
+    1427              : 
+    1428              :     template<typename _Iterator>
+    1429              :       requires requires { typename __iter_category_t<_Iterator>; }
+    1430              :       struct __move_iter_cat<_Iterator>
+    1431              :       {
+    1432              :         using iterator_category
+    1433              :           = __clamp_iter_cat<__iter_category_t<_Iterator>,
+    1434              :                              random_access_iterator_tag>;
+    1435              :       };
+    1436              : #endif
+    1437              :   }
+    1438              : 
+    1439              :   // 24.4.3  Move iterators
+    1440              :   /**
+    1441              :    *  Class template move_iterator is an iterator adapter with the same
+    1442              :    *  behavior as the underlying iterator except that its dereference
+    1443              :    *  operator implicitly converts the value returned by the underlying
+    1444              :    *  iterator's dereference operator to an rvalue reference.  Some
+    1445              :    *  generic algorithms can be called with move iterators to replace
+    1446              :    *  copying with moving.
+    1447              :    */
+    1448              :   template<typename _Iterator>
+    1449              :     class move_iterator
+    1450              : #if __cplusplus > 201703L && __cpp_lib_concepts
+    1451              :       : public __detail::__move_iter_cat<_Iterator>
+    1452              : #endif
+    1453              :     {
+    1454              :       _Iterator _M_current;
+    1455              : 
+    1456              :       using __traits_type = iterator_traits<_Iterator>;
+    1457              : #if ! (__cplusplus > 201703L && __cpp_lib_concepts)
+    1458              :       using __base_ref = typename __traits_type::reference;
+    1459              : #endif
+    1460              : 
+    1461              :       template<typename _Iter2>
+    1462              :         friend class move_iterator;
+    1463              : 
+    1464              : #if __cpp_lib_concepts
+    1465              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1466              :       // 3435. three_way_comparable_with<reverse_iterator<int*>, [...]>
+    1467              :       template<typename _Iter2>
+    1468              :         static constexpr bool __convertible = !is_same_v<_Iter2, _Iterator>
+    1469              :             && convertible_to<const _Iter2&, _Iterator>;
+    1470              : #endif
+    1471              : 
+    1472              : #if __cplusplus > 201703L && __cpp_lib_concepts
+    1473              :       static auto
+    1474              :       _S_iter_concept()
+    1475              :       {
+    1476              :         if constexpr (random_access_iterator<_Iterator>)
+    1477              :           return random_access_iterator_tag{};
+    1478              :         else if constexpr (bidirectional_iterator<_Iterator>)
+    1479              :           return bidirectional_iterator_tag{};
+    1480              :         else if constexpr (forward_iterator<_Iterator>)
+    1481              :           return forward_iterator_tag{};
+    1482              :         else
+    1483              :           return input_iterator_tag{};
+    1484              :       }
+    1485              : #endif
+    1486              : 
+    1487              :     public:
+    1488              :       using iterator_type = _Iterator;
+    1489              : 
+    1490              : #if __cplusplus > 201703L && __cpp_lib_concepts
+    1491              :       // This is P2520R0, a C++23 change, but we treat it as a DR against C++20.
+    1492              : # define __cpp_lib_move_iterator_concept 202207L
+    1493              :       using iterator_concept = decltype(_S_iter_concept());
+    1494              : 
+    1495              :       // iterator_category defined in __move_iter_cat
+    1496              :       using value_type = iter_value_t<_Iterator>;
+    1497              :       using difference_type = iter_difference_t<_Iterator>;
+    1498              :       using pointer = _Iterator;
+    1499              :       using reference = iter_rvalue_reference_t<_Iterator>;
+    1500              : #else
+    1501              :       typedef typename __traits_type::iterator_category iterator_category;
+    1502              :       typedef typename __traits_type::value_type        value_type;
+    1503              :       typedef typename __traits_type::difference_type   difference_type;
+    1504              :       // NB: DR 680.
+    1505              :       typedef _Iterator                                 pointer;
+    1506              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1507              :       // 2106. move_iterator wrapping iterators returning prvalues
+    1508              :       using reference
+    1509              :         = __conditional_t<is_reference<__base_ref>::value,
+    1510              :                           typename remove_reference<__base_ref>::type&&,
+    1511              :                           __base_ref>;
+    1512              : #endif
+    1513              : 
+    1514              :       _GLIBCXX17_CONSTEXPR
+    1515              :       move_iterator()
+    1516              :       : _M_current() { }
+    1517              : 
+    1518              :       explicit _GLIBCXX17_CONSTEXPR
+    1519         4588 :       move_iterator(iterator_type __i)
+    1520         4588 :       : _M_current(std::move(__i)) { }
+    1521              : 
+    1522              :       template<typename _Iter>
+    1523              : #if __cpp_lib_concepts
+    1524              :         requires __convertible<_Iter>
+    1525              : #endif
+    1526              :         _GLIBCXX17_CONSTEXPR
+    1527              :         move_iterator(const move_iterator<_Iter>& __i)
+    1528              :         : _M_current(__i._M_current) { }
+    1529              : 
+    1530              :       template<typename _Iter>
+    1531              : #if __cpp_lib_concepts
+    1532              :         requires __convertible<_Iter>
+    1533              :           && assignable_from<_Iterator&, const _Iter&>
+    1534              : #endif
+    1535              :         _GLIBCXX17_CONSTEXPR
+    1536              :         move_iterator& operator=(const move_iterator<_Iter>& __i)
+    1537              :         {
+    1538              :           _M_current = __i._M_current;
+    1539              :           return *this;
+    1540              :         }
+    1541              : 
+    1542              : #if __cplusplus <= 201703L
+    1543              :       [[__nodiscard__]]
+    1544              :       _GLIBCXX17_CONSTEXPR iterator_type
+    1545         8788 :       base() const
+    1546         8788 :       { return _M_current; }
+    1547              : #else
+    1548              :       [[nodiscard]]
+    1549              :       constexpr const iterator_type&
+    1550              :       base() const & noexcept
+    1551              :       { return _M_current; }
+    1552              : 
+    1553              :       [[nodiscard]]
+    1554              :       constexpr iterator_type
+    1555              :       base() &&
+    1556              :       { return std::move(_M_current); }
+    1557              : #endif
+    1558              : 
+    1559              :       [[__nodiscard__]]
+    1560              :       _GLIBCXX17_CONSTEXPR reference
+    1561         2100 :       operator*() const
+    1562              : #if __cplusplus > 201703L && __cpp_lib_concepts
+    1563              :       { return ranges::iter_move(_M_current); }
+    1564              : #else
+    1565         2100 :       { return static_cast<reference>(*_M_current); }
+    1566              : #endif
+    1567              : 
+    1568              :       [[__nodiscard__]]
+    1569              :       _GLIBCXX17_CONSTEXPR pointer
+    1570              :       operator->() const
+    1571              :       { return _M_current; }
+    1572              : 
+    1573              :       _GLIBCXX17_CONSTEXPR move_iterator&
+    1574         2100 :       operator++()
+    1575              :       {
+    1576         2100 :         ++_M_current;
+    1577         2100 :         return *this;
+    1578              :       }
+    1579              : 
+    1580              :       _GLIBCXX17_CONSTEXPR move_iterator
+    1581              :       operator++(int)
+    1582              :       {
+    1583              :         move_iterator __tmp = *this;
+    1584              :         ++_M_current;
+    1585              :         return __tmp;
+    1586              :       }
+    1587              : 
+    1588              : #if __cpp_lib_concepts
+    1589              :       constexpr void
+    1590              :       operator++(int) requires (!forward_iterator<_Iterator>)
+    1591              :       { ++_M_current; }
+    1592              : #endif
+    1593              : 
+    1594              :       _GLIBCXX17_CONSTEXPR move_iterator&
+    1595              :       operator--()
+    1596              :       {
+    1597              :         --_M_current;
+    1598              :         return *this;
+    1599              :       }
+    1600              : 
+    1601              :       _GLIBCXX17_CONSTEXPR move_iterator
+    1602              :       operator--(int)
+    1603              :       {
+    1604              :         move_iterator __tmp = *this;
+    1605              :         --_M_current;
+    1606              :         return __tmp;
+    1607              :       }
+    1608              : 
+    1609              :       [[__nodiscard__]]
+    1610              :       _GLIBCXX17_CONSTEXPR move_iterator
+    1611              :       operator+(difference_type __n) const
+    1612              :       { return move_iterator(_M_current + __n); }
+    1613              : 
+    1614              :       _GLIBCXX17_CONSTEXPR move_iterator&
+    1615              :       operator+=(difference_type __n)
+    1616              :       {
+    1617              :         _M_current += __n;
+    1618              :         return *this;
+    1619              :       }
+    1620              : 
+    1621              :       [[__nodiscard__]]
+    1622              :       _GLIBCXX17_CONSTEXPR move_iterator
+    1623              :       operator-(difference_type __n) const
+    1624              :       { return move_iterator(_M_current - __n); }
+    1625              :     
+    1626              :       _GLIBCXX17_CONSTEXPR move_iterator&
+    1627              :       operator-=(difference_type __n)
+    1628              :       { 
+    1629              :         _M_current -= __n;
+    1630              :         return *this;
+    1631              :       }
+    1632              : 
+    1633              :       [[__nodiscard__]]
+    1634              :       _GLIBCXX17_CONSTEXPR reference
+    1635              :       operator[](difference_type __n) const
+    1636              : #if __cplusplus > 201703L && __cpp_lib_concepts
+    1637              :       { return ranges::iter_move(_M_current + __n); }
+    1638              : #else
+    1639              :       { return std::move(_M_current[__n]); }
+    1640              : #endif
+    1641              : 
+    1642              : #if __cplusplus > 201703L && __cpp_lib_concepts
+    1643              :       template<sentinel_for<_Iterator> _Sent>
+    1644              :         [[nodiscard]]
+    1645              :         friend constexpr bool
+    1646              :         operator==(const move_iterator& __x, const move_sentinel<_Sent>& __y)
+    1647              :         { return __x.base() == __y.base(); }
+    1648              : 
+    1649              :       template<sized_sentinel_for<_Iterator> _Sent>
+    1650              :         [[nodiscard]]
+    1651              :         friend constexpr iter_difference_t<_Iterator>
+    1652              :         operator-(const move_sentinel<_Sent>& __x, const move_iterator& __y)
+    1653              :         { return __x.base() - __y.base(); }
+    1654              : 
+    1655              :       template<sized_sentinel_for<_Iterator> _Sent>
+    1656              :         [[nodiscard]]
+    1657              :         friend constexpr iter_difference_t<_Iterator>
+    1658              :         operator-(const move_iterator& __x, const move_sentinel<_Sent>& __y)
+    1659              :         { return __x.base() - __y.base(); }
+    1660              : 
+    1661              :       [[nodiscard]]
+    1662              :       friend constexpr iter_rvalue_reference_t<_Iterator>
+    1663              :       iter_move(const move_iterator& __i)
+    1664              :       noexcept(noexcept(ranges::iter_move(__i._M_current)))
+    1665              :       { return ranges::iter_move(__i._M_current); }
+    1666              : 
+    1667              :       template<indirectly_swappable<_Iterator> _Iter2>
+    1668              :         friend constexpr void
+    1669              :         iter_swap(const move_iterator& __x, const move_iterator<_Iter2>& __y)
+    1670              :         noexcept(noexcept(ranges::iter_swap(__x._M_current, __y._M_current)))
+    1671              :         { return ranges::iter_swap(__x._M_current, __y._M_current); }
+    1672              : #endif // C++20
+    1673              :     };
+    1674              : 
+    1675              :   template<typename _IteratorL, typename _IteratorR>
+    1676              :     [[__nodiscard__]]
+    1677              :     inline _GLIBCXX17_CONSTEXPR bool
+    1678              :     operator==(const move_iterator<_IteratorL>& __x,
+    1679              :                const move_iterator<_IteratorR>& __y)
+    1680              : #if __cplusplus > 201703L && __cpp_lib_concepts
+    1681              :     requires requires { { __x.base() == __y.base() } -> convertible_to<bool>; }
+    1682              : #endif
+    1683              :     { return __x.base() == __y.base(); }
+    1684              : 
+    1685              : #if __cpp_lib_three_way_comparison
+    1686              :   template<typename _IteratorL,
+    1687              :            three_way_comparable_with<_IteratorL> _IteratorR>
+    1688              :     [[__nodiscard__]]
+    1689              :     constexpr compare_three_way_result_t<_IteratorL, _IteratorR>
+    1690              :     operator<=>(const move_iterator<_IteratorL>& __x,
+    1691              :                 const move_iterator<_IteratorR>& __y)
+    1692              :     { return __x.base() <=> __y.base(); }
+    1693              : #else
+    1694              :   template<typename _IteratorL, typename _IteratorR>
+    1695              :     [[__nodiscard__]]
+    1696              :     inline _GLIBCXX17_CONSTEXPR bool
+    1697              :     operator!=(const move_iterator<_IteratorL>& __x,
+    1698              :                const move_iterator<_IteratorR>& __y)
+    1699              :     { return !(__x == __y); }
+    1700              : #endif
+    1701              : 
+    1702              :   template<typename _IteratorL, typename _IteratorR>
+    1703              :     [[__nodiscard__]]
+    1704              :     inline _GLIBCXX17_CONSTEXPR bool
+    1705              :     operator<(const move_iterator<_IteratorL>& __x,
+    1706              :               const move_iterator<_IteratorR>& __y)
+    1707              : #if __cplusplus > 201703L && __cpp_lib_concepts
+    1708              :     requires requires { { __x.base() < __y.base() } -> convertible_to<bool>; }
+    1709              : #endif
+    1710              :     { return __x.base() < __y.base(); }
+    1711              : 
+    1712              :   template<typename _IteratorL, typename _IteratorR>
+    1713              :     [[__nodiscard__]]
+    1714              :     inline _GLIBCXX17_CONSTEXPR bool
+    1715              :     operator<=(const move_iterator<_IteratorL>& __x,
+    1716              :                const move_iterator<_IteratorR>& __y)
+    1717              : #if __cplusplus > 201703L && __cpp_lib_concepts
+    1718              :     requires requires { { __y.base() < __x.base() } -> convertible_to<bool>; }
+    1719              : #endif
+    1720              :     { return !(__y < __x); }
+    1721              : 
+    1722              :   template<typename _IteratorL, typename _IteratorR>
+    1723              :     [[__nodiscard__]]
+    1724              :     inline _GLIBCXX17_CONSTEXPR bool
+    1725              :     operator>(const move_iterator<_IteratorL>& __x,
+    1726              :               const move_iterator<_IteratorR>& __y)
+    1727              : #if __cplusplus > 201703L && __cpp_lib_concepts
+    1728              :     requires requires { { __y.base() < __x.base() } -> convertible_to<bool>; }
+    1729              : #endif
+    1730              :     { return __y < __x; }
+    1731              : 
+    1732              :   template<typename _IteratorL, typename _IteratorR>
+    1733              :     [[__nodiscard__]]
+    1734              :     inline _GLIBCXX17_CONSTEXPR bool
+    1735              :     operator>=(const move_iterator<_IteratorL>& __x,
+    1736              :                const move_iterator<_IteratorR>& __y)
+    1737              : #if __cplusplus > 201703L && __cpp_lib_concepts
+    1738              :     requires requires { { __x.base() < __y.base() } -> convertible_to<bool>; }
+    1739              : #endif
+    1740              :     { return !(__x < __y); }
+    1741              : 
+    1742              :   // Note: See __normal_iterator operators note from Gaby to understand
+    1743              :   // why we have these extra overloads for some move_iterator operators.
+    1744              : 
+    1745              :   template<typename _Iterator>
+    1746              :     [[__nodiscard__]]
+    1747              :     inline _GLIBCXX17_CONSTEXPR bool
+    1748         2638 :     operator==(const move_iterator<_Iterator>& __x,
+    1749              :                const move_iterator<_Iterator>& __y)
+    1750         2638 :     { return __x.base() == __y.base(); }
+    1751              : 
+    1752              : #if __cpp_lib_three_way_comparison
+    1753              :   template<three_way_comparable _Iterator>
+    1754              :     [[__nodiscard__]]
+    1755              :     constexpr compare_three_way_result_t<_Iterator>
+    1756              :     operator<=>(const move_iterator<_Iterator>& __x,
+    1757              :                 const move_iterator<_Iterator>& __y)
+    1758              :     { return __x.base() <=> __y.base(); }
+    1759              : #else
+    1760              :   template<typename _Iterator>
+    1761              :     [[__nodiscard__]]
+    1762              :     inline _GLIBCXX17_CONSTEXPR bool
+    1763         2638 :     operator!=(const move_iterator<_Iterator>& __x,
+    1764              :                const move_iterator<_Iterator>& __y)
+    1765         2638 :     { return !(__x == __y); }
+    1766              : 
+    1767              :   template<typename _Iterator>
+    1768              :     [[__nodiscard__]]
+    1769              :     inline _GLIBCXX17_CONSTEXPR bool
+    1770              :     operator<(const move_iterator<_Iterator>& __x,
+    1771              :               const move_iterator<_Iterator>& __y)
+    1772              :     { return __x.base() < __y.base(); }
+    1773              : 
+    1774              :   template<typename _Iterator>
+    1775              :     [[__nodiscard__]]
+    1776              :     inline _GLIBCXX17_CONSTEXPR bool
+    1777              :     operator<=(const move_iterator<_Iterator>& __x,
+    1778              :                const move_iterator<_Iterator>& __y)
+    1779              :     { return !(__y < __x); }
+    1780              : 
+    1781              :   template<typename _Iterator>
+    1782              :     [[__nodiscard__]]
+    1783              :     inline _GLIBCXX17_CONSTEXPR bool
+    1784              :     operator>(const move_iterator<_Iterator>& __x,
+    1785              :               const move_iterator<_Iterator>& __y)
+    1786              :     { return __y < __x; }
+    1787              : 
+    1788              :   template<typename _Iterator>
+    1789              :     [[__nodiscard__]]
+    1790              :     inline _GLIBCXX17_CONSTEXPR bool
+    1791              :     operator>=(const move_iterator<_Iterator>& __x,
+    1792              :                const move_iterator<_Iterator>& __y)
+    1793              :     { return !(__x < __y); }
+    1794              : #endif // ! C++20
+    1795              : 
+    1796              :   // DR 685.
+    1797              :   template<typename _IteratorL, typename _IteratorR>
+    1798              :     [[__nodiscard__]]
+    1799              :     inline _GLIBCXX17_CONSTEXPR auto
+    1800              :     operator-(const move_iterator<_IteratorL>& __x,
+    1801              :               const move_iterator<_IteratorR>& __y)
+    1802              :     -> decltype(__x.base() - __y.base())
+    1803              :     { return __x.base() - __y.base(); }
+    1804              : 
+    1805              :   template<typename _Iterator>
+    1806              :     [[__nodiscard__]]
+    1807              :     inline _GLIBCXX17_CONSTEXPR move_iterator<_Iterator>
+    1808              :     operator+(typename move_iterator<_Iterator>::difference_type __n,
+    1809              :               const move_iterator<_Iterator>& __x)
+    1810              :     { return __x + __n; }
+    1811              : 
+    1812              :   template<typename _Iterator>
+    1813              :     [[__nodiscard__]]
+    1814              :     inline _GLIBCXX17_CONSTEXPR move_iterator<_Iterator>
+    1815          804 :     make_move_iterator(_Iterator __i)
+    1816          804 :     { return move_iterator<_Iterator>(std::move(__i)); }
+    1817              : 
+    1818              :   template<typename _Iterator, typename _ReturnType
+    1819              :     = __conditional_t<__move_if_noexcept_cond
+    1820              :       <typename iterator_traits<_Iterator>::value_type>::value,
+    1821              :                 _Iterator, move_iterator<_Iterator>>>
+    1822              :     inline _GLIBCXX17_CONSTEXPR _ReturnType
+    1823              :     __make_move_if_noexcept_iterator(_Iterator __i)
+    1824              :     { return _ReturnType(__i); }
+    1825              : 
+    1826              :   // Overload for pointers that matches std::move_if_noexcept more closely,
+    1827              :   // returning a constant iterator when we don't want to move.
+    1828              :   template<typename _Tp, typename _ReturnType
+    1829              :     = __conditional_t<__move_if_noexcept_cond<_Tp>::value,
+    1830              :                       const _Tp*, move_iterator<_Tp*>>>
+    1831              :     inline _GLIBCXX17_CONSTEXPR _ReturnType
+    1832         3784 :     __make_move_if_noexcept_iterator(_Tp* __i)
+    1833         3784 :     { return _ReturnType(__i); }
+    1834              : 
+    1835              : #if __cplusplus > 201703L && __cpp_lib_concepts
+    1836              :   // [iterators.common] Common iterators
+    1837              : 
+    1838              :   namespace __detail
+    1839              :   {
+    1840              :     template<typename _It>
+    1841              :       concept __common_iter_has_arrow = indirectly_readable<const _It>
+    1842              :         && (requires(const _It& __it) { __it.operator->(); }
+    1843              :             || is_reference_v<iter_reference_t<_It>>
+    1844              :             || constructible_from<iter_value_t<_It>, iter_reference_t<_It>>);
+    1845              : 
+    1846              :     template<typename _It>
+    1847              :       concept __common_iter_use_postfix_proxy
+    1848              :         = (!requires (_It& __i) { { *__i++ } -> __can_reference; })
+    1849              :           && constructible_from<iter_value_t<_It>, iter_reference_t<_It>>
+    1850              :           && move_constructible<iter_value_t<_It>>;
+    1851              :   } // namespace __detail
+    1852              : 
+    1853              :   /// An iterator/sentinel adaptor for representing a non-common range.
+    1854              :   template<input_or_output_iterator _It, sentinel_for<_It> _Sent>
+    1855              :     requires (!same_as<_It, _Sent>) && copyable<_It>
+    1856              :   class common_iterator
+    1857              :   {
+    1858              :     template<typename _Tp, typename _Up>
+    1859              :       static constexpr bool
+    1860              :       _S_noexcept1()
+    1861              :       {
+    1862              :         if constexpr (is_trivially_default_constructible_v<_Tp>)
+    1863              :           return is_nothrow_assignable_v<_Tp&, _Up>;
+    1864              :         else
+    1865              :           return is_nothrow_constructible_v<_Tp, _Up>;
+    1866              :       }
+    1867              : 
+    1868              :     template<typename _It2, typename _Sent2>
+    1869              :       static constexpr bool
+    1870              :       _S_noexcept()
+    1871              :       { return _S_noexcept1<_It, _It2>() && _S_noexcept1<_Sent, _Sent2>(); }
+    1872              : 
+    1873              :     class __arrow_proxy
+    1874              :     {
+    1875              :       iter_value_t<_It> _M_keep;
+    1876              : 
+    1877              :       constexpr
+    1878              :       __arrow_proxy(iter_reference_t<_It>&& __x)
+    1879              :       : _M_keep(std::move(__x)) { }
+    1880              : 
+    1881              :       friend class common_iterator;
+    1882              : 
+    1883              :     public:
+    1884              :       constexpr const iter_value_t<_It>*
+    1885              :       operator->() const noexcept
+    1886              :       { return std::__addressof(_M_keep); }
+    1887              :     };
+    1888              : 
+    1889              :     class __postfix_proxy
+    1890              :     {
+    1891              :       iter_value_t<_It> _M_keep;
+    1892              : 
+    1893              :       constexpr
+    1894              :       __postfix_proxy(iter_reference_t<_It>&& __x)
+    1895              :       : _M_keep(std::forward<iter_reference_t<_It>>(__x)) { }
+    1896              : 
+    1897              :       friend class common_iterator;
+    1898              : 
+    1899              :     public:
+    1900              :       constexpr const iter_value_t<_It>&
+    1901              :       operator*() const noexcept
+    1902              :       { return _M_keep; }
+    1903              :     };
+    1904              : 
+    1905              :   public:
+    1906              :     constexpr
+    1907              :     common_iterator()
+    1908              :     noexcept(is_nothrow_default_constructible_v<_It>)
+    1909              :     requires default_initializable<_It>
+    1910              :     : _M_it(), _M_index(0)
+    1911              :     { }
+    1912              : 
+    1913              :     constexpr
+    1914              :     common_iterator(_It __i)
+    1915              :     noexcept(is_nothrow_move_constructible_v<_It>)
+    1916              :     : _M_it(std::move(__i)), _M_index(0)
+    1917              :     { }
+    1918              : 
+    1919              :     constexpr
+    1920              :     common_iterator(_Sent __s)
+    1921              :     noexcept(is_nothrow_move_constructible_v<_Sent>)
+    1922              :     : _M_sent(std::move(__s)), _M_index(1)
+    1923              :     { }
+    1924              : 
+    1925              :     template<typename _It2, typename _Sent2>
+    1926              :       requires convertible_to<const _It2&, _It>
+    1927              :         && convertible_to<const _Sent2&, _Sent>
+    1928              :       constexpr
+    1929              :       common_iterator(const common_iterator<_It2, _Sent2>& __x)
+    1930              :       noexcept(_S_noexcept<const _It2&, const _Sent2&>())
+    1931              :       : _M_valueless(), _M_index(__x._M_index)
+    1932              :       {
+    1933              :         __glibcxx_assert(__x._M_has_value());
+    1934              :         if (_M_index == 0)
+    1935              :           {
+    1936              :             if constexpr (is_trivially_default_constructible_v<_It>)
+    1937              :               _M_it = std::move(__x._M_it);
+    1938              :             else
+    1939              :               std::construct_at(std::__addressof(_M_it), __x._M_it);
+    1940              :           }
+    1941              :         else if (_M_index == 1)
+    1942              :           {
+    1943              :             if constexpr (is_trivially_default_constructible_v<_Sent>)
+    1944              :               _M_sent = std::move(__x._M_sent);
+    1945              :             else
+    1946              :               std::construct_at(std::__addressof(_M_sent), __x._M_sent);
+    1947              :           }
+    1948              :       }
+    1949              : 
+    1950              :     common_iterator(const common_iterator&) = default;
+    1951              : 
+    1952              :     constexpr
+    1953              :     common_iterator(const common_iterator& __x)
+    1954              :     noexcept(_S_noexcept<const _It&, const _Sent&>())
+    1955              :     requires (!is_trivially_copyable_v<_It> || !is_trivially_copyable_v<_Sent>)
+    1956              :     : _M_valueless(), _M_index(__x._M_index)
+    1957              :     {
+    1958              :       if (_M_index == 0)
+    1959              :         {
+    1960              :           if constexpr (is_trivially_default_constructible_v<_It>)
+    1961              :             _M_it = __x._M_it;
+    1962              :           else
+    1963              :             std::construct_at(std::__addressof(_M_it), __x._M_it);
+    1964              :         }
+    1965              :       else if (_M_index == 1)
+    1966              :         {
+    1967              :           if constexpr (is_trivially_default_constructible_v<_Sent>)
+    1968              :             _M_sent = __x._M_sent;
+    1969              :           else
+    1970              :             std::construct_at(std::__addressof(_M_sent), __x._M_sent);
+    1971              :         }
+    1972              :     }
+    1973              : 
+    1974              :     common_iterator(common_iterator&&) = default;
+    1975              : 
+    1976              :     constexpr
+    1977              :     common_iterator(common_iterator&& __x)
+    1978              :     noexcept(_S_noexcept<_It, _Sent>())
+    1979              :     requires (!is_trivially_copyable_v<_It> || !is_trivially_copyable_v<_Sent>)
+    1980              :     : _M_valueless(), _M_index(__x._M_index)
+    1981              :     {
+    1982              :       if (_M_index == 0)
+    1983              :         {
+    1984              :           if constexpr (is_trivially_default_constructible_v<_It>)
+    1985              :             _M_it = std::move(__x._M_it);
+    1986              :           else
+    1987              :             std::construct_at(std::__addressof(_M_it), std::move(__x._M_it));
+    1988              :         }
+    1989              :       else if (_M_index == 1)
+    1990              :         {
+    1991              :           if constexpr (is_trivially_default_constructible_v<_Sent>)
+    1992              :             _M_sent = std::move(__x._M_sent);
+    1993              :           else
+    1994              :             std::construct_at(std::__addressof(_M_sent),
+    1995              :                               std::move(__x._M_sent));
+    1996              :         }
+    1997              :     }
+    1998              : 
+    1999              :     constexpr common_iterator&
+    2000              :     operator=(const common_iterator&) = default;
+    2001              : 
+    2002              :     constexpr common_iterator&
+    2003              :     operator=(const common_iterator& __x)
+    2004              :     noexcept(is_nothrow_copy_assignable_v<_It>
+    2005              :              && is_nothrow_copy_assignable_v<_Sent>
+    2006              :              && is_nothrow_copy_constructible_v<_It>
+    2007              :              && is_nothrow_copy_constructible_v<_Sent>)
+    2008              :     requires (!is_trivially_copy_assignable_v<_It>
+    2009              :                 || !is_trivially_copy_assignable_v<_Sent>)
+    2010              :     {
+    2011              :       _M_assign(__x);
+    2012              :       return *this;
+    2013              :     }
+    2014              : 
+    2015              :     constexpr common_iterator&
+    2016              :     operator=(common_iterator&&) = default;
+    2017              : 
+    2018              :     constexpr common_iterator&
+    2019              :     operator=(common_iterator&& __x)
+    2020              :     noexcept(is_nothrow_move_assignable_v<_It>
+    2021              :              && is_nothrow_move_assignable_v<_Sent>
+    2022              :              && is_nothrow_move_constructible_v<_It>
+    2023              :              && is_nothrow_move_constructible_v<_Sent>)
+    2024              :     requires (!is_trivially_move_assignable_v<_It>
+    2025              :                 || !is_trivially_move_assignable_v<_Sent>)
+    2026              :     {
+    2027              :       _M_assign(std::move(__x));
+    2028              :       return *this;
+    2029              :     }
+    2030              : 
+    2031              :     template<typename _It2, typename _Sent2>
+    2032              :       requires convertible_to<const _It2&, _It>
+    2033              :         && convertible_to<const _Sent2&, _Sent>
+    2034              :         && assignable_from<_It&, const _It2&>
+    2035              :         && assignable_from<_Sent&, const _Sent2&>
+    2036              :       constexpr common_iterator&
+    2037              :       operator=(const common_iterator<_It2, _Sent2>& __x)
+    2038              :       noexcept(is_nothrow_constructible_v<_It, const _It2&>
+    2039              :                && is_nothrow_constructible_v<_Sent, const _Sent2&>
+    2040              :                && is_nothrow_assignable_v<_It&, const _It2&>
+    2041              :                && is_nothrow_assignable_v<_Sent&, const _Sent2&>)
+    2042              :       {
+    2043              :         __glibcxx_assert(__x._M_has_value());
+    2044              :         _M_assign(__x);
+    2045              :         return *this;
+    2046              :       }
+    2047              : 
+    2048              : #if __cpp_concepts >= 202002L // Constrained special member functions
+    2049              :     ~common_iterator() = default;
+    2050              : 
+    2051              :     constexpr
+    2052              :     ~common_iterator()
+    2053              :       requires (!is_trivially_destructible_v<_It>
+    2054              :                   || !is_trivially_destructible_v<_Sent>)
+    2055              : #else
+    2056              :     constexpr
+    2057              :     ~common_iterator()
+    2058              : #endif
+    2059              :     {
+    2060              :       if (_M_index == 0)
+    2061              :         _M_it.~_It();
+    2062              :       else if (_M_index == 1)
+    2063              :         _M_sent.~_Sent();
+    2064              :     }
+    2065              : 
+    2066              :     [[nodiscard]]
+    2067              :     constexpr decltype(auto)
+    2068              :     operator*()
+    2069              :     {
+    2070              :       __glibcxx_assert(_M_index == 0);
+    2071              :       return *_M_it;
+    2072              :     }
+    2073              : 
+    2074              :     [[nodiscard]]
+    2075              :     constexpr decltype(auto)
+    2076              :     operator*() const requires __detail::__dereferenceable<const _It>
+    2077              :     {
+    2078              :       __glibcxx_assert(_M_index == 0);
+    2079              :       return *_M_it;
+    2080              :     }
+    2081              : 
+    2082              :     [[nodiscard]]
+    2083              :     constexpr auto
+    2084              :     operator->() const requires __detail::__common_iter_has_arrow<_It>
+    2085              :     {
+    2086              :       __glibcxx_assert(_M_index == 0);
+    2087              :       if constexpr (is_pointer_v<_It> || requires { _M_it.operator->(); })
+    2088              :         return _M_it;
+    2089              :       else if constexpr (is_reference_v<iter_reference_t<_It>>)
+    2090              :         {
+    2091              :           auto&& __tmp = *_M_it;
+    2092              :           return std::__addressof(__tmp);
+    2093              :         }
+    2094              :       else
+    2095              :         return __arrow_proxy{*_M_it};
+    2096              :     }
+    2097              : 
+    2098              :     constexpr common_iterator&
+    2099              :     operator++()
+    2100              :     {
+    2101              :       __glibcxx_assert(_M_index == 0);
+    2102              :       ++_M_it;
+    2103              :       return *this;
+    2104              :     }
+    2105              : 
+    2106              :     constexpr decltype(auto)
+    2107              :     operator++(int)
+    2108              :     {
+    2109              :       __glibcxx_assert(_M_index == 0);
+    2110              :       if constexpr (forward_iterator<_It>)
+    2111              :         {
+    2112              :           common_iterator __tmp = *this;
+    2113              :           ++*this;
+    2114              :           return __tmp;
+    2115              :         }
+    2116              :       else if constexpr (!__detail::__common_iter_use_postfix_proxy<_It>)
+    2117              :         return _M_it++;
+    2118              :       else
+    2119              :         {
+    2120              :           __postfix_proxy __p(**this);
+    2121              :           ++*this;
+    2122              :           return __p;
+    2123              :         }
+    2124              :     }
+    2125              : 
+    2126              :     template<typename _It2, sentinel_for<_It> _Sent2>
+    2127              :       requires sentinel_for<_Sent, _It2>
+    2128              :       friend constexpr bool
+    2129              :       operator== [[nodiscard]] (const common_iterator& __x,
+    2130              :                                 const common_iterator<_It2, _Sent2>& __y)
+    2131              :       {
+    2132              :         switch(__x._M_index << 2 | __y._M_index)
+    2133              :           {
+    2134              :           case 0b0000:
+    2135              :           case 0b0101:
+    2136              :             return true;
+    2137              :           case 0b0001:
+    2138              :             return __x._M_it == __y._M_sent;
+    2139              :           case 0b0100:
+    2140              :             return __x._M_sent == __y._M_it;
+    2141              :           default:
+    2142              :             __glibcxx_assert(__x._M_has_value());
+    2143              :             __glibcxx_assert(__y._M_has_value());
+    2144              :             __builtin_unreachable();
+    2145              :           }
+    2146              :       }
+    2147              : 
+    2148              :     template<typename _It2, sentinel_for<_It> _Sent2>
+    2149              :       requires sentinel_for<_Sent, _It2> && equality_comparable_with<_It, _It2>
+    2150              :       friend constexpr bool
+    2151              :       operator== [[nodiscard]] (const common_iterator& __x,
+    2152              :                                 const common_iterator<_It2, _Sent2>& __y)
+    2153              :       {
+    2154              :         switch(__x._M_index << 2 | __y._M_index)
+    2155              :           {
+    2156              :           case 0b0101:
+    2157              :             return true;
+    2158              :           case 0b0000:
+    2159              :             return __x._M_it == __y._M_it;
+    2160              :           case 0b0001:
+    2161              :             return __x._M_it == __y._M_sent;
+    2162              :           case 0b0100:
+    2163              :             return __x._M_sent == __y._M_it;
+    2164              :           default:
+    2165              :             __glibcxx_assert(__x._M_has_value());
+    2166              :             __glibcxx_assert(__y._M_has_value());
+    2167              :             __builtin_unreachable();
+    2168              :           }
+    2169              :       }
+    2170              : 
+    2171              :     template<sized_sentinel_for<_It> _It2, sized_sentinel_for<_It> _Sent2>
+    2172              :       requires sized_sentinel_for<_Sent, _It2>
+    2173              :       friend constexpr iter_difference_t<_It2>
+    2174              :       operator- [[nodiscard]] (const common_iterator& __x,
+    2175              :                                const common_iterator<_It2, _Sent2>& __y)
+    2176              :       {
+    2177              :         switch(__x._M_index << 2 | __y._M_index)
+    2178              :           {
+    2179              :           case 0b0101:
+    2180              :             return 0;
+    2181              :           case 0b0000:
+    2182              :             return __x._M_it - __y._M_it;
+    2183              :           case 0b0001:
+    2184              :             return __x._M_it - __y._M_sent;
+    2185              :           case 0b0100:
+    2186              :             return __x._M_sent - __y._M_it;
+    2187              :           default:
+    2188              :             __glibcxx_assert(__x._M_has_value());
+    2189              :             __glibcxx_assert(__y._M_has_value());
+    2190              :             __builtin_unreachable();
+    2191              :           }
+    2192              :       }
+    2193              : 
+    2194              :     [[nodiscard]]
+    2195              :     friend constexpr iter_rvalue_reference_t<_It>
+    2196              :     iter_move(const common_iterator& __i)
+    2197              :     noexcept(noexcept(ranges::iter_move(std::declval<const _It&>())))
+    2198              :     requires input_iterator<_It>
+    2199              :     {
+    2200              :       __glibcxx_assert(__i._M_index == 0);
+    2201              :       return ranges::iter_move(__i._M_it);
+    2202              :     }
+    2203              : 
+    2204              :     template<indirectly_swappable<_It> _It2, typename _Sent2>
+    2205              :       friend constexpr void
+    2206              :       iter_swap(const common_iterator& __x,
+    2207              :                 const common_iterator<_It2, _Sent2>& __y)
+    2208              :       noexcept(noexcept(ranges::iter_swap(std::declval<const _It&>(),
+    2209              :                                           std::declval<const _It2&>())))
+    2210              :       {
+    2211              :         __glibcxx_assert(__x._M_index == 0);
+    2212              :         __glibcxx_assert(__y._M_index == 0);
+    2213              :         return ranges::iter_swap(__x._M_it, __y._M_it);
+    2214              :       }
+    2215              : 
+    2216              :   private:
+    2217              :     template<input_or_output_iterator _It2, sentinel_for<_It2> _Sent2>
+    2218              :       requires (!same_as<_It2, _Sent2>) && copyable<_It2>
+    2219              :       friend class common_iterator;
+    2220              : 
+    2221              :     constexpr bool
+    2222              :     _M_has_value() const noexcept { return _M_index != _S_valueless; }
+    2223              : 
+    2224              :     template<typename _CIt>
+    2225              :       constexpr void
+    2226              :       _M_assign(_CIt&& __x)
+    2227              :       {
+    2228              :         if (_M_index == __x._M_index)
+    2229              :           {
+    2230              :             if (_M_index == 0)
+    2231              :               _M_it = std::forward<_CIt>(__x)._M_it;
+    2232              :             else if (_M_index == 1)
+    2233              :               _M_sent = std::forward<_CIt>(__x)._M_sent;
+    2234              :           }
+    2235              :         else
+    2236              :           {
+    2237              :             if (_M_index == 0)
+    2238              :               _M_it.~_It();
+    2239              :             else if (_M_index == 1)
+    2240              :               _M_sent.~_Sent();
+    2241              :             _M_index = _S_valueless;
+    2242              : 
+    2243              :             if (__x._M_index == 0)
+    2244              :               std::construct_at(std::__addressof(_M_it),
+    2245              :                                 std::forward<_CIt>(__x)._M_it);
+    2246              :             else if (__x._M_index == 1)
+    2247              :               std::construct_at(std::__addressof(_M_sent),
+    2248              :                                 std::forward<_CIt>(__x)._M_sent);
+    2249              :             _M_index = __x._M_index;
+    2250              :           }
+    2251              :       }
+    2252              : 
+    2253              :     union
+    2254              :     {
+    2255              :       _It _M_it;
+    2256              :       _Sent _M_sent;
+    2257              :       unsigned char _M_valueless;
+    2258              :     };
+    2259              :     unsigned char _M_index; // 0 == _M_it, 1 == _M_sent, 2 == valueless
+    2260              : 
+    2261              :     static constexpr unsigned char _S_valueless{2};
+    2262              :   };
+    2263              : 
+    2264              :   template<typename _It, typename _Sent>
+    2265              :     struct incrementable_traits<common_iterator<_It, _Sent>>
+    2266              :     {
+    2267              :       using difference_type = iter_difference_t<_It>;
+    2268              :     };
+    2269              : 
+    2270              :   template<input_iterator _It, typename _Sent>
+    2271              :     struct iterator_traits<common_iterator<_It, _Sent>>
+    2272              :     {
+    2273              :     private:
+    2274              :       template<typename _Iter>
+    2275              :         struct __ptr
+    2276              :         {
+    2277              :           using type = void;
+    2278              :         };
+    2279              : 
+    2280              :       template<typename _Iter>
+    2281              :         requires __detail::__common_iter_has_arrow<_Iter>
+    2282              :         struct __ptr<_Iter>
+    2283              :         {
+    2284              :           using _CIter = common_iterator<_Iter, _Sent>;
+    2285              :           using type = decltype(std::declval<const _CIter&>().operator->());
+    2286              :         };
+    2287              : 
+    2288              :       static auto
+    2289              :       _S_iter_cat()
+    2290              :       {
+    2291              :         if constexpr (requires { requires derived_from<__iter_category_t<_It>,
+    2292              :                                                        forward_iterator_tag>; })
+    2293              :           return forward_iterator_tag{};
+    2294              :         else
+    2295              :           return input_iterator_tag{};
+    2296              :       }
+    2297              : 
+    2298              :     public:
+    2299              :       using iterator_concept = __conditional_t<forward_iterator<_It>,
+    2300              :                                                forward_iterator_tag,
+    2301              :                                                input_iterator_tag>;
+    2302              :       using iterator_category = decltype(_S_iter_cat());
+    2303              :       using value_type = iter_value_t<_It>;
+    2304              :       using difference_type = iter_difference_t<_It>;
+    2305              :       using pointer = typename __ptr<_It>::type;
+    2306              :       using reference = iter_reference_t<_It>;
+    2307              :     };
+    2308              : 
+    2309              :   // [iterators.counted] Counted iterators
+    2310              : 
+    2311              :   namespace __detail
+    2312              :   {
+    2313              :     template<typename _It>
+    2314              :       struct __counted_iter_value_type
+    2315              :       { };
+    2316              : 
+    2317              :     template<indirectly_readable _It>
+    2318              :       struct __counted_iter_value_type<_It>
+    2319              :       { using value_type = iter_value_t<_It>; };
+    2320              : 
+    2321              :     template<typename _It>
+    2322              :       struct __counted_iter_concept
+    2323              :       { };
+    2324              : 
+    2325              :     template<typename _It>
+    2326              :       requires requires { typename _It::iterator_concept; }
+    2327              :       struct __counted_iter_concept<_It>
+    2328              :       { using iterator_concept = typename _It::iterator_concept; };
+    2329              : 
+    2330              :     template<typename _It>
+    2331              :       struct __counted_iter_cat
+    2332              :       { };
+    2333              : 
+    2334              :     template<typename _It>
+    2335              :       requires requires { typename _It::iterator_category; }
+    2336              :       struct __counted_iter_cat<_It>
+    2337              :       { using iterator_category = typename _It::iterator_category; };
+    2338              :   }
+    2339              : 
+    2340              :   /// An iterator adaptor that keeps track of the distance to the end.
+    2341              :   template<input_or_output_iterator _It>
+    2342              :     class counted_iterator
+    2343              :       : public __detail::__counted_iter_value_type<_It>,
+    2344              :         public __detail::__counted_iter_concept<_It>,
+    2345              :         public __detail::__counted_iter_cat<_It>
+    2346              :     {
+    2347              :     public:
+    2348              :       using iterator_type = _It;
+    2349              :       // value_type defined in __counted_iter_value_type
+    2350              :       using difference_type = iter_difference_t<_It>;
+    2351              :       // iterator_concept defined in __counted_iter_concept
+    2352              :       // iterator_category defined in __counted_iter_cat
+    2353              : 
+    2354              :       constexpr counted_iterator() requires default_initializable<_It> = default;
+    2355              : 
+    2356              :       constexpr
+    2357              :       counted_iterator(_It __i, iter_difference_t<_It> __n)
+    2358              :       : _M_current(std::move(__i)), _M_length(__n)
+    2359              :       { __glibcxx_assert(__n >= 0); }
+    2360              : 
+    2361              :       template<typename _It2>
+    2362              :         requires convertible_to<const _It2&, _It>
+    2363              :         constexpr
+    2364              :         counted_iterator(const counted_iterator<_It2>& __x)
+    2365              :         : _M_current(__x._M_current), _M_length(__x._M_length)
+    2366              :         { }
+    2367              : 
+    2368              :       template<typename _It2>
+    2369              :         requires assignable_from<_It&, const _It2&>
+    2370              :         constexpr counted_iterator&
+    2371              :         operator=(const counted_iterator<_It2>& __x)
+    2372              :         {
+    2373              :           _M_current = __x._M_current;
+    2374              :           _M_length = __x._M_length;
+    2375              :           return *this;
+    2376              :         }
+    2377              : 
+    2378              :       [[nodiscard]]
+    2379              :       constexpr const _It&
+    2380              :       base() const & noexcept
+    2381              :       { return _M_current; }
+    2382              : 
+    2383              :       [[nodiscard]]
+    2384              :       constexpr _It
+    2385              :       base() &&
+    2386              :       noexcept(is_nothrow_move_constructible_v<_It>)
+    2387              :       { return std::move(_M_current); }
+    2388              : 
+    2389              :       [[nodiscard]]
+    2390              :       constexpr iter_difference_t<_It>
+    2391              :       count() const noexcept { return _M_length; }
+    2392              : 
+    2393              :       [[nodiscard]]
+    2394              :       constexpr decltype(auto)
+    2395              :       operator*()
+    2396              :       noexcept(noexcept(*_M_current))
+    2397              :       {
+    2398              :         __glibcxx_assert( _M_length > 0 );
+    2399              :         return *_M_current;
+    2400              :       }
+    2401              : 
+    2402              :       [[nodiscard]]
+    2403              :       constexpr decltype(auto)
+    2404              :       operator*() const
+    2405              :       noexcept(noexcept(*_M_current))
+    2406              :       requires __detail::__dereferenceable<const _It>
+    2407              :       {
+    2408              :         __glibcxx_assert( _M_length > 0 );
+    2409              :         return *_M_current;
+    2410              :       }
+    2411              : 
+    2412              :       [[nodiscard]]
+    2413              :       constexpr auto
+    2414              :       operator->() const noexcept
+    2415              :       requires contiguous_iterator<_It>
+    2416              :       { return std::to_address(_M_current); }
+    2417              : 
+    2418              :       constexpr counted_iterator&
+    2419              :       operator++()
+    2420              :       {
+    2421              :         __glibcxx_assert(_M_length > 0);
+    2422              :         ++_M_current;
+    2423              :         --_M_length;
+    2424              :         return *this;
+    2425              :       }
+    2426              : 
+    2427              :       constexpr decltype(auto)
+    2428              :       operator++(int)
+    2429              :       {
+    2430              :         __glibcxx_assert(_M_length > 0);
+    2431              :         --_M_length;
+    2432              :         __try
+    2433              :           {
+    2434              :             return _M_current++;
+    2435              :           } __catch(...) {
+    2436              :             ++_M_length;
+    2437              :             __throw_exception_again;
+    2438              :           }
+    2439              :       }
+    2440              : 
+    2441              :       constexpr counted_iterator
+    2442              :       operator++(int) requires forward_iterator<_It>
+    2443              :       {
+    2444              :         auto __tmp = *this;
+    2445              :         ++*this;
+    2446              :         return __tmp;
+    2447              :       }
+    2448              : 
+    2449              :       constexpr counted_iterator&
+    2450              :       operator--() requires bidirectional_iterator<_It>
+    2451              :       {
+    2452              :         --_M_current;
+    2453              :         ++_M_length;
+    2454              :         return *this;
+    2455              :       }
+    2456              : 
+    2457              :       constexpr counted_iterator
+    2458              :       operator--(int) requires bidirectional_iterator<_It>
+    2459              :       {
+    2460              :         auto __tmp = *this;
+    2461              :         --*this;
+    2462              :         return __tmp;
+    2463              :       }
+    2464              : 
+    2465              :       [[nodiscard]]
+    2466              :       constexpr counted_iterator
+    2467              :       operator+(iter_difference_t<_It> __n) const
+    2468              :         requires random_access_iterator<_It>
+    2469              :       { return counted_iterator(_M_current + __n, _M_length - __n); }
+    2470              : 
+    2471              :       [[nodiscard]]
+    2472              :       friend constexpr counted_iterator
+    2473              :       operator+(iter_difference_t<_It> __n, const counted_iterator& __x)
+    2474              :       requires random_access_iterator<_It>
+    2475              :       { return __x + __n; }
+    2476              : 
+    2477              :       constexpr counted_iterator&
+    2478              :       operator+=(iter_difference_t<_It> __n)
+    2479              :       requires random_access_iterator<_It>
+    2480              :       {
+    2481              :         __glibcxx_assert(__n <= _M_length);
+    2482              :         _M_current += __n;
+    2483              :         _M_length -= __n;
+    2484              :         return *this;
+    2485              :       }
+    2486              : 
+    2487              :       [[nodiscard]]
+    2488              :       constexpr counted_iterator
+    2489              :       operator-(iter_difference_t<_It> __n) const
+    2490              :       requires random_access_iterator<_It>
+    2491              :       { return counted_iterator(_M_current - __n, _M_length + __n); }
+    2492              : 
+    2493              :       template<common_with<_It> _It2>
+    2494              :         [[nodiscard]]
+    2495              :         friend constexpr iter_difference_t<_It2>
+    2496              :         operator-(const counted_iterator& __x,
+    2497              :                   const counted_iterator<_It2>& __y)
+    2498              :         { return __y._M_length - __x._M_length; }
+    2499              : 
+    2500              :       [[nodiscard]]
+    2501              :       friend constexpr iter_difference_t<_It>
+    2502              :       operator-(const counted_iterator& __x, default_sentinel_t)
+    2503              :       { return -__x._M_length; }
+    2504              : 
+    2505              :       [[nodiscard]]
+    2506              :       friend constexpr iter_difference_t<_It>
+    2507              :       operator-(default_sentinel_t, const counted_iterator& __y)
+    2508              :       { return __y._M_length; }
+    2509              : 
+    2510              :       constexpr counted_iterator&
+    2511              :       operator-=(iter_difference_t<_It> __n)
+    2512              :       requires random_access_iterator<_It>
+    2513              :       {
+    2514              :         __glibcxx_assert(-__n <= _M_length);
+    2515              :         _M_current -= __n;
+    2516              :         _M_length += __n;
+    2517              :         return *this;
+    2518              :       }
+    2519              : 
+    2520              :       [[nodiscard]]
+    2521              :       constexpr decltype(auto)
+    2522              :       operator[](iter_difference_t<_It> __n) const
+    2523              :       noexcept(noexcept(_M_current[__n]))
+    2524              :       requires random_access_iterator<_It>
+    2525              :       {
+    2526              :         __glibcxx_assert(__n < _M_length);
+    2527              :         return _M_current[__n];
+    2528              :       }
+    2529              : 
+    2530              :       template<common_with<_It> _It2>
+    2531              :         [[nodiscard]]
+    2532              :         friend constexpr bool
+    2533              :         operator==(const counted_iterator& __x,
+    2534              :                    const counted_iterator<_It2>& __y)
+    2535              :         { return __x._M_length == __y._M_length; }
+    2536              : 
+    2537              :       [[nodiscard]]
+    2538              :       friend constexpr bool
+    2539              :       operator==(const counted_iterator& __x, default_sentinel_t)
+    2540              :       { return __x._M_length == 0; }
+    2541              : 
+    2542              :       template<common_with<_It> _It2>
+    2543              :         [[nodiscard]]
+    2544              :         friend constexpr strong_ordering
+    2545              :         operator<=>(const counted_iterator& __x,
+    2546              :                     const counted_iterator<_It2>& __y)
+    2547              :         { return __y._M_length <=> __x._M_length; }
+    2548              : 
+    2549              :       [[nodiscard]]
+    2550              :       friend constexpr iter_rvalue_reference_t<_It>
+    2551              :       iter_move(const counted_iterator& __i)
+    2552              :       noexcept(noexcept(ranges::iter_move(__i._M_current)))
+    2553              :       requires input_iterator<_It>
+    2554              :       {
+    2555              :         __glibcxx_assert( __i._M_length > 0 );
+    2556              :         return ranges::iter_move(__i._M_current);
+    2557              :       }
+    2558              : 
+    2559              :       template<indirectly_swappable<_It> _It2>
+    2560              :         friend constexpr void
+    2561              :         iter_swap(const counted_iterator& __x,
+    2562              :                   const counted_iterator<_It2>& __y)
+    2563              :         noexcept(noexcept(ranges::iter_swap(__x._M_current, __y._M_current)))
+    2564              :         {
+    2565              :           __glibcxx_assert( __x._M_length > 0 && __y._M_length > 0 );
+    2566              :           ranges::iter_swap(__x._M_current, __y._M_current);
+    2567              :         }
+    2568              : 
+    2569              :     private:
+    2570              :       template<input_or_output_iterator _It2> friend class counted_iterator;
+    2571              : 
+    2572              :       _It _M_current = _It();
+    2573              :       iter_difference_t<_It> _M_length = 0;
+    2574              :     };
+    2575              : 
+    2576              :   template<input_iterator _It>
+    2577              :     requires same_as<__detail::__iter_traits<_It>, iterator_traits<_It>>
+    2578              :     struct iterator_traits<counted_iterator<_It>> : iterator_traits<_It>
+    2579              :     {
+    2580              :       using pointer = __conditional_t<contiguous_iterator<_It>,
+    2581              :                                       add_pointer_t<iter_reference_t<_It>>,
+    2582              :                                       void>;
+    2583              :     };
+    2584              : 
+    2585              : #if __cplusplus > 202020L
+    2586              :   template<indirectly_readable _It>
+    2587              :     using iter_const_reference_t
+    2588              :       = common_reference_t<const iter_value_t<_It>&&, iter_reference_t<_It>>;
+    2589              : 
+    2590              :   template<input_iterator _It> class basic_const_iterator;
+    2591              : 
+    2592              :   namespace __detail
+    2593              :   {
+    2594              :     template<typename _It>
+    2595              :       concept __constant_iterator = input_iterator<_It>
+    2596              :         && same_as<iter_const_reference_t<_It>, iter_reference_t<_It>>;
+    2597              : 
+    2598              :     template<typename _Tp>
+    2599              :       inline constexpr bool __is_const_iterator = false;
+    2600              : 
+    2601              :     template<typename _It>
+    2602              :       inline constexpr bool __is_const_iterator<basic_const_iterator<_It>> = true;
+    2603              : 
+    2604              :     template<typename _Tp>
+    2605              :       concept __not_a_const_iterator = !__is_const_iterator<_Tp>;
+    2606              : 
+    2607              :     template<indirectly_readable _It>
+    2608              :       using __iter_const_rvalue_reference_t
+    2609              :         = common_reference_t<const iter_value_t<_It>&&, iter_rvalue_reference_t<_It>>;
+    2610              : 
+    2611              :     template<typename _It>
+    2612              :       struct __basic_const_iterator_iter_cat
+    2613              :       { };
+    2614              : 
+    2615              :     template<forward_iterator _It>
+    2616              :       struct __basic_const_iterator_iter_cat<_It>
+    2617              :       { using iterator_category = __iter_category_t<_It>; };
+    2618              :   } // namespace detail
+    2619              : 
+    2620              :   template<input_iterator _It>
+    2621              :     using const_iterator
+    2622              :       = __conditional_t<__detail::__constant_iterator<_It>, _It, basic_const_iterator<_It>>;
+    2623              : 
+    2624              :   namespace __detail
+    2625              :   {
+    2626              :     template<typename _Sent>
+    2627              :       struct __const_sentinel
+    2628              :       { using type = _Sent; };
+    2629              : 
+    2630              :     template<input_iterator _Sent>
+    2631              :       struct __const_sentinel<_Sent>
+    2632              :       { using type = const_iterator<_Sent>; };
+    2633              :   } // namespace __detail
+    2634              : 
+    2635              :   template<semiregular _Sent>
+    2636              :     using const_sentinel = typename __detail::__const_sentinel<_Sent>::type;
+    2637              : 
+    2638              :   template<input_iterator _It>
+    2639              :   class basic_const_iterator
+    2640              :   : public __detail::__basic_const_iterator_iter_cat<_It>
+    2641              :   {
+    2642              :     _It _M_current = _It();
+    2643              :     using __reference = iter_const_reference_t<_It>;
+    2644              :     using __rvalue_reference = __detail::__iter_const_rvalue_reference_t<_It>;
+    2645              : 
+    2646              :     static auto
+    2647              :     _S_iter_concept()
+    2648              :     {
+    2649              :       if constexpr (contiguous_iterator<_It>)
+    2650              :         return contiguous_iterator_tag{};
+    2651              :       else if constexpr (random_access_iterator<_It>)
+    2652              :         return random_access_iterator_tag{};
+    2653              :       else if constexpr (bidirectional_iterator<_It>)
+    2654              :         return bidirectional_iterator_tag{};
+    2655              :       else if constexpr (forward_iterator<_It>)
+    2656              :         return forward_iterator_tag{};
+    2657              :       else
+    2658              :         return input_iterator_tag{};
+    2659              :     }
+    2660              : 
+    2661              :     template<input_iterator _It2> friend class basic_const_iterator;
+    2662              : 
+    2663              :   public:
+    2664              :     using iterator_concept = decltype(_S_iter_concept());
+    2665              :     using value_type = iter_value_t<_It>;
+    2666              :     using difference_type = iter_difference_t<_It>;
+    2667              : 
+    2668              :     basic_const_iterator() requires default_initializable<_It> = default;
+    2669              : 
+    2670              :     constexpr
+    2671              :     basic_const_iterator(_It __current)
+    2672              :     noexcept(is_nothrow_move_constructible_v<_It>)
+    2673              :     : _M_current(std::move(__current))
+    2674              :     { }
+    2675              : 
+    2676              :     template<convertible_to<_It> _It2>
+    2677              :       constexpr
+    2678              :       basic_const_iterator(basic_const_iterator<_It2> __current)
+    2679              :       noexcept(is_nothrow_constructible_v<_It, _It2>)
+    2680              :       : _M_current(std::move(__current._M_current))
+    2681              :       { }
+    2682              : 
+    2683              :     template<__detail::__different_from<basic_const_iterator> _Tp>
+    2684              :       requires convertible_to<_Tp, _It>
+    2685              :       constexpr
+    2686              :       basic_const_iterator(_Tp&& __current)
+    2687              :       noexcept(is_nothrow_constructible_v<_It, _Tp>)
+    2688              :       : _M_current(std::forward<_Tp>(__current))
+    2689              :       { }
+    2690              : 
+    2691              :     constexpr const _It&
+    2692              :     base() const & noexcept
+    2693              :     { return _M_current; }
+    2694              : 
+    2695              :     constexpr _It
+    2696              :     base() &&
+    2697              :     noexcept(is_nothrow_move_constructible_v<_It>)
+    2698              :     { return std::move(_M_current); }
+    2699              : 
+    2700              :     constexpr __reference
+    2701              :     operator*() const
+    2702              :     noexcept(noexcept(static_cast<__reference>(*_M_current)))
+    2703              :     { return static_cast<__reference>(*_M_current); }
+    2704              : 
+    2705              :     constexpr const auto*
+    2706              :     operator->() const
+    2707              :     noexcept(contiguous_iterator<_It> || noexcept(*_M_current))
+    2708              :     requires is_lvalue_reference_v<iter_reference_t<_It>>
+    2709              :       && same_as<remove_cvref_t<iter_reference_t<_It>>, value_type>
+    2710              :     {
+    2711              :       if constexpr (contiguous_iterator<_It>)
+    2712              :         return std::to_address(_M_current);
+    2713              :       else
+    2714              :         return std::__addressof(*_M_current);
+    2715              :     }
+    2716              : 
+    2717              :     constexpr basic_const_iterator&
+    2718              :     operator++()
+    2719              :     noexcept(noexcept(++_M_current))
+    2720              :     {
+    2721              :       ++_M_current;
+    2722              :       return *this;
+    2723              :     }
+    2724              : 
+    2725              :     constexpr void
+    2726              :     operator++(int)
+    2727              :     noexcept(noexcept(++_M_current))
+    2728              :     { ++_M_current; }
+    2729              : 
+    2730              :     constexpr basic_const_iterator
+    2731              :     operator++(int)
+    2732              :     noexcept(noexcept(++*this) && is_nothrow_copy_constructible_v<basic_const_iterator>)
+    2733              :     requires forward_iterator<_It>
+    2734              :     {
+    2735              :       auto __tmp = *this;
+    2736              :       ++*this;
+    2737              :       return __tmp;
+    2738              :     }
+    2739              : 
+    2740              :     constexpr basic_const_iterator&
+    2741              :     operator--()
+    2742              :     noexcept(noexcept(--_M_current))
+    2743              :     requires bidirectional_iterator<_It>
+    2744              :     {
+    2745              :       --_M_current;
+    2746              :       return *this;
+    2747              :     }
+    2748              : 
+    2749              :     constexpr basic_const_iterator
+    2750              :     operator--(int)
+    2751              :     noexcept(noexcept(--*this) && is_nothrow_copy_constructible_v<basic_const_iterator>)
+    2752              :     requires bidirectional_iterator<_It>
+    2753              :     {
+    2754              :       auto __tmp = *this;
+    2755              :       --*this;
+    2756              :       return __tmp;
+    2757              :     }
+    2758              : 
+    2759              :     constexpr basic_const_iterator&
+    2760              :     operator+=(difference_type __n)
+    2761              :     noexcept(noexcept(_M_current += __n))
+    2762              :     requires random_access_iterator<_It>
+    2763              :     {
+    2764              :       _M_current += __n;
+    2765              :       return *this;
+    2766              :     }
+    2767              : 
+    2768              :     constexpr basic_const_iterator&
+    2769              :     operator-=(difference_type __n)
+    2770              :     noexcept(noexcept(_M_current -= __n))
+    2771              :     requires random_access_iterator<_It>
+    2772              :     {
+    2773              :       _M_current -= __n;
+    2774              :       return *this;
+    2775              :     }
+    2776              : 
+    2777              :     constexpr __reference
+    2778              :     operator[](difference_type __n) const
+    2779              :     noexcept(noexcept(static_cast<__reference>(_M_current[__n])))
+    2780              :     requires random_access_iterator<_It>
+    2781              :     { return static_cast<__reference>(_M_current[__n]); }
+    2782              : 
+    2783              :     template<sentinel_for<_It> _Sent>
+    2784              :       constexpr bool
+    2785              :       operator==(const _Sent& __s) const
+    2786              :       noexcept(noexcept(_M_current == __s))
+    2787              :       { return _M_current == __s; }
+    2788              : 
+    2789              :     constexpr bool
+    2790              :     operator<(const basic_const_iterator& __y) const
+    2791              :     noexcept(noexcept(_M_current < __y._M_current))
+    2792              :     requires random_access_iterator<_It>
+    2793              :     { return _M_current < __y._M_current; }
+    2794              : 
+    2795              :     constexpr bool
+    2796              :     operator>(const basic_const_iterator& __y) const
+    2797              :     noexcept(noexcept(_M_current > __y._M_current))
+    2798              :     requires random_access_iterator<_It>
+    2799              :     { return _M_current > __y._M_current; }
+    2800              : 
+    2801              :     constexpr bool
+    2802              :     operator<=(const basic_const_iterator& __y) const
+    2803              :     noexcept(noexcept(_M_current <= __y._M_current))
+    2804              :     requires random_access_iterator<_It>
+    2805              :     { return _M_current <= __y._M_current; }
+    2806              : 
+    2807              :     constexpr bool
+    2808              :     operator>=(const basic_const_iterator& __y) const
+    2809              :     noexcept(noexcept(_M_current >= __y._M_current))
+    2810              :     requires random_access_iterator<_It>
+    2811              :     { return _M_current >= __y._M_current; }
+    2812              : 
+    2813              :     constexpr auto
+    2814              :     operator<=>(const basic_const_iterator& __y) const
+    2815              :     noexcept(noexcept(_M_current <=> __y._M_current))
+    2816              :     requires random_access_iterator<_It> && three_way_comparable<_It>
+    2817              :     { return _M_current <=> __y._M_current; }
+    2818              : 
+    2819              :     template<__detail::__different_from<basic_const_iterator> _It2>
+    2820              :       constexpr bool
+    2821              :       operator<(const _It2& __y) const
+    2822              :       noexcept(noexcept(_M_current < __y))
+    2823              :       requires random_access_iterator<_It> && totally_ordered_with<_It, _It2>
+    2824              :       { return _M_current < __y; }
+    2825              : 
+    2826              :     template<__detail::__different_from<basic_const_iterator> _It2>
+    2827              :       constexpr bool
+    2828              :       operator>(const _It2& __y) const
+    2829              :       noexcept(noexcept(_M_current > __y))
+    2830              :       requires random_access_iterator<_It> && totally_ordered_with<_It, _It2>
+    2831              :       { return _M_current > __y; }
+    2832              : 
+    2833              :     template<__detail::__different_from<basic_const_iterator> _It2>
+    2834              :       constexpr bool
+    2835              :       operator<=(const _It2& __y) const
+    2836              :       noexcept(noexcept(_M_current <= __y))
+    2837              :       requires random_access_iterator<_It> && totally_ordered_with<_It, _It2>
+    2838              :       { return _M_current <= __y; }
+    2839              : 
+    2840              :     template<__detail::__different_from<basic_const_iterator> _It2>
+    2841              :       constexpr bool
+    2842              :       operator>=(const _It2& __y) const
+    2843              :       noexcept(noexcept(_M_current >= __y))
+    2844              :       requires random_access_iterator<_It> && totally_ordered_with<_It, _It2>
+    2845              :       { return _M_current >= __y; }
+    2846              : 
+    2847              :     template<__detail::__different_from<basic_const_iterator> _It2>
+    2848              :       constexpr auto
+    2849              :       operator<=>(const _It2& __y) const
+    2850              :       noexcept(noexcept(_M_current <=> __y))
+    2851              :       requires random_access_iterator<_It> && totally_ordered_with<_It, _It2>
+    2852              :         && three_way_comparable_with<_It, _It2>
+    2853              :       { return _M_current <=> __y; }
+    2854              : 
+    2855              :     template<__detail::__not_a_const_iterator _It2>
+    2856              :       friend constexpr bool
+    2857              :       operator<(const _It2& __x, const basic_const_iterator& __y)
+    2858              :       noexcept(noexcept(__x < __y._M_current))
+    2859              :       requires random_access_iterator<_It> && totally_ordered_with<_It, _It2>
+    2860              :       { return __x < __y._M_current; }
+    2861              : 
+    2862              :     template<__detail::__not_a_const_iterator _It2>
+    2863              :       friend constexpr bool
+    2864              :       operator>(const _It2& __x, const basic_const_iterator& __y)
+    2865              :       noexcept(noexcept(__x > __y._M_current))
+    2866              :       requires random_access_iterator<_It> && totally_ordered_with<_It, _It2>
+    2867              :       { return __x > __y._M_current; }
+    2868              : 
+    2869              :     template<__detail::__not_a_const_iterator _It2>
+    2870              :       friend constexpr bool
+    2871              :       operator<=(const _It2& __x, const basic_const_iterator& __y)
+    2872              :       noexcept(noexcept(__x <= __y._M_current))
+    2873              :       requires random_access_iterator<_It> && totally_ordered_with<_It, _It2>
+    2874              :       { return __x <= __y._M_current; }
+    2875              : 
+    2876              :     template<__detail::__not_a_const_iterator _It2>
+    2877              :       friend constexpr bool
+    2878              :       operator>=(const _It2& __x, const basic_const_iterator& __y)
+    2879              :       noexcept(noexcept(__x >= __y._M_current))
+    2880              :       requires random_access_iterator<_It> && totally_ordered_with<_It, _It2>
+    2881              :       { return __x >= __y._M_current; }
+    2882              : 
+    2883              :     friend constexpr basic_const_iterator
+    2884              :     operator+(const basic_const_iterator& __i, difference_type __n)
+    2885              :     noexcept(noexcept(basic_const_iterator(__i._M_current + __n)))
+    2886              :     requires random_access_iterator<_It>
+    2887              :     { return basic_const_iterator(__i._M_current + __n); }
+    2888              : 
+    2889              :     friend constexpr basic_const_iterator
+    2890              :     operator+(difference_type __n, const basic_const_iterator& __i)
+    2891              :     noexcept(noexcept(basic_const_iterator(__i._M_current + __n)))
+    2892              :     requires random_access_iterator<_It>
+    2893              :     { return basic_const_iterator(__i._M_current + __n); }
+    2894              : 
+    2895              :     friend constexpr basic_const_iterator
+    2896              :     operator-(const basic_const_iterator& __i, difference_type __n)
+    2897              :     noexcept(noexcept(basic_const_iterator(__i._M_current - __n)))
+    2898              :     requires random_access_iterator<_It>
+    2899              :     { return basic_const_iterator(__i._M_current - __n); }
+    2900              : 
+    2901              :     template<sized_sentinel_for<_It> _Sent>
+    2902              :       constexpr difference_type
+    2903              :       operator-(const _Sent& __y) const
+    2904              :       noexcept(noexcept(_M_current - __y))
+    2905              :       { return _M_current - __y; }
+    2906              : 
+    2907              :     template<__detail::__not_a_const_iterator _Sent>
+    2908              :       requires sized_sentinel_for<_Sent, _It>
+    2909              :       friend constexpr difference_type
+    2910              :       operator-(const _Sent& __x, const basic_const_iterator& __y)
+    2911              :       noexcept(noexcept(__x - __y._M_current))
+    2912              :       { return __x - __y._M_current; }
+    2913              : 
+    2914              :     friend constexpr __rvalue_reference
+    2915              :     iter_move(const basic_const_iterator& __i)
+    2916              :     noexcept(noexcept(static_cast<__rvalue_reference>(ranges::iter_move(__i._M_current))))
+    2917              :     { return static_cast<__rvalue_reference>(ranges::iter_move(__i._M_current)); }
+    2918              :   };
+    2919              : 
+    2920              :   template<typename _Tp, common_with<_Tp> _Up>
+    2921              :     requires input_iterator<common_type_t<_Tp, _Up>>
+    2922              :     struct common_type<basic_const_iterator<_Tp>, _Up>
+    2923              :     { using type = basic_const_iterator<common_type_t<_Tp, _Up>>; };
+    2924              : 
+    2925              :   template<typename _Tp, common_with<_Tp> _Up>
+    2926              :     requires input_iterator<common_type_t<_Tp, _Up>>
+    2927              :     struct common_type<_Up, basic_const_iterator<_Tp>>
+    2928              :     { using type = basic_const_iterator<common_type_t<_Tp, _Up>>; };
+    2929              : 
+    2930              :   template<typename _Tp, common_with<_Tp> _Up>
+    2931              :     requires input_iterator<common_type_t<_Tp, _Up>>
+    2932              :     struct common_type<basic_const_iterator<_Tp>, basic_const_iterator<_Up>>
+    2933              :     { using type = basic_const_iterator<common_type_t<_Tp, _Up>>; };
+    2934              : 
+    2935              :   template<input_iterator _It>
+    2936              :     constexpr const_iterator<_It>
+    2937              :     make_const_iterator(_It __it)
+    2938              :     noexcept(is_nothrow_convertible_v<_It, const_iterator<_It>>)
+    2939              :     { return __it; }
+    2940              : 
+    2941              :   template<semiregular _Sent>
+    2942              :     constexpr const_sentinel<_Sent>
+    2943              :     make_const_sentinel(_Sent __s)
+    2944              :     noexcept(is_nothrow_convertible_v<_Sent, const_sentinel<_Sent>>)
+    2945              :     { return __s; }
+    2946              : #endif // C++23
+    2947              : #endif // C++20
+    2948              : 
+    2949              :   /// @} group iterators
+    2950              : 
+    2951              :   template<typename _Iterator>
+    2952              :     _GLIBCXX20_CONSTEXPR
+    2953              :     auto
+    2954              :     __niter_base(move_iterator<_Iterator> __it)
+    2955              :     -> decltype(make_move_iterator(__niter_base(__it.base())))
+    2956              :     { return make_move_iterator(__niter_base(__it.base())); }
+    2957              : 
+    2958              :   template<typename _Iterator>
+    2959              :     struct __is_move_iterator<move_iterator<_Iterator> >
+    2960              :     {
+    2961              :       enum { __value = 1 };
+    2962              :       typedef __true_type __type;
+    2963              :     };
+    2964              : 
+    2965              :   template<typename _Iterator>
+    2966              :     _GLIBCXX20_CONSTEXPR
+    2967              :     auto
+    2968         3512 :     __miter_base(move_iterator<_Iterator> __it)
+    2969              :     -> decltype(__miter_base(__it.base()))
+    2970         3512 :     { return __miter_base(__it.base()); }
+    2971              : 
+    2972              : #define _GLIBCXX_MAKE_MOVE_ITERATOR(_Iter) std::make_move_iterator(_Iter)
+    2973              : #define _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(_Iter) \
+    2974              :   std::__make_move_if_noexcept_iterator(_Iter)
+    2975              : #else
+    2976              : #define _GLIBCXX_MAKE_MOVE_ITERATOR(_Iter) (_Iter)
+    2977              : #define _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(_Iter) (_Iter)
+    2978              : #endif // C++11
+    2979              : 
+    2980              : #if __cpp_deduction_guides >= 201606
+    2981              :   // These helper traits are used for deduction guides
+    2982              :   // of associative containers.
+    2983              :   template<typename _InputIterator>
+    2984              :     using __iter_key_t = remove_const_t<
+    2985              :       typename iterator_traits<_InputIterator>::value_type::first_type>;
+    2986              : 
+    2987              :   template<typename _InputIterator>
+    2988              :     using __iter_val_t
+    2989              :       = typename iterator_traits<_InputIterator>::value_type::second_type;
+    2990              : 
+    2991              :   template<typename _T1, typename _T2>
+    2992              :     struct pair;
+    2993              : 
+    2994              :   template<typename _InputIterator>
+    2995              :     using __iter_to_alloc_t
+    2996              :       = pair<const __iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>>;
+    2997              : #endif // __cpp_deduction_guides
+    2998              : 
+    2999              : _GLIBCXX_END_NAMESPACE_VERSION
+    3000              : } // namespace
+    3001              : 
+    3002              : #ifdef _GLIBCXX_DEBUG
+    3003              : # include <debug/stl_iterator.h>
+    3004              : #endif
+    3005              : 
+    3006              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_iterator_base_funcs.h.func-c.html b/html/usr/include/c++/13/bits/stl_iterator_base_funcs.h.func-c.html new file mode 100644 index 0000000..a7abec3 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_iterator_base_funcs.h.func-c.html @@ -0,0 +1,159 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_iterator_base_funcs.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_iterator_base_funcs.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:84.0 %2521
Test Date:2024-04-30 13:17:26Functions:50.0 %105
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt10__distanceINSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEEENSt15iterator_traitsIT_E15difference_typeESA_SA_St18input_iterator_tag10
_ZSt9__advanceISt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEElEvRT_T0_St26bidirectional_iterator_tag20
_ZSt9__advanceISt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEElEvRT_T0_St26bidirectional_iterator_tag0
_ZSt9__advanceISt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEElEvRT_T0_St26bidirectional_iterator_tag20
_ZSt9__advanceIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEElEvRT_T0_St26random_access_iterator_tag6352
_ZSt9__advanceIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEElEvRT_T0_St26random_access_iterator_tag0
_ZSt9__advanceIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEElEvRT_T0_St26random_access_iterator_tag0
_ZSt9__advanceIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEElEvRT_T0_St26random_access_iterator_tag0
_ZSt9__advanceIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEElEvRT_T0_St26random_access_iterator_tag0
_ZSt9__advanceIN9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEES6_ISG_SaISG_EEEElEvRT_T0_St26random_access_iterator_tag16
_ZSt9__advanceIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEElEvRT_T0_St26random_access_iterator_tag158
_ZSt9__advanceIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEElEvRT_T0_St26random_access_iterator_tag6178
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_iterator_base_funcs.h.func.html b/html/usr/include/c++/13/bits/stl_iterator_base_funcs.h.func.html new file mode 100644 index 0000000..324d018 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_iterator_base_funcs.h.func.html @@ -0,0 +1,159 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_iterator_base_funcs.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_iterator_base_funcs.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:84.0 %2521
Test Date:2024-04-30 13:17:26Functions:50.0 %105
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt10__distanceINSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEEENSt15iterator_traitsIT_E15difference_typeESA_SA_St18input_iterator_tag10
_ZSt9__advanceIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEElEvRT_T0_St26random_access_iterator_tag6352
_ZSt9__advanceIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEElEvRT_T0_St26random_access_iterator_tag0
_ZSt9__advanceIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEElEvRT_T0_St26random_access_iterator_tag0
_ZSt9__advanceIN9__gnu_cxx17__normal_iteratorIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEES6_ISG_SaISG_EEEElEvRT_T0_St26random_access_iterator_tag16
_ZSt9__advanceIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEElEvRT_T0_St26random_access_iterator_tag158
_ZSt9__advanceIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEElEvRT_T0_St26random_access_iterator_tag0
_ZSt9__advanceIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEElEvRT_T0_St26random_access_iterator_tag6178
_ZSt9__advanceIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEElEvRT_T0_St26random_access_iterator_tag0
_ZSt9__advanceISt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEElEvRT_T0_St26bidirectional_iterator_tag20
_ZSt9__advanceISt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEElEvRT_T0_St26bidirectional_iterator_tag0
_ZSt9__advanceISt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEElEvRT_T0_St26bidirectional_iterator_tag20
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_iterator_base_funcs.h.gcov.html b/html/usr/include/c++/13/bits/stl_iterator_base_funcs.h.gcov.html new file mode 100644 index 0000000..c06f0a9 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_iterator_base_funcs.h.gcov.html @@ -0,0 +1,335 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_iterator_base_funcs.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_iterator_base_funcs.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:84.0 %2521
Test Date:2024-04-30 13:17:26Functions:50.0 %105
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Functions used by iterators -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1996-1998
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/stl_iterator_base_funcs.h
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{iterator}
+      54              :  *
+      55              :  *  This file contains all of the general iterator-related utility
+      56              :  *  functions, such as distance() and advance().
+      57              :  */
+      58              : 
+      59              : #ifndef _STL_ITERATOR_BASE_FUNCS_H
+      60              : #define _STL_ITERATOR_BASE_FUNCS_H 1
+      61              : 
+      62              : #pragma GCC system_header
+      63              : 
+      64              : #include <bits/concept_check.h>
+      65              : #include <debug/assertions.h>
+      66              : #include <bits/stl_iterator_base_types.h>
+      67              : 
+      68              : namespace std _GLIBCXX_VISIBILITY(default)
+      69              : {
+      70              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      71              : 
+      72              : _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
+      73              :   // Forward declaration for the overloads of __distance.
+      74              :   template <typename> struct _List_iterator;
+      75              :   template <typename> struct _List_const_iterator;
+      76              : _GLIBCXX_END_NAMESPACE_CONTAINER
+      77              : 
+      78              :   template<typename _InputIterator>
+      79              :     inline _GLIBCXX14_CONSTEXPR
+      80              :     typename iterator_traits<_InputIterator>::difference_type
+      81           10 :     __distance(_InputIterator __first, _InputIterator __last,
+      82              :                input_iterator_tag)
+      83              :     {
+      84              :       // concept requirements
+      85              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+      86              : 
+      87           10 :       typename iterator_traits<_InputIterator>::difference_type __n = 0;
+      88           40 :       while (__first != __last)
+      89              :         {
+      90           30 :           ++__first;
+      91           30 :           ++__n;
+      92              :         }
+      93           10 :       return __n;
+      94              :     }
+      95              : 
+      96              :   template<typename _RandomAccessIterator>
+      97              :     __attribute__((__always_inline__))
+      98              :     inline _GLIBCXX14_CONSTEXPR
+      99              :     typename iterator_traits<_RandomAccessIterator>::difference_type
+     100              :     __distance(_RandomAccessIterator __first, _RandomAccessIterator __last,
+     101              :                random_access_iterator_tag)
+     102              :     {
+     103              :       // concept requirements
+     104              :       __glibcxx_function_requires(_RandomAccessIteratorConcept<
+     105              :                                   _RandomAccessIterator>)
+     106    109377634 :       return __last - __first;
+     107              :     }
+     108              : 
+     109              : #if _GLIBCXX_USE_CXX11_ABI
+     110              :   // Forward declaration because of the qualified call in distance.
+     111              :   template<typename _Tp>
+     112              :     ptrdiff_t
+     113              :     __distance(_GLIBCXX_STD_C::_List_iterator<_Tp>,
+     114              :                _GLIBCXX_STD_C::_List_iterator<_Tp>,
+     115              :                input_iterator_tag);
+     116              : 
+     117              :   template<typename _Tp>
+     118              :     ptrdiff_t
+     119              :     __distance(_GLIBCXX_STD_C::_List_const_iterator<_Tp>,
+     120              :                _GLIBCXX_STD_C::_List_const_iterator<_Tp>,
+     121              :                input_iterator_tag);
+     122              : #endif
+     123              : 
+     124              : #if __cplusplus >= 201103L
+     125              :   // Give better error if std::distance called with a non-Cpp17InputIterator.
+     126              :   template<typename _OutputIterator>
+     127              :     void
+     128              :     __distance(_OutputIterator, _OutputIterator, output_iterator_tag) = delete;
+     129              : #endif
+     130              : 
+     131              :   /**
+     132              :    *  @brief A generalization of pointer arithmetic.
+     133              :    *  @param  __first  An input iterator.
+     134              :    *  @param  __last  An input iterator.
+     135              :    *  @return  The distance between them.
+     136              :    *
+     137              :    *  Returns @c n such that __first + n == __last.  This requires
+     138              :    *  that @p __last must be reachable from @p __first.  Note that @c
+     139              :    *  n may be negative.
+     140              :    *
+     141              :    *  For random access iterators, this uses their @c + and @c - operations
+     142              :    *  and are constant time.  For other %iterator classes they are linear time.
+     143              :   */
+     144              :   template<typename _InputIterator>
+     145              :     _GLIBCXX_NODISCARD __attribute__((__always_inline__))
+     146              :     inline _GLIBCXX17_CONSTEXPR
+     147              :     typename iterator_traits<_InputIterator>::difference_type
+     148              :     distance(_InputIterator __first, _InputIterator __last)
+     149              :     {
+     150              :       // concept requirements -- taken care of in __distance
+     151    219548270 :       return std::__distance(__first, __last,
+     152    219558646 :                              std::__iterator_category(__first));
+     153              :     }
+     154              : 
+     155              :   template<typename _InputIterator, typename _Distance>
+     156              :     inline _GLIBCXX14_CONSTEXPR void
+     157              :     __advance(_InputIterator& __i, _Distance __n, input_iterator_tag)
+     158              :     {
+     159              :       // concept requirements
+     160              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+     161              :       __glibcxx_assert(__n >= 0);
+     162              :       while (__n--)
+     163              :         ++__i;
+     164              :     }
+     165              : 
+     166              :   template<typename _BidirectionalIterator, typename _Distance>
+     167              :     inline _GLIBCXX14_CONSTEXPR void
+     168           20 :     __advance(_BidirectionalIterator& __i, _Distance __n,
+     169              :               bidirectional_iterator_tag)
+     170              :     {
+     171              :       // concept requirements
+     172              :       __glibcxx_function_requires(_BidirectionalIteratorConcept<
+     173              :                                   _BidirectionalIterator>)
+     174           20 :       if (__n > 0)
+     175           40 :         while (__n--)
+     176           20 :           ++__i;
+     177              :       else
+     178            0 :         while (__n++)
+     179            0 :           --__i;
+     180           20 :     }
+     181              : 
+     182              :   template<typename _RandomAccessIterator, typename _Distance>
+     183              :     inline _GLIBCXX14_CONSTEXPR void
+     184         6352 :     __advance(_RandomAccessIterator& __i, _Distance __n,
+     185              :               random_access_iterator_tag)
+     186              :     {
+     187              :       // concept requirements
+     188              :       __glibcxx_function_requires(_RandomAccessIteratorConcept<
+     189              :                                   _RandomAccessIterator>)
+     190              :       if (__builtin_constant_p(__n) && __n == 1)
+     191              :         ++__i;
+     192              :       else if (__builtin_constant_p(__n) && __n == -1)
+     193              :         --__i;
+     194              :       else
+     195         6352 :         __i += __n;
+     196         6352 :     }
+     197              : 
+     198              : #if __cplusplus >= 201103L
+     199              :   // Give better error if std::advance called with a non-Cpp17InputIterator.
+     200              :   template<typename _OutputIterator, typename _Distance>
+     201              :     void
+     202              :     __advance(_OutputIterator&, _Distance, output_iterator_tag) = delete;
+     203              : #endif
+     204              : 
+     205              :   /**
+     206              :    *  @brief A generalization of pointer arithmetic.
+     207              :    *  @param  __i  An input iterator.
+     208              :    *  @param  __n  The @a delta by which to change @p __i.
+     209              :    *  @return  Nothing.
+     210              :    *
+     211              :    *  This increments @p i by @p n.  For bidirectional and random access
+     212              :    *  iterators, @p __n may be negative, in which case @p __i is decremented.
+     213              :    *
+     214              :    *  For random access iterators, this uses their @c + and @c - operations
+     215              :    *  and are constant time.  For other %iterator classes they are linear time.
+     216              :   */
+     217              :   template<typename _InputIterator, typename _Distance>
+     218              :     __attribute__((__always_inline__))
+     219              :     inline _GLIBCXX17_CONSTEXPR void
+     220              :     advance(_InputIterator& __i, _Distance __n)
+     221              :     {
+     222              :       // concept requirements -- taken care of in __advance
+     223         6372 :       typename iterator_traits<_InputIterator>::difference_type __d = __n;
+     224         6372 :       std::__advance(__i, __d, std::__iterator_category(__i));
+     225         6372 :     }
+     226              : 
+     227              : #if __cplusplus >= 201103L
+     228              : 
+     229              :   template<typename _InputIterator>
+     230              :     _GLIBCXX_NODISCARD [[__gnu__::__always_inline__]]
+     231              :     inline _GLIBCXX17_CONSTEXPR _InputIterator
+     232              :     next(_InputIterator __x, typename
+     233              :          iterator_traits<_InputIterator>::difference_type __n = 1)
+     234              :     {
+     235              :       // concept requirements
+     236              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+     237              :       std::advance(__x, __n);
+     238         5954 :       return __x;
+     239              :     }
+     240              : 
+     241              :   template<typename _BidirectionalIterator>
+     242              :     _GLIBCXX_NODISCARD [[__gnu__::__always_inline__]]
+     243              :     inline _GLIBCXX17_CONSTEXPR _BidirectionalIterator
+     244              :     prev(_BidirectionalIterator __x, typename
+     245              :          iterator_traits<_BidirectionalIterator>::difference_type __n = 1) 
+     246              :     {
+     247              :       // concept requirements
+     248              :       __glibcxx_function_requires(_BidirectionalIteratorConcept<
+     249              :                                   _BidirectionalIterator>)
+     250            0 :       std::advance(__x, -__n);
+     251            0 :       return __x;
+     252              :     }
+     253              : 
+     254              : #endif // C++11
+     255              : 
+     256              : _GLIBCXX_END_NAMESPACE_VERSION
+     257              : } // namespace
+     258              : 
+     259              : #endif /* _STL_ITERATOR_BASE_FUNCS_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_iterator_base_types.h.func-c.html b/html/usr/include/c++/13/bits/stl_iterator_base_types.h.func-c.html new file mode 100644 index 0000000..32a9bf2 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_iterator_base_types.h.func-c.html @@ -0,0 +1,75 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_iterator_base_types.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_iterator_base_types.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:-00
+
+ +
+ + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_iterator_base_types.h.func.html b/html/usr/include/c++/13/bits/stl_iterator_base_types.h.func.html new file mode 100644 index 0000000..214acb4 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_iterator_base_types.h.func.html @@ -0,0 +1,75 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_iterator_base_types.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_iterator_base_types.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:-00
+
+ +
+ + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_iterator_base_types.h.gcov.html b/html/usr/include/c++/13/bits/stl_iterator_base_types.h.gcov.html new file mode 100644 index 0000000..0ab01f4 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_iterator_base_types.h.gcov.html @@ -0,0 +1,348 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_iterator_base_types.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_iterator_base_types.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %11
Test Date:2024-04-30 13:17:26Functions:-00
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Types used in iterator implementation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1996-1998
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/stl_iterator_base_types.h
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{iterator}
+      54              :  *
+      55              :  *  This file contains all of the general iterator-related utility types,
+      56              :  *  such as iterator_traits and struct iterator.
+      57              :  */
+      58              : 
+      59              : #ifndef _STL_ITERATOR_BASE_TYPES_H
+      60              : #define _STL_ITERATOR_BASE_TYPES_H 1
+      61              : 
+      62              : #pragma GCC system_header
+      63              : 
+      64              : #include <bits/c++config.h>
+      65              : 
+      66              : #if __cplusplus >= 201103L
+      67              : # include <type_traits>  // For __void_t, is_convertible
+      68              : #endif
+      69              : 
+      70              : #if __cplusplus > 201703L && __cpp_concepts >= 201907L
+      71              : # include <bits/iterator_concepts.h>
+      72              : #endif
+      73              : 
+      74              : namespace std _GLIBCXX_VISIBILITY(default)
+      75              : {
+      76              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      77              : 
+      78              :   /**
+      79              :    *  @defgroup iterators Iterators
+      80              :    *  Abstractions for uniform iterating through various underlying types.
+      81              :   */
+      82              :   ///@{
+      83              : 
+      84              :   /**
+      85              :    *  @defgroup iterator_tags Iterator Tags
+      86              :    *  These are empty types, used to distinguish different iterators.  The
+      87              :    *  distinction is not made by what they contain, but simply by what they
+      88              :    *  are.  Different underlying algorithms can then be used based on the
+      89              :    *  different operations supported by different iterator types.
+      90              :   */
+      91              :   ///@{
+      92              :   ///  Marking input iterators.
+      93              :   struct input_iterator_tag { };
+      94              : 
+      95              :   ///  Marking output iterators.
+      96              :   struct output_iterator_tag { };
+      97              : 
+      98              :   /// Forward iterators support a superset of input iterator operations.
+      99              :   struct forward_iterator_tag : public input_iterator_tag { };
+     100              : 
+     101              :   /// Bidirectional iterators support a superset of forward iterator
+     102              :   /// operations.
+     103              :   struct bidirectional_iterator_tag : public forward_iterator_tag { };
+     104              : 
+     105              :   /// Random-access iterators support a superset of bidirectional
+     106              :   /// iterator operations.
+     107              :   struct random_access_iterator_tag : public bidirectional_iterator_tag { };
+     108              : 
+     109              : #if __cplusplus > 201703L
+     110              :   /// Contiguous iterators point to objects stored contiguously in memory.
+     111              :   struct contiguous_iterator_tag : public random_access_iterator_tag { };
+     112              : #endif
+     113              :   ///@}
+     114              : 
+     115              :   /**
+     116              :    *  @brief  Common %iterator class.
+     117              :    *
+     118              :    *  This class does nothing but define nested typedefs.  %Iterator classes
+     119              :    *  can inherit from this class to save some work.  The typedefs are then
+     120              :    *  used in specializations and overloading.
+     121              :    *
+     122              :    *  In particular, there are no default implementations of requirements
+     123              :    *  such as @c operator++ and the like.  (How could there be?)
+     124              :   */
+     125              :   template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t,
+     126              :            typename _Pointer = _Tp*, typename _Reference = _Tp&>
+     127              :     struct _GLIBCXX17_DEPRECATED iterator
+     128              :     {
+     129              :       /// One of the @link iterator_tags tag types@endlink.
+     130              :       typedef _Category  iterator_category;
+     131              :       /// The type "pointed to" by the iterator.
+     132              :       typedef _Tp        value_type;
+     133              :       /// Distance between iterators is represented as this type.
+     134              :       typedef _Distance  difference_type;
+     135              :       /// This type represents a pointer-to-value_type.
+     136              :       typedef _Pointer   pointer;
+     137              :       /// This type represents a reference-to-value_type.
+     138              :       typedef _Reference reference;
+     139              :     };
+     140              : 
+     141              :   /**
+     142              :    *  @brief  Traits class for iterators.
+     143              :    *
+     144              :    *  This class does nothing but define nested typedefs.  The general
+     145              :    *  version simply @a forwards the nested typedefs from the Iterator
+     146              :    *  argument.  Specialized versions for pointers and pointers-to-const
+     147              :    *  provide tighter, more correct semantics.
+     148              :   */
+     149              :   template<typename _Iterator>
+     150              :     struct iterator_traits;
+     151              : 
+     152              : #if __cplusplus >= 201103L
+     153              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     154              :   // 2408. SFINAE-friendly common_type/iterator_traits is missing in C++14
+     155              :   template<typename _Iterator, typename = __void_t<>>
+     156              :     struct __iterator_traits { };
+     157              : 
+     158              : #if ! __cpp_lib_concepts
+     159              : 
+     160              :   template<typename _Iterator>
+     161              :     struct __iterator_traits<_Iterator,
+     162              :                              __void_t<typename _Iterator::iterator_category,
+     163              :                                       typename _Iterator::value_type,
+     164              :                                       typename _Iterator::difference_type,
+     165              :                                       typename _Iterator::pointer,
+     166              :                                       typename _Iterator::reference>>
+     167              :     {
+     168              :       typedef typename _Iterator::iterator_category iterator_category;
+     169              :       typedef typename _Iterator::value_type        value_type;
+     170              :       typedef typename _Iterator::difference_type   difference_type;
+     171              :       typedef typename _Iterator::pointer           pointer;
+     172              :       typedef typename _Iterator::reference         reference;
+     173              :     };
+     174              : #endif // ! concepts
+     175              : 
+     176              :   template<typename _Iterator>
+     177              :     struct iterator_traits
+     178              :     : public __iterator_traits<_Iterator> { };
+     179              : 
+     180              : #else // ! C++11
+     181              :   template<typename _Iterator>
+     182              :     struct iterator_traits
+     183              :     {
+     184              :       typedef typename _Iterator::iterator_category iterator_category;
+     185              :       typedef typename _Iterator::value_type        value_type;
+     186              :       typedef typename _Iterator::difference_type   difference_type;
+     187              :       typedef typename _Iterator::pointer           pointer;
+     188              :       typedef typename _Iterator::reference         reference;
+     189              :     };
+     190              : #endif // C++11
+     191              : 
+     192              : #if __cplusplus > 201703L
+     193              :   /// Partial specialization for object pointer types.
+     194              :   template<typename _Tp>
+     195              : #if __cpp_concepts >= 201907L
+     196              :     requires is_object_v<_Tp>
+     197              : #endif
+     198              :     struct iterator_traits<_Tp*>
+     199              :     {
+     200              :       using iterator_concept  = contiguous_iterator_tag;
+     201              :       using iterator_category = random_access_iterator_tag;
+     202              :       using value_type        = remove_cv_t<_Tp>;
+     203              :       using difference_type   = ptrdiff_t;
+     204              :       using pointer           = _Tp*;
+     205              :       using reference         = _Tp&;
+     206              :     };
+     207              : #else
+     208              :   /// Partial specialization for pointer types.
+     209              :   template<typename _Tp>
+     210              :     struct iterator_traits<_Tp*>
+     211              :     {
+     212              :       typedef random_access_iterator_tag iterator_category;
+     213              :       typedef _Tp                         value_type;
+     214              :       typedef ptrdiff_t                   difference_type;
+     215              :       typedef _Tp*                        pointer;
+     216              :       typedef _Tp&                        reference;
+     217              :     };
+     218              : 
+     219              :   /// Partial specialization for const pointer types.
+     220              :   template<typename _Tp>
+     221              :     struct iterator_traits<const _Tp*>
+     222              :     {
+     223              :       typedef random_access_iterator_tag iterator_category;
+     224              :       typedef _Tp                         value_type;
+     225              :       typedef ptrdiff_t                   difference_type;
+     226              :       typedef const _Tp*                  pointer;
+     227              :       typedef const _Tp&                  reference;
+     228              :     };
+     229              : #endif
+     230              : 
+     231              :   /**
+     232              :    *  This function is not a part of the C++ standard but is syntactic
+     233              :    *  sugar for internal library use only.
+     234              :   */
+     235              :   template<typename _Iter>
+     236              :     __attribute__((__always_inline__))
+     237              :     inline _GLIBCXX_CONSTEXPR
+     238              :     typename iterator_traits<_Iter>::iterator_category
+     239              :     __iterator_category(const _Iter&)
+     240    121874398 :     { return typename iterator_traits<_Iter>::iterator_category(); }
+     241              : 
+     242              :   ///@}
+     243              : 
+     244              : #if __cplusplus >= 201103L
+     245              :   template<typename _Iter>
+     246              :     using __iter_category_t
+     247              :       = typename iterator_traits<_Iter>::iterator_category;
+     248              : 
+     249              :   template<typename _InIter>
+     250              :     using _RequireInputIter =
+     251              :       __enable_if_t<is_convertible<__iter_category_t<_InIter>,
+     252              :                                    input_iterator_tag>::value>;
+     253              : 
+     254              :   template<typename _It,
+     255              :            typename _Cat = __iter_category_t<_It>>
+     256              :     struct __is_random_access_iter
+     257              :       : is_base_of<random_access_iterator_tag, _Cat>
+     258              :     {
+     259              :       typedef is_base_of<random_access_iterator_tag, _Cat> _Base;
+     260              :       enum { __value = _Base::value };
+     261              :     };
+     262              : #else
+     263              :   template<typename _It, typename _Traits = iterator_traits<_It>,
+     264              :            typename _Cat = typename _Traits::iterator_category>
+     265              :     struct __is_random_access_iter
+     266              :     { enum { __value = __is_base_of(random_access_iterator_tag, _Cat) }; };
+     267              : #endif
+     268              : 
+     269              : _GLIBCXX_END_NAMESPACE_VERSION
+     270              : } // namespace
+     271              : 
+     272              : #endif /* _STL_ITERATOR_BASE_TYPES_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_list.h.func-c.html b/html/usr/include/c++/13/bits/stl_list.h.func-c.html new file mode 100644 index 0000000..eef3445 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_list.h.func-c.html @@ -0,0 +1,278 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_list.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_list.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %6969
Test Date:2024-04-30 13:17:26Functions:100.0 %2929
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt7__cxx1110_List_baseIiSaIiEE10_List_implC2Ev58
_ZNSt7__cxx1110_List_baseIiSaIiEEC2Ev58
_ZNSt7__cxx1110_List_baseIiSaIiEED2Ev58
_ZNSt7__cxx114listIiSaIiEEC2Ev58
_ZNSt7__cxx114listIiSaIiEED2Ev58
_ZNSt8__detail17_List_node_header7_M_initEv58
_ZNSt8__detail17_List_node_headerC2Ev58
_ZNSt14_List_iteratorIiEppEv200
_ZSteqRKSt14_List_iteratorIiES2_318
_ZNSt7__cxx1110_List_baseIiSaIiEE11_M_dec_sizeEm376
_ZNSt7__cxx1110_List_baseIiSaIiEE11_M_get_nodeEv376
_ZNSt7__cxx1110_List_baseIiSaIiEE11_M_inc_sizeEm376
_ZNSt7__cxx1110_List_baseIiSaIiEE11_M_put_nodeEPSt10_List_nodeIiE376
_ZNSt7__cxx114listIiSaIiEE10push_frontERKi376
_ZNSt7__cxx114listIiSaIiEE14_M_create_nodeIJRKiEEEPSt10_List_nodeIiEDpOT_376
_ZNSt7__cxx114listIiSaIiEE5frontEv376
_ZNSt7__cxx114listIiSaIiEE8_M_eraseESt14_List_iteratorIiE376
_ZNSt7__cxx114listIiSaIiEE9_M_insertIJRKiEEEvSt14_List_iteratorIiEDpOT_376
_ZNSt7__cxx114listIiSaIiEE9pop_frontEv376
_ZNKSt7__cxx1110_List_baseIiSaIiEE11_M_get_sizeEv434
_ZNKSt7__cxx114listIiSaIiEE13_M_node_countEv434
_ZNKSt7__cxx114listIiSaIiEE4sizeEv434
_ZStneRKSt14_List_iteratorIiES2_518
_ZNKSt14_List_iteratorIiEdeEv576
_ZNSt7__cxx114listIiSaIiEE3endEv636
_ZNSt7__cxx1110_List_baseIiSaIiEE21_M_get_Node_allocatorEv752
_ZNSt10_List_nodeIiE9_M_valptrEv1328
_ZNSt7__cxx114listIiSaIiEE5beginEv1446
_ZNSt14_List_iteratorIiEC2EPNSt8__detail15_List_node_baseE2082
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_list.h.func.html b/html/usr/include/c++/13/bits/stl_list.h.func.html new file mode 100644 index 0000000..fe0d93c --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_list.h.func.html @@ -0,0 +1,278 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_list.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_list.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %6969
Test Date:2024-04-30 13:17:26Functions:100.0 %2929
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt14_List_iteratorIiEdeEv576
_ZNKSt7__cxx1110_List_baseIiSaIiEE11_M_get_sizeEv434
_ZNKSt7__cxx114listIiSaIiEE13_M_node_countEv434
_ZNKSt7__cxx114listIiSaIiEE4sizeEv434
_ZNSt10_List_nodeIiE9_M_valptrEv1328
_ZNSt14_List_iteratorIiEC2EPNSt8__detail15_List_node_baseE2082
_ZNSt14_List_iteratorIiEppEv200
_ZNSt7__cxx1110_List_baseIiSaIiEE10_List_implC2Ev58
_ZNSt7__cxx1110_List_baseIiSaIiEE11_M_dec_sizeEm376
_ZNSt7__cxx1110_List_baseIiSaIiEE11_M_get_nodeEv376
_ZNSt7__cxx1110_List_baseIiSaIiEE11_M_inc_sizeEm376
_ZNSt7__cxx1110_List_baseIiSaIiEE11_M_put_nodeEPSt10_List_nodeIiE376
_ZNSt7__cxx1110_List_baseIiSaIiEE21_M_get_Node_allocatorEv752
_ZNSt7__cxx1110_List_baseIiSaIiEEC2Ev58
_ZNSt7__cxx1110_List_baseIiSaIiEED2Ev58
_ZNSt7__cxx114listIiSaIiEE10push_frontERKi376
_ZNSt7__cxx114listIiSaIiEE14_M_create_nodeIJRKiEEEPSt10_List_nodeIiEDpOT_376
_ZNSt7__cxx114listIiSaIiEE3endEv636
_ZNSt7__cxx114listIiSaIiEE5beginEv1446
_ZNSt7__cxx114listIiSaIiEE5frontEv376
_ZNSt7__cxx114listIiSaIiEE8_M_eraseESt14_List_iteratorIiE376
_ZNSt7__cxx114listIiSaIiEE9_M_insertIJRKiEEEvSt14_List_iteratorIiEDpOT_376
_ZNSt7__cxx114listIiSaIiEE9pop_frontEv376
_ZNSt7__cxx114listIiSaIiEEC2Ev58
_ZNSt7__cxx114listIiSaIiEED2Ev58
_ZNSt8__detail17_List_node_header7_M_initEv58
_ZNSt8__detail17_List_node_headerC2Ev58
_ZSteqRKSt14_List_iteratorIiES2_318
_ZStneRKSt14_List_iteratorIiES2_518
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_list.h.gcov.html b/html/usr/include/c++/13/bits/stl_list.h.gcov.html new file mode 100644 index 0000000..33ab2a2 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_list.h.gcov.html @@ -0,0 +1,2337 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_list.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_list.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %6969
Test Date:2024-04-30 13:17:26Functions:100.0 %2929
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // List implementation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : // Copyright The GNU Toolchain Authors.
+       5              : //
+       6              : // This file is part of the GNU ISO C++ Library.  This library is free
+       7              : // software; you can redistribute it and/or modify it under the
+       8              : // terms of the GNU General Public License as published by the
+       9              : // Free Software Foundation; either version 3, or (at your option)
+      10              : // any later version.
+      11              : 
+      12              : // This library is distributed in the hope that it will be useful,
+      13              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      14              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      15              : // GNU General Public License for more details.
+      16              : 
+      17              : // Under Section 7 of GPL version 3, you are granted additional
+      18              : // permissions described in the GCC Runtime Library Exception, version
+      19              : // 3.1, as published by the Free Software Foundation.
+      20              : 
+      21              : // You should have received a copy of the GNU General Public License and
+      22              : // a copy of the GCC Runtime Library Exception along with this program;
+      23              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      24              : // <http://www.gnu.org/licenses/>.
+      25              : 
+      26              : /*
+      27              :  *
+      28              :  * Copyright (c) 1994
+      29              :  * Hewlett-Packard Company
+      30              :  *
+      31              :  * Permission to use, copy, modify, distribute and sell this software
+      32              :  * and its documentation for any purpose is hereby granted without fee,
+      33              :  * provided that the above copyright notice appear in all copies and
+      34              :  * that both that copyright notice and this permission notice appear
+      35              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      36              :  * representations about the suitability of this software for any
+      37              :  * purpose.  It is provided "as is" without express or implied warranty.
+      38              :  *
+      39              :  *
+      40              :  * Copyright (c) 1996,1997
+      41              :  * Silicon Graphics Computer Systems, Inc.
+      42              :  *
+      43              :  * Permission to use, copy, modify, distribute and sell this software
+      44              :  * and its documentation for any purpose is hereby granted without fee,
+      45              :  * provided that the above copyright notice appear in all copies and
+      46              :  * that both that copyright notice and this permission notice appear
+      47              :  * in supporting documentation.  Silicon Graphics makes no
+      48              :  * representations about the suitability of this software for any
+      49              :  * purpose.  It is provided "as is" without express or implied warranty.
+      50              :  */
+      51              : 
+      52              : /** @file bits/stl_list.h
+      53              :  *  This is an internal header file, included by other library headers.
+      54              :  *  Do not attempt to use it directly. @headername{list}
+      55              :  */
+      56              : 
+      57              : #ifndef _STL_LIST_H
+      58              : #define _STL_LIST_H 1
+      59              : 
+      60              : #include <bits/concept_check.h>
+      61              : #include <ext/alloc_traits.h>
+      62              : #if __cplusplus >= 201103L
+      63              : #include <initializer_list>
+      64              : #include <bits/allocated_ptr.h>
+      65              : #include <ext/aligned_buffer.h>
+      66              : #endif
+      67              : 
+      68              : namespace std _GLIBCXX_VISIBILITY(default)
+      69              : {
+      70              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      71              : 
+      72              :   namespace __detail
+      73              :   {
+      74              :     // Supporting structures are split into common and templated
+      75              :     // types; the latter publicly inherits from the former in an
+      76              :     // effort to reduce code duplication.  This results in some
+      77              :     // "needless" static_cast'ing later on, but it's all safe
+      78              :     // downcasting.
+      79              : 
+      80              :     /// Common part of a node in the %list.
+      81              :     struct _List_node_base
+      82              :     {
+      83              :       _List_node_base* _M_next;
+      84              :       _List_node_base* _M_prev;
+      85              : 
+      86              :       static void
+      87              :       swap(_List_node_base& __x, _List_node_base& __y) _GLIBCXX_USE_NOEXCEPT;
+      88              : 
+      89              :       void
+      90              :       _M_transfer(_List_node_base* const __first,
+      91              :                   _List_node_base* const __last) _GLIBCXX_USE_NOEXCEPT;
+      92              : 
+      93              :       void
+      94              :       _M_reverse() _GLIBCXX_USE_NOEXCEPT;
+      95              : 
+      96              :       void
+      97              :       _M_hook(_List_node_base* const __position) _GLIBCXX_USE_NOEXCEPT;
+      98              : 
+      99              :       void
+     100              :       _M_unhook() _GLIBCXX_USE_NOEXCEPT;
+     101              :     };
+     102              : 
+     103              :     /// The %list node header.
+     104              :     struct _List_node_header : public _List_node_base
+     105              :     {
+     106              : #if _GLIBCXX_USE_CXX11_ABI
+     107              :       std::size_t _M_size;
+     108              : #endif
+     109              : 
+     110           58 :       _List_node_header() _GLIBCXX_NOEXCEPT
+     111           58 :       { _M_init(); }
+     112              : 
+     113              : #if __cplusplus >= 201103L
+     114              :       _List_node_header(_List_node_header&& __x) noexcept
+     115              :       : _List_node_base{ __x._M_next, __x._M_prev }
+     116              : # if _GLIBCXX_USE_CXX11_ABI
+     117              :       , _M_size(__x._M_size)
+     118              : # endif
+     119              :       {
+     120              :         if (__x._M_base()->_M_next == __x._M_base())
+     121              :           this->_M_next = this->_M_prev = this;
+     122              :         else
+     123              :           {
+     124              :             this->_M_next->_M_prev = this->_M_prev->_M_next = this->_M_base();
+     125              :             __x._M_init();
+     126              :           }
+     127              :       }
+     128              : 
+     129              :       void
+     130              :       _M_move_nodes(_List_node_header&& __x)
+     131              :       {
+     132              :         _List_node_base* const __xnode = __x._M_base();
+     133              :         if (__xnode->_M_next == __xnode)
+     134              :           _M_init();
+     135              :         else
+     136              :           {
+     137              :             _List_node_base* const __node = this->_M_base();
+     138              :             __node->_M_next = __xnode->_M_next;
+     139              :             __node->_M_prev = __xnode->_M_prev;
+     140              :             __node->_M_next->_M_prev = __node->_M_prev->_M_next = __node;
+     141              : # if _GLIBCXX_USE_CXX11_ABI
+     142              :             _M_size = __x._M_size;
+     143              : # endif
+     144              :             __x._M_init();
+     145              :           }
+     146              :       }
+     147              : #endif
+     148              : 
+     149              :       void
+     150           58 :       _M_init() _GLIBCXX_NOEXCEPT
+     151              :       {
+     152           58 :         this->_M_next = this->_M_prev = this;
+     153              : #if _GLIBCXX_USE_CXX11_ABI
+     154           58 :         this->_M_size = 0;
+     155              : #endif
+     156           58 :       }
+     157              : 
+     158              :     private:
+     159              :       _List_node_base* _M_base() { return this; }
+     160              :     };
+     161              : 
+     162              :     // Used by list::sort to hold nodes being sorted.
+     163              :     struct _Scratch_list : _List_node_base
+     164              :     {
+     165              :       _Scratch_list() { _M_next = _M_prev = this; }
+     166              : 
+     167              :       bool empty() const { return _M_next == this; }
+     168              : 
+     169              :       void swap(_List_node_base& __l) { _List_node_base::swap(*this, __l); }
+     170              : 
+     171              :       template<typename _Iter, typename _Cmp>
+     172              :         struct _Ptr_cmp
+     173              :         {
+     174              :           _Cmp _M_cmp;
+     175              : 
+     176              :           bool
+     177              :           operator()(__detail::_List_node_base* __lhs,
+     178              :                      __detail::_List_node_base* __rhs) /* not const */
+     179              :           { return _M_cmp(*_Iter(__lhs), *_Iter(__rhs)); }
+     180              :         };
+     181              : 
+     182              :       template<typename _Iter>
+     183              :         struct _Ptr_cmp<_Iter, void>
+     184              :         {
+     185              :           bool
+     186              :           operator()(__detail::_List_node_base* __lhs,
+     187              :                      __detail::_List_node_base* __rhs) const
+     188              :           { return *_Iter(__lhs) < *_Iter(__rhs); }
+     189              :         };
+     190              : 
+     191              :       // Merge nodes from __x into *this. Both lists must be sorted wrt _Cmp.
+     192              :       template<typename _Cmp>
+     193              :         void
+     194              :         merge(_List_node_base& __x, _Cmp __comp)
+     195              :         {
+     196              :           _List_node_base* __first1 = _M_next;
+     197              :           _List_node_base* const __last1 = this;
+     198              :           _List_node_base* __first2 = __x._M_next;
+     199              :           _List_node_base* const __last2 = std::__addressof(__x);
+     200              : 
+     201              :           while (__first1 != __last1 && __first2 != __last2)
+     202              :             {
+     203              :               if (__comp(__first2, __first1))
+     204              :                 {
+     205              :                   _List_node_base* __next = __first2->_M_next;
+     206              :                   __first1->_M_transfer(__first2, __next);
+     207              :                   __first2 = __next;
+     208              :                 }
+     209              :               else
+     210              :                 __first1 = __first1->_M_next;
+     211              :             }
+     212              :           if (__first2 != __last2)
+     213              :             this->_M_transfer(__first2, __last2);
+     214              :         }
+     215              : 
+     216              :       // Splice the node at __i into *this.
+     217              :       void _M_take_one(_List_node_base* __i)
+     218              :       { this->_M_transfer(__i, __i->_M_next); }
+     219              : 
+     220              :       // Splice all nodes from *this after __i.
+     221              :       void _M_put_all(_List_node_base* __i)
+     222              :       {
+     223              :         if (!empty())
+     224              :           __i->_M_transfer(_M_next, this);
+     225              :       }
+     226              :     };
+     227              : 
+     228              :   } // namespace detail
+     229              : 
+     230              : _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
+     231              : 
+     232              :   /// An actual node in the %list.
+     233              :   template<typename _Tp>
+     234              :     struct _List_node : public __detail::_List_node_base
+     235              :     {
+     236              : #if __cplusplus >= 201103L
+     237              :       __gnu_cxx::__aligned_membuf<_Tp> _M_storage;
+     238         1328 :       _Tp*       _M_valptr()       { return _M_storage._M_ptr(); }
+     239              :       _Tp const* _M_valptr() const { return _M_storage._M_ptr(); }
+     240              : #else
+     241              :       _Tp _M_data;
+     242              :       _Tp*       _M_valptr()       { return std::__addressof(_M_data); }
+     243              :       _Tp const* _M_valptr() const { return std::__addressof(_M_data); }
+     244              : #endif
+     245              :     };
+     246              : 
+     247              :   /**
+     248              :    *  @brief A list::iterator.
+     249              :    *
+     250              :    *  All the functions are op overloads.
+     251              :   */
+     252              :   template<typename _Tp>
+     253              :     struct _List_iterator
+     254              :     {
+     255              :       typedef _List_iterator<_Tp>         _Self;
+     256              :       typedef _List_node<_Tp>                     _Node;
+     257              : 
+     258              :       typedef ptrdiff_t                         difference_type;
+     259              :       typedef std::bidirectional_iterator_tag   iterator_category;
+     260              :       typedef _Tp                               value_type;
+     261              :       typedef _Tp*                              pointer;
+     262              :       typedef _Tp&                          reference;
+     263              : 
+     264              :       _List_iterator() _GLIBCXX_NOEXCEPT
+     265              :       : _M_node() { }
+     266              : 
+     267              :       explicit
+     268         2082 :       _List_iterator(__detail::_List_node_base* __x) _GLIBCXX_NOEXCEPT
+     269         2082 :       : _M_node(__x) { }
+     270              : 
+     271              :       _Self
+     272              :       _M_const_cast() const _GLIBCXX_NOEXCEPT
+     273              :       { return *this; }
+     274              : 
+     275              :       // Must downcast from _List_node_base to _List_node to get to value.
+     276              :       _GLIBCXX_NODISCARD
+     277              :       reference
+     278          576 :       operator*() const _GLIBCXX_NOEXCEPT
+     279          576 :       { return *static_cast<_Node*>(_M_node)->_M_valptr(); }
+     280              : 
+     281              :       _GLIBCXX_NODISCARD
+     282              :       pointer
+     283              :       operator->() const _GLIBCXX_NOEXCEPT
+     284              :       { return static_cast<_Node*>(_M_node)->_M_valptr(); }
+     285              : 
+     286              :       _Self&
+     287          200 :       operator++() _GLIBCXX_NOEXCEPT
+     288              :       {
+     289          200 :         _M_node = _M_node->_M_next;
+     290          200 :         return *this;
+     291              :       }
+     292              : 
+     293              :       _Self
+     294              :       operator++(int) _GLIBCXX_NOEXCEPT
+     295              :       {
+     296              :         _Self __tmp = *this;
+     297              :         _M_node = _M_node->_M_next;
+     298              :         return __tmp;
+     299              :       }
+     300              : 
+     301              :       _Self&
+     302              :       operator--() _GLIBCXX_NOEXCEPT
+     303              :       {
+     304              :         _M_node = _M_node->_M_prev;
+     305              :         return *this;
+     306              :       }
+     307              : 
+     308              :       _Self
+     309              :       operator--(int) _GLIBCXX_NOEXCEPT
+     310              :       {
+     311              :         _Self __tmp = *this;
+     312              :         _M_node = _M_node->_M_prev;
+     313              :         return __tmp;
+     314              :       }
+     315              : 
+     316              :       _GLIBCXX_NODISCARD
+     317              :       friend bool
+     318          318 :       operator==(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+     319          318 :       { return __x._M_node == __y._M_node; }
+     320              : 
+     321              : #if __cpp_impl_three_way_comparison < 201907L
+     322              :       _GLIBCXX_NODISCARD
+     323              :       friend bool
+     324          518 :       operator!=(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+     325          518 :       { return __x._M_node != __y._M_node; }
+     326              : #endif
+     327              : 
+     328              :       // The only member points to the %list element.
+     329              :       __detail::_List_node_base* _M_node;
+     330              :     };
+     331              : 
+     332              :   /**
+     333              :    *  @brief A list::const_iterator.
+     334              :    *
+     335              :    *  All the functions are op overloads.
+     336              :   */
+     337              :   template<typename _Tp>
+     338              :     struct _List_const_iterator
+     339              :     {
+     340              :       typedef _List_const_iterator<_Tp>           _Self;
+     341              :       typedef const _List_node<_Tp>               _Node;
+     342              :       typedef _List_iterator<_Tp>         iterator;
+     343              : 
+     344              :       typedef ptrdiff_t                         difference_type;
+     345              :       typedef std::bidirectional_iterator_tag   iterator_category;
+     346              :       typedef _Tp                               value_type;
+     347              :       typedef const _Tp*                        pointer;
+     348              :       typedef const _Tp&                    reference;
+     349              : 
+     350              :       _List_const_iterator() _GLIBCXX_NOEXCEPT
+     351              :       : _M_node() { }
+     352              : 
+     353              :       explicit
+     354              :       _List_const_iterator(const __detail::_List_node_base* __x)
+     355              :       _GLIBCXX_NOEXCEPT
+     356              :       : _M_node(__x) { }
+     357              : 
+     358              :       _List_const_iterator(const iterator& __x) _GLIBCXX_NOEXCEPT
+     359              :       : _M_node(__x._M_node) { }
+     360              : 
+     361              :       iterator
+     362              :       _M_const_cast() const _GLIBCXX_NOEXCEPT
+     363              :       { return iterator(const_cast<__detail::_List_node_base*>(_M_node)); }
+     364              : 
+     365              :       // Must downcast from List_node_base to _List_node to get to value.
+     366              :       _GLIBCXX_NODISCARD
+     367              :       reference
+     368              :       operator*() const _GLIBCXX_NOEXCEPT
+     369              :       { return *static_cast<_Node*>(_M_node)->_M_valptr(); }
+     370              : 
+     371              :       _GLIBCXX_NODISCARD
+     372              :       pointer
+     373              :       operator->() const _GLIBCXX_NOEXCEPT
+     374              :       { return static_cast<_Node*>(_M_node)->_M_valptr(); }
+     375              : 
+     376              :       _Self&
+     377              :       operator++() _GLIBCXX_NOEXCEPT
+     378              :       {
+     379              :         _M_node = _M_node->_M_next;
+     380              :         return *this;
+     381              :       }
+     382              : 
+     383              :       _Self
+     384              :       operator++(int) _GLIBCXX_NOEXCEPT
+     385              :       {
+     386              :         _Self __tmp = *this;
+     387              :         _M_node = _M_node->_M_next;
+     388              :         return __tmp;
+     389              :       }
+     390              : 
+     391              :       _Self&
+     392              :       operator--() _GLIBCXX_NOEXCEPT
+     393              :       {
+     394              :         _M_node = _M_node->_M_prev;
+     395              :         return *this;
+     396              :       }
+     397              : 
+     398              :       _Self
+     399              :       operator--(int) _GLIBCXX_NOEXCEPT
+     400              :       {
+     401              :         _Self __tmp = *this;
+     402              :         _M_node = _M_node->_M_prev;
+     403              :         return __tmp;
+     404              :       }
+     405              : 
+     406              :       _GLIBCXX_NODISCARD
+     407              :       friend bool
+     408              :       operator==(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+     409              :       { return __x._M_node == __y._M_node; }
+     410              : 
+     411              : #if __cpp_impl_three_way_comparison < 201907L
+     412              :       _GLIBCXX_NODISCARD
+     413              :       friend bool
+     414              :       operator!=(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+     415              :       { return __x._M_node != __y._M_node; }
+     416              : #endif
+     417              : 
+     418              :       // The only member points to the %list element.
+     419              :       const __detail::_List_node_base* _M_node;
+     420              :     };
+     421              : 
+     422              : _GLIBCXX_BEGIN_NAMESPACE_CXX11
+     423              :   /// See bits/stl_deque.h's _Deque_base for an explanation.
+     424              :   template<typename _Tp, typename _Alloc>
+     425              :     class _List_base
+     426              :     {
+     427              :     protected:
+     428              :       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+     429              :         rebind<_Tp>::other                                _Tp_alloc_type;
+     430              :       typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type>   _Tp_alloc_traits;
+     431              :       typedef typename _Tp_alloc_traits::template
+     432              :         rebind<_List_node<_Tp> >::other _Node_alloc_type;
+     433              :       typedef __gnu_cxx::__alloc_traits<_Node_alloc_type> _Node_alloc_traits;
+     434              : 
+     435              : #if !_GLIBCXX_INLINE_VERSION
+     436              :       static size_t
+     437              :       _S_distance(const __detail::_List_node_base* __first,
+     438              :                   const __detail::_List_node_base* __last)
+     439              :       {
+     440              :         size_t __n = 0;
+     441              :         while (__first != __last)
+     442              :           {
+     443              :             __first = __first->_M_next;
+     444              :             ++__n;
+     445              :           }
+     446              :         return __n;
+     447              :       }
+     448              : #endif
+     449              : 
+     450              :       struct _List_impl
+     451              :       : public _Node_alloc_type
+     452              :       {
+     453              :         __detail::_List_node_header _M_node;
+     454              : 
+     455           58 :         _List_impl() _GLIBCXX_NOEXCEPT_IF(
+     456              :             is_nothrow_default_constructible<_Node_alloc_type>::value)
+     457           58 :         : _Node_alloc_type()
+     458           58 :         { }
+     459              : 
+     460              :         _List_impl(const _Node_alloc_type& __a) _GLIBCXX_NOEXCEPT
+     461              :         : _Node_alloc_type(__a)
+     462              :         { }
+     463              : 
+     464              : #if __cplusplus >= 201103L
+     465              :         _List_impl(_List_impl&&) = default;
+     466              : 
+     467              :         _List_impl(_Node_alloc_type&& __a, _List_impl&& __x)
+     468              :         : _Node_alloc_type(std::move(__a)), _M_node(std::move(__x._M_node))
+     469              :         { }
+     470              : 
+     471              :         _List_impl(_Node_alloc_type&& __a) noexcept
+     472              :         : _Node_alloc_type(std::move(__a))
+     473              :         { }
+     474              : #endif
+     475              :       };
+     476              : 
+     477              :       _List_impl _M_impl;
+     478              : 
+     479              : #if _GLIBCXX_USE_CXX11_ABI
+     480          434 :       size_t _M_get_size() const { return _M_impl._M_node._M_size; }
+     481              : 
+     482              :       void _M_set_size(size_t __n) { _M_impl._M_node._M_size = __n; }
+     483              : 
+     484          376 :       void _M_inc_size(size_t __n) { _M_impl._M_node._M_size += __n; }
+     485              : 
+     486          376 :       void _M_dec_size(size_t __n) { _M_impl._M_node._M_size -= __n; }
+     487              : 
+     488              : # if !_GLIBCXX_INLINE_VERSION
+     489              :       size_t
+     490              :       _M_distance(const __detail::_List_node_base* __first,
+     491              :                   const __detail::_List_node_base* __last) const
+     492              :       { return _S_distance(__first, __last); }
+     493              : 
+     494              :       // return the stored size
+     495              :       size_t _M_node_count() const { return _M_get_size(); }
+     496              : # endif
+     497              : #else
+     498              :       // dummy implementations used when the size is not stored
+     499              :       size_t _M_get_size() const { return 0; }
+     500              :       void _M_set_size(size_t) { }
+     501              :       void _M_inc_size(size_t) { }
+     502              :       void _M_dec_size(size_t) { }
+     503              : 
+     504              : # if !_GLIBCXX_INLINE_VERSION
+     505              :       size_t _M_distance(const void*, const void*) const { return 0; }
+     506              : 
+     507              :       // count the number of nodes
+     508              :       size_t _M_node_count() const
+     509              :       {
+     510              :         return _S_distance(_M_impl._M_node._M_next,
+     511              :                            std::__addressof(_M_impl._M_node));
+     512              :       }
+     513              : # endif
+     514              : #endif
+     515              : 
+     516              :       typename _Node_alloc_traits::pointer
+     517          376 :       _M_get_node()
+     518          752 :       { return _Node_alloc_traits::allocate(_M_impl, 1); }
+     519              : 
+     520              :       void
+     521          376 :       _M_put_node(typename _Node_alloc_traits::pointer __p) _GLIBCXX_NOEXCEPT
+     522          376 :       { _Node_alloc_traits::deallocate(_M_impl, __p, 1); }
+     523              : 
+     524              :   public:
+     525              :       typedef _Alloc allocator_type;
+     526              : 
+     527              :       _Node_alloc_type&
+     528          752 :       _M_get_Node_allocator() _GLIBCXX_NOEXCEPT
+     529          752 :       { return _M_impl; }
+     530              : 
+     531              :       const _Node_alloc_type&
+     532              :       _M_get_Node_allocator() const _GLIBCXX_NOEXCEPT
+     533              :       { return _M_impl; }
+     534              : 
+     535              : #if __cplusplus >= 201103L
+     536           58 :       _List_base() = default;
+     537              : #else
+     538              :       _List_base() { }
+     539              : #endif
+     540              : 
+     541              :       _List_base(const _Node_alloc_type& __a) _GLIBCXX_NOEXCEPT
+     542              :       : _M_impl(__a)
+     543              :       { }
+     544              : 
+     545              : #if __cplusplus >= 201103L
+     546              :       _List_base(_List_base&&) = default;
+     547              : 
+     548              : # if !_GLIBCXX_INLINE_VERSION
+     549              :       _List_base(_List_base&& __x, _Node_alloc_type&& __a)
+     550              :       : _M_impl(std::move(__a))
+     551              :       {
+     552              :         if (__x._M_get_Node_allocator() == _M_get_Node_allocator())
+     553              :           _M_move_nodes(std::move(__x));
+     554              :         // else caller must move individual elements.
+     555              :       }
+     556              : # endif
+     557              : 
+     558              :       // Used when allocator is_always_equal.
+     559              :       _List_base(_Node_alloc_type&& __a, _List_base&& __x)
+     560              :       : _M_impl(std::move(__a), std::move(__x._M_impl))
+     561              :       { }
+     562              : 
+     563              :       // Used when allocator !is_always_equal.
+     564              :       _List_base(_Node_alloc_type&& __a)
+     565              :       : _M_impl(std::move(__a))
+     566              :       { }
+     567              : 
+     568              :       void
+     569              :       _M_move_nodes(_List_base&& __x)
+     570              :       { _M_impl._M_node._M_move_nodes(std::move(__x._M_impl._M_node)); }
+     571              : #endif
+     572              : 
+     573              :       // This is what actually destroys the list.
+     574           58 :       ~_List_base() _GLIBCXX_NOEXCEPT
+     575           58 :       { _M_clear(); }
+     576              : 
+     577              :       void
+     578              :       _M_clear() _GLIBCXX_NOEXCEPT;
+     579              : 
+     580              :       void
+     581              :       _M_init() _GLIBCXX_NOEXCEPT
+     582              :       { this->_M_impl._M_node._M_init(); }
+     583              :     };
+     584              : 
+     585              :   /**
+     586              :    *  @brief A standard container with linear time access to elements,
+     587              :    *  and fixed time insertion/deletion at any point in the sequence.
+     588              :    *
+     589              :    *  @ingroup sequences
+     590              :    *
+     591              :    *  @tparam _Tp  Type of element.
+     592              :    *  @tparam _Alloc  Allocator type, defaults to allocator<_Tp>.
+     593              :    *
+     594              :    *  Meets the requirements of a <a href="tables.html#65">container</a>, a
+     595              :    *  <a href="tables.html#66">reversible container</a>, and a
+     596              :    *  <a href="tables.html#67">sequence</a>, including the
+     597              :    *  <a href="tables.html#68">optional sequence requirements</a> with the
+     598              :    *  %exception of @c at and @c operator[].
+     599              :    *
+     600              :    *  This is a @e doubly @e linked %list.  Traversal up and down the
+     601              :    *  %list requires linear time, but adding and removing elements (or
+     602              :    *  @e nodes) is done in constant time, regardless of where the
+     603              :    *  change takes place.  Unlike std::vector and std::deque,
+     604              :    *  random-access iterators are not provided, so subscripting ( @c
+     605              :    *  [] ) access is not allowed.  For algorithms which only need
+     606              :    *  sequential access, this lack makes no difference.
+     607              :    *
+     608              :    *  Also unlike the other standard containers, std::list provides
+     609              :    *  specialized algorithms %unique to linked lists, such as
+     610              :    *  splicing, sorting, and in-place reversal.
+     611              :    *
+     612              :    *  A couple points on memory allocation for list<Tp>:
+     613              :    *
+     614              :    *  First, we never actually allocate a Tp, we allocate
+     615              :    *  List_node<Tp>'s and trust [20.1.5]/4 to DTRT.  This is to ensure
+     616              :    *  that after elements from %list<X,Alloc1> are spliced into
+     617              :    *  %list<X,Alloc2>, destroying the memory of the second %list is a
+     618              :    *  valid operation, i.e., Alloc1 giveth and Alloc2 taketh away.
+     619              :    *
+     620              :    *  Second, a %list conceptually represented as
+     621              :    *  @code
+     622              :    *    A <---> B <---> C <---> D
+     623              :    *  @endcode
+     624              :    *  is actually circular; a link exists between A and D.  The %list
+     625              :    *  class holds (as its only data member) a private list::iterator
+     626              :    *  pointing to @e D, not to @e A!  To get to the head of the %list,
+     627              :    *  we start at the tail and move forward by one.  When this member
+     628              :    *  iterator's next/previous pointers refer to itself, the %list is
+     629              :    *  %empty.
+     630              :   */
+     631              :   template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
+     632              :     class list : protected _List_base<_Tp, _Alloc>
+     633              :     {
+     634              : #ifdef _GLIBCXX_CONCEPT_CHECKS
+     635              :       // concept requirements
+     636              :       typedef typename _Alloc::value_type               _Alloc_value_type;
+     637              : # if __cplusplus < 201103L
+     638              :       __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
+     639              : # endif
+     640              :       __glibcxx_class_requires2(_Tp, _Alloc_value_type, _SameTypeConcept)
+     641              : #endif
+     642              : 
+     643              : #if __cplusplus >= 201103L
+     644              :       static_assert(is_same<typename remove_cv<_Tp>::type, _Tp>::value,
+     645              :           "std::list must have a non-const, non-volatile value_type");
+     646              : # if __cplusplus > 201703L || defined __STRICT_ANSI__
+     647              :       static_assert(is_same<typename _Alloc::value_type, _Tp>::value,
+     648              :           "std::list must have the same value_type as its allocator");
+     649              : # endif
+     650              : #endif
+     651              : 
+     652              :       typedef _List_base<_Tp, _Alloc>                     _Base;
+     653              :       typedef typename _Base::_Tp_alloc_type            _Tp_alloc_type;
+     654              :       typedef typename _Base::_Tp_alloc_traits          _Tp_alloc_traits;
+     655              :       typedef typename _Base::_Node_alloc_type          _Node_alloc_type;
+     656              :       typedef typename _Base::_Node_alloc_traits        _Node_alloc_traits;
+     657              : 
+     658              :     public:
+     659              :       typedef _Tp                                        value_type;
+     660              :       typedef typename _Tp_alloc_traits::pointer         pointer;
+     661              :       typedef typename _Tp_alloc_traits::const_pointer   const_pointer;
+     662              :       typedef typename _Tp_alloc_traits::reference       reference;
+     663              :       typedef typename _Tp_alloc_traits::const_reference const_reference;
+     664              :       typedef _List_iterator<_Tp>                  iterator;
+     665              :       typedef _List_const_iterator<_Tp>                    const_iterator;
+     666              :       typedef std::reverse_iterator<const_iterator>        const_reverse_iterator;
+     667              :       typedef std::reverse_iterator<iterator>              reverse_iterator;
+     668              :       typedef size_t                                     size_type;
+     669              :       typedef ptrdiff_t                                  difference_type;
+     670              :       typedef _Alloc                                     allocator_type;
+     671              : 
+     672              :     protected:
+     673              :       // Note that pointers-to-_Node's can be ctor-converted to
+     674              :       // iterator types.
+     675              :       typedef _List_node<_Tp>                              _Node;
+     676              : 
+     677              :       using _Base::_M_impl;
+     678              :       using _Base::_M_put_node;
+     679              :       using _Base::_M_get_node;
+     680              :       using _Base::_M_get_Node_allocator;
+     681              : 
+     682              :       /**
+     683              :        *  @param  __args  An instance of user data.
+     684              :        *
+     685              :        *  Allocates space for a new node and constructs a copy of
+     686              :        *  @a __args in it.
+     687              :        */
+     688              : #if __cplusplus < 201103L
+     689              :       _Node*
+     690              :       _M_create_node(const value_type& __x)
+     691              :       {
+     692              :         _Node* __p = this->_M_get_node();
+     693              :         __try
+     694              :           {
+     695              :             _Tp_alloc_type __alloc(_M_get_Node_allocator());
+     696              :             __alloc.construct(__p->_M_valptr(), __x);
+     697              :           }
+     698              :         __catch(...)
+     699              :           {
+     700              :             _M_put_node(__p);
+     701              :             __throw_exception_again;
+     702              :           }
+     703              :         return __p;
+     704              :       }
+     705              : #else
+     706              :       template<typename... _Args>
+     707              :         _Node*
+     708          376 :         _M_create_node(_Args&&... __args)
+     709              :         {
+     710          376 :           auto __p = this->_M_get_node();
+     711          376 :           auto& __alloc = _M_get_Node_allocator();
+     712          376 :           __allocated_ptr<_Node_alloc_type> __guard{__alloc, __p};
+     713          376 :           _Node_alloc_traits::construct(__alloc, __p->_M_valptr(),
+     714              :                                         std::forward<_Args>(__args)...);
+     715          376 :           __guard = nullptr;
+     716          376 :           return __p;
+     717          376 :         }
+     718              : #endif
+     719              : 
+     720              : #if _GLIBCXX_USE_CXX11_ABI
+     721              :       static size_t
+     722              :       _S_distance(const_iterator __first, const_iterator __last)
+     723              :       { return std::distance(__first, __last); }
+     724              : 
+     725              :       // return the stored size
+     726              :       size_t
+     727          434 :       _M_node_count() const
+     728          434 :       { return this->_M_get_size(); }
+     729              : #else
+     730              :       // dummy implementations used when the size is not stored
+     731              :       static size_t
+     732              :       _S_distance(const_iterator, const_iterator)
+     733              :       { return 0; }
+     734              : 
+     735              :       // count the number of nodes
+     736              :       size_t
+     737              :       _M_node_count() const
+     738              :       { return std::distance(begin(), end()); }
+     739              : #endif
+     740              : 
+     741              :     public:
+     742              :       // [23.2.2.1] construct/copy/destroy
+     743              :       // (assign() and get_allocator() are also listed in this section)
+     744              : 
+     745              :       /**
+     746              :        *  @brief  Creates a %list with no elements.
+     747              :        */
+     748              : #if __cplusplus >= 201103L
+     749           58 :       list() = default;
+     750              : #else
+     751              :       list() { }
+     752              : #endif
+     753              : 
+     754              :       /**
+     755              :        *  @brief  Creates a %list with no elements.
+     756              :        *  @param  __a  An allocator object.
+     757              :        */
+     758              :       explicit
+     759              :       list(const allocator_type& __a) _GLIBCXX_NOEXCEPT
+     760              :       : _Base(_Node_alloc_type(__a)) { }
+     761              : 
+     762              : #if __cplusplus >= 201103L
+     763              :       /**
+     764              :        *  @brief  Creates a %list with default constructed elements.
+     765              :        *  @param  __n  The number of elements to initially create.
+     766              :        *  @param  __a  An allocator object.
+     767              :        *
+     768              :        *  This constructor fills the %list with @a __n default
+     769              :        *  constructed elements.
+     770              :        */
+     771              :       explicit
+     772              :       list(size_type __n, const allocator_type& __a = allocator_type())
+     773              :       : _Base(_Node_alloc_type(__a))
+     774              :       { _M_default_initialize(__n); }
+     775              : 
+     776              :       /**
+     777              :        *  @brief  Creates a %list with copies of an exemplar element.
+     778              :        *  @param  __n  The number of elements to initially create.
+     779              :        *  @param  __value  An element to copy.
+     780              :        *  @param  __a  An allocator object.
+     781              :        *
+     782              :        *  This constructor fills the %list with @a __n copies of @a __value.
+     783              :        */
+     784              :       list(size_type __n, const value_type& __value,
+     785              :            const allocator_type& __a = allocator_type())
+     786              :       : _Base(_Node_alloc_type(__a))
+     787              :       { _M_fill_initialize(__n, __value); }
+     788              : #else
+     789              :       /**
+     790              :        *  @brief  Creates a %list with copies of an exemplar element.
+     791              :        *  @param  __n  The number of elements to initially create.
+     792              :        *  @param  __value  An element to copy.
+     793              :        *  @param  __a  An allocator object.
+     794              :        *
+     795              :        *  This constructor fills the %list with @a __n copies of @a __value.
+     796              :        */
+     797              :       explicit
+     798              :       list(size_type __n, const value_type& __value = value_type(),
+     799              :            const allocator_type& __a = allocator_type())
+     800              :       : _Base(_Node_alloc_type(__a))
+     801              :       { _M_fill_initialize(__n, __value); }
+     802              : #endif
+     803              : 
+     804              :       /**
+     805              :        *  @brief  %List copy constructor.
+     806              :        *  @param  __x  A %list of identical element and allocator types.
+     807              :        *
+     808              :        *  The newly-created %list uses a copy of the allocation object used
+     809              :        *  by @a __x (unless the allocator traits dictate a different object).
+     810              :        */
+     811              :       list(const list& __x)
+     812              :       : _Base(_Node_alloc_traits::
+     813              :               _S_select_on_copy(__x._M_get_Node_allocator()))
+     814              :       { _M_initialize_dispatch(__x.begin(), __x.end(), __false_type()); }
+     815              : 
+     816              : #if __cplusplus >= 201103L
+     817              :       /**
+     818              :        *  @brief  %List move constructor.
+     819              :        *
+     820              :        *  The newly-created %list contains the exact contents of the moved
+     821              :        *  instance. The contents of the moved instance are a valid, but
+     822              :        *  unspecified %list.
+     823              :        */
+     824              :       list(list&&) = default;
+     825              : 
+     826              :       /**
+     827              :        *  @brief  Builds a %list from an initializer_list
+     828              :        *  @param  __l  An initializer_list of value_type.
+     829              :        *  @param  __a  An allocator object.
+     830              :        *
+     831              :        *  Create a %list consisting of copies of the elements in the
+     832              :        *  initializer_list @a __l.  This is linear in __l.size().
+     833              :        */
+     834              :       list(initializer_list<value_type> __l,
+     835              :            const allocator_type& __a = allocator_type())
+     836              :       : _Base(_Node_alloc_type(__a))
+     837              :       { _M_initialize_dispatch(__l.begin(), __l.end(), __false_type()); }
+     838              : 
+     839              :       list(const list& __x, const __type_identity_t<allocator_type>& __a)
+     840              :       : _Base(_Node_alloc_type(__a))
+     841              :       { _M_initialize_dispatch(__x.begin(), __x.end(), __false_type()); }
+     842              : 
+     843              :     private:
+     844              :       list(list&& __x, const allocator_type& __a, true_type) noexcept
+     845              :       : _Base(_Node_alloc_type(__a), std::move(__x))
+     846              :       { }
+     847              : 
+     848              :       list(list&& __x, const allocator_type& __a, false_type)
+     849              :       : _Base(_Node_alloc_type(__a))
+     850              :       {
+     851              :         if (__x._M_get_Node_allocator() == this->_M_get_Node_allocator())
+     852              :           this->_M_move_nodes(std::move(__x));
+     853              :         else
+     854              :           insert(begin(), std::__make_move_if_noexcept_iterator(__x.begin()),
+     855              :                           std::__make_move_if_noexcept_iterator(__x.end()));
+     856              :       }
+     857              : 
+     858              :     public:
+     859              :       list(list&& __x, const __type_identity_t<allocator_type>& __a)
+     860              :       noexcept(_Node_alloc_traits::_S_always_equal())
+     861              :       : list(std::move(__x), __a,
+     862              :              typename _Node_alloc_traits::is_always_equal{})
+     863              :       { }
+     864              : #endif
+     865              : 
+     866              :       /**
+     867              :        *  @brief  Builds a %list from a range.
+     868              :        *  @param  __first  An input iterator.
+     869              :        *  @param  __last  An input iterator.
+     870              :        *  @param  __a  An allocator object.
+     871              :        *
+     872              :        *  Create a %list consisting of copies of the elements from
+     873              :        *  [@a __first,@a __last).  This is linear in N (where N is
+     874              :        *  distance(@a __first,@a __last)).
+     875              :        */
+     876              : #if __cplusplus >= 201103L
+     877              :       template<typename _InputIterator,
+     878              :                typename = std::_RequireInputIter<_InputIterator>>
+     879              :         list(_InputIterator __first, _InputIterator __last,
+     880              :              const allocator_type& __a = allocator_type())
+     881              :         : _Base(_Node_alloc_type(__a))
+     882              :         { _M_initialize_dispatch(__first, __last, __false_type()); }
+     883              : #else
+     884              :       template<typename _InputIterator>
+     885              :         list(_InputIterator __first, _InputIterator __last,
+     886              :              const allocator_type& __a = allocator_type())
+     887              :         : _Base(_Node_alloc_type(__a))
+     888              :         {
+     889              :           // Check whether it's an integral type.  If so, it's not an iterator.
+     890              :           typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+     891              :           _M_initialize_dispatch(__first, __last, _Integral());
+     892              :         }
+     893              : #endif
+     894              : 
+     895              : #if __cplusplus >= 201103L
+     896              :       /**
+     897              :        *  No explicit dtor needed as the _Base dtor takes care of
+     898              :        *  things.  The _Base dtor only erases the elements, and note
+     899              :        *  that if the elements themselves are pointers, the pointed-to
+     900              :        *  memory is not touched in any way.  Managing the pointer is
+     901              :        *  the user's responsibility.
+     902              :        */
+     903           58 :       ~list() = default;
+     904              : #endif
+     905              : 
+     906              :       /**
+     907              :        *  @brief  %List assignment operator.
+     908              :        *  @param  __x  A %list of identical element and allocator types.
+     909              :        *
+     910              :        *  All the elements of @a __x are copied.
+     911              :        *
+     912              :        *  Whether the allocator is copied depends on the allocator traits.
+     913              :        */
+     914              :       list&
+     915              :       operator=(const list& __x);
+     916              : 
+     917              : #if __cplusplus >= 201103L
+     918              :       /**
+     919              :        *  @brief  %List move assignment operator.
+     920              :        *  @param  __x  A %list of identical element and allocator types.
+     921              :        *
+     922              :        *  The contents of @a __x are moved into this %list (without copying).
+     923              :        *
+     924              :        *  Afterwards @a __x is a valid, but unspecified %list
+     925              :        *
+     926              :        *  Whether the allocator is moved depends on the allocator traits.
+     927              :        */
+     928              :       list&
+     929              :       operator=(list&& __x)
+     930              :       noexcept(_Node_alloc_traits::_S_nothrow_move())
+     931              :       {
+     932              :         constexpr bool __move_storage =
+     933              :           _Node_alloc_traits::_S_propagate_on_move_assign()
+     934              :           || _Node_alloc_traits::_S_always_equal();
+     935              :         _M_move_assign(std::move(__x), __bool_constant<__move_storage>());
+     936              :         return *this;
+     937              :       }
+     938              : 
+     939              :       /**
+     940              :        *  @brief  %List initializer list assignment operator.
+     941              :        *  @param  __l  An initializer_list of value_type.
+     942              :        *
+     943              :        *  Replace the contents of the %list with copies of the elements
+     944              :        *  in the initializer_list @a __l.  This is linear in l.size().
+     945              :        */
+     946              :       list&
+     947              :       operator=(initializer_list<value_type> __l)
+     948              :       {
+     949              :         this->assign(__l.begin(), __l.end());
+     950              :         return *this;
+     951              :       }
+     952              : #endif
+     953              : 
+     954              :       /**
+     955              :        *  @brief  Assigns a given value to a %list.
+     956              :        *  @param  __n  Number of elements to be assigned.
+     957              :        *  @param  __val  Value to be assigned.
+     958              :        *
+     959              :        *  This function fills a %list with @a __n copies of the given
+     960              :        *  value.  Note that the assignment completely changes the %list
+     961              :        *  and that the resulting %list's size is the same as the number
+     962              :        *  of elements assigned.
+     963              :        */
+     964              :       void
+     965              :       assign(size_type __n, const value_type& __val)
+     966              :       { _M_fill_assign(__n, __val); }
+     967              : 
+     968              :       /**
+     969              :        *  @brief  Assigns a range to a %list.
+     970              :        *  @param  __first  An input iterator.
+     971              :        *  @param  __last   An input iterator.
+     972              :        *
+     973              :        *  This function fills a %list with copies of the elements in the
+     974              :        *  range [@a __first,@a __last).
+     975              :        *
+     976              :        *  Note that the assignment completely changes the %list and
+     977              :        *  that the resulting %list's size is the same as the number of
+     978              :        *  elements assigned.
+     979              :        */
+     980              : #if __cplusplus >= 201103L
+     981              :       template<typename _InputIterator,
+     982              :                typename = std::_RequireInputIter<_InputIterator>>
+     983              :         void
+     984              :         assign(_InputIterator __first, _InputIterator __last)
+     985              :         { _M_assign_dispatch(__first, __last, __false_type()); }
+     986              : #else
+     987              :       template<typename _InputIterator>
+     988              :         void
+     989              :         assign(_InputIterator __first, _InputIterator __last)
+     990              :         {
+     991              :           // Check whether it's an integral type.  If so, it's not an iterator.
+     992              :           typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+     993              :           _M_assign_dispatch(__first, __last, _Integral());
+     994              :         }
+     995              : #endif
+     996              : 
+     997              : #if __cplusplus >= 201103L
+     998              :       /**
+     999              :        *  @brief  Assigns an initializer_list to a %list.
+    1000              :        *  @param  __l  An initializer_list of value_type.
+    1001              :        *
+    1002              :        *  Replace the contents of the %list with copies of the elements
+    1003              :        *  in the initializer_list @a __l.  This is linear in __l.size().
+    1004              :        */
+    1005              :       void
+    1006              :       assign(initializer_list<value_type> __l)
+    1007              :       { this->_M_assign_dispatch(__l.begin(), __l.end(), __false_type()); }
+    1008              : #endif
+    1009              : 
+    1010              :       /// Get a copy of the memory allocation object.
+    1011              :       allocator_type
+    1012              :       get_allocator() const _GLIBCXX_NOEXCEPT
+    1013              :       { return allocator_type(_Base::_M_get_Node_allocator()); }
+    1014              : 
+    1015              :       // iterators
+    1016              :       /**
+    1017              :        *  Returns a read/write iterator that points to the first element in the
+    1018              :        *  %list.  Iteration is done in ordinary element order.
+    1019              :        */
+    1020              :       _GLIBCXX_NODISCARD
+    1021              :       iterator
+    1022         1446 :       begin() _GLIBCXX_NOEXCEPT
+    1023         1446 :       { return iterator(this->_M_impl._M_node._M_next); }
+    1024              : 
+    1025              :       /**
+    1026              :        *  Returns a read-only (constant) iterator that points to the
+    1027              :        *  first element in the %list.  Iteration is done in ordinary
+    1028              :        *  element order.
+    1029              :        */
+    1030              :       _GLIBCXX_NODISCARD
+    1031              :       const_iterator
+    1032              :       begin() const _GLIBCXX_NOEXCEPT
+    1033              :       { return const_iterator(this->_M_impl._M_node._M_next); }
+    1034              : 
+    1035              :       /**
+    1036              :        *  Returns a read/write iterator that points one past the last
+    1037              :        *  element in the %list.  Iteration is done in ordinary element
+    1038              :        *  order.
+    1039              :        */
+    1040              :       _GLIBCXX_NODISCARD
+    1041              :       iterator
+    1042          636 :       end() _GLIBCXX_NOEXCEPT
+    1043          636 :       { return iterator(&this->_M_impl._M_node); }
+    1044              : 
+    1045              :       /**
+    1046              :        *  Returns a read-only (constant) iterator that points one past
+    1047              :        *  the last element in the %list.  Iteration is done in ordinary
+    1048              :        *  element order.
+    1049              :        */
+    1050              :       _GLIBCXX_NODISCARD
+    1051              :       const_iterator
+    1052              :       end() const _GLIBCXX_NOEXCEPT
+    1053              :       { return const_iterator(&this->_M_impl._M_node); }
+    1054              : 
+    1055              :       /**
+    1056              :        *  Returns a read/write reverse iterator that points to the last
+    1057              :        *  element in the %list.  Iteration is done in reverse element
+    1058              :        *  order.
+    1059              :        */
+    1060              :       _GLIBCXX_NODISCARD
+    1061              :       reverse_iterator
+    1062              :       rbegin() _GLIBCXX_NOEXCEPT
+    1063              :       { return reverse_iterator(end()); }
+    1064              : 
+    1065              :       /**
+    1066              :        *  Returns a read-only (constant) reverse iterator that points to
+    1067              :        *  the last element in the %list.  Iteration is done in reverse
+    1068              :        *  element order.
+    1069              :        */
+    1070              :       _GLIBCXX_NODISCARD
+    1071              :       const_reverse_iterator
+    1072              :       rbegin() const _GLIBCXX_NOEXCEPT
+    1073              :       { return const_reverse_iterator(end()); }
+    1074              : 
+    1075              :       /**
+    1076              :        *  Returns a read/write reverse iterator that points to one
+    1077              :        *  before the first element in the %list.  Iteration is done in
+    1078              :        *  reverse element order.
+    1079              :        */
+    1080              :       _GLIBCXX_NODISCARD
+    1081              :       reverse_iterator
+    1082              :       rend() _GLIBCXX_NOEXCEPT
+    1083              :       { return reverse_iterator(begin()); }
+    1084              : 
+    1085              :       /**
+    1086              :        *  Returns a read-only (constant) reverse iterator that points to one
+    1087              :        *  before the first element in the %list.  Iteration is done in reverse
+    1088              :        *  element order.
+    1089              :        */
+    1090              :       _GLIBCXX_NODISCARD
+    1091              :       const_reverse_iterator
+    1092              :       rend() const _GLIBCXX_NOEXCEPT
+    1093              :       { return const_reverse_iterator(begin()); }
+    1094              : 
+    1095              : #if __cplusplus >= 201103L
+    1096              :       /**
+    1097              :        *  Returns a read-only (constant) iterator that points to the
+    1098              :        *  first element in the %list.  Iteration is done in ordinary
+    1099              :        *  element order.
+    1100              :        */
+    1101              :       [[__nodiscard__]]
+    1102              :       const_iterator
+    1103              :       cbegin() const noexcept
+    1104              :       { return const_iterator(this->_M_impl._M_node._M_next); }
+    1105              : 
+    1106              :       /**
+    1107              :        *  Returns a read-only (constant) iterator that points one past
+    1108              :        *  the last element in the %list.  Iteration is done in ordinary
+    1109              :        *  element order.
+    1110              :        */
+    1111              :       [[__nodiscard__]]
+    1112              :       const_iterator
+    1113              :       cend() const noexcept
+    1114              :       { return const_iterator(&this->_M_impl._M_node); }
+    1115              : 
+    1116              :       /**
+    1117              :        *  Returns a read-only (constant) reverse iterator that points to
+    1118              :        *  the last element in the %list.  Iteration is done in reverse
+    1119              :        *  element order.
+    1120              :        */
+    1121              :       [[__nodiscard__]]
+    1122              :       const_reverse_iterator
+    1123              :       crbegin() const noexcept
+    1124              :       { return const_reverse_iterator(end()); }
+    1125              : 
+    1126              :       /**
+    1127              :        *  Returns a read-only (constant) reverse iterator that points to one
+    1128              :        *  before the first element in the %list.  Iteration is done in reverse
+    1129              :        *  element order.
+    1130              :        */
+    1131              :       [[__nodiscard__]]
+    1132              :       const_reverse_iterator
+    1133              :       crend() const noexcept
+    1134              :       { return const_reverse_iterator(begin()); }
+    1135              : #endif
+    1136              : 
+    1137              :       // [23.2.2.2] capacity
+    1138              :       /**
+    1139              :        *  Returns true if the %list is empty.  (Thus begin() would equal
+    1140              :        *  end().)
+    1141              :        */
+    1142              :       _GLIBCXX_NODISCARD bool
+    1143              :       empty() const _GLIBCXX_NOEXCEPT
+    1144              :       { return this->_M_impl._M_node._M_next == &this->_M_impl._M_node; }
+    1145              : 
+    1146              :       /**  Returns the number of elements in the %list.  */
+    1147              :       _GLIBCXX_NODISCARD
+    1148              :       size_type
+    1149          434 :       size() const _GLIBCXX_NOEXCEPT
+    1150          434 :       { return _M_node_count(); }
+    1151              : 
+    1152              :       /**  Returns the size() of the largest possible %list.  */
+    1153              :       _GLIBCXX_NODISCARD
+    1154              :       size_type
+    1155              :       max_size() const _GLIBCXX_NOEXCEPT
+    1156              :       { return _Node_alloc_traits::max_size(_M_get_Node_allocator()); }
+    1157              : 
+    1158              : #if __cplusplus >= 201103L
+    1159              :       /**
+    1160              :        *  @brief Resizes the %list to the specified number of elements.
+    1161              :        *  @param __new_size Number of elements the %list should contain.
+    1162              :        *
+    1163              :        *  This function will %resize the %list to the specified number
+    1164              :        *  of elements.  If the number is smaller than the %list's
+    1165              :        *  current size the %list is truncated, otherwise default
+    1166              :        *  constructed elements are appended.
+    1167              :        */
+    1168              :       void
+    1169              :       resize(size_type __new_size);
+    1170              : 
+    1171              :       /**
+    1172              :        *  @brief Resizes the %list to the specified number of elements.
+    1173              :        *  @param __new_size Number of elements the %list should contain.
+    1174              :        *  @param __x Data with which new elements should be populated.
+    1175              :        *
+    1176              :        *  This function will %resize the %list to the specified number
+    1177              :        *  of elements.  If the number is smaller than the %list's
+    1178              :        *  current size the %list is truncated, otherwise the %list is
+    1179              :        *  extended and new elements are populated with given data.
+    1180              :        */
+    1181              :       void
+    1182              :       resize(size_type __new_size, const value_type& __x);
+    1183              : #else
+    1184              :       /**
+    1185              :        *  @brief Resizes the %list to the specified number of elements.
+    1186              :        *  @param __new_size Number of elements the %list should contain.
+    1187              :        *  @param __x Data with which new elements should be populated.
+    1188              :        *
+    1189              :        *  This function will %resize the %list to the specified number
+    1190              :        *  of elements.  If the number is smaller than the %list's
+    1191              :        *  current size the %list is truncated, otherwise the %list is
+    1192              :        *  extended and new elements are populated with given data.
+    1193              :        */
+    1194              :       void
+    1195              :       resize(size_type __new_size, value_type __x = value_type());
+    1196              : #endif
+    1197              : 
+    1198              :       // element access
+    1199              :       /**
+    1200              :        *  Returns a read/write reference to the data at the first
+    1201              :        *  element of the %list.
+    1202              :        */
+    1203              :       _GLIBCXX_NODISCARD
+    1204              :       reference
+    1205          376 :       front() _GLIBCXX_NOEXCEPT
+    1206          376 :       { return *begin(); }
+    1207              : 
+    1208              :       /**
+    1209              :        *  Returns a read-only (constant) reference to the data at the first
+    1210              :        *  element of the %list.
+    1211              :        */
+    1212              :       _GLIBCXX_NODISCARD
+    1213              :       const_reference
+    1214              :       front() const _GLIBCXX_NOEXCEPT
+    1215              :       { return *begin(); }
+    1216              : 
+    1217              :       /**
+    1218              :        *  Returns a read/write reference to the data at the last element
+    1219              :        *  of the %list.
+    1220              :        */
+    1221              :       _GLIBCXX_NODISCARD
+    1222              :       reference
+    1223              :       back() _GLIBCXX_NOEXCEPT
+    1224              :       {
+    1225              :         iterator __tmp = end();
+    1226              :         --__tmp;
+    1227              :         return *__tmp;
+    1228              :       }
+    1229              : 
+    1230              :       /**
+    1231              :        *  Returns a read-only (constant) reference to the data at the last
+    1232              :        *  element of the %list.
+    1233              :        */
+    1234              :       _GLIBCXX_NODISCARD
+    1235              :       const_reference
+    1236              :       back() const _GLIBCXX_NOEXCEPT
+    1237              :       {
+    1238              :         const_iterator __tmp = end();
+    1239              :         --__tmp;
+    1240              :         return *__tmp;
+    1241              :       }
+    1242              : 
+    1243              :       // [23.2.2.3] modifiers
+    1244              :       /**
+    1245              :        *  @brief  Add data to the front of the %list.
+    1246              :        *  @param  __x  Data to be added.
+    1247              :        *
+    1248              :        *  This is a typical stack operation.  The function creates an
+    1249              :        *  element at the front of the %list and assigns the given data
+    1250              :        *  to it.  Due to the nature of a %list this operation can be
+    1251              :        *  done in constant time, and does not invalidate iterators and
+    1252              :        *  references.
+    1253              :        */
+    1254              :       void
+    1255          376 :       push_front(const value_type& __x)
+    1256          376 :       { this->_M_insert(begin(), __x); }
+    1257              : 
+    1258              : #if __cplusplus >= 201103L
+    1259              :       void
+    1260              :       push_front(value_type&& __x)
+    1261              :       { this->_M_insert(begin(), std::move(__x)); }
+    1262              : 
+    1263              :       template<typename... _Args>
+    1264              : #if __cplusplus > 201402L
+    1265              :         reference
+    1266              : #else
+    1267              :         void
+    1268              : #endif
+    1269              :         emplace_front(_Args&&... __args)
+    1270              :         {
+    1271              :           this->_M_insert(begin(), std::forward<_Args>(__args)...);
+    1272              : #if __cplusplus > 201402L
+    1273              :           return front();
+    1274              : #endif
+    1275              :         }
+    1276              : #endif
+    1277              : 
+    1278              :       /**
+    1279              :        *  @brief  Removes first element.
+    1280              :        *
+    1281              :        *  This is a typical stack operation.  It shrinks the %list by
+    1282              :        *  one.  Due to the nature of a %list this operation can be done
+    1283              :        *  in constant time, and only invalidates iterators/references to
+    1284              :        *  the element being removed.
+    1285              :        *
+    1286              :        *  Note that no data is returned, and if the first element's data
+    1287              :        *  is needed, it should be retrieved before pop_front() is
+    1288              :        *  called.
+    1289              :        */
+    1290              :       void
+    1291          376 :       pop_front() _GLIBCXX_NOEXCEPT
+    1292          376 :       { this->_M_erase(begin()); }
+    1293              : 
+    1294              :       /**
+    1295              :        *  @brief  Add data to the end of the %list.
+    1296              :        *  @param  __x  Data to be added.
+    1297              :        *
+    1298              :        *  This is a typical stack operation.  The function creates an
+    1299              :        *  element at the end of the %list and assigns the given data to
+    1300              :        *  it.  Due to the nature of a %list this operation can be done
+    1301              :        *  in constant time, and does not invalidate iterators and
+    1302              :        *  references.
+    1303              :        */
+    1304              :       void
+    1305              :       push_back(const value_type& __x)
+    1306              :       { this->_M_insert(end(), __x); }
+    1307              : 
+    1308              : #if __cplusplus >= 201103L
+    1309              :       void
+    1310              :       push_back(value_type&& __x)
+    1311              :       { this->_M_insert(end(), std::move(__x)); }
+    1312              : 
+    1313              :       template<typename... _Args>
+    1314              : #if __cplusplus > 201402L
+    1315              :         reference
+    1316              : #else
+    1317              :         void
+    1318              : #endif
+    1319              :         emplace_back(_Args&&... __args)
+    1320              :         {
+    1321              :           this->_M_insert(end(), std::forward<_Args>(__args)...);
+    1322              : #if __cplusplus > 201402L
+    1323              :         return back();
+    1324              : #endif
+    1325              :         }
+    1326              : #endif
+    1327              : 
+    1328              :       /**
+    1329              :        *  @brief  Removes last element.
+    1330              :        *
+    1331              :        *  This is a typical stack operation.  It shrinks the %list by
+    1332              :        *  one.  Due to the nature of a %list this operation can be done
+    1333              :        *  in constant time, and only invalidates iterators/references to
+    1334              :        *  the element being removed.
+    1335              :        *
+    1336              :        *  Note that no data is returned, and if the last element's data
+    1337              :        *  is needed, it should be retrieved before pop_back() is called.
+    1338              :        */
+    1339              :       void
+    1340              :       pop_back() _GLIBCXX_NOEXCEPT
+    1341              :       { this->_M_erase(iterator(this->_M_impl._M_node._M_prev)); }
+    1342              : 
+    1343              : #if __cplusplus >= 201103L
+    1344              :       /**
+    1345              :        *  @brief  Constructs object in %list before specified iterator.
+    1346              :        *  @param  __position  A const_iterator into the %list.
+    1347              :        *  @param  __args  Arguments.
+    1348              :        *  @return  An iterator that points to the inserted data.
+    1349              :        *
+    1350              :        *  This function will insert an object of type T constructed
+    1351              :        *  with T(std::forward<Args>(args)...) before the specified
+    1352              :        *  location.  Due to the nature of a %list this operation can
+    1353              :        *  be done in constant time, and does not invalidate iterators
+    1354              :        *  and references.
+    1355              :        */
+    1356              :       template<typename... _Args>
+    1357              :         iterator
+    1358              :         emplace(const_iterator __position, _Args&&... __args);
+    1359              : 
+    1360              :       /**
+    1361              :        *  @brief  Inserts given value into %list before specified iterator.
+    1362              :        *  @param  __position  A const_iterator into the %list.
+    1363              :        *  @param  __x  Data to be inserted.
+    1364              :        *  @return  An iterator that points to the inserted data.
+    1365              :        *
+    1366              :        *  This function will insert a copy of the given value before
+    1367              :        *  the specified location.  Due to the nature of a %list this
+    1368              :        *  operation can be done in constant time, and does not
+    1369              :        *  invalidate iterators and references.
+    1370              :        */
+    1371              :       iterator
+    1372              :       insert(const_iterator __position, const value_type& __x);
+    1373              : #else
+    1374              :       /**
+    1375              :        *  @brief  Inserts given value into %list before specified iterator.
+    1376              :        *  @param  __position  An iterator into the %list.
+    1377              :        *  @param  __x  Data to be inserted.
+    1378              :        *  @return  An iterator that points to the inserted data.
+    1379              :        *
+    1380              :        *  This function will insert a copy of the given value before
+    1381              :        *  the specified location.  Due to the nature of a %list this
+    1382              :        *  operation can be done in constant time, and does not
+    1383              :        *  invalidate iterators and references.
+    1384              :        */
+    1385              :       iterator
+    1386              :       insert(iterator __position, const value_type& __x);
+    1387              : #endif
+    1388              : 
+    1389              : #if __cplusplus >= 201103L
+    1390              :       /**
+    1391              :        *  @brief  Inserts given rvalue into %list before specified iterator.
+    1392              :        *  @param  __position  A const_iterator into the %list.
+    1393              :        *  @param  __x  Data to be inserted.
+    1394              :        *  @return  An iterator that points to the inserted data.
+    1395              :        *
+    1396              :        *  This function will insert a copy of the given rvalue before
+    1397              :        *  the specified location.  Due to the nature of a %list this
+    1398              :        *  operation can be done in constant time, and does not
+    1399              :        *  invalidate iterators and references.
+    1400              :         */
+    1401              :       iterator
+    1402              :       insert(const_iterator __position, value_type&& __x)
+    1403              :       { return emplace(__position, std::move(__x)); }
+    1404              : 
+    1405              :       /**
+    1406              :        *  @brief  Inserts the contents of an initializer_list into %list
+    1407              :        *          before specified const_iterator.
+    1408              :        *  @param  __p  A const_iterator into the %list.
+    1409              :        *  @param  __l  An initializer_list of value_type.
+    1410              :        *  @return  An iterator pointing to the first element inserted
+    1411              :        *           (or __position).
+    1412              :        *
+    1413              :        *  This function will insert copies of the data in the
+    1414              :        *  initializer_list @a l into the %list before the location
+    1415              :        *  specified by @a p.
+    1416              :        *
+    1417              :        *  This operation is linear in the number of elements inserted and
+    1418              :        *  does not invalidate iterators and references.
+    1419              :        */
+    1420              :       iterator
+    1421              :       insert(const_iterator __p, initializer_list<value_type> __l)
+    1422              :       { return this->insert(__p, __l.begin(), __l.end()); }
+    1423              : #endif
+    1424              : 
+    1425              : #if __cplusplus >= 201103L
+    1426              :       /**
+    1427              :        *  @brief  Inserts a number of copies of given data into the %list.
+    1428              :        *  @param  __position  A const_iterator into the %list.
+    1429              :        *  @param  __n  Number of elements to be inserted.
+    1430              :        *  @param  __x  Data to be inserted.
+    1431              :        *  @return  An iterator pointing to the first element inserted
+    1432              :        *           (or __position).
+    1433              :        *
+    1434              :        *  This function will insert a specified number of copies of the
+    1435              :        *  given data before the location specified by @a position.
+    1436              :        *
+    1437              :        *  This operation is linear in the number of elements inserted and
+    1438              :        *  does not invalidate iterators and references.
+    1439              :        */
+    1440              :       iterator
+    1441              :       insert(const_iterator __position, size_type __n, const value_type& __x);
+    1442              : #else
+    1443              :       /**
+    1444              :        *  @brief  Inserts a number of copies of given data into the %list.
+    1445              :        *  @param  __position  An iterator into the %list.
+    1446              :        *  @param  __n  Number of elements to be inserted.
+    1447              :        *  @param  __x  Data to be inserted.
+    1448              :        *
+    1449              :        *  This function will insert a specified number of copies of the
+    1450              :        *  given data before the location specified by @a position.
+    1451              :        *
+    1452              :        *  This operation is linear in the number of elements inserted and
+    1453              :        *  does not invalidate iterators and references.
+    1454              :        */
+    1455              :       void
+    1456              :       insert(iterator __position, size_type __n, const value_type& __x)
+    1457              :       {
+    1458              :         list __tmp(__n, __x, get_allocator());
+    1459              :         splice(__position, __tmp);
+    1460              :       }
+    1461              : #endif
+    1462              : 
+    1463              : #if __cplusplus >= 201103L
+    1464              :       /**
+    1465              :        *  @brief  Inserts a range into the %list.
+    1466              :        *  @param  __position  A const_iterator into the %list.
+    1467              :        *  @param  __first  An input iterator.
+    1468              :        *  @param  __last   An input iterator.
+    1469              :        *  @return  An iterator pointing to the first element inserted
+    1470              :        *           (or __position).
+    1471              :        *
+    1472              :        *  This function will insert copies of the data in the range [@a
+    1473              :        *  first,@a last) into the %list before the location specified by
+    1474              :        *  @a position.
+    1475              :        *
+    1476              :        *  This operation is linear in the number of elements inserted and
+    1477              :        *  does not invalidate iterators and references.
+    1478              :        */
+    1479              :       template<typename _InputIterator,
+    1480              :                typename = std::_RequireInputIter<_InputIterator>>
+    1481              :         iterator
+    1482              :         insert(const_iterator __position, _InputIterator __first,
+    1483              :                _InputIterator __last);
+    1484              : #else
+    1485              :       /**
+    1486              :        *  @brief  Inserts a range into the %list.
+    1487              :        *  @param  __position  An iterator into the %list.
+    1488              :        *  @param  __first  An input iterator.
+    1489              :        *  @param  __last   An input iterator.
+    1490              :        *
+    1491              :        *  This function will insert copies of the data in the range [@a
+    1492              :        *  first,@a last) into the %list before the location specified by
+    1493              :        *  @a position.
+    1494              :        *
+    1495              :        *  This operation is linear in the number of elements inserted and
+    1496              :        *  does not invalidate iterators and references.
+    1497              :        */
+    1498              :       template<typename _InputIterator>
+    1499              :         void
+    1500              :         insert(iterator __position, _InputIterator __first,
+    1501              :                _InputIterator __last)
+    1502              :         {
+    1503              :           list __tmp(__first, __last, get_allocator());
+    1504              :           splice(__position, __tmp);
+    1505              :         }
+    1506              : #endif
+    1507              : 
+    1508              :       /**
+    1509              :        *  @brief  Remove element at given position.
+    1510              :        *  @param  __position  Iterator pointing to element to be erased.
+    1511              :        *  @return  An iterator pointing to the next element (or end()).
+    1512              :        *
+    1513              :        *  This function will erase the element at the given position and thus
+    1514              :        *  shorten the %list by one.
+    1515              :        *
+    1516              :        *  Due to the nature of a %list this operation can be done in
+    1517              :        *  constant time, and only invalidates iterators/references to
+    1518              :        *  the element being removed.  The user is also cautioned that
+    1519              :        *  this function only erases the element, and that if the element
+    1520              :        *  is itself a pointer, the pointed-to memory is not touched in
+    1521              :        *  any way.  Managing the pointer is the user's responsibility.
+    1522              :        */
+    1523              :       iterator
+    1524              : #if __cplusplus >= 201103L
+    1525              :       erase(const_iterator __position) noexcept;
+    1526              : #else
+    1527              :       erase(iterator __position);
+    1528              : #endif
+    1529              : 
+    1530              :       /**
+    1531              :        *  @brief  Remove a range of elements.
+    1532              :        *  @param  __first  Iterator pointing to the first element to be erased.
+    1533              :        *  @param  __last  Iterator pointing to one past the last element to be
+    1534              :        *                erased.
+    1535              :        *  @return  An iterator pointing to the element pointed to by @a last
+    1536              :        *           prior to erasing (or end()).
+    1537              :        *
+    1538              :        *  This function will erase the elements in the range @a
+    1539              :        *  [first,last) and shorten the %list accordingly.
+    1540              :        *
+    1541              :        *  This operation is linear time in the size of the range and only
+    1542              :        *  invalidates iterators/references to the element being removed.
+    1543              :        *  The user is also cautioned that this function only erases the
+    1544              :        *  elements, and that if the elements themselves are pointers, the
+    1545              :        *  pointed-to memory is not touched in any way.  Managing the pointer
+    1546              :        *  is the user's responsibility.
+    1547              :        */
+    1548              :       iterator
+    1549              : #if __cplusplus >= 201103L
+    1550              :       erase(const_iterator __first, const_iterator __last) noexcept
+    1551              : #else
+    1552              :       erase(iterator __first, iterator __last)
+    1553              : #endif
+    1554              :       {
+    1555              :         while (__first != __last)
+    1556              :           __first = erase(__first);
+    1557              :         return __last._M_const_cast();
+    1558              :       }
+    1559              : 
+    1560              :       /**
+    1561              :        *  @brief  Swaps data with another %list.
+    1562              :        *  @param  __x  A %list of the same element and allocator types.
+    1563              :        *
+    1564              :        *  This exchanges the elements between two lists in constant
+    1565              :        *  time.  Note that the global std::swap() function is
+    1566              :        *  specialized such that std::swap(l1,l2) will feed to this
+    1567              :        *  function.
+    1568              :        *
+    1569              :        *  Whether the allocators are swapped depends on the allocator traits.
+    1570              :        */
+    1571              :       void
+    1572              :       swap(list& __x) _GLIBCXX_NOEXCEPT
+    1573              :       {
+    1574              :         __detail::_List_node_base::swap(this->_M_impl._M_node,
+    1575              :                                         __x._M_impl._M_node);
+    1576              : 
+    1577              :         size_t __xsize = __x._M_get_size();
+    1578              :         __x._M_set_size(this->_M_get_size());
+    1579              :         this->_M_set_size(__xsize);
+    1580              : 
+    1581              :         _Node_alloc_traits::_S_on_swap(this->_M_get_Node_allocator(),
+    1582              :                                        __x._M_get_Node_allocator());
+    1583              :       }
+    1584              : 
+    1585              :       /**
+    1586              :        *  Erases all the elements.  Note that this function only erases
+    1587              :        *  the elements, and that if the elements themselves are
+    1588              :        *  pointers, the pointed-to memory is not touched in any way.
+    1589              :        *  Managing the pointer is the user's responsibility.
+    1590              :        */
+    1591              :       void
+    1592              :       clear() _GLIBCXX_NOEXCEPT
+    1593              :       {
+    1594              :         _Base::_M_clear();
+    1595              :         _Base::_M_init();
+    1596              :       }
+    1597              : 
+    1598              :       // [23.2.2.4] list operations
+    1599              :       /**
+    1600              :        *  @brief  Insert contents of another %list.
+    1601              :        *  @param  __position  Iterator referencing the element to insert before.
+    1602              :        *  @param  __x  Source list.
+    1603              :        *
+    1604              :        *  The elements of @a __x are inserted in constant time in front of
+    1605              :        *  the element referenced by @a __position.  @a __x becomes an empty
+    1606              :        *  list.
+    1607              :        *
+    1608              :        *  Requires this != @a __x.
+    1609              :        */
+    1610              :       void
+    1611              : #if __cplusplus >= 201103L
+    1612              :       splice(const_iterator __position, list&& __x) noexcept
+    1613              : #else
+    1614              :       splice(iterator __position, list& __x)
+    1615              : #endif
+    1616              :       {
+    1617              :         if (!__x.empty())
+    1618              :           {
+    1619              :             _M_check_equal_allocators(__x);
+    1620              : 
+    1621              :             this->_M_transfer(__position._M_const_cast(),
+    1622              :                               __x.begin(), __x.end());
+    1623              : 
+    1624              :             this->_M_inc_size(__x._M_get_size());
+    1625              :             __x._M_set_size(0);
+    1626              :           }
+    1627              :       }
+    1628              : 
+    1629              : #if __cplusplus >= 201103L
+    1630              :       void
+    1631              :       splice(const_iterator __position, list& __x) noexcept
+    1632              :       { splice(__position, std::move(__x)); }
+    1633              : #endif
+    1634              : 
+    1635              : #if __cplusplus >= 201103L
+    1636              :       /**
+    1637              :        *  @brief  Insert element from another %list.
+    1638              :        *  @param  __position  Const_iterator referencing the element to
+    1639              :        *                      insert before.
+    1640              :        *  @param  __x  Source list.
+    1641              :        *  @param  __i  Const_iterator referencing the element to move.
+    1642              :        *
+    1643              :        *  Removes the element in list @a __x referenced by @a __i and
+    1644              :        *  inserts it into the current list before @a __position.
+    1645              :        */
+    1646              :       void
+    1647              :       splice(const_iterator __position, list&& __x, const_iterator __i) noexcept
+    1648              : #else
+    1649              :       /**
+    1650              :        *  @brief  Insert element from another %list.
+    1651              :        *  @param  __position  Iterator referencing the element to insert before.
+    1652              :        *  @param  __x  Source list.
+    1653              :        *  @param  __i  Iterator referencing the element to move.
+    1654              :        *
+    1655              :        *  Removes the element in list @a __x referenced by @a __i and
+    1656              :        *  inserts it into the current list before @a __position.
+    1657              :        */
+    1658              :       void
+    1659              :       splice(iterator __position, list& __x, iterator __i)
+    1660              : #endif
+    1661              :       {
+    1662              :         iterator __j = __i._M_const_cast();
+    1663              :         ++__j;
+    1664              :         if (__position == __i || __position == __j)
+    1665              :           return;
+    1666              : 
+    1667              :         if (this != std::__addressof(__x))
+    1668              :           _M_check_equal_allocators(__x);
+    1669              : 
+    1670              :         this->_M_transfer(__position._M_const_cast(),
+    1671              :                           __i._M_const_cast(), __j);
+    1672              : 
+    1673              :         this->_M_inc_size(1);
+    1674              :         __x._M_dec_size(1);
+    1675              :       }
+    1676              : 
+    1677              : #if __cplusplus >= 201103L
+    1678              :       /**
+    1679              :        *  @brief  Insert element from another %list.
+    1680              :        *  @param  __position  Const_iterator referencing the element to
+    1681              :        *                      insert before.
+    1682              :        *  @param  __x  Source list.
+    1683              :        *  @param  __i  Const_iterator referencing the element to move.
+    1684              :        *
+    1685              :        *  Removes the element in list @a __x referenced by @a __i and
+    1686              :        *  inserts it into the current list before @a __position.
+    1687              :        */
+    1688              :       void
+    1689              :       splice(const_iterator __position, list& __x, const_iterator __i) noexcept
+    1690              :       { splice(__position, std::move(__x), __i); }
+    1691              : #endif
+    1692              : 
+    1693              : #if __cplusplus >= 201103L
+    1694              :       /**
+    1695              :        *  @brief  Insert range from another %list.
+    1696              :        *  @param  __position  Const_iterator referencing the element to
+    1697              :        *                      insert before.
+    1698              :        *  @param  __x  Source list.
+    1699              :        *  @param  __first  Const_iterator referencing the start of range in x.
+    1700              :        *  @param  __last  Const_iterator referencing the end of range in x.
+    1701              :        *
+    1702              :        *  Removes elements in the range [__first,__last) and inserts them
+    1703              :        *  before @a __position in constant time.
+    1704              :        *
+    1705              :        *  Undefined if @a __position is in [__first,__last).
+    1706              :        */
+    1707              :       void
+    1708              :       splice(const_iterator __position, list&& __x, const_iterator __first,
+    1709              :              const_iterator __last) noexcept
+    1710              : #else
+    1711              :       /**
+    1712              :        *  @brief  Insert range from another %list.
+    1713              :        *  @param  __position  Iterator referencing the element to insert before.
+    1714              :        *  @param  __x  Source list.
+    1715              :        *  @param  __first  Iterator referencing the start of range in x.
+    1716              :        *  @param  __last  Iterator referencing the end of range in x.
+    1717              :        *
+    1718              :        *  Removes elements in the range [__first,__last) and inserts them
+    1719              :        *  before @a __position in constant time.
+    1720              :        *
+    1721              :        *  Undefined if @a __position is in [__first,__last).
+    1722              :        */
+    1723              :       void
+    1724              :       splice(iterator __position, list& __x, iterator __first,
+    1725              :              iterator __last)
+    1726              : #endif
+    1727              :       {
+    1728              :         if (__first != __last)
+    1729              :           {
+    1730              :             if (this != std::__addressof(__x))
+    1731              :               _M_check_equal_allocators(__x);
+    1732              : 
+    1733              :             size_t __n = _S_distance(__first, __last);
+    1734              :             this->_M_inc_size(__n);
+    1735              :             __x._M_dec_size(__n);
+    1736              : 
+    1737              :             this->_M_transfer(__position._M_const_cast(),
+    1738              :                               __first._M_const_cast(),
+    1739              :                               __last._M_const_cast());
+    1740              :           }
+    1741              :       }
+    1742              : 
+    1743              : #if __cplusplus >= 201103L
+    1744              :       /**
+    1745              :        *  @brief  Insert range from another %list.
+    1746              :        *  @param  __position  Const_iterator referencing the element to
+    1747              :        *                      insert before.
+    1748              :        *  @param  __x  Source list.
+    1749              :        *  @param  __first  Const_iterator referencing the start of range in x.
+    1750              :        *  @param  __last  Const_iterator referencing the end of range in x.
+    1751              :        *
+    1752              :        *  Removes elements in the range [__first,__last) and inserts them
+    1753              :        *  before @a __position in constant time.
+    1754              :        *
+    1755              :        *  Undefined if @a __position is in [__first,__last).
+    1756              :        */
+    1757              :       void
+    1758              :       splice(const_iterator __position, list& __x, const_iterator __first,
+    1759              :              const_iterator __last) noexcept
+    1760              :       { splice(__position, std::move(__x), __first, __last); }
+    1761              : #endif
+    1762              : 
+    1763              :     private:
+    1764              : #if __cplusplus > 201703L
+    1765              : # define __cpp_lib_list_remove_return_type 201806L
+    1766              :       typedef size_type __remove_return_type;
+    1767              : # define _GLIBCXX_LIST_REMOVE_RETURN_TYPE_TAG \
+    1768              :       __attribute__((__abi_tag__("__cxx20")))
+    1769              : #else
+    1770              :       typedef void __remove_return_type;
+    1771              : # define _GLIBCXX_LIST_REMOVE_RETURN_TYPE_TAG
+    1772              : #endif
+    1773              :     public:
+    1774              : 
+    1775              :       /**
+    1776              :        *  @brief  Remove all elements equal to value.
+    1777              :        *  @param  __value  The value to remove.
+    1778              :        *
+    1779              :        *  Removes every element in the list equal to @a value.
+    1780              :        *  Remaining elements stay in list order.  Note that this
+    1781              :        *  function only erases the elements, and that if the elements
+    1782              :        *  themselves are pointers, the pointed-to memory is not
+    1783              :        *  touched in any way.  Managing the pointer is the user's
+    1784              :        *  responsibility.
+    1785              :        */
+    1786              :       _GLIBCXX_LIST_REMOVE_RETURN_TYPE_TAG
+    1787              :       __remove_return_type
+    1788              :       remove(const _Tp& __value);
+    1789              : 
+    1790              :       /**
+    1791              :        *  @brief  Remove all elements satisfying a predicate.
+    1792              :        *  @tparam  _Predicate  Unary predicate function or object.
+    1793              :        *
+    1794              :        *  Removes every element in the list for which the predicate
+    1795              :        *  returns true.  Remaining elements stay in list order.  Note
+    1796              :        *  that this function only erases the elements, and that if the
+    1797              :        *  elements themselves are pointers, the pointed-to memory is
+    1798              :        *  not touched in any way.  Managing the pointer is the user's
+    1799              :        *  responsibility.
+    1800              :        */
+    1801              :       template<typename _Predicate>
+    1802              :         __remove_return_type
+    1803              :         remove_if(_Predicate);
+    1804              : 
+    1805              :       /**
+    1806              :        *  @brief  Remove consecutive duplicate elements.
+    1807              :        *
+    1808              :        *  For each consecutive set of elements with the same value,
+    1809              :        *  remove all but the first one.  Remaining elements stay in
+    1810              :        *  list order.  Note that this function only erases the
+    1811              :        *  elements, and that if the elements themselves are pointers,
+    1812              :        *  the pointed-to memory is not touched in any way.  Managing
+    1813              :        *  the pointer is the user's responsibility.
+    1814              :        */
+    1815              :       _GLIBCXX_LIST_REMOVE_RETURN_TYPE_TAG
+    1816              :       __remove_return_type
+    1817              :       unique();
+    1818              : 
+    1819              :       /**
+    1820              :        *  @brief  Remove consecutive elements satisfying a predicate.
+    1821              :        *  @tparam _BinaryPredicate  Binary predicate function or object.
+    1822              :        *
+    1823              :        *  For each consecutive set of elements [first,last) that
+    1824              :        *  satisfy predicate(first,i) where i is an iterator in
+    1825              :        *  [first,last), remove all but the first one.  Remaining
+    1826              :        *  elements stay in list order.  Note that this function only
+    1827              :        *  erases the elements, and that if the elements themselves are
+    1828              :        *  pointers, the pointed-to memory is not touched in any way.
+    1829              :        *  Managing the pointer is the user's responsibility.
+    1830              :        */
+    1831              :       template<typename _BinaryPredicate>
+    1832              :         __remove_return_type
+    1833              :         unique(_BinaryPredicate);
+    1834              : 
+    1835              : #undef _GLIBCXX_LIST_REMOVE_RETURN_TYPE_TAG
+    1836              : 
+    1837              :       /**
+    1838              :        *  @brief  Merge sorted lists.
+    1839              :        *  @param  __x  Sorted list to merge.
+    1840              :        *
+    1841              :        *  Assumes that both @a __x and this list are sorted according to
+    1842              :        *  operator<().  Merges elements of @a __x into this list in
+    1843              :        *  sorted order, leaving @a __x empty when complete.  Elements in
+    1844              :        *  this list precede elements in @a __x that are equal.
+    1845              :        */
+    1846              : #if __cplusplus >= 201103L
+    1847              :       void
+    1848              :       merge(list&& __x);
+    1849              : 
+    1850              :       void
+    1851              :       merge(list& __x)
+    1852              :       { merge(std::move(__x)); }
+    1853              : #else
+    1854              :       void
+    1855              :       merge(list& __x);
+    1856              : #endif
+    1857              : 
+    1858              :       /**
+    1859              :        *  @brief  Merge sorted lists according to comparison function.
+    1860              :        *  @tparam _StrictWeakOrdering Comparison function defining
+    1861              :        *  sort order.
+    1862              :        *  @param  __x  Sorted list to merge.
+    1863              :        *  @param  __comp  Comparison functor.
+    1864              :        *
+    1865              :        *  Assumes that both @a __x and this list are sorted according to
+    1866              :        *  StrictWeakOrdering.  Merges elements of @a __x into this list
+    1867              :        *  in sorted order, leaving @a __x empty when complete.  Elements
+    1868              :        *  in this list precede elements in @a __x that are equivalent
+    1869              :        *  according to StrictWeakOrdering().
+    1870              :        */
+    1871              : #if __cplusplus >= 201103L
+    1872              :       template<typename _StrictWeakOrdering>
+    1873              :         void
+    1874              :         merge(list&& __x, _StrictWeakOrdering __comp);
+    1875              : 
+    1876              :       template<typename _StrictWeakOrdering>
+    1877              :         void
+    1878              :         merge(list& __x, _StrictWeakOrdering __comp)
+    1879              :         { merge(std::move(__x), __comp); }
+    1880              : #else
+    1881              :       template<typename _StrictWeakOrdering>
+    1882              :         void
+    1883              :         merge(list& __x, _StrictWeakOrdering __comp);
+    1884              : #endif
+    1885              : 
+    1886              :       /**
+    1887              :        *  @brief  Reverse the elements in list.
+    1888              :        *
+    1889              :        *  Reverse the order of elements in the list in linear time.
+    1890              :        */
+    1891              :       void
+    1892              :       reverse() _GLIBCXX_NOEXCEPT
+    1893              :       { this->_M_impl._M_node._M_reverse(); }
+    1894              : 
+    1895              :       /**
+    1896              :        *  @brief  Sort the elements.
+    1897              :        *
+    1898              :        *  Sorts the elements of this list in NlogN time.  Equivalent
+    1899              :        *  elements remain in list order.
+    1900              :        */
+    1901              :       void
+    1902              :       sort();
+    1903              : 
+    1904              :       /**
+    1905              :        *  @brief  Sort the elements according to comparison function.
+    1906              :        *
+    1907              :        *  Sorts the elements of this list in NlogN time.  Equivalent
+    1908              :        *  elements remain in list order.
+    1909              :        */
+    1910              :       template<typename _StrictWeakOrdering>
+    1911              :         void
+    1912              :         sort(_StrictWeakOrdering);
+    1913              : 
+    1914              :     protected:
+    1915              :       // Internal constructor functions follow.
+    1916              : 
+    1917              :       // Called by the range constructor to implement [23.1.1]/9
+    1918              : 
+    1919              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1920              :       // 438. Ambiguity in the "do the right thing" clause
+    1921              :       template<typename _Integer>
+    1922              :         void
+    1923              :         _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type)
+    1924              :         { _M_fill_initialize(static_cast<size_type>(__n), __x); }
+    1925              : 
+    1926              :       // Called by the range constructor to implement [23.1.1]/9
+    1927              :       template<typename _InputIterator>
+    1928              :         void
+    1929              :         _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
+    1930              :                                __false_type)
+    1931              :         {
+    1932              :           for (; __first != __last; ++__first)
+    1933              : #if __cplusplus >= 201103L
+    1934              :             emplace_back(*__first);
+    1935              : #else
+    1936              :             push_back(*__first);
+    1937              : #endif
+    1938              :         }
+    1939              : 
+    1940              :       // Called by list(n,v,a), and the range constructor when it turns out
+    1941              :       // to be the same thing.
+    1942              :       void
+    1943              :       _M_fill_initialize(size_type __n, const value_type& __x)
+    1944              :       {
+    1945              :         for (; __n; --__n)
+    1946              :           push_back(__x);
+    1947              :       }
+    1948              : 
+    1949              : #if __cplusplus >= 201103L
+    1950              :       // Called by list(n).
+    1951              :       void
+    1952              :       _M_default_initialize(size_type __n)
+    1953              :       {
+    1954              :         for (; __n; --__n)
+    1955              :           emplace_back();
+    1956              :       }
+    1957              : 
+    1958              :       // Called by resize(sz).
+    1959              :       void
+    1960              :       _M_default_append(size_type __n);
+    1961              : #endif
+    1962              : 
+    1963              :       // Internal assign functions follow.
+    1964              : 
+    1965              :       // Called by the range assign to implement [23.1.1]/9
+    1966              : 
+    1967              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1968              :       // 438. Ambiguity in the "do the right thing" clause
+    1969              :       template<typename _Integer>
+    1970              :         void
+    1971              :         _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
+    1972              :         { _M_fill_assign(__n, __val); }
+    1973              : 
+    1974              :       // Called by the range assign to implement [23.1.1]/9
+    1975              :       template<typename _InputIterator>
+    1976              :         void
+    1977              :         _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
+    1978              :                            __false_type);
+    1979              : 
+    1980              :       // Called by assign(n,t), and the range assign when it turns out
+    1981              :       // to be the same thing.
+    1982              :       void
+    1983              :       _M_fill_assign(size_type __n, const value_type& __val);
+    1984              : 
+    1985              : 
+    1986              :       // Moves the elements from [first,last) before position.
+    1987              :       void
+    1988              :       _M_transfer(iterator __position, iterator __first, iterator __last)
+    1989              :       { __position._M_node->_M_transfer(__first._M_node, __last._M_node); }
+    1990              : 
+    1991              :       // Inserts new element at position given and with value given.
+    1992              : #if __cplusplus < 201103L
+    1993              :       void
+    1994              :       _M_insert(iterator __position, const value_type& __x)
+    1995              :       {
+    1996              :         _Node* __tmp = _M_create_node(__x);
+    1997              :         __tmp->_M_hook(__position._M_node);
+    1998              :         this->_M_inc_size(1);
+    1999              :       }
+    2000              : #else
+    2001              :      template<typename... _Args>
+    2002              :        void
+    2003          376 :        _M_insert(iterator __position, _Args&&... __args)
+    2004              :        {
+    2005          376 :          _Node* __tmp = _M_create_node(std::forward<_Args>(__args)...);
+    2006          376 :          __tmp->_M_hook(__position._M_node);
+    2007          376 :          this->_M_inc_size(1);
+    2008          376 :        }
+    2009              : #endif
+    2010              : 
+    2011              :       // Erases element at position given.
+    2012              :       void
+    2013          376 :       _M_erase(iterator __position) _GLIBCXX_NOEXCEPT
+    2014              :       {
+    2015          376 :         this->_M_dec_size(1);
+    2016          376 :         __position._M_node->_M_unhook();
+    2017          376 :         _Node* __n = static_cast<_Node*>(__position._M_node);
+    2018              : #if __cplusplus >= 201103L
+    2019          376 :         _Node_alloc_traits::destroy(_M_get_Node_allocator(), __n->_M_valptr());
+    2020              : #else
+    2021              :         _Tp_alloc_type(_M_get_Node_allocator()).destroy(__n->_M_valptr());
+    2022              : #endif
+    2023              : 
+    2024          376 :         _M_put_node(__n);
+    2025          376 :       }
+    2026              : 
+    2027              :       // To implement the splice (and merge) bits of N1599.
+    2028              :       void
+    2029              :       _M_check_equal_allocators(const list& __x) _GLIBCXX_NOEXCEPT
+    2030              :       {
+    2031              :         if (_M_get_Node_allocator() != __x._M_get_Node_allocator())
+    2032              :           __builtin_abort();
+    2033              :       }
+    2034              : 
+    2035              :       // Used to implement resize.
+    2036              :       const_iterator
+    2037              :       _M_resize_pos(size_type& __new_size) const;
+    2038              : 
+    2039              : #if __cplusplus >= 201103L
+    2040              :       void
+    2041              :       _M_move_assign(list&& __x, true_type) noexcept
+    2042              :       {
+    2043              :         this->clear();
+    2044              :         this->_M_move_nodes(std::move(__x));
+    2045              :         std::__alloc_on_move(this->_M_get_Node_allocator(),
+    2046              :                              __x._M_get_Node_allocator());
+    2047              :       }
+    2048              : 
+    2049              :       void
+    2050              :       _M_move_assign(list&& __x, false_type)
+    2051              :       {
+    2052              :         if (__x._M_get_Node_allocator() == this->_M_get_Node_allocator())
+    2053              :           _M_move_assign(std::move(__x), true_type{});
+    2054              :         else
+    2055              :           // The rvalue's allocator cannot be moved, or is not equal,
+    2056              :           // so we need to individually move each element.
+    2057              :           _M_assign_dispatch(std::make_move_iterator(__x.begin()),
+    2058              :                              std::make_move_iterator(__x.end()),
+    2059              :                              __false_type{});
+    2060              :       }
+    2061              : #endif
+    2062              : 
+    2063              : #if _GLIBCXX_USE_CXX11_ABI
+    2064              :       // Update _M_size members after merging (some of) __src into __dest.
+    2065              :       struct _Finalize_merge
+    2066              :       {
+    2067              :         explicit
+    2068              :         _Finalize_merge(list& __dest, list& __src, const iterator& __src_next)
+    2069              :         : _M_dest(__dest), _M_src(__src), _M_next(__src_next)
+    2070              :         { }
+    2071              : 
+    2072              :         ~_Finalize_merge()
+    2073              :         {
+    2074              :           // For the common case, _M_next == _M_sec.end() and the std::distance
+    2075              :           // call is fast. But if any *iter1 < *iter2 comparison throws then we
+    2076              :           // have to count how many elements remain in _M_src.
+    2077              :           const size_t __num_unmerged = std::distance(_M_next, _M_src.end());
+    2078              :           const size_t __orig_size = _M_src._M_get_size();
+    2079              :           _M_dest._M_inc_size(__orig_size - __num_unmerged);
+    2080              :           _M_src._M_set_size(__num_unmerged);
+    2081              :         }
+    2082              : 
+    2083              :         list& _M_dest;
+    2084              :         list& _M_src;
+    2085              :         const iterator& _M_next;
+    2086              : 
+    2087              : #if __cplusplus >= 201103L
+    2088              :         _Finalize_merge(const _Finalize_merge&) = delete;
+    2089              : #endif
+    2090              :       };
+    2091              : #else
+    2092              :       struct _Finalize_merge
+    2093              :       { explicit _Finalize_merge(list&, list&, const iterator&) { } };
+    2094              : #endif
+    2095              : 
+    2096              :     };
+    2097              : 
+    2098              : #if __cpp_deduction_guides >= 201606
+    2099              :   template<typename _InputIterator, typename _ValT
+    2100              :              = typename iterator_traits<_InputIterator>::value_type,
+    2101              :            typename _Allocator = allocator<_ValT>,
+    2102              :            typename = _RequireInputIter<_InputIterator>,
+    2103              :            typename = _RequireAllocator<_Allocator>>
+    2104              :     list(_InputIterator, _InputIterator, _Allocator = _Allocator())
+    2105              :       -> list<_ValT, _Allocator>;
+    2106              : #endif
+    2107              : 
+    2108              : _GLIBCXX_END_NAMESPACE_CXX11
+    2109              : 
+    2110              :   /**
+    2111              :    *  @brief  List equality comparison.
+    2112              :    *  @param  __x  A %list.
+    2113              :    *  @param  __y  A %list of the same type as @a __x.
+    2114              :    *  @return  True iff the size and elements of the lists are equal.
+    2115              :    *
+    2116              :    *  This is an equivalence relation.  It is linear in the size of
+    2117              :    *  the lists.  Lists are considered equivalent if their sizes are
+    2118              :    *  equal, and if corresponding elements compare equal.
+    2119              :   */
+    2120              :   template<typename _Tp, typename _Alloc>
+    2121              :     _GLIBCXX_NODISCARD
+    2122              :     inline bool
+    2123              :     operator==(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
+    2124              :     {
+    2125              : #if _GLIBCXX_USE_CXX11_ABI
+    2126              :       if (__x.size() != __y.size())
+    2127              :         return false;
+    2128              : #endif
+    2129              : 
+    2130              :       typedef typename list<_Tp, _Alloc>::const_iterator const_iterator;
+    2131              :       const_iterator __end1 = __x.end();
+    2132              :       const_iterator __end2 = __y.end();
+    2133              : 
+    2134              :       const_iterator __i1 = __x.begin();
+    2135              :       const_iterator __i2 = __y.begin();
+    2136              :       while (__i1 != __end1 && __i2 != __end2 && *__i1 == *__i2)
+    2137              :         {
+    2138              :           ++__i1;
+    2139              :           ++__i2;
+    2140              :         }
+    2141              :       return __i1 == __end1 && __i2 == __end2;
+    2142              :     }
+    2143              : 
+    2144              : #if __cpp_lib_three_way_comparison
+    2145              : /**
+    2146              :    *  @brief  List ordering relation.
+    2147              :    *  @param  __x  A `list`.
+    2148              :    *  @param  __y  A `list` of the same type as `__x`.
+    2149              :    *  @return  A value indicating whether `__x` is less than, equal to,
+    2150              :    *           greater than, or incomparable with `__y`.
+    2151              :    *
+    2152              :    *  See `std::lexicographical_compare_three_way()` for how the determination
+    2153              :    *  is made. This operator is used to synthesize relational operators like
+    2154              :    *  `<` and `>=` etc.
+    2155              :   */
+    2156              :   template<typename _Tp, typename _Alloc>
+    2157              :     [[nodiscard]]
+    2158              :     inline __detail::__synth3way_t<_Tp>
+    2159              :     operator<=>(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
+    2160              :     {
+    2161              :       return std::lexicographical_compare_three_way(__x.begin(), __x.end(),
+    2162              :                                                     __y.begin(), __y.end(),
+    2163              :                                                     __detail::__synth3way);
+    2164              :     }
+    2165              : #else
+    2166              :   /**
+    2167              :    *  @brief  List ordering relation.
+    2168              :    *  @param  __x  A %list.
+    2169              :    *  @param  __y  A %list of the same type as @a __x.
+    2170              :    *  @return  True iff @a __x is lexicographically less than @a __y.
+    2171              :    *
+    2172              :    *  This is a total ordering relation.  It is linear in the size of the
+    2173              :    *  lists.  The elements must be comparable with @c <.
+    2174              :    *
+    2175              :    *  See std::lexicographical_compare() for how the determination is made.
+    2176              :   */
+    2177              :   template<typename _Tp, typename _Alloc>
+    2178              :     _GLIBCXX_NODISCARD
+    2179              :     inline bool
+    2180              :     operator<(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
+    2181              :     { return std::lexicographical_compare(__x.begin(), __x.end(),
+    2182              :                                           __y.begin(), __y.end()); }
+    2183              : 
+    2184              :   /// Based on operator==
+    2185              :   template<typename _Tp, typename _Alloc>
+    2186              :     _GLIBCXX_NODISCARD
+    2187              :     inline bool
+    2188              :     operator!=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
+    2189              :     { return !(__x == __y); }
+    2190              : 
+    2191              :   /// Based on operator<
+    2192              :   template<typename _Tp, typename _Alloc>
+    2193              :     _GLIBCXX_NODISCARD
+    2194              :     inline bool
+    2195              :     operator>(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
+    2196              :     { return __y < __x; }
+    2197              : 
+    2198              :   /// Based on operator<
+    2199              :   template<typename _Tp, typename _Alloc>
+    2200              :     _GLIBCXX_NODISCARD
+    2201              :     inline bool
+    2202              :     operator<=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
+    2203              :     { return !(__y < __x); }
+    2204              : 
+    2205              :   /// Based on operator<
+    2206              :   template<typename _Tp, typename _Alloc>
+    2207              :     _GLIBCXX_NODISCARD
+    2208              :     inline bool
+    2209              :     operator>=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
+    2210              :     { return !(__x < __y); }
+    2211              : #endif // three-way comparison
+    2212              : 
+    2213              :   /// See std::list::swap().
+    2214              :   template<typename _Tp, typename _Alloc>
+    2215              :     inline void
+    2216              :     swap(list<_Tp, _Alloc>& __x, list<_Tp, _Alloc>& __y)
+    2217              :     _GLIBCXX_NOEXCEPT_IF(noexcept(__x.swap(__y)))
+    2218              :     { __x.swap(__y); }
+    2219              : 
+    2220              : _GLIBCXX_END_NAMESPACE_CONTAINER
+    2221              : 
+    2222              : #if _GLIBCXX_USE_CXX11_ABI
+    2223              : 
+    2224              :   // Detect when distance is used to compute the size of the whole list.
+    2225              :   template<typename _Tp>
+    2226              :     inline ptrdiff_t
+    2227              :     __distance(_GLIBCXX_STD_C::_List_iterator<_Tp> __first,
+    2228              :                _GLIBCXX_STD_C::_List_iterator<_Tp> __last,
+    2229              :                input_iterator_tag __tag)
+    2230              :     {
+    2231              :       typedef _GLIBCXX_STD_C::_List_const_iterator<_Tp> _CIter;
+    2232              :       return std::__distance(_CIter(__first), _CIter(__last), __tag);
+    2233              :     }
+    2234              : 
+    2235              :   template<typename _Tp>
+    2236              :     inline ptrdiff_t
+    2237              :     __distance(_GLIBCXX_STD_C::_List_const_iterator<_Tp> __first,
+    2238              :                _GLIBCXX_STD_C::_List_const_iterator<_Tp> __last,
+    2239              :                input_iterator_tag)
+    2240              :     {
+    2241              :       typedef __detail::_List_node_header _Sentinel;
+    2242              :       _GLIBCXX_STD_C::_List_const_iterator<_Tp> __beyond = __last;
+    2243              :       ++__beyond;
+    2244              :       const bool __whole = __first == __beyond;
+    2245              :       if (__builtin_constant_p (__whole) && __whole)
+    2246              :         return static_cast<const _Sentinel*>(__last._M_node)->_M_size;
+    2247              : 
+    2248              :       ptrdiff_t __n = 0;
+    2249              :       while (__first != __last)
+    2250              :         {
+    2251              :           ++__first;
+    2252              :           ++__n;
+    2253              :         }
+    2254              :       return __n;
+    2255              :     }
+    2256              : #endif
+    2257              : 
+    2258              : _GLIBCXX_END_NAMESPACE_VERSION
+    2259              : } // namespace std
+    2260              : 
+    2261              : #endif /* _STL_LIST_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_map.h.func-c.html b/html/usr/include/c++/13/bits/stl_map.h.func-c.html new file mode 100644 index 0000000..7655ab2 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_map.h.func-c.html @@ -0,0 +1,1188 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_map.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_map.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:96.2 %7976
Test Date:2024-04-30 13:17:26Functions:90.6 %139126
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSteqINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SE_EEEbRKS9_IT_T0_T1_T2_ESR_0
_ZNKSt3mapIllSt4lessIlESaISt4pairIKllEEE5countERS3_4
_ZNKSt3mapIllSt4lessIlESaISt4pairIKllEEE5countERS3_0
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE5countERSF_4
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE6cbeginEv20
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4cendEv40
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE5emptyEv62
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE5eraseERSC_106
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE5eraseERSC_2
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE5eraseERSH_104
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE12emplace_hintIJS5_DnEEESt17_Rb_tree_iteratorISI_ESt23_Rb_tree_const_iteratorISI_EDpOT_110
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE12emplace_hintIJS5_DnEEESt17_Rb_tree_iteratorISI_ESt23_Rb_tree_const_iteratorISI_EDpOT_0
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE12emplace_hintIJS5_SD_EEESt17_Rb_tree_iteratorISI_ESt23_Rb_tree_const_iteratorISI_EDpOT_110
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE4sizeEv142
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE4sizeEv0
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE4sizeEv12
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4sizeEv130
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdSt4lessIS5_ESaISt4pairIKS5_dEEEC2ESt16initializer_listISA_ERKS7_RKSB_186
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_IdSaIdEESaIS8_EESt4lessIS5_ESaISt4pairIKS5_SA_EEEC2ESt16initializer_listISF_ERKSC_RKSG_8
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES8_IdSaIdEEESt4lessIS7_ESaIS0_IKS7_SD_EEEC2ESt16initializer_listISH_ERKSF_RKSI_8
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIiSt6vectorIiSaIiEEESt4lessIS5_ESaIS6_IKS5_SA_EEEC2ESt16initializer_listISE_ERKSC_RKSF_32
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfSt4lessIS7_ESaIS0_IKS7_fEEEC2ESt16initializer_listISB_ERKS9_RKSC_32
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaIS9_EESt4lessIS7_ESaIS0_IKS7_SB_EEEC2ESt16initializer_listISF_ERKSD_RKSG_32
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdSt4lessIS5_ESaISt4pairIKS5_dEEEC2ESt16initializer_listISA_ERKS7_RKSB_34
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierESt4lessIS5_ESaISt4pairIKS5_S8_EEEC2ESt16initializer_listISD_ERKSA_RKSE_40
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEEaSEOSF_224
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE7emplaceIJS5_DnEEESG_ISt17_Rb_tree_iteratorISI_EbEDpOT_226
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE7emplaceIJS5_SD_EEESG_ISt17_Rb_tree_iteratorISI_EbEDpOT_110
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE7emplaceIJS5_DnEEESG_ISt17_Rb_tree_iteratorISI_EbEDpOT_116
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4findIA2_cEEDTcldtdtdefpT4_M_t10_M_find_trfp_EERKT_374
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4findIA2_cEEDTcldtdtdefpT4_M_t10_M_find_trfp_EERKT_6
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4findIA16_cEEDTcldtdtdefpT4_M_t10_M_find_trfp_EERKT_36
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4findIA15_cEEDTcldtdtdefpT4_M_t10_M_find_trfp_EERKT_38
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4findIA12_cEEDTcldtdtdefpT4_M_t10_M_find_trfp_EERKT_42
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4findIA17_cEEDTcldtdtdefpT4_M_t10_M_find_trfp_EERKT_42
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4findIA6_cEEDTcldtdtdefpT4_M_t10_M_find_trfp_EERKT_50
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4findIA13_cEEDTcldtdtdefpT4_M_t10_M_find_trfp_EERKT_76
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4findIA10_cEEDTcldtdtdefpT4_M_t10_M_find_trfp_EERKT_84
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEEaSERKSF_644
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE5clearEv650
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE5clearEv16
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE5clearEv634
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE5beginEv1106
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE4findERSC_13522
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE11lower_boundERSC_14194
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE2atERSC_14194
_ZNSt3mapISt4pairIiiEdSt4lessIS1_ESaIS0_IKS1_dEEE2atERS4_21162
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdSt4lessIS5_ESaISt4pairIKS5_dEEE2atERS9_16
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaIS9_EESt4lessIS7_ESaIS0_IKS7_SB_EEE2atERSE_32
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIiSt6vectorIiSaIiEEESt4lessIS5_ESaIS6_IKS5_SA_EEE2atERSD_48
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES8_IdSaIdEEESt4lessIS7_ESaIS0_IKS7_SD_EEE2atERSG_48
_ZNSt3mapISt4pairIiiEdSt4lessIS1_ESaIS0_IKS1_dEEE2atERS4_1960
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE2atERSC_4160
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE2atERSF_14898
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE3endEv28822
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE3endEv1106
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE3endEv27716
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEE4findERS3_77490
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEE4findERS3_0
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE4findERSC_14216
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE4findERSF_63274
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEEC2Ev406558
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEEC2Ev0
_ZNSt3mapISt4pairIiiEdSt4lessIS1_ESaIS0_IKS1_dEEEC2Ev44
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEEC2Ev50
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpESt4lessIS5_ESaISt4pairIKS5_S8_EEEC2Ev212
_ZNSt3mapIiSt6vectorIiSaIiEESt4lessIiESaISt4pairIKiS2_EEEC2Ev250
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEEC2Ev1214
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEEC2Ev1822
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEEC2Ev402966
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEEC2ERKSC_1590308
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEEC2ERKSK_52
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEEC2ERKSF_108
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEEC2ERKSC_1590148
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEE5beginEv1591300
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE5beginEv0
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEE5beginEv0
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpESt4lessIS5_ESaISt4pairIKS5_S8_EEE5beginEv100
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE5beginEv118
_ZNSt3mapIiSt6vectorIiSaIiEESt4lessIiESaISt4pairIKiS2_EEE5beginEv250
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE5beginEv1590832
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEED2Ev1996380
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEED2Ev0
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_IdSaIdEESaIS8_EESt4lessIS5_ESaISt4pairIKS5_SA_EEED2Ev8
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES8_IdSaIdEEESt4lessIS7_ESaIS0_IKS7_SD_EEED2Ev8
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIiSt6vectorIiSaIiEEESt4lessIS5_ESaIS6_IKS5_SA_EEED2Ev32
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfSt4lessIS7_ESaIS0_IKS7_fEEED2Ev32
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaIS9_EESt4lessIS7_ESaIS0_IKS7_SB_EEED2Ev32
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdSt4lessIS5_ESaISt4pairIKS5_dEEED2Ev34
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierESt4lessIS5_ESaISt4pairIKS5_S8_EEED2Ev40
_ZNSt3mapISt4pairIiiEdSt4lessIS1_ESaIS0_IKS1_dEEED2Ev44
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpESt4lessIS5_ESaISt4pairIKS5_S8_EEED2Ev100
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEED2Ev102
_ZNSt3mapIiSt6vectorIiSaIiEESt4lessIiESaISt4pairIKiS2_EEED2Ev250
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEED2Ev1042
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEED2Ev1542
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEED2Ev1993114
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEEixERS3_41147762
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEEixERS3_0
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdSt4lessIS5_ESaISt4pairIKS5_dEEEixERS9_12
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierESt4lessIS5_ESaISt4pairIKS5_S8_EEEixERSC_104
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_IdSaIdEESaIS8_EESt4lessIS5_ESaISt4pairIKS5_SA_EEEixERSE_432
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEEixERSC_3252
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpESt4lessIS5_ESaISt4pairIKS5_S8_EEEixERSC_3446
_ZNSt3mapIiSt6vectorIiSaIiEESt4lessIiESaISt4pairIKiS2_EEEixERS6_99884
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEEixERSF_171348
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEEixERS9_40869284
_ZNSt3mapISt4pairIiiEdSt4lessIS1_ESaIS0_IKS1_dEEEixEOS1_60417328
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfSt4lessIS7_ESaIS0_IKS7_fEEEixEOS7_64
_ZNSt3mapISt4pairIiiEdSt4lessIS1_ESaIS0_IKS1_dEEEixEOS1_584
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEEixEOS5_60416680
_ZNKSt3mapIllSt4lessIlESaISt4pairIKllEEE8key_compEv99954126
_ZNKSt3mapIllSt4lessIlESaISt4pairIKllEEE8key_compEv0
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdSt4lessIS5_ESaISt4pairIKS5_dEEE8key_compEv28
_ZNKSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaIS9_EESt4lessIS7_ESaIS0_IKS7_SB_EEE8key_compEv32
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIiSt6vectorIiSaIiEEESt4lessIS5_ESaIS6_IKS5_SA_EEE8key_compEv48
_ZNKSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES8_IdSaIdEEESt4lessIS7_ESaIS0_IKS7_SD_EEE8key_compEv48
_ZNKSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfSt4lessIS7_ESaIS0_IKS7_fEEE8key_compEv64
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierESt4lessIS5_ESaISt4pairIKS5_S8_EEE8key_compEv104
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE8key_compEv150
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_IdSaIdEESaIS8_EESt4lessIS5_ESaISt4pairIKS5_SA_EEE8key_compEv432
_ZNKSt3mapISt4pairIiiEdSt4lessIS1_ESaIS0_IKS1_dEEE8key_compEv2192
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpESt4lessIS5_ESaISt4pairIKS5_S8_EEE8key_compEv3240
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE8key_compEv20918
_ZNKSt3mapIiSt6vectorIiSaIiEESt4lessIiESaISt4pairIKiS2_EEE8key_compEv98870
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE8key_compEv184176
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE8key_compEv99643824
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEE11lower_boundERS3_101586478
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEE11lower_boundERS3_0
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdSt4lessIS5_ESaISt4pairIKS5_dEEE11lower_boundERS9_28
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaIS9_EESt4lessIS7_ESaIS0_IKS7_SB_EEE11lower_boundERSE_32
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIiSt6vectorIiSaIiEEESt4lessIS5_ESaIS6_IKS5_SA_EEE11lower_boundERSD_48
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES8_IdSaIdEEESt4lessIS7_ESaIS0_IKS7_SD_EEE11lower_boundERSG_48
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfSt4lessIS7_ESaIS0_IKS7_fEEE11lower_boundERSA_64
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierESt4lessIS5_ESaISt4pairIKS5_S8_EEE11lower_boundERSC_104
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE11lower_boundERSH_226
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_IdSaIdEESaIS8_EESt4lessIS5_ESaISt4pairIKS5_SA_EEE11lower_boundERSE_432
_ZNSt3mapISt4pairIiiEdSt4lessIS1_ESaIS0_IKS1_dEEE11lower_boundERS4_2544
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpESt4lessIS5_ESaISt4pairIKS5_S8_EEE11lower_boundERSC_3446
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE11lower_boundERSC_7412
_ZNSt3mapIiSt6vectorIiSaIiEESt4lessIiESaISt4pairIKiS2_EEE11lower_boundERS6_99884
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE11lower_boundERSF_186246
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE11lower_boundERS9_101285964
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEE3endEv103589550
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEE3endEv0
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdSt4lessIS5_ESaISt4pairIKS5_dEEE3endEv28
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaIS9_EESt4lessIS7_ESaIS0_IKS7_SB_EEE3endEv32
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIiSt6vectorIiSaIiEEESt4lessIS5_ESaIS6_IKS5_SA_EEE3endEv48
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES8_IdSaIdEEESt4lessIS7_ESaIS0_IKS7_SD_EEE3endEv48
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfSt4lessIS7_ESaIS0_IKS7_fEEE3endEv64
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierESt4lessIS5_ESaISt4pairIKS5_S8_EEE3endEv104
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_IdSaIdEESaIS8_EESt4lessIS5_ESaISt4pairIKS5_SA_EEE3endEv432
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE3endEv718
_ZNSt3mapISt4pairIiiEdSt4lessIS1_ESaIS0_IKS1_dEEE3endEv2544
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpESt4lessIS5_ESaISt4pairIKS5_S8_EEE3endEv3546
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE3endEv21628
_ZNSt3mapIiSt6vectorIiSaIiEESt4lessIiESaISt4pairIKiS2_EEE3endEv100134
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE3endEv1840352
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE3endEv101619872
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_map.h.func.html b/html/usr/include/c++/13/bits/stl_map.h.func.html new file mode 100644 index 0000000..ec40835 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_map.h.func.html @@ -0,0 +1,1188 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_map.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_map.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:96.2 %7976
Test Date:2024-04-30 13:17:26Functions:90.6 %139126
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4cendEv40
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE5emptyEv62
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE6cbeginEv20
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE5beginEv1106
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE11lower_boundERSC_14194
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE2atERSC_14194
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE3endEv28822
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE3endEv1106
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE3endEv27716
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE4findERSC_13522
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE4sizeEv142
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4sizeEv130
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE4sizeEv12
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE4sizeEv0
_ZNKSt3mapIllSt4lessIlESaISt4pairIKllEEE5countERS3_4
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE5countERSF_4
_ZNKSt3mapIllSt4lessIlESaISt4pairIKllEEE5countERS3_0
_ZNKSt3mapIllSt4lessIlESaISt4pairIKllEEE8key_compEv99954126
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE8key_compEv150
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpESt4lessIS5_ESaISt4pairIKS5_S8_EEE8key_compEv3240
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierESt4lessIS5_ESaISt4pairIKS5_S8_EEE8key_compEv104
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE8key_compEv184176
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIiSt6vectorIiSaIiEEESt4lessIS5_ESaIS6_IKS5_SA_EEE8key_compEv48
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_IdSaIdEESaIS8_EESt4lessIS5_ESaISt4pairIKS5_SA_EEE8key_compEv432
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE8key_compEv20918
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdSt4lessIS5_ESaISt4pairIKS5_dEEE8key_compEv28
_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE8key_compEv99643824
_ZNKSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES8_IdSaIdEEESt4lessIS7_ESaIS0_IKS7_SD_EEE8key_compEv48
_ZNKSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfSt4lessIS7_ESaIS0_IKS7_fEEE8key_compEv64
_ZNKSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaIS9_EESt4lessIS7_ESaIS0_IKS7_SB_EEE8key_compEv32
_ZNKSt3mapISt4pairIiiEdSt4lessIS1_ESaIS0_IKS1_dEEE8key_compEv2192
_ZNKSt3mapIiSt6vectorIiSaIiEESt4lessIiESaISt4pairIKiS2_EEE8key_compEv98870
_ZNKSt3mapIllSt4lessIlESaISt4pairIKllEEE8key_compEv0
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE12emplace_hintIJS5_DnEEESt17_Rb_tree_iteratorISI_ESt23_Rb_tree_const_iteratorISI_EDpOT_110
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE12emplace_hintIJS5_DnEEESt17_Rb_tree_iteratorISI_ESt23_Rb_tree_const_iteratorISI_EDpOT_0
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE12emplace_hintIJS5_SD_EEESt17_Rb_tree_iteratorISI_ESt23_Rb_tree_const_iteratorISI_EDpOT_110
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4findIA2_cEEDTcldtdtdefpT4_M_t10_M_find_trfp_EERKT_374
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4findIA10_cEEDTcldtdtdefpT4_M_t10_M_find_trfp_EERKT_84
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4findIA12_cEEDTcldtdtdefpT4_M_t10_M_find_trfp_EERKT_42
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4findIA13_cEEDTcldtdtdefpT4_M_t10_M_find_trfp_EERKT_76
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4findIA15_cEEDTcldtdtdefpT4_M_t10_M_find_trfp_EERKT_38
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4findIA16_cEEDTcldtdtdefpT4_M_t10_M_find_trfp_EERKT_36
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4findIA17_cEEDTcldtdtdefpT4_M_t10_M_find_trfp_EERKT_42
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4findIA2_cEEDTcldtdtdefpT4_M_t10_M_find_trfp_EERKT_6
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE4findIA6_cEEDTcldtdtdefpT4_M_t10_M_find_trfp_EERKT_50
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE7emplaceIJS5_DnEEESG_ISt17_Rb_tree_iteratorISI_EbEDpOT_226
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE7emplaceIJS5_DnEEESG_ISt17_Rb_tree_iteratorISI_EbEDpOT_116
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE7emplaceIJS5_SD_EEESG_ISt17_Rb_tree_iteratorISI_EbEDpOT_110
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE5clearEv650
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE5clearEv16
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE5clearEv634
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE5eraseERSC_106
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE5eraseERSH_104
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE5eraseERSC_2
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEEaSEOSF_224
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEEaSERKSF_644
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdSt4lessIS5_ESaISt4pairIKS5_dEEEC2ESt16initializer_listISA_ERKS7_RKSB_186
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierESt4lessIS5_ESaISt4pairIKS5_S8_EEEC2ESt16initializer_listISD_ERKSA_RKSE_40
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIiSt6vectorIiSaIiEEESt4lessIS5_ESaIS6_IKS5_SA_EEEC2ESt16initializer_listISE_ERKSC_RKSF_32
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_IdSaIdEESaIS8_EESt4lessIS5_ESaISt4pairIKS5_SA_EEEC2ESt16initializer_listISF_ERKSC_RKSG_8
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdSt4lessIS5_ESaISt4pairIKS5_dEEEC2ESt16initializer_listISA_ERKS7_RKSB_34
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES8_IdSaIdEEESt4lessIS7_ESaIS0_IKS7_SD_EEEC2ESt16initializer_listISH_ERKSF_RKSI_8
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfSt4lessIS7_ESaIS0_IKS7_fEEEC2ESt16initializer_listISB_ERKS9_RKSC_32
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaIS9_EESt4lessIS7_ESaIS0_IKS7_SB_EEEC2ESt16initializer_listISF_ERKSD_RKSG_32
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEEC2ERKSC_1590308
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEEC2ERKSK_52
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEEC2ERKSF_108
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEEC2ERKSC_1590148
_ZNSt3mapISt4pairIiiEdSt4lessIS1_ESaIS0_IKS1_dEEE2atERS4_21162
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE2atERSF_14898
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIiSt6vectorIiSaIiEEESt4lessIS5_ESaIS6_IKS5_SA_EEE2atERSD_48
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE2atERSC_4160
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdSt4lessIS5_ESaISt4pairIKS5_dEEE2atERS9_16
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES8_IdSaIdEEESt4lessIS7_ESaIS0_IKS7_SD_EEE2atERSG_48
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaIS9_EESt4lessIS7_ESaIS0_IKS7_SB_EEE2atERSE_32
_ZNSt3mapISt4pairIiiEdSt4lessIS1_ESaIS0_IKS1_dEEE2atERS4_1960
_ZNSt3mapISt4pairIiiEdSt4lessIS1_ESaIS0_IKS1_dEEEixEOS1_60417328
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEEixEOS5_60416680
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfSt4lessIS7_ESaIS0_IKS7_fEEEixEOS7_64
_ZNSt3mapISt4pairIiiEdSt4lessIS1_ESaIS0_IKS1_dEEEixEOS1_584
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEE11lower_boundERS3_101586478
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE11lower_boundERSH_226
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpESt4lessIS5_ESaISt4pairIKS5_S8_EEE11lower_boundERSC_3446
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierESt4lessIS5_ESaISt4pairIKS5_S8_EEE11lower_boundERSC_104
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE11lower_boundERSF_186246
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIiSt6vectorIiSaIiEEESt4lessIS5_ESaIS6_IKS5_SA_EEE11lower_boundERSD_48
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_IdSaIdEESaIS8_EESt4lessIS5_ESaISt4pairIKS5_SA_EEE11lower_boundERSE_432
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE11lower_boundERSC_7412
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdSt4lessIS5_ESaISt4pairIKS5_dEEE11lower_boundERS9_28
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE11lower_boundERS9_101285964
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES8_IdSaIdEEESt4lessIS7_ESaIS0_IKS7_SD_EEE11lower_boundERSG_48
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfSt4lessIS7_ESaIS0_IKS7_fEEE11lower_boundERSA_64
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaIS9_EESt4lessIS7_ESaIS0_IKS7_SB_EEE11lower_boundERSE_32
_ZNSt3mapISt4pairIiiEdSt4lessIS1_ESaIS0_IKS1_dEEE11lower_boundERS4_2544
_ZNSt3mapIiSt6vectorIiSaIiEESt4lessIiESaISt4pairIKiS2_EEE11lower_boundERS6_99884
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEE11lower_boundERS3_0
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEE3endEv103589550
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE3endEv718
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpESt4lessIS5_ESaISt4pairIKS5_S8_EEE3endEv3546
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierESt4lessIS5_ESaISt4pairIKS5_S8_EEE3endEv104
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE3endEv1840352
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIiSt6vectorIiSaIiEEESt4lessIS5_ESaIS6_IKS5_SA_EEE3endEv48
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_IdSaIdEESaIS8_EESt4lessIS5_ESaISt4pairIKS5_SA_EEE3endEv432
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE3endEv21628
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdSt4lessIS5_ESaISt4pairIKS5_dEEE3endEv28
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEE3endEv101619872
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES8_IdSaIdEEESt4lessIS7_ESaIS0_IKS7_SD_EEE3endEv48
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfSt4lessIS7_ESaIS0_IKS7_fEEE3endEv64
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaIS9_EESt4lessIS7_ESaIS0_IKS7_SB_EEE3endEv32
_ZNSt3mapISt4pairIiiEdSt4lessIS1_ESaIS0_IKS1_dEEE3endEv2544
_ZNSt3mapIiSt6vectorIiSaIiEESt4lessIiESaISt4pairIKiS2_EEE3endEv100134
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEE3endEv0
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEE4findERS3_77490
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE4findERSF_63274
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE4findERSC_14216
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEE4findERS3_0
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEE5beginEv1591300
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEE5beginEv118
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpESt4lessIS5_ESaISt4pairIKS5_S8_EEE5beginEv100
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEE5beginEv1590832
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEE5beginEv0
_ZNSt3mapIiSt6vectorIiSaIiEESt4lessIiESaISt4pairIKiS2_EEE5beginEv250
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEE5beginEv0
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEEC2Ev406558
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEEC2Ev50
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpESt4lessIS5_ESaISt4pairIKS5_S8_EEEC2Ev212
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEEC2Ev1822
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEEC2Ev1214
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEEC2Ev402966
_ZNSt3mapISt4pairIiiEdSt4lessIS1_ESaIS0_IKS1_dEEEC2Ev44
_ZNSt3mapIiSt6vectorIiSaIiEESt4lessIiESaISt4pairIKiS2_EEEC2Ev250
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEEC2Ev0
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEED2Ev1996380
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS_St6vectorS5_blmdSaNS7_14adl_serializerES9_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SD_EEED2Ev102
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpESt4lessIS5_ESaISt4pairIKS5_S8_EEED2Ev100
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierESt4lessIS5_ESaISt4pairIKS5_S8_EEED2Ev40
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEED2Ev1542
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIiSt6vectorIiSaIiEEESt4lessIS5_ESaIS6_IKS5_SA_EEED2Ev32
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_IdSaIdEESaIS8_EESt4lessIS5_ESaISt4pairIKS5_SA_EEED2Ev8
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEED2Ev1042
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdSt4lessIS5_ESaISt4pairIKS5_dEEED2Ev34
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEED2Ev1993114
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES8_IdSaIdEEESt4lessIS7_ESaIS0_IKS7_SD_EEED2Ev8
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfSt4lessIS7_ESaIS0_IKS7_fEEED2Ev32
_ZNSt3mapISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaIS9_EESt4lessIS7_ESaIS0_IKS7_SB_EEED2Ev32
_ZNSt3mapISt4pairIiiEdSt4lessIS1_ESaIS0_IKS1_dEEED2Ev44
_ZNSt3mapIiSt6vectorIiSaIiEESt4lessIiESaISt4pairIKiS2_EEED2Ev250
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEED2Ev0
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEEixERS3_41147762
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpESt4lessIS5_ESaISt4pairIKS5_S8_EEEixERSC_3446
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierESt4lessIS5_ESaISt4pairIKS5_S8_EEEixERSC_104
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS8_EESt4lessIS5_ESaISt4pairIKS5_SB_EEEixERSF_171348
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS6_IdSaIdEESaIS8_EESt4lessIS5_ESaISt4pairIKS5_SA_EEEixERSE_432
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS5_ESaISt4pairIKS5_S8_EEEixERSC_3252
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdSt4lessIS5_ESaISt4pairIKS5_dEEEixERS9_12
_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS5_ESaISt4pairIKS5_iEEEixERS9_40869284
_ZNSt3mapIiSt6vectorIiSaIiEESt4lessIiESaISt4pairIKiS2_EEEixERS6_99884
_ZNSt3mapIllSt4lessIlESaISt4pairIKllEEEixERS3_0
_ZSteqINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS5_SE_EEEbRKS9_IT_T0_T1_T2_ESR_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_map.h.gcov.html b/html/usr/include/c++/13/bits/stl_map.h.gcov.html new file mode 100644 index 0000000..164a98a --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_map.h.gcov.html @@ -0,0 +1,1694 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_map.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_map.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:96.2 %7976
Test Date:2024-04-30 13:17:26Functions:90.6 %139126
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Map implementation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1996,1997
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/stl_map.h
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{map}
+      54              :  */
+      55              : 
+      56              : #ifndef _STL_MAP_H
+      57              : #define _STL_MAP_H 1
+      58              : 
+      59              : #include <bits/functexcept.h>
+      60              : #include <bits/concept_check.h>
+      61              : #if __cplusplus >= 201103L
+      62              : #include <initializer_list>
+      63              : #include <tuple>
+      64              : #endif
+      65              : 
+      66              : namespace std _GLIBCXX_VISIBILITY(default)
+      67              : {
+      68              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      69              : _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
+      70              : 
+      71              :   template <typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+      72              :     class multimap;
+      73              : 
+      74              :   /**
+      75              :    *  @brief A standard container made up of (key,value) pairs, which can be
+      76              :    *  retrieved based on a key, in logarithmic time.
+      77              :    *
+      78              :    *  @ingroup associative_containers
+      79              :    *  @headerfile map
+      80              :    *  @since C++98
+      81              :    *
+      82              :    *  @tparam _Key  Type of key objects.
+      83              :    *  @tparam  _Tp  Type of mapped objects.
+      84              :    *  @tparam _Compare  Comparison function object type, defaults to less<_Key>.
+      85              :    *  @tparam _Alloc  Allocator type, defaults to
+      86              :    *                  allocator<pair<const _Key, _Tp>.
+      87              :    *
+      88              :    *  Meets the requirements of a <a href="tables.html#65">container</a>, a
+      89              :    *  <a href="tables.html#66">reversible container</a>, and an
+      90              :    *  <a href="tables.html#69">associative container</a> (using unique keys).
+      91              :    *  For a @c map<Key,T> the key_type is Key, the mapped_type is T, and the
+      92              :    *  value_type is std::pair<const Key,T>.
+      93              :    *
+      94              :    *  Maps support bidirectional iterators.
+      95              :    *
+      96              :    *  The private tree data is declared exactly the same way for map and
+      97              :    *  multimap; the distinction is made entirely in how the tree functions are
+      98              :    *  called (*_unique versus *_equal, same as the standard).
+      99              :   */
+     100              :   template <typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
+     101              :             typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
+     102              :     class map
+     103              :     {
+     104              :     public:
+     105              :       typedef _Key                                      key_type;
+     106              :       typedef _Tp                                       mapped_type;
+     107              :       typedef std::pair<const _Key, _Tp>          value_type;
+     108              :       typedef _Compare                                  key_compare;
+     109              :       typedef _Alloc                                    allocator_type;
+     110              : 
+     111              :     private:
+     112              : #ifdef _GLIBCXX_CONCEPT_CHECKS
+     113              :       // concept requirements
+     114              :       typedef typename _Alloc::value_type               _Alloc_value_type;
+     115              : # if __cplusplus < 201103L
+     116              :       __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
+     117              : # endif
+     118              :       __glibcxx_class_requires4(_Compare, bool, _Key, _Key,
+     119              :                                 _BinaryFunctionConcept)
+     120              :       __glibcxx_class_requires2(value_type, _Alloc_value_type, _SameTypeConcept)
+     121              : #endif
+     122              : 
+     123              : #if __cplusplus >= 201103L
+     124              : #if __cplusplus > 201703L || defined __STRICT_ANSI__
+     125              :       static_assert(is_same<typename _Alloc::value_type, value_type>::value,
+     126              :           "std::map must have the same value_type as its allocator");
+     127              : #endif
+     128              : #endif
+     129              : 
+     130              :     public:
+     131              : #pragma GCC diagnostic push
+     132              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+     133              :       class value_compare
+     134              :       : public std::binary_function<value_type, value_type, bool>
+     135              :       {
+     136              :         friend class map<_Key, _Tp, _Compare, _Alloc>;
+     137              :       protected:
+     138              :         _Compare comp;
+     139              : 
+     140              :         value_compare(_Compare __c)
+     141              :         : comp(__c) { }
+     142              : 
+     143              :       public:
+     144              :         bool operator()(const value_type& __x, const value_type& __y) const
+     145              :         { return comp(__x.first, __y.first); }
+     146              :       };
+     147              : #pragma GCC diagnostic pop
+     148              : 
+     149              :     private:
+     150              :       /// This turns a red-black tree into a [multi]map.
+     151              :       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+     152              :         rebind<value_type>::other _Pair_alloc_type;
+     153              : 
+     154              :       typedef _Rb_tree<key_type, value_type, _Select1st<value_type>,
+     155              :                        key_compare, _Pair_alloc_type> _Rep_type;
+     156              : 
+     157              :       /// The actual tree structure.
+     158              :       _Rep_type _M_t;
+     159              : 
+     160              :       typedef __gnu_cxx::__alloc_traits<_Pair_alloc_type> _Alloc_traits;
+     161              : 
+     162              : #if __cplusplus >= 201703L
+     163              :       template<typename _Up, typename _Vp = remove_reference_t<_Up>>
+     164              :         static constexpr bool __usable_key
+     165              :           = __or_v<is_same<const _Vp, const _Key>,
+     166              :                    __and_<is_scalar<_Vp>, is_scalar<_Key>>>;
+     167              : #endif
+     168              : 
+     169              :     public:
+     170              :       // many of these are specified differently in ISO, but the following are
+     171              :       // "functionally equivalent"
+     172              :       typedef typename _Alloc_traits::pointer            pointer;
+     173              :       typedef typename _Alloc_traits::const_pointer      const_pointer;
+     174              :       typedef typename _Alloc_traits::reference          reference;
+     175              :       typedef typename _Alloc_traits::const_reference    const_reference;
+     176              :       typedef typename _Rep_type::iterator               iterator;
+     177              :       typedef typename _Rep_type::const_iterator         const_iterator;
+     178              :       typedef typename _Rep_type::size_type              size_type;
+     179              :       typedef typename _Rep_type::difference_type        difference_type;
+     180              :       typedef typename _Rep_type::reverse_iterator       reverse_iterator;
+     181              :       typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
+     182              : 
+     183              : #if __cplusplus > 201402L
+     184              :       using node_type = typename _Rep_type::node_type;
+     185              :       using insert_return_type = typename _Rep_type::insert_return_type;
+     186              : #endif
+     187              : 
+     188              :       // [23.3.1.1] construct/copy/destroy
+     189              :       // (get_allocator() is also listed in this section)
+     190              : 
+     191              :       /**
+     192              :        *  @brief  Default constructor creates no elements.
+     193              :        */
+     194              : #if __cplusplus < 201103L
+     195              :       map() : _M_t() { }
+     196              : #else
+     197       406558 :       map() = default;
+     198              : #endif
+     199              : 
+     200              :       /**
+     201              :        *  @brief  Creates a %map with no elements.
+     202              :        *  @param  __comp  A comparison object.
+     203              :        *  @param  __a  An allocator object.
+     204              :        */
+     205              :       explicit
+     206              :       map(const _Compare& __comp,
+     207              :           const allocator_type& __a = allocator_type())
+     208              :       : _M_t(__comp, _Pair_alloc_type(__a)) { }
+     209              : 
+     210              :       /**
+     211              :        *  @brief  %Map copy constructor.
+     212              :        *
+     213              :        *  Whether the allocator is copied depends on the allocator traits.
+     214              :        */
+     215              : #if __cplusplus < 201103L
+     216              :       map(const map& __x)
+     217              :       : _M_t(__x._M_t) { }
+     218              : #else
+     219      1590308 :       map(const map&) = default;
+     220              : 
+     221              :       /**
+     222              :        *  @brief  %Map move constructor.
+     223              :        *
+     224              :        *  The newly-created %map contains the exact contents of the moved
+     225              :        *  instance. The moved instance is a valid, but unspecified, %map.
+     226              :        */
+     227              :       map(map&&) = default;
+     228              : 
+     229              :       /**
+     230              :        *  @brief  Builds a %map from an initializer_list.
+     231              :        *  @param  __l  An initializer_list.
+     232              :        *  @param  __comp  A comparison object.
+     233              :        *  @param  __a  An allocator object.
+     234              :        *
+     235              :        *  Create a %map consisting of copies of the elements in the
+     236              :        *  initializer_list @a __l.
+     237              :        *  This is linear in N if the range is already sorted, and NlogN
+     238              :        *  otherwise (where N is @a __l.size()).
+     239              :        */
+     240          186 :       map(initializer_list<value_type> __l,
+     241              :           const _Compare& __comp = _Compare(),
+     242              :           const allocator_type& __a = allocator_type())
+     243          372 :       : _M_t(__comp, _Pair_alloc_type(__a))
+     244          186 :       { _M_t._M_insert_range_unique(__l.begin(), __l.end()); }
+     245              : 
+     246              :       /// Allocator-extended default constructor.
+     247              :       explicit
+     248              :       map(const allocator_type& __a)
+     249              :       : _M_t(_Pair_alloc_type(__a)) { }
+     250              : 
+     251              :       /// Allocator-extended copy constructor.
+     252              :       map(const map& __m, const __type_identity_t<allocator_type>& __a)
+     253              :       : _M_t(__m._M_t, _Pair_alloc_type(__a)) { }
+     254              : 
+     255              :       /// Allocator-extended move constructor.
+     256              :       map(map&& __m, const __type_identity_t<allocator_type>& __a)
+     257              :       noexcept(is_nothrow_copy_constructible<_Compare>::value
+     258              :                && _Alloc_traits::_S_always_equal())
+     259              :       : _M_t(std::move(__m._M_t), _Pair_alloc_type(__a)) { }
+     260              : 
+     261              :       /// Allocator-extended initialier-list constructor.
+     262              :       map(initializer_list<value_type> __l, const allocator_type& __a)
+     263              :       : _M_t(_Pair_alloc_type(__a))
+     264              :       { _M_t._M_insert_range_unique(__l.begin(), __l.end()); }
+     265              : 
+     266              :       /// Allocator-extended range constructor.
+     267              :       template<typename _InputIterator>
+     268              :         map(_InputIterator __first, _InputIterator __last,
+     269              :             const allocator_type& __a)
+     270              :         : _M_t(_Pair_alloc_type(__a))
+     271              :         { _M_t._M_insert_range_unique(__first, __last); }
+     272              : #endif
+     273              : 
+     274              :       /**
+     275              :        *  @brief  Builds a %map from a range.
+     276              :        *  @param  __first  An input iterator.
+     277              :        *  @param  __last  An input iterator.
+     278              :        *
+     279              :        *  Create a %map consisting of copies of the elements from
+     280              :        *  [__first,__last).  This is linear in N if the range is
+     281              :        *  already sorted, and NlogN otherwise (where N is
+     282              :        *  distance(__first,__last)).
+     283              :        */
+     284              :       template<typename _InputIterator>
+     285              :         map(_InputIterator __first, _InputIterator __last)
+     286              :         : _M_t()
+     287              :         { _M_t._M_insert_range_unique(__first, __last); }
+     288              : 
+     289              :       /**
+     290              :        *  @brief  Builds a %map from a range.
+     291              :        *  @param  __first  An input iterator.
+     292              :        *  @param  __last  An input iterator.
+     293              :        *  @param  __comp  A comparison functor.
+     294              :        *  @param  __a  An allocator object.
+     295              :        *
+     296              :        *  Create a %map consisting of copies of the elements from
+     297              :        *  [__first,__last).  This is linear in N if the range is
+     298              :        *  already sorted, and NlogN otherwise (where N is
+     299              :        *  distance(__first,__last)).
+     300              :        */
+     301              :       template<typename _InputIterator>
+     302              :         map(_InputIterator __first, _InputIterator __last,
+     303              :             const _Compare& __comp,
+     304              :             const allocator_type& __a = allocator_type())
+     305              :         : _M_t(__comp, _Pair_alloc_type(__a))
+     306              :         { _M_t._M_insert_range_unique(__first, __last); }
+     307              : 
+     308              : #if __cplusplus >= 201103L
+     309              :       /**
+     310              :        *  The dtor only erases the elements, and note that if the elements
+     311              :        *  themselves are pointers, the pointed-to memory is not touched in any
+     312              :        *  way.  Managing the pointer is the user's responsibility.
+     313              :        */
+     314      1996380 :       ~map() = default;
+     315              : #endif
+     316              : 
+     317              :       /**
+     318              :        *  @brief  %Map assignment operator.
+     319              :        *
+     320              :        *  Whether the allocator is copied depends on the allocator traits.
+     321              :        */
+     322              : #if __cplusplus < 201103L
+     323              :       map&
+     324              :       operator=(const map& __x)
+     325              :       {
+     326              :         _M_t = __x._M_t;
+     327              :         return *this;
+     328              :       }
+     329              : #else
+     330              :       map&
+     331          644 :       operator=(const map&) = default;
+     332              : 
+     333              :       /// Move assignment operator.
+     334              :       map&
+     335          224 :       operator=(map&&) = default;
+     336              : 
+     337              :       /**
+     338              :        *  @brief  %Map list assignment operator.
+     339              :        *  @param  __l  An initializer_list.
+     340              :        *
+     341              :        *  This function fills a %map with copies of the elements in the
+     342              :        *  initializer list @a __l.
+     343              :        *
+     344              :        *  Note that the assignment completely changes the %map and
+     345              :        *  that the resulting %map's size is the same as the number
+     346              :        *  of elements assigned.
+     347              :        */
+     348              :       map&
+     349              :       operator=(initializer_list<value_type> __l)
+     350              :       {
+     351              :         _M_t._M_assign_unique(__l.begin(), __l.end());
+     352              :         return *this;
+     353              :       }
+     354              : #endif
+     355              : 
+     356              :       /// Get a copy of the memory allocation object.
+     357              :       allocator_type
+     358              :       get_allocator() const _GLIBCXX_NOEXCEPT
+     359              :       { return allocator_type(_M_t.get_allocator()); }
+     360              : 
+     361              :       // iterators
+     362              :       /**
+     363              :        *  Returns a read/write iterator that points to the first pair in the
+     364              :        *  %map.
+     365              :        *  Iteration is done in ascending order according to the keys.
+     366              :        */
+     367              :       iterator
+     368      1591300 :       begin() _GLIBCXX_NOEXCEPT
+     369      1591300 :       { return _M_t.begin(); }
+     370              : 
+     371              :       /**
+     372              :        *  Returns a read-only (constant) iterator that points to the first pair
+     373              :        *  in the %map.  Iteration is done in ascending order according to the
+     374              :        *  keys.
+     375              :        */
+     376              :       const_iterator
+     377         1106 :       begin() const _GLIBCXX_NOEXCEPT
+     378         1106 :       { return _M_t.begin(); }
+     379              : 
+     380              :       /**
+     381              :        *  Returns a read/write iterator that points one past the last
+     382              :        *  pair in the %map.  Iteration is done in ascending order
+     383              :        *  according to the keys.
+     384              :        */
+     385              :       iterator
+     386    103589550 :       end() _GLIBCXX_NOEXCEPT
+     387    103589550 :       { return _M_t.end(); }
+     388              : 
+     389              :       /**
+     390              :        *  Returns a read-only (constant) iterator that points one past the last
+     391              :        *  pair in the %map.  Iteration is done in ascending order according to
+     392              :        *  the keys.
+     393              :        */
+     394              :       const_iterator
+     395        28822 :       end() const _GLIBCXX_NOEXCEPT
+     396        28822 :       { return _M_t.end(); }
+     397              : 
+     398              :       /**
+     399              :        *  Returns a read/write reverse iterator that points to the last pair in
+     400              :        *  the %map.  Iteration is done in descending order according to the
+     401              :        *  keys.
+     402              :        */
+     403              :       reverse_iterator
+     404              :       rbegin() _GLIBCXX_NOEXCEPT
+     405              :       { return _M_t.rbegin(); }
+     406              : 
+     407              :       /**
+     408              :        *  Returns a read-only (constant) reverse iterator that points to the
+     409              :        *  last pair in the %map.  Iteration is done in descending order
+     410              :        *  according to the keys.
+     411              :        */
+     412              :       const_reverse_iterator
+     413              :       rbegin() const _GLIBCXX_NOEXCEPT
+     414              :       { return _M_t.rbegin(); }
+     415              : 
+     416              :       /**
+     417              :        *  Returns a read/write reverse iterator that points to one before the
+     418              :        *  first pair in the %map.  Iteration is done in descending order
+     419              :        *  according to the keys.
+     420              :        */
+     421              :       reverse_iterator
+     422              :       rend() _GLIBCXX_NOEXCEPT
+     423              :       { return _M_t.rend(); }
+     424              : 
+     425              :       /**
+     426              :        *  Returns a read-only (constant) reverse iterator that points to one
+     427              :        *  before the first pair in the %map.  Iteration is done in descending
+     428              :        *  order according to the keys.
+     429              :        */
+     430              :       const_reverse_iterator
+     431              :       rend() const _GLIBCXX_NOEXCEPT
+     432              :       { return _M_t.rend(); }
+     433              : 
+     434              : #if __cplusplus >= 201103L
+     435              :       /**
+     436              :        *  Returns a read-only (constant) iterator that points to the first pair
+     437              :        *  in the %map.  Iteration is done in ascending order according to the
+     438              :        *  keys.
+     439              :        */
+     440              :       const_iterator
+     441           20 :       cbegin() const noexcept
+     442           20 :       { return _M_t.begin(); }
+     443              : 
+     444              :       /**
+     445              :        *  Returns a read-only (constant) iterator that points one past the last
+     446              :        *  pair in the %map.  Iteration is done in ascending order according to
+     447              :        *  the keys.
+     448              :        */
+     449              :       const_iterator
+     450           40 :       cend() const noexcept
+     451           40 :       { return _M_t.end(); }
+     452              : 
+     453              :       /**
+     454              :        *  Returns a read-only (constant) reverse iterator that points to the
+     455              :        *  last pair in the %map.  Iteration is done in descending order
+     456              :        *  according to the keys.
+     457              :        */
+     458              :       const_reverse_iterator
+     459              :       crbegin() const noexcept
+     460              :       { return _M_t.rbegin(); }
+     461              : 
+     462              :       /**
+     463              :        *  Returns a read-only (constant) reverse iterator that points to one
+     464              :        *  before the first pair in the %map.  Iteration is done in descending
+     465              :        *  order according to the keys.
+     466              :        */
+     467              :       const_reverse_iterator
+     468              :       crend() const noexcept
+     469              :       { return _M_t.rend(); }
+     470              : #endif
+     471              : 
+     472              :       // capacity
+     473              :       /** Returns true if the %map is empty.  (Thus begin() would equal
+     474              :        *  end().)
+     475              :       */
+     476              :       _GLIBCXX_NODISCARD bool
+     477           62 :       empty() const _GLIBCXX_NOEXCEPT
+     478           62 :       { return _M_t.empty(); }
+     479              : 
+     480              :       /** Returns the size of the %map.  */
+     481              :       size_type
+     482          142 :       size() const _GLIBCXX_NOEXCEPT
+     483          142 :       { return _M_t.size(); }
+     484              : 
+     485              :       /** Returns the maximum size of the %map.  */
+     486              :       size_type
+     487              :       max_size() const _GLIBCXX_NOEXCEPT
+     488              :       { return _M_t.max_size(); }
+     489              : 
+     490              :       // [23.3.1.2] element access
+     491              :       /**
+     492              :        *  @brief  Subscript ( @c [] ) access to %map data.
+     493              :        *  @param  __k  The key for which data should be retrieved.
+     494              :        *  @return  A reference to the data of the (key,data) %pair.
+     495              :        *
+     496              :        *  Allows for easy lookup with the subscript ( @c [] )
+     497              :        *  operator.  Returns data associated with the key specified in
+     498              :        *  subscript.  If the key does not exist, a pair with that key
+     499              :        *  is created using default values, which is then returned.
+     500              :        *
+     501              :        *  Lookup requires logarithmic time.
+     502              :        */
+     503              :       mapped_type&
+     504     41147762 :       operator[](const key_type& __k)
+     505              :       {
+     506              :         // concept requirements
+     507              :         __glibcxx_function_requires(_DefaultConstructibleConcept<mapped_type>)
+     508              : 
+     509     41147762 :         iterator __i = lower_bound(__k);
+     510              :         // __i->first is greater than or equivalent to __k.
+     511     41147762 :         if (__i == end() || key_comp()(__k, (*__i).first))
+     512              : #if __cplusplus >= 201103L
+     513      8749158 :           __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct,
+     514      8749158 :                                             std::tuple<const key_type&>(__k),
+     515      8749158 :                                             std::tuple<>());
+     516              : #else
+     517              :           __i = insert(__i, value_type(__k, mapped_type()));
+     518              : #endif
+     519     82295524 :         return (*__i).second;
+     520              :       }
+     521              : 
+     522              : #if __cplusplus >= 201103L
+     523              :       mapped_type&
+     524     60417328 :       operator[](key_type&& __k)
+     525              :       {
+     526              :         // concept requirements
+     527              :         __glibcxx_function_requires(_DefaultConstructibleConcept<mapped_type>)
+     528              : 
+     529     60417328 :         iterator __i = lower_bound(__k);
+     530              :         // __i->first is greater than or equivalent to __k.
+     531     60417328 :         if (__i == end() || key_comp()(__k, (*__i).first))
+     532      1590732 :           __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct,
+     533      1590732 :                                         std::forward_as_tuple(std::move(__k)),
+     534      1590732 :                                         std::tuple<>());
+     535    120834656 :         return (*__i).second;
+     536              :       }
+     537              : #endif
+     538              : 
+     539              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     540              :       // DR 464. Suggestion for new member functions in standard containers.
+     541              :       /**
+     542              :        *  @brief  Access to %map data.
+     543              :        *  @param  __k  The key for which data should be retrieved.
+     544              :        *  @return  A reference to the data whose key is equivalent to @a __k, if
+     545              :        *           such a data is present in the %map.
+     546              :        *  @throw  std::out_of_range  If no such data is present.
+     547              :        */
+     548              :       mapped_type&
+     549        21162 :       at(const key_type& __k)
+     550              :       {
+     551        21162 :         iterator __i = lower_bound(__k);
+     552        21162 :         if (__i == end() || key_comp()(__k, (*__i).first))
+     553          584 :           __throw_out_of_range(__N("map::at"));
+     554        41156 :         return (*__i).second;
+     555              :       }
+     556              : 
+     557              :       const mapped_type&
+     558        14194 :       at(const key_type& __k) const
+     559              :       {
+     560        14194 :         const_iterator __i = lower_bound(__k);
+     561        14194 :         if (__i == end() || key_comp()(__k, (*__i).first))
+     562            0 :           __throw_out_of_range(__N("map::at"));
+     563        28388 :         return (*__i).second;
+     564              :       }
+     565              : 
+     566              :       // modifiers
+     567              : #if __cplusplus >= 201103L
+     568              :       /**
+     569              :        *  @brief Attempts to build and insert a std::pair into the %map.
+     570              :        *
+     571              :        *  @param __args  Arguments used to generate a new pair instance (see
+     572              :        *                std::piecewise_contruct for passing arguments to each
+     573              :        *                part of the pair constructor).
+     574              :        *
+     575              :        *  @return  A pair, of which the first element is an iterator that points
+     576              :        *           to the possibly inserted pair, and the second is a bool that
+     577              :        *           is true if the pair was actually inserted.
+     578              :        *
+     579              :        *  This function attempts to build and insert a (key, value) %pair into
+     580              :        *  the %map.
+     581              :        *  A %map relies on unique keys and thus a %pair is only inserted if its
+     582              :        *  first element (the key) is not already present in the %map.
+     583              :        *
+     584              :        *  Insertion requires logarithmic time.
+     585              :        */
+     586              :       template<typename... _Args>
+     587              :         std::pair<iterator, bool>
+     588          226 :         emplace(_Args&&... __args)
+     589              :         {
+     590              : #if __cplusplus >= 201703L
+     591              :           if constexpr (sizeof...(_Args) == 2)
+     592              :             if constexpr (is_same_v<allocator_type, allocator<value_type>>)
+     593              :               {
+     594          226 :                 auto&& [__a, __v] = pair<_Args&...>(__args...);
+     595              :                 if constexpr (__usable_key<decltype(__a)>)
+     596              :                   {
+     597          226 :                     const key_type& __k = __a;
+     598          226 :                     iterator __i = lower_bound(__k);
+     599          226 :                     if (__i == end() || key_comp()(__k, (*__i).first))
+     600              :                       {
+     601          110 :                         __i = emplace_hint(__i, std::forward<_Args>(__args)...);
+     602          110 :                         return {__i, true};
+     603              :                       }
+     604          116 :                     return {__i, false};
+     605              :                   }
+     606              :               }
+     607              : #endif
+     608              :           return _M_t._M_emplace_unique(std::forward<_Args>(__args)...);
+     609              :         }
+     610              : 
+     611              :       /**
+     612              :        *  @brief Attempts to build and insert a std::pair into the %map.
+     613              :        *
+     614              :        *  @param  __pos  An iterator that serves as a hint as to where the pair
+     615              :        *                should be inserted.
+     616              :        *  @param  __args  Arguments used to generate a new pair instance (see
+     617              :        *                 std::piecewise_contruct for passing arguments to each
+     618              :        *                 part of the pair constructor).
+     619              :        *  @return An iterator that points to the element with key of the
+     620              :        *          std::pair built from @a __args (may or may not be that
+     621              :        *          std::pair).
+     622              :        *
+     623              :        *  This function is not concerned about whether the insertion took place,
+     624              :        *  and thus does not return a boolean like the single-argument emplace()
+     625              :        *  does.
+     626              :        *  Note that the first parameter is only a hint and can potentially
+     627              :        *  improve the performance of the insertion process. A bad hint would
+     628              :        *  cause no gains in efficiency.
+     629              :        *
+     630              :        *  See
+     631              :        *  https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
+     632              :        *  for more on @a hinting.
+     633              :        *
+     634              :        *  Insertion requires logarithmic time (if the hint is not taken).
+     635              :        */
+     636              :       template<typename... _Args>
+     637              :         iterator
+     638          110 :         emplace_hint(const_iterator __pos, _Args&&... __args)
+     639              :         {
+     640          110 :           return _M_t._M_emplace_hint_unique(__pos,
+     641          110 :                                              std::forward<_Args>(__args)...);
+     642              :         }
+     643              : #endif
+     644              : 
+     645              : #if __cplusplus > 201402L
+     646              :       /// Extract a node.
+     647              :       node_type
+     648              :       extract(const_iterator __pos)
+     649              :       {
+     650              :         __glibcxx_assert(__pos != end());
+     651              :         return _M_t.extract(__pos);
+     652              :       }
+     653              : 
+     654              :       /// Extract a node.
+     655              :       node_type
+     656              :       extract(const key_type& __x)
+     657              :       { return _M_t.extract(__x); }
+     658              : 
+     659              :       /// Re-insert an extracted node.
+     660              :       insert_return_type
+     661              :       insert(node_type&& __nh)
+     662              :       { return _M_t._M_reinsert_node_unique(std::move(__nh)); }
+     663              : 
+     664              :       /// Re-insert an extracted node.
+     665              :       iterator
+     666              :       insert(const_iterator __hint, node_type&& __nh)
+     667              :       { return _M_t._M_reinsert_node_hint_unique(__hint, std::move(__nh)); }
+     668              : 
+     669              :       template<typename, typename>
+     670              :         friend struct std::_Rb_tree_merge_helper;
+     671              : 
+     672              :       template<typename _Cmp2>
+     673              :         void
+     674              :         merge(map<_Key, _Tp, _Cmp2, _Alloc>& __source)
+     675              :         {
+     676              :           using _Merge_helper = _Rb_tree_merge_helper<map, _Cmp2>;
+     677              :           _M_t._M_merge_unique(_Merge_helper::_S_get_tree(__source));
+     678              :         }
+     679              : 
+     680              :       template<typename _Cmp2>
+     681              :         void
+     682              :         merge(map<_Key, _Tp, _Cmp2, _Alloc>&& __source)
+     683              :         { merge(__source); }
+     684              : 
+     685              :       template<typename _Cmp2>
+     686              :         void
+     687              :         merge(multimap<_Key, _Tp, _Cmp2, _Alloc>& __source)
+     688              :         {
+     689              :           using _Merge_helper = _Rb_tree_merge_helper<map, _Cmp2>;
+     690              :           _M_t._M_merge_unique(_Merge_helper::_S_get_tree(__source));
+     691              :         }
+     692              : 
+     693              :       template<typename _Cmp2>
+     694              :         void
+     695              :         merge(multimap<_Key, _Tp, _Cmp2, _Alloc>&& __source)
+     696              :         { merge(__source); }
+     697              : #endif // C++17
+     698              : 
+     699              : #if __cplusplus > 201402L
+     700              : #define __cpp_lib_map_try_emplace 201411L
+     701              :       /**
+     702              :        *  @brief Attempts to build and insert a std::pair into the %map.
+     703              :        *
+     704              :        *  @param __k    Key to use for finding a possibly existing pair in
+     705              :        *                the map.
+     706              :        *  @param __args  Arguments used to generate the .second for a new pair
+     707              :        *                instance.
+     708              :        *
+     709              :        *  @return  A pair, of which the first element is an iterator that points
+     710              :        *           to the possibly inserted pair, and the second is a bool that
+     711              :        *           is true if the pair was actually inserted.
+     712              :        *
+     713              :        *  This function attempts to build and insert a (key, value) %pair into
+     714              :        *  the %map.
+     715              :        *  A %map relies on unique keys and thus a %pair is only inserted if its
+     716              :        *  first element (the key) is not already present in the %map.
+     717              :        *  If a %pair is not inserted, this function has no effect.
+     718              :        *
+     719              :        *  Insertion requires logarithmic time.
+     720              :        */
+     721              :       template <typename... _Args>
+     722              :         pair<iterator, bool>
+     723              :         try_emplace(const key_type& __k, _Args&&... __args)
+     724              :         {
+     725              :           iterator __i = lower_bound(__k);
+     726              :           if (__i == end() || key_comp()(__k, (*__i).first))
+     727              :             {
+     728              :               __i = emplace_hint(__i, std::piecewise_construct,
+     729              :                                  std::forward_as_tuple(__k),
+     730              :                                  std::forward_as_tuple(
+     731              :                                    std::forward<_Args>(__args)...));
+     732              :               return {__i, true};
+     733              :             }
+     734              :           return {__i, false};
+     735              :         }
+     736              : 
+     737              :       // move-capable overload
+     738              :       template <typename... _Args>
+     739              :         pair<iterator, bool>
+     740              :         try_emplace(key_type&& __k, _Args&&... __args)
+     741              :         {
+     742              :           iterator __i = lower_bound(__k);
+     743              :           if (__i == end() || key_comp()(__k, (*__i).first))
+     744              :             {
+     745              :               __i = emplace_hint(__i, std::piecewise_construct,
+     746              :                                  std::forward_as_tuple(std::move(__k)),
+     747              :                                  std::forward_as_tuple(
+     748              :                                    std::forward<_Args>(__args)...));
+     749              :               return {__i, true};
+     750              :             }
+     751              :           return {__i, false};
+     752              :         }
+     753              : 
+     754              :       /**
+     755              :        *  @brief Attempts to build and insert a std::pair into the %map.
+     756              :        *
+     757              :        *  @param  __hint  An iterator that serves as a hint as to where the
+     758              :        *                  pair should be inserted.
+     759              :        *  @param __k    Key to use for finding a possibly existing pair in
+     760              :        *                the map.
+     761              :        *  @param __args  Arguments used to generate the .second for a new pair
+     762              :        *                instance.
+     763              :        *  @return An iterator that points to the element with key of the
+     764              :        *          std::pair built from @a __args (may or may not be that
+     765              :        *          std::pair).
+     766              :        *
+     767              :        *  This function is not concerned about whether the insertion took place,
+     768              :        *  and thus does not return a boolean like the single-argument
+     769              :        *  try_emplace() does. However, if insertion did not take place,
+     770              :        *  this function has no effect.
+     771              :        *  Note that the first parameter is only a hint and can potentially
+     772              :        *  improve the performance of the insertion process. A bad hint would
+     773              :        *  cause no gains in efficiency.
+     774              :        *
+     775              :        *  See
+     776              :        *  https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
+     777              :        *  for more on @a hinting.
+     778              :        *
+     779              :        *  Insertion requires logarithmic time (if the hint is not taken).
+     780              :        */
+     781              :       template <typename... _Args>
+     782              :         iterator
+     783              :         try_emplace(const_iterator __hint, const key_type& __k,
+     784              :                     _Args&&... __args)
+     785              :         {
+     786              :           iterator __i;
+     787              :           auto __true_hint = _M_t._M_get_insert_hint_unique_pos(__hint, __k);
+     788              :           if (__true_hint.second)
+     789              :             __i = emplace_hint(iterator(__true_hint.second),
+     790              :                                std::piecewise_construct,
+     791              :                                std::forward_as_tuple(__k),
+     792              :                                std::forward_as_tuple(
+     793              :                                  std::forward<_Args>(__args)...));
+     794              :           else
+     795              :             __i = iterator(__true_hint.first);
+     796              :           return __i;
+     797              :         }
+     798              : 
+     799              :       // move-capable overload
+     800              :       template <typename... _Args>
+     801              :         iterator
+     802              :         try_emplace(const_iterator __hint, key_type&& __k, _Args&&... __args)
+     803              :         {
+     804              :           iterator __i;
+     805              :           auto __true_hint = _M_t._M_get_insert_hint_unique_pos(__hint, __k);
+     806              :           if (__true_hint.second)
+     807              :             __i = emplace_hint(iterator(__true_hint.second),
+     808              :                                std::piecewise_construct,
+     809              :                                std::forward_as_tuple(std::move(__k)),
+     810              :                                std::forward_as_tuple(
+     811              :                                  std::forward<_Args>(__args)...));
+     812              :           else
+     813              :             __i = iterator(__true_hint.first);
+     814              :           return __i;
+     815              :         }
+     816              : #endif
+     817              : 
+     818              :       /**
+     819              :        *  @brief Attempts to insert a std::pair into the %map.
+     820              :        *  @param __x Pair to be inserted (see std::make_pair for easy
+     821              :        *             creation of pairs).
+     822              :        *
+     823              :        *  @return  A pair, of which the first element is an iterator that
+     824              :        *           points to the possibly inserted pair, and the second is
+     825              :        *           a bool that is true if the pair was actually inserted.
+     826              :        *
+     827              :        *  This function attempts to insert a (key, value) %pair into the %map.
+     828              :        *  A %map relies on unique keys and thus a %pair is only inserted if its
+     829              :        *  first element (the key) is not already present in the %map.
+     830              :        *
+     831              :        *  Insertion requires logarithmic time.
+     832              :        *  @{
+     833              :        */
+     834              :       std::pair<iterator, bool>
+     835              :       insert(const value_type& __x)
+     836              :       { return _M_t._M_insert_unique(__x); }
+     837              : 
+     838              : #if __cplusplus >= 201103L
+     839              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     840              :       // 2354. Unnecessary copying when inserting into maps with braced-init
+     841              :       std::pair<iterator, bool>
+     842              :       insert(value_type&& __x)
+     843              :       { return _M_t._M_insert_unique(std::move(__x)); }
+     844              : 
+     845              :       template<typename _Pair>
+     846              :         __enable_if_t<is_constructible<value_type, _Pair>::value,
+     847              :                       pair<iterator, bool>>
+     848              :         insert(_Pair&& __x)
+     849              :         {
+     850              : #if __cplusplus >= 201703L
+     851              :           using _P2 = remove_reference_t<_Pair>;
+     852              :           if constexpr (__is_pair<remove_const_t<_P2>>)
+     853              :             if constexpr (is_same_v<allocator_type, allocator<value_type>>)
+     854              :               if constexpr (__usable_key<typename _P2::first_type>)
+     855              :                 {
+     856              :                   const key_type& __k = __x.first;
+     857              :                   iterator __i = lower_bound(__k);
+     858              :                   if (__i == end() || key_comp()(__k, (*__i).first))
+     859              :                     {
+     860              :                       __i = emplace_hint(__i, std::forward<_Pair>(__x));
+     861              :                       return {__i, true};
+     862              :                     }
+     863              :                   return {__i, false};
+     864              :                 }
+     865              : #endif
+     866              :           return _M_t._M_emplace_unique(std::forward<_Pair>(__x));
+     867              :         }
+     868              : #endif
+     869              :       /// @}
+     870              : 
+     871              : #if __cplusplus >= 201103L
+     872              :       /**
+     873              :        *  @brief Attempts to insert a list of std::pairs into the %map.
+     874              :        *  @param  __list  A std::initializer_list<value_type> of pairs to be
+     875              :        *                  inserted.
+     876              :        *
+     877              :        *  Complexity similar to that of the range constructor.
+     878              :        */
+     879              :       void
+     880              :       insert(std::initializer_list<value_type> __list)
+     881              :       { insert(__list.begin(), __list.end()); }
+     882              : #endif
+     883              : 
+     884              :       /**
+     885              :        *  @brief Attempts to insert a std::pair into the %map.
+     886              :        *  @param  __position  An iterator that serves as a hint as to where the
+     887              :        *                    pair should be inserted.
+     888              :        *  @param  __x  Pair to be inserted (see std::make_pair for easy creation
+     889              :        *               of pairs).
+     890              :        *  @return An iterator that points to the element with key of
+     891              :        *           @a __x (may or may not be the %pair passed in).
+     892              :        *
+     893              : 
+     894              :        *  This function is not concerned about whether the insertion
+     895              :        *  took place, and thus does not return a boolean like the
+     896              :        *  single-argument insert() does.  Note that the first
+     897              :        *  parameter is only a hint and can potentially improve the
+     898              :        *  performance of the insertion process.  A bad hint would
+     899              :        *  cause no gains in efficiency.
+     900              :        *
+     901              :        *  See
+     902              :        *  https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
+     903              :        *  for more on @a hinting.
+     904              :        *
+     905              :        *  Insertion requires logarithmic time (if the hint is not taken).
+     906              :        *  @{
+     907              :        */
+     908              :       iterator
+     909              : #if __cplusplus >= 201103L
+     910              :       insert(const_iterator __position, const value_type& __x)
+     911              : #else
+     912              :       insert(iterator __position, const value_type& __x)
+     913              : #endif
+     914              :       { return _M_t._M_insert_unique_(__position, __x); }
+     915              : 
+     916              : #if __cplusplus >= 201103L
+     917              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     918              :       // 2354. Unnecessary copying when inserting into maps with braced-init
+     919              :       iterator
+     920              :       insert(const_iterator __position, value_type&& __x)
+     921              :       { return _M_t._M_insert_unique_(__position, std::move(__x)); }
+     922              : 
+     923              :       template<typename _Pair>
+     924              :         __enable_if_t<is_constructible<value_type, _Pair>::value, iterator>
+     925              :         insert(const_iterator __position, _Pair&& __x)
+     926              :         {
+     927              :           return _M_t._M_emplace_hint_unique(__position,
+     928              :                                              std::forward<_Pair>(__x));
+     929              :         }
+     930              : #endif
+     931              :       /// @}
+     932              : 
+     933              :       /**
+     934              :        *  @brief Template function that attempts to insert a range of elements.
+     935              :        *  @param  __first  Iterator pointing to the start of the range to be
+     936              :        *                   inserted.
+     937              :        *  @param  __last  Iterator pointing to the end of the range.
+     938              :        *
+     939              :        *  Complexity similar to that of the range constructor.
+     940              :        */
+     941              :       template<typename _InputIterator>
+     942              :         void
+     943              :         insert(_InputIterator __first, _InputIterator __last)
+     944              :         { _M_t._M_insert_range_unique(__first, __last); }
+     945              : 
+     946              : #if __cplusplus > 201402L
+     947              :       /**
+     948              :        *  @brief Attempts to insert or assign a std::pair into the %map.
+     949              :        *  @param __k    Key to use for finding a possibly existing pair in
+     950              :        *                the map.
+     951              :        *  @param __obj  Argument used to generate the .second for a pair
+     952              :        *                instance.
+     953              :        *
+     954              :        *  @return  A pair, of which the first element is an iterator that
+     955              :        *           points to the possibly inserted pair, and the second is
+     956              :        *           a bool that is true if the pair was actually inserted.
+     957              :        *
+     958              :        *  This function attempts to insert a (key, value) %pair into the %map.
+     959              :        *  A %map relies on unique keys and thus a %pair is only inserted if its
+     960              :        *  first element (the key) is not already present in the %map.
+     961              :        *  If the %pair was already in the %map, the .second of the %pair
+     962              :        *  is assigned from __obj.
+     963              :        *
+     964              :        *  Insertion requires logarithmic time.
+     965              :        */
+     966              :       template <typename _Obj>
+     967              :         pair<iterator, bool>
+     968              :         insert_or_assign(const key_type& __k, _Obj&& __obj)
+     969              :         {
+     970              :           iterator __i = lower_bound(__k);
+     971              :           if (__i == end() || key_comp()(__k, (*__i).first))
+     972              :             {
+     973              :               __i = emplace_hint(__i, std::piecewise_construct,
+     974              :                                  std::forward_as_tuple(__k),
+     975              :                                  std::forward_as_tuple(
+     976              :                                    std::forward<_Obj>(__obj)));
+     977              :               return {__i, true};
+     978              :             }
+     979              :           (*__i).second = std::forward<_Obj>(__obj);
+     980              :           return {__i, false};
+     981              :         }
+     982              : 
+     983              :       // move-capable overload
+     984              :       template <typename _Obj>
+     985              :         pair<iterator, bool>
+     986              :         insert_or_assign(key_type&& __k, _Obj&& __obj)
+     987              :         {
+     988              :           iterator __i = lower_bound(__k);
+     989              :           if (__i == end() || key_comp()(__k, (*__i).first))
+     990              :             {
+     991              :               __i = emplace_hint(__i, std::piecewise_construct,
+     992              :                                  std::forward_as_tuple(std::move(__k)),
+     993              :                                  std::forward_as_tuple(
+     994              :                                    std::forward<_Obj>(__obj)));
+     995              :               return {__i, true};
+     996              :             }
+     997              :           (*__i).second = std::forward<_Obj>(__obj);
+     998              :           return {__i, false};
+     999              :         }
+    1000              : 
+    1001              :       /**
+    1002              :        *  @brief Attempts to insert or assign a std::pair into the %map.
+    1003              :        *  @param  __hint  An iterator that serves as a hint as to where the
+    1004              :        *                  pair should be inserted.
+    1005              :        *  @param __k    Key to use for finding a possibly existing pair in
+    1006              :        *                the map.
+    1007              :        *  @param __obj  Argument used to generate the .second for a pair
+    1008              :        *                instance.
+    1009              :        *
+    1010              :        *  @return An iterator that points to the element with key of
+    1011              :        *           @a __x (may or may not be the %pair passed in).
+    1012              :        *
+    1013              :        *  This function attempts to insert a (key, value) %pair into the %map.
+    1014              :        *  A %map relies on unique keys and thus a %pair is only inserted if its
+    1015              :        *  first element (the key) is not already present in the %map.
+    1016              :        *  If the %pair was already in the %map, the .second of the %pair
+    1017              :        *  is assigned from __obj.
+    1018              :        *
+    1019              :        *  Insertion requires logarithmic time.
+    1020              :        */
+    1021              :       template <typename _Obj>
+    1022              :         iterator
+    1023              :         insert_or_assign(const_iterator __hint,
+    1024              :                          const key_type& __k, _Obj&& __obj)
+    1025              :         {
+    1026              :           iterator __i;
+    1027              :           auto __true_hint = _M_t._M_get_insert_hint_unique_pos(__hint, __k);
+    1028              :           if (__true_hint.second)
+    1029              :             {
+    1030              :               return emplace_hint(iterator(__true_hint.second),
+    1031              :                                   std::piecewise_construct,
+    1032              :                                   std::forward_as_tuple(__k),
+    1033              :                                   std::forward_as_tuple(
+    1034              :                                     std::forward<_Obj>(__obj)));
+    1035              :             }
+    1036              :           __i = iterator(__true_hint.first);
+    1037              :           (*__i).second = std::forward<_Obj>(__obj);
+    1038              :           return __i;
+    1039              :         }
+    1040              : 
+    1041              :       // move-capable overload
+    1042              :       template <typename _Obj>
+    1043              :         iterator
+    1044              :         insert_or_assign(const_iterator __hint, key_type&& __k, _Obj&& __obj)
+    1045              :         {
+    1046              :           iterator __i;
+    1047              :           auto __true_hint = _M_t._M_get_insert_hint_unique_pos(__hint, __k);
+    1048              :           if (__true_hint.second)
+    1049              :             {
+    1050              :               return emplace_hint(iterator(__true_hint.second),
+    1051              :                                   std::piecewise_construct,
+    1052              :                                   std::forward_as_tuple(std::move(__k)),
+    1053              :                                   std::forward_as_tuple(
+    1054              :                                     std::forward<_Obj>(__obj)));
+    1055              :             }
+    1056              :           __i = iterator(__true_hint.first);
+    1057              :           (*__i).second = std::forward<_Obj>(__obj);
+    1058              :           return __i;
+    1059              :         }
+    1060              : #endif
+    1061              : 
+    1062              : #if __cplusplus >= 201103L
+    1063              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1064              :       // DR 130. Associative erase should return an iterator.
+    1065              :       /**
+    1066              :        *  @brief Erases an element from a %map.
+    1067              :        *  @param  __position  An iterator pointing to the element to be erased.
+    1068              :        *  @return An iterator pointing to the element immediately following
+    1069              :        *          @a position prior to the element being erased. If no such
+    1070              :        *          element exists, end() is returned.
+    1071              :        *
+    1072              :        *  This function erases an element, pointed to by the given
+    1073              :        *  iterator, from a %map.  Note that this function only erases
+    1074              :        *  the element, and that if the element is itself a pointer,
+    1075              :        *  the pointed-to memory is not touched in any way.  Managing
+    1076              :        *  the pointer is the user's responsibility.
+    1077              :        *
+    1078              :        *  @{
+    1079              :        */
+    1080              :       iterator
+    1081              :       erase(const_iterator __position)
+    1082              :       { return _M_t.erase(__position); }
+    1083              : 
+    1084              :       // LWG 2059
+    1085              :       _GLIBCXX_ABI_TAG_CXX11
+    1086              :       iterator
+    1087              :       erase(iterator __position)
+    1088              :       { return _M_t.erase(__position); }
+    1089              :       /// @}
+    1090              : #else
+    1091              :       /**
+    1092              :        *  @brief Erases an element from a %map.
+    1093              :        *  @param  __position  An iterator pointing to the element to be erased.
+    1094              :        *
+    1095              :        *  This function erases an element, pointed to by the given
+    1096              :        *  iterator, from a %map.  Note that this function only erases
+    1097              :        *  the element, and that if the element is itself a pointer,
+    1098              :        *  the pointed-to memory is not touched in any way.  Managing
+    1099              :        *  the pointer is the user's responsibility.
+    1100              :        */
+    1101              :       void
+    1102              :       erase(iterator __position)
+    1103              :       { _M_t.erase(__position); }
+    1104              : #endif
+    1105              : 
+    1106              :       /**
+    1107              :        *  @brief Erases elements according to the provided key.
+    1108              :        *  @param  __x  Key of element to be erased.
+    1109              :        *  @return  The number of elements erased.
+    1110              :        *
+    1111              :        *  This function erases all the elements located by the given key from
+    1112              :        *  a %map.
+    1113              :        *  Note that this function only erases the element, and that if
+    1114              :        *  the element is itself a pointer, the pointed-to memory is not touched
+    1115              :        *  in any way.  Managing the pointer is the user's responsibility.
+    1116              :        */
+    1117              :       size_type
+    1118          106 :       erase(const key_type& __x)
+    1119          106 :       { return _M_t.erase(__x); }
+    1120              : 
+    1121              : #if __cplusplus >= 201103L
+    1122              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1123              :       // DR 130. Associative erase should return an iterator.
+    1124              :       /**
+    1125              :        *  @brief Erases a [first,last) range of elements from a %map.
+    1126              :        *  @param  __first  Iterator pointing to the start of the range to be
+    1127              :        *                   erased.
+    1128              :        *  @param __last Iterator pointing to the end of the range to
+    1129              :        *                be erased.
+    1130              :        *  @return The iterator @a __last.
+    1131              :        *
+    1132              :        *  This function erases a sequence of elements from a %map.
+    1133              :        *  Note that this function only erases the element, and that if
+    1134              :        *  the element is itself a pointer, the pointed-to memory is not touched
+    1135              :        *  in any way.  Managing the pointer is the user's responsibility.
+    1136              :        */
+    1137              :       iterator
+    1138              :       erase(const_iterator __first, const_iterator __last)
+    1139              :       { return _M_t.erase(__first, __last); }
+    1140              : #else
+    1141              :       /**
+    1142              :        *  @brief Erases a [__first,__last) range of elements from a %map.
+    1143              :        *  @param  __first  Iterator pointing to the start of the range to be
+    1144              :        *                   erased.
+    1145              :        *  @param __last Iterator pointing to the end of the range to
+    1146              :        *                be erased.
+    1147              :        *
+    1148              :        *  This function erases a sequence of elements from a %map.
+    1149              :        *  Note that this function only erases the element, and that if
+    1150              :        *  the element is itself a pointer, the pointed-to memory is not touched
+    1151              :        *  in any way.  Managing the pointer is the user's responsibility.
+    1152              :        */
+    1153              :       void
+    1154              :       erase(iterator __first, iterator __last)
+    1155              :       { _M_t.erase(__first, __last); }
+    1156              : #endif
+    1157              : 
+    1158              :       /**
+    1159              :        *  @brief  Swaps data with another %map.
+    1160              :        *  @param  __x  A %map of the same element and allocator types.
+    1161              :        *
+    1162              :        *  This exchanges the elements between two maps in constant
+    1163              :        *  time.  (It is only swapping a pointer, an integer, and an
+    1164              :        *  instance of the @c Compare type (which itself is often
+    1165              :        *  stateless and empty), so it should be quite fast.)  Note
+    1166              :        *  that the global std::swap() function is specialized such
+    1167              :        *  that std::swap(m1,m2) will feed to this function.
+    1168              :        *
+    1169              :        *  Whether the allocators are swapped depends on the allocator traits.
+    1170              :        */
+    1171              :       void
+    1172              :       swap(map& __x)
+    1173              :       _GLIBCXX_NOEXCEPT_IF(__is_nothrow_swappable<_Compare>::value)
+    1174              :       { _M_t.swap(__x._M_t); }
+    1175              : 
+    1176              :       /**
+    1177              :        *  Erases all elements in a %map.  Note that this function only
+    1178              :        *  erases the elements, and that if the elements themselves are
+    1179              :        *  pointers, the pointed-to memory is not touched in any way.
+    1180              :        *  Managing the pointer is the user's responsibility.
+    1181              :        */
+    1182              :       void
+    1183          650 :       clear() _GLIBCXX_NOEXCEPT
+    1184          650 :       { _M_t.clear(); }
+    1185              : 
+    1186              :       // observers
+    1187              :       /**
+    1188              :        *  Returns the key comparison object out of which the %map was
+    1189              :        *  constructed.
+    1190              :        */
+    1191              :       key_compare
+    1192     99954126 :       key_comp() const
+    1193     99954126 :       { return _M_t.key_comp(); }
+    1194              : 
+    1195              :       /**
+    1196              :        *  Returns a value comparison object, built from the key comparison
+    1197              :        *  object out of which the %map was constructed.
+    1198              :        */
+    1199              :       value_compare
+    1200              :       value_comp() const
+    1201              :       { return value_compare(_M_t.key_comp()); }
+    1202              : 
+    1203              :       // [23.3.1.3] map operations
+    1204              : 
+    1205              :       ///@{
+    1206              :       /**
+    1207              :        *  @brief Tries to locate an element in a %map.
+    1208              :        *  @param  __x  Key of (key, value) %pair to be located.
+    1209              :        *  @return  Iterator pointing to sought-after element, or end() if not
+    1210              :        *           found.
+    1211              :        *
+    1212              :        *  This function takes a key and tries to locate the element with which
+    1213              :        *  the key matches.  If successful the function returns an iterator
+    1214              :        *  pointing to the sought after %pair.  If unsuccessful it returns the
+    1215              :        *  past-the-end ( @c end() ) iterator.
+    1216              :        */
+    1217              : 
+    1218              :       iterator
+    1219        77490 :       find(const key_type& __x)
+    1220        77490 :       { return _M_t.find(__x); }
+    1221              : 
+    1222              : #if __cplusplus > 201103L
+    1223              :       template<typename _Kt>
+    1224              :         auto
+    1225          374 :         find(const _Kt& __x) -> decltype(_M_t._M_find_tr(__x))
+    1226          374 :         { return _M_t._M_find_tr(__x); }
+    1227              : #endif
+    1228              :       ///@}
+    1229              : 
+    1230              :       ///@{
+    1231              :       /**
+    1232              :        *  @brief Tries to locate an element in a %map.
+    1233              :        *  @param  __x  Key of (key, value) %pair to be located.
+    1234              :        *  @return  Read-only (constant) iterator pointing to sought-after
+    1235              :        *           element, or end() if not found.
+    1236              :        *
+    1237              :        *  This function takes a key and tries to locate the element with which
+    1238              :        *  the key matches.  If successful the function returns a constant
+    1239              :        *  iterator pointing to the sought after %pair. If unsuccessful it
+    1240              :        *  returns the past-the-end ( @c end() ) iterator.
+    1241              :        */
+    1242              : 
+    1243              :       const_iterator
+    1244        13522 :       find(const key_type& __x) const
+    1245        13522 :       { return _M_t.find(__x); }
+    1246              : 
+    1247              : #if __cplusplus > 201103L
+    1248              :       template<typename _Kt>
+    1249              :         auto
+    1250              :         find(const _Kt& __x) const -> decltype(_M_t._M_find_tr(__x))
+    1251              :         { return _M_t._M_find_tr(__x); }
+    1252              : #endif
+    1253              :       ///@}
+    1254              : 
+    1255              :       ///@{
+    1256              :       /**
+    1257              :        *  @brief  Finds the number of elements with given key.
+    1258              :        *  @param  __x  Key of (key, value) pairs to be located.
+    1259              :        *  @return  Number of elements with specified key.
+    1260              :        *
+    1261              :        *  This function only makes sense for multimaps; for map the result will
+    1262              :        *  either be 0 (not present) or 1 (present).
+    1263              :        */
+    1264              :       size_type
+    1265            4 :       count(const key_type& __x) const
+    1266            4 :       { return _M_t.find(__x) == _M_t.end() ? 0 : 1; }
+    1267              : 
+    1268              : #if __cplusplus > 201103L
+    1269              :       template<typename _Kt>
+    1270              :         auto
+    1271              :         count(const _Kt& __x) const -> decltype(_M_t._M_count_tr(__x))
+    1272              :         { return _M_t._M_count_tr(__x); }
+    1273              : #endif
+    1274              :       ///@}
+    1275              : 
+    1276              : #if __cplusplus > 201703L
+    1277              :       ///@{
+    1278              :       /**
+    1279              :        *  @brief  Finds whether an element with the given key exists.
+    1280              :        *  @param  __x  Key of (key, value) pairs to be located.
+    1281              :        *  @return  True if there is an element with the specified key.
+    1282              :        */
+    1283              :       bool
+    1284              :       contains(const key_type& __x) const
+    1285              :       { return _M_t.find(__x) != _M_t.end(); }
+    1286              : 
+    1287              :       template<typename _Kt>
+    1288              :         auto
+    1289              :         contains(const _Kt& __x) const
+    1290              :         -> decltype(_M_t._M_find_tr(__x), void(), true)
+    1291              :         { return _M_t._M_find_tr(__x) != _M_t.end(); }
+    1292              :       ///@}
+    1293              : #endif
+    1294              : 
+    1295              :       ///@{
+    1296              :       /**
+    1297              :        *  @brief Finds the beginning of a subsequence matching given key.
+    1298              :        *  @param  __x  Key of (key, value) pair to be located.
+    1299              :        *  @return  Iterator pointing to first element equal to or greater
+    1300              :        *           than key, or end().
+    1301              :        *
+    1302              :        *  This function returns the first element of a subsequence of elements
+    1303              :        *  that matches the given key.  If unsuccessful it returns an iterator
+    1304              :        *  pointing to the first element that has a greater value than given key
+    1305              :        *  or end() if no such element exists.
+    1306              :        */
+    1307              :       iterator
+    1308    101586478 :       lower_bound(const key_type& __x)
+    1309    101586478 :       { return _M_t.lower_bound(__x); }
+    1310              : 
+    1311              : #if __cplusplus > 201103L
+    1312              :       template<typename _Kt>
+    1313              :         auto
+    1314              :         lower_bound(const _Kt& __x)
+    1315              :         -> decltype(iterator(_M_t._M_lower_bound_tr(__x)))
+    1316              :         { return iterator(_M_t._M_lower_bound_tr(__x)); }
+    1317              : #endif
+    1318              :       ///@}
+    1319              : 
+    1320              :       ///@{
+    1321              :       /**
+    1322              :        *  @brief Finds the beginning of a subsequence matching given key.
+    1323              :        *  @param  __x  Key of (key, value) pair to be located.
+    1324              :        *  @return  Read-only (constant) iterator pointing to first element
+    1325              :        *           equal to or greater than key, or end().
+    1326              :        *
+    1327              :        *  This function returns the first element of a subsequence of elements
+    1328              :        *  that matches the given key.  If unsuccessful it returns an iterator
+    1329              :        *  pointing to the first element that has a greater value than given key
+    1330              :        *  or end() if no such element exists.
+    1331              :        */
+    1332              :       const_iterator
+    1333        14194 :       lower_bound(const key_type& __x) const
+    1334        14194 :       { return _M_t.lower_bound(__x); }
+    1335              : 
+    1336              : #if __cplusplus > 201103L
+    1337              :       template<typename _Kt>
+    1338              :         auto
+    1339              :         lower_bound(const _Kt& __x) const
+    1340              :         -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x)))
+    1341              :         { return const_iterator(_M_t._M_lower_bound_tr(__x)); }
+    1342              : #endif
+    1343              :       ///@}
+    1344              : 
+    1345              :       ///@{
+    1346              :       /**
+    1347              :        *  @brief Finds the end of a subsequence matching given key.
+    1348              :        *  @param  __x  Key of (key, value) pair to be located.
+    1349              :        *  @return Iterator pointing to the first element
+    1350              :        *          greater than key, or end().
+    1351              :        */
+    1352              :       iterator
+    1353              :       upper_bound(const key_type& __x)
+    1354              :       { return _M_t.upper_bound(__x); }
+    1355              : 
+    1356              : #if __cplusplus > 201103L
+    1357              :       template<typename _Kt>
+    1358              :         auto
+    1359              :         upper_bound(const _Kt& __x)
+    1360              :         -> decltype(iterator(_M_t._M_upper_bound_tr(__x)))
+    1361              :         { return iterator(_M_t._M_upper_bound_tr(__x)); }
+    1362              : #endif
+    1363              :       ///@}
+    1364              : 
+    1365              :       ///@{
+    1366              :       /**
+    1367              :        *  @brief Finds the end of a subsequence matching given key.
+    1368              :        *  @param  __x  Key of (key, value) pair to be located.
+    1369              :        *  @return  Read-only (constant) iterator pointing to first iterator
+    1370              :        *           greater than key, or end().
+    1371              :        */
+    1372              :       const_iterator
+    1373              :       upper_bound(const key_type& __x) const
+    1374              :       { return _M_t.upper_bound(__x); }
+    1375              : 
+    1376              : #if __cplusplus > 201103L
+    1377              :       template<typename _Kt>
+    1378              :         auto
+    1379              :         upper_bound(const _Kt& __x) const
+    1380              :         -> decltype(const_iterator(_M_t._M_upper_bound_tr(__x)))
+    1381              :         { return const_iterator(_M_t._M_upper_bound_tr(__x)); }
+    1382              : #endif
+    1383              :       ///@}
+    1384              : 
+    1385              :       ///@{
+    1386              :       /**
+    1387              :        *  @brief Finds a subsequence matching given key.
+    1388              :        *  @param  __x  Key of (key, value) pairs to be located.
+    1389              :        *  @return  Pair of iterators that possibly points to the subsequence
+    1390              :        *           matching given key.
+    1391              :        *
+    1392              :        *  This function is equivalent to
+    1393              :        *  @code
+    1394              :        *    std::make_pair(c.lower_bound(val),
+    1395              :        *                   c.upper_bound(val))
+    1396              :        *  @endcode
+    1397              :        *  (but is faster than making the calls separately).
+    1398              :        *
+    1399              :        *  This function probably only makes sense for multimaps.
+    1400              :        */
+    1401              :       std::pair<iterator, iterator>
+    1402              :       equal_range(const key_type& __x)
+    1403              :       { return _M_t.equal_range(__x); }
+    1404              : 
+    1405              : #if __cplusplus > 201103L
+    1406              :       template<typename _Kt>
+    1407              :         auto
+    1408              :         equal_range(const _Kt& __x)
+    1409              :         -> decltype(pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)))
+    1410              :         { return pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)); }
+    1411              : #endif
+    1412              :       ///@}
+    1413              : 
+    1414              :       ///@{
+    1415              :       /**
+    1416              :        *  @brief Finds a subsequence matching given key.
+    1417              :        *  @param  __x  Key of (key, value) pairs to be located.
+    1418              :        *  @return  Pair of read-only (constant) iterators that possibly points
+    1419              :        *           to the subsequence matching given key.
+    1420              :        *
+    1421              :        *  This function is equivalent to
+    1422              :        *  @code
+    1423              :        *    std::make_pair(c.lower_bound(val),
+    1424              :        *                   c.upper_bound(val))
+    1425              :        *  @endcode
+    1426              :        *  (but is faster than making the calls separately).
+    1427              :        *
+    1428              :        *  This function probably only makes sense for multimaps.
+    1429              :        */
+    1430              :       std::pair<const_iterator, const_iterator>
+    1431              :       equal_range(const key_type& __x) const
+    1432              :       { return _M_t.equal_range(__x); }
+    1433              : 
+    1434              : #if __cplusplus > 201103L
+    1435              :       template<typename _Kt>
+    1436              :         auto
+    1437              :         equal_range(const _Kt& __x) const
+    1438              :         -> decltype(pair<const_iterator, const_iterator>(
+    1439              :               _M_t._M_equal_range_tr(__x)))
+    1440              :         {
+    1441              :           return pair<const_iterator, const_iterator>(
+    1442              :               _M_t._M_equal_range_tr(__x));
+    1443              :         }
+    1444              : #endif
+    1445              :       ///@}
+    1446              : 
+    1447              :       template<typename _K1, typename _T1, typename _C1, typename _A1>
+    1448              :         friend bool
+    1449              :         operator==(const map<_K1, _T1, _C1, _A1>&,
+    1450              :                    const map<_K1, _T1, _C1, _A1>&);
+    1451              : 
+    1452              : #if __cpp_lib_three_way_comparison
+    1453              :       template<typename _K1, typename _T1, typename _C1, typename _A1>
+    1454              :         friend __detail::__synth3way_t<pair<const _K1, _T1>>
+    1455              :         operator<=>(const map<_K1, _T1, _C1, _A1>&,
+    1456              :                     const map<_K1, _T1, _C1, _A1>&);
+    1457              : #else
+    1458              :       template<typename _K1, typename _T1, typename _C1, typename _A1>
+    1459              :         friend bool
+    1460              :         operator<(const map<_K1, _T1, _C1, _A1>&,
+    1461              :                   const map<_K1, _T1, _C1, _A1>&);
+    1462              : #endif
+    1463              :     };
+    1464              : 
+    1465              : 
+    1466              : #if __cpp_deduction_guides >= 201606
+    1467              : 
+    1468              :   template<typename _InputIterator,
+    1469              :            typename _Compare = less<__iter_key_t<_InputIterator>>,
+    1470              :            typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
+    1471              :            typename = _RequireInputIter<_InputIterator>,
+    1472              :            typename = _RequireNotAllocator<_Compare>,
+    1473              :            typename = _RequireAllocator<_Allocator>>
+    1474              :     map(_InputIterator, _InputIterator,
+    1475              :         _Compare = _Compare(), _Allocator = _Allocator())
+    1476              :     -> map<__iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>,
+    1477              :            _Compare, _Allocator>;
+    1478              : 
+    1479              :   template<typename _Key, typename _Tp, typename _Compare = less<_Key>,
+    1480              :            typename _Allocator = allocator<pair<const _Key, _Tp>>,
+    1481              :            typename = _RequireNotAllocator<_Compare>,
+    1482              :            typename = _RequireAllocator<_Allocator>>
+    1483              :     map(initializer_list<pair<_Key, _Tp>>,
+    1484              :         _Compare = _Compare(), _Allocator = _Allocator())
+    1485              :     -> map<_Key, _Tp, _Compare, _Allocator>;
+    1486              : 
+    1487              :   template <typename _InputIterator, typename _Allocator,
+    1488              :             typename = _RequireInputIter<_InputIterator>,
+    1489              :             typename = _RequireAllocator<_Allocator>>
+    1490              :     map(_InputIterator, _InputIterator, _Allocator)
+    1491              :     -> map<__iter_key_t<_InputIterator>, __iter_val_t<_InputIterator>,
+    1492              :            less<__iter_key_t<_InputIterator>>, _Allocator>;
+    1493              : 
+    1494              :   template<typename _Key, typename _Tp, typename _Allocator,
+    1495              :            typename = _RequireAllocator<_Allocator>>
+    1496              :     map(initializer_list<pair<_Key, _Tp>>, _Allocator)
+    1497              :     -> map<_Key, _Tp, less<_Key>, _Allocator>;
+    1498              : 
+    1499              : #endif // deduction guides
+    1500              : 
+    1501              :   /**
+    1502              :    *  @brief  Map equality comparison.
+    1503              :    *  @param  __x  A %map.
+    1504              :    *  @param  __y  A %map of the same type as @a x.
+    1505              :    *  @return  True iff the size and elements of the maps are equal.
+    1506              :    *
+    1507              :    *  This is an equivalence relation.  It is linear in the size of the
+    1508              :    *  maps.  Maps are considered equivalent if their sizes are equal,
+    1509              :    *  and if corresponding elements compare equal.
+    1510              :   */
+    1511              :   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    1512              :     inline bool
+    1513            0 :     operator==(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+    1514              :                const map<_Key, _Tp, _Compare, _Alloc>& __y)
+    1515            0 :     { return __x._M_t == __y._M_t; }
+    1516              : 
+    1517              : #if __cpp_lib_three_way_comparison
+    1518              :   /**
+    1519              :    *  @brief  Map ordering relation.
+    1520              :    *  @param  __x  A `map`.
+    1521              :    *  @param  __y  A `map` of the same type as `x`.
+    1522              :    *  @return  A value indicating whether `__x` is less than, equal to,
+    1523              :    *           greater than, or incomparable with `__y`.
+    1524              :    *
+    1525              :    *  This is a total ordering relation.  It is linear in the size of the
+    1526              :    *  maps.  The elements must be comparable with @c <.
+    1527              :    *
+    1528              :    *  See `std::lexicographical_compare_three_way()` for how the determination
+    1529              :    *  is made. This operator is used to synthesize relational operators like
+    1530              :    *  `<` and `>=` etc.
+    1531              :   */
+    1532              :   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    1533              :     inline __detail::__synth3way_t<pair<const _Key, _Tp>>
+    1534              :     operator<=>(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+    1535              :                 const map<_Key, _Tp, _Compare, _Alloc>& __y)
+    1536              :     { return __x._M_t <=> __y._M_t; }
+    1537              : #else
+    1538              :   /**
+    1539              :    *  @brief  Map ordering relation.
+    1540              :    *  @param  __x  A %map.
+    1541              :    *  @param  __y  A %map of the same type as @a x.
+    1542              :    *  @return  True iff @a x is lexicographically less than @a y.
+    1543              :    *
+    1544              :    *  This is a total ordering relation.  It is linear in the size of the
+    1545              :    *  maps.  The elements must be comparable with @c <.
+    1546              :    *
+    1547              :    *  See std::lexicographical_compare() for how the determination is made.
+    1548              :   */
+    1549              :   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    1550              :     inline bool
+    1551              :     operator<(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+    1552              :               const map<_Key, _Tp, _Compare, _Alloc>& __y)
+    1553              :     { return __x._M_t < __y._M_t; }
+    1554              : 
+    1555              :   /// Based on operator==
+    1556              :   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    1557              :     inline bool
+    1558              :     operator!=(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+    1559              :                const map<_Key, _Tp, _Compare, _Alloc>& __y)
+    1560              :     { return !(__x == __y); }
+    1561              : 
+    1562              :   /// Based on operator<
+    1563              :   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    1564              :     inline bool
+    1565              :     operator>(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+    1566              :               const map<_Key, _Tp, _Compare, _Alloc>& __y)
+    1567              :     { return __y < __x; }
+    1568              : 
+    1569              :   /// Based on operator<
+    1570              :   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    1571              :     inline bool
+    1572              :     operator<=(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+    1573              :                const map<_Key, _Tp, _Compare, _Alloc>& __y)
+    1574              :     { return !(__y < __x); }
+    1575              : 
+    1576              :   /// Based on operator<
+    1577              :   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    1578              :     inline bool
+    1579              :     operator>=(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+    1580              :                const map<_Key, _Tp, _Compare, _Alloc>& __y)
+    1581              :     { return !(__x < __y); }
+    1582              : #endif // three-way comparison
+    1583              : 
+    1584              :   /// See std::map::swap().
+    1585              :   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+    1586              :     inline void
+    1587              :     swap(map<_Key, _Tp, _Compare, _Alloc>& __x,
+    1588              :          map<_Key, _Tp, _Compare, _Alloc>& __y)
+    1589              :     _GLIBCXX_NOEXCEPT_IF(noexcept(__x.swap(__y)))
+    1590              :     { __x.swap(__y); }
+    1591              : 
+    1592              : _GLIBCXX_END_NAMESPACE_CONTAINER
+    1593              : 
+    1594              : #if __cplusplus > 201402L
+    1595              :   // Allow std::map access to internals of compatible maps.
+    1596              :   template<typename _Key, typename _Val, typename _Cmp1, typename _Alloc,
+    1597              :            typename _Cmp2>
+    1598              :     struct
+    1599              :     _Rb_tree_merge_helper<_GLIBCXX_STD_C::map<_Key, _Val, _Cmp1, _Alloc>,
+    1600              :                           _Cmp2>
+    1601              :     {
+    1602              :     private:
+    1603              :       friend class _GLIBCXX_STD_C::map<_Key, _Val, _Cmp1, _Alloc>;
+    1604              : 
+    1605              :       static auto&
+    1606              :       _S_get_tree(_GLIBCXX_STD_C::map<_Key, _Val, _Cmp2, _Alloc>& __map)
+    1607              :       { return __map._M_t; }
+    1608              : 
+    1609              :       static auto&
+    1610              :       _S_get_tree(_GLIBCXX_STD_C::multimap<_Key, _Val, _Cmp2, _Alloc>& __map)
+    1611              :       { return __map._M_t; }
+    1612              :     };
+    1613              : #endif // C++17
+    1614              : 
+    1615              : _GLIBCXX_END_NAMESPACE_VERSION
+    1616              : } // namespace std
+    1617              : 
+    1618              : #endif /* _STL_MAP_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_numeric.h.func-c.html b/html/usr/include/c++/13/bits/stl_numeric.h.func-c.html new file mode 100644 index 0000000..15bb2e2 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_numeric.h.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_numeric.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_numeric.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %99
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt4iotaIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiEvT_S7_T0_3316
_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEdET0_T_S8_S7_401880
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_numeric.h.func.html b/html/usr/include/c++/13/bits/stl_numeric.h.func.html new file mode 100644 index 0000000..54d5a4c --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_numeric.h.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_numeric.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_numeric.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %99
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt10accumulateIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEdET0_T_S8_S7_401880
_ZSt4iotaIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEEiEvT_S7_T0_3316
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_numeric.h.gcov.html b/html/usr/include/c++/13/bits/stl_numeric.h.gcov.html new file mode 100644 index 0000000..a9aad6b --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_numeric.h.gcov.html @@ -0,0 +1,487 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_numeric.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_numeric.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %99
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Numeric functions implementation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1996,1997
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/stl_numeric.h
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{numeric}
+      54              :  */
+      55              : 
+      56              : #ifndef _STL_NUMERIC_H
+      57              : #define _STL_NUMERIC_H 1
+      58              : 
+      59              : #include <bits/concept_check.h>
+      60              : #include <debug/debug.h>
+      61              : #include <bits/move.h> // For _GLIBCXX_MOVE
+      62              : 
+      63              : 
+      64              : namespace std _GLIBCXX_VISIBILITY(default)
+      65              : {
+      66              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      67              : 
+      68              :   /** @defgroup numeric_ops Generalized Numeric operations
+      69              :    *  @ingroup algorithms
+      70              :    */
+      71              : 
+      72              : #if __cplusplus >= 201103L
+      73              :   /**
+      74              :    *  @brief  Create a range of sequentially increasing values.
+      75              :    *
+      76              :    *  For each element in the range @p [first,last) assigns @p value and
+      77              :    *  increments @p value as if by @p ++value.
+      78              :    *
+      79              :    *  @param  __first  Start of range.
+      80              :    *  @param  __last  End of range.
+      81              :    *  @param  __value  Starting value.
+      82              :    *  @return  Nothing.
+      83              :    *  @ingroup numeric_ops
+      84              :    */
+      85              :   template<typename _ForwardIterator, typename _Tp>
+      86              :     _GLIBCXX20_CONSTEXPR
+      87              :     void
+      88         3316 :     iota(_ForwardIterator __first, _ForwardIterator __last, _Tp __value)
+      89              :     {
+      90              :       // concept requirements
+      91              :       __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
+      92              :                                   _ForwardIterator>)
+      93              :       __glibcxx_function_requires(_ConvertibleConcept<_Tp,
+      94              :             typename iterator_traits<_ForwardIterator>::value_type>)
+      95              :       __glibcxx_requires_valid_range(__first, __last);
+      96              : 
+      97        23352 :       for (; __first != __last; ++__first)
+      98              :         {
+      99        20036 :           *__first = __value;
+     100        20036 :           ++__value;
+     101              :         }
+     102         3316 :     }
+     103              : #endif
+     104              : 
+     105              : _GLIBCXX_END_NAMESPACE_VERSION
+     106              : 
+     107              : _GLIBCXX_BEGIN_NAMESPACE_ALGO
+     108              : 
+     109              : #if __cplusplus > 201703L
+     110              : // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     111              : // DR 2055. std::move in std::accumulate and other algorithms
+     112              : # define _GLIBCXX_MOVE_IF_20(_E) std::move(_E)
+     113              : #else
+     114              : # define _GLIBCXX_MOVE_IF_20(_E) _E
+     115              : #endif
+     116              : 
+     117              :   /// @addtogroup numeric_ops
+     118              :   /// @{
+     119              : 
+     120              :   /**
+     121              :    *  @brief  Accumulate values in a range.
+     122              :    *
+     123              :    *  Accumulates the values in the range [first,last) using operator+().  The
+     124              :    *  initial value is @a init.  The values are processed in order.
+     125              :    *
+     126              :    *  @param  __first  Start of range.
+     127              :    *  @param  __last  End of range.
+     128              :    *  @param  __init  Starting value to add other values to.
+     129              :    *  @return  The final sum.
+     130              :    */
+     131              :   template<typename _InputIterator, typename _Tp>
+     132              :     _GLIBCXX20_CONSTEXPR
+     133              :     inline _Tp
+     134       401880 :     accumulate(_InputIterator __first, _InputIterator __last, _Tp __init)
+     135              :     {
+     136              :       // concept requirements
+     137              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+     138              :       __glibcxx_requires_valid_range(__first, __last);
+     139              : 
+     140      1992028 :       for (; __first != __last; ++__first)
+     141      1590148 :         __init = _GLIBCXX_MOVE_IF_20(__init) + *__first;
+     142       401880 :       return __init;
+     143              :     }
+     144              : 
+     145              :   /**
+     146              :    *  @brief  Accumulate values in a range with operation.
+     147              :    *
+     148              :    *  Accumulates the values in the range `[first,last)` using the function
+     149              :    *  object `__binary_op`.  The initial value is `__init`.  The values are
+     150              :    *  processed in order.
+     151              :    *
+     152              :    *  @param  __first  Start of range.
+     153              :    *  @param  __last  End of range.
+     154              :    *  @param  __init  Starting value to add other values to.
+     155              :    *  @param  __binary_op  Function object to accumulate with.
+     156              :    *  @return  The final sum.
+     157              :    */
+     158              :   template<typename _InputIterator, typename _Tp, typename _BinaryOperation>
+     159              :     _GLIBCXX20_CONSTEXPR
+     160              :     inline _Tp
+     161              :     accumulate(_InputIterator __first, _InputIterator __last, _Tp __init,
+     162              :                _BinaryOperation __binary_op)
+     163              :     {
+     164              :       // concept requirements
+     165              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+     166              :       __glibcxx_requires_valid_range(__first, __last);
+     167              : 
+     168              :       for (; __first != __last; ++__first)
+     169              :         __init = __binary_op(_GLIBCXX_MOVE_IF_20(__init), *__first);
+     170              :       return __init;
+     171              :     }
+     172              : 
+     173              :   /**
+     174              :    *  @brief  Compute inner product of two ranges.
+     175              :    *
+     176              :    *  Starting with an initial value of @p __init, multiplies successive
+     177              :    *  elements from the two ranges and adds each product into the accumulated
+     178              :    *  value using operator+().  The values in the ranges are processed in
+     179              :    *  order.
+     180              :    *
+     181              :    *  @param  __first1  Start of range 1.
+     182              :    *  @param  __last1  End of range 1.
+     183              :    *  @param  __first2  Start of range 2.
+     184              :    *  @param  __init  Starting value to add other values to.
+     185              :    *  @return  The final inner product.
+     186              :    */
+     187              :   template<typename _InputIterator1, typename _InputIterator2, typename _Tp>
+     188              :     _GLIBCXX20_CONSTEXPR
+     189              :     inline _Tp
+     190              :     inner_product(_InputIterator1 __first1, _InputIterator1 __last1,
+     191              :                   _InputIterator2 __first2, _Tp __init)
+     192              :     {
+     193              :       // concept requirements
+     194              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+     195              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+     196              :       __glibcxx_requires_valid_range(__first1, __last1);
+     197              : 
+     198              :       for (; __first1 != __last1; ++__first1, (void)++__first2)
+     199              :         __init = _GLIBCXX_MOVE_IF_20(__init) + (*__first1 * *__first2);
+     200              :       return __init;
+     201              :     }
+     202              : 
+     203              :   /**
+     204              :    *  @brief  Compute inner product of two ranges.
+     205              :    *
+     206              :    *  Starting with an initial value of @p __init, applies @p __binary_op2 to
+     207              :    *  successive elements from the two ranges and accumulates each result into
+     208              :    *  the accumulated value using @p __binary_op1.  The values in the ranges are
+     209              :    *  processed in order.
+     210              :    *
+     211              :    *  @param  __first1  Start of range 1.
+     212              :    *  @param  __last1  End of range 1.
+     213              :    *  @param  __first2  Start of range 2.
+     214              :    *  @param  __init  Starting value to add other values to.
+     215              :    *  @param  __binary_op1  Function object to accumulate with.
+     216              :    *  @param  __binary_op2  Function object to apply to pairs of input values.
+     217              :    *  @return  The final inner product.
+     218              :    */
+     219              :   template<typename _InputIterator1, typename _InputIterator2, typename _Tp,
+     220              :            typename _BinaryOperation1, typename _BinaryOperation2>
+     221              :     _GLIBCXX20_CONSTEXPR
+     222              :     inline _Tp
+     223              :     inner_product(_InputIterator1 __first1, _InputIterator1 __last1,
+     224              :                   _InputIterator2 __first2, _Tp __init,
+     225              :                   _BinaryOperation1 __binary_op1,
+     226              :                   _BinaryOperation2 __binary_op2)
+     227              :     {
+     228              :       // concept requirements
+     229              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
+     230              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
+     231              :       __glibcxx_requires_valid_range(__first1, __last1);
+     232              : 
+     233              :       for (; __first1 != __last1; ++__first1, (void)++__first2)
+     234              :         __init = __binary_op1(_GLIBCXX_MOVE_IF_20(__init),
+     235              :                               __binary_op2(*__first1, *__first2));
+     236              :       return __init;
+     237              :     }
+     238              : 
+     239              :   /**
+     240              :    *  @brief  Return list of partial sums
+     241              :    *
+     242              :    *  Accumulates the values in the range [first,last) using the @c + operator.
+     243              :    *  As each successive input value is added into the total, that partial sum
+     244              :    *  is written to @p __result.  Therefore, the first value in @p __result is
+     245              :    *  the first value of the input, the second value in @p __result is the sum
+     246              :    *  of the first and second input values, and so on.
+     247              :    *
+     248              :    *  @param  __first  Start of input range.
+     249              :    *  @param  __last  End of input range.
+     250              :    *  @param  __result  Output sum.
+     251              :    *  @return  Iterator pointing just beyond the values written to __result.
+     252              :    */
+     253              :   template<typename _InputIterator, typename _OutputIterator>
+     254              :     _GLIBCXX20_CONSTEXPR
+     255              :     _OutputIterator
+     256              :     partial_sum(_InputIterator __first, _InputIterator __last,
+     257              :                 _OutputIterator __result)
+     258              :     {
+     259              :       typedef typename iterator_traits<_InputIterator>::value_type _ValueType;
+     260              : 
+     261              :       // concept requirements
+     262              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+     263              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+     264              :                                                          _ValueType>)
+     265              :       __glibcxx_requires_valid_range(__first, __last);
+     266              : 
+     267              :       if (__first == __last)
+     268              :         return __result;
+     269              :       _ValueType __value = *__first;
+     270              :       *__result = __value;
+     271              :       while (++__first != __last)
+     272              :         {
+     273              :           __value = _GLIBCXX_MOVE_IF_20(__value) + *__first;
+     274              :           *++__result = __value;
+     275              :         }
+     276              :       return ++__result;
+     277              :     }
+     278              : 
+     279              :   /**
+     280              :    *  @brief  Return list of partial sums
+     281              :    *
+     282              :    *  Accumulates the values in the range [first,last) using @p __binary_op.
+     283              :    *  As each successive input value is added into the total, that partial sum
+     284              :    *  is written to @p __result.  Therefore, the first value in @p __result is
+     285              :    *  the first value of the input, the second value in @p __result is the sum
+     286              :    *  of the first and second input values, and so on.
+     287              :    *
+     288              :    *  @param  __first  Start of input range.
+     289              :    *  @param  __last  End of input range.
+     290              :    *  @param  __result  Output sum.
+     291              :    *  @param  __binary_op  Function object.
+     292              :    *  @return  Iterator pointing just beyond the values written to __result.
+     293              :    */
+     294              :   template<typename _InputIterator, typename _OutputIterator,
+     295              :            typename _BinaryOperation>
+     296              :     _GLIBCXX20_CONSTEXPR
+     297              :     _OutputIterator
+     298              :     partial_sum(_InputIterator __first, _InputIterator __last,
+     299              :                 _OutputIterator __result, _BinaryOperation __binary_op)
+     300              :     {
+     301              :       typedef typename iterator_traits<_InputIterator>::value_type _ValueType;
+     302              : 
+     303              :       // concept requirements
+     304              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+     305              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+     306              :                                                          _ValueType>)
+     307              :       __glibcxx_requires_valid_range(__first, __last);
+     308              : 
+     309              :       if (__first == __last)
+     310              :         return __result;
+     311              :       _ValueType __value = *__first;
+     312              :       *__result = __value;
+     313              :       while (++__first != __last)
+     314              :         {
+     315              :           __value = __binary_op(_GLIBCXX_MOVE_IF_20(__value), *__first);
+     316              :           *++__result = __value;
+     317              :         }
+     318              :       return ++__result;
+     319              :     }
+     320              : 
+     321              :   /**
+     322              :    *  @brief  Return differences between adjacent values.
+     323              :    *
+     324              :    *  Computes the difference between adjacent values in the range
+     325              :    *  [first,last) using operator-() and writes the result to @p __result.
+     326              :    *
+     327              :    *  @param  __first  Start of input range.
+     328              :    *  @param  __last  End of input range.
+     329              :    *  @param  __result  Output sums.
+     330              :    *  @return  Iterator pointing just beyond the values written to result.
+     331              :    */
+     332              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     333              :   // DR 539. partial_sum and adjacent_difference should mention requirements
+     334              :   template<typename _InputIterator, typename _OutputIterator>
+     335              :     _GLIBCXX20_CONSTEXPR
+     336              :     _OutputIterator
+     337              :     adjacent_difference(_InputIterator __first,
+     338              :                         _InputIterator __last, _OutputIterator __result)
+     339              :     {
+     340              :       typedef typename iterator_traits<_InputIterator>::value_type _ValueType;
+     341              : 
+     342              :       // concept requirements
+     343              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+     344              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+     345              :                                                          _ValueType>)
+     346              :       __glibcxx_requires_valid_range(__first, __last);
+     347              : 
+     348              :       if (__first == __last)
+     349              :         return __result;
+     350              :       _ValueType __value = *__first;
+     351              :       *__result = __value;
+     352              :       while (++__first != __last)
+     353              :         {
+     354              :           _ValueType __tmp = *__first;
+     355              :           *++__result = __tmp - _GLIBCXX_MOVE_IF_20(__value);
+     356              :           __value = _GLIBCXX_MOVE(__tmp);
+     357              :         }
+     358              :       return ++__result;
+     359              :     }
+     360              : 
+     361              :   /**
+     362              :    *  @brief  Return differences between adjacent values.
+     363              :    *
+     364              :    *  Computes the difference between adjacent values in the range
+     365              :    *  [__first,__last) using the function object @p __binary_op and writes the
+     366              :    *  result to @p __result.
+     367              :    *
+     368              :    *  @param  __first  Start of input range.
+     369              :    *  @param  __last  End of input range.
+     370              :    *  @param  __result  Output sum.
+     371              :    *  @param  __binary_op Function object.
+     372              :    *  @return  Iterator pointing just beyond the values written to result.
+     373              :    */
+     374              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     375              :   // DR 539. partial_sum and adjacent_difference should mention requirements
+     376              :   template<typename _InputIterator, typename _OutputIterator,
+     377              :            typename _BinaryOperation>
+     378              :     _GLIBCXX20_CONSTEXPR
+     379              :     _OutputIterator
+     380              :     adjacent_difference(_InputIterator __first, _InputIterator __last,
+     381              :                         _OutputIterator __result, _BinaryOperation __binary_op)
+     382              :     {
+     383              :       typedef typename iterator_traits<_InputIterator>::value_type _ValueType;
+     384              : 
+     385              :       // concept requirements
+     386              :       __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
+     387              :       __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
+     388              :                                                          _ValueType>)
+     389              :       __glibcxx_requires_valid_range(__first, __last);
+     390              : 
+     391              :       if (__first == __last)
+     392              :         return __result;
+     393              :       _ValueType __value = *__first;
+     394              :       *__result = __value;
+     395              :       while (++__first != __last)
+     396              :         {
+     397              :           _ValueType __tmp = *__first;
+     398              :           *++__result = __binary_op(__tmp, _GLIBCXX_MOVE_IF_20(__value));
+     399              :           __value = _GLIBCXX_MOVE(__tmp);
+     400              :         }
+     401              :       return ++__result;
+     402              :     }
+     403              : 
+     404              :   /// @} group numeric_ops
+     405              : 
+     406              : #undef _GLIBCXX_MOVE_IF_20
+     407              : 
+     408              : _GLIBCXX_END_NAMESPACE_ALGO
+     409              : } // namespace std
+     410              : 
+     411              : #endif /* _STL_NUMERIC_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_pair.h.func-c.html b/html/usr/include/c++/13/bits/stl_pair.h.func-c.html new file mode 100644 index 0000000..a8cddf7 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_pair.h.func-c.html @@ -0,0 +1,1454 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_pair.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_pair.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:71.4 %4230
Test Date:2024-04-30 13:17:26Functions:88.8 %179159
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEC2ISA_iLb1EEEv0
_ZNSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESA_EC2ISA_SA_Lb1EEEv0
_ZNSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEC2ISA_iLb1EEEv0
_ZNSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEaSERKSB_0
_ZNSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESA_EaSERKSB_0
_ZNSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEaSERKSB_0
_ZNSt4pairIifE4swapERS0_0
_ZNSt4pairIfS_IiiEE4swapERS1_0
_ZNSt4pairIifE4swapERS0_0
_ZNSt4pairIiiE4swapERS0_0
_ZSt4swapIifENSt9enable_ifIXsrSt6__and_IJSt14__is_swappableIT_ES2_IT0_EEE5valueEvE4typeERSt4pairIS3_S5_ESC_0
_ZSt4swapIfSt4pairIiiEENSt9enable_ifIXsrSt6__and_IJSt14__is_swappableIT_ES4_IT0_EEE5valueEvE4typeERS0_IS5_S7_ESD_0
_ZSt4swapIifENSt9enable_ifIXsrSt6__and_IJSt14__is_swappableIT_ES2_IT0_EEE5valueEvE4typeERSt4pairIS3_S5_ESC_0
_ZSt4swapIiiENSt9enable_ifIXsrSt6__and_IJSt14__is_swappableIT_ES2_IT0_EEE5valueEvE4typeERSt4pairIS3_S5_ESC_0
_ZSteqIiiEbRKSt4pairIT_T0_ES5_286
_ZSteqIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvEEEbRKSt4pairIT_T0_ESL_0
_ZSteqINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EbRKSt4pairIT_T0_ESB_94
_ZSteqIiiEbRKSt4pairIT_T0_ES5_192
_ZNSt10__pair_getILm0EE10__move_getIiiEEOT_OSt4pairIS2_T0_E4274
_ZNSt10__pair_getILm0EE10__move_getIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEEOT_OSt4pairISJ_T0_E110
_ZNSt10__pair_getILm0EE10__move_getIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERDnEEOT_OSt4pairISA_T0_E116
_ZNSt10__pair_getILm0EE10__move_getISt6vectorIiSaIiEES4_EEOT_OSt4pairIS5_T0_E250
_ZNSt10__pair_getILm0EE10__move_getIfSt4pairIiiEEEOT_OS2_IS4_T0_E952
_ZNSt10__pair_getILm0EE10__move_getIiiEEOT_OSt4pairIS2_T0_E1078
_ZNSt10__pair_getILm0EE10__move_getINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EEOT_OSt4pairIS8_T0_E1768
_ZNSt10__pair_getILm1EE10__move_getIiiEEOT0_OSt4pairIT_S2_E4274
_ZNSt10__pair_getILm1EE10__move_getIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEEOT0_OSt4pairIT_SJ_E110
_ZNSt10__pair_getILm1EE10__move_getIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERDnEEOT0_OSt4pairIT_SA_E116
_ZNSt10__pair_getILm1EE10__move_getISt6vectorIiSaIiEES4_EEOT0_OSt4pairIT_S5_E250
_ZNSt10__pair_getILm1EE10__move_getIfSt4pairIiiEEEOT0_OS2_IT_S4_E952
_ZNSt10__pair_getILm1EE10__move_getIiiEEOT0_OSt4pairIT_S2_E1078
_ZNSt10__pair_getILm1EE10__move_getINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EEOT0_OSt4pairIT_S8_E1768
_ZSt3getILm0EiiEONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOS4_8548
_ZSt3getILm0ERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvEEEONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOSL_110
_ZSt3getILm1ERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvEEEONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOSL_110
_ZSt3getILm0ERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERDnEONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOSC_116
_ZSt3getILm1ERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERDnEONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOSC_116
_ZSt3getILm0ESt6vectorIiSaIiEES2_EONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOS7_250
_ZSt3getILm1ESt6vectorIiSaIiEES2_EONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOS7_250
_ZSt3getILm0EfSt4pairIiiEEONSt13tuple_elementIXT_ES0_IT0_T1_EE4typeEOS5_952
_ZSt3getILm1EfSt4pairIiiEEONSt13tuple_elementIXT_ES0_IT0_T1_EE4typeEOS5_952
_ZSt3getILm0EiiEONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOS4_1078
_ZSt3getILm1EiiEONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOS4_1078
_ZSt3getILm0ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOSA_1768
_ZSt3getILm1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOSA_1768
_ZNSt4pairIifEaSEOS0_13226
_ZNSt4pairIifEaSEOS0_322
_ZNSt4pairIfS_IiiEEaSEOS1_6452
_ZNSt4pairIiiEaSEOS0_6452
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2EOS6_18706
_ZNSt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEEC2EOSG_0
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2EOS6_18706
_ZSt9make_pairIccESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS1_INS2_IT0_E4typeEE6__typeEEOS3_OS8_39996
_ZSt9make_pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS7_INS8_IT0_E4typeEE6__typeEEOS9_OSE_0
_ZSt9make_pairIccESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS1_INS2_IT0_E4typeEE6__typeEEOS3_OS8_0
_ZSt9make_pairImmESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS1_INS2_IT0_E4typeEE6__typeEEOS3_OS8_39996
_ZNSt10__pair_getILm0EE5__getIKidEERT_RSt4pairIS3_T0_E141914
_ZNSt10__pair_getILm0EE5__getIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEERT_RSt4pairISC_T0_E848
_ZNSt10__pair_getILm0EE5__getIKiSt6vectorIiSaIiEEEERT_RSt4pairIS6_T0_E1018
_ZNSt10__pair_getILm0EE5__getIKidEERT_RSt4pairIS3_T0_E140048
_ZNSt10__pair_getILm1EE5__getIKidEERT0_RSt4pairIT_S3_E141914
_ZNSt10__pair_getILm1EE5__getIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEERT0_RSt4pairIT_SC_E848
_ZNSt10__pair_getILm1EE5__getIKiSt6vectorIiSaIiEEEERT0_RSt4pairIT_S6_E1018
_ZNSt10__pair_getILm1EE5__getIKidEERT0_RSt4pairIT_S3_E140048
_ZSt3getILm0EKidERNSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeERS5_283828
_ZSt3getILm0EKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEERNSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeERSE_848
_ZSt3getILm1EKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEERNSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeERSE_848
_ZSt3getILm0EKiSt6vectorIiSaIiEEERNSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeERS8_1018
_ZSt3getILm1EKiSt6vectorIiSaIiEEERNSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeERS8_1018
_ZSt3getILm0EKidERNSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeERS5_140048
_ZSt3getILm1EKidERNSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeERS5_140048
_ZNSt4pairIccEC1IccLb1EEEOT_OT0_3760138
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvEEEC2IS5_DnLb1EEEOT_OT0_0
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRPKcSA_Lb1EEEOT_OT0_0
_ZNSt4pairIPS_IfS_IiiEElEC2IS2_iLb1EEEOT_OT0_0
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKllEERS1_Lb1EEEOT_OT0_0
_ZNSt4pairIccEC1IccLb1EEEOT_OT0_0
_ZNSt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEEC2IRlRKSF_Lb1EEEOT_OT0_0
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC1IRA4_KcfLb1EEEOT_OT0_2
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC1IRA5_KcfLb1EEEOT_OT0_2
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC1IRA11_KcRA6_S8_Lb1EEEOT_OT0_2
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC1IRA11_KcSA_Lb1EEEOT_OT0_2
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC1IRA12_KcRA11_S8_Lb1EEEOT_OT0_2
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC1IRA12_KcRA1_S8_Lb1EEEOT_OT0_2
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC1IRA12_KcSA_Lb1EEEOT_OT0_2
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC1IRA9_KcRA1_S8_Lb1EEEOT_OT0_2
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IS5_RA12_KcLb1EEEOT_OT0_2
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IS5_RA13_KcLb1EEEOT_OT0_2
_ZNSt4pairINSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEEbEC2IS8_bLb1EEEOT_OT0_2
_ZNSt4pairISt17_Rb_tree_iteratorIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEESC_EC2ISC_SC_Lb1EEEOT_OT0_2
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC1IRA6_KcRA11_S8_Lb1EEEOT_OT0_4
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC1IRA6_KcRA12_S8_Lb1EEEOT_OT0_4
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IS5_RA15_KcLb1EEEOT_OT0_4
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA15_KcPNS7_9BoostAODEELb1EEEOT_OT0_8
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA16_KcPNS7_9BoostAODEELb1EEEOT_OT0_8
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_IdSaIdEESaIS9_EEEC1IRA15_KcRSB_Lb1EEEOT_OT0_8
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_IdSaIdEESaIS9_EEEC1IRA16_KcRSB_Lb1EEEOT_OT0_8
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_IdSaIdEESaIS9_EEEC1IRA4_KcRSB_Lb1EEEOT_OT0_8
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_IdSaIdEESaIS9_EEEC1IRA6_KcRSB_Lb1EEEOT_OT0_8
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC1IRA4_KcdLb1EEEOT_OT0_8
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC1IRA2_KcSA_Lb1EEEOT_OT0_10
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC1IRA5_KcdLb1EEEOT_OT0_16
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA10_KcPNS7_9BoostAODEELb1EEEOT_OT0_32
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA4_KcPNS7_3KDBELb1EEEOT_OT0_32
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA5_KcPNS7_4AODEELb1EEEOT_OT0_32
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA6_KcPNS7_5KDBLdELb1EEEOT_OT0_32
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA6_KcPNS7_5TANLdELb1EEEOT_OT0_32
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA7_KcPNS7_6AODELdELb1EEEOT_OT0_32
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA8_KcPNS7_7SPODELdELb1EEEOT_OT0_32
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC1IRA9_KcdLb1EEEOT_OT0_32
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA5_KcRA10_S8_Lb1EEEOT_OT0_32
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA5_KcRA7_S8_Lb1EEEOT_OT0_32
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA5_KcRA8_S8_Lb1EEEOT_OT0_32
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA9_KcRA10_S8_Lb1EEEOT_OT0_32
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA9_KcRA7_S8_Lb1EEEOT_OT0_32
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA9_KcRA8_S8_Lb1EEEOT_OT0_32
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IRS5_RiLb1EEEOT_OT0_32
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorISC_IdSaIdEESaISE_EEEERS1_Lb1EEEOT_OT0_32
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKS_IiiEdEERS1_Lb1EEEOT_OT0_32
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC1IRA5_KcdLb1EEEOT_OT0_34
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA4_KcPNS7_3TANELb1EEEOT_OT0_40
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA6_KcPNS7_5SPODEELb1EEEOT_OT0_40
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA5_KcSA_Lb1EEEOT_OT0_48
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA9_KcRA5_S8_Lb1EEEOT_OT0_48
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorSA_blmdSaNSD_14adl_serializerESG_IhSaIhEEvEEEERS1_Lb1EEEOT_OT0_50
_ZNSt4pairIPS_IfS_IiiEElEC2IRS2_RlLb1EEEOT_OT0_58
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC1IRA6_KcdLb1EEEOT_OT0_64
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA6_KcRA10_S8_Lb1EEEOT_OT0_64
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA6_KcRA7_S8_Lb1EEEOT_OT0_64
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA6_KcRA8_S8_Lb1EEEOT_OT0_64
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRKS5_RS5_Lb1EEEOT_OT0_64
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IRA5_KciLb1EEEOT_OT0_64
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IRA9_KciLb1EEEOT_OT0_64
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEERS1_Lb1EEEOT_OT0_64
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA5_KcRA4_S8_Lb1EEEOT_OT0_72
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA9_KcRA4_S8_Lb1EEEOT_OT0_72
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_ES_ISt6vectorIiSaIiEESD_IdSaIdEEEEERS1_Lb1EEEOT_OT0_80
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEERS1_Lb1EEEOT_OT0_90
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA5_KcRA6_S8_Lb1EEEOT_OT0_96
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA6_KcRA5_S8_Lb1EEEOT_OT0_96
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA9_KcRA6_S8_Lb1EEEOT_OT0_96
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES_IiSt6vectorIiSaIiEEEEERS1_Lb1EEEOT_OT0_96
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEERS1_Lb1EEEOT_OT0_98
_ZNSt4pairISt17_Rb_tree_iteratorIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEESI_EC2ISI_SI_Lb1EEEOT_OT0_104
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvEEEC2IS5_SF_Lb1EEEOT_OT0_110
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IRA6_KciLb1EEEOT_OT0_128
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA6_KcRA4_S8_Lb1EEEOT_OT0_144
_ZNSt4pairIifEC2IRiRdLb1EEEOT_OT0_152
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS_IiiESaISE_EEEERS1_Lb1EEEOT_OT0_160
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA6_KcSA_Lb1EEEOT_OT0_192
_ZNSt4pairISt17_Rb_tree_iteratorIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEbEC2IRSI_bLb1EEEOT_OT0_226
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKiSt6vectorIiSaIiEEEERS1_Lb1EEEOT_OT0_250
_ZNSt4pairISt6vectorIiSaIiEES2_EC2IRS2_S5_Lb1EEEOT_OT0_250
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEERS1_Lb1EEEOT_OT0_286
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_EfEERS1_Lb1EEEOT_OT0_544
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISE_EEEERS1_Lb1EEEOT_OT0_600
_ZNSt4pairIiiEC2IRiS2_Lb1EEEOT_OT0_1470
_ZNSt4pairIiiEC2IRiRKiLb1EEEOT_OT0_1770
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRS5_RKS5_Lb1EEEOT_OT0_1800
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IS5_S5_Lb1EEEOT_OT0_1934
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRS5_S8_Lb1EEEOT_OT0_5198
_ZNSt4pairImmEC2ImmLb1EEEOT_OT0_39996
_ZNSt4pairINSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEEbEC2IRS8_bLb1EEEOT_OT0_61194
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEERS1_Lb1EEEOT_OT0_402966
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRS1_S4_Lb1EEEOT_OT0_3238376
_ZNSt4pairIiiEC2IiiLb1EEERKiS3_15791996
_ZNSt4pairIKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ES_ISt6vectorIiSaIiEES8_IdSaIdEEEEC2IS7_SD_Lb1EEERS7_RKSD_96
_ZNSt4pairISt6vectorIiSaIiEES0_IdSaIdEEEC2IS2_S4_Lb1EEERKS2_RKS4_96
_ZNSt4pairIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvEEEC2IS6_SG_Lb1EEES6_SG_110
_ZNSt4pairIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERDnEC2IS6_S7_Lb1EEES6_S7_116
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES_IiSt6vectorIiSaIiEEEEC2IS6_SA_Lb1EEERS6_RKSA_128
_ZNSt4pairIiSt6vectorIiSaIiEEEC2IiS2_Lb1EEERKiRKS2_128
_ZNSt4pairIKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS_IiiESaIS9_EEEC2IS7_SB_Lb1EEERS7_RKSB_256
_ZNSt4pairIKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EfEC2IS7_fLb1EEERS7_RKf1152
_ZNSt4pairIfS_IiiEEC2IfS0_Lb1EEERKfRKS0_1152
_ZNSt4pairIiiEC2IiiLb1EEERKiS3_2544
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IS1_S1_Lb1EEERKS1_S5_15786218
_ZNSt4pairIiSt6vectorIiSaIiEEEC2ERKS3_30235734
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_IdSaIdEESaIS9_EEEC2ERKSC_32
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC2ERKS6_48
_ZNSt4pairIKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ES_ISt6vectorIiSaIiEES8_IdSaIdEEEEC2ERKSE_96
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvEEEC2ERKSG_118
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES_IiSt6vectorIiSaIiEEEEC2ERKSB_128
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC2ERKS7_134
_ZNSt4pairISt6vectorIiSaIiEES0_IdSaIdEEEC2ERKS5_192
_ZNSt4pairIKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS_IiiESaIS9_EEEC2ERKSC_256
_ZNSt4pairIiSt6vectorIiSaIiEEEC2ERKS3_256
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2ERKSA_320
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2ERKS6_512
_ZNSt4pairIKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EfEC2ERKS8_1152
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2ERKS6_6024
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEC2ERKSA_14178
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2ERKS7_30212288
_ZStltIiiEbRKSt4pairIT_T0_ES5_48354438
_ZStltINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEbRKSt4pairIT_T0_ESB_1036
_ZStltINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EbRKSt4pairIT_T0_ESB_6246
_ZStltIiiEbRKSt4pairIT_T0_ES5_48347156
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_pair.h.func.html b/html/usr/include/c++/13/bits/stl_pair.h.func.html new file mode 100644 index 0000000..458e75f --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_pair.h.func.html @@ -0,0 +1,1454 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_pair.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_pair.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:71.4 %4230
Test Date:2024-04-30 13:17:26Functions:88.8 %179159
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt10__pair_getILm0EE10__move_getIiiEEOT_OSt4pairIS2_T0_E4274
_ZNSt10__pair_getILm0EE10__move_getINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EEOT_OSt4pairIS8_T0_E1768
_ZNSt10__pair_getILm0EE10__move_getIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERDnEEOT_OSt4pairISA_T0_E116
_ZNSt10__pair_getILm0EE10__move_getIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEEOT_OSt4pairISJ_T0_E110
_ZNSt10__pair_getILm0EE10__move_getISt6vectorIiSaIiEES4_EEOT_OSt4pairIS5_T0_E250
_ZNSt10__pair_getILm0EE10__move_getIfSt4pairIiiEEEOT_OS2_IS4_T0_E952
_ZNSt10__pair_getILm0EE10__move_getIiiEEOT_OSt4pairIS2_T0_E1078
_ZNSt10__pair_getILm0EE5__getIKidEERT_RSt4pairIS3_T0_E141914
_ZNSt10__pair_getILm0EE5__getIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEERT_RSt4pairISC_T0_E848
_ZNSt10__pair_getILm0EE5__getIKiSt6vectorIiSaIiEEEERT_RSt4pairIS6_T0_E1018
_ZNSt10__pair_getILm0EE5__getIKidEERT_RSt4pairIS3_T0_E140048
_ZNSt10__pair_getILm1EE10__move_getIiiEEOT0_OSt4pairIT_S2_E4274
_ZNSt10__pair_getILm1EE10__move_getINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EEOT0_OSt4pairIT_S8_E1768
_ZNSt10__pair_getILm1EE10__move_getIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERDnEEOT0_OSt4pairIT_SA_E116
_ZNSt10__pair_getILm1EE10__move_getIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEEOT0_OSt4pairIT_SJ_E110
_ZNSt10__pair_getILm1EE10__move_getISt6vectorIiSaIiEES4_EEOT0_OSt4pairIT_S5_E250
_ZNSt10__pair_getILm1EE10__move_getIfSt4pairIiiEEEOT0_OS2_IT_S4_E952
_ZNSt10__pair_getILm1EE10__move_getIiiEEOT0_OSt4pairIT_S2_E1078
_ZNSt10__pair_getILm1EE5__getIKidEERT0_RSt4pairIT_S3_E141914
_ZNSt10__pair_getILm1EE5__getIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEERT0_RSt4pairIT_SC_E848
_ZNSt10__pair_getILm1EE5__getIKiSt6vectorIiSaIiEEEERT0_RSt4pairIT_S6_E1018
_ZNSt10__pair_getILm1EE5__getIKidEERT0_RSt4pairIT_S3_E140048
_ZNSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEC2ISA_iLb1EEEv0
_ZNSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESA_EC2ISA_SA_Lb1EEEv0
_ZNSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEC2ISA_iLb1EEEv0
_ZNSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEaSERKSB_0
_ZNSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESA_EaSERKSB_0
_ZNSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEaSERKSB_0
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2EOS6_18706
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2EOS6_18706
_ZNSt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEEC2EOSG_0
_ZNSt4pairIccEC1IccLb1EEEOT_OT0_3760138
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvEEEC2IS5_DnLb1EEEOT_OT0_0
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvEEEC2IS5_SF_Lb1EEEOT_OT0_110
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA10_KcPNS7_9BoostAODEELb1EEEOT_OT0_32
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA15_KcPNS7_9BoostAODEELb1EEEOT_OT0_8
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA16_KcPNS7_9BoostAODEELb1EEEOT_OT0_8
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA4_KcPNS7_3KDBELb1EEEOT_OT0_32
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA4_KcPNS7_3TANELb1EEEOT_OT0_40
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA5_KcPNS7_4AODEELb1EEEOT_OT0_32
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA6_KcPNS7_5KDBLdELb1EEEOT_OT0_32
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA6_KcPNS7_5SPODEELb1EEEOT_OT0_40
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA6_KcPNS7_5TANLdELb1EEEOT_OT0_32
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA7_KcPNS7_6AODELdELb1EEEOT_OT0_32
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IRA8_KcPNS7_7SPODELdELb1EEEOT_OT0_32
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_IdSaIdEESaIS9_EEEC1IRA15_KcRSB_Lb1EEEOT_OT0_8
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_IdSaIdEESaIS9_EEEC1IRA16_KcRSB_Lb1EEEOT_OT0_8
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_IdSaIdEESaIS9_EEEC1IRA4_KcRSB_Lb1EEEOT_OT0_8
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_IdSaIdEESaIS9_EEEC1IRA6_KcRSB_Lb1EEEOT_OT0_8
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC1IRA4_KcfLb1EEEOT_OT0_2
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC1IRA5_KcdLb1EEEOT_OT0_34
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC1IRA5_KcfLb1EEEOT_OT0_2
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC1IRA6_KcdLb1EEEOT_OT0_64
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC1IRA9_KcdLb1EEEOT_OT0_32
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC1IRA11_KcRA6_S8_Lb1EEEOT_OT0_2
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC1IRA11_KcSA_Lb1EEEOT_OT0_2
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC1IRA12_KcRA11_S8_Lb1EEEOT_OT0_2
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC1IRA12_KcRA1_S8_Lb1EEEOT_OT0_2
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC1IRA12_KcSA_Lb1EEEOT_OT0_2
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC1IRA2_KcSA_Lb1EEEOT_OT0_10
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC1IRA6_KcRA11_S8_Lb1EEEOT_OT0_4
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC1IRA6_KcRA12_S8_Lb1EEEOT_OT0_4
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC1IRA9_KcRA1_S8_Lb1EEEOT_OT0_2
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA5_KcRA10_S8_Lb1EEEOT_OT0_32
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA5_KcRA4_S8_Lb1EEEOT_OT0_72
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA5_KcRA6_S8_Lb1EEEOT_OT0_96
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA5_KcRA7_S8_Lb1EEEOT_OT0_32
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA5_KcRA8_S8_Lb1EEEOT_OT0_32
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA5_KcSA_Lb1EEEOT_OT0_48
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA6_KcRA10_S8_Lb1EEEOT_OT0_64
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA6_KcRA4_S8_Lb1EEEOT_OT0_144
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA6_KcRA5_S8_Lb1EEEOT_OT0_96
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA6_KcRA7_S8_Lb1EEEOT_OT0_64
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA6_KcRA8_S8_Lb1EEEOT_OT0_64
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA6_KcSA_Lb1EEEOT_OT0_192
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA9_KcRA10_S8_Lb1EEEOT_OT0_32
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA9_KcRA4_S8_Lb1EEEOT_OT0_72
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA9_KcRA5_S8_Lb1EEEOT_OT0_48
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA9_KcRA6_S8_Lb1EEEOT_OT0_96
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA9_KcRA7_S8_Lb1EEEOT_OT0_32
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRA9_KcRA8_S8_Lb1EEEOT_OT0_32
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRKS5_RS5_Lb1EEEOT_OT0_64
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRPKcSA_Lb1EEEOT_OT0_0
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRS5_RKS5_Lb1EEEOT_OT0_1800
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IRS5_S8_Lb1EEEOT_OT0_5198
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IS5_RA12_KcLb1EEEOT_OT0_2
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IS5_RA13_KcLb1EEEOT_OT0_2
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IS5_RA15_KcLb1EEEOT_OT0_4
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2IS5_S5_Lb1EEEOT_OT0_1934
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC1IRA4_KcdLb1EEEOT_OT0_8
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC1IRA5_KcdLb1EEEOT_OT0_16
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IRA5_KciLb1EEEOT_OT0_64
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IRA6_KciLb1EEEOT_OT0_128
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IRA9_KciLb1EEEOT_OT0_64
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IRS5_RiLb1EEEOT_OT0_32
_ZNSt4pairINSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEEbEC2IRS8_bLb1EEEOT_OT0_61194
_ZNSt4pairINSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEEbEC2IS8_bLb1EEEOT_OT0_2
_ZNSt4pairIPS_IfS_IiiEElEC2IRS2_RlLb1EEEOT_OT0_58
_ZNSt4pairIPS_IfS_IiiEElEC2IS2_iLb1EEEOT_OT0_0
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorSA_blmdSaNSD_14adl_serializerESG_IhSaIhEEvEEEERS1_Lb1EEEOT_OT0_50
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEERS1_Lb1EEEOT_OT0_90
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEERS1_Lb1EEEOT_OT0_64
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES_IiSt6vectorIiSaIiEEEEERS1_Lb1EEEOT_OT0_96
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISE_EEEERS1_Lb1EEEOT_OT0_600
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorISC_IdSaIdEESaISE_EEEERS1_Lb1EEEOT_OT0_32
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEERS1_Lb1EEEOT_OT0_286
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEERS1_Lb1EEEOT_OT0_98
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEERS1_Lb1EEEOT_OT0_402966
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_ES_ISt6vectorIiSaIiEESD_IdSaIdEEEEERS1_Lb1EEEOT_OT0_80
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_EfEERS1_Lb1EEEOT_OT0_544
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS_IiiESaISE_EEEERS1_Lb1EEEOT_OT0_160
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKS_IiiEdEERS1_Lb1EEEOT_OT0_32
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKiSt6vectorIiSaIiEEEERS1_Lb1EEEOT_OT0_250
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRPSt13_Rb_tree_nodeIS_IKllEERS1_Lb1EEEOT_OT0_0
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IRS1_S4_Lb1EEEOT_OT0_3238376
_ZNSt4pairISt17_Rb_tree_iteratorIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEESI_EC2ISI_SI_Lb1EEEOT_OT0_104
_ZNSt4pairISt17_Rb_tree_iteratorIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEbEC2IRSI_bLb1EEEOT_OT0_226
_ZNSt4pairISt17_Rb_tree_iteratorIS_IKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEESC_EC2ISC_SC_Lb1EEEOT_OT0_2
_ZNSt4pairISt6vectorIiSaIiEES2_EC2IRS2_S5_Lb1EEEOT_OT0_250
_ZNSt4pairIccEC1IccLb1EEEOT_OT0_0
_ZNSt4pairIifEC2IRiRdLb1EEEOT_OT0_152
_ZNSt4pairIiiEC2IRiRKiLb1EEEOT_OT0_1770
_ZNSt4pairIiiEC2IRiS2_Lb1EEEOT_OT0_1470
_ZNSt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEEC2IRlRKSF_Lb1EEEOT_OT0_0
_ZNSt4pairImmEC2ImmLb1EEEOT_OT0_39996
_ZNSt4pairIiSt6vectorIiSaIiEEEC2ERKS3_30235734
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvEEEC2ERKSG_118
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2ERKSA_320
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES_IiSt6vectorIiSaIiEEEEC2ERKSB_128
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_IdSaIdEESaIS9_EEEC2ERKSC_32
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEC2ERKSA_14178
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC2ERKS7_134
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2ERKS7_30212288
_ZNSt4pairIKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ES_ISt6vectorIiSaIiEES8_IdSaIdEEEEC2ERKSE_96
_ZNSt4pairIKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EfEC2ERKS8_1152
_ZNSt4pairIKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS_IiiESaIS9_EEEC2ERKSC_256
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EC2ERKS6_6024
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC2ERKS6_48
_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2ERKS6_512
_ZNSt4pairISt6vectorIiSaIiEES0_IdSaIdEEEC2ERKS5_192
_ZNSt4pairIiSt6vectorIiSaIiEEEC2ERKS3_256
_ZNSt4pairIifE4swapERS0_0
_ZNSt4pairIfS_IiiEE4swapERS1_0
_ZNSt4pairIifE4swapERS0_0
_ZNSt4pairIiiE4swapERS0_0
_ZNSt4pairIifEaSEOS0_13226
_ZNSt4pairIfS_IiiEEaSEOS1_6452
_ZNSt4pairIifEaSEOS0_322
_ZNSt4pairIiiEaSEOS0_6452
_ZNSt4pairIiiEC2IiiLb1EEERKiS3_15791996
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES_IiSt6vectorIiSaIiEEEEC2IS6_SA_Lb1EEERS6_RKSA_128
_ZNSt4pairIKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ES_ISt6vectorIiSaIiEES8_IdSaIdEEEEC2IS7_SD_Lb1EEERS7_RKSD_96
_ZNSt4pairIKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EfEC2IS7_fLb1EEERS7_RKf1152
_ZNSt4pairIKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS_IiiESaIS9_EEEC2IS7_SB_Lb1EEERS7_RKSB_256
_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2IS1_S1_Lb1EEERKS1_S5_15786218
_ZNSt4pairIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERDnEC2IS6_S7_Lb1EEES6_S7_116
_ZNSt4pairIRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvEEEC2IS6_SG_Lb1EEES6_SG_110
_ZNSt4pairISt6vectorIiSaIiEES0_IdSaIdEEEC2IS2_S4_Lb1EEERKS2_RKS4_96
_ZNSt4pairIfS_IiiEEC2IfS0_Lb1EEERKfRKS0_1152
_ZNSt4pairIiSt6vectorIiSaIiEEEC2IiS2_Lb1EEERKiRKS2_128
_ZNSt4pairIiiEC2IiiLb1EEERKiS3_2544
_ZSt3getILm0EKidERNSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeERS5_283828
_ZSt3getILm0EKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEERNSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeERSE_848
_ZSt3getILm0EKiSt6vectorIiSaIiEEERNSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeERS8_1018
_ZSt3getILm0EKidERNSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeERS5_140048
_ZSt3getILm1EKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEERNSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeERSE_848
_ZSt3getILm1EKiSt6vectorIiSaIiEEERNSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeERS8_1018
_ZSt3getILm1EKidERNSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeERS5_140048
_ZSt3getILm0EiiEONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOS4_8548
_ZSt3getILm0ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOSA_1768
_ZSt3getILm0ERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERDnEONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOSC_116
_ZSt3getILm0ERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvEEEONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOSL_110
_ZSt3getILm0ESt6vectorIiSaIiEES2_EONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOS7_250
_ZSt3getILm0EfSt4pairIiiEEONSt13tuple_elementIXT_ES0_IT0_T1_EE4typeEOS5_952
_ZSt3getILm0EiiEONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOS4_1078
_ZSt3getILm1ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOSA_1768
_ZSt3getILm1ERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERDnEONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOSC_116
_ZSt3getILm1ERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvEEEONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOSL_110
_ZSt3getILm1ESt6vectorIiSaIiEES2_EONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOS7_250
_ZSt3getILm1EfSt4pairIiiEEONSt13tuple_elementIXT_ES0_IT0_T1_EE4typeEOS5_952
_ZSt3getILm1EiiEONSt13tuple_elementIXT_ESt4pairIT0_T1_EE4typeEOS4_1078
_ZSt4swapIifENSt9enable_ifIXsrSt6__and_IJSt14__is_swappableIT_ES2_IT0_EEE5valueEvE4typeERSt4pairIS3_S5_ESC_0
_ZSt4swapIfSt4pairIiiEENSt9enable_ifIXsrSt6__and_IJSt14__is_swappableIT_ES4_IT0_EEE5valueEvE4typeERS0_IS5_S7_ESD_0
_ZSt4swapIifENSt9enable_ifIXsrSt6__and_IJSt14__is_swappableIT_ES2_IT0_EEE5valueEvE4typeERSt4pairIS3_S5_ESC_0
_ZSt4swapIiiENSt9enable_ifIXsrSt6__and_IJSt14__is_swappableIT_ES2_IT0_EEE5valueEvE4typeERSt4pairIS3_S5_ESC_0
_ZSt9make_pairIccESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS1_INS2_IT0_E4typeEE6__typeEEOS3_OS8_39996
_ZSt9make_pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS7_INS8_IT0_E4typeEE6__typeEEOS9_OSE_0
_ZSt9make_pairIccESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS1_INS2_IT0_E4typeEE6__typeEEOS3_OS8_0
_ZSt9make_pairImmESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS1_INS2_IT0_E4typeEE6__typeEEOS3_OS8_39996
_ZSteqIiiEbRKSt4pairIT_T0_ES5_286
_ZSteqIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvEEEbRKSt4pairIT_T0_ESL_0
_ZSteqINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EbRKSt4pairIT_T0_ESB_94
_ZSteqIiiEbRKSt4pairIT_T0_ES5_192
_ZStltIiiEbRKSt4pairIT_T0_ES5_48354438
_ZStltINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EbRKSt4pairIT_T0_ESB_6246
_ZStltINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEbRKSt4pairIT_T0_ESB_1036
_ZStltIiiEbRKSt4pairIT_T0_ES5_48347156
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_pair.h.gcov.html b/html/usr/include/c++/13/bits/stl_pair.h.gcov.html new file mode 100644 index 0000000..362239d --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_pair.h.gcov.html @@ -0,0 +1,1197 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_pair.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_pair.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:71.4 %4230
Test Date:2024-04-30 13:17:26Functions:88.8 %179159
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Pair implementation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1996,1997
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/stl_pair.h
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{utility}
+      54              :  */
+      55              : 
+      56              : #ifndef _STL_PAIR_H
+      57              : #define _STL_PAIR_H 1
+      58              : 
+      59              : #if __cplusplus >= 201103L
+      60              : # include <type_traits>    // for std::__decay_and_strip
+      61              : # include <bits/move.h>    // for std::move / std::forward, and std::swap
+      62              : # include <bits/utility.h> // for std::tuple_element, std::tuple_size
+      63              : #endif
+      64              : #if __cplusplus >= 202002L
+      65              : # include <compare>
+      66              : # define __cpp_lib_constexpr_utility 201811L
+      67              : #endif
+      68              : 
+      69              : namespace std _GLIBCXX_VISIBILITY(default)
+      70              : {
+      71              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      72              : 
+      73              :   /**
+      74              :    *  @addtogroup utilities
+      75              :    *  @{
+      76              :    */
+      77              : 
+      78              : #if __cplusplus >= 201103L
+      79              :   /// Tag type for piecewise construction of std::pair objects.
+      80              :   struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
+      81              : 
+      82              :   /// Tag for piecewise construction of std::pair objects.
+      83              :   _GLIBCXX17_INLINE constexpr piecewise_construct_t piecewise_construct =
+      84              :     piecewise_construct_t();
+      85              : 
+      86              :   /// @cond undocumented
+      87              : 
+      88              :   // Forward declarations.
+      89              :   template<typename...>
+      90              :     class tuple;
+      91              : 
+      92              :   template<size_t...>
+      93              :     struct _Index_tuple;
+      94              : 
+      95              : #if ! __cpp_lib_concepts
+      96              :   // Concept utility functions, reused in conditionally-explicit
+      97              :   // constructors.
+      98              :   // See PR 70437, don't look at is_constructible or
+      99              :   // is_convertible if the types are the same to
+     100              :   // avoid querying those properties for incomplete types.
+     101              :   template <bool, typename _T1, typename _T2>
+     102              :     struct _PCC
+     103              :     {
+     104              :       template <typename _U1, typename _U2>
+     105              :       static constexpr bool _ConstructiblePair()
+     106              :       {
+     107              :         return __and_<is_constructible<_T1, const _U1&>,
+     108              :                       is_constructible<_T2, const _U2&>>::value;
+     109              :       }
+     110              : 
+     111              :       template <typename _U1, typename _U2>
+     112              :       static constexpr bool _ImplicitlyConvertiblePair()
+     113              :       {
+     114              :         return __and_<is_convertible<const _U1&, _T1>,
+     115              :                       is_convertible<const _U2&, _T2>>::value;
+     116              :       }
+     117              : 
+     118              :       template <typename _U1, typename _U2>
+     119              :       static constexpr bool _MoveConstructiblePair()
+     120              :       {
+     121              :         return __and_<is_constructible<_T1, _U1&&>,
+     122              :                       is_constructible<_T2, _U2&&>>::value;
+     123              :       }
+     124              : 
+     125              :       template <typename _U1, typename _U2>
+     126              :       static constexpr bool _ImplicitlyMoveConvertiblePair()
+     127              :       {
+     128              :         return __and_<is_convertible<_U1&&, _T1>,
+     129              :                       is_convertible<_U2&&, _T2>>::value;
+     130              :       }
+     131              :     };
+     132              : 
+     133              :   template <typename _T1, typename _T2>
+     134              :     struct _PCC<false, _T1, _T2>
+     135              :     {
+     136              :       template <typename _U1, typename _U2>
+     137              :       static constexpr bool _ConstructiblePair()
+     138              :       {
+     139              :         return false;
+     140              :       }
+     141              : 
+     142              :       template <typename _U1, typename _U2>
+     143              :       static constexpr bool _ImplicitlyConvertiblePair()
+     144              :       {
+     145              :         return false;
+     146              :       }
+     147              : 
+     148              :       template <typename _U1, typename _U2>
+     149              :       static constexpr bool _MoveConstructiblePair()
+     150              :       {
+     151              :         return false;
+     152              :       }
+     153              : 
+     154              :       template <typename _U1, typename _U2>
+     155              :       static constexpr bool _ImplicitlyMoveConvertiblePair()
+     156              :       {
+     157              :         return false;
+     158              :       }
+     159              :     };
+     160              : #endif // lib concepts
+     161              : #endif // C++11
+     162              : 
+     163              :   template<typename _U1, typename _U2> class __pair_base
+     164              :   {
+     165              : #if __cplusplus >= 201103L && ! __cpp_lib_concepts
+     166              :     template<typename _T1, typename _T2> friend struct pair;
+     167              :     __pair_base() = default;
+     168              :     ~__pair_base() = default;
+     169              :     __pair_base(const __pair_base&) = default;
+     170              :     __pair_base& operator=(const __pair_base&) = delete;
+     171              : #endif // C++11
+     172              :   };
+     173              : 
+     174              :   /// @endcond
+     175              : 
+     176              :  /**
+     177              :    *  @brief Struct holding two objects of arbitrary type.
+     178              :    *
+     179              :    *  @tparam _T1  Type of first object.
+     180              :    *  @tparam _T2  Type of second object.
+     181              :    *
+     182              :    *  <https://gcc.gnu.org/onlinedocs/libstdc++/manual/utilities.html>
+     183              :    *
+     184              :    * @headerfile utility
+     185              :    */
+     186              :   template<typename _T1, typename _T2>
+     187              :     struct pair
+     188              :     : public __pair_base<_T1, _T2>
+     189              :     {
+     190              :       typedef _T1 first_type;    ///< The type of the `first` member
+     191              :       typedef _T2 second_type;   ///< The type of the `second` member
+     192              : 
+     193              :       _T1 first;                 ///< The first member
+     194              :       _T2 second;                ///< The second member
+     195              : 
+     196              : #if __cplusplus >= 201103L
+     197     30235734 :       constexpr pair(const pair&) = default;        ///< Copy constructor
+     198        18706 :       constexpr pair(pair&&) = default;         ///< Move constructor
+     199              : 
+     200              :       template<typename... _Args1, typename... _Args2>
+     201              :         _GLIBCXX20_CONSTEXPR
+     202              :         pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);
+     203              : 
+     204              :       /// Swap the first members and then the second members.
+     205              :       _GLIBCXX20_CONSTEXPR void
+     206            0 :       swap(pair& __p)
+     207              :       noexcept(__and_<__is_nothrow_swappable<_T1>,
+     208              :                       __is_nothrow_swappable<_T2>>::value)
+     209              :       {
+     210              :         using std::swap;
+     211            0 :         swap(first, __p.first);
+     212            0 :         swap(second, __p.second);
+     213            0 :       }
+     214              : 
+     215              : #if __cplusplus > 202002L
+     216              :       // As an extension, we constrain the const swap member function in order
+     217              :       // to continue accepting explicit instantiation of pairs whose elements
+     218              :       // are not all const swappable.  Without this constraint, such an
+     219              :       // explicit instantiation would also instantiate the ill-formed body of
+     220              :       // this function and yield a hard error.  This constraint shouldn't
+     221              :       // affect the behavior of valid programs.
+     222              :       constexpr void
+     223              :       swap(const pair& __p) const
+     224              :       noexcept(__and_v<__is_nothrow_swappable<const _T1>,
+     225              :                        __is_nothrow_swappable<const _T2>>)
+     226              :       requires is_swappable_v<const _T1> && is_swappable_v<const _T2>
+     227              :       {
+     228              :         using std::swap;
+     229              :         swap(first, __p.first);
+     230              :         swap(second, __p.second);
+     231              :       }
+     232              : #endif // C++23
+     233              : 
+     234              :     private:
+     235              :       template<typename... _Args1, size_t... _Indexes1,
+     236              :                typename... _Args2, size_t... _Indexes2>
+     237              :         _GLIBCXX20_CONSTEXPR
+     238              :         pair(tuple<_Args1...>&, tuple<_Args2...>&,
+     239              :              _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>);
+     240              :     public:
+     241              : 
+     242              : #if __cpp_lib_concepts
+     243              :       // C++20 implementation using concepts, explicit(bool), fully constexpr.
+     244              : 
+     245              :       /// Default constructor
+     246              :       constexpr
+     247              :       explicit(__not_<__and_<__is_implicitly_default_constructible<_T1>,
+     248              :                              __is_implicitly_default_constructible<_T2>>>())
+     249              :       pair()
+     250              :       requires is_default_constructible_v<_T1>
+     251              :                && is_default_constructible_v<_T2>
+     252              :       : first(), second()
+     253              :       { }
+     254              : 
+     255              :     private:
+     256              : 
+     257              :       /// @cond undocumented
+     258              :       template<typename _U1, typename _U2>
+     259              :         static constexpr bool
+     260              :         _S_constructible()
+     261              :         {
+     262              :           if constexpr (is_constructible_v<_T1, _U1>)
+     263              :             return is_constructible_v<_T2, _U2>;
+     264              :           return false;
+     265              :         }
+     266              : 
+     267              :       template<typename _U1, typename _U2>
+     268              :         static constexpr bool
+     269              :         _S_nothrow_constructible()
+     270              :         {
+     271              :           if constexpr (is_nothrow_constructible_v<_T1, _U1>)
+     272              :             return is_nothrow_constructible_v<_T2, _U2>;
+     273              :           return false;
+     274              :         }
+     275              : 
+     276              :       template<typename _U1, typename _U2>
+     277              :         static constexpr bool
+     278              :         _S_convertible()
+     279              :         {
+     280              :           if constexpr (is_convertible_v<_U1, _T1>)
+     281              :             return is_convertible_v<_U2, _T2>;
+     282              :           return false;
+     283              :         }
+     284              : 
+     285              :       // True if construction from _U1 and _U2 would create a dangling ref.
+     286              :       template<typename _U1, typename _U2>
+     287              :         static constexpr bool
+     288              :         _S_dangles()
+     289              :         {
+     290              : #if __has_builtin(__reference_constructs_from_temporary)
+     291              :           if constexpr (__reference_constructs_from_temporary(_T1, _U1&&))
+     292              :             return true;
+     293              :           else
+     294              :             return __reference_constructs_from_temporary(_T2, _U2&&);
+     295              : #else
+     296              :           return false;
+     297              : #endif
+     298              :         }
+     299              :       /// @endcond
+     300              : 
+     301              :     public:
+     302              : 
+     303              :       /// Constructor accepting lvalues of `first_type` and `second_type`
+     304              :       constexpr explicit(!_S_convertible<const _T1&, const _T2&>())
+     305              :       pair(const _T1& __x, const _T2& __y)
+     306              :       noexcept(_S_nothrow_constructible<const _T1&, const _T2&>())
+     307              :       requires (_S_constructible<const _T1&, const _T2&>())
+     308              :       : first(__x), second(__y)
+     309              :       { }
+     310              : 
+     311              :       /// Constructor accepting two values of arbitrary types
+     312              :       template<typename _U1, typename _U2>
+     313              :         requires (_S_constructible<_U1, _U2>()) && (!_S_dangles<_U1, _U2>())
+     314              :         constexpr explicit(!_S_convertible<_U1, _U2>())
+     315              :         pair(_U1&& __x, _U2&& __y)
+     316              :         noexcept(_S_nothrow_constructible<_U1, _U2>())
+     317              :         : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y))
+     318              :         { }
+     319              : 
+     320              :       template<typename _U1, typename _U2>
+     321              :         requires (_S_constructible<_U1, _U2>()) && (_S_dangles<_U1, _U2>())
+     322              :         constexpr explicit(!_S_convertible<_U1, _U2>())
+     323              :         pair(_U1&&, _U2&&) = delete;
+     324              : 
+     325              :       /// Converting constructor from a const `pair<U1, U2>` lvalue
+     326              :       template<typename _U1, typename _U2>
+     327              :         requires (_S_constructible<const _U1&, const _U2&>())
+     328              :           && (!_S_dangles<_U1, _U2>())
+     329              :         constexpr explicit(!_S_convertible<const _U1&, const _U2&>())
+     330              :         pair(const pair<_U1, _U2>& __p)
+     331              :         noexcept(_S_nothrow_constructible<const _U1&, const _U2&>())
+     332              :         : first(__p.first), second(__p.second)
+     333              :         { }
+     334              : 
+     335              :       template<typename _U1, typename _U2>
+     336              :         requires (_S_constructible<const _U1&, const _U2&>())
+     337              :               && (_S_dangles<const _U1&, const _U2&>())
+     338              :         constexpr explicit(!_S_convertible<const _U1&, const _U2&>())
+     339              :         pair(const pair<_U1, _U2>&) = delete;
+     340              : 
+     341              :       /// Converting constructor from a non-const `pair<U1, U2>` rvalue
+     342              :       template<typename _U1, typename _U2>
+     343              :         requires (_S_constructible<_U1, _U2>()) && (!_S_dangles<_U1, _U2>())
+     344              :         constexpr explicit(!_S_convertible<_U1, _U2>())
+     345              :         pair(pair<_U1, _U2>&& __p)
+     346              :         noexcept(_S_nothrow_constructible<_U1, _U2>())
+     347              :         : first(std::forward<_U1>(__p.first)),
+     348              :           second(std::forward<_U2>(__p.second))
+     349              :         { }
+     350              : 
+     351              :       template<typename _U1, typename _U2>
+     352              :         requires (_S_constructible<_U1, _U2>()) && (_S_dangles<_U1, _U2>())
+     353              :         constexpr explicit(!_S_convertible<_U1, _U2>())
+     354              :         pair(pair<_U1, _U2>&&) = delete;
+     355              : 
+     356              : #if __cplusplus > 202002L
+     357              :       /// Converting constructor from a non-const `pair<U1, U2>` lvalue
+     358              :       template<typename _U1, typename _U2>
+     359              :         requires (_S_constructible<_U1&, _U2&>()) && (!_S_dangles<_U1&, _U2&>())
+     360              :         constexpr explicit(!_S_convertible<_U1&, _U2&>())
+     361              :         pair(pair<_U1, _U2>& __p)
+     362              :         noexcept(_S_nothrow_constructible<_U1&, _U2&>())
+     363              :         : first(__p.first), second(__p.second)
+     364              :         { }
+     365              : 
+     366              :       template<typename _U1, typename _U2>
+     367              :         requires (_S_constructible<_U1&, _U2&>()) && (_S_dangles<_U1&, _U2&>())
+     368              :         constexpr explicit(!_S_convertible<_U1&, _U2&>())
+     369              :         pair(pair<_U1, _U2>&) = delete;
+     370              : 
+     371              :       /// Converting constructor from a const `pair<U1, U2>` rvalue
+     372              :       template<typename _U1, typename _U2>
+     373              :         requires (_S_constructible<const _U1, const _U2>())
+     374              :           && (!_S_dangles<const _U1, const _U2>())
+     375              :         constexpr explicit(!_S_convertible<const _U1, const _U2>())
+     376              :         pair(const pair<_U1, _U2>&& __p)
+     377              :         noexcept(_S_nothrow_constructible<const _U1, const _U2>())
+     378              :         : first(std::forward<const _U1>(__p.first)),
+     379              :           second(std::forward<const _U2>(__p.second))
+     380              :         { }
+     381              : 
+     382              :       template<typename _U1, typename _U2>
+     383              :         requires (_S_constructible<const _U1, const _U2>())
+     384              :           && (_S_dangles<const _U1, const _U2>())
+     385              :         constexpr explicit(!_S_convertible<const _U1, const _U2>())
+     386              :         pair(const pair<_U1, _U2>&&) = delete;
+     387              : #endif // C++23
+     388              : 
+     389              :   private:
+     390              :       /// @cond undocumented
+     391              :       template<typename _U1, typename _U2>
+     392              :         static constexpr bool
+     393              :         _S_assignable()
+     394              :         {
+     395              :           if constexpr (is_assignable_v<_T1&, _U1>)
+     396              :             return is_assignable_v<_T2&, _U2>;
+     397              :           return false;
+     398              :         }
+     399              : 
+     400              :       template<typename _U1, typename _U2>
+     401              :         static constexpr bool
+     402              :         _S_nothrow_assignable()
+     403              :         {
+     404              :           if constexpr (is_nothrow_assignable_v<_T1&, _U1>)
+     405              :             return is_nothrow_assignable_v<_T2&, _U2>;
+     406              :           return false;
+     407              :         }
+     408              :       /// @endcond
+     409              : 
+     410              :   public:
+     411              : 
+     412              :       pair& operator=(const pair&) = delete;
+     413              : 
+     414              :       /// Copy assignment operator
+     415              :       constexpr pair&
+     416              :       operator=(const pair& __p)
+     417              :       noexcept(_S_nothrow_assignable<const _T1&, const _T2&>())
+     418              :       requires (_S_assignable<const _T1&, const _T2&>())
+     419              :       {
+     420              :         first = __p.first;
+     421              :         second = __p.second;
+     422              :         return *this;
+     423              :       }
+     424              : 
+     425              :       /// Move assignment operator
+     426              :       constexpr pair&
+     427              :       operator=(pair&& __p)
+     428              :       noexcept(_S_nothrow_assignable<_T1, _T2>())
+     429              :       requires (_S_assignable<_T1, _T2>())
+     430              :       {
+     431              :         first = std::forward<first_type>(__p.first);
+     432              :         second = std::forward<second_type>(__p.second);
+     433              :         return *this;
+     434              :       }
+     435              : 
+     436              :       /// Converting assignment from a const `pair<U1, U2>` lvalue
+     437              :       template<typename _U1, typename _U2>
+     438              :         constexpr pair&
+     439              :         operator=(const pair<_U1, _U2>& __p)
+     440              :         noexcept(_S_nothrow_assignable<const _U1&, const _U2&>())
+     441              :         requires (_S_assignable<const _U1&, const _U2&>())
+     442              :         {
+     443              :           first = __p.first;
+     444              :           second = __p.second;
+     445              :           return *this;
+     446              :         }
+     447              : 
+     448              :       /// Converting assignment from a non-const `pair<U1, U2>` rvalue
+     449              :       template<typename _U1, typename _U2>
+     450              :         constexpr pair&
+     451              :         operator=(pair<_U1, _U2>&& __p)
+     452              :         noexcept(_S_nothrow_assignable<_U1, _U2>())
+     453              :         requires (_S_assignable<_U1, _U2>())
+     454              :         {
+     455              :           first = std::forward<_U1>(__p.first);
+     456              :           second = std::forward<_U2>(__p.second);
+     457              :           return *this;
+     458              :         }
+     459              : 
+     460              : #if __cplusplus > 202002L
+     461              :       /// Copy assignment operator (const)
+     462              :       constexpr const pair&
+     463              :       operator=(const pair& __p) const
+     464              :       requires is_copy_assignable_v<const first_type>
+     465              :         && is_copy_assignable_v<const second_type>
+     466              :       {
+     467              :         first = __p.first;
+     468              :         second = __p.second;
+     469              :         return *this;
+     470              :       }
+     471              : 
+     472              :       /// Move assignment operator (const)
+     473              :       constexpr const pair&
+     474              :       operator=(pair&& __p) const
+     475              :       requires is_assignable_v<const first_type&, first_type>
+     476              :         && is_assignable_v<const second_type&, second_type>
+     477              :       {
+     478              :         first = std::forward<first_type>(__p.first);
+     479              :         second = std::forward<second_type>(__p.second);
+     480              :         return *this;
+     481              :       }
+     482              : 
+     483              :       /// Converting assignment from a const `pair<U1, U2>` lvalue
+     484              :       template<typename _U1, typename _U2>
+     485              :         constexpr const pair&
+     486              :         operator=(const pair<_U1, _U2>& __p) const
+     487              :         requires is_assignable_v<const first_type&, const _U1&>
+     488              :           && is_assignable_v<const second_type&, const _U2&>
+     489              :         {
+     490              :           first = __p.first;
+     491              :           second = __p.second;
+     492              :           return *this;
+     493              :         }
+     494              : 
+     495              :       /// Converting assignment from a non-const `pair<U1, U2>` rvalue
+     496              :       template<typename _U1, typename _U2>
+     497              :         constexpr const pair&
+     498              :         operator=(pair<_U1, _U2>&& __p) const
+     499              :         requires is_assignable_v<const first_type&, _U1>
+     500              :           && is_assignable_v<const second_type&, _U2>
+     501              :         {
+     502              :           first = std::forward<_U1>(__p.first);
+     503              :           second = std::forward<_U2>(__p.second);
+     504              :           return *this;
+     505              :         }
+     506              : #endif // C++23
+     507              : #else // !__cpp_lib_concepts
+     508              :       // C++11/14/17 implementation using enable_if, partially constexpr.
+     509              : 
+     510              :       /// @cond undocumented
+     511              :       // Error if construction from _U1 and _U2 would create a dangling ref.
+     512              : #if __has_builtin(__reference_constructs_from_temporary) \
+     513              :       && defined _GLIBCXX_DEBUG
+     514              : # define __glibcxx_no_dangling_refs(_U1, _U2) \
+     515              :   static_assert(!__reference_constructs_from_temporary(_T1, _U1) \
+     516              :                && !__reference_constructs_from_temporary(_T2, _U2), \
+     517              :                 "std::pair constructor creates a dangling reference")
+     518              : #else
+     519              : # define __glibcxx_no_dangling_refs(_U1, _U2)
+     520              : #endif
+     521              :       /// @endcond
+     522              : 
+     523              :       /** The default constructor creates @c first and @c second using their
+     524              :        *  respective default constructors.  */
+     525              :       template <typename _U1 = _T1,
+     526              :                 typename _U2 = _T2,
+     527              :                 typename enable_if<__and_<
+     528              :                                      __is_implicitly_default_constructible<_U1>,
+     529              :                                      __is_implicitly_default_constructible<_U2>>
+     530              :                                    ::value, bool>::type = true>
+     531            0 :       constexpr pair()
+     532            0 :       : first(), second() { }
+     533              : 
+     534              :       template <typename _U1 = _T1,
+     535              :                 typename _U2 = _T2,
+     536              :                 typename enable_if<__and_<
+     537              :                        is_default_constructible<_U1>,
+     538              :                        is_default_constructible<_U2>,
+     539              :                        __not_<
+     540              :                          __and_<__is_implicitly_default_constructible<_U1>,
+     541              :                                 __is_implicitly_default_constructible<_U2>>>>
+     542              :                                    ::value, bool>::type = false>
+     543              :       explicit constexpr pair()
+     544              :       : first(), second() { }
+     545              : 
+     546              :       // Shortcut for constraining the templates that don't take pairs.
+     547              :       /// @cond undocumented
+     548              :       using _PCCP = _PCC<true, _T1, _T2>;
+     549              :       /// @endcond
+     550              : 
+     551              :       /// Construct from two const lvalues, allowing implicit conversions.
+     552              :       template<typename _U1 = _T1, typename _U2=_T2, typename
+     553              :                enable_if<_PCCP::template
+     554              :                            _ConstructiblePair<_U1, _U2>()
+     555              :                          && _PCCP::template
+     556              :                            _ImplicitlyConvertiblePair<_U1, _U2>(),
+     557              :                          bool>::type=true>
+     558     15791996 :       constexpr pair(const _T1& __a, const _T2& __b)
+     559     15791996 :       : first(__a), second(__b) { }
+     560              : 
+     561              :       /// Construct from two const lvalues, disallowing implicit conversions.
+     562              :        template<typename _U1 = _T1, typename _U2=_T2, typename
+     563              :                 enable_if<_PCCP::template
+     564              :                             _ConstructiblePair<_U1, _U2>()
+     565              :                           && !_PCCP::template
+     566              :                             _ImplicitlyConvertiblePair<_U1, _U2>(),
+     567              :                          bool>::type=false>
+     568              :       explicit constexpr pair(const _T1& __a, const _T2& __b)
+     569              :       : first(__a), second(__b) { }
+     570              : 
+     571              :       // Shortcut for constraining the templates that take pairs.
+     572              :       /// @cond undocumented
+     573              :       template <typename _U1, typename _U2>
+     574              :         using _PCCFP = _PCC<!is_same<_T1, _U1>::value
+     575              :                             || !is_same<_T2, _U2>::value,
+     576              :                             _T1, _T2>;
+     577              :       /// @endcond
+     578              : 
+     579              :       template<typename _U1, typename _U2, typename
+     580              :                enable_if<_PCCFP<_U1, _U2>::template
+     581              :                            _ConstructiblePair<_U1, _U2>()
+     582              :                          && _PCCFP<_U1, _U2>::template
+     583              :                            _ImplicitlyConvertiblePair<_U1, _U2>(),
+     584              :                           bool>::type=true>
+     585              :         constexpr pair(const pair<_U1, _U2>& __p)
+     586              :         : first(__p.first), second(__p.second)
+     587              :         { __glibcxx_no_dangling_refs(const _U1&, const _U2&); }
+     588              : 
+     589              :       template<typename _U1, typename _U2, typename
+     590              :                enable_if<_PCCFP<_U1, _U2>::template
+     591              :                            _ConstructiblePair<_U1, _U2>()
+     592              :                          && !_PCCFP<_U1, _U2>::template
+     593              :                            _ImplicitlyConvertiblePair<_U1, _U2>(),
+     594              :                          bool>::type=false>
+     595              :         explicit constexpr pair(const pair<_U1, _U2>& __p)
+     596              :         : first(__p.first), second(__p.second)
+     597              :         { __glibcxx_no_dangling_refs(const _U1&, const _U2&); }
+     598              : 
+     599              : #if _GLIBCXX_USE_DEPRECATED
+     600              : #if defined(__DEPRECATED)
+     601              : # define _GLIBCXX_DEPRECATED_PAIR_CTOR \
+     602              :       __attribute__ ((__deprecated__ ("use 'nullptr' instead of '0' to " \
+     603              :                                       "initialize std::pair of move-only " \
+     604              :                                       "type and pointer")))
+     605              : #else
+     606              : # define _GLIBCXX_DEPRECATED_PAIR_CTOR
+     607              : #endif
+     608              : 
+     609              :     private:
+     610              :       /// @cond undocumented
+     611              : 
+     612              :       // A type which can be constructed from literal zero, but not nullptr
+     613              :       struct __zero_as_null_pointer_constant
+     614              :       {
+     615              :         __zero_as_null_pointer_constant(int __zero_as_null_pointer_constant::*)
+     616              :         { }
+     617              :         template<typename _Tp,
+     618              :                  typename = __enable_if_t<is_null_pointer<_Tp>::value>>
+     619              :         __zero_as_null_pointer_constant(_Tp) = delete;
+     620              :       };
+     621              :       /// @endcond
+     622              :     public:
+     623              : 
+     624              :       // Deprecated extensions to DR 811.
+     625              :       // These allow construction from an rvalue and a literal zero,
+     626              :       // in cases where the standard says the zero should be deduced as int
+     627              :       template<typename _U1,
+     628              :                __enable_if_t<__and_<__not_<is_reference<_U1>>,
+     629              :                                     is_pointer<_T2>,
+     630              :                                     is_constructible<_T1, _U1>,
+     631              :                                     __not_<is_constructible<_T1, const _U1&>>,
+     632              :                                     is_convertible<_U1, _T1>>::value,
+     633              :                              bool> = true>
+     634              :         _GLIBCXX_DEPRECATED_PAIR_CTOR
+     635              :         constexpr
+     636              :         pair(_U1&& __x, __zero_as_null_pointer_constant, ...)
+     637              :         : first(std::forward<_U1>(__x)), second(nullptr)
+     638              :         { __glibcxx_no_dangling_refs(_U1&&, std::nullptr_t); }
+     639              : 
+     640              :       template<typename _U1,
+     641              :                __enable_if_t<__and_<__not_<is_reference<_U1>>,
+     642              :                                     is_pointer<_T2>,
+     643              :                                     is_constructible<_T1, _U1>,
+     644              :                                     __not_<is_constructible<_T1, const _U1&>>,
+     645              :                                     __not_<is_convertible<_U1, _T1>>>::value,
+     646              :                              bool> = false>
+     647              :         _GLIBCXX_DEPRECATED_PAIR_CTOR
+     648              :         explicit constexpr
+     649              :         pair(_U1&& __x, __zero_as_null_pointer_constant, ...)
+     650              :         : first(std::forward<_U1>(__x)), second(nullptr)
+     651              :         { __glibcxx_no_dangling_refs(_U1&&, std::nullptr_t); }
+     652              : 
+     653              :       template<typename _U2,
+     654              :                __enable_if_t<__and_<is_pointer<_T1>,
+     655              :                                     __not_<is_reference<_U2>>,
+     656              :                                     is_constructible<_T2, _U2>,
+     657              :                                     __not_<is_constructible<_T2, const _U2&>>,
+     658              :                                     is_convertible<_U2, _T2>>::value,
+     659              :                              bool> = true>
+     660              :         _GLIBCXX_DEPRECATED_PAIR_CTOR
+     661              :         constexpr
+     662              :         pair(__zero_as_null_pointer_constant, _U2&& __y, ...)
+     663              :         : first(nullptr), second(std::forward<_U2>(__y))
+     664              :         { __glibcxx_no_dangling_refs(std::nullptr_t, _U2&&); }
+     665              : 
+     666              :       template<typename _U2,
+     667              :                __enable_if_t<__and_<is_pointer<_T1>,
+     668              :                                     __not_<is_reference<_U2>>,
+     669              :                                     is_constructible<_T2, _U2>,
+     670              :                                     __not_<is_constructible<_T2, const _U2&>>,
+     671              :                                     __not_<is_convertible<_U2, _T2>>>::value,
+     672              :                              bool> = false>
+     673              :         _GLIBCXX_DEPRECATED_PAIR_CTOR
+     674              :         explicit constexpr
+     675              :         pair(__zero_as_null_pointer_constant, _U2&& __y, ...)
+     676              :         : first(nullptr), second(std::forward<_U2>(__y))
+     677              :         { __glibcxx_no_dangling_refs(std::nullptr_t, _U2&&); }
+     678              : #undef _GLIBCXX_DEPRECATED_PAIR_CTOR
+     679              : #endif
+     680              : 
+     681              :       template<typename _U1, typename _U2, typename
+     682              :                enable_if<_PCCP::template
+     683              :                            _MoveConstructiblePair<_U1, _U2>()
+     684              :                           && _PCCP::template
+     685              :                            _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
+     686              :                          bool>::type=true>
+     687      3760138 :         constexpr pair(_U1&& __x, _U2&& __y)
+     688      3765512 :         : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y))
+     689      3760138 :         { __glibcxx_no_dangling_refs(_U1&&, _U2&&); }
+     690              : 
+     691              :       template<typename _U1, typename _U2, typename
+     692              :                enable_if<_PCCP::template
+     693              :                            _MoveConstructiblePair<_U1, _U2>()
+     694              :                           && !_PCCP::template
+     695              :                            _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
+     696              :                          bool>::type=false>
+     697              :         explicit constexpr pair(_U1&& __x, _U2&& __y)
+     698              :         : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y))
+     699              :         { __glibcxx_no_dangling_refs(_U1&&, _U2&&); }
+     700              : 
+     701              : 
+     702              :       template<typename _U1, typename _U2, typename
+     703              :                enable_if<_PCCFP<_U1, _U2>::template
+     704              :                            _MoveConstructiblePair<_U1, _U2>()
+     705              :                           && _PCCFP<_U1, _U2>::template
+     706              :                            _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
+     707              :                          bool>::type=true>
+     708              :         constexpr pair(pair<_U1, _U2>&& __p)
+     709              :         : first(std::forward<_U1>(__p.first)),
+     710              :           second(std::forward<_U2>(__p.second))
+     711              :         { __glibcxx_no_dangling_refs(_U1&&, _U2&&); }
+     712              : 
+     713              :       template<typename _U1, typename _U2, typename
+     714              :                enable_if<_PCCFP<_U1, _U2>::template
+     715              :                            _MoveConstructiblePair<_U1, _U2>()
+     716              :                           && !_PCCFP<_U1, _U2>::template
+     717              :                            _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
+     718              :                          bool>::type=false>
+     719              :         explicit constexpr pair(pair<_U1, _U2>&& __p)
+     720              :         : first(std::forward<_U1>(__p.first)),
+     721              :           second(std::forward<_U2>(__p.second))
+     722              :         { __glibcxx_no_dangling_refs(_U1&&, _U2&&); }
+     723              : 
+     724              : #undef __glibcxx_no_dangling_refs
+     725              : 
+     726              :       pair&
+     727            0 :       operator=(__conditional_t<__and_<is_copy_assignable<_T1>,
+     728              :                                        is_copy_assignable<_T2>>::value,
+     729              :                                 const pair&, const __nonesuch&> __p)
+     730              :       {
+     731            0 :         first = __p.first;
+     732            0 :         second = __p.second;
+     733            0 :         return *this;
+     734              :       }
+     735              : 
+     736              :       pair&
+     737        13226 :       operator=(__conditional_t<__and_<is_move_assignable<_T1>,
+     738              :                                        is_move_assignable<_T2>>::value,
+     739              :                                 pair&&, __nonesuch&&> __p)
+     740              :       noexcept(__and_<is_nothrow_move_assignable<_T1>,
+     741              :                       is_nothrow_move_assignable<_T2>>::value)
+     742              :       {
+     743        13226 :         first = std::forward<first_type>(__p.first);
+     744        13226 :         second = std::forward<second_type>(__p.second);
+     745        13226 :         return *this;
+     746              :       }
+     747              : 
+     748              :       template<typename _U1, typename _U2>
+     749              :         typename enable_if<__and_<is_assignable<_T1&, const _U1&>,
+     750              :                                   is_assignable<_T2&, const _U2&>>::value,
+     751              :                            pair&>::type
+     752              :         operator=(const pair<_U1, _U2>& __p)
+     753              :         {
+     754              :           first = __p.first;
+     755              :           second = __p.second;
+     756              :           return *this;
+     757              :         }
+     758              : 
+     759              :       template<typename _U1, typename _U2>
+     760              :         typename enable_if<__and_<is_assignable<_T1&, _U1&&>,
+     761              :                                   is_assignable<_T2&, _U2&&>>::value,
+     762              :                            pair&>::type
+     763              :         operator=(pair<_U1, _U2>&& __p)
+     764              :         {
+     765              :           first = std::forward<_U1>(__p.first);
+     766              :           second = std::forward<_U2>(__p.second);
+     767              :           return *this;
+     768              :         }
+     769              : #endif // lib concepts
+     770              : #else
+     771              :       // C++03 implementation
+     772              : 
+     773              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     774              :       // 265.  std::pair::pair() effects overly restrictive
+     775              :       /** The default constructor creates @c first and @c second using their
+     776              :        *  respective default constructors.  */
+     777              :       pair() : first(), second() { }
+     778              : 
+     779              :       /// Two objects may be passed to a `pair` constructor to be copied.
+     780              :       pair(const _T1& __a, const _T2& __b)
+     781              :       : first(__a), second(__b) { }
+     782              : 
+     783              :       /// Templated constructor to convert from other pairs.
+     784              :       template<typename _U1, typename _U2>
+     785              :         pair(const pair<_U1, _U2>& __p)
+     786              :         : first(__p.first), second(__p.second)
+     787              :         {
+     788              : #if __has_builtin(__reference_constructs_from_temporary)
+     789              : #pragma GCC diagnostic push
+     790              : #pragma GCC diagnostic ignored "-Wunused-local-typedefs"
+     791              :           typedef int _DanglingCheck1[
+     792              :             __reference_constructs_from_temporary(_T1, const _U1&) ? -1 : 1
+     793              :                       ];
+     794              :           typedef int _DanglingCheck2[
+     795              :             __reference_constructs_from_temporary(_T2, const _U2&) ? -1 : 1
+     796              :                       ];
+     797              : #pragma GCC diagnostic pop
+     798              : #endif
+     799              :         }
+     800              : #endif // C++11
+     801              :     };
+     802              : 
+     803              :   /// @relates pair @{
+     804              : 
+     805              : #if __cpp_deduction_guides >= 201606
+     806              :   template<typename _T1, typename _T2> pair(_T1, _T2) -> pair<_T1, _T2>;
+     807              : #endif
+     808              : 
+     809              :   /// Two pairs of the same type are equal iff their members are equal.
+     810              :   template<typename _T1, typename _T2>
+     811              :     inline _GLIBCXX_CONSTEXPR bool
+     812          286 :     operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+     813          286 :     { return __x.first == __y.first && __x.second == __y.second; }
+     814              : 
+     815              : #if __cpp_lib_three_way_comparison && __cpp_lib_concepts
+     816              :   template<typename _T1, typename _T2>
+     817              :     constexpr common_comparison_category_t<__detail::__synth3way_t<_T1>,
+     818              :                                            __detail::__synth3way_t<_T2>>
+     819              :     operator<=>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+     820              :     {
+     821              :       if (auto __c = __detail::__synth3way(__x.first, __y.first); __c != 0)
+     822              :         return __c;
+     823              :       return __detail::__synth3way(__x.second, __y.second);
+     824              :     }
+     825              : #else
+     826              :   /** Defines a lexicographical order for pairs.
+     827              :    *
+     828              :    * For two pairs of the same type, `P` is ordered before `Q` if
+     829              :    * `P.first` is less than `Q.first`, or if `P.first` and `Q.first`
+     830              :    * are equivalent (neither is less than the other) and `P.second` is less
+     831              :    * than `Q.second`.
+     832              :   */
+     833              :   template<typename _T1, typename _T2>
+     834              :     inline _GLIBCXX_CONSTEXPR bool
+     835     48354438 :     operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+     836     48354438 :     { return __x.first < __y.first
+     837     48354438 :              || (!(__y.first < __x.first) && __x.second < __y.second); }
+     838              : 
+     839              :   /// Uses @c operator== to find the result.
+     840              :   template<typename _T1, typename _T2>
+     841              :     inline _GLIBCXX_CONSTEXPR bool
+     842              :     operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+     843              :     { return !(__x == __y); }
+     844              : 
+     845              :   /// Uses @c operator< to find the result.
+     846              :   template<typename _T1, typename _T2>
+     847              :     inline _GLIBCXX_CONSTEXPR bool
+     848              :     operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+     849              :     { return __y < __x; }
+     850              : 
+     851              :   /// Uses @c operator< to find the result.
+     852              :   template<typename _T1, typename _T2>
+     853              :     inline _GLIBCXX_CONSTEXPR bool
+     854              :     operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+     855              :     { return !(__y < __x); }
+     856              : 
+     857              :   /// Uses @c operator< to find the result.
+     858              :   template<typename _T1, typename _T2>
+     859              :     inline _GLIBCXX_CONSTEXPR bool
+     860              :     operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+     861              :     { return !(__x < __y); }
+     862              : #endif // !(three_way_comparison && concepts)
+     863              : 
+     864              : #if __cplusplus >= 201103L
+     865              :   /** Swap overload for pairs. Calls std::pair::swap().
+     866              :    *
+     867              :    * @note This std::swap overload is not declared in C++03 mode,
+     868              :    * which has performance implications, e.g. see https://gcc.gnu.org/PR38466
+     869              :   */
+     870              :   template<typename _T1, typename _T2>
+     871              :     _GLIBCXX20_CONSTEXPR inline
+     872              : #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
+     873              :     // Constrained free swap overload, see p0185r1
+     874              :     typename enable_if<__and_<__is_swappable<_T1>,
+     875              :                               __is_swappable<_T2>>::value>::type
+     876              : #else
+     877              :     void
+     878              : #endif
+     879            0 :     swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y)
+     880              :     noexcept(noexcept(__x.swap(__y)))
+     881            0 :     { __x.swap(__y); }
+     882              : 
+     883              : #if __cplusplus > 202002L
+     884              :   template<typename _T1, typename _T2>
+     885              :     requires is_swappable_v<const _T1> && is_swappable_v<const _T2>
+     886              :     constexpr void
+     887              :     swap(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+     888              :     noexcept(noexcept(__x.swap(__y)))
+     889              :     { __x.swap(__y); }
+     890              : #endif // C++23
+     891              : 
+     892              : #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
+     893              :   template<typename _T1, typename _T2>
+     894              :     typename enable_if<!__and_<__is_swappable<_T1>,
+     895              :                                __is_swappable<_T2>>::value>::type
+     896              :     swap(pair<_T1, _T2>&, pair<_T1, _T2>&) = delete;
+     897              : #endif
+     898              : #endif // __cplusplus >= 201103L
+     899              : 
+     900              :   /// @} relates pair
+     901              : 
+     902              :   /**
+     903              :    *  @brief A convenience wrapper for creating a pair from two objects.
+     904              :    *  @param  __x  The first object.
+     905              :    *  @param  __y  The second object.
+     906              :    *  @return   A newly-constructed pair<> object of the appropriate type.
+     907              :    *
+     908              :    *  The C++98 standard says the objects are passed by reference-to-const,
+     909              :    *  but C++03 says they are passed by value (this was LWG issue #181).
+     910              :    *
+     911              :    *  Since C++11 they have been passed by forwarding reference and then
+     912              :    *  forwarded to the new members of the pair. To create a pair with a
+     913              :    *  member of reference type, pass a `reference_wrapper` to this function.
+     914              :    */
+     915              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     916              :   // 181.  make_pair() unintended behavior
+     917              : #if __cplusplus >= 201103L
+     918              :   // NB: DR 706.
+     919              :   template<typename _T1, typename _T2>
+     920              :     constexpr pair<typename __decay_and_strip<_T1>::__type,
+     921              :                    typename __decay_and_strip<_T2>::__type>
+     922        39996 :     make_pair(_T1&& __x, _T2&& __y)
+     923              :     {
+     924              :       typedef typename __decay_and_strip<_T1>::__type __ds_type1;
+     925              :       typedef typename __decay_and_strip<_T2>::__type __ds_type2;
+     926              :       typedef pair<__ds_type1, __ds_type2>              __pair_type;
+     927        39996 :       return __pair_type(std::forward<_T1>(__x), std::forward<_T2>(__y));
+     928              :     }
+     929              : #else
+     930              :   template<typename _T1, typename _T2>
+     931              :     inline pair<_T1, _T2>
+     932              :     make_pair(_T1 __x, _T2 __y)
+     933              :     { return pair<_T1, _T2>(__x, __y); }
+     934              : #endif
+     935              : 
+     936              :   /// @}
+     937              : 
+     938              : #if __cplusplus >= 201103L
+     939              :   // Various functions which give std::pair a tuple-like interface.
+     940              : 
+     941              :   /// @cond undocumented
+     942              :   template<typename _T1, typename _T2>
+     943              :     struct __is_tuple_like_impl<pair<_T1, _T2>> : true_type
+     944              :     { };
+     945              :   /// @endcond
+     946              : 
+     947              :   /// Partial specialization for std::pair
+     948              :   template<class _Tp1, class _Tp2>
+     949              :     struct tuple_size<pair<_Tp1, _Tp2>>
+     950              :     : public integral_constant<size_t, 2> { };
+     951              : 
+     952              :   /// Partial specialization for std::pair
+     953              :   template<class _Tp1, class _Tp2>
+     954              :     struct tuple_element<0, pair<_Tp1, _Tp2>>
+     955              :     { typedef _Tp1 type; };
+     956              : 
+     957              :   /// Partial specialization for std::pair
+     958              :   template<class _Tp1, class _Tp2>
+     959              :     struct tuple_element<1, pair<_Tp1, _Tp2>>
+     960              :     { typedef _Tp2 type; };
+     961              : 
+     962              : #if __cplusplus >= 201703L
+     963              :   template<typename _Tp1, typename _Tp2>
+     964              :     inline constexpr size_t tuple_size_v<pair<_Tp1, _Tp2>> = 2;
+     965              : 
+     966              :   template<typename _Tp1, typename _Tp2>
+     967              :     inline constexpr size_t tuple_size_v<const pair<_Tp1, _Tp2>> = 2;
+     968              : 
+     969              :   template<typename _Tp>
+     970              :     inline constexpr bool __is_pair = false;
+     971              : 
+     972              :   template<typename _Tp, typename _Up>
+     973              :     inline constexpr bool __is_pair<pair<_Tp, _Up>> = true;
+     974              : #endif
+     975              : 
+     976              :   /// @cond undocumented
+     977              :   template<size_t _Int>
+     978              :     struct __pair_get;
+     979              : 
+     980              :   template<>
+     981              :     struct __pair_get<0>
+     982              :     {
+     983              :       template<typename _Tp1, typename _Tp2>
+     984              :         static constexpr _Tp1&
+     985       141914 :         __get(pair<_Tp1, _Tp2>& __pair) noexcept
+     986       141914 :         { return __pair.first; }
+     987              : 
+     988              :       template<typename _Tp1, typename _Tp2>
+     989              :         static constexpr _Tp1&&
+     990         4274 :         __move_get(pair<_Tp1, _Tp2>&& __pair) noexcept
+     991         4274 :         { return std::forward<_Tp1>(__pair.first); }
+     992              : 
+     993              :       template<typename _Tp1, typename _Tp2>
+     994              :         static constexpr const _Tp1&
+     995              :         __const_get(const pair<_Tp1, _Tp2>& __pair) noexcept
+     996              :         { return __pair.first; }
+     997              : 
+     998              :       template<typename _Tp1, typename _Tp2>
+     999              :         static constexpr const _Tp1&&
+    1000              :         __const_move_get(const pair<_Tp1, _Tp2>&& __pair) noexcept
+    1001              :         { return std::forward<const _Tp1>(__pair.first); }
+    1002              :     };
+    1003              : 
+    1004              :   template<>
+    1005              :     struct __pair_get<1>
+    1006              :     {
+    1007              :       template<typename _Tp1, typename _Tp2>
+    1008              :         static constexpr _Tp2&
+    1009       141914 :         __get(pair<_Tp1, _Tp2>& __pair) noexcept
+    1010       141914 :         { return __pair.second; }
+    1011              : 
+    1012              :       template<typename _Tp1, typename _Tp2>
+    1013              :         static constexpr _Tp2&&
+    1014         4274 :         __move_get(pair<_Tp1, _Tp2>&& __pair) noexcept
+    1015         4274 :         { return std::forward<_Tp2>(__pair.second); }
+    1016              : 
+    1017              :       template<typename _Tp1, typename _Tp2>
+    1018              :         static constexpr const _Tp2&
+    1019              :         __const_get(const pair<_Tp1, _Tp2>& __pair) noexcept
+    1020              :         { return __pair.second; }
+    1021              : 
+    1022              :       template<typename _Tp1, typename _Tp2>
+    1023              :         static constexpr const _Tp2&&
+    1024              :         __const_move_get(const pair<_Tp1, _Tp2>&& __pair) noexcept
+    1025              :         { return std::forward<const _Tp2>(__pair.second); }
+    1026              :     };
+    1027              :   /// @endcond
+    1028              : 
+    1029              :   /** @{
+    1030              :    * std::get overloads for accessing members of std::pair
+    1031              :    */
+    1032              : 
+    1033              :   template<size_t _Int, class _Tp1, class _Tp2>
+    1034              :     constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&
+    1035       283828 :     get(pair<_Tp1, _Tp2>& __in) noexcept
+    1036       283828 :     { return __pair_get<_Int>::__get(__in); }
+    1037              : 
+    1038              :   template<size_t _Int, class _Tp1, class _Tp2>
+    1039              :     constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&&
+    1040         8548 :     get(pair<_Tp1, _Tp2>&& __in) noexcept
+    1041         8548 :     { return __pair_get<_Int>::__move_get(std::move(__in)); }
+    1042              : 
+    1043              :   template<size_t _Int, class _Tp1, class _Tp2>
+    1044              :     constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&
+    1045              :     get(const pair<_Tp1, _Tp2>& __in) noexcept
+    1046              :     { return __pair_get<_Int>::__const_get(__in); }
+    1047              : 
+    1048              :   template<size_t _Int, class _Tp1, class _Tp2>
+    1049              :     constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&&
+    1050              :     get(const pair<_Tp1, _Tp2>&& __in) noexcept
+    1051              :     { return __pair_get<_Int>::__const_move_get(std::move(__in)); }
+    1052              : 
+    1053              : #if __cplusplus >= 201402L
+    1054              : 
+    1055              : #define __cpp_lib_tuples_by_type 201304L
+    1056              : 
+    1057              :   template <typename _Tp, typename _Up>
+    1058              :     constexpr _Tp&
+    1059              :     get(pair<_Tp, _Up>& __p) noexcept
+    1060              :     { return __p.first; }
+    1061              : 
+    1062              :   template <typename _Tp, typename _Up>
+    1063              :     constexpr const _Tp&
+    1064              :     get(const pair<_Tp, _Up>& __p) noexcept
+    1065              :     { return __p.first; }
+    1066              : 
+    1067              :   template <typename _Tp, typename _Up>
+    1068              :     constexpr _Tp&&
+    1069              :     get(pair<_Tp, _Up>&& __p) noexcept
+    1070              :     { return std::move(__p.first); }
+    1071              : 
+    1072              :   template <typename _Tp, typename _Up>
+    1073              :     constexpr const _Tp&&
+    1074              :     get(const pair<_Tp, _Up>&& __p) noexcept
+    1075              :     { return std::move(__p.first); }
+    1076              : 
+    1077              :   template <typename _Tp, typename _Up>
+    1078              :     constexpr _Tp&
+    1079              :     get(pair<_Up, _Tp>& __p) noexcept
+    1080              :     { return __p.second; }
+    1081              : 
+    1082              :   template <typename _Tp, typename _Up>
+    1083              :     constexpr const _Tp&
+    1084              :     get(const pair<_Up, _Tp>& __p) noexcept
+    1085              :     { return __p.second; }
+    1086              : 
+    1087              :   template <typename _Tp, typename _Up>
+    1088              :     constexpr _Tp&&
+    1089              :     get(pair<_Up, _Tp>&& __p) noexcept
+    1090              :     { return std::move(__p.second); }
+    1091              : 
+    1092              :   template <typename _Tp, typename _Up>
+    1093              :     constexpr const _Tp&&
+    1094              :     get(const pair<_Up, _Tp>&& __p) noexcept
+    1095              :     { return std::move(__p.second); }
+    1096              : 
+    1097              : #if __cplusplus > 202002L
+    1098              :   template<typename _T1, typename _T2, typename _U1, typename _U2,
+    1099              :            template<typename> class _TQual, template<typename> class _UQual>
+    1100              :     requires requires { typename pair<common_reference_t<_TQual<_T1>, _UQual<_U1>>,
+    1101              :                                       common_reference_t<_TQual<_T2>, _UQual<_U2>>>; }
+    1102              :   struct basic_common_reference<pair<_T1, _T2>, pair<_U1, _U2>, _TQual, _UQual>
+    1103              :   {
+    1104              :     using type = pair<common_reference_t<_TQual<_T1>, _UQual<_U1>>,
+    1105              :                       common_reference_t<_TQual<_T2>, _UQual<_U2>>>;
+    1106              :   };
+    1107              : 
+    1108              :   template<typename _T1, typename _T2, typename _U1, typename _U2>
+    1109              :     requires requires { typename pair<common_type_t<_T1, _U1>, common_type_t<_T2, _U2>>; }
+    1110              :   struct common_type<pair<_T1, _T2>, pair<_U1, _U2>>
+    1111              :   { using type = pair<common_type_t<_T1, _U1>, common_type_t<_T2, _U2>>; };
+    1112              : #endif // C++23
+    1113              : 
+    1114              : #endif // C++14
+    1115              :   /// @}
+    1116              : #endif // C++11
+    1117              : 
+    1118              : _GLIBCXX_END_NAMESPACE_VERSION
+    1119              : } // namespace std
+    1120              : 
+    1121              : #endif /* _STL_PAIR_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_stack.h.func-c.html b/html/usr/include/c++/13/bits/stl_stack.h.func-c.html new file mode 100644 index 0000000..51d02f3 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_stack.h.func-c.html @@ -0,0 +1,187 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_stack.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_stack.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %130
Test Date:2024-04-30 13:17:26Functions:0.0 %110
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt5stackIlSt5dequeIlSaIlEEE5emptyEv0
_ZNKSt5stackINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESt5dequeIS5_SaIS5_EEE5emptyEv0
_ZNKSt5stackIlSt5dequeIlSaIlEEE5emptyEv0
_ZNSt5stackINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESt5dequeIS5_SaIS5_EEE4pushEOS5_0
_ZNSt5stackIlSt5dequeIlSaIlEEE3popEv0
_ZNSt5stackINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESt5dequeIS5_SaIS5_EEE3popEv0
_ZNSt5stackIlSt5dequeIlSaIlEEE3popEv0
_ZNSt5stackIlSt5dequeIlSaIlEEE3topEv0
_ZNSt5stackINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESt5dequeIS5_SaIS5_EEE3topEv0
_ZNSt5stackIlSt5dequeIlSaIlEEE3topEv0
_ZNSt5stackIlSt5dequeIlSaIlEEE4pushERKl0
_ZNSt5stackINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESt5dequeIS5_SaIS5_EEE4pushERKS5_0
_ZNSt5stackIlSt5dequeIlSaIlEEE4pushERKl0
_ZNSt5stackIlSt5dequeIlSaIlEEEC2IS2_vEEv0
_ZNSt5stackINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESt5dequeIS5_SaIS5_EEEC2IS8_vEEv0
_ZNSt5stackIlSt5dequeIlSaIlEEEC2IS2_vEEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_stack.h.func.html b/html/usr/include/c++/13/bits/stl_stack.h.func.html new file mode 100644 index 0000000..67e2e81 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_stack.h.func.html @@ -0,0 +1,187 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_stack.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_stack.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %130
Test Date:2024-04-30 13:17:26Functions:0.0 %110
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt5stackIlSt5dequeIlSaIlEEE5emptyEv0
_ZNKSt5stackINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESt5dequeIS5_SaIS5_EEE5emptyEv0
_ZNKSt5stackIlSt5dequeIlSaIlEEE5emptyEv0
_ZNSt5stackINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESt5dequeIS5_SaIS5_EEE4pushEOS5_0
_ZNSt5stackIlSt5dequeIlSaIlEEE3popEv0
_ZNSt5stackINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESt5dequeIS5_SaIS5_EEE3popEv0
_ZNSt5stackIlSt5dequeIlSaIlEEE3popEv0
_ZNSt5stackIlSt5dequeIlSaIlEEE3topEv0
_ZNSt5stackINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESt5dequeIS5_SaIS5_EEE3topEv0
_ZNSt5stackIlSt5dequeIlSaIlEEE3topEv0
_ZNSt5stackIlSt5dequeIlSaIlEEE4pushERKl0
_ZNSt5stackINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESt5dequeIS5_SaIS5_EEE4pushERKS5_0
_ZNSt5stackIlSt5dequeIlSaIlEEE4pushERKl0
_ZNSt5stackIlSt5dequeIlSaIlEEEC2IS2_vEEv0
_ZNSt5stackINSt8__detail9_StateSeqINSt7__cxx1112regex_traitsIcEEEESt5dequeIS5_SaIS5_EEEC2IS8_vEEv0
_ZNSt5stackIlSt5dequeIlSaIlEEEC2IS2_vEEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_stack.h.gcov.html b/html/usr/include/c++/13/bits/stl_stack.h.gcov.html new file mode 100644 index 0000000..79c9d39 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_stack.h.gcov.html @@ -0,0 +1,511 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_stack.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_stack.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %130
Test Date:2024-04-30 13:17:26Functions:0.0 %110
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Stack implementation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1996,1997
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/stl_stack.h
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{stack}
+      54              :  */
+      55              : 
+      56              : #ifndef _STL_STACK_H
+      57              : #define _STL_STACK_H 1
+      58              : 
+      59              : #include <bits/concept_check.h>
+      60              : #include <debug/debug.h>
+      61              : #if __cplusplus >= 201103L
+      62              : # include <bits/uses_allocator.h>
+      63              : #endif
+      64              : 
+      65              : namespace std _GLIBCXX_VISIBILITY(default)
+      66              : {
+      67              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      68              : 
+      69              :   /**
+      70              :    *  @brief  A standard container giving FILO behavior.
+      71              :    *
+      72              :    *  @ingroup sequences
+      73              :    *
+      74              :    *  @tparam _Tp  Type of element.
+      75              :    *  @tparam _Sequence  Type of underlying sequence, defaults to deque<_Tp>.
+      76              :    *
+      77              :    *  Meets many of the requirements of a
+      78              :    *  <a href="tables.html#65">container</a>,
+      79              :    *  but does not define anything to do with iterators.  Very few of the
+      80              :    *  other standard container interfaces are defined.
+      81              :    *
+      82              :    *  This is not a true container, but an @e adaptor.  It holds
+      83              :    *  another container, and provides a wrapper interface to that
+      84              :    *  container.  The wrapper is what enforces strict
+      85              :    *  first-in-last-out %stack behavior.
+      86              :    *
+      87              :    *  The second template parameter defines the type of the underlying
+      88              :    *  sequence/container.  It defaults to std::deque, but it can be
+      89              :    *  any type that supports @c back, @c push_back, and @c pop_back,
+      90              :    *  such as std::list, std::vector, or an appropriate user-defined
+      91              :    *  type.
+      92              :    *
+      93              :    *  Members not found in @a normal containers are @c container_type,
+      94              :    *  which is a typedef for the second Sequence parameter, and @c
+      95              :    *  push, @c pop, and @c top, which are standard %stack/FILO
+      96              :    *  operations.
+      97              :   */
+      98              :   template<typename _Tp, typename _Sequence = deque<_Tp> >
+      99              :     class stack
+     100              :     {
+     101              : #ifdef _GLIBCXX_CONCEPT_CHECKS
+     102              :       // concept requirements
+     103              :       typedef typename _Sequence::value_type _Sequence_value_type;
+     104              : # if __cplusplus < 201103L
+     105              :       __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
+     106              :       __glibcxx_class_requires(_Sequence, _BackInsertionSequenceConcept)
+     107              : # endif
+     108              :       __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept)
+     109              : #endif
+     110              : 
+     111              :       template<typename _Tp1, typename _Seq1>
+     112              :         friend bool
+     113              :         operator==(const stack<_Tp1, _Seq1>&, const stack<_Tp1, _Seq1>&);
+     114              : 
+     115              :       template<typename _Tp1, typename _Seq1>
+     116              :         friend bool
+     117              :         operator<(const stack<_Tp1, _Seq1>&, const stack<_Tp1, _Seq1>&);
+     118              : 
+     119              : #if __cpp_lib_three_way_comparison
+     120              :       template<typename _Tp1, three_way_comparable _Seq1>
+     121              :         friend compare_three_way_result_t<_Seq1>
+     122              :         operator<=>(const stack<_Tp1, _Seq1>&, const stack<_Tp1, _Seq1>&);
+     123              : #endif
+     124              : 
+     125              : #if __cplusplus >= 201103L
+     126              :       template<typename _Alloc>
+     127              :         using _Uses = typename
+     128              :           enable_if<uses_allocator<_Sequence, _Alloc>::value>::type;
+     129              : 
+     130              : #if __cplusplus >= 201703L
+     131              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     132              :       // 2566. Requirements on the first template parameter of container
+     133              :       // adaptors
+     134              :       static_assert(is_same<_Tp, typename _Sequence::value_type>::value,
+     135              :           "value_type must be the same as the underlying container");
+     136              : #endif // C++17
+     137              : #endif // C++11
+     138              : 
+     139              :     public:
+     140              :       typedef typename _Sequence::value_type            value_type;
+     141              :       typedef typename _Sequence::reference             reference;
+     142              :       typedef typename _Sequence::const_reference       const_reference;
+     143              :       typedef typename _Sequence::size_type             size_type;
+     144              :       typedef          _Sequence                        container_type;
+     145              : 
+     146              :     protected:
+     147              :       //  See queue::c for notes on this name.
+     148              :       _Sequence c;
+     149              : 
+     150              :     public:
+     151              :       // XXX removed old def ctor, added def arg to this one to match 14882
+     152              :       /**
+     153              :        *  @brief  Default constructor creates no elements.
+     154              :        */
+     155              : #if __cplusplus < 201103L
+     156              :       explicit
+     157              :       stack(const _Sequence& __c = _Sequence())
+     158              :       : c(__c) { }
+     159              : #else
+     160              :       template<typename _Seq = _Sequence, typename _Requires = typename
+     161              :                enable_if<is_default_constructible<_Seq>::value>::type>
+     162            0 :         stack()
+     163            0 :         : c() { }
+     164              : 
+     165              :       explicit
+     166              :       stack(const _Sequence& __c)
+     167              :       : c(__c) { }
+     168              : 
+     169              :       explicit
+     170              :       stack(_Sequence&& __c)
+     171              :       : c(std::move(__c)) { }
+     172              : 
+     173              : #if __cplusplus > 202002L
+     174              : #define __cpp_lib_adaptor_iterator_pair_constructor 202106L
+     175              : 
+     176              :       template<typename _InputIterator,
+     177              :                typename = _RequireInputIter<_InputIterator>>
+     178              :         stack(_InputIterator __first, _InputIterator __last)
+     179              :         : c(__first, __last) { }
+     180              : #endif
+     181              : 
+     182              : 
+     183              :       template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
+     184              :         explicit
+     185              :         stack(const _Alloc& __a)
+     186              :         : c(__a) { }
+     187              : 
+     188              :       template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
+     189              :         stack(const _Sequence& __c, const _Alloc& __a)
+     190              :         : c(__c, __a) { }
+     191              : 
+     192              :       template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
+     193              :         stack(_Sequence&& __c, const _Alloc& __a)
+     194              :         : c(std::move(__c), __a) { }
+     195              : 
+     196              :       template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
+     197              :         stack(const stack& __q, const _Alloc& __a)
+     198              :         : c(__q.c, __a) { }
+     199              : 
+     200              :       template<typename _Alloc, typename _Requires = _Uses<_Alloc>>
+     201              :         stack(stack&& __q, const _Alloc& __a)
+     202              :         : c(std::move(__q.c), __a) { }
+     203              : 
+     204              : #if __cplusplus > 202002L
+     205              :       template<typename _InputIterator, typename _Alloc,
+     206              :                typename = _RequireInputIter<_InputIterator>,
+     207              :                typename = _Uses<_Alloc>>
+     208              :         stack(_InputIterator __first, _InputIterator __last, const _Alloc& __a)
+     209              :         : c(__first, __last, __a) { }
+     210              : #endif
+     211              : #endif
+     212              : 
+     213              :       /**
+     214              :        *  Returns true if the %stack is empty.
+     215              :        */
+     216              :       _GLIBCXX_NODISCARD bool
+     217            0 :       empty() const
+     218            0 :       { return c.empty(); }
+     219              : 
+     220              :       /**  Returns the number of elements in the %stack.  */
+     221              :       _GLIBCXX_NODISCARD
+     222              :       size_type
+     223              :       size() const
+     224              :       { return c.size(); }
+     225              : 
+     226              :       /**
+     227              :        *  Returns a read/write reference to the data at the first
+     228              :        *  element of the %stack.
+     229              :        */
+     230              :       _GLIBCXX_NODISCARD
+     231              :       reference
+     232            0 :       top()
+     233              :       {
+     234              :         __glibcxx_requires_nonempty();
+     235            0 :         return c.back();
+     236              :       }
+     237              : 
+     238              :       /**
+     239              :        *  Returns a read-only (constant) reference to the data at the first
+     240              :        *  element of the %stack.
+     241              :        */
+     242              :       _GLIBCXX_NODISCARD
+     243              :       const_reference
+     244              :       top() const
+     245              :       {
+     246              :         __glibcxx_requires_nonempty();
+     247              :         return c.back();
+     248              :       }
+     249              : 
+     250              :       /**
+     251              :        *  @brief  Add data to the top of the %stack.
+     252              :        *  @param  __x  Data to be added.
+     253              :        *
+     254              :        *  This is a typical %stack operation.  The function creates an
+     255              :        *  element at the top of the %stack and assigns the given data
+     256              :        *  to it.  The time complexity of the operation depends on the
+     257              :        *  underlying sequence.
+     258              :        */
+     259              :       void
+     260            0 :       push(const value_type& __x)
+     261            0 :       { c.push_back(__x); }
+     262              : 
+     263              : #if __cplusplus >= 201103L
+     264              :       void
+     265            0 :       push(value_type&& __x)
+     266            0 :       { c.push_back(std::move(__x)); }
+     267              : 
+     268              : #if __cplusplus > 201402L
+     269              :       template<typename... _Args>
+     270              :         decltype(auto)
+     271              :         emplace(_Args&&... __args)
+     272              :         { return c.emplace_back(std::forward<_Args>(__args)...); }
+     273              : #else
+     274              :       template<typename... _Args>
+     275              :         void
+     276              :         emplace(_Args&&... __args)
+     277              :         { c.emplace_back(std::forward<_Args>(__args)...); }
+     278              : #endif
+     279              : #endif
+     280              : 
+     281              :       /**
+     282              :        *  @brief  Removes first element.
+     283              :        *
+     284              :        *  This is a typical %stack operation.  It shrinks the %stack
+     285              :        *  by one.  The time complexity of the operation depends on the
+     286              :        *  underlying sequence.
+     287              :        *
+     288              :        *  Note that no data is returned, and if the first element's
+     289              :        *  data is needed, it should be retrieved before pop() is
+     290              :        *  called.
+     291              :        */
+     292              :       void
+     293            0 :       pop()
+     294              :       {
+     295              :         __glibcxx_requires_nonempty();
+     296            0 :         c.pop_back();
+     297            0 :       }
+     298              : 
+     299              : #if __cplusplus >= 201103L
+     300              :       void
+     301              :       swap(stack& __s)
+     302              : #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
+     303              :       noexcept(__is_nothrow_swappable<_Sequence>::value)
+     304              : #else
+     305              :       noexcept(__is_nothrow_swappable<_Tp>::value)
+     306              : #endif
+     307              :       {
+     308              :         using std::swap;
+     309              :         swap(c, __s.c);
+     310              :       }
+     311              : #endif // __cplusplus >= 201103L
+     312              :     };
+     313              : 
+     314              : #if __cpp_deduction_guides >= 201606
+     315              :   template<typename _Container,
+     316              :            typename = _RequireNotAllocator<_Container>>
+     317              :     stack(_Container) -> stack<typename _Container::value_type, _Container>;
+     318              : 
+     319              :   template<typename _Container, typename _Allocator,
+     320              :            typename = _RequireNotAllocator<_Container>>
+     321              :     stack(_Container, _Allocator)
+     322              :     -> stack<typename _Container::value_type, _Container>;
+     323              : 
+     324              : #ifdef __cpp_lib_adaptor_iterator_pair_constructor
+     325              :   template<typename _InputIterator,
+     326              :            typename _ValT
+     327              :              = typename iterator_traits<_InputIterator>::value_type,
+     328              :            typename = _RequireInputIter<_InputIterator>>
+     329              :     stack(_InputIterator, _InputIterator) -> stack<_ValT>;
+     330              : 
+     331              :   template<typename _InputIterator, typename _Allocator,
+     332              :            typename _ValT
+     333              :              = typename iterator_traits<_InputIterator>::value_type,
+     334              :            typename = _RequireInputIter<_InputIterator>,
+     335              :            typename = _RequireAllocator<_Allocator>>
+     336              :     stack(_InputIterator, _InputIterator, _Allocator)
+     337              :     -> stack<_ValT, deque<_ValT, _Allocator>>;
+     338              : #endif
+     339              : #endif
+     340              : 
+     341              :   /**
+     342              :    *  @brief  Stack equality comparison.
+     343              :    *  @param  __x  A %stack.
+     344              :    *  @param  __y  A %stack of the same type as @a __x.
+     345              :    *  @return  True iff the size and elements of the stacks are equal.
+     346              :    *
+     347              :    *  This is an equivalence relation.  Complexity and semantics
+     348              :    *  depend on the underlying sequence type, but the expected rules
+     349              :    *  are: this relation is linear in the size of the sequences, and
+     350              :    *  stacks are considered equivalent if their sequences compare
+     351              :    *  equal.
+     352              :   */
+     353              :   template<typename _Tp, typename _Seq>
+     354              :     _GLIBCXX_NODISCARD
+     355              :     inline bool
+     356              :     operator==(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
+     357              :     { return __x.c == __y.c; }
+     358              : 
+     359              :   /**
+     360              :    *  @brief  Stack ordering relation.
+     361              :    *  @param  __x  A %stack.
+     362              :    *  @param  __y  A %stack of the same type as @a x.
+     363              :    *  @return  True iff @a x is lexicographically less than @a __y.
+     364              :    *
+     365              :    *  This is an total ordering relation.  Complexity and semantics
+     366              :    *  depend on the underlying sequence type, but the expected rules
+     367              :    *  are: this relation is linear in the size of the sequences, the
+     368              :    *  elements must be comparable with @c <, and
+     369              :    *  std::lexicographical_compare() is usually used to make the
+     370              :    *  determination.
+     371              :   */
+     372              :   template<typename _Tp, typename _Seq>
+     373              :     _GLIBCXX_NODISCARD
+     374              :     inline bool
+     375              :     operator<(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
+     376              :     { return __x.c < __y.c; }
+     377              : 
+     378              :   /// Based on operator==
+     379              :   template<typename _Tp, typename _Seq>
+     380              :     _GLIBCXX_NODISCARD
+     381              :     inline bool
+     382              :     operator!=(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
+     383              :     { return !(__x == __y); }
+     384              : 
+     385              :   /// Based on operator<
+     386              :   template<typename _Tp, typename _Seq>
+     387              :     _GLIBCXX_NODISCARD
+     388              :     inline bool
+     389              :     operator>(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
+     390              :     { return __y < __x; }
+     391              : 
+     392              :   /// Based on operator<
+     393              :   template<typename _Tp, typename _Seq>
+     394              :     _GLIBCXX_NODISCARD
+     395              :     inline bool
+     396              :     operator<=(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
+     397              :     { return !(__y < __x); }
+     398              : 
+     399              :   /// Based on operator<
+     400              :   template<typename _Tp, typename _Seq>
+     401              :     _GLIBCXX_NODISCARD
+     402              :     inline bool
+     403              :     operator>=(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
+     404              :     { return !(__x < __y); }
+     405              : 
+     406              : #if __cpp_lib_three_way_comparison
+     407              :   template<typename _Tp, three_way_comparable _Seq>
+     408              :     [[nodiscard]]
+     409              :     inline compare_three_way_result_t<_Seq>
+     410              :     operator<=>(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y)
+     411              :     { return __x.c <=> __y.c; }
+     412              : #endif
+     413              : 
+     414              : #if __cplusplus >= 201103L
+     415              :   template<typename _Tp, typename _Seq>
+     416              :     inline
+     417              : #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
+     418              :     // Constrained free swap overload, see p0185r1
+     419              :     typename enable_if<__is_swappable<_Seq>::value>::type
+     420              : #else
+     421              :     void
+     422              : #endif
+     423              :     swap(stack<_Tp, _Seq>& __x, stack<_Tp, _Seq>& __y)
+     424              :     noexcept(noexcept(__x.swap(__y)))
+     425              :     { __x.swap(__y); }
+     426              : 
+     427              :   template<typename _Tp, typename _Seq, typename _Alloc>
+     428              :     struct uses_allocator<stack<_Tp, _Seq>, _Alloc>
+     429              :     : public uses_allocator<_Seq, _Alloc>::type { };
+     430              : #endif // __cplusplus >= 201103L
+     431              : 
+     432              : _GLIBCXX_END_NAMESPACE_VERSION
+     433              : } // namespace
+     434              : 
+     435              : #endif /* _STL_STACK_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_tempbuf.h.func-c.html b/html/usr/include/c++/13/bits/stl_tempbuf.h.func-c.html new file mode 100644 index 0000000..23b13dc --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_tempbuf.h.func-c.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_tempbuf.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_tempbuf.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:85.7 %4942
Test Date:2024-04-30 13:17:26Functions:100.0 %99
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt17_Temporary_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES4_E14requested_sizeEv58
_ZNSt17_Temporary_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES4_E5beginEv58
_ZNSt17_Temporary_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES4_EC2ES9_l58
_ZNSt17_Temporary_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES4_ED2Ev58
_ZNSt38__uninitialized_construct_buf_dispatchILb0EE5__ucrIPSt4pairIfS2_IiiEEN9__gnu_cxx17__normal_iteratorIS5_St6vectorIS4_SaIS4_EEEEEEvT_SC_T0_58
_ZNSt8__detail25__return_temporary_bufferISt4pairIfS1_IiiEEEEvPT_m58
_ZSt20get_temporary_bufferISt4pairIfS0_IiiEEES0_IPT_lEl58
_ZSt29__uninitialized_construct_bufIPSt4pairIfS0_IiiEEN9__gnu_cxx17__normal_iteratorIS3_St6vectorIS2_SaIS2_EEEEEvT_SA_T0_58
_ZNKSt17_Temporary_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES4_E4sizeEv116
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_tempbuf.h.func.html b/html/usr/include/c++/13/bits/stl_tempbuf.h.func.html new file mode 100644 index 0000000..5db3af8 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_tempbuf.h.func.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_tempbuf.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_tempbuf.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:85.7 %4942
Test Date:2024-04-30 13:17:26Functions:100.0 %99
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt17_Temporary_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES4_E14requested_sizeEv58
_ZNKSt17_Temporary_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES4_E4sizeEv116
_ZNSt17_Temporary_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES4_E5beginEv58
_ZNSt17_Temporary_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES4_EC2ES9_l58
_ZNSt17_Temporary_bufferIN9__gnu_cxx17__normal_iteratorIPSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEES4_ED2Ev58
_ZNSt38__uninitialized_construct_buf_dispatchILb0EE5__ucrIPSt4pairIfS2_IiiEEN9__gnu_cxx17__normal_iteratorIS5_St6vectorIS4_SaIS4_EEEEEEvT_SC_T0_58
_ZNSt8__detail25__return_temporary_bufferISt4pairIfS1_IiiEEEEvPT_m58
_ZSt20get_temporary_bufferISt4pairIfS0_IiiEEES0_IPT_lEl58
_ZSt29__uninitialized_construct_bufIPSt4pairIfS0_IiiEEN9__gnu_cxx17__normal_iteratorIS3_St6vectorIS2_SaIS2_EEEEEvT_SA_T0_58
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_tempbuf.h.gcov.html b/html/usr/include/c++/13/bits/stl_tempbuf.h.gcov.html new file mode 100644 index 0000000..c801d97 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_tempbuf.h.gcov.html @@ -0,0 +1,367 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_tempbuf.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_tempbuf.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:85.7 %4942
Test Date:2024-04-30 13:17:26Functions:100.0 %99
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Temporary buffer implementation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1996,1997
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/stl_tempbuf.h
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{memory}
+      54              :  */
+      55              : 
+      56              : #ifndef _STL_TEMPBUF_H
+      57              : #define _STL_TEMPBUF_H 1
+      58              : 
+      59              : #include <new>
+      60              : #include <bits/exception_defines.h>
+      61              : #include <bits/stl_construct.h>
+      62              : #include <bits/stl_pair.h>
+      63              : #include <ext/numeric_traits.h>
+      64              : 
+      65              : namespace std _GLIBCXX_VISIBILITY(default)
+      66              : {
+      67              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      68              : 
+      69              :   namespace __detail
+      70              :   {
+      71              :     template<typename _Tp>
+      72              :       inline void
+      73           58 :       __return_temporary_buffer(_Tp* __p,
+      74              :                                 size_t __len __attribute__((__unused__)))
+      75              :       {
+      76              : #if __cpp_sized_deallocation
+      77           58 :         ::operator delete(__p, __len * sizeof(_Tp));
+      78              : #else
+      79              :         ::operator delete(__p);
+      80              : #endif
+      81           58 :       }
+      82              :   }
+      83              : 
+      84              :   /**
+      85              :    *  @brief Allocates a temporary buffer.
+      86              :    *  @param  __len  The number of objects of type Tp.
+      87              :    *  @return See full description.
+      88              :    *
+      89              :    *  Reinventing the wheel, but this time with prettier spokes!
+      90              :    *
+      91              :    *  This function tries to obtain storage for @c __len adjacent Tp
+      92              :    *  objects.  The objects themselves are not constructed, of course.
+      93              :    *  A pair<> is returned containing <em>the buffer s address and
+      94              :    *  capacity (in the units of sizeof(_Tp)), or a pair of 0 values if
+      95              :    *  no storage can be obtained.</em>  Note that the capacity obtained
+      96              :    *  may be less than that requested if the memory is unavailable;
+      97              :    *  you should compare len with the .second return value.
+      98              :    *
+      99              :    * Provides the nothrow exception guarantee.
+     100              :    */
+     101              :   template<typename _Tp>
+     102              :     _GLIBCXX17_DEPRECATED
+     103              :     pair<_Tp*, ptrdiff_t>
+     104           58 :     get_temporary_buffer(ptrdiff_t __len) _GLIBCXX_NOEXCEPT
+     105              :     {
+     106           58 :       const ptrdiff_t __max =
+     107              :         __gnu_cxx::__numeric_traits<ptrdiff_t>::__max / sizeof(_Tp);
+     108           58 :       if (__len > __max)
+     109            0 :         __len = __max;
+     110              : 
+     111           58 :       while (__len > 0)
+     112              :         {
+     113           58 :           _Tp* __tmp = static_cast<_Tp*>(::operator new(__len * sizeof(_Tp),
+     114              :                                                         std::nothrow));
+     115           58 :           if (__tmp != 0)
+     116           58 :             return std::pair<_Tp*, ptrdiff_t>(__tmp, __len);
+     117            0 :           __len = __len == 1 ? 0 : ((__len + 1) / 2);
+     118              :         }
+     119            0 :       return std::pair<_Tp*, ptrdiff_t>(static_cast<_Tp*>(0), 0);
+     120              :     }
+     121              : 
+     122              :   /**
+     123              :    *  @brief The companion to get_temporary_buffer().
+     124              :    *  @param  __p  A buffer previously allocated by get_temporary_buffer.
+     125              :    *  @return   None.
+     126              :    *
+     127              :    *  Frees the memory pointed to by __p.
+     128              :    */
+     129              :   template<typename _Tp>
+     130              :     inline void
+     131              :     return_temporary_buffer(_Tp* __p)
+     132              :     { ::operator delete(__p); }
+     133              : 
+     134              :   /**
+     135              :    *  This class is used in two places: stl_algo.h and ext/memory,
+     136              :    *  where it is wrapped as the temporary_buffer class.  See
+     137              :    *  temporary_buffer docs for more notes.
+     138              :    */
+     139              :   template<typename _ForwardIterator, typename _Tp>
+     140              :     class _Temporary_buffer
+     141              :     {
+     142              :       // concept requirements
+     143              :       __glibcxx_class_requires(_ForwardIterator, _ForwardIteratorConcept)
+     144              : 
+     145              :     public:
+     146              :       typedef _Tp         value_type;
+     147              :       typedef value_type* pointer;
+     148              :       typedef pointer     iterator;
+     149              :       typedef ptrdiff_t   size_type;
+     150              : 
+     151              :     protected:
+     152              :       size_type  _M_original_len;
+     153              :       size_type  _M_len;
+     154              :       pointer    _M_buffer;
+     155              : 
+     156              :     public:
+     157              :       /// As per Table mumble.
+     158              :       size_type
+     159          116 :       size() const
+     160          116 :       { return _M_len; }
+     161              : 
+     162              :       /// Returns the size requested by the constructor; may be >size().
+     163              :       size_type
+     164           58 :       requested_size() const
+     165           58 :       { return _M_original_len; }
+     166              : 
+     167              :       /// As per Table mumble.
+     168              :       iterator
+     169           58 :       begin()
+     170           58 :       { return _M_buffer; }
+     171              : 
+     172              :       /// As per Table mumble.
+     173              :       iterator
+     174              :       end()
+     175              :       { return _M_buffer + _M_len; }
+     176              : 
+     177              :       /**
+     178              :        * Constructs a temporary buffer of a size somewhere between
+     179              :        * zero and the given length.
+     180              :        */
+     181              :       _Temporary_buffer(_ForwardIterator __seed, size_type __original_len);
+     182              : 
+     183           58 :       ~_Temporary_buffer()
+     184              :       {
+     185           58 :         std::_Destroy(_M_buffer, _M_buffer + _M_len);
+     186           58 :         std::__detail::__return_temporary_buffer(_M_buffer, _M_len);
+     187           58 :       }
+     188              : 
+     189              :     private:
+     190              :       // Disable copy constructor and assignment operator.
+     191              :       _Temporary_buffer(const _Temporary_buffer&);
+     192              : 
+     193              :       void
+     194              :       operator=(const _Temporary_buffer&);
+     195              :     };
+     196              : 
+     197              : 
+     198              :   template<bool>
+     199              :     struct __uninitialized_construct_buf_dispatch
+     200              :     {
+     201              :       template<typename _Pointer, typename _ForwardIterator>
+     202              :         static void
+     203           58 :         __ucr(_Pointer __first, _Pointer __last,
+     204              :               _ForwardIterator __seed)
+     205              :         {
+     206           58 :           if (__first == __last)
+     207            0 :             return;
+     208              : 
+     209           58 :           _Pointer __cur = __first;
+     210              :           __try
+     211              :             {
+     212           58 :               std::_Construct(std::__addressof(*__first),
+     213           58 :                               _GLIBCXX_MOVE(*__seed));
+     214           58 :               _Pointer __prev = __cur;
+     215           58 :               ++__cur;
+     216          582 :               for(; __cur != __last; ++__cur, ++__prev)
+     217          524 :                 std::_Construct(std::__addressof(*__cur),
+     218          524 :                                 _GLIBCXX_MOVE(*__prev));
+     219           58 :               *__seed = _GLIBCXX_MOVE(*__prev);
+     220              :             }
+     221              :           __catch(...)
+     222              :             {
+     223              :               std::_Destroy(__first, __cur);
+     224              :               __throw_exception_again;
+     225              :             }
+     226              :         }
+     227              :     };
+     228              : 
+     229              :   template<>
+     230              :     struct __uninitialized_construct_buf_dispatch<true>
+     231              :     {
+     232              :       template<typename _Pointer, typename _ForwardIterator>
+     233              :         static void
+     234              :         __ucr(_Pointer, _Pointer, _ForwardIterator) { }
+     235              :     };
+     236              : 
+     237              :   // Constructs objects in the range [first, last).
+     238              :   // Note that while these new objects will take valid values,
+     239              :   // their exact value is not defined. In particular they may
+     240              :   // be 'moved from'.
+     241              :   //
+     242              :   // While *__seed may be altered during this algorithm, it will have
+     243              :   // the same value when the algorithm finishes, unless one of the
+     244              :   // constructions throws.
+     245              :   //
+     246              :   // Requirements: _Pointer::value_type(_Tp&&) is valid.
+     247              :   template<typename _Pointer, typename _ForwardIterator>
+     248              :     inline void
+     249           58 :     __uninitialized_construct_buf(_Pointer __first, _Pointer __last,
+     250              :                                   _ForwardIterator __seed)
+     251              :     {
+     252              :       typedef typename std::iterator_traits<_Pointer>::value_type
+     253              :         _ValueType;
+     254              : 
+     255              :       std::__uninitialized_construct_buf_dispatch<
+     256              :         __has_trivial_constructor(_ValueType)>::
+     257           58 :           __ucr(__first, __last, __seed);
+     258           58 :     }
+     259              : 
+     260              : #pragma GCC diagnostic push
+     261              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+     262              :   template<typename _ForwardIterator, typename _Tp>
+     263           58 :     _Temporary_buffer<_ForwardIterator, _Tp>::
+     264              :     _Temporary_buffer(_ForwardIterator __seed, size_type __original_len)
+     265           58 :     : _M_original_len(__original_len), _M_len(0), _M_buffer(0)
+     266              :     {
+     267              :       std::pair<pointer, size_type> __p(
+     268           58 :                 std::get_temporary_buffer<value_type>(_M_original_len));
+     269              : 
+     270           58 :       if (__p.first)
+     271              :         {
+     272              :           __try
+     273              :             {
+     274           58 :               std::__uninitialized_construct_buf(__p.first, __p.first + __p.second,
+     275              :                                                  __seed);
+     276           58 :               _M_buffer = __p.first;
+     277           58 :               _M_len = __p.second;
+     278              :             }
+     279            0 :           __catch(...)
+     280              :             {
+     281            0 :               std::__detail::__return_temporary_buffer(__p.first, __p.second);
+     282            0 :               __throw_exception_again;
+     283              :             }
+     284              :         }
+     285           58 :     }
+     286              : #pragma GCC diagnostic pop
+     287              : 
+     288              : _GLIBCXX_END_NAMESPACE_VERSION
+     289              : } // namespace
+     290              : 
+     291              : #endif /* _STL_TEMPBUF_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_tree.h.func-c.html b/html/usr/include/c++/13/bits/stl_tree.h.func-c.html new file mode 100644 index 0000000..5b6bdfb --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_tree.h.func-c.html @@ -0,0 +1,6613 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_tree.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_tree.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:91.7 %458420
Test Date:2024-04-30 13:17:26Functions:85.8 %846726
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE21_M_get_Node_allocatorEv0
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEmmEv0
_ZSteqRKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EESP_0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEC2Ev8
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEptEv56
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE5emptyEv62
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEppEi68
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEppEi2
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEppEi66
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_erase_auxESt23_Rb_tree_const_iteratorISB_E68
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_erase_auxESt23_Rb_tree_const_iteratorISB_E2
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE12_M_erase_auxESt23_Rb_tree_const_iteratorISH_E66
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11equal_rangeERS7_106
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11equal_rangeERS7_2
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE11equal_rangeERS7_104
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_erase_auxESt23_Rb_tree_const_iteratorISB_ESJ_106
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_erase_auxESt23_Rb_tree_const_iteratorISB_ESJ_2
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE12_M_erase_auxESt23_Rb_tree_const_iteratorISH_ESP_104
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_upper_boundEPSt13_Rb_tree_nodeISB_EPSt18_Rb_tree_node_baseRS7_106
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_upper_boundEPSt13_Rb_tree_nodeISB_EPSt18_Rb_tree_node_baseRS7_2
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE14_M_upper_boundEPSt13_Rb_tree_nodeISH_EPSt18_Rb_tree_node_baseRS7_104
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE5eraseERS7_106
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE5eraseERS7_2
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE5eraseERS7_104
_ZNKSt17_Rb_tree_iteratorISt4pairIKllEEptEv116
_ZNKSt17_Rb_tree_iteratorISt4pairIKllEEptEv0
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEptEv116
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE13_Rb_tree_implISC_Lb1EEC2ERKSC_OSaISt13_Rb_tree_nodeIS8_EE186
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE13_Rb_tree_implISH_Lb1EEC2ERKSH_OSaISt13_Rb_tree_nodeISD_EE8
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE13_Rb_tree_implISJ_Lb1EEC2ERKSJ_OSaISt13_Rb_tree_nodeISF_EE8
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE13_Rb_tree_implISG_Lb1EEC2ERKSG_OSaISt13_Rb_tree_nodeISC_EE32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE13_Rb_tree_implISD_Lb1EEC2ERKSD_OSaISt13_Rb_tree_nodeIS9_EE32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE13_Rb_tree_implISH_Lb1EEC2ERKSH_OSaISt13_Rb_tree_nodeISD_EE32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE13_Rb_tree_implISC_Lb1EEC2ERKSC_OSaISt13_Rb_tree_nodeIS8_EE34
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE13_Rb_tree_implISF_Lb1EEC2ERKSF_OSaISt13_Rb_tree_nodeISB_EE40
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE22_M_insert_range_uniqueIPKS8_EENSt9enable_ifIXsrSt7is_sameIS8_NSt15iterator_traitsIT_E10value_typeEE5valueEvE4typeESL_SL_186
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE22_M_insert_range_uniqueIPKSD_EENSt9enable_ifIXsrSt7is_sameISD_NSt15iterator_traitsIT_E10value_typeEE5valueEvE4typeESQ_SQ_8
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE22_M_insert_range_uniqueIPKSF_EENSt9enable_ifIXsrSt7is_sameISF_NSt15iterator_traitsIT_E10value_typeEE5valueEvE4typeESS_SS_8
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE22_M_insert_range_uniqueIPKSC_EENSt9enable_ifIXsrSt7is_sameISC_NSt15iterator_traitsIT_E10value_typeEE5valueEvE4typeESP_SP_32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE22_M_insert_range_uniqueIPKS9_EENSt9enable_ifIXsrSt7is_sameIS9_NSt15iterator_traitsIT_E10value_typeEE5valueEvE4typeESM_SM_32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE22_M_insert_range_uniqueIPKSD_EENSt9enable_ifIXsrSt7is_sameISD_NSt15iterator_traitsIT_E10value_typeEE5valueEvE4typeESQ_SQ_32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE22_M_insert_range_uniqueIPKS8_EENSt9enable_ifIXsrSt7is_sameIS8_NSt15iterator_traitsIT_E10value_typeEE5valueEvE4typeESL_SL_34
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE22_M_insert_range_uniqueIPKSB_EENSt9enable_ifIXsrSt7is_sameISB_NSt15iterator_traitsIT_E10value_typeEE5valueEvE4typeESO_SO_40
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EEC2ERKSC_RKSD_186
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EEC2ERKSH_RKSI_8
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EEC2ERKSJ_RKSK_8
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EEC2ERKSG_RKSH_32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EEC2ERKSD_RKSE_32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EEC2ERKSH_RKSI_32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EEC2ERKSC_RKSD_34
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EEC2ERKSF_RKSG_40
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_move_dataERSH_St17integral_constantIbLb1EE222
_ZNSt15_Rb_tree_header12_M_move_dataERS_224
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_move_assignERSH_St17integral_constantIbLb1EE224
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EEaSEOSH_224
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA2_cvEESt23_Rb_tree_const_iteratorISH_ERKT_374
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA2_cvEESt23_Rb_tree_const_iteratorISH_ERKT_6
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA16_cvEESt23_Rb_tree_const_iteratorISH_ERKT_36
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA15_cvEESt23_Rb_tree_const_iteratorISH_ERKT_38
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA12_cvEESt23_Rb_tree_const_iteratorISH_ERKT_42
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA17_cvEESt23_Rb_tree_const_iteratorISH_ERKT_42
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA6_cvEESt23_Rb_tree_const_iteratorISH_ERKT_50
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA13_cvEESt23_Rb_tree_const_iteratorISH_ERKT_76
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA10_cvEESt23_Rb_tree_const_iteratorISH_ERKT_84
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_lower_bound_trIA2_cvEESt23_Rb_tree_const_iteratorISH_ERKT_374
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_lower_bound_trIA2_cvEESt23_Rb_tree_const_iteratorISH_ERKT_6
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_lower_bound_trIA16_cvEESt23_Rb_tree_const_iteratorISH_ERKT_36
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_lower_bound_trIA15_cvEESt23_Rb_tree_const_iteratorISH_ERKT_38
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_lower_bound_trIA12_cvEESt23_Rb_tree_const_iteratorISH_ERKT_42
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_lower_bound_trIA17_cvEESt23_Rb_tree_const_iteratorISH_ERKT_42
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_lower_bound_trIA6_cvEESt23_Rb_tree_const_iteratorISH_ERKT_50
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_lower_bound_trIA13_cvEESt23_Rb_tree_const_iteratorISH_ERKT_76
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_lower_bound_trIA10_cvEESt23_Rb_tree_const_iteratorISH_ERKT_84
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA2_cvEESt17_Rb_tree_iteratorISH_ERKT_374
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA2_cvEESt17_Rb_tree_iteratorISH_ERKT_6
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA16_cvEESt17_Rb_tree_iteratorISH_ERKT_36
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA15_cvEESt17_Rb_tree_iteratorISH_ERKT_38
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA12_cvEESt17_Rb_tree_iteratorISH_ERKT_42
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA17_cvEESt17_Rb_tree_iteratorISH_ERKT_42
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA6_cvEESt17_Rb_tree_iteratorISH_ERKT_50
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA13_cvEESt17_Rb_tree_iteratorISH_ERKT_76
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA10_cvEESt17_Rb_tree_iteratorISH_ERKT_84
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE20_Reuse_or_alloc_nodeC2ERSH_528
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE20_Reuse_or_alloc_nodeD2Ev528
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EEaSERKSH_644
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE5clearEv912
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE5clearEv54
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE5clearEv224
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE5clearEv634
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE5beginEv1126
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE5beginEv20
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE5beginEv1106
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_M_insert_IRKS8_NSE_11_Alloc_nodeEEESt17_Rb_tree_iteratorIS8_EPSt18_Rb_tree_node_baseSM_OT_RT0_2118
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE10_M_insert_IRKSD_NSJ_11_Alloc_nodeEEESt17_Rb_tree_iteratorISD_EPSt18_Rb_tree_node_baseSR_OT_RT0_32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE10_M_insert_IRKSF_NSL_11_Alloc_nodeEEESt17_Rb_tree_iteratorISF_EPSt18_Rb_tree_node_baseST_OT_RT0_96
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE10_M_insert_IRKSC_NSI_11_Alloc_nodeEEESt17_Rb_tree_iteratorISC_EPSt18_Rb_tree_node_baseSQ_OT_RT0_128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_M_insert_IRKS8_NSE_11_Alloc_nodeEEESt17_Rb_tree_iteratorIS8_EPSt18_Rb_tree_node_baseSM_OT_RT0_134
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE10_M_insert_IRKSD_NSJ_11_Alloc_nodeEEESt17_Rb_tree_iteratorISD_EPSt18_Rb_tree_node_baseSR_OT_RT0_256
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_M_insert_IRKSB_NSH_11_Alloc_nodeEEESt17_Rb_tree_iteratorISB_EPSt18_Rb_tree_node_baseSP_OT_RT0_320
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE10_M_insert_IRKS9_NSF_11_Alloc_nodeEEESt17_Rb_tree_iteratorIS9_EPSt18_Rb_tree_node_baseSN_OT_RT0_1152
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE17_M_insert_unique_IRKS8_NSE_11_Alloc_nodeEEESt17_Rb_tree_iteratorIS8_ESt23_Rb_tree_const_iteratorIS8_EOT_RT0_2118
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE17_M_insert_unique_IRKSD_NSJ_11_Alloc_nodeEEESt17_Rb_tree_iteratorISD_ESt23_Rb_tree_const_iteratorISD_EOT_RT0_32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE17_M_insert_unique_IRKSF_NSL_11_Alloc_nodeEEESt17_Rb_tree_iteratorISF_ESt23_Rb_tree_const_iteratorISF_EOT_RT0_96
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE17_M_insert_unique_IRKSC_NSI_11_Alloc_nodeEEESt17_Rb_tree_iteratorISC_ESt23_Rb_tree_const_iteratorISC_EOT_RT0_128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE17_M_insert_unique_IRKS8_NSE_11_Alloc_nodeEEESt17_Rb_tree_iteratorIS8_ESt23_Rb_tree_const_iteratorIS8_EOT_RT0_134
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE17_M_insert_unique_IRKSD_NSJ_11_Alloc_nodeEEESt17_Rb_tree_iteratorISD_ESt23_Rb_tree_const_iteratorISD_EOT_RT0_256
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE17_M_insert_unique_IRKSB_NSH_11_Alloc_nodeEEESt17_Rb_tree_iteratorISB_ESt23_Rb_tree_const_iteratorISB_EOT_RT0_320
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE17_M_insert_unique_IRKS9_NSF_11_Alloc_nodeEEESt17_Rb_tree_iteratorIS9_ESt23_Rb_tree_const_iteratorIS9_EOT_RT0_1152
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEppEv3324
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEppEv28
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEppEv3296
_ZStneRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEESE_4932
_ZStneRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEESE_4
_ZStneRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEESK_526
_ZStneRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEESH_4402
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE20_Reuse_or_alloc_node10_M_extractEv13280
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE20_Reuse_or_alloc_nodeclIRKSB_EEPSt13_Rb_tree_nodeISB_EOT_13280
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE4findERS1_13526
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE4findERS1_0
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE4findERS7_4
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE4findERS7_13522
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11lower_boundERS7_14194
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE14_M_lower_boundEPKSt13_Rb_tree_nodeIS2_EPKSt18_Rb_tree_node_baseRS1_27720
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE14_M_lower_boundEPKSt13_Rb_tree_nodeIS2_EPKSt18_Rb_tree_node_baseRS1_0
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE14_M_lower_boundEPKSt13_Rb_tree_nodeISE_EPKSt18_Rb_tree_node_baseRS7_4
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_lower_boundEPKSt13_Rb_tree_nodeISB_EPKSt18_Rb_tree_node_baseRS7_27716
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE6_M_endEv28094
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE6_M_endEv0
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE6_M_endEv4
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE6_M_endEv374
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_M_endEv27716
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_M_beginEv28094
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_M_beginEv0
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE8_M_beginEv4
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE8_M_beginEv374
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_beginEv27716
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEdeEv31684
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEdeEv0
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEdeEv3296
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEdeEv28388
_ZSteqRKSt23_Rb_tree_const_iteratorISt4pairIKllEES5_41430
_ZSteqRKSt23_Rb_tree_const_iteratorISt4pairIKllEES5_0
_ZSteqRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEESH_8
_ZSteqRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEESK_182
_ZSteqRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEESE_41240
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE3endEv42908
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE3endEv0
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE3endEv556
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE3endEv1114
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE3endEv41238
_ZNSt23_Rb_tree_const_iteratorISt4pairIKllEEC2EPKSt18_Rb_tree_node_base72128
_ZNSt23_Rb_tree_const_iteratorISt4pairIKllEEC2EPKSt18_Rb_tree_node_base0
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEC2EPKSt18_Rb_tree_node_base950
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEC2EPKSt18_Rb_tree_node_base2224
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEC2EPKSt18_Rb_tree_node_base68954
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE4findERS1_77490
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE4findERS1_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE4findERS7_14216
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE4findERS7_63274
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE7_S_leftEPKSt18_Rb_tree_node_base86920
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE7_S_leftEPKSt18_Rb_tree_node_base0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE7_S_leftEPKSt18_Rb_tree_node_base4
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE7_S_leftEPKSt18_Rb_tree_node_base276
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_S_leftEPKSt18_Rb_tree_node_base86640
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_S_rightEPKSt18_Rb_tree_node_base90868
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_S_rightEPKSt18_Rb_tree_node_base0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE8_S_rightEPKSt18_Rb_tree_node_base2
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE8_S_rightEPKSt18_Rb_tree_node_base136
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_S_rightEPKSt18_Rb_tree_node_base90730
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE24_M_get_insert_unique_posERS1_405348
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE24_M_get_insert_unique_posERS1_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE24_M_get_insert_unique_posERS7_32
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE24_M_get_insert_unique_posERS2_32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE24_M_get_insert_unique_posERS7_50
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE24_M_get_insert_unique_posERS7_64
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE24_M_get_insert_unique_posERS8_80
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE24_M_get_insert_unique_posERS7_90
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE24_M_get_insert_unique_posERS7_96
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE24_M_get_insert_unique_posERS7_98
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE24_M_get_insert_unique_posERS8_160
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE24_M_get_insert_unique_posERS1_250
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE24_M_get_insert_unique_posERS7_286
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE24_M_get_insert_unique_posERS8_544
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE24_M_get_insert_unique_posERS7_600
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE24_M_get_insert_unique_posERS7_402966
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE13_Rb_tree_implIS6_Lb1EEC2Ev406558
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE13_Rb_tree_implIS6_Lb1EEC2Ev0
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE13_Rb_tree_implIS7_Lb1EEC2Ev44
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE13_Rb_tree_implISL_Lb1EEC2Ev50
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE13_Rb_tree_implISF_Lb1EEC2Ev212
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE13_Rb_tree_implIS9_Lb1EEC2Ev250
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE13_Rb_tree_implISF_Lb1EEC2Ev1214
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE13_Rb_tree_implISI_Lb1EEC2Ev1822
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE13_Rb_tree_implISC_Lb1EEC2Ev402966
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EEC2Ev406558
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EEC2Ev0
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EEC2Ev44
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EEC2Ev50
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EEC2Ev212
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EEC2Ev250
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EEC2Ev1214
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EEC2Ev1822
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EEC2Ev402966
_ZNSt20_Rb_tree_key_compareISt4lessIiEEC2Ev464798
_ZNSt20_Rb_tree_key_compareISt4lessIlEEC2Ev0
_ZNSt20_Rb_tree_key_compareISt4lessIvEEC2Ev50
_ZNSt20_Rb_tree_key_compareISt4lessISt4pairIiiEEEC2Ev1112
_ZNSt20_Rb_tree_key_compareISt4lessIiEEC2Ev57418
_ZNSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2Ev406218
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE13_Rb_tree_implISC_Lb1EEC2ERKSG_1590308
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE13_Rb_tree_implISL_Lb1EEC2ERKSP_52
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE13_Rb_tree_implISF_Lb1EEC2ERKSJ_108
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE13_Rb_tree_implISC_Lb1EEC2ERKSG_1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_copyERKSE_1590308
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE7_M_copyERKSN_52
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_M_copyERKSH_108
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_copyERKSE_1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EEC2ERKSE_1590308
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EEC2ERKSN_52
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EEC2ERKSH_108
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EEC2ERKSE_1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_Alloc_nodeC2ERSE_1590494
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE11_Alloc_nodeC2ERSJ_8
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE11_Alloc_nodeC2ERSL_8
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE11_Alloc_nodeC2ERSI_32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE11_Alloc_nodeC2ERSF_32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE11_Alloc_nodeC2ERSJ_32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_Alloc_nodeC2ERSE_34
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_Alloc_nodeC2ERSH_40
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE11_Alloc_nodeC2ERSN_52
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_Alloc_nodeC2ERSH_108
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_Alloc_nodeC2ERSE_1590148
_ZNSt20_Rb_tree_key_compareISt4lessIvEEC2ERKS1_1590500
_ZNSt20_Rb_tree_key_compareISt4lessISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEEC2ERKS9_32
_ZNSt20_Rb_tree_key_compareISt4lessISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EEEC2ERKS9_40
_ZNSt20_Rb_tree_key_compareISt4lessIvEEC2ERKS1_52
_ZNSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2ERKS7_1590376
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_S_maximumEPSt18_Rb_tree_node_base1590832
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_S_maximumEPSt18_Rb_tree_node_base52
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_S_maximumEPSt18_Rb_tree_node_base632
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_S_maximumEPSt18_Rb_tree_node_base1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_S_minimumEPSt18_Rb_tree_node_base1590832
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_S_minimumEPSt18_Rb_tree_node_base52
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_S_minimumEPSt18_Rb_tree_node_base632
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_S_minimumEPSt18_Rb_tree_node_base1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_copyILb0ENSE_11_Alloc_nodeEEEPSt13_Rb_tree_nodeIS8_ERKSE_RT0_1590832
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE7_M_copyILb0ENSN_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISH_ERKSN_RT0_52
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_M_copyILb0ENSH_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISB_ERKSH_RT0_108
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_M_copyILb0ENSH_20_Reuse_or_alloc_nodeEEEPSt13_Rb_tree_nodeISB_ERKSH_RT0_524
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_copyILb0ENSE_11_Alloc_nodeEEEPSt13_Rb_tree_nodeIS8_ERKSE_RT0_1590148
_ZNSt18_Rb_tree_node_base10_S_maximumEPS_1590834
_ZNSt18_Rb_tree_node_base10_S_minimumEPS_1590834
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_rootEv1590836
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE7_M_rootEv52
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_M_rootEv636
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_rootEv1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_rootEv1591584
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE7_M_rootEv52
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_M_rootEv1384
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_rootEv1590148
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE4sizeEv1648842
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE4sizeEv0
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE4sizeEv32
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE4sizeEv96
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE4sizeEv128
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE4sizeEv134
_ZNKSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE4sizeEv176
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE4sizeEv206
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE4sizeEv256
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE4sizeEv320
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE4sizeEv414
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE4sizeEv692
_ZNKSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE4sizeEv1014
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE4sizeEv1152
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE4sizeEv2082
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE4sizeEv1642140
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EED2Ev1996380
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EED2Ev0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EED2Ev8
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EED2Ev8
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EED2Ev32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EED2Ev32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EED2Ev32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EED2Ev34
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EED2Ev40
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EED2Ev44
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EED2Ev100
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EED2Ev102
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EED2Ev250
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EED2Ev1042
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EED2Ev1542
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EED2Ev1993114
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE5beginEv1996402
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE5beginEv0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE5beginEv24
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE5beginEv32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE5beginEv56
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE5beginEv64
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE5beginEv96
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE5beginEv96
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE5beginEv98
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE5beginEv190
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE5beginEv272
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE5beginEv288
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE5beginEv288
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE5beginEv500
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE5beginEv402966
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE5beginEv1591432
_ZNSt15_Rb_tree_headerC2Ev2056374
_ZNSt15_Rb_tree_header8_M_resetEv2064532
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE12_M_rightmostEv4078528
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE12_M_rightmostEv0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE12_M_rightmostEv24
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE12_M_rightmostEv104
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE12_M_rightmostEv104
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE12_M_rightmostEv128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE12_M_rightmostEv136
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_rightmostEv232
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE12_M_rightmostEv288
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE12_M_rightmostEv320
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_rightmostEv536
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE12_M_rightmostEv1528
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE12_M_rightmostEv1728
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_rightmostEv1964
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE12_M_rightmostEv2940
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE12_M_rightmostEv4068496
_ZNSt17_Rb_tree_iteratorISt4pairIKllEEmmEv7695776
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEmmEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEEmmEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEEmmEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEmmEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEEmmEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKiSt6vectorIiSaIiEEEEmmEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKllEEmmEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEmmEv26
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEEmmEv40
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEEmmEv256
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_IiiEdEEmmEv322
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEmmEv400
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEmmEv1170
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEmmEv9890
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEmmEv7683672
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE10_Auto_node6_M_keyEv10340000
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_node6_M_keyEv0
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE10_Auto_node6_M_keyEv0
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_Auto_node6_M_keyEv0
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE10_Auto_node6_M_keyEv0
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE10_Auto_node6_M_keyEv0
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_Auto_node6_M_keyEv110
_ZNKSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE10_Auto_node6_M_keyEv584
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_node6_M_keyEv848
_ZNKSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE10_Auto_node6_M_keyEv1018
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_node6_M_keyEv2590
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE10_Auto_node6_M_keyEv13380
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_Auto_node6_M_keyEv10321470
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE10_Auto_node9_M_insertES0_IPSt18_Rb_tree_node_baseSB_E10340000
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_node9_M_insertES6_IPSt18_Rb_tree_node_baseSK_E0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE10_Auto_node9_M_insertES6_IPSt18_Rb_tree_node_baseSM_E0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_Auto_node9_M_insertES6_IPSt18_Rb_tree_node_baseSH_E0
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE10_Auto_node9_M_insertES0_IPSt18_Rb_tree_node_baseSI_E0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE10_Auto_node9_M_insertES0_IPSt18_Rb_tree_node_baseSB_E0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_Auto_node9_M_insertES6_IPSt18_Rb_tree_node_baseSQ_E110
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE10_Auto_node9_M_insertES0_IPSt18_Rb_tree_node_baseSC_E584
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_node9_M_insertES6_IPSt18_Rb_tree_node_baseSK_E848
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE10_Auto_node9_M_insertES0_IPSt18_Rb_tree_node_baseSE_E1018
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_node9_M_insertES6_IPSt18_Rb_tree_node_baseSK_E2590
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE10_Auto_node9_M_insertES6_IPSt18_Rb_tree_node_baseSN_E13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_Auto_node9_M_insertES6_IPSt18_Rb_tree_node_baseSH_E10321470
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS1_EESE_IJEEEEERS8_DpOT_10340000
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_Auto_nodeC2IJS5_DnEEERSN_DpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS7_EESN_IJEEEEERSH_DpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS7_EESP_IJEEEEERSJ_DpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS7_EESK_IJEEEEERSE_DpOT_0
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJOS7_EESL_IJEEEEERSF_DpOT_0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS1_EESE_IJEEEEERS8_DpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_Auto_nodeC2IJS5_SG_EEERSN_DpOT_110
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJOS1_EESF_IJEEEEERS9_DpOT_584
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS7_EESN_IJEEEEERSH_DpOT_848
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS1_EESH_IJEEEEERSB_DpOT_1018
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS7_EESN_IJEEEEERSH_DpOT_2590
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS7_EESQ_IJEEEEERSK_DpOT_13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJOS5_EESK_IJEEEEERSE_DpOT_1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS7_EESK_IJEEEEERSE_DpOT_8731322
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE10_Auto_nodeD2Ev10340000
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_nodeD2Ev0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE10_Auto_nodeD2Ev0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_Auto_nodeD2Ev0
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE10_Auto_nodeD2Ev0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE10_Auto_nodeD2Ev0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_Auto_nodeD2Ev110
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE10_Auto_nodeD2Ev584
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_nodeD2Ev848
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE10_Auto_nodeD2Ev1018
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_nodeD2Ev2590
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE10_Auto_nodeD2Ev13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_Auto_nodeD2Ev10321470
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSA_PSt13_Rb_tree_nodeIS2_E10340000
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSJ_PSt13_Rb_tree_nodeISB_E0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSL_PSt13_Rb_tree_nodeISD_E0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSG_PSt13_Rb_tree_nodeIS8_E0
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSH_PSt13_Rb_tree_nodeIS9_E0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSA_PSt13_Rb_tree_nodeIS2_E0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSP_PSt13_Rb_tree_nodeISH_E110
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSB_PSt13_Rb_tree_nodeIS3_E584
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSJ_PSt13_Rb_tree_nodeISB_E848
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSD_PSt13_Rb_tree_nodeIS5_E1018
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSJ_PSt13_Rb_tree_nodeISB_E2590
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSM_PSt13_Rb_tree_nodeISE_E13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSG_PSt13_Rb_tree_nodeIS8_E10321470
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESD_IJEEEEESt17_Rb_tree_iteratorIS2_ESt23_Rb_tree_const_iteratorIS2_EDpOT_10340000
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE22_M_emplace_hint_uniqueIJS5_DnEEESt17_Rb_tree_iteratorISH_ESt23_Rb_tree_const_iteratorISH_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESM_IJEEEEESt17_Rb_tree_iteratorISB_ESt23_Rb_tree_const_iteratorISB_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESO_IJEEEEESt17_Rb_tree_iteratorISD_ESt23_Rb_tree_const_iteratorISD_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESJ_IJEEEEESt17_Rb_tree_iteratorIS8_ESt23_Rb_tree_const_iteratorIS8_EDpOT_0
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJOS7_EESK_IJEEEEESt17_Rb_tree_iteratorIS9_ESt23_Rb_tree_const_iteratorIS9_EDpOT_0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESD_IJEEEEESt17_Rb_tree_iteratorIS2_ESt23_Rb_tree_const_iteratorIS2_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE22_M_emplace_hint_uniqueIJS5_SG_EEESt17_Rb_tree_iteratorISH_ESt23_Rb_tree_const_iteratorISH_EDpOT_110
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJOS1_EESE_IJEEEEESt17_Rb_tree_iteratorIS3_ESt23_Rb_tree_const_iteratorIS3_EDpOT_584
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESM_IJEEEEESt17_Rb_tree_iteratorISB_ESt23_Rb_tree_const_iteratorISB_EDpOT_848
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESG_IJEEEEESt17_Rb_tree_iteratorIS5_ESt23_Rb_tree_const_iteratorIS5_EDpOT_1018
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESM_IJEEEEESt17_Rb_tree_iteratorISB_ESt23_Rb_tree_const_iteratorISB_EDpOT_2590
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESP_IJEEEEESt17_Rb_tree_iteratorISE_ESt23_Rb_tree_const_iteratorISE_EDpOT_13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJOS5_EESJ_IJEEEEESt17_Rb_tree_iteratorIS8_ESt23_Rb_tree_const_iteratorIS8_EDpOT_1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESJ_IJEEEEESt17_Rb_tree_iteratorIS8_ESt23_Rb_tree_const_iteratorIS8_EDpOT_8731322
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS2_ERS1_10342118
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS2_ERS1_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISD_ERS7_32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISF_ERS8_96
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISH_ERS7_110
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISC_ERS7_128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS7_134
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISD_ERS8_256
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISB_ERS7_320
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS3_ERS2_584
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISB_ERS7_848
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS1_1018
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS9_ERS8_1152
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISB_ERS7_2590
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISE_ERS7_13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS7_10321470
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKllEE13_M_const_castEv10342492
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKllEE13_M_const_castEv0
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEE13_M_const_castEv32
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEE13_M_const_castEv96
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEE13_M_const_castEv128
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE13_M_const_castEv134
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEE13_M_const_castEv256
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE13_M_const_castEv320
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEE13_M_const_castEv484
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKS0_IiiEdEE13_M_const_castEv584
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEE13_M_const_castEv848
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKiSt6vectorIiSaIiEEEE13_M_const_castEv1018
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEE13_M_const_castEv1152
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEE13_M_const_castEv2590
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEE13_M_const_castEv13380
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEE13_M_const_castEv10321470
_ZNSt23_Rb_tree_const_iteratorISt4pairIKllEEC2ERKSt17_Rb_tree_iteratorIS2_E10342494
_ZNSt23_Rb_tree_const_iteratorISt4pairIKllEEC2ERKSt17_Rb_tree_iteratorIS2_E0
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEEC2ERKSt17_Rb_tree_iteratorISD_E32
_ZNSt23_Rb_tree_const_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEEC2ERKSt17_Rb_tree_iteratorISF_E96
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEEC2ERKSt17_Rb_tree_iteratorISC_E128
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEC2ERKSt17_Rb_tree_iteratorIS8_E134
_ZNSt23_Rb_tree_const_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEEC2ERKSt17_Rb_tree_iteratorISD_E256
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEC2ERKSt17_Rb_tree_iteratorISB_E320
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEC2ERKSt17_Rb_tree_iteratorISH_E480
_ZNSt23_Rb_tree_const_iteratorISt4pairIKS0_IiiEdEEC2ERKSt17_Rb_tree_iteratorIS3_E584
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEC2ERKSt17_Rb_tree_iteratorISB_E848
_ZNSt23_Rb_tree_const_iteratorISt4pairIKiSt6vectorIiSaIiEEEEC2ERKSt17_Rb_tree_iteratorIS5_E1018
_ZNSt23_Rb_tree_const_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEEC2ERKSt17_Rb_tree_iteratorIS9_E1152
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEC2ERKSt17_Rb_tree_iteratorISB_E2596
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEC2ERKSt17_Rb_tree_iteratorISE_E13380
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEC2ERKSt17_Rb_tree_iteratorIS8_E10321470
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE11_M_leftmostEv12280762
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_M_leftmostEv0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE11_M_leftmostEv0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE11_M_leftmostEv0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_M_leftmostEv0
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE11_M_leftmostEv0
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE11_M_leftmostEv0
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE11_M_leftmostEv0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE11_M_leftmostEv0
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE11_M_leftmostEv12
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE11_M_leftmostEv102
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE11_M_leftmostEv580
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_M_leftmostEv1126
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_M_leftmostEv3998
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE11_M_leftmostEv14150
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_M_leftmostEv12260794
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_copyILb0ENSE_11_Alloc_nodeEEEPSt13_Rb_tree_nodeIS8_ESJ_PSt18_Rb_tree_node_baseRT0_16698788
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE7_M_copyILb0ENSN_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISH_ESS_PSt18_Rb_tree_node_baseRT0_92
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_M_copyILb0ENSH_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISB_ESM_PSt18_Rb_tree_node_baseRT0_514
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_M_copyILb0ENSH_20_Reuse_or_alloc_nodeEEEPSt13_Rb_tree_nodeISB_ESM_PSt18_Rb_tree_node_baseRT0_6994
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_copyILb0ENSE_11_Alloc_nodeEEEPSt13_Rb_tree_nodeIS8_ESJ_PSt18_Rb_tree_node_baseRT0_16691188
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE6_S_keyEPKSt18_Rb_tree_node_base24998592
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE6_S_keyEPKSt18_Rb_tree_node_base0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE6_S_keyEPKSt18_Rb_tree_node_base56
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE6_S_keyEPKSt18_Rb_tree_node_base192
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE6_S_keyEPKSt18_Rb_tree_node_base200
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE6_S_keyEPKSt18_Rb_tree_node_base232
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE6_S_keyEPKSt18_Rb_tree_node_base382
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE6_S_keyEPKSt18_Rb_tree_node_base512
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_S_keyEPKSt18_Rb_tree_node_base568
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE6_S_keyEPKSt18_Rb_tree_node_base1154
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE6_S_keyEPKSt18_Rb_tree_node_base1532
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_S_keyEPKSt18_Rb_tree_node_base1556
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE6_S_keyEPKSt18_Rb_tree_node_base2752
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_S_keyEPKSt18_Rb_tree_node_base32518
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE6_S_keyEPKSt18_Rb_tree_node_base92962
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE6_S_keyEPKSt18_Rb_tree_node_base24863976
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_Alloc_nodeclIRKS8_EEPSt13_Rb_tree_nodeIS8_EOT_30215422
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE11_Alloc_nodeclIRKSD_EEPSt13_Rb_tree_nodeISD_EOT_32
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE11_Alloc_nodeclIRKSF_EEPSt13_Rb_tree_nodeISF_EOT_96
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE11_Alloc_nodeclIRKSH_EEPSt13_Rb_tree_nodeISH_EOT_118
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE11_Alloc_nodeclIRKSC_EEPSt13_Rb_tree_nodeISC_EOT_128
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_Alloc_nodeclIRKS8_EEPSt13_Rb_tree_nodeIS8_EOT_134
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE11_Alloc_nodeclIRKSD_EEPSt13_Rb_tree_nodeISD_EOT_256
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_Alloc_nodeclIRKSB_EEPSt13_Rb_tree_nodeISB_EOT_320
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_Alloc_nodeclIRKSB_EEPSt13_Rb_tree_nodeISB_EOT_898
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE11_Alloc_nodeclIRKS9_EEPSt13_Rb_tree_nodeIS9_EOT_1152
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_Alloc_nodeclIRKS8_EEPSt13_Rb_tree_nodeIS8_EOT_30212288
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE13_M_clone_nodeILb0ENSE_11_Alloc_nodeEEEPSt13_Rb_tree_nodeIS8_ESJ_RT0_30226584
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE13_M_clone_nodeILb0ENSN_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISH_ESS_RT0_118
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE13_M_clone_nodeILb0ENSH_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISB_ESM_RT0_898
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE13_M_clone_nodeILb0ENSH_20_Reuse_or_alloc_nodeEEEPSt13_Rb_tree_nodeISB_ESM_RT0_13280
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE13_M_clone_nodeILb0ENSE_11_Alloc_nodeEEEPSt13_Rb_tree_nodeIS8_ESJ_RT0_30212288
_ZNSt17_Rb_tree_iteratorISt4pairIKllEEppEv31818620
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_IiiEdEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKllEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEppEv124
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEppEv848
_ZNSt17_Rb_tree_iteratorISt4pairIKiSt6vectorIiSaIiEEEEppEv1018
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEppEv31816630
_ZStneRKSt17_Rb_tree_iteratorISt4pairIKllEES5_33423664
_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEESE_0
_ZStneRKSt17_Rb_tree_iteratorISt4pairIKllEES5_0
_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEESK_616
_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEESE_948
_ZStneRKSt17_Rb_tree_iteratorISt4pairIKiSt6vectorIiSaIiEEEES8_1268
_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEESH_33420832
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE11_M_get_nodeEv40568450
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE11_M_get_nodeEv0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE11_M_get_nodeEv32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE11_M_get_nodeEv96
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE11_M_get_nodeEv128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_M_get_nodeEv134
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE11_M_get_nodeEv228
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE11_M_get_nodeEv256
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_M_get_nodeEv320
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE11_M_get_nodeEv584
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_M_get_nodeEv848
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE11_M_get_nodeEv1018
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE11_M_get_nodeEv1152
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE11_M_get_nodeEv13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_M_get_nodeEv16516
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_M_get_nodeEv40533758
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS2_E40568450
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS2_E0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE11_M_put_nodeEPSt13_Rb_tree_nodeISD_E32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE11_M_put_nodeEPSt13_Rb_tree_nodeISF_E96
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE11_M_put_nodeEPSt13_Rb_tree_nodeISC_E128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS8_E134
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE11_M_put_nodeEPSt13_Rb_tree_nodeISH_E228
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE11_M_put_nodeEPSt13_Rb_tree_nodeISD_E256
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_M_put_nodeEPSt13_Rb_tree_nodeISB_E320
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS3_E584
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_M_put_nodeEPSt13_Rb_tree_nodeISB_E848
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS5_E1018
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS9_E1152
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE11_M_put_nodeEPSt13_Rb_tree_nodeISE_E13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_M_put_nodeEPSt13_Rb_tree_nodeISB_E16516
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS8_E40533758
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE12_M_drop_nodeEPSt13_Rb_tree_nodeIS2_E40568450
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE12_M_drop_nodeEPSt13_Rb_tree_nodeIS2_E0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISD_E32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISF_E96
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISC_E128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE12_M_drop_nodeEPSt13_Rb_tree_nodeIS8_E134
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISH_E228
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISD_E256
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISB_E320
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE12_M_drop_nodeEPSt13_Rb_tree_nodeIS3_E584
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISB_E848
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE12_M_drop_nodeEPSt13_Rb_tree_nodeIS5_E1018
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE12_M_drop_nodeEPSt13_Rb_tree_nodeIS9_E1152
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISE_E13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISB_E16516
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE12_M_drop_nodeEPSt13_Rb_tree_nodeIS8_E40533758
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESD_IJEEEEEPSt13_Rb_tree_nodeIS2_EDpOT_40568450
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE14_M_create_nodeIJS5_DnEEEPSt13_Rb_tree_nodeISH_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESM_IJEEEEEPSt13_Rb_tree_nodeISB_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESO_IJEEEEEPSt13_Rb_tree_nodeISD_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESJ_IJEEEEEPSt13_Rb_tree_nodeIS8_EDpOT_0
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJOS7_EESK_IJEEEEEPSt13_Rb_tree_nodeIS9_EDpOT_0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESD_IJEEEEEPSt13_Rb_tree_nodeIS2_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE14_M_create_nodeIJRKSD_EEEPSt13_Rb_tree_nodeISD_EDpOT_32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE14_M_create_nodeIJRKSF_EEEPSt13_Rb_tree_nodeISF_EDpOT_96
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE14_M_create_nodeIJS5_SG_EEEPSt13_Rb_tree_nodeISH_EDpOT_110
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE14_M_create_nodeIJRKSH_EEEPSt13_Rb_tree_nodeISH_EDpOT_118
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE14_M_create_nodeIJRKSC_EEEPSt13_Rb_tree_nodeISC_EDpOT_128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE14_M_create_nodeIJRKS8_EEEPSt13_Rb_tree_nodeIS8_EDpOT_134
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE14_M_create_nodeIJRKSD_EEEPSt13_Rb_tree_nodeISD_EDpOT_256
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_create_nodeIJRKSB_EEEPSt13_Rb_tree_nodeISB_EDpOT_320
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJOS1_EESE_IJEEEEEPSt13_Rb_tree_nodeIS3_EDpOT_584
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESM_IJEEEEEPSt13_Rb_tree_nodeISB_EDpOT_848
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESG_IJEEEEEPSt13_Rb_tree_nodeIS5_EDpOT_1018
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE14_M_create_nodeIJRKS9_EEEPSt13_Rb_tree_nodeIS9_EDpOT_1152
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESM_IJEEEEEPSt13_Rb_tree_nodeISB_EDpOT_2590
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESP_IJEEEEEPSt13_Rb_tree_nodeISE_EDpOT_13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_create_nodeIJRKSB_EEEPSt13_Rb_tree_nodeISB_EDpOT_13926
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJOS5_EESJ_IJEEEEEPSt13_Rb_tree_nodeIS8_EDpOT_1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESJ_IJEEEEEPSt13_Rb_tree_nodeIS8_EDpOT_8731322
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE14_M_create_nodeIJRKS8_EEEPSt13_Rb_tree_nodeIS8_EDpOT_30212288
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS2_E40568702
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS2_E0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISD_E32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISF_E96
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISC_E128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS8_E134
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISH_E228
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISD_E256
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISB_E320
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS3_E584
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISB_E848
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS5_E1018
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS9_E1152
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISE_E13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISB_E16768
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS8_E40533758
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESD_IJEEEEEvPSt13_Rb_tree_nodeIS2_EDpOT_40568702
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_construct_nodeIJS5_DnEEEvPSt13_Rb_tree_nodeISH_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESM_IJEEEEEvPSt13_Rb_tree_nodeISB_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESO_IJEEEEEvPSt13_Rb_tree_nodeISD_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESJ_IJEEEEEvPSt13_Rb_tree_nodeIS8_EDpOT_0
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJOS7_EESK_IJEEEEEvPSt13_Rb_tree_nodeIS9_EDpOT_0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESD_IJEEEEEvPSt13_Rb_tree_nodeIS2_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE17_M_construct_nodeIJRKSD_EEEvPSt13_Rb_tree_nodeISD_EDpOT_32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE17_M_construct_nodeIJRKSF_EEEvPSt13_Rb_tree_nodeISF_EDpOT_96
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_construct_nodeIJS5_SG_EEEvPSt13_Rb_tree_nodeISH_EDpOT_110
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_construct_nodeIJRKSH_EEEvPSt13_Rb_tree_nodeISH_EDpOT_118
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE17_M_construct_nodeIJRKSC_EEEvPSt13_Rb_tree_nodeISC_EDpOT_128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE17_M_construct_nodeIJRKS8_EEEvPSt13_Rb_tree_nodeIS8_EDpOT_134
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE17_M_construct_nodeIJRKSD_EEEvPSt13_Rb_tree_nodeISD_EDpOT_256
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE17_M_construct_nodeIJRKSB_EEEvPSt13_Rb_tree_nodeISB_EDpOT_320
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJOS1_EESE_IJEEEEEvPSt13_Rb_tree_nodeIS3_EDpOT_584
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESM_IJEEEEEvPSt13_Rb_tree_nodeISB_EDpOT_848
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESG_IJEEEEEvPSt13_Rb_tree_nodeIS5_EDpOT_1018
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE17_M_construct_nodeIJRKS9_EEEvPSt13_Rb_tree_nodeIS9_EDpOT_1152
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESM_IJEEEEEvPSt13_Rb_tree_nodeISB_EDpOT_2590
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESP_IJEEEEEvPSt13_Rb_tree_nodeISE_EDpOT_13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE17_M_construct_nodeIJRKSB_EEEvPSt13_Rb_tree_nodeISB_EDpOT_14178
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJOS5_EESJ_IJEEEEEvPSt13_Rb_tree_nodeIS8_EDpOT_1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESJ_IJEEEEEvPSt13_Rb_tree_nodeIS8_EDpOT_8731322
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE17_M_construct_nodeIJRKS8_EEEvPSt13_Rb_tree_nodeIS8_EDpOT_30212288
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E42566202
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE8_M_eraseEPSt13_Rb_tree_nodeISD_E40
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE8_M_eraseEPSt13_Rb_tree_nodeISF_E104
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE8_M_eraseEPSt13_Rb_tree_nodeISC_E160
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E168
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE8_M_eraseEPSt13_Rb_tree_nodeISD_E288
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE8_M_eraseEPSt13_Rb_tree_nodeISH_E318
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E360
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE8_M_eraseEPSt13_Rb_tree_nodeIS3_E628
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E948
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE8_M_eraseEPSt13_Rb_tree_nodeIS9_E1184
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E1268
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE8_M_eraseEPSt13_Rb_tree_nodeISE_E15556
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E18308
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E42526872
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8key_compEv99954126
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8key_compEv0
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8key_compEv28
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE8key_compEv32
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE8key_compEv48
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE8key_compEv48
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE8key_compEv64
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8key_compEv104
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE8key_compEv150
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE8key_compEv432
_ZNKSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE8key_compEv2192
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8key_compEv3240
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8key_compEv20918
_ZNKSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE8key_compEv98870
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE8key_compEv184176
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8key_compEv99643824
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE11lower_boundERS1_101586478
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE11lower_boundERS1_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11lower_boundERS7_28
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE11lower_boundERS8_32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE11lower_boundERS7_48
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE11lower_boundERS8_48
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE11lower_boundERS8_64
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11lower_boundERS7_104
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE11lower_boundERS7_226
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE11lower_boundERS7_432
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE11lower_boundERS2_2544
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11lower_boundERS7_3446
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11lower_boundERS7_7412
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE11lower_boundERS1_99884
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE11lower_boundERS7_186246
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11lower_boundERS7_101285964
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS2_EPSt18_Rb_tree_node_baseRS1_101997982
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS2_EPSt18_Rb_tree_node_baseRS1_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS8_EPSt18_Rb_tree_node_baseRS7_28
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE14_M_lower_boundEPSt13_Rb_tree_nodeISD_EPSt18_Rb_tree_node_baseRS8_32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE14_M_lower_boundEPSt13_Rb_tree_nodeISC_EPSt18_Rb_tree_node_baseRS7_48
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE14_M_lower_boundEPSt13_Rb_tree_nodeISF_EPSt18_Rb_tree_node_baseRS8_48
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS9_EPSt18_Rb_tree_node_baseRS8_64
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_lower_boundEPSt13_Rb_tree_nodeISB_EPSt18_Rb_tree_node_baseRS7_104
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE14_M_lower_boundEPSt13_Rb_tree_nodeISH_EPSt18_Rb_tree_node_baseRS7_330
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE14_M_lower_boundEPSt13_Rb_tree_nodeISD_EPSt18_Rb_tree_node_baseRS7_432
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS3_EPSt18_Rb_tree_node_baseRS2_2544
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_lower_boundEPSt13_Rb_tree_nodeISB_EPSt18_Rb_tree_node_baseRS7_3446
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_lower_boundEPSt13_Rb_tree_nodeISB_EPSt18_Rb_tree_node_baseRS7_21630
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS5_EPSt18_Rb_tree_node_baseRS1_99884
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE14_M_lower_boundEPSt13_Rb_tree_nodeISE_EPSt18_Rb_tree_node_baseRS7_249520
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS8_EPSt18_Rb_tree_node_baseRS7_101619872
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKllEES5_102800900
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKllEES5_0
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEESI_112
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEESB_126
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEESG_128
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEESF_144
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEESE_160
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEESK_276
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEESC_352
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEESG_456
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKS0_IiiEdEES6_2576
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEESE_3536
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEESE_36130
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKiSt6vectorIiSaIiEEEES8_100134
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEESH_300024
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEESB_102356746
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE3endEv104026530
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE3endEv0
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE3endEv144
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE3endEv162
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE3endEv176
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE3endEv288
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE3endEv424
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE3endEv464
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE3endEv776
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE3endEv1216
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE3endEv2544
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE3endEv3546
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE3endEv35852
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE3endEv100134
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE3endEv1917004
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE3endEv101963800
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_M_beginEv104400622
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_M_beginEv0
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE8_M_beginEv136
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8_M_beginEv160
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE8_M_beginEv176
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_beginEv208
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE8_M_beginEv224
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE8_M_beginEv472
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE8_M_beginEv536
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE8_M_beginEv640
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE8_M_beginEv2620
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_beginEv3636
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_beginEv23182
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE8_M_beginEv100384
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE8_M_beginEv252296
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8_M_beginEv104015952
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE9_M_mbeginEv105991454
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE9_M_mbeginEv0
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE9_M_mbeginEv136
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE9_M_mbeginEv160
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE9_M_mbeginEv176
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE9_M_mbeginEv208
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE9_M_mbeginEv224
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE9_M_mbeginEv472
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE9_M_mbeginEv588
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE9_M_mbeginEv640
_ZNKSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE9_M_mbeginEv2620
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE9_M_mbeginEv3636
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE9_M_mbeginEv23814
_ZNKSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE9_M_mbeginEv100384
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE9_M_mbeginEv252296
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE9_M_mbeginEv105606100
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE6_M_endEv121687708
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE6_M_endEv0
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE6_M_endEv320
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE6_M_endEv394
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE6_M_endEv400
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE6_M_endEv528
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE6_M_endEv632
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE6_M_endEv704
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_M_endEv808
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE6_M_endEv2912
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE6_M_endEv3472
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_M_endEv4872
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_M_endEv26730
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE6_M_endEv102166
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE6_M_endEv273182
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE6_M_endEv121270588
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE21_M_get_Node_allocatorEv162274752
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE21_M_get_Node_allocatorEv0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE21_M_get_Node_allocatorEv128
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE21_M_get_Node_allocatorEv384
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE21_M_get_Node_allocatorEv512
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE21_M_get_Node_allocatorEv536
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE21_M_get_Node_allocatorEv912
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE21_M_get_Node_allocatorEv1024
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE21_M_get_Node_allocatorEv1280
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE21_M_get_Node_allocatorEv2336
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE21_M_get_Node_allocatorEv3392
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE21_M_get_Node_allocatorEv4072
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE21_M_get_Node_allocatorEv4608
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE21_M_get_Node_allocatorEv53520
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE21_M_get_Node_allocatorEv67016
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE21_M_get_Node_allocatorEv162135032
_ZNSt17_Rb_tree_iteratorISt4pairIKllEEC2EPSt18_Rb_tree_node_base229110978
_ZNSt17_Rb_tree_iteratorISt4pairIKllEEC2EPSt18_Rb_tree_node_base0
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEEC2EPSt18_Rb_tree_node_base528
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEC2EPSt18_Rb_tree_node_base654
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEEC2EPSt18_Rb_tree_node_base672
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEEC2EPSt18_Rb_tree_node_base1016
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEEC2EPSt18_Rb_tree_node_base1088
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEC2EPSt18_Rb_tree_node_base1288
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEC2EPSt18_Rb_tree_node_base2126
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEEC2EPSt18_Rb_tree_node_base4416
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_IiiEdEEC2EPSt18_Rb_tree_node_base6320
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEC2EPSt18_Rb_tree_node_base8968
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEC2EPSt18_Rb_tree_node_base63238
_ZNSt17_Rb_tree_iteratorISt4pairIKiSt6vectorIiSaIiEEEEC2EPSt18_Rb_tree_node_base202804
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEC2EPSt18_Rb_tree_node_base3785316
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEC2EPSt18_Rb_tree_node_base225032544
_ZNKSt17_Rb_tree_iteratorISt4pairIKllEEdeEv233344220
_ZNKSt17_Rb_tree_iteratorISt4pairIKllEEdeEv0
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEdeEv56
_ZNKSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEEdeEv64
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEEdeEv96
_ZNKSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEEdeEv96
_ZNKSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEEdeEv128
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEdeEv208
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEdeEv274
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEEdeEv864
_ZNKSt17_Rb_tree_iteratorISt4pairIKS0_IiiEdEEdeEv4152
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEdeEv7534
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEdeEv14136
_ZNKSt17_Rb_tree_iteratorISt4pairIKiSt6vectorIiSaIiEEEEdeEv199772
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEdeEv32187052
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEdeEv200929788
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE7_S_leftEPSt18_Rb_tree_node_base318980488
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE7_S_leftEPSt18_Rb_tree_node_base0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_S_leftEPSt18_Rb_tree_node_base274
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE7_S_leftEPSt18_Rb_tree_node_base308
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE7_S_leftEPSt18_Rb_tree_node_base324
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_S_leftEPSt18_Rb_tree_node_base520
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE7_S_leftEPSt18_Rb_tree_node_base606
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE7_S_leftEPSt18_Rb_tree_node_base644
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE7_S_leftEPSt18_Rb_tree_node_base712
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE7_S_leftEPSt18_Rb_tree_node_base2002
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE7_S_leftEPSt18_Rb_tree_node_base5112
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_S_leftEPSt18_Rb_tree_node_base7168
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_S_leftEPSt18_Rb_tree_node_base90530
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE7_S_leftEPSt18_Rb_tree_node_base117186
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE7_S_leftEPSt18_Rb_tree_node_base723386
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_S_leftEPSt18_Rb_tree_node_base318031716
_ZNSt13_Rb_tree_nodeISt4pairIKllEE9_M_valptrEv344708324
_ZNSt13_Rb_tree_nodeISt4pairIKllEE9_M_valptrEv0
_ZNSt13_Rb_tree_nodeISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEE9_M_valptrEv288
_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE9_M_valptrEv324
_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEE9_M_valptrEv352
_ZNSt13_Rb_tree_nodeISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEE9_M_valptrEv576
_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE9_M_valptrEv848
_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEE9_M_valptrEv928
_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEE9_M_valptrEv964
_ZNSt13_Rb_tree_nodeISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEE9_M_valptrEv2432
_ZNSt13_Rb_tree_nodeISt4pairIKS0_IiiEdEE9_M_valptrEv5320
_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEE9_M_valptrEv9230
_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEE9_M_valptrEv61850
_ZNSt13_Rb_tree_nodeISt4pairIKiSt6vectorIiSaIiEEEE9_M_valptrEv201808
_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEE9_M_valptrEv32213812
_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEE9_M_valptrEv312209592
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_S_rightEPSt18_Rb_tree_node_base445063782
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_S_rightEPSt18_Rb_tree_node_base0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8_S_rightEPSt18_Rb_tree_node_base154
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE8_S_rightEPSt18_Rb_tree_node_base164
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE8_S_rightEPSt18_Rb_tree_node_base236
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE8_S_rightEPSt18_Rb_tree_node_base360
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE8_S_rightEPSt18_Rb_tree_node_base472
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE8_S_rightEPSt18_Rb_tree_node_base488
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_S_rightEPSt18_Rb_tree_node_base504
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE8_S_rightEPSt18_Rb_tree_node_base3084
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE8_S_rightEPSt18_Rb_tree_node_base6160
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_S_rightEPSt18_Rb_tree_node_base6434
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_S_rightEPSt18_Rb_tree_node_base85754
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE8_S_rightEPSt18_Rb_tree_node_base89880
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE8_S_rightEPSt18_Rb_tree_node_base1010426
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8_S_rightEPSt18_Rb_tree_node_base443859666
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE6_S_keyEPKSt13_Rb_tree_nodeIS2_E672338924
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE6_S_keyEPKSt13_Rb_tree_nodeIS2_E0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE6_S_keyEPKSt13_Rb_tree_nodeIS8_E360
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE6_S_keyEPKSt13_Rb_tree_nodeISC_E408
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE6_S_keyEPKSt13_Rb_tree_nodeISF_E600
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_S_keyEPKSt13_Rb_tree_nodeISB_E952
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE6_S_keyEPKSt13_Rb_tree_nodeISD_E1004
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE6_S_keyEPKSt13_Rb_tree_nodeISD_E1176
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE6_S_keyEPKSt13_Rb_tree_nodeISH_E1550
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE6_S_keyEPKSt13_Rb_tree_nodeIS9_E5534
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE6_S_keyEPKSt13_Rb_tree_nodeIS3_E11800
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_S_keyEPKSt13_Rb_tree_nodeISB_E14308
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE6_S_keyEPKSt13_Rb_tree_nodeIS5_E208344
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_S_keyEPKSt13_Rb_tree_nodeISB_E334818
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE6_S_keyEPKSt13_Rb_tree_nodeISE_E1812592
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE6_S_keyEPKSt13_Rb_tree_nodeIS8_E669945478
_ZNKSt13_Rb_tree_nodeISt4pairIKllEE9_M_valptrEv672370664
_ZNKSt13_Rb_tree_nodeISt4pairIKllEE9_M_valptrEv0
_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE9_M_valptrEv360
_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEE9_M_valptrEv408
_ZNKSt13_Rb_tree_nodeISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEE9_M_valptrEv600
_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE9_M_valptrEv952
_ZNKSt13_Rb_tree_nodeISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEE9_M_valptrEv1004
_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEE9_M_valptrEv1176
_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEE9_M_valptrEv1606
_ZNKSt13_Rb_tree_nodeISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEE9_M_valptrEv5534
_ZNKSt13_Rb_tree_nodeISt4pairIKS0_IiiEdEE9_M_valptrEv11800
_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEE9_M_valptrEv14308
_ZNKSt13_Rb_tree_nodeISt4pairIKiSt6vectorIiSaIiEEEE9_M_valptrEv208344
_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEE9_M_valptrEv363206
_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEE9_M_valptrEv1815888
_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEE9_M_valptrEv669945478
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_tree.h.func.html b/html/usr/include/c++/13/bits/stl_tree.h.func.html new file mode 100644 index 0000000..156f04d --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_tree.h.func.html @@ -0,0 +1,6613 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_tree.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_tree.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:91.7 %458420
Test Date:2024-04-30 13:17:26Functions:85.8 %846726
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt13_Rb_tree_nodeISt4pairIKllEE9_M_valptrEv672370664
_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEE9_M_valptrEv1606
_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEE9_M_valptrEv14308
_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE9_M_valptrEv952
_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEE9_M_valptrEv408
_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEE9_M_valptrEv1815888
_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEE9_M_valptrEv1176
_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEE9_M_valptrEv363206
_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE9_M_valptrEv360
_ZNKSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEE9_M_valptrEv669945478
_ZNKSt13_Rb_tree_nodeISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEE9_M_valptrEv600
_ZNKSt13_Rb_tree_nodeISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEE9_M_valptrEv5534
_ZNKSt13_Rb_tree_nodeISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEE9_M_valptrEv1004
_ZNKSt13_Rb_tree_nodeISt4pairIKS0_IiiEdEE9_M_valptrEv11800
_ZNKSt13_Rb_tree_nodeISt4pairIKiSt6vectorIiSaIiEEEE9_M_valptrEv208344
_ZNKSt13_Rb_tree_nodeISt4pairIKllEE9_M_valptrEv0
_ZNKSt17_Rb_tree_iteratorISt4pairIKllEEdeEv233344220
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEdeEv274
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEdeEv7534
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEdeEv208
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEEdeEv96
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEdeEv32187052
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEEdeEv864
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEdeEv14136
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEdeEv56
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEdeEv200929788
_ZNKSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEEdeEv96
_ZNKSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEEdeEv128
_ZNKSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEEdeEv64
_ZNKSt17_Rb_tree_iteratorISt4pairIKS0_IiiEdEEdeEv4152
_ZNKSt17_Rb_tree_iteratorISt4pairIKiSt6vectorIiSaIiEEEEdeEv199772
_ZNKSt17_Rb_tree_iteratorISt4pairIKllEEdeEv0
_ZNKSt17_Rb_tree_iteratorISt4pairIKllEEptEv116
_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEptEv116
_ZNKSt17_Rb_tree_iteratorISt4pairIKllEEptEv0
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEptEv56
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEdeEv31684
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEdeEv0
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEdeEv3296
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEdeEv28388
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKllEE13_M_const_castEv10342492
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEE13_M_const_castEv484
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEE13_M_const_castEv848
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE13_M_const_castEv320
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEE13_M_const_castEv128
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEE13_M_const_castEv13380
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEE13_M_const_castEv32
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEE13_M_const_castEv2590
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE13_M_const_castEv134
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEE13_M_const_castEv10321470
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEE13_M_const_castEv96
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEE13_M_const_castEv1152
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEE13_M_const_castEv256
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKS0_IiiEdEE13_M_const_castEv584
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKiSt6vectorIiSaIiEEEE13_M_const_castEv1018
_ZNKSt23_Rb_tree_const_iteratorISt4pairIKllEE13_M_const_castEv0
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA2_cvEESt23_Rb_tree_const_iteratorISH_ERKT_374
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA10_cvEESt23_Rb_tree_const_iteratorISH_ERKT_84
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA12_cvEESt23_Rb_tree_const_iteratorISH_ERKT_42
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA13_cvEESt23_Rb_tree_const_iteratorISH_ERKT_76
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA15_cvEESt23_Rb_tree_const_iteratorISH_ERKT_38
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA16_cvEESt23_Rb_tree_const_iteratorISH_ERKT_36
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA17_cvEESt23_Rb_tree_const_iteratorISH_ERKT_42
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA2_cvEESt23_Rb_tree_const_iteratorISH_ERKT_6
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA6_cvEESt23_Rb_tree_const_iteratorISH_ERKT_50
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_lower_bound_trIA2_cvEESt23_Rb_tree_const_iteratorISH_ERKT_374
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_lower_bound_trIA10_cvEESt23_Rb_tree_const_iteratorISH_ERKT_84
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_lower_bound_trIA12_cvEESt23_Rb_tree_const_iteratorISH_ERKT_42
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_lower_bound_trIA13_cvEESt23_Rb_tree_const_iteratorISH_ERKT_76
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_lower_bound_trIA15_cvEESt23_Rb_tree_const_iteratorISH_ERKT_38
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_lower_bound_trIA16_cvEESt23_Rb_tree_const_iteratorISH_ERKT_36
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_lower_bound_trIA17_cvEESt23_Rb_tree_const_iteratorISH_ERKT_42
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_lower_bound_trIA2_cvEESt23_Rb_tree_const_iteratorISH_ERKT_6
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_lower_bound_trIA6_cvEESt23_Rb_tree_const_iteratorISH_ERKT_50
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE5emptyEv62
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE5beginEv1126
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE5beginEv20
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE5beginEv1106
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11lower_boundERS7_14194
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE21_M_get_Node_allocatorEv0
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_Alloc_nodeclIRKS8_EEPSt13_Rb_tree_nodeIS8_EOT_30215422
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE11_Alloc_nodeclIRKSH_EEPSt13_Rb_tree_nodeISH_EOT_118
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_Alloc_nodeclIRKSB_EEPSt13_Rb_tree_nodeISB_EOT_320
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE11_Alloc_nodeclIRKSC_EEPSt13_Rb_tree_nodeISC_EOT_128
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE11_Alloc_nodeclIRKSD_EEPSt13_Rb_tree_nodeISD_EOT_32
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_Alloc_nodeclIRKSB_EEPSt13_Rb_tree_nodeISB_EOT_898
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_Alloc_nodeclIRKS8_EEPSt13_Rb_tree_nodeIS8_EOT_134
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_Alloc_nodeclIRKS8_EEPSt13_Rb_tree_nodeIS8_EOT_30212288
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE11_Alloc_nodeclIRKSF_EEPSt13_Rb_tree_nodeISF_EOT_96
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE11_Alloc_nodeclIRKS9_EEPSt13_Rb_tree_nodeIS9_EOT_1152
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE11_Alloc_nodeclIRKSD_EEPSt13_Rb_tree_nodeISD_EOT_256
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_rootEv1590836
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE7_M_rootEv52
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_M_rootEv636
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_rootEv1590148
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE10_Auto_node6_M_keyEv10340000
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_Auto_node6_M_keyEv110
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_node6_M_keyEv848
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_node6_M_keyEv0
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE10_Auto_node6_M_keyEv13380
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE10_Auto_node6_M_keyEv0
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_node6_M_keyEv2590
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_Auto_node6_M_keyEv0
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_Auto_node6_M_keyEv10321470
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE10_Auto_node6_M_keyEv0
_ZNKSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE10_Auto_node6_M_keyEv584
_ZNKSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE10_Auto_node6_M_keyEv1018
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE10_Auto_node6_M_keyEv0
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE14_M_lower_boundEPKSt13_Rb_tree_nodeIS2_EPKSt18_Rb_tree_node_baseRS1_27720
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE14_M_lower_boundEPKSt13_Rb_tree_nodeISE_EPKSt18_Rb_tree_node_baseRS7_4
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_lower_boundEPKSt13_Rb_tree_nodeISB_EPKSt18_Rb_tree_node_baseRS7_27716
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE14_M_lower_boundEPKSt13_Rb_tree_nodeIS2_EPKSt18_Rb_tree_node_baseRS1_0
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE3endEv42908
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE3endEv556
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE3endEv1114
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE3endEv41238
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE3endEv0
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE4findERS1_13526
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE4findERS7_4
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE4findERS7_13522
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE4findERS1_0
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE4sizeEv1648842
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE4sizeEv414
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE4sizeEv206
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE4sizeEv320
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE4sizeEv128
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE4sizeEv2082
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE4sizeEv32
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE4sizeEv692
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE4sizeEv134
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE4sizeEv1642140
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE4sizeEv96
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE4sizeEv1152
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE4sizeEv256
_ZNKSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE4sizeEv176
_ZNKSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE4sizeEv1014
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE4sizeEv0
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE6_M_endEv28094
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE6_M_endEv374
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE6_M_endEv4
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_M_endEv27716
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE6_M_endEv0
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_M_beginEv28094
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE8_M_beginEv374
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE8_M_beginEv4
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_beginEv27716
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_M_beginEv0
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8key_compEv99954126
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE8key_compEv150
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8key_compEv3240
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8key_compEv104
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE8key_compEv48
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE8key_compEv184176
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE8key_compEv432
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8key_compEv20918
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8key_compEv28
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8key_compEv99643824
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE8key_compEv48
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE8key_compEv64
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE8key_compEv32
_ZNKSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE8key_compEv2192
_ZNKSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE8key_compEv98870
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8key_compEv0
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE9_M_mbeginEv105991454
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE9_M_mbeginEv588
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE9_M_mbeginEv3636
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE9_M_mbeginEv208
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE9_M_mbeginEv176
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE9_M_mbeginEv252296
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE9_M_mbeginEv472
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE9_M_mbeginEv23814
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE9_M_mbeginEv160
_ZNKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE9_M_mbeginEv105606100
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE9_M_mbeginEv136
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE9_M_mbeginEv640
_ZNKSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE9_M_mbeginEv224
_ZNKSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE9_M_mbeginEv2620
_ZNKSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE9_M_mbeginEv100384
_ZNKSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE9_M_mbeginEv0
_ZNSt13_Rb_tree_nodeISt4pairIKllEE9_M_valptrEv344708324
_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEE9_M_valptrEv964
_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEE9_M_valptrEv9230
_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE9_M_valptrEv848
_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEE9_M_valptrEv352
_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEE9_M_valptrEv32213812
_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEE9_M_valptrEv928
_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEE9_M_valptrEv61850
_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE9_M_valptrEv324
_ZNSt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEE9_M_valptrEv312209592
_ZNSt13_Rb_tree_nodeISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEE9_M_valptrEv288
_ZNSt13_Rb_tree_nodeISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEE9_M_valptrEv2432
_ZNSt13_Rb_tree_nodeISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEE9_M_valptrEv576
_ZNSt13_Rb_tree_nodeISt4pairIKS0_IiiEdEE9_M_valptrEv5320
_ZNSt13_Rb_tree_nodeISt4pairIKiSt6vectorIiSaIiEEEE9_M_valptrEv201808
_ZNSt13_Rb_tree_nodeISt4pairIKllEE9_M_valptrEv0
_ZNSt15_Rb_tree_header12_M_move_dataERS_224
_ZNSt15_Rb_tree_header8_M_resetEv2064532
_ZNSt15_Rb_tree_headerC2Ev2056374
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEC2Ev8
_ZNSt17_Rb_tree_iteratorISt4pairIKllEEC2EPSt18_Rb_tree_node_base229110978
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEC2EPSt18_Rb_tree_node_base2126
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEC2EPSt18_Rb_tree_node_base8968
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEC2EPSt18_Rb_tree_node_base1288
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEEC2EPSt18_Rb_tree_node_base672
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEC2EPSt18_Rb_tree_node_base3785316
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEEC2EPSt18_Rb_tree_node_base1016
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEC2EPSt18_Rb_tree_node_base63238
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEC2EPSt18_Rb_tree_node_base654
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEC2EPSt18_Rb_tree_node_base225032544
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEEC2EPSt18_Rb_tree_node_base528
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEEC2EPSt18_Rb_tree_node_base4416
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEEC2EPSt18_Rb_tree_node_base1088
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_IiiEdEEC2EPSt18_Rb_tree_node_base6320
_ZNSt17_Rb_tree_iteratorISt4pairIKiSt6vectorIiSaIiEEEEC2EPSt18_Rb_tree_node_base202804
_ZNSt17_Rb_tree_iteratorISt4pairIKllEEC2EPSt18_Rb_tree_node_base0
_ZNSt17_Rb_tree_iteratorISt4pairIKllEEmmEv7695776
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEmmEv26
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEmmEv400
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEmmEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEEmmEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEmmEv9890
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEEmmEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEmmEv1170
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEmmEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEmmEv7683672
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEEmmEv40
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEEmmEv256
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEEmmEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_IiiEdEEmmEv322
_ZNSt17_Rb_tree_iteratorISt4pairIKiSt6vectorIiSaIiEEEEmmEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKllEEmmEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKllEEppEv31818620
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEppEv124
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEppEv848
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEppEv31816630
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKS0_IiiEdEEppEv0
_ZNSt17_Rb_tree_iteratorISt4pairIKiSt6vectorIiSaIiEEEEppEv1018
_ZNSt17_Rb_tree_iteratorISt4pairIKllEEppEv0
_ZNSt18_Rb_tree_node_base10_S_maximumEPS_1590834
_ZNSt18_Rb_tree_node_base10_S_minimumEPS_1590834
_ZNSt20_Rb_tree_key_compareISt4lessIiEEC2Ev464798
_ZNSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2Ev406218
_ZNSt20_Rb_tree_key_compareISt4lessISt4pairIiiEEEC2Ev1112
_ZNSt20_Rb_tree_key_compareISt4lessIiEEC2Ev57418
_ZNSt20_Rb_tree_key_compareISt4lessIlEEC2Ev0
_ZNSt20_Rb_tree_key_compareISt4lessIvEEC2Ev50
_ZNSt20_Rb_tree_key_compareISt4lessIvEEC2ERKS1_1590500
_ZNSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2ERKS7_1590376
_ZNSt20_Rb_tree_key_compareISt4lessISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EEEC2ERKS9_40
_ZNSt20_Rb_tree_key_compareISt4lessISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEEC2ERKS9_32
_ZNSt20_Rb_tree_key_compareISt4lessIvEEC2ERKS1_52
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEmmEv0
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEppEv3324
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEppEv28
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEppEv3296
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEppEi68
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEppEi66
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEppEi2
_ZNSt23_Rb_tree_const_iteratorISt4pairIKllEEC2EPKSt18_Rb_tree_node_base72128
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEC2EPKSt18_Rb_tree_node_base950
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEC2EPKSt18_Rb_tree_node_base2224
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEC2EPKSt18_Rb_tree_node_base68954
_ZNSt23_Rb_tree_const_iteratorISt4pairIKllEEC2EPKSt18_Rb_tree_node_base0
_ZNSt23_Rb_tree_const_iteratorISt4pairIKllEEC2ERKSt17_Rb_tree_iteratorIS2_E10342494
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEEC2ERKSt17_Rb_tree_iteratorISH_E480
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEEC2ERKSt17_Rb_tree_iteratorISB_E848
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEEC2ERKSt17_Rb_tree_iteratorISB_E320
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEEC2ERKSt17_Rb_tree_iteratorISC_E128
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEEC2ERKSt17_Rb_tree_iteratorISE_E13380
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEEC2ERKSt17_Rb_tree_iteratorISD_E32
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEEC2ERKSt17_Rb_tree_iteratorISB_E2596
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEEC2ERKSt17_Rb_tree_iteratorIS8_E134
_ZNSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEEC2ERKSt17_Rb_tree_iteratorIS8_E10321470
_ZNSt23_Rb_tree_const_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEEC2ERKSt17_Rb_tree_iteratorISF_E96
_ZNSt23_Rb_tree_const_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEEC2ERKSt17_Rb_tree_iteratorIS9_E1152
_ZNSt23_Rb_tree_const_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEEC2ERKSt17_Rb_tree_iteratorISD_E256
_ZNSt23_Rb_tree_const_iteratorISt4pairIKS0_IiiEdEEC2ERKSt17_Rb_tree_iteratorIS3_E584
_ZNSt23_Rb_tree_const_iteratorISt4pairIKiSt6vectorIiSaIiEEEEC2ERKSt17_Rb_tree_iteratorIS5_E1018
_ZNSt23_Rb_tree_const_iteratorISt4pairIKllEEC2ERKSt17_Rb_tree_iteratorIS2_E0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA2_cvEESt17_Rb_tree_iteratorISH_ERKT_374
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA10_cvEESt17_Rb_tree_iteratorISH_ERKT_84
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA12_cvEESt17_Rb_tree_iteratorISH_ERKT_42
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA13_cvEESt17_Rb_tree_iteratorISH_ERKT_76
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA15_cvEESt17_Rb_tree_iteratorISH_ERKT_38
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA16_cvEESt17_Rb_tree_iteratorISH_ERKT_36
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA17_cvEESt17_Rb_tree_iteratorISH_ERKT_42
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA2_cvEESt17_Rb_tree_iteratorISH_ERKT_6
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_M_find_trIA6_cvEESt17_Rb_tree_iteratorISH_ERKT_50
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11equal_rangeERS7_106
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE11equal_rangeERS7_104
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11equal_rangeERS7_2
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_erase_auxESt23_Rb_tree_const_iteratorISB_E68
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE12_M_erase_auxESt23_Rb_tree_const_iteratorISH_E66
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_erase_auxESt23_Rb_tree_const_iteratorISB_E2
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_erase_auxESt23_Rb_tree_const_iteratorISB_ESJ_106
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE12_M_erase_auxESt23_Rb_tree_const_iteratorISH_ESP_104
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_erase_auxESt23_Rb_tree_const_iteratorISB_ESJ_2
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_move_dataERSH_St17integral_constantIbLb1EE222
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_move_assignERSH_St17integral_constantIbLb1EE224
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_upper_boundEPSt13_Rb_tree_nodeISB_EPSt18_Rb_tree_node_baseRS7_106
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE14_M_upper_boundEPSt13_Rb_tree_nodeISH_EPSt18_Rb_tree_node_baseRS7_104
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_upper_boundEPSt13_Rb_tree_nodeISB_EPSt18_Rb_tree_node_baseRS7_2
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE20_Reuse_or_alloc_node10_M_extractEv13280
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE20_Reuse_or_alloc_nodeC2ERSH_528
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE20_Reuse_or_alloc_nodeD2Ev528
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE20_Reuse_or_alloc_nodeclIRKSB_EEPSt13_Rb_tree_nodeISB_EOT_13280
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE5clearEv912
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE5clearEv54
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE5clearEv634
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE5clearEv224
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE5eraseERS7_106
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE5eraseERS7_104
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE5eraseERS7_2
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EEaSEOSH_224
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EEaSERKSH_644
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_M_insert_IRKS8_NSE_11_Alloc_nodeEEESt17_Rb_tree_iteratorIS8_EPSt18_Rb_tree_node_baseSM_OT_RT0_2118
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_M_insert_IRKSB_NSH_11_Alloc_nodeEEESt17_Rb_tree_iteratorISB_EPSt18_Rb_tree_node_baseSP_OT_RT0_320
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE10_M_insert_IRKSC_NSI_11_Alloc_nodeEEESt17_Rb_tree_iteratorISC_EPSt18_Rb_tree_node_baseSQ_OT_RT0_128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE10_M_insert_IRKSD_NSJ_11_Alloc_nodeEEESt17_Rb_tree_iteratorISD_EPSt18_Rb_tree_node_baseSR_OT_RT0_32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_M_insert_IRKS8_NSE_11_Alloc_nodeEEESt17_Rb_tree_iteratorIS8_EPSt18_Rb_tree_node_baseSM_OT_RT0_134
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE10_M_insert_IRKSF_NSL_11_Alloc_nodeEEESt17_Rb_tree_iteratorISF_EPSt18_Rb_tree_node_baseST_OT_RT0_96
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE10_M_insert_IRKS9_NSF_11_Alloc_nodeEEESt17_Rb_tree_iteratorIS9_EPSt18_Rb_tree_node_baseSN_OT_RT0_1152
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE10_M_insert_IRKSD_NSJ_11_Alloc_nodeEEESt17_Rb_tree_iteratorISD_EPSt18_Rb_tree_node_baseSR_OT_RT0_256
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_Alloc_nodeC2ERSE_1590494
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE11_Alloc_nodeC2ERSN_52
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_Alloc_nodeC2ERSH_40
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE11_Alloc_nodeC2ERSI_32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE11_Alloc_nodeC2ERSJ_8
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_Alloc_nodeC2ERSH_108
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_Alloc_nodeC2ERSE_34
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_Alloc_nodeC2ERSE_1590148
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE11_Alloc_nodeC2ERSL_8
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE11_Alloc_nodeC2ERSF_32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE11_Alloc_nodeC2ERSJ_32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE13_Rb_tree_implISC_Lb1EEC2ERKSC_OSaISt13_Rb_tree_nodeIS8_EE186
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE13_Rb_tree_implISF_Lb1EEC2ERKSF_OSaISt13_Rb_tree_nodeISB_EE40
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE13_Rb_tree_implISG_Lb1EEC2ERKSG_OSaISt13_Rb_tree_nodeISC_EE32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE13_Rb_tree_implISH_Lb1EEC2ERKSH_OSaISt13_Rb_tree_nodeISD_EE8
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE13_Rb_tree_implISC_Lb1EEC2ERKSC_OSaISt13_Rb_tree_nodeIS8_EE34
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE13_Rb_tree_implISJ_Lb1EEC2ERKSJ_OSaISt13_Rb_tree_nodeISF_EE8
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE13_Rb_tree_implISD_Lb1EEC2ERKSD_OSaISt13_Rb_tree_nodeIS9_EE32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE13_Rb_tree_implISH_Lb1EEC2ERKSH_OSaISt13_Rb_tree_nodeISD_EE32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE17_M_insert_unique_IRKS8_NSE_11_Alloc_nodeEEESt17_Rb_tree_iteratorIS8_ESt23_Rb_tree_const_iteratorIS8_EOT_RT0_2118
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE17_M_insert_unique_IRKSB_NSH_11_Alloc_nodeEEESt17_Rb_tree_iteratorISB_ESt23_Rb_tree_const_iteratorISB_EOT_RT0_320
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE17_M_insert_unique_IRKSC_NSI_11_Alloc_nodeEEESt17_Rb_tree_iteratorISC_ESt23_Rb_tree_const_iteratorISC_EOT_RT0_128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE17_M_insert_unique_IRKSD_NSJ_11_Alloc_nodeEEESt17_Rb_tree_iteratorISD_ESt23_Rb_tree_const_iteratorISD_EOT_RT0_32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE17_M_insert_unique_IRKS8_NSE_11_Alloc_nodeEEESt17_Rb_tree_iteratorIS8_ESt23_Rb_tree_const_iteratorIS8_EOT_RT0_134
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE17_M_insert_unique_IRKSF_NSL_11_Alloc_nodeEEESt17_Rb_tree_iteratorISF_ESt23_Rb_tree_const_iteratorISF_EOT_RT0_96
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE17_M_insert_unique_IRKS9_NSF_11_Alloc_nodeEEESt17_Rb_tree_iteratorIS9_ESt23_Rb_tree_const_iteratorIS9_EOT_RT0_1152
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE17_M_insert_unique_IRKSD_NSJ_11_Alloc_nodeEEESt17_Rb_tree_iteratorISD_ESt23_Rb_tree_const_iteratorISD_EOT_RT0_256
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE22_M_insert_range_uniqueIPKS8_EENSt9enable_ifIXsrSt7is_sameIS8_NSt15iterator_traitsIT_E10value_typeEE5valueEvE4typeESL_SL_186
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE22_M_insert_range_uniqueIPKSB_EENSt9enable_ifIXsrSt7is_sameISB_NSt15iterator_traitsIT_E10value_typeEE5valueEvE4typeESO_SO_40
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE22_M_insert_range_uniqueIPKSC_EENSt9enable_ifIXsrSt7is_sameISC_NSt15iterator_traitsIT_E10value_typeEE5valueEvE4typeESP_SP_32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE22_M_insert_range_uniqueIPKSD_EENSt9enable_ifIXsrSt7is_sameISD_NSt15iterator_traitsIT_E10value_typeEE5valueEvE4typeESQ_SQ_8
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE22_M_insert_range_uniqueIPKS8_EENSt9enable_ifIXsrSt7is_sameIS8_NSt15iterator_traitsIT_E10value_typeEE5valueEvE4typeESL_SL_34
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE22_M_insert_range_uniqueIPKSF_EENSt9enable_ifIXsrSt7is_sameISF_NSt15iterator_traitsIT_E10value_typeEE5valueEvE4typeESS_SS_8
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE22_M_insert_range_uniqueIPKS9_EENSt9enable_ifIXsrSt7is_sameIS9_NSt15iterator_traitsIT_E10value_typeEE5valueEvE4typeESM_SM_32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE22_M_insert_range_uniqueIPKSD_EENSt9enable_ifIXsrSt7is_sameISD_NSt15iterator_traitsIT_E10value_typeEE5valueEvE4typeESQ_SQ_32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EEC2ERKSC_RKSD_186
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EEC2ERKSF_RKSG_40
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EEC2ERKSG_RKSH_32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EEC2ERKSH_RKSI_8
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EEC2ERKSC_RKSD_34
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EEC2ERKSJ_RKSK_8
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EEC2ERKSD_RKSE_32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EEC2ERKSH_RKSI_32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_S_maximumEPSt18_Rb_tree_node_base1590832
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_S_maximumEPSt18_Rb_tree_node_base52
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_S_maximumEPSt18_Rb_tree_node_base632
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_S_maximumEPSt18_Rb_tree_node_base1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_S_minimumEPSt18_Rb_tree_node_base1590832
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_S_minimumEPSt18_Rb_tree_node_base52
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_S_minimumEPSt18_Rb_tree_node_base632
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_S_minimumEPSt18_Rb_tree_node_base1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE13_M_clone_nodeILb0ENSE_11_Alloc_nodeEEEPSt13_Rb_tree_nodeIS8_ESJ_RT0_30226584
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE13_M_clone_nodeILb0ENSN_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISH_ESS_RT0_118
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE13_M_clone_nodeILb0ENSH_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISB_ESM_RT0_898
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE13_M_clone_nodeILb0ENSH_20_Reuse_or_alloc_nodeEEEPSt13_Rb_tree_nodeISB_ESM_RT0_13280
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE13_M_clone_nodeILb0ENSE_11_Alloc_nodeEEEPSt13_Rb_tree_nodeIS8_ESJ_RT0_30212288
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE13_Rb_tree_implISC_Lb1EEC2ERKSG_1590308
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE13_Rb_tree_implISL_Lb1EEC2ERKSP_52
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE13_Rb_tree_implISF_Lb1EEC2ERKSJ_108
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE13_Rb_tree_implISC_Lb1EEC2ERKSG_1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_copyERKSE_1590308
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE7_M_copyERKSN_52
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_M_copyERKSH_108
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_copyERKSE_1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_copyILb0ENSE_11_Alloc_nodeEEEPSt13_Rb_tree_nodeIS8_ERKSE_RT0_1590832
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE7_M_copyILb0ENSN_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISH_ERKSN_RT0_52
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_M_copyILb0ENSH_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISB_ERKSH_RT0_108
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_M_copyILb0ENSH_20_Reuse_or_alloc_nodeEEEPSt13_Rb_tree_nodeISB_ERKSH_RT0_524
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_copyILb0ENSE_11_Alloc_nodeEEEPSt13_Rb_tree_nodeIS8_ERKSE_RT0_1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_copyILb0ENSE_11_Alloc_nodeEEEPSt13_Rb_tree_nodeIS8_ESJ_PSt18_Rb_tree_node_baseRT0_16698788
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE7_M_copyILb0ENSN_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISH_ESS_PSt18_Rb_tree_node_baseRT0_92
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_M_copyILb0ENSH_11_Alloc_nodeEEEPSt13_Rb_tree_nodeISB_ESM_PSt18_Rb_tree_node_baseRT0_514
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_M_copyILb0ENSH_20_Reuse_or_alloc_nodeEEEPSt13_Rb_tree_nodeISB_ESM_PSt18_Rb_tree_node_baseRT0_6994
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_copyILb0ENSE_11_Alloc_nodeEEEPSt13_Rb_tree_nodeIS8_ESJ_PSt18_Rb_tree_node_baseRT0_16691188
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_rootEv1591584
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE7_M_rootEv52
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_M_rootEv1384
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_M_rootEv1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EEC2ERKSE_1590308
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EEC2ERKSN_52
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EEC2ERKSH_108
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EEC2ERKSE_1590148
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE10_Auto_node9_M_insertES0_IPSt18_Rb_tree_node_baseSB_E10340000
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_Auto_node9_M_insertES6_IPSt18_Rb_tree_node_baseSQ_E110
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_node9_M_insertES6_IPSt18_Rb_tree_node_baseSK_E848
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_node9_M_insertES6_IPSt18_Rb_tree_node_baseSK_E0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE10_Auto_node9_M_insertES6_IPSt18_Rb_tree_node_baseSN_E13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE10_Auto_node9_M_insertES6_IPSt18_Rb_tree_node_baseSM_E0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_node9_M_insertES6_IPSt18_Rb_tree_node_baseSK_E2590
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_Auto_node9_M_insertES6_IPSt18_Rb_tree_node_baseSH_E0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_Auto_node9_M_insertES6_IPSt18_Rb_tree_node_baseSH_E10321470
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE10_Auto_node9_M_insertES0_IPSt18_Rb_tree_node_baseSI_E0
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE10_Auto_node9_M_insertES0_IPSt18_Rb_tree_node_baseSC_E584
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE10_Auto_node9_M_insertES0_IPSt18_Rb_tree_node_baseSE_E1018
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE10_Auto_node9_M_insertES0_IPSt18_Rb_tree_node_baseSB_E0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS1_EESE_IJEEEEERS8_DpOT_10340000
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_Auto_nodeC2IJS5_DnEEERSN_DpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_Auto_nodeC2IJS5_SG_EEERSN_DpOT_110
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS7_EESN_IJEEEEERSH_DpOT_848
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS7_EESN_IJEEEEERSH_DpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS7_EESQ_IJEEEEERSK_DpOT_13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS7_EESP_IJEEEEERSJ_DpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS7_EESN_IJEEEEERSH_DpOT_2590
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS7_EESK_IJEEEEERSE_DpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJOS5_EESK_IJEEEEERSE_DpOT_1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS7_EESK_IJEEEEERSE_DpOT_8731322
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJOS7_EESL_IJEEEEERSF_DpOT_0
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJOS1_EESF_IJEEEEERS9_DpOT_584
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS1_EESH_IJEEEEERSB_DpOT_1018
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE10_Auto_nodeC2IJRKSt21piecewise_construct_tSt5tupleIJRS1_EESE_IJEEEEERS8_DpOT_0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE10_Auto_nodeD2Ev10340000
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE10_Auto_nodeD2Ev110
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_nodeD2Ev848
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_nodeD2Ev0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE10_Auto_nodeD2Ev13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE10_Auto_nodeD2Ev0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE10_Auto_nodeD2Ev2590
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_Auto_nodeD2Ev0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE10_Auto_nodeD2Ev10321470
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE10_Auto_nodeD2Ev0
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE10_Auto_nodeD2Ev584
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE10_Auto_nodeD2Ev1018
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE10_Auto_nodeD2Ev0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE11_M_get_nodeEv40568450
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE11_M_get_nodeEv228
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_M_get_nodeEv848
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_M_get_nodeEv320
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE11_M_get_nodeEv128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE11_M_get_nodeEv13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE11_M_get_nodeEv32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_M_get_nodeEv16516
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_M_get_nodeEv134
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_M_get_nodeEv40533758
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE11_M_get_nodeEv96
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE11_M_get_nodeEv1152
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE11_M_get_nodeEv256
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE11_M_get_nodeEv584
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE11_M_get_nodeEv1018
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE11_M_get_nodeEv0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE11_M_leftmostEv12280762
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE11_M_leftmostEv102
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_M_leftmostEv1126
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_M_leftmostEv0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE11_M_leftmostEv0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE11_M_leftmostEv14150
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE11_M_leftmostEv0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_M_leftmostEv3998
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_M_leftmostEv0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_M_leftmostEv12260794
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE11_M_leftmostEv0
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE11_M_leftmostEv0
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE11_M_leftmostEv0
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE11_M_leftmostEv580
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE11_M_leftmostEv12
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE11_M_leftmostEv0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS2_E40568450
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE11_M_put_nodeEPSt13_Rb_tree_nodeISH_E228
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_M_put_nodeEPSt13_Rb_tree_nodeISB_E848
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_M_put_nodeEPSt13_Rb_tree_nodeISB_E320
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE11_M_put_nodeEPSt13_Rb_tree_nodeISC_E128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE11_M_put_nodeEPSt13_Rb_tree_nodeISE_E13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE11_M_put_nodeEPSt13_Rb_tree_nodeISD_E32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11_M_put_nodeEPSt13_Rb_tree_nodeISB_E16516
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS8_E134
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS8_E40533758
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE11_M_put_nodeEPSt13_Rb_tree_nodeISF_E96
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS9_E1152
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE11_M_put_nodeEPSt13_Rb_tree_nodeISD_E256
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS3_E584
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS5_E1018
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS2_E0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE11lower_boundERS1_101586478
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE11lower_boundERS7_226
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11lower_boundERS7_3446
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11lower_boundERS7_104
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE11lower_boundERS7_48
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE11lower_boundERS7_186246
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE11lower_boundERS7_432
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE11lower_boundERS7_7412
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11lower_boundERS7_28
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE11lower_boundERS7_101285964
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE11lower_boundERS8_48
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE11lower_boundERS8_64
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE11lower_boundERS8_32
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE11lower_boundERS2_2544
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE11lower_boundERS1_99884
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE11lower_boundERS1_0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE12_M_drop_nodeEPSt13_Rb_tree_nodeIS2_E40568450
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISH_E228
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISB_E848
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISB_E320
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISC_E128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISE_E13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISD_E32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISB_E16516
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE12_M_drop_nodeEPSt13_Rb_tree_nodeIS8_E134
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE12_M_drop_nodeEPSt13_Rb_tree_nodeIS8_E40533758
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISF_E96
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE12_M_drop_nodeEPSt13_Rb_tree_nodeIS9_E1152
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE12_M_drop_nodeEPSt13_Rb_tree_nodeISD_E256
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE12_M_drop_nodeEPSt13_Rb_tree_nodeIS3_E584
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE12_M_drop_nodeEPSt13_Rb_tree_nodeIS5_E1018
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE12_M_drop_nodeEPSt13_Rb_tree_nodeIS2_E0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE12_M_rightmostEv4078528
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE12_M_rightmostEv104
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_rightmostEv232
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_rightmostEv536
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE12_M_rightmostEv128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE12_M_rightmostEv2940
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE12_M_rightmostEv24
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE12_M_rightmostEv1964
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE12_M_rightmostEv136
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE12_M_rightmostEv4068496
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE12_M_rightmostEv104
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE12_M_rightmostEv1728
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE12_M_rightmostEv320
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE12_M_rightmostEv288
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE12_M_rightmostEv1528
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE12_M_rightmostEv0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE13_Rb_tree_implIS6_Lb1EEC2Ev406558
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE13_Rb_tree_implISL_Lb1EEC2Ev50
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE13_Rb_tree_implISF_Lb1EEC2Ev212
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE13_Rb_tree_implISI_Lb1EEC2Ev1822
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE13_Rb_tree_implISF_Lb1EEC2Ev1214
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE13_Rb_tree_implISC_Lb1EEC2Ev402966
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE13_Rb_tree_implIS7_Lb1EEC2Ev44
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE13_Rb_tree_implIS9_Lb1EEC2Ev250
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE13_Rb_tree_implIS6_Lb1EEC2Ev0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESD_IJEEEEEPSt13_Rb_tree_nodeIS2_EDpOT_40568450
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE14_M_create_nodeIJRKSH_EEEPSt13_Rb_tree_nodeISH_EDpOT_118
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE14_M_create_nodeIJS5_DnEEEPSt13_Rb_tree_nodeISH_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE14_M_create_nodeIJS5_SG_EEEPSt13_Rb_tree_nodeISH_EDpOT_110
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESM_IJEEEEEPSt13_Rb_tree_nodeISB_EDpOT_848
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_create_nodeIJRKSB_EEEPSt13_Rb_tree_nodeISB_EDpOT_320
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESM_IJEEEEEPSt13_Rb_tree_nodeISB_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE14_M_create_nodeIJRKSC_EEEPSt13_Rb_tree_nodeISC_EDpOT_128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESP_IJEEEEEPSt13_Rb_tree_nodeISE_EDpOT_13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE14_M_create_nodeIJRKSD_EEEPSt13_Rb_tree_nodeISD_EDpOT_32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESO_IJEEEEEPSt13_Rb_tree_nodeISD_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_create_nodeIJRKSB_EEEPSt13_Rb_tree_nodeISB_EDpOT_13926
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESM_IJEEEEEPSt13_Rb_tree_nodeISB_EDpOT_2590
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE14_M_create_nodeIJRKS8_EEEPSt13_Rb_tree_nodeIS8_EDpOT_134
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESJ_IJEEEEEPSt13_Rb_tree_nodeIS8_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE14_M_create_nodeIJRKS8_EEEPSt13_Rb_tree_nodeIS8_EDpOT_30212288
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJOS5_EESJ_IJEEEEEPSt13_Rb_tree_nodeIS8_EDpOT_1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESJ_IJEEEEEPSt13_Rb_tree_nodeIS8_EDpOT_8731322
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE14_M_create_nodeIJRKSF_EEEPSt13_Rb_tree_nodeISF_EDpOT_96
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE14_M_create_nodeIJRKS9_EEEPSt13_Rb_tree_nodeIS9_EDpOT_1152
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJOS7_EESK_IJEEEEEPSt13_Rb_tree_nodeIS9_EDpOT_0
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE14_M_create_nodeIJRKSD_EEEPSt13_Rb_tree_nodeISD_EDpOT_256
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJOS1_EESE_IJEEEEEPSt13_Rb_tree_nodeIS3_EDpOT_584
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESG_IJEEEEEPSt13_Rb_tree_nodeIS5_EDpOT_1018
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE14_M_create_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESD_IJEEEEEPSt13_Rb_tree_nodeIS2_EDpOT_0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSA_PSt13_Rb_tree_nodeIS2_E10340000
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSP_PSt13_Rb_tree_nodeISH_E110
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSJ_PSt13_Rb_tree_nodeISB_E848
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSJ_PSt13_Rb_tree_nodeISB_E0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSM_PSt13_Rb_tree_nodeISE_E13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSL_PSt13_Rb_tree_nodeISD_E0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSJ_PSt13_Rb_tree_nodeISB_E2590
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSG_PSt13_Rb_tree_nodeIS8_E0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSG_PSt13_Rb_tree_nodeIS8_E10321470
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSH_PSt13_Rb_tree_nodeIS9_E0
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSB_PSt13_Rb_tree_nodeIS3_E584
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSD_PSt13_Rb_tree_nodeIS5_E1018
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE14_M_insert_nodeEPSt18_Rb_tree_node_baseSA_PSt13_Rb_tree_nodeIS2_E0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS2_EPSt18_Rb_tree_node_baseRS1_101997982
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE14_M_lower_boundEPSt13_Rb_tree_nodeISH_EPSt18_Rb_tree_node_baseRS7_330
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_lower_boundEPSt13_Rb_tree_nodeISB_EPSt18_Rb_tree_node_baseRS7_3446
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_lower_boundEPSt13_Rb_tree_nodeISB_EPSt18_Rb_tree_node_baseRS7_104
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE14_M_lower_boundEPSt13_Rb_tree_nodeISC_EPSt18_Rb_tree_node_baseRS7_48
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE14_M_lower_boundEPSt13_Rb_tree_nodeISE_EPSt18_Rb_tree_node_baseRS7_249520
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE14_M_lower_boundEPSt13_Rb_tree_nodeISD_EPSt18_Rb_tree_node_baseRS7_432
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE14_M_lower_boundEPSt13_Rb_tree_nodeISB_EPSt18_Rb_tree_node_baseRS7_21630
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS8_EPSt18_Rb_tree_node_baseRS7_28
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS8_EPSt18_Rb_tree_node_baseRS7_101619872
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE14_M_lower_boundEPSt13_Rb_tree_nodeISF_EPSt18_Rb_tree_node_baseRS8_48
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS9_EPSt18_Rb_tree_node_baseRS8_64
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE14_M_lower_boundEPSt13_Rb_tree_nodeISD_EPSt18_Rb_tree_node_baseRS8_32
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS3_EPSt18_Rb_tree_node_baseRS2_2544
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS5_EPSt18_Rb_tree_node_baseRS1_99884
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS2_EPSt18_Rb_tree_node_baseRS1_0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS2_E40568702
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISH_E228
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISB_E848
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISB_E320
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISC_E128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISE_E13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISD_E32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISB_E16768
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS8_E134
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS8_E40533758
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISF_E96
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS9_E1152
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeISD_E256
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS3_E584
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS5_E1018
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS2_E0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESD_IJEEEEEvPSt13_Rb_tree_nodeIS2_EDpOT_40568702
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_construct_nodeIJRKSH_EEEvPSt13_Rb_tree_nodeISH_EDpOT_118
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_construct_nodeIJS5_DnEEEvPSt13_Rb_tree_nodeISH_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE17_M_construct_nodeIJS5_SG_EEEvPSt13_Rb_tree_nodeISH_EDpOT_110
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESM_IJEEEEEvPSt13_Rb_tree_nodeISB_EDpOT_848
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE17_M_construct_nodeIJRKSB_EEEvPSt13_Rb_tree_nodeISB_EDpOT_320
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESM_IJEEEEEvPSt13_Rb_tree_nodeISB_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE17_M_construct_nodeIJRKSC_EEEvPSt13_Rb_tree_nodeISC_EDpOT_128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESP_IJEEEEEvPSt13_Rb_tree_nodeISE_EDpOT_13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE17_M_construct_nodeIJRKSD_EEEvPSt13_Rb_tree_nodeISD_EDpOT_32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESO_IJEEEEEvPSt13_Rb_tree_nodeISD_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE17_M_construct_nodeIJRKSB_EEEvPSt13_Rb_tree_nodeISB_EDpOT_14178
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESM_IJEEEEEvPSt13_Rb_tree_nodeISB_EDpOT_2590
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE17_M_construct_nodeIJRKS8_EEEvPSt13_Rb_tree_nodeIS8_EDpOT_134
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESJ_IJEEEEEvPSt13_Rb_tree_nodeIS8_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE17_M_construct_nodeIJRKS8_EEEvPSt13_Rb_tree_nodeIS8_EDpOT_30212288
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJOS5_EESJ_IJEEEEEvPSt13_Rb_tree_nodeIS8_EDpOT_1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESJ_IJEEEEEvPSt13_Rb_tree_nodeIS8_EDpOT_8731322
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE17_M_construct_nodeIJRKSF_EEEvPSt13_Rb_tree_nodeISF_EDpOT_96
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE17_M_construct_nodeIJRKS9_EEEvPSt13_Rb_tree_nodeIS9_EDpOT_1152
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJOS7_EESK_IJEEEEEvPSt13_Rb_tree_nodeIS9_EDpOT_0
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE17_M_construct_nodeIJRKSD_EEEvPSt13_Rb_tree_nodeISD_EDpOT_256
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJOS1_EESE_IJEEEEEvPSt13_Rb_tree_nodeIS3_EDpOT_584
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESG_IJEEEEEvPSt13_Rb_tree_nodeIS5_EDpOT_1018
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE17_M_construct_nodeIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESD_IJEEEEEvPSt13_Rb_tree_nodeIS2_EDpOT_0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE21_M_get_Node_allocatorEv162274752
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE21_M_get_Node_allocatorEv912
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE21_M_get_Node_allocatorEv3392
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE21_M_get_Node_allocatorEv1280
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE21_M_get_Node_allocatorEv512
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE21_M_get_Node_allocatorEv53520
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE21_M_get_Node_allocatorEv128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE21_M_get_Node_allocatorEv67016
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE21_M_get_Node_allocatorEv536
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE21_M_get_Node_allocatorEv162135032
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE21_M_get_Node_allocatorEv384
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE21_M_get_Node_allocatorEv4608
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE21_M_get_Node_allocatorEv1024
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE21_M_get_Node_allocatorEv2336
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE21_M_get_Node_allocatorEv4072
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE21_M_get_Node_allocatorEv0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESD_IJEEEEESt17_Rb_tree_iteratorIS2_ESt23_Rb_tree_const_iteratorIS2_EDpOT_10340000
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE22_M_emplace_hint_uniqueIJS5_DnEEESt17_Rb_tree_iteratorISH_ESt23_Rb_tree_const_iteratorISH_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE22_M_emplace_hint_uniqueIJS5_SG_EEESt17_Rb_tree_iteratorISH_ESt23_Rb_tree_const_iteratorISH_EDpOT_110
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESM_IJEEEEESt17_Rb_tree_iteratorISB_ESt23_Rb_tree_const_iteratorISB_EDpOT_848
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESM_IJEEEEESt17_Rb_tree_iteratorISB_ESt23_Rb_tree_const_iteratorISB_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESP_IJEEEEESt17_Rb_tree_iteratorISE_ESt23_Rb_tree_const_iteratorISE_EDpOT_13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESO_IJEEEEESt17_Rb_tree_iteratorISD_ESt23_Rb_tree_const_iteratorISD_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESM_IJEEEEESt17_Rb_tree_iteratorISB_ESt23_Rb_tree_const_iteratorISB_EDpOT_2590
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESJ_IJEEEEESt17_Rb_tree_iteratorIS8_ESt23_Rb_tree_const_iteratorIS8_EDpOT_0
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJOS5_EESJ_IJEEEEESt17_Rb_tree_iteratorIS8_ESt23_Rb_tree_const_iteratorIS8_EDpOT_1590148
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESJ_IJEEEEESt17_Rb_tree_iteratorIS8_ESt23_Rb_tree_const_iteratorIS8_EDpOT_8731322
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJOS7_EESK_IJEEEEESt17_Rb_tree_iteratorIS9_ESt23_Rb_tree_const_iteratorIS9_EDpOT_0
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJOS1_EESE_IJEEEEESt17_Rb_tree_iteratorIS3_ESt23_Rb_tree_const_iteratorIS3_EDpOT_584
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESG_IJEEEEESt17_Rb_tree_iteratorIS5_ESt23_Rb_tree_const_iteratorIS5_EDpOT_1018
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS1_EESD_IJEEEEESt17_Rb_tree_iteratorIS2_ESt23_Rb_tree_const_iteratorIS2_EDpOT_0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE24_M_get_insert_unique_posERS1_405348
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE24_M_get_insert_unique_posERS7_50
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE24_M_get_insert_unique_posERS7_90
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE24_M_get_insert_unique_posERS7_64
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE24_M_get_insert_unique_posERS7_96
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE24_M_get_insert_unique_posERS7_600
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE24_M_get_insert_unique_posERS7_32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE24_M_get_insert_unique_posERS7_286
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE24_M_get_insert_unique_posERS7_98
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE24_M_get_insert_unique_posERS7_402966
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE24_M_get_insert_unique_posERS8_80
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE24_M_get_insert_unique_posERS8_544
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE24_M_get_insert_unique_posERS8_160
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE24_M_get_insert_unique_posERS2_32
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE24_M_get_insert_unique_posERS1_250
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE24_M_get_insert_unique_posERS1_0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS2_ERS1_10342118
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISH_ERS7_110
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISB_ERS7_848
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISB_ERS7_320
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISC_ERS7_128
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISE_ERS7_13380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISD_ERS7_32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISB_ERS7_2590
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS7_134
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS8_ERS7_10321470
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISF_ERS8_96
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS9_ERS8_1152
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorISD_ERS8_256
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS3_ERS2_584
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS1_1018
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS2_ERS1_0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE3endEv104026530
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE3endEv776
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE3endEv3546
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE3endEv424
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE3endEv176
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE3endEv1917004
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE3endEv464
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE3endEv35852
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE3endEv162
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE3endEv101963800
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE3endEv144
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE3endEv1216
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE3endEv288
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE3endEv2544
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE3endEv100134
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE3endEv0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE4findERS1_77490
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE4findERS7_63274
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE4findERS7_14216
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE4findERS1_0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE5beginEv1996402
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE5beginEv272
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE5beginEv190
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE5beginEv56
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE5beginEv96
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE5beginEv1591432
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE5beginEv24
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE5beginEv288
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE5beginEv98
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE5beginEv402966
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE5beginEv64
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE5beginEv288
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE5beginEv96
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE5beginEv32
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE5beginEv500
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE5beginEv0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE6_M_endEv121687708
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE6_M_endEv632
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_M_endEv4872
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_M_endEv808
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE6_M_endEv400
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE6_M_endEv273182
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE6_M_endEv528
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_M_endEv26730
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE6_M_endEv394
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE6_M_endEv121270588
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE6_M_endEv320
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE6_M_endEv2912
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE6_M_endEv704
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE6_M_endEv3472
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE6_M_endEv102166
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE6_M_endEv0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE6_S_keyEPKSt13_Rb_tree_nodeIS2_E672338924
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE6_S_keyEPKSt13_Rb_tree_nodeISH_E1550
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_S_keyEPKSt13_Rb_tree_nodeISB_E14308
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_S_keyEPKSt13_Rb_tree_nodeISB_E952
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE6_S_keyEPKSt13_Rb_tree_nodeISC_E408
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE6_S_keyEPKSt13_Rb_tree_nodeISE_E1812592
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE6_S_keyEPKSt13_Rb_tree_nodeISD_E1176
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_S_keyEPKSt13_Rb_tree_nodeISB_E334818
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE6_S_keyEPKSt13_Rb_tree_nodeIS8_E360
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE6_S_keyEPKSt13_Rb_tree_nodeIS8_E669945478
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE6_S_keyEPKSt13_Rb_tree_nodeISF_E600
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE6_S_keyEPKSt13_Rb_tree_nodeIS9_E5534
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE6_S_keyEPKSt13_Rb_tree_nodeISD_E1004
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE6_S_keyEPKSt13_Rb_tree_nodeIS3_E11800
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE6_S_keyEPKSt13_Rb_tree_nodeIS5_E208344
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE6_S_keyEPKSt13_Rb_tree_nodeIS2_E0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE6_S_keyEPKSt18_Rb_tree_node_base24998592
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE6_S_keyEPKSt18_Rb_tree_node_base382
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_S_keyEPKSt18_Rb_tree_node_base1556
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_S_keyEPKSt18_Rb_tree_node_base568
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE6_S_keyEPKSt18_Rb_tree_node_base192
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE6_S_keyEPKSt18_Rb_tree_node_base92962
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE6_S_keyEPKSt18_Rb_tree_node_base56
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE6_S_keyEPKSt18_Rb_tree_node_base32518
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE6_S_keyEPKSt18_Rb_tree_node_base200
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE6_S_keyEPKSt18_Rb_tree_node_base24863976
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE6_S_keyEPKSt18_Rb_tree_node_base232
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE6_S_keyEPKSt18_Rb_tree_node_base2752
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE6_S_keyEPKSt18_Rb_tree_node_base512
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE6_S_keyEPKSt18_Rb_tree_node_base1154
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE6_S_keyEPKSt18_Rb_tree_node_base1532
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE6_S_keyEPKSt18_Rb_tree_node_base0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE7_S_leftEPKSt18_Rb_tree_node_base86920
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE7_S_leftEPKSt18_Rb_tree_node_base276
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE7_S_leftEPKSt18_Rb_tree_node_base4
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_S_leftEPKSt18_Rb_tree_node_base86640
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE7_S_leftEPKSt18_Rb_tree_node_base0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE7_S_leftEPSt18_Rb_tree_node_base318980488
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE7_S_leftEPSt18_Rb_tree_node_base606
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_S_leftEPSt18_Rb_tree_node_base7168
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_S_leftEPSt18_Rb_tree_node_base520
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE7_S_leftEPSt18_Rb_tree_node_base308
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE7_S_leftEPSt18_Rb_tree_node_base723386
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE7_S_leftEPSt18_Rb_tree_node_base712
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE7_S_leftEPSt18_Rb_tree_node_base90530
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_S_leftEPSt18_Rb_tree_node_base274
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE7_S_leftEPSt18_Rb_tree_node_base318031716
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE7_S_leftEPSt18_Rb_tree_node_base324
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE7_S_leftEPSt18_Rb_tree_node_base2002
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE7_S_leftEPSt18_Rb_tree_node_base644
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE7_S_leftEPSt18_Rb_tree_node_base5112
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE7_S_leftEPSt18_Rb_tree_node_base117186
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE7_S_leftEPSt18_Rb_tree_node_base0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_M_beginEv104400622
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE8_M_beginEv536
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_beginEv3636
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_beginEv208
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE8_M_beginEv176
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE8_M_beginEv252296
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE8_M_beginEv472
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_beginEv23182
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8_M_beginEv160
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8_M_beginEv104015952
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE8_M_beginEv136
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE8_M_beginEv640
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE8_M_beginEv224
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE8_M_beginEv2620
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE8_M_beginEv100384
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_M_beginEv0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E42566202
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE8_M_eraseEPSt13_Rb_tree_nodeISH_E318
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E948
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E360
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE8_M_eraseEPSt13_Rb_tree_nodeISC_E160
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE8_M_eraseEPSt13_Rb_tree_nodeISE_E15556
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE8_M_eraseEPSt13_Rb_tree_nodeISD_E40
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_M_eraseEPSt13_Rb_tree_nodeISB_E18308
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E168
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E42526872
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE8_M_eraseEPSt13_Rb_tree_nodeISF_E104
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE8_M_eraseEPSt13_Rb_tree_nodeIS9_E1184
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE8_M_eraseEPSt13_Rb_tree_nodeISD_E288
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE8_M_eraseEPSt13_Rb_tree_nodeIS3_E628
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E1268
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_M_eraseEPSt13_Rb_tree_nodeIS2_E0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_S_rightEPKSt18_Rb_tree_node_base90868
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE8_S_rightEPKSt18_Rb_tree_node_base136
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE8_S_rightEPKSt18_Rb_tree_node_base2
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_S_rightEPKSt18_Rb_tree_node_base90730
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_S_rightEPKSt18_Rb_tree_node_base0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_S_rightEPSt18_Rb_tree_node_base445063782
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EE8_S_rightEPSt18_Rb_tree_node_base488
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_S_rightEPSt18_Rb_tree_node_base6434
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_S_rightEPSt18_Rb_tree_node_base504
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE8_S_rightEPSt18_Rb_tree_node_base164
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EE8_S_rightEPSt18_Rb_tree_node_base1010426
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EE8_S_rightEPSt18_Rb_tree_node_base472
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EE8_S_rightEPSt18_Rb_tree_node_base85754
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8_S_rightEPSt18_Rb_tree_node_base154
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EE8_S_rightEPSt18_Rb_tree_node_base443859666
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EE8_S_rightEPSt18_Rb_tree_node_base236
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EE8_S_rightEPSt18_Rb_tree_node_base3084
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EE8_S_rightEPSt18_Rb_tree_node_base360
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EE8_S_rightEPSt18_Rb_tree_node_base6160
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EE8_S_rightEPSt18_Rb_tree_node_base89880
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EE8_S_rightEPSt18_Rb_tree_node_base0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EEC2Ev406558
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EEC2Ev50
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EEC2Ev212
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EEC2Ev1822
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EEC2Ev1214
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EEC2Ev402966
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EEC2Ev44
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EEC2Ev250
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EEC2Ev0
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EED2Ev1996380
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EED2Ev102
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN4mdlp9CPPFImdlpEESt10_Select1stISB_ESt4lessIS5_ESaISB_EED2Ev100
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_PN8bayesnet14BaseClassifierEESt10_Select1stISB_ESt4lessIS5_ESaISB_EED2Ev40
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IiSt6vectorIiSaIiEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EED2Ev32
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEESt10_Select1stISE_ESt4lessIS5_ESaISE_EED2Ev1542
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIS8_IdSaIdEESaISA_EEESt10_Select1stISD_ESt4lessIS5_ESaISD_EED2Ev8
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_St6vectorIiSaIiEEESt10_Select1stISB_ESt4lessIS5_ESaISB_EED2Ev1042
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EED2Ev34
_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_iESt10_Select1stIS8_ESt4lessIS5_ESaIS8_EED2Ev1993114
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_S0_ISt6vectorIiSaIiEES9_IdSaIdEEEESt10_Select1stISF_ESt4lessIS7_ESaISF_EED2Ev8
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_IKS7_fESt10_Select1stIS9_ESt4lessIS7_ESaIS9_EED2Ev32
_ZNSt8_Rb_treeISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiES0_IKS7_St6vectorIS0_IiiESaISA_EEESt10_Select1stISD_ESt4lessIS7_ESaISD_EED2Ev32
_ZNSt8_Rb_treeISt4pairIiiES0_IKS1_dESt10_Select1stIS3_ESt4lessIS1_ESaIS3_EED2Ev44
_ZNSt8_Rb_treeIiSt4pairIKiSt6vectorIiSaIiEEESt10_Select1stIS5_ESt4lessIiESaIS5_EED2Ev250
_ZNSt8_Rb_treeIlSt4pairIKllESt10_Select1stIS2_ESt4lessIlESaIS2_EED2Ev0
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKllEES5_102800900
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEESK_276
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEESE_3536
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEESE_160
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEESF_144
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEESH_300024
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEESG_456
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEESE_36130
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEESB_126
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEESB_102356746
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEESI_112
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEESC_352
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEESG_128
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKS0_IiiEdEES6_2576
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKiSt6vectorIiSaIiEEEES8_100134
_ZSteqRKSt17_Rb_tree_iteratorISt4pairIKllEES5_0
_ZSteqRKSt23_Rb_tree_const_iteratorISt4pairIKllEES5_41430
_ZSteqRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEESK_182
_ZSteqRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEESH_8
_ZSteqRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEESE_41240
_ZSteqRKSt23_Rb_tree_const_iteratorISt4pairIKllEES5_0
_ZSteqRKSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEESt10_Select1stISH_ESt4lessIvESaISH_EESP_0
_ZStneRKSt17_Rb_tree_iteratorISt4pairIKllEES5_33423664
_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEESK_616
_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEESE_948
_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEESH_33420832
_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEESE_0
_ZStneRKSt17_Rb_tree_iteratorISt4pairIKiSt6vectorIiSaIiEEEES8_1268
_ZStneRKSt17_Rb_tree_iteratorISt4pairIKllEES5_0
_ZStneRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEESE_4932
_ZStneRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS6_blmdSaNS9_14adl_serializerESC_IhSaIhEEvEEEESK_526
_ZStneRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISA_EEEESH_4402
_ZStneRKSt23_Rb_tree_const_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEESE_4
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_tree.h.gcov.html b/html/usr/include/c++/13/bits/stl_tree.h.gcov.html new file mode 100644 index 0000000..e49c097 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_tree.h.gcov.html @@ -0,0 +1,2699 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_tree.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_tree.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:91.7 %458420
Test Date:2024-04-30 13:17:26Functions:85.8 %846726
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // RB tree implementation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1996,1997
+      28              :  * Silicon Graphics Computer Systems, Inc.
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Silicon Graphics makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1994
+      40              :  * Hewlett-Packard Company
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  *
+      50              :  *
+      51              :  */
+      52              : 
+      53              : /** @file bits/stl_tree.h
+      54              :  *  This is an internal header file, included by other library headers.
+      55              :  *  Do not attempt to use it directly. @headername{map,set}
+      56              :  */
+      57              : 
+      58              : #ifndef _STL_TREE_H
+      59              : #define _STL_TREE_H 1
+      60              : 
+      61              : #pragma GCC system_header
+      62              : 
+      63              : #include <bits/stl_algobase.h>
+      64              : #include <bits/allocator.h>
+      65              : #include <bits/stl_function.h>
+      66              : #include <bits/cpp_type_traits.h>
+      67              : #include <ext/alloc_traits.h>
+      68              : #if __cplusplus >= 201103L
+      69              : # include <ext/aligned_buffer.h>
+      70              : #endif
+      71              : #if __cplusplus > 201402L
+      72              : # include <bits/node_handle.h>
+      73              : #endif
+      74              : 
+      75              : namespace std _GLIBCXX_VISIBILITY(default)
+      76              : {
+      77              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      78              : 
+      79              : #if __cplusplus > 201103L
+      80              : # define __cpp_lib_generic_associative_lookup 201304L
+      81              : #endif
+      82              : 
+      83              :   // Red-black tree class, designed for use in implementing STL
+      84              :   // associative containers (set, multiset, map, and multimap). The
+      85              :   // insertion and deletion algorithms are based on those in Cormen,
+      86              :   // Leiserson, and Rivest, Introduction to Algorithms (MIT Press,
+      87              :   // 1990), except that
+      88              :   //
+      89              :   // (1) the header cell is maintained with links not only to the root
+      90              :   // but also to the leftmost node of the tree, to enable constant
+      91              :   // time begin(), and to the rightmost node of the tree, to enable
+      92              :   // linear time performance when used with the generic set algorithms
+      93              :   // (set_union, etc.)
+      94              :   //
+      95              :   // (2) when a node being deleted has two children its successor node
+      96              :   // is relinked into its place, rather than copied, so that the only
+      97              :   // iterators invalidated are those referring to the deleted node.
+      98              : 
+      99              :   enum _Rb_tree_color { _S_red = false, _S_black = true };
+     100              : 
+     101              :   struct _Rb_tree_node_base
+     102              :   {
+     103              :     typedef _Rb_tree_node_base* _Base_ptr;
+     104              :     typedef const _Rb_tree_node_base* _Const_Base_ptr;
+     105              : 
+     106              :     _Rb_tree_color      _M_color;
+     107              :     _Base_ptr           _M_parent;
+     108              :     _Base_ptr           _M_left;
+     109              :     _Base_ptr           _M_right;
+     110              : 
+     111              :     static _Base_ptr
+     112      1590834 :     _S_minimum(_Base_ptr __x) _GLIBCXX_NOEXCEPT
+     113              :     {
+     114      5854724 :       while (__x->_M_left != 0) __x = __x->_M_left;
+     115      1590834 :       return __x;
+     116              :     }
+     117              : 
+     118              :     static _Const_Base_ptr
+     119              :     _S_minimum(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT
+     120              :     {
+     121              :       while (__x->_M_left != 0) __x = __x->_M_left;
+     122              :       return __x;
+     123              :     }
+     124              : 
+     125              :     static _Base_ptr
+     126      1590834 :     _S_maximum(_Base_ptr __x) _GLIBCXX_NOEXCEPT
+     127              :     {
+     128      5544808 :       while (__x->_M_right != 0) __x = __x->_M_right;
+     129      1590834 :       return __x;
+     130              :     }
+     131              : 
+     132              :     static _Const_Base_ptr
+     133              :     _S_maximum(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT
+     134              :     {
+     135              :       while (__x->_M_right != 0) __x = __x->_M_right;
+     136              :       return __x;
+     137              :     }
+     138              :   };
+     139              : 
+     140              :   // Helper type offering value initialization guarantee on the compare functor.
+     141              :   template<typename _Key_compare>
+     142              :     struct _Rb_tree_key_compare
+     143              :     {
+     144              :       _Key_compare              _M_key_compare;
+     145              : 
+     146       464798 :       _Rb_tree_key_compare()
+     147              :       _GLIBCXX_NOEXCEPT_IF(
+     148              :         is_nothrow_default_constructible<_Key_compare>::value)
+     149              :       : _M_key_compare()
+     150       464798 :       { }
+     151              : 
+     152      1590500 :       _Rb_tree_key_compare(const _Key_compare& __comp)
+     153              :       : _M_key_compare(__comp)
+     154      1590500 :       { }
+     155              : 
+     156              : #if __cplusplus >= 201103L
+     157              :       // Copy constructor added for consistency with C++98 mode.
+     158              :       _Rb_tree_key_compare(const _Rb_tree_key_compare&) = default;
+     159              : 
+     160              :       _Rb_tree_key_compare(_Rb_tree_key_compare&& __x)
+     161              :         noexcept(is_nothrow_copy_constructible<_Key_compare>::value)
+     162              :       : _M_key_compare(__x._M_key_compare)
+     163              :       { }
+     164              : #endif
+     165              :     };
+     166              : 
+     167              :   // Helper type to manage default initialization of node count and header.
+     168              :   struct _Rb_tree_header
+     169              :   {
+     170              :     _Rb_tree_node_base  _M_header;
+     171              :     size_t              _M_node_count; // Keeps track of size of tree.
+     172              : 
+     173      2056374 :     _Rb_tree_header() _GLIBCXX_NOEXCEPT
+     174      2056374 :     {
+     175      2056374 :       _M_header._M_color = _S_red;
+     176      2056374 :       _M_reset();
+     177      2056374 :     }
+     178              : 
+     179              : #if __cplusplus >= 201103L
+     180              :     _Rb_tree_header(_Rb_tree_header&& __x) noexcept
+     181              :     {
+     182              :       if (__x._M_header._M_parent != nullptr)
+     183              :         _M_move_data(__x);
+     184              :       else
+     185              :         {
+     186              :           _M_header._M_color = _S_red;
+     187              :           _M_reset();
+     188              :         }
+     189              :     }
+     190              : #endif
+     191              : 
+     192              :     void
+     193          224 :     _M_move_data(_Rb_tree_header& __from)
+     194              :     {
+     195          224 :       _M_header._M_color = __from._M_header._M_color;
+     196          224 :       _M_header._M_parent = __from._M_header._M_parent;
+     197          224 :       _M_header._M_left = __from._M_header._M_left;
+     198          224 :       _M_header._M_right = __from._M_header._M_right;
+     199          224 :       _M_header._M_parent->_M_parent = &_M_header;
+     200          224 :       _M_node_count = __from._M_node_count;
+     201              : 
+     202          224 :       __from._M_reset();
+     203          224 :     }
+     204              : 
+     205              :     void
+     206      2064532 :     _M_reset()
+     207              :     {
+     208      2064532 :       _M_header._M_parent = 0;
+     209      2064532 :       _M_header._M_left = &_M_header;
+     210      2064532 :       _M_header._M_right = &_M_header;
+     211      2064532 :       _M_node_count = 0;
+     212      2064532 :     }
+     213              :   };
+     214              : 
+     215              :   template<typename _Val>
+     216              :     struct _Rb_tree_node : public _Rb_tree_node_base
+     217              :     {
+     218              :       typedef _Rb_tree_node<_Val>* _Link_type;
+     219              : 
+     220              : #if __cplusplus < 201103L
+     221              :       _Val _M_value_field;
+     222              : 
+     223              :       _Val*
+     224              :       _M_valptr()
+     225              :       { return std::__addressof(_M_value_field); }
+     226              : 
+     227              :       const _Val*
+     228              :       _M_valptr() const
+     229              :       { return std::__addressof(_M_value_field); }
+     230              : #else
+     231              :       __gnu_cxx::__aligned_membuf<_Val> _M_storage;
+     232              : 
+     233              :       _Val*
+     234    344708324 :       _M_valptr()
+     235    344708324 :       { return _M_storage._M_ptr(); }
+     236              : 
+     237              :       const _Val*
+     238    672370664 :       _M_valptr() const
+     239    672370664 :       { return _M_storage._M_ptr(); }
+     240              : #endif
+     241              :     };
+     242              : 
+     243              :   _GLIBCXX_PURE _Rb_tree_node_base*
+     244              :   _Rb_tree_increment(_Rb_tree_node_base* __x) throw ();
+     245              : 
+     246              :   _GLIBCXX_PURE const _Rb_tree_node_base*
+     247              :   _Rb_tree_increment(const _Rb_tree_node_base* __x) throw ();
+     248              : 
+     249              :   _GLIBCXX_PURE _Rb_tree_node_base*
+     250              :   _Rb_tree_decrement(_Rb_tree_node_base* __x) throw ();
+     251              : 
+     252              :   _GLIBCXX_PURE const _Rb_tree_node_base*
+     253              :   _Rb_tree_decrement(const _Rb_tree_node_base* __x) throw ();
+     254              : 
+     255              :   template<typename _Tp>
+     256              :     struct _Rb_tree_iterator
+     257              :     {
+     258              :       typedef _Tp  value_type;
+     259              :       typedef _Tp& reference;
+     260              :       typedef _Tp* pointer;
+     261              : 
+     262              :       typedef bidirectional_iterator_tag iterator_category;
+     263              :       typedef ptrdiff_t                  difference_type;
+     264              : 
+     265              :       typedef _Rb_tree_iterator<_Tp>              _Self;
+     266              :       typedef _Rb_tree_node_base::_Base_ptr     _Base_ptr;
+     267              :       typedef _Rb_tree_node<_Tp>*         _Link_type;
+     268              : 
+     269            8 :       _Rb_tree_iterator() _GLIBCXX_NOEXCEPT
+     270            8 :       : _M_node() { }
+     271              : 
+     272              :       explicit
+     273    229110978 :       _Rb_tree_iterator(_Base_ptr __x) _GLIBCXX_NOEXCEPT
+     274    229110978 :       : _M_node(__x) { }
+     275              : 
+     276              :       reference
+     277    233344220 :       operator*() const _GLIBCXX_NOEXCEPT
+     278    233344220 :       { return *static_cast<_Link_type>(_M_node)->_M_valptr(); }
+     279              : 
+     280              :       pointer
+     281          116 :       operator->() const _GLIBCXX_NOEXCEPT
+     282          116 :       { return static_cast<_Link_type> (_M_node)->_M_valptr(); }
+     283              : 
+     284              :       _Self&
+     285     31818620 :       operator++() _GLIBCXX_NOEXCEPT
+     286              :       {
+     287     31818620 :         _M_node = _Rb_tree_increment(_M_node);
+     288     31818620 :         return *this;
+     289              :       }
+     290              : 
+     291              :       _Self
+     292              :       operator++(int) _GLIBCXX_NOEXCEPT
+     293              :       {
+     294              :         _Self __tmp = *this;
+     295              :         _M_node = _Rb_tree_increment(_M_node);
+     296              :         return __tmp;
+     297              :       }
+     298              : 
+     299              :       _Self&
+     300      7695776 :       operator--() _GLIBCXX_NOEXCEPT
+     301              :       {
+     302      7695776 :         _M_node = _Rb_tree_decrement(_M_node);
+     303      7695776 :         return *this;
+     304              :       }
+     305              : 
+     306              :       _Self
+     307              :       operator--(int) _GLIBCXX_NOEXCEPT
+     308              :       {
+     309              :         _Self __tmp = *this;
+     310              :         _M_node = _Rb_tree_decrement(_M_node);
+     311              :         return __tmp;
+     312              :       }
+     313              : 
+     314              :       friend bool
+     315    102800900 :       operator==(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+     316    102800900 :       { return __x._M_node == __y._M_node; }
+     317              : 
+     318              : #if ! __cpp_lib_three_way_comparison
+     319              :       friend bool
+     320     33423664 :       operator!=(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+     321     33423664 :       { return __x._M_node != __y._M_node; }
+     322              : #endif
+     323              : 
+     324              :       _Base_ptr _M_node;
+     325              :     };
+     326              : 
+     327              :   template<typename _Tp>
+     328              :     struct _Rb_tree_const_iterator
+     329              :     {
+     330              :       typedef _Tp        value_type;
+     331              :       typedef const _Tp& reference;
+     332              :       typedef const _Tp* pointer;
+     333              : 
+     334              :       typedef _Rb_tree_iterator<_Tp> iterator;
+     335              : 
+     336              :       typedef bidirectional_iterator_tag iterator_category;
+     337              :       typedef ptrdiff_t                  difference_type;
+     338              : 
+     339              :       typedef _Rb_tree_const_iterator<_Tp>                _Self;
+     340              :       typedef _Rb_tree_node_base::_Const_Base_ptr       _Base_ptr;
+     341              :       typedef const _Rb_tree_node<_Tp>*                   _Link_type;
+     342              : 
+     343              :       _Rb_tree_const_iterator() _GLIBCXX_NOEXCEPT
+     344              :       : _M_node() { }
+     345              : 
+     346              :       explicit
+     347        72128 :       _Rb_tree_const_iterator(_Base_ptr __x) _GLIBCXX_NOEXCEPT
+     348        72128 :       : _M_node(__x) { }
+     349              : 
+     350     10342494 :       _Rb_tree_const_iterator(const iterator& __it) _GLIBCXX_NOEXCEPT
+     351     10342494 :       : _M_node(__it._M_node) { }
+     352              : 
+     353              :       iterator
+     354     10342492 :       _M_const_cast() const _GLIBCXX_NOEXCEPT
+     355     10342492 :       { return iterator(const_cast<typename iterator::_Base_ptr>(_M_node)); }
+     356              : 
+     357              :       reference
+     358        31684 :       operator*() const _GLIBCXX_NOEXCEPT
+     359        31684 :       { return *static_cast<_Link_type>(_M_node)->_M_valptr(); }
+     360              : 
+     361              :       pointer
+     362           56 :       operator->() const _GLIBCXX_NOEXCEPT
+     363           56 :       { return static_cast<_Link_type>(_M_node)->_M_valptr(); }
+     364              : 
+     365              :       _Self&
+     366         3324 :       operator++() _GLIBCXX_NOEXCEPT
+     367              :       {
+     368         3324 :         _M_node = _Rb_tree_increment(_M_node);
+     369         3324 :         return *this;
+     370              :       }
+     371              : 
+     372              :       _Self
+     373           68 :       operator++(int) _GLIBCXX_NOEXCEPT
+     374              :       {
+     375           68 :         _Self __tmp = *this;
+     376           68 :         _M_node = _Rb_tree_increment(_M_node);
+     377           68 :         return __tmp;
+     378              :       }
+     379              : 
+     380              :       _Self&
+     381            0 :       operator--() _GLIBCXX_NOEXCEPT
+     382              :       {
+     383            0 :         _M_node = _Rb_tree_decrement(_M_node);
+     384            0 :         return *this;
+     385              :       }
+     386              : 
+     387              :       _Self
+     388              :       operator--(int) _GLIBCXX_NOEXCEPT
+     389              :       {
+     390              :         _Self __tmp = *this;
+     391              :         _M_node = _Rb_tree_decrement(_M_node);
+     392              :         return __tmp;
+     393              :       }
+     394              : 
+     395              :       friend bool
+     396        41430 :       operator==(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+     397        41430 :       { return __x._M_node == __y._M_node; }
+     398              : 
+     399              : #if ! __cpp_lib_three_way_comparison
+     400              :       friend bool
+     401         4932 :       operator!=(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+     402         4932 :       { return __x._M_node != __y._M_node; }
+     403              : #endif
+     404              : 
+     405              :       _Base_ptr _M_node;
+     406              :     };
+     407              : 
+     408              :   __attribute__((__nonnull__))
+     409              :   void
+     410              :   _Rb_tree_insert_and_rebalance(const bool __insert_left,
+     411              :                                 _Rb_tree_node_base* __x,
+     412              :                                 _Rb_tree_node_base* __p,
+     413              :                                 _Rb_tree_node_base& __header) throw ();
+     414              : 
+     415              :   __attribute__((__nonnull__,__returns_nonnull__))
+     416              :   _Rb_tree_node_base*
+     417              :   _Rb_tree_rebalance_for_erase(_Rb_tree_node_base* const __z,
+     418              :                                _Rb_tree_node_base& __header) throw ();
+     419              : 
+     420              : #if __cplusplus > 201402L
+     421              :   template<typename _Tree1, typename _Cmp2>
+     422              :     struct _Rb_tree_merge_helper { };
+     423              : #endif
+     424              : 
+     425              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+     426              :            typename _Compare, typename _Alloc = allocator<_Val> >
+     427              :     class _Rb_tree
+     428              :     {
+     429              :       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+     430              :         rebind<_Rb_tree_node<_Val> >::other _Node_allocator;
+     431              : 
+     432              :       typedef __gnu_cxx::__alloc_traits<_Node_allocator> _Alloc_traits;
+     433              : 
+     434              :     protected:
+     435              :       typedef _Rb_tree_node_base*               _Base_ptr;
+     436              :       typedef const _Rb_tree_node_base*         _Const_Base_ptr;
+     437              :       typedef _Rb_tree_node<_Val>*                _Link_type;
+     438              :       typedef const _Rb_tree_node<_Val>*  _Const_Link_type;
+     439              : 
+     440              :     private:
+     441              :       // Functor recycling a pool of nodes and using allocation once the pool
+     442              :       // is empty.
+     443              :       struct _Reuse_or_alloc_node
+     444              :       {
+     445          528 :         _Reuse_or_alloc_node(_Rb_tree& __t)
+     446          528 :         : _M_root(__t._M_root()), _M_nodes(__t._M_rightmost()), _M_t(__t)
+     447              :         {
+     448          528 :           if (_M_root)
+     449              :             {
+     450           40 :               _M_root->_M_parent = 0;
+     451              : 
+     452           40 :               if (_M_nodes->_M_left)
+     453            2 :                 _M_nodes = _M_nodes->_M_left;
+     454              :             }
+     455              :           else
+     456          488 :             _M_nodes = 0;
+     457          528 :         }
+     458              : 
+     459              : #if __cplusplus >= 201103L
+     460              :         _Reuse_or_alloc_node(const _Reuse_or_alloc_node&) = delete;
+     461              : #endif
+     462              : 
+     463          528 :         ~_Reuse_or_alloc_node()
+     464          528 :         { _M_t._M_erase(static_cast<_Link_type>(_M_root)); }
+     465              : 
+     466              :         template<typename _Arg>
+     467              :           _Link_type
+     468        13280 :           operator()(_GLIBCXX_FWDREF(_Arg) __arg)
+     469              :           {
+     470        13280 :             _Link_type __node = static_cast<_Link_type>(_M_extract());
+     471        13280 :             if (__node)
+     472              :               {
+     473          252 :                 _M_t._M_destroy_node(__node);
+     474          252 :                 _M_t._M_construct_node(__node, _GLIBCXX_FORWARD(_Arg, __arg));
+     475          252 :                 return __node;
+     476              :               }
+     477              : 
+     478        13028 :             return _M_t._M_create_node(_GLIBCXX_FORWARD(_Arg, __arg));
+     479              :           }
+     480              : 
+     481              :       private:
+     482              :         _Base_ptr
+     483        13280 :         _M_extract()
+     484              :         {
+     485        13280 :           if (!_M_nodes)
+     486        13028 :             return _M_nodes;
+     487              : 
+     488          252 :           _Base_ptr __node = _M_nodes;
+     489          252 :           _M_nodes = _M_nodes->_M_parent;
+     490          252 :           if (_M_nodes)
+     491              :             {
+     492          220 :               if (_M_nodes->_M_right == __node)
+     493              :                 {
+     494          110 :                   _M_nodes->_M_right = 0;
+     495              : 
+     496          110 :                   if (_M_nodes->_M_left)
+     497              :                     {
+     498          106 :                       _M_nodes = _M_nodes->_M_left;
+     499              : 
+     500          170 :                       while (_M_nodes->_M_right)
+     501           64 :                         _M_nodes = _M_nodes->_M_right;
+     502              : 
+     503          106 :                       if (_M_nodes->_M_left)
+     504           10 :                         _M_nodes = _M_nodes->_M_left;
+     505              :                     }
+     506              :                 }
+     507              :               else // __node is on the left.
+     508          110 :                 _M_nodes->_M_left = 0;
+     509              :             }
+     510              :           else
+     511           32 :             _M_root = 0;
+     512              : 
+     513          252 :           return __node;
+     514              :         }
+     515              : 
+     516              :         _Base_ptr _M_root;
+     517              :         _Base_ptr _M_nodes;
+     518              :         _Rb_tree& _M_t;
+     519              :       };
+     520              : 
+     521              :       // Functor similar to the previous one but without any pool of nodes to
+     522              :       // recycle.
+     523              :       struct _Alloc_node
+     524              :       {
+     525      1590494 :         _Alloc_node(_Rb_tree& __t)
+     526      1590494 :         : _M_t(__t) { }
+     527              : 
+     528              :         template<typename _Arg>
+     529              :           _Link_type
+     530     30215422 :           operator()(_GLIBCXX_FWDREF(_Arg) __arg) const
+     531     30215422 :           { return _M_t._M_create_node(_GLIBCXX_FORWARD(_Arg, __arg)); }
+     532              : 
+     533              :       private:
+     534              :         _Rb_tree& _M_t;
+     535              :       };
+     536              : 
+     537              :     public:
+     538              :       typedef _Key                              key_type;
+     539              :       typedef _Val                              value_type;
+     540              :       typedef value_type*                       pointer;
+     541              :       typedef const value_type*                 const_pointer;
+     542              :       typedef value_type&                   reference;
+     543              :       typedef const value_type&             const_reference;
+     544              :       typedef size_t                            size_type;
+     545              :       typedef ptrdiff_t                         difference_type;
+     546              :       typedef _Alloc                            allocator_type;
+     547              : 
+     548              :       _Node_allocator&
+     549    162274752 :       _M_get_Node_allocator() _GLIBCXX_NOEXCEPT
+     550    162274752 :       { return this->_M_impl; }
+     551              : 
+     552              :       const _Node_allocator&
+     553            0 :       _M_get_Node_allocator() const _GLIBCXX_NOEXCEPT
+     554            0 :       { return this->_M_impl; }
+     555              : 
+     556              :       allocator_type
+     557              :       get_allocator() const _GLIBCXX_NOEXCEPT
+     558              :       { return allocator_type(_M_get_Node_allocator()); }
+     559              : 
+     560              :     protected:
+     561              :       _Link_type
+     562     40568450 :       _M_get_node()
+     563     81136900 :       { return _Alloc_traits::allocate(_M_get_Node_allocator(), 1); }
+     564              : 
+     565              :       void
+     566     40568450 :       _M_put_node(_Link_type __p) _GLIBCXX_NOEXCEPT
+     567     40568450 :       { _Alloc_traits::deallocate(_M_get_Node_allocator(), __p, 1); }
+     568              : 
+     569              : #if __cplusplus < 201103L
+     570              :       void
+     571              :       _M_construct_node(_Link_type __node, const value_type& __x)
+     572              :       {
+     573              :         __try
+     574              :           { get_allocator().construct(__node->_M_valptr(), __x); }
+     575              :         __catch(...)
+     576              :           {
+     577              :             _M_put_node(__node);
+     578              :             __throw_exception_again;
+     579              :           }
+     580              :       }
+     581              : 
+     582              :       _Link_type
+     583              :       _M_create_node(const value_type& __x)
+     584              :       {
+     585              :         _Link_type __tmp = _M_get_node();
+     586              :         _M_construct_node(__tmp, __x);
+     587              :         return __tmp;
+     588              :       }
+     589              : #else
+     590              :       template<typename... _Args>
+     591              :         void
+     592     40568702 :         _M_construct_node(_Link_type __node, _Args&&... __args)
+     593              :         {
+     594              :           __try
+     595              :             {
+     596     40568702 :               ::new(__node) _Rb_tree_node<_Val>;
+     597     40568702 :               _Alloc_traits::construct(_M_get_Node_allocator(),
+     598              :                                        __node->_M_valptr(),
+     599              :                                        std::forward<_Args>(__args)...);
+     600              :             }
+     601            0 :           __catch(...)
+     602              :             {
+     603            0 :               __node->~_Rb_tree_node<_Val>();
+     604            0 :               _M_put_node(__node);
+     605            0 :               __throw_exception_again;
+     606              :             }
+     607     40568702 :         }
+     608              : 
+     609              :       template<typename... _Args>
+     610              :         _Link_type
+     611     40568450 :         _M_create_node(_Args&&... __args)
+     612              :         {
+     613     40568450 :           _Link_type __tmp = _M_get_node();
+     614     40568450 :           _M_construct_node(__tmp, std::forward<_Args>(__args)...);
+     615     40568450 :           return __tmp;
+     616              :         }
+     617              : #endif
+     618              : 
+     619              :       void
+     620     40568702 :       _M_destroy_node(_Link_type __p) _GLIBCXX_NOEXCEPT
+     621              :       {
+     622              : #if __cplusplus < 201103L
+     623              :         get_allocator().destroy(__p->_M_valptr());
+     624              : #else
+     625     40568702 :         _Alloc_traits::destroy(_M_get_Node_allocator(), __p->_M_valptr());
+     626     40568702 :         __p->~_Rb_tree_node<_Val>();
+     627              : #endif
+     628     40568702 :       }
+     629              : 
+     630              :       void
+     631     40568450 :       _M_drop_node(_Link_type __p) _GLIBCXX_NOEXCEPT
+     632              :       {
+     633     40568450 :         _M_destroy_node(__p);
+     634     40568450 :         _M_put_node(__p);
+     635     40568450 :       }
+     636              : 
+     637              :       template<bool _MoveValue, typename _NodeGen>
+     638              :         _Link_type
+     639     30226584 :         _M_clone_node(_Link_type __x, _NodeGen& __node_gen)
+     640              :         {
+     641              : #if __cplusplus >= 201103L
+     642              :           using _Vp = __conditional_t<_MoveValue,
+     643              :                                       value_type&&,
+     644              :                                       const value_type&>;
+     645              : #endif
+     646              :           _Link_type __tmp
+     647     30226584 :             = __node_gen(_GLIBCXX_FORWARD(_Vp, *__x->_M_valptr()));
+     648     30226584 :           __tmp->_M_color = __x->_M_color;
+     649     30226584 :           __tmp->_M_left = 0;
+     650     30226584 :           __tmp->_M_right = 0;
+     651     30226584 :           return __tmp;
+     652              :         }
+     653              : 
+     654              :     protected:
+     655              : #if _GLIBCXX_INLINE_VERSION
+     656              :       template<typename _Key_compare>
+     657              : #else
+     658              :       // Unused _Is_pod_comparator is kept as it is part of mangled name.
+     659              :       template<typename _Key_compare,
+     660              :                bool /* _Is_pod_comparator */ = __is_pod(_Key_compare)>
+     661              : #endif
+     662              :         struct _Rb_tree_impl
+     663              :         : public _Node_allocator
+     664              :         , public _Rb_tree_key_compare<_Key_compare>
+     665              :         , public _Rb_tree_header
+     666              :         {
+     667              :           typedef _Rb_tree_key_compare<_Key_compare> _Base_key_compare;
+     668              : 
+     669       406558 :           _Rb_tree_impl()
+     670              :             _GLIBCXX_NOEXCEPT_IF(
+     671              :                 is_nothrow_default_constructible<_Node_allocator>::value
+     672              :                 && is_nothrow_default_constructible<_Base_key_compare>::value )
+     673       406558 :           : _Node_allocator()
+     674       406558 :           { }
+     675              : 
+     676      1590308 :           _Rb_tree_impl(const _Rb_tree_impl& __x)
+     677              :           : _Node_allocator(_Alloc_traits::_S_select_on_copy(__x))
+     678      1590308 :           , _Base_key_compare(__x._M_key_compare)
+     679      1590308 :           , _Rb_tree_header()
+     680      1590308 :           { }
+     681              : 
+     682              : #if __cplusplus < 201103L
+     683              :           _Rb_tree_impl(const _Key_compare& __comp, const _Node_allocator& __a)
+     684              :           : _Node_allocator(__a), _Base_key_compare(__comp)
+     685              :           { }
+     686              : #else
+     687              :           _Rb_tree_impl(_Rb_tree_impl&&)
+     688              :             noexcept( is_nothrow_move_constructible<_Base_key_compare>::value )
+     689              :           = default;
+     690              : 
+     691              :           explicit
+     692              :           _Rb_tree_impl(_Node_allocator&& __a)
+     693              :           : _Node_allocator(std::move(__a))
+     694              :           { }
+     695              : 
+     696              :           _Rb_tree_impl(_Rb_tree_impl&& __x, _Node_allocator&& __a)
+     697              :           : _Node_allocator(std::move(__a)),
+     698              :             _Base_key_compare(std::move(__x)),
+     699              :             _Rb_tree_header(std::move(__x))
+     700              :           { }
+     701              : 
+     702          186 :           _Rb_tree_impl(const _Key_compare& __comp, _Node_allocator&& __a)
+     703          372 :           : _Node_allocator(std::move(__a)), _Base_key_compare(__comp)
+     704          186 :           { }
+     705              : #endif
+     706              :         };
+     707              : 
+     708              :       _Rb_tree_impl<_Compare> _M_impl;
+     709              : 
+     710              :     protected:
+     711              :       _Base_ptr&
+     712      1591584 :       _M_root() _GLIBCXX_NOEXCEPT
+     713      1591584 :       { return this->_M_impl._M_header._M_parent; }
+     714              : 
+     715              :       _Const_Base_ptr
+     716      1590836 :       _M_root() const _GLIBCXX_NOEXCEPT
+     717      1590836 :       { return this->_M_impl._M_header._M_parent; }
+     718              : 
+     719              :       _Base_ptr&
+     720     12280762 :       _M_leftmost() _GLIBCXX_NOEXCEPT
+     721     12280762 :       { return this->_M_impl._M_header._M_left; }
+     722              : 
+     723              :       _Const_Base_ptr
+     724              :       _M_leftmost() const _GLIBCXX_NOEXCEPT
+     725              :       { return this->_M_impl._M_header._M_left; }
+     726              : 
+     727              :       _Base_ptr&
+     728      4078528 :       _M_rightmost() _GLIBCXX_NOEXCEPT
+     729      4078528 :       { return this->_M_impl._M_header._M_right; }
+     730              : 
+     731              :       _Const_Base_ptr
+     732              :       _M_rightmost() const _GLIBCXX_NOEXCEPT
+     733              :       { return this->_M_impl._M_header._M_right; }
+     734              : 
+     735              :       _Link_type
+     736    105991454 :       _M_mbegin() const _GLIBCXX_NOEXCEPT
+     737    105991454 :       { return static_cast<_Link_type>(this->_M_impl._M_header._M_parent); }
+     738              : 
+     739              :       _Link_type
+     740    104400622 :       _M_begin() _GLIBCXX_NOEXCEPT
+     741    104400622 :       { return _M_mbegin(); }
+     742              : 
+     743              :       _Const_Link_type
+     744        28094 :       _M_begin() const _GLIBCXX_NOEXCEPT
+     745              :       {
+     746              :         return static_cast<_Const_Link_type>
+     747        28094 :           (this->_M_impl._M_header._M_parent);
+     748              :       }
+     749              : 
+     750              :       _Base_ptr
+     751    121687708 :       _M_end() _GLIBCXX_NOEXCEPT
+     752    121687708 :       { return &this->_M_impl._M_header; }
+     753              : 
+     754              :       _Const_Base_ptr
+     755        28094 :       _M_end() const _GLIBCXX_NOEXCEPT
+     756        28094 :       { return &this->_M_impl._M_header; }
+     757              : 
+     758              :       static const _Key&
+     759    672338924 :       _S_key(_Const_Link_type __x)
+     760              :       {
+     761              : #if __cplusplus >= 201103L
+     762              :         // If we're asking for the key we're presumably using the comparison
+     763              :         // object, and so this is a good place to sanity check it.
+     764              :         static_assert(__is_invocable<_Compare&, const _Key&, const _Key&>{},
+     765              :                       "comparison object must be invocable "
+     766              :                       "with two arguments of key type");
+     767              : # if __cplusplus >= 201703L
+     768              :         // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     769              :         // 2542. Missing const requirements for associative containers
+     770              :         if constexpr (__is_invocable<_Compare&, const _Key&, const _Key&>{})
+     771              :           static_assert(
+     772              :               is_invocable_v<const _Compare&, const _Key&, const _Key&>,
+     773              :               "comparison object must be invocable as const");
+     774              : # endif // C++17
+     775              : #endif // C++11
+     776              : 
+     777    672338924 :         return _KeyOfValue()(*__x->_M_valptr());
+     778              :       }
+     779              : 
+     780              :       static _Link_type
+     781    318980488 :       _S_left(_Base_ptr __x) _GLIBCXX_NOEXCEPT
+     782    318980488 :       { return static_cast<_Link_type>(__x->_M_left); }
+     783              : 
+     784              :       static _Const_Link_type
+     785        86920 :       _S_left(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT
+     786        86920 :       { return static_cast<_Const_Link_type>(__x->_M_left); }
+     787              : 
+     788              :       static _Link_type
+     789    445063782 :       _S_right(_Base_ptr __x) _GLIBCXX_NOEXCEPT
+     790    445063782 :       { return static_cast<_Link_type>(__x->_M_right); }
+     791              : 
+     792              :       static _Const_Link_type
+     793        90868 :       _S_right(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT
+     794        90868 :       { return static_cast<_Const_Link_type>(__x->_M_right); }
+     795              : 
+     796              :       static const _Key&
+     797     24998592 :       _S_key(_Const_Base_ptr __x)
+     798     24998592 :       { return _S_key(static_cast<_Const_Link_type>(__x)); }
+     799              : 
+     800              :       static _Base_ptr
+     801      1590832 :       _S_minimum(_Base_ptr __x) _GLIBCXX_NOEXCEPT
+     802      1590832 :       { return _Rb_tree_node_base::_S_minimum(__x); }
+     803              : 
+     804              :       static _Const_Base_ptr
+     805              :       _S_minimum(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT
+     806              :       { return _Rb_tree_node_base::_S_minimum(__x); }
+     807              : 
+     808              :       static _Base_ptr
+     809      1590832 :       _S_maximum(_Base_ptr __x) _GLIBCXX_NOEXCEPT
+     810      1590832 :       { return _Rb_tree_node_base::_S_maximum(__x); }
+     811              : 
+     812              :       static _Const_Base_ptr
+     813              :       _S_maximum(_Const_Base_ptr __x) _GLIBCXX_NOEXCEPT
+     814              :       { return _Rb_tree_node_base::_S_maximum(__x); }
+     815              : 
+     816              :     public:
+     817              :       typedef _Rb_tree_iterator<value_type>       iterator;
+     818              :       typedef _Rb_tree_const_iterator<value_type> const_iterator;
+     819              : 
+     820              :       typedef std::reverse_iterator<iterator>       reverse_iterator;
+     821              :       typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+     822              : 
+     823              : #if __cplusplus > 201402L
+     824              :       using node_type = _Node_handle<_Key, _Val, _Node_allocator>;
+     825              :       using insert_return_type = _Node_insert_return<
+     826              :         __conditional_t<is_same_v<_Key, _Val>, const_iterator, iterator>,
+     827              :         node_type>;
+     828              : #endif
+     829              : 
+     830              :       pair<_Base_ptr, _Base_ptr>
+     831              :       _M_get_insert_unique_pos(const key_type& __k);
+     832              : 
+     833              :       pair<_Base_ptr, _Base_ptr>
+     834              :       _M_get_insert_equal_pos(const key_type& __k);
+     835              : 
+     836              :       pair<_Base_ptr, _Base_ptr>
+     837              :       _M_get_insert_hint_unique_pos(const_iterator __pos,
+     838              :                                     const key_type& __k);
+     839              : 
+     840              :       pair<_Base_ptr, _Base_ptr>
+     841              :       _M_get_insert_hint_equal_pos(const_iterator __pos,
+     842              :                                    const key_type& __k);
+     843              : 
+     844              :     private:
+     845              : #if __cplusplus >= 201103L
+     846              :       template<typename _Arg, typename _NodeGen>
+     847              :         iterator
+     848              :         _M_insert_(_Base_ptr __x, _Base_ptr __y, _Arg&& __v, _NodeGen&);
+     849              : 
+     850              :       iterator
+     851              :       _M_insert_node(_Base_ptr __x, _Base_ptr __y, _Link_type __z);
+     852              : 
+     853              :       template<typename _Arg>
+     854              :         iterator
+     855              :         _M_insert_lower(_Base_ptr __y, _Arg&& __v);
+     856              : 
+     857              :       template<typename _Arg>
+     858              :         iterator
+     859              :         _M_insert_equal_lower(_Arg&& __x);
+     860              : 
+     861              :       iterator
+     862              :       _M_insert_lower_node(_Base_ptr __p, _Link_type __z);
+     863              : 
+     864              :       iterator
+     865              :       _M_insert_equal_lower_node(_Link_type __z);
+     866              : #else
+     867              :       template<typename _NodeGen>
+     868              :         iterator
+     869              :         _M_insert_(_Base_ptr __x, _Base_ptr __y,
+     870              :                    const value_type& __v, _NodeGen&);
+     871              : 
+     872              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     873              :       // 233. Insertion hints in associative containers.
+     874              :       iterator
+     875              :       _M_insert_lower(_Base_ptr __y, const value_type& __v);
+     876              : 
+     877              :       iterator
+     878              :       _M_insert_equal_lower(const value_type& __x);
+     879              : #endif
+     880              : 
+     881              :       enum { __as_lvalue, __as_rvalue };
+     882              : 
+     883              :       template<bool _MoveValues, typename _NodeGen>
+     884              :         _Link_type
+     885              :         _M_copy(_Link_type, _Base_ptr, _NodeGen&);
+     886              : 
+     887              :       template<bool _MoveValues, typename _NodeGen>
+     888              :         _Link_type
+     889      1590832 :         _M_copy(const _Rb_tree& __x, _NodeGen& __gen)
+     890              :         {
+     891              :           _Link_type __root =
+     892      1590832 :             _M_copy<_MoveValues>(__x._M_mbegin(), _M_end(), __gen);
+     893      1590832 :           _M_leftmost() = _S_minimum(__root);
+     894      1590832 :           _M_rightmost() = _S_maximum(__root);
+     895      1590832 :           _M_impl._M_node_count = __x._M_impl._M_node_count;
+     896      1590832 :           return __root;
+     897              :         }
+     898              : 
+     899              :       _Link_type
+     900      1590308 :       _M_copy(const _Rb_tree& __x)
+     901              :       {
+     902      1590308 :         _Alloc_node __an(*this);
+     903      3180616 :         return _M_copy<__as_lvalue>(__x, __an);
+     904              :       }
+     905              : 
+     906              :       void
+     907              :       _M_erase(_Link_type __x);
+     908              : 
+     909              :       iterator
+     910              :       _M_lower_bound(_Link_type __x, _Base_ptr __y,
+     911              :                      const _Key& __k);
+     912              : 
+     913              :       const_iterator
+     914              :       _M_lower_bound(_Const_Link_type __x, _Const_Base_ptr __y,
+     915              :                      const _Key& __k) const;
+     916              : 
+     917              :       iterator
+     918              :       _M_upper_bound(_Link_type __x, _Base_ptr __y,
+     919              :                      const _Key& __k);
+     920              : 
+     921              :       const_iterator
+     922              :       _M_upper_bound(_Const_Link_type __x, _Const_Base_ptr __y,
+     923              :                      const _Key& __k) const;
+     924              : 
+     925              :     public:
+     926              :       // allocation/deallocation
+     927              : #if __cplusplus < 201103L
+     928              :       _Rb_tree() { }
+     929              : #else
+     930       406558 :       _Rb_tree() = default;
+     931              : #endif
+     932              : 
+     933          186 :       _Rb_tree(const _Compare& __comp,
+     934              :                const allocator_type& __a = allocator_type())
+     935          558 :       : _M_impl(__comp, _Node_allocator(__a)) { }
+     936              : 
+     937      1590308 :       _Rb_tree(const _Rb_tree& __x)
+     938      1590308 :       : _M_impl(__x._M_impl)
+     939              :       {
+     940      1590308 :         if (__x._M_root() != 0)
+     941      1590308 :           _M_root() = _M_copy(__x);
+     942      1590308 :       }
+     943              : 
+     944              : #if __cplusplus >= 201103L
+     945              :       _Rb_tree(const allocator_type& __a)
+     946              :       : _M_impl(_Node_allocator(__a))
+     947              :       { }
+     948              : 
+     949              :       _Rb_tree(const _Rb_tree& __x, const allocator_type& __a)
+     950              :       : _M_impl(__x._M_impl._M_key_compare, _Node_allocator(__a))
+     951              :       {
+     952              :         if (__x._M_root() != nullptr)
+     953              :           _M_root() = _M_copy(__x);
+     954              :       }
+     955              : 
+     956              :       _Rb_tree(_Rb_tree&&) = default;
+     957              : 
+     958              :       _Rb_tree(_Rb_tree&& __x, const allocator_type& __a)
+     959              :       : _Rb_tree(std::move(__x), _Node_allocator(__a))
+     960              :       { }
+     961              : 
+     962              :     private:
+     963              :       _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a, true_type)
+     964              :       noexcept(is_nothrow_default_constructible<_Compare>::value)
+     965              :       : _M_impl(std::move(__x._M_impl), std::move(__a))
+     966              :       { }
+     967              : 
+     968              :       _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a, false_type)
+     969              :       : _M_impl(__x._M_impl._M_key_compare, std::move(__a))
+     970              :       {
+     971              :         if (__x._M_root() != nullptr)
+     972              :           _M_move_data(__x, false_type{});
+     973              :       }
+     974              : 
+     975              :     public:
+     976              :       _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a)
+     977              :       noexcept( noexcept(
+     978              :         _Rb_tree(std::declval<_Rb_tree&&>(), std::declval<_Node_allocator&&>(),
+     979              :                  std::declval<typename _Alloc_traits::is_always_equal>())) )
+     980              :       : _Rb_tree(std::move(__x), std::move(__a),
+     981              :                  typename _Alloc_traits::is_always_equal{})
+     982              :       { }
+     983              : #endif
+     984              : 
+     985      1996380 :       ~_Rb_tree() _GLIBCXX_NOEXCEPT
+     986      1996380 :       { _M_erase(_M_begin()); }
+     987              : 
+     988              :       _Rb_tree&
+     989              :       operator=(const _Rb_tree& __x);
+     990              : 
+     991              :       // Accessors.
+     992              :       _Compare
+     993     99954126 :       key_comp() const
+     994     99954126 :       { return _M_impl._M_key_compare; }
+     995              : 
+     996              :       iterator
+     997      1996402 :       begin() _GLIBCXX_NOEXCEPT
+     998      1996402 :       { return iterator(this->_M_impl._M_header._M_left); }
+     999              : 
+    1000              :       const_iterator
+    1001         1126 :       begin() const _GLIBCXX_NOEXCEPT
+    1002         1126 :       { return const_iterator(this->_M_impl._M_header._M_left); }
+    1003              : 
+    1004              :       iterator
+    1005    104026530 :       end() _GLIBCXX_NOEXCEPT
+    1006    104026530 :       { return iterator(&this->_M_impl._M_header); }
+    1007              : 
+    1008              :       const_iterator
+    1009        42908 :       end() const _GLIBCXX_NOEXCEPT
+    1010        42908 :       { return const_iterator(&this->_M_impl._M_header); }
+    1011              : 
+    1012              :       reverse_iterator
+    1013              :       rbegin() _GLIBCXX_NOEXCEPT
+    1014              :       { return reverse_iterator(end()); }
+    1015              : 
+    1016              :       const_reverse_iterator
+    1017              :       rbegin() const _GLIBCXX_NOEXCEPT
+    1018              :       { return const_reverse_iterator(end()); }
+    1019              : 
+    1020              :       reverse_iterator
+    1021              :       rend() _GLIBCXX_NOEXCEPT
+    1022              :       { return reverse_iterator(begin()); }
+    1023              : 
+    1024              :       const_reverse_iterator
+    1025              :       rend() const _GLIBCXX_NOEXCEPT
+    1026              :       { return const_reverse_iterator(begin()); }
+    1027              : 
+    1028              :       _GLIBCXX_NODISCARD bool
+    1029           62 :       empty() const _GLIBCXX_NOEXCEPT
+    1030           62 :       { return _M_impl._M_node_count == 0; }
+    1031              : 
+    1032              :       size_type
+    1033      1648842 :       size() const _GLIBCXX_NOEXCEPT
+    1034      1648842 :       { return _M_impl._M_node_count; }
+    1035              : 
+    1036              :       size_type
+    1037              :       max_size() const _GLIBCXX_NOEXCEPT
+    1038              :       { return _Alloc_traits::max_size(_M_get_Node_allocator()); }
+    1039              : 
+    1040              :       void
+    1041              :       swap(_Rb_tree& __t)
+    1042              :       _GLIBCXX_NOEXCEPT_IF(__is_nothrow_swappable<_Compare>::value);
+    1043              : 
+    1044              :       // Insert/erase.
+    1045              : #if __cplusplus >= 201103L
+    1046              :       template<typename _Arg>
+    1047              :         pair<iterator, bool>
+    1048              :         _M_insert_unique(_Arg&& __x);
+    1049              : 
+    1050              :       template<typename _Arg>
+    1051              :         iterator
+    1052              :         _M_insert_equal(_Arg&& __x);
+    1053              : 
+    1054              :       template<typename _Arg, typename _NodeGen>
+    1055              :         iterator
+    1056              :         _M_insert_unique_(const_iterator __pos, _Arg&& __x, _NodeGen&);
+    1057              : 
+    1058              :       template<typename _Arg>
+    1059              :         iterator
+    1060              :         _M_insert_unique_(const_iterator __pos, _Arg&& __x)
+    1061              :         {
+    1062              :           _Alloc_node __an(*this);
+    1063              :           return _M_insert_unique_(__pos, std::forward<_Arg>(__x), __an);
+    1064              :         }
+    1065              : 
+    1066              :       template<typename _Arg, typename _NodeGen>
+    1067              :         iterator
+    1068              :         _M_insert_equal_(const_iterator __pos, _Arg&& __x, _NodeGen&);
+    1069              : 
+    1070              :       template<typename _Arg>
+    1071              :         iterator
+    1072              :         _M_insert_equal_(const_iterator __pos, _Arg&& __x)
+    1073              :         {
+    1074              :           _Alloc_node __an(*this);
+    1075              :           return _M_insert_equal_(__pos, std::forward<_Arg>(__x), __an);
+    1076              :         }
+    1077              : 
+    1078              :       template<typename... _Args>
+    1079              :         pair<iterator, bool>
+    1080              :         _M_emplace_unique(_Args&&... __args);
+    1081              : 
+    1082              :       template<typename... _Args>
+    1083              :         iterator
+    1084              :         _M_emplace_equal(_Args&&... __args);
+    1085              : 
+    1086              :       template<typename... _Args>
+    1087              :         iterator
+    1088              :         _M_emplace_hint_unique(const_iterator __pos, _Args&&... __args);
+    1089              : 
+    1090              :       template<typename... _Args>
+    1091              :         iterator
+    1092              :         _M_emplace_hint_equal(const_iterator __pos, _Args&&... __args);
+    1093              : 
+    1094              :       template<typename _Iter>
+    1095              :         using __same_value_type
+    1096              :           = is_same<value_type, typename iterator_traits<_Iter>::value_type>;
+    1097              : 
+    1098              :       template<typename _InputIterator>
+    1099              :         __enable_if_t<__same_value_type<_InputIterator>::value>
+    1100          186 :         _M_insert_range_unique(_InputIterator __first, _InputIterator __last)
+    1101              :         {
+    1102          186 :           _Alloc_node __an(*this);
+    1103         2304 :           for (; __first != __last; ++__first)
+    1104         2118 :             _M_insert_unique_(end(), *__first, __an);
+    1105          186 :         }
+    1106              : 
+    1107              :       template<typename _InputIterator>
+    1108              :         __enable_if_t<!__same_value_type<_InputIterator>::value>
+    1109              :         _M_insert_range_unique(_InputIterator __first, _InputIterator __last)
+    1110              :         {
+    1111              :           for (; __first != __last; ++__first)
+    1112              :             _M_emplace_unique(*__first);
+    1113              :         }
+    1114              : 
+    1115              :       template<typename _InputIterator>
+    1116              :         __enable_if_t<__same_value_type<_InputIterator>::value>
+    1117              :         _M_insert_range_equal(_InputIterator __first, _InputIterator __last)
+    1118              :         {
+    1119              :           _Alloc_node __an(*this);
+    1120              :           for (; __first != __last; ++__first)
+    1121              :             _M_insert_equal_(end(), *__first, __an);
+    1122              :         }
+    1123              : 
+    1124              :       template<typename _InputIterator>
+    1125              :         __enable_if_t<!__same_value_type<_InputIterator>::value>
+    1126              :         _M_insert_range_equal(_InputIterator __first, _InputIterator __last)
+    1127              :         {
+    1128              :           for (; __first != __last; ++__first)
+    1129              :             _M_emplace_equal(*__first);
+    1130              :         }
+    1131              : #else
+    1132              :       pair<iterator, bool>
+    1133              :       _M_insert_unique(const value_type& __x);
+    1134              : 
+    1135              :       iterator
+    1136              :       _M_insert_equal(const value_type& __x);
+    1137              : 
+    1138              :       template<typename _NodeGen>
+    1139              :         iterator
+    1140              :         _M_insert_unique_(const_iterator __pos, const value_type& __x,
+    1141              :                           _NodeGen&);
+    1142              : 
+    1143              :       iterator
+    1144              :       _M_insert_unique_(const_iterator __pos, const value_type& __x)
+    1145              :       {
+    1146              :         _Alloc_node __an(*this);
+    1147              :         return _M_insert_unique_(__pos, __x, __an);
+    1148              :       }
+    1149              : 
+    1150              :       template<typename _NodeGen>
+    1151              :         iterator
+    1152              :         _M_insert_equal_(const_iterator __pos, const value_type& __x,
+    1153              :                          _NodeGen&);
+    1154              :       iterator
+    1155              :       _M_insert_equal_(const_iterator __pos, const value_type& __x)
+    1156              :       {
+    1157              :         _Alloc_node __an(*this);
+    1158              :         return _M_insert_equal_(__pos, __x, __an);
+    1159              :       }
+    1160              : 
+    1161              :       template<typename _InputIterator>
+    1162              :         void
+    1163              :         _M_insert_range_unique(_InputIterator __first, _InputIterator __last)
+    1164              :         {
+    1165              :           _Alloc_node __an(*this);
+    1166              :           for (; __first != __last; ++__first)
+    1167              :             _M_insert_unique_(end(), *__first, __an);
+    1168              :         }
+    1169              : 
+    1170              :       template<typename _InputIterator>
+    1171              :         void
+    1172              :         _M_insert_range_equal(_InputIterator __first, _InputIterator __last)
+    1173              :         {
+    1174              :           _Alloc_node __an(*this);
+    1175              :           for (; __first != __last; ++__first)
+    1176              :             _M_insert_equal_(end(), *__first, __an);
+    1177              :         }
+    1178              : #endif
+    1179              : 
+    1180              :     private:
+    1181              :       void
+    1182              :       _M_erase_aux(const_iterator __position);
+    1183              : 
+    1184              :       void
+    1185              :       _M_erase_aux(const_iterator __first, const_iterator __last);
+    1186              : 
+    1187              :     public:
+    1188              : #if __cplusplus >= 201103L
+    1189              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1190              :       // DR 130. Associative erase should return an iterator.
+    1191              :       _GLIBCXX_ABI_TAG_CXX11
+    1192              :       iterator
+    1193              :       erase(const_iterator __position)
+    1194              :       {
+    1195              :         __glibcxx_assert(__position != end());
+    1196              :         const_iterator __result = __position;
+    1197              :         ++__result;
+    1198              :         _M_erase_aux(__position);
+    1199              :         return __result._M_const_cast();
+    1200              :       }
+    1201              : 
+    1202              :       // LWG 2059.
+    1203              :       _GLIBCXX_ABI_TAG_CXX11
+    1204              :       iterator
+    1205              :       erase(iterator __position)
+    1206              :       {
+    1207              :         __glibcxx_assert(__position != end());
+    1208              :         iterator __result = __position;
+    1209              :         ++__result;
+    1210              :         _M_erase_aux(__position);
+    1211              :         return __result;
+    1212              :       }
+    1213              : #else
+    1214              :       void
+    1215              :       erase(iterator __position)
+    1216              :       {
+    1217              :         __glibcxx_assert(__position != end());
+    1218              :         _M_erase_aux(__position);
+    1219              :       }
+    1220              : 
+    1221              :       void
+    1222              :       erase(const_iterator __position)
+    1223              :       {
+    1224              :         __glibcxx_assert(__position != end());
+    1225              :         _M_erase_aux(__position);
+    1226              :       }
+    1227              : #endif
+    1228              : 
+    1229              :       size_type
+    1230              :       erase(const key_type& __x);
+    1231              : 
+    1232              : #if __cplusplus >= 201103L
+    1233              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1234              :       // DR 130. Associative erase should return an iterator.
+    1235              :       _GLIBCXX_ABI_TAG_CXX11
+    1236              :       iterator
+    1237              :       erase(const_iterator __first, const_iterator __last)
+    1238              :       {
+    1239              :         _M_erase_aux(__first, __last);
+    1240              :         return __last._M_const_cast();
+    1241              :       }
+    1242              : #else
+    1243              :       void
+    1244              :       erase(iterator __first, iterator __last)
+    1245              :       { _M_erase_aux(__first, __last); }
+    1246              : 
+    1247              :       void
+    1248              :       erase(const_iterator __first, const_iterator __last)
+    1249              :       { _M_erase_aux(__first, __last); }
+    1250              : #endif
+    1251              : 
+    1252              :       void
+    1253          912 :       clear() _GLIBCXX_NOEXCEPT
+    1254              :       {
+    1255          912 :         _M_erase(_M_begin());
+    1256          912 :         _M_impl._M_reset();
+    1257          912 :       }
+    1258              : 
+    1259              :       // Set operations.
+    1260              :       iterator
+    1261              :       find(const key_type& __k);
+    1262              : 
+    1263              :       const_iterator
+    1264              :       find(const key_type& __k) const;
+    1265              : 
+    1266              :       size_type
+    1267              :       count(const key_type& __k) const;
+    1268              : 
+    1269              :       iterator
+    1270    101586478 :       lower_bound(const key_type& __k)
+    1271    101586478 :       { return _M_lower_bound(_M_begin(), _M_end(), __k); }
+    1272              : 
+    1273              :       const_iterator
+    1274        14194 :       lower_bound(const key_type& __k) const
+    1275        14194 :       { return _M_lower_bound(_M_begin(), _M_end(), __k); }
+    1276              : 
+    1277              :       iterator
+    1278              :       upper_bound(const key_type& __k)
+    1279              :       { return _M_upper_bound(_M_begin(), _M_end(), __k); }
+    1280              : 
+    1281              :       const_iterator
+    1282              :       upper_bound(const key_type& __k) const
+    1283              :       { return _M_upper_bound(_M_begin(), _M_end(), __k); }
+    1284              : 
+    1285              :       pair<iterator, iterator>
+    1286              :       equal_range(const key_type& __k);
+    1287              : 
+    1288              :       pair<const_iterator, const_iterator>
+    1289              :       equal_range(const key_type& __k) const;
+    1290              : 
+    1291              : #if __cplusplus >= 201402L
+    1292              :       template<typename _Kt,
+    1293              :                typename _Req = __has_is_transparent_t<_Compare, _Kt>>
+    1294              :         iterator
+    1295          374 :         _M_find_tr(const _Kt& __k)
+    1296              :         {
+    1297          374 :           const _Rb_tree* __const_this = this;
+    1298          374 :           return __const_this->_M_find_tr(__k)._M_const_cast();
+    1299              :         }
+    1300              : 
+    1301              :       template<typename _Kt,
+    1302              :                typename _Req = __has_is_transparent_t<_Compare, _Kt>>
+    1303              :         const_iterator
+    1304          374 :         _M_find_tr(const _Kt& __k) const
+    1305              :         {
+    1306          374 :           auto __j = _M_lower_bound_tr(__k);
+    1307          374 :           if (__j != end() && _M_impl._M_key_compare(__k, _S_key(__j._M_node)))
+    1308          142 :             __j = end();
+    1309          374 :           return __j;
+    1310              :         }
+    1311              : 
+    1312              :       template<typename _Kt,
+    1313              :                typename _Req = __has_is_transparent_t<_Compare, _Kt>>
+    1314              :         size_type
+    1315              :         _M_count_tr(const _Kt& __k) const
+    1316              :         {
+    1317              :           auto __p = _M_equal_range_tr(__k);
+    1318              :           return std::distance(__p.first, __p.second);
+    1319              :         }
+    1320              : 
+    1321              :       template<typename _Kt,
+    1322              :                typename _Req = __has_is_transparent_t<_Compare, _Kt>>
+    1323              :         iterator
+    1324              :         _M_lower_bound_tr(const _Kt& __k)
+    1325              :         {
+    1326              :           const _Rb_tree* __const_this = this;
+    1327              :           return __const_this->_M_lower_bound_tr(__k)._M_const_cast();
+    1328              :         }
+    1329              : 
+    1330              :       template<typename _Kt,
+    1331              :                typename _Req = __has_is_transparent_t<_Compare, _Kt>>
+    1332              :         const_iterator
+    1333          374 :         _M_lower_bound_tr(const _Kt& __k) const
+    1334              :         {
+    1335          374 :           auto __x = _M_begin();
+    1336          374 :           auto __y = _M_end();
+    1337          786 :           while (__x != 0)
+    1338          412 :             if (!_M_impl._M_key_compare(_S_key(__x), __k))
+    1339              :               {
+    1340          276 :                 __y = __x;
+    1341          276 :                 __x = _S_left(__x);
+    1342              :               }
+    1343              :             else
+    1344          136 :               __x = _S_right(__x);
+    1345          374 :           return const_iterator(__y);
+    1346              :         }
+    1347              : 
+    1348              :       template<typename _Kt,
+    1349              :                typename _Req = __has_is_transparent_t<_Compare, _Kt>>
+    1350              :         iterator
+    1351              :         _M_upper_bound_tr(const _Kt& __k)
+    1352              :         {
+    1353              :           const _Rb_tree* __const_this = this;
+    1354              :           return __const_this->_M_upper_bound_tr(__k)._M_const_cast();
+    1355              :         }
+    1356              : 
+    1357              :       template<typename _Kt,
+    1358              :                typename _Req = __has_is_transparent_t<_Compare, _Kt>>
+    1359              :         const_iterator
+    1360              :         _M_upper_bound_tr(const _Kt& __k) const
+    1361              :         {
+    1362              :           auto __x = _M_begin();
+    1363              :           auto __y = _M_end();
+    1364              :           while (__x != 0)
+    1365              :             if (_M_impl._M_key_compare(__k, _S_key(__x)))
+    1366              :               {
+    1367              :                 __y = __x;
+    1368              :                 __x = _S_left(__x);
+    1369              :               }
+    1370              :             else
+    1371              :               __x = _S_right(__x);
+    1372              :           return const_iterator(__y);
+    1373              :         }
+    1374              : 
+    1375              :       template<typename _Kt,
+    1376              :                typename _Req = __has_is_transparent_t<_Compare, _Kt>>
+    1377              :         pair<iterator, iterator>
+    1378              :         _M_equal_range_tr(const _Kt& __k)
+    1379              :         {
+    1380              :           const _Rb_tree* __const_this = this;
+    1381              :           auto __ret = __const_this->_M_equal_range_tr(__k);
+    1382              :           return { __ret.first._M_const_cast(), __ret.second._M_const_cast() };
+    1383              :         }
+    1384              : 
+    1385              :       template<typename _Kt,
+    1386              :                typename _Req = __has_is_transparent_t<_Compare, _Kt>>
+    1387              :         pair<const_iterator, const_iterator>
+    1388              :         _M_equal_range_tr(const _Kt& __k) const
+    1389              :         {
+    1390              :           auto __low = _M_lower_bound_tr(__k);
+    1391              :           auto __high = __low;
+    1392              :           auto& __cmp = _M_impl._M_key_compare;
+    1393              :           while (__high != end() && !__cmp(__k, _S_key(__high._M_node)))
+    1394              :             ++__high;
+    1395              :           return { __low, __high };
+    1396              :         }
+    1397              : #endif
+    1398              : 
+    1399              :       // Debugging.
+    1400              :       bool
+    1401              :       __rb_verify() const;
+    1402              : 
+    1403              : #if __cplusplus >= 201103L
+    1404              :       _Rb_tree&
+    1405              :       operator=(_Rb_tree&&)
+    1406              :       noexcept(_Alloc_traits::_S_nothrow_move()
+    1407              :                && is_nothrow_move_assignable<_Compare>::value);
+    1408              : 
+    1409              :       template<typename _Iterator>
+    1410              :         void
+    1411              :         _M_assign_unique(_Iterator, _Iterator);
+    1412              : 
+    1413              :       template<typename _Iterator>
+    1414              :         void
+    1415              :         _M_assign_equal(_Iterator, _Iterator);
+    1416              : 
+    1417              :     private:
+    1418              :       // Move elements from container with equal allocator.
+    1419              :       void
+    1420          222 :       _M_move_data(_Rb_tree& __x, true_type)
+    1421          222 :       { _M_impl._M_move_data(__x._M_impl); }
+    1422              : 
+    1423              :       // Move elements from container with possibly non-equal allocator,
+    1424              :       // which might result in a copy not a move.
+    1425              :       void
+    1426              :       _M_move_data(_Rb_tree&, false_type);
+    1427              : 
+    1428              :       // Move assignment from container with equal allocator.
+    1429              :       void
+    1430              :       _M_move_assign(_Rb_tree&, true_type);
+    1431              : 
+    1432              :       // Move assignment from container with possibly non-equal allocator,
+    1433              :       // which might result in a copy not a move.
+    1434              :       void
+    1435              :       _M_move_assign(_Rb_tree&, false_type);
+    1436              : #endif
+    1437              : 
+    1438              : #if __cplusplus > 201402L
+    1439              :     public:
+    1440              :       /// Re-insert an extracted node.
+    1441              :       insert_return_type
+    1442              :       _M_reinsert_node_unique(node_type&& __nh)
+    1443              :       {
+    1444              :         insert_return_type __ret;
+    1445              :         if (__nh.empty())
+    1446              :           __ret.position = end();
+    1447              :         else
+    1448              :           {
+    1449              :             __glibcxx_assert(_M_get_Node_allocator() == *__nh._M_alloc);
+    1450              : 
+    1451              :             auto __res = _M_get_insert_unique_pos(__nh._M_key());
+    1452              :             if (__res.second)
+    1453              :               {
+    1454              :                 __ret.position
+    1455              :                   = _M_insert_node(__res.first, __res.second, __nh._M_ptr);
+    1456              :                 __nh._M_ptr = nullptr;
+    1457              :                 __ret.inserted = true;
+    1458              :               }
+    1459              :             else
+    1460              :               {
+    1461              :                 __ret.node = std::move(__nh);
+    1462              :                 __ret.position = iterator(__res.first);
+    1463              :                 __ret.inserted = false;
+    1464              :               }
+    1465              :           }
+    1466              :         return __ret;
+    1467              :       }
+    1468              : 
+    1469              :       /// Re-insert an extracted node.
+    1470              :       iterator
+    1471              :       _M_reinsert_node_equal(node_type&& __nh)
+    1472              :       {
+    1473              :         iterator __ret;
+    1474              :         if (__nh.empty())
+    1475              :           __ret = end();
+    1476              :         else
+    1477              :           {
+    1478              :             __glibcxx_assert(_M_get_Node_allocator() == *__nh._M_alloc);
+    1479              :             auto __res = _M_get_insert_equal_pos(__nh._M_key());
+    1480              :             if (__res.second)
+    1481              :               __ret = _M_insert_node(__res.first, __res.second, __nh._M_ptr);
+    1482              :             else
+    1483              :               __ret = _M_insert_equal_lower_node(__nh._M_ptr);
+    1484              :             __nh._M_ptr = nullptr;
+    1485              :           }
+    1486              :         return __ret;
+    1487              :       }
+    1488              : 
+    1489              :       /// Re-insert an extracted node.
+    1490              :       iterator
+    1491              :       _M_reinsert_node_hint_unique(const_iterator __hint, node_type&& __nh)
+    1492              :       {
+    1493              :         iterator __ret;
+    1494              :         if (__nh.empty())
+    1495              :           __ret = end();
+    1496              :         else
+    1497              :           {
+    1498              :             __glibcxx_assert(_M_get_Node_allocator() == *__nh._M_alloc);
+    1499              :             auto __res = _M_get_insert_hint_unique_pos(__hint, __nh._M_key());
+    1500              :             if (__res.second)
+    1501              :               {
+    1502              :                 __ret = _M_insert_node(__res.first, __res.second, __nh._M_ptr);
+    1503              :                 __nh._M_ptr = nullptr;
+    1504              :               }
+    1505              :             else
+    1506              :               __ret = iterator(__res.first);
+    1507              :           }
+    1508              :         return __ret;
+    1509              :       }
+    1510              : 
+    1511              :       /// Re-insert an extracted node.
+    1512              :       iterator
+    1513              :       _M_reinsert_node_hint_equal(const_iterator __hint, node_type&& __nh)
+    1514              :       {
+    1515              :         iterator __ret;
+    1516              :         if (__nh.empty())
+    1517              :           __ret = end();
+    1518              :         else
+    1519              :           {
+    1520              :             __glibcxx_assert(_M_get_Node_allocator() == *__nh._M_alloc);
+    1521              :             auto __res = _M_get_insert_hint_equal_pos(__hint, __nh._M_key());
+    1522              :             if (__res.second)
+    1523              :               __ret = _M_insert_node(__res.first, __res.second, __nh._M_ptr);
+    1524              :             else
+    1525              :               __ret = _M_insert_equal_lower_node(__nh._M_ptr);
+    1526              :             __nh._M_ptr = nullptr;
+    1527              :           }
+    1528              :         return __ret;
+    1529              :       }
+    1530              : 
+    1531              :       /// Extract a node.
+    1532              :       node_type
+    1533              :       extract(const_iterator __pos)
+    1534              :       {
+    1535              :         auto __ptr = _Rb_tree_rebalance_for_erase(
+    1536              :             __pos._M_const_cast()._M_node, _M_impl._M_header);
+    1537              :         --_M_impl._M_node_count;
+    1538              :         return { static_cast<_Link_type>(__ptr), _M_get_Node_allocator() };
+    1539              :       }
+    1540              : 
+    1541              :       /// Extract a node.
+    1542              :       node_type
+    1543              :       extract(const key_type& __k)
+    1544              :       {
+    1545              :         node_type __nh;
+    1546              :         auto __pos = find(__k);
+    1547              :         if (__pos != end())
+    1548              :           __nh = extract(const_iterator(__pos));
+    1549              :         return __nh;
+    1550              :       }
+    1551              : 
+    1552              :       template<typename _Compare2>
+    1553              :         using _Compatible_tree
+    1554              :           = _Rb_tree<_Key, _Val, _KeyOfValue, _Compare2, _Alloc>;
+    1555              : 
+    1556              :       template<typename, typename>
+    1557              :         friend struct _Rb_tree_merge_helper;
+    1558              : 
+    1559              :       /// Merge from a compatible container into one with unique keys.
+    1560              :       template<typename _Compare2>
+    1561              :         void
+    1562              :         _M_merge_unique(_Compatible_tree<_Compare2>& __src) noexcept
+    1563              :         {
+    1564              :           using _Merge_helper = _Rb_tree_merge_helper<_Rb_tree, _Compare2>;
+    1565              :           for (auto __i = __src.begin(), __end = __src.end(); __i != __end;)
+    1566              :             {
+    1567              :               auto __pos = __i++;
+    1568              :               auto __res = _M_get_insert_unique_pos(_KeyOfValue()(*__pos));
+    1569              :               if (__res.second)
+    1570              :                 {
+    1571              :                   auto& __src_impl = _Merge_helper::_S_get_impl(__src);
+    1572              :                   auto __ptr = _Rb_tree_rebalance_for_erase(
+    1573              :                       __pos._M_node, __src_impl._M_header);
+    1574              :                   --__src_impl._M_node_count;
+    1575              :                   _M_insert_node(__res.first, __res.second,
+    1576              :                                  static_cast<_Link_type>(__ptr));
+    1577              :                 }
+    1578              :             }
+    1579              :         }
+    1580              : 
+    1581              :       /// Merge from a compatible container into one with equivalent keys.
+    1582              :       template<typename _Compare2>
+    1583              :         void
+    1584              :         _M_merge_equal(_Compatible_tree<_Compare2>& __src) noexcept
+    1585              :         {
+    1586              :           using _Merge_helper = _Rb_tree_merge_helper<_Rb_tree, _Compare2>;
+    1587              :           for (auto __i = __src.begin(), __end = __src.end(); __i != __end;)
+    1588              :             {
+    1589              :               auto __pos = __i++;
+    1590              :               auto __res = _M_get_insert_equal_pos(_KeyOfValue()(*__pos));
+    1591              :               if (__res.second)
+    1592              :                 {
+    1593              :                   auto& __src_impl = _Merge_helper::_S_get_impl(__src);
+    1594              :                   auto __ptr = _Rb_tree_rebalance_for_erase(
+    1595              :                       __pos._M_node, __src_impl._M_header);
+    1596              :                   --__src_impl._M_node_count;
+    1597              :                   _M_insert_node(__res.first, __res.second,
+    1598              :                                  static_cast<_Link_type>(__ptr));
+    1599              :                 }
+    1600              :             }
+    1601              :         }
+    1602              : #endif // C++17
+    1603              : 
+    1604              :       friend bool
+    1605            0 :       operator==(const _Rb_tree& __x, const _Rb_tree& __y)
+    1606              :       {
+    1607            0 :         return __x.size() == __y.size()
+    1608            0 :           && std::equal(__x.begin(), __x.end(), __y.begin());
+    1609              :       }
+    1610              : 
+    1611              : #if __cpp_lib_three_way_comparison
+    1612              :       friend auto
+    1613              :       operator<=>(const _Rb_tree& __x, const _Rb_tree& __y)
+    1614              :       {
+    1615              :         if constexpr (requires { typename __detail::__synth3way_t<_Val>; })
+    1616              :           return std::lexicographical_compare_three_way(__x.begin(), __x.end(),
+    1617              :                                                         __y.begin(), __y.end(),
+    1618              :                                                         __detail::__synth3way);
+    1619              :       }
+    1620              : #else
+    1621              :       friend bool
+    1622              :       operator<(const _Rb_tree& __x, const _Rb_tree& __y)
+    1623              :       {
+    1624              :         return std::lexicographical_compare(__x.begin(), __x.end(),
+    1625              :                                             __y.begin(), __y.end());
+    1626              :       }
+    1627              : #endif
+    1628              : 
+    1629              :     private:
+    1630              : #if __cplusplus >= 201103L
+    1631              :       // An RAII _Node handle
+    1632              :       struct _Auto_node
+    1633              :       {
+    1634              :         template<typename... _Args>
+    1635     10340000 :           _Auto_node(_Rb_tree& __t, _Args&&... __args)
+    1636     10340000 :           : _M_t(__t),
+    1637     10340000 :             _M_node(__t._M_create_node(std::forward<_Args>(__args)...))
+    1638     10340000 :           { }
+    1639              : 
+    1640     10340000 :         ~_Auto_node()
+    1641              :         {
+    1642     10340000 :           if (_M_node)
+    1643            0 :             _M_t._M_drop_node(_M_node);
+    1644     10340000 :         }
+    1645              : 
+    1646              :         _Auto_node(_Auto_node&& __n)
+    1647              :         : _M_t(__n._M_t), _M_node(__n._M_node)
+    1648              :         { __n._M_node = nullptr; }
+    1649              : 
+    1650              :         const _Key&
+    1651     10340000 :         _M_key() const
+    1652     10340000 :         { return _S_key(_M_node); }
+    1653              : 
+    1654              :         iterator
+    1655     10340000 :         _M_insert(pair<_Base_ptr, _Base_ptr> __p)
+    1656              :         {
+    1657     10340000 :           auto __it = _M_t._M_insert_node(__p.first, __p.second, _M_node);
+    1658     10340000 :           _M_node = nullptr;
+    1659     10340000 :           return __it;
+    1660              :         }
+    1661              : 
+    1662              :         iterator
+    1663              :         _M_insert_equal_lower()
+    1664              :         {
+    1665              :           auto __it = _M_t._M_insert_equal_lower_node(_M_node);
+    1666              :           _M_node = nullptr;
+    1667              :           return __it;
+    1668              :         }
+    1669              : 
+    1670              :         _Rb_tree& _M_t;
+    1671              :         _Link_type _M_node;
+    1672              :       };
+    1673              : #endif // C++11
+    1674              :     };
+    1675              : 
+    1676              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    1677              :            typename _Compare, typename _Alloc>
+    1678              :     inline void
+    1679              :     swap(_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
+    1680              :          _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
+    1681              :     { __x.swap(__y); }
+    1682              : 
+    1683              : #if __cplusplus >= 201103L
+    1684              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    1685              :            typename _Compare, typename _Alloc>
+    1686              :     void
+    1687              :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    1688              :     _M_move_data(_Rb_tree& __x, false_type)
+    1689              :     {
+    1690              :       if (_M_get_Node_allocator() == __x._M_get_Node_allocator())
+    1691              :         _M_move_data(__x, true_type());
+    1692              :       else
+    1693              :         {
+    1694              :           constexpr bool __move = !__move_if_noexcept_cond<value_type>::value;
+    1695              :           _Alloc_node __an(*this);
+    1696              :           _M_root() = _M_copy<__move>(__x, __an);
+    1697              :           if _GLIBCXX17_CONSTEXPR (__move)
+    1698              :             __x.clear();
+    1699              :         }
+    1700              :     }
+    1701              : 
+    1702              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    1703              :            typename _Compare, typename _Alloc>
+    1704              :     inline void
+    1705          224 :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    1706              :     _M_move_assign(_Rb_tree& __x, true_type)
+    1707              :     {
+    1708          224 :       clear();
+    1709          224 :       if (__x._M_root() != nullptr)
+    1710          222 :         _M_move_data(__x, true_type());
+    1711          224 :       std::__alloc_on_move(_M_get_Node_allocator(),
+    1712          224 :                            __x._M_get_Node_allocator());
+    1713          224 :     }
+    1714              : 
+    1715              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    1716              :            typename _Compare, typename _Alloc>
+    1717              :     void
+    1718              :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    1719              :     _M_move_assign(_Rb_tree& __x, false_type)
+    1720              :     {
+    1721              :       if (_M_get_Node_allocator() == __x._M_get_Node_allocator())
+    1722              :         return _M_move_assign(__x, true_type{});
+    1723              : 
+    1724              :       // Try to move each node reusing existing nodes and copying __x nodes
+    1725              :       // structure.
+    1726              :       _Reuse_or_alloc_node __roan(*this);
+    1727              :       _M_impl._M_reset();
+    1728              :       if (__x._M_root() != nullptr)
+    1729              :         {
+    1730              :           _M_root() = _M_copy<__as_rvalue>(__x, __roan);
+    1731              :           __x.clear();
+    1732              :         }
+    1733              :     }
+    1734              : 
+    1735              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    1736              :            typename _Compare, typename _Alloc>
+    1737              :     inline _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>&
+    1738          224 :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    1739              :     operator=(_Rb_tree&& __x)
+    1740              :     noexcept(_Alloc_traits::_S_nothrow_move()
+    1741              :              && is_nothrow_move_assignable<_Compare>::value)
+    1742              :     {
+    1743          224 :       _M_impl._M_key_compare = std::move(__x._M_impl._M_key_compare);
+    1744          224 :       _M_move_assign(__x, __bool_constant<_Alloc_traits::_S_nothrow_move()>());
+    1745          224 :       return *this;
+    1746              :     }
+    1747              : 
+    1748              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    1749              :            typename _Compare, typename _Alloc>
+    1750              :     template<typename _Iterator>
+    1751              :       void
+    1752              :       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    1753              :       _M_assign_unique(_Iterator __first, _Iterator __last)
+    1754              :       {
+    1755              :         _Reuse_or_alloc_node __roan(*this);
+    1756              :         _M_impl._M_reset();
+    1757              :         for (; __first != __last; ++__first)
+    1758              :           _M_insert_unique_(end(), *__first, __roan);
+    1759              :       }
+    1760              : 
+    1761              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    1762              :            typename _Compare, typename _Alloc>
+    1763              :     template<typename _Iterator>
+    1764              :       void
+    1765              :       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    1766              :       _M_assign_equal(_Iterator __first, _Iterator __last)
+    1767              :       {
+    1768              :         _Reuse_or_alloc_node __roan(*this);
+    1769              :         _M_impl._M_reset();
+    1770              :         for (; __first != __last; ++__first)
+    1771              :           _M_insert_equal_(end(), *__first, __roan);
+    1772              :       }
+    1773              : #endif
+    1774              : 
+    1775              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    1776              :            typename _Compare, typename _Alloc>
+    1777              :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>&
+    1778          644 :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    1779              :     operator=(const _Rb_tree& __x)
+    1780              :     {
+    1781          644 :       if (this != std::__addressof(__x))
+    1782              :         {
+    1783              :           // Note that _Key may be a constant type.
+    1784              : #if __cplusplus >= 201103L
+    1785          528 :           if (_Alloc_traits::_S_propagate_on_copy_assign())
+    1786              :             {
+    1787            0 :               auto& __this_alloc = this->_M_get_Node_allocator();
+    1788            0 :               auto& __that_alloc = __x._M_get_Node_allocator();
+    1789            0 :               if (!_Alloc_traits::_S_always_equal()
+    1790            0 :                   && __this_alloc != __that_alloc)
+    1791              :                 {
+    1792              :                   // Replacement allocator cannot free existing storage, we need
+    1793              :                   // to erase nodes first.
+    1794            0 :                   clear();
+    1795              :                   std::__alloc_on_copy(__this_alloc, __that_alloc);
+    1796              :                 }
+    1797              :             }
+    1798              : #endif
+    1799              : 
+    1800          528 :           _Reuse_or_alloc_node __roan(*this);
+    1801          528 :           _M_impl._M_reset();
+    1802              :           _M_impl._M_key_compare = __x._M_impl._M_key_compare;
+    1803          528 :           if (__x._M_root() != 0)
+    1804          524 :             _M_root() = _M_copy<__as_lvalue>(__x, __roan);
+    1805          528 :         }
+    1806              : 
+    1807          644 :       return *this;
+    1808              :     }
+    1809              : 
+    1810              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    1811              :            typename _Compare, typename _Alloc>
+    1812              : #if __cplusplus >= 201103L
+    1813              :     template<typename _Arg, typename _NodeGen>
+    1814              : #else
+    1815              :     template<typename _NodeGen>
+    1816              : #endif
+    1817              :       typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+    1818         2118 :       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    1819              :       _M_insert_(_Base_ptr __x, _Base_ptr __p,
+    1820              : #if __cplusplus >= 201103L
+    1821              :                  _Arg&& __v,
+    1822              : #else
+    1823              :                  const _Val& __v,
+    1824              : #endif
+    1825              :                  _NodeGen& __node_gen)
+    1826              :       {
+    1827         2118 :         bool __insert_left = (__x != 0 || __p == _M_end()
+    1828         4236 :                               || _M_impl._M_key_compare(_KeyOfValue()(__v),
+    1829              :                                                         _S_key(__p)));
+    1830              : 
+    1831         2118 :         _Link_type __z = __node_gen(_GLIBCXX_FORWARD(_Arg, __v));
+    1832              : 
+    1833         2118 :         _Rb_tree_insert_and_rebalance(__insert_left, __z, __p,
+    1834         2118 :                                       this->_M_impl._M_header);
+    1835         2118 :         ++_M_impl._M_node_count;
+    1836         2118 :         return iterator(__z);
+    1837              :       }
+    1838              : 
+    1839              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    1840              :            typename _Compare, typename _Alloc>
+    1841              : #if __cplusplus >= 201103L
+    1842              :     template<typename _Arg>
+    1843              : #endif
+    1844              :     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+    1845              :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    1846              : #if __cplusplus >= 201103L
+    1847              :     _M_insert_lower(_Base_ptr __p, _Arg&& __v)
+    1848              : #else
+    1849              :     _M_insert_lower(_Base_ptr __p, const _Val& __v)
+    1850              : #endif
+    1851              :     {
+    1852              :       bool __insert_left = (__p == _M_end()
+    1853              :                             || !_M_impl._M_key_compare(_S_key(__p),
+    1854              :                                                        _KeyOfValue()(__v)));
+    1855              : 
+    1856              :       _Link_type __z = _M_create_node(_GLIBCXX_FORWARD(_Arg, __v));
+    1857              : 
+    1858              :       _Rb_tree_insert_and_rebalance(__insert_left, __z, __p,
+    1859              :                                     this->_M_impl._M_header);
+    1860              :       ++_M_impl._M_node_count;
+    1861              :       return iterator(__z);
+    1862              :     }
+    1863              : 
+    1864              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    1865              :            typename _Compare, typename _Alloc>
+    1866              : #if __cplusplus >= 201103L
+    1867              :     template<typename _Arg>
+    1868              : #endif
+    1869              :     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+    1870              :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    1871              : #if __cplusplus >= 201103L
+    1872              :     _M_insert_equal_lower(_Arg&& __v)
+    1873              : #else
+    1874              :     _M_insert_equal_lower(const _Val& __v)
+    1875              : #endif
+    1876              :     {
+    1877              :       _Link_type __x = _M_begin();
+    1878              :       _Base_ptr __y = _M_end();
+    1879              :       while (__x != 0)
+    1880              :         {
+    1881              :           __y = __x;
+    1882              :           __x = !_M_impl._M_key_compare(_S_key(__x), _KeyOfValue()(__v)) ?
+    1883              :                 _S_left(__x) : _S_right(__x);
+    1884              :         }
+    1885              :       return _M_insert_lower(__y, _GLIBCXX_FORWARD(_Arg, __v));
+    1886              :     }
+    1887              : 
+    1888              :   template<typename _Key, typename _Val, typename _KoV,
+    1889              :            typename _Compare, typename _Alloc>
+    1890              :     template<bool _MoveValues, typename _NodeGen>
+    1891              :       typename _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>::_Link_type
+    1892     16698788 :       _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>::
+    1893              :       _M_copy(_Link_type __x, _Base_ptr __p, _NodeGen& __node_gen)
+    1894              :       {
+    1895              :         // Structural copy. __x and __p must be non-null.
+    1896     16698788 :         _Link_type __top = _M_clone_node<_MoveValues>(__x, __node_gen);
+    1897     16698788 :         __top->_M_parent = __p;
+    1898              : 
+    1899              :         __try
+    1900              :           {
+    1901     16698788 :             if (__x->_M_right)
+    1902      9103078 :               __top->_M_right =
+    1903      9103078 :                 _M_copy<_MoveValues>(_S_right(__x), __top, __node_gen);
+    1904     16698788 :             __p = __top;
+    1905     16698788 :             __x = _S_left(__x);
+    1906              : 
+    1907     30226584 :             while (__x != 0)
+    1908              :               {
+    1909     13527796 :                 _Link_type __y = _M_clone_node<_MoveValues>(__x, __node_gen);
+    1910     13527796 :                 __p->_M_left = __y;
+    1911     13527796 :                 __y->_M_parent = __p;
+    1912     13527796 :                 if (__x->_M_right)
+    1913      6004878 :                   __y->_M_right = _M_copy<_MoveValues>(_S_right(__x),
+    1914              :                                                        __y, __node_gen);
+    1915     13527796 :                 __p = __y;
+    1916     13527796 :                 __x = _S_left(__x);
+    1917              :               }
+    1918              :           }
+    1919            0 :         __catch(...)
+    1920              :           {
+    1921            0 :             _M_erase(__top);
+    1922            0 :             __throw_exception_again;
+    1923              :           }
+    1924     16698788 :         return __top;
+    1925              :       }
+    1926              : 
+    1927              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    1928              :            typename _Compare, typename _Alloc>
+    1929              :     void
+    1930     42566202 :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    1931              :     _M_erase(_Link_type __x)
+    1932              :     {
+    1933              :       // Erase without rebalancing.
+    1934     83134584 :       while (__x != 0)
+    1935              :         {
+    1936     40568382 :           _M_erase(_S_right(__x));
+    1937     40568382 :           _Link_type __y = _S_left(__x);
+    1938     40568382 :           _M_drop_node(__x);
+    1939     40568382 :           __x = __y;
+    1940              :         }
+    1941     42566202 :     }
+    1942              : 
+    1943              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    1944              :            typename _Compare, typename _Alloc>
+    1945              :     typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    1946              :                       _Compare, _Alloc>::iterator
+    1947    101997982 :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    1948              :     _M_lower_bound(_Link_type __x, _Base_ptr __y,
+    1949              :                    const _Key& __k)
+    1950              :     {
+    1951    731871906 :       while (__x != 0)
+    1952    629873924 :         if (!_M_impl._M_key_compare(_S_key(__x), __k))
+    1953    248183962 :           __y = __x, __x = _S_left(__x);
+    1954              :         else
+    1955    381689962 :           __x = _S_right(__x);
+    1956    101997982 :       return iterator(__y);
+    1957              :     }
+    1958              : 
+    1959              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    1960              :            typename _Compare, typename _Alloc>
+    1961              :     typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    1962              :                       _Compare, _Alloc>::const_iterator
+    1963        27720 :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    1964              :     _M_lower_bound(_Const_Link_type __x, _Const_Base_ptr __y,
+    1965              :                    const _Key& __k) const
+    1966              :     {
+    1967       205096 :       while (__x != 0)
+    1968       177376 :         if (!_M_impl._M_key_compare(_S_key(__x), __k))
+    1969        86644 :           __y = __x, __x = _S_left(__x);
+    1970              :         else
+    1971        90732 :           __x = _S_right(__x);
+    1972        27720 :       return const_iterator(__y);
+    1973              :     }
+    1974              : 
+    1975              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    1976              :            typename _Compare, typename _Alloc>
+    1977              :     typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    1978              :                       _Compare, _Alloc>::iterator
+    1979          106 :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    1980              :     _M_upper_bound(_Link_type __x, _Base_ptr __y,
+    1981              :                    const _Key& __k)
+    1982              :     {
+    1983          138 :       while (__x != 0)
+    1984           32 :         if (_M_impl._M_key_compare(__k, _S_key(__x)))
+    1985           32 :           __y = __x, __x = _S_left(__x);
+    1986              :         else
+    1987            0 :           __x = _S_right(__x);
+    1988          106 :       return iterator(__y);
+    1989              :     }
+    1990              : 
+    1991              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    1992              :            typename _Compare, typename _Alloc>
+    1993              :     typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    1994              :                       _Compare, _Alloc>::const_iterator
+    1995              :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    1996              :     _M_upper_bound(_Const_Link_type __x, _Const_Base_ptr __y,
+    1997              :                    const _Key& __k) const
+    1998              :     {
+    1999              :       while (__x != 0)
+    2000              :         if (_M_impl._M_key_compare(__k, _S_key(__x)))
+    2001              :           __y = __x, __x = _S_left(__x);
+    2002              :         else
+    2003              :           __x = _S_right(__x);
+    2004              :       return const_iterator(__y);
+    2005              :     }
+    2006              : 
+    2007              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2008              :            typename _Compare, typename _Alloc>
+    2009              :     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    2010              :                            _Compare, _Alloc>::iterator,
+    2011              :          typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    2012              :                            _Compare, _Alloc>::iterator>
+    2013          106 :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2014              :     equal_range(const _Key& __k)
+    2015              :     {
+    2016          106 :       _Link_type __x = _M_begin();
+    2017          106 :       _Base_ptr __y = _M_end();
+    2018          152 :       while (__x != 0)
+    2019              :         {
+    2020          152 :           if (_M_impl._M_key_compare(_S_key(__x), __k))
+    2021           24 :             __x = _S_right(__x);
+    2022          128 :           else if (_M_impl._M_key_compare(__k, _S_key(__x)))
+    2023           22 :             __y = __x, __x = _S_left(__x);
+    2024              :           else
+    2025              :             {
+    2026          106 :               _Link_type __xu(__x);
+    2027          106 :               _Base_ptr __yu(__y);
+    2028          106 :               __y = __x, __x = _S_left(__x);
+    2029          106 :               __xu = _S_right(__xu);
+    2030          106 :               return pair<iterator,
+    2031          106 :                           iterator>(_M_lower_bound(__x, __y, __k),
+    2032          212 :                                     _M_upper_bound(__xu, __yu, __k));
+    2033              :             }
+    2034              :         }
+    2035            0 :       return pair<iterator, iterator>(iterator(__y),
+    2036            0 :                                       iterator(__y));
+    2037              :     }
+    2038              : 
+    2039              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2040              :            typename _Compare, typename _Alloc>
+    2041              :     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    2042              :                            _Compare, _Alloc>::const_iterator,
+    2043              :          typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    2044              :                            _Compare, _Alloc>::const_iterator>
+    2045              :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2046              :     equal_range(const _Key& __k) const
+    2047              :     {
+    2048              :       _Const_Link_type __x = _M_begin();
+    2049              :       _Const_Base_ptr __y = _M_end();
+    2050              :       while (__x != 0)
+    2051              :         {
+    2052              :           if (_M_impl._M_key_compare(_S_key(__x), __k))
+    2053              :             __x = _S_right(__x);
+    2054              :           else if (_M_impl._M_key_compare(__k, _S_key(__x)))
+    2055              :             __y = __x, __x = _S_left(__x);
+    2056              :           else
+    2057              :             {
+    2058              :               _Const_Link_type __xu(__x);
+    2059              :               _Const_Base_ptr __yu(__y);
+    2060              :               __y = __x, __x = _S_left(__x);
+    2061              :               __xu = _S_right(__xu);
+    2062              :               return pair<const_iterator,
+    2063              :                           const_iterator>(_M_lower_bound(__x, __y, __k),
+    2064              :                                           _M_upper_bound(__xu, __yu, __k));
+    2065              :             }
+    2066              :         }
+    2067              :       return pair<const_iterator, const_iterator>(const_iterator(__y),
+    2068              :                                                   const_iterator(__y));
+    2069              :     }
+    2070              : 
+    2071              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2072              :            typename _Compare, typename _Alloc>
+    2073              :     void
+    2074              :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2075              :     swap(_Rb_tree& __t)
+    2076              :     _GLIBCXX_NOEXCEPT_IF(__is_nothrow_swappable<_Compare>::value)
+    2077              :     {
+    2078              :       if (_M_root() == 0)
+    2079              :         {
+    2080              :           if (__t._M_root() != 0)
+    2081              :             _M_impl._M_move_data(__t._M_impl);
+    2082              :         }
+    2083              :       else if (__t._M_root() == 0)
+    2084              :         __t._M_impl._M_move_data(_M_impl);
+    2085              :       else
+    2086              :         {
+    2087              :           std::swap(_M_root(),__t._M_root());
+    2088              :           std::swap(_M_leftmost(),__t._M_leftmost());
+    2089              :           std::swap(_M_rightmost(),__t._M_rightmost());
+    2090              : 
+    2091              :           _M_root()->_M_parent = _M_end();
+    2092              :           __t._M_root()->_M_parent = __t._M_end();
+    2093              :           std::swap(this->_M_impl._M_node_count, __t._M_impl._M_node_count);
+    2094              :         }
+    2095              :       // No need to swap header's color as it does not change.
+    2096              :       std::swap(this->_M_impl._M_key_compare, __t._M_impl._M_key_compare);
+    2097              : 
+    2098              :       _Alloc_traits::_S_on_swap(_M_get_Node_allocator(),
+    2099              :                                 __t._M_get_Node_allocator());
+    2100              :     }
+    2101              : 
+    2102              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2103              :            typename _Compare, typename _Alloc>
+    2104              :     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    2105              :                            _Compare, _Alloc>::_Base_ptr,
+    2106              :          typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    2107              :                            _Compare, _Alloc>::_Base_ptr>
+    2108       405348 :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2109              :     _M_get_insert_unique_pos(const key_type& __k)
+    2110              :     {
+    2111              :       typedef pair<_Base_ptr, _Base_ptr> _Res;
+    2112       405348 :       _Link_type __x = _M_begin();
+    2113       405348 :       _Base_ptr __y = _M_end();
+    2114       405348 :       bool __comp = true;
+    2115       408620 :       while (__x != 0)
+    2116              :         {
+    2117         3272 :           __y = __x;
+    2118         3272 :           __comp = _M_impl._M_key_compare(__k, _S_key(__x));
+    2119         3272 :           __x = __comp ? _S_left(__x) : _S_right(__x);
+    2120              :         }
+    2121       405348 :       iterator __j = iterator(__y);
+    2122       405348 :       if (__comp)
+    2123              :         {
+    2124       404996 :           if (__j == begin())
+    2125       404700 :             return _Res(__x, __y);
+    2126              :           else
+    2127          296 :             --__j;
+    2128              :         }
+    2129          648 :       if (_M_impl._M_key_compare(_S_key(__j._M_node), __k))
+    2130          648 :         return _Res(__x, __y);
+    2131            0 :       return _Res(__j._M_node, 0);
+    2132              :     }
+    2133              : 
+    2134              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2135              :            typename _Compare, typename _Alloc>
+    2136              :     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    2137              :                            _Compare, _Alloc>::_Base_ptr,
+    2138              :          typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    2139              :                            _Compare, _Alloc>::_Base_ptr>
+    2140              :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2141              :     _M_get_insert_equal_pos(const key_type& __k)
+    2142              :     {
+    2143              :       typedef pair<_Base_ptr, _Base_ptr> _Res;
+    2144              :       _Link_type __x = _M_begin();
+    2145              :       _Base_ptr __y = _M_end();
+    2146              :       while (__x != 0)
+    2147              :         {
+    2148              :           __y = __x;
+    2149              :           __x = _M_impl._M_key_compare(__k, _S_key(__x)) ?
+    2150              :                 _S_left(__x) : _S_right(__x);
+    2151              :         }
+    2152              :       return _Res(__x, __y);
+    2153              :     }
+    2154              : 
+    2155              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2156              :            typename _Compare, typename _Alloc>
+    2157              : #if __cplusplus >= 201103L
+    2158              :     template<typename _Arg>
+    2159              : #endif
+    2160              :     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    2161              :                            _Compare, _Alloc>::iterator, bool>
+    2162              :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2163              : #if __cplusplus >= 201103L
+    2164              :     _M_insert_unique(_Arg&& __v)
+    2165              : #else
+    2166              :     _M_insert_unique(const _Val& __v)
+    2167              : #endif
+    2168              :     {
+    2169              :       typedef pair<iterator, bool> _Res;
+    2170              :       pair<_Base_ptr, _Base_ptr> __res
+    2171              :         = _M_get_insert_unique_pos(_KeyOfValue()(__v));
+    2172              : 
+    2173              :       if (__res.second)
+    2174              :         {
+    2175              :           _Alloc_node __an(*this);
+    2176              :           return _Res(_M_insert_(__res.first, __res.second,
+    2177              :                                  _GLIBCXX_FORWARD(_Arg, __v), __an),
+    2178              :                       true);
+    2179              :         }
+    2180              : 
+    2181              :       return _Res(iterator(__res.first), false);
+    2182              :     }
+    2183              : 
+    2184              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2185              :            typename _Compare, typename _Alloc>
+    2186              : #if __cplusplus >= 201103L
+    2187              :     template<typename _Arg>
+    2188              : #endif
+    2189              :     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+    2190              :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2191              : #if __cplusplus >= 201103L
+    2192              :     _M_insert_equal(_Arg&& __v)
+    2193              : #else
+    2194              :     _M_insert_equal(const _Val& __v)
+    2195              : #endif
+    2196              :     {
+    2197              :       pair<_Base_ptr, _Base_ptr> __res
+    2198              :         = _M_get_insert_equal_pos(_KeyOfValue()(__v));
+    2199              :       _Alloc_node __an(*this);
+    2200              :       return _M_insert_(__res.first, __res.second,
+    2201              :                         _GLIBCXX_FORWARD(_Arg, __v), __an);
+    2202              :     }
+    2203              : 
+    2204              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2205              :            typename _Compare, typename _Alloc>
+    2206              :     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    2207              :                            _Compare, _Alloc>::_Base_ptr,
+    2208              :          typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    2209              :                            _Compare, _Alloc>::_Base_ptr>
+    2210     10342118 :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2211              :     _M_get_insert_hint_unique_pos(const_iterator __position,
+    2212              :                                   const key_type& __k)
+    2213              :     {
+    2214     10342118 :       iterator __pos = __position._M_const_cast();
+    2215              :       typedef pair<_Base_ptr, _Base_ptr> _Res;
+    2216              : 
+    2217              :       // end()
+    2218     10342118 :       if (__pos._M_node == _M_end())
+    2219              :         {
+    2220      1648488 :           if (size() > 0
+    2221      1648488 :               && _M_impl._M_key_compare(_S_key(_M_rightmost()), __k))
+    2222      1243140 :             return _Res(0, _M_rightmost());
+    2223              :           else
+    2224       405348 :             return _M_get_insert_unique_pos(__k);
+    2225              :         }
+    2226      8693630 :       else if (_M_impl._M_key_compare(__k, _S_key(__pos._M_node)))
+    2227              :         {
+    2228              :           // First, try before...
+    2229      8693630 :           iterator __before = __pos;
+    2230      8693630 :           if (__pos._M_node == _M_leftmost()) // begin()
+    2231       998150 :             return _Res(_M_leftmost(), _M_leftmost());
+    2232      7695480 :           else if (_M_impl._M_key_compare(_S_key((--__before)._M_node), __k))
+    2233              :             {
+    2234      7695480 :               if (_S_right(__before._M_node) == 0)
+    2235      5702940 :                 return _Res(0, __before._M_node);
+    2236              :               else
+    2237      1992540 :                 return _Res(__pos._M_node, __pos._M_node);
+    2238              :             }
+    2239              :           else
+    2240            0 :             return _M_get_insert_unique_pos(__k);
+    2241              :         }
+    2242            0 :       else if (_M_impl._M_key_compare(_S_key(__pos._M_node), __k))
+    2243              :         {
+    2244              :           // ... then try after.
+    2245            0 :           iterator __after = __pos;
+    2246            0 :           if (__pos._M_node == _M_rightmost())
+    2247            0 :             return _Res(0, _M_rightmost());
+    2248            0 :           else if (_M_impl._M_key_compare(__k, _S_key((++__after)._M_node)))
+    2249              :             {
+    2250            0 :               if (_S_right(__pos._M_node) == 0)
+    2251            0 :                 return _Res(0, __pos._M_node);
+    2252              :               else
+    2253            0 :                 return _Res(__after._M_node, __after._M_node);
+    2254              :             }
+    2255              :           else
+    2256            0 :             return _M_get_insert_unique_pos(__k);
+    2257              :         }
+    2258              :       else
+    2259              :         // Equivalent keys.
+    2260            0 :         return _Res(__pos._M_node, 0);
+    2261              :     }
+    2262              : 
+    2263              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2264              :            typename _Compare, typename _Alloc>
+    2265              : #if __cplusplus >= 201103L
+    2266              :     template<typename _Arg, typename _NodeGen>
+    2267              : #else
+    2268              :     template<typename _NodeGen>
+    2269              : #endif
+    2270              :       typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+    2271         2118 :       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2272              :       _M_insert_unique_(const_iterator __position,
+    2273              : #if __cplusplus >= 201103L
+    2274              :                         _Arg&& __v,
+    2275              : #else
+    2276              :                         const _Val& __v,
+    2277              : #endif
+    2278              :                         _NodeGen& __node_gen)
+    2279              :     {
+    2280              :       pair<_Base_ptr, _Base_ptr> __res
+    2281         2118 :         = _M_get_insert_hint_unique_pos(__position, _KeyOfValue()(__v));
+    2282              : 
+    2283         2118 :       if (__res.second)
+    2284         2118 :         return _M_insert_(__res.first, __res.second,
+    2285              :                           _GLIBCXX_FORWARD(_Arg, __v),
+    2286         2118 :                           __node_gen);
+    2287            0 :       return iterator(__res.first);
+    2288              :     }
+    2289              : 
+    2290              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2291              :            typename _Compare, typename _Alloc>
+    2292              :     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    2293              :                            _Compare, _Alloc>::_Base_ptr,
+    2294              :          typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    2295              :                            _Compare, _Alloc>::_Base_ptr>
+    2296              :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2297              :     _M_get_insert_hint_equal_pos(const_iterator __position, const key_type& __k)
+    2298              :     {
+    2299              :       iterator __pos = __position._M_const_cast();
+    2300              :       typedef pair<_Base_ptr, _Base_ptr> _Res;
+    2301              : 
+    2302              :       // end()
+    2303              :       if (__pos._M_node == _M_end())
+    2304              :         {
+    2305              :           if (size() > 0
+    2306              :               && !_M_impl._M_key_compare(__k, _S_key(_M_rightmost())))
+    2307              :             return _Res(0, _M_rightmost());
+    2308              :           else
+    2309              :             return _M_get_insert_equal_pos(__k);
+    2310              :         }
+    2311              :       else if (!_M_impl._M_key_compare(_S_key(__pos._M_node), __k))
+    2312              :         {
+    2313              :           // First, try before...
+    2314              :           iterator __before = __pos;
+    2315              :           if (__pos._M_node == _M_leftmost()) // begin()
+    2316              :             return _Res(_M_leftmost(), _M_leftmost());
+    2317              :           else if (!_M_impl._M_key_compare(__k, _S_key((--__before)._M_node)))
+    2318              :             {
+    2319              :               if (_S_right(__before._M_node) == 0)
+    2320              :                 return _Res(0, __before._M_node);
+    2321              :               else
+    2322              :                 return _Res(__pos._M_node, __pos._M_node);
+    2323              :             }
+    2324              :           else
+    2325              :             return _M_get_insert_equal_pos(__k);
+    2326              :         }
+    2327              :       else
+    2328              :         {
+    2329              :           // ... then try after.
+    2330              :           iterator __after = __pos;
+    2331              :           if (__pos._M_node == _M_rightmost())
+    2332              :             return _Res(0, _M_rightmost());
+    2333              :           else if (!_M_impl._M_key_compare(_S_key((++__after)._M_node), __k))
+    2334              :             {
+    2335              :               if (_S_right(__pos._M_node) == 0)
+    2336              :                 return _Res(0, __pos._M_node);
+    2337              :               else
+    2338              :                 return _Res(__after._M_node, __after._M_node);
+    2339              :             }
+    2340              :           else
+    2341              :             return _Res(0, 0);
+    2342              :         }
+    2343              :     }
+    2344              : 
+    2345              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2346              :            typename _Compare, typename _Alloc>
+    2347              : #if __cplusplus >= 201103L
+    2348              :     template<typename _Arg, typename _NodeGen>
+    2349              : #else
+    2350              :     template<typename _NodeGen>
+    2351              : #endif
+    2352              :       typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+    2353              :       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2354              :       _M_insert_equal_(const_iterator __position,
+    2355              : #if __cplusplus >= 201103L
+    2356              :                        _Arg&& __v,
+    2357              : #else
+    2358              :                        const _Val& __v,
+    2359              : #endif
+    2360              :                        _NodeGen& __node_gen)
+    2361              :       {
+    2362              :         pair<_Base_ptr, _Base_ptr> __res
+    2363              :           = _M_get_insert_hint_equal_pos(__position, _KeyOfValue()(__v));
+    2364              : 
+    2365              :         if (__res.second)
+    2366              :           return _M_insert_(__res.first, __res.second,
+    2367              :                             _GLIBCXX_FORWARD(_Arg, __v),
+    2368              :                             __node_gen);
+    2369              : 
+    2370              :         return _M_insert_equal_lower(_GLIBCXX_FORWARD(_Arg, __v));
+    2371              :       }
+    2372              : 
+    2373              : #if __cplusplus >= 201103L
+    2374              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2375              :            typename _Compare, typename _Alloc>
+    2376              :     auto
+    2377     10340000 :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2378              :     _M_insert_node(_Base_ptr __x, _Base_ptr __p, _Link_type __z)
+    2379              :     -> iterator
+    2380              :     {
+    2381      7349310 :       bool __insert_left = (__x != 0 || __p == _M_end()
+    2382     17689310 :                             || _M_impl._M_key_compare(_S_key(__z),
+    2383              :                                                       _S_key(__p)));
+    2384              : 
+    2385     10340000 :       _Rb_tree_insert_and_rebalance(__insert_left, __z, __p,
+    2386     10340000 :                                     this->_M_impl._M_header);
+    2387     10340000 :       ++_M_impl._M_node_count;
+    2388     10340000 :       return iterator(__z);
+    2389              :     }
+    2390              : 
+    2391              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2392              :            typename _Compare, typename _Alloc>
+    2393              :     auto
+    2394              :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2395              :     _M_insert_lower_node(_Base_ptr __p, _Link_type __z)
+    2396              :     -> iterator
+    2397              :     {
+    2398              :       bool __insert_left = (__p == _M_end()
+    2399              :                             || !_M_impl._M_key_compare(_S_key(__p),
+    2400              :                                                        _S_key(__z)));
+    2401              : 
+    2402              :       _Rb_tree_insert_and_rebalance(__insert_left, __z, __p,
+    2403              :                                     this->_M_impl._M_header);
+    2404              :       ++_M_impl._M_node_count;
+    2405              :       return iterator(__z);
+    2406              :     }
+    2407              : 
+    2408              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2409              :            typename _Compare, typename _Alloc>
+    2410              :     auto
+    2411              :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2412              :     _M_insert_equal_lower_node(_Link_type __z)
+    2413              :     -> iterator
+    2414              :     {
+    2415              :       _Link_type __x = _M_begin();
+    2416              :       _Base_ptr __y = _M_end();
+    2417              :       while (__x != 0)
+    2418              :         {
+    2419              :           __y = __x;
+    2420              :           __x = !_M_impl._M_key_compare(_S_key(__x), _S_key(__z)) ?
+    2421              :                 _S_left(__x) : _S_right(__x);
+    2422              :         }
+    2423              :       return _M_insert_lower_node(__y, __z);
+    2424              :     }
+    2425              : 
+    2426              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2427              :            typename _Compare, typename _Alloc>
+    2428              :     template<typename... _Args>
+    2429              :       auto
+    2430              :       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2431              :       _M_emplace_unique(_Args&&... __args)
+    2432              :       -> pair<iterator, bool>
+    2433              :       {
+    2434              :         _Auto_node __z(*this, std::forward<_Args>(__args)...);
+    2435              :         auto __res = _M_get_insert_unique_pos(__z._M_key());
+    2436              :         if (__res.second)
+    2437              :           return {__z._M_insert(__res), true};
+    2438              :         return {iterator(__res.first), false};
+    2439              :       }
+    2440              : 
+    2441              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2442              :            typename _Compare, typename _Alloc>
+    2443              :     template<typename... _Args>
+    2444              :       auto
+    2445              :       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2446              :       _M_emplace_equal(_Args&&... __args)
+    2447              :       -> iterator
+    2448              :       {
+    2449              :         _Auto_node __z(*this, std::forward<_Args>(__args)...);
+    2450              :         auto __res = _M_get_insert_equal_pos(__z._M_key());
+    2451              :         return __z._M_insert(__res);
+    2452              :       }
+    2453              : 
+    2454              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2455              :            typename _Compare, typename _Alloc>
+    2456              :     template<typename... _Args>
+    2457              :       auto
+    2458     10340000 :       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2459              :       _M_emplace_hint_unique(const_iterator __pos, _Args&&... __args)
+    2460              :       -> iterator
+    2461              :       {
+    2462     10340000 :         _Auto_node __z(*this, std::forward<_Args>(__args)...);
+    2463     10340000 :         auto __res = _M_get_insert_hint_unique_pos(__pos, __z._M_key());
+    2464     10340000 :         if (__res.second)
+    2465     10340000 :           return __z._M_insert(__res);
+    2466            0 :         return iterator(__res.first);
+    2467     10340000 :       }
+    2468              : 
+    2469              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2470              :            typename _Compare, typename _Alloc>
+    2471              :     template<typename... _Args>
+    2472              :       auto
+    2473              :       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2474              :       _M_emplace_hint_equal(const_iterator __pos, _Args&&... __args)
+    2475              :       -> iterator
+    2476              :       {
+    2477              :         _Auto_node __z(*this, std::forward<_Args>(__args)...);
+    2478              :         auto __res = _M_get_insert_hint_equal_pos(__pos, __z._M_key());
+    2479              :         if (__res.second)
+    2480              :           return __z._M_insert(__res);
+    2481              :         return __z._M_insert_equal_lower();
+    2482              :       }
+    2483              : #endif
+    2484              : 
+    2485              : 
+    2486              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2487              :            typename _Compare, typename _Alloc>
+    2488              :     void
+    2489           68 :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2490              :     _M_erase_aux(const_iterator __position)
+    2491              :     {
+    2492              :       _Link_type __y =
+    2493              :         static_cast<_Link_type>(_Rb_tree_rebalance_for_erase
+    2494           68 :                                 (const_cast<_Base_ptr>(__position._M_node),
+    2495           68 :                                  this->_M_impl._M_header));
+    2496           68 :       _M_drop_node(__y);
+    2497           68 :       --_M_impl._M_node_count;
+    2498           68 :     }
+    2499              : 
+    2500              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2501              :            typename _Compare, typename _Alloc>
+    2502              :     void
+    2503          106 :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2504              :     _M_erase_aux(const_iterator __first, const_iterator __last)
+    2505              :     {
+    2506          106 :       if (__first == begin() && __last == end())
+    2507           38 :         clear();
+    2508              :       else
+    2509          136 :         while (__first != __last)
+    2510           68 :           _M_erase_aux(__first++);
+    2511          106 :     }
+    2512              : 
+    2513              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2514              :            typename _Compare, typename _Alloc>
+    2515              :     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type
+    2516          106 :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2517              :     erase(const _Key& __x)
+    2518              :     {
+    2519          106 :       pair<iterator, iterator> __p = equal_range(__x);
+    2520          106 :       const size_type __old_size = size();
+    2521          106 :       _M_erase_aux(__p.first, __p.second);
+    2522          212 :       return __old_size - size();
+    2523              :     }
+    2524              : 
+    2525              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2526              :            typename _Compare, typename _Alloc>
+    2527              :     typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    2528              :                       _Compare, _Alloc>::iterator
+    2529        77490 :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2530              :     find(const _Key& __k)
+    2531              :     {
+    2532        77490 :       iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k);
+    2533       154980 :       return (__j == end()
+    2534        75422 :               || _M_impl._M_key_compare(__k,
+    2535       230402 :                                         _S_key(__j._M_node))) ? end() : __j;
+    2536              :     }
+    2537              : 
+    2538              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2539              :            typename _Compare, typename _Alloc>
+    2540              :     typename _Rb_tree<_Key, _Val, _KeyOfValue,
+    2541              :                       _Compare, _Alloc>::const_iterator
+    2542        13526 :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2543              :     find(const _Key& __k) const
+    2544              :     {
+    2545        13526 :       const_iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k);
+    2546        27052 :       return (__j == end()
+    2547        13526 :               || _M_impl._M_key_compare(__k,
+    2548        40578 :                                         _S_key(__j._M_node))) ? end() : __j;
+    2549              :     }
+    2550              : 
+    2551              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2552              :            typename _Compare, typename _Alloc>
+    2553              :     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type
+    2554              :     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+    2555              :     count(const _Key& __k) const
+    2556              :     {
+    2557              :       pair<const_iterator, const_iterator> __p = equal_range(__k);
+    2558              :       const size_type __n = std::distance(__p.first, __p.second);
+    2559              :       return __n;
+    2560              :     }
+    2561              : 
+    2562              :   _GLIBCXX_PURE unsigned int
+    2563              :   _Rb_tree_black_count(const _Rb_tree_node_base* __node,
+    2564              :                        const _Rb_tree_node_base* __root) throw ();
+    2565              : 
+    2566              :   template<typename _Key, typename _Val, typename _KeyOfValue,
+    2567              :            typename _Compare, typename _Alloc>
+    2568              :     bool
+    2569              :     _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::__rb_verify() const
+    2570              :     {
+    2571              :       if (_M_impl._M_node_count == 0 || begin() == end())
+    2572              :         return _M_impl._M_node_count == 0 && begin() == end()
+    2573              :                && this->_M_impl._M_header._M_left == _M_end()
+    2574              :                && this->_M_impl._M_header._M_right == _M_end();
+    2575              : 
+    2576              :       unsigned int __len = _Rb_tree_black_count(_M_leftmost(), _M_root());
+    2577              :       for (const_iterator __it = begin(); __it != end(); ++__it)
+    2578              :         {
+    2579              :           _Const_Link_type __x = static_cast<_Const_Link_type>(__it._M_node);
+    2580              :           _Const_Link_type __L = _S_left(__x);
+    2581              :           _Const_Link_type __R = _S_right(__x);
+    2582              : 
+    2583              :           if (__x->_M_color == _S_red)
+    2584              :             if ((__L && __L->_M_color == _S_red)
+    2585              :                 || (__R && __R->_M_color == _S_red))
+    2586              :               return false;
+    2587              : 
+    2588              :           if (__L && _M_impl._M_key_compare(_S_key(__x), _S_key(__L)))
+    2589              :             return false;
+    2590              :           if (__R && _M_impl._M_key_compare(_S_key(__R), _S_key(__x)))
+    2591              :             return false;
+    2592              : 
+    2593              :           if (!__L && !__R && _Rb_tree_black_count(__x, _M_root()) != __len)
+    2594              :             return false;
+    2595              :         }
+    2596              : 
+    2597              :       if (_M_leftmost() != _Rb_tree_node_base::_S_minimum(_M_root()))
+    2598              :         return false;
+    2599              :       if (_M_rightmost() != _Rb_tree_node_base::_S_maximum(_M_root()))
+    2600              :         return false;
+    2601              :       return true;
+    2602              :     }
+    2603              : 
+    2604              : #if __cplusplus > 201402L
+    2605              :   // Allow access to internals of compatible _Rb_tree specializations.
+    2606              :   template<typename _Key, typename _Val, typename _Sel, typename _Cmp1,
+    2607              :            typename _Alloc, typename _Cmp2>
+    2608              :     struct _Rb_tree_merge_helper<_Rb_tree<_Key, _Val, _Sel, _Cmp1, _Alloc>,
+    2609              :                                  _Cmp2>
+    2610              :     {
+    2611              :     private:
+    2612              :       friend class _Rb_tree<_Key, _Val, _Sel, _Cmp1, _Alloc>;
+    2613              : 
+    2614              :       static auto&
+    2615              :       _S_get_impl(_Rb_tree<_Key, _Val, _Sel, _Cmp2, _Alloc>& __tree)
+    2616              :       { return __tree._M_impl; }
+    2617              :     };
+    2618              : #endif // C++17
+    2619              : 
+    2620              : _GLIBCXX_END_NAMESPACE_VERSION
+    2621              : } // namespace
+    2622              : 
+    2623              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_uninitialized.h.func-c.html b/html/usr/include/c++/13/bits/stl_uninitialized.h.func-c.html new file mode 100644 index 0000000..7d8fd7a --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_uninitialized.h.func-c.html @@ -0,0 +1,2154 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_uninitialized.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_uninitialized.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:88.5 %7869
Test Date:2024-04-30 13:17:26Functions:70.0 %277194
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt22__uninitialized_fill_nILb0EE15__uninit_fill_nIPSt6vectorIdSaIdEEmS4_EET_S6_T0_RKT1_366
_ZNSt22__uninitialized_fill_nILb0EE15__uninit_fill_nIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEmSE_EET_SG_T0_RKT1_0
_ZNSt22__uninitialized_fill_nILb0EE15__uninit_fill_nIPSt6vectorIdSaIdEEmS4_EET_S6_T0_RKT1_18
_ZNSt22__uninitialized_fill_nILb0EE15__uninit_fill_nIPSt6vectorIiSaIiEEmS4_EET_S6_T0_RKT1_130
_ZNSt22__uninitialized_fill_nILb0EE15__uninit_fill_nIPSt6vectorIfSaIfEEmS4_EET_S6_T0_RKT1_218
_ZSt18__do_uninit_fill_nIPSt6vectorIdSaIdEEmS2_ET_S4_T0_RKT1_366
_ZSt18__do_uninit_fill_nIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEmSC_ET_SE_T0_RKT1_0
_ZSt18__do_uninit_fill_nIPSt6vectorIdSaIdEEmS2_ET_S4_T0_RKT1_18
_ZSt18__do_uninit_fill_nIPSt6vectorIiSaIiEEmS2_ET_S4_T0_RKT1_130
_ZSt18__do_uninit_fill_nIPSt6vectorIfSaIfEEmS2_ET_S4_T0_RKT1_218
_ZSt22__uninitialized_move_aIPiS0_SaIiEET0_T_S3_S2_RT1_402
_ZSt22__uninitialized_move_aIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_SaIS5_EET0_T_S9_S8_RT1_158
_ZSt22__uninitialized_move_aIPiS0_SaIiEET0_T_S3_S2_RT1_244
_ZNSt27__uninitialized_default_n_1ILb0EE18__uninit_default_nIPSt6vectorIiSaIiEEmEET_S6_T0_912
_ZNSt27__uninitialized_default_n_1ILb0EE18__uninit_default_nIPSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEmEET_SG_T0_0
_ZNSt27__uninitialized_default_n_1ILb0EE18__uninit_default_nIPSt6vectorIiSaIiEEmEET_S6_T0_250
_ZNSt27__uninitialized_default_n_1ILb0EE18__uninit_default_nIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmEET_S9_T0_662
_ZSt34__uninitialized_move_if_noexcept_aIPiS0_SaIiEET0_T_S3_S2_RT1_1892
_ZSt34__uninitialized_move_if_noexcept_aIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_SaIS5_EET0_T_S9_S8_RT1_380
_ZSt34__uninitialized_move_if_noexcept_aIPiS0_SaIiEET0_T_S3_S2_RT1_1512
_ZNSt27__uninitialized_default_n_1ILb1EE18__uninit_default_nIPdmEET_S3_T0_3598
_ZNSt27__uninitialized_default_n_1ILb1EE18__uninit_default_nIPdmEET_S3_T0_0
_ZNSt27__uninitialized_default_n_1ILb1EE18__uninit_default_nIPfmEET_S3_T0_218
_ZNSt27__uninitialized_default_n_1ILb1EE18__uninit_default_nIPimEET_S3_T0_3380
_ZSt25__uninitialized_default_nIPdmET_S1_T0_4510
_ZSt25__uninitialized_default_nIPSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEmET_SE_T0_0
_ZSt25__uninitialized_default_nIPdmET_S1_T0_0
_ZSt25__uninitialized_default_nIPfmET_S1_T0_218
_ZSt25__uninitialized_default_nIPSt6vectorIiSaIiEEmET_S4_T0_250
_ZSt25__uninitialized_default_nIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmET_S7_T0_662
_ZSt25__uninitialized_default_nIPimET_S1_T0_3380
_ZSt27__uninitialized_default_n_aIPdmdET_S1_T0_RSaIT1_E4510
_ZSt27__uninitialized_default_n_aIPSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEmSC_ET_SE_T0_RSaIT1_E0
_ZSt27__uninitialized_default_n_aIPdmdET_S1_T0_RSaIT1_E0
_ZSt27__uninitialized_default_n_aIPfmfET_S1_T0_RSaIT1_E218
_ZSt27__uninitialized_default_n_aIPSt6vectorIiSaIiEEmS2_ET_S4_T0_RSaIT1_E250
_ZSt27__uninitialized_default_n_aIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmS5_ET_S7_T0_RSaIT1_E662
_ZSt27__uninitialized_default_n_aIPimiET_S1_T0_RSaIT1_E3380
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKSt4pairIiiEPS3_EET0_T_S8_S7_5256
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS5_14adl_serializerES8_IhSaIhEEvEES8_ISI_SaISI_EEEEPSI_EET0_T_SQ_SP_0
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS7_SaIS7_EEEEPS7_EET0_T_SG_SF_0
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS3_IPKcNS4_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISE_SaISE_EEEEPSE_EET0_T_SN_SM_0
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairIccESt6vectorIS5_SaIS5_EEEEPS5_EET0_T_SE_SD_0
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES4_IS6_SaIS6_EEEEPS6_EET0_T_SE_SD_0
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESF_EET0_T_SH_SG_0
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPSt6vectorIfSaIfEES5_EET0_T_S7_S6_0
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKPKcPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEET0_T_SE_SD_4
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_EPS9_EET0_T_SE_SD_8
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEPS9_EET0_T_SE_SD_8
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKSt6vectorIiSaIiEEPS4_EET0_T_S9_S8_8
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyINSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEEPS9_EET0_T_SD_SC_10
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_EET0_T_SA_S9_32
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKSt6vectorIdSaIdEEPS4_EET0_T_S9_S8_36
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIdSaIdEES4_IS6_SaIS6_EEEEPS6_EET0_T_SE_SD_64
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKN8nlohmann16json_abi_v3_11_36detail8json_refINS3_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES8_IhSaIhEEvEEEEPSI_EET0_T_SO_SN_114
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairIfS4_IiiEESt6vectorIS6_SaIS6_EEEEPS6_EET0_T_SF_SE_116
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_ESt6vectorISB_SaISB_EEEEPSB_EET0_T_SK_SJ_212
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKSt4pairIiiEPS3_EET0_T_S8_S7_278
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS7_EET0_T_SC_SB_330
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_SaIS9_EEEESA_EET0_T_SG_SF_348
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS5_SaIS5_EEEEPS5_EET0_T_SE_SD_512
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyISt13move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEES9_EET0_T_SC_SB_538
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_SaIS9_EEEEPS9_EET0_T_SI_SH_2638
_ZSt16__do_uninit_copyIPKSt4pairIiiEPS1_ET0_T_S6_S5_5256
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEES6_ISG_SaISG_EEEEPSG_ET0_T_SO_SN_0
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS5_SaIS5_EEEEPS5_ET0_T_SE_SD_0
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEEPSC_ET0_T_SL_SK_0
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairIccESt6vectorIS3_SaIS3_EEEEPS3_ET0_T_SC_SB_0
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES2_IS4_SaIS4_EEEEPS4_ET0_T_SC_SB_0
_ZSt16__do_uninit_copyIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESD_ET0_T_SF_SE_0
_ZSt16__do_uninit_copyIPSt6vectorIfSaIfEES3_ET0_T_S5_S4_0
_ZSt16__do_uninit_copyIPKPKcPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET0_T_SC_SB_4
_ZSt16__do_uninit_copyIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EPS7_ET0_T_SC_SB_8
_ZSt16__do_uninit_copyIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEPS7_ET0_T_SC_SB_8
_ZSt16__do_uninit_copyIPKSt6vectorIiSaIiEEPS2_ET0_T_S7_S6_8
_ZSt16__do_uninit_copyINSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEEPS7_ET0_T_SB_SA_10
_ZSt16__do_uninit_copyIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET0_T_S8_S7_32
_ZSt16__do_uninit_copyIPKSt6vectorIdSaIdEEPS2_ET0_T_S7_S6_36
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIdSaIdEES2_IS4_SaIS4_EEEEPS4_ET0_T_SC_SB_64
_ZSt16__do_uninit_copyIPKN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEPSG_ET0_T_SM_SL_114
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEEPS4_ET0_T_SD_SC_116
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESt6vectorIS9_SaIS9_EEEEPS9_ET0_T_SI_SH_212
_ZSt16__do_uninit_copyIPKSt4pairIiiEPS1_ET0_T_S6_S5_278
_ZSt16__do_uninit_copyIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS5_ET0_T_SA_S9_330
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEES8_ET0_T_SE_SD_348
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS3_SaIS3_EEEEPS3_ET0_T_SC_SB_512
_ZSt16__do_uninit_copyISt13move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEES7_ET0_T_SA_S9_538
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEEPS7_ET0_T_SG_SF_2638
_ZSt14__relocate_a_1IccENSt9enable_ifIXsrSt24__is_bitwise_relocatableIT_vE5valueEPS2_E4typeES4_S4_S4_RSaIT0_E253790
_ZSt14__relocate_a_1IPKN6loguru11EcEntryBaseES3_ENSt9enable_ifIXsrSt24__is_bitwise_relocatableIT_vE5valueEPS6_E4typeES8_S8_S8_RSaIT0_E0
_ZSt14__relocate_a_1IccENSt9enable_ifIXsrSt24__is_bitwise_relocatableIT_vE5valueEPS2_E4typeES4_S4_S4_RSaIT0_E0
_ZSt14__relocate_a_1ImmENSt9enable_ifIXsrSt24__is_bitwise_relocatableIT_vE5valueEPS2_E4typeES4_S4_S4_RSaIT0_E8
_ZSt14__relocate_a_1IddENSt9enable_ifIXsrSt24__is_bitwise_relocatableIT_vE5valueEPS2_E4typeES4_S4_S4_RSaIT0_E2308
_ZSt14__relocate_a_1IPN8bayesnet4NodeES2_ENSt9enable_ifIXsrSt24__is_bitwise_relocatableIT_vE5valueEPS5_E4typeES7_S7_S7_RSaIT0_E60568
_ZSt14__relocate_a_1IllENSt9enable_ifIXsrSt24__is_bitwise_relocatableIT_vE5valueEPS2_E4typeES4_S4_S4_RSaIT0_E76276
_ZSt14__relocate_a_1IiiENSt9enable_ifIXsrSt24__is_bitwise_relocatableIT_vE5valueEPS2_E4typeES4_S4_S4_RSaIT0_E114630
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPfPdEET0_T_S5_S4_449646
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEPcEET0_T_SC_SB_0
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEEPhEET0_T_SC_SB_0
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPKcPcEET0_T_S6_S5_0
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPPN8bayesnet4NodeES5_EET0_T_S7_S6_0
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPcS2_EET0_T_S4_S3_0
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPdS2_EET0_T_S4_S3_0
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEPlEET0_T_SC_SB_10
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES4_EET0_T_SA_S9_20
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPKiPiEET0_T_S6_S5_262
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPiS2_EET0_T_S4_S3_366
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPKdPdEET0_T_S6_S5_406
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyISt13move_iteratorIPiES3_EET0_T_S6_S5_1756
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES4_EET0_T_SA_S9_1970
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS6_SaIS6_EEEEPS6_EET0_T_SF_SE_2564
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPfS2_EET0_T_S4_S3_2784
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPfPdEET0_T_S5_S4_3592
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEEEPfEET0_T_SC_SB_4796
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEPdEET0_T_SC_SB_8204
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEPiEET0_T_SC_SB_21598
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPKlPlEET0_T_S6_S5_401318
_ZSt18uninitialized_copyIPfPdET0_T_S3_S2_454902
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEES6_ISG_SaISG_EEEEPSG_ET0_T_SO_SN_0
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS5_SaIS5_EEEEPS5_ET0_T_SE_SD_0
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEEPSC_ET0_T_SL_SK_0
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairIccESt6vectorIS3_SaIS3_EEEEPS3_ET0_T_SC_SB_0
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES2_IS4_SaIS4_EEEEPS4_ET0_T_SC_SB_0
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEPcET0_T_SA_S9_0
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEEPhET0_T_SA_S9_0
_ZSt18uninitialized_copyIPKcPcET0_T_S4_S3_0
_ZSt18uninitialized_copyIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESD_ET0_T_SF_SE_0
_ZSt18uninitialized_copyIPPN8bayesnet4NodeES3_ET0_T_S5_S4_0
_ZSt18uninitialized_copyIPSt6vectorIfSaIfEES3_ET0_T_S5_S4_0
_ZSt18uninitialized_copyIPcS0_ET0_T_S2_S1_0
_ZSt18uninitialized_copyIPdS0_ET0_T_S2_S1_0
_ZSt18uninitialized_copyIPKPKcPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET0_T_SC_SB_4
_ZSt18uninitialized_copyIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EPS7_ET0_T_SC_SB_8
_ZSt18uninitialized_copyIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEPS7_ET0_T_SC_SB_8
_ZSt18uninitialized_copyIPKSt6vectorIiSaIiEEPS2_ET0_T_S7_S6_8
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEPlET0_T_SA_S9_10
_ZSt18uninitialized_copyINSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEEPS7_ET0_T_SB_SA_10
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES2_ET0_T_S8_S7_20
_ZSt18uninitialized_copyIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET0_T_S8_S7_32
_ZSt18uninitialized_copyIPKSt6vectorIdSaIdEEPS2_ET0_T_S7_S6_36
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIdSaIdEES2_IS4_SaIS4_EEEEPS4_ET0_T_SC_SB_64
_ZSt18uninitialized_copyIPKN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEPSG_ET0_T_SM_SL_114
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEEPS4_ET0_T_SD_SC_116
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESt6vectorIS9_SaIS9_EEEEPS9_ET0_T_SI_SH_212
_ZSt18uninitialized_copyIPKiPiET0_T_S4_S3_262
_ZSt18uninitialized_copyIPKSt4pairIiiEPS1_ET0_T_S6_S5_278
_ZSt18uninitialized_copyIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS5_ET0_T_SA_S9_330
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEES8_ET0_T_SE_SD_348
_ZSt18uninitialized_copyIPiS0_ET0_T_S2_S1_366
_ZSt18uninitialized_copyIPKdPdET0_T_S4_S3_406
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS3_SaIS3_EEEEPS3_ET0_T_SC_SB_512
_ZSt18uninitialized_copyISt13move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEES7_ET0_T_SA_S9_538
_ZSt18uninitialized_copyISt13move_iteratorIPiES1_ET0_T_S4_S3_1756
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES2_ET0_T_S8_S7_1970
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEEPS4_ET0_T_SD_SC_2564
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEEPS7_ET0_T_SG_SF_2638
_ZSt18uninitialized_copyIPfS0_ET0_T_S2_S1_2784
_ZSt18uninitialized_copyIPfPdET0_T_S3_S2_3592
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEEEPfET0_T_SA_S9_4796
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEPdET0_T_SA_S9_8204
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEPiET0_T_SA_S9_21598
_ZSt18uninitialized_copyIPKlPlET0_T_S4_S3_401318
_ZSt22__uninitialized_copy_aIPfPddET0_T_S3_S2_RSaIT1_E454902
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEES6_ISG_SaISG_EEEEPSG_SG_ET0_T_SO_SN_RSaIT1_E0
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS5_SaIS5_EEEEPS5_S5_ET0_T_SE_SD_RSaIT1_E0
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEEPSC_SC_ET0_T_SL_SK_RSaIT1_E0
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKSt4pairIccESt6vectorIS3_SaIS3_EEEEPS3_S3_ET0_T_SC_SB_RSaIT1_E0
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES2_IS4_SaIS4_EEEEPS4_S4_ET0_T_SC_SB_RSaIT1_E0
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEPccET0_T_SA_S9_RSaIT1_E0
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEEPhhET0_T_SA_S9_RSaIT1_E0
_ZSt22__uninitialized_copy_aIPKcPccET0_T_S4_S3_RSaIT1_E0
_ZSt22__uninitialized_copy_aIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESD_SC_ET0_T_SF_SE_RSaIT1_E0
_ZSt22__uninitialized_copy_aIPPN8bayesnet4NodeES3_S2_ET0_T_S5_S4_RSaIT1_E0
_ZSt22__uninitialized_copy_aIPSt6vectorIfSaIfEES3_S2_ET0_T_S5_S4_RSaIT1_E0
_ZSt22__uninitialized_copy_aIPcS0_cET0_T_S2_S1_RSaIT1_E0
_ZSt22__uninitialized_copy_aIPdS0_dET0_T_S2_S1_RSaIT1_E0
_ZSt22__uninitialized_copy_aIPKPKcPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_ET0_T_SC_SB_RSaIT1_E4
_ZSt22__uninitialized_copy_aIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EPS7_S7_ET0_T_SC_SB_RSaIT1_E8
_ZSt22__uninitialized_copy_aIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEPS7_S7_ET0_T_SC_SB_RSaIT1_E8
_ZSt22__uninitialized_copy_aIPKSt6vectorIiSaIiEEPS2_S2_ET0_T_S7_S6_RSaIT1_E8
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEPllET0_T_SA_S9_RSaIT1_E10
_ZSt22__uninitialized_copy_aINSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEEPS7_S7_ET0_T_SB_SA_RSaIT1_E10
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES2_dET0_T_S8_S7_RSaIT1_E20
_ZSt22__uninitialized_copy_aIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_S5_ET0_T_S8_S7_RSaIT1_E32
_ZSt22__uninitialized_copy_aIPKSt6vectorIdSaIdEEPS2_S2_ET0_T_S7_S6_RSaIT1_E36
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIdSaIdEES2_IS4_SaIS4_EEEEPS4_S4_ET0_T_SC_SB_RSaIT1_E64
_ZSt22__uninitialized_copy_aIPKN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEPSG_SG_ET0_T_SM_SL_RSaIT1_E114
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEEPS4_S4_ET0_T_SD_SC_RSaIT1_E116
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESt6vectorIS9_SaIS9_EEEEPS9_S9_ET0_T_SI_SH_RSaIT1_E212
_ZSt22__uninitialized_copy_aIPKiPiiET0_T_S4_S3_RSaIT1_E262
_ZSt22__uninitialized_copy_aIPKSt4pairIiiEPS1_S1_ET0_T_S6_S5_RSaIT1_E278
_ZSt22__uninitialized_copy_aIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS5_S5_ET0_T_SA_S9_RSaIT1_E330
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEES8_S7_ET0_T_SE_SD_RSaIT1_E348
_ZSt22__uninitialized_copy_aIPiS0_iET0_T_S2_S1_RSaIT1_E366
_ZSt22__uninitialized_copy_aIPKdPddET0_T_S4_S3_RSaIT1_E406
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS3_SaIS3_EEEEPS3_S3_ET0_T_SC_SB_RSaIT1_E512
_ZSt22__uninitialized_copy_aISt13move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEES7_S6_ET0_T_SA_S9_RSaIT1_E538
_ZSt22__uninitialized_copy_aISt13move_iteratorIPiES1_iET0_T_S4_S3_RSaIT1_E1756
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES2_iET0_T_S8_S7_RSaIT1_E1970
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEEPS4_S4_ET0_T_SD_SC_RSaIT1_E2564
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEEPS7_S7_ET0_T_SG_SF_RSaIT1_E2638
_ZSt22__uninitialized_copy_aIPfS0_fET0_T_S2_S1_RSaIT1_E2784
_ZSt22__uninitialized_copy_aIPfPddET0_T_S3_S2_RSaIT1_E3592
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEEEPffET0_T_SA_S9_RSaIT1_E4796
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEPddET0_T_SA_S9_RSaIT1_E8204
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEPiiET0_T_SA_S9_RSaIT1_E21598
_ZSt22__uninitialized_copy_aIPKlPllET0_T_S4_S3_RSaIT1_E401318
_ZNSt22__uninitialized_fill_nILb1EE15__uninit_fill_nIPdmdEET_S3_T0_RKT1_2492684
_ZNSt22__uninitialized_fill_nILb1EE15__uninit_fill_nIPdmdEET_S3_T0_RKT1_422682
_ZNSt22__uninitialized_fill_nILb1EE15__uninit_fill_nIPimiEET_S3_T0_RKT1_2070002
_ZSt20uninitialized_fill_nIPdmdET_S1_T0_RKT1_2493050
_ZSt20uninitialized_fill_nIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEmSC_ET_SE_T0_RKT1_0
_ZSt20uninitialized_fill_nIPSt6vectorIdSaIdEEmS2_ET_S4_T0_RKT1_18
_ZSt20uninitialized_fill_nIPSt6vectorIiSaIiEEmS2_ET_S4_T0_RKT1_130
_ZSt20uninitialized_fill_nIPSt6vectorIfSaIfEEmS2_ET_S4_T0_RKT1_218
_ZSt20uninitialized_fill_nIPdmdET_S1_T0_RKT1_422682
_ZSt20uninitialized_fill_nIPimiET_S1_T0_RKT1_2070002
_ZSt24__uninitialized_fill_n_aIPdmddET_S1_T0_RKT1_RSaIT2_E2493050
_ZSt24__uninitialized_fill_n_aIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEmSC_SC_ET_SE_T0_RKT1_RSaIT2_E0
_ZSt24__uninitialized_fill_n_aIPSt6vectorIdSaIdEEmS2_S2_ET_S4_T0_RKT1_RSaIT2_E18
_ZSt24__uninitialized_fill_n_aIPSt6vectorIiSaIiEEmS2_S2_ET_S4_T0_RKT1_RSaIT2_E130
_ZSt24__uninitialized_fill_n_aIPSt6vectorIfSaIfEEmS2_S2_ET_S4_T0_RKT1_RSaIT2_E218
_ZSt24__uninitialized_fill_n_aIPdmddET_S1_T0_RKT1_RSaIT2_E422682
_ZSt24__uninitialized_fill_n_aIPimiiET_S1_T0_RKT1_RSaIT2_E2070002
_ZSt19__relocate_object_aISt6threadS0_SaIS0_EEvPT_PT0_RT1_103102826
_ZSt19__relocate_object_aIN2at6TensorES1_SaIS1_EEvPT_PT0_RT1_0
_ZSt19__relocate_object_aIN3c106SymIntES1_SaIS1_EEvPT_PT0_RT1_0
_ZSt19__relocate_object_aIN3c107complexIdEES2_SaIS2_EEvPT_PT0_RT1_0
_ZSt19__relocate_object_aIN3c108optionalIN2at6TensorEEES4_SaIS4_EEvPT_PT0_RT1_0
_ZSt19__relocate_object_aIN5Catch10Generators16GeneratorWrapperIPKcEES5_SaIS5_EEvPT_PT0_RT1_0
_ZSt19__relocate_object_aINSt7__cxx1112regex_traitsIcE10_RegexMaskES3_SaIS3_EEvPT_PT0_RT1_0
_ZSt19__relocate_object_aINSt8__detail6_StateIcEES2_SaIS2_EEvPT_PT0_RT1_0
_ZSt19__relocate_object_aISt4pairIccES1_SaIS1_EEvPT_PT0_RT1_0
_ZSt19__relocate_object_aISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESH_SaISH_EEvPT_PT0_RT1_0
_ZSt19__relocate_object_aIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESE_SaISE_EEvPT_PT0_RT1_8
_ZSt19__relocate_object_aIN6loguru8CallbackES1_SaIS1_EEvPT_PT0_RT1_62
_ZSt19__relocate_object_aISt4pairIifES1_SaIS1_EEvPT_PT0_RT1_158
_ZSt19__relocate_object_aISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EES5_SaIS5_EEvPT_PT0_RT1_604
_ZSt19__relocate_object_aISt6vectorIiSaIiEES2_SaIS2_EEvPT_PT0_RT1_1932
_ZSt19__relocate_object_aISt4pairIfS0_IiiEES2_SaIS2_EEvPT_PT0_RT1_1972
_ZSt19__relocate_object_aISt4pairIiiES1_SaIS1_EEvPT_PT0_RT1_2314
_ZSt19__relocate_object_aISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES7_SaIS7_EEvPT_PT0_RT1_11756
_ZSt19__relocate_object_aISt6vectorIdSaIdEES2_SaIS2_EEvPT_PT0_RT1_37250
_ZSt19__relocate_object_aINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_EEvPT_PT0_RT1_171720
_ZSt19__relocate_object_aISt6threadS0_SaIS0_EEvPT_PT0_RT1_1478518
_ZSt19__relocate_object_aIN3c106IValueES1_SaIS1_EEvPT_PT0_RT1_101396532
_ZSt14__relocate_a_1IPSt6threadS1_SaIS0_EET0_T_S4_S3_RT1_212842908
_ZSt14__relocate_a_1IPN3c106SymIntES2_SaIS1_EET0_T_S5_S4_RT1_0
_ZSt14__relocate_a_1IPN3c107complexIdEES3_SaIS2_EET0_T_S6_S5_RT1_0
_ZSt14__relocate_a_1IPN3c108optionalIN2at6TensorEEES5_SaIS4_EET0_T_S8_S7_RT1_0
_ZSt14__relocate_a_1IPNSt7__cxx1112regex_traitsIcE10_RegexMaskES4_SaIS3_EET0_T_S7_S6_RT1_0
_ZSt14__relocate_a_1IPNSt8__detail6_StateIcEES3_SaIS2_EET0_T_S6_S5_RT1_0
_ZSt14__relocate_a_1IPSt4pairIccES2_SaIS1_EET0_T_S5_S4_RT1_0
_ZSt14__relocate_a_1IPSt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESI_SaISH_EET0_T_SL_SK_RT1_0
_ZSt14__relocate_a_1IPN5Catch10Generators16GeneratorWrapperIPKcEES6_SaIS5_EET0_T_S9_S8_RT1_8
_ZSt14__relocate_a_1IPN6loguru8CallbackES2_SaIS1_EET0_T_S5_S4_RT1_24
_ZSt14__relocate_a_1IPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESF_SaISE_EET0_T_SI_SH_RT1_166
_ZSt14__relocate_a_1IPSt4pairIifES2_SaIS1_EET0_T_S5_S4_RT1_188
_ZSt14__relocate_a_1IPN2at6TensorES2_SaIS1_EET0_T_S5_S4_RT1_378
_ZSt14__relocate_a_1IPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EES6_SaIS5_EET0_T_S9_S8_RT1_480
_ZSt14__relocate_a_1IPSt4pairIfS0_IiiEES3_SaIS2_EET0_T_S6_S5_RT1_1052
_ZSt14__relocate_a_1IPSt6vectorIiSaIiEES3_SaIS2_EET0_T_S6_S5_RT1_1596
_ZSt14__relocate_a_1IPSt4pairIiiES2_SaIS1_EET0_T_S5_S4_RT1_2444
_ZSt14__relocate_a_1IPSt6vectorIdSaIdEES3_SaIS2_EET0_T_S6_S5_RT1_2544
_ZSt14__relocate_a_1IPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES8_SaIS7_EET0_T_SB_SA_RT1_4156
_ZSt14__relocate_a_1IPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_SaIS5_EET0_T_S9_S8_RT1_16968
_ZSt14__relocate_a_1IPSt6threadS1_SaIS0_EET0_T_S4_S3_RT1_2473664
_ZSt14__relocate_a_1IPN3c106IValueES2_SaIS1_EET0_T_S5_S4_RT1_210339240
_ZSt12__relocate_aIPcS0_SaIcEET0_T_S3_S2_RT1_213096698
_ZSt12__relocate_aIPN3c106SymIntES2_SaIS1_EET0_T_S5_S4_RT1_0
_ZSt12__relocate_aIPN3c107complexIdEES3_SaIS2_EET0_T_S6_S5_RT1_0
_ZSt12__relocate_aIPN3c108optionalIN2at6TensorEEES5_SaIS4_EET0_T_S8_S7_RT1_0
_ZSt12__relocate_aIPNSt7__cxx1112regex_traitsIcE10_RegexMaskES4_SaIS3_EET0_T_S7_S6_RT1_0
_ZSt12__relocate_aIPNSt8__detail6_StateIcEES3_SaIS2_EET0_T_S6_S5_RT1_0
_ZSt12__relocate_aIPPKN6loguru11EcEntryBaseES4_SaIS3_EET0_T_S7_S6_RT1_0
_ZSt12__relocate_aIPSt4pairIccES2_SaIS1_EET0_T_S5_S4_RT1_0
_ZSt12__relocate_aIPSt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESI_SaISH_EET0_T_SL_SK_RT1_0
_ZSt12__relocate_aIPcS0_SaIcEET0_T_S3_S2_RT1_0
_ZSt12__relocate_aIPN5Catch10Generators16GeneratorWrapperIPKcEES6_SaIS5_EET0_T_S9_S8_RT1_8
_ZSt12__relocate_aIPmS0_SaImEET0_T_S3_S2_RT1_8
_ZSt12__relocate_aIPN6loguru8CallbackES2_SaIS1_EET0_T_S5_S4_RT1_24
_ZSt12__relocate_aIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESF_SaISE_EET0_T_SI_SH_RT1_166
_ZSt12__relocate_aIPSt4pairIifES2_SaIS1_EET0_T_S5_S4_RT1_188
_ZSt12__relocate_aIPN2at6TensorES2_SaIS1_EET0_T_S5_S4_RT1_378
_ZSt12__relocate_aIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EES6_SaIS5_EET0_T_S9_S8_RT1_480
_ZSt12__relocate_aIPSt4pairIfS0_IiiEES3_SaIS2_EET0_T_S6_S5_RT1_1052
_ZSt12__relocate_aIPSt6vectorIiSaIiEES3_SaIS2_EET0_T_S6_S5_RT1_1596
_ZSt12__relocate_aIPdS0_SaIdEET0_T_S3_S2_RT1_2308
_ZSt12__relocate_aIPSt4pairIiiES2_SaIS1_EET0_T_S5_S4_RT1_2444
_ZSt12__relocate_aIPSt6vectorIdSaIdEES3_SaIS2_EET0_T_S6_S5_RT1_2544
_ZSt12__relocate_aIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES8_SaIS7_EET0_T_SB_SA_RT1_4156
_ZSt12__relocate_aIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_SaIS5_EET0_T_S9_S8_RT1_16968
_ZSt12__relocate_aIPPN8bayesnet4NodeES3_SaIS2_EET0_T_S6_S5_RT1_60568
_ZSt12__relocate_aIPlS0_SaIlEET0_T_S3_S2_RT1_76276
_ZSt12__relocate_aIPiS0_SaIiEET0_T_S3_S2_RT1_114630
_ZSt12__relocate_aIPSt6threadS1_SaIS0_EET0_T_S4_S3_RT1_2473664
_ZSt12__relocate_aIPN3c106IValueES2_SaIS1_EET0_T_S5_S4_RT1_210339240
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_uninitialized.h.func.html b/html/usr/include/c++/13/bits/stl_uninitialized.h.func.html new file mode 100644 index 0000000..1de2394 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_uninitialized.h.func.html @@ -0,0 +1,2154 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_uninitialized.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_uninitialized.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:88.5 %7869
Test Date:2024-04-30 13:17:26Functions:70.0 %277194
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKSt4pairIiiEPS3_EET0_T_S8_S7_5256
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS5_14adl_serializerES8_IhSaIhEEvEES8_ISI_SaISI_EEEEPSI_EET0_T_SQ_SP_0
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_SaIS9_EEEEPS9_EET0_T_SI_SH_2638
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS7_SaIS7_EEEEPS7_EET0_T_SG_SF_0
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS3_IPKcNS4_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISE_SaISE_EEEEPSE_EET0_T_SN_SM_0
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_ESt6vectorISB_SaISB_EEEEPSB_EET0_T_SK_SJ_212
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairIccESt6vectorIS5_SaIS5_EEEEPS5_EET0_T_SE_SD_0
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairIfS4_IiiEESt6vectorIS6_SaIS6_EEEEPS6_EET0_T_SF_SE_116
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS5_SaIS5_EEEEPS5_EET0_T_SE_SD_512
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIdSaIdEES4_IS6_SaIS6_EEEEPS6_EET0_T_SE_SD_64
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES4_IS6_SaIS6_EEEEPS6_EET0_T_SE_SD_0
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_SaIS9_EEEESA_EET0_T_SG_SF_348
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyINSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEEPS9_EET0_T_SD_SC_10
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKN8nlohmann16json_abi_v3_11_36detail8json_refINS3_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES8_IhSaIhEEvEEEEPSI_EET0_T_SO_SN_114
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS7_EET0_T_SC_SB_330
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKPKcPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEET0_T_SE_SD_4
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_EPS9_EET0_T_SE_SD_8
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEPS9_EET0_T_SE_SD_8
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKSt4pairIiiEPS3_EET0_T_S8_S7_278
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKSt6vectorIdSaIdEEPS4_EET0_T_S9_S8_36
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPKSt6vectorIiSaIiEEPS4_EET0_T_S9_S8_8
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_EET0_T_SA_S9_32
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESF_EET0_T_SH_SG_0
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyIPSt6vectorIfSaIfEES5_EET0_T_S7_S6_0
_ZNSt20__uninitialized_copyILb0EE13__uninit_copyISt13move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEES9_EET0_T_SC_SB_538
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPfPdEET0_T_S5_S4_449646
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS6_SaIS6_EEEEPS6_EET0_T_SF_SE_2564
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEPcEET0_T_SC_SB_0
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEPdEET0_T_SC_SB_8204
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEEEPfEET0_T_SC_SB_4796
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEEPhEET0_T_SC_SB_0
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEPiEET0_T_SC_SB_21598
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEPlEET0_T_SC_SB_10
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES4_EET0_T_SA_S9_20
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES4_EET0_T_SA_S9_1970
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPKcPcEET0_T_S6_S5_0
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPKdPdEET0_T_S6_S5_406
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPKiPiEET0_T_S6_S5_262
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPKlPlEET0_T_S6_S5_401318
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPPN8bayesnet4NodeES5_EET0_T_S7_S6_0
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPcS2_EET0_T_S4_S3_0
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPdS2_EET0_T_S4_S3_0
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPfPdEET0_T_S5_S4_3592
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPfS2_EET0_T_S4_S3_2784
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPiS2_EET0_T_S4_S3_366
_ZNSt20__uninitialized_copyILb1EE13__uninit_copyISt13move_iteratorIPiES3_EET0_T_S6_S5_1756
_ZNSt22__uninitialized_fill_nILb0EE15__uninit_fill_nIPSt6vectorIdSaIdEEmS4_EET_S6_T0_RKT1_366
_ZNSt22__uninitialized_fill_nILb0EE15__uninit_fill_nIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEmSE_EET_SG_T0_RKT1_0
_ZNSt22__uninitialized_fill_nILb0EE15__uninit_fill_nIPSt6vectorIdSaIdEEmS4_EET_S6_T0_RKT1_18
_ZNSt22__uninitialized_fill_nILb0EE15__uninit_fill_nIPSt6vectorIfSaIfEEmS4_EET_S6_T0_RKT1_218
_ZNSt22__uninitialized_fill_nILb0EE15__uninit_fill_nIPSt6vectorIiSaIiEEmS4_EET_S6_T0_RKT1_130
_ZNSt22__uninitialized_fill_nILb1EE15__uninit_fill_nIPdmdEET_S3_T0_RKT1_2492684
_ZNSt22__uninitialized_fill_nILb1EE15__uninit_fill_nIPdmdEET_S3_T0_RKT1_422682
_ZNSt22__uninitialized_fill_nILb1EE15__uninit_fill_nIPimiEET_S3_T0_RKT1_2070002
_ZNSt27__uninitialized_default_n_1ILb0EE18__uninit_default_nIPSt6vectorIiSaIiEEmEET_S6_T0_912
_ZNSt27__uninitialized_default_n_1ILb0EE18__uninit_default_nIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmEET_S9_T0_662
_ZNSt27__uninitialized_default_n_1ILb0EE18__uninit_default_nIPSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEmEET_SG_T0_0
_ZNSt27__uninitialized_default_n_1ILb0EE18__uninit_default_nIPSt6vectorIiSaIiEEmEET_S6_T0_250
_ZNSt27__uninitialized_default_n_1ILb1EE18__uninit_default_nIPdmEET_S3_T0_3598
_ZNSt27__uninitialized_default_n_1ILb1EE18__uninit_default_nIPdmEET_S3_T0_0
_ZNSt27__uninitialized_default_n_1ILb1EE18__uninit_default_nIPfmEET_S3_T0_218
_ZNSt27__uninitialized_default_n_1ILb1EE18__uninit_default_nIPimEET_S3_T0_3380
_ZSt12__relocate_aIPcS0_SaIcEET0_T_S3_S2_RT1_213096698
_ZSt12__relocate_aIPN2at6TensorES2_SaIS1_EET0_T_S5_S4_RT1_378
_ZSt12__relocate_aIPN3c106IValueES2_SaIS1_EET0_T_S5_S4_RT1_210339240
_ZSt12__relocate_aIPN3c106SymIntES2_SaIS1_EET0_T_S5_S4_RT1_0
_ZSt12__relocate_aIPN3c107complexIdEES3_SaIS2_EET0_T_S6_S5_RT1_0
_ZSt12__relocate_aIPN3c108optionalIN2at6TensorEEES5_SaIS4_EET0_T_S8_S7_RT1_0
_ZSt12__relocate_aIPN5Catch10Generators16GeneratorWrapperIPKcEES6_SaIS5_EET0_T_S9_S8_RT1_8
_ZSt12__relocate_aIPN6loguru8CallbackES2_SaIS1_EET0_T_S5_S4_RT1_24
_ZSt12__relocate_aIPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESF_SaISE_EET0_T_SI_SH_RT1_166
_ZSt12__relocate_aIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_SaIS5_EET0_T_S9_S8_RT1_16968
_ZSt12__relocate_aIPNSt7__cxx1112regex_traitsIcE10_RegexMaskES4_SaIS3_EET0_T_S7_S6_RT1_0
_ZSt12__relocate_aIPNSt8__detail6_StateIcEES3_SaIS2_EET0_T_S6_S5_RT1_0
_ZSt12__relocate_aIPPKN6loguru11EcEntryBaseES4_SaIS3_EET0_T_S7_S6_RT1_0
_ZSt12__relocate_aIPPN8bayesnet4NodeES3_SaIS2_EET0_T_S6_S5_RT1_60568
_ZSt12__relocate_aIPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EES6_SaIS5_EET0_T_S9_S8_RT1_480
_ZSt12__relocate_aIPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES8_SaIS7_EET0_T_SB_SA_RT1_4156
_ZSt12__relocate_aIPSt4pairIccES2_SaIS1_EET0_T_S5_S4_RT1_0
_ZSt12__relocate_aIPSt4pairIfS0_IiiEES3_SaIS2_EET0_T_S6_S5_RT1_1052
_ZSt12__relocate_aIPSt4pairIifES2_SaIS1_EET0_T_S5_S4_RT1_188
_ZSt12__relocate_aIPSt4pairIiiES2_SaIS1_EET0_T_S5_S4_RT1_2444
_ZSt12__relocate_aIPSt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESI_SaISH_EET0_T_SL_SK_RT1_0
_ZSt12__relocate_aIPSt6threadS1_SaIS0_EET0_T_S4_S3_RT1_2473664
_ZSt12__relocate_aIPSt6vectorIdSaIdEES3_SaIS2_EET0_T_S6_S5_RT1_2544
_ZSt12__relocate_aIPSt6vectorIiSaIiEES3_SaIS2_EET0_T_S6_S5_RT1_1596
_ZSt12__relocate_aIPcS0_SaIcEET0_T_S3_S2_RT1_0
_ZSt12__relocate_aIPdS0_SaIdEET0_T_S3_S2_RT1_2308
_ZSt12__relocate_aIPiS0_SaIiEET0_T_S3_S2_RT1_114630
_ZSt12__relocate_aIPlS0_SaIlEET0_T_S3_S2_RT1_76276
_ZSt12__relocate_aIPmS0_SaImEET0_T_S3_S2_RT1_8
_ZSt14__relocate_a_1IPSt6threadS1_SaIS0_EET0_T_S4_S3_RT1_212842908
_ZSt14__relocate_a_1IPN2at6TensorES2_SaIS1_EET0_T_S5_S4_RT1_378
_ZSt14__relocate_a_1IPN3c106IValueES2_SaIS1_EET0_T_S5_S4_RT1_210339240
_ZSt14__relocate_a_1IPN3c106SymIntES2_SaIS1_EET0_T_S5_S4_RT1_0
_ZSt14__relocate_a_1IPN3c107complexIdEES3_SaIS2_EET0_T_S6_S5_RT1_0
_ZSt14__relocate_a_1IPN3c108optionalIN2at6TensorEEES5_SaIS4_EET0_T_S8_S7_RT1_0
_ZSt14__relocate_a_1IPN5Catch10Generators16GeneratorWrapperIPKcEES6_SaIS5_EET0_T_S9_S8_RT1_8
_ZSt14__relocate_a_1IPN6loguru8CallbackES2_SaIS1_EET0_T_S5_S4_RT1_24
_ZSt14__relocate_a_1IPN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESF_SaISE_EET0_T_SI_SH_RT1_166
_ZSt14__relocate_a_1IPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_SaIS5_EET0_T_S9_S8_RT1_16968
_ZSt14__relocate_a_1IPNSt7__cxx1112regex_traitsIcE10_RegexMaskES4_SaIS3_EET0_T_S7_S6_RT1_0
_ZSt14__relocate_a_1IPNSt8__detail6_StateIcEES3_SaIS2_EET0_T_S6_S5_RT1_0
_ZSt14__relocate_a_1IPSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EES6_SaIS5_EET0_T_S9_S8_RT1_480
_ZSt14__relocate_a_1IPSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES8_SaIS7_EET0_T_SB_SA_RT1_4156
_ZSt14__relocate_a_1IPSt4pairIccES2_SaIS1_EET0_T_S5_S4_RT1_0
_ZSt14__relocate_a_1IPSt4pairIfS0_IiiEES3_SaIS2_EET0_T_S6_S5_RT1_1052
_ZSt14__relocate_a_1IPSt4pairIifES2_SaIS1_EET0_T_S5_S4_RT1_188
_ZSt14__relocate_a_1IPSt4pairIiiES2_SaIS1_EET0_T_S5_S4_RT1_2444
_ZSt14__relocate_a_1IPSt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESI_SaISH_EET0_T_SL_SK_RT1_0
_ZSt14__relocate_a_1IPSt6threadS1_SaIS0_EET0_T_S4_S3_RT1_2473664
_ZSt14__relocate_a_1IPSt6vectorIdSaIdEES3_SaIS2_EET0_T_S6_S5_RT1_2544
_ZSt14__relocate_a_1IPSt6vectorIiSaIiEES3_SaIS2_EET0_T_S6_S5_RT1_1596
_ZSt14__relocate_a_1IccENSt9enable_ifIXsrSt24__is_bitwise_relocatableIT_vE5valueEPS2_E4typeES4_S4_S4_RSaIT0_E253790
_ZSt14__relocate_a_1IPKN6loguru11EcEntryBaseES3_ENSt9enable_ifIXsrSt24__is_bitwise_relocatableIT_vE5valueEPS6_E4typeES8_S8_S8_RSaIT0_E0
_ZSt14__relocate_a_1IPN8bayesnet4NodeES2_ENSt9enable_ifIXsrSt24__is_bitwise_relocatableIT_vE5valueEPS5_E4typeES7_S7_S7_RSaIT0_E60568
_ZSt14__relocate_a_1IccENSt9enable_ifIXsrSt24__is_bitwise_relocatableIT_vE5valueEPS2_E4typeES4_S4_S4_RSaIT0_E0
_ZSt14__relocate_a_1IddENSt9enable_ifIXsrSt24__is_bitwise_relocatableIT_vE5valueEPS2_E4typeES4_S4_S4_RSaIT0_E2308
_ZSt14__relocate_a_1IiiENSt9enable_ifIXsrSt24__is_bitwise_relocatableIT_vE5valueEPS2_E4typeES4_S4_S4_RSaIT0_E114630
_ZSt14__relocate_a_1IllENSt9enable_ifIXsrSt24__is_bitwise_relocatableIT_vE5valueEPS2_E4typeES4_S4_S4_RSaIT0_E76276
_ZSt14__relocate_a_1ImmENSt9enable_ifIXsrSt24__is_bitwise_relocatableIT_vE5valueEPS2_E4typeES4_S4_S4_RSaIT0_E8
_ZSt16__do_uninit_copyIPKSt4pairIiiEPS1_ET0_T_S6_S5_5256
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEES6_ISG_SaISG_EEEEPSG_ET0_T_SO_SN_0
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEEPS7_ET0_T_SG_SF_2638
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS5_SaIS5_EEEEPS5_ET0_T_SE_SD_0
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEEPSC_ET0_T_SL_SK_0
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESt6vectorIS9_SaIS9_EEEEPS9_ET0_T_SI_SH_212
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairIccESt6vectorIS3_SaIS3_EEEEPS3_ET0_T_SC_SB_0
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEEPS4_ET0_T_SD_SC_116
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS3_SaIS3_EEEEPS3_ET0_T_SC_SB_512
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIdSaIdEES2_IS4_SaIS4_EEEEPS4_ET0_T_SC_SB_64
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES2_IS4_SaIS4_EEEEPS4_ET0_T_SC_SB_0
_ZSt16__do_uninit_copyIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEES8_ET0_T_SE_SD_348
_ZSt16__do_uninit_copyINSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEEPS7_ET0_T_SB_SA_10
_ZSt16__do_uninit_copyIPKN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEPSG_ET0_T_SM_SL_114
_ZSt16__do_uninit_copyIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS5_ET0_T_SA_S9_330
_ZSt16__do_uninit_copyIPKPKcPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET0_T_SC_SB_4
_ZSt16__do_uninit_copyIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EPS7_ET0_T_SC_SB_8
_ZSt16__do_uninit_copyIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEPS7_ET0_T_SC_SB_8
_ZSt16__do_uninit_copyIPKSt4pairIiiEPS1_ET0_T_S6_S5_278
_ZSt16__do_uninit_copyIPKSt6vectorIdSaIdEEPS2_ET0_T_S7_S6_36
_ZSt16__do_uninit_copyIPKSt6vectorIiSaIiEEPS2_ET0_T_S7_S6_8
_ZSt16__do_uninit_copyIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET0_T_S8_S7_32
_ZSt16__do_uninit_copyIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESD_ET0_T_SF_SE_0
_ZSt16__do_uninit_copyIPSt6vectorIfSaIfEES3_ET0_T_S5_S4_0
_ZSt16__do_uninit_copyISt13move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEES7_ET0_T_SA_S9_538
_ZSt18__do_uninit_fill_nIPSt6vectorIdSaIdEEmS2_ET_S4_T0_RKT1_366
_ZSt18__do_uninit_fill_nIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEmSC_ET_SE_T0_RKT1_0
_ZSt18__do_uninit_fill_nIPSt6vectorIdSaIdEEmS2_ET_S4_T0_RKT1_18
_ZSt18__do_uninit_fill_nIPSt6vectorIfSaIfEEmS2_ET_S4_T0_RKT1_218
_ZSt18__do_uninit_fill_nIPSt6vectorIiSaIiEEmS2_ET_S4_T0_RKT1_130
_ZSt18uninitialized_copyIPfPdET0_T_S3_S2_454902
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEES6_ISG_SaISG_EEEEPSG_ET0_T_SO_SN_0
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEEPS7_ET0_T_SG_SF_2638
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS5_SaIS5_EEEEPS5_ET0_T_SE_SD_0
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEEPSC_ET0_T_SL_SK_0
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEEPS4_ET0_T_SD_SC_2564
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESt6vectorIS9_SaIS9_EEEEPS9_ET0_T_SI_SH_212
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairIccESt6vectorIS3_SaIS3_EEEEPS3_ET0_T_SC_SB_0
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEEPS4_ET0_T_SD_SC_116
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS3_SaIS3_EEEEPS3_ET0_T_SC_SB_512
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIdSaIdEES2_IS4_SaIS4_EEEEPS4_ET0_T_SC_SB_64
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES2_IS4_SaIS4_EEEEPS4_ET0_T_SC_SB_0
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEPcET0_T_SA_S9_0
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEPdET0_T_SA_S9_8204
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEEEPfET0_T_SA_S9_4796
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEEPhET0_T_SA_S9_0
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEPiET0_T_SA_S9_21598
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEPlET0_T_SA_S9_10
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEES8_ET0_T_SE_SD_348
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES2_ET0_T_S8_S7_20
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES2_ET0_T_S8_S7_1970
_ZSt18uninitialized_copyINSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEEPS7_ET0_T_SB_SA_10
_ZSt18uninitialized_copyIPKN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEPSG_ET0_T_SM_SL_114
_ZSt18uninitialized_copyIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS5_ET0_T_SA_S9_330
_ZSt18uninitialized_copyIPKPKcPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEET0_T_SC_SB_4
_ZSt18uninitialized_copyIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EPS7_ET0_T_SC_SB_8
_ZSt18uninitialized_copyIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEPS7_ET0_T_SC_SB_8
_ZSt18uninitialized_copyIPKSt4pairIiiEPS1_ET0_T_S6_S5_278
_ZSt18uninitialized_copyIPKSt6vectorIdSaIdEEPS2_ET0_T_S7_S6_36
_ZSt18uninitialized_copyIPKSt6vectorIiSaIiEEPS2_ET0_T_S7_S6_8
_ZSt18uninitialized_copyIPKcPcET0_T_S4_S3_0
_ZSt18uninitialized_copyIPKdPdET0_T_S4_S3_406
_ZSt18uninitialized_copyIPKiPiET0_T_S4_S3_262
_ZSt18uninitialized_copyIPKlPlET0_T_S4_S3_401318
_ZSt18uninitialized_copyIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ET0_T_S8_S7_32
_ZSt18uninitialized_copyIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESD_ET0_T_SF_SE_0
_ZSt18uninitialized_copyIPPN8bayesnet4NodeES3_ET0_T_S5_S4_0
_ZSt18uninitialized_copyIPSt6vectorIfSaIfEES3_ET0_T_S5_S4_0
_ZSt18uninitialized_copyIPcS0_ET0_T_S2_S1_0
_ZSt18uninitialized_copyIPdS0_ET0_T_S2_S1_0
_ZSt18uninitialized_copyIPfPdET0_T_S3_S2_3592
_ZSt18uninitialized_copyIPfS0_ET0_T_S2_S1_2784
_ZSt18uninitialized_copyIPiS0_ET0_T_S2_S1_366
_ZSt18uninitialized_copyISt13move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEES7_ET0_T_SA_S9_538
_ZSt18uninitialized_copyISt13move_iteratorIPiES1_ET0_T_S4_S3_1756
_ZSt19__relocate_object_aISt6threadS0_SaIS0_EEvPT_PT0_RT1_103102826
_ZSt19__relocate_object_aIN2at6TensorES1_SaIS1_EEvPT_PT0_RT1_0
_ZSt19__relocate_object_aIN3c106IValueES1_SaIS1_EEvPT_PT0_RT1_101396532
_ZSt19__relocate_object_aIN3c106SymIntES1_SaIS1_EEvPT_PT0_RT1_0
_ZSt19__relocate_object_aIN3c107complexIdEES2_SaIS2_EEvPT_PT0_RT1_0
_ZSt19__relocate_object_aIN3c108optionalIN2at6TensorEEES4_SaIS4_EEvPT_PT0_RT1_0
_ZSt19__relocate_object_aIN5Catch10Generators16GeneratorWrapperIPKcEES5_SaIS5_EEvPT_PT0_RT1_0
_ZSt19__relocate_object_aIN6loguru8CallbackES1_SaIS1_EEvPT_PT0_RT1_62
_ZSt19__relocate_object_aIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESE_SaISE_EEvPT_PT0_RT1_8
_ZSt19__relocate_object_aINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_EEvPT_PT0_RT1_171720
_ZSt19__relocate_object_aINSt7__cxx1112regex_traitsIcE10_RegexMaskES3_SaIS3_EEvPT_PT0_RT1_0
_ZSt19__relocate_object_aINSt8__detail6_StateIcEES2_SaIS2_EEvPT_PT0_RT1_0
_ZSt19__relocate_object_aISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EES5_SaIS5_EEvPT_PT0_RT1_604
_ZSt19__relocate_object_aISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES7_SaIS7_EEvPT_PT0_RT1_11756
_ZSt19__relocate_object_aISt4pairIccES1_SaIS1_EEvPT_PT0_RT1_0
_ZSt19__relocate_object_aISt4pairIfS0_IiiEES2_SaIS2_EEvPT_PT0_RT1_1972
_ZSt19__relocate_object_aISt4pairIifES1_SaIS1_EEvPT_PT0_RT1_158
_ZSt19__relocate_object_aISt4pairIiiES1_SaIS1_EEvPT_PT0_RT1_2314
_ZSt19__relocate_object_aISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESH_SaISH_EEvPT_PT0_RT1_0
_ZSt19__relocate_object_aISt6threadS0_SaIS0_EEvPT_PT0_RT1_1478518
_ZSt19__relocate_object_aISt6vectorIdSaIdEES2_SaIS2_EEvPT_PT0_RT1_37250
_ZSt19__relocate_object_aISt6vectorIiSaIiEES2_SaIS2_EEvPT_PT0_RT1_1932
_ZSt20uninitialized_fill_nIPdmdET_S1_T0_RKT1_2493050
_ZSt20uninitialized_fill_nIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEmSC_ET_SE_T0_RKT1_0
_ZSt20uninitialized_fill_nIPSt6vectorIdSaIdEEmS2_ET_S4_T0_RKT1_18
_ZSt20uninitialized_fill_nIPSt6vectorIfSaIfEEmS2_ET_S4_T0_RKT1_218
_ZSt20uninitialized_fill_nIPSt6vectorIiSaIiEEmS2_ET_S4_T0_RKT1_130
_ZSt20uninitialized_fill_nIPdmdET_S1_T0_RKT1_422682
_ZSt20uninitialized_fill_nIPimiET_S1_T0_RKT1_2070002
_ZSt22__uninitialized_copy_aIPfPddET0_T_S3_S2_RSaIT1_E454902
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS3_14adl_serializerES6_IhSaIhEEvEES6_ISG_SaISG_EEEEPSG_SG_ET0_T_SO_SN_RSaIT1_E0
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEEPS7_S7_ET0_T_SG_SF_RSaIT1_E2638
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx1112regex_traitsIcE10_RegexMaskESt6vectorIS5_SaIS5_EEEEPS5_S5_ET0_T_SE_SD_RSaIT1_E0
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKNSt7__cxx119sub_matchINS1_IPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESt6vectorISC_SaISC_EEEEPSC_SC_ET0_T_SL_SK_RSaIT1_E0
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKPN8bayesnet4NodeESt6vectorIS4_SaIS4_EEEEPS4_S4_ET0_T_SD_SC_RSaIT1_E2564
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_ESt6vectorIS9_SaIS9_EEEEPS9_S9_ET0_T_SI_SH_RSaIT1_E212
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKSt4pairIccESt6vectorIS3_SaIS3_EEEEPS3_S3_ET0_T_SC_SB_RSaIT1_E0
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKSt4pairIfS2_IiiEESt6vectorIS4_SaIS4_EEEEPS4_S4_ET0_T_SD_SC_RSaIT1_E116
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKSt4pairIiiESt6vectorIS3_SaIS3_EEEEPS3_S3_ET0_T_SC_SB_RSaIT1_E512
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIdSaIdEES2_IS4_SaIS4_EEEEPS4_S4_ET0_T_SC_SB_RSaIT1_E64
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKSt6vectorIfSaIfEES2_IS4_SaIS4_EEEEPS4_S4_ET0_T_SC_SB_RSaIT1_E0
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKcSt6vectorIcSaIcEEEEPccET0_T_SA_S9_RSaIT1_E0
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKdSt6vectorIdSaIdEEEEPddET0_T_SA_S9_RSaIT1_E8204
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKfSt6vectorIfSaIfEEEEPffET0_T_SA_S9_RSaIT1_E4796
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEEPhhET0_T_SA_S9_RSaIT1_E0
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKiSt6vectorIiSaIiEEEEPiiET0_T_SA_S9_RSaIT1_E21598
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKlSt6vectorIlSaIlEEEEPllET0_T_SA_S9_RSaIT1_E10
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEES8_S7_ET0_T_SE_SD_RSaIT1_E348
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES2_dET0_T_S8_S7_RSaIT1_E20
_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEES2_iET0_T_S8_S7_RSaIT1_E1970
_ZSt22__uninitialized_copy_aINSt8__detail14_Node_iteratorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb1ELb1EEEPS7_S7_ET0_T_SB_SA_RSaIT1_E10
_ZSt22__uninitialized_copy_aIPKN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEPSG_SG_ET0_T_SM_SL_RSaIT1_E114
_ZSt22__uninitialized_copy_aIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPS5_S5_ET0_T_SA_S9_RSaIT1_E330
_ZSt22__uninitialized_copy_aIPKPKcPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_ET0_T_SC_SB_RSaIT1_E4
_ZSt22__uninitialized_copy_aIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EPS7_S7_ET0_T_SC_SB_RSaIT1_E8
_ZSt22__uninitialized_copy_aIPKSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEPS7_S7_ET0_T_SC_SB_RSaIT1_E8
_ZSt22__uninitialized_copy_aIPKSt4pairIiiEPS1_S1_ET0_T_S6_S5_RSaIT1_E278
_ZSt22__uninitialized_copy_aIPKSt6vectorIdSaIdEEPS2_S2_ET0_T_S7_S6_RSaIT1_E36
_ZSt22__uninitialized_copy_aIPKSt6vectorIiSaIiEEPS2_S2_ET0_T_S7_S6_RSaIT1_E8
_ZSt22__uninitialized_copy_aIPKcPccET0_T_S4_S3_RSaIT1_E0
_ZSt22__uninitialized_copy_aIPKdPddET0_T_S4_S3_RSaIT1_E406
_ZSt22__uninitialized_copy_aIPKiPiiET0_T_S4_S3_RSaIT1_E262
_ZSt22__uninitialized_copy_aIPKlPllET0_T_S4_S3_RSaIT1_E401318
_ZSt22__uninitialized_copy_aIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_S5_ET0_T_S8_S7_RSaIT1_E32
_ZSt22__uninitialized_copy_aIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESD_SC_ET0_T_SF_SE_RSaIT1_E0
_ZSt22__uninitialized_copy_aIPPN8bayesnet4NodeES3_S2_ET0_T_S5_S4_RSaIT1_E0
_ZSt22__uninitialized_copy_aIPSt6vectorIfSaIfEES3_S2_ET0_T_S5_S4_RSaIT1_E0
_ZSt22__uninitialized_copy_aIPcS0_cET0_T_S2_S1_RSaIT1_E0
_ZSt22__uninitialized_copy_aIPdS0_dET0_T_S2_S1_RSaIT1_E0
_ZSt22__uninitialized_copy_aIPfPddET0_T_S3_S2_RSaIT1_E3592
_ZSt22__uninitialized_copy_aIPfS0_fET0_T_S2_S1_RSaIT1_E2784
_ZSt22__uninitialized_copy_aIPiS0_iET0_T_S2_S1_RSaIT1_E366
_ZSt22__uninitialized_copy_aISt13move_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEES7_S6_ET0_T_SA_S9_RSaIT1_E538
_ZSt22__uninitialized_copy_aISt13move_iteratorIPiES1_iET0_T_S4_S3_RSaIT1_E1756
_ZSt22__uninitialized_move_aIPiS0_SaIiEET0_T_S3_S2_RT1_402
_ZSt22__uninitialized_move_aIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_SaIS5_EET0_T_S9_S8_RT1_158
_ZSt22__uninitialized_move_aIPiS0_SaIiEET0_T_S3_S2_RT1_244
_ZSt24__uninitialized_fill_n_aIPdmddET_S1_T0_RKT1_RSaIT2_E2493050
_ZSt24__uninitialized_fill_n_aIPNSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEEmSC_SC_ET_SE_T0_RKT1_RSaIT2_E0
_ZSt24__uninitialized_fill_n_aIPSt6vectorIdSaIdEEmS2_S2_ET_S4_T0_RKT1_RSaIT2_E18
_ZSt24__uninitialized_fill_n_aIPSt6vectorIfSaIfEEmS2_S2_ET_S4_T0_RKT1_RSaIT2_E218
_ZSt24__uninitialized_fill_n_aIPSt6vectorIiSaIiEEmS2_S2_ET_S4_T0_RKT1_RSaIT2_E130
_ZSt24__uninitialized_fill_n_aIPdmddET_S1_T0_RKT1_RSaIT2_E422682
_ZSt24__uninitialized_fill_n_aIPimiiET_S1_T0_RKT1_RSaIT2_E2070002
_ZSt25__uninitialized_default_nIPdmET_S1_T0_4510
_ZSt25__uninitialized_default_nIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmET_S7_T0_662
_ZSt25__uninitialized_default_nIPSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEmET_SE_T0_0
_ZSt25__uninitialized_default_nIPSt6vectorIiSaIiEEmET_S4_T0_250
_ZSt25__uninitialized_default_nIPdmET_S1_T0_0
_ZSt25__uninitialized_default_nIPfmET_S1_T0_218
_ZSt25__uninitialized_default_nIPimET_S1_T0_3380
_ZSt27__uninitialized_default_n_aIPdmdET_S1_T0_RSaIT1_E4510
_ZSt27__uninitialized_default_n_aIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmS5_ET_S7_T0_RSaIT1_E662
_ZSt27__uninitialized_default_n_aIPSt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiEmSC_ET_SE_T0_RSaIT1_E0
_ZSt27__uninitialized_default_n_aIPSt6vectorIiSaIiEEmS2_ET_S4_T0_RSaIT1_E250
_ZSt27__uninitialized_default_n_aIPdmdET_S1_T0_RSaIT1_E0
_ZSt27__uninitialized_default_n_aIPfmfET_S1_T0_RSaIT1_E218
_ZSt27__uninitialized_default_n_aIPimiET_S1_T0_RSaIT1_E3380
_ZSt34__uninitialized_move_if_noexcept_aIPiS0_SaIiEET0_T_S3_S2_RT1_1892
_ZSt34__uninitialized_move_if_noexcept_aIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_SaIS5_EET0_T_S9_S8_RT1_380
_ZSt34__uninitialized_move_if_noexcept_aIPiS0_SaIiEET0_T_S3_S2_RT1_1512
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_uninitialized.h.gcov.html b/html/usr/include/c++/13/bits/stl_uninitialized.h.gcov.html new file mode 100644 index 0000000..f37a03b --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_uninitialized.h.gcov.html @@ -0,0 +1,1236 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_uninitialized.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_uninitialized.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:88.5 %7869
Test Date:2024-04-30 13:17:26Functions:70.0 %277194
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Raw memory manipulators -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1996,1997
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/stl_uninitialized.h
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{memory}
+      54              :  */
+      55              : 
+      56              : #ifndef _STL_UNINITIALIZED_H
+      57              : #define _STL_UNINITIALIZED_H 1
+      58              : 
+      59              : #if __cplusplus >= 201103L
+      60              : #include <type_traits>
+      61              : #endif
+      62              : 
+      63              : #include <bits/stl_algobase.h>    // copy
+      64              : #include <ext/alloc_traits.h>     // __alloc_traits
+      65              : 
+      66              : #if __cplusplus >= 201703L
+      67              : #include <bits/stl_pair.h>
+      68              : #endif
+      69              : 
+      70              : namespace std _GLIBCXX_VISIBILITY(default)
+      71              : {
+      72              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      73              : 
+      74              :   /** @addtogroup memory
+      75              :    *  @{
+      76              :    */
+      77              : 
+      78              :   /// @cond undocumented
+      79              : 
+      80              : #if __cplusplus >= 201103L
+      81              :   template<typename _ValueType, typename _Tp>
+      82              :     constexpr bool
+      83              :     __check_constructible()
+      84              :     {
+      85              :       // Trivial types can have deleted constructors, but std::copy etc.
+      86              :       // only use assignment (or memmove) not construction, so we need an
+      87              :       // explicit check that construction from _Tp is actually valid,
+      88              :       // otherwise some ill-formed uses of std::uninitialized_xxx would
+      89              :       // compile without errors. This gives a nice clear error message.
+      90              :       static_assert(is_constructible<_ValueType, _Tp>::value,
+      91              :           "result type must be constructible from input type");
+      92              : 
+      93              :       return true;
+      94              :     }
+      95              : 
+      96              : // If the type is trivial we don't need to construct it, just assign to it.
+      97              : // But trivial types can still have deleted or inaccessible assignment,
+      98              : // so don't try to use std::copy or std::fill etc. if we can't assign.
+      99              : # define _GLIBCXX_USE_ASSIGN_FOR_INIT(T, U) \
+     100              :     __is_trivial(T) && __is_assignable(T&, U) \
+     101              :     && std::__check_constructible<T, U>()
+     102              : #else
+     103              : // No need to check if is_constructible<T, U> for C++98. Trivial types have
+     104              : // no user-declared constructors, so if the assignment is valid, construction
+     105              : // should be too.
+     106              : # define _GLIBCXX_USE_ASSIGN_FOR_INIT(T, U) \
+     107              :     __is_trivial(T) && __is_assignable(T&, U)
+     108              : #endif
+     109              : 
+     110              :   template<typename _InputIterator, typename _ForwardIterator>
+     111              :     _GLIBCXX20_CONSTEXPR
+     112              :     _ForwardIterator
+     113         5256 :     __do_uninit_copy(_InputIterator __first, _InputIterator __last,
+     114              :                      _ForwardIterator __result)
+     115              :     {
+     116         5256 :       _ForwardIterator __cur = __result;
+     117              :       __try
+     118              :         {
+     119        54178 :           for (; __first != __last; ++__first, (void)++__cur)
+     120        48922 :             std::_Construct(std::__addressof(*__cur), *__first);
+     121         5256 :           return __cur;
+     122              :         }
+     123            0 :       __catch(...)
+     124              :         {
+     125            0 :           std::_Destroy(__result, __cur);
+     126            0 :           __throw_exception_again;
+     127              :         }
+     128              :     }
+     129              : 
+     130              :   template<bool _TrivialValueTypes>
+     131              :     struct __uninitialized_copy
+     132              :     {
+     133              :       template<typename _InputIterator, typename _ForwardIterator>
+     134              :         static _ForwardIterator
+     135         5256 :         __uninit_copy(_InputIterator __first, _InputIterator __last,
+     136              :                       _ForwardIterator __result)
+     137         5256 :         { return std::__do_uninit_copy(__first, __last, __result); }
+     138              :     };
+     139              : 
+     140              :   template<>
+     141              :     struct __uninitialized_copy<true>
+     142              :     {
+     143              :       template<typename _InputIterator, typename _ForwardIterator>
+     144              :         static _ForwardIterator
+     145       449646 :         __uninit_copy(_InputIterator __first, _InputIterator __last,
+     146              :                       _ForwardIterator __result)
+     147       449646 :         { return std::copy(__first, __last, __result); }
+     148              :     };
+     149              : 
+     150              :   /// @endcond
+     151              : 
+     152              :   /**
+     153              :    *  @brief Copies the range [first,last) into result.
+     154              :    *  @param  __first  An input iterator.
+     155              :    *  @param  __last   An input iterator.
+     156              :    *  @param  __result An output iterator.
+     157              :    *  @return   __result + (__first - __last)
+     158              :    *
+     159              :    *  Like copy(), but does not require an initialized output range.
+     160              :   */
+     161              :   template<typename _InputIterator, typename _ForwardIterator>
+     162              :     inline _ForwardIterator
+     163       454902 :     uninitialized_copy(_InputIterator __first, _InputIterator __last,
+     164              :                        _ForwardIterator __result)
+     165              :     {
+     166              :       typedef typename iterator_traits<_InputIterator>::value_type
+     167              :         _ValueType1;
+     168              :       typedef typename iterator_traits<_ForwardIterator>::value_type
+     169              :         _ValueType2;
+     170              : 
+     171              :       // _ValueType1 must be trivially-copyable to use memmove, so don't
+     172              :       // bother optimizing to std::copy if it isn't.
+     173              :       // XXX Unnecessary because std::copy would check it anyway?
+     174       454902 :       const bool __can_memmove = __is_trivial(_ValueType1);
+     175              : 
+     176              : #if __cplusplus < 201103L
+     177              :       typedef typename iterator_traits<_InputIterator>::reference _From;
+     178              : #else
+     179              :       using _From = decltype(*__first);
+     180              : #endif
+     181       454902 :       const bool __assignable
+     182              :         = _GLIBCXX_USE_ASSIGN_FOR_INIT(_ValueType2, _From);
+     183              : 
+     184              :       return std::__uninitialized_copy<__can_memmove && __assignable>::
+     185       454902 :         __uninit_copy(__first, __last, __result);
+     186              :     }
+     187              : 
+     188              :   /// @cond undocumented
+     189              : 
+     190              :   template<typename _ForwardIterator, typename _Tp>
+     191              :     _GLIBCXX20_CONSTEXPR void
+     192              :     __do_uninit_fill(_ForwardIterator __first, _ForwardIterator __last,
+     193              :                      const _Tp& __x)
+     194              :     {
+     195              :       _ForwardIterator __cur = __first;
+     196              :       __try
+     197              :         {
+     198              :           for (; __cur != __last; ++__cur)
+     199              :             std::_Construct(std::__addressof(*__cur), __x);
+     200              :         }
+     201              :       __catch(...)
+     202              :         {
+     203              :           std::_Destroy(__first, __cur);
+     204              :           __throw_exception_again;
+     205              :         }
+     206              :     }
+     207              : 
+     208              :   template<bool _TrivialValueType>
+     209              :     struct __uninitialized_fill
+     210              :     {
+     211              :       template<typename _ForwardIterator, typename _Tp>
+     212              :         static void
+     213              :         __uninit_fill(_ForwardIterator __first, _ForwardIterator __last,
+     214              :                       const _Tp& __x)
+     215              :         { std::__do_uninit_fill(__first, __last, __x); }
+     216              :     };
+     217              : 
+     218              :   template<>
+     219              :     struct __uninitialized_fill<true>
+     220              :     {
+     221              :       template<typename _ForwardIterator, typename _Tp>
+     222              :         static void
+     223              :         __uninit_fill(_ForwardIterator __first, _ForwardIterator __last,
+     224              :                       const _Tp& __x)
+     225              :         { std::fill(__first, __last, __x); }
+     226              :     };
+     227              : 
+     228              :   /// @endcond
+     229              : 
+     230              :   /**
+     231              :    *  @brief Copies the value x into the range [first,last).
+     232              :    *  @param  __first  An input iterator.
+     233              :    *  @param  __last   An input iterator.
+     234              :    *  @param  __x      The source value.
+     235              :    *  @return   Nothing.
+     236              :    *
+     237              :    *  Like fill(), but does not require an initialized output range.
+     238              :   */
+     239              :   template<typename _ForwardIterator, typename _Tp>
+     240              :     inline void
+     241              :     uninitialized_fill(_ForwardIterator __first, _ForwardIterator __last,
+     242              :                        const _Tp& __x)
+     243              :     {
+     244              :       typedef typename iterator_traits<_ForwardIterator>::value_type
+     245              :         _ValueType;
+     246              : 
+     247              :       // Trivial types do not need a constructor to begin their lifetime,
+     248              :       // so try to use std::fill to benefit from its memset optimization.
+     249              :       const bool __can_fill
+     250              :         = _GLIBCXX_USE_ASSIGN_FOR_INIT(_ValueType, const _Tp&);
+     251              : 
+     252              :       std::__uninitialized_fill<__can_fill>::
+     253              :         __uninit_fill(__first, __last, __x);
+     254              :     }
+     255              : 
+     256              :   /// @cond undocumented
+     257              : 
+     258              :   template<typename _ForwardIterator, typename _Size, typename _Tp>
+     259              :     _GLIBCXX20_CONSTEXPR
+     260              :     _ForwardIterator
+     261          366 :     __do_uninit_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x)
+     262              :     {
+     263          366 :       _ForwardIterator __cur = __first;
+     264              :       __try
+     265              :         {
+     266         6886 :           for (; __n > 0; --__n, (void) ++__cur)
+     267         6520 :             std::_Construct(std::__addressof(*__cur), __x);
+     268          366 :           return __cur;
+     269              :         }
+     270            0 :       __catch(...)
+     271              :         {
+     272            0 :           std::_Destroy(__first, __cur);
+     273            0 :           __throw_exception_again;
+     274              :         }
+     275              :     }
+     276              : 
+     277              :   template<bool _TrivialValueType>
+     278              :     struct __uninitialized_fill_n
+     279              :     {
+     280              :       template<typename _ForwardIterator, typename _Size, typename _Tp>
+     281              :         static _ForwardIterator
+     282          366 :         __uninit_fill_n(_ForwardIterator __first, _Size __n,
+     283              :                         const _Tp& __x)
+     284          366 :         { return std::__do_uninit_fill_n(__first, __n, __x); }
+     285              :     };
+     286              : 
+     287              :   template<>
+     288              :     struct __uninitialized_fill_n<true>
+     289              :     {
+     290              :       template<typename _ForwardIterator, typename _Size, typename _Tp>
+     291              :         static _ForwardIterator
+     292      2492684 :         __uninit_fill_n(_ForwardIterator __first, _Size __n,
+     293              :                         const _Tp& __x)
+     294      2492684 :         { return std::fill_n(__first, __n, __x); }
+     295              :     };
+     296              : 
+     297              :   /// @endcond
+     298              : 
+     299              :    // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     300              :    // DR 1339. uninitialized_fill_n should return the end of its range
+     301              :   /**
+     302              :    *  @brief Copies the value x into the range [first,first+n).
+     303              :    *  @param  __first  An input iterator.
+     304              :    *  @param  __n      The number of copies to make.
+     305              :    *  @param  __x      The source value.
+     306              :    *  @return   Nothing.
+     307              :    *
+     308              :    *  Like fill_n(), but does not require an initialized output range.
+     309              :   */
+     310              :   template<typename _ForwardIterator, typename _Size, typename _Tp>
+     311              :     inline _ForwardIterator
+     312      2493050 :     uninitialized_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x)
+     313              :     {
+     314              :       typedef typename iterator_traits<_ForwardIterator>::value_type
+     315              :         _ValueType;
+     316              : 
+     317              :       // Trivial types do not need a constructor to begin their lifetime,
+     318              :       // so try to use std::fill_n to benefit from its optimizations.
+     319      2493050 :       const bool __can_fill
+     320              :         = _GLIBCXX_USE_ASSIGN_FOR_INIT(_ValueType, const _Tp&)
+     321              :       // For arbitrary class types and floating point types we can't assume
+     322              :       // that __n > 0 and std::__size_to_integer(__n) > 0 are equivalent,
+     323              :       // so only use std::fill_n when _Size is already an integral type.
+     324              :         && __is_integer<_Size>::__value;
+     325              : 
+     326              :       return __uninitialized_fill_n<__can_fill>::
+     327      2493050 :         __uninit_fill_n(__first, __n, __x);
+     328              :     }
+     329              : 
+     330              : #undef _GLIBCXX_USE_ASSIGN_FOR_INIT
+     331              : 
+     332              :   /// @cond undocumented
+     333              : 
+     334              :   // Extensions: versions of uninitialized_copy, uninitialized_fill,
+     335              :   //  and uninitialized_fill_n that take an allocator parameter.
+     336              :   //  We dispatch back to the standard versions when we're given the
+     337              :   //  default allocator.  For nondefault allocators we do not use
+     338              :   //  any of the POD optimizations.
+     339              : 
+     340              :   template<typename _InputIterator, typename _ForwardIterator,
+     341              :            typename _Allocator>
+     342              :     _GLIBCXX20_CONSTEXPR
+     343              :     _ForwardIterator
+     344              :     __uninitialized_copy_a(_InputIterator __first, _InputIterator __last,
+     345              :                            _ForwardIterator __result, _Allocator& __alloc)
+     346              :     {
+     347              :       _ForwardIterator __cur = __result;
+     348              :       __try
+     349              :         {
+     350              :           typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
+     351              :           for (; __first != __last; ++__first, (void)++__cur)
+     352              :             __traits::construct(__alloc, std::__addressof(*__cur), *__first);
+     353              :           return __cur;
+     354              :         }
+     355              :       __catch(...)
+     356              :         {
+     357              :           std::_Destroy(__result, __cur, __alloc);
+     358              :           __throw_exception_again;
+     359              :         }
+     360              :     }
+     361              : 
+     362              : #if _GLIBCXX_HOSTED
+     363              :   template<typename _InputIterator, typename _ForwardIterator, typename _Tp>
+     364              :     _GLIBCXX20_CONSTEXPR
+     365              :     inline _ForwardIterator
+     366       454902 :     __uninitialized_copy_a(_InputIterator __first, _InputIterator __last,
+     367              :                            _ForwardIterator __result, allocator<_Tp>&)
+     368              :     {
+     369              : #ifdef __cpp_lib_is_constant_evaluated
+     370              :       if (std::is_constant_evaluated())
+     371              :         return std::__do_uninit_copy(__first, __last, __result);
+     372              : #endif
+     373       454902 :       return std::uninitialized_copy(__first, __last, __result);
+     374              :     }
+     375              : #endif
+     376              : 
+     377              :   template<typename _InputIterator, typename _ForwardIterator,
+     378              :            typename _Allocator>
+     379              :     _GLIBCXX20_CONSTEXPR
+     380              :     inline _ForwardIterator
+     381          402 :     __uninitialized_move_a(_InputIterator __first, _InputIterator __last,
+     382              :                            _ForwardIterator __result, _Allocator& __alloc)
+     383              :     {
+     384          402 :       return std::__uninitialized_copy_a(_GLIBCXX_MAKE_MOVE_ITERATOR(__first),
+     385              :                                          _GLIBCXX_MAKE_MOVE_ITERATOR(__last),
+     386          402 :                                          __result, __alloc);
+     387              :     }
+     388              : 
+     389              :   template<typename _InputIterator, typename _ForwardIterator,
+     390              :            typename _Allocator>
+     391              :     _GLIBCXX20_CONSTEXPR
+     392              :     inline _ForwardIterator
+     393         1892 :     __uninitialized_move_if_noexcept_a(_InputIterator __first,
+     394              :                                        _InputIterator __last,
+     395              :                                        _ForwardIterator __result,
+     396              :                                        _Allocator& __alloc)
+     397              :     {
+     398              :       return std::__uninitialized_copy_a
+     399         1892 :         (_GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(__first),
+     400         1892 :          _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(__last), __result, __alloc);
+     401              :     }
+     402              : 
+     403              :   template<typename _ForwardIterator, typename _Tp, typename _Allocator>
+     404              :     _GLIBCXX20_CONSTEXPR
+     405              :     void
+     406              :     __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last,
+     407              :                            const _Tp& __x, _Allocator& __alloc)
+     408              :     {
+     409              :       _ForwardIterator __cur = __first;
+     410              :       __try
+     411              :         {
+     412              :           typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
+     413              :           for (; __cur != __last; ++__cur)
+     414              :             __traits::construct(__alloc, std::__addressof(*__cur), __x);
+     415              :         }
+     416              :       __catch(...)
+     417              :         {
+     418              :           std::_Destroy(__first, __cur, __alloc);
+     419              :           __throw_exception_again;
+     420              :         }
+     421              :     }
+     422              : 
+     423              : #if _GLIBCXX_HOSTED
+     424              :   template<typename _ForwardIterator, typename _Tp, typename _Tp2>
+     425              :     _GLIBCXX20_CONSTEXPR
+     426              :     inline void
+     427              :     __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last,
+     428              :                            const _Tp& __x, allocator<_Tp2>&)
+     429              :     {
+     430              : #ifdef __cpp_lib_is_constant_evaluated
+     431              :       if (std::is_constant_evaluated())
+     432              :         return std::__do_uninit_fill(__first, __last, __x);
+     433              : #endif
+     434              :       std::uninitialized_fill(__first, __last, __x);
+     435              :     }
+     436              : #endif
+     437              : 
+     438              :   template<typename _ForwardIterator, typename _Size, typename _Tp,
+     439              :            typename _Allocator>
+     440              :      _GLIBCXX20_CONSTEXPR
+     441              :     _ForwardIterator
+     442              :     __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n,
+     443              :                              const _Tp& __x, _Allocator& __alloc)
+     444              :     {
+     445              :       _ForwardIterator __cur = __first;
+     446              :       __try
+     447              :         {
+     448              :           typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
+     449              :           for (; __n > 0; --__n, (void) ++__cur)
+     450              :             __traits::construct(__alloc, std::__addressof(*__cur), __x);
+     451              :           return __cur;
+     452              :         }
+     453              :       __catch(...)
+     454              :         {
+     455              :           std::_Destroy(__first, __cur, __alloc);
+     456              :           __throw_exception_again;
+     457              :         }
+     458              :     }
+     459              : 
+     460              : #if _GLIBCXX_HOSTED
+     461              :   template<typename _ForwardIterator, typename _Size, typename _Tp,
+     462              :            typename _Tp2>
+     463              :     _GLIBCXX20_CONSTEXPR
+     464              :     inline _ForwardIterator
+     465      2493050 :     __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n,
+     466              :                              const _Tp& __x, allocator<_Tp2>&)
+     467              :     {
+     468              : #ifdef __cpp_lib_is_constant_evaluated
+     469              :       if (std::is_constant_evaluated())
+     470              :         return std::__do_uninit_fill_n(__first, __n, __x);
+     471              : #endif
+     472      2493050 :       return std::uninitialized_fill_n(__first, __n, __x);
+     473              :     }
+     474              : #endif
+     475              : 
+     476              :   // Extensions: __uninitialized_copy_move, __uninitialized_move_copy,
+     477              :   // __uninitialized_fill_move, __uninitialized_move_fill.
+     478              :   // All of these algorithms take a user-supplied allocator, which is used
+     479              :   // for construction and destruction.
+     480              : 
+     481              :   // __uninitialized_copy_move
+     482              :   // Copies [first1, last1) into [result, result + (last1 - first1)), and
+     483              :   //  move [first2, last2) into
+     484              :   //  [result, result + (last1 - first1) + (last2 - first2)).
+     485              :   template<typename _InputIterator1, typename _InputIterator2,
+     486              :            typename _ForwardIterator, typename _Allocator>
+     487              :     inline _ForwardIterator
+     488              :     __uninitialized_copy_move(_InputIterator1 __first1,
+     489              :                               _InputIterator1 __last1,
+     490              :                               _InputIterator2 __first2,
+     491              :                               _InputIterator2 __last2,
+     492              :                               _ForwardIterator __result,
+     493              :                               _Allocator& __alloc)
+     494              :     {
+     495              :       _ForwardIterator __mid = std::__uninitialized_copy_a(__first1, __last1,
+     496              :                                                            __result,
+     497              :                                                            __alloc);
+     498              :       __try
+     499              :         {
+     500              :           return std::__uninitialized_move_a(__first2, __last2, __mid, __alloc);
+     501              :         }
+     502              :       __catch(...)
+     503              :         {
+     504              :           std::_Destroy(__result, __mid, __alloc);
+     505              :           __throw_exception_again;
+     506              :         }
+     507              :     }
+     508              : 
+     509              :   // __uninitialized_move_copy
+     510              :   // Moves [first1, last1) into [result, result + (last1 - first1)), and
+     511              :   //  copies [first2, last2) into
+     512              :   //  [result, result + (last1 - first1) + (last2 - first2)).
+     513              :   template<typename _InputIterator1, typename _InputIterator2,
+     514              :            typename _ForwardIterator, typename _Allocator>
+     515              :     inline _ForwardIterator
+     516              :     __uninitialized_move_copy(_InputIterator1 __first1,
+     517              :                               _InputIterator1 __last1,
+     518              :                               _InputIterator2 __first2,
+     519              :                               _InputIterator2 __last2,
+     520              :                               _ForwardIterator __result,
+     521              :                               _Allocator& __alloc)
+     522              :     {
+     523              :       _ForwardIterator __mid = std::__uninitialized_move_a(__first1, __last1,
+     524              :                                                            __result,
+     525              :                                                            __alloc);
+     526              :       __try
+     527              :         {
+     528              :           return std::__uninitialized_copy_a(__first2, __last2, __mid, __alloc);
+     529              :         }
+     530              :       __catch(...)
+     531              :         {
+     532              :           std::_Destroy(__result, __mid, __alloc);
+     533              :           __throw_exception_again;
+     534              :         }
+     535              :     }
+     536              : 
+     537              :   // __uninitialized_fill_move
+     538              :   // Fills [result, mid) with x, and moves [first, last) into
+     539              :   //  [mid, mid + (last - first)).
+     540              :   template<typename _ForwardIterator, typename _Tp, typename _InputIterator,
+     541              :            typename _Allocator>
+     542              :     inline _ForwardIterator
+     543              :     __uninitialized_fill_move(_ForwardIterator __result, _ForwardIterator __mid,
+     544              :                               const _Tp& __x, _InputIterator __first,
+     545              :                               _InputIterator __last, _Allocator& __alloc)
+     546              :     {
+     547              :       std::__uninitialized_fill_a(__result, __mid, __x, __alloc);
+     548              :       __try
+     549              :         {
+     550              :           return std::__uninitialized_move_a(__first, __last, __mid, __alloc);
+     551              :         }
+     552              :       __catch(...)
+     553              :         {
+     554              :           std::_Destroy(__result, __mid, __alloc);
+     555              :           __throw_exception_again;
+     556              :         }
+     557              :     }
+     558              : 
+     559              :   // __uninitialized_move_fill
+     560              :   // Moves [first1, last1) into [first2, first2 + (last1 - first1)), and
+     561              :   //  fills [first2 + (last1 - first1), last2) with x.
+     562              :   template<typename _InputIterator, typename _ForwardIterator, typename _Tp,
+     563              :            typename _Allocator>
+     564              :     inline void
+     565              :     __uninitialized_move_fill(_InputIterator __first1, _InputIterator __last1,
+     566              :                               _ForwardIterator __first2,
+     567              :                               _ForwardIterator __last2, const _Tp& __x,
+     568              :                               _Allocator& __alloc)
+     569              :     {
+     570              :       _ForwardIterator __mid2 = std::__uninitialized_move_a(__first1, __last1,
+     571              :                                                             __first2,
+     572              :                                                             __alloc);
+     573              :       __try
+     574              :         {
+     575              :           std::__uninitialized_fill_a(__mid2, __last2, __x, __alloc);
+     576              :         }
+     577              :       __catch(...)
+     578              :         {
+     579              :           std::_Destroy(__first2, __mid2, __alloc);
+     580              :           __throw_exception_again;
+     581              :         }
+     582              :     }
+     583              : 
+     584              :   /// @endcond
+     585              : 
+     586              : #if __cplusplus >= 201103L
+     587              :   /// @cond undocumented
+     588              : 
+     589              :   // Extensions: __uninitialized_default, __uninitialized_default_n,
+     590              :   // __uninitialized_default_a, __uninitialized_default_n_a.
+     591              : 
+     592              :   template<bool _TrivialValueType>
+     593              :     struct __uninitialized_default_1
+     594              :     {
+     595              :       template<typename _ForwardIterator>
+     596              :         static void
+     597              :         __uninit_default(_ForwardIterator __first, _ForwardIterator __last)
+     598              :         {
+     599              :           _ForwardIterator __cur = __first;
+     600              :           __try
+     601              :             {
+     602              :               for (; __cur != __last; ++__cur)
+     603              :                 std::_Construct(std::__addressof(*__cur));
+     604              :             }
+     605              :           __catch(...)
+     606              :             {
+     607              :               std::_Destroy(__first, __cur);
+     608              :               __throw_exception_again;
+     609              :             }
+     610              :         }
+     611              :     };
+     612              : 
+     613              :   template<>
+     614              :     struct __uninitialized_default_1<true>
+     615              :     {
+     616              :       template<typename _ForwardIterator>
+     617              :         static void
+     618              :         __uninit_default(_ForwardIterator __first, _ForwardIterator __last)
+     619              :         {
+     620              :           if (__first == __last)
+     621              :             return;
+     622              : 
+     623              :           typename iterator_traits<_ForwardIterator>::value_type* __val
+     624              :             = std::__addressof(*__first);
+     625              :           std::_Construct(__val);
+     626              :           if (++__first != __last)
+     627              :             std::fill(__first, __last, *__val);
+     628              :         }
+     629              :     };
+     630              : 
+     631              :   template<bool _TrivialValueType>
+     632              :     struct __uninitialized_default_n_1
+     633              :     {
+     634              :       template<typename _ForwardIterator, typename _Size>
+     635              :         _GLIBCXX20_CONSTEXPR
+     636              :         static _ForwardIterator
+     637          912 :         __uninit_default_n(_ForwardIterator __first, _Size __n)
+     638              :         {
+     639          912 :           _ForwardIterator __cur = __first;
+     640              :           __try
+     641              :             {
+     642       236370 :               for (; __n > 0; --__n, (void) ++__cur)
+     643       235458 :                 std::_Construct(std::__addressof(*__cur));
+     644          912 :               return __cur;
+     645              :             }
+     646            0 :           __catch(...)
+     647              :             {
+     648            0 :               std::_Destroy(__first, __cur);
+     649            0 :               __throw_exception_again;
+     650              :             }
+     651              :         }
+     652              :     };
+     653              : 
+     654              :   template<>
+     655              :     struct __uninitialized_default_n_1<true>
+     656              :     {
+     657              :       template<typename _ForwardIterator, typename _Size>
+     658              :         _GLIBCXX20_CONSTEXPR
+     659              :         static _ForwardIterator
+     660         3598 :         __uninit_default_n(_ForwardIterator __first, _Size __n)
+     661              :         {
+     662         3598 :           if (__n > 0)
+     663              :             {
+     664              :               typename iterator_traits<_ForwardIterator>::value_type* __val
+     665         3598 :                 = std::__addressof(*__first);
+     666         3598 :               std::_Construct(__val);
+     667         3598 :               ++__first;
+     668         3598 :               __first = std::fill_n(__first, __n - 1, *__val);
+     669              :             }
+     670         3598 :           return __first;
+     671              :         }
+     672              :     };
+     673              : 
+     674              :   // __uninitialized_default
+     675              :   // Fills [first, last) with value-initialized value_types.
+     676              :   template<typename _ForwardIterator>
+     677              :     inline void
+     678              :     __uninitialized_default(_ForwardIterator __first,
+     679              :                             _ForwardIterator __last)
+     680              :     {
+     681              :       typedef typename iterator_traits<_ForwardIterator>::value_type
+     682              :         _ValueType;
+     683              :       // trivial types can have deleted assignment
+     684              :       const bool __assignable = is_copy_assignable<_ValueType>::value;
+     685              : 
+     686              :       std::__uninitialized_default_1<__is_trivial(_ValueType)
+     687              :                                      && __assignable>::
+     688              :         __uninit_default(__first, __last);
+     689              :     }
+     690              : 
+     691              :   // __uninitialized_default_n
+     692              :   // Fills [first, first + n) with value-initialized value_types.
+     693              :   template<typename _ForwardIterator, typename _Size>
+     694              :     _GLIBCXX20_CONSTEXPR
+     695              :     inline _ForwardIterator
+     696         4510 :     __uninitialized_default_n(_ForwardIterator __first, _Size __n)
+     697              :     {
+     698              : #ifdef __cpp_lib_is_constant_evaluated
+     699              :       if (std::is_constant_evaluated())
+     700              :         return __uninitialized_default_n_1<false>::
+     701              :                  __uninit_default_n(__first, __n);
+     702              : #endif
+     703              : 
+     704              :       typedef typename iterator_traits<_ForwardIterator>::value_type
+     705              :         _ValueType;
+     706              :       // See uninitialized_fill_n for the conditions for using std::fill_n.
+     707         4510 :       constexpr bool __can_fill
+     708              :         = __and_<is_integral<_Size>, is_copy_assignable<_ValueType>>::value;
+     709              : 
+     710              :       return __uninitialized_default_n_1<__is_trivial(_ValueType)
+     711              :                                          && __can_fill>::
+     712         4510 :         __uninit_default_n(__first, __n);
+     713              :     }
+     714              : 
+     715              : 
+     716              :   // __uninitialized_default_a
+     717              :   // Fills [first, last) with value_types constructed by the allocator
+     718              :   // alloc, with no arguments passed to the construct call.
+     719              :   template<typename _ForwardIterator, typename _Allocator>
+     720              :     void
+     721              :     __uninitialized_default_a(_ForwardIterator __first,
+     722              :                               _ForwardIterator __last,
+     723              :                               _Allocator& __alloc)
+     724              :     {
+     725              :       _ForwardIterator __cur = __first;
+     726              :       __try
+     727              :         {
+     728              :           typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
+     729              :           for (; __cur != __last; ++__cur)
+     730              :             __traits::construct(__alloc, std::__addressof(*__cur));
+     731              :         }
+     732              :       __catch(...)
+     733              :         {
+     734              :           std::_Destroy(__first, __cur, __alloc);
+     735              :           __throw_exception_again;
+     736              :         }
+     737              :     }
+     738              : 
+     739              : #if _GLIBCXX_HOSTED
+     740              :   template<typename _ForwardIterator, typename _Tp>
+     741              :     inline void
+     742              :     __uninitialized_default_a(_ForwardIterator __first,
+     743              :                               _ForwardIterator __last,
+     744              :                               allocator<_Tp>&)
+     745              :     { std::__uninitialized_default(__first, __last); }
+     746              : #endif
+     747              : 
+     748              :   // __uninitialized_default_n_a
+     749              :   // Fills [first, first + n) with value_types constructed by the allocator
+     750              :   // alloc, with no arguments passed to the construct call.
+     751              :   template<typename _ForwardIterator, typename _Size, typename _Allocator>
+     752              :     _GLIBCXX20_CONSTEXPR _ForwardIterator
+     753              :     __uninitialized_default_n_a(_ForwardIterator __first, _Size __n,
+     754              :                                 _Allocator& __alloc)
+     755              :     {
+     756              :       _ForwardIterator __cur = __first;
+     757              :       __try
+     758              :         {
+     759              :           typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
+     760              :           for (; __n > 0; --__n, (void) ++__cur)
+     761              :             __traits::construct(__alloc, std::__addressof(*__cur));
+     762              :           return __cur;
+     763              :         }
+     764              :       __catch(...)
+     765              :         {
+     766              :           std::_Destroy(__first, __cur, __alloc);
+     767              :           __throw_exception_again;
+     768              :         }
+     769              :     }
+     770              : 
+     771              : #if _GLIBCXX_HOSTED
+     772              :   // __uninitialized_default_n_a specialization for std::allocator,
+     773              :   // which ignores the allocator and value-initializes the elements.
+     774              :   template<typename _ForwardIterator, typename _Size, typename _Tp>
+     775              :     _GLIBCXX20_CONSTEXPR
+     776              :     inline _ForwardIterator
+     777         4510 :     __uninitialized_default_n_a(_ForwardIterator __first, _Size __n,
+     778              :                                 allocator<_Tp>&)
+     779         4510 :     { return std::__uninitialized_default_n(__first, __n); }
+     780              : #endif
+     781              : 
+     782              :   template<bool _TrivialValueType>
+     783              :     struct __uninitialized_default_novalue_1
+     784              :     {
+     785              :       template<typename _ForwardIterator>
+     786              :         static void
+     787              :         __uninit_default_novalue(_ForwardIterator __first,
+     788              :                                  _ForwardIterator __last)
+     789              :         {
+     790              :           _ForwardIterator __cur = __first;
+     791              :           __try
+     792              :             {
+     793              :               for (; __cur != __last; ++__cur)
+     794              :                 std::_Construct_novalue(std::__addressof(*__cur));
+     795              :             }
+     796              :           __catch(...)
+     797              :             {
+     798              :               std::_Destroy(__first, __cur);
+     799              :               __throw_exception_again;
+     800              :             }
+     801              :         }
+     802              :     };
+     803              : 
+     804              :   template<>
+     805              :     struct __uninitialized_default_novalue_1<true>
+     806              :     {
+     807              :       template<typename _ForwardIterator>
+     808              :         static void
+     809              :         __uninit_default_novalue(_ForwardIterator, _ForwardIterator)
+     810              :         {
+     811              :         }
+     812              :     };
+     813              : 
+     814              :   template<bool _TrivialValueType>
+     815              :     struct __uninitialized_default_novalue_n_1
+     816              :     {
+     817              :       template<typename _ForwardIterator, typename _Size>
+     818              :         static _ForwardIterator
+     819              :         __uninit_default_novalue_n(_ForwardIterator __first, _Size __n)
+     820              :         {
+     821              :           _ForwardIterator __cur = __first;
+     822              :           __try
+     823              :             {
+     824              :               for (; __n > 0; --__n, (void) ++__cur)
+     825              :                 std::_Construct_novalue(std::__addressof(*__cur));
+     826              :               return __cur;
+     827              :             }
+     828              :           __catch(...)
+     829              :             {
+     830              :               std::_Destroy(__first, __cur);
+     831              :               __throw_exception_again;
+     832              :             }
+     833              :         }
+     834              :     };
+     835              : 
+     836              :   template<>
+     837              :     struct __uninitialized_default_novalue_n_1<true>
+     838              :     {
+     839              :       template<typename _ForwardIterator, typename _Size>
+     840              :         static _ForwardIterator
+     841              :         __uninit_default_novalue_n(_ForwardIterator __first, _Size __n)
+     842              :         { return std::next(__first, __n); }
+     843              :     };
+     844              : 
+     845              :   // __uninitialized_default_novalue
+     846              :   // Fills [first, last) with default-initialized value_types.
+     847              :   template<typename _ForwardIterator>
+     848              :     inline void
+     849              :     __uninitialized_default_novalue(_ForwardIterator __first,
+     850              :                                     _ForwardIterator __last)
+     851              :     {
+     852              :       typedef typename iterator_traits<_ForwardIterator>::value_type
+     853              :         _ValueType;
+     854              : 
+     855              :       std::__uninitialized_default_novalue_1<
+     856              :         is_trivially_default_constructible<_ValueType>::value>::
+     857              :         __uninit_default_novalue(__first, __last);
+     858              :     }
+     859              : 
+     860              :   // __uninitialized_default_novalue_n
+     861              :   // Fills [first, first + n) with default-initialized value_types.
+     862              :   template<typename _ForwardIterator, typename _Size>
+     863              :     inline _ForwardIterator
+     864              :     __uninitialized_default_novalue_n(_ForwardIterator __first, _Size __n)
+     865              :     {
+     866              :       typedef typename iterator_traits<_ForwardIterator>::value_type
+     867              :         _ValueType;
+     868              : 
+     869              :       return __uninitialized_default_novalue_n_1<
+     870              :         is_trivially_default_constructible<_ValueType>::value>::
+     871              :         __uninit_default_novalue_n(__first, __n);
+     872              :     }
+     873              : 
+     874              :   template<typename _InputIterator, typename _Size,
+     875              :            typename _ForwardIterator>
+     876              :     _ForwardIterator
+     877              :     __uninitialized_copy_n(_InputIterator __first, _Size __n,
+     878              :                            _ForwardIterator __result, input_iterator_tag)
+     879              :     {
+     880              :       _ForwardIterator __cur = __result;
+     881              :       __try
+     882              :         {
+     883              :           for (; __n > 0; --__n, (void) ++__first, ++__cur)
+     884              :             std::_Construct(std::__addressof(*__cur), *__first);
+     885              :           return __cur;
+     886              :         }
+     887              :       __catch(...)
+     888              :         {
+     889              :           std::_Destroy(__result, __cur);
+     890              :           __throw_exception_again;
+     891              :         }
+     892              :     }
+     893              : 
+     894              :   template<typename _RandomAccessIterator, typename _Size,
+     895              :            typename _ForwardIterator>
+     896              :     inline _ForwardIterator
+     897              :     __uninitialized_copy_n(_RandomAccessIterator __first, _Size __n,
+     898              :                            _ForwardIterator __result,
+     899              :                            random_access_iterator_tag)
+     900              :     { return std::uninitialized_copy(__first, __first + __n, __result); }
+     901              : 
+     902              :   template<typename _InputIterator, typename _Size,
+     903              :            typename _ForwardIterator>
+     904              :     pair<_InputIterator, _ForwardIterator>
+     905              :     __uninitialized_copy_n_pair(_InputIterator __first, _Size __n,
+     906              :                            _ForwardIterator __result, input_iterator_tag)
+     907              :     {
+     908              :       _ForwardIterator __cur = __result;
+     909              :       __try
+     910              :         {
+     911              :           for (; __n > 0; --__n, (void) ++__first, ++__cur)
+     912              :             std::_Construct(std::__addressof(*__cur), *__first);
+     913              :           return {__first, __cur};
+     914              :         }
+     915              :       __catch(...)
+     916              :         {
+     917              :           std::_Destroy(__result, __cur);
+     918              :           __throw_exception_again;
+     919              :         }
+     920              :     }
+     921              : 
+     922              :   template<typename _RandomAccessIterator, typename _Size,
+     923              :            typename _ForwardIterator>
+     924              :     inline pair<_RandomAccessIterator, _ForwardIterator>
+     925              :     __uninitialized_copy_n_pair(_RandomAccessIterator __first, _Size __n,
+     926              :                            _ForwardIterator __result,
+     927              :                            random_access_iterator_tag)
+     928              :     {
+     929              :       auto __second_res = uninitialized_copy(__first, __first + __n, __result);
+     930              :       auto __first_res = std::next(__first, __n);
+     931              :       return {__first_res, __second_res};
+     932              :     }
+     933              : 
+     934              :   /// @endcond
+     935              : 
+     936              :   /**
+     937              :    *  @brief Copies the range [first,first+n) into result.
+     938              :    *  @param  __first  An input iterator.
+     939              :    *  @param  __n      The number of elements to copy.
+     940              :    *  @param  __result An output iterator.
+     941              :    *  @return  __result + __n
+     942              :    *  @since C++11
+     943              :    *
+     944              :    *  Like copy_n(), but does not require an initialized output range.
+     945              :   */
+     946              :   template<typename _InputIterator, typename _Size, typename _ForwardIterator>
+     947              :     inline _ForwardIterator
+     948              :     uninitialized_copy_n(_InputIterator __first, _Size __n,
+     949              :                          _ForwardIterator __result)
+     950              :     { return std::__uninitialized_copy_n(__first, __n, __result,
+     951              :                                          std::__iterator_category(__first)); }
+     952              : 
+     953              :   /// @cond undocumented
+     954              :   template<typename _InputIterator, typename _Size, typename _ForwardIterator>
+     955              :     inline pair<_InputIterator, _ForwardIterator>
+     956              :     __uninitialized_copy_n_pair(_InputIterator __first, _Size __n,
+     957              :                               _ForwardIterator __result)
+     958              :     {
+     959              :       return
+     960              :         std::__uninitialized_copy_n_pair(__first, __n, __result,
+     961              :                                          std::__iterator_category(__first));
+     962              :     }
+     963              :   /// @endcond
+     964              : #endif
+     965              : 
+     966              : #if __cplusplus >= 201703L
+     967              : # define __cpp_lib_raw_memory_algorithms 201606L
+     968              : 
+     969              :   /**
+     970              :    *  @brief Default-initializes objects in the range [first,last).
+     971              :    *  @param  __first  A forward iterator.
+     972              :    *  @param  __last   A forward iterator.
+     973              :    *  @since C++17
+     974              :   */
+     975              :   template <typename _ForwardIterator>
+     976              :     inline void
+     977              :     uninitialized_default_construct(_ForwardIterator __first,
+     978              :                                     _ForwardIterator __last)
+     979              :     {
+     980              :       __uninitialized_default_novalue(__first, __last);
+     981              :     }
+     982              : 
+     983              :   /**
+     984              :    *  @brief Default-initializes objects in the range [first,first+count).
+     985              :    *  @param  __first  A forward iterator.
+     986              :    *  @param  __count  The number of objects to construct.
+     987              :    *  @return   __first + __count
+     988              :    *  @since C++17
+     989              :   */
+     990              :   template <typename _ForwardIterator, typename _Size>
+     991              :     inline _ForwardIterator
+     992              :     uninitialized_default_construct_n(_ForwardIterator __first, _Size __count)
+     993              :     {
+     994              :       return __uninitialized_default_novalue_n(__first, __count);
+     995              :     }
+     996              : 
+     997              :   /**
+     998              :    *  @brief Value-initializes objects in the range [first,last).
+     999              :    *  @param  __first  A forward iterator.
+    1000              :    *  @param  __last   A forward iterator.
+    1001              :    *  @since C++17
+    1002              :   */
+    1003              :   template <typename _ForwardIterator>
+    1004              :     inline void
+    1005              :     uninitialized_value_construct(_ForwardIterator __first,
+    1006              :                                   _ForwardIterator __last)
+    1007              :     {
+    1008              :       return __uninitialized_default(__first, __last);
+    1009              :     }
+    1010              : 
+    1011              :   /**
+    1012              :    *  @brief Value-initializes objects in the range [first,first+count).
+    1013              :    *  @param  __first  A forward iterator.
+    1014              :    *  @param  __count  The number of objects to construct.
+    1015              :    *  @return   __result + __count
+    1016              :    *  @since C++17
+    1017              :   */
+    1018              :   template <typename _ForwardIterator, typename _Size>
+    1019              :     inline _ForwardIterator
+    1020              :     uninitialized_value_construct_n(_ForwardIterator __first, _Size __count)
+    1021              :     {
+    1022              :       return __uninitialized_default_n(__first, __count);
+    1023              :     }
+    1024              : 
+    1025              :   /**
+    1026              :    *  @brief Move-construct from the range [first,last) into result.
+    1027              :    *  @param  __first  An input iterator.
+    1028              :    *  @param  __last   An input iterator.
+    1029              :    *  @param  __result An output iterator.
+    1030              :    *  @return   __result + (__first - __last)
+    1031              :    *  @since C++17
+    1032              :   */
+    1033              :   template <typename _InputIterator, typename _ForwardIterator>
+    1034              :     inline _ForwardIterator
+    1035              :     uninitialized_move(_InputIterator __first, _InputIterator __last,
+    1036              :                        _ForwardIterator __result)
+    1037              :     {
+    1038              :       return std::uninitialized_copy
+    1039              :         (_GLIBCXX_MAKE_MOVE_ITERATOR(__first),
+    1040              :          _GLIBCXX_MAKE_MOVE_ITERATOR(__last), __result);
+    1041              :     }
+    1042              : 
+    1043              :   /**
+    1044              :    *  @brief Move-construct from the range [first,first+count) into result.
+    1045              :    *  @param  __first  An input iterator.
+    1046              :    *  @param  __count  The number of objects to initialize.
+    1047              :    *  @param  __result An output iterator.
+    1048              :    *  @return  __result + __count
+    1049              :    *  @since C++17
+    1050              :   */
+    1051              :   template <typename _InputIterator, typename _Size, typename _ForwardIterator>
+    1052              :     inline pair<_InputIterator, _ForwardIterator>
+    1053              :     uninitialized_move_n(_InputIterator __first, _Size __count,
+    1054              :                          _ForwardIterator __result)
+    1055              :     {
+    1056              :       auto __res = std::__uninitialized_copy_n_pair
+    1057              :         (_GLIBCXX_MAKE_MOVE_ITERATOR(__first),
+    1058              :          __count, __result);
+    1059              :       return {__res.first.base(), __res.second};
+    1060              :     }
+    1061              : #endif // C++17
+    1062              : 
+    1063              : #if __cplusplus >= 201103L
+    1064              :   /// @cond undocumented
+    1065              : 
+    1066              :   template<typename _Tp, typename _Up, typename _Allocator>
+    1067              :     _GLIBCXX20_CONSTEXPR
+    1068              :     inline void
+    1069    103102826 :     __relocate_object_a(_Tp* __restrict __dest, _Up* __restrict __orig,
+    1070              :                         _Allocator& __alloc)
+    1071              :     noexcept(noexcept(std::allocator_traits<_Allocator>::construct(__alloc,
+    1072              :                          __dest, std::move(*__orig)))
+    1073              :              && noexcept(std::allocator_traits<_Allocator>::destroy(
+    1074              :                             __alloc, std::__addressof(*__orig))))
+    1075              :     {
+    1076              :       typedef std::allocator_traits<_Allocator> __traits;
+    1077    103102826 :       __traits::construct(__alloc, __dest, std::move(*__orig));
+    1078    103102826 :       __traits::destroy(__alloc, std::__addressof(*__orig));
+    1079    103102826 :     }
+    1080              : 
+    1081              :   // This class may be specialized for specific types.
+    1082              :   // Also known as is_trivially_relocatable.
+    1083              :   template<typename _Tp, typename = void>
+    1084              :     struct __is_bitwise_relocatable
+    1085              :     : is_trivial<_Tp> { };
+    1086              : 
+    1087              :   template <typename _InputIterator, typename _ForwardIterator,
+    1088              :             typename _Allocator>
+    1089              :     _GLIBCXX20_CONSTEXPR
+    1090              :     inline _ForwardIterator
+    1091    212842908 :     __relocate_a_1(_InputIterator __first, _InputIterator __last,
+    1092              :                    _ForwardIterator __result, _Allocator& __alloc)
+    1093              :     noexcept(noexcept(std::__relocate_object_a(std::addressof(*__result),
+    1094              :                                                std::addressof(*__first),
+    1095              :                                                __alloc)))
+    1096              :     {
+    1097              :       typedef typename iterator_traits<_InputIterator>::value_type
+    1098              :         _ValueType;
+    1099              :       typedef typename iterator_traits<_ForwardIterator>::value_type
+    1100              :         _ValueType2;
+    1101              :       static_assert(std::is_same<_ValueType, _ValueType2>::value,
+    1102              :           "relocation is only possible for values of the same type");
+    1103    212842908 :       _ForwardIterator __cur = __result;
+    1104    315945734 :       for (; __first != __last; ++__first, (void)++__cur)
+    1105    103102826 :         std::__relocate_object_a(std::__addressof(*__cur),
+    1106              :                                  std::__addressof(*__first), __alloc);
+    1107    212842908 :       return __cur;
+    1108              :     }
+    1109              : 
+    1110              : #if _GLIBCXX_HOSTED
+    1111              :   template <typename _Tp, typename _Up>
+    1112              :     _GLIBCXX20_CONSTEXPR
+    1113              :     inline __enable_if_t<std::__is_bitwise_relocatable<_Tp>::value, _Tp*>
+    1114       253790 :     __relocate_a_1(_Tp* __first, _Tp* __last,
+    1115              :                    _Tp* __result,
+    1116              :                    [[__maybe_unused__]] allocator<_Up>& __alloc) noexcept
+    1117              :     {
+    1118       253790 :       ptrdiff_t __count = __last - __first;
+    1119       253790 :       if (__count > 0)
+    1120              :         {
+    1121              : #ifdef __cpp_lib_is_constant_evaluated
+    1122              :           if (std::is_constant_evaluated())
+    1123              :             {
+    1124              :               // Can't use memmove. Wrap the pointer so that __relocate_a_1
+    1125              :               // resolves to the non-trivial overload above.
+    1126              :               __gnu_cxx::__normal_iterator<_Tp*, void> __out(__result);
+    1127              :               __out = std::__relocate_a_1(__first, __last, __out, __alloc);
+    1128              :               return __out.base();
+    1129              :             }
+    1130              : #endif
+    1131        57498 :           __builtin_memmove(__result, __first, __count * sizeof(_Tp));
+    1132              :         }
+    1133       253790 :       return __result + __count;
+    1134              :     }
+    1135              : #endif
+    1136              : 
+    1137              :   template <typename _InputIterator, typename _ForwardIterator,
+    1138              :             typename _Allocator>
+    1139              :     _GLIBCXX20_CONSTEXPR
+    1140              :     inline _ForwardIterator
+    1141    213096698 :     __relocate_a(_InputIterator __first, _InputIterator __last,
+    1142              :                  _ForwardIterator __result, _Allocator& __alloc)
+    1143              :     noexcept(noexcept(__relocate_a_1(std::__niter_base(__first),
+    1144              :                                      std::__niter_base(__last),
+    1145              :                                      std::__niter_base(__result), __alloc)))
+    1146              :     {
+    1147    213096698 :       return std::__relocate_a_1(std::__niter_base(__first),
+    1148              :                                  std::__niter_base(__last),
+    1149    213096698 :                                  std::__niter_base(__result), __alloc);
+    1150              :     }
+    1151              : 
+    1152              :   /// @endcond
+    1153              : #endif // C++11
+    1154              : 
+    1155              :   /// @} group memory
+    1156              : 
+    1157              : _GLIBCXX_END_NAMESPACE_VERSION
+    1158              : } // namespace
+    1159              : 
+    1160              : #endif /* _STL_UNINITIALIZED_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_vector.h.func-c.html b/html/usr/include/c++/13/bits/stl_vector.h.func-c.html new file mode 100644 index 0000000..b3fd30c --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_vector.h.func-c.html @@ -0,0 +1,7782 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_vector.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_vector.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:90.3 %248224
Test Date:2024-04-30 13:17:26Functions:66.7 %1031688
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE12_Vector_implC2EOSD_OSF_0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2ERKSD_OSE_0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE6assignEmRKSC_0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2EOSE_RKSD_0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2EOSE_RKSD_St17integral_constantIbLb1EE0
_ZNSt6vectorIcSaIcEE4dataEv0
_ZNKSt6vectorIhSaIhEE4cendEv60
_ZNKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE4cendEv0
_ZNKSt6vectorIhSaIhEE4cendEv0
_ZNKSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE4cendEv60
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE6insertEN9__gnu_cxx17__normal_iteratorIPKS5_S7_EEOS5_60
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE2atEm132
_ZSteqIhSaIhEEbRKSt6vectorIT_T0_ES6_160
_ZSteqIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EEbRKS4_IT_T0_ESK_0
_ZSteqIhSaIhEEbRKSt6vectorIT_T0_ES6_0
_ZSteqISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEbRKSt6vectorIT_T0_ESE_16
_ZSteqISt4pairIiiESaIS1_EEbRKSt6vectorIT_T0_ES8_32
_ZSteqIiSaIiEEbRKSt6vectorIT_T0_ES6_44
_ZSteqINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEbRKSt6vectorIT_T0_ESC_68
_ZNSt6vectorIiSaIiEE16_Temporary_value6_M_valEv178
_ZNSt6vectorIiSaIiEE16_Temporary_value6_M_valEv56
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE16_Temporary_value6_M_valEv122
_ZNSt6vectorIiSaIiEE16_Temporary_value8_StorageC2Ev178
_ZNSt6vectorIiSaIiEE16_Temporary_value8_StorageC2Ev56
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE16_Temporary_value8_StorageC2Ev122
_ZNSt6vectorIiSaIiEE16_Temporary_value8_StorageD2Ev178
_ZNSt6vectorIiSaIiEE16_Temporary_value8_StorageD2Ev56
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE16_Temporary_value8_StorageD2Ev122
_ZNSt6vectorIiSaIiEE16_Temporary_valueC2IJRKiEEEPS1_DpOT_178
_ZNSt6vectorIiSaIiEE16_Temporary_valueC2IJRKiEEEPS1_DpOT_56
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE16_Temporary_valueC2IJRKS5_EEEPS7_DpOT_122
_ZNSt6vectorIiSaIiEE16_Temporary_valueD2Ev178
_ZNSt6vectorIiSaIiEE16_Temporary_valueD2Ev56
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE16_Temporary_valueD2Ev122
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEaSESt16initializer_listIS5_E196
_ZNSt6vectorIiSaIiEE16_Temporary_value6_M_ptrEv356
_ZNSt6vectorIiSaIiEE16_Temporary_value6_M_ptrEv112
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE16_Temporary_value6_M_ptrEv244
_ZNSt6vectorIdSaIdEE6resizeEm384
_ZNSt6vectorIdSaIdEE6resizeEm192
_ZNSt6vectorIiSaIiEE6resizeEm192
_ZNKSt6vectorIhSaIhEE5emptyEv576
_ZNKSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE5emptyEv0
_ZNKSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE5emptyEv0
_ZNKSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE5emptyEv0
_ZNKSt6vectorIhSaIhEE5emptyEv0
_ZNKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE5emptyEv576
_ZNSt6vectorIdSaIdEE8pop_backEv868
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE8pop_backEv4
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE8pop_backEv48
_ZNSt6vectorIdSaIdEE8pop_backEv48
_ZNSt6vectorImSaImEE8pop_backEv124
_ZNSt6vectorIiSaIiEE8pop_backEv284
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE8pop_backEv360
_ZNSt6vectorIdSaIdEE5eraseEN9__gnu_cxx17__normal_iteratorIPKdS1_EE912
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS1_S3_EE0
_ZNSt6vectorIdSaIdEE5eraseEN9__gnu_cxx17__normal_iteratorIPKdS1_EE40
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS5_S7_EE120
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS2_S4_EE318
_ZNSt6vectorIiSaIiEE5eraseEN9__gnu_cxx17__normal_iteratorIPKiS1_EE434
_ZNSt6vectorIiSaIiEE6insertIN9__gnu_cxx17__normal_iteratorIPiS1_EEvEES6_NS4_IPKiS1_EET_SA_1348
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE6insertIN9__gnu_cxx17__normal_iteratorIPS5_S7_EEvEESC_NSA_IPKS5_S7_EET_SG_348
_ZNSt6vectorIiSaIiEE6insertIN9__gnu_cxx17__normal_iteratorIPiS1_EEvEES6_NS4_IPKiS1_EET_SA_1000
_ZNSt6vectorIdSaIdEE20_M_allocate_and_copyIN9__gnu_cxx17__normal_iteratorIPKdS1_EEEEPdmT_S9_4218
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE20_M_allocate_and_copyINS3_IPKSC_SE_EEEEPSC_mT_SK_0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE20_M_allocate_and_copyIN9__gnu_cxx17__normal_iteratorIPKS2_S4_EEEEPS2_mT_SC_0
_ZNSt6vectorIS_IfSaIfEESaIS1_EE20_M_allocate_and_copyIN9__gnu_cxx17__normal_iteratorIPKS1_S3_EEEEPS1_mT_SB_0
_ZNSt6vectorIdSaIdEE20_M_allocate_and_copyIN9__gnu_cxx17__normal_iteratorIPKdS1_EEEEPdmT_S9_12
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE20_M_allocate_and_copyIPKS5_EEPS5_mT_SC_196
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE20_M_allocate_and_copyIN9__gnu_cxx17__normal_iteratorIPKS5_S7_EEEEPS5_mT_SF_576
_ZNSt6vectorIfSaIfEE20_M_allocate_and_copyIN9__gnu_cxx17__normal_iteratorIPKfS1_EEEEPfmT_S9_1068
_ZNSt6vectorIiSaIiEE20_M_allocate_and_copyIN9__gnu_cxx17__normal_iteratorIPKiS1_EEEEPimT_S9_2366
_ZNSt6vectorIfSaIfEE21_M_default_initializeEm4510
_ZNSt6vectorISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EE21_M_default_initializeEm0
_ZNSt6vectorIfSaIfEE21_M_default_initializeEm218
_ZNSt6vectorIS_IiSaIiEESaIS1_EE21_M_default_initializeEm250
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE21_M_default_initializeEm662
_ZNSt6vectorIiSaIiEE21_M_default_initializeEm3380
_ZNSt6vectorIfSaIfEEC2EmRKS0_4510
_ZNSt6vectorISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EEC2EmRKSD_0
_ZNSt6vectorIfSaIfEEC2EmRKS0_218
_ZNSt6vectorIS_IiSaIiEESaIS1_EEC2EmRKS2_250
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2EmRKS6_662
_ZNSt6vectorIiSaIiEEC2EmRKS0_3380
_ZNKSt12_Vector_baseIdSaIdEE13get_allocatorEv5568
_ZNKSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE13get_allocatorEv0
_ZNKSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE13get_allocatorEv252
_ZNKSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE13get_allocatorEv674
_ZNKSt12_Vector_baseIdSaIdEE13get_allocatorEv916
_ZNKSt12_Vector_baseIiSaIiEE13get_allocatorEv3726
_ZNSt6vectorIdSaIdEE14_M_move_assignEOS1_St17integral_constantIbLb1EE5568
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE14_M_move_assignEOSE_St17integral_constantIbLb1EE0
_ZNSt6vectorIS_IiSaIiEESaIS1_EE14_M_move_assignEOS3_St17integral_constantIbLb1EE252
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE14_M_move_assignEOS7_St17integral_constantIbLb1EE674
_ZNSt6vectorIdSaIdEE14_M_move_assignEOS1_St17integral_constantIbLb1EE916
_ZNSt6vectorIiSaIiEE14_M_move_assignEOS1_St17integral_constantIbLb1EE3726
_ZNSt6vectorIdSaIdEEC2ERKS0_5568
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2ERKSD_0
_ZNSt6vectorIS_IiSaIiEESaIS1_EEC2ERKS2_252
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2ERKS6_674
_ZNSt6vectorIdSaIdEEC2ERKS0_916
_ZNSt6vectorIiSaIiEEC2ERKS0_3726
_ZNSt6vectorIdSaIdEEaSEOS1_5568
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEaSEOSE_0
_ZNSt6vectorIS_IiSaIiEESaIS1_EEaSEOS3_252
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEaSEOS7_674
_ZNSt6vectorIdSaIdEEaSEOS1_916
_ZNSt6vectorIiSaIiEEaSEOS1_3726
_ZNSt6vectorIcSaIcEE5eraseEN9__gnu_cxx17__normal_iteratorIPKcS1_EES6_7110
_ZNSt6vectorIcSaIcEE5eraseEN9__gnu_cxx17__normal_iteratorIPKcS1_EES6_0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS2_S4_EES9_12
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS5_S7_EESC_894
_ZNSt6vectorIiSaIiEE5eraseEN9__gnu_cxx17__normal_iteratorIPKiS1_EES6_6204
_ZNSt6vectorIcSaIcEEC2IPcvEET_S4_RKS0_7860
_ZNSt6vectorIcSaIcEEC2IPKcvEET_S5_RKS0_0
_ZNSt6vectorIcSaIcEEC2IPcvEET_S4_RKS0_0
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2IPKPKcvEET_SD_RKS6_4
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2INSt8__detail14_Node_iteratorIS5_Lb1ELb1EEEvEET_SC_RKS6_10
_ZNSt6vectorIdSaIdEEC2IN9__gnu_cxx17__normal_iteratorIPdS1_EEvEET_S7_RKS0_20
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EEC2IPKNS1_6detail8json_refISD_EEvEET_SM_RKSE_114
_ZNSt6vectorIiSaIiEEC2IPivEET_S4_RKS0_366
_ZNSt6vectorIiSaIiEEC2IN9__gnu_cxx17__normal_iteratorIPiS1_EEvEET_S7_RKS0_970
_ZNSt6vectorIfSaIfEEC2IPfvEET_S4_RKS0_2784
_ZNSt6vectorIdSaIdEEC2IPfvEET_S4_RKS0_3592
_ZNKSt6vectorIcSaIcEE6cbeginEv9734
_ZNKSt6vectorIN6loguru8CallbackESaIS1_EE6cbeginEv0
_ZNKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE6cbeginEv0
_ZNKSt6vectorIcSaIcEE6cbeginEv0
_ZNKSt6vectorIhSaIhEE6cbeginEv0
_ZNKSt6vectorIPN8bayesnet4NodeESaIS2_EE6cbeginEv12
_ZNKSt6vectorIdSaIdEE6cbeginEv40
_ZNKSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE6cbeginEv180
_ZNKSt6vectorISt4pairIfS0_IiiEESaIS2_EE6cbeginEv318
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE6cbeginEv1364
_ZNKSt6vectorIiSaIiEE6cbeginEv7820
_ZNSt12_Vector_baseIdSaIdEE17_Vector_impl_data12_M_swap_dataERS2_11136
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE17_Vector_impl_data12_M_swap_dataERSF_0
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE17_Vector_impl_data12_M_swap_dataERS5_504
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_data12_M_swap_dataERS8_1348
_ZNSt12_Vector_baseIdSaIdEE17_Vector_impl_data12_M_swap_dataERS2_1832
_ZNSt12_Vector_baseIiSaIiEE17_Vector_impl_data12_M_swap_dataERS2_7452
_ZNKSt6vectorIdSaIdEE8capacityEv15008
_ZNKSt6vectorIN3c106SymIntESaIS1_EE8capacityEv0
_ZNKSt6vectorIN3c107complexIdEESaIS2_EE8capacityEv0
_ZNKSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE8capacityEv0
_ZNKSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE8capacityEv0
_ZNKSt6vectorIlSaIlEE8capacityEv0
_ZNKSt6vectorIS_IfSaIfEESaIS1_EE8capacityEv6
_ZNKSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE8capacityEv8
_ZNKSt6vectorIPN8bayesnet4NodeESaIS2_EE8capacityEv8
_ZNKSt6vectorIdSaIdEE8capacityEv14
_ZNKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE8capacityEv216
_ZNKSt6vectorIN2at6TensorESaIS1_EE8capacityEv378
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE8capacityEv840
_ZNKSt6vectorIfSaIfEE8capacityEv3728
_ZNKSt6vectorIiSaIiEE8capacityEv9810
_ZNSt12_Vector_baseIdSaIdEE17_Vector_impl_data12_M_copy_dataERKS2_33408
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE17_Vector_impl_data12_M_copy_dataERKSF_0
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE17_Vector_impl_data12_M_copy_dataERKS5_1512
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_data12_M_copy_dataERKS8_4044
_ZNSt12_Vector_baseIdSaIdEE17_Vector_impl_data12_M_copy_dataERKS2_5496
_ZNSt12_Vector_baseIiSaIiEE17_Vector_impl_data12_M_copy_dataERKS2_22356
_ZNSt6vectorIcSaIcEEC2ERKS1_36692
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EEC2ERKSF_0
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EEC2ERKS5_0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2ERKSE_0
_ZNSt6vectorISt4pairIccESaIS1_EEC2ERKS3_0
_ZNSt6vectorIcSaIcEEC2ERKS1_0
_ZNSt6vectorIhSaIhEEC2ERKS1_0
_ZNSt6vectorIlSaIlEEC2ERKS1_10
_ZNSt6vectorIS_IdSaIdEESaIS1_EEC2ERKS3_64
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EEC2ERKS4_116
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEC2ERKS9_212
_ZNSt6vectorISt4pairIiiESaIS1_EEC2ERKS3_512
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2ERKS7_2062
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EEC2ERKS4_2564
_ZNSt6vectorIfSaIfEEC2ERKS1_3728
_ZNSt6vectorIdSaIdEEC2ERKS1_8192
_ZNSt6vectorIiSaIiEEC2ERKS1_19232
_ZNSt6vectorIdSaIdEE5clearEv52740
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE5clearEv0
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE5clearEv0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE5clearEv0
_ZNSt6vectorIS_IfSaIfEESaIS1_EE5clearEv0
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE5clearEv0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE5clearEv4
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE5clearEv68
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE5clearEv116
_ZNSt6vectorIdSaIdEE5clearEv320
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5clearEv634
_ZNSt6vectorIfSaIfEE5clearEv3240
_ZNSt6vectorIlSaIlEE5clearEv14196
_ZNSt6vectorIiSaIiEE5clearEv34162
_ZNSt6vectorIcSaIcEE15_M_erase_at_endEPc59818
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE15_M_erase_at_endEPS1_0
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE15_M_erase_at_endEPSD_0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE15_M_erase_at_endEPSC_0
_ZNSt6vectorIS_IfSaIfEESaIS1_EE15_M_erase_at_endEPS1_0
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE15_M_erase_at_endEPSG_0
_ZNSt6vectorIcSaIcEE15_M_erase_at_endEPc0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE15_M_erase_at_endEPS2_16
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE15_M_erase_at_endEPS5_68
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE15_M_erase_at_endEPS2_116
_ZNSt6vectorIdSaIdEE15_M_erase_at_endEPd320
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE15_M_erase_at_endEPS5_1526
_ZNSt6vectorIfSaIfEE15_M_erase_at_endEPf3240
_ZNSt6vectorIlSaIlEE15_M_erase_at_endEPl14196
_ZNSt6vectorIiSaIiEE15_M_erase_at_endEPi40336
_ZNSt6vectorIdSaIdEE2atEm152668
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE2atEm14
_ZNSt6vectorIiSaIiEE2atEm1070
_ZNSt6vectorIdSaIdEE2atEm151584
_ZNKSt6vectorIdSaIdEE14_M_range_checkEm152800
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE14_M_range_checkEm146
_ZNKSt6vectorIiSaIiEE14_M_range_checkEm1070
_ZNKSt6vectorIdSaIdEE14_M_range_checkEm151584
_ZNSt6vectorIdSaIdEEC2ESt16initializer_listIdERKS0_402458
_ZNSt6vectorIS_IiSaIiEESaIS1_EEC2ESt16initializer_listIS1_ERKS2_8
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEC2ESt16initializer_listIS7_ERKS8_8
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EEC2ESt16initializer_listIS7_ERKS8_8
_ZNSt6vectorIS_IdSaIdEESaIS1_EEC2ESt16initializer_listIS1_ERKS2_36
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2ESt16initializer_listIS5_ERKS6_134
_ZNSt6vectorIiSaIiEEC2ESt16initializer_listIiERKS0_262
_ZNSt6vectorISt4pairIiiESaIS1_EEC2ESt16initializer_listIS1_ERKS2_278
_ZNSt6vectorIdSaIdEEC2ESt16initializer_listIdERKS0_406
_ZNSt6vectorIlSaIlEEC2ESt16initializer_listIlERKS0_401318
_ZNSt6vectorIcSaIcEE19_M_range_initializeIPcEEvT_S4_St20forward_iterator_tag410318
_ZNSt6vectorIcSaIcEE19_M_range_initializeIPKcEEvT_S5_St20forward_iterator_tag0
_ZNSt6vectorIcSaIcEE19_M_range_initializeIPcEEvT_S4_St20forward_iterator_tag0
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE19_M_range_initializeIPKPKcEEvT_SD_St20forward_iterator_tag4
_ZNSt6vectorIS_IiSaIiEESaIS1_EE19_M_range_initializeIPKS1_EEvT_S7_St20forward_iterator_tag8
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE19_M_range_initializeIPKS7_EEvT_SD_St20forward_iterator_tag8
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE19_M_range_initializeIPKS7_EEvT_SD_St20forward_iterator_tag8
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE19_M_range_initializeINSt8__detail14_Node_iteratorIS5_Lb1ELb1EEEEEvT_SC_St20forward_iterator_tag10
_ZNSt6vectorIdSaIdEE19_M_range_initializeIN9__gnu_cxx17__normal_iteratorIPdS1_EEEEvT_S7_St20forward_iterator_tag20
_ZNSt6vectorIS_IdSaIdEESaIS1_EE19_M_range_initializeIPKS1_EEvT_S7_St20forward_iterator_tag36
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE19_M_range_initializeIPKNS1_6detail8json_refISD_EEEEvT_SM_St20forward_iterator_tag114
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE19_M_range_initializeIPKS5_EEvT_SB_St20forward_iterator_tag134
_ZNSt6vectorIiSaIiEE19_M_range_initializeIPKiEEvT_S5_St20forward_iterator_tag262
_ZNSt6vectorISt4pairIiiESaIS1_EE19_M_range_initializeIPKS1_EEvT_S7_St20forward_iterator_tag278
_ZNSt6vectorIiSaIiEE19_M_range_initializeIPiEEvT_S4_St20forward_iterator_tag366
_ZNSt6vectorIdSaIdEE19_M_range_initializeIPKdEEvT_S5_St20forward_iterator_tag406
_ZNSt6vectorIiSaIiEE19_M_range_initializeIN9__gnu_cxx17__normal_iteratorIPiS1_EEEEvT_S7_St20forward_iterator_tag970
_ZNSt6vectorIfSaIfEE19_M_range_initializeIPfEEvT_S4_St20forward_iterator_tag2784
_ZNSt6vectorIdSaIdEE19_M_range_initializeIPfEEvT_S4_St20forward_iterator_tag3592
_ZNSt6vectorIlSaIlEE19_M_range_initializeIPKlEEvT_S5_St20forward_iterator_tag401318
_ZNKSt6vectorIcSaIcEE11_M_data_ptrIcEEPT_S4_415512
_ZNKSt6vectorIcSaIcEE11_M_data_ptrIcEEPT_S4_0
_ZNKSt6vectorIfSaIfEE11_M_data_ptrIfEEPT_S4_274
_ZNKSt6vectorIiSaIiEE11_M_data_ptrIiEEPT_S4_5026
_ZNKSt6vectorIlSaIlEE11_M_data_ptrIlEEPT_S4_14194
_ZNKSt6vectorIdSaIdEE11_M_data_ptrIdEEPT_S4_396018
_ZNKSt6vectorIdSaIdEE4dataEv415512
_ZNKSt6vectorIfSaIfEE4dataEv274
_ZNKSt6vectorIiSaIiEE4dataEv5026
_ZNKSt6vectorIlSaIlEE4dataEv14194
_ZNKSt6vectorIdSaIdEE4dataEv396018
_ZNSt12_Vector_baseIcSaIcEEC2ERKS0_415886
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2ERKSD_0
_ZNSt12_Vector_baseIcSaIcEEC2ERKS0_0
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEC2ERKS8_8
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EEC2ERKS8_8
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EEC2ERKS3_36
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EEC2ERKSF_114
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EEC2ERKS3_260
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EEC2ERKS2_278
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2ERKS6_822
_ZNSt12_Vector_baseIfSaIfEEC2ERKS0_2784
_ZNSt12_Vector_baseIdSaIdEEC2ERKS0_4934
_ZNSt12_Vector_baseIiSaIiEEC2ERKS0_5324
_ZNSt12_Vector_baseIlSaIlEEC2ERKS0_401318
_ZNKSt6vectorIiSaIiEEixEm652780
_ZNKSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEixEm0
_ZNKSt6vectorINSt8__detail6_StateIcEESaIS2_EEixEm0
_ZNKSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EEixEm80
_ZNKSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EEixEm226
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm2466
_ZNKSt6vectorIS_IiSaIiEESaIS1_EEixEm233284
_ZNKSt6vectorIiSaIiEEixEm416724
_ZNSt6vectorIdSaIdEE9push_backERKd796964
_ZNSt6vectorIN2at6TensorESaIS1_EE9push_backERKS1_0
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE9push_backERKS3_0
_ZNSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE9push_backERKS3_0
_ZNSt6vectorImSaImEE9push_backERKm128
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE9push_backERKS2_318
_ZNSt6vectorIS_IiSaIiEESaIS1_EE9push_backERKS1_1722
_ZNSt6vectorIdSaIdEE9push_backERKd2210
_ZNSt6vectorIS_IdSaIdEESaIS1_EE9push_backERKS1_3592
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE9push_backERKS2_49932
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE9push_backERKS5_113248
_ZNSt6vectorIiSaIiEE9push_backERKi625814
_ZNSt6vectorIdSaIdEE18_M_fill_initializeEmRKd2493050
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE18_M_fill_initializeEmRKSC_0
_ZNSt6vectorIS_IdSaIdEESaIS1_EE18_M_fill_initializeEmRKS1_18
_ZNSt6vectorIS_IiSaIiEESaIS1_EE18_M_fill_initializeEmRKS1_130
_ZNSt6vectorIS_IfSaIfEESaIS1_EE18_M_fill_initializeEmRKS1_218
_ZNSt6vectorIdSaIdEE18_M_fill_initializeEmRKd422682
_ZNSt6vectorIiSaIiEE18_M_fill_initializeEmRKi2070002
_ZNSt6vectorIdSaIdEEC2EmRKdRKS0_2493050
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2EmRKSC_RKSD_0
_ZNSt6vectorIS_IdSaIdEESaIS1_EEC2EmRKS1_RKS2_18
_ZNSt6vectorIS_IiSaIiEESaIS1_EEC2EmRKS1_RKS2_130
_ZNSt6vectorIS_IfSaIfEESaIS1_EEC2EmRKS1_RKS2_218
_ZNSt6vectorIdSaIdEEC2EmRKdRKS0_422682
_ZNSt6vectorIiSaIiEEC2EmRKiRKS0_2070002
_ZNSt12_Vector_baseIcSaIcEE17_M_create_storageEm2534464
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EE17_M_create_storageEm0
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE17_M_create_storageEm0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE17_M_create_storageEm0
_ZNSt12_Vector_baseISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EE17_M_create_storageEm0
_ZNSt12_Vector_baseISt4pairIccESaIS1_EE17_M_create_storageEm0
_ZNSt12_Vector_baseIcSaIcEE17_M_create_storageEm0
_ZNSt12_Vector_baseIhSaIhEE17_M_create_storageEm0
_ZNSt12_Vector_baseIlSaIlEE17_M_create_storageEm10
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE17_M_create_storageEm82
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EE17_M_create_storageEm116
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE17_M_create_storageEm212
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EE17_M_create_storageEm218
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE17_M_create_storageEm380
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EE17_M_create_storageEm512
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EE17_M_create_storageEm2564
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_create_storageEm2936
_ZNSt12_Vector_baseIfSaIfEE17_M_create_storageEm3946
_ZNSt12_Vector_baseIdSaIdEE17_M_create_storageEm430874
_ZNSt12_Vector_baseIiSaIiEE17_M_create_storageEm2092614
_ZNSt12_Vector_baseIcSaIcEEC2EmRKS0_2534464
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EEC2EmRKSF_0
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EEC2EmRKS4_0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2EmRKSD_0
_ZNSt12_Vector_baseISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EEC2EmRKSD_0
_ZNSt12_Vector_baseISt4pairIccESaIS1_EEC2EmRKS2_0
_ZNSt12_Vector_baseIcSaIcEEC2EmRKS0_0
_ZNSt12_Vector_baseIhSaIhEEC2EmRKS0_0
_ZNSt12_Vector_baseIlSaIlEEC2EmRKS0_10
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EEC2EmRKS3_82
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EEC2EmRKS3_116
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEC2EmRKS8_212
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EEC2EmRKS3_218
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EEC2EmRKS3_380
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EEC2EmRKS2_512
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EEC2EmRKS3_2564
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2EmRKS6_2936
_ZNSt12_Vector_baseIfSaIfEEC2EmRKS0_3946
_ZNSt12_Vector_baseIdSaIdEEC2EmRKS0_430874
_ZNSt12_Vector_baseIiSaIiEEC2EmRKS0_2092614
_ZNSt6vectorIcSaIcEE17_S_check_init_lenEmRKS0_2908286
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE17_S_check_init_lenEmRKSD_0
_ZNSt6vectorISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EE17_S_check_init_lenEmRKSD_0
_ZNSt6vectorIcSaIcEE17_S_check_init_lenEmRKS0_0
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE17_S_check_init_lenEmRKS8_8
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE17_S_check_init_lenEmRKS8_8
_ZNSt6vectorIS_IdSaIdEESaIS1_EE17_S_check_init_lenEmRKS2_54
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE17_S_check_init_lenEmRKSE_114
_ZNSt6vectorIS_IfSaIfEESaIS1_EE17_S_check_init_lenEmRKS2_218
_ZNSt6vectorISt4pairIiiESaIS1_EE17_S_check_init_lenEmRKS2_278
_ZNSt6vectorIS_IiSaIiEESaIS1_EE17_S_check_init_lenEmRKS2_388
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_S_check_init_lenEmRKS6_1218
_ZNSt6vectorIfSaIfEE17_S_check_init_lenEmRKS0_3002
_ZNSt6vectorIlSaIlEE17_S_check_init_lenEmRKS0_401318
_ZNSt6vectorIdSaIdEE17_S_check_init_lenEmRKS0_426700
_ZNSt6vectorIiSaIiEE17_S_check_init_lenEmRKS0_2074980
_ZNSt12_Vector_baseIcSaIcEE12_Vector_implC2ERKS0_2950562
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE12_Vector_implC2ERKS4_0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE12_Vector_implC2ERKSD_0
_ZNSt12_Vector_baseISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EE12_Vector_implC2ERKSD_0
_ZNSt12_Vector_baseISt4pairIccESaIS1_EE12_Vector_implC2ERKS2_0
_ZNSt12_Vector_baseIcSaIcEE12_Vector_implC2ERKS0_0
_ZNSt12_Vector_baseIhSaIhEE12_Vector_implC2ERKS0_0
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE12_Vector_implC2ERKS8_8
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EE12_Vector_implC2ERKSF_114
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EE12_Vector_implC2ERKS3_116
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE12_Vector_implC2ERKS3_118
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE12_Vector_implC2ERKS8_220
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EE12_Vector_implC2ERKS3_430
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE12_Vector_implC2ERKS3_640
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EE12_Vector_implC2ERKS2_790
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EE12_Vector_implC2ERKS3_2564
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_Vector_implC2ERKS6_3758
_ZNSt12_Vector_baseIfSaIfEE12_Vector_implC2ERKS0_6730
_ZNSt12_Vector_baseIlSaIlEE12_Vector_implC2ERKS0_401328
_ZNSt12_Vector_baseIdSaIdEE12_Vector_implC2ERKS0_435808
_ZNSt12_Vector_baseIiSaIiEE12_Vector_implC2ERKS0_2097938
_ZNKSt6vectorIcSaIcEE3endEv19136360
_ZNKSt6vectorIN3c106IValueESaIS1_EE3endEv0
_ZNKSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE3endEv0
_ZNKSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE3endEv0
_ZNKSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE3endEv0
_ZNKSt6vectorISt4pairIccESaIS1_EE3endEv0
_ZNKSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE3endEv0
_ZNKSt6vectorIcSaIcEE3endEv0
_ZNKSt6vectorIhSaIhEE3endEv0
_ZNKSt6vectorIS_IfSaIfEESaIS1_EE3endEv6
_ZNKSt6vectorIlSaIlEE3endEv10
_ZNKSt6vectorIS_IdSaIdEESaIS1_EE3endEv64
_ZNKSt6vectorISt4pairIfS0_IiiEESaIS2_EE3endEv116
_ZNKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE3endEv440
_ZNKSt6vectorISt4pairIiiESaIS1_EE3endEv544
_ZNKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE3endEv576
_ZNKSt6vectorIPN8bayesnet4NodeESaIS2_EE3endEv2572
_ZNKSt6vectorIdSaIdEE3endEv8206
_ZNKSt6vectorIfSaIfEE3endEv14540
_ZNKSt6vectorIiSaIiEE3endEv27608
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE3endEv19081678
_ZNKSt6vectorIcSaIcEE5beginEv19136520
_ZNKSt6vectorIN3c106IValueESaIS1_EE5beginEv0
_ZNKSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE5beginEv0
_ZNKSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE5beginEv0
_ZNKSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE5beginEv0
_ZNKSt6vectorISt4pairIccESaIS1_EE5beginEv0
_ZNKSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE5beginEv0
_ZNKSt6vectorIcSaIcEE5beginEv0
_ZNKSt6vectorIhSaIhEE5beginEv0
_ZNKSt6vectorIS_IfSaIfEESaIS1_EE5beginEv6
_ZNKSt6vectorIlSaIlEE5beginEv10
_ZNKSt6vectorIS_IdSaIdEESaIS1_EE5beginEv64
_ZNKSt6vectorISt4pairIfS0_IiiEESaIS2_EE5beginEv116
_ZNKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE5beginEv456
_ZNKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE5beginEv576
_ZNKSt6vectorISt4pairIiiESaIS1_EE5beginEv576
_ZNKSt6vectorIPN8bayesnet4NodeESaIS2_EE5beginEv2572
_ZNKSt6vectorIdSaIdEE5beginEv8206
_ZNKSt6vectorIfSaIfEE5beginEv14540
_ZNKSt6vectorIiSaIiEE5beginEv27652
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5beginEv19081746
_ZNSt12_Vector_baseIcSaIcEE12_Vector_implC2EOS2_36989286
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE12_Vector_implC2EOS6_0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE12_Vector_implC2EOSF_0
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE12_Vector_implC2EOSA_0
_ZNSt12_Vector_baseISt4pairIccESaIS1_EE12_Vector_implC2EOS4_0
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EE12_Vector_implC2EOSK_0
_ZNSt12_Vector_baseIcSaIcEE12_Vector_implC2EOS2_0
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_Vector_implC2EOS8_2
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE12_Vector_implC2EOS8_8
_ZNSt12_Vector_baseIiSaIiEE12_Vector_implC2EOS2_1932
_ZNSt12_Vector_baseIdSaIdEE12_Vector_implC2EOS2_61920
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EE12_Vector_implC2EOS4_36925424
_ZNSt12_Vector_baseIcSaIcEE17_Vector_impl_dataC2EOS2_36989286
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE17_Vector_impl_dataC2EOS6_0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE17_Vector_impl_dataC2EOSF_0
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE17_Vector_impl_dataC2EOSA_0
_ZNSt12_Vector_baseISt4pairIccESaIS1_EE17_Vector_impl_dataC2EOS4_0
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EE17_Vector_impl_dataC2EOSK_0
_ZNSt12_Vector_baseIcSaIcEE17_Vector_impl_dataC2EOS2_0
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_dataC2EOS8_2
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE17_Vector_impl_dataC2EOS8_8
_ZNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataC2EOS2_1932
_ZNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataC2EOS2_61920
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EE17_Vector_impl_dataC2EOS4_36925424
_ZNSt12_Vector_baseIcSaIcEEC2EOS1_36989286
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EEC2EOS5_0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2EOSE_0
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEC2EOS9_0
_ZNSt12_Vector_baseISt4pairIccESaIS1_EEC2EOS3_0
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EEC2EOSJ_0
_ZNSt12_Vector_baseIcSaIcEEC2EOS1_0
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2EOS7_2
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EEC2EOS7_8
_ZNSt12_Vector_baseIiSaIiEEC2EOS1_1932
_ZNSt12_Vector_baseIdSaIdEEC2EOS1_61920
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EEC2EOS3_36925424
_ZNSt6vectorIcSaIcEEC2EOS1_36989286
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EEC2EOS5_0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2EOSE_0
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEC2EOS9_0
_ZNSt6vectorISt4pairIccESaIS1_EEC2EOS3_0
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EEC2EOSI_0
_ZNSt6vectorIcSaIcEEC2EOS1_0
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2EOS7_2
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EEC2EOS7_8
_ZNSt6vectorIiSaIiEEC2EOS1_1932
_ZNSt6vectorIdSaIdEEC2EOS1_61920
_ZNSt6vectorIN3c106IValueESaIS1_EEC2EOS3_36925424
_ZNSt12_Vector_baseIcSaIcEE12_Vector_implC2Ev37394404
_ZNSt12_Vector_baseIN2at6TensorESaIS1_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseIN3c106SymIntESaIS1_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseIN3c107complexIdEESaIS2_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseIN3c108optionalIN2at6TensorEEESaIS4_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseINSt8__detail6_StateIcEESaIS2_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseIPKN6loguru11EcEntryBaseESaIS3_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EESaIS6_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseISt4pairIccESaIS1_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseIcSaIcEE12_Vector_implC2Ev0
_ZNSt12_Vector_baseIhSaIhEE12_Vector_implC2Ev0
_ZNSt12_Vector_baseIN6loguru8CallbackESaIS1_EE12_Vector_implC2Ev2
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE12_Vector_implC2Ev8
_ZNSt12_Vector_baseISt4pairIifESaIS1_EE12_Vector_implC2Ev26
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EE12_Vector_implC2Ev116
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE12_Vector_implC2Ev142
_ZNSt12_Vector_baseISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE12_Vector_implC2Ev170
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EE12_Vector_implC2Ev216
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EE12_Vector_implC2Ev374
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE12_Vector_implC2Ev462
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EE12_Vector_implC2Ev874
_ZNSt12_Vector_baseImSaImEE12_Vector_implC2Ev1072
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE12_Vector_implC2Ev1086
_ZNSt12_Vector_baseIdSaIdEE12_Vector_implC2Ev2214
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_Vector_implC2Ev6682
_ZNSt12_Vector_baseIiSaIiEE12_Vector_implC2Ev12550
_ZNSt12_Vector_baseIlSaIlEE12_Vector_implC2Ev13392
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EE12_Vector_implC2Ev26784
_ZNSt12_Vector_baseISt6threadSaIS0_EE12_Vector_implC2Ev402810
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EE12_Vector_implC2Ev36925424
_ZNSt12_Vector_baseIcSaIcEEC2Ev37394404
_ZNSt12_Vector_baseIN2at6TensorESaIS1_EEC2Ev0
_ZNSt12_Vector_baseIN3c106SymIntESaIS1_EEC2Ev0
_ZNSt12_Vector_baseIN3c107complexIdEESaIS2_EEC2Ev0
_ZNSt12_Vector_baseIN3c108optionalIN2at6TensorEEESaIS4_EEC2Ev0
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EEC2Ev0
_ZNSt12_Vector_baseINSt8__detail6_StateIcEESaIS2_EEC2Ev0
_ZNSt12_Vector_baseIPKN6loguru11EcEntryBaseESaIS3_EEC2Ev0
_ZNSt12_Vector_baseISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EESaIS6_EEC2Ev0
_ZNSt12_Vector_baseISt4pairIccESaIS1_EEC2Ev0
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EEC2Ev0
_ZNSt12_Vector_baseIcSaIcEEC2Ev0
_ZNSt12_Vector_baseIhSaIhEEC2Ev0
_ZNSt12_Vector_baseIN6loguru8CallbackESaIS1_EEC2Ev2
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EEC2Ev8
_ZNSt12_Vector_baseISt4pairIifESaIS1_EEC2Ev26
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EEC2Ev116
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EEC2Ev142
_ZNSt12_Vector_baseISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EEC2Ev170
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EEC2Ev216
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EEC2Ev374
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EEC2Ev462
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EEC2Ev874
_ZNSt12_Vector_baseImSaImEEC2Ev1072
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEC2Ev1086
_ZNSt12_Vector_baseIdSaIdEEC2Ev2214
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev6682
_ZNSt12_Vector_baseIiSaIiEEC2Ev12550
_ZNSt12_Vector_baseIlSaIlEEC2Ev13392
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EEC2Ev26784
_ZNSt12_Vector_baseISt6threadSaIS0_EEC2Ev402810
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EEC2Ev36925424
_ZNSt6vectorIcSaIcEEC2Ev37394404
_ZNSt6vectorIN2at6TensorESaIS1_EEC2Ev0
_ZNSt6vectorIN3c106SymIntESaIS1_EEC2Ev0
_ZNSt6vectorIN3c107complexIdEESaIS2_EEC2Ev0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EEC2Ev0
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EEC2Ev0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EEC2Ev0
_ZNSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EEC2Ev0
_ZNSt6vectorISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EESaIS6_EEC2Ev0
_ZNSt6vectorISt4pairIccESaIS1_EEC2Ev0
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EEC2Ev0
_ZNSt6vectorIcSaIcEEC2Ev0
_ZNSt6vectorIhSaIhEEC2Ev0
_ZNSt6vectorIN6loguru8CallbackESaIS1_EEC2Ev2
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EEC2Ev8
_ZNSt6vectorISt4pairIifESaIS1_EEC2Ev26
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EEC2Ev116
_ZNSt6vectorIS_IdSaIdEESaIS1_EEC2Ev142
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EEC2Ev170
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EEC2Ev216
_ZNSt6vectorISt4pairIiiESaIS1_EEC2Ev374
_ZNSt6vectorIS_IiSaIiEESaIS1_EEC2Ev462
_ZNSt6vectorIS_IfSaIfEESaIS1_EEC2Ev874
_ZNSt6vectorImSaImEEC2Ev1072
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEC2Ev1086
_ZNSt6vectorIdSaIdEEC2Ev2214
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev6682
_ZNSt6vectorIiSaIiEEC2Ev12550
_ZNSt6vectorIlSaIlEEC2Ev13392
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EEC2Ev26784
_ZNSt6vectorISt6threadSaIS0_EEC2Ev402810
_ZNSt6vectorIN3c106IValueESaIS1_EEC2Ev36925424
_ZNSt12_Vector_baseIcSaIcEE17_Vector_impl_dataC2Ev40371622
_ZNSt12_Vector_baseIN2at6TensorESaIS1_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseIN3c106SymIntESaIS1_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseIN3c107complexIdEESaIS2_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseIN3c108optionalIN2at6TensorEEESaIS4_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseINSt8__detail6_StateIcEESaIS2_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseIPKN6loguru11EcEntryBaseESaIS3_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EESaIS6_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseISt4pairIccESaIS1_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseIcSaIcEE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseIhSaIhEE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseIN6loguru8CallbackESaIS1_EE17_Vector_impl_dataC2Ev2
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE17_Vector_impl_dataC2Ev8
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE17_Vector_impl_dataC2Ev8
_ZNSt12_Vector_baseISt4pairIifESaIS1_EE17_Vector_impl_dataC2Ev26
_ZNSt12_Vector_baseISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataC2Ev170
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EE17_Vector_impl_dataC2Ev232
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE17_Vector_impl_dataC2Ev260
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EE17_Vector_impl_dataC2Ev330
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EE17_Vector_impl_dataC2Ev1164
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE17_Vector_impl_dataC2Ev1306
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE17_Vector_impl_dataC2Ev1606
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EE17_Vector_impl_dataC2Ev1728
_ZNSt12_Vector_baseIfSaIfEE17_Vector_impl_dataC2Ev8866
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_dataC2Ev11788
_ZNSt12_Vector_baseImSaImEE17_Vector_impl_dataC2Ev14032
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EE17_Vector_impl_dataC2Ev29348
_ZNSt12_Vector_baseISt6threadSaIS0_EE17_Vector_impl_dataC2Ev402810
_ZNSt12_Vector_baseIlSaIlEE17_Vector_impl_dataC2Ev414720
_ZNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataC2Ev439854
_ZNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataC2Ev2117940
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EE17_Vector_impl_dataC2Ev36925424
_ZNKSt6vectorIcSaIcEE12_M_check_lenEmPKc106548050
_ZNKSt6vectorIN2at6TensorESaIS1_EE12_M_check_lenEmPKc0
_ZNKSt6vectorIN3c106SymIntESaIS1_EE12_M_check_lenEmPKc0
_ZNKSt6vectorIN3c107complexIdEESaIS2_EE12_M_check_lenEmPKc0
_ZNKSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE12_M_check_lenEmPKc0
_ZNKSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE12_M_check_lenEmS4_0
_ZNKSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE12_M_check_lenEmPKc0
_ZNKSt6vectorINSt8__detail6_StateIcEESaIS2_EE12_M_check_lenEmPKc0
_ZNKSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE12_M_check_lenEmPKc0
_ZNKSt6vectorISt4pairIccESaIS1_EE12_M_check_lenEmPKc0
_ZNKSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE12_M_check_lenEmS6_0
_ZNKSt6vectorIcSaIcEE12_M_check_lenEmPKc0
_ZNKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE12_M_check_lenEmPKc2
_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc4
_ZNKSt6vectorIN6loguru8CallbackESaIS1_EE12_M_check_lenEmPKc12
_ZNKSt6vectorISt4pairIifESaIS1_EE12_M_check_lenEmPKc94
_ZNKSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE12_M_check_lenEmPKc240
_ZNKSt6vectorISt4pairIfS0_IiiEESaIS2_EE12_M_check_lenEmPKc526
_ZNKSt6vectorIS_IiSaIiEESaIS1_EE12_M_check_lenEmPKc798
_ZNKSt6vectorIdSaIdEE12_M_check_lenEmPKc1154
_ZNKSt6vectorISt4pairIiiESaIS1_EE12_M_check_lenEmPKc1222
_ZNKSt6vectorIS_IdSaIdEESaIS1_EE12_M_check_lenEmPKc1272
_ZNKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE12_M_check_lenEmPKc2078
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_M_check_lenEmPKc8674
_ZNKSt6vectorIPN8bayesnet4NodeESaIS2_EE12_M_check_lenEmPKc30284
_ZNKSt6vectorIlSaIlEE12_M_check_lenEmPKc38138
_ZNKSt6vectorIiSaIiEE12_M_check_lenEmPKc57100
_ZNKSt6vectorISt6threadSaIS0_EE12_M_check_lenEmPKc1236832
_ZNKSt6vectorIN3c106IValueESaIS1_EE12_M_check_lenEmPKc105169620
_ZNSt6vectorIcSaIcEE9push_backEOc106894892
_ZNSt6vectorIN3c106SymIntESaIS1_EE9push_backEOS1_0
_ZNSt6vectorIN3c107complexIdEESaIS2_EE9push_backEOS2_0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE9push_backEOS4_0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EE9push_backEOS2_0
_ZNSt6vectorISt4pairIccESaIS1_EE9push_backEOS1_0
_ZNSt6vectorIcSaIcEE9push_backEOc0
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE9push_backEOS1_46
_ZNSt6vectorISt4pairIifESaIS1_EE9push_backEOS1_152
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE9push_backEOSD_360
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE9push_backEOS5_546
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE9push_backEOS2_1152
_ZNSt6vectorISt6threadSaIS0_EE9push_backEOS0_1392
_ZNSt6vectorISt4pairIiiESaIS1_EE9push_backEOS1_2088
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE9push_backEOS5_4042
_ZNSt6vectorIdSaIdEE9push_backEOd5414
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE9push_backEOS7_6950
_ZNSt6vectorIS_IdSaIdEESaIS1_EE9push_backEOS1_24670
_ZNSt6vectorIlSaIlEE9push_backEOl40554
_ZNSt6vectorIiSaIiEE9push_backEOi1531150
_ZNSt6vectorIN3c106IValueESaIS1_EE9push_backEOS1_105276376
_ZNSt6vectorIcSaIcEE4backEv108540416
_ZNSt6vectorIN3c106SymIntESaIS1_EE4backEv0
_ZNSt6vectorIN3c107complexIdEESaIS2_EE4backEv0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE4backEv0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EE4backEv0
_ZNSt6vectorISt4pairIccESaIS1_EE4backEv0
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE4backEv0
_ZNSt6vectorIcSaIcEE4backEv0
_ZNSt6vectorIhSaIhEE4backEv0
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE4backEv40
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE4backEv46
_ZNSt6vectorImSaImEE4backEv124
_ZNSt6vectorISt4pairIifESaIS1_EE4backEv152
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE4backEv546
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE4backEv720
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE4backEv1152
_ZNSt6vectorISt4pairIiiESaIS1_EE4backEv2088
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4backEv5006
_ZNSt6vectorIdSaIdEE4backEv5414
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE4backEv9300
_ZNSt6vectorIS_IdSaIdEESaIS1_EE4backEv24670
_ZNSt6vectorIlSaIlEE4backEv40554
_ZNSt6vectorIiSaIiEE4backEv1568494
_ZNSt6vectorISt6threadSaIS0_EE4backEv1605734
_ZNSt6vectorIN3c106IValueESaIS1_EE4backEv105276376
_ZNSt12_Vector_baseIcSaIcEE11_M_allocateEm109542904
_ZNSt12_Vector_baseIN3c106SymIntESaIS1_EE11_M_allocateEm0
_ZNSt12_Vector_baseIN3c107complexIdEESaIS2_EE11_M_allocateEm0
_ZNSt12_Vector_baseIN3c108optionalIN2at6TensorEEESaIS4_EE11_M_allocateEm0
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE11_M_allocateEm0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE11_M_allocateEm0
_ZNSt12_Vector_baseINSt8__detail6_StateIcEESaIS2_EE11_M_allocateEm0
_ZNSt12_Vector_baseIPKN6loguru11EcEntryBaseESaIS3_EE11_M_allocateEm0
_ZNSt12_Vector_baseISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EE11_M_allocateEm0
_ZNSt12_Vector_baseISt4pairIccESaIS1_EE11_M_allocateEm0
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EE11_M_allocateEm0
_ZNSt12_Vector_baseIcSaIcEE11_M_allocateEm0
_ZNSt12_Vector_baseIhSaIhEE11_M_allocateEm0
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE11_M_allocateEm8
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE11_M_allocateEm8
_ZNSt12_Vector_baseIN6loguru8CallbackESaIS1_EE11_M_allocateEm12
_ZNSt12_Vector_baseISt4pairIifESaIS1_EE11_M_allocateEm94
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EE11_M_allocateEm218
_ZNSt12_Vector_baseISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE11_M_allocateEm240
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EE11_M_allocateEm278
_ZNSt12_Vector_baseIN2at6TensorESaIS1_EE11_M_allocateEm378
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EE11_M_allocateEm642
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE11_M_allocateEm1186
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE11_M_allocateEm1390
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EE11_M_allocateEm2012
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE11_M_allocateEm2298
_ZNSt12_Vector_baseIfSaIfEE11_M_allocateEm10578
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE11_M_allocateEm12530
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EE11_M_allocateEm32848
_ZNSt12_Vector_baseImSaImEE11_M_allocateEm40588
_ZNSt12_Vector_baseIdSaIdEE11_M_allocateEm436058
_ZNSt12_Vector_baseIlSaIlEE11_M_allocateEm439466
_ZNSt12_Vector_baseISt6threadSaIS0_EE11_M_allocateEm1236832
_ZNSt12_Vector_baseIiSaIiEE11_M_allocateEm2155620
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EE11_M_allocateEm105169620
_ZNSt6vectorIcSaIcEE5beginEv149583868
_ZNSt6vectorIN2at6TensorESaIS1_EE5beginEv0
_ZNSt6vectorIN3c106SymIntESaIS1_EE5beginEv0
_ZNSt6vectorIN3c107complexIdEESaIS2_EE5beginEv0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE5beginEv0
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE5beginEv0
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE5beginEv0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE5beginEv0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EE5beginEv0
_ZNSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE5beginEv0
_ZNSt6vectorISt4pairIccESaIS1_EE5beginEv0
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE5beginEv0
_ZNSt6vectorIcSaIcEE5beginEv0
_ZNSt6vectorIS_IfSaIfEESaIS1_EE5beginEv6
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE5beginEv8
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE5beginEv120
_ZNSt6vectorISt4pairIifESaIS1_EE5beginEv120
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE5beginEv550
_ZNSt6vectorIS_IiSaIiEESaIS1_EE5beginEv798
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE5beginEv1220
_ZNSt6vectorIS_IdSaIdEESaIS1_EE5beginEv1272
_ZNSt6vectorISt4pairIiiESaIS1_EE5beginEv1560
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE5beginEv2374
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE5beginEv3576
_ZNSt6vectorImSaImEE5beginEv6484
_ZNSt6vectorIlSaIlEE5beginEv38138
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5beginEv54496
_ZNSt6vectorIdSaIdEE5beginEv1299684
_ZNSt6vectorIiSaIiEE5beginEv1449540
_ZNSt6vectorISt6threadSaIS0_EE5beginEv1639642
_ZNSt6vectorIfSaIfEE5beginEv2908608
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE5beginEv37006052
_ZNSt6vectorIN3c106IValueESaIS1_EE5beginEv105169620
_ZNSt6vectorIcSaIcEE11_S_relocateEPcS2_S2_RS0_213096698
_ZNSt6vectorIN3c106SymIntESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_0
_ZNSt6vectorIN3c107complexIdEESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE11_S_relocateEPS4_S7_S7_RS5_0
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE11_S_relocateEPS3_S6_S6_RS4_0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_0
_ZNSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE11_S_relocateEPS3_S6_S6_RS4_0
_ZNSt6vectorISt4pairIccESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_0
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE11_S_relocateEPSG_SJ_SJ_RSH_0
_ZNSt6vectorIcSaIcEE11_S_relocateEPcS2_S2_RS0_0
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE11_S_relocateEPS5_S8_S8_RS6_8
_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_8
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_24
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE11_S_relocateEPSD_SG_SG_RSE_166
_ZNSt6vectorISt4pairIifESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_188
_ZNSt6vectorIN2at6TensorESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_378
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE11_S_relocateEPS5_S8_S8_RS6_480
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_1052
_ZNSt6vectorIS_IiSaIiEESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_1596
_ZNSt6vectorIdSaIdEE11_S_relocateEPdS2_S2_RS0_2308
_ZNSt6vectorISt4pairIiiESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_2444
_ZNSt6vectorIS_IdSaIdEESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_2544
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE11_S_relocateEPS7_SA_SA_RS8_4156
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE11_S_relocateEPS5_S8_S8_RS6_16968
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_60568
_ZNSt6vectorIlSaIlEE11_S_relocateEPlS2_S2_RS0_76276
_ZNSt6vectorIiSaIiEE11_S_relocateEPiS2_S2_RS0_114630
_ZNSt6vectorISt6threadSaIS0_EE11_S_relocateEPS0_S3_S3_RS1_2473664
_ZNSt6vectorIN3c106IValueESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_210339240
_ZNKSt6vectorIcSaIcEE8max_sizeEv213101420
_ZNKSt6vectorIN3c106SymIntESaIS1_EE8max_sizeEv0
_ZNKSt6vectorIN3c107complexIdEESaIS2_EE8max_sizeEv0
_ZNKSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE8max_sizeEv0
_ZNKSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE8max_sizeEv0
_ZNKSt6vectorINSt8__detail6_StateIcEESaIS2_EE8max_sizeEv0
_ZNKSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE8max_sizeEv0
_ZNKSt6vectorISt4pairIccESaIS1_EE8max_sizeEv0
_ZNKSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE8max_sizeEv0
_ZNKSt6vectorIcSaIcEE8max_sizeEv0
_ZNKSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE8max_sizeEv8
_ZNKSt6vectorImSaImEE8max_sizeEv8
_ZNKSt6vectorIN6loguru8CallbackESaIS1_EE8max_sizeEv24
_ZNKSt6vectorISt4pairIifESaIS1_EE8max_sizeEv188
_ZNKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE8max_sizeEv220
_ZNKSt6vectorIN2at6TensorESaIS1_EE8max_sizeEv378
_ZNKSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE8max_sizeEv480
_ZNKSt6vectorISt4pairIfS0_IiiEESaIS2_EE8max_sizeEv1052
_ZNKSt6vectorIS_IiSaIiEESaIS1_EE8max_sizeEv1596
_ZNKSt6vectorIdSaIdEE8max_sizeEv2308
_ZNKSt6vectorISt4pairIiiESaIS1_EE8max_sizeEv2444
_ZNKSt6vectorIS_IdSaIdEESaIS1_EE8max_sizeEv2544
_ZNKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE8max_sizeEv4156
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE8max_sizeEv17348
_ZNKSt6vectorIPN8bayesnet4NodeESaIS2_EE8max_sizeEv60568
_ZNKSt6vectorIlSaIlEE8max_sizeEv76276
_ZNKSt6vectorIiSaIiEE8max_sizeEv118918
_ZNKSt6vectorISt6threadSaIS0_EE8max_sizeEv2473664
_ZNKSt6vectorIN3c106IValueESaIS1_EE8max_sizeEv210339240
_ZNKSt12_Vector_baseIcSaIcEE19_M_get_Tp_allocatorEv213152692
_ZNKSt12_Vector_baseIN3c106SymIntESaIS1_EE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseIN3c107complexIdEESaIS2_EE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseIN3c108optionalIN2at6TensorEEESaIS4_EE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseINSt8__detail6_StateIcEESaIS2_EE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseIPKN6loguru11EcEntryBaseESaIS3_EE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseISt4pairIccESaIS1_EE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseIcSaIcEE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseIhSaIhEE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE19_M_get_Tp_allocatorEv8
_ZNKSt12_Vector_baseIN6loguru8CallbackESaIS1_EE19_M_get_Tp_allocatorEv24
_ZNKSt12_Vector_baseISt4pairIifESaIS1_EE19_M_get_Tp_allocatorEv188
_ZNKSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EE19_M_get_Tp_allocatorEv212
_ZNKSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EE19_M_get_Tp_allocatorEv220
_ZNKSt12_Vector_baseIN2at6TensorESaIS1_EE19_M_get_Tp_allocatorEv378
_ZNKSt12_Vector_baseISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE19_M_get_Tp_allocatorEv480
_ZNKSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EE19_M_get_Tp_allocatorEv1168
_ZNKSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE19_M_get_Tp_allocatorEv1848
_ZNKSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE19_M_get_Tp_allocatorEv2608
_ZNKSt12_Vector_baseISt4pairIiiESaIS1_EE19_M_get_Tp_allocatorEv2956
_ZNKSt12_Vector_baseImSaImEE19_M_get_Tp_allocatorEv3248
_ZNKSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE19_M_get_Tp_allocatorEv4368
_ZNKSt12_Vector_baseIfSaIfEE19_M_get_Tp_allocatorEv9288
_ZNKSt12_Vector_baseIdSaIdEE19_M_get_Tp_allocatorEv11416
_ZNKSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE19_M_get_Tp_allocatorEv20084
_ZNKSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EE19_M_get_Tp_allocatorEv63132
_ZNKSt12_Vector_baseIlSaIlEE19_M_get_Tp_allocatorEv76286
_ZNKSt12_Vector_baseIiSaIiEE19_M_get_Tp_allocatorEv141876
_ZNKSt12_Vector_baseISt6threadSaIS0_EE19_M_get_Tp_allocatorEv2473664
_ZNKSt12_Vector_baseIN3c106IValueESaIS1_EE19_M_get_Tp_allocatorEv210339240
_ZNSt6vectorIcSaIcEE11_S_max_sizeERKS0_216018506
_ZNSt6vectorIN3c106SymIntESaIS1_EE11_S_max_sizeERKS2_0
_ZNSt6vectorIN3c107complexIdEESaIS2_EE11_S_max_sizeERKS3_0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE11_S_max_sizeERKS5_0
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE11_S_max_sizeERKS4_0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE11_S_max_sizeERKSD_0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EE11_S_max_sizeERKS3_0
_ZNSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE11_S_max_sizeERKS4_0
_ZNSt6vectorISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EE11_S_max_sizeERKSD_0
_ZNSt6vectorISt4pairIccESaIS1_EE11_S_max_sizeERKS2_0
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE11_S_max_sizeERKSH_0
_ZNSt6vectorIcSaIcEE11_S_max_sizeERKS0_0
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE11_S_max_sizeERKS6_8
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE11_S_max_sizeERKS8_8
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE11_S_max_sizeERKS2_24
_ZNSt6vectorISt4pairIifESaIS1_EE11_S_max_sizeERKS2_188
_ZNSt6vectorIS_IfSaIfEESaIS1_EE11_S_max_sizeERKS2_218
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE11_S_max_sizeERKSE_334
_ZNSt6vectorIN2at6TensorESaIS1_EE11_S_max_sizeERKS2_378
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE11_S_max_sizeERKS6_480
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE11_S_max_sizeERKS3_1052
_ZNSt6vectorIS_IiSaIiEESaIS1_EE11_S_max_sizeERKS2_1984
_ZNSt6vectorIS_IdSaIdEESaIS1_EE11_S_max_sizeERKS2_2598
_ZNSt6vectorISt4pairIiiESaIS1_EE11_S_max_sizeERKS2_2722
_ZNSt6vectorImSaImEE11_S_max_sizeERKS0_3248
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE11_S_max_sizeERKS8_4164
_ZNSt6vectorIfSaIfEE11_S_max_sizeERKS0_8562
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE11_S_max_sizeERKS6_18566
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE11_S_max_sizeERKS3_60568
_ZNSt6vectorIdSaIdEE11_S_max_sizeERKS0_429008
_ZNSt6vectorIlSaIlEE11_S_max_sizeERKS0_477594
_ZNSt6vectorIiSaIiEE11_S_max_sizeERKS0_2193898
_ZNSt6vectorISt6threadSaIS0_EE11_S_max_sizeERKS1_2473664
_ZNSt6vectorIN3c106IValueESaIS1_EE11_S_max_sizeERKS2_210339240
_ZNSt12_Vector_baseIcSaIcEED2Ev227784016
_ZNSt12_Vector_baseIN3c107complexIdEESaIS2_EED2Ev0
_ZNSt12_Vector_baseIN3c108optionalIN2at6TensorEEESaIS4_EED2Ev0
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EED2Ev0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EED2Ev0
_ZNSt12_Vector_baseINSt8__detail6_StateIcEESaIS2_EED2Ev0
_ZNSt12_Vector_baseIPKN6loguru11EcEntryBaseESaIS3_EED2Ev0
_ZNSt12_Vector_baseISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EESaIS6_EED2Ev0
_ZNSt12_Vector_baseISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EED2Ev0
_ZNSt12_Vector_baseISt4pairIccESaIS1_EED2Ev0
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EED2Ev0
_ZNSt12_Vector_baseIcSaIcEED2Ev0
_ZNSt12_Vector_baseIhSaIhEED2Ev0
_ZNSt12_Vector_baseIN6loguru8CallbackESaIS1_EED2Ev2
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EED2Ev8
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EED2Ev16
_ZNSt12_Vector_baseISt4pairIifESaIS1_EED2Ev26
_ZNSt12_Vector_baseISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EED2Ev70
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EED2Ev232
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EED2Ev260
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EED2Ev330
_ZNSt12_Vector_baseIN2at6TensorESaIS1_EED2Ev378
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EED2Ev1102
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EED2Ev1164
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EED2Ev1304
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EED2Ev1306
_ZNSt12_Vector_baseImSaImEED2Ev7544
_ZNSt12_Vector_baseIfSaIfEED2Ev8850
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev8992
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EED2Ev29348
_ZNSt12_Vector_baseISt6threadSaIS0_EED2Ev402810
_ZNSt12_Vector_baseIlSaIlEED2Ev414720
_ZNSt12_Vector_baseIdSaIdEED2Ev499562
_ZNSt12_Vector_baseIiSaIiEED2Ev2112124
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EED2Ev110776272
_ZNSt12_Vector_baseIN3c106SymIntESaIS1_EED2Ev113517596
_ZNSt6vectorIcSaIcEED2Ev227784016
_ZNSt6vectorIN3c107complexIdEESaIS2_EED2Ev0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EED2Ev0
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EED2Ev0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EED2Ev0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EED2Ev0
_ZNSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EED2Ev0
_ZNSt6vectorISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EESaIS6_EED2Ev0
_ZNSt6vectorISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EED2Ev0
_ZNSt6vectorISt4pairIccESaIS1_EED2Ev0
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EED2Ev0
_ZNSt6vectorIcSaIcEED2Ev0
_ZNSt6vectorIhSaIhEED2Ev0
_ZNSt6vectorIN6loguru8CallbackESaIS1_EED2Ev2
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EED2Ev8
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EED2Ev16
_ZNSt6vectorISt4pairIifESaIS1_EED2Ev26
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EED2Ev70
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EED2Ev232
_ZNSt6vectorIS_IdSaIdEESaIS1_EED2Ev260
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EED2Ev330
_ZNSt6vectorIN2at6TensorESaIS1_EED2Ev378
_ZNSt6vectorIS_IiSaIiEESaIS1_EED2Ev1102
_ZNSt6vectorISt4pairIiiESaIS1_EED2Ev1164
_ZNSt6vectorIS_IfSaIfEESaIS1_EED2Ev1304
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EED2Ev1306
_ZNSt6vectorImSaImEED2Ev7544
_ZNSt6vectorIfSaIfEED2Ev8850
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev8992
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EED2Ev29348
_ZNSt6vectorISt6threadSaIS0_EED2Ev402810
_ZNSt6vectorIlSaIlEED2Ev414720
_ZNSt6vectorIdSaIdEED2Ev499562
_ZNSt6vectorIiSaIiEED2Ev2112124
_ZNSt6vectorIN3c106IValueESaIS1_EED2Ev110776272
_ZNSt6vectorIN3c106SymIntESaIS1_EED2Ev113517596
_ZNSt6vectorIcSaIcEE3endEv256238194
_ZNSt6vectorIN2at6TensorESaIS1_EE3endEv0
_ZNSt6vectorIN3c106SymIntESaIS1_EE3endEv0
_ZNSt6vectorIN3c107complexIdEESaIS2_EE3endEv0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE3endEv0
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE3endEv0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE3endEv0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EE3endEv0
_ZNSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE3endEv0
_ZNSt6vectorISt4pairIccESaIS1_EE3endEv0
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE3endEv0
_ZNSt6vectorIcSaIcEE3endEv0
_ZNSt6vectorIhSaIhEE3endEv0
_ZNSt6vectorIS_IfSaIfEESaIS1_EE3endEv6
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE3endEv8
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE3endEv40
_ZNSt6vectorISt4pairIifESaIS1_EE3endEv272
_ZNSt6vectorIS_IiSaIiEESaIS1_EE3endEv798
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE3endEv872
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE3endEv1036
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE3endEv2250
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE3endEv3622
_ZNSt6vectorISt4pairIiiESaIS1_EE3endEv3648
_ZNSt6vectorImSaImEE3endEv6608
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE3endEv11666
_ZNSt6vectorIS_IdSaIdEESaIS1_EE3endEv25942
_ZNSt6vectorIlSaIlEE3endEv78692
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE3endEv86330
_ZNSt6vectorIdSaIdEE3endEv845072
_ZNSt6vectorIfSaIfEE3endEv1458644
_ZNSt6vectorIiSaIiEE3endEv3015240
_ZNSt6vectorISt6threadSaIS0_EE3endEv3245376
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE3endEv37006076
_ZNSt6vectorIN3c106IValueESaIS1_EE3endEv210445996
_ZNSt12_Vector_baseIcSaIcEE13_M_deallocateEPcm334378898
_ZNSt12_Vector_baseIN3c107complexIdEESaIS2_EE13_M_deallocateEPS2_m0
_ZNSt12_Vector_baseIN3c108optionalIN2at6TensorEEESaIS4_EE13_M_deallocateEPS4_m0
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE13_M_deallocateEPS3_m0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE13_M_deallocateEPSC_m0
_ZNSt12_Vector_baseINSt8__detail6_StateIcEESaIS2_EE13_M_deallocateEPS2_m0
_ZNSt12_Vector_baseIPKN6loguru11EcEntryBaseESaIS3_EE13_M_deallocateEPS3_m0
_ZNSt12_Vector_baseISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EESaIS6_EE13_M_deallocateEPS6_m0
_ZNSt12_Vector_baseISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EE13_M_deallocateEPSC_m0
_ZNSt12_Vector_baseISt4pairIccESaIS1_EE13_M_deallocateEPS1_m0
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EE13_M_deallocateEPSH_m0
_ZNSt12_Vector_baseIcSaIcEE13_M_deallocateEPcm0
_ZNSt12_Vector_baseIhSaIhEE13_M_deallocateEPhm0
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE13_M_deallocateEPS7_m8
_ZNSt12_Vector_baseIN6loguru8CallbackESaIS1_EE13_M_deallocateEPS1_m14
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE13_M_deallocateEPS5_m24
_ZNSt12_Vector_baseISt4pairIifESaIS1_EE13_M_deallocateEPS1_m120
_ZNSt12_Vector_baseISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE13_M_deallocateEPS5_m310
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EE13_M_deallocateEPSE_m494
_ZNSt12_Vector_baseIN2at6TensorESaIS1_EE13_M_deallocateEPS1_m756
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EE13_M_deallocateEPS2_m758
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EE13_M_deallocateEPS2_m1304
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE13_M_deallocateEPS2_m1532
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE13_M_deallocateEPS2_m1900
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EE13_M_deallocateEPS1_m2386
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE13_M_deallocateEPS7_m3384
_ZNSt12_Vector_baseIfSaIfEE13_M_deallocateEPfm12698
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE13_M_deallocateEPS5_m18438
_ZNSt12_Vector_baseImSaImEE13_M_deallocateEPmm44892
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EE13_M_deallocateEPS2_m59632
_ZNSt12_Vector_baseIlSaIlEE13_M_deallocateEPlm452858
_ZNSt12_Vector_baseIdSaIdEE13_M_deallocateEPdm500728
_ZNSt12_Vector_baseISt6threadSaIS0_EE13_M_deallocateEPS0_m1639642
_ZNSt12_Vector_baseIiSaIiEE13_M_deallocateEPim2173532
_ZNSt12_Vector_baseIN3c106SymIntESaIS1_EE13_M_deallocateEPS1_m113517596
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EE13_M_deallocateEPS1_m215945892
_ZNKSt6vectorIcSaIcEE4sizeEv428306182
_ZNKSt6vectorIN3c106SymIntESaIS1_EE4sizeEv0
_ZNKSt6vectorIN3c107complexIdEESaIS2_EE4sizeEv0
_ZNKSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE4sizeEv0
_ZNKSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE4sizeEv0
_ZNKSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE4sizeEv0
_ZNKSt6vectorINSt8__detail6_StateIcEESaIS2_EE4sizeEv0
_ZNKSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE4sizeEv0
_ZNKSt6vectorISt4pairIccESaIS1_EE4sizeEv0
_ZNKSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE4sizeEv0
_ZNKSt6vectorIcSaIcEE4sizeEv0
_ZNKSt6vectorIhSaIhEE4sizeEv0
_ZNKSt6vectorIN6loguru8CallbackESaIS1_EE4sizeEv48
_ZNKSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE4sizeEv88
_ZNKSt6vectorIN2at6TensorESaIS1_EE4sizeEv378
_ZNKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE4sizeEv394
_ZNKSt6vectorISt4pairIifESaIS1_EE4sizeEv402
_ZNKSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE4sizeEv1020
_ZNKSt6vectorIS_IfSaIfEESaIS1_EE4sizeEv1988
_ZNKSt6vectorISt4pairIfS0_IiiEESaIS2_EE4sizeEv4816
_ZNKSt6vectorISt4pairIiiESaIS1_EE4sizeEv5616
_ZNKSt6vectorIS_IdSaIdEESaIS1_EE4sizeEv37868
_ZNKSt6vectorIfSaIfEE4sizeEv39874
_ZNKSt6vectorImSaImEE4sizeEv41668
_ZNKSt6vectorIPN8bayesnet4NodeESaIS2_EE4sizeEv124550
_ZNKSt6vectorIlSaIlEE4sizeEv166756
_ZNKSt6vectorIS_IiSaIiEESaIS1_EE4sizeEv237108
_ZNKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE4sizeEv307102
_ZNKSt6vectorIdSaIdEE4sizeEv563236
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv564958
_ZNKSt6vectorIiSaIiEE4sizeEv582504
_ZNKSt6vectorISt6threadSaIS0_EE4sizeEv4947328
_ZNKSt6vectorIN3c106IValueESaIS1_EE4sizeEv420678480
_ZNSt12_Vector_baseIcSaIcEE19_M_get_Tp_allocatorEv444395774
_ZNSt12_Vector_baseIN3c107complexIdEESaIS2_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseIN3c108optionalIN2at6TensorEEESaIS4_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseINSt8__detail6_StateIcEESaIS2_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseIPKN6loguru11EcEntryBaseESaIS3_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EESaIS6_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseISt4pairIccESaIS1_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseIcSaIcEE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseIhSaIhEE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE19_M_get_Tp_allocatorEv24
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE19_M_get_Tp_allocatorEv24
_ZNSt12_Vector_baseIN6loguru8CallbackESaIS1_EE19_M_get_Tp_allocatorEv26
_ZNSt12_Vector_baseISt4pairIifESaIS1_EE19_M_get_Tp_allocatorEv214
_ZNSt12_Vector_baseISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE19_M_get_Tp_allocatorEv564
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EE19_M_get_Tp_allocatorEv724
_ZNSt12_Vector_baseIN2at6TensorESaIS1_EE19_M_get_Tp_allocatorEv756
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EE19_M_get_Tp_allocatorEv1400
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EE19_M_get_Tp_allocatorEv1952
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE19_M_get_Tp_allocatorEv2958
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE19_M_get_Tp_allocatorEv3598
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EE19_M_get_Tp_allocatorEv4676
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE19_M_get_Tp_allocatorEv5690
_ZNSt12_Vector_baseIfSaIfEE19_M_get_Tp_allocatorEv30812
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE19_M_get_Tp_allocatorEv34356
_ZNSt12_Vector_baseImSaImEE19_M_get_Tp_allocatorEv91960
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EE19_M_get_Tp_allocatorEv92504
_ZNSt12_Vector_baseIdSaIdEE19_M_get_Tp_allocatorEv942822
_ZNSt12_Vector_baseIlSaIlEE19_M_get_Tp_allocatorEv1294530
_ZNSt12_Vector_baseISt6threadSaIS0_EE19_M_get_Tp_allocatorEv2876474
_ZNSt12_Vector_baseIiSaIiEE19_M_get_Tp_allocatorEv4376602
_ZNSt12_Vector_baseIN3c106SymIntESaIS1_EE19_M_get_Tp_allocatorEv113517596
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EE19_M_get_Tp_allocatorEv321115512
_ZNSt6vectorIdSaIdEEixEm650166726
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEixEm0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EEixEm0
_ZNSt6vectorISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EEixEm0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EEixEm10
_ZNSt6vectorISt4pairIifESaIS1_EEixEm26
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EEixEm40
_ZNSt6vectorISt4pairIiiESaIS1_EEixEm126
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EEixEm330
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EEixEm1760
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EEixEm3574
_ZNSt6vectorIS_IiSaIiEESaIS1_EEixEm38158
_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm122374
_ZNSt6vectorIdSaIdEEixEm1992712
_ZNSt6vectorIS_IfSaIfEESaIS1_EEixEm2391504
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm9445432
_ZNSt6vectorIfSaIfEEixEm38270596
_ZNSt6vectorIiSaIiEEixEm597900084
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_vector.h.func.html b/html/usr/include/c++/13/bits/stl_vector.h.func.html new file mode 100644 index 0000000..7bdadd3 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_vector.h.func.html @@ -0,0 +1,7782 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_vector.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_vector.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:90.3 %248224
Test Date:2024-04-30 13:17:26Functions:66.7 %1031688
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt12_Vector_baseIcSaIcEE19_M_get_Tp_allocatorEv213152692
_ZNKSt12_Vector_baseIN2at6TensorESaIS1_EE19_M_get_Tp_allocatorEv378
_ZNKSt12_Vector_baseIN3c106IValueESaIS1_EE19_M_get_Tp_allocatorEv210339240
_ZNKSt12_Vector_baseIN3c106SymIntESaIS1_EE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseIN3c107complexIdEESaIS2_EE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseIN3c108optionalIN2at6TensorEEESaIS4_EE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE19_M_get_Tp_allocatorEv8
_ZNKSt12_Vector_baseIN6loguru8CallbackESaIS1_EE19_M_get_Tp_allocatorEv24
_ZNKSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EE19_M_get_Tp_allocatorEv220
_ZNKSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE19_M_get_Tp_allocatorEv20084
_ZNKSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseINSt8__detail6_StateIcEESaIS2_EE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseIPKN6loguru11EcEntryBaseESaIS3_EE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EE19_M_get_Tp_allocatorEv63132
_ZNKSt12_Vector_baseISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE19_M_get_Tp_allocatorEv480
_ZNKSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE19_M_get_Tp_allocatorEv4368
_ZNKSt12_Vector_baseISt4pairIccESaIS1_EE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EE19_M_get_Tp_allocatorEv1168
_ZNKSt12_Vector_baseISt4pairIifESaIS1_EE19_M_get_Tp_allocatorEv188
_ZNKSt12_Vector_baseISt4pairIiiESaIS1_EE19_M_get_Tp_allocatorEv2956
_ZNKSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseISt6threadSaIS0_EE19_M_get_Tp_allocatorEv2473664
_ZNKSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE19_M_get_Tp_allocatorEv2608
_ZNKSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EE19_M_get_Tp_allocatorEv212
_ZNKSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE19_M_get_Tp_allocatorEv1848
_ZNKSt12_Vector_baseIcSaIcEE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseIdSaIdEE19_M_get_Tp_allocatorEv11416
_ZNKSt12_Vector_baseIfSaIfEE19_M_get_Tp_allocatorEv9288
_ZNKSt12_Vector_baseIhSaIhEE19_M_get_Tp_allocatorEv0
_ZNKSt12_Vector_baseIiSaIiEE19_M_get_Tp_allocatorEv141876
_ZNKSt12_Vector_baseIlSaIlEE19_M_get_Tp_allocatorEv76286
_ZNKSt12_Vector_baseImSaImEE19_M_get_Tp_allocatorEv3248
_ZNKSt12_Vector_baseIdSaIdEE13get_allocatorEv5568
_ZNKSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE13get_allocatorEv674
_ZNKSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE13get_allocatorEv0
_ZNKSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE13get_allocatorEv252
_ZNKSt12_Vector_baseIdSaIdEE13get_allocatorEv916
_ZNKSt12_Vector_baseIiSaIiEE13get_allocatorEv3726
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE2atEm132
_ZNKSt6vectorIcSaIcEE11_M_data_ptrIcEEPT_S4_415512
_ZNKSt6vectorIcSaIcEE11_M_data_ptrIcEEPT_S4_0
_ZNKSt6vectorIdSaIdEE11_M_data_ptrIdEEPT_S4_396018
_ZNKSt6vectorIfSaIfEE11_M_data_ptrIfEEPT_S4_274
_ZNKSt6vectorIiSaIiEE11_M_data_ptrIiEEPT_S4_5026
_ZNKSt6vectorIlSaIlEE11_M_data_ptrIlEEPT_S4_14194
_ZNKSt6vectorIcSaIcEE12_M_check_lenEmPKc106548050
_ZNKSt6vectorIN2at6TensorESaIS1_EE12_M_check_lenEmPKc0
_ZNKSt6vectorIN3c106IValueESaIS1_EE12_M_check_lenEmPKc105169620
_ZNKSt6vectorIN3c106SymIntESaIS1_EE12_M_check_lenEmPKc0
_ZNKSt6vectorIN3c107complexIdEESaIS2_EE12_M_check_lenEmPKc0
_ZNKSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE12_M_check_lenEmPKc0
_ZNKSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE12_M_check_lenEmS4_0
_ZNKSt6vectorIN6loguru8CallbackESaIS1_EE12_M_check_lenEmPKc12
_ZNKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE12_M_check_lenEmPKc2
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_M_check_lenEmPKc8674
_ZNKSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE12_M_check_lenEmPKc0
_ZNKSt6vectorINSt8__detail6_StateIcEESaIS2_EE12_M_check_lenEmPKc0
_ZNKSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE12_M_check_lenEmPKc0
_ZNKSt6vectorIPN8bayesnet4NodeESaIS2_EE12_M_check_lenEmPKc30284
_ZNKSt6vectorIS_IdSaIdEESaIS1_EE12_M_check_lenEmPKc1272
_ZNKSt6vectorIS_IiSaIiEESaIS1_EE12_M_check_lenEmPKc798
_ZNKSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE12_M_check_lenEmPKc240
_ZNKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE12_M_check_lenEmPKc2078
_ZNKSt6vectorISt4pairIccESaIS1_EE12_M_check_lenEmPKc0
_ZNKSt6vectorISt4pairIfS0_IiiEESaIS2_EE12_M_check_lenEmPKc526
_ZNKSt6vectorISt4pairIifESaIS1_EE12_M_check_lenEmPKc94
_ZNKSt6vectorISt4pairIiiESaIS1_EE12_M_check_lenEmPKc1222
_ZNKSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE12_M_check_lenEmS6_0
_ZNKSt6vectorISt6threadSaIS0_EE12_M_check_lenEmPKc1236832
_ZNKSt6vectorIcSaIcEE12_M_check_lenEmPKc0
_ZNKSt6vectorIdSaIdEE12_M_check_lenEmPKc1154
_ZNKSt6vectorIiSaIiEE12_M_check_lenEmPKc57100
_ZNKSt6vectorIlSaIlEE12_M_check_lenEmPKc38138
_ZNKSt6vectorImSaImEE12_M_check_lenEmPKc4
_ZNKSt6vectorIcSaIcEE3endEv19136360
_ZNKSt6vectorIN3c106IValueESaIS1_EE3endEv0
_ZNKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE3endEv576
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE3endEv19081678
_ZNKSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE3endEv0
_ZNKSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE3endEv0
_ZNKSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE3endEv0
_ZNKSt6vectorIPN8bayesnet4NodeESaIS2_EE3endEv2572
_ZNKSt6vectorIS_IdSaIdEESaIS1_EE3endEv64
_ZNKSt6vectorIS_IfSaIfEESaIS1_EE3endEv6
_ZNKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE3endEv440
_ZNKSt6vectorISt4pairIccESaIS1_EE3endEv0
_ZNKSt6vectorISt4pairIfS0_IiiEESaIS2_EE3endEv116
_ZNKSt6vectorISt4pairIiiESaIS1_EE3endEv544
_ZNKSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE3endEv0
_ZNKSt6vectorIcSaIcEE3endEv0
_ZNKSt6vectorIdSaIdEE3endEv8206
_ZNKSt6vectorIfSaIfEE3endEv14540
_ZNKSt6vectorIhSaIhEE3endEv0
_ZNKSt6vectorIiSaIiEE3endEv27608
_ZNKSt6vectorIlSaIlEE3endEv10
_ZNKSt6vectorIcSaIcEE4sizeEv428306182
_ZNKSt6vectorIN2at6TensorESaIS1_EE4sizeEv378
_ZNKSt6vectorIN3c106IValueESaIS1_EE4sizeEv420678480
_ZNKSt6vectorIN3c106SymIntESaIS1_EE4sizeEv0
_ZNKSt6vectorIN3c107complexIdEESaIS2_EE4sizeEv0
_ZNKSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE4sizeEv0
_ZNKSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE4sizeEv88
_ZNKSt6vectorIN6loguru8CallbackESaIS1_EE4sizeEv48
_ZNKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE4sizeEv394
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4sizeEv564958
_ZNKSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE4sizeEv0
_ZNKSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE4sizeEv0
_ZNKSt6vectorINSt8__detail6_StateIcEESaIS2_EE4sizeEv0
_ZNKSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE4sizeEv0
_ZNKSt6vectorIPN8bayesnet4NodeESaIS2_EE4sizeEv124550
_ZNKSt6vectorIS_IdSaIdEESaIS1_EE4sizeEv37868
_ZNKSt6vectorIS_IfSaIfEESaIS1_EE4sizeEv1988
_ZNKSt6vectorIS_IiSaIiEESaIS1_EE4sizeEv237108
_ZNKSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE4sizeEv1020
_ZNKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE4sizeEv307102
_ZNKSt6vectorISt4pairIccESaIS1_EE4sizeEv0
_ZNKSt6vectorISt4pairIfS0_IiiEESaIS2_EE4sizeEv4816
_ZNKSt6vectorISt4pairIifESaIS1_EE4sizeEv402
_ZNKSt6vectorISt4pairIiiESaIS1_EE4sizeEv5616
_ZNKSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE4sizeEv0
_ZNKSt6vectorISt6threadSaIS0_EE4sizeEv4947328
_ZNKSt6vectorIcSaIcEE4sizeEv0
_ZNKSt6vectorIdSaIdEE4sizeEv563236
_ZNKSt6vectorIfSaIfEE4sizeEv39874
_ZNKSt6vectorIhSaIhEE4sizeEv0
_ZNKSt6vectorIiSaIiEE4sizeEv582504
_ZNKSt6vectorIlSaIlEE4sizeEv166756
_ZNKSt6vectorImSaImEE4sizeEv41668
_ZNKSt6vectorIcSaIcEE5beginEv19136520
_ZNKSt6vectorIN3c106IValueESaIS1_EE5beginEv0
_ZNKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE5beginEv576
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5beginEv19081746
_ZNKSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE5beginEv0
_ZNKSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE5beginEv0
_ZNKSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE5beginEv0
_ZNKSt6vectorIPN8bayesnet4NodeESaIS2_EE5beginEv2572
_ZNKSt6vectorIS_IdSaIdEESaIS1_EE5beginEv64
_ZNKSt6vectorIS_IfSaIfEESaIS1_EE5beginEv6
_ZNKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE5beginEv456
_ZNKSt6vectorISt4pairIccESaIS1_EE5beginEv0
_ZNKSt6vectorISt4pairIfS0_IiiEESaIS2_EE5beginEv116
_ZNKSt6vectorISt4pairIiiESaIS1_EE5beginEv576
_ZNKSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE5beginEv0
_ZNKSt6vectorIcSaIcEE5beginEv0
_ZNKSt6vectorIdSaIdEE5beginEv8206
_ZNKSt6vectorIfSaIfEE5beginEv14540
_ZNKSt6vectorIhSaIhEE5beginEv0
_ZNKSt6vectorIiSaIiEE5beginEv27652
_ZNKSt6vectorIlSaIlEE5beginEv10
_ZNKSt6vectorIcSaIcEE6cbeginEv9734
_ZNKSt6vectorIN6loguru8CallbackESaIS1_EE6cbeginEv0
_ZNKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE6cbeginEv0
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE6cbeginEv1364
_ZNKSt6vectorIPN8bayesnet4NodeESaIS2_EE6cbeginEv12
_ZNKSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE6cbeginEv180
_ZNKSt6vectorISt4pairIfS0_IiiEESaIS2_EE6cbeginEv318
_ZNKSt6vectorIcSaIcEE6cbeginEv0
_ZNKSt6vectorIdSaIdEE6cbeginEv40
_ZNKSt6vectorIhSaIhEE6cbeginEv0
_ZNKSt6vectorIiSaIiEE6cbeginEv7820
_ZNKSt6vectorIcSaIcEE8max_sizeEv213101420
_ZNKSt6vectorIN2at6TensorESaIS1_EE8max_sizeEv378
_ZNKSt6vectorIN3c106IValueESaIS1_EE8max_sizeEv210339240
_ZNKSt6vectorIN3c106SymIntESaIS1_EE8max_sizeEv0
_ZNKSt6vectorIN3c107complexIdEESaIS2_EE8max_sizeEv0
_ZNKSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE8max_sizeEv0
_ZNKSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE8max_sizeEv8
_ZNKSt6vectorIN6loguru8CallbackESaIS1_EE8max_sizeEv24
_ZNKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE8max_sizeEv220
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE8max_sizeEv17348
_ZNKSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE8max_sizeEv0
_ZNKSt6vectorINSt8__detail6_StateIcEESaIS2_EE8max_sizeEv0
_ZNKSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE8max_sizeEv0
_ZNKSt6vectorIPN8bayesnet4NodeESaIS2_EE8max_sizeEv60568
_ZNKSt6vectorIS_IdSaIdEESaIS1_EE8max_sizeEv2544
_ZNKSt6vectorIS_IiSaIiEESaIS1_EE8max_sizeEv1596
_ZNKSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE8max_sizeEv480
_ZNKSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE8max_sizeEv4156
_ZNKSt6vectorISt4pairIccESaIS1_EE8max_sizeEv0
_ZNKSt6vectorISt4pairIfS0_IiiEESaIS2_EE8max_sizeEv1052
_ZNKSt6vectorISt4pairIifESaIS1_EE8max_sizeEv188
_ZNKSt6vectorISt4pairIiiESaIS1_EE8max_sizeEv2444
_ZNKSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE8max_sizeEv0
_ZNKSt6vectorISt6threadSaIS0_EE8max_sizeEv2473664
_ZNKSt6vectorIcSaIcEE8max_sizeEv0
_ZNKSt6vectorIdSaIdEE8max_sizeEv2308
_ZNKSt6vectorIiSaIiEE8max_sizeEv118918
_ZNKSt6vectorIlSaIlEE8max_sizeEv76276
_ZNKSt6vectorImSaImEE8max_sizeEv8
_ZNKSt6vectorIdSaIdEE14_M_range_checkEm152800
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE14_M_range_checkEm146
_ZNKSt6vectorIdSaIdEE14_M_range_checkEm151584
_ZNKSt6vectorIiSaIiEE14_M_range_checkEm1070
_ZNKSt6vectorIdSaIdEE4dataEv415512
_ZNKSt6vectorIdSaIdEE4dataEv396018
_ZNKSt6vectorIfSaIfEE4dataEv274
_ZNKSt6vectorIiSaIiEE4dataEv5026
_ZNKSt6vectorIlSaIlEE4dataEv14194
_ZNKSt6vectorIdSaIdEE8capacityEv15008
_ZNKSt6vectorIN2at6TensorESaIS1_EE8capacityEv378
_ZNKSt6vectorIN3c106SymIntESaIS1_EE8capacityEv0
_ZNKSt6vectorIN3c107complexIdEESaIS2_EE8capacityEv0
_ZNKSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE8capacityEv0
_ZNKSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE8capacityEv8
_ZNKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE8capacityEv216
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE8capacityEv840
_ZNKSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE8capacityEv0
_ZNKSt6vectorIPN8bayesnet4NodeESaIS2_EE8capacityEv8
_ZNKSt6vectorIS_IfSaIfEESaIS1_EE8capacityEv6
_ZNKSt6vectorIdSaIdEE8capacityEv14
_ZNKSt6vectorIfSaIfEE8capacityEv3728
_ZNKSt6vectorIiSaIiEE8capacityEv9810
_ZNKSt6vectorIlSaIlEE8capacityEv0
_ZNKSt6vectorIhSaIhEE4cendEv60
_ZNKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE4cendEv0
_ZNKSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE4cendEv60
_ZNKSt6vectorIhSaIhEE4cendEv0
_ZNKSt6vectorIhSaIhEE5emptyEv576
_ZNKSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE5emptyEv576
_ZNKSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE5emptyEv0
_ZNKSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE5emptyEv0
_ZNKSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE5emptyEv0
_ZNKSt6vectorIhSaIhEE5emptyEv0
_ZNKSt6vectorIiSaIiEEixEm652780
_ZNKSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EEixEm80
_ZNKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm2466
_ZNKSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEixEm0
_ZNKSt6vectorINSt8__detail6_StateIcEESaIS2_EEixEm0
_ZNKSt6vectorIS_IiSaIiEESaIS1_EEixEm233284
_ZNKSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EEixEm226
_ZNKSt6vectorIiSaIiEEixEm416724
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE12_Vector_implC2EOSD_OSF_0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2ERKSD_OSE_0
_ZNSt12_Vector_baseIcSaIcEE11_M_allocateEm109542904
_ZNSt12_Vector_baseIN2at6TensorESaIS1_EE11_M_allocateEm378
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EE11_M_allocateEm105169620
_ZNSt12_Vector_baseIN3c106SymIntESaIS1_EE11_M_allocateEm0
_ZNSt12_Vector_baseIN3c107complexIdEESaIS2_EE11_M_allocateEm0
_ZNSt12_Vector_baseIN3c108optionalIN2at6TensorEEESaIS4_EE11_M_allocateEm0
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE11_M_allocateEm8
_ZNSt12_Vector_baseIN6loguru8CallbackESaIS1_EE11_M_allocateEm12
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EE11_M_allocateEm278
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE11_M_allocateEm12530
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE11_M_allocateEm0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE11_M_allocateEm0
_ZNSt12_Vector_baseINSt8__detail6_StateIcEESaIS2_EE11_M_allocateEm0
_ZNSt12_Vector_baseIPKN6loguru11EcEntryBaseESaIS3_EE11_M_allocateEm0
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EE11_M_allocateEm32848
_ZNSt12_Vector_baseISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE11_M_allocateEm240
_ZNSt12_Vector_baseISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EE11_M_allocateEm0
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE11_M_allocateEm2298
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE11_M_allocateEm8
_ZNSt12_Vector_baseISt4pairIccESaIS1_EE11_M_allocateEm0
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EE11_M_allocateEm642
_ZNSt12_Vector_baseISt4pairIifESaIS1_EE11_M_allocateEm94
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EE11_M_allocateEm2012
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EE11_M_allocateEm0
_ZNSt12_Vector_baseISt6threadSaIS0_EE11_M_allocateEm1236832
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE11_M_allocateEm1390
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EE11_M_allocateEm218
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE11_M_allocateEm1186
_ZNSt12_Vector_baseIcSaIcEE11_M_allocateEm0
_ZNSt12_Vector_baseIdSaIdEE11_M_allocateEm436058
_ZNSt12_Vector_baseIfSaIfEE11_M_allocateEm10578
_ZNSt12_Vector_baseIhSaIhEE11_M_allocateEm0
_ZNSt12_Vector_baseIiSaIiEE11_M_allocateEm2155620
_ZNSt12_Vector_baseIlSaIlEE11_M_allocateEm439466
_ZNSt12_Vector_baseImSaImEE11_M_allocateEm40588
_ZNSt12_Vector_baseIcSaIcEE12_Vector_implC2EOS2_36989286
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EE12_Vector_implC2EOS4_36925424
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE12_Vector_implC2EOS8_8
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_Vector_implC2EOS8_2
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE12_Vector_implC2EOS6_0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE12_Vector_implC2EOSF_0
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE12_Vector_implC2EOSA_0
_ZNSt12_Vector_baseISt4pairIccESaIS1_EE12_Vector_implC2EOS4_0
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EE12_Vector_implC2EOSK_0
_ZNSt12_Vector_baseIcSaIcEE12_Vector_implC2EOS2_0
_ZNSt12_Vector_baseIdSaIdEE12_Vector_implC2EOS2_61920
_ZNSt12_Vector_baseIiSaIiEE12_Vector_implC2EOS2_1932
_ZNSt12_Vector_baseIcSaIcEE12_Vector_implC2ERKS0_2950562
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EE12_Vector_implC2ERKSF_114
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_Vector_implC2ERKS6_3758
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE12_Vector_implC2ERKS4_0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE12_Vector_implC2ERKSD_0
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EE12_Vector_implC2ERKS3_2564
_ZNSt12_Vector_baseISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EE12_Vector_implC2ERKSD_0
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE12_Vector_implC2ERKS8_220
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE12_Vector_implC2ERKS8_8
_ZNSt12_Vector_baseISt4pairIccESaIS1_EE12_Vector_implC2ERKS2_0
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EE12_Vector_implC2ERKS3_116
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EE12_Vector_implC2ERKS2_790
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE12_Vector_implC2ERKS3_118
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EE12_Vector_implC2ERKS3_430
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE12_Vector_implC2ERKS3_640
_ZNSt12_Vector_baseIcSaIcEE12_Vector_implC2ERKS0_0
_ZNSt12_Vector_baseIdSaIdEE12_Vector_implC2ERKS0_435808
_ZNSt12_Vector_baseIfSaIfEE12_Vector_implC2ERKS0_6730
_ZNSt12_Vector_baseIhSaIhEE12_Vector_implC2ERKS0_0
_ZNSt12_Vector_baseIiSaIiEE12_Vector_implC2ERKS0_2097938
_ZNSt12_Vector_baseIlSaIlEE12_Vector_implC2ERKS0_401328
_ZNSt12_Vector_baseIcSaIcEE12_Vector_implC2Ev37394404
_ZNSt12_Vector_baseIN2at6TensorESaIS1_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EE12_Vector_implC2Ev36925424
_ZNSt12_Vector_baseIN3c106SymIntESaIS1_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseIN3c107complexIdEESaIS2_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseIN3c108optionalIN2at6TensorEEESaIS4_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE12_Vector_implC2Ev8
_ZNSt12_Vector_baseIN6loguru8CallbackESaIS1_EE12_Vector_implC2Ev2
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EE12_Vector_implC2Ev216
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12_Vector_implC2Ev6682
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseINSt8__detail6_StateIcEESaIS2_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseIPKN6loguru11EcEntryBaseESaIS3_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EE12_Vector_implC2Ev26784
_ZNSt12_Vector_baseISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EESaIS6_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE12_Vector_implC2Ev170
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE12_Vector_implC2Ev1086
_ZNSt12_Vector_baseISt4pairIccESaIS1_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EE12_Vector_implC2Ev116
_ZNSt12_Vector_baseISt4pairIifESaIS1_EE12_Vector_implC2Ev26
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EE12_Vector_implC2Ev374
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EE12_Vector_implC2Ev0
_ZNSt12_Vector_baseISt6threadSaIS0_EE12_Vector_implC2Ev402810
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE12_Vector_implC2Ev142
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EE12_Vector_implC2Ev874
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE12_Vector_implC2Ev462
_ZNSt12_Vector_baseIcSaIcEE12_Vector_implC2Ev0
_ZNSt12_Vector_baseIdSaIdEE12_Vector_implC2Ev2214
_ZNSt12_Vector_baseIhSaIhEE12_Vector_implC2Ev0
_ZNSt12_Vector_baseIiSaIiEE12_Vector_implC2Ev12550
_ZNSt12_Vector_baseIlSaIlEE12_Vector_implC2Ev13392
_ZNSt12_Vector_baseImSaImEE12_Vector_implC2Ev1072
_ZNSt12_Vector_baseIcSaIcEE13_M_deallocateEPcm334378898
_ZNSt12_Vector_baseIN2at6TensorESaIS1_EE13_M_deallocateEPS1_m756
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EE13_M_deallocateEPS1_m215945892
_ZNSt12_Vector_baseIN3c106SymIntESaIS1_EE13_M_deallocateEPS1_m113517596
_ZNSt12_Vector_baseIN3c107complexIdEESaIS2_EE13_M_deallocateEPS2_m0
_ZNSt12_Vector_baseIN3c108optionalIN2at6TensorEEESaIS4_EE13_M_deallocateEPS4_m0
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE13_M_deallocateEPS5_m24
_ZNSt12_Vector_baseIN6loguru8CallbackESaIS1_EE13_M_deallocateEPS1_m14
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EE13_M_deallocateEPSE_m494
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE13_M_deallocateEPS5_m18438
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE13_M_deallocateEPS3_m0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE13_M_deallocateEPSC_m0
_ZNSt12_Vector_baseINSt8__detail6_StateIcEESaIS2_EE13_M_deallocateEPS2_m0
_ZNSt12_Vector_baseIPKN6loguru11EcEntryBaseESaIS3_EE13_M_deallocateEPS3_m0
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EE13_M_deallocateEPS2_m59632
_ZNSt12_Vector_baseISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EESaIS6_EE13_M_deallocateEPS6_m0
_ZNSt12_Vector_baseISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE13_M_deallocateEPS5_m310
_ZNSt12_Vector_baseISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EE13_M_deallocateEPSC_m0
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE13_M_deallocateEPS7_m3384
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE13_M_deallocateEPS7_m8
_ZNSt12_Vector_baseISt4pairIccESaIS1_EE13_M_deallocateEPS1_m0
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EE13_M_deallocateEPS2_m758
_ZNSt12_Vector_baseISt4pairIifESaIS1_EE13_M_deallocateEPS1_m120
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EE13_M_deallocateEPS1_m2386
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EE13_M_deallocateEPSH_m0
_ZNSt12_Vector_baseISt6threadSaIS0_EE13_M_deallocateEPS0_m1639642
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE13_M_deallocateEPS2_m1532
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EE13_M_deallocateEPS2_m1304
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE13_M_deallocateEPS2_m1900
_ZNSt12_Vector_baseIcSaIcEE13_M_deallocateEPcm0
_ZNSt12_Vector_baseIdSaIdEE13_M_deallocateEPdm500728
_ZNSt12_Vector_baseIfSaIfEE13_M_deallocateEPfm12698
_ZNSt12_Vector_baseIhSaIhEE13_M_deallocateEPhm0
_ZNSt12_Vector_baseIiSaIiEE13_M_deallocateEPim2173532
_ZNSt12_Vector_baseIlSaIlEE13_M_deallocateEPlm452858
_ZNSt12_Vector_baseImSaImEE13_M_deallocateEPmm44892
_ZNSt12_Vector_baseIcSaIcEE17_M_create_storageEm2534464
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EE17_M_create_storageEm0
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_create_storageEm2936
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE17_M_create_storageEm0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE17_M_create_storageEm0
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EE17_M_create_storageEm2564
_ZNSt12_Vector_baseISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EE17_M_create_storageEm0
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE17_M_create_storageEm212
_ZNSt12_Vector_baseISt4pairIccESaIS1_EE17_M_create_storageEm0
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EE17_M_create_storageEm116
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EE17_M_create_storageEm512
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE17_M_create_storageEm82
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EE17_M_create_storageEm218
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE17_M_create_storageEm380
_ZNSt12_Vector_baseIcSaIcEE17_M_create_storageEm0
_ZNSt12_Vector_baseIdSaIdEE17_M_create_storageEm430874
_ZNSt12_Vector_baseIfSaIfEE17_M_create_storageEm3946
_ZNSt12_Vector_baseIhSaIhEE17_M_create_storageEm0
_ZNSt12_Vector_baseIiSaIiEE17_M_create_storageEm2092614
_ZNSt12_Vector_baseIlSaIlEE17_M_create_storageEm10
_ZNSt12_Vector_baseIcSaIcEE17_Vector_impl_dataC2EOS2_36989286
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EE17_Vector_impl_dataC2EOS4_36925424
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE17_Vector_impl_dataC2EOS8_8
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_dataC2EOS8_2
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE17_Vector_impl_dataC2EOS6_0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE17_Vector_impl_dataC2EOSF_0
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE17_Vector_impl_dataC2EOSA_0
_ZNSt12_Vector_baseISt4pairIccESaIS1_EE17_Vector_impl_dataC2EOS4_0
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EE17_Vector_impl_dataC2EOSK_0
_ZNSt12_Vector_baseIcSaIcEE17_Vector_impl_dataC2EOS2_0
_ZNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataC2EOS2_61920
_ZNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataC2EOS2_1932
_ZNSt12_Vector_baseIcSaIcEE17_Vector_impl_dataC2Ev40371622
_ZNSt12_Vector_baseIN2at6TensorESaIS1_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EE17_Vector_impl_dataC2Ev36925424
_ZNSt12_Vector_baseIN3c106SymIntESaIS1_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseIN3c107complexIdEESaIS2_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseIN3c108optionalIN2at6TensorEEESaIS4_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE17_Vector_impl_dataC2Ev8
_ZNSt12_Vector_baseIN6loguru8CallbackESaIS1_EE17_Vector_impl_dataC2Ev2
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EE17_Vector_impl_dataC2Ev330
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_dataC2Ev11788
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseINSt8__detail6_StateIcEESaIS2_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseIPKN6loguru11EcEntryBaseESaIS3_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EE17_Vector_impl_dataC2Ev29348
_ZNSt12_Vector_baseISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EESaIS6_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataC2Ev170
_ZNSt12_Vector_baseISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE17_Vector_impl_dataC2Ev1306
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE17_Vector_impl_dataC2Ev8
_ZNSt12_Vector_baseISt4pairIccESaIS1_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EE17_Vector_impl_dataC2Ev232
_ZNSt12_Vector_baseISt4pairIifESaIS1_EE17_Vector_impl_dataC2Ev26
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EE17_Vector_impl_dataC2Ev1164
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseISt6threadSaIS0_EE17_Vector_impl_dataC2Ev402810
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE17_Vector_impl_dataC2Ev260
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EE17_Vector_impl_dataC2Ev1728
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE17_Vector_impl_dataC2Ev1606
_ZNSt12_Vector_baseIcSaIcEE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataC2Ev439854
_ZNSt12_Vector_baseIfSaIfEE17_Vector_impl_dataC2Ev8866
_ZNSt12_Vector_baseIhSaIhEE17_Vector_impl_dataC2Ev0
_ZNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataC2Ev2117940
_ZNSt12_Vector_baseIlSaIlEE17_Vector_impl_dataC2Ev414720
_ZNSt12_Vector_baseImSaImEE17_Vector_impl_dataC2Ev14032
_ZNSt12_Vector_baseIcSaIcEE19_M_get_Tp_allocatorEv444395774
_ZNSt12_Vector_baseIN2at6TensorESaIS1_EE19_M_get_Tp_allocatorEv756
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EE19_M_get_Tp_allocatorEv321115512
_ZNSt12_Vector_baseIN3c106SymIntESaIS1_EE19_M_get_Tp_allocatorEv113517596
_ZNSt12_Vector_baseIN3c107complexIdEESaIS2_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseIN3c108optionalIN2at6TensorEEESaIS4_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE19_M_get_Tp_allocatorEv24
_ZNSt12_Vector_baseIN6loguru8CallbackESaIS1_EE19_M_get_Tp_allocatorEv26
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EE19_M_get_Tp_allocatorEv724
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE19_M_get_Tp_allocatorEv34356
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseINSt8__detail6_StateIcEESaIS2_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseIPKN6loguru11EcEntryBaseESaIS3_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EE19_M_get_Tp_allocatorEv92504
_ZNSt12_Vector_baseISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EESaIS6_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE19_M_get_Tp_allocatorEv564
_ZNSt12_Vector_baseISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE19_M_get_Tp_allocatorEv5690
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE19_M_get_Tp_allocatorEv24
_ZNSt12_Vector_baseISt4pairIccESaIS1_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EE19_M_get_Tp_allocatorEv1400
_ZNSt12_Vector_baseISt4pairIifESaIS1_EE19_M_get_Tp_allocatorEv214
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EE19_M_get_Tp_allocatorEv4676
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseISt6threadSaIS0_EE19_M_get_Tp_allocatorEv2876474
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EE19_M_get_Tp_allocatorEv2958
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EE19_M_get_Tp_allocatorEv1952
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE19_M_get_Tp_allocatorEv3598
_ZNSt12_Vector_baseIcSaIcEE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseIdSaIdEE19_M_get_Tp_allocatorEv942822
_ZNSt12_Vector_baseIfSaIfEE19_M_get_Tp_allocatorEv30812
_ZNSt12_Vector_baseIhSaIhEE19_M_get_Tp_allocatorEv0
_ZNSt12_Vector_baseIiSaIiEE19_M_get_Tp_allocatorEv4376602
_ZNSt12_Vector_baseIlSaIlEE19_M_get_Tp_allocatorEv1294530
_ZNSt12_Vector_baseImSaImEE19_M_get_Tp_allocatorEv91960
_ZNSt12_Vector_baseIcSaIcEEC2EOS1_36989286
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EEC2EOS3_36925424
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EEC2EOS7_8
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2EOS7_2
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EEC2EOS5_0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2EOSE_0
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEC2EOS9_0
_ZNSt12_Vector_baseISt4pairIccESaIS1_EEC2EOS3_0
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EEC2EOSJ_0
_ZNSt12_Vector_baseIcSaIcEEC2EOS1_0
_ZNSt12_Vector_baseIdSaIdEEC2EOS1_61920
_ZNSt12_Vector_baseIiSaIiEEC2EOS1_1932
_ZNSt12_Vector_baseIcSaIcEEC2ERKS0_415886
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EEC2ERKSF_114
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2ERKS6_822
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2ERKSD_0
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEC2ERKS8_8
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EEC2ERKS8_8
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EEC2ERKS2_278
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EEC2ERKS3_36
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EEC2ERKS3_260
_ZNSt12_Vector_baseIcSaIcEEC2ERKS0_0
_ZNSt12_Vector_baseIdSaIdEEC2ERKS0_4934
_ZNSt12_Vector_baseIfSaIfEEC2ERKS0_2784
_ZNSt12_Vector_baseIiSaIiEEC2ERKS0_5324
_ZNSt12_Vector_baseIlSaIlEEC2ERKS0_401318
_ZNSt12_Vector_baseIcSaIcEEC2EmRKS0_2534464
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EEC2EmRKSF_0
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2EmRKS6_2936
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EEC2EmRKS4_0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2EmRKSD_0
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EEC2EmRKS3_2564
_ZNSt12_Vector_baseISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EEC2EmRKSD_0
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEC2EmRKS8_212
_ZNSt12_Vector_baseISt4pairIccESaIS1_EEC2EmRKS2_0
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EEC2EmRKS3_116
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EEC2EmRKS2_512
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EEC2EmRKS3_82
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EEC2EmRKS3_218
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EEC2EmRKS3_380
_ZNSt12_Vector_baseIcSaIcEEC2EmRKS0_0
_ZNSt12_Vector_baseIdSaIdEEC2EmRKS0_430874
_ZNSt12_Vector_baseIfSaIfEEC2EmRKS0_3946
_ZNSt12_Vector_baseIhSaIhEEC2EmRKS0_0
_ZNSt12_Vector_baseIiSaIiEEC2EmRKS0_2092614
_ZNSt12_Vector_baseIlSaIlEEC2EmRKS0_10
_ZNSt12_Vector_baseIcSaIcEEC2Ev37394404
_ZNSt12_Vector_baseIN2at6TensorESaIS1_EEC2Ev0
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EEC2Ev36925424
_ZNSt12_Vector_baseIN3c106SymIntESaIS1_EEC2Ev0
_ZNSt12_Vector_baseIN3c107complexIdEESaIS2_EEC2Ev0
_ZNSt12_Vector_baseIN3c108optionalIN2at6TensorEEESaIS4_EEC2Ev0
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EEC2Ev8
_ZNSt12_Vector_baseIN6loguru8CallbackESaIS1_EEC2Ev2
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EEC2Ev216
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev6682
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EEC2Ev0
_ZNSt12_Vector_baseINSt8__detail6_StateIcEESaIS2_EEC2Ev0
_ZNSt12_Vector_baseIPKN6loguru11EcEntryBaseESaIS3_EEC2Ev0
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EEC2Ev26784
_ZNSt12_Vector_baseISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EESaIS6_EEC2Ev0
_ZNSt12_Vector_baseISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EEC2Ev170
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEC2Ev1086
_ZNSt12_Vector_baseISt4pairIccESaIS1_EEC2Ev0
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EEC2Ev116
_ZNSt12_Vector_baseISt4pairIifESaIS1_EEC2Ev26
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EEC2Ev374
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EEC2Ev0
_ZNSt12_Vector_baseISt6threadSaIS0_EEC2Ev402810
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EEC2Ev142
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EEC2Ev874
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EEC2Ev462
_ZNSt12_Vector_baseIcSaIcEEC2Ev0
_ZNSt12_Vector_baseIdSaIdEEC2Ev2214
_ZNSt12_Vector_baseIhSaIhEEC2Ev0
_ZNSt12_Vector_baseIiSaIiEEC2Ev12550
_ZNSt12_Vector_baseIlSaIlEEC2Ev13392
_ZNSt12_Vector_baseImSaImEEC2Ev1072
_ZNSt12_Vector_baseIcSaIcEED2Ev227784016
_ZNSt12_Vector_baseIN2at6TensorESaIS1_EED2Ev378
_ZNSt12_Vector_baseIN3c106IValueESaIS1_EED2Ev110776272
_ZNSt12_Vector_baseIN3c106SymIntESaIS1_EED2Ev113517596
_ZNSt12_Vector_baseIN3c107complexIdEESaIS2_EED2Ev0
_ZNSt12_Vector_baseIN3c108optionalIN2at6TensorEEESaIS4_EED2Ev0
_ZNSt12_Vector_baseIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EED2Ev16
_ZNSt12_Vector_baseIN6loguru8CallbackESaIS1_EED2Ev2
_ZNSt12_Vector_baseIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EED2Ev330
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev8992
_ZNSt12_Vector_baseINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EED2Ev0
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EED2Ev0
_ZNSt12_Vector_baseINSt8__detail6_StateIcEESaIS2_EED2Ev0
_ZNSt12_Vector_baseIPKN6loguru11EcEntryBaseESaIS3_EED2Ev0
_ZNSt12_Vector_baseIPN8bayesnet4NodeESaIS2_EED2Ev29348
_ZNSt12_Vector_baseISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EESaIS6_EED2Ev0
_ZNSt12_Vector_baseISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EED2Ev70
_ZNSt12_Vector_baseISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EED2Ev0
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EED2Ev1306
_ZNSt12_Vector_baseISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EED2Ev8
_ZNSt12_Vector_baseISt4pairIccESaIS1_EED2Ev0
_ZNSt12_Vector_baseISt4pairIfS0_IiiEESaIS2_EED2Ev232
_ZNSt12_Vector_baseISt4pairIifESaIS1_EED2Ev26
_ZNSt12_Vector_baseISt4pairIiiESaIS1_EED2Ev1164
_ZNSt12_Vector_baseISt4pairIlSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS2_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISE_EEESaISH_EED2Ev0
_ZNSt12_Vector_baseISt6threadSaIS0_EED2Ev402810
_ZNSt12_Vector_baseISt6vectorIdSaIdEESaIS2_EED2Ev260
_ZNSt12_Vector_baseISt6vectorIfSaIfEESaIS2_EED2Ev1304
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EED2Ev1102
_ZNSt12_Vector_baseIcSaIcEED2Ev0
_ZNSt12_Vector_baseIdSaIdEED2Ev499562
_ZNSt12_Vector_baseIfSaIfEED2Ev8850
_ZNSt12_Vector_baseIhSaIhEED2Ev0
_ZNSt12_Vector_baseIiSaIiEED2Ev2112124
_ZNSt12_Vector_baseIlSaIlEED2Ev414720
_ZNSt12_Vector_baseImSaImEED2Ev7544
_ZNSt12_Vector_baseIdSaIdEE17_Vector_impl_data12_M_copy_dataERKS2_33408
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_data12_M_copy_dataERKS8_4044
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE17_Vector_impl_data12_M_copy_dataERKSF_0
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE17_Vector_impl_data12_M_copy_dataERKS5_1512
_ZNSt12_Vector_baseIdSaIdEE17_Vector_impl_data12_M_copy_dataERKS2_5496
_ZNSt12_Vector_baseIiSaIiEE17_Vector_impl_data12_M_copy_dataERKS2_22356
_ZNSt12_Vector_baseIdSaIdEE17_Vector_impl_data12_M_swap_dataERS2_11136
_ZNSt12_Vector_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_Vector_impl_data12_M_swap_dataERS8_1348
_ZNSt12_Vector_baseINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE17_Vector_impl_data12_M_swap_dataERSF_0
_ZNSt12_Vector_baseISt6vectorIiSaIiEESaIS2_EE17_Vector_impl_data12_M_swap_dataERS5_504
_ZNSt12_Vector_baseIdSaIdEE17_Vector_impl_data12_M_swap_dataERS2_1832
_ZNSt12_Vector_baseIiSaIiEE17_Vector_impl_data12_M_swap_dataERS2_7452
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEaSESt16initializer_listIS5_E196
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE6assignEmRKSC_0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2EOSE_RKSD_0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2EOSE_RKSD_St17integral_constantIbLb1EE0
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE6insertEN9__gnu_cxx17__normal_iteratorIPKS5_S7_EEOS5_60
_ZNSt6vectorIcSaIcEE11_S_max_sizeERKS0_216018506
_ZNSt6vectorIN2at6TensorESaIS1_EE11_S_max_sizeERKS2_378
_ZNSt6vectorIN3c106IValueESaIS1_EE11_S_max_sizeERKS2_210339240
_ZNSt6vectorIN3c106SymIntESaIS1_EE11_S_max_sizeERKS2_0
_ZNSt6vectorIN3c107complexIdEESaIS2_EE11_S_max_sizeERKS3_0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE11_S_max_sizeERKS5_0
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE11_S_max_sizeERKS6_8
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE11_S_max_sizeERKS2_24
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE11_S_max_sizeERKSE_334
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE11_S_max_sizeERKS6_18566
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE11_S_max_sizeERKS4_0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE11_S_max_sizeERKSD_0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EE11_S_max_sizeERKS3_0
_ZNSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE11_S_max_sizeERKS4_0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE11_S_max_sizeERKS3_60568
_ZNSt6vectorIS_IdSaIdEESaIS1_EE11_S_max_sizeERKS2_2598
_ZNSt6vectorIS_IfSaIfEESaIS1_EE11_S_max_sizeERKS2_218
_ZNSt6vectorIS_IiSaIiEESaIS1_EE11_S_max_sizeERKS2_1984
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE11_S_max_sizeERKS6_480
_ZNSt6vectorISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EE11_S_max_sizeERKSD_0
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE11_S_max_sizeERKS8_4164
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE11_S_max_sizeERKS8_8
_ZNSt6vectorISt4pairIccESaIS1_EE11_S_max_sizeERKS2_0
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE11_S_max_sizeERKS3_1052
_ZNSt6vectorISt4pairIifESaIS1_EE11_S_max_sizeERKS2_188
_ZNSt6vectorISt4pairIiiESaIS1_EE11_S_max_sizeERKS2_2722
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE11_S_max_sizeERKSH_0
_ZNSt6vectorISt6threadSaIS0_EE11_S_max_sizeERKS1_2473664
_ZNSt6vectorIcSaIcEE11_S_max_sizeERKS0_0
_ZNSt6vectorIdSaIdEE11_S_max_sizeERKS0_429008
_ZNSt6vectorIfSaIfEE11_S_max_sizeERKS0_8562
_ZNSt6vectorIiSaIiEE11_S_max_sizeERKS0_2193898
_ZNSt6vectorIlSaIlEE11_S_max_sizeERKS0_477594
_ZNSt6vectorImSaImEE11_S_max_sizeERKS0_3248
_ZNSt6vectorIcSaIcEE11_S_relocateEPcS2_S2_RS0_213096698
_ZNSt6vectorIN2at6TensorESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_378
_ZNSt6vectorIN3c106IValueESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_210339240
_ZNSt6vectorIN3c106SymIntESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_0
_ZNSt6vectorIN3c107complexIdEESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE11_S_relocateEPS4_S7_S7_RS5_0
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE11_S_relocateEPS5_S8_S8_RS6_8
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_24
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE11_S_relocateEPSD_SG_SG_RSE_166
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE11_S_relocateEPS5_S8_S8_RS6_16968
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE11_S_relocateEPS3_S6_S6_RS4_0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_0
_ZNSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE11_S_relocateEPS3_S6_S6_RS4_0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_60568
_ZNSt6vectorIS_IdSaIdEESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_2544
_ZNSt6vectorIS_IiSaIiEESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_1596
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE11_S_relocateEPS5_S8_S8_RS6_480
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE11_S_relocateEPS7_SA_SA_RS8_4156
_ZNSt6vectorISt4pairIccESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_0
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE11_S_relocateEPS2_S5_S5_RS3_1052
_ZNSt6vectorISt4pairIifESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_188
_ZNSt6vectorISt4pairIiiESaIS1_EE11_S_relocateEPS1_S4_S4_RS2_2444
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE11_S_relocateEPSG_SJ_SJ_RSH_0
_ZNSt6vectorISt6threadSaIS0_EE11_S_relocateEPS0_S3_S3_RS1_2473664
_ZNSt6vectorIcSaIcEE11_S_relocateEPcS2_S2_RS0_0
_ZNSt6vectorIdSaIdEE11_S_relocateEPdS2_S2_RS0_2308
_ZNSt6vectorIiSaIiEE11_S_relocateEPiS2_S2_RS0_114630
_ZNSt6vectorIlSaIlEE11_S_relocateEPlS2_S2_RS0_76276
_ZNSt6vectorImSaImEE11_S_relocateEPmS2_S2_RS0_8
_ZNSt6vectorIcSaIcEE15_M_erase_at_endEPc59818
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE15_M_erase_at_endEPS1_0
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE15_M_erase_at_endEPSD_0
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE15_M_erase_at_endEPS5_1526
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE15_M_erase_at_endEPSC_0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE15_M_erase_at_endEPS2_16
_ZNSt6vectorIS_IfSaIfEESaIS1_EE15_M_erase_at_endEPS1_0
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE15_M_erase_at_endEPS5_68
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE15_M_erase_at_endEPS2_116
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE15_M_erase_at_endEPSG_0
_ZNSt6vectorIcSaIcEE15_M_erase_at_endEPc0
_ZNSt6vectorIdSaIdEE15_M_erase_at_endEPd320
_ZNSt6vectorIfSaIfEE15_M_erase_at_endEPf3240
_ZNSt6vectorIiSaIiEE15_M_erase_at_endEPi40336
_ZNSt6vectorIlSaIlEE15_M_erase_at_endEPl14196
_ZNSt6vectorIcSaIcEE17_S_check_init_lenEmRKS0_2908286
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE17_S_check_init_lenEmRKSE_114
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_S_check_init_lenEmRKS6_1218
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE17_S_check_init_lenEmRKSD_0
_ZNSt6vectorIS_IdSaIdEESaIS1_EE17_S_check_init_lenEmRKS2_54
_ZNSt6vectorIS_IfSaIfEESaIS1_EE17_S_check_init_lenEmRKS2_218
_ZNSt6vectorIS_IiSaIiEESaIS1_EE17_S_check_init_lenEmRKS2_388
_ZNSt6vectorISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EE17_S_check_init_lenEmRKSD_0
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE17_S_check_init_lenEmRKS8_8
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE17_S_check_init_lenEmRKS8_8
_ZNSt6vectorISt4pairIiiESaIS1_EE17_S_check_init_lenEmRKS2_278
_ZNSt6vectorIcSaIcEE17_S_check_init_lenEmRKS0_0
_ZNSt6vectorIdSaIdEE17_S_check_init_lenEmRKS0_426700
_ZNSt6vectorIfSaIfEE17_S_check_init_lenEmRKS0_3002
_ZNSt6vectorIiSaIiEE17_S_check_init_lenEmRKS0_2074980
_ZNSt6vectorIlSaIlEE17_S_check_init_lenEmRKS0_401318
_ZNSt6vectorIcSaIcEE19_M_range_initializeIPcEEvT_S4_St20forward_iterator_tag410318
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE19_M_range_initializeIPKNS1_6detail8json_refISD_EEEEvT_SM_St20forward_iterator_tag114
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE19_M_range_initializeINSt8__detail14_Node_iteratorIS5_Lb1ELb1EEEEEvT_SC_St20forward_iterator_tag10
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE19_M_range_initializeIPKPKcEEvT_SD_St20forward_iterator_tag4
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE19_M_range_initializeIPKS5_EEvT_SB_St20forward_iterator_tag134
_ZNSt6vectorIS_IdSaIdEESaIS1_EE19_M_range_initializeIPKS1_EEvT_S7_St20forward_iterator_tag36
_ZNSt6vectorIS_IiSaIiEESaIS1_EE19_M_range_initializeIPKS1_EEvT_S7_St20forward_iterator_tag8
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE19_M_range_initializeIPKS7_EEvT_SD_St20forward_iterator_tag8
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE19_M_range_initializeIPKS7_EEvT_SD_St20forward_iterator_tag8
_ZNSt6vectorISt4pairIiiESaIS1_EE19_M_range_initializeIPKS1_EEvT_S7_St20forward_iterator_tag278
_ZNSt6vectorIcSaIcEE19_M_range_initializeIPKcEEvT_S5_St20forward_iterator_tag0
_ZNSt6vectorIcSaIcEE19_M_range_initializeIPcEEvT_S4_St20forward_iterator_tag0
_ZNSt6vectorIdSaIdEE19_M_range_initializeIN9__gnu_cxx17__normal_iteratorIPdS1_EEEEvT_S7_St20forward_iterator_tag20
_ZNSt6vectorIdSaIdEE19_M_range_initializeIPKdEEvT_S5_St20forward_iterator_tag406
_ZNSt6vectorIdSaIdEE19_M_range_initializeIPfEEvT_S4_St20forward_iterator_tag3592
_ZNSt6vectorIfSaIfEE19_M_range_initializeIPfEEvT_S4_St20forward_iterator_tag2784
_ZNSt6vectorIiSaIiEE19_M_range_initializeIN9__gnu_cxx17__normal_iteratorIPiS1_EEEEvT_S7_St20forward_iterator_tag970
_ZNSt6vectorIiSaIiEE19_M_range_initializeIPKiEEvT_S5_St20forward_iterator_tag262
_ZNSt6vectorIiSaIiEE19_M_range_initializeIPiEEvT_S4_St20forward_iterator_tag366
_ZNSt6vectorIlSaIlEE19_M_range_initializeIPKlEEvT_S5_St20forward_iterator_tag401318
_ZNSt6vectorIcSaIcEE3endEv256238194
_ZNSt6vectorIN2at6TensorESaIS1_EE3endEv0
_ZNSt6vectorIN3c106IValueESaIS1_EE3endEv210445996
_ZNSt6vectorIN3c106SymIntESaIS1_EE3endEv0
_ZNSt6vectorIN3c107complexIdEESaIS2_EE3endEv0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE3endEv0
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE3endEv40
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE3endEv3622
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE3endEv872
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE3endEv86330
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE3endEv0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE3endEv0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EE3endEv0
_ZNSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE3endEv0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE3endEv37006076
_ZNSt6vectorIS_IdSaIdEESaIS1_EE3endEv25942
_ZNSt6vectorIS_IfSaIfEESaIS1_EE3endEv6
_ZNSt6vectorIS_IiSaIiEESaIS1_EE3endEv798
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE3endEv1036
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE3endEv11666
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE3endEv8
_ZNSt6vectorISt4pairIccESaIS1_EE3endEv0
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE3endEv2250
_ZNSt6vectorISt4pairIifESaIS1_EE3endEv272
_ZNSt6vectorISt4pairIiiESaIS1_EE3endEv3648
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE3endEv0
_ZNSt6vectorISt6threadSaIS0_EE3endEv3245376
_ZNSt6vectorIcSaIcEE3endEv0
_ZNSt6vectorIdSaIdEE3endEv845072
_ZNSt6vectorIfSaIfEE3endEv1458644
_ZNSt6vectorIhSaIhEE3endEv0
_ZNSt6vectorIiSaIiEE3endEv3015240
_ZNSt6vectorIlSaIlEE3endEv78692
_ZNSt6vectorImSaImEE3endEv6608
_ZNSt6vectorIcSaIcEE4backEv108540416
_ZNSt6vectorIN3c106IValueESaIS1_EE4backEv105276376
_ZNSt6vectorIN3c106SymIntESaIS1_EE4backEv0
_ZNSt6vectorIN3c107complexIdEESaIS2_EE4backEv0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE4backEv0
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE4backEv40
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE4backEv46
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE4backEv720
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE4backEv5006
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EE4backEv0
_ZNSt6vectorIS_IdSaIdEESaIS1_EE4backEv24670
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE4backEv546
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE4backEv9300
_ZNSt6vectorISt4pairIccESaIS1_EE4backEv0
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE4backEv1152
_ZNSt6vectorISt4pairIifESaIS1_EE4backEv152
_ZNSt6vectorISt4pairIiiESaIS1_EE4backEv2088
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE4backEv0
_ZNSt6vectorISt6threadSaIS0_EE4backEv1605734
_ZNSt6vectorIcSaIcEE4backEv0
_ZNSt6vectorIdSaIdEE4backEv5414
_ZNSt6vectorIhSaIhEE4backEv0
_ZNSt6vectorIiSaIiEE4backEv1568494
_ZNSt6vectorIlSaIlEE4backEv40554
_ZNSt6vectorImSaImEE4backEv124
_ZNSt6vectorIcSaIcEE4dataEv0
_ZNSt6vectorIcSaIcEE5beginEv149583868
_ZNSt6vectorIN2at6TensorESaIS1_EE5beginEv0
_ZNSt6vectorIN3c106IValueESaIS1_EE5beginEv105169620
_ZNSt6vectorIN3c106SymIntESaIS1_EE5beginEv0
_ZNSt6vectorIN3c107complexIdEESaIS2_EE5beginEv0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE5beginEv0
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE5beginEv0
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE5beginEv3576
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE5beginEv120
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5beginEv54496
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE5beginEv0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE5beginEv0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EE5beginEv0
_ZNSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE5beginEv0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE5beginEv37006052
_ZNSt6vectorIS_IdSaIdEESaIS1_EE5beginEv1272
_ZNSt6vectorIS_IfSaIfEESaIS1_EE5beginEv6
_ZNSt6vectorIS_IiSaIiEESaIS1_EE5beginEv798
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE5beginEv550
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE5beginEv2374
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EE5beginEv8
_ZNSt6vectorISt4pairIccESaIS1_EE5beginEv0
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE5beginEv1220
_ZNSt6vectorISt4pairIifESaIS1_EE5beginEv120
_ZNSt6vectorISt4pairIiiESaIS1_EE5beginEv1560
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE5beginEv0
_ZNSt6vectorISt6threadSaIS0_EE5beginEv1639642
_ZNSt6vectorIcSaIcEE5beginEv0
_ZNSt6vectorIdSaIdEE5beginEv1299684
_ZNSt6vectorIfSaIfEE5beginEv2908608
_ZNSt6vectorIiSaIiEE5beginEv1449540
_ZNSt6vectorIlSaIlEE5beginEv38138
_ZNSt6vectorImSaImEE5beginEv6484
_ZNSt6vectorIcSaIcEE5eraseEN9__gnu_cxx17__normal_iteratorIPKcS1_EES6_7110
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS5_S7_EESC_894
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS2_S4_EES9_12
_ZNSt6vectorIcSaIcEE5eraseEN9__gnu_cxx17__normal_iteratorIPKcS1_EES6_0
_ZNSt6vectorIiSaIiEE5eraseEN9__gnu_cxx17__normal_iteratorIPKiS1_EES6_6204
_ZNSt6vectorIcSaIcEE9push_backEOc106894892
_ZNSt6vectorIN3c106IValueESaIS1_EE9push_backEOS1_105276376
_ZNSt6vectorIN3c106SymIntESaIS1_EE9push_backEOS1_0
_ZNSt6vectorIN3c107complexIdEESaIS2_EE9push_backEOS2_0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE9push_backEOS4_0
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE9push_backEOS1_46
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE9push_backEOSD_360
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE9push_backEOS5_4042
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EE9push_backEOS2_0
_ZNSt6vectorIS_IdSaIdEESaIS1_EE9push_backEOS1_24670
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE9push_backEOS5_546
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE9push_backEOS7_6950
_ZNSt6vectorISt4pairIccESaIS1_EE9push_backEOS1_0
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE9push_backEOS2_1152
_ZNSt6vectorISt4pairIifESaIS1_EE9push_backEOS1_152
_ZNSt6vectorISt4pairIiiESaIS1_EE9push_backEOS1_2088
_ZNSt6vectorISt6threadSaIS0_EE9push_backEOS0_1392
_ZNSt6vectorIcSaIcEE9push_backEOc0
_ZNSt6vectorIdSaIdEE9push_backEOd5414
_ZNSt6vectorIiSaIiEE9push_backEOi1531150
_ZNSt6vectorIlSaIlEE9push_backEOl40554
_ZNSt6vectorIcSaIcEEC2EOS1_36989286
_ZNSt6vectorIN3c106IValueESaIS1_EEC2EOS3_36925424
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EEC2EOS7_8
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2EOS7_2
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EEC2EOS5_0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2EOSE_0
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEC2EOS9_0
_ZNSt6vectorISt4pairIccESaIS1_EEC2EOS3_0
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EEC2EOSI_0
_ZNSt6vectorIcSaIcEEC2EOS1_0
_ZNSt6vectorIdSaIdEEC2EOS1_61920
_ZNSt6vectorIiSaIiEEC2EOS1_1932
_ZNSt6vectorIcSaIcEEC2ERKS1_36692
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EEC2ERKSF_0
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2ERKS7_2062
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EEC2ERKS5_0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2ERKSE_0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EEC2ERKS4_2564
_ZNSt6vectorIS_IdSaIdEESaIS1_EEC2ERKS3_64
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEC2ERKS9_212
_ZNSt6vectorISt4pairIccESaIS1_EEC2ERKS3_0
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EEC2ERKS4_116
_ZNSt6vectorISt4pairIiiESaIS1_EEC2ERKS3_512
_ZNSt6vectorIcSaIcEEC2ERKS1_0
_ZNSt6vectorIdSaIdEEC2ERKS1_8192
_ZNSt6vectorIfSaIfEEC2ERKS1_3728
_ZNSt6vectorIhSaIhEEC2ERKS1_0
_ZNSt6vectorIiSaIiEEC2ERKS1_19232
_ZNSt6vectorIlSaIlEEC2ERKS1_10
_ZNSt6vectorIcSaIcEEC2Ev37394404
_ZNSt6vectorIN2at6TensorESaIS1_EEC2Ev0
_ZNSt6vectorIN3c106IValueESaIS1_EEC2Ev36925424
_ZNSt6vectorIN3c106SymIntESaIS1_EEC2Ev0
_ZNSt6vectorIN3c107complexIdEESaIS2_EEC2Ev0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EEC2Ev0
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EEC2Ev8
_ZNSt6vectorIN6loguru8CallbackESaIS1_EEC2Ev2
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EEC2Ev216
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2Ev6682
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EEC2Ev0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EEC2Ev0
_ZNSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EEC2Ev0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EEC2Ev26784
_ZNSt6vectorIS_IdSaIdEESaIS1_EEC2Ev142
_ZNSt6vectorIS_IfSaIfEESaIS1_EEC2Ev874
_ZNSt6vectorIS_IiSaIiEESaIS1_EEC2Ev462
_ZNSt6vectorISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EESaIS6_EEC2Ev0
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EEC2Ev170
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEC2Ev1086
_ZNSt6vectorISt4pairIccESaIS1_EEC2Ev0
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EEC2Ev116
_ZNSt6vectorISt4pairIifESaIS1_EEC2Ev26
_ZNSt6vectorISt4pairIiiESaIS1_EEC2Ev374
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EEC2Ev0
_ZNSt6vectorISt6threadSaIS0_EEC2Ev402810
_ZNSt6vectorIcSaIcEEC2Ev0
_ZNSt6vectorIdSaIdEEC2Ev2214
_ZNSt6vectorIhSaIhEEC2Ev0
_ZNSt6vectorIiSaIiEEC2Ev12550
_ZNSt6vectorIlSaIlEEC2Ev13392
_ZNSt6vectorImSaImEEC2Ev1072
_ZNSt6vectorIcSaIcEEC2IPcvEET_S4_RKS0_7860
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EEC2IPKNS1_6detail8json_refISD_EEvEET_SM_RKSE_114
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2INSt8__detail14_Node_iteratorIS5_Lb1ELb1EEEvEET_SC_RKS6_10
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2IPKPKcvEET_SD_RKS6_4
_ZNSt6vectorIcSaIcEEC2IPKcvEET_S5_RKS0_0
_ZNSt6vectorIcSaIcEEC2IPcvEET_S4_RKS0_0
_ZNSt6vectorIdSaIdEEC2IN9__gnu_cxx17__normal_iteratorIPdS1_EEvEET_S7_RKS0_20
_ZNSt6vectorIdSaIdEEC2IPfvEET_S4_RKS0_3592
_ZNSt6vectorIfSaIfEEC2IPfvEET_S4_RKS0_2784
_ZNSt6vectorIiSaIiEEC2IN9__gnu_cxx17__normal_iteratorIPiS1_EEvEET_S7_RKS0_970
_ZNSt6vectorIiSaIiEEC2IPivEET_S4_RKS0_366
_ZNSt6vectorIcSaIcEED2Ev227784016
_ZNSt6vectorIN2at6TensorESaIS1_EED2Ev378
_ZNSt6vectorIN3c106IValueESaIS1_EED2Ev110776272
_ZNSt6vectorIN3c106SymIntESaIS1_EED2Ev113517596
_ZNSt6vectorIN3c107complexIdEESaIS2_EED2Ev0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EED2Ev0
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EED2Ev16
_ZNSt6vectorIN6loguru8CallbackESaIS1_EED2Ev2
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EED2Ev330
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev8992
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EED2Ev0
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EED2Ev0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EED2Ev0
_ZNSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EED2Ev0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EED2Ev29348
_ZNSt6vectorIS_IdSaIdEESaIS1_EED2Ev260
_ZNSt6vectorIS_IfSaIfEESaIS1_EED2Ev1304
_ZNSt6vectorIS_IiSaIiEESaIS1_EED2Ev1102
_ZNSt6vectorISt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS3_EESaIS6_EED2Ev0
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EED2Ev70
_ZNSt6vectorISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EED2Ev0
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EED2Ev1306
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EED2Ev8
_ZNSt6vectorISt4pairIccESaIS1_EED2Ev0
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EED2Ev232
_ZNSt6vectorISt4pairIifESaIS1_EED2Ev26
_ZNSt6vectorISt4pairIiiESaIS1_EED2Ev1164
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EED2Ev0
_ZNSt6vectorISt6threadSaIS0_EED2Ev402810
_ZNSt6vectorIcSaIcEED2Ev0
_ZNSt6vectorIdSaIdEED2Ev499562
_ZNSt6vectorIfSaIfEED2Ev8850
_ZNSt6vectorIhSaIhEED2Ev0
_ZNSt6vectorIiSaIiEED2Ev2112124
_ZNSt6vectorIlSaIlEED2Ev414720
_ZNSt6vectorImSaImEED2Ev7544
_ZNSt6vectorIdSaIdEE14_M_move_assignEOS1_St17integral_constantIbLb1EE5568
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE14_M_move_assignEOS7_St17integral_constantIbLb1EE674
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE14_M_move_assignEOSE_St17integral_constantIbLb1EE0
_ZNSt6vectorIS_IiSaIiEESaIS1_EE14_M_move_assignEOS3_St17integral_constantIbLb1EE252
_ZNSt6vectorIdSaIdEE14_M_move_assignEOS1_St17integral_constantIbLb1EE916
_ZNSt6vectorIiSaIiEE14_M_move_assignEOS1_St17integral_constantIbLb1EE3726
_ZNSt6vectorIdSaIdEE18_M_fill_initializeEmRKd2493050
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE18_M_fill_initializeEmRKSC_0
_ZNSt6vectorIS_IdSaIdEESaIS1_EE18_M_fill_initializeEmRKS1_18
_ZNSt6vectorIS_IfSaIfEESaIS1_EE18_M_fill_initializeEmRKS1_218
_ZNSt6vectorIS_IiSaIiEESaIS1_EE18_M_fill_initializeEmRKS1_130
_ZNSt6vectorIdSaIdEE18_M_fill_initializeEmRKd422682
_ZNSt6vectorIiSaIiEE18_M_fill_initializeEmRKi2070002
_ZNSt6vectorIdSaIdEE20_M_allocate_and_copyIN9__gnu_cxx17__normal_iteratorIPKdS1_EEEEPdmT_S9_4218
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE20_M_allocate_and_copyIN9__gnu_cxx17__normal_iteratorIPKS5_S7_EEEEPS5_mT_SF_576
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE20_M_allocate_and_copyIPKS5_EEPS5_mT_SC_196
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE20_M_allocate_and_copyINS3_IPKSC_SE_EEEEPSC_mT_SK_0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE20_M_allocate_and_copyIN9__gnu_cxx17__normal_iteratorIPKS2_S4_EEEEPS2_mT_SC_0
_ZNSt6vectorIS_IfSaIfEESaIS1_EE20_M_allocate_and_copyIN9__gnu_cxx17__normal_iteratorIPKS1_S3_EEEEPS1_mT_SB_0
_ZNSt6vectorIdSaIdEE20_M_allocate_and_copyIN9__gnu_cxx17__normal_iteratorIPKdS1_EEEEPdmT_S9_12
_ZNSt6vectorIfSaIfEE20_M_allocate_and_copyIN9__gnu_cxx17__normal_iteratorIPKfS1_EEEEPfmT_S9_1068
_ZNSt6vectorIiSaIiEE20_M_allocate_and_copyIN9__gnu_cxx17__normal_iteratorIPKiS1_EEEEPimT_S9_2366
_ZNSt6vectorIdSaIdEE2atEm152668
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE2atEm14
_ZNSt6vectorIdSaIdEE2atEm151584
_ZNSt6vectorIiSaIiEE2atEm1070
_ZNSt6vectorIdSaIdEE5clearEv52740
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE5clearEv0
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE5clearEv0
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE5clearEv634
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE5clearEv0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE5clearEv4
_ZNSt6vectorIS_IfSaIfEESaIS1_EE5clearEv0
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE5clearEv68
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE5clearEv116
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE5clearEv0
_ZNSt6vectorIdSaIdEE5clearEv320
_ZNSt6vectorIfSaIfEE5clearEv3240
_ZNSt6vectorIiSaIiEE5clearEv34162
_ZNSt6vectorIlSaIlEE5clearEv14196
_ZNSt6vectorIdSaIdEE5eraseEN9__gnu_cxx17__normal_iteratorIPKdS1_EE912
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS1_S3_EE0
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS5_S7_EE120
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS2_S4_EE318
_ZNSt6vectorIdSaIdEE5eraseEN9__gnu_cxx17__normal_iteratorIPKdS1_EE40
_ZNSt6vectorIiSaIiEE5eraseEN9__gnu_cxx17__normal_iteratorIPKiS1_EE434
_ZNSt6vectorIdSaIdEE6resizeEm384
_ZNSt6vectorIdSaIdEE6resizeEm192
_ZNSt6vectorIiSaIiEE6resizeEm192
_ZNSt6vectorIdSaIdEE8pop_backEv868
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE8pop_backEv360
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE8pop_backEv4
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE8pop_backEv48
_ZNSt6vectorIdSaIdEE8pop_backEv48
_ZNSt6vectorIiSaIiEE8pop_backEv284
_ZNSt6vectorImSaImEE8pop_backEv124
_ZNSt6vectorIdSaIdEE9push_backERKd796964
_ZNSt6vectorIN2at6TensorESaIS1_EE9push_backERKS1_0
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE9push_backERKS5_113248
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE9push_backERKS3_0
_ZNSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE9push_backERKS3_0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE9push_backERKS2_49932
_ZNSt6vectorIS_IdSaIdEESaIS1_EE9push_backERKS1_3592
_ZNSt6vectorIS_IiSaIiEESaIS1_EE9push_backERKS1_1722
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE9push_backERKS2_318
_ZNSt6vectorIdSaIdEE9push_backERKd2210
_ZNSt6vectorIiSaIiEE9push_backERKi625814
_ZNSt6vectorImSaImEE9push_backERKm128
_ZNSt6vectorIdSaIdEEC2ERKS0_5568
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2ERKS6_674
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2ERKSD_0
_ZNSt6vectorIS_IiSaIiEESaIS1_EEC2ERKS2_252
_ZNSt6vectorIdSaIdEEC2ERKS0_916
_ZNSt6vectorIiSaIiEEC2ERKS0_3726
_ZNSt6vectorIdSaIdEEC2ESt16initializer_listIdERKS0_402458
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2ESt16initializer_listIS5_ERKS6_134
_ZNSt6vectorIS_IdSaIdEESaIS1_EEC2ESt16initializer_listIS1_ERKS2_36
_ZNSt6vectorIS_IiSaIiEESaIS1_EEC2ESt16initializer_listIS1_ERKS2_8
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEC2ESt16initializer_listIS7_ERKS8_8
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdESaIS7_EEC2ESt16initializer_listIS7_ERKS8_8
_ZNSt6vectorISt4pairIiiESaIS1_EEC2ESt16initializer_listIS1_ERKS2_278
_ZNSt6vectorIdSaIdEEC2ESt16initializer_listIdERKS0_406
_ZNSt6vectorIiSaIiEEC2ESt16initializer_listIiERKS0_262
_ZNSt6vectorIlSaIlEEC2ESt16initializer_listIlERKS0_401318
_ZNSt6vectorIdSaIdEEC2EmRKdRKS0_2493050
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEC2EmRKSC_RKSD_0
_ZNSt6vectorIS_IdSaIdEESaIS1_EEC2EmRKS1_RKS2_18
_ZNSt6vectorIS_IfSaIfEESaIS1_EEC2EmRKS1_RKS2_218
_ZNSt6vectorIS_IiSaIiEESaIS1_EEC2EmRKS1_RKS2_130
_ZNSt6vectorIdSaIdEEC2EmRKdRKS0_422682
_ZNSt6vectorIiSaIiEEC2EmRKiRKS0_2070002
_ZNSt6vectorIdSaIdEEaSEOS1_5568
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEaSEOS7_674
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEaSEOSE_0
_ZNSt6vectorIS_IiSaIiEESaIS1_EEaSEOS3_252
_ZNSt6vectorIdSaIdEEaSEOS1_916
_ZNSt6vectorIiSaIiEEaSEOS1_3726
_ZNSt6vectorIdSaIdEEixEm650166726
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EEixEm40
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EEixEm330
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEixEm9445432
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEixEm0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EEixEm0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EEixEm10
_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm122374
_ZNSt6vectorIS_IfSaIfEESaIS1_EEixEm2391504
_ZNSt6vectorIS_IiSaIiEESaIS1_EEixEm38158
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EEixEm1760
_ZNSt6vectorISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EEixEm0
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EEixEm3574
_ZNSt6vectorISt4pairIifESaIS1_EEixEm26
_ZNSt6vectorISt4pairIiiESaIS1_EEixEm126
_ZNSt6vectorIdSaIdEEixEm1992712
_ZNSt6vectorIfSaIfEEixEm38270596
_ZNSt6vectorIiSaIiEEixEm597900084
_ZNSt6vectorIfSaIfEE21_M_default_initializeEm4510
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE21_M_default_initializeEm662
_ZNSt6vectorIS_IiSaIiEESaIS1_EE21_M_default_initializeEm250
_ZNSt6vectorISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EE21_M_default_initializeEm0
_ZNSt6vectorIfSaIfEE21_M_default_initializeEm218
_ZNSt6vectorIiSaIiEE21_M_default_initializeEm3380
_ZNSt6vectorIfSaIfEEC2EmRKS0_4510
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEC2EmRKS6_662
_ZNSt6vectorIS_IiSaIiEESaIS1_EEC2EmRKS2_250
_ZNSt6vectorISt4pairIN9__gnu_cxx17__normal_iteratorIPKcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEiESaISC_EEC2EmRKSD_0
_ZNSt6vectorIfSaIfEEC2EmRKS0_218
_ZNSt6vectorIiSaIiEEC2EmRKS0_3380
_ZNSt6vectorIiSaIiEE16_Temporary_value6_M_ptrEv356
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE16_Temporary_value6_M_ptrEv244
_ZNSt6vectorIiSaIiEE16_Temporary_value6_M_ptrEv112
_ZNSt6vectorIiSaIiEE16_Temporary_value6_M_valEv178
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE16_Temporary_value6_M_valEv122
_ZNSt6vectorIiSaIiEE16_Temporary_value6_M_valEv56
_ZNSt6vectorIiSaIiEE16_Temporary_value8_StorageC2Ev178
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE16_Temporary_value8_StorageC2Ev122
_ZNSt6vectorIiSaIiEE16_Temporary_value8_StorageC2Ev56
_ZNSt6vectorIiSaIiEE16_Temporary_value8_StorageD2Ev178
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE16_Temporary_value8_StorageD2Ev122
_ZNSt6vectorIiSaIiEE16_Temporary_value8_StorageD2Ev56
_ZNSt6vectorIiSaIiEE16_Temporary_valueC2IJRKiEEEPS1_DpOT_178
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE16_Temporary_valueC2IJRKS5_EEEPS7_DpOT_122
_ZNSt6vectorIiSaIiEE16_Temporary_valueC2IJRKiEEEPS1_DpOT_56
_ZNSt6vectorIiSaIiEE16_Temporary_valueD2Ev178
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE16_Temporary_valueD2Ev122
_ZNSt6vectorIiSaIiEE16_Temporary_valueD2Ev56
_ZNSt6vectorIiSaIiEE6insertIN9__gnu_cxx17__normal_iteratorIPiS1_EEvEES6_NS4_IPKiS1_EET_SA_1348
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE6insertIN9__gnu_cxx17__normal_iteratorIPS5_S7_EEvEESC_NSA_IPKS5_S7_EET_SG_348
_ZNSt6vectorIiSaIiEE6insertIN9__gnu_cxx17__normal_iteratorIPiS1_EEvEES6_NS4_IPKiS1_EET_SA_1000
_ZSteqIhSaIhEEbRKSt6vectorIT_T0_ES6_160
_ZSteqIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvEESaISE_EEbRKS4_IT_T0_ESK_0
_ZSteqINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEbRKSt6vectorIT_T0_ESC_68
_ZSteqISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEbRKSt6vectorIT_T0_ESE_16
_ZSteqISt4pairIiiESaIS1_EEbRKSt6vectorIT_T0_ES8_32
_ZSteqIhSaIhEEbRKSt6vectorIT_T0_ES6_0
_ZSteqIiSaIiEEbRKSt6vectorIT_T0_ES6_44
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/stl_vector.h.gcov.html b/html/usr/include/c++/13/bits/stl_vector.h.gcov.html new file mode 100644 index 0000000..90b77d1 --- /dev/null +++ b/html/usr/include/c++/13/bits/stl_vector.h.gcov.html @@ -0,0 +1,2208 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/stl_vector.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - stl_vector.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:90.3 %248224
Test Date:2024-04-30 13:17:26Functions:66.7 %1031688
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Vector implementation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1996
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this  software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/stl_vector.h
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{vector}
+      54              :  */
+      55              : 
+      56              : #ifndef _STL_VECTOR_H
+      57              : #define _STL_VECTOR_H 1
+      58              : 
+      59              : #include <bits/stl_iterator_base_funcs.h>
+      60              : #include <bits/functexcept.h>
+      61              : #include <bits/concept_check.h>
+      62              : #if __cplusplus >= 201103L
+      63              : #include <initializer_list>
+      64              : #endif
+      65              : #if __cplusplus >= 202002L
+      66              : # include <compare>
+      67              : #define __cpp_lib_constexpr_vector 201907L
+      68              : #endif
+      69              : 
+      70              : #include <debug/assertions.h>
+      71              : 
+      72              : #if _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR
+      73              : extern "C" void
+      74              : __sanitizer_annotate_contiguous_container(const void*, const void*,
+      75              :                                           const void*, const void*);
+      76              : #endif
+      77              : 
+      78              : namespace std _GLIBCXX_VISIBILITY(default)
+      79              : {
+      80              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      81              : _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
+      82              : 
+      83              :   /// See bits/stl_deque.h's _Deque_base for an explanation.
+      84              :   template<typename _Tp, typename _Alloc>
+      85              :     struct _Vector_base
+      86              :     {
+      87              :       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+      88              :         rebind<_Tp>::other _Tp_alloc_type;
+      89              :       typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>::pointer
+      90              :         pointer;
+      91              : 
+      92              :       struct _Vector_impl_data
+      93              :       {
+      94              :         pointer _M_start;
+      95              :         pointer _M_finish;
+      96              :         pointer _M_end_of_storage;
+      97              : 
+      98              :         _GLIBCXX20_CONSTEXPR
+      99     40371622 :         _Vector_impl_data() _GLIBCXX_NOEXCEPT
+     100     40371622 :         : _M_start(), _M_finish(), _M_end_of_storage()
+     101     40371622 :         { }
+     102              : 
+     103              : #if __cplusplus >= 201103L
+     104              :         _GLIBCXX20_CONSTEXPR
+     105     36989286 :         _Vector_impl_data(_Vector_impl_data&& __x) noexcept
+     106     36989286 :         : _M_start(__x._M_start), _M_finish(__x._M_finish),
+     107     36989286 :           _M_end_of_storage(__x._M_end_of_storage)
+     108     36989286 :         { __x._M_start = __x._M_finish = __x._M_end_of_storage = pointer(); }
+     109              : #endif
+     110              : 
+     111              :         _GLIBCXX20_CONSTEXPR
+     112              :         void
+     113        33408 :         _M_copy_data(_Vector_impl_data const& __x) _GLIBCXX_NOEXCEPT
+     114              :         {
+     115        33408 :           _M_start = __x._M_start;
+     116        33408 :           _M_finish = __x._M_finish;
+     117        33408 :           _M_end_of_storage = __x._M_end_of_storage;
+     118        33408 :         }
+     119              : 
+     120              :         _GLIBCXX20_CONSTEXPR
+     121              :         void
+     122        11136 :         _M_swap_data(_Vector_impl_data& __x) _GLIBCXX_NOEXCEPT
+     123              :         {
+     124              :           // Do not use std::swap(_M_start, __x._M_start), etc as it loses
+     125              :           // information used by TBAA.
+     126        11136 :           _Vector_impl_data __tmp;
+     127        11136 :           __tmp._M_copy_data(*this);
+     128        11136 :           _M_copy_data(__x);
+     129        11136 :           __x._M_copy_data(__tmp);
+     130        11136 :         }
+     131              :       };
+     132              : 
+     133              :       struct _Vector_impl
+     134              :         : public _Tp_alloc_type, public _Vector_impl_data
+     135              :       {
+     136              :         _GLIBCXX20_CONSTEXPR
+     137     37394404 :         _Vector_impl() _GLIBCXX_NOEXCEPT_IF(
+     138              :             is_nothrow_default_constructible<_Tp_alloc_type>::value)
+     139     37394404 :         : _Tp_alloc_type()
+     140     37394404 :         { }
+     141              : 
+     142              :         _GLIBCXX20_CONSTEXPR
+     143      2950562 :         _Vector_impl(_Tp_alloc_type const& __a) _GLIBCXX_NOEXCEPT
+     144      2950562 :         : _Tp_alloc_type(__a)
+     145      2950562 :         { }
+     146              : 
+     147              : #if __cplusplus >= 201103L
+     148              :         // Not defaulted, to enforce noexcept(true) even when
+     149              :         // !is_nothrow_move_constructible<_Tp_alloc_type>.
+     150              :         _GLIBCXX20_CONSTEXPR
+     151     36989286 :         _Vector_impl(_Vector_impl&& __x) noexcept
+     152     73978572 :         : _Tp_alloc_type(std::move(__x)), _Vector_impl_data(std::move(__x))
+     153     36989286 :         { }
+     154              : 
+     155              :         _GLIBCXX20_CONSTEXPR
+     156              :         _Vector_impl(_Tp_alloc_type&& __a) noexcept
+     157              :         : _Tp_alloc_type(std::move(__a))
+     158              :         { }
+     159              : 
+     160              :         _GLIBCXX20_CONSTEXPR
+     161            0 :         _Vector_impl(_Tp_alloc_type&& __a, _Vector_impl&& __rv) noexcept
+     162            0 :         : _Tp_alloc_type(std::move(__a)), _Vector_impl_data(std::move(__rv))
+     163            0 :         { }
+     164              : #endif
+     165              : 
+     166              : #if _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR
+     167              :         template<typename = _Tp_alloc_type>
+     168              :           struct _Asan
+     169              :           {
+     170              :             typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>
+     171              :               ::size_type size_type;
+     172              : 
+     173              :             static _GLIBCXX20_CONSTEXPR void
+     174              :             _S_shrink(_Vector_impl&, size_type) { }
+     175              :             static _GLIBCXX20_CONSTEXPR void
+     176              :             _S_on_dealloc(_Vector_impl&) { }
+     177              : 
+     178              :             typedef _Vector_impl& _Reinit;
+     179              : 
+     180              :             struct _Grow
+     181              :             {
+     182              :               _GLIBCXX20_CONSTEXPR _Grow(_Vector_impl&, size_type) { }
+     183              :               _GLIBCXX20_CONSTEXPR void _M_grew(size_type) { }
+     184              :             };
+     185              :           };
+     186              : 
+     187              :         // Enable ASan annotations for memory obtained from std::allocator.
+     188              :         template<typename _Up>
+     189              :           struct _Asan<allocator<_Up> >
+     190              :           {
+     191              :             typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>
+     192              :               ::size_type size_type;
+     193              : 
+     194              :             // Adjust ASan annotation for [_M_start, _M_end_of_storage) to
+     195              :             // mark end of valid region as __curr instead of __prev.
+     196              :             static _GLIBCXX20_CONSTEXPR void
+     197              :             _S_adjust(_Vector_impl& __impl, pointer __prev, pointer __curr)
+     198              :             {
+     199              : #if __cpp_lib_is_constant_evaluated
+     200              :               if (std::is_constant_evaluated())
+     201              :                 return;
+     202              : #endif
+     203              :               __sanitizer_annotate_contiguous_container(__impl._M_start,
+     204              :                   __impl._M_end_of_storage, __prev, __curr);
+     205              :             }
+     206              : 
+     207              :             static _GLIBCXX20_CONSTEXPR void
+     208              :             _S_grow(_Vector_impl& __impl, size_type __n)
+     209              :             { _S_adjust(__impl, __impl._M_finish, __impl._M_finish + __n); }
+     210              : 
+     211              :             static _GLIBCXX20_CONSTEXPR void
+     212              :             _S_shrink(_Vector_impl& __impl, size_type __n)
+     213              :             { _S_adjust(__impl, __impl._M_finish + __n, __impl._M_finish); }
+     214              : 
+     215              :             static _GLIBCXX20_CONSTEXPR void
+     216              :             _S_on_dealloc(_Vector_impl& __impl)
+     217              :             {
+     218              :               if (__impl._M_start)
+     219              :                 _S_adjust(__impl, __impl._M_finish, __impl._M_end_of_storage);
+     220              :             }
+     221              : 
+     222              :             // Used on reallocation to tell ASan unused capacity is invalid.
+     223              :             struct _Reinit
+     224              :             {
+     225              :               explicit _GLIBCXX20_CONSTEXPR
+     226              :               _Reinit(_Vector_impl& __impl) : _M_impl(__impl)
+     227              :               {
+     228              :                 // Mark unused capacity as valid again before deallocating it.
+     229              :                 _S_on_dealloc(_M_impl);
+     230              :               }
+     231              : 
+     232              :               _GLIBCXX20_CONSTEXPR
+     233              :               ~_Reinit()
+     234              :               {
+     235              :                 // Mark unused capacity as invalid after reallocation.
+     236              :                 if (_M_impl._M_start)
+     237              :                   _S_adjust(_M_impl, _M_impl._M_end_of_storage,
+     238              :                             _M_impl._M_finish);
+     239              :               }
+     240              : 
+     241              :               _Vector_impl& _M_impl;
+     242              : 
+     243              : #if __cplusplus >= 201103L
+     244              :               _Reinit(const _Reinit&) = delete;
+     245              :               _Reinit& operator=(const _Reinit&) = delete;
+     246              : #endif
+     247              :             };
+     248              : 
+     249              :             // Tell ASan when unused capacity is initialized to be valid.
+     250              :             struct _Grow
+     251              :             {
+     252              :               _GLIBCXX20_CONSTEXPR
+     253              :               _Grow(_Vector_impl& __impl, size_type __n)
+     254              :               : _M_impl(__impl), _M_n(__n)
+     255              :               { _S_grow(_M_impl, __n); }
+     256              : 
+     257              :               _GLIBCXX20_CONSTEXPR
+     258              :               ~_Grow() { if (_M_n) _S_shrink(_M_impl, _M_n); }
+     259              : 
+     260              :               _GLIBCXX20_CONSTEXPR
+     261              :               void _M_grew(size_type __n) { _M_n -= __n; }
+     262              : 
+     263              : #if __cplusplus >= 201103L
+     264              :               _Grow(const _Grow&) = delete;
+     265              :               _Grow& operator=(const _Grow&) = delete;
+     266              : #endif
+     267              :             private:
+     268              :               _Vector_impl& _M_impl;
+     269              :               size_type _M_n;
+     270              :             };
+     271              :           };
+     272              : 
+     273              : #define _GLIBCXX_ASAN_ANNOTATE_REINIT \
+     274              :   typename _Base::_Vector_impl::template _Asan<>::_Reinit const \
+     275              :         __attribute__((__unused__)) __reinit_guard(this->_M_impl)
+     276              : #define _GLIBCXX_ASAN_ANNOTATE_GROW(n) \
+     277              :   typename _Base::_Vector_impl::template _Asan<>::_Grow \
+     278              :         __attribute__((__unused__)) __grow_guard(this->_M_impl, (n))
+     279              : #define _GLIBCXX_ASAN_ANNOTATE_GREW(n) __grow_guard._M_grew(n)
+     280              : #define _GLIBCXX_ASAN_ANNOTATE_SHRINK(n) \
+     281              :   _Base::_Vector_impl::template _Asan<>::_S_shrink(this->_M_impl, n)
+     282              : #define _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC \
+     283              :   _Base::_Vector_impl::template _Asan<>::_S_on_dealloc(this->_M_impl)
+     284              : #else // ! (_GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR)
+     285              : #define _GLIBCXX_ASAN_ANNOTATE_REINIT
+     286              : #define _GLIBCXX_ASAN_ANNOTATE_GROW(n)
+     287              : #define _GLIBCXX_ASAN_ANNOTATE_GREW(n)
+     288              : #define _GLIBCXX_ASAN_ANNOTATE_SHRINK(n)
+     289              : #define _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC
+     290              : #endif // _GLIBCXX_SANITIZE_STD_ALLOCATOR && _GLIBCXX_SANITIZE_VECTOR
+     291              :       };
+     292              : 
+     293              :     public:
+     294              :       typedef _Alloc allocator_type;
+     295              : 
+     296              :       _GLIBCXX20_CONSTEXPR
+     297              :       _Tp_alloc_type&
+     298    444395774 :       _M_get_Tp_allocator() _GLIBCXX_NOEXCEPT
+     299    444395774 :       { return this->_M_impl; }
+     300              : 
+     301              :       _GLIBCXX20_CONSTEXPR
+     302              :       const _Tp_alloc_type&
+     303    213152692 :       _M_get_Tp_allocator() const _GLIBCXX_NOEXCEPT
+     304    213152692 :       { return this->_M_impl; }
+     305              : 
+     306              :       _GLIBCXX20_CONSTEXPR
+     307              :       allocator_type
+     308         5568 :       get_allocator() const _GLIBCXX_NOEXCEPT
+     309        11136 :       { return allocator_type(_M_get_Tp_allocator()); }
+     310              : 
+     311              : #if __cplusplus >= 201103L
+     312     37394404 :       _Vector_base() = default;
+     313              : #else
+     314              :       _Vector_base() { }
+     315              : #endif
+     316              : 
+     317              :       _GLIBCXX20_CONSTEXPR
+     318       415886 :       _Vector_base(const allocator_type& __a) _GLIBCXX_NOEXCEPT
+     319       415886 :       : _M_impl(__a) { }
+     320              : 
+     321              :       // Kept for ABI compatibility.
+     322              : #if !_GLIBCXX_INLINE_VERSION
+     323              :       _GLIBCXX20_CONSTEXPR
+     324              :       _Vector_base(size_t __n)
+     325              :       : _M_impl()
+     326              :       { _M_create_storage(__n); }
+     327              : #endif
+     328              : 
+     329              :       _GLIBCXX20_CONSTEXPR
+     330      2534464 :       _Vector_base(size_t __n, const allocator_type& __a)
+     331      2534464 :       : _M_impl(__a)
+     332      2534464 :       { _M_create_storage(__n); }
+     333              : 
+     334              : #if __cplusplus >= 201103L
+     335     36989286 :       _Vector_base(_Vector_base&&) = default;
+     336              : 
+     337              :       // Kept for ABI compatibility.
+     338              : # if !_GLIBCXX_INLINE_VERSION
+     339              :       _GLIBCXX20_CONSTEXPR
+     340              :       _Vector_base(_Tp_alloc_type&& __a) noexcept
+     341              :       : _M_impl(std::move(__a)) { }
+     342              : 
+     343              :       _GLIBCXX20_CONSTEXPR
+     344              :       _Vector_base(_Vector_base&& __x, const allocator_type& __a)
+     345              :       : _M_impl(__a)
+     346              :       {
+     347              :         if (__x.get_allocator() == __a)
+     348              :           this->_M_impl._M_swap_data(__x._M_impl);
+     349              :         else
+     350              :           {
+     351              :             size_t __n = __x._M_impl._M_finish - __x._M_impl._M_start;
+     352              :             _M_create_storage(__n);
+     353              :           }
+     354              :       }
+     355              : # endif
+     356              : 
+     357              :       _GLIBCXX20_CONSTEXPR
+     358            0 :       _Vector_base(const allocator_type& __a, _Vector_base&& __x)
+     359            0 :       : _M_impl(_Tp_alloc_type(__a), std::move(__x._M_impl))
+     360            0 :       { }
+     361              : #endif
+     362              : 
+     363              :       _GLIBCXX20_CONSTEXPR
+     364    227784016 :       ~_Vector_base() _GLIBCXX_NOEXCEPT
+     365              :       {
+     366    227784016 :         _M_deallocate(_M_impl._M_start,
+     367    227784016 :                       _M_impl._M_end_of_storage - _M_impl._M_start);
+     368    227784016 :       }
+     369              : 
+     370              :     public:
+     371              :       _Vector_impl _M_impl;
+     372              : 
+     373              :       _GLIBCXX20_CONSTEXPR
+     374              :       pointer
+     375    109542904 :       _M_allocate(size_t __n)
+     376              :       {
+     377              :         typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr;
+     378    219084562 :         return __n != 0 ? _Tr::allocate(_M_impl, __n) : pointer();
+     379              :       }
+     380              : 
+     381              :       _GLIBCXX20_CONSTEXPR
+     382              :       void
+     383    334378898 :       _M_deallocate(pointer __p, size_t __n)
+     384              :       {
+     385              :         typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr;
+     386    334378898 :         if (__p)
+     387    223021480 :           _Tr::deallocate(_M_impl, __p, __n);
+     388    334378898 :       }
+     389              : 
+     390              :     protected:
+     391              :       _GLIBCXX20_CONSTEXPR
+     392              :       void
+     393      2534464 :       _M_create_storage(size_t __n)
+     394              :       {
+     395      2534464 :         this->_M_impl._M_start = this->_M_allocate(__n);
+     396      2534464 :         this->_M_impl._M_finish = this->_M_impl._M_start;
+     397      2534464 :         this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
+     398      2534464 :       }
+     399              :     };
+     400              : 
+     401              :   /**
+     402              :    *  @brief A standard container which offers fixed time access to
+     403              :    *  individual elements in any order.
+     404              :    *
+     405              :    *  @ingroup sequences
+     406              :    *  @headerfile vector
+     407              :    *  @since C++98
+     408              :    *
+     409              :    *  @tparam _Tp  Type of element.
+     410              :    *  @tparam _Alloc  Allocator type, defaults to allocator<_Tp>.
+     411              :    *
+     412              :    *  Meets the requirements of a <a href="tables.html#65">container</a>, a
+     413              :    *  <a href="tables.html#66">reversible container</a>, and a
+     414              :    *  <a href="tables.html#67">sequence</a>, including the
+     415              :    *  <a href="tables.html#68">optional sequence requirements</a> with the
+     416              :    *  %exception of @c push_front and @c pop_front.
+     417              :    *
+     418              :    *  In some terminology a %vector can be described as a dynamic
+     419              :    *  C-style array, it offers fast and efficient access to individual
+     420              :    *  elements in any order and saves the user from worrying about
+     421              :    *  memory and size allocation.  Subscripting ( @c [] ) access is
+     422              :    *  also provided as with C-style arrays.
+     423              :   */
+     424              :   template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
+     425              :     class vector : protected _Vector_base<_Tp, _Alloc>
+     426              :     {
+     427              : #ifdef _GLIBCXX_CONCEPT_CHECKS
+     428              :       // Concept requirements.
+     429              :       typedef typename _Alloc::value_type               _Alloc_value_type;
+     430              : # if __cplusplus < 201103L
+     431              :       __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
+     432              : # endif
+     433              :       __glibcxx_class_requires2(_Tp, _Alloc_value_type, _SameTypeConcept)
+     434              : #endif
+     435              : 
+     436              : #if __cplusplus >= 201103L
+     437              :       static_assert(is_same<typename remove_cv<_Tp>::type, _Tp>::value,
+     438              :           "std::vector must have a non-const, non-volatile value_type");
+     439              : # if __cplusplus > 201703L || defined __STRICT_ANSI__
+     440              :       static_assert(is_same<typename _Alloc::value_type, _Tp>::value,
+     441              :           "std::vector must have the same value_type as its allocator");
+     442              : # endif
+     443              : #endif
+     444              : 
+     445              :       typedef _Vector_base<_Tp, _Alloc>                   _Base;
+     446              :       typedef typename _Base::_Tp_alloc_type            _Tp_alloc_type;
+     447              :       typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type>   _Alloc_traits;
+     448              : 
+     449              :     public:
+     450              :       typedef _Tp                                       value_type;
+     451              :       typedef typename _Base::pointer                   pointer;
+     452              :       typedef typename _Alloc_traits::const_pointer     const_pointer;
+     453              :       typedef typename _Alloc_traits::reference         reference;
+     454              :       typedef typename _Alloc_traits::const_reference   const_reference;
+     455              :       typedef __gnu_cxx::__normal_iterator<pointer, vector> iterator;
+     456              :       typedef __gnu_cxx::__normal_iterator<const_pointer, vector>
+     457              :       const_iterator;
+     458              :       typedef std::reverse_iterator<const_iterator>       const_reverse_iterator;
+     459              :       typedef std::reverse_iterator<iterator>             reverse_iterator;
+     460              :       typedef size_t                                    size_type;
+     461              :       typedef ptrdiff_t                                 difference_type;
+     462              :       typedef _Alloc                                    allocator_type;
+     463              : 
+     464              :     private:
+     465              : #if __cplusplus >= 201103L
+     466              :       static constexpr bool
+     467              :       _S_nothrow_relocate(true_type)
+     468              :       {
+     469              :         return noexcept(std::__relocate_a(std::declval<pointer>(),
+     470              :                                           std::declval<pointer>(),
+     471              :                                           std::declval<pointer>(),
+     472              :                                           std::declval<_Tp_alloc_type&>()));
+     473              :       }
+     474              : 
+     475              :       static constexpr bool
+     476              :       _S_nothrow_relocate(false_type)
+     477              :       { return false; }
+     478              : 
+     479              :       static constexpr bool
+     480              :       _S_use_relocate()
+     481              :       {
+     482              :         // Instantiating std::__relocate_a might cause an error outside the
+     483              :         // immediate context (in __relocate_object_a's noexcept-specifier),
+     484              :         // so only do it if we know the type can be move-inserted into *this.
+     485              :         return _S_nothrow_relocate(__is_move_insertable<_Tp_alloc_type>{});
+     486              :       }
+     487              : 
+     488              :       static pointer
+     489              :       _S_do_relocate(pointer __first, pointer __last, pointer __result,
+     490              :                      _Tp_alloc_type& __alloc, true_type) noexcept
+     491              :       {
+     492              :         return std::__relocate_a(__first, __last, __result, __alloc);
+     493              :       }
+     494              : 
+     495              :       static pointer
+     496              :       _S_do_relocate(pointer, pointer, pointer __result,
+     497              :                      _Tp_alloc_type&, false_type) noexcept
+     498              :       { return __result; }
+     499              : 
+     500              :       static _GLIBCXX20_CONSTEXPR pointer
+     501    213096698 :       _S_relocate(pointer __first, pointer __last, pointer __result,
+     502              :                   _Tp_alloc_type& __alloc) noexcept
+     503              :       {
+     504              : #if __cpp_if_constexpr
+     505              :         // All callers have already checked _S_use_relocate() so just do it.
+     506    213096698 :         return std::__relocate_a(__first, __last, __result, __alloc);
+     507              : #else
+     508              :         using __do_it = __bool_constant<_S_use_relocate()>;
+     509              :         return _S_do_relocate(__first, __last, __result, __alloc, __do_it{});
+     510              : #endif
+     511              :       }
+     512              : #endif // C++11
+     513              : 
+     514              :     protected:
+     515              :       using _Base::_M_allocate;
+     516              :       using _Base::_M_deallocate;
+     517              :       using _Base::_M_impl;
+     518              :       using _Base::_M_get_Tp_allocator;
+     519              : 
+     520              :     public:
+     521              :       // [23.2.4.1] construct/copy/destroy
+     522              :       // (assign() and get_allocator() are also listed in this section)
+     523              : 
+     524              :       /**
+     525              :        *  @brief  Creates a %vector with no elements.
+     526              :        */
+     527              : #if __cplusplus >= 201103L
+     528     37394404 :       vector() = default;
+     529              : #else
+     530              :       vector() { }
+     531              : #endif
+     532              : 
+     533              :       /**
+     534              :        *  @brief  Creates a %vector with no elements.
+     535              :        *  @param  __a  An allocator object.
+     536              :        */
+     537              :       explicit
+     538              :       _GLIBCXX20_CONSTEXPR
+     539         5568 :       vector(const allocator_type& __a) _GLIBCXX_NOEXCEPT
+     540         5568 :       : _Base(__a) { }
+     541              : 
+     542              : #if __cplusplus >= 201103L
+     543              :       /**
+     544              :        *  @brief  Creates a %vector with default constructed elements.
+     545              :        *  @param  __n  The number of elements to initially create.
+     546              :        *  @param  __a  An allocator.
+     547              :        *
+     548              :        *  This constructor fills the %vector with @a __n default
+     549              :        *  constructed elements.
+     550              :        */
+     551              :       explicit
+     552              :       _GLIBCXX20_CONSTEXPR
+     553         4510 :       vector(size_type __n, const allocator_type& __a = allocator_type())
+     554         4510 :       : _Base(_S_check_init_len(__n, __a), __a)
+     555         4510 :       { _M_default_initialize(__n); }
+     556              : 
+     557              :       /**
+     558              :        *  @brief  Creates a %vector with copies of an exemplar element.
+     559              :        *  @param  __n  The number of elements to initially create.
+     560              :        *  @param  __value  An element to copy.
+     561              :        *  @param  __a  An allocator.
+     562              :        *
+     563              :        *  This constructor fills the %vector with @a __n copies of @a __value.
+     564              :        */
+     565              :       _GLIBCXX20_CONSTEXPR
+     566      2493050 :       vector(size_type __n, const value_type& __value,
+     567              :              const allocator_type& __a = allocator_type())
+     568      2493050 :       : _Base(_S_check_init_len(__n, __a), __a)
+     569      2493050 :       { _M_fill_initialize(__n, __value); }
+     570              : #else
+     571              :       /**
+     572              :        *  @brief  Creates a %vector with copies of an exemplar element.
+     573              :        *  @param  __n  The number of elements to initially create.
+     574              :        *  @param  __value  An element to copy.
+     575              :        *  @param  __a  An allocator.
+     576              :        *
+     577              :        *  This constructor fills the %vector with @a __n copies of @a __value.
+     578              :        */
+     579              :       explicit
+     580              :       vector(size_type __n, const value_type& __value = value_type(),
+     581              :              const allocator_type& __a = allocator_type())
+     582              :       : _Base(_S_check_init_len(__n, __a), __a)
+     583              :       { _M_fill_initialize(__n, __value); }
+     584              : #endif
+     585              : 
+     586              :       /**
+     587              :        *  @brief  %Vector copy constructor.
+     588              :        *  @param  __x  A %vector of identical element and allocator types.
+     589              :        *
+     590              :        *  All the elements of @a __x are copied, but any unused capacity in
+     591              :        *  @a __x  will not be copied
+     592              :        *  (i.e. capacity() == size() in the new %vector).
+     593              :        *
+     594              :        *  The newly-created %vector uses a copy of the allocator object used
+     595              :        *  by @a __x (unless the allocator traits dictate a different object).
+     596              :        */
+     597              :       _GLIBCXX20_CONSTEXPR
+     598        36692 :       vector(const vector& __x)
+     599              :       : _Base(__x.size(),
+     600        73384 :         _Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator()))
+     601              :       {
+     602        36692 :         this->_M_impl._M_finish =
+     603        36692 :           std::__uninitialized_copy_a(__x.begin(), __x.end(),
+     604              :                                       this->_M_impl._M_start,
+     605        36692 :                                       _M_get_Tp_allocator());
+     606        36692 :       }
+     607              : 
+     608              : #if __cplusplus >= 201103L
+     609              :       /**
+     610              :        *  @brief  %Vector move constructor.
+     611              :        *
+     612              :        *  The newly-created %vector contains the exact contents of the
+     613              :        *  moved instance.
+     614              :        *  The contents of the moved instance are a valid, but unspecified
+     615              :        *  %vector.
+     616              :        */
+     617     36989286 :       vector(vector&&) noexcept = default;
+     618              : 
+     619              :       /// Copy constructor with alternative allocator
+     620              :       _GLIBCXX20_CONSTEXPR
+     621              :       vector(const vector& __x, const __type_identity_t<allocator_type>& __a)
+     622              :       : _Base(__x.size(), __a)
+     623              :       {
+     624              :         this->_M_impl._M_finish =
+     625              :           std::__uninitialized_copy_a(__x.begin(), __x.end(),
+     626              :                                       this->_M_impl._M_start,
+     627              :                                       _M_get_Tp_allocator());
+     628              :       }
+     629              : 
+     630              :     private:
+     631              :       _GLIBCXX20_CONSTEXPR
+     632            0 :       vector(vector&& __rv, const allocator_type& __m, true_type) noexcept
+     633            0 :       : _Base(__m, std::move(__rv))
+     634            0 :       { }
+     635              : 
+     636              :       _GLIBCXX20_CONSTEXPR
+     637              :       vector(vector&& __rv, const allocator_type& __m, false_type)
+     638              :       : _Base(__m)
+     639              :       {
+     640              :         if (__rv.get_allocator() == __m)
+     641              :           this->_M_impl._M_swap_data(__rv._M_impl);
+     642              :         else if (!__rv.empty())
+     643              :           {
+     644              :             this->_M_create_storage(__rv.size());
+     645              :             this->_M_impl._M_finish =
+     646              :               std::__uninitialized_move_a(__rv.begin(), __rv.end(),
+     647              :                                           this->_M_impl._M_start,
+     648              :                                           _M_get_Tp_allocator());
+     649              :             __rv.clear();
+     650              :           }
+     651              :       }
+     652              : 
+     653              :     public:
+     654              :       /// Move constructor with alternative allocator
+     655              :       _GLIBCXX20_CONSTEXPR
+     656            0 :       vector(vector&& __rv, const __type_identity_t<allocator_type>& __m)
+     657              :       noexcept( noexcept(
+     658              :         vector(std::declval<vector&&>(), std::declval<const allocator_type&>(),
+     659              :                std::declval<typename _Alloc_traits::is_always_equal>())) )
+     660            0 :       : vector(std::move(__rv), __m, typename _Alloc_traits::is_always_equal{})
+     661            0 :       { }
+     662              : 
+     663              :       /**
+     664              :        *  @brief  Builds a %vector from an initializer list.
+     665              :        *  @param  __l  An initializer_list.
+     666              :        *  @param  __a  An allocator.
+     667              :        *
+     668              :        *  Create a %vector consisting of copies of the elements in the
+     669              :        *  initializer_list @a __l.
+     670              :        *
+     671              :        *  This will call the element type's copy constructor N times
+     672              :        *  (where N is @a __l.size()) and do no memory reallocation.
+     673              :        */
+     674              :       _GLIBCXX20_CONSTEXPR
+     675       402458 :       vector(initializer_list<value_type> __l,
+     676              :              const allocator_type& __a = allocator_type())
+     677       402458 :       : _Base(__a)
+     678              :       {
+     679       402458 :         _M_range_initialize(__l.begin(), __l.end(),
+     680       402458 :                             random_access_iterator_tag());
+     681       402458 :       }
+     682              : #endif
+     683              : 
+     684              :       /**
+     685              :        *  @brief  Builds a %vector from a range.
+     686              :        *  @param  __first  An input iterator.
+     687              :        *  @param  __last  An input iterator.
+     688              :        *  @param  __a  An allocator.
+     689              :        *
+     690              :        *  Create a %vector consisting of copies of the elements from
+     691              :        *  [first,last).
+     692              :        *
+     693              :        *  If the iterators are forward, bidirectional, or
+     694              :        *  random-access, then this will call the elements' copy
+     695              :        *  constructor N times (where N is distance(first,last)) and do
+     696              :        *  no memory reallocation.  But if only input iterators are
+     697              :        *  used, then this will do at most 2N calls to the copy
+     698              :        *  constructor, and logN memory reallocations.
+     699              :        */
+     700              : #if __cplusplus >= 201103L
+     701              :       template<typename _InputIterator,
+     702              :                typename = std::_RequireInputIter<_InputIterator>>
+     703              :         _GLIBCXX20_CONSTEXPR
+     704         7860 :         vector(_InputIterator __first, _InputIterator __last,
+     705              :                const allocator_type& __a = allocator_type())
+     706         7860 :         : _Base(__a)
+     707              :         {
+     708         7860 :           _M_range_initialize(__first, __last,
+     709         7860 :                               std::__iterator_category(__first));
+     710         7860 :         }
+     711              : #else
+     712              :       template<typename _InputIterator>
+     713              :         vector(_InputIterator __first, _InputIterator __last,
+     714              :                const allocator_type& __a = allocator_type())
+     715              :         : _Base(__a)
+     716              :         {
+     717              :           // Check whether it's an integral type.  If so, it's not an iterator.
+     718              :           typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+     719              :           _M_initialize_dispatch(__first, __last, _Integral());
+     720              :         }
+     721              : #endif
+     722              : 
+     723              :       /**
+     724              :        *  The dtor only erases the elements, and note that if the
+     725              :        *  elements themselves are pointers, the pointed-to memory is
+     726              :        *  not touched in any way.  Managing the pointer is the user's
+     727              :        *  responsibility.
+     728              :        */
+     729              :       _GLIBCXX20_CONSTEXPR
+     730    227784016 :       ~vector() _GLIBCXX_NOEXCEPT
+     731              :       {
+     732    227784016 :         std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+     733    227784016 :                       _M_get_Tp_allocator());
+     734              :         _GLIBCXX_ASAN_ANNOTATE_BEFORE_DEALLOC;
+     735    227784016 :       }
+     736              : 
+     737              :       /**
+     738              :        *  @brief  %Vector assignment operator.
+     739              :        *  @param  __x  A %vector of identical element and allocator types.
+     740              :        *
+     741              :        *  All the elements of @a __x are copied, but any unused capacity in
+     742              :        *  @a __x will not be copied.
+     743              :        *
+     744              :        *  Whether the allocator is copied depends on the allocator traits.
+     745              :        */
+     746              :       _GLIBCXX20_CONSTEXPR
+     747              :       vector&
+     748              :       operator=(const vector& __x);
+     749              : 
+     750              : #if __cplusplus >= 201103L
+     751              :       /**
+     752              :        *  @brief  %Vector move assignment operator.
+     753              :        *  @param  __x  A %vector of identical element and allocator types.
+     754              :        *
+     755              :        *  The contents of @a __x are moved into this %vector (without copying,
+     756              :        *  if the allocators permit it).
+     757              :        *  Afterwards @a __x is a valid, but unspecified %vector.
+     758              :        *
+     759              :        *  Whether the allocator is moved depends on the allocator traits.
+     760              :        */
+     761              :       _GLIBCXX20_CONSTEXPR
+     762              :       vector&
+     763         5568 :       operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move())
+     764              :       {
+     765         5568 :         constexpr bool __move_storage =
+     766              :           _Alloc_traits::_S_propagate_on_move_assign()
+     767              :           || _Alloc_traits::_S_always_equal();
+     768         5568 :         _M_move_assign(std::move(__x), __bool_constant<__move_storage>());
+     769         5568 :         return *this;
+     770              :       }
+     771              : 
+     772              :       /**
+     773              :        *  @brief  %Vector list assignment operator.
+     774              :        *  @param  __l  An initializer_list.
+     775              :        *
+     776              :        *  This function fills a %vector with copies of the elements in the
+     777              :        *  initializer list @a __l.
+     778              :        *
+     779              :        *  Note that the assignment completely changes the %vector and
+     780              :        *  that the resulting %vector's size is the same as the number
+     781              :        *  of elements assigned.
+     782              :        */
+     783              :       _GLIBCXX20_CONSTEXPR
+     784              :       vector&
+     785          196 :       operator=(initializer_list<value_type> __l)
+     786              :       {
+     787          196 :         this->_M_assign_aux(__l.begin(), __l.end(),
+     788          196 :                             random_access_iterator_tag());
+     789          196 :         return *this;
+     790              :       }
+     791              : #endif
+     792              : 
+     793              :       /**
+     794              :        *  @brief  Assigns a given value to a %vector.
+     795              :        *  @param  __n  Number of elements to be assigned.
+     796              :        *  @param  __val  Value to be assigned.
+     797              :        *
+     798              :        *  This function fills a %vector with @a __n copies of the given
+     799              :        *  value.  Note that the assignment completely changes the
+     800              :        *  %vector and that the resulting %vector's size is the same as
+     801              :        *  the number of elements assigned.
+     802              :        */
+     803              :       _GLIBCXX20_CONSTEXPR
+     804              :       void
+     805            0 :       assign(size_type __n, const value_type& __val)
+     806            0 :       { _M_fill_assign(__n, __val); }
+     807              : 
+     808              :       /**
+     809              :        *  @brief  Assigns a range to a %vector.
+     810              :        *  @param  __first  An input iterator.
+     811              :        *  @param  __last   An input iterator.
+     812              :        *
+     813              :        *  This function fills a %vector with copies of the elements in the
+     814              :        *  range [__first,__last).
+     815              :        *
+     816              :        *  Note that the assignment completely changes the %vector and
+     817              :        *  that the resulting %vector's size is the same as the number
+     818              :        *  of elements assigned.
+     819              :        */
+     820              : #if __cplusplus >= 201103L
+     821              :       template<typename _InputIterator,
+     822              :                typename = std::_RequireInputIter<_InputIterator>>
+     823              :         _GLIBCXX20_CONSTEXPR
+     824              :         void
+     825              :         assign(_InputIterator __first, _InputIterator __last)
+     826              :         { _M_assign_aux(__first, __last, std::__iterator_category(__first)); }
+     827              : #else
+     828              :       template<typename _InputIterator>
+     829              :         void
+     830              :         assign(_InputIterator __first, _InputIterator __last)
+     831              :         {
+     832              :           // Check whether it's an integral type.  If so, it's not an iterator.
+     833              :           typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+     834              :           _M_assign_dispatch(__first, __last, _Integral());
+     835              :         }
+     836              : #endif
+     837              : 
+     838              : #if __cplusplus >= 201103L
+     839              :       /**
+     840              :        *  @brief  Assigns an initializer list to a %vector.
+     841              :        *  @param  __l  An initializer_list.
+     842              :        *
+     843              :        *  This function fills a %vector with copies of the elements in the
+     844              :        *  initializer list @a __l.
+     845              :        *
+     846              :        *  Note that the assignment completely changes the %vector and
+     847              :        *  that the resulting %vector's size is the same as the number
+     848              :        *  of elements assigned.
+     849              :        */
+     850              :       _GLIBCXX20_CONSTEXPR
+     851              :       void
+     852              :       assign(initializer_list<value_type> __l)
+     853              :       {
+     854              :         this->_M_assign_aux(__l.begin(), __l.end(),
+     855              :                             random_access_iterator_tag());
+     856              :       }
+     857              : #endif
+     858              : 
+     859              :       /// Get a copy of the memory allocation object.
+     860              :       using _Base::get_allocator;
+     861              : 
+     862              :       // iterators
+     863              :       /**
+     864              :        *  Returns a read/write iterator that points to the first
+     865              :        *  element in the %vector.  Iteration is done in ordinary
+     866              :        *  element order.
+     867              :        */
+     868              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     869              :       iterator
+     870    149583868 :       begin() _GLIBCXX_NOEXCEPT
+     871    149583868 :       { return iterator(this->_M_impl._M_start); }
+     872              : 
+     873              :       /**
+     874              :        *  Returns a read-only (constant) iterator that points to the
+     875              :        *  first element in the %vector.  Iteration is done in ordinary
+     876              :        *  element order.
+     877              :        */
+     878              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     879              :       const_iterator
+     880     19136520 :       begin() const _GLIBCXX_NOEXCEPT
+     881     19136520 :       { return const_iterator(this->_M_impl._M_start); }
+     882              : 
+     883              :       /**
+     884              :        *  Returns a read/write iterator that points one past the last
+     885              :        *  element in the %vector.  Iteration is done in ordinary
+     886              :        *  element order.
+     887              :        */
+     888              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     889              :       iterator
+     890    256238194 :       end() _GLIBCXX_NOEXCEPT
+     891    256238194 :       { return iterator(this->_M_impl._M_finish); }
+     892              : 
+     893              :       /**
+     894              :        *  Returns a read-only (constant) iterator that points one past
+     895              :        *  the last element in the %vector.  Iteration is done in
+     896              :        *  ordinary element order.
+     897              :        */
+     898              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     899              :       const_iterator
+     900     19136360 :       end() const _GLIBCXX_NOEXCEPT
+     901     19136360 :       { return const_iterator(this->_M_impl._M_finish); }
+     902              : 
+     903              :       /**
+     904              :        *  Returns a read/write reverse iterator that points to the
+     905              :        *  last element in the %vector.  Iteration is done in reverse
+     906              :        *  element order.
+     907              :        */
+     908              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     909              :       reverse_iterator
+     910              :       rbegin() _GLIBCXX_NOEXCEPT
+     911              :       { return reverse_iterator(end()); }
+     912              : 
+     913              :       /**
+     914              :        *  Returns a read-only (constant) reverse iterator that points
+     915              :        *  to the last element in the %vector.  Iteration is done in
+     916              :        *  reverse element order.
+     917              :        */
+     918              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     919              :       const_reverse_iterator
+     920              :       rbegin() const _GLIBCXX_NOEXCEPT
+     921              :       { return const_reverse_iterator(end()); }
+     922              : 
+     923              :       /**
+     924              :        *  Returns a read/write reverse iterator that points to one
+     925              :        *  before the first element in the %vector.  Iteration is done
+     926              :        *  in reverse element order.
+     927              :        */
+     928              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     929              :       reverse_iterator
+     930              :       rend() _GLIBCXX_NOEXCEPT
+     931              :       { return reverse_iterator(begin()); }
+     932              : 
+     933              :       /**
+     934              :        *  Returns a read-only (constant) reverse iterator that points
+     935              :        *  to one before the first element in the %vector.  Iteration
+     936              :        *  is done in reverse element order.
+     937              :        */
+     938              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     939              :       const_reverse_iterator
+     940              :       rend() const _GLIBCXX_NOEXCEPT
+     941              :       { return const_reverse_iterator(begin()); }
+     942              : 
+     943              : #if __cplusplus >= 201103L
+     944              :       /**
+     945              :        *  Returns a read-only (constant) iterator that points to the
+     946              :        *  first element in the %vector.  Iteration is done in ordinary
+     947              :        *  element order.
+     948              :        */
+     949              :       [[__nodiscard__]] _GLIBCXX20_CONSTEXPR
+     950              :       const_iterator
+     951         9734 :       cbegin() const noexcept
+     952         9734 :       { return const_iterator(this->_M_impl._M_start); }
+     953              : 
+     954              :       /**
+     955              :        *  Returns a read-only (constant) iterator that points one past
+     956              :        *  the last element in the %vector.  Iteration is done in
+     957              :        *  ordinary element order.
+     958              :        */
+     959              :       [[__nodiscard__]] _GLIBCXX20_CONSTEXPR
+     960              :       const_iterator
+     961           60 :       cend() const noexcept
+     962           60 :       { return const_iterator(this->_M_impl._M_finish); }
+     963              : 
+     964              :       /**
+     965              :        *  Returns a read-only (constant) reverse iterator that points
+     966              :        *  to the last element in the %vector.  Iteration is done in
+     967              :        *  reverse element order.
+     968              :        */
+     969              :       [[__nodiscard__]] _GLIBCXX20_CONSTEXPR
+     970              :       const_reverse_iterator
+     971              :       crbegin() const noexcept
+     972              :       { return const_reverse_iterator(end()); }
+     973              : 
+     974              :       /**
+     975              :        *  Returns a read-only (constant) reverse iterator that points
+     976              :        *  to one before the first element in the %vector.  Iteration
+     977              :        *  is done in reverse element order.
+     978              :        */
+     979              :       [[__nodiscard__]] _GLIBCXX20_CONSTEXPR
+     980              :       const_reverse_iterator
+     981              :       crend() const noexcept
+     982              :       { return const_reverse_iterator(begin()); }
+     983              : #endif
+     984              : 
+     985              :       // [23.2.4.2] capacity
+     986              :       /**  Returns the number of elements in the %vector.  */
+     987              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     988              :       size_type
+     989    428306182 :       size() const _GLIBCXX_NOEXCEPT
+     990    428306182 :       { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }
+     991              : 
+     992              :       /**  Returns the size() of the largest possible %vector.  */
+     993              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+     994              :       size_type
+     995    213101420 :       max_size() const _GLIBCXX_NOEXCEPT
+     996    213101420 :       { return _S_max_size(_M_get_Tp_allocator()); }
+     997              : 
+     998              : #if __cplusplus >= 201103L
+     999              :       /**
+    1000              :        *  @brief  Resizes the %vector to the specified number of elements.
+    1001              :        *  @param  __new_size  Number of elements the %vector should contain.
+    1002              :        *
+    1003              :        *  This function will %resize the %vector to the specified
+    1004              :        *  number of elements.  If the number is smaller than the
+    1005              :        *  %vector's current size the %vector is truncated, otherwise
+    1006              :        *  default constructed elements are appended.
+    1007              :        */
+    1008              :       _GLIBCXX20_CONSTEXPR
+    1009              :       void
+    1010          384 :       resize(size_type __new_size)
+    1011              :       {
+    1012          384 :         if (__new_size > size())
+    1013            0 :           _M_default_append(__new_size - size());
+    1014          384 :         else if (__new_size < size())
+    1015            0 :           _M_erase_at_end(this->_M_impl._M_start + __new_size);
+    1016          384 :       }
+    1017              : 
+    1018              :       /**
+    1019              :        *  @brief  Resizes the %vector to the specified number of elements.
+    1020              :        *  @param  __new_size  Number of elements the %vector should contain.
+    1021              :        *  @param  __x  Data with which new elements should be populated.
+    1022              :        *
+    1023              :        *  This function will %resize the %vector to the specified
+    1024              :        *  number of elements.  If the number is smaller than the
+    1025              :        *  %vector's current size the %vector is truncated, otherwise
+    1026              :        *  the %vector is extended and new elements are populated with
+    1027              :        *  given data.
+    1028              :        */
+    1029              :       _GLIBCXX20_CONSTEXPR
+    1030              :       void
+    1031              :       resize(size_type __new_size, const value_type& __x)
+    1032              :       {
+    1033              :         if (__new_size > size())
+    1034              :           _M_fill_insert(end(), __new_size - size(), __x);
+    1035              :         else if (__new_size < size())
+    1036              :           _M_erase_at_end(this->_M_impl._M_start + __new_size);
+    1037              :       }
+    1038              : #else
+    1039              :       /**
+    1040              :        *  @brief  Resizes the %vector to the specified number of elements.
+    1041              :        *  @param  __new_size  Number of elements the %vector should contain.
+    1042              :        *  @param  __x  Data with which new elements should be populated.
+    1043              :        *
+    1044              :        *  This function will %resize the %vector to the specified
+    1045              :        *  number of elements.  If the number is smaller than the
+    1046              :        *  %vector's current size the %vector is truncated, otherwise
+    1047              :        *  the %vector is extended and new elements are populated with
+    1048              :        *  given data.
+    1049              :        */
+    1050              :       _GLIBCXX20_CONSTEXPR
+    1051              :       void
+    1052              :       resize(size_type __new_size, value_type __x = value_type())
+    1053              :       {
+    1054              :         if (__new_size > size())
+    1055              :           _M_fill_insert(end(), __new_size - size(), __x);
+    1056              :         else if (__new_size < size())
+    1057              :           _M_erase_at_end(this->_M_impl._M_start + __new_size);
+    1058              :       }
+    1059              : #endif
+    1060              : 
+    1061              : #if __cplusplus >= 201103L
+    1062              :       /**  A non-binding request to reduce capacity() to size().  */
+    1063              :       _GLIBCXX20_CONSTEXPR
+    1064              :       void
+    1065              :       shrink_to_fit()
+    1066              :       { _M_shrink_to_fit(); }
+    1067              : #endif
+    1068              : 
+    1069              :       /**
+    1070              :        *  Returns the total number of elements that the %vector can
+    1071              :        *  hold before needing to allocate more memory.
+    1072              :        */
+    1073              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1074              :       size_type
+    1075        15008 :       capacity() const _GLIBCXX_NOEXCEPT
+    1076        15008 :       { return size_type(this->_M_impl._M_end_of_storage
+    1077        15008 :                          - this->_M_impl._M_start); }
+    1078              : 
+    1079              :       /**
+    1080              :        *  Returns true if the %vector is empty.  (Thus begin() would
+    1081              :        *  equal end().)
+    1082              :        */
+    1083              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1084              :       bool
+    1085          576 :       empty() const _GLIBCXX_NOEXCEPT
+    1086          576 :       { return begin() == end(); }
+    1087              : 
+    1088              :       /**
+    1089              :        *  @brief  Attempt to preallocate enough memory for specified number of
+    1090              :        *          elements.
+    1091              :        *  @param  __n  Number of elements required.
+    1092              :        *  @throw  std::length_error  If @a n exceeds @c max_size().
+    1093              :        *
+    1094              :        *  This function attempts to reserve enough memory for the
+    1095              :        *  %vector to hold the specified number of elements.  If the
+    1096              :        *  number requested is more than max_size(), length_error is
+    1097              :        *  thrown.
+    1098              :        *
+    1099              :        *  The advantage of this function is that if optimal code is a
+    1100              :        *  necessity and the user can determine the number of elements
+    1101              :        *  that will be required, the user can reserve the memory in
+    1102              :        *  %advance, and thus prevent a possible reallocation of memory
+    1103              :        *  and copying of %vector data.
+    1104              :        */
+    1105              :       _GLIBCXX20_CONSTEXPR
+    1106              :       void
+    1107              :       reserve(size_type __n);
+    1108              : 
+    1109              :       // element access
+    1110              :       /**
+    1111              :        *  @brief  Subscript access to the data contained in the %vector.
+    1112              :        *  @param __n The index of the element for which data should be
+    1113              :        *  accessed.
+    1114              :        *  @return  Read/write reference to data.
+    1115              :        *
+    1116              :        *  This operator allows for easy, array-style, data access.
+    1117              :        *  Note that data access with this operator is unchecked and
+    1118              :        *  out_of_range lookups are not defined. (For checked lookups
+    1119              :        *  see at().)
+    1120              :        */
+    1121              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1122              :       reference
+    1123    650166726 :       operator[](size_type __n) _GLIBCXX_NOEXCEPT
+    1124              :       {
+    1125              :         __glibcxx_requires_subscript(__n);
+    1126    650166726 :         return *(this->_M_impl._M_start + __n);
+    1127              :       }
+    1128              : 
+    1129              :       /**
+    1130              :        *  @brief  Subscript access to the data contained in the %vector.
+    1131              :        *  @param __n The index of the element for which data should be
+    1132              :        *  accessed.
+    1133              :        *  @return  Read-only (constant) reference to data.
+    1134              :        *
+    1135              :        *  This operator allows for easy, array-style, data access.
+    1136              :        *  Note that data access with this operator is unchecked and
+    1137              :        *  out_of_range lookups are not defined. (For checked lookups
+    1138              :        *  see at().)
+    1139              :        */
+    1140              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1141              :       const_reference
+    1142       652780 :       operator[](size_type __n) const _GLIBCXX_NOEXCEPT
+    1143              :       {
+    1144              :         __glibcxx_requires_subscript(__n);
+    1145       652780 :         return *(this->_M_impl._M_start + __n);
+    1146              :       }
+    1147              : 
+    1148              :     protected:
+    1149              :       /// Safety check used only from at().
+    1150              :       _GLIBCXX20_CONSTEXPR
+    1151              :       void
+    1152       152800 :       _M_range_check(size_type __n) const
+    1153              :       {
+    1154       152800 :         if (__n >= this->size())
+    1155            0 :           __throw_out_of_range_fmt(__N("vector::_M_range_check: __n "
+    1156              :                                        "(which is %zu) >= this->size() "
+    1157              :                                        "(which is %zu)"),
+    1158              :                                    __n, this->size());
+    1159       152800 :       }
+    1160              : 
+    1161              :     public:
+    1162              :       /**
+    1163              :        *  @brief  Provides access to the data contained in the %vector.
+    1164              :        *  @param __n The index of the element for which data should be
+    1165              :        *  accessed.
+    1166              :        *  @return  Read/write reference to data.
+    1167              :        *  @throw  std::out_of_range  If @a __n is an invalid index.
+    1168              :        *
+    1169              :        *  This function provides for safer data access.  The parameter
+    1170              :        *  is first checked that it is in the range of the vector.  The
+    1171              :        *  function throws out_of_range if the check fails.
+    1172              :        */
+    1173              :       _GLIBCXX20_CONSTEXPR
+    1174              :       reference
+    1175       152668 :       at(size_type __n)
+    1176              :       {
+    1177       152668 :         _M_range_check(__n);
+    1178       152668 :         return (*this)[__n];
+    1179              :       }
+    1180              : 
+    1181              :       /**
+    1182              :        *  @brief  Provides access to the data contained in the %vector.
+    1183              :        *  @param __n The index of the element for which data should be
+    1184              :        *  accessed.
+    1185              :        *  @return  Read-only (constant) reference to data.
+    1186              :        *  @throw  std::out_of_range  If @a __n is an invalid index.
+    1187              :        *
+    1188              :        *  This function provides for safer data access.  The parameter
+    1189              :        *  is first checked that it is in the range of the vector.  The
+    1190              :        *  function throws out_of_range if the check fails.
+    1191              :        */
+    1192              :       _GLIBCXX20_CONSTEXPR
+    1193              :       const_reference
+    1194          132 :       at(size_type __n) const
+    1195              :       {
+    1196          132 :         _M_range_check(__n);
+    1197          132 :         return (*this)[__n];
+    1198              :       }
+    1199              : 
+    1200              :       /**
+    1201              :        *  Returns a read/write reference to the data at the first
+    1202              :        *  element of the %vector.
+    1203              :        */
+    1204              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1205              :       reference
+    1206              :       front() _GLIBCXX_NOEXCEPT
+    1207              :       {
+    1208              :         __glibcxx_requires_nonempty();
+    1209              :         return *begin();
+    1210              :       }
+    1211              : 
+    1212              :       /**
+    1213              :        *  Returns a read-only (constant) reference to the data at the first
+    1214              :        *  element of the %vector.
+    1215              :        */
+    1216              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1217              :       const_reference
+    1218              :       front() const _GLIBCXX_NOEXCEPT
+    1219              :       {
+    1220              :         __glibcxx_requires_nonempty();
+    1221              :         return *begin();
+    1222              :       }
+    1223              : 
+    1224              :       /**
+    1225              :        *  Returns a read/write reference to the data at the last
+    1226              :        *  element of the %vector.
+    1227              :        */
+    1228              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1229              :       reference
+    1230    108540416 :       back() _GLIBCXX_NOEXCEPT
+    1231              :       {
+    1232              :         __glibcxx_requires_nonempty();
+    1233    108540416 :         return *(end() - 1);
+    1234              :       }
+    1235              : 
+    1236              :       /**
+    1237              :        *  Returns a read-only (constant) reference to the data at the
+    1238              :        *  last element of the %vector.
+    1239              :        */
+    1240              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1241              :       const_reference
+    1242              :       back() const _GLIBCXX_NOEXCEPT
+    1243              :       {
+    1244              :         __glibcxx_requires_nonempty();
+    1245              :         return *(end() - 1);
+    1246              :       }
+    1247              : 
+    1248              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1249              :       // DR 464. Suggestion for new member functions in standard containers.
+    1250              :       // data access
+    1251              :       /**
+    1252              :        *   Returns a pointer such that [data(), data() + size()) is a valid
+    1253              :        *   range.  For a non-empty %vector, data() == &front().
+    1254              :        */
+    1255              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1256              :       _Tp*
+    1257            0 :       data() _GLIBCXX_NOEXCEPT
+    1258            0 :       { return _M_data_ptr(this->_M_impl._M_start); }
+    1259              : 
+    1260              :       _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
+    1261              :       const _Tp*
+    1262       415512 :       data() const _GLIBCXX_NOEXCEPT
+    1263       415512 :       { return _M_data_ptr(this->_M_impl._M_start); }
+    1264              : 
+    1265              :       // [23.2.4.3] modifiers
+    1266              :       /**
+    1267              :        *  @brief  Add data to the end of the %vector.
+    1268              :        *  @param  __x  Data to be added.
+    1269              :        *
+    1270              :        *  This is a typical stack operation.  The function creates an
+    1271              :        *  element at the end of the %vector and assigns the given data
+    1272              :        *  to it.  Due to the nature of a %vector this operation can be
+    1273              :        *  done in constant time if the %vector has preallocated space
+    1274              :        *  available.
+    1275              :        */
+    1276              :       _GLIBCXX20_CONSTEXPR
+    1277              :       void
+    1278       796964 :       push_back(const value_type& __x)
+    1279              :       {
+    1280       796964 :         if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
+    1281              :           {
+    1282              :             _GLIBCXX_ASAN_ANNOTATE_GROW(1);
+    1283       751292 :             _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
+    1284              :                                      __x);
+    1285       751292 :             ++this->_M_impl._M_finish;
+    1286              :             _GLIBCXX_ASAN_ANNOTATE_GREW(1);
+    1287              :           }
+    1288              :         else
+    1289        45672 :           _M_realloc_insert(end(), __x);
+    1290       796964 :       }
+    1291              : 
+    1292              : #if __cplusplus >= 201103L
+    1293              :       _GLIBCXX20_CONSTEXPR
+    1294              :       void
+    1295    106894892 :       push_back(value_type&& __x)
+    1296    106894892 :       { emplace_back(std::move(__x)); }
+    1297              : 
+    1298              :       template<typename... _Args>
+    1299              : #if __cplusplus > 201402L
+    1300              :         _GLIBCXX20_CONSTEXPR
+    1301              :         reference
+    1302              : #else
+    1303              :         void
+    1304              : #endif
+    1305              :         emplace_back(_Args&&... __args);
+    1306              : #endif
+    1307              : 
+    1308              :       /**
+    1309              :        *  @brief  Removes last element.
+    1310              :        *
+    1311              :        *  This is a typical stack operation. It shrinks the %vector by one.
+    1312              :        *
+    1313              :        *  Note that no data is returned, and if the last element's
+    1314              :        *  data is needed, it should be retrieved before pop_back() is
+    1315              :        *  called.
+    1316              :        */
+    1317              :       _GLIBCXX20_CONSTEXPR
+    1318              :       void
+    1319          868 :       pop_back() _GLIBCXX_NOEXCEPT
+    1320              :       {
+    1321              :         __glibcxx_requires_nonempty();
+    1322          868 :         --this->_M_impl._M_finish;
+    1323          868 :         _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish);
+    1324              :         _GLIBCXX_ASAN_ANNOTATE_SHRINK(1);
+    1325          868 :       }
+    1326              : 
+    1327              : #if __cplusplus >= 201103L
+    1328              :       /**
+    1329              :        *  @brief  Inserts an object in %vector before specified iterator.
+    1330              :        *  @param  __position  A const_iterator into the %vector.
+    1331              :        *  @param  __args  Arguments.
+    1332              :        *  @return  An iterator that points to the inserted data.
+    1333              :        *
+    1334              :        *  This function will insert an object of type T constructed
+    1335              :        *  with T(std::forward<Args>(args)...) before the specified location.
+    1336              :        *  Note that this kind of operation could be expensive for a %vector
+    1337              :        *  and if it is frequently used the user should consider using
+    1338              :        *  std::list.
+    1339              :        */
+    1340              :       template<typename... _Args>
+    1341              :         _GLIBCXX20_CONSTEXPR
+    1342              :         iterator
+    1343              :         emplace(const_iterator __position, _Args&&... __args)
+    1344              :         { return _M_emplace_aux(__position, std::forward<_Args>(__args)...); }
+    1345              : 
+    1346              :       /**
+    1347              :        *  @brief  Inserts given value into %vector before specified iterator.
+    1348              :        *  @param  __position  A const_iterator into the %vector.
+    1349              :        *  @param  __x  Data to be inserted.
+    1350              :        *  @return  An iterator that points to the inserted data.
+    1351              :        *
+    1352              :        *  This function will insert a copy of the given value before
+    1353              :        *  the specified location.  Note that this kind of operation
+    1354              :        *  could be expensive for a %vector and if it is frequently
+    1355              :        *  used the user should consider using std::list.
+    1356              :        */
+    1357              :       _GLIBCXX20_CONSTEXPR
+    1358              :       iterator
+    1359              :       insert(const_iterator __position, const value_type& __x);
+    1360              : #else
+    1361              :       /**
+    1362              :        *  @brief  Inserts given value into %vector before specified iterator.
+    1363              :        *  @param  __position  An iterator into the %vector.
+    1364              :        *  @param  __x  Data to be inserted.
+    1365              :        *  @return  An iterator that points to the inserted data.
+    1366              :        *
+    1367              :        *  This function will insert a copy of the given value before
+    1368              :        *  the specified location.  Note that this kind of operation
+    1369              :        *  could be expensive for a %vector and if it is frequently
+    1370              :        *  used the user should consider using std::list.
+    1371              :        */
+    1372              :       iterator
+    1373              :       insert(iterator __position, const value_type& __x);
+    1374              : #endif
+    1375              : 
+    1376              : #if __cplusplus >= 201103L
+    1377              :       /**
+    1378              :        *  @brief  Inserts given rvalue into %vector before specified iterator.
+    1379              :        *  @param  __position  A const_iterator into the %vector.
+    1380              :        *  @param  __x  Data to be inserted.
+    1381              :        *  @return  An iterator that points to the inserted data.
+    1382              :        *
+    1383              :        *  This function will insert a copy of the given rvalue before
+    1384              :        *  the specified location.  Note that this kind of operation
+    1385              :        *  could be expensive for a %vector and if it is frequently
+    1386              :        *  used the user should consider using std::list.
+    1387              :        */
+    1388              :       _GLIBCXX20_CONSTEXPR
+    1389              :       iterator
+    1390           60 :       insert(const_iterator __position, value_type&& __x)
+    1391           60 :       { return _M_insert_rval(__position, std::move(__x)); }
+    1392              : 
+    1393              :       /**
+    1394              :        *  @brief  Inserts an initializer_list into the %vector.
+    1395              :        *  @param  __position  An iterator into the %vector.
+    1396              :        *  @param  __l  An initializer_list.
+    1397              :        *
+    1398              :        *  This function will insert copies of the data in the
+    1399              :        *  initializer_list @a l into the %vector before the location
+    1400              :        *  specified by @a position.
+    1401              :        *
+    1402              :        *  Note that this kind of operation could be expensive for a
+    1403              :        *  %vector and if it is frequently used the user should
+    1404              :        *  consider using std::list.
+    1405              :        */
+    1406              :       _GLIBCXX20_CONSTEXPR
+    1407              :       iterator
+    1408              :       insert(const_iterator __position, initializer_list<value_type> __l)
+    1409              :       {
+    1410              :         auto __offset = __position - cbegin();
+    1411              :         _M_range_insert(begin() + __offset, __l.begin(), __l.end(),
+    1412              :                         std::random_access_iterator_tag());
+    1413              :         return begin() + __offset;
+    1414              :       }
+    1415              : #endif
+    1416              : 
+    1417              : #if __cplusplus >= 201103L
+    1418              :       /**
+    1419              :        *  @brief  Inserts a number of copies of given data into the %vector.
+    1420              :        *  @param  __position  A const_iterator into the %vector.
+    1421              :        *  @param  __n  Number of elements to be inserted.
+    1422              :        *  @param  __x  Data to be inserted.
+    1423              :        *  @return  An iterator that points to the inserted data.
+    1424              :        *
+    1425              :        *  This function will insert a specified number of copies of
+    1426              :        *  the given data before the location specified by @a position.
+    1427              :        *
+    1428              :        *  Note that this kind of operation could be expensive for a
+    1429              :        *  %vector and if it is frequently used the user should
+    1430              :        *  consider using std::list.
+    1431              :        */
+    1432              :       _GLIBCXX20_CONSTEXPR
+    1433              :       iterator
+    1434              :       insert(const_iterator __position, size_type __n, const value_type& __x)
+    1435              :       {
+    1436              :         difference_type __offset = __position - cbegin();
+    1437              :         _M_fill_insert(begin() + __offset, __n, __x);
+    1438              :         return begin() + __offset;
+    1439              :       }
+    1440              : #else
+    1441              :       /**
+    1442              :        *  @brief  Inserts a number of copies of given data into the %vector.
+    1443              :        *  @param  __position  An iterator into the %vector.
+    1444              :        *  @param  __n  Number of elements to be inserted.
+    1445              :        *  @param  __x  Data to be inserted.
+    1446              :        *
+    1447              :        *  This function will insert a specified number of copies of
+    1448              :        *  the given data before the location specified by @a position.
+    1449              :        *
+    1450              :        *  Note that this kind of operation could be expensive for a
+    1451              :        *  %vector and if it is frequently used the user should
+    1452              :        *  consider using std::list.
+    1453              :        */
+    1454              :       void
+    1455              :       insert(iterator __position, size_type __n, const value_type& __x)
+    1456              :       { _M_fill_insert(__position, __n, __x); }
+    1457              : #endif
+    1458              : 
+    1459              : #if __cplusplus >= 201103L
+    1460              :       /**
+    1461              :        *  @brief  Inserts a range into the %vector.
+    1462              :        *  @param  __position  A const_iterator into the %vector.
+    1463              :        *  @param  __first  An input iterator.
+    1464              :        *  @param  __last   An input iterator.
+    1465              :        *  @return  An iterator that points to the inserted data.
+    1466              :        *
+    1467              :        *  This function will insert copies of the data in the range
+    1468              :        *  [__first,__last) into the %vector before the location specified
+    1469              :        *  by @a pos.
+    1470              :        *
+    1471              :        *  Note that this kind of operation could be expensive for a
+    1472              :        *  %vector and if it is frequently used the user should
+    1473              :        *  consider using std::list.
+    1474              :        */
+    1475              :       template<typename _InputIterator,
+    1476              :                typename = std::_RequireInputIter<_InputIterator>>
+    1477              :         _GLIBCXX20_CONSTEXPR
+    1478              :         iterator
+    1479         1348 :         insert(const_iterator __position, _InputIterator __first,
+    1480              :                _InputIterator __last)
+    1481              :         {
+    1482         1348 :           difference_type __offset = __position - cbegin();
+    1483         1348 :           _M_range_insert(begin() + __offset, __first, __last,
+    1484         1348 :                           std::__iterator_category(__first));
+    1485         1348 :           return begin() + __offset;
+    1486              :         }
+    1487              : #else
+    1488              :       /**
+    1489              :        *  @brief  Inserts a range into the %vector.
+    1490              :        *  @param  __position  An iterator into the %vector.
+    1491              :        *  @param  __first  An input iterator.
+    1492              :        *  @param  __last   An input iterator.
+    1493              :        *
+    1494              :        *  This function will insert copies of the data in the range
+    1495              :        *  [__first,__last) into the %vector before the location specified
+    1496              :        *  by @a pos.
+    1497              :        *
+    1498              :        *  Note that this kind of operation could be expensive for a
+    1499              :        *  %vector and if it is frequently used the user should
+    1500              :        *  consider using std::list.
+    1501              :        */
+    1502              :       template<typename _InputIterator>
+    1503              :         void
+    1504              :         insert(iterator __position, _InputIterator __first,
+    1505              :                _InputIterator __last)
+    1506              :         {
+    1507              :           // Check whether it's an integral type.  If so, it's not an iterator.
+    1508              :           typedef typename std::__is_integer<_InputIterator>::__type _Integral;
+    1509              :           _M_insert_dispatch(__position, __first, __last, _Integral());
+    1510              :         }
+    1511              : #endif
+    1512              : 
+    1513              :       /**
+    1514              :        *  @brief  Remove element at given position.
+    1515              :        *  @param  __position  Iterator pointing to element to be erased.
+    1516              :        *  @return  An iterator pointing to the next element (or end()).
+    1517              :        *
+    1518              :        *  This function will erase the element at the given position and thus
+    1519              :        *  shorten the %vector by one.
+    1520              :        *
+    1521              :        *  Note This operation could be expensive and if it is
+    1522              :        *  frequently used the user should consider using std::list.
+    1523              :        *  The user is also cautioned that this function only erases
+    1524              :        *  the element, and that if the element is itself a pointer,
+    1525              :        *  the pointed-to memory is not touched in any way.  Managing
+    1526              :        *  the pointer is the user's responsibility.
+    1527              :        */
+    1528              :       _GLIBCXX20_CONSTEXPR
+    1529              :       iterator
+    1530              : #if __cplusplus >= 201103L
+    1531          912 :       erase(const_iterator __position)
+    1532          912 :       { return _M_erase(begin() + (__position - cbegin())); }
+    1533              : #else
+    1534              :       erase(iterator __position)
+    1535              :       { return _M_erase(__position); }
+    1536              : #endif
+    1537              : 
+    1538              :       /**
+    1539              :        *  @brief  Remove a range of elements.
+    1540              :        *  @param  __first  Iterator pointing to the first element to be erased.
+    1541              :        *  @param  __last  Iterator pointing to one past the last element to be
+    1542              :        *                  erased.
+    1543              :        *  @return  An iterator pointing to the element pointed to by @a __last
+    1544              :        *           prior to erasing (or end()).
+    1545              :        *
+    1546              :        *  This function will erase the elements in the range
+    1547              :        *  [__first,__last) and shorten the %vector accordingly.
+    1548              :        *
+    1549              :        *  Note This operation could be expensive and if it is
+    1550              :        *  frequently used the user should consider using std::list.
+    1551              :        *  The user is also cautioned that this function only erases
+    1552              :        *  the elements, and that if the elements themselves are
+    1553              :        *  pointers, the pointed-to memory is not touched in any way.
+    1554              :        *  Managing the pointer is the user's responsibility.
+    1555              :        */
+    1556              :       _GLIBCXX20_CONSTEXPR
+    1557              :       iterator
+    1558              : #if __cplusplus >= 201103L
+    1559         7110 :       erase(const_iterator __first, const_iterator __last)
+    1560              :       {
+    1561         7110 :         const auto __beg = begin();
+    1562         7110 :         const auto __cbeg = cbegin();
+    1563        14220 :         return _M_erase(__beg + (__first - __cbeg), __beg + (__last - __cbeg));
+    1564              :       }
+    1565              : #else
+    1566              :       erase(iterator __first, iterator __last)
+    1567              :       { return _M_erase(__first, __last); }
+    1568              : #endif
+    1569              : 
+    1570              :       /**
+    1571              :        *  @brief  Swaps data with another %vector.
+    1572              :        *  @param  __x  A %vector of the same element and allocator types.
+    1573              :        *
+    1574              :        *  This exchanges the elements between two vectors in constant time.
+    1575              :        *  (Three pointers, so it should be quite fast.)
+    1576              :        *  Note that the global std::swap() function is specialized such that
+    1577              :        *  std::swap(v1,v2) will feed to this function.
+    1578              :        *
+    1579              :        *  Whether the allocators are swapped depends on the allocator traits.
+    1580              :        */
+    1581              :       _GLIBCXX20_CONSTEXPR
+    1582              :       void
+    1583              :       swap(vector& __x) _GLIBCXX_NOEXCEPT
+    1584              :       {
+    1585              : #if __cplusplus >= 201103L
+    1586              :         __glibcxx_assert(_Alloc_traits::propagate_on_container_swap::value
+    1587              :                          || _M_get_Tp_allocator() == __x._M_get_Tp_allocator());
+    1588              : #endif
+    1589              :         this->_M_impl._M_swap_data(__x._M_impl);
+    1590              :         _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(),
+    1591              :                                   __x._M_get_Tp_allocator());
+    1592              :       }
+    1593              : 
+    1594              :       /**
+    1595              :        *  Erases all the elements.  Note that this function only erases the
+    1596              :        *  elements, and that if the elements themselves are pointers, the
+    1597              :        *  pointed-to memory is not touched in any way.  Managing the pointer is
+    1598              :        *  the user's responsibility.
+    1599              :        */
+    1600              :       _GLIBCXX20_CONSTEXPR
+    1601              :       void
+    1602        52740 :       clear() _GLIBCXX_NOEXCEPT
+    1603        52740 :       { _M_erase_at_end(this->_M_impl._M_start); }
+    1604              : 
+    1605              :     protected:
+    1606              :       /**
+    1607              :        *  Memory expansion handler.  Uses the member allocation function to
+    1608              :        *  obtain @a n bytes of memory, and then copies [first,last) into it.
+    1609              :        */
+    1610              :       template<typename _ForwardIterator>
+    1611              :         _GLIBCXX20_CONSTEXPR
+    1612              :         pointer
+    1613         4218 :         _M_allocate_and_copy(size_type __n,
+    1614              :                              _ForwardIterator __first, _ForwardIterator __last)
+    1615              :         {
+    1616         4218 :           pointer __result = this->_M_allocate(__n);
+    1617              :           __try
+    1618              :             {
+    1619         4218 :               std::__uninitialized_copy_a(__first, __last, __result,
+    1620         4218 :                                           _M_get_Tp_allocator());
+    1621         4218 :               return __result;
+    1622              :             }
+    1623            0 :           __catch(...)
+    1624              :             {
+    1625            0 :               _M_deallocate(__result, __n);
+    1626            0 :               __throw_exception_again;
+    1627              :             }
+    1628              :         }
+    1629              : 
+    1630              : 
+    1631              :       // Internal constructor functions follow.
+    1632              : 
+    1633              :       // Called by the range constructor to implement [23.1.1]/9
+    1634              : 
+    1635              : #if __cplusplus < 201103L
+    1636              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1637              :       // 438. Ambiguity in the "do the right thing" clause
+    1638              :       template<typename _Integer>
+    1639              :         void
+    1640              :         _M_initialize_dispatch(_Integer __n, _Integer __value, __true_type)
+    1641              :         {
+    1642              :           this->_M_impl._M_start = _M_allocate(_S_check_init_len(
+    1643              :                 static_cast<size_type>(__n), _M_get_Tp_allocator()));
+    1644              :           this->_M_impl._M_end_of_storage =
+    1645              :             this->_M_impl._M_start + static_cast<size_type>(__n);
+    1646              :           _M_fill_initialize(static_cast<size_type>(__n), __value);
+    1647              :         }
+    1648              : 
+    1649              :       // Called by the range constructor to implement [23.1.1]/9
+    1650              :       template<typename _InputIterator>
+    1651              :         void
+    1652              :         _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
+    1653              :                                __false_type)
+    1654              :         {
+    1655              :           _M_range_initialize(__first, __last,
+    1656              :                               std::__iterator_category(__first));
+    1657              :         }
+    1658              : #endif
+    1659              : 
+    1660              :       // Called by the second initialize_dispatch above
+    1661              :       template<typename _InputIterator>
+    1662              :         _GLIBCXX20_CONSTEXPR
+    1663              :         void
+    1664              :         _M_range_initialize(_InputIterator __first, _InputIterator __last,
+    1665              :                             std::input_iterator_tag)
+    1666              :         {
+    1667              :           __try {
+    1668              :             for (; __first != __last; ++__first)
+    1669              : #if __cplusplus >= 201103L
+    1670              :               emplace_back(*__first);
+    1671              : #else
+    1672              :               push_back(*__first);
+    1673              : #endif
+    1674              :           } __catch(...) {
+    1675              :             clear();
+    1676              :             __throw_exception_again;
+    1677              :           }
+    1678              :         }
+    1679              : 
+    1680              :       // Called by the second initialize_dispatch above
+    1681              :       template<typename _ForwardIterator>
+    1682              :         _GLIBCXX20_CONSTEXPR
+    1683              :         void
+    1684       410318 :         _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last,
+    1685              :                             std::forward_iterator_tag)
+    1686              :         {
+    1687       410318 :           const size_type __n = std::distance(__first, __last);
+    1688              :           this->_M_impl._M_start
+    1689       410318 :             = this->_M_allocate(_S_check_init_len(__n, _M_get_Tp_allocator()));
+    1690       410318 :           this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
+    1691       410318 :           this->_M_impl._M_finish =
+    1692       410318 :             std::__uninitialized_copy_a(__first, __last,
+    1693              :                                         this->_M_impl._M_start,
+    1694       410318 :                                         _M_get_Tp_allocator());
+    1695       410318 :         }
+    1696              : 
+    1697              :       // Called by the first initialize_dispatch above and by the
+    1698              :       // vector(n,value,a) constructor.
+    1699              :       _GLIBCXX20_CONSTEXPR
+    1700              :       void
+    1701      2493050 :       _M_fill_initialize(size_type __n, const value_type& __value)
+    1702              :       {
+    1703      2493050 :         this->_M_impl._M_finish =
+    1704      2493050 :           std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value,
+    1705      2493050 :                                         _M_get_Tp_allocator());
+    1706      2493050 :       }
+    1707              : 
+    1708              : #if __cplusplus >= 201103L
+    1709              :       // Called by the vector(n) constructor.
+    1710              :       _GLIBCXX20_CONSTEXPR
+    1711              :       void
+    1712         4510 :       _M_default_initialize(size_type __n)
+    1713              :       {
+    1714         4510 :         this->_M_impl._M_finish =
+    1715         4510 :           std::__uninitialized_default_n_a(this->_M_impl._M_start, __n,
+    1716         4510 :                                            _M_get_Tp_allocator());
+    1717         4510 :       }
+    1718              : #endif
+    1719              : 
+    1720              :       // Internal assign functions follow.  The *_aux functions do the actual
+    1721              :       // assignment work for the range versions.
+    1722              : 
+    1723              :       // Called by the range assign to implement [23.1.1]/9
+    1724              : 
+    1725              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1726              :       // 438. Ambiguity in the "do the right thing" clause
+    1727              :       template<typename _Integer>
+    1728              :         _GLIBCXX20_CONSTEXPR
+    1729              :         void
+    1730              :         _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
+    1731              :         { _M_fill_assign(__n, __val); }
+    1732              : 
+    1733              :       // Called by the range assign to implement [23.1.1]/9
+    1734              :       template<typename _InputIterator>
+    1735              :         _GLIBCXX20_CONSTEXPR
+    1736              :         void
+    1737              :         _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
+    1738              :                            __false_type)
+    1739              :         { _M_assign_aux(__first, __last, std::__iterator_category(__first)); }
+    1740              : 
+    1741              :       // Called by the second assign_dispatch above
+    1742              :       template<typename _InputIterator>
+    1743              :         _GLIBCXX20_CONSTEXPR
+    1744              :         void
+    1745              :         _M_assign_aux(_InputIterator __first, _InputIterator __last,
+    1746              :                       std::input_iterator_tag);
+    1747              : 
+    1748              :       // Called by the second assign_dispatch above
+    1749              :       template<typename _ForwardIterator>
+    1750              :         _GLIBCXX20_CONSTEXPR
+    1751              :         void
+    1752              :         _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
+    1753              :                       std::forward_iterator_tag);
+    1754              : 
+    1755              :       // Called by assign(n,t), and the range assign when it turns out
+    1756              :       // to be the same thing.
+    1757              :       _GLIBCXX20_CONSTEXPR
+    1758              :       void
+    1759              :       _M_fill_assign(size_type __n, const value_type& __val);
+    1760              : 
+    1761              :       // Internal insert functions follow.
+    1762              : 
+    1763              :       // Called by the range insert to implement [23.1.1]/9
+    1764              : 
+    1765              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1766              :       // 438. Ambiguity in the "do the right thing" clause
+    1767              :       template<typename _Integer>
+    1768              :         _GLIBCXX20_CONSTEXPR
+    1769              :         void
+    1770              :         _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val,
+    1771              :                            __true_type)
+    1772              :         { _M_fill_insert(__pos, __n, __val); }
+    1773              : 
+    1774              :       // Called by the range insert to implement [23.1.1]/9
+    1775              :       template<typename _InputIterator>
+    1776              :         _GLIBCXX20_CONSTEXPR
+    1777              :         void
+    1778              :         _M_insert_dispatch(iterator __pos, _InputIterator __first,
+    1779              :                            _InputIterator __last, __false_type)
+    1780              :         {
+    1781              :           _M_range_insert(__pos, __first, __last,
+    1782              :                           std::__iterator_category(__first));
+    1783              :         }
+    1784              : 
+    1785              :       // Called by the second insert_dispatch above
+    1786              :       template<typename _InputIterator>
+    1787              :         _GLIBCXX20_CONSTEXPR
+    1788              :         void
+    1789              :         _M_range_insert(iterator __pos, _InputIterator __first,
+    1790              :                         _InputIterator __last, std::input_iterator_tag);
+    1791              : 
+    1792              :       // Called by the second insert_dispatch above
+    1793              :       template<typename _ForwardIterator>
+    1794              :         _GLIBCXX20_CONSTEXPR
+    1795              :         void
+    1796              :         _M_range_insert(iterator __pos, _ForwardIterator __first,
+    1797              :                         _ForwardIterator __last, std::forward_iterator_tag);
+    1798              : 
+    1799              :       // Called by insert(p,n,x), and the range insert when it turns out to be
+    1800              :       // the same thing.
+    1801              :       _GLIBCXX20_CONSTEXPR
+    1802              :       void
+    1803              :       _M_fill_insert(iterator __pos, size_type __n, const value_type& __x);
+    1804              : 
+    1805              : #if __cplusplus >= 201103L
+    1806              :       // Called by resize(n).
+    1807              :       _GLIBCXX20_CONSTEXPR
+    1808              :       void
+    1809              :       _M_default_append(size_type __n);
+    1810              : 
+    1811              :       _GLIBCXX20_CONSTEXPR
+    1812              :       bool
+    1813              :       _M_shrink_to_fit();
+    1814              : #endif
+    1815              : 
+    1816              : #if __cplusplus < 201103L
+    1817              :       // Called by insert(p,x)
+    1818              :       void
+    1819              :       _M_insert_aux(iterator __position, const value_type& __x);
+    1820              : 
+    1821              :       void
+    1822              :       _M_realloc_insert(iterator __position, const value_type& __x);
+    1823              : #else
+    1824              :       // A value_type object constructed with _Alloc_traits::construct()
+    1825              :       // and destroyed with _Alloc_traits::destroy().
+    1826              :       struct _Temporary_value
+    1827              :       {
+    1828              :         template<typename... _Args>
+    1829              :           _GLIBCXX20_CONSTEXPR explicit
+    1830          178 :           _Temporary_value(vector* __vec, _Args&&... __args) : _M_this(__vec)
+    1831              :           {
+    1832          178 :             _Alloc_traits::construct(_M_this->_M_impl, _M_ptr(),
+    1833              :                                      std::forward<_Args>(__args)...);
+    1834          178 :           }
+    1835              : 
+    1836              :         _GLIBCXX20_CONSTEXPR
+    1837          178 :         ~_Temporary_value()
+    1838          356 :         { _Alloc_traits::destroy(_M_this->_M_impl, _M_ptr()); }
+    1839              : 
+    1840              :         _GLIBCXX20_CONSTEXPR value_type&
+    1841          178 :         _M_val() noexcept { return _M_storage._M_val; }
+    1842              : 
+    1843              :       private:
+    1844              :         _GLIBCXX20_CONSTEXPR _Tp*
+    1845          356 :         _M_ptr() noexcept { return std::__addressof(_M_storage._M_val); }
+    1846              : 
+    1847              :         union _Storage
+    1848              :         {
+    1849          178 :           constexpr _Storage() : _M_byte() { }
+    1850          178 :           _GLIBCXX20_CONSTEXPR ~_Storage() { }
+    1851              :           _Storage& operator=(const _Storage&) = delete;
+    1852              :           unsigned char _M_byte;
+    1853              :           _Tp _M_val;
+    1854              :         };
+    1855              : 
+    1856              :         vector*  _M_this;
+    1857              :         _Storage _M_storage;
+    1858              :       };
+    1859              : 
+    1860              :       // Called by insert(p,x) and other functions when insertion needs to
+    1861              :       // reallocate or move existing elements. _Arg is either _Tp& or _Tp.
+    1862              :       template<typename _Arg>
+    1863              :         _GLIBCXX20_CONSTEXPR
+    1864              :         void
+    1865              :         _M_insert_aux(iterator __position, _Arg&& __arg);
+    1866              : 
+    1867              :       template<typename... _Args>
+    1868              :         _GLIBCXX20_CONSTEXPR
+    1869              :         void
+    1870              :         _M_realloc_insert(iterator __position, _Args&&... __args);
+    1871              : 
+    1872              :       // Either move-construct at the end, or forward to _M_insert_aux.
+    1873              :       _GLIBCXX20_CONSTEXPR
+    1874              :       iterator
+    1875              :       _M_insert_rval(const_iterator __position, value_type&& __v);
+    1876              : 
+    1877              :       // Try to emplace at the end, otherwise forward to _M_insert_aux.
+    1878              :       template<typename... _Args>
+    1879              :         _GLIBCXX20_CONSTEXPR
+    1880              :         iterator
+    1881              :         _M_emplace_aux(const_iterator __position, _Args&&... __args);
+    1882              : 
+    1883              :       // Emplacing an rvalue of the correct type can use _M_insert_rval.
+    1884              :       _GLIBCXX20_CONSTEXPR
+    1885              :       iterator
+    1886              :       _M_emplace_aux(const_iterator __position, value_type&& __v)
+    1887              :       { return _M_insert_rval(__position, std::move(__v)); }
+    1888              : #endif
+    1889              : 
+    1890              :       // Called by _M_fill_insert, _M_insert_aux etc.
+    1891              :       _GLIBCXX20_CONSTEXPR
+    1892              :       size_type
+    1893    106548050 :       _M_check_len(size_type __n, const char* __s) const
+    1894              :       {
+    1895    106548050 :         if (max_size() - size() < __n)
+    1896            0 :           __throw_length_error(__N(__s));
+    1897              : 
+    1898    106548050 :         const size_type __len = size() + (std::max)(size(), __n);
+    1899    106548050 :         return (__len < size() || __len > max_size()) ? max_size() : __len;
+    1900              :       }
+    1901              : 
+    1902              :       // Called by constructors to check initial size.
+    1903              :       static _GLIBCXX20_CONSTEXPR size_type
+    1904      2908286 :       _S_check_init_len(size_type __n, const allocator_type& __a)
+    1905              :       {
+    1906      2908286 :         if (__n > _S_max_size(_Tp_alloc_type(__a)))
+    1907            0 :           __throw_length_error(
+    1908              :               __N("cannot create std::vector larger than max_size()"));
+    1909      2908286 :         return __n;
+    1910              :       }
+    1911              : 
+    1912              :       static _GLIBCXX20_CONSTEXPR size_type
+    1913    216018506 :       _S_max_size(const _Tp_alloc_type& __a) _GLIBCXX_NOEXCEPT
+    1914              :       {
+    1915              :         // std::distance(begin(), end()) cannot be greater than PTRDIFF_MAX,
+    1916              :         // and realistically we can't store more than PTRDIFF_MAX/sizeof(T)
+    1917              :         // (even if std::allocator_traits::max_size says we can).
+    1918    216018506 :         const size_t __diffmax
+    1919              :           = __gnu_cxx::__numeric_traits<ptrdiff_t>::__max / sizeof(_Tp);
+    1920    216018506 :         const size_t __allocmax = _Alloc_traits::max_size(__a);
+    1921    216018506 :         return (std::min)(__diffmax, __allocmax);
+    1922              :       }
+    1923              : 
+    1924              :       // Internal erase functions follow.
+    1925              : 
+    1926              :       // Called by erase(q1,q2), clear(), resize(), _M_fill_assign,
+    1927              :       // _M_assign_aux.
+    1928              :       _GLIBCXX20_CONSTEXPR
+    1929              :       void
+    1930        59818 :       _M_erase_at_end(pointer __pos) _GLIBCXX_NOEXCEPT
+    1931              :       {
+    1932        59818 :         if (size_type __n = this->_M_impl._M_finish - __pos)
+    1933              :           {
+    1934        39742 :             std::_Destroy(__pos, this->_M_impl._M_finish,
+    1935        39742 :                           _M_get_Tp_allocator());
+    1936        39742 :             this->_M_impl._M_finish = __pos;
+    1937              :             _GLIBCXX_ASAN_ANNOTATE_SHRINK(__n);
+    1938              :           }
+    1939        59818 :       }
+    1940              : 
+    1941              :       _GLIBCXX20_CONSTEXPR
+    1942              :       iterator
+    1943              :       _M_erase(iterator __position);
+    1944              : 
+    1945              :       _GLIBCXX20_CONSTEXPR
+    1946              :       iterator
+    1947              :       _M_erase(iterator __first, iterator __last);
+    1948              : 
+    1949              : #if __cplusplus >= 201103L
+    1950              :     private:
+    1951              :       // Constant-time move assignment when source object's memory can be
+    1952              :       // moved, either because the source's allocator will move too
+    1953              :       // or because the allocators are equal.
+    1954              :       _GLIBCXX20_CONSTEXPR
+    1955              :       void
+    1956         5568 :       _M_move_assign(vector&& __x, true_type) noexcept
+    1957              :       {
+    1958         5568 :         vector __tmp(get_allocator());
+    1959         5568 :         this->_M_impl._M_swap_data(__x._M_impl);
+    1960         5568 :         __tmp._M_impl._M_swap_data(__x._M_impl);
+    1961         5568 :         std::__alloc_on_move(_M_get_Tp_allocator(), __x._M_get_Tp_allocator());
+    1962         5568 :       }
+    1963              : 
+    1964              :       // Do move assignment when it might not be possible to move source
+    1965              :       // object's memory, resulting in a linear-time operation.
+    1966              :       _GLIBCXX20_CONSTEXPR
+    1967              :       void
+    1968              :       _M_move_assign(vector&& __x, false_type)
+    1969              :       {
+    1970              :         if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator())
+    1971              :           _M_move_assign(std::move(__x), true_type());
+    1972              :         else
+    1973              :           {
+    1974              :             // The rvalue's allocator cannot be moved and is not equal,
+    1975              :             // so we need to individually move each element.
+    1976              :             this->_M_assign_aux(std::make_move_iterator(__x.begin()),
+    1977              :                                 std::make_move_iterator(__x.end()),
+    1978              :                                 std::random_access_iterator_tag());
+    1979              :             __x.clear();
+    1980              :           }
+    1981              :       }
+    1982              : #endif
+    1983              : 
+    1984              :       template<typename _Up>
+    1985              :         _GLIBCXX20_CONSTEXPR
+    1986              :         _Up*
+    1987       415512 :         _M_data_ptr(_Up* __ptr) const _GLIBCXX_NOEXCEPT
+    1988       415512 :         { return __ptr; }
+    1989              : 
+    1990              : #if __cplusplus >= 201103L
+    1991              :       template<typename _Ptr>
+    1992              :         _GLIBCXX20_CONSTEXPR
+    1993              :         typename std::pointer_traits<_Ptr>::element_type*
+    1994              :         _M_data_ptr(_Ptr __ptr) const
+    1995              :         { return empty() ? nullptr : std::__to_address(__ptr); }
+    1996              : #else
+    1997              :       template<typename _Up>
+    1998              :         _Up*
+    1999              :         _M_data_ptr(_Up* __ptr) _GLIBCXX_NOEXCEPT
+    2000              :         { return __ptr; }
+    2001              : 
+    2002              :       template<typename _Ptr>
+    2003              :         value_type*
+    2004              :         _M_data_ptr(_Ptr __ptr)
+    2005              :         { return empty() ? (value_type*)0 : __ptr.operator->(); }
+    2006              : 
+    2007              :       template<typename _Ptr>
+    2008              :         const value_type*
+    2009              :         _M_data_ptr(_Ptr __ptr) const
+    2010              :         { return empty() ? (const value_type*)0 : __ptr.operator->(); }
+    2011              : #endif
+    2012              :     };
+    2013              : 
+    2014              : #if __cpp_deduction_guides >= 201606
+    2015              :   template<typename _InputIterator, typename _ValT
+    2016              :              = typename iterator_traits<_InputIterator>::value_type,
+    2017              :            typename _Allocator = allocator<_ValT>,
+    2018              :            typename = _RequireInputIter<_InputIterator>,
+    2019              :            typename = _RequireAllocator<_Allocator>>
+    2020              :     vector(_InputIterator, _InputIterator, _Allocator = _Allocator())
+    2021              :       -> vector<_ValT, _Allocator>;
+    2022              : #endif
+    2023              : 
+    2024              :   /**
+    2025              :    *  @brief  Vector equality comparison.
+    2026              :    *  @param  __x  A %vector.
+    2027              :    *  @param  __y  A %vector of the same type as @a __x.
+    2028              :    *  @return  True iff the size and elements of the vectors are equal.
+    2029              :    *
+    2030              :    *  This is an equivalence relation.  It is linear in the size of the
+    2031              :    *  vectors.  Vectors are considered equivalent if their sizes are equal,
+    2032              :    *  and if corresponding elements compare equal.
+    2033              :   */
+    2034              :   template<typename _Tp, typename _Alloc>
+    2035              :     _GLIBCXX20_CONSTEXPR
+    2036              :     inline bool
+    2037          160 :     operator==(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+    2038          160 :     { return (__x.size() == __y.size()
+    2039          160 :               && std::equal(__x.begin(), __x.end(), __y.begin())); }
+    2040              : 
+    2041              : #if __cpp_lib_three_way_comparison
+    2042              :   /**
+    2043              :    *  @brief  Vector ordering relation.
+    2044              :    *  @param  __x  A `vector`.
+    2045              :    *  @param  __y  A `vector` of the same type as `__x`.
+    2046              :    *  @return  A value indicating whether `__x` is less than, equal to,
+    2047              :    *           greater than, or incomparable with `__y`.
+    2048              :    *
+    2049              :    *  See `std::lexicographical_compare_three_way()` for how the determination
+    2050              :    *  is made. This operator is used to synthesize relational operators like
+    2051              :    *  `<` and `>=` etc.
+    2052              :   */
+    2053              :   template<typename _Tp, typename _Alloc>
+    2054              :     _GLIBCXX20_CONSTEXPR
+    2055              :     inline __detail::__synth3way_t<_Tp>
+    2056              :     operator<=>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+    2057              :     {
+    2058              :       return std::lexicographical_compare_three_way(__x.begin(), __x.end(),
+    2059              :                                                     __y.begin(), __y.end(),
+    2060              :                                                     __detail::__synth3way);
+    2061              :     }
+    2062              : #else
+    2063              :   /**
+    2064              :    *  @brief  Vector ordering relation.
+    2065              :    *  @param  __x  A %vector.
+    2066              :    *  @param  __y  A %vector of the same type as @a __x.
+    2067              :    *  @return  True iff @a __x is lexicographically less than @a __y.
+    2068              :    *
+    2069              :    *  This is a total ordering relation.  It is linear in the size of the
+    2070              :    *  vectors.  The elements must be comparable with @c <.
+    2071              :    *
+    2072              :    *  See std::lexicographical_compare() for how the determination is made.
+    2073              :   */
+    2074              :   template<typename _Tp, typename _Alloc>
+    2075              :     inline bool
+    2076              :     operator<(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+    2077              :     { return std::lexicographical_compare(__x.begin(), __x.end(),
+    2078              :                                           __y.begin(), __y.end()); }
+    2079              : 
+    2080              :   /// Based on operator==
+    2081              :   template<typename _Tp, typename _Alloc>
+    2082              :     inline bool
+    2083              :     operator!=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+    2084              :     { return !(__x == __y); }
+    2085              : 
+    2086              :   /// Based on operator<
+    2087              :   template<typename _Tp, typename _Alloc>
+    2088              :     inline bool
+    2089              :     operator>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+    2090              :     { return __y < __x; }
+    2091              : 
+    2092              :   /// Based on operator<
+    2093              :   template<typename _Tp, typename _Alloc>
+    2094              :     inline bool
+    2095              :     operator<=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+    2096              :     { return !(__y < __x); }
+    2097              : 
+    2098              :   /// Based on operator<
+    2099              :   template<typename _Tp, typename _Alloc>
+    2100              :     inline bool
+    2101              :     operator>=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+    2102              :     { return !(__x < __y); }
+    2103              : #endif // three-way comparison
+    2104              : 
+    2105              :   /// See std::vector::swap().
+    2106              :   template<typename _Tp, typename _Alloc>
+    2107              :     _GLIBCXX20_CONSTEXPR
+    2108              :     inline void
+    2109              :     swap(vector<_Tp, _Alloc>& __x, vector<_Tp, _Alloc>& __y)
+    2110              :     _GLIBCXX_NOEXCEPT_IF(noexcept(__x.swap(__y)))
+    2111              :     { __x.swap(__y); }
+    2112              : 
+    2113              : _GLIBCXX_END_NAMESPACE_CONTAINER
+    2114              : 
+    2115              : #if __cplusplus >= 201703L
+    2116              :   namespace __detail::__variant
+    2117              :   {
+    2118              :     template<typename> struct _Never_valueless_alt; // see <variant>
+    2119              : 
+    2120              :     // Provide the strong exception-safety guarantee when emplacing a
+    2121              :     // vector into a variant, but only if move assignment cannot throw.
+    2122              :     template<typename _Tp, typename _Alloc>
+    2123              :       struct _Never_valueless_alt<_GLIBCXX_STD_C::vector<_Tp, _Alloc>>
+    2124              :       : std::is_nothrow_move_assignable<_GLIBCXX_STD_C::vector<_Tp, _Alloc>>
+    2125              :       { };
+    2126              :   }  // namespace __detail::__variant
+    2127              : #endif // C++17
+    2128              : 
+    2129              : _GLIBCXX_END_NAMESPACE_VERSION
+    2130              : } // namespace std
+    2131              : 
+    2132              : #endif /* _STL_VECTOR_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/this_thread_sleep.h.func-c.html b/html/usr/include/c++/13/bits/this_thread_sleep.h.func-c.html new file mode 100644 index 0000000..7c6e9fa --- /dev/null +++ b/html/usr/include/c++/13/bits/this_thread_sleep.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/this_thread_sleep.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - this_thread_sleep.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %90
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt11this_thread9sleep_forIlSt5ratioILl1ELl1000EEEEvRKNSt6chrono8durationIT_T0_EE0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/this_thread_sleep.h.func.html b/html/usr/include/c++/13/bits/this_thread_sleep.h.func.html new file mode 100644 index 0000000..eba1b71 --- /dev/null +++ b/html/usr/include/c++/13/bits/this_thread_sleep.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/this_thread_sleep.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - this_thread_sleep.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %90
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt11this_thread9sleep_forIlSt5ratioILl1ELl1000EEEEvRKNSt6chrono8durationIT_T0_EE0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/this_thread_sleep.h.gcov.html b/html/usr/include/c++/13/bits/this_thread_sleep.h.gcov.html new file mode 100644 index 0000000..99f6ca5 --- /dev/null +++ b/html/usr/include/c++/13/bits/this_thread_sleep.h.gcov.html @@ -0,0 +1,193 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/this_thread_sleep.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - this_thread_sleep.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %90
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // std::this_thread::sleep_for/until declarations -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2008-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/this_thread_sleep.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{thread}
+      28              :  */
+      29              : 
+      30              : #ifndef _GLIBCXX_THIS_THREAD_SLEEP_H
+      31              : #define _GLIBCXX_THIS_THREAD_SLEEP_H 1
+      32              : 
+      33              : #pragma GCC system_header
+      34              : 
+      35              : #if __cplusplus >= 201103L
+      36              : #include <bits/chrono.h> // std::chrono::*
+      37              : 
+      38              : #ifdef _GLIBCXX_USE_NANOSLEEP
+      39              : # include <cerrno>  // errno, EINTR
+      40              : # include <time.h>  // nanosleep
+      41              : #endif
+      42              : 
+      43              : namespace std _GLIBCXX_VISIBILITY(default)
+      44              : {
+      45              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      46              : 
+      47              :   /** @addtogroup threads
+      48              :    *  @{
+      49              :    */
+      50              : 
+      51              :   /** @namespace std::this_thread
+      52              :    *  @brief ISO C++ 2011 namespace for interacting with the current thread
+      53              :    *
+      54              :    *  C++11 30.3.2 [thread.thread.this] Namespace this_thread.
+      55              :    */
+      56              :   namespace this_thread
+      57              :   {
+      58              : #ifndef _GLIBCXX_NO_SLEEP
+      59              : 
+      60              : #ifndef _GLIBCXX_USE_NANOSLEEP
+      61              :     void
+      62              :     __sleep_for(chrono::seconds, chrono::nanoseconds);
+      63              : #endif
+      64              : 
+      65              :     /// this_thread::sleep_for
+      66              :     template<typename _Rep, typename _Period>
+      67              :       inline void
+      68            0 :       sleep_for(const chrono::duration<_Rep, _Period>& __rtime)
+      69              :       {
+      70            0 :         if (__rtime <= __rtime.zero())
+      71            0 :           return;
+      72            0 :         auto __s = chrono::duration_cast<chrono::seconds>(__rtime);
+      73            0 :         auto __ns = chrono::duration_cast<chrono::nanoseconds>(__rtime - __s);
+      74              : #ifdef _GLIBCXX_USE_NANOSLEEP
+      75            0 :         struct ::timespec __ts =
+      76              :           {
+      77            0 :             static_cast<std::time_t>(__s.count()),
+      78            0 :             static_cast<long>(__ns.count())
+      79              :           };
+      80            0 :         while (::nanosleep(&__ts, &__ts) == -1 && errno == EINTR)
+      81              :           { }
+      82              : #else
+      83              :         __sleep_for(__s, __ns);
+      84              : #endif
+      85              :       }
+      86              : 
+      87              :     /// this_thread::sleep_until
+      88              :     template<typename _Clock, typename _Duration>
+      89              :       inline void
+      90              :       sleep_until(const chrono::time_point<_Clock, _Duration>& __atime)
+      91              :       {
+      92              : #if __cplusplus > 201703L
+      93              :         static_assert(chrono::is_clock_v<_Clock>);
+      94              : #endif
+      95              :         auto __now = _Clock::now();
+      96              :         if (_Clock::is_steady)
+      97              :           {
+      98              :             if (__now < __atime)
+      99              :               sleep_for(__atime - __now);
+     100              :             return;
+     101              :           }
+     102              :         while (__now < __atime)
+     103              :           {
+     104              :             sleep_for(__atime - __now);
+     105              :             __now = _Clock::now();
+     106              :           }
+     107              :       }
+     108              : #endif // ! NO_SLEEP
+     109              :   } // namespace this_thread
+     110              : 
+     111              :   /// @}
+     112              : 
+     113              : _GLIBCXX_END_NAMESPACE_VERSION
+     114              : } // namespace
+     115              : #endif // C++11
+     116              : 
+     117              : #endif // _GLIBCXX_THIS_THREAD_SLEEP_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/uniform_int_dist.h.func-c.html b/html/usr/include/c++/13/bits/uniform_int_dist.h.func-c.html new file mode 100644 index 0000000..ce0c709 --- /dev/null +++ b/html/usr/include/c++/13/bits/uniform_int_dist.h.func-c.html @@ -0,0 +1,131 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/uniform_int_dist.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - uniform_int_dist.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:75.6 %4131
Test Date:2024-04-30 13:17:26Functions:87.5 %87
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt24uniform_int_distributionImEC2Ev0
_ZNKSt24uniform_int_distributionImE10param_type1bEv40674
_ZNSt24uniform_int_distributionImE10param_typeC2Emm40674
_ZNSt24uniform_int_distributionImE5_S_ndImSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEjEET1_RT0_S4_40674
_ZNSt24uniform_int_distributionImEC2Emm40674
_ZNSt24uniform_int_distributionImEclISt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEEEmRT_40674
_ZNSt24uniform_int_distributionImEclISt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEEEmRT_RKNS0_10param_typeE40674
_ZNKSt24uniform_int_distributionImE10param_type1aEv81348
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/uniform_int_dist.h.func.html b/html/usr/include/c++/13/bits/uniform_int_dist.h.func.html new file mode 100644 index 0000000..d9ccd0d --- /dev/null +++ b/html/usr/include/c++/13/bits/uniform_int_dist.h.func.html @@ -0,0 +1,131 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/uniform_int_dist.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - uniform_int_dist.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:75.6 %4131
Test Date:2024-04-30 13:17:26Functions:87.5 %87
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt24uniform_int_distributionImE10param_type1aEv81348
_ZNKSt24uniform_int_distributionImE10param_type1bEv40674
_ZNSt24uniform_int_distributionImE10param_typeC2Emm40674
_ZNSt24uniform_int_distributionImE5_S_ndImSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEjEET1_RT0_S4_40674
_ZNSt24uniform_int_distributionImEC2Emm40674
_ZNSt24uniform_int_distributionImEC2Ev0
_ZNSt24uniform_int_distributionImEclISt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEEEmRT_40674
_ZNSt24uniform_int_distributionImEclISt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEEEmRT_RKNS0_10param_typeE40674
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/uniform_int_dist.h.gcov.html b/html/usr/include/c++/13/bits/uniform_int_dist.h.gcov.html new file mode 100644 index 0000000..0c01ea7 --- /dev/null +++ b/html/usr/include/c++/13/bits/uniform_int_dist.h.gcov.html @@ -0,0 +1,544 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/uniform_int_dist.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - uniform_int_dist.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:75.6 %4131
Test Date:2024-04-30 13:17:26Functions:87.5 %87
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Class template uniform_int_distribution -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2009-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /**
+      26              :  * @file bits/uniform_int_dist.h
+      27              :  *  This is an internal header file, included by other library headers.
+      28              :  *  Do not attempt to use it directly. @headername{random}
+      29              :  */
+      30              : 
+      31              : #ifndef _GLIBCXX_BITS_UNIFORM_INT_DIST_H
+      32              : #define _GLIBCXX_BITS_UNIFORM_INT_DIST_H
+      33              : 
+      34              : #include <type_traits>
+      35              : #include <ext/numeric_traits.h>
+      36              : #if __cplusplus > 201703L
+      37              : # include <concepts>
+      38              : #endif
+      39              : #include <bits/concept_check.h> // __glibcxx_function_requires
+      40              : 
+      41              : namespace std _GLIBCXX_VISIBILITY(default)
+      42              : {
+      43              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      44              : 
+      45              : #ifdef __cpp_lib_concepts
+      46              :   /// Requirements for a uniform random bit generator.
+      47              :   /**
+      48              :    * @ingroup random_distributions_uniform
+      49              :    * @headerfile random
+      50              :    * @since C++20
+      51              :    */
+      52              :   template<typename _Gen>
+      53              :     concept uniform_random_bit_generator
+      54              :       = invocable<_Gen&> && unsigned_integral<invoke_result_t<_Gen&>>
+      55              :       && requires
+      56              :       {
+      57              :         { _Gen::min() } -> same_as<invoke_result_t<_Gen&>>;
+      58              :         { _Gen::max() } -> same_as<invoke_result_t<_Gen&>>;
+      59              :         requires bool_constant<(_Gen::min() < _Gen::max())>::value;
+      60              :       };
+      61              : #endif
+      62              : 
+      63              :   /// @cond undocumented
+      64              :   namespace __detail
+      65              :   {
+      66              :     // Determine whether number is a power of two.
+      67              :     // This is true for zero, which is OK because we want _Power_of_2(n+1)
+      68              :     // to be true if n==numeric_limits<_Tp>::max() and so n+1 wraps around.
+      69              :     template<typename _Tp>
+      70              :       constexpr bool
+      71              :       _Power_of_2(_Tp __x)
+      72              :       {
+      73              :         return ((__x - 1) & __x) == 0;
+      74              :       }
+      75              :   }
+      76              :   /// @endcond
+      77              : 
+      78              :   /**
+      79              :    * @brief Uniform discrete distribution for random numbers.
+      80              :    * A discrete random distribution on the range @f$[min, max]@f$ with equal
+      81              :    * probability throughout the range.
+      82              :    *
+      83              :    * @ingroup random_distributions_uniform
+      84              :    * @headerfile random
+      85              :    * @since C++11
+      86              :    */
+      87              :   template<typename _IntType = int>
+      88              :     class uniform_int_distribution
+      89              :     {
+      90              :       static_assert(std::is_integral<_IntType>::value,
+      91              :                     "template argument must be an integral type");
+      92              : 
+      93              :     public:
+      94              :       /** The type of the range of the distribution. */
+      95              :       typedef _IntType result_type;
+      96              :       /** Parameter type. */
+      97              :       struct param_type
+      98              :       {
+      99              :         typedef uniform_int_distribution<_IntType> distribution_type;
+     100              : 
+     101              :         param_type() : param_type(0) { }
+     102              : 
+     103              :         explicit
+     104        40674 :         param_type(_IntType __a,
+     105              :                    _IntType __b = __gnu_cxx::__int_traits<_IntType>::__max)
+     106        40674 :         : _M_a(__a), _M_b(__b)
+     107              :         {
+     108        40674 :           __glibcxx_assert(_M_a <= _M_b);
+     109        40674 :         }
+     110              : 
+     111              :         result_type
+     112        81348 :         a() const
+     113        81348 :         { return _M_a; }
+     114              : 
+     115              :         result_type
+     116        40674 :         b() const
+     117        40674 :         { return _M_b; }
+     118              : 
+     119              :         friend bool
+     120              :         operator==(const param_type& __p1, const param_type& __p2)
+     121              :         { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; }
+     122              : 
+     123              :         friend bool
+     124              :         operator!=(const param_type& __p1, const param_type& __p2)
+     125              :         { return !(__p1 == __p2); }
+     126              : 
+     127              :       private:
+     128              :         _IntType _M_a;
+     129              :         _IntType _M_b;
+     130              :       };
+     131              : 
+     132              :     public:
+     133              :       /**
+     134              :        * @brief Constructs a uniform distribution object.
+     135              :        */
+     136            0 :       uniform_int_distribution() : uniform_int_distribution(0) { }
+     137              : 
+     138              :       /**
+     139              :        * @brief Constructs a uniform distribution object.
+     140              :        */
+     141              :       explicit
+     142        40674 :       uniform_int_distribution(_IntType __a,
+     143              :                                _IntType __b
+     144              :                                  = __gnu_cxx::__int_traits<_IntType>::__max)
+     145        40674 :       : _M_param(__a, __b)
+     146        40674 :       { }
+     147              : 
+     148              :       explicit
+     149              :       uniform_int_distribution(const param_type& __p)
+     150              :       : _M_param(__p)
+     151              :       { }
+     152              : 
+     153              :       /**
+     154              :        * @brief Resets the distribution state.
+     155              :        *
+     156              :        * Does nothing for the uniform integer distribution.
+     157              :        */
+     158              :       void
+     159              :       reset() { }
+     160              : 
+     161              :       result_type
+     162              :       a() const
+     163              :       { return _M_param.a(); }
+     164              : 
+     165              :       result_type
+     166              :       b() const
+     167              :       { return _M_param.b(); }
+     168              : 
+     169              :       /**
+     170              :        * @brief Returns the parameter set of the distribution.
+     171              :        */
+     172              :       param_type
+     173              :       param() const
+     174              :       { return _M_param; }
+     175              : 
+     176              :       /**
+     177              :        * @brief Sets the parameter set of the distribution.
+     178              :        * @param __param The new parameter set of the distribution.
+     179              :        */
+     180              :       void
+     181              :       param(const param_type& __param)
+     182              :       { _M_param = __param; }
+     183              : 
+     184              :       /**
+     185              :        * @brief Returns the inclusive lower bound of the distribution range.
+     186              :        */
+     187              :       result_type
+     188              :       min() const
+     189              :       { return this->a(); }
+     190              : 
+     191              :       /**
+     192              :        * @brief Returns the inclusive upper bound of the distribution range.
+     193              :        */
+     194              :       result_type
+     195              :       max() const
+     196              :       { return this->b(); }
+     197              : 
+     198              :       /**
+     199              :        * @brief Generating functions.
+     200              :        */
+     201              :       template<typename _UniformRandomBitGenerator>
+     202              :         result_type
+     203        40674 :         operator()(_UniformRandomBitGenerator& __urng)
+     204        40674 :         { return this->operator()(__urng, _M_param); }
+     205              : 
+     206              :       template<typename _UniformRandomBitGenerator>
+     207              :         result_type
+     208              :         operator()(_UniformRandomBitGenerator& __urng,
+     209              :                    const param_type& __p);
+     210              : 
+     211              :       template<typename _ForwardIterator,
+     212              :                typename _UniformRandomBitGenerator>
+     213              :         void
+     214              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+     215              :                    _UniformRandomBitGenerator& __urng)
+     216              :         { this->__generate(__f, __t, __urng, _M_param); }
+     217              : 
+     218              :       template<typename _ForwardIterator,
+     219              :                typename _UniformRandomBitGenerator>
+     220              :         void
+     221              :         __generate(_ForwardIterator __f, _ForwardIterator __t,
+     222              :                    _UniformRandomBitGenerator& __urng,
+     223              :                    const param_type& __p)
+     224              :         { this->__generate_impl(__f, __t, __urng, __p); }
+     225              : 
+     226              :       template<typename _UniformRandomBitGenerator>
+     227              :         void
+     228              :         __generate(result_type* __f, result_type* __t,
+     229              :                    _UniformRandomBitGenerator& __urng,
+     230              :                    const param_type& __p)
+     231              :         { this->__generate_impl(__f, __t, __urng, __p); }
+     232              : 
+     233              :       /**
+     234              :        * @brief Return true if two uniform integer distributions have
+     235              :        *        the same parameters.
+     236              :        */
+     237              :       friend bool
+     238              :       operator==(const uniform_int_distribution& __d1,
+     239              :                  const uniform_int_distribution& __d2)
+     240              :       { return __d1._M_param == __d2._M_param; }
+     241              : 
+     242              :     private:
+     243              :       template<typename _ForwardIterator,
+     244              :                typename _UniformRandomBitGenerator>
+     245              :         void
+     246              :         __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+     247              :                         _UniformRandomBitGenerator& __urng,
+     248              :                         const param_type& __p);
+     249              : 
+     250              :       param_type _M_param;
+     251              : 
+     252              :       // Lemire's nearly divisionless algorithm.
+     253              :       // Returns an unbiased random number from __g downscaled to [0,__range)
+     254              :       // using an unsigned type _Wp twice as wide as unsigned type _Up.
+     255              :       template<typename _Wp, typename _Urbg, typename _Up>
+     256              :         static _Up
+     257        40674 :         _S_nd(_Urbg& __g, _Up __range)
+     258              :         {
+     259              :           using _Up_traits = __gnu_cxx::__int_traits<_Up>;
+     260              :           using _Wp_traits = __gnu_cxx::__int_traits<_Wp>;
+     261              :           static_assert(!_Up_traits::__is_signed, "U must be unsigned");
+     262              :           static_assert(!_Wp_traits::__is_signed, "W must be unsigned");
+     263              :           static_assert(_Wp_traits::__digits == (2 * _Up_traits::__digits),
+     264              :                         "W must be twice as wide as U");
+     265              : 
+     266              :           // reference: Fast Random Integer Generation in an Interval
+     267              :           // ACM Transactions on Modeling and Computer Simulation 29 (1), 2019
+     268              :           // https://arxiv.org/abs/1805.10941
+     269        40674 :           _Wp __product = _Wp(__g()) * _Wp(__range);
+     270        40674 :           _Up __low = _Up(__product);
+     271        40674 :           if (__low < __range)
+     272              :             {
+     273            2 :               _Up __threshold = -__range % __range;
+     274            2 :               while (__low < __threshold)
+     275              :                 {
+     276            0 :                   __product = _Wp(__g()) * _Wp(__range);
+     277            0 :                   __low = _Up(__product);
+     278              :                 }
+     279              :             }
+     280        40674 :           return __product >> _Up_traits::__digits;
+     281              :         }
+     282              :     };
+     283              : 
+     284              :   template<typename _IntType>
+     285              :     template<typename _UniformRandomBitGenerator>
+     286              :       typename uniform_int_distribution<_IntType>::result_type
+     287        40674 :       uniform_int_distribution<_IntType>::
+     288              :       operator()(_UniformRandomBitGenerator& __urng,
+     289              :                  const param_type& __param)
+     290              :       {
+     291              :         typedef typename _UniformRandomBitGenerator::result_type _Gresult_type;
+     292              :         typedef typename make_unsigned<result_type>::type __utype;
+     293              :         typedef typename common_type<_Gresult_type, __utype>::type __uctype;
+     294              : 
+     295        40674 :         constexpr __uctype __urngmin = _UniformRandomBitGenerator::min();
+     296        40674 :         constexpr __uctype __urngmax = _UniformRandomBitGenerator::max();
+     297              :         static_assert( __urngmin < __urngmax,
+     298              :             "Uniform random bit generator must define min() < max()");
+     299        40674 :         constexpr __uctype __urngrange = __urngmax - __urngmin;
+     300              : 
+     301        40674 :         const __uctype __urange
+     302        40674 :           = __uctype(__param.b()) - __uctype(__param.a());
+     303              : 
+     304              :         __uctype __ret;
+     305        40674 :         if (__urngrange > __urange)
+     306              :           {
+     307              :             // downscaling
+     308              : 
+     309        40674 :             const __uctype __uerange = __urange + 1; // __urange can be zero
+     310              : 
+     311              : #if defined __UINT64_TYPE__ && defined __UINT32_TYPE__
+     312              : #if __SIZEOF_INT128__
+     313              :             if _GLIBCXX17_CONSTEXPR (__urngrange == __UINT64_MAX__)
+     314              :               {
+     315              :                 // __urng produces values that use exactly 64-bits,
+     316              :                 // so use 128-bit integers to downscale to desired range.
+     317              :                 __UINT64_TYPE__ __u64erange = __uerange;
+     318              :                 __ret = __extension__ _S_nd<unsigned __int128>(__urng,
+     319              :                                                                __u64erange);
+     320              :               }
+     321              :             else
+     322              : #endif
+     323              :             if _GLIBCXX17_CONSTEXPR (__urngrange == __UINT32_MAX__)
+     324              :               {
+     325              :                 // __urng produces values that use exactly 32-bits,
+     326              :                 // so use 64-bit integers to downscale to desired range.
+     327        40674 :                 __UINT32_TYPE__ __u32erange = __uerange;
+     328        40674 :                 __ret = _S_nd<__UINT64_TYPE__>(__urng, __u32erange);
+     329              :               }
+     330              :             else
+     331              : #endif
+     332              :               {
+     333              :                 // fallback case (2 divisions)
+     334              :                 const __uctype __scaling = __urngrange / __uerange;
+     335              :                 const __uctype __past = __uerange * __scaling;
+     336              :                 do
+     337              :                   __ret = __uctype(__urng()) - __urngmin;
+     338              :                 while (__ret >= __past);
+     339              :                 __ret /= __scaling;
+     340              :               }
+     341              :           }
+     342            0 :         else if (__urngrange < __urange)
+     343              :           {
+     344              :             // upscaling
+     345              :             /*
+     346              :               Note that every value in [0, urange]
+     347              :               can be written uniquely as
+     348              : 
+     349              :               (urngrange + 1) * high + low
+     350              : 
+     351              :               where
+     352              : 
+     353              :               high in [0, urange / (urngrange + 1)]
+     354              : 
+     355              :               and
+     356              : 
+     357              :               low in [0, urngrange].
+     358              :             */
+     359              :             __uctype __tmp; // wraparound control
+     360              :             do
+     361              :               {
+     362            0 :                 const __uctype __uerngrange = __urngrange + 1;
+     363            0 :                 __tmp = (__uerngrange * operator()
+     364            0 :                          (__urng, param_type(0, __urange / __uerngrange)));
+     365            0 :                 __ret = __tmp + (__uctype(__urng()) - __urngmin);
+     366              :               }
+     367            0 :             while (__ret > __urange || __ret < __tmp);
+     368              :           }
+     369              :         else
+     370            0 :           __ret = __uctype(__urng()) - __urngmin;
+     371              : 
+     372        40674 :         return __ret + __param.a();
+     373              :       }
+     374              : 
+     375              : 
+     376              :   template<typename _IntType>
+     377              :     template<typename _ForwardIterator,
+     378              :              typename _UniformRandomBitGenerator>
+     379              :       void
+     380              :       uniform_int_distribution<_IntType>::
+     381              :       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+     382              :                       _UniformRandomBitGenerator& __urng,
+     383              :                       const param_type& __param)
+     384              :       {
+     385              :         __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
+     386              :         typedef typename _UniformRandomBitGenerator::result_type _Gresult_type;
+     387              :         typedef typename make_unsigned<result_type>::type __utype;
+     388              :         typedef typename common_type<_Gresult_type, __utype>::type __uctype;
+     389              : 
+     390              :         static_assert( __urng.min() < __urng.max(),
+     391              :             "Uniform random bit generator must define min() < max()");
+     392              : 
+     393              :         constexpr __uctype __urngmin = __urng.min();
+     394              :         constexpr __uctype __urngmax = __urng.max();
+     395              :         constexpr __uctype __urngrange = __urngmax - __urngmin;
+     396              :         const __uctype __urange
+     397              :           = __uctype(__param.b()) - __uctype(__param.a());
+     398              : 
+     399              :         __uctype __ret;
+     400              : 
+     401              :         if (__urngrange > __urange)
+     402              :           {
+     403              :             if (__detail::_Power_of_2(__urngrange + 1)
+     404              :                 && __detail::_Power_of_2(__urange + 1))
+     405              :               {
+     406              :                 while (__f != __t)
+     407              :                   {
+     408              :                     __ret = __uctype(__urng()) - __urngmin;
+     409              :                     *__f++ = (__ret & __urange) + __param.a();
+     410              :                   }
+     411              :               }
+     412              :             else
+     413              :               {
+     414              :                 // downscaling
+     415              :                 const __uctype __uerange = __urange + 1; // __urange can be zero
+     416              :                 const __uctype __scaling = __urngrange / __uerange;
+     417              :                 const __uctype __past = __uerange * __scaling;
+     418              :                 while (__f != __t)
+     419              :                   {
+     420              :                     do
+     421              :                       __ret = __uctype(__urng()) - __urngmin;
+     422              :                     while (__ret >= __past);
+     423              :                     *__f++ = __ret / __scaling + __param.a();
+     424              :                   }
+     425              :               }
+     426              :           }
+     427              :         else if (__urngrange < __urange)
+     428              :           {
+     429              :             // upscaling
+     430              :             /*
+     431              :               Note that every value in [0, urange]
+     432              :               can be written uniquely as
+     433              : 
+     434              :               (urngrange + 1) * high + low
+     435              : 
+     436              :               where
+     437              : 
+     438              :               high in [0, urange / (urngrange + 1)]
+     439              : 
+     440              :               and
+     441              : 
+     442              :               low in [0, urngrange].
+     443              :             */
+     444              :             __uctype __tmp; // wraparound control
+     445              :             while (__f != __t)
+     446              :               {
+     447              :                 do
+     448              :                   {
+     449              :                     constexpr __uctype __uerngrange = __urngrange + 1;
+     450              :                     __tmp = (__uerngrange * operator()
+     451              :                              (__urng, param_type(0, __urange / __uerngrange)));
+     452              :                     __ret = __tmp + (__uctype(__urng()) - __urngmin);
+     453              :                   }
+     454              :                 while (__ret > __urange || __ret < __tmp);
+     455              :                 *__f++ = __ret;
+     456              :               }
+     457              :           }
+     458              :         else
+     459              :           while (__f != __t)
+     460              :             *__f++ = __uctype(__urng()) - __urngmin + __param.a();
+     461              :       }
+     462              : 
+     463              :   // operator!= and operator<< and operator>> are defined in <bits/random.h>
+     464              : 
+     465              : _GLIBCXX_END_NAMESPACE_VERSION
+     466              : } // namespace std
+     467              : 
+     468              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/unique_ptr.h.func-c.html b/html/usr/include/c++/13/bits/unique_ptr.h.func-c.html new file mode 100644 index 0000000..89937e7 --- /dev/null +++ b/html/usr/include/c++/13/bits/unique_ptr.h.func-c.html @@ -0,0 +1,2574 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/unique_ptr.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - unique_ptr.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:98.7 %7675
Test Date:2024-04-30 13:17:26Functions:63.6 %332211
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EEdeEv10
_ZNSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EEC2INS0_5SPODEES2_IS6_EvEEOS_IT_T0_E198
_ZNSt10unique_ptrIN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEC2IN5torch8autograd12AutogradMetaES2_IS8_EvEEOS_IT_T0_E0
_ZNSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EEC2INS0_7SPODELdES2_IS6_EvEEOS_IT_T0_E74
_ZNSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EEC2INS0_5SPODEES2_IS6_EvEEOS_IT_T0_E124
_ZNSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EE5resetEPS1_288
_ZNSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EEaSINS0_5SPODEES2_IS6_EEENSt9enable_ifIXsrSt6__and_IJS9_IJSt14is_convertibleINS_IT_T0_E7pointerEPS1_ESt6__not_ISt8is_arrayISB_EEEESt13is_assignableIRS3_OSC_EEE5valueERS4_E4typeEOSD_288
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_EcvbEv446
_ZNKSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_EcvbEv0
_ZNKSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_EcvbEv0
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv0
_ZNKSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_EcvbEv0
_ZNKSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_EcvbEv0
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv2
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv4
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv4
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv10
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv16
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv16
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv16
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv18
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv24
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv26
_ZNKSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_EcvbEv50
_ZNKSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_EcvbEv52
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_EcvbEv94
_ZNKSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_EcvbEv114
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_EC2ISO_vEESN_RKSO_446
_ZNSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_EC2ISO_vEESN_RKSO_0
_ZNSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_EC2ISQ_vEESP_RKSQ_0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_0
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_EC2ISO_vEESN_RKSO_0
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_EC2ISQ_vEESP_RKSQ_0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_2
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_4
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_4
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_10
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_16
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_16
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_16
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_18
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_24
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_26
_ZNSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_EC2IST_vEESS_RKST_50
_ZNSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_EC2ISV_vEESU_RKSV_52
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_EC2ISO_vEESN_RKSO_94
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_EC2IST_vEESS_RKST_114
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISI_T0_EDn446
_ZStneIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_EbRKSt10unique_ptrISI_T0_EDn0
_ZStneIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_EbRKSt10unique_ptrISK_T0_EDn0
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn0
_ZStneISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_EbRKSt10unique_ptrISI_T0_EDn0
_ZStneISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_EbRKSt10unique_ptrISK_T0_EDn0
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn2
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn4
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn4
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn10
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn16
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn16
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn16
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn18
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn24
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn26
_ZStneISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_EbRKSt10unique_ptrISN_T0_EDn50
_ZStneISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_EbRKSt10unique_ptrISP_T0_EDn52
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISI_T0_EDn94
_ZStneISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_EbRKSt10unique_ptrISN_T0_EDn114
_ZNSt14default_deleteIN8bayesnet10ClassifierEEC2INS0_5SPODEEvEERKS_IT_E486
_ZNSt14default_deleteIN3c1021AutogradMetaInterfaceEEC2IN5torch8autograd12AutogradMetaEvEERKS_IT_E0
_ZNSt14default_deleteIN8bayesnet10ClassifierEEC2INS0_7SPODELdEvEERKS_IT_E74
_ZNSt14default_deleteIN8bayesnet10ClassifierEEC2INS0_5SPODEEvEERKS_IT_E412
_ZNSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EEC2IS2_INS0_5SPODEEEEEPS1_OT_644
_ZNSt15__uniq_ptr_implIN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEC2IS2_IN5torch8autograd12AutogradMetaEEEEPS1_OT_0
_ZNSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_EC2IRKSO_EESN_OSI_0
_ZNSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_EC2IRKSQ_EESP_OSK_0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_0
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_EC2IRKSO_EESN_OSI_0
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_EC2IRKSQ_EESP_OSK_0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_2
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_4
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_4
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_10
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_16
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_16
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_16
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_18
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_24
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_26
_ZNSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_EC2IRKST_EESS_OSN_50
_ZNSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_EC2IRKSV_EESU_OSP_52
_ZNSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EEC2IS2_INS0_7SPODELdEEEEPS1_OT_74
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_EC2IRKSO_EESN_OSI_94
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_EC2IRKST_EESS_OSN_114
_ZNSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EEC2IS2_INS0_5SPODEEEEEPS1_OT_124
_ZNSt10unique_ptrIN8bayesnet5SPODEESt14default_deleteIS1_EE7releaseEv932
_ZNSt10unique_ptrIN5torch8autograd12AutogradMetaESt14default_deleteIS2_EE7releaseEv0
_ZNSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_E7releaseEv0
_ZNSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_E7releaseEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv0
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_E7releaseEv0
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_E7releaseEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv2
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv4
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv4
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv10
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv16
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv16
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv16
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv18
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv24
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv26
_ZNSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_E7releaseEv50
_ZNSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_E7releaseEv52
_ZNSt10unique_ptrIN8bayesnet7SPODELdESt14default_deleteIS1_EE7releaseEv74
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_E7releaseEv94
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_E7releaseEv114
_ZNSt10unique_ptrIN8bayesnet5SPODEESt14default_deleteIS1_EE7releaseEv412
_ZNSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EEC2EOS4_1210
_ZNSt15__uniq_ptr_dataIN8bayesnet10ClassifierESt14default_deleteIS1_ELb1ELb1EEC2EOS4_1210
_ZNSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EEC2EOS4_1210
_ZNSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EEC2IS3_vEEv13380
_ZNKSt14default_deleteIN8bayesnet4NodeEEclEPS1_13866
_ZNKSt14default_deleteIN3c1021AutogradMetaInterfaceEEclEPS1_0
_ZNKSt14default_deleteIN5torch8autograd12AutogradMetaEEclEPS2_0
_ZNKSt14default_deleteIN5torch8autograd15FunctionPreHookEEclEPS2_0
_ZNKSt14default_deleteIN5torch8autograd22PostAccumulateGradHookEEclEPS2_0
_ZNKSt14default_deleteIN8bayesnet5SPODEEEclEPS1_0
_ZNKSt14default_deleteIN8bayesnet7SPODELdEEclEPS1_0
_ZNKSt14default_deleteINSt6thread6_StateEEclEPS1_0
_ZNKSt14default_deleteIN8bayesnet10ClassifierEEclEPS1_486
_ZNKSt14default_deleteIN8bayesnet4NodeEEclEPS1_13380
_ZSt11make_uniqueIN8bayesnet5SPODEEJRiEENSt8__detail9_MakeUniqIT_E15__single_objectEDpOT0_13866
_ZSt11make_uniqueIN5torch8autograd12AutogradMetaEJPN3c1010TensorImplERbEENSt8__detail9_MakeUniqIT_E15__single_objectEDpOT0_0
_ZSt11make_uniqueIN8bayesnet4NodeEJRS1_EENSt8__detail9_MakeUniqIT_E15__single_objectEDpOT0_10
_ZSt11make_uniqueIN8bayesnet5SPODEEJRKiEENSt8__detail9_MakeUniqIT_E15__single_objectEDpOT0_42
_ZSt11make_uniqueIN8bayesnet7SPODELdEJRiEENSt8__detail9_MakeUniqIT_E15__single_objectEDpOT0_74
_ZSt11make_uniqueIN8bayesnet5SPODEEJRiEENSt8__detail9_MakeUniqIT_E15__single_objectEDpOT0_370
_ZSt11make_uniqueIN8bayesnet4NodeEJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENSt8__detail9_MakeUniqIT_E15__single_objectEDpOT0_13370
_ZNSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EEaSEOS4_14412
_ZNSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EEaSEOS4_1032
_ZNSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EEaSEOS4_13380
_ZNSt15__uniq_ptr_dataIN8bayesnet4NodeESt14default_deleteIS1_ELb1ELb1EEaSEOS4_14412
_ZNSt15__uniq_ptr_dataIN8bayesnet10ClassifierESt14default_deleteIS1_ELb1ELb1EEaSEOS4_1032
_ZNSt15__uniq_ptr_dataIN8bayesnet4NodeESt14default_deleteIS1_ELb1ELb1EEaSEOS4_13380
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EEaSEOS4_14412
_ZNSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EEaSEOS4_1032
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EEaSEOS4_13380
_ZNSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EE11get_deleterEv14640
_ZNSt10unique_ptrIN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EE11get_deleterEv0
_ZNSt10unique_ptrIN5torch8autograd12AutogradMetaESt14default_deleteIS2_EE11get_deleterEv0
_ZNSt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS2_EE11get_deleterEv0
_ZNSt10unique_ptrIN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EE11get_deleterEv0
_ZNSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_E11get_deleterEv0
_ZNSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt6thread6_StateESt14default_deleteIS1_EE11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_E11get_deleterEv0
_ZNSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_E11get_deleterEv0
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_E11get_deleterEv0
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_E11get_deleterEv0
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_E11get_deleterEv0
_ZNSt10unique_ptrIN8bayesnet7SPODELdESt14default_deleteIS1_EE11get_deleterEv74
_ZNSt10unique_ptrIN8bayesnet5SPODEESt14default_deleteIS1_EE11get_deleterEv412
_ZNSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EE11get_deleterEv774
_ZNSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EE11get_deleterEv13380
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE5resetEPS1_14700
_ZNSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EE5resetEPS1_1320
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE5resetEPS1_13380
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE7releaseEv15344
_ZNSt15__uniq_ptr_implIN5torch8autograd12AutogradMetaESt14default_deleteIS2_EE7releaseEv0
_ZNSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_E7releaseEv0
_ZNSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_E7releaseEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv0
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_E7releaseEv0
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_E7releaseEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv2
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv4
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv4
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv10
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv16
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv16
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv16
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv18
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv24
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv26
_ZNSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_E7releaseEv50
_ZNSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_E7releaseEv52
_ZNSt15__uniq_ptr_implIN8bayesnet7SPODELdESt14default_deleteIS1_EE7releaseEv74
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_E7releaseEv94
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_E7releaseEv114
_ZNSt15__uniq_ptr_implIN8bayesnet5SPODEESt14default_deleteIS1_EE7releaseEv412
_ZNSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EE7releaseEv1032
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE7releaseEv13380
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE10_M_deleterEv43464
_ZNSt15__uniq_ptr_implIN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EE10_M_deleterEv0
_ZNSt15__uniq_ptr_implIN5torch8autograd12AutogradMetaESt14default_deleteIS2_EE10_M_deleterEv0
_ZNSt15__uniq_ptr_implIN5torch8autograd15FunctionPreHookESt14default_deleteIS2_EE10_M_deleterEv0
_ZNSt15__uniq_ptr_implIN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EE10_M_deleterEv0
_ZNSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt6thread6_StateESt14default_deleteIS1_EE10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implIN8bayesnet7SPODELdESt14default_deleteIS1_EE10_M_deleterEv74
_ZNSt15__uniq_ptr_implIN8bayesnet5SPODEESt14default_deleteIS1_EE10_M_deleterEv412
_ZNSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EE10_M_deleterEv2838
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE10_M_deleterEv40140
_ZNSt10unique_ptrIN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEC2IS3_vEEDn418844
_ZNSt10unique_ptrIN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EEC1IS4_vEEDn0
_ZNSt10unique_ptrIN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEC2IS3_vEEDn418844
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EEC2Ev432224
_ZNSt15__uniq_ptr_implIN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EEC2Ev0
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EEC2Ev13380
_ZNSt15__uniq_ptr_implIN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEC2Ev418844
_ZNSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EEC2IS3_vEEPS1_1619600
_ZNSt10unique_ptrIN5torch8autograd12AutogradMetaESt14default_deleteIS2_EEC2IS4_vEEPS2_0
_ZNSt10unique_ptrIN8bayesnet7SPODELdESt14default_deleteIS1_EEC2IS3_vEEPS1_74
_ZNSt10unique_ptrIN8bayesnet5SPODEESt14default_deleteIS1_EEC2IS3_vEEPS1_412
_ZNSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EEC2IS3_vEEPS1_13380
_ZNSt10unique_ptrINSt6thread6_StateESt14default_deleteIS1_EEC2IS3_vEEPS1_1605734
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EEC2EPS1_1619600
_ZNSt15__uniq_ptr_implIN5torch8autograd12AutogradMetaESt14default_deleteIS2_EEC2EPS2_0
_ZNSt15__uniq_ptr_implIN8bayesnet7SPODELdESt14default_deleteIS1_EEC2EPS1_74
_ZNSt15__uniq_ptr_implIN8bayesnet5SPODEESt14default_deleteIS1_EEC2EPS1_412
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EEC2EPS1_13380
_ZNSt15__uniq_ptr_implINSt6thread6_StateESt14default_deleteIS1_EEC2EPS1_1605734
_ZNSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EED2Ev2053980
_ZNSt10unique_ptrIN5torch8autograd12AutogradMetaESt14default_deleteIS2_EED2Ev0
_ZNSt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS2_EED2Ev0
_ZNSt10unique_ptrIN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EED2Ev0
_ZNSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_ED2Ev0
_ZNSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_ED2Ev0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev0
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_ED2Ev0
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_ED2Ev0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev2
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev4
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev4
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev10
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev16
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev16
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev16
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev18
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev24
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev26
_ZNSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_ED2Ev50
_ZNSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_ED2Ev52
_ZNSt10unique_ptrIN8bayesnet7SPODELdESt14default_deleteIS1_EED2Ev74
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_ED2Ev94
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_ED2Ev114
_ZNSt10unique_ptrIN8bayesnet5SPODEESt14default_deleteIS1_EED2Ev412
_ZNSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EED2Ev1710
_ZNSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EED2Ev26760
_ZNSt10unique_ptrIN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EED2Ev418844
_ZNSt10unique_ptrINSt6thread6_StateESt14default_deleteIS1_EED2Ev1605734
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE6_M_ptrEv3734878
_ZNSt15__uniq_ptr_implIN5torch8autograd12AutogradMetaESt14default_deleteIS2_EE6_M_ptrEv0
_ZNSt15__uniq_ptr_implIN5torch8autograd15FunctionPreHookESt14default_deleteIS2_EE6_M_ptrEv0
_ZNSt15__uniq_ptr_implIN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EE6_M_ptrEv0
_ZNSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_E6_M_ptrEv0
_ZNSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_E6_M_ptrEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv0
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_E6_M_ptrEv0
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_E6_M_ptrEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv6
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv12
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv12
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv30
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv48
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv48
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv48
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv54
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv72
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv78
_ZNSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_E6_M_ptrEv150
_ZNSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_E6_M_ptrEv156
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv282
_ZNSt15__uniq_ptr_implIN8bayesnet7SPODELdESt14default_deleteIS1_EE6_M_ptrEv296
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_E6_M_ptrEv342
_ZNSt15__uniq_ptr_implIN8bayesnet5SPODEESt14default_deleteIS1_EE6_M_ptrEv1648
_ZNSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EE6_M_ptrEv7624
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE6_M_ptrEv93660
_ZNSt15__uniq_ptr_implIN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EE6_M_ptrEv418844
_ZNSt15__uniq_ptr_implINSt6thread6_StateESt14default_deleteIS1_EE6_M_ptrEv3211468
_ZNKSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EEptEv31945502
_ZNKSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EEptEv2520
_ZNKSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EEptEv31942982
_ZNKSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EE3getEv31996304
_ZNKSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_E3getEv0
_ZNKSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_E3getEv0
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_E3getEv0
_ZNKSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_E3getEv0
_ZNKSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_E3getEv0
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_E3getEv4
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_E3getEv8
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_E3getEv8
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_E3getEv20
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_E3getEv32
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_E3getEv32
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_E3getEv32
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_E3getEv36
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_E3getEv48
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_E3getEv52
_ZNKSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_E3getEv100
_ZNKSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_E3getEv104
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_E3getEv188
_ZNKSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_E3getEv228
_ZNKSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EE3getEv2520
_ZNKSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EE3getEv31992892
_ZNKSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE6_M_ptrEv31996304
_ZNKSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_E6_M_ptrEv0
_ZNKSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_E6_M_ptrEv0
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv0
_ZNKSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_E6_M_ptrEv0
_ZNKSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_E6_M_ptrEv0
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv4
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv8
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv8
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv20
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv32
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv32
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv32
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv36
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv48
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv52
_ZNKSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_E6_M_ptrEv100
_ZNKSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_E6_M_ptrEv104
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv188
_ZNKSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_E6_M_ptrEv228
_ZNKSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EE6_M_ptrEv2520
_ZNKSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE6_M_ptrEv31992892
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/unique_ptr.h.func.html b/html/usr/include/c++/13/bits/unique_ptr.h.func.html new file mode 100644 index 0000000..d89574a --- /dev/null +++ b/html/usr/include/c++/13/bits/unique_ptr.h.func.html @@ -0,0 +1,2574 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/unique_ptr.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - unique_ptr.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:98.7 %7675
Test Date:2024-04-30 13:17:26Functions:63.6 %332211
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EE3getEv31996304
_ZNKSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EE3getEv2520
_ZNKSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EE3getEv31992892
_ZNKSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_E3getEv0
_ZNKSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_E3getEv0
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_E3getEv52
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_E3getEv32
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_E3getEv48
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_E3getEv8
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_E3getEv36
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_E3getEv8
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_E3getEv0
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_E3getEv4
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_E3getEv20
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_E3getEv32
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_E3getEv32
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_E3getEv188
_ZNKSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_E3getEv100
_ZNKSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_E3getEv104
_ZNKSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_E3getEv0
_ZNKSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_E3getEv228
_ZNKSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_E3getEv0
_ZNKSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EEdeEv10
_ZNKSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EEptEv31945502
_ZNKSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EEptEv2520
_ZNKSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EEptEv31942982
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_EcvbEv446
_ZNKSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_EcvbEv0
_ZNKSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_EcvbEv0
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv26
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv16
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv24
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv4
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv18
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv4
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv0
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv2
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv10
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv16
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_EcvbEv16
_ZNKSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_EcvbEv94
_ZNKSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_EcvbEv50
_ZNKSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_EcvbEv52
_ZNKSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_EcvbEv0
_ZNKSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_EcvbEv114
_ZNKSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_EcvbEv0
_ZNKSt14default_deleteIN8bayesnet4NodeEEclEPS1_13866
_ZNKSt14default_deleteIN3c1021AutogradMetaInterfaceEEclEPS1_0
_ZNKSt14default_deleteIN5torch8autograd12AutogradMetaEEclEPS2_0
_ZNKSt14default_deleteIN5torch8autograd15FunctionPreHookEEclEPS2_0
_ZNKSt14default_deleteIN5torch8autograd22PostAccumulateGradHookEEclEPS2_0
_ZNKSt14default_deleteIN8bayesnet10ClassifierEEclEPS1_486
_ZNKSt14default_deleteIN8bayesnet4NodeEEclEPS1_13380
_ZNKSt14default_deleteIN8bayesnet5SPODEEEclEPS1_0
_ZNKSt14default_deleteIN8bayesnet7SPODELdEEclEPS1_0
_ZNKSt14default_deleteINSt6thread6_StateEEclEPS1_0
_ZNKSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE6_M_ptrEv31996304
_ZNKSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EE6_M_ptrEv2520
_ZNKSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE6_M_ptrEv31992892
_ZNKSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_E6_M_ptrEv0
_ZNKSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_E6_M_ptrEv0
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv52
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv32
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv48
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv8
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv36
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv8
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv0
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv4
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv20
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv32
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv32
_ZNKSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv188
_ZNKSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_E6_M_ptrEv100
_ZNKSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_E6_M_ptrEv104
_ZNKSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_E6_M_ptrEv0
_ZNKSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_E6_M_ptrEv228
_ZNKSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_E6_M_ptrEv0
_ZNSt10unique_ptrIN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEC2IS3_vEEDn418844
_ZNSt10unique_ptrIN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEC2IS3_vEEDn418844
_ZNSt10unique_ptrIN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EEC1IS4_vEEDn0
_ZNSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EE5resetEPS1_288
_ZNSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EEC2EOS4_1210
_ZNSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EEC2INS0_5SPODEES2_IS6_EvEEOS_IT_T0_E198
_ZNSt10unique_ptrIN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEC2IN5torch8autograd12AutogradMetaES2_IS8_EvEEOS_IT_T0_E0
_ZNSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EEC2INS0_5SPODEES2_IS6_EvEEOS_IT_T0_E124
_ZNSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EEC2INS0_7SPODELdES2_IS6_EvEEOS_IT_T0_E74
_ZNSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EEaSINS0_5SPODEES2_IS6_EEENSt9enable_ifIXsrSt6__and_IJS9_IJSt14is_convertibleINS_IT_T0_E7pointerEPS1_ESt6__not_ISt8is_arrayISB_EEEESt13is_assignableIRS3_OSC_EEE5valueERS4_E4typeEOSD_288
_ZNSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EE11get_deleterEv14640
_ZNSt10unique_ptrIN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EE11get_deleterEv0
_ZNSt10unique_ptrIN5torch8autograd12AutogradMetaESt14default_deleteIS2_EE11get_deleterEv0
_ZNSt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS2_EE11get_deleterEv0
_ZNSt10unique_ptrIN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EE11get_deleterEv0
_ZNSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EE11get_deleterEv774
_ZNSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EE11get_deleterEv13380
_ZNSt10unique_ptrIN8bayesnet5SPODEESt14default_deleteIS1_EE11get_deleterEv412
_ZNSt10unique_ptrIN8bayesnet7SPODELdESt14default_deleteIS1_EE11get_deleterEv74
_ZNSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_E11get_deleterEv0
_ZNSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt6thread6_StateESt14default_deleteIS1_EE11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_E11get_deleterEv0
_ZNSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_E11get_deleterEv0
_ZNSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_E11get_deleterEv0
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_E11get_deleterEv0
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_E11get_deleterEv0
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_E11get_deleterEv0
_ZNSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EEC2IS3_vEEPS1_1619600
_ZNSt10unique_ptrIN5torch8autograd12AutogradMetaESt14default_deleteIS2_EEC2IS4_vEEPS2_0
_ZNSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EEC2IS3_vEEPS1_13380
_ZNSt10unique_ptrIN8bayesnet5SPODEESt14default_deleteIS1_EEC2IS3_vEEPS1_412
_ZNSt10unique_ptrIN8bayesnet7SPODELdESt14default_deleteIS1_EEC2IS3_vEEPS1_74
_ZNSt10unique_ptrINSt6thread6_StateESt14default_deleteIS1_EEC2IS3_vEEPS1_1605734
_ZNSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EEC2IS3_vEEv13380
_ZNSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EED2Ev2053980
_ZNSt10unique_ptrIN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EED2Ev418844
_ZNSt10unique_ptrIN5torch8autograd12AutogradMetaESt14default_deleteIS2_EED2Ev0
_ZNSt10unique_ptrIN5torch8autograd15FunctionPreHookESt14default_deleteIS2_EED2Ev0
_ZNSt10unique_ptrIN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EED2Ev0
_ZNSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EED2Ev1710
_ZNSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EED2Ev26760
_ZNSt10unique_ptrIN8bayesnet5SPODEESt14default_deleteIS1_EED2Ev412
_ZNSt10unique_ptrIN8bayesnet7SPODELdESt14default_deleteIS1_EED2Ev74
_ZNSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_ED2Ev0
_ZNSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_ED2Ev0
_ZNSt10unique_ptrINSt6thread6_StateESt14default_deleteIS1_EED2Ev1605734
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev26
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev16
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev24
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev4
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev18
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev4
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev2
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev10
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev16
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_ED2Ev16
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_ED2Ev94
_ZNSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_ED2Ev50
_ZNSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_ED2Ev52
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_ED2Ev0
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_ED2Ev114
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_ED2Ev0
_ZNSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EEaSEOS4_14412
_ZNSt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS1_EEaSEOS4_1032
_ZNSt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS1_EEaSEOS4_13380
_ZNSt10unique_ptrIN8bayesnet5SPODEESt14default_deleteIS1_EE7releaseEv932
_ZNSt10unique_ptrIN5torch8autograd12AutogradMetaESt14default_deleteIS2_EE7releaseEv0
_ZNSt10unique_ptrIN8bayesnet5SPODEESt14default_deleteIS1_EE7releaseEv412
_ZNSt10unique_ptrIN8bayesnet7SPODELdESt14default_deleteIS1_EE7releaseEv74
_ZNSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_E7releaseEv0
_ZNSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_E7releaseEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv26
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv16
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv24
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv4
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv18
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv4
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv2
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv10
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv16
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv16
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_E7releaseEv94
_ZNSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_E7releaseEv50
_ZNSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_E7releaseEv52
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_E7releaseEv0
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_E7releaseEv114
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_E7releaseEv0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_EC2ISO_vEESN_RKSO_446
_ZNSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_EC2ISO_vEESN_RKSO_0
_ZNSt10unique_ptrIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_EC2ISQ_vEESP_RKSQ_0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_26
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_16
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_24
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_4
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_18
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_4
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_0
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_2
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_10
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_16
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_EC2ISP_vEESO_RKSP_16
_ZNSt10unique_ptrINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_EC2ISO_vEESN_RKSO_94
_ZNSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_EC2IST_vEESS_RKST_50
_ZNSt10unique_ptrISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_EC2ISV_vEESU_RKSV_52
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_EC2ISO_vEESN_RKSO_0
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_EC2IST_vEESS_RKST_114
_ZNSt10unique_ptrISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_EC2ISQ_vEESP_RKSQ_0
_ZNSt14default_deleteIN8bayesnet10ClassifierEEC2INS0_5SPODEEvEERKS_IT_E486
_ZNSt14default_deleteIN3c1021AutogradMetaInterfaceEEC2IN5torch8autograd12AutogradMetaEvEERKS_IT_E0
_ZNSt14default_deleteIN8bayesnet10ClassifierEEC2INS0_5SPODEEvEERKS_IT_E412
_ZNSt14default_deleteIN8bayesnet10ClassifierEEC2INS0_7SPODELdEvEERKS_IT_E74
_ZNSt15__uniq_ptr_dataIN8bayesnet10ClassifierESt14default_deleteIS1_ELb1ELb1EEC2EOS4_1210
_ZNSt15__uniq_ptr_dataIN8bayesnet4NodeESt14default_deleteIS1_ELb1ELb1EEaSEOS4_14412
_ZNSt15__uniq_ptr_dataIN8bayesnet10ClassifierESt14default_deleteIS1_ELb1ELb1EEaSEOS4_1032
_ZNSt15__uniq_ptr_dataIN8bayesnet4NodeESt14default_deleteIS1_ELb1ELb1EEaSEOS4_13380
_ZNSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EEC2EOS4_1210
_ZNSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EEC2IS2_INS0_5SPODEEEEEPS1_OT_644
_ZNSt15__uniq_ptr_implIN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEC2IS2_IN5torch8autograd12AutogradMetaEEEEPS1_OT_0
_ZNSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EEC2IS2_INS0_5SPODEEEEEPS1_OT_124
_ZNSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EEC2IS2_INS0_7SPODELdEEEEPS1_OT_74
_ZNSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_EC2IRKSO_EESN_OSI_0
_ZNSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_EC2IRKSQ_EESP_OSK_0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_26
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_16
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_24
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_4
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_18
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_4
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_2
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_10
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_16
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_EC2IRKSP_EESO_OSJ_16
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_EC2IRKSO_EESN_OSI_94
_ZNSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_EC2IRKST_EESS_OSN_50
_ZNSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_EC2IRKSV_EESU_OSP_52
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_EC2IRKSO_EESN_OSI_0
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_EC2IRKST_EESS_OSN_114
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_EC2IRKSQ_EESP_OSK_0
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE10_M_deleterEv43464
_ZNSt15__uniq_ptr_implIN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EE10_M_deleterEv0
_ZNSt15__uniq_ptr_implIN5torch8autograd12AutogradMetaESt14default_deleteIS2_EE10_M_deleterEv0
_ZNSt15__uniq_ptr_implIN5torch8autograd15FunctionPreHookESt14default_deleteIS2_EE10_M_deleterEv0
_ZNSt15__uniq_ptr_implIN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EE10_M_deleterEv0
_ZNSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EE10_M_deleterEv2838
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE10_M_deleterEv40140
_ZNSt15__uniq_ptr_implIN8bayesnet5SPODEESt14default_deleteIS1_EE10_M_deleterEv412
_ZNSt15__uniq_ptr_implIN8bayesnet7SPODELdESt14default_deleteIS1_EE10_M_deleterEv74
_ZNSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt6thread6_StateESt14default_deleteIS1_EE10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_E10_M_deleterEv0
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE5resetEPS1_14700
_ZNSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EE5resetEPS1_1320
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE5resetEPS1_13380
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE6_M_ptrEv3734878
_ZNSt15__uniq_ptr_implIN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EE6_M_ptrEv418844
_ZNSt15__uniq_ptr_implIN5torch8autograd12AutogradMetaESt14default_deleteIS2_EE6_M_ptrEv0
_ZNSt15__uniq_ptr_implIN5torch8autograd15FunctionPreHookESt14default_deleteIS2_EE6_M_ptrEv0
_ZNSt15__uniq_ptr_implIN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EE6_M_ptrEv0
_ZNSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EE6_M_ptrEv7624
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE6_M_ptrEv93660
_ZNSt15__uniq_ptr_implIN8bayesnet5SPODEESt14default_deleteIS1_EE6_M_ptrEv1648
_ZNSt15__uniq_ptr_implIN8bayesnet7SPODELdESt14default_deleteIS1_EE6_M_ptrEv296
_ZNSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_E6_M_ptrEv0
_ZNSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_E6_M_ptrEv0
_ZNSt15__uniq_ptr_implINSt6thread6_StateESt14default_deleteIS1_EE6_M_ptrEv3211468
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv78
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv48
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv72
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv12
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv54
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv12
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv6
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv30
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv48
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv48
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_E6_M_ptrEv282
_ZNSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_E6_M_ptrEv150
_ZNSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_E6_M_ptrEv156
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_E6_M_ptrEv0
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_E6_M_ptrEv342
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_E6_M_ptrEv0
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE7releaseEv15344
_ZNSt15__uniq_ptr_implIN5torch8autograd12AutogradMetaESt14default_deleteIS2_EE7releaseEv0
_ZNSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EE7releaseEv1032
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EE7releaseEv13380
_ZNSt15__uniq_ptr_implIN8bayesnet5SPODEESt14default_deleteIS1_EE7releaseEv412
_ZNSt15__uniq_ptr_implIN8bayesnet7SPODELdESt14default_deleteIS1_EE7releaseEv74
_ZNSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_E7releaseEv0
_ZNSt15__uniq_ptr_implIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_E7releaseEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv26
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv16
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv24
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv4
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv18
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv4
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv0
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv2
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv10
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv16
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_E7releaseEv16
_ZNSt15__uniq_ptr_implINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_E7releaseEv94
_ZNSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_E7releaseEv50
_ZNSt15__uniq_ptr_implISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_E7releaseEv52
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_E7releaseEv0
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_E7releaseEv114
_ZNSt15__uniq_ptr_implISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_E7releaseEv0
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EEC2EPS1_1619600
_ZNSt15__uniq_ptr_implIN5torch8autograd12AutogradMetaESt14default_deleteIS2_EEC2EPS2_0
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EEC2EPS1_13380
_ZNSt15__uniq_ptr_implIN8bayesnet5SPODEESt14default_deleteIS1_EEC2EPS1_412
_ZNSt15__uniq_ptr_implIN8bayesnet7SPODELdESt14default_deleteIS1_EEC2EPS1_74
_ZNSt15__uniq_ptr_implINSt6thread6_StateESt14default_deleteIS1_EEC2EPS1_1605734
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EEC2Ev432224
_ZNSt15__uniq_ptr_implIN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEC2Ev418844
_ZNSt15__uniq_ptr_implIN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EEC2Ev0
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EEC2Ev13380
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EEaSEOS4_14412
_ZNSt15__uniq_ptr_implIN8bayesnet10ClassifierESt14default_deleteIS1_EEaSEOS4_1032
_ZNSt15__uniq_ptr_implIN8bayesnet4NodeESt14default_deleteIS1_EEaSEOS4_13380
_ZSt11make_uniqueIN8bayesnet5SPODEEJRiEENSt8__detail9_MakeUniqIT_E15__single_objectEDpOT0_13866
_ZSt11make_uniqueIN5torch8autograd12AutogradMetaEJPN3c1010TensorImplERbEENSt8__detail9_MakeUniqIT_E15__single_objectEDpOT0_0
_ZSt11make_uniqueIN8bayesnet4NodeEJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEENSt8__detail9_MakeUniqIT_E15__single_objectEDpOT0_13370
_ZSt11make_uniqueIN8bayesnet4NodeEJRS1_EENSt8__detail9_MakeUniqIT_E15__single_objectEDpOT0_10
_ZSt11make_uniqueIN8bayesnet5SPODEEJRKiEENSt8__detail9_MakeUniqIT_E15__single_objectEDpOT0_42
_ZSt11make_uniqueIN8bayesnet5SPODEEJRiEENSt8__detail9_MakeUniqIT_E15__single_objectEDpOT0_370
_ZSt11make_uniqueIN8bayesnet7SPODELdEJRiEENSt8__detail9_MakeUniqIT_E15__single_objectEDpOT0_74
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISI_T0_EDn446
_ZStneIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlPS6_E_EbRKSt10unique_ptrISI_T0_EDn0
_ZStneIN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlPS6_E_EbRKSt10unique_ptrISK_T0_EDn0
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn26
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn16
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn24
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn4
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn18
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn4
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn0
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn2
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn10
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn16
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISJ_T0_EDn16
_ZStneINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS7_14adl_serializerESA_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlPS5_E_EbRKSt10unique_ptrISI_T0_EDn94
_ZStneISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlPSL_E_EbRKSt10unique_ptrISN_T0_EDn50
_ZStneISt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlPSL_E_EbRKSt10unique_ptrISP_T0_EDn52
_ZStneISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlPSG_E_EbRKSt10unique_ptrISI_T0_EDn0
_ZStneISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSG_E_EbRKSt10unique_ptrISN_T0_EDn114
_ZStneISt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlPSG_E_EbRKSt10unique_ptrISK_T0_EDn0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/unique_ptr.h.gcov.html b/html/usr/include/c++/13/bits/unique_ptr.h.gcov.html new file mode 100644 index 0000000..ccdd961 --- /dev/null +++ b/html/usr/include/c++/13/bits/unique_ptr.h.gcov.html @@ -0,0 +1,1246 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/unique_ptr.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - unique_ptr.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:98.7 %7675
Test Date:2024-04-30 13:17:26Functions:63.6 %332211
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // unique_ptr implementation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2008-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/unique_ptr.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{memory}
+      28              :  */
+      29              : 
+      30              : #ifndef _UNIQUE_PTR_H
+      31              : #define _UNIQUE_PTR_H 1
+      32              : 
+      33              : #include <bits/c++config.h>
+      34              : #include <debug/assertions.h>
+      35              : #include <type_traits>
+      36              : #include <tuple>
+      37              : #include <bits/stl_function.h>
+      38              : #include <bits/functional_hash.h>
+      39              : #if __cplusplus >= 202002L
+      40              : # include <compare>
+      41              : # if _GLIBCXX_HOSTED
+      42              : #  include <ostream>
+      43              : # endif
+      44              : #endif
+      45              : 
+      46              : /* Duplicate definition with ptr_traits.h.  */
+      47              : #if __cplusplus > 202002L && defined(__cpp_constexpr_dynamic_alloc)
+      48              : # define __cpp_lib_constexpr_memory 202202L
+      49              : #elif __cplusplus > 201703L
+      50              : # define __cpp_lib_constexpr_memory 201811L
+      51              : #endif
+      52              : 
+      53              : namespace std _GLIBCXX_VISIBILITY(default)
+      54              : {
+      55              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      56              : 
+      57              :   /**
+      58              :    * @addtogroup pointer_abstractions
+      59              :    * @{
+      60              :    */
+      61              : 
+      62              : #if _GLIBCXX_USE_DEPRECATED
+      63              : #pragma GCC diagnostic push
+      64              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+      65              :   template<typename> class auto_ptr;
+      66              : #pragma GCC diagnostic pop
+      67              : #endif
+      68              : 
+      69              :   /** Primary template of default_delete, used by unique_ptr for single objects
+      70              :    *
+      71              :    * @headerfile memory
+      72              :    * @since C++11
+      73              :    */
+      74              :   template<typename _Tp>
+      75              :     struct default_delete
+      76              :     {
+      77              :       /// Default constructor
+      78              :       constexpr default_delete() noexcept = default;
+      79              : 
+      80              :       /** @brief Converting constructor.
+      81              :        *
+      82              :        * Allows conversion from a deleter for objects of another type, `_Up`,
+      83              :        * only if `_Up*` is convertible to `_Tp*`.
+      84              :        */
+      85              :       template<typename _Up,
+      86              :                typename = _Require<is_convertible<_Up*, _Tp*>>>
+      87              :         _GLIBCXX23_CONSTEXPR
+      88          486 :         default_delete(const default_delete<_Up>&) noexcept { }
+      89              : 
+      90              :       /// Calls `delete __ptr`
+      91              :       _GLIBCXX23_CONSTEXPR
+      92              :       void
+      93        13866 :       operator()(_Tp* __ptr) const
+      94              :       {
+      95              :         static_assert(!is_void<_Tp>::value,
+      96              :                       "can't delete pointer to incomplete type");
+      97              :         static_assert(sizeof(_Tp)>0,
+      98              :                       "can't delete pointer to incomplete type");
+      99        13866 :         delete __ptr;
+     100        13866 :       }
+     101              :     };
+     102              : 
+     103              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     104              :   // DR 740 - omit specialization for array objects with a compile time length
+     105              : 
+     106              :   /** Specialization of default_delete for arrays, used by `unique_ptr<T[]>`
+     107              :    *
+     108              :    * @headerfile memory
+     109              :    * @since C++11
+     110              :    */
+     111              :   template<typename _Tp>
+     112              :     struct default_delete<_Tp[]>
+     113              :     {
+     114              :     public:
+     115              :       /// Default constructor
+     116              :       constexpr default_delete() noexcept = default;
+     117              : 
+     118              :       /** @brief Converting constructor.
+     119              :        *
+     120              :        * Allows conversion from a deleter for arrays of another type, such as
+     121              :        * a const-qualified version of `_Tp`.
+     122              :        *
+     123              :        * Conversions from types derived from `_Tp` are not allowed because
+     124              :        * it is undefined to `delete[]` an array of derived types through a
+     125              :        * pointer to the base type.
+     126              :        */
+     127              :       template<typename _Up,
+     128              :                typename = _Require<is_convertible<_Up(*)[], _Tp(*)[]>>>
+     129              :         _GLIBCXX23_CONSTEXPR
+     130              :         default_delete(const default_delete<_Up[]>&) noexcept { }
+     131              : 
+     132              :       /// Calls `delete[] __ptr`
+     133              :       template<typename _Up>
+     134              :         _GLIBCXX23_CONSTEXPR
+     135              :         typename enable_if<is_convertible<_Up(*)[], _Tp(*)[]>::value>::type
+     136              :         operator()(_Up* __ptr) const
+     137              :         {
+     138              :           static_assert(sizeof(_Tp)>0,
+     139              :                         "can't delete pointer to incomplete type");
+     140              :           delete [] __ptr;
+     141              :         }
+     142              :     };
+     143              : 
+     144              :   /// @cond undocumented
+     145              : 
+     146              :   // Manages the pointer and deleter of a unique_ptr
+     147              :   template <typename _Tp, typename _Dp>
+     148              :     class __uniq_ptr_impl
+     149              :     {
+     150              :       template <typename _Up, typename _Ep, typename = void>
+     151              :         struct _Ptr
+     152              :         {
+     153              :           using type = _Up*;
+     154              :         };
+     155              : 
+     156              :       template <typename _Up, typename _Ep>
+     157              :         struct
+     158              :         _Ptr<_Up, _Ep, __void_t<typename remove_reference<_Ep>::type::pointer>>
+     159              :         {
+     160              :           using type = typename remove_reference<_Ep>::type::pointer;
+     161              :         };
+     162              : 
+     163              :     public:
+     164              :       using _DeleterConstraint = enable_if<
+     165              :         __and_<__not_<is_pointer<_Dp>>,
+     166              :                is_default_constructible<_Dp>>::value>;
+     167              : 
+     168              :       using pointer = typename _Ptr<_Tp, _Dp>::type;
+     169              : 
+     170              :       static_assert( !is_rvalue_reference<_Dp>::value,
+     171              :                      "unique_ptr's deleter type must be a function object type"
+     172              :                      " or an lvalue reference type" );
+     173              : 
+     174       432224 :       __uniq_ptr_impl() = default;
+     175              :       _GLIBCXX23_CONSTEXPR
+     176      1619600 :       __uniq_ptr_impl(pointer __p) : _M_t() { _M_ptr() = __p; }
+     177              : 
+     178              :       template<typename _Del>
+     179              :         _GLIBCXX23_CONSTEXPR
+     180          644 :         __uniq_ptr_impl(pointer __p, _Del&& __d)
+     181          644 :         : _M_t(__p, std::forward<_Del>(__d)) { }
+     182              : 
+     183              :       _GLIBCXX23_CONSTEXPR
+     184         1210 :       __uniq_ptr_impl(__uniq_ptr_impl&& __u) noexcept
+     185         1210 :       : _M_t(std::move(__u._M_t))
+     186         1210 :       { __u._M_ptr() = nullptr; }
+     187              : 
+     188              :       _GLIBCXX23_CONSTEXPR
+     189        14412 :       __uniq_ptr_impl& operator=(__uniq_ptr_impl&& __u) noexcept
+     190              :       {
+     191        14412 :         reset(__u.release());
+     192        14412 :         _M_deleter() = std::forward<_Dp>(__u._M_deleter());
+     193        14412 :         return *this;
+     194              :       }
+     195              : 
+     196              :       _GLIBCXX23_CONSTEXPR
+     197      3734878 :       pointer&   _M_ptr() noexcept { return std::get<0>(_M_t); }
+     198              :       _GLIBCXX23_CONSTEXPR
+     199     31996304 :       pointer    _M_ptr() const noexcept { return std::get<0>(_M_t); }
+     200              :       _GLIBCXX23_CONSTEXPR
+     201        43464 :       _Dp&       _M_deleter() noexcept { return std::get<1>(_M_t); }
+     202              :       _GLIBCXX23_CONSTEXPR
+     203              :       const _Dp& _M_deleter() const noexcept { return std::get<1>(_M_t); }
+     204              : 
+     205              :       _GLIBCXX23_CONSTEXPR
+     206        14700 :       void reset(pointer __p) noexcept
+     207              :       {
+     208        14700 :         const pointer __old_p = _M_ptr();
+     209        14700 :         _M_ptr() = __p;
+     210        14700 :         if (__old_p)
+     211            0 :           _M_deleter()(__old_p);
+     212        14700 :       }
+     213              : 
+     214              :       _GLIBCXX23_CONSTEXPR
+     215        15344 :       pointer release() noexcept
+     216              :       {
+     217        15344 :         pointer __p = _M_ptr();
+     218        15344 :         _M_ptr() = nullptr;
+     219        15344 :         return __p;
+     220              :       }
+     221              : 
+     222              :       _GLIBCXX23_CONSTEXPR
+     223              :       void
+     224              :       swap(__uniq_ptr_impl& __rhs) noexcept
+     225              :       {
+     226              :         using std::swap;
+     227              :         swap(this->_M_ptr(), __rhs._M_ptr());
+     228              :         swap(this->_M_deleter(), __rhs._M_deleter());
+     229              :       }
+     230              : 
+     231              :     private:
+     232              :       tuple<pointer, _Dp> _M_t;
+     233              :     };
+     234              : 
+     235              :   // Defines move construction + assignment as either defaulted or deleted.
+     236              :   template <typename _Tp, typename _Dp,
+     237              :             bool = is_move_constructible<_Dp>::value,
+     238              :             bool = is_move_assignable<_Dp>::value>
+     239              :     struct __uniq_ptr_data : __uniq_ptr_impl<_Tp, _Dp>
+     240              :     {
+     241              :       using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl;
+     242         1210 :       __uniq_ptr_data(__uniq_ptr_data&&) = default;
+     243        14412 :       __uniq_ptr_data& operator=(__uniq_ptr_data&&) = default;
+     244              :     };
+     245              : 
+     246              :   template <typename _Tp, typename _Dp>
+     247              :     struct __uniq_ptr_data<_Tp, _Dp, true, false> : __uniq_ptr_impl<_Tp, _Dp>
+     248              :     {
+     249              :       using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl;
+     250              :       __uniq_ptr_data(__uniq_ptr_data&&) = default;
+     251              :       __uniq_ptr_data& operator=(__uniq_ptr_data&&) = delete;
+     252              :     };
+     253              : 
+     254              :   template <typename _Tp, typename _Dp>
+     255              :     struct __uniq_ptr_data<_Tp, _Dp, false, true> : __uniq_ptr_impl<_Tp, _Dp>
+     256              :     {
+     257              :       using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl;
+     258              :       __uniq_ptr_data(__uniq_ptr_data&&) = delete;
+     259              :       __uniq_ptr_data& operator=(__uniq_ptr_data&&) = default;
+     260              :     };
+     261              : 
+     262              :   template <typename _Tp, typename _Dp>
+     263              :     struct __uniq_ptr_data<_Tp, _Dp, false, false> : __uniq_ptr_impl<_Tp, _Dp>
+     264              :     {
+     265              :       using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl;
+     266              :       __uniq_ptr_data(__uniq_ptr_data&&) = delete;
+     267              :       __uniq_ptr_data& operator=(__uniq_ptr_data&&) = delete;
+     268              :     };
+     269              :   /// @endcond
+     270              : 
+     271              :   // 20.7.1.2 unique_ptr for single objects.
+     272              : 
+     273              :   /// A move-only smart pointer that manages unique ownership of a resource.
+     274              :   /// @headerfile memory
+     275              :   /// @since C++11
+     276              :   template <typename _Tp, typename _Dp = default_delete<_Tp>>
+     277              :     class unique_ptr
+     278              :     {
+     279              :       template <typename _Up>
+     280              :         using _DeleterConstraint =
+     281              :           typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type;
+     282              : 
+     283              :       __uniq_ptr_data<_Tp, _Dp> _M_t;
+     284              : 
+     285              :     public:
+     286              :       using pointer       = typename __uniq_ptr_impl<_Tp, _Dp>::pointer;
+     287              :       using element_type  = _Tp;
+     288              :       using deleter_type  = _Dp;
+     289              : 
+     290              :     private:
+     291              :       // helper template for detecting a safe conversion from another
+     292              :       // unique_ptr
+     293              :       template<typename _Up, typename _Ep>
+     294              :         using __safe_conversion_up = __and_<
+     295              :           is_convertible<typename unique_ptr<_Up, _Ep>::pointer, pointer>,
+     296              :           __not_<is_array<_Up>>
+     297              :         >;
+     298              : 
+     299              :     public:
+     300              :       // Constructors.
+     301              : 
+     302              :       /// Default constructor, creates a unique_ptr that owns nothing.
+     303              :       template<typename _Del = _Dp, typename = _DeleterConstraint<_Del>>
+     304        13380 :         constexpr unique_ptr() noexcept
+     305        13380 :         : _M_t()
+     306        13380 :         { }
+     307              : 
+     308              :       /** Takes ownership of a pointer.
+     309              :        *
+     310              :        * @param __p  A pointer to an object of @c element_type
+     311              :        *
+     312              :        * The deleter will be value-initialized.
+     313              :        */
+     314              :       template<typename _Del = _Dp, typename = _DeleterConstraint<_Del>>
+     315              :         _GLIBCXX23_CONSTEXPR
+     316              :         explicit
+     317      1619600 :         unique_ptr(pointer __p) noexcept
+     318      1619600 :         : _M_t(__p)
+     319      1619600 :         { }
+     320              : 
+     321              :       /** Takes ownership of a pointer.
+     322              :        *
+     323              :        * @param __p  A pointer to an object of @c element_type
+     324              :        * @param __d  A reference to a deleter.
+     325              :        *
+     326              :        * The deleter will be initialized with @p __d
+     327              :        */
+     328              :       template<typename _Del = deleter_type,
+     329              :                typename = _Require<is_copy_constructible<_Del>>>
+     330              :         _GLIBCXX23_CONSTEXPR
+     331          446 :         unique_ptr(pointer __p, const deleter_type& __d) noexcept
+     332          446 :         : _M_t(__p, __d) { }
+     333              : 
+     334              :       /** Takes ownership of a pointer.
+     335              :        *
+     336              :        * @param __p  A pointer to an object of @c element_type
+     337              :        * @param __d  An rvalue reference to a (non-reference) deleter.
+     338              :        *
+     339              :        * The deleter will be initialized with @p std::move(__d)
+     340              :        */
+     341              :       template<typename _Del = deleter_type,
+     342              :                typename = _Require<is_move_constructible<_Del>>>
+     343              :         _GLIBCXX23_CONSTEXPR
+     344              :         unique_ptr(pointer __p,
+     345              :                    __enable_if_t<!is_lvalue_reference<_Del>::value,
+     346              :                                  _Del&&> __d) noexcept
+     347              :         : _M_t(__p, std::move(__d))
+     348              :         { }
+     349              : 
+     350              :       template<typename _Del = deleter_type,
+     351              :                typename _DelUnref = typename remove_reference<_Del>::type>
+     352              :         _GLIBCXX23_CONSTEXPR
+     353              :         unique_ptr(pointer,
+     354              :                    __enable_if_t<is_lvalue_reference<_Del>::value,
+     355              :                                  _DelUnref&&>) = delete;
+     356              : 
+     357              :       /// Creates a unique_ptr that owns nothing.
+     358              :       template<typename _Del = _Dp, typename = _DeleterConstraint<_Del>>
+     359       418844 :         constexpr unique_ptr(nullptr_t) noexcept
+     360       418844 :         : _M_t()
+     361       418844 :         { }
+     362              : 
+     363              :       // Move constructors.
+     364              : 
+     365              :       /// Move constructor.
+     366         1210 :       unique_ptr(unique_ptr&&) = default;
+     367              : 
+     368              :       /** @brief Converting constructor from another type
+     369              :        *
+     370              :        * Requires that the pointer owned by @p __u is convertible to the
+     371              :        * type of pointer owned by this object, @p __u does not own an array,
+     372              :        * and @p __u has a compatible deleter type.
+     373              :        */
+     374              :       template<typename _Up, typename _Ep, typename = _Require<
+     375              :                __safe_conversion_up<_Up, _Ep>,
+     376              :                __conditional_t<is_reference<_Dp>::value,
+     377              :                                is_same<_Ep, _Dp>,
+     378              :                                is_convertible<_Ep, _Dp>>>>
+     379              :         _GLIBCXX23_CONSTEXPR
+     380          198 :         unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
+     381          198 :         : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter()))
+     382          198 :         { }
+     383              : 
+     384              : #if _GLIBCXX_USE_DEPRECATED
+     385              : #pragma GCC diagnostic push
+     386              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+     387              :       /// Converting constructor from @c auto_ptr
+     388              :       template<typename _Up, typename = _Require<
+     389              :                is_convertible<_Up*, _Tp*>, is_same<_Dp, default_delete<_Tp>>>>
+     390              :         unique_ptr(auto_ptr<_Up>&& __u) noexcept;
+     391              : #pragma GCC diagnostic pop
+     392              : #endif
+     393              : 
+     394              :       /// Destructor, invokes the deleter if the stored pointer is not null.
+     395              : #if __cplusplus > 202002L && __cpp_constexpr_dynamic_alloc
+     396              :       constexpr
+     397              : #endif
+     398      2053980 :       ~unique_ptr() noexcept
+     399              :       {
+     400              :         static_assert(__is_invocable<deleter_type&, pointer>::value,
+     401              :                       "unique_ptr's deleter must be invocable with a pointer");
+     402      2053980 :         auto& __ptr = _M_t._M_ptr();
+     403      2053980 :         if (__ptr != nullptr)
+     404        13866 :           get_deleter()(std::move(__ptr));
+     405      2053980 :         __ptr = pointer();
+     406      2053980 :       }
+     407              : 
+     408              :       // Assignment.
+     409              : 
+     410              :       /** @brief Move assignment operator.
+     411              :        *
+     412              :        * Invokes the deleter if this object owns a pointer.
+     413              :        */
+     414        14412 :       unique_ptr& operator=(unique_ptr&&) = default;
+     415              : 
+     416              :       /** @brief Assignment from another type.
+     417              :        *
+     418              :        * @param __u  The object to transfer ownership from, which owns a
+     419              :        *             convertible pointer to a non-array object.
+     420              :        *
+     421              :        * Invokes the deleter if this object owns a pointer.
+     422              :        */
+     423              :       template<typename _Up, typename _Ep>
+     424              :         _GLIBCXX23_CONSTEXPR
+     425              :         typename enable_if< __and_<
+     426              :           __safe_conversion_up<_Up, _Ep>,
+     427              :           is_assignable<deleter_type&, _Ep&&>
+     428              :           >::value,
+     429              :           unique_ptr&>::type
+     430          288 :         operator=(unique_ptr<_Up, _Ep>&& __u) noexcept
+     431              :         {
+     432          288 :           reset(__u.release());
+     433          288 :           get_deleter() = std::forward<_Ep>(__u.get_deleter());
+     434          288 :           return *this;
+     435              :         }
+     436              : 
+     437              :       /// Reset the %unique_ptr to empty, invoking the deleter if necessary.
+     438              :       _GLIBCXX23_CONSTEXPR
+     439              :       unique_ptr&
+     440              :       operator=(nullptr_t) noexcept
+     441              :       {
+     442              :         reset();
+     443              :         return *this;
+     444              :       }
+     445              : 
+     446              :       // Observers.
+     447              : 
+     448              :       /// Dereference the stored pointer.
+     449              :       _GLIBCXX23_CONSTEXPR
+     450              :       typename add_lvalue_reference<element_type>::type
+     451           10 :       operator*() const noexcept(noexcept(*std::declval<pointer>()))
+     452              :       {
+     453           10 :         __glibcxx_assert(get() != pointer());
+     454           10 :         return *get();
+     455              :       }
+     456              : 
+     457              :       /// Return the stored pointer.
+     458              :       _GLIBCXX23_CONSTEXPR
+     459              :       pointer
+     460     31945502 :       operator->() const noexcept
+     461              :       {
+     462              :         _GLIBCXX_DEBUG_PEDASSERT(get() != pointer());
+     463     31945502 :         return get();
+     464              :       }
+     465              : 
+     466              :       /// Return the stored pointer.
+     467              :       _GLIBCXX23_CONSTEXPR
+     468              :       pointer
+     469     31996304 :       get() const noexcept
+     470     31996304 :       { return _M_t._M_ptr(); }
+     471              : 
+     472              :       /// Return a reference to the stored deleter.
+     473              :       _GLIBCXX23_CONSTEXPR
+     474              :       deleter_type&
+     475        14640 :       get_deleter() noexcept
+     476        14640 :       { return _M_t._M_deleter(); }
+     477              : 
+     478              :       /// Return a reference to the stored deleter.
+     479              :       _GLIBCXX23_CONSTEXPR
+     480              :       const deleter_type&
+     481              :       get_deleter() const noexcept
+     482              :       { return _M_t._M_deleter(); }
+     483              : 
+     484              :       /// Return @c true if the stored pointer is not null.
+     485              :       _GLIBCXX23_CONSTEXPR
+     486          446 :       explicit operator bool() const noexcept
+     487          446 :       { return get() == pointer() ? false : true; }
+     488              : 
+     489              :       // Modifiers.
+     490              : 
+     491              :       /// Release ownership of any stored pointer.
+     492              :       _GLIBCXX23_CONSTEXPR
+     493              :       pointer
+     494          932 :       release() noexcept
+     495          932 :       { return _M_t.release(); }
+     496              : 
+     497              :       /** @brief Replace the stored pointer.
+     498              :        *
+     499              :        * @param __p  The new pointer to store.
+     500              :        *
+     501              :        * The deleter will be invoked if a pointer is already owned.
+     502              :        */
+     503              :       _GLIBCXX23_CONSTEXPR
+     504              :       void
+     505          288 :       reset(pointer __p = pointer()) noexcept
+     506              :       {
+     507              :         static_assert(__is_invocable<deleter_type&, pointer>::value,
+     508              :                       "unique_ptr's deleter must be invocable with a pointer");
+     509          288 :         _M_t.reset(std::move(__p));
+     510          288 :       }
+     511              : 
+     512              :       /// Exchange the pointer and deleter with another object.
+     513              :       _GLIBCXX23_CONSTEXPR
+     514              :       void
+     515              :       swap(unique_ptr& __u) noexcept
+     516              :       {
+     517              :         static_assert(__is_swappable<_Dp>::value, "deleter must be swappable");
+     518              :         _M_t.swap(__u._M_t);
+     519              :       }
+     520              : 
+     521              :       // Disable copy from lvalue.
+     522              :       unique_ptr(const unique_ptr&) = delete;
+     523              :       unique_ptr& operator=(const unique_ptr&) = delete;
+     524              :   };
+     525              : 
+     526              :   // 20.7.1.3 unique_ptr for array objects with a runtime length
+     527              :   // [unique.ptr.runtime]
+     528              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     529              :   // DR 740 - omit specialization for array objects with a compile time length
+     530              : 
+     531              :   /// A move-only smart pointer that manages unique ownership of an array.
+     532              :   /// @headerfile memory
+     533              :   /// @since C++11
+     534              :   template<typename _Tp, typename _Dp>
+     535              :     class unique_ptr<_Tp[], _Dp>
+     536              :     {
+     537              :       template <typename _Up>
+     538              :       using _DeleterConstraint =
+     539              :         typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type;
+     540              : 
+     541              :       __uniq_ptr_data<_Tp, _Dp> _M_t;
+     542              : 
+     543              :       // like is_base_of<_Tp, _Up> but false if unqualified types are the same
+     544              :       template<typename _Up>
+     545              :         using __is_derived_Tp
+     546              :           = __and_< is_base_of<_Tp, _Up>,
+     547              :                     __not_<is_same<__remove_cv_t<_Tp>, __remove_cv_t<_Up>>> >;
+     548              : 
+     549              :     public:
+     550              :       using pointer       = typename __uniq_ptr_impl<_Tp, _Dp>::pointer;
+     551              :       using element_type  = _Tp;
+     552              :       using deleter_type  = _Dp;
+     553              : 
+     554              :       // helper template for detecting a safe conversion from another
+     555              :       // unique_ptr
+     556              :       template<typename _Up, typename _Ep,
+     557              :                typename _UPtr = unique_ptr<_Up, _Ep>,
+     558              :                typename _UP_pointer = typename _UPtr::pointer,
+     559              :                typename _UP_element_type = typename _UPtr::element_type>
+     560              :         using __safe_conversion_up = __and_<
+     561              :           is_array<_Up>,
+     562              :           is_same<pointer, element_type*>,
+     563              :           is_same<_UP_pointer, _UP_element_type*>,
+     564              :           is_convertible<_UP_element_type(*)[], element_type(*)[]>
+     565              :         >;
+     566              : 
+     567              :       // helper template for detecting a safe conversion from a raw pointer
+     568              :       template<typename _Up>
+     569              :         using __safe_conversion_raw = __and_<
+     570              :           __or_<__or_<is_same<_Up, pointer>,
+     571              :                       is_same<_Up, nullptr_t>>,
+     572              :                 __and_<is_pointer<_Up>,
+     573              :                        is_same<pointer, element_type*>,
+     574              :                        is_convertible<
+     575              :                          typename remove_pointer<_Up>::type(*)[],
+     576              :                          element_type(*)[]>
+     577              :                 >
+     578              :           >
+     579              :         >;
+     580              : 
+     581              :       // Constructors.
+     582              : 
+     583              :       /// Default constructor, creates a unique_ptr that owns nothing.
+     584              :       template<typename _Del = _Dp, typename = _DeleterConstraint<_Del>>
+     585              :         constexpr unique_ptr() noexcept
+     586              :         : _M_t()
+     587              :         { }
+     588              : 
+     589              :       /** Takes ownership of a pointer.
+     590              :        *
+     591              :        * @param __p  A pointer to an array of a type safely convertible
+     592              :        * to an array of @c element_type
+     593              :        *
+     594              :        * The deleter will be value-initialized.
+     595              :        */
+     596              :       template<typename _Up,
+     597              :                typename _Vp = _Dp,
+     598              :                typename = _DeleterConstraint<_Vp>,
+     599              :                typename = typename enable_if<
+     600              :                  __safe_conversion_raw<_Up>::value, bool>::type>
+     601              :         _GLIBCXX23_CONSTEXPR
+     602              :         explicit
+     603              :         unique_ptr(_Up __p) noexcept
+     604              :         : _M_t(__p)
+     605              :         { }
+     606              : 
+     607              :       /** Takes ownership of a pointer.
+     608              :        *
+     609              :        * @param __p  A pointer to an array of a type safely convertible
+     610              :        * to an array of @c element_type
+     611              :        * @param __d  A reference to a deleter.
+     612              :        *
+     613              :        * The deleter will be initialized with @p __d
+     614              :        */
+     615              :       template<typename _Up, typename _Del = deleter_type,
+     616              :                typename = _Require<__safe_conversion_raw<_Up>,
+     617              :                                    is_copy_constructible<_Del>>>
+     618              :         _GLIBCXX23_CONSTEXPR
+     619              :         unique_ptr(_Up __p, const deleter_type& __d) noexcept
+     620              :         : _M_t(__p, __d) { }
+     621              : 
+     622              :       /** Takes ownership of a pointer.
+     623              :        *
+     624              :        * @param __p  A pointer to an array of a type safely convertible
+     625              :        * to an array of @c element_type
+     626              :        * @param __d  A reference to a deleter.
+     627              :        *
+     628              :        * The deleter will be initialized with @p std::move(__d)
+     629              :        */
+     630              :       template<typename _Up, typename _Del = deleter_type,
+     631              :                typename = _Require<__safe_conversion_raw<_Up>,
+     632              :                                    is_move_constructible<_Del>>>
+     633              :         _GLIBCXX23_CONSTEXPR
+     634              :         unique_ptr(_Up __p,
+     635              :                    __enable_if_t<!is_lvalue_reference<_Del>::value,
+     636              :                                  _Del&&> __d) noexcept
+     637              :         : _M_t(std::move(__p), std::move(__d))
+     638              :         { }
+     639              : 
+     640              :       template<typename _Up, typename _Del = deleter_type,
+     641              :                typename _DelUnref = typename remove_reference<_Del>::type,
+     642              :                typename = _Require<__safe_conversion_raw<_Up>>>
+     643              :         unique_ptr(_Up,
+     644              :                    __enable_if_t<is_lvalue_reference<_Del>::value,
+     645              :                                  _DelUnref&&>) = delete;
+     646              : 
+     647              :       /// Move constructor.
+     648              :       unique_ptr(unique_ptr&&) = default;
+     649              : 
+     650              :       /// Creates a unique_ptr that owns nothing.
+     651              :       template<typename _Del = _Dp, typename = _DeleterConstraint<_Del>>
+     652              :         constexpr unique_ptr(nullptr_t) noexcept
+     653              :         : _M_t()
+     654              :         { }
+     655              : 
+     656              :       template<typename _Up, typename _Ep, typename = _Require<
+     657              :                __safe_conversion_up<_Up, _Ep>,
+     658              :                __conditional_t<is_reference<_Dp>::value,
+     659              :                                is_same<_Ep, _Dp>,
+     660              :                                is_convertible<_Ep, _Dp>>>>
+     661              :         _GLIBCXX23_CONSTEXPR
+     662              :         unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
+     663              :         : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter()))
+     664              :         { }
+     665              : 
+     666              :       /// Destructor, invokes the deleter if the stored pointer is not null.
+     667              : #if __cplusplus > 202002L && __cpp_constexpr_dynamic_alloc
+     668              :       constexpr
+     669              : #endif
+     670              :       ~unique_ptr()
+     671              :       {
+     672              :         auto& __ptr = _M_t._M_ptr();
+     673              :         if (__ptr != nullptr)
+     674              :           get_deleter()(__ptr);
+     675              :         __ptr = pointer();
+     676              :       }
+     677              : 
+     678              :       // Assignment.
+     679              : 
+     680              :       /** @brief Move assignment operator.
+     681              :        *
+     682              :        * Invokes the deleter if this object owns a pointer.
+     683              :        */
+     684              :       unique_ptr&
+     685              :       operator=(unique_ptr&&) = default;
+     686              : 
+     687              :       /** @brief Assignment from another type.
+     688              :        *
+     689              :        * @param __u  The object to transfer ownership from, which owns a
+     690              :        *             convertible pointer to an array object.
+     691              :        *
+     692              :        * Invokes the deleter if this object owns a pointer.
+     693              :        */
+     694              :       template<typename _Up, typename _Ep>
+     695              :         _GLIBCXX23_CONSTEXPR
+     696              :         typename
+     697              :         enable_if<__and_<__safe_conversion_up<_Up, _Ep>,
+     698              :                          is_assignable<deleter_type&, _Ep&&>
+     699              :                   >::value,
+     700              :                   unique_ptr&>::type
+     701              :         operator=(unique_ptr<_Up, _Ep>&& __u) noexcept
+     702              :         {
+     703              :           reset(__u.release());
+     704              :           get_deleter() = std::forward<_Ep>(__u.get_deleter());
+     705              :           return *this;
+     706              :         }
+     707              : 
+     708              :       /// Reset the %unique_ptr to empty, invoking the deleter if necessary.
+     709              :       _GLIBCXX23_CONSTEXPR
+     710              :       unique_ptr&
+     711              :       operator=(nullptr_t) noexcept
+     712              :       {
+     713              :         reset();
+     714              :         return *this;
+     715              :       }
+     716              : 
+     717              :       // Observers.
+     718              : 
+     719              :       /// Access an element of owned array.
+     720              :       _GLIBCXX23_CONSTEXPR
+     721              :       typename std::add_lvalue_reference<element_type>::type
+     722              :       operator[](size_t __i) const
+     723              :       {
+     724              :         __glibcxx_assert(get() != pointer());
+     725              :         return get()[__i];
+     726              :       }
+     727              : 
+     728              :       /// Return the stored pointer.
+     729              :       _GLIBCXX23_CONSTEXPR
+     730              :       pointer
+     731              :       get() const noexcept
+     732              :       { return _M_t._M_ptr(); }
+     733              : 
+     734              :       /// Return a reference to the stored deleter.
+     735              :       _GLIBCXX23_CONSTEXPR
+     736              :       deleter_type&
+     737              :       get_deleter() noexcept
+     738              :       { return _M_t._M_deleter(); }
+     739              : 
+     740              :       /// Return a reference to the stored deleter.
+     741              :       _GLIBCXX23_CONSTEXPR
+     742              :       const deleter_type&
+     743              :       get_deleter() const noexcept
+     744              :       { return _M_t._M_deleter(); }
+     745              : 
+     746              :       /// Return @c true if the stored pointer is not null.
+     747              :       _GLIBCXX23_CONSTEXPR
+     748              :       explicit operator bool() const noexcept
+     749              :       { return get() == pointer() ? false : true; }
+     750              : 
+     751              :       // Modifiers.
+     752              : 
+     753              :       /// Release ownership of any stored pointer.
+     754              :       _GLIBCXX23_CONSTEXPR
+     755              :       pointer
+     756              :       release() noexcept
+     757              :       { return _M_t.release(); }
+     758              : 
+     759              :       /** @brief Replace the stored pointer.
+     760              :        *
+     761              :        * @param __p  The new pointer to store.
+     762              :        *
+     763              :        * The deleter will be invoked if a pointer is already owned.
+     764              :        */
+     765              :       template <typename _Up,
+     766              :                 typename = _Require<
+     767              :                   __or_<is_same<_Up, pointer>,
+     768              :                         __and_<is_same<pointer, element_type*>,
+     769              :                                is_pointer<_Up>,
+     770              :                                is_convertible<
+     771              :                                  typename remove_pointer<_Up>::type(*)[],
+     772              :                                  element_type(*)[]
+     773              :                                >
+     774              :                         >
+     775              :                   >
+     776              :                >>
+     777              :       _GLIBCXX23_CONSTEXPR
+     778              :       void
+     779              :       reset(_Up __p) noexcept
+     780              :       { _M_t.reset(std::move(__p)); }
+     781              : 
+     782              :       _GLIBCXX23_CONSTEXPR
+     783              :       void reset(nullptr_t = nullptr) noexcept
+     784              :       { reset(pointer()); }
+     785              : 
+     786              :       /// Exchange the pointer and deleter with another object.
+     787              :       _GLIBCXX23_CONSTEXPR
+     788              :       void
+     789              :       swap(unique_ptr& __u) noexcept
+     790              :       {
+     791              :         static_assert(__is_swappable<_Dp>::value, "deleter must be swappable");
+     792              :         _M_t.swap(__u._M_t);
+     793              :       }
+     794              : 
+     795              :       // Disable copy from lvalue.
+     796              :       unique_ptr(const unique_ptr&) = delete;
+     797              :       unique_ptr& operator=(const unique_ptr&) = delete;
+     798              :     };
+     799              : 
+     800              :   /// @{
+     801              :   /// @relates unique_ptr
+     802              : 
+     803              :   /// Swap overload for unique_ptr
+     804              :   template<typename _Tp, typename _Dp>
+     805              :     inline
+     806              : #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
+     807              :     // Constrained free swap overload, see p0185r1
+     808              :     _GLIBCXX23_CONSTEXPR
+     809              :     typename enable_if<__is_swappable<_Dp>::value>::type
+     810              : #else
+     811              :     void
+     812              : #endif
+     813              :     swap(unique_ptr<_Tp, _Dp>& __x,
+     814              :          unique_ptr<_Tp, _Dp>& __y) noexcept
+     815              :     { __x.swap(__y); }
+     816              : 
+     817              : #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
+     818              :   template<typename _Tp, typename _Dp>
+     819              :     typename enable_if<!__is_swappable<_Dp>::value>::type
+     820              :     swap(unique_ptr<_Tp, _Dp>&,
+     821              :          unique_ptr<_Tp, _Dp>&) = delete;
+     822              : #endif
+     823              : 
+     824              :   /// Equality operator for unique_ptr objects, compares the owned pointers
+     825              :   template<typename _Tp, typename _Dp,
+     826              :            typename _Up, typename _Ep>
+     827              :     _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR
+     828              :     inline bool
+     829              :     operator==(const unique_ptr<_Tp, _Dp>& __x,
+     830              :                const unique_ptr<_Up, _Ep>& __y)
+     831              :     { return __x.get() == __y.get(); }
+     832              : 
+     833              :   /// unique_ptr comparison with nullptr
+     834              :   template<typename _Tp, typename _Dp>
+     835              :     _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR
+     836              :     inline bool
+     837              :     operator==(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept
+     838              :     { return !__x; }
+     839              : 
+     840              : #ifndef __cpp_lib_three_way_comparison
+     841              :   /// unique_ptr comparison with nullptr
+     842              :   template<typename _Tp, typename _Dp>
+     843              :     _GLIBCXX_NODISCARD
+     844              :     inline bool
+     845              :     operator==(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept
+     846              :     { return !__x; }
+     847              : 
+     848              :   /// Inequality operator for unique_ptr objects, compares the owned pointers
+     849              :   template<typename _Tp, typename _Dp,
+     850              :            typename _Up, typename _Ep>
+     851              :     _GLIBCXX_NODISCARD
+     852              :     inline bool
+     853              :     operator!=(const unique_ptr<_Tp, _Dp>& __x,
+     854              :                const unique_ptr<_Up, _Ep>& __y)
+     855              :     { return __x.get() != __y.get(); }
+     856              : 
+     857              :   /// unique_ptr comparison with nullptr
+     858              :   template<typename _Tp, typename _Dp>
+     859              :     _GLIBCXX_NODISCARD
+     860              :     inline bool
+     861          446 :     operator!=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept
+     862          446 :     { return (bool)__x; }
+     863              : 
+     864              :   /// unique_ptr comparison with nullptr
+     865              :   template<typename _Tp, typename _Dp>
+     866              :     _GLIBCXX_NODISCARD
+     867              :     inline bool
+     868              :     operator!=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept
+     869              :     { return (bool)__x; }
+     870              : #endif // three way comparison
+     871              : 
+     872              :   /// Relational operator for unique_ptr objects, compares the owned pointers
+     873              :   template<typename _Tp, typename _Dp,
+     874              :            typename _Up, typename _Ep>
+     875              :     _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR
+     876              :     inline bool
+     877              :     operator<(const unique_ptr<_Tp, _Dp>& __x,
+     878              :               const unique_ptr<_Up, _Ep>& __y)
+     879              :     {
+     880              :       typedef typename
+     881              :         std::common_type<typename unique_ptr<_Tp, _Dp>::pointer,
+     882              :                          typename unique_ptr<_Up, _Ep>::pointer>::type _CT;
+     883              :       return std::less<_CT>()(__x.get(), __y.get());
+     884              :     }
+     885              : 
+     886              :   /// unique_ptr comparison with nullptr
+     887              :   template<typename _Tp, typename _Dp>
+     888              :     _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR
+     889              :     inline bool
+     890              :     operator<(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
+     891              :     {
+     892              :       return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(__x.get(),
+     893              :                                                                  nullptr);
+     894              :     }
+     895              : 
+     896              :   /// unique_ptr comparison with nullptr
+     897              :   template<typename _Tp, typename _Dp>
+     898              :     _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR
+     899              :     inline bool
+     900              :     operator<(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
+     901              :     {
+     902              :       return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(nullptr,
+     903              :                                                                  __x.get());
+     904              :     }
+     905              : 
+     906              :   /// Relational operator for unique_ptr objects, compares the owned pointers
+     907              :   template<typename _Tp, typename _Dp,
+     908              :            typename _Up, typename _Ep>
+     909              :     _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR
+     910              :     inline bool
+     911              :     operator<=(const unique_ptr<_Tp, _Dp>& __x,
+     912              :                const unique_ptr<_Up, _Ep>& __y)
+     913              :     { return !(__y < __x); }
+     914              : 
+     915              :   /// unique_ptr comparison with nullptr
+     916              :   template<typename _Tp, typename _Dp>
+     917              :     _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR
+     918              :     inline bool
+     919              :     operator<=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
+     920              :     { return !(nullptr < __x); }
+     921              : 
+     922              :   /// unique_ptr comparison with nullptr
+     923              :   template<typename _Tp, typename _Dp>
+     924              :     _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR
+     925              :     inline bool
+     926              :     operator<=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
+     927              :     { return !(__x < nullptr); }
+     928              : 
+     929              :   /// Relational operator for unique_ptr objects, compares the owned pointers
+     930              :   template<typename _Tp, typename _Dp,
+     931              :            typename _Up, typename _Ep>
+     932              :     _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR
+     933              :     inline bool
+     934              :     operator>(const unique_ptr<_Tp, _Dp>& __x,
+     935              :               const unique_ptr<_Up, _Ep>& __y)
+     936              :     { return (__y < __x); }
+     937              : 
+     938              :   /// unique_ptr comparison with nullptr
+     939              :   template<typename _Tp, typename _Dp>
+     940              :     _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR
+     941              :     inline bool
+     942              :     operator>(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
+     943              :     {
+     944              :       return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(nullptr,
+     945              :                                                                  __x.get());
+     946              :     }
+     947              : 
+     948              :   /// unique_ptr comparison with nullptr
+     949              :   template<typename _Tp, typename _Dp>
+     950              :     _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR
+     951              :     inline bool
+     952              :     operator>(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
+     953              :     {
+     954              :       return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(__x.get(),
+     955              :                                                                  nullptr);
+     956              :     }
+     957              : 
+     958              :   /// Relational operator for unique_ptr objects, compares the owned pointers
+     959              :   template<typename _Tp, typename _Dp,
+     960              :            typename _Up, typename _Ep>
+     961              :     _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR
+     962              :     inline bool
+     963              :     operator>=(const unique_ptr<_Tp, _Dp>& __x,
+     964              :                const unique_ptr<_Up, _Ep>& __y)
+     965              :     { return !(__x < __y); }
+     966              : 
+     967              :   /// unique_ptr comparison with nullptr
+     968              :   template<typename _Tp, typename _Dp>
+     969              :     _GLIBCXX_NODISCARD _GLIBCXX23_CONSTEXPR
+     970              :     inline bool
+     971              :     operator>=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
+     972              :     { return !(__x < nullptr); }
+     973              : 
+     974              :   /// unique_ptr comparison with nullptr
+     975              :   template<typename _Tp, typename _Dp>
+     976              :     _GLIBCXX_NODISCARD inline bool
+     977              :     operator>=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
+     978              :     { return !(nullptr < __x); }
+     979              : 
+     980              : #ifdef __cpp_lib_three_way_comparison
+     981              :   template<typename _Tp, typename _Dp, typename _Up, typename _Ep>
+     982              :     requires three_way_comparable_with<typename unique_ptr<_Tp, _Dp>::pointer,
+     983              :                                        typename unique_ptr<_Up, _Ep>::pointer>
+     984              :     _GLIBCXX23_CONSTEXPR
+     985              :     inline
+     986              :     compare_three_way_result_t<typename unique_ptr<_Tp, _Dp>::pointer,
+     987              :                                typename unique_ptr<_Up, _Ep>::pointer>
+     988              :     operator<=>(const unique_ptr<_Tp, _Dp>& __x,
+     989              :                 const unique_ptr<_Up, _Ep>& __y)
+     990              :     { return compare_three_way()(__x.get(), __y.get()); }
+     991              : 
+     992              :   template<typename _Tp, typename _Dp>
+     993              :     requires three_way_comparable<typename unique_ptr<_Tp, _Dp>::pointer>
+     994              :     _GLIBCXX23_CONSTEXPR
+     995              :     inline
+     996              :     compare_three_way_result_t<typename unique_ptr<_Tp, _Dp>::pointer>
+     997              :     operator<=>(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
+     998              :     {
+     999              :       using pointer = typename unique_ptr<_Tp, _Dp>::pointer;
+    1000              :       return compare_three_way()(__x.get(), static_cast<pointer>(nullptr));
+    1001              :     }
+    1002              : #endif
+    1003              :   /// @} relates unique_ptr
+    1004              : 
+    1005              :   /// @cond undocumented
+    1006              :   template<typename _Up, typename _Ptr = typename _Up::pointer,
+    1007              :            bool = __poison_hash<_Ptr>::__enable_hash_call>
+    1008              :     struct __uniq_ptr_hash
+    1009              : #if ! _GLIBCXX_INLINE_VERSION
+    1010              :     : private __poison_hash<_Ptr>
+    1011              : #endif
+    1012              :     {
+    1013              :       size_t
+    1014              :       operator()(const _Up& __u) const
+    1015              :       noexcept(noexcept(std::declval<hash<_Ptr>>()(std::declval<_Ptr>())))
+    1016              :       { return hash<_Ptr>()(__u.get()); }
+    1017              :     };
+    1018              : 
+    1019              :   template<typename _Up, typename _Ptr>
+    1020              :     struct __uniq_ptr_hash<_Up, _Ptr, false>
+    1021              :     : private __poison_hash<_Ptr>
+    1022              :     { };
+    1023              :   /// @endcond
+    1024              : 
+    1025              :   /// std::hash specialization for unique_ptr.
+    1026              :   template<typename _Tp, typename _Dp>
+    1027              :     struct hash<unique_ptr<_Tp, _Dp>>
+    1028              :     : public __hash_base<size_t, unique_ptr<_Tp, _Dp>>,
+    1029              :       public __uniq_ptr_hash<unique_ptr<_Tp, _Dp>>
+    1030              :     { };
+    1031              : 
+    1032              : #if __cplusplus >= 201402L && _GLIBCXX_HOSTED
+    1033              : #define __cpp_lib_make_unique 201304L
+    1034              : 
+    1035              :   /// @cond undocumented
+    1036              : namespace __detail
+    1037              : {
+    1038              :   template<typename _Tp>
+    1039              :     struct _MakeUniq
+    1040              :     { typedef unique_ptr<_Tp> __single_object; };
+    1041              : 
+    1042              :   template<typename _Tp>
+    1043              :     struct _MakeUniq<_Tp[]>
+    1044              :     { typedef unique_ptr<_Tp[]> __array; };
+    1045              : 
+    1046              :   template<typename _Tp, size_t _Bound>
+    1047              :     struct _MakeUniq<_Tp[_Bound]>
+    1048              :     { struct __invalid_type { }; };
+    1049              : 
+    1050              :   template<typename _Tp>
+    1051              :     using __unique_ptr_t = typename _MakeUniq<_Tp>::__single_object;
+    1052              :   template<typename _Tp>
+    1053              :     using __unique_ptr_array_t = typename _MakeUniq<_Tp>::__array;
+    1054              :   template<typename _Tp>
+    1055              :     using __invalid_make_unique_t = typename _MakeUniq<_Tp>::__invalid_type;
+    1056              : }
+    1057              :   /// @endcond
+    1058              : 
+    1059              :   /** Create an object owned by a `unique_ptr`.
+    1060              :    *  @tparam _Tp A non-array object type.
+    1061              :    *  @param __args Constructor arguments for the new object.
+    1062              :    *  @returns A `unique_ptr<_Tp>` that owns the new object.
+    1063              :    *  @since C++14
+    1064              :    *  @relates unique_ptr
+    1065              :    */
+    1066              :   template<typename _Tp, typename... _Args>
+    1067              :     _GLIBCXX23_CONSTEXPR
+    1068              :     inline __detail::__unique_ptr_t<_Tp>
+    1069        13866 :     make_unique(_Args&&... __args)
+    1070        13866 :     { return unique_ptr<_Tp>(new _Tp(std::forward<_Args>(__args)...)); }
+    1071              : 
+    1072              :   /** Create an array owned by a `unique_ptr`.
+    1073              :    *  @tparam _Tp An array type of unknown bound, such as `U[]`.
+    1074              :    *  @param __num The number of elements of type `U` in the new array.
+    1075              :    *  @returns A `unique_ptr<U[]>` that owns the new array.
+    1076              :    *  @since C++14
+    1077              :    *  @relates unique_ptr
+    1078              :    *
+    1079              :    *  The array elements are value-initialized.
+    1080              :    */
+    1081              :   template<typename _Tp>
+    1082              :     _GLIBCXX23_CONSTEXPR
+    1083              :     inline __detail::__unique_ptr_array_t<_Tp>
+    1084              :     make_unique(size_t __num)
+    1085              :     { return unique_ptr<_Tp>(new remove_extent_t<_Tp>[__num]()); }
+    1086              : 
+    1087              :   /** Disable std::make_unique for arrays of known bound.
+    1088              :    *  @tparam _Tp An array type of known bound, such as `U[N]`.
+    1089              :    *  @since C++14
+    1090              :    *  @relates unique_ptr
+    1091              :    */
+    1092              :   template<typename _Tp, typename... _Args>
+    1093              :     __detail::__invalid_make_unique_t<_Tp>
+    1094              :     make_unique(_Args&&...) = delete;
+    1095              : 
+    1096              : #if __cplusplus > 201703L
+    1097              :   /** Create a default-initialied object owned by a `unique_ptr`.
+    1098              :    *  @tparam _Tp A non-array object type.
+    1099              :    *  @returns A `unique_ptr<_Tp>` that owns the new object.
+    1100              :    *  @since C++20
+    1101              :    *  @relates unique_ptr
+    1102              :    */
+    1103              :   template<typename _Tp>
+    1104              :     _GLIBCXX23_CONSTEXPR
+    1105              :     inline __detail::__unique_ptr_t<_Tp>
+    1106              :     make_unique_for_overwrite()
+    1107              :     { return unique_ptr<_Tp>(new _Tp); }
+    1108              : 
+    1109              :   /** Create a default-initialized array owned by a `unique_ptr`.
+    1110              :    *  @tparam _Tp An array type of unknown bound, such as `U[]`.
+    1111              :    *  @param __num The number of elements of type `U` in the new array.
+    1112              :    *  @returns A `unique_ptr<U[]>` that owns the new array.
+    1113              :    *  @since C++20
+    1114              :    *  @relates unique_ptr
+    1115              :    */
+    1116              :   template<typename _Tp>
+    1117              :     _GLIBCXX23_CONSTEXPR
+    1118              :     inline __detail::__unique_ptr_array_t<_Tp>
+    1119              :     make_unique_for_overwrite(size_t __num)
+    1120              :     { return unique_ptr<_Tp>(new remove_extent_t<_Tp>[__num]); }
+    1121              : 
+    1122              :   /** Disable std::make_unique_for_overwrite for arrays of known bound.
+    1123              :    *  @tparam _Tp An array type of known bound, such as `U[N]`.
+    1124              :    *  @since C++20
+    1125              :    *  @relates unique_ptr
+    1126              :    */
+    1127              :   template<typename _Tp, typename... _Args>
+    1128              :     __detail::__invalid_make_unique_t<_Tp>
+    1129              :     make_unique_for_overwrite(_Args&&...) = delete;
+    1130              : #endif // C++20
+    1131              : 
+    1132              : #endif // C++14 && HOSTED
+    1133              : 
+    1134              : #if __cplusplus > 201703L && __cpp_concepts && _GLIBCXX_HOSTED
+    1135              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1136              :   // 2948. unique_ptr does not define operator<< for stream output
+    1137              :   /// Stream output operator for unique_ptr
+    1138              :   /// @relates unique_ptr
+    1139              :   /// @since C++20
+    1140              :   template<typename _CharT, typename _Traits, typename _Tp, typename _Dp>
+    1141              :     inline basic_ostream<_CharT, _Traits>&
+    1142              :     operator<<(basic_ostream<_CharT, _Traits>& __os,
+    1143              :                const unique_ptr<_Tp, _Dp>& __p)
+    1144              :     requires requires { __os << __p.get(); }
+    1145              :     {
+    1146              :       __os << __p.get();
+    1147              :       return __os;
+    1148              :     }
+    1149              : #endif // C++20 && HOSTED
+    1150              : 
+    1151              :   /// @} group pointer_abstractions
+    1152              : 
+    1153              : #if __cplusplus >= 201703L
+    1154              :   namespace __detail::__variant
+    1155              :   {
+    1156              :     template<typename> struct _Never_valueless_alt; // see <variant>
+    1157              : 
+    1158              :     // Provide the strong exception-safety guarantee when emplacing a
+    1159              :     // unique_ptr into a variant.
+    1160              :     template<typename _Tp, typename _Del>
+    1161              :       struct _Never_valueless_alt<std::unique_ptr<_Tp, _Del>>
+    1162              :       : std::true_type
+    1163              :       { };
+    1164              :   }  // namespace __detail::__variant
+    1165              : #endif // C++17
+    1166              : 
+    1167              : _GLIBCXX_END_NAMESPACE_VERSION
+    1168              : } // namespace
+    1169              : 
+    1170              : #endif /* _UNIQUE_PTR_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/unordered_map.h.func-c.html b/html/usr/include/c++/13/bits/unordered_map.h.func-c.html new file mode 100644 index 0000000..ff04da5 --- /dev/null +++ b/html/usr/include/c++/13/bits/unordered_map.h.func-c.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/unordered_map.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - unordered_map.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %99
Test Date:2024-04-30 13:17:26Functions:100.0 %77
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt13unordered_mapIiS_IidSt4hashIiESt8equal_toIiESaISt4pairIKidEEES1_S3_SaIS4_IS5_S8_EEEixERS5_58918
_ZNSt13unordered_mapIidSt4hashIiESt8equal_toIiESaISt4pairIKidEEE3endEv58918
_ZNSt13unordered_mapIidSt4hashIiESt8equal_toIiESaISt4pairIKidEEE5beginEv58918
_ZNSt13unordered_mapIidSt4hashIiESt8equal_toIiESaISt4pairIKidEEEC2Ev73754
_ZNSt13unordered_mapIiS_IidSt4hashIiESt8equal_toIiESaISt4pairIKidEEES1_S3_SaIS4_IS5_S8_EEEC2Ev14836
_ZNSt13unordered_mapIidSt4hashIiESt8equal_toIiESaISt4pairIKidEEEC2Ev58918
_ZNSt13unordered_mapIidSt4hashIiESt8equal_toIiESaISt4pairIKidEEEixEOi5864176
_ZNSt13unordered_mapIiS_IidSt4hashIiESt8equal_toIiESaISt4pairIKidEEES1_S3_SaIS4_IS5_S8_EEEixEOi2932088
_ZNSt13unordered_mapIidSt4hashIiESt8equal_toIiESaISt4pairIKidEEEixEOi2932088
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/unordered_map.h.func.html b/html/usr/include/c++/13/bits/unordered_map.h.func.html new file mode 100644 index 0000000..04136bc --- /dev/null +++ b/html/usr/include/c++/13/bits/unordered_map.h.func.html @@ -0,0 +1,138 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/unordered_map.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - unordered_map.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %99
Test Date:2024-04-30 13:17:26Functions:100.0 %77
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt13unordered_mapIiS_IidSt4hashIiESt8equal_toIiESaISt4pairIKidEEES1_S3_SaIS4_IS5_S8_EEEixERS5_58918
_ZNSt13unordered_mapIidSt4hashIiESt8equal_toIiESaISt4pairIKidEEE3endEv58918
_ZNSt13unordered_mapIidSt4hashIiESt8equal_toIiESaISt4pairIKidEEE5beginEv58918
_ZNSt13unordered_mapIidSt4hashIiESt8equal_toIiESaISt4pairIKidEEEC2Ev73754
_ZNSt13unordered_mapIiS_IidSt4hashIiESt8equal_toIiESaISt4pairIKidEEES1_S3_SaIS4_IS5_S8_EEEC2Ev14836
_ZNSt13unordered_mapIidSt4hashIiESt8equal_toIiESaISt4pairIKidEEEC2Ev58918
_ZNSt13unordered_mapIidSt4hashIiESt8equal_toIiESaISt4pairIKidEEEixEOi5864176
_ZNSt13unordered_mapIiS_IidSt4hashIiESt8equal_toIiESaISt4pairIKidEEES1_S3_SaIS4_IS5_S8_EEEixEOi2932088
_ZNSt13unordered_mapIidSt4hashIiESt8equal_toIiESaISt4pairIKidEEEixEOi2932088
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/unordered_map.h.gcov.html b/html/usr/include/c++/13/bits/unordered_map.h.gcov.html new file mode 100644 index 0000000..7554c44 --- /dev/null +++ b/html/usr/include/c++/13/bits/unordered_map.h.gcov.html @@ -0,0 +1,2300 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/unordered_map.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - unordered_map.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %99
Test Date:2024-04-30 13:17:26Functions:100.0 %77
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // unordered_map implementation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2010-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/unordered_map.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{unordered_map}
+      28              :  */
+      29              : 
+      30              : #ifndef _UNORDERED_MAP_H
+      31              : #define _UNORDERED_MAP_H
+      32              : 
+      33              : #include <bits/hashtable.h>
+      34              : #include <bits/allocator.h>
+      35              : #include <bits/functional_hash.h> // hash
+      36              : #include <bits/stl_function.h>    // equal_to
+      37              : 
+      38              : namespace std _GLIBCXX_VISIBILITY(default)
+      39              : {
+      40              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      41              : _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
+      42              : 
+      43              :   /// Base types for unordered_map.
+      44              :   template<bool _Cache>
+      45              :     using __umap_traits = __detail::_Hashtable_traits<_Cache, false, true>;
+      46              : 
+      47              :   template<typename _Key,
+      48              :            typename _Tp,
+      49              :            typename _Hash = hash<_Key>,
+      50              :            typename _Pred = std::equal_to<_Key>,
+      51              :            typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >,
+      52              :            typename _Tr = __umap_traits<__cache_default<_Key, _Hash>::value>>
+      53              :     using __umap_hashtable = _Hashtable<_Key, std::pair<const _Key, _Tp>,
+      54              :                                         _Alloc, __detail::_Select1st,
+      55              :                                         _Pred, _Hash,
+      56              :                                         __detail::_Mod_range_hashing,
+      57              :                                         __detail::_Default_ranged_hash,
+      58              :                                         __detail::_Prime_rehash_policy, _Tr>;
+      59              : 
+      60              :   /// Base types for unordered_multimap.
+      61              :   template<bool _Cache>
+      62              :     using __ummap_traits = __detail::_Hashtable_traits<_Cache, false, false>;
+      63              : 
+      64              :   template<typename _Key,
+      65              :            typename _Tp,
+      66              :            typename _Hash = hash<_Key>,
+      67              :            typename _Pred = std::equal_to<_Key>,
+      68              :            typename _Alloc = std::allocator<std::pair<const _Key, _Tp> >,
+      69              :            typename _Tr = __ummap_traits<__cache_default<_Key, _Hash>::value>>
+      70              :     using __ummap_hashtable = _Hashtable<_Key, std::pair<const _Key, _Tp>,
+      71              :                                          _Alloc, __detail::_Select1st,
+      72              :                                          _Pred, _Hash,
+      73              :                                          __detail::_Mod_range_hashing,
+      74              :                                          __detail::_Default_ranged_hash,
+      75              :                                          __detail::_Prime_rehash_policy, _Tr>;
+      76              : 
+      77              :   template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
+      78              :     class unordered_multimap;
+      79              : 
+      80              :   /**
+      81              :    *  @brief A standard container composed of unique keys (containing
+      82              :    *  at most one of each key value) that associates values of another type
+      83              :    *  with the keys.
+      84              :    *
+      85              :    *  @ingroup unordered_associative_containers
+      86              :    *  @headerfile unordered_map
+      87              :    *  @since C++11
+      88              :    *
+      89              :    *  @tparam  _Key    Type of key objects.
+      90              :    *  @tparam  _Tp     Type of mapped objects.
+      91              :    *  @tparam  _Hash   Hashing function object type, defaults to hash<_Value>.
+      92              :    *  @tparam  _Pred   Predicate function object type, defaults
+      93              :    *                   to equal_to<_Value>.
+      94              :    *  @tparam  _Alloc  Allocator type, defaults to 
+      95              :    *                   std::allocator<std::pair<const _Key, _Tp>>.
+      96              :    *
+      97              :    *  Meets the requirements of a <a href="tables.html#65">container</a>, and
+      98              :    *  <a href="tables.html#xx">unordered associative container</a>
+      99              :    *
+     100              :    * The resulting value type of the container is std::pair<const _Key, _Tp>.
+     101              :    *
+     102              :    *  Base is _Hashtable, dispatched at compile time via template
+     103              :    *  alias __umap_hashtable.
+     104              :    */
+     105              :   template<typename _Key, typename _Tp,
+     106              :            typename _Hash = hash<_Key>,
+     107              :            typename _Pred = equal_to<_Key>,
+     108              :            typename _Alloc = allocator<std::pair<const _Key, _Tp>>>
+     109              :     class unordered_map
+     110              :     {
+     111              :       typedef __umap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc>  _Hashtable;
+     112              :       _Hashtable _M_h;
+     113              : 
+     114              :     public:
+     115              :       // typedefs:
+     116              :       ///@{
+     117              :       /// Public typedefs.
+     118              :       typedef typename _Hashtable::key_type     key_type;
+     119              :       typedef typename _Hashtable::value_type   value_type;
+     120              :       typedef typename _Hashtable::mapped_type  mapped_type;
+     121              :       typedef typename _Hashtable::hasher       hasher;
+     122              :       typedef typename _Hashtable::key_equal    key_equal;
+     123              :       typedef typename _Hashtable::allocator_type allocator_type;
+     124              :       ///@}
+     125              : 
+     126              :       ///@{
+     127              :       ///  Iterator-related typedefs.
+     128              :       typedef typename _Hashtable::pointer              pointer;
+     129              :       typedef typename _Hashtable::const_pointer        const_pointer;
+     130              :       typedef typename _Hashtable::reference            reference;
+     131              :       typedef typename _Hashtable::const_reference      const_reference;
+     132              :       typedef typename _Hashtable::iterator             iterator;
+     133              :       typedef typename _Hashtable::const_iterator       const_iterator;
+     134              :       typedef typename _Hashtable::local_iterator       local_iterator;
+     135              :       typedef typename _Hashtable::const_local_iterator const_local_iterator;
+     136              :       typedef typename _Hashtable::size_type            size_type;
+     137              :       typedef typename _Hashtable::difference_type      difference_type;
+     138              :       ///@}
+     139              : 
+     140              : #if __cplusplus > 201402L
+     141              :       using node_type = typename _Hashtable::node_type;
+     142              :       using insert_return_type = typename _Hashtable::insert_return_type;
+     143              : #endif
+     144              : 
+     145              :       //construct/destroy/copy
+     146              : 
+     147              :       /// Default constructor.
+     148        73754 :       unordered_map() = default;
+     149              : 
+     150              :       /**
+     151              :        *  @brief  Default constructor creates no elements.
+     152              :        *  @param __n  Minimal initial number of buckets.
+     153              :        *  @param __hf  A hash functor.
+     154              :        *  @param __eql  A key equality functor.
+     155              :        *  @param __a  An allocator object.
+     156              :        */
+     157              :       explicit
+     158              :       unordered_map(size_type __n,
+     159              :                     const hasher& __hf = hasher(),
+     160              :                     const key_equal& __eql = key_equal(),
+     161              :                     const allocator_type& __a = allocator_type())
+     162              :       : _M_h(__n, __hf, __eql, __a)
+     163              :       { }
+     164              : 
+     165              :       /**
+     166              :        *  @brief  Builds an %unordered_map from a range.
+     167              :        *  @param  __first  An input iterator.
+     168              :        *  @param  __last  An input iterator.
+     169              :        *  @param __n  Minimal initial number of buckets.
+     170              :        *  @param __hf  A hash functor.
+     171              :        *  @param __eql  A key equality functor.
+     172              :        *  @param __a  An allocator object.
+     173              :        *
+     174              :        *  Create an %unordered_map consisting of copies of the elements from
+     175              :        *  [__first,__last).  This is linear in N (where N is
+     176              :        *  distance(__first,__last)).
+     177              :        */
+     178              :       template<typename _InputIterator>
+     179              :         unordered_map(_InputIterator __first, _InputIterator __last,
+     180              :                       size_type __n = 0,
+     181              :                       const hasher& __hf = hasher(),
+     182              :                       const key_equal& __eql = key_equal(),
+     183              :                       const allocator_type& __a = allocator_type())
+     184              :         : _M_h(__first, __last, __n, __hf, __eql, __a)
+     185              :         { }
+     186              : 
+     187              :       /// Copy constructor.
+     188              :       unordered_map(const unordered_map&) = default;
+     189              : 
+     190              :       /// Move constructor.
+     191              :       unordered_map(unordered_map&&) = default;
+     192              : 
+     193              :       /**
+     194              :        *  @brief Creates an %unordered_map with no elements.
+     195              :        *  @param __a An allocator object.
+     196              :        */
+     197              :       explicit
+     198              :       unordered_map(const allocator_type& __a)
+     199              :         : _M_h(__a)
+     200              :       { }
+     201              : 
+     202              :       /*
+     203              :        *  @brief Copy constructor with allocator argument.
+     204              :        * @param  __uset  Input %unordered_map to copy.
+     205              :        * @param  __a  An allocator object.
+     206              :        */
+     207              :       unordered_map(const unordered_map& __umap,
+     208              :                     const allocator_type& __a)
+     209              :       : _M_h(__umap._M_h, __a)
+     210              :       { }
+     211              : 
+     212              :       /*
+     213              :        *  @brief  Move constructor with allocator argument.
+     214              :        *  @param  __uset Input %unordered_map to move.
+     215              :        *  @param  __a    An allocator object.
+     216              :        */
+     217              :       unordered_map(unordered_map&& __umap,
+     218              :                     const allocator_type& __a)
+     219              :         noexcept( noexcept(_Hashtable(std::move(__umap._M_h), __a)) )
+     220              :       : _M_h(std::move(__umap._M_h), __a)
+     221              :       { }
+     222              : 
+     223              :       /**
+     224              :        *  @brief  Builds an %unordered_map from an initializer_list.
+     225              :        *  @param  __l  An initializer_list.
+     226              :        *  @param __n  Minimal initial number of buckets.
+     227              :        *  @param __hf  A hash functor.
+     228              :        *  @param __eql  A key equality functor.
+     229              :        *  @param  __a  An allocator object.
+     230              :        *
+     231              :        *  Create an %unordered_map consisting of copies of the elements in the
+     232              :        *  list. This is linear in N (where N is @a __l.size()).
+     233              :        */
+     234              :       unordered_map(initializer_list<value_type> __l,
+     235              :                     size_type __n = 0,
+     236              :                     const hasher& __hf = hasher(),
+     237              :                     const key_equal& __eql = key_equal(),
+     238              :                     const allocator_type& __a = allocator_type())
+     239              :       : _M_h(__l, __n, __hf, __eql, __a)
+     240              :       { }
+     241              : 
+     242              :       unordered_map(size_type __n, const allocator_type& __a)
+     243              :       : unordered_map(__n, hasher(), key_equal(), __a)
+     244              :       { }
+     245              : 
+     246              :       unordered_map(size_type __n, const hasher& __hf,
+     247              :                     const allocator_type& __a)
+     248              :       : unordered_map(__n, __hf, key_equal(), __a)
+     249              :       { }
+     250              : 
+     251              :       template<typename _InputIterator>
+     252              :         unordered_map(_InputIterator __first, _InputIterator __last,
+     253              :                       size_type __n,
+     254              :                       const allocator_type& __a)
+     255              :         : unordered_map(__first, __last, __n, hasher(), key_equal(), __a)
+     256              :         { }
+     257              : 
+     258              :       template<typename _InputIterator>
+     259              :         unordered_map(_InputIterator __first, _InputIterator __last,
+     260              :                       size_type __n, const hasher& __hf,
+     261              :                       const allocator_type& __a)
+     262              :           : unordered_map(__first, __last, __n, __hf, key_equal(), __a)
+     263              :         { }
+     264              : 
+     265              :       unordered_map(initializer_list<value_type> __l,
+     266              :                     size_type __n,
+     267              :                     const allocator_type& __a)
+     268              :       : unordered_map(__l, __n, hasher(), key_equal(), __a)
+     269              :       { }
+     270              : 
+     271              :       unordered_map(initializer_list<value_type> __l,
+     272              :                     size_type __n, const hasher& __hf,
+     273              :                     const allocator_type& __a)
+     274              :       : unordered_map(__l, __n, __hf, key_equal(), __a)
+     275              :       { }
+     276              : 
+     277              :       /// Copy assignment operator.
+     278              :       unordered_map&
+     279              :       operator=(const unordered_map&) = default;
+     280              : 
+     281              :       /// Move assignment operator.
+     282              :       unordered_map&
+     283              :       operator=(unordered_map&&) = default;
+     284              : 
+     285              :       /**
+     286              :        *  @brief  %Unordered_map list assignment operator.
+     287              :        *  @param  __l  An initializer_list.
+     288              :        *
+     289              :        *  This function fills an %unordered_map with copies of the elements in
+     290              :        *  the initializer list @a __l.
+     291              :        *
+     292              :        *  Note that the assignment completely changes the %unordered_map and
+     293              :        *  that the resulting %unordered_map's size is the same as the number
+     294              :        *  of elements assigned.
+     295              :        */
+     296              :       unordered_map&
+     297              :       operator=(initializer_list<value_type> __l)
+     298              :       {
+     299              :         _M_h = __l;
+     300              :         return *this;
+     301              :       }
+     302              : 
+     303              :       ///  Returns the allocator object used by the %unordered_map.
+     304              :       allocator_type
+     305              :       get_allocator() const noexcept
+     306              :       { return _M_h.get_allocator(); }
+     307              : 
+     308              :       // size and capacity:
+     309              : 
+     310              :       ///  Returns true if the %unordered_map is empty.
+     311              :       _GLIBCXX_NODISCARD bool
+     312              :       empty() const noexcept
+     313              :       { return _M_h.empty(); }
+     314              : 
+     315              :       ///  Returns the size of the %unordered_map.
+     316              :       size_type
+     317              :       size() const noexcept
+     318              :       { return _M_h.size(); }
+     319              : 
+     320              :       ///  Returns the maximum size of the %unordered_map.
+     321              :       size_type
+     322              :       max_size() const noexcept
+     323              :       { return _M_h.max_size(); }
+     324              : 
+     325              :       // iterators.
+     326              : 
+     327              :       /**
+     328              :        *  Returns a read/write iterator that points to the first element in the
+     329              :        *  %unordered_map.
+     330              :        */
+     331              :       iterator
+     332        58918 :       begin() noexcept
+     333        58918 :       { return _M_h.begin(); }
+     334              : 
+     335              :       ///@{
+     336              :       /**
+     337              :        *  Returns a read-only (constant) iterator that points to the first
+     338              :        *  element in the %unordered_map.
+     339              :        */
+     340              :       const_iterator
+     341              :       begin() const noexcept
+     342              :       { return _M_h.begin(); }
+     343              : 
+     344              :       const_iterator
+     345              :       cbegin() const noexcept
+     346              :       { return _M_h.begin(); }
+     347              :       ///@}
+     348              : 
+     349              :       /**
+     350              :        *  Returns a read/write iterator that points one past the last element in
+     351              :        *  the %unordered_map.
+     352              :        */
+     353              :       iterator
+     354        58918 :       end() noexcept
+     355        58918 :       { return _M_h.end(); }
+     356              : 
+     357              :       ///@{
+     358              :       /**
+     359              :        *  Returns a read-only (constant) iterator that points one past the last
+     360              :        *  element in the %unordered_map.
+     361              :        */
+     362              :       const_iterator
+     363              :       end() const noexcept
+     364              :       { return _M_h.end(); }
+     365              : 
+     366              :       const_iterator
+     367              :       cend() const noexcept
+     368              :       { return _M_h.end(); }
+     369              :       ///@}
+     370              : 
+     371              :       // modifiers.
+     372              : 
+     373              :       /**
+     374              :        *  @brief Attempts to build and insert a std::pair into the
+     375              :        *  %unordered_map.
+     376              :        *
+     377              :        *  @param __args  Arguments used to generate a new pair instance (see
+     378              :        *                std::piecewise_contruct for passing arguments to each
+     379              :        *                part of the pair constructor).
+     380              :        *
+     381              :        *  @return  A pair, of which the first element is an iterator that points
+     382              :        *           to the possibly inserted pair, and the second is a bool that
+     383              :        *           is true if the pair was actually inserted.
+     384              :        *
+     385              :        *  This function attempts to build and insert a (key, value) %pair into
+     386              :        *  the %unordered_map.
+     387              :        *  An %unordered_map relies on unique keys and thus a %pair is only
+     388              :        *  inserted if its first element (the key) is not already present in the
+     389              :        *  %unordered_map.
+     390              :        *
+     391              :        *  Insertion requires amortized constant time.
+     392              :        */
+     393              :       template<typename... _Args>
+     394              :         std::pair<iterator, bool>
+     395              :         emplace(_Args&&... __args)
+     396              :         { return _M_h.emplace(std::forward<_Args>(__args)...); }
+     397              : 
+     398              :       /**
+     399              :        *  @brief Attempts to build and insert a std::pair into the
+     400              :        *  %unordered_map.
+     401              :        *
+     402              :        *  @param  __pos  An iterator that serves as a hint as to where the pair
+     403              :        *                should be inserted.
+     404              :        *  @param  __args  Arguments used to generate a new pair instance (see
+     405              :        *                 std::piecewise_contruct for passing arguments to each
+     406              :        *                 part of the pair constructor).
+     407              :        *  @return An iterator that points to the element with key of the
+     408              :        *          std::pair built from @a __args (may or may not be that
+     409              :        *          std::pair).
+     410              :        *
+     411              :        *  This function is not concerned about whether the insertion took place,
+     412              :        *  and thus does not return a boolean like the single-argument emplace()
+     413              :        *  does.
+     414              :        *  Note that the first parameter is only a hint and can potentially
+     415              :        *  improve the performance of the insertion process. A bad hint would
+     416              :        *  cause no gains in efficiency.
+     417              :        *
+     418              :        *  See
+     419              :        *  https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
+     420              :        *  for more on @a hinting.
+     421              :        *
+     422              :        *  Insertion requires amortized constant time.
+     423              :        */
+     424              :       template<typename... _Args>
+     425              :         iterator
+     426              :         emplace_hint(const_iterator __pos, _Args&&... __args)
+     427              :         { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
+     428              : 
+     429              : #if __cplusplus > 201402L
+     430              :       /// Extract a node.
+     431              :       node_type
+     432              :       extract(const_iterator __pos)
+     433              :       {
+     434              :         __glibcxx_assert(__pos != end());
+     435              :         return _M_h.extract(__pos);
+     436              :       }
+     437              : 
+     438              :       /// Extract a node.
+     439              :       node_type
+     440              :       extract(const key_type& __key)
+     441              :       { return _M_h.extract(__key); }
+     442              : 
+     443              :       /// Re-insert an extracted node.
+     444              :       insert_return_type
+     445              :       insert(node_type&& __nh)
+     446              :       { return _M_h._M_reinsert_node(std::move(__nh)); }
+     447              : 
+     448              :       /// Re-insert an extracted node.
+     449              :       iterator
+     450              :       insert(const_iterator, node_type&& __nh)
+     451              :       { return _M_h._M_reinsert_node(std::move(__nh)).position; }
+     452              : 
+     453              : #define __cpp_lib_unordered_map_try_emplace 201411L
+     454              :       /**
+     455              :        *  @brief Attempts to build and insert a std::pair into the
+     456              :        *  %unordered_map.
+     457              :        *
+     458              :        *  @param __k    Key to use for finding a possibly existing pair in
+     459              :        *                the unordered_map.
+     460              :        *  @param __args  Arguments used to generate the .second for a 
+     461              :        *                new pair instance.
+     462              :        *
+     463              :        *  @return  A pair, of which the first element is an iterator that points
+     464              :        *           to the possibly inserted pair, and the second is a bool that
+     465              :        *           is true if the pair was actually inserted.
+     466              :        *
+     467              :        *  This function attempts to build and insert a (key, value) %pair into
+     468              :        *  the %unordered_map.
+     469              :        *  An %unordered_map relies on unique keys and thus a %pair is only
+     470              :        *  inserted if its first element (the key) is not already present in the
+     471              :        *  %unordered_map.
+     472              :        *  If a %pair is not inserted, this function has no effect.
+     473              :        *
+     474              :        *  Insertion requires amortized constant time.
+     475              :        */
+     476              :       template <typename... _Args>
+     477              :         pair<iterator, bool>
+     478              :         try_emplace(const key_type& __k, _Args&&... __args)
+     479              :         {
+     480              :           return _M_h.try_emplace(cend(), __k, std::forward<_Args>(__args)...);
+     481              :         }
+     482              : 
+     483              :       // move-capable overload
+     484              :       template <typename... _Args>
+     485              :         pair<iterator, bool>
+     486              :         try_emplace(key_type&& __k, _Args&&... __args)
+     487              :         {
+     488              :           return _M_h.try_emplace(cend(), std::move(__k),
+     489              :                                   std::forward<_Args>(__args)...);
+     490              :         }
+     491              : 
+     492              :       /**
+     493              :        *  @brief Attempts to build and insert a std::pair into the
+     494              :        *  %unordered_map.
+     495              :        *
+     496              :        *  @param  __hint  An iterator that serves as a hint as to where the pair
+     497              :        *                should be inserted.
+     498              :        *  @param __k    Key to use for finding a possibly existing pair in
+     499              :        *                the unordered_map.
+     500              :        *  @param __args  Arguments used to generate the .second for a 
+     501              :        *                new pair instance.
+     502              :        *  @return An iterator that points to the element with key of the
+     503              :        *          std::pair built from @a __args (may or may not be that
+     504              :        *          std::pair).
+     505              :        *
+     506              :        *  This function is not concerned about whether the insertion took place,
+     507              :        *  and thus does not return a boolean like the single-argument emplace()
+     508              :        *  does. However, if insertion did not take place,
+     509              :        *  this function has no effect.
+     510              :        *  Note that the first parameter is only a hint and can potentially
+     511              :        *  improve the performance of the insertion process. A bad hint would
+     512              :        *  cause no gains in efficiency.
+     513              :        *
+     514              :        *  See
+     515              :        *  https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
+     516              :        *  for more on @a hinting.
+     517              :        *
+     518              :        *  Insertion requires amortized constant time.
+     519              :        */
+     520              :       template <typename... _Args>
+     521              :         iterator
+     522              :         try_emplace(const_iterator __hint, const key_type& __k,
+     523              :                     _Args&&... __args)
+     524              :         {
+     525              :           return _M_h.try_emplace(__hint, __k,
+     526              :                                   std::forward<_Args>(__args)...).first;
+     527              :         }
+     528              : 
+     529              :       // move-capable overload
+     530              :       template <typename... _Args>
+     531              :         iterator
+     532              :         try_emplace(const_iterator __hint, key_type&& __k, _Args&&... __args)
+     533              :         {
+     534              :           return _M_h.try_emplace(__hint, std::move(__k),
+     535              :                                   std::forward<_Args>(__args)...).first;
+     536              :         }
+     537              : #endif // C++17
+     538              : 
+     539              :       ///@{
+     540              :       /**
+     541              :        *  @brief Attempts to insert a std::pair into the %unordered_map.
+     542              : 
+     543              :        *  @param __x Pair to be inserted (see std::make_pair for easy
+     544              :        *             creation of pairs).
+     545              :        *
+     546              :        *  @return  A pair, of which the first element is an iterator that 
+     547              :        *           points to the possibly inserted pair, and the second is 
+     548              :        *           a bool that is true if the pair was actually inserted.
+     549              :        *
+     550              :        *  This function attempts to insert a (key, value) %pair into the
+     551              :        *  %unordered_map. An %unordered_map relies on unique keys and thus a
+     552              :        *  %pair is only inserted if its first element (the key) is not already
+     553              :        *  present in the %unordered_map.
+     554              :        *
+     555              :        *  Insertion requires amortized constant time.
+     556              :        */
+     557              :       std::pair<iterator, bool>
+     558              :       insert(const value_type& __x)
+     559              :       { return _M_h.insert(__x); }
+     560              : 
+     561              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     562              :       // 2354. Unnecessary copying when inserting into maps with braced-init
+     563              :       std::pair<iterator, bool>
+     564              :       insert(value_type&& __x)
+     565              :       { return _M_h.insert(std::move(__x)); }
+     566              : 
+     567              :       template<typename _Pair>
+     568              :         __enable_if_t<is_constructible<value_type, _Pair&&>::value,
+     569              :                       pair<iterator, bool>>
+     570              :         insert(_Pair&& __x)
+     571              :         { return _M_h.emplace(std::forward<_Pair>(__x)); }
+     572              :       ///@}
+     573              : 
+     574              :       ///@{
+     575              :       /**
+     576              :        *  @brief Attempts to insert a std::pair into the %unordered_map.
+     577              :        *  @param  __hint  An iterator that serves as a hint as to where the
+     578              :        *                 pair should be inserted.
+     579              :        *  @param  __x  Pair to be inserted (see std::make_pair for easy creation
+     580              :        *               of pairs).
+     581              :        *  @return An iterator that points to the element with key of
+     582              :        *           @a __x (may or may not be the %pair passed in).
+     583              :        *
+     584              :        *  This function is not concerned about whether the insertion took place,
+     585              :        *  and thus does not return a boolean like the single-argument insert()
+     586              :        *  does.  Note that the first parameter is only a hint and can
+     587              :        *  potentially improve the performance of the insertion process.  A bad
+     588              :        *  hint would cause no gains in efficiency.
+     589              :        *
+     590              :        *  See
+     591              :        *  https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
+     592              :        *  for more on @a hinting.
+     593              :        *
+     594              :        *  Insertion requires amortized constant time.
+     595              :        */
+     596              :       iterator
+     597              :       insert(const_iterator __hint, const value_type& __x)
+     598              :       { return _M_h.insert(__hint, __x); }
+     599              : 
+     600              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     601              :       // 2354. Unnecessary copying when inserting into maps with braced-init
+     602              :       iterator
+     603              :       insert(const_iterator __hint, value_type&& __x)
+     604              :       { return _M_h.insert(__hint, std::move(__x)); }
+     605              : 
+     606              :       template<typename _Pair>
+     607              :         __enable_if_t<is_constructible<value_type, _Pair&&>::value, iterator>
+     608              :         insert(const_iterator __hint, _Pair&& __x)
+     609              :         { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); }
+     610              :       ///@}
+     611              : 
+     612              :       /**
+     613              :        *  @brief A template function that attempts to insert a range of
+     614              :        *  elements.
+     615              :        *  @param  __first  Iterator pointing to the start of the range to be
+     616              :        *                   inserted.
+     617              :        *  @param  __last  Iterator pointing to the end of the range.
+     618              :        *
+     619              :        *  Complexity similar to that of the range constructor.
+     620              :        */
+     621              :       template<typename _InputIterator>
+     622              :         void
+     623              :         insert(_InputIterator __first, _InputIterator __last)
+     624              :         { _M_h.insert(__first, __last); }
+     625              : 
+     626              :       /**
+     627              :        *  @brief Attempts to insert a list of elements into the %unordered_map.
+     628              :        *  @param  __l  A std::initializer_list<value_type> of elements
+     629              :        *               to be inserted.
+     630              :        *
+     631              :        *  Complexity similar to that of the range constructor.
+     632              :        */
+     633              :       void
+     634              :       insert(initializer_list<value_type> __l)
+     635              :       { _M_h.insert(__l); }
+     636              : 
+     637              : 
+     638              : #if __cplusplus > 201402L
+     639              :       /**
+     640              :        *  @brief Attempts to insert a std::pair into the %unordered_map.
+     641              :        *  @param __k    Key to use for finding a possibly existing pair in
+     642              :        *                the map.
+     643              :        *  @param __obj  Argument used to generate the .second for a pair 
+     644              :        *                instance.
+     645              :        *
+     646              :        *  @return  A pair, of which the first element is an iterator that 
+     647              :        *           points to the possibly inserted pair, and the second is 
+     648              :        *           a bool that is true if the pair was actually inserted.
+     649              :        *
+     650              :        *  This function attempts to insert a (key, value) %pair into the
+     651              :        *  %unordered_map. An %unordered_map relies on unique keys and thus a
+     652              :        *  %pair is only inserted if its first element (the key) is not already
+     653              :        *  present in the %unordered_map.
+     654              :        *  If the %pair was already in the %unordered_map, the .second of 
+     655              :        *  the %pair is assigned from __obj.
+     656              :        *
+     657              :        *  Insertion requires amortized constant time.
+     658              :        */
+     659              :       template <typename _Obj>
+     660              :         pair<iterator, bool>
+     661              :         insert_or_assign(const key_type& __k, _Obj&& __obj)
+     662              :         {
+     663              :           auto __ret = _M_h.try_emplace(cend(), __k,
+     664              :                                         std::forward<_Obj>(__obj));
+     665              :           if (!__ret.second)
+     666              :             __ret.first->second = std::forward<_Obj>(__obj);
+     667              :           return __ret;
+     668              :         }
+     669              : 
+     670              :       // move-capable overload
+     671              :       template <typename _Obj>
+     672              :         pair<iterator, bool>
+     673              :         insert_or_assign(key_type&& __k, _Obj&& __obj)
+     674              :         {
+     675              :           auto __ret = _M_h.try_emplace(cend(), std::move(__k),
+     676              :                                         std::forward<_Obj>(__obj));
+     677              :           if (!__ret.second)
+     678              :             __ret.first->second = std::forward<_Obj>(__obj);
+     679              :           return __ret;
+     680              :         }
+     681              : 
+     682              :       /**
+     683              :        *  @brief Attempts to insert a std::pair into the %unordered_map.
+     684              :        *  @param  __hint  An iterator that serves as a hint as to where the
+     685              :        *                  pair should be inserted.
+     686              :        *  @param __k    Key to use for finding a possibly existing pair in
+     687              :        *                the unordered_map.
+     688              :        *  @param __obj  Argument used to generate the .second for a pair 
+     689              :        *                instance.
+     690              :        *  @return An iterator that points to the element with key of
+     691              :        *           @a __x (may or may not be the %pair passed in).
+     692              :        *
+     693              :        *  This function is not concerned about whether the insertion took place,
+     694              :        *  and thus does not return a boolean like the single-argument insert()
+     695              :        *  does.         
+     696              :        *  If the %pair was already in the %unordered map, the .second of
+     697              :        *  the %pair is assigned from __obj.
+     698              :        *  Note that the first parameter is only a hint and can
+     699              :        *  potentially improve the performance of the insertion process.  A bad
+     700              :        *  hint would cause no gains in efficiency.
+     701              :        *
+     702              :        *  See
+     703              :        *  https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
+     704              :        *  for more on @a hinting.
+     705              :        *
+     706              :        *  Insertion requires amortized constant time.
+     707              :        */
+     708              :       template <typename _Obj>
+     709              :         iterator
+     710              :         insert_or_assign(const_iterator __hint, const key_type& __k,
+     711              :                          _Obj&& __obj)
+     712              :         {
+     713              :           auto __ret = _M_h.try_emplace(__hint, __k, std::forward<_Obj>(__obj));
+     714              :           if (!__ret.second)
+     715              :             __ret.first->second = std::forward<_Obj>(__obj);
+     716              :           return __ret.first;
+     717              :         }
+     718              : 
+     719              :       // move-capable overload
+     720              :       template <typename _Obj>
+     721              :         iterator
+     722              :         insert_or_assign(const_iterator __hint, key_type&& __k, _Obj&& __obj)
+     723              :         {
+     724              :           auto __ret = _M_h.try_emplace(__hint, std::move(__k),
+     725              :                                         std::forward<_Obj>(__obj));
+     726              :           if (!__ret.second)
+     727              :             __ret.first->second = std::forward<_Obj>(__obj);
+     728              :           return __ret.first;
+     729              :         }
+     730              : #endif
+     731              : 
+     732              :       ///@{
+     733              :       /**
+     734              :        *  @brief Erases an element from an %unordered_map.
+     735              :        *  @param  __position  An iterator pointing to the element to be erased.
+     736              :        *  @return An iterator pointing to the element immediately following
+     737              :        *          @a __position prior to the element being erased. If no such
+     738              :        *          element exists, end() is returned.
+     739              :        *
+     740              :        *  This function erases an element, pointed to by the given iterator,
+     741              :        *  from an %unordered_map.
+     742              :        *  Note that this function only erases the element, and that if the
+     743              :        *  element is itself a pointer, the pointed-to memory is not touched in
+     744              :        *  any way.  Managing the pointer is the user's responsibility.
+     745              :        */
+     746              :       iterator
+     747              :       erase(const_iterator __position)
+     748              :       { return _M_h.erase(__position); }
+     749              : 
+     750              :       // LWG 2059.
+     751              :       iterator
+     752              :       erase(iterator __position)
+     753              :       { return _M_h.erase(__position); }
+     754              :       ///@}
+     755              : 
+     756              :       /**
+     757              :        *  @brief Erases elements according to the provided key.
+     758              :        *  @param  __x  Key of element to be erased.
+     759              :        *  @return  The number of elements erased.
+     760              :        *
+     761              :        *  This function erases all the elements located by the given key from
+     762              :        *  an %unordered_map. For an %unordered_map the result of this function
+     763              :        *  can only be 0 (not present) or 1 (present).
+     764              :        *  Note that this function only erases the element, and that if the
+     765              :        *  element is itself a pointer, the pointed-to memory is not touched in
+     766              :        *  any way.  Managing the pointer is the user's responsibility.
+     767              :        */
+     768              :       size_type
+     769              :       erase(const key_type& __x)
+     770              :       { return _M_h.erase(__x); }
+     771              : 
+     772              :       /**
+     773              :        *  @brief Erases a [__first,__last) range of elements from an
+     774              :        *  %unordered_map.
+     775              :        *  @param  __first  Iterator pointing to the start of the range to be
+     776              :        *                  erased.
+     777              :        *  @param __last  Iterator pointing to the end of the range to
+     778              :        *                be erased.
+     779              :        *  @return The iterator @a __last.
+     780              :        *
+     781              :        *  This function erases a sequence of elements from an %unordered_map.
+     782              :        *  Note that this function only erases the elements, and that if
+     783              :        *  the element is itself a pointer, the pointed-to memory is not touched
+     784              :        *  in any way.  Managing the pointer is the user's responsibility.
+     785              :        */
+     786              :       iterator
+     787              :       erase(const_iterator __first, const_iterator __last)
+     788              :       { return _M_h.erase(__first, __last); }
+     789              : 
+     790              :       /**
+     791              :        *  Erases all elements in an %unordered_map.
+     792              :        *  Note that this function only erases the elements, and that if the
+     793              :        *  elements themselves are pointers, the pointed-to memory is not touched
+     794              :        *  in any way.  Managing the pointer is the user's responsibility.
+     795              :        */
+     796              :       void
+     797              :       clear() noexcept
+     798              :       { _M_h.clear(); }
+     799              : 
+     800              :       /**
+     801              :        *  @brief  Swaps data with another %unordered_map.
+     802              :        *  @param  __x  An %unordered_map of the same element and allocator
+     803              :        *  types.
+     804              :        *
+     805              :        *  This exchanges the elements between two %unordered_map in constant
+     806              :        *  time.
+     807              :        *  Note that the global std::swap() function is specialized such that
+     808              :        *  std::swap(m1,m2) will feed to this function.
+     809              :        */
+     810              :       void
+     811              :       swap(unordered_map& __x)
+     812              :       noexcept( noexcept(_M_h.swap(__x._M_h)) )
+     813              :       { _M_h.swap(__x._M_h); }
+     814              : 
+     815              : #if __cplusplus > 201402L
+     816              :       template<typename, typename, typename>
+     817              :         friend class std::_Hash_merge_helper;
+     818              : 
+     819              :       template<typename _H2, typename _P2>
+     820              :         void
+     821              :         merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source)
+     822              :         {
+     823              :           using _Merge_helper = _Hash_merge_helper<unordered_map, _H2, _P2>;
+     824              :           _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
+     825              :         }
+     826              : 
+     827              :       template<typename _H2, typename _P2>
+     828              :         void
+     829              :         merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
+     830              :         { merge(__source); }
+     831              : 
+     832              :       template<typename _H2, typename _P2>
+     833              :         void
+     834              :         merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source)
+     835              :         {
+     836              :           using _Merge_helper = _Hash_merge_helper<unordered_map, _H2, _P2>;
+     837              :           _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
+     838              :         }
+     839              : 
+     840              :       template<typename _H2, typename _P2>
+     841              :         void
+     842              :         merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
+     843              :         { merge(__source); }
+     844              : #endif // C++17
+     845              : 
+     846              :       // observers.
+     847              : 
+     848              :       ///  Returns the hash functor object with which the %unordered_map was
+     849              :       ///  constructed.
+     850              :       hasher
+     851              :       hash_function() const
+     852              :       { return _M_h.hash_function(); }
+     853              : 
+     854              :       ///  Returns the key comparison object with which the %unordered_map was
+     855              :       ///  constructed.
+     856              :       key_equal
+     857              :       key_eq() const
+     858              :       { return _M_h.key_eq(); }
+     859              : 
+     860              :       // lookup.
+     861              : 
+     862              :       ///@{
+     863              :       /**
+     864              :        *  @brief Tries to locate an element in an %unordered_map.
+     865              :        *  @param  __x  Key to be located.
+     866              :        *  @return  Iterator pointing to sought-after element, or end() if not
+     867              :        *           found.
+     868              :        *
+     869              :        *  This function takes a key and tries to locate the element with which
+     870              :        *  the key matches.  If successful the function returns an iterator
+     871              :        *  pointing to the sought after element.  If unsuccessful it returns the
+     872              :        *  past-the-end ( @c end() ) iterator.
+     873              :        */
+     874              :       iterator
+     875              :       find(const key_type& __x)
+     876              :       { return _M_h.find(__x); }
+     877              : 
+     878              : #if __cplusplus > 201703L
+     879              :       template<typename _Kt>
+     880              :         auto
+     881              :         find(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x))
+     882              :         { return _M_h._M_find_tr(__x); }
+     883              : #endif
+     884              : 
+     885              :       const_iterator
+     886              :       find(const key_type& __x) const
+     887              :       { return _M_h.find(__x); }
+     888              : 
+     889              : #if __cplusplus > 201703L
+     890              :       template<typename _Kt>
+     891              :         auto
+     892              :         find(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x))
+     893              :         { return _M_h._M_find_tr(__x); }
+     894              : #endif
+     895              :       ///@}
+     896              : 
+     897              :       ///@{
+     898              :       /**
+     899              :        *  @brief  Finds the number of elements.
+     900              :        *  @param  __x  Key to count.
+     901              :        *  @return  Number of elements with specified key.
+     902              :        *
+     903              :        *  This function only makes sense for %unordered_multimap; for
+     904              :        *  %unordered_map the result will either be 0 (not present) or 1
+     905              :        *  (present).
+     906              :        */
+     907              :       size_type
+     908              :       count(const key_type& __x) const
+     909              :       { return _M_h.count(__x); }
+     910              : 
+     911              : #if __cplusplus > 201703L
+     912              :       template<typename _Kt>
+     913              :         auto
+     914              :         count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x))
+     915              :         { return _M_h._M_count_tr(__x); }
+     916              : #endif
+     917              :       ///@}
+     918              : 
+     919              : #if __cplusplus > 201703L
+     920              :       ///@{
+     921              :       /**
+     922              :        *  @brief  Finds whether an element with the given key exists.
+     923              :        *  @param  __x  Key of elements to be located.
+     924              :        *  @return  True if there is any element with the specified key.
+     925              :        */
+     926              :       bool
+     927              :       contains(const key_type& __x) const
+     928              :       { return _M_h.find(__x) != _M_h.end(); }
+     929              : 
+     930              :       template<typename _Kt>
+     931              :         auto
+     932              :         contains(const _Kt& __x) const
+     933              :         -> decltype(_M_h._M_find_tr(__x), void(), true)
+     934              :         { return _M_h._M_find_tr(__x) != _M_h.end(); }
+     935              :       ///@}
+     936              : #endif
+     937              : 
+     938              :       ///@{
+     939              :       /**
+     940              :        *  @brief Finds a subsequence matching given key.
+     941              :        *  @param  __x  Key to be located.
+     942              :        *  @return  Pair of iterators that possibly points to the subsequence
+     943              :        *           matching given key.
+     944              :        *
+     945              :        *  This function probably only makes sense for %unordered_multimap.
+     946              :        */
+     947              :       std::pair<iterator, iterator>
+     948              :       equal_range(const key_type& __x)
+     949              :       { return _M_h.equal_range(__x); }
+     950              : 
+     951              : #if __cplusplus > 201703L
+     952              :       template<typename _Kt>
+     953              :         auto
+     954              :         equal_range(const _Kt& __x)
+     955              :         -> decltype(_M_h._M_equal_range_tr(__x))
+     956              :         { return _M_h._M_equal_range_tr(__x); }
+     957              : #endif
+     958              : 
+     959              :       std::pair<const_iterator, const_iterator>
+     960              :       equal_range(const key_type& __x) const
+     961              :       { return _M_h.equal_range(__x); }
+     962              : 
+     963              : #if __cplusplus > 201703L
+     964              :       template<typename _Kt>
+     965              :         auto
+     966              :         equal_range(const _Kt& __x) const
+     967              :         -> decltype(_M_h._M_equal_range_tr(__x))
+     968              :         { return _M_h._M_equal_range_tr(__x); }
+     969              : #endif
+     970              :       ///@}
+     971              : 
+     972              :       ///@{
+     973              :       /**
+     974              :        *  @brief  Subscript ( @c [] ) access to %unordered_map data.
+     975              :        *  @param  __k  The key for which data should be retrieved.
+     976              :        *  @return  A reference to the data of the (key,data) %pair.
+     977              :        *
+     978              :        *  Allows for easy lookup with the subscript ( @c [] )operator.  Returns
+     979              :        *  data associated with the key specified in subscript.  If the key does
+     980              :        *  not exist, a pair with that key is created using default values, which
+     981              :        *  is then returned.
+     982              :        *
+     983              :        *  Lookup requires constant time.
+     984              :        */
+     985              :       mapped_type&
+     986        58918 :       operator[](const key_type& __k)
+     987        58918 :       { return _M_h[__k]; }
+     988              : 
+     989              :       mapped_type&
+     990      5864176 :       operator[](key_type&& __k)
+     991      5864176 :       { return _M_h[std::move(__k)]; }
+     992              :       ///@}
+     993              : 
+     994              :       ///@{
+     995              :       /**
+     996              :        *  @brief  Access to %unordered_map data.
+     997              :        *  @param  __k  The key for which data should be retrieved.
+     998              :        *  @return  A reference to the data whose key is equal to @a __k, if
+     999              :        *           such a data is present in the %unordered_map.
+    1000              :        *  @throw  std::out_of_range  If no such data is present.
+    1001              :        */
+    1002              :       mapped_type&
+    1003              :       at(const key_type& __k)
+    1004              :       { return _M_h.at(__k); }
+    1005              : 
+    1006              :       const mapped_type&
+    1007              :       at(const key_type& __k) const
+    1008              :       { return _M_h.at(__k); }
+    1009              :       ///@}
+    1010              : 
+    1011              :       // bucket interface.
+    1012              : 
+    1013              :       /// Returns the number of buckets of the %unordered_map.
+    1014              :       size_type
+    1015              :       bucket_count() const noexcept
+    1016              :       { return _M_h.bucket_count(); }
+    1017              : 
+    1018              :       /// Returns the maximum number of buckets of the %unordered_map.
+    1019              :       size_type
+    1020              :       max_bucket_count() const noexcept
+    1021              :       { return _M_h.max_bucket_count(); }
+    1022              : 
+    1023              :       /*
+    1024              :        * @brief  Returns the number of elements in a given bucket.
+    1025              :        * @param  __n  A bucket index.
+    1026              :        * @return  The number of elements in the bucket.
+    1027              :        */
+    1028              :       size_type
+    1029              :       bucket_size(size_type __n) const
+    1030              :       { return _M_h.bucket_size(__n); }
+    1031              : 
+    1032              :       /*
+    1033              :        * @brief  Returns the bucket index of a given element.
+    1034              :        * @param  __key  A key instance.
+    1035              :        * @return  The key bucket index.
+    1036              :        */
+    1037              :       size_type
+    1038              :       bucket(const key_type& __key) const
+    1039              :       { return _M_h.bucket(__key); }
+    1040              :       
+    1041              :       /**
+    1042              :        *  @brief  Returns a read/write iterator pointing to the first bucket
+    1043              :        *         element.
+    1044              :        *  @param  __n The bucket index.
+    1045              :        *  @return  A read/write local iterator.
+    1046              :        */
+    1047              :       local_iterator
+    1048              :       begin(size_type __n)
+    1049              :       { return _M_h.begin(__n); }
+    1050              : 
+    1051              :       ///@{
+    1052              :       /**
+    1053              :        *  @brief  Returns a read-only (constant) iterator pointing to the first
+    1054              :        *         bucket element.
+    1055              :        *  @param  __n The bucket index.
+    1056              :        *  @return  A read-only local iterator.
+    1057              :        */
+    1058              :       const_local_iterator
+    1059              :       begin(size_type __n) const
+    1060              :       { return _M_h.begin(__n); }
+    1061              : 
+    1062              :       const_local_iterator
+    1063              :       cbegin(size_type __n) const
+    1064              :       { return _M_h.cbegin(__n); }
+    1065              :       ///@}
+    1066              : 
+    1067              :       /**
+    1068              :        *  @brief  Returns a read/write iterator pointing to one past the last
+    1069              :        *         bucket elements.
+    1070              :        *  @param  __n The bucket index.
+    1071              :        *  @return  A read/write local iterator.
+    1072              :        */
+    1073              :       local_iterator
+    1074              :       end(size_type __n)
+    1075              :       { return _M_h.end(__n); }
+    1076              : 
+    1077              :       ///@{
+    1078              :       /**
+    1079              :        *  @brief  Returns a read-only (constant) iterator pointing to one past
+    1080              :        *         the last bucket elements.
+    1081              :        *  @param  __n The bucket index.
+    1082              :        *  @return  A read-only local iterator.
+    1083              :        */
+    1084              :       const_local_iterator
+    1085              :       end(size_type __n) const
+    1086              :       { return _M_h.end(__n); }
+    1087              : 
+    1088              :       const_local_iterator
+    1089              :       cend(size_type __n) const
+    1090              :       { return _M_h.cend(__n); }
+    1091              :       ///@}
+    1092              : 
+    1093              :       // hash policy.
+    1094              : 
+    1095              :       /// Returns the average number of elements per bucket.
+    1096              :       float
+    1097              :       load_factor() const noexcept
+    1098              :       { return _M_h.load_factor(); }
+    1099              : 
+    1100              :       /// Returns a positive number that the %unordered_map tries to keep the
+    1101              :       /// load factor less than or equal to.
+    1102              :       float
+    1103              :       max_load_factor() const noexcept
+    1104              :       { return _M_h.max_load_factor(); }
+    1105              : 
+    1106              :       /**
+    1107              :        *  @brief  Change the %unordered_map maximum load factor.
+    1108              :        *  @param  __z The new maximum load factor.
+    1109              :        */
+    1110              :       void
+    1111              :       max_load_factor(float __z)
+    1112              :       { _M_h.max_load_factor(__z); }
+    1113              : 
+    1114              :       /**
+    1115              :        *  @brief  May rehash the %unordered_map.
+    1116              :        *  @param  __n The new number of buckets.
+    1117              :        *
+    1118              :        *  Rehash will occur only if the new number of buckets respect the
+    1119              :        *  %unordered_map maximum load factor.
+    1120              :        */
+    1121              :       void
+    1122              :       rehash(size_type __n)
+    1123              :       { _M_h.rehash(__n); }
+    1124              : 
+    1125              :       /**
+    1126              :        *  @brief  Prepare the %unordered_map for a specified number of
+    1127              :        *          elements.
+    1128              :        *  @param  __n Number of elements required.
+    1129              :        *
+    1130              :        *  Same as rehash(ceil(n / max_load_factor())).
+    1131              :        */
+    1132              :       void
+    1133              :       reserve(size_type __n)
+    1134              :       { _M_h.reserve(__n); }
+    1135              : 
+    1136              :       template<typename _Key1, typename _Tp1, typename _Hash1, typename _Pred1,
+    1137              :                typename _Alloc1>
+    1138              :         friend bool
+    1139              :         operator==(const unordered_map<_Key1, _Tp1, _Hash1, _Pred1, _Alloc1>&,
+    1140              :                    const unordered_map<_Key1, _Tp1, _Hash1, _Pred1, _Alloc1>&);
+    1141              :     };
+    1142              : 
+    1143              : #if __cpp_deduction_guides >= 201606
+    1144              : 
+    1145              :   template<typename _InputIterator,
+    1146              :            typename _Hash = hash<__iter_key_t<_InputIterator>>,
+    1147              :            typename _Pred = equal_to<__iter_key_t<_InputIterator>>,
+    1148              :            typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
+    1149              :            typename = _RequireInputIter<_InputIterator>,
+    1150              :            typename = _RequireNotAllocatorOrIntegral<_Hash>,
+    1151              :            typename = _RequireNotAllocator<_Pred>,
+    1152              :            typename = _RequireAllocator<_Allocator>>
+    1153              :     unordered_map(_InputIterator, _InputIterator,
+    1154              :                   typename unordered_map<int, int>::size_type = {},
+    1155              :                   _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
+    1156              :     -> unordered_map<__iter_key_t<_InputIterator>,
+    1157              :                      __iter_val_t<_InputIterator>,
+    1158              :                      _Hash, _Pred, _Allocator>;
+    1159              : 
+    1160              :   template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
+    1161              :            typename _Pred = equal_to<_Key>,
+    1162              :            typename _Allocator = allocator<pair<const _Key, _Tp>>,
+    1163              :            typename = _RequireNotAllocatorOrIntegral<_Hash>,
+    1164              :            typename = _RequireNotAllocator<_Pred>,
+    1165              :            typename = _RequireAllocator<_Allocator>>
+    1166              :     unordered_map(initializer_list<pair<_Key, _Tp>>,
+    1167              :                   typename unordered_map<int, int>::size_type = {},
+    1168              :                   _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
+    1169              :     -> unordered_map<_Key, _Tp, _Hash, _Pred, _Allocator>;
+    1170              : 
+    1171              :   template<typename _InputIterator, typename _Allocator,
+    1172              :            typename = _RequireInputIter<_InputIterator>,
+    1173              :            typename = _RequireAllocator<_Allocator>>
+    1174              :     unordered_map(_InputIterator, _InputIterator,
+    1175              :                   typename unordered_map<int, int>::size_type, _Allocator)
+    1176              :     -> unordered_map<__iter_key_t<_InputIterator>,
+    1177              :                      __iter_val_t<_InputIterator>,
+    1178              :                      hash<__iter_key_t<_InputIterator>>,
+    1179              :                      equal_to<__iter_key_t<_InputIterator>>,
+    1180              :                      _Allocator>;
+    1181              : 
+    1182              :   template<typename _InputIterator, typename _Allocator,
+    1183              :            typename = _RequireInputIter<_InputIterator>,
+    1184              :            typename = _RequireAllocator<_Allocator>>
+    1185              :     unordered_map(_InputIterator, _InputIterator, _Allocator)
+    1186              :     -> unordered_map<__iter_key_t<_InputIterator>,
+    1187              :                      __iter_val_t<_InputIterator>,
+    1188              :                      hash<__iter_key_t<_InputIterator>>,
+    1189              :                      equal_to<__iter_key_t<_InputIterator>>,
+    1190              :                      _Allocator>;
+    1191              : 
+    1192              :   template<typename _InputIterator, typename _Hash, typename _Allocator,
+    1193              :            typename = _RequireInputIter<_InputIterator>,
+    1194              :            typename = _RequireNotAllocatorOrIntegral<_Hash>,
+    1195              :            typename = _RequireAllocator<_Allocator>>
+    1196              :     unordered_map(_InputIterator, _InputIterator,
+    1197              :                   typename unordered_map<int, int>::size_type,
+    1198              :                   _Hash, _Allocator)
+    1199              :     -> unordered_map<__iter_key_t<_InputIterator>,
+    1200              :                      __iter_val_t<_InputIterator>, _Hash,
+    1201              :                      equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
+    1202              : 
+    1203              :   template<typename _Key, typename _Tp, typename _Allocator,
+    1204              :            typename = _RequireAllocator<_Allocator>>
+    1205              :     unordered_map(initializer_list<pair<_Key, _Tp>>,
+    1206              :                   typename unordered_map<int, int>::size_type,
+    1207              :                   _Allocator)
+    1208              :     -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
+    1209              : 
+    1210              :   template<typename _Key, typename _Tp, typename _Allocator,
+    1211              :            typename = _RequireAllocator<_Allocator>>
+    1212              :     unordered_map(initializer_list<pair<_Key, _Tp>>, _Allocator)
+    1213              :     -> unordered_map<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
+    1214              : 
+    1215              :   template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
+    1216              :            typename = _RequireNotAllocatorOrIntegral<_Hash>,
+    1217              :            typename = _RequireAllocator<_Allocator>>
+    1218              :     unordered_map(initializer_list<pair<_Key, _Tp>>,
+    1219              :                   typename unordered_map<int, int>::size_type,
+    1220              :                   _Hash, _Allocator)
+    1221              :     -> unordered_map<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>;
+    1222              : 
+    1223              : #endif
+    1224              : 
+    1225              :   /**
+    1226              :    *  @brief A standard container composed of equivalent keys
+    1227              :    *  (possibly containing multiple of each key value) that associates
+    1228              :    *  values of another type with the keys.
+    1229              :    *
+    1230              :    *  @ingroup unordered_associative_containers
+    1231              :    *  @headerfile unordered_map
+    1232              :    *  @since C++11
+    1233              :    *
+    1234              :    *  @tparam  _Key    Type of key objects.
+    1235              :    *  @tparam  _Tp     Type of mapped objects.
+    1236              :    *  @tparam  _Hash   Hashing function object type, defaults to hash<_Value>.
+    1237              :    *  @tparam  _Pred   Predicate function object type, defaults
+    1238              :    *                   to equal_to<_Value>.
+    1239              :    *  @tparam  _Alloc  Allocator type, defaults to
+    1240              :    *                   std::allocator<std::pair<const _Key, _Tp>>.
+    1241              :    *
+    1242              :    *  Meets the requirements of a <a href="tables.html#65">container</a>, and
+    1243              :    *  <a href="tables.html#xx">unordered associative container</a>
+    1244              :    *
+    1245              :    * The resulting value type of the container is std::pair<const _Key, _Tp>.
+    1246              :    *
+    1247              :    *  Base is _Hashtable, dispatched at compile time via template
+    1248              :    *  alias __ummap_hashtable.
+    1249              :    */
+    1250              :   template<typename _Key, typename _Tp,
+    1251              :            typename _Hash = hash<_Key>,
+    1252              :            typename _Pred = equal_to<_Key>,
+    1253              :            typename _Alloc = allocator<std::pair<const _Key, _Tp>>>
+    1254              :     class unordered_multimap
+    1255              :     {
+    1256              :       typedef __ummap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc>  _Hashtable;
+    1257              :       _Hashtable _M_h;
+    1258              : 
+    1259              :     public:
+    1260              :       // typedefs:
+    1261              :       ///@{
+    1262              :       /// Public typedefs.
+    1263              :       typedef typename _Hashtable::key_type     key_type;
+    1264              :       typedef typename _Hashtable::value_type   value_type;
+    1265              :       typedef typename _Hashtable::mapped_type  mapped_type;
+    1266              :       typedef typename _Hashtable::hasher       hasher;
+    1267              :       typedef typename _Hashtable::key_equal    key_equal;
+    1268              :       typedef typename _Hashtable::allocator_type allocator_type;
+    1269              :       ///@}
+    1270              : 
+    1271              :       ///@{
+    1272              :       ///  Iterator-related typedefs.
+    1273              :       typedef typename _Hashtable::pointer              pointer;
+    1274              :       typedef typename _Hashtable::const_pointer        const_pointer;
+    1275              :       typedef typename _Hashtable::reference            reference;
+    1276              :       typedef typename _Hashtable::const_reference      const_reference;
+    1277              :       typedef typename _Hashtable::iterator             iterator;
+    1278              :       typedef typename _Hashtable::const_iterator       const_iterator;
+    1279              :       typedef typename _Hashtable::local_iterator       local_iterator;
+    1280              :       typedef typename _Hashtable::const_local_iterator const_local_iterator;
+    1281              :       typedef typename _Hashtable::size_type            size_type;
+    1282              :       typedef typename _Hashtable::difference_type      difference_type;
+    1283              :       ///@}
+    1284              : 
+    1285              : #if __cplusplus > 201402L
+    1286              :       using node_type = typename _Hashtable::node_type;
+    1287              : #endif
+    1288              : 
+    1289              :       //construct/destroy/copy
+    1290              : 
+    1291              :       /// Default constructor.
+    1292              :       unordered_multimap() = default;
+    1293              : 
+    1294              :       /**
+    1295              :        *  @brief  Default constructor creates no elements.
+    1296              :        *  @param __n  Mnimal initial number of buckets.
+    1297              :        *  @param __hf  A hash functor.
+    1298              :        *  @param __eql  A key equality functor.
+    1299              :        *  @param __a  An allocator object.
+    1300              :        */
+    1301              :       explicit
+    1302              :       unordered_multimap(size_type __n,
+    1303              :                          const hasher& __hf = hasher(),
+    1304              :                          const key_equal& __eql = key_equal(),
+    1305              :                          const allocator_type& __a = allocator_type())
+    1306              :       : _M_h(__n, __hf, __eql, __a)
+    1307              :       { }
+    1308              : 
+    1309              :       /**
+    1310              :        *  @brief  Builds an %unordered_multimap from a range.
+    1311              :        *  @param  __first An input iterator.
+    1312              :        *  @param  __last  An input iterator.
+    1313              :        *  @param __n      Minimal initial number of buckets.
+    1314              :        *  @param __hf     A hash functor.
+    1315              :        *  @param __eql    A key equality functor.
+    1316              :        *  @param __a      An allocator object.
+    1317              :        *
+    1318              :        *  Create an %unordered_multimap consisting of copies of the elements
+    1319              :        *  from [__first,__last).  This is linear in N (where N is
+    1320              :        *  distance(__first,__last)).
+    1321              :        */
+    1322              :       template<typename _InputIterator>
+    1323              :         unordered_multimap(_InputIterator __first, _InputIterator __last,
+    1324              :                            size_type __n = 0,
+    1325              :                            const hasher& __hf = hasher(),
+    1326              :                            const key_equal& __eql = key_equal(),
+    1327              :                            const allocator_type& __a = allocator_type())
+    1328              :         : _M_h(__first, __last, __n, __hf, __eql, __a)
+    1329              :         { }
+    1330              : 
+    1331              :       /// Copy constructor.
+    1332              :       unordered_multimap(const unordered_multimap&) = default;
+    1333              : 
+    1334              :       /// Move constructor.
+    1335              :       unordered_multimap(unordered_multimap&&) = default;
+    1336              : 
+    1337              :       /**
+    1338              :        *  @brief Creates an %unordered_multimap with no elements.
+    1339              :        *  @param __a An allocator object.
+    1340              :        */
+    1341              :       explicit
+    1342              :       unordered_multimap(const allocator_type& __a)
+    1343              :       : _M_h(__a)
+    1344              :       { }
+    1345              : 
+    1346              :       /*
+    1347              :        *  @brief Copy constructor with allocator argument.
+    1348              :        * @param  __uset  Input %unordered_multimap to copy.
+    1349              :        * @param  __a  An allocator object.
+    1350              :        */
+    1351              :       unordered_multimap(const unordered_multimap& __ummap,
+    1352              :                          const allocator_type& __a)
+    1353              :       : _M_h(__ummap._M_h, __a)
+    1354              :       { }
+    1355              : 
+    1356              :       /*
+    1357              :        *  @brief  Move constructor with allocator argument.
+    1358              :        *  @param  __uset Input %unordered_multimap to move.
+    1359              :        *  @param  __a    An allocator object.
+    1360              :        */
+    1361              :       unordered_multimap(unordered_multimap&& __ummap,
+    1362              :                          const allocator_type& __a)
+    1363              :         noexcept( noexcept(_Hashtable(std::move(__ummap._M_h), __a)) )
+    1364              :       : _M_h(std::move(__ummap._M_h), __a)
+    1365              :       { }
+    1366              : 
+    1367              :       /**
+    1368              :        *  @brief  Builds an %unordered_multimap from an initializer_list.
+    1369              :        *  @param  __l  An initializer_list.
+    1370              :        *  @param __n  Minimal initial number of buckets.
+    1371              :        *  @param __hf  A hash functor.
+    1372              :        *  @param __eql  A key equality functor.
+    1373              :        *  @param  __a  An allocator object.
+    1374              :        *
+    1375              :        *  Create an %unordered_multimap consisting of copies of the elements in
+    1376              :        *  the list. This is linear in N (where N is @a __l.size()).
+    1377              :        */
+    1378              :       unordered_multimap(initializer_list<value_type> __l,
+    1379              :                          size_type __n = 0,
+    1380              :                          const hasher& __hf = hasher(),
+    1381              :                          const key_equal& __eql = key_equal(),
+    1382              :                          const allocator_type& __a = allocator_type())
+    1383              :       : _M_h(__l, __n, __hf, __eql, __a)
+    1384              :       { }
+    1385              : 
+    1386              :       unordered_multimap(size_type __n, const allocator_type& __a)
+    1387              :       : unordered_multimap(__n, hasher(), key_equal(), __a)
+    1388              :       { }
+    1389              : 
+    1390              :       unordered_multimap(size_type __n, const hasher& __hf,
+    1391              :                          const allocator_type& __a)
+    1392              :       : unordered_multimap(__n, __hf, key_equal(), __a)
+    1393              :       { }
+    1394              : 
+    1395              :       template<typename _InputIterator>
+    1396              :         unordered_multimap(_InputIterator __first, _InputIterator __last,
+    1397              :                            size_type __n,
+    1398              :                            const allocator_type& __a)
+    1399              :         : unordered_multimap(__first, __last, __n, hasher(), key_equal(), __a)
+    1400              :         { }
+    1401              : 
+    1402              :       template<typename _InputIterator>
+    1403              :         unordered_multimap(_InputIterator __first, _InputIterator __last,
+    1404              :                            size_type __n, const hasher& __hf,
+    1405              :                            const allocator_type& __a)
+    1406              :         : unordered_multimap(__first, __last, __n, __hf, key_equal(), __a)
+    1407              :         { }
+    1408              : 
+    1409              :       unordered_multimap(initializer_list<value_type> __l,
+    1410              :                          size_type __n,
+    1411              :                          const allocator_type& __a)
+    1412              :       : unordered_multimap(__l, __n, hasher(), key_equal(), __a)
+    1413              :       { }
+    1414              : 
+    1415              :       unordered_multimap(initializer_list<value_type> __l,
+    1416              :                          size_type __n, const hasher& __hf,
+    1417              :                          const allocator_type& __a)
+    1418              :       : unordered_multimap(__l, __n, __hf, key_equal(), __a)
+    1419              :       { }
+    1420              : 
+    1421              :       /// Copy assignment operator.
+    1422              :       unordered_multimap&
+    1423              :       operator=(const unordered_multimap&) = default;
+    1424              : 
+    1425              :       /// Move assignment operator.
+    1426              :       unordered_multimap&
+    1427              :       operator=(unordered_multimap&&) = default;
+    1428              : 
+    1429              :       /**
+    1430              :        *  @brief  %Unordered_multimap list assignment operator.
+    1431              :        *  @param  __l  An initializer_list.
+    1432              :        *
+    1433              :        *  This function fills an %unordered_multimap with copies of the
+    1434              :        *  elements in the initializer list @a __l.
+    1435              :        *
+    1436              :        *  Note that the assignment completely changes the %unordered_multimap
+    1437              :        *  and that the resulting %unordered_multimap's size is the same as the
+    1438              :        *  number of elements assigned.
+    1439              :        */
+    1440              :       unordered_multimap&
+    1441              :       operator=(initializer_list<value_type> __l)
+    1442              :       {
+    1443              :         _M_h = __l;
+    1444              :         return *this;
+    1445              :       }
+    1446              : 
+    1447              :       ///  Returns the allocator object used by the %unordered_multimap.
+    1448              :       allocator_type
+    1449              :       get_allocator() const noexcept
+    1450              :       { return _M_h.get_allocator(); }
+    1451              : 
+    1452              :       // size and capacity:
+    1453              : 
+    1454              :       ///  Returns true if the %unordered_multimap is empty.
+    1455              :       _GLIBCXX_NODISCARD bool
+    1456              :       empty() const noexcept
+    1457              :       { return _M_h.empty(); }
+    1458              : 
+    1459              :       ///  Returns the size of the %unordered_multimap.
+    1460              :       size_type
+    1461              :       size() const noexcept
+    1462              :       { return _M_h.size(); }
+    1463              : 
+    1464              :       ///  Returns the maximum size of the %unordered_multimap.
+    1465              :       size_type
+    1466              :       max_size() const noexcept
+    1467              :       { return _M_h.max_size(); }
+    1468              : 
+    1469              :       // iterators.
+    1470              : 
+    1471              :       /**
+    1472              :        *  Returns a read/write iterator that points to the first element in the
+    1473              :        *  %unordered_multimap.
+    1474              :        */
+    1475              :       iterator
+    1476              :       begin() noexcept
+    1477              :       { return _M_h.begin(); }
+    1478              : 
+    1479              :       ///@{
+    1480              :       /**
+    1481              :        *  Returns a read-only (constant) iterator that points to the first
+    1482              :        *  element in the %unordered_multimap.
+    1483              :        */
+    1484              :       const_iterator
+    1485              :       begin() const noexcept
+    1486              :       { return _M_h.begin(); }
+    1487              : 
+    1488              :       const_iterator
+    1489              :       cbegin() const noexcept
+    1490              :       { return _M_h.begin(); }
+    1491              :       ///@}
+    1492              : 
+    1493              :       /**
+    1494              :        *  Returns a read/write iterator that points one past the last element in
+    1495              :        *  the %unordered_multimap.
+    1496              :        */
+    1497              :       iterator
+    1498              :       end() noexcept
+    1499              :       { return _M_h.end(); }
+    1500              : 
+    1501              :       ///@{
+    1502              :       /**
+    1503              :        *  Returns a read-only (constant) iterator that points one past the last
+    1504              :        *  element in the %unordered_multimap.
+    1505              :        */
+    1506              :       const_iterator
+    1507              :       end() const noexcept
+    1508              :       { return _M_h.end(); }
+    1509              : 
+    1510              :       const_iterator
+    1511              :       cend() const noexcept
+    1512              :       { return _M_h.end(); }
+    1513              :       ///@}
+    1514              : 
+    1515              :       // modifiers.
+    1516              : 
+    1517              :       /**
+    1518              :        *  @brief Attempts to build and insert a std::pair into the
+    1519              :        *  %unordered_multimap.
+    1520              :        *
+    1521              :        *  @param __args  Arguments used to generate a new pair instance (see
+    1522              :        *                std::piecewise_contruct for passing arguments to each
+    1523              :        *                part of the pair constructor).
+    1524              :        *
+    1525              :        *  @return  An iterator that points to the inserted pair.
+    1526              :        *
+    1527              :        *  This function attempts to build and insert a (key, value) %pair into
+    1528              :        *  the %unordered_multimap.
+    1529              :        *
+    1530              :        *  Insertion requires amortized constant time.
+    1531              :        */
+    1532              :       template<typename... _Args>
+    1533              :         iterator
+    1534              :         emplace(_Args&&... __args)
+    1535              :         { return _M_h.emplace(std::forward<_Args>(__args)...); }
+    1536              : 
+    1537              :       /**
+    1538              :        *  @brief Attempts to build and insert a std::pair into the
+    1539              :        *  %unordered_multimap.
+    1540              :        *
+    1541              :        *  @param  __pos  An iterator that serves as a hint as to where the pair
+    1542              :        *                should be inserted.
+    1543              :        *  @param  __args  Arguments used to generate a new pair instance (see
+    1544              :        *                 std::piecewise_contruct for passing arguments to each
+    1545              :        *                 part of the pair constructor).
+    1546              :        *  @return An iterator that points to the element with key of the
+    1547              :        *          std::pair built from @a __args.
+    1548              :        *
+    1549              :        *  Note that the first parameter is only a hint and can potentially
+    1550              :        *  improve the performance of the insertion process. A bad hint would
+    1551              :        *  cause no gains in efficiency.
+    1552              :        *
+    1553              :        *  See
+    1554              :        *  https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
+    1555              :        *  for more on @a hinting.
+    1556              :        *
+    1557              :        *  Insertion requires amortized constant time.
+    1558              :        */
+    1559              :       template<typename... _Args>
+    1560              :         iterator
+    1561              :         emplace_hint(const_iterator __pos, _Args&&... __args)
+    1562              :         { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
+    1563              : 
+    1564              :       ///@{
+    1565              :       /**
+    1566              :        *  @brief Inserts a std::pair into the %unordered_multimap.
+    1567              :        *  @param __x Pair to be inserted (see std::make_pair for easy
+    1568              :        *             creation of pairs).
+    1569              :        *
+    1570              :        *  @return  An iterator that points to the inserted pair.
+    1571              :        *
+    1572              :        *  Insertion requires amortized constant time.
+    1573              :        */
+    1574              :       iterator
+    1575              :       insert(const value_type& __x)
+    1576              :       { return _M_h.insert(__x); }
+    1577              : 
+    1578              :       iterator
+    1579              :       insert(value_type&& __x)
+    1580              :       { return _M_h.insert(std::move(__x)); }
+    1581              : 
+    1582              :       template<typename _Pair>
+    1583              :         __enable_if_t<is_constructible<value_type, _Pair&&>::value, iterator>
+    1584              :         insert(_Pair&& __x)
+    1585              :         { return _M_h.emplace(std::forward<_Pair>(__x)); }
+    1586              :       ///@}
+    1587              : 
+    1588              :       ///@{
+    1589              :       /**
+    1590              :        *  @brief Inserts a std::pair into the %unordered_multimap.
+    1591              :        *  @param  __hint  An iterator that serves as a hint as to where the
+    1592              :        *                 pair should be inserted.
+    1593              :        *  @param  __x  Pair to be inserted (see std::make_pair for easy creation
+    1594              :        *               of pairs).
+    1595              :        *  @return An iterator that points to the element with key of
+    1596              :        *           @a __x (may or may not be the %pair passed in).
+    1597              :        *
+    1598              :        *  Note that the first parameter is only a hint and can potentially
+    1599              :        *  improve the performance of the insertion process.  A bad hint would
+    1600              :        *  cause no gains in efficiency.
+    1601              :        *
+    1602              :        *  See
+    1603              :        *  https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
+    1604              :        *  for more on @a hinting.
+    1605              :        *
+    1606              :        *  Insertion requires amortized constant time.
+    1607              :        */
+    1608              :       iterator
+    1609              :       insert(const_iterator __hint, const value_type& __x)
+    1610              :       { return _M_h.insert(__hint, __x); }
+    1611              : 
+    1612              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1613              :       // 2354. Unnecessary copying when inserting into maps with braced-init
+    1614              :       iterator
+    1615              :       insert(const_iterator __hint, value_type&& __x)
+    1616              :       { return _M_h.insert(__hint, std::move(__x)); }
+    1617              : 
+    1618              :       template<typename _Pair>
+    1619              :         __enable_if_t<is_constructible<value_type, _Pair&&>::value, iterator>
+    1620              :         insert(const_iterator __hint, _Pair&& __x)
+    1621              :         { return _M_h.emplace_hint(__hint, std::forward<_Pair>(__x)); }
+    1622              :       ///@}
+    1623              : 
+    1624              :       /**
+    1625              :        *  @brief A template function that attempts to insert a range of
+    1626              :        *  elements.
+    1627              :        *  @param  __first  Iterator pointing to the start of the range to be
+    1628              :        *                   inserted.
+    1629              :        *  @param  __last  Iterator pointing to the end of the range.
+    1630              :        *
+    1631              :        *  Complexity similar to that of the range constructor.
+    1632              :        */
+    1633              :       template<typename _InputIterator>
+    1634              :         void
+    1635              :         insert(_InputIterator __first, _InputIterator __last)
+    1636              :         { _M_h.insert(__first, __last); }
+    1637              : 
+    1638              :       /**
+    1639              :        *  @brief Attempts to insert a list of elements into the
+    1640              :        *  %unordered_multimap.
+    1641              :        *  @param  __l  A std::initializer_list<value_type> of elements
+    1642              :        *               to be inserted.
+    1643              :        *
+    1644              :        *  Complexity similar to that of the range constructor.
+    1645              :        */
+    1646              :       void
+    1647              :       insert(initializer_list<value_type> __l)
+    1648              :       { _M_h.insert(__l); }
+    1649              : 
+    1650              : #if __cplusplus > 201402L
+    1651              :       /// Extract a node.
+    1652              :       node_type
+    1653              :       extract(const_iterator __pos)
+    1654              :       {
+    1655              :         __glibcxx_assert(__pos != end());
+    1656              :         return _M_h.extract(__pos);
+    1657              :       }
+    1658              : 
+    1659              :       /// Extract a node.
+    1660              :       node_type
+    1661              :       extract(const key_type& __key)
+    1662              :       { return _M_h.extract(__key); }
+    1663              : 
+    1664              :       /// Re-insert an extracted node.
+    1665              :       iterator
+    1666              :       insert(node_type&& __nh)
+    1667              :       { return _M_h._M_reinsert_node_multi(cend(), std::move(__nh)); }
+    1668              : 
+    1669              :       /// Re-insert an extracted node.
+    1670              :       iterator
+    1671              :       insert(const_iterator __hint, node_type&& __nh)
+    1672              :       { return _M_h._M_reinsert_node_multi(__hint, std::move(__nh)); }
+    1673              : #endif // C++17
+    1674              : 
+    1675              :       ///@{
+    1676              :       /**
+    1677              :        *  @brief Erases an element from an %unordered_multimap.
+    1678              :        *  @param  __position  An iterator pointing to the element to be erased.
+    1679              :        *  @return An iterator pointing to the element immediately following
+    1680              :        *          @a __position prior to the element being erased. If no such
+    1681              :        *          element exists, end() is returned.
+    1682              :        *
+    1683              :        *  This function erases an element, pointed to by the given iterator,
+    1684              :        *  from an %unordered_multimap.
+    1685              :        *  Note that this function only erases the element, and that if the
+    1686              :        *  element is itself a pointer, the pointed-to memory is not touched in
+    1687              :        *  any way.  Managing the pointer is the user's responsibility.
+    1688              :        */
+    1689              :       iterator
+    1690              :       erase(const_iterator __position)
+    1691              :       { return _M_h.erase(__position); }
+    1692              : 
+    1693              :       // LWG 2059.
+    1694              :       iterator
+    1695              :       erase(iterator __position)
+    1696              :       { return _M_h.erase(__position); }
+    1697              :       ///@}
+    1698              : 
+    1699              :       /**
+    1700              :        *  @brief Erases elements according to the provided key.
+    1701              :        *  @param  __x  Key of elements to be erased.
+    1702              :        *  @return  The number of elements erased.
+    1703              :        *
+    1704              :        *  This function erases all the elements located by the given key from
+    1705              :        *  an %unordered_multimap.
+    1706              :        *  Note that this function only erases the element, and that if the
+    1707              :        *  element is itself a pointer, the pointed-to memory is not touched in
+    1708              :        *  any way.  Managing the pointer is the user's responsibility.
+    1709              :        */
+    1710              :       size_type
+    1711              :       erase(const key_type& __x)
+    1712              :       { return _M_h.erase(__x); }
+    1713              : 
+    1714              :       /**
+    1715              :        *  @brief Erases a [__first,__last) range of elements from an
+    1716              :        *  %unordered_multimap.
+    1717              :        *  @param  __first  Iterator pointing to the start of the range to be
+    1718              :        *                  erased.
+    1719              :        *  @param __last  Iterator pointing to the end of the range to
+    1720              :        *                be erased.
+    1721              :        *  @return The iterator @a __last.
+    1722              :        *
+    1723              :        *  This function erases a sequence of elements from an
+    1724              :        *  %unordered_multimap.
+    1725              :        *  Note that this function only erases the elements, and that if
+    1726              :        *  the element is itself a pointer, the pointed-to memory is not touched
+    1727              :        *  in any way.  Managing the pointer is the user's responsibility.
+    1728              :        */
+    1729              :       iterator
+    1730              :       erase(const_iterator __first, const_iterator __last)
+    1731              :       { return _M_h.erase(__first, __last); }
+    1732              : 
+    1733              :       /**
+    1734              :        *  Erases all elements in an %unordered_multimap.
+    1735              :        *  Note that this function only erases the elements, and that if the
+    1736              :        *  elements themselves are pointers, the pointed-to memory is not touched
+    1737              :        *  in any way.  Managing the pointer is the user's responsibility.
+    1738              :        */
+    1739              :       void
+    1740              :       clear() noexcept
+    1741              :       { _M_h.clear(); }
+    1742              : 
+    1743              :       /**
+    1744              :        *  @brief  Swaps data with another %unordered_multimap.
+    1745              :        *  @param  __x  An %unordered_multimap of the same element and allocator
+    1746              :        *  types.
+    1747              :        *
+    1748              :        *  This exchanges the elements between two %unordered_multimap in
+    1749              :        *  constant time.
+    1750              :        *  Note that the global std::swap() function is specialized such that
+    1751              :        *  std::swap(m1,m2) will feed to this function.
+    1752              :        */
+    1753              :       void
+    1754              :       swap(unordered_multimap& __x)
+    1755              :       noexcept( noexcept(_M_h.swap(__x._M_h)) )
+    1756              :       { _M_h.swap(__x._M_h); }
+    1757              : 
+    1758              : #if __cplusplus > 201402L
+    1759              :       template<typename, typename, typename>
+    1760              :         friend class std::_Hash_merge_helper;
+    1761              : 
+    1762              :       template<typename _H2, typename _P2>
+    1763              :         void
+    1764              :         merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>& __source)
+    1765              :         {
+    1766              :           using _Merge_helper
+    1767              :             = _Hash_merge_helper<unordered_multimap, _H2, _P2>;
+    1768              :           _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
+    1769              :         }
+    1770              : 
+    1771              :       template<typename _H2, typename _P2>
+    1772              :         void
+    1773              :         merge(unordered_multimap<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
+    1774              :         { merge(__source); }
+    1775              : 
+    1776              :       template<typename _H2, typename _P2>
+    1777              :         void
+    1778              :         merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>& __source)
+    1779              :         {
+    1780              :           using _Merge_helper
+    1781              :             = _Hash_merge_helper<unordered_multimap, _H2, _P2>;
+    1782              :           _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
+    1783              :         }
+    1784              : 
+    1785              :       template<typename _H2, typename _P2>
+    1786              :         void
+    1787              :         merge(unordered_map<_Key, _Tp, _H2, _P2, _Alloc>&& __source)
+    1788              :         { merge(__source); }
+    1789              : #endif // C++17
+    1790              : 
+    1791              :       // observers.
+    1792              : 
+    1793              :       ///  Returns the hash functor object with which the %unordered_multimap
+    1794              :       ///  was constructed.
+    1795              :       hasher
+    1796              :       hash_function() const
+    1797              :       { return _M_h.hash_function(); }
+    1798              : 
+    1799              :       ///  Returns the key comparison object with which the %unordered_multimap
+    1800              :       ///  was constructed.
+    1801              :       key_equal
+    1802              :       key_eq() const
+    1803              :       { return _M_h.key_eq(); }
+    1804              : 
+    1805              :       // lookup.
+    1806              : 
+    1807              :       ///@{
+    1808              :       /**
+    1809              :        *  @brief Tries to locate an element in an %unordered_multimap.
+    1810              :        *  @param  __x  Key to be located.
+    1811              :        *  @return  Iterator pointing to sought-after element, or end() if not
+    1812              :        *           found.
+    1813              :        *
+    1814              :        *  This function takes a key and tries to locate the element with which
+    1815              :        *  the key matches.  If successful the function returns an iterator
+    1816              :        *  pointing to the sought after element.  If unsuccessful it returns the
+    1817              :        *  past-the-end ( @c end() ) iterator.
+    1818              :        */
+    1819              :       iterator
+    1820              :       find(const key_type& __x)
+    1821              :       { return _M_h.find(__x); }
+    1822              : 
+    1823              : #if __cplusplus > 201703L
+    1824              :       template<typename _Kt>
+    1825              :         auto
+    1826              :         find(const _Kt& __x) -> decltype(_M_h._M_find_tr(__x))
+    1827              :         { return _M_h._M_find_tr(__x); }
+    1828              : #endif
+    1829              : 
+    1830              :       const_iterator
+    1831              :       find(const key_type& __x) const
+    1832              :       { return _M_h.find(__x); }
+    1833              : 
+    1834              : #if __cplusplus > 201703L
+    1835              :       template<typename _Kt>
+    1836              :         auto
+    1837              :         find(const _Kt& __x) const -> decltype(_M_h._M_find_tr(__x))
+    1838              :         { return _M_h._M_find_tr(__x); }
+    1839              : #endif
+    1840              :       ///@}
+    1841              : 
+    1842              :       ///@{
+    1843              :       /**
+    1844              :        *  @brief  Finds the number of elements.
+    1845              :        *  @param  __x  Key to count.
+    1846              :        *  @return  Number of elements with specified key.
+    1847              :        */
+    1848              :       size_type
+    1849              :       count(const key_type& __x) const
+    1850              :       { return _M_h.count(__x); }
+    1851              : 
+    1852              : #if __cplusplus > 201703L
+    1853              :       template<typename _Kt>
+    1854              :         auto
+    1855              :         count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x))
+    1856              :         { return _M_h._M_count_tr(__x); }
+    1857              : #endif
+    1858              :       ///@}
+    1859              : 
+    1860              : #if __cplusplus > 201703L
+    1861              :       ///@{
+    1862              :       /**
+    1863              :        *  @brief  Finds whether an element with the given key exists.
+    1864              :        *  @param  __x  Key of elements to be located.
+    1865              :        *  @return  True if there is any element with the specified key.
+    1866              :        */
+    1867              :       bool
+    1868              :       contains(const key_type& __x) const
+    1869              :       { return _M_h.find(__x) != _M_h.end(); }
+    1870              : 
+    1871              :       template<typename _Kt>
+    1872              :         auto
+    1873              :         contains(const _Kt& __x) const
+    1874              :         -> decltype(_M_h._M_find_tr(__x), void(), true)
+    1875              :         { return _M_h._M_find_tr(__x) != _M_h.end(); }
+    1876              :       ///@}
+    1877              : #endif
+    1878              : 
+    1879              :       ///@{
+    1880              :       /**
+    1881              :        *  @brief Finds a subsequence matching given key.
+    1882              :        *  @param  __x  Key to be located.
+    1883              :        *  @return  Pair of iterators that possibly points to the subsequence
+    1884              :        *           matching given key.
+    1885              :        */
+    1886              :       std::pair<iterator, iterator>
+    1887              :       equal_range(const key_type& __x)
+    1888              :       { return _M_h.equal_range(__x); }
+    1889              : 
+    1890              : #if __cplusplus > 201703L
+    1891              :       template<typename _Kt>
+    1892              :         auto
+    1893              :         equal_range(const _Kt& __x)
+    1894              :         -> decltype(_M_h._M_equal_range_tr(__x))
+    1895              :         { return _M_h._M_equal_range_tr(__x); }
+    1896              : #endif
+    1897              : 
+    1898              :       std::pair<const_iterator, const_iterator>
+    1899              :       equal_range(const key_type& __x) const
+    1900              :       { return _M_h.equal_range(__x); }
+    1901              : 
+    1902              : #if __cplusplus > 201703L
+    1903              :       template<typename _Kt>
+    1904              :         auto
+    1905              :         equal_range(const _Kt& __x) const
+    1906              :         -> decltype(_M_h._M_equal_range_tr(__x))
+    1907              :         { return _M_h._M_equal_range_tr(__x); }
+    1908              : #endif
+    1909              :       ///@}
+    1910              : 
+    1911              :       // bucket interface.
+    1912              : 
+    1913              :       /// Returns the number of buckets of the %unordered_multimap.
+    1914              :       size_type
+    1915              :       bucket_count() const noexcept
+    1916              :       { return _M_h.bucket_count(); }
+    1917              : 
+    1918              :       /// Returns the maximum number of buckets of the %unordered_multimap.
+    1919              :       size_type
+    1920              :       max_bucket_count() const noexcept
+    1921              :       { return _M_h.max_bucket_count(); }
+    1922              : 
+    1923              :       /*
+    1924              :        * @brief  Returns the number of elements in a given bucket.
+    1925              :        * @param  __n  A bucket index.
+    1926              :        * @return  The number of elements in the bucket.
+    1927              :        */
+    1928              :       size_type
+    1929              :       bucket_size(size_type __n) const
+    1930              :       { return _M_h.bucket_size(__n); }
+    1931              : 
+    1932              :       /*
+    1933              :        * @brief  Returns the bucket index of a given element.
+    1934              :        * @param  __key  A key instance.
+    1935              :        * @return  The key bucket index.
+    1936              :        */
+    1937              :       size_type
+    1938              :       bucket(const key_type& __key) const
+    1939              :       { return _M_h.bucket(__key); }
+    1940              :       
+    1941              :       /**
+    1942              :        *  @brief  Returns a read/write iterator pointing to the first bucket
+    1943              :        *         element.
+    1944              :        *  @param  __n The bucket index.
+    1945              :        *  @return  A read/write local iterator.
+    1946              :        */
+    1947              :       local_iterator
+    1948              :       begin(size_type __n)
+    1949              :       { return _M_h.begin(__n); }
+    1950              : 
+    1951              :       ///@{
+    1952              :       /**
+    1953              :        *  @brief  Returns a read-only (constant) iterator pointing to the first
+    1954              :        *         bucket element.
+    1955              :        *  @param  __n The bucket index.
+    1956              :        *  @return  A read-only local iterator.
+    1957              :        */
+    1958              :       const_local_iterator
+    1959              :       begin(size_type __n) const
+    1960              :       { return _M_h.begin(__n); }
+    1961              : 
+    1962              :       const_local_iterator
+    1963              :       cbegin(size_type __n) const
+    1964              :       { return _M_h.cbegin(__n); }
+    1965              :       ///@}
+    1966              : 
+    1967              :       /**
+    1968              :        *  @brief  Returns a read/write iterator pointing to one past the last
+    1969              :        *         bucket elements.
+    1970              :        *  @param  __n The bucket index.
+    1971              :        *  @return  A read/write local iterator.
+    1972              :        */
+    1973              :       local_iterator
+    1974              :       end(size_type __n)
+    1975              :       { return _M_h.end(__n); }
+    1976              : 
+    1977              :       ///@{
+    1978              :       /**
+    1979              :        *  @brief  Returns a read-only (constant) iterator pointing to one past
+    1980              :        *         the last bucket elements.
+    1981              :        *  @param  __n The bucket index.
+    1982              :        *  @return  A read-only local iterator.
+    1983              :        */
+    1984              :       const_local_iterator
+    1985              :       end(size_type __n) const
+    1986              :       { return _M_h.end(__n); }
+    1987              : 
+    1988              :       const_local_iterator
+    1989              :       cend(size_type __n) const
+    1990              :       { return _M_h.cend(__n); }
+    1991              :       ///@}
+    1992              : 
+    1993              :       // hash policy.
+    1994              : 
+    1995              :       /// Returns the average number of elements per bucket.
+    1996              :       float
+    1997              :       load_factor() const noexcept
+    1998              :       { return _M_h.load_factor(); }
+    1999              : 
+    2000              :       /// Returns a positive number that the %unordered_multimap tries to keep
+    2001              :       /// the load factor less than or equal to.
+    2002              :       float
+    2003              :       max_load_factor() const noexcept
+    2004              :       { return _M_h.max_load_factor(); }
+    2005              : 
+    2006              :       /**
+    2007              :        *  @brief  Change the %unordered_multimap maximum load factor.
+    2008              :        *  @param  __z The new maximum load factor.
+    2009              :        */
+    2010              :       void
+    2011              :       max_load_factor(float __z)
+    2012              :       { _M_h.max_load_factor(__z); }
+    2013              : 
+    2014              :       /**
+    2015              :        *  @brief  May rehash the %unordered_multimap.
+    2016              :        *  @param  __n The new number of buckets.
+    2017              :        *
+    2018              :        *  Rehash will occur only if the new number of buckets respect the
+    2019              :        *  %unordered_multimap maximum load factor.
+    2020              :        */
+    2021              :       void
+    2022              :       rehash(size_type __n)
+    2023              :       { _M_h.rehash(__n); }
+    2024              : 
+    2025              :       /**
+    2026              :        *  @brief  Prepare the %unordered_multimap for a specified number of
+    2027              :        *          elements.
+    2028              :        *  @param  __n Number of elements required.
+    2029              :        *
+    2030              :        *  Same as rehash(ceil(n / max_load_factor())).
+    2031              :        */
+    2032              :       void
+    2033              :       reserve(size_type __n)
+    2034              :       { _M_h.reserve(__n); }
+    2035              : 
+    2036              :       template<typename _Key1, typename _Tp1, typename _Hash1, typename _Pred1,
+    2037              :                typename _Alloc1>
+    2038              :         friend bool
+    2039              :         operator==(const unordered_multimap<_Key1, _Tp1,
+    2040              :                                             _Hash1, _Pred1, _Alloc1>&,
+    2041              :                    const unordered_multimap<_Key1, _Tp1,
+    2042              :                                             _Hash1, _Pred1, _Alloc1>&);
+    2043              :     };
+    2044              : 
+    2045              : #if __cpp_deduction_guides >= 201606
+    2046              : 
+    2047              :   template<typename _InputIterator,
+    2048              :            typename _Hash = hash<__iter_key_t<_InputIterator>>,
+    2049              :            typename _Pred = equal_to<__iter_key_t<_InputIterator>>,
+    2050              :            typename _Allocator = allocator<__iter_to_alloc_t<_InputIterator>>,
+    2051              :            typename = _RequireInputIter<_InputIterator>,
+    2052              :            typename = _RequireNotAllocatorOrIntegral<_Hash>,
+    2053              :            typename = _RequireNotAllocator<_Pred>,
+    2054              :            typename = _RequireAllocator<_Allocator>>
+    2055              :     unordered_multimap(_InputIterator, _InputIterator,
+    2056              :                        unordered_multimap<int, int>::size_type = {},
+    2057              :                        _Hash = _Hash(), _Pred = _Pred(),
+    2058              :                        _Allocator = _Allocator())
+    2059              :     -> unordered_multimap<__iter_key_t<_InputIterator>,
+    2060              :                           __iter_val_t<_InputIterator>, _Hash, _Pred,
+    2061              :                           _Allocator>;
+    2062              : 
+    2063              :   template<typename _Key, typename _Tp, typename _Hash = hash<_Key>,
+    2064              :            typename _Pred = equal_to<_Key>,
+    2065              :            typename _Allocator = allocator<pair<const _Key, _Tp>>,
+    2066              :            typename = _RequireNotAllocatorOrIntegral<_Hash>,
+    2067              :            typename = _RequireNotAllocator<_Pred>,
+    2068              :            typename = _RequireAllocator<_Allocator>>
+    2069              :     unordered_multimap(initializer_list<pair<_Key, _Tp>>,
+    2070              :                        unordered_multimap<int, int>::size_type = {},
+    2071              :                        _Hash = _Hash(), _Pred = _Pred(),
+    2072              :                        _Allocator = _Allocator())
+    2073              :     -> unordered_multimap<_Key, _Tp, _Hash, _Pred, _Allocator>;
+    2074              : 
+    2075              :   template<typename _InputIterator, typename _Allocator,
+    2076              :            typename = _RequireInputIter<_InputIterator>,
+    2077              :            typename = _RequireAllocator<_Allocator>>
+    2078              :     unordered_multimap(_InputIterator, _InputIterator,
+    2079              :                        unordered_multimap<int, int>::size_type, _Allocator)
+    2080              :     -> unordered_multimap<__iter_key_t<_InputIterator>,
+    2081              :                           __iter_val_t<_InputIterator>,
+    2082              :                           hash<__iter_key_t<_InputIterator>>,
+    2083              :                           equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
+    2084              : 
+    2085              :   template<typename _InputIterator, typename _Allocator,
+    2086              :            typename = _RequireInputIter<_InputIterator>,
+    2087              :            typename = _RequireAllocator<_Allocator>>
+    2088              :     unordered_multimap(_InputIterator, _InputIterator, _Allocator)
+    2089              :     -> unordered_multimap<__iter_key_t<_InputIterator>,
+    2090              :                           __iter_val_t<_InputIterator>,
+    2091              :                           hash<__iter_key_t<_InputIterator>>,
+    2092              :                           equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
+    2093              : 
+    2094              :   template<typename _InputIterator, typename _Hash, typename _Allocator,
+    2095              :            typename = _RequireInputIter<_InputIterator>,
+    2096              :            typename = _RequireNotAllocatorOrIntegral<_Hash>,
+    2097              :            typename = _RequireAllocator<_Allocator>>
+    2098              :     unordered_multimap(_InputIterator, _InputIterator,
+    2099              :                        unordered_multimap<int, int>::size_type, _Hash,
+    2100              :                        _Allocator)
+    2101              :     -> unordered_multimap<__iter_key_t<_InputIterator>,
+    2102              :                           __iter_val_t<_InputIterator>, _Hash,
+    2103              :                           equal_to<__iter_key_t<_InputIterator>>, _Allocator>;
+    2104              : 
+    2105              :   template<typename _Key, typename _Tp, typename _Allocator,
+    2106              :            typename = _RequireAllocator<_Allocator>>
+    2107              :     unordered_multimap(initializer_list<pair<_Key, _Tp>>,
+    2108              :                        unordered_multimap<int, int>::size_type,
+    2109              :                        _Allocator)
+    2110              :     -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
+    2111              : 
+    2112              :   template<typename _Key, typename _Tp, typename _Allocator,
+    2113              :            typename = _RequireAllocator<_Allocator>>
+    2114              :     unordered_multimap(initializer_list<pair<_Key, _Tp>>, _Allocator)
+    2115              :     -> unordered_multimap<_Key, _Tp, hash<_Key>, equal_to<_Key>, _Allocator>;
+    2116              : 
+    2117              :   template<typename _Key, typename _Tp, typename _Hash, typename _Allocator,
+    2118              :            typename = _RequireNotAllocatorOrIntegral<_Hash>,
+    2119              :            typename = _RequireAllocator<_Allocator>>
+    2120              :     unordered_multimap(initializer_list<pair<_Key, _Tp>>,
+    2121              :                        unordered_multimap<int, int>::size_type,
+    2122              :                        _Hash, _Allocator)
+    2123              :     -> unordered_multimap<_Key, _Tp, _Hash, equal_to<_Key>, _Allocator>;
+    2124              : 
+    2125              : #endif
+    2126              : 
+    2127              :   template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
+    2128              :     inline void
+    2129              :     swap(unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
+    2130              :          unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
+    2131              :     noexcept(noexcept(__x.swap(__y)))
+    2132              :     { __x.swap(__y); }
+    2133              : 
+    2134              :   template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
+    2135              :     inline void
+    2136              :     swap(unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
+    2137              :          unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
+    2138              :     noexcept(noexcept(__x.swap(__y)))
+    2139              :     { __x.swap(__y); }
+    2140              : 
+    2141              :   template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
+    2142              :     inline bool
+    2143              :     operator==(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
+    2144              :                const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
+    2145              :     { return __x._M_h._M_equal(__y._M_h); }
+    2146              : 
+    2147              : #if __cpp_impl_three_way_comparison < 201907L
+    2148              :   template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
+    2149              :     inline bool
+    2150              :     operator!=(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
+    2151              :                const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
+    2152              :     { return !(__x == __y); }
+    2153              : #endif
+    2154              : 
+    2155              :   template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
+    2156              :     inline bool
+    2157              :     operator==(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
+    2158              :                const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
+    2159              :     { return __x._M_h._M_equal(__y._M_h); }
+    2160              : 
+    2161              : #if __cpp_impl_three_way_comparison < 201907L
+    2162              :   template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
+    2163              :     inline bool
+    2164              :     operator!=(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
+    2165              :                const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __y)
+    2166              :     { return !(__x == __y); }
+    2167              : #endif
+    2168              : 
+    2169              : _GLIBCXX_END_NAMESPACE_CONTAINER
+    2170              : 
+    2171              : #if __cplusplus > 201402L
+    2172              :   // Allow std::unordered_map access to internals of compatible maps.
+    2173              :   template<typename _Key, typename _Val, typename _Hash1, typename _Eq1,
+    2174              :            typename _Alloc, typename _Hash2, typename _Eq2>
+    2175              :     struct _Hash_merge_helper<
+    2176              :       _GLIBCXX_STD_C::unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>,
+    2177              :       _Hash2, _Eq2>
+    2178              :     {
+    2179              :     private:
+    2180              :       template<typename... _Tp>
+    2181              :         using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>;
+    2182              :       template<typename... _Tp>
+    2183              :         using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>;
+    2184              : 
+    2185              :       friend unordered_map<_Key, _Val, _Hash1, _Eq1, _Alloc>;
+    2186              : 
+    2187              :       static auto&
+    2188              :       _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
+    2189              :       { return __map._M_h; }
+    2190              : 
+    2191              :       static auto&
+    2192              :       _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
+    2193              :       { return __map._M_h; }
+    2194              :     };
+    2195              : 
+    2196              :   // Allow std::unordered_multimap access to internals of compatible maps.
+    2197              :   template<typename _Key, typename _Val, typename _Hash1, typename _Eq1,
+    2198              :            typename _Alloc, typename _Hash2, typename _Eq2>
+    2199              :     struct _Hash_merge_helper<
+    2200              :       _GLIBCXX_STD_C::unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>,
+    2201              :       _Hash2, _Eq2>
+    2202              :     {
+    2203              :     private:
+    2204              :       template<typename... _Tp>
+    2205              :         using unordered_map = _GLIBCXX_STD_C::unordered_map<_Tp...>;
+    2206              :       template<typename... _Tp>
+    2207              :         using unordered_multimap = _GLIBCXX_STD_C::unordered_multimap<_Tp...>;
+    2208              : 
+    2209              :       friend unordered_multimap<_Key, _Val, _Hash1, _Eq1, _Alloc>;
+    2210              : 
+    2211              :       static auto&
+    2212              :       _S_get_table(unordered_map<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
+    2213              :       { return __map._M_h; }
+    2214              : 
+    2215              :       static auto&
+    2216              :       _S_get_table(unordered_multimap<_Key, _Val, _Hash2, _Eq2, _Alloc>& __map)
+    2217              :       { return __map._M_h; }
+    2218              :     };
+    2219              : #endif // C++17
+    2220              : 
+    2221              : _GLIBCXX_END_NAMESPACE_VERSION
+    2222              : } // namespace std
+    2223              : 
+    2224              : #endif /* _UNORDERED_MAP_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/unordered_set.h.func-c.html b/html/usr/include/c++/13/bits/unordered_set.h.func-c.html new file mode 100644 index 0000000..4335ec1 --- /dev/null +++ b/html/usr/include/c++/13/bits/unordered_set.h.func-c.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/unordered_set.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - unordered_set.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1313
Test Date:2024-04-30 13:17:26Functions:100.0 %77
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE5beginEv10
_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE7emplaceIJS5_EEESt4pairINSt8__detail14_Node_iteratorIS5_Lb1ELb1EEEbEDpOT_30
_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE5eraseERKS5_30520
_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE4findERKS5_41704
_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE3endEv41714
_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EEC2Ev49902
_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE6insertERKS5_61064
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/unordered_set.h.func.html b/html/usr/include/c++/13/bits/unordered_set.h.func.html new file mode 100644 index 0000000..6dd77ef --- /dev/null +++ b/html/usr/include/c++/13/bits/unordered_set.h.func.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/unordered_set.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - unordered_set.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1313
Test Date:2024-04-30 13:17:26Functions:100.0 %77
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE3endEv41714
_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE4findERKS5_41704
_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE5beginEv10
_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE5eraseERKS5_30520
_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE6insertERKS5_61064
_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE7emplaceIJS5_EEESt4pairINSt8__detail14_Node_iteratorIS5_Lb1ELb1EEEbEDpOT_30
_ZNSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EEC2Ev49902
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/unordered_set.h.gcov.html b/html/usr/include/c++/13/bits/unordered_set.h.gcov.html new file mode 100644 index 0000000..fdff58e --- /dev/null +++ b/html/usr/include/c++/13/bits/unordered_set.h.gcov.html @@ -0,0 +1,1969 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/unordered_set.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - unordered_set.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1313
Test Date:2024-04-30 13:17:26Functions:100.0 %77
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // unordered_set implementation -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2010-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/unordered_set.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{unordered_set}
+      28              :  */
+      29              : 
+      30              : #ifndef _UNORDERED_SET_H
+      31              : #define _UNORDERED_SET_H
+      32              : 
+      33              : #include <bits/hashtable.h>
+      34              : #include <bits/allocator.h>
+      35              : #include <bits/functional_hash.h> // hash
+      36              : #include <bits/stl_function.h>    // equal_to
+      37              : 
+      38              : namespace std _GLIBCXX_VISIBILITY(default)
+      39              : {
+      40              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      41              : _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
+      42              : 
+      43              :   /// Base types for unordered_set.
+      44              :   template<bool _Cache>
+      45              :     using __uset_traits = __detail::_Hashtable_traits<_Cache, true, true>;
+      46              : 
+      47              :   template<typename _Value,
+      48              :            typename _Hash = hash<_Value>,
+      49              :            typename _Pred = std::equal_to<_Value>,
+      50              :            typename _Alloc = std::allocator<_Value>,
+      51              :            typename _Tr = __uset_traits<__cache_default<_Value, _Hash>::value>>
+      52              :     using __uset_hashtable = _Hashtable<_Value, _Value, _Alloc,
+      53              :                                         __detail::_Identity, _Pred, _Hash,
+      54              :                                         __detail::_Mod_range_hashing,
+      55              :                                         __detail::_Default_ranged_hash,
+      56              :                                         __detail::_Prime_rehash_policy, _Tr>;
+      57              : 
+      58              :   /// Base types for unordered_multiset.
+      59              :   template<bool _Cache>
+      60              :     using __umset_traits = __detail::_Hashtable_traits<_Cache, true, false>;
+      61              : 
+      62              :   template<typename _Value,
+      63              :            typename _Hash = hash<_Value>,
+      64              :            typename _Pred = std::equal_to<_Value>,
+      65              :            typename _Alloc = std::allocator<_Value>,
+      66              :            typename _Tr = __umset_traits<__cache_default<_Value, _Hash>::value>>
+      67              :     using __umset_hashtable = _Hashtable<_Value, _Value, _Alloc,
+      68              :                                          __detail::_Identity,
+      69              :                                          _Pred, _Hash,
+      70              :                                          __detail::_Mod_range_hashing,
+      71              :                                          __detail::_Default_ranged_hash,
+      72              :                                          __detail::_Prime_rehash_policy, _Tr>;
+      73              : 
+      74              :   template<class _Value, class _Hash, class _Pred, class _Alloc>
+      75              :     class unordered_multiset;
+      76              : 
+      77              :   /**
+      78              :    *  @brief A standard container composed of unique keys (containing
+      79              :    *  at most one of each key value) in which the elements' keys are
+      80              :    *  the elements themselves.
+      81              :    *
+      82              :    *  @ingroup unordered_associative_containers
+      83              :    *  @headerfile unordered_set
+      84              :    *  @since C++11
+      85              :    *
+      86              :    *  @tparam  _Value  Type of key objects.
+      87              :    *  @tparam  _Hash  Hashing function object type, defaults to hash<_Value>.
+      88              : 
+      89              :    *  @tparam _Pred Predicate function object type, defaults to
+      90              :    *                equal_to<_Value>.
+      91              :    *
+      92              :    *  @tparam  _Alloc  Allocator type, defaults to allocator<_Key>.
+      93              :    *
+      94              :    *  Meets the requirements of a <a href="tables.html#65">container</a>, and
+      95              :    *  <a href="tables.html#xx">unordered associative container</a>
+      96              :    *
+      97              :    *  Base is _Hashtable, dispatched at compile time via template
+      98              :    *  alias __uset_hashtable.
+      99              :    */
+     100              :   template<typename _Value,
+     101              :            typename _Hash = hash<_Value>,
+     102              :            typename _Pred = equal_to<_Value>,
+     103              :            typename _Alloc = allocator<_Value>>
+     104              :     class unordered_set
+     105              :     {
+     106              :       typedef __uset_hashtable<_Value, _Hash, _Pred, _Alloc>  _Hashtable;
+     107              :       _Hashtable _M_h;
+     108              : 
+     109              :     public:
+     110              :       // typedefs:
+     111              :       ///@{
+     112              :       /// Public typedefs.
+     113              :       typedef typename _Hashtable::key_type     key_type;
+     114              :       typedef typename _Hashtable::value_type   value_type;
+     115              :       typedef typename _Hashtable::hasher       hasher;
+     116              :       typedef typename _Hashtable::key_equal    key_equal;
+     117              :       typedef typename _Hashtable::allocator_type allocator_type;
+     118              :       ///@}
+     119              : 
+     120              :       ///@{
+     121              :       ///  Iterator-related typedefs.
+     122              :       typedef typename _Hashtable::pointer              pointer;
+     123              :       typedef typename _Hashtable::const_pointer        const_pointer;
+     124              :       typedef typename _Hashtable::reference            reference;
+     125              :       typedef typename _Hashtable::const_reference      const_reference;
+     126              :       typedef typename _Hashtable::iterator             iterator;
+     127              :       typedef typename _Hashtable::const_iterator       const_iterator;
+     128              :       typedef typename _Hashtable::local_iterator       local_iterator;
+     129              :       typedef typename _Hashtable::const_local_iterator const_local_iterator;
+     130              :       typedef typename _Hashtable::size_type            size_type;
+     131              :       typedef typename _Hashtable::difference_type      difference_type;
+     132              :       ///@}
+     133              : 
+     134              : #if __cplusplus > 201402L
+     135              :       using node_type = typename _Hashtable::node_type;
+     136              :       using insert_return_type = typename _Hashtable::insert_return_type;
+     137              : #endif
+     138              : 
+     139              :       // construct/destroy/copy
+     140              : 
+     141              :       /// Default constructor.
+     142        49902 :       unordered_set() = default;
+     143              : 
+     144              :       /**
+     145              :        *  @brief  Default constructor creates no elements.
+     146              :        *  @param __n  Minimal initial number of buckets.
+     147              :        *  @param __hf  A hash functor.
+     148              :        *  @param __eql  A key equality functor.
+     149              :        *  @param __a  An allocator object.
+     150              :        */
+     151              :       explicit
+     152              :       unordered_set(size_type __n,
+     153              :                     const hasher& __hf = hasher(),
+     154              :                     const key_equal& __eql = key_equal(),
+     155              :                     const allocator_type& __a = allocator_type())
+     156              :       : _M_h(__n, __hf, __eql, __a)
+     157              :       { }
+     158              : 
+     159              :       /**
+     160              :        *  @brief  Builds an %unordered_set from a range.
+     161              :        *  @param  __first  An input iterator.
+     162              :        *  @param  __last  An input iterator.
+     163              :        *  @param __n  Minimal initial number of buckets.
+     164              :        *  @param __hf  A hash functor.
+     165              :        *  @param __eql  A key equality functor.
+     166              :        *  @param __a  An allocator object.
+     167              :        *
+     168              :        *  Create an %unordered_set consisting of copies of the elements from
+     169              :        *  [__first,__last).  This is linear in N (where N is
+     170              :        *  distance(__first,__last)).
+     171              :        */
+     172              :       template<typename _InputIterator>
+     173              :         unordered_set(_InputIterator __first, _InputIterator __last,
+     174              :                       size_type __n = 0,
+     175              :                       const hasher& __hf = hasher(),
+     176              :                       const key_equal& __eql = key_equal(),
+     177              :                       const allocator_type& __a = allocator_type())
+     178              :         : _M_h(__first, __last, __n, __hf, __eql, __a)
+     179              :         { }
+     180              : 
+     181              :       /// Copy constructor.
+     182              :       unordered_set(const unordered_set&) = default;
+     183              : 
+     184              :       /// Move constructor.
+     185              :       unordered_set(unordered_set&&) = default;
+     186              : 
+     187              :       /**
+     188              :        *  @brief Creates an %unordered_set with no elements.
+     189              :        *  @param __a An allocator object.
+     190              :        */
+     191              :       explicit
+     192              :       unordered_set(const allocator_type& __a)
+     193              :       : _M_h(__a)
+     194              :       { }
+     195              : 
+     196              :       /*
+     197              :        *  @brief Copy constructor with allocator argument.
+     198              :        * @param  __uset  Input %unordered_set to copy.
+     199              :        * @param  __a  An allocator object.
+     200              :        */
+     201              :       unordered_set(const unordered_set& __uset,
+     202              :                     const allocator_type& __a)
+     203              :       : _M_h(__uset._M_h, __a)
+     204              :       { }
+     205              : 
+     206              :       /*
+     207              :        *  @brief  Move constructor with allocator argument.
+     208              :        *  @param  __uset Input %unordered_set to move.
+     209              :        *  @param  __a    An allocator object.
+     210              :        */
+     211              :       unordered_set(unordered_set&& __uset,
+     212              :                     const allocator_type& __a)
+     213              :         noexcept( noexcept(_Hashtable(std::move(__uset._M_h), __a)) )
+     214              :       : _M_h(std::move(__uset._M_h), __a)
+     215              :       { }
+     216              : 
+     217              :       /**
+     218              :        *  @brief  Builds an %unordered_set from an initializer_list.
+     219              :        *  @param  __l  An initializer_list.
+     220              :        *  @param __n  Minimal initial number of buckets.
+     221              :        *  @param __hf  A hash functor.
+     222              :        *  @param __eql  A key equality functor.
+     223              :        *  @param  __a  An allocator object.
+     224              :        *
+     225              :        *  Create an %unordered_set consisting of copies of the elements in the
+     226              :        *  list. This is linear in N (where N is @a __l.size()).
+     227              :        */
+     228              :       unordered_set(initializer_list<value_type> __l,
+     229              :                     size_type __n = 0,
+     230              :                     const hasher& __hf = hasher(),
+     231              :                     const key_equal& __eql = key_equal(),
+     232              :                     const allocator_type& __a = allocator_type())
+     233              :       : _M_h(__l, __n, __hf, __eql, __a)
+     234              :       { }
+     235              : 
+     236              :       unordered_set(size_type __n, const allocator_type& __a)
+     237              :       : unordered_set(__n, hasher(), key_equal(), __a)
+     238              :       { }
+     239              : 
+     240              :       unordered_set(size_type __n, const hasher& __hf,
+     241              :                     const allocator_type& __a)
+     242              :       : unordered_set(__n, __hf, key_equal(), __a)
+     243              :       { }
+     244              : 
+     245              :       template<typename _InputIterator>
+     246              :         unordered_set(_InputIterator __first, _InputIterator __last,
+     247              :                       size_type __n,
+     248              :                       const allocator_type& __a)
+     249              :         : unordered_set(__first, __last, __n, hasher(), key_equal(), __a)
+     250              :         { }
+     251              : 
+     252              :       template<typename _InputIterator>
+     253              :         unordered_set(_InputIterator __first, _InputIterator __last,
+     254              :                       size_type __n, const hasher& __hf,
+     255              :                       const allocator_type& __a)
+     256              :         : unordered_set(__first, __last, __n, __hf, key_equal(), __a)
+     257              :         { }
+     258              : 
+     259              :       unordered_set(initializer_list<value_type> __l,
+     260              :                     size_type __n,
+     261              :                     const allocator_type& __a)
+     262              :       : unordered_set(__l, __n, hasher(), key_equal(), __a)
+     263              :       { }
+     264              : 
+     265              :       unordered_set(initializer_list<value_type> __l,
+     266              :                     size_type __n, const hasher& __hf,
+     267              :                     const allocator_type& __a)
+     268              :       : unordered_set(__l, __n, __hf, key_equal(), __a)
+     269              :       { }
+     270              : 
+     271              :       /// Copy assignment operator.
+     272              :       unordered_set&
+     273              :       operator=(const unordered_set&) = default;
+     274              : 
+     275              :       /// Move assignment operator.
+     276              :       unordered_set&
+     277              :       operator=(unordered_set&&) = default;
+     278              : 
+     279              :       /**
+     280              :        *  @brief  %Unordered_set list assignment operator.
+     281              :        *  @param  __l  An initializer_list.
+     282              :        *
+     283              :        *  This function fills an %unordered_set with copies of the elements in
+     284              :        *  the initializer list @a __l.
+     285              :        *
+     286              :        *  Note that the assignment completely changes the %unordered_set and
+     287              :        *  that the resulting %unordered_set's size is the same as the number
+     288              :        *  of elements assigned.
+     289              :        */
+     290              :       unordered_set&
+     291              :       operator=(initializer_list<value_type> __l)
+     292              :       {
+     293              :         _M_h = __l;
+     294              :         return *this;
+     295              :       }
+     296              : 
+     297              :       ///  Returns the allocator object used by the %unordered_set.
+     298              :       allocator_type
+     299              :       get_allocator() const noexcept
+     300              :       { return _M_h.get_allocator(); }
+     301              : 
+     302              :       // size and capacity:
+     303              : 
+     304              :       ///  Returns true if the %unordered_set is empty.
+     305              :       _GLIBCXX_NODISCARD bool
+     306              :       empty() const noexcept
+     307              :       { return _M_h.empty(); }
+     308              : 
+     309              :       ///  Returns the size of the %unordered_set.
+     310              :       size_type
+     311              :       size() const noexcept
+     312              :       { return _M_h.size(); }
+     313              : 
+     314              :       ///  Returns the maximum size of the %unordered_set.
+     315              :       size_type
+     316              :       max_size() const noexcept
+     317              :       { return _M_h.max_size(); }
+     318              : 
+     319              :       // iterators.
+     320              : 
+     321              :       ///@{
+     322              :       /**
+     323              :        *  Returns a read-only (constant) iterator that points to the first
+     324              :        *  element in the %unordered_set.
+     325              :        */
+     326              :       iterator
+     327           10 :       begin() noexcept
+     328           10 :       { return _M_h.begin(); }
+     329              : 
+     330              :       const_iterator
+     331              :       begin() const noexcept
+     332              :       { return _M_h.begin(); }
+     333              :       ///@}
+     334              : 
+     335              :       ///@{
+     336              :       /**
+     337              :        *  Returns a read-only (constant) iterator that points one past the last
+     338              :        *  element in the %unordered_set.
+     339              :        */
+     340              :       iterator
+     341        41714 :       end() noexcept
+     342        41714 :       { return _M_h.end(); }
+     343              : 
+     344              :       const_iterator
+     345              :       end() const noexcept
+     346              :       { return _M_h.end(); }
+     347              :       ///@}
+     348              : 
+     349              :       /**
+     350              :        *  Returns a read-only (constant) iterator that points to the first
+     351              :        *  element in the %unordered_set.
+     352              :        */
+     353              :       const_iterator
+     354              :       cbegin() const noexcept
+     355              :       { return _M_h.begin(); }
+     356              : 
+     357              :       /**
+     358              :        *  Returns a read-only (constant) iterator that points one past the last
+     359              :        *  element in the %unordered_set.
+     360              :        */
+     361              :       const_iterator
+     362              :       cend() const noexcept
+     363              :       { return _M_h.end(); }
+     364              : 
+     365              :       // modifiers.
+     366              : 
+     367              :       /**
+     368              :        *  @brief Attempts to build and insert an element into the
+     369              :        *  %unordered_set.
+     370              :        *  @param __args  Arguments used to generate an element.
+     371              :        *  @return  A pair, of which the first element is an iterator that points
+     372              :        *           to the possibly inserted element, and the second is a bool
+     373              :        *           that is true if the element was actually inserted.
+     374              :        *
+     375              :        *  This function attempts to build and insert an element into the
+     376              :        *  %unordered_set. An %unordered_set relies on unique keys and thus an
+     377              :        *  element is only inserted if it is not already present in the
+     378              :        *  %unordered_set.
+     379              :        *
+     380              :        *  Insertion requires amortized constant time.
+     381              :        */
+     382              :       template<typename... _Args>
+     383              :         std::pair<iterator, bool>
+     384           30 :         emplace(_Args&&... __args)
+     385           30 :         { return _M_h.emplace(std::forward<_Args>(__args)...); }
+     386              : 
+     387              :       /**
+     388              :        *  @brief Attempts to insert an element into the %unordered_set.
+     389              :        *  @param  __pos  An iterator that serves as a hint as to where the
+     390              :        *                element should be inserted.
+     391              :        *  @param  __args  Arguments used to generate the element to be
+     392              :        *                 inserted.
+     393              :        *  @return An iterator that points to the element with key equivalent to
+     394              :        *          the one generated from @a __args (may or may not be the
+     395              :        *          element itself).
+     396              :        *
+     397              :        *  This function is not concerned about whether the insertion took place,
+     398              :        *  and thus does not return a boolean like the single-argument emplace()
+     399              :        *  does.  Note that the first parameter is only a hint and can
+     400              :        *  potentially improve the performance of the insertion process.  A bad
+     401              :        *  hint would cause no gains in efficiency.
+     402              :        *
+     403              :        *  For more on @a hinting, see:
+     404              :        *  https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
+     405              :        *
+     406              :        *  Insertion requires amortized constant time.
+     407              :        */
+     408              :       template<typename... _Args>
+     409              :         iterator
+     410              :         emplace_hint(const_iterator __pos, _Args&&... __args)
+     411              :         { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
+     412              : 
+     413              :       ///@{
+     414              :       /**
+     415              :        *  @brief Attempts to insert an element into the %unordered_set.
+     416              :        *  @param  __x  Element to be inserted.
+     417              :        *  @return  A pair, of which the first element is an iterator that points
+     418              :        *           to the possibly inserted element, and the second is a bool
+     419              :        *           that is true if the element was actually inserted.
+     420              :        *
+     421              :        *  This function attempts to insert an element into the %unordered_set.
+     422              :        *  An %unordered_set relies on unique keys and thus an element is only
+     423              :        *  inserted if it is not already present in the %unordered_set.
+     424              :        *
+     425              :        *  Insertion requires amortized constant time.
+     426              :        */
+     427              :       std::pair<iterator, bool>
+     428        61064 :       insert(const value_type& __x)
+     429        61064 :       { return _M_h.insert(__x); }
+     430              : 
+     431              :       std::pair<iterator, bool>
+     432              :       insert(value_type&& __x)
+     433              :       { return _M_h.insert(std::move(__x)); }
+     434              :       ///@}
+     435              : 
+     436              :       ///@{
+     437              :       /**
+     438              :        *  @brief Attempts to insert an element into the %unordered_set.
+     439              :        *  @param  __hint  An iterator that serves as a hint as to where the
+     440              :        *                 element should be inserted.
+     441              :        *  @param  __x  Element to be inserted.
+     442              :        *  @return An iterator that points to the element with key of
+     443              :        *           @a __x (may or may not be the element passed in).
+     444              :        *
+     445              :        *  This function is not concerned about whether the insertion took place,
+     446              :        *  and thus does not return a boolean like the single-argument insert()
+     447              :        *  does.  Note that the first parameter is only a hint and can
+     448              :        *  potentially improve the performance of the insertion process.  A bad
+     449              :        *  hint would cause no gains in efficiency.
+     450              :        *
+     451              :        *  For more on @a hinting, see:
+     452              :        *  https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
+     453              :        *
+     454              :        *  Insertion requires amortized constant.
+     455              :        */
+     456              :       iterator
+     457              :       insert(const_iterator __hint, const value_type& __x)
+     458              :       { return _M_h.insert(__hint, __x); }
+     459              : 
+     460              :       iterator
+     461              :       insert(const_iterator __hint, value_type&& __x)
+     462              :       { return _M_h.insert(__hint, std::move(__x)); }
+     463              :       ///@}
+     464              : 
+     465              :       /**
+     466              :        *  @brief A template function that attempts to insert a range of
+     467              :        *  elements.
+     468              :        *  @param  __first  Iterator pointing to the start of the range to be
+     469              :        *                   inserted.
+     470              :        *  @param  __last  Iterator pointing to the end of the range.
+     471              :        *
+     472              :        *  Complexity similar to that of the range constructor.
+     473              :        */
+     474              :       template<typename _InputIterator>
+     475              :         void
+     476              :         insert(_InputIterator __first, _InputIterator __last)
+     477              :         { _M_h.insert(__first, __last); }
+     478              : 
+     479              :       /**
+     480              :        *  @brief Attempts to insert a list of elements into the %unordered_set.
+     481              :        *  @param  __l  A std::initializer_list<value_type> of elements
+     482              :        *               to be inserted.
+     483              :        *
+     484              :        *  Complexity similar to that of the range constructor.
+     485              :        */
+     486              :       void
+     487              :       insert(initializer_list<value_type> __l)
+     488              :       { _M_h.insert(__l); }
+     489              : 
+     490              : #if __cplusplus > 201402L
+     491              :       /// Extract a node.
+     492              :       node_type
+     493              :       extract(const_iterator __pos)
+     494              :       {
+     495              :         __glibcxx_assert(__pos != end());
+     496              :         return _M_h.extract(__pos);
+     497              :       }
+     498              : 
+     499              :       /// Extract a node.
+     500              :       node_type
+     501              :       extract(const key_type& __key)
+     502              :       { return _M_h.extract(__key); }
+     503              : 
+     504              :       /// Re-insert an extracted node.
+     505              :       insert_return_type
+     506              :       insert(node_type&& __nh)
+     507              :       { return _M_h._M_reinsert_node(std::move(__nh)); }
+     508              : 
+     509              :       /// Re-insert an extracted node.
+     510              :       iterator
+     511              :       insert(const_iterator, node_type&& __nh)
+     512              :       { return _M_h._M_reinsert_node(std::move(__nh)).position; }
+     513              : #endif // C++17
+     514              : 
+     515              :       ///@{
+     516              :       /**
+     517              :        *  @brief Erases an element from an %unordered_set.
+     518              :        *  @param  __position  An iterator pointing to the element to be erased.
+     519              :        *  @return An iterator pointing to the element immediately following
+     520              :        *          @a __position prior to the element being erased. If no such
+     521              :        *          element exists, end() is returned.
+     522              :        *
+     523              :        *  This function erases an element, pointed to by the given iterator,
+     524              :        *  from an %unordered_set.  Note that this function only erases the
+     525              :        *  element, and that if the element is itself a pointer, the pointed-to
+     526              :        *  memory is not touched in any way.  Managing the pointer is the user's
+     527              :        *  responsibility.
+     528              :        */
+     529              :       iterator
+     530              :       erase(const_iterator __position)
+     531              :       { return _M_h.erase(__position); }
+     532              : 
+     533              :       // LWG 2059.
+     534              :       iterator
+     535              :       erase(iterator __position)
+     536              :       { return _M_h.erase(__position); }
+     537              :       ///@}
+     538              : 
+     539              :       /**
+     540              :        *  @brief Erases elements according to the provided key.
+     541              :        *  @param  __x  Key of element to be erased.
+     542              :        *  @return  The number of elements erased.
+     543              :        *
+     544              :        *  This function erases all the elements located by the given key from
+     545              :        *  an %unordered_set. For an %unordered_set the result of this function
+     546              :        *  can only be 0 (not present) or 1 (present).
+     547              :        *  Note that this function only erases the element, and that if
+     548              :        *  the element is itself a pointer, the pointed-to memory is not touched
+     549              :        *  in any way.  Managing the pointer is the user's responsibility.
+     550              :        */
+     551              :       size_type
+     552        30520 :       erase(const key_type& __x)
+     553        30520 :       { return _M_h.erase(__x); }
+     554              : 
+     555              :       /**
+     556              :        *  @brief Erases a [__first,__last) range of elements from an
+     557              :        *  %unordered_set.
+     558              :        *  @param  __first  Iterator pointing to the start of the range to be
+     559              :        *                  erased.
+     560              :        *  @param __last  Iterator pointing to the end of the range to
+     561              :        *                be erased.
+     562              :        *  @return The iterator @a __last.
+     563              :        *
+     564              :        *  This function erases a sequence of elements from an %unordered_set.
+     565              :        *  Note that this function only erases the element, and that if
+     566              :        *  the element is itself a pointer, the pointed-to memory is not touched
+     567              :        *  in any way.  Managing the pointer is the user's responsibility.
+     568              :        */
+     569              :       iterator
+     570              :       erase(const_iterator __first, const_iterator __last)
+     571              :       { return _M_h.erase(__first, __last); }
+     572              : 
+     573              :       /**
+     574              :        *  Erases all elements in an %unordered_set. Note that this function only
+     575              :        *  erases the elements, and that if the elements themselves are pointers,
+     576              :        *  the pointed-to memory is not touched in any way. Managing the pointer
+     577              :        *  is the user's responsibility.
+     578              :        */
+     579              :       void
+     580              :       clear() noexcept
+     581              :       { _M_h.clear(); }
+     582              : 
+     583              :       /**
+     584              :        *  @brief  Swaps data with another %unordered_set.
+     585              :        *  @param  __x  An %unordered_set of the same element and allocator
+     586              :        *  types.
+     587              :        *
+     588              :        *  This exchanges the elements between two sets in constant time.
+     589              :        *  Note that the global std::swap() function is specialized such that
+     590              :        *  std::swap(s1,s2) will feed to this function.
+     591              :        */
+     592              :       void
+     593              :       swap(unordered_set& __x)
+     594              :       noexcept( noexcept(_M_h.swap(__x._M_h)) )
+     595              :       { _M_h.swap(__x._M_h); }
+     596              : 
+     597              : #if __cplusplus > 201402L
+     598              :       template<typename, typename, typename>
+     599              :         friend class std::_Hash_merge_helper;
+     600              : 
+     601              :       template<typename _H2, typename _P2>
+     602              :         void
+     603              :         merge(unordered_set<_Value, _H2, _P2, _Alloc>& __source)
+     604              :         {
+     605              :           using _Merge_helper = _Hash_merge_helper<unordered_set, _H2, _P2>;
+     606              :           _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
+     607              :         }
+     608              : 
+     609              :       template<typename _H2, typename _P2>
+     610              :         void
+     611              :         merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source)
+     612              :         { merge(__source); }
+     613              : 
+     614              :       template<typename _H2, typename _P2>
+     615              :         void
+     616              :         merge(unordered_multiset<_Value, _H2, _P2, _Alloc>& __source)
+     617              :         {
+     618              :           using _Merge_helper = _Hash_merge_helper<unordered_set, _H2, _P2>;
+     619              :           _M_h._M_merge_unique(_Merge_helper::_S_get_table(__source));
+     620              :         }
+     621              : 
+     622              :       template<typename _H2, typename _P2>
+     623              :         void
+     624              :         merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source)
+     625              :         { merge(__source); }
+     626              : #endif // C++17
+     627              : 
+     628              :       // observers.
+     629              : 
+     630              :       ///  Returns the hash functor object with which the %unordered_set was
+     631              :       ///  constructed.
+     632              :       hasher
+     633              :       hash_function() const
+     634              :       { return _M_h.hash_function(); }
+     635              : 
+     636              :       ///  Returns the key comparison object with which the %unordered_set was
+     637              :       ///  constructed.
+     638              :       key_equal
+     639              :       key_eq() const
+     640              :       { return _M_h.key_eq(); }
+     641              : 
+     642              :       // lookup.
+     643              : 
+     644              :       ///@{
+     645              :       /**
+     646              :        *  @brief Tries to locate an element in an %unordered_set.
+     647              :        *  @param  __x  Element to be located.
+     648              :        *  @return  Iterator pointing to sought-after element, or end() if not
+     649              :        *           found.
+     650              :        *
+     651              :        *  This function takes a key and tries to locate the element with which
+     652              :        *  the key matches.  If successful the function returns an iterator
+     653              :        *  pointing to the sought after element.  If unsuccessful it returns the
+     654              :        *  past-the-end ( @c end() ) iterator.
+     655              :        */
+     656              :       iterator
+     657        41704 :       find(const key_type& __x)
+     658        41704 :       { return _M_h.find(__x); }
+     659              : 
+     660              : #if __cplusplus > 201703L
+     661              :       template<typename _Kt>
+     662              :         auto
+     663              :         find(const _Kt& __k)
+     664              :         -> decltype(_M_h._M_find_tr(__k))
+     665              :         { return _M_h._M_find_tr(__k); }
+     666              : #endif
+     667              : 
+     668              :       const_iterator
+     669              :       find(const key_type& __x) const
+     670              :       { return _M_h.find(__x); }
+     671              : 
+     672              : #if __cplusplus > 201703L
+     673              :       template<typename _Kt>
+     674              :         auto
+     675              :         find(const _Kt& __k) const
+     676              :         -> decltype(_M_h._M_find_tr(__k))
+     677              :         { return _M_h._M_find_tr(__k); }
+     678              : #endif
+     679              :       ///@}
+     680              : 
+     681              :       ///@{
+     682              :       /**
+     683              :        *  @brief  Finds the number of elements.
+     684              :        *  @param  __x  Element to located.
+     685              :        *  @return  Number of elements with specified key.
+     686              :        *
+     687              :        *  This function only makes sense for unordered_multisets; for
+     688              :        *  unordered_set the result will either be 0 (not present) or 1
+     689              :        *  (present).
+     690              :        */
+     691              :       size_type
+     692              :       count(const key_type& __x) const
+     693              :       { return _M_h.count(__x); }
+     694              : 
+     695              : #if __cplusplus > 201703L
+     696              :       template<typename _Kt>
+     697              :         auto
+     698              :         count(const _Kt& __k) const
+     699              :         -> decltype(_M_h._M_count_tr(__k))
+     700              :         { return _M_h._M_count_tr(__k); }
+     701              : #endif
+     702              :       ///@}
+     703              : 
+     704              : #if __cplusplus > 201703L
+     705              :       ///@{
+     706              :       /**
+     707              :        *  @brief  Finds whether an element with the given key exists.
+     708              :        *  @param  __x  Key of elements to be located.
+     709              :        *  @return  True if there is any element with the specified key.
+     710              :        */
+     711              :       bool
+     712              :       contains(const key_type& __x) const
+     713              :       { return _M_h.find(__x) != _M_h.end(); }
+     714              : 
+     715              :       template<typename _Kt>
+     716              :         auto
+     717              :         contains(const _Kt& __k) const
+     718              :         -> decltype(_M_h._M_find_tr(__k), void(), true)
+     719              :         { return _M_h._M_find_tr(__k) != _M_h.end(); }
+     720              :       ///@}
+     721              : #endif
+     722              : 
+     723              :       ///@{
+     724              :       /**
+     725              :        *  @brief Finds a subsequence matching given key.
+     726              :        *  @param  __x  Key to be located.
+     727              :        *  @return  Pair of iterators that possibly points to the subsequence
+     728              :        *           matching given key.
+     729              :        *
+     730              :        *  This function probably only makes sense for multisets.
+     731              :        */
+     732              :       std::pair<iterator, iterator>
+     733              :       equal_range(const key_type& __x)
+     734              :       { return _M_h.equal_range(__x); }
+     735              : 
+     736              : #if __cplusplus > 201703L
+     737              :       template<typename _Kt>
+     738              :         auto
+     739              :         equal_range(const _Kt& __k)
+     740              :         -> decltype(_M_h._M_equal_range_tr(__k))
+     741              :         { return _M_h._M_equal_range_tr(__k); }
+     742              : #endif
+     743              : 
+     744              :       std::pair<const_iterator, const_iterator>
+     745              :       equal_range(const key_type& __x) const
+     746              :       { return _M_h.equal_range(__x); }
+     747              : 
+     748              : #if __cplusplus > 201703L
+     749              :       template<typename _Kt>
+     750              :         auto
+     751              :         equal_range(const _Kt& __k) const
+     752              :         -> decltype(_M_h._M_equal_range_tr(__k))
+     753              :         { return _M_h._M_equal_range_tr(__k); }
+     754              : #endif
+     755              :       ///@}
+     756              : 
+     757              :       // bucket interface.
+     758              : 
+     759              :       /// Returns the number of buckets of the %unordered_set.
+     760              :       size_type
+     761              :       bucket_count() const noexcept
+     762              :       { return _M_h.bucket_count(); }
+     763              : 
+     764              :       /// Returns the maximum number of buckets of the %unordered_set.
+     765              :       size_type
+     766              :       max_bucket_count() const noexcept
+     767              :       { return _M_h.max_bucket_count(); }
+     768              : 
+     769              :       /*
+     770              :        * @brief  Returns the number of elements in a given bucket.
+     771              :        * @param  __n  A bucket index.
+     772              :        * @return  The number of elements in the bucket.
+     773              :        */
+     774              :       size_type
+     775              :       bucket_size(size_type __n) const
+     776              :       { return _M_h.bucket_size(__n); }
+     777              : 
+     778              :       /*
+     779              :        * @brief  Returns the bucket index of a given element.
+     780              :        * @param  __key  A key instance.
+     781              :        * @return  The key bucket index.
+     782              :        */
+     783              :       size_type
+     784              :       bucket(const key_type& __key) const
+     785              :       { return _M_h.bucket(__key); }
+     786              : 
+     787              :       ///@{
+     788              :       /**
+     789              :        *  @brief  Returns a read-only (constant) iterator pointing to the first
+     790              :        *         bucket element.
+     791              :        *  @param  __n The bucket index.
+     792              :        *  @return  A read-only local iterator.
+     793              :        */
+     794              :       local_iterator
+     795              :       begin(size_type __n)
+     796              :       { return _M_h.begin(__n); }
+     797              : 
+     798              :       const_local_iterator
+     799              :       begin(size_type __n) const
+     800              :       { return _M_h.begin(__n); }
+     801              : 
+     802              :       const_local_iterator
+     803              :       cbegin(size_type __n) const
+     804              :       { return _M_h.cbegin(__n); }
+     805              :       ///@}
+     806              : 
+     807              :       ///@{
+     808              :       /**
+     809              :        *  @brief  Returns a read-only (constant) iterator pointing to one past
+     810              :        *         the last bucket elements.
+     811              :        *  @param  __n The bucket index.
+     812              :        *  @return  A read-only local iterator.
+     813              :        */
+     814              :       local_iterator
+     815              :       end(size_type __n)
+     816              :       { return _M_h.end(__n); }
+     817              : 
+     818              :       const_local_iterator
+     819              :       end(size_type __n) const
+     820              :       { return _M_h.end(__n); }
+     821              : 
+     822              :       const_local_iterator
+     823              :       cend(size_type __n) const
+     824              :       { return _M_h.cend(__n); }
+     825              :       ///@}
+     826              : 
+     827              :       // hash policy.
+     828              : 
+     829              :       /// Returns the average number of elements per bucket.
+     830              :       float
+     831              :       load_factor() const noexcept
+     832              :       { return _M_h.load_factor(); }
+     833              : 
+     834              :       /// Returns a positive number that the %unordered_set tries to keep the
+     835              :       /// load factor less than or equal to.
+     836              :       float
+     837              :       max_load_factor() const noexcept
+     838              :       { return _M_h.max_load_factor(); }
+     839              : 
+     840              :       /**
+     841              :        *  @brief  Change the %unordered_set maximum load factor.
+     842              :        *  @param  __z The new maximum load factor.
+     843              :        */
+     844              :       void
+     845              :       max_load_factor(float __z)
+     846              :       { _M_h.max_load_factor(__z); }
+     847              : 
+     848              :       /**
+     849              :        *  @brief  May rehash the %unordered_set.
+     850              :        *  @param  __n The new number of buckets.
+     851              :        *
+     852              :        *  Rehash will occur only if the new number of buckets respect the
+     853              :        *  %unordered_set maximum load factor.
+     854              :        */
+     855              :       void
+     856              :       rehash(size_type __n)
+     857              :       { _M_h.rehash(__n); }
+     858              : 
+     859              :       /**
+     860              :        *  @brief  Prepare the %unordered_set for a specified number of
+     861              :        *          elements.
+     862              :        *  @param  __n Number of elements required.
+     863              :        *
+     864              :        *  Same as rehash(ceil(n / max_load_factor())).
+     865              :        */
+     866              :       void
+     867              :       reserve(size_type __n)
+     868              :       { _M_h.reserve(__n); }
+     869              : 
+     870              :       template<typename _Value1, typename _Hash1, typename _Pred1,
+     871              :                typename _Alloc1>
+     872              :         friend bool
+     873              :         operator==(const unordered_set<_Value1, _Hash1, _Pred1, _Alloc1>&,
+     874              :                    const unordered_set<_Value1, _Hash1, _Pred1, _Alloc1>&);
+     875              :     };
+     876              : 
+     877              : #if __cpp_deduction_guides >= 201606
+     878              : 
+     879              :   template<typename _InputIterator,
+     880              :            typename _Hash =
+     881              :              hash<typename iterator_traits<_InputIterator>::value_type>,
+     882              :            typename _Pred =
+     883              :              equal_to<typename iterator_traits<_InputIterator>::value_type>,
+     884              :            typename _Allocator =
+     885              :              allocator<typename iterator_traits<_InputIterator>::value_type>,
+     886              :            typename = _RequireInputIter<_InputIterator>,
+     887              :            typename = _RequireNotAllocatorOrIntegral<_Hash>,
+     888              :            typename = _RequireNotAllocator<_Pred>,
+     889              :            typename = _RequireAllocator<_Allocator>>
+     890              :     unordered_set(_InputIterator, _InputIterator,
+     891              :                   unordered_set<int>::size_type = {},
+     892              :                   _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
+     893              :     -> unordered_set<typename iterator_traits<_InputIterator>::value_type,
+     894              :                      _Hash, _Pred, _Allocator>;
+     895              : 
+     896              :   template<typename _Tp, typename _Hash = hash<_Tp>,
+     897              :            typename _Pred = equal_to<_Tp>,
+     898              :            typename _Allocator = allocator<_Tp>,
+     899              :            typename = _RequireNotAllocatorOrIntegral<_Hash>,
+     900              :            typename = _RequireNotAllocator<_Pred>,
+     901              :            typename = _RequireAllocator<_Allocator>>
+     902              :     unordered_set(initializer_list<_Tp>,
+     903              :                   unordered_set<int>::size_type = {},
+     904              :                   _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
+     905              :     -> unordered_set<_Tp, _Hash, _Pred, _Allocator>;
+     906              : 
+     907              :   template<typename _InputIterator, typename _Allocator,
+     908              :            typename = _RequireInputIter<_InputIterator>,
+     909              :            typename = _RequireAllocator<_Allocator>>
+     910              :     unordered_set(_InputIterator, _InputIterator,
+     911              :                   unordered_set<int>::size_type, _Allocator)
+     912              :     -> unordered_set<typename iterator_traits<_InputIterator>::value_type,
+     913              :                      hash<
+     914              :                        typename iterator_traits<_InputIterator>::value_type>,
+     915              :                      equal_to<
+     916              :                        typename iterator_traits<_InputIterator>::value_type>,
+     917              :                      _Allocator>;
+     918              : 
+     919              :   template<typename _InputIterator, typename _Hash, typename _Allocator,
+     920              :            typename = _RequireInputIter<_InputIterator>,
+     921              :            typename = _RequireNotAllocatorOrIntegral<_Hash>,
+     922              :            typename = _RequireAllocator<_Allocator>>
+     923              :     unordered_set(_InputIterator, _InputIterator,
+     924              :                   unordered_set<int>::size_type,
+     925              :                   _Hash, _Allocator)
+     926              :     -> unordered_set<typename iterator_traits<_InputIterator>::value_type,
+     927              :                      _Hash,
+     928              :                      equal_to<
+     929              :                        typename iterator_traits<_InputIterator>::value_type>,
+     930              :                      _Allocator>;
+     931              : 
+     932              :   template<typename _Tp, typename _Allocator,
+     933              :            typename = _RequireAllocator<_Allocator>>
+     934              :     unordered_set(initializer_list<_Tp>,
+     935              :                   unordered_set<int>::size_type, _Allocator)
+     936              :     -> unordered_set<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>;
+     937              : 
+     938              :   template<typename _Tp, typename _Hash, typename _Allocator,
+     939              :            typename = _RequireNotAllocatorOrIntegral<_Hash>,
+     940              :            typename = _RequireAllocator<_Allocator>>
+     941              :     unordered_set(initializer_list<_Tp>,
+     942              :                   unordered_set<int>::size_type, _Hash, _Allocator)
+     943              :     -> unordered_set<_Tp, _Hash, equal_to<_Tp>, _Allocator>;
+     944              : 
+     945              : #endif
+     946              : 
+     947              :   /**
+     948              :    *  @brief A standard container composed of equivalent keys
+     949              :    *  (possibly containing multiple of each key value) in which the
+     950              :    *  elements' keys are the elements themselves.
+     951              :    *
+     952              :    *  @ingroup unordered_associative_containers
+     953              :    *  @headerfile unordered_set
+     954              :    *  @since C++11
+     955              :    *
+     956              :    *  @tparam  _Value  Type of key objects.
+     957              :    *  @tparam  _Hash  Hashing function object type, defaults to hash<_Value>.
+     958              :    *  @tparam  _Pred  Predicate function object type, defaults
+     959              :    *                  to equal_to<_Value>.
+     960              :    *  @tparam  _Alloc  Allocator type, defaults to allocator<_Key>.
+     961              :    *
+     962              :    *  Meets the requirements of a <a href="tables.html#65">container</a>, and
+     963              :    *  <a href="tables.html#xx">unordered associative container</a>
+     964              :    *
+     965              :    *  Base is _Hashtable, dispatched at compile time via template
+     966              :    *  alias __umset_hashtable.
+     967              :    */
+     968              :   template<typename _Value,
+     969              :            typename _Hash = hash<_Value>,
+     970              :            typename _Pred = equal_to<_Value>,
+     971              :            typename _Alloc = allocator<_Value>>
+     972              :     class unordered_multiset
+     973              :     {
+     974              :       typedef __umset_hashtable<_Value, _Hash, _Pred, _Alloc>  _Hashtable;
+     975              :       _Hashtable _M_h;
+     976              : 
+     977              :     public:
+     978              :       // typedefs:
+     979              :       ///@{
+     980              :       /// Public typedefs.
+     981              :       typedef typename _Hashtable::key_type     key_type;
+     982              :       typedef typename _Hashtable::value_type   value_type;
+     983              :       typedef typename _Hashtable::hasher       hasher;
+     984              :       typedef typename _Hashtable::key_equal    key_equal;
+     985              :       typedef typename _Hashtable::allocator_type allocator_type;
+     986              :       ///@}
+     987              : 
+     988              :       ///@{
+     989              :       ///  Iterator-related typedefs.
+     990              :       typedef typename _Hashtable::pointer              pointer;
+     991              :       typedef typename _Hashtable::const_pointer        const_pointer;
+     992              :       typedef typename _Hashtable::reference            reference;
+     993              :       typedef typename _Hashtable::const_reference      const_reference;
+     994              :       typedef typename _Hashtable::iterator             iterator;
+     995              :       typedef typename _Hashtable::const_iterator       const_iterator;
+     996              :       typedef typename _Hashtable::local_iterator       local_iterator;
+     997              :       typedef typename _Hashtable::const_local_iterator const_local_iterator;
+     998              :       typedef typename _Hashtable::size_type            size_type;
+     999              :       typedef typename _Hashtable::difference_type      difference_type;
+    1000              :       ///@}
+    1001              : 
+    1002              : #if __cplusplus > 201402L
+    1003              :       using node_type = typename _Hashtable::node_type;
+    1004              : #endif
+    1005              : 
+    1006              :       // construct/destroy/copy
+    1007              : 
+    1008              :       /// Default constructor.
+    1009              :       unordered_multiset() = default;
+    1010              : 
+    1011              :       /**
+    1012              :        *  @brief  Default constructor creates no elements.
+    1013              :        *  @param __n  Minimal initial number of buckets.
+    1014              :        *  @param __hf  A hash functor.
+    1015              :        *  @param __eql  A key equality functor.
+    1016              :        *  @param __a  An allocator object.
+    1017              :        */
+    1018              :       explicit
+    1019              :       unordered_multiset(size_type __n,
+    1020              :                          const hasher& __hf = hasher(),
+    1021              :                          const key_equal& __eql = key_equal(),
+    1022              :                          const allocator_type& __a = allocator_type())
+    1023              :       : _M_h(__n, __hf, __eql, __a)
+    1024              :       { }
+    1025              : 
+    1026              :       /**
+    1027              :        *  @brief  Builds an %unordered_multiset from a range.
+    1028              :        *  @param  __first  An input iterator.
+    1029              :        *  @param  __last   An input iterator.
+    1030              :        *  @param __n       Minimal initial number of buckets.
+    1031              :        *  @param __hf      A hash functor.
+    1032              :        *  @param __eql     A key equality functor.
+    1033              :        *  @param __a       An allocator object.
+    1034              :        *
+    1035              :        *  Create an %unordered_multiset consisting of copies of the elements
+    1036              :        *  from [__first,__last).  This is linear in N (where N is
+    1037              :        *  distance(__first,__last)).
+    1038              :        */
+    1039              :       template<typename _InputIterator>
+    1040              :         unordered_multiset(_InputIterator __first, _InputIterator __last,
+    1041              :                            size_type __n = 0,
+    1042              :                            const hasher& __hf = hasher(),
+    1043              :                            const key_equal& __eql = key_equal(),
+    1044              :                            const allocator_type& __a = allocator_type())
+    1045              :         : _M_h(__first, __last, __n, __hf, __eql, __a)
+    1046              :         { }
+    1047              : 
+    1048              :       /// Copy constructor.
+    1049              :       unordered_multiset(const unordered_multiset&) = default;
+    1050              : 
+    1051              :       /// Move constructor.
+    1052              :       unordered_multiset(unordered_multiset&&) = default;
+    1053              : 
+    1054              :       /**
+    1055              :        *  @brief  Builds an %unordered_multiset from an initializer_list.
+    1056              :        *  @param  __l  An initializer_list.
+    1057              :        *  @param __n  Minimal initial number of buckets.
+    1058              :        *  @param __hf  A hash functor.
+    1059              :        *  @param __eql  A key equality functor.
+    1060              :        *  @param  __a  An allocator object.
+    1061              :        *
+    1062              :        *  Create an %unordered_multiset consisting of copies of the elements in
+    1063              :        *  the list. This is linear in N (where N is @a __l.size()).
+    1064              :        */
+    1065              :       unordered_multiset(initializer_list<value_type> __l,
+    1066              :                          size_type __n = 0,
+    1067              :                          const hasher& __hf = hasher(),
+    1068              :                          const key_equal& __eql = key_equal(),
+    1069              :                          const allocator_type& __a = allocator_type())
+    1070              :       : _M_h(__l, __n, __hf, __eql, __a)
+    1071              :       { }
+    1072              : 
+    1073              :       /// Copy assignment operator.
+    1074              :       unordered_multiset&
+    1075              :       operator=(const unordered_multiset&) = default;
+    1076              : 
+    1077              :       /// Move assignment operator.
+    1078              :       unordered_multiset&
+    1079              :       operator=(unordered_multiset&&) = default;
+    1080              : 
+    1081              :       /**
+    1082              :        *  @brief Creates an %unordered_multiset with no elements.
+    1083              :        *  @param __a An allocator object.
+    1084              :        */
+    1085              :       explicit
+    1086              :       unordered_multiset(const allocator_type& __a)
+    1087              :       : _M_h(__a)
+    1088              :       { }
+    1089              : 
+    1090              :       /*
+    1091              :        *  @brief Copy constructor with allocator argument.
+    1092              :        * @param  __uset  Input %unordered_multiset to copy.
+    1093              :        * @param  __a  An allocator object.
+    1094              :        */
+    1095              :       unordered_multiset(const unordered_multiset& __umset,
+    1096              :                          const allocator_type& __a)
+    1097              :       : _M_h(__umset._M_h, __a)
+    1098              :       { }
+    1099              : 
+    1100              :       /*
+    1101              :        *  @brief  Move constructor with allocator argument.
+    1102              :        *  @param  __umset  Input %unordered_multiset to move.
+    1103              :        *  @param  __a  An allocator object.
+    1104              :        */
+    1105              :       unordered_multiset(unordered_multiset&& __umset,
+    1106              :                          const allocator_type& __a)
+    1107              :         noexcept( noexcept(_Hashtable(std::move(__umset._M_h), __a)) )
+    1108              :       : _M_h(std::move(__umset._M_h), __a)
+    1109              :       { }
+    1110              : 
+    1111              :       unordered_multiset(size_type __n, const allocator_type& __a)
+    1112              :       : unordered_multiset(__n, hasher(), key_equal(), __a)
+    1113              :       { }
+    1114              : 
+    1115              :       unordered_multiset(size_type __n, const hasher& __hf,
+    1116              :                          const allocator_type& __a)
+    1117              :       : unordered_multiset(__n, __hf, key_equal(), __a)
+    1118              :       { }
+    1119              : 
+    1120              :       template<typename _InputIterator>
+    1121              :         unordered_multiset(_InputIterator __first, _InputIterator __last,
+    1122              :                            size_type __n,
+    1123              :                            const allocator_type& __a)
+    1124              :         : unordered_multiset(__first, __last, __n, hasher(), key_equal(), __a)
+    1125              :         { }
+    1126              : 
+    1127              :       template<typename _InputIterator>
+    1128              :         unordered_multiset(_InputIterator __first, _InputIterator __last,
+    1129              :                            size_type __n, const hasher& __hf,
+    1130              :                            const allocator_type& __a)
+    1131              :         : unordered_multiset(__first, __last, __n, __hf, key_equal(), __a)
+    1132              :         { }
+    1133              : 
+    1134              :       unordered_multiset(initializer_list<value_type> __l,
+    1135              :                          size_type __n,
+    1136              :                          const allocator_type& __a)
+    1137              :       : unordered_multiset(__l, __n, hasher(), key_equal(), __a)
+    1138              :       { }
+    1139              : 
+    1140              :       unordered_multiset(initializer_list<value_type> __l,
+    1141              :                          size_type __n, const hasher& __hf,
+    1142              :                          const allocator_type& __a)
+    1143              :       : unordered_multiset(__l, __n, __hf, key_equal(), __a)
+    1144              :       { }
+    1145              : 
+    1146              :       /**
+    1147              :        *  @brief  %Unordered_multiset list assignment operator.
+    1148              :        *  @param  __l  An initializer_list.
+    1149              :        *
+    1150              :        *  This function fills an %unordered_multiset with copies of the elements
+    1151              :        *  in the initializer list @a __l.
+    1152              :        *
+    1153              :        *  Note that the assignment completely changes the %unordered_multiset
+    1154              :        *  and that the resulting %unordered_multiset's size is the same as the
+    1155              :        *  number of elements assigned.
+    1156              :        */
+    1157              :       unordered_multiset&
+    1158              :       operator=(initializer_list<value_type> __l)
+    1159              :       {
+    1160              :         _M_h = __l;
+    1161              :         return *this;
+    1162              :       }
+    1163              : 
+    1164              :       ///  Returns the allocator object used by the %unordered_multiset.
+    1165              :       allocator_type
+    1166              :       get_allocator() const noexcept
+    1167              :       { return _M_h.get_allocator(); }
+    1168              : 
+    1169              :       // size and capacity:
+    1170              : 
+    1171              :       ///  Returns true if the %unordered_multiset is empty.
+    1172              :       _GLIBCXX_NODISCARD bool
+    1173              :       empty() const noexcept
+    1174              :       { return _M_h.empty(); }
+    1175              : 
+    1176              :       ///  Returns the size of the %unordered_multiset.
+    1177              :       size_type
+    1178              :       size() const noexcept
+    1179              :       { return _M_h.size(); }
+    1180              : 
+    1181              :       ///  Returns the maximum size of the %unordered_multiset.
+    1182              :       size_type
+    1183              :       max_size() const noexcept
+    1184              :       { return _M_h.max_size(); }
+    1185              : 
+    1186              :       // iterators.
+    1187              : 
+    1188              :       ///@{
+    1189              :       /**
+    1190              :        *  Returns a read-only (constant) iterator that points to the first
+    1191              :        *  element in the %unordered_multiset.
+    1192              :        */
+    1193              :       iterator
+    1194              :       begin() noexcept
+    1195              :       { return _M_h.begin(); }
+    1196              : 
+    1197              :       const_iterator
+    1198              :       begin() const noexcept
+    1199              :       { return _M_h.begin(); }
+    1200              :       ///@}
+    1201              : 
+    1202              :       ///@{
+    1203              :       /**
+    1204              :        *  Returns a read-only (constant) iterator that points one past the last
+    1205              :        *  element in the %unordered_multiset.
+    1206              :        */
+    1207              :       iterator
+    1208              :       end() noexcept
+    1209              :       { return _M_h.end(); }
+    1210              : 
+    1211              :       const_iterator
+    1212              :       end() const noexcept
+    1213              :       { return _M_h.end(); }
+    1214              :       ///@}
+    1215              : 
+    1216              :       /**
+    1217              :        *  Returns a read-only (constant) iterator that points to the first
+    1218              :        *  element in the %unordered_multiset.
+    1219              :        */
+    1220              :       const_iterator
+    1221              :       cbegin() const noexcept
+    1222              :       { return _M_h.begin(); }
+    1223              : 
+    1224              :       /**
+    1225              :        *  Returns a read-only (constant) iterator that points one past the last
+    1226              :        *  element in the %unordered_multiset.
+    1227              :        */
+    1228              :       const_iterator
+    1229              :       cend() const noexcept
+    1230              :       { return _M_h.end(); }
+    1231              : 
+    1232              :       // modifiers.
+    1233              : 
+    1234              :       /**
+    1235              :        *  @brief Builds and insert an element into the %unordered_multiset.
+    1236              :        *  @param __args  Arguments used to generate an element.
+    1237              :        *  @return  An iterator that points to the inserted element.
+    1238              :        *
+    1239              :        *  Insertion requires amortized constant time.
+    1240              :        */
+    1241              :       template<typename... _Args>
+    1242              :         iterator
+    1243              :         emplace(_Args&&... __args)
+    1244              :         { return _M_h.emplace(std::forward<_Args>(__args)...); }
+    1245              : 
+    1246              :       /**
+    1247              :        *  @brief Inserts an element into the %unordered_multiset.
+    1248              :        *  @param  __pos  An iterator that serves as a hint as to where the
+    1249              :        *                element should be inserted.
+    1250              :        *  @param  __args  Arguments used to generate the element to be
+    1251              :        *                 inserted.
+    1252              :        *  @return An iterator that points to the inserted element.
+    1253              :        *
+    1254              :        *  Note that the first parameter is only a hint and can potentially
+    1255              :        *  improve the performance of the insertion process.  A bad hint would
+    1256              :        *  cause no gains in efficiency.
+    1257              :        *
+    1258              :        *  For more on @a hinting, see:
+    1259              :        *  https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
+    1260              :        *
+    1261              :        *  Insertion requires amortized constant time.
+    1262              :        */
+    1263              :       template<typename... _Args>
+    1264              :         iterator
+    1265              :         emplace_hint(const_iterator __pos, _Args&&... __args)
+    1266              :         { return _M_h.emplace_hint(__pos, std::forward<_Args>(__args)...); }
+    1267              : 
+    1268              :       ///@{
+    1269              :       /**
+    1270              :        *  @brief Inserts an element into the %unordered_multiset.
+    1271              :        *  @param  __x  Element to be inserted.
+    1272              :        *  @return  An iterator that points to the inserted element.
+    1273              :        *
+    1274              :        *  Insertion requires amortized constant time.
+    1275              :        */
+    1276              :       iterator
+    1277              :       insert(const value_type& __x)
+    1278              :       { return _M_h.insert(__x); }
+    1279              : 
+    1280              :       iterator
+    1281              :       insert(value_type&& __x)
+    1282              :       { return _M_h.insert(std::move(__x)); }
+    1283              :       ///@}
+    1284              : 
+    1285              :       ///@{
+    1286              :       /**
+    1287              :        *  @brief Inserts an element into the %unordered_multiset.
+    1288              :        *  @param  __hint  An iterator that serves as a hint as to where the
+    1289              :        *                 element should be inserted.
+    1290              :        *  @param  __x  Element to be inserted.
+    1291              :        *  @return An iterator that points to the inserted element.
+    1292              :        *
+    1293              :        *  Note that the first parameter is only a hint and can potentially
+    1294              :        *  improve the performance of the insertion process.  A bad hint would
+    1295              :        *  cause no gains in efficiency.
+    1296              :        *
+    1297              :        *  For more on @a hinting, see:
+    1298              :        *  https://gcc.gnu.org/onlinedocs/libstdc++/manual/associative.html#containers.associative.insert_hints
+    1299              :        *
+    1300              :        *  Insertion requires amortized constant.
+    1301              :        */
+    1302              :       iterator
+    1303              :       insert(const_iterator __hint, const value_type& __x)
+    1304              :       { return _M_h.insert(__hint, __x); }
+    1305              : 
+    1306              :       iterator
+    1307              :       insert(const_iterator __hint, value_type&& __x)
+    1308              :       { return _M_h.insert(__hint, std::move(__x)); }
+    1309              :       ///@}
+    1310              : 
+    1311              :       /**
+    1312              :        *  @brief A template function that inserts a range of elements.
+    1313              :        *  @param  __first  Iterator pointing to the start of the range to be
+    1314              :        *                   inserted.
+    1315              :        *  @param  __last  Iterator pointing to the end of the range.
+    1316              :        *
+    1317              :        *  Complexity similar to that of the range constructor.
+    1318              :        */
+    1319              :       template<typename _InputIterator>
+    1320              :         void
+    1321              :         insert(_InputIterator __first, _InputIterator __last)
+    1322              :         { _M_h.insert(__first, __last); }
+    1323              : 
+    1324              :       /**
+    1325              :        *  @brief Inserts a list of elements into the %unordered_multiset.
+    1326              :        *  @param  __l  A std::initializer_list<value_type> of elements to be
+    1327              :        *              inserted.
+    1328              :        *
+    1329              :        *  Complexity similar to that of the range constructor.
+    1330              :        */
+    1331              :       void
+    1332              :       insert(initializer_list<value_type> __l)
+    1333              :       { _M_h.insert(__l); }
+    1334              : 
+    1335              : #if __cplusplus > 201402L
+    1336              :       /// Extract a node.
+    1337              :       node_type
+    1338              :       extract(const_iterator __pos)
+    1339              :       {
+    1340              :         __glibcxx_assert(__pos != end());
+    1341              :         return _M_h.extract(__pos);
+    1342              :       }
+    1343              : 
+    1344              :       /// Extract a node.
+    1345              :       node_type
+    1346              :       extract(const key_type& __key)
+    1347              :       { return _M_h.extract(__key); }
+    1348              : 
+    1349              :       /// Re-insert an extracted node.
+    1350              :       iterator
+    1351              :       insert(node_type&& __nh)
+    1352              :       { return _M_h._M_reinsert_node_multi(cend(), std::move(__nh)); }
+    1353              : 
+    1354              :       /// Re-insert an extracted node.
+    1355              :       iterator
+    1356              :       insert(const_iterator __hint, node_type&& __nh)
+    1357              :       { return _M_h._M_reinsert_node_multi(__hint, std::move(__nh)); }
+    1358              : #endif // C++17
+    1359              : 
+    1360              :       ///@{
+    1361              :       /**
+    1362              :        *  @brief Erases an element from an %unordered_multiset.
+    1363              :        *  @param  __position  An iterator pointing to the element to be erased.
+    1364              :        *  @return An iterator pointing to the element immediately following
+    1365              :        *          @a __position prior to the element being erased. If no such
+    1366              :        *          element exists, end() is returned.
+    1367              :        *
+    1368              :        *  This function erases an element, pointed to by the given iterator,
+    1369              :        *  from an %unordered_multiset.
+    1370              :        *
+    1371              :        *  Note that this function only erases the element, and that if the
+    1372              :        *  element is itself a pointer, the pointed-to memory is not touched in
+    1373              :        *  any way.  Managing the pointer is the user's responsibility.
+    1374              :        */
+    1375              :       iterator
+    1376              :       erase(const_iterator __position)
+    1377              :       { return _M_h.erase(__position); }
+    1378              : 
+    1379              :       // LWG 2059.
+    1380              :       iterator
+    1381              :       erase(iterator __position)
+    1382              :       { return _M_h.erase(__position); }
+    1383              :       ///@}
+    1384              : 
+    1385              : 
+    1386              :       /**
+    1387              :        *  @brief Erases elements according to the provided key.
+    1388              :        *  @param  __x  Key of element to be erased.
+    1389              :        *  @return  The number of elements erased.
+    1390              :        *
+    1391              :        *  This function erases all the elements located by the given key from
+    1392              :        *  an %unordered_multiset.
+    1393              :        *
+    1394              :        *  Note that this function only erases the element, and that if the
+    1395              :        *  element is itself a pointer, the pointed-to memory is not touched in
+    1396              :        *  any way.  Managing the pointer is the user's responsibility.
+    1397              :        */
+    1398              :       size_type
+    1399              :       erase(const key_type& __x)
+    1400              :       { return _M_h.erase(__x); }
+    1401              : 
+    1402              :       /**
+    1403              :        *  @brief Erases a [__first,__last) range of elements from an
+    1404              :        *  %unordered_multiset.
+    1405              :        *  @param  __first  Iterator pointing to the start of the range to be
+    1406              :        *                  erased.
+    1407              :        *  @param __last  Iterator pointing to the end of the range to
+    1408              :        *                be erased.
+    1409              :        *  @return The iterator @a __last.
+    1410              :        *
+    1411              :        *  This function erases a sequence of elements from an
+    1412              :        *  %unordered_multiset.
+    1413              :        *
+    1414              :        *  Note that this function only erases the element, and that if
+    1415              :        *  the element is itself a pointer, the pointed-to memory is not touched
+    1416              :        *  in any way.  Managing the pointer is the user's responsibility.
+    1417              :        */
+    1418              :       iterator
+    1419              :       erase(const_iterator __first, const_iterator __last)
+    1420              :       { return _M_h.erase(__first, __last); }
+    1421              : 
+    1422              :       /**
+    1423              :        *  Erases all elements in an %unordered_multiset.
+    1424              :        *
+    1425              :        *  Note that this function only erases the elements, and that if the
+    1426              :        *  elements themselves are pointers, the pointed-to memory is not touched
+    1427              :        *  in any way. Managing the pointer is the user's responsibility.
+    1428              :        */
+    1429              :       void
+    1430              :       clear() noexcept
+    1431              :       { _M_h.clear(); }
+    1432              : 
+    1433              :       /**
+    1434              :        *  @brief  Swaps data with another %unordered_multiset.
+    1435              :        *  @param  __x  An %unordered_multiset of the same element and allocator
+    1436              :        *  types.
+    1437              :        *
+    1438              :        *  This exchanges the elements between two sets in constant time.
+    1439              :        *  Note that the global std::swap() function is specialized such that
+    1440              :        *  std::swap(s1,s2) will feed to this function.
+    1441              :        */
+    1442              :       void
+    1443              :       swap(unordered_multiset& __x)
+    1444              :       noexcept( noexcept(_M_h.swap(__x._M_h)) )
+    1445              :       { _M_h.swap(__x._M_h); }
+    1446              : 
+    1447              : #if __cplusplus > 201402L
+    1448              :       template<typename, typename, typename>
+    1449              :         friend class std::_Hash_merge_helper;
+    1450              : 
+    1451              :       template<typename _H2, typename _P2>
+    1452              :         void
+    1453              :         merge(unordered_multiset<_Value, _H2, _P2, _Alloc>& __source)
+    1454              :         {
+    1455              :           using _Merge_helper
+    1456              :             = _Hash_merge_helper<unordered_multiset, _H2, _P2>;
+    1457              :           _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
+    1458              :         }
+    1459              : 
+    1460              :       template<typename _H2, typename _P2>
+    1461              :         void
+    1462              :         merge(unordered_multiset<_Value, _H2, _P2, _Alloc>&& __source)
+    1463              :         { merge(__source); }
+    1464              : 
+    1465              :       template<typename _H2, typename _P2>
+    1466              :         void
+    1467              :         merge(unordered_set<_Value, _H2, _P2, _Alloc>& __source)
+    1468              :         {
+    1469              :           using _Merge_helper
+    1470              :             = _Hash_merge_helper<unordered_multiset, _H2, _P2>;
+    1471              :           _M_h._M_merge_multi(_Merge_helper::_S_get_table(__source));
+    1472              :         }
+    1473              : 
+    1474              :       template<typename _H2, typename _P2>
+    1475              :         void
+    1476              :         merge(unordered_set<_Value, _H2, _P2, _Alloc>&& __source)
+    1477              :         { merge(__source); }
+    1478              : #endif // C++17
+    1479              : 
+    1480              :       // observers.
+    1481              : 
+    1482              :       ///  Returns the hash functor object with which the %unordered_multiset
+    1483              :       ///  was constructed.
+    1484              :       hasher
+    1485              :       hash_function() const
+    1486              :       { return _M_h.hash_function(); }
+    1487              : 
+    1488              :       ///  Returns the key comparison object with which the %unordered_multiset
+    1489              :       ///  was constructed.
+    1490              :       key_equal
+    1491              :       key_eq() const
+    1492              :       { return _M_h.key_eq(); }
+    1493              : 
+    1494              :       // lookup.
+    1495              : 
+    1496              :       ///@{
+    1497              :       /**
+    1498              :        *  @brief Tries to locate an element in an %unordered_multiset.
+    1499              :        *  @param  __x  Element to be located.
+    1500              :        *  @return  Iterator pointing to sought-after element, or end() if not
+    1501              :        *           found.
+    1502              :        *
+    1503              :        *  This function takes a key and tries to locate the element with which
+    1504              :        *  the key matches.  If successful the function returns an iterator
+    1505              :        *  pointing to the sought after element.  If unsuccessful it returns the
+    1506              :        *  past-the-end ( @c end() ) iterator.
+    1507              :        */
+    1508              :       iterator
+    1509              :       find(const key_type& __x)
+    1510              :       { return _M_h.find(__x); }
+    1511              : 
+    1512              : #if __cplusplus > 201703L
+    1513              :       template<typename _Kt>
+    1514              :         auto
+    1515              :         find(const _Kt& __x)
+    1516              :         -> decltype(_M_h._M_find_tr(__x))
+    1517              :         { return _M_h._M_find_tr(__x); }
+    1518              : #endif
+    1519              : 
+    1520              :       const_iterator
+    1521              :       find(const key_type& __x) const
+    1522              :       { return _M_h.find(__x); }
+    1523              : 
+    1524              : #if __cplusplus > 201703L
+    1525              :       template<typename _Kt>
+    1526              :         auto
+    1527              :         find(const _Kt& __x) const
+    1528              :         -> decltype(_M_h._M_find_tr(__x))
+    1529              :         { return _M_h._M_find_tr(__x); }
+    1530              : #endif
+    1531              :       ///@}
+    1532              : 
+    1533              :       ///@{
+    1534              :       /**
+    1535              :        *  @brief  Finds the number of elements.
+    1536              :        *  @param  __x  Element to located.
+    1537              :        *  @return  Number of elements with specified key.
+    1538              :        */
+    1539              :       size_type
+    1540              :       count(const key_type& __x) const
+    1541              :       { return _M_h.count(__x); }
+    1542              : 
+    1543              : #if __cplusplus > 201703L
+    1544              :       template<typename _Kt>
+    1545              :         auto
+    1546              :         count(const _Kt& __x) const -> decltype(_M_h._M_count_tr(__x))
+    1547              :         { return _M_h._M_count_tr(__x); }
+    1548              : #endif
+    1549              :       ///@}
+    1550              : 
+    1551              : #if __cplusplus > 201703L
+    1552              :       ///@{
+    1553              :       /**
+    1554              :        *  @brief  Finds whether an element with the given key exists.
+    1555              :        *  @param  __x  Key of elements to be located.
+    1556              :        *  @return  True if there is any element with the specified key.
+    1557              :        */
+    1558              :       bool
+    1559              :       contains(const key_type& __x) const
+    1560              :       { return _M_h.find(__x) != _M_h.end(); }
+    1561              : 
+    1562              :       template<typename _Kt>
+    1563              :         auto
+    1564              :         contains(const _Kt& __x) const
+    1565              :         -> decltype(_M_h._M_find_tr(__x), void(), true)
+    1566              :         { return _M_h._M_find_tr(__x) != _M_h.end(); }
+    1567              :       ///@}
+    1568              : #endif
+    1569              : 
+    1570              :       ///@{
+    1571              :       /**
+    1572              :        *  @brief Finds a subsequence matching given key.
+    1573              :        *  @param  __x  Key to be located.
+    1574              :        *  @return  Pair of iterators that possibly points to the subsequence
+    1575              :        *           matching given key.
+    1576              :        */
+    1577              :       std::pair<iterator, iterator>
+    1578              :       equal_range(const key_type& __x)
+    1579              :       { return _M_h.equal_range(__x); }
+    1580              : 
+    1581              : #if __cplusplus > 201703L
+    1582              :       template<typename _Kt>
+    1583              :         auto
+    1584              :         equal_range(const _Kt& __x)
+    1585              :         -> decltype(_M_h._M_equal_range_tr(__x))
+    1586              :         { return _M_h._M_equal_range_tr(__x); }
+    1587              : #endif
+    1588              : 
+    1589              :       std::pair<const_iterator, const_iterator>
+    1590              :       equal_range(const key_type& __x) const
+    1591              :       { return _M_h.equal_range(__x); }
+    1592              : 
+    1593              : #if __cplusplus > 201703L
+    1594              :       template<typename _Kt>
+    1595              :         auto
+    1596              :         equal_range(const _Kt& __x) const
+    1597              :         -> decltype(_M_h._M_equal_range_tr(__x))
+    1598              :         { return _M_h._M_equal_range_tr(__x); }
+    1599              : #endif
+    1600              :       ///@}
+    1601              : 
+    1602              :       // bucket interface.
+    1603              : 
+    1604              :       /// Returns the number of buckets of the %unordered_multiset.
+    1605              :       size_type
+    1606              :       bucket_count() const noexcept
+    1607              :       { return _M_h.bucket_count(); }
+    1608              : 
+    1609              :       /// Returns the maximum number of buckets of the %unordered_multiset.
+    1610              :       size_type
+    1611              :       max_bucket_count() const noexcept
+    1612              :       { return _M_h.max_bucket_count(); }
+    1613              : 
+    1614              :       /*
+    1615              :        * @brief  Returns the number of elements in a given bucket.
+    1616              :        * @param  __n  A bucket index.
+    1617              :        * @return  The number of elements in the bucket.
+    1618              :        */
+    1619              :       size_type
+    1620              :       bucket_size(size_type __n) const
+    1621              :       { return _M_h.bucket_size(__n); }
+    1622              : 
+    1623              :       /*
+    1624              :        * @brief  Returns the bucket index of a given element.
+    1625              :        * @param  __key  A key instance.
+    1626              :        * @return  The key bucket index.
+    1627              :        */
+    1628              :       size_type
+    1629              :       bucket(const key_type& __key) const
+    1630              :       { return _M_h.bucket(__key); }
+    1631              : 
+    1632              :       ///@{
+    1633              :       /**
+    1634              :        *  @brief  Returns a read-only (constant) iterator pointing to the first
+    1635              :        *         bucket element.
+    1636              :        *  @param  __n The bucket index.
+    1637              :        *  @return  A read-only local iterator.
+    1638              :        */
+    1639              :       local_iterator
+    1640              :       begin(size_type __n)
+    1641              :       { return _M_h.begin(__n); }
+    1642              : 
+    1643              :       const_local_iterator
+    1644              :       begin(size_type __n) const
+    1645              :       { return _M_h.begin(__n); }
+    1646              : 
+    1647              :       const_local_iterator
+    1648              :       cbegin(size_type __n) const
+    1649              :       { return _M_h.cbegin(__n); }
+    1650              :       ///@}
+    1651              : 
+    1652              :       ///@{
+    1653              :       /**
+    1654              :        *  @brief  Returns a read-only (constant) iterator pointing to one past
+    1655              :        *         the last bucket elements.
+    1656              :        *  @param  __n The bucket index.
+    1657              :        *  @return  A read-only local iterator.
+    1658              :        */
+    1659              :       local_iterator
+    1660              :       end(size_type __n)
+    1661              :       { return _M_h.end(__n); }
+    1662              : 
+    1663              :       const_local_iterator
+    1664              :       end(size_type __n) const
+    1665              :       { return _M_h.end(__n); }
+    1666              : 
+    1667              :       const_local_iterator
+    1668              :       cend(size_type __n) const
+    1669              :       { return _M_h.cend(__n); }
+    1670              :       ///@}
+    1671              : 
+    1672              :       // hash policy.
+    1673              : 
+    1674              :       /// Returns the average number of elements per bucket.
+    1675              :       float
+    1676              :       load_factor() const noexcept
+    1677              :       { return _M_h.load_factor(); }
+    1678              : 
+    1679              :       /// Returns a positive number that the %unordered_multiset tries to keep the
+    1680              :       /// load factor less than or equal to.
+    1681              :       float
+    1682              :       max_load_factor() const noexcept
+    1683              :       { return _M_h.max_load_factor(); }
+    1684              : 
+    1685              :       /**
+    1686              :        *  @brief  Change the %unordered_multiset maximum load factor.
+    1687              :        *  @param  __z The new maximum load factor.
+    1688              :        */
+    1689              :       void
+    1690              :       max_load_factor(float __z)
+    1691              :       { _M_h.max_load_factor(__z); }
+    1692              : 
+    1693              :       /**
+    1694              :        *  @brief  May rehash the %unordered_multiset.
+    1695              :        *  @param  __n The new number of buckets.
+    1696              :        *
+    1697              :        *  Rehash will occur only if the new number of buckets respect the
+    1698              :        *  %unordered_multiset maximum load factor.
+    1699              :        */
+    1700              :       void
+    1701              :       rehash(size_type __n)
+    1702              :       { _M_h.rehash(__n); }
+    1703              : 
+    1704              :       /**
+    1705              :        *  @brief  Prepare the %unordered_multiset for a specified number of
+    1706              :        *          elements.
+    1707              :        *  @param  __n Number of elements required.
+    1708              :        *
+    1709              :        *  Same as rehash(ceil(n / max_load_factor())).
+    1710              :        */
+    1711              :       void
+    1712              :       reserve(size_type __n)
+    1713              :       { _M_h.reserve(__n); }
+    1714              : 
+    1715              :       template<typename _Value1, typename _Hash1, typename _Pred1,
+    1716              :                typename _Alloc1>
+    1717              :         friend bool
+    1718              :       operator==(const unordered_multiset<_Value1, _Hash1, _Pred1, _Alloc1>&,
+    1719              :                  const unordered_multiset<_Value1, _Hash1, _Pred1, _Alloc1>&);
+    1720              :     };
+    1721              : 
+    1722              : 
+    1723              : #if __cpp_deduction_guides >= 201606
+    1724              : 
+    1725              :   template<typename _InputIterator,
+    1726              :            typename _Hash =
+    1727              :              hash<typename iterator_traits<_InputIterator>::value_type>,
+    1728              :            typename _Pred =
+    1729              :              equal_to<typename iterator_traits<_InputIterator>::value_type>,
+    1730              :            typename _Allocator =
+    1731              :              allocator<typename iterator_traits<_InputIterator>::value_type>,
+    1732              :            typename = _RequireInputIter<_InputIterator>,
+    1733              :            typename = _RequireNotAllocatorOrIntegral<_Hash>,
+    1734              :            typename = _RequireNotAllocator<_Pred>,
+    1735              :            typename = _RequireAllocator<_Allocator>>
+    1736              :     unordered_multiset(_InputIterator, _InputIterator,
+    1737              :                        unordered_multiset<int>::size_type = {},
+    1738              :                        _Hash = _Hash(), _Pred = _Pred(),
+    1739              :                        _Allocator = _Allocator())
+    1740              :     -> unordered_multiset<typename iterator_traits<_InputIterator>::value_type,
+    1741              :                           _Hash, _Pred, _Allocator>;
+    1742              : 
+    1743              :   template<typename _Tp, typename _Hash = hash<_Tp>,
+    1744              :            typename _Pred = equal_to<_Tp>,
+    1745              :            typename _Allocator = allocator<_Tp>,
+    1746              :            typename = _RequireNotAllocatorOrIntegral<_Hash>,
+    1747              :            typename = _RequireNotAllocator<_Pred>,
+    1748              :            typename = _RequireAllocator<_Allocator>>
+    1749              :     unordered_multiset(initializer_list<_Tp>,
+    1750              :                        unordered_multiset<int>::size_type = {},
+    1751              :                        _Hash = _Hash(), _Pred = _Pred(),
+    1752              :                        _Allocator = _Allocator())
+    1753              :     -> unordered_multiset<_Tp, _Hash, _Pred, _Allocator>;
+    1754              : 
+    1755              :   template<typename _InputIterator, typename _Allocator,
+    1756              :            typename = _RequireInputIter<_InputIterator>,
+    1757              :            typename = _RequireAllocator<_Allocator>>
+    1758              :     unordered_multiset(_InputIterator, _InputIterator,
+    1759              :                        unordered_multiset<int>::size_type, _Allocator)
+    1760              :     -> unordered_multiset<typename iterator_traits<_InputIterator>::value_type,
+    1761              :                           hash<typename
+    1762              :                                iterator_traits<_InputIterator>::value_type>,
+    1763              :                           equal_to<typename
+    1764              :                                    iterator_traits<_InputIterator>::value_type>,
+    1765              :                           _Allocator>;
+    1766              : 
+    1767              :   template<typename _InputIterator, typename _Hash, typename _Allocator,
+    1768              :            typename = _RequireInputIter<_InputIterator>,
+    1769              :            typename = _RequireNotAllocatorOrIntegral<_Hash>,
+    1770              :            typename = _RequireAllocator<_Allocator>>
+    1771              :     unordered_multiset(_InputIterator, _InputIterator,
+    1772              :                        unordered_multiset<int>::size_type,
+    1773              :                        _Hash, _Allocator)
+    1774              :     -> unordered_multiset<typename
+    1775              :                           iterator_traits<_InputIterator>::value_type,
+    1776              :                           _Hash,
+    1777              :                           equal_to<
+    1778              :                             typename
+    1779              :                             iterator_traits<_InputIterator>::value_type>,
+    1780              :                           _Allocator>;
+    1781              : 
+    1782              :   template<typename _Tp, typename _Allocator,
+    1783              :            typename = _RequireAllocator<_Allocator>>
+    1784              :     unordered_multiset(initializer_list<_Tp>,
+    1785              :                        unordered_multiset<int>::size_type, _Allocator)
+    1786              :     -> unordered_multiset<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>;
+    1787              : 
+    1788              :   template<typename _Tp, typename _Hash, typename _Allocator,
+    1789              :            typename = _RequireNotAllocatorOrIntegral<_Hash>,
+    1790              :            typename = _RequireAllocator<_Allocator>>
+    1791              :     unordered_multiset(initializer_list<_Tp>,
+    1792              :                        unordered_multiset<int>::size_type, _Hash, _Allocator)
+    1793              :     -> unordered_multiset<_Tp, _Hash, equal_to<_Tp>, _Allocator>;
+    1794              : 
+    1795              : #endif
+    1796              : 
+    1797              :   template<class _Value, class _Hash, class _Pred, class _Alloc>
+    1798              :     inline void
+    1799              :     swap(unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
+    1800              :          unordered_set<_Value, _Hash, _Pred, _Alloc>& __y)
+    1801              :     noexcept(noexcept(__x.swap(__y)))
+    1802              :     { __x.swap(__y); }
+    1803              : 
+    1804              :   template<class _Value, class _Hash, class _Pred, class _Alloc>
+    1805              :     inline void
+    1806              :     swap(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
+    1807              :          unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
+    1808              :     noexcept(noexcept(__x.swap(__y)))
+    1809              :     { __x.swap(__y); }
+    1810              : 
+    1811              :   template<class _Value, class _Hash, class _Pred, class _Alloc>
+    1812              :     inline bool
+    1813              :     operator==(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
+    1814              :                const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y)
+    1815              :     { return __x._M_h._M_equal(__y._M_h); }
+    1816              : 
+    1817              : #if __cpp_impl_three_way_comparison < 201907L
+    1818              :   template<class _Value, class _Hash, class _Pred, class _Alloc>
+    1819              :     inline bool
+    1820              :     operator!=(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
+    1821              :                const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y)
+    1822              :     { return !(__x == __y); }
+    1823              : #endif
+    1824              : 
+    1825              :   template<class _Value, class _Hash, class _Pred, class _Alloc>
+    1826              :     inline bool
+    1827              :     operator==(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
+    1828              :                const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
+    1829              :     { return __x._M_h._M_equal(__y._M_h); }
+    1830              : 
+    1831              : #if __cpp_impl_three_way_comparison < 201907L
+    1832              :   template<class _Value, class _Hash, class _Pred, class _Alloc>
+    1833              :     inline bool
+    1834              :     operator!=(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
+    1835              :                const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
+    1836              :     { return !(__x == __y); }
+    1837              : #endif
+    1838              : 
+    1839              : _GLIBCXX_END_NAMESPACE_CONTAINER
+    1840              : 
+    1841              : #if __cplusplus > 201402L
+    1842              :   // Allow std::unordered_set access to internals of compatible sets.
+    1843              :   template<typename _Val, typename _Hash1, typename _Eq1, typename _Alloc,
+    1844              :            typename _Hash2, typename _Eq2>
+    1845              :     struct _Hash_merge_helper<
+    1846              :       _GLIBCXX_STD_C::unordered_set<_Val, _Hash1, _Eq1, _Alloc>, _Hash2, _Eq2>
+    1847              :     {
+    1848              :     private:
+    1849              :       template<typename... _Tp>
+    1850              :         using unordered_set = _GLIBCXX_STD_C::unordered_set<_Tp...>;
+    1851              :       template<typename... _Tp>
+    1852              :         using unordered_multiset = _GLIBCXX_STD_C::unordered_multiset<_Tp...>;
+    1853              : 
+    1854              :       friend unordered_set<_Val, _Hash1, _Eq1, _Alloc>;
+    1855              : 
+    1856              :       static auto&
+    1857              :       _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set)
+    1858              :       { return __set._M_h; }
+    1859              : 
+    1860              :       static auto&
+    1861              :       _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set)
+    1862              :       { return __set._M_h; }
+    1863              :     };
+    1864              : 
+    1865              :   // Allow std::unordered_multiset access to internals of compatible sets.
+    1866              :   template<typename _Val, typename _Hash1, typename _Eq1, typename _Alloc,
+    1867              :            typename _Hash2, typename _Eq2>
+    1868              :     struct _Hash_merge_helper<
+    1869              :       _GLIBCXX_STD_C::unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>,
+    1870              :       _Hash2, _Eq2>
+    1871              :     {
+    1872              :     private:
+    1873              :       template<typename... _Tp>
+    1874              :         using unordered_set = _GLIBCXX_STD_C::unordered_set<_Tp...>;
+    1875              :       template<typename... _Tp>
+    1876              :         using unordered_multiset = _GLIBCXX_STD_C::unordered_multiset<_Tp...>;
+    1877              : 
+    1878              :       friend unordered_multiset<_Val, _Hash1, _Eq1, _Alloc>;
+    1879              : 
+    1880              :       static auto&
+    1881              :       _S_get_table(unordered_set<_Val, _Hash2, _Eq2, _Alloc>& __set)
+    1882              :       { return __set._M_h; }
+    1883              : 
+    1884              :       static auto&
+    1885              :       _S_get_table(unordered_multiset<_Val, _Hash2, _Eq2, _Alloc>& __set)
+    1886              :       { return __set._M_h; }
+    1887              :     };
+    1888              : #endif // C++17
+    1889              : 
+    1890              : _GLIBCXX_END_NAMESPACE_VERSION
+    1891              : } // namespace std
+    1892              : 
+    1893              : #endif /* _UNORDERED_SET_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/vector.tcc.func-c.html b/html/usr/include/c++/13/bits/vector.tcc.func-c.html new file mode 100644 index 0000000..770c6d9 --- /dev/null +++ b/html/usr/include/c++/13/bits/vector.tcc.func-c.html @@ -0,0 +1,810 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/vector.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - vector.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:64.4 %233150
Test Date:2024-04-30 13:17:26Functions:69.5 %9566
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE14_M_fill_assignEmRKSC_0
_ZNSt6vectorIdSaIdEE17_M_default_appendEm0
_ZNSt6vectorIdSaIdEE17_M_default_appendEm0
_ZNSt6vectorIiSaIiEE17_M_default_appendEm0
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE14_M_insert_rvalEN9__gnu_cxx17__normal_iteratorIPKS5_S7_EEOS5_60
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE13_M_assign_auxIPKS5_EEvT_SB_St20forward_iterator_tag196
_ZNSt6vectorIiSaIiEE13_M_insert_auxIiEEvN9__gnu_cxx17__normal_iteratorIPiS1_EEOT_238
_ZNSt6vectorIiSaIiEE13_M_insert_auxIiEEvN9__gnu_cxx17__normal_iteratorIPiS1_EEOT_56
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE13_M_insert_auxIS5_EEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEOT_60
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE13_M_insert_auxIS5_EEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEOT_122
_ZNSt6vectorIiSaIiEE6insertEN9__gnu_cxx17__normal_iteratorIPKiS1_EERS4_440
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE6insertEN9__gnu_cxx17__normal_iteratorIPKS5_S7_EERSA_122
_ZNSt6vectorIiSaIiEE6insertEN9__gnu_cxx17__normal_iteratorIPKiS1_EERS4_318
_ZNSt6vectorIdSaIdEE7reserveEm602
_ZNSt6vectorIN3c106SymIntESaIS1_EE7reserveEm0
_ZNSt6vectorIN3c107complexIdEESaIS2_EE7reserveEm0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE7reserveEm0
_ZNSt6vectorIdSaIdEE7reserveEm0
_ZNSt6vectorIlSaIlEE7reserveEm0
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE7reserveEm8
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE7reserveEm216
_ZNSt6vectorIN2at6TensorESaIS1_EE7reserveEm378
_ZNSt6vectorIdSaIdEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPdS1_EE912
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE0
_ZNSt6vectorIdSaIdEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPdS1_EE40
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS5_S7_EE120
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE318
_ZNSt6vectorIiSaIiEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EE434
_ZNSt6vectorIiSaIiEE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPiS1_EEEEvS6_T_S7_St20forward_iterator_tag1348
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPS5_S7_EEEEvSC_T_SD_St20forward_iterator_tag348
_ZNSt6vectorIiSaIiEE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPiS1_EEEEvS6_T_S7_St20forward_iterator_tag1000
_ZNSt6vectorIcSaIcEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPcS1_EES5_7110
_ZNSt6vectorIcSaIcEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPcS1_EES5_0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8_12
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS5_S7_EESB_894
_ZNSt6vectorIiSaIiEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EES5_6204
_ZNSt6vectorIdSaIdEEaSERKS1_12848
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEaSERKSE_0
_ZNSt6vectorIS_IfSaIfEESaIS1_EEaSERKS3_6
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EEaSERKS4_8
_ZNSt6vectorIdSaIdEEaSERKS1_14
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEaSERKS7_760
_ZNSt6vectorIfSaIfEEaSERKS1_3728
_ZNSt6vectorIiSaIiEEaSERKS1_8332
_ZNSt6vectorIcSaIcEE17_M_realloc_insertIJcEEEvN9__gnu_cxx17__normal_iteratorIPcS1_EEDpOT_106546170
_ZNSt6vectorIN2at6TensorESaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_0
_ZNSt6vectorIN3c106SymIntESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_0
_ZNSt6vectorIN3c107complexIdEESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE17_M_realloc_insertIJS4_EEEvN9__gnu_cxx17__normal_iteratorIPS4_S6_EEDpOT_0
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE17_M_realloc_insertIJS5_EEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_0
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE17_M_realloc_insertIJRKS3_EEEvN9__gnu_cxx17__normal_iteratorIPS3_S5_EEDpOT_0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_0
_ZNSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE17_M_realloc_insertIJRKS3_EEEvN9__gnu_cxx17__normal_iteratorIPS3_S5_EEDpOT_0
_ZNSt6vectorISt4pairIccESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_0
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE17_M_realloc_insertIJRlRKSF_EEEvNS4_IPSG_SI_EEDpOT_0
_ZNSt6vectorIcSaIcEE17_M_realloc_insertIJcEEEvN9__gnu_cxx17__normal_iteratorIPcS1_EEDpOT_0
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE17_M_realloc_insertIJSD_EEEvN9__gnu_cxx17__normal_iteratorIPSD_SF_EEDpOT_2
_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_4
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_12
_ZNSt6vectorISt4pairIifESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_94
_ZNSt6vectorIS_IdSaIdEESaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_130
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE17_M_realloc_insertIJRKS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_210
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE17_M_realloc_insertIJS5_EEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_240
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_316
_ZNSt6vectorIdSaIdEE17_M_realloc_insertIJdEEEvN9__gnu_cxx17__normal_iteratorIPdS1_EEDpOT_502
_ZNSt6vectorIdSaIdEE17_M_realloc_insertIJRKdEEEvN9__gnu_cxx17__normal_iteratorIPdS1_EEDpOT_652
_ZNSt6vectorIS_IiSaIiEESaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_798
_ZNSt6vectorISt6threadSaIS0_EE17_M_realloc_insertIJS0_EEEvN9__gnu_cxx17__normal_iteratorIPS0_S2_EEDpOT_838
_ZNSt6vectorIS_IdSaIdEESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_1142
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE17_M_realloc_insertIJS7_EEEvN9__gnu_cxx17__normal_iteratorIPS7_S9_EEDpOT_1144
_ZNSt6vectorISt4pairIiiESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_1222
_ZNSt6vectorISt6threadSaIS0_EE17_M_realloc_insertIJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES_IiSaIiEESt4lessISC_ESaISt4pairIKSC_SE_EEERKN2at6TensorEEUlvE_EEEvN9__gnu_cxx17__normal_iteratorIPS0_S2_EEDpOT_3366
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJS5_EEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_3534
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRKS5_EEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_4950
_ZNSt6vectorIiSaIiEE17_M_realloc_insertIJRKiEEEvN9__gnu_cxx17__normal_iteratorIPiS1_EEDpOT_8770
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE17_M_realloc_insertIJRKS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_30284
_ZNSt6vectorIlSaIlEE17_M_realloc_insertIJlEEEvN9__gnu_cxx17__normal_iteratorIPlS1_EEDpOT_38138
_ZNSt6vectorIiSaIiEE17_M_realloc_insertIJiEEEvN9__gnu_cxx17__normal_iteratorIPiS1_EEDpOT_47574
_ZNSt6vectorISt6threadSaIS0_EE17_M_realloc_insertIJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessISC_ESaISt4pairIKSC_iEEEEUlvE_EEEvN9__gnu_cxx17__normal_iteratorIPS0_S2_EEDpOT_1232628
_ZNSt6vectorIN3c106IValueESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_105169620
_ZNSt6vectorIcSaIcEE12emplace_backIJcEEERcDpOT_108537582
_ZNSt6vectorIN3c106SymIntESaIS1_EE12emplace_backIJS1_EEERS1_DpOT_0
_ZNSt6vectorIN3c107complexIdEESaIS2_EE12emplace_backIJS2_EEERS2_DpOT_0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE12emplace_backIJS4_EEERS4_DpOT_0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EE12emplace_backIJS2_EEERS2_DpOT_0
_ZNSt6vectorISt4pairIccESaIS1_EE12emplace_backIJS1_EEERS1_DpOT_0
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE12emplace_backIJRlRKSF_EEERSG_DpOT_0
_ZNSt6vectorIcSaIcEE12emplace_backIJcEEERcDpOT_0
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE12emplace_backIJS5_EEERS5_DpOT_40
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE12emplace_backIJS1_EEERS1_DpOT_46
_ZNSt6vectorISt4pairIifESaIS1_EE12emplace_backIJS1_EEERS1_DpOT_152
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE12emplace_backIJSD_EEERSD_DpOT_360
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE12emplace_backIJS5_EEERS5_DpOT_546
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE12emplace_backIJS2_EEERS2_DpOT_1152
_ZNSt6vectorISt6threadSaIS0_EE12emplace_backIJS0_EEERS0_DpOT_1392
_ZNSt6vectorISt4pairIiiESaIS1_EE12emplace_backIJS1_EEERS1_DpOT_2088
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJS5_EEERS5_DpOT_5006
_ZNSt6vectorIdSaIdEE12emplace_backIJdEEERdDpOT_5414
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE12emplace_backIJS7_EEERS7_DpOT_6950
_ZNSt6vectorISt6threadSaIS0_EE12emplace_backIJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES_IiSaIiEESt4lessISC_ESaISt4pairIKSC_SE_EEERKN2at6TensorEEUlvE_EEERS0_DpOT_14194
_ZNSt6vectorIS_IdSaIdEESaIS1_EE12emplace_backIJS1_EEERS1_DpOT_24670
_ZNSt6vectorIlSaIlEE12emplace_backIJlEEERlDpOT_40554
_ZNSt6vectorIiSaIiEE12emplace_backIJiEEERiDpOT_1568494
_ZNSt6vectorISt6threadSaIS0_EE12emplace_backIJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessISC_ESaISt4pairIKSC_iEEEEUlvE_EEERS0_DpOT_1590148
_ZNSt6vectorIN3c106IValueESaIS1_EE12emplace_backIJS1_EEERS1_DpOT_105276376
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/vector.tcc.func.html b/html/usr/include/c++/13/bits/vector.tcc.func.html new file mode 100644 index 0000000..327ab66 --- /dev/null +++ b/html/usr/include/c++/13/bits/vector.tcc.func.html @@ -0,0 +1,810 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/vector.tcc - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - vector.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:64.4 %233150
Test Date:2024-04-30 13:17:26Functions:69.5 %9566
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE13_M_assign_auxIPKS5_EEvT_SB_St20forward_iterator_tag196
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EE14_M_fill_assignEmRKSC_0
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE14_M_insert_rvalEN9__gnu_cxx17__normal_iteratorIPKS5_S7_EEOS5_60
_ZNSt6vectorIcSaIcEE12emplace_backIJcEEERcDpOT_108537582
_ZNSt6vectorIN3c106IValueESaIS1_EE12emplace_backIJS1_EEERS1_DpOT_105276376
_ZNSt6vectorIN3c106SymIntESaIS1_EE12emplace_backIJS1_EEERS1_DpOT_0
_ZNSt6vectorIN3c107complexIdEESaIS2_EE12emplace_backIJS2_EEERS2_DpOT_0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE12emplace_backIJS4_EEERS4_DpOT_0
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE12emplace_backIJS5_EEERS5_DpOT_40
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE12emplace_backIJS1_EEERS1_DpOT_46
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE12emplace_backIJSD_EEERSD_DpOT_360
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE12emplace_backIJS5_EEERS5_DpOT_5006
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EE12emplace_backIJS2_EEERS2_DpOT_0
_ZNSt6vectorIS_IdSaIdEESaIS1_EE12emplace_backIJS1_EEERS1_DpOT_24670
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE12emplace_backIJS5_EEERS5_DpOT_546
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE12emplace_backIJS7_EEERS7_DpOT_6950
_ZNSt6vectorISt4pairIccESaIS1_EE12emplace_backIJS1_EEERS1_DpOT_0
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE12emplace_backIJS2_EEERS2_DpOT_1152
_ZNSt6vectorISt4pairIifESaIS1_EE12emplace_backIJS1_EEERS1_DpOT_152
_ZNSt6vectorISt4pairIiiESaIS1_EE12emplace_backIJS1_EEERS1_DpOT_2088
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE12emplace_backIJRlRKSF_EEERSG_DpOT_0
_ZNSt6vectorISt6threadSaIS0_EE12emplace_backIJS0_EEERS0_DpOT_1392
_ZNSt6vectorISt6threadSaIS0_EE12emplace_backIJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES_IiSaIiEESt4lessISC_ESaISt4pairIKSC_SE_EEERKN2at6TensorEEUlvE_EEERS0_DpOT_14194
_ZNSt6vectorISt6threadSaIS0_EE12emplace_backIJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessISC_ESaISt4pairIKSC_iEEEEUlvE_EEERS0_DpOT_1590148
_ZNSt6vectorIcSaIcEE12emplace_backIJcEEERcDpOT_0
_ZNSt6vectorIdSaIdEE12emplace_backIJdEEERdDpOT_5414
_ZNSt6vectorIiSaIiEE12emplace_backIJiEEERiDpOT_1568494
_ZNSt6vectorIlSaIlEE12emplace_backIJlEEERlDpOT_40554
_ZNSt6vectorIcSaIcEE17_M_realloc_insertIJcEEEvN9__gnu_cxx17__normal_iteratorIPcS1_EEDpOT_106546170
_ZNSt6vectorIN2at6TensorESaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_0
_ZNSt6vectorIN3c106IValueESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_105169620
_ZNSt6vectorIN3c106SymIntESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_0
_ZNSt6vectorIN3c107complexIdEESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE17_M_realloc_insertIJS4_EEEvN9__gnu_cxx17__normal_iteratorIPS4_S6_EEDpOT_0
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE17_M_realloc_insertIJS5_EEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_0
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_12
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE17_M_realloc_insertIJSD_EEEvN9__gnu_cxx17__normal_iteratorIPSD_SF_EEDpOT_2
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJRKS5_EEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_4950
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_realloc_insertIJS5_EEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_3534
_ZNSt6vectorINSt7__cxx1112regex_traitsIcE10_RegexMaskESaIS3_EE17_M_realloc_insertIJRKS3_EEEvN9__gnu_cxx17__normal_iteratorIPS3_S5_EEDpOT_0
_ZNSt6vectorINSt8__detail6_StateIcEESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_0
_ZNSt6vectorIPKN6loguru11EcEntryBaseESaIS3_EE17_M_realloc_insertIJRKS3_EEEvN9__gnu_cxx17__normal_iteratorIPS3_S5_EEDpOT_0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE17_M_realloc_insertIJRKS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_30284
_ZNSt6vectorIS_IdSaIdEESaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_130
_ZNSt6vectorIS_IdSaIdEESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_1142
_ZNSt6vectorIS_IiSaIiEESaIS1_EE17_M_realloc_insertIJRKS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_798
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE17_M_realloc_insertIJS5_EEEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEDpOT_240
_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE17_M_realloc_insertIJS7_EEEvN9__gnu_cxx17__normal_iteratorIPS7_S9_EEDpOT_1144
_ZNSt6vectorISt4pairIccESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_0
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE17_M_realloc_insertIJRKS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_210
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE17_M_realloc_insertIJS2_EEEvN9__gnu_cxx17__normal_iteratorIPS2_S4_EEDpOT_316
_ZNSt6vectorISt4pairIifESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_94
_ZNSt6vectorISt4pairIiiESaIS1_EE17_M_realloc_insertIJS1_EEEvN9__gnu_cxx17__normal_iteratorIPS1_S3_EEDpOT_1222
_ZNSt6vectorISt4pairIlS_INSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS1_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISD_EEESaISG_EE17_M_realloc_insertIJRlRKSF_EEEvNS4_IPSG_SI_EEDpOT_0
_ZNSt6vectorISt6threadSaIS0_EE17_M_realloc_insertIJS0_EEEvN9__gnu_cxx17__normal_iteratorIPS0_S2_EEDpOT_838
_ZNSt6vectorISt6threadSaIS0_EE17_M_realloc_insertIJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES_IiSaIiEESt4lessISC_ESaISt4pairIKSC_SE_EEERKN2at6TensorEEUlvE_EEEvN9__gnu_cxx17__normal_iteratorIPS0_S2_EEDpOT_3366
_ZNSt6vectorISt6threadSaIS0_EE17_M_realloc_insertIJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessISC_ESaISt4pairIKSC_iEEEEUlvE_EEEvN9__gnu_cxx17__normal_iteratorIPS0_S2_EEDpOT_1232628
_ZNSt6vectorIcSaIcEE17_M_realloc_insertIJcEEEvN9__gnu_cxx17__normal_iteratorIPcS1_EEDpOT_0
_ZNSt6vectorIdSaIdEE17_M_realloc_insertIJRKdEEEvN9__gnu_cxx17__normal_iteratorIPdS1_EEDpOT_652
_ZNSt6vectorIdSaIdEE17_M_realloc_insertIJdEEEvN9__gnu_cxx17__normal_iteratorIPdS1_EEDpOT_502
_ZNSt6vectorIiSaIiEE17_M_realloc_insertIJRKiEEEvN9__gnu_cxx17__normal_iteratorIPiS1_EEDpOT_8770
_ZNSt6vectorIiSaIiEE17_M_realloc_insertIJiEEEvN9__gnu_cxx17__normal_iteratorIPiS1_EEDpOT_47574
_ZNSt6vectorIlSaIlEE17_M_realloc_insertIJlEEEvN9__gnu_cxx17__normal_iteratorIPlS1_EEDpOT_38138
_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_4
_ZNSt6vectorIcSaIcEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPcS1_EES5_7110
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS5_S7_EESB_894
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EES8_12
_ZNSt6vectorIcSaIcEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPcS1_EES5_0
_ZNSt6vectorIiSaIiEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EES5_6204
_ZNSt6vectorIdSaIdEE17_M_default_appendEm0
_ZNSt6vectorIdSaIdEE17_M_default_appendEm0
_ZNSt6vectorIiSaIiEE17_M_default_appendEm0
_ZNSt6vectorIdSaIdEE7reserveEm602
_ZNSt6vectorIN2at6TensorESaIS1_EE7reserveEm378
_ZNSt6vectorIN3c106SymIntESaIS1_EE7reserveEm0
_ZNSt6vectorIN3c107complexIdEESaIS2_EE7reserveEm0
_ZNSt6vectorIN3c108optionalIN2at6TensorEEESaIS4_EE7reserveEm0
_ZNSt6vectorIN5Catch10Generators16GeneratorWrapperIPKcEESaIS5_EE7reserveEm8
_ZNSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES_IhSaIhEEvEESaISD_EE7reserveEm216
_ZNSt6vectorIdSaIdEE7reserveEm0
_ZNSt6vectorIlSaIlEE7reserveEm0
_ZNSt6vectorIdSaIdEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPdS1_EE912
_ZNSt6vectorIN6loguru8CallbackESaIS1_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS1_S3_EE0
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS5_S7_EE120
_ZNSt6vectorISt4pairIfS0_IiiEESaIS2_EE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPS2_S4_EE318
_ZNSt6vectorIdSaIdEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPdS1_EE40
_ZNSt6vectorIiSaIiEE8_M_eraseEN9__gnu_cxx17__normal_iteratorIPiS1_EE434
_ZNSt6vectorIdSaIdEEaSERKS1_12848
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EEaSERKS7_760
_ZNSt6vectorINSt7__cxx119sub_matchIN9__gnu_cxx17__normal_iteratorIPKcNS0_12basic_stringIcSt11char_traitsIcESaIcEEEEEEESaISC_EEaSERKSE_0
_ZNSt6vectorIPN8bayesnet4NodeESaIS2_EEaSERKS4_8
_ZNSt6vectorIS_IfSaIfEESaIS1_EEaSERKS3_6
_ZNSt6vectorIdSaIdEEaSERKS1_14
_ZNSt6vectorIfSaIfEEaSERKS1_3728
_ZNSt6vectorIiSaIiEEaSERKS1_8332
_ZNSt6vectorIiSaIiEE13_M_insert_auxIiEEvN9__gnu_cxx17__normal_iteratorIPiS1_EEOT_238
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE13_M_insert_auxIS5_EEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEOT_122
_ZNSt6vectorISt10unique_ptrIN8bayesnet10ClassifierESt14default_deleteIS2_EESaIS5_EE13_M_insert_auxIS5_EEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEOT_60
_ZNSt6vectorIiSaIiEE13_M_insert_auxIiEEvN9__gnu_cxx17__normal_iteratorIPiS1_EEOT_56
_ZNSt6vectorIiSaIiEE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPiS1_EEEEvS6_T_S7_St20forward_iterator_tag1348
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPS5_S7_EEEEvSC_T_SD_St20forward_iterator_tag348
_ZNSt6vectorIiSaIiEE15_M_range_insertIN9__gnu_cxx17__normal_iteratorIPiS1_EEEEvS6_T_S7_St20forward_iterator_tag1000
_ZNSt6vectorIiSaIiEE6insertEN9__gnu_cxx17__normal_iteratorIPKiS1_EERS4_440
_ZNSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE6insertEN9__gnu_cxx17__normal_iteratorIPKS5_S7_EERSA_122
_ZNSt6vectorIiSaIiEE6insertEN9__gnu_cxx17__normal_iteratorIPKiS1_EERS4_318
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bits/vector.tcc.gcov.html b/html/usr/include/c++/13/bits/vector.tcc.gcov.html new file mode 100644 index 0000000..221bd86 --- /dev/null +++ b/html/usr/include/c++/13/bits/vector.tcc.gcov.html @@ -0,0 +1,1130 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bits/vector.tcc + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/bits - vector.tcc (source / functions)CoverageTotalHit
Test:coverage.infoLines:64.4 %233150
Test Date:2024-04-30 13:17:26Functions:69.5 %9566
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Vector implementation (out of line) -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1996
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this  software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file bits/vector.tcc
+      52              :  *  This is an internal header file, included by other library headers.
+      53              :  *  Do not attempt to use it directly. @headername{vector}
+      54              :  */
+      55              : 
+      56              : #ifndef _VECTOR_TCC
+      57              : #define _VECTOR_TCC 1
+      58              : 
+      59              : namespace std _GLIBCXX_VISIBILITY(default)
+      60              : {
+      61              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      62              : _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
+      63              : 
+      64              :   template<typename _Tp, typename _Alloc>
+      65              :     _GLIBCXX20_CONSTEXPR
+      66              :     void
+      67          602 :     vector<_Tp, _Alloc>::
+      68              :     reserve(size_type __n)
+      69              :     {
+      70          602 :       if (__n > this->max_size())
+      71            0 :         __throw_length_error(__N("vector::reserve"));
+      72          602 :       if (this->capacity() < __n)
+      73              :         {
+      74          548 :           const size_type __old_size = size();
+      75              :           pointer __tmp;
+      76              : #if __cplusplus >= 201103L
+      77              :           if _GLIBCXX17_CONSTEXPR (_S_use_relocate())
+      78              :             {
+      79          548 :               __tmp = this->_M_allocate(__n);
+      80          548 :               _S_relocate(this->_M_impl._M_start, this->_M_impl._M_finish,
+      81          548 :                           __tmp, _M_get_Tp_allocator());
+      82              :             }
+      83              :           else
+      84              : #endif
+      85              :             {
+      86              :               __tmp = _M_allocate_and_copy(__n,
+      87              :                 _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(this->_M_impl._M_start),
+      88              :                 _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(this->_M_impl._M_finish));
+      89              :               std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+      90              :                             _M_get_Tp_allocator());
+      91              :             }
+      92              :           _GLIBCXX_ASAN_ANNOTATE_REINIT;
+      93          548 :           _M_deallocate(this->_M_impl._M_start,
+      94          548 :                         this->_M_impl._M_end_of_storage
+      95          548 :                         - this->_M_impl._M_start);
+      96          548 :           this->_M_impl._M_start = __tmp;
+      97          548 :           this->_M_impl._M_finish = __tmp + __old_size;
+      98          548 :           this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
+      99              :         }
+     100          602 :     }
+     101              : 
+     102              : #if __cplusplus >= 201103L
+     103              :   template<typename _Tp, typename _Alloc>
+     104              :     template<typename... _Args>
+     105              : #if __cplusplus > 201402L
+     106              :       _GLIBCXX20_CONSTEXPR
+     107              :       typename vector<_Tp, _Alloc>::reference
+     108              : #else
+     109              :       void
+     110              : #endif
+     111    108537582 :       vector<_Tp, _Alloc>::
+     112              :       emplace_back(_Args&&... __args)
+     113              :       {
+     114    108537582 :         if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
+     115              :           {
+     116              :             _GLIBCXX_ASAN_ANNOTATE_GROW(1);
+     117      2037210 :             _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
+     118              :                                      std::forward<_Args>(__args)...);
+     119      2037210 :             ++this->_M_impl._M_finish;
+     120              :             _GLIBCXX_ASAN_ANNOTATE_GREW(1);
+     121              :           }
+     122              :         else
+     123    106500372 :           _M_realloc_insert(end(), std::forward<_Args>(__args)...);
+     124              : #if __cplusplus > 201402L
+     125    108537582 :         return back();
+     126              : #endif
+     127              :       }
+     128              : #endif
+     129              : 
+     130              :   template<typename _Tp, typename _Alloc>
+     131              :     _GLIBCXX20_CONSTEXPR
+     132              :     typename vector<_Tp, _Alloc>::iterator
+     133          440 :     vector<_Tp, _Alloc>::
+     134              : #if __cplusplus >= 201103L
+     135              :     insert(const_iterator __position, const value_type& __x)
+     136              : #else
+     137              :     insert(iterator __position, const value_type& __x)
+     138              : #endif
+     139              :     {
+     140          440 :       const size_type __n = __position - begin();
+     141          440 :       if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
+     142              :         {
+     143          314 :           __glibcxx_assert(__position != const_iterator());
+     144          314 :           if (!(__position != const_iterator()))
+     145            0 :             __builtin_unreachable(); // PR 106434
+     146              : 
+     147          314 :           if (__position == end())
+     148              :             {
+     149              :               _GLIBCXX_ASAN_ANNOTATE_GROW(1);
+     150          136 :               _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
+     151              :                                        __x);
+     152          136 :               ++this->_M_impl._M_finish;
+     153              :               _GLIBCXX_ASAN_ANNOTATE_GREW(1);
+     154              :             }
+     155              :           else
+     156              :             {
+     157              : #if __cplusplus >= 201103L
+     158          178 :               const auto __pos = begin() + (__position - cbegin());
+     159              :               // __x could be an existing element of this vector, so make a
+     160              :               // copy of it before _M_insert_aux moves elements around.
+     161          178 :               _Temporary_value __x_copy(this, __x);
+     162          178 :               _M_insert_aux(__pos, std::move(__x_copy._M_val()));
+     163              : #else
+     164              :               _M_insert_aux(__position, __x);
+     165              : #endif
+     166          178 :             }
+     167              :         }
+     168              :       else
+     169              : #if __cplusplus >= 201103L
+     170          126 :         _M_realloc_insert(begin() + (__position - cbegin()), __x);
+     171              : #else
+     172              :         _M_realloc_insert(__position, __x);
+     173              : #endif
+     174              : 
+     175          440 :       return iterator(this->_M_impl._M_start + __n);
+     176              :     }
+     177              : 
+     178              :   template<typename _Tp, typename _Alloc>
+     179              :     _GLIBCXX20_CONSTEXPR
+     180              :     typename vector<_Tp, _Alloc>::iterator
+     181          912 :     vector<_Tp, _Alloc>::
+     182              :     _M_erase(iterator __position)
+     183              :     {
+     184          912 :       if (__position + 1 != end())
+     185          684 :         _GLIBCXX_MOVE3(__position + 1, end(), __position);
+     186          912 :       --this->_M_impl._M_finish;
+     187          912 :       _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish);
+     188              :       _GLIBCXX_ASAN_ANNOTATE_SHRINK(1);
+     189          912 :       return __position;
+     190              :     }
+     191              : 
+     192              :   template<typename _Tp, typename _Alloc>
+     193              :     _GLIBCXX20_CONSTEXPR
+     194              :     typename vector<_Tp, _Alloc>::iterator
+     195         7110 :     vector<_Tp, _Alloc>::
+     196              :     _M_erase(iterator __first, iterator __last)
+     197              :     {
+     198         7110 :       if (__first != __last)
+     199              :         {
+     200         7078 :           if (__last != end())
+     201         4968 :             _GLIBCXX_MOVE3(__last, end(), __first);
+     202         7078 :           _M_erase_at_end(__first.base() + (end() - __last));
+     203              :         }
+     204         7110 :       return __first;
+     205              :     }
+     206              : 
+     207              :   template<typename _Tp, typename _Alloc>
+     208              :     _GLIBCXX20_CONSTEXPR
+     209              :     vector<_Tp, _Alloc>&
+     210        12848 :     vector<_Tp, _Alloc>::
+     211              :     operator=(const vector<_Tp, _Alloc>& __x)
+     212              :     {
+     213        12848 :       if (std::__addressof(__x) != this)
+     214              :         {
+     215              :           _GLIBCXX_ASAN_ANNOTATE_REINIT;
+     216              : #if __cplusplus >= 201103L
+     217         9492 :           if (_Alloc_traits::_S_propagate_on_copy_assign())
+     218              :             {
+     219            0 :               if (!_Alloc_traits::_S_always_equal()
+     220            0 :                   && _M_get_Tp_allocator() != __x._M_get_Tp_allocator())
+     221              :                 {
+     222              :                   // replacement allocator cannot free existing storage
+     223            0 :                   this->clear();
+     224            0 :                   _M_deallocate(this->_M_impl._M_start,
+     225            0 :                                 this->_M_impl._M_end_of_storage
+     226            0 :                                 - this->_M_impl._M_start);
+     227            0 :                   this->_M_impl._M_start = nullptr;
+     228            0 :                   this->_M_impl._M_finish = nullptr;
+     229            0 :                   this->_M_impl._M_end_of_storage = nullptr;
+     230              :                 }
+     231            0 :               std::__alloc_on_copy(_M_get_Tp_allocator(),
+     232            0 :                                    __x._M_get_Tp_allocator());
+     233              :             }
+     234              : #endif
+     235         9492 :           const size_type __xlen = __x.size();
+     236         9492 :           if (__xlen > capacity())
+     237              :             {
+     238         4022 :               pointer __tmp = _M_allocate_and_copy(__xlen, __x.begin(),
+     239              :                                                    __x.end());
+     240         4022 :               std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+     241         4022 :                             _M_get_Tp_allocator());
+     242         4022 :               _M_deallocate(this->_M_impl._M_start,
+     243         4022 :                             this->_M_impl._M_end_of_storage
+     244         4022 :                             - this->_M_impl._M_start);
+     245         4022 :               this->_M_impl._M_start = __tmp;
+     246         4022 :               this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __xlen;
+     247              :             }
+     248         5470 :           else if (size() >= __xlen)
+     249              :             {
+     250        10876 :               std::_Destroy(std::copy(__x.begin(), __x.end(), begin()),
+     251         5438 :                             end(), _M_get_Tp_allocator());
+     252              :             }
+     253              :           else
+     254              :             {
+     255           32 :               std::copy(__x._M_impl._M_start, __x._M_impl._M_start + size(),
+     256              :                         this->_M_impl._M_start);
+     257           32 :               std::__uninitialized_copy_a(__x._M_impl._M_start + size(),
+     258           32 :                                           __x._M_impl._M_finish,
+     259              :                                           this->_M_impl._M_finish,
+     260           32 :                                           _M_get_Tp_allocator());
+     261              :             }
+     262         9492 :           this->_M_impl._M_finish = this->_M_impl._M_start + __xlen;
+     263              :         }
+     264        12848 :       return *this;
+     265              :     }
+     266              : 
+     267              :   template<typename _Tp, typename _Alloc>
+     268              :     _GLIBCXX20_CONSTEXPR
+     269              :     void
+     270            0 :     vector<_Tp, _Alloc>::
+     271              :     _M_fill_assign(size_t __n, const value_type& __val)
+     272              :     {
+     273            0 :       if (__n > capacity())
+     274              :         {
+     275            0 :           vector __tmp(__n, __val, _M_get_Tp_allocator());
+     276            0 :           __tmp._M_impl._M_swap_data(this->_M_impl);
+     277            0 :         }
+     278            0 :       else if (__n > size())
+     279              :         {
+     280            0 :           std::fill(begin(), end(), __val);
+     281            0 :           const size_type __add = __n - size();
+     282              :           _GLIBCXX_ASAN_ANNOTATE_GROW(__add);
+     283            0 :           this->_M_impl._M_finish =
+     284            0 :             std::__uninitialized_fill_n_a(this->_M_impl._M_finish,
+     285            0 :                                           __add, __val, _M_get_Tp_allocator());
+     286              :           _GLIBCXX_ASAN_ANNOTATE_GREW(__add);
+     287              :         }
+     288              :       else
+     289            0 :         _M_erase_at_end(std::fill_n(this->_M_impl._M_start, __n, __val));
+     290            0 :     }
+     291              : 
+     292              :   template<typename _Tp, typename _Alloc>
+     293              :     template<typename _InputIterator>
+     294              :       _GLIBCXX20_CONSTEXPR
+     295              :       void
+     296              :       vector<_Tp, _Alloc>::
+     297              :       _M_assign_aux(_InputIterator __first, _InputIterator __last,
+     298              :                     std::input_iterator_tag)
+     299              :       {
+     300              :         pointer __cur(this->_M_impl._M_start);
+     301              :         for (; __first != __last && __cur != this->_M_impl._M_finish;
+     302              :              ++__cur, (void)++__first)
+     303              :           *__cur = *__first;
+     304              :         if (__first == __last)
+     305              :           _M_erase_at_end(__cur);
+     306              :         else
+     307              :           _M_range_insert(end(), __first, __last,
+     308              :                           std::__iterator_category(__first));
+     309              :       }
+     310              : 
+     311              :   template<typename _Tp, typename _Alloc>
+     312              :     template<typename _ForwardIterator>
+     313              :       _GLIBCXX20_CONSTEXPR
+     314              :       void
+     315          196 :       vector<_Tp, _Alloc>::
+     316              :       _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
+     317              :                     std::forward_iterator_tag)
+     318              :       {
+     319          196 :         const size_type __len = std::distance(__first, __last);
+     320              : 
+     321          196 :         if (__len > capacity())
+     322              :           {
+     323          196 :             _S_check_init_len(__len, _M_get_Tp_allocator());
+     324          196 :             pointer __tmp(_M_allocate_and_copy(__len, __first, __last));
+     325          196 :             std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+     326          196 :                           _M_get_Tp_allocator());
+     327              :             _GLIBCXX_ASAN_ANNOTATE_REINIT;
+     328          196 :             _M_deallocate(this->_M_impl._M_start,
+     329          196 :                           this->_M_impl._M_end_of_storage
+     330          196 :                           - this->_M_impl._M_start);
+     331          196 :             this->_M_impl._M_start = __tmp;
+     332          196 :             this->_M_impl._M_finish = this->_M_impl._M_start + __len;
+     333          196 :             this->_M_impl._M_end_of_storage = this->_M_impl._M_finish;
+     334              :           }
+     335            0 :         else if (size() >= __len)
+     336            0 :           _M_erase_at_end(std::copy(__first, __last, this->_M_impl._M_start));
+     337              :         else
+     338              :           {
+     339            0 :             _ForwardIterator __mid = __first;
+     340            0 :             std::advance(__mid, size());
+     341            0 :             std::copy(__first, __mid, this->_M_impl._M_start);
+     342            0 :             const size_type __attribute__((__unused__)) __n = __len - size();
+     343              :             _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
+     344            0 :             this->_M_impl._M_finish =
+     345            0 :               std::__uninitialized_copy_a(__mid, __last,
+     346              :                                           this->_M_impl._M_finish,
+     347            0 :                                           _M_get_Tp_allocator());
+     348              :             _GLIBCXX_ASAN_ANNOTATE_GREW(__n);
+     349              :           }
+     350          196 :       }
+     351              : 
+     352              : #if __cplusplus >= 201103L
+     353              :   template<typename _Tp, typename _Alloc>
+     354              :     _GLIBCXX20_CONSTEXPR
+     355              :     auto
+     356           60 :     vector<_Tp, _Alloc>::
+     357              :     _M_insert_rval(const_iterator __position, value_type&& __v) -> iterator
+     358              :     {
+     359           60 :       const auto __n = __position - cbegin();
+     360           60 :       if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
+     361           60 :         if (__position == cend())
+     362              :           {
+     363              :             _GLIBCXX_ASAN_ANNOTATE_GROW(1);
+     364            0 :             _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
+     365            0 :                                      std::move(__v));
+     366            0 :             ++this->_M_impl._M_finish;
+     367              :             _GLIBCXX_ASAN_ANNOTATE_GREW(1);
+     368              :           }
+     369              :         else
+     370           60 :           _M_insert_aux(begin() + __n, std::move(__v));
+     371              :       else
+     372            0 :         _M_realloc_insert(begin() + __n, std::move(__v));
+     373              : 
+     374           60 :       return iterator(this->_M_impl._M_start + __n);
+     375              :     }
+     376              : 
+     377              :   template<typename _Tp, typename _Alloc>
+     378              :     template<typename... _Args>
+     379              :       _GLIBCXX20_CONSTEXPR
+     380              :       auto
+     381              :       vector<_Tp, _Alloc>::
+     382              :       _M_emplace_aux(const_iterator __position, _Args&&... __args)
+     383              :       -> iterator
+     384              :       {
+     385              :         const auto __n = __position - cbegin();
+     386              :         if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
+     387              :           if (__position == cend())
+     388              :             {
+     389              :               _GLIBCXX_ASAN_ANNOTATE_GROW(1);
+     390              :               _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
+     391              :                                        std::forward<_Args>(__args)...);
+     392              :               ++this->_M_impl._M_finish;
+     393              :               _GLIBCXX_ASAN_ANNOTATE_GREW(1);
+     394              :             }
+     395              :           else
+     396              :             {
+     397              :               // We need to construct a temporary because something in __args...
+     398              :               // could alias one of the elements of the container and so we
+     399              :               // need to use it before _M_insert_aux moves elements around.
+     400              :               _Temporary_value __tmp(this, std::forward<_Args>(__args)...);
+     401              :               _M_insert_aux(begin() + __n, std::move(__tmp._M_val()));
+     402              :             }
+     403              :         else
+     404              :           _M_realloc_insert(begin() + __n, std::forward<_Args>(__args)...);
+     405              : 
+     406              :         return iterator(this->_M_impl._M_start + __n);
+     407              :       }
+     408              : 
+     409              :   template<typename _Tp, typename _Alloc>
+     410              :     template<typename _Arg>
+     411              :       _GLIBCXX20_CONSTEXPR
+     412              :       void
+     413          238 :       vector<_Tp, _Alloc>::
+     414              :       _M_insert_aux(iterator __position, _Arg&& __arg)
+     415              : #else
+     416              :   template<typename _Tp, typename _Alloc>
+     417              :     void
+     418              :     vector<_Tp, _Alloc>::
+     419              :     _M_insert_aux(iterator __position, const _Tp& __x)
+     420              : #endif
+     421              :     {
+     422              :       _GLIBCXX_ASAN_ANNOTATE_GROW(1);
+     423          238 :       _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
+     424          238 :                                _GLIBCXX_MOVE(*(this->_M_impl._M_finish - 1)));
+     425          238 :       ++this->_M_impl._M_finish;
+     426              :       _GLIBCXX_ASAN_ANNOTATE_GREW(1);
+     427              : #if __cplusplus < 201103L
+     428              :       _Tp __x_copy = __x;
+     429              : #endif
+     430          238 :       _GLIBCXX_MOVE_BACKWARD3(__position.base(),
+     431              :                               this->_M_impl._M_finish - 2,
+     432              :                               this->_M_impl._M_finish - 1);
+     433              : #if __cplusplus < 201103L
+     434              :       *__position = __x_copy;
+     435              : #else
+     436          238 :       *__position = std::forward<_Arg>(__arg);
+     437              : #endif
+     438          238 :     }
+     439              : 
+     440              : #if __cplusplus >= 201103L
+     441              :   template<typename _Tp, typename _Alloc>
+     442              :     template<typename... _Args>
+     443              :       _GLIBCXX20_CONSTEXPR
+     444              :       void
+     445    106546170 :       vector<_Tp, _Alloc>::
+     446              :       _M_realloc_insert(iterator __position, _Args&&... __args)
+     447              : #else
+     448              :   template<typename _Tp, typename _Alloc>
+     449              :     void
+     450              :     vector<_Tp, _Alloc>::
+     451              :     _M_realloc_insert(iterator __position, const _Tp& __x)
+     452              : #endif
+     453              :     {
+     454              :       const size_type __len =
+     455    106546170 :         _M_check_len(size_type(1), "vector::_M_realloc_insert");
+     456    106546170 :       pointer __old_start = this->_M_impl._M_start;
+     457    106546170 :       pointer __old_finish = this->_M_impl._M_finish;
+     458    106546170 :       const size_type __elems_before = __position - begin();
+     459    106546170 :       pointer __new_start(this->_M_allocate(__len));
+     460    106546170 :       pointer __new_finish(__new_start);
+     461              :       __try
+     462              :         {
+     463              :           // The order of the three operations is dictated by the C++11
+     464              :           // case, where the moves could alter a new element belonging
+     465              :           // to the existing vector.  This is an issue only for callers
+     466              :           // taking the element by lvalue ref (see last bullet of C++11
+     467              :           // [res.on.arguments]).
+     468    106546170 :           _Alloc_traits::construct(this->_M_impl,
+     469    106546170 :                                    __new_start + __elems_before,
+     470              : #if __cplusplus >= 201103L
+     471              :                                    std::forward<_Args>(__args)...);
+     472              : #else
+     473              :                                    __x);
+     474              : #endif
+     475    106546170 :           __new_finish = pointer();
+     476              : 
+     477              : #if __cplusplus >= 201103L
+     478              :           if _GLIBCXX17_CONSTEXPR (_S_use_relocate())
+     479              :             {
+     480    106546170 :               __new_finish = _S_relocate(__old_start, __position.base(),
+     481    106546170 :                                          __new_start, _M_get_Tp_allocator());
+     482              : 
+     483    106546170 :               ++__new_finish;
+     484              : 
+     485    106546170 :               __new_finish = _S_relocate(__position.base(), __old_finish,
+     486    106546170 :                                          __new_finish, _M_get_Tp_allocator());
+     487              :             }
+     488              :           else
+     489              : #endif
+     490              :             {
+     491              :               __new_finish
+     492              :                 = std::__uninitialized_move_if_noexcept_a
+     493              :                 (__old_start, __position.base(),
+     494              :                  __new_start, _M_get_Tp_allocator());
+     495              : 
+     496              :               ++__new_finish;
+     497              : 
+     498              :               __new_finish
+     499              :                 = std::__uninitialized_move_if_noexcept_a
+     500              :                 (__position.base(), __old_finish,
+     501              :                  __new_finish, _M_get_Tp_allocator());
+     502              :             }
+     503              :         }
+     504            0 :       __catch(...)
+     505              :         {
+     506            0 :           if (!__new_finish)
+     507            0 :             _Alloc_traits::destroy(this->_M_impl,
+     508            0 :                                    __new_start + __elems_before);
+     509              :           else
+     510            0 :             std::_Destroy(__new_start, __new_finish, _M_get_Tp_allocator());
+     511            0 :           _M_deallocate(__new_start, __len);
+     512            0 :           __throw_exception_again;
+     513              :         }
+     514              : #if __cplusplus >= 201103L
+     515              :       if _GLIBCXX17_CONSTEXPR (!_S_use_relocate())
+     516              : #endif
+     517              :         std::_Destroy(__old_start, __old_finish, _M_get_Tp_allocator());
+     518              :       _GLIBCXX_ASAN_ANNOTATE_REINIT;
+     519    106546170 :       _M_deallocate(__old_start,
+     520    106546170 :                     this->_M_impl._M_end_of_storage - __old_start);
+     521    106546170 :       this->_M_impl._M_start = __new_start;
+     522    106546170 :       this->_M_impl._M_finish = __new_finish;
+     523    106546170 :       this->_M_impl._M_end_of_storage = __new_start + __len;
+     524    106546170 :     }
+     525              : 
+     526              :   template<typename _Tp, typename _Alloc>
+     527              :     _GLIBCXX20_CONSTEXPR
+     528              :     void
+     529              :     vector<_Tp, _Alloc>::
+     530              :     _M_fill_insert(iterator __position, size_type __n, const value_type& __x)
+     531              :     {
+     532              :       if (__n != 0)
+     533              :         {
+     534              :           if (size_type(this->_M_impl._M_end_of_storage
+     535              :                         - this->_M_impl._M_finish) >= __n)
+     536              :             {
+     537              : #if __cplusplus < 201103L
+     538              :               value_type __x_copy = __x;
+     539              : #else
+     540              :               _Temporary_value __tmp(this, __x);
+     541              :               value_type& __x_copy = __tmp._M_val();
+     542              : #endif
+     543              :               const size_type __elems_after = end() - __position;
+     544              :               pointer __old_finish(this->_M_impl._M_finish);
+     545              :               if (__elems_after > __n)
+     546              :                 {
+     547              :                   _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
+     548              :                   std::__uninitialized_move_a(__old_finish - __n,
+     549              :                                               __old_finish,
+     550              :                                               __old_finish,
+     551              :                                               _M_get_Tp_allocator());
+     552              :                   this->_M_impl._M_finish += __n;
+     553              :                   _GLIBCXX_ASAN_ANNOTATE_GREW(__n);
+     554              :                   _GLIBCXX_MOVE_BACKWARD3(__position.base(),
+     555              :                                           __old_finish - __n, __old_finish);
+     556              :                   std::fill(__position.base(), __position.base() + __n,
+     557              :                             __x_copy);
+     558              :                 }
+     559              :               else
+     560              :                 {
+     561              :                   _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
+     562              :                   this->_M_impl._M_finish =
+     563              :                     std::__uninitialized_fill_n_a(__old_finish,
+     564              :                                                   __n - __elems_after,
+     565              :                                                   __x_copy,
+     566              :                                                   _M_get_Tp_allocator());
+     567              :                   _GLIBCXX_ASAN_ANNOTATE_GREW(__n - __elems_after);
+     568              :                   std::__uninitialized_move_a(__position.base(), __old_finish,
+     569              :                                               this->_M_impl._M_finish,
+     570              :                                               _M_get_Tp_allocator());
+     571              :                   this->_M_impl._M_finish += __elems_after;
+     572              :                   _GLIBCXX_ASAN_ANNOTATE_GREW(__elems_after);
+     573              :                   std::fill(__position.base(), __old_finish, __x_copy);
+     574              :                 }
+     575              :             }
+     576              :           else
+     577              :             {
+     578              :               // Make local copies of these members because the compiler thinks
+     579              :               // the allocator can alter them if 'this' is globally reachable.
+     580              :               pointer __old_start = this->_M_impl._M_start;
+     581              :               pointer __old_finish = this->_M_impl._M_finish;
+     582              :               const pointer __pos = __position.base();
+     583              : 
+     584              :               const size_type __len =
+     585              :                 _M_check_len(__n, "vector::_M_fill_insert");
+     586              :               const size_type __elems_before = __pos - __old_start;
+     587              :               pointer __new_start(this->_M_allocate(__len));
+     588              :               pointer __new_finish(__new_start);
+     589              :               __try
+     590              :                 {
+     591              :                   // See _M_realloc_insert above.
+     592              :                   std::__uninitialized_fill_n_a(__new_start + __elems_before,
+     593              :                                                 __n, __x,
+     594              :                                                 _M_get_Tp_allocator());
+     595              :                   __new_finish = pointer();
+     596              : 
+     597              :                   __new_finish
+     598              :                     = std::__uninitialized_move_if_noexcept_a
+     599              :                     (__old_start, __pos, __new_start, _M_get_Tp_allocator());
+     600              : 
+     601              :                   __new_finish += __n;
+     602              : 
+     603              :                   __new_finish
+     604              :                     = std::__uninitialized_move_if_noexcept_a
+     605              :                     (__pos, __old_finish, __new_finish, _M_get_Tp_allocator());
+     606              :                 }
+     607              :               __catch(...)
+     608              :                 {
+     609              :                   if (!__new_finish)
+     610              :                     std::_Destroy(__new_start + __elems_before,
+     611              :                                   __new_start + __elems_before + __n,
+     612              :                                   _M_get_Tp_allocator());
+     613              :                   else
+     614              :                     std::_Destroy(__new_start, __new_finish,
+     615              :                                   _M_get_Tp_allocator());
+     616              :                   _M_deallocate(__new_start, __len);
+     617              :                   __throw_exception_again;
+     618              :                 }
+     619              :               std::_Destroy(__old_start, __old_finish, _M_get_Tp_allocator());
+     620              :               _GLIBCXX_ASAN_ANNOTATE_REINIT;
+     621              :               _M_deallocate(__old_start,
+     622              :                             this->_M_impl._M_end_of_storage - __old_start);
+     623              :               this->_M_impl._M_start = __new_start;
+     624              :               this->_M_impl._M_finish = __new_finish;
+     625              :               this->_M_impl._M_end_of_storage = __new_start + __len;
+     626              :             }
+     627              :         }
+     628              :     }
+     629              : 
+     630              : #if __cplusplus >= 201103L
+     631              :   template<typename _Tp, typename _Alloc>
+     632              :     _GLIBCXX20_CONSTEXPR
+     633              :     void
+     634            0 :     vector<_Tp, _Alloc>::
+     635              :     _M_default_append(size_type __n)
+     636              :     {
+     637            0 :       if (__n != 0)
+     638              :         {
+     639            0 :           const size_type __size = size();
+     640            0 :           size_type __navail = size_type(this->_M_impl._M_end_of_storage
+     641            0 :                                          - this->_M_impl._M_finish);
+     642              : 
+     643            0 :           if (__size > max_size() || __navail > max_size() - __size)
+     644            0 :             __builtin_unreachable();
+     645              : 
+     646            0 :           if (__navail >= __n)
+     647              :             {
+     648              :               _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
+     649            0 :               this->_M_impl._M_finish =
+     650            0 :                 std::__uninitialized_default_n_a(this->_M_impl._M_finish,
+     651            0 :                                                  __n, _M_get_Tp_allocator());
+     652              :               _GLIBCXX_ASAN_ANNOTATE_GREW(__n);
+     653              :             }
+     654              :           else
+     655              :             {
+     656              :               // Make local copies of these members because the compiler thinks
+     657              :               // the allocator can alter them if 'this' is globally reachable.
+     658            0 :               pointer __old_start = this->_M_impl._M_start;
+     659            0 :               pointer __old_finish = this->_M_impl._M_finish;
+     660              : 
+     661              :               const size_type __len =
+     662            0 :                 _M_check_len(__n, "vector::_M_default_append");
+     663            0 :               pointer __new_start(this->_M_allocate(__len));
+     664              :               if _GLIBCXX17_CONSTEXPR (_S_use_relocate())
+     665              :                 {
+     666              :                   __try
+     667              :                     {
+     668            0 :                       std::__uninitialized_default_n_a(__new_start + __size,
+     669            0 :                               __n, _M_get_Tp_allocator());
+     670              :                     }
+     671            0 :                   __catch(...)
+     672              :                     {
+     673            0 :                       _M_deallocate(__new_start, __len);
+     674            0 :                       __throw_exception_again;
+     675              :                     }
+     676            0 :                   _S_relocate(__old_start, __old_finish,
+     677            0 :                               __new_start, _M_get_Tp_allocator());
+     678              :                 }
+     679              :               else
+     680              :                 {
+     681              :                   pointer __destroy_from = pointer();
+     682              :                   __try
+     683              :                     {
+     684              :                       std::__uninitialized_default_n_a(__new_start + __size,
+     685              :                               __n, _M_get_Tp_allocator());
+     686              :                       __destroy_from = __new_start + __size;
+     687              :                       std::__uninitialized_move_if_noexcept_a(
+     688              :                               __old_start, __old_finish,
+     689              :                               __new_start, _M_get_Tp_allocator());
+     690              :                     }
+     691              :                   __catch(...)
+     692              :                     {
+     693              :                       if (__destroy_from)
+     694              :                         std::_Destroy(__destroy_from, __destroy_from + __n,
+     695              :                                       _M_get_Tp_allocator());
+     696              :                       _M_deallocate(__new_start, __len);
+     697              :                       __throw_exception_again;
+     698              :                     }
+     699              :                   std::_Destroy(__old_start, __old_finish,
+     700              :                                 _M_get_Tp_allocator());
+     701              :                 }
+     702              :               _GLIBCXX_ASAN_ANNOTATE_REINIT;
+     703            0 :               _M_deallocate(__old_start,
+     704            0 :                             this->_M_impl._M_end_of_storage - __old_start);
+     705            0 :               this->_M_impl._M_start = __new_start;
+     706            0 :               this->_M_impl._M_finish = __new_start + __size + __n;
+     707            0 :               this->_M_impl._M_end_of_storage = __new_start + __len;
+     708              :             }
+     709              :         }
+     710            0 :     }
+     711              : 
+     712              :   template<typename _Tp, typename _Alloc>
+     713              :     _GLIBCXX20_CONSTEXPR
+     714              :     bool
+     715              :     vector<_Tp, _Alloc>::
+     716              :     _M_shrink_to_fit()
+     717              :     {
+     718              :       if (capacity() == size())
+     719              :         return false;
+     720              :       _GLIBCXX_ASAN_ANNOTATE_REINIT;
+     721              :       return std::__shrink_to_fit_aux<vector>::_S_do_it(*this);
+     722              :     }
+     723              : #endif
+     724              : 
+     725              :   template<typename _Tp, typename _Alloc>
+     726              :     template<typename _InputIterator>
+     727              :       _GLIBCXX20_CONSTEXPR
+     728              :       void
+     729              :       vector<_Tp, _Alloc>::
+     730              :       _M_range_insert(iterator __pos, _InputIterator __first,
+     731              :                       _InputIterator __last, std::input_iterator_tag)
+     732              :       {
+     733              :         if (__pos == end())
+     734              :           {
+     735              :             for (; __first != __last; ++__first)
+     736              :               insert(end(), *__first);
+     737              :           }
+     738              :         else if (__first != __last)
+     739              :           {
+     740              :             vector __tmp(__first, __last, _M_get_Tp_allocator());
+     741              :             insert(__pos,
+     742              :                    _GLIBCXX_MAKE_MOVE_ITERATOR(__tmp.begin()),
+     743              :                    _GLIBCXX_MAKE_MOVE_ITERATOR(__tmp.end()));
+     744              :           }
+     745              :       }
+     746              : 
+     747              :   template<typename _Tp, typename _Alloc>
+     748              :     template<typename _ForwardIterator>
+     749              :       _GLIBCXX20_CONSTEXPR
+     750              :       void
+     751         1348 :       vector<_Tp, _Alloc>::
+     752              :       _M_range_insert(iterator __position, _ForwardIterator __first,
+     753              :                       _ForwardIterator __last, std::forward_iterator_tag)
+     754              :       {
+     755         1348 :         if (__first != __last)
+     756              :           {
+     757         1348 :             const size_type __n = std::distance(__first, __last);
+     758         1348 :             if (size_type(this->_M_impl._M_end_of_storage
+     759         1348 :                           - this->_M_impl._M_finish) >= __n)
+     760              :               {
+     761          402 :                 const size_type __elems_after = end() - __position;
+     762          402 :                 pointer __old_finish(this->_M_impl._M_finish);
+     763          402 :                 if (__elems_after > __n)
+     764              :                   {
+     765              :                     _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
+     766            0 :                     std::__uninitialized_move_a(this->_M_impl._M_finish - __n,
+     767              :                                                 this->_M_impl._M_finish,
+     768              :                                                 this->_M_impl._M_finish,
+     769            0 :                                                 _M_get_Tp_allocator());
+     770            0 :                     this->_M_impl._M_finish += __n;
+     771              :                     _GLIBCXX_ASAN_ANNOTATE_GREW(__n);
+     772            0 :                     _GLIBCXX_MOVE_BACKWARD3(__position.base(),
+     773              :                                             __old_finish - __n, __old_finish);
+     774            0 :                     std::copy(__first, __last, __position);
+     775              :                   }
+     776              :                 else
+     777              :                   {
+     778          402 :                     _ForwardIterator __mid = __first;
+     779              :                     std::advance(__mid, __elems_after);
+     780              :                     _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
+     781          402 :                     std::__uninitialized_copy_a(__mid, __last,
+     782              :                                                 this->_M_impl._M_finish,
+     783          402 :                                                 _M_get_Tp_allocator());
+     784          402 :                     this->_M_impl._M_finish += __n - __elems_after;
+     785              :                     _GLIBCXX_ASAN_ANNOTATE_GREW(__n - __elems_after);
+     786          402 :                     std::__uninitialized_move_a(__position.base(),
+     787              :                                                 __old_finish,
+     788              :                                                 this->_M_impl._M_finish,
+     789          402 :                                                 _M_get_Tp_allocator());
+     790          402 :                     this->_M_impl._M_finish += __elems_after;
+     791              :                     _GLIBCXX_ASAN_ANNOTATE_GREW(__elems_after);
+     792          402 :                     std::copy(__first, __mid, __position);
+     793              :                   }
+     794              :               }
+     795              :             else
+     796              :               {
+     797              :                 // Make local copies of these members because the compiler
+     798              :                 // thinks the allocator can alter them if 'this' is globally
+     799              :                 // reachable.
+     800          946 :                 pointer __old_start = this->_M_impl._M_start;
+     801          946 :                 pointer __old_finish = this->_M_impl._M_finish;
+     802              : 
+     803              :                 const size_type __len =
+     804          946 :                   _M_check_len(__n, "vector::_M_range_insert");
+     805          946 :                 pointer __new_start(this->_M_allocate(__len));
+     806          946 :                 pointer __new_finish(__new_start);
+     807              :                 __try
+     808              :                   {
+     809              :                     __new_finish
+     810              :                       = std::__uninitialized_move_if_noexcept_a
+     811          946 :                       (__old_start, __position.base(),
+     812          946 :                        __new_start, _M_get_Tp_allocator());
+     813              :                     __new_finish
+     814          946 :                       = std::__uninitialized_copy_a(__first, __last,
+     815              :                                                     __new_finish,
+     816          946 :                                                     _M_get_Tp_allocator());
+     817              :                     __new_finish
+     818              :                       = std::__uninitialized_move_if_noexcept_a
+     819          946 :                       (__position.base(), __old_finish,
+     820          946 :                        __new_finish, _M_get_Tp_allocator());
+     821              :                   }
+     822            0 :                 __catch(...)
+     823              :                   {
+     824              :                     std::_Destroy(__new_start, __new_finish,
+     825            0 :                                   _M_get_Tp_allocator());
+     826            0 :                     _M_deallocate(__new_start, __len);
+     827            0 :                     __throw_exception_again;
+     828              :                   }
+     829              :                 std::_Destroy(__old_start, __old_finish,
+     830          946 :                               _M_get_Tp_allocator());
+     831              :                 _GLIBCXX_ASAN_ANNOTATE_REINIT;
+     832          946 :                 _M_deallocate(__old_start,
+     833          946 :                               this->_M_impl._M_end_of_storage - __old_start);
+     834          946 :                 this->_M_impl._M_start = __new_start;
+     835          946 :                 this->_M_impl._M_finish = __new_finish;
+     836          946 :                 this->_M_impl._M_end_of_storage = __new_start + __len;
+     837              :               }
+     838              :           }
+     839         1348 :       }
+     840              : 
+     841              : 
+     842              :   // vector<bool>
+     843              :   template<typename _Alloc>
+     844              :     _GLIBCXX20_CONSTEXPR
+     845              :     void
+     846              :     vector<bool, _Alloc>::
+     847              :     _M_reallocate(size_type __n)
+     848              :     {
+     849              :       _Bit_pointer __q = this->_M_allocate(__n);
+     850              :       iterator __start(std::__addressof(*__q), 0);
+     851              :       iterator __finish(_M_copy_aligned(begin(), end(), __start));
+     852              :       this->_M_deallocate();
+     853              :       this->_M_impl._M_start = __start;
+     854              :       this->_M_impl._M_finish = __finish;
+     855              :       this->_M_impl._M_end_of_storage = __q + _S_nword(__n);
+     856              :     }
+     857              : 
+     858              :   template<typename _Alloc>
+     859              :     _GLIBCXX20_CONSTEXPR
+     860              :     void
+     861              :     vector<bool, _Alloc>::
+     862              :     _M_fill_insert(iterator __position, size_type __n, bool __x)
+     863              :     {
+     864              :       if (__n == 0)
+     865              :         return;
+     866              :       if (capacity() - size() >= __n)
+     867              :         {
+     868              :           std::copy_backward(__position, end(),
+     869              :                              this->_M_impl._M_finish + difference_type(__n));
+     870              :           std::fill(__position, __position + difference_type(__n), __x);
+     871              :           this->_M_impl._M_finish += difference_type(__n);
+     872              :         }
+     873              :       else
+     874              :         {
+     875              :           const size_type __len = 
+     876              :             _M_check_len(__n, "vector<bool>::_M_fill_insert");
+     877              :           _Bit_pointer __q = this->_M_allocate(__len);
+     878              :           iterator __start(std::__addressof(*__q), 0);
+     879              :           iterator __i = _M_copy_aligned(begin(), __position, __start);
+     880              :           std::fill(__i, __i + difference_type(__n), __x);
+     881              :           iterator __finish = std::copy(__position, end(),
+     882              :                                         __i + difference_type(__n));
+     883              :           this->_M_deallocate();
+     884              :           this->_M_impl._M_end_of_storage = __q + _S_nword(__len);
+     885              :           this->_M_impl._M_start = __start;
+     886              :           this->_M_impl._M_finish = __finish;
+     887              :         }
+     888              :     }
+     889              : 
+     890              :   template<typename _Alloc>
+     891              :     template<typename _ForwardIterator>
+     892              :       _GLIBCXX20_CONSTEXPR
+     893              :       void
+     894              :       vector<bool, _Alloc>::
+     895              :       _M_insert_range(iterator __position, _ForwardIterator __first, 
+     896              :                       _ForwardIterator __last, std::forward_iterator_tag)
+     897              :       {
+     898              :         if (__first != __last)
+     899              :           {
+     900              :             size_type __n = std::distance(__first, __last);
+     901              :             if (capacity() - size() >= __n)
+     902              :               {
+     903              :                 std::copy_backward(__position, end(),
+     904              :                                    this->_M_impl._M_finish
+     905              :                                    + difference_type(__n));
+     906              :                 std::copy(__first, __last, __position);
+     907              :                 this->_M_impl._M_finish += difference_type(__n);
+     908              :               }
+     909              :             else
+     910              :               {
+     911              :                 const size_type __len =
+     912              :                   _M_check_len(__n, "vector<bool>::_M_insert_range");
+     913              :                 const iterator __begin = begin(), __end = end();
+     914              :                 _Bit_pointer __q = this->_M_allocate(__len);
+     915              :                 iterator __start(std::__addressof(*__q), 0);
+     916              :                 iterator __i = _M_copy_aligned(__begin, __position, __start);
+     917              :                 __i = std::copy(__first, __last, __i);
+     918              :                 iterator __finish = std::copy(__position, __end, __i);
+     919              :                 this->_M_deallocate();
+     920              :                 this->_M_impl._M_end_of_storage = __q + _S_nword(__len);
+     921              :                 this->_M_impl._M_start = __start;
+     922              :                 this->_M_impl._M_finish = __finish;
+     923              :               }
+     924              :           }
+     925              :       }
+     926              : 
+     927              :   template<typename _Alloc>
+     928              :     _GLIBCXX20_CONSTEXPR
+     929              :     void
+     930              :     vector<bool, _Alloc>::
+     931              :     _M_insert_aux(iterator __position, bool __x)
+     932              :     {
+     933              :       if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr())
+     934              :         {
+     935              :           std::copy_backward(__position, this->_M_impl._M_finish, 
+     936              :                              this->_M_impl._M_finish + 1);
+     937              :           *__position = __x;
+     938              :           ++this->_M_impl._M_finish;
+     939              :         }
+     940              :       else
+     941              :         {
+     942              :           const size_type __len =
+     943              :             _M_check_len(size_type(1), "vector<bool>::_M_insert_aux");
+     944              :           _Bit_pointer __q = this->_M_allocate(__len);
+     945              :           iterator __start(std::__addressof(*__q), 0);
+     946              :           iterator __i = _M_copy_aligned(begin(), __position, __start);
+     947              :           *__i++ = __x;
+     948              :           iterator __finish = std::copy(__position, end(), __i);
+     949              :           this->_M_deallocate();
+     950              :           this->_M_impl._M_end_of_storage = __q + _S_nword(__len);
+     951              :           this->_M_impl._M_start = __start;
+     952              :           this->_M_impl._M_finish = __finish;
+     953              :         }
+     954              :     }
+     955              : 
+     956              :   template<typename _Alloc>
+     957              :     _GLIBCXX20_CONSTEXPR
+     958              :     typename vector<bool, _Alloc>::iterator
+     959              :     vector<bool, _Alloc>::
+     960              :     _M_erase(iterator __position)
+     961              :     {
+     962              :       if (__position + 1 != end())
+     963              :         std::copy(__position + 1, end(), __position);
+     964              :       --this->_M_impl._M_finish;
+     965              :       return __position;
+     966              :     }
+     967              : 
+     968              :   template<typename _Alloc>
+     969              :     _GLIBCXX20_CONSTEXPR
+     970              :     typename vector<bool, _Alloc>::iterator
+     971              :     vector<bool, _Alloc>::
+     972              :     _M_erase(iterator __first, iterator __last)
+     973              :     {
+     974              :       if (__first != __last)
+     975              :         _M_erase_at_end(std::copy(__last, end(), __first));
+     976              :       return __first;
+     977              :     }
+     978              : 
+     979              : #if __cplusplus >= 201103L
+     980              :   template<typename _Alloc>
+     981              :     _GLIBCXX20_CONSTEXPR
+     982              :     bool
+     983              :     vector<bool, _Alloc>::
+     984              :     _M_shrink_to_fit()
+     985              :     {
+     986              :       if (capacity() - size() < int(_S_word_bit))
+     987              :         return false;
+     988              :       __try
+     989              :         {
+     990              :           if (size_type __n = size())
+     991              :             _M_reallocate(__n);
+     992              :           else
+     993              :             {
+     994              :               this->_M_deallocate();
+     995              :               this->_M_impl._M_reset();
+     996              :             }
+     997              :           return true;
+     998              :         }
+     999              :       __catch(...)
+    1000              :         { return false; }
+    1001              :     }
+    1002              : #endif
+    1003              : 
+    1004              : _GLIBCXX_END_NAMESPACE_CONTAINER
+    1005              : _GLIBCXX_END_NAMESPACE_VERSION
+    1006              : } // namespace std
+    1007              : 
+    1008              : #if __cplusplus >= 201103L
+    1009              : 
+    1010              : namespace std _GLIBCXX_VISIBILITY(default)
+    1011              : {
+    1012              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+    1013              : 
+    1014              :   template<typename _Alloc>
+    1015              :     size_t
+    1016              :     hash<_GLIBCXX_STD_C::vector<bool, _Alloc>>::
+    1017              :     operator()(const _GLIBCXX_STD_C::vector<bool, _Alloc>& __b) const noexcept
+    1018              :     {
+    1019              :       size_t __hash = 0;
+    1020              :       const size_t __words = __b.size() / _S_word_bit;
+    1021              :       if (__words)
+    1022              :         {
+    1023              :           const size_t __clength = __words * sizeof(_Bit_type);
+    1024              :           __hash = std::_Hash_impl::hash(__b._M_impl._M_start._M_p, __clength);
+    1025              :         }
+    1026              : 
+    1027              :       const size_t __extrabits = __b.size() % _S_word_bit;
+    1028              :       if (__extrabits)
+    1029              :         {
+    1030              :           _Bit_type __hiword = *__b._M_impl._M_finish._M_p;
+    1031              :           __hiword &= ~((~static_cast<_Bit_type>(0)) << __extrabits);
+    1032              : 
+    1033              :           const size_t __clength
+    1034              :             = (__extrabits + __CHAR_BIT__ - 1) / __CHAR_BIT__;
+    1035              :           if (__words)
+    1036              :             __hash = std::_Hash_impl::hash(&__hiword, __clength, __hash);
+    1037              :           else
+    1038              :             __hash = std::_Hash_impl::hash(&__hiword, __clength);
+    1039              :         }
+    1040              : 
+    1041              :       return __hash;
+    1042              :     }
+    1043              : 
+    1044              : _GLIBCXX_END_NAMESPACE_VERSION
+    1045              : } // namespace std
+    1046              : 
+    1047              : #endif // C++11
+    1048              : 
+    1049              : #undef _GLIBCXX_ASAN_ANNOTATE_REINIT
+    1050              : #undef _GLIBCXX_ASAN_ANNOTATE_GROW
+    1051              : #undef _GLIBCXX_ASAN_ANNOTATE_GREW
+    1052              : #undef _GLIBCXX_ASAN_ANNOTATE_SHRINK
+    1053              : 
+    1054              : #endif /* _VECTOR_TCC */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bitset.func-c.html b/html/usr/include/c++/13/bitset.func-c.html new file mode 100644 index 0000000..1a31635 --- /dev/null +++ b/html/usr/include/c++/13/bitset.func-c.html @@ -0,0 +1,173 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bitset - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - bitset (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %340
Test Date:2024-04-30 13:17:26Functions:0.0 %140
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt12_Base_bitsetILm4EE10_M_getwordEm0
_ZNKSt6bitsetILm256EE15_Unchecked_testEm0
_ZNKSt6bitsetILm256EE4sizeEv0
_ZNKSt6bitsetILm256EEixEm0
_ZNSt12_Base_bitsetILm4EE10_M_getwordEm0
_ZNSt12_Base_bitsetILm4EE10_S_maskbitEm0
_ZNSt12_Base_bitsetILm4EE11_S_whichbitEm0
_ZNSt12_Base_bitsetILm4EE12_S_whichwordEm0
_ZNSt12_Base_bitsetILm4EEC2Ev0
_ZNSt6bitsetILm256EE9referenceC2ERS0_m0
_ZNSt6bitsetILm256EE9referenceD2Ev0
_ZNSt6bitsetILm256EE9referenceaSEb0
_ZNSt6bitsetILm256EEC2Ev0
_ZNSt6bitsetILm256EEixEm0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bitset.func.html b/html/usr/include/c++/13/bitset.func.html new file mode 100644 index 0000000..350a5e9 --- /dev/null +++ b/html/usr/include/c++/13/bitset.func.html @@ -0,0 +1,173 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bitset - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - bitset (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %340
Test Date:2024-04-30 13:17:26Functions:0.0 %140
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt12_Base_bitsetILm4EE10_M_getwordEm0
_ZNKSt6bitsetILm256EE15_Unchecked_testEm0
_ZNKSt6bitsetILm256EE4sizeEv0
_ZNKSt6bitsetILm256EEixEm0
_ZNSt12_Base_bitsetILm4EE10_M_getwordEm0
_ZNSt12_Base_bitsetILm4EE10_S_maskbitEm0
_ZNSt12_Base_bitsetILm4EE11_S_whichbitEm0
_ZNSt12_Base_bitsetILm4EE12_S_whichwordEm0
_ZNSt12_Base_bitsetILm4EEC2Ev0
_ZNSt6bitsetILm256EE9referenceC2ERS0_m0
_ZNSt6bitsetILm256EE9referenceD2Ev0
_ZNSt6bitsetILm256EE9referenceaSEb0
_ZNSt6bitsetILm256EEC2Ev0
_ZNSt6bitsetILm256EEixEm0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/bitset.gcov.html b/html/usr/include/c++/13/bitset.gcov.html new file mode 100644 index 0000000..0e47654 --- /dev/null +++ b/html/usr/include/c++/13/bitset.gcov.html @@ -0,0 +1,1818 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/bitset + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - bitset (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %340
Test Date:2024-04-30 13:17:26Functions:0.0 %140
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // <bitset> -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  * Copyright (c) 1998
+      27              :  * Silicon Graphics Computer Systems, Inc.
+      28              :  *
+      29              :  * Permission to use, copy, modify, distribute and sell this software
+      30              :  * and its documentation for any purpose is hereby granted without fee,
+      31              :  * provided that the above copyright notice appear in all copies and
+      32              :  * that both that copyright notice and this permission notice appear
+      33              :  * in supporting documentation.  Silicon Graphics makes no
+      34              :  * representations about the suitability of this software for any
+      35              :  * purpose.  It is provided "as is" without express or implied warranty.
+      36              :  */
+      37              : 
+      38              : /** @file include/bitset
+      39              :  *  This is a Standard C++ Library header.
+      40              :  */
+      41              : 
+      42              : #ifndef _GLIBCXX_BITSET
+      43              : #define _GLIBCXX_BITSET 1
+      44              : 
+      45              : #pragma GCC system_header
+      46              : 
+      47              : #include <bits/functexcept.h>   // For invalid_argument, out_of_range,
+      48              :                                 // overflow_error
+      49              : #include <bits/stl_algobase.h>  // For std::fill
+      50              : 
+      51              : #if _GLIBCXX_HOSTED
+      52              : # include <string>
+      53              : # include <iosfwd>
+      54              : # include <bits/cxxabi_forced.h>
+      55              : #endif
+      56              : 
+      57              : #if __cplusplus >= 201103L
+      58              : # include <bits/functional_hash.h>
+      59              : #endif
+      60              : 
+      61              : #define _GLIBCXX_BITSET_BITS_PER_WORD  (__CHAR_BIT__ * __SIZEOF_LONG__)
+      62              : #define _GLIBCXX_BITSET_WORDS(__n) \
+      63              :   ((__n) / _GLIBCXX_BITSET_BITS_PER_WORD + \
+      64              :    ((__n) % _GLIBCXX_BITSET_BITS_PER_WORD == 0 ? 0 : 1))
+      65              : 
+      66              : #define _GLIBCXX_BITSET_BITS_PER_ULL (__CHAR_BIT__ * __SIZEOF_LONG_LONG__)
+      67              : 
+      68              : namespace std _GLIBCXX_VISIBILITY(default)
+      69              : {
+      70              : _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
+      71              : 
+      72              : #if __cplusplus > 202002L && _GLIBCXX_HOSTED
+      73              : # define __cpp_lib_constexpr_bitset 202202L
+      74              : #endif
+      75              : 
+      76              :   /**
+      77              :    *  Base class, general case.  It is a class invariant that _Nw will be
+      78              :    *  nonnegative.
+      79              :    *
+      80              :    *  See documentation for bitset.
+      81              :   */
+      82              :   template<size_t _Nw>
+      83              :     struct _Base_bitset
+      84              :     {
+      85              :       typedef unsigned long _WordT;
+      86              : 
+      87              :       /// 0 is the least significant word.
+      88              :       _WordT            _M_w[_Nw];
+      89              : 
+      90            0 :       _GLIBCXX_CONSTEXPR _Base_bitset() _GLIBCXX_NOEXCEPT
+      91            0 :       : _M_w() { }
+      92              : 
+      93              : #if __cplusplus >= 201103L
+      94              :       constexpr _Base_bitset(unsigned long long __val) noexcept
+      95              :       : _M_w{ _WordT(__val)
+      96              : #if __SIZEOF_LONG_LONG__ > __SIZEOF_LONG__
+      97              :                , _WordT(__val >> _GLIBCXX_BITSET_BITS_PER_WORD)
+      98              : #endif
+      99              :        } { }
+     100              : #else
+     101              :       _Base_bitset(unsigned long __val)
+     102              :       : _M_w()
+     103              :       { _M_w[0] = __val; }
+     104              : #endif
+     105              : 
+     106              :       static _GLIBCXX_CONSTEXPR size_t
+     107            0 :       _S_whichword(size_t __pos) _GLIBCXX_NOEXCEPT
+     108            0 :       { return __pos / _GLIBCXX_BITSET_BITS_PER_WORD; }
+     109              : 
+     110              :       static _GLIBCXX_CONSTEXPR size_t
+     111              :       _S_whichbyte(size_t __pos) _GLIBCXX_NOEXCEPT
+     112              :       { return (__pos % _GLIBCXX_BITSET_BITS_PER_WORD) / __CHAR_BIT__; }
+     113              : 
+     114              :       static _GLIBCXX_CONSTEXPR size_t
+     115            0 :       _S_whichbit(size_t __pos) _GLIBCXX_NOEXCEPT
+     116            0 :       { return __pos % _GLIBCXX_BITSET_BITS_PER_WORD; }
+     117              : 
+     118              :       static _GLIBCXX_CONSTEXPR _WordT
+     119            0 :       _S_maskbit(size_t __pos) _GLIBCXX_NOEXCEPT
+     120            0 :       { return (static_cast<_WordT>(1)) << _S_whichbit(__pos); }
+     121              : 
+     122              :       _GLIBCXX14_CONSTEXPR _WordT&
+     123            0 :       _M_getword(size_t __pos) _GLIBCXX_NOEXCEPT
+     124            0 :       { return _M_w[_S_whichword(__pos)]; }
+     125              : 
+     126              :       _GLIBCXX_CONSTEXPR _WordT
+     127            0 :       _M_getword(size_t __pos) const _GLIBCXX_NOEXCEPT
+     128            0 :       { return _M_w[_S_whichword(__pos)]; }
+     129              : 
+     130              : #if __cplusplus >= 201103L
+     131              :       constexpr const _WordT*
+     132              :       _M_getdata() const noexcept
+     133              :       { return _M_w; }
+     134              : #endif
+     135              : 
+     136              :       _GLIBCXX23_CONSTEXPR _WordT&
+     137              :       _M_hiword() _GLIBCXX_NOEXCEPT
+     138              :       { return _M_w[_Nw - 1]; }
+     139              : 
+     140              :       _GLIBCXX_CONSTEXPR _WordT
+     141              :       _M_hiword() const _GLIBCXX_NOEXCEPT
+     142              :       { return _M_w[_Nw - 1]; }
+     143              : 
+     144              :       _GLIBCXX23_CONSTEXPR void
+     145              :       _M_do_and(const _Base_bitset<_Nw>& __x) _GLIBCXX_NOEXCEPT
+     146              :       {
+     147              :         for (size_t __i = 0; __i < _Nw; __i++)
+     148              :           _M_w[__i] &= __x._M_w[__i];
+     149              :       }
+     150              : 
+     151              :       _GLIBCXX14_CONSTEXPR void
+     152              :       _M_do_or(const _Base_bitset<_Nw>& __x) _GLIBCXX_NOEXCEPT
+     153              :       {
+     154              :         for (size_t __i = 0; __i < _Nw; __i++)
+     155              :           _M_w[__i] |= __x._M_w[__i];
+     156              :       }
+     157              : 
+     158              :       _GLIBCXX14_CONSTEXPR void
+     159              :       _M_do_xor(const _Base_bitset<_Nw>& __x) _GLIBCXX_NOEXCEPT
+     160              :       {
+     161              :         for (size_t __i = 0; __i < _Nw; __i++)
+     162              :           _M_w[__i] ^= __x._M_w[__i];
+     163              :       }
+     164              : 
+     165              :       _GLIBCXX14_CONSTEXPR void
+     166              :       _M_do_left_shift(size_t __shift) _GLIBCXX_NOEXCEPT;
+     167              : 
+     168              :       _GLIBCXX14_CONSTEXPR void
+     169              :       _M_do_right_shift(size_t __shift) _GLIBCXX_NOEXCEPT;
+     170              : 
+     171              :       _GLIBCXX14_CONSTEXPR void
+     172              :       _M_do_flip() _GLIBCXX_NOEXCEPT
+     173              :       {
+     174              :         for (size_t __i = 0; __i < _Nw; __i++)
+     175              :           _M_w[__i] = ~_M_w[__i];
+     176              :       }
+     177              : 
+     178              :       _GLIBCXX14_CONSTEXPR void
+     179              :       _M_do_set() _GLIBCXX_NOEXCEPT
+     180              :       {
+     181              :         for (size_t __i = 0; __i < _Nw; __i++)
+     182              :           _M_w[__i] = ~static_cast<_WordT>(0);
+     183              :       }
+     184              : 
+     185              :       _GLIBCXX14_CONSTEXPR void
+     186              :       _M_do_reset() _GLIBCXX_NOEXCEPT
+     187              :       {
+     188              : #if __cplusplus >= 201402L
+     189              :         if (__builtin_is_constant_evaluated())
+     190              :           {
+     191              :             for (_WordT& __w : _M_w)
+     192              :               __w = 0;
+     193              :             return;
+     194              :           }
+     195              : #endif
+     196              :         __builtin_memset(_M_w, 0, _Nw * sizeof(_WordT));
+     197              :       }
+     198              : 
+     199              :       _GLIBCXX14_CONSTEXPR bool
+     200              :       _M_is_equal(const _Base_bitset<_Nw>& __x) const _GLIBCXX_NOEXCEPT
+     201              :       {
+     202              :         for (size_t __i = 0; __i < _Nw; ++__i)
+     203              :           if (_M_w[__i] != __x._M_w[__i])
+     204              :             return false;
+     205              :         return true;
+     206              :       }
+     207              : 
+     208              :       template<size_t _Nb>
+     209              :         _GLIBCXX14_CONSTEXPR bool
+     210              :         _M_are_all() const _GLIBCXX_NOEXCEPT
+     211              :         {
+     212              :           for (size_t __i = 0; __i < _Nw - 1; __i++)
+     213              :             if (_M_w[__i] != ~static_cast<_WordT>(0))
+     214              :               return false;
+     215              :           return _M_hiword() == (~static_cast<_WordT>(0)
+     216              :                                  >> (_Nw * _GLIBCXX_BITSET_BITS_PER_WORD
+     217              :                                      - _Nb));
+     218              :         }
+     219              : 
+     220              :       _GLIBCXX14_CONSTEXPR bool
+     221              :       _M_is_any() const _GLIBCXX_NOEXCEPT
+     222              :       {
+     223              :         for (size_t __i = 0; __i < _Nw; __i++)
+     224              :           if (_M_w[__i] != static_cast<_WordT>(0))
+     225              :             return true;
+     226              :         return false;
+     227              :       }
+     228              : 
+     229              :       _GLIBCXX14_CONSTEXPR size_t
+     230              :       _M_do_count() const _GLIBCXX_NOEXCEPT
+     231              :       {
+     232              :         size_t __result = 0;
+     233              :         for (size_t __i = 0; __i < _Nw; __i++)
+     234              :           __result += __builtin_popcountl(_M_w[__i]);
+     235              :         return __result;
+     236              :       }
+     237              : 
+     238              :       _GLIBCXX14_CONSTEXPR unsigned long
+     239              :       _M_do_to_ulong() const;
+     240              : 
+     241              : #if __cplusplus >= 201103L
+     242              :       _GLIBCXX14_CONSTEXPR unsigned long long
+     243              :       _M_do_to_ullong() const;
+     244              : #endif
+     245              : 
+     246              :       // find first "on" bit
+     247              :       _GLIBCXX14_CONSTEXPR size_t
+     248              :       _M_do_find_first(size_t) const _GLIBCXX_NOEXCEPT;
+     249              : 
+     250              :       // find the next "on" bit that follows "prev"
+     251              :       _GLIBCXX14_CONSTEXPR size_t
+     252              :       _M_do_find_next(size_t, size_t) const _GLIBCXX_NOEXCEPT;
+     253              :     };
+     254              : 
+     255              :   // Definitions of non-inline functions from _Base_bitset.
+     256              :   template<size_t _Nw>
+     257              :     _GLIBCXX14_CONSTEXPR void
+     258              :     _Base_bitset<_Nw>::_M_do_left_shift(size_t __shift) _GLIBCXX_NOEXCEPT
+     259              :     {
+     260              :       if (__builtin_expect(__shift != 0, 1))
+     261              :         {
+     262              :           const size_t __wshift = __shift / _GLIBCXX_BITSET_BITS_PER_WORD;
+     263              :           const size_t __offset = __shift % _GLIBCXX_BITSET_BITS_PER_WORD;
+     264              : 
+     265              :           if (__offset == 0)
+     266              :             for (size_t __n = _Nw - 1; __n >= __wshift; --__n)
+     267              :               _M_w[__n] = _M_w[__n - __wshift];
+     268              :           else
+     269              :             {
+     270              :               const size_t __sub_offset = (_GLIBCXX_BITSET_BITS_PER_WORD
+     271              :                                            - __offset);
+     272              :               for (size_t __n = _Nw - 1; __n > __wshift; --__n)
+     273              :                 _M_w[__n] = ((_M_w[__n - __wshift] << __offset)
+     274              :                              | (_M_w[__n - __wshift - 1] >> __sub_offset));
+     275              :               _M_w[__wshift] = _M_w[0] << __offset;
+     276              :             }
+     277              : 
+     278              :           std::fill(_M_w + 0, _M_w + __wshift, static_cast<_WordT>(0));
+     279              :         }
+     280              :     }
+     281              : 
+     282              :   template<size_t _Nw>
+     283              :     _GLIBCXX14_CONSTEXPR void
+     284              :     _Base_bitset<_Nw>::_M_do_right_shift(size_t __shift) _GLIBCXX_NOEXCEPT
+     285              :     {
+     286              :       if (__builtin_expect(__shift != 0, 1))
+     287              :         {
+     288              :           const size_t __wshift = __shift / _GLIBCXX_BITSET_BITS_PER_WORD;
+     289              :           const size_t __offset = __shift % _GLIBCXX_BITSET_BITS_PER_WORD;
+     290              :           const size_t __limit = _Nw - __wshift - 1;
+     291              : 
+     292              :           if (__offset == 0)
+     293              :             for (size_t __n = 0; __n <= __limit; ++__n)
+     294              :               _M_w[__n] = _M_w[__n + __wshift];
+     295              :           else
+     296              :             {
+     297              :               const size_t __sub_offset = (_GLIBCXX_BITSET_BITS_PER_WORD
+     298              :                                            - __offset);
+     299              :               for (size_t __n = 0; __n < __limit; ++__n)
+     300              :                 _M_w[__n] = ((_M_w[__n + __wshift] >> __offset)
+     301              :                              | (_M_w[__n + __wshift + 1] << __sub_offset));
+     302              :               _M_w[__limit] = _M_w[_Nw-1] >> __offset;
+     303              :             }
+     304              : 
+     305              :           std::fill(_M_w + __limit + 1, _M_w + _Nw, static_cast<_WordT>(0));
+     306              :         }
+     307              :     }
+     308              : 
+     309              :   template<size_t _Nw>
+     310              :     _GLIBCXX14_CONSTEXPR unsigned long
+     311              :     _Base_bitset<_Nw>::_M_do_to_ulong() const
+     312              :     {
+     313              :       for (size_t __i = 1; __i < _Nw; ++__i)
+     314              :         if (_M_w[__i])
+     315              :           __throw_overflow_error(__N("_Base_bitset::_M_do_to_ulong"));
+     316              :       return _M_w[0];
+     317              :     }
+     318              : 
+     319              : #if __cplusplus >= 201103L
+     320              :   template<size_t _Nw>
+     321              :     _GLIBCXX14_CONSTEXPR unsigned long long
+     322              :     _Base_bitset<_Nw>::_M_do_to_ullong() const
+     323              :     {
+     324              :       const bool __dw = sizeof(unsigned long long) > sizeof(unsigned long);
+     325              :       for (size_t __i = 1 + __dw; __i < _Nw; ++__i)
+     326              :         if (_M_w[__i])
+     327              :           __throw_overflow_error(__N("_Base_bitset::_M_do_to_ullong"));
+     328              : 
+     329              :       if (__dw)
+     330              :         return _M_w[0] + (static_cast<unsigned long long>(_M_w[1])
+     331              :                           << _GLIBCXX_BITSET_BITS_PER_WORD);
+     332              :       return _M_w[0];
+     333              :     }
+     334              : #endif
+     335              : 
+     336              :   template<size_t _Nw>
+     337              :     _GLIBCXX14_CONSTEXPR size_t
+     338              :     _Base_bitset<_Nw>::
+     339              :     _M_do_find_first(size_t __not_found) const _GLIBCXX_NOEXCEPT
+     340              :     {
+     341              :       for (size_t __i = 0; __i < _Nw; __i++)
+     342              :         {
+     343              :           _WordT __thisword = _M_w[__i];
+     344              :           if (__thisword != static_cast<_WordT>(0))
+     345              :             return (__i * _GLIBCXX_BITSET_BITS_PER_WORD
+     346              :                     + __builtin_ctzl(__thisword));
+     347              :         }
+     348              :       // not found, so return an indication of failure.
+     349              :       return __not_found;
+     350              :     }
+     351              : 
+     352              :   template<size_t _Nw>
+     353              :     _GLIBCXX14_CONSTEXPR size_t
+     354              :     _Base_bitset<_Nw>::
+     355              :     _M_do_find_next(size_t __prev, size_t __not_found) const _GLIBCXX_NOEXCEPT
+     356              :     {
+     357              :       // make bound inclusive
+     358              :       ++__prev;
+     359              : 
+     360              :       // check out of bounds
+     361              :       if (__prev >= _Nw * _GLIBCXX_BITSET_BITS_PER_WORD)
+     362              :         return __not_found;
+     363              : 
+     364              :       // search first word
+     365              :       size_t __i = _S_whichword(__prev);
+     366              :       _WordT __thisword = _M_w[__i];
+     367              : 
+     368              :       // mask off bits below bound
+     369              :       __thisword &= (~static_cast<_WordT>(0)) << _S_whichbit(__prev);
+     370              : 
+     371              :       if (__thisword != static_cast<_WordT>(0))
+     372              :         return (__i * _GLIBCXX_BITSET_BITS_PER_WORD
+     373              :                 + __builtin_ctzl(__thisword));
+     374              : 
+     375              :       // check subsequent words
+     376              :       __i++;
+     377              :       for (; __i < _Nw; __i++)
+     378              :         {
+     379              :           __thisword = _M_w[__i];
+     380              :           if (__thisword != static_cast<_WordT>(0))
+     381              :             return (__i * _GLIBCXX_BITSET_BITS_PER_WORD
+     382              :                     + __builtin_ctzl(__thisword));
+     383              :         }
+     384              :       // not found, so return an indication of failure.
+     385              :       return __not_found;
+     386              :     } // end _M_do_find_next
+     387              : 
+     388              :   /**
+     389              :    *  Base class, specialization for a single word.
+     390              :    *
+     391              :    *  See documentation for bitset.
+     392              :   */
+     393              :   template<>
+     394              :     struct _Base_bitset<1>
+     395              :     {
+     396              :       typedef unsigned long _WordT;
+     397              :       _WordT _M_w;
+     398              : 
+     399              :       _GLIBCXX_CONSTEXPR _Base_bitset() _GLIBCXX_NOEXCEPT
+     400              :       : _M_w(0)
+     401              :       { }
+     402              : 
+     403              : #if __cplusplus >= 201103L
+     404              :       constexpr _Base_bitset(unsigned long long __val) noexcept
+     405              : #else
+     406              :       _Base_bitset(unsigned long __val)
+     407              : #endif
+     408              :       : _M_w(__val)
+     409              :       { }
+     410              : 
+     411              :       static _GLIBCXX_CONSTEXPR size_t
+     412              :       _S_whichword(size_t __pos) _GLIBCXX_NOEXCEPT
+     413              :       { return __pos / _GLIBCXX_BITSET_BITS_PER_WORD; }
+     414              : 
+     415              :       static _GLIBCXX_CONSTEXPR size_t
+     416              :       _S_whichbyte(size_t __pos) _GLIBCXX_NOEXCEPT
+     417              :       { return (__pos % _GLIBCXX_BITSET_BITS_PER_WORD) / __CHAR_BIT__; }
+     418              : 
+     419              :       static _GLIBCXX_CONSTEXPR size_t
+     420              :       _S_whichbit(size_t __pos) _GLIBCXX_NOEXCEPT
+     421              :       {  return __pos % _GLIBCXX_BITSET_BITS_PER_WORD; }
+     422              : 
+     423              :       static _GLIBCXX_CONSTEXPR _WordT
+     424              :       _S_maskbit(size_t __pos) _GLIBCXX_NOEXCEPT
+     425              :       { return (static_cast<_WordT>(1)) << _S_whichbit(__pos); }
+     426              : 
+     427              :       _GLIBCXX14_CONSTEXPR _WordT&
+     428              :       _M_getword(size_t) _GLIBCXX_NOEXCEPT
+     429              :       { return _M_w; }
+     430              : 
+     431              :       _GLIBCXX_CONSTEXPR _WordT
+     432              :       _M_getword(size_t) const _GLIBCXX_NOEXCEPT
+     433              :       { return _M_w; }
+     434              : 
+     435              : #if __cplusplus >= 201103L
+     436              :       constexpr const _WordT*
+     437              :       _M_getdata() const noexcept
+     438              :       { return &_M_w; }
+     439              : #endif
+     440              : 
+     441              :       _GLIBCXX14_CONSTEXPR _WordT&
+     442              :       _M_hiword() _GLIBCXX_NOEXCEPT
+     443              :       { return _M_w; }
+     444              : 
+     445              :       _GLIBCXX_CONSTEXPR _WordT
+     446              :       _M_hiword() const _GLIBCXX_NOEXCEPT
+     447              :       { return _M_w; }
+     448              : 
+     449              :       _GLIBCXX14_CONSTEXPR void
+     450              :       _M_do_and(const _Base_bitset<1>& __x) _GLIBCXX_NOEXCEPT
+     451              :       { _M_w &= __x._M_w; }
+     452              : 
+     453              :       _GLIBCXX14_CONSTEXPR void
+     454              :       _M_do_or(const _Base_bitset<1>& __x) _GLIBCXX_NOEXCEPT
+     455              :       { _M_w |= __x._M_w; }
+     456              : 
+     457              :       _GLIBCXX14_CONSTEXPR void
+     458              :       _M_do_xor(const _Base_bitset<1>& __x) _GLIBCXX_NOEXCEPT
+     459              :       { _M_w ^= __x._M_w; }
+     460              : 
+     461              :       _GLIBCXX14_CONSTEXPR void
+     462              :       _M_do_left_shift(size_t __shift) _GLIBCXX_NOEXCEPT
+     463              :       { _M_w <<= __shift; }
+     464              : 
+     465              :       _GLIBCXX14_CONSTEXPR void
+     466              :       _M_do_right_shift(size_t __shift) _GLIBCXX_NOEXCEPT
+     467              :       { _M_w >>= __shift; }
+     468              : 
+     469              :       _GLIBCXX14_CONSTEXPR void
+     470              :       _M_do_flip() _GLIBCXX_NOEXCEPT
+     471              :       { _M_w = ~_M_w; }
+     472              : 
+     473              :       _GLIBCXX14_CONSTEXPR void
+     474              :       _M_do_set() _GLIBCXX_NOEXCEPT
+     475              :       { _M_w = ~static_cast<_WordT>(0); }
+     476              : 
+     477              :       _GLIBCXX14_CONSTEXPR void
+     478              :       _M_do_reset() _GLIBCXX_NOEXCEPT
+     479              :       { _M_w = 0; }
+     480              : 
+     481              :       _GLIBCXX14_CONSTEXPR bool
+     482              :       _M_is_equal(const _Base_bitset<1>& __x) const _GLIBCXX_NOEXCEPT
+     483              :       { return _M_w == __x._M_w; }
+     484              : 
+     485              :       template<size_t _Nb>
+     486              :         _GLIBCXX14_CONSTEXPR bool
+     487              :         _M_are_all() const _GLIBCXX_NOEXCEPT
+     488              :         { return _M_w == (~static_cast<_WordT>(0)
+     489              :                           >> (_GLIBCXX_BITSET_BITS_PER_WORD - _Nb)); }
+     490              : 
+     491              :       _GLIBCXX14_CONSTEXPR bool
+     492              :       _M_is_any() const _GLIBCXX_NOEXCEPT
+     493              :       { return _M_w != 0; }
+     494              : 
+     495              :       _GLIBCXX14_CONSTEXPR size_t
+     496              :       _M_do_count() const _GLIBCXX_NOEXCEPT
+     497              :       { return __builtin_popcountl(_M_w); }
+     498              : 
+     499              :       _GLIBCXX14_CONSTEXPR unsigned long
+     500              :       _M_do_to_ulong() const _GLIBCXX_NOEXCEPT
+     501              :       { return _M_w; }
+     502              : 
+     503              : #if __cplusplus >= 201103L
+     504              :       constexpr unsigned long long
+     505              :       _M_do_to_ullong() const noexcept
+     506              :       { return _M_w; }
+     507              : #endif
+     508              : 
+     509              :       _GLIBCXX14_CONSTEXPR size_t
+     510              :       _M_do_find_first(size_t __not_found) const _GLIBCXX_NOEXCEPT
+     511              :       {
+     512              :         if (_M_w != 0)
+     513              :           return __builtin_ctzl(_M_w);
+     514              :         else
+     515              :           return __not_found;
+     516              :       }
+     517              : 
+     518              :       // find the next "on" bit that follows "prev"
+     519              :       _GLIBCXX14_CONSTEXPR size_t
+     520              :       _M_do_find_next(size_t __prev, size_t __not_found) const
+     521              :         _GLIBCXX_NOEXCEPT
+     522              :       {
+     523              :         ++__prev;
+     524              :         if (__prev >= ((size_t) _GLIBCXX_BITSET_BITS_PER_WORD))
+     525              :           return __not_found;
+     526              : 
+     527              :         _WordT __x = _M_w >> __prev;
+     528              :         if (__x != 0)
+     529              :           return __builtin_ctzl(__x) + __prev;
+     530              :         else
+     531              :           return __not_found;
+     532              :       }
+     533              :     };
+     534              : 
+     535              :   /**
+     536              :    *  Base class, specialization for no storage (zero-length %bitset).
+     537              :    *
+     538              :    *  See documentation for bitset.
+     539              :   */
+     540              :   template<>
+     541              :     struct _Base_bitset<0>
+     542              :     {
+     543              :       typedef unsigned long _WordT;
+     544              : 
+     545              :       _GLIBCXX_CONSTEXPR _Base_bitset() _GLIBCXX_NOEXCEPT
+     546              :       { }
+     547              : 
+     548              : #if __cplusplus >= 201103L
+     549              :       constexpr _Base_bitset(unsigned long long) noexcept
+     550              : #else
+     551              :       _Base_bitset(unsigned long)
+     552              : #endif
+     553              :       { }
+     554              : 
+     555              :       static _GLIBCXX_CONSTEXPR size_t
+     556              :       _S_whichword(size_t __pos) _GLIBCXX_NOEXCEPT
+     557              :       { return __pos / _GLIBCXX_BITSET_BITS_PER_WORD; }
+     558              : 
+     559              :       static _GLIBCXX_CONSTEXPR size_t
+     560              :       _S_whichbyte(size_t __pos) _GLIBCXX_NOEXCEPT
+     561              :       { return (__pos % _GLIBCXX_BITSET_BITS_PER_WORD) / __CHAR_BIT__; }
+     562              : 
+     563              :       static _GLIBCXX_CONSTEXPR size_t
+     564              :       _S_whichbit(size_t __pos) _GLIBCXX_NOEXCEPT
+     565              :       {  return __pos % _GLIBCXX_BITSET_BITS_PER_WORD; }
+     566              : 
+     567              :       static _GLIBCXX_CONSTEXPR _WordT
+     568              :       _S_maskbit(size_t __pos) _GLIBCXX_NOEXCEPT
+     569              :       { return (static_cast<_WordT>(1)) << _S_whichbit(__pos); }
+     570              : 
+     571              :       // This would normally give access to the data.  The bounds-checking
+     572              :       // in the bitset class will prevent the user from getting this far,
+     573              :       // but this must fail if the user calls _Unchecked_set directly.
+     574              :       // Let's not penalize zero-length users unless they actually
+     575              :       // make an unchecked call; all the memory ugliness is therefore
+     576              :       // localized to this single should-never-get-this-far function.
+     577              :       __attribute__((__noreturn__))
+     578              :       _WordT&
+     579              :       _M_getword(size_t) _GLIBCXX_NOEXCEPT
+     580              :       { __throw_out_of_range(__N("_Base_bitset::_M_getword")); }
+     581              : 
+     582              :       _GLIBCXX_CONSTEXPR _WordT
+     583              :       _M_getword(size_t) const _GLIBCXX_NOEXCEPT
+     584              :       { return 0; }
+     585              : 
+     586              :       _GLIBCXX_CONSTEXPR _WordT
+     587              :       _M_hiword() const _GLIBCXX_NOEXCEPT
+     588              :       { return 0; }
+     589              : 
+     590              :       _GLIBCXX14_CONSTEXPR void
+     591              :       _M_do_and(const _Base_bitset<0>&) _GLIBCXX_NOEXCEPT
+     592              :       { }
+     593              : 
+     594              :       _GLIBCXX14_CONSTEXPR void
+     595              :       _M_do_or(const _Base_bitset<0>&) _GLIBCXX_NOEXCEPT
+     596              :       { }
+     597              : 
+     598              :       _GLIBCXX14_CONSTEXPR void
+     599              :       _M_do_xor(const _Base_bitset<0>&) _GLIBCXX_NOEXCEPT
+     600              :       { }
+     601              : 
+     602              :       _GLIBCXX14_CONSTEXPR void
+     603              :       _M_do_left_shift(size_t) _GLIBCXX_NOEXCEPT
+     604              :       { }
+     605              : 
+     606              :       _GLIBCXX14_CONSTEXPR void
+     607              :       _M_do_right_shift(size_t) _GLIBCXX_NOEXCEPT
+     608              :       { }
+     609              : 
+     610              :       _GLIBCXX14_CONSTEXPR void
+     611              :       _M_do_flip() _GLIBCXX_NOEXCEPT
+     612              :       { }
+     613              : 
+     614              :       _GLIBCXX14_CONSTEXPR void
+     615              :       _M_do_set() _GLIBCXX_NOEXCEPT
+     616              :       { }
+     617              : 
+     618              :       _GLIBCXX14_CONSTEXPR void
+     619              :       _M_do_reset() _GLIBCXX_NOEXCEPT
+     620              :       { }
+     621              : 
+     622              :       // Are all empty bitsets equal to each other?  Are they equal to
+     623              :       // themselves?  How to compare a thing which has no state?  What is
+     624              :       // the sound of one zero-length bitset clapping?
+     625              :       _GLIBCXX_CONSTEXPR bool
+     626              :       _M_is_equal(const _Base_bitset<0>&) const _GLIBCXX_NOEXCEPT
+     627              :       { return true; }
+     628              : 
+     629              :       template<size_t _Nb>
+     630              :         _GLIBCXX_CONSTEXPR bool
+     631              :         _M_are_all() const _GLIBCXX_NOEXCEPT
+     632              :         { return true; }
+     633              : 
+     634              :       _GLIBCXX_CONSTEXPR bool
+     635              :       _M_is_any() const _GLIBCXX_NOEXCEPT
+     636              :       { return false; }
+     637              : 
+     638              :       _GLIBCXX_CONSTEXPR size_t
+     639              :       _M_do_count() const _GLIBCXX_NOEXCEPT
+     640              :       { return 0; }
+     641              : 
+     642              :       _GLIBCXX_CONSTEXPR unsigned long
+     643              :       _M_do_to_ulong() const _GLIBCXX_NOEXCEPT
+     644              :       { return 0; }
+     645              : 
+     646              : #if __cplusplus >= 201103L
+     647              :       constexpr unsigned long long
+     648              :       _M_do_to_ullong() const noexcept
+     649              :       { return 0; }
+     650              : #endif
+     651              : 
+     652              :       // Normally "not found" is the size, but that could also be
+     653              :       // misinterpreted as an index in this corner case.  Oh well.
+     654              :       _GLIBCXX_CONSTEXPR size_t
+     655              :       _M_do_find_first(size_t) const _GLIBCXX_NOEXCEPT
+     656              :       { return 0; }
+     657              : 
+     658              :       _GLIBCXX_CONSTEXPR size_t
+     659              :       _M_do_find_next(size_t, size_t) const _GLIBCXX_NOEXCEPT
+     660              :       { return 0; }
+     661              :     };
+     662              : 
+     663              : 
+     664              :   // Helper class to zero out the unused high-order bits in the highest word.
+     665              :   template<size_t _Extrabits>
+     666              :     struct _Sanitize
+     667              :     {
+     668              :       typedef unsigned long _WordT;
+     669              : 
+     670              :       static _GLIBCXX14_CONSTEXPR void
+     671              :       _S_do_sanitize(_WordT& __val) _GLIBCXX_NOEXCEPT
+     672              :       { __val &= ~((~static_cast<_WordT>(0)) << _Extrabits); }
+     673              :     };
+     674              : 
+     675              :   template<>
+     676              :     struct _Sanitize<0>
+     677              :     {
+     678              :       typedef unsigned long _WordT;
+     679              : 
+     680              :       static _GLIBCXX14_CONSTEXPR void
+     681              :       _S_do_sanitize(_WordT) _GLIBCXX_NOEXCEPT { }
+     682              :     };
+     683              : 
+     684              : #if __cplusplus >= 201103L
+     685              :   template<size_t _Nb, bool = (_Nb < _GLIBCXX_BITSET_BITS_PER_ULL)>
+     686              :     struct _Sanitize_val
+     687              :     {
+     688              :       static constexpr unsigned long long
+     689              :       _S_do_sanitize_val(unsigned long long __val)
+     690              :       { return __val; }
+     691              :     };
+     692              : 
+     693              :   template<size_t _Nb>
+     694              :     struct _Sanitize_val<_Nb, true>
+     695              :     {
+     696              :       static constexpr unsigned long long
+     697              :       _S_do_sanitize_val(unsigned long long __val)
+     698              :       { return __val & ~((~static_cast<unsigned long long>(0)) << _Nb); }
+     699              :     };
+     700              : 
+     701              :   namespace __bitset
+     702              :   {
+     703              : #if _GLIBCXX_HOSTED
+     704              :     template<typename _CharT>
+     705              :       using __string = std::basic_string<_CharT>;
+     706              : #else
+     707              :     template<typename _CharT>
+     708              :       struct __string
+     709              :       {
+     710              :         using size_type = size_t;
+     711              :         static constexpr size_type npos = size_type(-1);
+     712              : 
+     713              :         struct traits_type
+     714              :         {
+     715              :           static _GLIBCXX14_CONSTEXPR size_t
+     716              :           length(const _CharT* __s) noexcept
+     717              :           {
+     718              :             size_t __n = 0;
+     719              :             while (__s[__n])
+     720              :               __n++;
+     721              :             return __n;
+     722              :           }
+     723              : 
+     724              :           static constexpr bool
+     725              :           eq(_CharT __l, _CharT __r) noexcept
+     726              :           { return __l == __r; }
+     727              :         };
+     728              :       };
+     729              : #endif // HOSTED
+     730              :   } // namespace __bitset
+     731              : #endif // C++11
+     732              : 
+     733              :   /**
+     734              :    *  @brief The %bitset class represents a @e fixed-size sequence of bits.
+     735              :    *  @ingroup utilities
+     736              :    *
+     737              :    *  (Note that %bitset does @e not meet the formal requirements of a
+     738              :    *  <a href="tables.html#65">container</a>.  Mainly, it lacks iterators.)
+     739              :    *
+     740              :    *  The template argument, @a Nb, may be any non-negative number,
+     741              :    *  specifying the number of bits (e.g., "0", "12", "1024*1024").
+     742              :    *
+     743              :    *  In the general unoptimized case, storage is allocated in word-sized
+     744              :    *  blocks.  Let B be the number of bits in a word, then (Nb+(B-1))/B
+     745              :    *  words will be used for storage.  B - Nb%B bits are unused.  (They are
+     746              :    *  the high-order bits in the highest word.)  It is a class invariant
+     747              :    *  that those unused bits are always zero.
+     748              :    *
+     749              :    *  If you think of %bitset as <em>a simple array of bits</em>, be
+     750              :    *  aware that your mental picture is reversed: a %bitset behaves
+     751              :    *  the same way as bits in integers do, with the bit at index 0 in
+     752              :    *  the <em>least significant / right-hand</em> position, and the bit at
+     753              :    *  index Nb-1 in the <em>most significant / left-hand</em> position.
+     754              :    *  Thus, unlike other containers, a %bitset's index <em>counts from
+     755              :    *  right to left</em>, to put it very loosely.
+     756              :    *
+     757              :    *  This behavior is preserved when translating to and from strings.  For
+     758              :    *  example, the first line of the following program probably prints
+     759              :    *  <em>b(&apos;a&apos;) is 0001100001</em> on a modern ASCII system.
+     760              :    *
+     761              :    *  @code
+     762              :    *     #include <bitset>
+     763              :    *     #include <iostream>
+     764              :    *     #include <sstream>
+     765              :    *
+     766              :    *     using namespace std;
+     767              :    *
+     768              :    *     int main()
+     769              :    *     {
+     770              :    *         long         a = 'a';
+     771              :    *         bitset<10>   b(a);
+     772              :    *
+     773              :    *         cout << "b('a') is " << b << endl;
+     774              :    *
+     775              :    *         ostringstream s;
+     776              :    *         s << b;
+     777              :    *         string  str = s.str();
+     778              :    *         cout << "index 3 in the string is " << str[3] << " but\n"
+     779              :    *              << "index 3 in the bitset is " << b[3] << endl;
+     780              :    *     }
+     781              :    *  @endcode
+     782              :    *
+     783              :    *  Also see:
+     784              :    *  https://gcc.gnu.org/onlinedocs/libstdc++/manual/ext_containers.html
+     785              :    *  for a description of extensions.
+     786              :    *
+     787              :    *  Most of the actual code isn't contained in %bitset<> itself, but in the
+     788              :    *  base class _Base_bitset.  The base class works with whole words, not with
+     789              :    *  individual bits.  This allows us to specialize _Base_bitset for the
+     790              :    *  important special case where the %bitset is only a single word.
+     791              :    *
+     792              :    *  Extra confusion can result due to the fact that the storage for
+     793              :    *  _Base_bitset @e is a regular array, and is indexed as such.  This is
+     794              :    *  carefully encapsulated.
+     795              :   */
+     796              :   template<size_t _Nb>
+     797              :     class bitset
+     798              :     : private _Base_bitset<_GLIBCXX_BITSET_WORDS(_Nb)>
+     799              :     {
+     800              :     private:
+     801              :       typedef _Base_bitset<_GLIBCXX_BITSET_WORDS(_Nb)> _Base;
+     802              :       typedef unsigned long _WordT;
+     803              : 
+     804              : #if _GLIBCXX_HOSTED
+     805              :       template<class _CharT, class _Traits, class _Alloc>
+     806              :       _GLIBCXX23_CONSTEXPR
+     807              :       void
+     808              :       _M_check_initial_position(const std::basic_string<_CharT, _Traits, _Alloc>& __s,
+     809              :                                 size_t __position) const
+     810              :       {
+     811              :         if (__position > __s.size())
+     812              :           __throw_out_of_range_fmt(__N("bitset::bitset: __position "
+     813              :                                        "(which is %zu) > __s.size() "
+     814              :                                        "(which is %zu)"),
+     815              :                                    __position, __s.size());
+     816              :       }
+     817              : #endif // HOSTED
+     818              : 
+     819              :       _GLIBCXX23_CONSTEXPR
+     820              :       void _M_check(size_t __position, const char *__s) const
+     821              :       {
+     822              :         if (__position >= _Nb)
+     823              :           __throw_out_of_range_fmt(__N("%s: __position (which is %zu) "
+     824              :                                        ">= _Nb (which is %zu)"),
+     825              :                                    __s, __position, _Nb);
+     826              :       }
+     827              : 
+     828              :       _GLIBCXX23_CONSTEXPR
+     829              :       void
+     830              :       _M_do_sanitize() _GLIBCXX_NOEXCEPT
+     831              :       {
+     832              :         typedef _Sanitize<_Nb % _GLIBCXX_BITSET_BITS_PER_WORD> __sanitize_type;
+     833              :         __sanitize_type::_S_do_sanitize(this->_M_hiword());
+     834              :       }
+     835              : 
+     836              : #if __cplusplus >= 201103L
+     837              :       friend struct std::hash<bitset>;
+     838              : #endif
+     839              : 
+     840              :     public:
+     841              :       /**
+     842              :        *  This encapsulates the concept of a single bit.  An instance of this
+     843              :        *  class is a proxy for an actual bit; this way the individual bit
+     844              :        *  operations are done as faster word-size bitwise instructions.
+     845              :        *
+     846              :        *  Most users will never need to use this class directly; conversions
+     847              :        *  to and from bool are automatic and should be transparent.  Overloaded
+     848              :        *  operators help to preserve the illusion.
+     849              :        *
+     850              :        *  (On a typical system, this <em>bit %reference</em> is 64
+     851              :        *  times the size of an actual bit.  Ha.)
+     852              :        */
+     853              :       class reference
+     854              :       {
+     855              :         friend class bitset;
+     856              : 
+     857              :         _WordT* _M_wp;
+     858              :         size_t  _M_bpos;
+     859              : 
+     860              :         // left undefined
+     861              :         reference();
+     862              : 
+     863              :       public:
+     864              :         _GLIBCXX23_CONSTEXPR
+     865            0 :         reference(bitset& __b, size_t __pos) _GLIBCXX_NOEXCEPT
+     866              :         {
+     867            0 :           _M_wp = &__b._M_getword(__pos);
+     868            0 :           _M_bpos = _Base::_S_whichbit(__pos);
+     869            0 :         }
+     870              : 
+     871              : #if __cplusplus >= 201103L
+     872              :         reference(const reference&) = default;
+     873              : #endif
+     874              : 
+     875              : #if __cplusplus > 202002L && __cpp_constexpr_dynamic_alloc
+     876              :         constexpr
+     877              : #endif
+     878            0 :         ~reference() _GLIBCXX_NOEXCEPT
+     879            0 :         { }
+     880              : 
+     881              :         // For b[i] = __x;
+     882              :         _GLIBCXX23_CONSTEXPR
+     883              :         reference&
+     884            0 :         operator=(bool __x) _GLIBCXX_NOEXCEPT
+     885              :         {
+     886            0 :           if (__x)
+     887            0 :             *_M_wp |= _Base::_S_maskbit(_M_bpos);
+     888              :           else
+     889            0 :             *_M_wp &= ~_Base::_S_maskbit(_M_bpos);
+     890            0 :           return *this;
+     891              :         }
+     892              : 
+     893              :         // For b[i] = b[__j];
+     894              :         _GLIBCXX23_CONSTEXPR
+     895              :         reference&
+     896              :         operator=(const reference& __j) _GLIBCXX_NOEXCEPT
+     897              :         {
+     898              :           if ((*(__j._M_wp) & _Base::_S_maskbit(__j._M_bpos)))
+     899              :             *_M_wp |= _Base::_S_maskbit(_M_bpos);
+     900              :           else
+     901              :             *_M_wp &= ~_Base::_S_maskbit(_M_bpos);
+     902              :           return *this;
+     903              :         }
+     904              : 
+     905              :         // Flips the bit
+     906              :         _GLIBCXX23_CONSTEXPR
+     907              :         bool
+     908              :         operator~() const _GLIBCXX_NOEXCEPT
+     909              :         { return (*(_M_wp) & _Base::_S_maskbit(_M_bpos)) == 0; }
+     910              : 
+     911              :         // For __x = b[i];
+     912              :         _GLIBCXX23_CONSTEXPR
+     913              :         operator bool() const _GLIBCXX_NOEXCEPT
+     914              :         { return (*(_M_wp) & _Base::_S_maskbit(_M_bpos)) != 0; }
+     915              : 
+     916              :         // For b[i].flip();
+     917              :         _GLIBCXX23_CONSTEXPR
+     918              :         reference&
+     919              :         flip() _GLIBCXX_NOEXCEPT
+     920              :         {
+     921              :           *_M_wp ^= _Base::_S_maskbit(_M_bpos);
+     922              :           return *this;
+     923              :         }
+     924              :       };
+     925              :       friend class reference;
+     926              : 
+     927              :       // 23.3.5.1 constructors:
+     928              :       /// All bits set to zero.
+     929            0 :       _GLIBCXX_CONSTEXPR bitset() _GLIBCXX_NOEXCEPT
+     930            0 :       { }
+     931              : 
+     932              :       /// Initial bits bitwise-copied from a single word (others set to zero).
+     933              : #if __cplusplus >= 201103L
+     934              :       constexpr bitset(unsigned long long __val) noexcept
+     935              :       : _Base(_Sanitize_val<_Nb>::_S_do_sanitize_val(__val)) { }
+     936              : #else
+     937              :       bitset(unsigned long __val)
+     938              :       : _Base(__val)
+     939              :       { _M_do_sanitize(); }
+     940              : #endif
+     941              : 
+     942              : #if _GLIBCXX_HOSTED
+     943              :       /**
+     944              :        *  Use a subset of a string.
+     945              :        *  @param  __s  A string of @a 0 and @a 1 characters.
+     946              :        *  @param  __position  Index of the first character in @a __s to use;
+     947              :        *                    defaults to zero.
+     948              :        *  @throw  std::out_of_range  If @a pos is bigger the size of @a __s.
+     949              :        *  @throw  std::invalid_argument  If a character appears in the string
+     950              :        *                                 which is neither @a 0 nor @a 1.
+     951              :        */
+     952              :       template<class _CharT, class _Traits, class _Alloc>
+     953              :         _GLIBCXX23_CONSTEXPR
+     954              :         explicit
+     955              :         bitset(const std::basic_string<_CharT, _Traits, _Alloc>& __s,
+     956              :                size_t __position = 0)
+     957              :         : _Base()
+     958              :         {
+     959              :           _M_check_initial_position(__s, __position);
+     960              :           _M_copy_from_string(__s, __position,
+     961              :                               std::basic_string<_CharT, _Traits, _Alloc>::npos,
+     962              :                               _CharT('0'), _CharT('1'));
+     963              :         }
+     964              : 
+     965              :       /**
+     966              :        *  Use a subset of a string.
+     967              :        *  @param  __s  A string of @a 0 and @a 1 characters.
+     968              :        *  @param  __position  Index of the first character in @a __s to use.
+     969              :        *  @param  __n    The number of characters to copy.
+     970              :        *  @throw std::out_of_range If @a __position is bigger the size
+     971              :        *  of @a __s.
+     972              :        *  @throw  std::invalid_argument  If a character appears in the string
+     973              :        *                                 which is neither @a 0 nor @a 1.
+     974              :        */
+     975              :       template<class _CharT, class _Traits, class _Alloc>
+     976              :         _GLIBCXX23_CONSTEXPR
+     977              :         bitset(const std::basic_string<_CharT, _Traits, _Alloc>& __s,
+     978              :                size_t __position, size_t __n)
+     979              :         : _Base()
+     980              :         {
+     981              :           _M_check_initial_position(__s, __position);
+     982              :           _M_copy_from_string(__s, __position, __n, _CharT('0'), _CharT('1'));
+     983              :         }
+     984              : 
+     985              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     986              :       // 396. what are characters zero and one.
+     987              :       template<class _CharT, class _Traits, class _Alloc>
+     988              :         _GLIBCXX23_CONSTEXPR
+     989              :         bitset(const std::basic_string<_CharT, _Traits, _Alloc>& __s,
+     990              :                size_t __position, size_t __n,
+     991              :                _CharT __zero, _CharT __one = _CharT('1'))
+     992              :         : _Base()
+     993              :         {
+     994              :           _M_check_initial_position(__s, __position);
+     995              :           _M_copy_from_string(__s, __position, __n, __zero, __one);
+     996              :         }
+     997              : #endif // HOSTED
+     998              : 
+     999              : #if __cplusplus >= 201103L
+    1000              :       /**
+    1001              :        *  Construct from a character %array.
+    1002              :        *  @param  __str  An %array of characters @a zero and @a one.
+    1003              :        *  @param  __n    The number of characters to use.
+    1004              :        *  @param  __zero The character corresponding to the value 0.
+    1005              :        *  @param  __one  The character corresponding to the value 1.
+    1006              :        *  @throw  std::invalid_argument If a character appears in the string
+    1007              :        *                                which is neither @a __zero nor @a __one.
+    1008              :        */
+    1009              :       template<typename _CharT>
+    1010              :         [[__gnu__::__nonnull__]]
+    1011              :         _GLIBCXX23_CONSTEXPR
+    1012              :         explicit
+    1013              :         bitset(const _CharT* __str,
+    1014              :                typename __bitset::__string<_CharT>::size_type __n
+    1015              :                  = __bitset::__string<_CharT>::npos,
+    1016              :                _CharT __zero = _CharT('0'), _CharT __one = _CharT('1'))
+    1017              :         : _Base()
+    1018              :         {
+    1019              : #if _GLIBCXX_HOSTED
+    1020              :           if (!__str)
+    1021              :             __throw_logic_error(__N("bitset::bitset(const _CharT*, ...)"));
+    1022              : #endif
+    1023              :           using _Traits = typename __bitset::__string<_CharT>::traits_type;
+    1024              : 
+    1025              :           if (__n == __bitset::__string<_CharT>::npos)
+    1026              :             __n = _Traits::length(__str);
+    1027              :           _M_copy_from_ptr<_CharT, _Traits>(__str, __n, 0, __n, __zero, __one);
+    1028              :         }
+    1029              : #endif // C++11
+    1030              : 
+    1031              :       // 23.3.5.2 bitset operations:
+    1032              :       ///@{
+    1033              :       /**
+    1034              :        *  Operations on bitsets.
+    1035              :        *  @param  __rhs  A same-sized bitset.
+    1036              :        *
+    1037              :        *  These should be self-explanatory.
+    1038              :        */
+    1039              :       _GLIBCXX23_CONSTEXPR
+    1040              :       bitset<_Nb>&
+    1041              :       operator&=(const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
+    1042              :       {
+    1043              :         this->_M_do_and(__rhs);
+    1044              :         return *this;
+    1045              :       }
+    1046              : 
+    1047              :       _GLIBCXX23_CONSTEXPR
+    1048              :       bitset<_Nb>&
+    1049              :       operator|=(const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
+    1050              :       {
+    1051              :         this->_M_do_or(__rhs);
+    1052              :         return *this;
+    1053              :       }
+    1054              : 
+    1055              :       _GLIBCXX23_CONSTEXPR
+    1056              :       bitset<_Nb>&
+    1057              :       operator^=(const bitset<_Nb>& __rhs) _GLIBCXX_NOEXCEPT
+    1058              :       {
+    1059              :         this->_M_do_xor(__rhs);
+    1060              :         return *this;
+    1061              :       }
+    1062              :       ///@}
+    1063              : 
+    1064              :       ///@{
+    1065              :       /**
+    1066              :        *  Operations on bitsets.
+    1067              :        *  @param  __position  The number of places to shift.
+    1068              :        *
+    1069              :        *  These should be self-explanatory.
+    1070              :        */
+    1071              :       _GLIBCXX23_CONSTEXPR
+    1072              :       bitset<_Nb>&
+    1073              :       operator<<=(size_t __position) _GLIBCXX_NOEXCEPT
+    1074              :       {
+    1075              :         if (__builtin_expect(__position < _Nb, 1))
+    1076              :           {
+    1077              :             this->_M_do_left_shift(__position);
+    1078              :             this->_M_do_sanitize();
+    1079              :           }
+    1080              :         else
+    1081              :           this->_M_do_reset();
+    1082              :         return *this;
+    1083              :       }
+    1084              : 
+    1085              :       _GLIBCXX23_CONSTEXPR
+    1086              :       bitset<_Nb>&
+    1087              :       operator>>=(size_t __position) _GLIBCXX_NOEXCEPT
+    1088              :       {
+    1089              :         if (__builtin_expect(__position < _Nb, 1))
+    1090              :           {
+    1091              :             this->_M_do_right_shift(__position);
+    1092              :             this->_M_do_sanitize();
+    1093              :           }
+    1094              :         else
+    1095              :           this->_M_do_reset();
+    1096              :         return *this;
+    1097              :       }
+    1098              :       ///@}
+    1099              : 
+    1100              :       ///@{
+    1101              :       /**
+    1102              :        *  These versions of single-bit set, reset, flip, and test are
+    1103              :        *  extensions from the SGI version.  They do no range checking.
+    1104              :        *  @ingroup SGIextensions
+    1105              :        */
+    1106              :       _GLIBCXX23_CONSTEXPR
+    1107              :       bitset<_Nb>&
+    1108              :       _Unchecked_set(size_t __pos) _GLIBCXX_NOEXCEPT
+    1109              :       {
+    1110              :         this->_M_getword(__pos) |= _Base::_S_maskbit(__pos);
+    1111              :         return *this;
+    1112              :       }
+    1113              : 
+    1114              :       _GLIBCXX23_CONSTEXPR
+    1115              :       bitset<_Nb>&
+    1116              :       _Unchecked_set(size_t __pos, int __val) _GLIBCXX_NOEXCEPT
+    1117              :       {
+    1118              :         if (__val)
+    1119              :           this->_M_getword(__pos) |= _Base::_S_maskbit(__pos);
+    1120              :         else
+    1121              :           this->_M_getword(__pos) &= ~_Base::_S_maskbit(__pos);
+    1122              :         return *this;
+    1123              :       }
+    1124              : 
+    1125              :       _GLIBCXX23_CONSTEXPR
+    1126              :       bitset<_Nb>&
+    1127              :       _Unchecked_reset(size_t __pos) _GLIBCXX_NOEXCEPT
+    1128              :       {
+    1129              :         this->_M_getword(__pos) &= ~_Base::_S_maskbit(__pos);
+    1130              :         return *this;
+    1131              :       }
+    1132              : 
+    1133              :       _GLIBCXX23_CONSTEXPR
+    1134              :       bitset<_Nb>&
+    1135              :       _Unchecked_flip(size_t __pos) _GLIBCXX_NOEXCEPT
+    1136              :       {
+    1137              :         this->_M_getword(__pos) ^= _Base::_S_maskbit(__pos);
+    1138              :         return *this;
+    1139              :       }
+    1140              : 
+    1141              :       _GLIBCXX_CONSTEXPR bool
+    1142            0 :       _Unchecked_test(size_t __pos) const _GLIBCXX_NOEXCEPT
+    1143            0 :       { return ((this->_M_getword(__pos) & _Base::_S_maskbit(__pos))
+    1144            0 :                 != static_cast<_WordT>(0)); }
+    1145              :       ///@}
+    1146              : 
+    1147              :       // Set, reset, and flip.
+    1148              :       /**
+    1149              :        *  @brief Sets every bit to true.
+    1150              :        */
+    1151              :       _GLIBCXX23_CONSTEXPR
+    1152              :       bitset<_Nb>&
+    1153              :       set() _GLIBCXX_NOEXCEPT
+    1154              :       {
+    1155              :         this->_M_do_set();
+    1156              :         this->_M_do_sanitize();
+    1157              :         return *this;
+    1158              :       }
+    1159              : 
+    1160              :       /**
+    1161              :        *  @brief Sets a given bit to a particular value.
+    1162              :        *  @param  __position  The index of the bit.
+    1163              :        *  @param  __val  Either true or false, defaults to true.
+    1164              :        *  @throw  std::out_of_range  If @a pos is bigger the size of the %set.
+    1165              :        */
+    1166              :       _GLIBCXX23_CONSTEXPR
+    1167              :       bitset<_Nb>&
+    1168              :       set(size_t __position, bool __val = true)
+    1169              :       {
+    1170              :         this->_M_check(__position, __N("bitset::set"));
+    1171              :         return _Unchecked_set(__position, __val);
+    1172              :       }
+    1173              : 
+    1174              :       /**
+    1175              :        *  @brief Sets every bit to false.
+    1176              :        */
+    1177              :       _GLIBCXX23_CONSTEXPR
+    1178              :       bitset<_Nb>&
+    1179              :       reset() _GLIBCXX_NOEXCEPT
+    1180              :       {
+    1181              :         this->_M_do_reset();
+    1182              :         return *this;
+    1183              :       }
+    1184              : 
+    1185              :       /**
+    1186              :        *  @brief Sets a given bit to false.
+    1187              :        *  @param  __position  The index of the bit.
+    1188              :        *  @throw  std::out_of_range  If @a pos is bigger the size of the %set.
+    1189              :        *
+    1190              :        *  Same as writing @c set(pos,false).
+    1191              :        */
+    1192              :       _GLIBCXX23_CONSTEXPR
+    1193              :       bitset<_Nb>&
+    1194              :       reset(size_t __position)
+    1195              :       {
+    1196              :         this->_M_check(__position, __N("bitset::reset"));
+    1197              :         return _Unchecked_reset(__position);
+    1198              :       }
+    1199              : 
+    1200              :       /**
+    1201              :        *  @brief Toggles every bit to its opposite value.
+    1202              :        */
+    1203              :       _GLIBCXX23_CONSTEXPR
+    1204              :       bitset<_Nb>&
+    1205              :       flip() _GLIBCXX_NOEXCEPT
+    1206              :       {
+    1207              :         this->_M_do_flip();
+    1208              :         this->_M_do_sanitize();
+    1209              :         return *this;
+    1210              :       }
+    1211              : 
+    1212              :       /**
+    1213              :        *  @brief Toggles a given bit to its opposite value.
+    1214              :        *  @param  __position  The index of the bit.
+    1215              :        *  @throw  std::out_of_range  If @a pos is bigger the size of the %set.
+    1216              :        */
+    1217              :       _GLIBCXX23_CONSTEXPR
+    1218              :       bitset<_Nb>&
+    1219              :       flip(size_t __position)
+    1220              :       {
+    1221              :         this->_M_check(__position, __N("bitset::flip"));
+    1222              :         return _Unchecked_flip(__position);
+    1223              :       }
+    1224              : 
+    1225              :       /// See the no-argument flip().
+    1226              :       _GLIBCXX23_CONSTEXPR
+    1227              :       bitset<_Nb>
+    1228              :       operator~() const _GLIBCXX_NOEXCEPT
+    1229              :       { return bitset<_Nb>(*this).flip(); }
+    1230              : 
+    1231              :       ///@{
+    1232              :       /**
+    1233              :        *  @brief  Array-indexing support.
+    1234              :        *  @param  __position  Index into the %bitset.
+    1235              :        *  @return A bool for a <em>const %bitset</em>.  For non-const
+    1236              :        *           bitsets, an instance of the reference proxy class.
+    1237              :        *  @note  These operators do no range checking and throw no exceptions,
+    1238              :        *         as required by DR 11 to the standard.
+    1239              :        *
+    1240              :        *  _GLIBCXX_RESOLVE_LIB_DEFECTS Note that this implementation already
+    1241              :        *  resolves DR 11 (items 1 and 2), but does not do the range-checking
+    1242              :        *  required by that DR's resolution.  -pme
+    1243              :        *  The DR has since been changed:  range-checking is a precondition
+    1244              :        *  (users' responsibility), and these functions must not throw.  -pme
+    1245              :        */
+    1246              :       _GLIBCXX23_CONSTEXPR
+    1247              :       reference
+    1248            0 :       operator[](size_t __position)
+    1249            0 :       { return reference(*this, __position); }
+    1250              : 
+    1251              :       _GLIBCXX_CONSTEXPR bool
+    1252            0 :       operator[](size_t __position) const
+    1253            0 :       { return _Unchecked_test(__position); }
+    1254              :       ///@}
+    1255              : 
+    1256              :       /**
+    1257              :        *  @brief Returns a numerical interpretation of the %bitset.
+    1258              :        *  @return  The integral equivalent of the bits.
+    1259              :        *  @throw  std::overflow_error  If there are too many bits to be
+    1260              :        *                               represented in an @c unsigned @c long.
+    1261              :        */
+    1262              :       _GLIBCXX23_CONSTEXPR
+    1263              :       unsigned long
+    1264              :       to_ulong() const
+    1265              :       { return this->_M_do_to_ulong(); }
+    1266              : 
+    1267              : #if __cplusplus >= 201103L
+    1268              :       _GLIBCXX23_CONSTEXPR
+    1269              :       unsigned long long
+    1270              :       to_ullong() const
+    1271              :       { return this->_M_do_to_ullong(); }
+    1272              : #endif
+    1273              : 
+    1274              : #if _GLIBCXX_HOSTED
+    1275              :       /**
+    1276              :        *  @brief Returns a character interpretation of the %bitset.
+    1277              :        *  @return  The string equivalent of the bits.
+    1278              :        *
+    1279              :        *  Note the ordering of the bits:  decreasing character positions
+    1280              :        *  correspond to increasing bit positions (see the main class notes for
+    1281              :        *  an example).
+    1282              :        */
+    1283              :       template<class _CharT, class _Traits, class _Alloc>
+    1284              :         _GLIBCXX23_CONSTEXPR
+    1285              :         std::basic_string<_CharT, _Traits, _Alloc>
+    1286              :         to_string() const
+    1287              :         {
+    1288              :           std::basic_string<_CharT, _Traits, _Alloc> __result;
+    1289              :           _M_copy_to_string(__result, _CharT('0'), _CharT('1'));
+    1290              :           return __result;
+    1291              :         }
+    1292              : 
+    1293              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1294              :       // 396. what are characters zero and one.
+    1295              :       template<class _CharT, class _Traits, class _Alloc>
+    1296              :         _GLIBCXX23_CONSTEXPR
+    1297              :         std::basic_string<_CharT, _Traits, _Alloc>
+    1298              :         to_string(_CharT __zero, _CharT __one = _CharT('1')) const
+    1299              :         {
+    1300              :           std::basic_string<_CharT, _Traits, _Alloc> __result;
+    1301              :           _M_copy_to_string(__result, __zero, __one);
+    1302              :           return __result;
+    1303              :         }
+    1304              : 
+    1305              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1306              :       // 434. bitset::to_string() hard to use.
+    1307              :       template<class _CharT, class _Traits>
+    1308              :         _GLIBCXX23_CONSTEXPR
+    1309              :         std::basic_string<_CharT, _Traits, std::allocator<_CharT> >
+    1310              :         to_string() const
+    1311              :         { return to_string<_CharT, _Traits, std::allocator<_CharT> >(); }
+    1312              : 
+    1313              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1314              :       // 853. to_string needs updating with zero and one.
+    1315              :       template<class _CharT, class _Traits>
+    1316              :         _GLIBCXX23_CONSTEXPR
+    1317              :         std::basic_string<_CharT, _Traits, std::allocator<_CharT> >
+    1318              :         to_string(_CharT __zero, _CharT __one = _CharT('1')) const
+    1319              :         { return to_string<_CharT, _Traits,
+    1320              :                            std::allocator<_CharT> >(__zero, __one); }
+    1321              : 
+    1322              :       template<class _CharT>
+    1323              :         _GLIBCXX23_CONSTEXPR
+    1324              :         std::basic_string<_CharT, std::char_traits<_CharT>,
+    1325              :                           std::allocator<_CharT> >
+    1326              :         to_string() const
+    1327              :         {
+    1328              :           return to_string<_CharT, std::char_traits<_CharT>,
+    1329              :                            std::allocator<_CharT> >();
+    1330              :         }
+    1331              : 
+    1332              :       template<class _CharT>
+    1333              :         _GLIBCXX23_CONSTEXPR
+    1334              :         std::basic_string<_CharT, std::char_traits<_CharT>,
+    1335              :                           std::allocator<_CharT> >
+    1336              :         to_string(_CharT __zero, _CharT __one = _CharT('1')) const
+    1337              :         {
+    1338              :           return to_string<_CharT, std::char_traits<_CharT>,
+    1339              :                            std::allocator<_CharT> >(__zero, __one);
+    1340              :         }
+    1341              : 
+    1342              :       _GLIBCXX23_CONSTEXPR
+    1343              :       std::basic_string<char, std::char_traits<char>, std::allocator<char> >
+    1344              :       to_string() const
+    1345              :       {
+    1346              :         return to_string<char, std::char_traits<char>,
+    1347              :                          std::allocator<char> >();
+    1348              :       }
+    1349              : 
+    1350              :       _GLIBCXX23_CONSTEXPR
+    1351              :       std::basic_string<char, std::char_traits<char>, std::allocator<char> >
+    1352              :       to_string(char __zero, char __one = '1') const
+    1353              :       {
+    1354              :         return to_string<char, std::char_traits<char>,
+    1355              :                          std::allocator<char> >(__zero, __one);
+    1356              :       }
+    1357              : #endif // HOSTED
+    1358              : 
+    1359              :       /// Returns the number of bits which are set.
+    1360              :       _GLIBCXX23_CONSTEXPR
+    1361              :       size_t
+    1362              :       count() const _GLIBCXX_NOEXCEPT
+    1363              :       { return this->_M_do_count(); }
+    1364              : 
+    1365              :       /// Returns the total number of bits.
+    1366              :       _GLIBCXX_CONSTEXPR size_t
+    1367            0 :       size() const _GLIBCXX_NOEXCEPT
+    1368            0 :       { return _Nb; }
+    1369              : 
+    1370              :       ///@{
+    1371              :       /// These comparisons for equality/inequality are, well, @e bitwise.
+    1372              :       _GLIBCXX23_CONSTEXPR
+    1373              :       bool
+    1374              :       operator==(const bitset<_Nb>& __rhs) const _GLIBCXX_NOEXCEPT
+    1375              :       { return this->_M_is_equal(__rhs); }
+    1376              : 
+    1377              : #if __cpp_impl_three_way_comparison < 201907L
+    1378              :       _GLIBCXX23_CONSTEXPR
+    1379              :       bool
+    1380              :       operator!=(const bitset<_Nb>& __rhs) const _GLIBCXX_NOEXCEPT
+    1381              :       { return !this->_M_is_equal(__rhs); }
+    1382              : #endif
+    1383              :       ///@}
+    1384              : 
+    1385              :       /**
+    1386              :        *  @brief Tests the value of a bit.
+    1387              :        *  @param  __position  The index of a bit.
+    1388              :        *  @return  The value at @a pos.
+    1389              :        *  @throw  std::out_of_range  If @a pos is bigger the size of the %set.
+    1390              :        */
+    1391              :       _GLIBCXX23_CONSTEXPR
+    1392              :       bool
+    1393              :       test(size_t __position) const
+    1394              :       {
+    1395              :         this->_M_check(__position, __N("bitset::test"));
+    1396              :         return _Unchecked_test(__position);
+    1397              :       }
+    1398              : 
+    1399              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1400              :       // DR 693. std::bitset::all() missing.
+    1401              :       /**
+    1402              :        *  @brief Tests whether all the bits are on.
+    1403              :        *  @return  True if all the bits are set.
+    1404              :        */
+    1405              :       _GLIBCXX23_CONSTEXPR
+    1406              :       bool
+    1407              :       all() const _GLIBCXX_NOEXCEPT
+    1408              :       { return this->template _M_are_all<_Nb>(); }
+    1409              : 
+    1410              :       /**
+    1411              :        *  @brief Tests whether any of the bits are on.
+    1412              :        *  @return  True if at least one bit is set.
+    1413              :        */
+    1414              :       _GLIBCXX23_CONSTEXPR
+    1415              :       bool
+    1416              :       any() const _GLIBCXX_NOEXCEPT
+    1417              :       { return this->_M_is_any(); }
+    1418              : 
+    1419              :       /**
+    1420              :        *  @brief Tests whether any of the bits are on.
+    1421              :        *  @return  True if none of the bits are set.
+    1422              :        */
+    1423              :       _GLIBCXX23_CONSTEXPR
+    1424              :       bool
+    1425              :       none() const _GLIBCXX_NOEXCEPT
+    1426              :       { return !this->_M_is_any(); }
+    1427              : 
+    1428              :       ///@{
+    1429              :       /// Self-explanatory.
+    1430              :       _GLIBCXX23_CONSTEXPR
+    1431              :       bitset<_Nb>
+    1432              :       operator<<(size_t __position) const _GLIBCXX_NOEXCEPT
+    1433              :       { return bitset<_Nb>(*this) <<= __position; }
+    1434              : 
+    1435              :       _GLIBCXX23_CONSTEXPR
+    1436              :       bitset<_Nb>
+    1437              :       operator>>(size_t __position) const _GLIBCXX_NOEXCEPT
+    1438              :       { return bitset<_Nb>(*this) >>= __position; }
+    1439              :       ///@}
+    1440              : 
+    1441              :       /**
+    1442              :        *  @brief  Finds the index of the first "on" bit.
+    1443              :        *  @return  The index of the first bit set, or size() if not found.
+    1444              :        *  @ingroup SGIextensions
+    1445              :        *  @sa  _Find_next
+    1446              :        */
+    1447              :       _GLIBCXX23_CONSTEXPR
+    1448              :       size_t
+    1449              :       _Find_first() const _GLIBCXX_NOEXCEPT
+    1450              :       { return this->_M_do_find_first(_Nb); }
+    1451              : 
+    1452              :       /**
+    1453              :        *  @brief  Finds the index of the next "on" bit after prev.
+    1454              :        *  @return  The index of the next bit set, or size() if not found.
+    1455              :        *  @param  __prev  Where to start searching.
+    1456              :        *  @ingroup SGIextensions
+    1457              :        *  @sa  _Find_first
+    1458              :        */
+    1459              :       _GLIBCXX23_CONSTEXPR
+    1460              :       size_t
+    1461              :       _Find_next(size_t __prev) const _GLIBCXX_NOEXCEPT
+    1462              :       { return this->_M_do_find_next(__prev, _Nb); }
+    1463              : 
+    1464              :     private:
+    1465              :       // Helper functions for string operations.
+    1466              :       template<class _CharT, class _Traits>
+    1467              :         _GLIBCXX23_CONSTEXPR
+    1468              :         void
+    1469              :         _M_copy_from_ptr(const _CharT*, size_t, size_t, size_t,
+    1470              :                          _CharT, _CharT);
+    1471              : 
+    1472              : #if _GLIBCXX_HOSTED
+    1473              :       template<class _CharT, class _Traits, class _Alloc>
+    1474              :         _GLIBCXX23_CONSTEXPR
+    1475              :         void
+    1476              :         _M_copy_from_string(const std::basic_string<_CharT,
+    1477              :                             _Traits, _Alloc>& __s, size_t __pos, size_t __n,
+    1478              :                             _CharT __zero, _CharT __one)
+    1479              :         { _M_copy_from_ptr<_CharT, _Traits>(__s.data(), __s.size(), __pos, __n,
+    1480              :                                             __zero, __one); }
+    1481              : 
+    1482              :       template<class _CharT, class _Traits, class _Alloc>
+    1483              :         _GLIBCXX23_CONSTEXPR
+    1484              :         void
+    1485              :         _M_copy_to_string(std::basic_string<_CharT, _Traits, _Alloc>&,
+    1486              :                           _CharT, _CharT) const;
+    1487              : 
+    1488              :       template<class _CharT, class _Traits, size_t _Nb2>
+    1489              :         friend std::basic_istream<_CharT, _Traits>&
+    1490              :         operator>>(std::basic_istream<_CharT, _Traits>&, bitset<_Nb2>&);
+    1491              : 
+    1492              :       template <class _CharT, class _Traits, size_t _Nb2>
+    1493              :         friend std::basic_ostream<_CharT, _Traits>&
+    1494              :         operator<<(std::basic_ostream<_CharT, _Traits>&, const bitset<_Nb2>&);
+    1495              : #endif
+    1496              :     };
+    1497              : 
+    1498              :   // Definitions of non-inline member functions.
+    1499              :   template<size_t _Nb>
+    1500              :     template<class _CharT, class _Traits>
+    1501              :       _GLIBCXX23_CONSTEXPR
+    1502              :       void
+    1503              :       bitset<_Nb>::
+    1504              :       _M_copy_from_ptr(const _CharT* __s, size_t __len,
+    1505              :                        size_t __pos, size_t __n, _CharT __zero, _CharT __one)
+    1506              :       {
+    1507              :         reset();
+    1508              :         const size_t __nbits = std::min(_Nb, std::min(__n, size_t(__len - __pos)));
+    1509              :         for (size_t __i = __nbits; __i > 0; --__i)
+    1510              :           {
+    1511              :             const _CharT __c = __s[__pos + __nbits - __i];
+    1512              :             if (_Traits::eq(__c, __zero))
+    1513              :               ;
+    1514              :             else if (_Traits::eq(__c, __one))
+    1515              :               _Unchecked_set(__i - 1);
+    1516              :             else
+    1517              :               __throw_invalid_argument(__N("bitset::_M_copy_from_ptr"));
+    1518              :           }
+    1519              :       }
+    1520              : 
+    1521              : #if _GLIBCXX_HOSTED
+    1522              :   template<size_t _Nb>
+    1523              :     template<class _CharT, class _Traits, class _Alloc>
+    1524              :       _GLIBCXX23_CONSTEXPR
+    1525              :       void
+    1526              :       bitset<_Nb>::
+    1527              :       _M_copy_to_string(std::basic_string<_CharT, _Traits, _Alloc>& __s,
+    1528              :                         _CharT __zero, _CharT __one) const
+    1529              :       {
+    1530              :         __s.assign(_Nb, __zero);
+    1531              :         size_t __n = this->_Find_first();
+    1532              :         while (__n < _Nb)
+    1533              :           {
+    1534              :             __s[_Nb - __n - 1] = __one;
+    1535              :             __n = _Find_next(__n);
+    1536              :           }
+    1537              :       }
+    1538              : #endif // HOSTED
+    1539              : 
+    1540              :   // 23.3.5.3 bitset operations:
+    1541              :   ///@{
+    1542              :   /**
+    1543              :    *  @brief  Global bitwise operations on bitsets.
+    1544              :    *  @param  __x  A bitset.
+    1545              :    *  @param  __y  A bitset of the same size as @a __x.
+    1546              :    *  @return  A new bitset.
+    1547              :    *
+    1548              :    *  These should be self-explanatory.
+    1549              :   */
+    1550              :   template<size_t _Nb>
+    1551              :     _GLIBCXX23_CONSTEXPR
+    1552              :     inline bitset<_Nb>
+    1553              :     operator&(const bitset<_Nb>& __x, const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT
+    1554              :     {
+    1555              :       bitset<_Nb> __result(__x);
+    1556              :       __result &= __y;
+    1557              :       return __result;
+    1558              :     }
+    1559              : 
+    1560              :   template<size_t _Nb>
+    1561              :     _GLIBCXX23_CONSTEXPR
+    1562              :     inline bitset<_Nb>
+    1563              :     operator|(const bitset<_Nb>& __x, const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT
+    1564              :     {
+    1565              :       bitset<_Nb> __result(__x);
+    1566              :       __result |= __y;
+    1567              :       return __result;
+    1568              :     }
+    1569              : 
+    1570              :   template <size_t _Nb>
+    1571              :     _GLIBCXX23_CONSTEXPR
+    1572              :     inline bitset<_Nb>
+    1573              :     operator^(const bitset<_Nb>& __x, const bitset<_Nb>& __y) _GLIBCXX_NOEXCEPT
+    1574              :     {
+    1575              :       bitset<_Nb> __result(__x);
+    1576              :       __result ^= __y;
+    1577              :       return __result;
+    1578              :     }
+    1579              :   ///@}
+    1580              : 
+    1581              : #if _GLIBCXX_HOSTED
+    1582              :   ///@{
+    1583              :   /**
+    1584              :    *  @brief Global I/O operators for bitsets.
+    1585              :    *
+    1586              :    *  Direct I/O between streams and bitsets is supported.  Output is
+    1587              :    *  straightforward.  Input will skip whitespace, only accept @a 0 and @a 1
+    1588              :    *  characters, and will only extract as many digits as the %bitset will
+    1589              :    *  hold.
+    1590              :   */
+    1591              :   template<class _CharT, class _Traits, size_t _Nb>
+    1592              :     std::basic_istream<_CharT, _Traits>&
+    1593              :     operator>>(std::basic_istream<_CharT, _Traits>& __is, bitset<_Nb>& __x)
+    1594              :     {
+    1595              :       typedef typename _Traits::char_type          char_type;
+    1596              :       typedef std::basic_istream<_CharT, _Traits>  __istream_type;
+    1597              :       typedef typename __istream_type::ios_base    __ios_base;
+    1598              : 
+    1599              :       struct _Buffer
+    1600              :       {
+    1601              :         static _GLIBCXX_CONSTEXPR bool _S_use_alloca() { return _Nb <= 256; }
+    1602              : 
+    1603              :         explicit _Buffer(_CharT* __p) : _M_ptr(__p) { }
+    1604              : 
+    1605              :         ~_Buffer()
+    1606              :         {
+    1607              :           if _GLIBCXX17_CONSTEXPR (!_S_use_alloca())
+    1608              :             delete[] _M_ptr;
+    1609              :         }
+    1610              : 
+    1611              :         _CharT* const _M_ptr;
+    1612              :       };
+    1613              :       _CharT* __ptr;
+    1614              :       if _GLIBCXX17_CONSTEXPR (_Buffer::_S_use_alloca())
+    1615              :         __ptr = (_CharT*)__builtin_alloca(_Nb);
+    1616              :       else
+    1617              :         __ptr = new _CharT[_Nb];
+    1618              :       const _Buffer __buf(__ptr);
+    1619              : 
+    1620              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1621              :       // 303. Bitset input operator underspecified
+    1622              :       const char_type __zero = __is.widen('0');
+    1623              :       const char_type __one = __is.widen('1');
+    1624              : 
+    1625              :       typename __ios_base::iostate __state = __ios_base::goodbit;
+    1626              :       typename __istream_type::sentry __sentry(__is);
+    1627              :       if (__sentry)
+    1628              :         {
+    1629              :           __try
+    1630              :             {
+    1631              :               for (size_t __i = _Nb; __i > 0; --__i)
+    1632              :                 {
+    1633              :                   static typename _Traits::int_type __eof = _Traits::eof();
+    1634              : 
+    1635              :                   typename _Traits::int_type __c1 = __is.rdbuf()->sbumpc();
+    1636              :                   if (_Traits::eq_int_type(__c1, __eof))
+    1637              :                     {
+    1638              :                       __state |= __ios_base::eofbit;
+    1639              :                       break;
+    1640              :                     }
+    1641              :                   else
+    1642              :                     {
+    1643              :                       const char_type __c2 = _Traits::to_char_type(__c1);
+    1644              :                       if (_Traits::eq(__c2, __zero))
+    1645              :                         *__ptr++ = __zero;
+    1646              :                       else if (_Traits::eq(__c2, __one))
+    1647              :                         *__ptr++ = __one;
+    1648              :                       else if (_Traits::
+    1649              :                                eq_int_type(__is.rdbuf()->sputbackc(__c2),
+    1650              :                                            __eof))
+    1651              :                         {
+    1652              :                           __state |= __ios_base::failbit;
+    1653              :                           break;
+    1654              :                         }
+    1655              :                     }
+    1656              :                 }
+    1657              :             }
+    1658              :           __catch(__cxxabiv1::__forced_unwind&)
+    1659              :             {
+    1660              :               __is._M_setstate(__ios_base::badbit);
+    1661              :               __throw_exception_again;
+    1662              :             }
+    1663              :           __catch(...)
+    1664              :             { __is._M_setstate(__ios_base::badbit); }
+    1665              :         }
+    1666              : 
+    1667              :       if _GLIBCXX17_CONSTEXPR (_Nb)
+    1668              :       {
+    1669              :         if (size_t __len = __ptr - __buf._M_ptr)
+    1670              :           __x.template _M_copy_from_ptr<_CharT, _Traits>(__buf._M_ptr, __len,
+    1671              :                                                          0, __len,
+    1672              :                                                          __zero, __one);
+    1673              :         else
+    1674              :           __state |= __ios_base::failbit;
+    1675              :       }
+    1676              :       if (__state)
+    1677              :         __is.setstate(__state);
+    1678              :       return __is;
+    1679              :     }
+    1680              : 
+    1681              :   template <class _CharT, class _Traits, size_t _Nb>
+    1682              :     std::basic_ostream<_CharT, _Traits>&
+    1683              :     operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+    1684              :                const bitset<_Nb>& __x)
+    1685              :     {
+    1686              :       std::basic_string<_CharT, _Traits> __tmp;
+    1687              : 
+    1688              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1689              :       // 396. what are characters zero and one.
+    1690              :       const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__os.getloc());
+    1691              :       __x._M_copy_to_string(__tmp, __ct.widen('0'), __ct.widen('1'));
+    1692              :       return __os << __tmp;
+    1693              :     }
+    1694              :   ///@}
+    1695              : #endif // HOSTED
+    1696              : 
+    1697              : _GLIBCXX_END_NAMESPACE_CONTAINER
+    1698              : } // namespace std
+    1699              : 
+    1700              : #undef _GLIBCXX_BITSET_WORDS
+    1701              : #undef _GLIBCXX_BITSET_BITS_PER_WORD
+    1702              : #undef _GLIBCXX_BITSET_BITS_PER_ULL
+    1703              : 
+    1704              : #if __cplusplus >= 201103L
+    1705              : 
+    1706              : namespace std _GLIBCXX_VISIBILITY(default)
+    1707              : {
+    1708              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+    1709              : 
+    1710              :   // DR 1182.
+    1711              :   /// std::hash specialization for bitset.
+    1712              :   template<size_t _Nb>
+    1713              :     struct hash<_GLIBCXX_STD_C::bitset<_Nb>>
+    1714              :     : public __hash_base<size_t, _GLIBCXX_STD_C::bitset<_Nb>>
+    1715              :     {
+    1716              :       size_t
+    1717              :       operator()(const _GLIBCXX_STD_C::bitset<_Nb>& __b) const noexcept
+    1718              :       {
+    1719              :         const size_t __clength = (_Nb + __CHAR_BIT__ - 1) / __CHAR_BIT__;
+    1720              :         return std::_Hash_impl::hash(__b._M_getdata(), __clength);
+    1721              :       }
+    1722              :     };
+    1723              : 
+    1724              :   template<>
+    1725              :     struct hash<_GLIBCXX_STD_C::bitset<0>>
+    1726              :     : public __hash_base<size_t, _GLIBCXX_STD_C::bitset<0>>
+    1727              :     {
+    1728              :       size_t
+    1729              :       operator()(const _GLIBCXX_STD_C::bitset<0>&) const noexcept
+    1730              :       { return 0; }
+    1731              :     };
+    1732              : 
+    1733              : _GLIBCXX_END_NAMESPACE_VERSION
+    1734              : } // namespace
+    1735              : 
+    1736              : #endif // C++11
+    1737              : 
+    1738              : #if defined _GLIBCXX_DEBUG && _GLIBCXX_HOSTED
+    1739              : # include <debug/bitset>
+    1740              : #endif
+    1741              : 
+    1742              : #endif /* _GLIBCXX_BITSET */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/cmath.func-c.html b/html/usr/include/c++/13/cmath.func-c.html new file mode 100644 index 0000000..60761f3 --- /dev/null +++ b/html/usr/include/c++/13/cmath.func-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/cmath - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - cmath (source / functions)CoverageTotalHit
Test:coverage.infoLines:66.7 %64
Test Date:2024-04-30 13:17:26Functions:66.7 %32
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt5isnand0
_ZSt7signbitd8
_ZSt8isfinited32
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/cmath.func.html b/html/usr/include/c++/13/cmath.func.html new file mode 100644 index 0000000..9124f91 --- /dev/null +++ b/html/usr/include/c++/13/cmath.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/cmath - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - cmath (source / functions)CoverageTotalHit
Test:coverage.infoLines:66.7 %64
Test Date:2024-04-30 13:17:26Functions:66.7 %32
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt5isnand0
_ZSt7signbitd8
_ZSt8isfinited32
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/cmath.gcov.html b/html/usr/include/c++/13/cmath.gcov.html new file mode 100644 index 0000000..7fb9834 --- /dev/null +++ b/html/usr/include/c++/13/cmath.gcov.html @@ -0,0 +1,3780 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/cmath + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - cmath (source / functions)CoverageTotalHit
Test:coverage.infoLines:66.7 %64
Test Date:2024-04-30 13:17:26Functions:66.7 %32
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // -*- C++ -*- C forwarding header.
+       2              : 
+       3              : // Copyright (C) 1997-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file include/cmath
+      26              :  *  This is a Standard C++ Library file.  You should @c \#include this file
+      27              :  *  in your programs, rather than any of the @a *.h implementation files.
+      28              :  *
+      29              :  *  This is the C++ version of the Standard C Library header @c math.h,
+      30              :  *  and its contents are (mostly) the same as that header, but are all
+      31              :  *  contained in the namespace @c std (except for names which are defined
+      32              :  *  as macros in C).
+      33              :  */
+      34              : 
+      35              : //
+      36              : // ISO C++ 14882: 26.5  C library
+      37              : //
+      38              : 
+      39              : #pragma GCC system_header
+      40              : 
+      41              : #include <bits/requires_hosted.h>
+      42              : 
+      43              : #include <bits/c++config.h>
+      44              : #include <bits/cpp_type_traits.h>
+      45              : #include <ext/type_traits.h>
+      46              : #define _GLIBCXX_INCLUDE_NEXT_C_HEADERS
+      47              : #include_next <math.h>
+      48              : #undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS
+      49              : #include <bits/std_abs.h>
+      50              : 
+      51              : #ifndef _GLIBCXX_CMATH
+      52              : #define _GLIBCXX_CMATH 1
+      53              : 
+      54              : // Get rid of those macros defined in <math.h> in lieu of real functions.
+      55              : #undef div
+      56              : #undef acos
+      57              : #undef asin
+      58              : #undef atan
+      59              : #undef atan2
+      60              : #undef ceil
+      61              : #undef cos
+      62              : #undef cosh
+      63              : #undef exp
+      64              : #undef fabs
+      65              : #undef floor
+      66              : #undef fmod
+      67              : #undef frexp
+      68              : #undef ldexp
+      69              : #undef log
+      70              : #undef log10
+      71              : #undef modf
+      72              : #undef pow
+      73              : #undef sin
+      74              : #undef sinh
+      75              : #undef sqrt
+      76              : #undef tan
+      77              : #undef tanh
+      78              : 
+      79              : extern "C++"
+      80              : {
+      81              : namespace std _GLIBCXX_VISIBILITY(default)
+      82              : {
+      83              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      84              : 
+      85              :   using ::acos;
+      86              : 
+      87              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+      88              :   inline _GLIBCXX_CONSTEXPR float
+      89              :   acos(float __x)
+      90              :   { return __builtin_acosf(__x); }
+      91              : 
+      92              :   inline _GLIBCXX_CONSTEXPR long double
+      93              :   acos(long double __x)
+      94              :   { return __builtin_acosl(__x); }
+      95              : #endif
+      96              : 
+      97              :   template<typename _Tp>
+      98              :     inline _GLIBCXX_CONSTEXPR
+      99              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+     100              :                                     double>::__type
+     101              :     acos(_Tp __x)
+     102              :     { return __builtin_acos(__x); }
+     103              : 
+     104              :   using ::asin;
+     105              : 
+     106              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     107              :   inline _GLIBCXX_CONSTEXPR float
+     108              :   asin(float __x)
+     109              :   { return __builtin_asinf(__x); }
+     110              : 
+     111              :   inline _GLIBCXX_CONSTEXPR long double
+     112              :   asin(long double __x)
+     113              :   { return __builtin_asinl(__x); }
+     114              : #endif
+     115              : 
+     116              :   template<typename _Tp>
+     117              :     inline _GLIBCXX_CONSTEXPR
+     118              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+     119              :                                     double>::__type
+     120              :     asin(_Tp __x)
+     121              :     { return __builtin_asin(__x); }
+     122              : 
+     123              :   using ::atan;
+     124              : 
+     125              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     126              :   inline _GLIBCXX_CONSTEXPR float
+     127              :   atan(float __x)
+     128              :   { return __builtin_atanf(__x); }
+     129              : 
+     130              :   inline _GLIBCXX_CONSTEXPR long double
+     131              :   atan(long double __x)
+     132              :   { return __builtin_atanl(__x); }
+     133              : #endif
+     134              : 
+     135              :   template<typename _Tp>
+     136              :     inline _GLIBCXX_CONSTEXPR
+     137              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+     138              :                                     double>::__type
+     139              :     atan(_Tp __x)
+     140              :     { return __builtin_atan(__x); }
+     141              : 
+     142              :   using ::atan2;
+     143              : 
+     144              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     145              :   inline _GLIBCXX_CONSTEXPR float
+     146              :   atan2(float __y, float __x)
+     147              :   { return __builtin_atan2f(__y, __x); }
+     148              : 
+     149              :   inline _GLIBCXX_CONSTEXPR long double
+     150              :   atan2(long double __y, long double __x)
+     151              :   { return __builtin_atan2l(__y, __x); }
+     152              : #endif
+     153              : 
+     154              :   using ::ceil;
+     155              : 
+     156              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     157              :   inline _GLIBCXX_CONSTEXPR float
+     158              :   ceil(float __x)
+     159              :   { return __builtin_ceilf(__x); }
+     160              : 
+     161              :   inline _GLIBCXX_CONSTEXPR long double
+     162              :   ceil(long double __x)
+     163              :   { return __builtin_ceill(__x); }
+     164              : #endif
+     165              : 
+     166              :   template<typename _Tp>
+     167              :     inline _GLIBCXX_CONSTEXPR
+     168              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+     169              :                                     double>::__type
+     170              :     ceil(_Tp __x)
+     171              :     { return __builtin_ceil(__x); }
+     172              : 
+     173              :   using ::cos;
+     174              : 
+     175              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     176              :   inline _GLIBCXX_CONSTEXPR float
+     177              :   cos(float __x)
+     178              :   { return __builtin_cosf(__x); }
+     179              : 
+     180              :   inline _GLIBCXX_CONSTEXPR long double
+     181              :   cos(long double __x)
+     182              :   { return __builtin_cosl(__x); }
+     183              : #endif
+     184              : 
+     185              :   template<typename _Tp>
+     186              :     inline _GLIBCXX_CONSTEXPR
+     187              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+     188              :                                     double>::__type
+     189              :     cos(_Tp __x)
+     190              :     { return __builtin_cos(__x); }
+     191              : 
+     192              :   using ::cosh;
+     193              : 
+     194              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     195              :   inline _GLIBCXX_CONSTEXPR float
+     196              :   cosh(float __x)
+     197              :   { return __builtin_coshf(__x); }
+     198              : 
+     199              :   inline _GLIBCXX_CONSTEXPR long double
+     200              :   cosh(long double __x)
+     201              :   { return __builtin_coshl(__x); }
+     202              : #endif
+     203              : 
+     204              :   template<typename _Tp>
+     205              :     inline _GLIBCXX_CONSTEXPR
+     206              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+     207              :                                     double>::__type
+     208              :     cosh(_Tp __x)
+     209              :     { return __builtin_cosh(__x); }
+     210              : 
+     211              :   using ::exp;
+     212              : 
+     213              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     214              :   inline _GLIBCXX_CONSTEXPR float
+     215              :   exp(float __x)
+     216              :   { return __builtin_expf(__x); }
+     217              : 
+     218              :   inline _GLIBCXX_CONSTEXPR long double
+     219              :   exp(long double __x)
+     220              :   { return __builtin_expl(__x); }
+     221              : #endif
+     222              : 
+     223              :   template<typename _Tp>
+     224              :     inline _GLIBCXX_CONSTEXPR
+     225              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+     226              :                                     double>::__type
+     227              :     exp(_Tp __x)
+     228              :     { return __builtin_exp(__x); }
+     229              : 
+     230              :   using ::fabs;
+     231              : 
+     232              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     233              :   inline _GLIBCXX_CONSTEXPR float
+     234              :   fabs(float __x)
+     235              :   { return __builtin_fabsf(__x); }
+     236              : 
+     237              :   inline _GLIBCXX_CONSTEXPR long double
+     238              :   fabs(long double __x)
+     239              :   { return __builtin_fabsl(__x); }
+     240              : #endif
+     241              : 
+     242              :   template<typename _Tp>
+     243              :     inline _GLIBCXX_CONSTEXPR
+     244              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+     245              :                                     double>::__type
+     246              :     fabs(_Tp __x)
+     247              :     { return __builtin_fabs(__x); }
+     248              : 
+     249              :   using ::floor;
+     250              : 
+     251              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     252              :   inline _GLIBCXX_CONSTEXPR float
+     253              :   floor(float __x)
+     254              :   { return __builtin_floorf(__x); }
+     255              : 
+     256              :   inline _GLIBCXX_CONSTEXPR long double
+     257              :   floor(long double __x)
+     258              :   { return __builtin_floorl(__x); }
+     259              : #endif
+     260              : 
+     261              :   template<typename _Tp>
+     262              :     inline _GLIBCXX_CONSTEXPR
+     263              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+     264              :                                     double>::__type
+     265              :     floor(_Tp __x)
+     266              :     { return __builtin_floor(__x); }
+     267              : 
+     268              :   using ::fmod;
+     269              : 
+     270              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     271              :   inline _GLIBCXX_CONSTEXPR float
+     272              :   fmod(float __x, float __y)
+     273              :   { return __builtin_fmodf(__x, __y); }
+     274              : 
+     275              :   inline _GLIBCXX_CONSTEXPR long double
+     276              :   fmod(long double __x, long double __y)
+     277              :   { return __builtin_fmodl(__x, __y); }
+     278              : #endif
+     279              : 
+     280              :   using ::frexp;
+     281              : 
+     282              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     283              :   inline float
+     284              :   frexp(float __x, int* __exp)
+     285              :   { return __builtin_frexpf(__x, __exp); }
+     286              : 
+     287              :   inline long double
+     288              :   frexp(long double __x, int* __exp)
+     289              :   { return __builtin_frexpl(__x, __exp); }
+     290              : #endif
+     291              : 
+     292              :   template<typename _Tp>
+     293              :     inline _GLIBCXX_CONSTEXPR
+     294              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+     295              :                                     double>::__type
+     296              :     frexp(_Tp __x, int* __exp)
+     297              :     { return __builtin_frexp(__x, __exp); }
+     298              : 
+     299              :   using ::ldexp;
+     300              : 
+     301              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     302              :   inline _GLIBCXX_CONSTEXPR float
+     303              :   ldexp(float __x, int __exp)
+     304              :   { return __builtin_ldexpf(__x, __exp); }
+     305              : 
+     306              :   inline _GLIBCXX_CONSTEXPR long double
+     307              :   ldexp(long double __x, int __exp)
+     308              :   { return __builtin_ldexpl(__x, __exp); }
+     309              : #endif
+     310              : 
+     311              :   template<typename _Tp>
+     312              :     inline _GLIBCXX_CONSTEXPR
+     313              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+     314              :                                     double>::__type
+     315              :     ldexp(_Tp __x, int __exp)
+     316              :     { return __builtin_ldexp(__x, __exp); }
+     317              : 
+     318              :   using ::log;
+     319              : 
+     320              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     321              :   inline _GLIBCXX_CONSTEXPR float
+     322              :   log(float __x)
+     323              :   { return __builtin_logf(__x); }
+     324              : 
+     325              :   inline _GLIBCXX_CONSTEXPR long double
+     326              :   log(long double __x)
+     327              :   { return __builtin_logl(__x); }
+     328              : #endif
+     329              : 
+     330              :   template<typename _Tp>
+     331              :     inline _GLIBCXX_CONSTEXPR
+     332              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+     333              :                                     double>::__type
+     334              :     log(_Tp __x)
+     335              :     { return __builtin_log(__x); }
+     336              : 
+     337              :   using ::log10;
+     338              : 
+     339              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     340              :   inline _GLIBCXX_CONSTEXPR float
+     341              :   log10(float __x)
+     342              :   { return __builtin_log10f(__x); }
+     343              : 
+     344              :   inline _GLIBCXX_CONSTEXPR long double
+     345              :   log10(long double __x)
+     346              :   { return __builtin_log10l(__x); }
+     347              : #endif
+     348              : 
+     349              :   template<typename _Tp>
+     350              :     inline _GLIBCXX_CONSTEXPR
+     351              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+     352              :                                     double>::__type
+     353              :     log10(_Tp __x)
+     354              :     { return __builtin_log10(__x); }
+     355              : 
+     356              :   using ::modf;
+     357              : 
+     358              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     359              :   inline float
+     360              :   modf(float __x, float* __iptr)
+     361              :   { return __builtin_modff(__x, __iptr); }
+     362              : 
+     363              :   inline long double
+     364              :   modf(long double __x, long double* __iptr)
+     365              :   { return __builtin_modfl(__x, __iptr); }
+     366              : #endif
+     367              : 
+     368              :   using ::pow;
+     369              : 
+     370              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     371              :   inline _GLIBCXX_CONSTEXPR float
+     372              :   pow(float __x, float __y)
+     373              :   { return __builtin_powf(__x, __y); }
+     374              : 
+     375              :   inline _GLIBCXX_CONSTEXPR long double
+     376              :   pow(long double __x, long double __y)
+     377              :   { return __builtin_powl(__x, __y); }
+     378              : 
+     379              : #if __cplusplus < 201103L
+     380              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     381              :   // DR 550. What should the return type of pow(float,int) be?
+     382              :   inline double
+     383              :   pow(double __x, int __i)
+     384              :   { return __builtin_powi(__x, __i); }
+     385              : 
+     386              :   inline float
+     387              :   pow(float __x, int __n)
+     388              :   { return __builtin_powif(__x, __n); }
+     389              : 
+     390              :   inline long double
+     391              :   pow(long double __x, int __n)
+     392              :   { return __builtin_powil(__x, __n); }
+     393              : #endif
+     394              : #endif
+     395              : 
+     396              :   using ::sin;
+     397              : 
+     398              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     399              :   inline _GLIBCXX_CONSTEXPR float
+     400              :   sin(float __x)
+     401              :   { return __builtin_sinf(__x); }
+     402              : 
+     403              :   inline _GLIBCXX_CONSTEXPR long double
+     404              :   sin(long double __x)
+     405              :   { return __builtin_sinl(__x); }
+     406              : #endif
+     407              : 
+     408              :   template<typename _Tp>
+     409              :     inline _GLIBCXX_CONSTEXPR
+     410              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+     411              :                                     double>::__type
+     412              :     sin(_Tp __x)
+     413              :     { return __builtin_sin(__x); }
+     414              : 
+     415              :   using ::sinh;
+     416              : 
+     417              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     418              :   inline _GLIBCXX_CONSTEXPR float
+     419              :   sinh(float __x)
+     420              :   { return __builtin_sinhf(__x); }
+     421              : 
+     422              :   inline _GLIBCXX_CONSTEXPR long double
+     423              :   sinh(long double __x)
+     424              :   { return __builtin_sinhl(__x); }
+     425              : #endif
+     426              : 
+     427              :   template<typename _Tp>
+     428              :     inline _GLIBCXX_CONSTEXPR
+     429              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+     430              :                                     double>::__type
+     431              :     sinh(_Tp __x)
+     432              :     { return __builtin_sinh(__x); }
+     433              : 
+     434              :   using ::sqrt;
+     435              : 
+     436              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     437              :   inline _GLIBCXX_CONSTEXPR float
+     438              :   sqrt(float __x)
+     439              :   { return __builtin_sqrtf(__x); }
+     440              : 
+     441              :   inline _GLIBCXX_CONSTEXPR long double
+     442              :   sqrt(long double __x)
+     443              :   { return __builtin_sqrtl(__x); }
+     444              : #endif
+     445              : 
+     446              :   template<typename _Tp>
+     447              :     inline _GLIBCXX_CONSTEXPR
+     448              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+     449              :                                     double>::__type
+     450              :     sqrt(_Tp __x)
+     451              :     { return __builtin_sqrt(__x); }
+     452              : 
+     453              :   using ::tan;
+     454              : 
+     455              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     456              :   inline _GLIBCXX_CONSTEXPR float
+     457              :   tan(float __x)
+     458              :   { return __builtin_tanf(__x); }
+     459              : 
+     460              :   inline _GLIBCXX_CONSTEXPR long double
+     461              :   tan(long double __x)
+     462              :   { return __builtin_tanl(__x); }
+     463              : #endif
+     464              : 
+     465              :   template<typename _Tp>
+     466              :     inline _GLIBCXX_CONSTEXPR
+     467              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+     468              :                                     double>::__type
+     469              :     tan(_Tp __x)
+     470              :     { return __builtin_tan(__x); }
+     471              : 
+     472              :   using ::tanh;
+     473              : 
+     474              : #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
+     475              :   inline _GLIBCXX_CONSTEXPR float
+     476              :   tanh(float __x)
+     477              :   { return __builtin_tanhf(__x); }
+     478              : 
+     479              :   inline _GLIBCXX_CONSTEXPR long double
+     480              :   tanh(long double __x)
+     481              :   { return __builtin_tanhl(__x); }
+     482              : #endif
+     483              : 
+     484              :   template<typename _Tp>
+     485              :     inline _GLIBCXX_CONSTEXPR
+     486              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+     487              :                                     double>::__type
+     488              :     tanh(_Tp __x)
+     489              :     { return __builtin_tanh(__x); }
+     490              : 
+     491              : #if defined(__STDCPP_FLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
+     492              :   constexpr _Float16
+     493              :   acos(_Float16 __x)
+     494              :   { return _Float16(__builtin_acosf(__x)); }
+     495              : 
+     496              :   constexpr _Float16
+     497              :   asin(_Float16 __x)
+     498              :   { return _Float16(__builtin_asinf(__x)); }
+     499              : 
+     500              :   constexpr _Float16
+     501              :   atan(_Float16 __x)
+     502              :   { return _Float16(__builtin_atanf(__x)); }
+     503              : 
+     504              :   constexpr _Float16
+     505              :   atan2(_Float16 __y, _Float16 __x)
+     506              :   { return _Float16(__builtin_atan2f(__y, __x)); }
+     507              : 
+     508              :   constexpr _Float16
+     509              :   ceil(_Float16 __x)
+     510              :   { return _Float16(__builtin_ceilf(__x)); }
+     511              : 
+     512              :   constexpr _Float16
+     513              :   cos(_Float16 __x)
+     514              :   { return _Float16(__builtin_cosf(__x)); }
+     515              : 
+     516              :   constexpr _Float16
+     517              :   cosh(_Float16 __x)
+     518              :   { return _Float16(__builtin_coshf(__x)); }
+     519              : 
+     520              :   constexpr _Float16
+     521              :   exp(_Float16 __x)
+     522              :   { return _Float16(__builtin_expf(__x)); }
+     523              : 
+     524              :   constexpr _Float16
+     525              :   fabs(_Float16 __x)
+     526              :   { return _Float16(__builtin_fabsf(__x)); }
+     527              : 
+     528              :   constexpr _Float16
+     529              :   floor(_Float16 __x)
+     530              :   { return _Float16(__builtin_floorf(__x)); }
+     531              : 
+     532              :   constexpr _Float16
+     533              :   fmod(_Float16 __x, _Float16 __y)
+     534              :   { return _Float16(__builtin_fmodf(__x, __y)); }
+     535              : 
+     536              :   inline _Float16
+     537              :   frexp(_Float16 __x, int* __exp)
+     538              :   { return _Float16(__builtin_frexpf(__x, __exp)); }
+     539              : 
+     540              :   constexpr _Float16
+     541              :   ldexp(_Float16 __x, int __exp)
+     542              :   { return _Float16(__builtin_ldexpf(__x, __exp)); }
+     543              : 
+     544              :   constexpr _Float16
+     545              :   log(_Float16 __x)
+     546              :   { return _Float16(__builtin_logf(__x)); }
+     547              : 
+     548              :   constexpr _Float16
+     549              :   log10(_Float16 __x)
+     550              :   { return _Float16(__builtin_log10f(__x)); }
+     551              : 
+     552              :   inline _Float16
+     553              :   modf(_Float16 __x, _Float16* __iptr)
+     554              :   {
+     555              :     float __i, __ret = __builtin_modff(__x, &__i);
+     556              :     *__iptr = _Float16(__i);
+     557              :     return _Float16(__ret);
+     558              :   }
+     559              : 
+     560              :   constexpr _Float16
+     561              :   pow(_Float16 __x, _Float16 __y)
+     562              :   { return _Float16(__builtin_powf(__x, __y)); }
+     563              : 
+     564              :   constexpr _Float16
+     565              :   sin(_Float16 __x)
+     566              :   { return _Float16(__builtin_sinf(__x)); }
+     567              : 
+     568              :   constexpr _Float16
+     569              :   sinh(_Float16 __x)
+     570              :   { return _Float16(__builtin_sinhf(__x)); }
+     571              : 
+     572              :   constexpr _Float16
+     573              :   sqrt(_Float16 __x)
+     574              :   { return _Float16(__builtin_sqrtf(__x)); }
+     575              : 
+     576              :   constexpr _Float16
+     577              :   tan(_Float16 __x)
+     578              :   { return _Float16(__builtin_tanf(__x)); }
+     579              : 
+     580              :   constexpr _Float16
+     581              :   tanh(_Float16 __x)
+     582              :   { return _Float16(__builtin_tanhf(__x)); }
+     583              : #endif
+     584              : 
+     585              : #if defined(__STDCPP_FLOAT32_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
+     586              :   constexpr _Float32
+     587              :   acos(_Float32 __x)
+     588              :   { return __builtin_acosf(__x); }
+     589              : 
+     590              :   constexpr _Float32
+     591              :   asin(_Float32 __x)
+     592              :   { return __builtin_asinf(__x); }
+     593              : 
+     594              :   constexpr _Float32
+     595              :   atan(_Float32 __x)
+     596              :   { return __builtin_atanf(__x); }
+     597              : 
+     598              :   constexpr _Float32
+     599              :   atan2(_Float32 __y, _Float32 __x)
+     600              :   { return __builtin_atan2f(__y, __x); }
+     601              : 
+     602              :   constexpr _Float32
+     603              :   ceil(_Float32 __x)
+     604              :   { return __builtin_ceilf(__x); }
+     605              : 
+     606              :   constexpr _Float32
+     607              :   cos(_Float32 __x)
+     608              :   { return __builtin_cosf(__x); }
+     609              : 
+     610              :   constexpr _Float32
+     611              :   cosh(_Float32 __x)
+     612              :   { return __builtin_coshf(__x); }
+     613              : 
+     614              :   constexpr _Float32
+     615              :   exp(_Float32 __x)
+     616              :   { return __builtin_expf(__x); }
+     617              : 
+     618              :   constexpr _Float32
+     619              :   fabs(_Float32 __x)
+     620              :   { return __builtin_fabsf(__x); }
+     621              : 
+     622              :   constexpr _Float32
+     623              :   floor(_Float32 __x)
+     624              :   { return __builtin_floorf(__x); }
+     625              : 
+     626              :   constexpr _Float32
+     627              :   fmod(_Float32 __x, _Float32 __y)
+     628              :   { return __builtin_fmodf(__x, __y); }
+     629              : 
+     630              :   inline _Float32
+     631              :   frexp(_Float32 __x, int* __exp)
+     632              :   { return __builtin_frexpf(__x, __exp); }
+     633              : 
+     634              :   constexpr _Float32
+     635              :   ldexp(_Float32 __x, int __exp)
+     636              :   { return __builtin_ldexpf(__x, __exp); }
+     637              : 
+     638              :   constexpr _Float32
+     639              :   log(_Float32 __x)
+     640              :   { return __builtin_logf(__x); }
+     641              : 
+     642              :   constexpr _Float32
+     643              :   log10(_Float32 __x)
+     644              :   { return __builtin_log10f(__x); }
+     645              : 
+     646              :   inline _Float32
+     647              :   modf(_Float32 __x, _Float32* __iptr)
+     648              :   {
+     649              :     float __i, __ret = __builtin_modff(__x, &__i);
+     650              :     *__iptr = __i;
+     651              :     return __ret;
+     652              :   }
+     653              : 
+     654              :   constexpr _Float32
+     655              :   pow(_Float32 __x, _Float32 __y)
+     656              :   { return __builtin_powf(__x, __y); }
+     657              : 
+     658              :   constexpr _Float32
+     659              :   sin(_Float32 __x)
+     660              :   { return __builtin_sinf(__x); }
+     661              : 
+     662              :   constexpr _Float32
+     663              :   sinh(_Float32 __x)
+     664              :   { return __builtin_sinhf(__x); }
+     665              : 
+     666              :   constexpr _Float32
+     667              :   sqrt(_Float32 __x)
+     668              :   { return __builtin_sqrtf(__x); }
+     669              : 
+     670              :   constexpr _Float32
+     671              :   tan(_Float32 __x)
+     672              :   { return __builtin_tanf(__x); }
+     673              : 
+     674              :   constexpr _Float32
+     675              :   tanh(_Float32 __x)
+     676              :   { return __builtin_tanhf(__x); }
+     677              : #endif
+     678              : 
+     679              : #if defined(__STDCPP_FLOAT64_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64)
+     680              :   constexpr _Float64
+     681              :   acos(_Float64 __x)
+     682              :   { return __builtin_acos(__x); }
+     683              : 
+     684              :   constexpr _Float64
+     685              :   asin(_Float64 __x)
+     686              :   { return __builtin_asin(__x); }
+     687              : 
+     688              :   constexpr _Float64
+     689              :   atan(_Float64 __x)
+     690              :   { return __builtin_atan(__x); }
+     691              : 
+     692              :   constexpr _Float64
+     693              :   atan2(_Float64 __y, _Float64 __x)
+     694              :   { return __builtin_atan2(__y, __x); }
+     695              : 
+     696              :   constexpr _Float64
+     697              :   ceil(_Float64 __x)
+     698              :   { return __builtin_ceil(__x); }
+     699              : 
+     700              :   constexpr _Float64
+     701              :   cos(_Float64 __x)
+     702              :   { return __builtin_cos(__x); }
+     703              : 
+     704              :   constexpr _Float64
+     705              :   cosh(_Float64 __x)
+     706              :   { return __builtin_cosh(__x); }
+     707              : 
+     708              :   constexpr _Float64
+     709              :   exp(_Float64 __x)
+     710              :   { return __builtin_exp(__x); }
+     711              : 
+     712              :   constexpr _Float64
+     713              :   fabs(_Float64 __x)
+     714              :   { return __builtin_fabs(__x); }
+     715              : 
+     716              :   constexpr _Float64
+     717              :   floor(_Float64 __x)
+     718              :   { return __builtin_floor(__x); }
+     719              : 
+     720              :   constexpr _Float64
+     721              :   fmod(_Float64 __x, _Float64 __y)
+     722              :   { return __builtin_fmod(__x, __y); }
+     723              : 
+     724              :   inline _Float64
+     725              :   frexp(_Float64 __x, int* __exp)
+     726              :   { return __builtin_frexp(__x, __exp); }
+     727              : 
+     728              :   constexpr _Float64
+     729              :   ldexp(_Float64 __x, int __exp)
+     730              :   { return __builtin_ldexp(__x, __exp); }
+     731              : 
+     732              :   constexpr _Float64
+     733              :   log(_Float64 __x)
+     734              :   { return __builtin_log(__x); }
+     735              : 
+     736              :   constexpr _Float64
+     737              :   log10(_Float64 __x)
+     738              :   { return __builtin_log10(__x); }
+     739              : 
+     740              :   inline _Float64
+     741              :   modf(_Float64 __x, _Float64* __iptr)
+     742              :   {
+     743              :     double __i, __ret = __builtin_modf(__x, &__i);
+     744              :     *__iptr = __i;
+     745              :     return __ret;
+     746              :   }
+     747              : 
+     748              :   constexpr _Float64
+     749              :   pow(_Float64 __x, _Float64 __y)
+     750              :   { return __builtin_pow(__x, __y); }
+     751              : 
+     752              :   constexpr _Float64
+     753              :   sin(_Float64 __x)
+     754              :   { return __builtin_sin(__x); }
+     755              : 
+     756              :   constexpr _Float64
+     757              :   sinh(_Float64 __x)
+     758              :   { return __builtin_sinh(__x); }
+     759              : 
+     760              :   constexpr _Float64
+     761              :   sqrt(_Float64 __x)
+     762              :   { return __builtin_sqrt(__x); }
+     763              : 
+     764              :   constexpr _Float64
+     765              :   tan(_Float64 __x)
+     766              :   { return __builtin_tan(__x); }
+     767              : 
+     768              :   constexpr _Float64
+     769              :   tanh(_Float64 __x)
+     770              :   { return __builtin_tanh(__x); }
+     771              : #endif
+     772              : 
+     773              : #if defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128)
+     774              :   constexpr _Float128
+     775              :   acos(_Float128 __x)
+     776              :   { return __builtin_acosl(__x); }
+     777              : 
+     778              :   constexpr _Float128
+     779              :   asin(_Float128 __x)
+     780              :   { return __builtin_asinl(__x); }
+     781              : 
+     782              :   constexpr _Float128
+     783              :   atan(_Float128 __x)
+     784              :   { return __builtin_atanl(__x); }
+     785              : 
+     786              :   constexpr _Float128
+     787              :   atan2(_Float128 __y, _Float128 __x)
+     788              :   { return __builtin_atan2l(__y, __x); }
+     789              : 
+     790              :   constexpr _Float128
+     791              :   ceil(_Float128 __x)
+     792              :   { return __builtin_ceill(__x); }
+     793              : 
+     794              :   constexpr _Float128
+     795              :   cos(_Float128 __x)
+     796              :   { return __builtin_cosl(__x); }
+     797              : 
+     798              :   constexpr _Float128
+     799              :   cosh(_Float128 __x)
+     800              :   { return __builtin_coshl(__x); }
+     801              : 
+     802              :   constexpr _Float128
+     803              :   exp(_Float128 __x)
+     804              :   { return __builtin_expl(__x); }
+     805              : 
+     806              :   constexpr _Float128
+     807              :   fabs(_Float128 __x)
+     808              :   { return __builtin_fabsl(__x); }
+     809              : 
+     810              :   constexpr _Float128
+     811              :   floor(_Float128 __x)
+     812              :   { return __builtin_floorl(__x); }
+     813              : 
+     814              :   constexpr _Float128
+     815              :   fmod(_Float128 __x, _Float128 __y)
+     816              :   { return __builtin_fmodl(__x, __y); }
+     817              : 
+     818              :   inline _Float128
+     819              :   frexp(_Float128 __x, int* __exp)
+     820              :   { return __builtin_frexpl(__x, __exp); }
+     821              : 
+     822              :   constexpr _Float128
+     823              :   ldexp(_Float128 __x, int __exp)
+     824              :   { return __builtin_ldexpl(__x, __exp); }
+     825              : 
+     826              :   constexpr _Float128
+     827              :   log(_Float128 __x)
+     828              :   { return __builtin_logl(__x); }
+     829              : 
+     830              :   constexpr _Float128
+     831              :   log10(_Float128 __x)
+     832              :   { return __builtin_log10l(__x); }
+     833              : 
+     834              :   inline _Float128
+     835              :   modf(_Float128 __x, _Float128* __iptr)
+     836              :   {
+     837              :     long double __i, __ret = __builtin_modfl(__x, &__i);
+     838              :     *__iptr = __i;
+     839              :     return __ret;
+     840              :   }
+     841              : 
+     842              :   constexpr _Float128
+     843              :   pow(_Float128 __x, _Float128 __y)
+     844              :   { return __builtin_powl(__x, __y); }
+     845              : 
+     846              :   constexpr _Float128
+     847              :   sin(_Float128 __x)
+     848              :   { return __builtin_sinl(__x); }
+     849              : 
+     850              :   constexpr _Float128
+     851              :   sinh(_Float128 __x)
+     852              :   { return __builtin_sinhl(__x); }
+     853              : 
+     854              :   constexpr _Float128
+     855              :   sqrt(_Float128 __x)
+     856              :   { return __builtin_sqrtl(__x); }
+     857              : 
+     858              :   constexpr _Float128
+     859              :   tan(_Float128 __x)
+     860              :   { return __builtin_tanl(__x); }
+     861              : 
+     862              :   constexpr _Float128
+     863              :   tanh(_Float128 __x)
+     864              :   { return __builtin_tanhl(__x); }
+     865              : #elif defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_HAVE_FLOAT128_MATH)
+     866              :   constexpr _Float128
+     867              :   acos(_Float128 __x)
+     868              :   { return __builtin_acosf128(__x); }
+     869              : 
+     870              :   constexpr _Float128
+     871              :   asin(_Float128 __x)
+     872              :   { return __builtin_asinf128(__x); }
+     873              : 
+     874              :   constexpr _Float128
+     875              :   atan(_Float128 __x)
+     876              :   { return __builtin_atanf128(__x); }
+     877              : 
+     878              :   constexpr _Float128
+     879              :   atan2(_Float128 __y, _Float128 __x)
+     880              :   { return __builtin_atan2f128(__y, __x); }
+     881              : 
+     882              :   constexpr _Float128
+     883              :   ceil(_Float128 __x)
+     884              :   { return __builtin_ceilf128(__x); }
+     885              : 
+     886              :   constexpr _Float128
+     887              :   cos(_Float128 __x)
+     888              :   { return __builtin_cosf128(__x); }
+     889              : 
+     890              :   constexpr _Float128
+     891              :   cosh(_Float128 __x)
+     892              :   { return __builtin_coshf128(__x); }
+     893              : 
+     894              :   constexpr _Float128
+     895              :   exp(_Float128 __x)
+     896              :   { return __builtin_expf128(__x); }
+     897              : 
+     898              :   constexpr _Float128
+     899              :   fabs(_Float128 __x)
+     900              :   { return __builtin_fabsf128(__x); }
+     901              : 
+     902              :   constexpr _Float128
+     903              :   floor(_Float128 __x)
+     904              :   { return __builtin_floorf128(__x); }
+     905              : 
+     906              :   constexpr _Float128
+     907              :   fmod(_Float128 __x, _Float128 __y)
+     908              :   { return __builtin_fmodf128(__x, __y); }
+     909              : 
+     910              :   inline _Float128
+     911              :   frexp(_Float128 __x, int* __exp)
+     912              :   { return __builtin_frexpf128(__x, __exp); }
+     913              : 
+     914              :   constexpr _Float128
+     915              :   ldexp(_Float128 __x, int __exp)
+     916              :   { return __builtin_ldexpf128(__x, __exp); }
+     917              : 
+     918              :   constexpr _Float128
+     919              :   log(_Float128 __x)
+     920              :   { return __builtin_logf128(__x); }
+     921              : 
+     922              :   constexpr _Float128
+     923              :   log10(_Float128 __x)
+     924              :   { return __builtin_log10f128(__x); }
+     925              : 
+     926              :   inline _Float128
+     927              :   modf(_Float128 __x, _Float128* __iptr)
+     928              :   { return __builtin_modff128(__x, __iptr); }
+     929              : 
+     930              :   constexpr _Float128
+     931              :   pow(_Float128 __x, _Float128 __y)
+     932              :   { return __builtin_powf128(__x, __y); }
+     933              : 
+     934              :   constexpr _Float128
+     935              :   sin(_Float128 __x)
+     936              :   { return __builtin_sinf128(__x); }
+     937              : 
+     938              :   constexpr _Float128
+     939              :   sinh(_Float128 __x)
+     940              :   { return __builtin_sinhf128(__x); }
+     941              : 
+     942              :   constexpr _Float128
+     943              :   sqrt(_Float128 __x)
+     944              :   { return __builtin_sqrtf128(__x); }
+     945              : 
+     946              :   constexpr _Float128
+     947              :   tan(_Float128 __x)
+     948              :   { return __builtin_tanf128(__x); }
+     949              : 
+     950              :   constexpr _Float128
+     951              :   tanh(_Float128 __x)
+     952              :   { return __builtin_tanhf128(__x); }
+     953              : #endif
+     954              : 
+     955              : #if defined(__STDCPP_BFLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
+     956              :   constexpr __gnu_cxx::__bfloat16_t
+     957              :   acos(__gnu_cxx::__bfloat16_t __x)
+     958              :   { return __gnu_cxx::__bfloat16_t(__builtin_acosf(__x)); }
+     959              : 
+     960              :   constexpr __gnu_cxx::__bfloat16_t
+     961              :   asin(__gnu_cxx::__bfloat16_t __x)
+     962              :   { return __gnu_cxx::__bfloat16_t(__builtin_asinf(__x)); }
+     963              : 
+     964              :   constexpr __gnu_cxx::__bfloat16_t
+     965              :   atan(__gnu_cxx::__bfloat16_t __x)
+     966              :   { return __gnu_cxx::__bfloat16_t(__builtin_atanf(__x)); }
+     967              : 
+     968              :   constexpr __gnu_cxx::__bfloat16_t
+     969              :   atan2(__gnu_cxx::__bfloat16_t __y, __gnu_cxx::__bfloat16_t __x)
+     970              :   { return __gnu_cxx::__bfloat16_t(__builtin_atan2f(__y, __x)); }
+     971              : 
+     972              :   constexpr __gnu_cxx::__bfloat16_t
+     973              :   ceil(__gnu_cxx::__bfloat16_t __x)
+     974              :   { return __gnu_cxx::__bfloat16_t(__builtin_ceilf(__x)); }
+     975              : 
+     976              :   constexpr __gnu_cxx::__bfloat16_t
+     977              :   cos(__gnu_cxx::__bfloat16_t __x)
+     978              :   { return __gnu_cxx::__bfloat16_t(__builtin_cosf(__x)); }
+     979              : 
+     980              :   constexpr __gnu_cxx::__bfloat16_t
+     981              :   cosh(__gnu_cxx::__bfloat16_t __x)
+     982              :   { return __gnu_cxx::__bfloat16_t(__builtin_coshf(__x)); }
+     983              : 
+     984              :   constexpr __gnu_cxx::__bfloat16_t
+     985              :   exp(__gnu_cxx::__bfloat16_t __x)
+     986              :   { return __gnu_cxx::__bfloat16_t(__builtin_expf(__x)); }
+     987              : 
+     988              :   constexpr __gnu_cxx::__bfloat16_t
+     989              :   fabs(__gnu_cxx::__bfloat16_t __x)
+     990              :   { return __gnu_cxx::__bfloat16_t(__builtin_fabsf(__x)); }
+     991              : 
+     992              :   constexpr __gnu_cxx::__bfloat16_t
+     993              :   floor(__gnu_cxx::__bfloat16_t __x)
+     994              :   { return __gnu_cxx::__bfloat16_t(__builtin_floorf(__x)); }
+     995              : 
+     996              :   constexpr __gnu_cxx::__bfloat16_t
+     997              :   fmod(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
+     998              :   { return __gnu_cxx::__bfloat16_t(__builtin_fmodf(__x, __y)); }
+     999              : 
+    1000              :   inline __gnu_cxx::__bfloat16_t
+    1001              :   frexp(__gnu_cxx::__bfloat16_t __x, int* __exp)
+    1002              :   { return __gnu_cxx::__bfloat16_t(__builtin_frexpf(__x, __exp)); }
+    1003              : 
+    1004              :   constexpr __gnu_cxx::__bfloat16_t
+    1005              :   ldexp(__gnu_cxx::__bfloat16_t __x, int __exp)
+    1006              :   { return __gnu_cxx::__bfloat16_t(__builtin_ldexpf(__x, __exp)); }
+    1007              : 
+    1008              :   constexpr __gnu_cxx::__bfloat16_t
+    1009              :   log(__gnu_cxx::__bfloat16_t __x)
+    1010              :   { return __gnu_cxx::__bfloat16_t(__builtin_logf(__x)); }
+    1011              : 
+    1012              :   constexpr __gnu_cxx::__bfloat16_t
+    1013              :   log10(__gnu_cxx::__bfloat16_t __x)
+    1014              :   { return __gnu_cxx::__bfloat16_t(__builtin_log10f(__x)); }
+    1015              : 
+    1016              :   inline __gnu_cxx::__bfloat16_t
+    1017              :   modf(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t* __iptr)
+    1018              :   {
+    1019              :     float __i, __ret = __builtin_modff(__x, &__i);
+    1020              :     *__iptr = __gnu_cxx::__bfloat16_t(__i);
+    1021              :     return __gnu_cxx::__bfloat16_t(__ret);
+    1022              :   }
+    1023              : 
+    1024              :   constexpr __gnu_cxx::__bfloat16_t
+    1025              :   pow(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
+    1026              :   { return __gnu_cxx::__bfloat16_t(__builtin_powf(__x, __y)); }
+    1027              : 
+    1028              :   constexpr __gnu_cxx::__bfloat16_t
+    1029              :   sin(__gnu_cxx::__bfloat16_t __x)
+    1030              :   { return __gnu_cxx::__bfloat16_t(__builtin_sinf(__x)); }
+    1031              : 
+    1032              :   constexpr __gnu_cxx::__bfloat16_t
+    1033              :   sinh(__gnu_cxx::__bfloat16_t __x)
+    1034              :   { return __gnu_cxx::__bfloat16_t(__builtin_sinhf(__x)); }
+    1035              : 
+    1036              :   constexpr __gnu_cxx::__bfloat16_t
+    1037              :   sqrt(__gnu_cxx::__bfloat16_t __x)
+    1038              :   { return __gnu_cxx::__bfloat16_t(__builtin_sqrtf(__x)); }
+    1039              : 
+    1040              :   constexpr __gnu_cxx::__bfloat16_t
+    1041              :   tan(__gnu_cxx::__bfloat16_t __x)
+    1042              :   { return __gnu_cxx::__bfloat16_t(__builtin_tanf(__x)); }
+    1043              : 
+    1044              :   constexpr __gnu_cxx::__bfloat16_t
+    1045              :   tanh(__gnu_cxx::__bfloat16_t __x)
+    1046              :   { return __gnu_cxx::__bfloat16_t(__builtin_tanhf(__x)); }
+    1047              : #endif
+    1048              : 
+    1049              :   template<typename _Tp, typename _Up>
+    1050              :     inline _GLIBCXX_CONSTEXPR
+    1051              :     typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+    1052              :     atan2(_Tp __y, _Up __x)
+    1053              :     {
+    1054              :       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+    1055              :       return atan2(__type(__y), __type(__x));
+    1056              :     }
+    1057              : 
+    1058              :   template<typename _Tp, typename _Up>
+    1059              :     inline _GLIBCXX_CONSTEXPR
+    1060              :     typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+    1061              :     fmod(_Tp __x, _Up __y)
+    1062              :     {
+    1063              :       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+    1064              :       return fmod(__type(__x), __type(__y));
+    1065              :     }
+    1066              : 
+    1067              :   template<typename _Tp, typename _Up>
+    1068              :     inline _GLIBCXX_CONSTEXPR
+    1069              :     typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+    1070              :     pow(_Tp __x, _Up __y)
+    1071              :     {
+    1072              :       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+    1073              :       return pow(__type(__x), __type(__y));
+    1074              :     }
+    1075              : 
+    1076              : #if _GLIBCXX_USE_C99_MATH
+    1077              : #if !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC
+    1078              : 
+    1079              : // These are possible macros imported from C99-land.
+    1080              : #undef fpclassify
+    1081              : #undef isfinite
+    1082              : #undef isinf
+    1083              : #undef isnan
+    1084              : #undef isnormal
+    1085              : #undef signbit
+    1086              : #undef isgreater
+    1087              : #undef isgreaterequal
+    1088              : #undef isless
+    1089              : #undef islessequal
+    1090              : #undef islessgreater
+    1091              : #undef isunordered
+    1092              : 
+    1093              : #if __cplusplus >= 201103L
+    1094              : 
+    1095              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    1096              :   constexpr int
+    1097              :   fpclassify(float __x)
+    1098              :   { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
+    1099              :                                 FP_SUBNORMAL, FP_ZERO, __x); }
+    1100              : 
+    1101              :   constexpr int
+    1102              :   fpclassify(double __x)
+    1103              :   { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
+    1104              :                                 FP_SUBNORMAL, FP_ZERO, __x); }
+    1105              : 
+    1106              :   constexpr int
+    1107              :   fpclassify(long double __x)
+    1108              :   { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
+    1109              :                                 FP_SUBNORMAL, FP_ZERO, __x); }
+    1110              : #endif
+    1111              : 
+    1112              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    1113              :   template<typename _Tp>
+    1114              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+    1115              :                                               int>::__type
+    1116              :     fpclassify(_Tp __x)
+    1117              :     { return __x != 0 ? FP_NORMAL : FP_ZERO; }
+    1118              : #endif
+    1119              : 
+    1120              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    1121              :   constexpr bool
+    1122              :   isfinite(float __x)
+    1123              :   { return __builtin_isfinite(__x); }
+    1124              : 
+    1125              :   constexpr bool
+    1126           32 :   isfinite(double __x)
+    1127           32 :   { return __builtin_isfinite(__x); }
+    1128              : 
+    1129              :   constexpr bool
+    1130              :   isfinite(long double __x)
+    1131              :   { return __builtin_isfinite(__x); }
+    1132              : #endif
+    1133              : 
+    1134              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    1135              :   template<typename _Tp>
+    1136              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+    1137              :                                               bool>::__type
+    1138              :     isfinite(_Tp)
+    1139              :     { return true; }
+    1140              : #endif
+    1141              : 
+    1142              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    1143              :   constexpr bool
+    1144              :   isinf(float __x)
+    1145              :   { return __builtin_isinf(__x); }
+    1146              : 
+    1147              : #if _GLIBCXX_HAVE_OBSOLETE_ISINF \
+    1148              :   && !_GLIBCXX_NO_OBSOLETE_ISINF_ISNAN_DYNAMIC
+    1149              :   using ::isinf;
+    1150              : #else
+    1151              :   constexpr bool
+    1152              :   isinf(double __x)
+    1153              :   { return __builtin_isinf(__x); }
+    1154              : #endif
+    1155              : 
+    1156              :   constexpr bool
+    1157              :   isinf(long double __x)
+    1158              :   { return __builtin_isinf(__x); }
+    1159              : #endif
+    1160              : 
+    1161              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    1162              :   template<typename _Tp>
+    1163              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+    1164              :                                               bool>::__type
+    1165              :     isinf(_Tp)
+    1166              :     { return false; }
+    1167              : #endif
+    1168              : 
+    1169              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    1170              :   constexpr bool
+    1171              :   isnan(float __x)
+    1172              :   { return __builtin_isnan(__x); }
+    1173              : 
+    1174              : #if _GLIBCXX_HAVE_OBSOLETE_ISNAN \
+    1175              :   && !_GLIBCXX_NO_OBSOLETE_ISINF_ISNAN_DYNAMIC
+    1176              :   using ::isnan;
+    1177              : #else
+    1178              :   constexpr bool
+    1179            0 :   isnan(double __x)
+    1180            0 :   { return __builtin_isnan(__x); }
+    1181              : #endif
+    1182              : 
+    1183              :   constexpr bool
+    1184              :   isnan(long double __x)
+    1185              :   { return __builtin_isnan(__x); }
+    1186              : #endif
+    1187              : 
+    1188              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    1189              :   template<typename _Tp>
+    1190              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+    1191              :                                               bool>::__type
+    1192              :     isnan(_Tp)
+    1193              :     { return false; }
+    1194              : #endif
+    1195              : 
+    1196              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    1197              :   constexpr bool
+    1198              :   isnormal(float __x)
+    1199              :   { return __builtin_isnormal(__x); }
+    1200              : 
+    1201              :   constexpr bool
+    1202              :   isnormal(double __x)
+    1203              :   { return __builtin_isnormal(__x); }
+    1204              : 
+    1205              :   constexpr bool
+    1206              :   isnormal(long double __x)
+    1207              :   { return __builtin_isnormal(__x); }
+    1208              : #endif
+    1209              : 
+    1210              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    1211              :   template<typename _Tp>
+    1212              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+    1213              :                                               bool>::__type
+    1214              :     isnormal(_Tp __x)
+    1215              :     { return __x != 0 ? true : false; }
+    1216              : #endif
+    1217              : 
+    1218              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    1219              :   // Note: middle-end/36757 is fixed, __builtin_signbit is type-generic.
+    1220              :   constexpr bool
+    1221              :   signbit(float __x)
+    1222              :   { return __builtin_signbit(__x); }
+    1223              : 
+    1224              :   constexpr bool
+    1225            8 :   signbit(double __x)
+    1226            8 :   { return __builtin_signbit(__x); }
+    1227              : 
+    1228              :   constexpr bool
+    1229              :   signbit(long double __x)
+    1230              :   { return __builtin_signbit(__x); }
+    1231              : #endif
+    1232              : 
+    1233              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    1234              :   template<typename _Tp>
+    1235              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+    1236              :                                               bool>::__type
+    1237              :     signbit(_Tp __x)
+    1238              :     { return __x < 0 ? true : false; }
+    1239              : #endif
+    1240              : 
+    1241              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    1242              :   constexpr bool
+    1243              :   isgreater(float __x, float __y)
+    1244              :   { return __builtin_isgreater(__x, __y); }
+    1245              : 
+    1246              :   constexpr bool
+    1247              :   isgreater(double __x, double __y)
+    1248              :   { return __builtin_isgreater(__x, __y); }
+    1249              : 
+    1250              :   constexpr bool
+    1251              :   isgreater(long double __x, long double __y)
+    1252              :   { return __builtin_isgreater(__x, __y); }
+    1253              : #endif
+    1254              : 
+    1255              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    1256              :   template<typename _Tp, typename _Up>
+    1257              :     constexpr typename
+    1258              :     __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
+    1259              :                             && __is_arithmetic<_Up>::__value), bool>::__type
+    1260              :     isgreater(_Tp __x, _Up __y)
+    1261              :     {
+    1262              :       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+    1263              :       return __builtin_isgreater(__type(__x), __type(__y));
+    1264              :     }
+    1265              : #endif
+    1266              : 
+    1267              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    1268              :   constexpr bool
+    1269              :   isgreaterequal(float __x, float __y)
+    1270              :   { return __builtin_isgreaterequal(__x, __y); }
+    1271              : 
+    1272              :   constexpr bool
+    1273              :   isgreaterequal(double __x, double __y)
+    1274              :   { return __builtin_isgreaterequal(__x, __y); }
+    1275              : 
+    1276              :   constexpr bool
+    1277              :   isgreaterequal(long double __x, long double __y)
+    1278              :   { return __builtin_isgreaterequal(__x, __y); }
+    1279              : #endif
+    1280              : 
+    1281              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    1282              :   template<typename _Tp, typename _Up>
+    1283              :     constexpr typename
+    1284              :     __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
+    1285              :                             && __is_arithmetic<_Up>::__value), bool>::__type
+    1286              :     isgreaterequal(_Tp __x, _Up __y)
+    1287              :     {
+    1288              :       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+    1289              :       return __builtin_isgreaterequal(__type(__x), __type(__y));
+    1290              :     }
+    1291              : #endif
+    1292              : 
+    1293              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    1294              :   constexpr bool
+    1295              :   isless(float __x, float __y)
+    1296              :   { return __builtin_isless(__x, __y); }
+    1297              : 
+    1298              :   constexpr bool
+    1299              :   isless(double __x, double __y)
+    1300              :   { return __builtin_isless(__x, __y); }
+    1301              : 
+    1302              :   constexpr bool
+    1303              :   isless(long double __x, long double __y)
+    1304              :   { return __builtin_isless(__x, __y); }
+    1305              : #endif
+    1306              : 
+    1307              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    1308              :   template<typename _Tp, typename _Up>
+    1309              :     constexpr typename
+    1310              :     __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
+    1311              :                             && __is_arithmetic<_Up>::__value), bool>::__type
+    1312              :     isless(_Tp __x, _Up __y)
+    1313              :     {
+    1314              :       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+    1315              :       return __builtin_isless(__type(__x), __type(__y));
+    1316              :     }
+    1317              : #endif
+    1318              : 
+    1319              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    1320              :   constexpr bool
+    1321              :   islessequal(float __x, float __y)
+    1322              :   { return __builtin_islessequal(__x, __y); }
+    1323              : 
+    1324              :   constexpr bool
+    1325              :   islessequal(double __x, double __y)
+    1326              :   { return __builtin_islessequal(__x, __y); }
+    1327              : 
+    1328              :   constexpr bool
+    1329              :   islessequal(long double __x, long double __y)
+    1330              :   { return __builtin_islessequal(__x, __y); }
+    1331              : #endif
+    1332              : 
+    1333              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    1334              :   template<typename _Tp, typename _Up>
+    1335              :     constexpr typename
+    1336              :     __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
+    1337              :                             && __is_arithmetic<_Up>::__value), bool>::__type
+    1338              :     islessequal(_Tp __x, _Up __y)
+    1339              :     {
+    1340              :       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+    1341              :       return __builtin_islessequal(__type(__x), __type(__y));
+    1342              :     }
+    1343              : #endif
+    1344              : 
+    1345              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    1346              :   constexpr bool
+    1347              :   islessgreater(float __x, float __y)
+    1348              :   { return __builtin_islessgreater(__x, __y); }
+    1349              : 
+    1350              :   constexpr bool
+    1351              :   islessgreater(double __x, double __y)
+    1352              :   { return __builtin_islessgreater(__x, __y); }
+    1353              : 
+    1354              :   constexpr bool
+    1355              :   islessgreater(long double __x, long double __y)
+    1356              :   { return __builtin_islessgreater(__x, __y); }
+    1357              : #endif
+    1358              : 
+    1359              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    1360              :   template<typename _Tp, typename _Up>
+    1361              :     constexpr typename
+    1362              :     __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
+    1363              :                             && __is_arithmetic<_Up>::__value), bool>::__type
+    1364              :     islessgreater(_Tp __x, _Up __y)
+    1365              :     {
+    1366              :       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+    1367              :       return __builtin_islessgreater(__type(__x), __type(__y));
+    1368              :     }
+    1369              : #endif
+    1370              : 
+    1371              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    1372              :   constexpr bool
+    1373              :   isunordered(float __x, float __y)
+    1374              :   { return __builtin_isunordered(__x, __y); }
+    1375              : 
+    1376              :   constexpr bool
+    1377              :   isunordered(double __x, double __y)
+    1378              :   { return __builtin_isunordered(__x, __y); }
+    1379              : 
+    1380              :   constexpr bool
+    1381              :   isunordered(long double __x, long double __y)
+    1382              :   { return __builtin_isunordered(__x, __y); }
+    1383              : #endif
+    1384              : 
+    1385              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    1386              :   template<typename _Tp, typename _Up>
+    1387              :     constexpr typename
+    1388              :     __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
+    1389              :                             && __is_arithmetic<_Up>::__value), bool>::__type
+    1390              :     isunordered(_Tp __x, _Up __y)
+    1391              :     {
+    1392              :       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+    1393              :       return __builtin_isunordered(__type(__x), __type(__y));
+    1394              :     }
+    1395              : #endif
+    1396              : 
+    1397              : #else
+    1398              : 
+    1399              :   template<typename _Tp>
+    1400              :     inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+    1401              :                                            int>::__type
+    1402              :     fpclassify(_Tp __f)
+    1403              :     {
+    1404              :       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+    1405              :       return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
+    1406              :                                   FP_SUBNORMAL, FP_ZERO, __type(__f));
+    1407              :     }
+    1408              : 
+    1409              :   template<typename _Tp>
+    1410              :     inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+    1411              :                                            int>::__type
+    1412              :     isfinite(_Tp __f)
+    1413              :     {
+    1414              :       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+    1415              :       return __builtin_isfinite(__type(__f));
+    1416              :     }
+    1417              : 
+    1418              :   template<typename _Tp>
+    1419              :     inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+    1420              :                                            int>::__type
+    1421              :     isinf(_Tp __f)
+    1422              :     {
+    1423              :       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+    1424              :       return __builtin_isinf(__type(__f));
+    1425              :     }
+    1426              : 
+    1427              :   template<typename _Tp>
+    1428              :     inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+    1429              :                                            int>::__type
+    1430              :     isnan(_Tp __f)
+    1431              :     {
+    1432              :       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+    1433              :       return __builtin_isnan(__type(__f));
+    1434              :     }
+    1435              : 
+    1436              :   template<typename _Tp>
+    1437              :     inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+    1438              :                                            int>::__type
+    1439              :     isnormal(_Tp __f)
+    1440              :     {
+    1441              :       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+    1442              :       return __builtin_isnormal(__type(__f));
+    1443              :     }
+    1444              : 
+    1445              :   template<typename _Tp>
+    1446              :     inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+    1447              :                                            int>::__type
+    1448              :     signbit(_Tp __f)
+    1449              :     {
+    1450              :       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+    1451              :       return __builtin_signbit(__type(__f));
+    1452              :     }
+    1453              : 
+    1454              :   template<typename _Tp>
+    1455              :     inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+    1456              :                                            int>::__type
+    1457              :     isgreater(_Tp __f1, _Tp __f2)
+    1458              :     {
+    1459              :       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+    1460              :       return __builtin_isgreater(__type(__f1), __type(__f2));
+    1461              :     }
+    1462              : 
+    1463              :   template<typename _Tp>
+    1464              :     inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+    1465              :                                            int>::__type
+    1466              :     isgreaterequal(_Tp __f1, _Tp __f2)
+    1467              :     {
+    1468              :       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+    1469              :       return __builtin_isgreaterequal(__type(__f1), __type(__f2));
+    1470              :     }
+    1471              : 
+    1472              :   template<typename _Tp>
+    1473              :     inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+    1474              :                                            int>::__type
+    1475              :     isless(_Tp __f1, _Tp __f2)
+    1476              :     {
+    1477              :       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+    1478              :       return __builtin_isless(__type(__f1), __type(__f2));
+    1479              :     }
+    1480              : 
+    1481              :   template<typename _Tp>
+    1482              :     inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+    1483              :                                            int>::__type
+    1484              :     islessequal(_Tp __f1, _Tp __f2)
+    1485              :     {
+    1486              :       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+    1487              :       return __builtin_islessequal(__type(__f1), __type(__f2));
+    1488              :     }
+    1489              : 
+    1490              :   template<typename _Tp>
+    1491              :     inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+    1492              :                                            int>::__type
+    1493              :     islessgreater(_Tp __f1, _Tp __f2)
+    1494              :     {
+    1495              :       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+    1496              :       return __builtin_islessgreater(__type(__f1), __type(__f2));
+    1497              :     }
+    1498              : 
+    1499              :   template<typename _Tp>
+    1500              :     inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
+    1501              :                                            int>::__type
+    1502              :     isunordered(_Tp __f1, _Tp __f2)
+    1503              :     {
+    1504              :       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+    1505              :       return __builtin_isunordered(__type(__f1), __type(__f2));
+    1506              :     }
+    1507              : 
+    1508              : #endif // C++11
+    1509              : 
+    1510              : #ifdef __STDCPP_FLOAT16_T__
+    1511              :   constexpr int
+    1512              :   fpclassify(_Float16 __x)
+    1513              :   { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
+    1514              :                                 FP_SUBNORMAL, FP_ZERO, __x); }
+    1515              : 
+    1516              :   constexpr bool
+    1517              :   isfinite(_Float16 __x)
+    1518              :   { return __builtin_isfinite(__x); }
+    1519              : 
+    1520              :   constexpr bool
+    1521              :   isinf(_Float16 __x)
+    1522              :   { return __builtin_isinf(__x); }
+    1523              : 
+    1524              :   constexpr bool
+    1525              :   isnan(_Float16 __x)
+    1526              :   { return __builtin_isnan(__x); }
+    1527              : 
+    1528              :   constexpr bool
+    1529              :   isnormal(_Float16 __x)
+    1530              :   { return __builtin_isnormal(__x); }
+    1531              : 
+    1532              :   constexpr bool
+    1533              :   signbit(_Float16 __x)
+    1534              :   { return __builtin_signbit(__x); }
+    1535              : 
+    1536              :   constexpr bool
+    1537              :   isgreater(_Float16 __x, _Float16 __y)
+    1538              :   { return __builtin_isgreater(__x, __y); }
+    1539              : 
+    1540              :   constexpr bool
+    1541              :   isgreaterequal(_Float16 __x, _Float16 __y)
+    1542              :   { return __builtin_isgreaterequal(__x, __y); }
+    1543              : 
+    1544              :   constexpr bool
+    1545              :   isless(_Float16 __x, _Float16 __y)
+    1546              :   { return __builtin_isless(__x, __y); }
+    1547              : 
+    1548              :   constexpr bool
+    1549              :   islessequal(_Float16 __x, _Float16 __y)
+    1550              :   { return __builtin_islessequal(__x, __y); }
+    1551              : 
+    1552              :   constexpr bool
+    1553              :   islessgreater(_Float16 __x, _Float16 __y)
+    1554              :   { return __builtin_islessgreater(__x, __y); }
+    1555              : 
+    1556              :   constexpr bool
+    1557              :   isunordered(_Float16 __x, _Float16 __y)
+    1558              :   { return __builtin_isunordered(__x, __y); }
+    1559              : #endif
+    1560              : 
+    1561              : #ifdef __STDCPP_FLOAT32_T__
+    1562              :   constexpr int
+    1563              :   fpclassify(_Float32 __x)
+    1564              :   { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
+    1565              :                                 FP_SUBNORMAL, FP_ZERO, __x); }
+    1566              : 
+    1567              :   constexpr bool
+    1568              :   isfinite(_Float32 __x)
+    1569              :   { return __builtin_isfinite(__x); }
+    1570              : 
+    1571              :   constexpr bool
+    1572              :   isinf(_Float32 __x)
+    1573              :   { return __builtin_isinf(__x); }
+    1574              : 
+    1575              :   constexpr bool
+    1576              :   isnan(_Float32 __x)
+    1577              :   { return __builtin_isnan(__x); }
+    1578              : 
+    1579              :   constexpr bool
+    1580              :   isnormal(_Float32 __x)
+    1581              :   { return __builtin_isnormal(__x); }
+    1582              : 
+    1583              :   constexpr bool
+    1584              :   signbit(_Float32 __x)
+    1585              :   { return __builtin_signbit(__x); }
+    1586              : 
+    1587              :   constexpr bool
+    1588              :   isgreater(_Float32 __x, _Float32 __y)
+    1589              :   { return __builtin_isgreater(__x, __y); }
+    1590              : 
+    1591              :   constexpr bool
+    1592              :   isgreaterequal(_Float32 __x, _Float32 __y)
+    1593              :   { return __builtin_isgreaterequal(__x, __y); }
+    1594              : 
+    1595              :   constexpr bool
+    1596              :   isless(_Float32 __x, _Float32 __y)
+    1597              :   { return __builtin_isless(__x, __y); }
+    1598              : 
+    1599              :   constexpr bool
+    1600              :   islessequal(_Float32 __x, _Float32 __y)
+    1601              :   { return __builtin_islessequal(__x, __y); }
+    1602              : 
+    1603              :   constexpr bool
+    1604              :   islessgreater(_Float32 __x, _Float32 __y)
+    1605              :   { return __builtin_islessgreater(__x, __y); }
+    1606              : 
+    1607              :   constexpr bool
+    1608              :   isunordered(_Float32 __x, _Float32 __y)
+    1609              :   { return __builtin_isunordered(__x, __y); }
+    1610              : #endif
+    1611              : 
+    1612              : #ifdef __STDCPP_FLOAT64_T__
+    1613              :   constexpr int
+    1614              :   fpclassify(_Float64 __x)
+    1615              :   { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
+    1616              :                                 FP_SUBNORMAL, FP_ZERO, __x); }
+    1617              : 
+    1618              :   constexpr bool
+    1619              :   isfinite(_Float64 __x)
+    1620              :   { return __builtin_isfinite(__x); }
+    1621              : 
+    1622              :   constexpr bool
+    1623              :   isinf(_Float64 __x)
+    1624              :   { return __builtin_isinf(__x); }
+    1625              : 
+    1626              :   constexpr bool
+    1627              :   isnan(_Float64 __x)
+    1628              :   { return __builtin_isnan(__x); }
+    1629              : 
+    1630              :   constexpr bool
+    1631              :   isnormal(_Float64 __x)
+    1632              :   { return __builtin_isnormal(__x); }
+    1633              : 
+    1634              :   constexpr bool
+    1635              :   signbit(_Float64 __x)
+    1636              :   { return __builtin_signbit(__x); }
+    1637              : 
+    1638              :   constexpr bool
+    1639              :   isgreater(_Float64 __x, _Float64 __y)
+    1640              :   { return __builtin_isgreater(__x, __y); }
+    1641              : 
+    1642              :   constexpr bool
+    1643              :   isgreaterequal(_Float64 __x, _Float64 __y)
+    1644              :   { return __builtin_isgreaterequal(__x, __y); }
+    1645              : 
+    1646              :   constexpr bool
+    1647              :   isless(_Float64 __x, _Float64 __y)
+    1648              :   { return __builtin_isless(__x, __y); }
+    1649              : 
+    1650              :   constexpr bool
+    1651              :   islessequal(_Float64 __x, _Float64 __y)
+    1652              :   { return __builtin_islessequal(__x, __y); }
+    1653              : 
+    1654              :   constexpr bool
+    1655              :   islessgreater(_Float64 __x, _Float64 __y)
+    1656              :   { return __builtin_islessgreater(__x, __y); }
+    1657              : 
+    1658              :   constexpr bool
+    1659              :   isunordered(_Float64 __x, _Float64 __y)
+    1660              :   { return __builtin_isunordered(__x, __y); }
+    1661              : #endif
+    1662              : 
+    1663              : #ifdef __STDCPP_FLOAT128_T__
+    1664              :   constexpr int
+    1665              :   fpclassify(_Float128 __x)
+    1666              :   { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
+    1667              :                                 FP_SUBNORMAL, FP_ZERO, __x); }
+    1668              : 
+    1669              :   constexpr bool
+    1670              :   isfinite(_Float128 __x)
+    1671              :   { return __builtin_isfinite(__x); }
+    1672              : 
+    1673              :   constexpr bool
+    1674              :   isinf(_Float128 __x)
+    1675              :   { return __builtin_isinf(__x); }
+    1676              : 
+    1677              :   constexpr bool
+    1678              :   isnan(_Float128 __x)
+    1679              :   { return __builtin_isnan(__x); }
+    1680              : 
+    1681              :   constexpr bool
+    1682              :   isnormal(_Float128 __x)
+    1683              :   { return __builtin_isnormal(__x); }
+    1684              : 
+    1685              :   constexpr bool
+    1686              :   signbit(_Float128 __x)
+    1687              :   { return __builtin_signbit(__x); }
+    1688              : 
+    1689              :   constexpr bool
+    1690              :   isgreater(_Float128 __x, _Float128 __y)
+    1691              :   { return __builtin_isgreater(__x, __y); }
+    1692              : 
+    1693              :   constexpr bool
+    1694              :   isgreaterequal(_Float128 __x, _Float128 __y)
+    1695              :   { return __builtin_isgreaterequal(__x, __y); }
+    1696              : 
+    1697              :   constexpr bool
+    1698              :   isless(_Float128 __x, _Float128 __y)
+    1699              :   { return __builtin_isless(__x, __y); }
+    1700              : 
+    1701              :   constexpr bool
+    1702              :   islessequal(_Float128 __x, _Float128 __y)
+    1703              :   { return __builtin_islessequal(__x, __y); }
+    1704              : 
+    1705              :   constexpr bool
+    1706              :   islessgreater(_Float128 __x, _Float128 __y)
+    1707              :   { return __builtin_islessgreater(__x, __y); }
+    1708              : 
+    1709              :   constexpr bool
+    1710              :   isunordered(_Float128 __x, _Float128 __y)
+    1711              :   { return __builtin_isunordered(__x, __y); }
+    1712              : #endif
+    1713              : 
+    1714              : #ifdef __STDCPP_BFLOAT16_T__
+    1715              :   constexpr int
+    1716              :   fpclassify(__gnu_cxx::__bfloat16_t __x)
+    1717              :   { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
+    1718              :                                 FP_SUBNORMAL, FP_ZERO, __x); }
+    1719              : 
+    1720              :   constexpr bool
+    1721              :   isfinite(__gnu_cxx::__bfloat16_t __x)
+    1722              :   { return __builtin_isfinite(__x); }
+    1723              : 
+    1724              :   constexpr bool
+    1725              :   isinf(__gnu_cxx::__bfloat16_t __x)
+    1726              :   { return __builtin_isinf(__x); }
+    1727              : 
+    1728              :   constexpr bool
+    1729              :   isnan(__gnu_cxx::__bfloat16_t __x)
+    1730              :   { return __builtin_isnan(__x); }
+    1731              : 
+    1732              :   constexpr bool
+    1733              :   isnormal(__gnu_cxx::__bfloat16_t __x)
+    1734              :   { return __builtin_isnormal(__x); }
+    1735              : 
+    1736              :   constexpr bool
+    1737              :   signbit(__gnu_cxx::__bfloat16_t __x)
+    1738              :   { return __builtin_signbit(__x); }
+    1739              : 
+    1740              :   constexpr bool
+    1741              :   isgreater(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
+    1742              :   { return __builtin_isgreater(__x, __y); }
+    1743              : 
+    1744              :   constexpr bool
+    1745              :   isgreaterequal(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
+    1746              :   { return __builtin_isgreaterequal(__x, __y); }
+    1747              : 
+    1748              :   constexpr bool
+    1749              :   isless(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
+    1750              :   { return __builtin_isless(__x, __y); }
+    1751              : 
+    1752              :   constexpr bool
+    1753              :   islessequal(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
+    1754              :   { return __builtin_islessequal(__x, __y); }
+    1755              : 
+    1756              :   constexpr bool
+    1757              :   islessgreater(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
+    1758              :   { return __builtin_islessgreater(__x, __y); }
+    1759              : 
+    1760              :   constexpr bool
+    1761              :   isunordered(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
+    1762              :   { return __builtin_isunordered(__x, __y); }
+    1763              : #endif
+    1764              : 
+    1765              : #endif /* _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC */
+    1766              : #endif /* _GLIBCXX_USE_C99_MATH */
+    1767              : 
+    1768              : #if __cplusplus >= 201103L
+    1769              : 
+    1770              : #ifdef _GLIBCXX_USE_C99_MATH_TR1
+    1771              : 
+    1772              : #undef acosh
+    1773              : #undef acoshf
+    1774              : #undef acoshl
+    1775              : #undef asinh
+    1776              : #undef asinhf
+    1777              : #undef asinhl
+    1778              : #undef atanh
+    1779              : #undef atanhf
+    1780              : #undef atanhl
+    1781              : #undef cbrt
+    1782              : #undef cbrtf
+    1783              : #undef cbrtl
+    1784              : #undef copysign
+    1785              : #undef copysignf
+    1786              : #undef copysignl
+    1787              : #undef erf
+    1788              : #undef erff
+    1789              : #undef erfl
+    1790              : #undef erfc
+    1791              : #undef erfcf
+    1792              : #undef erfcl
+    1793              : #undef exp2
+    1794              : #undef exp2f
+    1795              : #undef exp2l
+    1796              : #undef expm1
+    1797              : #undef expm1f
+    1798              : #undef expm1l
+    1799              : #undef fdim
+    1800              : #undef fdimf
+    1801              : #undef fdiml
+    1802              : #undef fma
+    1803              : #undef fmaf
+    1804              : #undef fmal
+    1805              : #undef fmax
+    1806              : #undef fmaxf
+    1807              : #undef fmaxl
+    1808              : #undef fmin
+    1809              : #undef fminf
+    1810              : #undef fminl
+    1811              : #undef hypot
+    1812              : #undef hypotf
+    1813              : #undef hypotl
+    1814              : #undef ilogb
+    1815              : #undef ilogbf
+    1816              : #undef ilogbl
+    1817              : #undef lgamma
+    1818              : #undef lgammaf
+    1819              : #undef lgammal
+    1820              : #ifndef _GLIBCXX_NO_C99_ROUNDING_FUNCS
+    1821              : #undef llrint
+    1822              : #undef llrintf
+    1823              : #undef llrintl
+    1824              : #undef llround
+    1825              : #undef llroundf
+    1826              : #undef llroundl
+    1827              : #endif
+    1828              : #undef log1p
+    1829              : #undef log1pf
+    1830              : #undef log1pl
+    1831              : #undef log2
+    1832              : #undef log2f
+    1833              : #undef log2l
+    1834              : #undef logb
+    1835              : #undef logbf
+    1836              : #undef logbl
+    1837              : #undef lrint
+    1838              : #undef lrintf
+    1839              : #undef lrintl
+    1840              : #undef lround
+    1841              : #undef lroundf
+    1842              : #undef lroundl
+    1843              : #undef nan
+    1844              : #undef nanf
+    1845              : #undef nanl
+    1846              : #undef nearbyint
+    1847              : #undef nearbyintf
+    1848              : #undef nearbyintl
+    1849              : #undef nextafter
+    1850              : #undef nextafterf
+    1851              : #undef nextafterl
+    1852              : #undef nexttoward
+    1853              : #undef nexttowardf
+    1854              : #undef nexttowardl
+    1855              : #undef remainder
+    1856              : #undef remainderf
+    1857              : #undef remainderl
+    1858              : #undef remquo
+    1859              : #undef remquof
+    1860              : #undef remquol
+    1861              : #undef rint
+    1862              : #undef rintf
+    1863              : #undef rintl
+    1864              : #undef round
+    1865              : #undef roundf
+    1866              : #undef roundl
+    1867              : #undef scalbln
+    1868              : #undef scalblnf
+    1869              : #undef scalblnl
+    1870              : #undef scalbn
+    1871              : #undef scalbnf
+    1872              : #undef scalbnl
+    1873              : #undef tgamma
+    1874              : #undef tgammaf
+    1875              : #undef tgammal
+    1876              : #undef trunc
+    1877              : #undef truncf
+    1878              : #undef truncl
+    1879              : 
+    1880              :   // types
+    1881              :   using ::double_t;
+    1882              :   using ::float_t;
+    1883              : 
+    1884              :   // functions
+    1885              :   using ::acosh;
+    1886              :   using ::acoshf;
+    1887              :   using ::acoshl;
+    1888              : 
+    1889              :   using ::asinh;
+    1890              :   using ::asinhf;
+    1891              :   using ::asinhl;
+    1892              : 
+    1893              :   using ::atanh;
+    1894              :   using ::atanhf;
+    1895              :   using ::atanhl;
+    1896              : 
+    1897              :   using ::cbrt;
+    1898              :   using ::cbrtf;
+    1899              :   using ::cbrtl;
+    1900              : 
+    1901              :   using ::copysign;
+    1902              :   using ::copysignf;
+    1903              :   using ::copysignl;
+    1904              : 
+    1905              :   using ::erf;
+    1906              :   using ::erff;
+    1907              :   using ::erfl;
+    1908              : 
+    1909              :   using ::erfc;
+    1910              :   using ::erfcf;
+    1911              :   using ::erfcl;
+    1912              : 
+    1913              :   using ::exp2;
+    1914              :   using ::exp2f;
+    1915              :   using ::exp2l;
+    1916              : 
+    1917              :   using ::expm1;
+    1918              :   using ::expm1f;
+    1919              :   using ::expm1l;
+    1920              : 
+    1921              :   using ::fdim;
+    1922              :   using ::fdimf;
+    1923              :   using ::fdiml;
+    1924              : 
+    1925              :   using ::fma;
+    1926              :   using ::fmaf;
+    1927              :   using ::fmal;
+    1928              : 
+    1929              :   using ::fmax;
+    1930              :   using ::fmaxf;
+    1931              :   using ::fmaxl;
+    1932              : 
+    1933              :   using ::fmin;
+    1934              :   using ::fminf;
+    1935              :   using ::fminl;
+    1936              : 
+    1937              :   using ::hypot;
+    1938              :   using ::hypotf;
+    1939              :   using ::hypotl;
+    1940              : 
+    1941              :   using ::ilogb;
+    1942              :   using ::ilogbf;
+    1943              :   using ::ilogbl;
+    1944              : 
+    1945              :   using ::lgamma;
+    1946              :   using ::lgammaf;
+    1947              :   using ::lgammal;
+    1948              : 
+    1949              : #ifndef _GLIBCXX_NO_C99_ROUNDING_FUNCS
+    1950              :   using ::llrint;
+    1951              :   using ::llrintf;
+    1952              :   using ::llrintl;
+    1953              : 
+    1954              :   using ::llround;
+    1955              :   using ::llroundf;
+    1956              :   using ::llroundl;
+    1957              : #endif
+    1958              : 
+    1959              :   using ::log1p;
+    1960              :   using ::log1pf;
+    1961              :   using ::log1pl;
+    1962              : 
+    1963              :   using ::log2;
+    1964              :   using ::log2f;
+    1965              :   using ::log2l;
+    1966              : 
+    1967              :   using ::logb;
+    1968              :   using ::logbf;
+    1969              :   using ::logbl;
+    1970              : 
+    1971              :   using ::lrint;
+    1972              :   using ::lrintf;
+    1973              :   using ::lrintl;
+    1974              : 
+    1975              :   using ::lround;
+    1976              :   using ::lroundf;
+    1977              :   using ::lroundl;
+    1978              : 
+    1979              :   using ::nan;
+    1980              :   using ::nanf;
+    1981              :   using ::nanl;
+    1982              : 
+    1983              :   using ::nearbyint;
+    1984              :   using ::nearbyintf;
+    1985              :   using ::nearbyintl;
+    1986              : 
+    1987              :   using ::nextafter;
+    1988              :   using ::nextafterf;
+    1989              :   using ::nextafterl;
+    1990              : 
+    1991              :   using ::nexttoward;
+    1992              :   using ::nexttowardf;
+    1993              :   using ::nexttowardl;
+    1994              : 
+    1995              :   using ::remainder;
+    1996              :   using ::remainderf;
+    1997              :   using ::remainderl;
+    1998              : 
+    1999              :   using ::remquo;
+    2000              :   using ::remquof;
+    2001              :   using ::remquol;
+    2002              : 
+    2003              :   using ::rint;
+    2004              :   using ::rintf;
+    2005              :   using ::rintl;
+    2006              : 
+    2007              :   using ::round;
+    2008              :   using ::roundf;
+    2009              :   using ::roundl;
+    2010              : 
+    2011              :   using ::scalbln;
+    2012              :   using ::scalblnf;
+    2013              :   using ::scalblnl;
+    2014              : 
+    2015              :   using ::scalbn;
+    2016              :   using ::scalbnf;
+    2017              :   using ::scalbnl;
+    2018              : 
+    2019              :   using ::tgamma;
+    2020              :   using ::tgammaf;
+    2021              :   using ::tgammal;
+    2022              : 
+    2023              :   using ::trunc;
+    2024              :   using ::truncf;
+    2025              :   using ::truncl;
+    2026              : 
+    2027              :   /// Additional overloads.
+    2028              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2029              :   constexpr float
+    2030              :   acosh(float __x)
+    2031              :   { return __builtin_acoshf(__x); }
+    2032              : 
+    2033              :   constexpr long double
+    2034              :   acosh(long double __x)
+    2035              :   { return __builtin_acoshl(__x); }
+    2036              : #endif
+    2037              : 
+    2038              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2039              :   template<typename _Tp>
+    2040              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2041              :                                               double>::__type
+    2042              :     acosh(_Tp __x)
+    2043              :     { return __builtin_acosh(__x); }
+    2044              : #endif
+    2045              : 
+    2046              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2047              :   constexpr float
+    2048              :   asinh(float __x)
+    2049              :   { return __builtin_asinhf(__x); }
+    2050              : 
+    2051              :   constexpr long double
+    2052              :   asinh(long double __x)
+    2053              :   { return __builtin_asinhl(__x); }
+    2054              : #endif
+    2055              : 
+    2056              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2057              :   template<typename _Tp>
+    2058              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2059              :                                               double>::__type
+    2060              :     asinh(_Tp __x)
+    2061              :     { return __builtin_asinh(__x); }
+    2062              : #endif
+    2063              : 
+    2064              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2065              :   constexpr float
+    2066              :   atanh(float __x)
+    2067              :   { return __builtin_atanhf(__x); }
+    2068              : 
+    2069              :   constexpr long double
+    2070              :   atanh(long double __x)
+    2071              :   { return __builtin_atanhl(__x); }
+    2072              : #endif
+    2073              : 
+    2074              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2075              :   template<typename _Tp>
+    2076              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2077              :                                               double>::__type
+    2078              :     atanh(_Tp __x)
+    2079              :     { return __builtin_atanh(__x); }
+    2080              : #endif
+    2081              : 
+    2082              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2083              :   constexpr float
+    2084              :   cbrt(float __x)
+    2085              :   { return __builtin_cbrtf(__x); }
+    2086              : 
+    2087              :   constexpr long double
+    2088              :   cbrt(long double __x)
+    2089              :   { return __builtin_cbrtl(__x); }
+    2090              : #endif
+    2091              : 
+    2092              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2093              :   template<typename _Tp>
+    2094              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2095              :                                               double>::__type
+    2096              :     cbrt(_Tp __x)
+    2097              :     { return __builtin_cbrt(__x); }
+    2098              : #endif
+    2099              : 
+    2100              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2101              :   constexpr float
+    2102              :   copysign(float __x, float __y)
+    2103              :   { return __builtin_copysignf(__x, __y); }
+    2104              : 
+    2105              :   constexpr long double
+    2106              :   copysign(long double __x, long double __y)
+    2107              :   { return __builtin_copysignl(__x, __y); }
+    2108              : #endif
+    2109              : 
+    2110              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2111              :   constexpr float
+    2112              :   erf(float __x)
+    2113              :   { return __builtin_erff(__x); }
+    2114              : 
+    2115              :   constexpr long double
+    2116              :   erf(long double __x)
+    2117              :   { return __builtin_erfl(__x); }
+    2118              : #endif
+    2119              : 
+    2120              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2121              :   template<typename _Tp>
+    2122              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2123              :                                               double>::__type
+    2124              :     erf(_Tp __x)
+    2125              :     { return __builtin_erf(__x); }
+    2126              : #endif
+    2127              : 
+    2128              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2129              :   constexpr float
+    2130              :   erfc(float __x)
+    2131              :   { return __builtin_erfcf(__x); }
+    2132              : 
+    2133              :   constexpr long double
+    2134              :   erfc(long double __x)
+    2135              :   { return __builtin_erfcl(__x); }
+    2136              : #endif
+    2137              : 
+    2138              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2139              :   template<typename _Tp>
+    2140              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2141              :                                               double>::__type
+    2142              :     erfc(_Tp __x)
+    2143              :     { return __builtin_erfc(__x); }
+    2144              : #endif
+    2145              : 
+    2146              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2147              :   constexpr float
+    2148              :   exp2(float __x)
+    2149              :   { return __builtin_exp2f(__x); }
+    2150              : 
+    2151              :   constexpr long double
+    2152              :   exp2(long double __x)
+    2153              :   { return __builtin_exp2l(__x); }
+    2154              : #endif
+    2155              : 
+    2156              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2157              :   template<typename _Tp>
+    2158              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2159              :                                               double>::__type
+    2160              :     exp2(_Tp __x)
+    2161              :     { return __builtin_exp2(__x); }
+    2162              : #endif
+    2163              : 
+    2164              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2165              :   constexpr float
+    2166              :   expm1(float __x)
+    2167              :   { return __builtin_expm1f(__x); }
+    2168              : 
+    2169              :   constexpr long double
+    2170              :   expm1(long double __x)
+    2171              :   { return __builtin_expm1l(__x); }
+    2172              : #endif
+    2173              : 
+    2174              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2175              :   template<typename _Tp>
+    2176              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2177              :                                               double>::__type
+    2178              :     expm1(_Tp __x)
+    2179              :     { return __builtin_expm1(__x); }
+    2180              : #endif
+    2181              : 
+    2182              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2183              :   constexpr float
+    2184              :   fdim(float __x, float __y)
+    2185              :   { return __builtin_fdimf(__x, __y); }
+    2186              : 
+    2187              :   constexpr long double
+    2188              :   fdim(long double __x, long double __y)
+    2189              :   { return __builtin_fdiml(__x, __y); }
+    2190              : #endif
+    2191              : 
+    2192              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2193              :   constexpr float
+    2194              :   fma(float __x, float __y, float __z)
+    2195              :   { return __builtin_fmaf(__x, __y, __z); }
+    2196              : 
+    2197              :   constexpr long double
+    2198              :   fma(long double __x, long double __y, long double __z)
+    2199              :   { return __builtin_fmal(__x, __y, __z); }
+    2200              : #endif
+    2201              : 
+    2202              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2203              :   constexpr float
+    2204              :   fmax(float __x, float __y)
+    2205              :   { return __builtin_fmaxf(__x, __y); }
+    2206              : 
+    2207              :   constexpr long double
+    2208              :   fmax(long double __x, long double __y)
+    2209              :   { return __builtin_fmaxl(__x, __y); }
+    2210              : #endif
+    2211              : 
+    2212              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2213              :   constexpr float
+    2214              :   fmin(float __x, float __y)
+    2215              :   { return __builtin_fminf(__x, __y); }
+    2216              : 
+    2217              :   constexpr long double
+    2218              :   fmin(long double __x, long double __y)
+    2219              :   { return __builtin_fminl(__x, __y); }
+    2220              : #endif
+    2221              : 
+    2222              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2223              :   constexpr float
+    2224              :   hypot(float __x, float __y)
+    2225              :   { return __builtin_hypotf(__x, __y); }
+    2226              : 
+    2227              :   constexpr long double
+    2228              :   hypot(long double __x, long double __y)
+    2229              :   { return __builtin_hypotl(__x, __y); }
+    2230              : #endif
+    2231              : 
+    2232              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2233              :   constexpr int
+    2234              :   ilogb(float __x)
+    2235              :   { return __builtin_ilogbf(__x); }
+    2236              : 
+    2237              :   constexpr int
+    2238              :   ilogb(long double __x)
+    2239              :   { return __builtin_ilogbl(__x); }
+    2240              : #endif
+    2241              : 
+    2242              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2243              :   template<typename _Tp>
+    2244              :     constexpr
+    2245              :     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2246              :                                     int>::__type
+    2247              :     ilogb(_Tp __x)
+    2248              :     { return __builtin_ilogb(__x); }
+    2249              : #endif
+    2250              : 
+    2251              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2252              :   constexpr float
+    2253              :   lgamma(float __x)
+    2254              :   { return __builtin_lgammaf(__x); }
+    2255              : 
+    2256              :   constexpr long double
+    2257              :   lgamma(long double __x)
+    2258              :   { return __builtin_lgammal(__x); }
+    2259              : #endif
+    2260              : 
+    2261              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2262              :   template<typename _Tp>
+    2263              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2264              :                                               double>::__type
+    2265              :     lgamma(_Tp __x)
+    2266              :     { return __builtin_lgamma(__x); }
+    2267              : #endif
+    2268              : 
+    2269              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2270              :   constexpr long long
+    2271              :   llrint(float __x)
+    2272              :   { return __builtin_llrintf(__x); }
+    2273              : 
+    2274              :   constexpr long long
+    2275              :   llrint(long double __x)
+    2276              :   { return __builtin_llrintl(__x); }
+    2277              : #endif
+    2278              : 
+    2279              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2280              :   template<typename _Tp>
+    2281              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2282              :                                               long long>::__type
+    2283              :     llrint(_Tp __x)
+    2284              :     { return __builtin_llrint(__x); }
+    2285              : #endif
+    2286              : 
+    2287              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2288              :   constexpr long long
+    2289              :   llround(float __x)
+    2290              :   { return __builtin_llroundf(__x); }
+    2291              : 
+    2292              :   constexpr long long
+    2293              :   llround(long double __x)
+    2294              :   { return __builtin_llroundl(__x); }
+    2295              : #endif
+    2296              : 
+    2297              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2298              :   template<typename _Tp>
+    2299              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2300              :                                               long long>::__type
+    2301              :     llround(_Tp __x)
+    2302              :     { return __builtin_llround(__x); }
+    2303              : #endif
+    2304              : 
+    2305              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2306              :   constexpr float
+    2307              :   log1p(float __x)
+    2308              :   { return __builtin_log1pf(__x); }
+    2309              : 
+    2310              :   constexpr long double
+    2311              :   log1p(long double __x)
+    2312              :   { return __builtin_log1pl(__x); }
+    2313              : #endif
+    2314              : 
+    2315              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2316              :   template<typename _Tp>
+    2317              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2318              :                                               double>::__type
+    2319              :     log1p(_Tp __x)
+    2320              :     { return __builtin_log1p(__x); }
+    2321              : #endif
+    2322              : 
+    2323              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2324              :   // DR 568.
+    2325              :   constexpr float
+    2326              :   log2(float __x)
+    2327              :   { return __builtin_log2f(__x); }
+    2328              : 
+    2329              :   constexpr long double
+    2330              :   log2(long double __x)
+    2331              :   { return __builtin_log2l(__x); }
+    2332              : #endif
+    2333              : 
+    2334              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2335              :   template<typename _Tp>
+    2336              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2337              :                                               double>::__type
+    2338              :     log2(_Tp __x)
+    2339              :     { return __builtin_log2(__x); }
+    2340              : #endif
+    2341              : 
+    2342              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2343              :   constexpr float
+    2344              :   logb(float __x)
+    2345              :   { return __builtin_logbf(__x); }
+    2346              : 
+    2347              :   constexpr long double
+    2348              :   logb(long double __x)
+    2349              :   { return __builtin_logbl(__x); }
+    2350              : #endif
+    2351              : 
+    2352              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2353              :   template<typename _Tp>
+    2354              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2355              :                                               double>::__type
+    2356              :     logb(_Tp __x)
+    2357              :     { return __builtin_logb(__x); }
+    2358              : #endif
+    2359              : 
+    2360              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2361              :   constexpr long
+    2362              :   lrint(float __x)
+    2363              :   { return __builtin_lrintf(__x); }
+    2364              : 
+    2365              :   constexpr long
+    2366              :   lrint(long double __x)
+    2367              :   { return __builtin_lrintl(__x); }
+    2368              : #endif
+    2369              : 
+    2370              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2371              :   template<typename _Tp>
+    2372              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2373              :                                               long>::__type
+    2374              :     lrint(_Tp __x)
+    2375              :     { return __builtin_lrint(__x); }
+    2376              : #endif
+    2377              : 
+    2378              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2379              :   constexpr long
+    2380              :   lround(float __x)
+    2381              :   { return __builtin_lroundf(__x); }
+    2382              : 
+    2383              :   constexpr long
+    2384              :   lround(long double __x)
+    2385              :   { return __builtin_lroundl(__x); }
+    2386              : #endif
+    2387              : 
+    2388              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2389              :   template<typename _Tp>
+    2390              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2391              :                                               long>::__type
+    2392              :     lround(_Tp __x)
+    2393              :     { return __builtin_lround(__x); }
+    2394              : #endif
+    2395              : 
+    2396              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2397              :   constexpr float
+    2398              :   nearbyint(float __x)
+    2399              :   { return __builtin_nearbyintf(__x); }
+    2400              : 
+    2401              :   constexpr long double
+    2402              :   nearbyint(long double __x)
+    2403              :   { return __builtin_nearbyintl(__x); }
+    2404              : #endif
+    2405              : 
+    2406              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2407              :   template<typename _Tp>
+    2408              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2409              :                                               double>::__type
+    2410              :     nearbyint(_Tp __x)
+    2411              :     { return __builtin_nearbyint(__x); }
+    2412              : #endif
+    2413              : 
+    2414              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2415              :   constexpr float
+    2416              :   nextafter(float __x, float __y)
+    2417              :   { return __builtin_nextafterf(__x, __y); }
+    2418              : 
+    2419              :   constexpr long double
+    2420              :   nextafter(long double __x, long double __y)
+    2421              :   { return __builtin_nextafterl(__x, __y); }
+    2422              : #endif
+    2423              : 
+    2424              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2425              :   constexpr float
+    2426              :   nexttoward(float __x, long double __y)
+    2427              :   { return __builtin_nexttowardf(__x, __y); }
+    2428              : 
+    2429              :   constexpr long double
+    2430              :   nexttoward(long double __x, long double __y)
+    2431              :   { return __builtin_nexttowardl(__x, __y); }
+    2432              : #endif
+    2433              : 
+    2434              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2435              :   template<typename _Tp>
+    2436              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2437              :                                               double>::__type
+    2438              :     nexttoward(_Tp __x, long double __y)
+    2439              :     { return __builtin_nexttoward(__x, __y); }
+    2440              : #endif
+    2441              : 
+    2442              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2443              :   constexpr float
+    2444              :   remainder(float __x, float __y)
+    2445              :   { return __builtin_remainderf(__x, __y); }
+    2446              : 
+    2447              :   constexpr long double
+    2448              :   remainder(long double __x, long double __y)
+    2449              :   { return __builtin_remainderl(__x, __y); }
+    2450              : #endif
+    2451              : 
+    2452              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2453              :   inline float
+    2454              :   remquo(float __x, float __y, int* __pquo)
+    2455              :   { return __builtin_remquof(__x, __y, __pquo); }
+    2456              : 
+    2457              :   inline long double
+    2458              :   remquo(long double __x, long double __y, int* __pquo)
+    2459              :   { return __builtin_remquol(__x, __y, __pquo); }
+    2460              : #endif
+    2461              : 
+    2462              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2463              :   constexpr float
+    2464              :   rint(float __x)
+    2465              :   { return __builtin_rintf(__x); }
+    2466              : 
+    2467              :   constexpr long double
+    2468              :   rint(long double __x)
+    2469              :   { return __builtin_rintl(__x); }
+    2470              : #endif
+    2471              : 
+    2472              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2473              :   template<typename _Tp>
+    2474              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2475              :                                               double>::__type
+    2476              :     rint(_Tp __x)
+    2477              :     { return __builtin_rint(__x); }
+    2478              : #endif
+    2479              : 
+    2480              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2481              :   constexpr float
+    2482              :   round(float __x)
+    2483              :   { return __builtin_roundf(__x); }
+    2484              : 
+    2485              :   constexpr long double
+    2486              :   round(long double __x)
+    2487              :   { return __builtin_roundl(__x); }
+    2488              : #endif
+    2489              : 
+    2490              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2491              :   template<typename _Tp>
+    2492              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2493              :                                               double>::__type
+    2494              :     round(_Tp __x)
+    2495              :     { return __builtin_round(__x); }
+    2496              : #endif
+    2497              : 
+    2498              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2499              :   constexpr float
+    2500              :   scalbln(float __x, long __ex)
+    2501              :   { return __builtin_scalblnf(__x, __ex); }
+    2502              : 
+    2503              :   constexpr long double
+    2504              :   scalbln(long double __x, long __ex)
+    2505              :   { return __builtin_scalblnl(__x, __ex); }
+    2506              : #endif
+    2507              : 
+    2508              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2509              :   template<typename _Tp>
+    2510              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2511              :                                               double>::__type
+    2512              :     scalbln(_Tp __x, long __ex)
+    2513              :     { return __builtin_scalbln(__x, __ex); }
+    2514              : #endif
+    2515              :  
+    2516              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2517              :   constexpr float
+    2518              :   scalbn(float __x, int __ex)
+    2519              :   { return __builtin_scalbnf(__x, __ex); }
+    2520              : 
+    2521              :   constexpr long double
+    2522              :   scalbn(long double __x, int __ex)
+    2523              :   { return __builtin_scalbnl(__x, __ex); }
+    2524              : #endif
+    2525              : 
+    2526              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2527              :   template<typename _Tp>
+    2528              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2529              :                                               double>::__type
+    2530              :     scalbn(_Tp __x, int __ex)
+    2531              :     { return __builtin_scalbn(__x, __ex); }
+    2532              : #endif
+    2533              : 
+    2534              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2535              :   constexpr float
+    2536              :   tgamma(float __x)
+    2537              :   { return __builtin_tgammaf(__x); }
+    2538              : 
+    2539              :   constexpr long double
+    2540              :   tgamma(long double __x)
+    2541              :   { return __builtin_tgammal(__x); }
+    2542              : #endif
+    2543              : 
+    2544              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2545              :   template<typename _Tp>
+    2546              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2547              :                                               double>::__type
+    2548              :     tgamma(_Tp __x)
+    2549              :     { return __builtin_tgamma(__x); }
+    2550              : #endif
+    2551              :  
+    2552              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+    2553              :   constexpr float
+    2554              :   trunc(float __x)
+    2555              :   { return __builtin_truncf(__x); }
+    2556              : 
+    2557              :   constexpr long double
+    2558              :   trunc(long double __x)
+    2559              :   { return __builtin_truncl(__x); }
+    2560              : #endif
+    2561              : 
+    2562              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    2563              :   template<typename _Tp>
+    2564              :     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
+    2565              :                                               double>::__type
+    2566              :     trunc(_Tp __x)
+    2567              :     { return __builtin_trunc(__x); }
+    2568              : #endif
+    2569              : 
+    2570              : #if defined(__STDCPP_FLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
+    2571              :   constexpr _Float16
+    2572              :   acosh(_Float16 __x)
+    2573              :   { return _Float16(__builtin_acoshf(__x)); }
+    2574              : 
+    2575              :   constexpr _Float16
+    2576              :   asinh(_Float16 __x)
+    2577              :   { return _Float16(__builtin_asinhf(__x)); }
+    2578              : 
+    2579              :   constexpr _Float16
+    2580              :   atanh(_Float16 __x)
+    2581              :   { return _Float16(__builtin_atanhf(__x)); }
+    2582              : 
+    2583              :   constexpr _Float16
+    2584              :   cbrt(_Float16 __x)
+    2585              :   { return _Float16(__builtin_cbrtf(__x)); }
+    2586              : 
+    2587              :   constexpr _Float16
+    2588              :   copysign(_Float16 __x, _Float16 __y)
+    2589              :   { return __builtin_copysignf16(__x, __y); }
+    2590              : 
+    2591              :   constexpr _Float16
+    2592              :   erf(_Float16 __x)
+    2593              :   { return _Float16(__builtin_erff(__x)); }
+    2594              : 
+    2595              :   constexpr _Float16
+    2596              :   erfc(_Float16 __x)
+    2597              :   { return _Float16(__builtin_erfcf(__x)); }
+    2598              : 
+    2599              :   constexpr _Float16
+    2600              :   exp2(_Float16 __x)
+    2601              :   { return _Float16(__builtin_exp2f(__x)); }
+    2602              : 
+    2603              :   constexpr _Float16
+    2604              :   expm1(_Float16 __x)
+    2605              :   { return _Float16(__builtin_expm1f(__x)); }
+    2606              : 
+    2607              :   constexpr _Float16
+    2608              :   fdim(_Float16 __x, _Float16 __y)
+    2609              :   { return _Float16(__builtin_fdimf(__x, __y)); }
+    2610              : 
+    2611              :   constexpr _Float16
+    2612              :   fma(_Float16 __x, _Float16 __y, _Float16 __z)
+    2613              :   { return _Float16(__builtin_fmaf(__x, __y, __z)); }
+    2614              : 
+    2615              :   constexpr _Float16
+    2616              :   fmax(_Float16 __x, _Float16 __y)
+    2617              :   { return _Float16(__builtin_fmaxf(__x, __y)); }
+    2618              : 
+    2619              :   constexpr _Float16
+    2620              :   fmin(_Float16 __x, _Float16 __y)
+    2621              :   { return _Float16(__builtin_fminf(__x, __y)); }
+    2622              : 
+    2623              :   constexpr _Float16
+    2624              :   hypot(_Float16 __x, _Float16 __y)
+    2625              :   { return _Float16(__builtin_hypotf(__x, __y)); }
+    2626              : 
+    2627              :   constexpr int
+    2628              :   ilogb(_Float16 __x)
+    2629              :   { return _Float16(__builtin_ilogbf(__x)); }
+    2630              : 
+    2631              :   constexpr _Float16
+    2632              :   lgamma(_Float16 __x)
+    2633              :   { return _Float16(__builtin_lgammaf(__x)); }
+    2634              : 
+    2635              :   constexpr long long
+    2636              :   llrint(_Float16 __x)
+    2637              :   { return _Float16(__builtin_llrintf(__x)); }
+    2638              : 
+    2639              :   constexpr long long
+    2640              :   llround(_Float16 __x)
+    2641              :   { return _Float16(__builtin_llroundf(__x)); }
+    2642              : 
+    2643              :   constexpr _Float16
+    2644              :   log1p(_Float16 __x)
+    2645              :   { return _Float16(__builtin_log1pf(__x)); }
+    2646              : 
+    2647              :   // DR 568.
+    2648              :   constexpr _Float16
+    2649              :   log2(_Float16 __x)
+    2650              :   { return _Float16(__builtin_log2f(__x)); }
+    2651              : 
+    2652              :   constexpr _Float16
+    2653              :   logb(_Float16 __x)
+    2654              :   { return _Float16(__builtin_logbf(__x)); }
+    2655              : 
+    2656              :   constexpr long
+    2657              :   lrint(_Float16 __x)
+    2658              :   { return _Float16(__builtin_lrintf(__x)); }
+    2659              : 
+    2660              :   constexpr long
+    2661              :   lround(_Float16 __x)
+    2662              :   { return _Float16(__builtin_lroundf(__x)); }
+    2663              : 
+    2664              :   constexpr _Float16
+    2665              :   nearbyint(_Float16 __x)
+    2666              :   { return _Float16(__builtin_nearbyintf(__x)); }
+    2667              : 
+    2668              :   constexpr _Float16
+    2669              :   nextafter(_Float16 __x, _Float16 __y)
+    2670              :   {
+    2671              :     if (std::__is_constant_evaluated())
+    2672              :       return __builtin_nextafterf16(__x, __y);
+    2673              : #ifdef __INT16_TYPE__
+    2674              :     using __float16_int_type = __INT16_TYPE__;
+    2675              : #else
+    2676              :     using __float16_int_type = short int;
+    2677              : #endif
+    2678              :     __float16_int_type __hx, __hy, __ix, __iy;
+    2679              :     __builtin_memcpy(&__hx, &__x, sizeof(__x));
+    2680              :     __builtin_memcpy(&__hy, &__y, sizeof(__x));
+    2681              :     __ix = __hx & 0x7fff;   // |x|
+    2682              :     __iy = __hy & 0x7fff;   // |y|
+    2683              :     if (__ix > 0x7c00 || __iy > 0x7c00) // x or y is NaN
+    2684              :       return __x + __y;
+    2685              :     if (__x == __y)
+    2686              :       return __y;               // x == y, return y
+    2687              :     if (__ix == 0)              // x == 0
+    2688              :       {
+    2689              :         __hy = (__hy & 0x8000) | 1; // return +-__FLT16_DENORM_MIN__
+    2690              :         __builtin_memcpy(&__x, &__hy, sizeof(__x));
+    2691              :         __builtin_nextafterf(0.0f, 1.0f);       // raise underflow
+    2692              :         return __x;
+    2693              :       }
+    2694              :     if (__hx >= 0)           // x > 0
+    2695              :       {
+    2696              :         if (__hx > __hy)     // x > y, x -= ulp
+    2697              :           --__hx;
+    2698              :         else                    // x < y, x += ulp
+    2699              :           ++__hx;
+    2700              :       }
+    2701              :     else                        // x < 0
+    2702              :       {
+    2703              :         if (__hy >= 0 || __hx > __hy)     // x < y, x -= ulp
+    2704              :           --__hx;
+    2705              :         else                    // x > y, x += ulp
+    2706              :           ++__hx;
+    2707              :       }
+    2708              :     __hy = __hx & 0x7c00;
+    2709              :     if (__hy >= 0x7c00)
+    2710              :       __builtin_nextafterf(__FLT_MAX__, __builtin_inff());      // overflow
+    2711              :     else if (__hy < 0x0400)
+    2712              :       __builtin_nextafterf(__FLT_MIN__, 0.0f);  // underflow
+    2713              :     __builtin_memcpy(&__x, &__hx, sizeof(__x));
+    2714              :     return __x;
+    2715              :   }
+    2716              : 
+    2717              :   constexpr _Float16
+    2718              :   remainder(_Float16 __x, _Float16 __y)
+    2719              :   { return _Float16(__builtin_remainderf(__x, __y)); }
+    2720              : 
+    2721              :   inline _Float16
+    2722              :   remquo(_Float16 __x, _Float16 __y, int* __pquo)
+    2723              :   { return _Float16(__builtin_remquof(__x, __y, __pquo)); }
+    2724              : 
+    2725              :   constexpr _Float16
+    2726              :   rint(_Float16 __x)
+    2727              :   { return _Float16(__builtin_rintf(__x)); }
+    2728              : 
+    2729              :   constexpr _Float16
+    2730              :   round(_Float16 __x)
+    2731              :   { return _Float16(__builtin_roundf(__x)); }
+    2732              : 
+    2733              :   constexpr _Float16
+    2734              :   scalbln(_Float16 __x, long __ex)
+    2735              :   { return _Float16(__builtin_scalblnf(__x, __ex)); }
+    2736              : 
+    2737              :   constexpr _Float16
+    2738              :   scalbn(_Float16 __x, int __ex)
+    2739              :   { return _Float16(__builtin_scalbnf(__x, __ex)); }
+    2740              : 
+    2741              :   constexpr _Float16
+    2742              :   tgamma(_Float16 __x)
+    2743              :   { return _Float16(__builtin_tgammaf(__x)); }
+    2744              : 
+    2745              :   constexpr _Float16
+    2746              :   trunc(_Float16 __x)
+    2747              :   { return _Float16(__builtin_truncf(__x)); }
+    2748              : #endif
+    2749              : 
+    2750              : #if defined(__STDCPP_FLOAT32_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
+    2751              :   constexpr _Float32
+    2752              :   acosh(_Float32 __x)
+    2753              :   { return __builtin_acoshf(__x); }
+    2754              : 
+    2755              :   constexpr _Float32
+    2756              :   asinh(_Float32 __x)
+    2757              :   { return __builtin_asinhf(__x); }
+    2758              : 
+    2759              :   constexpr _Float32
+    2760              :   atanh(_Float32 __x)
+    2761              :   { return __builtin_atanhf(__x); }
+    2762              : 
+    2763              :   constexpr _Float32
+    2764              :   cbrt(_Float32 __x)
+    2765              :   { return __builtin_cbrtf(__x); }
+    2766              : 
+    2767              :   constexpr _Float32
+    2768              :   copysign(_Float32 __x, _Float32 __y)
+    2769              :   { return __builtin_copysignf(__x, __y); }
+    2770              : 
+    2771              :   constexpr _Float32
+    2772              :   erf(_Float32 __x)
+    2773              :   { return __builtin_erff(__x); }
+    2774              : 
+    2775              :   constexpr _Float32
+    2776              :   erfc(_Float32 __x)
+    2777              :   { return __builtin_erfcf(__x); }
+    2778              : 
+    2779              :   constexpr _Float32
+    2780              :   exp2(_Float32 __x)
+    2781              :   { return __builtin_exp2f(__x); }
+    2782              : 
+    2783              :   constexpr _Float32
+    2784              :   expm1(_Float32 __x)
+    2785              :   { return __builtin_expm1f(__x); }
+    2786              : 
+    2787              :   constexpr _Float32
+    2788              :   fdim(_Float32 __x, _Float32 __y)
+    2789              :   { return __builtin_fdimf(__x, __y); }
+    2790              : 
+    2791              :   constexpr _Float32
+    2792              :   fma(_Float32 __x, _Float32 __y, _Float32 __z)
+    2793              :   { return __builtin_fmaf(__x, __y, __z); }
+    2794              : 
+    2795              :   constexpr _Float32
+    2796              :   fmax(_Float32 __x, _Float32 __y)
+    2797              :   { return __builtin_fmaxf(__x, __y); }
+    2798              : 
+    2799              :   constexpr _Float32
+    2800              :   fmin(_Float32 __x, _Float32 __y)
+    2801              :   { return __builtin_fminf(__x, __y); }
+    2802              : 
+    2803              :   constexpr _Float32
+    2804              :   hypot(_Float32 __x, _Float32 __y)
+    2805              :   { return __builtin_hypotf(__x, __y); }
+    2806              : 
+    2807              :   constexpr int
+    2808              :   ilogb(_Float32 __x)
+    2809              :   { return __builtin_ilogbf(__x); }
+    2810              : 
+    2811              :   constexpr _Float32
+    2812              :   lgamma(_Float32 __x)
+    2813              :   { return __builtin_lgammaf(__x); }
+    2814              : 
+    2815              :   constexpr long long
+    2816              :   llrint(_Float32 __x)
+    2817              :   { return __builtin_llrintf(__x); }
+    2818              : 
+    2819              :   constexpr long long
+    2820              :   llround(_Float32 __x)
+    2821              :   { return __builtin_llroundf(__x); }
+    2822              : 
+    2823              :   constexpr _Float32
+    2824              :   log1p(_Float32 __x)
+    2825              :   { return __builtin_log1pf(__x); }
+    2826              : 
+    2827              :   // DR 568.
+    2828              :   constexpr _Float32
+    2829              :   log2(_Float32 __x)
+    2830              :   { return __builtin_log2f(__x); }
+    2831              : 
+    2832              :   constexpr _Float32
+    2833              :   logb(_Float32 __x)
+    2834              :   { return __builtin_logbf(__x); }
+    2835              : 
+    2836              :   constexpr long
+    2837              :   lrint(_Float32 __x)
+    2838              :   { return __builtin_lrintf(__x); }
+    2839              : 
+    2840              :   constexpr long
+    2841              :   lround(_Float32 __x)
+    2842              :   { return __builtin_lroundf(__x); }
+    2843              : 
+    2844              :   constexpr _Float32
+    2845              :   nearbyint(_Float32 __x)
+    2846              :   { return __builtin_nearbyintf(__x); }
+    2847              : 
+    2848              :   constexpr _Float32
+    2849              :   nextafter(_Float32 __x, _Float32 __y)
+    2850              :   { return __builtin_nextafterf(__x, __y); }
+    2851              : 
+    2852              :   constexpr _Float32
+    2853              :   remainder(_Float32 __x, _Float32 __y)
+    2854              :   { return __builtin_remainderf(__x, __y); }
+    2855              : 
+    2856              :   inline _Float32
+    2857              :   remquo(_Float32 __x, _Float32 __y, int* __pquo)
+    2858              :   { return __builtin_remquof(__x, __y, __pquo); }
+    2859              : 
+    2860              :   constexpr _Float32
+    2861              :   rint(_Float32 __x)
+    2862              :   { return __builtin_rintf(__x); }
+    2863              : 
+    2864              :   constexpr _Float32
+    2865              :   round(_Float32 __x)
+    2866              :   { return __builtin_roundf(__x); }
+    2867              : 
+    2868              :   constexpr _Float32
+    2869              :   scalbln(_Float32 __x, long __ex)
+    2870              :   { return __builtin_scalblnf(__x, __ex); }
+    2871              : 
+    2872              :   constexpr _Float32
+    2873              :   scalbn(_Float32 __x, int __ex)
+    2874              :   { return __builtin_scalbnf(__x, __ex); }
+    2875              : 
+    2876              :   constexpr _Float32
+    2877              :   tgamma(_Float32 __x)
+    2878              :   { return __builtin_tgammaf(__x); }
+    2879              : 
+    2880              :   constexpr _Float32
+    2881              :   trunc(_Float32 __x)
+    2882              :   { return __builtin_truncf(__x); }
+    2883              : #endif
+    2884              : 
+    2885              : #if defined(__STDCPP_FLOAT64_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64)
+    2886              :   constexpr _Float64
+    2887              :   acosh(_Float64 __x)
+    2888              :   { return __builtin_acosh(__x); }
+    2889              : 
+    2890              :   constexpr _Float64
+    2891              :   asinh(_Float64 __x)
+    2892              :   { return __builtin_asinh(__x); }
+    2893              : 
+    2894              :   constexpr _Float64
+    2895              :   atanh(_Float64 __x)
+    2896              :   { return __builtin_atanh(__x); }
+    2897              : 
+    2898              :   constexpr _Float64
+    2899              :   cbrt(_Float64 __x)
+    2900              :   { return __builtin_cbrt(__x); }
+    2901              : 
+    2902              :   constexpr _Float64
+    2903              :   copysign(_Float64 __x, _Float64 __y)
+    2904              :   { return __builtin_copysign(__x, __y); }
+    2905              : 
+    2906              :   constexpr _Float64
+    2907              :   erf(_Float64 __x)
+    2908              :   { return __builtin_erf(__x); }
+    2909              : 
+    2910              :   constexpr _Float64
+    2911              :   erfc(_Float64 __x)
+    2912              :   { return __builtin_erfc(__x); }
+    2913              : 
+    2914              :   constexpr _Float64
+    2915              :   exp2(_Float64 __x)
+    2916              :   { return __builtin_exp2(__x); }
+    2917              : 
+    2918              :   constexpr _Float64
+    2919              :   expm1(_Float64 __x)
+    2920              :   { return __builtin_expm1(__x); }
+    2921              : 
+    2922              :   constexpr _Float64
+    2923              :   fdim(_Float64 __x, _Float64 __y)
+    2924              :   { return __builtin_fdim(__x, __y); }
+    2925              : 
+    2926              :   constexpr _Float64
+    2927              :   fma(_Float64 __x, _Float64 __y, _Float64 __z)
+    2928              :   { return __builtin_fma(__x, __y, __z); }
+    2929              : 
+    2930              :   constexpr _Float64
+    2931              :   fmax(_Float64 __x, _Float64 __y)
+    2932              :   { return __builtin_fmax(__x, __y); }
+    2933              : 
+    2934              :   constexpr _Float64
+    2935              :   fmin(_Float64 __x, _Float64 __y)
+    2936              :   { return __builtin_fmin(__x, __y); }
+    2937              : 
+    2938              :   constexpr _Float64
+    2939              :   hypot(_Float64 __x, _Float64 __y)
+    2940              :   { return __builtin_hypot(__x, __y); }
+    2941              : 
+    2942              :   constexpr int
+    2943              :   ilogb(_Float64 __x)
+    2944              :   { return __builtin_ilogb(__x); }
+    2945              : 
+    2946              :   constexpr _Float64
+    2947              :   lgamma(_Float64 __x)
+    2948              :   { return __builtin_lgamma(__x); }
+    2949              : 
+    2950              :   constexpr long long
+    2951              :   llrint(_Float64 __x)
+    2952              :   { return __builtin_llrint(__x); }
+    2953              : 
+    2954              :   constexpr long long
+    2955              :   llround(_Float64 __x)
+    2956              :   { return __builtin_llround(__x); }
+    2957              : 
+    2958              :   constexpr _Float64
+    2959              :   log1p(_Float64 __x)
+    2960              :   { return __builtin_log1p(__x); }
+    2961              : 
+    2962              :   // DR 568.
+    2963              :   constexpr _Float64
+    2964              :   log2(_Float64 __x)
+    2965              :   { return __builtin_log2(__x); }
+    2966              : 
+    2967              :   constexpr _Float64
+    2968              :   logb(_Float64 __x)
+    2969              :   { return __builtin_logb(__x); }
+    2970              : 
+    2971              :   constexpr long
+    2972              :   lrint(_Float64 __x)
+    2973              :   { return __builtin_lrint(__x); }
+    2974              : 
+    2975              :   constexpr long
+    2976              :   lround(_Float64 __x)
+    2977              :   { return __builtin_lround(__x); }
+    2978              : 
+    2979              :   constexpr _Float64
+    2980              :   nearbyint(_Float64 __x)
+    2981              :   { return __builtin_nearbyint(__x); }
+    2982              : 
+    2983              :   constexpr _Float64
+    2984              :   nextafter(_Float64 __x, _Float64 __y)
+    2985              :   { return __builtin_nextafter(__x, __y); }
+    2986              : 
+    2987              :   constexpr _Float64
+    2988              :   remainder(_Float64 __x, _Float64 __y)
+    2989              :   { return __builtin_remainder(__x, __y); }
+    2990              : 
+    2991              :   inline _Float64
+    2992              :   remquo(_Float64 __x, _Float64 __y, int* __pquo)
+    2993              :   { return __builtin_remquo(__x, __y, __pquo); }
+    2994              : 
+    2995              :   constexpr _Float64
+    2996              :   rint(_Float64 __x)
+    2997              :   { return __builtin_rint(__x); }
+    2998              : 
+    2999              :   constexpr _Float64
+    3000              :   round(_Float64 __x)
+    3001              :   { return __builtin_round(__x); }
+    3002              : 
+    3003              :   constexpr _Float64
+    3004              :   scalbln(_Float64 __x, long __ex)
+    3005              :   { return __builtin_scalbln(__x, __ex); }
+    3006              : 
+    3007              :   constexpr _Float64
+    3008              :   scalbn(_Float64 __x, int __ex)
+    3009              :   { return __builtin_scalbn(__x, __ex); }
+    3010              : 
+    3011              :   constexpr _Float64
+    3012              :   tgamma(_Float64 __x)
+    3013              :   { return __builtin_tgamma(__x); }
+    3014              : 
+    3015              :   constexpr _Float64
+    3016              :   trunc(_Float64 __x)
+    3017              :   { return __builtin_trunc(__x); }
+    3018              : #endif
+    3019              : 
+    3020              : #if defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128)
+    3021              :   constexpr _Float128
+    3022              :   acosh(_Float128 __x)
+    3023              :   { return __builtin_acoshl(__x); }
+    3024              : 
+    3025              :   constexpr _Float128
+    3026              :   asinh(_Float128 __x)
+    3027              :   { return __builtin_asinhl(__x); }
+    3028              : 
+    3029              :   constexpr _Float128
+    3030              :   atanh(_Float128 __x)
+    3031              :   { return __builtin_atanhl(__x); }
+    3032              : 
+    3033              :   constexpr _Float128
+    3034              :   cbrt(_Float128 __x)
+    3035              :   { return __builtin_cbrtl(__x); }
+    3036              : 
+    3037              :   constexpr _Float128
+    3038              :   copysign(_Float128 __x, _Float128 __y)
+    3039              :   { return __builtin_copysignl(__x, __y); }
+    3040              : 
+    3041              :   constexpr _Float128
+    3042              :   erf(_Float128 __x)
+    3043              :   { return __builtin_erfl(__x); }
+    3044              : 
+    3045              :   constexpr _Float128
+    3046              :   erfc(_Float128 __x)
+    3047              :   { return __builtin_erfcl(__x); }
+    3048              : 
+    3049              :   constexpr _Float128
+    3050              :   exp2(_Float128 __x)
+    3051              :   { return __builtin_exp2l(__x); }
+    3052              : 
+    3053              :   constexpr _Float128
+    3054              :   expm1(_Float128 __x)
+    3055              :   { return __builtin_expm1l(__x); }
+    3056              : 
+    3057              :   constexpr _Float128
+    3058              :   fdim(_Float128 __x, _Float128 __y)
+    3059              :   { return __builtin_fdiml(__x, __y); }
+    3060              : 
+    3061              :   constexpr _Float128
+    3062              :   fma(_Float128 __x, _Float128 __y, _Float128 __z)
+    3063              :   { return __builtin_fmal(__x, __y, __z); }
+    3064              : 
+    3065              :   constexpr _Float128
+    3066              :   fmax(_Float128 __x, _Float128 __y)
+    3067              :   { return __builtin_fmaxl(__x, __y); }
+    3068              : 
+    3069              :   constexpr _Float128
+    3070              :   fmin(_Float128 __x, _Float128 __y)
+    3071              :   { return __builtin_fminl(__x, __y); }
+    3072              : 
+    3073              :   constexpr _Float128
+    3074              :   hypot(_Float128 __x, _Float128 __y)
+    3075              :   { return __builtin_hypotl(__x, __y); }
+    3076              : 
+    3077              :   constexpr int
+    3078              :   ilogb(_Float128 __x)
+    3079              :   { return __builtin_ilogbl(__x); }
+    3080              : 
+    3081              :   constexpr _Float128
+    3082              :   lgamma(_Float128 __x)
+    3083              :   { return __builtin_lgammal(__x); }
+    3084              : 
+    3085              :   constexpr long long
+    3086              :   llrint(_Float128 __x)
+    3087              :   { return __builtin_llrintl(__x); }
+    3088              : 
+    3089              :   constexpr long long
+    3090              :   llround(_Float128 __x)
+    3091              :   { return __builtin_llroundl(__x); }
+    3092              : 
+    3093              :   constexpr _Float128
+    3094              :   log1p(_Float128 __x)
+    3095              :   { return __builtin_log1pl(__x); }
+    3096              : 
+    3097              :   // DR 568.
+    3098              :   constexpr _Float128
+    3099              :   log2(_Float128 __x)
+    3100              :   { return __builtin_log2l(__x); }
+    3101              : 
+    3102              :   constexpr _Float128
+    3103              :   logb(_Float128 __x)
+    3104              :   { return __builtin_logbl(__x); }
+    3105              : 
+    3106              :   constexpr long
+    3107              :   lrint(_Float128 __x)
+    3108              :   { return __builtin_lrintl(__x); }
+    3109              : 
+    3110              :   constexpr long
+    3111              :   lround(_Float128 __x)
+    3112              :   { return __builtin_lroundl(__x); }
+    3113              : 
+    3114              :   constexpr _Float128
+    3115              :   nearbyint(_Float128 __x)
+    3116              :   { return __builtin_nearbyintl(__x); }
+    3117              : 
+    3118              :   constexpr _Float128
+    3119              :   nextafter(_Float128 __x, _Float128 __y)
+    3120              :   { return __builtin_nextafterl(__x, __y); }
+    3121              : 
+    3122              :   constexpr _Float128
+    3123              :   remainder(_Float128 __x, _Float128 __y)
+    3124              :   { return __builtin_remainderl(__x, __y); }
+    3125              : 
+    3126              :   inline _Float128
+    3127              :   remquo(_Float128 __x, _Float128 __y, int* __pquo)
+    3128              :   { return __builtin_remquol(__x, __y, __pquo); }
+    3129              : 
+    3130              :   constexpr _Float128
+    3131              :   rint(_Float128 __x)
+    3132              :   { return __builtin_rintl(__x); }
+    3133              : 
+    3134              :   constexpr _Float128
+    3135              :   round(_Float128 __x)
+    3136              :   { return __builtin_roundl(__x); }
+    3137              : 
+    3138              :   constexpr _Float128
+    3139              :   scalbln(_Float128 __x, long __ex)
+    3140              :   { return __builtin_scalblnl(__x, __ex); }
+    3141              : 
+    3142              :   constexpr _Float128
+    3143              :   scalbn(_Float128 __x, int __ex)
+    3144              :   { return __builtin_scalbnl(__x, __ex); }
+    3145              : 
+    3146              :   constexpr _Float128
+    3147              :   tgamma(_Float128 __x)
+    3148              :   { return __builtin_tgammal(__x); }
+    3149              : 
+    3150              :   constexpr _Float128
+    3151              :   trunc(_Float128 __x)
+    3152              :   { return __builtin_truncl(__x); }
+    3153              : #elif defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_HAVE_FLOAT128_MATH)
+    3154              :   constexpr _Float128
+    3155              :   acosh(_Float128 __x)
+    3156              :   { return __builtin_acoshf128(__x); }
+    3157              : 
+    3158              :   constexpr _Float128
+    3159              :   asinh(_Float128 __x)
+    3160              :   { return __builtin_asinhf128(__x); }
+    3161              : 
+    3162              :   constexpr _Float128
+    3163              :   atanh(_Float128 __x)
+    3164              :   { return __builtin_atanhf128(__x); }
+    3165              : 
+    3166              :   constexpr _Float128
+    3167              :   cbrt(_Float128 __x)
+    3168              :   { return __builtin_cbrtf128(__x); }
+    3169              : 
+    3170              :   constexpr _Float128
+    3171              :   copysign(_Float128 __x, _Float128 __y)
+    3172              :   { return __builtin_copysignf128(__x, __y); }
+    3173              : 
+    3174              :   constexpr _Float128
+    3175              :   erf(_Float128 __x)
+    3176              :   { return __builtin_erff128(__x); }
+    3177              : 
+    3178              :   constexpr _Float128
+    3179              :   erfc(_Float128 __x)
+    3180              :   { return __builtin_erfcf128(__x); }
+    3181              : 
+    3182              :   constexpr _Float128
+    3183              :   exp2(_Float128 __x)
+    3184              :   { return __builtin_exp2f128(__x); }
+    3185              : 
+    3186              :   constexpr _Float128
+    3187              :   expm1(_Float128 __x)
+    3188              :   { return __builtin_expm1f128(__x); }
+    3189              : 
+    3190              :   constexpr _Float128
+    3191              :   fdim(_Float128 __x, _Float128 __y)
+    3192              :   { return __builtin_fdimf128(__x, __y); }
+    3193              : 
+    3194              :   constexpr _Float128
+    3195              :   fma(_Float128 __x, _Float128 __y, _Float128 __z)
+    3196              :   { return __builtin_fmaf128(__x, __y, __z); }
+    3197              : 
+    3198              :   constexpr _Float128
+    3199              :   fmax(_Float128 __x, _Float128 __y)
+    3200              :   { return __builtin_fmaxf128(__x, __y); }
+    3201              : 
+    3202              :   constexpr _Float128
+    3203              :   fmin(_Float128 __x, _Float128 __y)
+    3204              :   { return __builtin_fminf128(__x, __y); }
+    3205              : 
+    3206              :   constexpr _Float128
+    3207              :   hypot(_Float128 __x, _Float128 __y)
+    3208              :   { return __builtin_hypotf128(__x, __y); }
+    3209              : 
+    3210              :   constexpr int
+    3211              :   ilogb(_Float128 __x)
+    3212              :   { return __builtin_ilogbf128(__x); }
+    3213              : 
+    3214              :   constexpr _Float128
+    3215              :   lgamma(_Float128 __x)
+    3216              :   { return __builtin_lgammaf128(__x); }
+    3217              : 
+    3218              :   constexpr long long
+    3219              :   llrint(_Float128 __x)
+    3220              :   { return __builtin_llrintf128(__x); }
+    3221              : 
+    3222              :   constexpr long long
+    3223              :   llround(_Float128 __x)
+    3224              :   { return __builtin_llroundf128(__x); }
+    3225              : 
+    3226              :   constexpr _Float128
+    3227              :   log1p(_Float128 __x)
+    3228              :   { return __builtin_log1pf128(__x); }
+    3229              : 
+    3230              :   // DR 568.
+    3231              :   constexpr _Float128
+    3232              :   log2(_Float128 __x)
+    3233              :   { return __builtin_log2f128(__x); }
+    3234              : 
+    3235              :   constexpr _Float128
+    3236              :   logb(_Float128 __x)
+    3237              :   { return __builtin_logbf128(__x); }
+    3238              : 
+    3239              :   constexpr long
+    3240              :   lrint(_Float128 __x)
+    3241              :   { return __builtin_lrintf128(__x); }
+    3242              : 
+    3243              :   constexpr long
+    3244              :   lround(_Float128 __x)
+    3245              :   { return __builtin_lroundf128(__x); }
+    3246              : 
+    3247              :   constexpr _Float128
+    3248              :   nearbyint(_Float128 __x)
+    3249              :   { return __builtin_nearbyintf128(__x); }
+    3250              : 
+    3251              :   constexpr _Float128
+    3252              :   nextafter(_Float128 __x, _Float128 __y)
+    3253              :   { return __builtin_nextafterf128(__x, __y); }
+    3254              : 
+    3255              :   constexpr _Float128
+    3256              :   remainder(_Float128 __x, _Float128 __y)
+    3257              :   { return __builtin_remainderf128(__x, __y); }
+    3258              : 
+    3259              :   inline _Float128
+    3260              :   remquo(_Float128 __x, _Float128 __y, int* __pquo)
+    3261              :   { return __builtin_remquof128(__x, __y, __pquo); }
+    3262              : 
+    3263              :   constexpr _Float128
+    3264              :   rint(_Float128 __x)
+    3265              :   { return __builtin_rintf128(__x); }
+    3266              : 
+    3267              :   constexpr _Float128
+    3268              :   round(_Float128 __x)
+    3269              :   { return __builtin_roundf128(__x); }
+    3270              : 
+    3271              :   constexpr _Float128
+    3272              :   scalbln(_Float128 __x, long __ex)
+    3273              :   { return __builtin_scalblnf128(__x, __ex); }
+    3274              : 
+    3275              :   constexpr _Float128
+    3276              :   scalbn(_Float128 __x, int __ex)
+    3277              :   { return __builtin_scalbnf128(__x, __ex); }
+    3278              : 
+    3279              :   constexpr _Float128
+    3280              :   tgamma(_Float128 __x)
+    3281              :   { return __builtin_tgammaf128(__x); }
+    3282              : 
+    3283              :   constexpr _Float128
+    3284              :   trunc(_Float128 __x)
+    3285              :   { return __builtin_truncf128(__x); }
+    3286              : #endif
+    3287              : 
+    3288              : #if defined(__STDCPP_BFLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
+    3289              :   constexpr __gnu_cxx::__bfloat16_t
+    3290              :   acosh(__gnu_cxx::__bfloat16_t __x)
+    3291              :   { return __gnu_cxx::__bfloat16_t(__builtin_acoshf(__x)); }
+    3292              : 
+    3293              :   constexpr __gnu_cxx::__bfloat16_t
+    3294              :   asinh(__gnu_cxx::__bfloat16_t __x)
+    3295              :   { return __gnu_cxx::__bfloat16_t(__builtin_asinhf(__x)); }
+    3296              : 
+    3297              :   constexpr __gnu_cxx::__bfloat16_t
+    3298              :   atanh(__gnu_cxx::__bfloat16_t __x)
+    3299              :   { return __gnu_cxx::__bfloat16_t(__builtin_atanhf(__x)); }
+    3300              : 
+    3301              :   constexpr __gnu_cxx::__bfloat16_t
+    3302              :   cbrt(__gnu_cxx::__bfloat16_t __x)
+    3303              :   { return __gnu_cxx::__bfloat16_t(__builtin_cbrtf(__x)); }
+    3304              : 
+    3305              :   constexpr __gnu_cxx::__bfloat16_t
+    3306              :   copysign(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
+    3307              :   { return __gnu_cxx::__bfloat16_t(__builtin_copysignf(__x, __y)); }
+    3308              : 
+    3309              :   constexpr __gnu_cxx::__bfloat16_t
+    3310              :   erf(__gnu_cxx::__bfloat16_t __x)
+    3311              :   { return __gnu_cxx::__bfloat16_t(__builtin_erff(__x)); }
+    3312              : 
+    3313              :   constexpr __gnu_cxx::__bfloat16_t
+    3314              :   erfc(__gnu_cxx::__bfloat16_t __x)
+    3315              :   { return __gnu_cxx::__bfloat16_t(__builtin_erfcf(__x)); }
+    3316              : 
+    3317              :   constexpr __gnu_cxx::__bfloat16_t
+    3318              :   exp2(__gnu_cxx::__bfloat16_t __x)
+    3319              :   { return __gnu_cxx::__bfloat16_t(__builtin_exp2f(__x)); }
+    3320              : 
+    3321              :   constexpr __gnu_cxx::__bfloat16_t
+    3322              :   expm1(__gnu_cxx::__bfloat16_t __x)
+    3323              :   { return __gnu_cxx::__bfloat16_t(__builtin_expm1f(__x)); }
+    3324              : 
+    3325              :   constexpr __gnu_cxx::__bfloat16_t
+    3326              :   fdim(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
+    3327              :   { return __gnu_cxx::__bfloat16_t(__builtin_fdimf(__x, __y)); }
+    3328              : 
+    3329              :   constexpr __gnu_cxx::__bfloat16_t
+    3330              :   fma(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y, __gnu_cxx::__bfloat16_t __z)
+    3331              :   { return __gnu_cxx::__bfloat16_t(__builtin_fmaf(__x, __y, __z)); }
+    3332              : 
+    3333              :   constexpr __gnu_cxx::__bfloat16_t
+    3334              :   fmax(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
+    3335              :   { return __gnu_cxx::__bfloat16_t(__builtin_fmaxf(__x, __y)); }
+    3336              : 
+    3337              :   constexpr __gnu_cxx::__bfloat16_t
+    3338              :   fmin(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
+    3339              :   { return __gnu_cxx::__bfloat16_t(__builtin_fminf(__x, __y)); }
+    3340              : 
+    3341              :   constexpr __gnu_cxx::__bfloat16_t
+    3342              :   hypot(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
+    3343              :   { return __gnu_cxx::__bfloat16_t(__builtin_hypotf(__x, __y)); }
+    3344              : 
+    3345              :   constexpr int
+    3346              :   ilogb(__gnu_cxx::__bfloat16_t __x)
+    3347              :   { return __gnu_cxx::__bfloat16_t(__builtin_ilogbf(__x)); }
+    3348              : 
+    3349              :   constexpr __gnu_cxx::__bfloat16_t
+    3350              :   lgamma(__gnu_cxx::__bfloat16_t __x)
+    3351              :   { return __gnu_cxx::__bfloat16_t(__builtin_lgammaf(__x)); }
+    3352              : 
+    3353              :   constexpr long long
+    3354              :   llrint(__gnu_cxx::__bfloat16_t __x)
+    3355              :   { return __gnu_cxx::__bfloat16_t(__builtin_llrintf(__x)); }
+    3356              : 
+    3357              :   constexpr long long
+    3358              :   llround(__gnu_cxx::__bfloat16_t __x)
+    3359              :   { return __gnu_cxx::__bfloat16_t(__builtin_llroundf(__x)); }
+    3360              : 
+    3361              :   constexpr __gnu_cxx::__bfloat16_t
+    3362              :   log1p(__gnu_cxx::__bfloat16_t __x)
+    3363              :   { return __gnu_cxx::__bfloat16_t(__builtin_log1pf(__x)); }
+    3364              : 
+    3365              :   // DR 568.
+    3366              :   constexpr __gnu_cxx::__bfloat16_t
+    3367              :   log2(__gnu_cxx::__bfloat16_t __x)
+    3368              :   { return __gnu_cxx::__bfloat16_t(__builtin_log2f(__x)); }
+    3369              : 
+    3370              :   constexpr __gnu_cxx::__bfloat16_t
+    3371              :   logb(__gnu_cxx::__bfloat16_t __x)
+    3372              :   { return __gnu_cxx::__bfloat16_t(__builtin_logbf(__x)); }
+    3373              : 
+    3374              :   constexpr long
+    3375              :   lrint(__gnu_cxx::__bfloat16_t __x)
+    3376              :   { return __gnu_cxx::__bfloat16_t(__builtin_lrintf(__x)); }
+    3377              : 
+    3378              :   constexpr long
+    3379              :   lround(__gnu_cxx::__bfloat16_t __x)
+    3380              :   { return __gnu_cxx::__bfloat16_t(__builtin_lroundf(__x)); }
+    3381              : 
+    3382              :   constexpr __gnu_cxx::__bfloat16_t
+    3383              :   nearbyint(__gnu_cxx::__bfloat16_t __x)
+    3384              :   { return __gnu_cxx::__bfloat16_t(__builtin_nearbyintf(__x)); }
+    3385              : 
+    3386              :   constexpr __gnu_cxx::__bfloat16_t
+    3387              :   nextafter(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
+    3388              :   {
+    3389              :     if (std::__is_constant_evaluated())
+    3390              :       return __builtin_nextafterf16b(__x, __y);
+    3391              : #ifdef __INT16_TYPE__
+    3392              :     using __bfloat16_int_type = __INT16_TYPE__;
+    3393              : #else
+    3394              :     using __bfloat16_int_type = short int;
+    3395              : #endif
+    3396              :     __bfloat16_int_type __hx, __hy, __ix, __iy;
+    3397              :     __builtin_memcpy(&__hx, &__x, sizeof(__x));
+    3398              :     __builtin_memcpy(&__hy, &__y, sizeof(__x));
+    3399              :     __ix = __hx & 0x7fff;   // |x|
+    3400              :     __iy = __hy & 0x7fff;   // |y|
+    3401              :     if (__ix > 0x7f80 || __iy > 0x7f80) // x or y is NaN
+    3402              :       return __x + __y;
+    3403              :     if (__x == __y)
+    3404              :       return __y;               // x == y, return y
+    3405              :     if (__ix == 0)              // x == 0
+    3406              :       {
+    3407              :         __hy = (__hy & 0x8000) | 1; // return +-__BFLT16_DENORM_MIN__
+    3408              :         __builtin_memcpy(&__x, &__hy, sizeof(__x));
+    3409              :         __builtin_nextafterf(0.0f, 1.0f);       // raise underflow
+    3410              :         return __x;
+    3411              :       }
+    3412              :     if (__hx >= 0)           // x > 0
+    3413              :       {
+    3414              :         if (__hx > __hy)     // x > y, x -= ulp
+    3415              :           --__hx;
+    3416              :         else                    // x < y, x += ulp
+    3417              :           ++__hx;
+    3418              :       }
+    3419              :     else                        // x < 0
+    3420              :       {
+    3421              :         if (__hy >= 0 || __hx > __hy)     // x < y, x -= ulp
+    3422              :           --__hx;
+    3423              :         else                    // x > y, x += ulp
+    3424              :           ++__hx;
+    3425              :       }
+    3426              :     __hy = __hx & 0x7f80;
+    3427              :     if (__hy >= 0x7f80)
+    3428              :       __builtin_nextafterf(__FLT_MAX__, __builtin_inff());      // overflow
+    3429              :     else if (__hy < 0x0080)
+    3430              :       __builtin_nextafterf(__FLT_MIN__, 0.0f);  // underflow
+    3431              :     __builtin_memcpy(&__x, &__hx, sizeof(__x));
+    3432              :     return __x;
+    3433              :   }
+    3434              : 
+    3435              :   constexpr __gnu_cxx::__bfloat16_t
+    3436              :   remainder(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
+    3437              :   { return __gnu_cxx::__bfloat16_t(__builtin_remainderf(__x, __y)); }
+    3438              : 
+    3439              :   inline __gnu_cxx::__bfloat16_t
+    3440              :   remquo(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y, int* __pquo)
+    3441              :   { return __gnu_cxx::__bfloat16_t(__builtin_remquof(__x, __y, __pquo)); }
+    3442              : 
+    3443              :   constexpr __gnu_cxx::__bfloat16_t
+    3444              :   rint(__gnu_cxx::__bfloat16_t __x)
+    3445              :   { return __gnu_cxx::__bfloat16_t(__builtin_rintf(__x)); }
+    3446              : 
+    3447              :   constexpr __gnu_cxx::__bfloat16_t
+    3448              :   round(__gnu_cxx::__bfloat16_t __x)
+    3449              :   { return __gnu_cxx::__bfloat16_t(__builtin_roundf(__x)); }
+    3450              : 
+    3451              :   constexpr __gnu_cxx::__bfloat16_t
+    3452              :   scalbln(__gnu_cxx::__bfloat16_t __x, long __ex)
+    3453              :   { return __gnu_cxx::__bfloat16_t(__builtin_scalblnf(__x, __ex)); }
+    3454              : 
+    3455              :   constexpr __gnu_cxx::__bfloat16_t
+    3456              :   scalbn(__gnu_cxx::__bfloat16_t __x, int __ex)
+    3457              :   { return __gnu_cxx::__bfloat16_t(__builtin_scalbnf(__x, __ex)); }
+    3458              : 
+    3459              :   constexpr __gnu_cxx::__bfloat16_t
+    3460              :   tgamma(__gnu_cxx::__bfloat16_t __x)
+    3461              :   { return __gnu_cxx::__bfloat16_t(__builtin_tgammaf(__x)); }
+    3462              : 
+    3463              :   constexpr __gnu_cxx::__bfloat16_t
+    3464              :   trunc(__gnu_cxx::__bfloat16_t __x)
+    3465              :   { return __gnu_cxx::__bfloat16_t(__builtin_truncf(__x)); }
+    3466              : #endif
+    3467              : 
+    3468              : #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
+    3469              :   template<typename _Tp, typename _Up>
+    3470              :     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+    3471              :     copysign(_Tp __x, _Up __y)
+    3472              :     {
+    3473              :       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+    3474              :       return copysign(__type(__x), __type(__y));
+    3475              :     }
+    3476              : 
+    3477              :   template<typename _Tp, typename _Up>
+    3478              :     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+    3479              :     fdim(_Tp __x, _Up __y)
+    3480              :     {
+    3481              :       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+    3482              :       return fdim(__type(__x), __type(__y));
+    3483              :     }
+    3484              : 
+    3485              :   template<typename _Tp, typename _Up>
+    3486              :     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+    3487              :     fmax(_Tp __x, _Up __y)
+    3488              :     {
+    3489              :       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+    3490              :       return fmax(__type(__x), __type(__y));
+    3491              :     }
+    3492              : 
+    3493              :   template<typename _Tp, typename _Up>
+    3494              :     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+    3495              :     fmin(_Tp __x, _Up __y)
+    3496              :     {
+    3497              :       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+    3498              :       return fmin(__type(__x), __type(__y));
+    3499              :     }
+    3500              : 
+    3501              :   template<typename _Tp, typename _Up>
+    3502              :     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+    3503              :     hypot(_Tp __x, _Up __y)
+    3504              :     {
+    3505              :       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+    3506              :       return hypot(__type(__x), __type(__y));
+    3507              :     }
+    3508              : 
+    3509              :   template<typename _Tp, typename _Up>
+    3510              :     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+    3511              :     nextafter(_Tp __x, _Up __y)
+    3512              :     {
+    3513              :       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+    3514              :       return nextafter(__type(__x), __type(__y));
+    3515              :     }
+    3516              : 
+    3517              :   template<typename _Tp, typename _Up>
+    3518              :     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+    3519              :     remainder(_Tp __x, _Up __y)
+    3520              :     {
+    3521              :       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+    3522              :       return remainder(__type(__x), __type(__y));
+    3523              :     }
+    3524              : 
+    3525              :   template<typename _Tp, typename _Up>
+    3526              :     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+    3527              :     remquo(_Tp __x, _Up __y, int* __pquo)
+    3528              :     {
+    3529              :       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+    3530              :       return remquo(__type(__x), __type(__y), __pquo);
+    3531              :     }
+    3532              : 
+    3533              :   template<typename _Tp, typename _Up, typename _Vp>
+    3534              :     constexpr typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
+    3535              :     fma(_Tp __x, _Up __y, _Vp __z)
+    3536              :     {
+    3537              :       typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type;
+    3538              :       return fma(__type(__x), __type(__y), __type(__z));
+    3539              :     }
+    3540              : #endif
+    3541              : 
+    3542              : #endif // _GLIBCXX_USE_C99_MATH_TR1
+    3543              : #endif // C++11
+    3544              : 
+    3545              : #if __cplusplus >= 201703L
+    3546              : 
+    3547              :   // [c.math.hypot3], three-dimensional hypotenuse
+    3548              : #define __cpp_lib_hypot 201603L
+    3549              : 
+    3550              :   template<typename _Tp>
+    3551              :     inline _Tp
+    3552              :     __hypot3(_Tp __x, _Tp __y, _Tp __z)
+    3553              :     {
+    3554              :       __x = std::abs(__x);
+    3555              :       __y = std::abs(__y);
+    3556              :       __z = std::abs(__z);
+    3557              :       if (_Tp __a = __x < __y ? __y < __z ? __z : __y : __x < __z ? __z : __x)
+    3558              :         return __a * std::sqrt((__x / __a) * (__x / __a)
+    3559              :                                + (__y / __a) * (__y / __a)
+    3560              :                                + (__z / __a) * (__z / __a));
+    3561              :       else
+    3562              :         return {};
+    3563              :     }
+    3564              : 
+    3565              :   inline float
+    3566              :   hypot(float __x, float __y, float __z)
+    3567              :   { return std::__hypot3<float>(__x, __y, __z); }
+    3568              : 
+    3569              :   inline double
+    3570              :   hypot(double __x, double __y, double __z)
+    3571              :   { return std::__hypot3<double>(__x, __y, __z); }
+    3572              : 
+    3573              :   inline long double
+    3574              :   hypot(long double __x, long double __y, long double __z)
+    3575              :   { return std::__hypot3<long double>(__x, __y, __z); }
+    3576              : 
+    3577              :   template<typename _Tp, typename _Up, typename _Vp>
+    3578              :     __gnu_cxx::__promoted_t<_Tp, _Up, _Vp>
+    3579              :     hypot(_Tp __x, _Up __y, _Vp __z)
+    3580              :     {
+    3581              :       using __type = __gnu_cxx::__promoted_t<_Tp, _Up, _Vp>;
+    3582              :       return std::__hypot3<__type>(__x, __y, __z);
+    3583              :     }
+    3584              : 
+    3585              : #if defined(__STDCPP_FLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
+    3586              :   inline _Float16
+    3587              :   hypot(_Float16 __x, _Float16 __y, _Float16 __z)
+    3588              :   { return std::__hypot3<_Float16>(__x, __y, __z); }
+    3589              : #endif
+    3590              : 
+    3591              : #if defined(__STDCPP_FLOAT32_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
+    3592              :   inline _Float32
+    3593              :   hypot(_Float32 __x, _Float32 __y, _Float32 __z)
+    3594              :   { return std::__hypot3<_Float32>(__x, __y, __z); }
+    3595              : #endif
+    3596              : 
+    3597              : #if defined(__STDCPP_FLOAT64_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64)
+    3598              :   inline _Float64
+    3599              :   hypot(_Float64 __x, _Float64 __y, _Float64 __z)
+    3600              :   { return std::__hypot3<_Float64>(__x, __y, __z); }
+    3601              : #endif
+    3602              : 
+    3603              : #if defined(__STDCPP_FLOAT128_T__) \
+    3604              :     && (defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128) \
+    3605              :         || defined(_GLIBCXX_HAVE_FLOAT128_MATH))
+    3606              :   inline _Float128
+    3607              :   hypot(_Float128 __x, _Float128 __y, _Float128 __z)
+    3608              :   { return std::__hypot3<_Float128>(__x, __y, __z); }
+    3609              : #endif
+    3610              : 
+    3611              : #if defined(__STDCPP_BFLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
+    3612              :   inline __gnu_cxx::__bfloat16_t
+    3613              :   hypot(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y, __gnu_cxx::__bfloat16_t __z)
+    3614              :   { return std::__hypot3<__gnu_cxx::__bfloat16_t>(__x, __y, __z); }
+    3615              : #endif
+    3616              : 
+    3617              : #endif // C++17
+    3618              : 
+    3619              : #if __cplusplus >= 202002L
+    3620              :   // linear interpolation
+    3621              : # define __cpp_lib_interpolate 201902L
+    3622              : 
+    3623              :   template<typename _Fp>
+    3624              :     constexpr _Fp
+    3625              :     __lerp(_Fp __a, _Fp __b, _Fp __t) noexcept
+    3626              :     {
+    3627              :       if ((__a <= 0 && __b >= 0) || (__a >= 0 && __b <= 0))
+    3628              :         return __t * __b + (1 - __t) * __a;
+    3629              : 
+    3630              :       if (__t == 1)
+    3631              :         return __b;                        // exact
+    3632              : 
+    3633              :       // Exact at __t=0, monotonic except near __t=1,
+    3634              :       // bounded, determinate, and consistent:
+    3635              :       const _Fp __x = __a + __t * (__b - __a);
+    3636              :       return (__t > 1) == (__b > __a)
+    3637              :         ? (__b < __x ? __x : __b)
+    3638              :         : (__b > __x ? __x : __b);  // monotonic near __t=1
+    3639              :     }
+    3640              : 
+    3641              :   constexpr float
+    3642              :   lerp(float __a, float __b, float __t) noexcept
+    3643              :   { return std::__lerp(__a, __b, __t); }
+    3644              : 
+    3645              :   constexpr double
+    3646              :   lerp(double __a, double __b, double __t) noexcept
+    3647              :   { return std::__lerp(__a, __b, __t); }
+    3648              : 
+    3649              :   constexpr long double
+    3650              :   lerp(long double __a, long double __b, long double __t) noexcept
+    3651              :   { return std::__lerp(__a, __b, __t); }
+    3652              : 
+    3653              :   template<typename _Tp, typename _Up, typename _Vp>
+    3654              :     constexpr __gnu_cxx::__promoted_t<_Tp, _Up, _Vp>
+    3655              :     lerp(_Tp __x, _Up __y, _Vp __z) noexcept
+    3656              :     {
+    3657              :       using __type = __gnu_cxx::__promoted_t<_Tp, _Up, _Vp>;
+    3658              :       return std::__lerp<__type>(__x, __y, __z);
+    3659              :     }
+    3660              : 
+    3661              : #if defined(__STDCPP_FLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
+    3662              :   inline _Float16
+    3663              :   lerp(_Float16 __x, _Float16 __y, _Float16 __z) noexcept
+    3664              :   { return std::__lerp<_Float16>(__x, __y, __z); }
+    3665              : #endif
+    3666              : 
+    3667              : #if defined(__STDCPP_FLOAT32_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
+    3668              :   inline _Float32
+    3669              :   lerp(_Float32 __x, _Float32 __y, _Float32 __z) noexcept
+    3670              :   { return std::__lerp<_Float32>(__x, __y, __z); }
+    3671              : #endif
+    3672              : 
+    3673              : #if defined(__STDCPP_FLOAT64_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64)
+    3674              :   inline _Float64
+    3675              :   lerp(_Float64 __x, _Float64 __y, _Float64 __z) noexcept
+    3676              :   { return std::__lerp<_Float64>(__x, __y, __z); }
+    3677              : #endif
+    3678              : 
+    3679              : #if defined(__STDCPP_FLOAT128_T__) \
+    3680              :     && (defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128) \
+    3681              :         || defined(_GLIBCXX_HAVE_FLOAT128_MATH))
+    3682              :   inline _Float128
+    3683              :   lerp(_Float128 __x, _Float128 __y, _Float128 __z) noexcept
+    3684              :   { return std::__lerp<_Float128>(__x, __y, __z); }
+    3685              : #endif
+    3686              : 
+    3687              : #if defined(__STDCPP_BFLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
+    3688              :   inline __gnu_cxx::__bfloat16_t
+    3689              :   lerp(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y, __gnu_cxx::__bfloat16_t __z) noexcept
+    3690              :   { return std::__lerp<__gnu_cxx::__bfloat16_t>(__x, __y, __z); }
+    3691              : #endif
+    3692              : 
+    3693              : #endif // C++20
+    3694              : 
+    3695              : _GLIBCXX_END_NAMESPACE_VERSION
+    3696              : } // namespace
+    3697              : 
+    3698              : #if _GLIBCXX_USE_STD_SPEC_FUNCS
+    3699              : #  include <bits/specfun.h>
+    3700              : #endif
+    3701              : 
+    3702              : } // extern "C++"
+    3703              : 
+    3704              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/ext/aligned_buffer.h.func-c.html b/html/usr/include/c++/13/ext/aligned_buffer.h.func-c.html new file mode 100644 index 0000000..9b82de2 --- /dev/null +++ b/html/usr/include/c++/13/ext/aligned_buffer.h.func-c.html @@ -0,0 +1,691 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/ext/aligned_buffer.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/ext - aligned_buffer.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1616
Test Date:2024-04-30 13:17:26Functions:90.0 %8072
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNK9__gnu_cxx16__aligned_bufferISt4pairIKidEE6_M_ptrEv5948206
_ZNK9__gnu_cxx16__aligned_bufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE6_M_ptrEv84218
_ZNK9__gnu_cxx16__aligned_bufferISt4pairIKidEE6_M_ptrEv2880612
_ZNK9__gnu_cxx16__aligned_bufferISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEEE6_M_ptrEv2983376
_ZNK9__gnu_cxx16__aligned_bufferISt4pairIKidEE7_M_addrEv5948206
_ZNK9__gnu_cxx16__aligned_bufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE7_M_addrEv84218
_ZNK9__gnu_cxx16__aligned_bufferISt4pairIKidEE7_M_addrEv2880612
_ZNK9__gnu_cxx16__aligned_bufferISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEEE7_M_addrEv2983376
_ZN9__gnu_cxx16__aligned_bufferISt4pairIKidEE6_M_ptrEv6583498
_ZN9__gnu_cxx16__aligned_bufferINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEE6_M_ptrEv0
_ZN9__gnu_cxx16__aligned_bufferIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEE6_M_ptrEv60
_ZN9__gnu_cxx16__aligned_bufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE6_M_ptrEv122364
_ZN9__gnu_cxx16__aligned_bufferISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEEE6_M_ptrEv3108842
_ZN9__gnu_cxx16__aligned_bufferISt4pairIKidEE6_M_ptrEv3352232
_ZN9__gnu_cxx16__aligned_bufferISt4pairIKidEE7_M_addrEv6583498
_ZN9__gnu_cxx16__aligned_bufferINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEE7_M_addrEv0
_ZN9__gnu_cxx16__aligned_bufferIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEE7_M_addrEv60
_ZN9__gnu_cxx16__aligned_bufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE7_M_addrEv122364
_ZN9__gnu_cxx16__aligned_bufferISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEEE7_M_addrEv3108842
_ZN9__gnu_cxx16__aligned_bufferISt4pairIKidEE7_M_addrEv3352232
_ZN9__gnu_cxx16__aligned_membufIiE6_M_ptrEv345147416
_ZN9__gnu_cxx16__aligned_membufISt4pairIKllEE6_M_ptrEv0
_ZN9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ES1_ISt6vectorIiSaIiEESA_IdSaIdEEEEE6_M_ptrEv288
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE6_M_ptrEv324
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_IiSt6vectorIiSaIiEEEEE6_M_ptrEv352
_ZN9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS1_IiiESaISB_EEEE6_M_ptrEv576
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE6_M_ptrEv848
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_IdSaIdEESaISB_EEEE6_M_ptrEv928
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEE6_M_ptrEv964
_ZN9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EfEE6_M_ptrEv2432
_ZN9__gnu_cxx16__aligned_membufISt4pairIKS1_IiiEdEE6_M_ptrEv5320
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEE6_M_ptrEv9230
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEE6_M_ptrEv61850
_ZN9__gnu_cxx16__aligned_membufISt4pairIKiSt6vectorIiSaIiEEEE6_M_ptrEv201808
_ZN9__gnu_cxx16__aligned_membufIiE6_M_ptrEv439092
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISB_EEEE6_M_ptrEv32213812
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEE6_M_ptrEv312209592
_ZN9__gnu_cxx16__aligned_membufIiE7_M_addrEv345147416
_ZN9__gnu_cxx16__aligned_membufISt4pairIKllEE7_M_addrEv0
_ZN9__gnu_cxx16__aligned_membufISt8functionIFbcEEE7_M_addrEv0
_ZN9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ES1_ISt6vectorIiSaIiEESA_IdSaIdEEEEE7_M_addrEv288
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE7_M_addrEv324
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_IiSt6vectorIiSaIiEEEEE7_M_addrEv352
_ZN9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS1_IiiESaISB_EEEE7_M_addrEv576
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE7_M_addrEv848
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_IdSaIdEESaISB_EEEE7_M_addrEv928
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEE7_M_addrEv964
_ZN9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EfEE7_M_addrEv2432
_ZN9__gnu_cxx16__aligned_membufISt4pairIKS1_IiiEdEE7_M_addrEv5320
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEE7_M_addrEv9230
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEE7_M_addrEv61850
_ZN9__gnu_cxx16__aligned_membufISt4pairIKiSt6vectorIiSaIiEEEE7_M_addrEv201808
_ZN9__gnu_cxx16__aligned_membufIiE7_M_addrEv439092
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISB_EEEE7_M_addrEv32213812
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEE7_M_addrEv312209592
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKllEE6_M_ptrEv672370664
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKllEE6_M_ptrEv0
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE6_M_ptrEv360
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_IiSt6vectorIiSaIiEEEEE6_M_ptrEv408
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ES1_ISt6vectorIiSaIiEESA_IdSaIdEEEEE6_M_ptrEv600
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE6_M_ptrEv952
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS1_IiiESaISB_EEEE6_M_ptrEv1004
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_IdSaIdEESaISB_EEEE6_M_ptrEv1176
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEE6_M_ptrEv1606
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EfEE6_M_ptrEv5534
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKS1_IiiEdEE6_M_ptrEv11800
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEE6_M_ptrEv14308
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKiSt6vectorIiSaIiEEEE6_M_ptrEv208344
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEE6_M_ptrEv363206
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISB_EEEE6_M_ptrEv1815888
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEE6_M_ptrEv669945478
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKllEE7_M_addrEv672370664
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKllEE7_M_addrEv0
_ZNK9__gnu_cxx16__aligned_membufISt8functionIFbcEEE7_M_addrEv0
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE7_M_addrEv360
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_IiSt6vectorIiSaIiEEEEE7_M_addrEv408
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ES1_ISt6vectorIiSaIiEESA_IdSaIdEEEEE7_M_addrEv600
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE7_M_addrEv952
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS1_IiiESaISB_EEEE7_M_addrEv1004
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_IdSaIdEESaISB_EEEE7_M_addrEv1176
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEE7_M_addrEv1606
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EfEE7_M_addrEv5534
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKS1_IiiEdEE7_M_addrEv11800
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEE7_M_addrEv14308
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKiSt6vectorIiSaIiEEEE7_M_addrEv208344
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEE7_M_addrEv363206
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISB_EEEE7_M_addrEv1815888
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEE7_M_addrEv669945478
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/ext/aligned_buffer.h.func.html b/html/usr/include/c++/13/ext/aligned_buffer.h.func.html new file mode 100644 index 0000000..05be330 --- /dev/null +++ b/html/usr/include/c++/13/ext/aligned_buffer.h.func.html @@ -0,0 +1,691 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/ext/aligned_buffer.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/ext - aligned_buffer.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1616
Test Date:2024-04-30 13:17:26Functions:90.0 %8072
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN9__gnu_cxx16__aligned_bufferISt4pairIKidEE6_M_ptrEv6583498
_ZN9__gnu_cxx16__aligned_bufferIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEE6_M_ptrEv60
_ZN9__gnu_cxx16__aligned_bufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE6_M_ptrEv122364
_ZN9__gnu_cxx16__aligned_bufferINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEE6_M_ptrEv0
_ZN9__gnu_cxx16__aligned_bufferISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEEE6_M_ptrEv3108842
_ZN9__gnu_cxx16__aligned_bufferISt4pairIKidEE6_M_ptrEv3352232
_ZN9__gnu_cxx16__aligned_bufferISt4pairIKidEE7_M_addrEv6583498
_ZN9__gnu_cxx16__aligned_bufferIN8nlohmann16json_abi_v3_11_36detail21output_string_adapterIcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEE7_M_addrEv60
_ZN9__gnu_cxx16__aligned_bufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE7_M_addrEv122364
_ZN9__gnu_cxx16__aligned_bufferINSt8__detail4_NFAINSt7__cxx1112regex_traitsIcEEEEE7_M_addrEv0
_ZN9__gnu_cxx16__aligned_bufferISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEEE7_M_addrEv3108842
_ZN9__gnu_cxx16__aligned_bufferISt4pairIKidEE7_M_addrEv3352232
_ZN9__gnu_cxx16__aligned_membufIiE6_M_ptrEv345147416
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEE6_M_ptrEv964
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEE6_M_ptrEv9230
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE6_M_ptrEv848
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_IiSt6vectorIiSaIiEEEEE6_M_ptrEv352
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISB_EEEE6_M_ptrEv32213812
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_IdSaIdEESaISB_EEEE6_M_ptrEv928
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEE6_M_ptrEv61850
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE6_M_ptrEv324
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEE6_M_ptrEv312209592
_ZN9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ES1_ISt6vectorIiSaIiEESA_IdSaIdEEEEE6_M_ptrEv288
_ZN9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EfEE6_M_ptrEv2432
_ZN9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS1_IiiESaISB_EEEE6_M_ptrEv576
_ZN9__gnu_cxx16__aligned_membufISt4pairIKS1_IiiEdEE6_M_ptrEv5320
_ZN9__gnu_cxx16__aligned_membufISt4pairIKiSt6vectorIiSaIiEEEE6_M_ptrEv201808
_ZN9__gnu_cxx16__aligned_membufISt4pairIKllEE6_M_ptrEv0
_ZN9__gnu_cxx16__aligned_membufIiE6_M_ptrEv439092
_ZN9__gnu_cxx16__aligned_membufIiE7_M_addrEv345147416
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEE7_M_addrEv964
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEE7_M_addrEv9230
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE7_M_addrEv848
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_IiSt6vectorIiSaIiEEEEE7_M_addrEv352
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISB_EEEE7_M_addrEv32213812
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_IdSaIdEESaISB_EEEE7_M_addrEv928
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEE7_M_addrEv61850
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE7_M_addrEv324
_ZN9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEE7_M_addrEv312209592
_ZN9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ES1_ISt6vectorIiSaIiEESA_IdSaIdEEEEE7_M_addrEv288
_ZN9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EfEE7_M_addrEv2432
_ZN9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS1_IiiESaISB_EEEE7_M_addrEv576
_ZN9__gnu_cxx16__aligned_membufISt4pairIKS1_IiiEdEE7_M_addrEv5320
_ZN9__gnu_cxx16__aligned_membufISt4pairIKiSt6vectorIiSaIiEEEE7_M_addrEv201808
_ZN9__gnu_cxx16__aligned_membufISt4pairIKllEE7_M_addrEv0
_ZN9__gnu_cxx16__aligned_membufISt8functionIFbcEEE7_M_addrEv0
_ZN9__gnu_cxx16__aligned_membufIiE7_M_addrEv439092
_ZNK9__gnu_cxx16__aligned_bufferISt4pairIKidEE6_M_ptrEv5948206
_ZNK9__gnu_cxx16__aligned_bufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE6_M_ptrEv84218
_ZNK9__gnu_cxx16__aligned_bufferISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEEE6_M_ptrEv2983376
_ZNK9__gnu_cxx16__aligned_bufferISt4pairIKidEE6_M_ptrEv2880612
_ZNK9__gnu_cxx16__aligned_bufferISt4pairIKidEE7_M_addrEv5948206
_ZNK9__gnu_cxx16__aligned_bufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE7_M_addrEv84218
_ZNK9__gnu_cxx16__aligned_bufferISt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS1_IS2_dEEEEE7_M_addrEv2983376
_ZNK9__gnu_cxx16__aligned_bufferISt4pairIKidEE7_M_addrEv2880612
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKllEE6_M_ptrEv672370664
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEE6_M_ptrEv1606
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEE6_M_ptrEv14308
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE6_M_ptrEv952
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_IiSt6vectorIiSaIiEEEEE6_M_ptrEv408
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISB_EEEE6_M_ptrEv1815888
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_IdSaIdEESaISB_EEEE6_M_ptrEv1176
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEE6_M_ptrEv363206
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE6_M_ptrEv360
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEE6_M_ptrEv669945478
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ES1_ISt6vectorIiSaIiEESA_IdSaIdEEEEE6_M_ptrEv600
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EfEE6_M_ptrEv5534
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS1_IiiESaISB_EEEE6_M_ptrEv1004
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKS1_IiiEdEE6_M_ptrEv11800
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKiSt6vectorIiSaIiEEEE6_M_ptrEv208344
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKllEE6_M_ptrEv0
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKllEE7_M_addrEv672370664
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS7_blmdSaNSA_14adl_serializerESD_IhSaIhEEvEEEE7_M_addrEv1606
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEE7_M_addrEv14308
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE7_M_addrEv952
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_IiSt6vectorIiSaIiEEEEE7_M_addrEv408
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteISB_EEEE7_M_addrEv1815888
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS9_IdSaIdEESaISB_EEEE7_M_addrEv1176
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEE7_M_addrEv363206
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE7_M_addrEv360
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEE7_M_addrEv669945478
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ES1_ISt6vectorIiSaIiEESA_IdSaIdEEEEE7_M_addrEv600
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_EfEE7_M_addrEv5534
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKS1_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS1_IiiESaISB_EEEE7_M_addrEv1004
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKS1_IiiEdEE7_M_addrEv11800
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKiSt6vectorIiSaIiEEEE7_M_addrEv208344
_ZNK9__gnu_cxx16__aligned_membufISt4pairIKllEE7_M_addrEv0
_ZNK9__gnu_cxx16__aligned_membufISt8functionIFbcEEE7_M_addrEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/ext/aligned_buffer.h.gcov.html b/html/usr/include/c++/13/ext/aligned_buffer.h.gcov.html new file mode 100644 index 0000000..4574c66 --- /dev/null +++ b/html/usr/include/c++/13/ext/aligned_buffer.h.gcov.html @@ -0,0 +1,204 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/ext/aligned_buffer.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/ext - aligned_buffer.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1616
Test Date:2024-04-30 13:17:26Functions:90.0 %8072
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Aligned memory buffer -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2013-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file ext/aligned_buffer.h
+      26              :  *  This file is a GNU extension to the Standard C++ Library.
+      27              :  */
+      28              : 
+      29              : #ifndef _ALIGNED_BUFFER_H
+      30              : #define _ALIGNED_BUFFER_H 1
+      31              : 
+      32              : #pragma GCC system_header
+      33              : 
+      34              : #if __cplusplus >= 201103L
+      35              : # include <type_traits>
+      36              : #else
+      37              : # include <bits/c++0x_warning.h>
+      38              : #endif
+      39              : 
+      40              : namespace __gnu_cxx
+      41              : {
+      42              :   // A utility type containing a POD object that can hold an object of type
+      43              :   // _Tp initialized via placement new or allocator_traits::construct.
+      44              :   // Intended for use as a data member subobject, use __aligned_buffer for
+      45              :   // complete objects.
+      46              :   template<typename _Tp>
+      47              :     struct __aligned_membuf
+      48              :     {
+      49              :       // Target macro ADJUST_FIELD_ALIGN can produce different alignment for
+      50              :       // types when used as class members. __aligned_membuf is intended
+      51              :       // for use as a class member, so align the buffer as for a class member.
+      52              :       // Since GCC 8 we could just use alignof(_Tp) instead, but older
+      53              :       // versions of non-GNU compilers might still need this trick.
+      54              :       struct _Tp2 { _Tp _M_t; };
+      55              : 
+      56              :       alignas(__alignof__(_Tp2::_M_t)) unsigned char _M_storage[sizeof(_Tp)];
+      57              : 
+      58              :       __aligned_membuf() = default;
+      59              : 
+      60              :       // Can be used to avoid value-initialization zeroing _M_storage.
+      61              :       __aligned_membuf(std::nullptr_t) { }
+      62              : 
+      63              :       void*
+      64    345147416 :       _M_addr() noexcept
+      65    345147416 :       { return static_cast<void*>(&_M_storage); }
+      66              : 
+      67              :       const void*
+      68    672370664 :       _M_addr() const noexcept
+      69    672370664 :       { return static_cast<const void*>(&_M_storage); }
+      70              : 
+      71              :       _Tp*
+      72    345147416 :       _M_ptr() noexcept
+      73    345147416 :       { return static_cast<_Tp*>(_M_addr()); }
+      74              : 
+      75              :       const _Tp*
+      76    672370664 :       _M_ptr() const noexcept
+      77    672370664 :       { return static_cast<const _Tp*>(_M_addr()); }
+      78              :     };
+      79              : 
+      80              : #if _GLIBCXX_INLINE_VERSION
+      81              :   template<typename _Tp>
+      82              :     using __aligned_buffer = __aligned_membuf<_Tp>;
+      83              : #else
+      84              : #pragma GCC diagnostic push
+      85              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+      86              :   // Similar to __aligned_membuf but aligned for complete objects, not members.
+      87              :   // This type is used in <forward_list>, <future>, <bits/shared_ptr_base.h>
+      88              :   // and <bits/hashtable_policy.h>, but ideally they would use __aligned_membuf
+      89              :   // instead, as it has smaller size for some types on some targets.
+      90              :   // This type is still used to avoid an ABI change.
+      91              :   template<typename _Tp>
+      92              :     struct __aligned_buffer
+      93              :     : std::aligned_storage<sizeof(_Tp), __alignof__(_Tp)>
+      94              :     {
+      95              :       typename
+      96              :         std::aligned_storage<sizeof(_Tp), __alignof__(_Tp)>::type _M_storage;
+      97              : 
+      98              :       __aligned_buffer() = default;
+      99              : 
+     100              :       // Can be used to avoid value-initialization
+     101              :       __aligned_buffer(std::nullptr_t) { }
+     102              : 
+     103              :       void*
+     104      6583498 :       _M_addr() noexcept
+     105              :       {
+     106      6583498 :         return static_cast<void*>(&_M_storage);
+     107              :       }
+     108              : 
+     109              :       const void*
+     110      5948206 :       _M_addr() const noexcept
+     111              :       {
+     112      5948206 :         return static_cast<const void*>(&_M_storage);
+     113              :       }
+     114              : 
+     115              :       _Tp*
+     116      6583498 :       _M_ptr() noexcept
+     117      6583498 :       { return static_cast<_Tp*>(_M_addr()); }
+     118              : 
+     119              :       const _Tp*
+     120      5948206 :       _M_ptr() const noexcept
+     121      5948206 :       { return static_cast<const _Tp*>(_M_addr()); }
+     122              :     };
+     123              : #pragma GCC diagnostic pop
+     124              : #endif
+     125              : 
+     126              : } // namespace
+     127              : 
+     128              : #endif /* _ALIGNED_BUFFER_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/ext/alloc_traits.h.func-c.html b/html/usr/include/c++/13/ext/alloc_traits.h.func-c.html new file mode 100644 index 0000000..af1b1c3 --- /dev/null +++ b/html/usr/include/c++/13/ext/alloc_traits.h.func-c.html @@ -0,0 +1,75 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/ext/alloc_traits.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/ext - alloc_traits.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:66.7 %32
Test Date:2024-04-30 13:17:26Functions:-00
+
+ +
+ + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/ext/alloc_traits.h.func.html b/html/usr/include/c++/13/ext/alloc_traits.h.func.html new file mode 100644 index 0000000..f1cd021 --- /dev/null +++ b/html/usr/include/c++/13/ext/alloc_traits.h.func.html @@ -0,0 +1,75 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/ext/alloc_traits.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/ext - alloc_traits.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:66.7 %32
Test Date:2024-04-30 13:17:26Functions:-00
+
+ +
+ + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/ext/alloc_traits.h.gcov.html b/html/usr/include/c++/13/ext/alloc_traits.h.gcov.html new file mode 100644 index 0000000..3db7bce --- /dev/null +++ b/html/usr/include/c++/13/ext/alloc_traits.h.gcov.html @@ -0,0 +1,261 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/ext/alloc_traits.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/ext - alloc_traits.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:66.7 %32
Test Date:2024-04-30 13:17:26Functions:-00
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Allocator traits -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2011-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file ext/alloc_traits.h
+      26              :  *  This file is a GNU extension to the Standard C++ Library.
+      27              :  */
+      28              : 
+      29              : #ifndef _EXT_ALLOC_TRAITS_H
+      30              : #define _EXT_ALLOC_TRAITS_H 1
+      31              : 
+      32              : #pragma GCC system_header
+      33              : 
+      34              : # include <bits/alloc_traits.h>
+      35              : 
+      36              : namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+      37              : {
+      38              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      39              : 
+      40              : /**
+      41              :  * @brief  Uniform interface to C++98 and C++11 allocators.
+      42              :  * @ingroup allocators
+      43              : */
+      44              : template<typename _Alloc, typename = typename _Alloc::value_type>
+      45              :   struct __alloc_traits
+      46              : #if __cplusplus >= 201103L
+      47              :   : std::allocator_traits<_Alloc>
+      48              : #endif
+      49              :   {
+      50              :     typedef _Alloc allocator_type;
+      51              : #if __cplusplus >= 201103L
+      52              :     typedef std::allocator_traits<_Alloc>           _Base_type;
+      53              :     typedef typename _Base_type::value_type         value_type;
+      54              :     typedef typename _Base_type::pointer            pointer;
+      55              :     typedef typename _Base_type::const_pointer      const_pointer;
+      56              :     typedef typename _Base_type::size_type          size_type;
+      57              :     typedef typename _Base_type::difference_type    difference_type;
+      58              :     // C++11 allocators do not define reference or const_reference
+      59              :     typedef value_type&                             reference;
+      60              :     typedef const value_type&                       const_reference;
+      61              :     using _Base_type::allocate;
+      62              :     using _Base_type::deallocate;
+      63              :     using _Base_type::construct;
+      64              :     using _Base_type::destroy;
+      65              :     using _Base_type::max_size;
+      66              : 
+      67              :   private:
+      68              :     template<typename _Ptr>
+      69              :       using __is_custom_pointer
+      70              :         = std::__and_<std::is_same<pointer, _Ptr>,
+      71              :                       std::__not_<std::is_pointer<_Ptr>>>;
+      72              : 
+      73              :   public:
+      74              :     // overload construct for non-standard pointer types
+      75              :     template<typename _Ptr, typename... _Args>
+      76              :       [[__gnu__::__always_inline__]]
+      77              :       static _GLIBCXX14_CONSTEXPR
+      78              :       std::__enable_if_t<__is_custom_pointer<_Ptr>::value>
+      79              :       construct(_Alloc& __a, _Ptr __p, _Args&&... __args)
+      80              :       noexcept(noexcept(_Base_type::construct(__a, std::__to_address(__p),
+      81              :                                               std::forward<_Args>(__args)...)))
+      82              :       {
+      83              :         _Base_type::construct(__a, std::__to_address(__p),
+      84              :                               std::forward<_Args>(__args)...);
+      85              :       }
+      86              : 
+      87              :     // overload destroy for non-standard pointer types
+      88              :     template<typename _Ptr>
+      89              :       [[__gnu__::__always_inline__]]
+      90              :       static _GLIBCXX14_CONSTEXPR
+      91              :       std::__enable_if_t<__is_custom_pointer<_Ptr>::value>
+      92              :       destroy(_Alloc& __a, _Ptr __p)
+      93              :       noexcept(noexcept(_Base_type::destroy(__a, std::__to_address(__p))))
+      94              :       { _Base_type::destroy(__a, std::__to_address(__p)); }
+      95              : 
+      96              :     [[__gnu__::__always_inline__]]
+      97              :     static constexpr _Alloc _S_select_on_copy(const _Alloc& __a)
+      98      1630802 :     { return _Base_type::select_on_container_copy_construction(__a); }
+      99              : 
+     100              :     [[__gnu__::__always_inline__]]
+     101              :     static _GLIBCXX14_CONSTEXPR void _S_on_swap(_Alloc& __a, _Alloc& __b)
+     102              :     { std::__alloc_on_swap(__a, __b); }
+     103              : 
+     104              :     [[__gnu__::__always_inline__]]
+     105              :     static constexpr bool _S_propagate_on_copy_assign()
+     106        10020 :     { return _Base_type::propagate_on_container_copy_assignment::value; }
+     107              : 
+     108              :     [[__gnu__::__always_inline__]]
+     109              :     static constexpr bool _S_propagate_on_move_assign()
+     110              :     { return _Base_type::propagate_on_container_move_assignment::value; }
+     111              : 
+     112              :     [[__gnu__::__always_inline__]]
+     113              :     static constexpr bool _S_propagate_on_swap()
+     114              :     { return _Base_type::propagate_on_container_swap::value; }
+     115              : 
+     116              :     [[__gnu__::__always_inline__]]
+     117              :     static constexpr bool _S_always_equal()
+     118            0 :     { return _Base_type::is_always_equal::value; }
+     119              : 
+     120              :     __attribute__((__always_inline__))
+     121              :     static constexpr bool _S_nothrow_move()
+     122              :     { return _S_propagate_on_move_assign() || _S_always_equal(); }
+     123              : 
+     124              :     template<typename _Tp>
+     125              :       struct rebind
+     126              :       { typedef typename _Base_type::template rebind_alloc<_Tp> other; };
+     127              : #else // ! C++11
+     128              : 
+     129              :     typedef typename _Alloc::pointer                pointer;
+     130              :     typedef typename _Alloc::const_pointer          const_pointer;
+     131              :     typedef typename _Alloc::value_type             value_type;
+     132              :     typedef typename _Alloc::reference              reference;
+     133              :     typedef typename _Alloc::const_reference        const_reference;
+     134              :     typedef typename _Alloc::size_type              size_type;
+     135              :     typedef typename _Alloc::difference_type        difference_type;
+     136              : 
+     137              :     __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
+     138              :     static pointer
+     139              :     allocate(_Alloc& __a, size_type __n)
+     140              :     { return __a.allocate(__n); }
+     141              : 
+     142              :     template<typename _Hint>
+     143              :       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD
+     144              :       static pointer
+     145              :       allocate(_Alloc& __a, size_type __n, _Hint __hint)
+     146              :       { return __a.allocate(__n, __hint); }
+     147              : 
+     148              :     __attribute__((__always_inline__))
+     149              :     static void deallocate(_Alloc& __a, pointer __p, size_type __n)
+     150              :     { __a.deallocate(__p, __n); }
+     151              : 
+     152              :     template<typename _Tp>
+     153              :       __attribute__((__always_inline__))
+     154              :       static void construct(_Alloc& __a, pointer __p, const _Tp& __arg)
+     155              :       { __a.construct(__p, __arg); }
+     156              : 
+     157              :     __attribute__((__always_inline__))
+     158              :     static void destroy(_Alloc& __a, pointer __p)
+     159              :     { __a.destroy(__p); }
+     160              : 
+     161              :     __attribute__((__always_inline__))
+     162              :     static size_type max_size(const _Alloc& __a)
+     163              :     { return __a.max_size(); }
+     164              : 
+     165              :     __attribute__((__always_inline__))
+     166              :     static const _Alloc& _S_select_on_copy(const _Alloc& __a) { return __a; }
+     167              : 
+     168              :     __attribute__((__always_inline__))
+     169              :     static void _S_on_swap(_Alloc& __a, _Alloc& __b)
+     170              :     {
+     171              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     172              :       // 431. Swapping containers with unequal allocators.
+     173              :       std::__alloc_swap<_Alloc>::_S_do_it(__a, __b);
+     174              :     }
+     175              : 
+     176              :     template<typename _Tp>
+     177              :       struct rebind
+     178              :       { typedef typename _Alloc::template rebind<_Tp>::other other; };
+     179              : #endif // C++11
+     180              :   };
+     181              : 
+     182              : _GLIBCXX_END_NAMESPACE_VERSION
+     183              : } // namespace __gnu_cxx
+     184              : 
+     185              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/ext/atomicity.h.func-c.html b/html/usr/include/c++/13/ext/atomicity.h.func-c.html new file mode 100644 index 0000000..baea1c7 --- /dev/null +++ b/html/usr/include/c++/13/ext/atomicity.h.func-c.html @@ -0,0 +1,75 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/ext/atomicity.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/ext - atomicity.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1212
Test Date:2024-04-30 13:17:26Functions:-00
+
+ +
+ + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/ext/atomicity.h.func.html b/html/usr/include/c++/13/ext/atomicity.h.func.html new file mode 100644 index 0000000..c16c3dd --- /dev/null +++ b/html/usr/include/c++/13/ext/atomicity.h.func.html @@ -0,0 +1,75 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/ext/atomicity.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/ext - atomicity.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1212
Test Date:2024-04-30 13:17:26Functions:-00
+
+ +
+ + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/ext/atomicity.h.gcov.html b/html/usr/include/c++/13/ext/atomicity.h.gcov.html new file mode 100644 index 0000000..3fc0310 --- /dev/null +++ b/html/usr/include/c++/13/ext/atomicity.h.gcov.html @@ -0,0 +1,203 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/ext/atomicity.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/ext - atomicity.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1212
Test Date:2024-04-30 13:17:26Functions:-00
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Support for atomic operations -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2004-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file ext/atomicity.h
+      26              :  *  This file is a GNU extension to the Standard C++ Library.
+      27              :  */
+      28              : 
+      29              : #ifndef _GLIBCXX_ATOMICITY_H
+      30              : #define _GLIBCXX_ATOMICITY_H    1
+      31              : 
+      32              : #pragma GCC system_header
+      33              : 
+      34              : #include <bits/c++config.h>
+      35              : #include <bits/gthr.h>
+      36              : #include <bits/atomic_word.h>
+      37              : #if __has_include(<sys/single_threaded.h>)
+      38              : # include <sys/single_threaded.h>
+      39              : #endif
+      40              : 
+      41              : namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+      42              : {
+      43              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      44              : 
+      45              :   __attribute__((__always_inline__))
+      46              :   inline bool
+      47              :   __is_single_threaded() _GLIBCXX_NOTHROW
+      48              :   {
+      49              : #ifndef __GTHREADS
+      50              :     return true;
+      51              : #elif __has_include(<sys/single_threaded.h>)
+      52     74550334 :     return ::__libc_single_threaded;
+      53              : #else
+      54              :     return !__gthread_active_p();
+      55              : #endif
+      56              :   }
+      57              : 
+      58              :   // Functions for portable atomic access.
+      59              :   // To abstract locking primitives across all thread policies, use:
+      60              :   // __exchange_and_add_dispatch
+      61              :   // __atomic_add_dispatch
+      62              : #ifdef _GLIBCXX_ATOMIC_BUILTINS
+      63              :   inline _Atomic_word
+      64              :   __attribute__((__always_inline__))
+      65              :   __exchange_and_add(volatile _Atomic_word* __mem, int __val)
+      66     36925450 :   { return __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); }
+      67              : 
+      68              :   inline void
+      69              :   __attribute__((__always_inline__))
+      70              :   __atomic_add(volatile _Atomic_word* __mem, int __val)
+      71     36925448 :   { __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); }
+      72              : #else
+      73              :   _Atomic_word
+      74              :   __exchange_and_add(volatile _Atomic_word*, int) _GLIBCXX_NOTHROW;
+      75              : 
+      76              :   void
+      77              :   __atomic_add(volatile _Atomic_word*, int) _GLIBCXX_NOTHROW;
+      78              : #endif
+      79              : 
+      80              :   inline _Atomic_word
+      81              :   __attribute__((__always_inline__))
+      82              :   __exchange_and_add_single(_Atomic_word* __mem, int __val)
+      83              :   {
+      84       699398 :     _Atomic_word __result = *__mem;
+      85       699398 :     *__mem += __val;
+      86       699398 :     return __result;
+      87              :   }
+      88              : 
+      89              :   inline void
+      90              :   __attribute__((__always_inline__))
+      91              :   __atomic_add_single(_Atomic_word* __mem, int __val)
+      92           38 :   { *__mem += __val; }
+      93              : 
+      94              :   inline _Atomic_word
+      95              :   __attribute__ ((__always_inline__))
+      96              :   __exchange_and_add_dispatch(_Atomic_word* __mem, int __val)
+      97              :   {
+      98     37624848 :     if (__is_single_threaded())
+      99       699398 :       return __exchange_and_add_single(__mem, __val);
+     100              :     else
+     101     36925450 :       return __exchange_and_add(__mem, __val);
+     102              :   }
+     103              : 
+     104              :   inline void
+     105              :   __attribute__ ((__always_inline__))
+     106              :   __atomic_add_dispatch(_Atomic_word* __mem, int __val)
+     107              :   {
+     108     36925486 :     if (__is_single_threaded())
+     109              :       __atomic_add_single(__mem, __val);
+     110              :     else
+     111              :       __atomic_add(__mem, __val);
+     112     36925486 :   }
+     113              : 
+     114              : _GLIBCXX_END_NAMESPACE_VERSION
+     115              : } // namespace
+     116              : 
+     117              : // Even if the CPU doesn't need a memory barrier, we need to ensure
+     118              : // that the compiler doesn't reorder memory accesses across the
+     119              : // barriers.
+     120              : #ifndef _GLIBCXX_READ_MEM_BARRIER
+     121              : #define _GLIBCXX_READ_MEM_BARRIER __atomic_thread_fence (__ATOMIC_ACQUIRE)
+     122              : #endif
+     123              : #ifndef _GLIBCXX_WRITE_MEM_BARRIER
+     124              : #define _GLIBCXX_WRITE_MEM_BARRIER __atomic_thread_fence (__ATOMIC_RELEASE)
+     125              : #endif
+     126              : 
+     127              : #endif 
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/ext/index-sort-f.html b/html/usr/include/c++/13/ext/index-sort-f.html new file mode 100644 index 0000000..f081ae2 --- /dev/null +++ b/html/usr/include/c++/13/ext/index-sort-f.html @@ -0,0 +1,141 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/ext + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/extCoverageTotalHit
Test:coverage.infoLines:97.3 %3736
Test Date:2024-04-30 13:17:26Functions:90.1 %8173
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
alloc_traits.h +
66.7%66.7%
+
66.7 %32-
atomicity.h +
100.0%
+
100.0 %1212-
aligned_buffer.h +
100.0%
+
100.0 %161690.0 %8072
string_conversions.h +
100.0%
+
100.0 %66100.0 %11
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/ext/index-sort-l.html b/html/usr/include/c++/13/ext/index-sort-l.html new file mode 100644 index 0000000..2152356 --- /dev/null +++ b/html/usr/include/c++/13/ext/index-sort-l.html @@ -0,0 +1,141 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/ext + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/extCoverageTotalHit
Test:coverage.infoLines:97.3 %3736
Test Date:2024-04-30 13:17:26Functions:90.1 %8173
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
alloc_traits.h +
66.7%66.7%
+
66.7 %32-
string_conversions.h +
100.0%
+
100.0 %66100.0 %11
atomicity.h +
100.0%
+
100.0 %1212-
aligned_buffer.h +
100.0%
+
100.0 %161690.0 %8072
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/ext/index.html b/html/usr/include/c++/13/ext/index.html new file mode 100644 index 0000000..ad1ae43 --- /dev/null +++ b/html/usr/include/c++/13/ext/index.html @@ -0,0 +1,141 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/ext + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/extCoverageTotalHit
Test:coverage.infoLines:97.3 %3736
Test Date:2024-04-30 13:17:26Functions:90.1 %8173
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
aligned_buffer.h +
100.0%
+
100.0 %161690.0 %8072
alloc_traits.h +
66.7%66.7%
+
66.7 %32-
atomicity.h +
100.0%
+
100.0 %1212-
string_conversions.h +
100.0%
+
100.0 %66100.0 %11
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/ext/string_conversions.h.func-c.html b/html/usr/include/c++/13/ext/string_conversions.h.func-c.html new file mode 100644 index 0000000..b0c6e83 --- /dev/null +++ b/html/usr/include/c++/13/ext/string_conversions.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/ext/string_conversions.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/ext - string_conversions.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %66
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN9__gnu_cxx12__to_xstringINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcEET_PFiPT0_mPKS8_P13__va_list_tagEmSB_z2404
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/ext/string_conversions.h.func.html b/html/usr/include/c++/13/ext/string_conversions.h.func.html new file mode 100644 index 0000000..cc0ede2 --- /dev/null +++ b/html/usr/include/c++/13/ext/string_conversions.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/ext/string_conversions.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/ext - string_conversions.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %66
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZN9__gnu_cxx12__to_xstringINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcEET_PFiPT0_mPKS8_P13__va_list_tagEmSB_z2404
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/ext/string_conversions.h.gcov.html b/html/usr/include/c++/13/ext/string_conversions.h.gcov.html new file mode 100644 index 0000000..28a6064 --- /dev/null +++ b/html/usr/include/c++/13/ext/string_conversions.h.gcov.html @@ -0,0 +1,201 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/ext/string_conversions.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/ext - string_conversions.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %66
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // String Conversions -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2008-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file ext/string_conversions.h
+      26              :  *  This file is a GNU extension to the Standard C++ Library.
+      27              :  */
+      28              : 
+      29              : #ifndef _STRING_CONVERSIONS_H
+      30              : #define _STRING_CONVERSIONS_H 1
+      31              : 
+      32              : #pragma GCC system_header
+      33              : 
+      34              : #include <bits/requires_hosted.h> // GNU extensions are currently omitted
+      35              : 
+      36              : #if __cplusplus < 201103L
+      37              : # include <bits/c++0x_warning.h>
+      38              : #else
+      39              : 
+      40              : #include <bits/c++config.h>
+      41              : #include <ext/numeric_traits.h>
+      42              : #include <bits/functexcept.h>
+      43              : #include <cstdlib>
+      44              : #include <cwchar>
+      45              : #include <cstdio>
+      46              : #include <cerrno>
+      47              : 
+      48              : namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+      49              : {
+      50              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      51              : 
+      52              :   // Helper for all the sto* functions.
+      53              :   template<typename _TRet, typename _Ret = _TRet, typename _CharT,
+      54              :            typename... _Base>
+      55              :     _Ret
+      56              :     __stoa(_TRet (*__convf) (const _CharT*, _CharT**, _Base...),
+      57              :            const char* __name, const _CharT* __str, std::size_t* __idx,
+      58              :            _Base... __base)
+      59              :     {
+      60              :       _Ret __ret;
+      61              : 
+      62              :       _CharT* __endptr;
+      63              : 
+      64              :       struct _Save_errno {
+      65              :         _Save_errno() : _M_errno(errno) { errno = 0; }
+      66              :         ~_Save_errno() { if (errno == 0) errno = _M_errno; }
+      67              :         int _M_errno;
+      68              :       } const __save_errno;
+      69              : 
+      70              :       struct _Range_chk {
+      71              :           static bool
+      72              :           _S_chk(_TRet, std::false_type) { return false; }
+      73              : 
+      74              :           static bool
+      75              :           _S_chk(_TRet __val, std::true_type) // only called when _Ret is int
+      76              :           {
+      77              :             return __val < _TRet(__numeric_traits<int>::__min)
+      78              :               || __val > _TRet(__numeric_traits<int>::__max);
+      79              :           }
+      80              :       };
+      81              : 
+      82              :       const _TRet __tmp = __convf(__str, &__endptr, __base...);
+      83              : 
+      84              :       if (__endptr == __str)
+      85              :         std::__throw_invalid_argument(__name);
+      86              :       else if (errno == ERANGE
+      87              :           || _Range_chk::_S_chk(__tmp, std::is_same<_Ret, int>{}))
+      88              :         std::__throw_out_of_range(__name);
+      89              :       else
+      90              :         __ret = __tmp;
+      91              : 
+      92              :       if (__idx)
+      93              :         *__idx = __endptr - __str;
+      94              : 
+      95              :       return __ret;
+      96              :     }
+      97              : 
+      98              :   // Helper for the to_string / to_wstring functions.
+      99              :   template<typename _String, typename _CharT = typename _String::value_type>
+     100              :     _String
+     101         2404 :     __to_xstring(int (*__convf) (_CharT*, std::size_t, const _CharT*,
+     102              :                                  __builtin_va_list), std::size_t __n,
+     103              :                  const _CharT* __fmt, ...)
+     104              :     {
+     105              :       // XXX Eventually the result should be constructed in-place in
+     106              :       // the __cxx11 string, likely with the help of internal hooks.
+     107         2404 :       _CharT* __s = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+     108              :                                                           * __n));
+     109              : 
+     110              :       __builtin_va_list __args;
+     111         2404 :       __builtin_va_start(__args, __fmt);
+     112              : 
+     113         2404 :       const int __len = __convf(__s, __n, __fmt, __args);
+     114              : 
+     115         2404 :       __builtin_va_end(__args);
+     116              : 
+     117         4808 :       return _String(__s, __s + __len);
+     118              :     }
+     119              : 
+     120              : _GLIBCXX_END_NAMESPACE_VERSION
+     121              : } // namespace
+     122              : 
+     123              : #endif // C++11
+     124              : 
+     125              : #endif // _STRING_CONVERSIONS_H
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/index-sort-f.html b/html/usr/include/c++/13/index-sort-f.html new file mode 100644 index 0000000..b1edd73 --- /dev/null +++ b/html/usr/include/c++/13/index-sort-f.html @@ -0,0 +1,261 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13 + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13CoverageTotalHit
Test:coverage.infoLines:73.0 %200146
Test Date:2024-04-30 13:17:26Functions:63.5 %715454
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
type_traits +
0.0%
+
0.0 %10.0 %1
bitset +
0.0%
+
0.0 %340.0 %14
new +
66.7%66.7%
+
66.7 %3250.0 %21
typeinfo +
25.0%25.0%
+
25.0 %8250.0 %21
tuple +
92.0%92.0%
+
92.0 %888161.0 %607370
cmath +
66.7%66.7%
+
66.7 %6466.7 %32
array +
100.0%
+
100.0 %8866.7 %64
limits +
80.0%80.0%
+
80.0 %5480.0 %54
initializer_list +
100.0%
+
100.0 %9995.4 %6562
atomic +
100.0%
+
100.0 %22100.0 %22
bit +
91.7%91.7%
+
91.7 %1211100.0 %22
mutex +
87.5%87.5%
+
87.5 %87100.0 %22
numeric +
100.0%
+
100.0 %1212100.0 %22
string_view +
100.0%
+
100.0 %44100.0 %22
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/index-sort-l.html b/html/usr/include/c++/13/index-sort-l.html new file mode 100644 index 0000000..5e5698f --- /dev/null +++ b/html/usr/include/c++/13/index-sort-l.html @@ -0,0 +1,261 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13 + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13CoverageTotalHit
Test:coverage.infoLines:73.0 %200146
Test Date:2024-04-30 13:17:26Functions:63.5 %715454
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
type_traits +
0.0%
+
0.0 %10.0 %1
bitset +
0.0%
+
0.0 %340.0 %14
typeinfo +
25.0%25.0%
+
25.0 %8250.0 %21
new +
66.7%66.7%
+
66.7 %3250.0 %21
cmath +
66.7%66.7%
+
66.7 %6466.7 %32
limits +
80.0%80.0%
+
80.0 %5480.0 %54
mutex +
87.5%87.5%
+
87.5 %87100.0 %22
bit +
91.7%91.7%
+
91.7 %1211100.0 %22
tuple +
92.0%92.0%
+
92.0 %888161.0 %607370
atomic +
100.0%
+
100.0 %22100.0 %22
string_view +
100.0%
+
100.0 %44100.0 %22
array +
100.0%
+
100.0 %8866.7 %64
initializer_list +
100.0%
+
100.0 %9995.4 %6562
numeric +
100.0%
+
100.0 %1212100.0 %22
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/index.html b/html/usr/include/c++/13/index.html new file mode 100644 index 0000000..e8adac9 --- /dev/null +++ b/html/usr/include/c++/13/index.html @@ -0,0 +1,261 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13 + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13CoverageTotalHit
Test:coverage.infoLines:73.0 %200146
Test Date:2024-04-30 13:17:26Functions:63.5 %715454
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
array +
100.0%
+
100.0 %8866.7 %64
atomic +
100.0%
+
100.0 %22100.0 %22
bit +
91.7%91.7%
+
91.7 %1211100.0 %22
bitset +
0.0%
+
0.0 %340.0 %14
cmath +
66.7%66.7%
+
66.7 %6466.7 %32
initializer_list +
100.0%
+
100.0 %9995.4 %6562
limits +
80.0%80.0%
+
80.0 %5480.0 %54
mutex +
87.5%87.5%
+
87.5 %87100.0 %22
new +
66.7%66.7%
+
66.7 %3250.0 %21
numeric +
100.0%
+
100.0 %1212100.0 %22
string_view +
100.0%
+
100.0 %44100.0 %22
tuple +
92.0%92.0%
+
92.0 %888161.0 %607370
type_traits +
0.0%
+
0.0 %10.0 %1
typeinfo +
25.0%25.0%
+
25.0 %8250.0 %21
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/initializer_list.func-c.html b/html/usr/include/c++/13/initializer_list.func-c.html new file mode 100644 index 0000000..87d2c66 --- /dev/null +++ b/html/usr/include/c++/13/initializer_list.func-c.html @@ -0,0 +1,565 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/initializer_list - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - initializer_list (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %99
Test Date:2024-04-30 13:17:26Functions:95.4 %6562
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt3endIlEPKT_St16initializer_listIS0_E3934
_ZSt3endIN2at6TensorEEPKT_St16initializer_listIS2_E378
_ZSt3endIlEPKT_St16initializer_listIS0_E3556
_ZSt5beginIlEPKT_St16initializer_listIS0_E7868
_ZSt5beginIN2at6TensorEEPKT_St16initializer_listIS2_E756
_ZSt5beginIlEPKT_St16initializer_listIS0_E7112
_ZNSt16initializer_listIN5torch6detail19TensorDataContainerEEC2Ev401318
_ZNKSt16initializer_listIdE3endEv407120
_ZNKSt16initializer_listIN5torch6detail19TensorDataContainerEE3endEv0
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEE3endEv8
_ZNKSt16initializer_listISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEE3endEv8
_ZNKSt16initializer_listISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EE3endEv8
_ZNKSt16initializer_listISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE3endEv8
_ZNKSt16initializer_listISt6vectorIiSaIiEEE3endEv8
_ZNKSt16initializer_listIPKcE3endEv18
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEE3endEv32
_ZNKSt16initializer_listISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEE3endEv32
_ZNKSt16initializer_listISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEE3endEv32
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE3endEv34
_ZNKSt16initializer_listISt6vectorIdSaIdEEE3endEv36
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE3endEv40
_ZNKSt16initializer_listIiE3endEv262
_ZNKSt16initializer_listISt4pairIiiEE3endEv278
_ZNKSt16initializer_listIN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEE3endEv328
_ZNKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3endEv330
_ZNKSt16initializer_listIN2at6TensorEE3endEv378
_ZNKSt16initializer_listIdE3endEv406
_ZNKSt16initializer_listIlE3endEv404874
_ZNKSt16initializer_listIdE4sizeEv411054
_ZNKSt16initializer_listIN5torch6detail19TensorDataContainerEE4sizeEv0
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEE4sizeEv8
_ZNKSt16initializer_listISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEE4sizeEv8
_ZNKSt16initializer_listISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EE4sizeEv8
_ZNKSt16initializer_listISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE4sizeEv8
_ZNKSt16initializer_listISt6vectorIiSaIiEEE4sizeEv8
_ZNKSt16initializer_listIPKcE4sizeEv18
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEE4sizeEv32
_ZNKSt16initializer_listISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEE4sizeEv32
_ZNKSt16initializer_listISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEE4sizeEv32
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE4sizeEv34
_ZNKSt16initializer_listISt6vectorIdSaIdEEE4sizeEv36
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE4sizeEv40
_ZNKSt16initializer_listIiE4sizeEv262
_ZNKSt16initializer_listISt4pairIiiEE4sizeEv278
_ZNKSt16initializer_listIN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEE4sizeEv328
_ZNKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE4sizeEv330
_ZNKSt16initializer_listIdE4sizeEv406
_ZNKSt16initializer_listIN2at6TensorEE4sizeEv756
_ZNKSt16initializer_listIlE4sizeEv408430
_ZNKSt16initializer_listIdE5beginEv818174
_ZNKSt16initializer_listIN5torch6detail19TensorDataContainerEE5beginEv0
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEE5beginEv16
_ZNKSt16initializer_listISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEE5beginEv16
_ZNKSt16initializer_listISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EE5beginEv16
_ZNKSt16initializer_listISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE5beginEv16
_ZNKSt16initializer_listISt6vectorIiSaIiEEE5beginEv16
_ZNKSt16initializer_listIPKcE5beginEv36
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEE5beginEv64
_ZNKSt16initializer_listISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEE5beginEv64
_ZNKSt16initializer_listISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEE5beginEv64
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE5beginEv68
_ZNKSt16initializer_listISt6vectorIdSaIdEEE5beginEv72
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE5beginEv80
_ZNKSt16initializer_listIiE5beginEv524
_ZNKSt16initializer_listISt4pairIiiEE5beginEv556
_ZNKSt16initializer_listIN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEE5beginEv656
_ZNKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE5beginEv660
_ZNKSt16initializer_listIdE5beginEv812
_ZNKSt16initializer_listIN2at6TensorEE5beginEv1134
_ZNKSt16initializer_listIlE5beginEv813304
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/initializer_list.func.html b/html/usr/include/c++/13/initializer_list.func.html new file mode 100644 index 0000000..d17761b --- /dev/null +++ b/html/usr/include/c++/13/initializer_list.func.html @@ -0,0 +1,565 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/initializer_list - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - initializer_list (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %99
Test Date:2024-04-30 13:17:26Functions:95.4 %6562
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt16initializer_listIdE3endEv407120
_ZNKSt16initializer_listIN2at6TensorEE3endEv378
_ZNKSt16initializer_listIN5torch6detail19TensorDataContainerEE3endEv0
_ZNKSt16initializer_listIN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEE3endEv328
_ZNKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE3endEv330
_ZNKSt16initializer_listIPKcE3endEv18
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE3endEv40
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEE3endEv32
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEE3endEv8
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE3endEv34
_ZNKSt16initializer_listISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEE3endEv8
_ZNKSt16initializer_listISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEE3endEv32
_ZNKSt16initializer_listISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEE3endEv32
_ZNKSt16initializer_listISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EE3endEv8
_ZNKSt16initializer_listISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE3endEv8
_ZNKSt16initializer_listISt4pairIiiEE3endEv278
_ZNKSt16initializer_listISt6vectorIdSaIdEEE3endEv36
_ZNKSt16initializer_listISt6vectorIiSaIiEEE3endEv8
_ZNKSt16initializer_listIdE3endEv406
_ZNKSt16initializer_listIiE3endEv262
_ZNKSt16initializer_listIlE3endEv404874
_ZNKSt16initializer_listIdE4sizeEv411054
_ZNKSt16initializer_listIN2at6TensorEE4sizeEv756
_ZNKSt16initializer_listIN5torch6detail19TensorDataContainerEE4sizeEv0
_ZNKSt16initializer_listIN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEE4sizeEv328
_ZNKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE4sizeEv330
_ZNKSt16initializer_listIPKcE4sizeEv18
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE4sizeEv40
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEE4sizeEv32
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEE4sizeEv8
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE4sizeEv34
_ZNKSt16initializer_listISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEE4sizeEv8
_ZNKSt16initializer_listISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEE4sizeEv32
_ZNKSt16initializer_listISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEE4sizeEv32
_ZNKSt16initializer_listISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EE4sizeEv8
_ZNKSt16initializer_listISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE4sizeEv8
_ZNKSt16initializer_listISt4pairIiiEE4sizeEv278
_ZNKSt16initializer_listISt6vectorIdSaIdEEE4sizeEv36
_ZNKSt16initializer_listISt6vectorIiSaIiEEE4sizeEv8
_ZNKSt16initializer_listIdE4sizeEv406
_ZNKSt16initializer_listIiE4sizeEv262
_ZNKSt16initializer_listIlE4sizeEv408430
_ZNKSt16initializer_listIdE5beginEv818174
_ZNKSt16initializer_listIN2at6TensorEE5beginEv1134
_ZNKSt16initializer_listIN5torch6detail19TensorDataContainerEE5beginEv0
_ZNKSt16initializer_listIN8nlohmann16json_abi_v3_11_36detail8json_refINS1_10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES6_IhSaIhEEvEEEEE5beginEv656
_ZNKSt16initializer_listINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE5beginEv660
_ZNKSt16initializer_listIPKcE5beginEv36
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEE5beginEv80
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES0_IiSt6vectorIiSaIiEEEEE5beginEv64
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS8_IdSaIdEESaISA_EEEE5beginEv16
_ZNKSt16initializer_listISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE5beginEv68
_ZNKSt16initializer_listISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ES0_ISt6vectorIiSaIiEES9_IdSaIdEEEEE5beginEv16
_ZNKSt16initializer_listISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EfEE5beginEv64
_ZNKSt16initializer_listISt4pairIKS0_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiESt6vectorIS0_IiiESaISA_EEEE5beginEv64
_ZNKSt16initializer_listISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EE5beginEv16
_ZNKSt16initializer_listISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEE5beginEv16
_ZNKSt16initializer_listISt4pairIiiEE5beginEv556
_ZNKSt16initializer_listISt6vectorIdSaIdEEE5beginEv72
_ZNKSt16initializer_listISt6vectorIiSaIiEEE5beginEv16
_ZNKSt16initializer_listIdE5beginEv812
_ZNKSt16initializer_listIiE5beginEv524
_ZNKSt16initializer_listIlE5beginEv813304
_ZNSt16initializer_listIN5torch6detail19TensorDataContainerEEC2Ev401318
_ZSt3endIlEPKT_St16initializer_listIS0_E3934
_ZSt3endIN2at6TensorEEPKT_St16initializer_listIS2_E378
_ZSt3endIlEPKT_St16initializer_listIS0_E3556
_ZSt5beginIlEPKT_St16initializer_listIS0_E7868
_ZSt5beginIN2at6TensorEEPKT_St16initializer_listIS2_E756
_ZSt5beginIlEPKT_St16initializer_listIS0_E7112
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/initializer_list.gcov.html b/html/usr/include/c++/13/initializer_list.gcov.html new file mode 100644 index 0000000..39e514f --- /dev/null +++ b/html/usr/include/c++/13/initializer_list.gcov.html @@ -0,0 +1,181 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/initializer_list + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - initializer_list (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %99
Test Date:2024-04-30 13:17:26Functions:95.4 %6562
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // std::initializer_list support -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2008-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of GCC.
+       6              : //
+       7              : // GCC is free software; you can redistribute it and/or modify
+       8              : // it under the terms of the GNU General Public License as published by
+       9              : // the Free Software Foundation; either version 3, or (at your option)
+      10              : // any later version.
+      11              : //
+      12              : // GCC is distributed in the hope that it will be useful,
+      13              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      14              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      15              : // GNU General Public License for more details.
+      16              : //
+      17              : // Under Section 7 of GPL version 3, you are granted additional
+      18              : // permissions described in the GCC Runtime Library Exception, version
+      19              : // 3.1, as published by the Free Software Foundation.
+      20              : 
+      21              : // You should have received a copy of the GNU General Public License and
+      22              : // a copy of the GCC Runtime Library Exception along with this program;
+      23              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      24              : // <http://www.gnu.org/licenses/>.
+      25              : 
+      26              : /** @file initializer_list
+      27              :  *  This is a Standard C++ Library header.
+      28              :  */
+      29              : 
+      30              : #ifndef _INITIALIZER_LIST
+      31              : #define _INITIALIZER_LIST
+      32              : 
+      33              : #pragma GCC system_header
+      34              : 
+      35              : #if __cplusplus < 201103L
+      36              : # include <bits/c++0x_warning.h>
+      37              : #else // C++0x
+      38              : 
+      39              : #include <bits/c++config.h>
+      40              : 
+      41              : namespace std _GLIBCXX_VISIBILITY(default)
+      42              : {
+      43              :   /// initializer_list
+      44              :   template<class _E>
+      45              :     class initializer_list
+      46              :     {
+      47              :     public:
+      48              :       typedef _E                value_type;
+      49              :       typedef const _E&     reference;
+      50              :       typedef const _E&     const_reference;
+      51              :       typedef size_t            size_type;
+      52              :       typedef const _E*         iterator;
+      53              :       typedef const _E*         const_iterator;
+      54              : 
+      55              :     private:
+      56              :       iterator                  _M_array;
+      57              :       size_type                 _M_len;
+      58              : 
+      59              :       // The compiler can call a private constructor.
+      60              :       constexpr initializer_list(const_iterator __a, size_type __l)
+      61              :       : _M_array(__a), _M_len(__l) { }
+      62              : 
+      63              :     public:
+      64       401318 :       constexpr initializer_list() noexcept
+      65       401318 :       : _M_array(0), _M_len(0) { }
+      66              : 
+      67              :       // Number of elements.
+      68              :       constexpr size_type
+      69       411054 :       size() const noexcept { return _M_len; }
+      70              : 
+      71              :       // First element.
+      72              :       constexpr const_iterator
+      73       818174 :       begin() const noexcept { return _M_array; }
+      74              : 
+      75              :       // One past the last element.
+      76              :       constexpr const_iterator
+      77       407120 :       end() const noexcept { return begin() + size(); }
+      78              :     };
+      79              : 
+      80              :   /**
+      81              :    *  @brief  Return an iterator pointing to the first element of
+      82              :    *          the initializer_list.
+      83              :    *  @param  __ils  Initializer list.
+      84              :    *  @relates initializer_list
+      85              :    */
+      86              :   template<class _Tp>
+      87              :     constexpr const _Tp*
+      88         7868 :     begin(initializer_list<_Tp> __ils) noexcept
+      89         7868 :     { return __ils.begin(); }
+      90              : 
+      91              :   /**
+      92              :    *  @brief  Return an iterator pointing to one past the last element
+      93              :    *          of the initializer_list.
+      94              :    *  @param  __ils  Initializer list.
+      95              :    *  @relates initializer_list
+      96              :    */
+      97              :   template<class _Tp>
+      98              :     constexpr const _Tp*
+      99         3934 :     end(initializer_list<_Tp> __ils) noexcept
+     100         3934 :     { return __ils.end(); }
+     101              : }
+     102              : 
+     103              : #endif // C++11
+     104              : 
+     105              : #endif // _INITIALIZER_LIST
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/limits.func-c.html b/html/usr/include/c++/13/limits.func-c.html new file mode 100644 index 0000000..1e7250e --- /dev/null +++ b/html/usr/include/c++/13/limits.func-c.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/limits - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - limits (source / functions)CoverageTotalHit
Test:coverage.infoLines:80.0 %54
Test Date:2024-04-30 13:17:26Functions:80.0 %54
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt14numeric_limitsIlE3maxEv0
_ZNSt14numeric_limitsIdE6lowestEv70
_ZNSt14numeric_limitsIlE6lowestEv7072
_ZNSt14numeric_limitsIlE3minEv7080
_ZNSt14numeric_limitsImE3maxEv26788
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/limits.func.html b/html/usr/include/c++/13/limits.func.html new file mode 100644 index 0000000..377bd00 --- /dev/null +++ b/html/usr/include/c++/13/limits.func.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/limits - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - limits (source / functions)CoverageTotalHit
Test:coverage.infoLines:80.0 %54
Test Date:2024-04-30 13:17:26Functions:80.0 %54
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt14numeric_limitsIdE6lowestEv70
_ZNSt14numeric_limitsIlE3maxEv0
_ZNSt14numeric_limitsIlE3minEv7080
_ZNSt14numeric_limitsIlE6lowestEv7072
_ZNSt14numeric_limitsImE3maxEv26788
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/limits.gcov.html b/html/usr/include/c++/13/limits.gcov.html new file mode 100644 index 0000000..68c5927 --- /dev/null +++ b/html/usr/include/c++/13/limits.gcov.html @@ -0,0 +1,2162 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/limits + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - limits (source / functions)CoverageTotalHit
Test:coverage.infoLines:80.0 %54
Test Date:2024-04-30 13:17:26Functions:80.0 %54
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // The template and inlines for the numeric_limits classes. -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 1999-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file include/limits
+      26              :  *  This is a Standard C++ Library header.
+      27              :  */
+      28              : 
+      29              : // Note: this is not a conforming implementation.
+      30              : // Written by Gabriel Dos Reis <gdr@codesourcery.com>
+      31              : 
+      32              : //
+      33              : // ISO 14882:1998
+      34              : // 18.2.1
+      35              : //
+      36              : 
+      37              : #ifndef _GLIBCXX_NUMERIC_LIMITS
+      38              : #define _GLIBCXX_NUMERIC_LIMITS 1
+      39              : 
+      40              : #pragma GCC system_header
+      41              : 
+      42              : #include <bits/c++config.h>
+      43              : 
+      44              : //
+      45              : // The numeric_limits<> traits document implementation-defined aspects
+      46              : // of fundamental arithmetic data types (integers and floating points).
+      47              : // From Standard C++ point of view, there are 14 such types:
+      48              : //   * integers
+      49              : //         bool                                                 (1)
+      50              : //         char, signed char, unsigned char, wchar_t            (4)
+      51              : //         short, unsigned short                                (2)
+      52              : //         int, unsigned                                        (2)
+      53              : //         long, unsigned long                                  (2)
+      54              : //
+      55              : //   * floating points
+      56              : //         float                                                (1)
+      57              : //         double                                               (1)
+      58              : //         long double                                          (1)
+      59              : //
+      60              : // GNU C++ understands (where supported by the host C-library)
+      61              : //   * integer
+      62              : //         long long, unsigned long long                        (2)
+      63              : //
+      64              : // which brings us to 16 fundamental arithmetic data types in GNU C++.
+      65              : //
+      66              : //
+      67              : // Since a numeric_limits<> is a bit tricky to get right, we rely on
+      68              : // an interface composed of macros which should be defined in config/os
+      69              : // or config/cpu when they differ from the generic (read arbitrary)
+      70              : // definitions given here.
+      71              : //
+      72              : 
+      73              : // These values can be overridden in the target configuration file.
+      74              : // The default values are appropriate for many 32-bit targets.
+      75              : 
+      76              : // GCC only intrinsically supports modulo integral types.  The only remaining
+      77              : // integral exceptional values is division by zero.  Only targets that do not
+      78              : // signal division by zero in some "hard to ignore" way should use false.
+      79              : #ifndef __glibcxx_integral_traps
+      80              : # define __glibcxx_integral_traps true
+      81              : #endif
+      82              : 
+      83              : // float
+      84              : //
+      85              : 
+      86              : // Default values.  Should be overridden in configuration files if necessary.
+      87              : 
+      88              : #ifndef __glibcxx_float_has_denorm_loss
+      89              : #  define __glibcxx_float_has_denorm_loss false
+      90              : #endif
+      91              : #ifndef __glibcxx_float_traps
+      92              : #  define __glibcxx_float_traps false
+      93              : #endif
+      94              : #ifndef __glibcxx_float_tinyness_before
+      95              : #  define __glibcxx_float_tinyness_before false
+      96              : #endif
+      97              : 
+      98              : // double
+      99              : 
+     100              : // Default values.  Should be overridden in configuration files if necessary.
+     101              : 
+     102              : #ifndef __glibcxx_double_has_denorm_loss
+     103              : #  define __glibcxx_double_has_denorm_loss false
+     104              : #endif
+     105              : #ifndef __glibcxx_double_traps
+     106              : #  define __glibcxx_double_traps false
+     107              : #endif
+     108              : #ifndef __glibcxx_double_tinyness_before
+     109              : #  define __glibcxx_double_tinyness_before false
+     110              : #endif
+     111              : 
+     112              : // long double
+     113              : 
+     114              : // Default values.  Should be overridden in configuration files if necessary.
+     115              : 
+     116              : #ifndef __glibcxx_long_double_has_denorm_loss
+     117              : #  define __glibcxx_long_double_has_denorm_loss false
+     118              : #endif
+     119              : #ifndef __glibcxx_long_double_traps
+     120              : #  define __glibcxx_long_double_traps false
+     121              : #endif
+     122              : #ifndef __glibcxx_long_double_tinyness_before
+     123              : #  define __glibcxx_long_double_tinyness_before false
+     124              : #endif
+     125              : 
+     126              : // You should not need to define any macros below this point.
+     127              : 
+     128              : #define __glibcxx_signed_b(T,B) ((T)(-1) < 0)
+     129              : 
+     130              : #define __glibcxx_min_b(T,B)                                    \
+     131              :   (__glibcxx_signed_b (T,B) ? -__glibcxx_max_b (T,B) - 1 : (T)0)
+     132              : 
+     133              : #define __glibcxx_max_b(T,B)                                            \
+     134              :   (__glibcxx_signed_b (T,B) ?                                           \
+     135              :    (((((T)1 << (__glibcxx_digits_b (T,B) - 1)) - 1) << 1) + 1) : ~(T)0)
+     136              : 
+     137              : #define __glibcxx_digits_b(T,B)                         \
+     138              :   (B - __glibcxx_signed_b (T,B))
+     139              : 
+     140              : // The fraction 643/2136 approximates log10(2) to 7 significant digits.
+     141              : #define __glibcxx_digits10_b(T,B)               \
+     142              :   (__glibcxx_digits_b (T,B) * 643L / 2136)
+     143              : 
+     144              : #define __glibcxx_signed(T) \
+     145              :   __glibcxx_signed_b (T, sizeof(T) * __CHAR_BIT__)
+     146              : #define __glibcxx_min(T) \
+     147              :   __glibcxx_min_b (T, sizeof(T) * __CHAR_BIT__)
+     148              : #define __glibcxx_max(T) \
+     149              :   __glibcxx_max_b (T, sizeof(T) * __CHAR_BIT__)
+     150              : #define __glibcxx_digits(T) \
+     151              :   __glibcxx_digits_b (T, sizeof(T) * __CHAR_BIT__)
+     152              : #define __glibcxx_digits10(T) \
+     153              :   __glibcxx_digits10_b (T, sizeof(T) * __CHAR_BIT__)
+     154              : 
+     155              : #define __glibcxx_max_digits10(T) \
+     156              :   (2 + (T) * 643L / 2136)
+     157              : 
+     158              : namespace std _GLIBCXX_VISIBILITY(default)
+     159              : {
+     160              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+     161              : 
+     162              :   /**
+     163              :    *  @brief Describes the rounding style for floating-point types.
+     164              :    *
+     165              :    *  This is used in the std::numeric_limits class.
+     166              :   */
+     167              :   enum float_round_style
+     168              :   {
+     169              :     round_indeterminate       = -1,    ///< Intermediate.
+     170              :     round_toward_zero         = 0,     ///< To zero.
+     171              :     round_to_nearest          = 1,     ///< To the nearest representable value.
+     172              :     round_toward_infinity     = 2,     ///< To infinity.
+     173              :     round_toward_neg_infinity = 3      ///< To negative infinity.
+     174              :   };
+     175              : 
+     176              :   /**
+     177              :    *  @brief Describes the denormalization for floating-point types.
+     178              :    *
+     179              :    *  These values represent the presence or absence of a variable number
+     180              :    *  of exponent bits.  This type is used in the std::numeric_limits class.
+     181              :   */
+     182              :   enum float_denorm_style
+     183              :   {
+     184              :     /// Indeterminate at compile time whether denormalized values are allowed.
+     185              :     denorm_indeterminate = -1,
+     186              :     /// The type does not allow denormalized values.
+     187              :     denorm_absent        = 0,
+     188              :     /// The type allows denormalized values.
+     189              :     denorm_present       = 1
+     190              :   };
+     191              : 
+     192              :   /**
+     193              :    *  @brief Part of std::numeric_limits.
+     194              :    *
+     195              :    *  The @c static @c const members are usable as integral constant
+     196              :    *  expressions.
+     197              :    *
+     198              :    *  @note This is a separate class for purposes of efficiency; you
+     199              :    *        should only access these members as part of an instantiation
+     200              :    *        of the std::numeric_limits class.
+     201              :   */
+     202              :   struct __numeric_limits_base
+     203              :   {
+     204              :     /** This will be true for all fundamental types (which have
+     205              :         specializations), and false for everything else.  */
+     206              :     static _GLIBCXX_USE_CONSTEXPR bool is_specialized = false;
+     207              : 
+     208              :     /** The number of @c radix digits that be represented without change:  for
+     209              :         integer types, the number of non-sign bits in the mantissa; for
+     210              :         floating types, the number of @c radix digits in the mantissa.  */
+     211              :     static _GLIBCXX_USE_CONSTEXPR int digits = 0;
+     212              : 
+     213              :     /** The number of base 10 digits that can be represented without change. */
+     214              :     static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
+     215              : 
+     216              : #if __cplusplus >= 201103L
+     217              :     /** The number of base 10 digits required to ensure that values which
+     218              :         differ are always differentiated.  */
+     219              :     static constexpr int max_digits10 = 0;
+     220              : #endif
+     221              : 
+     222              :     /** True if the type is signed.  */
+     223              :     static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
+     224              : 
+     225              :     /** True if the type is integer.  */
+     226              :     static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
+     227              : 
+     228              :     /** True if the type uses an exact representation. All integer types are
+     229              :         exact, but not all exact types are integer.  For example, rational and
+     230              :         fixed-exponent representations are exact but not integer. */
+     231              :     static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
+     232              : 
+     233              :     /** For integer types, specifies the base of the representation.  For
+     234              :         floating types, specifies the base of the exponent representation.  */
+     235              :     static _GLIBCXX_USE_CONSTEXPR int radix = 0;
+     236              : 
+     237              :     /** The minimum negative integer such that @c radix raised to the power of
+     238              :         (one less than that integer) is a normalized floating point number.  */
+     239              :     static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
+     240              : 
+     241              :     /** The minimum negative integer such that 10 raised to that power is in
+     242              :         the range of normalized floating point numbers.  */
+     243              :     static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
+     244              : 
+     245              :     /** The maximum positive integer such that @c radix raised to the power of
+     246              :         (one less than that integer) is a representable finite floating point
+     247              :         number.  */
+     248              :     static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
+     249              : 
+     250              :     /** The maximum positive integer such that 10 raised to that power is in
+     251              :         the range of representable finite floating point numbers.  */
+     252              :     static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+     253              : 
+     254              :     /** True if the type has a representation for positive infinity.  */
+     255              :     static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
+     256              : 
+     257              :     /** True if the type has a representation for a quiet (non-signaling)
+     258              :         Not a Number.  */
+     259              :     static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
+     260              : 
+     261              :     /** True if the type has a representation for a signaling
+     262              :         Not a Number.  */
+     263              :     static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+     264              : 
+     265              :     /** See std::float_denorm_style for more information.  */
+     266              :     static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm = denorm_absent;
+     267              : 
+     268              :     /** True if loss of accuracy is detected as a denormalization loss,
+     269              :         rather than as an inexact result. */
+     270              :     static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+     271              : 
+     272              :     /** True if-and-only-if the type adheres to the IEC 559 standard, also
+     273              :         known as IEEE 754.  (Only makes sense for floating point types.)  */
+     274              :     static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
+     275              : 
+     276              :     /** True if the set of values representable by the type is
+     277              :         finite.  All built-in types are bounded, this member would be
+     278              :         false for arbitrary precision types. */
+     279              :     static _GLIBCXX_USE_CONSTEXPR bool is_bounded = false;
+     280              : 
+     281              :     /** True if the type is @e modulo. A type is modulo if, for any
+     282              :         operation involving +, -, or * on values of that type whose
+     283              :         result would fall outside the range [min(),max()], the value
+     284              :         returned differs from the true value by an integer multiple of
+     285              :         max() - min() + 1. On most machines, this is false for floating
+     286              :         types, true for unsigned integers, and true for signed integers.
+     287              :         See PR22200 about signed integers.  */
+     288              :     static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
+     289              : 
+     290              :     /** True if trapping is implemented for this type.  */
+     291              :     static _GLIBCXX_USE_CONSTEXPR bool traps = false;
+     292              : 
+     293              :     /** True if tininess is detected before rounding.  (see IEC 559)  */
+     294              :     static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
+     295              : 
+     296              :     /** See std::float_round_style for more information.  This is only
+     297              :         meaningful for floating types; integer types will all be
+     298              :         round_toward_zero.  */
+     299              :     static _GLIBCXX_USE_CONSTEXPR float_round_style round_style =
+     300              :                                                     round_toward_zero;
+     301              :   };
+     302              : 
+     303              :   /**
+     304              :    *  @brief Properties of fundamental types.
+     305              :    *
+     306              :    *  This class allows a program to obtain information about the
+     307              :    *  representation of a fundamental type on a given platform.  For
+     308              :    *  non-fundamental types, the functions will return 0 and the data
+     309              :    *  members will all be @c false.
+     310              :   */
+     311              :   template<typename _Tp>
+     312              :     struct numeric_limits : public __numeric_limits_base
+     313              :     {
+     314              :       /** The minimum finite value, or for floating types with
+     315              :           denormalization, the minimum positive normalized value.  */
+     316              :       static _GLIBCXX_CONSTEXPR _Tp
+     317              :       min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
+     318              : 
+     319              :       /** The maximum finite value.  */
+     320              :       static _GLIBCXX_CONSTEXPR _Tp
+     321              :       max() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
+     322              : 
+     323              : #if __cplusplus >= 201103L
+     324              :       /** A finite value x such that there is no other finite value y
+     325              :        *  where y < x.  */
+     326              :       static constexpr _Tp
+     327              :       lowest() noexcept { return _Tp(); }
+     328              : #endif
+     329              : 
+     330              :       /** The @e machine @e epsilon:  the difference between 1 and the least
+     331              :           value greater than 1 that is representable.  */
+     332              :       static _GLIBCXX_CONSTEXPR _Tp
+     333              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
+     334              : 
+     335              :       /** The maximum rounding error measurement (see LIA-1).  */
+     336              :       static _GLIBCXX_CONSTEXPR _Tp
+     337              :       round_error() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
+     338              : 
+     339              :       /** The representation of positive infinity, if @c has_infinity.  */
+     340              :       static _GLIBCXX_CONSTEXPR _Tp
+     341              :       infinity() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
+     342              : 
+     343              :       /** The representation of a quiet Not a Number,
+     344              :           if @c has_quiet_NaN. */
+     345              :       static _GLIBCXX_CONSTEXPR _Tp
+     346              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
+     347              : 
+     348              :       /** The representation of a signaling Not a Number, if
+     349              :           @c has_signaling_NaN. */
+     350              :       static _GLIBCXX_CONSTEXPR _Tp
+     351              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
+     352              : 
+     353              :       /** The minimum positive denormalized value.  For types where
+     354              :           @c has_denorm is false, this is the minimum positive normalized
+     355              :           value.  */
+     356              :       static _GLIBCXX_CONSTEXPR _Tp
+     357              :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return _Tp(); }
+     358              :     };
+     359              : 
+     360              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     361              :   // 559. numeric_limits<const T>
+     362              : 
+     363              :   template<typename _Tp>
+     364              :     struct numeric_limits<const _Tp>
+     365              :     : public numeric_limits<_Tp> { };
+     366              : 
+     367              :   template<typename _Tp>
+     368              :     struct numeric_limits<volatile _Tp>
+     369              :     : public numeric_limits<_Tp> { };
+     370              : 
+     371              :   template<typename _Tp>
+     372              :     struct numeric_limits<const volatile _Tp>
+     373              :     : public numeric_limits<_Tp> { };
+     374              : 
+     375              :   // Now there follow 16 explicit specializations.  Yes, 16.  Make sure
+     376              :   // you get the count right. (18 in C++11 mode, with char16_t and char32_t.)
+     377              :   // (+1 if char8_t is enabled.)
+     378              : 
+     379              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     380              :   // 184. numeric_limits<bool> wording problems
+     381              : 
+     382              :   /// numeric_limits<bool> specialization.
+     383              :   template<>
+     384              :     struct numeric_limits<bool>
+     385              :     {
+     386              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+     387              : 
+     388              :       static _GLIBCXX_CONSTEXPR bool
+     389              :       min() _GLIBCXX_USE_NOEXCEPT { return false; }
+     390              : 
+     391              :       static _GLIBCXX_CONSTEXPR bool
+     392              :       max() _GLIBCXX_USE_NOEXCEPT { return true; }
+     393              : 
+     394              : #if __cplusplus >= 201103L
+     395              :       static constexpr bool
+     396              :       lowest() noexcept { return min(); }
+     397              : #endif
+     398              :       static _GLIBCXX_USE_CONSTEXPR int digits = 1;
+     399              :       static _GLIBCXX_USE_CONSTEXPR int digits10 = 0;
+     400              : #if __cplusplus >= 201103L
+     401              :       static constexpr int max_digits10 = 0;
+     402              : #endif
+     403              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
+     404              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
+     405              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
+     406              :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
+     407              : 
+     408              :       static _GLIBCXX_CONSTEXPR bool
+     409              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return false; }
+     410              : 
+     411              :       static _GLIBCXX_CONSTEXPR bool
+     412              :       round_error() _GLIBCXX_USE_NOEXCEPT { return false; }
+     413              : 
+     414              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
+     415              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
+     416              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
+     417              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+     418              : 
+     419              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
+     420              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
+     421              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+     422              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+     423              :        = denorm_absent;
+     424              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+     425              : 
+     426              :       static _GLIBCXX_CONSTEXPR bool
+     427              :       infinity() _GLIBCXX_USE_NOEXCEPT { return false; }
+     428              : 
+     429              :       static _GLIBCXX_CONSTEXPR bool
+     430              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
+     431              : 
+     432              :       static _GLIBCXX_CONSTEXPR bool
+     433              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return false; }
+     434              : 
+     435              :       static _GLIBCXX_CONSTEXPR bool
+     436              :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return false; }
+     437              : 
+     438              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
+     439              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+     440              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
+     441              : 
+     442              :       // It is not clear what it means for a boolean type to trap.
+     443              :       // This is a DR on the LWG issue list.  Here, I use integer
+     444              :       // promotion semantics.
+     445              :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
+     446              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
+     447              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
+     448              :        = round_toward_zero;
+     449              :     };
+     450              : 
+     451              :   /// numeric_limits<char> specialization.
+     452              :   template<>
+     453              :     struct numeric_limits<char>
+     454              :     {
+     455              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+     456              : 
+     457              :       static _GLIBCXX_CONSTEXPR char
+     458              :       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); }
+     459              : 
+     460              :       static _GLIBCXX_CONSTEXPR char
+     461              :       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max(char); }
+     462              : 
+     463              : #if __cplusplus >= 201103L
+     464              :       static constexpr char
+     465              :       lowest() noexcept { return min(); }
+     466              : #endif
+     467              : 
+     468              :       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char);
+     469              :       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char);
+     470              : #if __cplusplus >= 201103L
+     471              :       static constexpr int max_digits10 = 0;
+     472              : #endif
+     473              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char);
+     474              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
+     475              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
+     476              :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
+     477              : 
+     478              :       static _GLIBCXX_CONSTEXPR char
+     479              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
+     480              : 
+     481              :       static _GLIBCXX_CONSTEXPR char
+     482              :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
+     483              : 
+     484              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
+     485              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
+     486              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
+     487              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+     488              : 
+     489              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
+     490              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
+     491              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+     492              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+     493              :        = denorm_absent;
+     494              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+     495              : 
+     496              :       static _GLIBCXX_CONSTEXPR
+     497              :       char infinity() _GLIBCXX_USE_NOEXCEPT { return char(); }
+     498              : 
+     499              :       static _GLIBCXX_CONSTEXPR char
+     500              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
+     501              : 
+     502              :       static _GLIBCXX_CONSTEXPR char
+     503              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char(); }
+     504              : 
+     505              :       static _GLIBCXX_CONSTEXPR char
+     506              :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<char>(0); }
+     507              : 
+     508              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
+     509              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+     510              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
+     511              : 
+     512              :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
+     513              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
+     514              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
+     515              :        = round_toward_zero;
+     516              :     };
+     517              : 
+     518              :   /// numeric_limits<signed char> specialization.
+     519              :   template<>
+     520              :     struct numeric_limits<signed char>
+     521              :     {
+     522              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+     523              : 
+     524              :       static _GLIBCXX_CONSTEXPR signed char
+     525              :       min() _GLIBCXX_USE_NOEXCEPT { return -__SCHAR_MAX__ - 1; }
+     526              : 
+     527              :       static _GLIBCXX_CONSTEXPR signed char
+     528              :       max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__; }
+     529              : 
+     530              : #if __cplusplus >= 201103L
+     531              :       static constexpr signed char
+     532              :       lowest() noexcept { return min(); }
+     533              : #endif
+     534              : 
+     535              :       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (signed char);
+     536              :       static _GLIBCXX_USE_CONSTEXPR int digits10
+     537              :        = __glibcxx_digits10 (signed char);
+     538              : #if __cplusplus >= 201103L
+     539              :       static constexpr int max_digits10 = 0;
+     540              : #endif
+     541              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
+     542              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
+     543              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
+     544              :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
+     545              : 
+     546              :       static _GLIBCXX_CONSTEXPR signed char
+     547              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
+     548              : 
+     549              :       static _GLIBCXX_CONSTEXPR signed char
+     550              :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
+     551              : 
+     552              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
+     553              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
+     554              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
+     555              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+     556              : 
+     557              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
+     558              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
+     559              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+     560              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+     561              :        = denorm_absent;
+     562              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+     563              : 
+     564              :       static _GLIBCXX_CONSTEXPR signed char
+     565              :       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
+     566              : 
+     567              :       static _GLIBCXX_CONSTEXPR signed char
+     568              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed char>(0); }
+     569              : 
+     570              :       static _GLIBCXX_CONSTEXPR signed char
+     571              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
+     572              :       { return static_cast<signed char>(0); }
+     573              : 
+     574              :       static _GLIBCXX_CONSTEXPR signed char
+     575              :       denorm_min() _GLIBCXX_USE_NOEXCEPT
+     576              :       { return static_cast<signed char>(0); }
+     577              : 
+     578              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
+     579              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+     580              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
+     581              : 
+     582              :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
+     583              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
+     584              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
+     585              :        = round_toward_zero;
+     586              :     };
+     587              : 
+     588              :   /// numeric_limits<unsigned char> specialization.
+     589              :   template<>
+     590              :     struct numeric_limits<unsigned char>
+     591              :     {
+     592              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+     593              : 
+     594              :       static _GLIBCXX_CONSTEXPR unsigned char
+     595              :       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
+     596              : 
+     597              :       static _GLIBCXX_CONSTEXPR unsigned char
+     598              :       max() _GLIBCXX_USE_NOEXCEPT { return __SCHAR_MAX__ * 2U + 1; }
+     599              : 
+     600              : #if __cplusplus >= 201103L
+     601              :       static constexpr unsigned char
+     602              :       lowest() noexcept { return min(); }
+     603              : #endif
+     604              : 
+     605              :       static _GLIBCXX_USE_CONSTEXPR int digits
+     606              :        = __glibcxx_digits (unsigned char);
+     607              :       static _GLIBCXX_USE_CONSTEXPR int digits10
+     608              :        = __glibcxx_digits10 (unsigned char);
+     609              : #if __cplusplus >= 201103L
+     610              :       static constexpr int max_digits10 = 0;
+     611              : #endif
+     612              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
+     613              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
+     614              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
+     615              :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
+     616              : 
+     617              :       static _GLIBCXX_CONSTEXPR unsigned char
+     618              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
+     619              : 
+     620              :       static _GLIBCXX_CONSTEXPR unsigned char
+     621              :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
+     622              : 
+     623              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
+     624              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
+     625              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
+     626              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+     627              : 
+     628              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
+     629              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
+     630              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+     631              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+     632              :        = denorm_absent;
+     633              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+     634              : 
+     635              :       static _GLIBCXX_CONSTEXPR unsigned char
+     636              :       infinity() _GLIBCXX_USE_NOEXCEPT
+     637              :       { return static_cast<unsigned char>(0); }
+     638              : 
+     639              :       static _GLIBCXX_CONSTEXPR unsigned char
+     640              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
+     641              :       { return static_cast<unsigned char>(0); }
+     642              : 
+     643              :       static _GLIBCXX_CONSTEXPR unsigned char
+     644              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
+     645              :       { return static_cast<unsigned char>(0); }
+     646              : 
+     647              :       static _GLIBCXX_CONSTEXPR unsigned char
+     648              :       denorm_min() _GLIBCXX_USE_NOEXCEPT
+     649              :       { return static_cast<unsigned char>(0); }
+     650              : 
+     651              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
+     652              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+     653              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
+     654              : 
+     655              :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
+     656              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
+     657              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
+     658              :        = round_toward_zero;
+     659              :     };
+     660              : 
+     661              :   /// numeric_limits<wchar_t> specialization.
+     662              :   template<>
+     663              :     struct numeric_limits<wchar_t>
+     664              :     {
+     665              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+     666              : 
+     667              :       static _GLIBCXX_CONSTEXPR wchar_t
+     668              :       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); }
+     669              : 
+     670              :       static _GLIBCXX_CONSTEXPR wchar_t
+     671              :       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (wchar_t); }
+     672              : 
+     673              : #if __cplusplus >= 201103L
+     674              :       static constexpr wchar_t
+     675              :       lowest() noexcept { return min(); }
+     676              : #endif
+     677              : 
+     678              :       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (wchar_t);
+     679              :       static _GLIBCXX_USE_CONSTEXPR int digits10
+     680              :        = __glibcxx_digits10 (wchar_t);
+     681              : #if __cplusplus >= 201103L
+     682              :       static constexpr int max_digits10 = 0;
+     683              : #endif
+     684              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (wchar_t);
+     685              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
+     686              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
+     687              :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
+     688              : 
+     689              :       static _GLIBCXX_CONSTEXPR wchar_t
+     690              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
+     691              : 
+     692              :       static _GLIBCXX_CONSTEXPR wchar_t
+     693              :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
+     694              : 
+     695              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
+     696              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
+     697              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
+     698              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+     699              : 
+     700              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
+     701              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
+     702              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+     703              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+     704              :        = denorm_absent;
+     705              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+     706              : 
+     707              :       static _GLIBCXX_CONSTEXPR wchar_t
+     708              :       infinity() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
+     709              : 
+     710              :       static _GLIBCXX_CONSTEXPR wchar_t
+     711              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
+     712              : 
+     713              :       static _GLIBCXX_CONSTEXPR wchar_t
+     714              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
+     715              : 
+     716              :       static _GLIBCXX_CONSTEXPR wchar_t
+     717              :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
+     718              : 
+     719              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
+     720              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+     721              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
+     722              : 
+     723              :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
+     724              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
+     725              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
+     726              :        = round_toward_zero;
+     727              :     };
+     728              : 
+     729              : #if _GLIBCXX_USE_CHAR8_T
+     730              :   /// numeric_limits<char8_t> specialization.
+     731              :   template<>
+     732              :     struct numeric_limits<char8_t>
+     733              :     {
+     734              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+     735              : 
+     736              :       static _GLIBCXX_CONSTEXPR char8_t
+     737              :       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (char8_t); }
+     738              : 
+     739              :       static _GLIBCXX_CONSTEXPR char8_t
+     740              :       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (char8_t); }
+     741              : 
+     742              :       static _GLIBCXX_CONSTEXPR char8_t
+     743              :       lowest() _GLIBCXX_USE_NOEXCEPT { return min(); }
+     744              : 
+     745              :       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (char8_t);
+     746              :       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (char8_t);
+     747              :       static _GLIBCXX_USE_CONSTEXPR int max_digits10 = 0;
+     748              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = __glibcxx_signed (char8_t);
+     749              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
+     750              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
+     751              :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
+     752              : 
+     753              :       static _GLIBCXX_CONSTEXPR char8_t
+     754              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
+     755              : 
+     756              :       static _GLIBCXX_CONSTEXPR char8_t
+     757              :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
+     758              : 
+     759              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
+     760              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
+     761              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
+     762              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+     763              : 
+     764              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
+     765              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
+     766              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+     767              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+     768              :         = denorm_absent;
+     769              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+     770              : 
+     771              :       static _GLIBCXX_CONSTEXPR char8_t
+     772              :       infinity() _GLIBCXX_USE_NOEXCEPT { return char8_t(); }
+     773              : 
+     774              :       static _GLIBCXX_CONSTEXPR char8_t
+     775              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return char8_t(); }
+     776              : 
+     777              :       static _GLIBCXX_CONSTEXPR char8_t
+     778              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return char8_t(); }
+     779              : 
+     780              :       static _GLIBCXX_CONSTEXPR char8_t
+     781              :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return char8_t(); }
+     782              : 
+     783              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
+     784              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+     785              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
+     786              : 
+     787              :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
+     788              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
+     789              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
+     790              :         = round_toward_zero;
+     791              :     };
+     792              : #endif
+     793              : 
+     794              : #if __cplusplus >= 201103L
+     795              :   /// numeric_limits<char16_t> specialization.
+     796              :   template<>
+     797              :     struct numeric_limits<char16_t>
+     798              :     {
+     799              :       static constexpr bool is_specialized = true;
+     800              : 
+     801              :       static constexpr char16_t
+     802              :       min() noexcept { return __glibcxx_min (char16_t); }
+     803              : 
+     804              :       static constexpr char16_t
+     805              :       max() noexcept { return __glibcxx_max (char16_t); }
+     806              : 
+     807              :       static constexpr char16_t
+     808              :       lowest() noexcept { return min(); }
+     809              : 
+     810              :       static constexpr int digits = __glibcxx_digits (char16_t);
+     811              :       static constexpr int digits10 = __glibcxx_digits10 (char16_t);
+     812              :       static constexpr int max_digits10 = 0;
+     813              :       static constexpr bool is_signed = __glibcxx_signed (char16_t);
+     814              :       static constexpr bool is_integer = true;
+     815              :       static constexpr bool is_exact = true;
+     816              :       static constexpr int radix = 2;
+     817              : 
+     818              :       static constexpr char16_t
+     819              :       epsilon() noexcept { return 0; }
+     820              : 
+     821              :       static constexpr char16_t
+     822              :       round_error() noexcept { return 0; }
+     823              : 
+     824              :       static constexpr int min_exponent = 0;
+     825              :       static constexpr int min_exponent10 = 0;
+     826              :       static constexpr int max_exponent = 0;
+     827              :       static constexpr int max_exponent10 = 0;
+     828              : 
+     829              :       static constexpr bool has_infinity = false;
+     830              :       static constexpr bool has_quiet_NaN = false;
+     831              :       static constexpr bool has_signaling_NaN = false;
+     832              :       static constexpr float_denorm_style has_denorm = denorm_absent;
+     833              :       static constexpr bool has_denorm_loss = false;
+     834              : 
+     835              :       static constexpr char16_t
+     836              :       infinity() noexcept { return char16_t(); }
+     837              : 
+     838              :       static constexpr char16_t
+     839              :       quiet_NaN() noexcept { return char16_t(); }
+     840              : 
+     841              :       static constexpr char16_t
+     842              :       signaling_NaN() noexcept { return char16_t(); }
+     843              : 
+     844              :       static constexpr char16_t
+     845              :       denorm_min() noexcept { return char16_t(); }
+     846              : 
+     847              :       static constexpr bool is_iec559 = false;
+     848              :       static constexpr bool is_bounded = true;
+     849              :       static constexpr bool is_modulo = !is_signed;
+     850              : 
+     851              :       static constexpr bool traps = __glibcxx_integral_traps;
+     852              :       static constexpr bool tinyness_before = false;
+     853              :       static constexpr float_round_style round_style = round_toward_zero;
+     854              :     };
+     855              : 
+     856              :   /// numeric_limits<char32_t> specialization.
+     857              :   template<>
+     858              :     struct numeric_limits<char32_t>
+     859              :     {
+     860              :       static constexpr bool is_specialized = true;
+     861              : 
+     862              :       static constexpr char32_t
+     863              :       min() noexcept { return __glibcxx_min (char32_t); }
+     864              : 
+     865              :       static constexpr char32_t
+     866              :       max() noexcept { return __glibcxx_max (char32_t); }
+     867              : 
+     868              :       static constexpr char32_t
+     869              :       lowest() noexcept { return min(); }
+     870              : 
+     871              :       static constexpr int digits = __glibcxx_digits (char32_t);
+     872              :       static constexpr int digits10 = __glibcxx_digits10 (char32_t);
+     873              :       static constexpr int max_digits10 = 0;
+     874              :       static constexpr bool is_signed = __glibcxx_signed (char32_t);
+     875              :       static constexpr bool is_integer = true;
+     876              :       static constexpr bool is_exact = true;
+     877              :       static constexpr int radix = 2;
+     878              : 
+     879              :       static constexpr char32_t
+     880              :       epsilon() noexcept { return 0; }
+     881              : 
+     882              :       static constexpr char32_t
+     883              :       round_error() noexcept { return 0; }
+     884              : 
+     885              :       static constexpr int min_exponent = 0;
+     886              :       static constexpr int min_exponent10 = 0;
+     887              :       static constexpr int max_exponent = 0;
+     888              :       static constexpr int max_exponent10 = 0;
+     889              : 
+     890              :       static constexpr bool has_infinity = false;
+     891              :       static constexpr bool has_quiet_NaN = false;
+     892              :       static constexpr bool has_signaling_NaN = false;
+     893              :       static constexpr float_denorm_style has_denorm = denorm_absent;
+     894              :       static constexpr bool has_denorm_loss = false;
+     895              : 
+     896              :       static constexpr char32_t
+     897              :       infinity() noexcept { return char32_t(); }
+     898              : 
+     899              :       static constexpr char32_t
+     900              :       quiet_NaN() noexcept { return char32_t(); }
+     901              : 
+     902              :       static constexpr char32_t
+     903              :       signaling_NaN() noexcept { return char32_t(); }
+     904              : 
+     905              :       static constexpr char32_t
+     906              :       denorm_min() noexcept { return char32_t(); }
+     907              : 
+     908              :       static constexpr bool is_iec559 = false;
+     909              :       static constexpr bool is_bounded = true;
+     910              :       static constexpr bool is_modulo = !is_signed;
+     911              : 
+     912              :       static constexpr bool traps = __glibcxx_integral_traps;
+     913              :       static constexpr bool tinyness_before = false;
+     914              :       static constexpr float_round_style round_style = round_toward_zero;
+     915              :     };
+     916              : #endif
+     917              : 
+     918              :   /// numeric_limits<short> specialization.
+     919              :   template<>
+     920              :     struct numeric_limits<short>
+     921              :     {
+     922              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+     923              : 
+     924              :       static _GLIBCXX_CONSTEXPR short
+     925              :       min() _GLIBCXX_USE_NOEXCEPT { return -__SHRT_MAX__ - 1; }
+     926              : 
+     927              :       static _GLIBCXX_CONSTEXPR short
+     928              :       max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__; }
+     929              : 
+     930              : #if __cplusplus >= 201103L
+     931              :       static constexpr short
+     932              :       lowest() noexcept { return min(); }
+     933              : #endif
+     934              : 
+     935              :       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (short);
+     936              :       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (short);
+     937              : #if __cplusplus >= 201103L
+     938              :       static constexpr int max_digits10 = 0;
+     939              : #endif
+     940              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
+     941              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
+     942              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
+     943              :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
+     944              : 
+     945              :       static _GLIBCXX_CONSTEXPR short
+     946              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
+     947              : 
+     948              :       static _GLIBCXX_CONSTEXPR short
+     949              :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
+     950              : 
+     951              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
+     952              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
+     953              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
+     954              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+     955              : 
+     956              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
+     957              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
+     958              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+     959              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+     960              :        = denorm_absent;
+     961              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+     962              : 
+     963              :       static _GLIBCXX_CONSTEXPR short
+     964              :       infinity() _GLIBCXX_USE_NOEXCEPT { return short(); }
+     965              : 
+     966              :       static _GLIBCXX_CONSTEXPR short
+     967              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
+     968              : 
+     969              :       static _GLIBCXX_CONSTEXPR short
+     970              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return short(); }
+     971              : 
+     972              :       static _GLIBCXX_CONSTEXPR short
+     973              :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return short(); }
+     974              : 
+     975              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
+     976              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+     977              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
+     978              : 
+     979              :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
+     980              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
+     981              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
+     982              :        = round_toward_zero;
+     983              :     };
+     984              : 
+     985              :   /// numeric_limits<unsigned short> specialization.
+     986              :   template<>
+     987              :     struct numeric_limits<unsigned short>
+     988              :     {
+     989              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+     990              : 
+     991              :       static _GLIBCXX_CONSTEXPR unsigned short
+     992              :       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
+     993              : 
+     994              :       static _GLIBCXX_CONSTEXPR unsigned short
+     995              :       max() _GLIBCXX_USE_NOEXCEPT { return __SHRT_MAX__ * 2U + 1; }
+     996              : 
+     997              : #if __cplusplus >= 201103L
+     998              :       static constexpr unsigned short
+     999              :       lowest() noexcept { return min(); }
+    1000              : #endif
+    1001              : 
+    1002              :       static _GLIBCXX_USE_CONSTEXPR int digits
+    1003              :        = __glibcxx_digits (unsigned short);
+    1004              :       static _GLIBCXX_USE_CONSTEXPR int digits10
+    1005              :        = __glibcxx_digits10 (unsigned short);
+    1006              : #if __cplusplus >= 201103L
+    1007              :       static constexpr int max_digits10 = 0;
+    1008              : #endif
+    1009              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
+    1010              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
+    1011              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
+    1012              :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
+    1013              : 
+    1014              :       static _GLIBCXX_CONSTEXPR unsigned short
+    1015              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
+    1016              : 
+    1017              :       static _GLIBCXX_CONSTEXPR unsigned short
+    1018              :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
+    1019              : 
+    1020              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
+    1021              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
+    1022              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
+    1023              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+    1024              : 
+    1025              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
+    1026              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
+    1027              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+    1028              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+    1029              :        = denorm_absent;
+    1030              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+    1031              : 
+    1032              :       static _GLIBCXX_CONSTEXPR unsigned short
+    1033              :       infinity() _GLIBCXX_USE_NOEXCEPT
+    1034              :       { return static_cast<unsigned short>(0); }
+    1035              : 
+    1036              :       static _GLIBCXX_CONSTEXPR unsigned short
+    1037              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
+    1038              :       { return static_cast<unsigned short>(0); }
+    1039              : 
+    1040              :       static _GLIBCXX_CONSTEXPR unsigned short
+    1041              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
+    1042              :       { return static_cast<unsigned short>(0); }
+    1043              : 
+    1044              :       static _GLIBCXX_CONSTEXPR unsigned short
+    1045              :       denorm_min() _GLIBCXX_USE_NOEXCEPT
+    1046              :       { return static_cast<unsigned short>(0); }
+    1047              : 
+    1048              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
+    1049              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+    1050              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
+    1051              : 
+    1052              :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
+    1053              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
+    1054              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
+    1055              :        = round_toward_zero;
+    1056              :     };
+    1057              : 
+    1058              :   /// numeric_limits<int> specialization.
+    1059              :   template<>
+    1060              :     struct numeric_limits<int>
+    1061              :     {
+    1062              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+    1063              : 
+    1064              :       static _GLIBCXX_CONSTEXPR int
+    1065              :       min() _GLIBCXX_USE_NOEXCEPT { return -__INT_MAX__ - 1; }
+    1066              : 
+    1067              :       static _GLIBCXX_CONSTEXPR int
+    1068              :       max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__; }
+    1069              : 
+    1070              : #if __cplusplus >= 201103L
+    1071              :       static constexpr int
+    1072              :       lowest() noexcept { return min(); }
+    1073              : #endif
+    1074              : 
+    1075              :       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (int);
+    1076              :       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (int);
+    1077              : #if __cplusplus >= 201103L
+    1078              :       static constexpr int max_digits10 = 0;
+    1079              : #endif
+    1080              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
+    1081              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
+    1082              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
+    1083              :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
+    1084              : 
+    1085              :       static _GLIBCXX_CONSTEXPR int
+    1086              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
+    1087              : 
+    1088              :       static _GLIBCXX_CONSTEXPR int
+    1089              :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
+    1090              : 
+    1091              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
+    1092              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
+    1093              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
+    1094              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+    1095              : 
+    1096              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
+    1097              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
+    1098              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+    1099              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+    1100              :        = denorm_absent;
+    1101              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+    1102              : 
+    1103              :       static _GLIBCXX_CONSTEXPR int
+    1104              :       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
+    1105              : 
+    1106              :       static _GLIBCXX_CONSTEXPR int
+    1107              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
+    1108              : 
+    1109              :       static _GLIBCXX_CONSTEXPR int
+    1110              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
+    1111              : 
+    1112              :       static _GLIBCXX_CONSTEXPR int
+    1113              :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
+    1114              : 
+    1115              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
+    1116              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+    1117              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
+    1118              : 
+    1119              :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
+    1120              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
+    1121              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
+    1122              :        = round_toward_zero;
+    1123              :     };
+    1124              : 
+    1125              :   /// numeric_limits<unsigned int> specialization.
+    1126              :   template<>
+    1127              :     struct numeric_limits<unsigned int>
+    1128              :     {
+    1129              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+    1130              : 
+    1131              :       static _GLIBCXX_CONSTEXPR unsigned int
+    1132              :       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
+    1133              : 
+    1134              :       static _GLIBCXX_CONSTEXPR unsigned int
+    1135              :       max() _GLIBCXX_USE_NOEXCEPT { return __INT_MAX__ * 2U + 1; }
+    1136              : 
+    1137              : #if __cplusplus >= 201103L
+    1138              :       static constexpr unsigned int
+    1139              :       lowest() noexcept { return min(); }
+    1140              : #endif
+    1141              : 
+    1142              :       static _GLIBCXX_USE_CONSTEXPR int digits
+    1143              :        = __glibcxx_digits (unsigned int);
+    1144              :       static _GLIBCXX_USE_CONSTEXPR int digits10
+    1145              :        = __glibcxx_digits10 (unsigned int);
+    1146              : #if __cplusplus >= 201103L
+    1147              :       static constexpr int max_digits10 = 0;
+    1148              : #endif
+    1149              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
+    1150              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
+    1151              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
+    1152              :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
+    1153              : 
+    1154              :       static _GLIBCXX_CONSTEXPR unsigned int
+    1155              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
+    1156              : 
+    1157              :       static _GLIBCXX_CONSTEXPR unsigned int
+    1158              :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
+    1159              : 
+    1160              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
+    1161              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
+    1162              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
+    1163              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+    1164              : 
+    1165              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
+    1166              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
+    1167              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+    1168              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+    1169              :        = denorm_absent;
+    1170              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+    1171              : 
+    1172              :       static _GLIBCXX_CONSTEXPR unsigned int
+    1173              :       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<unsigned int>(0); }
+    1174              : 
+    1175              :       static _GLIBCXX_CONSTEXPR unsigned int
+    1176              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
+    1177              :       { return static_cast<unsigned int>(0); }
+    1178              : 
+    1179              :       static _GLIBCXX_CONSTEXPR unsigned int
+    1180              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
+    1181              :       { return static_cast<unsigned int>(0); }
+    1182              : 
+    1183              :       static _GLIBCXX_CONSTEXPR unsigned int
+    1184              :       denorm_min() _GLIBCXX_USE_NOEXCEPT
+    1185              :       { return static_cast<unsigned int>(0); }
+    1186              : 
+    1187              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
+    1188              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+    1189              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
+    1190              : 
+    1191              :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
+    1192              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
+    1193              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
+    1194              :        = round_toward_zero;
+    1195              :     };
+    1196              : 
+    1197              :   /// numeric_limits<long> specialization.
+    1198              :   template<>
+    1199              :     struct numeric_limits<long>
+    1200              :     {
+    1201              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+    1202              : 
+    1203              :       static _GLIBCXX_CONSTEXPR long
+    1204         7080 :       min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_MAX__ - 1; }
+    1205              : 
+    1206              :       static _GLIBCXX_CONSTEXPR long
+    1207            0 :       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__; }
+    1208              : 
+    1209              : #if __cplusplus >= 201103L
+    1210              :       static constexpr long
+    1211         7072 :       lowest() noexcept { return min(); }
+    1212              : #endif
+    1213              : 
+    1214              :       static _GLIBCXX_USE_CONSTEXPR int digits = __glibcxx_digits (long);
+    1215              :       static _GLIBCXX_USE_CONSTEXPR int digits10 = __glibcxx_digits10 (long);
+    1216              : #if __cplusplus >= 201103L
+    1217              :       static constexpr int max_digits10 = 0;
+    1218              : #endif
+    1219              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
+    1220              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
+    1221              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
+    1222              :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
+    1223              : 
+    1224              :       static _GLIBCXX_CONSTEXPR long
+    1225              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
+    1226              : 
+    1227              :       static _GLIBCXX_CONSTEXPR long
+    1228              :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
+    1229              : 
+    1230              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
+    1231              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
+    1232              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
+    1233              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+    1234              : 
+    1235              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
+    1236              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
+    1237              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+    1238              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+    1239              :        = denorm_absent;
+    1240              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+    1241              : 
+    1242              :       static _GLIBCXX_CONSTEXPR long
+    1243              :       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
+    1244              : 
+    1245              :       static _GLIBCXX_CONSTEXPR long
+    1246              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
+    1247              : 
+    1248              :       static _GLIBCXX_CONSTEXPR long
+    1249              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
+    1250              : 
+    1251              :       static _GLIBCXX_CONSTEXPR long
+    1252              :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
+    1253              : 
+    1254              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
+    1255              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+    1256              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
+    1257              : 
+    1258              :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
+    1259              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
+    1260              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
+    1261              :        = round_toward_zero;
+    1262              :     };
+    1263              : 
+    1264              :   /// numeric_limits<unsigned long> specialization.
+    1265              :   template<>
+    1266              :     struct numeric_limits<unsigned long>
+    1267              :     {
+    1268              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+    1269              : 
+    1270              :       static _GLIBCXX_CONSTEXPR unsigned long
+    1271              :       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
+    1272              : 
+    1273              :       static _GLIBCXX_CONSTEXPR unsigned long
+    1274        26788 :       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_MAX__ * 2UL + 1; }
+    1275              : 
+    1276              : #if __cplusplus >= 201103L
+    1277              :       static constexpr unsigned long
+    1278              :       lowest() noexcept { return min(); }
+    1279              : #endif
+    1280              : 
+    1281              :       static _GLIBCXX_USE_CONSTEXPR int digits
+    1282              :        = __glibcxx_digits (unsigned long);
+    1283              :       static _GLIBCXX_USE_CONSTEXPR int digits10
+    1284              :        = __glibcxx_digits10 (unsigned long);
+    1285              : #if __cplusplus >= 201103L
+    1286              :       static constexpr int max_digits10 = 0;
+    1287              : #endif
+    1288              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
+    1289              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
+    1290              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
+    1291              :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
+    1292              : 
+    1293              :       static _GLIBCXX_CONSTEXPR unsigned long
+    1294              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
+    1295              : 
+    1296              :       static _GLIBCXX_CONSTEXPR unsigned long
+    1297              :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
+    1298              : 
+    1299              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
+    1300              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
+    1301              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
+    1302              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+    1303              : 
+    1304              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
+    1305              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
+    1306              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+    1307              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+    1308              :        = denorm_absent;
+    1309              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+    1310              : 
+    1311              :       static _GLIBCXX_CONSTEXPR unsigned long
+    1312              :       infinity() _GLIBCXX_USE_NOEXCEPT
+    1313              :       { return static_cast<unsigned long>(0); }
+    1314              : 
+    1315              :       static _GLIBCXX_CONSTEXPR unsigned long
+    1316              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
+    1317              :       { return static_cast<unsigned long>(0); }
+    1318              : 
+    1319              :       static _GLIBCXX_CONSTEXPR unsigned long
+    1320              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
+    1321              :       { return static_cast<unsigned long>(0); }
+    1322              : 
+    1323              :       static _GLIBCXX_CONSTEXPR unsigned long
+    1324              :       denorm_min() _GLIBCXX_USE_NOEXCEPT
+    1325              :       { return static_cast<unsigned long>(0); }
+    1326              : 
+    1327              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
+    1328              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+    1329              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
+    1330              : 
+    1331              :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
+    1332              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
+    1333              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
+    1334              :        = round_toward_zero;
+    1335              :     };
+    1336              : 
+    1337              :   /// numeric_limits<long long> specialization.
+    1338              :   template<>
+    1339              :     struct numeric_limits<long long>
+    1340              :     {
+    1341              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+    1342              : 
+    1343              :       static _GLIBCXX_CONSTEXPR long long
+    1344              :       min() _GLIBCXX_USE_NOEXCEPT { return -__LONG_LONG_MAX__ - 1; }
+    1345              : 
+    1346              :       static _GLIBCXX_CONSTEXPR long long
+    1347              :       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__; }
+    1348              : 
+    1349              : #if __cplusplus >= 201103L
+    1350              :       static constexpr long long
+    1351              :       lowest() noexcept { return min(); }
+    1352              : #endif
+    1353              : 
+    1354              :       static _GLIBCXX_USE_CONSTEXPR int digits
+    1355              :        = __glibcxx_digits (long long);
+    1356              :       static _GLIBCXX_USE_CONSTEXPR int digits10
+    1357              :        = __glibcxx_digits10 (long long);
+    1358              : #if __cplusplus >= 201103L
+    1359              :       static constexpr int max_digits10 = 0;
+    1360              : #endif
+    1361              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
+    1362              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
+    1363              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
+    1364              :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
+    1365              : 
+    1366              :       static _GLIBCXX_CONSTEXPR long long
+    1367              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
+    1368              : 
+    1369              :       static _GLIBCXX_CONSTEXPR long long
+    1370              :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
+    1371              : 
+    1372              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
+    1373              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
+    1374              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
+    1375              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+    1376              : 
+    1377              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
+    1378              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
+    1379              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+    1380              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+    1381              :        = denorm_absent;
+    1382              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+    1383              : 
+    1384              :       static _GLIBCXX_CONSTEXPR long long
+    1385              :       infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
+    1386              : 
+    1387              :       static _GLIBCXX_CONSTEXPR long long
+    1388              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
+    1389              : 
+    1390              :       static _GLIBCXX_CONSTEXPR long long
+    1391              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
+    1392              :       { return static_cast<long long>(0); }
+    1393              : 
+    1394              :       static _GLIBCXX_CONSTEXPR long long
+    1395              :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast<long long>(0); }
+    1396              : 
+    1397              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
+    1398              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+    1399              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
+    1400              : 
+    1401              :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
+    1402              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
+    1403              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
+    1404              :        = round_toward_zero;
+    1405              :     };
+    1406              : 
+    1407              :   /// numeric_limits<unsigned long long> specialization.
+    1408              :   template<>
+    1409              :     struct numeric_limits<unsigned long long>
+    1410              :     {
+    1411              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+    1412              : 
+    1413              :       static _GLIBCXX_CONSTEXPR unsigned long long
+    1414              :       min() _GLIBCXX_USE_NOEXCEPT { return 0; }
+    1415              : 
+    1416              :       static _GLIBCXX_CONSTEXPR unsigned long long
+    1417              :       max() _GLIBCXX_USE_NOEXCEPT { return __LONG_LONG_MAX__ * 2ULL + 1; }
+    1418              : 
+    1419              : #if __cplusplus >= 201103L
+    1420              :       static constexpr unsigned long long
+    1421              :       lowest() noexcept { return min(); }
+    1422              : #endif
+    1423              : 
+    1424              :       static _GLIBCXX_USE_CONSTEXPR int digits
+    1425              :        = __glibcxx_digits (unsigned long long);
+    1426              :       static _GLIBCXX_USE_CONSTEXPR int digits10
+    1427              :        = __glibcxx_digits10 (unsigned long long);
+    1428              : #if __cplusplus >= 201103L
+    1429              :       static constexpr int max_digits10 = 0;
+    1430              : #endif
+    1431              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;
+    1432              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;
+    1433              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;
+    1434              :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;
+    1435              : 
+    1436              :       static _GLIBCXX_CONSTEXPR unsigned long long
+    1437              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }
+    1438              : 
+    1439              :       static _GLIBCXX_CONSTEXPR unsigned long long
+    1440              :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }
+    1441              : 
+    1442              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;
+    1443              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;
+    1444              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;
+    1445              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;
+    1446              : 
+    1447              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
+    1448              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
+    1449              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
+    1450              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+    1451              :        = denorm_absent;
+    1452              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
+    1453              : 
+    1454              :       static _GLIBCXX_CONSTEXPR unsigned long long
+    1455              :       infinity() _GLIBCXX_USE_NOEXCEPT
+    1456              :       { return static_cast<unsigned long long>(0); }
+    1457              : 
+    1458              :       static _GLIBCXX_CONSTEXPR unsigned long long
+    1459              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT
+    1460              :       { return static_cast<unsigned long long>(0); }
+    1461              : 
+    1462              :       static _GLIBCXX_CONSTEXPR unsigned long long
+    1463              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT
+    1464              :       { return static_cast<unsigned long long>(0); }
+    1465              : 
+    1466              :       static _GLIBCXX_CONSTEXPR unsigned long long
+    1467              :       denorm_min() _GLIBCXX_USE_NOEXCEPT
+    1468              :       { return static_cast<unsigned long long>(0); }
+    1469              : 
+    1470              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
+    1471              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+    1472              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
+    1473              : 
+    1474              :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
+    1475              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
+    1476              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
+    1477              :        = round_toward_zero;
+    1478              :     };
+    1479              : 
+    1480              : #define __INT_N(TYPE, BITSIZE, EXT, UEXT)                               \
+    1481              :   __extension__                                                         \
+    1482              :   template<>                                                              \
+    1483              :     struct numeric_limits<TYPE>                                           \
+    1484              :     {                                                                   \
+    1485              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;         \
+    1486              :                                                                         \
+    1487              :       static _GLIBCXX_CONSTEXPR TYPE                                    \
+    1488              :       min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min_b (TYPE, BITSIZE); } \
+    1489              :                                                                         \
+    1490              :       static _GLIBCXX_CONSTEXPR TYPE                                    \
+    1491              :       max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max_b (TYPE, BITSIZE); } \
+    1492              :                                                                         \
+    1493              :       static _GLIBCXX_USE_CONSTEXPR int digits                          \
+    1494              :         = BITSIZE - 1;                                                  \
+    1495              :       static _GLIBCXX_USE_CONSTEXPR int digits10                        \
+    1496              :         = (BITSIZE - 1) * 643L / 2136;                                  \
+    1497              :                                                                         \
+    1498              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;              \
+    1499              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;             \
+    1500              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;               \
+    1501              :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;                      \
+    1502              :                                                                         \
+    1503              :       static _GLIBCXX_CONSTEXPR TYPE                                    \
+    1504              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }                     \
+    1505              :                                                                         \
+    1506              :       static _GLIBCXX_CONSTEXPR TYPE                                    \
+    1507              :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }                 \
+    1508              :                                                                         \
+    1509              :       EXT                                                               \
+    1510              :                                                                         \
+    1511              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;               \
+    1512              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;             \
+    1513              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;               \
+    1514              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;             \
+    1515              :                                                                         \
+    1516              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;          \
+    1517              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;         \
+    1518              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;     \
+    1519              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm       \
+    1520              :         = denorm_absent;                                                \
+    1521              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;       \
+    1522              :                                                                         \
+    1523              :       static _GLIBCXX_CONSTEXPR TYPE                                    \
+    1524              :       infinity() _GLIBCXX_USE_NOEXCEPT                                  \
+    1525              :       { return static_cast<TYPE>(0); }                                    \
+    1526              :                                                                         \
+    1527              :       static _GLIBCXX_CONSTEXPR TYPE                                    \
+    1528              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT                                 \
+    1529              :       { return static_cast<TYPE>(0); }                                    \
+    1530              :                                                                         \
+    1531              :       static _GLIBCXX_CONSTEXPR TYPE                                    \
+    1532              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT                             \
+    1533              :       { return static_cast<TYPE>(0); }                                    \
+    1534              :                                                                         \
+    1535              :       static _GLIBCXX_CONSTEXPR TYPE                                    \
+    1536              :       denorm_min() _GLIBCXX_USE_NOEXCEPT                                \
+    1537              :       { return static_cast<TYPE>(0); }                                    \
+    1538              :                                                                         \
+    1539              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;             \
+    1540              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;             \
+    1541              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;             \
+    1542              :                                                                         \
+    1543              :       static _GLIBCXX_USE_CONSTEXPR bool traps                          \
+    1544              :         = __glibcxx_integral_traps;                                     \
+    1545              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;       \
+    1546              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style       \
+    1547              :         = round_toward_zero;                                            \
+    1548              :     };                                                                  \
+    1549              :                                                                         \
+    1550              :   __extension__                                                         \
+    1551              :   template<>                                                              \
+    1552              :     struct numeric_limits<unsigned TYPE>                          \
+    1553              :     {                                                                   \
+    1554              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;         \
+    1555              :                                                                         \
+    1556              :       static _GLIBCXX_CONSTEXPR unsigned TYPE                           \
+    1557              :       min() _GLIBCXX_USE_NOEXCEPT { return 0; }                         \
+    1558              :                                                                         \
+    1559              :       static _GLIBCXX_CONSTEXPR unsigned TYPE                           \
+    1560              :       max() _GLIBCXX_USE_NOEXCEPT                                       \
+    1561              :       { return  __glibcxx_max_b (unsigned TYPE, BITSIZE); }             \
+    1562              :                                                                         \
+    1563              :       UEXT                                                              \
+    1564              :                                                                         \
+    1565              :       static _GLIBCXX_USE_CONSTEXPR int digits                          \
+    1566              :         = BITSIZE;                                                      \
+    1567              :       static _GLIBCXX_USE_CONSTEXPR int digits10                        \
+    1568              :         = BITSIZE * 643L / 2136;                                        \
+    1569              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = false;             \
+    1570              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = true;             \
+    1571              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = true;               \
+    1572              :       static _GLIBCXX_USE_CONSTEXPR int radix = 2;                      \
+    1573              :                                                                         \
+    1574              :       static _GLIBCXX_CONSTEXPR unsigned TYPE                           \
+    1575              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; }                     \
+    1576              :                                                                         \
+    1577              :       static _GLIBCXX_CONSTEXPR unsigned TYPE                           \
+    1578              :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0; }                 \
+    1579              :                                                                         \
+    1580              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0;               \
+    1581              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0;             \
+    1582              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0;               \
+    1583              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0;             \
+    1584              :                                                                         \
+    1585              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;          \
+    1586              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;         \
+    1587              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;     \
+    1588              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm       \
+    1589              :        = denorm_absent;                                                 \
+    1590              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;       \
+    1591              :                                                                         \
+    1592              :       static _GLIBCXX_CONSTEXPR unsigned TYPE                           \
+    1593              :       infinity() _GLIBCXX_USE_NOEXCEPT                                  \
+    1594              :       { return static_cast<unsigned TYPE>(0); }                           \
+    1595              :                                                                         \
+    1596              :       static _GLIBCXX_CONSTEXPR unsigned TYPE                           \
+    1597              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT                                 \
+    1598              :       { return static_cast<unsigned TYPE>(0); }                           \
+    1599              :                                                                         \
+    1600              :       static _GLIBCXX_CONSTEXPR unsigned TYPE                           \
+    1601              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT                             \
+    1602              :       { return static_cast<unsigned TYPE>(0); }                           \
+    1603              :                                                                         \
+    1604              :       static _GLIBCXX_CONSTEXPR unsigned TYPE                           \
+    1605              :       denorm_min() _GLIBCXX_USE_NOEXCEPT                                \
+    1606              :       { return static_cast<unsigned TYPE>(0); }                           \
+    1607              :                                                                         \
+    1608              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;             \
+    1609              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;             \
+    1610              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;              \
+    1611              :                                                                         \
+    1612              :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; \
+    1613              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;       \
+    1614              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style       \
+    1615              :         = round_toward_zero;                                            \
+    1616              :     };
+    1617              : 
+    1618              : #if __cplusplus >= 201103L
+    1619              : 
+    1620              : #define __INT_N_201103(TYPE)                                            \
+    1621              :       static constexpr TYPE                                             \
+    1622              :       lowest() noexcept { return min(); }                               \
+    1623              :       static constexpr int max_digits10 = 0;
+    1624              : 
+    1625              : #define __INT_N_U201103(TYPE)                                           \
+    1626              :       static constexpr unsigned TYPE                                    \
+    1627              :       lowest() noexcept { return min(); }                               \
+    1628              :       static constexpr int max_digits10 = 0;
+    1629              : 
+    1630              : #else
+    1631              : #define __INT_N_201103(TYPE)
+    1632              : #define __INT_N_U201103(TYPE)
+    1633              : #endif
+    1634              : 
+    1635              : #if !defined(__STRICT_ANSI__)
+    1636              : #ifdef __GLIBCXX_TYPE_INT_N_0
+    1637              :   __INT_N(__GLIBCXX_TYPE_INT_N_0, __GLIBCXX_BITSIZE_INT_N_0,
+    1638              :           __INT_N_201103 (__GLIBCXX_TYPE_INT_N_0),
+    1639              :           __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_0))
+    1640              : #endif
+    1641              : #ifdef __GLIBCXX_TYPE_INT_N_1
+    1642              :   __INT_N (__GLIBCXX_TYPE_INT_N_1, __GLIBCXX_BITSIZE_INT_N_1,
+    1643              :           __INT_N_201103 (__GLIBCXX_TYPE_INT_N_1),
+    1644              :           __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_1))
+    1645              : #endif
+    1646              : #ifdef __GLIBCXX_TYPE_INT_N_2
+    1647              :   __INT_N (__GLIBCXX_TYPE_INT_N_2, __GLIBCXX_BITSIZE_INT_N_2,
+    1648              :           __INT_N_201103 (__GLIBCXX_TYPE_INT_N_2),
+    1649              :           __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_2))
+    1650              : #endif
+    1651              : #ifdef __GLIBCXX_TYPE_INT_N_3
+    1652              :   __INT_N (__GLIBCXX_TYPE_INT_N_3, __GLIBCXX_BITSIZE_INT_N_3,
+    1653              :           __INT_N_201103 (__GLIBCXX_TYPE_INT_N_3),
+    1654              :           __INT_N_U201103 (__GLIBCXX_TYPE_INT_N_3))
+    1655              : #endif
+    1656              : 
+    1657              : #elif defined __STRICT_ANSI__ && defined __SIZEOF_INT128__
+    1658              :   __INT_N(__int128, 128,
+    1659              :           __INT_N_201103 (__int128),
+    1660              :           __INT_N_U201103 (__int128))
+    1661              : #endif
+    1662              : 
+    1663              : #undef __INT_N
+    1664              : #undef __INT_N_201103
+    1665              : #undef __INT_N_U201103
+    1666              : 
+    1667              : 
+    1668              :   /// numeric_limits<float> specialization.
+    1669              :   template<>
+    1670              :     struct numeric_limits<float>
+    1671              :     {
+    1672              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+    1673              : 
+    1674              :       static _GLIBCXX_CONSTEXPR float
+    1675              :       min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; }
+    1676              : 
+    1677              :       static _GLIBCXX_CONSTEXPR float
+    1678              :       max() _GLIBCXX_USE_NOEXCEPT { return __FLT_MAX__; }
+    1679              : 
+    1680              : #if __cplusplus >= 201103L
+    1681              :       static constexpr float
+    1682              :       lowest() noexcept { return -__FLT_MAX__; }
+    1683              : #endif
+    1684              : 
+    1685              :       static _GLIBCXX_USE_CONSTEXPR int digits = __FLT_MANT_DIG__;
+    1686              :       static _GLIBCXX_USE_CONSTEXPR int digits10 = __FLT_DIG__;
+    1687              : #if __cplusplus >= 201103L
+    1688              :       static constexpr int max_digits10
+    1689              :          = __glibcxx_max_digits10 (__FLT_MANT_DIG__);
+    1690              : #endif
+    1691              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
+    1692              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
+    1693              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
+    1694              :       static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
+    1695              : 
+    1696              :       static _GLIBCXX_CONSTEXPR float
+    1697              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return __FLT_EPSILON__; }
+    1698              : 
+    1699              :       static _GLIBCXX_CONSTEXPR float
+    1700              :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5F; }
+    1701              : 
+    1702              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = __FLT_MIN_EXP__;
+    1703              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __FLT_MIN_10_EXP__;
+    1704              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = __FLT_MAX_EXP__;
+    1705              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __FLT_MAX_10_EXP__;
+    1706              : 
+    1707              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __FLT_HAS_INFINITY__;
+    1708              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __FLT_HAS_QUIET_NAN__;
+    1709              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
+    1710              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+    1711              :         = bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent;
+    1712              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+    1713              :        = __glibcxx_float_has_denorm_loss;
+    1714              : 
+    1715              :       static _GLIBCXX_CONSTEXPR float
+    1716              :       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_valf(); }
+    1717              : 
+    1718              :       static _GLIBCXX_CONSTEXPR float
+    1719              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanf(""); }
+    1720              : 
+    1721              :       static _GLIBCXX_CONSTEXPR float
+    1722              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansf(""); }
+    1723              : 
+    1724              :       static _GLIBCXX_CONSTEXPR float
+    1725              :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __FLT_DENORM_MIN__; }
+    1726              : 
+    1727              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
+    1728              :         = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
+    1729              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+    1730              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
+    1731              : 
+    1732              :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_float_traps;
+    1733              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before
+    1734              :        = __glibcxx_float_tinyness_before;
+    1735              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
+    1736              :        = round_to_nearest;
+    1737              :     };
+    1738              : 
+    1739              : #undef __glibcxx_float_has_denorm_loss
+    1740              : #undef __glibcxx_float_traps
+    1741              : #undef __glibcxx_float_tinyness_before
+    1742              : 
+    1743              :   /// numeric_limits<double> specialization.
+    1744              :   template<>
+    1745              :     struct numeric_limits<double>
+    1746              :     {
+    1747              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+    1748              : 
+    1749              :       static _GLIBCXX_CONSTEXPR double
+    1750              :       min() _GLIBCXX_USE_NOEXCEPT { return __DBL_MIN__; }
+    1751              : 
+    1752              :       static _GLIBCXX_CONSTEXPR double
+    1753              :       max() _GLIBCXX_USE_NOEXCEPT { return __DBL_MAX__; }
+    1754              : 
+    1755              : #if __cplusplus >= 201103L
+    1756              :       static constexpr double
+    1757           70 :       lowest() noexcept { return -__DBL_MAX__; }
+    1758              : #endif
+    1759              : 
+    1760              :       static _GLIBCXX_USE_CONSTEXPR int digits = __DBL_MANT_DIG__;
+    1761              :       static _GLIBCXX_USE_CONSTEXPR int digits10 = __DBL_DIG__;
+    1762              : #if __cplusplus >= 201103L
+    1763              :       static constexpr int max_digits10
+    1764              :          = __glibcxx_max_digits10 (__DBL_MANT_DIG__);
+    1765              : #endif
+    1766              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
+    1767              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
+    1768              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
+    1769              :       static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
+    1770              : 
+    1771              :       static _GLIBCXX_CONSTEXPR double
+    1772              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return __DBL_EPSILON__; }
+    1773              : 
+    1774              :       static _GLIBCXX_CONSTEXPR double
+    1775              :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5; }
+    1776              : 
+    1777              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = __DBL_MIN_EXP__;
+    1778              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __DBL_MIN_10_EXP__;
+    1779              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = __DBL_MAX_EXP__;
+    1780              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __DBL_MAX_10_EXP__;
+    1781              : 
+    1782              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __DBL_HAS_INFINITY__;
+    1783              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __DBL_HAS_QUIET_NAN__;
+    1784              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
+    1785              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+    1786              :         = bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent;
+    1787              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+    1788              :         = __glibcxx_double_has_denorm_loss;
+    1789              : 
+    1790              :       static _GLIBCXX_CONSTEXPR double
+    1791              :       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_val(); }
+    1792              : 
+    1793              :       static _GLIBCXX_CONSTEXPR double
+    1794              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nan(""); }
+    1795              : 
+    1796              :       static _GLIBCXX_CONSTEXPR double
+    1797              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nans(""); }
+    1798              : 
+    1799              :       static _GLIBCXX_CONSTEXPR double
+    1800              :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __DBL_DENORM_MIN__; }
+    1801              : 
+    1802              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
+    1803              :         = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
+    1804              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+    1805              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
+    1806              : 
+    1807              :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_double_traps;
+    1808              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before
+    1809              :        = __glibcxx_double_tinyness_before;
+    1810              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style
+    1811              :        = round_to_nearest;
+    1812              :     };
+    1813              : 
+    1814              : #undef __glibcxx_double_has_denorm_loss
+    1815              : #undef __glibcxx_double_traps
+    1816              : #undef __glibcxx_double_tinyness_before
+    1817              : 
+    1818              :   /// numeric_limits<long double> specialization.
+    1819              :   template<>
+    1820              :     struct numeric_limits<long double>
+    1821              :     {
+    1822              :       static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+    1823              : 
+    1824              :       static _GLIBCXX_CONSTEXPR long double
+    1825              :       min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MIN__; }
+    1826              : 
+    1827              :       static _GLIBCXX_CONSTEXPR long double
+    1828              :       max() _GLIBCXX_USE_NOEXCEPT { return __LDBL_MAX__; }
+    1829              : 
+    1830              : #if __cplusplus >= 201103L
+    1831              :       static constexpr long double
+    1832              :       lowest() noexcept { return -__LDBL_MAX__; }
+    1833              : #endif
+    1834              : 
+    1835              :       static _GLIBCXX_USE_CONSTEXPR int digits = __LDBL_MANT_DIG__;
+    1836              :       static _GLIBCXX_USE_CONSTEXPR int digits10 = __LDBL_DIG__;
+    1837              : #if __cplusplus >= 201103L
+    1838              :       static _GLIBCXX_USE_CONSTEXPR int max_digits10
+    1839              :          = __glibcxx_max_digits10 (__LDBL_MANT_DIG__);
+    1840              : #endif
+    1841              :       static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
+    1842              :       static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
+    1843              :       static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
+    1844              :       static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
+    1845              : 
+    1846              :       static _GLIBCXX_CONSTEXPR long double
+    1847              :       epsilon() _GLIBCXX_USE_NOEXCEPT { return __LDBL_EPSILON__; }
+    1848              : 
+    1849              :       static _GLIBCXX_CONSTEXPR long double
+    1850              :       round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5L; }
+    1851              : 
+    1852              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent = __LDBL_MIN_EXP__;
+    1853              :       static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = __LDBL_MIN_10_EXP__;
+    1854              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent = __LDBL_MAX_EXP__;
+    1855              :       static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = __LDBL_MAX_10_EXP__;
+    1856              : 
+    1857              :       static _GLIBCXX_USE_CONSTEXPR bool has_infinity = __LDBL_HAS_INFINITY__;
+    1858              :       static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = __LDBL_HAS_QUIET_NAN__;
+    1859              :       static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
+    1860              :       static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+    1861              :         = bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent;
+    1862              :       static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
+    1863              :         = __glibcxx_long_double_has_denorm_loss;
+    1864              : 
+    1865              :       static _GLIBCXX_CONSTEXPR long double
+    1866              :       infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_vall(); }
+    1867              : 
+    1868              :       static _GLIBCXX_CONSTEXPR long double
+    1869              :       quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanl(""); }
+    1870              : 
+    1871              :       static _GLIBCXX_CONSTEXPR long double
+    1872              :       signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansl(""); }
+    1873              : 
+    1874              :       static _GLIBCXX_CONSTEXPR long double
+    1875              :       denorm_min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_DENORM_MIN__; }
+    1876              : 
+    1877              :       static _GLIBCXX_USE_CONSTEXPR bool is_iec559
+    1878              :         = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
+    1879              :       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+    1880              :       static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
+    1881              : 
+    1882              :       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_long_double_traps;
+    1883              :       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before =
+    1884              :                                          __glibcxx_long_double_tinyness_before;
+    1885              :       static _GLIBCXX_USE_CONSTEXPR float_round_style round_style =
+    1886              :                                                       round_to_nearest;
+    1887              :     };
+    1888              : 
+    1889              : #undef __glibcxx_long_double_has_denorm_loss
+    1890              : #undef __glibcxx_long_double_traps
+    1891              : #undef __glibcxx_long_double_tinyness_before
+    1892              : 
+    1893              : #if __cplusplus > 202002L
+    1894              : 
+    1895              : #define __glibcxx_concat3_(P,M,S) P ## M ## S
+    1896              : #define __glibcxx_concat3(P,M,S) __glibcxx_concat3_ (P,M,S)
+    1897              : 
+    1898              : #define __glibcxx_float_n(BITSIZE)                                      \
+    1899              :   __extension__                                                         \
+    1900              :   template<>                                                              \
+    1901              :     struct numeric_limits<_Float##BITSIZE>                                \
+    1902              :     {                                                                   \
+    1903              :       static constexpr bool is_specialized = true;                      \
+    1904              :                                                                         \
+    1905              :       static constexpr _Float##BITSIZE                                  \
+    1906              :       min() noexcept                                                    \
+    1907              :       { return __glibcxx_concat3 (__FLT, BITSIZE, _MIN__); }            \
+    1908              :                                                                         \
+    1909              :       static constexpr _Float##BITSIZE                                  \
+    1910              :       max() noexcept                                                    \
+    1911              :       { return __glibcxx_concat3 (__FLT, BITSIZE, _MAX__); }            \
+    1912              :                                                                         \
+    1913              :       static constexpr _Float##BITSIZE                                  \
+    1914              :       lowest() noexcept                                                 \
+    1915              :       { return -__glibcxx_concat3 (__FLT, BITSIZE, _MAX__); }           \
+    1916              :                                                                         \
+    1917              :       static constexpr int digits                                       \
+    1918              :         = __glibcxx_concat3 (__FLT, BITSIZE, _MANT_DIG__);              \
+    1919              :       static constexpr int digits10                                     \
+    1920              :         = __glibcxx_concat3 (__FLT, BITSIZE, _DIG__);                   \
+    1921              :       static constexpr int max_digits10                                 \
+    1922              :         = __glibcxx_max_digits10 (__glibcxx_concat3 (__FLT, BITSIZE,    \
+    1923              :                                                      _MANT_DIG__));     \
+    1924              :       static constexpr bool is_signed = true;                           \
+    1925              :       static constexpr bool is_integer = false;                         \
+    1926              :       static constexpr bool is_exact = false;                           \
+    1927              :       static constexpr int radix = __FLT_RADIX__;                       \
+    1928              :                                                                         \
+    1929              :       static constexpr _Float##BITSIZE                                  \
+    1930              :       epsilon() noexcept                                                \
+    1931              :       { return __glibcxx_concat3 (__FLT, BITSIZE, _EPSILON__); }        \
+    1932              :                                                                         \
+    1933              :       static constexpr _Float##BITSIZE                                  \
+    1934              :       round_error() noexcept { return 0.5F##BITSIZE; }                  \
+    1935              :                                                                         \
+    1936              :       static constexpr int min_exponent                                 \
+    1937              :         = __glibcxx_concat3 (__FLT, BITSIZE, _MIN_EXP__);               \
+    1938              :       static constexpr int min_exponent10                               \
+    1939              :         = __glibcxx_concat3 (__FLT, BITSIZE, _MIN_10_EXP__);            \
+    1940              :       static constexpr int max_exponent                                 \
+    1941              :         = __glibcxx_concat3 (__FLT, BITSIZE, _MAX_EXP__);               \
+    1942              :       static constexpr int max_exponent10                               \
+    1943              :         = __glibcxx_concat3 (__FLT, BITSIZE, _MAX_10_EXP__);            \
+    1944              :                                                                         \
+    1945              :       static constexpr bool has_infinity                                \
+    1946              :         = __glibcxx_concat3 (__FLT, BITSIZE, _HAS_INFINITY__);          \
+    1947              :       static constexpr bool has_quiet_NaN                               \
+    1948              :         = __glibcxx_concat3 (__FLT, BITSIZE, _HAS_QUIET_NAN__);         \
+    1949              :       static constexpr bool has_signaling_NaN                           \
+    1950              :         = has_quiet_NaN;                                                \
+    1951              :       static constexpr float_denorm_style has_denorm                    \
+    1952              :         = bool(__glibcxx_concat3 (__FLT, BITSIZE, _HAS_DENORM__))       \
+    1953              :           ? denorm_present : denorm_absent;                             \
+    1954              :       static constexpr bool has_denorm_loss = false;                    \
+    1955              :                                                                         \
+    1956              :       static constexpr _Float##BITSIZE                                  \
+    1957              :       infinity() noexcept                                               \
+    1958              :       { return __builtin_huge_valf##BITSIZE(); }                        \
+    1959              :                                                                         \
+    1960              :       static constexpr _Float##BITSIZE                                  \
+    1961              :       quiet_NaN() noexcept                                              \
+    1962              :       { return __builtin_nanf##BITSIZE(""); }                         \
+    1963              :                                                                         \
+    1964              :       static constexpr _Float##BITSIZE                                  \
+    1965              :       signaling_NaN() noexcept                                          \
+    1966              :       { return __builtin_nansf##BITSIZE(""); }                                \
+    1967              :                                                                         \
+    1968              :       static constexpr _Float##BITSIZE                                  \
+    1969              :       denorm_min() noexcept                                             \
+    1970              :       { return __glibcxx_concat3 (__FLT, BITSIZE, _DENORM_MIN__); }     \
+    1971              :                                                                         \
+    1972              :       static constexpr bool is_iec559                                   \
+    1973              :         = has_infinity && has_quiet_NaN && has_denorm == denorm_present;\
+    1974              :       static constexpr bool is_bounded = true;                          \
+    1975              :       static constexpr bool is_modulo = false;                          \
+    1976              :                                                                         \
+    1977              :       static constexpr bool traps = false;                              \
+    1978              :       static constexpr bool tinyness_before = false;                    \
+    1979              :       static constexpr float_round_style round_style                    \
+    1980              :         = round_to_nearest;                                             \
+    1981              :     };                                                                  \
+    1982              : 
+    1983              : #ifdef __STDCPP_FLOAT16_T__
+    1984              : __glibcxx_float_n(16)
+    1985              : #endif
+    1986              : #ifdef __STDCPP_FLOAT32_T__
+    1987              : __glibcxx_float_n(32)
+    1988              : #endif
+    1989              : #ifdef __STDCPP_FLOAT64_T__
+    1990              : __glibcxx_float_n(64)
+    1991              : #endif
+    1992              : #ifdef __STDCPP_FLOAT128_T__
+    1993              : __glibcxx_float_n(128)
+    1994              : #endif
+    1995              : #undef __glibcxx_float_n
+    1996              : #undef __glibcxx_concat3
+    1997              : #undef __glibcxx_concat3_
+    1998              : 
+    1999              : #ifdef __STDCPP_BFLOAT16_T__
+    2000              :   __extension__
+    2001              :   template<>
+    2002              :     struct numeric_limits<__gnu_cxx::__bfloat16_t>
+    2003              :     {
+    2004              :       static constexpr bool is_specialized = true;
+    2005              : 
+    2006              :       static constexpr __gnu_cxx::__bfloat16_t
+    2007              :       min() noexcept
+    2008              :       { return __BFLT16_MIN__; }
+    2009              : 
+    2010              :       static constexpr __gnu_cxx::__bfloat16_t
+    2011              :       max() noexcept
+    2012              :       { return __BFLT16_MAX__; }
+    2013              : 
+    2014              :       static constexpr __gnu_cxx::__bfloat16_t
+    2015              :       lowest() noexcept
+    2016              :       { return -__BFLT16_MAX__; }
+    2017              : 
+    2018              :       static constexpr int digits = __BFLT16_MANT_DIG__;
+    2019              :       static constexpr int digits10 = __BFLT16_DIG__;
+    2020              :       static constexpr int max_digits10
+    2021              :         = __glibcxx_max_digits10 (__BFLT16_MANT_DIG__);
+    2022              :       static constexpr bool is_signed = true;
+    2023              :       static constexpr bool is_integer = false;
+    2024              :       static constexpr bool is_exact = false;
+    2025              :       static constexpr int radix = __FLT_RADIX__;
+    2026              : 
+    2027              :       static constexpr __gnu_cxx::__bfloat16_t
+    2028              :       epsilon() noexcept
+    2029              :       { return __BFLT16_EPSILON__; }
+    2030              : 
+    2031              :       static constexpr __gnu_cxx::__bfloat16_t
+    2032              :       round_error() noexcept { return 0.5BF16; }
+    2033              : 
+    2034              :       static constexpr int min_exponent = __BFLT16_MIN_EXP__;
+    2035              :       static constexpr int min_exponent10 = __BFLT16_MIN_10_EXP__;
+    2036              :       static constexpr int max_exponent = __BFLT16_MAX_EXP__;
+    2037              :       static constexpr int max_exponent10 = __BFLT16_MAX_10_EXP__;
+    2038              : 
+    2039              :       static constexpr bool has_infinity = __BFLT16_HAS_INFINITY__;
+    2040              :       static constexpr bool has_quiet_NaN = __BFLT16_HAS_QUIET_NAN__;
+    2041              :       static constexpr bool has_signaling_NaN = has_quiet_NaN;
+    2042              :       static constexpr float_denorm_style has_denorm
+    2043              :         = bool(__BFLT16_HAS_DENORM__)
+    2044              :           ? denorm_present : denorm_absent;
+    2045              :       static constexpr bool has_denorm_loss = false;
+    2046              : 
+    2047              :       static constexpr __gnu_cxx::__bfloat16_t
+    2048              :       infinity() noexcept
+    2049              :       { return __gnu_cxx::__bfloat16_t(__builtin_huge_valf()); }
+    2050              : 
+    2051              :       static constexpr __gnu_cxx::__bfloat16_t
+    2052              :       quiet_NaN() noexcept
+    2053              :       { return __gnu_cxx::__bfloat16_t(__builtin_nanf("")); }
+    2054              : 
+    2055              :       static constexpr __gnu_cxx::__bfloat16_t
+    2056              :       signaling_NaN() noexcept
+    2057              :       { return __builtin_nansf16b(""); }
+    2058              : 
+    2059              :       static constexpr __gnu_cxx::__bfloat16_t
+    2060              :       denorm_min() noexcept
+    2061              :       { return __BFLT16_DENORM_MIN__; }
+    2062              : 
+    2063              :       static constexpr bool is_iec559
+    2064              :         = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
+    2065              :       static constexpr bool is_bounded = true;
+    2066              :       static constexpr bool is_modulo = false;
+    2067              : 
+    2068              :       static constexpr bool traps = false;
+    2069              :       static constexpr bool tinyness_before = false;
+    2070              :       static constexpr float_round_style round_style = round_to_nearest;
+    2071              :     };
+    2072              : #endif
+    2073              : 
+    2074              : #endif
+    2075              : 
+    2076              : _GLIBCXX_END_NAMESPACE_VERSION
+    2077              : } // namespace
+    2078              : 
+    2079              : #undef __glibcxx_signed
+    2080              : #undef __glibcxx_min
+    2081              : #undef __glibcxx_max
+    2082              : #undef __glibcxx_digits
+    2083              : #undef __glibcxx_digits10
+    2084              : #undef __glibcxx_max_digits10
+    2085              : 
+    2086              : #endif // _GLIBCXX_NUMERIC_LIMITS
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/mutex.func-c.html b/html/usr/include/c++/13/mutex.func-c.html new file mode 100644 index 0000000..6db27b9 --- /dev/null +++ b/html/usr/include/c++/13/mutex.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/mutex - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - mutex (source / functions)CoverageTotalHit
Test:coverage.infoLines:87.5 %87
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt15recursive_mutex4lockEv3564
_ZNSt15recursive_mutex6unlockEv3564
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/mutex.func.html b/html/usr/include/c++/13/mutex.func.html new file mode 100644 index 0000000..e671f59 --- /dev/null +++ b/html/usr/include/c++/13/mutex.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/mutex - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - mutex (source / functions)CoverageTotalHit
Test:coverage.infoLines:87.5 %87
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt15recursive_mutex4lockEv3564
_ZNSt15recursive_mutex6unlockEv3564
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/mutex.gcov.html b/html/usr/include/c++/13/mutex.gcov.html new file mode 100644 index 0000000..09661d7 --- /dev/null +++ b/html/usr/include/c++/13/mutex.gcov.html @@ -0,0 +1,1093 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/mutex + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - mutex (source / functions)CoverageTotalHit
Test:coverage.infoLines:87.5 %87
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // <mutex> -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2003-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file include/mutex
+      26              :  *  This is a Standard C++ Library header.
+      27              :  */
+      28              : 
+      29              : #ifndef _GLIBCXX_MUTEX
+      30              : #define _GLIBCXX_MUTEX 1
+      31              : 
+      32              : #pragma GCC system_header
+      33              : 
+      34              : #include <bits/requires_hosted.h> // concurrency
+      35              : 
+      36              : #if __cplusplus < 201103L
+      37              : # include <bits/c++0x_warning.h>
+      38              : #else
+      39              : 
+      40              : #include <tuple>
+      41              : #include <exception>
+      42              : #include <type_traits>
+      43              : #include <bits/chrono.h>
+      44              : #include <bits/error_constants.h>
+      45              : #include <bits/std_mutex.h>
+      46              : #include <bits/unique_lock.h>
+      47              : #if ! _GTHREAD_USE_MUTEX_TIMEDLOCK
+      48              : # include <condition_variable>
+      49              : # include <thread>
+      50              : #endif
+      51              : #include <ext/atomicity.h>     // __gnu_cxx::__is_single_threaded
+      52              : 
+      53              : #if defined _GLIBCXX_HAS_GTHREADS && ! defined _GLIBCXX_HAVE_TLS
+      54              : # include <bits/std_function.h>  // std::function
+      55              : #endif
+      56              : 
+      57              : namespace std _GLIBCXX_VISIBILITY(default)
+      58              : {
+      59              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      60              : 
+      61              :   /**
+      62              :    * @addtogroup mutexes
+      63              :    * @{
+      64              :    */
+      65              : 
+      66              : #ifdef _GLIBCXX_HAS_GTHREADS
+      67              :   /// @cond undocumented
+      68              : 
+      69              :   // Common base class for std::recursive_mutex and std::recursive_timed_mutex
+      70              :   class __recursive_mutex_base
+      71              :   {
+      72              :   protected:
+      73              :     typedef __gthread_recursive_mutex_t         __native_type;
+      74              : 
+      75              :     __recursive_mutex_base(const __recursive_mutex_base&) = delete;
+      76              :     __recursive_mutex_base& operator=(const __recursive_mutex_base&) = delete;
+      77              : 
+      78              : #ifdef __GTHREAD_RECURSIVE_MUTEX_INIT
+      79              :     __native_type  _M_mutex = __GTHREAD_RECURSIVE_MUTEX_INIT;
+      80              : 
+      81              :     __recursive_mutex_base() = default;
+      82              : #else
+      83              :     __native_type  _M_mutex;
+      84              : 
+      85              :     __recursive_mutex_base()
+      86              :     {
+      87              :       // XXX EAGAIN, ENOMEM, EPERM, EBUSY(may), EINVAL(may)
+      88              :       __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION(&_M_mutex);
+      89              :     }
+      90              : 
+      91              :     ~__recursive_mutex_base()
+      92              :     { __gthread_recursive_mutex_destroy(&_M_mutex); }
+      93              : #endif
+      94              :   };
+      95              :   /// @endcond
+      96              : 
+      97              :   /** The standard recursive mutex type.
+      98              :    *
+      99              :    * A recursive mutex can be locked more than once by the same thread.
+     100              :    * Other threads cannot lock the mutex until the owning thread unlocks it
+     101              :    * as many times as it was locked.
+     102              :    *
+     103              :    * @headerfile mutex
+     104              :    * @since C++11
+     105              :    */
+     106              :   class recursive_mutex : private __recursive_mutex_base
+     107              :   {
+     108              :   public:
+     109              :     typedef __native_type*                      native_handle_type;
+     110              : 
+     111              :     recursive_mutex() = default;
+     112              :     ~recursive_mutex() = default;
+     113              : 
+     114              :     recursive_mutex(const recursive_mutex&) = delete;
+     115              :     recursive_mutex& operator=(const recursive_mutex&) = delete;
+     116              : 
+     117              :     void
+     118         3564 :     lock()
+     119              :     {
+     120         3564 :       int __e = __gthread_recursive_mutex_lock(&_M_mutex);
+     121              : 
+     122              :       // EINVAL, EAGAIN, EBUSY, EINVAL, EDEADLK(may)
+     123         3564 :       if (__e)
+     124            0 :         __throw_system_error(__e);
+     125         3564 :     }
+     126              : 
+     127              :     _GLIBCXX_NODISCARD
+     128              :     bool
+     129              :     try_lock() noexcept
+     130              :     {
+     131              :       // XXX EINVAL, EAGAIN, EBUSY
+     132              :       return !__gthread_recursive_mutex_trylock(&_M_mutex);
+     133              :     }
+     134              : 
+     135              :     void
+     136         3564 :     unlock()
+     137              :     {
+     138              :       // XXX EINVAL, EAGAIN, EBUSY
+     139         3564 :       __gthread_recursive_mutex_unlock(&_M_mutex);
+     140         3564 :     }
+     141              : 
+     142              :     native_handle_type
+     143              :     native_handle() noexcept
+     144              :     { return &_M_mutex; }
+     145              :   };
+     146              : 
+     147              : #if _GTHREAD_USE_MUTEX_TIMEDLOCK
+     148              :   /// @cond undocumented
+     149              : 
+     150              :   template<typename _Derived>
+     151              :     class __timed_mutex_impl
+     152              :     {
+     153              :     protected:
+     154              :       template<typename _Rep, typename _Period>
+     155              :         bool
+     156              :         _M_try_lock_for(const chrono::duration<_Rep, _Period>& __rtime)
+     157              :         {
+     158              : #if _GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK
+     159              :           using __clock = chrono::steady_clock;
+     160              : #else
+     161              :           using __clock = chrono::system_clock;
+     162              : #endif
+     163              : 
+     164              :           auto __rt = chrono::duration_cast<__clock::duration>(__rtime);
+     165              :           if (ratio_greater<__clock::period, _Period>())
+     166              :             ++__rt;
+     167              :           return _M_try_lock_until(__clock::now() + __rt);
+     168              :         }
+     169              : 
+     170              :       template<typename _Duration>
+     171              :         bool
+     172              :         _M_try_lock_until(const chrono::time_point<chrono::system_clock,
+     173              :                                                    _Duration>& __atime)
+     174              :         {
+     175              :           auto __s = chrono::time_point_cast<chrono::seconds>(__atime);
+     176              :           auto __ns = chrono::duration_cast<chrono::nanoseconds>(__atime - __s);
+     177              : 
+     178              :           __gthread_time_t __ts = {
+     179              :             static_cast<std::time_t>(__s.time_since_epoch().count()),
+     180              :             static_cast<long>(__ns.count())
+     181              :           };
+     182              : 
+     183              :           return static_cast<_Derived*>(this)->_M_timedlock(__ts);
+     184              :         }
+     185              : 
+     186              : #ifdef _GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK
+     187              :       template<typename _Duration>
+     188              :         bool
+     189              :         _M_try_lock_until(const chrono::time_point<chrono::steady_clock,
+     190              :                                                    _Duration>& __atime)
+     191              :         {
+     192              :           auto __s = chrono::time_point_cast<chrono::seconds>(__atime);
+     193              :           auto __ns = chrono::duration_cast<chrono::nanoseconds>(__atime - __s);
+     194              : 
+     195              :           __gthread_time_t __ts = {
+     196              :             static_cast<std::time_t>(__s.time_since_epoch().count()),
+     197              :             static_cast<long>(__ns.count())
+     198              :           };
+     199              : 
+     200              :           return static_cast<_Derived*>(this)->_M_clocklock(CLOCK_MONOTONIC,
+     201              :                                                             __ts);
+     202              :         }
+     203              : #endif
+     204              : 
+     205              :       template<typename _Clock, typename _Duration>
+     206              :         bool
+     207              :         _M_try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime)
+     208              :         {
+     209              : #if __cplusplus > 201703L
+     210              :           static_assert(chrono::is_clock_v<_Clock>);
+     211              : #endif
+     212              :           // The user-supplied clock may not tick at the same rate as
+     213              :           // steady_clock, so we must loop in order to guarantee that
+     214              :           // the timeout has expired before returning false.
+     215              :           auto __now = _Clock::now();
+     216              :           do {
+     217              :             auto __rtime = __atime - __now;
+     218              :             if (_M_try_lock_for(__rtime))
+     219              :               return true;
+     220              :             __now = _Clock::now();
+     221              :           } while (__atime > __now);
+     222              :           return false;
+     223              :         }
+     224              :     };
+     225              :   /// @endcond
+     226              : 
+     227              :   /** The standard timed mutex type.
+     228              :    *
+     229              :    * A non-recursive mutex that supports a timeout when trying to acquire the
+     230              :    * lock.
+     231              :    *
+     232              :    * @headerfile mutex
+     233              :    * @since C++11
+     234              :    */
+     235              :   class timed_mutex
+     236              :   : private __mutex_base, public __timed_mutex_impl<timed_mutex>
+     237              :   {
+     238              :   public:
+     239              :     typedef __native_type*                      native_handle_type;
+     240              : 
+     241              :     timed_mutex() = default;
+     242              :     ~timed_mutex() = default;
+     243              : 
+     244              :     timed_mutex(const timed_mutex&) = delete;
+     245              :     timed_mutex& operator=(const timed_mutex&) = delete;
+     246              : 
+     247              :     void
+     248              :     lock()
+     249              :     {
+     250              :       int __e = __gthread_mutex_lock(&_M_mutex);
+     251              : 
+     252              :       // EINVAL, EAGAIN, EBUSY, EINVAL, EDEADLK(may)
+     253              :       if (__e)
+     254              :         __throw_system_error(__e);
+     255              :     }
+     256              : 
+     257              :     _GLIBCXX_NODISCARD
+     258              :     bool
+     259              :     try_lock() noexcept
+     260              :     {
+     261              :       // XXX EINVAL, EAGAIN, EBUSY
+     262              :       return !__gthread_mutex_trylock(&_M_mutex);
+     263              :     }
+     264              : 
+     265              :     template <class _Rep, class _Period>
+     266              :       _GLIBCXX_NODISCARD
+     267              :       bool
+     268              :       try_lock_for(const chrono::duration<_Rep, _Period>& __rtime)
+     269              :       { return _M_try_lock_for(__rtime); }
+     270              : 
+     271              :     template <class _Clock, class _Duration>
+     272              :       _GLIBCXX_NODISCARD
+     273              :       bool
+     274              :       try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime)
+     275              :       { return _M_try_lock_until(__atime); }
+     276              : 
+     277              :     void
+     278              :     unlock()
+     279              :     {
+     280              :       // XXX EINVAL, EAGAIN, EBUSY
+     281              :       __gthread_mutex_unlock(&_M_mutex);
+     282              :     }
+     283              : 
+     284              :     native_handle_type
+     285              :     native_handle() noexcept
+     286              :     { return &_M_mutex; }
+     287              : 
+     288              :     private:
+     289              :       friend class __timed_mutex_impl<timed_mutex>;
+     290              : 
+     291              :       bool
+     292              :       _M_timedlock(const __gthread_time_t& __ts)
+     293              :       { return !__gthread_mutex_timedlock(&_M_mutex, &__ts); }
+     294              : 
+     295              : #if _GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK
+     296              :       bool
+     297              :       _M_clocklock(clockid_t __clockid, const __gthread_time_t& __ts)
+     298              :       { return !pthread_mutex_clocklock(&_M_mutex, __clockid, &__ts); }
+     299              : #endif
+     300              :   };
+     301              : 
+     302              :   /** The standard recursive timed mutex type.
+     303              :    *
+     304              :    * A recursive mutex that supports a timeout when trying to acquire the
+     305              :    * lock. A recursive mutex can be locked more than once by the same thread.
+     306              :    * Other threads cannot lock the mutex until the owning thread unlocks it
+     307              :    * as many times as it was locked.
+     308              :    *
+     309              :    * @headerfile mutex
+     310              :    * @since C++11
+     311              :    */
+     312              :   class recursive_timed_mutex
+     313              :   : private __recursive_mutex_base,
+     314              :     public __timed_mutex_impl<recursive_timed_mutex>
+     315              :   {
+     316              :   public:
+     317              :     typedef __native_type*                      native_handle_type;
+     318              : 
+     319              :     recursive_timed_mutex() = default;
+     320              :     ~recursive_timed_mutex() = default;
+     321              : 
+     322              :     recursive_timed_mutex(const recursive_timed_mutex&) = delete;
+     323              :     recursive_timed_mutex& operator=(const recursive_timed_mutex&) = delete;
+     324              : 
+     325              :     void
+     326              :     lock()
+     327              :     {
+     328              :       int __e = __gthread_recursive_mutex_lock(&_M_mutex);
+     329              : 
+     330              :       // EINVAL, EAGAIN, EBUSY, EINVAL, EDEADLK(may)
+     331              :       if (__e)
+     332              :         __throw_system_error(__e);
+     333              :     }
+     334              : 
+     335              :     _GLIBCXX_NODISCARD
+     336              :     bool
+     337              :     try_lock() noexcept
+     338              :     {
+     339              :       // XXX EINVAL, EAGAIN, EBUSY
+     340              :       return !__gthread_recursive_mutex_trylock(&_M_mutex);
+     341              :     }
+     342              : 
+     343              :     template <class _Rep, class _Period>
+     344              :       _GLIBCXX_NODISCARD
+     345              :       bool
+     346              :       try_lock_for(const chrono::duration<_Rep, _Period>& __rtime)
+     347              :       { return _M_try_lock_for(__rtime); }
+     348              : 
+     349              :     template <class _Clock, class _Duration>
+     350              :       _GLIBCXX_NODISCARD
+     351              :       bool
+     352              :       try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime)
+     353              :       { return _M_try_lock_until(__atime); }
+     354              : 
+     355              :     void
+     356              :     unlock()
+     357              :     {
+     358              :       // XXX EINVAL, EAGAIN, EBUSY
+     359              :       __gthread_recursive_mutex_unlock(&_M_mutex);
+     360              :     }
+     361              : 
+     362              :     native_handle_type
+     363              :     native_handle() noexcept
+     364              :     { return &_M_mutex; }
+     365              : 
+     366              :     private:
+     367              :       friend class __timed_mutex_impl<recursive_timed_mutex>;
+     368              : 
+     369              :       bool
+     370              :       _M_timedlock(const __gthread_time_t& __ts)
+     371              :       { return !__gthread_recursive_mutex_timedlock(&_M_mutex, &__ts); }
+     372              : 
+     373              : #ifdef _GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK
+     374              :       bool
+     375              :       _M_clocklock(clockid_t __clockid, const __gthread_time_t& __ts)
+     376              :       { return !pthread_mutex_clocklock(&_M_mutex, __clockid, &__ts); }
+     377              : #endif
+     378              :   };
+     379              : 
+     380              : #else // !_GTHREAD_USE_MUTEX_TIMEDLOCK
+     381              : 
+     382              :   /// timed_mutex
+     383              :   class timed_mutex
+     384              :   {
+     385              :     mutex               _M_mut;
+     386              :     condition_variable  _M_cv;
+     387              :     bool                _M_locked = false;
+     388              : 
+     389              :   public:
+     390              : 
+     391              :     timed_mutex() = default;
+     392              :     ~timed_mutex() { __glibcxx_assert( !_M_locked ); }
+     393              : 
+     394              :     timed_mutex(const timed_mutex&) = delete;
+     395              :     timed_mutex& operator=(const timed_mutex&) = delete;
+     396              : 
+     397              :     void
+     398              :     lock()
+     399              :     {
+     400              :       unique_lock<mutex> __lk(_M_mut);
+     401              :       _M_cv.wait(__lk, [&]{ return !_M_locked; });
+     402              :       _M_locked = true;
+     403              :     }
+     404              : 
+     405              :     _GLIBCXX_NODISCARD
+     406              :     bool
+     407              :     try_lock()
+     408              :     {
+     409              :       lock_guard<mutex> __lk(_M_mut);
+     410              :       if (_M_locked)
+     411              :         return false;
+     412              :       _M_locked = true;
+     413              :       return true;
+     414              :     }
+     415              : 
+     416              :     template<typename _Rep, typename _Period>
+     417              :       _GLIBCXX_NODISCARD
+     418              :       bool
+     419              :       try_lock_for(const chrono::duration<_Rep, _Period>& __rtime)
+     420              :       {
+     421              :         unique_lock<mutex> __lk(_M_mut);
+     422              :         if (!_M_cv.wait_for(__lk, __rtime, [&]{ return !_M_locked; }))
+     423              :           return false;
+     424              :         _M_locked = true;
+     425              :         return true;
+     426              :       }
+     427              : 
+     428              :     template<typename _Clock, typename _Duration>
+     429              :       _GLIBCXX_NODISCARD
+     430              :       bool
+     431              :       try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime)
+     432              :       {
+     433              :         unique_lock<mutex> __lk(_M_mut);
+     434              :         if (!_M_cv.wait_until(__lk, __atime, [&]{ return !_M_locked; }))
+     435              :           return false;
+     436              :         _M_locked = true;
+     437              :         return true;
+     438              :       }
+     439              : 
+     440              :     void
+     441              :     unlock()
+     442              :     {
+     443              :       lock_guard<mutex> __lk(_M_mut);
+     444              :       __glibcxx_assert( _M_locked );
+     445              :       _M_locked = false;
+     446              :       _M_cv.notify_one();
+     447              :     }
+     448              :   };
+     449              : 
+     450              :   /// recursive_timed_mutex
+     451              :   class recursive_timed_mutex
+     452              :   {
+     453              :     mutex               _M_mut;
+     454              :     condition_variable  _M_cv;
+     455              :     thread::id          _M_owner;
+     456              :     unsigned            _M_count = 0;
+     457              : 
+     458              :     // Predicate type that tests whether the current thread can lock a mutex.
+     459              :     struct _Can_lock
+     460              :     {
+     461              :       // Returns true if the mutex is unlocked or is locked by _M_caller.
+     462              :       bool
+     463              :       operator()() const noexcept
+     464              :       { return _M_mx->_M_count == 0 || _M_mx->_M_owner == _M_caller; }
+     465              : 
+     466              :       const recursive_timed_mutex* _M_mx;
+     467              :       thread::id _M_caller;
+     468              :     };
+     469              : 
+     470              :   public:
+     471              : 
+     472              :     recursive_timed_mutex() = default;
+     473              :     ~recursive_timed_mutex() { __glibcxx_assert( _M_count == 0 ); }
+     474              : 
+     475              :     recursive_timed_mutex(const recursive_timed_mutex&) = delete;
+     476              :     recursive_timed_mutex& operator=(const recursive_timed_mutex&) = delete;
+     477              : 
+     478              :     void
+     479              :     lock()
+     480              :     {
+     481              :       auto __id = this_thread::get_id();
+     482              :       _Can_lock __can_lock{this, __id};
+     483              :       unique_lock<mutex> __lk(_M_mut);
+     484              :       _M_cv.wait(__lk, __can_lock);
+     485              :       if (_M_count == -1u)
+     486              :         __throw_system_error(EAGAIN); // [thread.timedmutex.recursive]/3
+     487              :       _M_owner = __id;
+     488              :       ++_M_count;
+     489              :     }
+     490              : 
+     491              :     _GLIBCXX_NODISCARD
+     492              :     bool
+     493              :     try_lock()
+     494              :     {
+     495              :       auto __id = this_thread::get_id();
+     496              :       _Can_lock __can_lock{this, __id};
+     497              :       lock_guard<mutex> __lk(_M_mut);
+     498              :       if (!__can_lock())
+     499              :         return false;
+     500              :       if (_M_count == -1u)
+     501              :         return false;
+     502              :       _M_owner = __id;
+     503              :       ++_M_count;
+     504              :       return true;
+     505              :     }
+     506              : 
+     507              :     template<typename _Rep, typename _Period>
+     508              :       _GLIBCXX_NODISCARD
+     509              :       bool
+     510              :       try_lock_for(const chrono::duration<_Rep, _Period>& __rtime)
+     511              :       {
+     512              :         auto __id = this_thread::get_id();
+     513              :         _Can_lock __can_lock{this, __id};
+     514              :         unique_lock<mutex> __lk(_M_mut);
+     515              :         if (!_M_cv.wait_for(__lk, __rtime, __can_lock))
+     516              :           return false;
+     517              :         if (_M_count == -1u)
+     518              :           return false;
+     519              :         _M_owner = __id;
+     520              :         ++_M_count;
+     521              :         return true;
+     522              :       }
+     523              : 
+     524              :     template<typename _Clock, typename _Duration>
+     525              :       _GLIBCXX_NODISCARD
+     526              :       bool
+     527              :       try_lock_until(const chrono::time_point<_Clock, _Duration>& __atime)
+     528              :       {
+     529              :         auto __id = this_thread::get_id();
+     530              :         _Can_lock __can_lock{this, __id};
+     531              :         unique_lock<mutex> __lk(_M_mut);
+     532              :         if (!_M_cv.wait_until(__lk, __atime, __can_lock))
+     533              :           return false;
+     534              :         if (_M_count == -1u)
+     535              :           return false;
+     536              :         _M_owner = __id;
+     537              :         ++_M_count;
+     538              :         return true;
+     539              :       }
+     540              : 
+     541              :     void
+     542              :     unlock()
+     543              :     {
+     544              :       lock_guard<mutex> __lk(_M_mut);
+     545              :       __glibcxx_assert( _M_owner == this_thread::get_id() );
+     546              :       __glibcxx_assert( _M_count > 0 );
+     547              :       if (--_M_count == 0)
+     548              :         {
+     549              :           _M_owner = {};
+     550              :           _M_cv.notify_one();
+     551              :         }
+     552              :     }
+     553              :   };
+     554              : 
+     555              : #endif
+     556              : #endif // _GLIBCXX_HAS_GTHREADS
+     557              : 
+     558              :   /// @cond undocumented
+     559              :   namespace __detail
+     560              :   {
+     561              :     // Lock the last lockable, after all previous ones are locked.
+     562              :     template<typename _Lockable>
+     563              :       inline int
+     564              :       __try_lock_impl(_Lockable& __l)
+     565              :       {
+     566              :         if (unique_lock<_Lockable> __lock{__l, try_to_lock})
+     567              :           {
+     568              :             __lock.release();
+     569              :             return -1;
+     570              :           }
+     571              :         else
+     572              :           return 0;
+     573              :       }
+     574              : 
+     575              :     // Lock each lockable in turn.
+     576              :     // Use iteration if all lockables are the same type, recursion otherwise.
+     577              :     template<typename _L0, typename... _Lockables>
+     578              :       inline int
+     579              :       __try_lock_impl(_L0& __l0, _Lockables&... __lockables)
+     580              :       {
+     581              : #if __cplusplus >= 201703L
+     582              :         if constexpr ((is_same_v<_L0, _Lockables> && ...))
+     583              :           {
+     584              :             constexpr int _Np = 1 + sizeof...(_Lockables);
+     585              :             unique_lock<_L0> __locks[_Np] = {
+     586              :                 {__l0, defer_lock}, {__lockables, defer_lock}...
+     587              :             };
+     588              :             for (int __i = 0; __i < _Np; ++__i)
+     589              :               {
+     590              :                 if (!__locks[__i].try_lock())
+     591              :                   {
+     592              :                     const int __failed = __i;
+     593              :                     while (__i--)
+     594              :                       __locks[__i].unlock();
+     595              :                     return __failed;
+     596              :                   }
+     597              :               }
+     598              :             for (auto& __l : __locks)
+     599              :               __l.release();
+     600              :             return -1;
+     601              :           }
+     602              :         else
+     603              : #endif
+     604              :         if (unique_lock<_L0> __lock{__l0, try_to_lock})
+     605              :           {
+     606              :             int __idx = __detail::__try_lock_impl(__lockables...);
+     607              :             if (__idx == -1)
+     608              :               {
+     609              :                 __lock.release();
+     610              :                 return -1;
+     611              :               }
+     612              :             return __idx + 1;
+     613              :           }
+     614              :         else
+     615              :           return 0;
+     616              :       }
+     617              : 
+     618              :   } // namespace __detail
+     619              :   /// @endcond
+     620              : 
+     621              :   /** @brief Generic try_lock.
+     622              :    *  @param __l1 Meets Lockable requirements (try_lock() may throw).
+     623              :    *  @param __l2 Meets Lockable requirements (try_lock() may throw).
+     624              :    *  @param __l3 Meets Lockable requirements (try_lock() may throw).
+     625              :    *  @return Returns -1 if all try_lock() calls return true. Otherwise returns
+     626              :    *          a 0-based index corresponding to the argument that returned false.
+     627              :    *  @post Either all arguments are locked, or none will be.
+     628              :    *
+     629              :    *  Sequentially calls try_lock() on each argument.
+     630              :    */
+     631              :   template<typename _L1, typename _L2, typename... _L3>
+     632              :     _GLIBCXX_NODISCARD
+     633              :     inline int
+     634              :     try_lock(_L1& __l1, _L2& __l2, _L3&... __l3)
+     635              :     {
+     636              :       return __detail::__try_lock_impl(__l1, __l2, __l3...);
+     637              :     }
+     638              : 
+     639              :   /// @cond undocumented
+     640              :   namespace __detail
+     641              :   {
+     642              :     // This function can recurse up to N levels deep, for N = 1+sizeof...(L1).
+     643              :     // On each recursion the lockables are rotated left one position,
+     644              :     // e.g. depth 0: l0, l1, l2; depth 1: l1, l2, l0; depth 2: l2, l0, l1.
+     645              :     // When a call to l_i.try_lock() fails it recurses/returns to depth=i
+     646              :     // so that l_i is the first argument, and then blocks until l_i is locked.
+     647              :     template<typename _L0, typename... _L1>
+     648              :       void
+     649              :       __lock_impl(int& __i, int __depth, _L0& __l0, _L1&... __l1)
+     650              :       {
+     651              :         while (__i >= __depth)
+     652              :           {
+     653              :             if (__i == __depth)
+     654              :               {
+     655              :                 int __failed = 1; // index that couldn't be locked
+     656              :                 {
+     657              :                   unique_lock<_L0> __first(__l0);
+     658              :                   __failed += __detail::__try_lock_impl(__l1...);
+     659              :                   if (!__failed)
+     660              :                     {
+     661              :                       __i = -1; // finished
+     662              :                       __first.release();
+     663              :                       return;
+     664              :                     }
+     665              :                 }
+     666              : #if defined _GLIBCXX_HAS_GTHREADS && defined _GLIBCXX_USE_SCHED_YIELD
+     667              :                 __gthread_yield();
+     668              : #endif
+     669              :                 constexpr auto __n = 1 + sizeof...(_L1);
+     670              :                 __i = (__depth + __failed) % __n;
+     671              :               }
+     672              :             else // rotate left until l_i is first.
+     673              :               __detail::__lock_impl(__i, __depth + 1, __l1..., __l0);
+     674              :           }
+     675              :       }
+     676              : 
+     677              :   } // namespace __detail
+     678              :   /// @endcond
+     679              : 
+     680              :   /** @brief Generic lock.
+     681              :    *  @param __l1 Meets Lockable requirements (try_lock() may throw).
+     682              :    *  @param __l2 Meets Lockable requirements (try_lock() may throw).
+     683              :    *  @param __l3 Meets Lockable requirements (try_lock() may throw).
+     684              :    *  @throw An exception thrown by an argument's lock() or try_lock() member.
+     685              :    *  @post All arguments are locked.
+     686              :    *
+     687              :    *  All arguments are locked via a sequence of calls to lock(), try_lock()
+     688              :    *  and unlock().  If this function exits via an exception any locks that
+     689              :    *  were obtained will be released.
+     690              :    */
+     691              :   template<typename _L1, typename _L2, typename... _L3>
+     692              :     void
+     693              :     lock(_L1& __l1, _L2& __l2, _L3&... __l3)
+     694              :     {
+     695              : #if __cplusplus >= 201703L
+     696              :       if constexpr (is_same_v<_L1, _L2> && (is_same_v<_L1, _L3> && ...))
+     697              :         {
+     698              :           constexpr int _Np = 2 + sizeof...(_L3);
+     699              :           unique_lock<_L1> __locks[] = {
+     700              :               {__l1, defer_lock}, {__l2, defer_lock}, {__l3, defer_lock}...
+     701              :           };
+     702              :           int __first = 0;
+     703              :           do {
+     704              :             __locks[__first].lock();
+     705              :             for (int __j = 1; __j < _Np; ++__j)
+     706              :               {
+     707              :                 const int __idx = (__first + __j) % _Np;
+     708              :                 if (!__locks[__idx].try_lock())
+     709              :                   {
+     710              :                     for (int __k = __j; __k != 0; --__k)
+     711              :                       __locks[(__first + __k - 1) % _Np].unlock();
+     712              :                     __first = __idx;
+     713              :                     break;
+     714              :                   }
+     715              :               }
+     716              :           } while (!__locks[__first].owns_lock());
+     717              : 
+     718              :           for (auto& __l : __locks)
+     719              :             __l.release();
+     720              :         }
+     721              :       else
+     722              : #endif
+     723              :         {
+     724              :           int __i = 0;
+     725              :           __detail::__lock_impl(__i, 0, __l1, __l2, __l3...);
+     726              :         }
+     727              :     }
+     728              : 
+     729              : #if __cplusplus >= 201703L
+     730              : #define __cpp_lib_scoped_lock 201703L
+     731              :   /** @brief A scoped lock type for multiple lockable objects.
+     732              :    *
+     733              :    * A scoped_lock controls mutex ownership within a scope, releasing
+     734              :    * ownership in the destructor.
+     735              :    *
+     736              :    * @headerfile mutex
+     737              :    * @since C++17
+     738              :    */
+     739              :   template<typename... _MutexTypes>
+     740              :     class scoped_lock
+     741              :     {
+     742              :     public:
+     743              :       explicit scoped_lock(_MutexTypes&... __m) : _M_devices(std::tie(__m...))
+     744              :       { std::lock(__m...); }
+     745              : 
+     746              :       explicit scoped_lock(adopt_lock_t, _MutexTypes&... __m) noexcept
+     747              :       : _M_devices(std::tie(__m...))
+     748              :       { } // calling thread owns mutex
+     749              : 
+     750              :       ~scoped_lock()
+     751              :       { std::apply([](auto&... __m) { (__m.unlock(), ...); }, _M_devices); }
+     752              : 
+     753              :       scoped_lock(const scoped_lock&) = delete;
+     754              :       scoped_lock& operator=(const scoped_lock&) = delete;
+     755              : 
+     756              :     private:
+     757              :       tuple<_MutexTypes&...> _M_devices;
+     758              :     };
+     759              : 
+     760              :   template<>
+     761              :     class scoped_lock<>
+     762              :     {
+     763              :     public:
+     764              :       explicit scoped_lock() = default;
+     765              :       explicit scoped_lock(adopt_lock_t) noexcept { }
+     766              :       ~scoped_lock() = default;
+     767              : 
+     768              :       scoped_lock(const scoped_lock&) = delete;
+     769              :       scoped_lock& operator=(const scoped_lock&) = delete;
+     770              :     };
+     771              : 
+     772              :   template<typename _Mutex>
+     773              :     class scoped_lock<_Mutex>
+     774              :     {
+     775              :     public:
+     776              :       using mutex_type = _Mutex;
+     777              : 
+     778              :       explicit scoped_lock(mutex_type& __m) : _M_device(__m)
+     779              :       { _M_device.lock(); }
+     780              : 
+     781              :       explicit scoped_lock(adopt_lock_t, mutex_type& __m) noexcept
+     782              :       : _M_device(__m)
+     783              :       { } // calling thread owns mutex
+     784              : 
+     785              :       ~scoped_lock()
+     786              :       { _M_device.unlock(); }
+     787              : 
+     788              :       scoped_lock(const scoped_lock&) = delete;
+     789              :       scoped_lock& operator=(const scoped_lock&) = delete;
+     790              : 
+     791              :     private:
+     792              :       mutex_type&  _M_device;
+     793              :     };
+     794              : #endif // C++17
+     795              : 
+     796              : #ifdef _GLIBCXX_HAS_GTHREADS
+     797              :   /// Flag type used by std::call_once
+     798              :   struct once_flag
+     799              :   {
+     800              :     constexpr once_flag() noexcept = default;
+     801              : 
+     802              :     /// Deleted copy constructor
+     803              :     once_flag(const once_flag&) = delete;
+     804              :     /// Deleted assignment operator
+     805              :     once_flag& operator=(const once_flag&) = delete;
+     806              : 
+     807              :   private:
+     808              :     // For gthreads targets a pthread_once_t is used with pthread_once, but
+     809              :     // for most targets this doesn't work correctly for exceptional executions.
+     810              :     __gthread_once_t _M_once = __GTHREAD_ONCE_INIT;
+     811              : 
+     812              :     struct _Prepare_execution;
+     813              : 
+     814              :     template<typename _Callable, typename... _Args>
+     815              :       friend void
+     816              :       call_once(once_flag& __once, _Callable&& __f, _Args&&... __args);
+     817              :   };
+     818              : 
+     819              :   /// @cond undocumented
+     820              : # ifdef _GLIBCXX_HAVE_TLS
+     821              :   // If TLS is available use thread-local state for the type-erased callable
+     822              :   // that is being run by std::call_once in the current thread.
+     823              :   extern __thread void* __once_callable;
+     824              :   extern __thread void (*__once_call)();
+     825              : 
+     826              :   // RAII type to set up state for pthread_once call.
+     827              :   struct once_flag::_Prepare_execution
+     828              :   {
+     829              :     template<typename _Callable>
+     830              :       explicit
+     831              :       _Prepare_execution(_Callable& __c)
+     832              :       {
+     833              :         // Store address in thread-local pointer:
+     834              :         __once_callable = std::__addressof(__c);
+     835              :         // Trampoline function to invoke the closure via thread-local pointer:
+     836              :         __once_call = [] { (*static_cast<_Callable*>(__once_callable))(); };
+     837              :       }
+     838              : 
+     839              :     ~_Prepare_execution()
+     840              :     {
+     841              :       // PR libstdc++/82481
+     842              :       __once_callable = nullptr;
+     843              :       __once_call = nullptr;
+     844              :     }
+     845              : 
+     846              :     _Prepare_execution(const _Prepare_execution&) = delete;
+     847              :     _Prepare_execution& operator=(const _Prepare_execution&) = delete;
+     848              :   };
+     849              : 
+     850              : # else
+     851              :   // Without TLS use a global std::mutex and store the callable in a
+     852              :   // global std::function.
+     853              :   extern function<void()> __once_functor;
+     854              : 
+     855              :   extern void
+     856              :   __set_once_functor_lock_ptr(unique_lock<mutex>*);
+     857              : 
+     858              :   extern mutex&
+     859              :   __get_once_mutex();
+     860              : 
+     861              :   // RAII type to set up state for pthread_once call.
+     862              :   struct once_flag::_Prepare_execution
+     863              :   {
+     864              :     template<typename _Callable>
+     865              :       explicit
+     866              :       _Prepare_execution(_Callable& __c)
+     867              :       {
+     868              :         // Store the callable in the global std::function
+     869              :         __once_functor = __c;
+     870              :         __set_once_functor_lock_ptr(&_M_functor_lock);
+     871              :       }
+     872              : 
+     873              :     ~_Prepare_execution()
+     874              :     {
+     875              :       if (_M_functor_lock)
+     876              :         __set_once_functor_lock_ptr(nullptr);
+     877              :     }
+     878              : 
+     879              :   private:
+     880              :     // XXX This deadlocks if used recursively (PR 97949)
+     881              :     unique_lock<mutex> _M_functor_lock{__get_once_mutex()};
+     882              : 
+     883              :     _Prepare_execution(const _Prepare_execution&) = delete;
+     884              :     _Prepare_execution& operator=(const _Prepare_execution&) = delete;
+     885              :   };
+     886              : # endif
+     887              :   /// @endcond
+     888              : 
+     889              :   // This function is passed to pthread_once by std::call_once.
+     890              :   // It runs __once_call() or __once_functor().
+     891              :   extern "C" void __once_proxy(void);
+     892              : 
+     893              :   /// Invoke a callable and synchronize with other calls using the same flag
+     894              :   template<typename _Callable, typename... _Args>
+     895              :     void
+     896              :     call_once(once_flag& __once, _Callable&& __f, _Args&&... __args)
+     897              :     {
+     898              :       // Closure type that runs the function
+     899              :       auto __callable = [&] {
+     900              :           std::__invoke(std::forward<_Callable>(__f),
+     901              :                         std::forward<_Args>(__args)...);
+     902              :       };
+     903              : 
+     904              :       once_flag::_Prepare_execution __exec(__callable);
+     905              : 
+     906              :       // XXX pthread_once does not reset the flag if an exception is thrown.
+     907              :       if (int __e = __gthread_once(&__once._M_once, &__once_proxy))
+     908              :         __throw_system_error(__e);
+     909              :     }
+     910              : 
+     911              : #else // _GLIBCXX_HAS_GTHREADS
+     912              : 
+     913              :   /// Flag type used by std::call_once
+     914              :   struct once_flag
+     915              :   {
+     916              :     constexpr once_flag() noexcept = default;
+     917              : 
+     918              :     /// Deleted copy constructor
+     919              :     once_flag(const once_flag&) = delete;
+     920              :     /// Deleted assignment operator
+     921              :     once_flag& operator=(const once_flag&) = delete;
+     922              : 
+     923              :   private:
+     924              :     // There are two different std::once_flag interfaces, abstracting four
+     925              :     // different implementations.
+     926              :     // The single-threaded interface uses the _M_activate() and _M_finish(bool)
+     927              :     // functions, which start and finish an active execution respectively.
+     928              :     // See [thread.once.callonce] in C++11 for the definition of
+     929              :     // active/passive/returning/exceptional executions.
+     930              :     enum _Bits : int { _Init = 0, _Active = 1, _Done = 2 };
+     931              : 
+     932              :     int _M_once = _Bits::_Init;
+     933              : 
+     934              :     // Check to see if all executions will be passive now.
+     935              :     bool
+     936              :     _M_passive() const noexcept;
+     937              : 
+     938              :     // Attempts to begin an active execution.
+     939              :     bool _M_activate();
+     940              : 
+     941              :     // Must be called to complete an active execution.
+     942              :     // The argument is true if the active execution was a returning execution,
+     943              :     // false if it was an exceptional execution.
+     944              :     void _M_finish(bool __returning) noexcept;
+     945              : 
+     946              :     // RAII helper to call _M_finish.
+     947              :     struct _Active_execution
+     948              :     {
+     949              :       explicit _Active_execution(once_flag& __flag) : _M_flag(__flag) { }
+     950              : 
+     951              :       ~_Active_execution() { _M_flag._M_finish(_M_returning); }
+     952              : 
+     953              :       _Active_execution(const _Active_execution&) = delete;
+     954              :       _Active_execution& operator=(const _Active_execution&) = delete;
+     955              : 
+     956              :       once_flag& _M_flag;
+     957              :       bool _M_returning = false;
+     958              :     };
+     959              : 
+     960              :     template<typename _Callable, typename... _Args>
+     961              :       friend void
+     962              :       call_once(once_flag& __once, _Callable&& __f, _Args&&... __args);
+     963              :   };
+     964              : 
+     965              :   // Inline definitions of std::once_flag members for single-threaded targets.
+     966              : 
+     967              :   inline bool
+     968              :   once_flag::_M_passive() const noexcept
+     969              :   { return _M_once == _Bits::_Done; }
+     970              : 
+     971              :   inline bool
+     972              :   once_flag::_M_activate()
+     973              :   {
+     974              :     if (_M_once == _Bits::_Init) [[__likely__]]
+     975              :       {
+     976              :         _M_once = _Bits::_Active;
+     977              :         return true;
+     978              :       }
+     979              :     else if (_M_passive()) // Caller should have checked this already.
+     980              :       return false;
+     981              :     else
+     982              :       __throw_system_error(EDEADLK);
+     983              :   }
+     984              : 
+     985              :   inline void
+     986              :   once_flag::_M_finish(bool __returning) noexcept
+     987              :   { _M_once = __returning ? _Bits::_Done : _Bits::_Init; }
+     988              : 
+     989              :   /// Invoke a callable and synchronize with other calls using the same flag
+     990              :   template<typename _Callable, typename... _Args>
+     991              :     inline void
+     992              :     call_once(once_flag& __once, _Callable&& __f, _Args&&... __args)
+     993              :     {
+     994              :       if (__once._M_passive())
+     995              :         return;
+     996              :       else if (__once._M_activate())
+     997              :         {
+     998              :           once_flag::_Active_execution __exec(__once);
+     999              : 
+    1000              :           // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1001              :           // 2442. call_once() shouldn't DECAY_COPY()
+    1002              :           std::__invoke(std::forward<_Callable>(__f),
+    1003              :                         std::forward<_Args>(__args)...);
+    1004              : 
+    1005              :           // __f(__args...) did not throw
+    1006              :           __exec._M_returning = true;
+    1007              :         }
+    1008              :     }
+    1009              : #endif // _GLIBCXX_HAS_GTHREADS
+    1010              : 
+    1011              :   /// @} group mutexes
+    1012              : _GLIBCXX_END_NAMESPACE_VERSION
+    1013              : } // namespace
+    1014              : 
+    1015              : #endif // C++11
+    1016              : 
+    1017              : #endif // _GLIBCXX_MUTEX
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/new.func-c.html b/html/usr/include/c++/13/new.func-c.html new file mode 100644 index 0000000..3df07e1 --- /dev/null +++ b/html/usr/include/c++/13/new.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/new - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - new (source / functions)CoverageTotalHit
Test:coverage.infoLines:66.7 %32
Test Date:2024-04-30 13:17:26Functions:50.0 %21
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZdlPvS_0
_ZnwmPv1073305006
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/new.func.html b/html/usr/include/c++/13/new.func.html new file mode 100644 index 0000000..a0b409f --- /dev/null +++ b/html/usr/include/c++/13/new.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/new - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - new (source / functions)CoverageTotalHit
Test:coverage.infoLines:66.7 %32
Test Date:2024-04-30 13:17:26Functions:50.0 %21
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZdlPvS_0
_ZnwmPv1073305006
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/new.gcov.html b/html/usr/include/c++/13/new.gcov.html new file mode 100644 index 0000000..fb54fc3 --- /dev/null +++ b/html/usr/include/c++/13/new.gcov.html @@ -0,0 +1,314 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/new + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - new (source / functions)CoverageTotalHit
Test:coverage.infoLines:66.7 %32
Test Date:2024-04-30 13:17:26Functions:50.0 %21
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // The -*- C++ -*- dynamic memory management header.
+       2              : 
+       3              : // Copyright (C) 1994-2023 Free Software Foundation, Inc.
+       4              : 
+       5              : // This file is part of GCC.
+       6              : //
+       7              : // GCC is free software; you can redistribute it and/or modify
+       8              : // it under the terms of the GNU General Public License as published by
+       9              : // the Free Software Foundation; either version 3, or (at your option)
+      10              : // any later version.
+      11              : // 
+      12              : // GCC is distributed in the hope that it will be useful,
+      13              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      14              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      15              : // GNU General Public License for more details.
+      16              : // 
+      17              : // Under Section 7 of GPL version 3, you are granted additional
+      18              : // permissions described in the GCC Runtime Library Exception, version
+      19              : // 3.1, as published by the Free Software Foundation.
+      20              : 
+      21              : // You should have received a copy of the GNU General Public License and
+      22              : // a copy of the GCC Runtime Library Exception along with this program;
+      23              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      24              : // <http://www.gnu.org/licenses/>.
+      25              : 
+      26              : /** @file new
+      27              :  *  This is a Standard C++ Library header.
+      28              :  *
+      29              :  *  The header @c new defines several functions to manage dynamic memory and
+      30              :  *  handling memory allocation errors; see
+      31              :  *  https://gcc.gnu.org/onlinedocs/libstdc++/manual/dynamic_memory.html
+      32              :  *  for more.
+      33              :  */
+      34              : 
+      35              : #ifndef _NEW
+      36              : #define _NEW
+      37              : 
+      38              : #pragma GCC system_header
+      39              : 
+      40              : #include <bits/c++config.h>
+      41              : #include <bits/exception.h>
+      42              : 
+      43              : #pragma GCC visibility push(default)
+      44              : 
+      45              : extern "C++" {
+      46              : 
+      47              : namespace std 
+      48              : {
+      49              :   /**
+      50              :    *  @brief  Exception possibly thrown by @c new.
+      51              :    *  @ingroup exceptions
+      52              :    *
+      53              :    *  @c bad_alloc (or classes derived from it) is used to report allocation
+      54              :    *  errors from the throwing forms of @c new.  */
+      55              :   class bad_alloc : public exception
+      56              :   {
+      57              :   public:
+      58              :     bad_alloc() throw() { }
+      59              : 
+      60              : #if __cplusplus >= 201103L
+      61              :     bad_alloc(const bad_alloc&) = default;
+      62              :     bad_alloc& operator=(const bad_alloc&) = default;
+      63              : #endif
+      64              : 
+      65              :     // This declaration is not useless:
+      66              :     // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
+      67              :     virtual ~bad_alloc() throw();
+      68              : 
+      69              :     // See comment in eh_exception.cc.
+      70              :     virtual const char* what() const throw();
+      71              :   };
+      72              : 
+      73              : #if __cplusplus >= 201103L
+      74              :   class bad_array_new_length : public bad_alloc
+      75              :   {
+      76              :   public:
+      77              :     bad_array_new_length() throw() { }
+      78              : 
+      79              :     // This declaration is not useless:
+      80              :     // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
+      81              :     virtual ~bad_array_new_length() throw();
+      82              : 
+      83              :     // See comment in eh_exception.cc.
+      84              :     virtual const char* what() const throw();
+      85              :   };
+      86              : #endif
+      87              : 
+      88              : #if __cpp_aligned_new
+      89              :   enum class align_val_t: size_t {};
+      90              : #endif
+      91              : 
+      92              :   struct nothrow_t
+      93              :   {
+      94              : #if __cplusplus >= 201103L
+      95              :     explicit nothrow_t() = default;
+      96              : #endif
+      97              :   };
+      98              : 
+      99              :   extern const nothrow_t nothrow;
+     100              : 
+     101              :   /** If you write your own error handler to be called by @c new, it must
+     102              :    *  be of this type.  */
+     103              :   typedef void (*new_handler)();
+     104              : 
+     105              :   /// Takes a replacement handler as the argument, returns the
+     106              :   /// previous handler.
+     107              :   new_handler set_new_handler(new_handler) throw();
+     108              : 
+     109              : #if __cplusplus >= 201103L
+     110              :   /// Return the current new handler.
+     111              :   new_handler get_new_handler() noexcept;
+     112              : #endif
+     113              : } // namespace std
+     114              : 
+     115              : //@{
+     116              : /** These are replaceable signatures:
+     117              :  *  - normal single new and delete (no arguments, throw @c bad_alloc on error)
+     118              :  *  - normal array new and delete (same)
+     119              :  *  - @c nothrow single new and delete (take a @c nothrow argument, return
+     120              :  *    @c NULL on error)
+     121              :  *  - @c nothrow array new and delete (same)
+     122              :  *
+     123              :  *  Placement new and delete signatures (take a memory address argument,
+     124              :  *  does nothing) may not be replaced by a user's program.
+     125              : */
+     126              : _GLIBCXX_NODISCARD void* operator new(std::size_t) _GLIBCXX_THROW (std::bad_alloc)
+     127              :   __attribute__((__externally_visible__));
+     128              : _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
+     129              :   __attribute__((__externally_visible__));
+     130              : void operator delete(void*) _GLIBCXX_USE_NOEXCEPT
+     131              :   __attribute__((__externally_visible__));
+     132              : void operator delete[](void*) _GLIBCXX_USE_NOEXCEPT
+     133              :   __attribute__((__externally_visible__));
+     134              : #if __cpp_sized_deallocation
+     135              : void operator delete(void*, std::size_t) _GLIBCXX_USE_NOEXCEPT
+     136              :   __attribute__((__externally_visible__));
+     137              : void operator delete[](void*, std::size_t) _GLIBCXX_USE_NOEXCEPT
+     138              :   __attribute__((__externally_visible__));
+     139              : #endif
+     140              : _GLIBCXX_NODISCARD void* operator new(std::size_t, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT
+     141              :   __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__));
+     142              : _GLIBCXX_NODISCARD void* operator new[](std::size_t, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT
+     143              :   __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__));
+     144              : void operator delete(void*, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT
+     145              :   __attribute__((__externally_visible__));
+     146              : void operator delete[](void*, const std::nothrow_t&) _GLIBCXX_USE_NOEXCEPT
+     147              :   __attribute__((__externally_visible__));
+     148              : #if __cpp_aligned_new
+     149              : _GLIBCXX_NODISCARD void* operator new(std::size_t, std::align_val_t)
+     150              :   __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__));
+     151              : _GLIBCXX_NODISCARD void* operator new(std::size_t, std::align_val_t, const std::nothrow_t&)
+     152              :   _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__));
+     153              : void operator delete(void*, std::align_val_t)
+     154              :   _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__));
+     155              : void operator delete(void*, std::align_val_t, const std::nothrow_t&)
+     156              :   _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__));
+     157              : _GLIBCXX_NODISCARD void* operator new[](std::size_t, std::align_val_t)
+     158              :   __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__));
+     159              : _GLIBCXX_NODISCARD void* operator new[](std::size_t, std::align_val_t, const std::nothrow_t&)
+     160              :   _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__));
+     161              : void operator delete[](void*, std::align_val_t)
+     162              :   _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__));
+     163              : void operator delete[](void*, std::align_val_t, const std::nothrow_t&)
+     164              :   _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__));
+     165              : #if __cpp_sized_deallocation
+     166              : void operator delete(void*, std::size_t, std::align_val_t)
+     167              :   _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__));
+     168              : void operator delete[](void*, std::size_t, std::align_val_t)
+     169              :   _GLIBCXX_USE_NOEXCEPT __attribute__((__externally_visible__));
+     170              : #endif // __cpp_sized_deallocation
+     171              : #endif // __cpp_aligned_new
+     172              : 
+     173              : // Default placement versions of operator new.
+     174   1073305006 : _GLIBCXX_NODISCARD inline void* operator new(std::size_t, void* __p) _GLIBCXX_USE_NOEXCEPT
+     175   1073305006 : { return __p; }
+     176              : _GLIBCXX_NODISCARD inline void* operator new[](std::size_t, void* __p) _GLIBCXX_USE_NOEXCEPT
+     177              : { return __p; }
+     178              : 
+     179              : // Default placement versions of operator delete.
+     180            0 : inline void operator delete  (void*, void*) _GLIBCXX_USE_NOEXCEPT { }
+     181              : inline void operator delete[](void*, void*) _GLIBCXX_USE_NOEXCEPT { }
+     182              : //@}
+     183              : } // extern "C++"
+     184              : 
+     185              : #if __cplusplus >= 201703L
+     186              : namespace std
+     187              : {
+     188              : #ifdef _GLIBCXX_HAVE_BUILTIN_LAUNDER
+     189              : #define __cpp_lib_launder 201606L
+     190              :   /// Pointer optimization barrier [ptr.launder]
+     191              :   template<typename _Tp>
+     192              :     [[nodiscard]] constexpr _Tp*
+     193              :     launder(_Tp* __p) noexcept
+     194              :     { return __builtin_launder(__p); }
+     195              : 
+     196              :   // The program is ill-formed if T is a function type or
+     197              :   // (possibly cv-qualified) void.
+     198              : 
+     199              :   template<typename _Ret, typename... _Args _GLIBCXX_NOEXCEPT_PARM>
+     200              :     void launder(_Ret (*)(_Args...) _GLIBCXX_NOEXCEPT_QUAL) = delete;
+     201              :   template<typename _Ret, typename... _Args _GLIBCXX_NOEXCEPT_PARM>
+     202              :     void launder(_Ret (*)(_Args......) _GLIBCXX_NOEXCEPT_QUAL) = delete;
+     203              : 
+     204              :   void launder(void*) = delete;
+     205              :   void launder(const void*) = delete;
+     206              :   void launder(volatile void*) = delete;
+     207              :   void launder(const volatile void*) = delete;
+     208              : #endif // _GLIBCXX_HAVE_BUILTIN_LAUNDER
+     209              : 
+     210              : #ifdef __GCC_DESTRUCTIVE_SIZE
+     211              : # define __cpp_lib_hardware_interference_size 201703L
+     212              :   inline constexpr size_t hardware_destructive_interference_size = __GCC_DESTRUCTIVE_SIZE;
+     213              :   inline constexpr size_t hardware_constructive_interference_size = __GCC_CONSTRUCTIVE_SIZE;
+     214              : #endif // __GCC_DESTRUCTIVE_SIZE
+     215              : }
+     216              : #endif // C++17
+     217              : 
+     218              : #if __cplusplus > 201703L
+     219              : namespace std
+     220              : {
+     221              :   /// Tag type used to declare a class-specific operator delete that can
+     222              :   /// invoke the destructor before deallocating the memory.
+     223              :   struct destroying_delete_t
+     224              :   {
+     225              :     explicit destroying_delete_t() = default;
+     226              :   };
+     227              :   /// Tag variable of type destroying_delete_t.
+     228              :   inline constexpr destroying_delete_t destroying_delete{};
+     229              : }
+     230              : // Only define the feature test macro if the compiler supports the feature:
+     231              : #if __cpp_impl_destroying_delete
+     232              : # define __cpp_lib_destroying_delete 201806L
+     233              : #endif
+     234              : #endif // C++20
+     235              : 
+     236              : #pragma GCC visibility pop
+     237              : 
+     238              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/numeric.func-c.html b/html/usr/include/c++/13/numeric.func-c.html new file mode 100644 index 0000000..2896c99 --- /dev/null +++ b/html/usr/include/c++/13/numeric.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/numeric - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - numeric (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1212
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt6reduceIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEENSt15iterator_traitsIT_E10value_typeES8_S8_246
_ZSt6reduceIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEdSt4plusIvEET0_T_SA_S9_T1_246
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/numeric.func.html b/html/usr/include/c++/13/numeric.func.html new file mode 100644 index 0000000..7770561 --- /dev/null +++ b/html/usr/include/c++/13/numeric.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/numeric - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - numeric (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1212
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt6reduceIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEENSt15iterator_traitsIT_E10value_typeES8_S8_246
_ZSt6reduceIN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEEdSt4plusIvEET0_T_SA_S9_T1_246
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/numeric.gcov.html b/html/usr/include/c++/13/numeric.gcov.html new file mode 100644 index 0000000..ac878e1 --- /dev/null +++ b/html/usr/include/c++/13/numeric.gcov.html @@ -0,0 +1,823 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/numeric + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - numeric (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %1212
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // <numeric> -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2001-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /*
+      26              :  *
+      27              :  * Copyright (c) 1994
+      28              :  * Hewlett-Packard Company
+      29              :  *
+      30              :  * Permission to use, copy, modify, distribute and sell this software
+      31              :  * and its documentation for any purpose is hereby granted without fee,
+      32              :  * provided that the above copyright notice appear in all copies and
+      33              :  * that both that copyright notice and this permission notice appear
+      34              :  * in supporting documentation.  Hewlett-Packard Company makes no
+      35              :  * representations about the suitability of this software for any
+      36              :  * purpose.  It is provided "as is" without express or implied warranty.
+      37              :  *
+      38              :  *
+      39              :  * Copyright (c) 1996,1997
+      40              :  * Silicon Graphics Computer Systems, Inc.
+      41              :  *
+      42              :  * Permission to use, copy, modify, distribute and sell this software
+      43              :  * and its documentation for any purpose is hereby granted without fee,
+      44              :  * provided that the above copyright notice appear in all copies and
+      45              :  * that both that copyright notice and this permission notice appear
+      46              :  * in supporting documentation.  Silicon Graphics makes no
+      47              :  * representations about the suitability of this software for any
+      48              :  * purpose.  It is provided "as is" without express or implied warranty.
+      49              :  */
+      50              : 
+      51              : /** @file include/numeric
+      52              :  *  This is a Standard C++ Library header.
+      53              :  */
+      54              : 
+      55              : #ifndef _GLIBCXX_NUMERIC
+      56              : #define _GLIBCXX_NUMERIC 1
+      57              : 
+      58              : #pragma GCC system_header
+      59              : 
+      60              : #include <bits/c++config.h>
+      61              : #include <bits/stl_iterator_base_types.h>
+      62              : #include <bits/stl_numeric.h>
+      63              : 
+      64              : #ifdef _GLIBCXX_PARALLEL
+      65              : # include <parallel/numeric>
+      66              : #endif
+      67              : 
+      68              : #if __cplusplus >= 201402L
+      69              : # include <type_traits>
+      70              : # include <bit>
+      71              : # include <ext/numeric_traits.h>
+      72              : #endif
+      73              : 
+      74              : #if __cplusplus >= 201703L
+      75              : # include <bits/stl_function.h>
+      76              : #endif
+      77              : 
+      78              : #if __cplusplus > 201703L
+      79              : # include <limits>
+      80              : #endif
+      81              : 
+      82              : /**
+      83              :  * @defgroup numerics Numerics
+      84              :  *
+      85              :  * Components for performing numeric operations. Includes support for
+      86              :  * complex number types, random number generation, numeric (n-at-a-time)
+      87              :  * arrays, generalized numeric algorithms, and mathematical special functions.
+      88              :  */
+      89              : 
+      90              : namespace std _GLIBCXX_VISIBILITY(default)
+      91              : {
+      92              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      93              : 
+      94              : #if __cplusplus >= 201402L
+      95              : namespace __detail
+      96              : {
+      97              :   // Like std::abs, but supports unsigned types and returns the specified type,
+      98              :   // so |std::numeric_limits<_Tp>::min()| is OK if representable in _Res.
+      99              :   template<typename _Res, typename _Tp>
+     100              :     constexpr _Res
+     101              :     __abs_r(_Tp __val)
+     102              :     {
+     103              :       static_assert(sizeof(_Res) >= sizeof(_Tp),
+     104              :           "result type must be at least as wide as the input type");
+     105              : 
+     106              :       if (__val >= 0)
+     107              :         return __val;
+     108              : #ifdef _GLIBCXX_ASSERTIONS
+     109              :       if (!__is_constant_evaluated()) // overflow already detected in constexpr
+     110              :         __glibcxx_assert(__val != __gnu_cxx::__int_traits<_Res>::__min);
+     111              : #endif
+     112              :       return -static_cast<_Res>(__val);
+     113              :     }
+     114              : 
+     115              :   template<typename> void __abs_r(bool) = delete;
+     116              : 
+     117              :   // GCD implementation, using Stein's algorithm
+     118              :   template<typename _Tp>
+     119              :     constexpr _Tp
+     120              :     __gcd(_Tp __m, _Tp __n)
+     121              :     {
+     122              :       static_assert(is_unsigned<_Tp>::value, "type must be unsigned");
+     123              : 
+     124              :       if (__m == 0)
+     125              :         return __n;
+     126              :       if (__n == 0)
+     127              :         return __m;
+     128              : 
+     129              :       const int __i = std::__countr_zero(__m);
+     130              :       __m >>= __i;
+     131              :       const int __j = std::__countr_zero(__n);
+     132              :       __n >>= __j;
+     133              :       const int __k = __i < __j ? __i : __j; // min(i, j)
+     134              : 
+     135              :       while (true)
+     136              :         {
+     137              :           if (__m > __n)
+     138              :             {
+     139              :               _Tp __tmp = __m;
+     140              :               __m = __n;
+     141              :               __n = __tmp;
+     142              :             }
+     143              : 
+     144              :           __n -= __m;
+     145              : 
+     146              :           if (__n == 0)
+     147              :             return __m << __k;
+     148              : 
+     149              :           __n >>= std::__countr_zero(__n);
+     150              :         }
+     151              :     }
+     152              : } // namespace __detail
+     153              : 
+     154              : #if __cplusplus >= 201703L
+     155              : 
+     156              : #define __cpp_lib_gcd_lcm 201606L
+     157              : // These were used in drafts of SD-6:
+     158              : #define __cpp_lib_gcd 201606L
+     159              : #define __cpp_lib_lcm 201606L
+     160              : 
+     161              :   /// Greatest common divisor
+     162              :   template<typename _Mn, typename _Nn>
+     163              :     constexpr common_type_t<_Mn, _Nn>
+     164              :     gcd(_Mn __m, _Nn __n) noexcept
+     165              :     {
+     166              :       static_assert(is_integral_v<_Mn> && is_integral_v<_Nn>,
+     167              :                     "std::gcd arguments must be integers");
+     168              :       static_assert(_Mn(2) == 2 && _Nn(2) == 2,
+     169              :                     "std::gcd arguments must not be bool");
+     170              :       using _Ct = common_type_t<_Mn, _Nn>;
+     171              :       const _Ct __m2 = __detail::__abs_r<_Ct>(__m);
+     172              :       const _Ct __n2 = __detail::__abs_r<_Ct>(__n);
+     173              :       return __detail::__gcd<make_unsigned_t<_Ct>>(__m2, __n2);
+     174              :     }
+     175              : 
+     176              :   /// Least common multiple
+     177              :   template<typename _Mn, typename _Nn>
+     178              :     constexpr common_type_t<_Mn, _Nn>
+     179              :     lcm(_Mn __m, _Nn __n) noexcept
+     180              :     {
+     181              :       static_assert(is_integral_v<_Mn> && is_integral_v<_Nn>,
+     182              :                     "std::lcm arguments must be integers");
+     183              :       static_assert(_Mn(2) == 2 && _Nn(2) == 2,
+     184              :                     "std::lcm arguments must not be bool");
+     185              :       using _Ct = common_type_t<_Mn, _Nn>;
+     186              :       const _Ct __m2 = __detail::__abs_r<_Ct>(__m);
+     187              :       const _Ct __n2 = __detail::__abs_r<_Ct>(__n);
+     188              :       if (__m2 == 0 || __n2 == 0)
+     189              :         return 0;
+     190              :       _Ct __r = __m2 / __detail::__gcd<make_unsigned_t<_Ct>>(__m2, __n2);
+     191              : 
+     192              :       if constexpr (is_signed_v<_Ct>)
+     193              :         if (__is_constant_evaluated())
+     194              :           return __r * __n2; // constant evaluation can detect overflow here.
+     195              : 
+     196              :       bool __overflow = __builtin_mul_overflow(__r, __n2, &__r);
+     197              :       __glibcxx_assert(!__overflow);
+     198              :       return __r;
+     199              :     }
+     200              : 
+     201              : #endif // C++17
+     202              : #endif // C++14
+     203              : 
+     204              : #if __cplusplus > 201703L
+     205              : 
+     206              :   // midpoint
+     207              : # define __cpp_lib_interpolate 201902L
+     208              : 
+     209              :   template<typename _Tp>
+     210              :     constexpr
+     211              :     enable_if_t<__and_v<is_arithmetic<_Tp>, is_same<remove_cv_t<_Tp>, _Tp>,
+     212              :                         __not_<is_same<_Tp, bool>>>,
+     213              :                 _Tp>
+     214              :     midpoint(_Tp __a, _Tp __b) noexcept
+     215              :     {
+     216              :       if constexpr (is_integral_v<_Tp>)
+     217              :         {
+     218              :           using _Up = make_unsigned_t<_Tp>;
+     219              : 
+     220              :           int __k = 1;
+     221              :           _Up __m = __a;
+     222              :           _Up __M = __b;
+     223              :           if (__a > __b)
+     224              :             {
+     225              :               __k = -1;
+     226              :               __m = __b;
+     227              :               __M = __a;
+     228              :             }
+     229              :           return __a + __k * _Tp(_Up(__M - __m) / 2);
+     230              :         }
+     231              :       else // is_floating
+     232              :         {
+     233              :           constexpr _Tp __lo = numeric_limits<_Tp>::min() * 2;
+     234              :           constexpr _Tp __hi = numeric_limits<_Tp>::max() / 2;
+     235              :           const _Tp __abs_a = __a < 0 ? -__a : __a;
+     236              :           const _Tp __abs_b = __b < 0 ? -__b : __b;
+     237              :           if (__abs_a <= __hi && __abs_b <= __hi) [[likely]]
+     238              :             return (__a + __b) / 2; // always correctly rounded
+     239              :           if (__abs_a < __lo) // not safe to halve __a
+     240              :             return __a + __b/2;
+     241              :           if (__abs_b < __lo) // not safe to halve __b
+     242              :             return __a/2 + __b;
+     243              :           return __a/2 + __b/2;     // otherwise correctly rounded
+     244              :         }
+     245              :     }
+     246              : 
+     247              :   template<typename _Tp>
+     248              :     constexpr enable_if_t<is_object_v<_Tp>, _Tp*>
+     249              :     midpoint(_Tp* __a, _Tp* __b) noexcept
+     250              :     {
+     251              :       static_assert( sizeof(_Tp) != 0, "type must be complete" );
+     252              :       return __a  + (__b - __a) / 2;
+     253              :     }
+     254              : #endif // C++20
+     255              : 
+     256              : #if __cplusplus >= 201703L
+     257              : 
+     258              : #if __cplusplus > 201703L
+     259              : #define __cpp_lib_constexpr_numeric 201911L
+     260              : #endif
+     261              : 
+     262              :   /// @addtogroup numeric_ops
+     263              :   /// @{
+     264              : 
+     265              :   /**
+     266              :    *  @brief  Calculate reduction of values in a range.
+     267              :    *
+     268              :    *  @param  __first  Start of range.
+     269              :    *  @param  __last  End of range.
+     270              :    *  @param  __init  Starting value to add other values to.
+     271              :    *  @param  __binary_op A binary function object.
+     272              :    *  @return  The final sum.
+     273              :    *
+     274              :    *  Reduce the values in the range `[first,last)` using a binary operation.
+     275              :    *  The initial value is `init`.  The values are not necessarily processed
+     276              :    *  in order.
+     277              :    *
+     278              :    *  This algorithm is similar to `std::accumulate` but is not required to
+     279              :    *  perform the operations in order from first to last. For operations
+     280              :    *  that are commutative and associative the result will be the same as
+     281              :    *  for `std::accumulate`, but for other operations (such as floating point
+     282              :    *  arithmetic) the result can be different.
+     283              :    */
+     284              :   template<typename _InputIterator, typename _Tp, typename _BinaryOperation>
+     285              :     _GLIBCXX20_CONSTEXPR
+     286              :     _Tp
+     287          246 :     reduce(_InputIterator __first, _InputIterator __last, _Tp __init,
+     288              :            _BinaryOperation __binary_op)
+     289              :     {
+     290              :       using __ref = typename iterator_traits<_InputIterator>::reference;
+     291              :       static_assert(is_invocable_r_v<_Tp, _BinaryOperation&, _Tp&, __ref>);
+     292              :       static_assert(is_invocable_r_v<_Tp, _BinaryOperation&, __ref, _Tp&>);
+     293              :       static_assert(is_invocable_r_v<_Tp, _BinaryOperation&, _Tp&, _Tp&>);
+     294              :       static_assert(is_invocable_r_v<_Tp, _BinaryOperation&, __ref, __ref>);
+     295              :       if constexpr (__is_random_access_iter<_InputIterator>::value)
+     296              :         {
+     297          522 :           while ((__last - __first) >= 4)
+     298              :             {
+     299          276 :               _Tp __v1 = __binary_op(__first[0], __first[1]);
+     300          276 :               _Tp __v2 = __binary_op(__first[2], __first[3]);
+     301          276 :               _Tp __v3 = __binary_op(__v1, __v2);
+     302          276 :               __init = __binary_op(__init, __v3);
+     303          276 :               __first += 4;
+     304              :             }
+     305              :         }
+     306          534 :       for (; __first != __last; ++__first)
+     307          288 :         __init = __binary_op(__init, *__first);
+     308          246 :       return __init;
+     309              :     }
+     310              : 
+     311              :  /**
+     312              :    *  @brief  Calculate reduction of values in a range.
+     313              :    *
+     314              :    *  @param  __first  Start of range.
+     315              :    *  @param  __last  End of range.
+     316              :    *  @param  __init  Starting value to add other values to.
+     317              :    *  @return  The final sum.
+     318              :    *
+     319              :    *  Reduce the values in the range `[first,last)` using addition.
+     320              :    *  Equivalent to calling `std::reduce(first, last, init, std::plus<>())`.
+     321              :    */
+     322              :   template<typename _InputIterator, typename _Tp>
+     323              :     _GLIBCXX20_CONSTEXPR
+     324              :     inline _Tp
+     325              :     reduce(_InputIterator __first, _InputIterator __last, _Tp __init)
+     326              :     { return std::reduce(__first, __last, std::move(__init), plus<>()); }
+     327              : 
+     328              :   /**
+     329              :    *  @brief  Calculate reduction of values in a range.
+     330              :    *
+     331              :    *  @param  __first  Start of range.
+     332              :    *  @param  __last  End of range.
+     333              :    *  @return  The final sum.
+     334              :    *
+     335              :    *  Reduce the values in the range `[first,last)` using addition, with
+     336              :    *  an initial value of `T{}`, where `T` is the iterator's value type.
+     337              :    *  Equivalent to calling `std::reduce(first, last, T{}, std::plus<>())`.
+     338              :    */
+     339              :   template<typename _InputIterator>
+     340              :     _GLIBCXX20_CONSTEXPR
+     341              :     inline typename iterator_traits<_InputIterator>::value_type
+     342          246 :     reduce(_InputIterator __first, _InputIterator __last)
+     343              :     {
+     344              :       using value_type = typename iterator_traits<_InputIterator>::value_type;
+     345          246 :       return std::reduce(__first, __last, value_type{}, plus<>());
+     346              :     }
+     347              : 
+     348              :   /**
+     349              :    *  @brief  Combine elements from two ranges and reduce
+     350              :    *
+     351              :    *  @param  __first1  Start of first range.
+     352              :    *  @param  __last1  End of first range.
+     353              :    *  @param  __first2  Start of second range.
+     354              :    *  @param  __init  Starting value to add other values to.
+     355              :    *  @param  __binary_op1 The function used to perform reduction.
+     356              :    *  @param  __binary_op2 The function used to combine values from the ranges.
+     357              :    *  @return  The final sum.
+     358              :    *
+     359              :    *  Call `binary_op2(first1[n],first2[n])` for each `n` in `[0,last1-first1)`
+     360              :    *  and then use `binary_op1` to reduce the values returned by `binary_op2`
+     361              :    *  to a single value of type `T`.
+     362              :    *
+     363              :    *  The range beginning at `first2` must contain at least `last1-first1`
+     364              :    *  elements.
+     365              :    */
+     366              :   template<typename _InputIterator1, typename _InputIterator2, typename _Tp,
+     367              :            typename _BinaryOperation1, typename _BinaryOperation2>
+     368              :     _GLIBCXX20_CONSTEXPR
+     369              :     _Tp
+     370              :     transform_reduce(_InputIterator1 __first1, _InputIterator1 __last1,
+     371              :                      _InputIterator2 __first2, _Tp __init,
+     372              :                      _BinaryOperation1 __binary_op1,
+     373              :                      _BinaryOperation2 __binary_op2)
+     374              :     {
+     375              :       if constexpr (__and_v<__is_random_access_iter<_InputIterator1>,
+     376              :                             __is_random_access_iter<_InputIterator2>>)
+     377              :         {
+     378              :           while ((__last1 - __first1) >= 4)
+     379              :             {
+     380              :               _Tp __v1 = __binary_op1(__binary_op2(__first1[0], __first2[0]),
+     381              :                                       __binary_op2(__first1[1], __first2[1]));
+     382              :               _Tp __v2 = __binary_op1(__binary_op2(__first1[2], __first2[2]),
+     383              :                                       __binary_op2(__first1[3], __first2[3]));
+     384              :               _Tp __v3 = __binary_op1(__v1, __v2);
+     385              :               __init = __binary_op1(__init, __v3);
+     386              :               __first1 += 4;
+     387              :               __first2 += 4;
+     388              :             }
+     389              :         }
+     390              :       for (; __first1 != __last1; ++__first1, (void) ++__first2)
+     391              :         __init = __binary_op1(__init, __binary_op2(*__first1, *__first2));
+     392              :       return __init;
+     393              :     }
+     394              : 
+     395              :   /**
+     396              :    *  @brief  Combine elements from two ranges and reduce
+     397              :    *
+     398              :    *  @param  __first1  Start of first range.
+     399              :    *  @param  __last1  End of first range.
+     400              :    *  @param  __first2  Start of second range.
+     401              :    *  @param  __init  Starting value to add other values to.
+     402              :    *  @return  The final sum.
+     403              :    *
+     404              :    *  Call `first1[n]*first2[n]` for each `n` in `[0,last1-first1)` and then
+     405              :    *  use addition to sum those products to a single value of type `T`.
+     406              :    *
+     407              :    *  The range beginning at `first2` must contain at least `last1-first1`
+     408              :    *  elements.
+     409              :    */
+     410              :   template<typename _InputIterator1, typename _InputIterator2, typename _Tp>
+     411              :     _GLIBCXX20_CONSTEXPR
+     412              :     inline _Tp
+     413              :     transform_reduce(_InputIterator1 __first1, _InputIterator1 __last1,
+     414              :                      _InputIterator2 __first2, _Tp __init)
+     415              :     {
+     416              :       return std::transform_reduce(__first1, __last1, __first2,
+     417              :                                    std::move(__init),
+     418              :                                    plus<>(), multiplies<>());
+     419              :     }
+     420              : 
+     421              :   /**
+     422              :    *  @brief  Transform the elements of a range and reduce
+     423              :    *
+     424              :    *  @param  __first  Start of range.
+     425              :    *  @param  __last  End of range.
+     426              :    *  @param  __init  Starting value to add other values to.
+     427              :    *  @param  __binary_op The function used to perform reduction.
+     428              :    *  @param  __unary_op The function used to transform values from the range.
+     429              :    *  @return  The final sum.
+     430              :    *
+     431              :    *  Call `unary_op(first[n])` for each `n` in `[0,last-first)` and then
+     432              :    *  use `binary_op` to reduce the values returned by `unary_op`
+     433              :    *  to a single value of type `T`.
+     434              :    */
+     435              :   template<typename _InputIterator, typename _Tp,
+     436              :            typename _BinaryOperation, typename _UnaryOperation>
+     437              :     _GLIBCXX20_CONSTEXPR
+     438              :     _Tp
+     439              :     transform_reduce(_InputIterator __first, _InputIterator __last, _Tp __init,
+     440              :                      _BinaryOperation __binary_op, _UnaryOperation __unary_op)
+     441              :     {
+     442              :       if constexpr (__is_random_access_iter<_InputIterator>::value)
+     443              :         {
+     444              :           while ((__last - __first) >= 4)
+     445              :             {
+     446              :               _Tp __v1 = __binary_op(__unary_op(__first[0]),
+     447              :                                      __unary_op(__first[1]));
+     448              :               _Tp __v2 = __binary_op(__unary_op(__first[2]),
+     449              :                                      __unary_op(__first[3]));
+     450              :               _Tp __v3 = __binary_op(__v1, __v2);
+     451              :               __init = __binary_op(__init, __v3);
+     452              :               __first += 4;
+     453              :             }
+     454              :         }
+     455              :       for (; __first != __last; ++__first)
+     456              :         __init = __binary_op(__init, __unary_op(*__first));
+     457              :       return __init;
+     458              :     }
+     459              : 
+     460              :   /** @brief Output the cumulative sum of one range to a second range
+     461              :    *
+     462              :    *  @param __first  Start of input range.
+     463              :    *  @param __last   End of input range.
+     464              :    *  @param __result Start of output range.
+     465              :    *  @param __init   Initial value.
+     466              :    *  @param __binary_op Function to perform summation.
+     467              :    *  @return The end of the output range.
+     468              :    *
+     469              :    *  Write the cumulative sum (aka prefix sum, aka scan) of the input range
+     470              :    *  to the output range. Each element of the output range contains the
+     471              :    *  running total of all earlier elements (and the initial value),
+     472              :    *  using `binary_op` for summation.
+     473              :    *
+     474              :    *  This function generates an "exclusive" scan, meaning the Nth element
+     475              :    *  of the output range is the sum of the first N-1 input elements,
+     476              :    *  so the Nth input element is not included.
+     477              :    */
+     478              :   template<typename _InputIterator, typename _OutputIterator, typename _Tp,
+     479              :            typename _BinaryOperation>
+     480              :     _GLIBCXX20_CONSTEXPR
+     481              :     _OutputIterator
+     482              :     exclusive_scan(_InputIterator __first, _InputIterator __last,
+     483              :                    _OutputIterator __result, _Tp __init,
+     484              :                    _BinaryOperation __binary_op)
+     485              :     {
+     486              :       while (__first != __last)
+     487              :         {
+     488              :           auto __v = __init;
+     489              :           __init = __binary_op(__init, *__first);
+     490              :           ++__first;
+     491              :           *__result++ = std::move(__v);
+     492              :         }
+     493              :       return __result;
+     494              :     }
+     495              : 
+     496              :   /** @brief Output the cumulative sum of one range to a second range
+     497              :    *
+     498              :    *  @param __first  Start of input range.
+     499              :    *  @param __last   End of input range.
+     500              :    *  @param __result Start of output range.
+     501              :    *  @param __init   Initial value.
+     502              :    *  @return The end of the output range.
+     503              :    *
+     504              :    *  Write the cumulative sum (aka prefix sum, aka scan) of the input range
+     505              :    *  to the output range. Each element of the output range contains the
+     506              :    *  running total of all earlier elements (and the initial value),
+     507              :    *  using `std::plus<>` for summation.
+     508              :    *
+     509              :    *  This function generates an "exclusive" scan, meaning the Nth element
+     510              :    *  of the output range is the sum of the first N-1 input elements,
+     511              :    *  so the Nth input element is not included.
+     512              :    */
+     513              :   template<typename _InputIterator, typename _OutputIterator, typename _Tp>
+     514              :     _GLIBCXX20_CONSTEXPR
+     515              :     inline _OutputIterator
+     516              :     exclusive_scan(_InputIterator __first, _InputIterator __last,
+     517              :                    _OutputIterator __result, _Tp __init)
+     518              :     {
+     519              :       return std::exclusive_scan(__first, __last, __result, std::move(__init),
+     520              :                                  plus<>());
+     521              :     }
+     522              : 
+     523              :   /** @brief Output the cumulative sum of one range to a second range
+     524              :    *
+     525              :    *  @param __first  Start of input range.
+     526              :    *  @param __last   End of input range.
+     527              :    *  @param __result Start of output range.
+     528              :    *  @param __binary_op Function to perform summation.
+     529              :    *  @param __init   Initial value.
+     530              :    *  @return The end of the output range.
+     531              :    *
+     532              :    *  Write the cumulative sum (aka prefix sum, aka scan) of the input range
+     533              :    *  to the output range. Each element of the output range contains the
+     534              :    *  running total of all earlier elements (and the initial value),
+     535              :    *  using `binary_op` for summation.
+     536              :    *
+     537              :    *  This function generates an "inclusive" scan, meaning the Nth element
+     538              :    *  of the output range is the sum of the first N input elements,
+     539              :    *  so the Nth input element is included.
+     540              :    */
+     541              :   template<typename _InputIterator, typename _OutputIterator,
+     542              :            typename _BinaryOperation, typename _Tp>
+     543              :     _GLIBCXX20_CONSTEXPR
+     544              :     _OutputIterator
+     545              :     inclusive_scan(_InputIterator __first, _InputIterator __last,
+     546              :                    _OutputIterator __result, _BinaryOperation __binary_op,
+     547              :                    _Tp __init)
+     548              :     {
+     549              :       for (; __first != __last; ++__first)
+     550              :         *__result++ = __init = __binary_op(__init, *__first);
+     551              :       return __result;
+     552              :     }
+     553              : 
+     554              :   /** @brief Output the cumulative sum of one range to a second range
+     555              :    *
+     556              :    *  @param __first  Start of input range.
+     557              :    *  @param __last   End of input range.
+     558              :    *  @param __result Start of output range.
+     559              :    *  @param __binary_op Function to perform summation.
+     560              :    *  @return The end of the output range.
+     561              :    *
+     562              :    *  Write the cumulative sum (aka prefix sum, aka scan) of the input range
+     563              :    *  to the output range. Each element of the output range contains the
+     564              :    *  running total of all earlier elements, using `binary_op` for summation.
+     565              :    *
+     566              :    *  This function generates an "inclusive" scan, meaning the Nth element
+     567              :    *  of the output range is the sum of the first N input elements,
+     568              :    *  so the Nth input element is included.
+     569              :    */
+     570              :   template<typename _InputIterator, typename _OutputIterator,
+     571              :            typename _BinaryOperation>
+     572              :     _GLIBCXX20_CONSTEXPR
+     573              :     _OutputIterator
+     574              :     inclusive_scan(_InputIterator __first, _InputIterator __last,
+     575              :                    _OutputIterator __result, _BinaryOperation __binary_op)
+     576              :     {
+     577              :       if (__first != __last)
+     578              :         {
+     579              :           auto __init = *__first;
+     580              :           *__result++ = __init;
+     581              :           ++__first;
+     582              :           if (__first != __last)
+     583              :             __result = std::inclusive_scan(__first, __last, __result,
+     584              :                                            __binary_op, std::move(__init));
+     585              :         }
+     586              :       return __result;
+     587              :     }
+     588              : 
+     589              :   /** @brief Output the cumulative sum of one range to a second range
+     590              :    *
+     591              :    *  @param __first  Start of input range.
+     592              :    *  @param __last   End of input range.
+     593              :    *  @param __result Start of output range.
+     594              :    *  @return The end of the output range.
+     595              :    *
+     596              :    *  Write the cumulative sum (aka prefix sum, aka scan) of the input range
+     597              :    *  to the output range. Each element of the output range contains the
+     598              :    *  running total of all earlier elements, using `std::plus<>` for summation.
+     599              :    *
+     600              :    *  This function generates an "inclusive" scan, meaning the Nth element
+     601              :    *  of the output range is the sum of the first N input elements,
+     602              :    *  so the Nth input element is included.
+     603              :    */
+     604              :   template<typename _InputIterator, typename _OutputIterator>
+     605              :     _GLIBCXX20_CONSTEXPR
+     606              :     inline _OutputIterator
+     607              :     inclusive_scan(_InputIterator __first, _InputIterator __last,
+     608              :                    _OutputIterator __result)
+     609              :     { return std::inclusive_scan(__first, __last, __result, plus<>()); }
+     610              : 
+     611              :   /** @brief Output the cumulative sum of one range to a second range
+     612              :    *
+     613              :    *  @param __first  Start of input range.
+     614              :    *  @param __last   End of input range.
+     615              :    *  @param __result Start of output range.
+     616              :    *  @param __init   Initial value.
+     617              :    *  @param __binary_op Function to perform summation.
+     618              :    *  @param __unary_op Function to transform elements of the input range.
+     619              :    *  @return The end of the output range.
+     620              :    *
+     621              :    *  Write the cumulative sum (aka prefix sum, aka scan) of the input range
+     622              :    *  to the output range. Each element of the output range contains the
+     623              :    *  running total of all earlier elements (and the initial value),
+     624              :    *  using `__unary_op` to transform the input elements
+     625              :    *  and using `__binary_op` for summation.
+     626              :    *
+     627              :    *  This function generates an "exclusive" scan, meaning the Nth element
+     628              :    *  of the output range is the sum of the first N-1 input elements,
+     629              :    *  so the Nth input element is not included.
+     630              :    */
+     631              :   template<typename _InputIterator, typename _OutputIterator, typename _Tp,
+     632              :            typename _BinaryOperation, typename _UnaryOperation>
+     633              :     _GLIBCXX20_CONSTEXPR
+     634              :     _OutputIterator
+     635              :     transform_exclusive_scan(_InputIterator __first, _InputIterator __last,
+     636              :                              _OutputIterator __result, _Tp __init,
+     637              :                              _BinaryOperation __binary_op,
+     638              :                              _UnaryOperation __unary_op)
+     639              :     {
+     640              :       while (__first != __last)
+     641              :         {
+     642              :           auto __v = __init;
+     643              :           __init = __binary_op(__init, __unary_op(*__first));
+     644              :           ++__first;
+     645              :           *__result++ = std::move(__v);
+     646              :         }
+     647              :       return __result;
+     648              :     }
+     649              : 
+     650              :   /** @brief Output the cumulative sum of one range to a second range
+     651              :    *
+     652              :    *  @param __first  Start of input range.
+     653              :    *  @param __last   End of input range.
+     654              :    *  @param __result Start of output range.
+     655              :    *  @param __binary_op Function to perform summation.
+     656              :    *  @param __unary_op Function to transform elements of the input range.
+     657              :    *  @param __init   Initial value.
+     658              :    *  @return The end of the output range.
+     659              :    *
+     660              :    *  Write the cumulative sum (aka prefix sum, aka scan) of the input range
+     661              :    *  to the output range. Each element of the output range contains the
+     662              :    *  running total of all earlier elements (and the initial value),
+     663              :    *  using `__unary_op` to transform the input elements
+     664              :    *  and using `__binary_op` for summation.
+     665              :    *
+     666              :    *  This function generates an "inclusive" scan, meaning the Nth element
+     667              :    *  of the output range is the sum of the first N input elements,
+     668              :    *  so the Nth input element is included.
+     669              :    */
+     670              :   template<typename _InputIterator, typename _OutputIterator,
+     671              :            typename _BinaryOperation, typename _UnaryOperation, typename _Tp>
+     672              :     _GLIBCXX20_CONSTEXPR
+     673              :     _OutputIterator
+     674              :     transform_inclusive_scan(_InputIterator __first, _InputIterator __last,
+     675              :                              _OutputIterator __result,
+     676              :                              _BinaryOperation __binary_op,
+     677              :                              _UnaryOperation __unary_op,
+     678              :                              _Tp __init)
+     679              :     {
+     680              :       for (; __first != __last; ++__first)
+     681              :         *__result++ = __init = __binary_op(__init, __unary_op(*__first));
+     682              :       return __result;
+     683              :     }
+     684              : 
+     685              :   /** @brief Output the cumulative sum of one range to a second range
+     686              :    *
+     687              :    *  @param __first  Start of input range.
+     688              :    *  @param __last   End of input range.
+     689              :    *  @param __result Start of output range.
+     690              :    *  @param __binary_op Function to perform summation.
+     691              :    *  @param __unary_op Function to transform elements of the input range.
+     692              :    *  @return The end of the output range.
+     693              :    *
+     694              :    *  Write the cumulative sum (aka prefix sum, aka scan) of the input range
+     695              :    *  to the output range. Each element of the output range contains the
+     696              :    *  running total of all earlier elements,
+     697              :    *  using `__unary_op` to transform the input elements
+     698              :    *  and using `__binary_op` for summation.
+     699              :    *
+     700              :    *  This function generates an "inclusive" scan, meaning the Nth element
+     701              :    *  of the output range is the sum of the first N input elements,
+     702              :    *  so the Nth input element is included.
+     703              :    */
+     704              :   template<typename _InputIterator, typename _OutputIterator,
+     705              :           typename _BinaryOperation, typename _UnaryOperation>
+     706              :     _GLIBCXX20_CONSTEXPR
+     707              :     _OutputIterator
+     708              :     transform_inclusive_scan(_InputIterator __first, _InputIterator __last,
+     709              :                              _OutputIterator __result,
+     710              :                              _BinaryOperation __binary_op,
+     711              :                              _UnaryOperation __unary_op)
+     712              :     {
+     713              :       if (__first != __last)
+     714              :         {
+     715              :           auto __init = __unary_op(*__first);
+     716              :           *__result++ = __init;
+     717              :           ++__first;
+     718              :           if (__first != __last)
+     719              :             __result = std::transform_inclusive_scan(__first, __last, __result,
+     720              :                                                      __binary_op, __unary_op,
+     721              :                                                      std::move(__init));
+     722              :         }
+     723              :       return __result;
+     724              :     }
+     725              : 
+     726              :   /// @} group numeric_ops
+     727              : #endif // C++17
+     728              : 
+     729              : _GLIBCXX_END_NAMESPACE_VERSION
+     730              : } // namespace std
+     731              : 
+     732              : #if __cplusplus >= 201703L && _GLIBCXX_HOSTED
+     733              : // Parallel STL algorithms
+     734              : # if _PSTL_EXECUTION_POLICIES_DEFINED
+     735              : // If <execution> has already been included, pull in implementations
+     736              : #  include <pstl/glue_numeric_impl.h>
+     737              : # else
+     738              : // Otherwise just pull in forward declarations
+     739              : #  include <pstl/glue_numeric_defs.h>
+     740              : #  define _PSTL_NUMERIC_FORWARD_DECLARED 1
+     741              : # endif
+     742              : 
+     743              : // Feature test macro for parallel algorithms
+     744              : # define __cpp_lib_parallel_algorithm 201603L
+     745              : #endif // C++17
+     746              : 
+     747              : #endif /* _GLIBCXX_NUMERIC */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/string_view.func-c.html b/html/usr/include/c++/13/string_view.func-c.html new file mode 100644 index 0000000..452b211 --- /dev/null +++ b/html/usr/include/c++/13/string_view.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/string_view - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - string_view (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %44
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt17basic_string_viewIcSt11char_traitsIcEE3endEv228
_ZNKSt17basic_string_viewIcSt11char_traitsIcEE5beginEv228
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/string_view.func.html b/html/usr/include/c++/13/string_view.func.html new file mode 100644 index 0000000..7f4e676 --- /dev/null +++ b/html/usr/include/c++/13/string_view.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/string_view - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - string_view (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %44
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt17basic_string_viewIcSt11char_traitsIcEE3endEv228
_ZNKSt17basic_string_viewIcSt11char_traitsIcEE5beginEv228
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/string_view.gcov.html b/html/usr/include/c++/13/string_view.gcov.html new file mode 100644 index 0000000..b9a5a47 --- /dev/null +++ b/html/usr/include/c++/13/string_view.gcov.html @@ -0,0 +1,985 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/string_view + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - string_view (source / functions)CoverageTotalHit
Test:coverage.infoLines:100.0 %44
Test Date:2024-04-30 13:17:26Functions:100.0 %22
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Components for manipulating non-owning sequences of characters -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2013-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file include/string_view
+      26              :  *  This is a Standard C++ Library header.
+      27              :  */
+      28              : 
+      29              : //
+      30              : // N3762 basic_string_view library
+      31              : //
+      32              : 
+      33              : #ifndef _GLIBCXX_STRING_VIEW
+      34              : #define _GLIBCXX_STRING_VIEW 1
+      35              : 
+      36              : #pragma GCC system_header
+      37              : 
+      38              : #if __cplusplus >= 201703L
+      39              : 
+      40              : #include <bits/char_traits.h>
+      41              : #include <bits/functexcept.h>
+      42              : #include <bits/functional_hash.h>
+      43              : #include <bits/range_access.h>
+      44              : #include <bits/stl_algobase.h>
+      45              : #include <ext/numeric_traits.h>
+      46              : 
+      47              : #if __cplusplus >= 202002L
+      48              : # include <bits/ranges_base.h>
+      49              : #endif
+      50              : 
+      51              : #if _GLIBCXX_HOSTED
+      52              : # include <iosfwd>
+      53              : # include <bits/ostream_insert.h>
+      54              : #endif
+      55              : 
+      56              : namespace std _GLIBCXX_VISIBILITY(default)
+      57              : {
+      58              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      59              : 
+      60              : #if _GLIBCXX_HOSTED
+      61              : # define __cpp_lib_string_view 201803L
+      62              : #endif
+      63              : 
+      64              : #if __cplusplus > 201703L
+      65              : # define __cpp_lib_constexpr_string_view 201811L
+      66              : #endif
+      67              : 
+      68              :   // Helper for basic_string and basic_string_view members.
+      69              :   constexpr size_t
+      70              :   __sv_check(size_t __size, size_t __pos, const char* __s)
+      71              :   {
+      72              :     if (__pos > __size)
+      73              :       __throw_out_of_range_fmt(__N("%s: __pos (which is %zu) > __size "
+      74              :                                    "(which is %zu)"), __s, __pos, __size);
+      75              :     return __pos;
+      76              :   }
+      77              : 
+      78              :   // Helper for basic_string members.
+      79              :   // NB: __sv_limit doesn't check for a bad __pos value.
+      80              :   constexpr size_t
+      81              :   __sv_limit(size_t __size, size_t __pos, size_t __off) noexcept
+      82              :   {
+      83              :    const bool __testoff =  __off < __size - __pos;
+      84              :    return __testoff ? __off : __size - __pos;
+      85              :   }
+      86              : 
+      87              :   /**
+      88              :    *  @class basic_string_view <string_view>
+      89              :    *  @brief  A non-owning reference to a string.
+      90              :    *
+      91              :    *  @ingroup strings
+      92              :    *  @ingroup sequences
+      93              :    *
+      94              :    *  @tparam _CharT  Type of character
+      95              :    *  @tparam _Traits  Traits for character type, defaults to
+      96              :    *                   char_traits<_CharT>.
+      97              :    *
+      98              :    *  A basic_string_view looks like this:
+      99              :    *
+     100              :    *  @code
+     101              :    *    _CharT*    _M_str
+     102              :    *    size_t     _M_len
+     103              :    *  @endcode
+     104              :    */
+     105              :   template<typename _CharT, typename _Traits = std::char_traits<_CharT>>
+     106              :     class basic_string_view
+     107              :     {
+     108              :       static_assert(!is_array_v<_CharT>);
+     109              :       static_assert(is_trivial_v<_CharT> && is_standard_layout_v<_CharT>);
+     110              :       static_assert(is_same_v<_CharT, typename _Traits::char_type>);
+     111              : 
+     112              :     public:
+     113              : 
+     114              :       // types
+     115              :       using traits_type         = _Traits;
+     116              :       using value_type          = _CharT;
+     117              :       using pointer             = value_type*;
+     118              :       using const_pointer       = const value_type*;
+     119              :       using reference           = value_type&;
+     120              :       using const_reference     = const value_type&;
+     121              :       using const_iterator      = const value_type*;
+     122              :       using iterator            = const_iterator;
+     123              :       using const_reverse_iterator = std::reverse_iterator<const_iterator>;
+     124              :       using reverse_iterator    = const_reverse_iterator;
+     125              :       using size_type           = size_t;
+     126              :       using difference_type     = ptrdiff_t;
+     127              :       static constexpr size_type npos = size_type(-1);
+     128              : 
+     129              :       // [string.view.cons], construction and assignment
+     130              : 
+     131              :       constexpr
+     132              :       basic_string_view() noexcept
+     133              :       : _M_len{0}, _M_str{nullptr}
+     134              :       { }
+     135              : 
+     136              :       constexpr basic_string_view(const basic_string_view&) noexcept = default;
+     137              : 
+     138              :       [[__gnu__::__nonnull__]]
+     139              :       constexpr
+     140              :       basic_string_view(const _CharT* __str) noexcept
+     141              :       : _M_len{traits_type::length(__str)},
+     142              :         _M_str{__str}
+     143              :       { }
+     144              : 
+     145              :       constexpr
+     146              :       basic_string_view(const _CharT* __str, size_type __len) noexcept
+     147              :       : _M_len{__len}, _M_str{__str}
+     148              :       { }
+     149              : 
+     150              : #if __cplusplus >= 202002L && __cpp_lib_concepts
+     151              :       template<contiguous_iterator _It, sized_sentinel_for<_It> _End>
+     152              :         requires same_as<iter_value_t<_It>, _CharT>
+     153              :           && (!convertible_to<_End, size_type>)
+     154              :         constexpr
+     155              :         basic_string_view(_It __first, _End __last)
+     156              :         noexcept(noexcept(__last - __first))
+     157              :         : _M_len(__last - __first), _M_str(std::to_address(__first))
+     158              :         { }
+     159              : 
+     160              : #if __cplusplus > 202002L
+     161              :       template<typename _Range, typename _DRange = remove_cvref_t<_Range>>
+     162              :         requires (!is_same_v<_DRange, basic_string_view>)
+     163              :           && ranges::contiguous_range<_Range>
+     164              :           && ranges::sized_range<_Range>
+     165              :           && is_same_v<ranges::range_value_t<_Range>, _CharT>
+     166              :           && (!is_convertible_v<_Range, const _CharT*>)
+     167              :           && (!requires (_DRange& __d) {
+     168              :                 __d.operator ::std::basic_string_view<_CharT, _Traits>();
+     169              :               })
+     170              :         constexpr explicit
+     171              :         basic_string_view(_Range&& __r)
+     172              :         noexcept(noexcept(ranges::size(__r)) && noexcept(ranges::data(__r)))
+     173              :         : _M_len(ranges::size(__r)), _M_str(ranges::data(__r))
+     174              :         { }
+     175              : 
+     176              :       basic_string_view(nullptr_t) = delete;
+     177              : #endif // C++23
+     178              : #endif // C++20
+     179              : 
+     180              :       constexpr basic_string_view&
+     181              :       operator=(const basic_string_view&) noexcept = default;
+     182              : 
+     183              :       // [string.view.iterators], iterator support
+     184              : 
+     185              :       [[nodiscard]]
+     186              :       constexpr const_iterator
+     187          228 :       begin() const noexcept
+     188          228 :       { return this->_M_str; }
+     189              : 
+     190              :       [[nodiscard]]
+     191              :       constexpr const_iterator
+     192          228 :       end() const noexcept
+     193          228 :       { return this->_M_str + this->_M_len; }
+     194              : 
+     195              :       [[nodiscard]]
+     196              :       constexpr const_iterator
+     197              :       cbegin() const noexcept
+     198              :       { return this->_M_str; }
+     199              : 
+     200              :       [[nodiscard]]
+     201              :       constexpr const_iterator
+     202              :       cend() const noexcept
+     203              :       { return this->_M_str + this->_M_len; }
+     204              : 
+     205              :       [[nodiscard]]
+     206              :       constexpr const_reverse_iterator
+     207              :       rbegin() const noexcept
+     208              :       { return const_reverse_iterator(this->end()); }
+     209              : 
+     210              :       [[nodiscard]]
+     211              :       constexpr const_reverse_iterator
+     212              :       rend() const noexcept
+     213              :       { return const_reverse_iterator(this->begin()); }
+     214              : 
+     215              :       [[nodiscard]]
+     216              :       constexpr const_reverse_iterator
+     217              :       crbegin() const noexcept
+     218              :       { return const_reverse_iterator(this->end()); }
+     219              : 
+     220              :       [[nodiscard]]
+     221              :       constexpr const_reverse_iterator
+     222              :       crend() const noexcept
+     223              :       { return const_reverse_iterator(this->begin()); }
+     224              : 
+     225              :       // [string.view.capacity], capacity
+     226              : 
+     227              :       [[nodiscard]]
+     228              :       constexpr size_type
+     229              :       size() const noexcept
+     230              :       { return this->_M_len; }
+     231              : 
+     232              :       [[nodiscard]]
+     233              :       constexpr size_type
+     234              :       length() const noexcept
+     235              :       { return _M_len; }
+     236              : 
+     237              :       [[nodiscard]]
+     238              :       constexpr size_type
+     239              :       max_size() const noexcept
+     240              :       {
+     241              :         return (npos - sizeof(size_type) - sizeof(void*))
+     242              :                 / sizeof(value_type) / 4;
+     243              :       }
+     244              : 
+     245              :       [[nodiscard]]
+     246              :       constexpr bool
+     247              :       empty() const noexcept
+     248              :       { return this->_M_len == 0; }
+     249              : 
+     250              :       // [string.view.access], element access
+     251              : 
+     252              :       [[nodiscard]]
+     253              :       constexpr const_reference
+     254              :       operator[](size_type __pos) const noexcept
+     255              :       {
+     256              :         __glibcxx_assert(__pos < this->_M_len);
+     257              :         return *(this->_M_str + __pos);
+     258              :       }
+     259              : 
+     260              :       [[nodiscard]]
+     261              :       constexpr const_reference
+     262              :       at(size_type __pos) const
+     263              :       {
+     264              :         if (__pos >= _M_len)
+     265              :           __throw_out_of_range_fmt(__N("basic_string_view::at: __pos "
+     266              :                                        "(which is %zu) >= this->size() "
+     267              :                                        "(which is %zu)"), __pos, this->size());
+     268              :         return *(this->_M_str + __pos);
+     269              :       }
+     270              : 
+     271              :       [[nodiscard]]
+     272              :       constexpr const_reference
+     273              :       front() const noexcept
+     274              :       {
+     275              :         __glibcxx_assert(this->_M_len > 0);
+     276              :         return *this->_M_str;
+     277              :       }
+     278              : 
+     279              :       [[nodiscard]]
+     280              :       constexpr const_reference
+     281              :       back() const noexcept
+     282              :       {
+     283              :         __glibcxx_assert(this->_M_len > 0);
+     284              :         return *(this->_M_str + this->_M_len - 1);
+     285              :       }
+     286              : 
+     287              :       [[nodiscard]]
+     288              :       constexpr const_pointer
+     289              :       data() const noexcept
+     290              :       { return this->_M_str; }
+     291              : 
+     292              :       // [string.view.modifiers], modifiers:
+     293              : 
+     294              :       constexpr void
+     295              :       remove_prefix(size_type __n) noexcept
+     296              :       {
+     297              :         __glibcxx_assert(this->_M_len >= __n);
+     298              :         this->_M_str += __n;
+     299              :         this->_M_len -= __n;
+     300              :       }
+     301              : 
+     302              :       constexpr void
+     303              :       remove_suffix(size_type __n) noexcept
+     304              :       {
+     305              :         __glibcxx_assert(this->_M_len >= __n);
+     306              :         this->_M_len -= __n;
+     307              :       }
+     308              : 
+     309              :       constexpr void
+     310              :       swap(basic_string_view& __sv) noexcept
+     311              :       {
+     312              :         auto __tmp = *this;
+     313              :         *this = __sv;
+     314              :         __sv = __tmp;
+     315              :       }
+     316              : 
+     317              :       // [string.view.ops], string operations:
+     318              : 
+     319              :       _GLIBCXX20_CONSTEXPR
+     320              :       size_type
+     321              :       copy(_CharT* __str, size_type __n, size_type __pos = 0) const
+     322              :       {
+     323              :         __glibcxx_requires_string_len(__str, __n);
+     324              :         __pos = std::__sv_check(size(), __pos, "basic_string_view::copy");
+     325              :         const size_type __rlen = std::min<size_t>(__n, _M_len - __pos);
+     326              :         // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     327              :         // 2777. basic_string_view::copy should use char_traits::copy
+     328              :         traits_type::copy(__str, data() + __pos, __rlen);
+     329              :         return __rlen;
+     330              :       }
+     331              : 
+     332              :       [[nodiscard]]
+     333              :       constexpr basic_string_view
+     334              :       substr(size_type __pos = 0, size_type __n = npos) const noexcept(false)
+     335              :       {
+     336              :         __pos = std::__sv_check(size(), __pos, "basic_string_view::substr");
+     337              :         const size_type __rlen = std::min<size_t>(__n, _M_len - __pos);
+     338              :         return basic_string_view{_M_str + __pos, __rlen};
+     339              :       }
+     340              : 
+     341              :       [[nodiscard]]
+     342              :       constexpr int
+     343              :       compare(basic_string_view __str) const noexcept
+     344              :       {
+     345              :         const size_type __rlen = std::min(this->_M_len, __str._M_len);
+     346              :         int __ret = traits_type::compare(this->_M_str, __str._M_str, __rlen);
+     347              :         if (__ret == 0)
+     348              :           __ret = _S_compare(this->_M_len, __str._M_len);
+     349              :         return __ret;
+     350              :       }
+     351              : 
+     352              :       [[nodiscard]]
+     353              :       constexpr int
+     354              :       compare(size_type __pos1, size_type __n1, basic_string_view __str) const
+     355              :       { return this->substr(__pos1, __n1).compare(__str); }
+     356              : 
+     357              :       [[nodiscard]]
+     358              :       constexpr int
+     359              :       compare(size_type __pos1, size_type __n1,
+     360              :               basic_string_view __str, size_type __pos2, size_type __n2) const
+     361              :       {
+     362              :         return this->substr(__pos1, __n1).compare(__str.substr(__pos2, __n2));
+     363              :       }
+     364              : 
+     365              :       [[nodiscard, __gnu__::__nonnull__]]
+     366              :       constexpr int
+     367              :       compare(const _CharT* __str) const noexcept
+     368              :       { return this->compare(basic_string_view{__str}); }
+     369              : 
+     370              :       [[nodiscard, __gnu__::__nonnull__]]
+     371              :       constexpr int
+     372              :       compare(size_type __pos1, size_type __n1, const _CharT* __str) const
+     373              :       { return this->substr(__pos1, __n1).compare(basic_string_view{__str}); }
+     374              : 
+     375              :       [[nodiscard]]
+     376              :       constexpr int
+     377              :       compare(size_type __pos1, size_type __n1,
+     378              :               const _CharT* __str, size_type __n2) const noexcept(false)
+     379              :       {
+     380              :         return this->substr(__pos1, __n1)
+     381              :                    .compare(basic_string_view(__str, __n2));
+     382              :       }
+     383              : 
+     384              : #if __cplusplus > 201703L
+     385              : #define __cpp_lib_starts_ends_with 201711L
+     386              :       [[nodiscard]]
+     387              :       constexpr bool
+     388              :       starts_with(basic_string_view __x) const noexcept
+     389              :       { return this->substr(0, __x.size()) == __x; }
+     390              : 
+     391              :       [[nodiscard]]
+     392              :       constexpr bool
+     393              :       starts_with(_CharT __x) const noexcept
+     394              :       { return !this->empty() && traits_type::eq(this->front(), __x); }
+     395              : 
+     396              :       [[nodiscard, __gnu__::__nonnull__]]
+     397              :       constexpr bool
+     398              :       starts_with(const _CharT* __x) const noexcept
+     399              :       { return this->starts_with(basic_string_view(__x)); }
+     400              : 
+     401              :       [[nodiscard]]
+     402              :       constexpr bool
+     403              :       ends_with(basic_string_view __x) const noexcept
+     404              :       {
+     405              :         const auto __len = this->size();
+     406              :         const auto __xlen = __x.size();
+     407              :         return __len >= __xlen
+     408              :           && traits_type::compare(end() - __xlen, __x.data(), __xlen) == 0;
+     409              :       }
+     410              : 
+     411              :       [[nodiscard]]
+     412              :       constexpr bool
+     413              :       ends_with(_CharT __x) const noexcept
+     414              :       { return !this->empty() && traits_type::eq(this->back(), __x); }
+     415              : 
+     416              :       [[nodiscard, __gnu__::__nonnull__]]
+     417              :       constexpr bool
+     418              :       ends_with(const _CharT* __x) const noexcept
+     419              :       { return this->ends_with(basic_string_view(__x)); }
+     420              : #endif // C++20
+     421              : 
+     422              : #if __cplusplus > 202002L
+     423              : #if _GLIBCXX_HOSTED
+     424              :       // This FTM is not freestanding as it also implies matching <string>
+     425              :       // support, and <string> is omitted from the freestanding subset.
+     426              : # define __cpp_lib_string_contains 202011L
+     427              : #endif // HOSTED
+     428              :       [[nodiscard]]
+     429              :       constexpr bool
+     430              :       contains(basic_string_view __x) const noexcept
+     431              :       { return this->find(__x) != npos; }
+     432              : 
+     433              :       [[nodiscard]]
+     434              :       constexpr bool
+     435              :       contains(_CharT __x) const noexcept
+     436              :       { return this->find(__x) != npos; }
+     437              : 
+     438              :       [[nodiscard, __gnu__::__nonnull__]]
+     439              :       constexpr bool
+     440              :       contains(const _CharT* __x) const noexcept
+     441              :       { return this->find(__x) != npos; }
+     442              : #endif // C++23
+     443              : 
+     444              :       // [string.view.find], searching
+     445              : 
+     446              :       [[nodiscard]]
+     447              :       constexpr size_type
+     448              :       find(basic_string_view __str, size_type __pos = 0) const noexcept
+     449              :       { return this->find(__str._M_str, __pos, __str._M_len); }
+     450              : 
+     451              :       [[nodiscard]]
+     452              :       constexpr size_type
+     453              :       find(_CharT __c, size_type __pos = 0) const noexcept;
+     454              : 
+     455              :       [[nodiscard]]
+     456              :       constexpr size_type
+     457              :       find(const _CharT* __str, size_type __pos, size_type __n) const noexcept;
+     458              : 
+     459              :       [[nodiscard, __gnu__::__nonnull__]]
+     460              :       constexpr size_type
+     461              :       find(const _CharT* __str, size_type __pos = 0) const noexcept
+     462              :       { return this->find(__str, __pos, traits_type::length(__str)); }
+     463              : 
+     464              :       [[nodiscard]]
+     465              :       constexpr size_type
+     466              :       rfind(basic_string_view __str, size_type __pos = npos) const noexcept
+     467              :       { return this->rfind(__str._M_str, __pos, __str._M_len); }
+     468              : 
+     469              :       [[nodiscard]]
+     470              :       constexpr size_type
+     471              :       rfind(_CharT __c, size_type __pos = npos) const noexcept;
+     472              : 
+     473              :       [[nodiscard]]
+     474              :       constexpr size_type
+     475              :       rfind(const _CharT* __str, size_type __pos, size_type __n) const noexcept;
+     476              : 
+     477              :       [[nodiscard, __gnu__::__nonnull__]]
+     478              :       constexpr size_type
+     479              :       rfind(const _CharT* __str, size_type __pos = npos) const noexcept
+     480              :       { return this->rfind(__str, __pos, traits_type::length(__str)); }
+     481              : 
+     482              :       [[nodiscard]]
+     483              :       constexpr size_type
+     484              :       find_first_of(basic_string_view __str, size_type __pos = 0) const noexcept
+     485              :       { return this->find_first_of(__str._M_str, __pos, __str._M_len); }
+     486              : 
+     487              :       [[nodiscard]]
+     488              :       constexpr size_type
+     489              :       find_first_of(_CharT __c, size_type __pos = 0) const noexcept
+     490              :       { return this->find(__c, __pos); }
+     491              : 
+     492              :       [[nodiscard]]
+     493              :       constexpr size_type
+     494              :       find_first_of(const _CharT* __str, size_type __pos,
+     495              :                     size_type __n) const noexcept;
+     496              : 
+     497              :       [[nodiscard, __gnu__::__nonnull__]]
+     498              :       constexpr size_type
+     499              :       find_first_of(const _CharT* __str, size_type __pos = 0) const noexcept
+     500              :       { return this->find_first_of(__str, __pos, traits_type::length(__str)); }
+     501              : 
+     502              :       [[nodiscard]]
+     503              :       constexpr size_type
+     504              :       find_last_of(basic_string_view __str,
+     505              :                    size_type __pos = npos) const noexcept
+     506              :       { return this->find_last_of(__str._M_str, __pos, __str._M_len); }
+     507              : 
+     508              :       [[nodiscard]]
+     509              :       constexpr size_type
+     510              :       find_last_of(_CharT __c, size_type __pos=npos) const noexcept
+     511              :       { return this->rfind(__c, __pos); }
+     512              : 
+     513              :       [[nodiscard]]
+     514              :       constexpr size_type
+     515              :       find_last_of(const _CharT* __str, size_type __pos,
+     516              :                    size_type __n) const noexcept;
+     517              : 
+     518              :       [[nodiscard, __gnu__::__nonnull__]]
+     519              :       constexpr size_type
+     520              :       find_last_of(const _CharT* __str, size_type __pos = npos) const noexcept
+     521              :       { return this->find_last_of(__str, __pos, traits_type::length(__str)); }
+     522              : 
+     523              :       [[nodiscard]]
+     524              :       constexpr size_type
+     525              :       find_first_not_of(basic_string_view __str,
+     526              :                         size_type __pos = 0) const noexcept
+     527              :       { return this->find_first_not_of(__str._M_str, __pos, __str._M_len); }
+     528              : 
+     529              :       [[nodiscard]]
+     530              :       constexpr size_type
+     531              :       find_first_not_of(_CharT __c, size_type __pos = 0) const noexcept;
+     532              : 
+     533              :       [[nodiscard]]
+     534              :       constexpr size_type
+     535              :       find_first_not_of(const _CharT* __str,
+     536              :                         size_type __pos, size_type __n) const noexcept;
+     537              : 
+     538              :       [[nodiscard, __gnu__::__nonnull__]]
+     539              :       constexpr size_type
+     540              :       find_first_not_of(const _CharT* __str, size_type __pos = 0) const noexcept
+     541              :       {
+     542              :         return this->find_first_not_of(__str, __pos,
+     543              :                                        traits_type::length(__str));
+     544              :       }
+     545              : 
+     546              :       [[nodiscard]]
+     547              :       constexpr size_type
+     548              :       find_last_not_of(basic_string_view __str,
+     549              :                        size_type __pos = npos) const noexcept
+     550              :       { return this->find_last_not_of(__str._M_str, __pos, __str._M_len); }
+     551              : 
+     552              :       [[nodiscard]]
+     553              :       constexpr size_type
+     554              :       find_last_not_of(_CharT __c, size_type __pos = npos) const noexcept;
+     555              : 
+     556              :       [[nodiscard]]
+     557              :       constexpr size_type
+     558              :       find_last_not_of(const _CharT* __str,
+     559              :                        size_type __pos, size_type __n) const noexcept;
+     560              : 
+     561              :       [[nodiscard, __gnu__::__nonnull__]]
+     562              :       constexpr size_type
+     563              :       find_last_not_of(const _CharT* __str,
+     564              :                        size_type __pos = npos) const noexcept
+     565              :       {
+     566              :         return this->find_last_not_of(__str, __pos,
+     567              :                                       traits_type::length(__str));
+     568              :       }
+     569              : 
+     570              :     private:
+     571              : 
+     572              :       static constexpr int
+     573              :       _S_compare(size_type __n1, size_type __n2) noexcept
+     574              :       {
+     575              :         using __limits = __gnu_cxx::__int_traits<int>;
+     576              :         const difference_type __diff = __n1 - __n2;
+     577              :         if (__diff > __limits::__max)
+     578              :           return __limits::__max;
+     579              :         if (__diff < __limits::__min)
+     580              :           return __limits::__min;
+     581              :         return static_cast<int>(__diff);
+     582              :       }
+     583              : 
+     584              :       size_t        _M_len;
+     585              :       const _CharT* _M_str;
+     586              :     };
+     587              : 
+     588              : #if __cplusplus > 201703L && __cpp_lib_concepts && __cpp_deduction_guides
+     589              :   template<contiguous_iterator _It, sized_sentinel_for<_It> _End>
+     590              :     basic_string_view(_It, _End) -> basic_string_view<iter_value_t<_It>>;
+     591              : 
+     592              : #if __cplusplus > 202002L
+     593              :   template<ranges::contiguous_range _Range>
+     594              :     basic_string_view(_Range&&)
+     595              :       -> basic_string_view<ranges::range_value_t<_Range>>;
+     596              : #endif
+     597              : #endif
+     598              : 
+     599              :   // [string.view.comparison], non-member basic_string_view comparison function
+     600              : 
+     601              :   // Several of these functions use type_identity_t to create a non-deduced
+     602              :   // context, so that only one argument participates in template argument
+     603              :   // deduction and the other argument gets implicitly converted to the deduced
+     604              :   // type (see N3766).
+     605              : 
+     606              :   template<typename _CharT, typename _Traits>
+     607              :     [[nodiscard]]
+     608              :     constexpr bool
+     609              :     operator==(basic_string_view<_CharT, _Traits> __x,
+     610              :                basic_string_view<_CharT, _Traits> __y) noexcept
+     611              :     { return __x.size() == __y.size() && __x.compare(__y) == 0; }
+     612              : 
+     613              :   template<typename _CharT, typename _Traits>
+     614              :     [[nodiscard]]
+     615              :     constexpr bool
+     616              :     operator==(basic_string_view<_CharT, _Traits> __x,
+     617              :                __type_identity_t<basic_string_view<_CharT, _Traits>> __y)
+     618              :     noexcept
+     619              :     { return __x.size() == __y.size() && __x.compare(__y) == 0; }
+     620              : 
+     621              : #if __cpp_lib_three_way_comparison
+     622              :   template<typename _CharT, typename _Traits>
+     623              :     [[nodiscard]]
+     624              :     constexpr auto
+     625              :     operator<=>(basic_string_view<_CharT, _Traits> __x,
+     626              :                 basic_string_view<_CharT, _Traits> __y) noexcept
+     627              :     -> decltype(__detail::__char_traits_cmp_cat<_Traits>(0))
+     628              :     { return __detail::__char_traits_cmp_cat<_Traits>(__x.compare(__y)); }
+     629              : 
+     630              :   template<typename _CharT, typename _Traits>
+     631              :     [[nodiscard]]
+     632              :     constexpr auto
+     633              :     operator<=>(basic_string_view<_CharT, _Traits> __x,
+     634              :                 __type_identity_t<basic_string_view<_CharT, _Traits>> __y)
+     635              :     noexcept
+     636              :     -> decltype(__detail::__char_traits_cmp_cat<_Traits>(0))
+     637              :     { return __detail::__char_traits_cmp_cat<_Traits>(__x.compare(__y)); }
+     638              : #else
+     639              :   template<typename _CharT, typename _Traits>
+     640              :     [[nodiscard]]
+     641              :     constexpr bool
+     642              :     operator==(__type_identity_t<basic_string_view<_CharT, _Traits>> __x,
+     643              :                basic_string_view<_CharT, _Traits> __y) noexcept
+     644              :     { return __x.size() == __y.size() && __x.compare(__y) == 0; }
+     645              : 
+     646              :   template<typename _CharT, typename _Traits>
+     647              :     [[nodiscard]]
+     648              :     constexpr bool
+     649              :     operator!=(basic_string_view<_CharT, _Traits> __x,
+     650              :                basic_string_view<_CharT, _Traits> __y) noexcept
+     651              :     { return !(__x == __y); }
+     652              : 
+     653              :   template<typename _CharT, typename _Traits>
+     654              :     [[nodiscard]]
+     655              :     constexpr bool
+     656              :     operator!=(basic_string_view<_CharT, _Traits> __x,
+     657              :                __type_identity_t<basic_string_view<_CharT, _Traits>> __y)
+     658              :     noexcept
+     659              :     { return !(__x == __y); }
+     660              : 
+     661              :   template<typename _CharT, typename _Traits>
+     662              :     [[nodiscard]]
+     663              :     constexpr bool
+     664              :     operator!=(__type_identity_t<basic_string_view<_CharT, _Traits>> __x,
+     665              :                basic_string_view<_CharT, _Traits> __y) noexcept
+     666              :     { return !(__x == __y); }
+     667              : 
+     668              :   template<typename _CharT, typename _Traits>
+     669              :     [[nodiscard]]
+     670              :     constexpr bool
+     671              :     operator< (basic_string_view<_CharT, _Traits> __x,
+     672              :                basic_string_view<_CharT, _Traits> __y) noexcept
+     673              :     { return __x.compare(__y) < 0; }
+     674              : 
+     675              :   template<typename _CharT, typename _Traits>
+     676              :     [[nodiscard]]
+     677              :     constexpr bool
+     678              :     operator< (basic_string_view<_CharT, _Traits> __x,
+     679              :                __type_identity_t<basic_string_view<_CharT, _Traits>> __y)
+     680              :     noexcept
+     681              :     { return __x.compare(__y) < 0; }
+     682              : 
+     683              :   template<typename _CharT, typename _Traits>
+     684              :     [[nodiscard]]
+     685              :     constexpr bool
+     686              :     operator< (__type_identity_t<basic_string_view<_CharT, _Traits>> __x,
+     687              :                basic_string_view<_CharT, _Traits> __y) noexcept
+     688              :     { return __x.compare(__y) < 0; }
+     689              : 
+     690              :   template<typename _CharT, typename _Traits>
+     691              :     [[nodiscard]]
+     692              :     constexpr bool
+     693              :     operator> (basic_string_view<_CharT, _Traits> __x,
+     694              :                basic_string_view<_CharT, _Traits> __y) noexcept
+     695              :     { return __x.compare(__y) > 0; }
+     696              : 
+     697              :   template<typename _CharT, typename _Traits>
+     698              :     [[nodiscard]]
+     699              :     constexpr bool
+     700              :     operator> (basic_string_view<_CharT, _Traits> __x,
+     701              :                __type_identity_t<basic_string_view<_CharT, _Traits>> __y)
+     702              :     noexcept
+     703              :     { return __x.compare(__y) > 0; }
+     704              : 
+     705              :   template<typename _CharT, typename _Traits>
+     706              :     [[nodiscard]]
+     707              :     constexpr bool
+     708              :     operator> (__type_identity_t<basic_string_view<_CharT, _Traits>> __x,
+     709              :                basic_string_view<_CharT, _Traits> __y) noexcept
+     710              :     { return __x.compare(__y) > 0; }
+     711              : 
+     712              :   template<typename _CharT, typename _Traits>
+     713              :     [[nodiscard]]
+     714              :     constexpr bool
+     715              :     operator<=(basic_string_view<_CharT, _Traits> __x,
+     716              :                basic_string_view<_CharT, _Traits> __y) noexcept
+     717              :     { return __x.compare(__y) <= 0; }
+     718              : 
+     719              :   template<typename _CharT, typename _Traits>
+     720              :     [[nodiscard]]
+     721              :     constexpr bool
+     722              :     operator<=(basic_string_view<_CharT, _Traits> __x,
+     723              :                __type_identity_t<basic_string_view<_CharT, _Traits>> __y)
+     724              :     noexcept
+     725              :     { return __x.compare(__y) <= 0; }
+     726              : 
+     727              :   template<typename _CharT, typename _Traits>
+     728              :     [[nodiscard]]
+     729              :     constexpr bool
+     730              :     operator<=(__type_identity_t<basic_string_view<_CharT, _Traits>> __x,
+     731              :                basic_string_view<_CharT, _Traits> __y) noexcept
+     732              :     { return __x.compare(__y) <= 0; }
+     733              : 
+     734              :   template<typename _CharT, typename _Traits>
+     735              :     [[nodiscard]]
+     736              :     constexpr bool
+     737              :     operator>=(basic_string_view<_CharT, _Traits> __x,
+     738              :                basic_string_view<_CharT, _Traits> __y) noexcept
+     739              :     { return __x.compare(__y) >= 0; }
+     740              : 
+     741              :   template<typename _CharT, typename _Traits>
+     742              :     [[nodiscard]]
+     743              :     constexpr bool
+     744              :     operator>=(basic_string_view<_CharT, _Traits> __x,
+     745              :                __type_identity_t<basic_string_view<_CharT, _Traits>> __y)
+     746              :     noexcept
+     747              :     { return __x.compare(__y) >= 0; }
+     748              : 
+     749              :   template<typename _CharT, typename _Traits>
+     750              :     [[nodiscard]]
+     751              :     constexpr bool
+     752              :     operator>=(__type_identity_t<basic_string_view<_CharT, _Traits>> __x,
+     753              :                basic_string_view<_CharT, _Traits> __y) noexcept
+     754              :     { return __x.compare(__y) >= 0; }
+     755              : #endif // three-way comparison
+     756              : 
+     757              : #if _GLIBCXX_HOSTED
+     758              :   // [string.view.io], Inserters and extractors
+     759              :   template<typename _CharT, typename _Traits>
+     760              :     inline basic_ostream<_CharT, _Traits>&
+     761              :     operator<<(basic_ostream<_CharT, _Traits>& __os,
+     762              :                basic_string_view<_CharT,_Traits> __str)
+     763              :     { return __ostream_insert(__os, __str.data(), __str.size()); }
+     764              : #endif // HOSTED
+     765              : 
+     766              :   // basic_string_view typedef names
+     767              : 
+     768              :   using string_view = basic_string_view<char>;
+     769              :   using wstring_view = basic_string_view<wchar_t>;
+     770              : #ifdef _GLIBCXX_USE_CHAR8_T
+     771              :   using u8string_view = basic_string_view<char8_t>;
+     772              : #endif
+     773              :   using u16string_view = basic_string_view<char16_t>;
+     774              :   using u32string_view = basic_string_view<char32_t>;
+     775              : 
+     776              :   // [string.view.hash], hash support:
+     777              : 
+     778              :   template<typename _Tp>
+     779              :     struct hash;
+     780              : 
+     781              :   template<>
+     782              :     struct hash<string_view>
+     783              :     : public __hash_base<size_t, string_view>
+     784              :     {
+     785              :       [[nodiscard]]
+     786              :       size_t
+     787              :       operator()(const string_view& __str) const noexcept
+     788              :       { return std::_Hash_impl::hash(__str.data(), __str.length()); }
+     789              :     };
+     790              : 
+     791              :   template<>
+     792              :     struct __is_fast_hash<hash<string_view>> : std::false_type
+     793              :     { };
+     794              : 
+     795              :   template<>
+     796              :     struct hash<wstring_view>
+     797              :     : public __hash_base<size_t, wstring_view>
+     798              :     {
+     799              :       [[nodiscard]]
+     800              :       size_t
+     801              :       operator()(const wstring_view& __s) const noexcept
+     802              :       { return std::_Hash_impl::hash(__s.data(),
+     803              :                                      __s.length() * sizeof(wchar_t)); }
+     804              :     };
+     805              : 
+     806              :   template<>
+     807              :     struct __is_fast_hash<hash<wstring_view>> : std::false_type
+     808              :     { };
+     809              : 
+     810              : #ifdef _GLIBCXX_USE_CHAR8_T
+     811              :   template<>
+     812              :     struct hash<u8string_view>
+     813              :     : public __hash_base<size_t, u8string_view>
+     814              :     {
+     815              :       [[nodiscard]]
+     816              :       size_t
+     817              :       operator()(const u8string_view& __str) const noexcept
+     818              :       { return std::_Hash_impl::hash(__str.data(), __str.length()); }
+     819              :     };
+     820              : 
+     821              :   template<>
+     822              :     struct __is_fast_hash<hash<u8string_view>> : std::false_type
+     823              :     { };
+     824              : #endif
+     825              : 
+     826              :   template<>
+     827              :     struct hash<u16string_view>
+     828              :     : public __hash_base<size_t, u16string_view>
+     829              :     {
+     830              :       [[nodiscard]]
+     831              :       size_t
+     832              :       operator()(const u16string_view& __s) const noexcept
+     833              :       { return std::_Hash_impl::hash(__s.data(),
+     834              :                                      __s.length() * sizeof(char16_t)); }
+     835              :     };
+     836              : 
+     837              :   template<>
+     838              :     struct __is_fast_hash<hash<u16string_view>> : std::false_type
+     839              :     { };
+     840              : 
+     841              :   template<>
+     842              :     struct hash<u32string_view>
+     843              :     : public __hash_base<size_t, u32string_view>
+     844              :     {
+     845              :       [[nodiscard]]
+     846              :       size_t
+     847              :       operator()(const u32string_view& __s) const noexcept
+     848              :       { return std::_Hash_impl::hash(__s.data(),
+     849              :                                      __s.length() * sizeof(char32_t)); }
+     850              :     };
+     851              : 
+     852              :   template<>
+     853              :     struct __is_fast_hash<hash<u32string_view>> : std::false_type
+     854              :     { };
+     855              : 
+     856              :   inline namespace literals
+     857              :   {
+     858              :   inline namespace string_view_literals
+     859              :   {
+     860              : #pragma GCC diagnostic push
+     861              : #pragma GCC diagnostic ignored "-Wliteral-suffix"
+     862              :     inline constexpr basic_string_view<char>
+     863              :     operator""sv(const char* __str, size_t __len) noexcept
+     864              :     { return basic_string_view<char>{__str, __len}; }
+     865              : 
+     866              :     inline constexpr basic_string_view<wchar_t>
+     867              :     operator""sv(const wchar_t* __str, size_t __len) noexcept
+     868              :     { return basic_string_view<wchar_t>{__str, __len}; }
+     869              : 
+     870              : #ifdef _GLIBCXX_USE_CHAR8_T
+     871              :     inline constexpr basic_string_view<char8_t>
+     872              :     operator""sv(const char8_t* __str, size_t __len) noexcept
+     873              :     { return basic_string_view<char8_t>{__str, __len}; }
+     874              : #endif
+     875              : 
+     876              :     inline constexpr basic_string_view<char16_t>
+     877              :     operator""sv(const char16_t* __str, size_t __len) noexcept
+     878              :     { return basic_string_view<char16_t>{__str, __len}; }
+     879              : 
+     880              :     inline constexpr basic_string_view<char32_t>
+     881              :     operator""sv(const char32_t* __str, size_t __len) noexcept
+     882              :     { return basic_string_view<char32_t>{__str, __len}; }
+     883              : 
+     884              : #pragma GCC diagnostic pop
+     885              :   } // namespace string_literals
+     886              :   } // namespace literals
+     887              : 
+     888              : #if __cpp_lib_concepts
+     889              :   namespace ranges
+     890              :   {
+     891              :     // Opt-in to borrowed_range concept
+     892              :     template<typename _CharT, typename _Traits>
+     893              :       inline constexpr bool
+     894              :         enable_borrowed_range<basic_string_view<_CharT, _Traits>> = true;
+     895              : 
+     896              :     // Opt-in to view concept
+     897              :     template<typename _CharT, typename _Traits>
+     898              :       inline constexpr bool
+     899              :         enable_view<basic_string_view<_CharT, _Traits>> = true;
+     900              :   }
+     901              : #endif
+     902              : _GLIBCXX_END_NAMESPACE_VERSION
+     903              : } // namespace std
+     904              : 
+     905              : #include <bits/string_view.tcc>
+     906              : 
+     907              : #endif // __cplusplus <= 201402L
+     908              : 
+     909              : #endif // _GLIBCXX_EXPERIMENTAL_STRING_VIEW
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/tuple.func-c.html b/html/usr/include/c++/13/tuple.func-c.html new file mode 100644 index 0000000..99c1a29 --- /dev/null +++ b/html/usr/include/c++/13/tuple.func-c.html @@ -0,0 +1,4569 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/tuple - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - tuple (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.0 %8881
Test Date:2024-04-30 13:17:26Functions:61.0 %607370
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt11_Tuple_implILm2EJRKbEE7_M_headERKS2_0
_ZNSt15__tuple_compareISt5tupleIJRKSt6vectorIhSaIhEERKmRKbEESA_Lm0ELm3EE4__eqERKSA_SD_0
_ZNSt15__tuple_compareISt5tupleIJRKSt6vectorIhSaIhEERKmRKbEESA_Lm0ELm3EE4__eqERKSA_SD_0
_ZNSt15__tuple_compareISt5tupleIJRKSt6vectorIhSaIhEERKmRKbEESA_Lm1ELm3EE4__eqERKSA_SD_0
_ZNSt15__tuple_compareISt5tupleIJRKSt6vectorIhSaIhEERKmRKbEESA_Lm2ELm3EE4__eqERKSA_SD_0
_ZNSt15__tuple_compareISt5tupleIJRKSt6vectorIhSaIhEERKmRKbEESA_Lm3ELm3EE4__eqERKSA_SD_0
_ZSteqIJRKSt6vectorIhSaIhEERKmRKbEJS4_S6_S8_EEbRKSt5tupleIJDpT_EERKS9_IJDpT0_EE0
_ZNSt10_Head_baseILm0EZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_Lb1EEC2IS3_EEOT_198
_ZNSt10_Head_baseILm0EZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_Lb1EEC2IS3_EEOT_0
_ZNSt10_Head_baseILm1ESt14default_deleteIN3c1021AutogradMetaInterfaceEELb1EEC2IS0_IN5torch8autograd12AutogradMetaEEEEOT_0
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet10ClassifierEELb1EEC2IS0_INS1_7SPODELdEEEEOT_74
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet10ClassifierEELb1EEC2IS0_INS1_5SPODEEEEEOT_124
_ZNSt11_Tuple_implILm2EJRbEE9_M_assignIbEEvOS_ILm2EJT_EE286
_ZNSt5tupleIJRN2at6TensorERdRbEEaSIJS2_dbEEENSt9enable_ifIXcl12__assignableIDpT_EEERS5_E4typeEOS_IJS9_EE286
_ZSt3tieIJN2at6TensorEdbEESt5tupleIJDpRT_EES5_286
_ZSt3tieIJKSt6vectorIhSaIhEEKmKbEESt5tupleIJDpRT_EES9_0
_ZSt3tieIJN2at6TensorEdbEESt5tupleIJDpRT_EES5_286
_ZNSt11_Tuple_implILm1EJRdRbEE9_M_assignIdJbEEEvOS_ILm1EJT_DpT0_EE572
_ZNSt11_Tuple_implILm0EJRN2at6TensorERdRbEE9_M_assignIS2_JdbEEEvOS_ILm0EJT_DpT0_EE286
_ZNSt11_Tuple_implILm1EJRdRbEE9_M_assignIdJbEEEvOS_ILm1EJT_DpT0_EE286
_ZNSt11_Tuple_implILm1EJRdRbEEC2ES0_S1_572
_ZNSt11_Tuple_implILm0EJRKSt6vectorIhSaIhEERKmRKbEEC2ES4_S6_S8_0
_ZNSt11_Tuple_implILm1EJRKmRKbEEC2ES1_S3_0
_ZNSt11_Tuple_implILm0EJRN2at6TensorERdRbEEC2ES2_S3_S4_286
_ZNSt11_Tuple_implILm1EJRdRbEEC2ES0_S1_286
_ZNSt5tupleIJPN8bayesnet10ClassifierESt14default_deleteIS1_EEEC2IRS2_S3_INS0_5SPODEEELb1EEEOT_OT0_644
_ZNSt5tupleIJPN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEEC2IRS2_S3_IN5torch8autograd12AutogradMetaEELb1EEEOT_OT0_0
_ZNSt5tupleIJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlS7_E_EEC2IRS7_RKSO_Lb1EEEOSJ_OT0_0
_ZNSt5tupleIJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlS7_E_EEC2IRS7_RKSQ_Lb1EEEOSL_OT0_0
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_0
_ZNSt5tupleIJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlSH_E_EEC2IRSH_RKSO_Lb1EEEOSJ_OT0_0
_ZNSt5tupleIJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlSH_E_EEC2IRSH_RKSQ_Lb1EEEOSL_OT0_0
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_2
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_4
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_4
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_10
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_16
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_16
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_16
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_18
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_24
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_26
_ZNSt5tupleIJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlSM_E_EEC2IRSM_RKST_Lb1EEEOSO_OT0_50
_ZNSt5tupleIJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlSM_E_EEC2IRSM_RKSV_Lb1EEEOSQ_OT0_52
_ZNSt5tupleIJPN8bayesnet10ClassifierESt14default_deleteIS1_EEEC2IRS2_S3_INS0_7SPODELdEELb1EEEOT_OT0_74
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSO_Lb1EEEOSJ_OT0_94
_ZNSt5tupleIJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESN_EEEPT_DpOT0_EUlSH_E_EEC2IRSH_RKST_Lb1EEEOSO_OT0_114
_ZNSt5tupleIJPN8bayesnet10ClassifierESt14default_deleteIS1_EEEC2IRS2_S3_INS0_5SPODEEELb1EEEOT_OT0_124
_ZNSt11_Tuple_implILm1EJdbEE7_M_tailERS0_1144
_ZNSt11_Tuple_implILm0EJRN2at6TensorERdRbEE7_M_tailERS5_286
_ZNSt11_Tuple_implILm0EJRN2at6TensorEdbEE7_M_tailERS3_286
_ZNSt11_Tuple_implILm1EJRdRbEE7_M_tailERS2_286
_ZNSt11_Tuple_implILm1EJdbEE7_M_tailERS0_286
_ZNSt11_Tuple_implILm0EJPN8bayesnet10ClassifierESt14default_deleteIS1_EEEC2EOS5_1210
_ZNSt5tupleIJPN8bayesnet10ClassifierESt14default_deleteIS1_EEEC2EOS5_1210
_ZNSt11_Tuple_implILm1EJdbEEC2IRdJRbEvEEOT_DpOT0_1216
_ZNSt11_Tuple_implILm0EJPN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEEC2IRS2_JS3_IN5torch8autograd12AutogradMetaEEEvEEOT_DpOT0_0
_ZNSt11_Tuple_implILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlS7_E_EEC2IRS7_JRKSO_EvEEOSJ_SN_0
_ZNSt11_Tuple_implILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlS7_E_EEC2IRS7_JRKSQ_EvEEOSL_SP_0
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_0
_ZNSt11_Tuple_implILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlSH_E_EEC2IRSH_JRKSO_EvEEOSJ_SN_0
_ZNSt11_Tuple_implILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlSH_E_EEC2IRSH_JRKSQ_EvEEOSL_SP_0
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_2
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_4
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_4
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_10
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_16
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_16
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_16
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_18
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_24
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_26
_ZNSt11_Tuple_implILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlSM_E_EEC2IRSM_JRKST_EvEEOSO_SS_50
_ZNSt11_Tuple_implILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlSM_E_EEC2IRSM_JRKSV_EvEEOSQ_SU_52
_ZNSt11_Tuple_implILm0EJPN8bayesnet10ClassifierESt14default_deleteIS1_EEEC2IRS2_JS3_INS0_7SPODELdEEEvEEOT_DpOT0_74
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSO_EvEEOSJ_SN_94
_ZNSt11_Tuple_implILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESN_EEEPT_DpOT0_EUlSH_E_EEC2IRSH_JRKST_EvEEOSO_SS_114
_ZNSt11_Tuple_implILm0EJPN8bayesnet10ClassifierESt14default_deleteIS1_EEEC2IRS2_JS3_INS0_5SPODEEEEvEEOT_DpOT0_124
_ZNSt11_Tuple_implILm0EJRN2at6TensorEdbEEC2IS2_JRdRbEvEEOT_DpOT0_286
_ZNSt11_Tuple_implILm1EJdbEEC2IRdJRbEvEEOT_DpOT0_286
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet4NodeEELb1EE7_M_headERS4_43464
_ZNSt10_Head_baseILm0EZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_Lb1EE7_M_headERS4_0
_ZNSt10_Head_baseILm1ESt14default_deleteIN3c1021AutogradMetaInterfaceEELb1EE7_M_headERS4_0
_ZNSt10_Head_baseILm1ESt14default_deleteIN5torch8autograd12AutogradMetaEELb1EE7_M_headERS5_0
_ZNSt10_Head_baseILm1ESt14default_deleteIN5torch8autograd15FunctionPreHookEELb1EE7_M_headERS5_0
_ZNSt10_Head_baseILm1ESt14default_deleteIN5torch8autograd22PostAccumulateGradHookEELb1EE7_M_headERS5_0
_ZNSt10_Head_baseILm1ESt14default_deleteINSt6thread6_StateEELb1EE7_M_headERS4_0
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet7SPODELdEELb1EE7_M_headERS4_74
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet5SPODEEELb1EE7_M_headERS4_412
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet10ClassifierEELb1EE7_M_headERS4_2838
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet4NodeEELb1EE7_M_headERS4_40140
_ZSt3getILm0EJZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_EEONSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeEOS8_1605734
_ZSt3getILm0EJZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_EEONSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeEOS8_0
_ZSt3getILm0EJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_EEONSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeEOSD_122
_ZSt3getILm0EJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EEONSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeEOSA_536
_ZSt3getILm0EJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EEONSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeEOSA_734
_ZSt3getILm0EJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_EEONSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeEOSU_14194
_ZSt3getILm0EJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_EEONSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeEOSM_1590148
_ZNSt10_Head_baseILm0EPN8bayesnet4NodeELb0EEC2Ev2051824
_ZNSt10_Head_baseILm0EPN5torch8autograd12AutogradMetaELb0EEC2Ev0
_ZNSt10_Head_baseILm0EPN5torch8autograd22PostAccumulateGradHookELb0EEC2Ev0
_ZNSt10_Head_baseILm0EPN8bayesnet7SPODELdELb0EEC2Ev74
_ZNSt10_Head_baseILm0EPN8bayesnet5SPODEELb0EEC2Ev412
_ZNSt10_Head_baseILm0EPN8bayesnet4NodeELb0EEC2Ev26760
_ZNSt10_Head_baseILm0EPN3c1021AutogradMetaInterfaceELb0EEC2Ev418844
_ZNSt10_Head_baseILm0EPNSt6thread6_StateELb0EEC2Ev1605734
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet4NodeEELb1EEC2Ev2051824
_ZNSt10_Head_baseILm1ESt14default_deleteIN5torch8autograd12AutogradMetaEELb1EEC2Ev0
_ZNSt10_Head_baseILm1ESt14default_deleteIN5torch8autograd22PostAccumulateGradHookEELb1EEC2Ev0
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet7SPODELdEELb1EEC2Ev74
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet5SPODEEELb1EEC2Ev412
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet4NodeEELb1EEC2Ev26760
_ZNSt10_Head_baseILm1ESt14default_deleteIN3c1021AutogradMetaInterfaceEELb1EEC2Ev418844
_ZNSt10_Head_baseILm1ESt14default_deleteINSt6thread6_StateEELb1EEC2Ev1605734
_ZNSt11_Tuple_implILm0EJPN8bayesnet4NodeESt14default_deleteIS1_EEEC2Ev2051824
_ZNSt11_Tuple_implILm0EJPN5torch8autograd12AutogradMetaESt14default_deleteIS2_EEEC2Ev0
_ZNSt11_Tuple_implILm0EJPN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EEEC2Ev0
_ZNSt11_Tuple_implILm0EJPN8bayesnet7SPODELdESt14default_deleteIS1_EEEC2Ev74
_ZNSt11_Tuple_implILm0EJPN8bayesnet5SPODEESt14default_deleteIS1_EEEC2Ev412
_ZNSt11_Tuple_implILm0EJPN8bayesnet4NodeESt14default_deleteIS1_EEEC2Ev26760
_ZNSt11_Tuple_implILm0EJPN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEEC2Ev418844
_ZNSt11_Tuple_implILm0EJPNSt6thread6_StateESt14default_deleteIS1_EEEC2Ev1605734
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet4NodeEEEEC2Ev2051824
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN5torch8autograd12AutogradMetaEEEEC2Ev0
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN5torch8autograd22PostAccumulateGradHookEEEEC2Ev0
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet7SPODELdEEEEC2Ev74
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet5SPODEEEEEC2Ev412
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet4NodeEEEEC2Ev26760
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN3c1021AutogradMetaInterfaceEEEEC2Ev418844
_ZNSt11_Tuple_implILm1EJSt14default_deleteINSt6thread6_StateEEEEC2Ev1605734
_ZNSt5tupleIJPN8bayesnet4NodeESt14default_deleteIS1_EEEC2ILb1ELb1EEEv2051824
_ZNSt5tupleIJPN5torch8autograd12AutogradMetaESt14default_deleteIS2_EEEC2ILb1ELb1EEEv0
_ZNSt5tupleIJPN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EEEC1ILb1ELb1EEEv0
_ZNSt5tupleIJPN8bayesnet7SPODELdESt14default_deleteIS1_EEEC2ILb1ELb1EEEv74
_ZNSt5tupleIJPN8bayesnet5SPODEESt14default_deleteIS1_EEEC2ILb1ELb1EEEv412
_ZNSt5tupleIJPN8bayesnet4NodeESt14default_deleteIS1_EEEC2ILb1ELb1EEEv26760
_ZNSt5tupleIJPN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEEC2ILb1ELb1EEEv418844
_ZNSt5tupleIJPNSt6thread6_StateESt14default_deleteIS1_EEEC2ILb1ELb1EEEv1605734
_ZSt16forward_as_tupleIJiEESt5tupleIJDpOT_EES3_3129356
_ZSt16forward_as_tupleIJSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEESt5tupleIJDpOT_EESB_0
_ZSt16forward_as_tupleIJiEESt5tupleIJDpOT_EES3_191524
_ZSt16forward_as_tupleIJSt4pairIiiEEESt5tupleIJDpOT_EES5_1347666
_ZSt16forward_as_tupleIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESt5tupleIJDpOT_EES9_1590166
_ZNSt11_Tuple_implILm1EJdbEE7_M_headERS0_3736022
_ZNSt11_Tuple_implILm0EJPN5torch8autograd12AutogradMetaESt14default_deleteIS2_EEE7_M_headERS6_0
_ZNSt11_Tuple_implILm0EJPN5torch8autograd15FunctionPreHookESt14default_deleteIS2_EEE7_M_headERS6_0
_ZNSt11_Tuple_implILm0EJPN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EEE7_M_headERS6_0
_ZNSt11_Tuple_implILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlS7_E_EE7_M_headERSP_0
_ZNSt11_Tuple_implILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlS7_E_EE7_M_headERSR_0
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlSH_E_EE7_M_headERSP_0
_ZNSt11_Tuple_implILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlSH_E_EE7_M_headERSR_0
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_6
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_12
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_12
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_30
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_48
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_48
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_48
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_54
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_72
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_78
_ZNSt11_Tuple_implILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlSM_E_EE7_M_headERSU_150
_ZNSt11_Tuple_implILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlSM_E_EE7_M_headERSW_156
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlS6_E_EE7_M_headERSP_282
_ZNSt11_Tuple_implILm0EJRN2at6TensorERdRbEE7_M_headERS5_286
_ZNSt11_Tuple_implILm0EJRN2at6TensorEdbEE7_M_headERS3_286
_ZNSt11_Tuple_implILm1EJRdRbEE7_M_headERS2_286
_ZNSt11_Tuple_implILm1EJdbEE7_M_headERS0_286
_ZNSt11_Tuple_implILm0EJPN8bayesnet7SPODELdESt14default_deleteIS1_EEE7_M_headERS5_296
_ZNSt11_Tuple_implILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESN_EEEPT_DpOT0_EUlSH_E_EE7_M_headERSU_342
_ZNSt11_Tuple_implILm0EJPN8bayesnet5SPODEESt14default_deleteIS1_EEE7_M_headERS5_1648
_ZNSt11_Tuple_implILm0EJPN8bayesnet10ClassifierESt14default_deleteIS1_EEE7_M_headERS5_7624
_ZNSt11_Tuple_implILm0EJPN8bayesnet4NodeESt14default_deleteIS1_EEE7_M_headERS5_93660
_ZNSt11_Tuple_implILm0EJPN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEE7_M_headERS5_418844
_ZNSt11_Tuple_implILm0EJPNSt6thread6_StateESt14default_deleteIS1_EEE7_M_headERS5_3211468
_ZNSt5tupleIJOiEEC2IJiELb1ELb1EEEDpOT_4735376
_ZNSt5tupleIJOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEEC2IJS7_ELb1ELb1EEEDpOT_0
_ZNSt5tupleIJZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_EEC2IJS3_ELb1ELb1EEEDpOT_0
_ZNSt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_EEC2IJS8_ELb1ELb1EEEDpOT_122
_ZNSt5tupleIJRN2at6TensorEdbEEC2IJS2_RdRbELb1ELb1EEEDpOT_286
_ZNSt5tupleIJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EEC2IJS5_ELb1ELb1EEEDpOT_536
_ZNSt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EEC2IJS5_ELb1ELb1EEEDpOT_734
_ZNSt5tupleIJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_EEC2IJSP_ELb1ELb1EEEDpOT_14194
_ZNSt5tupleIJOiEEC2IJiELb1ELb1EEEDpOT_191524
_ZNSt5tupleIJOSt4pairIiiEEEC2IJS1_ELb1ELb1EEEDpOT_1347666
_ZNSt5tupleIJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_EEC2IJSH_ELb1ELb1EEEDpOT_1590148
_ZNSt5tupleIJONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2IJS5_ELb1ELb1EEEDpOT_1590166
_ZNSt11_Tuple_implILm0EJOiEEC2IiEEOT_4735574
_ZNSt11_Tuple_implILm0EJOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEEC2IS7_EEOT_0
_ZNSt11_Tuple_implILm0EJZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_EEC2IS3_EEOT_0
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN3c1021AutogradMetaInterfaceEEEEC2IS0_IN5torch8autograd12AutogradMetaEEEEOT_0
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet10ClassifierEEEEC2IS0_INS1_7SPODELdEEEEOT_74
_ZNSt11_Tuple_implILm0EJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_EEC2IS8_EEOT_122
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet10ClassifierEEEEC2IS0_INS1_5SPODEEEEEOT_124
_ZNSt11_Tuple_implILm2EJbEEC2IRbEEOT_286
_ZNSt11_Tuple_implILm0EJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EEC2IS5_EEOT_536
_ZNSt11_Tuple_implILm0EJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EEC2IS5_EEOT_734
_ZNSt11_Tuple_implILm0EJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_EEC2ISP_EEOT_14194
_ZNSt11_Tuple_implILm0EJOiEEC2IiEEOT_191524
_ZNSt11_Tuple_implILm0EJOSt4pairIiiEEEC2IS1_EEOT_1347666
_ZNSt11_Tuple_implILm0EJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_EEC2ISH_EEOT_1590148
_ZNSt11_Tuple_implILm0EJONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2IS5_EEOT_1590166
_ZNSt10_Head_baseILm0EOiLb0EEC2IiEEOT_4736306
_ZNSt10_Head_baseILm0EOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ELb0EEC2IS7_EEOT_0
_ZNSt10_Head_baseILm0EPN3c1021AutogradMetaInterfaceELb0EEC2IRS2_EEOT_0
_ZNSt10_Head_baseILm0EPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEELb0EEC2IRS7_EEOT_0
_ZNSt10_Head_baseILm0EPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEELb0EEC2IRSM_EEOT_102
_ZNSt10_Head_baseILm0EPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EELb0EEC2IRSH_EEOT_114
_ZNSt10_Head_baseILm0EZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_Lb0EEC2IS8_EEOT_122
_ZNSt10_Head_baseILm0EPN8bayesnet10ClassifierELb0EEC2IRS2_EEOT_198
_ZNSt10_Head_baseILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EEC2IRS6_EEOT_230
_ZNSt10_Head_baseILm1EdLb0EEC2IRdEEOT_286
_ZNSt10_Head_baseILm2EbLb0EEC2IRbEEOT_286
_ZNSt10_Head_baseILm0EZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_Lb0EEC2IS5_EEOT_536
_ZNSt10_Head_baseILm0EZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_Lb0EEC2IS5_EEOT_734
_ZNSt10_Head_baseILm0EZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_Lb0EEC2ISP_EEOT_14194
_ZNSt10_Head_baseILm0EOiLb0EEC2IiEEOT_191524
_ZNSt10_Head_baseILm0EOSt4pairIiiELb0EEC2IS1_EEOT_1347666
_ZNSt10_Head_baseILm0EZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_Lb0EEC2ISH_EEOT_1590148
_ZNSt10_Head_baseILm0EONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EEC2IS5_EEOT_1590166
_ZNSt5tupleIJRKiEEC2ILb1ELb1EEES1_8756886
_ZNSt5tupleIJRKSt6vectorIhSaIhEERKmRKbEEC2ILb1ELb1EEES4_S6_S8_0
_ZNSt5tupleIJRKlEEC2ILb1ELb1EEES1_0
_ZNSt5tupleIJRN2at6TensorERdRbEEC2ILb1ELb1EEES2_S3_S4_286
_ZNSt5tupleIJRKiEEC2ILb1ELb1EEES1_8460
_ZNSt5tupleIJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2ILb1ELb1EEES7_8748140
_ZNSt11_Tuple_implILm2EJRbEEC2ES0_8757332
_ZNSt11_Tuple_implILm0EJRKlEEC2ES1_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJEEEPT_DpOT0_EUlPSH_E_EEC2ERKSO_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_EEC2ERKSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJEEEPT_DpOT0_EUlPSH_E_EEC2ERKSO_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_EEC2ERKSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA1_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_0
_ZNSt11_Tuple_implILm2EJRKbEEC2ES1_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA2_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_2
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA15_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_4
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA17_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_4
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA4_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_10
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA12_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_16
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA5_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_16
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA6_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_16
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA16_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_18
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA13_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_24
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA10_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_26
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJEEEPT_DpOT0_EUlPSM_E_EEC2ERKST_50
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJRKSM_EEEPT_DpOT0_EUlPSM_E_EEC2ERKSV_52
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRKSA_EEEPT_DpOT0_EUlPSA_E_EEC2ERKSO_94
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJPKNS1_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSH_E_EEC2ERKST_114
_ZNSt11_Tuple_implILm2EJRbEEC2ES0_286
_ZNSt11_Tuple_implILm0EJRKiEEC2ES1_8460
_ZNSt11_Tuple_implILm0EJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2ES7_8748140
_ZNSt10_Head_baseILm1ERdLb0EEC2ES0_8758190
_ZNSt10_Head_baseILm0ERKSt6vectorIhSaIhEELb0EEC2ES4_0
_ZNSt10_Head_baseILm0ERKlLb0EEC2ES1_0
_ZNSt10_Head_baseILm1ERKmLb0EEC2ES1_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJEEEPT_DpOT0_EUlPSH_E_Lb0EEC2ERKSO_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_Lb0EEC2ERKSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJEEEPT_DpOT0_EUlPSH_E_Lb0EEC2ERKSO_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_Lb0EEC2ERKSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA1_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_0
_ZNSt10_Head_baseILm2ERKbLb0EEC2ES1_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA2_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_2
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA15_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_4
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA17_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_4
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA4_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_10
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA12_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_16
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA5_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_16
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA6_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_16
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA16_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_18
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA13_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_24
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA10_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_26
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJEEEPT_DpOT0_EUlPSM_E_Lb0EEC2ERKST_50
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJRKSM_EEEPT_DpOT0_EUlPSM_E_Lb0EEC2ERKSV_52
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRKSA_EEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSO_94
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJPKNS1_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSH_E_Lb0EEC2ERKST_114
_ZNSt10_Head_baseILm1ERdLb0EEC2ES0_286
_ZNSt10_Head_baseILm2ERbLb0EEC2ES0_286
_ZNSt10_Head_baseILm0ERN2at6TensorELb0EEC2ES2_572
_ZNSt10_Head_baseILm0ERKiLb0EEC2ES1_8460
_ZNSt10_Head_baseILm0ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EEC2ES7_8748140
_ZNSt4pairIKidEC2IJOiEJEEESt21piecewise_construct_tSt5tupleIJDpT_EES5_IJDpT0_EE10538856
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IJRS6_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESE_IJDpT0_EE0
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_IdSaIdEESaIS9_EEEC2IJRS6_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESG_IJDpT0_EE0
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC2IJRS6_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESB_IJDpT0_EE0
_ZNSt4pairIKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EfEC2IJOS6_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESC_IJDpT0_EE0
_ZNSt4pairIKllEC2IJRS0_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EES5_IJDpT0_EE0
_ZNSt4pairIKS_IiiEdEC2IJOS0_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EES6_IJDpT0_EE584
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEC2IJRS6_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESE_IJDpT0_EE848
_ZNSt4pairIKiSt6vectorIiSaIiEEEC2IJRS0_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EES8_IJDpT0_EE1018
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEC2IJRS6_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESE_IJDpT0_EE2590
_ZNSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS_IS0_dEEEEC2IJRS0_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESD_IJDpT0_EE7442
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS9_EEEC2IJRS6_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESH_IJDpT0_EE13380
_ZNSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS_IS0_dEEEEC2IJOiEJEEESt21piecewise_construct_tSt5tupleIJDpT_EESD_IJDpT0_EE51476
_ZNSt4pairIKidEC2IJOiEJEEESt21piecewise_construct_tSt5tupleIJDpT_EES5_IJDpT0_EE140048
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IJOS5_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESB_IJDpT0_EE1590148
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IJRS6_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESB_IJDpT0_EE8731322
_ZNSt4pairIKidEC2IJOiEJLm0EEJEJEEERSt5tupleIJDpT_EERS4_IJDpT1_EESt12_Index_tupleIJXspT0_EEESD_IJXspT2_EEE10538856
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IJRS6_EJLm0EEJEJEEERSt5tupleIJDpT_EERSD_IJDpT1_EESt12_Index_tupleIJXspT0_EEESM_IJXspT2_EEE0
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_IdSaIdEESaIS9_EEEC2IJRS6_EJLm0EEJEJEEERSt5tupleIJDpT_EERSF_IJDpT1_EESt12_Index_tupleIJXspT0_EEESO_IJXspT2_EEE0
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC2IJRS6_EJLm0EEJEJEEERSt5tupleIJDpT_EERSA_IJDpT1_EESt12_Index_tupleIJXspT0_EEESJ_IJXspT2_EEE0
_ZNSt4pairIKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EfEC2IJOS6_EJLm0EEJEJEEERSt5tupleIJDpT_EERSB_IJDpT1_EESt12_Index_tupleIJXspT0_EEESK_IJXspT2_EEE0
_ZNSt4pairIKllEC2IJRS0_EJLm0EEJEJEEERSt5tupleIJDpT_EERS4_IJDpT1_EESt12_Index_tupleIJXspT0_EEESD_IJXspT2_EEE0
_ZNSt4pairIKS_IiiEdEC2IJOS0_EJLm0EEJEJEEERSt5tupleIJDpT_EERS5_IJDpT1_EESt12_Index_tupleIJXspT0_EEESE_IJXspT2_EEE584
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEC2IJRS6_EJLm0EEJEJEEERSt5tupleIJDpT_EERSD_IJDpT1_EESt12_Index_tupleIJXspT0_EEESM_IJXspT2_EEE848
_ZNSt4pairIKiSt6vectorIiSaIiEEEC2IJRS0_EJLm0EEJEJEEERSt5tupleIJDpT_EERS7_IJDpT1_EESt12_Index_tupleIJXspT0_EEESG_IJXspT2_EEE1018
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEC2IJRS6_EJLm0EEJEJEEERSt5tupleIJDpT_EERSD_IJDpT1_EESt12_Index_tupleIJXspT0_EEESM_IJXspT2_EEE2590
_ZNSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS_IS0_dEEEEC2IJRS0_EJLm0EEJEJEEERSt5tupleIJDpT_EERSC_IJDpT1_EESt12_Index_tupleIJXspT0_EEESL_IJXspT2_EEE7442
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS9_EEEC2IJRS6_EJLm0EEJEJEEERSt5tupleIJDpT_EERSG_IJDpT1_EESt12_Index_tupleIJXspT0_EEESP_IJXspT2_EEE13380
_ZNSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS_IS0_dEEEEC2IJOiEJLm0EEJEJEEERSt5tupleIJDpT_EERSC_IJDpT1_EESt12_Index_tupleIJXspT0_EEESL_IJXspT2_EEE51476
_ZNSt4pairIKidEC2IJOiEJLm0EEJEJEEERSt5tupleIJDpT_EERS4_IJDpT1_EESt12_Index_tupleIJXspT0_EEESD_IJXspT2_EEE140048
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IJOS5_EJLm0EEJEJEEERSt5tupleIJDpT_EERSA_IJDpT1_EESt12_Index_tupleIJXspT0_EEESJ_IJXspT2_EEE1590148
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IJRS6_EJLm0EEJEJEEERSt5tupleIJDpT_EERSA_IJDpT1_EESt12_Index_tupleIJXspT0_EEESJ_IJXspT2_EEE8731322
_ZNSt5tupleIJOiEEC2EOS1_11885956
_ZNSt5tupleIJOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEEC2EOS9_0
_ZNSt5tupleIJRKlEEC2EOS2_0
_ZNSt5tupleIJRKiEEC2EOS2_8460
_ZNSt5tupleIJOiEEC2EOS1_191524
_ZNSt5tupleIJOSt4pairIiiEEEC2EOS3_1347666
_ZNSt5tupleIJONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2EOS7_1590166
_ZNSt5tupleIJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2EOS8_8748140
_ZNSt11_Tuple_implILm0EJOiEEC2EOS1_11887166
_ZNSt11_Tuple_implILm0EJOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEEC2EOS9_0
_ZNSt11_Tuple_implILm0EJRKlEEC2EOS2_0
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet10ClassifierEEEEC2EOS4_1210
_ZNSt11_Tuple_implILm0EJRKiEEC2EOS2_8460
_ZNSt11_Tuple_implILm0EJOiEEC2EOS1_191524
_ZNSt11_Tuple_implILm0EJOSt4pairIiiEEEC2EOS3_1347666
_ZNSt11_Tuple_implILm0EJONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2EOS7_1590166
_ZNSt11_Tuple_implILm0EJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2EOS8_8748140
_ZNSt11_Tuple_implILm2EJbEE7_M_headERS0_13535726
_ZNSt11_Tuple_implILm0EJOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEE7_M_headERS9_0
_ZNSt11_Tuple_implILm0EJRKlEE7_M_headERS2_0
_ZNSt11_Tuple_implILm0EJZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_EE7_M_headERS4_0
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN3c1021AutogradMetaInterfaceEEEE7_M_headERS4_0
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN5torch8autograd12AutogradMetaEEEE7_M_headERS5_0
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN5torch8autograd15FunctionPreHookEEEE7_M_headERS5_0
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN5torch8autograd22PostAccumulateGradHookEEEE7_M_headERS5_0
_ZNSt11_Tuple_implILm1EJSt14default_deleteINSt6thread6_StateEEEE7_M_headERS4_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJEEEPT_DpOT0_EUlPSH_E_EE7_M_headERSP_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_EE7_M_headERSR_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJEEEPT_DpOT0_EUlPSM_E_EE7_M_headERSU_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJRKSM_EEEPT_DpOT0_EUlPSM_E_EE7_M_headERSW_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJEEEPT_DpOT0_EUlPSH_E_EE7_M_headERSP_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJPKNS1_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSH_E_EE7_M_headERSU_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_EE7_M_headERSR_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA10_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA12_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA13_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA15_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA16_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA17_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA1_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA2_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA4_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA5_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA6_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRKSA_EEEPT_DpOT0_EUlPSA_E_EE7_M_headERSP_0
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet7SPODELdEEEE7_M_headERS4_74
_ZNSt11_Tuple_implILm0EJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_EE7_M_headERS9_122
_ZNSt11_Tuple_implILm2EJRbEE7_M_headERS1_286
_ZNSt11_Tuple_implILm2EJbEE7_M_headERS0_286
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet5SPODEEEEE7_M_headERS4_412
_ZNSt11_Tuple_implILm0EJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EE7_M_headERS6_536
_ZNSt11_Tuple_implILm0EJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EE7_M_headERS6_734
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet10ClassifierEEEE7_M_headERS4_2838
_ZNSt11_Tuple_implILm0EJRKiEE7_M_headERS2_8460
_ZNSt11_Tuple_implILm0EJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_EE7_M_headERSQ_14194
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet4NodeEEEE7_M_headERS4_40140
_ZNSt11_Tuple_implILm0EJOiEE7_M_headERS1_191524
_ZNSt11_Tuple_implILm0EJOSt4pairIiiEEE7_M_headERS3_1347666
_ZNSt11_Tuple_implILm0EJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_EE7_M_headERSI_1590148
_ZNSt11_Tuple_implILm0EJONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE7_M_headERS7_1590166
_ZNSt11_Tuple_implILm0EJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE7_M_headERS8_8748140
_ZSt3getILm0EJOiEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS5_15664298
_ZSt3getILm0EJOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSD_0
_ZSt3getILm0EJPN5torch8autograd12AutogradMetaESt14default_deleteIS2_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSA_0
_ZSt3getILm0EJPN5torch8autograd15FunctionPreHookESt14default_deleteIS2_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSA_0
_ZSt3getILm0EJPN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSA_0
_ZSt3getILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlS7_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSL_EEE4typeERSS_0
_ZSt3getILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlS7_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSN_EEE4typeERSU_0
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlSH_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSL_EEE4typeERSS_0
_ZSt3getILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlSH_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSN_EEE4typeERSU_0
_ZSt3getILm0EJRKlEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS6_0
_ZSt3getILm1EJPN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_0
_ZSt3getILm1EJPN5torch8autograd12AutogradMetaESt14default_deleteIS2_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSA_0
_ZSt3getILm1EJPN5torch8autograd15FunctionPreHookESt14default_deleteIS2_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSA_0
_ZSt3getILm1EJPN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSA_0
_ZSt3getILm1EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlS7_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSL_EEE4typeERSS_0
_ZSt3getILm1EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlS7_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSN_EEE4typeERSU_0
_ZSt3getILm1EJPNSt6thread6_StateESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSL_EEE4typeERSS_0
_ZSt3getILm1EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlSM_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSQ_EEE4typeERSX_0
_ZSt3getILm1EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlSM_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSS_EEE4typeERSZ_0
_ZSt3getILm1EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlSH_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSL_EEE4typeERSS_0
_ZSt3getILm1EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESN_EEEPT_DpOT0_EUlSH_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSQ_EEE4typeERSX_0
_ZSt3getILm1EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlSH_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSN_EEE4typeERSU_0
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_6
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_12
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_12
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_30
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_48
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_48
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_48
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_54
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_72
_ZSt3getILm1EJPN8bayesnet7SPODELdESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_74
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_78
_ZSt3getILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlSM_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSQ_EEE4typeERSX_150
_ZSt3getILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlSM_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSS_EEE4typeERSZ_156
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSL_EEE4typeERSS_282
_ZSt3getILm0EJPN8bayesnet7SPODELdESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_296
_ZSt3getILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESN_EEEPT_DpOT0_EUlSH_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSQ_EEE4typeERSX_342
_ZSt3getILm1EJPN8bayesnet5SPODEESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_412
_ZSt3getILm0EJPN8bayesnet5SPODEESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_1648
_ZSt3getILm1EJPN8bayesnet10ClassifierESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_2838
_ZSt3getILm0EJPN8bayesnet10ClassifierESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_7624
_ZSt3getILm0EJRKiEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS6_8460
_ZSt3getILm1EJPN8bayesnet4NodeESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_40140
_ZSt3getILm0EJPN8bayesnet4NodeESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_93660
_ZSt3getILm0EJOiEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS5_191524
_ZSt3getILm0EJPN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_418844
_ZSt3getILm0EJOSt4pairIiiEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS7_1347666
_ZSt3getILm0EJONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSB_1590166
_ZSt3getILm0EJPNSt6thread6_StateESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_3211468
_ZSt3getILm0EJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSC_8748140
_ZNSt10_Head_baseILm1EdLb0EE7_M_headERS0_17228284
_ZNSt10_Head_baseILm0EOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ELb0EE7_M_headERS9_0
_ZNSt10_Head_baseILm0EPN5torch8autograd12AutogradMetaELb0EE7_M_headERS4_0
_ZNSt10_Head_baseILm0EPN5torch8autograd15FunctionPreHookELb0EE7_M_headERS4_0
_ZNSt10_Head_baseILm0EPN5torch8autograd22PostAccumulateGradHookELb0EE7_M_headERS4_0
_ZNSt10_Head_baseILm0EPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEELb0EE7_M_headERS8_0
_ZNSt10_Head_baseILm0ERKlLb0EE7_M_headERS2_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJEEEPT_DpOT0_EUlPSH_E_Lb0EE7_M_headERSP_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_Lb0EE7_M_headERSR_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJEEEPT_DpOT0_EUlPSM_E_Lb0EE7_M_headERSU_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJRKSM_EEEPT_DpOT0_EUlPSM_E_Lb0EE7_M_headERSW_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJEEEPT_DpOT0_EUlPSH_E_Lb0EE7_M_headERSP_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJPKNS1_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSH_E_Lb0EE7_M_headERSU_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_Lb0EE7_M_headERSR_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA10_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA12_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA13_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA15_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA16_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA17_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA1_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA2_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA4_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA5_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA6_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRKSA_EEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSP_0
_ZNSt10_Head_baseILm0EZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_Lb0EE7_M_headERS9_122
_ZNSt10_Head_baseILm1ERdLb0EE7_M_headERS1_286
_ZNSt10_Head_baseILm1EdLb0EE7_M_headERS0_286
_ZNSt10_Head_baseILm2ERbLb0EE7_M_headERS1_286
_ZNSt10_Head_baseILm2EbLb0EE7_M_headERS0_286
_ZNSt10_Head_baseILm0EPN8bayesnet7SPODELdELb0EE7_M_headERS3_296
_ZNSt10_Head_baseILm0EPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEELb0EE7_M_headERSN_306
_ZNSt10_Head_baseILm0EPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EELb0EE7_M_headERSI_342
_ZNSt10_Head_baseILm0EZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_Lb0EE7_M_headERS6_536
_ZNSt10_Head_baseILm0ERN2at6TensorELb0EE7_M_headERS3_572
_ZNSt10_Head_baseILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EE7_M_headERS7_690
_ZNSt10_Head_baseILm0EZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_Lb0EE7_M_headERS6_734
_ZNSt10_Head_baseILm0EPN8bayesnet5SPODEELb0EE7_M_headERS3_1648
_ZNSt10_Head_baseILm0EPN8bayesnet10ClassifierELb0EE7_M_headERS3_7624
_ZNSt10_Head_baseILm0ERKiLb0EE7_M_headERS2_8460
_ZNSt10_Head_baseILm0EZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_Lb0EE7_M_headERSQ_14194
_ZNSt10_Head_baseILm0EPN8bayesnet4NodeELb0EE7_M_headERS3_93660
_ZNSt10_Head_baseILm0EOiLb0EE7_M_headERS1_191524
_ZNSt10_Head_baseILm0EPN3c1021AutogradMetaInterfaceELb0EE7_M_headERS3_418844
_ZNSt10_Head_baseILm0EOSt4pairIiiELb0EE7_M_headERS3_1347666
_ZNSt10_Head_baseILm0EZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_Lb0EE7_M_headERSI_1590148
_ZNSt10_Head_baseILm0EONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EE7_M_headERS7_1590166
_ZNSt10_Head_baseILm0EPNSt6thread6_StateELb0EE7_M_headERS3_3211468
_ZNSt10_Head_baseILm0ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EE7_M_headERS8_8748140
_ZSt12__get_helperILm0EOiJEERT0_RSt11_Tuple_implIXT_EJS1_DpT1_EE17270032
_ZSt12__get_helperILm0EOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EJEERT0_RSt11_Tuple_implIXT_EJS9_DpT1_EE0
_ZSt12__get_helperILm0EPN5torch8autograd12AutogradMetaEJSt14default_deleteIS2_EEERT0_RSt11_Tuple_implIXT_EJS6_DpT1_EE0
_ZSt12__get_helperILm0EPN5torch8autograd15FunctionPreHookEJSt14default_deleteIS2_EEERT0_RSt11_Tuple_implIXT_EJS6_DpT1_EE0
_ZSt12__get_helperILm0EPN5torch8autograd22PostAccumulateGradHookEJSt14default_deleteIS2_EEERT0_RSt11_Tuple_implIXT_EJS6_DpT1_EE0
_ZSt12__get_helperILm0EPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEJZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlS7_E_EERT0_RSt11_Tuple_implIXT_EJSP_DpT1_EE0
_ZSt12__get_helperILm0EPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEJZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlS7_E_EERT0_RSt11_Tuple_implIXT_EJSR_DpT1_EE0
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm0EPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEJZNSE_6createISG_JEEEPT_DpOT0_EUlSH_E_EERT0_RSt11_Tuple_implIXT_EJSP_DpT1_EE0
_ZSt12__get_helperILm0EPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEJZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlSH_E_EERT0_RSt11_Tuple_implIXT_EJSR_DpT1_EE0
_ZSt12__get_helperILm0ERKlJEERT0_RSt11_Tuple_implIXT_EJS2_DpT1_EE0
_ZSt12__get_helperILm0EZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_JEERT0_RSt11_Tuple_implIXT_EJS4_DpT1_EE0
_ZSt12__get_helperILm1ESt14default_deleteIN3c1021AutogradMetaInterfaceEEJEERT0_RSt11_Tuple_implIXT_EJS4_DpT1_EE0
_ZSt12__get_helperILm1ESt14default_deleteIN5torch8autograd12AutogradMetaEEJEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE0
_ZSt12__get_helperILm1ESt14default_deleteIN5torch8autograd15FunctionPreHookEEJEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE0
_ZSt12__get_helperILm1ESt14default_deleteIN5torch8autograd22PostAccumulateGradHookEEJEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE0
_ZSt12__get_helperILm1ESt14default_deleteINSt6thread6_StateEEJEERT0_RSt11_Tuple_implIXT_EJS4_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJEEEPT_DpOT0_EUlPSH_E_JEERT0_RSt11_Tuple_implIXT_EJSP_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_JEERT0_RSt11_Tuple_implIXT_EJSR_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJEEEPT_DpOT0_EUlPSM_E_JEERT0_RSt11_Tuple_implIXT_EJSU_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJRKSM_EEEPT_DpOT0_EUlPSM_E_JEERT0_RSt11_Tuple_implIXT_EJSW_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJEEEPT_DpOT0_EUlPSH_E_JEERT0_RSt11_Tuple_implIXT_EJSP_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJPKNS1_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSH_E_JEERT0_RSt11_Tuple_implIXT_EJSU_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_JEERT0_RSt11_Tuple_implIXT_EJSR_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA10_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA12_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA13_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA15_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA16_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA17_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA1_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA2_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA4_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA5_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA6_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRKSA_EEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSP_DpT1_EE0
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE6
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE12
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE12
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE30
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE48
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE48
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE48
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE54
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE72
_ZSt12__get_helperILm1ESt14default_deleteIN8bayesnet7SPODELdEEJEERT0_RSt11_Tuple_implIXT_EJS4_DpT1_EE74
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE78
_ZSt12__get_helperILm0EZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_JEERT0_RSt11_Tuple_implIXT_EJS9_DpT1_EE122
_ZSt12__get_helperILm0EPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEJZNSE_6createISL_JEEEPT_DpOT0_EUlSM_E_EERT0_RSt11_Tuple_implIXT_EJSU_DpT1_EE150
_ZSt12__get_helperILm0EPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEJZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlSM_E_EERT0_RSt11_Tuple_implIXT_EJSW_DpT1_EE156
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSP_DpT1_EE282
_ZSt12__get_helperILm0EPN8bayesnet7SPODELdEJSt14default_deleteIS1_EEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE296
_ZSt12__get_helperILm0EPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEJZNSE_6createISG_JPKNS2_6detail8json_refISE_EESN_EEEPT_DpOT0_EUlSH_E_EERT0_RSt11_Tuple_implIXT_EJSU_DpT1_EE342
_ZSt12__get_helperILm1ESt14default_deleteIN8bayesnet5SPODEEEJEERT0_RSt11_Tuple_implIXT_EJS4_DpT1_EE412
_ZSt12__get_helperILm0EZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_JEERT0_RSt11_Tuple_implIXT_EJS6_DpT1_EE536
_ZSt12__get_helperILm0EZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_JEERT0_RSt11_Tuple_implIXT_EJS6_DpT1_EE734
_ZSt12__get_helperILm0EPN8bayesnet5SPODEEJSt14default_deleteIS1_EEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE1648
_ZSt12__get_helperILm1ESt14default_deleteIN8bayesnet10ClassifierEEJEERT0_RSt11_Tuple_implIXT_EJS4_DpT1_EE2838
_ZSt12__get_helperILm0EPN8bayesnet10ClassifierEJSt14default_deleteIS1_EEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE7624
_ZSt12__get_helperILm0ERKiJEERT0_RSt11_Tuple_implIXT_EJS2_DpT1_EE8460
_ZSt12__get_helperILm0EZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE14194
_ZSt12__get_helperILm1ESt14default_deleteIN8bayesnet4NodeEEJEERT0_RSt11_Tuple_implIXT_EJS4_DpT1_EE40140
_ZSt12__get_helperILm0EPN8bayesnet4NodeEJSt14default_deleteIS1_EEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE93660
_ZSt12__get_helperILm0EOiJEERT0_RSt11_Tuple_implIXT_EJS1_DpT1_EE191524
_ZSt12__get_helperILm0EPN3c1021AutogradMetaInterfaceEJSt14default_deleteIS1_EEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE418844
_ZSt12__get_helperILm0EOSt4pairIiiEJEERT0_RSt11_Tuple_implIXT_EJS3_DpT1_EE1347666
_ZSt12__get_helperILm0EZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_JEERT0_RSt11_Tuple_implIXT_EJSI_DpT1_EE1590148
_ZSt12__get_helperILm0EONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJEERT0_RSt11_Tuple_implIXT_EJS7_DpT1_EE1590166
_ZSt12__get_helperILm0EPNSt6thread6_StateEJSt14default_deleteIS1_EEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE3211468
_ZSt12__get_helperILm0ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJEERT0_RSt11_Tuple_implIXT_EJS8_DpT1_EE8748140
_ZNSt10_Head_baseILm1ERKmLb0EE7_M_headERKS2_31996304
_ZNSt10_Head_baseILm0EPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEELb0EE7_M_headERKS8_0
_ZNSt10_Head_baseILm0ERKSt6vectorIhSaIhEELb0EE7_M_headERKS5_0
_ZNSt10_Head_baseILm1ERKmLb0EE7_M_headERKS2_0
_ZNSt10_Head_baseILm2ERKbLb0EE7_M_headERKS2_0
_ZNSt10_Head_baseILm0EPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEELb0EE7_M_headERKSN_204
_ZNSt10_Head_baseILm0EPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EELb0EE7_M_headERKSI_228
_ZNSt10_Head_baseILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EE7_M_headERKS7_460
_ZNSt10_Head_baseILm0EPN8bayesnet10ClassifierELb0EE7_M_headERKS3_2520
_ZNSt10_Head_baseILm0EPN8bayesnet4NodeELb0EE7_M_headERKS3_31992892
_ZNSt11_Tuple_implILm1EJRKmRKbEE7_M_headERKS4_31996304
_ZNSt11_Tuple_implILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlS7_E_EE7_M_headERKSP_0
_ZNSt11_Tuple_implILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlS7_E_EE7_M_headERKSR_0
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_0
_ZNSt11_Tuple_implILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlSH_E_EE7_M_headERKSP_0
_ZNSt11_Tuple_implILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlSH_E_EE7_M_headERKSR_0
_ZNSt11_Tuple_implILm0EJRKSt6vectorIhSaIhEERKmRKbEE7_M_headERKS9_0
_ZNSt11_Tuple_implILm1EJRKmRKbEE7_M_headERKS4_0
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_4
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_8
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_8
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_20
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_32
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_32
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_32
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_36
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_48
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_52
_ZNSt11_Tuple_implILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlSM_E_EE7_M_headERKSU_100
_ZNSt11_Tuple_implILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlSM_E_EE7_M_headERKSW_104
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlS6_E_EE7_M_headERKSP_188
_ZNSt11_Tuple_implILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESN_EEEPT_DpOT0_EUlSH_E_EE7_M_headERKSU_228
_ZNSt11_Tuple_implILm0EJPN8bayesnet10ClassifierESt14default_deleteIS1_EEE7_M_headERKS5_2520
_ZNSt11_Tuple_implILm0EJPN8bayesnet4NodeESt14default_deleteIS1_EEE7_M_headERKS5_31992892
_ZSt12__get_helperILm2ERKbJEERKT0_RKSt11_Tuple_implIXT_EJS2_DpT1_EE31996304
_ZSt12__get_helperILm0EPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEJZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlS7_E_EERKT0_RKSt11_Tuple_implIXT_EJSP_DpT1_EE0
_ZSt12__get_helperILm0EPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEJZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlS7_E_EERKT0_RKSt11_Tuple_implIXT_EJSR_DpT1_EE0
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm0EPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEJZNSE_6createISG_JEEEPT_DpOT0_EUlSH_E_EERKT0_RKSt11_Tuple_implIXT_EJSP_DpT1_EE0
_ZSt12__get_helperILm0EPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEJZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlSH_E_EERKT0_RKSt11_Tuple_implIXT_EJSR_DpT1_EE0
_ZSt12__get_helperILm0ERKSt6vectorIhSaIhEEJRKmRKbEERKT0_RKSt11_Tuple_implIXT_EJS9_DpT1_EE0
_ZSt12__get_helperILm1ERKmJRKbEERKT0_RKSt11_Tuple_implIXT_EJS4_DpT1_EE0
_ZSt12__get_helperILm2ERKbJEERKT0_RKSt11_Tuple_implIXT_EJS2_DpT1_EE0
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE4
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE8
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE8
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE20
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE32
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE32
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE32
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE36
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE48
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE52
_ZSt12__get_helperILm0EPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEJZNSE_6createISL_JEEEPT_DpOT0_EUlSM_E_EERKT0_RKSt11_Tuple_implIXT_EJSU_DpT1_EE100
_ZSt12__get_helperILm0EPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEJZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlSM_E_EERKT0_RKSt11_Tuple_implIXT_EJSW_DpT1_EE104
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSP_DpT1_EE188
_ZSt12__get_helperILm0EPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEJZNSE_6createISG_JPKNS2_6detail8json_refISE_EESN_EEEPT_DpOT0_EUlSH_E_EERKT0_RKSt11_Tuple_implIXT_EJSU_DpT1_EE228
_ZSt12__get_helperILm0EPN8bayesnet10ClassifierEJSt14default_deleteIS1_EEERKT0_RKSt11_Tuple_implIXT_EJS5_DpT1_EE2520
_ZSt12__get_helperILm0EPN8bayesnet4NodeEJSt14default_deleteIS1_EEERKT0_RKSt11_Tuple_implIXT_EJS5_DpT1_EE31992892
_ZSt3getILm0EJRKSt6vectorIhSaIhEERKmRKbEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKSD_31996304
_ZSt3getILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlS7_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSL_EEE4typeERKSS_0
_ZSt3getILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlS7_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSN_EEE4typeERKSU_0
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_0
_ZSt3getILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlSH_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSL_EEE4typeERKSS_0
_ZSt3getILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlSH_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSN_EEE4typeERKSU_0
_ZSt3getILm0EJRKSt6vectorIhSaIhEERKmRKbEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKSD_0
_ZSt3getILm1EJRKSt6vectorIhSaIhEERKmRKbEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKSD_0
_ZSt3getILm2EJRKSt6vectorIhSaIhEERKmRKbEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKSD_0
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_4
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_8
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_8
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_20
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_32
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_32
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_32
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_36
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_48
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_52
_ZSt3getILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlSM_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSQ_EEE4typeERKSX_100
_ZSt3getILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlSM_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSS_EEE4typeERKSZ_104
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSL_EEE4typeERKSS_188
_ZSt3getILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESN_EEEPT_DpOT0_EUlSH_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSQ_EEE4typeERKSX_228
_ZSt3getILm0EJPN8bayesnet10ClassifierESt14default_deleteIS1_EEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS9_2520
_ZSt3getILm0EJPN8bayesnet4NodeESt14default_deleteIS1_EEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS9_31992892
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/tuple.func.html b/html/usr/include/c++/13/tuple.func.html new file mode 100644 index 0000000..08084f2 --- /dev/null +++ b/html/usr/include/c++/13/tuple.func.html @@ -0,0 +1,4569 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/tuple - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - tuple (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.0 %8881
Test Date:2024-04-30 13:17:26Functions:61.0 %607370
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNSt10_Head_baseILm0EOiLb0EEC2IiEEOT_4736306
_ZNSt10_Head_baseILm0EONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EEC2IS5_EEOT_1590166
_ZNSt10_Head_baseILm0EOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ELb0EEC2IS7_EEOT_0
_ZNSt10_Head_baseILm0EOSt4pairIiiELb0EEC2IS1_EEOT_1347666
_ZNSt10_Head_baseILm0EOiLb0EEC2IiEEOT_191524
_ZNSt10_Head_baseILm0EPN3c1021AutogradMetaInterfaceELb0EEC2IRS2_EEOT_0
_ZNSt10_Head_baseILm0EPN8bayesnet10ClassifierELb0EEC2IRS2_EEOT_198
_ZNSt10_Head_baseILm0EPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEELb0EEC2IRS7_EEOT_0
_ZNSt10_Head_baseILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EEC2IRS6_EEOT_230
_ZNSt10_Head_baseILm0EPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEELb0EEC2IRSM_EEOT_102
_ZNSt10_Head_baseILm0EPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EELb0EEC2IRSH_EEOT_114
_ZNSt10_Head_baseILm0EZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_Lb0EEC2ISP_EEOT_14194
_ZNSt10_Head_baseILm0EZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_Lb0EEC2ISH_EEOT_1590148
_ZNSt10_Head_baseILm0EZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_Lb0EEC2IS5_EEOT_734
_ZNSt10_Head_baseILm0EZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_Lb0EEC2IS8_EEOT_122
_ZNSt10_Head_baseILm0EZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_Lb0EEC2IS5_EEOT_536
_ZNSt10_Head_baseILm1EdLb0EEC2IRdEEOT_286
_ZNSt10_Head_baseILm2EbLb0EEC2IRbEEOT_286
_ZNSt10_Head_baseILm0EPN8bayesnet4NodeELb0EEC2Ev2051824
_ZNSt10_Head_baseILm0EPN3c1021AutogradMetaInterfaceELb0EEC2Ev418844
_ZNSt10_Head_baseILm0EPN5torch8autograd12AutogradMetaELb0EEC2Ev0
_ZNSt10_Head_baseILm0EPN5torch8autograd22PostAccumulateGradHookELb0EEC2Ev0
_ZNSt10_Head_baseILm0EPN8bayesnet4NodeELb0EEC2Ev26760
_ZNSt10_Head_baseILm0EPN8bayesnet5SPODEELb0EEC2Ev412
_ZNSt10_Head_baseILm0EPN8bayesnet7SPODELdELb0EEC2Ev74
_ZNSt10_Head_baseILm0EPNSt6thread6_StateELb0EEC2Ev1605734
_ZNSt10_Head_baseILm0EZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_Lb1EEC2IS3_EEOT_198
_ZNSt10_Head_baseILm0EZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_Lb1EEC2IS3_EEOT_0
_ZNSt10_Head_baseILm1ESt14default_deleteIN3c1021AutogradMetaInterfaceEELb1EEC2IS0_IN5torch8autograd12AutogradMetaEEEEOT_0
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet10ClassifierEELb1EEC2IS0_INS1_5SPODEEEEEOT_124
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet10ClassifierEELb1EEC2IS0_INS1_7SPODELdEEEEOT_74
_ZNSt10_Head_baseILm1ERKmLb0EE7_M_headERKS2_31996304
_ZNSt10_Head_baseILm0EPN8bayesnet10ClassifierELb0EE7_M_headERKS3_2520
_ZNSt10_Head_baseILm0EPN8bayesnet4NodeELb0EE7_M_headERKS3_31992892
_ZNSt10_Head_baseILm0EPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEELb0EE7_M_headERKS8_0
_ZNSt10_Head_baseILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EE7_M_headERKS7_460
_ZNSt10_Head_baseILm0EPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEELb0EE7_M_headERKSN_204
_ZNSt10_Head_baseILm0EPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EELb0EE7_M_headERKSI_228
_ZNSt10_Head_baseILm0ERKSt6vectorIhSaIhEELb0EE7_M_headERKS5_0
_ZNSt10_Head_baseILm1ERKmLb0EE7_M_headERKS2_0
_ZNSt10_Head_baseILm2ERKbLb0EE7_M_headERKS2_0
_ZNSt10_Head_baseILm1ERdLb0EEC2ES0_8758190
_ZNSt10_Head_baseILm0ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EEC2ES7_8748140
_ZNSt10_Head_baseILm0ERKSt6vectorIhSaIhEELb0EEC2ES4_0
_ZNSt10_Head_baseILm0ERKiLb0EEC2ES1_8460
_ZNSt10_Head_baseILm0ERKlLb0EEC2ES1_0
_ZNSt10_Head_baseILm0ERN2at6TensorELb0EEC2ES2_572
_ZNSt10_Head_baseILm1ERKmLb0EEC2ES1_0
_ZNSt10_Head_baseILm1ERdLb0EEC2ES0_286
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJEEEPT_DpOT0_EUlPSH_E_Lb0EEC2ERKSO_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_Lb0EEC2ERKSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJEEEPT_DpOT0_EUlPSM_E_Lb0EEC2ERKST_50
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJRKSM_EEEPT_DpOT0_EUlPSM_E_Lb0EEC2ERKSV_52
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJEEEPT_DpOT0_EUlPSH_E_Lb0EEC2ERKSO_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJPKNS1_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSH_E_Lb0EEC2ERKST_114
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_Lb0EEC2ERKSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA10_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_26
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA12_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_16
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA13_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_24
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA15_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_4
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA16_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_18
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA17_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_4
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA1_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA2_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_2
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA4_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_10
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA5_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_16
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA6_KcEEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSP_16
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRKSA_EEEPT_DpOT0_EUlPSA_E_Lb0EEC2ERKSO_94
_ZNSt10_Head_baseILm2ERKbLb0EEC2ES1_0
_ZNSt10_Head_baseILm2ERbLb0EEC2ES0_286
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet4NodeEELb1EE7_M_headERS4_43464
_ZNSt10_Head_baseILm0EZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_Lb1EE7_M_headERS4_0
_ZNSt10_Head_baseILm1ESt14default_deleteIN3c1021AutogradMetaInterfaceEELb1EE7_M_headERS4_0
_ZNSt10_Head_baseILm1ESt14default_deleteIN5torch8autograd12AutogradMetaEELb1EE7_M_headERS5_0
_ZNSt10_Head_baseILm1ESt14default_deleteIN5torch8autograd15FunctionPreHookEELb1EE7_M_headERS5_0
_ZNSt10_Head_baseILm1ESt14default_deleteIN5torch8autograd22PostAccumulateGradHookEELb1EE7_M_headERS5_0
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet10ClassifierEELb1EE7_M_headERS4_2838
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet4NodeEELb1EE7_M_headERS4_40140
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet5SPODEEELb1EE7_M_headERS4_412
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet7SPODELdEELb1EE7_M_headERS4_74
_ZNSt10_Head_baseILm1ESt14default_deleteINSt6thread6_StateEELb1EE7_M_headERS4_0
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet4NodeEELb1EEC2Ev2051824
_ZNSt10_Head_baseILm1ESt14default_deleteIN3c1021AutogradMetaInterfaceEELb1EEC2Ev418844
_ZNSt10_Head_baseILm1ESt14default_deleteIN5torch8autograd12AutogradMetaEELb1EEC2Ev0
_ZNSt10_Head_baseILm1ESt14default_deleteIN5torch8autograd22PostAccumulateGradHookEELb1EEC2Ev0
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet4NodeEELb1EEC2Ev26760
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet5SPODEEELb1EEC2Ev412
_ZNSt10_Head_baseILm1ESt14default_deleteIN8bayesnet7SPODELdEELb1EEC2Ev74
_ZNSt10_Head_baseILm1ESt14default_deleteINSt6thread6_StateEELb1EEC2Ev1605734
_ZNSt10_Head_baseILm1EdLb0EE7_M_headERS0_17228284
_ZNSt10_Head_baseILm0EONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EE7_M_headERS7_1590166
_ZNSt10_Head_baseILm0EOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ELb0EE7_M_headERS9_0
_ZNSt10_Head_baseILm0EOSt4pairIiiELb0EE7_M_headERS3_1347666
_ZNSt10_Head_baseILm0EOiLb0EE7_M_headERS1_191524
_ZNSt10_Head_baseILm0EPN3c1021AutogradMetaInterfaceELb0EE7_M_headERS3_418844
_ZNSt10_Head_baseILm0EPN5torch8autograd12AutogradMetaELb0EE7_M_headERS4_0
_ZNSt10_Head_baseILm0EPN5torch8autograd15FunctionPreHookELb0EE7_M_headERS4_0
_ZNSt10_Head_baseILm0EPN5torch8autograd22PostAccumulateGradHookELb0EE7_M_headERS4_0
_ZNSt10_Head_baseILm0EPN8bayesnet10ClassifierELb0EE7_M_headERS3_7624
_ZNSt10_Head_baseILm0EPN8bayesnet4NodeELb0EE7_M_headERS3_93660
_ZNSt10_Head_baseILm0EPN8bayesnet5SPODEELb0EE7_M_headERS3_1648
_ZNSt10_Head_baseILm0EPN8bayesnet7SPODELdELb0EE7_M_headERS3_296
_ZNSt10_Head_baseILm0EPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEELb0EE7_M_headERS8_0
_ZNSt10_Head_baseILm0EPNSt6thread6_StateELb0EE7_M_headERS3_3211468
_ZNSt10_Head_baseILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EE7_M_headERS7_690
_ZNSt10_Head_baseILm0EPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEELb0EE7_M_headERSN_306
_ZNSt10_Head_baseILm0EPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EELb0EE7_M_headERSI_342
_ZNSt10_Head_baseILm0ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELb0EE7_M_headERS8_8748140
_ZNSt10_Head_baseILm0ERKiLb0EE7_M_headERS2_8460
_ZNSt10_Head_baseILm0ERKlLb0EE7_M_headERS2_0
_ZNSt10_Head_baseILm0ERN2at6TensorELb0EE7_M_headERS3_572
_ZNSt10_Head_baseILm0EZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_Lb0EE7_M_headERSQ_14194
_ZNSt10_Head_baseILm0EZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_Lb0EE7_M_headERSI_1590148
_ZNSt10_Head_baseILm0EZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_Lb0EE7_M_headERS6_734
_ZNSt10_Head_baseILm0EZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_Lb0EE7_M_headERS9_122
_ZNSt10_Head_baseILm0EZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_Lb0EE7_M_headERS6_536
_ZNSt10_Head_baseILm1ERdLb0EE7_M_headERS1_286
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJEEEPT_DpOT0_EUlPSH_E_Lb0EE7_M_headERSP_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_Lb0EE7_M_headERSR_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJEEEPT_DpOT0_EUlPSM_E_Lb0EE7_M_headERSU_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJRKSM_EEEPT_DpOT0_EUlPSM_E_Lb0EE7_M_headERSW_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJEEEPT_DpOT0_EUlPSH_E_Lb0EE7_M_headERSP_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJPKNS1_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSH_E_Lb0EE7_M_headERSU_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_Lb0EE7_M_headERSR_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA10_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA12_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA13_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA15_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA16_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA17_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA1_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA2_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA4_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA5_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA6_KcEEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSQ_0
_ZNSt10_Head_baseILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRKSA_EEEPT_DpOT0_EUlPSA_E_Lb0EE7_M_headERSP_0
_ZNSt10_Head_baseILm1EdLb0EE7_M_headERS0_286
_ZNSt10_Head_baseILm2ERbLb0EE7_M_headERS1_286
_ZNSt10_Head_baseILm2EbLb0EE7_M_headERS0_286
_ZNSt11_Tuple_implILm0EJOiEEC2EOS1_11887166
_ZNSt11_Tuple_implILm0EJONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2EOS7_1590166
_ZNSt11_Tuple_implILm0EJOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEEC2EOS9_0
_ZNSt11_Tuple_implILm0EJOSt4pairIiiEEEC2EOS3_1347666
_ZNSt11_Tuple_implILm0EJOiEEC2EOS1_191524
_ZNSt11_Tuple_implILm0EJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2EOS8_8748140
_ZNSt11_Tuple_implILm0EJRKiEEC2EOS2_8460
_ZNSt11_Tuple_implILm0EJRKlEEC2EOS2_0
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet10ClassifierEEEEC2EOS4_1210
_ZNSt11_Tuple_implILm0EJOiEEC2IiEEOT_4735574
_ZNSt11_Tuple_implILm0EJONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2IS5_EEOT_1590166
_ZNSt11_Tuple_implILm0EJOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEEC2IS7_EEOT_0
_ZNSt11_Tuple_implILm0EJOSt4pairIiiEEEC2IS1_EEOT_1347666
_ZNSt11_Tuple_implILm0EJOiEEC2IiEEOT_191524
_ZNSt11_Tuple_implILm0EJZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_EEC2IS3_EEOT_0
_ZNSt11_Tuple_implILm0EJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_EEC2ISP_EEOT_14194
_ZNSt11_Tuple_implILm0EJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_EEC2ISH_EEOT_1590148
_ZNSt11_Tuple_implILm0EJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EEC2IS5_EEOT_734
_ZNSt11_Tuple_implILm0EJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_EEC2IS8_EEOT_122
_ZNSt11_Tuple_implILm0EJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EEC2IS5_EEOT_536
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN3c1021AutogradMetaInterfaceEEEEC2IS0_IN5torch8autograd12AutogradMetaEEEEOT_0
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet10ClassifierEEEEC2IS0_INS1_5SPODEEEEEOT_124
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet10ClassifierEEEEC2IS0_INS1_7SPODELdEEEEOT_74
_ZNSt11_Tuple_implILm2EJbEEC2IRbEEOT_286
_ZNSt11_Tuple_implILm0EJPN8bayesnet10ClassifierESt14default_deleteIS1_EEEC2EOS5_1210
_ZNSt11_Tuple_implILm0EJPN8bayesnet4NodeESt14default_deleteIS1_EEEC2Ev2051824
_ZNSt11_Tuple_implILm0EJPN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEEC2Ev418844
_ZNSt11_Tuple_implILm0EJPN5torch8autograd12AutogradMetaESt14default_deleteIS2_EEEC2Ev0
_ZNSt11_Tuple_implILm0EJPN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EEEC2Ev0
_ZNSt11_Tuple_implILm0EJPN8bayesnet4NodeESt14default_deleteIS1_EEEC2Ev26760
_ZNSt11_Tuple_implILm0EJPN8bayesnet5SPODEESt14default_deleteIS1_EEEC2Ev412
_ZNSt11_Tuple_implILm0EJPN8bayesnet7SPODELdESt14default_deleteIS1_EEEC2Ev74
_ZNSt11_Tuple_implILm0EJPNSt6thread6_StateESt14default_deleteIS1_EEEC2Ev1605734
_ZNSt11_Tuple_implILm1EJRKmRKbEE7_M_headERKS4_31996304
_ZNSt11_Tuple_implILm0EJPN8bayesnet10ClassifierESt14default_deleteIS1_EEE7_M_headERKS5_2520
_ZNSt11_Tuple_implILm0EJPN8bayesnet4NodeESt14default_deleteIS1_EEE7_M_headERKS5_31992892
_ZNSt11_Tuple_implILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlS7_E_EE7_M_headERKSP_0
_ZNSt11_Tuple_implILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlS7_E_EE7_M_headERKSR_0
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_52
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_32
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_48
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_8
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_36
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_8
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_0
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_4
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_20
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_32
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERKSQ_32
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlS6_E_EE7_M_headERKSP_188
_ZNSt11_Tuple_implILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlSM_E_EE7_M_headERKSU_100
_ZNSt11_Tuple_implILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlSM_E_EE7_M_headERKSW_104
_ZNSt11_Tuple_implILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlSH_E_EE7_M_headERKSP_0
_ZNSt11_Tuple_implILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESN_EEEPT_DpOT0_EUlSH_E_EE7_M_headERKSU_228
_ZNSt11_Tuple_implILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlSH_E_EE7_M_headERKSR_0
_ZNSt11_Tuple_implILm0EJRKSt6vectorIhSaIhEERKmRKbEE7_M_headERKS9_0
_ZNSt11_Tuple_implILm1EJRKmRKbEE7_M_headERKS4_0
_ZNSt11_Tuple_implILm1EJRdRbEE9_M_assignIdJbEEEvOS_ILm1EJT_DpT0_EE572
_ZNSt11_Tuple_implILm0EJRN2at6TensorERdRbEE9_M_assignIS2_JdbEEEvOS_ILm0EJT_DpT0_EE286
_ZNSt11_Tuple_implILm1EJRdRbEE9_M_assignIdJbEEEvOS_ILm1EJT_DpT0_EE286
_ZNSt11_Tuple_implILm1EJRdRbEEC2ES0_S1_572
_ZNSt11_Tuple_implILm0EJRKSt6vectorIhSaIhEERKmRKbEEC2ES4_S6_S8_0
_ZNSt11_Tuple_implILm0EJRN2at6TensorERdRbEEC2ES2_S3_S4_286
_ZNSt11_Tuple_implILm1EJRKmRKbEEC2ES1_S3_0
_ZNSt11_Tuple_implILm1EJRdRbEEC2ES0_S1_286
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet4NodeEEEEC2Ev2051824
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN3c1021AutogradMetaInterfaceEEEEC2Ev418844
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN5torch8autograd12AutogradMetaEEEEC2Ev0
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN5torch8autograd22PostAccumulateGradHookEEEEC2Ev0
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet4NodeEEEEC2Ev26760
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet5SPODEEEEEC2Ev412
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet7SPODELdEEEEC2Ev74
_ZNSt11_Tuple_implILm1EJSt14default_deleteINSt6thread6_StateEEEEC2Ev1605734
_ZNSt11_Tuple_implILm1EJdbEE7_M_headERS0_3736022
_ZNSt11_Tuple_implILm0EJPN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEE7_M_headERS5_418844
_ZNSt11_Tuple_implILm0EJPN5torch8autograd12AutogradMetaESt14default_deleteIS2_EEE7_M_headERS6_0
_ZNSt11_Tuple_implILm0EJPN5torch8autograd15FunctionPreHookESt14default_deleteIS2_EEE7_M_headERS6_0
_ZNSt11_Tuple_implILm0EJPN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EEE7_M_headERS6_0
_ZNSt11_Tuple_implILm0EJPN8bayesnet10ClassifierESt14default_deleteIS1_EEE7_M_headERS5_7624
_ZNSt11_Tuple_implILm0EJPN8bayesnet4NodeESt14default_deleteIS1_EEE7_M_headERS5_93660
_ZNSt11_Tuple_implILm0EJPN8bayesnet5SPODEESt14default_deleteIS1_EEE7_M_headERS5_1648
_ZNSt11_Tuple_implILm0EJPN8bayesnet7SPODELdESt14default_deleteIS1_EEE7_M_headERS5_296
_ZNSt11_Tuple_implILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlS7_E_EE7_M_headERSP_0
_ZNSt11_Tuple_implILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlS7_E_EE7_M_headERSR_0
_ZNSt11_Tuple_implILm0EJPNSt6thread6_StateESt14default_deleteIS1_EEE7_M_headERS5_3211468
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_78
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_48
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_72
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_12
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_54
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_12
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_6
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_30
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_48
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlS6_E_EE7_M_headERSQ_48
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlS6_E_EE7_M_headERSP_282
_ZNSt11_Tuple_implILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlSM_E_EE7_M_headERSU_150
_ZNSt11_Tuple_implILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlSM_E_EE7_M_headERSW_156
_ZNSt11_Tuple_implILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlSH_E_EE7_M_headERSP_0
_ZNSt11_Tuple_implILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESN_EEEPT_DpOT0_EUlSH_E_EE7_M_headERSU_342
_ZNSt11_Tuple_implILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlSH_E_EE7_M_headERSR_0
_ZNSt11_Tuple_implILm0EJRN2at6TensorERdRbEE7_M_headERS5_286
_ZNSt11_Tuple_implILm0EJRN2at6TensorEdbEE7_M_headERS3_286
_ZNSt11_Tuple_implILm1EJRdRbEE7_M_headERS2_286
_ZNSt11_Tuple_implILm1EJdbEE7_M_headERS0_286
_ZNSt11_Tuple_implILm1EJdbEE7_M_tailERS0_1144
_ZNSt11_Tuple_implILm0EJRN2at6TensorERdRbEE7_M_tailERS5_286
_ZNSt11_Tuple_implILm0EJRN2at6TensorEdbEE7_M_tailERS3_286
_ZNSt11_Tuple_implILm1EJRdRbEE7_M_tailERS2_286
_ZNSt11_Tuple_implILm1EJdbEE7_M_tailERS0_286
_ZNSt11_Tuple_implILm1EJdbEEC2IRdJRbEvEEOT_DpOT0_1216
_ZNSt11_Tuple_implILm0EJPN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEEC2IRS2_JS3_IN5torch8autograd12AutogradMetaEEEvEEOT_DpOT0_0
_ZNSt11_Tuple_implILm0EJPN8bayesnet10ClassifierESt14default_deleteIS1_EEEC2IRS2_JS3_INS0_5SPODEEEEvEEOT_DpOT0_124
_ZNSt11_Tuple_implILm0EJPN8bayesnet10ClassifierESt14default_deleteIS1_EEEC2IRS2_JS3_INS0_7SPODELdEEEvEEOT_DpOT0_74
_ZNSt11_Tuple_implILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlS7_E_EEC2IRS7_JRKSO_EvEEOSJ_SN_0
_ZNSt11_Tuple_implILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlS7_E_EEC2IRS7_JRKSQ_EvEEOSL_SP_0
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_26
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_16
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_24
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_4
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_18
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_4
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_0
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_2
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_10
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_16
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSP_EvEEOSK_SO_16
_ZNSt11_Tuple_implILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlS6_E_EEC2IRS6_JRKSO_EvEEOSJ_SN_94
_ZNSt11_Tuple_implILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlSM_E_EEC2IRSM_JRKST_EvEEOSO_SS_50
_ZNSt11_Tuple_implILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlSM_E_EEC2IRSM_JRKSV_EvEEOSQ_SU_52
_ZNSt11_Tuple_implILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlSH_E_EEC2IRSH_JRKSO_EvEEOSJ_SN_0
_ZNSt11_Tuple_implILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESN_EEEPT_DpOT0_EUlSH_E_EEC2IRSH_JRKST_EvEEOSO_SS_114
_ZNSt11_Tuple_implILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlSH_E_EEC2IRSH_JRKSQ_EvEEOSL_SP_0
_ZNSt11_Tuple_implILm0EJRN2at6TensorEdbEEC2IS2_JRdRbEvEEOT_DpOT0_286
_ZNSt11_Tuple_implILm1EJdbEEC2IRdJRbEvEEOT_DpOT0_286
_ZNSt11_Tuple_implILm2EJRKbEE7_M_headERKS2_0
_ZNSt11_Tuple_implILm2EJRbEE9_M_assignIbEEvOS_ILm2EJT_EE286
_ZNSt11_Tuple_implILm2EJRbEEC2ES0_8757332
_ZNSt11_Tuple_implILm0EJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2ES7_8748140
_ZNSt11_Tuple_implILm0EJRKiEEC2ES1_8460
_ZNSt11_Tuple_implILm0EJRKlEEC2ES1_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJEEEPT_DpOT0_EUlPSH_E_EEC2ERKSO_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_EEC2ERKSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJEEEPT_DpOT0_EUlPSM_E_EEC2ERKST_50
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJRKSM_EEEPT_DpOT0_EUlPSM_E_EEC2ERKSV_52
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJEEEPT_DpOT0_EUlPSH_E_EEC2ERKSO_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJPKNS1_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSH_E_EEC2ERKST_114
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_EEC2ERKSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA10_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_26
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA12_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_16
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA13_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_24
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA15_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_4
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA16_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_18
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA17_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_4
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA1_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA2_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_2
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA4_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_10
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA5_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_16
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA6_KcEEEPT_DpOT0_EUlPSA_E_EEC2ERKSP_16
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRKSA_EEEPT_DpOT0_EUlPSA_E_EEC2ERKSO_94
_ZNSt11_Tuple_implILm2EJRKbEEC2ES1_0
_ZNSt11_Tuple_implILm2EJRbEEC2ES0_286
_ZNSt11_Tuple_implILm2EJbEE7_M_headERS0_13535726
_ZNSt11_Tuple_implILm0EJONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE7_M_headERS7_1590166
_ZNSt11_Tuple_implILm0EJOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEE7_M_headERS9_0
_ZNSt11_Tuple_implILm0EJOSt4pairIiiEEE7_M_headERS3_1347666
_ZNSt11_Tuple_implILm0EJOiEE7_M_headERS1_191524
_ZNSt11_Tuple_implILm0EJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE7_M_headERS8_8748140
_ZNSt11_Tuple_implILm0EJRKiEE7_M_headERS2_8460
_ZNSt11_Tuple_implILm0EJRKlEE7_M_headERS2_0
_ZNSt11_Tuple_implILm0EJZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_EE7_M_headERS4_0
_ZNSt11_Tuple_implILm0EJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_EE7_M_headERSQ_14194
_ZNSt11_Tuple_implILm0EJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_EE7_M_headERSI_1590148
_ZNSt11_Tuple_implILm0EJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EE7_M_headERS6_734
_ZNSt11_Tuple_implILm0EJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_EE7_M_headERS9_122
_ZNSt11_Tuple_implILm0EJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EE7_M_headERS6_536
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN3c1021AutogradMetaInterfaceEEEE7_M_headERS4_0
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN5torch8autograd12AutogradMetaEEEE7_M_headERS5_0
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN5torch8autograd15FunctionPreHookEEEE7_M_headERS5_0
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN5torch8autograd22PostAccumulateGradHookEEEE7_M_headERS5_0
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet10ClassifierEEEE7_M_headERS4_2838
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet4NodeEEEE7_M_headERS4_40140
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet5SPODEEEEE7_M_headERS4_412
_ZNSt11_Tuple_implILm1EJSt14default_deleteIN8bayesnet7SPODELdEEEE7_M_headERS4_74
_ZNSt11_Tuple_implILm1EJSt14default_deleteINSt6thread6_StateEEEE7_M_headERS4_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJEEEPT_DpOT0_EUlPSH_E_EE7_M_headERSP_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_EE7_M_headERSR_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJEEEPT_DpOT0_EUlPSM_E_EE7_M_headERSU_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJRKSM_EEEPT_DpOT0_EUlPSM_E_EE7_M_headERSW_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJEEEPT_DpOT0_EUlPSH_E_EE7_M_headERSP_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJPKNS1_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSH_E_EE7_M_headERSU_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_EE7_M_headERSR_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA10_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA12_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA13_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA15_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA16_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA17_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA1_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA2_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA4_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA5_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA6_KcEEEPT_DpOT0_EUlPSA_E_EE7_M_headERSQ_0
_ZNSt11_Tuple_implILm1EJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRKSA_EEEPT_DpOT0_EUlPSA_E_EE7_M_headERSP_0
_ZNSt11_Tuple_implILm2EJRbEE7_M_headERS1_286
_ZNSt11_Tuple_implILm2EJbEE7_M_headERS0_286
_ZNSt15__tuple_compareISt5tupleIJRKSt6vectorIhSaIhEERKmRKbEESA_Lm0ELm3EE4__eqERKSA_SD_0
_ZNSt15__tuple_compareISt5tupleIJRKSt6vectorIhSaIhEERKmRKbEESA_Lm0ELm3EE4__eqERKSA_SD_0
_ZNSt15__tuple_compareISt5tupleIJRKSt6vectorIhSaIhEERKmRKbEESA_Lm1ELm3EE4__eqERKSA_SD_0
_ZNSt15__tuple_compareISt5tupleIJRKSt6vectorIhSaIhEERKmRKbEESA_Lm2ELm3EE4__eqERKSA_SD_0
_ZNSt15__tuple_compareISt5tupleIJRKSt6vectorIhSaIhEERKmRKbEESA_Lm3ELm3EE4__eqERKSA_SD_0
_ZNSt4pairIKidEC2IJOiEJEEESt21piecewise_construct_tSt5tupleIJDpT_EES5_IJDpT0_EE10538856
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEC2IJRS6_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESE_IJDpT0_EE848
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IJRS6_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESE_IJDpT0_EE0
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS9_EEEC2IJRS6_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESH_IJDpT0_EE13380
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_IdSaIdEESaIS9_EEEC2IJRS6_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESG_IJDpT0_EE0
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEC2IJRS6_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESE_IJDpT0_EE2590
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC2IJRS6_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESB_IJDpT0_EE0
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IJOS5_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESB_IJDpT0_EE1590148
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IJRS6_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESB_IJDpT0_EE8731322
_ZNSt4pairIKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EfEC2IJOS6_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESC_IJDpT0_EE0
_ZNSt4pairIKS_IiiEdEC2IJOS0_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EES6_IJDpT0_EE584
_ZNSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS_IS0_dEEEEC2IJOiEJEEESt21piecewise_construct_tSt5tupleIJDpT_EESD_IJDpT0_EE51476
_ZNSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS_IS0_dEEEEC2IJRS0_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EESD_IJDpT0_EE7442
_ZNSt4pairIKiSt6vectorIiSaIiEEEC2IJRS0_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EES8_IJDpT0_EE1018
_ZNSt4pairIKidEC2IJOiEJEEESt21piecewise_construct_tSt5tupleIJDpT_EES5_IJDpT0_EE140048
_ZNSt4pairIKllEC2IJRS0_EJEEESt21piecewise_construct_tSt5tupleIJDpT_EES5_IJDpT0_EE0
_ZNSt4pairIKidEC2IJOiEJLm0EEJEJEEERSt5tupleIJDpT_EERS4_IJDpT1_EESt12_Index_tupleIJXspT0_EEESD_IJXspT2_EEE10538856
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN4mdlp9CPPFImdlpEEC2IJRS6_EJLm0EEJEJEEERSt5tupleIJDpT_EERSD_IJDpT1_EESt12_Index_tupleIJXspT0_EEESM_IJXspT2_EEE848
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPN8bayesnet14BaseClassifierEEC2IJRS6_EJLm0EEJEJEEERSt5tupleIJDpT_EERSD_IJDpT1_EESt12_Index_tupleIJXspT0_EEESM_IJXspT2_EEE0
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrIN8bayesnet4NodeESt14default_deleteIS9_EEEC2IJRS6_EJLm0EEJEJEEERSt5tupleIJDpT_EERSG_IJDpT1_EESt12_Index_tupleIJXspT0_EEESP_IJXspT2_EEE13380
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_IdSaIdEESaIS9_EEEC2IJRS6_EJLm0EEJEJEEERSt5tupleIJDpT_EERSF_IJDpT1_EESt12_Index_tupleIJXspT0_EEESO_IJXspT2_EEE0
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEEEC2IJRS6_EJLm0EEJEJEEERSt5tupleIJDpT_EERSD_IJDpT1_EESt12_Index_tupleIJXspT0_EEESM_IJXspT2_EEE2590
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdEC2IJRS6_EJLm0EEJEJEEERSt5tupleIJDpT_EERSA_IJDpT1_EESt12_Index_tupleIJXspT0_EEESJ_IJXspT2_EEE0
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IJOS5_EJLm0EEJEJEEERSt5tupleIJDpT_EERSA_IJDpT1_EESt12_Index_tupleIJXspT0_EEESJ_IJXspT2_EEE1590148
_ZNSt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiEC2IJRS6_EJLm0EEJEJEEERSt5tupleIJDpT_EERSA_IJDpT1_EESt12_Index_tupleIJXspT0_EEESJ_IJXspT2_EEE8731322
_ZNSt4pairIKS_INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EfEC2IJOS6_EJLm0EEJEJEEERSt5tupleIJDpT_EERSB_IJDpT1_EESt12_Index_tupleIJXspT0_EEESK_IJXspT2_EEE0
_ZNSt4pairIKS_IiiEdEC2IJOS0_EJLm0EEJEJEEERSt5tupleIJDpT_EERS5_IJDpT1_EESt12_Index_tupleIJXspT0_EEESE_IJXspT2_EEE584
_ZNSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS_IS0_dEEEEC2IJOiEJLm0EEJEJEEERSt5tupleIJDpT_EERSC_IJDpT1_EESt12_Index_tupleIJXspT0_EEESL_IJXspT2_EEE51476
_ZNSt4pairIKiSt13unordered_mapIidSt4hashIiESt8equal_toIiESaIS_IS0_dEEEEC2IJRS0_EJLm0EEJEJEEERSt5tupleIJDpT_EERSC_IJDpT1_EESt12_Index_tupleIJXspT0_EEESL_IJXspT2_EEE7442
_ZNSt4pairIKiSt6vectorIiSaIiEEEC2IJRS0_EJLm0EEJEJEEERSt5tupleIJDpT_EERS7_IJDpT1_EESt12_Index_tupleIJXspT0_EEESG_IJXspT2_EEE1018
_ZNSt4pairIKidEC2IJOiEJLm0EEJEJEEERSt5tupleIJDpT_EERS4_IJDpT1_EESt12_Index_tupleIJXspT0_EEESD_IJXspT2_EEE140048
_ZNSt4pairIKllEC2IJRS0_EJLm0EEJEJEEERSt5tupleIJDpT_EERS4_IJDpT1_EESt12_Index_tupleIJXspT0_EEESD_IJXspT2_EEE0
_ZNSt5tupleIJOiEEC2EOS1_11885956
_ZNSt5tupleIJONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2EOS7_1590166
_ZNSt5tupleIJOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEEC2EOS9_0
_ZNSt5tupleIJOSt4pairIiiEEEC2EOS3_1347666
_ZNSt5tupleIJOiEEC2EOS1_191524
_ZNSt5tupleIJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2EOS8_8748140
_ZNSt5tupleIJRKiEEC2EOS2_8460
_ZNSt5tupleIJRKlEEC2EOS2_0
_ZNSt5tupleIJOiEEC2IJiELb1ELb1EEEDpOT_4735376
_ZNSt5tupleIJONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2IJS5_ELb1ELb1EEEDpOT_1590166
_ZNSt5tupleIJOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEEC2IJS7_ELb1ELb1EEEDpOT_0
_ZNSt5tupleIJOSt4pairIiiEEEC2IJS1_ELb1ELb1EEEDpOT_1347666
_ZNSt5tupleIJOiEEC2IJiELb1ELb1EEEDpOT_191524
_ZNSt5tupleIJRN2at6TensorEdbEEC2IJS2_RdRbELb1ELb1EEEDpOT_286
_ZNSt5tupleIJZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_EEC2IJS3_ELb1ELb1EEEDpOT_0
_ZNSt5tupleIJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_EEC2IJSP_ELb1ELb1EEEDpOT_14194
_ZNSt5tupleIJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_EEC2IJSH_ELb1ELb1EEEDpOT_1590148
_ZNSt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EEC2IJS5_ELb1ELb1EEEDpOT_734
_ZNSt5tupleIJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_EEC2IJS8_ELb1ELb1EEEDpOT_122
_ZNSt5tupleIJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EEC2IJS5_ELb1ELb1EEEDpOT_536
_ZNSt5tupleIJPN8bayesnet10ClassifierESt14default_deleteIS1_EEEC2EOS5_1210
_ZNSt5tupleIJPN8bayesnet10ClassifierESt14default_deleteIS1_EEEC2IRS2_S3_INS0_5SPODEEELb1EEEOT_OT0_644
_ZNSt5tupleIJPN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEEC2IRS2_S3_IN5torch8autograd12AutogradMetaEELb1EEEOT_OT0_0
_ZNSt5tupleIJPN8bayesnet10ClassifierESt14default_deleteIS1_EEEC2IRS2_S3_INS0_5SPODEEELb1EEEOT_OT0_124
_ZNSt5tupleIJPN8bayesnet10ClassifierESt14default_deleteIS1_EEEC2IRS2_S3_INS0_7SPODELdEELb1EEEOT_OT0_74
_ZNSt5tupleIJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlS7_E_EEC2IRS7_RKSO_Lb1EEEOSJ_OT0_0
_ZNSt5tupleIJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlS7_E_EEC2IRS7_RKSQ_Lb1EEEOSL_OT0_0
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_26
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_16
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_24
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_4
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_18
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_4
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_0
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_2
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_10
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_16
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSP_Lb1EEEOSK_OT0_16
_ZNSt5tupleIJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlS6_E_EEC2IRS6_RKSO_Lb1EEEOSJ_OT0_94
_ZNSt5tupleIJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlSM_E_EEC2IRSM_RKST_Lb1EEEOSO_OT0_50
_ZNSt5tupleIJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlSM_E_EEC2IRSM_RKSV_Lb1EEEOSQ_OT0_52
_ZNSt5tupleIJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlSH_E_EEC2IRSH_RKSO_Lb1EEEOSJ_OT0_0
_ZNSt5tupleIJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESN_EEEPT_DpOT0_EUlSH_E_EEC2IRSH_RKST_Lb1EEEOSO_OT0_114
_ZNSt5tupleIJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlSH_E_EEC2IRSH_RKSQ_Lb1EEEOSL_OT0_0
_ZNSt5tupleIJPN8bayesnet4NodeESt14default_deleteIS1_EEEC2ILb1ELb1EEEv2051824
_ZNSt5tupleIJPN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEEC2ILb1ELb1EEEv418844
_ZNSt5tupleIJPN5torch8autograd12AutogradMetaESt14default_deleteIS2_EEEC2ILb1ELb1EEEv0
_ZNSt5tupleIJPN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EEEC1ILb1ELb1EEEv0
_ZNSt5tupleIJPN8bayesnet4NodeESt14default_deleteIS1_EEEC2ILb1ELb1EEEv26760
_ZNSt5tupleIJPN8bayesnet5SPODEESt14default_deleteIS1_EEEC2ILb1ELb1EEEv412
_ZNSt5tupleIJPN8bayesnet7SPODELdESt14default_deleteIS1_EEEC2ILb1ELb1EEEv74
_ZNSt5tupleIJPNSt6thread6_StateESt14default_deleteIS1_EEEC2ILb1ELb1EEEv1605734
_ZNSt5tupleIJRKiEEC2ILb1ELb1EEES1_8756886
_ZNSt5tupleIJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEC2ILb1ELb1EEES7_8748140
_ZNSt5tupleIJRKSt6vectorIhSaIhEERKmRKbEEC2ILb1ELb1EEES4_S6_S8_0
_ZNSt5tupleIJRKiEEC2ILb1ELb1EEES1_8460
_ZNSt5tupleIJRKlEEC2ILb1ELb1EEES1_0
_ZNSt5tupleIJRN2at6TensorERdRbEEC2ILb1ELb1EEES2_S3_S4_286
_ZNSt5tupleIJRN2at6TensorERdRbEEaSIJS2_dbEEENSt9enable_ifIXcl12__assignableIDpT_EEERS5_E4typeEOS_IJS9_EE286
_ZSt12__get_helperILm0EOiJEERT0_RSt11_Tuple_implIXT_EJS1_DpT1_EE17270032
_ZSt12__get_helperILm0EONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJEERT0_RSt11_Tuple_implIXT_EJS7_DpT1_EE1590166
_ZSt12__get_helperILm0EOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EJEERT0_RSt11_Tuple_implIXT_EJS9_DpT1_EE0
_ZSt12__get_helperILm0EOSt4pairIiiEJEERT0_RSt11_Tuple_implIXT_EJS3_DpT1_EE1347666
_ZSt12__get_helperILm0EOiJEERT0_RSt11_Tuple_implIXT_EJS1_DpT1_EE191524
_ZSt12__get_helperILm0EPN3c1021AutogradMetaInterfaceEJSt14default_deleteIS1_EEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE418844
_ZSt12__get_helperILm0EPN5torch8autograd12AutogradMetaEJSt14default_deleteIS2_EEERT0_RSt11_Tuple_implIXT_EJS6_DpT1_EE0
_ZSt12__get_helperILm0EPN5torch8autograd15FunctionPreHookEJSt14default_deleteIS2_EEERT0_RSt11_Tuple_implIXT_EJS6_DpT1_EE0
_ZSt12__get_helperILm0EPN5torch8autograd22PostAccumulateGradHookEJSt14default_deleteIS2_EEERT0_RSt11_Tuple_implIXT_EJS6_DpT1_EE0
_ZSt12__get_helperILm0EPN8bayesnet10ClassifierEJSt14default_deleteIS1_EEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE7624
_ZSt12__get_helperILm0EPN8bayesnet4NodeEJSt14default_deleteIS1_EEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE93660
_ZSt12__get_helperILm0EPN8bayesnet5SPODEEJSt14default_deleteIS1_EEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE1648
_ZSt12__get_helperILm0EPN8bayesnet7SPODELdEJSt14default_deleteIS1_EEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE296
_ZSt12__get_helperILm0EPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEJZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlS7_E_EERT0_RSt11_Tuple_implIXT_EJSP_DpT1_EE0
_ZSt12__get_helperILm0EPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEJZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlS7_E_EERT0_RSt11_Tuple_implIXT_EJSR_DpT1_EE0
_ZSt12__get_helperILm0EPNSt6thread6_StateEJSt14default_deleteIS1_EEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE3211468
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE78
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE48
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE72
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE12
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE54
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE12
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE6
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE30
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE48
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE48
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlS6_E_EERT0_RSt11_Tuple_implIXT_EJSP_DpT1_EE282
_ZSt12__get_helperILm0EPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEJZNSE_6createISL_JEEEPT_DpOT0_EUlSM_E_EERT0_RSt11_Tuple_implIXT_EJSU_DpT1_EE150
_ZSt12__get_helperILm0EPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEJZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlSM_E_EERT0_RSt11_Tuple_implIXT_EJSW_DpT1_EE156
_ZSt12__get_helperILm0EPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEJZNSE_6createISG_JEEEPT_DpOT0_EUlSH_E_EERT0_RSt11_Tuple_implIXT_EJSP_DpT1_EE0
_ZSt12__get_helperILm0EPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEJZNSE_6createISG_JPKNS2_6detail8json_refISE_EESN_EEEPT_DpOT0_EUlSH_E_EERT0_RSt11_Tuple_implIXT_EJSU_DpT1_EE342
_ZSt12__get_helperILm0EPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEJZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlSH_E_EERT0_RSt11_Tuple_implIXT_EJSR_DpT1_EE0
_ZSt12__get_helperILm0ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJEERT0_RSt11_Tuple_implIXT_EJS8_DpT1_EE8748140
_ZSt12__get_helperILm0ERKiJEERT0_RSt11_Tuple_implIXT_EJS2_DpT1_EE8460
_ZSt12__get_helperILm0ERKlJEERT0_RSt11_Tuple_implIXT_EJS2_DpT1_EE0
_ZSt12__get_helperILm0EZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_JEERT0_RSt11_Tuple_implIXT_EJS4_DpT1_EE0
_ZSt12__get_helperILm0EZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE14194
_ZSt12__get_helperILm0EZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_JEERT0_RSt11_Tuple_implIXT_EJSI_DpT1_EE1590148
_ZSt12__get_helperILm0EZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_JEERT0_RSt11_Tuple_implIXT_EJS6_DpT1_EE734
_ZSt12__get_helperILm0EZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_JEERT0_RSt11_Tuple_implIXT_EJS9_DpT1_EE122
_ZSt12__get_helperILm0EZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_JEERT0_RSt11_Tuple_implIXT_EJS6_DpT1_EE536
_ZSt12__get_helperILm1ESt14default_deleteIN3c1021AutogradMetaInterfaceEEJEERT0_RSt11_Tuple_implIXT_EJS4_DpT1_EE0
_ZSt12__get_helperILm1ESt14default_deleteIN5torch8autograd12AutogradMetaEEJEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE0
_ZSt12__get_helperILm1ESt14default_deleteIN5torch8autograd15FunctionPreHookEEJEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE0
_ZSt12__get_helperILm1ESt14default_deleteIN5torch8autograd22PostAccumulateGradHookEEJEERT0_RSt11_Tuple_implIXT_EJS5_DpT1_EE0
_ZSt12__get_helperILm1ESt14default_deleteIN8bayesnet10ClassifierEEJEERT0_RSt11_Tuple_implIXT_EJS4_DpT1_EE2838
_ZSt12__get_helperILm1ESt14default_deleteIN8bayesnet4NodeEEJEERT0_RSt11_Tuple_implIXT_EJS4_DpT1_EE40140
_ZSt12__get_helperILm1ESt14default_deleteIN8bayesnet5SPODEEEJEERT0_RSt11_Tuple_implIXT_EJS4_DpT1_EE412
_ZSt12__get_helperILm1ESt14default_deleteIN8bayesnet7SPODELdEEJEERT0_RSt11_Tuple_implIXT_EJS4_DpT1_EE74
_ZSt12__get_helperILm1ESt14default_deleteINSt6thread6_StateEEJEERT0_RSt11_Tuple_implIXT_EJS4_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJEEEPT_DpOT0_EUlPSH_E_JEERT0_RSt11_Tuple_implIXT_EJSP_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createINS1_27byte_container_with_subtypeISD_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_JEERT0_RSt11_Tuple_implIXT_EJSR_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJEEEPT_DpOT0_EUlPSM_E_JEERT0_RSt11_Tuple_implIXT_EJSU_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS3_ISA_SE_St4lessIvESaISt4pairIKSA_SE_EEEJRKSM_EEEPT_DpOT0_EUlPSM_E_JEERT0_RSt11_Tuple_implIXT_EJSW_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJEEEPT_DpOT0_EUlPSH_E_JEERT0_RSt11_Tuple_implIXT_EJSP_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJPKNS1_6detail8json_refISE_EESM_EEEPT_DpOT0_EUlPSH_E_JEERT0_RSt11_Tuple_implIXT_EJSU_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createIS4_ISE_SaISE_EEJRKSH_EEEPT_DpOT0_EUlPSH_E_JEERT0_RSt11_Tuple_implIXT_EJSR_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA10_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA12_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA13_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA15_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA16_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA17_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA1_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA2_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA4_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA5_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRA6_KcEEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm1EZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES4_IhSaIhEEvE6createISA_JRKSA_EEEPT_DpOT0_EUlPSA_E_JEERT0_RSt11_Tuple_implIXT_EJSP_DpT1_EE0
_ZSt12__get_helperILm2ERKbJEERKT0_RKSt11_Tuple_implIXT_EJS2_DpT1_EE31996304
_ZSt12__get_helperILm0EPN8bayesnet10ClassifierEJSt14default_deleteIS1_EEERKT0_RKSt11_Tuple_implIXT_EJS5_DpT1_EE2520
_ZSt12__get_helperILm0EPN8bayesnet4NodeEJSt14default_deleteIS1_EEERKT0_RKSt11_Tuple_implIXT_EJS5_DpT1_EE31992892
_ZSt12__get_helperILm0EPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEJZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlS7_E_EERKT0_RKSt11_Tuple_implIXT_EJSP_DpT1_EE0
_ZSt12__get_helperILm0EPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEJZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlS7_E_EERKT0_RKSt11_Tuple_implIXT_EJSR_DpT1_EE0
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE52
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE32
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE48
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE8
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE36
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE8
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE0
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE4
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE20
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE32
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSQ_DpT1_EE32
_ZSt12__get_helperILm0EPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEJZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlS6_E_EERKT0_RKSt11_Tuple_implIXT_EJSP_DpT1_EE188
_ZSt12__get_helperILm0EPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEJZNSE_6createISL_JEEEPT_DpOT0_EUlSM_E_EERKT0_RKSt11_Tuple_implIXT_EJSU_DpT1_EE100
_ZSt12__get_helperILm0EPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEJZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlSM_E_EERKT0_RKSt11_Tuple_implIXT_EJSW_DpT1_EE104
_ZSt12__get_helperILm0EPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEJZNSE_6createISG_JEEEPT_DpOT0_EUlSH_E_EERKT0_RKSt11_Tuple_implIXT_EJSP_DpT1_EE0
_ZSt12__get_helperILm0EPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEJZNSE_6createISG_JPKNS2_6detail8json_refISE_EESN_EEEPT_DpOT0_EUlSH_E_EERKT0_RKSt11_Tuple_implIXT_EJSU_DpT1_EE228
_ZSt12__get_helperILm0EPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEJZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlSH_E_EERKT0_RKSt11_Tuple_implIXT_EJSR_DpT1_EE0
_ZSt12__get_helperILm0ERKSt6vectorIhSaIhEEJRKmRKbEERKT0_RKSt11_Tuple_implIXT_EJS9_DpT1_EE0
_ZSt12__get_helperILm1ERKmJRKbEERKT0_RKSt11_Tuple_implIXT_EJS4_DpT1_EE0
_ZSt12__get_helperILm2ERKbJEERKT0_RKSt11_Tuple_implIXT_EJS2_DpT1_EE0
_ZSt16forward_as_tupleIJiEESt5tupleIJDpOT_EES3_3129356
_ZSt16forward_as_tupleIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESt5tupleIJDpOT_EES9_1590166
_ZSt16forward_as_tupleIJSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEESt5tupleIJDpOT_EESB_0
_ZSt16forward_as_tupleIJSt4pairIiiEEESt5tupleIJDpOT_EES5_1347666
_ZSt16forward_as_tupleIJiEESt5tupleIJDpOT_EES3_191524
_ZSt3getILm0EJOiEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS5_15664298
_ZSt3getILm0EJONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSB_1590166
_ZSt3getILm0EJOSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSD_0
_ZSt3getILm0EJOSt4pairIiiEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS7_1347666
_ZSt3getILm0EJOiEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS5_191524
_ZSt3getILm0EJPN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_418844
_ZSt3getILm0EJPN5torch8autograd12AutogradMetaESt14default_deleteIS2_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSA_0
_ZSt3getILm0EJPN5torch8autograd15FunctionPreHookESt14default_deleteIS2_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSA_0
_ZSt3getILm0EJPN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSA_0
_ZSt3getILm0EJPN8bayesnet10ClassifierESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_7624
_ZSt3getILm0EJPN8bayesnet4NodeESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_93660
_ZSt3getILm0EJPN8bayesnet5SPODEESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_1648
_ZSt3getILm0EJPN8bayesnet7SPODELdESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_296
_ZSt3getILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlS7_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSL_EEE4typeERSS_0
_ZSt3getILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlS7_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSN_EEE4typeERSU_0
_ZSt3getILm0EJPNSt6thread6_StateESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_3211468
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_78
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_48
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_72
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_12
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_54
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_12
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_6
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_30
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_48
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_48
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSL_EEE4typeERSS_282
_ZSt3getILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlSM_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSQ_EEE4typeERSX_150
_ZSt3getILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlSM_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSS_EEE4typeERSZ_156
_ZSt3getILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlSH_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSL_EEE4typeERSS_0
_ZSt3getILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESN_EEEPT_DpOT0_EUlSH_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSQ_EEE4typeERSX_342
_ZSt3getILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlSH_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSN_EEE4typeERSU_0
_ZSt3getILm0EJRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSC_8748140
_ZSt3getILm0EJRKiEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS6_8460
_ZSt3getILm0EJRKlEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS6_0
_ZSt3getILm1EJPN3c1021AutogradMetaInterfaceESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_0
_ZSt3getILm1EJPN5torch8autograd12AutogradMetaESt14default_deleteIS2_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSA_0
_ZSt3getILm1EJPN5torch8autograd15FunctionPreHookESt14default_deleteIS2_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSA_0
_ZSt3getILm1EJPN5torch8autograd22PostAccumulateGradHookESt14default_deleteIS2_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERSA_0
_ZSt3getILm1EJPN8bayesnet10ClassifierESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_2838
_ZSt3getILm1EJPN8bayesnet4NodeESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_40140
_ZSt3getILm1EJPN8bayesnet5SPODEESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_412
_ZSt3getILm1EJPN8bayesnet7SPODELdESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_74
_ZSt3getILm1EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlS7_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSL_EEE4typeERSS_0
_ZSt3getILm1EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlS7_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSN_EEE4typeERSU_0
_ZSt3getILm1EJPNSt6thread6_StateESt14default_deleteIS1_EEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS9_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERST_0
_ZSt3getILm1EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlS6_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSL_EEE4typeERSS_0
_ZSt3getILm1EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlSM_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSQ_EEE4typeERSX_0
_ZSt3getILm1EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlSM_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSS_EEE4typeERSZ_0
_ZSt3getILm1EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlSH_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSL_EEE4typeERSS_0
_ZSt3getILm1EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESN_EEEPT_DpOT0_EUlSH_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSQ_EEE4typeERSX_0
_ZSt3getILm1EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlSH_E_EERNSt13tuple_elementIXT_ESt5tupleIJDpSN_EEE4typeERSU_0
_ZSt3getILm0EJRKSt6vectorIhSaIhEERKmRKbEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKSD_31996304
_ZSt3getILm0EJPN8bayesnet10ClassifierESt14default_deleteIS1_EEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS9_2520
_ZSt3getILm0EJPN8bayesnet4NodeESt14default_deleteIS1_EEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKS9_31992892
_ZSt3getILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JEEEPT_DpOT0_EUlS7_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSL_EEE4typeERKSS_0
_ZSt3getILm0EJPN8nlohmann16json_abi_v3_11_327byte_container_with_subtypeISt6vectorIhSaIhEEEEZNS1_10basic_jsonISt3mapS3_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS1_14adl_serializerES5_vE6createIS6_JRKS6_EEEPT_DpOT0_EUlS7_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSN_EEE4typeERKSU_0
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA10_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_52
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA12_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_32
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA13_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_48
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA15_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_8
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA16_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_36
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA17_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_8
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA1_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_0
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA2_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_4
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA4_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_20
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA5_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_32
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRA6_KcEEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSM_EEE4typeERKST_32
_ZSt3getILm0EJPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEZN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapSt6vectorS5_blmdSaNS8_14adl_serializerESB_IhSaIhEEvE6createIS5_JRKS5_EEEPT_DpOT0_EUlS6_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSL_EEE4typeERKSS_188
_ZSt3getILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JEEEPT_DpOT0_EUlSM_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSQ_EEE4typeERKSX_100
_ZSt3getILm0EJPSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN8nlohmann16json_abi_v3_11_310basic_jsonIS0_St6vectorS6_blmdSaNS8_14adl_serializerESA_IhSaIhEEvEESt4lessIvESaISt4pairIKS6_SE_EEEZNSE_6createISL_JRKSL_EEEPT_DpOT0_EUlSM_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSS_EEE4typeERKSZ_104
_ZSt3getILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JEEEPT_DpOT0_EUlSH_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSL_EEE4typeERKSS_0
_ZSt3getILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JPKNS2_6detail8json_refISE_EESN_EEEPT_DpOT0_EUlSH_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSQ_EEE4typeERKSX_228
_ZSt3getILm0EJPSt6vectorIN8nlohmann16json_abi_v3_11_310basic_jsonISt3mapS0_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES0_IhSaIhEEvEESaISE_EEZNSE_6createISG_JRKSG_EEEPT_DpOT0_EUlSH_E_EERKNSt13tuple_elementIXT_ESt5tupleIJDpSN_EEE4typeERKSU_0
_ZSt3getILm0EJRKSt6vectorIhSaIhEERKmRKbEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKSD_0
_ZSt3getILm1EJRKSt6vectorIhSaIhEERKmRKbEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKSD_0
_ZSt3getILm2EJRKSt6vectorIhSaIhEERKmRKbEERKNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERKSD_0
_ZSt3getILm0EJZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_EEONSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeEOS8_1605734
_ZSt3getILm0EJZN6loguruL11log_messageEiRNS0_7MessageEbbEUlvE_EEONSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeEOS8_0
_ZSt3getILm0EJZN8bayesnet7Network11completeFitERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIiSaIiEESt4lessIS8_ESaISt4pairIKS8_SB_EEERKN2at6TensorEEUlvE_EEONSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeEOSU_14194
_ZSt3getILm0EJZN8bayesnet7Network14exactInferenceERSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEiSt4lessIS8_ESaISt4pairIKS8_iEEEEUlvE_EEONSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeEOSM_1590148
_ZSt3getILm0EJZN8bayesnet8Ensemble21predict_average_probaERN2at6TensorEEUlvE_EEONSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeEOSA_734
_ZSt3getILm0EJZN8bayesnet8Ensemble21predict_average_probaERSt6vectorIS2_IiSaIiEESaIS4_EEEUlvE_EEONSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeEOSD_122
_ZSt3getILm0EJZN8bayesnet8Ensemble22predict_average_votingERN2at6TensorEEUlvE_EEONSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeEOSA_536
_ZSt3tieIJN2at6TensorEdbEESt5tupleIJDpRT_EES5_286
_ZSt3tieIJKSt6vectorIhSaIhEEKmKbEESt5tupleIJDpRT_EES9_0
_ZSt3tieIJN2at6TensorEdbEESt5tupleIJDpRT_EES5_286
_ZSteqIJRKSt6vectorIhSaIhEERKmRKbEJS4_S6_S8_EEbRKSt5tupleIJDpT_EERKS9_IJDpT0_EE0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/tuple.gcov.html b/html/usr/include/c++/13/tuple.gcov.html new file mode 100644 index 0000000..fd298b0 --- /dev/null +++ b/html/usr/include/c++/13/tuple.gcov.html @@ -0,0 +1,2425 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/tuple + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - tuple (source / functions)CoverageTotalHit
Test:coverage.infoLines:92.0 %8881
Test Date:2024-04-30 13:17:26Functions:61.0 %607370
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // <tuple> -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2007-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file include/tuple
+      26              :  *  This is a Standard C++ Library header.
+      27              :  */
+      28              : 
+      29              : #ifndef _GLIBCXX_TUPLE
+      30              : #define _GLIBCXX_TUPLE 1
+      31              : 
+      32              : #pragma GCC system_header
+      33              : 
+      34              : #if __cplusplus < 201103L
+      35              : # include <bits/c++0x_warning.h>
+      36              : #else
+      37              : 
+      38              : #include <bits/stl_pair.h>                // for std::pair
+      39              : #include <bits/uses_allocator.h>  // for std::allocator_arg_t
+      40              : #include <bits/utility.h>         // for std::tuple_size etc.
+      41              : #include <bits/invoke.h>          // for std::__invoke
+      42              : #if __cplusplus > 201703L
+      43              : # include <compare>
+      44              : # include <bits/ranges_util.h>            // for std::ranges::subrange
+      45              : # define __cpp_lib_constexpr_tuple 201811L
+      46              : #endif
+      47              : 
+      48              : namespace std _GLIBCXX_VISIBILITY(default)
+      49              : {
+      50              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      51              : 
+      52              :   /**
+      53              :    *  @addtogroup utilities
+      54              :    *  @{
+      55              :    */
+      56              : 
+      57              :   template<typename... _Elements>
+      58              :     class tuple;
+      59              : 
+      60              :   template<typename _Tp>
+      61              :     struct __is_empty_non_tuple : is_empty<_Tp> { };
+      62              : 
+      63              :   // Using EBO for elements that are tuples causes ambiguous base errors.
+      64              :   template<typename _El0, typename... _El>
+      65              :     struct __is_empty_non_tuple<tuple<_El0, _El...>> : false_type { };
+      66              : 
+      67              :   // Use the Empty Base-class Optimization for empty, non-final types.
+      68              :   template<typename _Tp>
+      69              :     using __empty_not_final
+      70              :     = __conditional_t<__is_final(_Tp), false_type,
+      71              :                       __is_empty_non_tuple<_Tp>>;
+      72              : 
+      73              :   template<size_t _Idx, typename _Head,
+      74              :            bool = __empty_not_final<_Head>::value>
+      75              :     struct _Head_base;
+      76              : 
+      77              : #if __has_cpp_attribute(__no_unique_address__)
+      78              :   template<size_t _Idx, typename _Head>
+      79              :     struct _Head_base<_Idx, _Head, true>
+      80              :     {
+      81      2051824 :       constexpr _Head_base()
+      82      2051824 :       : _M_head_impl() { }
+      83              : 
+      84              :       constexpr _Head_base(const _Head& __h)
+      85              :       : _M_head_impl(__h) { }
+      86              : 
+      87              :       constexpr _Head_base(const _Head_base&) = default;
+      88              :       constexpr _Head_base(_Head_base&&) = default;
+      89              : 
+      90              :       template<typename _UHead>
+      91          198 :         constexpr _Head_base(_UHead&& __h)
+      92          198 :         : _M_head_impl(std::forward<_UHead>(__h)) { }
+      93              : 
+      94              :       _GLIBCXX20_CONSTEXPR
+      95              :       _Head_base(allocator_arg_t, __uses_alloc0)
+      96              :       : _M_head_impl() { }
+      97              : 
+      98              :       template<typename _Alloc>
+      99              :         _GLIBCXX20_CONSTEXPR
+     100              :         _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a)
+     101              :         : _M_head_impl(allocator_arg, *__a._M_a) { }
+     102              : 
+     103              :       template<typename _Alloc>
+     104              :         _GLIBCXX20_CONSTEXPR
+     105              :         _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a)
+     106              :         : _M_head_impl(*__a._M_a) { }
+     107              : 
+     108              :       template<typename _UHead>
+     109              :         _GLIBCXX20_CONSTEXPR
+     110              :         _Head_base(__uses_alloc0, _UHead&& __uhead)
+     111              :         : _M_head_impl(std::forward<_UHead>(__uhead)) { }
+     112              : 
+     113              :       template<typename _Alloc, typename _UHead>
+     114              :         _GLIBCXX20_CONSTEXPR
+     115              :         _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead)
+     116              :         : _M_head_impl(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead))
+     117              :         { }
+     118              : 
+     119              :       template<typename _Alloc, typename _UHead>
+     120              :         _GLIBCXX20_CONSTEXPR
+     121              :         _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead)
+     122              :         : _M_head_impl(std::forward<_UHead>(__uhead), *__a._M_a) { }
+     123              : 
+     124              :       static constexpr _Head&
+     125        43464 :       _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; }
+     126              : 
+     127              :       static constexpr const _Head&
+     128              :       _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; }
+     129              : 
+     130              :       [[__no_unique_address__]] _Head _M_head_impl;
+     131              :     };
+     132              : #else
+     133              :   template<size_t _Idx, typename _Head>
+     134              :     struct _Head_base<_Idx, _Head, true>
+     135              :     : public _Head
+     136              :     {
+     137              :       constexpr _Head_base()
+     138              :       : _Head() { }
+     139              : 
+     140              :       constexpr _Head_base(const _Head& __h)
+     141              :       : _Head(__h) { }
+     142              : 
+     143              :       constexpr _Head_base(const _Head_base&) = default;
+     144              :       constexpr _Head_base(_Head_base&&) = default;
+     145              : 
+     146              :       template<typename _UHead>
+     147              :         constexpr _Head_base(_UHead&& __h)
+     148              :         : _Head(std::forward<_UHead>(__h)) { }
+     149              : 
+     150              :       _GLIBCXX20_CONSTEXPR
+     151              :       _Head_base(allocator_arg_t, __uses_alloc0)
+     152              :       : _Head() { }
+     153              : 
+     154              :       template<typename _Alloc>
+     155              :         _GLIBCXX20_CONSTEXPR
+     156              :         _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a)
+     157              :         : _Head(allocator_arg, *__a._M_a) { }
+     158              : 
+     159              :       template<typename _Alloc>
+     160              :         _GLIBCXX20_CONSTEXPR
+     161              :         _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a)
+     162              :         : _Head(*__a._M_a) { }
+     163              : 
+     164              :       template<typename _UHead>
+     165              :         _GLIBCXX20_CONSTEXPR
+     166              :         _Head_base(__uses_alloc0, _UHead&& __uhead)
+     167              :         : _Head(std::forward<_UHead>(__uhead)) { }
+     168              : 
+     169              :       template<typename _Alloc, typename _UHead>
+     170              :         _GLIBCXX20_CONSTEXPR
+     171              :         _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead)
+     172              :         : _Head(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) { }
+     173              : 
+     174              :       template<typename _Alloc, typename _UHead>
+     175              :         _GLIBCXX20_CONSTEXPR
+     176              :         _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead)
+     177              :         : _Head(std::forward<_UHead>(__uhead), *__a._M_a) { }
+     178              : 
+     179              :       static constexpr _Head&
+     180              :       _M_head(_Head_base& __b) noexcept { return __b; }
+     181              : 
+     182              :       static constexpr const _Head&
+     183              :       _M_head(const _Head_base& __b) noexcept { return __b; }
+     184              :     };
+     185              : #endif
+     186              : 
+     187              :   template<size_t _Idx, typename _Head>
+     188              :     struct _Head_base<_Idx, _Head, false>
+     189              :     {
+     190      2051824 :       constexpr _Head_base()
+     191      2051824 :       : _M_head_impl() { }
+     192              : 
+     193      8758190 :       constexpr _Head_base(const _Head& __h)
+     194      8758190 :       : _M_head_impl(__h) { }
+     195              : 
+     196              :       constexpr _Head_base(const _Head_base&) = default;
+     197              :       constexpr _Head_base(_Head_base&&) = default;
+     198              : 
+     199              :       template<typename _UHead>
+     200      4736306 :         constexpr _Head_base(_UHead&& __h)
+     201      4736306 :         : _M_head_impl(std::forward<_UHead>(__h)) { }
+     202              : 
+     203              :       _GLIBCXX20_CONSTEXPR
+     204              :       _Head_base(allocator_arg_t, __uses_alloc0)
+     205              :       : _M_head_impl() { }
+     206              : 
+     207              :       template<typename _Alloc>
+     208              :         _GLIBCXX20_CONSTEXPR
+     209              :         _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a)
+     210              :         : _M_head_impl(allocator_arg, *__a._M_a) { }
+     211              : 
+     212              :       template<typename _Alloc>
+     213              :         _GLIBCXX20_CONSTEXPR
+     214              :         _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a)
+     215              :         : _M_head_impl(*__a._M_a) { }
+     216              : 
+     217              :       template<typename _UHead>
+     218              :         _GLIBCXX20_CONSTEXPR
+     219              :         _Head_base(__uses_alloc0, _UHead&& __uhead)
+     220              :         : _M_head_impl(std::forward<_UHead>(__uhead)) { }
+     221              : 
+     222              :       template<typename _Alloc, typename _UHead>
+     223              :         _GLIBCXX20_CONSTEXPR
+     224              :         _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead)
+     225              :         : _M_head_impl(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead))
+     226              :         { }
+     227              : 
+     228              :       template<typename _Alloc, typename _UHead>
+     229              :         _GLIBCXX20_CONSTEXPR
+     230              :         _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead)
+     231              :         : _M_head_impl(std::forward<_UHead>(__uhead), *__a._M_a) { }
+     232              : 
+     233              :       static constexpr _Head&
+     234     17228284 :       _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; }
+     235              : 
+     236              :       static constexpr const _Head&
+     237     31996304 :       _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; }
+     238              : 
+     239              :       _Head _M_head_impl;
+     240              :     };
+     241              : 
+     242              :   /**
+     243              :    * Contains the actual implementation of the @c tuple template, stored
+     244              :    * as a recursive inheritance hierarchy from the first element (most
+     245              :    * derived class) to the last (least derived class). The @c Idx
+     246              :    * parameter gives the 0-based index of the element stored at this
+     247              :    * point in the hierarchy; we use it to implement a constant-time
+     248              :    * get() operation.
+     249              :    */
+     250              :   template<size_t _Idx, typename... _Elements>
+     251              :     struct _Tuple_impl;
+     252              : 
+     253              :   /**
+     254              :    * Recursive tuple implementation. Here we store the @c Head element
+     255              :    * and derive from a @c Tuple_impl containing the remaining elements
+     256              :    * (which contains the @c Tail).
+     257              :    */
+     258              :   template<size_t _Idx, typename _Head, typename... _Tail>
+     259              :     struct _Tuple_impl<_Idx, _Head, _Tail...>
+     260              :     : public _Tuple_impl<_Idx + 1, _Tail...>,
+     261              :       private _Head_base<_Idx, _Head>
+     262              :     {
+     263              :       template<size_t, typename...> friend struct _Tuple_impl;
+     264              : 
+     265              :       typedef _Tuple_impl<_Idx + 1, _Tail...> _Inherited;
+     266              :       typedef _Head_base<_Idx, _Head> _Base;
+     267              : 
+     268              :       static constexpr _Head&
+     269      3736022 :       _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); }
+     270              : 
+     271              :       static constexpr const _Head&
+     272     31996304 :       _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); }
+     273              : 
+     274              :       static constexpr _Inherited&
+     275         1144 :       _M_tail(_Tuple_impl& __t) noexcept { return __t; }
+     276              : 
+     277              :       static constexpr const _Inherited&
+     278              :       _M_tail(const _Tuple_impl& __t) noexcept { return __t; }
+     279              : 
+     280      2051824 :       constexpr _Tuple_impl()
+     281      2051824 :       : _Inherited(), _Base() { }
+     282              : 
+     283              :       explicit constexpr
+     284          572 :       _Tuple_impl(const _Head& __head, const _Tail&... __tail)
+     285          572 :       : _Inherited(__tail...), _Base(__head)
+     286          572 :       { }
+     287              : 
+     288              :       template<typename _UHead, typename... _UTail,
+     289              :                typename = __enable_if_t<sizeof...(_Tail) == sizeof...(_UTail)>>
+     290              :         explicit constexpr
+     291         1216 :         _Tuple_impl(_UHead&& __head, _UTail&&... __tail)
+     292              :         : _Inherited(std::forward<_UTail>(__tail)...),
+     293         1216 :           _Base(std::forward<_UHead>(__head))
+     294         1216 :         { }
+     295              : 
+     296              :       constexpr _Tuple_impl(const _Tuple_impl&) = default;
+     297              : 
+     298              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     299              :       // 2729. Missing SFINAE on std::pair::operator=
+     300              :       _Tuple_impl& operator=(const _Tuple_impl&) = delete;
+     301              : 
+     302         1210 :       _Tuple_impl(_Tuple_impl&&) = default;
+     303              : 
+     304              :       template<typename... _UElements>
+     305              :         constexpr
+     306              :         _Tuple_impl(const _Tuple_impl<_Idx, _UElements...>& __in)
+     307              :         : _Inherited(_Tuple_impl<_Idx, _UElements...>::_M_tail(__in)),
+     308              :           _Base(_Tuple_impl<_Idx, _UElements...>::_M_head(__in))
+     309              :         { }
+     310              : 
+     311              :       template<typename _UHead, typename... _UTails>
+     312              :         constexpr
+     313              :         _Tuple_impl(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in)
+     314              :         : _Inherited(std::move
+     315              :                      (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))),
+     316              :           _Base(std::forward<_UHead>
+     317              :                 (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)))
+     318              :         { }
+     319              : 
+     320              : #if __cplusplus > 202002L
+     321              :       template<typename... _UElements>
+     322              :         constexpr
+     323              :         _Tuple_impl(_Tuple_impl<_Idx, _UElements...>& __in)
+     324              :         : _Inherited(_Tuple_impl<_Idx, _UElements...>::_M_tail(__in)),
+     325              :           _Base(_Tuple_impl<_Idx, _UElements...>::_M_head(__in))
+     326              :         { }
+     327              : 
+     328              :       template<typename _UHead, typename... _UTails>
+     329              :         constexpr
+     330              :         _Tuple_impl(const _Tuple_impl<_Idx, _UHead, _UTails...>&& __in)
+     331              :         : _Inherited(std::move
+     332              :                      (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))),
+     333              :           _Base(std::forward<const _UHead>
+     334              :                 (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)))
+     335              :         { }
+     336              : #endif // C++23
+     337              : 
+     338              :       template<typename _Alloc>
+     339              :         _GLIBCXX20_CONSTEXPR
+     340              :         _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a)
+     341              :         : _Inherited(__tag, __a),
+     342              :           _Base(__tag, __use_alloc<_Head>(__a))
+     343              :         { }
+     344              : 
+     345              :       template<typename _Alloc>
+     346              :         _GLIBCXX20_CONSTEXPR
+     347              :         _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+     348              :                     const _Head& __head, const _Tail&... __tail)
+     349              :         : _Inherited(__tag, __a, __tail...),
+     350              :           _Base(__use_alloc<_Head, _Alloc, _Head>(__a), __head)
+     351              :         { }
+     352              : 
+     353              :       template<typename _Alloc, typename _UHead, typename... _UTail,
+     354              :                typename = __enable_if_t<sizeof...(_Tail) == sizeof...(_UTail)>>
+     355              :         _GLIBCXX20_CONSTEXPR
+     356              :         _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+     357              :                     _UHead&& __head, _UTail&&... __tail)
+     358              :         : _Inherited(__tag, __a, std::forward<_UTail>(__tail)...),
+     359              :           _Base(__use_alloc<_Head, _Alloc, _UHead>(__a),
+     360              :                 std::forward<_UHead>(__head))
+     361              :         { }
+     362              : 
+     363              :       template<typename _Alloc>
+     364              :         _GLIBCXX20_CONSTEXPR
+     365              :         _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+     366              :                     const _Tuple_impl& __in)
+     367              :         : _Inherited(__tag, __a, _M_tail(__in)),
+     368              :           _Base(__use_alloc<_Head, _Alloc, _Head>(__a), _M_head(__in))
+     369              :         { }
+     370              : 
+     371              :       template<typename _Alloc>
+     372              :         _GLIBCXX20_CONSTEXPR
+     373              :         _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+     374              :                     _Tuple_impl&& __in)
+     375              :         : _Inherited(__tag, __a, std::move(_M_tail(__in))),
+     376              :           _Base(__use_alloc<_Head, _Alloc, _Head>(__a),
+     377              :                 std::forward<_Head>(_M_head(__in)))
+     378              :         { }
+     379              : 
+     380              :       template<typename _Alloc, typename _UHead, typename... _UTails>
+     381              :         _GLIBCXX20_CONSTEXPR
+     382              :         _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+     383              :                     const _Tuple_impl<_Idx, _UHead, _UTails...>& __in)
+     384              :         : _Inherited(__tag, __a,
+     385              :                      _Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in)),
+     386              :           _Base(__use_alloc<_Head, _Alloc, const _UHead&>(__a),
+     387              :                 _Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))
+     388              :         { }
+     389              : 
+     390              :       template<typename _Alloc, typename _UHead, typename... _UTails>
+     391              :         _GLIBCXX20_CONSTEXPR
+     392              :         _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+     393              :                     _Tuple_impl<_Idx, _UHead, _UTails...>&& __in)
+     394              :         : _Inherited(__tag, __a, std::move
+     395              :                      (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))),
+     396              :           _Base(__use_alloc<_Head, _Alloc, _UHead>(__a),
+     397              :                 std::forward<_UHead>
+     398              :                 (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)))
+     399              :         { }
+     400              : 
+     401              : #if __cplusplus > 202002L
+     402              :       template<typename _Alloc, typename _UHead, typename... _UTails>
+     403              :         constexpr
+     404              :         _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+     405              :                     _Tuple_impl<_Idx, _UHead, _UTails...>& __in)
+     406              :         : _Inherited(__tag, __a,
+     407              :                      _Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in)),
+     408              :           _Base(__use_alloc<_Head, _Alloc, _UHead&>(__a),
+     409              :                 _Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))
+     410              :         { }
+     411              : 
+     412              :       template<typename _Alloc, typename _UHead, typename... _UTails>
+     413              :         constexpr
+     414              :         _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+     415              :                     const _Tuple_impl<_Idx, _UHead, _UTails...>&& __in)
+     416              :         : _Inherited(__tag, __a, std::move
+     417              :                      (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))),
+     418              :           _Base(__use_alloc<_Head, _Alloc, const _UHead>(__a),
+     419              :                 std::forward<const _UHead>
+     420              :                 (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)))
+     421              :         { }
+     422              : #endif // C++23
+     423              : 
+     424              :       template<typename... _UElements>
+     425              :         _GLIBCXX20_CONSTEXPR
+     426              :         void
+     427              :         _M_assign(const _Tuple_impl<_Idx, _UElements...>& __in)
+     428              :         {
+     429              :           _M_head(*this) = _Tuple_impl<_Idx, _UElements...>::_M_head(__in);
+     430              :           _M_tail(*this)._M_assign(
+     431              :               _Tuple_impl<_Idx, _UElements...>::_M_tail(__in));
+     432              :         }
+     433              : 
+     434              :       template<typename _UHead, typename... _UTails>
+     435              :         _GLIBCXX20_CONSTEXPR
+     436              :         void
+     437          572 :         _M_assign(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in)
+     438              :         {
+     439          572 :           _M_head(*this) = std::forward<_UHead>
+     440          572 :             (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in));
+     441         1144 :           _M_tail(*this)._M_assign(
+     442          572 :               std::move(_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in)));
+     443          572 :         }
+     444              : 
+     445              : #if __cplusplus > 202002L
+     446              :       template<typename... _UElements>
+     447              :         constexpr void
+     448              :         _M_assign(const _Tuple_impl<_Idx, _UElements...>& __in) const
+     449              :         {
+     450              :           _M_head(*this) = _Tuple_impl<_Idx, _UElements...>::_M_head(__in);
+     451              :           _M_tail(*this)._M_assign(
+     452              :               _Tuple_impl<_Idx, _UElements...>::_M_tail(__in));
+     453              :         }
+     454              : 
+     455              :       template<typename _UHead, typename... _UTails>
+     456              :         constexpr void
+     457              :         _M_assign(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in) const
+     458              :         {
+     459              :           _M_head(*this) = std::forward<_UHead>
+     460              :             (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in));
+     461              :           _M_tail(*this)._M_assign(
+     462              :               std::move(_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in)));
+     463              :         }
+     464              : #endif // C++23
+     465              : 
+     466              :     protected:
+     467              :       _GLIBCXX20_CONSTEXPR
+     468              :       void
+     469              :       _M_swap(_Tuple_impl& __in)
+     470              :       {
+     471              :         using std::swap;
+     472              :         swap(_M_head(*this), _M_head(__in));
+     473              :         _Inherited::_M_swap(_M_tail(__in));
+     474              :       }
+     475              : 
+     476              : #if __cplusplus > 202002L
+     477              :       constexpr void
+     478              :       _M_swap(const _Tuple_impl& __in) const
+     479              :       {
+     480              :         using std::swap;
+     481              :         swap(_M_head(*this), _M_head(__in));
+     482              :         _Inherited::_M_swap(_M_tail(__in));
+     483              :       }
+     484              : #endif // C++23
+     485              :     };
+     486              : 
+     487              :   // Basis case of inheritance recursion.
+     488              :   template<size_t _Idx, typename _Head>
+     489              :     struct _Tuple_impl<_Idx, _Head>
+     490              :     : private _Head_base<_Idx, _Head>
+     491              :     {
+     492              :       template<size_t, typename...> friend struct _Tuple_impl;
+     493              : 
+     494              :       typedef _Head_base<_Idx, _Head> _Base;
+     495              : 
+     496              :       static constexpr _Head&
+     497     13535726 :       _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); }
+     498              : 
+     499              :       static constexpr const _Head&
+     500            0 :       _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); }
+     501              : 
+     502              :       constexpr
+     503      2051824 :       _Tuple_impl()
+     504      2051824 :       : _Base() { }
+     505              : 
+     506              :       explicit constexpr
+     507      8757332 :       _Tuple_impl(const _Head& __head)
+     508      8757332 :       : _Base(__head)
+     509      8757332 :       { }
+     510              : 
+     511              :       template<typename _UHead>
+     512              :         explicit constexpr
+     513      4735574 :         _Tuple_impl(_UHead&& __head)
+     514      4735574 :         : _Base(std::forward<_UHead>(__head))
+     515      4735574 :         { }
+     516              : 
+     517              :       constexpr _Tuple_impl(const _Tuple_impl&) = default;
+     518              : 
+     519              :       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     520              :       // 2729. Missing SFINAE on std::pair::operator=
+     521              :       _Tuple_impl& operator=(const _Tuple_impl&) = delete;
+     522              : 
+     523              : #if _GLIBCXX_INLINE_VERSION
+     524              :       _Tuple_impl(_Tuple_impl&&) = default;
+     525              : #else
+     526              :       constexpr
+     527     11887166 :       _Tuple_impl(_Tuple_impl&& __in)
+     528              :       noexcept(is_nothrow_move_constructible<_Head>::value)
+     529     11885956 :       : _Base(static_cast<_Base&&>(__in))
+     530     11887166 :       { }
+     531              : #endif
+     532              : 
+     533              :       template<typename _UHead>
+     534              :         constexpr
+     535              :         _Tuple_impl(const _Tuple_impl<_Idx, _UHead>& __in)
+     536              :         : _Base(_Tuple_impl<_Idx, _UHead>::_M_head(__in))
+     537              :         { }
+     538              : 
+     539              :       template<typename _UHead>
+     540              :         constexpr
+     541              :         _Tuple_impl(_Tuple_impl<_Idx, _UHead>&& __in)
+     542              :         : _Base(std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in)))
+     543              :         { }
+     544              : 
+     545              : #if __cplusplus > 202002L
+     546              :       template<typename _UHead>
+     547              :         constexpr
+     548              :         _Tuple_impl(_Tuple_impl<_Idx, _UHead>& __in)
+     549              :         : _Base(_Tuple_impl<_Idx, _UHead>::_M_head(__in))
+     550              :         { }
+     551              : 
+     552              :       template<typename _UHead>
+     553              :         constexpr
+     554              :         _Tuple_impl(const _Tuple_impl<_Idx, _UHead>&& __in)
+     555              :         : _Base(std::forward<const _UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in)))
+     556              :         { }
+     557              : #endif // C++23
+     558              : 
+     559              :       template<typename _Alloc>
+     560              :         _GLIBCXX20_CONSTEXPR
+     561              :         _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a)
+     562              :         : _Base(__tag, __use_alloc<_Head>(__a))
+     563              :         { }
+     564              : 
+     565              :       template<typename _Alloc>
+     566              :         _GLIBCXX20_CONSTEXPR
+     567              :         _Tuple_impl(allocator_arg_t, const _Alloc& __a,
+     568              :                     const _Head& __head)
+     569              :         : _Base(__use_alloc<_Head, _Alloc, const _Head&>(__a), __head)
+     570              :         { }
+     571              : 
+     572              :       template<typename _Alloc, typename _UHead>
+     573              :         _GLIBCXX20_CONSTEXPR
+     574              :         _Tuple_impl(allocator_arg_t, const _Alloc& __a,
+     575              :                     _UHead&& __head)
+     576              :         : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a),
+     577              :                 std::forward<_UHead>(__head))
+     578              :         { }
+     579              : 
+     580              :       template<typename _Alloc>
+     581              :         _GLIBCXX20_CONSTEXPR
+     582              :         _Tuple_impl(allocator_arg_t, const _Alloc& __a,
+     583              :                     const _Tuple_impl& __in)
+     584              :         : _Base(__use_alloc<_Head, _Alloc, const _Head&>(__a), _M_head(__in))
+     585              :         { }
+     586              : 
+     587              :       template<typename _Alloc>
+     588              :         _GLIBCXX20_CONSTEXPR
+     589              :         _Tuple_impl(allocator_arg_t, const _Alloc& __a,
+     590              :                     _Tuple_impl&& __in)
+     591              :         : _Base(__use_alloc<_Head, _Alloc, _Head>(__a),
+     592              :                 std::forward<_Head>(_M_head(__in)))
+     593              :         { }
+     594              : 
+     595              :       template<typename _Alloc, typename _UHead>
+     596              :         _GLIBCXX20_CONSTEXPR
+     597              :         _Tuple_impl(allocator_arg_t, const _Alloc& __a,
+     598              :                     const _Tuple_impl<_Idx, _UHead>& __in)
+     599              :         : _Base(__use_alloc<_Head, _Alloc, const _UHead&>(__a),
+     600              :                 _Tuple_impl<_Idx, _UHead>::_M_head(__in))
+     601              :         { }
+     602              : 
+     603              :       template<typename _Alloc, typename _UHead>
+     604              :         _GLIBCXX20_CONSTEXPR
+     605              :         _Tuple_impl(allocator_arg_t, const _Alloc& __a,
+     606              :                     _Tuple_impl<_Idx, _UHead>&& __in)
+     607              :         : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a),
+     608              :                 std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in)))
+     609              :         { }
+     610              : 
+     611              : #if __cplusplus > 202002L
+     612              :       template<typename _Alloc, typename _UHead>
+     613              :         constexpr
+     614              :         _Tuple_impl(allocator_arg_t, const _Alloc& __a,
+     615              :                     _Tuple_impl<_Idx, _UHead>& __in)
+     616              :         : _Base(__use_alloc<_Head, _Alloc, _UHead&>(__a),
+     617              :                 _Tuple_impl<_Idx, _UHead>::_M_head(__in))
+     618              :         { }
+     619              : 
+     620              :       template<typename _Alloc, typename _UHead>
+     621              :         constexpr
+     622              :         _Tuple_impl(allocator_arg_t, const _Alloc& __a,
+     623              :                     const _Tuple_impl<_Idx, _UHead>&& __in)
+     624              :         : _Base(__use_alloc<_Head, _Alloc, const _UHead>(__a),
+     625              :                 std::forward<const _UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in)))
+     626              :         { }
+     627              : #endif // C++23
+     628              : 
+     629              :       template<typename _UHead>
+     630              :         _GLIBCXX20_CONSTEXPR
+     631              :         void
+     632              :         _M_assign(const _Tuple_impl<_Idx, _UHead>& __in)
+     633              :         {
+     634              :           _M_head(*this) = _Tuple_impl<_Idx, _UHead>::_M_head(__in);
+     635              :         }
+     636              : 
+     637              :       template<typename _UHead>
+     638              :         _GLIBCXX20_CONSTEXPR
+     639              :         void
+     640          286 :         _M_assign(_Tuple_impl<_Idx, _UHead>&& __in)
+     641              :         {
+     642          286 :           _M_head(*this)
+     643          286 :             = std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in));
+     644          286 :         }
+     645              : 
+     646              : #if __cplusplus > 202002L
+     647              :       template<typename _UHead>
+     648              :         constexpr void
+     649              :         _M_assign(const _Tuple_impl<_Idx, _UHead>& __in) const
+     650              :         {
+     651              :           _M_head(*this) = _Tuple_impl<_Idx, _UHead>::_M_head(__in);
+     652              :         }
+     653              : 
+     654              :       template<typename _UHead>
+     655              :         constexpr void
+     656              :         _M_assign(_Tuple_impl<_Idx, _UHead>&& __in) const
+     657              :         {
+     658              :           _M_head(*this)
+     659              :             = std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in));
+     660              :         }
+     661              : #endif // C++23
+     662              : 
+     663              :     protected:
+     664              :       _GLIBCXX20_CONSTEXPR
+     665              :       void
+     666              :       _M_swap(_Tuple_impl& __in)
+     667              :       {
+     668              :         using std::swap;
+     669              :         swap(_M_head(*this), _M_head(__in));
+     670              :       }
+     671              : 
+     672              : #if __cplusplus > 202002L
+     673              :       constexpr void
+     674              :       _M_swap(const _Tuple_impl& __in) const
+     675              :       {
+     676              :         using std::swap;
+     677              :         swap(_M_head(*this), _M_head(__in));
+     678              :       }
+     679              : #endif // C++23
+     680              :     };
+     681              : 
+     682              :   // Concept utility functions, reused in conditionally-explicit
+     683              :   // constructors.
+     684              :   template<bool, typename... _Types>
+     685              :     struct _TupleConstraints
+     686              :     {
+     687              :       template<typename... _UTypes>
+     688              :         using __constructible = __and_<is_constructible<_Types, _UTypes>...>;
+     689              : 
+     690              :       template<typename... _UTypes>
+     691              :         using __convertible = __and_<is_convertible<_UTypes, _Types>...>;
+     692              : 
+     693              :       // Constraint for a non-explicit constructor.
+     694              :       // True iff each Ti in _Types... can be constructed from Ui in _UTypes...
+     695              :       // and every Ui is implicitly convertible to Ti.
+     696              :       template<typename... _UTypes>
+     697              :         static constexpr bool __is_implicitly_constructible()
+     698              :         {
+     699              :           return __and_<__constructible<_UTypes...>,
+     700              :                         __convertible<_UTypes...>
+     701              :                         >::value;
+     702              :         }
+     703              : 
+     704              :       // Constraint for a non-explicit constructor.
+     705              :       // True iff each Ti in _Types... can be constructed from Ui in _UTypes...
+     706              :       // but not every Ui is implicitly convertible to Ti.
+     707              :       template<typename... _UTypes>
+     708              :         static constexpr bool __is_explicitly_constructible()
+     709              :         {
+     710              :           return __and_<__constructible<_UTypes...>,
+     711              :                         __not_<__convertible<_UTypes...>>
+     712              :                         >::value;
+     713              :         }
+     714              : 
+     715              :       static constexpr bool __is_implicitly_default_constructible()
+     716              :       {
+     717              :         return __and_<std::__is_implicitly_default_constructible<_Types>...
+     718              :                       >::value;
+     719              :       }
+     720              : 
+     721              :       static constexpr bool __is_explicitly_default_constructible()
+     722              :       {
+     723              :         return __and_<is_default_constructible<_Types>...,
+     724              :                       __not_<__and_<
+     725              :                         std::__is_implicitly_default_constructible<_Types>...>
+     726              :                       >>::value;
+     727              :       }
+     728              :     };
+     729              : 
+     730              :   // Partial specialization used when a required precondition isn't met,
+     731              :   // e.g. when sizeof...(_Types) != sizeof...(_UTypes).
+     732              :   template<typename... _Types>
+     733              :     struct _TupleConstraints<false, _Types...>
+     734              :     {
+     735              :       template<typename... _UTypes>
+     736              :         static constexpr bool __is_implicitly_constructible()
+     737              :         { return false; }
+     738              : 
+     739              :       template<typename... _UTypes>
+     740              :         static constexpr bool __is_explicitly_constructible()
+     741              :         { return false; }
+     742              :     };
+     743              : 
+     744              :   /// Primary class template, tuple
+     745              :   template<typename... _Elements>
+     746              :     class tuple : public _Tuple_impl<0, _Elements...>
+     747              :     {
+     748              :       typedef _Tuple_impl<0, _Elements...> _Inherited;
+     749              : 
+     750              :       template<bool _Cond>
+     751              :         using _TCC = _TupleConstraints<_Cond, _Elements...>;
+     752              : 
+     753              :       // Constraint for non-explicit default constructor
+     754              :       template<bool _Dummy>
+     755              :         using _ImplicitDefaultCtor = __enable_if_t<
+     756              :           _TCC<_Dummy>::__is_implicitly_default_constructible(),
+     757              :           bool>;
+     758              : 
+     759              :       // Constraint for explicit default constructor
+     760              :       template<bool _Dummy>
+     761              :         using _ExplicitDefaultCtor = __enable_if_t<
+     762              :           _TCC<_Dummy>::__is_explicitly_default_constructible(),
+     763              :           bool>;
+     764              : 
+     765              :       // Constraint for non-explicit constructors
+     766              :       template<bool _Cond, typename... _Args>
+     767              :         using _ImplicitCtor = __enable_if_t<
+     768              :           _TCC<_Cond>::template __is_implicitly_constructible<_Args...>(),
+     769              :           bool>;
+     770              : 
+     771              :       // Constraint for non-explicit constructors
+     772              :       template<bool _Cond, typename... _Args>
+     773              :         using _ExplicitCtor = __enable_if_t<
+     774              :           _TCC<_Cond>::template __is_explicitly_constructible<_Args...>(),
+     775              :           bool>;
+     776              : 
+     777              :       template<typename... _UElements>
+     778              :         static constexpr
+     779              :         __enable_if_t<sizeof...(_UElements) == sizeof...(_Elements), bool>
+     780              :         __assignable()
+     781              :         { return __and_<is_assignable<_Elements&, _UElements>...>::value; }
+     782              : 
+     783              :       // Condition for noexcept-specifier of an assignment operator.
+     784              :       template<typename... _UElements>
+     785              :         static constexpr bool __nothrow_assignable()
+     786              :         {
+     787              :           return
+     788              :             __and_<is_nothrow_assignable<_Elements&, _UElements>...>::value;
+     789              :         }
+     790              : 
+     791              :       // Condition for noexcept-specifier of a constructor.
+     792              :       template<typename... _UElements>
+     793              :         static constexpr bool __nothrow_constructible()
+     794              :         {
+     795              :           return
+     796              :             __and_<is_nothrow_constructible<_Elements, _UElements>...>::value;
+     797              :         }
+     798              : 
+     799              :       // Constraint for tuple(_UTypes&&...) where sizeof...(_UTypes) == 1.
+     800              :       template<typename _Up>
+     801              :         static constexpr bool __valid_args()
+     802              :         {
+     803              :           return sizeof...(_Elements) == 1
+     804              :             && !is_same<tuple, __remove_cvref_t<_Up>>::value;
+     805              :         }
+     806              : 
+     807              :       // Constraint for tuple(_UTypes&&...) where sizeof...(_UTypes) > 1.
+     808              :       template<typename, typename, typename... _Tail>
+     809              :         static constexpr bool __valid_args()
+     810              :         { return (sizeof...(_Tail) + 2) == sizeof...(_Elements); }
+     811              : 
+     812              :       /* Constraint for constructors with a tuple<UTypes...> parameter ensures
+     813              :        * that the constructor is only viable when it would not interfere with
+     814              :        * tuple(UTypes&&...) or tuple(const tuple&) or tuple(tuple&&).
+     815              :        * Such constructors are only viable if:
+     816              :        * either sizeof...(Types) != 1,
+     817              :        * or (when Types... expands to T and UTypes... expands to U)
+     818              :        * is_convertible_v<TUPLE, T>, is_constructible_v<T, TUPLE>,
+     819              :        * and is_same_v<T, U> are all false.
+     820              :        */
+     821              :       template<typename _Tuple, typename = tuple,
+     822              :                typename = __remove_cvref_t<_Tuple>>
+     823              :         struct _UseOtherCtor
+     824              :         : false_type
+     825              :         { };
+     826              :       // If TUPLE is convertible to the single element in *this,
+     827              :       // then TUPLE should match tuple(UTypes&&...) instead.
+     828              :       template<typename _Tuple, typename _Tp, typename _Up>
+     829              :         struct _UseOtherCtor<_Tuple, tuple<_Tp>, tuple<_Up>>
+     830              :         : __or_<is_convertible<_Tuple, _Tp>, is_constructible<_Tp, _Tuple>>::type
+     831              :         { };
+     832              :       // If TUPLE and *this each have a single element of the same type,
+     833              :       // then TUPLE should match a copy/move constructor instead.
+     834              :       template<typename _Tuple, typename _Tp>
+     835              :         struct _UseOtherCtor<_Tuple, tuple<_Tp>, tuple<_Tp>>
+     836              :         : true_type
+     837              :         { };
+     838              : 
+     839              :       // Return true iff sizeof...(Types) == 1 && tuple_size_v<TUPLE> == 1
+     840              :       // and the single element in Types can be initialized from TUPLE,
+     841              :       // or is the same type as tuple_element_t<0, TUPLE>.
+     842              :       template<typename _Tuple>
+     843              :         static constexpr bool __use_other_ctor()
+     844              :         { return _UseOtherCtor<_Tuple>::value; }
+     845              : 
+     846              : #if __cplusplus > 202002L
+     847              :       template<typename... _Args>
+     848              :         static constexpr bool __constructible
+     849              :           = _TCC<true>::template __constructible<_Args...>::value;
+     850              : 
+     851              :       template<typename... _Args>
+     852              :         static constexpr bool __convertible
+     853              :           = _TCC<true>::template __convertible<_Args...>::value;
+     854              : #endif // C++23
+     855              : 
+     856              :     public:
+     857              :       template<typename _Dummy = void,
+     858              :                _ImplicitDefaultCtor<is_void<_Dummy>::value> = true>
+     859              :         constexpr
+     860              :         tuple()
+     861              :         noexcept(__and_<is_nothrow_default_constructible<_Elements>...>::value)
+     862              :         : _Inherited() { }
+     863              : 
+     864              :       template<typename _Dummy = void,
+     865              :                _ExplicitDefaultCtor<is_void<_Dummy>::value> = false>
+     866              :         explicit constexpr
+     867              :         tuple()
+     868              :         noexcept(__and_<is_nothrow_default_constructible<_Elements>...>::value)
+     869              :         : _Inherited() { }
+     870              : 
+     871              :       template<bool _NotEmpty = (sizeof...(_Elements) >= 1),
+     872              :                _ImplicitCtor<_NotEmpty, const _Elements&...> = true>
+     873              :         constexpr
+     874      8756886 :         tuple(const _Elements&... __elements)
+     875              :         noexcept(__nothrow_constructible<const _Elements&...>())
+     876      8756886 :         : _Inherited(__elements...) { }
+     877              : 
+     878              :       template<bool _NotEmpty = (sizeof...(_Elements) >= 1),
+     879              :                _ExplicitCtor<_NotEmpty, const _Elements&...> = false>
+     880              :         explicit constexpr
+     881              :         tuple(const _Elements&... __elements)
+     882              :         noexcept(__nothrow_constructible<const _Elements&...>())
+     883              :         : _Inherited(__elements...) { }
+     884              : 
+     885              :       template<typename... _UElements,
+     886              :                bool _Valid = __valid_args<_UElements...>(),
+     887              :                _ImplicitCtor<_Valid, _UElements...> = true>
+     888              :         constexpr
+     889      4735376 :         tuple(_UElements&&... __elements)
+     890              :         noexcept(__nothrow_constructible<_UElements...>())
+     891      4735376 :         : _Inherited(std::forward<_UElements>(__elements)...) { }
+     892              : 
+     893              :       template<typename... _UElements,
+     894              :                bool _Valid = __valid_args<_UElements...>(),
+     895              :                _ExplicitCtor<_Valid, _UElements...> = false>
+     896              :         explicit constexpr
+     897              :         tuple(_UElements&&... __elements)
+     898              :         noexcept(__nothrow_constructible<_UElements...>())
+     899              :         : _Inherited(std::forward<_UElements>(__elements)...) {   }
+     900              : 
+     901              :       constexpr tuple(const tuple&) = default;
+     902              : 
+     903     11885956 :       constexpr tuple(tuple&&) = default;
+     904              : 
+     905              :       template<typename... _UElements,
+     906              :                bool _Valid = (sizeof...(_Elements) == sizeof...(_UElements))
+     907              :                            && !__use_other_ctor<const tuple<_UElements...>&>(),
+     908              :                _ImplicitCtor<_Valid, const _UElements&...> = true>
+     909              :         constexpr
+     910              :         tuple(const tuple<_UElements...>& __in)
+     911              :         noexcept(__nothrow_constructible<const _UElements&...>())
+     912              :         : _Inherited(static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
+     913              :         { }
+     914              : 
+     915              :       template<typename... _UElements,
+     916              :                bool _Valid = (sizeof...(_Elements) == sizeof...(_UElements))
+     917              :                            && !__use_other_ctor<const tuple<_UElements...>&>(),
+     918              :                _ExplicitCtor<_Valid, const _UElements&...> = false>
+     919              :         explicit constexpr
+     920              :         tuple(const tuple<_UElements...>& __in)
+     921              :         noexcept(__nothrow_constructible<const _UElements&...>())
+     922              :         : _Inherited(static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
+     923              :         { }
+     924              : 
+     925              :       template<typename... _UElements,
+     926              :                bool _Valid = (sizeof...(_Elements) == sizeof...(_UElements))
+     927              :                              && !__use_other_ctor<tuple<_UElements...>&&>(),
+     928              :                _ImplicitCtor<_Valid, _UElements...> = true>
+     929              :         constexpr
+     930              :         tuple(tuple<_UElements...>&& __in)
+     931              :         noexcept(__nothrow_constructible<_UElements...>())
+     932              :         : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { }
+     933              : 
+     934              :       template<typename... _UElements,
+     935              :                bool _Valid = (sizeof...(_Elements) == sizeof...(_UElements))
+     936              :                              && !__use_other_ctor<tuple<_UElements...>&&>(),
+     937              :                _ExplicitCtor<_Valid, _UElements...> = false>
+     938              :         explicit constexpr
+     939              :         tuple(tuple<_UElements...>&& __in)
+     940              :         noexcept(__nothrow_constructible<_UElements...>())
+     941              :         : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { }
+     942              : 
+     943              : #if __cplusplus > 202002L
+     944              :       template<typename... _UElements>
+     945              :         requires (sizeof...(_Elements) == sizeof...(_UElements))
+     946              :           && (!__use_other_ctor<tuple<_UElements...>&>())
+     947              :           && __constructible<_UElements&...>
+     948              :         explicit(!__convertible<_UElements&...>)
+     949              :         constexpr
+     950              :         tuple(tuple<_UElements...>& __in)
+     951              :         noexcept(__nothrow_constructible<_UElements&...>())
+     952              :         : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&>(__in))
+     953              :         { }
+     954              : 
+     955              :       template<typename... _UElements>
+     956              :         requires (sizeof...(_Elements) == sizeof...(_UElements))
+     957              :           && (!__use_other_ctor<const tuple<_UElements...>&&>())
+     958              :           && __constructible<const _UElements...>
+     959              :         explicit(!__convertible<const _UElements...>)
+     960              :         constexpr
+     961              :         tuple(const tuple<_UElements...>&& __in)
+     962              :         noexcept(__nothrow_constructible<const _UElements...>())
+     963              :         : _Inherited(static_cast<const _Tuple_impl<0, _UElements...>&&>(__in)) { }
+     964              : #endif // C++23
+     965              : 
+     966              :       // Allocator-extended constructors.
+     967              : 
+     968              :       template<typename _Alloc,
+     969              :                _ImplicitDefaultCtor<is_object<_Alloc>::value> = true>
+     970              :         _GLIBCXX20_CONSTEXPR
+     971              :         tuple(allocator_arg_t __tag, const _Alloc& __a)
+     972              :         : _Inherited(__tag, __a) { }
+     973              : 
+     974              :       template<typename _Alloc, bool _NotEmpty = (sizeof...(_Elements) >= 1),
+     975              :                _ImplicitCtor<_NotEmpty, const _Elements&...> = true>
+     976              :         _GLIBCXX20_CONSTEXPR
+     977              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+     978              :               const _Elements&... __elements)
+     979              :         : _Inherited(__tag, __a, __elements...) { }
+     980              : 
+     981              :       template<typename _Alloc, bool _NotEmpty = (sizeof...(_Elements) >= 1),
+     982              :                _ExplicitCtor<_NotEmpty, const _Elements&...> = false>
+     983              :         _GLIBCXX20_CONSTEXPR
+     984              :         explicit
+     985              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+     986              :               const _Elements&... __elements)
+     987              :         : _Inherited(__tag, __a, __elements...) { }
+     988              : 
+     989              :       template<typename _Alloc, typename... _UElements,
+     990              :                bool _Valid = __valid_args<_UElements...>(),
+     991              :                _ImplicitCtor<_Valid, _UElements...> = true>
+     992              :         _GLIBCXX20_CONSTEXPR
+     993              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+     994              :               _UElements&&... __elements)
+     995              :         : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...)
+     996              :         { }
+     997              : 
+     998              :       template<typename _Alloc, typename... _UElements,
+     999              :                  bool _Valid = __valid_args<_UElements...>(),
+    1000              :                _ExplicitCtor<_Valid, _UElements...> = false>
+    1001              :         _GLIBCXX20_CONSTEXPR
+    1002              :         explicit
+    1003              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+    1004              :               _UElements&&... __elements)
+    1005              :         : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...)
+    1006              :         { }
+    1007              : 
+    1008              :       template<typename _Alloc>
+    1009              :         _GLIBCXX20_CONSTEXPR
+    1010              :         tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in)
+    1011              :         : _Inherited(__tag, __a, static_cast<const _Inherited&>(__in)) { }
+    1012              : 
+    1013              :       template<typename _Alloc>
+    1014              :         _GLIBCXX20_CONSTEXPR
+    1015              :         tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in)
+    1016              :         : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { }
+    1017              : 
+    1018              :       template<typename _Alloc, typename... _UElements,
+    1019              :                bool _Valid = (sizeof...(_Elements) == sizeof...(_UElements))
+    1020              :                              && !__use_other_ctor<const tuple<_UElements...>&>(),
+    1021              :                _ImplicitCtor<_Valid, const _UElements&...> = true>
+    1022              :         _GLIBCXX20_CONSTEXPR
+    1023              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+    1024              :               const tuple<_UElements...>& __in)
+    1025              :         : _Inherited(__tag, __a,
+    1026              :                      static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
+    1027              :         { }
+    1028              : 
+    1029              :       template<typename _Alloc, typename... _UElements,
+    1030              :                bool _Valid = (sizeof...(_Elements) == sizeof...(_UElements))
+    1031              :                              && !__use_other_ctor<const tuple<_UElements...>&>(),
+    1032              :                _ExplicitCtor<_Valid, const _UElements&...> = false>
+    1033              :         _GLIBCXX20_CONSTEXPR
+    1034              :         explicit
+    1035              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+    1036              :               const tuple<_UElements...>& __in)
+    1037              :         : _Inherited(__tag, __a,
+    1038              :                      static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
+    1039              :         { }
+    1040              : 
+    1041              :       template<typename _Alloc, typename... _UElements,
+    1042              :                bool _Valid = (sizeof...(_Elements) == sizeof...(_UElements))
+    1043              :                              && !__use_other_ctor<tuple<_UElements...>&&>(),
+    1044              :                _ImplicitCtor<_Valid, _UElements...> = true>
+    1045              :         _GLIBCXX20_CONSTEXPR
+    1046              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+    1047              :               tuple<_UElements...>&& __in)
+    1048              :         : _Inherited(__tag, __a,
+    1049              :                      static_cast<_Tuple_impl<0, _UElements...>&&>(__in))
+    1050              :         { }
+    1051              : 
+    1052              :       template<typename _Alloc, typename... _UElements,
+    1053              :                bool _Valid = (sizeof...(_Elements) == sizeof...(_UElements))
+    1054              :                              && !__use_other_ctor<tuple<_UElements...>&&>(),
+    1055              :                _ExplicitCtor<_Valid, _UElements...> = false>
+    1056              :         _GLIBCXX20_CONSTEXPR
+    1057              :         explicit
+    1058              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+    1059              :               tuple<_UElements...>&& __in)
+    1060              :         : _Inherited(__tag, __a,
+    1061              :                      static_cast<_Tuple_impl<0, _UElements...>&&>(__in))
+    1062              :         { }
+    1063              : 
+    1064              : #if __cplusplus > 202002L
+    1065              :       template<typename _Alloc, typename... _UElements>
+    1066              :         requires (sizeof...(_Elements) == sizeof...(_UElements))
+    1067              :           && (!__use_other_ctor<tuple<_UElements...>&>())
+    1068              :           && __constructible<_UElements&...>
+    1069              :         explicit(!__convertible<_UElements&...>)
+    1070              :         constexpr
+    1071              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+    1072              :               tuple<_UElements...>& __in)
+    1073              :         : _Inherited(__tag, __a,
+    1074              :                      static_cast<_Tuple_impl<0, _UElements...>&>(__in))
+    1075              :         { }
+    1076              : 
+    1077              :       template<typename _Alloc, typename... _UElements>
+    1078              :         requires (sizeof...(_Elements) == sizeof...(_UElements))
+    1079              :           && (!__use_other_ctor<const tuple<_UElements...>>())
+    1080              :           && __constructible<const _UElements...>
+    1081              :         explicit(!__convertible<const _UElements...>)
+    1082              :         constexpr
+    1083              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+    1084              :               const tuple<_UElements...>&& __in)
+    1085              :         : _Inherited(__tag, __a,
+    1086              :                      static_cast<const _Tuple_impl<0, _UElements...>&&>(__in))
+    1087              :         { }
+    1088              : #endif // C++23
+    1089              : 
+    1090              :       // tuple assignment
+    1091              : 
+    1092              :       _GLIBCXX20_CONSTEXPR
+    1093              :       tuple&
+    1094              :       operator=(__conditional_t<__assignable<const _Elements&...>(),
+    1095              :                                 const tuple&,
+    1096              :                                 const __nonesuch&> __in)
+    1097              :       noexcept(__nothrow_assignable<const _Elements&...>())
+    1098              :       {
+    1099              :         this->_M_assign(__in);
+    1100              :         return *this;
+    1101              :       }
+    1102              : 
+    1103              :       _GLIBCXX20_CONSTEXPR
+    1104              :       tuple&
+    1105              :       operator=(__conditional_t<__assignable<_Elements...>(),
+    1106              :                                 tuple&&,
+    1107              :                                 __nonesuch&&> __in)
+    1108              :       noexcept(__nothrow_assignable<_Elements...>())
+    1109              :       {
+    1110              :         this->_M_assign(std::move(__in));
+    1111              :         return *this;
+    1112              :       }
+    1113              : 
+    1114              :       template<typename... _UElements>
+    1115              :         _GLIBCXX20_CONSTEXPR
+    1116              :         __enable_if_t<__assignable<const _UElements&...>(), tuple&>
+    1117              :         operator=(const tuple<_UElements...>& __in)
+    1118              :         noexcept(__nothrow_assignable<const _UElements&...>())
+    1119              :         {
+    1120              :           this->_M_assign(__in);
+    1121              :           return *this;
+    1122              :         }
+    1123              : 
+    1124              :       template<typename... _UElements>
+    1125              :         _GLIBCXX20_CONSTEXPR
+    1126              :         __enable_if_t<__assignable<_UElements...>(), tuple&>
+    1127          286 :         operator=(tuple<_UElements...>&& __in)
+    1128              :         noexcept(__nothrow_assignable<_UElements...>())
+    1129              :         {
+    1130          286 :           this->_M_assign(std::move(__in));
+    1131          286 :           return *this;
+    1132              :         }
+    1133              : 
+    1134              : #if __cplusplus > 202002L
+    1135              :       constexpr const tuple&
+    1136              :       operator=(const tuple& __in) const
+    1137              :       requires (is_copy_assignable_v<const _Elements> && ...)
+    1138              :       {
+    1139              :         this->_M_assign(__in);
+    1140              :         return *this;
+    1141              :       }
+    1142              : 
+    1143              :       constexpr const tuple&
+    1144              :       operator=(tuple&& __in) const
+    1145              :       requires (is_assignable_v<const _Elements&, _Elements> && ...)
+    1146              :       {
+    1147              :         this->_M_assign(std::move(__in));
+    1148              :         return *this;
+    1149              :       }
+    1150              : 
+    1151              :       template<typename... _UElements>
+    1152              :         constexpr const tuple&
+    1153              :         operator=(const tuple<_UElements...>& __in) const
+    1154              :         requires (sizeof...(_Elements) == sizeof...(_UElements))
+    1155              :           && (is_assignable_v<const _Elements&, const _UElements&> && ...)
+    1156              :         {
+    1157              :           this->_M_assign(__in);
+    1158              :           return *this;
+    1159              :         }
+    1160              : 
+    1161              :       template<typename... _UElements>
+    1162              :         constexpr const tuple&
+    1163              :         operator=(tuple<_UElements...>&& __in) const
+    1164              :         requires (sizeof...(_Elements) == sizeof...(_UElements))
+    1165              :           && (is_assignable_v<const _Elements&, _UElements> && ...)
+    1166              :         {
+    1167              :           this->_M_assign(std::move(__in));
+    1168              :           return *this;
+    1169              :         }
+    1170              : #endif // C++23
+    1171              : 
+    1172              :       // tuple swap
+    1173              :       _GLIBCXX20_CONSTEXPR
+    1174              :       void
+    1175              :       swap(tuple& __in)
+    1176              :       noexcept(__and_<__is_nothrow_swappable<_Elements>...>::value)
+    1177              :       { _Inherited::_M_swap(__in); }
+    1178              : 
+    1179              : #if __cplusplus > 202002L
+    1180              :       // As an extension, we constrain the const swap member function in order
+    1181              :       // to continue accepting explicit instantiation of tuples whose elements
+    1182              :       // are not all const swappable.  Without this constraint, such an
+    1183              :       // explicit instantiation would also instantiate the ill-formed body of
+    1184              :       // this function and yield a hard error.  This constraint shouldn't
+    1185              :       // affect the behavior of valid programs.
+    1186              :       constexpr void
+    1187              :       swap(const tuple& __in) const
+    1188              :       noexcept(__and_v<__is_nothrow_swappable<const _Elements>...>)
+    1189              :       requires (is_swappable_v<const _Elements> && ...)
+    1190              :       { _Inherited::_M_swap(__in); }
+    1191              : #endif // C++23
+    1192              :     };
+    1193              : 
+    1194              : #if __cpp_deduction_guides >= 201606
+    1195              :   template<typename... _UTypes>
+    1196              :     tuple(_UTypes...) -> tuple<_UTypes...>;
+    1197              :   template<typename _T1, typename _T2>
+    1198              :     tuple(pair<_T1, _T2>) -> tuple<_T1, _T2>;
+    1199              :   template<typename _Alloc, typename... _UTypes>
+    1200              :     tuple(allocator_arg_t, _Alloc, _UTypes...) -> tuple<_UTypes...>;
+    1201              :   template<typename _Alloc, typename _T1, typename _T2>
+    1202              :     tuple(allocator_arg_t, _Alloc, pair<_T1, _T2>) -> tuple<_T1, _T2>;
+    1203              :   template<typename _Alloc, typename... _UTypes>
+    1204              :     tuple(allocator_arg_t, _Alloc, tuple<_UTypes...>) -> tuple<_UTypes...>;
+    1205              : #endif
+    1206              : 
+    1207              :   // Explicit specialization, zero-element tuple.
+    1208              :   template<>
+    1209              :     class tuple<>
+    1210              :     {
+    1211              :     public:
+    1212              :       _GLIBCXX20_CONSTEXPR
+    1213              :       void swap(tuple&) noexcept { /* no-op */ }
+    1214              : #if __cplusplus > 202002L
+    1215              :       constexpr void swap(const tuple&) const noexcept { /* no-op */ }
+    1216              : #endif
+    1217              :       // We need the default since we're going to define no-op
+    1218              :       // allocator constructors.
+    1219              :       tuple() = default;
+    1220              :       // No-op allocator constructors.
+    1221              :       template<typename _Alloc>
+    1222              :         _GLIBCXX20_CONSTEXPR
+    1223              :         tuple(allocator_arg_t, const _Alloc&) noexcept { }
+    1224              :       template<typename _Alloc>
+    1225              :         _GLIBCXX20_CONSTEXPR
+    1226              :         tuple(allocator_arg_t, const _Alloc&, const tuple&) noexcept { }
+    1227              :     };
+    1228              : 
+    1229              :   /// Partial specialization, 2-element tuple.
+    1230              :   /// Includes construction and assignment from a pair.
+    1231              :   template<typename _T1, typename _T2>
+    1232              :     class tuple<_T1, _T2> : public _Tuple_impl<0, _T1, _T2>
+    1233              :     {
+    1234              :       typedef _Tuple_impl<0, _T1, _T2> _Inherited;
+    1235              : 
+    1236              :       // Constraint for non-explicit default constructor
+    1237              :       template<bool _Dummy, typename _U1, typename _U2>
+    1238              :         using _ImplicitDefaultCtor = __enable_if_t<
+    1239              :           _TupleConstraints<_Dummy, _U1, _U2>::
+    1240              :             __is_implicitly_default_constructible(),
+    1241              :           bool>;
+    1242              : 
+    1243              :       // Constraint for explicit default constructor
+    1244              :       template<bool _Dummy, typename _U1, typename _U2>
+    1245              :         using _ExplicitDefaultCtor = __enable_if_t<
+    1246              :           _TupleConstraints<_Dummy, _U1, _U2>::
+    1247              :             __is_explicitly_default_constructible(),
+    1248              :           bool>;
+    1249              : 
+    1250              :       template<bool _Dummy>
+    1251              :         using _TCC = _TupleConstraints<_Dummy, _T1, _T2>;
+    1252              : 
+    1253              :       // Constraint for non-explicit constructors
+    1254              :       template<bool _Cond, typename _U1, typename _U2>
+    1255              :         using _ImplicitCtor = __enable_if_t<
+    1256              :           _TCC<_Cond>::template __is_implicitly_constructible<_U1, _U2>(),
+    1257              :           bool>;
+    1258              : 
+    1259              :       // Constraint for non-explicit constructors
+    1260              :       template<bool _Cond, typename _U1, typename _U2>
+    1261              :         using _ExplicitCtor = __enable_if_t<
+    1262              :           _TCC<_Cond>::template __is_explicitly_constructible<_U1, _U2>(),
+    1263              :           bool>;
+    1264              : 
+    1265              :       template<typename _U1, typename _U2>
+    1266              :         static constexpr bool __assignable()
+    1267              :         {
+    1268              :           return __and_<is_assignable<_T1&, _U1>,
+    1269              :                         is_assignable<_T2&, _U2>>::value;
+    1270              :         }
+    1271              : 
+    1272              :       template<typename _U1, typename _U2>
+    1273              :         static constexpr bool __nothrow_assignable()
+    1274              :         {
+    1275              :           return __and_<is_nothrow_assignable<_T1&, _U1>,
+    1276              :                         is_nothrow_assignable<_T2&, _U2>>::value;
+    1277              :         }
+    1278              : 
+    1279              :       template<typename _U1, typename _U2>
+    1280              :         static constexpr bool __nothrow_constructible()
+    1281              :         {
+    1282              :           return __and_<is_nothrow_constructible<_T1, _U1>,
+    1283              :                             is_nothrow_constructible<_T2, _U2>>::value;
+    1284              :         }
+    1285              : 
+    1286              :       static constexpr bool __nothrow_default_constructible()
+    1287              :       {
+    1288              :         return __and_<is_nothrow_default_constructible<_T1>,
+    1289              :                       is_nothrow_default_constructible<_T2>>::value;
+    1290              :       }
+    1291              : 
+    1292              :       template<typename _U1>
+    1293              :         static constexpr bool __is_alloc_arg()
+    1294              :         { return is_same<__remove_cvref_t<_U1>, allocator_arg_t>::value; }
+    1295              : 
+    1296              : #if __cplusplus > 202002L
+    1297              :       template<typename _U1, typename _U2>
+    1298              :         static constexpr bool __constructible
+    1299              :           = _TCC<true>::template __constructible<_U1, _U2>::value;
+    1300              : 
+    1301              :       template<typename _U1, typename _U2>
+    1302              :         static constexpr bool __convertible
+    1303              :           = _TCC<true>::template __convertible<_U1, _U2>::value;
+    1304              : #endif // C++23
+    1305              : 
+    1306              :     public:
+    1307              :       template<bool _Dummy = true,
+    1308              :                _ImplicitDefaultCtor<_Dummy, _T1, _T2> = true>
+    1309              :         constexpr
+    1310      2051824 :         tuple()
+    1311              :         noexcept(__nothrow_default_constructible())
+    1312      2051824 :         : _Inherited() { }
+    1313              : 
+    1314              :       template<bool _Dummy = true,
+    1315              :                _ExplicitDefaultCtor<_Dummy, _T1, _T2> = false>
+    1316              :         explicit constexpr
+    1317              :         tuple()
+    1318              :         noexcept(__nothrow_default_constructible())
+    1319              :         : _Inherited() { }
+    1320              : 
+    1321              :       template<bool _Dummy = true,
+    1322              :                _ImplicitCtor<_Dummy, const _T1&, const _T2&> = true>
+    1323              :         constexpr
+    1324              :         tuple(const _T1& __a1, const _T2& __a2)
+    1325              :         noexcept(__nothrow_constructible<const _T1&, const _T2&>())
+    1326              :         : _Inherited(__a1, __a2) { }
+    1327              : 
+    1328              :       template<bool _Dummy = true,
+    1329              :                _ExplicitCtor<_Dummy, const _T1&, const _T2&> = false>
+    1330              :         explicit constexpr
+    1331              :         tuple(const _T1& __a1, const _T2& __a2)
+    1332              :         noexcept(__nothrow_constructible<const _T1&, const _T2&>())
+    1333              :         : _Inherited(__a1, __a2) { }
+    1334              : 
+    1335              :       template<typename _U1, typename _U2,
+    1336              :                _ImplicitCtor<!__is_alloc_arg<_U1>(), _U1, _U2> = true>
+    1337              :         constexpr
+    1338          644 :         tuple(_U1&& __a1, _U2&& __a2)
+    1339              :         noexcept(__nothrow_constructible<_U1, _U2>())
+    1340          644 :         : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { }
+    1341              : 
+    1342              :       template<typename _U1, typename _U2,
+    1343              :                _ExplicitCtor<!__is_alloc_arg<_U1>(), _U1, _U2> = false>
+    1344              :         explicit constexpr
+    1345              :         tuple(_U1&& __a1, _U2&& __a2)
+    1346              :         noexcept(__nothrow_constructible<_U1, _U2>())
+    1347              :         : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { }
+    1348              : 
+    1349              :       constexpr tuple(const tuple&) = default;
+    1350              : 
+    1351         1210 :       constexpr tuple(tuple&&) = default;
+    1352              : 
+    1353              :       template<typename _U1, typename _U2,
+    1354              :                _ImplicitCtor<true, const _U1&, const _U2&> = true>
+    1355              :         constexpr
+    1356              :         tuple(const tuple<_U1, _U2>& __in)
+    1357              :         noexcept(__nothrow_constructible<const _U1&, const _U2&>())
+    1358              :         : _Inherited(static_cast<const _Tuple_impl<0, _U1, _U2>&>(__in)) { }
+    1359              : 
+    1360              :       template<typename _U1, typename _U2,
+    1361              :                _ExplicitCtor<true, const _U1&, const _U2&> = false>
+    1362              :         explicit constexpr
+    1363              :         tuple(const tuple<_U1, _U2>& __in)
+    1364              :         noexcept(__nothrow_constructible<const _U1&, const _U2&>())
+    1365              :         : _Inherited(static_cast<const _Tuple_impl<0, _U1, _U2>&>(__in)) { }
+    1366              : 
+    1367              :       template<typename _U1, typename _U2,
+    1368              :                _ImplicitCtor<true, _U1, _U2> = true>
+    1369              :         constexpr
+    1370              :         tuple(tuple<_U1, _U2>&& __in)
+    1371              :         noexcept(__nothrow_constructible<_U1, _U2>())
+    1372              :         : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { }
+    1373              : 
+    1374              :       template<typename _U1, typename _U2,
+    1375              :                _ExplicitCtor<true, _U1, _U2> = false>
+    1376              :         explicit constexpr
+    1377              :         tuple(tuple<_U1, _U2>&& __in)
+    1378              :         noexcept(__nothrow_constructible<_U1, _U2>())
+    1379              :         : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { }
+    1380              : 
+    1381              : #if __cplusplus > 202002L
+    1382              :       template<typename _U1, typename _U2>
+    1383              :         requires __constructible<_U1&, _U2&>
+    1384              :         explicit(!__convertible<_U1&, _U2&>)
+    1385              :         constexpr
+    1386              :         tuple(tuple<_U1, _U2>& __in)
+    1387              :         noexcept(__nothrow_constructible<_U1&, _U2&>())
+    1388              :         : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&>(__in)) { }
+    1389              : 
+    1390              :       template<typename _U1, typename _U2>
+    1391              :         requires __constructible<const _U1, const _U2>
+    1392              :         explicit(!__convertible<const _U1, const _U2>)
+    1393              :         constexpr
+    1394              :         tuple(const tuple<_U1, _U2>&& __in)
+    1395              :         noexcept(__nothrow_constructible<const _U1, const _U2>())
+    1396              :         : _Inherited(static_cast<const _Tuple_impl<0, _U1, _U2>&&>(__in)) { }
+    1397              : #endif // C++23
+    1398              : 
+    1399              :       template<typename _U1, typename _U2,
+    1400              :                _ImplicitCtor<true, const _U1&, const _U2&> = true>
+    1401              :         constexpr
+    1402              :         tuple(const pair<_U1, _U2>& __in)
+    1403              :         noexcept(__nothrow_constructible<const _U1&, const _U2&>())
+    1404              :         : _Inherited(__in.first, __in.second) { }
+    1405              : 
+    1406              :       template<typename _U1, typename _U2,
+    1407              :                _ExplicitCtor<true, const _U1&, const _U2&> = false>
+    1408              :         explicit constexpr
+    1409              :         tuple(const pair<_U1, _U2>& __in)
+    1410              :         noexcept(__nothrow_constructible<const _U1&, const _U2&>())
+    1411              :         : _Inherited(__in.first, __in.second) { }
+    1412              : 
+    1413              :       template<typename _U1, typename _U2,
+    1414              :                _ImplicitCtor<true, _U1, _U2> = true>
+    1415              :         constexpr
+    1416              :         tuple(pair<_U1, _U2>&& __in)
+    1417              :         noexcept(__nothrow_constructible<_U1, _U2>())
+    1418              :         : _Inherited(std::forward<_U1>(__in.first),
+    1419              :                      std::forward<_U2>(__in.second)) { }
+    1420              : 
+    1421              :       template<typename _U1, typename _U2,
+    1422              :                _ExplicitCtor<true, _U1, _U2> = false>
+    1423              :         explicit constexpr
+    1424              :         tuple(pair<_U1, _U2>&& __in)
+    1425              :         noexcept(__nothrow_constructible<_U1, _U2>())
+    1426              :         : _Inherited(std::forward<_U1>(__in.first),
+    1427              :                      std::forward<_U2>(__in.second)) { }
+    1428              : 
+    1429              : #if __cplusplus > 202002L
+    1430              :       template<typename _U1, typename _U2>
+    1431              :         requires __constructible<_U1&, _U2&>
+    1432              :         explicit(!__convertible<_U1&, _U2&>)
+    1433              :         constexpr
+    1434              :         tuple(pair<_U1, _U2>& __in)
+    1435              :         noexcept(__nothrow_constructible<_U1&, _U2&>())
+    1436              :         : _Inherited(__in.first, __in.second) { }
+    1437              : 
+    1438              :       template<typename _U1, typename _U2>
+    1439              :         requires __constructible<const _U1, const _U2>
+    1440              :         explicit(!__convertible<const _U1, const _U2>)
+    1441              :         constexpr
+    1442              :         tuple(const pair<_U1, _U2>&& __in)
+    1443              :         noexcept(__nothrow_constructible<const _U1, const _U2>())
+    1444              :         : _Inherited(std::forward<const _U1>(__in.first),
+    1445              :                      std::forward<const _U2>(__in.second)) { }
+    1446              : #endif // C++23
+    1447              : 
+    1448              :       // Allocator-extended constructors.
+    1449              : 
+    1450              :       template<typename _Alloc,
+    1451              :                _ImplicitDefaultCtor<is_object<_Alloc>::value, _T1, _T2> = true>
+    1452              :         _GLIBCXX20_CONSTEXPR
+    1453              :         tuple(allocator_arg_t __tag, const _Alloc& __a)
+    1454              :         : _Inherited(__tag, __a) { }
+    1455              : 
+    1456              :       template<typename _Alloc, bool _Dummy = true,
+    1457              :                _ImplicitCtor<_Dummy, const _T1&, const _T2&> = true>
+    1458              :         _GLIBCXX20_CONSTEXPR
+    1459              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+    1460              :               const _T1& __a1, const _T2& __a2)
+    1461              :         : _Inherited(__tag, __a, __a1, __a2) { }
+    1462              : 
+    1463              :       template<typename _Alloc, bool _Dummy = true,
+    1464              :                _ExplicitCtor<_Dummy, const _T1&, const _T2&> = false>
+    1465              :         explicit
+    1466              :         _GLIBCXX20_CONSTEXPR
+    1467              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+    1468              :               const _T1& __a1, const _T2& __a2)
+    1469              :         : _Inherited(__tag, __a, __a1, __a2) { }
+    1470              : 
+    1471              :       template<typename _Alloc, typename _U1, typename _U2,
+    1472              :                _ImplicitCtor<true, _U1, _U2> = true>
+    1473              :         _GLIBCXX20_CONSTEXPR
+    1474              :         tuple(allocator_arg_t __tag, const _Alloc& __a, _U1&& __a1, _U2&& __a2)
+    1475              :         : _Inherited(__tag, __a, std::forward<_U1>(__a1),
+    1476              :                      std::forward<_U2>(__a2)) { }
+    1477              : 
+    1478              :       template<typename _Alloc, typename _U1, typename _U2,
+    1479              :                _ExplicitCtor<true, _U1, _U2> = false>
+    1480              :         explicit
+    1481              :         _GLIBCXX20_CONSTEXPR
+    1482              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+    1483              :               _U1&& __a1, _U2&& __a2)
+    1484              :         : _Inherited(__tag, __a, std::forward<_U1>(__a1),
+    1485              :                      std::forward<_U2>(__a2)) { }
+    1486              : 
+    1487              :       template<typename _Alloc>
+    1488              :         _GLIBCXX20_CONSTEXPR
+    1489              :         tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in)
+    1490              :         : _Inherited(__tag, __a, static_cast<const _Inherited&>(__in)) { }
+    1491              : 
+    1492              :       template<typename _Alloc>
+    1493              :         _GLIBCXX20_CONSTEXPR
+    1494              :         tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in)
+    1495              :         : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { }
+    1496              : 
+    1497              :       template<typename _Alloc, typename _U1, typename _U2,
+    1498              :                _ImplicitCtor<true, const _U1&, const _U2&> = true>
+    1499              :         _GLIBCXX20_CONSTEXPR
+    1500              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+    1501              :               const tuple<_U1, _U2>& __in)
+    1502              :         : _Inherited(__tag, __a,
+    1503              :                      static_cast<const _Tuple_impl<0, _U1, _U2>&>(__in))
+    1504              :         { }
+    1505              : 
+    1506              :       template<typename _Alloc, typename _U1, typename _U2,
+    1507              :                _ExplicitCtor<true, const _U1&, const _U2&> = false>
+    1508              :         explicit
+    1509              :         _GLIBCXX20_CONSTEXPR
+    1510              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+    1511              :               const tuple<_U1, _U2>& __in)
+    1512              :         : _Inherited(__tag, __a,
+    1513              :                      static_cast<const _Tuple_impl<0, _U1, _U2>&>(__in))
+    1514              :         { }
+    1515              : 
+    1516              :       template<typename _Alloc, typename _U1, typename _U2,
+    1517              :                _ImplicitCtor<true, _U1, _U2> = true>
+    1518              :         _GLIBCXX20_CONSTEXPR
+    1519              :         tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_U1, _U2>&& __in)
+    1520              :         : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in))
+    1521              :         { }
+    1522              : 
+    1523              :       template<typename _Alloc, typename _U1, typename _U2,
+    1524              :                _ExplicitCtor<true, _U1, _U2> = false>
+    1525              :         explicit
+    1526              :         _GLIBCXX20_CONSTEXPR
+    1527              :         tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_U1, _U2>&& __in)
+    1528              :         : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in))
+    1529              :         { }
+    1530              : 
+    1531              : #if __cplusplus > 202002L
+    1532              :       template<typename _Alloc, typename _U1, typename _U2>
+    1533              :         requires __constructible<_U1&, _U2&>
+    1534              :         explicit(!__convertible<_U1&, _U2&>)
+    1535              :         constexpr
+    1536              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+    1537              :               tuple<_U1, _U2>& __in)
+    1538              :         : _Inherited(__tag, __a,
+    1539              :                      static_cast<_Tuple_impl<0, _U1, _U2>&>(__in))
+    1540              :         { }
+    1541              : 
+    1542              :       template<typename _Alloc, typename _U1, typename _U2>
+    1543              :         requires __constructible<const _U1, const _U2>
+    1544              :         explicit(!__convertible<const _U1, const _U2>)
+    1545              :         constexpr
+    1546              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+    1547              :               const tuple<_U1, _U2>&& __in)
+    1548              :         : _Inherited(__tag, __a,
+    1549              :                      static_cast<const _Tuple_impl<0, _U1, _U2>&&>(__in))
+    1550              :         { }
+    1551              : #endif // C++23
+    1552              : 
+    1553              :       template<typename _Alloc, typename _U1, typename _U2,
+    1554              :                _ImplicitCtor<true, const _U1&, const _U2&> = true>
+    1555              :         _GLIBCXX20_CONSTEXPR
+    1556              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+    1557              :               const pair<_U1, _U2>& __in)
+    1558              :         : _Inherited(__tag, __a, __in.first, __in.second) { }
+    1559              : 
+    1560              :       template<typename _Alloc, typename _U1, typename _U2,
+    1561              :                _ExplicitCtor<true, const _U1&, const _U2&> = false>
+    1562              :         explicit
+    1563              :         _GLIBCXX20_CONSTEXPR
+    1564              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+    1565              :               const pair<_U1, _U2>& __in)
+    1566              :         : _Inherited(__tag, __a, __in.first, __in.second) { }
+    1567              : 
+    1568              :       template<typename _Alloc, typename _U1, typename _U2,
+    1569              :                _ImplicitCtor<true, _U1, _U2> = true>
+    1570              :         _GLIBCXX20_CONSTEXPR
+    1571              :         tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __in)
+    1572              :         : _Inherited(__tag, __a, std::forward<_U1>(__in.first),
+    1573              :                      std::forward<_U2>(__in.second)) { }
+    1574              : 
+    1575              :       template<typename _Alloc, typename _U1, typename _U2,
+    1576              :                _ExplicitCtor<true, _U1, _U2> = false>
+    1577              :         explicit
+    1578              :         _GLIBCXX20_CONSTEXPR
+    1579              :         tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __in)
+    1580              :         : _Inherited(__tag, __a, std::forward<_U1>(__in.first),
+    1581              :                      std::forward<_U2>(__in.second)) { }
+    1582              : 
+    1583              : #if __cplusplus > 202002L
+    1584              :       template<typename _Alloc, typename _U1, typename _U2>
+    1585              :         requires __constructible<_U1&, _U2&>
+    1586              :         explicit(!__convertible<_U1&, _U2&>)
+    1587              :         constexpr
+    1588              :         tuple(allocator_arg_t __tag, const _Alloc& __a,
+    1589              :               pair<_U1, _U2>& __in)
+    1590              :         : _Inherited(__tag, __a, __in.first, __in.second) { }
+    1591              : 
+    1592              :       template<typename _Alloc, typename _U1, typename _U2>
+    1593              :         requires __constructible<const _U1, const _U2>
+    1594              :         explicit(!__convertible<const _U1, const _U2>)
+    1595              :         constexpr
+    1596              :         tuple(allocator_arg_t __tag, const _Alloc& __a, const pair<_U1, _U2>&& __in)
+    1597              :         : _Inherited(__tag, __a, std::forward<const _U1>(__in.first),
+    1598              :                      std::forward<const _U2>(__in.second)) { }
+    1599              : #endif // C++23
+    1600              : 
+    1601              :       // Tuple assignment.
+    1602              : 
+    1603              :       _GLIBCXX20_CONSTEXPR
+    1604              :       tuple&
+    1605              :       operator=(__conditional_t<__assignable<const _T1&, const _T2&>(),
+    1606              :                                 const tuple&,
+    1607              :                                 const __nonesuch&> __in)
+    1608              :       noexcept(__nothrow_assignable<const _T1&, const _T2&>())
+    1609              :       {
+    1610              :         this->_M_assign(__in);
+    1611              :         return *this;
+    1612              :       }
+    1613              : 
+    1614              :       _GLIBCXX20_CONSTEXPR
+    1615              :       tuple&
+    1616              :       operator=(__conditional_t<__assignable<_T1, _T2>(),
+    1617              :                                 tuple&&,
+    1618              :                                 __nonesuch&&> __in)
+    1619              :       noexcept(__nothrow_assignable<_T1, _T2>())
+    1620              :       {
+    1621              :         this->_M_assign(std::move(__in));
+    1622              :         return *this;
+    1623              :       }
+    1624              : 
+    1625              :       template<typename _U1, typename _U2>
+    1626              :         _GLIBCXX20_CONSTEXPR
+    1627              :         __enable_if_t<__assignable<const _U1&, const _U2&>(), tuple&>
+    1628              :         operator=(const tuple<_U1, _U2>& __in)
+    1629              :         noexcept(__nothrow_assignable<const _U1&, const _U2&>())
+    1630              :         {
+    1631              :           this->_M_assign(__in);
+    1632              :           return *this;
+    1633              :         }
+    1634              : 
+    1635              :       template<typename _U1, typename _U2>
+    1636              :         _GLIBCXX20_CONSTEXPR
+    1637              :         __enable_if_t<__assignable<_U1, _U2>(), tuple&>
+    1638              :         operator=(tuple<_U1, _U2>&& __in)
+    1639              :         noexcept(__nothrow_assignable<_U1, _U2>())
+    1640              :         {
+    1641              :           this->_M_assign(std::move(__in));
+    1642              :           return *this;
+    1643              :         }
+    1644              : 
+    1645              : #if __cplusplus > 202002L
+    1646              :       constexpr const tuple&
+    1647              :       operator=(const tuple& __in) const
+    1648              :       requires is_copy_assignable_v<const _T1> && is_copy_assignable_v<const _T2>
+    1649              :       {
+    1650              :         this->_M_assign(__in);
+    1651              :         return *this;
+    1652              :       }
+    1653              : 
+    1654              :       constexpr const tuple&
+    1655              :       operator=(tuple&& __in) const
+    1656              :       requires is_assignable_v<const _T1&, _T1> && is_assignable_v<const _T2, _T2>
+    1657              :       {
+    1658              :         this->_M_assign(std::move(__in));
+    1659              :         return *this;
+    1660              :       }
+    1661              : 
+    1662              :       template<typename _U1, typename _U2>
+    1663              :         constexpr const tuple&
+    1664              :         operator=(const tuple<_U1, _U2>& __in) const
+    1665              :         requires is_assignable_v<const _T1&, const _U1&>
+    1666              :           && is_assignable_v<const _T2&, const _U2&>
+    1667              :         {
+    1668              :           this->_M_assign(__in);
+    1669              :           return *this;
+    1670              :         }
+    1671              : 
+    1672              :       template<typename _U1, typename _U2>
+    1673              :         constexpr const tuple&
+    1674              :         operator=(tuple<_U1, _U2>&& __in) const
+    1675              :         requires is_assignable_v<const _T1&, _U1>
+    1676              :           && is_assignable_v<const _T2&, _U2>
+    1677              :         {
+    1678              :           this->_M_assign(std::move(__in));
+    1679              :           return *this;
+    1680              :         }
+    1681              : #endif // C++23
+    1682              : 
+    1683              :       template<typename _U1, typename _U2>
+    1684              :         _GLIBCXX20_CONSTEXPR
+    1685              :         __enable_if_t<__assignable<const _U1&, const _U2&>(), tuple&>
+    1686              :         operator=(const pair<_U1, _U2>& __in)
+    1687              :         noexcept(__nothrow_assignable<const _U1&, const _U2&>())
+    1688              :         {
+    1689              :           this->_M_head(*this) = __in.first;
+    1690              :           this->_M_tail(*this)._M_head(*this) = __in.second;
+    1691              :           return *this;
+    1692              :         }
+    1693              : 
+    1694              :       template<typename _U1, typename _U2>
+    1695              :         _GLIBCXX20_CONSTEXPR
+    1696              :         __enable_if_t<__assignable<_U1, _U2>(), tuple&>
+    1697              :         operator=(pair<_U1, _U2>&& __in)
+    1698              :         noexcept(__nothrow_assignable<_U1, _U2>())
+    1699              :         {
+    1700              :           this->_M_head(*this) = std::forward<_U1>(__in.first);
+    1701              :           this->_M_tail(*this)._M_head(*this) = std::forward<_U2>(__in.second);
+    1702              :           return *this;
+    1703              :         }
+    1704              : 
+    1705              : #if __cplusplus > 202002L
+    1706              :       template<typename _U1, typename _U2>
+    1707              :         constexpr const tuple&
+    1708              :         operator=(const pair<_U1, _U2>& __in) const
+    1709              :         requires is_assignable_v<const _T1&, const _U1&>
+    1710              :           && is_assignable_v<const _T2&, const _U2&>
+    1711              :         {
+    1712              :           this->_M_head(*this) = __in.first;
+    1713              :           this->_M_tail(*this)._M_head(*this) = __in.second;
+    1714              :           return *this;
+    1715              :         }
+    1716              : 
+    1717              :       template<typename _U1, typename _U2>
+    1718              :         constexpr const tuple&
+    1719              :         operator=(pair<_U1, _U2>&& __in) const
+    1720              :         requires is_assignable_v<const _T1&, _U1>
+    1721              :           && is_assignable_v<const _T2&, _U2>
+    1722              :         {
+    1723              :           this->_M_head(*this) = std::forward<_U1>(__in.first);
+    1724              :           this->_M_tail(*this)._M_head(*this) = std::forward<_U2>(__in.second);
+    1725              :           return *this;
+    1726              :         }
+    1727              : #endif // C++23
+    1728              : 
+    1729              :       _GLIBCXX20_CONSTEXPR
+    1730              :       void
+    1731              :       swap(tuple& __in)
+    1732              :       noexcept(__and_<__is_nothrow_swappable<_T1>,
+    1733              :                       __is_nothrow_swappable<_T2>>::value)
+    1734              :       { _Inherited::_M_swap(__in); }
+    1735              : 
+    1736              : #if __cplusplus > 202002L
+    1737              :       constexpr void
+    1738              :       swap(const tuple& __in) const
+    1739              :       noexcept(__and_v<__is_nothrow_swappable<const _T1>,
+    1740              :                        __is_nothrow_swappable<const _T2>>)
+    1741              :       requires is_swappable_v<const _T1> && is_swappable_v<const _T2>
+    1742              :       { _Inherited::_M_swap(__in); }
+    1743              : #endif // C++23
+    1744              :     };
+    1745              : 
+    1746              : 
+    1747              :   /// class tuple_size
+    1748              :   template<typename... _Elements>
+    1749              :     struct tuple_size<tuple<_Elements...>>
+    1750              :     : public integral_constant<size_t, sizeof...(_Elements)> { };
+    1751              : 
+    1752              : #if __cplusplus >= 201703L
+    1753              :   template<typename... _Types>
+    1754              :     inline constexpr size_t tuple_size_v<tuple<_Types...>>
+    1755              :       = sizeof...(_Types);
+    1756              : 
+    1757              :   template<typename... _Types>
+    1758              :     inline constexpr size_t tuple_size_v<const tuple<_Types...>>
+    1759              :       = sizeof...(_Types);
+    1760              : #endif
+    1761              : 
+    1762              :   /// Trait to get the Ith element type from a tuple.
+    1763              :   template<size_t __i, typename... _Types>
+    1764              :     struct tuple_element<__i, tuple<_Types...>>
+    1765              :     {
+    1766              :       static_assert(__i < sizeof...(_Types), "tuple index must be in range");
+    1767              : 
+    1768              :       using type = typename _Nth_type<__i, _Types...>::type;
+    1769              :     };
+    1770              : 
+    1771              :   template<size_t __i, typename _Head, typename... _Tail>
+    1772              :     constexpr _Head&
+    1773     17270032 :     __get_helper(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
+    1774     17270032 :     { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); }
+    1775              : 
+    1776              :   template<size_t __i, typename _Head, typename... _Tail>
+    1777              :     constexpr const _Head&
+    1778     31996304 :     __get_helper(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
+    1779     31996304 :     { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); }
+    1780              : 
+    1781              :   // Deleted overload to improve diagnostics for invalid indices
+    1782              :   template<size_t __i, typename... _Types>
+    1783              :     __enable_if_t<(__i >= sizeof...(_Types))>
+    1784              :     __get_helper(const tuple<_Types...>&) = delete;
+    1785              : 
+    1786              :   /// Return a reference to the ith element of a tuple.
+    1787              :   template<size_t __i, typename... _Elements>
+    1788              :     constexpr __tuple_element_t<__i, tuple<_Elements...>>&
+    1789     15664298 :     get(tuple<_Elements...>& __t) noexcept
+    1790     15664298 :     { return std::__get_helper<__i>(__t); }
+    1791              : 
+    1792              :   /// Return a const reference to the ith element of a const tuple.
+    1793              :   template<size_t __i, typename... _Elements>
+    1794              :     constexpr const __tuple_element_t<__i, tuple<_Elements...>>&
+    1795     31996304 :     get(const tuple<_Elements...>& __t) noexcept
+    1796     31996304 :     { return std::__get_helper<__i>(__t); }
+    1797              : 
+    1798              :   /// Return an rvalue reference to the ith element of a tuple rvalue.
+    1799              :   template<size_t __i, typename... _Elements>
+    1800              :     constexpr __tuple_element_t<__i, tuple<_Elements...>>&&
+    1801      1605734 :     get(tuple<_Elements...>&& __t) noexcept
+    1802              :     {
+    1803              :       typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type;
+    1804      1605734 :       return std::forward<__element_type>(std::__get_helper<__i>(__t));
+    1805              :     }
+    1806              : 
+    1807              :   /// Return a const rvalue reference to the ith element of a const tuple rvalue.
+    1808              :   template<size_t __i, typename... _Elements>
+    1809              :     constexpr const __tuple_element_t<__i, tuple<_Elements...>>&&
+    1810              :     get(const tuple<_Elements...>&& __t) noexcept
+    1811              :     {
+    1812              :       typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type;
+    1813              :       return std::forward<const __element_type>(std::__get_helper<__i>(__t));
+    1814              :     }
+    1815              : 
+    1816              :   /// @cond undocumented
+    1817              :   // Deleted overload chosen for invalid indices.
+    1818              :   template<size_t __i, typename... _Elements>
+    1819              :     constexpr __enable_if_t<(__i >= sizeof...(_Elements))>
+    1820              :     get(const tuple<_Elements...>&) = delete;
+    1821              :   /// @endcond
+    1822              : 
+    1823              : #if __cplusplus >= 201402L
+    1824              : 
+    1825              : #define __cpp_lib_tuples_by_type 201304L
+    1826              : 
+    1827              :   /// Return a reference to the unique element of type _Tp of a tuple.
+    1828              :   template <typename _Tp, typename... _Types>
+    1829              :     constexpr _Tp&
+    1830              :     get(tuple<_Types...>& __t) noexcept
+    1831              :     {
+    1832              :       constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>();
+    1833              :       static_assert(__idx < sizeof...(_Types),
+    1834              :           "the type T in std::get<T> must occur exactly once in the tuple");
+    1835              :       return std::__get_helper<__idx>(__t);
+    1836              :     }
+    1837              : 
+    1838              :   /// Return a reference to the unique element of type _Tp of a tuple rvalue.
+    1839              :   template <typename _Tp, typename... _Types>
+    1840              :     constexpr _Tp&&
+    1841              :     get(tuple<_Types...>&& __t) noexcept
+    1842              :     {
+    1843              :       constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>();
+    1844              :       static_assert(__idx < sizeof...(_Types),
+    1845              :           "the type T in std::get<T> must occur exactly once in the tuple");
+    1846              :       return std::forward<_Tp>(std::__get_helper<__idx>(__t));
+    1847              :     }
+    1848              : 
+    1849              :   /// Return a const reference to the unique element of type _Tp of a tuple.
+    1850              :   template <typename _Tp, typename... _Types>
+    1851              :     constexpr const _Tp&
+    1852              :     get(const tuple<_Types...>& __t) noexcept
+    1853              :     {
+    1854              :       constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>();
+    1855              :       static_assert(__idx < sizeof...(_Types),
+    1856              :           "the type T in std::get<T> must occur exactly once in the tuple");
+    1857              :       return std::__get_helper<__idx>(__t);
+    1858              :     }
+    1859              : 
+    1860              :   /// Return a const reference to the unique element of type _Tp of
+    1861              :   /// a const tuple rvalue.
+    1862              :   template <typename _Tp, typename... _Types>
+    1863              :     constexpr const _Tp&&
+    1864              :     get(const tuple<_Types...>&& __t) noexcept
+    1865              :     {
+    1866              :       constexpr size_t __idx = __find_uniq_type_in_pack<_Tp, _Types...>();
+    1867              :       static_assert(__idx < sizeof...(_Types),
+    1868              :           "the type T in std::get<T> must occur exactly once in the tuple");
+    1869              :       return std::forward<const _Tp>(std::__get_helper<__idx>(__t));
+    1870              :     }
+    1871              : #endif
+    1872              : 
+    1873              :   // This class performs the comparison operations on tuples
+    1874              :   template<typename _Tp, typename _Up, size_t __i, size_t __size>
+    1875              :     struct __tuple_compare
+    1876              :     {
+    1877              :       static constexpr bool
+    1878            0 :       __eq(const _Tp& __t, const _Up& __u)
+    1879              :       {
+    1880            0 :         return bool(std::get<__i>(__t) == std::get<__i>(__u))
+    1881            0 :           && __tuple_compare<_Tp, _Up, __i + 1, __size>::__eq(__t, __u);
+    1882              :       }
+    1883              : 
+    1884              :       static constexpr bool
+    1885              :       __less(const _Tp& __t, const _Up& __u)
+    1886              :       {
+    1887              :         return bool(std::get<__i>(__t) < std::get<__i>(__u))
+    1888              :           || (!bool(std::get<__i>(__u) < std::get<__i>(__t))
+    1889              :               && __tuple_compare<_Tp, _Up, __i + 1, __size>::__less(__t, __u));
+    1890              :       }
+    1891              :     };
+    1892              : 
+    1893              :   template<typename _Tp, typename _Up, size_t __size>
+    1894              :     struct __tuple_compare<_Tp, _Up, __size, __size>
+    1895              :     {
+    1896              :       static constexpr bool
+    1897            0 :       __eq(const _Tp&, const _Up&) { return true; }
+    1898              : 
+    1899              :       static constexpr bool
+    1900              :       __less(const _Tp&, const _Up&) { return false; }
+    1901              :     };
+    1902              : 
+    1903              :   template<typename... _TElements, typename... _UElements>
+    1904              :     constexpr bool
+    1905            0 :     operator==(const tuple<_TElements...>& __t,
+    1906              :                const tuple<_UElements...>& __u)
+    1907              :     {
+    1908              :       static_assert(sizeof...(_TElements) == sizeof...(_UElements),
+    1909              :           "tuple objects can only be compared if they have equal sizes.");
+    1910              :       using __compare = __tuple_compare<tuple<_TElements...>,
+    1911              :                                         tuple<_UElements...>,
+    1912              :                                         0, sizeof...(_TElements)>;
+    1913            0 :       return __compare::__eq(__t, __u);
+    1914              :     }
+    1915              : 
+    1916              : #if __cpp_lib_three_way_comparison
+    1917              :   template<typename _Cat, typename _Tp, typename _Up>
+    1918              :     constexpr _Cat
+    1919              :     __tuple_cmp(const _Tp&, const _Up&, index_sequence<>)
+    1920              :     { return _Cat::equivalent; }
+    1921              : 
+    1922              :   template<typename _Cat, typename _Tp, typename _Up,
+    1923              :            size_t _Idx0, size_t... _Idxs>
+    1924              :     constexpr _Cat
+    1925              :     __tuple_cmp(const _Tp& __t, const _Up& __u,
+    1926              :                 index_sequence<_Idx0, _Idxs...>)
+    1927              :     {
+    1928              :       auto __c
+    1929              :         = __detail::__synth3way(std::get<_Idx0>(__t), std::get<_Idx0>(__u));
+    1930              :       if (__c != 0)
+    1931              :         return __c;
+    1932              :       return std::__tuple_cmp<_Cat>(__t, __u, index_sequence<_Idxs...>());
+    1933              :     }
+    1934              : 
+    1935              :   template<typename... _Tps, typename... _Ups>
+    1936              :     constexpr
+    1937              :     common_comparison_category_t<__detail::__synth3way_t<_Tps, _Ups>...>
+    1938              :     operator<=>(const tuple<_Tps...>& __t, const tuple<_Ups...>& __u)
+    1939              :     {
+    1940              :       using _Cat
+    1941              :         = common_comparison_category_t<__detail::__synth3way_t<_Tps, _Ups>...>;
+    1942              :       return std::__tuple_cmp<_Cat>(__t, __u, index_sequence_for<_Tps...>());
+    1943              :     }
+    1944              : #else
+    1945              :   template<typename... _TElements, typename... _UElements>
+    1946              :     constexpr bool
+    1947              :     operator<(const tuple<_TElements...>& __t,
+    1948              :               const tuple<_UElements...>& __u)
+    1949              :     {
+    1950              :       static_assert(sizeof...(_TElements) == sizeof...(_UElements),
+    1951              :           "tuple objects can only be compared if they have equal sizes.");
+    1952              :       using __compare = __tuple_compare<tuple<_TElements...>,
+    1953              :                                         tuple<_UElements...>,
+    1954              :                                         0, sizeof...(_TElements)>;
+    1955              :       return __compare::__less(__t, __u);
+    1956              :     }
+    1957              : 
+    1958              :   template<typename... _TElements, typename... _UElements>
+    1959              :     constexpr bool
+    1960              :     operator!=(const tuple<_TElements...>& __t,
+    1961              :                const tuple<_UElements...>& __u)
+    1962              :     { return !(__t == __u); }
+    1963              : 
+    1964              :   template<typename... _TElements, typename... _UElements>
+    1965              :     constexpr bool
+    1966              :     operator>(const tuple<_TElements...>& __t,
+    1967              :               const tuple<_UElements...>& __u)
+    1968              :     { return __u < __t; }
+    1969              : 
+    1970              :   template<typename... _TElements, typename... _UElements>
+    1971              :     constexpr bool
+    1972              :     operator<=(const tuple<_TElements...>& __t,
+    1973              :                const tuple<_UElements...>& __u)
+    1974              :     { return !(__u < __t); }
+    1975              : 
+    1976              :   template<typename... _TElements, typename... _UElements>
+    1977              :     constexpr bool
+    1978              :     operator>=(const tuple<_TElements...>& __t,
+    1979              :                const tuple<_UElements...>& __u)
+    1980              :     { return !(__t < __u); }
+    1981              : #endif // three_way_comparison
+    1982              : 
+    1983              :   // NB: DR 705.
+    1984              :   /// Create a tuple containing copies of the arguments
+    1985              :   template<typename... _Elements>
+    1986              :     constexpr tuple<typename __decay_and_strip<_Elements>::__type...>
+    1987              :     make_tuple(_Elements&&... __args)
+    1988              :     {
+    1989              :       typedef tuple<typename __decay_and_strip<_Elements>::__type...>
+    1990              :         __result_type;
+    1991              :       return __result_type(std::forward<_Elements>(__args)...);
+    1992              :     }
+    1993              : 
+    1994              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    1995              :   // 2275. Why is forward_as_tuple not constexpr?
+    1996              :   /// Create a tuple of lvalue or rvalue references to the arguments
+    1997              :   template<typename... _Elements>
+    1998              :     constexpr tuple<_Elements&&...>
+    1999      3129356 :     forward_as_tuple(_Elements&&... __args) noexcept
+    2000      3129356 :     { return tuple<_Elements&&...>(std::forward<_Elements>(__args)...); }
+    2001              : 
+    2002              :   // Declarations of std::array and its std::get overloads, so that
+    2003              :   // std::tuple_cat can use them if <tuple> is included before <array>.
+    2004              : 
+    2005              :   template<typename _Tp, size_t _Nm> struct array;
+    2006              : 
+    2007              :   template<size_t _Int, typename _Tp, size_t _Nm>
+    2008              :     constexpr _Tp&
+    2009              :     get(array<_Tp, _Nm>&) noexcept;
+    2010              : 
+    2011              :   template<size_t _Int, typename _Tp, size_t _Nm>
+    2012              :     constexpr _Tp&&
+    2013              :     get(array<_Tp, _Nm>&&) noexcept;
+    2014              : 
+    2015              :   template<size_t _Int, typename _Tp, size_t _Nm>
+    2016              :     constexpr const _Tp&
+    2017              :     get(const array<_Tp, _Nm>&) noexcept;
+    2018              : 
+    2019              :   template<size_t _Int, typename _Tp, size_t _Nm>
+    2020              :     constexpr const _Tp&&
+    2021              :     get(const array<_Tp, _Nm>&&) noexcept;
+    2022              : 
+    2023              :   /// @cond undocumented
+    2024              :   template<size_t, typename, typename, size_t>
+    2025              :     struct __make_tuple_impl;
+    2026              : 
+    2027              :   template<size_t _Idx, typename _Tuple, typename... _Tp, size_t _Nm>
+    2028              :     struct __make_tuple_impl<_Idx, tuple<_Tp...>, _Tuple, _Nm>
+    2029              :     : __make_tuple_impl<_Idx + 1,
+    2030              :                         tuple<_Tp..., __tuple_element_t<_Idx, _Tuple>>,
+    2031              :                         _Tuple, _Nm>
+    2032              :     { };
+    2033              : 
+    2034              :   template<size_t _Nm, typename _Tuple, typename... _Tp>
+    2035              :     struct __make_tuple_impl<_Nm, tuple<_Tp...>, _Tuple, _Nm>
+    2036              :     {
+    2037              :       typedef tuple<_Tp...> __type;
+    2038              :     };
+    2039              : 
+    2040              :   template<typename _Tuple>
+    2041              :     struct __do_make_tuple
+    2042              :     : __make_tuple_impl<0, tuple<>, _Tuple, tuple_size<_Tuple>::value>
+    2043              :     { };
+    2044              : 
+    2045              :   // Returns the std::tuple equivalent of a tuple-like type.
+    2046              :   template<typename _Tuple>
+    2047              :     struct __make_tuple
+    2048              :     : public __do_make_tuple<__remove_cvref_t<_Tuple>>
+    2049              :     { };
+    2050              : 
+    2051              :   // Combines several std::tuple's into a single one.
+    2052              :   template<typename...>
+    2053              :     struct __combine_tuples;
+    2054              : 
+    2055              :   template<>
+    2056              :     struct __combine_tuples<>
+    2057              :     {
+    2058              :       typedef tuple<> __type;
+    2059              :     };
+    2060              : 
+    2061              :   template<typename... _Ts>
+    2062              :     struct __combine_tuples<tuple<_Ts...>>
+    2063              :     {
+    2064              :       typedef tuple<_Ts...> __type;
+    2065              :     };
+    2066              : 
+    2067              :   template<typename... _T1s, typename... _T2s, typename... _Rem>
+    2068              :     struct __combine_tuples<tuple<_T1s...>, tuple<_T2s...>, _Rem...>
+    2069              :     {
+    2070              :       typedef typename __combine_tuples<tuple<_T1s..., _T2s...>,
+    2071              :                                         _Rem...>::__type __type;
+    2072              :     };
+    2073              : 
+    2074              :   // Computes the result type of tuple_cat given a set of tuple-like types.
+    2075              :   template<typename... _Tpls>
+    2076              :     struct __tuple_cat_result
+    2077              :     {
+    2078              :       typedef typename __combine_tuples
+    2079              :         <typename __make_tuple<_Tpls>::__type...>::__type __type;
+    2080              :     };
+    2081              : 
+    2082              :   // Helper to determine the index set for the first tuple-like
+    2083              :   // type of a given set.
+    2084              :   template<typename...>
+    2085              :     struct __make_1st_indices;
+    2086              : 
+    2087              :   template<>
+    2088              :     struct __make_1st_indices<>
+    2089              :     {
+    2090              :       typedef _Index_tuple<> __type;
+    2091              :     };
+    2092              : 
+    2093              :   template<typename _Tp, typename... _Tpls>
+    2094              :     struct __make_1st_indices<_Tp, _Tpls...>
+    2095              :     {
+    2096              :       typedef typename _Build_index_tuple<tuple_size<
+    2097              :         typename remove_reference<_Tp>::type>::value>::__type __type;
+    2098              :     };
+    2099              : 
+    2100              :   // Performs the actual concatenation by step-wise expanding tuple-like
+    2101              :   // objects into the elements,  which are finally forwarded into the
+    2102              :   // result tuple.
+    2103              :   template<typename _Ret, typename _Indices, typename... _Tpls>
+    2104              :     struct __tuple_concater;
+    2105              : 
+    2106              :   template<typename _Ret, size_t... _Is, typename _Tp, typename... _Tpls>
+    2107              :     struct __tuple_concater<_Ret, _Index_tuple<_Is...>, _Tp, _Tpls...>
+    2108              :     {
+    2109              :       template<typename... _Us>
+    2110              :         static constexpr _Ret
+    2111              :         _S_do(_Tp&& __tp, _Tpls&&... __tps, _Us&&... __us)
+    2112              :         {
+    2113              :           typedef typename __make_1st_indices<_Tpls...>::__type __idx;
+    2114              :           typedef __tuple_concater<_Ret, __idx, _Tpls...>      __next;
+    2115              :           return __next::_S_do(std::forward<_Tpls>(__tps)...,
+    2116              :                                std::forward<_Us>(__us)...,
+    2117              :                                std::get<_Is>(std::forward<_Tp>(__tp))...);
+    2118              :         }
+    2119              :     };
+    2120              : 
+    2121              :   template<typename _Ret>
+    2122              :     struct __tuple_concater<_Ret, _Index_tuple<>>
+    2123              :     {
+    2124              :       template<typename... _Us>
+    2125              :         static constexpr _Ret
+    2126              :         _S_do(_Us&&... __us)
+    2127              :         {
+    2128              :           return _Ret(std::forward<_Us>(__us)...);
+    2129              :         }
+    2130              :     };
+    2131              : 
+    2132              :   template<typename... _Tps>
+    2133              :     struct __is_tuple_like_impl<tuple<_Tps...>> : true_type
+    2134              :     { };
+    2135              :   /// @endcond
+    2136              : 
+    2137              :   /// Create a `tuple` containing all elements from multiple tuple-like objects
+    2138              :   template<typename... _Tpls, typename = typename
+    2139              :            enable_if<__and_<__is_tuple_like<_Tpls>...>::value>::type>
+    2140              :     constexpr auto
+    2141              :     tuple_cat(_Tpls&&... __tpls)
+    2142              :     -> typename __tuple_cat_result<_Tpls...>::__type
+    2143              :     {
+    2144              :       typedef typename __tuple_cat_result<_Tpls...>::__type __ret;
+    2145              :       typedef typename __make_1st_indices<_Tpls...>::__type __idx;
+    2146              :       typedef __tuple_concater<__ret, __idx, _Tpls...> __concater;
+    2147              :       return __concater::_S_do(std::forward<_Tpls>(__tpls)...);
+    2148              :     }
+    2149              : 
+    2150              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    2151              :   // 2301. Why is tie not constexpr?
+    2152              :   /// Return a tuple of lvalue references bound to the arguments
+    2153              :   template<typename... _Elements>
+    2154              :     constexpr tuple<_Elements&...>
+    2155          286 :     tie(_Elements&... __args) noexcept
+    2156          286 :     { return tuple<_Elements&...>(__args...); }
+    2157              : 
+    2158              :   /// Exchange the values of two tuples
+    2159              :   template<typename... _Elements>
+    2160              :     _GLIBCXX20_CONSTEXPR
+    2161              :     inline
+    2162              : #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
+    2163              :     // Constrained free swap overload, see p0185r1
+    2164              :     typename enable_if<__and_<__is_swappable<_Elements>...>::value
+    2165              :       >::type
+    2166              : #else
+    2167              :     void
+    2168              : #endif
+    2169              :     swap(tuple<_Elements...>& __x, tuple<_Elements...>& __y)
+    2170              :     noexcept(noexcept(__x.swap(__y)))
+    2171              :     { __x.swap(__y); }
+    2172              : 
+    2173              : #if __cplusplus > 202002L
+    2174              :   template<typename... _Elements>
+    2175              :     requires (is_swappable_v<const _Elements> && ...)
+    2176              :     constexpr void
+    2177              :     swap(const tuple<_Elements...>& __x, const tuple<_Elements...>& __y)
+    2178              :     noexcept(noexcept(__x.swap(__y)))
+    2179              :     { __x.swap(__y); }
+    2180              : #endif // C++23
+    2181              : 
+    2182              : #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
+    2183              :   /// Exchange the values of two const tuples (if const elements can be swapped)
+    2184              :   template<typename... _Elements>
+    2185              :     _GLIBCXX20_CONSTEXPR
+    2186              :     typename enable_if<!__and_<__is_swappable<_Elements>...>::value>::type
+    2187              :     swap(tuple<_Elements...>&, tuple<_Elements...>&) = delete;
+    2188              : #endif
+    2189              : 
+    2190              :   // A class (and instance) which can be used in 'tie' when an element
+    2191              :   // of a tuple is not required.
+    2192              :   // _GLIBCXX14_CONSTEXPR
+    2193              :   // 2933. PR for LWG 2773 could be clearer
+    2194              :   struct _Swallow_assign
+    2195              :   {
+    2196              :     template<class _Tp>
+    2197              :       _GLIBCXX14_CONSTEXPR const _Swallow_assign&
+    2198              :       operator=(const _Tp&) const
+    2199              :       { return *this; }
+    2200              :   };
+    2201              : 
+    2202              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    2203              :   // 2773. Making std::ignore constexpr
+    2204              :   /** Used with `std::tie` to ignore an element of a tuple
+    2205              :    *
+    2206              :    * When using `std::tie` to assign the elements of a tuple to variables,
+    2207              :    * unwanted elements can be ignored by using `std::ignore`. For example:
+    2208              :    *
+    2209              :    * ```
+    2210              :    * int x, y;
+    2211              :    * std::tie(x, std::ignore, y) = std::make_tuple(1, 2, 3);
+    2212              :    * ```
+    2213              :    *
+    2214              :    * This assignment will perform `x=1; std::ignore=2; y=3;` which results
+    2215              :    * in the second element being ignored.
+    2216              :    *
+    2217              :    * @since C++11
+    2218              :    */
+    2219              :   _GLIBCXX17_INLINE constexpr _Swallow_assign ignore{};
+    2220              : 
+    2221              :   /// Partial specialization for tuples
+    2222              :   template<typename... _Types, typename _Alloc>
+    2223              :     struct uses_allocator<tuple<_Types...>, _Alloc> : true_type { };
+    2224              : 
+    2225              :   // See stl_pair.h...
+    2226              :   /** "piecewise construction" using a tuple of arguments for each member.
+    2227              :    *
+    2228              :    * @param __first Arguments for the first member of the pair.
+    2229              :    * @param __second Arguments for the second member of the pair.
+    2230              :    *
+    2231              :    * The elements of each tuple will be used as the constructor arguments
+    2232              :    * for the data members of the pair.
+    2233              :   */
+    2234              :   template<class _T1, class _T2>
+    2235              :     template<typename... _Args1, typename... _Args2>
+    2236              :       _GLIBCXX20_CONSTEXPR
+    2237              :       inline
+    2238     10538856 :       pair<_T1, _T2>::
+    2239              :       pair(piecewise_construct_t,
+    2240              :            tuple<_Args1...> __first, tuple<_Args2...> __second)
+    2241              :       : pair(__first, __second,
+    2242              :              typename _Build_index_tuple<sizeof...(_Args1)>::__type(),
+    2243     10538856 :              typename _Build_index_tuple<sizeof...(_Args2)>::__type())
+    2244     10538856 :       { }
+    2245              : 
+    2246              :   template<class _T1, class _T2>
+    2247              :     template<typename... _Args1, size_t... _Indexes1,
+    2248              :              typename... _Args2, size_t... _Indexes2>
+    2249              :       _GLIBCXX20_CONSTEXPR inline
+    2250     10538856 :       pair<_T1, _T2>::
+    2251              :       pair(tuple<_Args1...>& __tuple1, tuple<_Args2...>& __tuple2,
+    2252              :            _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>)
+    2253     10538856 :       : first(std::forward<_Args1>(std::get<_Indexes1>(__tuple1))...),
+    2254     10538856 :         second(std::forward<_Args2>(std::get<_Indexes2>(__tuple2))...)
+    2255     10538856 :       { }
+    2256              : 
+    2257              : #if __cplusplus >= 201703L
+    2258              : 
+    2259              :   // Unpack a std::tuple into a type trait and use its value.
+    2260              :   // For cv std::tuple<_Up> the result is _Trait<_Tp, cv _Up...>::value.
+    2261              :   // For cv std::tuple<_Up>& the result is _Trait<_Tp, cv _Up&...>::value.
+    2262              :   // Otherwise the result is false (because we don't know if std::get throws).
+    2263              :   template<template<typename...> class _Trait, typename _Tp, typename _Tuple>
+    2264              :     inline constexpr bool __unpack_std_tuple = false;
+    2265              : 
+    2266              :   template<template<typename...> class _Trait, typename _Tp, typename... _Up>
+    2267              :     inline constexpr bool __unpack_std_tuple<_Trait, _Tp, tuple<_Up...>>
+    2268              :       = _Trait<_Tp, _Up...>::value;
+    2269              : 
+    2270              :   template<template<typename...> class _Trait, typename _Tp, typename... _Up>
+    2271              :     inline constexpr bool __unpack_std_tuple<_Trait, _Tp, tuple<_Up...>&>
+    2272              :       = _Trait<_Tp, _Up&...>::value;
+    2273              : 
+    2274              :   template<template<typename...> class _Trait, typename _Tp, typename... _Up>
+    2275              :     inline constexpr bool __unpack_std_tuple<_Trait, _Tp, const tuple<_Up...>>
+    2276              :       = _Trait<_Tp, const _Up...>::value;
+    2277              : 
+    2278              :   template<template<typename...> class _Trait, typename _Tp, typename... _Up>
+    2279              :     inline constexpr bool __unpack_std_tuple<_Trait, _Tp, const tuple<_Up...>&>
+    2280              :       = _Trait<_Tp, const _Up&...>::value;
+    2281              : 
+    2282              : # define __cpp_lib_apply 201603L
+    2283              : 
+    2284              :   template <typename _Fn, typename _Tuple, size_t... _Idx>
+    2285              :     constexpr decltype(auto)
+    2286              :     __apply_impl(_Fn&& __f, _Tuple&& __t, index_sequence<_Idx...>)
+    2287              :     {
+    2288              :       return std::__invoke(std::forward<_Fn>(__f),
+    2289              :                            std::get<_Idx>(std::forward<_Tuple>(__t))...);
+    2290              :     }
+    2291              : 
+    2292              :   template <typename _Fn, typename _Tuple>
+    2293              :     constexpr decltype(auto)
+    2294              :     apply(_Fn&& __f, _Tuple&& __t)
+    2295              :     noexcept(__unpack_std_tuple<is_nothrow_invocable, _Fn, _Tuple>)
+    2296              :     {
+    2297              :       using _Indices
+    2298              :         = make_index_sequence<tuple_size_v<remove_reference_t<_Tuple>>>;
+    2299              :       return std::__apply_impl(std::forward<_Fn>(__f),
+    2300              :                                std::forward<_Tuple>(__t),
+    2301              :                                _Indices{});
+    2302              :     }
+    2303              : 
+    2304              : #define __cpp_lib_make_from_tuple  201606L
+    2305              : 
+    2306              :   template <typename _Tp, typename _Tuple, size_t... _Idx>
+    2307              :     constexpr _Tp
+    2308              :     __make_from_tuple_impl(_Tuple&& __t, index_sequence<_Idx...>)
+    2309              :     { return _Tp(std::get<_Idx>(std::forward<_Tuple>(__t))...); }
+    2310              : 
+    2311              :   template <typename _Tp, typename _Tuple>
+    2312              :     constexpr _Tp
+    2313              :     make_from_tuple(_Tuple&& __t)
+    2314              :     noexcept(__unpack_std_tuple<is_nothrow_constructible, _Tp, _Tuple>)
+    2315              :     {
+    2316              :       constexpr size_t __n = tuple_size_v<remove_reference_t<_Tuple>>;
+    2317              : #if __has_builtin(__reference_constructs_from_temporary)
+    2318              :       if constexpr (__n == 1)
+    2319              :         {
+    2320              :           using _Elt = decltype(std::get<0>(std::declval<_Tuple>()));
+    2321              :           static_assert(!__reference_constructs_from_temporary(_Tp, _Elt));
+    2322              :         }
+    2323              : #endif
+    2324              :       return __make_from_tuple_impl<_Tp>(std::forward<_Tuple>(__t),
+    2325              :                                          make_index_sequence<__n>{});
+    2326              :     }
+    2327              : #endif // C++17
+    2328              : 
+    2329              : #if __cplusplus > 202002L
+    2330              :   template<typename... _TTypes, typename... _UTypes,
+    2331              :            template<typename> class _TQual, template<typename> class _UQual>
+    2332              :     requires requires { typename tuple<common_reference_t<_TQual<_TTypes>, _UQual<_UTypes>>...>; }
+    2333              :   struct basic_common_reference<tuple<_TTypes...>, tuple<_UTypes...>, _TQual, _UQual>
+    2334              :   { using type = tuple<common_reference_t<_TQual<_TTypes>, _UQual<_UTypes>>...>; };
+    2335              : 
+    2336              :   template<typename... _TTypes, typename... _UTypes>
+    2337              :     requires requires { typename tuple<common_type_t<_TTypes, _UTypes>...>; }
+    2338              :   struct common_type<tuple<_TTypes...>, tuple<_UTypes...>>
+    2339              :   { using type = tuple<common_type_t<_TTypes, _UTypes>...>; };
+    2340              : #endif // C++23
+    2341              : 
+    2342              :   /// @}
+    2343              : 
+    2344              : _GLIBCXX_END_NAMESPACE_VERSION
+    2345              : } // namespace std
+    2346              : 
+    2347              : #endif // C++11
+    2348              : 
+    2349              : #endif // _GLIBCXX_TUPLE
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/type_traits.func-c.html b/html/usr/include/c++/13/type_traits.func-c.html new file mode 100644 index 0000000..61f13f6 --- /dev/null +++ b/html/usr/include/c++/13/type_traits.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/type_traits - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - type_traits (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %10
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt17integral_constantIbLb1EEcvbEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/type_traits.func.html b/html/usr/include/c++/13/type_traits.func.html new file mode 100644 index 0000000..a9d544b --- /dev/null +++ b/html/usr/include/c++/13/type_traits.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/type_traits - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - type_traits (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %10
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt17integral_constantIbLb1EEcvbEv0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/type_traits.gcov.html b/html/usr/include/c++/13/type_traits.gcov.html new file mode 100644 index 0000000..812d2bc --- /dev/null +++ b/html/usr/include/c++/13/type_traits.gcov.html @@ -0,0 +1,3914 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/type_traits + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - type_traits (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %10
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // C++11 <type_traits> -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2007-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file include/type_traits
+      26              :  *  This is a Standard C++ Library header.
+      27              :  */
+      28              : 
+      29              : #ifndef _GLIBCXX_TYPE_TRAITS
+      30              : #define _GLIBCXX_TYPE_TRAITS 1
+      31              : 
+      32              : #pragma GCC system_header
+      33              : 
+      34              : #if __cplusplus < 201103L
+      35              : # include <bits/c++0x_warning.h>
+      36              : #else
+      37              : 
+      38              : #include <bits/c++config.h>
+      39              : 
+      40              : namespace std _GLIBCXX_VISIBILITY(default)
+      41              : {
+      42              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      43              : 
+      44              :   template<typename _Tp>
+      45              :     class reference_wrapper;
+      46              : 
+      47              :   /**
+      48              :    * @defgroup metaprogramming Metaprogramming
+      49              :    * @ingroup utilities
+      50              :    *
+      51              :    * Template utilities for compile-time introspection and modification,
+      52              :    * including type classification traits, type property inspection traits
+      53              :    * and type transformation traits.
+      54              :    *
+      55              :    * @since C++11
+      56              :    *
+      57              :    * @{
+      58              :    */
+      59              : 
+      60              :   /// integral_constant
+      61              :   template<typename _Tp, _Tp __v>
+      62              :     struct integral_constant
+      63              :     {
+      64              :       static constexpr _Tp                  value = __v;
+      65              :       typedef _Tp                           value_type;
+      66              :       typedef integral_constant<_Tp, __v>   type;
+      67            0 :       constexpr operator value_type() const noexcept { return value; }
+      68              : #if __cplusplus > 201103L
+      69              : 
+      70              : #define __cpp_lib_integral_constant_callable 201304L
+      71              : 
+      72              :       constexpr value_type operator()() const noexcept { return value; }
+      73              : #endif
+      74              :     };
+      75              : 
+      76              : #if ! __cpp_inline_variables
+      77              :   template<typename _Tp, _Tp __v>
+      78              :     constexpr _Tp integral_constant<_Tp, __v>::value;
+      79              : #endif
+      80              : 
+      81              :   /// The type used as a compile-time boolean with true value.
+      82              :   using true_type =  integral_constant<bool, true>;
+      83              : 
+      84              :   /// The type used as a compile-time boolean with false value.
+      85              :   using false_type = integral_constant<bool, false>;
+      86              : 
+      87              :   /// @cond undocumented
+      88              :   /// bool_constant for C++11
+      89              :   template<bool __v>
+      90              :     using __bool_constant = integral_constant<bool, __v>;
+      91              :   /// @endcond
+      92              : 
+      93              : #if __cplusplus >= 201703L
+      94              : # define __cpp_lib_bool_constant 201505L
+      95              :   /// Alias template for compile-time boolean constant types.
+      96              :   /// @since C++17
+      97              :   template<bool __v>
+      98              :     using bool_constant = integral_constant<bool, __v>;
+      99              : #endif
+     100              : 
+     101              :   // Metaprogramming helper types.
+     102              : 
+     103              :   // Primary template.
+     104              :   /// Define a member typedef `type` only if a boolean constant is true.
+     105              :   template<bool, typename _Tp = void>
+     106              :     struct enable_if
+     107              :     { };
+     108              : 
+     109              :   // Partial specialization for true.
+     110              :   template<typename _Tp>
+     111              :     struct enable_if<true, _Tp>
+     112              :     { typedef _Tp type; };
+     113              : 
+     114              :   // __enable_if_t (std::enable_if_t for C++11)
+     115              :   template<bool _Cond, typename _Tp = void>
+     116              :     using __enable_if_t = typename enable_if<_Cond, _Tp>::type;
+     117              : 
+     118              :   template<bool>
+     119              :     struct __conditional
+     120              :     {
+     121              :       template<typename _Tp, typename>
+     122              :         using type = _Tp;
+     123              :     };
+     124              : 
+     125              :   template<>
+     126              :     struct __conditional<false>
+     127              :     {
+     128              :       template<typename, typename _Up>
+     129              :         using type = _Up;
+     130              :     };
+     131              : 
+     132              :   // More efficient version of std::conditional_t for internal use (and C++11)
+     133              :   template<bool _Cond, typename _If, typename _Else>
+     134              :     using __conditional_t
+     135              :       = typename __conditional<_Cond>::template type<_If, _Else>;
+     136              : 
+     137              :   /// @cond undocumented
+     138              :   template <typename _Type>
+     139              :     struct __type_identity
+     140              :     { using type = _Type; };
+     141              : 
+     142              :   template<typename _Tp>
+     143              :     using __type_identity_t = typename __type_identity<_Tp>::type;
+     144              : 
+     145              :   namespace __detail
+     146              :   {
+     147              :     // A variadic alias template that resolves to its first argument.
+     148              :     template<typename _Tp, typename...>
+     149              :       using __first_t = _Tp;
+     150              : 
+     151              :     // These are deliberately not defined.
+     152              :     template<typename... _Bn>
+     153              :       auto __or_fn(int) -> __first_t<false_type,
+     154              :                                      __enable_if_t<!bool(_Bn::value)>...>;
+     155              : 
+     156              :     template<typename... _Bn>
+     157              :       auto __or_fn(...) -> true_type;
+     158              : 
+     159              :     template<typename... _Bn>
+     160              :       auto __and_fn(int) -> __first_t<true_type,
+     161              :                                       __enable_if_t<bool(_Bn::value)>...>;
+     162              : 
+     163              :     template<typename... _Bn>
+     164              :       auto __and_fn(...) -> false_type;
+     165              :   } // namespace detail
+     166              : 
+     167              :   // Like C++17 std::dis/conjunction, but usable in C++11 and resolves
+     168              :   // to either true_type or false_type which allows for a more efficient
+     169              :   // implementation that avoids recursive class template instantiation.
+     170              :   template<typename... _Bn>
+     171              :     struct __or_
+     172              :     : decltype(__detail::__or_fn<_Bn...>(0))
+     173              :     { };
+     174              : 
+     175              :   template<typename... _Bn>
+     176              :     struct __and_
+     177              :     : decltype(__detail::__and_fn<_Bn...>(0))
+     178              :     { };
+     179              : 
+     180              :   template<typename _Pp>
+     181              :     struct __not_
+     182              :     : __bool_constant<!bool(_Pp::value)>
+     183              :     { };
+     184              :   /// @endcond
+     185              : 
+     186              : #if __cplusplus >= 201703L
+     187              : 
+     188              :   /// @cond undocumented
+     189              :   template<typename... _Bn>
+     190              :     inline constexpr bool __or_v = __or_<_Bn...>::value;
+     191              :   template<typename... _Bn>
+     192              :     inline constexpr bool __and_v = __and_<_Bn...>::value;
+     193              : 
+     194              :   namespace __detail
+     195              :   {
+     196              :     template<typename /* = void */, typename _B1, typename... _Bn>
+     197              :       struct __disjunction_impl
+     198              :       { using type = _B1; };
+     199              : 
+     200              :     template<typename _B1, typename _B2, typename... _Bn>
+     201              :       struct __disjunction_impl<__enable_if_t<!bool(_B1::value)>, _B1, _B2, _Bn...>
+     202              :       { using type = typename __disjunction_impl<void, _B2, _Bn...>::type; };
+     203              : 
+     204              :     template<typename /* = void */, typename _B1, typename... _Bn>
+     205              :       struct __conjunction_impl
+     206              :       { using type = _B1; };
+     207              : 
+     208              :     template<typename _B1, typename _B2, typename... _Bn>
+     209              :       struct __conjunction_impl<__enable_if_t<bool(_B1::value)>, _B1, _B2, _Bn...>
+     210              :       { using type = typename __conjunction_impl<void, _B2, _Bn...>::type; };
+     211              :   } // namespace __detail
+     212              :   /// @endcond
+     213              : 
+     214              : #define __cpp_lib_logical_traits 201510L
+     215              : 
+     216              :   template<typename... _Bn>
+     217              :     struct conjunction
+     218              :     : __detail::__conjunction_impl<void, _Bn...>::type
+     219              :     { };
+     220              : 
+     221              :   template<>
+     222              :     struct conjunction<>
+     223              :     : true_type
+     224              :     { };
+     225              : 
+     226              :   template<typename... _Bn>
+     227              :     struct disjunction
+     228              :     : __detail::__disjunction_impl<void, _Bn...>::type
+     229              :     { };
+     230              : 
+     231              :   template<>
+     232              :     struct disjunction<>
+     233              :     : false_type
+     234              :     { };
+     235              : 
+     236              :   template<typename _Pp>
+     237              :     struct negation
+     238              :     : __not_<_Pp>::type
+     239              :     { };
+     240              : 
+     241              :   /** @ingroup variable_templates
+     242              :    * @{
+     243              :    */
+     244              :   template<typename... _Bn>
+     245              :     inline constexpr bool conjunction_v = conjunction<_Bn...>::value;
+     246              : 
+     247              :   template<typename... _Bn>
+     248              :     inline constexpr bool disjunction_v = disjunction<_Bn...>::value;
+     249              : 
+     250              :   template<typename _Pp>
+     251              :     inline constexpr bool negation_v = negation<_Pp>::value;
+     252              :   /// @}
+     253              : 
+     254              : #endif // C++17
+     255              : 
+     256              :   // Forward declarations
+     257              :   template<typename>
+     258              :     struct is_reference;
+     259              :   template<typename>
+     260              :     struct is_function;
+     261              :   template<typename>
+     262              :     struct is_void;
+     263              :   template<typename>
+     264              :     struct remove_cv;
+     265              :   template<typename>
+     266              :     struct is_const;
+     267              : 
+     268              :   /// @cond undocumented
+     269              :   template<typename>
+     270              :     struct __is_array_unknown_bounds;
+     271              : 
+     272              :   // Helper functions that return false_type for incomplete classes,
+     273              :   // incomplete unions and arrays of known bound from those.
+     274              : 
+     275              :   template <typename _Tp, size_t = sizeof(_Tp)>
+     276              :     constexpr true_type __is_complete_or_unbounded(__type_identity<_Tp>)
+     277              :     { return {}; }
+     278              : 
+     279              :   template <typename _TypeIdentity,
+     280              :       typename _NestedType = typename _TypeIdentity::type>
+     281              :     constexpr typename __or_<
+     282              :       is_reference<_NestedType>,
+     283              :       is_function<_NestedType>,
+     284              :       is_void<_NestedType>,
+     285              :       __is_array_unknown_bounds<_NestedType>
+     286              :     >::type __is_complete_or_unbounded(_TypeIdentity)
+     287              :     { return {}; }
+     288              : 
+     289              :   // __remove_cv_t (std::remove_cv_t for C++11).
+     290              :   template<typename _Tp>
+     291              :     using __remove_cv_t = typename remove_cv<_Tp>::type;
+     292              :   /// @endcond
+     293              : 
+     294              :   // Primary type categories.
+     295              : 
+     296              :   /// is_void
+     297              :   template<typename _Tp>
+     298              :     struct is_void
+     299              :     : public false_type { };
+     300              : 
+     301              :   template<>
+     302              :     struct is_void<void>
+     303              :     : public true_type { };
+     304              : 
+     305              :   template<>
+     306              :     struct is_void<const void>
+     307              :     : public true_type { };
+     308              : 
+     309              :   template<>
+     310              :     struct is_void<volatile void>
+     311              :     : public true_type { };
+     312              : 
+     313              :   template<>
+     314              :     struct is_void<const volatile void>
+     315              :     : public true_type { };
+     316              : 
+     317              :   /// @cond undocumented
+     318              :   template<typename>
+     319              :     struct __is_integral_helper
+     320              :     : public false_type { };
+     321              : 
+     322              :   template<>
+     323              :     struct __is_integral_helper<bool>
+     324              :     : public true_type { };
+     325              : 
+     326              :   template<>
+     327              :     struct __is_integral_helper<char>
+     328              :     : public true_type { };
+     329              : 
+     330              :   template<>
+     331              :     struct __is_integral_helper<signed char>
+     332              :     : public true_type { };
+     333              : 
+     334              :   template<>
+     335              :     struct __is_integral_helper<unsigned char>
+     336              :     : public true_type { };
+     337              : 
+     338              :   // We want is_integral<wchar_t> to be true (and make_signed/unsigned to work)
+     339              :   // even when libc doesn't provide working <wchar.h> and related functions,
+     340              :   // so don't check _GLIBCXX_USE_WCHAR_T here.
+     341              :   template<>
+     342              :     struct __is_integral_helper<wchar_t>
+     343              :     : public true_type { };
+     344              : 
+     345              : #ifdef _GLIBCXX_USE_CHAR8_T
+     346              :   template<>
+     347              :     struct __is_integral_helper<char8_t>
+     348              :     : public true_type { };
+     349              : #endif
+     350              : 
+     351              :   template<>
+     352              :     struct __is_integral_helper<char16_t>
+     353              :     : public true_type { };
+     354              : 
+     355              :   template<>
+     356              :     struct __is_integral_helper<char32_t>
+     357              :     : public true_type { };
+     358              : 
+     359              :   template<>
+     360              :     struct __is_integral_helper<short>
+     361              :     : public true_type { };
+     362              : 
+     363              :   template<>
+     364              :     struct __is_integral_helper<unsigned short>
+     365              :     : public true_type { };
+     366              : 
+     367              :   template<>
+     368              :     struct __is_integral_helper<int>
+     369              :     : public true_type { };
+     370              : 
+     371              :   template<>
+     372              :     struct __is_integral_helper<unsigned int>
+     373              :     : public true_type { };
+     374              : 
+     375              :   template<>
+     376              :     struct __is_integral_helper<long>
+     377              :     : public true_type { };
+     378              : 
+     379              :   template<>
+     380              :     struct __is_integral_helper<unsigned long>
+     381              :     : public true_type { };
+     382              : 
+     383              :   template<>
+     384              :     struct __is_integral_helper<long long>
+     385              :     : public true_type { };
+     386              : 
+     387              :   template<>
+     388              :     struct __is_integral_helper<unsigned long long>
+     389              :     : public true_type { };
+     390              : 
+     391              :   // Conditionalizing on __STRICT_ANSI__ here will break any port that
+     392              :   // uses one of these types for size_t.
+     393              : #if defined(__GLIBCXX_TYPE_INT_N_0)
+     394              :   __extension__
+     395              :   template<>
+     396              :     struct __is_integral_helper<__GLIBCXX_TYPE_INT_N_0>
+     397              :     : public true_type { };
+     398              : 
+     399              :   __extension__
+     400              :   template<>
+     401              :     struct __is_integral_helper<unsigned __GLIBCXX_TYPE_INT_N_0>
+     402              :     : public true_type { };
+     403              : #endif
+     404              : #if defined(__GLIBCXX_TYPE_INT_N_1)
+     405              :   __extension__
+     406              :   template<>
+     407              :     struct __is_integral_helper<__GLIBCXX_TYPE_INT_N_1>
+     408              :     : public true_type { };
+     409              : 
+     410              :   __extension__
+     411              :   template<>
+     412              :     struct __is_integral_helper<unsigned __GLIBCXX_TYPE_INT_N_1>
+     413              :     : public true_type { };
+     414              : #endif
+     415              : #if defined(__GLIBCXX_TYPE_INT_N_2)
+     416              :   __extension__
+     417              :   template<>
+     418              :     struct __is_integral_helper<__GLIBCXX_TYPE_INT_N_2>
+     419              :     : public true_type { };
+     420              : 
+     421              :   __extension__
+     422              :   template<>
+     423              :     struct __is_integral_helper<unsigned __GLIBCXX_TYPE_INT_N_2>
+     424              :     : public true_type { };
+     425              : #endif
+     426              : #if defined(__GLIBCXX_TYPE_INT_N_3)
+     427              :   __extension__
+     428              :   template<>
+     429              :     struct __is_integral_helper<__GLIBCXX_TYPE_INT_N_3>
+     430              :     : public true_type { };
+     431              : 
+     432              :   __extension__
+     433              :   template<>
+     434              :     struct __is_integral_helper<unsigned __GLIBCXX_TYPE_INT_N_3>
+     435              :     : public true_type { };
+     436              : #endif
+     437              :   /// @endcond
+     438              : 
+     439              :   /// is_integral
+     440              :   template<typename _Tp>
+     441              :     struct is_integral
+     442              :     : public __is_integral_helper<__remove_cv_t<_Tp>>::type
+     443              :     { };
+     444              : 
+     445              :   /// @cond undocumented
+     446              :   template<typename>
+     447              :     struct __is_floating_point_helper
+     448              :     : public false_type { };
+     449              : 
+     450              :   template<>
+     451              :     struct __is_floating_point_helper<float>
+     452              :     : public true_type { };
+     453              : 
+     454              :   template<>
+     455              :     struct __is_floating_point_helper<double>
+     456              :     : public true_type { };
+     457              : 
+     458              :   template<>
+     459              :     struct __is_floating_point_helper<long double>
+     460              :     : public true_type { };
+     461              : 
+     462              : #ifdef __STDCPP_FLOAT16_T__
+     463              :   template<>
+     464              :     struct __is_floating_point_helper<_Float16>
+     465              :     : public true_type { };
+     466              : #endif
+     467              : 
+     468              : #ifdef __STDCPP_FLOAT32_T__
+     469              :   template<>
+     470              :     struct __is_floating_point_helper<_Float32>
+     471              :     : public true_type { };
+     472              : #endif
+     473              : 
+     474              : #ifdef __STDCPP_FLOAT64_T__
+     475              :   template<>
+     476              :     struct __is_floating_point_helper<_Float64>
+     477              :     : public true_type { };
+     478              : #endif
+     479              : 
+     480              : #ifdef __STDCPP_FLOAT128_T__
+     481              :   template<>
+     482              :     struct __is_floating_point_helper<_Float128>
+     483              :     : public true_type { };
+     484              : #endif
+     485              : 
+     486              : #ifdef __STDCPP_BFLOAT16_T__
+     487              :   template<>
+     488              :     struct __is_floating_point_helper<__gnu_cxx::__bfloat16_t>
+     489              :     : public true_type { };
+     490              : #endif
+     491              : 
+     492              : #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128)
+     493              :   template<>
+     494              :     struct __is_floating_point_helper<__float128>
+     495              :     : public true_type { };
+     496              : #endif
+     497              :   /// @endcond
+     498              : 
+     499              :   /// is_floating_point
+     500              :   template<typename _Tp>
+     501              :     struct is_floating_point
+     502              :     : public __is_floating_point_helper<__remove_cv_t<_Tp>>::type
+     503              :     { };
+     504              : 
+     505              :   /// is_array
+     506              :   template<typename>
+     507              :     struct is_array
+     508              :     : public false_type { };
+     509              : 
+     510              :   template<typename _Tp, std::size_t _Size>
+     511              :     struct is_array<_Tp[_Size]>
+     512              :     : public true_type { };
+     513              : 
+     514              :   template<typename _Tp>
+     515              :     struct is_array<_Tp[]>
+     516              :     : public true_type { };
+     517              : 
+     518              :   template<typename>
+     519              :     struct __is_pointer_helper
+     520              :     : public false_type { };
+     521              : 
+     522              :   template<typename _Tp>
+     523              :     struct __is_pointer_helper<_Tp*>
+     524              :     : public true_type { };
+     525              : 
+     526              :   /// is_pointer
+     527              :   template<typename _Tp>
+     528              :     struct is_pointer
+     529              :     : public __is_pointer_helper<__remove_cv_t<_Tp>>::type
+     530              :     { };
+     531              : 
+     532              :   /// is_lvalue_reference
+     533              :   template<typename>
+     534              :     struct is_lvalue_reference
+     535              :     : public false_type { };
+     536              : 
+     537              :   template<typename _Tp>
+     538              :     struct is_lvalue_reference<_Tp&>
+     539              :     : public true_type { };
+     540              : 
+     541              :   /// is_rvalue_reference
+     542              :   template<typename>
+     543              :     struct is_rvalue_reference
+     544              :     : public false_type { };
+     545              : 
+     546              :   template<typename _Tp>
+     547              :     struct is_rvalue_reference<_Tp&&>
+     548              :     : public true_type { };
+     549              : 
+     550              :   template<typename>
+     551              :     struct __is_member_object_pointer_helper
+     552              :     : public false_type { };
+     553              : 
+     554              :   template<typename _Tp, typename _Cp>
+     555              :     struct __is_member_object_pointer_helper<_Tp _Cp::*>
+     556              :     : public __not_<is_function<_Tp>>::type { };
+     557              : 
+     558              :   /// is_member_object_pointer
+     559              :   template<typename _Tp>
+     560              :     struct is_member_object_pointer
+     561              :     : public __is_member_object_pointer_helper<__remove_cv_t<_Tp>>::type
+     562              :     { };
+     563              : 
+     564              :   template<typename>
+     565              :     struct __is_member_function_pointer_helper
+     566              :     : public false_type { };
+     567              : 
+     568              :   template<typename _Tp, typename _Cp>
+     569              :     struct __is_member_function_pointer_helper<_Tp _Cp::*>
+     570              :     : public is_function<_Tp>::type { };
+     571              : 
+     572              :   /// is_member_function_pointer
+     573              :   template<typename _Tp>
+     574              :     struct is_member_function_pointer
+     575              :     : public __is_member_function_pointer_helper<__remove_cv_t<_Tp>>::type
+     576              :     { };
+     577              : 
+     578              :   /// is_enum
+     579              :   template<typename _Tp>
+     580              :     struct is_enum
+     581              :     : public integral_constant<bool, __is_enum(_Tp)>
+     582              :     { };
+     583              : 
+     584              :   /// is_union
+     585              :   template<typename _Tp>
+     586              :     struct is_union
+     587              :     : public integral_constant<bool, __is_union(_Tp)>
+     588              :     { };
+     589              : 
+     590              :   /// is_class
+     591              :   template<typename _Tp>
+     592              :     struct is_class
+     593              :     : public integral_constant<bool, __is_class(_Tp)>
+     594              :     { };
+     595              : 
+     596              :   /// is_function
+     597              :   template<typename _Tp>
+     598              :     struct is_function
+     599              :     : public __bool_constant<!is_const<const _Tp>::value> { };
+     600              : 
+     601              :   template<typename _Tp>
+     602              :     struct is_function<_Tp&>
+     603              :     : public false_type { };
+     604              : 
+     605              :   template<typename _Tp>
+     606              :     struct is_function<_Tp&&>
+     607              :     : public false_type { };
+     608              : 
+     609              : #define __cpp_lib_is_null_pointer 201309L
+     610              : 
+     611              :   /// is_null_pointer (LWG 2247).
+     612              :   template<typename _Tp>
+     613              :     struct is_null_pointer
+     614              :     : public false_type { };
+     615              : 
+     616              :   template<>
+     617              :     struct is_null_pointer<std::nullptr_t>
+     618              :     : public true_type { };
+     619              : 
+     620              :   template<>
+     621              :     struct is_null_pointer<const std::nullptr_t>
+     622              :     : public true_type { };
+     623              : 
+     624              :   template<>
+     625              :     struct is_null_pointer<volatile std::nullptr_t>
+     626              :     : public true_type { };
+     627              : 
+     628              :   template<>
+     629              :     struct is_null_pointer<const volatile std::nullptr_t>
+     630              :     : public true_type { };
+     631              : 
+     632              :   /// __is_nullptr_t (deprecated extension).
+     633              :   /// @deprecated Non-standard. Use `is_null_pointer` instead.
+     634              :   template<typename _Tp>
+     635              :     struct __is_nullptr_t
+     636              :     : public is_null_pointer<_Tp>
+     637              :     { } _GLIBCXX_DEPRECATED_SUGGEST("std::is_null_pointer");
+     638              : 
+     639              :   // Composite type categories.
+     640              : 
+     641              :   /// is_reference
+     642              :   template<typename _Tp>
+     643              :     struct is_reference
+     644              :     : public false_type
+     645              :     { };
+     646              : 
+     647              :   template<typename _Tp>
+     648              :     struct is_reference<_Tp&>
+     649              :     : public true_type
+     650              :     { };
+     651              : 
+     652              :   template<typename _Tp>
+     653              :     struct is_reference<_Tp&&>
+     654              :     : public true_type
+     655              :     { };
+     656              : 
+     657              :   /// is_arithmetic
+     658              :   template<typename _Tp>
+     659              :     struct is_arithmetic
+     660              :     : public __or_<is_integral<_Tp>, is_floating_point<_Tp>>::type
+     661              :     { };
+     662              : 
+     663              :   /// is_fundamental
+     664              :   template<typename _Tp>
+     665              :     struct is_fundamental
+     666              :     : public __or_<is_arithmetic<_Tp>, is_void<_Tp>,
+     667              :                    is_null_pointer<_Tp>>::type
+     668              :     { };
+     669              : 
+     670              :   /// is_object
+     671              :   template<typename _Tp>
+     672              :     struct is_object
+     673              :     : public __not_<__or_<is_function<_Tp>, is_reference<_Tp>,
+     674              :                           is_void<_Tp>>>::type
+     675              :     { };
+     676              : 
+     677              :   template<typename>
+     678              :     struct is_member_pointer;
+     679              : 
+     680              :   /// is_scalar
+     681              :   template<typename _Tp>
+     682              :     struct is_scalar
+     683              :     : public __or_<is_arithmetic<_Tp>, is_enum<_Tp>, is_pointer<_Tp>,
+     684              :                    is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type
+     685              :     { };
+     686              : 
+     687              :   /// is_compound
+     688              :   template<typename _Tp>
+     689              :     struct is_compound
+     690              :     : public __not_<is_fundamental<_Tp>>::type { };
+     691              : 
+     692              :   /// @cond undocumented
+     693              :   template<typename _Tp>
+     694              :     struct __is_member_pointer_helper
+     695              :     : public false_type { };
+     696              : 
+     697              :   template<typename _Tp, typename _Cp>
+     698              :     struct __is_member_pointer_helper<_Tp _Cp::*>
+     699              :     : public true_type { };
+     700              :   /// @endcond
+     701              : 
+     702              :   /// is_member_pointer
+     703              :   template<typename _Tp>
+     704              :     struct is_member_pointer
+     705              :     : public __is_member_pointer_helper<__remove_cv_t<_Tp>>::type
+     706              :     { };
+     707              : 
+     708              :   template<typename, typename>
+     709              :     struct is_same;
+     710              : 
+     711              :   /// @cond undocumented
+     712              :   template<typename _Tp, typename... _Types>
+     713              :     using __is_one_of = __or_<is_same<_Tp, _Types>...>;
+     714              : 
+     715              :   // Check if a type is one of the signed integer types.
+     716              :   __extension__
+     717              :   template<typename _Tp>
+     718              :     using __is_signed_integer = __is_one_of<__remove_cv_t<_Tp>,
+     719              :           signed char, signed short, signed int, signed long,
+     720              :           signed long long
+     721              : #if defined(__GLIBCXX_TYPE_INT_N_0)
+     722              :           , signed __GLIBCXX_TYPE_INT_N_0
+     723              : #endif
+     724              : #if defined(__GLIBCXX_TYPE_INT_N_1)
+     725              :           , signed __GLIBCXX_TYPE_INT_N_1
+     726              : #endif
+     727              : #if defined(__GLIBCXX_TYPE_INT_N_2)
+     728              :           , signed __GLIBCXX_TYPE_INT_N_2
+     729              : #endif
+     730              : #if defined(__GLIBCXX_TYPE_INT_N_3)
+     731              :           , signed __GLIBCXX_TYPE_INT_N_3
+     732              : #endif
+     733              :           >;
+     734              : 
+     735              :   // Check if a type is one of the unsigned integer types.
+     736              :   __extension__
+     737              :   template<typename _Tp>
+     738              :     using __is_unsigned_integer = __is_one_of<__remove_cv_t<_Tp>,
+     739              :           unsigned char, unsigned short, unsigned int, unsigned long,
+     740              :           unsigned long long
+     741              : #if defined(__GLIBCXX_TYPE_INT_N_0)
+     742              :           , unsigned __GLIBCXX_TYPE_INT_N_0
+     743              : #endif
+     744              : #if defined(__GLIBCXX_TYPE_INT_N_1)
+     745              :           , unsigned __GLIBCXX_TYPE_INT_N_1
+     746              : #endif
+     747              : #if defined(__GLIBCXX_TYPE_INT_N_2)
+     748              :           , unsigned __GLIBCXX_TYPE_INT_N_2
+     749              : #endif
+     750              : #if defined(__GLIBCXX_TYPE_INT_N_3)
+     751              :           , unsigned __GLIBCXX_TYPE_INT_N_3
+     752              : #endif
+     753              :           >;
+     754              : 
+     755              :   // Check if a type is one of the signed or unsigned integer types.
+     756              :   template<typename _Tp>
+     757              :     using __is_standard_integer
+     758              :       = __or_<__is_signed_integer<_Tp>, __is_unsigned_integer<_Tp>>;
+     759              : 
+     760              :   // __void_t (std::void_t for C++11)
+     761              :   template<typename...> using __void_t = void;
+     762              :   /// @endcond
+     763              : 
+     764              :   // Type properties.
+     765              : 
+     766              :   /// is_const
+     767              :   template<typename>
+     768              :     struct is_const
+     769              :     : public false_type { };
+     770              : 
+     771              :   template<typename _Tp>
+     772              :     struct is_const<_Tp const>
+     773              :     : public true_type { };
+     774              : 
+     775              :   /// is_volatile
+     776              :   template<typename>
+     777              :     struct is_volatile
+     778              :     : public false_type { };
+     779              : 
+     780              :   template<typename _Tp>
+     781              :     struct is_volatile<_Tp volatile>
+     782              :     : public true_type { };
+     783              : 
+     784              :   /// is_trivial
+     785              :   template<typename _Tp>
+     786              :     struct is_trivial
+     787              :     : public integral_constant<bool, __is_trivial(_Tp)>
+     788              :     {
+     789              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+     790              :         "template argument must be a complete class or an unbounded array");
+     791              :     };
+     792              : 
+     793              :   /// is_trivially_copyable
+     794              :   template<typename _Tp>
+     795              :     struct is_trivially_copyable
+     796              :     : public integral_constant<bool, __is_trivially_copyable(_Tp)>
+     797              :     {
+     798              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+     799              :         "template argument must be a complete class or an unbounded array");
+     800              :     };
+     801              : 
+     802              :   /// is_standard_layout
+     803              :   template<typename _Tp>
+     804              :     struct is_standard_layout
+     805              :     : public integral_constant<bool, __is_standard_layout(_Tp)>
+     806              :     {
+     807              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+     808              :         "template argument must be a complete class or an unbounded array");
+     809              :     };
+     810              : 
+     811              :   /** is_pod
+     812              :    * @deprecated Deprecated in C++20.
+     813              :    * Use `is_standard_layout && is_trivial` instead.
+     814              :    */
+     815              :   // Could use is_standard_layout && is_trivial instead of the builtin.
+     816              :   template<typename _Tp>
+     817              :     struct
+     818              :     _GLIBCXX20_DEPRECATED_SUGGEST("is_standard_layout && is_trivial")
+     819              :     is_pod
+     820              :     : public integral_constant<bool, __is_pod(_Tp)>
+     821              :     {
+     822              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+     823              :         "template argument must be a complete class or an unbounded array");
+     824              :     };
+     825              : 
+     826              :   /** is_literal_type
+     827              :    * @deprecated Deprecated in C++17, removed in C++20.
+     828              :    * The idea of a literal type isn't useful.
+     829              :    */
+     830              :   template<typename _Tp>
+     831              :     struct
+     832              :     _GLIBCXX17_DEPRECATED
+     833              :     is_literal_type
+     834              :     : public integral_constant<bool, __is_literal_type(_Tp)>
+     835              :     {
+     836              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+     837              :         "template argument must be a complete class or an unbounded array");
+     838              :     };
+     839              : 
+     840              :   /// is_empty
+     841              :   template<typename _Tp>
+     842              :     struct is_empty
+     843              :     : public integral_constant<bool, __is_empty(_Tp)>
+     844              :     { };
+     845              : 
+     846              :   /// is_polymorphic
+     847              :   template<typename _Tp>
+     848              :     struct is_polymorphic
+     849              :     : public integral_constant<bool, __is_polymorphic(_Tp)>
+     850              :     { };
+     851              : 
+     852              : #if __cplusplus >= 201402L
+     853              : #define __cpp_lib_is_final 201402L
+     854              :   /// is_final
+     855              :   /// @since C++14
+     856              :   template<typename _Tp>
+     857              :     struct is_final
+     858              :     : public integral_constant<bool, __is_final(_Tp)>
+     859              :     { };
+     860              : #endif
+     861              : 
+     862              :   /// is_abstract
+     863              :   template<typename _Tp>
+     864              :     struct is_abstract
+     865              :     : public integral_constant<bool, __is_abstract(_Tp)>
+     866              :     { };
+     867              : 
+     868              :   /// @cond undocumented
+     869              :   template<typename _Tp,
+     870              :            bool = is_arithmetic<_Tp>::value>
+     871              :     struct __is_signed_helper
+     872              :     : public false_type { };
+     873              : 
+     874              :   template<typename _Tp>
+     875              :     struct __is_signed_helper<_Tp, true>
+     876              :     : public integral_constant<bool, _Tp(-1) < _Tp(0)>
+     877              :     { };
+     878              :   /// @endcond
+     879              : 
+     880              :   /// is_signed
+     881              :   template<typename _Tp>
+     882              :     struct is_signed
+     883              :     : public __is_signed_helper<_Tp>::type
+     884              :     { };
+     885              : 
+     886              :   /// is_unsigned
+     887              :   template<typename _Tp>
+     888              :     struct is_unsigned
+     889              :     : public __and_<is_arithmetic<_Tp>, __not_<is_signed<_Tp>>>::type
+     890              :     { };
+     891              : 
+     892              :   /// @cond undocumented
+     893              :   template<typename _Tp, typename _Up = _Tp&&>
+     894              :     _Up
+     895              :     __declval(int);
+     896              : 
+     897              :   template<typename _Tp>
+     898              :     _Tp
+     899              :     __declval(long);
+     900              :   /// @endcond
+     901              : 
+     902              :   template<typename _Tp>
+     903              :     auto declval() noexcept -> decltype(__declval<_Tp>(0));
+     904              : 
+     905              :   template<typename>
+     906              :     struct remove_all_extents;
+     907              : 
+     908              :   /// @cond undocumented
+     909              :   template<typename _Tp>
+     910              :     struct __is_array_known_bounds
+     911              :     : public false_type
+     912              :     { };
+     913              : 
+     914              :   template<typename _Tp, size_t _Size>
+     915              :     struct __is_array_known_bounds<_Tp[_Size]>
+     916              :     : public true_type
+     917              :     { };
+     918              : 
+     919              :   template<typename _Tp>
+     920              :     struct __is_array_unknown_bounds
+     921              :     : public false_type
+     922              :     { };
+     923              : 
+     924              :   template<typename _Tp>
+     925              :     struct __is_array_unknown_bounds<_Tp[]>
+     926              :     : public true_type
+     927              :     { };
+     928              : 
+     929              :   // Destructible and constructible type properties.
+     930              : 
+     931              :   // In N3290 is_destructible does not say anything about function
+     932              :   // types and abstract types, see LWG 2049. This implementation
+     933              :   // describes function types as non-destructible and all complete
+     934              :   // object types as destructible, iff the explicit destructor
+     935              :   // call expression is wellformed.
+     936              :   struct __do_is_destructible_impl
+     937              :   {
+     938              :     template<typename _Tp, typename = decltype(declval<_Tp&>().~_Tp())>
+     939              :       static true_type __test(int);
+     940              : 
+     941              :     template<typename>
+     942              :       static false_type __test(...);
+     943              :   };
+     944              : 
+     945              :   template<typename _Tp>
+     946              :     struct __is_destructible_impl
+     947              :     : public __do_is_destructible_impl
+     948              :     {
+     949              :       typedef decltype(__test<_Tp>(0)) type;
+     950              :     };
+     951              : 
+     952              :   template<typename _Tp,
+     953              :            bool = __or_<is_void<_Tp>,
+     954              :                         __is_array_unknown_bounds<_Tp>,
+     955              :                         is_function<_Tp>>::value,
+     956              :            bool = __or_<is_reference<_Tp>, is_scalar<_Tp>>::value>
+     957              :     struct __is_destructible_safe;
+     958              : 
+     959              :   template<typename _Tp>
+     960              :     struct __is_destructible_safe<_Tp, false, false>
+     961              :     : public __is_destructible_impl<typename
+     962              :                remove_all_extents<_Tp>::type>::type
+     963              :     { };
+     964              : 
+     965              :   template<typename _Tp>
+     966              :     struct __is_destructible_safe<_Tp, true, false>
+     967              :     : public false_type { };
+     968              : 
+     969              :   template<typename _Tp>
+     970              :     struct __is_destructible_safe<_Tp, false, true>
+     971              :     : public true_type { };
+     972              :   /// @endcond
+     973              : 
+     974              :   /// is_destructible
+     975              :   template<typename _Tp>
+     976              :     struct is_destructible
+     977              :     : public __is_destructible_safe<_Tp>::type
+     978              :     {
+     979              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+     980              :         "template argument must be a complete class or an unbounded array");
+     981              :     };
+     982              : 
+     983              :   /// @cond undocumented
+     984              : 
+     985              :   // is_nothrow_destructible requires that is_destructible is
+     986              :   // satisfied as well.  We realize that by mimicing the
+     987              :   // implementation of is_destructible but refer to noexcept(expr)
+     988              :   // instead of decltype(expr).
+     989              :   struct __do_is_nt_destructible_impl
+     990              :   {
+     991              :     template<typename _Tp>
+     992              :       static __bool_constant<noexcept(declval<_Tp&>().~_Tp())>
+     993              :       __test(int);
+     994              : 
+     995              :     template<typename>
+     996              :       static false_type __test(...);
+     997              :   };
+     998              : 
+     999              :   template<typename _Tp>
+    1000              :     struct __is_nt_destructible_impl
+    1001              :     : public __do_is_nt_destructible_impl
+    1002              :     {
+    1003              :       typedef decltype(__test<_Tp>(0)) type;
+    1004              :     };
+    1005              : 
+    1006              :   template<typename _Tp,
+    1007              :            bool = __or_<is_void<_Tp>,
+    1008              :                         __is_array_unknown_bounds<_Tp>,
+    1009              :                         is_function<_Tp>>::value,
+    1010              :            bool = __or_<is_reference<_Tp>, is_scalar<_Tp>>::value>
+    1011              :     struct __is_nt_destructible_safe;
+    1012              : 
+    1013              :   template<typename _Tp>
+    1014              :     struct __is_nt_destructible_safe<_Tp, false, false>
+    1015              :     : public __is_nt_destructible_impl<typename
+    1016              :                remove_all_extents<_Tp>::type>::type
+    1017              :     { };
+    1018              : 
+    1019              :   template<typename _Tp>
+    1020              :     struct __is_nt_destructible_safe<_Tp, true, false>
+    1021              :     : public false_type { };
+    1022              : 
+    1023              :   template<typename _Tp>
+    1024              :     struct __is_nt_destructible_safe<_Tp, false, true>
+    1025              :     : public true_type { };
+    1026              :   /// @endcond
+    1027              : 
+    1028              :   /// is_nothrow_destructible
+    1029              :   template<typename _Tp>
+    1030              :     struct is_nothrow_destructible
+    1031              :     : public __is_nt_destructible_safe<_Tp>::type
+    1032              :     {
+    1033              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1034              :         "template argument must be a complete class or an unbounded array");
+    1035              :     };
+    1036              : 
+    1037              :   /// @cond undocumented
+    1038              :   template<typename _Tp, typename... _Args>
+    1039              :     using __is_constructible_impl
+    1040              :       = __bool_constant<__is_constructible(_Tp, _Args...)>;
+    1041              :   /// @endcond
+    1042              : 
+    1043              :   /// is_constructible
+    1044              :   template<typename _Tp, typename... _Args>
+    1045              :     struct is_constructible
+    1046              :       : public __is_constructible_impl<_Tp, _Args...>
+    1047              :     {
+    1048              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1049              :         "template argument must be a complete class or an unbounded array");
+    1050              :     };
+    1051              : 
+    1052              :   /// is_default_constructible
+    1053              :   template<typename _Tp>
+    1054              :     struct is_default_constructible
+    1055              :     : public __is_constructible_impl<_Tp>
+    1056              :     {
+    1057              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1058              :         "template argument must be a complete class or an unbounded array");
+    1059              :     };
+    1060              : 
+    1061              :   /// @cond undocumented
+    1062              :   template<typename _Tp, typename = void>
+    1063              :     struct __add_lvalue_reference_helper
+    1064              :     { using type = _Tp; };
+    1065              : 
+    1066              :   template<typename _Tp>
+    1067              :     struct __add_lvalue_reference_helper<_Tp, __void_t<_Tp&>>
+    1068              :     { using type = _Tp&; };
+    1069              : 
+    1070              :   template<typename _Tp>
+    1071              :     using __add_lval_ref_t = typename __add_lvalue_reference_helper<_Tp>::type;
+    1072              :   /// @endcond
+    1073              : 
+    1074              :   /// is_copy_constructible
+    1075              :   template<typename _Tp>
+    1076              :     struct is_copy_constructible
+    1077              :     : public __is_constructible_impl<_Tp, __add_lval_ref_t<const _Tp>>
+    1078              :     {
+    1079              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1080              :         "template argument must be a complete class or an unbounded array");
+    1081              :     };
+    1082              : 
+    1083              :   /// @cond undocumented
+    1084              :   template<typename _Tp, typename = void>
+    1085              :     struct __add_rvalue_reference_helper
+    1086              :     { using type = _Tp; };
+    1087              : 
+    1088              :   template<typename _Tp>
+    1089              :     struct __add_rvalue_reference_helper<_Tp, __void_t<_Tp&&>>
+    1090              :     { using type = _Tp&&; };
+    1091              : 
+    1092              :   template<typename _Tp>
+    1093              :     using __add_rval_ref_t = typename __add_rvalue_reference_helper<_Tp>::type;
+    1094              :   /// @endcond
+    1095              : 
+    1096              :   /// is_move_constructible
+    1097              :   template<typename _Tp>
+    1098              :     struct is_move_constructible
+    1099              :     : public __is_constructible_impl<_Tp, __add_rval_ref_t<_Tp>>
+    1100              :     {
+    1101              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1102              :         "template argument must be a complete class or an unbounded array");
+    1103              :     };
+    1104              : 
+    1105              :   /// @cond undocumented
+    1106              :   template<typename _Tp, typename... _Args>
+    1107              :     using __is_nothrow_constructible_impl
+    1108              :       = __bool_constant<__is_nothrow_constructible(_Tp, _Args...)>;
+    1109              :   /// @endcond
+    1110              : 
+    1111              :   /// is_nothrow_constructible
+    1112              :   template<typename _Tp, typename... _Args>
+    1113              :     struct is_nothrow_constructible
+    1114              :     : public __is_nothrow_constructible_impl<_Tp, _Args...>
+    1115              :     {
+    1116              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1117              :         "template argument must be a complete class or an unbounded array");
+    1118              :     };
+    1119              : 
+    1120              :   /// is_nothrow_default_constructible
+    1121              :   template<typename _Tp>
+    1122              :     struct is_nothrow_default_constructible
+    1123              :     : public __is_nothrow_constructible_impl<_Tp>
+    1124              :     {
+    1125              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1126              :         "template argument must be a complete class or an unbounded array");
+    1127              :     };
+    1128              : 
+    1129              :   /// is_nothrow_copy_constructible
+    1130              :   template<typename _Tp>
+    1131              :     struct is_nothrow_copy_constructible
+    1132              :     : public __is_nothrow_constructible_impl<_Tp, __add_lval_ref_t<const _Tp>>
+    1133              :     {
+    1134              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1135              :         "template argument must be a complete class or an unbounded array");
+    1136              :     };
+    1137              : 
+    1138              :   /// is_nothrow_move_constructible
+    1139              :   template<typename _Tp>
+    1140              :     struct is_nothrow_move_constructible
+    1141              :     : public __is_nothrow_constructible_impl<_Tp, __add_rval_ref_t<_Tp>>
+    1142              :     {
+    1143              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1144              :         "template argument must be a complete class or an unbounded array");
+    1145              :     };
+    1146              : 
+    1147              :   /// @cond undocumented
+    1148              :   template<typename _Tp, typename _Up>
+    1149              :     using __is_assignable_impl = __bool_constant<__is_assignable(_Tp, _Up)>;
+    1150              :   /// @endcond
+    1151              : 
+    1152              :   /// is_assignable
+    1153              :   template<typename _Tp, typename _Up>
+    1154              :     struct is_assignable
+    1155              :     : public __is_assignable_impl<_Tp, _Up>
+    1156              :     {
+    1157              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1158              :         "template argument must be a complete class or an unbounded array");
+    1159              :     };
+    1160              : 
+    1161              :   /// is_copy_assignable
+    1162              :   template<typename _Tp>
+    1163              :     struct is_copy_assignable
+    1164              :     : public __is_assignable_impl<__add_lval_ref_t<_Tp>,
+    1165              :                                   __add_lval_ref_t<const _Tp>>
+    1166              :     {
+    1167              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1168              :         "template argument must be a complete class or an unbounded array");
+    1169              :     };
+    1170              : 
+    1171              :   /// is_move_assignable
+    1172              :   template<typename _Tp>
+    1173              :     struct is_move_assignable
+    1174              :     : public __is_assignable_impl<__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>>
+    1175              :     {
+    1176              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1177              :         "template argument must be a complete class or an unbounded array");
+    1178              :     };
+    1179              : 
+    1180              :   /// @cond undocumented
+    1181              :   template<typename _Tp, typename _Up>
+    1182              :     using __is_nothrow_assignable_impl
+    1183              :       = __bool_constant<__is_nothrow_assignable(_Tp, _Up)>;
+    1184              :   /// @endcond
+    1185              : 
+    1186              :   /// is_nothrow_assignable
+    1187              :   template<typename _Tp, typename _Up>
+    1188              :     struct is_nothrow_assignable
+    1189              :     : public __is_nothrow_assignable_impl<_Tp, _Up>
+    1190              :     {
+    1191              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1192              :         "template argument must be a complete class or an unbounded array");
+    1193              :     };
+    1194              : 
+    1195              :   /// is_nothrow_copy_assignable
+    1196              :   template<typename _Tp>
+    1197              :     struct is_nothrow_copy_assignable
+    1198              :     : public __is_nothrow_assignable_impl<__add_lval_ref_t<_Tp>,
+    1199              :                                           __add_lval_ref_t<const _Tp>>
+    1200              :     {
+    1201              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1202              :         "template argument must be a complete class or an unbounded array");
+    1203              :     };
+    1204              : 
+    1205              :   /// is_nothrow_move_assignable
+    1206              :   template<typename _Tp>
+    1207              :     struct is_nothrow_move_assignable
+    1208              :     : public __is_nothrow_assignable_impl<__add_lval_ref_t<_Tp>,
+    1209              :                                           __add_rval_ref_t<_Tp>>
+    1210              :     {
+    1211              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1212              :         "template argument must be a complete class or an unbounded array");
+    1213              :     };
+    1214              : 
+    1215              :   /// @cond undocumented
+    1216              :   template<typename _Tp, typename... _Args>
+    1217              :     using __is_trivially_constructible_impl
+    1218              :       = __bool_constant<__is_trivially_constructible(_Tp, _Args...)>;
+    1219              :   /// @endcond
+    1220              : 
+    1221              :   /// is_trivially_constructible
+    1222              :   template<typename _Tp, typename... _Args>
+    1223              :     struct is_trivially_constructible
+    1224              :     : public __is_trivially_constructible_impl<_Tp, _Args...>
+    1225              :     {
+    1226              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1227              :         "template argument must be a complete class or an unbounded array");
+    1228              :     };
+    1229              : 
+    1230              :   /// is_trivially_default_constructible
+    1231              :   template<typename _Tp>
+    1232              :     struct is_trivially_default_constructible
+    1233              :     : public __is_trivially_constructible_impl<_Tp>
+    1234              :     {
+    1235              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1236              :         "template argument must be a complete class or an unbounded array");
+    1237              :     };
+    1238              : 
+    1239              :   struct __do_is_implicitly_default_constructible_impl
+    1240              :   {
+    1241              :     template <typename _Tp>
+    1242              :     static void __helper(const _Tp&);
+    1243              : 
+    1244              :     template <typename _Tp>
+    1245              :     static true_type __test(const _Tp&,
+    1246              :                             decltype(__helper<const _Tp&>({}))* = 0);
+    1247              : 
+    1248              :     static false_type __test(...);
+    1249              :   };
+    1250              : 
+    1251              :   template<typename _Tp>
+    1252              :     struct __is_implicitly_default_constructible_impl
+    1253              :     : public __do_is_implicitly_default_constructible_impl
+    1254              :     {
+    1255              :       typedef decltype(__test(declval<_Tp>())) type;
+    1256              :     };
+    1257              : 
+    1258              :   template<typename _Tp>
+    1259              :     struct __is_implicitly_default_constructible_safe
+    1260              :     : public __is_implicitly_default_constructible_impl<_Tp>::type
+    1261              :     { };
+    1262              : 
+    1263              :   template <typename _Tp>
+    1264              :     struct __is_implicitly_default_constructible
+    1265              :     : public __and_<__is_constructible_impl<_Tp>,
+    1266              :                     __is_implicitly_default_constructible_safe<_Tp>>::type
+    1267              :     { };
+    1268              : 
+    1269              :   /// is_trivially_copy_constructible
+    1270              :   template<typename _Tp>
+    1271              :     struct is_trivially_copy_constructible
+    1272              :     : public __is_trivially_constructible_impl<_Tp, __add_lval_ref_t<const _Tp>>
+    1273              :     {
+    1274              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1275              :         "template argument must be a complete class or an unbounded array");
+    1276              :     };
+    1277              : 
+    1278              :   /// is_trivially_move_constructible
+    1279              :   template<typename _Tp>
+    1280              :     struct is_trivially_move_constructible
+    1281              :     : public __is_trivially_constructible_impl<_Tp, __add_rval_ref_t<_Tp>>
+    1282              :     {
+    1283              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1284              :         "template argument must be a complete class or an unbounded array");
+    1285              :     };
+    1286              : 
+    1287              :   /// @cond undocumented
+    1288              :   template<typename _Tp, typename _Up>
+    1289              :     using __is_trivially_assignable_impl
+    1290              :       = __bool_constant<__is_trivially_assignable(_Tp, _Up)>;
+    1291              :   /// @endcond
+    1292              : 
+    1293              :   /// is_trivially_assignable
+    1294              :   template<typename _Tp, typename _Up>
+    1295              :     struct is_trivially_assignable
+    1296              :     : public __is_trivially_assignable_impl<_Tp, _Up>
+    1297              :     {
+    1298              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1299              :         "template argument must be a complete class or an unbounded array");
+    1300              :     };
+    1301              : 
+    1302              :   /// is_trivially_copy_assignable
+    1303              :   template<typename _Tp>
+    1304              :     struct is_trivially_copy_assignable
+    1305              :     : public __is_trivially_assignable_impl<__add_lval_ref_t<_Tp>,
+    1306              :                                             __add_lval_ref_t<const _Tp>>
+    1307              :     {
+    1308              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1309              :         "template argument must be a complete class or an unbounded array");
+    1310              :     };
+    1311              : 
+    1312              :   /// is_trivially_move_assignable
+    1313              :   template<typename _Tp>
+    1314              :     struct is_trivially_move_assignable
+    1315              :     : public __is_trivially_assignable_impl<__add_lval_ref_t<_Tp>,
+    1316              :                                             __add_rval_ref_t<_Tp>>
+    1317              :     {
+    1318              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1319              :         "template argument must be a complete class or an unbounded array");
+    1320              :     };
+    1321              : 
+    1322              :   /// is_trivially_destructible
+    1323              :   template<typename _Tp>
+    1324              :     struct is_trivially_destructible
+    1325              :     : public __and_<__is_destructible_safe<_Tp>,
+    1326              :                     __bool_constant<__has_trivial_destructor(_Tp)>>::type
+    1327              :     {
+    1328              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1329              :         "template argument must be a complete class or an unbounded array");
+    1330              :     };
+    1331              : 
+    1332              : 
+    1333              :   /// has_virtual_destructor
+    1334              :   template<typename _Tp>
+    1335              :     struct has_virtual_destructor
+    1336              :     : public integral_constant<bool, __has_virtual_destructor(_Tp)>
+    1337              :     {
+    1338              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1339              :         "template argument must be a complete class or an unbounded array");
+    1340              :     };
+    1341              : 
+    1342              : 
+    1343              :   // type property queries.
+    1344              : 
+    1345              :   /// alignment_of
+    1346              :   template<typename _Tp>
+    1347              :     struct alignment_of
+    1348              :     : public integral_constant<std::size_t, alignof(_Tp)>
+    1349              :     {
+    1350              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    1351              :         "template argument must be a complete class or an unbounded array");
+    1352              :     };
+    1353              : 
+    1354              :   /// rank
+    1355              :   template<typename>
+    1356              :     struct rank
+    1357              :     : public integral_constant<std::size_t, 0> { };
+    1358              : 
+    1359              :   template<typename _Tp, std::size_t _Size>
+    1360              :     struct rank<_Tp[_Size]>
+    1361              :     : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
+    1362              : 
+    1363              :   template<typename _Tp>
+    1364              :     struct rank<_Tp[]>
+    1365              :     : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
+    1366              : 
+    1367              :   /// extent
+    1368              :   template<typename, unsigned _Uint = 0>
+    1369              :     struct extent
+    1370              :     : public integral_constant<size_t, 0> { };
+    1371              : 
+    1372              :   template<typename _Tp, size_t _Size>
+    1373              :     struct extent<_Tp[_Size], 0>
+    1374              :     : public integral_constant<size_t, _Size> { };
+    1375              : 
+    1376              :   template<typename _Tp, unsigned _Uint, size_t _Size>
+    1377              :     struct extent<_Tp[_Size], _Uint>
+    1378              :     : public extent<_Tp, _Uint - 1>::type { };
+    1379              : 
+    1380              :   template<typename _Tp>
+    1381              :     struct extent<_Tp[], 0>
+    1382              :     : public integral_constant<size_t, 0> { };
+    1383              : 
+    1384              :   template<typename _Tp, unsigned _Uint>
+    1385              :     struct extent<_Tp[], _Uint>
+    1386              :     : public extent<_Tp, _Uint - 1>::type { };
+    1387              : 
+    1388              : 
+    1389              :   // Type relations.
+    1390              : 
+    1391              :   /// is_same
+    1392              :   template<typename _Tp, typename _Up>
+    1393              :     struct is_same
+    1394              : #ifdef _GLIBCXX_HAVE_BUILTIN_IS_SAME
+    1395              :     : public integral_constant<bool, __is_same(_Tp, _Up)>
+    1396              : #else
+    1397              :     : public false_type
+    1398              : #endif
+    1399              :     { };
+    1400              : 
+    1401              : #ifndef _GLIBCXX_HAVE_BUILTIN_IS_SAME
+    1402              :   template<typename _Tp>
+    1403              :     struct is_same<_Tp, _Tp>
+    1404              :     : public true_type
+    1405              :     { };
+    1406              : #endif
+    1407              : 
+    1408              :   /// is_base_of
+    1409              :   template<typename _Base, typename _Derived>
+    1410              :     struct is_base_of
+    1411              :     : public integral_constant<bool, __is_base_of(_Base, _Derived)>
+    1412              :     { };
+    1413              : 
+    1414              : #if __has_builtin(__is_convertible)
+    1415              :   template<typename _From, typename _To>
+    1416              :     struct is_convertible
+    1417              :     : public __bool_constant<__is_convertible(_From, _To)>
+    1418              :     { };
+    1419              : #else
+    1420              :   template<typename _From, typename _To,
+    1421              :            bool = __or_<is_void<_From>, is_function<_To>,
+    1422              :                         is_array<_To>>::value>
+    1423              :     struct __is_convertible_helper
+    1424              :     {
+    1425              :       typedef typename is_void<_To>::type type;
+    1426              :     };
+    1427              : 
+    1428              : #pragma GCC diagnostic push
+    1429              : #pragma GCC diagnostic ignored "-Wctor-dtor-privacy"
+    1430              :   template<typename _From, typename _To>
+    1431              :     class __is_convertible_helper<_From, _To, false>
+    1432              :     {
+    1433              :       template<typename _To1>
+    1434              :         static void __test_aux(_To1) noexcept;
+    1435              : 
+    1436              :       template<typename _From1, typename _To1,
+    1437              :                typename = decltype(__test_aux<_To1>(std::declval<_From1>()))>
+    1438              :         static true_type
+    1439              :         __test(int);
+    1440              : 
+    1441              :       template<typename, typename>
+    1442              :         static false_type
+    1443              :         __test(...);
+    1444              : 
+    1445              :     public:
+    1446              :       typedef decltype(__test<_From, _To>(0)) type;
+    1447              :     };
+    1448              : #pragma GCC diagnostic pop
+    1449              : 
+    1450              :   /// is_convertible
+    1451              :   template<typename _From, typename _To>
+    1452              :     struct is_convertible
+    1453              :     : public __is_convertible_helper<_From, _To>::type
+    1454              :     { };
+    1455              : #endif
+    1456              : 
+    1457              :   // helper trait for unique_ptr<T[]>, shared_ptr<T[]>, and span<T, N>
+    1458              :   template<typename _ToElementType, typename _FromElementType>
+    1459              :     using __is_array_convertible
+    1460              :       = is_convertible<_FromElementType(*)[], _ToElementType(*)[]>;
+    1461              : 
+    1462              : #if __cplusplus >= 202002L
+    1463              : #define __cpp_lib_is_nothrow_convertible 201806L
+    1464              : 
+    1465              : #if __has_builtin(__is_nothrow_convertible)
+    1466              :   /// is_nothrow_convertible_v
+    1467              :   template<typename _From, typename _To>
+    1468              :     inline constexpr bool is_nothrow_convertible_v
+    1469              :       = __is_nothrow_convertible(_From, _To);
+    1470              : 
+    1471              :   /// is_nothrow_convertible
+    1472              :   template<typename _From, typename _To>
+    1473              :     struct is_nothrow_convertible
+    1474              :     : public bool_constant<is_nothrow_convertible_v<_From, _To>>
+    1475              :     { };
+    1476              : #else
+    1477              :   template<typename _From, typename _To,
+    1478              :            bool = __or_<is_void<_From>, is_function<_To>,
+    1479              :                         is_array<_To>>::value>
+    1480              :     struct __is_nt_convertible_helper
+    1481              :     : is_void<_To>
+    1482              :     { };
+    1483              : 
+    1484              : #pragma GCC diagnostic push
+    1485              : #pragma GCC diagnostic ignored "-Wctor-dtor-privacy"
+    1486              :   template<typename _From, typename _To>
+    1487              :     class __is_nt_convertible_helper<_From, _To, false>
+    1488              :     {
+    1489              :       template<typename _To1>
+    1490              :         static void __test_aux(_To1) noexcept;
+    1491              : 
+    1492              :       template<typename _From1, typename _To1>
+    1493              :         static
+    1494              :         __bool_constant<noexcept(__test_aux<_To1>(std::declval<_From1>()))>
+    1495              :         __test(int);
+    1496              : 
+    1497              :       template<typename, typename>
+    1498              :         static false_type
+    1499              :         __test(...);
+    1500              : 
+    1501              :     public:
+    1502              :       using type = decltype(__test<_From, _To>(0));
+    1503              :     };
+    1504              : #pragma GCC diagnostic pop
+    1505              : 
+    1506              :   /// is_nothrow_convertible
+    1507              :   template<typename _From, typename _To>
+    1508              :     struct is_nothrow_convertible
+    1509              :     : public __is_nt_convertible_helper<_From, _To>::type
+    1510              :     { };
+    1511              : 
+    1512              :   /// is_nothrow_convertible_v
+    1513              :   template<typename _From, typename _To>
+    1514              :     inline constexpr bool is_nothrow_convertible_v
+    1515              :       = is_nothrow_convertible<_From, _To>::value;
+    1516              : #endif
+    1517              : #endif // C++2a
+    1518              : 
+    1519              :   // Const-volatile modifications.
+    1520              : 
+    1521              :   /// remove_const
+    1522              :   template<typename _Tp>
+    1523              :     struct remove_const
+    1524              :     { typedef _Tp     type; };
+    1525              : 
+    1526              :   template<typename _Tp>
+    1527              :     struct remove_const<_Tp const>
+    1528              :     { typedef _Tp     type; };
+    1529              : 
+    1530              :   /// remove_volatile
+    1531              :   template<typename _Tp>
+    1532              :     struct remove_volatile
+    1533              :     { typedef _Tp     type; };
+    1534              : 
+    1535              :   template<typename _Tp>
+    1536              :     struct remove_volatile<_Tp volatile>
+    1537              :     { typedef _Tp     type; };
+    1538              : 
+    1539              :   /// remove_cv
+    1540              : #if __has_builtin(__remove_cv)
+    1541              :   template<typename _Tp>
+    1542              :     struct remove_cv
+    1543              :     { using type = __remove_cv(_Tp); };
+    1544              : #else
+    1545              :   template<typename _Tp>
+    1546              :     struct remove_cv
+    1547              :     { using type = _Tp; };
+    1548              : 
+    1549              :   template<typename _Tp>
+    1550              :     struct remove_cv<const _Tp>
+    1551              :     { using type = _Tp; };
+    1552              : 
+    1553              :   template<typename _Tp>
+    1554              :     struct remove_cv<volatile _Tp>
+    1555              :     { using type = _Tp; };
+    1556              : 
+    1557              :   template<typename _Tp>
+    1558              :     struct remove_cv<const volatile _Tp>
+    1559              :     { using type = _Tp; };
+    1560              : #endif
+    1561              : 
+    1562              :   /// add_const
+    1563              :   template<typename _Tp>
+    1564              :     struct add_const
+    1565              :     { using type = _Tp const; };
+    1566              : 
+    1567              :   /// add_volatile
+    1568              :   template<typename _Tp>
+    1569              :     struct add_volatile
+    1570              :     { using type = _Tp volatile; };
+    1571              : 
+    1572              :   /// add_cv
+    1573              :   template<typename _Tp>
+    1574              :     struct add_cv
+    1575              :     { using type = _Tp const volatile; };
+    1576              : 
+    1577              : #if __cplusplus > 201103L
+    1578              : 
+    1579              : #define __cpp_lib_transformation_trait_aliases 201304L
+    1580              : 
+    1581              :   /// Alias template for remove_const
+    1582              :   template<typename _Tp>
+    1583              :     using remove_const_t = typename remove_const<_Tp>::type;
+    1584              : 
+    1585              :   /// Alias template for remove_volatile
+    1586              :   template<typename _Tp>
+    1587              :     using remove_volatile_t = typename remove_volatile<_Tp>::type;
+    1588              : 
+    1589              :   /// Alias template for remove_cv
+    1590              :   template<typename _Tp>
+    1591              :     using remove_cv_t = typename remove_cv<_Tp>::type;
+    1592              : 
+    1593              :   /// Alias template for add_const
+    1594              :   template<typename _Tp>
+    1595              :     using add_const_t = typename add_const<_Tp>::type;
+    1596              : 
+    1597              :   /// Alias template for add_volatile
+    1598              :   template<typename _Tp>
+    1599              :     using add_volatile_t = typename add_volatile<_Tp>::type;
+    1600              : 
+    1601              :   /// Alias template for add_cv
+    1602              :   template<typename _Tp>
+    1603              :     using add_cv_t = typename add_cv<_Tp>::type;
+    1604              : #endif
+    1605              : 
+    1606              :   // Reference transformations.
+    1607              : 
+    1608              :   /// remove_reference
+    1609              : #if __has_builtin(__remove_reference)
+    1610              :   template<typename _Tp>
+    1611              :     struct remove_reference
+    1612              :     { using type = __remove_reference(_Tp); };
+    1613              : #else
+    1614              :   template<typename _Tp>
+    1615              :     struct remove_reference
+    1616              :     { using type = _Tp; };
+    1617              : 
+    1618              :   template<typename _Tp>
+    1619              :     struct remove_reference<_Tp&>
+    1620              :     { using type = _Tp; };
+    1621              : 
+    1622              :   template<typename _Tp>
+    1623              :     struct remove_reference<_Tp&&>
+    1624              :     { using type = _Tp; };
+    1625              : #endif
+    1626              : 
+    1627              :   /// add_lvalue_reference
+    1628              :   template<typename _Tp>
+    1629              :     struct add_lvalue_reference
+    1630              :     { using type = __add_lval_ref_t<_Tp>; };
+    1631              : 
+    1632              :   /// add_rvalue_reference
+    1633              :   template<typename _Tp>
+    1634              :     struct add_rvalue_reference
+    1635              :     { using type = __add_rval_ref_t<_Tp>; };
+    1636              : 
+    1637              : #if __cplusplus > 201103L
+    1638              :   /// Alias template for remove_reference
+    1639              :   template<typename _Tp>
+    1640              :     using remove_reference_t = typename remove_reference<_Tp>::type;
+    1641              : 
+    1642              :   /// Alias template for add_lvalue_reference
+    1643              :   template<typename _Tp>
+    1644              :     using add_lvalue_reference_t = typename add_lvalue_reference<_Tp>::type;
+    1645              : 
+    1646              :   /// Alias template for add_rvalue_reference
+    1647              :   template<typename _Tp>
+    1648              :     using add_rvalue_reference_t = typename add_rvalue_reference<_Tp>::type;
+    1649              : #endif
+    1650              : 
+    1651              :   // Sign modifications.
+    1652              : 
+    1653              :   /// @cond undocumented
+    1654              : 
+    1655              :   // Utility for constructing identically cv-qualified types.
+    1656              :   template<typename _Unqualified, bool _IsConst, bool _IsVol>
+    1657              :     struct __cv_selector;
+    1658              : 
+    1659              :   template<typename _Unqualified>
+    1660              :     struct __cv_selector<_Unqualified, false, false>
+    1661              :     { typedef _Unqualified __type; };
+    1662              : 
+    1663              :   template<typename _Unqualified>
+    1664              :     struct __cv_selector<_Unqualified, false, true>
+    1665              :     { typedef volatile _Unqualified __type; };
+    1666              : 
+    1667              :   template<typename _Unqualified>
+    1668              :     struct __cv_selector<_Unqualified, true, false>
+    1669              :     { typedef const _Unqualified __type; };
+    1670              : 
+    1671              :   template<typename _Unqualified>
+    1672              :     struct __cv_selector<_Unqualified, true, true>
+    1673              :     { typedef const volatile _Unqualified __type; };
+    1674              : 
+    1675              :   template<typename _Qualified, typename _Unqualified,
+    1676              :            bool _IsConst = is_const<_Qualified>::value,
+    1677              :            bool _IsVol = is_volatile<_Qualified>::value>
+    1678              :     class __match_cv_qualifiers
+    1679              :     {
+    1680              :       typedef __cv_selector<_Unqualified, _IsConst, _IsVol> __match;
+    1681              : 
+    1682              :     public:
+    1683              :       typedef typename __match::__type __type;
+    1684              :     };
+    1685              : 
+    1686              :   // Utility for finding the unsigned versions of signed integral types.
+    1687              :   template<typename _Tp>
+    1688              :     struct __make_unsigned
+    1689              :     { typedef _Tp __type; };
+    1690              : 
+    1691              :   template<>
+    1692              :     struct __make_unsigned<char>
+    1693              :     { typedef unsigned char __type; };
+    1694              : 
+    1695              :   template<>
+    1696              :     struct __make_unsigned<signed char>
+    1697              :     { typedef unsigned char __type; };
+    1698              : 
+    1699              :   template<>
+    1700              :     struct __make_unsigned<short>
+    1701              :     { typedef unsigned short __type; };
+    1702              : 
+    1703              :   template<>
+    1704              :     struct __make_unsigned<int>
+    1705              :     { typedef unsigned int __type; };
+    1706              : 
+    1707              :   template<>
+    1708              :     struct __make_unsigned<long>
+    1709              :     { typedef unsigned long __type; };
+    1710              : 
+    1711              :   template<>
+    1712              :     struct __make_unsigned<long long>
+    1713              :     { typedef unsigned long long __type; };
+    1714              : 
+    1715              : #if defined(__GLIBCXX_TYPE_INT_N_0)
+    1716              :   __extension__
+    1717              :   template<>
+    1718              :     struct __make_unsigned<__GLIBCXX_TYPE_INT_N_0>
+    1719              :     { typedef unsigned __GLIBCXX_TYPE_INT_N_0 __type; };
+    1720              : #endif
+    1721              : #if defined(__GLIBCXX_TYPE_INT_N_1)
+    1722              :   __extension__
+    1723              :   template<>
+    1724              :     struct __make_unsigned<__GLIBCXX_TYPE_INT_N_1>
+    1725              :     { typedef unsigned __GLIBCXX_TYPE_INT_N_1 __type; };
+    1726              : #endif
+    1727              : #if defined(__GLIBCXX_TYPE_INT_N_2)
+    1728              :   __extension__
+    1729              :   template<>
+    1730              :     struct __make_unsigned<__GLIBCXX_TYPE_INT_N_2>
+    1731              :     { typedef unsigned __GLIBCXX_TYPE_INT_N_2 __type; };
+    1732              : #endif
+    1733              : #if defined(__GLIBCXX_TYPE_INT_N_3)
+    1734              :   __extension__
+    1735              :   template<>
+    1736              :     struct __make_unsigned<__GLIBCXX_TYPE_INT_N_3>
+    1737              :     { typedef unsigned __GLIBCXX_TYPE_INT_N_3 __type; };
+    1738              : #endif
+    1739              : 
+    1740              :   // Select between integral and enum: not possible to be both.
+    1741              :   template<typename _Tp,
+    1742              :            bool _IsInt = is_integral<_Tp>::value,
+    1743              :            bool _IsEnum = is_enum<_Tp>::value>
+    1744              :     class __make_unsigned_selector;
+    1745              : 
+    1746              :   template<typename _Tp>
+    1747              :     class __make_unsigned_selector<_Tp, true, false>
+    1748              :     {
+    1749              :       using __unsigned_type
+    1750              :         = typename __make_unsigned<__remove_cv_t<_Tp>>::__type;
+    1751              : 
+    1752              :     public:
+    1753              :       using __type
+    1754              :         = typename __match_cv_qualifiers<_Tp, __unsigned_type>::__type;
+    1755              :     };
+    1756              : 
+    1757              :   class __make_unsigned_selector_base
+    1758              :   {
+    1759              :   protected:
+    1760              :     template<typename...> struct _List { };
+    1761              : 
+    1762              :     template<typename _Tp, typename... _Up>
+    1763              :       struct _List<_Tp, _Up...> : _List<_Up...>
+    1764              :       { static constexpr size_t __size = sizeof(_Tp); };
+    1765              : 
+    1766              :     template<size_t _Sz, typename _Tp, bool = (_Sz <= _Tp::__size)>
+    1767              :       struct __select;
+    1768              : 
+    1769              :     template<size_t _Sz, typename _Uint, typename... _UInts>
+    1770              :       struct __select<_Sz, _List<_Uint, _UInts...>, true>
+    1771              :       { using __type = _Uint; };
+    1772              : 
+    1773              :     template<size_t _Sz, typename _Uint, typename... _UInts>
+    1774              :       struct __select<_Sz, _List<_Uint, _UInts...>, false>
+    1775              :       : __select<_Sz, _List<_UInts...>>
+    1776              :       { };
+    1777              :   };
+    1778              : 
+    1779              :   // Choose unsigned integer type with the smallest rank and same size as _Tp
+    1780              :   template<typename _Tp>
+    1781              :     class __make_unsigned_selector<_Tp, false, true>
+    1782              :     : __make_unsigned_selector_base
+    1783              :     {
+    1784              :       // With -fshort-enums, an enum may be as small as a char.
+    1785              :       using _UInts = _List<unsigned char, unsigned short, unsigned int,
+    1786              :                            unsigned long, unsigned long long>;
+    1787              : 
+    1788              :       using __unsigned_type = typename __select<sizeof(_Tp), _UInts>::__type;
+    1789              : 
+    1790              :     public:
+    1791              :       using __type
+    1792              :         = typename __match_cv_qualifiers<_Tp, __unsigned_type>::__type;
+    1793              :     };
+    1794              : 
+    1795              :   // wchar_t, char8_t, char16_t and char32_t are integral types but are
+    1796              :   // neither signed integer types nor unsigned integer types, so must be
+    1797              :   // transformed to the unsigned integer type with the smallest rank.
+    1798              :   // Use the partial specialization for enumeration types to do that.
+    1799              :   template<>
+    1800              :     struct __make_unsigned<wchar_t>
+    1801              :     {
+    1802              :       using __type
+    1803              :         = typename __make_unsigned_selector<wchar_t, false, true>::__type;
+    1804              :     };
+    1805              : 
+    1806              : #ifdef _GLIBCXX_USE_CHAR8_T
+    1807              :   template<>
+    1808              :     struct __make_unsigned<char8_t>
+    1809              :     {
+    1810              :       using __type
+    1811              :         = typename __make_unsigned_selector<char8_t, false, true>::__type;
+    1812              :     };
+    1813              : #endif
+    1814              : 
+    1815              :   template<>
+    1816              :     struct __make_unsigned<char16_t>
+    1817              :     {
+    1818              :       using __type
+    1819              :         = typename __make_unsigned_selector<char16_t, false, true>::__type;
+    1820              :     };
+    1821              : 
+    1822              :   template<>
+    1823              :     struct __make_unsigned<char32_t>
+    1824              :     {
+    1825              :       using __type
+    1826              :         = typename __make_unsigned_selector<char32_t, false, true>::__type;
+    1827              :     };
+    1828              :   /// @endcond
+    1829              : 
+    1830              :   // Given an integral/enum type, return the corresponding unsigned
+    1831              :   // integer type.
+    1832              :   // Primary template.
+    1833              :   /// make_unsigned
+    1834              :   template<typename _Tp>
+    1835              :     struct make_unsigned
+    1836              :     { typedef typename __make_unsigned_selector<_Tp>::__type type; };
+    1837              : 
+    1838              :   // Integral, but don't define.
+    1839              :   template<> struct make_unsigned<bool>;
+    1840              :   template<> struct make_unsigned<bool const>;
+    1841              :   template<> struct make_unsigned<bool volatile>;
+    1842              :   template<> struct make_unsigned<bool const volatile>;
+    1843              : 
+    1844              :   /// @cond undocumented
+    1845              : 
+    1846              :   // Utility for finding the signed versions of unsigned integral types.
+    1847              :   template<typename _Tp>
+    1848              :     struct __make_signed
+    1849              :     { typedef _Tp __type; };
+    1850              : 
+    1851              :   template<>
+    1852              :     struct __make_signed<char>
+    1853              :     { typedef signed char __type; };
+    1854              : 
+    1855              :   template<>
+    1856              :     struct __make_signed<unsigned char>
+    1857              :     { typedef signed char __type; };
+    1858              : 
+    1859              :   template<>
+    1860              :     struct __make_signed<unsigned short>
+    1861              :     { typedef signed short __type; };
+    1862              : 
+    1863              :   template<>
+    1864              :     struct __make_signed<unsigned int>
+    1865              :     { typedef signed int __type; };
+    1866              : 
+    1867              :   template<>
+    1868              :     struct __make_signed<unsigned long>
+    1869              :     { typedef signed long __type; };
+    1870              : 
+    1871              :   template<>
+    1872              :     struct __make_signed<unsigned long long>
+    1873              :     { typedef signed long long __type; };
+    1874              : 
+    1875              : #if defined(__GLIBCXX_TYPE_INT_N_0)
+    1876              :   __extension__
+    1877              :   template<>
+    1878              :     struct __make_signed<unsigned __GLIBCXX_TYPE_INT_N_0>
+    1879              :     { typedef __GLIBCXX_TYPE_INT_N_0 __type; };
+    1880              : #endif
+    1881              : #if defined(__GLIBCXX_TYPE_INT_N_1)
+    1882              :   __extension__
+    1883              :   template<>
+    1884              :     struct __make_signed<unsigned __GLIBCXX_TYPE_INT_N_1>
+    1885              :     { typedef __GLIBCXX_TYPE_INT_N_1 __type; };
+    1886              : #endif
+    1887              : #if defined(__GLIBCXX_TYPE_INT_N_2)
+    1888              :   __extension__
+    1889              :   template<>
+    1890              :     struct __make_signed<unsigned __GLIBCXX_TYPE_INT_N_2>
+    1891              :     { typedef __GLIBCXX_TYPE_INT_N_2 __type; };
+    1892              : #endif
+    1893              : #if defined(__GLIBCXX_TYPE_INT_N_3)
+    1894              :   __extension__
+    1895              :   template<>
+    1896              :     struct __make_signed<unsigned __GLIBCXX_TYPE_INT_N_3>
+    1897              :     { typedef __GLIBCXX_TYPE_INT_N_3 __type; };
+    1898              : #endif
+    1899              : 
+    1900              :   // Select between integral and enum: not possible to be both.
+    1901              :   template<typename _Tp,
+    1902              :            bool _IsInt = is_integral<_Tp>::value,
+    1903              :            bool _IsEnum = is_enum<_Tp>::value>
+    1904              :     class __make_signed_selector;
+    1905              : 
+    1906              :   template<typename _Tp>
+    1907              :     class __make_signed_selector<_Tp, true, false>
+    1908              :     {
+    1909              :       using __signed_type
+    1910              :         = typename __make_signed<__remove_cv_t<_Tp>>::__type;
+    1911              : 
+    1912              :     public:
+    1913              :       using __type
+    1914              :         = typename __match_cv_qualifiers<_Tp, __signed_type>::__type;
+    1915              :     };
+    1916              : 
+    1917              :   // Choose signed integer type with the smallest rank and same size as _Tp
+    1918              :   template<typename _Tp>
+    1919              :     class __make_signed_selector<_Tp, false, true>
+    1920              :     {
+    1921              :       typedef typename __make_unsigned_selector<_Tp>::__type __unsigned_type;
+    1922              : 
+    1923              :     public:
+    1924              :       typedef typename __make_signed_selector<__unsigned_type>::__type __type;
+    1925              :     };
+    1926              : 
+    1927              :   // wchar_t, char16_t and char32_t are integral types but are neither
+    1928              :   // signed integer types nor unsigned integer types, so must be
+    1929              :   // transformed to the signed integer type with the smallest rank.
+    1930              :   // Use the partial specialization for enumeration types to do that.
+    1931              :   template<>
+    1932              :     struct __make_signed<wchar_t>
+    1933              :     {
+    1934              :       using __type
+    1935              :         = typename __make_signed_selector<wchar_t, false, true>::__type;
+    1936              :     };
+    1937              : 
+    1938              : #if defined(_GLIBCXX_USE_CHAR8_T)
+    1939              :   template<>
+    1940              :     struct __make_signed<char8_t>
+    1941              :     {
+    1942              :       using __type
+    1943              :         = typename __make_signed_selector<char8_t, false, true>::__type;
+    1944              :     };
+    1945              : #endif
+    1946              : 
+    1947              :   template<>
+    1948              :     struct __make_signed<char16_t>
+    1949              :     {
+    1950              :       using __type
+    1951              :         = typename __make_signed_selector<char16_t, false, true>::__type;
+    1952              :     };
+    1953              : 
+    1954              :   template<>
+    1955              :     struct __make_signed<char32_t>
+    1956              :     {
+    1957              :       using __type
+    1958              :         = typename __make_signed_selector<char32_t, false, true>::__type;
+    1959              :     };
+    1960              :   /// @endcond
+    1961              : 
+    1962              :   // Given an integral/enum type, return the corresponding signed
+    1963              :   // integer type.
+    1964              :   // Primary template.
+    1965              :   /// make_signed
+    1966              :   template<typename _Tp>
+    1967              :     struct make_signed
+    1968              :     { typedef typename __make_signed_selector<_Tp>::__type type; };
+    1969              : 
+    1970              :   // Integral, but don't define.
+    1971              :   template<> struct make_signed<bool>;
+    1972              :   template<> struct make_signed<bool const>;
+    1973              :   template<> struct make_signed<bool volatile>;
+    1974              :   template<> struct make_signed<bool const volatile>;
+    1975              : 
+    1976              : #if __cplusplus > 201103L
+    1977              :   /// Alias template for make_signed
+    1978              :   template<typename _Tp>
+    1979              :     using make_signed_t = typename make_signed<_Tp>::type;
+    1980              : 
+    1981              :   /// Alias template for make_unsigned
+    1982              :   template<typename _Tp>
+    1983              :     using make_unsigned_t = typename make_unsigned<_Tp>::type;
+    1984              : #endif
+    1985              : 
+    1986              :   // Array modifications.
+    1987              : 
+    1988              :   /// remove_extent
+    1989              :   template<typename _Tp>
+    1990              :     struct remove_extent
+    1991              :     { typedef _Tp     type; };
+    1992              : 
+    1993              :   template<typename _Tp, std::size_t _Size>
+    1994              :     struct remove_extent<_Tp[_Size]>
+    1995              :     { typedef _Tp     type; };
+    1996              : 
+    1997              :   template<typename _Tp>
+    1998              :     struct remove_extent<_Tp[]>
+    1999              :     { typedef _Tp     type; };
+    2000              : 
+    2001              :   /// remove_all_extents
+    2002              :   template<typename _Tp>
+    2003              :     struct remove_all_extents
+    2004              :     { typedef _Tp     type; };
+    2005              : 
+    2006              :   template<typename _Tp, std::size_t _Size>
+    2007              :     struct remove_all_extents<_Tp[_Size]>
+    2008              :     { typedef typename remove_all_extents<_Tp>::type     type; };
+    2009              : 
+    2010              :   template<typename _Tp>
+    2011              :     struct remove_all_extents<_Tp[]>
+    2012              :     { typedef typename remove_all_extents<_Tp>::type     type; };
+    2013              : 
+    2014              : #if __cplusplus > 201103L
+    2015              :   /// Alias template for remove_extent
+    2016              :   template<typename _Tp>
+    2017              :     using remove_extent_t = typename remove_extent<_Tp>::type;
+    2018              : 
+    2019              :   /// Alias template for remove_all_extents
+    2020              :   template<typename _Tp>
+    2021              :     using remove_all_extents_t = typename remove_all_extents<_Tp>::type;
+    2022              : #endif
+    2023              : 
+    2024              :   // Pointer modifications.
+    2025              : 
+    2026              :   template<typename _Tp, typename>
+    2027              :     struct __remove_pointer_helper
+    2028              :     { typedef _Tp     type; };
+    2029              : 
+    2030              :   template<typename _Tp, typename _Up>
+    2031              :     struct __remove_pointer_helper<_Tp, _Up*>
+    2032              :     { typedef _Up     type; };
+    2033              : 
+    2034              :   /// remove_pointer
+    2035              :   template<typename _Tp>
+    2036              :     struct remove_pointer
+    2037              :     : public __remove_pointer_helper<_Tp, __remove_cv_t<_Tp>>
+    2038              :     { };
+    2039              : 
+    2040              :   template<typename _Tp, typename = void>
+    2041              :     struct __add_pointer_helper
+    2042              :     { using type = _Tp; };
+    2043              : 
+    2044              :   template<typename _Tp>
+    2045              :     struct __add_pointer_helper<_Tp, __void_t<_Tp*>>
+    2046              :     { using type = _Tp*; };
+    2047              : 
+    2048              :   /// add_pointer
+    2049              :   template<typename _Tp>
+    2050              :     struct add_pointer
+    2051              :     : public __add_pointer_helper<_Tp>
+    2052              :     { };
+    2053              : 
+    2054              :   template<typename _Tp>
+    2055              :     struct add_pointer<_Tp&>
+    2056              :     { using type = _Tp*; };
+    2057              : 
+    2058              :   template<typename _Tp>
+    2059              :     struct add_pointer<_Tp&&>
+    2060              :     { using type = _Tp*; };
+    2061              : 
+    2062              : #if __cplusplus > 201103L
+    2063              :   /// Alias template for remove_pointer
+    2064              :   template<typename _Tp>
+    2065              :     using remove_pointer_t = typename remove_pointer<_Tp>::type;
+    2066              : 
+    2067              :   /// Alias template for add_pointer
+    2068              :   template<typename _Tp>
+    2069              :     using add_pointer_t = typename add_pointer<_Tp>::type;
+    2070              : #endif
+    2071              : 
+    2072              :   template<std::size_t _Len>
+    2073              :     struct __aligned_storage_msa
+    2074              :     {
+    2075              :       union __type
+    2076              :       {
+    2077              :         unsigned char __data[_Len];
+    2078              :         struct __attribute__((__aligned__)) { } __align;
+    2079              :       };
+    2080              :     };
+    2081              : 
+    2082              :   /**
+    2083              :    *  @brief Alignment type.
+    2084              :    *
+    2085              :    *  The value of _Align is a default-alignment which shall be the
+    2086              :    *  most stringent alignment requirement for any C++ object type
+    2087              :    *  whose size is no greater than _Len (3.9). The member typedef
+    2088              :    *  type shall be a POD type suitable for use as uninitialized
+    2089              :    *  storage for any object whose size is at most _Len and whose
+    2090              :    *  alignment is a divisor of _Align.
+    2091              :    *
+    2092              :    *  @deprecated Deprecated in C++23. Uses can be replaced by an
+    2093              :    *  array std::byte[_Len] declared with alignas(_Align).
+    2094              :   */
+    2095              :   template<std::size_t _Len, std::size_t _Align =
+    2096              :            __alignof__(typename __aligned_storage_msa<_Len>::__type)>
+    2097              :     struct
+    2098              :     _GLIBCXX23_DEPRECATED
+    2099              :     aligned_storage
+    2100              :     {
+    2101              :       union type
+    2102              :       {
+    2103              :         unsigned char __data[_Len];
+    2104              :         struct __attribute__((__aligned__((_Align)))) { } __align;
+    2105              :       };
+    2106              :     };
+    2107              : 
+    2108              :   template <typename... _Types>
+    2109              :     struct __strictest_alignment
+    2110              :     {
+    2111              :       static const size_t _S_alignment = 0;
+    2112              :       static const size_t _S_size = 0;
+    2113              :     };
+    2114              : 
+    2115              :   template <typename _Tp, typename... _Types>
+    2116              :     struct __strictest_alignment<_Tp, _Types...>
+    2117              :     {
+    2118              :       static const size_t _S_alignment =
+    2119              :         alignof(_Tp) > __strictest_alignment<_Types...>::_S_alignment
+    2120              :         ? alignof(_Tp) : __strictest_alignment<_Types...>::_S_alignment;
+    2121              :       static const size_t _S_size =
+    2122              :         sizeof(_Tp) > __strictest_alignment<_Types...>::_S_size
+    2123              :         ? sizeof(_Tp) : __strictest_alignment<_Types...>::_S_size;
+    2124              :     };
+    2125              : 
+    2126              : #pragma GCC diagnostic push
+    2127              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+    2128              : 
+    2129              :   /**
+    2130              :    *  @brief Provide aligned storage for types.
+    2131              :    *
+    2132              :    *  [meta.trans.other]
+    2133              :    *
+    2134              :    *  Provides aligned storage for any of the provided types of at
+    2135              :    *  least size _Len.
+    2136              :    *
+    2137              :    *  @see aligned_storage
+    2138              :    *
+    2139              :    *  @deprecated Deprecated in C++23.
+    2140              :    */
+    2141              :   template <size_t _Len, typename... _Types>
+    2142              :     struct
+    2143              :     _GLIBCXX23_DEPRECATED
+    2144              :     aligned_union
+    2145              :     {
+    2146              :     private:
+    2147              :       static_assert(sizeof...(_Types) != 0, "At least one type is required");
+    2148              : 
+    2149              :       using __strictest = __strictest_alignment<_Types...>;
+    2150              :       static const size_t _S_len = _Len > __strictest::_S_size
+    2151              :         ? _Len : __strictest::_S_size;
+    2152              :     public:
+    2153              :       /// The value of the strictest alignment of _Types.
+    2154              :       static const size_t alignment_value = __strictest::_S_alignment;
+    2155              :       /// The storage.
+    2156              :       typedef typename aligned_storage<_S_len, alignment_value>::type type;
+    2157              :     };
+    2158              : 
+    2159              :   template <size_t _Len, typename... _Types>
+    2160              :     const size_t aligned_union<_Len, _Types...>::alignment_value;
+    2161              : #pragma GCC diagnostic pop
+    2162              : 
+    2163              :   /// @cond undocumented
+    2164              : 
+    2165              :   // Decay trait for arrays and functions, used for perfect forwarding
+    2166              :   // in make_pair, make_tuple, etc.
+    2167              :   template<typename _Up>
+    2168              :     struct __decay_selector
+    2169              :     : __conditional_t<is_const<const _Up>::value, // false for functions
+    2170              :                       remove_cv<_Up>,               // N.B. DR 705.
+    2171              :                       add_pointer<_Up>>                  // function decays to pointer
+    2172              :     { };
+    2173              : 
+    2174              :   template<typename _Up, size_t _Nm>
+    2175              :     struct __decay_selector<_Up[_Nm]>
+    2176              :     { using type = _Up*; };
+    2177              : 
+    2178              :   template<typename _Up>
+    2179              :     struct __decay_selector<_Up[]>
+    2180              :     { using type = _Up*; };
+    2181              : 
+    2182              :   /// @endcond
+    2183              : 
+    2184              :   /// decay
+    2185              :   template<typename _Tp>
+    2186              :     struct decay
+    2187              :     { using type = typename __decay_selector<_Tp>::type; };
+    2188              : 
+    2189              :   template<typename _Tp>
+    2190              :     struct decay<_Tp&>
+    2191              :     { using type = typename __decay_selector<_Tp>::type; };
+    2192              : 
+    2193              :   template<typename _Tp>
+    2194              :     struct decay<_Tp&&>
+    2195              :     { using type = typename __decay_selector<_Tp>::type; };
+    2196              : 
+    2197              :   /// @cond undocumented
+    2198              : 
+    2199              :   // Helper which adds a reference to a type when given a reference_wrapper
+    2200              :   template<typename _Tp>
+    2201              :     struct __strip_reference_wrapper
+    2202              :     {
+    2203              :       typedef _Tp __type;
+    2204              :     };
+    2205              : 
+    2206              :   template<typename _Tp>
+    2207              :     struct __strip_reference_wrapper<reference_wrapper<_Tp> >
+    2208              :     {
+    2209              :       typedef _Tp& __type;
+    2210              :     };
+    2211              : 
+    2212              :   // __decay_t (std::decay_t for C++11).
+    2213              :   template<typename _Tp>
+    2214              :     using __decay_t = typename decay<_Tp>::type;
+    2215              : 
+    2216              :   template<typename _Tp>
+    2217              :     using __decay_and_strip = __strip_reference_wrapper<__decay_t<_Tp>>;
+    2218              :   /// @endcond
+    2219              : 
+    2220              :   /// @cond undocumented
+    2221              : 
+    2222              :   // Helper for SFINAE constraints
+    2223              :   template<typename... _Cond>
+    2224              :     using _Require = __enable_if_t<__and_<_Cond...>::value>;
+    2225              : 
+    2226              :   // __remove_cvref_t (std::remove_cvref_t for C++11).
+    2227              :   template<typename _Tp>
+    2228              :     using __remove_cvref_t
+    2229              :      = typename remove_cv<typename remove_reference<_Tp>::type>::type;
+    2230              :   /// @endcond
+    2231              : 
+    2232              :   // Primary template.
+    2233              :   /// Define a member typedef @c type to one of two argument types.
+    2234              :   template<bool _Cond, typename _Iftrue, typename _Iffalse>
+    2235              :     struct conditional
+    2236              :     { typedef _Iftrue type; };
+    2237              : 
+    2238              :   // Partial specialization for false.
+    2239              :   template<typename _Iftrue, typename _Iffalse>
+    2240              :     struct conditional<false, _Iftrue, _Iffalse>
+    2241              :     { typedef _Iffalse type; };
+    2242              : 
+    2243              :   /// common_type
+    2244              :   template<typename... _Tp>
+    2245              :     struct common_type;
+    2246              : 
+    2247              :   // Sfinae-friendly common_type implementation:
+    2248              : 
+    2249              :   /// @cond undocumented
+    2250              : 
+    2251              :   // For several sfinae-friendly trait implementations we transport both the
+    2252              :   // result information (as the member type) and the failure information (no
+    2253              :   // member type). This is very similar to std::enable_if, but we cannot use
+    2254              :   // that, because we need to derive from them as an implementation detail.
+    2255              : 
+    2256              :   template<typename _Tp>
+    2257              :     struct __success_type
+    2258              :     { typedef _Tp type; };
+    2259              : 
+    2260              :   struct __failure_type
+    2261              :   { };
+    2262              : 
+    2263              :   struct __do_common_type_impl
+    2264              :   {
+    2265              :     template<typename _Tp, typename _Up>
+    2266              :       using __cond_t
+    2267              :         = decltype(true ? std::declval<_Tp>() : std::declval<_Up>());
+    2268              : 
+    2269              :     // if decay_t<decltype(false ? declval<D1>() : declval<D2>())>
+    2270              :     // denotes a valid type, let C denote that type.
+    2271              :     template<typename _Tp, typename _Up>
+    2272              :       static __success_type<__decay_t<__cond_t<_Tp, _Up>>>
+    2273              :       _S_test(int);
+    2274              : 
+    2275              : #if __cplusplus > 201703L
+    2276              :     // Otherwise, if COND-RES(CREF(D1), CREF(D2)) denotes a type,
+    2277              :     // let C denote the type decay_t<COND-RES(CREF(D1), CREF(D2))>.
+    2278              :     template<typename _Tp, typename _Up>
+    2279              :       static __success_type<__remove_cvref_t<__cond_t<const _Tp&, const _Up&>>>
+    2280              :       _S_test_2(int);
+    2281              : #endif
+    2282              : 
+    2283              :     template<typename, typename>
+    2284              :       static __failure_type
+    2285              :       _S_test_2(...);
+    2286              : 
+    2287              :     template<typename _Tp, typename _Up>
+    2288              :       static decltype(_S_test_2<_Tp, _Up>(0))
+    2289              :       _S_test(...);
+    2290              :   };
+    2291              : 
+    2292              :   // If sizeof...(T) is zero, there shall be no member type.
+    2293              :   template<>
+    2294              :     struct common_type<>
+    2295              :     { };
+    2296              : 
+    2297              :   // If sizeof...(T) is one, the same type, if any, as common_type_t<T0, T0>.
+    2298              :   template<typename _Tp0>
+    2299              :     struct common_type<_Tp0>
+    2300              :     : public common_type<_Tp0, _Tp0>
+    2301              :     { };
+    2302              : 
+    2303              :   // If sizeof...(T) is two, ...
+    2304              :   template<typename _Tp1, typename _Tp2,
+    2305              :            typename _Dp1 = __decay_t<_Tp1>, typename _Dp2 = __decay_t<_Tp2>>
+    2306              :     struct __common_type_impl
+    2307              :     {
+    2308              :       // If is_same_v<T1, D1> is false or is_same_v<T2, D2> is false,
+    2309              :       // let C denote the same type, if any, as common_type_t<D1, D2>.
+    2310              :       using type = common_type<_Dp1, _Dp2>;
+    2311              :     };
+    2312              : 
+    2313              :   template<typename _Tp1, typename _Tp2>
+    2314              :     struct __common_type_impl<_Tp1, _Tp2, _Tp1, _Tp2>
+    2315              :     : private __do_common_type_impl
+    2316              :     {
+    2317              :       // Otherwise, if decay_t<decltype(false ? declval<D1>() : declval<D2>())>
+    2318              :       // denotes a valid type, let C denote that type.
+    2319              :       using type = decltype(_S_test<_Tp1, _Tp2>(0));
+    2320              :     };
+    2321              : 
+    2322              :   // If sizeof...(T) is two, ...
+    2323              :   template<typename _Tp1, typename _Tp2>
+    2324              :     struct common_type<_Tp1, _Tp2>
+    2325              :     : public __common_type_impl<_Tp1, _Tp2>::type
+    2326              :     { };
+    2327              : 
+    2328              :   template<typename...>
+    2329              :     struct __common_type_pack
+    2330              :     { };
+    2331              : 
+    2332              :   template<typename, typename, typename = void>
+    2333              :     struct __common_type_fold;
+    2334              : 
+    2335              :   // If sizeof...(T) is greater than two, ...
+    2336              :   template<typename _Tp1, typename _Tp2, typename... _Rp>
+    2337              :     struct common_type<_Tp1, _Tp2, _Rp...>
+    2338              :     : public __common_type_fold<common_type<_Tp1, _Tp2>,
+    2339              :                                 __common_type_pack<_Rp...>>
+    2340              :     { };
+    2341              : 
+    2342              :   // Let C denote the same type, if any, as common_type_t<T1, T2>.
+    2343              :   // If there is such a type C, type shall denote the same type, if any,
+    2344              :   // as common_type_t<C, R...>.
+    2345              :   template<typename _CTp, typename... _Rp>
+    2346              :     struct __common_type_fold<_CTp, __common_type_pack<_Rp...>,
+    2347              :                               __void_t<typename _CTp::type>>
+    2348              :     : public common_type<typename _CTp::type, _Rp...>
+    2349              :     { };
+    2350              : 
+    2351              :   // Otherwise, there shall be no member type.
+    2352              :   template<typename _CTp, typename _Rp>
+    2353              :     struct __common_type_fold<_CTp, _Rp, void>
+    2354              :     { };
+    2355              : 
+    2356              :   template<typename _Tp, bool = is_enum<_Tp>::value>
+    2357              :     struct __underlying_type_impl
+    2358              :     {
+    2359              :       using type = __underlying_type(_Tp);
+    2360              :     };
+    2361              : 
+    2362              :   template<typename _Tp>
+    2363              :     struct __underlying_type_impl<_Tp, false>
+    2364              :     { };
+    2365              :   /// @endcond
+    2366              : 
+    2367              :   /// The underlying type of an enum.
+    2368              :   template<typename _Tp>
+    2369              :     struct underlying_type
+    2370              :     : public __underlying_type_impl<_Tp>
+    2371              :     { };
+    2372              : 
+    2373              :   /// @cond undocumented
+    2374              :   template<typename _Tp>
+    2375              :     struct __declval_protector
+    2376              :     {
+    2377              :       static const bool __stop = false;
+    2378              :     };
+    2379              :   /// @endcond
+    2380              : 
+    2381              :   /** Utility to simplify expressions used in unevaluated operands
+    2382              :    *  @since C++11
+    2383              :    *  @ingroup utilities
+    2384              :    */
+    2385              :   template<typename _Tp>
+    2386              :     auto declval() noexcept -> decltype(__declval<_Tp>(0))
+    2387              :     {
+    2388              :       static_assert(__declval_protector<_Tp>::__stop,
+    2389              :                     "declval() must not be used!");
+    2390              :       return __declval<_Tp>(0);
+    2391              :     }
+    2392              : 
+    2393              :   /// result_of
+    2394              :   template<typename _Signature>
+    2395              :     struct result_of;
+    2396              : 
+    2397              :   // Sfinae-friendly result_of implementation:
+    2398              : 
+    2399              : #define __cpp_lib_result_of_sfinae 201210L
+    2400              : 
+    2401              :   /// @cond undocumented
+    2402              :   struct __invoke_memfun_ref { };
+    2403              :   struct __invoke_memfun_deref { };
+    2404              :   struct __invoke_memobj_ref { };
+    2405              :   struct __invoke_memobj_deref { };
+    2406              :   struct __invoke_other { };
+    2407              : 
+    2408              :   // Associate a tag type with a specialization of __success_type.
+    2409              :   template<typename _Tp, typename _Tag>
+    2410              :     struct __result_of_success : __success_type<_Tp>
+    2411              :     { using __invoke_type = _Tag; };
+    2412              : 
+    2413              :   // [func.require] paragraph 1 bullet 1:
+    2414              :   struct __result_of_memfun_ref_impl
+    2415              :   {
+    2416              :     template<typename _Fp, typename _Tp1, typename... _Args>
+    2417              :       static __result_of_success<decltype(
+    2418              :       (std::declval<_Tp1>().*std::declval<_Fp>())(std::declval<_Args>()...)
+    2419              :       ), __invoke_memfun_ref> _S_test(int);
+    2420              : 
+    2421              :     template<typename...>
+    2422              :       static __failure_type _S_test(...);
+    2423              :   };
+    2424              : 
+    2425              :   template<typename _MemPtr, typename _Arg, typename... _Args>
+    2426              :     struct __result_of_memfun_ref
+    2427              :     : private __result_of_memfun_ref_impl
+    2428              :     {
+    2429              :       typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type;
+    2430              :     };
+    2431              : 
+    2432              :   // [func.require] paragraph 1 bullet 2:
+    2433              :   struct __result_of_memfun_deref_impl
+    2434              :   {
+    2435              :     template<typename _Fp, typename _Tp1, typename... _Args>
+    2436              :       static __result_of_success<decltype(
+    2437              :       ((*std::declval<_Tp1>()).*std::declval<_Fp>())(std::declval<_Args>()...)
+    2438              :       ), __invoke_memfun_deref> _S_test(int);
+    2439              : 
+    2440              :     template<typename...>
+    2441              :       static __failure_type _S_test(...);
+    2442              :   };
+    2443              : 
+    2444              :   template<typename _MemPtr, typename _Arg, typename... _Args>
+    2445              :     struct __result_of_memfun_deref
+    2446              :     : private __result_of_memfun_deref_impl
+    2447              :     {
+    2448              :       typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type;
+    2449              :     };
+    2450              : 
+    2451              :   // [func.require] paragraph 1 bullet 3:
+    2452              :   struct __result_of_memobj_ref_impl
+    2453              :   {
+    2454              :     template<typename _Fp, typename _Tp1>
+    2455              :       static __result_of_success<decltype(
+    2456              :       std::declval<_Tp1>().*std::declval<_Fp>()
+    2457              :       ), __invoke_memobj_ref> _S_test(int);
+    2458              : 
+    2459              :     template<typename, typename>
+    2460              :       static __failure_type _S_test(...);
+    2461              :   };
+    2462              : 
+    2463              :   template<typename _MemPtr, typename _Arg>
+    2464              :     struct __result_of_memobj_ref
+    2465              :     : private __result_of_memobj_ref_impl
+    2466              :     {
+    2467              :       typedef decltype(_S_test<_MemPtr, _Arg>(0)) type;
+    2468              :     };
+    2469              : 
+    2470              :   // [func.require] paragraph 1 bullet 4:
+    2471              :   struct __result_of_memobj_deref_impl
+    2472              :   {
+    2473              :     template<typename _Fp, typename _Tp1>
+    2474              :       static __result_of_success<decltype(
+    2475              :       (*std::declval<_Tp1>()).*std::declval<_Fp>()
+    2476              :       ), __invoke_memobj_deref> _S_test(int);
+    2477              : 
+    2478              :     template<typename, typename>
+    2479              :       static __failure_type _S_test(...);
+    2480              :   };
+    2481              : 
+    2482              :   template<typename _MemPtr, typename _Arg>
+    2483              :     struct __result_of_memobj_deref
+    2484              :     : private __result_of_memobj_deref_impl
+    2485              :     {
+    2486              :       typedef decltype(_S_test<_MemPtr, _Arg>(0)) type;
+    2487              :     };
+    2488              : 
+    2489              :   template<typename _MemPtr, typename _Arg>
+    2490              :     struct __result_of_memobj;
+    2491              : 
+    2492              :   template<typename _Res, typename _Class, typename _Arg>
+    2493              :     struct __result_of_memobj<_Res _Class::*, _Arg>
+    2494              :     {
+    2495              :       typedef __remove_cvref_t<_Arg> _Argval;
+    2496              :       typedef _Res _Class::* _MemPtr;
+    2497              :       typedef typename __conditional_t<__or_<is_same<_Argval, _Class>,
+    2498              :         is_base_of<_Class, _Argval>>::value,
+    2499              :         __result_of_memobj_ref<_MemPtr, _Arg>,
+    2500              :         __result_of_memobj_deref<_MemPtr, _Arg>
+    2501              :       >::type type;
+    2502              :     };
+    2503              : 
+    2504              :   template<typename _MemPtr, typename _Arg, typename... _Args>
+    2505              :     struct __result_of_memfun;
+    2506              : 
+    2507              :   template<typename _Res, typename _Class, typename _Arg, typename... _Args>
+    2508              :     struct __result_of_memfun<_Res _Class::*, _Arg, _Args...>
+    2509              :     {
+    2510              :       typedef typename remove_reference<_Arg>::type _Argval;
+    2511              :       typedef _Res _Class::* _MemPtr;
+    2512              :       typedef typename __conditional_t<is_base_of<_Class, _Argval>::value,
+    2513              :         __result_of_memfun_ref<_MemPtr, _Arg, _Args...>,
+    2514              :         __result_of_memfun_deref<_MemPtr, _Arg, _Args...>
+    2515              :       >::type type;
+    2516              :     };
+    2517              : 
+    2518              :   // _GLIBCXX_RESOLVE_LIB_DEFECTS
+    2519              :   // 2219.  INVOKE-ing a pointer to member with a reference_wrapper
+    2520              :   //        as the object expression
+    2521              : 
+    2522              :   // Used by result_of, invoke etc. to unwrap a reference_wrapper.
+    2523              :   template<typename _Tp, typename _Up = __remove_cvref_t<_Tp>>
+    2524              :     struct __inv_unwrap
+    2525              :     {
+    2526              :       using type = _Tp;
+    2527              :     };
+    2528              : 
+    2529              :   template<typename _Tp, typename _Up>
+    2530              :     struct __inv_unwrap<_Tp, reference_wrapper<_Up>>
+    2531              :     {
+    2532              :       using type = _Up&;
+    2533              :     };
+    2534              : 
+    2535              :   template<bool, bool, typename _Functor, typename... _ArgTypes>
+    2536              :     struct __result_of_impl
+    2537              :     {
+    2538              :       typedef __failure_type type;
+    2539              :     };
+    2540              : 
+    2541              :   template<typename _MemPtr, typename _Arg>
+    2542              :     struct __result_of_impl<true, false, _MemPtr, _Arg>
+    2543              :     : public __result_of_memobj<__decay_t<_MemPtr>,
+    2544              :                                 typename __inv_unwrap<_Arg>::type>
+    2545              :     { };
+    2546              : 
+    2547              :   template<typename _MemPtr, typename _Arg, typename... _Args>
+    2548              :     struct __result_of_impl<false, true, _MemPtr, _Arg, _Args...>
+    2549              :     : public __result_of_memfun<__decay_t<_MemPtr>,
+    2550              :                                 typename __inv_unwrap<_Arg>::type, _Args...>
+    2551              :     { };
+    2552              : 
+    2553              :   // [func.require] paragraph 1 bullet 5:
+    2554              :   struct __result_of_other_impl
+    2555              :   {
+    2556              :     template<typename _Fn, typename... _Args>
+    2557              :       static __result_of_success<decltype(
+    2558              :       std::declval<_Fn>()(std::declval<_Args>()...)
+    2559              :       ), __invoke_other> _S_test(int);
+    2560              : 
+    2561              :     template<typename...>
+    2562              :       static __failure_type _S_test(...);
+    2563              :   };
+    2564              : 
+    2565              :   template<typename _Functor, typename... _ArgTypes>
+    2566              :     struct __result_of_impl<false, false, _Functor, _ArgTypes...>
+    2567              :     : private __result_of_other_impl
+    2568              :     {
+    2569              :       typedef decltype(_S_test<_Functor, _ArgTypes...>(0)) type;
+    2570              :     };
+    2571              : 
+    2572              :   // __invoke_result (std::invoke_result for C++11)
+    2573              :   template<typename _Functor, typename... _ArgTypes>
+    2574              :     struct __invoke_result
+    2575              :     : public __result_of_impl<
+    2576              :         is_member_object_pointer<
+    2577              :           typename remove_reference<_Functor>::type
+    2578              :         >::value,
+    2579              :         is_member_function_pointer<
+    2580              :           typename remove_reference<_Functor>::type
+    2581              :         >::value,
+    2582              :         _Functor, _ArgTypes...
+    2583              :       >::type
+    2584              :     { };
+    2585              :   /// @endcond
+    2586              : 
+    2587              :   template<typename _Functor, typename... _ArgTypes>
+    2588              :     struct result_of<_Functor(_ArgTypes...)>
+    2589              :     : public __invoke_result<_Functor, _ArgTypes...>
+    2590              :     { } _GLIBCXX17_DEPRECATED_SUGGEST("std::invoke_result");
+    2591              : 
+    2592              : #if __cplusplus >= 201402L
+    2593              : #pragma GCC diagnostic push
+    2594              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+    2595              :   /// Alias template for aligned_storage
+    2596              :   template<size_t _Len, size_t _Align =
+    2597              :             __alignof__(typename __aligned_storage_msa<_Len>::__type)>
+    2598              :     using aligned_storage_t _GLIBCXX23_DEPRECATED = typename aligned_storage<_Len, _Align>::type;
+    2599              : 
+    2600              :   template <size_t _Len, typename... _Types>
+    2601              :     using aligned_union_t _GLIBCXX23_DEPRECATED = typename aligned_union<_Len, _Types...>::type;
+    2602              : #pragma GCC diagnostic pop
+    2603              : 
+    2604              :   /// Alias template for decay
+    2605              :   template<typename _Tp>
+    2606              :     using decay_t = typename decay<_Tp>::type;
+    2607              : 
+    2608              :   /// Alias template for enable_if
+    2609              :   template<bool _Cond, typename _Tp = void>
+    2610              :     using enable_if_t = typename enable_if<_Cond, _Tp>::type;
+    2611              : 
+    2612              :   /// Alias template for conditional
+    2613              :   template<bool _Cond, typename _Iftrue, typename _Iffalse>
+    2614              :     using conditional_t = typename conditional<_Cond, _Iftrue, _Iffalse>::type;
+    2615              : 
+    2616              :   /// Alias template for common_type
+    2617              :   template<typename... _Tp>
+    2618              :     using common_type_t = typename common_type<_Tp...>::type;
+    2619              : 
+    2620              :   /// Alias template for underlying_type
+    2621              :   template<typename _Tp>
+    2622              :     using underlying_type_t = typename underlying_type<_Tp>::type;
+    2623              : 
+    2624              :   /// Alias template for result_of
+    2625              :   template<typename _Tp>
+    2626              :     using result_of_t = typename result_of<_Tp>::type;
+    2627              : #endif // C++14
+    2628              : 
+    2629              : #if __cplusplus >= 201703L || !defined(__STRICT_ANSI__) // c++17 or gnu++11
+    2630              : #define __cpp_lib_void_t 201411L
+    2631              :   /// A metafunction that always yields void, used for detecting valid types.
+    2632              :   template<typename...> using void_t = void;
+    2633              : #endif
+    2634              : 
+    2635              :   /// @cond undocumented
+    2636              : 
+    2637              :   // Detection idiom.
+    2638              :   // Detect whether _Op<_Args...> is a valid type, use default _Def if not.
+    2639              : 
+    2640              : #if __cpp_concepts
+    2641              :   // Implementation of the detection idiom (negative case).
+    2642              :   template<typename _Def, template<typename...> class _Op, typename... _Args>
+    2643              :     struct __detected_or
+    2644              :     {
+    2645              :       using type = _Def;
+    2646              :       using __is_detected = false_type;
+    2647              :     };
+    2648              : 
+    2649              :   // Implementation of the detection idiom (positive case).
+    2650              :   template<typename _Def, template<typename...> class _Op, typename... _Args>
+    2651              :     requires requires { typename _Op<_Args...>; }
+    2652              :     struct __detected_or<_Def, _Op, _Args...>
+    2653              :     {
+    2654              :       using type = _Op<_Args...>;
+    2655              :       using __is_detected = true_type;
+    2656              :     };
+    2657              : #else
+    2658              :   /// Implementation of the detection idiom (negative case).
+    2659              :   template<typename _Default, typename _AlwaysVoid,
+    2660              :            template<typename...> class _Op, typename... _Args>
+    2661              :     struct __detector
+    2662              :     {
+    2663              :       using type = _Default;
+    2664              :       using __is_detected = false_type;
+    2665              :     };
+    2666              : 
+    2667              :   /// Implementation of the detection idiom (positive case).
+    2668              :   template<typename _Default, template<typename...> class _Op,
+    2669              :             typename... _Args>
+    2670              :     struct __detector<_Default, __void_t<_Op<_Args...>>, _Op, _Args...>
+    2671              :     {
+    2672              :       using type = _Op<_Args...>;
+    2673              :       using __is_detected = true_type;
+    2674              :     };
+    2675              : 
+    2676              :   template<typename _Default, template<typename...> class _Op,
+    2677              :            typename... _Args>
+    2678              :     using __detected_or = __detector<_Default, void, _Op, _Args...>;
+    2679              : #endif // __cpp_concepts
+    2680              : 
+    2681              :   // _Op<_Args...> if that is a valid type, otherwise _Default.
+    2682              :   template<typename _Default, template<typename...> class _Op,
+    2683              :            typename... _Args>
+    2684              :     using __detected_or_t
+    2685              :       = typename __detected_or<_Default, _Op, _Args...>::type;
+    2686              : 
+    2687              :   /**
+    2688              :    *  Use SFINAE to determine if the type _Tp has a publicly-accessible
+    2689              :    *  member type _NTYPE.
+    2690              :    */
+    2691              : #define _GLIBCXX_HAS_NESTED_TYPE(_NTYPE)                                \
+    2692              :   template<typename _Tp, typename = __void_t<>>                             \
+    2693              :     struct __has_##_NTYPE                                               \
+    2694              :     : false_type                                                        \
+    2695              :     { };                                                                \
+    2696              :   template<typename _Tp>                                          \
+    2697              :     struct __has_##_NTYPE<_Tp, __void_t<typename _Tp::_NTYPE>>              \
+    2698              :     : true_type                                                         \
+    2699              :     { };
+    2700              : 
+    2701              :   template <typename _Tp>
+    2702              :     struct __is_swappable;
+    2703              : 
+    2704              :   template <typename _Tp>
+    2705              :     struct __is_nothrow_swappable;
+    2706              : 
+    2707              :   template<typename>
+    2708              :     struct __is_tuple_like_impl : false_type
+    2709              :     { };
+    2710              : 
+    2711              :   // Internal type trait that allows us to sfinae-protect tuple_cat.
+    2712              :   template<typename _Tp>
+    2713              :     struct __is_tuple_like
+    2714              :     : public __is_tuple_like_impl<__remove_cvref_t<_Tp>>::type
+    2715              :     { };
+    2716              :   /// @endcond
+    2717              : 
+    2718              :   template<typename _Tp>
+    2719              :     _GLIBCXX20_CONSTEXPR
+    2720              :     inline
+    2721              :     _Require<__not_<__is_tuple_like<_Tp>>,
+    2722              :              is_move_constructible<_Tp>,
+    2723              :              is_move_assignable<_Tp>>
+    2724              :     swap(_Tp&, _Tp&)
+    2725              :     noexcept(__and_<is_nothrow_move_constructible<_Tp>,
+    2726              :                     is_nothrow_move_assignable<_Tp>>::value);
+    2727              : 
+    2728              :   template<typename _Tp, size_t _Nm>
+    2729              :     _GLIBCXX20_CONSTEXPR
+    2730              :     inline
+    2731              :     __enable_if_t<__is_swappable<_Tp>::value>
+    2732              :     swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
+    2733              :     noexcept(__is_nothrow_swappable<_Tp>::value);
+    2734              : 
+    2735              :   /// @cond undocumented
+    2736              :   namespace __swappable_details {
+    2737              :     using std::swap;
+    2738              : 
+    2739              :     struct __do_is_swappable_impl
+    2740              :     {
+    2741              :       template<typename _Tp, typename
+    2742              :                = decltype(swap(std::declval<_Tp&>(), std::declval<_Tp&>()))>
+    2743              :         static true_type __test(int);
+    2744              : 
+    2745              :       template<typename>
+    2746              :         static false_type __test(...);
+    2747              :     };
+    2748              : 
+    2749              :     struct __do_is_nothrow_swappable_impl
+    2750              :     {
+    2751              :       template<typename _Tp>
+    2752              :         static __bool_constant<
+    2753              :           noexcept(swap(std::declval<_Tp&>(), std::declval<_Tp&>()))
+    2754              :         > __test(int);
+    2755              : 
+    2756              :       template<typename>
+    2757              :         static false_type __test(...);
+    2758              :     };
+    2759              : 
+    2760              :   } // namespace __swappable_details
+    2761              : 
+    2762              :   template<typename _Tp>
+    2763              :     struct __is_swappable_impl
+    2764              :     : public __swappable_details::__do_is_swappable_impl
+    2765              :     {
+    2766              :       typedef decltype(__test<_Tp>(0)) type;
+    2767              :     };
+    2768              : 
+    2769              :   template<typename _Tp>
+    2770              :     struct __is_nothrow_swappable_impl
+    2771              :     : public __swappable_details::__do_is_nothrow_swappable_impl
+    2772              :     {
+    2773              :       typedef decltype(__test<_Tp>(0)) type;
+    2774              :     };
+    2775              : 
+    2776              :   template<typename _Tp>
+    2777              :     struct __is_swappable
+    2778              :     : public __is_swappable_impl<_Tp>::type
+    2779              :     { };
+    2780              : 
+    2781              :   template<typename _Tp>
+    2782              :     struct __is_nothrow_swappable
+    2783              :     : public __is_nothrow_swappable_impl<_Tp>::type
+    2784              :     { };
+    2785              :   /// @endcond
+    2786              : 
+    2787              : #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11
+    2788              : #define __cpp_lib_is_swappable 201603L
+    2789              :   /// Metafunctions used for detecting swappable types: p0185r1
+    2790              : 
+    2791              :   /// is_swappable
+    2792              :   template<typename _Tp>
+    2793              :     struct is_swappable
+    2794              :     : public __is_swappable_impl<_Tp>::type
+    2795              :     {
+    2796              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    2797              :         "template argument must be a complete class or an unbounded array");
+    2798              :     };
+    2799              : 
+    2800              :   /// is_nothrow_swappable
+    2801              :   template<typename _Tp>
+    2802              :     struct is_nothrow_swappable
+    2803              :     : public __is_nothrow_swappable_impl<_Tp>::type
+    2804              :     {
+    2805              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    2806              :         "template argument must be a complete class or an unbounded array");
+    2807              :     };
+    2808              : 
+    2809              : #if __cplusplus >= 201402L
+    2810              :   /// is_swappable_v
+    2811              :   template<typename _Tp>
+    2812              :     _GLIBCXX17_INLINE constexpr bool is_swappable_v =
+    2813              :       is_swappable<_Tp>::value;
+    2814              : 
+    2815              :   /// is_nothrow_swappable_v
+    2816              :   template<typename _Tp>
+    2817              :     _GLIBCXX17_INLINE constexpr bool is_nothrow_swappable_v =
+    2818              :       is_nothrow_swappable<_Tp>::value;
+    2819              : #endif // __cplusplus >= 201402L
+    2820              : 
+    2821              :   /// @cond undocumented
+    2822              :   namespace __swappable_with_details {
+    2823              :     using std::swap;
+    2824              : 
+    2825              :     struct __do_is_swappable_with_impl
+    2826              :     {
+    2827              :       template<typename _Tp, typename _Up, typename
+    2828              :                = decltype(swap(std::declval<_Tp>(), std::declval<_Up>())),
+    2829              :                typename
+    2830              :                = decltype(swap(std::declval<_Up>(), std::declval<_Tp>()))>
+    2831              :         static true_type __test(int);
+    2832              : 
+    2833              :       template<typename, typename>
+    2834              :         static false_type __test(...);
+    2835              :     };
+    2836              : 
+    2837              :     struct __do_is_nothrow_swappable_with_impl
+    2838              :     {
+    2839              :       template<typename _Tp, typename _Up>
+    2840              :         static __bool_constant<
+    2841              :           noexcept(swap(std::declval<_Tp>(), std::declval<_Up>()))
+    2842              :           &&
+    2843              :           noexcept(swap(std::declval<_Up>(), std::declval<_Tp>()))
+    2844              :         > __test(int);
+    2845              : 
+    2846              :       template<typename, typename>
+    2847              :         static false_type __test(...);
+    2848              :     };
+    2849              : 
+    2850              :   } // namespace __swappable_with_details
+    2851              : 
+    2852              :   template<typename _Tp, typename _Up>
+    2853              :     struct __is_swappable_with_impl
+    2854              :     : public __swappable_with_details::__do_is_swappable_with_impl
+    2855              :     {
+    2856              :       typedef decltype(__test<_Tp, _Up>(0)) type;
+    2857              :     };
+    2858              : 
+    2859              :   // Optimization for the homogenous lvalue case, not required:
+    2860              :   template<typename _Tp>
+    2861              :     struct __is_swappable_with_impl<_Tp&, _Tp&>
+    2862              :     : public __swappable_details::__do_is_swappable_impl
+    2863              :     {
+    2864              :       typedef decltype(__test<_Tp&>(0)) type;
+    2865              :     };
+    2866              : 
+    2867              :   template<typename _Tp, typename _Up>
+    2868              :     struct __is_nothrow_swappable_with_impl
+    2869              :     : public __swappable_with_details::__do_is_nothrow_swappable_with_impl
+    2870              :     {
+    2871              :       typedef decltype(__test<_Tp, _Up>(0)) type;
+    2872              :     };
+    2873              : 
+    2874              :   // Optimization for the homogenous lvalue case, not required:
+    2875              :   template<typename _Tp>
+    2876              :     struct __is_nothrow_swappable_with_impl<_Tp&, _Tp&>
+    2877              :     : public __swappable_details::__do_is_nothrow_swappable_impl
+    2878              :     {
+    2879              :       typedef decltype(__test<_Tp&>(0)) type;
+    2880              :     };
+    2881              :   /// @endcond
+    2882              : 
+    2883              :   /// is_swappable_with
+    2884              :   template<typename _Tp, typename _Up>
+    2885              :     struct is_swappable_with
+    2886              :     : public __is_swappable_with_impl<_Tp, _Up>::type
+    2887              :     {
+    2888              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    2889              :         "first template argument must be a complete class or an unbounded array");
+    2890              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Up>{}),
+    2891              :         "second template argument must be a complete class or an unbounded array");
+    2892              :     };
+    2893              : 
+    2894              :   /// is_nothrow_swappable_with
+    2895              :   template<typename _Tp, typename _Up>
+    2896              :     struct is_nothrow_swappable_with
+    2897              :     : public __is_nothrow_swappable_with_impl<_Tp, _Up>::type
+    2898              :     {
+    2899              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    2900              :         "first template argument must be a complete class or an unbounded array");
+    2901              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Up>{}),
+    2902              :         "second template argument must be a complete class or an unbounded array");
+    2903              :     };
+    2904              : 
+    2905              : #if __cplusplus >= 201402L
+    2906              :   /// is_swappable_with_v
+    2907              :   template<typename _Tp, typename _Up>
+    2908              :     _GLIBCXX17_INLINE constexpr bool is_swappable_with_v =
+    2909              :       is_swappable_with<_Tp, _Up>::value;
+    2910              : 
+    2911              :   /// is_nothrow_swappable_with_v
+    2912              :   template<typename _Tp, typename _Up>
+    2913              :     _GLIBCXX17_INLINE constexpr bool is_nothrow_swappable_with_v =
+    2914              :       is_nothrow_swappable_with<_Tp, _Up>::value;
+    2915              : #endif // __cplusplus >= 201402L
+    2916              : 
+    2917              : #endif// c++1z or gnu++11
+    2918              : 
+    2919              :   /// @cond undocumented
+    2920              : 
+    2921              :   // __is_invocable (std::is_invocable for C++11)
+    2922              : 
+    2923              :   // The primary template is used for invalid INVOKE expressions.
+    2924              :   template<typename _Result, typename _Ret,
+    2925              :            bool = is_void<_Ret>::value, typename = void>
+    2926              :     struct __is_invocable_impl
+    2927              :     : false_type
+    2928              :     {
+    2929              :       using __nothrow_conv = false_type; // For is_nothrow_invocable_r
+    2930              :     };
+    2931              : 
+    2932              :   // Used for valid INVOKE and INVOKE<void> expressions.
+    2933              :   template<typename _Result, typename _Ret>
+    2934              :     struct __is_invocable_impl<_Result, _Ret,
+    2935              :                                /* is_void<_Ret> = */ true,
+    2936              :                                __void_t<typename _Result::type>>
+    2937              :     : true_type
+    2938              :     {
+    2939              :       using __nothrow_conv = true_type; // For is_nothrow_invocable_r
+    2940              :     };
+    2941              : 
+    2942              : #pragma GCC diagnostic push
+    2943              : #pragma GCC diagnostic ignored "-Wctor-dtor-privacy"
+    2944              :   // Used for INVOKE<R> expressions to check the implicit conversion to R.
+    2945              :   template<typename _Result, typename _Ret>
+    2946              :     struct __is_invocable_impl<_Result, _Ret,
+    2947              :                                /* is_void<_Ret> = */ false,
+    2948              :                                __void_t<typename _Result::type>>
+    2949              :     {
+    2950              :     private:
+    2951              :       // The type of the INVOKE expression.
+    2952              :       using _Res_t = typename _Result::type;
+    2953              : 
+    2954              :       // Unlike declval, this doesn't add_rvalue_reference, so it respects
+    2955              :       // guaranteed copy elision.
+    2956              :       static _Res_t _S_get() noexcept;
+    2957              : 
+    2958              :       // Used to check if _Res_t can implicitly convert to _Tp.
+    2959              :       template<typename _Tp>
+    2960              :         static void _S_conv(__type_identity_t<_Tp>) noexcept;
+    2961              : 
+    2962              :       // This overload is viable if INVOKE(f, args...) can convert to _Tp.
+    2963              :       template<typename _Tp,
+    2964              :                bool _Nothrow = noexcept(_S_conv<_Tp>(_S_get())),
+    2965              :                typename = decltype(_S_conv<_Tp>(_S_get())),
+    2966              : #if __has_builtin(__reference_converts_from_temporary)
+    2967              :                bool _Dangle = __reference_converts_from_temporary(_Tp, _Res_t)
+    2968              : #else
+    2969              :                bool _Dangle = false
+    2970              : #endif
+    2971              :               >
+    2972              :         static __bool_constant<_Nothrow && !_Dangle>
+    2973              :         _S_test(int);
+    2974              : 
+    2975              :       template<typename _Tp, bool = false>
+    2976              :         static false_type
+    2977              :         _S_test(...);
+    2978              : 
+    2979              :     public:
+    2980              :       // For is_invocable_r
+    2981              :       using type = decltype(_S_test<_Ret, /* Nothrow = */ true>(1));
+    2982              : 
+    2983              :       // For is_nothrow_invocable_r
+    2984              :       using __nothrow_conv = decltype(_S_test<_Ret>(1));
+    2985              :     };
+    2986              : #pragma GCC diagnostic pop
+    2987              : 
+    2988              :   template<typename _Fn, typename... _ArgTypes>
+    2989              :     struct __is_invocable
+    2990              :     : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type
+    2991              :     { };
+    2992              : 
+    2993              :   template<typename _Fn, typename _Tp, typename... _Args>
+    2994              :     constexpr bool __call_is_nt(__invoke_memfun_ref)
+    2995              :     {
+    2996              :       using _Up = typename __inv_unwrap<_Tp>::type;
+    2997              :       return noexcept((std::declval<_Up>().*std::declval<_Fn>())(
+    2998              :             std::declval<_Args>()...));
+    2999              :     }
+    3000              : 
+    3001              :   template<typename _Fn, typename _Tp, typename... _Args>
+    3002              :     constexpr bool __call_is_nt(__invoke_memfun_deref)
+    3003              :     {
+    3004              :       return noexcept(((*std::declval<_Tp>()).*std::declval<_Fn>())(
+    3005              :             std::declval<_Args>()...));
+    3006              :     }
+    3007              : 
+    3008              :   template<typename _Fn, typename _Tp>
+    3009              :     constexpr bool __call_is_nt(__invoke_memobj_ref)
+    3010              :     {
+    3011              :       using _Up = typename __inv_unwrap<_Tp>::type;
+    3012              :       return noexcept(std::declval<_Up>().*std::declval<_Fn>());
+    3013              :     }
+    3014              : 
+    3015              :   template<typename _Fn, typename _Tp>
+    3016              :     constexpr bool __call_is_nt(__invoke_memobj_deref)
+    3017              :     {
+    3018              :       return noexcept((*std::declval<_Tp>()).*std::declval<_Fn>());
+    3019              :     }
+    3020              : 
+    3021              :   template<typename _Fn, typename... _Args>
+    3022              :     constexpr bool __call_is_nt(__invoke_other)
+    3023              :     {
+    3024              :       return noexcept(std::declval<_Fn>()(std::declval<_Args>()...));
+    3025              :     }
+    3026              : 
+    3027              :   template<typename _Result, typename _Fn, typename... _Args>
+    3028              :     struct __call_is_nothrow
+    3029              :     : __bool_constant<
+    3030              :         std::__call_is_nt<_Fn, _Args...>(typename _Result::__invoke_type{})
+    3031              :       >
+    3032              :     { };
+    3033              : 
+    3034              :   template<typename _Fn, typename... _Args>
+    3035              :     using __call_is_nothrow_
+    3036              :       = __call_is_nothrow<__invoke_result<_Fn, _Args...>, _Fn, _Args...>;
+    3037              : 
+    3038              :   // __is_nothrow_invocable (std::is_nothrow_invocable for C++11)
+    3039              :   template<typename _Fn, typename... _Args>
+    3040              :     struct __is_nothrow_invocable
+    3041              :     : __and_<__is_invocable<_Fn, _Args...>,
+    3042              :              __call_is_nothrow_<_Fn, _Args...>>::type
+    3043              :     { };
+    3044              : 
+    3045              : #pragma GCC diagnostic push
+    3046              : #pragma GCC diagnostic ignored "-Wctor-dtor-privacy"
+    3047              :   struct __nonesuchbase {};
+    3048              :   struct __nonesuch : private __nonesuchbase {
+    3049              :     ~__nonesuch() = delete;
+    3050              :     __nonesuch(__nonesuch const&) = delete;
+    3051              :     void operator=(__nonesuch const&) = delete;
+    3052              :   };
+    3053              : #pragma GCC diagnostic pop
+    3054              :   /// @endcond
+    3055              : 
+    3056              : #if __cplusplus >= 201703L
+    3057              : # define __cpp_lib_is_invocable 201703L
+    3058              : 
+    3059              :   /// std::invoke_result
+    3060              :   template<typename _Functor, typename... _ArgTypes>
+    3061              :     struct invoke_result
+    3062              :     : public __invoke_result<_Functor, _ArgTypes...>
+    3063              :     {
+    3064              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Functor>{}),
+    3065              :         "_Functor must be a complete class or an unbounded array");
+    3066              :       static_assert((std::__is_complete_or_unbounded(
+    3067              :         __type_identity<_ArgTypes>{}) && ...),
+    3068              :         "each argument type must be a complete class or an unbounded array");
+    3069              :     };
+    3070              : 
+    3071              :   /// std::invoke_result_t
+    3072              :   template<typename _Fn, typename... _Args>
+    3073              :     using invoke_result_t = typename invoke_result<_Fn, _Args...>::type;
+    3074              : 
+    3075              :   /// std::is_invocable
+    3076              :   template<typename _Fn, typename... _ArgTypes>
+    3077              :     struct is_invocable
+    3078              :     : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type
+    3079              :     {
+    3080              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}),
+    3081              :         "_Fn must be a complete class or an unbounded array");
+    3082              :       static_assert((std::__is_complete_or_unbounded(
+    3083              :         __type_identity<_ArgTypes>{}) && ...),
+    3084              :         "each argument type must be a complete class or an unbounded array");
+    3085              :     };
+    3086              : 
+    3087              :   /// std::is_invocable_r
+    3088              :   template<typename _Ret, typename _Fn, typename... _ArgTypes>
+    3089              :     struct is_invocable_r
+    3090              :     : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, _Ret>::type
+    3091              :     {
+    3092              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}),
+    3093              :         "_Fn must be a complete class or an unbounded array");
+    3094              :       static_assert((std::__is_complete_or_unbounded(
+    3095              :         __type_identity<_ArgTypes>{}) && ...),
+    3096              :         "each argument type must be a complete class or an unbounded array");
+    3097              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Ret>{}),
+    3098              :         "_Ret must be a complete class or an unbounded array");
+    3099              :     };
+    3100              : 
+    3101              :   /// std::is_nothrow_invocable
+    3102              :   template<typename _Fn, typename... _ArgTypes>
+    3103              :     struct is_nothrow_invocable
+    3104              :     : __and_<__is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>,
+    3105              :              __call_is_nothrow_<_Fn, _ArgTypes...>>::type
+    3106              :     {
+    3107              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}),
+    3108              :         "_Fn must be a complete class or an unbounded array");
+    3109              :       static_assert((std::__is_complete_or_unbounded(
+    3110              :         __type_identity<_ArgTypes>{}) && ...),
+    3111              :         "each argument type must be a complete class or an unbounded array");
+    3112              :     };
+    3113              : 
+    3114              :   /// @cond undocumented
+    3115              :   // This checks that the INVOKE<R> expression is well-formed and that the
+    3116              :   // conversion to R does not throw. It does *not* check whether the INVOKE
+    3117              :   // expression itself can throw. That is done by __call_is_nothrow_ instead.
+    3118              :   template<typename _Result, typename _Ret>
+    3119              :     using __is_nt_invocable_impl
+    3120              :       = typename __is_invocable_impl<_Result, _Ret>::__nothrow_conv;
+    3121              :   /// @endcond
+    3122              : 
+    3123              :   /// std::is_nothrow_invocable_r
+    3124              :   template<typename _Ret, typename _Fn, typename... _ArgTypes>
+    3125              :     struct is_nothrow_invocable_r
+    3126              :     : __and_<__is_nt_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, _Ret>,
+    3127              :              __call_is_nothrow_<_Fn, _ArgTypes...>>::type
+    3128              :     {
+    3129              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}),
+    3130              :         "_Fn must be a complete class or an unbounded array");
+    3131              :       static_assert((std::__is_complete_or_unbounded(
+    3132              :         __type_identity<_ArgTypes>{}) && ...),
+    3133              :         "each argument type must be a complete class or an unbounded array");
+    3134              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Ret>{}),
+    3135              :         "_Ret must be a complete class or an unbounded array");
+    3136              :     };
+    3137              : #endif // C++17
+    3138              : 
+    3139              : #if __cplusplus >= 201703L
+    3140              : # define __cpp_lib_type_trait_variable_templates 201510L
+    3141              :   /**
+    3142              :    * @defgroup variable_templates Variable templates for type traits
+    3143              :    * @ingroup metaprogramming
+    3144              :    *
+    3145              :    * Each variable `is_xxx_v<T>` is a boolean constant with the same value
+    3146              :    * as the `value` member of the corresponding type trait `is_xxx<T>`.
+    3147              :    *
+    3148              :    * @since C++17 unless noted otherwise.
+    3149              :    */
+    3150              : 
+    3151              :   /**
+    3152              :    * @{
+    3153              :    * @ingroup variable_templates
+    3154              :    */
+    3155              : template <typename _Tp>
+    3156              :   inline constexpr bool is_void_v = is_void<_Tp>::value;
+    3157              : template <typename _Tp>
+    3158              :   inline constexpr bool is_null_pointer_v = is_null_pointer<_Tp>::value;
+    3159              : template <typename _Tp>
+    3160              :   inline constexpr bool is_integral_v = is_integral<_Tp>::value;
+    3161              : template <typename _Tp>
+    3162              :   inline constexpr bool is_floating_point_v = is_floating_point<_Tp>::value;
+    3163              : 
+    3164              : template <typename _Tp>
+    3165              :   inline constexpr bool is_array_v = false;
+    3166              : template <typename _Tp>
+    3167              :   inline constexpr bool is_array_v<_Tp[]> = true;
+    3168              : template <typename _Tp, size_t _Num>
+    3169              :   inline constexpr bool is_array_v<_Tp[_Num]> = true;
+    3170              : 
+    3171              : template <typename _Tp>
+    3172              :   inline constexpr bool is_pointer_v = is_pointer<_Tp>::value;
+    3173              : template <typename _Tp>
+    3174              :   inline constexpr bool is_lvalue_reference_v = false;
+    3175              : template <typename _Tp>
+    3176              :   inline constexpr bool is_lvalue_reference_v<_Tp&> = true;
+    3177              : template <typename _Tp>
+    3178              :   inline constexpr bool is_rvalue_reference_v = false;
+    3179              : template <typename _Tp>
+    3180              :   inline constexpr bool is_rvalue_reference_v<_Tp&&> = true;
+    3181              : template <typename _Tp>
+    3182              :   inline constexpr bool is_member_object_pointer_v =
+    3183              :     is_member_object_pointer<_Tp>::value;
+    3184              : template <typename _Tp>
+    3185              :   inline constexpr bool is_member_function_pointer_v =
+    3186              :     is_member_function_pointer<_Tp>::value;
+    3187              : template <typename _Tp>
+    3188              :   inline constexpr bool is_enum_v = __is_enum(_Tp);
+    3189              : template <typename _Tp>
+    3190              :   inline constexpr bool is_union_v = __is_union(_Tp);
+    3191              : template <typename _Tp>
+    3192              :   inline constexpr bool is_class_v = __is_class(_Tp);
+    3193              : template <typename _Tp>
+    3194              :   inline constexpr bool is_function_v = is_function<_Tp>::value;
+    3195              : template <typename _Tp>
+    3196              :   inline constexpr bool is_reference_v = false;
+    3197              : template <typename _Tp>
+    3198              :   inline constexpr bool is_reference_v<_Tp&> = true;
+    3199              : template <typename _Tp>
+    3200              :   inline constexpr bool is_reference_v<_Tp&&> = true;
+    3201              : template <typename _Tp>
+    3202              :   inline constexpr bool is_arithmetic_v = is_arithmetic<_Tp>::value;
+    3203              : template <typename _Tp>
+    3204              :   inline constexpr bool is_fundamental_v = is_fundamental<_Tp>::value;
+    3205              : template <typename _Tp>
+    3206              :   inline constexpr bool is_object_v = is_object<_Tp>::value;
+    3207              : template <typename _Tp>
+    3208              :   inline constexpr bool is_scalar_v = is_scalar<_Tp>::value;
+    3209              : template <typename _Tp>
+    3210              :   inline constexpr bool is_compound_v = is_compound<_Tp>::value;
+    3211              : template <typename _Tp>
+    3212              :   inline constexpr bool is_member_pointer_v = is_member_pointer<_Tp>::value;
+    3213              : template <typename _Tp>
+    3214              :   inline constexpr bool is_const_v = false;
+    3215              : template <typename _Tp>
+    3216              :   inline constexpr bool is_const_v<const _Tp> = true;
+    3217              : template <typename _Tp>
+    3218              :   inline constexpr bool is_volatile_v = false;
+    3219              : template <typename _Tp>
+    3220              :   inline constexpr bool is_volatile_v<volatile _Tp> = true;
+    3221              : 
+    3222              : template <typename _Tp>
+    3223              :   inline constexpr bool is_trivial_v = __is_trivial(_Tp);
+    3224              : template <typename _Tp>
+    3225              :   inline constexpr bool is_trivially_copyable_v = __is_trivially_copyable(_Tp);
+    3226              : template <typename _Tp>
+    3227              :   inline constexpr bool is_standard_layout_v = __is_standard_layout(_Tp);
+    3228              : template <typename _Tp>
+    3229              :   _GLIBCXX20_DEPRECATED_SUGGEST("is_standard_layout_v && is_trivial_v")
+    3230              :   inline constexpr bool is_pod_v = __is_pod(_Tp);
+    3231              : template <typename _Tp>
+    3232              :   _GLIBCXX17_DEPRECATED
+    3233              :   inline constexpr bool is_literal_type_v = __is_literal_type(_Tp);
+    3234              : template <typename _Tp>
+    3235              :   inline constexpr bool is_empty_v = __is_empty(_Tp);
+    3236              : template <typename _Tp>
+    3237              :   inline constexpr bool is_polymorphic_v = __is_polymorphic(_Tp);
+    3238              : template <typename _Tp>
+    3239              :   inline constexpr bool is_abstract_v = __is_abstract(_Tp);
+    3240              : template <typename _Tp>
+    3241              :   inline constexpr bool is_final_v = __is_final(_Tp);
+    3242              : 
+    3243              : template <typename _Tp>
+    3244              :   inline constexpr bool is_signed_v = is_signed<_Tp>::value;
+    3245              : template <typename _Tp>
+    3246              :   inline constexpr bool is_unsigned_v = is_unsigned<_Tp>::value;
+    3247              : 
+    3248              : template <typename _Tp, typename... _Args>
+    3249              :   inline constexpr bool is_constructible_v = __is_constructible(_Tp, _Args...);
+    3250              : template <typename _Tp>
+    3251              :   inline constexpr bool is_default_constructible_v = __is_constructible(_Tp);
+    3252              : template <typename _Tp>
+    3253              :   inline constexpr bool is_copy_constructible_v
+    3254              :     = __is_constructible(_Tp, __add_lval_ref_t<const _Tp>);
+    3255              : template <typename _Tp>
+    3256              :   inline constexpr bool is_move_constructible_v
+    3257              :     = __is_constructible(_Tp, __add_rval_ref_t<_Tp>);
+    3258              : 
+    3259              : template <typename _Tp, typename _Up>
+    3260              :   inline constexpr bool is_assignable_v = __is_assignable(_Tp, _Up);
+    3261              : template <typename _Tp>
+    3262              :   inline constexpr bool is_copy_assignable_v
+    3263              :     = __is_assignable(__add_lval_ref_t<_Tp>, __add_lval_ref_t<const _Tp>);
+    3264              : template <typename _Tp>
+    3265              :   inline constexpr bool is_move_assignable_v
+    3266              :     = __is_assignable(__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>);
+    3267              : 
+    3268              : template <typename _Tp>
+    3269              :   inline constexpr bool is_destructible_v = is_destructible<_Tp>::value;
+    3270              : 
+    3271              : template <typename _Tp, typename... _Args>
+    3272              :   inline constexpr bool is_trivially_constructible_v
+    3273              :     = __is_trivially_constructible(_Tp, _Args...);
+    3274              : template <typename _Tp>
+    3275              :   inline constexpr bool is_trivially_default_constructible_v
+    3276              :     = __is_trivially_constructible(_Tp);
+    3277              : template <typename _Tp>
+    3278              :   inline constexpr bool is_trivially_copy_constructible_v
+    3279              :     = __is_trivially_constructible(_Tp, __add_lval_ref_t<const _Tp>);
+    3280              : template <typename _Tp>
+    3281              :   inline constexpr bool is_trivially_move_constructible_v
+    3282              :     = __is_trivially_constructible(_Tp, __add_rval_ref_t<_Tp>);
+    3283              : 
+    3284              : template <typename _Tp, typename _Up>
+    3285              :   inline constexpr bool is_trivially_assignable_v
+    3286              :     = __is_trivially_assignable(_Tp, _Up);
+    3287              : template <typename _Tp>
+    3288              :   inline constexpr bool is_trivially_copy_assignable_v
+    3289              :     = __is_trivially_assignable(__add_lval_ref_t<_Tp>,
+    3290              :                                 __add_lval_ref_t<const _Tp>);
+    3291              : template <typename _Tp>
+    3292              :   inline constexpr bool is_trivially_move_assignable_v
+    3293              :     = __is_trivially_assignable(__add_lval_ref_t<_Tp>,
+    3294              :                                 __add_rval_ref_t<_Tp>);
+    3295              : template <typename _Tp>
+    3296              :   inline constexpr bool is_trivially_destructible_v =
+    3297              :     is_trivially_destructible<_Tp>::value;
+    3298              : template <typename _Tp, typename... _Args>
+    3299              :   inline constexpr bool is_nothrow_constructible_v
+    3300              :     = __is_nothrow_constructible(_Tp, _Args...);
+    3301              : template <typename _Tp>
+    3302              :   inline constexpr bool is_nothrow_default_constructible_v
+    3303              :     = __is_nothrow_constructible(_Tp);
+    3304              : template <typename _Tp>
+    3305              :   inline constexpr bool is_nothrow_copy_constructible_v
+    3306              :     = __is_nothrow_constructible(_Tp, __add_lval_ref_t<const _Tp>);
+    3307              : template <typename _Tp>
+    3308              :   inline constexpr bool is_nothrow_move_constructible_v
+    3309              :     = __is_nothrow_constructible(_Tp, __add_rval_ref_t<_Tp>);
+    3310              : 
+    3311              : template <typename _Tp, typename _Up>
+    3312              :   inline constexpr bool is_nothrow_assignable_v
+    3313              :     = __is_nothrow_assignable(_Tp, _Up);
+    3314              : template <typename _Tp>
+    3315              :   inline constexpr bool is_nothrow_copy_assignable_v
+    3316              :     = __is_nothrow_assignable(__add_lval_ref_t<_Tp>,
+    3317              :                               __add_lval_ref_t<const _Tp>);
+    3318              : template <typename _Tp>
+    3319              :   inline constexpr bool is_nothrow_move_assignable_v
+    3320              :     = __is_nothrow_assignable(__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>);
+    3321              : 
+    3322              : template <typename _Tp>
+    3323              :   inline constexpr bool is_nothrow_destructible_v =
+    3324              :     is_nothrow_destructible<_Tp>::value;
+    3325              : 
+    3326              : template <typename _Tp>
+    3327              :   inline constexpr bool has_virtual_destructor_v
+    3328              :     = __has_virtual_destructor(_Tp);
+    3329              : 
+    3330              : template <typename _Tp>
+    3331              :   inline constexpr size_t alignment_of_v = alignment_of<_Tp>::value;
+    3332              : 
+    3333              : template <typename _Tp>
+    3334              :   inline constexpr size_t rank_v = 0;
+    3335              : template <typename _Tp, size_t _Size>
+    3336              :   inline constexpr size_t rank_v<_Tp[_Size]> = 1 + rank_v<_Tp>;
+    3337              : template <typename _Tp>
+    3338              :   inline constexpr size_t rank_v<_Tp[]> = 1 + rank_v<_Tp>;
+    3339              : 
+    3340              : template <typename _Tp, unsigned _Idx = 0>
+    3341              :   inline constexpr size_t extent_v = 0;
+    3342              : template <typename _Tp, size_t _Size>
+    3343              :   inline constexpr size_t extent_v<_Tp[_Size], 0> = _Size;
+    3344              : template <typename _Tp, unsigned _Idx, size_t _Size>
+    3345              :   inline constexpr size_t extent_v<_Tp[_Size], _Idx> = extent_v<_Tp, _Idx - 1>;
+    3346              : template <typename _Tp>
+    3347              :   inline constexpr size_t extent_v<_Tp[], 0> = 0;
+    3348              : template <typename _Tp, unsigned _Idx>
+    3349              :   inline constexpr size_t extent_v<_Tp[], _Idx> = extent_v<_Tp, _Idx - 1>;
+    3350              : 
+    3351              : #ifdef _GLIBCXX_HAVE_BUILTIN_IS_SAME
+    3352              : template <typename _Tp, typename _Up>
+    3353              :   inline constexpr bool is_same_v = __is_same(_Tp, _Up);
+    3354              : #else
+    3355              : template <typename _Tp, typename _Up>
+    3356              :   inline constexpr bool is_same_v = false;
+    3357              : template <typename _Tp>
+    3358              :   inline constexpr bool is_same_v<_Tp, _Tp> = true;
+    3359              : #endif
+    3360              : template <typename _Base, typename _Derived>
+    3361              :   inline constexpr bool is_base_of_v = __is_base_of(_Base, _Derived);
+    3362              : #if __has_builtin(__is_convertible)
+    3363              : template <typename _From, typename _To>
+    3364              :   inline constexpr bool is_convertible_v = __is_convertible(_From, _To);
+    3365              : #else
+    3366              : template <typename _From, typename _To>
+    3367              :   inline constexpr bool is_convertible_v = is_convertible<_From, _To>::value;
+    3368              : #endif
+    3369              : template<typename _Fn, typename... _Args>
+    3370              :   inline constexpr bool is_invocable_v = is_invocable<_Fn, _Args...>::value;
+    3371              : template<typename _Fn, typename... _Args>
+    3372              :   inline constexpr bool is_nothrow_invocable_v
+    3373              :     = is_nothrow_invocable<_Fn, _Args...>::value;
+    3374              : template<typename _Ret, typename _Fn, typename... _Args>
+    3375              :   inline constexpr bool is_invocable_r_v
+    3376              :     = is_invocable_r<_Ret, _Fn, _Args...>::value;
+    3377              : template<typename _Ret, typename _Fn, typename... _Args>
+    3378              :   inline constexpr bool is_nothrow_invocable_r_v
+    3379              :     = is_nothrow_invocable_r<_Ret, _Fn, _Args...>::value;
+    3380              : /// @}
+    3381              : 
+    3382              : #ifdef _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP
+    3383              : # define __cpp_lib_has_unique_object_representations 201606L
+    3384              :   /// has_unique_object_representations
+    3385              :   /// @since C++17
+    3386              :   template<typename _Tp>
+    3387              :     struct has_unique_object_representations
+    3388              :     : bool_constant<__has_unique_object_representations(
+    3389              :       remove_cv_t<remove_all_extents_t<_Tp>>
+    3390              :       )>
+    3391              :     {
+    3392              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
+    3393              :         "template argument must be a complete class or an unbounded array");
+    3394              :     };
+    3395              : 
+    3396              :   /// @ingroup variable_templates
+    3397              :   template<typename _Tp>
+    3398              :     inline constexpr bool has_unique_object_representations_v
+    3399              :       = has_unique_object_representations<_Tp>::value;
+    3400              : #endif
+    3401              : 
+    3402              : #ifdef _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE
+    3403              : # define __cpp_lib_is_aggregate 201703L
+    3404              :   /// is_aggregate - true if the type is an aggregate.
+    3405              :   /// @since C++17
+    3406              :   template<typename _Tp>
+    3407              :     struct is_aggregate
+    3408              :     : bool_constant<__is_aggregate(remove_cv_t<_Tp>)>
+    3409              :     { };
+    3410              : 
+    3411              :   /** is_aggregate_v - true if the type is an aggregate.
+    3412              :    *  @ingroup variable_templates
+    3413              :    *  @since C++17
+    3414              :    */
+    3415              :   template<typename _Tp>
+    3416              :     inline constexpr bool is_aggregate_v = __is_aggregate(remove_cv_t<_Tp>);
+    3417              : #endif
+    3418              : #endif // C++17
+    3419              : 
+    3420              : #if __cplusplus >= 202002L
+    3421              : 
+    3422              :   /** * Remove references and cv-qualifiers.
+    3423              :    * @since C++20
+    3424              :    * @{
+    3425              :    */
+    3426              : #define __cpp_lib_remove_cvref 201711L
+    3427              : 
+    3428              : #if __has_builtin(__remove_cvref)
+    3429              :   template<typename _Tp>
+    3430              :     struct remove_cvref
+    3431              :     { using type = __remove_cvref(_Tp); };
+    3432              : #else
+    3433              :   template<typename _Tp>
+    3434              :     struct remove_cvref
+    3435              :     { using type = typename remove_cv<_Tp>::type; };
+    3436              : 
+    3437              :   template<typename _Tp>
+    3438              :     struct remove_cvref<_Tp&>
+    3439              :     { using type = typename remove_cv<_Tp>::type; };
+    3440              : 
+    3441              :   template<typename _Tp>
+    3442              :     struct remove_cvref<_Tp&&>
+    3443              :     { using type = typename remove_cv<_Tp>::type; };
+    3444              : #endif
+    3445              : 
+    3446              :   template<typename _Tp>
+    3447              :     using remove_cvref_t = typename remove_cvref<_Tp>::type;
+    3448              :   /// @}
+    3449              : 
+    3450              :   /** * Identity metafunction.
+    3451              :    * @since C++20
+    3452              :    * @{
+    3453              :    */
+    3454              : #define __cpp_lib_type_identity 201806L
+    3455              :   template<typename _Tp>
+    3456              :     struct type_identity { using type = _Tp; };
+    3457              : 
+    3458              :   template<typename _Tp>
+    3459              :     using type_identity_t = typename type_identity<_Tp>::type;
+    3460              :   /// @}
+    3461              : 
+    3462              : #define __cpp_lib_unwrap_ref 201811L
+    3463              : 
+    3464              :   /** Unwrap a reference_wrapper
+    3465              :    * @since C++20
+    3466              :    * @{
+    3467              :    */
+    3468              :   template<typename _Tp>
+    3469              :     struct unwrap_reference { using type = _Tp; };
+    3470              : 
+    3471              :   template<typename _Tp>
+    3472              :     struct unwrap_reference<reference_wrapper<_Tp>> { using type = _Tp&; };
+    3473              : 
+    3474              :   template<typename _Tp>
+    3475              :     using unwrap_reference_t = typename unwrap_reference<_Tp>::type;
+    3476              :   /// @}
+    3477              : 
+    3478              :   /** Decay type and if it's a reference_wrapper, unwrap it
+    3479              :    * @since C++20
+    3480              :    * @{
+    3481              :    */
+    3482              :   template<typename _Tp>
+    3483              :     struct unwrap_ref_decay { using type = unwrap_reference_t<decay_t<_Tp>>; };
+    3484              : 
+    3485              :   template<typename _Tp>
+    3486              :     using unwrap_ref_decay_t = typename unwrap_ref_decay<_Tp>::type;
+    3487              :   /// @}
+    3488              : 
+    3489              : #define __cpp_lib_bounded_array_traits 201902L
+    3490              : 
+    3491              :   /// True for a type that is an array of known bound.
+    3492              :   /// @ingroup variable_templates
+    3493              :   /// @since C++20
+    3494              :   template<typename _Tp>
+    3495              :     inline constexpr bool is_bounded_array_v = false;
+    3496              : 
+    3497              :   template<typename _Tp, size_t _Size>
+    3498              :     inline constexpr bool is_bounded_array_v<_Tp[_Size]> = true;
+    3499              : 
+    3500              :   /// True for a type that is an array of unknown bound.
+    3501              :   /// @ingroup variable_templates
+    3502              :   /// @since C++20
+    3503              :   template<typename _Tp>
+    3504              :     inline constexpr bool is_unbounded_array_v = false;
+    3505              : 
+    3506              :   template<typename _Tp>
+    3507              :     inline constexpr bool is_unbounded_array_v<_Tp[]> = true;
+    3508              : 
+    3509              :   /// True for a type that is an array of known bound.
+    3510              :   /// @since C++20
+    3511              :   template<typename _Tp>
+    3512              :     struct is_bounded_array
+    3513              :     : public bool_constant<is_bounded_array_v<_Tp>>
+    3514              :     { };
+    3515              : 
+    3516              :   /// True for a type that is an array of unknown bound.
+    3517              :   /// @since C++20
+    3518              :   template<typename _Tp>
+    3519              :     struct is_unbounded_array
+    3520              :     : public bool_constant<is_unbounded_array_v<_Tp>>
+    3521              :     { };
+    3522              : 
+    3523              : #if __has_builtin(__is_layout_compatible)
+    3524              : 
+    3525              :   /// @since C++20
+    3526              :   template<typename _Tp, typename _Up>
+    3527              :     struct is_layout_compatible
+    3528              :     : bool_constant<__is_layout_compatible(_Tp, _Up)>
+    3529              :     { };
+    3530              : 
+    3531              :   /// @ingroup variable_templates
+    3532              :   /// @since C++20
+    3533              :   template<typename _Tp, typename _Up>
+    3534              :     constexpr bool is_layout_compatible_v
+    3535              :       = __is_layout_compatible(_Tp, _Up);
+    3536              : 
+    3537              : #if __has_builtin(__builtin_is_corresponding_member)
+    3538              : #define __cpp_lib_is_layout_compatible 201907L
+    3539              : 
+    3540              :   /// @since C++20
+    3541              :   template<typename _S1, typename _S2, typename _M1, typename _M2>
+    3542              :     constexpr bool
+    3543              :     is_corresponding_member(_M1 _S1::*__m1, _M2 _S2::*__m2) noexcept
+    3544              :     { return __builtin_is_corresponding_member(__m1, __m2); }
+    3545              : #endif
+    3546              : #endif
+    3547              : 
+    3548              : #if __has_builtin(__is_pointer_interconvertible_base_of)
+    3549              :   /// True if `_Derived` is standard-layout and has a base class of type `_Base`
+    3550              :   /// @since C++20
+    3551              :   template<typename _Base, typename _Derived>
+    3552              :     struct is_pointer_interconvertible_base_of
+    3553              :     : bool_constant<__is_pointer_interconvertible_base_of(_Base, _Derived)>
+    3554              :     { };
+    3555              : 
+    3556              :   /// @ingroup variable_templates
+    3557              :   /// @since C++20
+    3558              :   template<typename _Base, typename _Derived>
+    3559              :     constexpr bool is_pointer_interconvertible_base_of_v
+    3560              :       = __is_pointer_interconvertible_base_of(_Base, _Derived);
+    3561              : 
+    3562              : #if __has_builtin(__builtin_is_pointer_interconvertible_with_class)
+    3563              : #define __cpp_lib_is_pointer_interconvertible 201907L
+    3564              : 
+    3565              :   /// True if `__mp` points to the first member of a standard-layout type
+    3566              :   /// @returns true if `s.*__mp` is pointer-interconvertible with `s`
+    3567              :   /// @since C++20
+    3568              :   template<typename _Tp, typename _Mem>
+    3569              :     constexpr bool
+    3570              :     is_pointer_interconvertible_with_class(_Mem _Tp::*__mp) noexcept
+    3571              :     { return __builtin_is_pointer_interconvertible_with_class(__mp); }
+    3572              : #endif
+    3573              : #endif
+    3574              : 
+    3575              : #if __cplusplus > 202002L
+    3576              : #define __cpp_lib_is_scoped_enum 202011L
+    3577              : 
+    3578              :   /// True if the type is a scoped enumeration type.
+    3579              :   /// @since C++23
+    3580              : 
+    3581              :   template<typename _Tp>
+    3582              :     struct is_scoped_enum
+    3583              :     : false_type
+    3584              :     { };
+    3585              : 
+    3586              :   template<typename _Tp>
+    3587              :     requires __is_enum(_Tp)
+    3588              :     && requires(remove_cv_t<_Tp> __t) { __t = __t; } // fails if incomplete
+    3589              :     struct is_scoped_enum<_Tp>
+    3590              :     : bool_constant<!requires(_Tp __t, void(*__f)(int)) { __f(__t); }>
+    3591              :     { };
+    3592              : 
+    3593              :   /// @ingroup variable_templates
+    3594              :   /// @since C++23
+    3595              :   template<typename _Tp>
+    3596              :     inline constexpr bool is_scoped_enum_v = is_scoped_enum<_Tp>::value;
+    3597              : 
+    3598              : #if __has_builtin(__reference_constructs_from_temporary) \
+    3599              :   && __has_builtin(__reference_converts_from_temporary)
+    3600              : 
+    3601              : #define __cpp_lib_reference_from_temporary 202202L
+    3602              : 
+    3603              :   /// True if _Tp is a reference type, a _Up value can be bound to _Tp in
+    3604              :   /// direct-initialization, and a temporary object would be bound to
+    3605              :   /// the reference, false otherwise.
+    3606              :   /// @since C++23
+    3607              :   template<typename _Tp, typename _Up>
+    3608              :     struct reference_constructs_from_temporary
+    3609              :     : public bool_constant<__reference_constructs_from_temporary(_Tp, _Up)>
+    3610              :     {
+    3611              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{})
+    3612              :                     && std::__is_complete_or_unbounded(__type_identity<_Up>{}),
+    3613              :         "template argument must be a complete class or an unbounded array");
+    3614              :     };
+    3615              : 
+    3616              :   /// True if _Tp is a reference type, a _Up value can be bound to _Tp in
+    3617              :   /// copy-initialization, and a temporary object would be bound to
+    3618              :   /// the reference, false otherwise.
+    3619              :   /// @since C++23
+    3620              :   template<typename _Tp, typename _Up>
+    3621              :     struct reference_converts_from_temporary
+    3622              :     : public bool_constant<__reference_converts_from_temporary(_Tp, _Up)>
+    3623              :     {
+    3624              :       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{})
+    3625              :                     && std::__is_complete_or_unbounded(__type_identity<_Up>{}),
+    3626              :         "template argument must be a complete class or an unbounded array");
+    3627              :     };
+    3628              : 
+    3629              :   /// @ingroup variable_templates
+    3630              :   /// @since C++23
+    3631              :   template<typename _Tp, typename _Up>
+    3632              :     inline constexpr bool reference_constructs_from_temporary_v
+    3633              :       = reference_constructs_from_temporary<_Tp, _Up>::value;
+    3634              : 
+    3635              :   /// @ingroup variable_templates
+    3636              :   /// @since C++23
+    3637              :   template<typename _Tp, typename _Up>
+    3638              :     inline constexpr bool reference_converts_from_temporary_v
+    3639              :       = reference_converts_from_temporary<_Tp, _Up>::value;
+    3640              : #endif // __has_builtin for reference_from_temporary
+    3641              : #endif // C++23
+    3642              : 
+    3643              : #if _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED
+    3644              : #define __cpp_lib_is_constant_evaluated 201811L
+    3645              : 
+    3646              :   /// Returns true only when called during constant evaluation.
+    3647              :   /// @since C++20
+    3648              :   constexpr inline bool
+    3649              :   is_constant_evaluated() noexcept
+    3650              :   {
+    3651              : #if __cpp_if_consteval >= 202106L
+    3652              :     if consteval { return true; } else { return false; }
+    3653              : #else
+    3654              :     return __builtin_is_constant_evaluated();
+    3655              : #endif
+    3656              :   }
+    3657              : #endif
+    3658              : 
+    3659              :   /// @cond undocumented
+    3660              :   template<typename _From, typename _To>
+    3661              :     using __copy_cv = typename __match_cv_qualifiers<_From, _To>::__type;
+    3662              : 
+    3663              :   template<typename _Xp, typename _Yp>
+    3664              :     using __cond_res
+    3665              :       = decltype(false ? declval<_Xp(&)()>()() : declval<_Yp(&)()>()());
+    3666              : 
+    3667              :   template<typename _Ap, typename _Bp, typename = void>
+    3668              :     struct __common_ref_impl
+    3669              :     { };
+    3670              : 
+    3671              :   // [meta.trans.other], COMMON-REF(A, B)
+    3672              :   template<typename _Ap, typename _Bp>
+    3673              :     using __common_ref = typename __common_ref_impl<_Ap, _Bp>::type;
+    3674              : 
+    3675              :   // COND-RES(COPYCV(X, Y) &, COPYCV(Y, X) &)
+    3676              :   template<typename _Xp, typename _Yp>
+    3677              :     using __condres_cvref
+    3678              :       = __cond_res<__copy_cv<_Xp, _Yp>&, __copy_cv<_Yp, _Xp>&>;
+    3679              : 
+    3680              :   // If A and B are both lvalue reference types, ...
+    3681              :   template<typename _Xp, typename _Yp>
+    3682              :     struct __common_ref_impl<_Xp&, _Yp&, __void_t<__condres_cvref<_Xp, _Yp>>>
+    3683              :     : enable_if<is_reference_v<__condres_cvref<_Xp, _Yp>>,
+    3684              :                 __condres_cvref<_Xp, _Yp>>
+    3685              :     { };
+    3686              : 
+    3687              :   // let C be remove_reference_t<COMMON-REF(X&, Y&)>&&
+    3688              :   template<typename _Xp, typename _Yp>
+    3689              :     using __common_ref_C = remove_reference_t<__common_ref<_Xp&, _Yp&>>&&;
+    3690              : 
+    3691              :   // If A and B are both rvalue reference types, ...
+    3692              :   template<typename _Xp, typename _Yp>
+    3693              :     struct __common_ref_impl<_Xp&&, _Yp&&,
+    3694              :       _Require<is_convertible<_Xp&&, __common_ref_C<_Xp, _Yp>>,
+    3695              :                is_convertible<_Yp&&, __common_ref_C<_Xp, _Yp>>>>
+    3696              :     { using type = __common_ref_C<_Xp, _Yp>; };
+    3697              : 
+    3698              :   // let D be COMMON-REF(const X&, Y&)
+    3699              :   template<typename _Xp, typename _Yp>
+    3700              :     using __common_ref_D = __common_ref<const _Xp&, _Yp&>;
+    3701              : 
+    3702              :   // If A is an rvalue reference and B is an lvalue reference, ...
+    3703              :   template<typename _Xp, typename _Yp>
+    3704              :     struct __common_ref_impl<_Xp&&, _Yp&,
+    3705              :       _Require<is_convertible<_Xp&&, __common_ref_D<_Xp, _Yp>>>>
+    3706              :     { using type = __common_ref_D<_Xp, _Yp>; };
+    3707              : 
+    3708              :   // If A is an lvalue reference and B is an rvalue reference, ...
+    3709              :   template<typename _Xp, typename _Yp>
+    3710              :     struct __common_ref_impl<_Xp&, _Yp&&>
+    3711              :     : __common_ref_impl<_Yp&&, _Xp&>
+    3712              :     { };
+    3713              :   /// @endcond
+    3714              : 
+    3715              :   template<typename _Tp, typename _Up,
+    3716              :            template<typename> class _TQual, template<typename> class _UQual>
+    3717              :     struct basic_common_reference
+    3718              :     { };
+    3719              : 
+    3720              :   /// @cond undocumented
+    3721              :   template<typename _Tp>
+    3722              :     struct __xref
+    3723              :     { template<typename _Up> using __type = __copy_cv<_Tp, _Up>; };
+    3724              : 
+    3725              :   template<typename _Tp>
+    3726              :     struct __xref<_Tp&>
+    3727              :     { template<typename _Up> using __type = __copy_cv<_Tp, _Up>&; };
+    3728              : 
+    3729              :   template<typename _Tp>
+    3730              :     struct __xref<_Tp&&>
+    3731              :     { template<typename _Up> using __type = __copy_cv<_Tp, _Up>&&; };
+    3732              : 
+    3733              :   template<typename _Tp1, typename _Tp2>
+    3734              :     using __basic_common_ref
+    3735              :       = typename basic_common_reference<remove_cvref_t<_Tp1>,
+    3736              :                                         remove_cvref_t<_Tp2>,
+    3737              :                                         __xref<_Tp1>::template __type,
+    3738              :                                         __xref<_Tp2>::template __type>::type;
+    3739              :   /// @endcond
+    3740              : 
+    3741              :   template<typename... _Tp>
+    3742              :     struct common_reference;
+    3743              : 
+    3744              :   template<typename... _Tp>
+    3745              :     using common_reference_t = typename common_reference<_Tp...>::type;
+    3746              : 
+    3747              :   // If sizeof...(T) is zero, there shall be no member type.
+    3748              :   template<>
+    3749              :     struct common_reference<>
+    3750              :     { };
+    3751              : 
+    3752              :   // If sizeof...(T) is one ...
+    3753              :   template<typename _Tp0>
+    3754              :     struct common_reference<_Tp0>
+    3755              :     { using type = _Tp0; };
+    3756              : 
+    3757              :   /// @cond undocumented
+    3758              :   template<typename _Tp1, typename _Tp2, int _Bullet = 1, typename = void>
+    3759              :     struct __common_reference_impl
+    3760              :     : __common_reference_impl<_Tp1, _Tp2, _Bullet + 1>
+    3761              :     { };
+    3762              : 
+    3763              :   // If sizeof...(T) is two ...
+    3764              :   template<typename _Tp1, typename _Tp2>
+    3765              :     struct common_reference<_Tp1, _Tp2>
+    3766              :     : __common_reference_impl<_Tp1, _Tp2>
+    3767              :     { };
+    3768              : 
+    3769              :   // If T1 and T2 are reference types and COMMON-REF(T1, T2) is well-formed, ...
+    3770              :   template<typename _Tp1, typename _Tp2>
+    3771              :     struct __common_reference_impl<_Tp1&, _Tp2&, 1,
+    3772              :                                    void_t<__common_ref<_Tp1&, _Tp2&>>>
+    3773              :     { using type = __common_ref<_Tp1&, _Tp2&>; };
+    3774              : 
+    3775              :   template<typename _Tp1, typename _Tp2>
+    3776              :     struct __common_reference_impl<_Tp1&&, _Tp2&&, 1,
+    3777              :                                    void_t<__common_ref<_Tp1&&, _Tp2&&>>>
+    3778              :     { using type = __common_ref<_Tp1&&, _Tp2&&>; };
+    3779              : 
+    3780              :   template<typename _Tp1, typename _Tp2>
+    3781              :     struct __common_reference_impl<_Tp1&, _Tp2&&, 1,
+    3782              :                                    void_t<__common_ref<_Tp1&, _Tp2&&>>>
+    3783              :     { using type = __common_ref<_Tp1&, _Tp2&&>; };
+    3784              : 
+    3785              :   template<typename _Tp1, typename _Tp2>
+    3786              :     struct __common_reference_impl<_Tp1&&, _Tp2&, 1,
+    3787              :                                    void_t<__common_ref<_Tp1&&, _Tp2&>>>
+    3788              :     { using type = __common_ref<_Tp1&&, _Tp2&>; };
+    3789              : 
+    3790              :   // Otherwise, if basic_common_reference<...>::type is well-formed, ...
+    3791              :   template<typename _Tp1, typename _Tp2>
+    3792              :     struct __common_reference_impl<_Tp1, _Tp2, 2,
+    3793              :                                    void_t<__basic_common_ref<_Tp1, _Tp2>>>
+    3794              :     { using type = __basic_common_ref<_Tp1, _Tp2>; };
+    3795              : 
+    3796              :   // Otherwise, if COND-RES(T1, T2) is well-formed, ...
+    3797              :   template<typename _Tp1, typename _Tp2>
+    3798              :     struct __common_reference_impl<_Tp1, _Tp2, 3,
+    3799              :                                    void_t<__cond_res<_Tp1, _Tp2>>>
+    3800              :     { using type = __cond_res<_Tp1, _Tp2>; };
+    3801              : 
+    3802              :   // Otherwise, if common_type_t<T1, T2> is well-formed, ...
+    3803              :   template<typename _Tp1, typename _Tp2>
+    3804              :     struct __common_reference_impl<_Tp1, _Tp2, 4,
+    3805              :                                    void_t<common_type_t<_Tp1, _Tp2>>>
+    3806              :     { using type = common_type_t<_Tp1, _Tp2>; };
+    3807              : 
+    3808              :   // Otherwise, there shall be no member type.
+    3809              :   template<typename _Tp1, typename _Tp2>
+    3810              :     struct __common_reference_impl<_Tp1, _Tp2, 5, void>
+    3811              :     { };
+    3812              : 
+    3813              :   // Otherwise, if sizeof...(T) is greater than two, ...
+    3814              :   template<typename _Tp1, typename _Tp2, typename... _Rest>
+    3815              :     struct common_reference<_Tp1, _Tp2, _Rest...>
+    3816              :     : __common_type_fold<common_reference<_Tp1, _Tp2>,
+    3817              :                          __common_type_pack<_Rest...>>
+    3818              :     { };
+    3819              : 
+    3820              :   // Reuse __common_type_fold for common_reference<T1, T2, Rest...>
+    3821              :   template<typename _Tp1, typename _Tp2, typename... _Rest>
+    3822              :     struct __common_type_fold<common_reference<_Tp1, _Tp2>,
+    3823              :                               __common_type_pack<_Rest...>,
+    3824              :                               void_t<common_reference_t<_Tp1, _Tp2>>>
+    3825              :     : public common_reference<common_reference_t<_Tp1, _Tp2>, _Rest...>
+    3826              :     { };
+    3827              :   /// @endcond
+    3828              : 
+    3829              : #endif // C++2a
+    3830              : 
+    3831              :   /// @} group metaprogramming
+    3832              : 
+    3833              : _GLIBCXX_END_NAMESPACE_VERSION
+    3834              : } // namespace std
+    3835              : 
+    3836              : #endif  // C++11
+    3837              : 
+    3838              : #endif  // _GLIBCXX_TYPE_TRAITS
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/typeinfo.func-c.html b/html/usr/include/c++/13/typeinfo.func-c.html new file mode 100644 index 0000000..aa7caea --- /dev/null +++ b/html/usr/include/c++/13/typeinfo.func-c.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/typeinfo - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - typeinfo (source / functions)CoverageTotalHit
Test:coverage.infoLines:25.0 %82
Test Date:2024-04-30 13:17:26Functions:50.0 %21
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt9type_infoeqERKS_0
_ZNKSt9type_info4nameEv8
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/typeinfo.func.html b/html/usr/include/c++/13/typeinfo.func.html new file mode 100644 index 0000000..e0b0daa --- /dev/null +++ b/html/usr/include/c++/13/typeinfo.func.html @@ -0,0 +1,89 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/typeinfo - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - typeinfo (source / functions)CoverageTotalHit
Test:coverage.infoLines:25.0 %82
Test Date:2024-04-30 13:17:26Functions:50.0 %21
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt9type_info4nameEv8
_ZNKSt9type_infoeqERKS_0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/typeinfo.gcov.html b/html/usr/include/c++/13/typeinfo.gcov.html new file mode 100644 index 0000000..49802cc --- /dev/null +++ b/html/usr/include/c++/13/typeinfo.gcov.html @@ -0,0 +1,331 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/typeinfo + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13 - typeinfo (source / functions)CoverageTotalHit
Test:coverage.infoLines:25.0 %82
Test Date:2024-04-30 13:17:26Functions:50.0 %21
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // RTTI support for -*- C++ -*-
+       2              : // Copyright (C) 1994-2023 Free Software Foundation, Inc.
+       3              : //
+       4              : // This file is part of GCC.
+       5              : //
+       6              : // GCC is free software; you can redistribute it and/or modify
+       7              : // it under the terms of the GNU General Public License as published by
+       8              : // the Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : //
+      11              : // GCC is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : //
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file typeinfo
+      26              :  *  This is a Standard C++ Library header.
+      27              :  */
+      28              : 
+      29              : #ifndef _TYPEINFO
+      30              : #define _TYPEINFO
+      31              : 
+      32              : #pragma GCC system_header
+      33              : 
+      34              : #include <bits/exception.h>
+      35              : #if __cplusplus >= 201103L
+      36              : #include <bits/hash_bytes.h>
+      37              : #endif
+      38              : 
+      39              : #pragma GCC visibility push(default)
+      40              : 
+      41              : #if __cplusplus >= 202100L
+      42              : # define __cpp_lib_constexpr_typeinfo 202106L
+      43              : #endif
+      44              : 
+      45              : extern "C++" {
+      46              : 
+      47              : namespace __cxxabiv1
+      48              : {
+      49              :   class __class_type_info;
+      50              : } // namespace __cxxabiv1
+      51              : 
+      52              : // Determine whether typeinfo names for the same type are merged (in which
+      53              : // case comparison can just compare pointers) or not (in which case strings
+      54              : // must be compared), and whether comparison is to be implemented inline or
+      55              : // not.  We used to do inline pointer comparison by default if weak symbols
+      56              : // are available, but even with weak symbols sometimes names are not merged
+      57              : // when objects are loaded with RTLD_LOCAL, so now we always use strcmp by
+      58              : // default.  For ABI compatibility, we do the strcmp inline if weak symbols
+      59              : // are available, and out-of-line if not.  Out-of-line pointer comparison
+      60              : // is used where the object files are to be portable to multiple systems,
+      61              : // some of which may not be able to use pointer comparison, but the
+      62              : // particular system for which libstdc++ is being built can use pointer
+      63              : // comparison; in particular for most ARM EABI systems, where the ABI
+      64              : // specifies out-of-line comparison.  The compiler's target configuration
+      65              : // can override the defaults by defining __GXX_TYPEINFO_EQUALITY_INLINE to
+      66              : // 1 or 0 to indicate whether or not comparison is inline, and
+      67              : // __GXX_MERGED_TYPEINFO_NAMES to 1 or 0 to indicate whether or not pointer
+      68              : // comparison can be used.
+      69              : 
+      70              : #ifndef __GXX_MERGED_TYPEINFO_NAMES
+      71              : // By default, typeinfo names are not merged.
+      72              : #define __GXX_MERGED_TYPEINFO_NAMES 0
+      73              : #endif
+      74              : 
+      75              : // By default follow the old inline rules to avoid ABI changes.
+      76              : #ifndef __GXX_TYPEINFO_EQUALITY_INLINE
+      77              : #  if !__GXX_WEAK__
+      78              : #    define __GXX_TYPEINFO_EQUALITY_INLINE 0
+      79              : #  else
+      80              : #    define __GXX_TYPEINFO_EQUALITY_INLINE 1
+      81              : #  endif
+      82              : #endif
+      83              : 
+      84              : namespace std
+      85              : {
+      86              :   /**
+      87              :    *  @brief  Part of RTTI.
+      88              :    *
+      89              :    *  The @c type_info class describes type information generated by
+      90              :    *  an implementation.
+      91              :   */
+      92              :   class type_info
+      93              :   {
+      94              :   public:
+      95              :     /** Destructor first. Being the first non-inline virtual function, this
+      96              :      *  controls in which translation unit the vtable is emitted. The
+      97              :      *  compiler makes use of that information to know where to emit
+      98              :      *  the runtime-mandated type_info structures in the new-abi.  */
+      99              :     virtual ~type_info();
+     100              : 
+     101              :     /** Returns an @e implementation-defined byte string; this is not
+     102              :      *  portable between compilers!  */
+     103            8 :     const char* name() const _GLIBCXX_NOEXCEPT
+     104            8 :     { return __name[0] == '*' ? __name + 1 : __name; }
+     105              : 
+     106              :     /** Returns true if `*this` precedes `__arg` in the implementation's
+     107              :      *  collation order.  */
+     108              :     bool before(const type_info& __arg) const _GLIBCXX_NOEXCEPT;
+     109              : 
+     110              :     _GLIBCXX23_CONSTEXPR
+     111              :     bool operator==(const type_info& __arg) const _GLIBCXX_NOEXCEPT;
+     112              : 
+     113              : #if __cpp_impl_three_way_comparison < 201907L
+     114              :     bool operator!=(const type_info& __arg) const _GLIBCXX_NOEXCEPT
+     115              :     { return !operator==(__arg); }
+     116              : #endif
+     117              : 
+     118              : #if __cplusplus >= 201103L
+     119              :     size_t hash_code() const noexcept
+     120              :     {
+     121              : #  if !__GXX_MERGED_TYPEINFO_NAMES
+     122              :       return _Hash_bytes(name(), __builtin_strlen(name()),
+     123              :                          static_cast<size_t>(0xc70f6907UL));
+     124              : #  else
+     125              :       return reinterpret_cast<size_t>(__name);
+     126              : #  endif
+     127              :     }
+     128              : #endif // C++11
+     129              : 
+     130              :     // Return true if this is a pointer type of some kind
+     131              :     virtual bool __is_pointer_p() const;
+     132              : 
+     133              :     // Return true if this is a function type
+     134              :     virtual bool __is_function_p() const;
+     135              : 
+     136              :     // Try and catch a thrown type. Store an adjusted pointer to the
+     137              :     // caught type in THR_OBJ. If THR_TYPE is not a pointer type, then
+     138              :     // THR_OBJ points to the thrown object. If THR_TYPE is a pointer
+     139              :     // type, then THR_OBJ is the pointer itself. OUTER indicates the
+     140              :     // number of outer pointers, and whether they were const
+     141              :     // qualified.
+     142              :     virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj,
+     143              :                             unsigned __outer) const;
+     144              : 
+     145              :     // Internally used during catch matching
+     146              :     virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target,
+     147              :                              void **__obj_ptr) const;
+     148              : 
+     149              :   protected:
+     150              :     const char *__name;
+     151              : 
+     152              :     explicit type_info(const char *__n): __name(__n) { }
+     153              : 
+     154              :   private:
+     155              :     // type_info objects cannot be copied.
+     156              : #if __cplusplus >= 201103L
+     157              :     type_info& operator=(const type_info&) = delete;
+     158              :     type_info(const type_info&) = delete;
+     159              : #else
+     160              :     type_info& operator=(const type_info&);
+     161              :     type_info(const type_info&);
+     162              : #endif
+     163              : 
+     164              : #if ! __GXX_TYPEINFO_EQUALITY_INLINE
+     165              :     bool __equal(const type_info&) const _GLIBCXX_NOEXCEPT;
+     166              : #endif
+     167              :   };
+     168              : 
+     169              : #if __GXX_TYPEINFO_EQUALITY_INLINE
+     170              :   inline bool
+     171              :   type_info::before(const type_info& __arg) const _GLIBCXX_NOEXCEPT
+     172              :   {
+     173              : #if !__GXX_MERGED_TYPEINFO_NAMES
+     174              :     // Even with the new abi, on systems that support dlopen
+     175              :     // we can run into cases where type_info names aren't merged,
+     176              :     // so we still need to do string comparison.
+     177              :     if (__name[0] != '*' || __arg.__name[0] != '*')
+     178              :       return __builtin_strcmp (__name, __arg.__name) < 0;
+     179              : #else
+     180              :     // On some targets we can rely on type_info's NTBS being unique,
+     181              :     // and therefore address comparisons are sufficient.
+     182              : #endif
+     183              : 
+     184              :     // In old abi, or when weak symbols are not supported, there can
+     185              :     // be multiple instances of a type_info object for one
+     186              :     // type. Uniqueness must use the __name value, not object address.
+     187              :     return __name < __arg.__name;
+     188              :   }
+     189              : #endif
+     190              : 
+     191              : #if __GXX_TYPEINFO_EQUALITY_INLINE || __cplusplus > 202002L
+     192              :   _GLIBCXX23_CONSTEXPR inline bool
+     193            0 :   type_info::operator==(const type_info& __arg) const _GLIBCXX_NOEXCEPT
+     194              :   {
+     195            0 :     if (std::__is_constant_evaluated())
+     196            0 :       return this == &__arg;
+     197              : 
+     198            0 :     if (__name == __arg.__name)
+     199            0 :       return true;
+     200              : 
+     201              : #if !__GXX_TYPEINFO_EQUALITY_INLINE
+     202              :     // ABI requires comparisons to be non-inline.
+     203              :     return __equal(__arg);
+     204              : #elif !__GXX_MERGED_TYPEINFO_NAMES
+     205              :     // Need to do string comparison.
+     206            0 :     return __name[0] != '*' && __builtin_strcmp (__name, __arg.name()) == 0;
+     207              : #else
+     208              :     return false;
+     209              : #endif
+     210              :   }
+     211              : # endif
+     212              : 
+     213              : 
+     214              :   /**
+     215              :    *  @brief  Thrown during incorrect typecasting.
+     216              :    *  @ingroup exceptions
+     217              :    *
+     218              :    *  If you attempt an invalid @c dynamic_cast expression, an instance of
+     219              :    *  this class (or something derived from this class) is thrown.  */
+     220              :   class bad_cast : public exception
+     221              :   {
+     222              :   public:
+     223              :     bad_cast() _GLIBCXX_USE_NOEXCEPT { }
+     224              : 
+     225              :     // This declaration is not useless:
+     226              :     // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
+     227              :     virtual ~bad_cast() _GLIBCXX_USE_NOEXCEPT;
+     228              : 
+     229              :     // See comment in eh_exception.cc.
+     230              :     virtual const char* what() const _GLIBCXX_USE_NOEXCEPT;
+     231              :   };
+     232              : 
+     233              :   /**
+     234              :    *  @brief Thrown when a NULL pointer in a @c typeid expression is used.
+     235              :    *  @ingroup exceptions
+     236              :    */
+     237              :   class bad_typeid : public exception
+     238              :   {
+     239              :   public:
+     240              :     bad_typeid () _GLIBCXX_USE_NOEXCEPT { }
+     241              : 
+     242              :     // This declaration is not useless:
+     243              :     // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
+     244              :     virtual ~bad_typeid() _GLIBCXX_USE_NOEXCEPT;
+     245              : 
+     246              :     // See comment in eh_exception.cc.
+     247              :     virtual const char* what() const _GLIBCXX_USE_NOEXCEPT;
+     248              :   };
+     249              : } // namespace std
+     250              : 
+     251              : } // extern "C++"
+     252              : 
+     253              : #pragma GCC visibility pop
+     254              : 
+     255              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h.func-c.html b/html/usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h.func-c.html new file mode 100644 index 0000000..b5c8049 --- /dev/null +++ b/html/usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/x86_64-redhat-linux/bits - c++config.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:66.7 %32
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt23__is_constant_evaluatedv3657091546
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h.func.html b/html/usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h.func.html new file mode 100644 index 0000000..ea8dbd4 --- /dev/null +++ b/html/usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/x86_64-redhat-linux/bits - c++config.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:66.7 %32
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZSt23__is_constant_evaluatedv3657091546
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h.gcov.html b/html/usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h.gcov.html new file mode 100644 index 0000000..1e74f40 --- /dev/null +++ b/html/usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h.gcov.html @@ -0,0 +1,4667 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/x86_64-redhat-linux/bits/c++config.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/x86_64-redhat-linux/bits - c++config.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:66.7 %32
Test Date:2024-04-30 13:17:26Functions:100.0 %11
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : #ifndef _CPP_CPPCONFIG_WRAPPER
+       2              : #define _CPP_CPPCONFIG_WRAPPER 1
+       3              : #include <bits/wordsize.h>
+       4              : #if __WORDSIZE == 32
+       5              : // Predefined symbols and macros -*- C++ -*-
+       6              : 
+       7              : // Copyright (C) 1997-2023 Free Software Foundation, Inc.
+       8              : //
+       9              : // This file is part of the GNU ISO C++ Library.  This library is free
+      10              : // software; you can redistribute it and/or modify it under the
+      11              : // terms of the GNU General Public License as published by the
+      12              : // Free Software Foundation; either version 3, or (at your option)
+      13              : // any later version.
+      14              : 
+      15              : // This library is distributed in the hope that it will be useful,
+      16              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      17              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      18              : // GNU General Public License for more details.
+      19              : 
+      20              : // Under Section 7 of GPL version 3, you are granted additional
+      21              : // permissions described in the GCC Runtime Library Exception, version
+      22              : // 3.1, as published by the Free Software Foundation.
+      23              : 
+      24              : // You should have received a copy of the GNU General Public License and
+      25              : // a copy of the GCC Runtime Library Exception along with this program;
+      26              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      27              : // <http://www.gnu.org/licenses/>.
+      28              : 
+      29              : /** @file bits/c++config.h
+      30              :  *  This is an internal header file, included by other library headers.
+      31              :  *  Do not attempt to use it directly. @headername{version}
+      32              :  */
+      33              : 
+      34              : #ifndef _GLIBCXX_CXX_CONFIG_H
+      35              : #define _GLIBCXX_CXX_CONFIG_H 1
+      36              : 
+      37              : // The major release number for the GCC release the C++ library belongs to.
+      38              : #define _GLIBCXX_RELEASE 13
+      39              : 
+      40              : // The datestamp of the C++ library in compressed ISO date format.
+      41              : #define __GLIBCXX__ 20240316
+      42              : 
+      43              : // Macros for various attributes.
+      44              : //   _GLIBCXX_PURE
+      45              : //   _GLIBCXX_CONST
+      46              : //   _GLIBCXX_NORETURN
+      47              : //   _GLIBCXX_NOTHROW
+      48              : //   _GLIBCXX_VISIBILITY
+      49              : #ifndef _GLIBCXX_PURE
+      50              : # define _GLIBCXX_PURE __attribute__ ((__pure__))
+      51              : #endif
+      52              : 
+      53              : #ifndef _GLIBCXX_CONST
+      54              : # define _GLIBCXX_CONST __attribute__ ((__const__))
+      55              : #endif
+      56              : 
+      57              : #ifndef _GLIBCXX_NORETURN
+      58              : # define _GLIBCXX_NORETURN __attribute__ ((__noreturn__))
+      59              : #endif
+      60              : 
+      61              : // See below for C++
+      62              : #ifndef _GLIBCXX_NOTHROW
+      63              : # ifndef __cplusplus
+      64              : #  define _GLIBCXX_NOTHROW __attribute__((__nothrow__))
+      65              : # endif
+      66              : #endif
+      67              : 
+      68              : // Macros for visibility attributes.
+      69              : //   _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
+      70              : //   _GLIBCXX_VISIBILITY
+      71              : # define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY 1
+      72              : 
+      73              : #if _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
+      74              : # define _GLIBCXX_VISIBILITY(V) __attribute__ ((__visibility__ (#V)))
+      75              : #else
+      76              : // If this is not supplied by the OS-specific or CPU-specific
+      77              : // headers included below, it will be defined to an empty default.
+      78              : # define _GLIBCXX_VISIBILITY(V) _GLIBCXX_PSEUDO_VISIBILITY(V)
+      79              : #endif
+      80              : 
+      81              : // Macros for deprecated attributes.
+      82              : //   _GLIBCXX_USE_DEPRECATED
+      83              : //   _GLIBCXX_DEPRECATED
+      84              : //   _GLIBCXX_DEPRECATED_SUGGEST( string-literal )
+      85              : //   _GLIBCXX11_DEPRECATED
+      86              : //   _GLIBCXX11_DEPRECATED_SUGGEST( string-literal )
+      87              : //   _GLIBCXX14_DEPRECATED
+      88              : //   _GLIBCXX14_DEPRECATED_SUGGEST( string-literal )
+      89              : //   _GLIBCXX17_DEPRECATED
+      90              : //   _GLIBCXX17_DEPRECATED_SUGGEST( string-literal )
+      91              : //   _GLIBCXX20_DEPRECATED
+      92              : //   _GLIBCXX20_DEPRECATED_SUGGEST( string-literal )
+      93              : //   _GLIBCXX23_DEPRECATED
+      94              : //   _GLIBCXX23_DEPRECATED_SUGGEST( string-literal )
+      95              : #ifndef _GLIBCXX_USE_DEPRECATED
+      96              : # define _GLIBCXX_USE_DEPRECATED 1
+      97              : #endif
+      98              : 
+      99              : #if defined(__DEPRECATED)
+     100              : # define _GLIBCXX_DEPRECATED __attribute__ ((__deprecated__))
+     101              : # define _GLIBCXX_DEPRECATED_SUGGEST(ALT) \
+     102              :   __attribute__ ((__deprecated__ ("use '" ALT "' instead")))
+     103              : #else
+     104              : # define _GLIBCXX_DEPRECATED
+     105              : # define _GLIBCXX_DEPRECATED_SUGGEST(ALT)
+     106              : #endif
+     107              : 
+     108              : #if defined(__DEPRECATED) && (__cplusplus >= 201103L)
+     109              : # define _GLIBCXX11_DEPRECATED _GLIBCXX_DEPRECATED
+     110              : # define _GLIBCXX11_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT)
+     111              : #else
+     112              : # define _GLIBCXX11_DEPRECATED
+     113              : # define _GLIBCXX11_DEPRECATED_SUGGEST(ALT)
+     114              : #endif
+     115              : 
+     116              : #if defined(__DEPRECATED) && (__cplusplus >= 201402L)
+     117              : # define _GLIBCXX14_DEPRECATED _GLIBCXX_DEPRECATED
+     118              : # define _GLIBCXX14_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT)
+     119              : #else
+     120              : # define _GLIBCXX14_DEPRECATED
+     121              : # define _GLIBCXX14_DEPRECATED_SUGGEST(ALT)
+     122              : #endif
+     123              : 
+     124              : #if defined(__DEPRECATED) && (__cplusplus >= 201703L)
+     125              : # define _GLIBCXX17_DEPRECATED [[__deprecated__]]
+     126              : # define _GLIBCXX17_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT)
+     127              : #else
+     128              : # define _GLIBCXX17_DEPRECATED
+     129              : # define _GLIBCXX17_DEPRECATED_SUGGEST(ALT)
+     130              : #endif
+     131              : 
+     132              : #if defined(__DEPRECATED) && (__cplusplus >= 202002L)
+     133              : # define _GLIBCXX20_DEPRECATED [[__deprecated__]]
+     134              : # define _GLIBCXX20_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT)
+     135              : #else
+     136              : # define _GLIBCXX20_DEPRECATED
+     137              : # define _GLIBCXX20_DEPRECATED_SUGGEST(ALT)
+     138              : #endif
+     139              : 
+     140              : #if defined(__DEPRECATED) && (__cplusplus >= 202100L)
+     141              : # define _GLIBCXX23_DEPRECATED [[__deprecated__]]
+     142              : # define _GLIBCXX23_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT)
+     143              : #else
+     144              : # define _GLIBCXX23_DEPRECATED
+     145              : # define _GLIBCXX23_DEPRECATED_SUGGEST(ALT)
+     146              : #endif
+     147              : 
+     148              : // Macros for ABI tag attributes.
+     149              : #ifndef _GLIBCXX_ABI_TAG_CXX11
+     150              : # define _GLIBCXX_ABI_TAG_CXX11 __attribute ((__abi_tag__ ("cxx11")))
+     151              : #endif
+     152              : 
+     153              : // Macro to warn about unused results.
+     154              : #if __cplusplus >= 201703L
+     155              : # define _GLIBCXX_NODISCARD [[__nodiscard__]]
+     156              : #else
+     157              : # define _GLIBCXX_NODISCARD
+     158              : #endif
+     159              : 
+     160              : 
+     161              : 
+     162              : #if __cplusplus
+     163              : 
+     164              : // Macro for constexpr, to support in mixed 03/0x mode.
+     165              : #ifndef _GLIBCXX_CONSTEXPR
+     166              : # if __cplusplus >= 201103L
+     167              : #  define _GLIBCXX_CONSTEXPR constexpr
+     168              : #  define _GLIBCXX_USE_CONSTEXPR constexpr
+     169              : # else
+     170              : #  define _GLIBCXX_CONSTEXPR
+     171              : #  define _GLIBCXX_USE_CONSTEXPR const
+     172              : # endif
+     173              : #endif
+     174              : 
+     175              : #ifndef _GLIBCXX14_CONSTEXPR
+     176              : # if __cplusplus >= 201402L
+     177              : #  define _GLIBCXX14_CONSTEXPR constexpr
+     178              : # else
+     179              : #  define _GLIBCXX14_CONSTEXPR
+     180              : # endif
+     181              : #endif
+     182              : 
+     183              : #ifndef _GLIBCXX17_CONSTEXPR
+     184              : # if __cplusplus >= 201703L
+     185              : #  define _GLIBCXX17_CONSTEXPR constexpr
+     186              : # else
+     187              : #  define _GLIBCXX17_CONSTEXPR
+     188              : # endif
+     189              : #endif
+     190              : 
+     191              : #ifndef _GLIBCXX20_CONSTEXPR
+     192              : # if __cplusplus >= 202002L
+     193              : #  define _GLIBCXX20_CONSTEXPR constexpr
+     194              : # else
+     195              : #  define _GLIBCXX20_CONSTEXPR
+     196              : # endif
+     197              : #endif
+     198              : 
+     199              : #ifndef _GLIBCXX23_CONSTEXPR
+     200              : # if __cplusplus >= 202100L
+     201              : #  define _GLIBCXX23_CONSTEXPR constexpr
+     202              : # else
+     203              : #  define _GLIBCXX23_CONSTEXPR
+     204              : # endif
+     205              : #endif
+     206              : 
+     207              : #ifndef _GLIBCXX17_INLINE
+     208              : # if __cplusplus >= 201703L
+     209              : #  define _GLIBCXX17_INLINE inline
+     210              : # else
+     211              : #  define _GLIBCXX17_INLINE
+     212              : # endif
+     213              : #endif
+     214              : 
+     215              : // Macro for noexcept, to support in mixed 03/0x mode.
+     216              : #ifndef _GLIBCXX_NOEXCEPT
+     217              : # if __cplusplus >= 201103L
+     218              : #  define _GLIBCXX_NOEXCEPT noexcept
+     219              : #  define _GLIBCXX_NOEXCEPT_IF(...) noexcept(__VA_ARGS__)
+     220              : #  define _GLIBCXX_USE_NOEXCEPT noexcept
+     221              : #  define _GLIBCXX_THROW(_EXC)
+     222              : # else
+     223              : #  define _GLIBCXX_NOEXCEPT
+     224              : #  define _GLIBCXX_NOEXCEPT_IF(...)
+     225              : #  define _GLIBCXX_USE_NOEXCEPT throw()
+     226              : #  define _GLIBCXX_THROW(_EXC) throw(_EXC)
+     227              : # endif
+     228              : #endif
+     229              : 
+     230              : #ifndef _GLIBCXX_NOTHROW
+     231              : # define _GLIBCXX_NOTHROW _GLIBCXX_USE_NOEXCEPT
+     232              : #endif
+     233              : 
+     234              : #ifndef _GLIBCXX_THROW_OR_ABORT
+     235              : # if __cpp_exceptions
+     236              : #  define _GLIBCXX_THROW_OR_ABORT(_EXC) (throw (_EXC))
+     237              : # else
+     238              : #  define _GLIBCXX_THROW_OR_ABORT(_EXC) (__builtin_abort())
+     239              : # endif
+     240              : #endif
+     241              : 
+     242              : #if __cpp_noexcept_function_type
+     243              : #define _GLIBCXX_NOEXCEPT_PARM , bool _NE
+     244              : #define _GLIBCXX_NOEXCEPT_QUAL noexcept (_NE)
+     245              : #else
+     246              : #define _GLIBCXX_NOEXCEPT_PARM
+     247              : #define _GLIBCXX_NOEXCEPT_QUAL
+     248              : #endif
+     249              : 
+     250              : // Macro for extern template, ie controlling template linkage via use
+     251              : // of extern keyword on template declaration. As documented in the g++
+     252              : // manual, it inhibits all implicit instantiations and is used
+     253              : // throughout the library to avoid multiple weak definitions for
+     254              : // required types that are already explicitly instantiated in the
+     255              : // library binary. This substantially reduces the binary size of
+     256              : // resulting executables.
+     257              : // Special case: _GLIBCXX_EXTERN_TEMPLATE == -1 disallows extern
+     258              : // templates only in basic_string, thus activating its debug-mode
+     259              : // checks even at -O0.
+     260              : # define _GLIBCXX_EXTERN_TEMPLATE 1
+     261              : 
+     262              : /*
+     263              :   Outline of libstdc++ namespaces.
+     264              : 
+     265              :   namespace std
+     266              :   {
+     267              :     namespace __debug { }
+     268              :     namespace __parallel { }
+     269              :     namespace __cxx1998 { }
+     270              : 
+     271              :     namespace __detail {
+     272              :       namespace __variant { }                           // C++17
+     273              :     }
+     274              : 
+     275              :     namespace rel_ops { }
+     276              : 
+     277              :     namespace tr1
+     278              :     {
+     279              :       namespace placeholders { }
+     280              :       namespace regex_constants { }
+     281              :       namespace __detail { }
+     282              :     }
+     283              : 
+     284              :     namespace tr2 { }
+     285              :     
+     286              :     namespace decimal { }
+     287              : 
+     288              :     namespace chrono { }                                // C++11
+     289              :     namespace placeholders { }                          // C++11
+     290              :     namespace regex_constants { }                       // C++11
+     291              :     namespace this_thread { }                           // C++11
+     292              :     inline namespace literals {                         // C++14
+     293              :       inline namespace chrono_literals { }              // C++14
+     294              :       inline namespace complex_literals { }             // C++14
+     295              :       inline namespace string_literals { }              // C++14
+     296              :       inline namespace string_view_literals { }         // C++17
+     297              :     }
+     298              :   }
+     299              : 
+     300              :   namespace abi { }
+     301              : 
+     302              :   namespace __gnu_cxx
+     303              :   {
+     304              :     namespace __detail { }
+     305              :   }
+     306              : 
+     307              :   For full details see:
+     308              :   http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html
+     309              : */
+     310              : namespace std
+     311              : {
+     312              :   typedef __SIZE_TYPE__         size_t;
+     313              :   typedef __PTRDIFF_TYPE__      ptrdiff_t;
+     314              : 
+     315              : #if __cplusplus >= 201103L
+     316              :   typedef decltype(nullptr)     nullptr_t;
+     317              : #endif
+     318              : 
+     319              : #pragma GCC visibility push(default)
+     320              :   // This allows the library to terminate without including all of <exception>
+     321              :   // and without making the declaration of std::terminate visible to users.
+     322              :   extern "C++" __attribute__ ((__noreturn__, __always_inline__))
+     323              :   inline void __terminate() _GLIBCXX_USE_NOEXCEPT
+     324              :   {
+     325              :     void terminate() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__noreturn__));
+     326              :     terminate();
+     327              :   }
+     328              : #pragma GCC visibility pop
+     329              : }
+     330              : 
+     331              : # define _GLIBCXX_USE_DUAL_ABI 1
+     332              : 
+     333              : #if ! _GLIBCXX_USE_DUAL_ABI
+     334              : // Ignore any pre-defined value of _GLIBCXX_USE_CXX11_ABI
+     335              : # undef _GLIBCXX_USE_CXX11_ABI
+     336              : #endif
+     337              : 
+     338              : #ifndef _GLIBCXX_USE_CXX11_ABI
+     339              : # define _GLIBCXX_USE_CXX11_ABI 1
+     340              : #endif
+     341              : 
+     342              : #if _GLIBCXX_USE_CXX11_ABI
+     343              : namespace std
+     344              : {
+     345              :   inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
+     346              : }
+     347              : namespace __gnu_cxx
+     348              : {
+     349              :   inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
+     350              : }
+     351              : # define _GLIBCXX_NAMESPACE_CXX11 __cxx11::
+     352              : # define _GLIBCXX_BEGIN_NAMESPACE_CXX11 namespace __cxx11 {
+     353              : # define _GLIBCXX_END_NAMESPACE_CXX11 }
+     354              : # define _GLIBCXX_DEFAULT_ABI_TAG _GLIBCXX_ABI_TAG_CXX11
+     355              : #else
+     356              : # define _GLIBCXX_NAMESPACE_CXX11
+     357              : # define _GLIBCXX_BEGIN_NAMESPACE_CXX11
+     358              : # define _GLIBCXX_END_NAMESPACE_CXX11
+     359              : # define _GLIBCXX_DEFAULT_ABI_TAG
+     360              : #endif
+     361              : 
+     362              : // Non-zero if inline namespaces are used for versioning the entire library.
+     363              : # define _GLIBCXX_INLINE_VERSION 0 
+     364              : 
+     365              : #if _GLIBCXX_INLINE_VERSION
+     366              : // Inline namespace for symbol versioning of (nearly) everything in std.
+     367              : # define _GLIBCXX_BEGIN_NAMESPACE_VERSION namespace __8 {
+     368              : # define _GLIBCXX_END_NAMESPACE_VERSION }
+     369              : // Unused when everything in std is versioned anyway.
+     370              : # define _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(X)
+     371              : # define _GLIBCXX_END_INLINE_ABI_NAMESPACE(X)
+     372              : 
+     373              : namespace std
+     374              : {
+     375              : inline _GLIBCXX_BEGIN_NAMESPACE_VERSION
+     376              : #if __cplusplus >= 201402L
+     377              :   inline namespace literals {
+     378              :     inline namespace chrono_literals { }
+     379              :     inline namespace complex_literals { }
+     380              :     inline namespace string_literals { }
+     381              : #if __cplusplus > 201402L
+     382              :     inline namespace string_view_literals { }
+     383              : #endif // C++17
+     384              :   }
+     385              : #endif // C++14
+     386              : _GLIBCXX_END_NAMESPACE_VERSION
+     387              : }
+     388              : 
+     389              : namespace __gnu_cxx
+     390              : {
+     391              : inline _GLIBCXX_BEGIN_NAMESPACE_VERSION
+     392              : _GLIBCXX_END_NAMESPACE_VERSION
+     393              : }
+     394              : 
+     395              : #else
+     396              : // Unused.
+     397              : # define _GLIBCXX_BEGIN_NAMESPACE_VERSION
+     398              : # define _GLIBCXX_END_NAMESPACE_VERSION
+     399              : // Used to version individual components, e.g. std::_V2::error_category.
+     400              : # define _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(X) inline namespace X {
+     401              : # define _GLIBCXX_END_INLINE_ABI_NAMESPACE(X)   } // inline namespace X
+     402              : #endif
+     403              : 
+     404              : // In the case that we don't have a hosted environment, we can't provide the
+     405              : // debugging mode.  Instead, we do our best and downgrade to assertions.
+     406              : #if defined(_GLIBCXX_DEBUG) && !__STDC_HOSTED__
+     407              : #undef _GLIBCXX_DEBUG
+     408              : #define _GLIBCXX_ASSERTIONS 1
+     409              : #endif
+     410              : 
+     411              : // Inline namespaces for special modes: debug, parallel.
+     412              : #if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PARALLEL)
+     413              : namespace std
+     414              : {
+     415              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+     416              : 
+     417              :   // Non-inline namespace for components replaced by alternates in active mode.
+     418              :   namespace __cxx1998
+     419              :   {
+     420              : # if _GLIBCXX_USE_CXX11_ABI
+     421              :   inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
+     422              : # endif
+     423              :   }
+     424              : 
+     425              : _GLIBCXX_END_NAMESPACE_VERSION
+     426              : 
+     427              :   // Inline namespace for debug mode.
+     428              : # ifdef _GLIBCXX_DEBUG
+     429              :   inline namespace __debug { }
+     430              : # endif
+     431              : 
+     432              :   // Inline namespaces for parallel mode.
+     433              : # ifdef _GLIBCXX_PARALLEL
+     434              :   inline namespace __parallel { }
+     435              : # endif
+     436              : }
+     437              : 
+     438              : // Check for invalid usage and unsupported mixed-mode use.
+     439              : # if defined(_GLIBCXX_DEBUG) && defined(_GLIBCXX_PARALLEL)
+     440              : #  error illegal use of multiple inlined namespaces
+     441              : # endif
+     442              : 
+     443              : // Check for invalid use due to lack for weak symbols.
+     444              : # if __NO_INLINE__ && !__GXX_WEAK__
+     445              : #  warning currently using inlined namespace mode which may fail \
+     446              :    without inlining due to lack of weak symbols
+     447              : # endif
+     448              : #endif
+     449              : 
+     450              : // Macros for namespace scope. Either namespace std:: or the name
+     451              : // of some nested namespace within it corresponding to the active mode.
+     452              : // _GLIBCXX_STD_A
+     453              : // _GLIBCXX_STD_C
+     454              : //
+     455              : // Macros for opening/closing conditional namespaces.
+     456              : // _GLIBCXX_BEGIN_NAMESPACE_ALGO
+     457              : // _GLIBCXX_END_NAMESPACE_ALGO
+     458              : // _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
+     459              : // _GLIBCXX_END_NAMESPACE_CONTAINER
+     460              : #if defined(_GLIBCXX_DEBUG)
+     461              : # define _GLIBCXX_STD_C __cxx1998
+     462              : # define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER \
+     463              :          namespace _GLIBCXX_STD_C {
+     464              : # define _GLIBCXX_END_NAMESPACE_CONTAINER }
+     465              : #else
+     466              : # define _GLIBCXX_STD_C std
+     467              : # define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
+     468              : # define _GLIBCXX_END_NAMESPACE_CONTAINER
+     469              : #endif
+     470              : 
+     471              : #ifdef _GLIBCXX_PARALLEL
+     472              : # define _GLIBCXX_STD_A __cxx1998
+     473              : # define _GLIBCXX_BEGIN_NAMESPACE_ALGO \
+     474              :          namespace _GLIBCXX_STD_A {
+     475              : # define _GLIBCXX_END_NAMESPACE_ALGO }
+     476              : #else
+     477              : # define _GLIBCXX_STD_A std
+     478              : # define _GLIBCXX_BEGIN_NAMESPACE_ALGO
+     479              : # define _GLIBCXX_END_NAMESPACE_ALGO
+     480              : #endif
+     481              : 
+     482              : // GLIBCXX_ABI Deprecated
+     483              : // Define if compatibility should be provided for -mlong-double-64.
+     484              : #undef _GLIBCXX_LONG_DOUBLE_COMPAT
+     485              : 
+     486              : // Define if compatibility should be provided for alternative 128-bit long
+     487              : // double formats. Not possible for Clang until __ibm128 is supported.
+     488              : #ifndef __clang__
+     489              : #undef _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT
+     490              : #endif
+     491              : 
+     492              : // Inline namespaces for long double 128 modes.
+     493              : #if defined _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT \
+     494              :   && defined __LONG_DOUBLE_IEEE128__
+     495              : namespace std
+     496              : {
+     497              :   // Namespaces for 128-bit IEEE long double format on 64-bit POWER LE.
+     498              :   inline namespace __gnu_cxx_ieee128 { }
+     499              :   inline namespace __gnu_cxx11_ieee128 { }
+     500              : }
+     501              : # define _GLIBCXX_NAMESPACE_LDBL __gnu_cxx_ieee128::
+     502              : # define _GLIBCXX_BEGIN_NAMESPACE_LDBL namespace __gnu_cxx_ieee128 {
+     503              : # define _GLIBCXX_END_NAMESPACE_LDBL }
+     504              : # define _GLIBCXX_NAMESPACE_LDBL_OR_CXX11 __gnu_cxx11_ieee128::
+     505              : # define _GLIBCXX_BEGIN_NAMESPACE_LDBL_OR_CXX11 namespace __gnu_cxx11_ieee128 {
+     506              : # define _GLIBCXX_END_NAMESPACE_LDBL_OR_CXX11 }
+     507              : 
+     508              : #else // _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && IEEE128
+     509              : 
+     510              : #if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
+     511              : namespace std
+     512              : {
+     513              :   inline namespace __gnu_cxx_ldbl128 { }
+     514              : }
+     515              : # define _GLIBCXX_NAMESPACE_LDBL __gnu_cxx_ldbl128::
+     516              : # define _GLIBCXX_BEGIN_NAMESPACE_LDBL namespace __gnu_cxx_ldbl128 {
+     517              : # define _GLIBCXX_END_NAMESPACE_LDBL }
+     518              : #else
+     519              : # define _GLIBCXX_NAMESPACE_LDBL
+     520              : # define _GLIBCXX_BEGIN_NAMESPACE_LDBL
+     521              : # define _GLIBCXX_END_NAMESPACE_LDBL
+     522              : #endif
+     523              : 
+     524              : #if _GLIBCXX_USE_CXX11_ABI
+     525              : # define _GLIBCXX_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_NAMESPACE_CXX11
+     526              : # define _GLIBCXX_BEGIN_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_BEGIN_NAMESPACE_CXX11
+     527              : # define _GLIBCXX_END_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_END_NAMESPACE_CXX11
+     528              : #else
+     529              : # define _GLIBCXX_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_NAMESPACE_LDBL
+     530              : # define _GLIBCXX_BEGIN_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_BEGIN_NAMESPACE_LDBL
+     531              : # define _GLIBCXX_END_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_END_NAMESPACE_LDBL
+     532              : #endif
+     533              : 
+     534              : #endif // _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && IEEE128
+     535              : 
+     536              : namespace std
+     537              : {
+     538              : #pragma GCC visibility push(default)
+     539              :   // Internal version of std::is_constant_evaluated().
+     540              :   // This can be used without checking if the compiler supports the feature.
+     541              :   // The macro _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED can be used to check if
+     542              :   // the compiler support is present to make this function work as expected.
+     543              :   _GLIBCXX_CONSTEXPR inline bool
+     544              :   __is_constant_evaluated() _GLIBCXX_NOEXCEPT
+     545              :   {
+     546              : #if __cpp_if_consteval >= 202106L
+     547              : # define _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED 1
+     548              :     if consteval { return true; } else { return false; }
+     549              : #elif __cplusplus >= 201103L && __has_builtin(__builtin_is_constant_evaluated)
+     550              : # define _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED 1
+     551              :     return __builtin_is_constant_evaluated();
+     552              : #else
+     553              :     return false;
+     554              : #endif
+     555              :   }
+     556              : #pragma GCC visibility pop
+     557              : }
+     558              : 
+     559              : // Debug Mode implies checking assertions.
+     560              : #if defined(_GLIBCXX_DEBUG) && !defined(_GLIBCXX_ASSERTIONS)
+     561              : # define _GLIBCXX_ASSERTIONS 1
+     562              : #endif
+     563              : 
+     564              : // Disable std::string explicit instantiation declarations in order to assert.
+     565              : #ifdef _GLIBCXX_ASSERTIONS
+     566              : # undef _GLIBCXX_EXTERN_TEMPLATE
+     567              : # define _GLIBCXX_EXTERN_TEMPLATE -1
+     568              : #endif
+     569              : 
+     570              : 
+     571              : #if _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED
+     572              : # define __glibcxx_constexpr_assert(cond) \
+     573              :   if (std::__is_constant_evaluated() && !bool(cond))    \
+     574              :     __builtin_unreachable() /* precondition violation detected! */
+     575              : #else
+     576              : # define __glibcxx_constexpr_assert(unevaluated)
+     577              : #endif
+     578              : 
+     579              : #define _GLIBCXX_VERBOSE_ASSERT 1
+     580              : 
+     581              : // Assert.
+     582              : #if defined(_GLIBCXX_ASSERTIONS) \
+     583              :   || defined(_GLIBCXX_PARALLEL) || defined(_GLIBCXX_PARALLEL_ASSERTIONS)
+     584              : # ifdef _GLIBCXX_VERBOSE_ASSERT
+     585              : namespace std
+     586              : {
+     587              : #pragma GCC visibility push(default)
+     588              :   // Avoid the use of assert, because we're trying to keep the <cassert>
+     589              :   // include out of the mix.
+     590              :   extern "C++" _GLIBCXX_NORETURN
+     591              :   void
+     592              :   __glibcxx_assert_fail(const char* __file, int __line,
+     593              :                         const char* __function, const char* __condition)
+     594              :   _GLIBCXX_NOEXCEPT;
+     595              : #pragma GCC visibility pop
+     596              : }
+     597              : #define __glibcxx_assert_impl(_Condition)                               \
+     598              :   if (__builtin_expect(!bool(_Condition), false))                       \
+     599              :   {                                                                     \
+     600              :     __glibcxx_constexpr_assert(false);                                  \
+     601              :     std::__glibcxx_assert_fail(__FILE__, __LINE__, __PRETTY_FUNCTION__, \
+     602              :                                #_Condition);                            \
+     603              :   }
+     604              : # else // ! VERBOSE_ASSERT
+     605              : # define __glibcxx_assert_impl(_Condition)              \
+     606              :   if (__builtin_expect(!bool(_Condition), false))       \
+     607              :   {                                                     \
+     608              :     __glibcxx_constexpr_assert(false);                  \
+     609              :     __builtin_abort();                                  \
+     610              :   }
+     611              : # endif
+     612              : #endif
+     613              : 
+     614              : #if defined(_GLIBCXX_ASSERTIONS)
+     615              : # define __glibcxx_assert(cond) \
+     616              :   do { __glibcxx_assert_impl(cond); } while (false)
+     617              : #else
+     618              : # define __glibcxx_assert(cond) \
+     619              :   do { __glibcxx_constexpr_assert(cond); } while (false)
+     620              : #endif
+     621              : 
+     622              : // Macro indicating that TSAN is in use.
+     623              : #if __SANITIZE_THREAD__
+     624              : #  define _GLIBCXX_TSAN 1
+     625              : #elif defined __has_feature
+     626              : # if __has_feature(thread_sanitizer)
+     627              : #  define _GLIBCXX_TSAN 1
+     628              : # endif
+     629              : #endif
+     630              : 
+     631              : // Macros for race detectors.
+     632              : // _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A) and
+     633              : // _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) should be used to explain
+     634              : // atomic (lock-free) synchronization to race detectors:
+     635              : // the race detector will infer a happens-before arc from the former to the
+     636              : // latter when they share the same argument pointer.
+     637              : //
+     638              : // The most frequent use case for these macros (and the only case in the
+     639              : // current implementation of the library) is atomic reference counting:
+     640              : //   void _M_remove_reference()
+     641              : //   {
+     642              : //     _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&this->_M_refcount);
+     643              : //     if (__gnu_cxx::__exchange_and_add_dispatch(&this->_M_refcount, -1) <= 0)
+     644              : //       {
+     645              : //         _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&this->_M_refcount);
+     646              : //         _M_destroy(__a);
+     647              : //       }
+     648              : //   }
+     649              : // The annotations in this example tell the race detector that all memory
+     650              : // accesses occurred when the refcount was positive do not race with
+     651              : // memory accesses which occurred after the refcount became zero.
+     652              : #ifndef _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE
+     653              : # define  _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A)
+     654              : #endif
+     655              : #ifndef _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER
+     656              : # define  _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A)
+     657              : #endif
+     658              : 
+     659              : // Macros for C linkage: define extern "C" linkage only when using C++.
+     660              : # define _GLIBCXX_BEGIN_EXTERN_C extern "C" {
+     661              : # define _GLIBCXX_END_EXTERN_C }
+     662              : 
+     663              : # define _GLIBCXX_USE_ALLOCATOR_NEW 1
+     664              : 
+     665              : #ifdef __SIZEOF_INT128__
+     666              : #if ! defined __GLIBCXX_TYPE_INT_N_0 && ! defined __STRICT_ANSI__
+     667              : // If __int128 is supported, we expect __GLIBCXX_TYPE_INT_N_0 to be defined
+     668              : // unless the compiler is in strict mode. If it's not defined and the strict
+     669              : // macro is not defined, something is wrong.
+     670              : #warning "__STRICT_ANSI__ seems to have been undefined; this is not supported"
+     671              : #endif
+     672              : #endif
+     673              : 
+     674              : #else // !__cplusplus
+     675              : # define _GLIBCXX_BEGIN_EXTERN_C
+     676              : # define _GLIBCXX_END_EXTERN_C
+     677              : #endif
+     678              : 
+     679              : 
+     680              : // First includes.
+     681              : 
+     682              : // Pick up any OS-specific definitions.
+     683              : #include <bits/os_defines.h>
+     684              : 
+     685              : // Pick up any CPU-specific definitions.
+     686              : #include <bits/cpu_defines.h>
+     687              : 
+     688              : // If platform uses neither visibility nor psuedo-visibility,
+     689              : // specify empty default for namespace annotation macros.
+     690              : #ifndef _GLIBCXX_PSEUDO_VISIBILITY
+     691              : # define _GLIBCXX_PSEUDO_VISIBILITY(V)
+     692              : #endif
+     693              : 
+     694              : // Certain function definitions that are meant to be overridable from
+     695              : // user code are decorated with this macro.  For some targets, this
+     696              : // macro causes these definitions to be weak.
+     697              : #ifndef _GLIBCXX_WEAK_DEFINITION
+     698              : # define _GLIBCXX_WEAK_DEFINITION
+     699              : #endif
+     700              : 
+     701              : // By default, we assume that __GXX_WEAK__ also means that there is support
+     702              : // for declaring functions as weak while not defining such functions.  This
+     703              : // allows for referring to functions provided by other libraries (e.g.,
+     704              : // libitm) without depending on them if the respective features are not used.
+     705              : #ifndef _GLIBCXX_USE_WEAK_REF
+     706              : # define _GLIBCXX_USE_WEAK_REF __GXX_WEAK__
+     707              : #endif
+     708              : 
+     709              : // Conditionally enable annotations for the Transactional Memory TS on C++11.
+     710              : // Most of the following conditions are due to limitations in the current
+     711              : // implementation.
+     712              : #if __cplusplus >= 201103L && _GLIBCXX_USE_CXX11_ABI                 \
+     713              :   && _GLIBCXX_USE_DUAL_ABI && __cpp_transactional_memory >= 201500L  \
+     714              :   &&  !_GLIBCXX_FULLY_DYNAMIC_STRING && _GLIBCXX_USE_WEAK_REF           \
+     715              :   && _GLIBCXX_USE_ALLOCATOR_NEW
+     716              : #define _GLIBCXX_TXN_SAFE transaction_safe
+     717              : #define _GLIBCXX_TXN_SAFE_DYN transaction_safe_dynamic
+     718              : #else
+     719              : #define _GLIBCXX_TXN_SAFE
+     720              : #define _GLIBCXX_TXN_SAFE_DYN
+     721              : #endif
+     722              : 
+     723              : #if __cplusplus > 201402L
+     724              : // In C++17 mathematical special functions are in namespace std.
+     725              : # define _GLIBCXX_USE_STD_SPEC_FUNCS 1
+     726              : #elif __cplusplus >= 201103L && __STDCPP_WANT_MATH_SPEC_FUNCS__ != 0
+     727              : // For C++11 and C++14 they are in namespace std when requested.
+     728              : # define _GLIBCXX_USE_STD_SPEC_FUNCS 1
+     729              : #endif
+     730              : 
+     731              : // The remainder of the prewritten config is automatic; all the
+     732              : // user hooks are listed above.
+     733              : 
+     734              : // Create a boolean flag to be used to determine if --fast-math is set.
+     735              : #ifdef __FAST_MATH__
+     736              : # define _GLIBCXX_FAST_MATH 1
+     737              : #else
+     738              : # define _GLIBCXX_FAST_MATH 0
+     739              : #endif
+     740              : 
+     741              : // This marks string literals in header files to be extracted for eventual
+     742              : // translation.  It is primarily used for messages in thrown exceptions; see
+     743              : // src/functexcept.cc.  We use __N because the more traditional _N is used
+     744              : // for something else under certain OSes (see BADNAMES).
+     745              : #define __N(msgid)     (msgid)
+     746              : 
+     747              : // For example, <windows.h> is known to #define min and max as macros...
+     748              : #undef min
+     749              : #undef max
+     750              : 
+     751              : // N.B. these _GLIBCXX_USE_C99_XXX macros are defined unconditionally
+     752              : // so they should be tested with #if not with #ifdef.
+     753              : #if __cplusplus >= 201103L
+     754              : # ifndef _GLIBCXX_USE_C99_MATH
+     755              : #  define _GLIBCXX_USE_C99_MATH _GLIBCXX11_USE_C99_MATH
+     756              : # endif
+     757              : # ifndef _GLIBCXX_USE_C99_COMPLEX
+     758              : # define _GLIBCXX_USE_C99_COMPLEX _GLIBCXX11_USE_C99_COMPLEX
+     759              : # endif
+     760              : # ifndef _GLIBCXX_USE_C99_STDIO
+     761              : # define _GLIBCXX_USE_C99_STDIO _GLIBCXX11_USE_C99_STDIO
+     762              : # endif
+     763              : # ifndef _GLIBCXX_USE_C99_STDLIB
+     764              : # define _GLIBCXX_USE_C99_STDLIB _GLIBCXX11_USE_C99_STDLIB
+     765              : # endif
+     766              : # ifndef _GLIBCXX_USE_C99_WCHAR
+     767              : # define _GLIBCXX_USE_C99_WCHAR _GLIBCXX11_USE_C99_WCHAR
+     768              : # endif
+     769              : #else
+     770              : # ifndef _GLIBCXX_USE_C99_MATH
+     771              : #  define _GLIBCXX_USE_C99_MATH _GLIBCXX98_USE_C99_MATH
+     772              : # endif
+     773              : # ifndef _GLIBCXX_USE_C99_COMPLEX
+     774              : # define _GLIBCXX_USE_C99_COMPLEX _GLIBCXX98_USE_C99_COMPLEX
+     775              : # endif
+     776              : # ifndef _GLIBCXX_USE_C99_STDIO
+     777              : # define _GLIBCXX_USE_C99_STDIO _GLIBCXX98_USE_C99_STDIO
+     778              : # endif
+     779              : # ifndef _GLIBCXX_USE_C99_STDLIB
+     780              : # define _GLIBCXX_USE_C99_STDLIB _GLIBCXX98_USE_C99_STDLIB
+     781              : # endif
+     782              : # ifndef _GLIBCXX_USE_C99_WCHAR
+     783              : # define _GLIBCXX_USE_C99_WCHAR _GLIBCXX98_USE_C99_WCHAR
+     784              : # endif
+     785              : #endif
+     786              : 
+     787              : // Unless explicitly specified, enable char8_t extensions only if the core
+     788              : // language char8_t feature macro is defined.
+     789              : #ifndef _GLIBCXX_USE_CHAR8_T
+     790              : # ifdef __cpp_char8_t
+     791              : #  define _GLIBCXX_USE_CHAR8_T 1
+     792              : # endif
+     793              : #endif
+     794              : #ifdef _GLIBCXX_USE_CHAR8_T
+     795              : # define __cpp_lib_char8_t 201907L
+     796              : #endif
+     797              : 
+     798              : /* Define if __float128 is supported on this host.  */
+     799              : #if defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__)
+     800              : /* For powerpc64 don't use __float128 when it's the same type as long double. */
+     801              : # if !(defined(_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT) && defined(__LONG_DOUBLE_IEEE128__))
+     802              : #  define _GLIBCXX_USE_FLOAT128 1
+     803              : # endif
+     804              : #endif
+     805              : 
+     806              : // Define if float has the IEEE binary32 format.
+     807              : #if __FLT_MANT_DIG__ == 24 \
+     808              :   && __FLT_MIN_EXP__ == -125 \
+     809              :   && __FLT_MAX_EXP__ == 128
+     810              : # define _GLIBCXX_FLOAT_IS_IEEE_BINARY32 1
+     811              : #endif
+     812              : 
+     813              : // Define if double has the IEEE binary64 format.
+     814              : #if __DBL_MANT_DIG__ == 53 \
+     815              :   && __DBL_MIN_EXP__ == -1021 \
+     816              :   && __DBL_MAX_EXP__ == 1024
+     817              : # define _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 1
+     818              : #endif
+     819              : 
+     820              : // Define if long double has the IEEE binary128 format.
+     821              : #if __LDBL_MANT_DIG__ == 113 \
+     822              :   && __LDBL_MIN_EXP__ == -16381 \
+     823              :   && __LDBL_MAX_EXP__ == 16384
+     824              : # define _GLIBCXX_LDOUBLE_IS_IEEE_BINARY128 1
+     825              : #endif
+     826              : 
+     827              : #ifdef __STDCPP_BFLOAT16_T__
+     828              : namespace __gnu_cxx
+     829              : {
+     830              :   using __bfloat16_t = decltype(0.0bf16);
+     831              : }
+     832              : #endif
+     833              : 
+     834              : #ifdef __has_builtin
+     835              : # ifdef __is_identifier
+     836              : // Intel and older Clang require !__is_identifier for some built-ins:
+     837              : #  define _GLIBCXX_HAS_BUILTIN(B) __has_builtin(B) || ! __is_identifier(B)
+     838              : # else
+     839              : #  define _GLIBCXX_HAS_BUILTIN(B) __has_builtin(B)
+     840              : # endif
+     841              : #endif
+     842              : 
+     843              : #if _GLIBCXX_HAS_BUILTIN(__has_unique_object_representations)
+     844              : # define _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP 1
+     845              : #endif
+     846              : 
+     847              : #if _GLIBCXX_HAS_BUILTIN(__is_aggregate)
+     848              : # define _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE 1
+     849              : #endif
+     850              : 
+     851              : #if _GLIBCXX_HAS_BUILTIN(__is_same)
+     852              : #  define _GLIBCXX_HAVE_BUILTIN_IS_SAME 1
+     853              : #endif
+     854              : 
+     855              : #if _GLIBCXX_HAS_BUILTIN(__builtin_launder)
+     856              : # define _GLIBCXX_HAVE_BUILTIN_LAUNDER 1
+     857              : #endif
+     858              : 
+     859              : #undef _GLIBCXX_HAS_BUILTIN
+     860              : 
+     861              : // Mark code that should be ignored by the compiler, but seen by Doxygen.
+     862              : #define _GLIBCXX_DOXYGEN_ONLY(X)
+     863              : 
+     864              : // PSTL configuration
+     865              : 
+     866              : #if __cplusplus >= 201703L
+     867              : // This header is not installed for freestanding:
+     868              : #if __has_include(<pstl/pstl_config.h>)
+     869              : // Preserved here so we have some idea which version of upstream we've pulled in
+     870              : // #define PSTL_VERSION 9000
+     871              : 
+     872              : // For now this defaults to being based on the presence of Thread Building Blocks
+     873              : # ifndef _GLIBCXX_USE_TBB_PAR_BACKEND
+     874              : #  define _GLIBCXX_USE_TBB_PAR_BACKEND __has_include(<tbb/tbb.h>)
+     875              : # endif
+     876              : // This section will need some rework when a new (default) backend type is added
+     877              : # if _GLIBCXX_USE_TBB_PAR_BACKEND
+     878              : #  define _PSTL_PAR_BACKEND_TBB
+     879              : # else
+     880              : #  define _PSTL_PAR_BACKEND_SERIAL
+     881              : # endif
+     882              : 
+     883              : # define _PSTL_ASSERT(_Condition) __glibcxx_assert(_Condition)
+     884              : # define _PSTL_ASSERT_MSG(_Condition, _Message) __glibcxx_assert(_Condition)
+     885              : 
+     886              : #include <pstl/pstl_config.h>
+     887              : #endif // __has_include
+     888              : #endif // C++17
+     889              : 
+     890              : // End of prewritten config; the settings discovered at configure time follow.
+     891              : /* config.h.  Generated from config.h.in by configure.  */
+     892              : /* config.h.in.  Generated from configure.ac by autoheader.  */
+     893              : 
+     894              : /* Define to 1 if you have the `acosf' function. */
+     895              : #define _GLIBCXX_HAVE_ACOSF 1
+     896              : 
+     897              : /* Define to 1 if you have the `acosl' function. */
+     898              : #define _GLIBCXX_HAVE_ACOSL 1
+     899              : 
+     900              : /* Define to 1 if you have the `aligned_alloc' function. */
+     901              : #define _GLIBCXX_HAVE_ALIGNED_ALLOC 1
+     902              : 
+     903              : /* Define if arc4random is available in <stdlib.h>. */
+     904              : #define _GLIBCXX_HAVE_ARC4RANDOM 1
+     905              : 
+     906              : /* Define to 1 if you have the <arpa/inet.h> header file. */
+     907              : #define _GLIBCXX_HAVE_ARPA_INET_H 1
+     908              : 
+     909              : /* Define to 1 if you have the `asinf' function. */
+     910              : #define _GLIBCXX_HAVE_ASINF 1
+     911              : 
+     912              : /* Define to 1 if you have the `asinl' function. */
+     913              : #define _GLIBCXX_HAVE_ASINL 1
+     914              : 
+     915              : /* Define to 1 if the target assembler supports .symver directive. */
+     916              : #define _GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE 1
+     917              : 
+     918              : /* Define to 1 if you have the `atan2f' function. */
+     919              : #define _GLIBCXX_HAVE_ATAN2F 1
+     920              : 
+     921              : /* Define to 1 if you have the `atan2l' function. */
+     922              : #define _GLIBCXX_HAVE_ATAN2L 1
+     923              : 
+     924              : /* Define to 1 if you have the `atanf' function. */
+     925              : #define _GLIBCXX_HAVE_ATANF 1
+     926              : 
+     927              : /* Define to 1 if you have the `atanl' function. */
+     928              : #define _GLIBCXX_HAVE_ATANL 1
+     929              : 
+     930              : /* Defined if shared_ptr reference counting should use atomic operations. */
+     931              : #define _GLIBCXX_HAVE_ATOMIC_LOCK_POLICY 1
+     932              : 
+     933              : /* Define to 1 if you have the `at_quick_exit' function. */
+     934              : #define _GLIBCXX_HAVE_AT_QUICK_EXIT 1
+     935              : 
+     936              : /* Define to 1 if the target assembler supports thread-local storage. */
+     937              : /* #undef _GLIBCXX_HAVE_CC_TLS */
+     938              : 
+     939              : /* Define to 1 if you have the `ceilf' function. */
+     940              : #define _GLIBCXX_HAVE_CEILF 1
+     941              : 
+     942              : /* Define to 1 if you have the `ceill' function. */
+     943              : #define _GLIBCXX_HAVE_CEILL 1
+     944              : 
+     945              : /* Define to 1 if you have the <complex.h> header file. */
+     946              : #define _GLIBCXX_HAVE_COMPLEX_H 1
+     947              : 
+     948              : /* Define to 1 if you have the `cosf' function. */
+     949              : #define _GLIBCXX_HAVE_COSF 1
+     950              : 
+     951              : /* Define to 1 if you have the `coshf' function. */
+     952              : #define _GLIBCXX_HAVE_COSHF 1
+     953              : 
+     954              : /* Define to 1 if you have the `coshl' function. */
+     955              : #define _GLIBCXX_HAVE_COSHL 1
+     956              : 
+     957              : /* Define to 1 if you have the `cosl' function. */
+     958              : #define _GLIBCXX_HAVE_COSL 1
+     959              : 
+     960              : /* Define to 1 if you have the declaration of `strnlen', and to 0 if you
+     961              :    don't. */
+     962              : #define _GLIBCXX_HAVE_DECL_STRNLEN 1
+     963              : 
+     964              : /* Define to 1 if you have the <dirent.h> header file. */
+     965              : #define _GLIBCXX_HAVE_DIRENT_H 1
+     966              : 
+     967              : /* Define if dirfd is available in <dirent.h>. */
+     968              : #define _GLIBCXX_HAVE_DIRFD 1
+     969              : 
+     970              : /* Define to 1 if you have the <dlfcn.h> header file. */
+     971              : #define _GLIBCXX_HAVE_DLFCN_H 1
+     972              : 
+     973              : /* Define to 1 if you have the <endian.h> header file. */
+     974              : #define _GLIBCXX_HAVE_ENDIAN_H 1
+     975              : 
+     976              : /* Define to 1 if GCC 4.6 supported std::exception_ptr for the target */
+     977              : #define _GLIBCXX_HAVE_EXCEPTION_PTR_SINCE_GCC46 1
+     978              : 
+     979              : /* Define to 1 if you have the <execinfo.h> header file. */
+     980              : #define _GLIBCXX_HAVE_EXECINFO_H 1
+     981              : 
+     982              : /* Define to 1 if you have the `expf' function. */
+     983              : #define _GLIBCXX_HAVE_EXPF 1
+     984              : 
+     985              : /* Define to 1 if you have the `expl' function. */
+     986              : #define _GLIBCXX_HAVE_EXPL 1
+     987              : 
+     988              : /* Define to 1 if you have the `fabsf' function. */
+     989              : #define _GLIBCXX_HAVE_FABSF 1
+     990              : 
+     991              : /* Define to 1 if you have the `fabsl' function. */
+     992              : #define _GLIBCXX_HAVE_FABSL 1
+     993              : 
+     994              : /* Define to 1 if you have the <fcntl.h> header file. */
+     995              : #define _GLIBCXX_HAVE_FCNTL_H 1
+     996              : 
+     997              : /* Define if fdopendir is available in <dirent.h>. */
+     998              : #define _GLIBCXX_HAVE_FDOPENDIR 1
+     999              : 
+    1000              : /* Define to 1 if you have the <fenv.h> header file. */
+    1001              : #define _GLIBCXX_HAVE_FENV_H 1
+    1002              : 
+    1003              : /* Define to 1 if you have the `finite' function. */
+    1004              : #define _GLIBCXX_HAVE_FINITE 1
+    1005              : 
+    1006              : /* Define to 1 if you have the `finitef' function. */
+    1007              : #define _GLIBCXX_HAVE_FINITEF 1
+    1008              : 
+    1009              : /* Define to 1 if you have the `finitel' function. */
+    1010              : #define _GLIBCXX_HAVE_FINITEL 1
+    1011              : 
+    1012              : /* Define to 1 if you have the <float.h> header file. */
+    1013              : #define _GLIBCXX_HAVE_FLOAT_H 1
+    1014              : 
+    1015              : /* Define to 1 if you have the `floorf' function. */
+    1016              : #define _GLIBCXX_HAVE_FLOORF 1
+    1017              : 
+    1018              : /* Define to 1 if you have the `floorl' function. */
+    1019              : #define _GLIBCXX_HAVE_FLOORL 1
+    1020              : 
+    1021              : /* Define to 1 if you have the `fmodf' function. */
+    1022              : #define _GLIBCXX_HAVE_FMODF 1
+    1023              : 
+    1024              : /* Define to 1 if you have the `fmodl' function. */
+    1025              : #define _GLIBCXX_HAVE_FMODL 1
+    1026              : 
+    1027              : /* Define to 1 if you have the `fpclass' function. */
+    1028              : /* #undef _GLIBCXX_HAVE_FPCLASS */
+    1029              : 
+    1030              : /* Define to 1 if you have the <fp.h> header file. */
+    1031              : /* #undef _GLIBCXX_HAVE_FP_H */
+    1032              : 
+    1033              : /* Define to 1 if you have the `frexpf' function. */
+    1034              : #define _GLIBCXX_HAVE_FREXPF 1
+    1035              : 
+    1036              : /* Define to 1 if you have the `frexpl' function. */
+    1037              : #define _GLIBCXX_HAVE_FREXPL 1
+    1038              : 
+    1039              : /* Define if getentropy is available in <unistd.h>. */
+    1040              : #define _GLIBCXX_HAVE_GETENTROPY 1
+    1041              : 
+    1042              : /* Define if _Unwind_GetIPInfo is available. */
+    1043              : #define _GLIBCXX_HAVE_GETIPINFO 1
+    1044              : 
+    1045              : /* Define if gets is available in <stdio.h> before C++14. */
+    1046              : #define _GLIBCXX_HAVE_GETS 1
+    1047              : 
+    1048              : /* Define to 1 if you have the `hypot' function. */
+    1049              : #define _GLIBCXX_HAVE_HYPOT 1
+    1050              : 
+    1051              : /* Define to 1 if you have the `hypotf' function. */
+    1052              : #define _GLIBCXX_HAVE_HYPOTF 1
+    1053              : 
+    1054              : /* Define to 1 if you have the `hypotl' function. */
+    1055              : #define _GLIBCXX_HAVE_HYPOTL 1
+    1056              : 
+    1057              : /* Define if you have the iconv() function. */
+    1058              : #define _GLIBCXX_HAVE_ICONV 1
+    1059              : 
+    1060              : /* Define to 1 if you have the <ieeefp.h> header file. */
+    1061              : /* #undef _GLIBCXX_HAVE_IEEEFP_H */
+    1062              : 
+    1063              : /* Define to 1 if you have the <inttypes.h> header file. */
+    1064              : #define _GLIBCXX_HAVE_INTTYPES_H 1
+    1065              : 
+    1066              : /* Define to 1 if you have the `isinf' function. */
+    1067              : /* #undef _GLIBCXX_HAVE_ISINF */
+    1068              : 
+    1069              : /* Define to 1 if you have the `isinff' function. */
+    1070              : #define _GLIBCXX_HAVE_ISINFF 1
+    1071              : 
+    1072              : /* Define to 1 if you have the `isinfl' function. */
+    1073              : #define _GLIBCXX_HAVE_ISINFL 1
+    1074              : 
+    1075              : /* Define to 1 if you have the `isnan' function. */
+    1076              : /* #undef _GLIBCXX_HAVE_ISNAN */
+    1077              : 
+    1078              : /* Define to 1 if you have the `isnanf' function. */
+    1079              : #define _GLIBCXX_HAVE_ISNANF 1
+    1080              : 
+    1081              : /* Define to 1 if you have the `isnanl' function. */
+    1082              : #define _GLIBCXX_HAVE_ISNANL 1
+    1083              : 
+    1084              : /* Defined if iswblank exists. */
+    1085              : #define _GLIBCXX_HAVE_ISWBLANK 1
+    1086              : 
+    1087              : /* Define if LC_MESSAGES is available in <locale.h>. */
+    1088              : #define _GLIBCXX_HAVE_LC_MESSAGES 1
+    1089              : 
+    1090              : /* Define to 1 if you have the `ldexpf' function. */
+    1091              : #define _GLIBCXX_HAVE_LDEXPF 1
+    1092              : 
+    1093              : /* Define to 1 if you have the `ldexpl' function. */
+    1094              : #define _GLIBCXX_HAVE_LDEXPL 1
+    1095              : 
+    1096              : /* Define to 1 if you have the <libintl.h> header file. */
+    1097              : #define _GLIBCXX_HAVE_LIBINTL_H 1
+    1098              : 
+    1099              : /* Only used in build directory testsuite_hooks.h. */
+    1100              : #define _GLIBCXX_HAVE_LIMIT_AS 1
+    1101              : 
+    1102              : /* Only used in build directory testsuite_hooks.h. */
+    1103              : #define _GLIBCXX_HAVE_LIMIT_DATA 1
+    1104              : 
+    1105              : /* Only used in build directory testsuite_hooks.h. */
+    1106              : #define _GLIBCXX_HAVE_LIMIT_FSIZE 1
+    1107              : 
+    1108              : /* Only used in build directory testsuite_hooks.h. */
+    1109              : #define _GLIBCXX_HAVE_LIMIT_RSS 1
+    1110              : 
+    1111              : /* Only used in build directory testsuite_hooks.h. */
+    1112              : #define _GLIBCXX_HAVE_LIMIT_VMEM 0
+    1113              : 
+    1114              : /* Define if link is available in <unistd.h>. */
+    1115              : #define _GLIBCXX_HAVE_LINK 1
+    1116              : 
+    1117              : /* Define to 1 if you have the <link.h> header file. */
+    1118              : #define _GLIBCXX_HAVE_LINK_H 1
+    1119              : 
+    1120              : /* Define if futex syscall is available. */
+    1121              : #define _GLIBCXX_HAVE_LINUX_FUTEX 1
+    1122              : 
+    1123              : /* Define to 1 if you have the <linux/random.h> header file. */
+    1124              : #define _GLIBCXX_HAVE_LINUX_RANDOM_H 1
+    1125              : 
+    1126              : /* Define to 1 if you have the <linux/types.h> header file. */
+    1127              : #define _GLIBCXX_HAVE_LINUX_TYPES_H 1
+    1128              : 
+    1129              : /* Define to 1 if you have the <locale.h> header file. */
+    1130              : #define _GLIBCXX_HAVE_LOCALE_H 1
+    1131              : 
+    1132              : /* Define to 1 if you have the `log10f' function. */
+    1133              : #define _GLIBCXX_HAVE_LOG10F 1
+    1134              : 
+    1135              : /* Define to 1 if you have the `log10l' function. */
+    1136              : #define _GLIBCXX_HAVE_LOG10L 1
+    1137              : 
+    1138              : /* Define to 1 if you have the `logf' function. */
+    1139              : #define _GLIBCXX_HAVE_LOGF 1
+    1140              : 
+    1141              : /* Define to 1 if you have the `logl' function. */
+    1142              : #define _GLIBCXX_HAVE_LOGL 1
+    1143              : 
+    1144              : /* Define to 1 if you have the <machine/endian.h> header file. */
+    1145              : /* #undef _GLIBCXX_HAVE_MACHINE_ENDIAN_H */
+    1146              : 
+    1147              : /* Define to 1 if you have the <machine/param.h> header file. */
+    1148              : /* #undef _GLIBCXX_HAVE_MACHINE_PARAM_H */
+    1149              : 
+    1150              : /* Define if mbstate_t exists in wchar.h. */
+    1151              : #define _GLIBCXX_HAVE_MBSTATE_T 1
+    1152              : 
+    1153              : /* Define to 1 if you have the `memalign' function. */
+    1154              : #define _GLIBCXX_HAVE_MEMALIGN 1
+    1155              : 
+    1156              : /* Define to 1 if you have the <memory.h> header file. */
+    1157              : #define _GLIBCXX_HAVE_MEMORY_H 1
+    1158              : 
+    1159              : /* Define to 1 if you have the `modf' function. */
+    1160              : #define _GLIBCXX_HAVE_MODF 1
+    1161              : 
+    1162              : /* Define to 1 if you have the `modff' function. */
+    1163              : #define _GLIBCXX_HAVE_MODFF 1
+    1164              : 
+    1165              : /* Define to 1 if you have the `modfl' function. */
+    1166              : #define _GLIBCXX_HAVE_MODFL 1
+    1167              : 
+    1168              : /* Define to 1 if you have the <nan.h> header file. */
+    1169              : /* #undef _GLIBCXX_HAVE_NAN_H */
+    1170              : 
+    1171              : /* Define to 1 if you have the <netdb.h> header file. */
+    1172              : #define _GLIBCXX_HAVE_NETDB_H 1
+    1173              : 
+    1174              : /* Define to 1 if you have the <netinet/in.h> header file. */
+    1175              : #define _GLIBCXX_HAVE_NETINET_IN_H 1
+    1176              : 
+    1177              : /* Define to 1 if you have the <netinet/tcp.h> header file. */
+    1178              : #define _GLIBCXX_HAVE_NETINET_TCP_H 1
+    1179              : 
+    1180              : /* Define if <math.h> defines obsolete isinf function. */
+    1181              : /* #undef _GLIBCXX_HAVE_OBSOLETE_ISINF */
+    1182              : 
+    1183              : /* Define if <math.h> defines obsolete isnan function. */
+    1184              : /* #undef _GLIBCXX_HAVE_OBSOLETE_ISNAN */
+    1185              : 
+    1186              : /* Define if openat is available in <fcntl.h>. */
+    1187              : #define _GLIBCXX_HAVE_OPENAT 1
+    1188              : 
+    1189              : /* Define if poll is available in <poll.h>. */
+    1190              : #define _GLIBCXX_HAVE_POLL 1
+    1191              : 
+    1192              : /* Define to 1 if you have the <poll.h> header file. */
+    1193              : #define _GLIBCXX_HAVE_POLL_H 1
+    1194              : 
+    1195              : /* Define to 1 if you have the `posix_memalign' function. */
+    1196              : #define _GLIBCXX_HAVE_POSIX_MEMALIGN 1
+    1197              : 
+    1198              : /* Define to 1 if POSIX Semaphores with sem_timedwait are available in
+    1199              :    <semaphore.h>. */
+    1200              : #define _GLIBCXX_HAVE_POSIX_SEMAPHORE 1
+    1201              : 
+    1202              : /* Define to 1 if you have the `powf' function. */
+    1203              : #define _GLIBCXX_HAVE_POWF 1
+    1204              : 
+    1205              : /* Define to 1 if you have the `powl' function. */
+    1206              : #define _GLIBCXX_HAVE_POWL 1
+    1207              : 
+    1208              : /* Define to 1 if you have the `qfpclass' function. */
+    1209              : /* #undef _GLIBCXX_HAVE_QFPCLASS */
+    1210              : 
+    1211              : /* Define to 1 if you have the `quick_exit' function. */
+    1212              : #define _GLIBCXX_HAVE_QUICK_EXIT 1
+    1213              : 
+    1214              : /* Define if readlink is available in <unistd.h>. */
+    1215              : #define _GLIBCXX_HAVE_READLINK 1
+    1216              : 
+    1217              : /* Define to 1 if you have the `secure_getenv' function. */
+    1218              : #define _GLIBCXX_HAVE_SECURE_GETENV 1
+    1219              : 
+    1220              : /* Define to 1 if you have the `setenv' function. */
+    1221              : #define _GLIBCXX_HAVE_SETENV 1
+    1222              : 
+    1223              : /* Define to 1 if you have the `sincos' function. */
+    1224              : #define _GLIBCXX_HAVE_SINCOS 1
+    1225              : 
+    1226              : /* Define to 1 if you have the `sincosf' function. */
+    1227              : #define _GLIBCXX_HAVE_SINCOSF 1
+    1228              : 
+    1229              : /* Define to 1 if you have the `sincosl' function. */
+    1230              : #define _GLIBCXX_HAVE_SINCOSL 1
+    1231              : 
+    1232              : /* Define to 1 if you have the `sinf' function. */
+    1233              : #define _GLIBCXX_HAVE_SINF 1
+    1234              : 
+    1235              : /* Define to 1 if you have the `sinhf' function. */
+    1236              : #define _GLIBCXX_HAVE_SINHF 1
+    1237              : 
+    1238              : /* Define to 1 if you have the `sinhl' function. */
+    1239              : #define _GLIBCXX_HAVE_SINHL 1
+    1240              : 
+    1241              : /* Define to 1 if you have the `sinl' function. */
+    1242              : #define _GLIBCXX_HAVE_SINL 1
+    1243              : 
+    1244              : /* Defined if sleep exists. */
+    1245              : /* #undef _GLIBCXX_HAVE_SLEEP */
+    1246              : 
+    1247              : /* Define to 1 if you have the `sockatmark' function. */
+    1248              : #define _GLIBCXX_HAVE_SOCKATMARK 1
+    1249              : 
+    1250              : /* Define to 1 if you have the `sqrtf' function. */
+    1251              : #define _GLIBCXX_HAVE_SQRTF 1
+    1252              : 
+    1253              : /* Define to 1 if you have the `sqrtl' function. */
+    1254              : #define _GLIBCXX_HAVE_SQRTL 1
+    1255              : 
+    1256              : /* Define if the <stacktrace> header is supported. */
+    1257              : #define _GLIBCXX_HAVE_STACKTRACE 1
+    1258              : 
+    1259              : /* Define to 1 if you have the <stdalign.h> header file. */
+    1260              : #define _GLIBCXX_HAVE_STDALIGN_H 1
+    1261              : 
+    1262              : /* Define to 1 if you have the <stdbool.h> header file. */
+    1263              : #define _GLIBCXX_HAVE_STDBOOL_H 1
+    1264              : 
+    1265              : /* Define to 1 if you have the <stdint.h> header file. */
+    1266              : #define _GLIBCXX_HAVE_STDINT_H 1
+    1267              : 
+    1268              : /* Define to 1 if you have the <stdlib.h> header file. */
+    1269              : #define _GLIBCXX_HAVE_STDLIB_H 1
+    1270              : 
+    1271              : /* Define if strerror_l is available in <string.h>. */
+    1272              : #define _GLIBCXX_HAVE_STRERROR_L 1
+    1273              : 
+    1274              : /* Define if strerror_r is available in <string.h>. */
+    1275              : #define _GLIBCXX_HAVE_STRERROR_R 1
+    1276              : 
+    1277              : /* Define to 1 if you have the <strings.h> header file. */
+    1278              : #define _GLIBCXX_HAVE_STRINGS_H 1
+    1279              : 
+    1280              : /* Define to 1 if you have the <string.h> header file. */
+    1281              : #define _GLIBCXX_HAVE_STRING_H 1
+    1282              : 
+    1283              : /* Define to 1 if you have the `strtof' function. */
+    1284              : #define _GLIBCXX_HAVE_STRTOF 1
+    1285              : 
+    1286              : /* Define to 1 if you have the `strtold' function. */
+    1287              : #define _GLIBCXX_HAVE_STRTOLD 1
+    1288              : 
+    1289              : /* Define to 1 if `d_type' is a member of `struct dirent'. */
+    1290              : #define _GLIBCXX_HAVE_STRUCT_DIRENT_D_TYPE 1
+    1291              : 
+    1292              : /* Define if strxfrm_l is available in <string.h>. */
+    1293              : #define _GLIBCXX_HAVE_STRXFRM_L 1
+    1294              : 
+    1295              : /* Define if symlink is available in <unistd.h>. */
+    1296              : #define _GLIBCXX_HAVE_SYMLINK 1
+    1297              : 
+    1298              : /* Define to 1 if the target runtime linker supports binding the same symbol
+    1299              :    to different versions. */
+    1300              : #define _GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT 1
+    1301              : 
+    1302              : /* Define to 1 if you have the <sys/filio.h> header file. */
+    1303              : /* #undef _GLIBCXX_HAVE_SYS_FILIO_H */
+    1304              : 
+    1305              : /* Define to 1 if you have the <sys/ioctl.h> header file. */
+    1306              : #define _GLIBCXX_HAVE_SYS_IOCTL_H 1
+    1307              : 
+    1308              : /* Define to 1 if you have the <sys/ipc.h> header file. */
+    1309              : #define _GLIBCXX_HAVE_SYS_IPC_H 1
+    1310              : 
+    1311              : /* Define to 1 if you have the <sys/isa_defs.h> header file. */
+    1312              : /* #undef _GLIBCXX_HAVE_SYS_ISA_DEFS_H */
+    1313              : 
+    1314              : /* Define to 1 if you have the <sys/machine.h> header file. */
+    1315              : /* #undef _GLIBCXX_HAVE_SYS_MACHINE_H */
+    1316              : 
+    1317              : /* Define to 1 if you have the <sys/mman.h> header file. */
+    1318              : #define _GLIBCXX_HAVE_SYS_MMAN_H 1
+    1319              : 
+    1320              : /* Define to 1 if you have the <sys/param.h> header file. */
+    1321              : #define _GLIBCXX_HAVE_SYS_PARAM_H 1
+    1322              : 
+    1323              : /* Define to 1 if you have the <sys/resource.h> header file. */
+    1324              : #define _GLIBCXX_HAVE_SYS_RESOURCE_H 1
+    1325              : 
+    1326              : /* Define to 1 if you have a suitable <sys/sdt.h> header file */
+    1327              : #define _GLIBCXX_HAVE_SYS_SDT_H 1
+    1328              : 
+    1329              : /* Define to 1 if you have the <sys/sem.h> header file. */
+    1330              : #define _GLIBCXX_HAVE_SYS_SEM_H 1
+    1331              : 
+    1332              : /* Define to 1 if you have the <sys/socket.h> header file. */
+    1333              : #define _GLIBCXX_HAVE_SYS_SOCKET_H 1
+    1334              : 
+    1335              : /* Define to 1 if you have the <sys/statvfs.h> header file. */
+    1336              : #define _GLIBCXX_HAVE_SYS_STATVFS_H 1
+    1337              : 
+    1338              : /* Define to 1 if you have the <sys/stat.h> header file. */
+    1339              : #define _GLIBCXX_HAVE_SYS_STAT_H 1
+    1340              : 
+    1341              : /* Define to 1 if you have the <sys/sysinfo.h> header file. */
+    1342              : #define _GLIBCXX_HAVE_SYS_SYSINFO_H 1
+    1343              : 
+    1344              : /* Define to 1 if you have the <sys/time.h> header file. */
+    1345              : #define _GLIBCXX_HAVE_SYS_TIME_H 1
+    1346              : 
+    1347              : /* Define to 1 if you have the <sys/types.h> header file. */
+    1348              : #define _GLIBCXX_HAVE_SYS_TYPES_H 1
+    1349              : 
+    1350              : /* Define to 1 if you have the <sys/uio.h> header file. */
+    1351              : #define _GLIBCXX_HAVE_SYS_UIO_H 1
+    1352              : 
+    1353              : /* Define if S_IFREG is available in <sys/stat.h>. */
+    1354              : /* #undef _GLIBCXX_HAVE_S_IFREG */
+    1355              : 
+    1356              : /* Define if S_ISREG is available in <sys/stat.h>. */
+    1357              : #define _GLIBCXX_HAVE_S_ISREG 1
+    1358              : 
+    1359              : /* Define to 1 if you have the `tanf' function. */
+    1360              : #define _GLIBCXX_HAVE_TANF 1
+    1361              : 
+    1362              : /* Define to 1 if you have the `tanhf' function. */
+    1363              : #define _GLIBCXX_HAVE_TANHF 1
+    1364              : 
+    1365              : /* Define to 1 if you have the `tanhl' function. */
+    1366              : #define _GLIBCXX_HAVE_TANHL 1
+    1367              : 
+    1368              : /* Define to 1 if you have the `tanl' function. */
+    1369              : #define _GLIBCXX_HAVE_TANL 1
+    1370              : 
+    1371              : /* Define to 1 if you have the <tgmath.h> header file. */
+    1372              : #define _GLIBCXX_HAVE_TGMATH_H 1
+    1373              : 
+    1374              : /* Define to 1 if you have the `timespec_get' function. */
+    1375              : #define _GLIBCXX_HAVE_TIMESPEC_GET 1
+    1376              : 
+    1377              : /* Define to 1 if the target supports thread-local storage. */
+    1378              : #define _GLIBCXX_HAVE_TLS 1
+    1379              : 
+    1380              : /* Define if truncate is available in <unistd.h>. */
+    1381              : #define _GLIBCXX_HAVE_TRUNCATE 1
+    1382              : 
+    1383              : /* Define to 1 if you have the <uchar.h> header file. */
+    1384              : #define _GLIBCXX_HAVE_UCHAR_H 1
+    1385              : 
+    1386              : /* Define to 1 if you have the <unistd.h> header file. */
+    1387              : #define _GLIBCXX_HAVE_UNISTD_H 1
+    1388              : 
+    1389              : /* Define if unlinkat is available in <fcntl.h>. */
+    1390              : #define _GLIBCXX_HAVE_UNLINKAT 1
+    1391              : 
+    1392              : /* Define to 1 if you have the `uselocale' function. */
+    1393              : #define _GLIBCXX_HAVE_USELOCALE 1
+    1394              : 
+    1395              : /* Defined if usleep exists. */
+    1396              : /* #undef _GLIBCXX_HAVE_USLEEP */
+    1397              : 
+    1398              : /* Define to 1 if you have the <utime.h> header file. */
+    1399              : #define _GLIBCXX_HAVE_UTIME_H 1
+    1400              : 
+    1401              : /* Defined if vfwscanf exists. */
+    1402              : #define _GLIBCXX_HAVE_VFWSCANF 1
+    1403              : 
+    1404              : /* Defined if vswscanf exists. */
+    1405              : #define _GLIBCXX_HAVE_VSWSCANF 1
+    1406              : 
+    1407              : /* Defined if vwscanf exists. */
+    1408              : #define _GLIBCXX_HAVE_VWSCANF 1
+    1409              : 
+    1410              : /* Define to 1 if you have the <wchar.h> header file. */
+    1411              : #define _GLIBCXX_HAVE_WCHAR_H 1
+    1412              : 
+    1413              : /* Defined if wcstof exists. */
+    1414              : #define _GLIBCXX_HAVE_WCSTOF 1
+    1415              : 
+    1416              : /* Define to 1 if you have the <wctype.h> header file. */
+    1417              : #define _GLIBCXX_HAVE_WCTYPE_H 1
+    1418              : 
+    1419              : /* Define to 1 if you have the <windows.h> header file. */
+    1420              : /* #undef _GLIBCXX_HAVE_WINDOWS_H */
+    1421              : 
+    1422              : /* Define if writev is available in <sys/uio.h>. */
+    1423              : #define _GLIBCXX_HAVE_WRITEV 1
+    1424              : 
+    1425              : /* Define to 1 if you have the <xlocale.h> header file. */
+    1426              : /* #undef _GLIBCXX_HAVE_XLOCALE_H */
+    1427              : 
+    1428              : /* Define to 1 if you have the `_acosf' function. */
+    1429              : /* #undef _GLIBCXX_HAVE__ACOSF */
+    1430              : 
+    1431              : /* Define to 1 if you have the `_acosl' function. */
+    1432              : /* #undef _GLIBCXX_HAVE__ACOSL */
+    1433              : 
+    1434              : /* Define to 1 if you have the `_aligned_malloc' function. */
+    1435              : /* #undef _GLIBCXX_HAVE__ALIGNED_MALLOC */
+    1436              : 
+    1437              : /* Define to 1 if you have the `_asinf' function. */
+    1438              : /* #undef _GLIBCXX_HAVE__ASINF */
+    1439              : 
+    1440              : /* Define to 1 if you have the `_asinl' function. */
+    1441              : /* #undef _GLIBCXX_HAVE__ASINL */
+    1442              : 
+    1443              : /* Define to 1 if you have the `_atan2f' function. */
+    1444              : /* #undef _GLIBCXX_HAVE__ATAN2F */
+    1445              : 
+    1446              : /* Define to 1 if you have the `_atan2l' function. */
+    1447              : /* #undef _GLIBCXX_HAVE__ATAN2L */
+    1448              : 
+    1449              : /* Define to 1 if you have the `_atanf' function. */
+    1450              : /* #undef _GLIBCXX_HAVE__ATANF */
+    1451              : 
+    1452              : /* Define to 1 if you have the `_atanl' function. */
+    1453              : /* #undef _GLIBCXX_HAVE__ATANL */
+    1454              : 
+    1455              : /* Define to 1 if you have the `_ceilf' function. */
+    1456              : /* #undef _GLIBCXX_HAVE__CEILF */
+    1457              : 
+    1458              : /* Define to 1 if you have the `_ceill' function. */
+    1459              : /* #undef _GLIBCXX_HAVE__CEILL */
+    1460              : 
+    1461              : /* Define to 1 if you have the `_cosf' function. */
+    1462              : /* #undef _GLIBCXX_HAVE__COSF */
+    1463              : 
+    1464              : /* Define to 1 if you have the `_coshf' function. */
+    1465              : /* #undef _GLIBCXX_HAVE__COSHF */
+    1466              : 
+    1467              : /* Define to 1 if you have the `_coshl' function. */
+    1468              : /* #undef _GLIBCXX_HAVE__COSHL */
+    1469              : 
+    1470              : /* Define to 1 if you have the `_cosl' function. */
+    1471              : /* #undef _GLIBCXX_HAVE__COSL */
+    1472              : 
+    1473              : /* Define to 1 if you have the `_expf' function. */
+    1474              : /* #undef _GLIBCXX_HAVE__EXPF */
+    1475              : 
+    1476              : /* Define to 1 if you have the `_expl' function. */
+    1477              : /* #undef _GLIBCXX_HAVE__EXPL */
+    1478              : 
+    1479              : /* Define to 1 if you have the `_fabsf' function. */
+    1480              : /* #undef _GLIBCXX_HAVE__FABSF */
+    1481              : 
+    1482              : /* Define to 1 if you have the `_fabsl' function. */
+    1483              : /* #undef _GLIBCXX_HAVE__FABSL */
+    1484              : 
+    1485              : /* Define to 1 if you have the `_finite' function. */
+    1486              : /* #undef _GLIBCXX_HAVE__FINITE */
+    1487              : 
+    1488              : /* Define to 1 if you have the `_finitef' function. */
+    1489              : /* #undef _GLIBCXX_HAVE__FINITEF */
+    1490              : 
+    1491              : /* Define to 1 if you have the `_finitel' function. */
+    1492              : /* #undef _GLIBCXX_HAVE__FINITEL */
+    1493              : 
+    1494              : /* Define to 1 if you have the `_floorf' function. */
+    1495              : /* #undef _GLIBCXX_HAVE__FLOORF */
+    1496              : 
+    1497              : /* Define to 1 if you have the `_floorl' function. */
+    1498              : /* #undef _GLIBCXX_HAVE__FLOORL */
+    1499              : 
+    1500              : /* Define to 1 if you have the `_fmodf' function. */
+    1501              : /* #undef _GLIBCXX_HAVE__FMODF */
+    1502              : 
+    1503              : /* Define to 1 if you have the `_fmodl' function. */
+    1504              : /* #undef _GLIBCXX_HAVE__FMODL */
+    1505              : 
+    1506              : /* Define to 1 if you have the `_fpclass' function. */
+    1507              : /* #undef _GLIBCXX_HAVE__FPCLASS */
+    1508              : 
+    1509              : /* Define to 1 if you have the `_frexpf' function. */
+    1510              : /* #undef _GLIBCXX_HAVE__FREXPF */
+    1511              : 
+    1512              : /* Define to 1 if you have the `_frexpl' function. */
+    1513              : /* #undef _GLIBCXX_HAVE__FREXPL */
+    1514              : 
+    1515              : /* Define to 1 if you have the `_hypot' function. */
+    1516              : /* #undef _GLIBCXX_HAVE__HYPOT */
+    1517              : 
+    1518              : /* Define to 1 if you have the `_hypotf' function. */
+    1519              : /* #undef _GLIBCXX_HAVE__HYPOTF */
+    1520              : 
+    1521              : /* Define to 1 if you have the `_hypotl' function. */
+    1522              : /* #undef _GLIBCXX_HAVE__HYPOTL */
+    1523              : 
+    1524              : /* Define to 1 if you have the `_isinf' function. */
+    1525              : /* #undef _GLIBCXX_HAVE__ISINF */
+    1526              : 
+    1527              : /* Define to 1 if you have the `_isinff' function. */
+    1528              : /* #undef _GLIBCXX_HAVE__ISINFF */
+    1529              : 
+    1530              : /* Define to 1 if you have the `_isinfl' function. */
+    1531              : /* #undef _GLIBCXX_HAVE__ISINFL */
+    1532              : 
+    1533              : /* Define to 1 if you have the `_isnan' function. */
+    1534              : /* #undef _GLIBCXX_HAVE__ISNAN */
+    1535              : 
+    1536              : /* Define to 1 if you have the `_isnanf' function. */
+    1537              : /* #undef _GLIBCXX_HAVE__ISNANF */
+    1538              : 
+    1539              : /* Define to 1 if you have the `_isnanl' function. */
+    1540              : /* #undef _GLIBCXX_HAVE__ISNANL */
+    1541              : 
+    1542              : /* Define to 1 if you have the `_ldexpf' function. */
+    1543              : /* #undef _GLIBCXX_HAVE__LDEXPF */
+    1544              : 
+    1545              : /* Define to 1 if you have the `_ldexpl' function. */
+    1546              : /* #undef _GLIBCXX_HAVE__LDEXPL */
+    1547              : 
+    1548              : /* Define to 1 if you have the `_log10f' function. */
+    1549              : /* #undef _GLIBCXX_HAVE__LOG10F */
+    1550              : 
+    1551              : /* Define to 1 if you have the `_log10l' function. */
+    1552              : /* #undef _GLIBCXX_HAVE__LOG10L */
+    1553              : 
+    1554              : /* Define to 1 if you have the `_logf' function. */
+    1555              : /* #undef _GLIBCXX_HAVE__LOGF */
+    1556              : 
+    1557              : /* Define to 1 if you have the `_logl' function. */
+    1558              : /* #undef _GLIBCXX_HAVE__LOGL */
+    1559              : 
+    1560              : /* Define to 1 if you have the `_modf' function. */
+    1561              : /* #undef _GLIBCXX_HAVE__MODF */
+    1562              : 
+    1563              : /* Define to 1 if you have the `_modff' function. */
+    1564              : /* #undef _GLIBCXX_HAVE__MODFF */
+    1565              : 
+    1566              : /* Define to 1 if you have the `_modfl' function. */
+    1567              : /* #undef _GLIBCXX_HAVE__MODFL */
+    1568              : 
+    1569              : /* Define to 1 if you have the `_powf' function. */
+    1570              : /* #undef _GLIBCXX_HAVE__POWF */
+    1571              : 
+    1572              : /* Define to 1 if you have the `_powl' function. */
+    1573              : /* #undef _GLIBCXX_HAVE__POWL */
+    1574              : 
+    1575              : /* Define to 1 if you have the `_qfpclass' function. */
+    1576              : /* #undef _GLIBCXX_HAVE__QFPCLASS */
+    1577              : 
+    1578              : /* Define to 1 if you have the `_sincos' function. */
+    1579              : /* #undef _GLIBCXX_HAVE__SINCOS */
+    1580              : 
+    1581              : /* Define to 1 if you have the `_sincosf' function. */
+    1582              : /* #undef _GLIBCXX_HAVE__SINCOSF */
+    1583              : 
+    1584              : /* Define to 1 if you have the `_sincosl' function. */
+    1585              : /* #undef _GLIBCXX_HAVE__SINCOSL */
+    1586              : 
+    1587              : /* Define to 1 if you have the `_sinf' function. */
+    1588              : /* #undef _GLIBCXX_HAVE__SINF */
+    1589              : 
+    1590              : /* Define to 1 if you have the `_sinhf' function. */
+    1591              : /* #undef _GLIBCXX_HAVE__SINHF */
+    1592              : 
+    1593              : /* Define to 1 if you have the `_sinhl' function. */
+    1594              : /* #undef _GLIBCXX_HAVE__SINHL */
+    1595              : 
+    1596              : /* Define to 1 if you have the `_sinl' function. */
+    1597              : /* #undef _GLIBCXX_HAVE__SINL */
+    1598              : 
+    1599              : /* Define to 1 if you have the `_sqrtf' function. */
+    1600              : /* #undef _GLIBCXX_HAVE__SQRTF */
+    1601              : 
+    1602              : /* Define to 1 if you have the `_sqrtl' function. */
+    1603              : /* #undef _GLIBCXX_HAVE__SQRTL */
+    1604              : 
+    1605              : /* Define to 1 if you have the `_tanf' function. */
+    1606              : /* #undef _GLIBCXX_HAVE__TANF */
+    1607              : 
+    1608              : /* Define to 1 if you have the `_tanhf' function. */
+    1609              : /* #undef _GLIBCXX_HAVE__TANHF */
+    1610              : 
+    1611              : /* Define to 1 if you have the `_tanhl' function. */
+    1612              : /* #undef _GLIBCXX_HAVE__TANHL */
+    1613              : 
+    1614              : /* Define to 1 if you have the `_tanl' function. */
+    1615              : /* #undef _GLIBCXX_HAVE__TANL */
+    1616              : 
+    1617              : /* Define to 1 if you have the `_wfopen' function. */
+    1618              : /* #undef _GLIBCXX_HAVE__WFOPEN */
+    1619              : 
+    1620              : /* Define to 1 if you have the `__cxa_thread_atexit' function. */
+    1621              : /* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT */
+    1622              : 
+    1623              : /* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
+    1624              : #define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
+    1625              : 
+    1626              : /* Define as const if the declaration of iconv() needs const. */
+    1627              : #define _GLIBCXX_ICONV_CONST 
+    1628              : 
+    1629              : /* Define to the sub-directory in which libtool stores uninstalled libraries.
+    1630              :    */
+    1631              : #define _GLIBCXX_LT_OBJDIR ".libs/"
+    1632              : 
+    1633              : /* Name of package */
+    1634              : /* #undef _GLIBCXX_PACKAGE */
+    1635              : 
+    1636              : /* Define to the address where bug reports for this package should be sent. */
+    1637              : #define _GLIBCXX_PACKAGE_BUGREPORT ""
+    1638              : 
+    1639              : /* Define to the full name of this package. */
+    1640              : #define _GLIBCXX_PACKAGE_NAME "package-unused"
+    1641              : 
+    1642              : /* Define to the full name and version of this package. */
+    1643              : #define _GLIBCXX_PACKAGE_STRING "package-unused version-unused"
+    1644              : 
+    1645              : /* Define to the one symbol short name of this package. */
+    1646              : #define _GLIBCXX_PACKAGE_TARNAME "libstdc++"
+    1647              : 
+    1648              : /* Define to the home page for this package. */
+    1649              : #define _GLIBCXX_PACKAGE_URL ""
+    1650              : 
+    1651              : /* Define to the version of this package. */
+    1652              : #define _GLIBCXX_PACKAGE__GLIBCXX_VERSION "version-unused"
+    1653              : 
+    1654              : /* Define to 1 if you have the ANSI C header files. */
+    1655              : #define _GLIBCXX_STDC_HEADERS 1
+    1656              : 
+    1657              : /* Version number of package */
+    1658              : /* #undef _GLIBCXX_VERSION */
+    1659              : 
+    1660              : /* Enable large inode numbers on Mac OS X 10.5.  */
+    1661              : #ifndef _GLIBCXX_DARWIN_USE_64_BIT_INODE
+    1662              : # define _GLIBCXX_DARWIN_USE_64_BIT_INODE 1
+    1663              : #endif
+    1664              : 
+    1665              : /* Number of bits in a file offset, on hosts where this is settable. */
+    1666              : #define _GLIBCXX_FILE_OFFSET_BITS 64
+    1667              : 
+    1668              : /* Define if C99 functions in <complex.h> should be used in <complex> for
+    1669              :    C++11. Using compiler builtins for these functions requires corresponding
+    1670              :    C99 library functions to be present. */
+    1671              : #define _GLIBCXX11_USE_C99_COMPLEX 1
+    1672              : 
+    1673              : /* Define if C99 functions or macros in <math.h> should be imported in <cmath>
+    1674              :    in namespace std for C++11. */
+    1675              : #define _GLIBCXX11_USE_C99_MATH 1
+    1676              : 
+    1677              : /* Define if C99 functions or macros in <stdio.h> should be imported in
+    1678              :    <cstdio> in namespace std for C++11. */
+    1679              : #define _GLIBCXX11_USE_C99_STDIO 1
+    1680              : 
+    1681              : /* Define if C99 functions or macros in <stdlib.h> should be imported in
+    1682              :    <cstdlib> in namespace std for C++11. */
+    1683              : #define _GLIBCXX11_USE_C99_STDLIB 1
+    1684              : 
+    1685              : /* Define if C99 functions or macros in <wchar.h> should be imported in
+    1686              :    <cwchar> in namespace std for C++11. */
+    1687              : #define _GLIBCXX11_USE_C99_WCHAR 1
+    1688              : 
+    1689              : /* Define if C99 functions in <complex.h> should be used in <complex> for
+    1690              :    C++98. Using compiler builtins for these functions requires corresponding
+    1691              :    C99 library functions to be present. */
+    1692              : #define _GLIBCXX98_USE_C99_COMPLEX 1
+    1693              : 
+    1694              : /* Define if C99 functions or macros in <math.h> should be imported in <cmath>
+    1695              :    in namespace std for C++98. */
+    1696              : #define _GLIBCXX98_USE_C99_MATH 1
+    1697              : 
+    1698              : /* Define if C99 functions or macros in <stdio.h> should be imported in
+    1699              :    <cstdio> in namespace std for C++98. */
+    1700              : #define _GLIBCXX98_USE_C99_STDIO 1
+    1701              : 
+    1702              : /* Define if C99 functions or macros in <stdlib.h> should be imported in
+    1703              :    <cstdlib> in namespace std for C++98. */
+    1704              : #define _GLIBCXX98_USE_C99_STDLIB 1
+    1705              : 
+    1706              : /* Define if C99 functions or macros in <wchar.h> should be imported in
+    1707              :    <cwchar> in namespace std for C++98. */
+    1708              : #define _GLIBCXX98_USE_C99_WCHAR 1
+    1709              : 
+    1710              : /* Define if the compiler supports C++11 atomics. */
+    1711              : #define _GLIBCXX_ATOMIC_BUILTINS 1
+    1712              : 
+    1713              : /* Define if global objects can be aligned to
+    1714              :    std::hardware_destructive_interference_size. */
+    1715              : #define _GLIBCXX_CAN_ALIGNAS_DESTRUCTIVE_SIZE 1
+    1716              : 
+    1717              : /* Define to use concept checking code from the boost libraries. */
+    1718              : /* #undef _GLIBCXX_CONCEPT_CHECKS */
+    1719              : 
+    1720              : /* Define to 1 if a fully dynamic basic_string is wanted, 0 to disable,
+    1721              :    undefined for platform defaults */
+    1722              : #define _GLIBCXX_FULLY_DYNAMIC_STRING 0
+    1723              : 
+    1724              : /* Define if gthreads library is available. */
+    1725              : #define _GLIBCXX_HAS_GTHREADS 1
+    1726              : 
+    1727              : /* Define to 1 if a full hosted library is built, or 0 if freestanding. */
+    1728              : #define _GLIBCXX_HOSTED __STDC_HOSTED__
+    1729              : 
+    1730              : /* Define if compatibility should be provided for alternative 128-bit long
+    1731              :    double formats. */
+    1732              : 
+    1733              : /* Define if compatibility should be provided for -mlong-double-64. */
+    1734              : 
+    1735              : /* Define to the letter to which size_t is mangled. */
+    1736              : #define _GLIBCXX_MANGLE_SIZE_T j
+    1737              : 
+    1738              : /* Define if C99 llrint and llround functions are missing from <math.h>. */
+    1739              : /* #undef _GLIBCXX_NO_C99_ROUNDING_FUNCS */
+    1740              : 
+    1741              : /* Defined if no way to sleep is available. */
+    1742              : /* #undef _GLIBCXX_NO_SLEEP */
+    1743              : 
+    1744              : /* Define if ptrdiff_t is int. */
+    1745              : #define _GLIBCXX_PTRDIFF_T_IS_INT 1
+    1746              : 
+    1747              : /* Define if using setrlimit to set resource limits during "make check" */
+    1748              : #define _GLIBCXX_RES_LIMITS 1
+    1749              : 
+    1750              : /* Define if size_t is unsigned int. */
+    1751              : #define _GLIBCXX_SIZE_T_IS_UINT 1
+    1752              : 
+    1753              : /* Define if static tzdata should be compiled into the library. */
+    1754              : /* #undef _GLIBCXX_STATIC_TZDATA */
+    1755              : 
+    1756              : /* Define to the value of the EOF integer constant. */
+    1757              : #define _GLIBCXX_STDIO_EOF -1
+    1758              : 
+    1759              : /* Define to the value of the SEEK_CUR integer constant. */
+    1760              : #define _GLIBCXX_STDIO_SEEK_CUR 1
+    1761              : 
+    1762              : /* Define to the value of the SEEK_END integer constant. */
+    1763              : #define _GLIBCXX_STDIO_SEEK_END 2
+    1764              : 
+    1765              : /* Define to use symbol versioning in the shared library. */
+    1766              : #define _GLIBCXX_SYMVER 1
+    1767              : 
+    1768              : /* Define to use darwin versioning in the shared library. */
+    1769              : /* #undef _GLIBCXX_SYMVER_DARWIN */
+    1770              : 
+    1771              : /* Define to use GNU versioning in the shared library. */
+    1772              : #define _GLIBCXX_SYMVER_GNU 1
+    1773              : 
+    1774              : /* Define to use GNU namespace versioning in the shared library. */
+    1775              : /* #undef _GLIBCXX_SYMVER_GNU_NAMESPACE */
+    1776              : 
+    1777              : /* Define to use Sun versioning in the shared library. */
+    1778              : /* #undef _GLIBCXX_SYMVER_SUN */
+    1779              : 
+    1780              : /* Define if C11 functions in <uchar.h> should be imported into namespace std
+    1781              :    in <cuchar>. */
+    1782              : #define _GLIBCXX_USE_C11_UCHAR_CXX11 1
+    1783              : 
+    1784              : /* Define if C99 functions or macros from <wchar.h>, <math.h>, <complex.h>,
+    1785              :    <stdio.h>, and <stdlib.h> can be used or exposed. */
+    1786              : #define _GLIBCXX_USE_C99 1
+    1787              : 
+    1788              : /* Define if C99 functions in <complex.h> should be used in <tr1/complex>.
+    1789              :    Using compiler builtins for these functions requires corresponding C99
+    1790              :    library functions to be present. */
+    1791              : #define _GLIBCXX_USE_C99_COMPLEX_TR1 1
+    1792              : 
+    1793              : /* Define if C99 functions in <ctype.h> should be imported in <tr1/cctype> in
+    1794              :    namespace std::tr1. */
+    1795              : #define _GLIBCXX_USE_C99_CTYPE_TR1 1
+    1796              : 
+    1797              : /* Define if C99 functions in <fenv.h> should be imported in <tr1/cfenv> in
+    1798              :    namespace std::tr1. */
+    1799              : #define _GLIBCXX_USE_C99_FENV_TR1 1
+    1800              : 
+    1801              : /* Define if C99 functions in <inttypes.h> should be imported in
+    1802              :    <tr1/cinttypes> in namespace std::tr1. */
+    1803              : #define _GLIBCXX_USE_C99_INTTYPES_TR1 1
+    1804              : 
+    1805              : /* Define if wchar_t C99 functions in <inttypes.h> should be imported in
+    1806              :    <tr1/cinttypes> in namespace std::tr1. */
+    1807              : #define _GLIBCXX_USE_C99_INTTYPES_WCHAR_T_TR1 1
+    1808              : 
+    1809              : /* Define if C99 functions or macros in <math.h> should be imported in
+    1810              :    <tr1/cmath> in namespace std::tr1. */
+    1811              : #define _GLIBCXX_USE_C99_MATH_TR1 1
+    1812              : 
+    1813              : /* Define if C99 types in <stdint.h> should be imported in <tr1/cstdint> in
+    1814              :    namespace std::tr1. */
+    1815              : #define _GLIBCXX_USE_C99_STDINT_TR1 1
+    1816              : 
+    1817              : /* Define if usable chdir is available in <unistd.h>. */
+    1818              : #define _GLIBCXX_USE_CHDIR 1
+    1819              : 
+    1820              : /* Define if usable chmod is available in <sys/stat.h>. */
+    1821              : #define _GLIBCXX_USE_CHMOD 1
+    1822              : 
+    1823              : /* Defined if clock_gettime syscall has monotonic and realtime clock support.
+    1824              :    */
+    1825              : /* #undef _GLIBCXX_USE_CLOCK_GETTIME_SYSCALL */
+    1826              : 
+    1827              : /* Defined if clock_gettime has monotonic clock support. */
+    1828              : #define _GLIBCXX_USE_CLOCK_MONOTONIC 1
+    1829              : 
+    1830              : /* Defined if clock_gettime has realtime clock support. */
+    1831              : #define _GLIBCXX_USE_CLOCK_REALTIME 1
+    1832              : 
+    1833              : /* Define if ISO/IEC TR 24733 decimal floating point types are supported on
+    1834              :    this host. */
+    1835              : #define _GLIBCXX_USE_DECIMAL_FLOAT 1
+    1836              : 
+    1837              : /* Define if /dev/random and /dev/urandom are available for
+    1838              :    std::random_device. */
+    1839              : #define _GLIBCXX_USE_DEV_RANDOM 1
+    1840              : 
+    1841              : /* Define if fchmod is available in <sys/stat.h>. */
+    1842              : #define _GLIBCXX_USE_FCHMOD 1
+    1843              : 
+    1844              : /* Define if fchmodat is available in <sys/stat.h>. */
+    1845              : #define _GLIBCXX_USE_FCHMODAT 1
+    1846              : 
+    1847              : /* Define if fseeko and ftello are available. */
+    1848              : #define _GLIBCXX_USE_FSEEKO_FTELLO 1
+    1849              : 
+    1850              : /* Define if usable getcwd is available in <unistd.h>. */
+    1851              : #define _GLIBCXX_USE_GETCWD 1
+    1852              : 
+    1853              : /* Defined if gettimeofday is available. */
+    1854              : #define _GLIBCXX_USE_GETTIMEOFDAY 1
+    1855              : 
+    1856              : /* Define if get_nprocs is available in <sys/sysinfo.h>. */
+    1857              : #define _GLIBCXX_USE_GET_NPROCS 1
+    1858              : 
+    1859              : /* Define if init_priority should be used for iostream initialization. */
+    1860              : #define _GLIBCXX_USE_INIT_PRIORITY_ATTRIBUTE 1
+    1861              : 
+    1862              : /* Define if LFS support is available. */
+    1863              : #define _GLIBCXX_USE_LFS 1
+    1864              : 
+    1865              : /* Define if code specialized for long long should be used. */
+    1866              : #define _GLIBCXX_USE_LONG_LONG 1
+    1867              : 
+    1868              : /* Define if lstat is available in <sys/stat.h>. */
+    1869              : #define _GLIBCXX_USE_LSTAT 1
+    1870              : 
+    1871              : /* Define if usable mkdir is available in <sys/stat.h>. */
+    1872              : #define _GLIBCXX_USE_MKDIR 1
+    1873              : 
+    1874              : /* Defined if nanosleep is available. */
+    1875              : #define _GLIBCXX_USE_NANOSLEEP 1
+    1876              : 
+    1877              : /* Define if NLS translations are to be used. */
+    1878              : #define _GLIBCXX_USE_NLS 1
+    1879              : 
+    1880              : /* Define if pthreads_num_processors_np is available in <pthread.h>. */
+    1881              : /* #undef _GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP */
+    1882              : 
+    1883              : /* Define if pthread_cond_clockwait is available in <pthread.h>. */
+    1884              : #define _GLIBCXX_USE_PTHREAD_COND_CLOCKWAIT 1
+    1885              : 
+    1886              : /* Define if pthread_mutex_clocklock is available in <pthread.h>. */
+    1887              : #define _GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK 1
+    1888              : 
+    1889              : /* Define if pthread_rwlock_clockrdlock and pthread_rwlock_clockwrlock are
+    1890              :    available in <pthread.h>. */
+    1891              : #define _GLIBCXX_USE_PTHREAD_RWLOCK_CLOCKLOCK 1
+    1892              : 
+    1893              : /* Define if POSIX read/write locks are available in <gthr.h>. */
+    1894              : #define _GLIBCXX_USE_PTHREAD_RWLOCK_T 1
+    1895              : 
+    1896              : /* Define if /dev/random and /dev/urandom are available for the random_device
+    1897              :    of TR1 (Chapter 5.1). */
+    1898              : #define _GLIBCXX_USE_RANDOM_TR1 1
+    1899              : 
+    1900              : /* Define if usable realpath is available in <stdlib.h>. */
+    1901              : #define _GLIBCXX_USE_REALPATH 1
+    1902              : 
+    1903              : /* Defined if sched_yield is available. */
+    1904              : #define _GLIBCXX_USE_SCHED_YIELD 1
+    1905              : 
+    1906              : /* Define if _SC_NPROCESSORS_ONLN is available in <unistd.h>. */
+    1907              : #define _GLIBCXX_USE_SC_NPROCESSORS_ONLN 1
+    1908              : 
+    1909              : /* Define if _SC_NPROC_ONLN is available in <unistd.h>. */
+    1910              : /* #undef _GLIBCXX_USE_SC_NPROC_ONLN */
+    1911              : 
+    1912              : /* Define if sendfile is available in <sys/sendfile.h>. */
+    1913              : #define _GLIBCXX_USE_SENDFILE 1
+    1914              : 
+    1915              : /* Define to restrict std::__basic_file<> to stdio APIs. */
+    1916              : /* #undef _GLIBCXX_USE_STDIO_PURE */
+    1917              : 
+    1918              : /* Define if struct stat has timespec members. */
+    1919              : #define _GLIBCXX_USE_ST_MTIM 1
+    1920              : 
+    1921              : /* Define if sysctl(), CTL_HW and HW_NCPU are available in <sys/sysctl.h>. */
+    1922              : /* #undef _GLIBCXX_USE_SYSCTL_HW_NCPU */
+    1923              : 
+    1924              : /* Define if obsolescent tmpnam is available in <stdio.h>. */
+    1925              : #define _GLIBCXX_USE_TMPNAM 1
+    1926              : 
+    1927              : /* Define if c8rtomb and mbrtoc8 functions in <uchar.h> should be imported
+    1928              :    into namespace std in <cuchar> for C++20. */
+    1929              : #define _GLIBCXX_USE_UCHAR_C8RTOMB_MBRTOC8_CXX20 1
+    1930              : 
+    1931              : /* Define if c8rtomb and mbrtoc8 functions in <uchar.h> should be imported
+    1932              :    into namespace std in <cuchar> for -fchar8_t. */
+    1933              : #define _GLIBCXX_USE_UCHAR_C8RTOMB_MBRTOC8_FCHAR8_T 1
+    1934              : 
+    1935              : /* Define if utime is available in <utime.h>. */
+    1936              : #define _GLIBCXX_USE_UTIME 1
+    1937              : 
+    1938              : /* Define if utimensat and UTIME_OMIT are available in <sys/stat.h> and
+    1939              :    AT_FDCWD in <fcntl.h>. */
+    1940              : #define _GLIBCXX_USE_UTIMENSAT 1
+    1941              : 
+    1942              : /* Define if code specialized for wchar_t should be used. */
+    1943              : #define _GLIBCXX_USE_WCHAR_T 1
+    1944              : 
+    1945              : /* Defined if Sleep exists. */
+    1946              : /* #undef _GLIBCXX_USE_WIN32_SLEEP */
+    1947              : 
+    1948              : /* Define to 1 if a verbose library is built, or 0 otherwise. */
+    1949              : #define _GLIBCXX_VERBOSE 1
+    1950              : 
+    1951              : /* Defined if as can handle rdrand. */
+    1952              : #define _GLIBCXX_X86_RDRAND 1
+    1953              : 
+    1954              : /* Defined if as can handle rdseed. */
+    1955              : #define _GLIBCXX_X86_RDSEED 1
+    1956              : 
+    1957              : /* Define if a directory should be searched for tzdata files. */
+    1958              : #define _GLIBCXX_ZONEINFO_DIR "/usr/share/zoneinfo"
+    1959              : 
+    1960              : /* Define to 1 if mutex_timedlock is available. */
+    1961              : #define _GTHREAD_USE_MUTEX_TIMEDLOCK 1
+    1962              : 
+    1963              : /* Define for large files, on AIX-style hosts. */
+    1964              : /* #undef _GLIBCXX_LARGE_FILES */
+    1965              : 
+    1966              : /* Define if all C++11 floating point overloads are available in <math.h>.  */
+    1967              : #if __cplusplus >= 201103L
+    1968              : /* #undef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP */
+    1969              : #endif
+    1970              : 
+    1971              : /* Define if all C++11 integral type overloads are available in <math.h>.  */
+    1972              : #if __cplusplus >= 201103L
+    1973              : /* #undef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT */
+    1974              : #endif
+    1975              : 
+    1976              : #if defined (_GLIBCXX_HAVE__ACOSF) && ! defined (_GLIBCXX_HAVE_ACOSF)
+    1977              : # define _GLIBCXX_HAVE_ACOSF 1
+    1978              : # define acosf _acosf
+    1979              : #endif
+    1980              : 
+    1981              : #if defined (_GLIBCXX_HAVE__ACOSL) && ! defined (_GLIBCXX_HAVE_ACOSL)
+    1982              : # define _GLIBCXX_HAVE_ACOSL 1
+    1983              : # define acosl _acosl
+    1984              : #endif
+    1985              : 
+    1986              : #if defined (_GLIBCXX_HAVE__ASINF) && ! defined (_GLIBCXX_HAVE_ASINF)
+    1987              : # define _GLIBCXX_HAVE_ASINF 1
+    1988              : # define asinf _asinf
+    1989              : #endif
+    1990              : 
+    1991              : #if defined (_GLIBCXX_HAVE__ASINL) && ! defined (_GLIBCXX_HAVE_ASINL)
+    1992              : # define _GLIBCXX_HAVE_ASINL 1
+    1993              : # define asinl _asinl
+    1994              : #endif
+    1995              : 
+    1996              : #if defined (_GLIBCXX_HAVE__ATAN2F) && ! defined (_GLIBCXX_HAVE_ATAN2F)
+    1997              : # define _GLIBCXX_HAVE_ATAN2F 1
+    1998              : # define atan2f _atan2f
+    1999              : #endif
+    2000              : 
+    2001              : #if defined (_GLIBCXX_HAVE__ATAN2L) && ! defined (_GLIBCXX_HAVE_ATAN2L)
+    2002              : # define _GLIBCXX_HAVE_ATAN2L 1
+    2003              : # define atan2l _atan2l
+    2004              : #endif
+    2005              : 
+    2006              : #if defined (_GLIBCXX_HAVE__ATANF) && ! defined (_GLIBCXX_HAVE_ATANF)
+    2007              : # define _GLIBCXX_HAVE_ATANF 1
+    2008              : # define atanf _atanf
+    2009              : #endif
+    2010              : 
+    2011              : #if defined (_GLIBCXX_HAVE__ATANL) && ! defined (_GLIBCXX_HAVE_ATANL)
+    2012              : # define _GLIBCXX_HAVE_ATANL 1
+    2013              : # define atanl _atanl
+    2014              : #endif
+    2015              : 
+    2016              : #if defined (_GLIBCXX_HAVE__CEILF) && ! defined (_GLIBCXX_HAVE_CEILF)
+    2017              : # define _GLIBCXX_HAVE_CEILF 1
+    2018              : # define ceilf _ceilf
+    2019              : #endif
+    2020              : 
+    2021              : #if defined (_GLIBCXX_HAVE__CEILL) && ! defined (_GLIBCXX_HAVE_CEILL)
+    2022              : # define _GLIBCXX_HAVE_CEILL 1
+    2023              : # define ceill _ceill
+    2024              : #endif
+    2025              : 
+    2026              : #if defined (_GLIBCXX_HAVE__COSF) && ! defined (_GLIBCXX_HAVE_COSF)
+    2027              : # define _GLIBCXX_HAVE_COSF 1
+    2028              : # define cosf _cosf
+    2029              : #endif
+    2030              : 
+    2031              : #if defined (_GLIBCXX_HAVE__COSHF) && ! defined (_GLIBCXX_HAVE_COSHF)
+    2032              : # define _GLIBCXX_HAVE_COSHF 1
+    2033              : # define coshf _coshf
+    2034              : #endif
+    2035              : 
+    2036              : #if defined (_GLIBCXX_HAVE__COSHL) && ! defined (_GLIBCXX_HAVE_COSHL)
+    2037              : # define _GLIBCXX_HAVE_COSHL 1
+    2038              : # define coshl _coshl
+    2039              : #endif
+    2040              : 
+    2041              : #if defined (_GLIBCXX_HAVE__COSL) && ! defined (_GLIBCXX_HAVE_COSL)
+    2042              : # define _GLIBCXX_HAVE_COSL 1
+    2043              : # define cosl _cosl
+    2044              : #endif
+    2045              : 
+    2046              : #if defined (_GLIBCXX_HAVE__EXPF) && ! defined (_GLIBCXX_HAVE_EXPF)
+    2047              : # define _GLIBCXX_HAVE_EXPF 1
+    2048              : # define expf _expf
+    2049              : #endif
+    2050              : 
+    2051              : #if defined (_GLIBCXX_HAVE__EXPL) && ! defined (_GLIBCXX_HAVE_EXPL)
+    2052              : # define _GLIBCXX_HAVE_EXPL 1
+    2053              : # define expl _expl
+    2054              : #endif
+    2055              : 
+    2056              : #if defined (_GLIBCXX_HAVE__FABSF) && ! defined (_GLIBCXX_HAVE_FABSF)
+    2057              : # define _GLIBCXX_HAVE_FABSF 1
+    2058              : # define fabsf _fabsf
+    2059              : #endif
+    2060              : 
+    2061              : #if defined (_GLIBCXX_HAVE__FABSL) && ! defined (_GLIBCXX_HAVE_FABSL)
+    2062              : # define _GLIBCXX_HAVE_FABSL 1
+    2063              : # define fabsl _fabsl
+    2064              : #endif
+    2065              : 
+    2066              : #if defined (_GLIBCXX_HAVE__FINITE) && ! defined (_GLIBCXX_HAVE_FINITE)
+    2067              : # define _GLIBCXX_HAVE_FINITE 1
+    2068              : # define finite _finite
+    2069              : #endif
+    2070              : 
+    2071              : #if defined (_GLIBCXX_HAVE__FINITEF) && ! defined (_GLIBCXX_HAVE_FINITEF)
+    2072              : # define _GLIBCXX_HAVE_FINITEF 1
+    2073              : # define finitef _finitef
+    2074              : #endif
+    2075              : 
+    2076              : #if defined (_GLIBCXX_HAVE__FINITEL) && ! defined (_GLIBCXX_HAVE_FINITEL)
+    2077              : # define _GLIBCXX_HAVE_FINITEL 1
+    2078              : # define finitel _finitel
+    2079              : #endif
+    2080              : 
+    2081              : #if defined (_GLIBCXX_HAVE__FLOORF) && ! defined (_GLIBCXX_HAVE_FLOORF)
+    2082              : # define _GLIBCXX_HAVE_FLOORF 1
+    2083              : # define floorf _floorf
+    2084              : #endif
+    2085              : 
+    2086              : #if defined (_GLIBCXX_HAVE__FLOORL) && ! defined (_GLIBCXX_HAVE_FLOORL)
+    2087              : # define _GLIBCXX_HAVE_FLOORL 1
+    2088              : # define floorl _floorl
+    2089              : #endif
+    2090              : 
+    2091              : #if defined (_GLIBCXX_HAVE__FMODF) && ! defined (_GLIBCXX_HAVE_FMODF)
+    2092              : # define _GLIBCXX_HAVE_FMODF 1
+    2093              : # define fmodf _fmodf
+    2094              : #endif
+    2095              : 
+    2096              : #if defined (_GLIBCXX_HAVE__FMODL) && ! defined (_GLIBCXX_HAVE_FMODL)
+    2097              : # define _GLIBCXX_HAVE_FMODL 1
+    2098              : # define fmodl _fmodl
+    2099              : #endif
+    2100              : 
+    2101              : #if defined (_GLIBCXX_HAVE__FPCLASS) && ! defined (_GLIBCXX_HAVE_FPCLASS)
+    2102              : # define _GLIBCXX_HAVE_FPCLASS 1
+    2103              : # define fpclass _fpclass
+    2104              : #endif
+    2105              : 
+    2106              : #if defined (_GLIBCXX_HAVE__FREXPF) && ! defined (_GLIBCXX_HAVE_FREXPF)
+    2107              : # define _GLIBCXX_HAVE_FREXPF 1
+    2108              : # define frexpf _frexpf
+    2109              : #endif
+    2110              : 
+    2111              : #if defined (_GLIBCXX_HAVE__FREXPL) && ! defined (_GLIBCXX_HAVE_FREXPL)
+    2112              : # define _GLIBCXX_HAVE_FREXPL 1
+    2113              : # define frexpl _frexpl
+    2114              : #endif
+    2115              : 
+    2116              : #if defined (_GLIBCXX_HAVE__HYPOT) && ! defined (_GLIBCXX_HAVE_HYPOT)
+    2117              : # define _GLIBCXX_HAVE_HYPOT 1
+    2118              : # define hypot _hypot
+    2119              : #endif
+    2120              : 
+    2121              : #if defined (_GLIBCXX_HAVE__HYPOTF) && ! defined (_GLIBCXX_HAVE_HYPOTF)
+    2122              : # define _GLIBCXX_HAVE_HYPOTF 1
+    2123              : # define hypotf _hypotf
+    2124              : #endif
+    2125              : 
+    2126              : #if defined (_GLIBCXX_HAVE__HYPOTL) && ! defined (_GLIBCXX_HAVE_HYPOTL)
+    2127              : # define _GLIBCXX_HAVE_HYPOTL 1
+    2128              : # define hypotl _hypotl
+    2129              : #endif
+    2130              : 
+    2131              : #if defined (_GLIBCXX_HAVE__ISINF) && ! defined (_GLIBCXX_HAVE_ISINF)
+    2132              : # define _GLIBCXX_HAVE_ISINF 1
+    2133              : # define isinf _isinf
+    2134              : #endif
+    2135              : 
+    2136              : #if defined (_GLIBCXX_HAVE__ISINFF) && ! defined (_GLIBCXX_HAVE_ISINFF)
+    2137              : # define _GLIBCXX_HAVE_ISINFF 1
+    2138              : # define isinff _isinff
+    2139              : #endif
+    2140              : 
+    2141              : #if defined (_GLIBCXX_HAVE__ISINFL) && ! defined (_GLIBCXX_HAVE_ISINFL)
+    2142              : # define _GLIBCXX_HAVE_ISINFL 1
+    2143              : # define isinfl _isinfl
+    2144              : #endif
+    2145              : 
+    2146              : #if defined (_GLIBCXX_HAVE__ISNAN) && ! defined (_GLIBCXX_HAVE_ISNAN)
+    2147              : # define _GLIBCXX_HAVE_ISNAN 1
+    2148              : # define isnan _isnan
+    2149              : #endif
+    2150              : 
+    2151              : #if defined (_GLIBCXX_HAVE__ISNANF) && ! defined (_GLIBCXX_HAVE_ISNANF)
+    2152              : # define _GLIBCXX_HAVE_ISNANF 1
+    2153              : # define isnanf _isnanf
+    2154              : #endif
+    2155              : 
+    2156              : #if defined (_GLIBCXX_HAVE__ISNANL) && ! defined (_GLIBCXX_HAVE_ISNANL)
+    2157              : # define _GLIBCXX_HAVE_ISNANL 1
+    2158              : # define isnanl _isnanl
+    2159              : #endif
+    2160              : 
+    2161              : #if defined (_GLIBCXX_HAVE__LDEXPF) && ! defined (_GLIBCXX_HAVE_LDEXPF)
+    2162              : # define _GLIBCXX_HAVE_LDEXPF 1
+    2163              : # define ldexpf _ldexpf
+    2164              : #endif
+    2165              : 
+    2166              : #if defined (_GLIBCXX_HAVE__LDEXPL) && ! defined (_GLIBCXX_HAVE_LDEXPL)
+    2167              : # define _GLIBCXX_HAVE_LDEXPL 1
+    2168              : # define ldexpl _ldexpl
+    2169              : #endif
+    2170              : 
+    2171              : #if defined (_GLIBCXX_HAVE__LOG10F) && ! defined (_GLIBCXX_HAVE_LOG10F)
+    2172              : # define _GLIBCXX_HAVE_LOG10F 1
+    2173              : # define log10f _log10f
+    2174              : #endif
+    2175              : 
+    2176              : #if defined (_GLIBCXX_HAVE__LOG10L) && ! defined (_GLIBCXX_HAVE_LOG10L)
+    2177              : # define _GLIBCXX_HAVE_LOG10L 1
+    2178              : # define log10l _log10l
+    2179              : #endif
+    2180              : 
+    2181              : #if defined (_GLIBCXX_HAVE__LOGF) && ! defined (_GLIBCXX_HAVE_LOGF)
+    2182              : # define _GLIBCXX_HAVE_LOGF 1
+    2183              : # define logf _logf
+    2184              : #endif
+    2185              : 
+    2186              : #if defined (_GLIBCXX_HAVE__LOGL) && ! defined (_GLIBCXX_HAVE_LOGL)
+    2187              : # define _GLIBCXX_HAVE_LOGL 1
+    2188              : # define logl _logl
+    2189              : #endif
+    2190              : 
+    2191              : #if defined (_GLIBCXX_HAVE__MODF) && ! defined (_GLIBCXX_HAVE_MODF)
+    2192              : # define _GLIBCXX_HAVE_MODF 1
+    2193              : # define modf _modf
+    2194              : #endif
+    2195              : 
+    2196              : #if defined (_GLIBCXX_HAVE__MODFF) && ! defined (_GLIBCXX_HAVE_MODFF)
+    2197              : # define _GLIBCXX_HAVE_MODFF 1
+    2198              : # define modff _modff
+    2199              : #endif
+    2200              : 
+    2201              : #if defined (_GLIBCXX_HAVE__MODFL) && ! defined (_GLIBCXX_HAVE_MODFL)
+    2202              : # define _GLIBCXX_HAVE_MODFL 1
+    2203              : # define modfl _modfl
+    2204              : #endif
+    2205              : 
+    2206              : #if defined (_GLIBCXX_HAVE__POWF) && ! defined (_GLIBCXX_HAVE_POWF)
+    2207              : # define _GLIBCXX_HAVE_POWF 1
+    2208              : # define powf _powf
+    2209              : #endif
+    2210              : 
+    2211              : #if defined (_GLIBCXX_HAVE__POWL) && ! defined (_GLIBCXX_HAVE_POWL)
+    2212              : # define _GLIBCXX_HAVE_POWL 1
+    2213              : # define powl _powl
+    2214              : #endif
+    2215              : 
+    2216              : #if defined (_GLIBCXX_HAVE__QFPCLASS) && ! defined (_GLIBCXX_HAVE_QFPCLASS)
+    2217              : # define _GLIBCXX_HAVE_QFPCLASS 1
+    2218              : # define qfpclass _qfpclass
+    2219              : #endif
+    2220              : 
+    2221              : #if defined (_GLIBCXX_HAVE__SINCOS) && ! defined (_GLIBCXX_HAVE_SINCOS)
+    2222              : # define _GLIBCXX_HAVE_SINCOS 1
+    2223              : # define sincos _sincos
+    2224              : #endif
+    2225              : 
+    2226              : #if defined (_GLIBCXX_HAVE__SINCOSF) && ! defined (_GLIBCXX_HAVE_SINCOSF)
+    2227              : # define _GLIBCXX_HAVE_SINCOSF 1
+    2228              : # define sincosf _sincosf
+    2229              : #endif
+    2230              : 
+    2231              : #if defined (_GLIBCXX_HAVE__SINCOSL) && ! defined (_GLIBCXX_HAVE_SINCOSL)
+    2232              : # define _GLIBCXX_HAVE_SINCOSL 1
+    2233              : # define sincosl _sincosl
+    2234              : #endif
+    2235              : 
+    2236              : #if defined (_GLIBCXX_HAVE__SINF) && ! defined (_GLIBCXX_HAVE_SINF)
+    2237              : # define _GLIBCXX_HAVE_SINF 1
+    2238              : # define sinf _sinf
+    2239              : #endif
+    2240              : 
+    2241              : #if defined (_GLIBCXX_HAVE__SINHF) && ! defined (_GLIBCXX_HAVE_SINHF)
+    2242              : # define _GLIBCXX_HAVE_SINHF 1
+    2243              : # define sinhf _sinhf
+    2244              : #endif
+    2245              : 
+    2246              : #if defined (_GLIBCXX_HAVE__SINHL) && ! defined (_GLIBCXX_HAVE_SINHL)
+    2247              : # define _GLIBCXX_HAVE_SINHL 1
+    2248              : # define sinhl _sinhl
+    2249              : #endif
+    2250              : 
+    2251              : #if defined (_GLIBCXX_HAVE__SINL) && ! defined (_GLIBCXX_HAVE_SINL)
+    2252              : # define _GLIBCXX_HAVE_SINL 1
+    2253              : # define sinl _sinl
+    2254              : #endif
+    2255              : 
+    2256              : #if defined (_GLIBCXX_HAVE__SQRTF) && ! defined (_GLIBCXX_HAVE_SQRTF)
+    2257              : # define _GLIBCXX_HAVE_SQRTF 1
+    2258              : # define sqrtf _sqrtf
+    2259              : #endif
+    2260              : 
+    2261              : #if defined (_GLIBCXX_HAVE__SQRTL) && ! defined (_GLIBCXX_HAVE_SQRTL)
+    2262              : # define _GLIBCXX_HAVE_SQRTL 1
+    2263              : # define sqrtl _sqrtl
+    2264              : #endif
+    2265              : 
+    2266              : #if defined (_GLIBCXX_HAVE__STRTOF) && ! defined (_GLIBCXX_HAVE_STRTOF)
+    2267              : # define _GLIBCXX_HAVE_STRTOF 1
+    2268              : # define strtof _strtof
+    2269              : #endif
+    2270              : 
+    2271              : #if defined (_GLIBCXX_HAVE__STRTOLD) && ! defined (_GLIBCXX_HAVE_STRTOLD)
+    2272              : # define _GLIBCXX_HAVE_STRTOLD 1
+    2273              : # define strtold _strtold
+    2274              : #endif
+    2275              : 
+    2276              : #if defined (_GLIBCXX_HAVE__TANF) && ! defined (_GLIBCXX_HAVE_TANF)
+    2277              : # define _GLIBCXX_HAVE_TANF 1
+    2278              : # define tanf _tanf
+    2279              : #endif
+    2280              : 
+    2281              : #if defined (_GLIBCXX_HAVE__TANHF) && ! defined (_GLIBCXX_HAVE_TANHF)
+    2282              : # define _GLIBCXX_HAVE_TANHF 1
+    2283              : # define tanhf _tanhf
+    2284              : #endif
+    2285              : 
+    2286              : #if defined (_GLIBCXX_HAVE__TANHL) && ! defined (_GLIBCXX_HAVE_TANHL)
+    2287              : # define _GLIBCXX_HAVE_TANHL 1
+    2288              : # define tanhl _tanhl
+    2289              : #endif
+    2290              : 
+    2291              : #if defined (_GLIBCXX_HAVE__TANL) && ! defined (_GLIBCXX_HAVE_TANL)
+    2292              : # define _GLIBCXX_HAVE_TANL 1
+    2293              : # define tanl _tanl
+    2294              : #endif
+    2295              : 
+    2296              : #endif // _GLIBCXX_CXX_CONFIG_H
+    2297              : #else
+    2298              : // Predefined symbols and macros -*- C++ -*-
+    2299              : 
+    2300              : // Copyright (C) 1997-2023 Free Software Foundation, Inc.
+    2301              : //
+    2302              : // This file is part of the GNU ISO C++ Library.  This library is free
+    2303              : // software; you can redistribute it and/or modify it under the
+    2304              : // terms of the GNU General Public License as published by the
+    2305              : // Free Software Foundation; either version 3, or (at your option)
+    2306              : // any later version.
+    2307              : 
+    2308              : // This library is distributed in the hope that it will be useful,
+    2309              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+    2310              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    2311              : // GNU General Public License for more details.
+    2312              : 
+    2313              : // Under Section 7 of GPL version 3, you are granted additional
+    2314              : // permissions described in the GCC Runtime Library Exception, version
+    2315              : // 3.1, as published by the Free Software Foundation.
+    2316              : 
+    2317              : // You should have received a copy of the GNU General Public License and
+    2318              : // a copy of the GCC Runtime Library Exception along with this program;
+    2319              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+    2320              : // <http://www.gnu.org/licenses/>.
+    2321              : 
+    2322              : /** @file bits/c++config.h
+    2323              :  *  This is an internal header file, included by other library headers.
+    2324              :  *  Do not attempt to use it directly. @headername{version}
+    2325              :  */
+    2326              : 
+    2327              : #ifndef _GLIBCXX_CXX_CONFIG_H
+    2328              : #define _GLIBCXX_CXX_CONFIG_H 1
+    2329              : 
+    2330              : // The major release number for the GCC release the C++ library belongs to.
+    2331              : #define _GLIBCXX_RELEASE 13
+    2332              : 
+    2333              : // The datestamp of the C++ library in compressed ISO date format.
+    2334              : #define __GLIBCXX__ 20240316
+    2335              : 
+    2336              : // Macros for various attributes.
+    2337              : //   _GLIBCXX_PURE
+    2338              : //   _GLIBCXX_CONST
+    2339              : //   _GLIBCXX_NORETURN
+    2340              : //   _GLIBCXX_NOTHROW
+    2341              : //   _GLIBCXX_VISIBILITY
+    2342              : #ifndef _GLIBCXX_PURE
+    2343              : # define _GLIBCXX_PURE __attribute__ ((__pure__))
+    2344              : #endif
+    2345              : 
+    2346              : #ifndef _GLIBCXX_CONST
+    2347              : # define _GLIBCXX_CONST __attribute__ ((__const__))
+    2348              : #endif
+    2349              : 
+    2350              : #ifndef _GLIBCXX_NORETURN
+    2351              : # define _GLIBCXX_NORETURN __attribute__ ((__noreturn__))
+    2352              : #endif
+    2353              : 
+    2354              : // See below for C++
+    2355              : #ifndef _GLIBCXX_NOTHROW
+    2356              : # ifndef __cplusplus
+    2357              : #  define _GLIBCXX_NOTHROW __attribute__((__nothrow__))
+    2358              : # endif
+    2359              : #endif
+    2360              : 
+    2361              : // Macros for visibility attributes.
+    2362              : //   _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
+    2363              : //   _GLIBCXX_VISIBILITY
+    2364              : # define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY 1
+    2365              : 
+    2366              : #if _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
+    2367              : # define _GLIBCXX_VISIBILITY(V) __attribute__ ((__visibility__ (#V)))
+    2368              : #else
+    2369              : // If this is not supplied by the OS-specific or CPU-specific
+    2370              : // headers included below, it will be defined to an empty default.
+    2371              : # define _GLIBCXX_VISIBILITY(V) _GLIBCXX_PSEUDO_VISIBILITY(V)
+    2372              : #endif
+    2373              : 
+    2374              : // Macros for deprecated attributes.
+    2375              : //   _GLIBCXX_USE_DEPRECATED
+    2376              : //   _GLIBCXX_DEPRECATED
+    2377              : //   _GLIBCXX_DEPRECATED_SUGGEST( string-literal )
+    2378              : //   _GLIBCXX11_DEPRECATED
+    2379              : //   _GLIBCXX11_DEPRECATED_SUGGEST( string-literal )
+    2380              : //   _GLIBCXX14_DEPRECATED
+    2381              : //   _GLIBCXX14_DEPRECATED_SUGGEST( string-literal )
+    2382              : //   _GLIBCXX17_DEPRECATED
+    2383              : //   _GLIBCXX17_DEPRECATED_SUGGEST( string-literal )
+    2384              : //   _GLIBCXX20_DEPRECATED
+    2385              : //   _GLIBCXX20_DEPRECATED_SUGGEST( string-literal )
+    2386              : //   _GLIBCXX23_DEPRECATED
+    2387              : //   _GLIBCXX23_DEPRECATED_SUGGEST( string-literal )
+    2388              : #ifndef _GLIBCXX_USE_DEPRECATED
+    2389              : # define _GLIBCXX_USE_DEPRECATED 1
+    2390              : #endif
+    2391              : 
+    2392              : #if defined(__DEPRECATED)
+    2393              : # define _GLIBCXX_DEPRECATED __attribute__ ((__deprecated__))
+    2394              : # define _GLIBCXX_DEPRECATED_SUGGEST(ALT) \
+    2395              :   __attribute__ ((__deprecated__ ("use '" ALT "' instead")))
+    2396              : #else
+    2397              : # define _GLIBCXX_DEPRECATED
+    2398              : # define _GLIBCXX_DEPRECATED_SUGGEST(ALT)
+    2399              : #endif
+    2400              : 
+    2401              : #if defined(__DEPRECATED) && (__cplusplus >= 201103L)
+    2402              : # define _GLIBCXX11_DEPRECATED _GLIBCXX_DEPRECATED
+    2403              : # define _GLIBCXX11_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT)
+    2404              : #else
+    2405              : # define _GLIBCXX11_DEPRECATED
+    2406              : # define _GLIBCXX11_DEPRECATED_SUGGEST(ALT)
+    2407              : #endif
+    2408              : 
+    2409              : #if defined(__DEPRECATED) && (__cplusplus >= 201402L)
+    2410              : # define _GLIBCXX14_DEPRECATED _GLIBCXX_DEPRECATED
+    2411              : # define _GLIBCXX14_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT)
+    2412              : #else
+    2413              : # define _GLIBCXX14_DEPRECATED
+    2414              : # define _GLIBCXX14_DEPRECATED_SUGGEST(ALT)
+    2415              : #endif
+    2416              : 
+    2417              : #if defined(__DEPRECATED) && (__cplusplus >= 201703L)
+    2418              : # define _GLIBCXX17_DEPRECATED [[__deprecated__]]
+    2419              : # define _GLIBCXX17_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT)
+    2420              : #else
+    2421              : # define _GLIBCXX17_DEPRECATED
+    2422              : # define _GLIBCXX17_DEPRECATED_SUGGEST(ALT)
+    2423              : #endif
+    2424              : 
+    2425              : #if defined(__DEPRECATED) && (__cplusplus >= 202002L)
+    2426              : # define _GLIBCXX20_DEPRECATED [[__deprecated__]]
+    2427              : # define _GLIBCXX20_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT)
+    2428              : #else
+    2429              : # define _GLIBCXX20_DEPRECATED
+    2430              : # define _GLIBCXX20_DEPRECATED_SUGGEST(ALT)
+    2431              : #endif
+    2432              : 
+    2433              : #if defined(__DEPRECATED) && (__cplusplus >= 202100L)
+    2434              : # define _GLIBCXX23_DEPRECATED [[__deprecated__]]
+    2435              : # define _GLIBCXX23_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT)
+    2436              : #else
+    2437              : # define _GLIBCXX23_DEPRECATED
+    2438              : # define _GLIBCXX23_DEPRECATED_SUGGEST(ALT)
+    2439              : #endif
+    2440              : 
+    2441              : // Macros for ABI tag attributes.
+    2442              : #ifndef _GLIBCXX_ABI_TAG_CXX11
+    2443              : # define _GLIBCXX_ABI_TAG_CXX11 __attribute ((__abi_tag__ ("cxx11")))
+    2444              : #endif
+    2445              : 
+    2446              : // Macro to warn about unused results.
+    2447              : #if __cplusplus >= 201703L
+    2448              : # define _GLIBCXX_NODISCARD [[__nodiscard__]]
+    2449              : #else
+    2450              : # define _GLIBCXX_NODISCARD
+    2451              : #endif
+    2452              : 
+    2453              : 
+    2454              : 
+    2455              : #if __cplusplus
+    2456              : 
+    2457              : // Macro for constexpr, to support in mixed 03/0x mode.
+    2458              : #ifndef _GLIBCXX_CONSTEXPR
+    2459              : # if __cplusplus >= 201103L
+    2460              : #  define _GLIBCXX_CONSTEXPR constexpr
+    2461              : #  define _GLIBCXX_USE_CONSTEXPR constexpr
+    2462              : # else
+    2463              : #  define _GLIBCXX_CONSTEXPR
+    2464              : #  define _GLIBCXX_USE_CONSTEXPR const
+    2465              : # endif
+    2466              : #endif
+    2467              : 
+    2468              : #ifndef _GLIBCXX14_CONSTEXPR
+    2469              : # if __cplusplus >= 201402L
+    2470              : #  define _GLIBCXX14_CONSTEXPR constexpr
+    2471              : # else
+    2472              : #  define _GLIBCXX14_CONSTEXPR
+    2473              : # endif
+    2474              : #endif
+    2475              : 
+    2476              : #ifndef _GLIBCXX17_CONSTEXPR
+    2477              : # if __cplusplus >= 201703L
+    2478              : #  define _GLIBCXX17_CONSTEXPR constexpr
+    2479              : # else
+    2480              : #  define _GLIBCXX17_CONSTEXPR
+    2481              : # endif
+    2482              : #endif
+    2483              : 
+    2484              : #ifndef _GLIBCXX20_CONSTEXPR
+    2485              : # if __cplusplus >= 202002L
+    2486              : #  define _GLIBCXX20_CONSTEXPR constexpr
+    2487              : # else
+    2488              : #  define _GLIBCXX20_CONSTEXPR
+    2489              : # endif
+    2490              : #endif
+    2491              : 
+    2492              : #ifndef _GLIBCXX23_CONSTEXPR
+    2493              : # if __cplusplus >= 202100L
+    2494              : #  define _GLIBCXX23_CONSTEXPR constexpr
+    2495              : # else
+    2496              : #  define _GLIBCXX23_CONSTEXPR
+    2497              : # endif
+    2498              : #endif
+    2499              : 
+    2500              : #ifndef _GLIBCXX17_INLINE
+    2501              : # if __cplusplus >= 201703L
+    2502              : #  define _GLIBCXX17_INLINE inline
+    2503              : # else
+    2504              : #  define _GLIBCXX17_INLINE
+    2505              : # endif
+    2506              : #endif
+    2507              : 
+    2508              : // Macro for noexcept, to support in mixed 03/0x mode.
+    2509              : #ifndef _GLIBCXX_NOEXCEPT
+    2510              : # if __cplusplus >= 201103L
+    2511              : #  define _GLIBCXX_NOEXCEPT noexcept
+    2512              : #  define _GLIBCXX_NOEXCEPT_IF(...) noexcept(__VA_ARGS__)
+    2513              : #  define _GLIBCXX_USE_NOEXCEPT noexcept
+    2514              : #  define _GLIBCXX_THROW(_EXC)
+    2515              : # else
+    2516              : #  define _GLIBCXX_NOEXCEPT
+    2517              : #  define _GLIBCXX_NOEXCEPT_IF(...)
+    2518              : #  define _GLIBCXX_USE_NOEXCEPT throw()
+    2519              : #  define _GLIBCXX_THROW(_EXC) throw(_EXC)
+    2520              : # endif
+    2521              : #endif
+    2522              : 
+    2523              : #ifndef _GLIBCXX_NOTHROW
+    2524              : # define _GLIBCXX_NOTHROW _GLIBCXX_USE_NOEXCEPT
+    2525              : #endif
+    2526              : 
+    2527              : #ifndef _GLIBCXX_THROW_OR_ABORT
+    2528              : # if __cpp_exceptions
+    2529              : #  define _GLIBCXX_THROW_OR_ABORT(_EXC) (throw (_EXC))
+    2530              : # else
+    2531              : #  define _GLIBCXX_THROW_OR_ABORT(_EXC) (__builtin_abort())
+    2532              : # endif
+    2533              : #endif
+    2534              : 
+    2535              : #if __cpp_noexcept_function_type
+    2536              : #define _GLIBCXX_NOEXCEPT_PARM , bool _NE
+    2537              : #define _GLIBCXX_NOEXCEPT_QUAL noexcept (_NE)
+    2538              : #else
+    2539              : #define _GLIBCXX_NOEXCEPT_PARM
+    2540              : #define _GLIBCXX_NOEXCEPT_QUAL
+    2541              : #endif
+    2542              : 
+    2543              : // Macro for extern template, ie controlling template linkage via use
+    2544              : // of extern keyword on template declaration. As documented in the g++
+    2545              : // manual, it inhibits all implicit instantiations and is used
+    2546              : // throughout the library to avoid multiple weak definitions for
+    2547              : // required types that are already explicitly instantiated in the
+    2548              : // library binary. This substantially reduces the binary size of
+    2549              : // resulting executables.
+    2550              : // Special case: _GLIBCXX_EXTERN_TEMPLATE == -1 disallows extern
+    2551              : // templates only in basic_string, thus activating its debug-mode
+    2552              : // checks even at -O0.
+    2553              : # define _GLIBCXX_EXTERN_TEMPLATE 1
+    2554              : 
+    2555              : /*
+    2556              :   Outline of libstdc++ namespaces.
+    2557              : 
+    2558              :   namespace std
+    2559              :   {
+    2560              :     namespace __debug { }
+    2561              :     namespace __parallel { }
+    2562              :     namespace __cxx1998 { }
+    2563              : 
+    2564              :     namespace __detail {
+    2565              :       namespace __variant { }                           // C++17
+    2566              :     }
+    2567              : 
+    2568              :     namespace rel_ops { }
+    2569              : 
+    2570              :     namespace tr1
+    2571              :     {
+    2572              :       namespace placeholders { }
+    2573              :       namespace regex_constants { }
+    2574              :       namespace __detail { }
+    2575              :     }
+    2576              : 
+    2577              :     namespace tr2 { }
+    2578              :     
+    2579              :     namespace decimal { }
+    2580              : 
+    2581              :     namespace chrono { }                                // C++11
+    2582              :     namespace placeholders { }                          // C++11
+    2583              :     namespace regex_constants { }                       // C++11
+    2584              :     namespace this_thread { }                           // C++11
+    2585              :     inline namespace literals {                         // C++14
+    2586              :       inline namespace chrono_literals { }              // C++14
+    2587              :       inline namespace complex_literals { }             // C++14
+    2588              :       inline namespace string_literals { }              // C++14
+    2589              :       inline namespace string_view_literals { }         // C++17
+    2590              :     }
+    2591              :   }
+    2592              : 
+    2593              :   namespace abi { }
+    2594              : 
+    2595              :   namespace __gnu_cxx
+    2596              :   {
+    2597              :     namespace __detail { }
+    2598              :   }
+    2599              : 
+    2600              :   For full details see:
+    2601              :   http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html
+    2602              : */
+    2603              : namespace std
+    2604              : {
+    2605              :   typedef __SIZE_TYPE__         size_t;
+    2606              :   typedef __PTRDIFF_TYPE__      ptrdiff_t;
+    2607              : 
+    2608              : #if __cplusplus >= 201103L
+    2609              :   typedef decltype(nullptr)     nullptr_t;
+    2610              : #endif
+    2611              : 
+    2612              : #pragma GCC visibility push(default)
+    2613              :   // This allows the library to terminate without including all of <exception>
+    2614              :   // and without making the declaration of std::terminate visible to users.
+    2615              :   extern "C++" __attribute__ ((__noreturn__, __always_inline__))
+    2616              :   inline void __terminate() _GLIBCXX_USE_NOEXCEPT
+    2617              :   {
+    2618              :     void terminate() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__noreturn__));
+    2619            0 :     terminate();
+    2620              :   }
+    2621              : #pragma GCC visibility pop
+    2622              : }
+    2623              : 
+    2624              : # define _GLIBCXX_USE_DUAL_ABI 1
+    2625              : 
+    2626              : #if ! _GLIBCXX_USE_DUAL_ABI
+    2627              : // Ignore any pre-defined value of _GLIBCXX_USE_CXX11_ABI
+    2628              : # undef _GLIBCXX_USE_CXX11_ABI
+    2629              : #endif
+    2630              : 
+    2631              : #ifndef _GLIBCXX_USE_CXX11_ABI
+    2632              : # define _GLIBCXX_USE_CXX11_ABI 1
+    2633              : #endif
+    2634              : 
+    2635              : #if _GLIBCXX_USE_CXX11_ABI
+    2636              : namespace std
+    2637              : {
+    2638              :   inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
+    2639              : }
+    2640              : namespace __gnu_cxx
+    2641              : {
+    2642              :   inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
+    2643              : }
+    2644              : # define _GLIBCXX_NAMESPACE_CXX11 __cxx11::
+    2645              : # define _GLIBCXX_BEGIN_NAMESPACE_CXX11 namespace __cxx11 {
+    2646              : # define _GLIBCXX_END_NAMESPACE_CXX11 }
+    2647              : # define _GLIBCXX_DEFAULT_ABI_TAG _GLIBCXX_ABI_TAG_CXX11
+    2648              : #else
+    2649              : # define _GLIBCXX_NAMESPACE_CXX11
+    2650              : # define _GLIBCXX_BEGIN_NAMESPACE_CXX11
+    2651              : # define _GLIBCXX_END_NAMESPACE_CXX11
+    2652              : # define _GLIBCXX_DEFAULT_ABI_TAG
+    2653              : #endif
+    2654              : 
+    2655              : // Non-zero if inline namespaces are used for versioning the entire library.
+    2656              : # define _GLIBCXX_INLINE_VERSION 0 
+    2657              : 
+    2658              : #if _GLIBCXX_INLINE_VERSION
+    2659              : // Inline namespace for symbol versioning of (nearly) everything in std.
+    2660              : # define _GLIBCXX_BEGIN_NAMESPACE_VERSION namespace __8 {
+    2661              : # define _GLIBCXX_END_NAMESPACE_VERSION }
+    2662              : // Unused when everything in std is versioned anyway.
+    2663              : # define _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(X)
+    2664              : # define _GLIBCXX_END_INLINE_ABI_NAMESPACE(X)
+    2665              : 
+    2666              : namespace std
+    2667              : {
+    2668              : inline _GLIBCXX_BEGIN_NAMESPACE_VERSION
+    2669              : #if __cplusplus >= 201402L
+    2670              :   inline namespace literals {
+    2671              :     inline namespace chrono_literals { }
+    2672              :     inline namespace complex_literals { }
+    2673              :     inline namespace string_literals { }
+    2674              : #if __cplusplus > 201402L
+    2675              :     inline namespace string_view_literals { }
+    2676              : #endif // C++17
+    2677              :   }
+    2678              : #endif // C++14
+    2679              : _GLIBCXX_END_NAMESPACE_VERSION
+    2680              : }
+    2681              : 
+    2682              : namespace __gnu_cxx
+    2683              : {
+    2684              : inline _GLIBCXX_BEGIN_NAMESPACE_VERSION
+    2685              : _GLIBCXX_END_NAMESPACE_VERSION
+    2686              : }
+    2687              : 
+    2688              : #else
+    2689              : // Unused.
+    2690              : # define _GLIBCXX_BEGIN_NAMESPACE_VERSION
+    2691              : # define _GLIBCXX_END_NAMESPACE_VERSION
+    2692              : // Used to version individual components, e.g. std::_V2::error_category.
+    2693              : # define _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(X) inline namespace X {
+    2694              : # define _GLIBCXX_END_INLINE_ABI_NAMESPACE(X)   } // inline namespace X
+    2695              : #endif
+    2696              : 
+    2697              : // In the case that we don't have a hosted environment, we can't provide the
+    2698              : // debugging mode.  Instead, we do our best and downgrade to assertions.
+    2699              : #if defined(_GLIBCXX_DEBUG) && !__STDC_HOSTED__
+    2700              : #undef _GLIBCXX_DEBUG
+    2701              : #define _GLIBCXX_ASSERTIONS 1
+    2702              : #endif
+    2703              : 
+    2704              : // Inline namespaces for special modes: debug, parallel.
+    2705              : #if defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PARALLEL)
+    2706              : namespace std
+    2707              : {
+    2708              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+    2709              : 
+    2710              :   // Non-inline namespace for components replaced by alternates in active mode.
+    2711              :   namespace __cxx1998
+    2712              :   {
+    2713              : # if _GLIBCXX_USE_CXX11_ABI
+    2714              :   inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
+    2715              : # endif
+    2716              :   }
+    2717              : 
+    2718              : _GLIBCXX_END_NAMESPACE_VERSION
+    2719              : 
+    2720              :   // Inline namespace for debug mode.
+    2721              : # ifdef _GLIBCXX_DEBUG
+    2722              :   inline namespace __debug { }
+    2723              : # endif
+    2724              : 
+    2725              :   // Inline namespaces for parallel mode.
+    2726              : # ifdef _GLIBCXX_PARALLEL
+    2727              :   inline namespace __parallel { }
+    2728              : # endif
+    2729              : }
+    2730              : 
+    2731              : // Check for invalid usage and unsupported mixed-mode use.
+    2732              : # if defined(_GLIBCXX_DEBUG) && defined(_GLIBCXX_PARALLEL)
+    2733              : #  error illegal use of multiple inlined namespaces
+    2734              : # endif
+    2735              : 
+    2736              : // Check for invalid use due to lack for weak symbols.
+    2737              : # if __NO_INLINE__ && !__GXX_WEAK__
+    2738              : #  warning currently using inlined namespace mode which may fail \
+    2739              :    without inlining due to lack of weak symbols
+    2740              : # endif
+    2741              : #endif
+    2742              : 
+    2743              : // Macros for namespace scope. Either namespace std:: or the name
+    2744              : // of some nested namespace within it corresponding to the active mode.
+    2745              : // _GLIBCXX_STD_A
+    2746              : // _GLIBCXX_STD_C
+    2747              : //
+    2748              : // Macros for opening/closing conditional namespaces.
+    2749              : // _GLIBCXX_BEGIN_NAMESPACE_ALGO
+    2750              : // _GLIBCXX_END_NAMESPACE_ALGO
+    2751              : // _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
+    2752              : // _GLIBCXX_END_NAMESPACE_CONTAINER
+    2753              : #if defined(_GLIBCXX_DEBUG)
+    2754              : # define _GLIBCXX_STD_C __cxx1998
+    2755              : # define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER \
+    2756              :          namespace _GLIBCXX_STD_C {
+    2757              : # define _GLIBCXX_END_NAMESPACE_CONTAINER }
+    2758              : #else
+    2759              : # define _GLIBCXX_STD_C std
+    2760              : # define _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
+    2761              : # define _GLIBCXX_END_NAMESPACE_CONTAINER
+    2762              : #endif
+    2763              : 
+    2764              : #ifdef _GLIBCXX_PARALLEL
+    2765              : # define _GLIBCXX_STD_A __cxx1998
+    2766              : # define _GLIBCXX_BEGIN_NAMESPACE_ALGO \
+    2767              :          namespace _GLIBCXX_STD_A {
+    2768              : # define _GLIBCXX_END_NAMESPACE_ALGO }
+    2769              : #else
+    2770              : # define _GLIBCXX_STD_A std
+    2771              : # define _GLIBCXX_BEGIN_NAMESPACE_ALGO
+    2772              : # define _GLIBCXX_END_NAMESPACE_ALGO
+    2773              : #endif
+    2774              : 
+    2775              : // GLIBCXX_ABI Deprecated
+    2776              : // Define if compatibility should be provided for -mlong-double-64.
+    2777              : #undef _GLIBCXX_LONG_DOUBLE_COMPAT
+    2778              : 
+    2779              : // Define if compatibility should be provided for alternative 128-bit long
+    2780              : // double formats. Not possible for Clang until __ibm128 is supported.
+    2781              : #ifndef __clang__
+    2782              : #undef _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT
+    2783              : #endif
+    2784              : 
+    2785              : // Inline namespaces for long double 128 modes.
+    2786              : #if defined _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT \
+    2787              :   && defined __LONG_DOUBLE_IEEE128__
+    2788              : namespace std
+    2789              : {
+    2790              :   // Namespaces for 128-bit IEEE long double format on 64-bit POWER LE.
+    2791              :   inline namespace __gnu_cxx_ieee128 { }
+    2792              :   inline namespace __gnu_cxx11_ieee128 { }
+    2793              : }
+    2794              : # define _GLIBCXX_NAMESPACE_LDBL __gnu_cxx_ieee128::
+    2795              : # define _GLIBCXX_BEGIN_NAMESPACE_LDBL namespace __gnu_cxx_ieee128 {
+    2796              : # define _GLIBCXX_END_NAMESPACE_LDBL }
+    2797              : # define _GLIBCXX_NAMESPACE_LDBL_OR_CXX11 __gnu_cxx11_ieee128::
+    2798              : # define _GLIBCXX_BEGIN_NAMESPACE_LDBL_OR_CXX11 namespace __gnu_cxx11_ieee128 {
+    2799              : # define _GLIBCXX_END_NAMESPACE_LDBL_OR_CXX11 }
+    2800              : 
+    2801              : #else // _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && IEEE128
+    2802              : 
+    2803              : #if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
+    2804              : namespace std
+    2805              : {
+    2806              :   inline namespace __gnu_cxx_ldbl128 { }
+    2807              : }
+    2808              : # define _GLIBCXX_NAMESPACE_LDBL __gnu_cxx_ldbl128::
+    2809              : # define _GLIBCXX_BEGIN_NAMESPACE_LDBL namespace __gnu_cxx_ldbl128 {
+    2810              : # define _GLIBCXX_END_NAMESPACE_LDBL }
+    2811              : #else
+    2812              : # define _GLIBCXX_NAMESPACE_LDBL
+    2813              : # define _GLIBCXX_BEGIN_NAMESPACE_LDBL
+    2814              : # define _GLIBCXX_END_NAMESPACE_LDBL
+    2815              : #endif
+    2816              : 
+    2817              : #if _GLIBCXX_USE_CXX11_ABI
+    2818              : # define _GLIBCXX_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_NAMESPACE_CXX11
+    2819              : # define _GLIBCXX_BEGIN_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_BEGIN_NAMESPACE_CXX11
+    2820              : # define _GLIBCXX_END_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_END_NAMESPACE_CXX11
+    2821              : #else
+    2822              : # define _GLIBCXX_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_NAMESPACE_LDBL
+    2823              : # define _GLIBCXX_BEGIN_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_BEGIN_NAMESPACE_LDBL
+    2824              : # define _GLIBCXX_END_NAMESPACE_LDBL_OR_CXX11 _GLIBCXX_END_NAMESPACE_LDBL
+    2825              : #endif
+    2826              : 
+    2827              : #endif // _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && IEEE128
+    2828              : 
+    2829              : namespace std
+    2830              : {
+    2831              : #pragma GCC visibility push(default)
+    2832              :   // Internal version of std::is_constant_evaluated().
+    2833              :   // This can be used without checking if the compiler supports the feature.
+    2834              :   // The macro _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED can be used to check if
+    2835              :   // the compiler support is present to make this function work as expected.
+    2836              :   _GLIBCXX_CONSTEXPR inline bool
+    2837   3657091546 :   __is_constant_evaluated() _GLIBCXX_NOEXCEPT
+    2838              :   {
+    2839              : #if __cpp_if_consteval >= 202106L
+    2840              : # define _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED 1
+    2841              :     if consteval { return true; } else { return false; }
+    2842              : #elif __cplusplus >= 201103L && __has_builtin(__builtin_is_constant_evaluated)
+    2843              : # define _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED 1
+    2844   3657091546 :     return __builtin_is_constant_evaluated();
+    2845              : #else
+    2846              :     return false;
+    2847              : #endif
+    2848              :   }
+    2849              : #pragma GCC visibility pop
+    2850              : }
+    2851              : 
+    2852              : // Debug Mode implies checking assertions.
+    2853              : #if defined(_GLIBCXX_DEBUG) && !defined(_GLIBCXX_ASSERTIONS)
+    2854              : # define _GLIBCXX_ASSERTIONS 1
+    2855              : #endif
+    2856              : 
+    2857              : // Disable std::string explicit instantiation declarations in order to assert.
+    2858              : #ifdef _GLIBCXX_ASSERTIONS
+    2859              : # undef _GLIBCXX_EXTERN_TEMPLATE
+    2860              : # define _GLIBCXX_EXTERN_TEMPLATE -1
+    2861              : #endif
+    2862              : 
+    2863              : 
+    2864              : #if _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED
+    2865              : # define __glibcxx_constexpr_assert(cond) \
+    2866              :   if (std::__is_constant_evaluated() && !bool(cond))    \
+    2867              :     __builtin_unreachable() /* precondition violation detected! */
+    2868              : #else
+    2869              : # define __glibcxx_constexpr_assert(unevaluated)
+    2870              : #endif
+    2871              : 
+    2872              : #define _GLIBCXX_VERBOSE_ASSERT 1
+    2873              : 
+    2874              : // Assert.
+    2875              : #if defined(_GLIBCXX_ASSERTIONS) \
+    2876              :   || defined(_GLIBCXX_PARALLEL) || defined(_GLIBCXX_PARALLEL_ASSERTIONS)
+    2877              : # ifdef _GLIBCXX_VERBOSE_ASSERT
+    2878              : namespace std
+    2879              : {
+    2880              : #pragma GCC visibility push(default)
+    2881              :   // Avoid the use of assert, because we're trying to keep the <cassert>
+    2882              :   // include out of the mix.
+    2883              :   extern "C++" _GLIBCXX_NORETURN
+    2884              :   void
+    2885              :   __glibcxx_assert_fail(const char* __file, int __line,
+    2886              :                         const char* __function, const char* __condition)
+    2887              :   _GLIBCXX_NOEXCEPT;
+    2888              : #pragma GCC visibility pop
+    2889              : }
+    2890              : #define __glibcxx_assert_impl(_Condition)                               \
+    2891              :   if (__builtin_expect(!bool(_Condition), false))                       \
+    2892              :   {                                                                     \
+    2893              :     __glibcxx_constexpr_assert(false);                                  \
+    2894              :     std::__glibcxx_assert_fail(__FILE__, __LINE__, __PRETTY_FUNCTION__, \
+    2895              :                                #_Condition);                            \
+    2896              :   }
+    2897              : # else // ! VERBOSE_ASSERT
+    2898              : # define __glibcxx_assert_impl(_Condition)              \
+    2899              :   if (__builtin_expect(!bool(_Condition), false))       \
+    2900              :   {                                                     \
+    2901              :     __glibcxx_constexpr_assert(false);                  \
+    2902              :     __builtin_abort();                                  \
+    2903              :   }
+    2904              : # endif
+    2905              : #endif
+    2906              : 
+    2907              : #if defined(_GLIBCXX_ASSERTIONS)
+    2908              : # define __glibcxx_assert(cond) \
+    2909              :   do { __glibcxx_assert_impl(cond); } while (false)
+    2910              : #else
+    2911              : # define __glibcxx_assert(cond) \
+    2912              :   do { __glibcxx_constexpr_assert(cond); } while (false)
+    2913              : #endif
+    2914              : 
+    2915              : // Macro indicating that TSAN is in use.
+    2916              : #if __SANITIZE_THREAD__
+    2917              : #  define _GLIBCXX_TSAN 1
+    2918              : #elif defined __has_feature
+    2919              : # if __has_feature(thread_sanitizer)
+    2920              : #  define _GLIBCXX_TSAN 1
+    2921              : # endif
+    2922              : #endif
+    2923              : 
+    2924              : // Macros for race detectors.
+    2925              : // _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A) and
+    2926              : // _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) should be used to explain
+    2927              : // atomic (lock-free) synchronization to race detectors:
+    2928              : // the race detector will infer a happens-before arc from the former to the
+    2929              : // latter when they share the same argument pointer.
+    2930              : //
+    2931              : // The most frequent use case for these macros (and the only case in the
+    2932              : // current implementation of the library) is atomic reference counting:
+    2933              : //   void _M_remove_reference()
+    2934              : //   {
+    2935              : //     _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&this->_M_refcount);
+    2936              : //     if (__gnu_cxx::__exchange_and_add_dispatch(&this->_M_refcount, -1) <= 0)
+    2937              : //       {
+    2938              : //         _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&this->_M_refcount);
+    2939              : //         _M_destroy(__a);
+    2940              : //       }
+    2941              : //   }
+    2942              : // The annotations in this example tell the race detector that all memory
+    2943              : // accesses occurred when the refcount was positive do not race with
+    2944              : // memory accesses which occurred after the refcount became zero.
+    2945              : #ifndef _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE
+    2946              : # define  _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A)
+    2947              : #endif
+    2948              : #ifndef _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER
+    2949              : # define  _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A)
+    2950              : #endif
+    2951              : 
+    2952              : // Macros for C linkage: define extern "C" linkage only when using C++.
+    2953              : # define _GLIBCXX_BEGIN_EXTERN_C extern "C" {
+    2954              : # define _GLIBCXX_END_EXTERN_C }
+    2955              : 
+    2956              : # define _GLIBCXX_USE_ALLOCATOR_NEW 1
+    2957              : 
+    2958              : #ifdef __SIZEOF_INT128__
+    2959              : #if ! defined __GLIBCXX_TYPE_INT_N_0 && ! defined __STRICT_ANSI__
+    2960              : // If __int128 is supported, we expect __GLIBCXX_TYPE_INT_N_0 to be defined
+    2961              : // unless the compiler is in strict mode. If it's not defined and the strict
+    2962              : // macro is not defined, something is wrong.
+    2963              : #warning "__STRICT_ANSI__ seems to have been undefined; this is not supported"
+    2964              : #endif
+    2965              : #endif
+    2966              : 
+    2967              : #else // !__cplusplus
+    2968              : # define _GLIBCXX_BEGIN_EXTERN_C
+    2969              : # define _GLIBCXX_END_EXTERN_C
+    2970              : #endif
+    2971              : 
+    2972              : 
+    2973              : // First includes.
+    2974              : 
+    2975              : // Pick up any OS-specific definitions.
+    2976              : #include <bits/os_defines.h>
+    2977              : 
+    2978              : // Pick up any CPU-specific definitions.
+    2979              : #include <bits/cpu_defines.h>
+    2980              : 
+    2981              : // If platform uses neither visibility nor psuedo-visibility,
+    2982              : // specify empty default for namespace annotation macros.
+    2983              : #ifndef _GLIBCXX_PSEUDO_VISIBILITY
+    2984              : # define _GLIBCXX_PSEUDO_VISIBILITY(V)
+    2985              : #endif
+    2986              : 
+    2987              : // Certain function definitions that are meant to be overridable from
+    2988              : // user code are decorated with this macro.  For some targets, this
+    2989              : // macro causes these definitions to be weak.
+    2990              : #ifndef _GLIBCXX_WEAK_DEFINITION
+    2991              : # define _GLIBCXX_WEAK_DEFINITION
+    2992              : #endif
+    2993              : 
+    2994              : // By default, we assume that __GXX_WEAK__ also means that there is support
+    2995              : // for declaring functions as weak while not defining such functions.  This
+    2996              : // allows for referring to functions provided by other libraries (e.g.,
+    2997              : // libitm) without depending on them if the respective features are not used.
+    2998              : #ifndef _GLIBCXX_USE_WEAK_REF
+    2999              : # define _GLIBCXX_USE_WEAK_REF __GXX_WEAK__
+    3000              : #endif
+    3001              : 
+    3002              : // Conditionally enable annotations for the Transactional Memory TS on C++11.
+    3003              : // Most of the following conditions are due to limitations in the current
+    3004              : // implementation.
+    3005              : #if __cplusplus >= 201103L && _GLIBCXX_USE_CXX11_ABI                 \
+    3006              :   && _GLIBCXX_USE_DUAL_ABI && __cpp_transactional_memory >= 201500L  \
+    3007              :   &&  !_GLIBCXX_FULLY_DYNAMIC_STRING && _GLIBCXX_USE_WEAK_REF           \
+    3008              :   && _GLIBCXX_USE_ALLOCATOR_NEW
+    3009              : #define _GLIBCXX_TXN_SAFE transaction_safe
+    3010              : #define _GLIBCXX_TXN_SAFE_DYN transaction_safe_dynamic
+    3011              : #else
+    3012              : #define _GLIBCXX_TXN_SAFE
+    3013              : #define _GLIBCXX_TXN_SAFE_DYN
+    3014              : #endif
+    3015              : 
+    3016              : #if __cplusplus > 201402L
+    3017              : // In C++17 mathematical special functions are in namespace std.
+    3018              : # define _GLIBCXX_USE_STD_SPEC_FUNCS 1
+    3019              : #elif __cplusplus >= 201103L && __STDCPP_WANT_MATH_SPEC_FUNCS__ != 0
+    3020              : // For C++11 and C++14 they are in namespace std when requested.
+    3021              : # define _GLIBCXX_USE_STD_SPEC_FUNCS 1
+    3022              : #endif
+    3023              : 
+    3024              : // The remainder of the prewritten config is automatic; all the
+    3025              : // user hooks are listed above.
+    3026              : 
+    3027              : // Create a boolean flag to be used to determine if --fast-math is set.
+    3028              : #ifdef __FAST_MATH__
+    3029              : # define _GLIBCXX_FAST_MATH 1
+    3030              : #else
+    3031              : # define _GLIBCXX_FAST_MATH 0
+    3032              : #endif
+    3033              : 
+    3034              : // This marks string literals in header files to be extracted for eventual
+    3035              : // translation.  It is primarily used for messages in thrown exceptions; see
+    3036              : // src/functexcept.cc.  We use __N because the more traditional _N is used
+    3037              : // for something else under certain OSes (see BADNAMES).
+    3038              : #define __N(msgid)     (msgid)
+    3039              : 
+    3040              : // For example, <windows.h> is known to #define min and max as macros...
+    3041              : #undef min
+    3042              : #undef max
+    3043              : 
+    3044              : // N.B. these _GLIBCXX_USE_C99_XXX macros are defined unconditionally
+    3045              : // so they should be tested with #if not with #ifdef.
+    3046              : #if __cplusplus >= 201103L
+    3047              : # ifndef _GLIBCXX_USE_C99_MATH
+    3048              : #  define _GLIBCXX_USE_C99_MATH _GLIBCXX11_USE_C99_MATH
+    3049              : # endif
+    3050              : # ifndef _GLIBCXX_USE_C99_COMPLEX
+    3051              : # define _GLIBCXX_USE_C99_COMPLEX _GLIBCXX11_USE_C99_COMPLEX
+    3052              : # endif
+    3053              : # ifndef _GLIBCXX_USE_C99_STDIO
+    3054              : # define _GLIBCXX_USE_C99_STDIO _GLIBCXX11_USE_C99_STDIO
+    3055              : # endif
+    3056              : # ifndef _GLIBCXX_USE_C99_STDLIB
+    3057              : # define _GLIBCXX_USE_C99_STDLIB _GLIBCXX11_USE_C99_STDLIB
+    3058              : # endif
+    3059              : # ifndef _GLIBCXX_USE_C99_WCHAR
+    3060              : # define _GLIBCXX_USE_C99_WCHAR _GLIBCXX11_USE_C99_WCHAR
+    3061              : # endif
+    3062              : #else
+    3063              : # ifndef _GLIBCXX_USE_C99_MATH
+    3064              : #  define _GLIBCXX_USE_C99_MATH _GLIBCXX98_USE_C99_MATH
+    3065              : # endif
+    3066              : # ifndef _GLIBCXX_USE_C99_COMPLEX
+    3067              : # define _GLIBCXX_USE_C99_COMPLEX _GLIBCXX98_USE_C99_COMPLEX
+    3068              : # endif
+    3069              : # ifndef _GLIBCXX_USE_C99_STDIO
+    3070              : # define _GLIBCXX_USE_C99_STDIO _GLIBCXX98_USE_C99_STDIO
+    3071              : # endif
+    3072              : # ifndef _GLIBCXX_USE_C99_STDLIB
+    3073              : # define _GLIBCXX_USE_C99_STDLIB _GLIBCXX98_USE_C99_STDLIB
+    3074              : # endif
+    3075              : # ifndef _GLIBCXX_USE_C99_WCHAR
+    3076              : # define _GLIBCXX_USE_C99_WCHAR _GLIBCXX98_USE_C99_WCHAR
+    3077              : # endif
+    3078              : #endif
+    3079              : 
+    3080              : // Unless explicitly specified, enable char8_t extensions only if the core
+    3081              : // language char8_t feature macro is defined.
+    3082              : #ifndef _GLIBCXX_USE_CHAR8_T
+    3083              : # ifdef __cpp_char8_t
+    3084              : #  define _GLIBCXX_USE_CHAR8_T 1
+    3085              : # endif
+    3086              : #endif
+    3087              : #ifdef _GLIBCXX_USE_CHAR8_T
+    3088              : # define __cpp_lib_char8_t 201907L
+    3089              : #endif
+    3090              : 
+    3091              : /* Define if __float128 is supported on this host.  */
+    3092              : #if defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__)
+    3093              : /* For powerpc64 don't use __float128 when it's the same type as long double. */
+    3094              : # if !(defined(_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT) && defined(__LONG_DOUBLE_IEEE128__))
+    3095              : #  define _GLIBCXX_USE_FLOAT128 1
+    3096              : # endif
+    3097              : #endif
+    3098              : 
+    3099              : // Define if float has the IEEE binary32 format.
+    3100              : #if __FLT_MANT_DIG__ == 24 \
+    3101              :   && __FLT_MIN_EXP__ == -125 \
+    3102              :   && __FLT_MAX_EXP__ == 128
+    3103              : # define _GLIBCXX_FLOAT_IS_IEEE_BINARY32 1
+    3104              : #endif
+    3105              : 
+    3106              : // Define if double has the IEEE binary64 format.
+    3107              : #if __DBL_MANT_DIG__ == 53 \
+    3108              :   && __DBL_MIN_EXP__ == -1021 \
+    3109              :   && __DBL_MAX_EXP__ == 1024
+    3110              : # define _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 1
+    3111              : #endif
+    3112              : 
+    3113              : // Define if long double has the IEEE binary128 format.
+    3114              : #if __LDBL_MANT_DIG__ == 113 \
+    3115              :   && __LDBL_MIN_EXP__ == -16381 \
+    3116              :   && __LDBL_MAX_EXP__ == 16384
+    3117              : # define _GLIBCXX_LDOUBLE_IS_IEEE_BINARY128 1
+    3118              : #endif
+    3119              : 
+    3120              : #ifdef __STDCPP_BFLOAT16_T__
+    3121              : namespace __gnu_cxx
+    3122              : {
+    3123              :   using __bfloat16_t = decltype(0.0bf16);
+    3124              : }
+    3125              : #endif
+    3126              : 
+    3127              : #ifdef __has_builtin
+    3128              : # ifdef __is_identifier
+    3129              : // Intel and older Clang require !__is_identifier for some built-ins:
+    3130              : #  define _GLIBCXX_HAS_BUILTIN(B) __has_builtin(B) || ! __is_identifier(B)
+    3131              : # else
+    3132              : #  define _GLIBCXX_HAS_BUILTIN(B) __has_builtin(B)
+    3133              : # endif
+    3134              : #endif
+    3135              : 
+    3136              : #if _GLIBCXX_HAS_BUILTIN(__has_unique_object_representations)
+    3137              : # define _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP 1
+    3138              : #endif
+    3139              : 
+    3140              : #if _GLIBCXX_HAS_BUILTIN(__is_aggregate)
+    3141              : # define _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE 1
+    3142              : #endif
+    3143              : 
+    3144              : #if _GLIBCXX_HAS_BUILTIN(__is_same)
+    3145              : #  define _GLIBCXX_HAVE_BUILTIN_IS_SAME 1
+    3146              : #endif
+    3147              : 
+    3148              : #if _GLIBCXX_HAS_BUILTIN(__builtin_launder)
+    3149              : # define _GLIBCXX_HAVE_BUILTIN_LAUNDER 1
+    3150              : #endif
+    3151              : 
+    3152              : #undef _GLIBCXX_HAS_BUILTIN
+    3153              : 
+    3154              : // Mark code that should be ignored by the compiler, but seen by Doxygen.
+    3155              : #define _GLIBCXX_DOXYGEN_ONLY(X)
+    3156              : 
+    3157              : // PSTL configuration
+    3158              : 
+    3159              : #if __cplusplus >= 201703L
+    3160              : // This header is not installed for freestanding:
+    3161              : #if __has_include(<pstl/pstl_config.h>)
+    3162              : // Preserved here so we have some idea which version of upstream we've pulled in
+    3163              : // #define PSTL_VERSION 9000
+    3164              : 
+    3165              : // For now this defaults to being based on the presence of Thread Building Blocks
+    3166              : # ifndef _GLIBCXX_USE_TBB_PAR_BACKEND
+    3167              : #  define _GLIBCXX_USE_TBB_PAR_BACKEND __has_include(<tbb/tbb.h>)
+    3168              : # endif
+    3169              : // This section will need some rework when a new (default) backend type is added
+    3170              : # if _GLIBCXX_USE_TBB_PAR_BACKEND
+    3171              : #  define _PSTL_PAR_BACKEND_TBB
+    3172              : # else
+    3173              : #  define _PSTL_PAR_BACKEND_SERIAL
+    3174              : # endif
+    3175              : 
+    3176              : # define _PSTL_ASSERT(_Condition) __glibcxx_assert(_Condition)
+    3177              : # define _PSTL_ASSERT_MSG(_Condition, _Message) __glibcxx_assert(_Condition)
+    3178              : 
+    3179              : #include <pstl/pstl_config.h>
+    3180              : #endif // __has_include
+    3181              : #endif // C++17
+    3182              : 
+    3183              : // End of prewritten config; the settings discovered at configure time follow.
+    3184              : /* config.h.  Generated from config.h.in by configure.  */
+    3185              : /* config.h.in.  Generated from configure.ac by autoheader.  */
+    3186              : 
+    3187              : /* Define to 1 if you have the `acosf' function. */
+    3188              : #define _GLIBCXX_HAVE_ACOSF 1
+    3189              : 
+    3190              : /* Define to 1 if you have the `acosl' function. */
+    3191              : #define _GLIBCXX_HAVE_ACOSL 1
+    3192              : 
+    3193              : /* Define to 1 if you have the `aligned_alloc' function. */
+    3194              : #define _GLIBCXX_HAVE_ALIGNED_ALLOC 1
+    3195              : 
+    3196              : /* Define if arc4random is available in <stdlib.h>. */
+    3197              : #define _GLIBCXX_HAVE_ARC4RANDOM 1
+    3198              : 
+    3199              : /* Define to 1 if you have the <arpa/inet.h> header file. */
+    3200              : #define _GLIBCXX_HAVE_ARPA_INET_H 1
+    3201              : 
+    3202              : /* Define to 1 if you have the `asinf' function. */
+    3203              : #define _GLIBCXX_HAVE_ASINF 1
+    3204              : 
+    3205              : /* Define to 1 if you have the `asinl' function. */
+    3206              : #define _GLIBCXX_HAVE_ASINL 1
+    3207              : 
+    3208              : /* Define to 1 if the target assembler supports .symver directive. */
+    3209              : #define _GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE 1
+    3210              : 
+    3211              : /* Define to 1 if you have the `atan2f' function. */
+    3212              : #define _GLIBCXX_HAVE_ATAN2F 1
+    3213              : 
+    3214              : /* Define to 1 if you have the `atan2l' function. */
+    3215              : #define _GLIBCXX_HAVE_ATAN2L 1
+    3216              : 
+    3217              : /* Define to 1 if you have the `atanf' function. */
+    3218              : #define _GLIBCXX_HAVE_ATANF 1
+    3219              : 
+    3220              : /* Define to 1 if you have the `atanl' function. */
+    3221              : #define _GLIBCXX_HAVE_ATANL 1
+    3222              : 
+    3223              : /* Defined if shared_ptr reference counting should use atomic operations. */
+    3224              : #define _GLIBCXX_HAVE_ATOMIC_LOCK_POLICY 1
+    3225              : 
+    3226              : /* Define to 1 if you have the `at_quick_exit' function. */
+    3227              : #define _GLIBCXX_HAVE_AT_QUICK_EXIT 1
+    3228              : 
+    3229              : /* Define to 1 if the target assembler supports thread-local storage. */
+    3230              : /* #undef _GLIBCXX_HAVE_CC_TLS */
+    3231              : 
+    3232              : /* Define to 1 if you have the `ceilf' function. */
+    3233              : #define _GLIBCXX_HAVE_CEILF 1
+    3234              : 
+    3235              : /* Define to 1 if you have the `ceill' function. */
+    3236              : #define _GLIBCXX_HAVE_CEILL 1
+    3237              : 
+    3238              : /* Define to 1 if you have the <complex.h> header file. */
+    3239              : #define _GLIBCXX_HAVE_COMPLEX_H 1
+    3240              : 
+    3241              : /* Define to 1 if you have the `cosf' function. */
+    3242              : #define _GLIBCXX_HAVE_COSF 1
+    3243              : 
+    3244              : /* Define to 1 if you have the `coshf' function. */
+    3245              : #define _GLIBCXX_HAVE_COSHF 1
+    3246              : 
+    3247              : /* Define to 1 if you have the `coshl' function. */
+    3248              : #define _GLIBCXX_HAVE_COSHL 1
+    3249              : 
+    3250              : /* Define to 1 if you have the `cosl' function. */
+    3251              : #define _GLIBCXX_HAVE_COSL 1
+    3252              : 
+    3253              : /* Define to 1 if you have the declaration of `strnlen', and to 0 if you
+    3254              :    don't. */
+    3255              : #define _GLIBCXX_HAVE_DECL_STRNLEN 1
+    3256              : 
+    3257              : /* Define to 1 if you have the <dirent.h> header file. */
+    3258              : #define _GLIBCXX_HAVE_DIRENT_H 1
+    3259              : 
+    3260              : /* Define if dirfd is available in <dirent.h>. */
+    3261              : #define _GLIBCXX_HAVE_DIRFD 1
+    3262              : 
+    3263              : /* Define to 1 if you have the <dlfcn.h> header file. */
+    3264              : #define _GLIBCXX_HAVE_DLFCN_H 1
+    3265              : 
+    3266              : /* Define to 1 if you have the <endian.h> header file. */
+    3267              : #define _GLIBCXX_HAVE_ENDIAN_H 1
+    3268              : 
+    3269              : /* Define to 1 if GCC 4.6 supported std::exception_ptr for the target */
+    3270              : #define _GLIBCXX_HAVE_EXCEPTION_PTR_SINCE_GCC46 1
+    3271              : 
+    3272              : /* Define to 1 if you have the <execinfo.h> header file. */
+    3273              : #define _GLIBCXX_HAVE_EXECINFO_H 1
+    3274              : 
+    3275              : /* Define to 1 if you have the `expf' function. */
+    3276              : #define _GLIBCXX_HAVE_EXPF 1
+    3277              : 
+    3278              : /* Define to 1 if you have the `expl' function. */
+    3279              : #define _GLIBCXX_HAVE_EXPL 1
+    3280              : 
+    3281              : /* Define to 1 if you have the `fabsf' function. */
+    3282              : #define _GLIBCXX_HAVE_FABSF 1
+    3283              : 
+    3284              : /* Define to 1 if you have the `fabsl' function. */
+    3285              : #define _GLIBCXX_HAVE_FABSL 1
+    3286              : 
+    3287              : /* Define to 1 if you have the <fcntl.h> header file. */
+    3288              : #define _GLIBCXX_HAVE_FCNTL_H 1
+    3289              : 
+    3290              : /* Define if fdopendir is available in <dirent.h>. */
+    3291              : #define _GLIBCXX_HAVE_FDOPENDIR 1
+    3292              : 
+    3293              : /* Define to 1 if you have the <fenv.h> header file. */
+    3294              : #define _GLIBCXX_HAVE_FENV_H 1
+    3295              : 
+    3296              : /* Define to 1 if you have the `finite' function. */
+    3297              : #define _GLIBCXX_HAVE_FINITE 1
+    3298              : 
+    3299              : /* Define to 1 if you have the `finitef' function. */
+    3300              : #define _GLIBCXX_HAVE_FINITEF 1
+    3301              : 
+    3302              : /* Define to 1 if you have the `finitel' function. */
+    3303              : #define _GLIBCXX_HAVE_FINITEL 1
+    3304              : 
+    3305              : /* Define to 1 if you have the <float.h> header file. */
+    3306              : #define _GLIBCXX_HAVE_FLOAT_H 1
+    3307              : 
+    3308              : /* Define to 1 if you have the `floorf' function. */
+    3309              : #define _GLIBCXX_HAVE_FLOORF 1
+    3310              : 
+    3311              : /* Define to 1 if you have the `floorl' function. */
+    3312              : #define _GLIBCXX_HAVE_FLOORL 1
+    3313              : 
+    3314              : /* Define to 1 if you have the `fmodf' function. */
+    3315              : #define _GLIBCXX_HAVE_FMODF 1
+    3316              : 
+    3317              : /* Define to 1 if you have the `fmodl' function. */
+    3318              : #define _GLIBCXX_HAVE_FMODL 1
+    3319              : 
+    3320              : /* Define to 1 if you have the `fpclass' function. */
+    3321              : /* #undef _GLIBCXX_HAVE_FPCLASS */
+    3322              : 
+    3323              : /* Define to 1 if you have the <fp.h> header file. */
+    3324              : /* #undef _GLIBCXX_HAVE_FP_H */
+    3325              : 
+    3326              : /* Define to 1 if you have the `frexpf' function. */
+    3327              : #define _GLIBCXX_HAVE_FREXPF 1
+    3328              : 
+    3329              : /* Define to 1 if you have the `frexpl' function. */
+    3330              : #define _GLIBCXX_HAVE_FREXPL 1
+    3331              : 
+    3332              : /* Define if getentropy is available in <unistd.h>. */
+    3333              : #define _GLIBCXX_HAVE_GETENTROPY 1
+    3334              : 
+    3335              : /* Define if _Unwind_GetIPInfo is available. */
+    3336              : #define _GLIBCXX_HAVE_GETIPINFO 1
+    3337              : 
+    3338              : /* Define if gets is available in <stdio.h> before C++14. */
+    3339              : #define _GLIBCXX_HAVE_GETS 1
+    3340              : 
+    3341              : /* Define to 1 if you have the `hypot' function. */
+    3342              : #define _GLIBCXX_HAVE_HYPOT 1
+    3343              : 
+    3344              : /* Define to 1 if you have the `hypotf' function. */
+    3345              : #define _GLIBCXX_HAVE_HYPOTF 1
+    3346              : 
+    3347              : /* Define to 1 if you have the `hypotl' function. */
+    3348              : #define _GLIBCXX_HAVE_HYPOTL 1
+    3349              : 
+    3350              : /* Define if you have the iconv() function. */
+    3351              : #define _GLIBCXX_HAVE_ICONV 1
+    3352              : 
+    3353              : /* Define to 1 if you have the <ieeefp.h> header file. */
+    3354              : /* #undef _GLIBCXX_HAVE_IEEEFP_H */
+    3355              : 
+    3356              : /* Define to 1 if you have the <inttypes.h> header file. */
+    3357              : #define _GLIBCXX_HAVE_INTTYPES_H 1
+    3358              : 
+    3359              : /* Define to 1 if you have the `isinf' function. */
+    3360              : /* #undef _GLIBCXX_HAVE_ISINF */
+    3361              : 
+    3362              : /* Define to 1 if you have the `isinff' function. */
+    3363              : #define _GLIBCXX_HAVE_ISINFF 1
+    3364              : 
+    3365              : /* Define to 1 if you have the `isinfl' function. */
+    3366              : #define _GLIBCXX_HAVE_ISINFL 1
+    3367              : 
+    3368              : /* Define to 1 if you have the `isnan' function. */
+    3369              : /* #undef _GLIBCXX_HAVE_ISNAN */
+    3370              : 
+    3371              : /* Define to 1 if you have the `isnanf' function. */
+    3372              : #define _GLIBCXX_HAVE_ISNANF 1
+    3373              : 
+    3374              : /* Define to 1 if you have the `isnanl' function. */
+    3375              : #define _GLIBCXX_HAVE_ISNANL 1
+    3376              : 
+    3377              : /* Defined if iswblank exists. */
+    3378              : #define _GLIBCXX_HAVE_ISWBLANK 1
+    3379              : 
+    3380              : /* Define if LC_MESSAGES is available in <locale.h>. */
+    3381              : #define _GLIBCXX_HAVE_LC_MESSAGES 1
+    3382              : 
+    3383              : /* Define to 1 if you have the `ldexpf' function. */
+    3384              : #define _GLIBCXX_HAVE_LDEXPF 1
+    3385              : 
+    3386              : /* Define to 1 if you have the `ldexpl' function. */
+    3387              : #define _GLIBCXX_HAVE_LDEXPL 1
+    3388              : 
+    3389              : /* Define to 1 if you have the <libintl.h> header file. */
+    3390              : #define _GLIBCXX_HAVE_LIBINTL_H 1
+    3391              : 
+    3392              : /* Only used in build directory testsuite_hooks.h. */
+    3393              : #define _GLIBCXX_HAVE_LIMIT_AS 1
+    3394              : 
+    3395              : /* Only used in build directory testsuite_hooks.h. */
+    3396              : #define _GLIBCXX_HAVE_LIMIT_DATA 1
+    3397              : 
+    3398              : /* Only used in build directory testsuite_hooks.h. */
+    3399              : #define _GLIBCXX_HAVE_LIMIT_FSIZE 1
+    3400              : 
+    3401              : /* Only used in build directory testsuite_hooks.h. */
+    3402              : #define _GLIBCXX_HAVE_LIMIT_RSS 1
+    3403              : 
+    3404              : /* Only used in build directory testsuite_hooks.h. */
+    3405              : #define _GLIBCXX_HAVE_LIMIT_VMEM 0
+    3406              : 
+    3407              : /* Define if link is available in <unistd.h>. */
+    3408              : #define _GLIBCXX_HAVE_LINK 1
+    3409              : 
+    3410              : /* Define to 1 if you have the <link.h> header file. */
+    3411              : #define _GLIBCXX_HAVE_LINK_H 1
+    3412              : 
+    3413              : /* Define if futex syscall is available. */
+    3414              : #define _GLIBCXX_HAVE_LINUX_FUTEX 1
+    3415              : 
+    3416              : /* Define to 1 if you have the <linux/random.h> header file. */
+    3417              : #define _GLIBCXX_HAVE_LINUX_RANDOM_H 1
+    3418              : 
+    3419              : /* Define to 1 if you have the <linux/types.h> header file. */
+    3420              : #define _GLIBCXX_HAVE_LINUX_TYPES_H 1
+    3421              : 
+    3422              : /* Define to 1 if you have the <locale.h> header file. */
+    3423              : #define _GLIBCXX_HAVE_LOCALE_H 1
+    3424              : 
+    3425              : /* Define to 1 if you have the `log10f' function. */
+    3426              : #define _GLIBCXX_HAVE_LOG10F 1
+    3427              : 
+    3428              : /* Define to 1 if you have the `log10l' function. */
+    3429              : #define _GLIBCXX_HAVE_LOG10L 1
+    3430              : 
+    3431              : /* Define to 1 if you have the `logf' function. */
+    3432              : #define _GLIBCXX_HAVE_LOGF 1
+    3433              : 
+    3434              : /* Define to 1 if you have the `logl' function. */
+    3435              : #define _GLIBCXX_HAVE_LOGL 1
+    3436              : 
+    3437              : /* Define to 1 if you have the <machine/endian.h> header file. */
+    3438              : /* #undef _GLIBCXX_HAVE_MACHINE_ENDIAN_H */
+    3439              : 
+    3440              : /* Define to 1 if you have the <machine/param.h> header file. */
+    3441              : /* #undef _GLIBCXX_HAVE_MACHINE_PARAM_H */
+    3442              : 
+    3443              : /* Define if mbstate_t exists in wchar.h. */
+    3444              : #define _GLIBCXX_HAVE_MBSTATE_T 1
+    3445              : 
+    3446              : /* Define to 1 if you have the `memalign' function. */
+    3447              : #define _GLIBCXX_HAVE_MEMALIGN 1
+    3448              : 
+    3449              : /* Define to 1 if you have the <memory.h> header file. */
+    3450              : #define _GLIBCXX_HAVE_MEMORY_H 1
+    3451              : 
+    3452              : /* Define to 1 if you have the `modf' function. */
+    3453              : #define _GLIBCXX_HAVE_MODF 1
+    3454              : 
+    3455              : /* Define to 1 if you have the `modff' function. */
+    3456              : #define _GLIBCXX_HAVE_MODFF 1
+    3457              : 
+    3458              : /* Define to 1 if you have the `modfl' function. */
+    3459              : #define _GLIBCXX_HAVE_MODFL 1
+    3460              : 
+    3461              : /* Define to 1 if you have the <nan.h> header file. */
+    3462              : /* #undef _GLIBCXX_HAVE_NAN_H */
+    3463              : 
+    3464              : /* Define to 1 if you have the <netdb.h> header file. */
+    3465              : #define _GLIBCXX_HAVE_NETDB_H 1
+    3466              : 
+    3467              : /* Define to 1 if you have the <netinet/in.h> header file. */
+    3468              : #define _GLIBCXX_HAVE_NETINET_IN_H 1
+    3469              : 
+    3470              : /* Define to 1 if you have the <netinet/tcp.h> header file. */
+    3471              : #define _GLIBCXX_HAVE_NETINET_TCP_H 1
+    3472              : 
+    3473              : /* Define if <math.h> defines obsolete isinf function. */
+    3474              : /* #undef _GLIBCXX_HAVE_OBSOLETE_ISINF */
+    3475              : 
+    3476              : /* Define if <math.h> defines obsolete isnan function. */
+    3477              : /* #undef _GLIBCXX_HAVE_OBSOLETE_ISNAN */
+    3478              : 
+    3479              : /* Define if openat is available in <fcntl.h>. */
+    3480              : #define _GLIBCXX_HAVE_OPENAT 1
+    3481              : 
+    3482              : /* Define if poll is available in <poll.h>. */
+    3483              : #define _GLIBCXX_HAVE_POLL 1
+    3484              : 
+    3485              : /* Define to 1 if you have the <poll.h> header file. */
+    3486              : #define _GLIBCXX_HAVE_POLL_H 1
+    3487              : 
+    3488              : /* Define to 1 if you have the `posix_memalign' function. */
+    3489              : #define _GLIBCXX_HAVE_POSIX_MEMALIGN 1
+    3490              : 
+    3491              : /* Define to 1 if POSIX Semaphores with sem_timedwait are available in
+    3492              :    <semaphore.h>. */
+    3493              : #define _GLIBCXX_HAVE_POSIX_SEMAPHORE 1
+    3494              : 
+    3495              : /* Define to 1 if you have the `powf' function. */
+    3496              : #define _GLIBCXX_HAVE_POWF 1
+    3497              : 
+    3498              : /* Define to 1 if you have the `powl' function. */
+    3499              : #define _GLIBCXX_HAVE_POWL 1
+    3500              : 
+    3501              : /* Define to 1 if you have the `qfpclass' function. */
+    3502              : /* #undef _GLIBCXX_HAVE_QFPCLASS */
+    3503              : 
+    3504              : /* Define to 1 if you have the `quick_exit' function. */
+    3505              : #define _GLIBCXX_HAVE_QUICK_EXIT 1
+    3506              : 
+    3507              : /* Define if readlink is available in <unistd.h>. */
+    3508              : #define _GLIBCXX_HAVE_READLINK 1
+    3509              : 
+    3510              : /* Define to 1 if you have the `secure_getenv' function. */
+    3511              : #define _GLIBCXX_HAVE_SECURE_GETENV 1
+    3512              : 
+    3513              : /* Define to 1 if you have the `setenv' function. */
+    3514              : #define _GLIBCXX_HAVE_SETENV 1
+    3515              : 
+    3516              : /* Define to 1 if you have the `sincos' function. */
+    3517              : #define _GLIBCXX_HAVE_SINCOS 1
+    3518              : 
+    3519              : /* Define to 1 if you have the `sincosf' function. */
+    3520              : #define _GLIBCXX_HAVE_SINCOSF 1
+    3521              : 
+    3522              : /* Define to 1 if you have the `sincosl' function. */
+    3523              : #define _GLIBCXX_HAVE_SINCOSL 1
+    3524              : 
+    3525              : /* Define to 1 if you have the `sinf' function. */
+    3526              : #define _GLIBCXX_HAVE_SINF 1
+    3527              : 
+    3528              : /* Define to 1 if you have the `sinhf' function. */
+    3529              : #define _GLIBCXX_HAVE_SINHF 1
+    3530              : 
+    3531              : /* Define to 1 if you have the `sinhl' function. */
+    3532              : #define _GLIBCXX_HAVE_SINHL 1
+    3533              : 
+    3534              : /* Define to 1 if you have the `sinl' function. */
+    3535              : #define _GLIBCXX_HAVE_SINL 1
+    3536              : 
+    3537              : /* Defined if sleep exists. */
+    3538              : /* #undef _GLIBCXX_HAVE_SLEEP */
+    3539              : 
+    3540              : /* Define to 1 if you have the `sockatmark' function. */
+    3541              : #define _GLIBCXX_HAVE_SOCKATMARK 1
+    3542              : 
+    3543              : /* Define to 1 if you have the `sqrtf' function. */
+    3544              : #define _GLIBCXX_HAVE_SQRTF 1
+    3545              : 
+    3546              : /* Define to 1 if you have the `sqrtl' function. */
+    3547              : #define _GLIBCXX_HAVE_SQRTL 1
+    3548              : 
+    3549              : /* Define if the <stacktrace> header is supported. */
+    3550              : #define _GLIBCXX_HAVE_STACKTRACE 1
+    3551              : 
+    3552              : /* Define to 1 if you have the <stdalign.h> header file. */
+    3553              : #define _GLIBCXX_HAVE_STDALIGN_H 1
+    3554              : 
+    3555              : /* Define to 1 if you have the <stdbool.h> header file. */
+    3556              : #define _GLIBCXX_HAVE_STDBOOL_H 1
+    3557              : 
+    3558              : /* Define to 1 if you have the <stdint.h> header file. */
+    3559              : #define _GLIBCXX_HAVE_STDINT_H 1
+    3560              : 
+    3561              : /* Define to 1 if you have the <stdlib.h> header file. */
+    3562              : #define _GLIBCXX_HAVE_STDLIB_H 1
+    3563              : 
+    3564              : /* Define if strerror_l is available in <string.h>. */
+    3565              : #define _GLIBCXX_HAVE_STRERROR_L 1
+    3566              : 
+    3567              : /* Define if strerror_r is available in <string.h>. */
+    3568              : #define _GLIBCXX_HAVE_STRERROR_R 1
+    3569              : 
+    3570              : /* Define to 1 if you have the <strings.h> header file. */
+    3571              : #define _GLIBCXX_HAVE_STRINGS_H 1
+    3572              : 
+    3573              : /* Define to 1 if you have the <string.h> header file. */
+    3574              : #define _GLIBCXX_HAVE_STRING_H 1
+    3575              : 
+    3576              : /* Define to 1 if you have the `strtof' function. */
+    3577              : #define _GLIBCXX_HAVE_STRTOF 1
+    3578              : 
+    3579              : /* Define to 1 if you have the `strtold' function. */
+    3580              : #define _GLIBCXX_HAVE_STRTOLD 1
+    3581              : 
+    3582              : /* Define to 1 if `d_type' is a member of `struct dirent'. */
+    3583              : #define _GLIBCXX_HAVE_STRUCT_DIRENT_D_TYPE 1
+    3584              : 
+    3585              : /* Define if strxfrm_l is available in <string.h>. */
+    3586              : #define _GLIBCXX_HAVE_STRXFRM_L 1
+    3587              : 
+    3588              : /* Define if symlink is available in <unistd.h>. */
+    3589              : #define _GLIBCXX_HAVE_SYMLINK 1
+    3590              : 
+    3591              : /* Define to 1 if the target runtime linker supports binding the same symbol
+    3592              :    to different versions. */
+    3593              : #define _GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT 1
+    3594              : 
+    3595              : /* Define to 1 if you have the <sys/filio.h> header file. */
+    3596              : /* #undef _GLIBCXX_HAVE_SYS_FILIO_H */
+    3597              : 
+    3598              : /* Define to 1 if you have the <sys/ioctl.h> header file. */
+    3599              : #define _GLIBCXX_HAVE_SYS_IOCTL_H 1
+    3600              : 
+    3601              : /* Define to 1 if you have the <sys/ipc.h> header file. */
+    3602              : #define _GLIBCXX_HAVE_SYS_IPC_H 1
+    3603              : 
+    3604              : /* Define to 1 if you have the <sys/isa_defs.h> header file. */
+    3605              : /* #undef _GLIBCXX_HAVE_SYS_ISA_DEFS_H */
+    3606              : 
+    3607              : /* Define to 1 if you have the <sys/machine.h> header file. */
+    3608              : /* #undef _GLIBCXX_HAVE_SYS_MACHINE_H */
+    3609              : 
+    3610              : /* Define to 1 if you have the <sys/mman.h> header file. */
+    3611              : #define _GLIBCXX_HAVE_SYS_MMAN_H 1
+    3612              : 
+    3613              : /* Define to 1 if you have the <sys/param.h> header file. */
+    3614              : #define _GLIBCXX_HAVE_SYS_PARAM_H 1
+    3615              : 
+    3616              : /* Define to 1 if you have the <sys/resource.h> header file. */
+    3617              : #define _GLIBCXX_HAVE_SYS_RESOURCE_H 1
+    3618              : 
+    3619              : /* Define to 1 if you have a suitable <sys/sdt.h> header file */
+    3620              : #define _GLIBCXX_HAVE_SYS_SDT_H 1
+    3621              : 
+    3622              : /* Define to 1 if you have the <sys/sem.h> header file. */
+    3623              : #define _GLIBCXX_HAVE_SYS_SEM_H 1
+    3624              : 
+    3625              : /* Define to 1 if you have the <sys/socket.h> header file. */
+    3626              : #define _GLIBCXX_HAVE_SYS_SOCKET_H 1
+    3627              : 
+    3628              : /* Define to 1 if you have the <sys/statvfs.h> header file. */
+    3629              : #define _GLIBCXX_HAVE_SYS_STATVFS_H 1
+    3630              : 
+    3631              : /* Define to 1 if you have the <sys/stat.h> header file. */
+    3632              : #define _GLIBCXX_HAVE_SYS_STAT_H 1
+    3633              : 
+    3634              : /* Define to 1 if you have the <sys/sysinfo.h> header file. */
+    3635              : #define _GLIBCXX_HAVE_SYS_SYSINFO_H 1
+    3636              : 
+    3637              : /* Define to 1 if you have the <sys/time.h> header file. */
+    3638              : #define _GLIBCXX_HAVE_SYS_TIME_H 1
+    3639              : 
+    3640              : /* Define to 1 if you have the <sys/types.h> header file. */
+    3641              : #define _GLIBCXX_HAVE_SYS_TYPES_H 1
+    3642              : 
+    3643              : /* Define to 1 if you have the <sys/uio.h> header file. */
+    3644              : #define _GLIBCXX_HAVE_SYS_UIO_H 1
+    3645              : 
+    3646              : /* Define if S_IFREG is available in <sys/stat.h>. */
+    3647              : /* #undef _GLIBCXX_HAVE_S_IFREG */
+    3648              : 
+    3649              : /* Define if S_ISREG is available in <sys/stat.h>. */
+    3650              : #define _GLIBCXX_HAVE_S_ISREG 1
+    3651              : 
+    3652              : /* Define to 1 if you have the `tanf' function. */
+    3653              : #define _GLIBCXX_HAVE_TANF 1
+    3654              : 
+    3655              : /* Define to 1 if you have the `tanhf' function. */
+    3656              : #define _GLIBCXX_HAVE_TANHF 1
+    3657              : 
+    3658              : /* Define to 1 if you have the `tanhl' function. */
+    3659              : #define _GLIBCXX_HAVE_TANHL 1
+    3660              : 
+    3661              : /* Define to 1 if you have the `tanl' function. */
+    3662              : #define _GLIBCXX_HAVE_TANL 1
+    3663              : 
+    3664              : /* Define to 1 if you have the <tgmath.h> header file. */
+    3665              : #define _GLIBCXX_HAVE_TGMATH_H 1
+    3666              : 
+    3667              : /* Define to 1 if you have the `timespec_get' function. */
+    3668              : #define _GLIBCXX_HAVE_TIMESPEC_GET 1
+    3669              : 
+    3670              : /* Define to 1 if the target supports thread-local storage. */
+    3671              : #define _GLIBCXX_HAVE_TLS 1
+    3672              : 
+    3673              : /* Define if truncate is available in <unistd.h>. */
+    3674              : #define _GLIBCXX_HAVE_TRUNCATE 1
+    3675              : 
+    3676              : /* Define to 1 if you have the <uchar.h> header file. */
+    3677              : #define _GLIBCXX_HAVE_UCHAR_H 1
+    3678              : 
+    3679              : /* Define to 1 if you have the <unistd.h> header file. */
+    3680              : #define _GLIBCXX_HAVE_UNISTD_H 1
+    3681              : 
+    3682              : /* Define if unlinkat is available in <fcntl.h>. */
+    3683              : #define _GLIBCXX_HAVE_UNLINKAT 1
+    3684              : 
+    3685              : /* Define to 1 if you have the `uselocale' function. */
+    3686              : #define _GLIBCXX_HAVE_USELOCALE 1
+    3687              : 
+    3688              : /* Defined if usleep exists. */
+    3689              : /* #undef _GLIBCXX_HAVE_USLEEP */
+    3690              : 
+    3691              : /* Define to 1 if you have the <utime.h> header file. */
+    3692              : #define _GLIBCXX_HAVE_UTIME_H 1
+    3693              : 
+    3694              : /* Defined if vfwscanf exists. */
+    3695              : #define _GLIBCXX_HAVE_VFWSCANF 1
+    3696              : 
+    3697              : /* Defined if vswscanf exists. */
+    3698              : #define _GLIBCXX_HAVE_VSWSCANF 1
+    3699              : 
+    3700              : /* Defined if vwscanf exists. */
+    3701              : #define _GLIBCXX_HAVE_VWSCANF 1
+    3702              : 
+    3703              : /* Define to 1 if you have the <wchar.h> header file. */
+    3704              : #define _GLIBCXX_HAVE_WCHAR_H 1
+    3705              : 
+    3706              : /* Defined if wcstof exists. */
+    3707              : #define _GLIBCXX_HAVE_WCSTOF 1
+    3708              : 
+    3709              : /* Define to 1 if you have the <wctype.h> header file. */
+    3710              : #define _GLIBCXX_HAVE_WCTYPE_H 1
+    3711              : 
+    3712              : /* Define to 1 if you have the <windows.h> header file. */
+    3713              : /* #undef _GLIBCXX_HAVE_WINDOWS_H */
+    3714              : 
+    3715              : /* Define if writev is available in <sys/uio.h>. */
+    3716              : #define _GLIBCXX_HAVE_WRITEV 1
+    3717              : 
+    3718              : /* Define to 1 if you have the <xlocale.h> header file. */
+    3719              : /* #undef _GLIBCXX_HAVE_XLOCALE_H */
+    3720              : 
+    3721              : /* Define to 1 if you have the `_acosf' function. */
+    3722              : /* #undef _GLIBCXX_HAVE__ACOSF */
+    3723              : 
+    3724              : /* Define to 1 if you have the `_acosl' function. */
+    3725              : /* #undef _GLIBCXX_HAVE__ACOSL */
+    3726              : 
+    3727              : /* Define to 1 if you have the `_aligned_malloc' function. */
+    3728              : /* #undef _GLIBCXX_HAVE__ALIGNED_MALLOC */
+    3729              : 
+    3730              : /* Define to 1 if you have the `_asinf' function. */
+    3731              : /* #undef _GLIBCXX_HAVE__ASINF */
+    3732              : 
+    3733              : /* Define to 1 if you have the `_asinl' function. */
+    3734              : /* #undef _GLIBCXX_HAVE__ASINL */
+    3735              : 
+    3736              : /* Define to 1 if you have the `_atan2f' function. */
+    3737              : /* #undef _GLIBCXX_HAVE__ATAN2F */
+    3738              : 
+    3739              : /* Define to 1 if you have the `_atan2l' function. */
+    3740              : /* #undef _GLIBCXX_HAVE__ATAN2L */
+    3741              : 
+    3742              : /* Define to 1 if you have the `_atanf' function. */
+    3743              : /* #undef _GLIBCXX_HAVE__ATANF */
+    3744              : 
+    3745              : /* Define to 1 if you have the `_atanl' function. */
+    3746              : /* #undef _GLIBCXX_HAVE__ATANL */
+    3747              : 
+    3748              : /* Define to 1 if you have the `_ceilf' function. */
+    3749              : /* #undef _GLIBCXX_HAVE__CEILF */
+    3750              : 
+    3751              : /* Define to 1 if you have the `_ceill' function. */
+    3752              : /* #undef _GLIBCXX_HAVE__CEILL */
+    3753              : 
+    3754              : /* Define to 1 if you have the `_cosf' function. */
+    3755              : /* #undef _GLIBCXX_HAVE__COSF */
+    3756              : 
+    3757              : /* Define to 1 if you have the `_coshf' function. */
+    3758              : /* #undef _GLIBCXX_HAVE__COSHF */
+    3759              : 
+    3760              : /* Define to 1 if you have the `_coshl' function. */
+    3761              : /* #undef _GLIBCXX_HAVE__COSHL */
+    3762              : 
+    3763              : /* Define to 1 if you have the `_cosl' function. */
+    3764              : /* #undef _GLIBCXX_HAVE__COSL */
+    3765              : 
+    3766              : /* Define to 1 if you have the `_expf' function. */
+    3767              : /* #undef _GLIBCXX_HAVE__EXPF */
+    3768              : 
+    3769              : /* Define to 1 if you have the `_expl' function. */
+    3770              : /* #undef _GLIBCXX_HAVE__EXPL */
+    3771              : 
+    3772              : /* Define to 1 if you have the `_fabsf' function. */
+    3773              : /* #undef _GLIBCXX_HAVE__FABSF */
+    3774              : 
+    3775              : /* Define to 1 if you have the `_fabsl' function. */
+    3776              : /* #undef _GLIBCXX_HAVE__FABSL */
+    3777              : 
+    3778              : /* Define to 1 if you have the `_finite' function. */
+    3779              : /* #undef _GLIBCXX_HAVE__FINITE */
+    3780              : 
+    3781              : /* Define to 1 if you have the `_finitef' function. */
+    3782              : /* #undef _GLIBCXX_HAVE__FINITEF */
+    3783              : 
+    3784              : /* Define to 1 if you have the `_finitel' function. */
+    3785              : /* #undef _GLIBCXX_HAVE__FINITEL */
+    3786              : 
+    3787              : /* Define to 1 if you have the `_floorf' function. */
+    3788              : /* #undef _GLIBCXX_HAVE__FLOORF */
+    3789              : 
+    3790              : /* Define to 1 if you have the `_floorl' function. */
+    3791              : /* #undef _GLIBCXX_HAVE__FLOORL */
+    3792              : 
+    3793              : /* Define to 1 if you have the `_fmodf' function. */
+    3794              : /* #undef _GLIBCXX_HAVE__FMODF */
+    3795              : 
+    3796              : /* Define to 1 if you have the `_fmodl' function. */
+    3797              : /* #undef _GLIBCXX_HAVE__FMODL */
+    3798              : 
+    3799              : /* Define to 1 if you have the `_fpclass' function. */
+    3800              : /* #undef _GLIBCXX_HAVE__FPCLASS */
+    3801              : 
+    3802              : /* Define to 1 if you have the `_frexpf' function. */
+    3803              : /* #undef _GLIBCXX_HAVE__FREXPF */
+    3804              : 
+    3805              : /* Define to 1 if you have the `_frexpl' function. */
+    3806              : /* #undef _GLIBCXX_HAVE__FREXPL */
+    3807              : 
+    3808              : /* Define to 1 if you have the `_hypot' function. */
+    3809              : /* #undef _GLIBCXX_HAVE__HYPOT */
+    3810              : 
+    3811              : /* Define to 1 if you have the `_hypotf' function. */
+    3812              : /* #undef _GLIBCXX_HAVE__HYPOTF */
+    3813              : 
+    3814              : /* Define to 1 if you have the `_hypotl' function. */
+    3815              : /* #undef _GLIBCXX_HAVE__HYPOTL */
+    3816              : 
+    3817              : /* Define to 1 if you have the `_isinf' function. */
+    3818              : /* #undef _GLIBCXX_HAVE__ISINF */
+    3819              : 
+    3820              : /* Define to 1 if you have the `_isinff' function. */
+    3821              : /* #undef _GLIBCXX_HAVE__ISINFF */
+    3822              : 
+    3823              : /* Define to 1 if you have the `_isinfl' function. */
+    3824              : /* #undef _GLIBCXX_HAVE__ISINFL */
+    3825              : 
+    3826              : /* Define to 1 if you have the `_isnan' function. */
+    3827              : /* #undef _GLIBCXX_HAVE__ISNAN */
+    3828              : 
+    3829              : /* Define to 1 if you have the `_isnanf' function. */
+    3830              : /* #undef _GLIBCXX_HAVE__ISNANF */
+    3831              : 
+    3832              : /* Define to 1 if you have the `_isnanl' function. */
+    3833              : /* #undef _GLIBCXX_HAVE__ISNANL */
+    3834              : 
+    3835              : /* Define to 1 if you have the `_ldexpf' function. */
+    3836              : /* #undef _GLIBCXX_HAVE__LDEXPF */
+    3837              : 
+    3838              : /* Define to 1 if you have the `_ldexpl' function. */
+    3839              : /* #undef _GLIBCXX_HAVE__LDEXPL */
+    3840              : 
+    3841              : /* Define to 1 if you have the `_log10f' function. */
+    3842              : /* #undef _GLIBCXX_HAVE__LOG10F */
+    3843              : 
+    3844              : /* Define to 1 if you have the `_log10l' function. */
+    3845              : /* #undef _GLIBCXX_HAVE__LOG10L */
+    3846              : 
+    3847              : /* Define to 1 if you have the `_logf' function. */
+    3848              : /* #undef _GLIBCXX_HAVE__LOGF */
+    3849              : 
+    3850              : /* Define to 1 if you have the `_logl' function. */
+    3851              : /* #undef _GLIBCXX_HAVE__LOGL */
+    3852              : 
+    3853              : /* Define to 1 if you have the `_modf' function. */
+    3854              : /* #undef _GLIBCXX_HAVE__MODF */
+    3855              : 
+    3856              : /* Define to 1 if you have the `_modff' function. */
+    3857              : /* #undef _GLIBCXX_HAVE__MODFF */
+    3858              : 
+    3859              : /* Define to 1 if you have the `_modfl' function. */
+    3860              : /* #undef _GLIBCXX_HAVE__MODFL */
+    3861              : 
+    3862              : /* Define to 1 if you have the `_powf' function. */
+    3863              : /* #undef _GLIBCXX_HAVE__POWF */
+    3864              : 
+    3865              : /* Define to 1 if you have the `_powl' function. */
+    3866              : /* #undef _GLIBCXX_HAVE__POWL */
+    3867              : 
+    3868              : /* Define to 1 if you have the `_qfpclass' function. */
+    3869              : /* #undef _GLIBCXX_HAVE__QFPCLASS */
+    3870              : 
+    3871              : /* Define to 1 if you have the `_sincos' function. */
+    3872              : /* #undef _GLIBCXX_HAVE__SINCOS */
+    3873              : 
+    3874              : /* Define to 1 if you have the `_sincosf' function. */
+    3875              : /* #undef _GLIBCXX_HAVE__SINCOSF */
+    3876              : 
+    3877              : /* Define to 1 if you have the `_sincosl' function. */
+    3878              : /* #undef _GLIBCXX_HAVE__SINCOSL */
+    3879              : 
+    3880              : /* Define to 1 if you have the `_sinf' function. */
+    3881              : /* #undef _GLIBCXX_HAVE__SINF */
+    3882              : 
+    3883              : /* Define to 1 if you have the `_sinhf' function. */
+    3884              : /* #undef _GLIBCXX_HAVE__SINHF */
+    3885              : 
+    3886              : /* Define to 1 if you have the `_sinhl' function. */
+    3887              : /* #undef _GLIBCXX_HAVE__SINHL */
+    3888              : 
+    3889              : /* Define to 1 if you have the `_sinl' function. */
+    3890              : /* #undef _GLIBCXX_HAVE__SINL */
+    3891              : 
+    3892              : /* Define to 1 if you have the `_sqrtf' function. */
+    3893              : /* #undef _GLIBCXX_HAVE__SQRTF */
+    3894              : 
+    3895              : /* Define to 1 if you have the `_sqrtl' function. */
+    3896              : /* #undef _GLIBCXX_HAVE__SQRTL */
+    3897              : 
+    3898              : /* Define to 1 if you have the `_tanf' function. */
+    3899              : /* #undef _GLIBCXX_HAVE__TANF */
+    3900              : 
+    3901              : /* Define to 1 if you have the `_tanhf' function. */
+    3902              : /* #undef _GLIBCXX_HAVE__TANHF */
+    3903              : 
+    3904              : /* Define to 1 if you have the `_tanhl' function. */
+    3905              : /* #undef _GLIBCXX_HAVE__TANHL */
+    3906              : 
+    3907              : /* Define to 1 if you have the `_tanl' function. */
+    3908              : /* #undef _GLIBCXX_HAVE__TANL */
+    3909              : 
+    3910              : /* Define to 1 if you have the `_wfopen' function. */
+    3911              : /* #undef _GLIBCXX_HAVE__WFOPEN */
+    3912              : 
+    3913              : /* Define to 1 if you have the `__cxa_thread_atexit' function. */
+    3914              : /* #undef _GLIBCXX_HAVE___CXA_THREAD_ATEXIT */
+    3915              : 
+    3916              : /* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
+    3917              : #define _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL 1
+    3918              : 
+    3919              : /* Define as const if the declaration of iconv() needs const. */
+    3920              : #define _GLIBCXX_ICONV_CONST 
+    3921              : 
+    3922              : /* Define to the sub-directory in which libtool stores uninstalled libraries.
+    3923              :    */
+    3924              : #define _GLIBCXX_LT_OBJDIR ".libs/"
+    3925              : 
+    3926              : /* Name of package */
+    3927              : /* #undef _GLIBCXX_PACKAGE */
+    3928              : 
+    3929              : /* Define to the address where bug reports for this package should be sent. */
+    3930              : #define _GLIBCXX_PACKAGE_BUGREPORT ""
+    3931              : 
+    3932              : /* Define to the full name of this package. */
+    3933              : #define _GLIBCXX_PACKAGE_NAME "package-unused"
+    3934              : 
+    3935              : /* Define to the full name and version of this package. */
+    3936              : #define _GLIBCXX_PACKAGE_STRING "package-unused version-unused"
+    3937              : 
+    3938              : /* Define to the one symbol short name of this package. */
+    3939              : #define _GLIBCXX_PACKAGE_TARNAME "libstdc++"
+    3940              : 
+    3941              : /* Define to the home page for this package. */
+    3942              : #define _GLIBCXX_PACKAGE_URL ""
+    3943              : 
+    3944              : /* Define to the version of this package. */
+    3945              : #define _GLIBCXX_PACKAGE__GLIBCXX_VERSION "version-unused"
+    3946              : 
+    3947              : /* Define to 1 if you have the ANSI C header files. */
+    3948              : #define _GLIBCXX_STDC_HEADERS 1
+    3949              : 
+    3950              : /* Version number of package */
+    3951              : /* #undef _GLIBCXX_VERSION */
+    3952              : 
+    3953              : /* Enable large inode numbers on Mac OS X 10.5.  */
+    3954              : #ifndef _GLIBCXX_DARWIN_USE_64_BIT_INODE
+    3955              : # define _GLIBCXX_DARWIN_USE_64_BIT_INODE 1
+    3956              : #endif
+    3957              : 
+    3958              : /* Number of bits in a file offset, on hosts where this is settable. */
+    3959              : /* #undef _GLIBCXX_FILE_OFFSET_BITS */
+    3960              : 
+    3961              : /* Define if C99 functions in <complex.h> should be used in <complex> for
+    3962              :    C++11. Using compiler builtins for these functions requires corresponding
+    3963              :    C99 library functions to be present. */
+    3964              : #define _GLIBCXX11_USE_C99_COMPLEX 1
+    3965              : 
+    3966              : /* Define if C99 functions or macros in <math.h> should be imported in <cmath>
+    3967              :    in namespace std for C++11. */
+    3968              : #define _GLIBCXX11_USE_C99_MATH 1
+    3969              : 
+    3970              : /* Define if C99 functions or macros in <stdio.h> should be imported in
+    3971              :    <cstdio> in namespace std for C++11. */
+    3972              : #define _GLIBCXX11_USE_C99_STDIO 1
+    3973              : 
+    3974              : /* Define if C99 functions or macros in <stdlib.h> should be imported in
+    3975              :    <cstdlib> in namespace std for C++11. */
+    3976              : #define _GLIBCXX11_USE_C99_STDLIB 1
+    3977              : 
+    3978              : /* Define if C99 functions or macros in <wchar.h> should be imported in
+    3979              :    <cwchar> in namespace std for C++11. */
+    3980              : #define _GLIBCXX11_USE_C99_WCHAR 1
+    3981              : 
+    3982              : /* Define if C99 functions in <complex.h> should be used in <complex> for
+    3983              :    C++98. Using compiler builtins for these functions requires corresponding
+    3984              :    C99 library functions to be present. */
+    3985              : #define _GLIBCXX98_USE_C99_COMPLEX 1
+    3986              : 
+    3987              : /* Define if C99 functions or macros in <math.h> should be imported in <cmath>
+    3988              :    in namespace std for C++98. */
+    3989              : #define _GLIBCXX98_USE_C99_MATH 1
+    3990              : 
+    3991              : /* Define if C99 functions or macros in <stdio.h> should be imported in
+    3992              :    <cstdio> in namespace std for C++98. */
+    3993              : #define _GLIBCXX98_USE_C99_STDIO 1
+    3994              : 
+    3995              : /* Define if C99 functions or macros in <stdlib.h> should be imported in
+    3996              :    <cstdlib> in namespace std for C++98. */
+    3997              : #define _GLIBCXX98_USE_C99_STDLIB 1
+    3998              : 
+    3999              : /* Define if C99 functions or macros in <wchar.h> should be imported in
+    4000              :    <cwchar> in namespace std for C++98. */
+    4001              : #define _GLIBCXX98_USE_C99_WCHAR 1
+    4002              : 
+    4003              : /* Define if the compiler supports C++11 atomics. */
+    4004              : #define _GLIBCXX_ATOMIC_BUILTINS 1
+    4005              : 
+    4006              : /* Define if global objects can be aligned to
+    4007              :    std::hardware_destructive_interference_size. */
+    4008              : #define _GLIBCXX_CAN_ALIGNAS_DESTRUCTIVE_SIZE 1
+    4009              : 
+    4010              : /* Define to use concept checking code from the boost libraries. */
+    4011              : /* #undef _GLIBCXX_CONCEPT_CHECKS */
+    4012              : 
+    4013              : /* Define to 1 if a fully dynamic basic_string is wanted, 0 to disable,
+    4014              :    undefined for platform defaults */
+    4015              : #define _GLIBCXX_FULLY_DYNAMIC_STRING 0
+    4016              : 
+    4017              : /* Define if gthreads library is available. */
+    4018              : #define _GLIBCXX_HAS_GTHREADS 1
+    4019              : 
+    4020              : /* Define to 1 if a full hosted library is built, or 0 if freestanding. */
+    4021              : #define _GLIBCXX_HOSTED __STDC_HOSTED__
+    4022              : 
+    4023              : /* Define if compatibility should be provided for alternative 128-bit long
+    4024              :    double formats. */
+    4025              : 
+    4026              : /* Define if compatibility should be provided for -mlong-double-64. */
+    4027              : 
+    4028              : /* Define to the letter to which size_t is mangled. */
+    4029              : #define _GLIBCXX_MANGLE_SIZE_T m
+    4030              : 
+    4031              : /* Define if C99 llrint and llround functions are missing from <math.h>. */
+    4032              : /* #undef _GLIBCXX_NO_C99_ROUNDING_FUNCS */
+    4033              : 
+    4034              : /* Defined if no way to sleep is available. */
+    4035              : /* #undef _GLIBCXX_NO_SLEEP */
+    4036              : 
+    4037              : /* Define if ptrdiff_t is int. */
+    4038              : /* #undef _GLIBCXX_PTRDIFF_T_IS_INT */
+    4039              : 
+    4040              : /* Define if using setrlimit to set resource limits during "make check" */
+    4041              : #define _GLIBCXX_RES_LIMITS 1
+    4042              : 
+    4043              : /* Define if size_t is unsigned int. */
+    4044              : /* #undef _GLIBCXX_SIZE_T_IS_UINT */
+    4045              : 
+    4046              : /* Define if static tzdata should be compiled into the library. */
+    4047              : /* #undef _GLIBCXX_STATIC_TZDATA */
+    4048              : 
+    4049              : /* Define to the value of the EOF integer constant. */
+    4050              : #define _GLIBCXX_STDIO_EOF -1
+    4051              : 
+    4052              : /* Define to the value of the SEEK_CUR integer constant. */
+    4053              : #define _GLIBCXX_STDIO_SEEK_CUR 1
+    4054              : 
+    4055              : /* Define to the value of the SEEK_END integer constant. */
+    4056              : #define _GLIBCXX_STDIO_SEEK_END 2
+    4057              : 
+    4058              : /* Define to use symbol versioning in the shared library. */
+    4059              : #define _GLIBCXX_SYMVER 1
+    4060              : 
+    4061              : /* Define to use darwin versioning in the shared library. */
+    4062              : /* #undef _GLIBCXX_SYMVER_DARWIN */
+    4063              : 
+    4064              : /* Define to use GNU versioning in the shared library. */
+    4065              : #define _GLIBCXX_SYMVER_GNU 1
+    4066              : 
+    4067              : /* Define to use GNU namespace versioning in the shared library. */
+    4068              : /* #undef _GLIBCXX_SYMVER_GNU_NAMESPACE */
+    4069              : 
+    4070              : /* Define to use Sun versioning in the shared library. */
+    4071              : /* #undef _GLIBCXX_SYMVER_SUN */
+    4072              : 
+    4073              : /* Define if C11 functions in <uchar.h> should be imported into namespace std
+    4074              :    in <cuchar>. */
+    4075              : #define _GLIBCXX_USE_C11_UCHAR_CXX11 1
+    4076              : 
+    4077              : /* Define if C99 functions or macros from <wchar.h>, <math.h>, <complex.h>,
+    4078              :    <stdio.h>, and <stdlib.h> can be used or exposed. */
+    4079              : #define _GLIBCXX_USE_C99 1
+    4080              : 
+    4081              : /* Define if C99 functions in <complex.h> should be used in <tr1/complex>.
+    4082              :    Using compiler builtins for these functions requires corresponding C99
+    4083              :    library functions to be present. */
+    4084              : #define _GLIBCXX_USE_C99_COMPLEX_TR1 1
+    4085              : 
+    4086              : /* Define if C99 functions in <ctype.h> should be imported in <tr1/cctype> in
+    4087              :    namespace std::tr1. */
+    4088              : #define _GLIBCXX_USE_C99_CTYPE_TR1 1
+    4089              : 
+    4090              : /* Define if C99 functions in <fenv.h> should be imported in <tr1/cfenv> in
+    4091              :    namespace std::tr1. */
+    4092              : #define _GLIBCXX_USE_C99_FENV_TR1 1
+    4093              : 
+    4094              : /* Define if C99 functions in <inttypes.h> should be imported in
+    4095              :    <tr1/cinttypes> in namespace std::tr1. */
+    4096              : #define _GLIBCXX_USE_C99_INTTYPES_TR1 1
+    4097              : 
+    4098              : /* Define if wchar_t C99 functions in <inttypes.h> should be imported in
+    4099              :    <tr1/cinttypes> in namespace std::tr1. */
+    4100              : #define _GLIBCXX_USE_C99_INTTYPES_WCHAR_T_TR1 1
+    4101              : 
+    4102              : /* Define if C99 functions or macros in <math.h> should be imported in
+    4103              :    <tr1/cmath> in namespace std::tr1. */
+    4104              : #define _GLIBCXX_USE_C99_MATH_TR1 1
+    4105              : 
+    4106              : /* Define if C99 types in <stdint.h> should be imported in <tr1/cstdint> in
+    4107              :    namespace std::tr1. */
+    4108              : #define _GLIBCXX_USE_C99_STDINT_TR1 1
+    4109              : 
+    4110              : /* Define if usable chdir is available in <unistd.h>. */
+    4111              : #define _GLIBCXX_USE_CHDIR 1
+    4112              : 
+    4113              : /* Define if usable chmod is available in <sys/stat.h>. */
+    4114              : #define _GLIBCXX_USE_CHMOD 1
+    4115              : 
+    4116              : /* Defined if clock_gettime syscall has monotonic and realtime clock support.
+    4117              :    */
+    4118              : /* #undef _GLIBCXX_USE_CLOCK_GETTIME_SYSCALL */
+    4119              : 
+    4120              : /* Defined if clock_gettime has monotonic clock support. */
+    4121              : #define _GLIBCXX_USE_CLOCK_MONOTONIC 1
+    4122              : 
+    4123              : /* Defined if clock_gettime has realtime clock support. */
+    4124              : #define _GLIBCXX_USE_CLOCK_REALTIME 1
+    4125              : 
+    4126              : /* Define if ISO/IEC TR 24733 decimal floating point types are supported on
+    4127              :    this host. */
+    4128              : #define _GLIBCXX_USE_DECIMAL_FLOAT 1
+    4129              : 
+    4130              : /* Define if /dev/random and /dev/urandom are available for
+    4131              :    std::random_device. */
+    4132              : #define _GLIBCXX_USE_DEV_RANDOM 1
+    4133              : 
+    4134              : /* Define if fchmod is available in <sys/stat.h>. */
+    4135              : #define _GLIBCXX_USE_FCHMOD 1
+    4136              : 
+    4137              : /* Define if fchmodat is available in <sys/stat.h>. */
+    4138              : #define _GLIBCXX_USE_FCHMODAT 1
+    4139              : 
+    4140              : /* Define if fseeko and ftello are available. */
+    4141              : #define _GLIBCXX_USE_FSEEKO_FTELLO 1
+    4142              : 
+    4143              : /* Define if usable getcwd is available in <unistd.h>. */
+    4144              : #define _GLIBCXX_USE_GETCWD 1
+    4145              : 
+    4146              : /* Defined if gettimeofday is available. */
+    4147              : #define _GLIBCXX_USE_GETTIMEOFDAY 1
+    4148              : 
+    4149              : /* Define if get_nprocs is available in <sys/sysinfo.h>. */
+    4150              : #define _GLIBCXX_USE_GET_NPROCS 1
+    4151              : 
+    4152              : /* Define if init_priority should be used for iostream initialization. */
+    4153              : #define _GLIBCXX_USE_INIT_PRIORITY_ATTRIBUTE 1
+    4154              : 
+    4155              : /* Define if LFS support is available. */
+    4156              : #define _GLIBCXX_USE_LFS 1
+    4157              : 
+    4158              : /* Define if code specialized for long long should be used. */
+    4159              : #define _GLIBCXX_USE_LONG_LONG 1
+    4160              : 
+    4161              : /* Define if lstat is available in <sys/stat.h>. */
+    4162              : #define _GLIBCXX_USE_LSTAT 1
+    4163              : 
+    4164              : /* Define if usable mkdir is available in <sys/stat.h>. */
+    4165              : #define _GLIBCXX_USE_MKDIR 1
+    4166              : 
+    4167              : /* Defined if nanosleep is available. */
+    4168              : #define _GLIBCXX_USE_NANOSLEEP 1
+    4169              : 
+    4170              : /* Define if NLS translations are to be used. */
+    4171              : #define _GLIBCXX_USE_NLS 1
+    4172              : 
+    4173              : /* Define if pthreads_num_processors_np is available in <pthread.h>. */
+    4174              : /* #undef _GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP */
+    4175              : 
+    4176              : /* Define if pthread_cond_clockwait is available in <pthread.h>. */
+    4177              : #define _GLIBCXX_USE_PTHREAD_COND_CLOCKWAIT 1
+    4178              : 
+    4179              : /* Define if pthread_mutex_clocklock is available in <pthread.h>. */
+    4180              : #define _GLIBCXX_USE_PTHREAD_MUTEX_CLOCKLOCK 1
+    4181              : 
+    4182              : /* Define if pthread_rwlock_clockrdlock and pthread_rwlock_clockwrlock are
+    4183              :    available in <pthread.h>. */
+    4184              : #define _GLIBCXX_USE_PTHREAD_RWLOCK_CLOCKLOCK 1
+    4185              : 
+    4186              : /* Define if POSIX read/write locks are available in <gthr.h>. */
+    4187              : #define _GLIBCXX_USE_PTHREAD_RWLOCK_T 1
+    4188              : 
+    4189              : /* Define if /dev/random and /dev/urandom are available for the random_device
+    4190              :    of TR1 (Chapter 5.1). */
+    4191              : #define _GLIBCXX_USE_RANDOM_TR1 1
+    4192              : 
+    4193              : /* Define if usable realpath is available in <stdlib.h>. */
+    4194              : #define _GLIBCXX_USE_REALPATH 1
+    4195              : 
+    4196              : /* Defined if sched_yield is available. */
+    4197              : #define _GLIBCXX_USE_SCHED_YIELD 1
+    4198              : 
+    4199              : /* Define if _SC_NPROCESSORS_ONLN is available in <unistd.h>. */
+    4200              : #define _GLIBCXX_USE_SC_NPROCESSORS_ONLN 1
+    4201              : 
+    4202              : /* Define if _SC_NPROC_ONLN is available in <unistd.h>. */
+    4203              : /* #undef _GLIBCXX_USE_SC_NPROC_ONLN */
+    4204              : 
+    4205              : /* Define if sendfile is available in <sys/sendfile.h>. */
+    4206              : #define _GLIBCXX_USE_SENDFILE 1
+    4207              : 
+    4208              : /* Define to restrict std::__basic_file<> to stdio APIs. */
+    4209              : /* #undef _GLIBCXX_USE_STDIO_PURE */
+    4210              : 
+    4211              : /* Define if struct stat has timespec members. */
+    4212              : #define _GLIBCXX_USE_ST_MTIM 1
+    4213              : 
+    4214              : /* Define if sysctl(), CTL_HW and HW_NCPU are available in <sys/sysctl.h>. */
+    4215              : /* #undef _GLIBCXX_USE_SYSCTL_HW_NCPU */
+    4216              : 
+    4217              : /* Define if obsolescent tmpnam is available in <stdio.h>. */
+    4218              : #define _GLIBCXX_USE_TMPNAM 1
+    4219              : 
+    4220              : /* Define if c8rtomb and mbrtoc8 functions in <uchar.h> should be imported
+    4221              :    into namespace std in <cuchar> for C++20. */
+    4222              : #define _GLIBCXX_USE_UCHAR_C8RTOMB_MBRTOC8_CXX20 1
+    4223              : 
+    4224              : /* Define if c8rtomb and mbrtoc8 functions in <uchar.h> should be imported
+    4225              :    into namespace std in <cuchar> for -fchar8_t. */
+    4226              : #define _GLIBCXX_USE_UCHAR_C8RTOMB_MBRTOC8_FCHAR8_T 1
+    4227              : 
+    4228              : /* Define if utime is available in <utime.h>. */
+    4229              : #define _GLIBCXX_USE_UTIME 1
+    4230              : 
+    4231              : /* Define if utimensat and UTIME_OMIT are available in <sys/stat.h> and
+    4232              :    AT_FDCWD in <fcntl.h>. */
+    4233              : #define _GLIBCXX_USE_UTIMENSAT 1
+    4234              : 
+    4235              : /* Define if code specialized for wchar_t should be used. */
+    4236              : #define _GLIBCXX_USE_WCHAR_T 1
+    4237              : 
+    4238              : /* Defined if Sleep exists. */
+    4239              : /* #undef _GLIBCXX_USE_WIN32_SLEEP */
+    4240              : 
+    4241              : /* Define to 1 if a verbose library is built, or 0 otherwise. */
+    4242              : #define _GLIBCXX_VERBOSE 1
+    4243              : 
+    4244              : /* Defined if as can handle rdrand. */
+    4245              : #define _GLIBCXX_X86_RDRAND 1
+    4246              : 
+    4247              : /* Defined if as can handle rdseed. */
+    4248              : #define _GLIBCXX_X86_RDSEED 1
+    4249              : 
+    4250              : /* Define if a directory should be searched for tzdata files. */
+    4251              : #define _GLIBCXX_ZONEINFO_DIR "/usr/share/zoneinfo"
+    4252              : 
+    4253              : /* Define to 1 if mutex_timedlock is available. */
+    4254              : #define _GTHREAD_USE_MUTEX_TIMEDLOCK 1
+    4255              : 
+    4256              : /* Define for large files, on AIX-style hosts. */
+    4257              : /* #undef _GLIBCXX_LARGE_FILES */
+    4258              : 
+    4259              : /* Define if all C++11 floating point overloads are available in <math.h>.  */
+    4260              : #if __cplusplus >= 201103L
+    4261              : /* #undef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP */
+    4262              : #endif
+    4263              : 
+    4264              : /* Define if all C++11 integral type overloads are available in <math.h>.  */
+    4265              : #if __cplusplus >= 201103L
+    4266              : /* #undef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT */
+    4267              : #endif
+    4268              : 
+    4269              : #if defined (_GLIBCXX_HAVE__ACOSF) && ! defined (_GLIBCXX_HAVE_ACOSF)
+    4270              : # define _GLIBCXX_HAVE_ACOSF 1
+    4271              : # define acosf _acosf
+    4272              : #endif
+    4273              : 
+    4274              : #if defined (_GLIBCXX_HAVE__ACOSL) && ! defined (_GLIBCXX_HAVE_ACOSL)
+    4275              : # define _GLIBCXX_HAVE_ACOSL 1
+    4276              : # define acosl _acosl
+    4277              : #endif
+    4278              : 
+    4279              : #if defined (_GLIBCXX_HAVE__ASINF) && ! defined (_GLIBCXX_HAVE_ASINF)
+    4280              : # define _GLIBCXX_HAVE_ASINF 1
+    4281              : # define asinf _asinf
+    4282              : #endif
+    4283              : 
+    4284              : #if defined (_GLIBCXX_HAVE__ASINL) && ! defined (_GLIBCXX_HAVE_ASINL)
+    4285              : # define _GLIBCXX_HAVE_ASINL 1
+    4286              : # define asinl _asinl
+    4287              : #endif
+    4288              : 
+    4289              : #if defined (_GLIBCXX_HAVE__ATAN2F) && ! defined (_GLIBCXX_HAVE_ATAN2F)
+    4290              : # define _GLIBCXX_HAVE_ATAN2F 1
+    4291              : # define atan2f _atan2f
+    4292              : #endif
+    4293              : 
+    4294              : #if defined (_GLIBCXX_HAVE__ATAN2L) && ! defined (_GLIBCXX_HAVE_ATAN2L)
+    4295              : # define _GLIBCXX_HAVE_ATAN2L 1
+    4296              : # define atan2l _atan2l
+    4297              : #endif
+    4298              : 
+    4299              : #if defined (_GLIBCXX_HAVE__ATANF) && ! defined (_GLIBCXX_HAVE_ATANF)
+    4300              : # define _GLIBCXX_HAVE_ATANF 1
+    4301              : # define atanf _atanf
+    4302              : #endif
+    4303              : 
+    4304              : #if defined (_GLIBCXX_HAVE__ATANL) && ! defined (_GLIBCXX_HAVE_ATANL)
+    4305              : # define _GLIBCXX_HAVE_ATANL 1
+    4306              : # define atanl _atanl
+    4307              : #endif
+    4308              : 
+    4309              : #if defined (_GLIBCXX_HAVE__CEILF) && ! defined (_GLIBCXX_HAVE_CEILF)
+    4310              : # define _GLIBCXX_HAVE_CEILF 1
+    4311              : # define ceilf _ceilf
+    4312              : #endif
+    4313              : 
+    4314              : #if defined (_GLIBCXX_HAVE__CEILL) && ! defined (_GLIBCXX_HAVE_CEILL)
+    4315              : # define _GLIBCXX_HAVE_CEILL 1
+    4316              : # define ceill _ceill
+    4317              : #endif
+    4318              : 
+    4319              : #if defined (_GLIBCXX_HAVE__COSF) && ! defined (_GLIBCXX_HAVE_COSF)
+    4320              : # define _GLIBCXX_HAVE_COSF 1
+    4321              : # define cosf _cosf
+    4322              : #endif
+    4323              : 
+    4324              : #if defined (_GLIBCXX_HAVE__COSHF) && ! defined (_GLIBCXX_HAVE_COSHF)
+    4325              : # define _GLIBCXX_HAVE_COSHF 1
+    4326              : # define coshf _coshf
+    4327              : #endif
+    4328              : 
+    4329              : #if defined (_GLIBCXX_HAVE__COSHL) && ! defined (_GLIBCXX_HAVE_COSHL)
+    4330              : # define _GLIBCXX_HAVE_COSHL 1
+    4331              : # define coshl _coshl
+    4332              : #endif
+    4333              : 
+    4334              : #if defined (_GLIBCXX_HAVE__COSL) && ! defined (_GLIBCXX_HAVE_COSL)
+    4335              : # define _GLIBCXX_HAVE_COSL 1
+    4336              : # define cosl _cosl
+    4337              : #endif
+    4338              : 
+    4339              : #if defined (_GLIBCXX_HAVE__EXPF) && ! defined (_GLIBCXX_HAVE_EXPF)
+    4340              : # define _GLIBCXX_HAVE_EXPF 1
+    4341              : # define expf _expf
+    4342              : #endif
+    4343              : 
+    4344              : #if defined (_GLIBCXX_HAVE__EXPL) && ! defined (_GLIBCXX_HAVE_EXPL)
+    4345              : # define _GLIBCXX_HAVE_EXPL 1
+    4346              : # define expl _expl
+    4347              : #endif
+    4348              : 
+    4349              : #if defined (_GLIBCXX_HAVE__FABSF) && ! defined (_GLIBCXX_HAVE_FABSF)
+    4350              : # define _GLIBCXX_HAVE_FABSF 1
+    4351              : # define fabsf _fabsf
+    4352              : #endif
+    4353              : 
+    4354              : #if defined (_GLIBCXX_HAVE__FABSL) && ! defined (_GLIBCXX_HAVE_FABSL)
+    4355              : # define _GLIBCXX_HAVE_FABSL 1
+    4356              : # define fabsl _fabsl
+    4357              : #endif
+    4358              : 
+    4359              : #if defined (_GLIBCXX_HAVE__FINITE) && ! defined (_GLIBCXX_HAVE_FINITE)
+    4360              : # define _GLIBCXX_HAVE_FINITE 1
+    4361              : # define finite _finite
+    4362              : #endif
+    4363              : 
+    4364              : #if defined (_GLIBCXX_HAVE__FINITEF) && ! defined (_GLIBCXX_HAVE_FINITEF)
+    4365              : # define _GLIBCXX_HAVE_FINITEF 1
+    4366              : # define finitef _finitef
+    4367              : #endif
+    4368              : 
+    4369              : #if defined (_GLIBCXX_HAVE__FINITEL) && ! defined (_GLIBCXX_HAVE_FINITEL)
+    4370              : # define _GLIBCXX_HAVE_FINITEL 1
+    4371              : # define finitel _finitel
+    4372              : #endif
+    4373              : 
+    4374              : #if defined (_GLIBCXX_HAVE__FLOORF) && ! defined (_GLIBCXX_HAVE_FLOORF)
+    4375              : # define _GLIBCXX_HAVE_FLOORF 1
+    4376              : # define floorf _floorf
+    4377              : #endif
+    4378              : 
+    4379              : #if defined (_GLIBCXX_HAVE__FLOORL) && ! defined (_GLIBCXX_HAVE_FLOORL)
+    4380              : # define _GLIBCXX_HAVE_FLOORL 1
+    4381              : # define floorl _floorl
+    4382              : #endif
+    4383              : 
+    4384              : #if defined (_GLIBCXX_HAVE__FMODF) && ! defined (_GLIBCXX_HAVE_FMODF)
+    4385              : # define _GLIBCXX_HAVE_FMODF 1
+    4386              : # define fmodf _fmodf
+    4387              : #endif
+    4388              : 
+    4389              : #if defined (_GLIBCXX_HAVE__FMODL) && ! defined (_GLIBCXX_HAVE_FMODL)
+    4390              : # define _GLIBCXX_HAVE_FMODL 1
+    4391              : # define fmodl _fmodl
+    4392              : #endif
+    4393              : 
+    4394              : #if defined (_GLIBCXX_HAVE__FPCLASS) && ! defined (_GLIBCXX_HAVE_FPCLASS)
+    4395              : # define _GLIBCXX_HAVE_FPCLASS 1
+    4396              : # define fpclass _fpclass
+    4397              : #endif
+    4398              : 
+    4399              : #if defined (_GLIBCXX_HAVE__FREXPF) && ! defined (_GLIBCXX_HAVE_FREXPF)
+    4400              : # define _GLIBCXX_HAVE_FREXPF 1
+    4401              : # define frexpf _frexpf
+    4402              : #endif
+    4403              : 
+    4404              : #if defined (_GLIBCXX_HAVE__FREXPL) && ! defined (_GLIBCXX_HAVE_FREXPL)
+    4405              : # define _GLIBCXX_HAVE_FREXPL 1
+    4406              : # define frexpl _frexpl
+    4407              : #endif
+    4408              : 
+    4409              : #if defined (_GLIBCXX_HAVE__HYPOT) && ! defined (_GLIBCXX_HAVE_HYPOT)
+    4410              : # define _GLIBCXX_HAVE_HYPOT 1
+    4411              : # define hypot _hypot
+    4412              : #endif
+    4413              : 
+    4414              : #if defined (_GLIBCXX_HAVE__HYPOTF) && ! defined (_GLIBCXX_HAVE_HYPOTF)
+    4415              : # define _GLIBCXX_HAVE_HYPOTF 1
+    4416              : # define hypotf _hypotf
+    4417              : #endif
+    4418              : 
+    4419              : #if defined (_GLIBCXX_HAVE__HYPOTL) && ! defined (_GLIBCXX_HAVE_HYPOTL)
+    4420              : # define _GLIBCXX_HAVE_HYPOTL 1
+    4421              : # define hypotl _hypotl
+    4422              : #endif
+    4423              : 
+    4424              : #if defined (_GLIBCXX_HAVE__ISINF) && ! defined (_GLIBCXX_HAVE_ISINF)
+    4425              : # define _GLIBCXX_HAVE_ISINF 1
+    4426              : # define isinf _isinf
+    4427              : #endif
+    4428              : 
+    4429              : #if defined (_GLIBCXX_HAVE__ISINFF) && ! defined (_GLIBCXX_HAVE_ISINFF)
+    4430              : # define _GLIBCXX_HAVE_ISINFF 1
+    4431              : # define isinff _isinff
+    4432              : #endif
+    4433              : 
+    4434              : #if defined (_GLIBCXX_HAVE__ISINFL) && ! defined (_GLIBCXX_HAVE_ISINFL)
+    4435              : # define _GLIBCXX_HAVE_ISINFL 1
+    4436              : # define isinfl _isinfl
+    4437              : #endif
+    4438              : 
+    4439              : #if defined (_GLIBCXX_HAVE__ISNAN) && ! defined (_GLIBCXX_HAVE_ISNAN)
+    4440              : # define _GLIBCXX_HAVE_ISNAN 1
+    4441              : # define isnan _isnan
+    4442              : #endif
+    4443              : 
+    4444              : #if defined (_GLIBCXX_HAVE__ISNANF) && ! defined (_GLIBCXX_HAVE_ISNANF)
+    4445              : # define _GLIBCXX_HAVE_ISNANF 1
+    4446              : # define isnanf _isnanf
+    4447              : #endif
+    4448              : 
+    4449              : #if defined (_GLIBCXX_HAVE__ISNANL) && ! defined (_GLIBCXX_HAVE_ISNANL)
+    4450              : # define _GLIBCXX_HAVE_ISNANL 1
+    4451              : # define isnanl _isnanl
+    4452              : #endif
+    4453              : 
+    4454              : #if defined (_GLIBCXX_HAVE__LDEXPF) && ! defined (_GLIBCXX_HAVE_LDEXPF)
+    4455              : # define _GLIBCXX_HAVE_LDEXPF 1
+    4456              : # define ldexpf _ldexpf
+    4457              : #endif
+    4458              : 
+    4459              : #if defined (_GLIBCXX_HAVE__LDEXPL) && ! defined (_GLIBCXX_HAVE_LDEXPL)
+    4460              : # define _GLIBCXX_HAVE_LDEXPL 1
+    4461              : # define ldexpl _ldexpl
+    4462              : #endif
+    4463              : 
+    4464              : #if defined (_GLIBCXX_HAVE__LOG10F) && ! defined (_GLIBCXX_HAVE_LOG10F)
+    4465              : # define _GLIBCXX_HAVE_LOG10F 1
+    4466              : # define log10f _log10f
+    4467              : #endif
+    4468              : 
+    4469              : #if defined (_GLIBCXX_HAVE__LOG10L) && ! defined (_GLIBCXX_HAVE_LOG10L)
+    4470              : # define _GLIBCXX_HAVE_LOG10L 1
+    4471              : # define log10l _log10l
+    4472              : #endif
+    4473              : 
+    4474              : #if defined (_GLIBCXX_HAVE__LOGF) && ! defined (_GLIBCXX_HAVE_LOGF)
+    4475              : # define _GLIBCXX_HAVE_LOGF 1
+    4476              : # define logf _logf
+    4477              : #endif
+    4478              : 
+    4479              : #if defined (_GLIBCXX_HAVE__LOGL) && ! defined (_GLIBCXX_HAVE_LOGL)
+    4480              : # define _GLIBCXX_HAVE_LOGL 1
+    4481              : # define logl _logl
+    4482              : #endif
+    4483              : 
+    4484              : #if defined (_GLIBCXX_HAVE__MODF) && ! defined (_GLIBCXX_HAVE_MODF)
+    4485              : # define _GLIBCXX_HAVE_MODF 1
+    4486              : # define modf _modf
+    4487              : #endif
+    4488              : 
+    4489              : #if defined (_GLIBCXX_HAVE__MODFF) && ! defined (_GLIBCXX_HAVE_MODFF)
+    4490              : # define _GLIBCXX_HAVE_MODFF 1
+    4491              : # define modff _modff
+    4492              : #endif
+    4493              : 
+    4494              : #if defined (_GLIBCXX_HAVE__MODFL) && ! defined (_GLIBCXX_HAVE_MODFL)
+    4495              : # define _GLIBCXX_HAVE_MODFL 1
+    4496              : # define modfl _modfl
+    4497              : #endif
+    4498              : 
+    4499              : #if defined (_GLIBCXX_HAVE__POWF) && ! defined (_GLIBCXX_HAVE_POWF)
+    4500              : # define _GLIBCXX_HAVE_POWF 1
+    4501              : # define powf _powf
+    4502              : #endif
+    4503              : 
+    4504              : #if defined (_GLIBCXX_HAVE__POWL) && ! defined (_GLIBCXX_HAVE_POWL)
+    4505              : # define _GLIBCXX_HAVE_POWL 1
+    4506              : # define powl _powl
+    4507              : #endif
+    4508              : 
+    4509              : #if defined (_GLIBCXX_HAVE__QFPCLASS) && ! defined (_GLIBCXX_HAVE_QFPCLASS)
+    4510              : # define _GLIBCXX_HAVE_QFPCLASS 1
+    4511              : # define qfpclass _qfpclass
+    4512              : #endif
+    4513              : 
+    4514              : #if defined (_GLIBCXX_HAVE__SINCOS) && ! defined (_GLIBCXX_HAVE_SINCOS)
+    4515              : # define _GLIBCXX_HAVE_SINCOS 1
+    4516              : # define sincos _sincos
+    4517              : #endif
+    4518              : 
+    4519              : #if defined (_GLIBCXX_HAVE__SINCOSF) && ! defined (_GLIBCXX_HAVE_SINCOSF)
+    4520              : # define _GLIBCXX_HAVE_SINCOSF 1
+    4521              : # define sincosf _sincosf
+    4522              : #endif
+    4523              : 
+    4524              : #if defined (_GLIBCXX_HAVE__SINCOSL) && ! defined (_GLIBCXX_HAVE_SINCOSL)
+    4525              : # define _GLIBCXX_HAVE_SINCOSL 1
+    4526              : # define sincosl _sincosl
+    4527              : #endif
+    4528              : 
+    4529              : #if defined (_GLIBCXX_HAVE__SINF) && ! defined (_GLIBCXX_HAVE_SINF)
+    4530              : # define _GLIBCXX_HAVE_SINF 1
+    4531              : # define sinf _sinf
+    4532              : #endif
+    4533              : 
+    4534              : #if defined (_GLIBCXX_HAVE__SINHF) && ! defined (_GLIBCXX_HAVE_SINHF)
+    4535              : # define _GLIBCXX_HAVE_SINHF 1
+    4536              : # define sinhf _sinhf
+    4537              : #endif
+    4538              : 
+    4539              : #if defined (_GLIBCXX_HAVE__SINHL) && ! defined (_GLIBCXX_HAVE_SINHL)
+    4540              : # define _GLIBCXX_HAVE_SINHL 1
+    4541              : # define sinhl _sinhl
+    4542              : #endif
+    4543              : 
+    4544              : #if defined (_GLIBCXX_HAVE__SINL) && ! defined (_GLIBCXX_HAVE_SINL)
+    4545              : # define _GLIBCXX_HAVE_SINL 1
+    4546              : # define sinl _sinl
+    4547              : #endif
+    4548              : 
+    4549              : #if defined (_GLIBCXX_HAVE__SQRTF) && ! defined (_GLIBCXX_HAVE_SQRTF)
+    4550              : # define _GLIBCXX_HAVE_SQRTF 1
+    4551              : # define sqrtf _sqrtf
+    4552              : #endif
+    4553              : 
+    4554              : #if defined (_GLIBCXX_HAVE__SQRTL) && ! defined (_GLIBCXX_HAVE_SQRTL)
+    4555              : # define _GLIBCXX_HAVE_SQRTL 1
+    4556              : # define sqrtl _sqrtl
+    4557              : #endif
+    4558              : 
+    4559              : #if defined (_GLIBCXX_HAVE__STRTOF) && ! defined (_GLIBCXX_HAVE_STRTOF)
+    4560              : # define _GLIBCXX_HAVE_STRTOF 1
+    4561              : # define strtof _strtof
+    4562              : #endif
+    4563              : 
+    4564              : #if defined (_GLIBCXX_HAVE__STRTOLD) && ! defined (_GLIBCXX_HAVE_STRTOLD)
+    4565              : # define _GLIBCXX_HAVE_STRTOLD 1
+    4566              : # define strtold _strtold
+    4567              : #endif
+    4568              : 
+    4569              : #if defined (_GLIBCXX_HAVE__TANF) && ! defined (_GLIBCXX_HAVE_TANF)
+    4570              : # define _GLIBCXX_HAVE_TANF 1
+    4571              : # define tanf _tanf
+    4572              : #endif
+    4573              : 
+    4574              : #if defined (_GLIBCXX_HAVE__TANHF) && ! defined (_GLIBCXX_HAVE_TANHF)
+    4575              : # define _GLIBCXX_HAVE_TANHF 1
+    4576              : # define tanhf _tanhf
+    4577              : #endif
+    4578              : 
+    4579              : #if defined (_GLIBCXX_HAVE__TANHL) && ! defined (_GLIBCXX_HAVE_TANHL)
+    4580              : # define _GLIBCXX_HAVE_TANHL 1
+    4581              : # define tanhl _tanhl
+    4582              : #endif
+    4583              : 
+    4584              : #if defined (_GLIBCXX_HAVE__TANL) && ! defined (_GLIBCXX_HAVE_TANL)
+    4585              : # define _GLIBCXX_HAVE_TANL 1
+    4586              : # define tanl _tanl
+    4587              : #endif
+    4588              : 
+    4589              : #endif // _GLIBCXX_CXX_CONFIG_H
+    4590              : #endif
+    4591              : #endif
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h.func-c.html b/html/usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h.func-c.html new file mode 100644 index 0000000..54b51da --- /dev/null +++ b/html/usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h.func-c.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/x86_64-redhat-linux/bits - ctype_inline.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %20
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt5ctypeIcE2isEtc0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h.func.html b/html/usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h.func.html new file mode 100644 index 0000000..6c68583 --- /dev/null +++ b/html/usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h.func.html @@ -0,0 +1,82 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/x86_64-redhat-linux/bits - ctype_inline.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %20
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ +
+ + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZNKSt5ctypeIcE2isEtc0
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h.gcov.html b/html/usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h.gcov.html new file mode 100644 index 0000000..a64b42b --- /dev/null +++ b/html/usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h.gcov.html @@ -0,0 +1,152 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/x86_64-redhat-linux/bits/ctype_inline.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/x86_64-redhat-linux/bits - ctype_inline.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:0.0 %20
Test Date:2024-04-30 13:17:26Functions:0.0 %10
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : // Locale support -*- C++ -*-
+       2              : 
+       3              : // Copyright (C) 2000-2023 Free Software Foundation, Inc.
+       4              : //
+       5              : // This file is part of the GNU ISO C++ Library.  This library is free
+       6              : // software; you can redistribute it and/or modify it under the
+       7              : // terms of the GNU General Public License as published by the
+       8              : // Free Software Foundation; either version 3, or (at your option)
+       9              : // any later version.
+      10              : 
+      11              : // This library is distributed in the hope that it will be useful,
+      12              : // but WITHOUT ANY WARRANTY; without even the implied warranty of
+      13              : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      14              : // GNU General Public License for more details.
+      15              : 
+      16              : // Under Section 7 of GPL version 3, you are granted additional
+      17              : // permissions described in the GCC Runtime Library Exception, version
+      18              : // 3.1, as published by the Free Software Foundation.
+      19              : 
+      20              : // You should have received a copy of the GNU General Public License and
+      21              : // a copy of the GCC Runtime Library Exception along with this program;
+      22              : // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      23              : // <http://www.gnu.org/licenses/>.
+      24              : 
+      25              : /** @file bits/ctype_inline.h
+      26              :  *  This is an internal header file, included by other library headers.
+      27              :  *  Do not attempt to use it directly. @headername{locale}
+      28              :  */
+      29              : 
+      30              : //
+      31              : // ISO C++ 14882: 22.1  Locales
+      32              : //
+      33              : 
+      34              : // ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
+      35              : // functions go in ctype.cc
+      36              : 
+      37              : namespace std _GLIBCXX_VISIBILITY(default)
+      38              : {
+      39              : _GLIBCXX_BEGIN_NAMESPACE_VERSION
+      40              : 
+      41              :   bool
+      42            0 :   ctype<char>::
+      43              :   is(mask __m, char __c) const
+      44            0 :   { return _M_table[static_cast<unsigned char>(__c)] & __m; }
+      45              : 
+      46              :   const char*
+      47              :   ctype<char>::
+      48              :   is(const char* __low, const char* __high, mask* __vec) const
+      49              :   {
+      50              :     while (__low < __high)
+      51              :       *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
+      52              :     return __high;
+      53              :   }
+      54              : 
+      55              :   const char*
+      56              :   ctype<char>::
+      57              :   scan_is(mask __m, const char* __low, const char* __high) const
+      58              :   {
+      59              :     while (__low < __high
+      60              :            && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
+      61              :       ++__low;
+      62              :     return __low;
+      63              :   }
+      64              : 
+      65              :   const char*
+      66              :   ctype<char>::
+      67              :   scan_not(mask __m, const char* __low, const char* __high) const
+      68              :   {
+      69              :     while (__low < __high
+      70              :            && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
+      71              :       ++__low;
+      72              :     return __low;
+      73              :   }
+      74              : 
+      75              : _GLIBCXX_END_NAMESPACE_VERSION
+      76              : } // namespace
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h.func-c.html b/html/usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h.func-c.html new file mode 100644 index 0000000..9359d1e --- /dev/null +++ b/html/usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h.func-c.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/x86_64-redhat-linux/bits - gthr-default.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:85.7 %1412
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZL30__gthread_recursive_mutex_lockP15pthread_mutex_t3564
_ZL32__gthread_recursive_mutex_unlockP15pthread_mutex_t3564
_ZL20__gthread_mutex_lockP15pthread_mutex_t1595104
_ZL22__gthread_mutex_unlockP15pthread_mutex_t1595104
_ZL18__gthread_active_pv3190208
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h.func.html b/html/usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h.func.html new file mode 100644 index 0000000..0497447 --- /dev/null +++ b/html/usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h.func.html @@ -0,0 +1,110 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/x86_64-redhat-linux/bits - gthr-default.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:85.7 %1412
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by function hit count
_ZL18__gthread_active_pv3190208
_ZL20__gthread_mutex_lockP15pthread_mutex_t1595104
_ZL22__gthread_mutex_unlockP15pthread_mutex_t1595104
_ZL30__gthread_recursive_mutex_lockP15pthread_mutex_t3564
_ZL32__gthread_recursive_mutex_unlockP15pthread_mutex_t3564
+
+
+ + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h.gcov.html b/html/usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h.gcov.html new file mode 100644 index 0000000..d69e9fb --- /dev/null +++ b/html/usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h.gcov.html @@ -0,0 +1,966 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/x86_64-redhat-linux/bits/gthr-default.h + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/x86_64-redhat-linux/bits - gthr-default.h (source / functions)CoverageTotalHit
Test:coverage.infoLines:85.7 %1412
Test Date:2024-04-30 13:17:26Functions:100.0 %55
+
+ + + + + + + + +

+
            Line data    Source code
+
+       1              : /* Threads compatibility routines for libgcc2 and libobjc.  */
+       2              : /* Compile this one with gcc.  */
+       3              : /* Copyright (C) 1997-2023 Free Software Foundation, Inc.
+       4              : 
+       5              : This file is part of GCC.
+       6              : 
+       7              : GCC is free software; you can redistribute it and/or modify it under
+       8              : the terms of the GNU General Public License as published by the Free
+       9              : Software Foundation; either version 3, or (at your option) any later
+      10              : version.
+      11              : 
+      12              : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+      13              : WARRANTY; without even the implied warranty of MERCHANTABILITY or
+      14              : FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+      15              : for more details.
+      16              : 
+      17              : Under Section 7 of GPL version 3, you are granted additional
+      18              : permissions described in the GCC Runtime Library Exception, version
+      19              : 3.1, as published by the Free Software Foundation.
+      20              : 
+      21              : You should have received a copy of the GNU General Public License and
+      22              : a copy of the GCC Runtime Library Exception along with this program;
+      23              : see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+      24              : <http://www.gnu.org/licenses/>.  */
+      25              : 
+      26              : #ifndef _GLIBCXX_GCC_GTHR_POSIX_H
+      27              : #define _GLIBCXX_GCC_GTHR_POSIX_H
+      28              : 
+      29              : /* POSIX threads specific definitions.
+      30              :    Easy, since the interface is just one-to-one mapping.  */
+      31              : 
+      32              : #define __GTHREADS 1
+      33              : #define __GTHREADS_CXX0X 1
+      34              : 
+      35              : #include <pthread.h>
+      36              : 
+      37              : #if ((defined(_LIBOBJC) || defined(_LIBOBJC_WEAK)) \
+      38              :      || !defined(_GTHREAD_USE_MUTEX_TIMEDLOCK))
+      39              : # include <unistd.h>
+      40              : # if defined(_POSIX_TIMEOUTS) && _POSIX_TIMEOUTS >= 0
+      41              : #  define _GTHREAD_USE_MUTEX_TIMEDLOCK 1
+      42              : # else
+      43              : #  define _GTHREAD_USE_MUTEX_TIMEDLOCK 0
+      44              : # endif
+      45              : #endif
+      46              : 
+      47              : typedef pthread_t __gthread_t;
+      48              : typedef pthread_key_t __gthread_key_t;
+      49              : typedef pthread_once_t __gthread_once_t;
+      50              : typedef pthread_mutex_t __gthread_mutex_t;
+      51              : typedef pthread_mutex_t __gthread_recursive_mutex_t;
+      52              : typedef pthread_cond_t __gthread_cond_t;
+      53              : typedef struct timespec __gthread_time_t;
+      54              : 
+      55              : /* POSIX like conditional variables are supported.  Please look at comments
+      56              :    in gthr.h for details. */
+      57              : #define __GTHREAD_HAS_COND      1
+      58              : 
+      59              : #define __GTHREAD_MUTEX_INIT PTHREAD_MUTEX_INITIALIZER
+      60              : #define __GTHREAD_MUTEX_INIT_FUNCTION __gthread_mutex_init_function
+      61              : #define __GTHREAD_ONCE_INIT PTHREAD_ONCE_INIT
+      62              : #if defined(PTHREAD_RECURSIVE_MUTEX_INITIALIZER)
+      63              : #define __GTHREAD_RECURSIVE_MUTEX_INIT PTHREAD_RECURSIVE_MUTEX_INITIALIZER
+      64              : #elif defined(PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP)
+      65              : #define __GTHREAD_RECURSIVE_MUTEX_INIT PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+      66              : #else
+      67              : #define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function
+      68              : #endif
+      69              : #define __GTHREAD_COND_INIT PTHREAD_COND_INITIALIZER
+      70              : #define __GTHREAD_TIME_INIT {0,0}
+      71              : 
+      72              : #ifdef _GTHREAD_USE_MUTEX_INIT_FUNC
+      73              : # undef __GTHREAD_MUTEX_INIT
+      74              : #endif
+      75              : #ifdef _GTHREAD_USE_RECURSIVE_MUTEX_INIT_FUNC
+      76              : # undef __GTHREAD_RECURSIVE_MUTEX_INIT
+      77              : # undef __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION
+      78              : # define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function
+      79              : #endif
+      80              : #ifdef _GTHREAD_USE_COND_INIT_FUNC
+      81              : # undef __GTHREAD_COND_INIT
+      82              : # define __GTHREAD_COND_INIT_FUNCTION __gthread_cond_init_function
+      83              : #endif
+      84              : 
+      85              : #if __GXX_WEAK__ && _GLIBCXX_GTHREAD_USE_WEAK
+      86              : # ifndef __gthrw_pragma
+      87              : #  define __gthrw_pragma(pragma)
+      88              : # endif
+      89              : # define __gthrw2(name,name2,type) \
+      90              :   static __typeof(type) name \
+      91              :     __attribute__ ((__weakref__(#name2), __copy__ (type))); \
+      92              :   __gthrw_pragma(weak type)
+      93              : # define __gthrw_(name) __gthrw_ ## name
+      94              : #else
+      95              : # define __gthrw2(name,name2,type)
+      96              : # define __gthrw_(name) name
+      97              : #endif
+      98              : 
+      99              : /* Typically, __gthrw_foo is a weak reference to symbol foo.  */
+     100              : #define __gthrw(name) __gthrw2(__gthrw_ ## name,name,name)
+     101              : 
+     102              : __gthrw(pthread_once)
+     103              : __gthrw(pthread_getspecific)
+     104              : __gthrw(pthread_setspecific)
+     105              : 
+     106              : __gthrw(pthread_create)
+     107              : __gthrw(pthread_join)
+     108              : __gthrw(pthread_equal)
+     109              : __gthrw(pthread_self)
+     110              : __gthrw(pthread_detach)
+     111              : #ifndef __BIONIC__
+     112              : __gthrw(pthread_cancel)
+     113              : #endif
+     114              : __gthrw(sched_yield)
+     115              : 
+     116              : __gthrw(pthread_mutex_lock)
+     117              : __gthrw(pthread_mutex_trylock)
+     118              : #if _GTHREAD_USE_MUTEX_TIMEDLOCK
+     119              : __gthrw(pthread_mutex_timedlock)
+     120              : #endif
+     121              : __gthrw(pthread_mutex_unlock)
+     122              : __gthrw(pthread_mutex_init)
+     123              : __gthrw(pthread_mutex_destroy)
+     124              : 
+     125              : __gthrw(pthread_cond_init)
+     126              : __gthrw(pthread_cond_broadcast)
+     127              : __gthrw(pthread_cond_signal)
+     128              : __gthrw(pthread_cond_wait)
+     129              : __gthrw(pthread_cond_timedwait)
+     130              : __gthrw(pthread_cond_destroy)
+     131              : 
+     132              : __gthrw(pthread_key_create)
+     133              : __gthrw(pthread_key_delete)
+     134              : __gthrw(pthread_mutexattr_init)
+     135              : __gthrw(pthread_mutexattr_settype)
+     136              : __gthrw(pthread_mutexattr_destroy)
+     137              : 
+     138              : 
+     139              : #if defined(_LIBOBJC) || defined(_LIBOBJC_WEAK)
+     140              : /* Objective-C.  */
+     141              : __gthrw(pthread_exit)
+     142              : #ifdef _POSIX_PRIORITY_SCHEDULING
+     143              : #ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
+     144              : __gthrw(sched_get_priority_max)
+     145              : __gthrw(sched_get_priority_min)
+     146              : #endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */
+     147              : #endif /* _POSIX_PRIORITY_SCHEDULING */
+     148              : __gthrw(pthread_attr_destroy)
+     149              : __gthrw(pthread_attr_init)
+     150              : __gthrw(pthread_attr_setdetachstate)
+     151              : #ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
+     152              : __gthrw(pthread_getschedparam)
+     153              : __gthrw(pthread_setschedparam)
+     154              : #endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */
+     155              : #endif /* _LIBOBJC || _LIBOBJC_WEAK */
+     156              : 
+     157              : #if __GXX_WEAK__ && _GLIBCXX_GTHREAD_USE_WEAK
+     158              : 
+     159              : /* On Solaris 2.6 up to 9, the libc exposes a POSIX threads interface even if
+     160              :    -pthreads is not specified.  The functions are dummies and most return an
+     161              :    error value.  However pthread_once returns 0 without invoking the routine
+     162              :    it is passed so we cannot pretend that the interface is active if -pthreads
+     163              :    is not specified.  On Solaris 2.5.1, the interface is not exposed at all so
+     164              :    we need to play the usual game with weak symbols.  On Solaris 10 and up, a
+     165              :    working interface is always exposed.  On FreeBSD 6 and later, libc also
+     166              :    exposes a dummy POSIX threads interface, similar to what Solaris 2.6 up
+     167              :    to 9 does.  FreeBSD >= 700014 even provides a pthread_cancel stub in libc,
+     168              :    which means the alternate __gthread_active_p below cannot be used there.  */
+     169              : 
+     170              : #if defined(__FreeBSD__) || (defined(__sun) && defined(__svr4__))
+     171              : 
+     172              : static volatile int __gthread_active = -1;
+     173              : 
+     174              : static void
+     175              : __gthread_trigger (void)
+     176              : {
+     177              :   __gthread_active = 1;
+     178              : }
+     179              : 
+     180              : static inline int
+     181              : __gthread_active_p (void)
+     182              : {
+     183              :   static pthread_mutex_t __gthread_active_mutex = PTHREAD_MUTEX_INITIALIZER;
+     184              :   static pthread_once_t __gthread_active_once = PTHREAD_ONCE_INIT;
+     185              : 
+     186              :   /* Avoid reading __gthread_active twice on the main code path.  */
+     187              :   int __gthread_active_latest_value = __gthread_active;
+     188              : 
+     189              :   /* This test is not protected to avoid taking a lock on the main code
+     190              :      path so every update of __gthread_active in a threaded program must
+     191              :      be atomic with regard to the result of the test.  */
+     192              :   if (__builtin_expect (__gthread_active_latest_value < 0, 0))
+     193              :     {
+     194              :       if (__gthrw_(pthread_once))
+     195              :         {
+     196              :           /* If this really is a threaded program, then we must ensure that
+     197              :              __gthread_active has been set to 1 before exiting this block.  */
+     198              :           __gthrw_(pthread_mutex_lock) (&__gthread_active_mutex);
+     199              :           __gthrw_(pthread_once) (&__gthread_active_once, __gthread_trigger);
+     200              :           __gthrw_(pthread_mutex_unlock) (&__gthread_active_mutex);
+     201              :         }
+     202              : 
+     203              :       /* Make sure we'll never enter this block again.  */
+     204              :       if (__gthread_active < 0)
+     205              :         __gthread_active = 0;
+     206              : 
+     207              :       __gthread_active_latest_value = __gthread_active;
+     208              :     }
+     209              : 
+     210              :   return __gthread_active_latest_value != 0;
+     211              : }
+     212              : 
+     213              : #else /* neither FreeBSD nor Solaris */
+     214              : 
+     215              : /* For a program to be multi-threaded the only thing that it certainly must
+     216              :    be using is pthread_create.  However, there may be other libraries that
+     217              :    intercept pthread_create with their own definitions to wrap pthreads
+     218              :    functionality for some purpose.  In those cases, pthread_create being
+     219              :    defined might not necessarily mean that libpthread is actually linked
+     220              :    in.
+     221              : 
+     222              :    For the GNU C library, we can use a known internal name.  This is always
+     223              :    available in the ABI, but no other library would define it.  That is
+     224              :    ideal, since any public pthread function might be intercepted just as
+     225              :    pthread_create might be.  __pthread_key_create is an "internal"
+     226              :    implementation symbol, but it is part of the public exported ABI.  Also,
+     227              :    it's among the symbols that the static libpthread.a always links in
+     228              :    whenever pthread_create is used, so there is no danger of a false
+     229              :    negative result in any statically-linked, multi-threaded program.
+     230              : 
+     231              :    For others, we choose pthread_cancel as a function that seems unlikely
+     232              :    to be redefined by an interceptor library.  The bionic (Android) C
+     233              :    library does not provide pthread_cancel, so we do use pthread_create
+     234              :    there (and interceptor libraries lose).  */
+     235              : 
+     236              : #ifdef __GLIBC__
+     237              : __gthrw2(__gthrw_(__pthread_key_create),
+     238              :          __pthread_key_create,
+     239              :          pthread_key_create)
+     240              : # define GTHR_ACTIVE_PROXY      __gthrw_(__pthread_key_create)
+     241              : #elif defined (__BIONIC__)
+     242              : # define GTHR_ACTIVE_PROXY      __gthrw_(pthread_create)
+     243              : #else
+     244              : # define GTHR_ACTIVE_PROXY      __gthrw_(pthread_cancel)
+     245              : #endif
+     246              : 
+     247              : static inline int
+     248              : __gthread_active_p (void)
+     249              : {
+     250              :   static void *const __gthread_active_ptr
+     251              :     = __extension__ (void *) &GTHR_ACTIVE_PROXY;
+     252              :   return __gthread_active_ptr != 0;
+     253              : }
+     254              : 
+     255              : #endif /* FreeBSD or Solaris */
+     256              : 
+     257              : #else /* not __GXX_WEAK__ */
+     258              : 
+     259              : /* Similar to Solaris, HP-UX 11 for PA-RISC provides stubs for pthread
+     260              :    calls in shared flavors of the HP-UX C library.  Most of the stubs
+     261              :    have no functionality.  The details are described in the "libc cumulative
+     262              :    patch" for each subversion of HP-UX 11.  There are two special interfaces
+     263              :    provided for checking whether an application is linked to a shared pthread
+     264              :    library or not.  However, these interfaces aren't available in early
+     265              :    libpthread libraries.  We also need a test that works for archive
+     266              :    libraries.  We can't use pthread_once as some libc versions call the
+     267              :    init function.  We also can't use pthread_create or pthread_attr_init
+     268              :    as these create a thread and thereby prevent changing the default stack
+     269              :    size.  The function pthread_default_stacksize_np is available in both
+     270              :    the archive and shared versions of libpthread.   It can be used to
+     271              :    determine the default pthread stack size.  There is a stub in some
+     272              :    shared libc versions which returns a zero size if pthreads are not
+     273              :    active.  We provide an equivalent stub to handle cases where libc
+     274              :    doesn't provide one.  */
+     275              : 
+     276              : #if defined(__hppa__) && defined(__hpux__)
+     277              : 
+     278              : static volatile int __gthread_active = -1;
+     279              : 
+     280              : static inline int
+     281              : __gthread_active_p (void)
+     282              : {
+     283              :   /* Avoid reading __gthread_active twice on the main code path.  */
+     284              :   int __gthread_active_latest_value = __gthread_active;
+     285              :   size_t __s;
+     286              : 
+     287              :   if (__builtin_expect (__gthread_active_latest_value < 0, 0))
+     288              :     {
+     289              :       pthread_default_stacksize_np (0, &__s);
+     290              :       __gthread_active = __s ? 1 : 0;
+     291              :       __gthread_active_latest_value = __gthread_active;
+     292              :     }
+     293              : 
+     294              :   return __gthread_active_latest_value != 0;
+     295              : }
+     296              : 
+     297              : #else /* not hppa-hpux */
+     298              : 
+     299              : static inline int
+     300      3190208 : __gthread_active_p (void)
+     301              : {
+     302      3190208 :   return 1;
+     303              : }
+     304              : 
+     305              : #endif /* hppa-hpux */
+     306              : 
+     307              : #endif /* __GXX_WEAK__ */
+     308              : 
+     309              : #ifdef _LIBOBJC
+     310              : 
+     311              : /* This is the config.h file in libobjc/ */
+     312              : #include <config.h>
+     313              : 
+     314              : #ifdef HAVE_SCHED_H
+     315              : # include <sched.h>
+     316              : #endif
+     317              : 
+     318              : /* Key structure for maintaining thread specific storage */
+     319              : static pthread_key_t _objc_thread_storage;
+     320              : static pthread_attr_t _objc_thread_attribs;
+     321              : 
+     322              : /* Thread local storage for a single thread */
+     323              : static void *thread_local_storage = NULL;
+     324              : 
+     325              : /* Backend initialization functions */
+     326              : 
+     327              : /* Initialize the threads subsystem.  */
+     328              : static inline int
+     329              : __gthread_objc_init_thread_system (void)
+     330              : {
+     331              :   if (__gthread_active_p ())
+     332              :     {
+     333              :       /* Initialize the thread storage key.  */
+     334              :       if (__gthrw_(pthread_key_create) (&_objc_thread_storage, NULL) == 0)
+     335              :         {
+     336              :           /* The normal default detach state for threads is
+     337              :            * PTHREAD_CREATE_JOINABLE which causes threads to not die
+     338              :            * when you think they should.  */
+     339              :           if (__gthrw_(pthread_attr_init) (&_objc_thread_attribs) == 0
+     340              :               && __gthrw_(pthread_attr_setdetachstate) (&_objc_thread_attribs,
+     341              :                                               PTHREAD_CREATE_DETACHED) == 0)
+     342              :             return 0;
+     343              :         }
+     344              :     }
+     345              : 
+     346              :   return -1;
+     347              : }
+     348              : 
+     349              : /* Close the threads subsystem.  */
+     350              : static inline int
+     351              : __gthread_objc_close_thread_system (void)
+     352              : {
+     353              :   if (__gthread_active_p ()
+     354              :       && __gthrw_(pthread_key_delete) (_objc_thread_storage) == 0
+     355              :       && __gthrw_(pthread_attr_destroy) (&_objc_thread_attribs) == 0)
+     356              :     return 0;
+     357              : 
+     358              :   return -1;
+     359              : }
+     360              : 
+     361              : /* Backend thread functions */
+     362              : 
+     363              : /* Create a new thread of execution.  */
+     364              : static inline objc_thread_t
+     365              : __gthread_objc_thread_detach (void (*func)(void *), void *arg)
+     366              : {
+     367              :   objc_thread_t thread_id;
+     368              :   pthread_t new_thread_handle;
+     369              : 
+     370              :   if (!__gthread_active_p ())
+     371              :     return NULL;
+     372              : 
+     373              :   if (!(__gthrw_(pthread_create) (&new_thread_handle, &_objc_thread_attribs,
+     374              :                                   (void *) func, arg)))
+     375              :     thread_id = (objc_thread_t) new_thread_handle;
+     376              :   else
+     377              :     thread_id = NULL;
+     378              : 
+     379              :   return thread_id;
+     380              : }
+     381              : 
+     382              : /* Set the current thread's priority.  */
+     383              : static inline int
+     384              : __gthread_objc_thread_set_priority (int priority)
+     385              : {
+     386              :   if (!__gthread_active_p ())
+     387              :     return -1;
+     388              :   else
+     389              :     {
+     390              : #ifdef _POSIX_PRIORITY_SCHEDULING
+     391              : #ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
+     392              :       pthread_t thread_id = __gthrw_(pthread_self) ();
+     393              :       int policy;
+     394              :       struct sched_param params;
+     395              :       int priority_min, priority_max;
+     396              : 
+     397              :       if (__gthrw_(pthread_getschedparam) (thread_id, &policy, &params) == 0)
+     398              :         {
+     399              :           if ((priority_max = __gthrw_(sched_get_priority_max) (policy)) == -1)
+     400              :             return -1;
+     401              : 
+     402              :           if ((priority_min = __gthrw_(sched_get_priority_min) (policy)) == -1)
+     403              :             return -1;
+     404              : 
+     405              :           if (priority > priority_max)
+     406              :             priority = priority_max;
+     407              :           else if (priority < priority_min)
+     408              :             priority = priority_min;
+     409              :           params.sched_priority = priority;
+     410              : 
+     411              :           /*
+     412              :            * The solaris 7 and several other man pages incorrectly state that
+     413              :            * this should be a pointer to policy but pthread.h is universally
+     414              :            * at odds with this.
+     415              :            */
+     416              :           if (__gthrw_(pthread_setschedparam) (thread_id, policy, &params) == 0)
+     417              :             return 0;
+     418              :         }
+     419              : #endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */
+     420              : #endif /* _POSIX_PRIORITY_SCHEDULING */
+     421              :       return -1;
+     422              :     }
+     423              : }
+     424              : 
+     425              : /* Return the current thread's priority.  */
+     426              : static inline int
+     427              : __gthread_objc_thread_get_priority (void)
+     428              : {
+     429              : #ifdef _POSIX_PRIORITY_SCHEDULING
+     430              : #ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
+     431              :   if (__gthread_active_p ())
+     432              :     {
+     433              :       int policy;
+     434              :       struct sched_param params;
+     435              : 
+     436              :       if (__gthrw_(pthread_getschedparam) (__gthrw_(pthread_self) (), &policy, &params) == 0)
+     437              :         return params.sched_priority;
+     438              :       else
+     439              :         return -1;
+     440              :     }
+     441              :   else
+     442              : #endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */
+     443              : #endif /* _POSIX_PRIORITY_SCHEDULING */
+     444              :     return OBJC_THREAD_INTERACTIVE_PRIORITY;
+     445              : }
+     446              : 
+     447              : /* Yield our process time to another thread.  */
+     448              : static inline void
+     449              : __gthread_objc_thread_yield (void)
+     450              : {
+     451              :   if (__gthread_active_p ())
+     452              :     __gthrw_(sched_yield) ();
+     453              : }
+     454              : 
+     455              : /* Terminate the current thread.  */
+     456              : static inline int
+     457              : __gthread_objc_thread_exit (void)
+     458              : {
+     459              :   if (__gthread_active_p ())
+     460              :     /* exit the thread */
+     461              :     __gthrw_(pthread_exit) (&__objc_thread_exit_status);
+     462              : 
+     463              :   /* Failed if we reached here */
+     464              :   return -1;
+     465              : }
+     466              : 
+     467              : /* Returns an integer value which uniquely describes a thread.  */
+     468              : static inline objc_thread_t
+     469              : __gthread_objc_thread_id (void)
+     470              : {
+     471              :   if (__gthread_active_p ())
+     472              :     return (objc_thread_t) __gthrw_(pthread_self) ();
+     473              :   else
+     474              :     return (objc_thread_t) 1;
+     475              : }
+     476              : 
+     477              : /* Sets the thread's local storage pointer.  */
+     478              : static inline int
+     479              : __gthread_objc_thread_set_data (void *value)
+     480              : {
+     481              :   if (__gthread_active_p ())
+     482              :     return __gthrw_(pthread_setspecific) (_objc_thread_storage, value);
+     483              :   else
+     484              :     {
+     485              :       thread_local_storage = value;
+     486              :       return 0;
+     487              :     }
+     488              : }
+     489              : 
+     490              : /* Returns the thread's local storage pointer.  */
+     491              : static inline void *
+     492              : __gthread_objc_thread_get_data (void)
+     493              : {
+     494              :   if (__gthread_active_p ())
+     495              :     return __gthrw_(pthread_getspecific) (_objc_thread_storage);
+     496              :   else
+     497              :     return thread_local_storage;
+     498              : }
+     499              : 
+     500              : /* Backend mutex functions */
+     501              : 
+     502              : /* Allocate a mutex.  */
+     503              : static inline int
+     504              : __gthread_objc_mutex_allocate (objc_mutex_t mutex)
+     505              : {
+     506              :   if (__gthread_active_p ())
+     507              :     {
+     508              :       mutex->backend = objc_malloc (sizeof (pthread_mutex_t));
+     509              : 
+     510              :       if (__gthrw_(pthread_mutex_init) ((pthread_mutex_t *) mutex->backend, NULL))
+     511              :         {
+     512              :           objc_free (mutex->backend);
+     513              :           mutex->backend = NULL;
+     514              :           return -1;
+     515              :         }
+     516              :     }
+     517              : 
+     518              :   return 0;
+     519              : }
+     520              : 
+     521              : /* Deallocate a mutex.  */
+     522              : static inline int
+     523              : __gthread_objc_mutex_deallocate (objc_mutex_t mutex)
+     524              : {
+     525              :   if (__gthread_active_p ())
+     526              :     {
+     527              :       int count;
+     528              : 
+     529              :       /*
+     530              :        * Posix Threads specifically require that the thread be unlocked
+     531              :        * for __gthrw_(pthread_mutex_destroy) to work.
+     532              :        */
+     533              : 
+     534              :       do
+     535              :         {
+     536              :           count = __gthrw_(pthread_mutex_unlock) ((pthread_mutex_t *) mutex->backend);
+     537              :           if (count < 0)
+     538              :             return -1;
+     539              :         }
+     540              :       while (count);
+     541              : 
+     542              :       if (__gthrw_(pthread_mutex_destroy) ((pthread_mutex_t *) mutex->backend))
+     543              :         return -1;
+     544              : 
+     545              :       objc_free (mutex->backend);
+     546              :       mutex->backend = NULL;
+     547              :     }
+     548              :   return 0;
+     549              : }
+     550              : 
+     551              : /* Grab a lock on a mutex.  */
+     552              : static inline int
+     553              : __gthread_objc_mutex_lock (objc_mutex_t mutex)
+     554              : {
+     555              :   if (__gthread_active_p ()
+     556              :       && __gthrw_(pthread_mutex_lock) ((pthread_mutex_t *) mutex->backend) != 0)
+     557              :     {
+     558              :       return -1;
+     559              :     }
+     560              : 
+     561              :   return 0;
+     562              : }
+     563              : 
+     564              : /* Try to grab a lock on a mutex.  */
+     565              : static inline int
+     566              : __gthread_objc_mutex_trylock (objc_mutex_t mutex)
+     567              : {
+     568              :   if (__gthread_active_p ()
+     569              :       && __gthrw_(pthread_mutex_trylock) ((pthread_mutex_t *) mutex->backend) != 0)
+     570              :     {
+     571              :       return -1;
+     572              :     }
+     573              : 
+     574              :   return 0;
+     575              : }
+     576              : 
+     577              : /* Unlock the mutex */
+     578              : static inline int
+     579              : __gthread_objc_mutex_unlock (objc_mutex_t mutex)
+     580              : {
+     581              :   if (__gthread_active_p ()
+     582              :       && __gthrw_(pthread_mutex_unlock) ((pthread_mutex_t *) mutex->backend) != 0)
+     583              :     {
+     584              :       return -1;
+     585              :     }
+     586              : 
+     587              :   return 0;
+     588              : }
+     589              : 
+     590              : /* Backend condition mutex functions */
+     591              : 
+     592              : /* Allocate a condition.  */
+     593              : static inline int
+     594              : __gthread_objc_condition_allocate (objc_condition_t condition)
+     595              : {
+     596              :   if (__gthread_active_p ())
+     597              :     {
+     598              :       condition->backend = objc_malloc (sizeof (pthread_cond_t));
+     599              : 
+     600              :       if (__gthrw_(pthread_cond_init) ((pthread_cond_t *) condition->backend, NULL))
+     601              :         {
+     602              :           objc_free (condition->backend);
+     603              :           condition->backend = NULL;
+     604              :           return -1;
+     605              :         }
+     606              :     }
+     607              : 
+     608              :   return 0;
+     609              : }
+     610              : 
+     611              : /* Deallocate a condition.  */
+     612              : static inline int
+     613              : __gthread_objc_condition_deallocate (objc_condition_t condition)
+     614              : {
+     615              :   if (__gthread_active_p ())
+     616              :     {
+     617              :       if (__gthrw_(pthread_cond_destroy) ((pthread_cond_t *) condition->backend))
+     618              :         return -1;
+     619              : 
+     620              :       objc_free (condition->backend);
+     621              :       condition->backend = NULL;
+     622              :     }
+     623              :   return 0;
+     624              : }
+     625              : 
+     626              : /* Wait on the condition */
+     627              : static inline int
+     628              : __gthread_objc_condition_wait (objc_condition_t condition, objc_mutex_t mutex)
+     629              : {
+     630              :   if (__gthread_active_p ())
+     631              :     return __gthrw_(pthread_cond_wait) ((pthread_cond_t *) condition->backend,
+     632              :                               (pthread_mutex_t *) mutex->backend);
+     633              :   else
+     634              :     return 0;
+     635              : }
+     636              : 
+     637              : /* Wake up all threads waiting on this condition.  */
+     638              : static inline int
+     639              : __gthread_objc_condition_broadcast (objc_condition_t condition)
+     640              : {
+     641              :   if (__gthread_active_p ())
+     642              :     return __gthrw_(pthread_cond_broadcast) ((pthread_cond_t *) condition->backend);
+     643              :   else
+     644              :     return 0;
+     645              : }
+     646              : 
+     647              : /* Wake up one thread waiting on this condition.  */
+     648              : static inline int
+     649              : __gthread_objc_condition_signal (objc_condition_t condition)
+     650              : {
+     651              :   if (__gthread_active_p ())
+     652              :     return __gthrw_(pthread_cond_signal) ((pthread_cond_t *) condition->backend);
+     653              :   else
+     654              :     return 0;
+     655              : }
+     656              : 
+     657              : #else /* _LIBOBJC */
+     658              : 
+     659              : static inline int
+     660              : __gthread_create (__gthread_t *__threadid, void *(*__func) (void*),
+     661              :                   void *__args)
+     662              : {
+     663              :   return __gthrw_(pthread_create) (__threadid, NULL, __func, __args);
+     664              : }
+     665              : 
+     666              : static inline int
+     667              : __gthread_join (__gthread_t __threadid, void **__value_ptr)
+     668              : {
+     669              :   return __gthrw_(pthread_join) (__threadid, __value_ptr);
+     670              : }
+     671              : 
+     672              : static inline int
+     673              : __gthread_detach (__gthread_t __threadid)
+     674              : {
+     675              :   return __gthrw_(pthread_detach) (__threadid);
+     676              : }
+     677              : 
+     678              : static inline int
+     679              : __gthread_equal (__gthread_t __t1, __gthread_t __t2)
+     680              : {
+     681              :   return __gthrw_(pthread_equal) (__t1, __t2);
+     682              : }
+     683              : 
+     684              : static inline __gthread_t
+     685              : __gthread_self (void)
+     686              : {
+     687              :   return __gthrw_(pthread_self) ();
+     688              : }
+     689              : 
+     690              : static inline int
+     691              : __gthread_yield (void)
+     692              : {
+     693              :   return __gthrw_(sched_yield) ();
+     694              : }
+     695              : 
+     696              : static inline int
+     697              : __gthread_once (__gthread_once_t *__once, void (*__func) (void))
+     698              : {
+     699              :   if (__gthread_active_p ())
+     700              :     return __gthrw_(pthread_once) (__once, __func);
+     701              :   else
+     702              :     return -1;
+     703              : }
+     704              : 
+     705              : static inline int
+     706              : __gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
+     707              : {
+     708              :   return __gthrw_(pthread_key_create) (__key, __dtor);
+     709              : }
+     710              : 
+     711              : static inline int
+     712              : __gthread_key_delete (__gthread_key_t __key)
+     713              : {
+     714              :   return __gthrw_(pthread_key_delete) (__key);
+     715              : }
+     716              : 
+     717              : static inline void *
+     718              : __gthread_getspecific (__gthread_key_t __key)
+     719              : {
+     720              :   return __gthrw_(pthread_getspecific) (__key);
+     721              : }
+     722              : 
+     723              : static inline int
+     724              : __gthread_setspecific (__gthread_key_t __key, const void *__ptr)
+     725              : {
+     726              :   return __gthrw_(pthread_setspecific) (__key, __ptr);
+     727              : }
+     728              : 
+     729              : static inline void
+     730              : __gthread_mutex_init_function (__gthread_mutex_t *__mutex)
+     731              : {
+     732              :   if (__gthread_active_p ())
+     733              :     __gthrw_(pthread_mutex_init) (__mutex, NULL);
+     734              : }
+     735              : 
+     736              : static inline int
+     737              : __gthread_mutex_destroy (__gthread_mutex_t *__mutex)
+     738              : {
+     739              :   if (__gthread_active_p ())
+     740              :     return __gthrw_(pthread_mutex_destroy) (__mutex);
+     741              :   else
+     742              :     return 0;
+     743              : }
+     744              : 
+     745              : static inline int
+     746      1595104 : __gthread_mutex_lock (__gthread_mutex_t *__mutex)
+     747              : {
+     748      1595104 :   if (__gthread_active_p ())
+     749      1595104 :     return __gthrw_(pthread_mutex_lock) (__mutex);
+     750              :   else
+     751            0 :     return 0;
+     752              : }
+     753              : 
+     754              : static inline int
+     755              : __gthread_mutex_trylock (__gthread_mutex_t *__mutex)
+     756              : {
+     757              :   if (__gthread_active_p ())
+     758              :     return __gthrw_(pthread_mutex_trylock) (__mutex);
+     759              :   else
+     760              :     return 0;
+     761              : }
+     762              : 
+     763              : #if _GTHREAD_USE_MUTEX_TIMEDLOCK
+     764              : static inline int
+     765              : __gthread_mutex_timedlock (__gthread_mutex_t *__mutex,
+     766              :                            const __gthread_time_t *__abs_timeout)
+     767              : {
+     768              :   if (__gthread_active_p ())
+     769              :     return __gthrw_(pthread_mutex_timedlock) (__mutex, __abs_timeout);
+     770              :   else
+     771              :     return 0;
+     772              : }
+     773              : #endif
+     774              : 
+     775              : static inline int
+     776      1595104 : __gthread_mutex_unlock (__gthread_mutex_t *__mutex)
+     777              : {
+     778      1595104 :   if (__gthread_active_p ())
+     779      1595104 :     return __gthrw_(pthread_mutex_unlock) (__mutex);
+     780              :   else
+     781            0 :     return 0;
+     782              : }
+     783              : 
+     784              : #if !defined( PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP) \
+     785              :   || defined(_GTHREAD_USE_RECURSIVE_MUTEX_INIT_FUNC)
+     786              : static inline int
+     787              : __gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex)
+     788              : {
+     789              :   if (__gthread_active_p ())
+     790              :     {
+     791              :       pthread_mutexattr_t __attr;
+     792              :       int __r;
+     793              : 
+     794              :       __r = __gthrw_(pthread_mutexattr_init) (&__attr);
+     795              :       if (!__r)
+     796              :         __r = __gthrw_(pthread_mutexattr_settype) (&__attr,
+     797              :                                                    PTHREAD_MUTEX_RECURSIVE);
+     798              :       if (!__r)
+     799              :         __r = __gthrw_(pthread_mutex_init) (__mutex, &__attr);
+     800              :       if (!__r)
+     801              :         __r = __gthrw_(pthread_mutexattr_destroy) (&__attr);
+     802              :       return __r;
+     803              :     }
+     804              :   return 0;
+     805              : }
+     806              : #endif
+     807              : 
+     808              : static inline int
+     809         3564 : __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
+     810              : {
+     811         3564 :   return __gthread_mutex_lock (__mutex);
+     812              : }
+     813              : 
+     814              : static inline int
+     815              : __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
+     816              : {
+     817              :   return __gthread_mutex_trylock (__mutex);
+     818              : }
+     819              : 
+     820              : #if _GTHREAD_USE_MUTEX_TIMEDLOCK
+     821              : static inline int
+     822              : __gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex,
+     823              :                                      const __gthread_time_t *__abs_timeout)
+     824              : {
+     825              :   return __gthread_mutex_timedlock (__mutex, __abs_timeout);
+     826              : }
+     827              : #endif
+     828              : 
+     829              : static inline int
+     830         3564 : __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
+     831              : {
+     832         3564 :   return __gthread_mutex_unlock (__mutex);
+     833              : }
+     834              : 
+     835              : static inline int
+     836              : __gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
+     837              : {
+     838              :   return __gthread_mutex_destroy (__mutex);
+     839              : }
+     840              : 
+     841              : #ifdef _GTHREAD_USE_COND_INIT_FUNC
+     842              : static inline void
+     843              : __gthread_cond_init_function (__gthread_cond_t *__cond)
+     844              : {
+     845              :   if (__gthread_active_p ())
+     846              :     __gthrw_(pthread_cond_init) (__cond, NULL);
+     847              : }
+     848              : #endif
+     849              : 
+     850              : static inline int
+     851              : __gthread_cond_broadcast (__gthread_cond_t *__cond)
+     852              : {
+     853              :   return __gthrw_(pthread_cond_broadcast) (__cond);
+     854              : }
+     855              : 
+     856              : static inline int
+     857              : __gthread_cond_signal (__gthread_cond_t *__cond)
+     858              : {
+     859              :   return __gthrw_(pthread_cond_signal) (__cond);
+     860              : }
+     861              : 
+     862              : static inline int
+     863              : __gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex)
+     864              : {
+     865              :   return __gthrw_(pthread_cond_wait) (__cond, __mutex);
+     866              : }
+     867              : 
+     868              : static inline int
+     869              : __gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex,
+     870              :                           const __gthread_time_t *__abs_timeout)
+     871              : {
+     872              :   return __gthrw_(pthread_cond_timedwait) (__cond, __mutex, __abs_timeout);
+     873              : }
+     874              : 
+     875              : static inline int
+     876              : __gthread_cond_wait_recursive (__gthread_cond_t *__cond,
+     877              :                                __gthread_recursive_mutex_t *__mutex)
+     878              : {
+     879              :   return __gthread_cond_wait (__cond, __mutex);
+     880              : }
+     881              : 
+     882              : static inline int
+     883              : __gthread_cond_destroy (__gthread_cond_t* __cond)
+     884              : {
+     885              :   return __gthrw_(pthread_cond_destroy) (__cond);
+     886              : }
+     887              : 
+     888              : #endif /* _LIBOBJC */
+     889              : 
+     890              : #endif /* ! _GLIBCXX_GCC_GTHR_POSIX_H */
+        
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/x86_64-redhat-linux/bits/index-sort-f.html b/html/usr/include/c++/13/x86_64-redhat-linux/bits/index-sort-f.html new file mode 100644 index 0000000..deabdba --- /dev/null +++ b/html/usr/include/c++/13/x86_64-redhat-linux/bits/index-sort-f.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/x86_64-redhat-linux/bits + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/x86_64-redhat-linux/bitsCoverageTotalHit
Test:coverage.infoLines:73.7 %1914
Test Date:2024-04-30 13:17:26Functions:85.7 %76
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
ctype_inline.h +
0.0%
+
0.0 %20.0 %1
c++config.h +
66.7%66.7%
+
66.7 %32100.0 %11
gthr-default.h +
85.7%85.7%
+
85.7 %1412100.0 %55
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/x86_64-redhat-linux/bits/index-sort-l.html b/html/usr/include/c++/13/x86_64-redhat-linux/bits/index-sort-l.html new file mode 100644 index 0000000..e5fecba --- /dev/null +++ b/html/usr/include/c++/13/x86_64-redhat-linux/bits/index-sort-l.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/x86_64-redhat-linux/bits + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/x86_64-redhat-linux/bitsCoverageTotalHit
Test:coverage.infoLines:73.7 %1914
Test Date:2024-04-30 13:17:26Functions:85.7 %76
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
ctype_inline.h +
0.0%
+
0.0 %20.0 %1
c++config.h +
66.7%66.7%
+
66.7 %32100.0 %11
gthr-default.h +
85.7%85.7%
+
85.7 %1412100.0 %55
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/html/usr/include/c++/13/x86_64-redhat-linux/bits/index.html b/html/usr/include/c++/13/x86_64-redhat-linux/bits/index.html new file mode 100644 index 0000000..7a97472 --- /dev/null +++ b/html/usr/include/c++/13/x86_64-redhat-linux/bits/index.html @@ -0,0 +1,129 @@ + + + + + + + LCOV - coverage.info - usr/include/c++/13/x86_64-redhat-linux/bits + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - /usr/include/c++/13/x86_64-redhat-linux/bitsCoverageTotalHit
Test:coverage.infoLines:73.7 %1914
Test Date:2024-04-30 13:17:26Functions:85.7 %76
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by file nameLine Coverage Sort by line coverageFunction Coverage Sort by function coverage
Rate Total Hit Rate Total Hit
c++config.h +
66.7%66.7%
+
66.7 %32100.0 %11
ctype_inline.h +
0.0%
+
0.0 %20.0 %1
gthr-default.h +
85.7%85.7%
+
85.7 %1412100.0 %55
+
+
+ + + + +
Generated by: LCOV version 2.0-1
+
+ + + diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index afd85b8..a58fa12 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -11,7 +11,7 @@ if(ENABLE_TESTING) add_executable(TestBayesNet TestBayesNetwork.cc TestBayesNode.cc TestBayesClassifier.cc TestBayesModels.cc TestBayesMetrics.cc TestFeatureSelection.cc TestBoostAODE.cc TestUtils.cc TestBayesEnsemble.cc ${BayesNet_SOURCES}) - target_link_libraries(TestBayesNet PUBLIC "${TORCH_LIBRARIES}" ArffFiles mdlp PRIVATE Catch2::Catch2WithMain ) + target_link_libraries(TestBayesNet PUBLIC "${TORCH_LIBRARIES}" ArffFiles mdlp PRIVATE Catch2::Catch2WithMain) add_test(NAME BayesNetworkTest COMMAND TestBayesNet) add_test(NAME Network COMMAND TestBayesNet "[Network]") add_test(NAME Node COMMAND TestBayesNet "[Node]") diff --git a/tests/TestFeatureSelection.cc b/tests/TestFeatureSelection.cc index b2dd4ce..7df3ad7 100644 --- a/tests/TestFeatureSelection.cc +++ b/tests/TestFeatureSelection.cc @@ -86,4 +86,12 @@ TEST_CASE("Oddities", "[FeatureSelection]") REQUIRE_THROWS_WITH(bayesnet::IWSS(raw.dataset, raw.features, raw.className, raw.features.size(), raw.classNumStates, raw.weights, -1e4), "Threshold has to be in [0, 0.5]"); REQUIRE_THROWS_AS(bayesnet::IWSS(raw.dataset, raw.features, raw.className, raw.features.size(), raw.classNumStates, raw.weights, 0.501), std::invalid_argument); REQUIRE_THROWS_WITH(bayesnet::IWSS(raw.dataset, raw.features, raw.className, raw.features.size(), raw.classNumStates, raw.weights, 0.501), "Threshold has to be in [0, 0.5]"); + // Not fitted error + auto selector = build_selector(raw, "CFS", 0); + const std::string message = "FeatureSelect not fitted"; + REQUIRE_THROWS_AS(selector->getFeatures(), std::runtime_error); + REQUIRE_THROWS_AS(selector->getScores(), std::runtime_error); + REQUIRE_THROWS_WITH(selector->getFeatures(), message); + REQUIRE_THROWS_WITH(selector->getScores(), message); + delete selector; } \ No newline at end of file